@open-mercato/core 0.4.2-canary-d0a025141f → 0.4.2-canary-3efa759f5c
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/generated/entities.ids.generated.js +0 -1
- package/dist/generated/entities.ids.generated.js.map +2 -2
- package/dist/generated/entity-fields-registry.js +0 -2
- package/dist/generated/entity-fields-registry.js.map +2 -2
- package/dist/modules/business_rules/data/validators.js +0 -34
- package/dist/modules/business_rules/data/validators.js.map +2 -2
- package/dist/modules/business_rules/index.js +1 -21
- package/dist/modules/business_rules/index.js.map +2 -2
- package/dist/modules/business_rules/lib/rule-engine.js +1 -182
- package/dist/modules/business_rules/lib/rule-engine.js.map +2 -2
- package/dist/modules/sales/acl.js +0 -1
- package/dist/modules/sales/acl.js.map +2 -2
- package/dist/modules/sales/backend/sales/documents/[id]/page.js +0 -12
- package/dist/modules/sales/backend/sales/documents/[id]/page.js.map +2 -2
- package/dist/modules/sales/commands/documents.js +0 -62
- package/dist/modules/sales/commands/documents.js.map +2 -2
- package/dist/modules/sales/lib/dictionaries.js +0 -3
- package/dist/modules/sales/lib/dictionaries.js.map +2 -2
- package/dist/modules/workflows/acl.js +0 -2
- package/dist/modules/workflows/acl.js.map +2 -2
- package/dist/modules/workflows/api/instances/route.js +6 -18
- package/dist/modules/workflows/api/instances/route.js.map +2 -2
- package/dist/modules/workflows/api/tasks/route.js +1 -6
- package/dist/modules/workflows/api/tasks/route.js.map +2 -2
- package/dist/modules/workflows/backend/definitions/[id]/page.js +1 -9
- package/dist/modules/workflows/backend/definitions/[id]/page.js.map +2 -2
- package/dist/modules/workflows/backend/definitions/[id]/page.meta.js +1 -1
- package/dist/modules/workflows/backend/definitions/[id]/page.meta.js.map +2 -2
- package/dist/modules/workflows/backend/definitions/create/page.js +15 -24
- package/dist/modules/workflows/backend/definitions/create/page.js.map +2 -2
- package/dist/modules/workflows/backend/definitions/create/page.meta.js +1 -1
- package/dist/modules/workflows/backend/definitions/create/page.meta.js.map +2 -2
- package/dist/modules/workflows/backend/definitions/visual-editor/page.js +132 -150
- package/dist/modules/workflows/backend/definitions/visual-editor/page.js.map +2 -2
- package/dist/modules/workflows/backend/definitions/visual-editor/page.meta.js +1 -1
- package/dist/modules/workflows/backend/definitions/visual-editor/page.meta.js.map +2 -2
- package/dist/modules/workflows/backend/events/[id]/page.js +1 -1
- package/dist/modules/workflows/backend/events/[id]/page.js.map +2 -2
- package/dist/modules/workflows/backend/events/[id]/page.meta.js +2 -2
- package/dist/modules/workflows/backend/events/[id]/page.meta.js.map +2 -2
- package/dist/modules/workflows/backend/instances/[id]/page.meta.js +2 -2
- package/dist/modules/workflows/backend/instances/[id]/page.meta.js.map +2 -2
- package/dist/modules/workflows/backend/tasks/[id]/page.js +1 -1
- package/dist/modules/workflows/backend/tasks/[id]/page.js.map +2 -2
- package/dist/modules/workflows/backend/tasks/[id]/page.meta.js +2 -2
- package/dist/modules/workflows/backend/tasks/[id]/page.meta.js.map +2 -2
- package/dist/modules/workflows/backend/tasks/page.js +6 -5
- package/dist/modules/workflows/backend/tasks/page.js.map +2 -2
- package/dist/modules/workflows/cli.js +3 -81
- package/dist/modules/workflows/cli.js.map +3 -3
- package/dist/modules/workflows/data/entities.js +1 -64
- package/dist/modules/workflows/data/entities.js.map +2 -2
- package/dist/modules/workflows/data/validators.js +0 -115
- package/dist/modules/workflows/data/validators.js.map +2 -2
- package/dist/modules/workflows/examples/checkout-demo-definition.json +5 -1
- package/dist/modules/workflows/lib/activity-executor.js +13 -75
- package/dist/modules/workflows/lib/activity-executor.js.map +2 -2
- package/dist/modules/workflows/lib/graph-utils.js +2 -71
- package/dist/modules/workflows/lib/graph-utils.js.map +2 -2
- package/dist/modules/workflows/lib/seeds.js +5 -22
- package/dist/modules/workflows/lib/seeds.js.map +2 -2
- package/dist/modules/workflows/lib/start-validator.js +23 -33
- package/dist/modules/workflows/lib/start-validator.js.map +2 -2
- package/dist/modules/workflows/lib/transition-handler.js +45 -157
- package/dist/modules/workflows/lib/transition-handler.js.map +3 -3
- package/generated/entities.ids.generated.ts +0 -1
- package/generated/entity-fields-registry.ts +0 -2
- package/package.json +2 -2
- package/src/modules/business_rules/data/validators.ts +0 -40
- package/src/modules/business_rules/index.ts +0 -25
- package/src/modules/business_rules/lib/rule-engine.ts +1 -281
- package/src/modules/sales/acl.ts +0 -1
- package/src/modules/sales/backend/sales/documents/[id]/page.tsx +0 -16
- package/src/modules/sales/commands/documents.ts +1 -74
- package/src/modules/sales/lib/dictionaries.ts +0 -3
- package/src/modules/workflows/acl.ts +0 -2
- package/src/modules/workflows/api/__tests__/instances.route.test.ts +2 -5
- package/src/modules/workflows/api/instances/route.ts +7 -21
- package/src/modules/workflows/api/tasks/route.ts +1 -7
- package/src/modules/workflows/backend/definitions/[id]/page.meta.ts +1 -1
- package/src/modules/workflows/backend/definitions/[id]/page.tsx +0 -9
- package/src/modules/workflows/backend/definitions/create/page.meta.ts +1 -1
- package/src/modules/workflows/backend/definitions/create/page.tsx +0 -9
- package/src/modules/workflows/backend/definitions/visual-editor/page.meta.ts +1 -1
- package/src/modules/workflows/backend/definitions/visual-editor/page.tsx +3 -21
- package/src/modules/workflows/backend/events/[id]/page.meta.ts +2 -2
- package/src/modules/workflows/backend/events/[id]/page.tsx +1 -1
- package/src/modules/workflows/backend/instances/[id]/page.meta.ts +2 -2
- package/src/modules/workflows/backend/tasks/[id]/page.meta.ts +2 -2
- package/src/modules/workflows/backend/tasks/[id]/page.tsx +1 -1
- package/src/modules/workflows/backend/tasks/page.tsx +6 -5
- package/src/modules/workflows/cli.ts +0 -111
- package/src/modules/workflows/data/entities.ts +0 -124
- package/src/modules/workflows/data/validators.ts +0 -138
- package/src/modules/workflows/examples/checkout-demo-definition.json +5 -1
- package/src/modules/workflows/i18n/en.json +0 -71
- package/src/modules/workflows/lib/__tests__/activity-executor.test.ts +36 -43
- package/src/modules/workflows/lib/__tests__/transition-handler.test.ts +90 -170
- package/src/modules/workflows/lib/activity-executor.ts +16 -129
- package/src/modules/workflows/lib/graph-utils.ts +2 -117
- package/src/modules/workflows/lib/seeds.ts +8 -34
- package/src/modules/workflows/lib/start-validator.ts +28 -38
- package/src/modules/workflows/lib/transition-handler.ts +55 -208
- package/dist/generated/entities/workflow_event_trigger/index.js +0 -33
- package/dist/generated/entities/workflow_event_trigger/index.js.map +0 -7
- package/dist/modules/auth/events.js +0 -30
- package/dist/modules/auth/events.js.map +0 -7
- package/dist/modules/business_rules/api/execute/[ruleId]/route.js +0 -145
- package/dist/modules/business_rules/api/execute/[ruleId]/route.js.map +0 -7
- package/dist/modules/catalog/events.js +0 -34
- package/dist/modules/catalog/events.js.map +0 -7
- package/dist/modules/customers/events.js +0 -49
- package/dist/modules/customers/events.js.map +0 -7
- package/dist/modules/directory/events.js +0 -23
- package/dist/modules/directory/events.js.map +0 -7
- package/dist/modules/sales/events.js +0 -63
- package/dist/modules/sales/events.js.map +0 -7
- package/dist/modules/sales/lib/frontend/documentDataEvents.js +0 -25
- package/dist/modules/sales/lib/frontend/documentDataEvents.js.map +0 -7
- package/dist/modules/workflows/components/DefinitionTriggersEditor.js +0 -481
- package/dist/modules/workflows/components/DefinitionTriggersEditor.js.map +0 -7
- package/dist/modules/workflows/components/EventTriggersEditor.js +0 -553
- package/dist/modules/workflows/components/EventTriggersEditor.js.map +0 -7
- package/dist/modules/workflows/events.js +0 -38
- package/dist/modules/workflows/events.js.map +0 -7
- package/dist/modules/workflows/examples/order-approval-definition.json +0 -257
- package/dist/modules/workflows/examples/order-approval-guard-rules.json +0 -32
- package/dist/modules/workflows/lib/event-trigger-service.js +0 -308
- package/dist/modules/workflows/lib/event-trigger-service.js.map +0 -7
- package/dist/modules/workflows/migrations/Migration20260123143500.js +0 -36
- package/dist/modules/workflows/migrations/Migration20260123143500.js.map +0 -7
- package/dist/modules/workflows/subscribers/event-trigger.js +0 -78
- package/dist/modules/workflows/subscribers/event-trigger.js.map +0 -7
- package/dist/modules/workflows/widgets/injection/order-approval/widget.client.js +0 -323
- package/dist/modules/workflows/widgets/injection/order-approval/widget.client.js.map +0 -7
- package/dist/modules/workflows/widgets/injection/order-approval/widget.js +0 -17
- package/dist/modules/workflows/widgets/injection/order-approval/widget.js.map +0 -7
- package/dist/modules/workflows/widgets/injection-table.js +0 -19
- package/dist/modules/workflows/widgets/injection-table.js.map +0 -7
- package/generated/entities/workflow_event_trigger/index.ts +0 -15
- package/src/modules/auth/events.ts +0 -39
- package/src/modules/business_rules/api/execute/[ruleId]/route.ts +0 -163
- package/src/modules/catalog/events.ts +0 -45
- package/src/modules/customers/events.ts +0 -63
- package/src/modules/directory/events.ts +0 -31
- package/src/modules/sales/events.ts +0 -82
- package/src/modules/sales/lib/frontend/documentDataEvents.ts +0 -28
- package/src/modules/workflows/components/DefinitionTriggersEditor.tsx +0 -581
- package/src/modules/workflows/components/EventTriggersEditor.tsx +0 -664
- package/src/modules/workflows/events.ts +0 -49
- package/src/modules/workflows/examples/order-approval-definition.json +0 -257
- package/src/modules/workflows/examples/order-approval-guard-rules.json +0 -32
- package/src/modules/workflows/lib/event-trigger-service.ts +0 -557
- package/src/modules/workflows/migrations/Migration20260123143500.ts +0 -38
- package/src/modules/workflows/subscribers/event-trigger.ts +0 -109
- package/src/modules/workflows/widgets/injection/order-approval/widget.client.tsx +0 -446
- package/src/modules/workflows/widgets/injection/order-approval/widget.ts +0 -16
- package/src/modules/workflows/widgets/injection-table.ts +0 -21
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { createModuleEvents } from "@open-mercato/shared/modules/events";
|
|
2
|
-
const events = [
|
|
3
|
-
// Workflow Definitions
|
|
4
|
-
{ id: "workflows.definitions.created", label: "Workflow Definition Created", entity: "definitions", category: "crud" },
|
|
5
|
-
{ id: "workflows.definitions.updated", label: "Workflow Definition Updated", entity: "definitions", category: "crud" },
|
|
6
|
-
{ id: "workflows.definitions.deleted", label: "Workflow Definition Deleted", entity: "definitions", category: "crud" },
|
|
7
|
-
// Workflow Instances
|
|
8
|
-
{ id: "workflows.instances.created", label: "Workflow Instance Created", entity: "instances", category: "crud" },
|
|
9
|
-
{ id: "workflows.instances.updated", label: "Workflow Instance Updated", entity: "instances", category: "crud" },
|
|
10
|
-
{ id: "workflows.instances.deleted", label: "Workflow Instance Deleted", entity: "instances", category: "crud" },
|
|
11
|
-
// Workflow Lifecycle Events
|
|
12
|
-
{ id: "workflows.instance.started", label: "Workflow Started", category: "lifecycle" },
|
|
13
|
-
{ id: "workflows.instance.completed", label: "Workflow Completed", category: "lifecycle" },
|
|
14
|
-
{ id: "workflows.instance.failed", label: "Workflow Failed", category: "lifecycle" },
|
|
15
|
-
{ id: "workflows.instance.cancelled", label: "Workflow Cancelled", category: "lifecycle" },
|
|
16
|
-
{ id: "workflows.instance.paused", label: "Workflow Paused", category: "lifecycle" },
|
|
17
|
-
{ id: "workflows.instance.resumed", label: "Workflow Resumed", category: "lifecycle" },
|
|
18
|
-
// Activity Events
|
|
19
|
-
{ id: "workflows.activity.started", label: "Activity Started", category: "lifecycle" },
|
|
20
|
-
{ id: "workflows.activity.completed", label: "Activity Completed", category: "lifecycle" },
|
|
21
|
-
{ id: "workflows.activity.failed", label: "Activity Failed", category: "lifecycle" },
|
|
22
|
-
// Event Triggers
|
|
23
|
-
{ id: "workflows.triggers.created", label: "Trigger Created", entity: "triggers", category: "crud" },
|
|
24
|
-
{ id: "workflows.triggers.updated", label: "Trigger Updated", entity: "triggers", category: "crud" },
|
|
25
|
-
{ id: "workflows.triggers.deleted", label: "Trigger Deleted", entity: "triggers", category: "crud" }
|
|
26
|
-
];
|
|
27
|
-
const eventsConfig = createModuleEvents({
|
|
28
|
-
moduleId: "workflows",
|
|
29
|
-
events
|
|
30
|
-
});
|
|
31
|
-
const emitWorkflowsEvent = eventsConfig.emit;
|
|
32
|
-
var events_default = eventsConfig;
|
|
33
|
-
export {
|
|
34
|
-
events_default as default,
|
|
35
|
-
emitWorkflowsEvent,
|
|
36
|
-
eventsConfig
|
|
37
|
-
};
|
|
38
|
-
//# sourceMappingURL=events.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/modules/workflows/events.ts"],
|
|
4
|
-
"sourcesContent": ["import { createModuleEvents } from '@open-mercato/shared/modules/events'\n\n/**\n * Workflows Module Events\n *\n * Declares all events that can be emitted by the workflows module.\n */\nconst events = [\n // Workflow Definitions\n { id: 'workflows.definitions.created', label: 'Workflow Definition Created', entity: 'definitions', category: 'crud' },\n { id: 'workflows.definitions.updated', label: 'Workflow Definition Updated', entity: 'definitions', category: 'crud' },\n { id: 'workflows.definitions.deleted', label: 'Workflow Definition Deleted', entity: 'definitions', category: 'crud' },\n\n // Workflow Instances\n { id: 'workflows.instances.created', label: 'Workflow Instance Created', entity: 'instances', category: 'crud' },\n { id: 'workflows.instances.updated', label: 'Workflow Instance Updated', entity: 'instances', category: 'crud' },\n { id: 'workflows.instances.deleted', label: 'Workflow Instance Deleted', entity: 'instances', category: 'crud' },\n\n // Workflow Lifecycle Events\n { id: 'workflows.instance.started', label: 'Workflow Started', category: 'lifecycle' },\n { id: 'workflows.instance.completed', label: 'Workflow Completed', category: 'lifecycle' },\n { id: 'workflows.instance.failed', label: 'Workflow Failed', category: 'lifecycle' },\n { id: 'workflows.instance.cancelled', label: 'Workflow Cancelled', category: 'lifecycle' },\n { id: 'workflows.instance.paused', label: 'Workflow Paused', category: 'lifecycle' },\n { id: 'workflows.instance.resumed', label: 'Workflow Resumed', category: 'lifecycle' },\n\n // Activity Events\n { id: 'workflows.activity.started', label: 'Activity Started', category: 'lifecycle' },\n { id: 'workflows.activity.completed', label: 'Activity Completed', category: 'lifecycle' },\n { id: 'workflows.activity.failed', label: 'Activity Failed', category: 'lifecycle' },\n\n // Event Triggers\n { id: 'workflows.triggers.created', label: 'Trigger Created', entity: 'triggers', category: 'crud' },\n { id: 'workflows.triggers.updated', label: 'Trigger Updated', entity: 'triggers', category: 'crud' },\n { id: 'workflows.triggers.deleted', label: 'Trigger Deleted', entity: 'triggers', category: 'crud' },\n] as const\n\nexport const eventsConfig = createModuleEvents({\n moduleId: 'workflows',\n events,\n})\n\n/** Type-safe event emitter for workflows module */\nexport const emitWorkflowsEvent = eventsConfig.emit\n\n/** Event IDs that can be emitted by the workflows module */\nexport type WorkflowsEventId = typeof events[number]['id']\n\nexport default eventsConfig\n"],
|
|
5
|
-
"mappings": "AAAA,SAAS,0BAA0B;AAOnC,MAAM,SAAS;AAAA;AAAA,EAEb,EAAE,IAAI,iCAAiC,OAAO,+BAA+B,QAAQ,eAAe,UAAU,OAAO;AAAA,EACrH,EAAE,IAAI,iCAAiC,OAAO,+BAA+B,QAAQ,eAAe,UAAU,OAAO;AAAA,EACrH,EAAE,IAAI,iCAAiC,OAAO,+BAA+B,QAAQ,eAAe,UAAU,OAAO;AAAA;AAAA,EAGrH,EAAE,IAAI,+BAA+B,OAAO,6BAA6B,QAAQ,aAAa,UAAU,OAAO;AAAA,EAC/G,EAAE,IAAI,+BAA+B,OAAO,6BAA6B,QAAQ,aAAa,UAAU,OAAO;AAAA,EAC/G,EAAE,IAAI,+BAA+B,OAAO,6BAA6B,QAAQ,aAAa,UAAU,OAAO;AAAA;AAAA,EAG/G,EAAE,IAAI,8BAA8B,OAAO,oBAAoB,UAAU,YAAY;AAAA,EACrF,EAAE,IAAI,gCAAgC,OAAO,sBAAsB,UAAU,YAAY;AAAA,EACzF,EAAE,IAAI,6BAA6B,OAAO,mBAAmB,UAAU,YAAY;AAAA,EACnF,EAAE,IAAI,gCAAgC,OAAO,sBAAsB,UAAU,YAAY;AAAA,EACzF,EAAE,IAAI,6BAA6B,OAAO,mBAAmB,UAAU,YAAY;AAAA,EACnF,EAAE,IAAI,8BAA8B,OAAO,oBAAoB,UAAU,YAAY;AAAA;AAAA,EAGrF,EAAE,IAAI,8BAA8B,OAAO,oBAAoB,UAAU,YAAY;AAAA,EACrF,EAAE,IAAI,gCAAgC,OAAO,sBAAsB,UAAU,YAAY;AAAA,EACzF,EAAE,IAAI,6BAA6B,OAAO,mBAAmB,UAAU,YAAY;AAAA;AAAA,EAGnF,EAAE,IAAI,8BAA8B,OAAO,mBAAmB,QAAQ,YAAY,UAAU,OAAO;AAAA,EACnG,EAAE,IAAI,8BAA8B,OAAO,mBAAmB,QAAQ,YAAY,UAAU,OAAO;AAAA,EACnG,EAAE,IAAI,8BAA8B,OAAO,mBAAmB,QAAQ,YAAY,UAAU,OAAO;AACrG;AAEO,MAAM,eAAe,mBAAmB;AAAA,EAC7C,UAAU;AAAA,EACV;AACF,CAAC;AAGM,MAAM,qBAAqB,aAAa;AAK/C,IAAO,iBAAQ;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,257 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"workflowId": "sales_order_approval_v1",
|
|
3
|
-
"workflowName": "Sales Order Approval Workflow",
|
|
4
|
-
"description": "Approval workflow for sales orders requiring authorization before processing",
|
|
5
|
-
"version": 1,
|
|
6
|
-
"enabled": true,
|
|
7
|
-
"metadata": {
|
|
8
|
-
"category": "Sales",
|
|
9
|
-
"tags": [
|
|
10
|
-
"sales",
|
|
11
|
-
"approval",
|
|
12
|
-
"order"
|
|
13
|
-
],
|
|
14
|
-
"icon": "check-circle",
|
|
15
|
-
"entityType": "SalesOrder"
|
|
16
|
-
},
|
|
17
|
-
"definition": {
|
|
18
|
-
"steps": [
|
|
19
|
-
{
|
|
20
|
-
"stepId": "start",
|
|
21
|
-
"stepName": "Start",
|
|
22
|
-
"stepType": "START",
|
|
23
|
-
"description": "Initialize order approval workflow"
|
|
24
|
-
},
|
|
25
|
-
{
|
|
26
|
-
"stepId": "pending_approval",
|
|
27
|
-
"stepName": "Pending Approval",
|
|
28
|
-
"stepType": "USER_TASK",
|
|
29
|
-
"description": "Order awaiting approval decision",
|
|
30
|
-
"userTaskConfig": {
|
|
31
|
-
"formSchema": {
|
|
32
|
-
"type": "object",
|
|
33
|
-
"required": [
|
|
34
|
-
"decision"
|
|
35
|
-
],
|
|
36
|
-
"properties": {
|
|
37
|
-
"comments": {
|
|
38
|
-
"type": "string",
|
|
39
|
-
"title": "Comments",
|
|
40
|
-
"description": "Optional comments for the decision"
|
|
41
|
-
},
|
|
42
|
-
"decision": {
|
|
43
|
-
"enum": [
|
|
44
|
-
"approve",
|
|
45
|
-
"reject"
|
|
46
|
-
],
|
|
47
|
-
"type": "string",
|
|
48
|
-
"title": "Decision",
|
|
49
|
-
"description": "Approve or reject the order"
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
},
|
|
53
|
-
"slaDuration": "PT24H"
|
|
54
|
-
}
|
|
55
|
-
},
|
|
56
|
-
{
|
|
57
|
-
"stepId": "approved",
|
|
58
|
-
"stepName": "Approved",
|
|
59
|
-
"stepType": "AUTOMATED",
|
|
60
|
-
"description": "Order has been approved"
|
|
61
|
-
},
|
|
62
|
-
{
|
|
63
|
-
"stepId": "rejected",
|
|
64
|
-
"stepName": "Rejected",
|
|
65
|
-
"stepType": "AUTOMATED",
|
|
66
|
-
"description": "Order has been rejected"
|
|
67
|
-
},
|
|
68
|
-
{
|
|
69
|
-
"stepId": "end",
|
|
70
|
-
"stepName": "Complete",
|
|
71
|
-
"stepType": "END",
|
|
72
|
-
"description": "Workflow complete"
|
|
73
|
-
}
|
|
74
|
-
],
|
|
75
|
-
"triggers": [
|
|
76
|
-
{
|
|
77
|
-
"name": "Order Approval Trigger",
|
|
78
|
-
"config": {
|
|
79
|
-
"entityType": "SalesOrder"
|
|
80
|
-
},
|
|
81
|
-
"enabled": true,
|
|
82
|
-
"priority": 0,
|
|
83
|
-
"triggerId": "order_approval_trigger",
|
|
84
|
-
"description": "Triggers when a new sales order is created",
|
|
85
|
-
"eventPattern": "sales.orders.created"
|
|
86
|
-
}
|
|
87
|
-
],
|
|
88
|
-
"transitions": [
|
|
89
|
-
{
|
|
90
|
-
"transitionId": "start_to_pending",
|
|
91
|
-
"transitionName": "Submit for Approval",
|
|
92
|
-
"fromStepId": "start",
|
|
93
|
-
"toStepId": "pending_approval",
|
|
94
|
-
"trigger": "auto",
|
|
95
|
-
"priority": 100,
|
|
96
|
-
"continueOnActivityFailure": true,
|
|
97
|
-
"activities": [
|
|
98
|
-
{
|
|
99
|
-
"activityId": "set_pending_status",
|
|
100
|
-
"activityName": "Set Order to Pending Approval",
|
|
101
|
-
"activityType": "UPDATE_ENTITY",
|
|
102
|
-
"async": false,
|
|
103
|
-
"config": {
|
|
104
|
-
"commandId": "sales.orders.update",
|
|
105
|
-
"statusDictionary": "sales.order_status",
|
|
106
|
-
"input": {
|
|
107
|
-
"id": "{{context.id}}",
|
|
108
|
-
"statusValue": "pending_approval"
|
|
109
|
-
}
|
|
110
|
-
},
|
|
111
|
-
"retryPolicy": {
|
|
112
|
-
"maxAttempts": 3,
|
|
113
|
-
"initialIntervalMs": 1000,
|
|
114
|
-
"backoffCoefficient": 2,
|
|
115
|
-
"maxIntervalMs": 10000
|
|
116
|
-
}
|
|
117
|
-
},
|
|
118
|
-
{
|
|
119
|
-
"activityId": "emit_approval_requested",
|
|
120
|
-
"activityName": "Emit Approval Requested Event",
|
|
121
|
-
"activityType": "EMIT_EVENT",
|
|
122
|
-
"async": true,
|
|
123
|
-
"config": {
|
|
124
|
-
"eventName": "sales.order.approval.requested",
|
|
125
|
-
"payload": {
|
|
126
|
-
"orderId": "{{context.id}}",
|
|
127
|
-
"workflowInstanceId": "{{workflow.instanceId}}"
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
]
|
|
132
|
-
},
|
|
133
|
-
{
|
|
134
|
-
"transitionId": "pending_approval_to_approved",
|
|
135
|
-
"transitionName": "Approve Order",
|
|
136
|
-
"fromStepId": "pending_approval",
|
|
137
|
-
"toStepId": "approved",
|
|
138
|
-
"trigger": "auto",
|
|
139
|
-
"priority": 100,
|
|
140
|
-
"preConditions": [
|
|
141
|
-
{
|
|
142
|
-
"ruleId": "workflow_order_approval_check_approved",
|
|
143
|
-
"required": true
|
|
144
|
-
}
|
|
145
|
-
],
|
|
146
|
-
"continueOnActivityFailure": true,
|
|
147
|
-
"activities": [
|
|
148
|
-
{
|
|
149
|
-
"activityId": "set_approved_status",
|
|
150
|
-
"activityName": "Set Order to Approved",
|
|
151
|
-
"activityType": "UPDATE_ENTITY",
|
|
152
|
-
"async": false,
|
|
153
|
-
"config": {
|
|
154
|
-
"commandId": "sales.orders.update",
|
|
155
|
-
"statusDictionary": "sales.order_status",
|
|
156
|
-
"input": {
|
|
157
|
-
"id": "{{context.id}}",
|
|
158
|
-
"statusValue": "approved"
|
|
159
|
-
}
|
|
160
|
-
},
|
|
161
|
-
"retryPolicy": {
|
|
162
|
-
"maxAttempts": 3,
|
|
163
|
-
"initialIntervalMs": 1000,
|
|
164
|
-
"backoffCoefficient": 2,
|
|
165
|
-
"maxIntervalMs": 10000
|
|
166
|
-
}
|
|
167
|
-
},
|
|
168
|
-
{
|
|
169
|
-
"activityId": "emit_order_approved",
|
|
170
|
-
"activityName": "Emit Order Approved Event",
|
|
171
|
-
"activityType": "EMIT_EVENT",
|
|
172
|
-
"async": true,
|
|
173
|
-
"config": {
|
|
174
|
-
"eventName": "sales.order.approval.approved",
|
|
175
|
-
"payload": {
|
|
176
|
-
"orderId": "{{context.id}}",
|
|
177
|
-
"workflowInstanceId": "{{workflow.instanceId}}",
|
|
178
|
-
"approvedBy": "{{context.completedBy}}",
|
|
179
|
-
"comments": "{{context.comments}}"
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
]
|
|
184
|
-
},
|
|
185
|
-
{
|
|
186
|
-
"transitionId": "pending_approval_to_rejected",
|
|
187
|
-
"transitionName": "Reject Order",
|
|
188
|
-
"fromStepId": "pending_approval",
|
|
189
|
-
"toStepId": "rejected",
|
|
190
|
-
"trigger": "auto",
|
|
191
|
-
"priority": 90,
|
|
192
|
-
"preConditions": [
|
|
193
|
-
{
|
|
194
|
-
"ruleId": "workflow_order_approval_check_rejected",
|
|
195
|
-
"required": true
|
|
196
|
-
}
|
|
197
|
-
],
|
|
198
|
-
"continueOnActivityFailure": true,
|
|
199
|
-
"activities": [
|
|
200
|
-
{
|
|
201
|
-
"activityId": "set_rejected_status",
|
|
202
|
-
"activityName": "Set Order to Rejected",
|
|
203
|
-
"activityType": "UPDATE_ENTITY",
|
|
204
|
-
"async": false,
|
|
205
|
-
"config": {
|
|
206
|
-
"commandId": "sales.orders.update",
|
|
207
|
-
"statusDictionary": "sales.order_status",
|
|
208
|
-
"input": {
|
|
209
|
-
"id": "{{context.id}}",
|
|
210
|
-
"statusValue": "rejected"
|
|
211
|
-
}
|
|
212
|
-
},
|
|
213
|
-
"retryPolicy": {
|
|
214
|
-
"maxAttempts": 3,
|
|
215
|
-
"initialIntervalMs": 1000,
|
|
216
|
-
"backoffCoefficient": 2,
|
|
217
|
-
"maxIntervalMs": 10000
|
|
218
|
-
}
|
|
219
|
-
},
|
|
220
|
-
{
|
|
221
|
-
"activityId": "emit_order_rejected",
|
|
222
|
-
"activityName": "Emit Order Rejected Event",
|
|
223
|
-
"activityType": "EMIT_EVENT",
|
|
224
|
-
"async": true,
|
|
225
|
-
"config": {
|
|
226
|
-
"eventName": "sales.order.approval.rejected",
|
|
227
|
-
"payload": {
|
|
228
|
-
"orderId": "{{context.id}}",
|
|
229
|
-
"workflowInstanceId": "{{workflow.instanceId}}",
|
|
230
|
-
"rejectedBy": "{{context.completedBy}}",
|
|
231
|
-
"comments": "{{context.comments}}"
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
]
|
|
236
|
-
},
|
|
237
|
-
{
|
|
238
|
-
"transitionId": "approved_to_end",
|
|
239
|
-
"transitionName": "Complete After Approval",
|
|
240
|
-
"fromStepId": "approved",
|
|
241
|
-
"toStepId": "end",
|
|
242
|
-
"trigger": "auto",
|
|
243
|
-
"priority": 100,
|
|
244
|
-
"continueOnActivityFailure": true
|
|
245
|
-
},
|
|
246
|
-
{
|
|
247
|
-
"transitionId": "rejected_to_end",
|
|
248
|
-
"transitionName": "Complete After Rejection",
|
|
249
|
-
"fromStepId": "rejected",
|
|
250
|
-
"toStepId": "end",
|
|
251
|
-
"trigger": "auto",
|
|
252
|
-
"priority": 100,
|
|
253
|
-
"continueOnActivityFailure": true
|
|
254
|
-
}
|
|
255
|
-
]
|
|
256
|
-
}
|
|
257
|
-
}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
[
|
|
2
|
-
{
|
|
3
|
-
"ruleId": "workflow_order_approval_check_approved",
|
|
4
|
-
"ruleName": "Check Decision is Approve",
|
|
5
|
-
"description": "Validates that the approval task decision is 'approve'",
|
|
6
|
-
"ruleType": "GUARD",
|
|
7
|
-
"entityType": "workflow:sales_order_approval_v1:transition",
|
|
8
|
-
"eventType": "pre_transition",
|
|
9
|
-
"conditionExpression": {
|
|
10
|
-
"field": "workflowContext.decision",
|
|
11
|
-
"operator": "=",
|
|
12
|
-
"value": "approve"
|
|
13
|
-
},
|
|
14
|
-
"enabled": true,
|
|
15
|
-
"priority": 100
|
|
16
|
-
},
|
|
17
|
-
{
|
|
18
|
-
"ruleId": "workflow_order_approval_check_rejected",
|
|
19
|
-
"ruleName": "Check Decision is Reject",
|
|
20
|
-
"description": "Validates that the approval task decision is 'reject'",
|
|
21
|
-
"ruleType": "GUARD",
|
|
22
|
-
"entityType": "workflow:sales_order_approval_v1:transition",
|
|
23
|
-
"eventType": "pre_transition",
|
|
24
|
-
"conditionExpression": {
|
|
25
|
-
"field": "workflowContext.decision",
|
|
26
|
-
"operator": "=",
|
|
27
|
-
"value": "reject"
|
|
28
|
-
},
|
|
29
|
-
"enabled": true,
|
|
30
|
-
"priority": 100
|
|
31
|
-
}
|
|
32
|
-
]
|
|
@@ -1,308 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
WorkflowEventTrigger,
|
|
3
|
-
WorkflowDefinition,
|
|
4
|
-
WorkflowInstance
|
|
5
|
-
} from "../data/entities.js";
|
|
6
|
-
import { startWorkflow, executeWorkflow } from "./workflow-executor.js";
|
|
7
|
-
const TRIGGER_CACHE_TTL = 5 * 60 * 1e3;
|
|
8
|
-
function matchEventPattern(eventName, pattern) {
|
|
9
|
-
if (pattern === "*") return true;
|
|
10
|
-
if (pattern === eventName) return true;
|
|
11
|
-
if (!pattern.includes("*")) return false;
|
|
12
|
-
const regexPattern = pattern.replace(/[.+^${}()|[\]\\]/g, "\\$&").replace(/\*/g, "[^.]+");
|
|
13
|
-
const regex = new RegExp(`^${regexPattern}$`);
|
|
14
|
-
return regex.test(eventName);
|
|
15
|
-
}
|
|
16
|
-
function getNestedValue(obj, path) {
|
|
17
|
-
if (obj === null || obj === void 0) return void 0;
|
|
18
|
-
const parts = path.split(".");
|
|
19
|
-
let current = obj;
|
|
20
|
-
for (const part of parts) {
|
|
21
|
-
if (current === null || current === void 0) return void 0;
|
|
22
|
-
if (typeof current !== "object") return void 0;
|
|
23
|
-
current = current[part];
|
|
24
|
-
}
|
|
25
|
-
return current;
|
|
26
|
-
}
|
|
27
|
-
function evaluateCondition(condition, payload) {
|
|
28
|
-
const value = getNestedValue(payload, condition.field);
|
|
29
|
-
const expected = condition.value;
|
|
30
|
-
switch (condition.operator) {
|
|
31
|
-
case "eq":
|
|
32
|
-
return value === expected;
|
|
33
|
-
case "neq":
|
|
34
|
-
return value !== expected;
|
|
35
|
-
case "gt":
|
|
36
|
-
return typeof value === "number" && typeof expected === "number" && value > expected;
|
|
37
|
-
case "gte":
|
|
38
|
-
return typeof value === "number" && typeof expected === "number" && value >= expected;
|
|
39
|
-
case "lt":
|
|
40
|
-
return typeof value === "number" && typeof expected === "number" && value < expected;
|
|
41
|
-
case "lte":
|
|
42
|
-
return typeof value === "number" && typeof expected === "number" && value <= expected;
|
|
43
|
-
case "contains":
|
|
44
|
-
if (typeof value === "string" && typeof expected === "string") {
|
|
45
|
-
return value.includes(expected);
|
|
46
|
-
}
|
|
47
|
-
if (Array.isArray(value)) {
|
|
48
|
-
return value.includes(expected);
|
|
49
|
-
}
|
|
50
|
-
return false;
|
|
51
|
-
case "startsWith":
|
|
52
|
-
return typeof value === "string" && typeof expected === "string" && value.startsWith(expected);
|
|
53
|
-
case "endsWith":
|
|
54
|
-
return typeof value === "string" && typeof expected === "string" && value.endsWith(expected);
|
|
55
|
-
case "in":
|
|
56
|
-
return Array.isArray(expected) && expected.includes(value);
|
|
57
|
-
case "notIn":
|
|
58
|
-
return Array.isArray(expected) && !expected.includes(value);
|
|
59
|
-
case "exists":
|
|
60
|
-
return value !== void 0 && value !== null;
|
|
61
|
-
case "notExists":
|
|
62
|
-
return value === void 0 || value === null;
|
|
63
|
-
case "regex":
|
|
64
|
-
if (typeof value !== "string" || typeof expected !== "string") return false;
|
|
65
|
-
try {
|
|
66
|
-
const regex = new RegExp(expected);
|
|
67
|
-
return regex.test(value);
|
|
68
|
-
} catch {
|
|
69
|
-
return false;
|
|
70
|
-
}
|
|
71
|
-
default:
|
|
72
|
-
return false;
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
function evaluateFilterConditions(conditions, payload) {
|
|
76
|
-
if (!conditions || conditions.length === 0) return true;
|
|
77
|
-
return conditions.every((condition) => evaluateCondition(condition, payload));
|
|
78
|
-
}
|
|
79
|
-
function mapEventToContext(mapping, payload) {
|
|
80
|
-
const context = {};
|
|
81
|
-
if (!mapping || mapping.length === 0) return context;
|
|
82
|
-
for (const item of mapping) {
|
|
83
|
-
const value = getNestedValue(payload, item.sourceExpression);
|
|
84
|
-
context[item.targetKey] = value !== void 0 ? value : item.defaultValue;
|
|
85
|
-
}
|
|
86
|
-
return context;
|
|
87
|
-
}
|
|
88
|
-
const triggerCache = /* @__PURE__ */ new Map();
|
|
89
|
-
function getCacheKey(tenantId, organizationId) {
|
|
90
|
-
return `${tenantId}:${organizationId}`;
|
|
91
|
-
}
|
|
92
|
-
async function loadLegacyTriggers(em, tenantId, organizationId) {
|
|
93
|
-
const legacyTriggers = await em.find(
|
|
94
|
-
WorkflowEventTrigger,
|
|
95
|
-
{
|
|
96
|
-
tenantId,
|
|
97
|
-
organizationId,
|
|
98
|
-
enabled: true,
|
|
99
|
-
deletedAt: null
|
|
100
|
-
},
|
|
101
|
-
{
|
|
102
|
-
orderBy: { priority: "DESC", createdAt: "ASC" }
|
|
103
|
-
}
|
|
104
|
-
);
|
|
105
|
-
const definitionIds = [...new Set(legacyTriggers.map((t) => t.workflowDefinitionId))];
|
|
106
|
-
const definitions = definitionIds.length > 0 ? await em.find(WorkflowDefinition, {
|
|
107
|
-
id: { $in: definitionIds },
|
|
108
|
-
enabled: true,
|
|
109
|
-
deletedAt: null
|
|
110
|
-
}) : [];
|
|
111
|
-
const definitionMap = new Map(definitions.map((d) => [d.id, d]));
|
|
112
|
-
return legacyTriggers.filter((t) => definitionMap.has(t.workflowDefinitionId)).map((t) => {
|
|
113
|
-
const def = definitionMap.get(t.workflowDefinitionId);
|
|
114
|
-
return {
|
|
115
|
-
id: t.id,
|
|
116
|
-
triggerId: t.id,
|
|
117
|
-
name: t.name,
|
|
118
|
-
description: t.description,
|
|
119
|
-
eventPattern: t.eventPattern,
|
|
120
|
-
config: t.config ?? null,
|
|
121
|
-
enabled: t.enabled,
|
|
122
|
-
priority: t.priority,
|
|
123
|
-
workflowDefinitionId: t.workflowDefinitionId,
|
|
124
|
-
workflowId: def.workflowId,
|
|
125
|
-
workflowVersion: def.version,
|
|
126
|
-
source: "legacy",
|
|
127
|
-
tenantId: t.tenantId,
|
|
128
|
-
organizationId: t.organizationId
|
|
129
|
-
};
|
|
130
|
-
});
|
|
131
|
-
}
|
|
132
|
-
async function loadEmbeddedTriggers(em, tenantId, organizationId) {
|
|
133
|
-
const definitions = await em.find(
|
|
134
|
-
WorkflowDefinition,
|
|
135
|
-
{
|
|
136
|
-
tenantId,
|
|
137
|
-
organizationId,
|
|
138
|
-
enabled: true,
|
|
139
|
-
deletedAt: null
|
|
140
|
-
}
|
|
141
|
-
);
|
|
142
|
-
const triggers = [];
|
|
143
|
-
for (const def of definitions) {
|
|
144
|
-
const embeddedTriggers = def.definition?.triggers;
|
|
145
|
-
if (!embeddedTriggers || embeddedTriggers.length === 0) continue;
|
|
146
|
-
for (const trigger of embeddedTriggers) {
|
|
147
|
-
if (!trigger.enabled) continue;
|
|
148
|
-
triggers.push({
|
|
149
|
-
id: `${def.id}:${trigger.triggerId}`,
|
|
150
|
-
triggerId: trigger.triggerId,
|
|
151
|
-
name: trigger.name,
|
|
152
|
-
description: trigger.description ?? null,
|
|
153
|
-
eventPattern: trigger.eventPattern,
|
|
154
|
-
config: trigger.config ?? null,
|
|
155
|
-
enabled: trigger.enabled,
|
|
156
|
-
priority: trigger.priority,
|
|
157
|
-
workflowDefinitionId: def.id,
|
|
158
|
-
workflowId: def.workflowId,
|
|
159
|
-
workflowVersion: def.version,
|
|
160
|
-
source: "embedded",
|
|
161
|
-
tenantId,
|
|
162
|
-
organizationId
|
|
163
|
-
});
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
return triggers;
|
|
167
|
-
}
|
|
168
|
-
async function loadTriggersForTenant(em, tenantId, organizationId, cacheService) {
|
|
169
|
-
const cacheKey = getCacheKey(tenantId, organizationId);
|
|
170
|
-
const cached = triggerCache.get(cacheKey);
|
|
171
|
-
if (cached && Date.now() - cached.cachedAt < TRIGGER_CACHE_TTL) {
|
|
172
|
-
return cached.triggers;
|
|
173
|
-
}
|
|
174
|
-
const [legacyTriggers, embeddedTriggers] = await Promise.all([
|
|
175
|
-
loadLegacyTriggers(em, tenantId, organizationId),
|
|
176
|
-
loadEmbeddedTriggers(em, tenantId, organizationId)
|
|
177
|
-
]);
|
|
178
|
-
const allTriggers = [...legacyTriggers, ...embeddedTriggers].sort((a, b) => b.priority - a.priority);
|
|
179
|
-
triggerCache.set(cacheKey, {
|
|
180
|
-
triggers: allTriggers,
|
|
181
|
-
cachedAt: Date.now()
|
|
182
|
-
});
|
|
183
|
-
return allTriggers;
|
|
184
|
-
}
|
|
185
|
-
function invalidateTriggerCache(tenantId, organizationId) {
|
|
186
|
-
if (organizationId) {
|
|
187
|
-
const cacheKey = getCacheKey(tenantId, organizationId);
|
|
188
|
-
triggerCache.delete(cacheKey);
|
|
189
|
-
} else {
|
|
190
|
-
for (const key of triggerCache.keys()) {
|
|
191
|
-
if (key.startsWith(`${tenantId}:`)) {
|
|
192
|
-
triggerCache.delete(key);
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
async function findMatchingTriggers(em, context) {
|
|
198
|
-
const triggers = await loadTriggersForTenant(
|
|
199
|
-
em,
|
|
200
|
-
context.tenantId,
|
|
201
|
-
context.organizationId
|
|
202
|
-
);
|
|
203
|
-
return triggers.filter((trigger) => {
|
|
204
|
-
if (!matchEventPattern(context.eventName, trigger.eventPattern)) {
|
|
205
|
-
return false;
|
|
206
|
-
}
|
|
207
|
-
if (!evaluateFilterConditions(trigger.config?.filterConditions, context.payload)) {
|
|
208
|
-
return false;
|
|
209
|
-
}
|
|
210
|
-
return true;
|
|
211
|
-
});
|
|
212
|
-
}
|
|
213
|
-
async function checkConcurrencyLimit(em, trigger) {
|
|
214
|
-
const maxInstances = trigger.config?.maxConcurrentInstances;
|
|
215
|
-
if (!maxInstances) return true;
|
|
216
|
-
const runningCount = await em.count(WorkflowInstance, {
|
|
217
|
-
definitionId: trigger.workflowDefinitionId,
|
|
218
|
-
status: { $in: ["RUNNING", "WAITING_FOR_ACTIVITIES"] },
|
|
219
|
-
tenantId: trigger.tenantId,
|
|
220
|
-
organizationId: trigger.organizationId,
|
|
221
|
-
deletedAt: null
|
|
222
|
-
});
|
|
223
|
-
return runningCount < maxInstances;
|
|
224
|
-
}
|
|
225
|
-
async function processEventTriggers(em, container, context) {
|
|
226
|
-
const result = {
|
|
227
|
-
triggered: 0,
|
|
228
|
-
skipped: 0,
|
|
229
|
-
errors: [],
|
|
230
|
-
instances: []
|
|
231
|
-
};
|
|
232
|
-
const triggers = await findMatchingTriggers(em, context);
|
|
233
|
-
if (triggers.length === 0) {
|
|
234
|
-
return result;
|
|
235
|
-
}
|
|
236
|
-
for (const trigger of triggers) {
|
|
237
|
-
try {
|
|
238
|
-
const canStart = await checkConcurrencyLimit(em, trigger);
|
|
239
|
-
if (!canStart) {
|
|
240
|
-
console.log(`[workflow-trigger] Skipping trigger "${trigger.name}": max concurrent instances reached`);
|
|
241
|
-
result.skipped++;
|
|
242
|
-
continue;
|
|
243
|
-
}
|
|
244
|
-
const mappedContext = mapEventToContext(trigger.config?.contextMapping, context.payload);
|
|
245
|
-
const payloadId = context.payload?.id;
|
|
246
|
-
const payloadEntityType = context.payload?.entityType;
|
|
247
|
-
const initialContext = {
|
|
248
|
-
// Include raw event payload fields (e.g., id, organizationId, tenantId)
|
|
249
|
-
...context.payload,
|
|
250
|
-
// Override with explicit mappings if provided
|
|
251
|
-
...mappedContext,
|
|
252
|
-
__trigger: {
|
|
253
|
-
triggerId: trigger.id,
|
|
254
|
-
triggerName: trigger.name,
|
|
255
|
-
eventName: context.eventName,
|
|
256
|
-
eventPayload: context.payload,
|
|
257
|
-
triggeredAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
258
|
-
source: trigger.source
|
|
259
|
-
}
|
|
260
|
-
};
|
|
261
|
-
const instance = await startWorkflow(em, {
|
|
262
|
-
workflowId: trigger.workflowId,
|
|
263
|
-
version: trigger.workflowVersion,
|
|
264
|
-
initialContext,
|
|
265
|
-
metadata: {
|
|
266
|
-
initiatedBy: `trigger:${trigger.id}`,
|
|
267
|
-
// Include entityId and entityType for widget discovery
|
|
268
|
-
entityId: payloadId,
|
|
269
|
-
entityType: payloadEntityType || trigger.config?.entityType,
|
|
270
|
-
labels: {
|
|
271
|
-
trigger_id: trigger.id,
|
|
272
|
-
trigger_name: trigger.name,
|
|
273
|
-
event_name: context.eventName,
|
|
274
|
-
trigger_source: trigger.source
|
|
275
|
-
}
|
|
276
|
-
},
|
|
277
|
-
tenantId: context.tenantId,
|
|
278
|
-
organizationId: context.organizationId
|
|
279
|
-
});
|
|
280
|
-
result.triggered++;
|
|
281
|
-
result.instances.push({
|
|
282
|
-
triggerId: trigger.id,
|
|
283
|
-
instanceId: instance.id
|
|
284
|
-
});
|
|
285
|
-
executeWorkflow(em.fork(), container, instance.id).catch((err) => {
|
|
286
|
-
console.error(`[workflow-trigger] Error executing workflow ${instance.id}:`, err);
|
|
287
|
-
});
|
|
288
|
-
} catch (error) {
|
|
289
|
-
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
290
|
-
console.error(`[workflow-trigger] Error processing trigger "${trigger.name}":`, error);
|
|
291
|
-
result.errors.push({
|
|
292
|
-
triggerId: trigger.id,
|
|
293
|
-
error: errorMessage
|
|
294
|
-
});
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
return result;
|
|
298
|
-
}
|
|
299
|
-
export {
|
|
300
|
-
evaluateFilterConditions,
|
|
301
|
-
findMatchingTriggers,
|
|
302
|
-
invalidateTriggerCache,
|
|
303
|
-
loadTriggersForTenant,
|
|
304
|
-
mapEventToContext,
|
|
305
|
-
matchEventPattern,
|
|
306
|
-
processEventTriggers
|
|
307
|
-
};
|
|
308
|
-
//# sourceMappingURL=event-trigger-service.js.map
|