@open-mercato/core 0.4.2-canary-ed15f2e753 → 0.4.2-canary-f075c3eb92

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 (241) hide show
  1. package/dist/generated/entities.ids.generated.js +0 -1
  2. package/dist/generated/entities.ids.generated.js.map +2 -2
  3. package/dist/generated/entity-fields-registry.js +0 -2
  4. package/dist/generated/entity-fields-registry.js.map +2 -2
  5. package/dist/modules/api_keys/setup.js +11 -0
  6. package/dist/modules/api_keys/setup.js.map +7 -0
  7. package/dist/modules/attachments/components/AttachmentLibrary.js +1 -1
  8. package/dist/modules/attachments/components/AttachmentLibrary.js.map +2 -2
  9. package/dist/modules/attachments/lib/assignmentDetails.js +31 -17
  10. package/dist/modules/attachments/lib/assignmentDetails.js.map +2 -2
  11. package/dist/modules/attachments/lib/partitions.js +3 -3
  12. package/dist/modules/attachments/lib/partitions.js.map +2 -2
  13. package/dist/modules/attachments/setup.js +11 -0
  14. package/dist/modules/attachments/setup.js.map +7 -0
  15. package/dist/modules/audit_logs/setup.js +12 -0
  16. package/dist/modules/audit_logs/setup.js.map +7 -0
  17. package/dist/modules/auth/lib/setup-app.js +29 -159
  18. package/dist/modules/auth/lib/setup-app.js.map +2 -2
  19. package/dist/modules/auth/setup.js +11 -0
  20. package/dist/modules/auth/setup.js.map +7 -0
  21. package/dist/modules/business_rules/data/validators.js +0 -34
  22. package/dist/modules/business_rules/data/validators.js.map +2 -2
  23. package/dist/modules/business_rules/index.js +1 -21
  24. package/dist/modules/business_rules/index.js.map +2 -2
  25. package/dist/modules/business_rules/lib/rule-engine.js +1 -182
  26. package/dist/modules/business_rules/lib/rule-engine.js.map +2 -2
  27. package/dist/modules/business_rules/setup.js +11 -0
  28. package/dist/modules/business_rules/setup.js.map +7 -0
  29. package/dist/modules/catalog/setup.js +22 -0
  30. package/dist/modules/catalog/setup.js.map +7 -0
  31. package/dist/modules/configs/lib/upgrade-actions.js +65 -15
  32. package/dist/modules/configs/lib/upgrade-actions.js.map +2 -2
  33. package/dist/modules/configs/setup.js +16 -0
  34. package/dist/modules/configs/setup.js.map +7 -0
  35. package/dist/modules/currencies/setup.js +16 -0
  36. package/dist/modules/currencies/setup.js.map +7 -0
  37. package/dist/modules/customers/setup.js +36 -0
  38. package/dist/modules/customers/setup.js.map +7 -0
  39. package/dist/modules/dashboards/setup.js +12 -0
  40. package/dist/modules/dashboards/setup.js.map +7 -0
  41. package/dist/modules/dictionaries/setup.js +12 -0
  42. package/dist/modules/dictionaries/setup.js.map +7 -0
  43. package/dist/modules/directory/setup.js +12 -0
  44. package/dist/modules/directory/setup.js.map +7 -0
  45. package/dist/modules/entities/setup.js +11 -0
  46. package/dist/modules/entities/setup.js.map +7 -0
  47. package/dist/modules/feature_toggles/setup.js +11 -0
  48. package/dist/modules/feature_toggles/setup.js.map +7 -0
  49. package/dist/modules/perspectives/setup.js +12 -0
  50. package/dist/modules/perspectives/setup.js.map +7 -0
  51. package/dist/modules/planner/setup.js +21 -0
  52. package/dist/modules/planner/setup.js.map +7 -0
  53. package/dist/modules/query_index/setup.js +11 -0
  54. package/dist/modules/query_index/setup.js.map +7 -0
  55. package/dist/modules/resources/setup.js +21 -0
  56. package/dist/modules/resources/setup.js.map +7 -0
  57. package/dist/modules/sales/acl.js +0 -1
  58. package/dist/modules/sales/acl.js.map +2 -2
  59. package/dist/modules/sales/backend/sales/documents/[id]/page.js +0 -12
  60. package/dist/modules/sales/backend/sales/documents/[id]/page.js.map +2 -2
  61. package/dist/modules/sales/commands/documents.js +0 -62
  62. package/dist/modules/sales/commands/documents.js.map +2 -2
  63. package/dist/modules/sales/lib/dictionaries.js +0 -3
  64. package/dist/modules/sales/lib/dictionaries.js.map +2 -2
  65. package/dist/modules/sales/setup.js +99 -0
  66. package/dist/modules/sales/setup.js.map +7 -0
  67. package/dist/modules/staff/setup.js +27 -0
  68. package/dist/modules/staff/setup.js.map +7 -0
  69. package/dist/modules/workflows/acl.js +0 -2
  70. package/dist/modules/workflows/acl.js.map +2 -2
  71. package/dist/modules/workflows/api/instances/route.js +6 -18
  72. package/dist/modules/workflows/api/instances/route.js.map +2 -2
  73. package/dist/modules/workflows/api/tasks/route.js +1 -6
  74. package/dist/modules/workflows/api/tasks/route.js.map +2 -2
  75. package/dist/modules/workflows/backend/definitions/[id]/page.js +1 -9
  76. package/dist/modules/workflows/backend/definitions/[id]/page.js.map +2 -2
  77. package/dist/modules/workflows/backend/definitions/[id]/page.meta.js +1 -1
  78. package/dist/modules/workflows/backend/definitions/[id]/page.meta.js.map +2 -2
  79. package/dist/modules/workflows/backend/definitions/create/page.js +15 -24
  80. package/dist/modules/workflows/backend/definitions/create/page.js.map +2 -2
  81. package/dist/modules/workflows/backend/definitions/create/page.meta.js +1 -1
  82. package/dist/modules/workflows/backend/definitions/create/page.meta.js.map +2 -2
  83. package/dist/modules/workflows/backend/definitions/visual-editor/page.js +132 -150
  84. package/dist/modules/workflows/backend/definitions/visual-editor/page.js.map +2 -2
  85. package/dist/modules/workflows/backend/definitions/visual-editor/page.meta.js +1 -1
  86. package/dist/modules/workflows/backend/definitions/visual-editor/page.meta.js.map +2 -2
  87. package/dist/modules/workflows/backend/events/[id]/page.js +1 -1
  88. package/dist/modules/workflows/backend/events/[id]/page.js.map +2 -2
  89. package/dist/modules/workflows/backend/events/[id]/page.meta.js +2 -2
  90. package/dist/modules/workflows/backend/events/[id]/page.meta.js.map +2 -2
  91. package/dist/modules/workflows/backend/instances/[id]/page.meta.js +2 -2
  92. package/dist/modules/workflows/backend/instances/[id]/page.meta.js.map +2 -2
  93. package/dist/modules/workflows/backend/tasks/[id]/page.js +1 -1
  94. package/dist/modules/workflows/backend/tasks/[id]/page.js.map +2 -2
  95. package/dist/modules/workflows/backend/tasks/[id]/page.meta.js +2 -2
  96. package/dist/modules/workflows/backend/tasks/[id]/page.meta.js.map +2 -2
  97. package/dist/modules/workflows/backend/tasks/page.js +6 -5
  98. package/dist/modules/workflows/backend/tasks/page.js.map +2 -2
  99. package/dist/modules/workflows/cli.js +3 -81
  100. package/dist/modules/workflows/cli.js.map +3 -3
  101. package/dist/modules/workflows/data/entities.js +1 -64
  102. package/dist/modules/workflows/data/entities.js.map +2 -2
  103. package/dist/modules/workflows/data/validators.js +0 -115
  104. package/dist/modules/workflows/data/validators.js.map +2 -2
  105. package/dist/modules/workflows/examples/checkout-demo-definition.json +5 -1
  106. package/dist/modules/workflows/lib/activity-executor.js +13 -75
  107. package/dist/modules/workflows/lib/activity-executor.js.map +2 -2
  108. package/dist/modules/workflows/lib/graph-utils.js +2 -71
  109. package/dist/modules/workflows/lib/graph-utils.js.map +2 -2
  110. package/dist/modules/workflows/lib/seeds.js +7 -36
  111. package/dist/modules/workflows/lib/seeds.js.map +2 -2
  112. package/dist/modules/workflows/lib/start-validator.js +23 -33
  113. package/dist/modules/workflows/lib/start-validator.js.map +2 -2
  114. package/dist/modules/workflows/lib/transition-handler.js +45 -157
  115. package/dist/modules/workflows/lib/transition-handler.js.map +3 -3
  116. package/dist/modules/workflows/migrations/Migration20251207131955.js +76 -72
  117. package/dist/modules/workflows/migrations/Migration20251207131955.js.map +2 -2
  118. package/dist/modules/workflows/setup.js +16 -0
  119. package/dist/modules/workflows/setup.js.map +7 -0
  120. package/generated/entities.ids.generated.ts +0 -1
  121. package/generated/entity-fields-registry.ts +0 -2
  122. package/package.json +2 -2
  123. package/src/__tests__/module-decoupling.test.ts +356 -0
  124. package/src/modules/api_keys/setup.ts +9 -0
  125. package/src/modules/attachments/components/AttachmentLibrary.tsx +2 -2
  126. package/src/modules/attachments/lib/assignmentDetails.ts +32 -16
  127. package/src/modules/attachments/lib/partitions.ts +3 -3
  128. package/src/modules/attachments/setup.ts +9 -0
  129. package/src/modules/audit_logs/setup.ts +10 -0
  130. package/src/modules/auth/__tests__/cli-setup-acl.test.ts +30 -0
  131. package/src/modules/auth/lib/setup-app.ts +40 -177
  132. package/src/modules/auth/setup.ts +9 -0
  133. package/src/modules/business_rules/data/validators.ts +0 -40
  134. package/src/modules/business_rules/index.ts +0 -25
  135. package/src/modules/business_rules/lib/rule-engine.ts +1 -281
  136. package/src/modules/business_rules/setup.ts +9 -0
  137. package/src/modules/catalog/setup.ts +22 -0
  138. package/src/modules/configs/lib/upgrade-actions.ts +78 -17
  139. package/src/modules/configs/setup.ts +14 -0
  140. package/src/modules/currencies/setup.ts +15 -0
  141. package/src/modules/customers/setup.ts +36 -0
  142. package/src/modules/dashboards/setup.ts +10 -0
  143. package/src/modules/dictionaries/setup.ts +10 -0
  144. package/src/modules/directory/setup.ts +10 -0
  145. package/src/modules/entities/setup.ts +9 -0
  146. package/src/modules/feature_toggles/setup.ts +9 -0
  147. package/src/modules/perspectives/setup.ts +10 -0
  148. package/src/modules/planner/setup.ts +21 -0
  149. package/src/modules/query_index/setup.ts +9 -0
  150. package/src/modules/resources/setup.ts +21 -0
  151. package/src/modules/sales/acl.ts +0 -1
  152. package/src/modules/sales/backend/sales/documents/[id]/page.tsx +0 -16
  153. package/src/modules/sales/commands/documents.ts +1 -74
  154. package/src/modules/sales/lib/dictionaries.ts +0 -3
  155. package/src/modules/sales/setup.ts +108 -0
  156. package/src/modules/staff/setup.ts +27 -0
  157. package/src/modules/workflows/acl.ts +0 -2
  158. package/src/modules/workflows/api/__tests__/instances.route.test.ts +2 -5
  159. package/src/modules/workflows/api/instances/route.ts +7 -21
  160. package/src/modules/workflows/api/tasks/route.ts +1 -7
  161. package/src/modules/workflows/backend/definitions/[id]/page.meta.ts +1 -1
  162. package/src/modules/workflows/backend/definitions/[id]/page.tsx +0 -9
  163. package/src/modules/workflows/backend/definitions/create/page.meta.ts +1 -1
  164. package/src/modules/workflows/backend/definitions/create/page.tsx +0 -9
  165. package/src/modules/workflows/backend/definitions/visual-editor/page.meta.ts +1 -1
  166. package/src/modules/workflows/backend/definitions/visual-editor/page.tsx +3 -21
  167. package/src/modules/workflows/backend/events/[id]/page.meta.ts +2 -2
  168. package/src/modules/workflows/backend/events/[id]/page.tsx +1 -1
  169. package/src/modules/workflows/backend/instances/[id]/page.meta.ts +2 -2
  170. package/src/modules/workflows/backend/tasks/[id]/page.meta.ts +2 -2
  171. package/src/modules/workflows/backend/tasks/[id]/page.tsx +1 -1
  172. package/src/modules/workflows/backend/tasks/page.tsx +6 -5
  173. package/src/modules/workflows/cli.ts +0 -111
  174. package/src/modules/workflows/data/entities.ts +0 -124
  175. package/src/modules/workflows/data/validators.ts +0 -138
  176. package/src/modules/workflows/examples/checkout-demo-definition.json +5 -1
  177. package/src/modules/workflows/i18n/en.json +0 -71
  178. package/src/modules/workflows/lib/__tests__/activity-executor.test.ts +36 -43
  179. package/src/modules/workflows/lib/__tests__/transition-handler.test.ts +90 -170
  180. package/src/modules/workflows/lib/activity-executor.ts +16 -129
  181. package/src/modules/workflows/lib/graph-utils.ts +2 -117
  182. package/src/modules/workflows/lib/seeds.ts +12 -50
  183. package/src/modules/workflows/lib/start-validator.ts +28 -38
  184. package/src/modules/workflows/lib/transition-handler.ts +55 -208
  185. package/src/modules/workflows/migrations/Migration20251207131955.ts +77 -143
  186. package/src/modules/workflows/setup.ts +15 -0
  187. package/dist/generated/entities/workflow_event_trigger/index.js +0 -33
  188. package/dist/generated/entities/workflow_event_trigger/index.js.map +0 -7
  189. package/dist/modules/auth/events.js +0 -30
  190. package/dist/modules/auth/events.js.map +0 -7
  191. package/dist/modules/business_rules/api/execute/[ruleId]/route.js +0 -145
  192. package/dist/modules/business_rules/api/execute/[ruleId]/route.js.map +0 -7
  193. package/dist/modules/catalog/events.js +0 -34
  194. package/dist/modules/catalog/events.js.map +0 -7
  195. package/dist/modules/customers/events.js +0 -49
  196. package/dist/modules/customers/events.js.map +0 -7
  197. package/dist/modules/directory/events.js +0 -23
  198. package/dist/modules/directory/events.js.map +0 -7
  199. package/dist/modules/sales/events.js +0 -63
  200. package/dist/modules/sales/events.js.map +0 -7
  201. package/dist/modules/sales/lib/frontend/documentDataEvents.js +0 -25
  202. package/dist/modules/sales/lib/frontend/documentDataEvents.js.map +0 -7
  203. package/dist/modules/workflows/components/DefinitionTriggersEditor.js +0 -481
  204. package/dist/modules/workflows/components/DefinitionTriggersEditor.js.map +0 -7
  205. package/dist/modules/workflows/components/EventTriggersEditor.js +0 -553
  206. package/dist/modules/workflows/components/EventTriggersEditor.js.map +0 -7
  207. package/dist/modules/workflows/events.js +0 -38
  208. package/dist/modules/workflows/events.js.map +0 -7
  209. package/dist/modules/workflows/examples/order-approval-definition.json +0 -257
  210. package/dist/modules/workflows/examples/order-approval-guard-rules.json +0 -32
  211. package/dist/modules/workflows/lib/event-trigger-service.js +0 -308
  212. package/dist/modules/workflows/lib/event-trigger-service.js.map +0 -7
  213. package/dist/modules/workflows/migrations/Migration20260123143500.js +0 -36
  214. package/dist/modules/workflows/migrations/Migration20260123143500.js.map +0 -7
  215. package/dist/modules/workflows/subscribers/event-trigger.js +0 -78
  216. package/dist/modules/workflows/subscribers/event-trigger.js.map +0 -7
  217. package/dist/modules/workflows/widgets/injection/order-approval/widget.client.js +0 -323
  218. package/dist/modules/workflows/widgets/injection/order-approval/widget.client.js.map +0 -7
  219. package/dist/modules/workflows/widgets/injection/order-approval/widget.js +0 -17
  220. package/dist/modules/workflows/widgets/injection/order-approval/widget.js.map +0 -7
  221. package/dist/modules/workflows/widgets/injection-table.js +0 -19
  222. package/dist/modules/workflows/widgets/injection-table.js.map +0 -7
  223. package/generated/entities/workflow_event_trigger/index.ts +0 -15
  224. package/src/modules/auth/events.ts +0 -39
  225. package/src/modules/business_rules/api/execute/[ruleId]/route.ts +0 -163
  226. package/src/modules/catalog/events.ts +0 -45
  227. package/src/modules/customers/events.ts +0 -63
  228. package/src/modules/directory/events.ts +0 -31
  229. package/src/modules/sales/events.ts +0 -82
  230. package/src/modules/sales/lib/frontend/documentDataEvents.ts +0 -28
  231. package/src/modules/workflows/components/DefinitionTriggersEditor.tsx +0 -581
  232. package/src/modules/workflows/components/EventTriggersEditor.tsx +0 -664
  233. package/src/modules/workflows/events.ts +0 -49
  234. package/src/modules/workflows/examples/order-approval-definition.json +0 -257
  235. package/src/modules/workflows/examples/order-approval-guard-rules.json +0 -32
  236. package/src/modules/workflows/lib/event-trigger-service.ts +0 -557
  237. package/src/modules/workflows/migrations/Migration20260123143500.ts +0 -38
  238. package/src/modules/workflows/subscribers/event-trigger.ts +0 -109
  239. package/src/modules/workflows/widgets/injection/order-approval/widget.client.tsx +0 -446
  240. package/src/modules/workflows/widgets/injection/order-approval/widget.ts +0 -16
  241. package/src/modules/workflows/widgets/injection-table.ts +0 -21
@@ -70,33 +70,19 @@ export async function GET(request: NextRequest) {
70
70
  }
71
71
 
72
72
  if (status) {
73
- // Support comma-separated status values (e.g., "RUNNING,PAUSED,WAITING_FOR_ACTIVITIES")
74
- const statuses = status.split(',').map(s => s.trim()).filter(Boolean)
75
- if (statuses.length === 1) {
76
- where.status = statuses[0]
77
- } else if (statuses.length > 1) {
78
- where.status = { $in: statuses }
79
- }
73
+ where.status = status
80
74
  }
81
75
 
82
76
  if (correlationKey) {
83
77
  where.correlationKey = correlationKey
84
78
  }
85
79
 
86
- // For JSONB metadata filtering, use $contains with explicit key-value pairs
87
- // MikroORM's dot notation creates table joins, not JSON access
88
- if (entityType || entityId) {
89
- where.$and = where.$and || []
90
- if (entityType) {
91
- where.$and.push({
92
- metadata: { $contains: { entityType: entityType } }
93
- })
94
- }
95
- if (entityId) {
96
- where.$and.push({
97
- metadata: { $contains: { entityId: entityId } }
98
- })
99
- }
80
+ if (entityType) {
81
+ where['metadata.entityType'] = entityType
82
+ }
83
+
84
+ if (entityId) {
85
+ where['metadata.entityId'] = entityId
100
86
  }
101
87
 
102
88
  const [instances, total] = await em.findAndCount(
@@ -67,13 +67,7 @@ export async function GET(request: NextRequest) {
67
67
  }
68
68
 
69
69
  if (status) {
70
- // Handle comma-separated status values
71
- const statusValues = status.split(',').map(s => s.trim()).filter(Boolean)
72
- if (statusValues.length === 1) {
73
- where.status = statusValues[0]
74
- } else if (statusValues.length > 1) {
75
- where.status = { $in: statusValues }
76
- }
70
+ where.status = status
77
71
  }
78
72
 
79
73
  if (assignedTo) {
@@ -4,7 +4,7 @@ export const metadata = {
4
4
  pageTitle: 'Edit Workflow Definition',
5
5
  pageTitleKey: 'workflows.edit.title',
6
6
  breadcrumb: [
7
- { label: 'Workflows', labelKey: 'workflows.module.name', href: '/backend/definitions' },
7
+ { label: 'Workflows', labelKey: 'workflows.module.name', href: '/backend/workflows/definitions' },
8
8
  { label: 'Edit', labelKey: 'workflows.common.edit' },
9
9
  ],
10
10
  }
@@ -19,7 +19,6 @@ import {
19
19
  } from '../../../components/formConfig'
20
20
  import { StepsEditor } from '../../../components/StepsEditor'
21
21
  import { TransitionsEditor } from '../../../components/TransitionsEditor'
22
- import { EventTriggersEditor } from '../../../components/EventTriggersEditor'
23
22
 
24
23
  export default function EditWorkflowDefinitionPage() {
25
24
  const router = useRouter()
@@ -146,14 +145,6 @@ export default function EditWorkflowDefinitionPage() {
146
145
  groups={formGroups}
147
146
  submitLabel={t('workflows.form.update')}
148
147
  />
149
-
150
- {/* Event Triggers Section */}
151
- <div className="mt-8">
152
- <EventTriggersEditor
153
- workflowDefinitionId={definitionId!}
154
- workflowId={definition?.workflowId}
155
- />
156
- </div>
157
148
  </PageBody>
158
149
  </Page>
159
150
  )
@@ -20,7 +20,7 @@ export const metadata = {
20
20
  pageOrder: 100,
21
21
  icon: createIcon,
22
22
  breadcrumb: [
23
- { label: 'Workflows', labelKey: 'workflows.module.name', href: '/backend/definitions' },
23
+ { label: 'Workflows', labelKey: 'workflows.module.name', href: '/backend/workflows/definitions' },
24
24
  { label: 'Create', labelKey: 'workflows.common.create' },
25
25
  ],
26
26
  }
@@ -16,8 +16,6 @@ import {
16
16
  } from '../../../components/formConfig'
17
17
  import { StepsEditor } from '../../../components/StepsEditor'
18
18
  import { TransitionsEditor } from '../../../components/TransitionsEditor'
19
- import { Alert, AlertDescription, AlertTitle } from '@open-mercato/ui/primitives/alert'
20
- import { Zap } from 'lucide-react'
21
19
 
22
20
  export default function CreateWorkflowDefinitionPage() {
23
21
  const router = useRouter()
@@ -52,13 +50,6 @@ export default function CreateWorkflowDefinitionPage() {
52
50
  return (
53
51
  <Page>
54
52
  <PageBody>
55
- <Alert variant="info" className="mb-6">
56
- <Zap className="w-4 h-4" />
57
- <AlertTitle>Event Triggers</AlertTitle>
58
- <AlertDescription>
59
- After creating this workflow definition, you can configure event triggers to automatically start the workflow when specific events occur in the system.
60
- </AlertDescription>
61
- </Alert>
62
53
  <CrudForm
63
54
  title={t('workflows.create.title')}
64
55
  backHref="/backend/definitions"
@@ -19,7 +19,7 @@ export const metadata = {
19
19
  pageOrder: 150,
20
20
  icon: visualEditorIcon,
21
21
  breadcrumb: [
22
- { label: 'Workflows', labelKey: 'workflows.module.name', href: '/backend/definitions' },
22
+ { label: 'Workflows', labelKey: 'workflows.module.name', href: '/backend/workflows/definitions' },
23
23
  { label: 'Visual Editor', labelKey: 'workflows.backend.definitions.visual_editor.title' },
24
24
  ],
25
25
  }
@@ -34,8 +34,6 @@ import { apiCall } from '@open-mercato/ui/backend/utils/apiCall'
34
34
  import { flash } from '@open-mercato/ui/backend/FlashMessages'
35
35
  import {CircleQuestionMark, Info, PanelTopClose, PanelTopOpen, Play, Save, Trash2} from 'lucide-react'
36
36
  import { NODE_TYPE_ICONS, NODE_TYPE_COLORS, NODE_TYPE_LABELS } from '../../../lib/node-type-icons'
37
- import { DefinitionTriggersEditor } from '../../../components/DefinitionTriggersEditor'
38
- import type { WorkflowDefinitionTrigger } from '../../../data/entities'
39
37
  import * as React from "react";
40
38
 
41
39
  /**
@@ -78,7 +76,6 @@ export default function VisualEditorPage() {
78
76
  const [icon, setIcon] = useState('')
79
77
  const [effectiveFrom, setEffectiveFrom] = useState('')
80
78
  const [effectiveTo, setEffectiveTo] = useState('')
81
- const [triggers, setTriggers] = useState<WorkflowDefinitionTrigger[]>([])
82
79
 
83
80
  // Load existing definition if ID is provided
84
81
  useEffect(() => {
@@ -116,9 +113,6 @@ export default function VisualEditorPage() {
116
113
  setNodes(graph.nodes)
117
114
  setEdges(graph.edges)
118
115
 
119
- // Load embedded triggers from definition
120
- setTriggers(definition.definition?.triggers || [])
121
-
122
116
  flash('Workflow loaded successfully', 'success')
123
117
  } catch (error) {
124
118
  console.error('Error loading workflow definition:', error)
@@ -290,12 +284,8 @@ export default function VisualEditorPage() {
290
284
  return
291
285
  }
292
286
 
293
- // Generate definition data and include triggers
294
- const graphDefinition = graphToDefinition(nodes, edges, { includePositions: true })
295
- const definitionData = {
296
- ...graphDefinition,
297
- triggers: triggers.length > 0 ? triggers : undefined,
298
- }
287
+ // Generate definition data
288
+ const definitionData = graphToDefinition(nodes, edges, { includePositions: true })
299
289
 
300
290
  // Run Zod schema validation before saving
301
291
  const schemaResult = workflowDefinitionDataSchema.safeParse(definitionData)
@@ -367,7 +357,7 @@ export default function VisualEditorPage() {
367
357
  } finally {
368
358
  setIsSaving(false)
369
359
  }
370
- }, [nodes, edges, workflowId, workflowName, description, version, enabled, category, tags, triggers, definitionId, router])
360
+ }, [nodes, edges, workflowId, workflowName, description, version, enabled, category, tags, definitionId, router])
371
361
 
372
362
  // Test workflow
373
363
  const handleTest = useCallback(() => {
@@ -485,7 +475,6 @@ export default function VisualEditorPage() {
485
475
  setIcon('')
486
476
  setEffectiveFrom('')
487
477
  setEffectiveTo('')
488
- setTriggers([])
489
478
  setShowClearConfirm(false)
490
479
  flash('Canvas cleared', 'success')
491
480
  }, [])
@@ -720,13 +709,6 @@ export default function VisualEditorPage() {
720
709
  </div>
721
710
  </div>
722
711
  </div>
723
-
724
- {/* Event Triggers - Always visible, managed as part of definition */}
725
- <DefinitionTriggersEditor
726
- value={triggers}
727
- onChange={setTriggers}
728
- className="mt-4"
729
- />
730
712
  </div>
731
713
  )}
732
714
 
@@ -4,8 +4,8 @@ export const metadata = {
4
4
  pageTitle: 'Event Details',
5
5
  pageTitleKey: 'workflows.events.detail.title',
6
6
  breadcrumb: [
7
- { label: 'Workflows', labelKey: 'workflows.module.name', href: '/backend/definitions' },
8
- { label: 'Events', labelKey: 'workflows.events.plural', href: '/backend/events' },
7
+ { label: 'Workflows', labelKey: 'workflows.module.name', href: '/backend/workflows/definitions' },
8
+ { label: 'Events', labelKey: 'workflows.events.plural', href: '/backend/workflows/events' },
9
9
  { label: 'Details', labelKey: 'common.details' },
10
10
  ],
11
11
  }
@@ -212,7 +212,7 @@ export default function WorkflowEventDetailPage() {
212
212
  </dt>
213
213
  <dd className="mt-1">
214
214
  <Link
215
- href={`/backend/instances/${event.workflowInstance.id}`}
215
+ href={`/backend/workflows/instances/${event.workflowInstance.id}`}
216
216
  className="text-sm text-primary hover:underline font-mono"
217
217
  >
218
218
  {event.workflowInstance.id}
@@ -4,8 +4,8 @@ export const metadata = {
4
4
  pageTitle: 'Workflow Instance Details',
5
5
  pageTitleKey: 'workflows.instances.singular',
6
6
  breadcrumb: [
7
- { label: 'Workflows', labelKey: 'workflows.module.name', href: '/backend/definitions' },
8
- { label: 'Instances', labelKey: 'workflows.instances.plural', href: '/backend/instances' },
7
+ { label: 'Workflows', labelKey: 'workflows.module.name', href: '/backend/workflows/definitions' },
8
+ { label: 'Instances', labelKey: 'workflows.instances.plural', href: '/backend/workflows/instances' },
9
9
  { label: 'Details', labelKey: 'common.details' },
10
10
  ],
11
11
  }
@@ -4,8 +4,8 @@ export const metadata = {
4
4
  pageTitle: 'Task Details',
5
5
  pageTitleKey: 'workflows.tasks.singular',
6
6
  breadcrumb: [
7
- { label: 'Workflows', labelKey: 'workflows.module.name', href: '/backend/definitions' },
8
- { label: 'Tasks', labelKey: 'workflows.tasks.plural', href: '/backend/tasks' },
7
+ { label: 'Workflows', labelKey: 'workflows.module.name', href: '/backend/workflows/definitions' },
8
+ { label: 'Tasks', labelKey: 'workflows.tasks.plural', href: '/backend/workflows/tasks' },
9
9
  { label: 'Details', labelKey: 'common.details' },
10
10
  ],
11
11
  }
@@ -381,7 +381,7 @@ export default function UserTaskDetailPage({ params }: { params: { id: string }
381
381
  task.status
382
382
  )}`}
383
383
  >
384
- {t(`workflows.tasks.statuses.${task.status}`)}
384
+ {t(`workflows.tasks.status.${task.status}`)}
385
385
  </span>
386
386
  </div>
387
387
 
@@ -72,6 +72,7 @@ export default function UserTasksListPage() {
72
72
  params.set('offset', offset.toString())
73
73
 
74
74
  if (filterValues.status) params.set('status', filterValues.status as string)
75
+ if (filterValues.myTasks === 'true') params.set('myTasks', 'true')
75
76
  if (filterValues.overdue === 'true') params.set('overdue', 'true')
76
77
  if (filterValues.workflowInstanceId) params.set('workflowInstanceId', filterValues.workflowInstanceId as string)
77
78
 
@@ -154,10 +155,10 @@ export default function UserTasksListPage() {
154
155
  label: t('workflows.tasks.filters.status'),
155
156
  options: [
156
157
  { label: t('common.all'), value: '' },
157
- { label: t('workflows.tasks.statuses.PENDING'), value: 'PENDING' },
158
- { label: t('workflows.tasks.statuses.IN_PROGRESS'), value: 'IN_PROGRESS' },
159
- { label: t('workflows.tasks.statuses.COMPLETED'), value: 'COMPLETED' },
160
- { label: t('workflows.tasks.statuses.CANCELLED'), value: 'CANCELLED' },
158
+ { label: t('workflows.tasks.status.PENDING'), value: 'PENDING' },
159
+ { label: t('workflows.tasks.status.IN_PROGRESS'), value: 'IN_PROGRESS' },
160
+ { label: t('workflows.tasks.status.COMPLETED'), value: 'COMPLETED' },
161
+ { label: t('workflows.tasks.status.CANCELLED'), value: 'CANCELLED' },
161
162
  ],
162
163
  },
163
164
  {
@@ -213,7 +214,7 @@ export default function UserTasksListPage() {
213
214
  accessorKey: 'status',
214
215
  cell: ({ row }) => (
215
216
  <span className={`inline-flex items-center px-2 py-1 rounded text-xs font-medium ${getStatusBadgeClass(row.original.status)}`}>
216
- {t(`workflows.tasks.statuses.${row.original.status}`)}
217
+ {t(`workflows.tasks.status.${row.original.status}`)}
217
218
  </span>
218
219
  ),
219
220
  },
@@ -2,7 +2,6 @@ import type { ModuleCli } from '@open-mercato/shared/modules/registry'
2
2
  import { createRequestContainer } from '@open-mercato/shared/lib/di/container'
3
3
  import type { EntityManager } from '@mikro-orm/postgresql'
4
4
  import { WorkflowDefinition } from './data/entities'
5
- import { BusinessRule, type RuleType } from '@open-mercato/core/modules/business_rules/data/entities'
6
5
  import * as fs from 'fs'
7
6
  import * as path from 'path'
8
7
  import { fileURLToPath } from 'url'
@@ -284,111 +283,6 @@ const seedSimpleApproval: ModuleCli = {
284
283
  },
285
284
  }
286
285
 
287
- /**
288
- * Seed order approval example
289
- */
290
- const seedOrderApproval: ModuleCli = {
291
- command: 'seed-order-approval',
292
- async run(rest: string[]) {
293
- const args = parseArgs(rest)
294
- const tenantId = String(args.tenantId ?? args.tenant ?? args.t ?? '')
295
- const organizationId = String(args.organizationId ?? args.orgId ?? args.org ?? args.o ?? '')
296
-
297
- if (!tenantId || !organizationId) {
298
- console.error('Usage: mercato workflows seed-order-approval --tenant <tenantId> --org <organizationId>')
299
- return
300
- }
301
-
302
- try {
303
- const { resolve } = await createRequestContainer()
304
- const em = resolve<EntityManager>('em')
305
-
306
- // 1. Seed order approval guard rules first
307
- const guardRulesPath = path.join(__dirname, 'examples', 'order-approval-guard-rules.json')
308
- const guardRulesData = JSON.parse(fs.readFileSync(guardRulesPath, 'utf8')) as Array<{
309
- ruleId: string
310
- ruleName: string
311
- ruleType: RuleType
312
- entityType: string
313
- description?: string
314
- eventType?: string
315
- conditionExpression?: Record<string, unknown>
316
- enabled?: boolean
317
- priority?: number
318
- }>
319
-
320
- let rulesSeeded = 0
321
- let rulesSkipped = 0
322
- for (const rule of guardRulesData) {
323
- const existingRule = await em.findOne(BusinessRule, {
324
- ruleId: rule.ruleId,
325
- tenantId,
326
- organizationId,
327
- })
328
-
329
- if (existingRule) {
330
- rulesSkipped++
331
- continue
332
- }
333
-
334
- const newRule = em.create(BusinessRule, {
335
- ...rule,
336
- tenantId,
337
- organizationId,
338
- })
339
- em.persist(newRule)
340
- console.log(` ✓ Seeded guard rule: ${rule.ruleName}`)
341
- rulesSeeded++
342
- }
343
-
344
- if (rulesSeeded > 0) {
345
- await em.flush()
346
- }
347
-
348
- // 2. Read the order approval workflow definition
349
- const approvalPath = path.join(__dirname, 'examples', 'order-approval-definition.json')
350
- const approvalData = JSON.parse(fs.readFileSync(approvalPath, 'utf8'))
351
-
352
- // Check if it already exists
353
- const existing = await em.findOne(WorkflowDefinition, {
354
- workflowId: approvalData.workflowId,
355
- tenantId,
356
- organizationId,
357
- })
358
-
359
- if (existing) {
360
- console.log(`✓ Order approval workflow '${approvalData.workflowId}' already exists (ID: ${existing.id})`)
361
- console.log(` - Guard rules seeded: ${rulesSeeded}`)
362
- console.log(` - Guard rules skipped: ${rulesSkipped}`)
363
- return
364
- }
365
-
366
- // Create the workflow definition
367
- const workflow = em.create(WorkflowDefinition, {
368
- ...approvalData,
369
- tenantId,
370
- organizationId,
371
- })
372
-
373
- await em.persistAndFlush(workflow)
374
-
375
- console.log(`✓ Seeded order approval workflow: ${workflow.workflowName}`)
376
- console.log(` - ID: ${workflow.id}`)
377
- console.log(` - Workflow ID: ${workflow.workflowId}`)
378
- console.log(` - Version: ${workflow.version}`)
379
- console.log(` - Steps: ${workflow.definition.steps.length}`)
380
- console.log(` - Transitions: ${workflow.definition.transitions.length}`)
381
- console.log(` - Guard rules seeded: ${rulesSeeded}`)
382
- console.log(` - Guard rules skipped: ${rulesSkipped}`)
383
- console.log('')
384
- console.log('Order approval workflow is ready!')
385
- } catch (error) {
386
- console.error('Error seeding order approval workflow:', error)
387
- throw error
388
- }
389
- },
390
- }
391
-
392
286
  /**
393
287
  * Start workflow activity worker
394
288
  */
@@ -472,10 +366,6 @@ const seedAll: ModuleCli = {
472
366
  await seedSimpleApproval.run(rest)
473
367
  console.log('')
474
368
 
475
- // Seed order approval
476
- await seedOrderApproval.run(rest)
477
- console.log('')
478
-
479
369
  console.log('✓ All example workflows seeded successfully!')
480
370
  } catch (error) {
481
371
  console.error('Error seeding workflows:', error)
@@ -554,7 +444,6 @@ const workflowsCliCommands = [
554
444
  seedDemoWithRules,
555
445
  seedSalesPipeline,
556
446
  seedSimpleApproval,
557
- seedOrderApproval,
558
447
  seedAll,
559
448
  ]
560
449
 
@@ -46,63 +46,6 @@ export type UserTaskStatus =
46
46
  | 'CANCELLED'
47
47
  | 'ESCALATED'
48
48
 
49
- // ============================================================================
50
- // Event Trigger Types
51
- // ============================================================================
52
-
53
- export type TriggerFilterOperator =
54
- | 'eq'
55
- | 'neq'
56
- | 'gt'
57
- | 'gte'
58
- | 'lt'
59
- | 'lte'
60
- | 'contains'
61
- | 'startsWith'
62
- | 'endsWith'
63
- | 'in'
64
- | 'notIn'
65
- | 'exists'
66
- | 'notExists'
67
- | 'regex'
68
-
69
- export interface TriggerFilterCondition {
70
- field: string // JSON path (e.g., "status", "metadata.type")
71
- operator: TriggerFilterOperator
72
- value: unknown
73
- }
74
-
75
- export interface TriggerContextMapping {
76
- targetKey: string // Key in workflow initial context
77
- sourceExpression: string // Path from event payload (supports dot notation)
78
- defaultValue?: unknown
79
- }
80
-
81
- export interface WorkflowEventTriggerConfig {
82
- filterConditions?: TriggerFilterCondition[]
83
- contextMapping?: TriggerContextMapping[]
84
- debounceMs?: number // Debounce rapid events
85
- maxConcurrentInstances?: number // Limit concurrent instances
86
- entityType?: string // Entity type for workflow instance metadata (e.g., "SalesOrder")
87
- }
88
-
89
- /**
90
- * WorkflowDefinitionTrigger - Embedded trigger configuration
91
- *
92
- * Triggers are now embedded directly in the workflow definition,
93
- * allowing users to configure event-based workflow starts during
94
- * workflow creation in the visual editor.
95
- */
96
- export interface WorkflowDefinitionTrigger {
97
- triggerId: string
98
- name: string
99
- description?: string | null
100
- eventPattern: string // e.g., "sales.orders.created", "customers.*"
101
- config?: WorkflowEventTriggerConfig | null
102
- enabled: boolean
103
- priority: number
104
- }
105
-
106
49
  // ============================================================================
107
50
  // JSONB Structure Interfaces
108
51
  // ============================================================================
@@ -110,7 +53,6 @@ export interface WorkflowDefinitionTrigger {
110
53
  export interface WorkflowDefinitionData {
111
54
  steps: any[] // WorkflowStep[] - will define schema in validators.ts
112
55
  transitions: any[] // WorkflowTransition[] - will define schema in validators.ts
113
- triggers?: WorkflowDefinitionTrigger[] // Event triggers for automatic workflow start
114
56
  activities?: any[] // ActivityDefinition[] - will define schema in validators.ts
115
57
  queries?: any[]
116
58
  signals?: any[]
@@ -487,71 +429,6 @@ export class WorkflowEvent {
487
429
  organizationId!: string
488
430
  }
489
431
 
490
- // ============================================================================
491
- // Entity: WorkflowEventTrigger
492
- // ============================================================================
493
-
494
- /**
495
- * WorkflowEventTrigger entity
496
- *
497
- * Maps event patterns to workflow definitions for automatic triggering.
498
- * When a matching event is emitted, the corresponding workflow is started
499
- * with context mapped from the event payload.
500
- */
501
- @Entity({ tableName: 'workflow_event_triggers' })
502
- @Index({ name: 'workflow_event_triggers_event_pattern_idx', properties: ['eventPattern', 'enabled'] })
503
- @Index({ name: 'workflow_event_triggers_definition_idx', properties: ['workflowDefinitionId'] })
504
- @Index({ name: 'workflow_event_triggers_tenant_org_idx', properties: ['tenantId', 'organizationId'] })
505
- @Index({ name: 'workflow_event_triggers_enabled_priority_idx', properties: ['enabled', 'priority'] })
506
- export class WorkflowEventTrigger {
507
- [OptionalProps]?: 'enabled' | 'priority' | 'createdAt' | 'updatedAt' | 'deletedAt'
508
-
509
- @PrimaryKey({ type: 'uuid', defaultRaw: 'gen_random_uuid()' })
510
- id!: string
511
-
512
- @Property({ name: 'name', type: 'varchar', length: 255 })
513
- name!: string
514
-
515
- @Property({ name: 'description', type: 'text', nullable: true })
516
- description?: string | null
517
-
518
- @Property({ name: 'workflow_definition_id', type: 'uuid' })
519
- workflowDefinitionId!: string
520
-
521
- @Property({ name: 'event_pattern', type: 'varchar', length: 255 })
522
- eventPattern!: string
523
-
524
- @Property({ name: 'config', type: 'jsonb', nullable: true })
525
- config?: WorkflowEventTriggerConfig | null
526
-
527
- @Property({ name: 'enabled', type: 'boolean', default: true })
528
- enabled: boolean = true
529
-
530
- @Property({ name: 'priority', type: 'integer', default: 0 })
531
- priority: number = 0
532
-
533
- @Property({ name: 'tenant_id', type: 'uuid' })
534
- tenantId!: string
535
-
536
- @Property({ name: 'organization_id', type: 'uuid' })
537
- organizationId!: string
538
-
539
- @Property({ name: 'created_by', type: 'varchar', length: 255, nullable: true })
540
- createdBy?: string | null
541
-
542
- @Property({ name: 'updated_by', type: 'varchar', length: 255, nullable: true })
543
- updatedBy?: string | null
544
-
545
- @Property({ name: 'created_at', type: Date, onCreate: () => new Date() })
546
- createdAt: Date = new Date()
547
-
548
- @Property({ name: 'updated_at', type: Date, onUpdate: () => new Date() })
549
- updatedAt: Date = new Date()
550
-
551
- @Property({ name: 'deleted_at', type: Date, nullable: true })
552
- deletedAt?: Date | null
553
- }
554
-
555
432
  // Export all entities as default for MikroORM discovery
556
433
  export default [
557
434
  WorkflowDefinition,
@@ -559,5 +436,4 @@ export default [
559
436
  StepInstance,
560
437
  UserTask,
561
438
  WorkflowEvent,
562
- WorkflowEventTrigger,
563
439
  ]