@open-mercato/core 0.6.2-develop.3400.2.d948268f50 → 0.6.2-develop.3406.1.2b403f40da

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 (95) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/dist/generated/entities/workflow_definition/index.js +2 -0
  3. package/dist/generated/entities/workflow_definition/index.js.map +2 -2
  4. package/dist/generated/entity-fields-registry.js +1 -0
  5. package/dist/generated/entity-fields-registry.js.map +2 -2
  6. package/dist/modules/sales/workflows.js +180 -0
  7. package/dist/modules/sales/workflows.js.map +7 -0
  8. package/dist/modules/workflows/api/definitions/[id]/customize/route.js +172 -0
  9. package/dist/modules/workflows/api/definitions/[id]/customize/route.js.map +7 -0
  10. package/dist/modules/workflows/api/definitions/[id]/reset-to-code/route.js +205 -0
  11. package/dist/modules/workflows/api/definitions/[id]/reset-to-code/route.js.map +7 -0
  12. package/dist/modules/workflows/api/definitions/[id]/route.js +91 -2
  13. package/dist/modules/workflows/api/definitions/[id]/route.js.map +2 -2
  14. package/dist/modules/workflows/api/definitions/route.js +32 -9
  15. package/dist/modules/workflows/api/definitions/route.js.map +2 -2
  16. package/dist/modules/workflows/api/definitions/serialize.js +36 -1
  17. package/dist/modules/workflows/api/definitions/serialize.js.map +2 -2
  18. package/dist/modules/workflows/backend/definitions/[id]/page.js +161 -52
  19. package/dist/modules/workflows/backend/definitions/[id]/page.js.map +2 -2
  20. package/dist/modules/workflows/backend/definitions/page.js +37 -34
  21. package/dist/modules/workflows/backend/definitions/page.js.map +2 -2
  22. package/dist/modules/workflows/backend/definitions/visual-editor/page.js +134 -41
  23. package/dist/modules/workflows/backend/definitions/visual-editor/page.js.map +2 -2
  24. package/dist/modules/workflows/cli.js +19 -121
  25. package/dist/modules/workflows/cli.js.map +2 -2
  26. package/dist/modules/workflows/components/formConfig.js +1 -1
  27. package/dist/modules/workflows/components/formConfig.js.map +2 -2
  28. package/dist/modules/workflows/data/entities.js +3 -0
  29. package/dist/modules/workflows/data/entities.js.map +2 -2
  30. package/dist/modules/workflows/data/validators.js +2 -2
  31. package/dist/modules/workflows/data/validators.js.map +2 -2
  32. package/dist/modules/workflows/events.js +2 -0
  33. package/dist/modules/workflows/events.js.map +2 -2
  34. package/dist/modules/workflows/examples/guard-rules-example.json +6 -6
  35. package/dist/modules/workflows/examples/order-approval-guard-rules.json +2 -2
  36. package/dist/modules/workflows/frontend/checkout-demo/page.js +4 -4
  37. package/dist/modules/workflows/frontend/checkout-demo/page.js.map +2 -2
  38. package/dist/modules/workflows/lib/code-registry.js +40 -0
  39. package/dist/modules/workflows/lib/code-registry.js.map +7 -0
  40. package/dist/modules/workflows/lib/find-definition.js +58 -0
  41. package/dist/modules/workflows/lib/find-definition.js.map +7 -0
  42. package/dist/modules/workflows/lib/seeds.js +0 -3
  43. package/dist/modules/workflows/lib/seeds.js.map +2 -2
  44. package/dist/modules/workflows/lib/start-validator.js +1 -20
  45. package/dist/modules/workflows/lib/start-validator.js.map +2 -2
  46. package/dist/modules/workflows/lib/workflow-executor.js +1 -19
  47. package/dist/modules/workflows/lib/workflow-executor.js.map +2 -2
  48. package/dist/modules/workflows/migrations/Migration20260414120000.js +13 -0
  49. package/dist/modules/workflows/migrations/Migration20260414120000.js.map +7 -0
  50. package/dist/modules/workflows/migrations/Migration20260428102318.js +32 -0
  51. package/dist/modules/workflows/migrations/Migration20260428102318.js.map +7 -0
  52. package/dist/modules/workflows/widgets/injection/order-approval/widget.client.js +1 -1
  53. package/dist/modules/workflows/widgets/injection/order-approval/widget.client.js.map +1 -1
  54. package/dist/modules/workflows/workflows.js +260 -0
  55. package/dist/modules/workflows/workflows.js.map +7 -0
  56. package/generated/entities/workflow_definition/index.ts +1 -0
  57. package/generated/entity-fields-registry.ts +1 -0
  58. package/package.json +7 -7
  59. package/src/modules/sales/workflows.ts +184 -0
  60. package/src/modules/workflows/api/definitions/[id]/customize/route.ts +197 -0
  61. package/src/modules/workflows/api/definitions/[id]/reset-to-code/route.ts +252 -0
  62. package/src/modules/workflows/api/definitions/[id]/route.ts +108 -4
  63. package/src/modules/workflows/api/definitions/route.ts +54 -10
  64. package/src/modules/workflows/api/definitions/serialize.ts +42 -0
  65. package/src/modules/workflows/backend/definitions/[id]/page.tsx +135 -11
  66. package/src/modules/workflows/backend/definitions/page.tsx +45 -33
  67. package/src/modules/workflows/backend/definitions/visual-editor/page.tsx +222 -97
  68. package/src/modules/workflows/cli.ts +32 -155
  69. package/src/modules/workflows/components/formConfig.tsx +2 -2
  70. package/src/modules/workflows/data/entities.ts +4 -1
  71. package/src/modules/workflows/data/validators.ts +4 -3
  72. package/src/modules/workflows/events.ts +2 -0
  73. package/src/modules/workflows/examples/guard-rules-example.json +6 -6
  74. package/src/modules/workflows/examples/order-approval-guard-rules.json +2 -2
  75. package/src/modules/workflows/frontend/checkout-demo/page.tsx +4 -4
  76. package/src/modules/workflows/i18n/de.json +16 -0
  77. package/src/modules/workflows/i18n/en.json +16 -0
  78. package/src/modules/workflows/i18n/es.json +16 -0
  79. package/src/modules/workflows/i18n/pl.json +16 -0
  80. package/src/modules/workflows/lib/code-registry.ts +65 -0
  81. package/src/modules/workflows/lib/find-definition.ts +100 -0
  82. package/src/modules/workflows/lib/seeds.ts +4 -3
  83. package/src/modules/workflows/lib/start-validator.ts +2 -35
  84. package/src/modules/workflows/lib/workflow-executor.ts +2 -39
  85. package/src/modules/workflows/migrations/.snapshot-open-mercato.json +10 -0
  86. package/src/modules/workflows/migrations/Migration20260414120000.ts +13 -0
  87. package/src/modules/workflows/migrations/Migration20260428102318.ts +57 -0
  88. package/src/modules/workflows/widgets/injection/order-approval/widget.client.tsx +1 -1
  89. package/src/modules/workflows/workflows.ts +278 -0
  90. package/dist/modules/workflows/examples/checkout-demo-definition.json +0 -486
  91. package/dist/modules/workflows/examples/order-approval-definition.json +0 -257
  92. package/dist/modules/workflows/examples/simple-approval-definition.json +0 -134
  93. package/src/modules/workflows/examples/checkout-demo-definition.json +0 -486
  94. package/src/modules/workflows/examples/order-approval-definition.json +0 -257
  95. package/src/modules/workflows/examples/simple-approval-definition.json +0 -134
@@ -28,73 +28,28 @@ function parseArgs(args: string[]) {
28
28
 
29
29
  /**
30
30
  * Seed demo checkout workflow
31
+ *
32
+ * The 'workflows.checkout-demo' workflow is now code-defined
33
+ * (see packages/core/src/modules/workflows/workflows.ts) and available
34
+ * to every tenant without DB seeding. This command remains as a thin
35
+ * wrapper that informs operators of the new location.
31
36
  */
32
37
  const seedDemo: ModuleCli = {
33
38
  command: 'seed-demo',
34
- async run(rest: string[]) {
35
- const args = parseArgs(rest)
36
- const tenantId = String(args.tenantId ?? args.tenant ?? args.t ?? '')
37
- const organizationId = String(args.organizationId ?? args.orgId ?? args.org ?? args.o ?? '')
38
-
39
- if (!tenantId || !organizationId) {
40
- console.error('Usage: mercato workflows seed-demo --tenant <tenantId> --org <organizationId>')
41
- console.error(' or: mercato workflows seed-demo -t <tenantId> -o <organizationId>')
42
- return
43
- }
44
-
45
- try {
46
- const { resolve } = await createRequestContainer()
47
- const em = resolve<EntityManager>('em')
48
-
49
- // Read the demo workflow definition
50
- const demoPath = path.join(__dirname, 'examples', 'checkout-demo-definition.json')
51
- const demoData = JSON.parse(fs.readFileSync(demoPath, 'utf8'))
52
-
53
- // Check if it already exists
54
- const existing = await em.findOne(WorkflowDefinition, {
55
- workflowId: demoData.workflowId,
56
- tenantId,
57
- organizationId,
58
- })
59
-
60
- if (existing) {
61
- console.log(`ℹ️ Demo workflow '${demoData.workflowId}' already exists (ID: ${existing.id})`)
62
- return
63
- }
64
-
65
- // Create the workflow definition
66
- const workflow = em.create(WorkflowDefinition, {
67
- ...demoData,
68
- tenantId,
69
- organizationId,
70
- })
71
-
72
- await em.persist(workflow).flush()
73
-
74
- console.log(`✅ Seeded demo workflow: ${workflow.workflowName}`)
75
- console.log(` - ID: ${workflow.id}`)
76
- console.log(` - Workflow ID: ${workflow.workflowId}`)
77
- console.log(` - Version: ${workflow.version}`)
78
- console.log(` - Steps: ${workflow.definition.steps.length}`)
79
- console.log(` - Transitions: ${workflow.definition.transitions.length}`)
80
- console.log('')
81
- console.log('Demo workflow is ready! You can now:')
82
- console.log(' 1. View it in admin: /backend/definitions')
83
- console.log(' 2. Try the demo page: /checkout-demo')
84
- console.log(' 3. Start an instance via API: POST /api/workflows/instances')
85
- console.log('')
86
- console.log('Note: This workflow includes a USER_TASK step for customer information.')
87
- console.log('When the workflow reaches this step, it will pause and require user input.')
88
- console.log('Complete pending tasks at: /backend/tasks')
89
- } catch (error) {
90
- console.error('Error seeding demo workflow:', error)
91
- throw error
92
- }
39
+ async run() {
40
+ console.log('ℹ️ The "workflows.checkout-demo" workflow is now code-defined.')
41
+ console.log(' No seeding required — it is auto-registered by the workflows module')
42
+ console.log(' (see packages/core/src/modules/workflows/workflows.ts).')
43
+ console.log('')
44
+ console.log(' Visit /backend/definitions to view it as a Code-defined workflow.')
93
45
  },
94
46
  }
95
47
 
96
48
  /**
97
- * Seed demo checkout workflow with guard rules
49
+ * Seed demo checkout workflow guard rules
50
+ *
51
+ * The 'workflows.checkout-demo' workflow is code-defined; only the
52
+ * guard rules still need DB seeding.
98
53
  */
99
54
  const seedDemoWithRules: ModuleCli = {
100
55
  command: 'seed-demo-with-rules',
@@ -109,15 +64,9 @@ const seedDemoWithRules: ModuleCli = {
109
64
  return
110
65
  }
111
66
 
112
- console.log('🧩 Seeding demo workflow with guard rules...\n')
67
+ console.log('🧩 Seeding checkout-demo guard rules (workflow itself is code-defined)...\n')
113
68
 
114
69
  try {
115
- // Seed the workflow definition
116
- console.log('1. 🧩 Seeding demo workflow...')
117
- await seedDemo.run(rest)
118
-
119
- // Seed the guard rules
120
- console.log('\n2. 🧠 Seeding guard rules...')
121
70
  const { resolve } = await createRequestContainer()
122
71
  const em = resolve<EntityManager>('em')
123
72
 
@@ -155,12 +104,12 @@ const seedDemoWithRules: ModuleCli = {
155
104
  seededCount++
156
105
  }
157
106
 
158
- console.log(`\n✅ Demo workflow with guard rules seeded successfully!`)
159
- console.log(` - Workflow: checkout_simple_v1`)
107
+ console.log(`\n✅ Checkout-demo guard rules seeded successfully!`)
108
+ console.log(` - Workflow: workflows.checkout-demo (code-defined)`)
160
109
  console.log(` - Guard rules seeded: ${seededCount}`)
161
110
  console.log(` - Guard rules skipped: ${skippedCount}`)
162
111
  } catch (error) {
163
- console.error('Error seeding demo with rules:', error)
112
+ console.error('Error seeding demo guard rules:', error)
164
113
  throw error
165
114
  }
166
115
  },
@@ -228,60 +177,19 @@ const seedSalesPipeline: ModuleCli = {
228
177
 
229
178
  /**
230
179
  * Seed simple approval example
180
+ *
181
+ * The 'workflows.simple-approval' workflow is now code-defined
182
+ * (see packages/core/src/modules/workflows/workflows.ts). This command
183
+ * remains as a thin wrapper that informs operators of the new location.
231
184
  */
232
185
  const seedSimpleApproval: ModuleCli = {
233
186
  command: 'seed-simple-approval',
234
- async run(rest: string[]) {
235
- const args = parseArgs(rest)
236
- const tenantId = String(args.tenantId ?? args.tenant ?? args.t ?? '')
237
- const organizationId = String(args.organizationId ?? args.orgId ?? args.org ?? args.o ?? '')
238
-
239
- if (!tenantId || !organizationId) {
240
- console.error('Usage: mercato workflows seed-simple-approval --tenant <tenantId> --org <organizationId>')
241
- return
242
- }
243
-
244
- try {
245
- const { resolve } = await createRequestContainer()
246
- const em = resolve<EntityManager>('em')
247
-
248
- // Read the simple approval workflow definition
249
- const approvalPath = path.join(__dirname, 'examples', 'simple-approval-definition.json')
250
- const approvalData = JSON.parse(fs.readFileSync(approvalPath, 'utf8'))
251
-
252
- // Check if it already exists
253
- const existing = await em.findOne(WorkflowDefinition, {
254
- workflowId: approvalData.workflowId,
255
- tenantId,
256
- organizationId,
257
- })
258
-
259
- if (existing) {
260
- console.log(`ℹ️ Simple approval workflow '${approvalData.workflowId}' already exists (ID: ${existing.id})`)
261
- return
262
- }
263
-
264
- // Create the workflow definition
265
- const workflow = em.create(WorkflowDefinition, {
266
- ...approvalData,
267
- tenantId,
268
- organizationId,
269
- })
270
-
271
- await em.persist(workflow).flush()
272
-
273
- console.log(`✅ Seeded simple approval workflow: ${workflow.workflowName}`)
274
- console.log(` - ID: ${workflow.id}`)
275
- console.log(` - Workflow ID: ${workflow.workflowId}`)
276
- console.log(` - Version: ${workflow.version}`)
277
- console.log(` - Steps: ${workflow.definition.steps.length}`)
278
- console.log(` - Transitions: ${workflow.definition.transitions.length}`)
279
- console.log('')
280
- console.log('Simple approval workflow is ready!')
281
- } catch (error) {
282
- console.error('Error seeding simple approval workflow:', error)
283
- throw error
284
- }
187
+ async run() {
188
+ console.log('ℹ️ The "workflows.simple-approval" workflow is now code-defined.')
189
+ console.log(' No seeding required — it is auto-registered by the workflows module')
190
+ console.log(' (see packages/core/src/modules/workflows/workflows.ts).')
191
+ console.log('')
192
+ console.log(' Visit /backend/definitions to view it as a Code-defined workflow.')
285
193
  },
286
194
  }
287
195
 
@@ -346,43 +254,12 @@ const seedOrderApproval: ModuleCli = {
346
254
  await em.flush()
347
255
  }
348
256
 
349
- // 2. Read the order approval workflow definition
350
- const approvalPath = path.join(__dirname, 'examples', 'order-approval-definition.json')
351
- const approvalData = JSON.parse(fs.readFileSync(approvalPath, 'utf8'))
352
-
353
- // Check if it already exists
354
- const existing = await em.findOne(WorkflowDefinition, {
355
- workflowId: approvalData.workflowId,
356
- tenantId,
357
- organizationId,
358
- })
359
-
360
- if (existing) {
361
- console.log(`✅ Order approval workflow '${approvalData.workflowId}' already exists (ID: ${existing.id})`)
362
- console.log(` - Guard rules seeded: ${rulesSeeded}`)
363
- console.log(` - Guard rules skipped: ${rulesSkipped}`)
364
- return
365
- }
366
-
367
- // Create the workflow definition
368
- const workflow = em.create(WorkflowDefinition, {
369
- ...approvalData,
370
- tenantId,
371
- organizationId,
372
- })
373
-
374
- await em.persist(workflow).flush()
375
-
376
- console.log(`✅ Seeded order approval workflow: ${workflow.workflowName}`)
377
- console.log(` - ID: ${workflow.id}`)
378
- console.log(` - Workflow ID: ${workflow.workflowId}`)
379
- console.log(` - Version: ${workflow.version}`)
380
- console.log(` - Steps: ${workflow.definition.steps.length}`)
381
- console.log(` - Transitions: ${workflow.definition.transitions.length}`)
257
+ console.log(`✅ Seeded order approval guard rules`)
382
258
  console.log(` - Guard rules seeded: ${rulesSeeded}`)
383
259
  console.log(` - Guard rules skipped: ${rulesSkipped}`)
384
260
  console.log('')
385
- console.log('Order approval workflow is ready!')
261
+ console.log('Note: The "sales.order-approval" workflow definition is now code-defined')
262
+ console.log('(see packages/core/src/modules/sales/workflows.ts) and no longer needs DB seeding.')
386
263
  } catch (error) {
387
264
  console.error('Error seeding order approval workflow:', error)
388
265
  throw error
@@ -34,8 +34,8 @@ export type WorkflowDefinitionFormValues = {
34
34
  export const workflowDefinitionFormSchema = z.object({
35
35
  workflowId: z.string()
36
36
  .min(1, 'Workflow ID is required')
37
- .max(50, 'Workflow ID must be 50 characters or less')
38
- .regex(/^[a-z0-9_-]+$/, 'Workflow ID must contain only lowercase letters, numbers, hyphens, and underscores'),
37
+ .max(100, 'Workflow ID must be 100 characters or less')
38
+ .regex(/^[a-z0-9_.-]+$/, 'Workflow ID must contain only lowercase letters, numbers, hyphens, underscores, and dots'),
39
39
  workflowName: z.string()
40
40
  .min(1, 'Workflow name is required')
41
41
  .max(200, 'Workflow name must be 200 characters or less'),
@@ -147,7 +147,7 @@ export interface WorkflowInstanceMetadata {
147
147
  @Index({ name: 'workflow_definitions_tenant_org_idx', properties: ['tenantId', 'organizationId'] })
148
148
  @Index({ name: 'workflow_definitions_workflow_id_idx', properties: ['workflowId'] })
149
149
  export class WorkflowDefinition {
150
- [OptionalProps]?: 'enabled' | 'version' | 'createdAt' | 'updatedAt' | 'deletedAt'
150
+ [OptionalProps]?: 'enabled' | 'version' | 'createdAt' | 'updatedAt' | 'deletedAt' | 'codeWorkflowId'
151
151
 
152
152
  @PrimaryKey({ type: 'uuid', defaultRaw: 'gen_random_uuid()' })
153
153
  id!: string
@@ -155,6 +155,9 @@ export class WorkflowDefinition {
155
155
  @Property({ name: 'workflow_id', type: 'varchar', length: 100 })
156
156
  workflowId!: string
157
157
 
158
+ @Property({ name: 'code_workflow_id', type: 'varchar', length: 100, nullable: true })
159
+ codeWorkflowId?: string | null
160
+
158
161
  @Property({ name: 'workflow_name', type: 'varchar', length: 255 })
159
162
  workflowName!: string
160
163
 
@@ -285,7 +285,7 @@ const dateOrNull = z.preprocess((value) => {
285
285
 
286
286
  // Full schema for database entities (includes tenant fields)
287
287
  export const createWorkflowDefinitionSchema = z.object({
288
- workflowId: z.string().min(1).max(100).regex(/^[a-z0-9_-]+$/, 'Workflow ID must contain only lowercase letters, numbers, hyphens, and underscores'),
288
+ workflowId: z.string().min(1).max(100).regex(/^[a-z0-9._-]+$/, 'Workflow ID must contain only lowercase letters, numbers, dots, hyphens, and underscores'),
289
289
  workflowName: z.string().min(1).max(255),
290
290
  description: z.string().max(2000).optional().nullable(),
291
291
  version: z.number().int().positive().default(1),
@@ -303,7 +303,7 @@ export type CreateWorkflowDefinitionInput = z.infer<typeof createWorkflowDefinit
303
303
 
304
304
  // API input schema (omits tenant fields - injected from auth context)
305
305
  export const createWorkflowDefinitionInputSchema = z.object({
306
- workflowId: z.string().min(1).max(100).regex(/^[a-z0-9_-]+$/, 'Workflow ID must contain only lowercase letters, numbers, hyphens, and underscores'),
306
+ workflowId: z.string().min(1).max(100).regex(/^[a-z0-9._-]+$/, 'Workflow ID must contain only lowercase letters, numbers, dots, hyphens, and underscores'),
307
307
  workflowName: z.string().min(1).max(255),
308
308
  description: z.string().max(2000).optional().nullable(),
309
309
  version: z.number().int().positive().default(1),
@@ -323,7 +323,8 @@ export type UpdateWorkflowDefinitionInput = z.infer<typeof updateWorkflowDefinit
323
323
  // API update schema (omits tenant fields and allows partial updates)
324
324
  // Accepts the same shape as the create form so the edit page can submit a
325
325
  // full payload without triggering "Unrecognized keys" validation errors.
326
- // workflowId and version are accepted but ignored by the route handler.
326
+ // workflowId is accepted but ignored by the route handler (it identifies the
327
+ // row); version is applied when supplied so the form can bump it explicitly.
327
328
  export const updateWorkflowDefinitionInputSchema = z.object({
328
329
  workflowId: z.string().min(1).max(100).optional(),
329
330
  workflowName: z.string().min(1).max(255).optional(),
@@ -10,6 +10,8 @@ const events = [
10
10
  { id: 'workflows.definition.created', label: 'Workflow Definition Created', entity: 'definition', category: 'crud' },
11
11
  { id: 'workflows.definition.updated', label: 'Workflow Definition Updated', entity: 'definition', category: 'crud' },
12
12
  { id: 'workflows.definition.deleted', label: 'Workflow Definition Deleted', entity: 'definition', category: 'crud' },
13
+ { id: 'workflows.definition.customized', label: 'Workflow Definition Customized', entity: 'definition', category: 'lifecycle' },
14
+ { id: 'workflows.definition.reset_to_code', label: 'Workflow Definition Reset to Code', entity: 'definition', category: 'lifecycle' },
13
15
 
14
16
  // Workflow Instances
15
17
  { id: 'workflows.instance.created', label: 'Workflow Instance Created', entity: 'instance', category: 'crud' },
@@ -5,7 +5,7 @@
5
5
  "description": "Guard rule that blocks checkout if cart has no items",
6
6
  "ruleType": "GUARD",
7
7
  "ruleCategory": "checkout_validation",
8
- "entityType": "workflow:checkout_simple_v1:start",
8
+ "entityType": "workflow:workflows.checkout-demo:start",
9
9
  "eventType": "validate_start",
10
10
  "conditionExpression": {
11
11
  "operator": "AND",
@@ -46,7 +46,7 @@
46
46
  "description": "Guard rule that checks if all items are in stock",
47
47
  "ruleType": "GUARD",
48
48
  "ruleCategory": "checkout_validation",
49
- "entityType": "workflow:checkout_simple_v1:transition_seed",
49
+ "entityType": "workflow:workflows.checkout-demo:transition_seed",
50
50
  "eventType": "pre_transition",
51
51
  "conditionExpression": {
52
52
  "field": "workflowContext.inventory.available",
@@ -70,7 +70,7 @@
70
70
  "description": "Guard rule that enforces minimum order amount of $10",
71
71
  "ruleType": "GUARD",
72
72
  "ruleCategory": "checkout_validation",
73
- "entityType": "workflow:checkout_simple_v1:transition_seed",
73
+ "entityType": "workflow:workflows.checkout-demo:transition_seed",
74
74
  "eventType": "pre_transition",
75
75
  "conditionExpression": {
76
76
  "field": "workflowContext.cart.total",
@@ -94,7 +94,7 @@
94
94
  "description": "Guard rule for payment step - checks payment method is set",
95
95
  "ruleType": "GUARD",
96
96
  "ruleCategory": "payment_validation",
97
- "entityType": "workflow:checkout_simple_v1:transition_seed",
97
+ "entityType": "workflow:workflows.checkout-demo:transition_seed",
98
98
  "eventType": "pre_transition",
99
99
  "conditionExpression": {
100
100
  "operator": "AND",
@@ -127,7 +127,7 @@
127
127
  "description": "Guard rule that checks customer has email and shipping address",
128
128
  "ruleType": "GUARD",
129
129
  "ruleCategory": "checkout_validation",
130
- "entityType": "workflow:checkout_simple_v1:transition_seed",
130
+ "entityType": "workflow:workflows.checkout-demo:transition_seed",
131
131
  "eventType": "pre_transition",
132
132
  "conditionExpression": {
133
133
  "operator": "AND",
@@ -163,7 +163,7 @@
163
163
  "description": "Guard rule that only allows orders between 9 AM and 5 PM",
164
164
  "ruleType": "GUARD",
165
165
  "ruleCategory": "business_logic",
166
- "entityType": "workflow:checkout_simple_v1:transition_seed",
166
+ "entityType": "workflow:workflows.checkout-demo:transition_seed",
167
167
  "eventType": "pre_transition",
168
168
  "conditionExpression": {
169
169
  "operator": "AND",
@@ -4,7 +4,7 @@
4
4
  "ruleName": "Check Decision is Approve",
5
5
  "description": "Validates that the approval task decision is 'approve'",
6
6
  "ruleType": "GUARD",
7
- "entityType": "workflow:sales_order_approval_v1:transition",
7
+ "entityType": "workflow:sales.order-approval:transition",
8
8
  "eventType": "pre_transition",
9
9
  "conditionExpression": {
10
10
  "field": "workflowContext.decision",
@@ -19,7 +19,7 @@
19
19
  "ruleName": "Check Decision is Reject",
20
20
  "description": "Validates that the approval task decision is 'reject'",
21
21
  "ruleType": "GUARD",
22
- "entityType": "workflow:sales_order_approval_v1:transition",
22
+ "entityType": "workflow:sales.order-approval:transition",
23
23
  "eventType": "pre_transition",
24
24
  "conditionExpression": {
25
25
  "field": "workflowContext.decision",
@@ -157,9 +157,9 @@ export default function CheckoutDemoPage() {
157
157
 
158
158
  // Fetch workflow definition to get dynamic steps
159
159
  const { data: workflowDefinition } = useQuery({
160
- queryKey: ['workflow-definition', 'checkout_simple_v1'],
160
+ queryKey: ['workflow-definition', 'workflows.checkout-demo'],
161
161
  queryFn: async () => {
162
- const response = await fetch('/api/workflows/definitions?workflowId=checkout_simple_v1')
162
+ const response = await fetch('/api/workflows/definitions?workflowId=workflows.checkout-demo')
163
163
  if (!response.ok) return null
164
164
  const json = await response.json()
165
165
  return json.data?.[0] || null
@@ -317,7 +317,7 @@ export default function CheckoutDemoPage() {
317
317
  method: 'POST',
318
318
  headers: { 'Content-Type': 'application/json' },
319
319
  body: JSON.stringify({
320
- workflowId: 'checkout_simple_v1',
320
+ workflowId: 'workflows.checkout-demo',
321
321
  context: {
322
322
  cart: {
323
323
  items: demoCart,
@@ -424,7 +424,7 @@ export default function CheckoutDemoPage() {
424
424
  'Content-Type': 'application/json',
425
425
  },
426
426
  body: JSON.stringify({
427
- workflowId: 'checkout_simple_v1',
427
+ workflowId: 'workflows.checkout-demo',
428
428
  version: 1,
429
429
  correlationKey: `DEMO-ORDER-${Date.now()}`,
430
430
  initialContext,
@@ -65,9 +65,12 @@
65
65
  "workflows.actions.cancel": "Abbrechen",
66
66
  "workflows.actions.create": "Workflow erstellen",
67
67
  "workflows.actions.createVisual": "Workflow erstellen (visuell)",
68
+ "workflows.actions.customize": "Anpassen",
68
69
  "workflows.actions.editStep": "Schritt bearbeiten",
69
70
  "workflows.actions.editVisually": "Visuell bearbeiten",
70
71
  "workflows.actions.openVisualEditor": "Visuellen Editor öffnen",
72
+ "workflows.actions.resetConfirm": "Dies verwirft Ihre Anpassungen und stellt die codebasierte Version wieder her. Fortfahren?",
73
+ "workflows.actions.resetToCode": "Auf Code-Version zurücksetzen",
71
74
  "workflows.actions.saveChanges": "Änderungen speichern",
72
75
  "workflows.actions.toggleEnabled": "Klicken zum Aktivieren/Deaktivieren",
73
76
  "workflows.activities.activityId": "Aktivitäts-ID",
@@ -942,6 +945,11 @@
942
945
  "workflows.signals.singular": "Signal",
943
946
  "workflows.signals.timeout": "Signal-Zeitlimit",
944
947
  "workflows.signals.title": "Signale",
948
+ "workflows.source.code": "Code-definiert",
949
+ "workflows.source.code.readonlyBanner": "Dieser Workflow ist im Code definiert. Passen Sie ihn an, um Änderungen vorzunehmen.",
950
+ "workflows.source.code_override": "Angepasst",
951
+ "workflows.source.code_override.banner": "Dieser Workflow wurde von seiner codebasierten Version angepasst.",
952
+ "workflows.source.user": "Vom Benutzer erstellt",
945
953
  "workflows.steps.addStep": "Schritt hinzufügen",
946
954
  "workflows.steps.config": "Konfiguration",
947
955
  "workflows.steps.deleteStep": "Schritt löschen",
@@ -1144,6 +1152,8 @@
1144
1152
  "workflows.visualEditor.clear": "Löschen",
1145
1153
  "workflows.visualEditor.clearDescription": "Dies löscht alle Metadaten und die Workflow-Arbeitsfläche. Diese Aktion kann nicht rückgängig gemacht werden.",
1146
1154
  "workflows.visualEditor.clearTitle": "Alles löschen?",
1155
+ "workflows.visualEditor.clickToAdd": "Klicke auf einen Schritttyp, um ihn zur Arbeitsfläche hinzuzufügen",
1156
+ "workflows.visualEditor.clickToAddFromPalette": "Klicke auf einen Schritttyp aus der Palette, um ihn zur Arbeitsfläche hinzuzufügen",
1147
1157
  "workflows.visualEditor.hideMetadata": "Metadaten ausblenden",
1148
1158
  "workflows.visualEditor.hint.addSteps": "Klicke auf Schritttypen, um sie hinzuzufügen",
1149
1159
  "workflows.visualEditor.hint.connectSteps": "Verbinde Schritte durch Ziehen von den Griffen",
@@ -1152,8 +1162,14 @@
1152
1162
  "workflows.visualEditor.hint.validate": "Vor dem Speichern validieren",
1153
1163
  "workflows.visualEditor.howToUse": "Anleitung:",
1154
1164
  "workflows.visualEditor.loadExample": "Beispiel laden",
1165
+ "workflows.visualEditor.loadExampleWorkflow": "Beispiel-Workflow laden",
1166
+ "workflows.visualEditor.readOnly": "Schreibgeschützt",
1155
1167
  "workflows.visualEditor.runTest": "Test ausführen",
1156
1168
  "workflows.visualEditor.showMetadata": "Metadaten anzeigen",
1169
+ "workflows.visualEditor.startBuilding": "Beginne mit dem Aufbau deines Workflows",
1170
+ "workflows.visualEditor.stepPalette": "Schrittpalette",
1171
+ "workflows.visualEditor.tapToAdd": "Tippe auf einen Schritttyp, um ihn zur Arbeitsfläche hinzuzufügen",
1172
+ "workflows.visualEditor.tapToAddBelow": "Tippe unten auf einen Schritttyp, um ihn zur Arbeitsfläche hinzuzufügen",
1157
1173
  "workflows.visualEditor.validate": "Validieren",
1158
1174
  "workflows.visualEditor.workflowMetadata": "Workflow-Metadaten"
1159
1175
  }
@@ -65,9 +65,12 @@
65
65
  "workflows.actions.cancel": "Cancel",
66
66
  "workflows.actions.create": "Create Workflow",
67
67
  "workflows.actions.createVisual": "Create Workflow (Visual)",
68
+ "workflows.actions.customize": "Customize",
68
69
  "workflows.actions.editStep": "Edit Step",
69
70
  "workflows.actions.editVisually": "Edit Visually",
70
71
  "workflows.actions.openVisualEditor": "Open Visual Editor",
72
+ "workflows.actions.resetConfirm": "This will discard your customizations and restore the code-defined version. Continue?",
73
+ "workflows.actions.resetToCode": "Reset to code version",
71
74
  "workflows.actions.saveChanges": "Save Changes",
72
75
  "workflows.actions.toggleEnabled": "Click to enable/disable",
73
76
  "workflows.activities.activityId": "Activity ID",
@@ -942,6 +945,11 @@
942
945
  "workflows.signals.singular": "Signal",
943
946
  "workflows.signals.timeout": "Signal Timeout",
944
947
  "workflows.signals.title": "Signals",
948
+ "workflows.source.code": "Code-defined",
949
+ "workflows.source.code.readonlyBanner": "This workflow is defined in code. Customize it to make changes.",
950
+ "workflows.source.code_override": "Customized",
951
+ "workflows.source.code_override.banner": "This workflow has been customized from its code-defined version.",
952
+ "workflows.source.user": "User-created",
945
953
  "workflows.steps.addStep": "Add Step",
946
954
  "workflows.steps.config": "Configuration",
947
955
  "workflows.steps.deleteStep": "Delete Step",
@@ -1144,6 +1152,8 @@
1144
1152
  "workflows.visualEditor.clear": "Clear",
1145
1153
  "workflows.visualEditor.clearDescription": "This will clear all metadata and the workflow canvas. This action cannot be undone.",
1146
1154
  "workflows.visualEditor.clearTitle": "Clear Everything?",
1155
+ "workflows.visualEditor.clickToAdd": "Click a step type to add it to the canvas",
1156
+ "workflows.visualEditor.clickToAddFromPalette": "Click a step type from the palette to add it to the canvas",
1147
1157
  "workflows.visualEditor.hideMetadata": "Hide Metadata",
1148
1158
  "workflows.visualEditor.hint.addSteps": "Click step types to add them",
1149
1159
  "workflows.visualEditor.hint.connectSteps": "Connect steps by dragging from handles",
@@ -1152,8 +1162,14 @@
1152
1162
  "workflows.visualEditor.hint.validate": "Validate before saving",
1153
1163
  "workflows.visualEditor.howToUse": "How to use:",
1154
1164
  "workflows.visualEditor.loadExample": "Load Example",
1165
+ "workflows.visualEditor.loadExampleWorkflow": "Load an example workflow",
1166
+ "workflows.visualEditor.readOnly": "Read-only",
1155
1167
  "workflows.visualEditor.runTest": "Run Test",
1156
1168
  "workflows.visualEditor.showMetadata": "Show Metadata",
1169
+ "workflows.visualEditor.startBuilding": "Start Building Your Workflow",
1170
+ "workflows.visualEditor.stepPalette": "Step Palette",
1171
+ "workflows.visualEditor.tapToAdd": "Tap a step type to add it to the canvas",
1172
+ "workflows.visualEditor.tapToAddBelow": "Tap a step type below to add it to the canvas",
1157
1173
  "workflows.visualEditor.validate": "Validate",
1158
1174
  "workflows.visualEditor.workflowMetadata": "Workflow Metadata"
1159
1175
  }
@@ -65,9 +65,12 @@
65
65
  "workflows.actions.cancel": "Cancelar",
66
66
  "workflows.actions.create": "Crear flujo de trabajo",
67
67
  "workflows.actions.createVisual": "Crear flujo de trabajo (visual)",
68
+ "workflows.actions.customize": "Personalizar",
68
69
  "workflows.actions.editStep": "Editar paso",
69
70
  "workflows.actions.editVisually": "Editar visualmente",
70
71
  "workflows.actions.openVisualEditor": "Abrir editor visual",
72
+ "workflows.actions.resetConfirm": "Esto descartará sus personalizaciones y restaurará la versión definida en código. ¿Continuar?",
73
+ "workflows.actions.resetToCode": "Restablecer a la versión de código",
71
74
  "workflows.actions.saveChanges": "Guardar cambios",
72
75
  "workflows.actions.toggleEnabled": "Clic para habilitar/deshabilitar",
73
76
  "workflows.activities.activityId": "ID de actividad",
@@ -942,6 +945,11 @@
942
945
  "workflows.signals.singular": "Senal",
943
946
  "workflows.signals.timeout": "Tiempo limite de la senal",
944
947
  "workflows.signals.title": "Senales",
948
+ "workflows.source.code": "Definido en código",
949
+ "workflows.source.code.readonlyBanner": "Este flujo de trabajo está definido en código. Personalícelo para realizar cambios.",
950
+ "workflows.source.code_override": "Personalizado",
951
+ "workflows.source.code_override.banner": "Este flujo de trabajo ha sido personalizado a partir de su versión definida en código.",
952
+ "workflows.source.user": "Creado por usuario",
945
953
  "workflows.steps.addStep": "Agregar paso",
946
954
  "workflows.steps.config": "Configuracion",
947
955
  "workflows.steps.deleteStep": "Eliminar paso",
@@ -1144,6 +1152,8 @@
1144
1152
  "workflows.visualEditor.clear": "Borrar",
1145
1153
  "workflows.visualEditor.clearDescription": "Esto borrará todos los metadatos y el lienzo del flujo de trabajo. Esta acción no se puede deshacer.",
1146
1154
  "workflows.visualEditor.clearTitle": "¿Borrar todo?",
1155
+ "workflows.visualEditor.clickToAdd": "Haz clic en un tipo de paso para añadirlo al lienzo",
1156
+ "workflows.visualEditor.clickToAddFromPalette": "Haz clic en un tipo de paso de la paleta para añadirlo al lienzo",
1147
1157
  "workflows.visualEditor.hideMetadata": "Ocultar metadatos",
1148
1158
  "workflows.visualEditor.hint.addSteps": "Haz clic en los tipos de pasos para agregarlos",
1149
1159
  "workflows.visualEditor.hint.connectSteps": "Conecta pasos arrastrando desde los conectores",
@@ -1152,8 +1162,14 @@
1152
1162
  "workflows.visualEditor.hint.validate": "Valida antes de guardar",
1153
1163
  "workflows.visualEditor.howToUse": "Cómo usar:",
1154
1164
  "workflows.visualEditor.loadExample": "Cargar ejemplo",
1165
+ "workflows.visualEditor.loadExampleWorkflow": "Cargar un flujo de trabajo de ejemplo",
1166
+ "workflows.visualEditor.readOnly": "Solo lectura",
1155
1167
  "workflows.visualEditor.runTest": "Ejecutar prueba",
1156
1168
  "workflows.visualEditor.showMetadata": "Mostrar metadatos",
1169
+ "workflows.visualEditor.startBuilding": "Empieza a construir tu flujo de trabajo",
1170
+ "workflows.visualEditor.stepPalette": "Paleta de pasos",
1171
+ "workflows.visualEditor.tapToAdd": "Toca un tipo de paso para añadirlo al lienzo",
1172
+ "workflows.visualEditor.tapToAddBelow": "Toca un tipo de paso debajo para añadirlo al lienzo",
1157
1173
  "workflows.visualEditor.validate": "Validar",
1158
1174
  "workflows.visualEditor.workflowMetadata": "Metadatos del flujo de trabajo"
1159
1175
  }
@@ -65,9 +65,12 @@
65
65
  "workflows.actions.cancel": "Anuluj",
66
66
  "workflows.actions.create": "Utwórz Przepływ Pracy",
67
67
  "workflows.actions.createVisual": "Utwórz Przepływ (Wizualnie)",
68
+ "workflows.actions.customize": "Dostosuj",
68
69
  "workflows.actions.editStep": "Edytuj Krok",
69
70
  "workflows.actions.editVisually": "Edytuj Wizualnie",
70
71
  "workflows.actions.openVisualEditor": "Otwórz Edytor Wizualny",
72
+ "workflows.actions.resetConfirm": "Spowoduje to odrzucenie dostosowań i przywrócenie wersji zdefiniowanej w kodzie. Kontynuować?",
73
+ "workflows.actions.resetToCode": "Przywróć wersję z kodu",
71
74
  "workflows.actions.saveChanges": "Zapisz Zmiany",
72
75
  "workflows.actions.toggleEnabled": "Kliknij aby włączyć/wyłączyć",
73
76
  "workflows.activities.activityId": "ID Działania",
@@ -942,6 +945,11 @@
942
945
  "workflows.signals.singular": "Sygnał",
943
946
  "workflows.signals.timeout": "Limit Czasu Sygnału",
944
947
  "workflows.signals.title": "Sygnały",
948
+ "workflows.source.code": "Zdefiniowany w kodzie",
949
+ "workflows.source.code.readonlyBanner": "Ten przepływ pracy jest zdefiniowany w kodzie. Dostosuj go, aby wprowadzić zmiany.",
950
+ "workflows.source.code_override": "Dostosowany",
951
+ "workflows.source.code_override.banner": "Ten przepływ pracy został dostosowany względem wersji zdefiniowanej w kodzie.",
952
+ "workflows.source.user": "Utworzony przez użytkownika",
945
953
  "workflows.steps.addStep": "Dodaj Krok",
946
954
  "workflows.steps.config": "Konfiguracja",
947
955
  "workflows.steps.deleteStep": "Usuń Krok",
@@ -1144,6 +1152,8 @@
1144
1152
  "workflows.visualEditor.clear": "Wyczyść",
1145
1153
  "workflows.visualEditor.clearDescription": "Spowoduje to wyczyszczenie wszystkich metadanych i obszaru roboczego przepływu pracy. Tej czynności nie można cofnąć.",
1146
1154
  "workflows.visualEditor.clearTitle": "Wyczyścić wszystko?",
1155
+ "workflows.visualEditor.clickToAdd": "Kliknij typ kroku, aby dodać go do obszaru roboczego",
1156
+ "workflows.visualEditor.clickToAddFromPalette": "Kliknij typ kroku z palety, aby dodać go do obszaru roboczego",
1147
1157
  "workflows.visualEditor.hideMetadata": "Ukryj metadane",
1148
1158
  "workflows.visualEditor.hint.addSteps": "Kliknij typy kroków, aby je dodać",
1149
1159
  "workflows.visualEditor.hint.connectSteps": "Łącz kroki, przeciągając z uchwytów",
@@ -1152,8 +1162,14 @@
1152
1162
  "workflows.visualEditor.hint.validate": "Zwaliduj przed zapisaniem",
1153
1163
  "workflows.visualEditor.howToUse": "Jak używać:",
1154
1164
  "workflows.visualEditor.loadExample": "Załaduj przykład",
1165
+ "workflows.visualEditor.loadExampleWorkflow": "Załaduj przykładowy przepływ pracy",
1166
+ "workflows.visualEditor.readOnly": "Tylko do odczytu",
1155
1167
  "workflows.visualEditor.runTest": "Uruchom test",
1156
1168
  "workflows.visualEditor.showMetadata": "Pokaż metadane",
1169
+ "workflows.visualEditor.startBuilding": "Zacznij budować swój przepływ pracy",
1170
+ "workflows.visualEditor.stepPalette": "Paleta kroków",
1171
+ "workflows.visualEditor.tapToAdd": "Dotknij typu kroku, aby dodać go do obszaru roboczego",
1172
+ "workflows.visualEditor.tapToAddBelow": "Dotknij typu kroku poniżej, aby dodać go do obszaru roboczego",
1157
1173
  "workflows.visualEditor.validate": "Waliduj",
1158
1174
  "workflows.visualEditor.workflowMetadata": "Metadane przepływu pracy"
1159
1175
  }