@contractspec/example.workflow-system 1.57.0 → 1.59.0
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/approval/approval.enum.d.ts +2 -7
- package/dist/approval/approval.enum.d.ts.map +1 -1
- package/dist/approval/approval.enum.js +20 -26
- package/dist/approval/approval.event.d.ts +108 -114
- package/dist/approval/approval.event.d.ts.map +1 -1
- package/dist/approval/approval.event.js +103 -210
- package/dist/approval/approval.handler.d.ts +17 -18
- package/dist/approval/approval.handler.d.ts.map +1 -1
- package/dist/approval/approval.operations.d.ts +429 -435
- package/dist/approval/approval.operations.d.ts.map +1 -1
- package/dist/approval/approval.operations.js +364 -339
- package/dist/approval/approval.schema.d.ts +86 -91
- package/dist/approval/approval.schema.d.ts.map +1 -1
- package/dist/approval/approval.schema.js +71 -107
- package/dist/approval/index.d.ts +8 -5
- package/dist/approval/index.d.ts.map +1 -0
- package/dist/approval/index.js +484 -5
- package/dist/browser/approval/approval.enum.js +22 -0
- package/dist/browser/approval/approval.event.js +112 -0
- package/dist/browser/approval/approval.operations.js +369 -0
- package/dist/browser/approval/approval.schema.js +73 -0
- package/dist/browser/approval/index.js +484 -0
- package/dist/browser/docs/index.js +103 -0
- package/dist/browser/docs/workflow-system.docblock.js +103 -0
- package/dist/browser/entities/approval.js +119 -0
- package/dist/browser/entities/index.js +508 -0
- package/dist/browser/entities/instance.js +161 -0
- package/dist/browser/entities/step.js +124 -0
- package/dist/browser/entities/workflow.js +82 -0
- package/dist/browser/example.js +42 -0
- package/dist/browser/handlers/index.js +253 -0
- package/dist/browser/handlers/workflow.handlers.js +253 -0
- package/dist/browser/index.js +3120 -0
- package/dist/browser/instance/index.js +677 -0
- package/dist/browser/instance/instance.enum.js +15 -0
- package/dist/browser/instance/instance.event.js +164 -0
- package/dist/browser/instance/instance.handler.js +356 -0
- package/dist/browser/instance/instance.operations.js +9 -0
- package/dist/browser/instance/instance.schema.js +101 -0
- package/dist/browser/presentations/index.js +109 -0
- package/dist/browser/seeders/index.js +3 -0
- package/dist/browser/shared/index.js +3 -0
- package/dist/browser/shared/mock-data.js +11 -0
- package/dist/browser/shared/types.js +0 -0
- package/dist/browser/state-machine/index.js +6 -0
- package/dist/browser/tests/operations.test-spec.js +6 -0
- package/dist/browser/ui/WorkflowDashboard.js +3 -0
- package/dist/browser/ui/hooks/index.js +50 -0
- package/dist/browser/ui/hooks/useWorkflowList.js +50 -0
- package/dist/browser/ui/index.js +54 -0
- package/dist/browser/ui/renderers/index.js +227 -0
- package/dist/browser/ui/renderers/workflow.markdown.js +227 -0
- package/dist/browser/workflow/index.js +21 -0
- package/dist/browser/workflow/workflow.enum.js +36 -0
- package/dist/browser/workflow/workflow.event.js +6 -0
- package/dist/browser/workflow/workflow.handler.js +5 -0
- package/dist/browser/workflow/workflow.operations.js +8 -0
- package/dist/browser/workflow/workflow.schema.js +151 -0
- package/dist/browser/workflow-system.capability.js +5 -0
- package/dist/browser/workflow-system.feature.js +3 -0
- package/dist/docs/index.d.ts +2 -1
- package/dist/docs/index.d.ts.map +1 -0
- package/dist/docs/index.js +104 -1
- package/dist/docs/workflow-system.docblock.d.ts +2 -1
- package/dist/docs/workflow-system.docblock.d.ts.map +1 -0
- package/dist/docs/workflow-system.docblock.js +45 -56
- package/dist/entities/approval.d.ts +35 -40
- package/dist/entities/approval.d.ts.map +1 -1
- package/dist/entities/approval.js +116 -124
- package/dist/entities/index.d.ts +132 -137
- package/dist/entities/index.d.ts.map +1 -1
- package/dist/entities/index.js +506 -29
- package/dist/entities/instance.d.ts +46 -51
- package/dist/entities/instance.d.ts.map +1 -1
- package/dist/entities/instance.js +158 -164
- package/dist/entities/step.d.ts +31 -36
- package/dist/entities/step.d.ts.map +1 -1
- package/dist/entities/step.js +122 -132
- package/dist/entities/workflow.d.ts +22 -27
- package/dist/entities/workflow.d.ts.map +1 -1
- package/dist/entities/workflow.js +80 -99
- package/dist/example.d.ts +2 -6
- package/dist/example.d.ts.map +1 -1
- package/dist/example.js +41 -55
- package/dist/handlers/index.d.ts +2 -2
- package/dist/handlers/index.d.ts.map +1 -0
- package/dist/handlers/index.js +254 -3
- package/dist/handlers/workflow.handlers.d.ts +107 -106
- package/dist/handlers/workflow.handlers.d.ts.map +1 -1
- package/dist/handlers/workflow.handlers.js +237 -246
- package/dist/index.d.ts +15 -26
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3121 -26
- package/dist/instance/index.d.ts +8 -5
- package/dist/instance/index.d.ts.map +1 -0
- package/dist/instance/index.js +677 -5
- package/dist/instance/instance.enum.d.ts +1 -6
- package/dist/instance/instance.enum.d.ts.map +1 -1
- package/dist/instance/instance.enum.js +14 -18
- package/dist/instance/instance.event.d.ts +313 -319
- package/dist/instance/instance.event.d.ts.map +1 -1
- package/dist/instance/instance.event.js +151 -279
- package/dist/instance/instance.handler.d.ts +21 -22
- package/dist/instance/instance.handler.d.ts.map +1 -1
- package/dist/instance/instance.handler.js +352 -89
- package/dist/instance/instance.operations.d.ts +819 -825
- package/dist/instance/instance.operations.d.ts.map +1 -1
- package/dist/instance/instance.operations.js +10 -464
- package/dist/instance/instance.schema.d.ts +196 -201
- package/dist/instance/instance.schema.d.ts.map +1 -1
- package/dist/instance/instance.schema.js +97 -167
- package/dist/presentations/index.d.ts +23 -28
- package/dist/presentations/index.d.ts.map +1 -1
- package/dist/presentations/index.js +104 -334
- package/dist/seeders/index.d.ts +4 -8
- package/dist/seeders/index.d.ts.map +1 -1
- package/dist/seeders/index.js +4 -19
- package/dist/shared/index.d.ts +6 -3
- package/dist/shared/index.d.ts.map +1 -0
- package/dist/shared/index.js +4 -3
- package/dist/shared/mock-data.d.ts +16 -16
- package/dist/shared/mock-data.d.ts.map +1 -1
- package/dist/shared/mock-data.js +11 -11
- package/dist/shared/types.d.ts +69 -72
- package/dist/shared/types.d.ts.map +1 -1
- package/dist/shared/types.js +1 -0
- package/dist/state-machine/index.d.ts +92 -95
- package/dist/state-machine/index.d.ts.map +1 -1
- package/dist/state-machine/index.js +6 -157
- package/dist/tests/operations.test-spec.d.ts +4 -9
- package/dist/tests/operations.test-spec.d.ts.map +1 -1
- package/dist/tests/operations.test-spec.js +7 -123
- package/dist/ui/WorkflowDashboard.d.ts +1 -6
- package/dist/ui/WorkflowDashboard.d.ts.map +1 -1
- package/dist/ui/WorkflowDashboard.js +3 -222
- package/dist/ui/hooks/index.d.ts +2 -2
- package/dist/ui/hooks/index.d.ts.map +1 -0
- package/dist/ui/hooks/index.js +51 -5
- package/dist/ui/hooks/useWorkflowList.d.ts +15 -19
- package/dist/ui/hooks/useWorkflowList.d.ts.map +1 -1
- package/dist/ui/hooks/useWorkflowList.js +47 -51
- package/dist/ui/index.d.ts +7 -6
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +55 -6
- package/dist/ui/renderers/index.d.ts +2 -2
- package/dist/ui/renderers/index.d.ts.map +1 -0
- package/dist/ui/renderers/index.js +227 -2
- package/dist/ui/renderers/workflow.markdown.d.ts +13 -14
- package/dist/ui/renderers/workflow.markdown.d.ts.map +1 -1
- package/dist/ui/renderers/workflow.markdown.js +223 -229
- package/dist/workflow/index.d.ts +8 -5
- package/dist/workflow/index.d.ts.map +1 -0
- package/dist/workflow/index.js +22 -6
- package/dist/workflow/workflow.enum.d.ts +4 -9
- package/dist/workflow/workflow.enum.d.ts.map +1 -1
- package/dist/workflow/workflow.enum.js +32 -42
- package/dist/workflow/workflow.event.d.ts +112 -118
- package/dist/workflow/workflow.event.d.ts.map +1 -1
- package/dist/workflow/workflow.event.js +7 -150
- package/dist/workflow/workflow.handler.d.ts +23 -24
- package/dist/workflow/workflow.handler.d.ts.map +1 -1
- package/dist/workflow/workflow.handler.js +6 -66
- package/dist/workflow/workflow.operations.d.ts +847 -853
- package/dist/workflow/workflow.operations.d.ts.map +1 -1
- package/dist/workflow/workflow.operations.js +9 -345
- package/dist/workflow/workflow.schema.d.ts +229 -234
- package/dist/workflow/workflow.schema.d.ts.map +1 -1
- package/dist/workflow/workflow.schema.js +146 -243
- package/dist/workflow-system.capability.d.ts +3 -8
- package/dist/workflow-system.capability.d.ts.map +1 -1
- package/dist/workflow-system.capability.js +6 -34
- package/dist/workflow-system.feature.d.ts +1 -6
- package/dist/workflow-system.feature.d.ts.map +1 -1
- package/dist/workflow-system.feature.js +4 -346
- package/package.json +415 -93
- package/dist/approval/approval.enum.js.map +0 -1
- package/dist/approval/approval.event.js.map +0 -1
- package/dist/approval/approval.handler.js +0 -72
- package/dist/approval/approval.handler.js.map +0 -1
- package/dist/approval/approval.operations.js.map +0 -1
- package/dist/approval/approval.schema.js.map +0 -1
- package/dist/docs/workflow-system.docblock.js.map +0 -1
- package/dist/entities/approval.js.map +0 -1
- package/dist/entities/index.js.map +0 -1
- package/dist/entities/instance.js.map +0 -1
- package/dist/entities/step.js.map +0 -1
- package/dist/entities/workflow.js.map +0 -1
- package/dist/example.js.map +0 -1
- package/dist/handlers/workflow.handlers.js.map +0 -1
- package/dist/instance/instance.enum.js.map +0 -1
- package/dist/instance/instance.event.js.map +0 -1
- package/dist/instance/instance.handler.js.map +0 -1
- package/dist/instance/instance.operations.js.map +0 -1
- package/dist/instance/instance.schema.js.map +0 -1
- package/dist/presentations/index.js.map +0 -1
- package/dist/seeders/index.js.map +0 -1
- package/dist/shared/mock-data.js.map +0 -1
- package/dist/state-machine/index.js.map +0 -1
- package/dist/tests/operations.test-spec.js.map +0 -1
- package/dist/ui/WorkflowDashboard.js.map +0 -1
- package/dist/ui/hooks/useWorkflowList.js.map +0 -1
- package/dist/ui/renderers/workflow.markdown.js.map +0 -1
- package/dist/workflow/workflow.enum.js.map +0 -1
- package/dist/workflow/workflow.event.js.map +0 -1
- package/dist/workflow/workflow.handler.js.map +0 -1
- package/dist/workflow/workflow.operations.js.map +0 -1
- package/dist/workflow/workflow.schema.js.map +0 -1
- package/dist/workflow-system.capability.js.map +0 -1
- package/dist/workflow-system.feature.js.map +0 -1
package/dist/entities/index.js
CHANGED
|
@@ -1,32 +1,509 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import {
|
|
4
|
-
|
|
1
|
+
// @bun
|
|
2
|
+
// src/entities/approval.ts
|
|
3
|
+
import {
|
|
4
|
+
defineEntity,
|
|
5
|
+
defineEntityEnum,
|
|
6
|
+
field,
|
|
7
|
+
index
|
|
8
|
+
} from "@contractspec/lib.schema";
|
|
9
|
+
var ApprovalStatusEnum = defineEntityEnum({
|
|
10
|
+
name: "ApprovalStatus",
|
|
11
|
+
values: [
|
|
12
|
+
"PENDING",
|
|
13
|
+
"APPROVED",
|
|
14
|
+
"REJECTED",
|
|
15
|
+
"DELEGATED",
|
|
16
|
+
"ESCALATED",
|
|
17
|
+
"WITHDRAWN",
|
|
18
|
+
"EXPIRED"
|
|
19
|
+
],
|
|
20
|
+
schema: "workflow",
|
|
21
|
+
description: "Status of an approval request."
|
|
22
|
+
});
|
|
23
|
+
var ApprovalDecisionEnum = defineEntityEnum({
|
|
24
|
+
name: "ApprovalDecision",
|
|
25
|
+
values: [
|
|
26
|
+
"APPROVE",
|
|
27
|
+
"REJECT",
|
|
28
|
+
"REQUEST_CHANGES",
|
|
29
|
+
"DELEGATE",
|
|
30
|
+
"ABSTAIN"
|
|
31
|
+
],
|
|
32
|
+
schema: "workflow",
|
|
33
|
+
description: "Possible approval decisions."
|
|
34
|
+
});
|
|
35
|
+
var ApprovalRequestEntity = defineEntity({
|
|
36
|
+
name: "ApprovalRequest",
|
|
37
|
+
description: "A pending approval request for a workflow step.",
|
|
38
|
+
schema: "workflow",
|
|
39
|
+
map: "approval_request",
|
|
40
|
+
fields: {
|
|
41
|
+
id: field.id({ description: "Unique approval request ID" }),
|
|
42
|
+
workflowInstanceId: field.foreignKey(),
|
|
43
|
+
stepExecutionId: field.foreignKey(),
|
|
44
|
+
approverId: field.foreignKey({ description: "User requested to approve" }),
|
|
45
|
+
approverRole: field.string({
|
|
46
|
+
isOptional: true,
|
|
47
|
+
description: "Role of the approver"
|
|
48
|
+
}),
|
|
49
|
+
title: field.string({ description: "Approval request title" }),
|
|
50
|
+
description: field.string({ isOptional: true }),
|
|
51
|
+
status: field.enum("ApprovalStatus", { default: "PENDING" }),
|
|
52
|
+
decision: field.enum("ApprovalDecision", { isOptional: true }),
|
|
53
|
+
decisionComment: field.string({
|
|
54
|
+
isOptional: true,
|
|
55
|
+
description: "Comment explaining decision"
|
|
56
|
+
}),
|
|
57
|
+
decidedAt: field.dateTime({ isOptional: true }),
|
|
58
|
+
delegatedTo: field.string({
|
|
59
|
+
isOptional: true,
|
|
60
|
+
description: "User delegated to"
|
|
61
|
+
}),
|
|
62
|
+
delegationReason: field.string({ isOptional: true }),
|
|
63
|
+
escalationLevel: field.int({
|
|
64
|
+
default: 0,
|
|
65
|
+
description: "Current escalation level"
|
|
66
|
+
}),
|
|
67
|
+
escalatedAt: field.dateTime({ isOptional: true }),
|
|
68
|
+
dueAt: field.dateTime({
|
|
69
|
+
isOptional: true,
|
|
70
|
+
description: "When approval is due"
|
|
71
|
+
}),
|
|
72
|
+
reminderSentAt: field.dateTime({ isOptional: true }),
|
|
73
|
+
contextSnapshot: field.json({
|
|
74
|
+
isOptional: true,
|
|
75
|
+
description: "Snapshot of relevant data for review"
|
|
76
|
+
}),
|
|
77
|
+
sequenceOrder: field.int({
|
|
78
|
+
default: 0,
|
|
79
|
+
description: "Order in approval chain"
|
|
80
|
+
}),
|
|
81
|
+
createdAt: field.createdAt(),
|
|
82
|
+
updatedAt: field.updatedAt(),
|
|
83
|
+
workflowInstance: field.belongsTo("WorkflowInstance", ["workflowInstanceId"], ["id"], { onDelete: "Cascade" }),
|
|
84
|
+
stepExecution: field.belongsTo("StepExecution", ["stepExecutionId"], ["id"])
|
|
85
|
+
},
|
|
86
|
+
indexes: [
|
|
87
|
+
index.on(["approverId", "status"]),
|
|
88
|
+
index.on(["workflowInstanceId", "status"]),
|
|
89
|
+
index.on(["stepExecutionId"]),
|
|
90
|
+
index.on(["status", "dueAt"]),
|
|
91
|
+
index.on(["createdAt"])
|
|
92
|
+
],
|
|
93
|
+
enums: [ApprovalStatusEnum, ApprovalDecisionEnum]
|
|
94
|
+
});
|
|
95
|
+
var ApprovalCommentEntity = defineEntity({
|
|
96
|
+
name: "ApprovalComment",
|
|
97
|
+
description: "A comment on an approval request.",
|
|
98
|
+
schema: "workflow",
|
|
99
|
+
map: "approval_comment",
|
|
100
|
+
fields: {
|
|
101
|
+
id: field.id(),
|
|
102
|
+
approvalRequestId: field.foreignKey(),
|
|
103
|
+
authorId: field.foreignKey(),
|
|
104
|
+
content: field.string({ description: "Comment text" }),
|
|
105
|
+
isInternal: field.boolean({
|
|
106
|
+
default: false,
|
|
107
|
+
description: "Internal note vs public comment"
|
|
108
|
+
}),
|
|
109
|
+
createdAt: field.createdAt(),
|
|
110
|
+
updatedAt: field.updatedAt(),
|
|
111
|
+
approvalRequest: field.belongsTo("ApprovalRequest", ["approvalRequestId"], ["id"], { onDelete: "Cascade" })
|
|
112
|
+
},
|
|
113
|
+
indexes: [index.on(["approvalRequestId", "createdAt"])]
|
|
114
|
+
});
|
|
5
115
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
116
|
+
// src/entities/workflow.ts
|
|
117
|
+
import {
|
|
118
|
+
defineEntity as defineEntity2,
|
|
119
|
+
defineEntityEnum as defineEntityEnum2,
|
|
120
|
+
field as field2,
|
|
121
|
+
index as index2
|
|
122
|
+
} from "@contractspec/lib.schema";
|
|
123
|
+
var WorkflowStatusEnum = defineEntityEnum2({
|
|
124
|
+
name: "WorkflowStatus",
|
|
125
|
+
values: ["DRAFT", "ACTIVE", "DEPRECATED", "ARCHIVED"],
|
|
126
|
+
schema: "workflow",
|
|
127
|
+
description: "Status of a workflow definition."
|
|
128
|
+
});
|
|
129
|
+
var WorkflowTriggerTypeEnum = defineEntityEnum2({
|
|
130
|
+
name: "WorkflowTriggerType",
|
|
131
|
+
values: ["MANUAL", "EVENT", "SCHEDULED", "API"],
|
|
132
|
+
schema: "workflow",
|
|
133
|
+
description: "What triggers workflow instantiation."
|
|
134
|
+
});
|
|
135
|
+
var WorkflowDefinitionEntity = defineEntity2({
|
|
136
|
+
name: "WorkflowDefinition",
|
|
137
|
+
description: "A workflow blueprint that defines the process structure.",
|
|
138
|
+
schema: "workflow",
|
|
139
|
+
map: "workflow_definition",
|
|
140
|
+
fields: {
|
|
141
|
+
id: field2.id({ description: "Unique workflow definition ID" }),
|
|
142
|
+
name: field2.string({ description: "Human-readable workflow name" }),
|
|
143
|
+
key: field2.string({
|
|
144
|
+
description: 'Unique key for referencing (e.g., "purchase_approval")'
|
|
145
|
+
}),
|
|
146
|
+
description: field2.string({
|
|
147
|
+
isOptional: true,
|
|
148
|
+
description: "Detailed description"
|
|
149
|
+
}),
|
|
150
|
+
version: field2.int({
|
|
151
|
+
default: 1,
|
|
152
|
+
description: "Version number for versioning definitions"
|
|
153
|
+
}),
|
|
154
|
+
status: field2.enum("WorkflowStatus", { default: "DRAFT" }),
|
|
155
|
+
triggerType: field2.enum("WorkflowTriggerType", { default: "MANUAL" }),
|
|
156
|
+
triggerConfig: field2.json({
|
|
157
|
+
isOptional: true,
|
|
158
|
+
description: "Trigger-specific configuration"
|
|
159
|
+
}),
|
|
160
|
+
initialStepId: field2.string({
|
|
161
|
+
isOptional: true,
|
|
162
|
+
description: "First step when workflow starts"
|
|
163
|
+
}),
|
|
164
|
+
featureFlagKey: field2.string({
|
|
165
|
+
isOptional: true,
|
|
166
|
+
description: "Feature flag to control availability"
|
|
167
|
+
}),
|
|
168
|
+
settings: field2.json({
|
|
169
|
+
isOptional: true,
|
|
170
|
+
description: "Workflow-wide settings"
|
|
171
|
+
}),
|
|
172
|
+
metadata: field2.json({ isOptional: true, description: "Custom metadata" }),
|
|
173
|
+
organizationId: field2.foreignKey({ description: "Owning organization" }),
|
|
174
|
+
createdBy: field2.foreignKey({
|
|
175
|
+
description: "User who created this workflow"
|
|
176
|
+
}),
|
|
177
|
+
createdAt: field2.createdAt(),
|
|
178
|
+
updatedAt: field2.updatedAt(),
|
|
179
|
+
publishedAt: field2.dateTime({
|
|
180
|
+
isOptional: true,
|
|
181
|
+
description: "When workflow was activated"
|
|
182
|
+
}),
|
|
183
|
+
steps: field2.hasMany("WorkflowStep"),
|
|
184
|
+
instances: field2.hasMany("WorkflowInstance")
|
|
185
|
+
},
|
|
186
|
+
indexes: [
|
|
187
|
+
index2.unique(["organizationId", "key", "version"]),
|
|
188
|
+
index2.on(["organizationId", "status"]),
|
|
189
|
+
index2.on(["key", "version"])
|
|
190
|
+
],
|
|
191
|
+
enums: [WorkflowStatusEnum, WorkflowTriggerTypeEnum]
|
|
192
|
+
});
|
|
193
|
+
|
|
194
|
+
// src/entities/step.ts
|
|
195
|
+
import {
|
|
196
|
+
defineEntity as defineEntity3,
|
|
197
|
+
defineEntityEnum as defineEntityEnum3,
|
|
198
|
+
field as field3,
|
|
199
|
+
index as index3
|
|
200
|
+
} from "@contractspec/lib.schema";
|
|
201
|
+
var StepTypeEnum = defineEntityEnum3({
|
|
202
|
+
name: "StepType",
|
|
203
|
+
values: [
|
|
204
|
+
"START",
|
|
205
|
+
"APPROVAL",
|
|
206
|
+
"TASK",
|
|
207
|
+
"CONDITION",
|
|
208
|
+
"PARALLEL",
|
|
209
|
+
"WAIT",
|
|
210
|
+
"ACTION",
|
|
211
|
+
"END"
|
|
212
|
+
],
|
|
213
|
+
schema: "workflow",
|
|
214
|
+
description: "Type of workflow step."
|
|
215
|
+
});
|
|
216
|
+
var ApprovalModeEnum = defineEntityEnum3({
|
|
217
|
+
name: "ApprovalMode",
|
|
218
|
+
values: [
|
|
219
|
+
"ANY",
|
|
220
|
+
"ALL",
|
|
221
|
+
"MAJORITY",
|
|
222
|
+
"SEQUENTIAL"
|
|
223
|
+
],
|
|
224
|
+
schema: "workflow",
|
|
225
|
+
description: "How multiple approvers are handled."
|
|
226
|
+
});
|
|
227
|
+
var WorkflowStepEntity = defineEntity3({
|
|
228
|
+
name: "WorkflowStep",
|
|
229
|
+
description: "A single step/state in a workflow definition.",
|
|
230
|
+
schema: "workflow",
|
|
231
|
+
map: "workflow_step",
|
|
232
|
+
fields: {
|
|
233
|
+
id: field3.id({ description: "Unique step ID" }),
|
|
234
|
+
workflowDefinitionId: field3.foreignKey(),
|
|
235
|
+
name: field3.string({ description: "Human-readable step name" }),
|
|
236
|
+
key: field3.string({
|
|
237
|
+
description: 'Unique key within workflow (e.g., "manager_approval")'
|
|
238
|
+
}),
|
|
239
|
+
description: field3.string({ isOptional: true }),
|
|
240
|
+
type: field3.enum("StepType", { default: "TASK" }),
|
|
241
|
+
position: field3.int({ default: 0, description: "Order for display" }),
|
|
242
|
+
transitions: field3.json({ description: "Map of action -> next step key" }),
|
|
243
|
+
approvalMode: field3.enum("ApprovalMode", {
|
|
244
|
+
default: "ANY",
|
|
245
|
+
isOptional: true
|
|
246
|
+
}),
|
|
247
|
+
approverRoles: field3.string({
|
|
248
|
+
isArray: true,
|
|
249
|
+
description: "Roles that can approve"
|
|
250
|
+
}),
|
|
251
|
+
approverUserIds: field3.string({
|
|
252
|
+
isArray: true,
|
|
253
|
+
description: "Specific users that can approve"
|
|
254
|
+
}),
|
|
255
|
+
escalationConfig: field3.json({
|
|
256
|
+
isOptional: true,
|
|
257
|
+
description: "Escalation rules"
|
|
258
|
+
}),
|
|
259
|
+
assigneeRoles: field3.string({
|
|
260
|
+
isArray: true,
|
|
261
|
+
description: "Roles that can be assigned"
|
|
262
|
+
}),
|
|
263
|
+
taskTemplate: field3.json({
|
|
264
|
+
isOptional: true,
|
|
265
|
+
description: "Template for task creation"
|
|
266
|
+
}),
|
|
267
|
+
conditionExpression: field3.string({
|
|
268
|
+
isOptional: true,
|
|
269
|
+
description: "Expression for branching"
|
|
270
|
+
}),
|
|
271
|
+
waitDuration: field3.int({
|
|
272
|
+
isOptional: true,
|
|
273
|
+
description: "Wait duration in seconds"
|
|
274
|
+
}),
|
|
275
|
+
waitForEvent: field3.string({
|
|
276
|
+
isOptional: true,
|
|
277
|
+
description: "Event name to wait for"
|
|
278
|
+
}),
|
|
279
|
+
actionType: field3.string({
|
|
280
|
+
isOptional: true,
|
|
281
|
+
description: "Action to execute"
|
|
282
|
+
}),
|
|
283
|
+
actionConfig: field3.json({
|
|
284
|
+
isOptional: true,
|
|
285
|
+
description: "Action parameters"
|
|
286
|
+
}),
|
|
287
|
+
timeoutSeconds: field3.int({
|
|
288
|
+
isOptional: true,
|
|
289
|
+
description: "Step timeout"
|
|
290
|
+
}),
|
|
291
|
+
slaSeconds: field3.int({ isOptional: true, description: "SLA deadline" }),
|
|
292
|
+
notifyOnEnter: field3.json({
|
|
293
|
+
isOptional: true,
|
|
294
|
+
description: "Notification config when entering step"
|
|
295
|
+
}),
|
|
296
|
+
notifyOnExit: field3.json({
|
|
297
|
+
isOptional: true,
|
|
298
|
+
description: "Notification config when exiting step"
|
|
299
|
+
}),
|
|
300
|
+
metadata: field3.json({ isOptional: true }),
|
|
301
|
+
createdAt: field3.createdAt(),
|
|
302
|
+
updatedAt: field3.updatedAt(),
|
|
303
|
+
workflowDefinition: field3.belongsTo("WorkflowDefinition", ["workflowDefinitionId"], ["id"], { onDelete: "Cascade" }),
|
|
304
|
+
executions: field3.hasMany("StepExecution")
|
|
305
|
+
},
|
|
306
|
+
indexes: [
|
|
307
|
+
index3.unique(["workflowDefinitionId", "key"]),
|
|
308
|
+
index3.on(["workflowDefinitionId", "position"]),
|
|
309
|
+
index3.on(["type"])
|
|
310
|
+
],
|
|
311
|
+
enums: [StepTypeEnum, ApprovalModeEnum]
|
|
312
|
+
});
|
|
313
|
+
|
|
314
|
+
// src/entities/instance.ts
|
|
315
|
+
import {
|
|
316
|
+
defineEntity as defineEntity4,
|
|
317
|
+
defineEntityEnum as defineEntityEnum4,
|
|
318
|
+
field as field4,
|
|
319
|
+
index as index4
|
|
320
|
+
} from "@contractspec/lib.schema";
|
|
321
|
+
var InstanceStatusEnum = defineEntityEnum4({
|
|
322
|
+
name: "InstanceStatus",
|
|
323
|
+
values: [
|
|
324
|
+
"PENDING",
|
|
325
|
+
"RUNNING",
|
|
326
|
+
"WAITING",
|
|
327
|
+
"PAUSED",
|
|
328
|
+
"COMPLETED",
|
|
329
|
+
"CANCELLED",
|
|
330
|
+
"FAILED",
|
|
331
|
+
"TIMEOUT"
|
|
332
|
+
],
|
|
333
|
+
schema: "workflow",
|
|
334
|
+
description: "Status of a workflow instance."
|
|
335
|
+
});
|
|
336
|
+
var StepExecutionStatusEnum = defineEntityEnum4({
|
|
337
|
+
name: "StepExecutionStatus",
|
|
338
|
+
values: [
|
|
339
|
+
"PENDING",
|
|
340
|
+
"ACTIVE",
|
|
341
|
+
"COMPLETED",
|
|
342
|
+
"SKIPPED",
|
|
343
|
+
"FAILED",
|
|
344
|
+
"TIMEOUT"
|
|
345
|
+
],
|
|
346
|
+
schema: "workflow",
|
|
347
|
+
description: "Status of a step execution."
|
|
348
|
+
});
|
|
349
|
+
var WorkflowInstanceEntity = defineEntity4({
|
|
350
|
+
name: "WorkflowInstance",
|
|
351
|
+
description: "A running instance of a workflow definition.",
|
|
352
|
+
schema: "workflow",
|
|
353
|
+
map: "workflow_instance",
|
|
354
|
+
fields: {
|
|
355
|
+
id: field4.id({ description: "Unique instance ID" }),
|
|
356
|
+
workflowDefinitionId: field4.foreignKey(),
|
|
357
|
+
referenceId: field4.string({
|
|
358
|
+
isOptional: true,
|
|
359
|
+
description: "External reference (e.g., order ID)"
|
|
360
|
+
}),
|
|
361
|
+
referenceType: field4.string({
|
|
362
|
+
isOptional: true,
|
|
363
|
+
description: 'Type of reference (e.g., "Order")'
|
|
364
|
+
}),
|
|
365
|
+
status: field4.enum("InstanceStatus", { default: "PENDING" }),
|
|
366
|
+
currentStepId: field4.string({
|
|
367
|
+
isOptional: true,
|
|
368
|
+
description: "Current step being executed"
|
|
369
|
+
}),
|
|
370
|
+
contextData: field4.json({ description: "Data context for this instance" }),
|
|
371
|
+
triggeredBy: field4.foreignKey({
|
|
372
|
+
description: "User who triggered the workflow"
|
|
373
|
+
}),
|
|
374
|
+
triggerSource: field4.string({
|
|
375
|
+
isOptional: true,
|
|
376
|
+
description: 'Source of trigger (e.g., "api", "ui")'
|
|
377
|
+
}),
|
|
378
|
+
organizationId: field4.foreignKey(),
|
|
379
|
+
priority: field4.int({
|
|
380
|
+
default: 0,
|
|
381
|
+
description: "Processing priority (higher = more urgent)"
|
|
382
|
+
}),
|
|
383
|
+
dueAt: field4.dateTime({
|
|
384
|
+
isOptional: true,
|
|
385
|
+
description: "When this instance should complete"
|
|
386
|
+
}),
|
|
387
|
+
outcome: field4.string({
|
|
388
|
+
isOptional: true,
|
|
389
|
+
description: 'Final outcome (e.g., "approved", "rejected")'
|
|
390
|
+
}),
|
|
391
|
+
resultData: field4.json({
|
|
392
|
+
isOptional: true,
|
|
393
|
+
description: "Final result data"
|
|
394
|
+
}),
|
|
395
|
+
errorMessage: field4.string({
|
|
396
|
+
isOptional: true,
|
|
397
|
+
description: "Error message if failed"
|
|
398
|
+
}),
|
|
399
|
+
createdAt: field4.createdAt(),
|
|
400
|
+
updatedAt: field4.updatedAt(),
|
|
401
|
+
startedAt: field4.dateTime({ isOptional: true }),
|
|
402
|
+
completedAt: field4.dateTime({ isOptional: true }),
|
|
403
|
+
workflowDefinition: field4.belongsTo("WorkflowDefinition", ["workflowDefinitionId"], ["id"]),
|
|
404
|
+
currentStep: field4.belongsTo("WorkflowStep", ["currentStepId"], ["id"]),
|
|
405
|
+
stepExecutions: field4.hasMany("StepExecution"),
|
|
406
|
+
approvalRequests: field4.hasMany("ApprovalRequest")
|
|
407
|
+
},
|
|
408
|
+
indexes: [
|
|
409
|
+
index4.on(["organizationId", "status"]),
|
|
410
|
+
index4.on(["workflowDefinitionId", "status"]),
|
|
411
|
+
index4.on(["referenceType", "referenceId"]),
|
|
412
|
+
index4.on(["triggeredBy", "status"]),
|
|
413
|
+
index4.on(["status", "dueAt"]),
|
|
414
|
+
index4.on(["createdAt"])
|
|
415
|
+
],
|
|
416
|
+
enums: [InstanceStatusEnum]
|
|
417
|
+
});
|
|
418
|
+
var StepExecutionEntity = defineEntity4({
|
|
419
|
+
name: "StepExecution",
|
|
420
|
+
description: "Execution record of a step within a workflow instance.",
|
|
421
|
+
schema: "workflow",
|
|
422
|
+
map: "step_execution",
|
|
423
|
+
fields: {
|
|
424
|
+
id: field4.id({ description: "Unique execution ID" }),
|
|
425
|
+
workflowInstanceId: field4.foreignKey(),
|
|
426
|
+
workflowStepId: field4.foreignKey(),
|
|
427
|
+
status: field4.enum("StepExecutionStatus", { default: "PENDING" }),
|
|
428
|
+
executionOrder: field4.int({
|
|
429
|
+
default: 0,
|
|
430
|
+
description: "Order of execution within instance"
|
|
431
|
+
}),
|
|
432
|
+
inputData: field4.json({
|
|
433
|
+
isOptional: true,
|
|
434
|
+
description: "Data when entering step"
|
|
435
|
+
}),
|
|
436
|
+
outputData: field4.json({
|
|
437
|
+
isOptional: true,
|
|
438
|
+
description: "Data when exiting step"
|
|
439
|
+
}),
|
|
440
|
+
actionTaken: field4.string({
|
|
441
|
+
isOptional: true,
|
|
442
|
+
description: 'Action that caused transition (e.g., "approve")'
|
|
443
|
+
}),
|
|
444
|
+
transitionedTo: field4.string({
|
|
445
|
+
isOptional: true,
|
|
446
|
+
description: "Step key transitioned to"
|
|
447
|
+
}),
|
|
448
|
+
executedBy: field4.string({
|
|
449
|
+
isOptional: true,
|
|
450
|
+
description: "User who completed this step"
|
|
451
|
+
}),
|
|
452
|
+
errorMessage: field4.string({ isOptional: true }),
|
|
453
|
+
errorDetails: field4.json({ isOptional: true }),
|
|
454
|
+
retryCount: field4.int({ default: 0 }),
|
|
455
|
+
createdAt: field4.createdAt(),
|
|
456
|
+
updatedAt: field4.updatedAt(),
|
|
457
|
+
startedAt: field4.dateTime({ isOptional: true }),
|
|
458
|
+
completedAt: field4.dateTime({ isOptional: true }),
|
|
459
|
+
workflowInstance: field4.belongsTo("WorkflowInstance", ["workflowInstanceId"], ["id"], { onDelete: "Cascade" }),
|
|
460
|
+
workflowStep: field4.belongsTo("WorkflowStep", ["workflowStepId"], ["id"])
|
|
461
|
+
},
|
|
462
|
+
indexes: [
|
|
463
|
+
index4.on(["workflowInstanceId", "executionOrder"]),
|
|
464
|
+
index4.on(["workflowInstanceId", "workflowStepId"]),
|
|
465
|
+
index4.on(["status"])
|
|
466
|
+
],
|
|
467
|
+
enums: [StepExecutionStatusEnum]
|
|
468
|
+
});
|
|
469
|
+
// src/entities/index.ts
|
|
470
|
+
var workflowSystemEntities = [
|
|
471
|
+
WorkflowDefinitionEntity,
|
|
472
|
+
WorkflowStepEntity,
|
|
473
|
+
WorkflowInstanceEntity,
|
|
474
|
+
StepExecutionEntity,
|
|
475
|
+
ApprovalRequestEntity,
|
|
476
|
+
ApprovalCommentEntity
|
|
14
477
|
];
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
478
|
+
var workflowSystemSchemaContribution = {
|
|
479
|
+
moduleId: "@contractspec/example.workflow-system",
|
|
480
|
+
entities: workflowSystemEntities,
|
|
481
|
+
enums: [
|
|
482
|
+
WorkflowStatusEnum,
|
|
483
|
+
WorkflowTriggerTypeEnum,
|
|
484
|
+
StepTypeEnum,
|
|
485
|
+
ApprovalModeEnum,
|
|
486
|
+
InstanceStatusEnum,
|
|
487
|
+
StepExecutionStatusEnum,
|
|
488
|
+
ApprovalStatusEnum,
|
|
489
|
+
ApprovalDecisionEnum
|
|
490
|
+
]
|
|
491
|
+
};
|
|
492
|
+
export {
|
|
493
|
+
workflowSystemSchemaContribution,
|
|
494
|
+
workflowSystemEntities,
|
|
495
|
+
WorkflowTriggerTypeEnum,
|
|
496
|
+
WorkflowStepEntity,
|
|
497
|
+
WorkflowStatusEnum,
|
|
498
|
+
WorkflowInstanceEntity,
|
|
499
|
+
WorkflowDefinitionEntity,
|
|
500
|
+
StepTypeEnum,
|
|
501
|
+
StepExecutionStatusEnum,
|
|
502
|
+
StepExecutionEntity,
|
|
503
|
+
InstanceStatusEnum,
|
|
504
|
+
ApprovalStatusEnum,
|
|
505
|
+
ApprovalRequestEntity,
|
|
506
|
+
ApprovalModeEnum,
|
|
507
|
+
ApprovalDecisionEnum,
|
|
508
|
+
ApprovalCommentEntity
|
|
28
509
|
};
|
|
29
|
-
|
|
30
|
-
//#endregion
|
|
31
|
-
export { ApprovalCommentEntity, ApprovalDecisionEnum, ApprovalModeEnum, ApprovalRequestEntity, ApprovalStatusEnum, InstanceStatusEnum, StepExecutionEntity, StepExecutionStatusEnum, StepTypeEnum, WorkflowDefinitionEntity, WorkflowInstanceEntity, WorkflowStatusEnum, WorkflowStepEntity, WorkflowTriggerTypeEnum, workflowSystemEntities, workflowSystemSchemaContribution };
|
|
32
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1,69 +1,64 @@
|
|
|
1
|
-
import * as _contractspec_lib_schema0 from "@contractspec/lib.schema";
|
|
2
|
-
|
|
3
|
-
//#region src/entities/instance.d.ts
|
|
4
1
|
/**
|
|
5
2
|
* Instance status enum - lifecycle of a workflow instance.
|
|
6
3
|
*/
|
|
7
|
-
declare const InstanceStatusEnum:
|
|
4
|
+
export declare const InstanceStatusEnum: import("@contractspec/lib.schema").EntityEnumDef;
|
|
8
5
|
/**
|
|
9
6
|
* Step execution status enum.
|
|
10
7
|
*/
|
|
11
|
-
declare const StepExecutionStatusEnum:
|
|
8
|
+
export declare const StepExecutionStatusEnum: import("@contractspec/lib.schema").EntityEnumDef;
|
|
12
9
|
/**
|
|
13
10
|
* WorkflowInstance entity - a running instance of a workflow.
|
|
14
11
|
*
|
|
15
12
|
* When a workflow is triggered, an instance is created. The instance
|
|
16
13
|
* tracks the current state and all data associated with this execution.
|
|
17
14
|
*/
|
|
18
|
-
declare const WorkflowInstanceEntity:
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
15
|
+
export declare const WorkflowInstanceEntity: import("@contractspec/lib.schema").EntitySpec<{
|
|
16
|
+
id: import("@contractspec/lib.schema").EntityScalarField;
|
|
17
|
+
workflowDefinitionId: import("@contractspec/lib.schema").EntityScalarField;
|
|
18
|
+
referenceId: import("@contractspec/lib.schema").EntityScalarField;
|
|
19
|
+
referenceType: import("@contractspec/lib.schema").EntityScalarField;
|
|
20
|
+
status: import("@contractspec/lib.schema").EntityEnumField;
|
|
21
|
+
currentStepId: import("@contractspec/lib.schema").EntityScalarField;
|
|
22
|
+
contextData: import("@contractspec/lib.schema").EntityScalarField;
|
|
23
|
+
triggeredBy: import("@contractspec/lib.schema").EntityScalarField;
|
|
24
|
+
triggerSource: import("@contractspec/lib.schema").EntityScalarField;
|
|
25
|
+
organizationId: import("@contractspec/lib.schema").EntityScalarField;
|
|
26
|
+
priority: import("@contractspec/lib.schema").EntityScalarField;
|
|
27
|
+
dueAt: import("@contractspec/lib.schema").EntityScalarField;
|
|
28
|
+
outcome: import("@contractspec/lib.schema").EntityScalarField;
|
|
29
|
+
resultData: import("@contractspec/lib.schema").EntityScalarField;
|
|
30
|
+
errorMessage: import("@contractspec/lib.schema").EntityScalarField;
|
|
31
|
+
createdAt: import("@contractspec/lib.schema").EntityScalarField;
|
|
32
|
+
updatedAt: import("@contractspec/lib.schema").EntityScalarField;
|
|
33
|
+
startedAt: import("@contractspec/lib.schema").EntityScalarField;
|
|
34
|
+
completedAt: import("@contractspec/lib.schema").EntityScalarField;
|
|
35
|
+
workflowDefinition: import("@contractspec/lib.schema").EntityRelationField;
|
|
36
|
+
currentStep: import("@contractspec/lib.schema").EntityRelationField;
|
|
37
|
+
stepExecutions: import("@contractspec/lib.schema").EntityRelationField;
|
|
38
|
+
approvalRequests: import("@contractspec/lib.schema").EntityRelationField;
|
|
42
39
|
}>;
|
|
43
40
|
/**
|
|
44
41
|
* StepExecution entity - tracks execution of a step within an instance.
|
|
45
42
|
*/
|
|
46
|
-
declare const StepExecutionEntity:
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
43
|
+
export declare const StepExecutionEntity: import("@contractspec/lib.schema").EntitySpec<{
|
|
44
|
+
id: import("@contractspec/lib.schema").EntityScalarField;
|
|
45
|
+
workflowInstanceId: import("@contractspec/lib.schema").EntityScalarField;
|
|
46
|
+
workflowStepId: import("@contractspec/lib.schema").EntityScalarField;
|
|
47
|
+
status: import("@contractspec/lib.schema").EntityEnumField;
|
|
48
|
+
executionOrder: import("@contractspec/lib.schema").EntityScalarField;
|
|
49
|
+
inputData: import("@contractspec/lib.schema").EntityScalarField;
|
|
50
|
+
outputData: import("@contractspec/lib.schema").EntityScalarField;
|
|
51
|
+
actionTaken: import("@contractspec/lib.schema").EntityScalarField;
|
|
52
|
+
transitionedTo: import("@contractspec/lib.schema").EntityScalarField;
|
|
53
|
+
executedBy: import("@contractspec/lib.schema").EntityScalarField;
|
|
54
|
+
errorMessage: import("@contractspec/lib.schema").EntityScalarField;
|
|
55
|
+
errorDetails: import("@contractspec/lib.schema").EntityScalarField;
|
|
56
|
+
retryCount: import("@contractspec/lib.schema").EntityScalarField;
|
|
57
|
+
createdAt: import("@contractspec/lib.schema").EntityScalarField;
|
|
58
|
+
updatedAt: import("@contractspec/lib.schema").EntityScalarField;
|
|
59
|
+
startedAt: import("@contractspec/lib.schema").EntityScalarField;
|
|
60
|
+
completedAt: import("@contractspec/lib.schema").EntityScalarField;
|
|
61
|
+
workflowInstance: import("@contractspec/lib.schema").EntityRelationField;
|
|
62
|
+
workflowStep: import("@contractspec/lib.schema").EntityRelationField;
|
|
66
63
|
}>;
|
|
67
|
-
//#endregion
|
|
68
|
-
export { InstanceStatusEnum, StepExecutionEntity, StepExecutionStatusEnum, WorkflowInstanceEntity };
|
|
69
64
|
//# sourceMappingURL=instance.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instance.d.ts","
|
|
1
|
+
{"version":3,"file":"instance.d.ts","sourceRoot":"","sources":["../../src/entities/instance.ts"],"names":[],"mappings":"AAOA;;GAEG;AACH,eAAO,MAAM,kBAAkB,kDAc7B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,uBAAuB,kDAYlC,CAAC;AAEH;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;EA8FjC,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;EA2E9B,CAAC"}
|