@open-mercato/core 0.7.1-develop.7193.1.910a5b0a1e → 0.7.1-develop.7194.1.ab4fc81f82
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 +4 -3
- package/agentic/standalone-guide.md +1 -1
- package/build.mjs +16 -0
- package/dist/generated/entities/action_log/index.js +2 -0
- package/dist/generated/entities/action_log/index.js.map +2 -2
- package/dist/generated/entities/user/index.js +2 -0
- package/dist/generated/entities/user/index.js.map +2 -2
- package/dist/generated/entities/user_task/index.js +14 -0
- package/dist/generated/entities/user_task/index.js.map +2 -2
- package/dist/generated/entities/workflow_definition/index.js +6 -0
- package/dist/generated/entities/workflow_definition/index.js.map +2 -2
- package/dist/generated/entities/workflow_definition_draft/index.js +25 -0
- package/dist/generated/entities/workflow_definition_draft/index.js.map +7 -0
- package/dist/generated/entities/workflow_definition_metric_rollup/index.js +23 -0
- package/dist/generated/entities/workflow_definition_metric_rollup/index.js.map +7 -0
- package/dist/generated/entities/workflow_instance/index.js +4 -0
- package/dist/generated/entities/workflow_instance/index.js.map +2 -2
- package/dist/generated/entities.ids.generated.js +4 -1
- package/dist/generated/entities.ids.generated.js.map +2 -2
- package/dist/generated/entity-fields-registry.js +39 -0
- package/dist/generated/entity-fields-registry.js.map +2 -2
- package/dist/helpers/integration/workflowsFixtures.js +477 -2
- package/dist/helpers/integration/workflowsFixtures.js.map +2 -2
- package/dist/helpers/integration/workflowsUi.js +148 -0
- package/dist/helpers/integration/workflowsUi.js.map +7 -0
- package/dist/modules/attachments/lib/createFromBuffer.js +79 -0
- package/dist/modules/attachments/lib/createFromBuffer.js.map +7 -0
- package/dist/modules/audit_logs/data/entities.js +5 -0
- package/dist/modules/audit_logs/data/entities.js.map +2 -2
- package/dist/modules/audit_logs/data/validators.js +1 -0
- package/dist/modules/audit_logs/data/validators.js.map +2 -2
- package/dist/modules/audit_logs/lib/projections.js +2 -1
- package/dist/modules/audit_logs/lib/projections.js.map +2 -2
- package/dist/modules/audit_logs/migrations/Migration20260625120000.js +15 -0
- package/dist/modules/audit_logs/migrations/Migration20260625120000.js.map +7 -0
- package/dist/modules/audit_logs/services/actionLogService.js +3 -0
- package/dist/modules/audit_logs/services/actionLogService.js.map +2 -2
- package/dist/modules/auth/data/entities.js +6 -0
- package/dist/modules/auth/data/entities.js.map +2 -2
- package/dist/modules/auth/lib/executionPrincipal.js +140 -0
- package/dist/modules/auth/lib/executionPrincipal.js.map +7 -0
- package/dist/modules/auth/migrations/Migration20260625050000.js +13 -0
- package/dist/modules/auth/migrations/Migration20260625050000.js.map +7 -0
- package/dist/modules/business_rules/components/InlineRuleEditor.js +154 -0
- package/dist/modules/business_rules/components/InlineRuleEditor.js.map +7 -0
- package/dist/modules/business_rules/data/validators.js +6 -0
- package/dist/modules/business_rules/data/validators.js.map +2 -2
- package/dist/modules/business_rules/lib/rule-engine.js +5 -3
- package/dist/modules/business_rules/lib/rule-engine.js.map +2 -2
- package/dist/modules/catalog/commands/products.js +5 -0
- package/dist/modules/catalog/commands/products.js.map +2 -2
- package/dist/modules/catalog/workflows.js +19 -0
- package/dist/modules/catalog/workflows.js.map +7 -0
- package/dist/modules/customer_accounts/backend/customer_accounts/roles/[id]/page.js +3 -1
- package/dist/modules/customer_accounts/backend/customer_accounts/roles/[id]/page.js.map +2 -2
- package/dist/modules/customer_accounts/cli.js +80 -0
- package/dist/modules/customer_accounts/cli.js.map +7 -0
- package/dist/modules/customer_accounts/lib/customerRoleAclSync.js +59 -0
- package/dist/modules/customer_accounts/lib/customerRoleAclSync.js.map +7 -0
- package/dist/modules/customer_accounts/setup.js +4 -2
- package/dist/modules/customer_accounts/setup.js.map +2 -2
- package/dist/modules/customers/commands/deals.js +4 -0
- package/dist/modules/customers/commands/deals.js.map +2 -2
- package/dist/modules/customers/components/detail/ChangelogEntryRow.js +1 -1
- package/dist/modules/customers/components/detail/ChangelogEntryRow.js.map +2 -2
- package/dist/modules/customers/components/detail/utils.js +2 -0
- package/dist/modules/customers/components/detail/utils.js.map +2 -2
- package/dist/modules/customers/events.js +13 -2
- package/dist/modules/customers/events.js.map +2 -2
- package/dist/modules/customers/lib/link-workflow-task-handler.js +64 -0
- package/dist/modules/customers/lib/link-workflow-task-handler.js.map +7 -0
- package/dist/modules/customers/lib/todoCompatibility.js +1 -1
- package/dist/modules/customers/lib/todoCompatibility.js.map +2 -2
- package/dist/modules/customers/lib/workflowTaskLink.js +9 -0
- package/dist/modules/customers/lib/workflowTaskLink.js.map +7 -0
- package/dist/modules/customers/subscribers/link-workflow-task.js +12 -0
- package/dist/modules/customers/subscribers/link-workflow-task.js.map +7 -0
- package/dist/modules/customers/workflows.js +29 -0
- package/dist/modules/customers/workflows.js.map +7 -0
- package/dist/modules/entities/api/records.js +13 -33
- package/dist/modules/entities/api/records.js.map +3 -3
- package/dist/modules/entities/lib/entityClassification.js +60 -0
- package/dist/modules/entities/lib/entityClassification.js.map +7 -0
- package/dist/modules/sales/commands/documents.js +31 -0
- package/dist/modules/sales/commands/documents.js.map +2 -2
- package/dist/modules/sales/events.js +12 -1
- package/dist/modules/sales/events.js.map +2 -2
- package/dist/modules/sales/workflows.js +12 -1
- package/dist/modules/sales/workflows.js.map +2 -2
- package/dist/modules/seeds/cli.js +199 -0
- package/dist/modules/seeds/cli.js.map +7 -0
- package/dist/modules/seeds/examples/sample-seed.json +26 -0
- package/dist/modules/seeds/index.js +12 -0
- package/dist/modules/seeds/index.js.map +7 -0
- package/dist/modules/workflows/acl.js +96 -0
- package/dist/modules/workflows/acl.js.map +2 -2
- package/dist/modules/workflows/ai-agents.js +50 -0
- package/dist/modules/workflows/ai-agents.js.map +7 -0
- package/dist/modules/workflows/ai-tools/authoring-pack.js +582 -0
- package/dist/modules/workflows/ai-tools/authoring-pack.js.map +7 -0
- package/dist/modules/workflows/ai-tools/types.js +43 -0
- package/dist/modules/workflows/ai-tools/types.js.map +7 -0
- package/dist/modules/workflows/ai-tools.js +10 -0
- package/dist/modules/workflows/ai-tools.js.map +7 -0
- package/dist/modules/workflows/api/command-settings/route.js +137 -0
- package/dist/modules/workflows/api/command-settings/route.js.map +7 -0
- package/dist/modules/workflows/api/commands/route.js +72 -0
- package/dist/modules/workflows/api/commands/route.js.map +7 -0
- package/dist/modules/workflows/api/definitions/[id]/callers/route.js +76 -0
- package/dist/modules/workflows/api/definitions/[id]/callers/route.js.map +7 -0
- package/dist/modules/workflows/api/definitions/[id]/context-schema/route.js +134 -0
- package/dist/modules/workflows/api/definitions/[id]/context-schema/route.js.map +7 -0
- package/dist/modules/workflows/api/definitions/[id]/customize/route.js +5 -1
- package/dist/modules/workflows/api/definitions/[id]/customize/route.js.map +2 -2
- package/dist/modules/workflows/api/definitions/[id]/draft/route.js +286 -0
- package/dist/modules/workflows/api/definitions/[id]/draft/route.js.map +7 -0
- package/dist/modules/workflows/api/definitions/[id]/publish/route.js +207 -0
- package/dist/modules/workflows/api/definitions/[id]/publish/route.js.map +7 -0
- package/dist/modules/workflows/api/definitions/[id]/reset-to-code/route.js +5 -0
- package/dist/modules/workflows/api/definitions/[id]/reset-to-code/route.js.map +2 -2
- package/dist/modules/workflows/api/definitions/[id]/route.js +93 -9
- package/dist/modules/workflows/api/definitions/[id]/route.js.map +3 -3
- package/dist/modules/workflows/api/definitions/[id]/test-step/route.js +210 -0
- package/dist/modules/workflows/api/definitions/[id]/test-step/route.js.map +7 -0
- package/dist/modules/workflows/api/definitions/generate/route.js +233 -0
- package/dist/modules/workflows/api/definitions/generate/route.js.map +7 -0
- package/dist/modules/workflows/api/definitions/route.js +61 -113
- package/dist/modules/workflows/api/definitions/route.js.map +2 -2
- package/dist/modules/workflows/api/definitions/serialize.js +9 -0
- package/dist/modules/workflows/api/definitions/serialize.js.map +2 -2
- package/dist/modules/workflows/api/endpoints/route.js +69 -0
- package/dist/modules/workflows/api/endpoints/route.js.map +7 -0
- package/dist/modules/workflows/api/functions/route.js +73 -0
- package/dist/modules/workflows/api/functions/route.js.map +7 -0
- package/dist/modules/workflows/api/grantable-features/route.js +75 -0
- package/dist/modules/workflows/api/grantable-features/route.js.map +7 -0
- package/dist/modules/workflows/api/instances/[id]/context/route.js +180 -0
- package/dist/modules/workflows/api/instances/[id]/context/route.js.map +7 -0
- package/dist/modules/workflows/api/instances/[id]/rerun-step/route.js +184 -0
- package/dist/modules/workflows/api/instances/[id]/rerun-step/route.js.map +7 -0
- package/dist/modules/workflows/api/instances/[id]/retry/route.js +12 -2
- package/dist/modules/workflows/api/instances/[id]/retry/route.js.map +2 -2
- package/dist/modules/workflows/api/instances/[id]/step-through/route.js +148 -0
- package/dist/modules/workflows/api/instances/[id]/step-through/route.js.map +7 -0
- package/dist/modules/workflows/api/instances/[id]/steps/route.js +123 -0
- package/dist/modules/workflows/api/instances/[id]/steps/route.js.map +7 -0
- package/dist/modules/workflows/api/instances/[id]/would-do/route.js +172 -0
- package/dist/modules/workflows/api/instances/[id]/would-do/route.js.map +7 -0
- package/dist/modules/workflows/api/instances/bulk-replay/route.js +117 -0
- package/dist/modules/workflows/api/instances/bulk-replay/route.js.map +7 -0
- package/dist/modules/workflows/api/instances/failure-queue/route.js +165 -0
- package/dist/modules/workflows/api/instances/failure-queue/route.js.map +7 -0
- package/dist/modules/workflows/api/instances/route.js +94 -3
- package/dist/modules/workflows/api/instances/route.js.map +2 -2
- package/dist/modules/workflows/api/metrics/definitions/route.js +188 -0
- package/dist/modules/workflows/api/metrics/definitions/route.js.map +7 -0
- package/dist/modules/workflows/api/openapi.js +415 -4
- package/dist/modules/workflows/api/openapi.js.map +2 -2
- package/dist/modules/workflows/api/portal/tasks/[id]/complete/route.js +132 -0
- package/dist/modules/workflows/api/portal/tasks/[id]/complete/route.js.map +7 -0
- package/dist/modules/workflows/api/portal/tasks/[id]/route.js +97 -0
- package/dist/modules/workflows/api/portal/tasks/[id]/route.js.map +7 -0
- package/dist/modules/workflows/api/portal/tasks/route.js +126 -0
- package/dist/modules/workflows/api/portal/tasks/route.js.map +7 -0
- package/dist/modules/workflows/api/rule-usage/route.js +80 -0
- package/dist/modules/workflows/api/rule-usage/route.js.map +7 -0
- package/dist/modules/workflows/api/task-settings/route.js +107 -0
- package/dist/modules/workflows/api/task-settings/route.js.map +7 -0
- package/dist/modules/workflows/api/tasks/[id]/claim/route.js +27 -16
- package/dist/modules/workflows/api/tasks/[id]/claim/route.js.map +2 -2
- package/dist/modules/workflows/api/tasks/[id]/complete/route.js +40 -16
- package/dist/modules/workflows/api/tasks/[id]/complete/route.js.map +2 -2
- package/dist/modules/workflows/api/tasks/[id]/reassign/route.js +150 -0
- package/dist/modules/workflows/api/tasks/[id]/reassign/route.js.map +7 -0
- package/dist/modules/workflows/api/tasks/[id]/route.js +39 -6
- package/dist/modules/workflows/api/tasks/[id]/route.js.map +2 -2
- package/dist/modules/workflows/api/tasks/[id]/unclaim/route.js +100 -0
- package/dist/modules/workflows/api/tasks/[id]/unclaim/route.js.map +7 -0
- package/dist/modules/workflows/api/tasks/route.js +37 -6
- package/dist/modules/workflows/api/tasks/route.js.map +2 -2
- package/dist/modules/workflows/api/tasks/serialize.js +83 -0
- package/dist/modules/workflows/api/tasks/serialize.js.map +7 -0
- package/dist/modules/workflows/api/templates/route.js +69 -0
- package/dist/modules/workflows/api/templates/route.js.map +7 -0
- package/dist/modules/workflows/api/work-inbox/next/route.js +129 -0
- package/dist/modules/workflows/api/work-inbox/next/route.js.map +7 -0
- package/dist/modules/workflows/api/work-inbox/route.js +119 -0
- package/dist/modules/workflows/api/work-inbox/route.js.map +7 -0
- package/dist/modules/workflows/backend/config/workflows/page.js +10 -0
- package/dist/modules/workflows/backend/config/workflows/page.js.map +7 -0
- package/dist/modules/workflows/backend/config/workflows/page.meta.js +35 -0
- package/dist/modules/workflows/backend/config/workflows/page.meta.js.map +7 -0
- package/dist/modules/workflows/backend/definitions/[id]/page.js +6 -271
- package/dist/modules/workflows/backend/definitions/[id]/page.js.map +3 -3
- package/dist/modules/workflows/backend/definitions/create/page.js +7 -56
- package/dist/modules/workflows/backend/definitions/create/page.js.map +2 -2
- package/dist/modules/workflows/backend/definitions/create/page.meta.js +1 -1
- package/dist/modules/workflows/backend/definitions/create/page.meta.js.map +2 -2
- package/dist/modules/workflows/backend/definitions/page.js +131 -51
- package/dist/modules/workflows/backend/definitions/page.js.map +2 -2
- package/dist/modules/workflows/backend/definitions/visual-editor/page.js +2606 -677
- package/dist/modules/workflows/backend/definitions/visual-editor/page.js.map +3 -3
- package/dist/modules/workflows/backend/instances/[id]/page.js +532 -421
- package/dist/modules/workflows/backend/instances/[id]/page.js.map +2 -2
- package/dist/modules/workflows/backend/instances/[id]/page.meta.js +1 -1
- package/dist/modules/workflows/backend/instances/[id]/page.meta.js.map +1 -1
- package/dist/modules/workflows/backend/instances/failure-queue/page.js +211 -0
- package/dist/modules/workflows/backend/instances/failure-queue/page.js.map +7 -0
- package/dist/modules/workflows/backend/instances/failure-queue/page.meta.js +20 -0
- package/dist/modules/workflows/backend/instances/failure-queue/page.meta.js.map +7 -0
- package/dist/modules/workflows/backend/instances/page.js +159 -22
- package/dist/modules/workflows/backend/instances/page.js.map +2 -2
- package/dist/modules/workflows/backend/instances/page.meta.js +1 -1
- package/dist/modules/workflows/backend/instances/page.meta.js.map +1 -1
- package/dist/modules/workflows/backend/tasks/[id]/page.js +553 -392
- package/dist/modules/workflows/backend/tasks/[id]/page.js.map +3 -3
- package/dist/modules/workflows/backend/tasks/page.js +8 -250
- package/dist/modules/workflows/backend/tasks/page.js.map +2 -2
- package/dist/modules/workflows/backend/tasks/page.meta.js +1 -0
- package/dist/modules/workflows/backend/tasks/page.meta.js.map +2 -2
- package/dist/modules/workflows/backend/work-inbox/page.js +399 -0
- package/dist/modules/workflows/backend/work-inbox/page.js.map +7 -0
- package/dist/modules/workflows/backend/work-inbox/page.meta.js +19 -0
- package/dist/modules/workflows/backend/work-inbox/page.meta.js.map +7 -0
- package/dist/modules/workflows/cli.js +1 -1
- package/dist/modules/workflows/cli.js.map +2 -2
- package/dist/modules/workflows/commands/tasks.js +81 -0
- package/dist/modules/workflows/commands/tasks.js.map +7 -0
- package/dist/modules/workflows/components/ActivitiesEditor.js +281 -287
- package/dist/modules/workflows/components/ActivitiesEditor.js.map +2 -2
- package/dist/modules/workflows/components/ActivityEditDialog.js +220 -0
- package/dist/modules/workflows/components/ActivityEditDialog.js.map +7 -0
- package/dist/modules/workflows/components/AgentSelector.js +115 -0
- package/dist/modules/workflows/components/AgentSelector.js.map +7 -0
- package/dist/modules/workflows/components/AnnotationEditDialog.js +110 -0
- package/dist/modules/workflows/components/AnnotationEditDialog.js.map +7 -0
- package/dist/modules/workflows/components/BusinessRuleUsagePanel.js +71 -0
- package/dist/modules/workflows/components/BusinessRuleUsagePanel.js.map +7 -0
- package/dist/modules/workflows/components/BusinessRulesSelector.js +151 -93
- package/dist/modules/workflows/components/BusinessRulesSelector.js.map +2 -2
- package/dist/modules/workflows/components/ConfigJsonTextarea.js +85 -0
- package/dist/modules/workflows/components/ConfigJsonTextarea.js.map +7 -0
- package/dist/modules/workflows/components/ContextSchemaEditor.js +150 -0
- package/dist/modules/workflows/components/ContextSchemaEditor.js.map +7 -0
- package/dist/modules/workflows/components/DefinitionErrorHandlerField.js +102 -0
- package/dist/modules/workflows/components/DefinitionErrorHandlerField.js.map +7 -0
- package/dist/modules/workflows/components/DefinitionMetadataDrawer.js +377 -0
- package/dist/modules/workflows/components/DefinitionMetadataDrawer.js.map +7 -0
- package/dist/modules/workflows/components/DefinitionMetricsCells.js +132 -0
- package/dist/modules/workflows/components/DefinitionMetricsCells.js.map +7 -0
- package/dist/modules/workflows/components/DefinitionTriggersEditor.js +307 -216
- package/dist/modules/workflows/components/DefinitionTriggersEditor.js.map +2 -2
- package/dist/modules/workflows/components/EdgeEditDialog.js +11 -18
- package/dist/modules/workflows/components/EdgeEditDialog.js.map +2 -2
- package/dist/modules/workflows/components/EdgeEditDialogCrudForm.js +112 -72
- package/dist/modules/workflows/components/EdgeEditDialogCrudForm.js.map +2 -2
- package/dist/modules/workflows/components/InputDataPanel.js +128 -0
- package/dist/modules/workflows/components/InputDataPanel.js.map +7 -0
- package/dist/modules/workflows/components/InspectorPanel.js +161 -0
- package/dist/modules/workflows/components/InspectorPanel.js.map +7 -0
- package/dist/modules/workflows/components/NodeEditDialog.js +363 -41
- package/dist/modules/workflows/components/NodeEditDialog.js.map +2 -2
- package/dist/modules/workflows/components/NodeEditDialogCrudForm.js +714 -159
- package/dist/modules/workflows/components/NodeEditDialogCrudForm.js.map +2 -2
- package/dist/modules/workflows/components/StepsEditor.js.map +2 -2
- package/dist/modules/workflows/components/TemplateGalleryDialog.js +148 -0
- package/dist/modules/workflows/components/TemplateGalleryDialog.js.map +7 -0
- package/dist/modules/workflows/components/TransitionsEditor.js +80 -74
- package/dist/modules/workflows/components/TransitionsEditor.js.map +2 -2
- package/dist/modules/workflows/components/TriggersDialog.js +53 -0
- package/dist/modules/workflows/components/TriggersDialog.js.map +7 -0
- package/dist/modules/workflows/components/TriggersEditor.js +331 -0
- package/dist/modules/workflows/components/TriggersEditor.js.map +7 -0
- package/dist/modules/workflows/components/WorkflowAiDraftDialog.js +278 -0
- package/dist/modules/workflows/components/WorkflowAiDraftDialog.js.map +7 -0
- package/dist/modules/workflows/components/WorkflowCodeView.js +173 -0
- package/dist/modules/workflows/components/WorkflowCodeView.js.map +7 -0
- package/dist/modules/workflows/components/WorkflowCommandPalette.js +62 -0
- package/dist/modules/workflows/components/WorkflowCommandPalette.js.map +7 -0
- package/dist/modules/workflows/components/WorkflowCompensationGhostEdge.js +70 -0
- package/dist/modules/workflows/components/WorkflowCompensationGhostEdge.js.map +7 -0
- package/dist/modules/workflows/components/WorkflowDataMappingEdge.js +36 -0
- package/dist/modules/workflows/components/WorkflowDataMappingEdge.js.map +7 -0
- package/dist/modules/workflows/components/WorkflowGraph.js +4 -2
- package/dist/modules/workflows/components/WorkflowGraph.js.map +2 -2
- package/dist/modules/workflows/components/WorkflowGraphImpl.js +324 -86
- package/dist/modules/workflows/components/WorkflowGraphImpl.js.map +3 -3
- package/dist/modules/workflows/components/WorkflowIconPicker.js +109 -0
- package/dist/modules/workflows/components/WorkflowIconPicker.js.map +7 -0
- package/dist/modules/workflows/components/WorkflowLegend.js +45 -29
- package/dist/modules/workflows/components/WorkflowLegend.js.map +2 -2
- package/dist/modules/workflows/components/WorkflowNodeCard.js +221 -22
- package/dist/modules/workflows/components/WorkflowNodeCard.js.map +2 -2
- package/dist/modules/workflows/components/WorkflowRouteChips.js +111 -0
- package/dist/modules/workflows/components/WorkflowRouteChips.js.map +7 -0
- package/dist/modules/workflows/components/WorkflowSelector.js +108 -88
- package/dist/modules/workflows/components/WorkflowSelector.js.map +2 -2
- package/dist/modules/workflows/components/WorkflowTransitionEdge.js +61 -11
- package/dist/modules/workflows/components/WorkflowTransitionEdge.js.map +2 -2
- package/dist/modules/workflows/components/WorkflowTransitionLabel.js +15 -5
- package/dist/modules/workflows/components/WorkflowTransitionLabel.js.map +2 -2
- package/dist/modules/workflows/components/fields/ActivityArrayEditor.js +88 -21
- package/dist/modules/workflows/components/fields/ActivityArrayEditor.js.map +2 -2
- package/dist/modules/workflows/components/fields/ActivityConfigFields.js +615 -0
- package/dist/modules/workflows/components/fields/ActivityConfigFields.js.map +7 -0
- package/dist/modules/workflows/components/fields/ActivityTestPanel.js +191 -0
- package/dist/modules/workflows/components/fields/ActivityTestPanel.js.map +7 -0
- package/dist/modules/workflows/components/fields/AgentInvokeConfigField.js +488 -0
- package/dist/modules/workflows/components/fields/AgentInvokeConfigField.js.map +7 -0
- package/dist/modules/workflows/components/fields/AgentReviewOnBreachField.js +61 -0
- package/dist/modules/workflows/components/fields/AgentReviewOnBreachField.js.map +7 -0
- package/dist/modules/workflows/components/fields/BranchingRoutesEditor.js +227 -0
- package/dist/modules/workflows/components/fields/BranchingRoutesEditor.js.map +7 -0
- package/dist/modules/workflows/components/fields/BusinessRuleConditionsEditor.js +37 -4
- package/dist/modules/workflows/components/fields/BusinessRuleConditionsEditor.js.map +2 -2
- package/dist/modules/workflows/components/fields/CommandPicker.js +111 -0
- package/dist/modules/workflows/components/fields/CommandPicker.js.map +7 -0
- package/dist/modules/workflows/components/fields/EndpointPicker.js +235 -0
- package/dist/modules/workflows/components/fields/EndpointPicker.js.map +7 -0
- package/dist/modules/workflows/components/fields/FormFieldArrayEditor.js +2 -2
- package/dist/modules/workflows/components/fields/FormFieldArrayEditor.js.map +2 -2
- package/dist/modules/workflows/components/fields/FunctionPicker.js +55 -0
- package/dist/modules/workflows/components/fields/FunctionPicker.js.map +7 -0
- package/dist/modules/workflows/components/fields/MappingArrayEditor.js +38 -15
- package/dist/modules/workflows/components/fields/MappingArrayEditor.js.map +2 -2
- package/dist/modules/workflows/components/fields/PortFieldArrayEditor.js +206 -0
- package/dist/modules/workflows/components/fields/PortFieldArrayEditor.js.map +7 -0
- package/dist/modules/workflows/components/fields/RolesMultiSelect.js +53 -0
- package/dist/modules/workflows/components/fields/RolesMultiSelect.js.map +7 -0
- package/dist/modules/workflows/components/fields/RouteOrderEditor.js +130 -0
- package/dist/modules/workflows/components/fields/RouteOrderEditor.js.map +7 -0
- package/dist/modules/workflows/components/fields/SchemaBuilderDialog.js +104 -0
- package/dist/modules/workflows/components/fields/SchemaBuilderDialog.js.map +7 -0
- package/dist/modules/workflows/components/fields/StartPreConditionsEditor.js +2 -2
- package/dist/modules/workflows/components/fields/StartPreConditionsEditor.js.map +2 -2
- package/dist/modules/workflows/components/fields/TaskAssignmentField.js +210 -0
- package/dist/modules/workflows/components/fields/TaskAssignmentField.js.map +7 -0
- package/dist/modules/workflows/components/fields/TaskDeadlineFields.js +126 -0
- package/dist/modules/workflows/components/fields/TaskDeadlineFields.js.map +7 -0
- package/dist/modules/workflows/components/fields/TaskDecisionsField.js +218 -0
- package/dist/modules/workflows/components/fields/TaskDecisionsField.js.map +7 -0
- package/dist/modules/workflows/components/fields/TaskEntityBindingsField.js +114 -0
- package/dist/modules/workflows/components/fields/TaskEntityBindingsField.js.map +7 -0
- package/dist/modules/workflows/components/fields/TemplateTextControl.js +64 -0
- package/dist/modules/workflows/components/fields/TemplateTextControl.js.map +7 -0
- package/dist/modules/workflows/components/fields/VariablePickerButton.js +121 -0
- package/dist/modules/workflows/components/fields/VariablePickerButton.js.map +7 -0
- package/dist/modules/workflows/components/fields/ledgerDropTarget.js +35 -0
- package/dist/modules/workflows/components/fields/ledgerDropTarget.js.map +7 -0
- package/dist/modules/workflows/components/fields/useActivityTypeOptions.js +16 -0
- package/dist/modules/workflows/components/fields/useActivityTypeOptions.js.map +7 -0
- package/dist/modules/workflows/components/formConfig.js +39 -10
- package/dist/modules/workflows/components/formConfig.js.map +2 -2
- package/dist/modules/workflows/components/mobile/MobileDefinitionDetail.js.map +2 -2
- package/dist/modules/workflows/components/mobile/MobileMetadataSheet.js.map +2 -2
- package/dist/modules/workflows/components/mobile/MobileTaskForm.js +29 -2
- package/dist/modules/workflows/components/mobile/MobileTaskForm.js.map +2 -2
- package/dist/modules/workflows/components/mobile/MobileVisualEditor.js +64 -65
- package/dist/modules/workflows/components/mobile/MobileVisualEditor.js.map +2 -2
- package/dist/modules/workflows/components/nodes/AnnotationGroupNode.js +64 -0
- package/dist/modules/workflows/components/nodes/AnnotationGroupNode.js.map +7 -0
- package/dist/modules/workflows/components/nodes/AutomatedNode.js +24 -16
- package/dist/modules/workflows/components/nodes/AutomatedNode.js.map +2 -2
- package/dist/modules/workflows/components/nodes/EndNode.js +13 -12
- package/dist/modules/workflows/components/nodes/EndNode.js.map +2 -2
- package/dist/modules/workflows/components/nodes/ErrorOutputHandle.js +29 -0
- package/dist/modules/workflows/components/nodes/ErrorOutputHandle.js.map +7 -0
- package/dist/modules/workflows/components/nodes/IfElseNode.js +51 -0
- package/dist/modules/workflows/components/nodes/IfElseNode.js.map +7 -0
- package/dist/modules/workflows/components/nodes/InvokeAgentNode.js +122 -0
- package/dist/modules/workflows/components/nodes/InvokeAgentNode.js.map +7 -0
- package/dist/modules/workflows/components/nodes/NodeOutcomeRows.js +100 -0
- package/dist/modules/workflows/components/nodes/NodeOutcomeRows.js.map +7 -0
- package/dist/modules/workflows/components/nodes/ParallelForkNode.js +18 -14
- package/dist/modules/workflows/components/nodes/ParallelForkNode.js.map +2 -2
- package/dist/modules/workflows/components/nodes/ParallelJoinNode.js +18 -14
- package/dist/modules/workflows/components/nodes/ParallelJoinNode.js.map +2 -2
- package/dist/modules/workflows/components/nodes/StartNode.js +66 -15
- package/dist/modules/workflows/components/nodes/StartNode.js.map +2 -2
- package/dist/modules/workflows/components/nodes/StickyNoteNode.js +54 -0
- package/dist/modules/workflows/components/nodes/StickyNoteNode.js.map +7 -0
- package/dist/modules/workflows/components/nodes/SubWorkflowNode.js +107 -41
- package/dist/modules/workflows/components/nodes/SubWorkflowNode.js.map +2 -2
- package/dist/modules/workflows/components/nodes/SwitchNode.js +51 -0
- package/dist/modules/workflows/components/nodes/SwitchNode.js.map +7 -0
- package/dist/modules/workflows/components/nodes/TriggerCap.js +65 -0
- package/dist/modules/workflows/components/nodes/TriggerCap.js.map +7 -0
- package/dist/modules/workflows/components/nodes/TriggerNode.js +111 -0
- package/dist/modules/workflows/components/nodes/TriggerNode.js.map +7 -0
- package/dist/modules/workflows/components/nodes/UserTaskNode.js +43 -17
- package/dist/modules/workflows/components/nodes/UserTaskNode.js.map +2 -2
- package/dist/modules/workflows/components/nodes/WaitForConditionNode.js +53 -0
- package/dist/modules/workflows/components/nodes/WaitForConditionNode.js.map +7 -0
- package/dist/modules/workflows/components/nodes/WaitForSignalNode.js +21 -15
- package/dist/modules/workflows/components/nodes/WaitForSignalNode.js.map +2 -2
- package/dist/modules/workflows/components/nodes/WaitForTimerNode.js +21 -15
- package/dist/modules/workflows/components/nodes/WaitForTimerNode.js.map +2 -2
- package/dist/modules/workflows/components/nodes/index.js +14 -0
- package/dist/modules/workflows/components/nodes/index.js.map +2 -2
- package/dist/modules/workflows/components/portal/PortalTaskForm.js +196 -0
- package/dist/modules/workflows/components/portal/PortalTaskForm.js.map +7 -0
- package/dist/modules/workflows/components/run/AgentActivityPanel.js +22 -0
- package/dist/modules/workflows/components/run/AgentActivityPanel.js.map +7 -0
- package/dist/modules/workflows/components/run/RerunStepDialog.js +106 -0
- package/dist/modules/workflows/components/run/RerunStepDialog.js.map +7 -0
- package/dist/modules/workflows/components/run/RunEventBadge.js +30 -0
- package/dist/modules/workflows/components/run/RunEventBadge.js.map +7 -0
- package/dist/modules/workflows/components/run/RunGantt.js +130 -0
- package/dist/modules/workflows/components/run/RunGantt.js.map +7 -0
- package/dist/modules/workflows/components/run/RunStatusBadge.js +82 -0
- package/dist/modules/workflows/components/run/RunStatusBadge.js.map +7 -0
- package/dist/modules/workflows/components/run/RunStepInspector.js +116 -0
- package/dist/modules/workflows/components/run/RunStepInspector.js.map +7 -0
- package/dist/modules/workflows/components/run/WouldDoReport.js +52 -0
- package/dist/modules/workflows/components/run/WouldDoReport.js.map +7 -0
- package/dist/modules/workflows/components/run/useAgentLabels.js +28 -0
- package/dist/modules/workflows/components/run/useAgentLabels.js.map +7 -0
- package/dist/modules/workflows/components/run/useLastRunOverlay.js +89 -0
- package/dist/modules/workflows/components/run/useLastRunOverlay.js.map +7 -0
- package/dist/modules/workflows/components/run/useLiveAgentActions.js +41 -0
- package/dist/modules/workflows/components/run/useLiveAgentActions.js.map +7 -0
- package/dist/modules/workflows/components/run/useLiveRunUpdates.js +57 -0
- package/dist/modules/workflows/components/run/useLiveRunUpdates.js.map +7 -0
- package/dist/modules/workflows/components/settings/CommandSettingsPageClient.js +156 -0
- package/dist/modules/workflows/components/settings/CommandSettingsPageClient.js.map +7 -0
- package/dist/modules/workflows/components/work-inbox/EntityContextPanel.js +72 -0
- package/dist/modules/workflows/components/work-inbox/EntityContextPanel.js.map +7 -0
- package/dist/modules/workflows/components/work-inbox/ReassignTaskDialog.js +156 -0
- package/dist/modules/workflows/components/work-inbox/ReassignTaskDialog.js.map +7 -0
- package/dist/modules/workflows/components/work-inbox/StatusChip.js +46 -0
- package/dist/modules/workflows/components/work-inbox/StatusChip.js.map +7 -0
- package/dist/modules/workflows/components/work-inbox/TaskActionNotice.js +53 -0
- package/dist/modules/workflows/components/work-inbox/TaskActionNotice.js.map +7 -0
- package/dist/modules/workflows/components/work-inbox/TaskFormFields.js +261 -0
- package/dist/modules/workflows/components/work-inbox/TaskFormFields.js.map +7 -0
- package/dist/modules/workflows/components/work-inbox/WorkInboxEmptyState.js +27 -0
- package/dist/modules/workflows/components/work-inbox/WorkInboxEmptyState.js.map +7 -0
- package/dist/modules/workflows/data/activity-config-schemas.js +191 -0
- package/dist/modules/workflows/data/activity-config-schemas.js.map +7 -0
- package/dist/modules/workflows/data/activity-config-warnings.js +42 -0
- package/dist/modules/workflows/data/activity-config-warnings.js.map +7 -0
- package/dist/modules/workflows/data/branching-route-warnings.js +65 -0
- package/dist/modules/workflows/data/branching-route-warnings.js.map +7 -0
- package/dist/modules/workflows/data/entities.js +144 -4
- package/dist/modules/workflows/data/entities.js.map +2 -2
- package/dist/modules/workflows/data/metrics-validators.js +35 -0
- package/dist/modules/workflows/data/metrics-validators.js.map +7 -0
- package/dist/modules/workflows/data/task-primitives.js +14 -0
- package/dist/modules/workflows/data/task-primitives.js.map +7 -0
- package/dist/modules/workflows/data/validators.js +504 -61
- package/dist/modules/workflows/data/validators.js.map +3 -3
- package/dist/modules/workflows/di.js +16 -1
- package/dist/modules/workflows/di.js.map +2 -2
- package/dist/modules/workflows/events.js +66 -8
- package/dist/modules/workflows/events.js.map +2 -2
- package/dist/modules/workflows/examples/oze-residential-install-60-nodes.json +1545 -0
- package/dist/modules/workflows/examples/sales-pipeline-definition.json +35 -35
- package/dist/modules/workflows/examples/templates/lead-to-install.json +160 -0
- package/dist/modules/workflows/examples/templates/order-approval.json +230 -0
- package/dist/modules/workflows/examples/templates/task-escalation.json +110 -0
- package/dist/modules/workflows/examples/templates/webhook-integration.json +113 -0
- package/dist/modules/workflows/extension-points.js +1 -1
- package/dist/modules/workflows/extension-points.js.map +2 -2
- package/dist/modules/workflows/frontend/[orgSlug]/portal/tasks/[id]/page.js +144 -0
- package/dist/modules/workflows/frontend/[orgSlug]/portal/tasks/[id]/page.js.map +7 -0
- package/dist/modules/workflows/frontend/[orgSlug]/portal/tasks/[id]/page.meta.js +12 -0
- package/dist/modules/workflows/frontend/[orgSlug]/portal/tasks/[id]/page.meta.js.map +7 -0
- package/dist/modules/workflows/frontend/[orgSlug]/portal/tasks/page.js +114 -0
- package/dist/modules/workflows/frontend/[orgSlug]/portal/tasks/page.js.map +7 -0
- package/dist/modules/workflows/frontend/[orgSlug]/portal/tasks/page.meta.js +18 -0
- package/dist/modules/workflows/frontend/[orgSlug]/portal/tasks/page.meta.js.map +7 -0
- package/dist/modules/workflows/lib/activity-executor.js +505 -137
- package/dist/modules/workflows/lib/activity-executor.js.map +3 -3
- package/dist/modules/workflows/lib/activity-queue-types.js +3 -1
- package/dist/modules/workflows/lib/activity-queue-types.js.map +2 -2
- package/dist/modules/workflows/lib/activity-registry-bootstrap.js +2 -0
- package/dist/modules/workflows/lib/activity-registry-bootstrap.js.map +7 -0
- package/dist/modules/workflows/lib/activity-registry.js +27 -0
- package/dist/modules/workflows/lib/activity-registry.js.map +7 -0
- package/dist/modules/workflows/lib/activity-types.js +291 -0
- package/dist/modules/workflows/lib/activity-types.js.map +7 -0
- package/dist/modules/workflows/lib/activity-worker-handler.js +456 -32
- package/dist/modules/workflows/lib/activity-worker-handler.js.map +3 -3
- package/dist/modules/workflows/lib/advanced-config.js +31 -0
- package/dist/modules/workflows/lib/advanced-config.js.map +7 -0
- package/dist/modules/workflows/lib/agent-disposition-task.js +198 -0
- package/dist/modules/workflows/lib/agent-disposition-task.js.map +7 -0
- package/dist/modules/workflows/lib/agent-outcome-paths.js +82 -0
- package/dist/modules/workflows/lib/agent-outcome-paths.js.map +7 -0
- package/dist/modules/workflows/lib/agent-result-mapping.js +54 -0
- package/dist/modules/workflows/lib/agent-result-mapping.js.map +7 -0
- package/dist/modules/workflows/lib/agent-review-inspector.js +61 -0
- package/dist/modules/workflows/lib/agent-review-inspector.js.map +7 -0
- package/dist/modules/workflows/lib/agent-review.js +66 -0
- package/dist/modules/workflows/lib/agent-review.js.map +7 -0
- package/dist/modules/workflows/lib/ai-authoring.js +155 -0
- package/dist/modules/workflows/lib/ai-authoring.js.map +7 -0
- package/dist/modules/workflows/lib/ai-draft-runner.js +43 -0
- package/dist/modules/workflows/lib/ai-draft-runner.js.map +7 -0
- package/dist/modules/workflows/lib/annotation-events.js +10 -0
- package/dist/modules/workflows/lib/annotation-events.js.map +7 -0
- package/dist/modules/workflows/lib/branching-routes.js +182 -0
- package/dist/modules/workflows/lib/branching-routes.js.map +7 -0
- package/dist/modules/workflows/lib/breach-routing.js +50 -0
- package/dist/modules/workflows/lib/breach-routing.js.map +7 -0
- package/dist/modules/workflows/lib/bulk-replay.js +101 -0
- package/dist/modules/workflows/lib/bulk-replay.js.map +7 -0
- package/dist/modules/workflows/lib/business-rule-usage.js +91 -0
- package/dist/modules/workflows/lib/business-rule-usage.js.map +7 -0
- package/dist/modules/workflows/lib/caller-graph.js +53 -0
- package/dist/modules/workflows/lib/caller-graph.js.map +7 -0
- package/dist/modules/workflows/lib/code-view-apply.js +86 -0
- package/dist/modules/workflows/lib/code-view-apply.js.map +7 -0
- package/dist/modules/workflows/lib/collect-validation-issues.js +164 -0
- package/dist/modules/workflows/lib/collect-validation-issues.js.map +7 -0
- package/dist/modules/workflows/lib/compensation-ghosts.js +72 -0
- package/dist/modules/workflows/lib/compensation-ghosts.js.map +7 -0
- package/dist/modules/workflows/lib/component-guard.js +7 -0
- package/dist/modules/workflows/lib/component-guard.js.map +7 -0
- package/dist/modules/workflows/lib/condition-handler.js +443 -0
- package/dist/modules/workflows/lib/condition-handler.js.map +7 -0
- package/dist/modules/workflows/lib/context-ledger.js +448 -0
- package/dist/modules/workflows/lib/context-ledger.js.map +7 -0
- package/dist/modules/workflows/lib/crud-form-dialogs-flag.js +8 -0
- package/dist/modules/workflows/lib/crud-form-dialogs-flag.js.map +7 -0
- package/dist/modules/workflows/lib/data-edge-mapping.js +63 -0
- package/dist/modules/workflows/lib/data-edge-mapping.js.map +7 -0
- package/dist/modules/workflows/lib/definition-context-schema.js +56 -0
- package/dist/modules/workflows/lib/definition-context-schema.js.map +7 -0
- package/dist/modules/workflows/lib/definition-edit-safety.js +123 -0
- package/dist/modules/workflows/lib/definition-edit-safety.js.map +7 -0
- package/dist/modules/workflows/lib/definition-error-body.js +33 -0
- package/dist/modules/workflows/lib/definition-error-body.js.map +7 -0
- package/dist/modules/workflows/lib/definition-evaluation.js +79 -0
- package/dist/modules/workflows/lib/definition-evaluation.js.map +7 -0
- package/dist/modules/workflows/lib/definition-grant.js +90 -0
- package/dist/modules/workflows/lib/definition-grant.js.map +7 -0
- package/dist/modules/workflows/lib/definition-json-locations.js +139 -0
- package/dist/modules/workflows/lib/definition-json-locations.js.map +7 -0
- package/dist/modules/workflows/lib/definition-payload.js +31 -0
- package/dist/modules/workflows/lib/definition-payload.js.map +7 -0
- package/dist/modules/workflows/lib/draft-restore.js +49 -0
- package/dist/modules/workflows/lib/draft-restore.js.map +7 -0
- package/dist/modules/workflows/lib/dry-run.js +106 -0
- package/dist/modules/workflows/lib/dry-run.js.map +7 -0
- package/dist/modules/workflows/lib/duration.js +66 -17
- package/dist/modules/workflows/lib/duration.js.map +2 -2
- package/dist/modules/workflows/lib/edge-reattachment.js +79 -0
- package/dist/modules/workflows/lib/edge-reattachment.js.map +7 -0
- package/dist/modules/workflows/lib/edgeFormTransforms.js +7 -11
- package/dist/modules/workflows/lib/edgeFormTransforms.js.map +2 -2
- package/dist/modules/workflows/lib/editor-annotations.js +195 -0
- package/dist/modules/workflows/lib/editor-annotations.js.map +7 -0
- package/dist/modules/workflows/lib/editor-commands.js +103 -0
- package/dist/modules/workflows/lib/editor-commands.js.map +7 -0
- package/dist/modules/workflows/lib/editor-history.js +51 -0
- package/dist/modules/workflows/lib/editor-history.js.map +7 -0
- package/dist/modules/workflows/lib/endpoint-catalog.js +181 -0
- package/dist/modules/workflows/lib/endpoint-catalog.js.map +7 -0
- package/dist/modules/workflows/lib/endpoint-path.js +90 -0
- package/dist/modules/workflows/lib/endpoint-path.js.map +7 -0
- package/dist/modules/workflows/lib/engine-version.js +42 -0
- package/dist/modules/workflows/lib/engine-version.js.map +7 -0
- package/dist/modules/workflows/lib/error-handler.js +132 -0
- package/dist/modules/workflows/lib/error-handler.js.map +7 -0
- package/dist/modules/workflows/lib/error-routing.js +104 -0
- package/dist/modules/workflows/lib/error-routing.js.map +7 -0
- package/dist/modules/workflows/lib/event-logger.js +23 -0
- package/dist/modules/workflows/lib/event-logger.js.map +2 -2
- package/dist/modules/workflows/lib/expression-refs.js +168 -0
- package/dist/modules/workflows/lib/expression-refs.js.map +7 -0
- package/dist/modules/workflows/lib/failure-grouping.js +62 -0
- package/dist/modules/workflows/lib/failure-grouping.js.map +7 -0
- package/dist/modules/workflows/lib/find-definition.js +1 -0
- package/dist/modules/workflows/lib/find-definition.js.map +2 -2
- package/dist/modules/workflows/lib/flow-logic-warnings.js +338 -0
- package/dist/modules/workflows/lib/flow-logic-warnings.js.map +7 -0
- package/dist/modules/workflows/lib/graph-utils.js +328 -77
- package/dist/modules/workflows/lib/graph-utils.js.map +2 -2
- package/dist/modules/workflows/lib/icon-search.js +32 -0
- package/dist/modules/workflows/lib/icon-search.js.map +7 -0
- package/dist/modules/workflows/lib/insert-at-cursor.js +26 -0
- package/dist/modules/workflows/lib/insert-at-cursor.js.map +7 -0
- package/dist/modules/workflows/lib/instance-date-filter.js +28 -0
- package/dist/modules/workflows/lib/instance-date-filter.js.map +7 -0
- package/dist/modules/workflows/lib/interpolation-pipeline.js +271 -0
- package/dist/modules/workflows/lib/interpolation-pipeline.js.map +7 -0
- package/dist/modules/workflows/lib/ledger-drag.js +28 -0
- package/dist/modules/workflows/lib/ledger-drag.js.map +7 -0
- package/dist/modules/workflows/lib/ledger-entry-display.js +66 -0
- package/dist/modules/workflows/lib/ledger-entry-display.js.map +7 -0
- package/dist/modules/workflows/lib/ledger-schema-flatten.js +82 -0
- package/dist/modules/workflows/lib/ledger-schema-flatten.js.map +7 -0
- package/dist/modules/workflows/lib/metrics/definition-metrics.js +110 -0
- package/dist/modules/workflows/lib/metrics/definition-metrics.js.map +7 -0
- package/dist/modules/workflows/lib/metrics/metrics-display.js +26 -0
- package/dist/modules/workflows/lib/metrics/metrics-display.js.map +7 -0
- package/dist/modules/workflows/lib/metrics/rollup-schedule.js +7 -0
- package/dist/modules/workflows/lib/metrics/rollup-schedule.js.map +7 -0
- package/dist/modules/workflows/lib/metrics/rollup-service.js +160 -0
- package/dist/modules/workflows/lib/metrics/rollup-service.js.map +7 -0
- package/dist/modules/workflows/lib/node-config-summary.js +128 -0
- package/dist/modules/workflows/lib/node-config-summary.js.map +7 -0
- package/dist/modules/workflows/lib/node-geometry.js +53 -0
- package/dist/modules/workflows/lib/node-geometry.js.map +7 -0
- package/dist/modules/workflows/lib/node-nudge.js +44 -0
- package/dist/modules/workflows/lib/node-nudge.js.map +7 -0
- package/dist/modules/workflows/lib/node-outcome-rows.js +88 -0
- package/dist/modules/workflows/lib/node-outcome-rows.js.map +7 -0
- package/dist/modules/workflows/lib/node-placement.js +55 -0
- package/dist/modules/workflows/lib/node-placement.js.map +7 -0
- package/dist/modules/workflows/lib/node-type-icons.js +54 -13
- package/dist/modules/workflows/lib/node-type-icons.js.map +2 -2
- package/dist/modules/workflows/lib/nodeFormTransforms.js +329 -19
- package/dist/modules/workflows/lib/nodeFormTransforms.js.map +2 -2
- package/dist/modules/workflows/lib/outcome-routing.js +158 -0
- package/dist/modules/workflows/lib/outcome-routing.js.map +7 -0
- package/dist/modules/workflows/lib/owned-definition.js +107 -0
- package/dist/modules/workflows/lib/owned-definition.js.map +7 -0
- package/dist/modules/workflows/lib/owned-node-changes.js +10 -0
- package/dist/modules/workflows/lib/owned-node-changes.js.map +7 -0
- package/dist/modules/workflows/lib/palette-drag.js +36 -0
- package/dist/modules/workflows/lib/palette-drag.js.map +7 -0
- package/dist/modules/workflows/lib/palette-drop.js +45 -0
- package/dist/modules/workflows/lib/palette-drop.js.map +7 -0
- package/dist/modules/workflows/lib/parallel-handler.js +57 -2
- package/dist/modules/workflows/lib/parallel-handler.js.map +2 -2
- package/dist/modules/workflows/lib/port-contract.js +54 -0
- package/dist/modules/workflows/lib/port-contract.js.map +7 -0
- package/dist/modules/workflows/lib/portal-task-access.js +89 -0
- package/dist/modules/workflows/lib/portal-task-access.js.map +7 -0
- package/dist/modules/workflows/lib/rerun-from-step.js +65 -0
- package/dist/modules/workflows/lib/rerun-from-step.js.map +7 -0
- package/dist/modules/workflows/lib/route-chip-events.js +23 -0
- package/dist/modules/workflows/lib/route-chip-events.js.map +7 -0
- package/dist/modules/workflows/lib/route-chips.js +91 -0
- package/dist/modules/workflows/lib/route-chips.js.map +7 -0
- package/dist/modules/workflows/lib/route-edge.js +17 -0
- package/dist/modules/workflows/lib/route-edge.js.map +7 -0
- package/dist/modules/workflows/lib/route-kinds.js +67 -0
- package/dist/modules/workflows/lib/route-kinds.js.map +7 -0
- package/dist/modules/workflows/lib/route-priority.js +104 -0
- package/dist/modules/workflows/lib/route-priority.js.map +7 -0
- package/dist/modules/workflows/lib/run-duration.js +44 -0
- package/dist/modules/workflows/lib/run-duration.js.map +7 -0
- package/dist/modules/workflows/lib/run-event-tone.js +25 -0
- package/dist/modules/workflows/lib/run-event-tone.js.map +7 -0
- package/dist/modules/workflows/lib/run-execution.js +305 -0
- package/dist/modules/workflows/lib/run-execution.js.map +7 -0
- package/dist/modules/workflows/lib/run-gantt.js +180 -0
- package/dist/modules/workflows/lib/run-gantt.js.map +7 -0
- package/dist/modules/workflows/lib/run-outcome-evidence.js +33 -0
- package/dist/modules/workflows/lib/run-outcome-evidence.js.map +7 -0
- package/dist/modules/workflows/lib/run-outcome.js +48 -0
- package/dist/modules/workflows/lib/run-outcome.js.map +7 -0
- package/dist/modules/workflows/lib/sample-resolver.js +71 -0
- package/dist/modules/workflows/lib/sample-resolver.js.map +7 -0
- package/dist/modules/workflows/lib/seeds.js +1 -1
- package/dist/modules/workflows/lib/seeds.js.map +2 -2
- package/dist/modules/workflows/lib/server-output-contract.js +65 -0
- package/dist/modules/workflows/lib/server-output-contract.js.map +7 -0
- package/dist/modules/workflows/lib/set-variable.js +47 -0
- package/dist/modules/workflows/lib/set-variable.js.map +7 -0
- package/dist/modules/workflows/lib/signal-handler.js +63 -4
- package/dist/modules/workflows/lib/signal-handler.js.map +2 -2
- package/dist/modules/workflows/lib/start-fixtures.js +42 -0
- package/dist/modules/workflows/lib/start-fixtures.js.map +7 -0
- package/dist/modules/workflows/lib/status-colors.js +153 -22
- package/dist/modules/workflows/lib/status-colors.js.map +2 -2
- package/dist/modules/workflows/lib/step-handler.js +529 -53
- package/dist/modules/workflows/lib/step-handler.js.map +3 -3
- package/dist/modules/workflows/lib/step-presentation.js +147 -0
- package/dist/modules/workflows/lib/step-presentation.js.map +7 -0
- package/dist/modules/workflows/lib/step-through.js +26 -0
- package/dist/modules/workflows/lib/step-through.js.map +7 -0
- package/dist/modules/workflows/lib/step-type-conversion.js +167 -0
- package/dist/modules/workflows/lib/step-type-conversion.js.map +7 -0
- package/dist/modules/workflows/lib/subgraph-clipboard.js +114 -0
- package/dist/modules/workflows/lib/subgraph-clipboard.js.map +7 -0
- package/dist/modules/workflows/lib/task-decision-context.js +38 -0
- package/dist/modules/workflows/lib/task-decision-context.js.map +7 -0
- package/dist/modules/workflows/lib/task-decisions.js +49 -0
- package/dist/modules/workflows/lib/task-decisions.js.map +7 -0
- package/dist/modules/workflows/lib/task-entity-access.js +62 -0
- package/dist/modules/workflows/lib/task-entity-access.js.map +7 -0
- package/dist/modules/workflows/lib/task-entity-aliases.js +39 -0
- package/dist/modules/workflows/lib/task-entity-aliases.js.map +7 -0
- package/dist/modules/workflows/lib/task-entity-types.js +36 -0
- package/dist/modules/workflows/lib/task-entity-types.js.map +7 -0
- package/dist/modules/workflows/lib/task-form-registry.js +33 -0
- package/dist/modules/workflows/lib/task-form-registry.js.map +7 -0
- package/dist/modules/workflows/lib/task-form-schema.js +75 -0
- package/dist/modules/workflows/lib/task-form-schema.js.map +7 -0
- package/dist/modules/workflows/lib/task-handler.js +251 -32
- package/dist/modules/workflows/lib/task-handler.js.map +2 -2
- package/dist/modules/workflows/lib/task-inspector-config.js +182 -0
- package/dist/modules/workflows/lib/task-inspector-config.js.map +7 -0
- package/dist/modules/workflows/lib/task-list-query.js +19 -0
- package/dist/modules/workflows/lib/task-list-query.js.map +7 -0
- package/dist/modules/workflows/lib/task-notifications.js +119 -0
- package/dist/modules/workflows/lib/task-notifications.js.map +7 -0
- package/dist/modules/workflows/lib/task-permission-settings.js +43 -0
- package/dist/modules/workflows/lib/task-permission-settings.js.map +7 -0
- package/dist/modules/workflows/lib/task-presets.js +35 -0
- package/dist/modules/workflows/lib/task-presets.js.map +7 -0
- package/dist/modules/workflows/lib/task-quick-action.js +45 -0
- package/dist/modules/workflows/lib/task-quick-action.js.map +7 -0
- package/dist/modules/workflows/lib/task-resolution.js +120 -0
- package/dist/modules/workflows/lib/task-resolution.js.map +7 -0
- package/dist/modules/workflows/lib/task-sla.js +357 -0
- package/dist/modules/workflows/lib/task-sla.js.map +7 -0
- package/dist/modules/workflows/lib/task-visibility-request.js +266 -0
- package/dist/modules/workflows/lib/task-visibility-request.js.map +7 -0
- package/dist/modules/workflows/lib/task-visibility.js +194 -0
- package/dist/modules/workflows/lib/task-visibility.js.map +7 -0
- package/dist/modules/workflows/lib/timer-handler.js +3 -1
- package/dist/modules/workflows/lib/timer-handler.js.map +2 -2
- package/dist/modules/workflows/lib/transition-handler.js +148 -20
- package/dist/modules/workflows/lib/transition-handler.js.map +2 -2
- package/dist/modules/workflows/lib/trigger-node.js +121 -0
- package/dist/modules/workflows/lib/trigger-node.js.map +7 -0
- package/dist/modules/workflows/lib/visual-editor-navigation.js +14 -0
- package/dist/modules/workflows/lib/visual-editor-navigation.js.map +7 -0
- package/dist/modules/workflows/lib/work-inbox/empty-state.js +52 -0
- package/dist/modules/workflows/lib/work-inbox/empty-state.js.map +7 -0
- package/dist/modules/workflows/lib/work-inbox/entity-links.js +63 -0
- package/dist/modules/workflows/lib/work-inbox/entity-links.js.map +7 -0
- package/dist/modules/workflows/lib/work-inbox/navigation.js +11 -0
- package/dist/modules/workflows/lib/work-inbox/navigation.js.map +7 -0
- package/dist/modules/workflows/lib/work-inbox/presentation.js +90 -0
- package/dist/modules/workflows/lib/work-inbox/presentation.js.map +7 -0
- package/dist/modules/workflows/lib/work-inbox/provider.js +118 -0
- package/dist/modules/workflows/lib/work-inbox/provider.js.map +7 -0
- package/dist/modules/workflows/lib/work-inbox/query.js +70 -0
- package/dist/modules/workflows/lib/work-inbox/query.js.map +7 -0
- package/dist/modules/workflows/lib/work-inbox/service.js +56 -0
- package/dist/modules/workflows/lib/work-inbox/service.js.map +7 -0
- package/dist/modules/workflows/lib/work-inbox/user-task-source.js +149 -0
- package/dist/modules/workflows/lib/work-inbox/user-task-source.js.map +7 -0
- package/dist/modules/workflows/lib/workflow-command-enablement.js +57 -0
- package/dist/modules/workflows/lib/workflow-command-enablement.js.map +7 -0
- package/dist/modules/workflows/lib/workflow-command-settings.js +54 -0
- package/dist/modules/workflows/lib/workflow-command-settings.js.map +7 -0
- package/dist/modules/workflows/lib/workflow-executor.js +658 -6
- package/dist/modules/workflows/lib/workflow-executor.js.map +2 -2
- package/dist/modules/workflows/lib/workflow-function-registry.js +40 -0
- package/dist/modules/workflows/lib/workflow-function-registry.js.map +7 -0
- package/dist/modules/workflows/lib/workflow-safe-commands.js +11 -1
- package/dist/modules/workflows/lib/workflow-safe-commands.js.map +2 -2
- package/dist/modules/workflows/lib/workflow-templates.js +69 -0
- package/dist/modules/workflows/lib/workflow-templates.js.map +7 -0
- package/dist/modules/workflows/migrations/Migration20260626214855_workflows.js +15 -0
- package/dist/modules/workflows/migrations/Migration20260626214855_workflows.js.map +7 -0
- package/dist/modules/workflows/migrations/Migration20260626222424_workflows.js +17 -0
- package/dist/modules/workflows/migrations/Migration20260626222424_workflows.js.map +7 -0
- package/dist/modules/workflows/migrations/Migration20260727074335_workflows.js +15 -0
- package/dist/modules/workflows/migrations/Migration20260727074335_workflows.js.map +7 -0
- package/dist/modules/workflows/migrations/Migration20260728104038_workflows.js +13 -0
- package/dist/modules/workflows/migrations/Migration20260728104038_workflows.js.map +7 -0
- package/dist/modules/workflows/migrations/Migration20260728163001_workflows.js +15 -0
- package/dist/modules/workflows/migrations/Migration20260728163001_workflows.js.map +7 -0
- package/dist/modules/workflows/migrations/Migration20260729061736_workflows.js +13 -0
- package/dist/modules/workflows/migrations/Migration20260729061736_workflows.js.map +7 -0
- package/dist/modules/workflows/migrations/Migration20260729192652_workflows.js +12 -0
- package/dist/modules/workflows/migrations/Migration20260729192652_workflows.js.map +7 -0
- package/dist/modules/workflows/migrations/Migration20260730085000_workflows.js +13 -0
- package/dist/modules/workflows/migrations/Migration20260730085000_workflows.js.map +7 -0
- package/dist/modules/workflows/migrations/Migration20260730092706_workflows.js +13 -0
- package/dist/modules/workflows/migrations/Migration20260730092706_workflows.js.map +7 -0
- package/dist/modules/workflows/notifications.js +38 -10
- package/dist/modules/workflows/notifications.js.map +2 -2
- package/dist/modules/workflows/setup.js +81 -1
- package/dist/modules/workflows/setup.js.map +2 -2
- package/dist/modules/workflows/subscribers/task-assigned-notification.js +19 -27
- package/dist/modules/workflows/subscribers/task-assigned-notification.js.map +2 -2
- package/dist/modules/workflows/subscribers/task-deadline-breached-notification.js +24 -0
- package/dist/modules/workflows/subscribers/task-deadline-breached-notification.js.map +7 -0
- package/dist/modules/workflows/subscribers/task-reminder-notification.js +24 -0
- package/dist/modules/workflows/subscribers/task-reminder-notification.js.map +7 -0
- package/dist/modules/workflows/widgets/injection/pending-work/widget.client.js +73 -0
- package/dist/modules/workflows/widgets/injection/pending-work/widget.client.js.map +7 -0
- package/dist/modules/workflows/widgets/injection/pending-work/widget.js +17 -0
- package/dist/modules/workflows/widgets/injection/pending-work/widget.js.map +7 -0
- package/dist/modules/workflows/widgets/injection-table.js +26 -0
- package/dist/modules/workflows/widgets/injection-table.js.map +2 -2
- package/dist/modules/workflows/workers/workflow-activities.worker.js +61 -39
- package/dist/modules/workflows/workers/workflow-activities.worker.js.map +2 -2
- package/dist/modules/workflows/workers/workflow-definition-metric-rollup.worker.js +40 -0
- package/dist/modules/workflows/workers/workflow-definition-metric-rollup.worker.js.map +7 -0
- package/dist/modules/workflows/workers/workflow-instance-bulk-replay.js +43 -0
- package/dist/modules/workflows/workers/workflow-instance-bulk-replay.js.map +7 -0
- package/dist/modules/workflows/workers/workflow-invoke-agent.worker.js +30 -0
- package/dist/modules/workflows/workers/workflow-invoke-agent.worker.js.map +7 -0
- package/generated/entities/action_log/index.ts +1 -0
- package/generated/entities/user/index.ts +1 -0
- package/generated/entities/user_task/index.ts +7 -0
- package/generated/entities/workflow_definition/index.ts +3 -0
- package/generated/entities/workflow_definition_draft/index.ts +11 -0
- package/generated/entities/workflow_definition_metric_rollup/index.ts +10 -0
- package/generated/entities/workflow_instance/index.ts +2 -0
- package/generated/entities.ids.generated.ts +4 -1
- package/generated/entity-fields-registry.ts +39 -0
- package/jest.setup.ts +13 -0
- package/package.json +8 -7
- package/src/helpers/integration/workflowsFixtures.ts +765 -5
- package/src/helpers/integration/workflowsUi.ts +318 -0
- package/src/modules/attachments/lib/createFromBuffer.ts +120 -0
- package/src/modules/audit_logs/data/entities.ts +12 -0
- package/src/modules/audit_logs/data/validators.ts +1 -0
- package/src/modules/audit_logs/lib/projections.ts +5 -1
- package/src/modules/audit_logs/migrations/.snapshot-open-mercato.json +26 -0
- package/src/modules/audit_logs/migrations/Migration20260625120000.ts +15 -0
- package/src/modules/audit_logs/services/actionLogService.ts +3 -0
- package/src/modules/auth/data/entities.ts +21 -0
- package/src/modules/auth/i18n/de.json +31 -0
- package/src/modules/auth/i18n/en.json +31 -0
- package/src/modules/auth/i18n/es.json +31 -0
- package/src/modules/auth/i18n/ko.json +31 -0
- package/src/modules/auth/i18n/pl.json +31 -0
- package/src/modules/auth/lib/executionPrincipal.ts +235 -0
- package/src/modules/auth/migrations/.snapshot-open-mercato.json +16 -0
- package/src/modules/auth/migrations/Migration20260625050000.ts +21 -0
- package/src/modules/business_rules/components/InlineRuleEditor.tsx +231 -0
- package/src/modules/business_rules/data/validators.ts +6 -0
- package/src/modules/business_rules/i18n/de.json +4 -0
- package/src/modules/business_rules/i18n/en.json +4 -0
- package/src/modules/business_rules/i18n/es.json +4 -0
- package/src/modules/business_rules/i18n/ko.json +4 -0
- package/src/modules/business_rules/i18n/pl.json +4 -0
- package/src/modules/business_rules/lib/rule-engine.ts +15 -1
- package/src/modules/catalog/commands/products.ts +12 -0
- package/src/modules/catalog/i18n/de.json +1 -0
- package/src/modules/catalog/i18n/en.json +1 -0
- package/src/modules/catalog/i18n/es.json +1 -0
- package/src/modules/catalog/i18n/ko.json +1 -0
- package/src/modules/catalog/i18n/pl.json +1 -0
- package/src/modules/catalog/workflows.ts +35 -0
- package/src/modules/customer_accounts/AGENTS.md +11 -0
- package/src/modules/customer_accounts/backend/customer_accounts/roles/[id]/page.tsx +2 -0
- package/src/modules/customer_accounts/cli.ts +96 -0
- package/src/modules/customer_accounts/i18n/de.json +5 -0
- package/src/modules/customer_accounts/i18n/en.json +5 -0
- package/src/modules/customer_accounts/i18n/es.json +5 -0
- package/src/modules/customer_accounts/i18n/ko.json +5 -0
- package/src/modules/customer_accounts/i18n/pl.json +5 -0
- package/src/modules/customer_accounts/lib/customerRoleAclSync.ts +92 -0
- package/src/modules/customer_accounts/setup.ts +15 -3
- package/src/modules/customers/commands/deals.ts +5 -0
- package/src/modules/customers/components/detail/ChangelogEntryRow.tsx +4 -2
- package/src/modules/customers/components/detail/utils.ts +2 -0
- package/src/modules/customers/events.ts +21 -3
- package/src/modules/customers/i18n/de.json +4 -0
- package/src/modules/customers/i18n/en.json +4 -0
- package/src/modules/customers/i18n/es.json +4 -0
- package/src/modules/customers/i18n/ko.json +4 -0
- package/src/modules/customers/i18n/pl.json +4 -0
- package/src/modules/customers/lib/link-workflow-task-handler.ts +136 -0
- package/src/modules/customers/lib/todoCompatibility.ts +4 -1
- package/src/modules/customers/lib/workflowTaskLink.ts +23 -0
- package/src/modules/customers/subscribers/link-workflow-task.ts +19 -0
- package/src/modules/customers/workflows.ts +57 -0
- package/src/modules/entities/api/records.ts +18 -62
- package/src/modules/entities/lib/entityClassification.ts +102 -0
- package/src/modules/sales/commands/documents.ts +46 -0
- package/src/modules/sales/events.ts +20 -2
- package/src/modules/sales/i18n/de.json +2 -1
- package/src/modules/sales/i18n/en.json +2 -1
- package/src/modules/sales/i18n/es.json +2 -1
- package/src/modules/sales/i18n/ko.json +2 -1
- package/src/modules/sales/i18n/pl.json +2 -1
- package/src/modules/sales/workflows.ts +12 -1
- package/src/modules/seeds/README.md +86 -0
- package/src/modules/seeds/cli.ts +220 -0
- package/src/modules/seeds/examples/sample-seed.json +26 -0
- package/src/modules/seeds/index.ts +11 -0
- package/src/modules/workflows/AGENTS.md +851 -10
- package/src/modules/workflows/acl.ts +96 -0
- package/src/modules/workflows/ai-agents.ts +80 -0
- package/src/modules/workflows/ai-tools/authoring-pack.ts +798 -0
- package/src/modules/workflows/ai-tools/types.ts +117 -0
- package/src/modules/workflows/ai-tools.ts +20 -0
- package/src/modules/workflows/api/command-settings/route.ts +171 -0
- package/src/modules/workflows/api/commands/route.ts +109 -0
- package/src/modules/workflows/api/definitions/[id]/callers/route.ts +95 -0
- package/src/modules/workflows/api/definitions/[id]/context-schema/route.ts +187 -0
- package/src/modules/workflows/api/definitions/[id]/customize/route.ts +6 -1
- package/src/modules/workflows/api/definitions/[id]/draft/route.ts +395 -0
- package/src/modules/workflows/api/definitions/[id]/publish/route.ts +250 -0
- package/src/modules/workflows/api/definitions/[id]/reset-to-code/route.ts +5 -0
- package/src/modules/workflows/api/definitions/[id]/route.ts +107 -7
- package/src/modules/workflows/api/definitions/[id]/test-step/route.ts +288 -0
- package/src/modules/workflows/api/definitions/generate/route.ts +335 -0
- package/src/modules/workflows/api/definitions/route.ts +88 -113
- package/src/modules/workflows/api/definitions/serialize.ts +9 -0
- package/src/modules/workflows/api/endpoints/route.ts +88 -0
- package/src/modules/workflows/api/functions/route.ts +91 -0
- package/src/modules/workflows/api/grantable-features/route.ts +102 -0
- package/src/modules/workflows/api/instances/[id]/context/route.ts +214 -0
- package/src/modules/workflows/api/instances/[id]/rerun-step/route.ts +226 -0
- package/src/modules/workflows/api/instances/[id]/retry/route.ts +18 -2
- package/src/modules/workflows/api/instances/[id]/step-through/route.ts +195 -0
- package/src/modules/workflows/api/instances/[id]/steps/route.ts +160 -0
- package/src/modules/workflows/api/instances/[id]/would-do/route.ts +216 -0
- package/src/modules/workflows/api/instances/bulk-replay/route.ts +141 -0
- package/src/modules/workflows/api/instances/failure-queue/route.ts +197 -0
- package/src/modules/workflows/api/instances/route.ts +135 -3
- package/src/modules/workflows/api/metrics/definitions/route.ts +262 -0
- package/src/modules/workflows/api/openapi.ts +549 -2
- package/src/modules/workflows/api/portal/tasks/[id]/complete/route.ts +160 -0
- package/src/modules/workflows/api/portal/tasks/[id]/route.ts +124 -0
- package/src/modules/workflows/api/portal/tasks/route.ts +157 -0
- package/src/modules/workflows/api/rule-usage/route.ts +94 -0
- package/src/modules/workflows/api/task-settings/route.ts +138 -0
- package/src/modules/workflows/api/tasks/[id]/claim/route.ts +42 -17
- package/src/modules/workflows/api/tasks/[id]/complete/route.ts +47 -15
- package/src/modules/workflows/api/tasks/[id]/reassign/route.ts +197 -0
- package/src/modules/workflows/api/tasks/[id]/route.ts +57 -6
- package/src/modules/workflows/api/tasks/[id]/unclaim/route.ts +132 -0
- package/src/modules/workflows/api/tasks/route.ts +60 -5
- package/src/modules/workflows/api/tasks/serialize.ts +119 -0
- package/src/modules/workflows/api/templates/route.ts +87 -0
- package/src/modules/workflows/api/work-inbox/next/route.ts +170 -0
- package/src/modules/workflows/api/work-inbox/route.ts +153 -0
- package/src/modules/workflows/backend/config/workflows/page.meta.ts +33 -0
- package/src/modules/workflows/backend/config/workflows/page.tsx +12 -0
- package/src/modules/workflows/backend/definitions/[id]/page.tsx +19 -343
- package/src/modules/workflows/backend/definitions/create/page.meta.ts +1 -1
- package/src/modules/workflows/backend/definitions/create/page.tsx +19 -59
- package/src/modules/workflows/backend/definitions/page.tsx +156 -76
- package/src/modules/workflows/backend/definitions/visual-editor/page.tsx +3129 -584
- package/src/modules/workflows/backend/instances/[id]/page.meta.ts +1 -1
- package/src/modules/workflows/backend/instances/[id]/page.tsx +711 -539
- package/src/modules/workflows/backend/instances/failure-queue/page.meta.ts +16 -0
- package/src/modules/workflows/backend/instances/failure-queue/page.tsx +311 -0
- package/src/modules/workflows/backend/instances/page.meta.ts +1 -1
- package/src/modules/workflows/backend/instances/page.tsx +218 -38
- package/src/modules/workflows/backend/tasks/[id]/page.tsx +639 -400
- package/src/modules/workflows/backend/tasks/page.meta.ts +7 -0
- package/src/modules/workflows/backend/tasks/page.tsx +20 -333
- package/src/modules/workflows/backend/work-inbox/page.meta.ts +15 -0
- package/src/modules/workflows/backend/work-inbox/page.tsx +506 -0
- package/src/modules/workflows/cli.ts +1 -1
- package/src/modules/workflows/commands/tasks.ts +146 -0
- package/src/modules/workflows/components/ActivitiesEditor.tsx +91 -114
- package/src/modules/workflows/components/ActivityEditDialog.tsx +244 -0
- package/src/modules/workflows/components/AgentSelector.tsx +200 -0
- package/src/modules/workflows/components/AnnotationEditDialog.tsx +157 -0
- package/src/modules/workflows/components/BusinessRuleUsagePanel.tsx +106 -0
- package/src/modules/workflows/components/BusinessRulesSelector.tsx +71 -17
- package/src/modules/workflows/components/ConfigJsonTextarea.tsx +111 -0
- package/src/modules/workflows/components/ContextSchemaEditor.tsx +165 -0
- package/src/modules/workflows/components/DefinitionErrorHandlerField.tsx +133 -0
- package/src/modules/workflows/components/DefinitionMetadataDrawer.tsx +456 -0
- package/src/modules/workflows/components/DefinitionMetricsCells.tsx +212 -0
- package/src/modules/workflows/components/DefinitionTriggersEditor.tsx +196 -95
- package/src/modules/workflows/components/EdgeEditDialog.tsx +15 -16
- package/src/modules/workflows/components/EdgeEditDialogCrudForm.tsx +130 -80
- package/src/modules/workflows/components/InputDataPanel.tsx +177 -0
- package/src/modules/workflows/components/InspectorPanel.tsx +250 -0
- package/src/modules/workflows/components/NodeEditDialog.tsx +444 -38
- package/src/modules/workflows/components/NodeEditDialogCrudForm.tsx +848 -178
- package/src/modules/workflows/components/StepsEditor.tsx +9 -2
- package/src/modules/workflows/components/TemplateGalleryDialog.tsx +205 -0
- package/src/modules/workflows/components/TransitionsEditor.tsx +98 -89
- package/src/modules/workflows/components/TriggersDialog.tsx +83 -0
- package/src/modules/workflows/components/TriggersEditor.tsx +363 -0
- package/src/modules/workflows/components/WorkflowAiDraftDialog.tsx +383 -0
- package/src/modules/workflows/components/WorkflowCodeView.tsx +257 -0
- package/src/modules/workflows/components/WorkflowCommandPalette.tsx +82 -0
- package/src/modules/workflows/components/WorkflowCompensationGhostEdge.tsx +78 -0
- package/src/modules/workflows/components/WorkflowDataMappingEdge.tsx +46 -0
- package/src/modules/workflows/components/WorkflowGraph.tsx +54 -1
- package/src/modules/workflows/components/WorkflowGraphImpl.tsx +463 -37
- package/src/modules/workflows/components/WorkflowIconPicker.tsx +144 -0
- package/src/modules/workflows/components/WorkflowLegend.tsx +59 -33
- package/src/modules/workflows/components/WorkflowNodeCard.tsx +355 -28
- package/src/modules/workflows/components/WorkflowRouteChips.tsx +145 -0
- package/src/modules/workflows/components/WorkflowSelector.tsx +33 -14
- package/src/modules/workflows/components/WorkflowTransitionEdge.tsx +83 -10
- package/src/modules/workflows/components/WorkflowTransitionLabel.tsx +13 -2
- package/src/modules/workflows/components/fields/ActivityArrayEditor.tsx +120 -30
- package/src/modules/workflows/components/fields/ActivityConfigFields.tsx +675 -0
- package/src/modules/workflows/components/fields/ActivityTestPanel.tsx +250 -0
- package/src/modules/workflows/components/fields/AgentInvokeConfigField.tsx +580 -0
- package/src/modules/workflows/components/fields/AgentReviewOnBreachField.tsx +88 -0
- package/src/modules/workflows/components/fields/BranchingRoutesEditor.tsx +323 -0
- package/src/modules/workflows/components/fields/BusinessRuleConditionsEditor.tsx +36 -4
- package/src/modules/workflows/components/fields/CommandPicker.tsx +158 -0
- package/src/modules/workflows/components/fields/EndpointPicker.tsx +330 -0
- package/src/modules/workflows/components/fields/FormFieldArrayEditor.tsx +2 -2
- package/src/modules/workflows/components/fields/FunctionPicker.tsx +68 -0
- package/src/modules/workflows/components/fields/MappingArrayEditor.tsx +46 -12
- package/src/modules/workflows/components/fields/PortFieldArrayEditor.tsx +255 -0
- package/src/modules/workflows/components/fields/RolesMultiSelect.tsx +68 -0
- package/src/modules/workflows/components/fields/RouteOrderEditor.tsx +169 -0
- package/src/modules/workflows/components/fields/SchemaBuilderDialog.tsx +139 -0
- package/src/modules/workflows/components/fields/StartPreConditionsEditor.tsx +2 -2
- package/src/modules/workflows/components/fields/TaskAssignmentField.tsx +355 -0
- package/src/modules/workflows/components/fields/TaskDeadlineFields.tsx +172 -0
- package/src/modules/workflows/components/fields/TaskDecisionsField.tsx +294 -0
- package/src/modules/workflows/components/fields/TaskEntityBindingsField.tsx +156 -0
- package/src/modules/workflows/components/fields/TemplateTextControl.tsx +85 -0
- package/src/modules/workflows/components/fields/VariablePickerButton.tsx +177 -0
- package/src/modules/workflows/components/fields/ledgerDropTarget.ts +55 -0
- package/src/modules/workflows/components/fields/useActivityTypeOptions.ts +19 -0
- package/src/modules/workflows/components/formConfig.tsx +84 -10
- package/src/modules/workflows/components/mobile/MobileDefinitionDetail.tsx +5 -0
- package/src/modules/workflows/components/mobile/MobileMetadataSheet.tsx +10 -0
- package/src/modules/workflows/components/mobile/MobileTaskForm.tsx +55 -19
- package/src/modules/workflows/components/mobile/MobileVisualEditor.tsx +49 -40
- package/src/modules/workflows/components/nodes/AnnotationGroupNode.tsx +81 -0
- package/src/modules/workflows/components/nodes/AutomatedNode.tsx +34 -17
- package/src/modules/workflows/components/nodes/EndNode.tsx +15 -14
- package/src/modules/workflows/components/nodes/ErrorOutputHandle.tsx +32 -0
- package/src/modules/workflows/components/nodes/IfElseNode.tsx +64 -0
- package/src/modules/workflows/components/nodes/InvokeAgentNode.tsx +180 -0
- package/src/modules/workflows/components/nodes/NodeOutcomeRows.tsx +143 -0
- package/src/modules/workflows/components/nodes/ParallelForkNode.tsx +28 -15
- package/src/modules/workflows/components/nodes/ParallelJoinNode.tsx +28 -15
- package/src/modules/workflows/components/nodes/StartNode.tsx +78 -18
- package/src/modules/workflows/components/nodes/StickyNoteNode.tsx +65 -0
- package/src/modules/workflows/components/nodes/SubWorkflowNode.tsx +124 -23
- package/src/modules/workflows/components/nodes/SwitchNode.tsx +64 -0
- package/src/modules/workflows/components/nodes/TriggerCap.tsx +103 -0
- package/src/modules/workflows/components/nodes/TriggerNode.tsx +151 -0
- package/src/modules/workflows/components/nodes/UserTaskNode.tsx +67 -22
- package/src/modules/workflows/components/nodes/WaitForConditionNode.tsx +74 -0
- package/src/modules/workflows/components/nodes/WaitForSignalNode.tsx +31 -17
- package/src/modules/workflows/components/nodes/WaitForTimerNode.tsx +31 -16
- package/src/modules/workflows/components/nodes/index.ts +17 -0
- package/src/modules/workflows/components/portal/PortalTaskForm.tsx +280 -0
- package/src/modules/workflows/components/run/AgentActivityPanel.tsx +48 -0
- package/src/modules/workflows/components/run/RerunStepDialog.tsx +133 -0
- package/src/modules/workflows/components/run/RunEventBadge.tsx +37 -0
- package/src/modules/workflows/components/run/RunGantt.tsx +180 -0
- package/src/modules/workflows/components/run/RunStatusBadge.tsx +112 -0
- package/src/modules/workflows/components/run/RunStepInspector.tsx +176 -0
- package/src/modules/workflows/components/run/WouldDoReport.tsx +93 -0
- package/src/modules/workflows/components/run/useAgentLabels.ts +42 -0
- package/src/modules/workflows/components/run/useLastRunOverlay.ts +150 -0
- package/src/modules/workflows/components/run/useLiveAgentActions.ts +70 -0
- package/src/modules/workflows/components/run/useLiveRunUpdates.ts +89 -0
- package/src/modules/workflows/components/settings/CommandSettingsPageClient.tsx +228 -0
- package/src/modules/workflows/components/work-inbox/EntityContextPanel.tsx +179 -0
- package/src/modules/workflows/components/work-inbox/ReassignTaskDialog.tsx +203 -0
- package/src/modules/workflows/components/work-inbox/StatusChip.tsx +61 -0
- package/src/modules/workflows/components/work-inbox/TaskActionNotice.tsx +77 -0
- package/src/modules/workflows/components/work-inbox/TaskFormFields.tsx +322 -0
- package/src/modules/workflows/components/work-inbox/WorkInboxEmptyState.tsx +43 -0
- package/src/modules/workflows/data/activity-config-schemas.ts +249 -0
- package/src/modules/workflows/data/activity-config-warnings.ts +71 -0
- package/src/modules/workflows/data/branching-route-warnings.ts +129 -0
- package/src/modules/workflows/data/entities.ts +397 -4
- package/src/modules/workflows/data/metrics-validators.ts +51 -0
- package/src/modules/workflows/data/task-primitives.ts +36 -0
- package/src/modules/workflows/data/types.ts +81 -2
- package/src/modules/workflows/data/validators.ts +729 -60
- package/src/modules/workflows/di.ts +22 -0
- package/src/modules/workflows/events.ts +68 -8
- package/src/modules/workflows/examples/oze-residential-install-60-nodes.json +1545 -0
- package/src/modules/workflows/examples/sales-pipeline-definition.json +35 -35
- package/src/modules/workflows/examples/templates/lead-to-install.json +160 -0
- package/src/modules/workflows/examples/templates/order-approval.json +230 -0
- package/src/modules/workflows/examples/templates/task-escalation.json +110 -0
- package/src/modules/workflows/examples/templates/webhook-integration.json +113 -0
- package/src/modules/workflows/extension-points.ts +1 -1
- package/src/modules/workflows/frontend/[orgSlug]/portal/tasks/[id]/page.meta.ts +21 -0
- package/src/modules/workflows/frontend/[orgSlug]/portal/tasks/[id]/page.tsx +212 -0
- package/src/modules/workflows/frontend/[orgSlug]/portal/tasks/page.meta.ts +25 -0
- package/src/modules/workflows/frontend/[orgSlug]/portal/tasks/page.tsx +185 -0
- package/src/modules/workflows/i18n/de.json +1083 -24
- package/src/modules/workflows/i18n/en.json +1081 -22
- package/src/modules/workflows/i18n/es.json +1083 -24
- package/src/modules/workflows/i18n/ko.json +1072 -13
- package/src/modules/workflows/i18n/pl.json +1082 -23
- package/src/modules/workflows/lib/activity-executor.ts +855 -186
- package/src/modules/workflows/lib/activity-queue-types.ts +120 -1
- package/src/modules/workflows/lib/activity-registry-bootstrap.ts +7 -0
- package/src/modules/workflows/lib/activity-registry.ts +89 -0
- package/src/modules/workflows/lib/activity-types.ts +415 -0
- package/src/modules/workflows/lib/activity-worker-handler.ts +744 -35
- package/src/modules/workflows/lib/advanced-config.ts +41 -0
- package/src/modules/workflows/lib/agent-disposition-task.ts +343 -0
- package/src/modules/workflows/lib/agent-outcome-paths.ts +153 -0
- package/src/modules/workflows/lib/agent-result-mapping.ts +88 -0
- package/src/modules/workflows/lib/agent-review-inspector.ts +125 -0
- package/src/modules/workflows/lib/agent-review.ts +171 -0
- package/src/modules/workflows/lib/ai-authoring.ts +402 -0
- package/src/modules/workflows/lib/ai-draft-runner.ts +105 -0
- package/src/modules/workflows/lib/annotation-events.ts +15 -0
- package/src/modules/workflows/lib/branching-routes.ts +280 -0
- package/src/modules/workflows/lib/breach-routing.ts +142 -0
- package/src/modules/workflows/lib/bulk-replay.ts +185 -0
- package/src/modules/workflows/lib/business-rule-usage.ts +154 -0
- package/src/modules/workflows/lib/caller-graph.ts +104 -0
- package/src/modules/workflows/lib/code-view-apply.ts +178 -0
- package/src/modules/workflows/lib/collect-validation-issues.ts +239 -0
- package/src/modules/workflows/lib/compensation-ghosts.ts +134 -0
- package/src/modules/workflows/lib/component-guard.ts +13 -0
- package/src/modules/workflows/lib/condition-handler.ts +658 -0
- package/src/modules/workflows/lib/context-ledger.ts +814 -0
- package/src/modules/workflows/lib/crud-form-dialogs-flag.ts +5 -0
- package/src/modules/workflows/lib/data-edge-mapping.ts +112 -0
- package/src/modules/workflows/lib/definition-context-schema.ts +103 -0
- package/src/modules/workflows/lib/definition-edit-safety.ts +228 -0
- package/src/modules/workflows/lib/definition-error-body.ts +43 -0
- package/src/modules/workflows/lib/definition-evaluation.ts +156 -0
- package/src/modules/workflows/lib/definition-grant.ts +211 -0
- package/src/modules/workflows/lib/definition-json-locations.ts +226 -0
- package/src/modules/workflows/lib/definition-payload.ts +81 -0
- package/src/modules/workflows/lib/draft-restore.ts +72 -0
- package/src/modules/workflows/lib/dry-run.ts +203 -0
- package/src/modules/workflows/lib/duration.ts +138 -24
- package/src/modules/workflows/lib/edge-reattachment.ts +186 -0
- package/src/modules/workflows/lib/edgeFormTransforms.ts +15 -14
- package/src/modules/workflows/lib/editor-annotations.ts +301 -0
- package/src/modules/workflows/lib/editor-commands.ts +205 -0
- package/src/modules/workflows/lib/editor-history.ts +151 -0
- package/src/modules/workflows/lib/endpoint-catalog.ts +283 -0
- package/src/modules/workflows/lib/endpoint-path.ts +134 -0
- package/src/modules/workflows/lib/engine-version.ts +67 -0
- package/src/modules/workflows/lib/error-handler.ts +192 -0
- package/src/modules/workflows/lib/error-routing.ts +236 -0
- package/src/modules/workflows/lib/event-logger.ts +27 -0
- package/src/modules/workflows/lib/expression-refs.ts +291 -0
- package/src/modules/workflows/lib/failure-grouping.ts +134 -0
- package/src/modules/workflows/lib/find-definition.ts +4 -0
- package/src/modules/workflows/lib/flow-logic-warnings.ts +591 -0
- package/src/modules/workflows/lib/graph-utils.ts +620 -110
- package/src/modules/workflows/lib/icon-search.ts +65 -0
- package/src/modules/workflows/lib/insert-at-cursor.ts +53 -0
- package/src/modules/workflows/lib/instance-date-filter.ts +56 -0
- package/src/modules/workflows/lib/interpolation-pipeline.ts +351 -0
- package/src/modules/workflows/lib/ledger-drag.ts +61 -0
- package/src/modules/workflows/lib/ledger-entry-display.ts +89 -0
- package/src/modules/workflows/lib/ledger-schema-flatten.ts +137 -0
- package/src/modules/workflows/lib/metrics/definition-metrics.ts +268 -0
- package/src/modules/workflows/lib/metrics/metrics-display.ts +57 -0
- package/src/modules/workflows/lib/metrics/rollup-schedule.ts +26 -0
- package/src/modules/workflows/lib/metrics/rollup-service.ts +292 -0
- package/src/modules/workflows/lib/node-config-summary.ts +235 -0
- package/src/modules/workflows/lib/node-geometry.ts +168 -0
- package/src/modules/workflows/lib/node-nudge.ts +63 -0
- package/src/modules/workflows/lib/node-outcome-rows.ts +195 -0
- package/src/modules/workflows/lib/node-placement.ts +104 -0
- package/src/modules/workflows/lib/node-type-icons.ts +71 -10
- package/src/modules/workflows/lib/nodeFormTransforms.ts +519 -28
- package/src/modules/workflows/lib/outcome-routing.ts +346 -0
- package/src/modules/workflows/lib/owned-definition.ts +188 -0
- package/src/modules/workflows/lib/owned-node-changes.ts +29 -0
- package/src/modules/workflows/lib/palette-drag.ts +68 -0
- package/src/modules/workflows/lib/palette-drop.ts +114 -0
- package/src/modules/workflows/lib/parallel-handler.ts +79 -2
- package/src/modules/workflows/lib/port-contract.ts +107 -0
- package/src/modules/workflows/lib/portal-task-access.ts +220 -0
- package/src/modules/workflows/lib/rerun-from-step.ts +140 -0
- package/src/modules/workflows/lib/route-chip-events.ts +45 -0
- package/src/modules/workflows/lib/route-chips.ts +177 -0
- package/src/modules/workflows/lib/route-edge.ts +57 -0
- package/src/modules/workflows/lib/route-kinds.ts +166 -0
- package/src/modules/workflows/lib/route-priority.ts +197 -0
- package/src/modules/workflows/lib/run-duration.ts +70 -0
- package/src/modules/workflows/lib/run-event-tone.ts +46 -0
- package/src/modules/workflows/lib/run-execution.ts +598 -0
- package/src/modules/workflows/lib/run-gantt.ts +311 -0
- package/src/modules/workflows/lib/run-outcome-evidence.ts +60 -0
- package/src/modules/workflows/lib/run-outcome.ts +142 -0
- package/src/modules/workflows/lib/sample-resolver.ts +113 -0
- package/src/modules/workflows/lib/seeds.ts +3 -1
- package/src/modules/workflows/lib/server-output-contract.ts +120 -0
- package/src/modules/workflows/lib/set-variable.ts +94 -0
- package/src/modules/workflows/lib/signal-handler.ts +134 -4
- package/src/modules/workflows/lib/start-fixtures.ts +93 -0
- package/src/modules/workflows/lib/status-colors.ts +220 -21
- package/src/modules/workflows/lib/step-handler.ts +744 -68
- package/src/modules/workflows/lib/step-presentation.ts +295 -0
- package/src/modules/workflows/lib/step-through.ts +71 -0
- package/src/modules/workflows/lib/step-type-conversion.ts +263 -0
- package/src/modules/workflows/lib/subgraph-clipboard.ts +214 -0
- package/src/modules/workflows/lib/task-decision-context.ts +76 -0
- package/src/modules/workflows/lib/task-decisions.ts +117 -0
- package/src/modules/workflows/lib/task-entity-access.ts +181 -0
- package/src/modules/workflows/lib/task-entity-aliases.ts +77 -0
- package/src/modules/workflows/lib/task-entity-types.ts +66 -0
- package/src/modules/workflows/lib/task-form-registry.ts +123 -0
- package/src/modules/workflows/lib/task-form-schema.ts +129 -0
- package/src/modules/workflows/lib/task-handler.ts +492 -51
- package/src/modules/workflows/lib/task-inspector-config.ts +348 -0
- package/src/modules/workflows/lib/task-list-query.ts +46 -0
- package/src/modules/workflows/lib/task-notifications.ts +218 -0
- package/src/modules/workflows/lib/task-permission-settings.ts +117 -0
- package/src/modules/workflows/lib/task-presets.ts +95 -0
- package/src/modules/workflows/lib/task-quick-action.ts +111 -0
- package/src/modules/workflows/lib/task-resolution.ts +270 -0
- package/src/modules/workflows/lib/task-sla.ts +628 -0
- package/src/modules/workflows/lib/task-visibility-request.ts +668 -0
- package/src/modules/workflows/lib/task-visibility.ts +627 -0
- package/src/modules/workflows/lib/timer-handler.ts +8 -1
- package/src/modules/workflows/lib/transition-handler.ts +228 -20
- package/src/modules/workflows/lib/trigger-node.ts +272 -0
- package/src/modules/workflows/lib/visual-editor-navigation.ts +29 -0
- package/src/modules/workflows/lib/work-inbox/empty-state.ts +150 -0
- package/src/modules/workflows/lib/work-inbox/entity-links.ts +99 -0
- package/src/modules/workflows/lib/work-inbox/navigation.ts +28 -0
- package/src/modules/workflows/lib/work-inbox/presentation.ts +163 -0
- package/src/modules/workflows/lib/work-inbox/provider.ts +390 -0
- package/src/modules/workflows/lib/work-inbox/query.ts +103 -0
- package/src/modules/workflows/lib/work-inbox/service.ts +122 -0
- package/src/modules/workflows/lib/work-inbox/user-task-source.ts +240 -0
- package/src/modules/workflows/lib/workflow-command-enablement.ts +188 -0
- package/src/modules/workflows/lib/workflow-command-settings.ts +124 -0
- package/src/modules/workflows/lib/workflow-executor.ts +1036 -10
- package/src/modules/workflows/lib/workflow-function-registry.ts +44 -0
- package/src/modules/workflows/lib/workflow-safe-commands.ts +42 -1
- package/src/modules/workflows/lib/workflow-templates.ts +91 -0
- package/src/modules/workflows/migrations/.snapshot-open-mercato.json +2321 -698
- package/src/modules/workflows/migrations/Migration20260626214855_workflows.ts +15 -0
- package/src/modules/workflows/migrations/Migration20260626222424_workflows.ts +17 -0
- package/src/modules/workflows/migrations/Migration20260727074335_workflows.ts +15 -0
- package/src/modules/workflows/migrations/Migration20260728104038_workflows.ts +13 -0
- package/src/modules/workflows/migrations/Migration20260728163001_workflows.ts +36 -0
- package/src/modules/workflows/migrations/Migration20260729061736_workflows.ts +13 -0
- package/src/modules/workflows/migrations/Migration20260729192652_workflows.ts +11 -0
- package/src/modules/workflows/migrations/Migration20260730085000_workflows.ts +13 -0
- package/src/modules/workflows/migrations/Migration20260730092706_workflows.ts +13 -0
- package/src/modules/workflows/notifications.ts +40 -10
- package/src/modules/workflows/setup.ts +128 -0
- package/src/modules/workflows/subscribers/task-assigned-notification.ts +36 -45
- package/src/modules/workflows/subscribers/task-deadline-breached-notification.ts +31 -0
- package/src/modules/workflows/subscribers/task-reminder-notification.ts +31 -0
- package/src/modules/workflows/widgets/injection/pending-work/widget.client.tsx +119 -0
- package/src/modules/workflows/widgets/injection/pending-work/widget.ts +27 -0
- package/src/modules/workflows/widgets/injection-table.ts +52 -2
- package/src/modules/workflows/workers/workflow-activities.worker.ts +95 -42
- package/src/modules/workflows/workers/workflow-definition-metric-rollup.worker.ts +71 -0
- package/src/modules/workflows/workers/workflow-instance-bulk-replay.ts +51 -0
- package/src/modules/workflows/workers/workflow-invoke-agent.worker.ts +72 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/modules/workflows/api/openapi.ts"],
|
|
4
|
-
"sourcesContent": ["import { z } from 'zod'\n\nexport const workflowsTag = 'Workflows'\n\nexport const workflowErrorSchema = z\n .object({\n error: z.string(),\n details: z.unknown().optional(),\n })\n .passthrough()\n\nexport const userTaskStatusSchema = z.enum([\n 'PENDING',\n 'IN_PROGRESS',\n 'COMPLETED',\n 'CANCELLED',\n 'ESCALATED',\n])\n\nexport const userTaskSchema = z.object({\n id: z.string().uuid(),\n workflowInstanceId: z.string().uuid(),\n stepInstanceId: z.string().uuid(),\n taskName: z.string(),\n description: z.string().nullable().optional(),\n status: userTaskStatusSchema,\n formSchema: z.unknown().nullable().optional(),\n formData: z.unknown().nullable().optional(),\n assignedTo: z.string().nullable().optional(),\n assignedToRoles: z.array(z.string()).nullable().optional(),\n claimedBy: z.string().nullable().optional(),\n claimedAt: z.string().nullable().optional(),\n dueDate: z.string().nullable().optional(),\n escalatedAt: z.string().nullable().optional(),\n escalatedTo: z.string().nullable().optional(),\n completedBy: z.string().nullable().optional(),\n completedAt: z.string().nullable().optional(),\n tenantId: z.string().uuid(),\n organizationId: z.string().uuid(),\n createdAt: z.string(),\n updatedAt: z.string(),\n})\n\nexport const userTaskListQuerySchema = z.object({\n status: z.string().optional().describe('Filter by status (comma-separated for multiple: PENDING,IN_PROGRESS,COMPLETED,CANCELLED,ESCALATED)'),\n assignedTo: z.string().uuid().optional().describe('Filter by assigned user ID'),\n workflowInstanceId: z.string().uuid().optional().describe('Filter by workflow instance ID'),\n overdue: z.coerce.boolean().optional().describe('Filter overdue tasks (true/false)'),\n myTasks: z.coerce.boolean().optional().describe('Show only tasks assigned to or claimable by current user'),\n limit: z.coerce.number().min(1).max(100).optional().default(50).describe('Number of results (max 100)'),\n offset: z.coerce.number().min(0).optional().default(0).describe('Pagination offset'),\n})\n\nexport const paginationSchema = z.object({\n total: z.number().int().nonnegative(),\n limit: z.number().int().positive(),\n offset: z.number().int().nonnegative(),\n hasMore: z.boolean(),\n})\n\nexport const userTaskListResponseSchema = z.object({\n data: z.array(userTaskSchema),\n pagination: paginationSchema,\n})\n\nexport const userTaskDetailResponseSchema = z.object({\n data: userTaskSchema,\n})\n\nexport const userTaskClaimResponseSchema = z.object({\n data: userTaskSchema,\n message: z.string(),\n})\n\nexport const completeTaskRequestSchema = z.object({\n formData: z.record(z.string(), z.unknown()).describe('Form field values'),\n comments: z.string().optional().describe('Optional comments'),\n})\n\nexport const userTaskCompleteResponseSchema = z.object({\n data: userTaskSchema,\n message: z.string(),\n})\n\nexport const advanceWorkflowRequestSchema = z.object({\n toStepId: z.string().optional().describe('Optional target step ID; first valid transition is used when omitted'),\n triggerData: z.record(z.string(), z.unknown()).optional().describe('Optional trigger data used during transition evaluation'),\n contextUpdates: z.record(z.string(), z.unknown()).optional().describe('Optional workflow context updates applied before transition'),\n})\n\nexport const advanceWorkflowResponseSchema = z.object({\n data: z.object({\n instance: z.object({\n id: z.string().uuid(),\n status: z.string(),\n currentStepId: z.string().nullable(),\n previousStepId: z.string().nullable(),\n transitionFired: z.string().nullable(),\n context: z.unknown(),\n }),\n execution: z.unknown(),\n }),\n message: z.string(),\n})\n\nexport const sendSignalRequestSchema = z.object({\n signalName: z.string().describe('Name of the signal to send'),\n payload: z.record(z.string(), z.unknown()).optional().describe('Optional data payload for the signal'),\n})\n\nexport const sendSignalResponseSchema = z.object({\n success: z.boolean(),\n message: z.string(),\n})\n\nexport const validateStartRequestSchema = z.object({\n workflowId: z.string().min(1).describe('Workflow definition ID'),\n version: z.number().int().positive().optional().describe('Optional workflow definition version'),\n context: z.record(z.string(), z.unknown()).optional().describe('Initial workflow context variables'),\n locale: z.string().optional().describe('Locale for validation messages'),\n})\n\nexport const validateStartErrorSchema = z.object({\n ruleId: z.string(),\n message: z.string(),\n code: z.string(),\n})\n\nexport const validateStartRuleSchema = z.object({\n ruleId: z.string(),\n passed: z.boolean(),\n executionTime: z.number().optional(),\n})\n\nexport const validateStartResponseSchema = z.object({\n canStart: z.boolean(),\n workflowId: z.string(),\n errors: z.array(validateStartErrorSchema).optional(),\n validatedRules: z.array(validateStartRuleSchema).optional(),\n})\n\n// ---------------------------------------------------------------------------\n// Workflow Instance Response Schemas\n// ---------------------------------------------------------------------------\n\nexport const workflowInstanceStatusEnumSchema = z.enum([\n 'RUNNING',\n 'PAUSED',\n 'COMPLETED',\n 'FAILED',\n 'CANCELLED',\n 'COMPENSATING',\n 'COMPENSATED',\n 'WAITING_FOR_ACTIVITIES',\n])\n\nexport const workflowInstanceResponseSchema = z.object({\n id: z.string().uuid(),\n definitionId: z.string().uuid(),\n workflowId: z.string(),\n version: z.number().int(),\n status: workflowInstanceStatusEnumSchema,\n currentStepId: z.string(),\n context: z.unknown(),\n correlationKey: z.string().nullable().optional(),\n metadata: z.unknown().nullable().optional(),\n startedAt: z.string(),\n completedAt: z.string().nullable().optional(),\n pausedAt: z.string().nullable().optional(),\n cancelledAt: z.string().nullable().optional(),\n errorMessage: z.string().nullable().optional(),\n errorDetails: z.unknown().nullable().optional(),\n pendingTransition: z.unknown().nullable().optional(),\n retryCount: z.number().int(),\n tenantId: z.string().uuid(),\n organizationId: z.string().uuid(),\n createdAt: z.string(),\n updatedAt: z.string(),\n deletedAt: z.string().nullable().optional(),\n})\n\nexport const workflowInstanceListResponseSchema = z.object({\n data: z.array(workflowInstanceResponseSchema),\n pagination: paginationSchema,\n})\n\nexport const workflowInstanceDetailResponseSchema = z.object({\n data: workflowInstanceResponseSchema,\n})\n\nexport const workflowInstanceCancelResponseSchema = z.object({\n data: workflowInstanceResponseSchema,\n message: z.string(),\n})\n\n// ---------------------------------------------------------------------------\n// Workflow Execution Result Schemas\n// ---------------------------------------------------------------------------\n\nexport const workflowEventSummarySchema = z.object({\n eventType: z.string(),\n occurredAt: z.string(),\n data: z.unknown().optional(),\n})\n\nexport const workflowExecutionResultSchema = z.object({\n status: workflowInstanceStatusEnumSchema,\n currentStep: z.string(),\n context: z.unknown(),\n events: z.array(workflowEventSummarySchema),\n errors: z.array(z.string()).optional(),\n executionTime: z.number(),\n})\n\nexport const workflowBackgroundStartSchema = z.object({\n status: workflowInstanceStatusEnumSchema,\n currentStep: z.string(),\n message: z.string(),\n})\n\nexport const workflowInstanceCreateResponseSchema = z.object({\n data: z.object({\n instance: workflowInstanceResponseSchema,\n execution: workflowBackgroundStartSchema,\n }),\n message: z.string(),\n})\n\nexport const workflowInstanceRetryResponseSchema = z.object({\n data: z.object({\n instance: workflowInstanceResponseSchema,\n execution: workflowExecutionResultSchema,\n }),\n message: z.string(),\n})\n\n// ---------------------------------------------------------------------------\n// Workflow Event Response Schemas\n// ---------------------------------------------------------------------------\n\nexport const workflowEventRowSchema = z.object({\n id: z.string(),\n workflowInstanceId: z.string().uuid(),\n stepInstanceId: z.string().uuid().nullable().optional(),\n eventType: z.string(),\n eventData: z.unknown(),\n occurredAt: z.string(),\n userId: z.string().nullable().optional(),\n tenantId: z.string().uuid(),\n organizationId: z.string().uuid(),\n})\n\nexport const workflowEventInstanceSummarySchema = z.object({\n id: z.string().uuid(),\n workflowId: z.string(),\n workflowName: z.string(),\n status: workflowInstanceStatusEnumSchema,\n})\n\nexport const workflowEventListItemSchema = z.object({\n id: z.string(),\n workflowInstanceId: z.string().uuid(),\n stepInstanceId: z.string().uuid().nullable().optional(),\n eventType: z.string(),\n eventData: z.unknown(),\n occurredAt: z.string(),\n userId: z.string().nullable().optional(),\n workflowInstance: workflowEventInstanceSummarySchema.nullable(),\n})\n\nexport const workflowEventListResponseSchema = z.object({\n items: z.array(workflowEventListItemSchema),\n total: z.number().int().nonnegative(),\n page: z.number().int().positive(),\n pageSize: z.number().int().positive(),\n totalPages: z.number().int().nonnegative(),\n})\n\nexport const workflowEventInstanceDetailSchema = z.object({\n id: z.string().uuid(),\n workflowId: z.string(),\n version: z.number().int(),\n status: workflowInstanceStatusEnumSchema,\n currentStepId: z.string(),\n correlationKey: z.string().nullable().optional(),\n startedAt: z.string().nullable().optional(),\n completedAt: z.string().nullable().optional(),\n context: z.unknown(),\n})\n\nexport const workflowEventDetailSchema = z.object({\n id: z.string(),\n workflowInstanceId: z.string().uuid(),\n stepInstanceId: z.string().uuid().nullable().optional(),\n eventType: z.string(),\n eventData: z.unknown(),\n occurredAt: z.string(),\n userId: z.string().nullable().optional(),\n tenantId: z.string().uuid(),\n organizationId: z.string().uuid(),\n workflowInstance: workflowEventInstanceDetailSchema.nullable(),\n})\n\nexport const workflowEventRowListResponseSchema = z.object({\n data: z.array(workflowEventRowSchema),\n pagination: paginationSchema,\n})\n\n// ---------------------------------------------------------------------------\n// Signal Schemas\n// ---------------------------------------------------------------------------\n\nexport const sendSignalByCorrelationRequestSchema = z.object({\n correlationKey: z.string().min(1).describe('Correlation key used to target waiting workflow instances'),\n signalName: z.string().min(1).describe('Signal name to deliver'),\n payload: z.record(z.string(), z.unknown()).optional().describe('Optional data payload for the signal'),\n})\n\nexport const sendSignalByCorrelationResponseSchema = z.object({\n success: z.boolean(),\n message: z.string(),\n count: z.number().int().nonnegative(),\n})\n"],
|
|
5
|
-
"mappings": "AAAA,SAAS,SAAS;AAEX,MAAM,eAAe;AAErB,MAAM,sBAAsB,EAChC,OAAO;AAAA,EACN,OAAO,EAAE,OAAO;AAAA,EAChB,SAAS,EAAE,QAAQ,EAAE,SAAS;AAChC,CAAC,EACA,YAAY;AAER,MAAM,uBAAuB,EAAE,KAAK;AAAA,EACzC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAEM,MAAM,iBAAiB,EAAE,OAAO;AAAA,EACrC,IAAI,EAAE,OAAO,EAAE,KAAK;AAAA,EACpB,oBAAoB,EAAE,OAAO,EAAE,KAAK;AAAA,EACpC,gBAAgB,EAAE,OAAO,EAAE,KAAK;AAAA,EAChC,UAAU,EAAE,OAAO;AAAA,EACnB,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC5C,QAAQ;AAAA,EACR,YAAY,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS;AAAA,EAC5C,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS;AAAA,EAC1C,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC3C,iBAAiB,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,EAAE,SAAS;AAAA,EACzD,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC1C,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC1C,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACxC,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC5C,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC5C,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC5C,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC5C,UAAU,EAAE,OAAO,EAAE,KAAK;AAAA,EAC1B,gBAAgB,EAAE,OAAO,EAAE,KAAK;AAAA,EAChC,WAAW,EAAE,OAAO;AAAA,EACpB,WAAW,EAAE,OAAO;AACtB,CAAC;AAEM,MAAM,0BAA0B,EAAE,OAAO;AAAA,EAC9C,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,oGAAoG;AAAA,EAC3I,YAAY,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,4BAA4B;AAAA,EAC9E,oBAAoB,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,gCAAgC;AAAA,EAC1F,SAAS,EAAE,OAAO,QAAQ,EAAE,SAAS,EAAE,SAAS,mCAAmC;AAAA,EACnF,SAAS,EAAE,OAAO,QAAQ,EAAE,SAAS,EAAE,SAAS,0DAA0D;AAAA,EAC1G,OAAO,EAAE,OAAO,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,SAAS,6BAA6B;AAAA,EACtG,QAAQ,EAAE,OAAO,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,SAAS,mBAAmB;AACrF,CAAC;AAEM,MAAM,mBAAmB,EAAE,OAAO;AAAA,EACvC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,EACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,EACjC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,EACrC,SAAS,EAAE,QAAQ;AACrB,CAAC;AAEM,MAAM,6BAA6B,EAAE,OAAO;AAAA,EACjD,MAAM,EAAE,MAAM,cAAc;AAAA,EAC5B,YAAY;AACd,CAAC;AAEM,MAAM,+BAA+B,EAAE,OAAO;AAAA,EACnD,MAAM;AACR,CAAC;AAEM,MAAM,8BAA8B,EAAE,OAAO;AAAA,EAClD,MAAM;AAAA,EACN,SAAS,EAAE,OAAO;AACpB,CAAC;AAEM,MAAM,4BAA4B,EAAE,OAAO;AAAA,EAChD,UAAU,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,QAAQ,CAAC,EAAE,SAAS,mBAAmB;AAAA,EACxE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,mBAAmB;AAC9D,CAAC;AAEM,MAAM,iCAAiC,EAAE,OAAO;AAAA,EACrD,MAAM;AAAA,EACN,SAAS,EAAE,OAAO;AACpB,CAAC;AAEM,MAAM,+BAA+B,EAAE,OAAO;AAAA,EACnD,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,sEAAsE;AAAA,EAC/G,aAAa,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,QAAQ,CAAC,EAAE,SAAS,EAAE,SAAS,yDAAyD;AAAA,EAC5H,gBAAgB,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,QAAQ,CAAC,EAAE,SAAS,EAAE,SAAS,6DAA6D;AACrI,CAAC;AAEM,MAAM,gCAAgC,EAAE,OAAO;AAAA,EACpD,MAAM,EAAE,OAAO;AAAA,IACb,UAAU,EAAE,OAAO;AAAA,MACjB,IAAI,EAAE,OAAO,EAAE,KAAK;AAAA,MACpB,QAAQ,EAAE,OAAO;AAAA,MACjB,eAAe,EAAE,OAAO,EAAE,SAAS;AAAA,MACnC,gBAAgB,EAAE,OAAO,EAAE,SAAS;AAAA,MACpC,iBAAiB,EAAE,OAAO,EAAE,SAAS;AAAA,MACrC,SAAS,EAAE,QAAQ;AAAA,IACrB,CAAC;AAAA,IACD,WAAW,EAAE,QAAQ;AAAA,EACvB,CAAC;AAAA,EACD,SAAS,EAAE,OAAO;AACpB,CAAC;AAEM,MAAM,0BAA0B,EAAE,OAAO;AAAA,EAC9C,YAAY,EAAE,OAAO,EAAE,SAAS,4BAA4B;AAAA,EAC5D,SAAS,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,QAAQ,CAAC,EAAE,SAAS,EAAE,SAAS,sCAAsC;AACvG,CAAC;AAEM,MAAM,2BAA2B,EAAE,OAAO;AAAA,EAC/C,SAAS,EAAE,QAAQ;AAAA,EACnB,SAAS,EAAE,OAAO;AACpB,CAAC;AAEM,MAAM,6BAA6B,EAAE,OAAO;AAAA,EACjD,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS,wBAAwB;AAAA,EAC/D,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,sCAAsC;AAAA,EAC/F,SAAS,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,QAAQ,CAAC,EAAE,SAAS,EAAE,SAAS,oCAAoC;AAAA,EACnG,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,gCAAgC;AACzE,CAAC;AAEM,MAAM,2BAA2B,EAAE,OAAO;AAAA,EAC/C,QAAQ,EAAE,OAAO;AAAA,EACjB,SAAS,EAAE,OAAO;AAAA,EAClB,MAAM,EAAE,OAAO;AACjB,CAAC;AAEM,MAAM,0BAA0B,EAAE,OAAO;AAAA,EAC9C,QAAQ,EAAE,OAAO;AAAA,EACjB,QAAQ,EAAE,QAAQ;AAAA,EAClB,eAAe,EAAE,OAAO,EAAE,SAAS;AACrC,CAAC;AAEM,MAAM,8BAA8B,EAAE,OAAO;AAAA,EAClD,UAAU,EAAE,QAAQ;AAAA,EACpB,YAAY,EAAE,OAAO;AAAA,EACrB,QAAQ,EAAE,MAAM,wBAAwB,EAAE,SAAS;AAAA,EACnD,gBAAgB,EAAE,MAAM,uBAAuB,EAAE,SAAS;AAC5D,CAAC;AAMM,MAAM,mCAAmC,EAAE,KAAK;AAAA,EACrD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAEM,MAAM,iCAAiC,EAAE,OAAO;AAAA,EACrD,IAAI,EAAE,OAAO,EAAE,KAAK;AAAA,EACpB,cAAc,EAAE,OAAO,EAAE,KAAK;AAAA,EAC9B,YAAY,EAAE,OAAO;AAAA,EACrB,SAAS,EAAE,OAAO,EAAE,IAAI;AAAA,EACxB,QAAQ;AAAA,EACR,eAAe,EAAE,OAAO;AAAA,EACxB,SAAS,EAAE,QAAQ;AAAA,EACnB,gBAAgB,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC/C,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS;AAAA,EAC1C,WAAW,EAAE,OAAO;AAAA,EACpB,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC5C,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACzC,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC5C,cAAc,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC7C,cAAc,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS;AAAA,EAC9C,mBAAmB,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS;AAAA,EACnD,YAAY,EAAE,OAAO,EAAE,IAAI;AAAA,EAC3B,UAAU,EAAE,OAAO,EAAE,KAAK;AAAA,EAC1B,gBAAgB,EAAE,OAAO,EAAE,KAAK;AAAA,EAChC,WAAW,EAAE,OAAO;AAAA,EACpB,WAAW,EAAE,OAAO;AAAA,EACpB,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAC5C,CAAC;AAEM,MAAM,qCAAqC,EAAE,OAAO;AAAA,EACzD,MAAM,EAAE,MAAM,8BAA8B;AAAA,EAC5C,YAAY;AACd,CAAC;AAEM,MAAM,uCAAuC,EAAE,OAAO;AAAA,EAC3D,MAAM;AACR,CAAC;AAEM,MAAM,uCAAuC,EAAE,OAAO;AAAA,EAC3D,MAAM;AAAA,EACN,SAAS,EAAE,OAAO;AACpB,CAAC;AAMM,MAAM,6BAA6B,EAAE,OAAO;AAAA,EACjD,WAAW,EAAE,OAAO;AAAA,EACpB,YAAY,EAAE,OAAO;AAAA,EACrB,MAAM,EAAE,QAAQ,EAAE,SAAS;AAC7B,CAAC;AAEM,MAAM,gCAAgC,EAAE,OAAO;AAAA,EACpD,QAAQ;AAAA,EACR,aAAa,EAAE,OAAO;AAAA,EACtB,SAAS,EAAE,QAAQ;AAAA,EACnB,QAAQ,EAAE,MAAM,0BAA0B;AAAA,EAC1C,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EACrC,eAAe,EAAE,OAAO;AAC1B,CAAC;AAEM,MAAM,gCAAgC,EAAE,OAAO;AAAA,EACpD,QAAQ;AAAA,EACR,aAAa,EAAE,OAAO;AAAA,EACtB,SAAS,EAAE,OAAO;AACpB,CAAC;AAEM,MAAM,uCAAuC,EAAE,OAAO;AAAA,EAC3D,MAAM,EAAE,OAAO;AAAA,IACb,UAAU;AAAA,IACV,WAAW;AAAA,EACb,CAAC;AAAA,EACD,SAAS,EAAE,OAAO;AACpB,CAAC;AAEM,MAAM,sCAAsC,EAAE,OAAO;AAAA,EAC1D,MAAM,EAAE,OAAO;AAAA,IACb,UAAU;AAAA,IACV,WAAW;AAAA,EACb,CAAC;AAAA,EACD,SAAS,EAAE,OAAO;AACpB,CAAC;AAMM,MAAM,yBAAyB,EAAE,OAAO;AAAA,EAC7C,IAAI,EAAE,OAAO;AAAA,EACb,oBAAoB,EAAE,OAAO,EAAE,KAAK;AAAA,EACpC,gBAAgB,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS;AAAA,EACtD,WAAW,EAAE,OAAO;AAAA,EACpB,WAAW,EAAE,QAAQ;AAAA,EACrB,YAAY,EAAE,OAAO;AAAA,EACrB,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACvC,UAAU,EAAE,OAAO,EAAE,KAAK;AAAA,EAC1B,gBAAgB,EAAE,OAAO,EAAE,KAAK;AAClC,CAAC;AAEM,MAAM,qCAAqC,EAAE,OAAO;AAAA,EACzD,IAAI,EAAE,OAAO,EAAE,KAAK;AAAA,EACpB,YAAY,EAAE,OAAO;AAAA,EACrB,cAAc,EAAE,OAAO;AAAA,EACvB,QAAQ;AACV,CAAC;AAEM,MAAM,8BAA8B,EAAE,OAAO;AAAA,EAClD,IAAI,EAAE,OAAO;AAAA,EACb,oBAAoB,EAAE,OAAO,EAAE,KAAK;AAAA,EACpC,gBAAgB,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS;AAAA,EACtD,WAAW,EAAE,OAAO;AAAA,EACpB,WAAW,EAAE,QAAQ;AAAA,EACrB,YAAY,EAAE,OAAO;AAAA,EACrB,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACvC,kBAAkB,mCAAmC,SAAS;AAChE,CAAC;AAEM,MAAM,kCAAkC,EAAE,OAAO;AAAA,EACtD,OAAO,EAAE,MAAM,2BAA2B;AAAA,EAC1C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAAA,EACpC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,EAChC,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS;AAAA,EACpC,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AAC3C,CAAC;AAEM,MAAM,oCAAoC,EAAE,OAAO;AAAA,EACxD,IAAI,EAAE,OAAO,EAAE,KAAK;AAAA,EACpB,YAAY,EAAE,OAAO;AAAA,EACrB,SAAS,EAAE,OAAO,EAAE,IAAI;AAAA,EACxB,QAAQ;AAAA,EACR,eAAe,EAAE,OAAO;AAAA,EACxB,gBAAgB,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC/C,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC1C,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC5C,SAAS,EAAE,QAAQ;AACrB,CAAC;AAEM,MAAM,4BAA4B,EAAE,OAAO;AAAA,EAChD,IAAI,EAAE,OAAO;AAAA,EACb,oBAAoB,EAAE,OAAO,EAAE,KAAK;AAAA,EACpC,gBAAgB,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS;AAAA,EACtD,WAAW,EAAE,OAAO;AAAA,EACpB,WAAW,EAAE,QAAQ;AAAA,EACrB,YAAY,EAAE,OAAO;AAAA,EACrB,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACvC,UAAU,EAAE,OAAO,EAAE,KAAK;AAAA,EAC1B,gBAAgB,EAAE,OAAO,EAAE,KAAK;AAAA,EAChC,kBAAkB,kCAAkC,SAAS;AAC/D,CAAC;AAEM,MAAM,qCAAqC,EAAE,OAAO;AAAA,EACzD,MAAM,EAAE,MAAM,sBAAsB;AAAA,EACpC,YAAY;AACd,CAAC;AAMM,MAAM,uCAAuC,EAAE,OAAO;AAAA,EAC3D,gBAAgB,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS,2DAA2D;AAAA,EACtG,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,SAAS,wBAAwB;AAAA,EAC/D,SAAS,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,QAAQ,CAAC,EAAE,SAAS,EAAE,SAAS,sCAAsC;AACvG,CAAC;AAEM,MAAM,wCAAwC,EAAE,OAAO;AAAA,EAC5D,SAAS,EAAE,QAAQ;AAAA,EACnB,SAAS,EAAE,OAAO;AAAA,EAClB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY;AACtC,CAAC;",
|
|
4
|
+
"sourcesContent": ["import { z } from 'zod'\nimport { workflowDefinitionDataSchema, workflowDefinitionDraftDataSchema } from '../data/validators'\n\nexport const workflowsTag = 'Workflows'\n\nexport const workflowErrorSchema = z\n .object({\n error: z.string(),\n details: z.unknown().optional(),\n })\n .passthrough()\n\nexport const userTaskStatusSchema = z.enum([\n 'PENDING',\n 'IN_PROGRESS',\n 'COMPLETED',\n 'CANCELLED',\n 'ESCALATED',\n])\n\nexport const userTaskSchema = z.object({\n id: z.string().uuid(),\n workflowInstanceId: z.string().uuid(),\n stepInstanceId: z.string().uuid(),\n branchInstanceId: z.string().uuid().nullable().optional(),\n taskName: z.string(),\n description: z.string().nullable().optional(),\n status: userTaskStatusSchema,\n formSchema: z.unknown().nullable().optional(),\n formData: z.unknown().nullable().optional(),\n assignedTo: z.string().nullable().optional(),\n assigneeKind: z\n .enum(['user', 'customer'])\n .describe('Which principal namespace assignedTo names \u2014 a backoffice user or a portal principal'),\n assignedToRoles: z.array(z.string()).nullable().optional(),\n entityTypes: z\n .array(z.string())\n .nullable()\n .optional()\n .describe('Distinct authored entity types of the bindings, denormalized for the visibility filter'),\n claimedBy: z.string().nullable().optional(),\n claimedAt: z.string().nullable().optional(),\n dueDate: z.string().nullable().optional(),\n escalatedAt: z.string().nullable().optional(),\n escalatedTo: z.string().nullable().optional(),\n completedBy: z.string().nullable().optional(),\n completedAt: z.string().nullable().optional(),\n comments: z.string().nullable().optional(),\n reassignedBy: z.string().nullable().optional().describe('Who last reassigned this task'),\n reassignedAt: z.string().nullable().optional().describe('When it was last reassigned'),\n reassignReason: z.string().nullable().optional().describe('Why it was reassigned'),\n tenantId: z.string().uuid(),\n organizationId: z.string().uuid(),\n createdAt: z.string(),\n /** Optimistic-lock version \u2014 a reassign UI sends it back as the lock header. */\n updatedAt: z.string(),\n})\n\n/**\n * List projection: every field the raw-entity dump already returned, plus the\n * work-item fields consumers had to dig out of `formSchema` themselves (the\n * enterprise \"Review proposal\" row action read `row.proposalId`, which was\n * never there). Strictly a superset \u2014 BACKWARD_COMPATIBILITY.md \u00A77 forbids\n * dropping a response field.\n */\nexport const userTaskRowSchema = userTaskSchema.extend({\n kind: z.literal('user_task').describe('Work-inbox source discriminator'),\n proposalId: z.string().nullable().describe('Agent proposal this task disposes, when any'),\n priority: z.union([z.string(), z.number()]).nullable(),\n entityBindings: z.array(z.unknown()).nullable().describe('Records this task is about, when authored'),\n})\n\nexport const userTaskListQuerySchema = z.object({\n status: z.string().optional().describe('Filter by status (comma-separated for multiple: PENDING,IN_PROGRESS,COMPLETED,CANCELLED,ESCALATED)'),\n assignedTo: z.string().uuid().optional().describe('Filter by assigned user ID'),\n workflowInstanceId: z.string().uuid().optional().describe('Filter by workflow instance ID'),\n overdue: z.coerce.boolean().optional().describe('Filter overdue tasks (true/false)'),\n myTasks: z.coerce.boolean().optional().describe('Show only tasks assigned to or claimable by current user'),\n limit: z.coerce.number().min(1).max(100).optional().default(50).describe('Number of results (max 100)'),\n offset: z.coerce.number().min(0).optional().default(0).describe('Pagination offset'),\n})\n\nexport const paginationSchema = z.object({\n total: z.number().int().nonnegative(),\n limit: z.number().int().positive(),\n offset: z.number().int().nonnegative(),\n hasMore: z.boolean(),\n})\n\n/**\n * A row the caller may know exists but may not read (design \u00A73.6).\n *\n * Three fields and no fourth: the id (the argument to reassignment and to a\n * support conversation), the reason (an author's typo vs a policy refusal) and\n * the entity type that names the grant which would fix it. Nothing that says\n * what the task is ABOUT appears here \u2014 that is the difference between a\n * diagnostic and a leak.\n */\nexport const taskEntityHiddenMarkerSchema = z.object({\n id: z.string(),\n reason: z.enum(['denied:entity-access', 'denied:unknown-entity-type']),\n entityType: z.string().nullable(),\n})\n\n/**\n * Emitted only for a principal that already knows the rows are there \u2014 a\n * `workflows.tasks.view_all` holder or a superadmin. For everybody else the\n * entity gate removed those rows in SQL, `entityHidden` is empty and its\n * absence discloses nothing.\n *\n * `pagination.total` COUNTS the hidden rows, and that is deliberate: an\n * administrator asking \"how much work is open?\" wants the true number, and the\n * marker list is what explains why the page is shorter than it. Suppressing them\n * from the count would make the page short for no stated reason, which is the\n * silent disappearance \u00A73.6 exists to prevent.\n */\nexport const taskListDiagnosticsSchema = z.object({\n entityHidden: z.array(taskEntityHiddenMarkerSchema),\n entityHiddenCount: z.number().int().nonnegative(),\n})\n\nexport const userTaskListResponseSchema = z.object({\n data: z.array(userTaskRowSchema),\n pagination: paginationSchema,\n diagnostics: taskListDiagnosticsSchema.optional(),\n})\n\n/**\n * A decision button as the assignee sees it, re-resolved at request time from\n * the instance's pinned definition (never stored on the task row).\n */\nexport const userTaskDecisionSchema = z.object({\n id: z.string(),\n label: z.union([z.string(), z.record(z.string(), z.string())]),\n transitionId: z.string().describe('Durable id of the route this button takes'),\n style: z.enum(['primary', 'secondary', 'destructive']).optional(),\n})\n\n/**\n * Why an act surface is closed to a caller who can read the row.\n *\n * Each value is derivable from fields the same response already carries, except\n * `unavailable`, which is deliberately mute: it stands for the entity-gate\n * refusal the act routes answer as a bare 404, and naming the binding there\n * would leak it to the very caller the gate refused.\n */\nexport const taskActionBlockReasonSchema = z.enum([\n 'not-workable',\n 'owned-by-another',\n 'not-in-your-queue',\n 'unowned',\n 'unavailable',\n])\n\n/**\n * Detail projection: the same superset the list returns, plus the derived\n * decision buttons, the definition step id they belong to, and the \u00A76.4 act\n * surfaces.\n *\n * The `can*` flags are ADDITIVE (BACKWARD_COMPATIBILITY.md \u00A77) and are the\n * server's own decision, not a hint: `workflows.tasks.view_all` makes a row\n * readable and leaves `canComplete` false, which is exactly the asymmetry the\n * page used to render wrong.\n */\nexport const userTaskDetailResponseSchema = z.object({\n data: userTaskRowSchema.extend({\n stepId: z.string().nullable().describe('Definition step the task is parked on'),\n decisions: z.array(userTaskDecisionSchema),\n canComplete: z.boolean().describe('The caller may complete or decide this task'),\n canClaim: z.boolean().describe('The caller may claim it off its role queue'),\n canRelease: z.boolean().describe('The caller holds the claim and may release it'),\n canReassign: z.boolean().describe('The caller may move it to another assignee or queue'),\n actBlockedReason: taskActionBlockReasonSchema\n .nullable()\n .describe('Why completion is unavailable; null when it is available'),\n }),\n})\n\nexport const userTaskClaimResponseSchema = z.object({\n data: userTaskSchema,\n message: z.string(),\n})\n\n/**\n * Reassignment answers with the same row projection every other task surface\n * serves, so a client can refresh its copy \u2014 including the `reassignedBy` /\n * `reassignedAt` / `reassignReason` audit fields and the new `updatedAt` the\n * next optimistic-lock header must carry.\n */\nexport const userTaskReassignResponseSchema = z.object({\n data: userTaskRowSchema,\n message: z.string(),\n})\n\n// ============================================================================\n// Work Inbox (spec \u00A76.2/\u00A76.3 \u2014 one queue over every registered source)\n// ============================================================================\n\nexport const workInboxPrioritySchema = z.enum(['extreme', 'high', 'medium', 'low'])\n\nexport const workInboxEntityBindingSchema = z.object({\n entityType: z.string(),\n entityId: z.string(),\n label: z.string().nullable().optional(),\n})\n\nexport const workInboxActionSchema = z.object({\n id: z.string(),\n labelKey: z.string(),\n endpoint: z.string(),\n appliesTo: z.enum(['claimable', 'claimed-by-me', 'open', 'always']),\n})\n\n/**\n * Passthrough on purpose: a row carries its source's own payload alongside the\n * common projection, so a `user_task` row is a superset of a\n * `GET /api/workflows/tasks` row (that is what keeps `proposalId` reachable).\n */\nexport const workInboxRowSchema = z\n .object({\n id: z.string(),\n kind: z.string().describe('Source discriminator \u2014 user_task, agent_disposition, \u2026'),\n moduleId: z.string(),\n title: z.string(),\n description: z.string().nullable(),\n status: z.string(),\n priority: workInboxPrioritySchema.nullable(),\n dueDate: z.string().nullable(),\n overdue: z.boolean().describe('Derived: past due and not finished'),\n createdAt: z.string(),\n updatedAt: z.string(),\n assignedTo: z.string().nullable(),\n assignedToRoles: z.array(z.string()).nullable(),\n claimedBy: z.string().nullable(),\n entityTypes: z.array(z.string()),\n entityBindings: z.array(workInboxEntityBindingSchema),\n detailHref: z.string().nullable(),\n actions: z.array(workInboxActionSchema),\n })\n .passthrough()\n\nexport const workInboxListQuerySchema = z.object({\n kind: z.string().optional().describe('Filter by source kind (comma-separated)'),\n module: z.string().optional().describe('Filter by owning module id (comma-separated)'),\n entityType: z.string().optional().describe('Filter by bound entity type (comma-separated)'),\n role: z.string().optional().describe('Filter by queued role (comma-separated)'),\n priority: z.string().optional().describe('Filter by priority (comma-separated: extreme,high,medium,low)'),\n status: z.string().optional().describe('Filter by status (comma-separated)'),\n overdue: z.coerce.boolean().optional().describe('Only items past their due date'),\n myWork: z.coerce.boolean().optional().describe('Only items assigned to, claimed by, or queued to a role of the caller'),\n assignedTo: z.string().optional().describe('Filter by assignee'),\n workflowInstanceId: z.string().uuid().optional().describe('Filter by workflow instance'),\n limit: z.coerce.number().min(1).max(100).optional().default(50).describe('Number of results (max 100)'),\n offset: z.coerce.number().min(0).optional().default(0).describe('Pagination offset'),\n})\n\nexport const workInboxListResponseSchema = z.object({\n data: z.array(workInboxRowSchema),\n pagination: paginationSchema,\n meta: z.object({\n kinds: z.array(z.string()).describe('Source kinds that answered this request'),\n degradedKinds: z.array(z.string()).describe('Source kinds that failed; their work is missing from this page'),\n }),\n diagnostics: taskListDiagnosticsSchema.optional(),\n})\n\nexport const workInboxClaimNextResponseSchema = z.object({\n data: workInboxRowSchema.nullable().describe('The claimed item, or null when nothing was claimable'),\n message: z.string(),\n})\n\nexport const completeTaskRequestSchema = z.object({\n formData: z.record(z.string(), z.unknown()).describe('Form field values'),\n comments: z.string().optional().describe('Optional comments'),\n decisionId: z\n .string()\n .optional()\n .describe('Decision button pressed; selects the outgoing route and is recorded with the completion'),\n})\n\nexport const userTaskCompleteResponseSchema = z.object({\n data: userTaskSchema,\n message: z.string(),\n})\n\n/**\n * Portal task surface (design \u00A77.4).\n *\n * A separate response envelope from the backoffice one on purpose: the portal\n * routes speak the portal convention (`{ ok, \u2026 }`, page/pageSize paging) that\n * every other `customer_accounts` portal route already speaks, and keeping the\n * two shapes apart means a future change to one cannot silently reshape the\n * other. The ROW projection is deliberately shared \u2014 a task is the same record\n * whoever reads it, and a divergent portal projection is how a field ends up\n * exposed on one surface and not the other.\n */\nexport const portalTaskErrorSchema = z\n .object({ ok: z.literal(false), error: z.string() })\n .describe('Portal error response')\n\nexport const portalTaskListQuerySchema = z.object({\n status: z.string().optional().describe('Filter by status (comma-separated for multiple)'),\n page: z.coerce.number().min(1).optional().default(1).describe('Page number'),\n pageSize: z.coerce.number().min(1).max(100).optional().default(25).describe('Rows per page (max 100)'),\n})\n\nexport const portalPaginationSchema = z.object({\n page: z.number().int().positive(),\n pageSize: z.number().int().positive(),\n total: z.number().int().nonnegative(),\n totalPages: z.number().int().positive(),\n})\n\nexport const portalTaskListResponseSchema = z.object({\n ok: z.literal(true),\n tasks: z.array(userTaskRowSchema),\n pagination: portalPaginationSchema,\n})\n\nexport const portalTaskDetailResponseSchema = z.object({\n ok: z.literal(true),\n task: userTaskRowSchema,\n decisions: z.array(userTaskDecisionSchema),\n formKey: z.string().nullable().describe('External renderer key, when the author declared one'),\n canComplete: z\n .boolean()\n .describe('True only for the assignee; a portal admin reading a company member\\'s task gets false'),\n})\n\nexport const portalTaskCompleteRequestSchema = completeTaskRequestSchema\n\nexport const portalTaskCompleteResponseSchema = z.object({\n ok: z.literal(true),\n task: userTaskRowSchema.nullable(),\n})\n\nexport const advanceWorkflowRequestSchema = z.object({\n toStepId: z.string().optional().describe('Optional target step ID; first valid transition is used when omitted'),\n triggerData: z.record(z.string(), z.unknown()).optional().describe('Optional trigger data used during transition evaluation'),\n contextUpdates: z.record(z.string(), z.unknown()).optional().describe('Optional workflow context updates applied before transition'),\n})\n\nexport const advanceWorkflowResponseSchema = z.object({\n data: z.object({\n instance: z.object({\n id: z.string().uuid(),\n status: z.string(),\n currentStepId: z.string().nullable(),\n previousStepId: z.string().nullable(),\n transitionFired: z.string().nullable(),\n context: z.unknown(),\n }),\n execution: z.unknown(),\n }),\n message: z.string(),\n})\n\nexport const sendSignalRequestSchema = z.object({\n signalName: z.string().describe('Name of the signal to send'),\n payload: z.record(z.string(), z.unknown()).optional().describe('Optional data payload for the signal'),\n})\n\nexport const sendSignalResponseSchema = z.object({\n success: z.boolean(),\n message: z.string(),\n})\n\nexport const updateInstanceContextRequestSchema = z.object({\n context: z\n .record(z.string(), z.unknown())\n .describe('Partial context patch, shallow-merged into the running instance context'),\n})\n\nexport const updateInstanceContextResponseSchema = z.object({\n ok: z.literal(true),\n instanceId: z.string(),\n woken: z.array(z.string()).describe('Step ids of the WAIT_FOR_CONDITION waiters that resumed'),\n})\n\nexport const validateStartRequestSchema = z.object({\n workflowId: z.string().min(1).describe('Workflow definition ID'),\n version: z.number().int().positive().optional().describe('Optional workflow definition version'),\n context: z.record(z.string(), z.unknown()).optional().describe('Initial workflow context variables'),\n locale: z.string().optional().describe('Locale for validation messages'),\n})\n\nexport const validateStartErrorSchema = z.object({\n ruleId: z.string(),\n message: z.string(),\n code: z.string(),\n})\n\nexport const validateStartRuleSchema = z.object({\n ruleId: z.string(),\n passed: z.boolean(),\n executionTime: z.number().optional(),\n})\n\nexport const validateStartResponseSchema = z.object({\n canStart: z.boolean(),\n workflowId: z.string(),\n errors: z.array(validateStartErrorSchema).optional(),\n validatedRules: z.array(validateStartRuleSchema).optional(),\n})\n\n// ---------------------------------------------------------------------------\n// Workflow Definition Response Schemas\n// ---------------------------------------------------------------------------\n\nexport const workflowDefinitionSourceSchema = z.enum(['code', 'code_override', 'user'])\n\nexport const workflowDefinitionResponseSchema = z\n .object({\n id: z.string().describe('UUID for DB definitions, or \"code:<workflowId>\" for code-based definitions'),\n workflowId: z.string(),\n workflowName: z.string(),\n description: z.string().nullable(),\n version: z.number().int(),\n definition: workflowDefinitionDataSchema,\n metadata: z.record(z.string(), z.unknown()).nullable(),\n enabled: z.boolean(),\n effectiveFrom: z.string().nullable(),\n effectiveTo: z.string().nullable(),\n tenantId: z.string().nullable(),\n organizationId: z.string().nullable(),\n grantedFeatures: z.array(z.string()).nullable(),\n createdBy: z.string().nullable(),\n updatedBy: z.string().nullable(),\n createdAt: z.string().nullable(),\n updatedAt: z.string().nullable(),\n deletedAt: z.string().nullable(),\n source: workflowDefinitionSourceSchema,\n isCodeBased: z.boolean(),\n codeModuleId: z.string().nullable(),\n })\n .passthrough()\n\nexport const workflowDefinitionListResponseSchema = z.object({\n data: z.array(workflowDefinitionResponseSchema),\n pagination: paginationSchema,\n})\n\nexport const workflowDefinitionDetailResponseSchema = z.object({\n data: workflowDefinitionResponseSchema,\n})\n\nexport const workflowDefinitionMutationResponseSchema = z.object({\n data: workflowDefinitionResponseSchema,\n message: z.string(),\n})\n\nexport const workflowDefinitionResetResponseSchema = z.object({\n data: workflowDefinitionResponseSchema.nullable(),\n message: z.string(),\n})\n\nexport const workflowDefinitionDeleteResponseSchema = z.object({\n message: z.string(),\n})\n\n// ---------------------------------------------------------------------------\n// Workflow Instance Response Schemas\n// ---------------------------------------------------------------------------\n\nexport const workflowInstanceStatusEnumSchema = z.enum([\n 'RUNNING',\n 'PAUSED',\n 'COMPLETED',\n 'FAILED',\n 'CANCELLED',\n 'COMPENSATING',\n 'COMPENSATED',\n 'WAITING_FOR_ACTIVITIES',\n])\n\nexport const workflowRunOutcomeEnumSchema = z.enum([\n 'success',\n 'success_with_warnings',\n 'partial_failure',\n 'failure',\n 'cancelled',\n 'compensated',\n])\n\nexport const workflowInstanceResponseSchema = z.object({\n id: z.string().uuid(),\n definitionId: z.string().uuid(),\n workflowId: z.string(),\n version: z.number().int(),\n status: workflowInstanceStatusEnumSchema,\n // The run's VERDICT, additive alongside the lifecycle status. Null while the\n // run is still going, and null for ever on a row written before outcomes\n // existed \u2014 which means \"ran before outcomes existed\", never \"success\".\n outcome: workflowRunOutcomeEnumSchema.nullable().optional(),\n currentStepId: z.string(),\n context: z.unknown(),\n correlationKey: z.string().nullable().optional(),\n metadata: z.unknown().nullable().optional(),\n startedAt: z.string(),\n completedAt: z.string().nullable().optional(),\n pausedAt: z.string().nullable().optional(),\n cancelledAt: z.string().nullable().optional(),\n errorMessage: z.string().nullable().optional(),\n errorDetails: z.unknown().nullable().optional(),\n pendingTransition: z.unknown().nullable().optional(),\n retryCount: z.number().int(),\n tenantId: z.string().uuid(),\n organizationId: z.string().uuid(),\n createdAt: z.string(),\n updatedAt: z.string(),\n deletedAt: z.string().nullable().optional(),\n})\n\nexport const workflowInstanceListResponseSchema = z.object({\n data: z.array(workflowInstanceResponseSchema),\n pagination: paginationSchema,\n})\n\nexport const workflowInstanceDetailResponseSchema = z.object({\n data: workflowInstanceResponseSchema,\n})\n\nexport const workflowInstanceCancelResponseSchema = z.object({\n data: workflowInstanceResponseSchema,\n message: z.string(),\n})\n\n// ---------------------------------------------------------------------------\n// Workflow Execution Result Schemas\n// ---------------------------------------------------------------------------\n\nexport const workflowEventSummarySchema = z.object({\n eventType: z.string(),\n occurredAt: z.string(),\n data: z.unknown().optional(),\n})\n\nexport const workflowExecutionResultSchema = z.object({\n status: workflowInstanceStatusEnumSchema,\n currentStep: z.string(),\n context: z.unknown(),\n events: z.array(workflowEventSummarySchema),\n errors: z.array(z.string()).optional(),\n executionTime: z.number(),\n})\n\nexport const workflowBackgroundStartSchema = z.object({\n status: workflowInstanceStatusEnumSchema,\n currentStep: z.string(),\n message: z.string(),\n})\n\nexport const workflowInstanceCreateResponseSchema = z.object({\n data: z.object({\n instance: workflowInstanceResponseSchema,\n execution: workflowBackgroundStartSchema,\n }),\n message: z.string(),\n})\n\nexport const workflowInstanceRetryResponseSchema = z.object({\n data: z.object({\n instance: workflowInstanceResponseSchema,\n execution: workflowExecutionResultSchema,\n }),\n message: z.string(),\n})\n\n// ---------------------------------------------------------------------------\n// Workflow Event Response Schemas\n// ---------------------------------------------------------------------------\n\nexport const workflowEventRowSchema = z.object({\n id: z.string(),\n workflowInstanceId: z.string().uuid(),\n stepInstanceId: z.string().uuid().nullable().optional(),\n eventType: z.string(),\n eventData: z.unknown(),\n occurredAt: z.string(),\n userId: z.string().nullable().optional(),\n tenantId: z.string().uuid(),\n organizationId: z.string().uuid(),\n})\n\nexport const workflowEventInstanceSummarySchema = z.object({\n id: z.string().uuid(),\n workflowId: z.string(),\n workflowName: z.string(),\n status: workflowInstanceStatusEnumSchema,\n})\n\nexport const workflowEventListItemSchema = z.object({\n id: z.string(),\n workflowInstanceId: z.string().uuid(),\n stepInstanceId: z.string().uuid().nullable().optional(),\n eventType: z.string(),\n eventData: z.unknown(),\n occurredAt: z.string(),\n userId: z.string().nullable().optional(),\n workflowInstance: workflowEventInstanceSummarySchema.nullable(),\n})\n\nexport const workflowEventListResponseSchema = z.object({\n items: z.array(workflowEventListItemSchema),\n total: z.number().int().nonnegative(),\n page: z.number().int().positive(),\n pageSize: z.number().int().positive(),\n totalPages: z.number().int().nonnegative(),\n})\n\nexport const workflowEventInstanceDetailSchema = z.object({\n id: z.string().uuid(),\n workflowId: z.string(),\n version: z.number().int(),\n status: workflowInstanceStatusEnumSchema,\n currentStepId: z.string(),\n correlationKey: z.string().nullable().optional(),\n startedAt: z.string().nullable().optional(),\n completedAt: z.string().nullable().optional(),\n context: z.unknown(),\n})\n\nexport const workflowEventDetailSchema = z.object({\n id: z.string(),\n workflowInstanceId: z.string().uuid(),\n stepInstanceId: z.string().uuid().nullable().optional(),\n eventType: z.string(),\n eventData: z.unknown(),\n occurredAt: z.string(),\n userId: z.string().nullable().optional(),\n tenantId: z.string().uuid(),\n organizationId: z.string().uuid(),\n workflowInstance: workflowEventInstanceDetailSchema.nullable(),\n})\n\nexport const workflowEventRowListResponseSchema = z.object({\n data: z.array(workflowEventRowSchema),\n pagination: paginationSchema,\n})\n\n// ---------------------------------------------------------------------------\n// Step Instance Schemas (spec \u00A78.3 per-step I/O inspector)\n// ---------------------------------------------------------------------------\n\nexport const workflowStepInstanceRowSchema = z.object({\n id: z.string().uuid(),\n workflowInstanceId: z.string().uuid(),\n branchInstanceId: z.string().uuid().nullable().optional(),\n stepId: z.string(),\n stepName: z.string(),\n stepType: z.string(),\n status: z.string(),\n inputData: z.unknown().nullable().optional(),\n outputData: z.unknown().nullable().optional(),\n errorData: z.unknown().nullable().optional(),\n enteredAt: z.string().nullable().optional(),\n exitedAt: z.string().nullable().optional(),\n executionTimeMs: z.number().int().nullable().optional(),\n retryCount: z.number().int().nonnegative(),\n})\n\nexport const workflowStepInstanceListResponseSchema = z.object({\n data: z.array(workflowStepInstanceRowSchema),\n pagination: paginationSchema,\n})\n\n// ---------------------------------------------------------------------------\n// Signal Schemas\n// ---------------------------------------------------------------------------\n\nexport const sendSignalByCorrelationRequestSchema = z.object({\n correlationKey: z.string().min(1).describe('Correlation key used to target waiting workflow instances'),\n signalName: z.string().min(1).describe('Signal name to deliver'),\n payload: z.record(z.string(), z.unknown()).optional().describe('Optional data payload for the signal'),\n})\n\nexport const sendSignalByCorrelationResponseSchema = z.object({\n success: z.boolean(),\n message: z.string(),\n count: z.number().int().nonnegative(),\n})\n\n// ---------------------------------------------------------------------------\n// Workflow-Safe Command Schemas\n// ---------------------------------------------------------------------------\n\nexport const workflowSafeCommandSchema = z.object({\n commandId: z.string().min(1).describe('Command bus id allowlisted for UPDATE_ENTITY activities'),\n requiredFeatures: z.array(z.string()).min(1).describe('ACL features the workflow actor must hold to run the command'),\n labelKey: z.string().nullable().optional().describe('i18n key for a human label, supplied by the declaring module'),\n enabled: z.boolean().optional().describe('Whether this tenant has switched the command on'),\n defaultEnabled: z.boolean().optional().describe('Whether the declaration carries the grandfather clause, i.e. it is on for a tenant that never saved the setting'),\n})\n\nexport const workflowSafeCommandListResponseSchema = z.object({\n items: z.array(workflowSafeCommandSchema),\n})\n\nexport const workflowCommandSettingsResponseSchema = z.object({\n configured: z.boolean().describe('False when the tenant has never saved the setting and the answers are the grandfathered defaults'),\n items: z.array(workflowSafeCommandSchema),\n})\n\nexport const workflowCommandSettingsPutBodySchema = z.object({\n enabledCommandIds: z\n .array(z.string().min(1))\n .max(500)\n .describe('The complete set of catalogue command ids to enable for this tenant'),\n})\n\nexport const workflowCommandSettingsPutResponseSchema = workflowCommandSettingsResponseSchema.extend({\n ok: z.boolean(),\n})\n\n// ---------------------------------------------------------------------------\n// Workflow Function Schemas\n// ---------------------------------------------------------------------------\n\nexport const workflowFunctionSchema = z.object({\n name: z.string().min(1).describe('DI-registered function name resolved as workflowFunction:<name> by EXECUTE_FUNCTION activities'),\n labelKey: z.string().optional().describe('Optional i18n key for a human-readable label'),\n description: z.string().optional().describe('Optional description of what the function does'),\n})\n\nexport const workflowFunctionListResponseSchema = z.object({\n items: z.array(workflowFunctionSchema),\n})\n\n// ---------------------------------------------------------------------------\n// Workflow Endpoint Catalog Schemas\n// ---------------------------------------------------------------------------\n\nexport const workflowEndpointParamSchema = z.object({\n name: z.string().min(1).describe('Parameter name'),\n in: z.enum(['path', 'query', 'header']).describe('Where the parameter is sent'),\n required: z.boolean().describe('Whether the endpoint requires the parameter'),\n type: z.string().describe('JSON-schema primitive type of the parameter, or \"unknown\"'),\n})\n\nexport const workflowEndpointSchema = z.object({\n path: z.string().min(1).describe('Endpoint path with the /api prefix and {param} placeholders'),\n method: z.string().min(1).describe('HTTP method'),\n summary: z.string().describe('Human-readable endpoint summary'),\n tag: z.string().describe('OpenAPI tag used to group endpoints in the picker'),\n params: z.array(workflowEndpointParamSchema).describe('Path/query/header parameters split required vs optional'),\n hasRequestSchema: z.boolean().describe('Whether the endpoint declares a JSON request body schema'),\n requestSchema: z.record(z.string(), z.unknown()).optional().describe('Declared JSON schema of the request body, when available'),\n responseSchema: z.record(z.string(), z.unknown()).optional().describe('Declared JSON schema of the success response; omitted when the route declares none'),\n})\n\nexport const workflowEndpointListResponseSchema = z.object({\n items: z.array(workflowEndpointSchema),\n})\n\n// ---------------------------------------------------------------------------\n// Workflow Template Schemas\n// ---------------------------------------------------------------------------\n\nexport const workflowTemplateSchema = z.object({\n id: z.string().min(1).describe('Stable template identifier (kebab-case)'),\n nameKey: z.string().min(1).describe('i18n key resolving to the template display name'),\n descriptionKey: z.string().min(1).describe('i18n key resolving to the template description'),\n category: z.string().min(1).describe('Gallery grouping category'),\n icon: z.string().min(1).describe('Lucide icon name for the gallery card'),\n definition: workflowDefinitionDataSchema.describe('Complete workflow definition the template seeds'),\n})\n\nexport const workflowTemplateListResponseSchema = z.object({\n items: z.array(workflowTemplateSchema),\n})\n\n// ---------------------------------------------------------------------------\n// Workflow Definition Draft Schemas\n// ---------------------------------------------------------------------------\n\nexport const workflowDefinitionDraftResponseSchema = z.object({\n id: z.string().describe('Draft row UUID'),\n definitionId: z.string().nullable().describe('The workflow definition this draft belongs to'),\n definition: workflowDefinitionDraftDataSchema.describe('The autosaved (possibly incomplete) workflow definition'),\n metadata: z.record(z.string(), z.unknown()).nullable(),\n baseUpdatedAt: z.string().nullable().describe('The definition updatedAt the draft forked from, for conflict-aware restore'),\n createdAt: z.string().nullable(),\n updatedAt: z.string().nullable(),\n})\n\nexport const workflowDefinitionDraftDetailResponseSchema = z.object({\n data: workflowDefinitionDraftResponseSchema,\n})\n\nexport const workflowDefinitionDraftMutationResponseSchema = z.object({\n data: workflowDefinitionDraftResponseSchema,\n message: z.string(),\n})\n\nexport const workflowDefinitionDraftDeleteResponseSchema = z.object({\n message: z.string(),\n})\n\n// ---------------------------------------------------------------------------\n// Workflow Context Schema (per-step ledger) Schemas\n// ---------------------------------------------------------------------------\n\nexport const ledgerEntrySourceSchema = z.object({\n kind: z.enum([\n 'contextSchema',\n 'trigger',\n 'activity',\n 'setVariable',\n 'userTask',\n 'signal',\n 'subWorkflow',\n 'join',\n 'asyncResult',\n ]).describe('What kind of producer contributes this context entry'),\n stepId: z.string().optional().describe('Producing step, when the producer is step-bound'),\n activityId: z.string().optional().describe('Producing activity, when the producer is an activity'),\n label: z.string().describe('Stable machine-readable producer label (e.g. \"trigger:<id>:payload\")'),\n})\n\nexport const ledgerEntrySchema = z.object({\n path: z.string().describe('Dot path in workflow context (\"*\" is the untyped whole-payload wildcard)'),\n type: z.enum(['text', 'number', 'boolean', 'select', 'date', 'object', 'unknown']),\n presence: z.enum(['always', 'maybe']).describe('\"always\" only when the entry is present on every incoming route'),\n source: ledgerEntrySourceSchema,\n})\n\nexport const workflowContextSchemaStepSchema = z.object({\n entries: z.array(ledgerEntrySchema),\n})\n\nexport const workflowContextSchemaResponseSchema = z.object({\n steps: z.record(z.string(), workflowContextSchemaStepSchema).describe('Per-step incoming context ledger, keyed by stepId'),\n})\n\n// ---------------------------------------------------------------------------\n// Workflow Test-Step (mock-first dry run) Schemas\n// ---------------------------------------------------------------------------\n\nexport const workflowTestStepRequestSchema = z.object({\n stepId: z.string().optional().describe('Editor step the test targets; used as the synthetic currentStepId during interpolation'),\n activityType: z.string().describe('Registered activity type id (e.g. SEND_EMAIL)'),\n config: z.record(z.string(), z.unknown()).describe('Raw activity config, possibly containing {{...}} templates'),\n context: z.record(z.string(), z.unknown()).optional().describe('Caller-supplied sample workflow context interpolated into the config'),\n})\n\nexport const workflowTestStepSimulatedResponseSchema = z.object({\n simulated: z.literal(true),\n activityType: z.string(),\n output: z.unknown().describe('The would-do mock output for the activity type'),\n interpolatedConfig: z.record(z.string(), z.unknown()).describe('Config after variable interpolation, so the UI can show resolved values'),\n})\n\nexport const workflowTestStepRefusedResponseSchema = z.object({\n refused: z.literal(true),\n reason: z.enum(['refused', 'noMock']).describe('\"refused\": the type opts out of simulation; \"noMock\": the type declares no mock'),\n activityType: z.string(),\n})\n\nexport const workflowTestStepInterpolationFailedResponseSchema = z.object({\n interpolationFailed: z.literal(true),\n token: z.string().describe('The offending {{ }} token, without the braces'),\n message: z.string().describe('Why the token could not be interpolated under strict mode'),\n activityType: z.string(),\n})\n\nexport const workflowTestStepResponseSchema = z.union([\n workflowTestStepSimulatedResponseSchema,\n workflowTestStepRefusedResponseSchema,\n workflowTestStepInterpolationFailedResponseSchema,\n])\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { NextResponse } from "next/server";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { createRequestContainer } from "@open-mercato/shared/lib/di/container";
|
|
4
|
+
import {
|
|
5
|
+
getCustomerAuthFromRequest,
|
|
6
|
+
requireCustomerFeature
|
|
7
|
+
} from "@open-mercato/core/modules/customer_accounts/lib/customerAuth";
|
|
8
|
+
import { createLogger } from "@open-mercato/shared/lib/logger";
|
|
9
|
+
import { UserTask } from "../../../../../data/entities.js";
|
|
10
|
+
import { serializeUserTask } from "../../../../tasks/serialize.js";
|
|
11
|
+
import {
|
|
12
|
+
decidePortalTaskAccess,
|
|
13
|
+
PORTAL_TASK_REFUSAL,
|
|
14
|
+
PORTAL_TASKS_COMPLETE_FEATURE,
|
|
15
|
+
resolvePortalTaskPrincipal
|
|
16
|
+
} from "../../../../../lib/portal-task-access.js";
|
|
17
|
+
import {
|
|
18
|
+
workflowsTag,
|
|
19
|
+
portalTaskCompleteRequestSchema,
|
|
20
|
+
portalTaskCompleteResponseSchema,
|
|
21
|
+
portalTaskErrorSchema
|
|
22
|
+
} from "../../../../openapi.js";
|
|
23
|
+
const logger = createLogger("workflows");
|
|
24
|
+
const metadata = { requireAuth: false };
|
|
25
|
+
const completeSchema = z.object({
|
|
26
|
+
formData: z.record(z.string(), z.any()),
|
|
27
|
+
comments: z.string().optional(),
|
|
28
|
+
decisionId: z.string().min(1).optional()
|
|
29
|
+
});
|
|
30
|
+
async function POST(request, { params }) {
|
|
31
|
+
const auth = await getCustomerAuthFromRequest(request);
|
|
32
|
+
if (!auth) {
|
|
33
|
+
return NextResponse.json({ ok: false, error: "Authentication required" }, { status: 401 });
|
|
34
|
+
}
|
|
35
|
+
const container = await createRequestContainer();
|
|
36
|
+
const rbac = container.resolve("customerRbacService");
|
|
37
|
+
try {
|
|
38
|
+
await requireCustomerFeature(auth, [PORTAL_TASKS_COMPLETE_FEATURE], rbac);
|
|
39
|
+
} catch (response) {
|
|
40
|
+
return response;
|
|
41
|
+
}
|
|
42
|
+
try {
|
|
43
|
+
const em = container.resolve("em");
|
|
44
|
+
const acl = await rbac.loadAcl(auth.sub, {
|
|
45
|
+
tenantId: auth.tenantId,
|
|
46
|
+
organizationId: auth.orgId
|
|
47
|
+
});
|
|
48
|
+
const resolved = await resolvePortalTaskPrincipal({ auth, em, isPortalAdmin: acl.isPortalAdmin });
|
|
49
|
+
if (!resolved.ok) return NextResponse.json(resolved.body, { status: resolved.status });
|
|
50
|
+
const parsed = completeSchema.safeParse(await request.json());
|
|
51
|
+
if (!parsed.success) {
|
|
52
|
+
return NextResponse.json(
|
|
53
|
+
{ ok: false, error: "Invalid request body", details: parsed.error.format() },
|
|
54
|
+
{ status: 400 }
|
|
55
|
+
);
|
|
56
|
+
}
|
|
57
|
+
const task = await em.findOne(UserTask, {
|
|
58
|
+
id: params.id,
|
|
59
|
+
tenantId: auth.tenantId,
|
|
60
|
+
organizationId: auth.orgId
|
|
61
|
+
});
|
|
62
|
+
if (!task) {
|
|
63
|
+
return NextResponse.json(PORTAL_TASK_REFUSAL.body, { status: PORTAL_TASK_REFUSAL.status });
|
|
64
|
+
}
|
|
65
|
+
const decision = decidePortalTaskAccess(resolved.principal, task);
|
|
66
|
+
if (!decision.actable) {
|
|
67
|
+
return NextResponse.json(PORTAL_TASK_REFUSAL.body, { status: PORTAL_TASK_REFUSAL.status });
|
|
68
|
+
}
|
|
69
|
+
const taskHandler = container.resolve("taskHandler");
|
|
70
|
+
await taskHandler.completeUserTask(em, container, {
|
|
71
|
+
taskId: params.id,
|
|
72
|
+
formData: parsed.data.formData,
|
|
73
|
+
// The portal principal's own id. `completeUserTask` compares it against
|
|
74
|
+
// `claimedBy ?? assignedTo`, which for a portal task is the same id space,
|
|
75
|
+
// so its own ownership check agrees with the predicate rather than
|
|
76
|
+
// fighting it.
|
|
77
|
+
userId: auth.sub,
|
|
78
|
+
comments: parsed.data.comments,
|
|
79
|
+
decisionId: parsed.data.decisionId,
|
|
80
|
+
scope: { tenantId: auth.tenantId, organizationId: auth.orgId }
|
|
81
|
+
});
|
|
82
|
+
const updated = await em.findOne(UserTask, {
|
|
83
|
+
id: params.id,
|
|
84
|
+
tenantId: auth.tenantId,
|
|
85
|
+
organizationId: auth.orgId
|
|
86
|
+
});
|
|
87
|
+
return NextResponse.json({
|
|
88
|
+
ok: true,
|
|
89
|
+
task: updated ? serializeUserTask(updated) : null
|
|
90
|
+
});
|
|
91
|
+
} catch (error) {
|
|
92
|
+
const code = error.code;
|
|
93
|
+
if (code === "UNKNOWN_DECISION" || code === "FORM_VALIDATION_FAILED") {
|
|
94
|
+
return NextResponse.json(
|
|
95
|
+
{ ok: false, error: error instanceof Error ? error.message : "Invalid submission" },
|
|
96
|
+
{ status: 400 }
|
|
97
|
+
);
|
|
98
|
+
}
|
|
99
|
+
if (code === "TASK_NOT_FOUND" || code === "TASK_ASSIGNED_TO_ANOTHER_USER") {
|
|
100
|
+
return NextResponse.json(PORTAL_TASK_REFUSAL.body, { status: PORTAL_TASK_REFUSAL.status });
|
|
101
|
+
}
|
|
102
|
+
logger.error("Error completing portal task", { err: error });
|
|
103
|
+
return NextResponse.json({ ok: false, error: "Failed to complete task" }, { status: 500 });
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
const openApi = {
|
|
107
|
+
tag: workflowsTag,
|
|
108
|
+
summary: "Portal user task completion",
|
|
109
|
+
methods: {
|
|
110
|
+
POST: {
|
|
111
|
+
summary: "Complete a portal task",
|
|
112
|
+
description: "Completes a customer-assigned task and resumes the workflow. Only the assignee may complete; a portal admin who can read a company member's task is refused.",
|
|
113
|
+
requestBody: { schema: portalTaskCompleteRequestSchema },
|
|
114
|
+
responses: [
|
|
115
|
+
{ status: 200, description: "Task completed", schema: portalTaskCompleteResponseSchema }
|
|
116
|
+
],
|
|
117
|
+
errors: [
|
|
118
|
+
{ status: 400, description: "Invalid request body or form data", schema: portalTaskErrorSchema },
|
|
119
|
+
{ status: 401, description: "Authentication required", schema: portalTaskErrorSchema },
|
|
120
|
+
{ status: 403, description: "Insufficient permissions or no company association", schema: portalTaskErrorSchema },
|
|
121
|
+
{ status: 404, description: "Task not found or not actionable by this principal", schema: portalTaskErrorSchema },
|
|
122
|
+
{ status: 500, description: "Internal server error", schema: portalTaskErrorSchema }
|
|
123
|
+
]
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
export {
|
|
128
|
+
POST,
|
|
129
|
+
metadata,
|
|
130
|
+
openApi
|
|
131
|
+
};
|
|
132
|
+
//# sourceMappingURL=route.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../../../../src/modules/workflows/api/portal/tasks/%5Bid%5D/complete/route.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Portal User Task completion API\n *\n * - POST /api/workflows/portal/tasks/[id]/complete\n *\n * `actable` is the gate, and on the portal branch `actable` is true only for the\n * assignee themselves: a portal admin who can READ a company member's task gets\n * `visible` without `actable` and is refused here. The refusal is a 404, same as\n * every other portal refusal \u2014 telling an admin \"you may see this but not\n * finish it\" would disclose more than the read already did.\n */\n\nimport { NextRequest, NextResponse } from 'next/server'\nimport { z } from 'zod'\nimport type { OpenApiRouteDoc } from '@open-mercato/shared/lib/openapi'\nimport { createRequestContainer } from '@open-mercato/shared/lib/di/container'\nimport {\n getCustomerAuthFromRequest,\n requireCustomerFeature,\n} from '@open-mercato/core/modules/customer_accounts/lib/customerAuth'\nimport type { CustomerRbacService } from '@open-mercato/core/modules/customer_accounts/services/customerRbacService'\nimport { createLogger } from '@open-mercato/shared/lib/logger'\nimport { UserTask } from '../../../../../data/entities'\nimport { serializeUserTask } from '../../../../tasks/serialize'\nimport type { TaskHandlerService } from '../../../../../lib/task-handler'\nimport {\n decidePortalTaskAccess,\n PORTAL_TASK_REFUSAL,\n PORTAL_TASKS_COMPLETE_FEATURE,\n resolvePortalTaskPrincipal,\n} from '../../../../../lib/portal-task-access'\nimport {\n workflowsTag,\n portalTaskCompleteRequestSchema,\n portalTaskCompleteResponseSchema,\n portalTaskErrorSchema,\n} from '../../../../openapi'\n\nconst logger = createLogger('workflows')\n\nexport const metadata: { requireAuth?: boolean } = { requireAuth: false }\n\nconst completeSchema = z.object({\n formData: z.record(z.string(), z.any()),\n comments: z.string().optional(),\n decisionId: z.string().min(1).optional(),\n})\n\nexport async function POST(request: NextRequest, { params }: { params: { id: string } }) {\n const auth = await getCustomerAuthFromRequest(request)\n if (!auth) {\n return NextResponse.json({ ok: false, error: 'Authentication required' }, { status: 401 })\n }\n\n const container = await createRequestContainer()\n const rbac = container.resolve('customerRbacService') as CustomerRbacService\n\n try {\n await requireCustomerFeature(auth, [PORTAL_TASKS_COMPLETE_FEATURE], rbac)\n } catch (response) {\n return response as NextResponse\n }\n\n try {\n const em = container.resolve('em') as import('@mikro-orm/postgresql').EntityManager\n const acl = await rbac.loadAcl(auth.sub, {\n tenantId: auth.tenantId,\n organizationId: auth.orgId,\n })\n\n const resolved = await resolvePortalTaskPrincipal({ auth, em, isPortalAdmin: acl.isPortalAdmin })\n if (!resolved.ok) return NextResponse.json(resolved.body, { status: resolved.status })\n\n const parsed = completeSchema.safeParse(await request.json())\n if (!parsed.success) {\n return NextResponse.json(\n { ok: false, error: 'Invalid request body', details: parsed.error.format() },\n { status: 400 },\n )\n }\n\n const task = await em.findOne(UserTask, {\n id: params.id,\n tenantId: auth.tenantId,\n organizationId: auth.orgId,\n })\n if (!task) {\n return NextResponse.json(PORTAL_TASK_REFUSAL.body, { status: PORTAL_TASK_REFUSAL.status })\n }\n\n const decision = decidePortalTaskAccess(resolved.principal, task)\n if (!decision.actable) {\n return NextResponse.json(PORTAL_TASK_REFUSAL.body, { status: PORTAL_TASK_REFUSAL.status })\n }\n\n const taskHandler = container.resolve('taskHandler') as TaskHandlerService\n await taskHandler.completeUserTask(em, container, {\n taskId: params.id,\n formData: parsed.data.formData,\n // The portal principal's own id. `completeUserTask` compares it against\n // `claimedBy ?? assignedTo`, which for a portal task is the same id space,\n // so its own ownership check agrees with the predicate rather than\n // fighting it.\n userId: auth.sub,\n comments: parsed.data.comments,\n decisionId: parsed.data.decisionId,\n scope: { tenantId: auth.tenantId, organizationId: auth.orgId },\n })\n\n const updated = await em.findOne(UserTask, {\n id: params.id,\n tenantId: auth.tenantId,\n organizationId: auth.orgId,\n })\n\n return NextResponse.json({\n ok: true,\n task: updated ? serializeUserTask(updated) : null,\n })\n } catch (error) {\n const code = (error as { code?: unknown }).code\n if (code === 'UNKNOWN_DECISION' || code === 'FORM_VALIDATION_FAILED') {\n return NextResponse.json(\n { ok: false, error: error instanceof Error ? error.message : 'Invalid submission' },\n { status: 400 },\n )\n }\n // Anything the handler refuses on ownership or status grounds collapses into\n // the same 404 the predicate would have produced, so the act path discloses\n // no more than the read path.\n if (code === 'TASK_NOT_FOUND' || code === 'TASK_ASSIGNED_TO_ANOTHER_USER') {\n return NextResponse.json(PORTAL_TASK_REFUSAL.body, { status: PORTAL_TASK_REFUSAL.status })\n }\n logger.error('Error completing portal task', { err: error })\n return NextResponse.json({ ok: false, error: 'Failed to complete task' }, { status: 500 })\n }\n}\n\nexport const openApi: OpenApiRouteDoc = {\n tag: workflowsTag,\n summary: 'Portal user task completion',\n methods: {\n POST: {\n summary: 'Complete a portal task',\n description:\n 'Completes a customer-assigned task and resumes the workflow. Only the assignee may complete; a portal admin who can read a company member\\'s task is refused.',\n requestBody: { schema: portalTaskCompleteRequestSchema },\n responses: [\n { status: 200, description: 'Task completed', schema: portalTaskCompleteResponseSchema },\n ],\n errors: [\n { status: 400, description: 'Invalid request body or form data', schema: portalTaskErrorSchema },\n { status: 401, description: 'Authentication required', schema: portalTaskErrorSchema },\n { status: 403, description: 'Insufficient permissions or no company association', schema: portalTaskErrorSchema },\n { status: 404, description: 'Task not found or not actionable by this principal', schema: portalTaskErrorSchema },\n { status: 500, description: 'Internal server error', schema: portalTaskErrorSchema },\n ],\n },\n },\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { NextResponse } from "next/server";
|
|
2
|
+
import { createRequestContainer } from "@open-mercato/shared/lib/di/container";
|
|
3
|
+
import {
|
|
4
|
+
getCustomerAuthFromRequest,
|
|
5
|
+
requireCustomerFeature
|
|
6
|
+
} from "@open-mercato/core/modules/customer_accounts/lib/customerAuth";
|
|
7
|
+
import { createLogger } from "@open-mercato/shared/lib/logger";
|
|
8
|
+
import { UserTask } from "../../../../data/entities.js";
|
|
9
|
+
import { serializeUserTask } from "../../../tasks/serialize.js";
|
|
10
|
+
import { loadTaskDecisionContext } from "../../../../lib/task-decision-context.js";
|
|
11
|
+
import {
|
|
12
|
+
decidePortalTaskAccess,
|
|
13
|
+
PORTAL_TASK_REFUSAL,
|
|
14
|
+
PORTAL_TASKS_VIEW_FEATURE,
|
|
15
|
+
resolvePortalTaskPrincipal
|
|
16
|
+
} from "../../../../lib/portal-task-access.js";
|
|
17
|
+
import {
|
|
18
|
+
workflowsTag,
|
|
19
|
+
portalTaskDetailResponseSchema,
|
|
20
|
+
portalTaskErrorSchema
|
|
21
|
+
} from "../../../openapi.js";
|
|
22
|
+
const logger = createLogger("workflows");
|
|
23
|
+
const metadata = { requireAuth: false };
|
|
24
|
+
async function GET(request, { params }) {
|
|
25
|
+
const auth = await getCustomerAuthFromRequest(request);
|
|
26
|
+
if (!auth) {
|
|
27
|
+
return NextResponse.json({ ok: false, error: "Authentication required" }, { status: 401 });
|
|
28
|
+
}
|
|
29
|
+
const container = await createRequestContainer();
|
|
30
|
+
const rbac = container.resolve("customerRbacService");
|
|
31
|
+
try {
|
|
32
|
+
await requireCustomerFeature(auth, [PORTAL_TASKS_VIEW_FEATURE], rbac);
|
|
33
|
+
} catch (response) {
|
|
34
|
+
return response;
|
|
35
|
+
}
|
|
36
|
+
try {
|
|
37
|
+
const em = container.resolve("em");
|
|
38
|
+
const acl = await rbac.loadAcl(auth.sub, {
|
|
39
|
+
tenantId: auth.tenantId,
|
|
40
|
+
organizationId: auth.orgId
|
|
41
|
+
});
|
|
42
|
+
const resolved = await resolvePortalTaskPrincipal({ auth, em, isPortalAdmin: acl.isPortalAdmin });
|
|
43
|
+
if (!resolved.ok) return NextResponse.json(resolved.body, { status: resolved.status });
|
|
44
|
+
const task = await em.findOne(UserTask, {
|
|
45
|
+
id: params.id,
|
|
46
|
+
tenantId: auth.tenantId,
|
|
47
|
+
organizationId: auth.orgId
|
|
48
|
+
});
|
|
49
|
+
if (!task) {
|
|
50
|
+
return NextResponse.json(PORTAL_TASK_REFUSAL.body, { status: PORTAL_TASK_REFUSAL.status });
|
|
51
|
+
}
|
|
52
|
+
const decision = decidePortalTaskAccess(resolved.principal, task);
|
|
53
|
+
if (!decision.visible) {
|
|
54
|
+
return NextResponse.json(PORTAL_TASK_REFUSAL.body, { status: PORTAL_TASK_REFUSAL.status });
|
|
55
|
+
}
|
|
56
|
+
const { decisions, formKey } = await loadTaskDecisionContext(em, task);
|
|
57
|
+
const body = {
|
|
58
|
+
ok: true,
|
|
59
|
+
task: serializeUserTask(task),
|
|
60
|
+
decisions,
|
|
61
|
+
formKey,
|
|
62
|
+
// What the UI needs to decide whether to render the completion form at
|
|
63
|
+
// all. A portal admin reading a member's task gets `false` — they see the
|
|
64
|
+
// work, they never finish it.
|
|
65
|
+
canComplete: decision.actable
|
|
66
|
+
};
|
|
67
|
+
return NextResponse.json(body);
|
|
68
|
+
} catch (error) {
|
|
69
|
+
logger.error("Error loading portal task", { err: error });
|
|
70
|
+
return NextResponse.json({ ok: false, error: "Failed to load task" }, { status: 500 });
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
const openApi = {
|
|
74
|
+
tag: workflowsTag,
|
|
75
|
+
summary: "Portal user task detail",
|
|
76
|
+
methods: {
|
|
77
|
+
GET: {
|
|
78
|
+
summary: "Read one portal task",
|
|
79
|
+
description: "Returns a single customer-assigned task the portal principal owns. Every refusal \u2014 foreign tenant, another customer, an unbound task, a nonexistent id \u2014 is the same 404.",
|
|
80
|
+
responses: [
|
|
81
|
+
{ status: 200, description: "Portal task", schema: portalTaskDetailResponseSchema }
|
|
82
|
+
],
|
|
83
|
+
errors: [
|
|
84
|
+
{ status: 401, description: "Authentication required", schema: portalTaskErrorSchema },
|
|
85
|
+
{ status: 403, description: "Insufficient permissions or no company association", schema: portalTaskErrorSchema },
|
|
86
|
+
{ status: 404, description: "Task not found", schema: portalTaskErrorSchema },
|
|
87
|
+
{ status: 500, description: "Internal server error", schema: portalTaskErrorSchema }
|
|
88
|
+
]
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
export {
|
|
93
|
+
GET,
|
|
94
|
+
metadata,
|
|
95
|
+
openApi
|
|
96
|
+
};
|
|
97
|
+
//# sourceMappingURL=route.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../../../src/modules/workflows/api/portal/tasks/%5Bid%5D/route.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Portal User Task detail API\n *\n * - GET /api/workflows/portal/tasks/[id]\n *\n * Every refusal is the same 404 with the same body \u2014 a foreign task id, another\n * customer's task, an unbound task and a random uuid are indistinguishable. A\n * portal principal has no legitimate knowledge that any row they cannot read\n * exists, and a portal admin least of all.\n */\n\nimport { NextRequest, NextResponse } from 'next/server'\nimport type { z } from 'zod'\nimport type { OpenApiRouteDoc } from '@open-mercato/shared/lib/openapi'\nimport { createRequestContainer } from '@open-mercato/shared/lib/di/container'\nimport {\n getCustomerAuthFromRequest,\n requireCustomerFeature,\n} from '@open-mercato/core/modules/customer_accounts/lib/customerAuth'\nimport type { CustomerRbacService } from '@open-mercato/core/modules/customer_accounts/services/customerRbacService'\nimport { createLogger } from '@open-mercato/shared/lib/logger'\nimport { UserTask } from '../../../../data/entities'\nimport { serializeUserTask } from '../../../tasks/serialize'\nimport { loadTaskDecisionContext } from '../../../../lib/task-decision-context'\nimport {\n decidePortalTaskAccess,\n PORTAL_TASK_REFUSAL,\n PORTAL_TASKS_VIEW_FEATURE,\n resolvePortalTaskPrincipal,\n} from '../../../../lib/portal-task-access'\nimport {\n workflowsTag,\n portalTaskDetailResponseSchema,\n portalTaskErrorSchema,\n} from '../../../openapi'\n\nconst logger = createLogger('workflows')\n\nexport const metadata: { requireAuth?: boolean } = { requireAuth: false }\n\nexport async function GET(request: NextRequest, { params }: { params: { id: string } }) {\n const auth = await getCustomerAuthFromRequest(request)\n if (!auth) {\n return NextResponse.json({ ok: false, error: 'Authentication required' }, { status: 401 })\n }\n\n const container = await createRequestContainer()\n const rbac = container.resolve('customerRbacService') as CustomerRbacService\n\n try {\n await requireCustomerFeature(auth, [PORTAL_TASKS_VIEW_FEATURE], rbac)\n } catch (response) {\n return response as NextResponse\n }\n\n try {\n const em = container.resolve('em') as import('@mikro-orm/postgresql').EntityManager\n const acl = await rbac.loadAcl(auth.sub, {\n tenantId: auth.tenantId,\n organizationId: auth.orgId,\n })\n\n const resolved = await resolvePortalTaskPrincipal({ auth, em, isPortalAdmin: acl.isPortalAdmin })\n if (!resolved.ok) return NextResponse.json(resolved.body, { status: resolved.status })\n\n // Scoped at the lookup, so a foreign-tenant id resolves to nothing before the\n // predicate ever runs.\n const task = await em.findOne(UserTask, {\n id: params.id,\n tenantId: auth.tenantId,\n organizationId: auth.orgId,\n })\n if (!task) {\n return NextResponse.json(PORTAL_TASK_REFUSAL.body, { status: PORTAL_TASK_REFUSAL.status })\n }\n\n const decision = decidePortalTaskAccess(resolved.principal, task)\n if (!decision.visible) {\n return NextResponse.json(PORTAL_TASK_REFUSAL.body, { status: PORTAL_TASK_REFUSAL.status })\n }\n\n // Re-resolved from the instance's pinned definition, exactly as the\n // backoffice detail does \u2014 the portal must offer the SAME named outcomes the\n // author wrote, or a portal completion silently takes the default route.\n const { decisions, formKey } = await loadTaskDecisionContext(em, task)\n\n const body: z.infer<typeof portalTaskDetailResponseSchema> = {\n ok: true,\n task: serializeUserTask(task),\n decisions,\n formKey,\n // What the UI needs to decide whether to render the completion form at\n // all. A portal admin reading a member's task gets `false` \u2014 they see the\n // work, they never finish it.\n canComplete: decision.actable,\n }\n\n return NextResponse.json(body)\n } catch (error) {\n logger.error('Error loading portal task', { err: error })\n return NextResponse.json({ ok: false, error: 'Failed to load task' }, { status: 500 })\n }\n}\n\nexport const openApi: OpenApiRouteDoc = {\n tag: workflowsTag,\n summary: 'Portal user task detail',\n methods: {\n GET: {\n summary: 'Read one portal task',\n description:\n 'Returns a single customer-assigned task the portal principal owns. Every refusal \u2014 foreign tenant, another customer, an unbound task, a nonexistent id \u2014 is the same 404.',\n responses: [\n { status: 200, description: 'Portal task', schema: portalTaskDetailResponseSchema },\n ],\n errors: [\n { status: 401, description: 'Authentication required', schema: portalTaskErrorSchema },\n { status: 403, description: 'Insufficient permissions or no company association', schema: portalTaskErrorSchema },\n { status: 404, description: 'Task not found', schema: portalTaskErrorSchema },\n { status: 500, description: 'Internal server error', schema: portalTaskErrorSchema },\n ],\n },\n },\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { NextResponse } from "next/server";
|
|
2
|
+
import { createRequestContainer } from "@open-mercato/shared/lib/di/container";
|
|
3
|
+
import {
|
|
4
|
+
getCustomerAuthFromRequest,
|
|
5
|
+
requireCustomerFeature
|
|
6
|
+
} from "@open-mercato/core/modules/customer_accounts/lib/customerAuth";
|
|
7
|
+
import { createLogger } from "@open-mercato/shared/lib/logger";
|
|
8
|
+
import { parseNumberWithDefault } from "@open-mercato/shared/lib/number";
|
|
9
|
+
import { UserTask } from "../../../data/entities.js";
|
|
10
|
+
import { serializeUserTask } from "../../tasks/serialize.js";
|
|
11
|
+
import {
|
|
12
|
+
buildPortalTaskConditions,
|
|
13
|
+
filterVisiblePortalTasks,
|
|
14
|
+
PORTAL_TASKS_VIEW_FEATURE,
|
|
15
|
+
resolvePortalTaskPrincipal
|
|
16
|
+
} from "../../../lib/portal-task-access.js";
|
|
17
|
+
import {
|
|
18
|
+
workflowsTag,
|
|
19
|
+
portalTaskListQuerySchema,
|
|
20
|
+
portalTaskListResponseSchema,
|
|
21
|
+
portalTaskErrorSchema
|
|
22
|
+
} from "../../openapi.js";
|
|
23
|
+
const logger = createLogger("workflows");
|
|
24
|
+
const DEFAULT_PORTAL_TASK_LIMIT = 25;
|
|
25
|
+
const MAX_PORTAL_TASK_LIMIT = 100;
|
|
26
|
+
const metadata = { requireAuth: false };
|
|
27
|
+
async function GET(request) {
|
|
28
|
+
const auth = await getCustomerAuthFromRequest(request);
|
|
29
|
+
if (!auth) {
|
|
30
|
+
return NextResponse.json({ ok: false, error: "Authentication required" }, { status: 401 });
|
|
31
|
+
}
|
|
32
|
+
const container = await createRequestContainer();
|
|
33
|
+
const rbac = container.resolve("customerRbacService");
|
|
34
|
+
try {
|
|
35
|
+
await requireCustomerFeature(auth, [PORTAL_TASKS_VIEW_FEATURE], rbac);
|
|
36
|
+
} catch (response) {
|
|
37
|
+
return response;
|
|
38
|
+
}
|
|
39
|
+
try {
|
|
40
|
+
const em = container.resolve("em");
|
|
41
|
+
const acl = await rbac.loadAcl(auth.sub, {
|
|
42
|
+
tenantId: auth.tenantId,
|
|
43
|
+
organizationId: auth.orgId
|
|
44
|
+
});
|
|
45
|
+
const resolved = await resolvePortalTaskPrincipal({
|
|
46
|
+
auth,
|
|
47
|
+
em,
|
|
48
|
+
isPortalAdmin: acl.isPortalAdmin
|
|
49
|
+
});
|
|
50
|
+
if (!resolved.ok) {
|
|
51
|
+
return NextResponse.json(resolved.body, { status: resolved.status });
|
|
52
|
+
}
|
|
53
|
+
const { searchParams } = new URL(request.url);
|
|
54
|
+
const status = searchParams.get("status");
|
|
55
|
+
const page = Math.max(1, parseNumberWithDefault(searchParams.get("page"), 1, { min: 1, integer: true }));
|
|
56
|
+
const pageSize = Math.min(
|
|
57
|
+
parseNumberWithDefault(searchParams.get("pageSize"), DEFAULT_PORTAL_TASK_LIMIT, {
|
|
58
|
+
min: 1,
|
|
59
|
+
integer: true
|
|
60
|
+
}),
|
|
61
|
+
MAX_PORTAL_TASK_LIMIT
|
|
62
|
+
);
|
|
63
|
+
const where = buildPortalTaskConditions({
|
|
64
|
+
principal: resolved.principal,
|
|
65
|
+
assigneeIds: resolved.assigneeIds
|
|
66
|
+
});
|
|
67
|
+
if (status) {
|
|
68
|
+
const statusValues = status.split(",").map((value) => value.trim()).filter(Boolean);
|
|
69
|
+
if (statusValues.length === 1) where.status = statusValues[0];
|
|
70
|
+
else if (statusValues.length > 1) where.status = { $in: statusValues };
|
|
71
|
+
}
|
|
72
|
+
const [tasks, total] = await em.findAndCount(UserTask, where, {
|
|
73
|
+
orderBy: { createdAt: "DESC" },
|
|
74
|
+
limit: pageSize,
|
|
75
|
+
offset: (page - 1) * pageSize
|
|
76
|
+
});
|
|
77
|
+
const visible = filterVisiblePortalTasks(resolved.principal, tasks);
|
|
78
|
+
if (visible.length !== tasks.length) {
|
|
79
|
+
logger.warn("Portal task page dropped rows that failed the ownership check", {
|
|
80
|
+
component: "portal-tasks",
|
|
81
|
+
tenantId: auth.tenantId,
|
|
82
|
+
organizationId: auth.orgId,
|
|
83
|
+
dropped: tasks.length - visible.length
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
const body = {
|
|
87
|
+
ok: true,
|
|
88
|
+
tasks: visible.map(serializeUserTask),
|
|
89
|
+
pagination: {
|
|
90
|
+
page,
|
|
91
|
+
pageSize,
|
|
92
|
+
total,
|
|
93
|
+
totalPages: Math.max(1, Math.ceil(total / pageSize))
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
return NextResponse.json(body);
|
|
97
|
+
} catch (error) {
|
|
98
|
+
logger.error("Error listing portal tasks", { err: error });
|
|
99
|
+
return NextResponse.json({ ok: false, error: "Failed to list tasks" }, { status: 500 });
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
const openApi = {
|
|
103
|
+
tag: workflowsTag,
|
|
104
|
+
summary: "Portal user tasks",
|
|
105
|
+
methods: {
|
|
106
|
+
GET: {
|
|
107
|
+
summary: "List the portal principal's tasks",
|
|
108
|
+
description: "Returns the customer-assigned tasks this portal principal may see. A portal admin additionally sees their company members' tasks but may not act on them. Tasks with no entity bindings are never portal-visible.",
|
|
109
|
+
query: portalTaskListQuerySchema,
|
|
110
|
+
responses: [
|
|
111
|
+
{ status: 200, description: "Portal task list", schema: portalTaskListResponseSchema }
|
|
112
|
+
],
|
|
113
|
+
errors: [
|
|
114
|
+
{ status: 401, description: "Authentication required", schema: portalTaskErrorSchema },
|
|
115
|
+
{ status: 403, description: "Insufficient permissions or no company association", schema: portalTaskErrorSchema },
|
|
116
|
+
{ status: 500, description: "Internal server error", schema: portalTaskErrorSchema }
|
|
117
|
+
]
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
};
|
|
121
|
+
export {
|
|
122
|
+
GET,
|
|
123
|
+
metadata,
|
|
124
|
+
openApi
|
|
125
|
+
};
|
|
126
|
+
//# sourceMappingURL=route.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../../src/modules/workflows/api/portal/tasks/route.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Portal User Tasks API\n *\n * - GET /api/workflows/portal/tasks \u2014 the customer's own task list\n *\n * NEW SURFACE, not a relaxation. The backoffice task routes are untouched: they\n * still require a backoffice session and still refuse a portal token, and this\n * route refuses a backoffice one. Two principals, two route trees, one shared\n * predicate \u2014 which is the only reason the isolation is testable in both\n * directions rather than merely asserted.\n */\n\nimport { NextRequest, NextResponse } from 'next/server'\nimport type { z } from 'zod'\nimport type { OpenApiRouteDoc } from '@open-mercato/shared/lib/openapi'\nimport { createRequestContainer } from '@open-mercato/shared/lib/di/container'\nimport {\n getCustomerAuthFromRequest,\n requireCustomerFeature,\n} from '@open-mercato/core/modules/customer_accounts/lib/customerAuth'\nimport type { CustomerRbacService } from '@open-mercato/core/modules/customer_accounts/services/customerRbacService'\nimport { createLogger } from '@open-mercato/shared/lib/logger'\nimport { parseNumberWithDefault } from '@open-mercato/shared/lib/number'\nimport { UserTask } from '../../../data/entities'\nimport { serializeUserTask } from '../../tasks/serialize'\nimport {\n buildPortalTaskConditions,\n filterVisiblePortalTasks,\n PORTAL_TASKS_VIEW_FEATURE,\n resolvePortalTaskPrincipal,\n} from '../../../lib/portal-task-access'\nimport {\n workflowsTag,\n portalTaskListQuerySchema,\n portalTaskListResponseSchema,\n portalTaskErrorSchema,\n} from '../../openapi'\n\nconst logger = createLogger('workflows')\n\nconst DEFAULT_PORTAL_TASK_LIMIT = 25\nconst MAX_PORTAL_TASK_LIMIT = 100\n\nexport const metadata: { requireAuth?: boolean } = { requireAuth: false }\n\nexport async function GET(request: NextRequest) {\n const auth = await getCustomerAuthFromRequest(request)\n if (!auth) {\n return NextResponse.json({ ok: false, error: 'Authentication required' }, { status: 401 })\n }\n\n const container = await createRequestContainer()\n const rbac = container.resolve('customerRbacService') as CustomerRbacService\n\n try {\n await requireCustomerFeature(auth, [PORTAL_TASKS_VIEW_FEATURE], rbac)\n } catch (response) {\n return response as NextResponse\n }\n\n try {\n const em = container.resolve('em') as import('@mikro-orm/postgresql').EntityManager\n const acl = await rbac.loadAcl(auth.sub, {\n tenantId: auth.tenantId,\n organizationId: auth.orgId,\n })\n\n const resolved = await resolvePortalTaskPrincipal({\n auth,\n em,\n isPortalAdmin: acl.isPortalAdmin,\n })\n if (!resolved.ok) {\n return NextResponse.json(resolved.body, { status: resolved.status })\n }\n\n const { searchParams } = new URL(request.url)\n const status = searchParams.get('status')\n const page = Math.max(1, parseNumberWithDefault(searchParams.get('page'), 1, { min: 1, integer: true }))\n const pageSize = Math.min(\n parseNumberWithDefault(searchParams.get('pageSize'), DEFAULT_PORTAL_TASK_LIMIT, {\n min: 1,\n integer: true,\n }),\n MAX_PORTAL_TASK_LIMIT,\n )\n\n const where: Record<string, unknown> = buildPortalTaskConditions({\n principal: resolved.principal,\n assigneeIds: resolved.assigneeIds,\n })\n\n if (status) {\n const statusValues = status.split(',').map((value) => value.trim()).filter(Boolean)\n if (statusValues.length === 1) where.status = statusValues[0]\n else if (statusValues.length > 1) where.status = { $in: statusValues }\n }\n\n const [tasks, total] = await em.findAndCount(UserTask, where, {\n orderBy: { createdAt: 'DESC' },\n limit: pageSize,\n offset: (page - 1) * pageSize,\n })\n\n // The SQL is the structural half; ownership is a per-row set membership the\n // jsonb bindings cannot express, so this genuinely drops rows rather than\n // being a belt-and-braces no-op. A drop means a task assigned to a company\n // member is bound to a record outside that company \u2014 an authoring anomaly\n // worth a log line, never a silent gap.\n const visible = filterVisiblePortalTasks(resolved.principal, tasks)\n if (visible.length !== tasks.length) {\n logger.warn('Portal task page dropped rows that failed the ownership check', {\n component: 'portal-tasks',\n tenantId: auth.tenantId,\n organizationId: auth.orgId,\n dropped: tasks.length - visible.length,\n })\n }\n\n const body: z.infer<typeof portalTaskListResponseSchema> = {\n ok: true,\n tasks: visible.map(serializeUserTask),\n pagination: {\n page,\n pageSize,\n total,\n totalPages: Math.max(1, Math.ceil(total / pageSize)),\n },\n }\n\n return NextResponse.json(body)\n } catch (error) {\n logger.error('Error listing portal tasks', { err: error })\n return NextResponse.json({ ok: false, error: 'Failed to list tasks' }, { status: 500 })\n }\n}\n\nexport const openApi: OpenApiRouteDoc = {\n tag: workflowsTag,\n summary: 'Portal user tasks',\n methods: {\n GET: {\n summary: 'List the portal principal\\'s tasks',\n description:\n 'Returns the customer-assigned tasks this portal principal may see. A portal admin additionally sees their company members\\' tasks but may not act on them. Tasks with no entity bindings are never portal-visible.',\n query: portalTaskListQuerySchema,\n responses: [\n { status: 200, description: 'Portal task list', schema: portalTaskListResponseSchema },\n ],\n errors: [\n { status: 401, description: 'Authentication required', schema: portalTaskErrorSchema },\n { status: 403, description: 'Insufficient permissions or no company association', schema: portalTaskErrorSchema },\n { status: 500, description: 'Internal server error', schema: portalTaskErrorSchema },\n ],\n },\n },\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|