@open-mercato/core 0.6.7-develop.6677.1.beabb7ca12 → 0.6.7-develop.6685.1.77c0a5591b

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.
Files changed (55) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/dist/generated/entities/gateway_payment_operation/index.js +2 -0
  3. package/dist/generated/entities/gateway_payment_operation/index.js.map +2 -2
  4. package/dist/generated/entities/gateway_transaction/index.js +2 -0
  5. package/dist/generated/entities/gateway_transaction/index.js.map +2 -2
  6. package/dist/generated/entity-fields-registry.js +2 -0
  7. package/dist/generated/entity-fields-registry.js.map +2 -2
  8. package/dist/modules/payment_gateways/api/capture/route.js +1 -1
  9. package/dist/modules/payment_gateways/api/capture/route.js.map +2 -2
  10. package/dist/modules/payment_gateways/data/entities.js +7 -0
  11. package/dist/modules/payment_gateways/data/entities.js.map +2 -2
  12. package/dist/modules/payment_gateways/lib/capture-ledger.js +183 -0
  13. package/dist/modules/payment_gateways/lib/capture-ledger.js.map +7 -0
  14. package/dist/modules/payment_gateways/lib/gateway-service.js +70 -8
  15. package/dist/modules/payment_gateways/lib/gateway-service.js.map +2 -2
  16. package/dist/modules/payment_gateways/lib/payment-operation-idempotency.js +1 -0
  17. package/dist/modules/payment_gateways/lib/payment-operation-idempotency.js.map +2 -2
  18. package/dist/modules/payment_gateways/migrations/Migration20260725101500_payment_gateways.js +16 -0
  19. package/dist/modules/payment_gateways/migrations/Migration20260725101500_payment_gateways.js.map +7 -0
  20. package/dist/modules/query_index/lib/indexer.js +12 -2
  21. package/dist/modules/query_index/lib/indexer.js.map +2 -2
  22. package/dist/modules/workflows/backend/definitions/visual-editor/page.js +5 -2
  23. package/dist/modules/workflows/backend/definitions/visual-editor/page.js.map +2 -2
  24. package/dist/modules/workflows/components/ActivitiesEditor.js +67 -11
  25. package/dist/modules/workflows/components/ActivitiesEditor.js.map +2 -2
  26. package/dist/modules/workflows/components/TransitionsEditor.js +205 -163
  27. package/dist/modules/workflows/components/TransitionsEditor.js.map +2 -2
  28. package/dist/modules/workflows/data/validators.js +34 -1
  29. package/dist/modules/workflows/data/validators.js.map +3 -3
  30. package/dist/modules/workflows/lib/activity-executor.js +18 -2
  31. package/dist/modules/workflows/lib/activity-executor.js.map +2 -2
  32. package/dist/modules/workflows/lib/format-validation-error.js +46 -1
  33. package/dist/modules/workflows/lib/format-validation-error.js.map +2 -2
  34. package/generated/entities/gateway_payment_operation/index.ts +1 -0
  35. package/generated/entities/gateway_transaction/index.ts +1 -0
  36. package/generated/entity-fields-registry.ts +2 -0
  37. package/package.json +7 -7
  38. package/src/modules/payment_gateways/api/capture/route.ts +1 -1
  39. package/src/modules/payment_gateways/data/entities.ts +8 -2
  40. package/src/modules/payment_gateways/lib/capture-ledger.ts +260 -0
  41. package/src/modules/payment_gateways/lib/gateway-service.ts +83 -10
  42. package/src/modules/payment_gateways/lib/payment-operation-idempotency.ts +1 -0
  43. package/src/modules/payment_gateways/migrations/.snapshot-open-mercato.json +34 -0
  44. package/src/modules/payment_gateways/migrations/Migration20260725101500_payment_gateways.ts +21 -0
  45. package/src/modules/query_index/lib/indexer.ts +25 -2
  46. package/src/modules/workflows/backend/definitions/visual-editor/page.tsx +12 -3
  47. package/src/modules/workflows/components/ActivitiesEditor.tsx +96 -12
  48. package/src/modules/workflows/components/TransitionsEditor.tsx +75 -17
  49. package/src/modules/workflows/data/validators.ts +52 -1
  50. package/src/modules/workflows/i18n/de.json +2 -0
  51. package/src/modules/workflows/i18n/en.json +2 -0
  52. package/src/modules/workflows/i18n/es.json +2 -0
  53. package/src/modules/workflows/i18n/pl.json +2 -0
  54. package/src/modules/workflows/lib/activity-executor.ts +38 -3
  55. package/src/modules/workflows/lib/format-validation-error.ts +60 -0
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/modules/workflows/components/TransitionsEditor.tsx"],
4
- "sourcesContent": ["\"use client\"\n\nimport * as React from 'react'\nimport { Button } from '@open-mercato/ui/primitives/button'\nimport { Input } from '@open-mercato/ui/primitives/input'\nimport { Label } from '@open-mercato/ui/primitives/label'\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@open-mercato/ui/primitives/select'\nimport { Textarea } from '@open-mercato/ui/primitives/textarea'\nimport { Trash2, Plus, ChevronUp, ChevronDown } from 'lucide-react'\nimport { useT } from '@open-mercato/shared/lib/i18n/context'\n\ninterface Activity {\n activityId: string\n activityName: string\n activityType: string\n config?: Record<string, any>\n async?: boolean\n retryPolicy?: {\n maxAttempts?: number\n retryDelay?: number\n backoffMultiplier?: number\n }\n timeout?: number\n compensation?: Record<string, any>\n}\n\ninterface Transition {\n transitionId: string\n transitionName: string\n fromStepId: string\n toStepId: string\n trigger: string\n preConditions?: string[]\n postConditions?: string[]\n activities?: Activity[]\n priority?: number\n}\n\ninterface TransitionsEditorProps {\n value: Transition[]\n onChange: (transitions: Transition[]) => void\n steps?: any[]\n error?: string\n}\n\nconst TRIGGER_TYPES = [\n { value: 'auto', label: 'Automatic' },\n { value: 'manual', label: 'Manual' },\n { value: 'signal', label: 'Signal' },\n { value: 'timer', label: 'Timer' },\n]\n\nconst ACTIVITY_TYPES = [\n { value: 'SEND_EMAIL', label: 'Send Email' },\n { value: 'CALL_API', label: 'Call API' },\n { value: 'UPDATE_ENTITY', label: 'Update Entity' },\n { value: 'EMIT_EVENT', label: 'Emit Event' },\n { value: 'CALL_WEBHOOK', label: 'Call Webhook' },\n { value: 'EXECUTE_FUNCTION', label: 'Execute Function' },\n { value: 'WAIT', label: 'Wait' },\n]\n\nexport function TransitionsEditor({ value = [], onChange, steps = [], error }: TransitionsEditorProps) {\n const t = useT()\n\n const addTransition = () => {\n const newTransition: Transition = {\n transitionId: `transition_${Date.now()}`,\n transitionName: t('workflows.common.newTransition'),\n fromStepId: '',\n toStepId: '',\n trigger: 'auto',\n preConditions: [],\n postConditions: [],\n activities: [],\n priority: 100,\n }\n onChange([...value, newTransition])\n }\n\n const updateTransition = (index: number, field: keyof Transition, fieldValue: any) => {\n const updated = [...value]\n updated[index] = { ...updated[index], [field]: fieldValue }\n onChange(updated)\n }\n\n const removeTransition = (index: number) => {\n onChange(value.filter((_, i) => i !== index))\n }\n\n const moveTransition = (index: number, direction: 'up' | 'down') => {\n const newIndex = direction === 'up' ? index - 1 : index + 1\n if (newIndex < 0 || newIndex >= value.length) return\n\n const updated = [...value]\n const temp = updated[index]\n updated[index] = updated[newIndex]\n updated[newIndex] = temp\n onChange(updated)\n }\n\n const addActivity = (transitionIndex: number) => {\n const newActivity: Activity = {\n activityId: `activity_${Date.now()}`,\n activityName: t('workflows.common.newActivity'),\n activityType: 'CALL_API',\n config: {},\n async: false,\n retryPolicy: {\n maxAttempts: 3,\n retryDelay: 1000,\n backoffMultiplier: 2,\n },\n }\n const updated = [...value]\n updated[transitionIndex] = {\n ...updated[transitionIndex],\n activities: [...(updated[transitionIndex].activities || []), newActivity],\n }\n onChange(updated)\n }\n\n const updateActivity = (transitionIndex: number, activityIndex: number, field: keyof Activity, fieldValue: any) => {\n const updated = [...value]\n const activities = [...(updated[transitionIndex].activities || [])]\n activities[activityIndex] = { ...activities[activityIndex], [field]: fieldValue }\n updated[transitionIndex] = { ...updated[transitionIndex], activities }\n onChange(updated)\n }\n\n const updateRetryPolicy = (transitionIndex: number, activityIndex: number, field: string, fieldValue: any) => {\n const updated = [...value]\n const activities = [...(updated[transitionIndex].activities || [])]\n activities[activityIndex] = {\n ...activities[activityIndex],\n retryPolicy: {\n ...activities[activityIndex].retryPolicy,\n [field]: fieldValue,\n },\n }\n updated[transitionIndex] = { ...updated[transitionIndex], activities }\n onChange(updated)\n }\n\n const removeActivity = (transitionIndex: number, activityIndex: number) => {\n const updated = [...value]\n updated[transitionIndex] = {\n ...updated[transitionIndex],\n activities: (updated[transitionIndex].activities || []).filter((_, i) => i !== activityIndex),\n }\n onChange(updated)\n }\n\n const moveActivity = (transitionIndex: number, activityIndex: number, direction: 'up' | 'down') => {\n const activities = value[transitionIndex].activities || []\n const newIndex = direction === 'up' ? activityIndex - 1 : activityIndex + 1\n if (newIndex < 0 || newIndex >= activities.length) return\n\n const updated = [...value]\n const updatedActivities = [...activities]\n const temp = updatedActivities[activityIndex]\n updatedActivities[activityIndex] = updatedActivities[newIndex]\n updatedActivities[newIndex] = temp\n updated[transitionIndex] = { ...updated[transitionIndex], activities: updatedActivities }\n onChange(updated)\n }\n\n return (\n <div className=\"space-y-4\">\n <div className=\"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between\">\n <div>\n <p className=\"text-sm text-muted-foreground\">\n {t('workflows.form.descriptions.transitions')}\n </p>\n {error && <p className=\"text-sm text-red-600 mt-1\">{error}</p>}\n </div>\n <Button type=\"button\" onClick={addTransition} variant=\"outline\" size=\"sm\" className=\"w-full sm:w-auto\">\n <Plus className=\"h-4 w-4 mr-1\" />\n {t('workflows.form.addTransition')}\n </Button>\n </div>\n\n {value.length === 0 && (\n <div className=\"p-6 text-center text-muted-foreground border rounded-md bg-muted\">\n {t('workflows.form.noTransitions')}\n </div>\n )}\n\n <div className=\"space-y-3\">\n {value.map((transition, index) => (\n <div key={index} className=\"p-4 border rounded-md bg-card shadow-sm border-l-4 border-l-blue-500\">\n <div className=\"space-y-3\">\n <div className=\"flex flex-col gap-3 sm:flex-row sm:items-start sm:justify-between\">\n <div className=\"flex-1 grid grid-cols-1 sm:grid-cols-2 gap-3\">\n <div>\n <Label htmlFor={`transition-${index}-id`} className=\"text-xs\">\n {t('workflows.transitions.transitionId')} *\n </Label>\n <Input\n id={`transition-${index}-id`}\n value={transition.transitionId}\n onChange={(e) => updateTransition(index, 'transitionId', e.target.value)}\n placeholder=\"transition_name\"\n className=\"mt-1\"\n />\n </div>\n <div>\n <Label htmlFor={`transition-${index}-name`} className=\"text-xs\">\n {t('workflows.transitions.transitionName')} *\n </Label>\n <Input\n id={`transition-${index}-name`}\n value={transition.transitionName}\n onChange={(e) => updateTransition(index, 'transitionName', e.target.value)}\n placeholder={t('workflows.transitions.transitionName')}\n className=\"mt-1\"\n />\n </div>\n </div>\n <div className=\"flex items-center gap-1 self-end sm:self-auto\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => moveTransition(index, 'up')}\n disabled={index === 0}\n title={t('common.moveUp')}\n >\n <ChevronUp className=\"h-4 w-4\" />\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => moveTransition(index, 'down')}\n disabled={index === value.length - 1}\n title={t('common.moveDown')}\n >\n <ChevronDown className=\"h-4 w-4\" />\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => removeTransition(index)}\n title={t('common.delete')}\n >\n <Trash2 className=\"h-4 w-4 text-red-600\" />\n </Button>\n </div>\n </div>\n\n <div className=\"grid grid-cols-1 sm:grid-cols-3 gap-3\">\n <div>\n <Label htmlFor={`transition-${index}-from`} className=\"text-xs\">\n {t('workflows.transitions.fromStep')} *\n </Label>\n <Select\n value={transition.fromStepId || undefined}\n onValueChange={(value) => updateTransition(index, 'fromStepId', value ?? '')}\n >\n <SelectTrigger id={`transition-${index}-from`} className=\"mt-1\">\n <SelectValue placeholder={t('workflows.form.selectStep')} />\n </SelectTrigger>\n <SelectContent>\n {steps.map((step: any) => (\n <SelectItem key={step.stepId} value={step.stepId}>\n {step.stepName || step.stepId}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n <div>\n <Label htmlFor={`transition-${index}-to`} className=\"text-xs\">\n {t('workflows.transitions.toStep')} *\n </Label>\n <Select\n value={transition.toStepId || undefined}\n onValueChange={(value) => updateTransition(index, 'toStepId', value ?? '')}\n >\n <SelectTrigger id={`transition-${index}-to`} className=\"mt-1\">\n <SelectValue placeholder={t('workflows.form.selectStep')} />\n </SelectTrigger>\n <SelectContent>\n {steps.map((step: any) => (\n <SelectItem key={step.stepId} value={step.stepId}>\n {step.stepName || step.stepId}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n <div>\n <Label htmlFor={`transition-${index}-trigger`} className=\"text-xs\">\n {t('workflows.transitions.trigger')} *\n </Label>\n <Select\n value={transition.trigger}\n onValueChange={(value) => updateTransition(index, 'trigger', value)}\n >\n <SelectTrigger id={`transition-${index}-trigger`} className=\"mt-1\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {TRIGGER_TYPES.map((type) => (\n <SelectItem key={type.value} value={type.value}>\n {t(`workflows.transitions.triggers.${type.value}`)}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n </div>\n\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-3\">\n <div>\n <Label htmlFor={`transition-${index}-priority`} className=\"text-xs\">\n {t('workflows.transitions.priority')}\n </Label>\n <Input\n id={`transition-${index}-priority`}\n type=\"number\"\n value={transition.priority || 100}\n onChange={(e) => updateTransition(index, 'priority', parseInt(e.target.value))}\n className=\"mt-1\"\n />\n </div>\n <div>\n <Label htmlFor={`transition-${index}-preconditions`} className=\"text-xs\">\n {t('workflows.transitions.preConditions')}\n </Label>\n <Input\n id={`transition-${index}-preconditions`}\n value={(transition.preConditions || []).join(', ')}\n onChange={(e) => updateTransition(index, 'preConditions', e.target.value.split(',').map(s => s.trim()).filter(Boolean))}\n placeholder=\"rule_id_1, rule_id_2\"\n className=\"mt-1\"\n />\n </div>\n </div>\n\n <div className=\"mt-4 pl-4 border-l-2 border-border\">\n <div className=\"flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between mb-3\">\n <Label className=\"text-xs font-semibold text-foreground\">\n {t('workflows.transitions.activities')}\n </Label>\n <Button\n type=\"button\"\n onClick={() => addActivity(index)}\n variant=\"outline\"\n size=\"sm\"\n className=\"w-full sm:w-auto\"\n >\n <Plus className=\"h-3 w-3 mr-1\" />\n {t('workflows.form.addActivity')}\n </Button>\n </div>\n\n {(transition.activities || []).length === 0 && (\n <div className=\"p-3 text-center text-xs text-muted-foreground border rounded-md bg-muted\">\n {t('workflows.form.noActivitiesInTransition')}\n </div>\n )}\n\n <div className=\"space-y-2\">\n {(transition.activities || []).map((activity, activityIndex) => (\n <div key={activityIndex} className=\"p-3 border rounded-md bg-muted shadow-sm border-l-4 border-l-green-500\">\n <div className=\"space-y-2\">\n <div className=\"flex flex-col gap-2 sm:flex-row sm:items-start sm:justify-between\">\n <div className=\"flex-1 grid grid-cols-1 sm:grid-cols-2 gap-2\">\n <div>\n <Label htmlFor={`activity-${index}-${activityIndex}-id`} className=\"text-xs\">\n {t('workflows.activities.activityId')} *\n </Label>\n <Input\n id={`activity-${index}-${activityIndex}-id`}\n value={activity.activityId}\n onChange={(e) => updateActivity(index, activityIndex, 'activityId', e.target.value)}\n placeholder=\"activity_name\"\n className=\"mt-1 text-xs h-8\"\n />\n </div>\n <div>\n <Label htmlFor={`activity-${index}-${activityIndex}-name`} className=\"text-xs\">\n {t('workflows.activities.activityName')} *\n </Label>\n <Input\n id={`activity-${index}-${activityIndex}-name`}\n value={activity.activityName}\n onChange={(e) => updateActivity(index, activityIndex, 'activityName', e.target.value)}\n placeholder={t('workflows.activities.activityName')}\n className=\"mt-1 text-xs h-8\"\n />\n </div>\n </div>\n <div className=\"flex items-center gap-1 self-end sm:self-auto\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => moveActivity(index, activityIndex, 'up')}\n disabled={activityIndex === 0}\n title={t('common.moveUp')}\n >\n <ChevronUp className=\"h-3 w-3\" />\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => moveActivity(index, activityIndex, 'down')}\n disabled={activityIndex === (transition.activities || []).length - 1}\n title={t('common.moveDown')}\n >\n <ChevronDown className=\"h-3 w-3\" />\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => removeActivity(index, activityIndex)}\n title={t('common.delete')}\n >\n <Trash2 className=\"h-3 w-3 text-red-600\" />\n </Button>\n </div>\n </div>\n\n <div className=\"grid grid-cols-1 sm:grid-cols-3 gap-2\">\n <div>\n <Label htmlFor={`activity-${index}-${activityIndex}-type`} className=\"text-xs\">\n {t('workflows.activities.activityType')} *\n </Label>\n <Select\n value={activity.activityType}\n onValueChange={(value) => updateActivity(index, activityIndex, 'activityType', value)}\n >\n <SelectTrigger id={`activity-${index}-${activityIndex}-type`} size=\"sm\" className=\"mt-1\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {ACTIVITY_TYPES.map((type) => (\n <SelectItem key={type.value} value={type.value}>\n {t(`workflows.activities.types.${type.value}`)}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n <div>\n <Label htmlFor={`activity-${index}-${activityIndex}-timeout`} className=\"text-xs\">\n {t('workflows.activities.timeout')} (ms)\n </Label>\n <Input\n id={`activity-${index}-${activityIndex}-timeout`}\n type=\"number\"\n value={activity.timeout || ''}\n onChange={(e) => updateActivity(index, activityIndex, 'timeout', e.target.value ? parseInt(e.target.value) : undefined)}\n placeholder=\"30000\"\n className=\"mt-1 text-xs h-8\"\n />\n </div>\n <div className=\"flex items-end pb-1\">\n <div className=\"flex items-center space-x-2\">\n <input\n type=\"checkbox\"\n id={`activity-${index}-${activityIndex}-async`}\n checked={activity.async || false}\n onChange={(e) => updateActivity(index, activityIndex, 'async', e.target.checked)}\n className=\"h-3 w-3\"\n />\n <Label htmlFor={`activity-${index}-${activityIndex}-async`} className=\"text-xs cursor-pointer\">\n {t('workflows.activities.async')}\n </Label>\n </div>\n </div>\n </div>\n\n <div className=\"grid grid-cols-1 sm:grid-cols-3 gap-2\">\n <div>\n <Label htmlFor={`activity-${index}-${activityIndex}-retry-attempts`} className=\"text-xs\">\n {t('workflows.form.maxRetryAttempts')}\n </Label>\n <Input\n id={`activity-${index}-${activityIndex}-retry-attempts`}\n type=\"number\"\n value={activity.retryPolicy?.maxAttempts || 3}\n onChange={(e) => updateRetryPolicy(index, activityIndex, 'maxAttempts', parseInt(e.target.value))}\n className=\"mt-1 text-xs h-8\"\n />\n </div>\n <div>\n <Label htmlFor={`activity-${index}-${activityIndex}-retry-delay`} className=\"text-xs\">\n {t('workflows.form.retryDelay')} (ms)\n </Label>\n <Input\n id={`activity-${index}-${activityIndex}-retry-delay`}\n type=\"number\"\n value={activity.retryPolicy?.retryDelay || 1000}\n onChange={(e) => updateRetryPolicy(index, activityIndex, 'retryDelay', parseInt(e.target.value))}\n className=\"mt-1 text-xs h-8\"\n />\n </div>\n <div>\n <Label htmlFor={`activity-${index}-${activityIndex}-backoff`} className=\"text-xs\">\n {t('workflows.form.backoffMultiplier')}\n </Label>\n <Input\n id={`activity-${index}-${activityIndex}-backoff`}\n type=\"number\"\n step=\"0.1\"\n value={activity.retryPolicy?.backoffMultiplier || 2}\n onChange={(e) => updateRetryPolicy(index, activityIndex, 'backoffMultiplier', parseFloat(e.target.value))}\n className=\"mt-1 text-xs h-8\"\n />\n </div>\n </div>\n\n <div>\n <Label htmlFor={`activity-${index}-${activityIndex}-config`} className=\"text-xs\">\n {t('workflows.activities.config')} (JSON)\n </Label>\n <Textarea\n id={`activity-${index}-${activityIndex}-config`}\n value={JSON.stringify(activity.config || {}, null, 2)}\n onChange={(e) => {\n try {\n const parsed = JSON.parse(e.target.value)\n updateActivity(index, activityIndex, 'config', parsed)\n } catch {\n // Invalid JSON, don't update\n }\n }}\n placeholder='{\"key\": \"value\"}'\n rows={2}\n className=\"mt-1 font-mono text-xs\"\n />\n </div>\n </div>\n </div>\n ))}\n </div>\n </div>\n </div>\n </div>\n ))}\n </div>\n </div>\n )\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["\"use client\"\n\nimport * as React from 'react'\nimport { Button } from '@open-mercato/ui/primitives/button'\nimport { Input } from '@open-mercato/ui/primitives/input'\nimport { Label } from '@open-mercato/ui/primitives/label'\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from '@open-mercato/ui/primitives/select'\nimport { Textarea } from '@open-mercato/ui/primitives/textarea'\nimport { Trash2, Plus, ChevronUp, ChevronDown } from 'lucide-react'\nimport { useT } from '@open-mercato/shared/lib/i18n/context'\n\ninterface Activity {\n activityId: string\n activityName: string\n activityType: string\n config?: Record<string, any>\n async?: boolean\n retryPolicy?: {\n maxAttempts?: number\n retryDelay?: number\n backoffMultiplier?: number\n }\n // Milliseconds, matching the executor and the definition schema. This field\n // used to be written as `timeout` (a number) while the schema typed `timeout`\n // as an ISO 8601 string, so saving a timeout from this editor failed\n // validation outright (#4424).\n timeoutMs?: number\n compensation?: Record<string, any>\n}\n\ninterface Transition {\n transitionId: string\n transitionName: string\n fromStepId: string\n toStepId: string\n trigger: string\n preConditions?: string[]\n postConditions?: string[]\n activities?: Activity[]\n priority?: number\n}\n\ninterface TransitionsEditorProps {\n value: Transition[]\n onChange: (transitions: Transition[]) => void\n steps?: any[]\n error?: string\n}\n\nconst TRIGGER_TYPES = [\n { value: 'auto', label: 'Automatic' },\n { value: 'manual', label: 'Manual' },\n { value: 'signal', label: 'Signal' },\n { value: 'timer', label: 'Timer' },\n]\n\nconst ACTIVITY_TYPES = [\n { value: 'SEND_EMAIL', label: 'Send Email' },\n { value: 'CALL_API', label: 'Call API' },\n { value: 'UPDATE_ENTITY', label: 'Update Entity' },\n { value: 'EMIT_EVENT', label: 'Emit Event' },\n { value: 'CALL_WEBHOOK', label: 'Call Webhook' },\n { value: 'EXECUTE_FUNCTION', label: 'Execute Function' },\n { value: 'WAIT', label: 'Wait' },\n]\n\ntype ConfigDraft = { text: string; error: string | null }\n\nexport function TransitionsEditor({ value = [], onChange, steps = [], error }: TransitionsEditorProps) {\n const t = useT()\n const [configDrafts, setConfigDrafts] = React.useState<Record<string, ConfigDraft>>({})\n\n const configDraftKey = (transition: Transition, activity: Activity) =>\n `${transition.transitionId}:${activity.activityId}`\n\n const handleConfigTextChange = (\n transitionIndex: number,\n activityIndex: number,\n text: string,\n ) => {\n const transition = value[transitionIndex]\n const activity = transition.activities?.[activityIndex]\n if (!activity) return\n\n let parsed: Record<string, unknown> | null = null\n let parseError: string | null = null\n try {\n const candidate = JSON.parse(text) as unknown\n if (candidate && typeof candidate === 'object' && !Array.isArray(candidate)) {\n parsed = candidate as Record<string, unknown>\n } else {\n parseError = t('workflows.activities.configMustBeObject', 'Config must be a JSON object')\n }\n } catch (err) {\n parseError = err instanceof Error\n ? err.message\n : t('workflows.activities.configInvalidJson', 'Invalid JSON')\n }\n\n const key = configDraftKey(transition, activity)\n setConfigDrafts((drafts) => ({ ...drafts, [key]: { text, error: parseError } }))\n if (parsed) updateActivity(transitionIndex, activityIndex, 'config', parsed)\n }\n\n const handleConfigBlur = (transition: Transition, activity: Activity) => {\n const key = configDraftKey(transition, activity)\n setConfigDrafts((drafts) => {\n if (!drafts[key] || drafts[key].error) return drafts\n const next = { ...drafts }\n delete next[key]\n return next\n })\n }\n\n const addTransition = () => {\n const newTransition: Transition = {\n transitionId: `transition_${Date.now()}`,\n transitionName: t('workflows.common.newTransition'),\n fromStepId: '',\n toStepId: '',\n trigger: 'auto',\n preConditions: [],\n postConditions: [],\n activities: [],\n priority: 100,\n }\n onChange([...value, newTransition])\n }\n\n const updateTransition = (index: number, field: keyof Transition, fieldValue: any) => {\n const updated = [...value]\n updated[index] = { ...updated[index], [field]: fieldValue }\n onChange(updated)\n }\n\n const removeTransition = (index: number) => {\n onChange(value.filter((_, i) => i !== index))\n }\n\n const moveTransition = (index: number, direction: 'up' | 'down') => {\n const newIndex = direction === 'up' ? index - 1 : index + 1\n if (newIndex < 0 || newIndex >= value.length) return\n\n const updated = [...value]\n const temp = updated[index]\n updated[index] = updated[newIndex]\n updated[newIndex] = temp\n onChange(updated)\n }\n\n const addActivity = (transitionIndex: number) => {\n const newActivity: Activity = {\n activityId: `activity_${Date.now()}`,\n activityName: t('workflows.common.newActivity'),\n activityType: 'CALL_API',\n config: {},\n async: false,\n retryPolicy: {\n maxAttempts: 3,\n retryDelay: 1000,\n backoffMultiplier: 2,\n },\n }\n const updated = [...value]\n updated[transitionIndex] = {\n ...updated[transitionIndex],\n activities: [...(updated[transitionIndex].activities || []), newActivity],\n }\n onChange(updated)\n }\n\n const updateActivity = (transitionIndex: number, activityIndex: number, field: keyof Activity, fieldValue: any) => {\n const updated = [...value]\n const activities = [...(updated[transitionIndex].activities || [])]\n activities[activityIndex] = { ...activities[activityIndex], [field]: fieldValue }\n updated[transitionIndex] = { ...updated[transitionIndex], activities }\n onChange(updated)\n }\n\n const updateRetryPolicy = (transitionIndex: number, activityIndex: number, field: string, fieldValue: any) => {\n const updated = [...value]\n const activities = [...(updated[transitionIndex].activities || [])]\n activities[activityIndex] = {\n ...activities[activityIndex],\n retryPolicy: {\n ...activities[activityIndex].retryPolicy,\n [field]: fieldValue,\n },\n }\n updated[transitionIndex] = { ...updated[transitionIndex], activities }\n onChange(updated)\n }\n\n const removeActivity = (transitionIndex: number, activityIndex: number) => {\n const updated = [...value]\n updated[transitionIndex] = {\n ...updated[transitionIndex],\n activities: (updated[transitionIndex].activities || []).filter((_, i) => i !== activityIndex),\n }\n onChange(updated)\n }\n\n const moveActivity = (transitionIndex: number, activityIndex: number, direction: 'up' | 'down') => {\n const activities = value[transitionIndex].activities || []\n const newIndex = direction === 'up' ? activityIndex - 1 : activityIndex + 1\n if (newIndex < 0 || newIndex >= activities.length) return\n\n const updated = [...value]\n const updatedActivities = [...activities]\n const temp = updatedActivities[activityIndex]\n updatedActivities[activityIndex] = updatedActivities[newIndex]\n updatedActivities[newIndex] = temp\n updated[transitionIndex] = { ...updated[transitionIndex], activities: updatedActivities }\n onChange(updated)\n }\n\n return (\n <div className=\"space-y-4\">\n <div className=\"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between\">\n <div>\n <p className=\"text-sm text-muted-foreground\">\n {t('workflows.form.descriptions.transitions')}\n </p>\n {error && <p className=\"text-sm text-red-600 mt-1\">{error}</p>}\n </div>\n <Button type=\"button\" onClick={addTransition} variant=\"outline\" size=\"sm\" className=\"w-full sm:w-auto\">\n <Plus className=\"h-4 w-4 mr-1\" />\n {t('workflows.form.addTransition')}\n </Button>\n </div>\n\n {value.length === 0 && (\n <div className=\"p-6 text-center text-muted-foreground border rounded-md bg-muted\">\n {t('workflows.form.noTransitions')}\n </div>\n )}\n\n <div className=\"space-y-3\">\n {value.map((transition, index) => (\n <div key={index} className=\"p-4 border rounded-md bg-card shadow-sm border-l-4 border-l-blue-500\">\n <div className=\"space-y-3\">\n <div className=\"flex flex-col gap-3 sm:flex-row sm:items-start sm:justify-between\">\n <div className=\"flex-1 grid grid-cols-1 sm:grid-cols-2 gap-3\">\n <div>\n <Label htmlFor={`transition-${index}-id`} className=\"text-xs\">\n {t('workflows.transitions.transitionId')} *\n </Label>\n <Input\n id={`transition-${index}-id`}\n value={transition.transitionId}\n onChange={(e) => updateTransition(index, 'transitionId', e.target.value)}\n placeholder=\"transition_name\"\n className=\"mt-1\"\n />\n </div>\n <div>\n <Label htmlFor={`transition-${index}-name`} className=\"text-xs\">\n {t('workflows.transitions.transitionName')} *\n </Label>\n <Input\n id={`transition-${index}-name`}\n value={transition.transitionName}\n onChange={(e) => updateTransition(index, 'transitionName', e.target.value)}\n placeholder={t('workflows.transitions.transitionName')}\n className=\"mt-1\"\n />\n </div>\n </div>\n <div className=\"flex items-center gap-1 self-end sm:self-auto\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => moveTransition(index, 'up')}\n disabled={index === 0}\n title={t('common.moveUp')}\n >\n <ChevronUp className=\"h-4 w-4\" />\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => moveTransition(index, 'down')}\n disabled={index === value.length - 1}\n title={t('common.moveDown')}\n >\n <ChevronDown className=\"h-4 w-4\" />\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => removeTransition(index)}\n title={t('common.delete')}\n >\n <Trash2 className=\"h-4 w-4 text-red-600\" />\n </Button>\n </div>\n </div>\n\n <div className=\"grid grid-cols-1 sm:grid-cols-3 gap-3\">\n <div>\n <Label htmlFor={`transition-${index}-from`} className=\"text-xs\">\n {t('workflows.transitions.fromStep')} *\n </Label>\n <Select\n value={transition.fromStepId || undefined}\n onValueChange={(value) => updateTransition(index, 'fromStepId', value ?? '')}\n >\n <SelectTrigger id={`transition-${index}-from`} className=\"mt-1\">\n <SelectValue placeholder={t('workflows.form.selectStep')} />\n </SelectTrigger>\n <SelectContent>\n {steps.map((step: any) => (\n <SelectItem key={step.stepId} value={step.stepId}>\n {step.stepName || step.stepId}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n <div>\n <Label htmlFor={`transition-${index}-to`} className=\"text-xs\">\n {t('workflows.transitions.toStep')} *\n </Label>\n <Select\n value={transition.toStepId || undefined}\n onValueChange={(value) => updateTransition(index, 'toStepId', value ?? '')}\n >\n <SelectTrigger id={`transition-${index}-to`} className=\"mt-1\">\n <SelectValue placeholder={t('workflows.form.selectStep')} />\n </SelectTrigger>\n <SelectContent>\n {steps.map((step: any) => (\n <SelectItem key={step.stepId} value={step.stepId}>\n {step.stepName || step.stepId}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n <div>\n <Label htmlFor={`transition-${index}-trigger`} className=\"text-xs\">\n {t('workflows.transitions.trigger')} *\n </Label>\n <Select\n value={transition.trigger}\n onValueChange={(value) => updateTransition(index, 'trigger', value)}\n >\n <SelectTrigger id={`transition-${index}-trigger`} className=\"mt-1\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {TRIGGER_TYPES.map((type) => (\n <SelectItem key={type.value} value={type.value}>\n {t(`workflows.transitions.triggers.${type.value}`)}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n </div>\n\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-3\">\n <div>\n <Label htmlFor={`transition-${index}-priority`} className=\"text-xs\">\n {t('workflows.transitions.priority')}\n </Label>\n <Input\n id={`transition-${index}-priority`}\n type=\"number\"\n value={transition.priority || 100}\n onChange={(e) => updateTransition(index, 'priority', parseInt(e.target.value))}\n className=\"mt-1\"\n />\n </div>\n <div>\n <Label htmlFor={`transition-${index}-preconditions`} className=\"text-xs\">\n {t('workflows.transitions.preConditions')}\n </Label>\n <Input\n id={`transition-${index}-preconditions`}\n value={(transition.preConditions || []).join(', ')}\n onChange={(e) => updateTransition(index, 'preConditions', e.target.value.split(',').map(s => s.trim()).filter(Boolean))}\n placeholder=\"rule_id_1, rule_id_2\"\n className=\"mt-1\"\n />\n </div>\n </div>\n\n <div className=\"mt-4 pl-4 border-l-2 border-border\">\n <div className=\"flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between mb-3\">\n <Label className=\"text-xs font-semibold text-foreground\">\n {t('workflows.transitions.activities')}\n </Label>\n <Button\n type=\"button\"\n onClick={() => addActivity(index)}\n variant=\"outline\"\n size=\"sm\"\n className=\"w-full sm:w-auto\"\n >\n <Plus className=\"h-3 w-3 mr-1\" />\n {t('workflows.form.addActivity')}\n </Button>\n </div>\n\n {(transition.activities || []).length === 0 && (\n <div className=\"p-3 text-center text-xs text-muted-foreground border rounded-md bg-muted\">\n {t('workflows.form.noActivitiesInTransition')}\n </div>\n )}\n\n <div className=\"space-y-2\">\n {(transition.activities || []).map((activity, activityIndex) => {\n const draftKey = configDraftKey(transition, activity)\n const configDraft = configDrafts[draftKey]\n return (\n <div key={draftKey} className=\"p-3 border rounded-md bg-muted shadow-sm border-l-4 border-l-green-500\">\n <div className=\"space-y-2\">\n <div className=\"flex flex-col gap-2 sm:flex-row sm:items-start sm:justify-between\">\n <div className=\"flex-1 grid grid-cols-1 sm:grid-cols-2 gap-2\">\n <div>\n <Label htmlFor={`activity-${index}-${activityIndex}-id`} className=\"text-xs\">\n {t('workflows.activities.activityId')} *\n </Label>\n <Input\n id={`activity-${index}-${activityIndex}-id`}\n value={activity.activityId}\n onChange={(e) => updateActivity(index, activityIndex, 'activityId', e.target.value)}\n placeholder=\"activity_name\"\n className=\"mt-1 text-xs h-8\"\n />\n </div>\n <div>\n <Label htmlFor={`activity-${index}-${activityIndex}-name`} className=\"text-xs\">\n {t('workflows.activities.activityName')} *\n </Label>\n <Input\n id={`activity-${index}-${activityIndex}-name`}\n value={activity.activityName}\n onChange={(e) => updateActivity(index, activityIndex, 'activityName', e.target.value)}\n placeholder={t('workflows.activities.activityName')}\n className=\"mt-1 text-xs h-8\"\n />\n </div>\n </div>\n <div className=\"flex items-center gap-1 self-end sm:self-auto\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => moveActivity(index, activityIndex, 'up')}\n disabled={activityIndex === 0}\n title={t('common.moveUp')}\n >\n <ChevronUp className=\"h-3 w-3\" />\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => moveActivity(index, activityIndex, 'down')}\n disabled={activityIndex === (transition.activities || []).length - 1}\n title={t('common.moveDown')}\n >\n <ChevronDown className=\"h-3 w-3\" />\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => removeActivity(index, activityIndex)}\n title={t('common.delete')}\n >\n <Trash2 className=\"h-3 w-3 text-red-600\" />\n </Button>\n </div>\n </div>\n\n <div className=\"grid grid-cols-1 sm:grid-cols-3 gap-2\">\n <div>\n <Label htmlFor={`activity-${index}-${activityIndex}-type`} className=\"text-xs\">\n {t('workflows.activities.activityType')} *\n </Label>\n <Select\n value={activity.activityType}\n onValueChange={(value) => updateActivity(index, activityIndex, 'activityType', value)}\n >\n <SelectTrigger id={`activity-${index}-${activityIndex}-type`} size=\"sm\" className=\"mt-1\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {ACTIVITY_TYPES.map((type) => (\n <SelectItem key={type.value} value={type.value}>\n {t(`workflows.activities.types.${type.value}`)}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n <div>\n <Label htmlFor={`activity-${index}-${activityIndex}-timeout`} className=\"text-xs\">\n {t('workflows.activities.timeout')} (ms)\n </Label>\n <Input\n id={`activity-${index}-${activityIndex}-timeout`}\n type=\"number\"\n value={activity.timeoutMs || ''}\n onChange={(e) => updateActivity(index, activityIndex, 'timeoutMs', e.target.value ? parseInt(e.target.value) : undefined)}\n placeholder=\"30000\"\n className=\"mt-1 text-xs h-8\"\n />\n </div>\n <div className=\"flex items-end pb-1\">\n <div className=\"flex items-center space-x-2\">\n <input\n type=\"checkbox\"\n id={`activity-${index}-${activityIndex}-async`}\n checked={activity.async || false}\n onChange={(e) => updateActivity(index, activityIndex, 'async', e.target.checked)}\n className=\"h-3 w-3\"\n />\n <Label htmlFor={`activity-${index}-${activityIndex}-async`} className=\"text-xs cursor-pointer\">\n {t('workflows.activities.async')}\n </Label>\n </div>\n </div>\n </div>\n\n <div className=\"grid grid-cols-1 sm:grid-cols-3 gap-2\">\n <div>\n <Label htmlFor={`activity-${index}-${activityIndex}-retry-attempts`} className=\"text-xs\">\n {t('workflows.form.maxRetryAttempts')}\n </Label>\n <Input\n id={`activity-${index}-${activityIndex}-retry-attempts`}\n type=\"number\"\n value={activity.retryPolicy?.maxAttempts || 3}\n onChange={(e) => updateRetryPolicy(index, activityIndex, 'maxAttempts', parseInt(e.target.value))}\n className=\"mt-1 text-xs h-8\"\n />\n </div>\n <div>\n <Label htmlFor={`activity-${index}-${activityIndex}-retry-delay`} className=\"text-xs\">\n {t('workflows.form.retryDelay')} (ms)\n </Label>\n <Input\n id={`activity-${index}-${activityIndex}-retry-delay`}\n type=\"number\"\n value={activity.retryPolicy?.retryDelay || 1000}\n onChange={(e) => updateRetryPolicy(index, activityIndex, 'retryDelay', parseInt(e.target.value))}\n className=\"mt-1 text-xs h-8\"\n />\n </div>\n <div>\n <Label htmlFor={`activity-${index}-${activityIndex}-backoff`} className=\"text-xs\">\n {t('workflows.form.backoffMultiplier')}\n </Label>\n <Input\n id={`activity-${index}-${activityIndex}-backoff`}\n type=\"number\"\n step=\"0.1\"\n value={activity.retryPolicy?.backoffMultiplier || 2}\n onChange={(e) => updateRetryPolicy(index, activityIndex, 'backoffMultiplier', parseFloat(e.target.value))}\n className=\"mt-1 text-xs h-8\"\n />\n </div>\n </div>\n\n <div>\n <Label htmlFor={`activity-${index}-${activityIndex}-config`} className=\"text-xs\">\n {t('workflows.activities.config')} (JSON)\n </Label>\n <Textarea\n id={`activity-${index}-${activityIndex}-config`}\n value={configDraft?.text ?? JSON.stringify(activity.config || {}, null, 2)}\n onChange={(e) => handleConfigTextChange(index, activityIndex, e.target.value)}\n onBlur={() => handleConfigBlur(transition, activity)}\n aria-invalid={configDraft?.error ? true : undefined}\n aria-describedby={configDraft?.error ? `activity-${index}-${activityIndex}-config-error` : undefined}\n placeholder='{\"key\": \"value\"}'\n rows={2}\n className=\"mt-1 font-mono text-xs\"\n />\n {configDraft?.error ? (\n <p\n id={`activity-${index}-${activityIndex}-config-error`}\n className=\"mt-1 text-xs text-status-error-text\"\n role=\"alert\"\n >\n {configDraft.error}\n </p>\n ) : null}\n </div>\n </div>\n </div>\n )\n })}\n </div>\n </div>\n </div>\n </div>\n ))}\n </div>\n </div>\n )\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["value"]
7
7
  }
@@ -151,6 +151,14 @@ const activityRetryPolicySchema = z.object({
151
151
  backoffCoefficient: z.number().min(1).max(10),
152
152
  maxIntervalMs: z.number().int().min(0)
153
153
  });
154
+ const REQUIRED_ACTIVITY_CONFIG_KEYS = {
155
+ SEND_EMAIL: ["to", "subject"],
156
+ CALL_API: ["endpoint"],
157
+ CALL_WEBHOOK: ["url"],
158
+ UPDATE_ENTITY: ["commandId", "input"],
159
+ EMIT_EVENT: ["eventName"],
160
+ EXECUTE_FUNCTION: ["functionName"]
161
+ };
154
162
  const activityDefinitionSchema = z.object({
155
163
  activityId: z.string().min(1).max(100).regex(/^[a-z0-9_-]+$/, "Activity ID must contain only lowercase letters, numbers, hyphens, and underscores"),
156
164
  activityName: z.string().min(1).max(255),
@@ -159,8 +167,18 @@ const activityDefinitionSchema = z.object({
159
167
  async: z.boolean().default(false).optional(),
160
168
  // For Phase 8.3
161
169
  retryPolicy: activityRetryPolicySchema.optional(),
170
+ /**
171
+ * Per-activity timeout in milliseconds. This is what the editor writes and
172
+ * what `executeActivity` reads; it was missing from the schema, so
173
+ * `z.object()` stripped it on save and UI-configured timeouts silently did
174
+ * nothing (#4424).
175
+ */
176
+ timeoutMs: z.number().int().positive().optional(),
177
+ /**
178
+ * @deprecated Use `timeoutMs`. Accepted for definitions already stored with
179
+ * an ISO 8601 duration string; the executor normalizes it to milliseconds.
180
+ */
162
181
  timeout: z.string().optional(),
163
- // ISO 8601 duration
164
182
  compensation: z.object({
165
183
  activityId: z.string().min(1),
166
184
  // ID of compensation activity
@@ -169,6 +187,21 @@ const activityDefinitionSchema = z.object({
169
187
  }).optional()
170
188
  // Compensation configuration (Phase 8.2)
171
189
  }).superRefine((activity, ctx) => {
190
+ const requiredConfigKeys = REQUIRED_ACTIVITY_CONFIG_KEYS[activity.activityType];
191
+ if (requiredConfigKeys) {
192
+ const config2 = activity.config || {};
193
+ for (const key of requiredConfigKeys) {
194
+ const value = config2[key];
195
+ const isEmpty = value == null || typeof value === "string" && value.trim() === "" || key === "input" && typeof value !== "object";
196
+ if (isEmpty) {
197
+ ctx.addIssue({
198
+ code: "custom",
199
+ path: ["config", key],
200
+ message: `${activity.activityType} activity requires "${key}"`
201
+ });
202
+ }
203
+ }
204
+ }
172
205
  if (activity.activityType !== "WAIT") return;
173
206
  const config = activity.config || {};
174
207
  const hasDuration = config.duration != null && config.duration !== "";
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/modules/workflows/data/validators.ts"],
4
- "sourcesContent": ["import { z } from 'zod'\nimport { parseDuration } from '../lib/duration'\n\n/**\n * Workflows Module - Zod Validators\n *\n * Comprehensive validation schemas for workflow engine entities.\n */\n\nconst uuid = z.uuid()\n\n// Variable interpolation tokens (e.g., {{context.timeout}}) are resolved at\n// run time, so we must skip strict syntax checks on them at save time.\nconst containsTemplate = (value: string) => value.includes('{{')\n\nexport function isValidDurationString(value: unknown): boolean {\n if (typeof value !== 'string' || value.length === 0) return false\n if (containsTemplate(value)) return true\n try {\n const ms = parseDuration(value)\n return Number.isFinite(ms) && ms > 0\n } catch {\n return false\n }\n}\n\nexport function isValidIsoDateString(value: unknown): boolean {\n if (typeof value !== 'string' || value.length === 0) return false\n if (containsTemplate(value)) return true\n const d = new Date(value)\n return !Number.isNaN(d.getTime())\n}\n\nexport function isFutureIsoDateString(value: unknown): boolean {\n if (typeof value !== 'string' || value.length === 0) return false\n if (containsTemplate(value)) return true\n const d = new Date(value)\n if (Number.isNaN(d.getTime())) return false\n return d.getTime() > Date.now()\n}\n\nconst DURATION_ERROR = 'Invalid duration. Use ISO 8601 (e.g., PT5M, PT1H, P1D) or simple format (5m, 1h, 3d)'\nconst UNTIL_ERROR = 'Invalid \"until\". Provide an ISO 8601 datetime string'\nconst UNTIL_PAST_ERROR = '\"until\" must be a future datetime'\n\n// ============================================================================\n// Enum Schemas - Workflow Types and Statuses\n// ============================================================================\n\nexport const workflowStepTypeSchema = z.enum([\n 'START',\n 'END',\n 'USER_TASK',\n 'AUTOMATED',\n 'PARALLEL_FORK',\n 'PARALLEL_JOIN',\n 'SUB_WORKFLOW',\n 'WAIT_FOR_SIGNAL',\n 'WAIT_FOR_TIMER',\n])\nexport type WorkflowStepType = z.infer<typeof workflowStepTypeSchema>\n\nexport const workflowInstanceStatusSchema = z.enum([\n 'RUNNING',\n 'PAUSED',\n 'COMPLETED',\n 'FAILED',\n 'CANCELLED',\n 'COMPENSATING',\n 'COMPENSATED',\n 'WAITING_FOR_ACTIVITIES',\n 'FORKED',\n])\nexport type WorkflowInstanceStatus = z.infer<typeof workflowInstanceStatusSchema>\n\nexport const workflowBranchInstanceStatusSchema = z.enum([\n 'ACTIVE',\n 'PAUSED',\n 'WAITING_FOR_ACTIVITIES',\n 'COMPLETED',\n 'FAILED',\n 'CANCELLED',\n])\nexport type WorkflowBranchInstanceStatus = z.infer<typeof workflowBranchInstanceStatusSchema>\n\nexport const stepInstanceStatusSchema = z.enum([\n 'PENDING',\n 'ACTIVE',\n 'COMPLETED',\n 'FAILED',\n 'SKIPPED',\n 'CANCELLED',\n])\nexport type StepInstanceStatus = z.infer<typeof stepInstanceStatusSchema>\n\nexport const userTaskStatusSchema = z.enum([\n 'PENDING',\n 'IN_PROGRESS',\n 'COMPLETED',\n 'CANCELLED',\n 'ESCALATED',\n])\nexport type UserTaskStatus = z.infer<typeof userTaskStatusSchema>\n\nexport const transitionTriggerSchema = z.enum(['auto', 'manual', 'signal', 'timer'])\nexport type TransitionTrigger = z.infer<typeof transitionTriggerSchema>\n\nexport const activityTypeSchema = z.enum([\n 'SEND_EMAIL',\n 'CALL_API',\n 'UPDATE_ENTITY',\n 'EMIT_EVENT',\n 'CALL_WEBHOOK',\n 'EXECUTE_FUNCTION',\n 'WAIT',\n])\nexport type ActivityType = z.infer<typeof activityTypeSchema>\n\nexport const escalationTriggerSchema = z.enum(['sla_breach', 'no_progress', 'custom'])\nexport type EscalationTrigger = z.infer<typeof escalationTriggerSchema>\n\nexport const escalationActionSchema = z.enum(['reassign', 'notify', 'escalate'])\nexport type EscalationAction = z.infer<typeof escalationActionSchema>\n\n// ============================================================================\n// Complex Object Schemas - Workflow Definition Components\n// ============================================================================\n\n// User task configuration\nexport const userTaskConfigSchema = z.object({\n // Support both custom fields array format and JSON Schema format\n formSchema: z.union([\n // Custom format with fields array\n z.object({\n fields: z.array(z.object({\n name: z.string().min(1),\n type: z.string().min(1),\n label: z.string().min(1),\n required: z.boolean().optional(),\n options: z.array(z.any()).optional(),\n }))\n }),\n // JSON Schema format with properties\n z.object({\n type: z.literal('object').optional(),\n properties: z.record(z.string(), z.any()),\n required: z.array(z.string()).optional(),\n }),\n ]).optional(),\n assignedTo: z.union([\n z.string(),\n z.array(z.string()),\n ]).optional(),\n assignmentRule: z.string().optional(), // Business rule ID\n slaDuration: z.string().optional(), // ISO 8601 duration\n escalationRules: z.array(z.object({\n trigger: escalationTriggerSchema,\n action: escalationActionSchema,\n escalateTo: z.string().optional(),\n notifyUsers: z.array(z.string()).optional(),\n })).optional(),\n})\n\n// Sub-workflow configuration (Phase 8)\nexport const subWorkflowConfigSchema = z.object({\n subWorkflowId: z.string().min(1, 'Sub-workflow ID is required'),\n version: z.number().int().positive().optional(),\n inputMapping: z.record(z.string(), z.string()).optional(),\n outputMapping: z.record(z.string(), z.string()).optional(),\n timeoutMs: z.number().int().positive().optional(),\n})\n\n// CALL_API activity configuration\nexport const callApiConfigSchema = z.object({\n endpoint: z.string().min(1, 'API endpoint is required'),\n method: z.enum(['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS']).default('GET'),\n headers: z.record(z.string(), z.string()).optional(),\n body: z.any().optional(),\n validateTenantMatch: z.boolean().default(true).optional(),\n timeout: z.number().int().positive().optional(),\n})\n\nexport const callWebhookConfigSchema = z.object({\n url: z.string().min(1, 'Webhook URL is required'),\n method: z.enum(['GET', 'POST', 'PUT', 'PATCH', 'DELETE']).default('POST'),\n headers: z.record(z.string(), z.string()).optional(),\n body: z.any().optional(),\n})\nexport type CallWebhookConfig = z.infer<typeof callWebhookConfigSchema>\n\n// Retry policy\nexport const retryPolicySchema = z.object({\n maxAttempts: z.number().int().min(1).max(10),\n backoffMs: z.number().int().min(0),\n})\n\n// Activity retry policy (more detailed)\nexport const activityRetryPolicySchema = z.object({\n maxAttempts: z.number().int().min(1).max(10),\n initialIntervalMs: z.number().int().min(0),\n backoffCoefficient: z.number().min(1).max(10),\n maxIntervalMs: z.number().int().min(0),\n})\n\n// Activity definition (embedded in transitions)\nexport const activityDefinitionSchema = z.object({\n activityId: z.string().min(1).max(100).regex(/^[a-z0-9_-]+$/, 'Activity ID must contain only lowercase letters, numbers, hyphens, and underscores'),\n activityName: z.string().min(1).max(255),\n activityType: activityTypeSchema,\n config: z.record(z.string(), z.any()),\n async: z.boolean().default(false).optional(), // For Phase 8.3\n retryPolicy: activityRetryPolicySchema.optional(),\n timeout: z.string().optional(), // ISO 8601 duration\n compensation: z.object({\n activityId: z.string().min(1), // ID of compensation activity\n automatic: z.boolean().default(true).optional() // Auto-trigger on failure\n }).optional(), // Compensation configuration (Phase 8.2)\n}).superRefine((activity, ctx) => {\n if (activity.activityType !== 'WAIT') return\n const config = activity.config || {}\n const hasDuration = config.duration != null && config.duration !== ''\n const hasUntil = config.until != null && config.until !== ''\n if (!hasDuration && !hasUntil) {\n ctx.addIssue({\n code: 'custom',\n path: ['config'],\n message: 'WAIT activity requires \"duration\" or \"until\"',\n })\n return\n }\n if (hasDuration && hasUntil) {\n ctx.addIssue({\n code: 'custom',\n path: ['config'],\n message: 'WAIT activity accepts \"duration\" OR \"until\", not both',\n })\n return\n }\n if (hasDuration && !isValidDurationString(config.duration)) {\n ctx.addIssue({\n code: 'custom',\n path: ['config', 'duration'],\n message: DURATION_ERROR,\n })\n }\n if (hasUntil) {\n if (!isValidIsoDateString(config.until)) {\n ctx.addIssue({\n code: 'custom',\n path: ['config', 'until'],\n message: UNTIL_ERROR,\n })\n } else if (!isFutureIsoDateString(config.until)) {\n ctx.addIssue({\n code: 'custom',\n path: ['config', 'until'],\n message: UNTIL_PAST_ERROR,\n })\n }\n }\n})\n\n// Localized validation message schema (for START step pre-conditions)\nexport const localizedMessageSchema = z.record(z.string(), z.string())\n\n// START step pre-condition schema (with optional localized validation messages)\nexport const startPreConditionSchema = z.object({\n ruleId: z.string().min(1).max(50), // Business rule ID\n required: z.boolean().default(true),\n validationMessage: localizedMessageSchema.optional(), // Optional localized error messages\n})\n\nexport type StartPreCondition = z.infer<typeof startPreConditionSchema>\n\n// Step definition\nexport const workflowStepSchema = z.object({\n stepId: z.string().min(1).max(100).regex(/^[a-z0-9_-]+$/, 'Step ID must contain only lowercase letters, numbers, hyphens, and underscores'),\n stepName: z.string().min(1).max(255),\n stepType: workflowStepTypeSchema,\n description: z.string().max(1000).optional(),\n config: z.record(z.string(), z.any()).optional(),\n userTaskConfig: userTaskConfigSchema.optional(),\n subWorkflowConfig: subWorkflowConfigSchema.optional(),\n signalConfig: z.object({\n signalName: z.string().min(1),\n timeout: z.string().optional(),\n }).optional(),\n activities: z.array(activityDefinitionSchema).optional(),\n timeout: z.string().optional(), // ISO 8601 duration\n retryPolicy: retryPolicySchema.optional(),\n // Pre-conditions for START step (business rules to validate before workflow can be started)\n preConditions: z.array(startPreConditionSchema).optional(),\n}).superRefine((step, ctx) => {\n if (step.stepType !== 'WAIT_FOR_TIMER') return\n const config = step.config || {}\n const hasDuration = config.duration != null && config.duration !== ''\n const hasUntil = config.until != null && config.until !== ''\n if (!hasDuration && !hasUntil) {\n ctx.addIssue({\n code: 'custom',\n path: ['config'],\n message: 'WAIT_FOR_TIMER step requires \"duration\" or \"until\"',\n })\n return\n }\n if (hasDuration && hasUntil) {\n ctx.addIssue({\n code: 'custom',\n path: ['config'],\n message: 'WAIT_FOR_TIMER step accepts \"duration\" OR \"until\", not both',\n })\n return\n }\n if (hasDuration && !isValidDurationString(config.duration)) {\n ctx.addIssue({\n code: 'custom',\n path: ['config', 'duration'],\n message: DURATION_ERROR,\n })\n }\n if (hasUntil) {\n if (!isValidIsoDateString(config.until)) {\n ctx.addIssue({\n code: 'custom',\n path: ['config', 'until'],\n message: UNTIL_ERROR,\n })\n } else if (!isFutureIsoDateString(config.until)) {\n ctx.addIssue({\n code: 'custom',\n path: ['config', 'until'],\n message: UNTIL_PAST_ERROR,\n })\n }\n }\n})\n\n// Transition condition (reference to business rule)\nexport const transitionConditionSchema = z.object({\n ruleId: z.string().min(1).max(50), // Business rule ID\n required: z.boolean().default(true),\n})\n\n// Transition definition\nexport const workflowTransitionSchema = z.object({\n transitionId: z.string().min(1).max(100).regex(/^[a-z0-9_-]+$/, 'Transition ID must contain only lowercase letters, numbers, hyphens, and underscores'),\n fromStepId: z.string().min(1).max(100),\n toStepId: z.string().min(1).max(100),\n transitionName: z.string().max(255).optional(),\n trigger: transitionTriggerSchema,\n preConditions: z.array(transitionConditionSchema).optional(),\n postConditions: z.array(transitionConditionSchema).optional(),\n activities: z.array(activityDefinitionSchema).optional(), // Activities to execute during transition\n continueOnActivityFailure: z.boolean().default(false).optional(), // If true, transition continues even when activities fail\n priority: z.number().int().min(0).max(9999).default(0),\n})\n\n// Workflow definition trigger schema (embedded in definition)\n// Note: Uses forward reference pattern since eventPatternSchema and eventTriggerConfigSchema are defined later\nexport const workflowDefinitionTriggerSchema = z.object({\n triggerId: z.string().min(1).max(100).regex(/^[a-z0-9_-]+$/, 'Trigger ID must contain only lowercase letters, numbers, hyphens, and underscores'),\n name: z.string().min(1).max(255),\n description: z.string().max(2000).optional().nullable(),\n eventPattern: z.string()\n .min(1, 'Event pattern is required')\n .max(255, 'Event pattern must be at most 255 characters')\n .regex(\n /^(\\*|[a-z0-9_]+(\\.[a-z0-9_*]+)*)$/i,\n 'Event pattern must be \"*\" or a dot-separated pattern with optional wildcards (e.g., \"customers.people.created\", \"sales.orders.*\")'\n ),\n config: z.object({\n filterConditions: z.array(z.object({\n field: z.string().min(1).max(255),\n operator: z.enum(['eq', 'neq', 'gt', 'gte', 'lt', 'lte', 'contains', 'startsWith', 'endsWith', 'in', 'notIn', 'exists', 'notExists', 'regex']),\n value: z.any(),\n })).max(20).optional(),\n contextMapping: z.array(z.object({\n targetKey: z.string().min(1).max(100),\n sourceExpression: z.string().min(1).max(255),\n defaultValue: z.any().optional(),\n })).max(50).optional(),\n debounceMs: z.number().int().min(0).max(3600000).optional(),\n maxConcurrentInstances: z.number().int().min(1).max(1000).optional(),\n }).optional().nullable(),\n enabled: z.boolean().default(true),\n priority: z.number().int().min(0).max(9999).default(0),\n})\nexport type WorkflowDefinitionTrigger = z.infer<typeof workflowDefinitionTriggerSchema>\n\n// ============================================================================\n// PARALLEL_FORK / PARALLEL_JOIN definition validation\n// ============================================================================\n\n// Error codes surfaced by FORK/JOIN definition validation. Stable identifiers\n// so the visual editor and tests can match on them.\nexport type ForkJoinValidationCode =\n | 'MISSING_JOIN_STEP_ID'\n | 'JOIN_STEP_NOT_FOUND'\n | 'JOIN_STEP_WRONG_TYPE'\n | 'MISSING_FORK_STEP_ID'\n | 'FORK_JOIN_MISMATCH'\n | 'FORK_TOO_FEW_BRANCHES'\n | 'JOIN_TOO_FEW_INCOMING'\n | 'DUPLICATE_BRANCH_KEY'\n | 'NESTED_FORK_NOT_SUPPORTED'\n | 'NO_CONVERGENCE_TO_JOIN'\n | 'FORK_JOIN_CYCLE'\n | 'UNPAIRED_JOIN'\n\nexport interface ForkJoinValidationIssue {\n code: ForkJoinValidationCode\n message: string\n stepId?: string\n}\n\ninterface ForkJoinStepLike {\n stepId: string\n stepType: string\n config?: Record<string, unknown> | null\n}\n\ninterface ForkJoinTransitionLike {\n transitionId: string\n fromStepId: string\n toStepId: string\n trigger: string\n}\n\ninterface ForkJoinDefinitionLike {\n steps: ForkJoinStepLike[]\n transitions: ForkJoinTransitionLike[]\n}\n\n/**\n * Validates PARALLEL_FORK / PARALLEL_JOIN structure of a workflow definition.\n * Pure and side-effect-free so it can be unit tested and reused by the editor.\n *\n * Rules (this iteration \u2014 wait-all, no nesting):\n * 1. Every FORK declares config.joinStepId pointing at an existing PARALLEL_JOIN.\n * 2. The paired JOIN back-references the fork via config.forkStepId.\n * 3. A FORK has >= 2 outgoing `auto` transitions (branch keys unique); a JOIN has >= 2 incoming.\n * 4. Every path from a FORK converges to its JOIN \u2014 no END inside a branch, no dead ends,\n * no path bypassing the JOIN, no path to a different JOIN.\n * 5. No nesting: no FORK appears on a path between a FORK and its JOIN.\n * 6. No cycles back to the FORK within its branch region.\n * 7. Every PARALLEL_JOIN is paired with exactly one FORK.\n */\nexport function validateParallelForkJoin(definition: ForkJoinDefinitionLike): ForkJoinValidationIssue[] {\n const issues: ForkJoinValidationIssue[] = []\n const steps = definition.steps ?? []\n const transitions = definition.transitions ?? []\n\n const stepById = new Map<string, ForkJoinStepLike>()\n for (const step of steps) stepById.set(step.stepId, step)\n\n const outgoingByStep = new Map<string, ForkJoinTransitionLike[]>()\n const incomingCountByStep = new Map<string, number>()\n for (const transition of transitions) {\n const list = outgoingByStep.get(transition.fromStepId) ?? []\n list.push(transition)\n outgoingByStep.set(transition.fromStepId, list)\n incomingCountByStep.set(transition.toStepId, (incomingCountByStep.get(transition.toStepId) ?? 0) + 1)\n }\n\n const forkSteps = steps.filter((step) => step.stepType === 'PARALLEL_FORK')\n const joinSteps = steps.filter((step) => step.stepType === 'PARALLEL_JOIN')\n\n // Track which JOIN steps are paired with a FORK so we can flag orphan joins.\n const pairedJoinIds = new Set<string>()\n\n for (const fork of forkSteps) {\n const joinStepId = (fork.config?.joinStepId as string | undefined) ?? undefined\n if (!joinStepId) {\n issues.push({ code: 'MISSING_JOIN_STEP_ID', stepId: fork.stepId, message: `PARALLEL_FORK \"${fork.stepId}\" must declare config.joinStepId` })\n continue\n }\n const joinStep = stepById.get(joinStepId)\n if (!joinStep) {\n issues.push({ code: 'JOIN_STEP_NOT_FOUND', stepId: fork.stepId, message: `PARALLEL_FORK \"${fork.stepId}\" references missing join step \"${joinStepId}\"` })\n continue\n }\n if (joinStep.stepType !== 'PARALLEL_JOIN') {\n issues.push({ code: 'JOIN_STEP_WRONG_TYPE', stepId: fork.stepId, message: `Step \"${joinStepId}\" referenced by fork \"${fork.stepId}\" is not a PARALLEL_JOIN` })\n continue\n }\n\n pairedJoinIds.add(joinStepId)\n\n const backForkStepId = (joinStep.config?.forkStepId as string | undefined) ?? undefined\n if (!backForkStepId) {\n issues.push({ code: 'MISSING_FORK_STEP_ID', stepId: joinStepId, message: `PARALLEL_JOIN \"${joinStepId}\" must declare config.forkStepId` })\n } else if (backForkStepId !== fork.stepId) {\n issues.push({ code: 'FORK_JOIN_MISMATCH', stepId: joinStepId, message: `PARALLEL_JOIN \"${joinStepId}\" back-reference forkStepId \"${backForkStepId}\" does not match fork \"${fork.stepId}\"` })\n }\n\n const autoBranches = (outgoingByStep.get(fork.stepId) ?? []).filter((transition) => transition.trigger === 'auto')\n if (autoBranches.length < 2) {\n issues.push({ code: 'FORK_TOO_FEW_BRANCHES', stepId: fork.stepId, message: `PARALLEL_FORK \"${fork.stepId}\" must have at least 2 outgoing auto transitions (found ${autoBranches.length})` })\n }\n const branchKeys = new Set<string>()\n for (const branch of autoBranches) {\n if (branchKeys.has(branch.transitionId)) {\n issues.push({ code: 'DUPLICATE_BRANCH_KEY', stepId: fork.stepId, message: `PARALLEL_FORK \"${fork.stepId}\" has duplicate branch key \"${branch.transitionId}\"` })\n }\n branchKeys.add(branch.transitionId)\n }\n\n if ((incomingCountByStep.get(joinStepId) ?? 0) < 2) {\n issues.push({ code: 'JOIN_TOO_FEW_INCOMING', stepId: joinStepId, message: `PARALLEL_JOIN \"${joinStepId}\" must have at least 2 incoming transitions` })\n }\n\n // Convergence + no-nesting + no-cycle traversal over the branch region.\n const fullyExplored = new Set<string>()\n const onStack = new Set<string>()\n let reportedNesting = false\n let reportedNoConvergence = false\n let reportedCycle = false\n\n const visit = (stepId: string): void => {\n if (stepId === joinStepId) return // converged\n if (stepId === fork.stepId) {\n if (!reportedCycle) {\n issues.push({ code: 'FORK_JOIN_CYCLE', stepId: fork.stepId, message: `A branch of fork \"${fork.stepId}\" loops back to the fork before reaching join \"${joinStepId}\"` })\n reportedCycle = true\n }\n return\n }\n const step = stepById.get(stepId)\n if (!step) {\n if (!reportedNoConvergence) {\n issues.push({ code: 'NO_CONVERGENCE_TO_JOIN', stepId: fork.stepId, message: `A branch of fork \"${fork.stepId}\" reaches missing step \"${stepId}\" instead of join \"${joinStepId}\"` })\n reportedNoConvergence = true\n }\n return\n }\n if (step.stepType === 'END') {\n if (!reportedNoConvergence) {\n issues.push({ code: 'NO_CONVERGENCE_TO_JOIN', stepId: fork.stepId, message: `A branch of fork \"${fork.stepId}\" reaches an END step before join \"${joinStepId}\"` })\n reportedNoConvergence = true\n }\n return\n }\n if (step.stepType === 'PARALLEL_FORK') {\n if (!reportedNesting) {\n issues.push({ code: 'NESTED_FORK_NOT_SUPPORTED', stepId: fork.stepId, message: `Nested PARALLEL_FORK \"${stepId}\" inside fork \"${fork.stepId}\" is not supported` })\n reportedNesting = true\n }\n return\n }\n if (step.stepType === 'PARALLEL_JOIN') {\n // Reached a join that is not this fork's join \u2192 it does not converge correctly.\n if (!reportedNoConvergence) {\n issues.push({ code: 'NO_CONVERGENCE_TO_JOIN', stepId: fork.stepId, message: `A branch of fork \"${fork.stepId}\" reaches join \"${stepId}\" instead of its own join \"${joinStepId}\"` })\n reportedNoConvergence = true\n }\n return\n }\n if (onStack.has(stepId)) {\n if (!reportedCycle) {\n issues.push({ code: 'FORK_JOIN_CYCLE', stepId: fork.stepId, message: `A branch of fork \"${fork.stepId}\" contains a cycle at step \"${stepId}\"` })\n reportedCycle = true\n }\n return\n }\n if (fullyExplored.has(stepId)) return\n\n const outgoing = outgoingByStep.get(stepId) ?? []\n if (outgoing.length === 0) {\n if (!reportedNoConvergence) {\n issues.push({ code: 'NO_CONVERGENCE_TO_JOIN', stepId: fork.stepId, message: `A branch of fork \"${fork.stepId}\" dead-ends at step \"${stepId}\" without reaching join \"${joinStepId}\"` })\n reportedNoConvergence = true\n }\n return\n }\n onStack.add(stepId)\n for (const transition of outgoing) visit(transition.toStepId)\n onStack.delete(stepId)\n fullyExplored.add(stepId)\n }\n\n for (const branch of autoBranches) visit(branch.toStepId)\n }\n\n // Any PARALLEL_JOIN not paired with a fork is an orphan.\n for (const join of joinSteps) {\n if (!pairedJoinIds.has(join.stepId)) {\n issues.push({ code: 'UNPAIRED_JOIN', stepId: join.stepId, message: `PARALLEL_JOIN \"${join.stepId}\" is not paired with any PARALLEL_FORK` })\n }\n }\n\n return issues\n}\n\n// Workflow definition data (JSONB structure)\nexport const workflowDefinitionDataSchema = z.object({\n steps: z.array(workflowStepSchema).min(2, 'Workflow must have at least START and END steps'),\n transitions: z.array(workflowTransitionSchema).min(1, 'Workflow must have at least one transition'),\n triggers: z.array(workflowDefinitionTriggerSchema).optional(), // Event triggers for automatic workflow start\n queries: z.array(z.any()).optional(), // For Phase 7\n signals: z.array(z.any()).optional(), // For Phase 9\n timers: z.array(z.any()).optional(), // For Phase 9\n}).superRefine((definition, ctx) => {\n for (const issue of validateParallelForkJoin(definition as ForkJoinDefinitionLike)) {\n ctx.addIssue({\n code: 'custom',\n path: ['steps'],\n message: `[${issue.code}] ${issue.message}`,\n })\n }\n})\n\n// Workflow metadata\nexport const workflowMetadataSchema = z.object({\n tags: z.array(z.string().max(50)).optional(),\n category: z.string().max(100).optional(),\n icon: z.string().max(100).optional(),\n})\n\n// Date preprocessing helper\nconst dateOrNull = z.preprocess((value) => {\n if (value === undefined || value === null || value === '') return null\n const date = value instanceof Date ? value : new Date(String(value))\n return Number.isNaN(date.getTime()) ? null : date\n}, z.date().nullable())\n\n// ============================================================================\n// WorkflowDefinition Schemas\n// ============================================================================\n\n// Full schema for database entities (includes tenant fields)\nexport const createWorkflowDefinitionSchema = z.object({\n workflowId: z.string().min(1).max(100).regex(/^[a-z0-9._-]+$/, 'Workflow ID must contain only lowercase letters, numbers, dots, hyphens, and underscores'),\n workflowName: z.string().min(1).max(255),\n description: z.string().max(2000).optional().nullable(),\n version: z.number().int().positive().default(1),\n definition: workflowDefinitionDataSchema,\n metadata: workflowMetadataSchema.optional().nullable(),\n enabled: z.boolean().default(true),\n effectiveFrom: dateOrNull.optional(),\n effectiveTo: dateOrNull.optional(),\n tenantId: uuid,\n organizationId: uuid,\n createdBy: z.string().max(255).optional().nullable(),\n})\n\nexport type CreateWorkflowDefinitionInput = z.infer<typeof createWorkflowDefinitionSchema>\n\n// API input schema (omits tenant fields - injected from auth context)\nexport const createWorkflowDefinitionInputSchema = z.object({\n workflowId: z.string().min(1).max(100).regex(/^[a-z0-9._-]+$/, 'Workflow ID must contain only lowercase letters, numbers, dots, hyphens, and underscores'),\n workflowName: z.string().min(1).max(255),\n description: z.string().max(2000).optional().nullable(),\n version: z.number().int().positive().default(1),\n definition: workflowDefinitionDataSchema,\n metadata: workflowMetadataSchema.optional().nullable(),\n enabled: z.boolean().default(true).optional(),\n})\n\nexport type CreateWorkflowDefinitionApiInput = z.infer<typeof createWorkflowDefinitionInputSchema>\n\nexport const updateWorkflowDefinitionSchema = createWorkflowDefinitionSchema.partial().extend({\n id: uuid,\n})\n\nexport type UpdateWorkflowDefinitionInput = z.infer<typeof updateWorkflowDefinitionSchema>\n\n// API update schema (omits tenant fields and allows partial updates)\n// Accepts the same shape as the create form so the edit page can submit a\n// full payload without triggering \"Unrecognized keys\" validation errors.\n// workflowId is accepted but ignored by the route handler (it identifies the\n// row); version is applied when supplied so the form can bump it explicitly.\nexport const updateWorkflowDefinitionInputSchema = z.object({\n workflowId: z.string().min(1).max(100).optional(),\n workflowName: z.string().min(1).max(255).optional(),\n description: z.string().max(2000).optional().nullable(),\n version: z.number().int().positive().optional(),\n definition: workflowDefinitionDataSchema.optional(),\n metadata: workflowMetadataSchema.optional().nullable(),\n enabled: z.boolean().optional(),\n effectiveFrom: dateOrNull.optional(),\n effectiveTo: dateOrNull.optional(),\n}).strict()\n\nexport type UpdateWorkflowDefinitionApiInput = z.infer<typeof updateWorkflowDefinitionInputSchema>\n\nexport const workflowDefinitionFilterSchema = z.object({\n workflowId: z.string().optional(),\n workflowName: z.string().optional(),\n enabled: z.boolean().optional(),\n tenantId: uuid.optional(),\n organizationId: uuid.optional(),\n})\n\nexport type WorkflowDefinitionFilter = z.infer<typeof workflowDefinitionFilterSchema>\n\n// ============================================================================\n// WorkflowInstance Schemas\n// ============================================================================\n\nexport const workflowInstanceMetadataSchema = z.object({\n entityType: z.string().max(100).optional(),\n entityId: z.string().max(255).optional(),\n initiatedBy: z.string().max(255).optional(),\n labels: z.record(z.string(), z.string()).optional(),\n})\n\nexport const createWorkflowInstanceSchema = z.object({\n definitionId: uuid,\n workflowId: z.string().min(1).max(100),\n version: z.number().int().positive(),\n status: workflowInstanceStatusSchema,\n currentStepId: z.string().min(1).max(100),\n context: z.record(z.string(), z.any()),\n correlationKey: z.string().max(255).optional().nullable(),\n metadata: workflowInstanceMetadataSchema.optional().nullable(),\n startedAt: z.coerce.date(),\n completedAt: dateOrNull.optional(),\n pausedAt: dateOrNull.optional(),\n cancelledAt: dateOrNull.optional(),\n errorMessage: z.string().max(5000).optional().nullable(),\n errorDetails: z.any().optional().nullable(),\n retryCount: z.number().int().min(0).default(0),\n tenantId: uuid,\n organizationId: uuid,\n})\n\nexport type CreateWorkflowInstanceInput = z.infer<typeof createWorkflowInstanceSchema>\n\nexport const updateWorkflowInstanceSchema = createWorkflowInstanceSchema.partial().extend({\n id: uuid,\n})\n\nexport type UpdateWorkflowInstanceInput = z.infer<typeof updateWorkflowInstanceSchema>\n\nexport const workflowInstanceFilterSchema = z.object({\n definitionId: uuid.optional(),\n workflowId: z.string().optional(),\n status: workflowInstanceStatusSchema.optional(),\n correlationKey: z.string().optional(),\n currentStepId: z.string().optional(),\n tenantId: uuid.optional(),\n organizationId: uuid.optional(),\n})\n\nexport type WorkflowInstanceFilter = z.infer<typeof workflowInstanceFilterSchema>\n\n// ============================================================================\n// StepInstance Schemas\n// ============================================================================\n\nexport const createStepInstanceSchema = z.object({\n workflowInstanceId: uuid,\n stepId: z.string().min(1).max(100),\n stepName: z.string().min(1).max(255),\n stepType: z.string().min(1).max(50),\n status: stepInstanceStatusSchema,\n inputData: z.any().optional().nullable(),\n outputData: z.any().optional().nullable(),\n errorData: z.any().optional().nullable(),\n enteredAt: dateOrNull.optional(),\n exitedAt: dateOrNull.optional(),\n executionTimeMs: z.number().int().min(0).optional().nullable(),\n retryCount: z.number().int().min(0).default(0),\n tenantId: uuid,\n organizationId: uuid,\n})\n\nexport type CreateStepInstanceInput = z.infer<typeof createStepInstanceSchema>\n\nexport const updateStepInstanceSchema = createStepInstanceSchema.partial().extend({\n id: uuid,\n})\n\nexport type UpdateStepInstanceInput = z.infer<typeof updateStepInstanceSchema>\n\nexport const stepInstanceFilterSchema = z.object({\n workflowInstanceId: uuid.optional(),\n stepId: z.string().optional(),\n status: stepInstanceStatusSchema.optional(),\n tenantId: uuid.optional(),\n organizationId: uuid.optional(),\n})\n\nexport type StepInstanceFilter = z.infer<typeof stepInstanceFilterSchema>\n\n// ============================================================================\n// UserTask Schemas\n// ============================================================================\n\nexport const createUserTaskSchema = z.object({\n workflowInstanceId: uuid,\n stepInstanceId: uuid,\n taskName: z.string().min(1).max(255),\n description: z.string().max(2000).optional().nullable(),\n status: userTaskStatusSchema,\n formSchema: z.any().optional().nullable(),\n formData: z.any().optional().nullable(),\n assignedTo: z.string().max(255).optional().nullable(),\n assignedToRoles: z.array(z.string().max(100)).optional().nullable(),\n claimedBy: z.string().max(255).optional().nullable(),\n claimedAt: dateOrNull.optional(),\n dueDate: dateOrNull.optional(),\n escalatedAt: dateOrNull.optional(),\n escalatedTo: z.string().max(255).optional().nullable(),\n completedBy: z.string().max(255).optional().nullable(),\n completedAt: dateOrNull.optional(),\n comments: z.string().max(5000).optional().nullable(),\n tenantId: uuid,\n organizationId: uuid,\n})\n\nexport type CreateUserTaskInput = z.infer<typeof createUserTaskSchema>\n\nexport const updateUserTaskSchema = createUserTaskSchema.partial().extend({\n id: uuid,\n})\n\nexport type UpdateUserTaskInput = z.infer<typeof updateUserTaskSchema>\n\nexport const userTaskFilterSchema = z.object({\n workflowInstanceId: uuid.optional(),\n status: userTaskStatusSchema.optional(),\n assignedTo: z.string().optional(),\n claimedBy: z.string().optional(),\n tenantId: uuid.optional(),\n organizationId: uuid.optional(),\n})\n\nexport type UserTaskFilter = z.infer<typeof userTaskFilterSchema>\n\n// ============================================================================\n// WorkflowEvent Schemas\n// ============================================================================\n\nexport const createWorkflowEventSchema = z.object({\n workflowInstanceId: uuid,\n stepInstanceId: uuid.optional().nullable(),\n eventType: z.string().min(1).max(50),\n eventData: z.any(),\n occurredAt: z.coerce.date().optional(),\n userId: z.string().max(255).optional().nullable(),\n tenantId: uuid,\n organizationId: uuid,\n})\n\nexport type CreateWorkflowEventInput = z.infer<typeof createWorkflowEventSchema>\n\nexport const workflowEventFilterSchema = z.object({\n workflowInstanceId: uuid.optional(),\n stepInstanceId: uuid.optional(),\n eventType: z.string().optional(),\n tenantId: uuid.optional(),\n organizationId: uuid.optional(),\n occurredAtFrom: z.date().optional(),\n occurredAtTo: z.date().optional(),\n})\n\nexport type WorkflowEventFilter = z.infer<typeof workflowEventFilterSchema>\n\n// ============================================================================\n// Workflow Execution Context Schema\n// ============================================================================\n\nexport const workflowExecutionContextSchema = z.looseObject({\n workflowId: z.string().min(1),\n version: z.number().int().positive().optional(),\n correlationKey: z.string().optional(),\n context: z.record(z.string(), z.any()).optional(),\n metadata: workflowInstanceMetadataSchema.optional(),\n tenantId: z.uuid('tenantId must be a valid UUID'),\n organizationId: z.uuid('organizationId must be a valid UUID'),\n initiatedBy: z.string().optional(),\n})\n\nexport type WorkflowExecutionContextInput = z.infer<typeof workflowExecutionContextSchema>\n\n// API input schema (omits tenant fields - injected from auth context)\nexport const startWorkflowInputSchema = z.object({\n workflowId: z.string().min(1),\n version: z.number().int().positive().optional(),\n correlationKey: z.string().optional(),\n initialContext: z.record(z.string(), z.any()).optional(),\n metadata: workflowInstanceMetadataSchema.optional(),\n})\n\nexport type StartWorkflowApiInput = z.infer<typeof startWorkflowInputSchema>\n\n// ============================================================================\n// WorkflowEventTrigger Schemas\n// ============================================================================\n\nexport const triggerFilterOperatorSchema = z.enum([\n 'eq',\n 'neq',\n 'gt',\n 'gte',\n 'lt',\n 'lte',\n 'contains',\n 'startsWith',\n 'endsWith',\n 'in',\n 'notIn',\n 'exists',\n 'notExists',\n 'regex',\n])\nexport type TriggerFilterOperator = z.infer<typeof triggerFilterOperatorSchema>\n\nexport const triggerFilterConditionSchema = z.object({\n field: z.string().min(1).max(255, 'Field path must be at most 255 characters'),\n operator: triggerFilterOperatorSchema,\n value: z.any(),\n})\nexport type TriggerFilterCondition = z.infer<typeof triggerFilterConditionSchema>\n\nexport const triggerContextMappingSchema = z.object({\n targetKey: z.string().min(1).max(100, 'Target key must be at most 100 characters'),\n sourceExpression: z.string().min(1).max(255, 'Source expression must be at most 255 characters'),\n defaultValue: z.any().optional(),\n})\nexport type TriggerContextMapping = z.infer<typeof triggerContextMappingSchema>\n\nexport const eventTriggerConfigSchema = z.object({\n filterConditions: z.array(triggerFilterConditionSchema).max(20, 'Maximum 20 filter conditions allowed').optional(),\n contextMapping: z.array(triggerContextMappingSchema).max(50, 'Maximum 50 context mappings allowed').optional(),\n debounceMs: z.number().int().min(0).max(3600000, 'Debounce cannot exceed 1 hour').optional(),\n maxConcurrentInstances: z.number().int().min(1).max(1000, 'Max concurrent instances must be between 1 and 1000').optional(),\n})\nexport type EventTriggerConfig = z.infer<typeof eventTriggerConfigSchema>\n\nexport const eventPatternSchema = z.string()\n .min(1, 'Event pattern is required')\n .max(255, 'Event pattern must be at most 255 characters')\n .regex(\n /^(\\*|[a-z0-9_]+(\\.[a-z0-9_*]+)*)$/i,\n 'Event pattern must be \"*\" or a dot-separated pattern with optional wildcards (e.g., \"customers.people.created\", \"sales.orders.*\")'\n )\n\nexport const createEventTriggerSchema = z.object({\n name: z.string().min(1).max(255),\n description: z.string().max(2000).optional().nullable(),\n workflowDefinitionId: uuid,\n eventPattern: eventPatternSchema,\n config: eventTriggerConfigSchema.optional().nullable(),\n enabled: z.boolean().default(true),\n priority: z.number().int().min(0).max(9999).default(0),\n tenantId: uuid,\n organizationId: uuid,\n createdBy: z.string().max(255).optional().nullable(),\n})\nexport type CreateEventTriggerInput = z.infer<typeof createEventTriggerSchema>\n\n// API input schema (omits tenant fields - injected from auth context)\nexport const createEventTriggerInputSchema = z.object({\n name: z.string().min(1).max(255),\n description: z.string().max(2000).optional().nullable(),\n workflowDefinitionId: uuid,\n eventPattern: eventPatternSchema,\n config: eventTriggerConfigSchema.optional().nullable(),\n enabled: z.boolean().default(true).optional(),\n priority: z.number().int().min(0).max(9999).default(0).optional(),\n})\nexport type CreateEventTriggerApiInput = z.infer<typeof createEventTriggerInputSchema>\n\nexport const updateEventTriggerSchema = createEventTriggerSchema.partial().extend({\n id: uuid,\n})\nexport type UpdateEventTriggerInput = z.infer<typeof updateEventTriggerSchema>\n\n// API update schema (omits tenant fields and allows partial updates)\nexport const updateEventTriggerInputSchema = z.object({\n name: z.string().min(1).max(255).optional(),\n description: z.string().max(2000).optional().nullable(),\n workflowDefinitionId: uuid.optional(),\n eventPattern: eventPatternSchema.optional(),\n config: eventTriggerConfigSchema.optional().nullable(),\n enabled: z.boolean().optional(),\n priority: z.number().int().min(0).max(9999).optional(),\n}).strict()\nexport type UpdateEventTriggerApiInput = z.infer<typeof updateEventTriggerInputSchema>\n\nexport const eventTriggerFilterSchema = z.object({\n name: z.string().optional(),\n workflowDefinitionId: uuid.optional(),\n eventPattern: z.string().optional(),\n enabled: z.boolean().optional(),\n tenantId: uuid.optional(),\n organizationId: uuid.optional(),\n})\nexport type EventTriggerFilter = z.infer<typeof eventTriggerFilterSchema>\n"],
5
- "mappings": "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",
6
- "names": []
4
+ "sourcesContent": ["import { z } from 'zod'\nimport { parseDuration } from '../lib/duration'\n\n/**\n * Workflows Module - Zod Validators\n *\n * Comprehensive validation schemas for workflow engine entities.\n */\n\nconst uuid = z.uuid()\n\n// Variable interpolation tokens (e.g., {{context.timeout}}) are resolved at\n// run time, so we must skip strict syntax checks on them at save time.\nconst containsTemplate = (value: string) => value.includes('{{')\n\nexport function isValidDurationString(value: unknown): boolean {\n if (typeof value !== 'string' || value.length === 0) return false\n if (containsTemplate(value)) return true\n try {\n const ms = parseDuration(value)\n return Number.isFinite(ms) && ms > 0\n } catch {\n return false\n }\n}\n\nexport function isValidIsoDateString(value: unknown): boolean {\n if (typeof value !== 'string' || value.length === 0) return false\n if (containsTemplate(value)) return true\n const d = new Date(value)\n return !Number.isNaN(d.getTime())\n}\n\nexport function isFutureIsoDateString(value: unknown): boolean {\n if (typeof value !== 'string' || value.length === 0) return false\n if (containsTemplate(value)) return true\n const d = new Date(value)\n if (Number.isNaN(d.getTime())) return false\n return d.getTime() > Date.now()\n}\n\nconst DURATION_ERROR = 'Invalid duration. Use ISO 8601 (e.g., PT5M, PT1H, P1D) or simple format (5m, 1h, 3d)'\nconst UNTIL_ERROR = 'Invalid \"until\". Provide an ISO 8601 datetime string'\nconst UNTIL_PAST_ERROR = '\"until\" must be a future datetime'\n\n// ============================================================================\n// Enum Schemas - Workflow Types and Statuses\n// ============================================================================\n\nexport const workflowStepTypeSchema = z.enum([\n 'START',\n 'END',\n 'USER_TASK',\n 'AUTOMATED',\n 'PARALLEL_FORK',\n 'PARALLEL_JOIN',\n 'SUB_WORKFLOW',\n 'WAIT_FOR_SIGNAL',\n 'WAIT_FOR_TIMER',\n])\nexport type WorkflowStepType = z.infer<typeof workflowStepTypeSchema>\n\nexport const workflowInstanceStatusSchema = z.enum([\n 'RUNNING',\n 'PAUSED',\n 'COMPLETED',\n 'FAILED',\n 'CANCELLED',\n 'COMPENSATING',\n 'COMPENSATED',\n 'WAITING_FOR_ACTIVITIES',\n 'FORKED',\n])\nexport type WorkflowInstanceStatus = z.infer<typeof workflowInstanceStatusSchema>\n\nexport const workflowBranchInstanceStatusSchema = z.enum([\n 'ACTIVE',\n 'PAUSED',\n 'WAITING_FOR_ACTIVITIES',\n 'COMPLETED',\n 'FAILED',\n 'CANCELLED',\n])\nexport type WorkflowBranchInstanceStatus = z.infer<typeof workflowBranchInstanceStatusSchema>\n\nexport const stepInstanceStatusSchema = z.enum([\n 'PENDING',\n 'ACTIVE',\n 'COMPLETED',\n 'FAILED',\n 'SKIPPED',\n 'CANCELLED',\n])\nexport type StepInstanceStatus = z.infer<typeof stepInstanceStatusSchema>\n\nexport const userTaskStatusSchema = z.enum([\n 'PENDING',\n 'IN_PROGRESS',\n 'COMPLETED',\n 'CANCELLED',\n 'ESCALATED',\n])\nexport type UserTaskStatus = z.infer<typeof userTaskStatusSchema>\n\nexport const transitionTriggerSchema = z.enum(['auto', 'manual', 'signal', 'timer'])\nexport type TransitionTrigger = z.infer<typeof transitionTriggerSchema>\n\nexport const activityTypeSchema = z.enum([\n 'SEND_EMAIL',\n 'CALL_API',\n 'UPDATE_ENTITY',\n 'EMIT_EVENT',\n 'CALL_WEBHOOK',\n 'EXECUTE_FUNCTION',\n 'WAIT',\n])\nexport type ActivityType = z.infer<typeof activityTypeSchema>\n\nexport const escalationTriggerSchema = z.enum(['sla_breach', 'no_progress', 'custom'])\nexport type EscalationTrigger = z.infer<typeof escalationTriggerSchema>\n\nexport const escalationActionSchema = z.enum(['reassign', 'notify', 'escalate'])\nexport type EscalationAction = z.infer<typeof escalationActionSchema>\n\n// ============================================================================\n// Complex Object Schemas - Workflow Definition Components\n// ============================================================================\n\n// User task configuration\nexport const userTaskConfigSchema = z.object({\n // Support both custom fields array format and JSON Schema format\n formSchema: z.union([\n // Custom format with fields array\n z.object({\n fields: z.array(z.object({\n name: z.string().min(1),\n type: z.string().min(1),\n label: z.string().min(1),\n required: z.boolean().optional(),\n options: z.array(z.any()).optional(),\n }))\n }),\n // JSON Schema format with properties\n z.object({\n type: z.literal('object').optional(),\n properties: z.record(z.string(), z.any()),\n required: z.array(z.string()).optional(),\n }),\n ]).optional(),\n assignedTo: z.union([\n z.string(),\n z.array(z.string()),\n ]).optional(),\n assignmentRule: z.string().optional(), // Business rule ID\n slaDuration: z.string().optional(), // ISO 8601 duration\n escalationRules: z.array(z.object({\n trigger: escalationTriggerSchema,\n action: escalationActionSchema,\n escalateTo: z.string().optional(),\n notifyUsers: z.array(z.string()).optional(),\n })).optional(),\n})\n\n// Sub-workflow configuration (Phase 8)\nexport const subWorkflowConfigSchema = z.object({\n subWorkflowId: z.string().min(1, 'Sub-workflow ID is required'),\n version: z.number().int().positive().optional(),\n inputMapping: z.record(z.string(), z.string()).optional(),\n outputMapping: z.record(z.string(), z.string()).optional(),\n timeoutMs: z.number().int().positive().optional(),\n})\n\n// CALL_API activity configuration\nexport const callApiConfigSchema = z.object({\n endpoint: z.string().min(1, 'API endpoint is required'),\n method: z.enum(['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS']).default('GET'),\n headers: z.record(z.string(), z.string()).optional(),\n body: z.any().optional(),\n validateTenantMatch: z.boolean().default(true).optional(),\n timeout: z.number().int().positive().optional(),\n})\n\nexport const callWebhookConfigSchema = z.object({\n url: z.string().min(1, 'Webhook URL is required'),\n method: z.enum(['GET', 'POST', 'PUT', 'PATCH', 'DELETE']).default('POST'),\n headers: z.record(z.string(), z.string()).optional(),\n body: z.any().optional(),\n})\nexport type CallWebhookConfig = z.infer<typeof callWebhookConfigSchema>\n\n// Retry policy\nexport const retryPolicySchema = z.object({\n maxAttempts: z.number().int().min(1).max(10),\n backoffMs: z.number().int().min(0),\n})\n\n// Activity retry policy (more detailed)\nexport const activityRetryPolicySchema = z.object({\n maxAttempts: z.number().int().min(1).max(10),\n initialIntervalMs: z.number().int().min(0),\n backoffCoefficient: z.number().min(1).max(10),\n maxIntervalMs: z.number().int().min(0),\n})\n\n/**\n * Config fields each activity executor requires to run (see\n * `lib/activity-executor.ts`). WAIT is handled separately below because it\n * takes \"duration\" OR \"until\" rather than a fixed key set.\n */\nconst REQUIRED_ACTIVITY_CONFIG_KEYS: Partial<Record<ActivityType, readonly string[]>> = {\n SEND_EMAIL: ['to', 'subject'],\n CALL_API: ['endpoint'],\n CALL_WEBHOOK: ['url'],\n UPDATE_ENTITY: ['commandId', 'input'],\n EMIT_EVENT: ['eventName'],\n EXECUTE_FUNCTION: ['functionName'],\n}\n\n// Activity definition (embedded in transitions)\nexport const activityDefinitionSchema = z.object({\n activityId: z.string().min(1).max(100).regex(/^[a-z0-9_-]+$/, 'Activity ID must contain only lowercase letters, numbers, hyphens, and underscores'),\n activityName: z.string().min(1).max(255),\n activityType: activityTypeSchema,\n config: z.record(z.string(), z.any()),\n async: z.boolean().default(false).optional(), // For Phase 8.3\n retryPolicy: activityRetryPolicySchema.optional(),\n /**\n * Per-activity timeout in milliseconds. This is what the editor writes and\n * what `executeActivity` reads; it was missing from the schema, so\n * `z.object()` stripped it on save and UI-configured timeouts silently did\n * nothing (#4424).\n */\n timeoutMs: z.number().int().positive().optional(),\n /**\n * @deprecated Use `timeoutMs`. Accepted for definitions already stored with\n * an ISO 8601 duration string; the executor normalizes it to milliseconds.\n */\n timeout: z.string().optional(),\n compensation: z.object({\n activityId: z.string().min(1), // ID of compensation activity\n automatic: z.boolean().default(true).optional() // Auto-trigger on failure\n }).optional(), // Compensation configuration (Phase 8.2)\n}).superRefine((activity, ctx) => {\n // Config keys each activity executor requires at runtime. Without this, an\n // activity missing e.g. CALL_API's `endpoint` saved cleanly from the visual\n // editor and only failed once an instance ran it \u2014 the \"edit silently\n // disappeared / nothing told me why\" report in #4232 (and the class of bug\n // #4322 was an instance of). Validating here surfaces the exact missing field\n // at edit time, since both the editor's save path and the API route parse\n // through this schema.\n const requiredConfigKeys = REQUIRED_ACTIVITY_CONFIG_KEYS[activity.activityType]\n if (requiredConfigKeys) {\n const config = activity.config || {}\n for (const key of requiredConfigKeys) {\n const value = config[key]\n const isEmpty =\n value == null ||\n (typeof value === 'string' && value.trim() === '') ||\n (key === 'input' && typeof value !== 'object')\n if (isEmpty) {\n ctx.addIssue({\n code: 'custom',\n path: ['config', key],\n message: `${activity.activityType} activity requires \"${key}\"`,\n })\n }\n }\n }\n\n if (activity.activityType !== 'WAIT') return\n const config = activity.config || {}\n const hasDuration = config.duration != null && config.duration !== ''\n const hasUntil = config.until != null && config.until !== ''\n if (!hasDuration && !hasUntil) {\n ctx.addIssue({\n code: 'custom',\n path: ['config'],\n message: 'WAIT activity requires \"duration\" or \"until\"',\n })\n return\n }\n if (hasDuration && hasUntil) {\n ctx.addIssue({\n code: 'custom',\n path: ['config'],\n message: 'WAIT activity accepts \"duration\" OR \"until\", not both',\n })\n return\n }\n if (hasDuration && !isValidDurationString(config.duration)) {\n ctx.addIssue({\n code: 'custom',\n path: ['config', 'duration'],\n message: DURATION_ERROR,\n })\n }\n if (hasUntil) {\n if (!isValidIsoDateString(config.until)) {\n ctx.addIssue({\n code: 'custom',\n path: ['config', 'until'],\n message: UNTIL_ERROR,\n })\n } else if (!isFutureIsoDateString(config.until)) {\n ctx.addIssue({\n code: 'custom',\n path: ['config', 'until'],\n message: UNTIL_PAST_ERROR,\n })\n }\n }\n})\n\n// Localized validation message schema (for START step pre-conditions)\nexport const localizedMessageSchema = z.record(z.string(), z.string())\n\n// START step pre-condition schema (with optional localized validation messages)\nexport const startPreConditionSchema = z.object({\n ruleId: z.string().min(1).max(50), // Business rule ID\n required: z.boolean().default(true),\n validationMessage: localizedMessageSchema.optional(), // Optional localized error messages\n})\n\nexport type StartPreCondition = z.infer<typeof startPreConditionSchema>\n\n// Step definition\nexport const workflowStepSchema = z.object({\n stepId: z.string().min(1).max(100).regex(/^[a-z0-9_-]+$/, 'Step ID must contain only lowercase letters, numbers, hyphens, and underscores'),\n stepName: z.string().min(1).max(255),\n stepType: workflowStepTypeSchema,\n description: z.string().max(1000).optional(),\n config: z.record(z.string(), z.any()).optional(),\n userTaskConfig: userTaskConfigSchema.optional(),\n subWorkflowConfig: subWorkflowConfigSchema.optional(),\n signalConfig: z.object({\n signalName: z.string().min(1),\n timeout: z.string().optional(),\n }).optional(),\n activities: z.array(activityDefinitionSchema).optional(),\n timeout: z.string().optional(), // ISO 8601 duration\n retryPolicy: retryPolicySchema.optional(),\n // Pre-conditions for START step (business rules to validate before workflow can be started)\n preConditions: z.array(startPreConditionSchema).optional(),\n}).superRefine((step, ctx) => {\n if (step.stepType !== 'WAIT_FOR_TIMER') return\n const config = step.config || {}\n const hasDuration = config.duration != null && config.duration !== ''\n const hasUntil = config.until != null && config.until !== ''\n if (!hasDuration && !hasUntil) {\n ctx.addIssue({\n code: 'custom',\n path: ['config'],\n message: 'WAIT_FOR_TIMER step requires \"duration\" or \"until\"',\n })\n return\n }\n if (hasDuration && hasUntil) {\n ctx.addIssue({\n code: 'custom',\n path: ['config'],\n message: 'WAIT_FOR_TIMER step accepts \"duration\" OR \"until\", not both',\n })\n return\n }\n if (hasDuration && !isValidDurationString(config.duration)) {\n ctx.addIssue({\n code: 'custom',\n path: ['config', 'duration'],\n message: DURATION_ERROR,\n })\n }\n if (hasUntil) {\n if (!isValidIsoDateString(config.until)) {\n ctx.addIssue({\n code: 'custom',\n path: ['config', 'until'],\n message: UNTIL_ERROR,\n })\n } else if (!isFutureIsoDateString(config.until)) {\n ctx.addIssue({\n code: 'custom',\n path: ['config', 'until'],\n message: UNTIL_PAST_ERROR,\n })\n }\n }\n})\n\n// Transition condition (reference to business rule)\nexport const transitionConditionSchema = z.object({\n ruleId: z.string().min(1).max(50), // Business rule ID\n required: z.boolean().default(true),\n})\n\n// Transition definition\nexport const workflowTransitionSchema = z.object({\n transitionId: z.string().min(1).max(100).regex(/^[a-z0-9_-]+$/, 'Transition ID must contain only lowercase letters, numbers, hyphens, and underscores'),\n fromStepId: z.string().min(1).max(100),\n toStepId: z.string().min(1).max(100),\n transitionName: z.string().max(255).optional(),\n trigger: transitionTriggerSchema,\n preConditions: z.array(transitionConditionSchema).optional(),\n postConditions: z.array(transitionConditionSchema).optional(),\n activities: z.array(activityDefinitionSchema).optional(), // Activities to execute during transition\n continueOnActivityFailure: z.boolean().default(false).optional(), // If true, transition continues even when activities fail\n priority: z.number().int().min(0).max(9999).default(0),\n})\n\n// Workflow definition trigger schema (embedded in definition)\n// Note: Uses forward reference pattern since eventPatternSchema and eventTriggerConfigSchema are defined later\nexport const workflowDefinitionTriggerSchema = z.object({\n triggerId: z.string().min(1).max(100).regex(/^[a-z0-9_-]+$/, 'Trigger ID must contain only lowercase letters, numbers, hyphens, and underscores'),\n name: z.string().min(1).max(255),\n description: z.string().max(2000).optional().nullable(),\n eventPattern: z.string()\n .min(1, 'Event pattern is required')\n .max(255, 'Event pattern must be at most 255 characters')\n .regex(\n /^(\\*|[a-z0-9_]+(\\.[a-z0-9_*]+)*)$/i,\n 'Event pattern must be \"*\" or a dot-separated pattern with optional wildcards (e.g., \"customers.people.created\", \"sales.orders.*\")'\n ),\n config: z.object({\n filterConditions: z.array(z.object({\n field: z.string().min(1).max(255),\n operator: z.enum(['eq', 'neq', 'gt', 'gte', 'lt', 'lte', 'contains', 'startsWith', 'endsWith', 'in', 'notIn', 'exists', 'notExists', 'regex']),\n value: z.any(),\n })).max(20).optional(),\n contextMapping: z.array(z.object({\n targetKey: z.string().min(1).max(100),\n sourceExpression: z.string().min(1).max(255),\n defaultValue: z.any().optional(),\n })).max(50).optional(),\n debounceMs: z.number().int().min(0).max(3600000).optional(),\n maxConcurrentInstances: z.number().int().min(1).max(1000).optional(),\n }).optional().nullable(),\n enabled: z.boolean().default(true),\n priority: z.number().int().min(0).max(9999).default(0),\n})\nexport type WorkflowDefinitionTrigger = z.infer<typeof workflowDefinitionTriggerSchema>\n\n// ============================================================================\n// PARALLEL_FORK / PARALLEL_JOIN definition validation\n// ============================================================================\n\n// Error codes surfaced by FORK/JOIN definition validation. Stable identifiers\n// so the visual editor and tests can match on them.\nexport type ForkJoinValidationCode =\n | 'MISSING_JOIN_STEP_ID'\n | 'JOIN_STEP_NOT_FOUND'\n | 'JOIN_STEP_WRONG_TYPE'\n | 'MISSING_FORK_STEP_ID'\n | 'FORK_JOIN_MISMATCH'\n | 'FORK_TOO_FEW_BRANCHES'\n | 'JOIN_TOO_FEW_INCOMING'\n | 'DUPLICATE_BRANCH_KEY'\n | 'NESTED_FORK_NOT_SUPPORTED'\n | 'NO_CONVERGENCE_TO_JOIN'\n | 'FORK_JOIN_CYCLE'\n | 'UNPAIRED_JOIN'\n\nexport interface ForkJoinValidationIssue {\n code: ForkJoinValidationCode\n message: string\n stepId?: string\n}\n\ninterface ForkJoinStepLike {\n stepId: string\n stepType: string\n config?: Record<string, unknown> | null\n}\n\ninterface ForkJoinTransitionLike {\n transitionId: string\n fromStepId: string\n toStepId: string\n trigger: string\n}\n\ninterface ForkJoinDefinitionLike {\n steps: ForkJoinStepLike[]\n transitions: ForkJoinTransitionLike[]\n}\n\n/**\n * Validates PARALLEL_FORK / PARALLEL_JOIN structure of a workflow definition.\n * Pure and side-effect-free so it can be unit tested and reused by the editor.\n *\n * Rules (this iteration \u2014 wait-all, no nesting):\n * 1. Every FORK declares config.joinStepId pointing at an existing PARALLEL_JOIN.\n * 2. The paired JOIN back-references the fork via config.forkStepId.\n * 3. A FORK has >= 2 outgoing `auto` transitions (branch keys unique); a JOIN has >= 2 incoming.\n * 4. Every path from a FORK converges to its JOIN \u2014 no END inside a branch, no dead ends,\n * no path bypassing the JOIN, no path to a different JOIN.\n * 5. No nesting: no FORK appears on a path between a FORK and its JOIN.\n * 6. No cycles back to the FORK within its branch region.\n * 7. Every PARALLEL_JOIN is paired with exactly one FORK.\n */\nexport function validateParallelForkJoin(definition: ForkJoinDefinitionLike): ForkJoinValidationIssue[] {\n const issues: ForkJoinValidationIssue[] = []\n const steps = definition.steps ?? []\n const transitions = definition.transitions ?? []\n\n const stepById = new Map<string, ForkJoinStepLike>()\n for (const step of steps) stepById.set(step.stepId, step)\n\n const outgoingByStep = new Map<string, ForkJoinTransitionLike[]>()\n const incomingCountByStep = new Map<string, number>()\n for (const transition of transitions) {\n const list = outgoingByStep.get(transition.fromStepId) ?? []\n list.push(transition)\n outgoingByStep.set(transition.fromStepId, list)\n incomingCountByStep.set(transition.toStepId, (incomingCountByStep.get(transition.toStepId) ?? 0) + 1)\n }\n\n const forkSteps = steps.filter((step) => step.stepType === 'PARALLEL_FORK')\n const joinSteps = steps.filter((step) => step.stepType === 'PARALLEL_JOIN')\n\n // Track which JOIN steps are paired with a FORK so we can flag orphan joins.\n const pairedJoinIds = new Set<string>()\n\n for (const fork of forkSteps) {\n const joinStepId = (fork.config?.joinStepId as string | undefined) ?? undefined\n if (!joinStepId) {\n issues.push({ code: 'MISSING_JOIN_STEP_ID', stepId: fork.stepId, message: `PARALLEL_FORK \"${fork.stepId}\" must declare config.joinStepId` })\n continue\n }\n const joinStep = stepById.get(joinStepId)\n if (!joinStep) {\n issues.push({ code: 'JOIN_STEP_NOT_FOUND', stepId: fork.stepId, message: `PARALLEL_FORK \"${fork.stepId}\" references missing join step \"${joinStepId}\"` })\n continue\n }\n if (joinStep.stepType !== 'PARALLEL_JOIN') {\n issues.push({ code: 'JOIN_STEP_WRONG_TYPE', stepId: fork.stepId, message: `Step \"${joinStepId}\" referenced by fork \"${fork.stepId}\" is not a PARALLEL_JOIN` })\n continue\n }\n\n pairedJoinIds.add(joinStepId)\n\n const backForkStepId = (joinStep.config?.forkStepId as string | undefined) ?? undefined\n if (!backForkStepId) {\n issues.push({ code: 'MISSING_FORK_STEP_ID', stepId: joinStepId, message: `PARALLEL_JOIN \"${joinStepId}\" must declare config.forkStepId` })\n } else if (backForkStepId !== fork.stepId) {\n issues.push({ code: 'FORK_JOIN_MISMATCH', stepId: joinStepId, message: `PARALLEL_JOIN \"${joinStepId}\" back-reference forkStepId \"${backForkStepId}\" does not match fork \"${fork.stepId}\"` })\n }\n\n const autoBranches = (outgoingByStep.get(fork.stepId) ?? []).filter((transition) => transition.trigger === 'auto')\n if (autoBranches.length < 2) {\n issues.push({ code: 'FORK_TOO_FEW_BRANCHES', stepId: fork.stepId, message: `PARALLEL_FORK \"${fork.stepId}\" must have at least 2 outgoing auto transitions (found ${autoBranches.length})` })\n }\n const branchKeys = new Set<string>()\n for (const branch of autoBranches) {\n if (branchKeys.has(branch.transitionId)) {\n issues.push({ code: 'DUPLICATE_BRANCH_KEY', stepId: fork.stepId, message: `PARALLEL_FORK \"${fork.stepId}\" has duplicate branch key \"${branch.transitionId}\"` })\n }\n branchKeys.add(branch.transitionId)\n }\n\n if ((incomingCountByStep.get(joinStepId) ?? 0) < 2) {\n issues.push({ code: 'JOIN_TOO_FEW_INCOMING', stepId: joinStepId, message: `PARALLEL_JOIN \"${joinStepId}\" must have at least 2 incoming transitions` })\n }\n\n // Convergence + no-nesting + no-cycle traversal over the branch region.\n const fullyExplored = new Set<string>()\n const onStack = new Set<string>()\n let reportedNesting = false\n let reportedNoConvergence = false\n let reportedCycle = false\n\n const visit = (stepId: string): void => {\n if (stepId === joinStepId) return // converged\n if (stepId === fork.stepId) {\n if (!reportedCycle) {\n issues.push({ code: 'FORK_JOIN_CYCLE', stepId: fork.stepId, message: `A branch of fork \"${fork.stepId}\" loops back to the fork before reaching join \"${joinStepId}\"` })\n reportedCycle = true\n }\n return\n }\n const step = stepById.get(stepId)\n if (!step) {\n if (!reportedNoConvergence) {\n issues.push({ code: 'NO_CONVERGENCE_TO_JOIN', stepId: fork.stepId, message: `A branch of fork \"${fork.stepId}\" reaches missing step \"${stepId}\" instead of join \"${joinStepId}\"` })\n reportedNoConvergence = true\n }\n return\n }\n if (step.stepType === 'END') {\n if (!reportedNoConvergence) {\n issues.push({ code: 'NO_CONVERGENCE_TO_JOIN', stepId: fork.stepId, message: `A branch of fork \"${fork.stepId}\" reaches an END step before join \"${joinStepId}\"` })\n reportedNoConvergence = true\n }\n return\n }\n if (step.stepType === 'PARALLEL_FORK') {\n if (!reportedNesting) {\n issues.push({ code: 'NESTED_FORK_NOT_SUPPORTED', stepId: fork.stepId, message: `Nested PARALLEL_FORK \"${stepId}\" inside fork \"${fork.stepId}\" is not supported` })\n reportedNesting = true\n }\n return\n }\n if (step.stepType === 'PARALLEL_JOIN') {\n // Reached a join that is not this fork's join \u2192 it does not converge correctly.\n if (!reportedNoConvergence) {\n issues.push({ code: 'NO_CONVERGENCE_TO_JOIN', stepId: fork.stepId, message: `A branch of fork \"${fork.stepId}\" reaches join \"${stepId}\" instead of its own join \"${joinStepId}\"` })\n reportedNoConvergence = true\n }\n return\n }\n if (onStack.has(stepId)) {\n if (!reportedCycle) {\n issues.push({ code: 'FORK_JOIN_CYCLE', stepId: fork.stepId, message: `A branch of fork \"${fork.stepId}\" contains a cycle at step \"${stepId}\"` })\n reportedCycle = true\n }\n return\n }\n if (fullyExplored.has(stepId)) return\n\n const outgoing = outgoingByStep.get(stepId) ?? []\n if (outgoing.length === 0) {\n if (!reportedNoConvergence) {\n issues.push({ code: 'NO_CONVERGENCE_TO_JOIN', stepId: fork.stepId, message: `A branch of fork \"${fork.stepId}\" dead-ends at step \"${stepId}\" without reaching join \"${joinStepId}\"` })\n reportedNoConvergence = true\n }\n return\n }\n onStack.add(stepId)\n for (const transition of outgoing) visit(transition.toStepId)\n onStack.delete(stepId)\n fullyExplored.add(stepId)\n }\n\n for (const branch of autoBranches) visit(branch.toStepId)\n }\n\n // Any PARALLEL_JOIN not paired with a fork is an orphan.\n for (const join of joinSteps) {\n if (!pairedJoinIds.has(join.stepId)) {\n issues.push({ code: 'UNPAIRED_JOIN', stepId: join.stepId, message: `PARALLEL_JOIN \"${join.stepId}\" is not paired with any PARALLEL_FORK` })\n }\n }\n\n return issues\n}\n\n// Workflow definition data (JSONB structure)\nexport const workflowDefinitionDataSchema = z.object({\n steps: z.array(workflowStepSchema).min(2, 'Workflow must have at least START and END steps'),\n transitions: z.array(workflowTransitionSchema).min(1, 'Workflow must have at least one transition'),\n triggers: z.array(workflowDefinitionTriggerSchema).optional(), // Event triggers for automatic workflow start\n queries: z.array(z.any()).optional(), // For Phase 7\n signals: z.array(z.any()).optional(), // For Phase 9\n timers: z.array(z.any()).optional(), // For Phase 9\n}).superRefine((definition, ctx) => {\n for (const issue of validateParallelForkJoin(definition as ForkJoinDefinitionLike)) {\n ctx.addIssue({\n code: 'custom',\n path: ['steps'],\n message: `[${issue.code}] ${issue.message}`,\n })\n }\n})\n\n// Workflow metadata\nexport const workflowMetadataSchema = z.object({\n tags: z.array(z.string().max(50)).optional(),\n category: z.string().max(100).optional(),\n icon: z.string().max(100).optional(),\n})\n\n// Date preprocessing helper\nconst dateOrNull = z.preprocess((value) => {\n if (value === undefined || value === null || value === '') return null\n const date = value instanceof Date ? value : new Date(String(value))\n return Number.isNaN(date.getTime()) ? null : date\n}, z.date().nullable())\n\n// ============================================================================\n// WorkflowDefinition Schemas\n// ============================================================================\n\n// Full schema for database entities (includes tenant fields)\nexport const createWorkflowDefinitionSchema = z.object({\n workflowId: z.string().min(1).max(100).regex(/^[a-z0-9._-]+$/, 'Workflow ID must contain only lowercase letters, numbers, dots, hyphens, and underscores'),\n workflowName: z.string().min(1).max(255),\n description: z.string().max(2000).optional().nullable(),\n version: z.number().int().positive().default(1),\n definition: workflowDefinitionDataSchema,\n metadata: workflowMetadataSchema.optional().nullable(),\n enabled: z.boolean().default(true),\n effectiveFrom: dateOrNull.optional(),\n effectiveTo: dateOrNull.optional(),\n tenantId: uuid,\n organizationId: uuid,\n createdBy: z.string().max(255).optional().nullable(),\n})\n\nexport type CreateWorkflowDefinitionInput = z.infer<typeof createWorkflowDefinitionSchema>\n\n// API input schema (omits tenant fields - injected from auth context)\nexport const createWorkflowDefinitionInputSchema = z.object({\n workflowId: z.string().min(1).max(100).regex(/^[a-z0-9._-]+$/, 'Workflow ID must contain only lowercase letters, numbers, dots, hyphens, and underscores'),\n workflowName: z.string().min(1).max(255),\n description: z.string().max(2000).optional().nullable(),\n version: z.number().int().positive().default(1),\n definition: workflowDefinitionDataSchema,\n metadata: workflowMetadataSchema.optional().nullable(),\n enabled: z.boolean().default(true).optional(),\n})\n\nexport type CreateWorkflowDefinitionApiInput = z.infer<typeof createWorkflowDefinitionInputSchema>\n\nexport const updateWorkflowDefinitionSchema = createWorkflowDefinitionSchema.partial().extend({\n id: uuid,\n})\n\nexport type UpdateWorkflowDefinitionInput = z.infer<typeof updateWorkflowDefinitionSchema>\n\n// API update schema (omits tenant fields and allows partial updates)\n// Accepts the same shape as the create form so the edit page can submit a\n// full payload without triggering \"Unrecognized keys\" validation errors.\n// workflowId is accepted but ignored by the route handler (it identifies the\n// row); version is applied when supplied so the form can bump it explicitly.\nexport const updateWorkflowDefinitionInputSchema = z.object({\n workflowId: z.string().min(1).max(100).optional(),\n workflowName: z.string().min(1).max(255).optional(),\n description: z.string().max(2000).optional().nullable(),\n version: z.number().int().positive().optional(),\n definition: workflowDefinitionDataSchema.optional(),\n metadata: workflowMetadataSchema.optional().nullable(),\n enabled: z.boolean().optional(),\n effectiveFrom: dateOrNull.optional(),\n effectiveTo: dateOrNull.optional(),\n}).strict()\n\nexport type UpdateWorkflowDefinitionApiInput = z.infer<typeof updateWorkflowDefinitionInputSchema>\n\nexport const workflowDefinitionFilterSchema = z.object({\n workflowId: z.string().optional(),\n workflowName: z.string().optional(),\n enabled: z.boolean().optional(),\n tenantId: uuid.optional(),\n organizationId: uuid.optional(),\n})\n\nexport type WorkflowDefinitionFilter = z.infer<typeof workflowDefinitionFilterSchema>\n\n// ============================================================================\n// WorkflowInstance Schemas\n// ============================================================================\n\nexport const workflowInstanceMetadataSchema = z.object({\n entityType: z.string().max(100).optional(),\n entityId: z.string().max(255).optional(),\n initiatedBy: z.string().max(255).optional(),\n labels: z.record(z.string(), z.string()).optional(),\n})\n\nexport const createWorkflowInstanceSchema = z.object({\n definitionId: uuid,\n workflowId: z.string().min(1).max(100),\n version: z.number().int().positive(),\n status: workflowInstanceStatusSchema,\n currentStepId: z.string().min(1).max(100),\n context: z.record(z.string(), z.any()),\n correlationKey: z.string().max(255).optional().nullable(),\n metadata: workflowInstanceMetadataSchema.optional().nullable(),\n startedAt: z.coerce.date(),\n completedAt: dateOrNull.optional(),\n pausedAt: dateOrNull.optional(),\n cancelledAt: dateOrNull.optional(),\n errorMessage: z.string().max(5000).optional().nullable(),\n errorDetails: z.any().optional().nullable(),\n retryCount: z.number().int().min(0).default(0),\n tenantId: uuid,\n organizationId: uuid,\n})\n\nexport type CreateWorkflowInstanceInput = z.infer<typeof createWorkflowInstanceSchema>\n\nexport const updateWorkflowInstanceSchema = createWorkflowInstanceSchema.partial().extend({\n id: uuid,\n})\n\nexport type UpdateWorkflowInstanceInput = z.infer<typeof updateWorkflowInstanceSchema>\n\nexport const workflowInstanceFilterSchema = z.object({\n definitionId: uuid.optional(),\n workflowId: z.string().optional(),\n status: workflowInstanceStatusSchema.optional(),\n correlationKey: z.string().optional(),\n currentStepId: z.string().optional(),\n tenantId: uuid.optional(),\n organizationId: uuid.optional(),\n})\n\nexport type WorkflowInstanceFilter = z.infer<typeof workflowInstanceFilterSchema>\n\n// ============================================================================\n// StepInstance Schemas\n// ============================================================================\n\nexport const createStepInstanceSchema = z.object({\n workflowInstanceId: uuid,\n stepId: z.string().min(1).max(100),\n stepName: z.string().min(1).max(255),\n stepType: z.string().min(1).max(50),\n status: stepInstanceStatusSchema,\n inputData: z.any().optional().nullable(),\n outputData: z.any().optional().nullable(),\n errorData: z.any().optional().nullable(),\n enteredAt: dateOrNull.optional(),\n exitedAt: dateOrNull.optional(),\n executionTimeMs: z.number().int().min(0).optional().nullable(),\n retryCount: z.number().int().min(0).default(0),\n tenantId: uuid,\n organizationId: uuid,\n})\n\nexport type CreateStepInstanceInput = z.infer<typeof createStepInstanceSchema>\n\nexport const updateStepInstanceSchema = createStepInstanceSchema.partial().extend({\n id: uuid,\n})\n\nexport type UpdateStepInstanceInput = z.infer<typeof updateStepInstanceSchema>\n\nexport const stepInstanceFilterSchema = z.object({\n workflowInstanceId: uuid.optional(),\n stepId: z.string().optional(),\n status: stepInstanceStatusSchema.optional(),\n tenantId: uuid.optional(),\n organizationId: uuid.optional(),\n})\n\nexport type StepInstanceFilter = z.infer<typeof stepInstanceFilterSchema>\n\n// ============================================================================\n// UserTask Schemas\n// ============================================================================\n\nexport const createUserTaskSchema = z.object({\n workflowInstanceId: uuid,\n stepInstanceId: uuid,\n taskName: z.string().min(1).max(255),\n description: z.string().max(2000).optional().nullable(),\n status: userTaskStatusSchema,\n formSchema: z.any().optional().nullable(),\n formData: z.any().optional().nullable(),\n assignedTo: z.string().max(255).optional().nullable(),\n assignedToRoles: z.array(z.string().max(100)).optional().nullable(),\n claimedBy: z.string().max(255).optional().nullable(),\n claimedAt: dateOrNull.optional(),\n dueDate: dateOrNull.optional(),\n escalatedAt: dateOrNull.optional(),\n escalatedTo: z.string().max(255).optional().nullable(),\n completedBy: z.string().max(255).optional().nullable(),\n completedAt: dateOrNull.optional(),\n comments: z.string().max(5000).optional().nullable(),\n tenantId: uuid,\n organizationId: uuid,\n})\n\nexport type CreateUserTaskInput = z.infer<typeof createUserTaskSchema>\n\nexport const updateUserTaskSchema = createUserTaskSchema.partial().extend({\n id: uuid,\n})\n\nexport type UpdateUserTaskInput = z.infer<typeof updateUserTaskSchema>\n\nexport const userTaskFilterSchema = z.object({\n workflowInstanceId: uuid.optional(),\n status: userTaskStatusSchema.optional(),\n assignedTo: z.string().optional(),\n claimedBy: z.string().optional(),\n tenantId: uuid.optional(),\n organizationId: uuid.optional(),\n})\n\nexport type UserTaskFilter = z.infer<typeof userTaskFilterSchema>\n\n// ============================================================================\n// WorkflowEvent Schemas\n// ============================================================================\n\nexport const createWorkflowEventSchema = z.object({\n workflowInstanceId: uuid,\n stepInstanceId: uuid.optional().nullable(),\n eventType: z.string().min(1).max(50),\n eventData: z.any(),\n occurredAt: z.coerce.date().optional(),\n userId: z.string().max(255).optional().nullable(),\n tenantId: uuid,\n organizationId: uuid,\n})\n\nexport type CreateWorkflowEventInput = z.infer<typeof createWorkflowEventSchema>\n\nexport const workflowEventFilterSchema = z.object({\n workflowInstanceId: uuid.optional(),\n stepInstanceId: uuid.optional(),\n eventType: z.string().optional(),\n tenantId: uuid.optional(),\n organizationId: uuid.optional(),\n occurredAtFrom: z.date().optional(),\n occurredAtTo: z.date().optional(),\n})\n\nexport type WorkflowEventFilter = z.infer<typeof workflowEventFilterSchema>\n\n// ============================================================================\n// Workflow Execution Context Schema\n// ============================================================================\n\nexport const workflowExecutionContextSchema = z.looseObject({\n workflowId: z.string().min(1),\n version: z.number().int().positive().optional(),\n correlationKey: z.string().optional(),\n context: z.record(z.string(), z.any()).optional(),\n metadata: workflowInstanceMetadataSchema.optional(),\n tenantId: z.uuid('tenantId must be a valid UUID'),\n organizationId: z.uuid('organizationId must be a valid UUID'),\n initiatedBy: z.string().optional(),\n})\n\nexport type WorkflowExecutionContextInput = z.infer<typeof workflowExecutionContextSchema>\n\n// API input schema (omits tenant fields - injected from auth context)\nexport const startWorkflowInputSchema = z.object({\n workflowId: z.string().min(1),\n version: z.number().int().positive().optional(),\n correlationKey: z.string().optional(),\n initialContext: z.record(z.string(), z.any()).optional(),\n metadata: workflowInstanceMetadataSchema.optional(),\n})\n\nexport type StartWorkflowApiInput = z.infer<typeof startWorkflowInputSchema>\n\n// ============================================================================\n// WorkflowEventTrigger Schemas\n// ============================================================================\n\nexport const triggerFilterOperatorSchema = z.enum([\n 'eq',\n 'neq',\n 'gt',\n 'gte',\n 'lt',\n 'lte',\n 'contains',\n 'startsWith',\n 'endsWith',\n 'in',\n 'notIn',\n 'exists',\n 'notExists',\n 'regex',\n])\nexport type TriggerFilterOperator = z.infer<typeof triggerFilterOperatorSchema>\n\nexport const triggerFilterConditionSchema = z.object({\n field: z.string().min(1).max(255, 'Field path must be at most 255 characters'),\n operator: triggerFilterOperatorSchema,\n value: z.any(),\n})\nexport type TriggerFilterCondition = z.infer<typeof triggerFilterConditionSchema>\n\nexport const triggerContextMappingSchema = z.object({\n targetKey: z.string().min(1).max(100, 'Target key must be at most 100 characters'),\n sourceExpression: z.string().min(1).max(255, 'Source expression must be at most 255 characters'),\n defaultValue: z.any().optional(),\n})\nexport type TriggerContextMapping = z.infer<typeof triggerContextMappingSchema>\n\nexport const eventTriggerConfigSchema = z.object({\n filterConditions: z.array(triggerFilterConditionSchema).max(20, 'Maximum 20 filter conditions allowed').optional(),\n contextMapping: z.array(triggerContextMappingSchema).max(50, 'Maximum 50 context mappings allowed').optional(),\n debounceMs: z.number().int().min(0).max(3600000, 'Debounce cannot exceed 1 hour').optional(),\n maxConcurrentInstances: z.number().int().min(1).max(1000, 'Max concurrent instances must be between 1 and 1000').optional(),\n})\nexport type EventTriggerConfig = z.infer<typeof eventTriggerConfigSchema>\n\nexport const eventPatternSchema = z.string()\n .min(1, 'Event pattern is required')\n .max(255, 'Event pattern must be at most 255 characters')\n .regex(\n /^(\\*|[a-z0-9_]+(\\.[a-z0-9_*]+)*)$/i,\n 'Event pattern must be \"*\" or a dot-separated pattern with optional wildcards (e.g., \"customers.people.created\", \"sales.orders.*\")'\n )\n\nexport const createEventTriggerSchema = z.object({\n name: z.string().min(1).max(255),\n description: z.string().max(2000).optional().nullable(),\n workflowDefinitionId: uuid,\n eventPattern: eventPatternSchema,\n config: eventTriggerConfigSchema.optional().nullable(),\n enabled: z.boolean().default(true),\n priority: z.number().int().min(0).max(9999).default(0),\n tenantId: uuid,\n organizationId: uuid,\n createdBy: z.string().max(255).optional().nullable(),\n})\nexport type CreateEventTriggerInput = z.infer<typeof createEventTriggerSchema>\n\n// API input schema (omits tenant fields - injected from auth context)\nexport const createEventTriggerInputSchema = z.object({\n name: z.string().min(1).max(255),\n description: z.string().max(2000).optional().nullable(),\n workflowDefinitionId: uuid,\n eventPattern: eventPatternSchema,\n config: eventTriggerConfigSchema.optional().nullable(),\n enabled: z.boolean().default(true).optional(),\n priority: z.number().int().min(0).max(9999).default(0).optional(),\n})\nexport type CreateEventTriggerApiInput = z.infer<typeof createEventTriggerInputSchema>\n\nexport const updateEventTriggerSchema = createEventTriggerSchema.partial().extend({\n id: uuid,\n})\nexport type UpdateEventTriggerInput = z.infer<typeof updateEventTriggerSchema>\n\n// API update schema (omits tenant fields and allows partial updates)\nexport const updateEventTriggerInputSchema = z.object({\n name: z.string().min(1).max(255).optional(),\n description: z.string().max(2000).optional().nullable(),\n workflowDefinitionId: uuid.optional(),\n eventPattern: eventPatternSchema.optional(),\n config: eventTriggerConfigSchema.optional().nullable(),\n enabled: z.boolean().optional(),\n priority: z.number().int().min(0).max(9999).optional(),\n}).strict()\nexport type UpdateEventTriggerApiInput = z.infer<typeof updateEventTriggerInputSchema>\n\nexport const eventTriggerFilterSchema = z.object({\n name: z.string().optional(),\n workflowDefinitionId: uuid.optional(),\n eventPattern: z.string().optional(),\n enabled: z.boolean().optional(),\n tenantId: uuid.optional(),\n organizationId: uuid.optional(),\n})\nexport type EventTriggerFilter = z.infer<typeof eventTriggerFilterSchema>\n"],
5
+ "mappings": "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",
6
+ "names": ["config"]
7
7
  }