@contractspec/example.workflow-system 1.57.0 → 1.58.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.
Files changed (209) hide show
  1. package/dist/approval/approval.enum.d.ts +2 -7
  2. package/dist/approval/approval.enum.d.ts.map +1 -1
  3. package/dist/approval/approval.enum.js +20 -26
  4. package/dist/approval/approval.event.d.ts +108 -114
  5. package/dist/approval/approval.event.d.ts.map +1 -1
  6. package/dist/approval/approval.event.js +103 -210
  7. package/dist/approval/approval.handler.d.ts +17 -18
  8. package/dist/approval/approval.handler.d.ts.map +1 -1
  9. package/dist/approval/approval.operations.d.ts +429 -435
  10. package/dist/approval/approval.operations.d.ts.map +1 -1
  11. package/dist/approval/approval.operations.js +364 -339
  12. package/dist/approval/approval.schema.d.ts +86 -91
  13. package/dist/approval/approval.schema.d.ts.map +1 -1
  14. package/dist/approval/approval.schema.js +71 -107
  15. package/dist/approval/index.d.ts +8 -5
  16. package/dist/approval/index.d.ts.map +1 -0
  17. package/dist/approval/index.js +484 -5
  18. package/dist/browser/approval/approval.enum.js +22 -0
  19. package/dist/browser/approval/approval.event.js +112 -0
  20. package/dist/browser/approval/approval.operations.js +369 -0
  21. package/dist/browser/approval/approval.schema.js +73 -0
  22. package/dist/browser/approval/index.js +484 -0
  23. package/dist/browser/docs/index.js +103 -0
  24. package/dist/browser/docs/workflow-system.docblock.js +103 -0
  25. package/dist/browser/entities/approval.js +119 -0
  26. package/dist/browser/entities/index.js +508 -0
  27. package/dist/browser/entities/instance.js +161 -0
  28. package/dist/browser/entities/step.js +124 -0
  29. package/dist/browser/entities/workflow.js +82 -0
  30. package/dist/browser/example.js +42 -0
  31. package/dist/browser/handlers/index.js +253 -0
  32. package/dist/browser/handlers/workflow.handlers.js +253 -0
  33. package/dist/browser/index.js +3120 -0
  34. package/dist/browser/instance/index.js +677 -0
  35. package/dist/browser/instance/instance.enum.js +15 -0
  36. package/dist/browser/instance/instance.event.js +164 -0
  37. package/dist/browser/instance/instance.handler.js +356 -0
  38. package/dist/browser/instance/instance.operations.js +9 -0
  39. package/dist/browser/instance/instance.schema.js +101 -0
  40. package/dist/browser/presentations/index.js +109 -0
  41. package/dist/browser/seeders/index.js +3 -0
  42. package/dist/browser/shared/index.js +3 -0
  43. package/dist/browser/shared/mock-data.js +11 -0
  44. package/dist/browser/shared/types.js +0 -0
  45. package/dist/browser/state-machine/index.js +6 -0
  46. package/dist/browser/tests/operations.test-spec.js +6 -0
  47. package/dist/browser/ui/WorkflowDashboard.js +3 -0
  48. package/dist/browser/ui/hooks/index.js +50 -0
  49. package/dist/browser/ui/hooks/useWorkflowList.js +50 -0
  50. package/dist/browser/ui/index.js +54 -0
  51. package/dist/browser/ui/renderers/index.js +227 -0
  52. package/dist/browser/ui/renderers/workflow.markdown.js +227 -0
  53. package/dist/browser/workflow/index.js +21 -0
  54. package/dist/browser/workflow/workflow.enum.js +36 -0
  55. package/dist/browser/workflow/workflow.event.js +6 -0
  56. package/dist/browser/workflow/workflow.handler.js +5 -0
  57. package/dist/browser/workflow/workflow.operations.js +8 -0
  58. package/dist/browser/workflow/workflow.schema.js +151 -0
  59. package/dist/browser/workflow-system.capability.js +5 -0
  60. package/dist/browser/workflow-system.feature.js +3 -0
  61. package/dist/docs/index.d.ts +2 -1
  62. package/dist/docs/index.d.ts.map +1 -0
  63. package/dist/docs/index.js +104 -1
  64. package/dist/docs/workflow-system.docblock.d.ts +2 -1
  65. package/dist/docs/workflow-system.docblock.d.ts.map +1 -0
  66. package/dist/docs/workflow-system.docblock.js +45 -56
  67. package/dist/entities/approval.d.ts +35 -40
  68. package/dist/entities/approval.d.ts.map +1 -1
  69. package/dist/entities/approval.js +116 -124
  70. package/dist/entities/index.d.ts +132 -137
  71. package/dist/entities/index.d.ts.map +1 -1
  72. package/dist/entities/index.js +506 -29
  73. package/dist/entities/instance.d.ts +46 -51
  74. package/dist/entities/instance.d.ts.map +1 -1
  75. package/dist/entities/instance.js +158 -164
  76. package/dist/entities/step.d.ts +31 -36
  77. package/dist/entities/step.d.ts.map +1 -1
  78. package/dist/entities/step.js +122 -132
  79. package/dist/entities/workflow.d.ts +22 -27
  80. package/dist/entities/workflow.d.ts.map +1 -1
  81. package/dist/entities/workflow.js +80 -99
  82. package/dist/example.d.ts +2 -6
  83. package/dist/example.d.ts.map +1 -1
  84. package/dist/example.js +41 -55
  85. package/dist/handlers/index.d.ts +2 -2
  86. package/dist/handlers/index.d.ts.map +1 -0
  87. package/dist/handlers/index.js +254 -3
  88. package/dist/handlers/workflow.handlers.d.ts +107 -106
  89. package/dist/handlers/workflow.handlers.d.ts.map +1 -1
  90. package/dist/handlers/workflow.handlers.js +237 -246
  91. package/dist/index.d.ts +15 -26
  92. package/dist/index.d.ts.map +1 -0
  93. package/dist/index.js +3121 -26
  94. package/dist/instance/index.d.ts +8 -5
  95. package/dist/instance/index.d.ts.map +1 -0
  96. package/dist/instance/index.js +677 -5
  97. package/dist/instance/instance.enum.d.ts +1 -6
  98. package/dist/instance/instance.enum.d.ts.map +1 -1
  99. package/dist/instance/instance.enum.js +14 -18
  100. package/dist/instance/instance.event.d.ts +313 -319
  101. package/dist/instance/instance.event.d.ts.map +1 -1
  102. package/dist/instance/instance.event.js +151 -279
  103. package/dist/instance/instance.handler.d.ts +21 -22
  104. package/dist/instance/instance.handler.d.ts.map +1 -1
  105. package/dist/instance/instance.handler.js +352 -89
  106. package/dist/instance/instance.operations.d.ts +819 -825
  107. package/dist/instance/instance.operations.d.ts.map +1 -1
  108. package/dist/instance/instance.operations.js +10 -464
  109. package/dist/instance/instance.schema.d.ts +196 -201
  110. package/dist/instance/instance.schema.d.ts.map +1 -1
  111. package/dist/instance/instance.schema.js +97 -167
  112. package/dist/presentations/index.d.ts +23 -28
  113. package/dist/presentations/index.d.ts.map +1 -1
  114. package/dist/presentations/index.js +104 -334
  115. package/dist/seeders/index.d.ts +4 -8
  116. package/dist/seeders/index.d.ts.map +1 -1
  117. package/dist/seeders/index.js +4 -19
  118. package/dist/shared/index.d.ts +6 -3
  119. package/dist/shared/index.d.ts.map +1 -0
  120. package/dist/shared/index.js +4 -3
  121. package/dist/shared/mock-data.d.ts +16 -16
  122. package/dist/shared/mock-data.d.ts.map +1 -1
  123. package/dist/shared/mock-data.js +11 -11
  124. package/dist/shared/types.d.ts +69 -72
  125. package/dist/shared/types.d.ts.map +1 -1
  126. package/dist/shared/types.js +1 -0
  127. package/dist/state-machine/index.d.ts +92 -95
  128. package/dist/state-machine/index.d.ts.map +1 -1
  129. package/dist/state-machine/index.js +6 -157
  130. package/dist/tests/operations.test-spec.d.ts +4 -9
  131. package/dist/tests/operations.test-spec.d.ts.map +1 -1
  132. package/dist/tests/operations.test-spec.js +7 -123
  133. package/dist/ui/WorkflowDashboard.d.ts +1 -6
  134. package/dist/ui/WorkflowDashboard.d.ts.map +1 -1
  135. package/dist/ui/WorkflowDashboard.js +3 -222
  136. package/dist/ui/hooks/index.d.ts +2 -2
  137. package/dist/ui/hooks/index.d.ts.map +1 -0
  138. package/dist/ui/hooks/index.js +51 -5
  139. package/dist/ui/hooks/useWorkflowList.d.ts +15 -19
  140. package/dist/ui/hooks/useWorkflowList.d.ts.map +1 -1
  141. package/dist/ui/hooks/useWorkflowList.js +47 -51
  142. package/dist/ui/index.d.ts +7 -6
  143. package/dist/ui/index.d.ts.map +1 -0
  144. package/dist/ui/index.js +55 -6
  145. package/dist/ui/renderers/index.d.ts +2 -2
  146. package/dist/ui/renderers/index.d.ts.map +1 -0
  147. package/dist/ui/renderers/index.js +227 -2
  148. package/dist/ui/renderers/workflow.markdown.d.ts +13 -14
  149. package/dist/ui/renderers/workflow.markdown.d.ts.map +1 -1
  150. package/dist/ui/renderers/workflow.markdown.js +223 -229
  151. package/dist/workflow/index.d.ts +8 -5
  152. package/dist/workflow/index.d.ts.map +1 -0
  153. package/dist/workflow/index.js +22 -6
  154. package/dist/workflow/workflow.enum.d.ts +4 -9
  155. package/dist/workflow/workflow.enum.d.ts.map +1 -1
  156. package/dist/workflow/workflow.enum.js +32 -42
  157. package/dist/workflow/workflow.event.d.ts +112 -118
  158. package/dist/workflow/workflow.event.d.ts.map +1 -1
  159. package/dist/workflow/workflow.event.js +7 -150
  160. package/dist/workflow/workflow.handler.d.ts +23 -24
  161. package/dist/workflow/workflow.handler.d.ts.map +1 -1
  162. package/dist/workflow/workflow.handler.js +6 -66
  163. package/dist/workflow/workflow.operations.d.ts +847 -853
  164. package/dist/workflow/workflow.operations.d.ts.map +1 -1
  165. package/dist/workflow/workflow.operations.js +9 -345
  166. package/dist/workflow/workflow.schema.d.ts +229 -234
  167. package/dist/workflow/workflow.schema.d.ts.map +1 -1
  168. package/dist/workflow/workflow.schema.js +146 -243
  169. package/dist/workflow-system.capability.d.ts +3 -8
  170. package/dist/workflow-system.capability.d.ts.map +1 -1
  171. package/dist/workflow-system.capability.js +6 -34
  172. package/dist/workflow-system.feature.d.ts +1 -6
  173. package/dist/workflow-system.feature.d.ts.map +1 -1
  174. package/dist/workflow-system.feature.js +4 -346
  175. package/package.json +415 -93
  176. package/dist/approval/approval.enum.js.map +0 -1
  177. package/dist/approval/approval.event.js.map +0 -1
  178. package/dist/approval/approval.handler.js +0 -72
  179. package/dist/approval/approval.handler.js.map +0 -1
  180. package/dist/approval/approval.operations.js.map +0 -1
  181. package/dist/approval/approval.schema.js.map +0 -1
  182. package/dist/docs/workflow-system.docblock.js.map +0 -1
  183. package/dist/entities/approval.js.map +0 -1
  184. package/dist/entities/index.js.map +0 -1
  185. package/dist/entities/instance.js.map +0 -1
  186. package/dist/entities/step.js.map +0 -1
  187. package/dist/entities/workflow.js.map +0 -1
  188. package/dist/example.js.map +0 -1
  189. package/dist/handlers/workflow.handlers.js.map +0 -1
  190. package/dist/instance/instance.enum.js.map +0 -1
  191. package/dist/instance/instance.event.js.map +0 -1
  192. package/dist/instance/instance.handler.js.map +0 -1
  193. package/dist/instance/instance.operations.js.map +0 -1
  194. package/dist/instance/instance.schema.js.map +0 -1
  195. package/dist/presentations/index.js.map +0 -1
  196. package/dist/seeders/index.js.map +0 -1
  197. package/dist/shared/mock-data.js.map +0 -1
  198. package/dist/state-machine/index.js.map +0 -1
  199. package/dist/tests/operations.test-spec.js.map +0 -1
  200. package/dist/ui/WorkflowDashboard.js.map +0 -1
  201. package/dist/ui/hooks/useWorkflowList.js.map +0 -1
  202. package/dist/ui/renderers/workflow.markdown.js.map +0 -1
  203. package/dist/workflow/workflow.enum.js.map +0 -1
  204. package/dist/workflow/workflow.event.js.map +0 -1
  205. package/dist/workflow/workflow.handler.js.map +0 -1
  206. package/dist/workflow/workflow.operations.js.map +0 -1
  207. package/dist/workflow/workflow.schema.js.map +0 -1
  208. package/dist/workflow-system.capability.js.map +0 -1
  209. package/dist/workflow-system.feature.js.map +0 -1
@@ -0,0 +1,227 @@
1
+ // src/ui/renderers/workflow.markdown.ts
2
+ var mockWorkflowDefinitions = [
3
+ {
4
+ id: "wf-1",
5
+ name: "Purchase Approval",
6
+ type: "APPROVAL",
7
+ steps: [
8
+ {
9
+ id: "s1",
10
+ name: "Manager Review",
11
+ order: 1,
12
+ requiredRoles: ["manager"]
13
+ },
14
+ {
15
+ id: "s2",
16
+ name: "Finance Review",
17
+ order: 2,
18
+ requiredRoles: ["finance"]
19
+ },
20
+ { id: "s3", name: "Final Approval", order: 3, requiredRoles: ["admin"] }
21
+ ],
22
+ status: "ACTIVE"
23
+ },
24
+ {
25
+ id: "wf-2",
26
+ name: "Leave Request",
27
+ type: "APPROVAL",
28
+ steps: [
29
+ {
30
+ id: "s1",
31
+ name: "Supervisor Approval",
32
+ order: 1,
33
+ requiredRoles: ["supervisor"]
34
+ },
35
+ { id: "s2", name: "HR Review", order: 2, requiredRoles: ["hr"] }
36
+ ],
37
+ status: "ACTIVE"
38
+ },
39
+ {
40
+ id: "wf-3",
41
+ name: "Document Review",
42
+ type: "SEQUENTIAL",
43
+ steps: [
44
+ { id: "s1", name: "Author Review", order: 1, requiredRoles: ["author"] },
45
+ { id: "s2", name: "Peer Review", order: 2, requiredRoles: ["reviewer"] },
46
+ { id: "s3", name: "Publish", order: 3, requiredRoles: ["publisher"] }
47
+ ],
48
+ status: "DRAFT"
49
+ }
50
+ ];
51
+ var mockWorkflowInstances = [
52
+ {
53
+ id: "inst-1",
54
+ definitionId: "wf-1",
55
+ definitionName: "Purchase Approval",
56
+ status: "IN_PROGRESS",
57
+ currentStepId: "s2",
58
+ startedAt: "2024-01-15T10:00:00Z",
59
+ requestedBy: "John Doe"
60
+ },
61
+ {
62
+ id: "inst-2",
63
+ definitionId: "wf-1",
64
+ definitionName: "Purchase Approval",
65
+ status: "COMPLETED",
66
+ currentStepId: null,
67
+ startedAt: "2024-01-10T09:00:00Z",
68
+ completedAt: "2024-01-12T14:00:00Z",
69
+ requestedBy: "Jane Smith"
70
+ },
71
+ {
72
+ id: "inst-3",
73
+ definitionId: "wf-2",
74
+ definitionName: "Leave Request",
75
+ status: "PENDING",
76
+ currentStepId: "s1",
77
+ startedAt: "2024-01-16T08:00:00Z",
78
+ requestedBy: "Bob Wilson"
79
+ }
80
+ ];
81
+ var workflowDashboardMarkdownRenderer = {
82
+ target: "markdown",
83
+ render: async (desc) => {
84
+ if (desc.source.type !== "component" || desc.source.componentKey !== "WorkflowDashboard") {
85
+ throw new Error("workflowDashboardMarkdownRenderer: not WorkflowDashboard");
86
+ }
87
+ const definitions = mockWorkflowDefinitions;
88
+ const instances = mockWorkflowInstances;
89
+ const activeDefinitions = definitions.filter((d) => d.status === "ACTIVE");
90
+ const pendingInstances = instances.filter((i) => i.status === "PENDING");
91
+ const inProgressInstances = instances.filter((i) => i.status === "IN_PROGRESS");
92
+ const completedInstances = instances.filter((i) => i.status === "COMPLETED");
93
+ const lines = [
94
+ "# Workflow Dashboard",
95
+ "",
96
+ "> Workflow and approval management overview",
97
+ "",
98
+ "## Summary",
99
+ "",
100
+ "| Metric | Value |",
101
+ "|--------|-------|",
102
+ `| Active Workflows | ${activeDefinitions.length} |`,
103
+ `| Pending Approvals | ${pendingInstances.length} |`,
104
+ `| In Progress | ${inProgressInstances.length} |`,
105
+ `| Completed | ${completedInstances.length} |`,
106
+ "",
107
+ "## Active Workflow Definitions",
108
+ ""
109
+ ];
110
+ if (activeDefinitions.length === 0) {
111
+ lines.push("_No active workflow definitions._");
112
+ } else {
113
+ lines.push("| Name | Type | Steps | Status |");
114
+ lines.push("|------|------|-------|--------|");
115
+ for (const def of activeDefinitions) {
116
+ lines.push(`| ${def.name} | ${def.type} | ${def.steps.length} | ${def.status} |`);
117
+ }
118
+ }
119
+ lines.push("");
120
+ lines.push("## Recent Instances");
121
+ lines.push("");
122
+ if (instances.length === 0) {
123
+ lines.push("_No workflow instances._");
124
+ } else {
125
+ lines.push("| Workflow | Requested By | Status | Started |");
126
+ lines.push("|----------|--------------|--------|---------|");
127
+ for (const inst of instances.slice(0, 10)) {
128
+ const startedDate = new Date(inst.startedAt).toLocaleDateString();
129
+ lines.push(`| ${inst.definitionName} | ${inst.requestedBy} | ${inst.status} | ${startedDate} |`);
130
+ }
131
+ }
132
+ return {
133
+ mimeType: "text/markdown",
134
+ body: lines.join(`
135
+ `)
136
+ };
137
+ }
138
+ };
139
+ var workflowDefinitionListMarkdownRenderer = {
140
+ target: "markdown",
141
+ render: async (desc) => {
142
+ if (desc.source.type !== "component" || desc.source.componentKey !== "WorkflowDefinitionList") {
143
+ throw new Error("workflowDefinitionListMarkdownRenderer: not WorkflowDefinitionList");
144
+ }
145
+ const definitions = mockWorkflowDefinitions;
146
+ const lines = [
147
+ "# Workflow Definitions",
148
+ "",
149
+ "> Configure automated approval and process workflows",
150
+ ""
151
+ ];
152
+ for (const def of definitions) {
153
+ lines.push(`## ${def.name}`);
154
+ lines.push("");
155
+ lines.push(`**Type:** ${def.type} | **Status:** ${def.status}`);
156
+ lines.push("");
157
+ lines.push("### Steps");
158
+ lines.push("");
159
+ for (const step of def.steps) {
160
+ lines.push(`${step.order}. **${step.name}** - Roles: ${step.requiredRoles.join(", ")}`);
161
+ }
162
+ lines.push("");
163
+ }
164
+ return {
165
+ mimeType: "text/markdown",
166
+ body: lines.join(`
167
+ `)
168
+ };
169
+ }
170
+ };
171
+ var workflowInstanceDetailMarkdownRenderer = {
172
+ target: "markdown",
173
+ render: async (desc) => {
174
+ if (desc.source.type !== "component" || desc.source.componentKey !== "WorkflowInstanceDetail") {
175
+ throw new Error("workflowInstanceDetailMarkdownRenderer: not WorkflowInstanceDetail");
176
+ }
177
+ const instance = mockWorkflowInstances[0];
178
+ if (!instance) {
179
+ return {
180
+ mimeType: "text/markdown",
181
+ body: `# No Workflow Instances
182
+
183
+ No workflow instances available.`
184
+ };
185
+ }
186
+ const definition = mockWorkflowDefinitions.find((d) => d.id === instance.definitionId);
187
+ const lines = [
188
+ `# Workflow: ${instance.definitionName}`,
189
+ "",
190
+ `**Instance ID:** ${instance.id}`,
191
+ `**Status:** ${instance.status}`,
192
+ `**Requested By:** ${instance.requestedBy}`,
193
+ `**Started:** ${new Date(instance.startedAt).toLocaleString()}`,
194
+ "",
195
+ "## Steps Progress",
196
+ ""
197
+ ];
198
+ if (definition) {
199
+ for (const step of definition.steps) {
200
+ const isCurrent = step.id === instance.currentStepId;
201
+ const isCompleted = definition.steps.indexOf(step) < definition.steps.findIndex((s) => s.id === instance.currentStepId);
202
+ let status = "⬜ Pending";
203
+ if (isCompleted)
204
+ status = "✅ Completed";
205
+ if (isCurrent)
206
+ status = "\uD83D\uDD04 In Progress";
207
+ lines.push(`- ${status} **${step.name}**`);
208
+ }
209
+ }
210
+ lines.push("");
211
+ lines.push("## Actions");
212
+ lines.push("");
213
+ lines.push("- **Approve** - Move to next step");
214
+ lines.push("- **Reject** - Reject and return");
215
+ lines.push("- **Delegate** - Assign to another approver");
216
+ return {
217
+ mimeType: "text/markdown",
218
+ body: lines.join(`
219
+ `)
220
+ };
221
+ }
222
+ };
223
+ export {
224
+ workflowInstanceDetailMarkdownRenderer,
225
+ workflowDefinitionListMarkdownRenderer,
226
+ workflowDashboardMarkdownRenderer
227
+ };
@@ -0,0 +1,21 @@
1
+ export {
2
+ WorkflowUpdatedEvent,
3
+ WorkflowStepModel,
4
+ WorkflowStatusEnum,
5
+ WorkflowPublishedEvent,
6
+ WorkflowDefinitionModel,
7
+ WorkflowCreatedEvent,
8
+ UpdateWorkflowInputModel,
9
+ UpdateWorkflowContract,
10
+ TriggerTypeEnum,
11
+ StepTypeEnum,
12
+ StepAddedEvent,
13
+ PublishWorkflowContract,
14
+ ListWorkflowsContract,
15
+ GetWorkflowContract,
16
+ CreateWorkflowInputModel,
17
+ CreateWorkflowContract,
18
+ ApprovalModeEnum,
19
+ AddStepInputModel,
20
+ AddStepContract
21
+ };
@@ -0,0 +1,36 @@
1
+ // src/workflow/workflow.enum.ts
2
+ import { defineEnum } from "@contractspec/lib.schema";
3
+ var WorkflowStatusEnum = defineEnum("WorkflowStatus", [
4
+ "DRAFT",
5
+ "ACTIVE",
6
+ "DEPRECATED",
7
+ "ARCHIVED"
8
+ ]);
9
+ var TriggerTypeEnum = defineEnum("WorkflowTriggerType", [
10
+ "MANUAL",
11
+ "EVENT",
12
+ "SCHEDULED",
13
+ "API"
14
+ ]);
15
+ var StepTypeEnum = defineEnum("StepType", [
16
+ "START",
17
+ "APPROVAL",
18
+ "TASK",
19
+ "CONDITION",
20
+ "PARALLEL",
21
+ "WAIT",
22
+ "ACTION",
23
+ "END"
24
+ ]);
25
+ var ApprovalModeEnum = defineEnum("ApprovalMode", [
26
+ "ANY",
27
+ "ALL",
28
+ "MAJORITY",
29
+ "SEQUENTIAL"
30
+ ]);
31
+ export {
32
+ WorkflowStatusEnum,
33
+ TriggerTypeEnum,
34
+ StepTypeEnum,
35
+ ApprovalModeEnum
36
+ };
@@ -0,0 +1,6 @@
1
+ export {
2
+ WorkflowUpdatedEvent,
3
+ WorkflowPublishedEvent,
4
+ WorkflowCreatedEvent,
5
+ StepAddedEvent
6
+ };
@@ -0,0 +1,5 @@
1
+ export {
2
+ handlePublishWorkflow,
3
+ handleCreateWorkflow,
4
+ handleAddStep
5
+ };
@@ -0,0 +1,8 @@
1
+ export {
2
+ UpdateWorkflowContract,
3
+ PublishWorkflowContract,
4
+ ListWorkflowsContract,
5
+ GetWorkflowContract,
6
+ CreateWorkflowContract,
7
+ AddStepContract
8
+ };
@@ -0,0 +1,151 @@
1
+ // src/workflow/workflow.enum.ts
2
+ import { defineEnum } from "@contractspec/lib.schema";
3
+ var WorkflowStatusEnum = defineEnum("WorkflowStatus", [
4
+ "DRAFT",
5
+ "ACTIVE",
6
+ "DEPRECATED",
7
+ "ARCHIVED"
8
+ ]);
9
+ var TriggerTypeEnum = defineEnum("WorkflowTriggerType", [
10
+ "MANUAL",
11
+ "EVENT",
12
+ "SCHEDULED",
13
+ "API"
14
+ ]);
15
+ var StepTypeEnum = defineEnum("StepType", [
16
+ "START",
17
+ "APPROVAL",
18
+ "TASK",
19
+ "CONDITION",
20
+ "PARALLEL",
21
+ "WAIT",
22
+ "ACTION",
23
+ "END"
24
+ ]);
25
+ var ApprovalModeEnum = defineEnum("ApprovalMode", [
26
+ "ANY",
27
+ "ALL",
28
+ "MAJORITY",
29
+ "SEQUENTIAL"
30
+ ]);
31
+
32
+ // src/workflow/workflow.schema.ts
33
+ import { defineSchemaModel, ScalarTypeEnum } from "@contractspec/lib.schema";
34
+ var WorkflowStepModel = defineSchemaModel({
35
+ name: "WorkflowStepModel",
36
+ description: "A step in a workflow definition",
37
+ fields: {
38
+ id: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
39
+ key: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
40
+ name: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
41
+ description: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
42
+ type: { type: StepTypeEnum, isOptional: false },
43
+ position: { type: ScalarTypeEnum.Int_unsecure(), isOptional: false },
44
+ transitions: { type: ScalarTypeEnum.JSON(), isOptional: false },
45
+ approvalMode: { type: ApprovalModeEnum, isOptional: true },
46
+ approverRoles: {
47
+ type: ScalarTypeEnum.String_unsecure(),
48
+ isArray: true,
49
+ isOptional: true
50
+ }
51
+ }
52
+ });
53
+ var WorkflowDefinitionModel = defineSchemaModel({
54
+ name: "WorkflowDefinitionModel",
55
+ description: "A workflow definition",
56
+ fields: {
57
+ id: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
58
+ name: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
59
+ key: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
60
+ description: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
61
+ version: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
62
+ status: { type: WorkflowStatusEnum, isOptional: false },
63
+ triggerType: { type: TriggerTypeEnum, isOptional: false },
64
+ initialStepId: {
65
+ type: ScalarTypeEnum.String_unsecure(),
66
+ isOptional: true
67
+ },
68
+ featureFlagKey: {
69
+ type: ScalarTypeEnum.String_unsecure(),
70
+ isOptional: true
71
+ },
72
+ organizationId: {
73
+ type: ScalarTypeEnum.String_unsecure(),
74
+ isOptional: false
75
+ },
76
+ createdAt: { type: ScalarTypeEnum.DateTime(), isOptional: false },
77
+ updatedAt: { type: ScalarTypeEnum.DateTime(), isOptional: false },
78
+ steps: { type: WorkflowStepModel, isArray: true, isOptional: true }
79
+ }
80
+ });
81
+ var CreateWorkflowInputModel = defineSchemaModel({
82
+ name: "CreateWorkflowInput",
83
+ description: "Input for creating a workflow definition",
84
+ fields: {
85
+ name: { type: ScalarTypeEnum.NonEmptyString(), isOptional: false },
86
+ key: { type: ScalarTypeEnum.NonEmptyString(), isOptional: false },
87
+ description: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
88
+ triggerType: { type: TriggerTypeEnum, isOptional: true },
89
+ triggerConfig: { type: ScalarTypeEnum.JSON(), isOptional: true },
90
+ featureFlagKey: {
91
+ type: ScalarTypeEnum.String_unsecure(),
92
+ isOptional: true
93
+ },
94
+ settings: { type: ScalarTypeEnum.JSON(), isOptional: true }
95
+ }
96
+ });
97
+ var UpdateWorkflowInputModel = defineSchemaModel({
98
+ name: "UpdateWorkflowInput",
99
+ description: "Input for updating a workflow definition",
100
+ fields: {
101
+ workflowId: {
102
+ type: ScalarTypeEnum.String_unsecure(),
103
+ isOptional: false
104
+ },
105
+ name: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
106
+ description: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
107
+ triggerType: { type: TriggerTypeEnum, isOptional: true },
108
+ triggerConfig: { type: ScalarTypeEnum.JSON(), isOptional: true },
109
+ featureFlagKey: {
110
+ type: ScalarTypeEnum.String_unsecure(),
111
+ isOptional: true
112
+ },
113
+ settings: { type: ScalarTypeEnum.JSON(), isOptional: true }
114
+ }
115
+ });
116
+ var AddStepInputModel = defineSchemaModel({
117
+ name: "AddStepInput",
118
+ description: "Input for adding a step to a workflow",
119
+ fields: {
120
+ workflowId: {
121
+ type: ScalarTypeEnum.String_unsecure(),
122
+ isOptional: false
123
+ },
124
+ key: { type: ScalarTypeEnum.NonEmptyString(), isOptional: false },
125
+ name: { type: ScalarTypeEnum.NonEmptyString(), isOptional: false },
126
+ description: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
127
+ type: { type: StepTypeEnum, isOptional: false },
128
+ position: { type: ScalarTypeEnum.Int_unsecure(), isOptional: true },
129
+ transitions: { type: ScalarTypeEnum.JSON(), isOptional: false },
130
+ approvalMode: { type: ApprovalModeEnum, isOptional: true },
131
+ approverRoles: {
132
+ type: ScalarTypeEnum.String_unsecure(),
133
+ isArray: true,
134
+ isOptional: true
135
+ },
136
+ approverUserIds: {
137
+ type: ScalarTypeEnum.String_unsecure(),
138
+ isArray: true,
139
+ isOptional: true
140
+ },
141
+ timeoutSeconds: { type: ScalarTypeEnum.Int_unsecure(), isOptional: true },
142
+ slaSeconds: { type: ScalarTypeEnum.Int_unsecure(), isOptional: true }
143
+ }
144
+ });
145
+ export {
146
+ WorkflowStepModel,
147
+ WorkflowDefinitionModel,
148
+ UpdateWorkflowInputModel,
149
+ CreateWorkflowInputModel,
150
+ AddStepInputModel
151
+ };
@@ -0,0 +1,5 @@
1
+ export {
2
+ WorkflowCapability,
3
+ StateMachineCapability,
4
+ ApprovalCapability
5
+ };
@@ -0,0 +1,3 @@
1
+ export {
2
+ WorkflowSystemFeature
3
+ };
@@ -1 +1,2 @@
1
- export { };
1
+ import './workflow-system.docblock';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/docs/index.ts"],"names":[],"mappings":"AAAA,OAAO,4BAA4B,CAAC"}
@@ -1 +1,104 @@
1
- import "./workflow-system.docblock.js";
1
+ // @bun
2
+ // src/docs/workflow-system.docblock.ts
3
+ import { registerDocBlocks } from "@contractspec/lib.contracts/docs";
4
+ var workflowSystemDocBlocks = [
5
+ {
6
+ id: "docs.examples.workflow-system",
7
+ title: "Workflow / Approval System",
8
+ summary: "Reference app showing state-machine driven approvals with RBAC, audit trail, notifications, and jobs.",
9
+ kind: "reference",
10
+ visibility: "public",
11
+ route: "/docs/examples/workflow-system",
12
+ tags: ["workflow", "approval", "state-machine", "rbac"],
13
+ body: `## Entities
14
+
15
+ - WorkflowDefinition, WorkflowStep, WorkflowInstance, Approval.
16
+ - State machine expressed in \`src/state-machine\` with allowed transitions and role gates.
17
+
18
+ ## Contracts
19
+
20
+ - \`workflow.definition.create\`, \`workflow.instance.start\`, \`workflow.step.approve\`, \`workflow.step.reject\`, \`workflow.instance.comment\`.
21
+ - Policies enforced via Identity/RBAC module; audit trail emitted on each transition.
22
+
23
+ ## Events & Jobs
24
+
25
+ - Emits \`workflow.instance.started\`, \`workflow.step.completed\`, \`workflow.step.rejected\`, \`workflow.instance.finished\`.
26
+ - Reminder jobs can be scheduled via @contractspec/lib.jobs for pending approvals.
27
+
28
+ ## UI / Presentations
29
+
30
+ - Dashboard, definition list/editor, instance detail with action buttons derived from state machine.
31
+ - Templates registered in Studio Template Registry under \`workflow-system\`.
32
+
33
+ ## Notes
34
+
35
+ - Keep transitions declarative to enable safe regeneration; role guards live in spec.
36
+ - Use Notification Center for approval requests and outcomes; attach files via Files module if needed.
37
+ `
38
+ },
39
+ {
40
+ id: "docs.examples.workflow-system.goal",
41
+ title: "Workflow System \u2014 Goal",
42
+ summary: "Why the workflow/approval template exists and outcomes it targets.",
43
+ kind: "goal",
44
+ visibility: "public",
45
+ route: "/docs/examples/workflow-system/goal",
46
+ tags: ["workflow", "goal"],
47
+ body: `## Why it matters
48
+ - Provides a regenerable, role-gated approval engine using declarative state machines.
49
+ - Keeps workflow rules consistent across UI/API/events with auditability.
50
+
51
+ ## Business/Product goal
52
+ - Enable approvals with clear transitions, reminders, and notifications.
53
+ - Support compliance via Audit Trail and Feature Flags for staged changes.
54
+
55
+ ## Success criteria
56
+ - State changes are declarative and regenerate cleanly.
57
+ - Every transition emits auditable events and respects RBAC guards.`
58
+ },
59
+ {
60
+ id: "docs.examples.workflow-system.usage",
61
+ title: "Workflow System \u2014 Usage",
62
+ summary: "How to configure workflows, transitions, and regenerate safely.",
63
+ kind: "usage",
64
+ visibility: "public",
65
+ route: "/docs/examples/workflow-system/usage",
66
+ tags: ["workflow", "usage"],
67
+ body: `## Setup
68
+ 1) Define WorkflowDefinition steps and allowed transitions with role gates in spec.
69
+ 2) Seed sample workflows/instances (if provided) or create via UI; enable reminders via Jobs.
70
+
71
+ ## Extend & regenerate
72
+ 1) Add steps/transitions or approval conditions in spec; include PII paths if comments/files.
73
+ 2) Regenerate to sync UI action buttons and API/state machine behavior.
74
+ 3) Use Feature Flags to trial new transitions or escalation rules.
75
+
76
+ ## Guardrails
77
+ - Emit events for every transition; log to Audit Trail.
78
+ - Use Notifications for approvals/rejections; schedule reminders for pending steps.
79
+ - Keep transitions declarative; avoid imperative branching in handlers.`
80
+ },
81
+ {
82
+ id: "docs.examples.workflow-system.constraints",
83
+ title: "Workflow System \u2014 Constraints & Safety",
84
+ summary: "Internal guardrails for state machines, RBAC, and regeneration semantics.",
85
+ kind: "reference",
86
+ visibility: "internal",
87
+ route: "/docs/examples/workflow-system/constraints",
88
+ tags: ["workflow", "constraints", "internal"],
89
+ body: `## Constraints
90
+ - State machine (steps/transitions) must stay declarative in spec; no hidden code paths.
91
+ - Events to emit: instance.started, step.completed/rejected, instance.finished.
92
+ - Regeneration must not change approval logic without explicit spec diff.
93
+
94
+ ## PII & Compliance
95
+ - Mark any PII in comments/attachments; redact in markdown/JSON.
96
+ - Ensure Audit Trail captures every transition; Notifications for approvals/rejections.
97
+
98
+ ## Verification
99
+ - Add fixtures for transition changes and role gates.
100
+ - Validate reminders (Jobs) stay aligned with pending states after regeneration.
101
+ - Use Feature Flags for new transitions/escalation rules; default safe/off.`
102
+ }
103
+ ];
104
+ registerDocBlocks(workflowSystemDocBlocks);
@@ -1 +1,2 @@
1
- export { };
1
+ export {};
2
+ //# sourceMappingURL=workflow-system.docblock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-system.docblock.d.ts","sourceRoot":"","sources":["../../src/docs/workflow-system.docblock.ts"],"names":[],"mappings":""}