@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
@@ -1,5 +1,8 @@
1
- import { InstanceStatusEnum } from "./instance.enum.js";
2
- import { StartWorkflowInputModel, TransitionInputModel, TransitionResultModel, WorkflowInstanceModel } from "./instance.schema.js";
3
- import { CancelWorkflowContract, GetInstanceContract, ListInstancesContract, PauseWorkflowContract, ResumeWorkflowContract, StartWorkflowContract, TransitionWorkflowContract } from "./instance.operations.js";
4
- import { InstanceCancelledEvent, InstanceCompletedEvent, InstanceFailedEvent, InstancePausedEvent, InstanceResumedEvent, InstanceStartedEvent, InstanceTimedOutEvent, StepEnteredEvent, StepExitedEvent } from "./instance.event.js";
5
- export { CancelWorkflowContract, GetInstanceContract, InstanceCancelledEvent, InstanceCompletedEvent, InstanceFailedEvent, InstancePausedEvent, InstanceResumedEvent, InstanceStartedEvent, InstanceStatusEnum, InstanceTimedOutEvent, ListInstancesContract, PauseWorkflowContract, ResumeWorkflowContract, StartWorkflowContract, StartWorkflowInputModel, StepEnteredEvent, StepExitedEvent, TransitionInputModel, TransitionResultModel, TransitionWorkflowContract, WorkflowInstanceModel };
1
+ /**
2
+ * Instance domain - Workflow instance execution and management.
3
+ */
4
+ export { InstanceStatusEnum } from './instance.enum';
5
+ export { WorkflowInstanceModel, StartWorkflowInputModel, TransitionInputModel, TransitionResultModel, } from './instance.schema';
6
+ export { StartWorkflowContract, TransitionWorkflowContract, PauseWorkflowContract, ResumeWorkflowContract, CancelWorkflowContract, ListInstancesContract, GetInstanceContract, } from './instance.operations';
7
+ export { InstanceStartedEvent, StepEnteredEvent, StepExitedEvent, InstanceCompletedEvent, InstanceCancelledEvent, InstancePausedEvent, InstanceResumedEvent, InstanceFailedEvent, InstanceTimedOutEvent, } from './instance.event';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/instance/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAGrD,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EACvB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,qBAAqB,EACrB,0BAA0B,EAC1B,qBAAqB,EACrB,sBAAsB,EACtB,sBAAsB,EACtB,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,eAAe,EACf,sBAAsB,EACtB,sBAAsB,EACtB,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,kBAAkB,CAAC"}
@@ -1,6 +1,678 @@
1
- import { InstanceStatusEnum } from "./instance.enum.js";
2
- import { StartWorkflowInputModel, TransitionInputModel, TransitionResultModel, WorkflowInstanceModel } from "./instance.schema.js";
3
- import { CancelWorkflowContract, GetInstanceContract, ListInstancesContract, PauseWorkflowContract, ResumeWorkflowContract, StartWorkflowContract, TransitionWorkflowContract } from "./instance.operations.js";
4
- import { InstanceCancelledEvent, InstanceCompletedEvent, InstanceFailedEvent, InstancePausedEvent, InstanceResumedEvent, InstanceStartedEvent, InstanceTimedOutEvent, StepEnteredEvent, StepExitedEvent } from "./instance.event.js";
1
+ // @bun
2
+ // src/instance/instance.enum.ts
3
+ import { defineEnum } from "@contractspec/lib.schema";
4
+ var InstanceStatusEnum = defineEnum("InstanceStatus", [
5
+ "PENDING",
6
+ "RUNNING",
7
+ "WAITING",
8
+ "PAUSED",
9
+ "COMPLETED",
10
+ "CANCELLED",
11
+ "FAILED",
12
+ "TIMEOUT"
13
+ ]);
5
14
 
6
- export { CancelWorkflowContract, GetInstanceContract, InstanceCancelledEvent, InstanceCompletedEvent, InstanceFailedEvent, InstancePausedEvent, InstanceResumedEvent, InstanceStartedEvent, InstanceStatusEnum, InstanceTimedOutEvent, ListInstancesContract, PauseWorkflowContract, ResumeWorkflowContract, StartWorkflowContract, StartWorkflowInputModel, StepEnteredEvent, StepExitedEvent, TransitionInputModel, TransitionResultModel, TransitionWorkflowContract, WorkflowInstanceModel };
15
+ // src/instance/instance.schema.ts
16
+ import { defineSchemaModel, ScalarTypeEnum } from "@contractspec/lib.schema";
17
+ var WorkflowInstanceModel = defineSchemaModel({
18
+ name: "WorkflowInstanceModel",
19
+ description: "A running workflow instance",
20
+ fields: {
21
+ id: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
22
+ workflowDefinitionId: {
23
+ type: ScalarTypeEnum.String_unsecure(),
24
+ isOptional: false
25
+ },
26
+ referenceId: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
27
+ referenceType: {
28
+ type: ScalarTypeEnum.String_unsecure(),
29
+ isOptional: true
30
+ },
31
+ status: { type: InstanceStatusEnum, isOptional: false },
32
+ currentStepId: {
33
+ type: ScalarTypeEnum.String_unsecure(),
34
+ isOptional: true
35
+ },
36
+ contextData: { type: ScalarTypeEnum.JSON(), isOptional: true },
37
+ triggeredBy: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
38
+ organizationId: {
39
+ type: ScalarTypeEnum.String_unsecure(),
40
+ isOptional: false
41
+ },
42
+ priority: { type: ScalarTypeEnum.Int_unsecure(), isOptional: false },
43
+ dueAt: { type: ScalarTypeEnum.DateTime(), isOptional: true },
44
+ outcome: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
45
+ resultData: { type: ScalarTypeEnum.JSON(), isOptional: true },
46
+ errorMessage: {
47
+ type: ScalarTypeEnum.String_unsecure(),
48
+ isOptional: true
49
+ },
50
+ createdAt: { type: ScalarTypeEnum.DateTime(), isOptional: false },
51
+ startedAt: { type: ScalarTypeEnum.DateTime(), isOptional: true },
52
+ completedAt: { type: ScalarTypeEnum.DateTime(), isOptional: true }
53
+ }
54
+ });
55
+ var StartWorkflowInputModel = defineSchemaModel({
56
+ name: "StartWorkflowInput",
57
+ description: "Input for starting a workflow",
58
+ fields: {
59
+ workflowKey: { type: ScalarTypeEnum.NonEmptyString(), isOptional: false },
60
+ contextData: { type: ScalarTypeEnum.JSON(), isOptional: true },
61
+ referenceId: { type: ScalarTypeEnum.String_unsecure(), isOptional: true },
62
+ referenceType: {
63
+ type: ScalarTypeEnum.String_unsecure(),
64
+ isOptional: true
65
+ },
66
+ priority: { type: ScalarTypeEnum.Int_unsecure(), isOptional: true },
67
+ dueAt: { type: ScalarTypeEnum.DateTime(), isOptional: true }
68
+ }
69
+ });
70
+ var TransitionInputModel = defineSchemaModel({
71
+ name: "TransitionInput",
72
+ description: "Input for transitioning a workflow",
73
+ fields: {
74
+ instanceId: { type: ScalarTypeEnum.String_unsecure(), isOptional: false },
75
+ action: { type: ScalarTypeEnum.NonEmptyString(), isOptional: false },
76
+ data: { type: ScalarTypeEnum.JSON(), isOptional: true },
77
+ comment: { type: ScalarTypeEnum.String_unsecure(), isOptional: true }
78
+ }
79
+ });
80
+ var TransitionResultModel = defineSchemaModel({
81
+ name: "TransitionResult",
82
+ description: "Result of a workflow transition",
83
+ fields: {
84
+ success: { type: ScalarTypeEnum.Boolean(), isOptional: false },
85
+ instance: { type: WorkflowInstanceModel, isOptional: false },
86
+ previousStepKey: {
87
+ type: ScalarTypeEnum.String_unsecure(),
88
+ isOptional: true
89
+ },
90
+ currentStepKey: {
91
+ type: ScalarTypeEnum.String_unsecure(),
92
+ isOptional: true
93
+ },
94
+ message: { type: ScalarTypeEnum.String_unsecure(), isOptional: true }
95
+ }
96
+ });
97
+
98
+ // src/instance/instance.operations.ts
99
+ import {
100
+ defineCommand,
101
+ defineQuery
102
+ } from "@contractspec/lib.contracts/operations";
103
+ import { defineSchemaModel as defineSchemaModel2, ScalarTypeEnum as ScalarTypeEnum2 } from "@contractspec/lib.schema";
104
+ var OWNERS = ["@example.workflow-system"];
105
+ var StartWorkflowContract = defineCommand({
106
+ meta: {
107
+ key: "workflow.instance.start",
108
+ version: "1.0.0",
109
+ stability: "stable",
110
+ owners: [...OWNERS],
111
+ tags: ["workflow", "instance", "start"],
112
+ description: "Start a new workflow instance.",
113
+ goal: "Initiate a workflow for a business process.",
114
+ context: "Order creation, request submission, etc."
115
+ },
116
+ io: {
117
+ input: StartWorkflowInputModel,
118
+ output: WorkflowInstanceModel
119
+ },
120
+ policy: { auth: "user" },
121
+ sideEffects: {
122
+ emits: [
123
+ {
124
+ key: "workflow.instance.started",
125
+ version: "1.0.0",
126
+ when: "Workflow starts",
127
+ payload: WorkflowInstanceModel
128
+ },
129
+ {
130
+ key: "workflow.step.entered",
131
+ version: "1.0.0",
132
+ when: "First step entered",
133
+ payload: WorkflowInstanceModel
134
+ }
135
+ ],
136
+ audit: ["workflow.instance.started"]
137
+ },
138
+ acceptance: {
139
+ scenarios: [
140
+ {
141
+ key: "start-workflow-happy-path",
142
+ given: ["Workflow definition exists"],
143
+ when: ["User starts workflow"],
144
+ then: ["Instance is created and started"]
145
+ }
146
+ ],
147
+ examples: [
148
+ {
149
+ key: "start-onboarding",
150
+ input: {
151
+ workflowKey: "onboarding-v1",
152
+ context: { employeeId: "emp-123" }
153
+ },
154
+ output: { id: "inst-456", status: "running" }
155
+ }
156
+ ]
157
+ }
158
+ });
159
+ var TransitionWorkflowContract = defineCommand({
160
+ meta: {
161
+ key: "workflow.instance.transition",
162
+ version: "1.0.0",
163
+ stability: "stable",
164
+ owners: [...OWNERS],
165
+ tags: ["workflow", "instance", "transition", "state-machine"],
166
+ description: "Transition a workflow instance to the next step.",
167
+ goal: "Move workflow forward based on action.",
168
+ context: "Task completion, approval decisions."
169
+ },
170
+ io: {
171
+ input: TransitionInputModel,
172
+ output: TransitionResultModel
173
+ },
174
+ policy: { auth: "user" },
175
+ sideEffects: {
176
+ emits: [
177
+ {
178
+ key: "workflow.step.exited",
179
+ version: "1.0.0",
180
+ when: "Step is exited",
181
+ payload: WorkflowInstanceModel
182
+ },
183
+ {
184
+ key: "workflow.step.entered",
185
+ version: "1.0.0",
186
+ when: "New step is entered",
187
+ payload: WorkflowInstanceModel
188
+ },
189
+ {
190
+ key: "workflow.instance.completed",
191
+ version: "1.0.0",
192
+ when: "Workflow reaches end",
193
+ payload: WorkflowInstanceModel
194
+ }
195
+ ],
196
+ audit: ["workflow.instance.transitioned"]
197
+ },
198
+ acceptance: {
199
+ scenarios: [
200
+ {
201
+ key: "transition-workflow-happy-path",
202
+ given: ["Workflow instance is waiting at step"],
203
+ when: ["User provides input"],
204
+ then: ["Instance moves to next step"]
205
+ }
206
+ ],
207
+ examples: [
208
+ {
209
+ key: "complete-task",
210
+ input: {
211
+ instanceId: "inst-456",
212
+ action: "complete",
213
+ data: { approved: true }
214
+ },
215
+ output: { success: true, nextStep: "notify-hr" }
216
+ }
217
+ ]
218
+ }
219
+ });
220
+ var PauseWorkflowContract = defineCommand({
221
+ meta: {
222
+ key: "workflow.instance.pause",
223
+ version: "1.0.0",
224
+ stability: "stable",
225
+ owners: [...OWNERS],
226
+ tags: ["workflow", "instance", "pause"],
227
+ description: "Pause a running workflow instance.",
228
+ goal: "Temporarily halt workflow execution.",
229
+ context: "Administrative action, emergency stop."
230
+ },
231
+ io: {
232
+ input: defineSchemaModel2({
233
+ name: "PauseResumeInput",
234
+ fields: {
235
+ instanceId: {
236
+ type: ScalarTypeEnum2.String_unsecure(),
237
+ isOptional: false
238
+ },
239
+ reason: { type: ScalarTypeEnum2.String_unsecure(), isOptional: true }
240
+ }
241
+ }),
242
+ output: WorkflowInstanceModel
243
+ },
244
+ policy: { auth: "user" },
245
+ sideEffects: {
246
+ emits: [
247
+ {
248
+ key: "workflow.instance.paused",
249
+ version: "1.0.0",
250
+ when: "Workflow is paused",
251
+ payload: WorkflowInstanceModel
252
+ }
253
+ ],
254
+ audit: ["workflow.instance.paused"]
255
+ },
256
+ acceptance: {
257
+ scenarios: [
258
+ {
259
+ key: "pause-workflow-happy-path",
260
+ given: ["Workflow is running"],
261
+ when: ["Admin pauses workflow"],
262
+ then: ["Instance status becomes PAUSED"]
263
+ }
264
+ ],
265
+ examples: [
266
+ {
267
+ key: "pause-maintenance",
268
+ input: { instanceId: "inst-456", reason: "System maintenance" },
269
+ output: { id: "inst-456", status: "paused" }
270
+ }
271
+ ]
272
+ }
273
+ });
274
+ var ResumeWorkflowContract = defineCommand({
275
+ meta: {
276
+ key: "workflow.instance.resume",
277
+ version: "1.0.0",
278
+ stability: "stable",
279
+ owners: [...OWNERS],
280
+ tags: ["workflow", "instance", "resume"],
281
+ description: "Resume a paused workflow instance.",
282
+ goal: "Continue workflow execution.",
283
+ context: "Administrative action."
284
+ },
285
+ io: {
286
+ input: defineSchemaModel2({
287
+ name: "PauseResumeInput",
288
+ fields: {
289
+ instanceId: {
290
+ type: ScalarTypeEnum2.String_unsecure(),
291
+ isOptional: false
292
+ },
293
+ reason: { type: ScalarTypeEnum2.String_unsecure(), isOptional: true }
294
+ }
295
+ }),
296
+ output: WorkflowInstanceModel
297
+ },
298
+ policy: { auth: "user" },
299
+ sideEffects: {
300
+ emits: [
301
+ {
302
+ key: "workflow.instance.resumed",
303
+ version: "1.0.0",
304
+ when: "Workflow is resumed",
305
+ payload: WorkflowInstanceModel
306
+ }
307
+ ],
308
+ audit: ["workflow.instance.resumed"]
309
+ },
310
+ acceptance: {
311
+ scenarios: [
312
+ {
313
+ key: "resume-workflow-happy-path",
314
+ given: ["Workflow is paused"],
315
+ when: ["Admin resumes workflow"],
316
+ then: ["Instance status becomes RUNNING"]
317
+ }
318
+ ],
319
+ examples: [
320
+ {
321
+ key: "resume-normal",
322
+ input: { instanceId: "inst-456", reason: "Issue resolved" },
323
+ output: { id: "inst-456", status: "running" }
324
+ }
325
+ ]
326
+ }
327
+ });
328
+ var CancelWorkflowContract = defineCommand({
329
+ meta: {
330
+ key: "workflow.instance.cancel",
331
+ version: "1.0.0",
332
+ stability: "stable",
333
+ owners: [...OWNERS],
334
+ tags: ["workflow", "instance", "cancel"],
335
+ description: "Cancel a workflow instance.",
336
+ goal: "Terminate workflow without completion.",
337
+ context: "User request, system cancellation."
338
+ },
339
+ io: {
340
+ input: defineSchemaModel2({
341
+ name: "CancelWorkflowInput",
342
+ fields: {
343
+ instanceId: {
344
+ type: ScalarTypeEnum2.String_unsecure(),
345
+ isOptional: false
346
+ },
347
+ reason: {
348
+ type: ScalarTypeEnum2.String_unsecure(),
349
+ isOptional: false
350
+ }
351
+ }
352
+ }),
353
+ output: WorkflowInstanceModel
354
+ },
355
+ policy: { auth: "user" },
356
+ sideEffects: {
357
+ emits: [
358
+ {
359
+ key: "workflow.instance.cancelled",
360
+ version: "1.0.0",
361
+ when: "Workflow is cancelled",
362
+ payload: WorkflowInstanceModel
363
+ }
364
+ ],
365
+ audit: ["workflow.instance.cancelled"]
366
+ },
367
+ acceptance: {
368
+ scenarios: [
369
+ {
370
+ key: "cancel-workflow-happy-path",
371
+ given: ["Workflow is running"],
372
+ when: ["User cancels workflow"],
373
+ then: ["Instance status becomes CANCELLED"]
374
+ }
375
+ ],
376
+ examples: [
377
+ {
378
+ key: "cancel-mistake",
379
+ input: { instanceId: "inst-456", reason: "Created by mistake" },
380
+ output: { id: "inst-456", status: "cancelled" }
381
+ }
382
+ ]
383
+ }
384
+ });
385
+ var ListInstancesContract = defineQuery({
386
+ meta: {
387
+ key: "workflow.instance.list",
388
+ version: "1.0.0",
389
+ stability: "stable",
390
+ owners: [...OWNERS],
391
+ tags: ["workflow", "instance", "list"],
392
+ description: "List workflow instances with filtering.",
393
+ goal: "Browse and search running workflows.",
394
+ context: "Dashboard, monitoring."
395
+ },
396
+ io: {
397
+ input: defineSchemaModel2({
398
+ name: "ListInstancesInput",
399
+ fields: {
400
+ workflowKey: {
401
+ type: ScalarTypeEnum2.String_unsecure(),
402
+ isOptional: true
403
+ },
404
+ status: { type: InstanceStatusEnum, isOptional: true },
405
+ referenceType: {
406
+ type: ScalarTypeEnum2.String_unsecure(),
407
+ isOptional: true
408
+ },
409
+ referenceId: {
410
+ type: ScalarTypeEnum2.String_unsecure(),
411
+ isOptional: true
412
+ },
413
+ triggeredBy: {
414
+ type: ScalarTypeEnum2.String_unsecure(),
415
+ isOptional: true
416
+ },
417
+ limit: {
418
+ type: ScalarTypeEnum2.Int_unsecure(),
419
+ isOptional: true,
420
+ defaultValue: 20
421
+ },
422
+ offset: {
423
+ type: ScalarTypeEnum2.Int_unsecure(),
424
+ isOptional: true,
425
+ defaultValue: 0
426
+ }
427
+ }
428
+ }),
429
+ output: defineSchemaModel2({
430
+ name: "ListInstancesOutput",
431
+ fields: {
432
+ instances: {
433
+ type: WorkflowInstanceModel,
434
+ isArray: true,
435
+ isOptional: false
436
+ },
437
+ total: { type: ScalarTypeEnum2.Int_unsecure(), isOptional: false }
438
+ }
439
+ })
440
+ },
441
+ policy: { auth: "user" },
442
+ acceptance: {
443
+ scenarios: [
444
+ {
445
+ key: "list-instances-happy-path",
446
+ given: ["Workflow instances exist"],
447
+ when: ["User lists instances"],
448
+ then: ["List of instances is returned"]
449
+ }
450
+ ],
451
+ examples: [
452
+ {
453
+ key: "list-running",
454
+ input: { status: "running", limit: 10 },
455
+ output: { instances: [], total: 5 }
456
+ }
457
+ ]
458
+ }
459
+ });
460
+ var GetInstanceContract = defineQuery({
461
+ meta: {
462
+ key: "workflow.instance.get",
463
+ version: "1.0.0",
464
+ stability: "stable",
465
+ owners: [...OWNERS],
466
+ tags: ["workflow", "instance", "get"],
467
+ description: "Get a workflow instance with details.",
468
+ goal: "View workflow instance details.",
469
+ context: "Instance detail view."
470
+ },
471
+ io: {
472
+ input: defineSchemaModel2({
473
+ name: "GetInstanceInput",
474
+ fields: {
475
+ instanceId: {
476
+ type: ScalarTypeEnum2.String_unsecure(),
477
+ isOptional: false
478
+ }
479
+ }
480
+ }),
481
+ output: WorkflowInstanceModel
482
+ },
483
+ policy: { auth: "user" },
484
+ acceptance: {
485
+ scenarios: [
486
+ {
487
+ key: "get-instance-happy-path",
488
+ given: ["Instance exists"],
489
+ when: ["User requests instance details"],
490
+ then: ["Instance details are returned"]
491
+ }
492
+ ],
493
+ examples: [
494
+ {
495
+ key: "get-details",
496
+ input: { instanceId: "inst-456" },
497
+ output: { id: "inst-456", workflowKey: "onboarding-v1" }
498
+ }
499
+ ]
500
+ }
501
+ });
502
+
503
+ // src/instance/instance.event.ts
504
+ import { defineEvent, defineSchemaModel as defineSchemaModel3 } from "@contractspec/lib.contracts";
505
+ import { ScalarTypeEnum as ScalarTypeEnum3 } from "@contractspec/lib.schema";
506
+ var InstanceEventPayload = defineSchemaModel3({
507
+ name: "InstanceEventPayload",
508
+ description: "Base payload for instance events",
509
+ fields: {
510
+ instanceId: { type: ScalarTypeEnum3.String_unsecure(), isOptional: false },
511
+ workflowId: { type: ScalarTypeEnum3.String_unsecure(), isOptional: false },
512
+ workflowKey: { type: ScalarTypeEnum3.String_unsecure(), isOptional: false },
513
+ status: { type: ScalarTypeEnum3.String_unsecure(), isOptional: false },
514
+ referenceId: { type: ScalarTypeEnum3.String_unsecure(), isOptional: true },
515
+ referenceType: {
516
+ type: ScalarTypeEnum3.String_unsecure(),
517
+ isOptional: true
518
+ },
519
+ triggeredBy: { type: ScalarTypeEnum3.String_unsecure(), isOptional: false },
520
+ organizationId: {
521
+ type: ScalarTypeEnum3.String_unsecure(),
522
+ isOptional: false
523
+ },
524
+ timestamp: { type: ScalarTypeEnum3.DateTime(), isOptional: false }
525
+ }
526
+ });
527
+ var StepTransitionPayload = defineSchemaModel3({
528
+ name: "StepTransitionEventPayload",
529
+ description: "Payload for step transition events",
530
+ fields: {
531
+ instanceId: { type: ScalarTypeEnum3.String_unsecure(), isOptional: false },
532
+ workflowId: { type: ScalarTypeEnum3.String_unsecure(), isOptional: false },
533
+ fromStepKey: { type: ScalarTypeEnum3.String_unsecure(), isOptional: true },
534
+ toStepKey: { type: ScalarTypeEnum3.String_unsecure(), isOptional: false },
535
+ action: { type: ScalarTypeEnum3.String_unsecure(), isOptional: true },
536
+ executedBy: { type: ScalarTypeEnum3.String_unsecure(), isOptional: false },
537
+ timestamp: { type: ScalarTypeEnum3.DateTime(), isOptional: false }
538
+ }
539
+ });
540
+ var InstanceCompletedPayload = defineSchemaModel3({
541
+ name: "InstanceCompletedEventPayload",
542
+ description: "Payload when instance completes",
543
+ fields: {
544
+ instanceId: { type: ScalarTypeEnum3.String_unsecure(), isOptional: false },
545
+ workflowId: { type: ScalarTypeEnum3.String_unsecure(), isOptional: false },
546
+ workflowKey: { type: ScalarTypeEnum3.String_unsecure(), isOptional: false },
547
+ outcome: { type: ScalarTypeEnum3.String_unsecure(), isOptional: false },
548
+ referenceId: { type: ScalarTypeEnum3.String_unsecure(), isOptional: true },
549
+ referenceType: {
550
+ type: ScalarTypeEnum3.String_unsecure(),
551
+ isOptional: true
552
+ },
553
+ duration: { type: ScalarTypeEnum3.Int_unsecure(), isOptional: false },
554
+ timestamp: { type: ScalarTypeEnum3.DateTime(), isOptional: false }
555
+ }
556
+ });
557
+ var InstanceStartedEvent = defineEvent({
558
+ meta: {
559
+ key: "workflow.instance.started",
560
+ version: "1.0.0",
561
+ description: "A new workflow instance has been started.",
562
+ stability: "stable",
563
+ owners: ["@workflow-team"],
564
+ tags: ["workflow", "instance", "started"]
565
+ },
566
+ payload: InstanceEventPayload
567
+ });
568
+ var StepEnteredEvent = defineEvent({
569
+ meta: {
570
+ key: "workflow.step.entered",
571
+ version: "1.0.0",
572
+ description: "A workflow instance has entered a new step.",
573
+ stability: "stable",
574
+ owners: ["@workflow-team"],
575
+ tags: ["workflow", "step", "entered"]
576
+ },
577
+ payload: StepTransitionPayload
578
+ });
579
+ var StepExitedEvent = defineEvent({
580
+ meta: {
581
+ key: "workflow.step.exited",
582
+ version: "1.0.0",
583
+ description: "A workflow instance has exited a step.",
584
+ stability: "stable",
585
+ owners: ["@workflow-team"],
586
+ tags: ["workflow", "step", "exited"]
587
+ },
588
+ payload: StepTransitionPayload
589
+ });
590
+ var InstanceCompletedEvent = defineEvent({
591
+ meta: {
592
+ key: "workflow.instance.completed",
593
+ version: "1.0.0",
594
+ description: "A workflow instance has completed.",
595
+ stability: "stable",
596
+ owners: ["@workflow-team"],
597
+ tags: ["workflow", "instance", "completed"]
598
+ },
599
+ payload: InstanceCompletedPayload
600
+ });
601
+ var InstanceCancelledEvent = defineEvent({
602
+ meta: {
603
+ key: "workflow.instance.cancelled",
604
+ version: "1.0.0",
605
+ description: "A workflow instance has been cancelled.",
606
+ stability: "stable",
607
+ owners: ["@workflow-team"],
608
+ tags: ["workflow", "instance", "cancelled"]
609
+ },
610
+ payload: InstanceEventPayload
611
+ });
612
+ var InstancePausedEvent = defineEvent({
613
+ meta: {
614
+ key: "workflow.instance.paused",
615
+ version: "1.0.0",
616
+ description: "A workflow instance has been paused.",
617
+ stability: "stable",
618
+ owners: ["@workflow-team"],
619
+ tags: ["workflow", "instance", "paused"]
620
+ },
621
+ payload: InstanceEventPayload
622
+ });
623
+ var InstanceResumedEvent = defineEvent({
624
+ meta: {
625
+ key: "workflow.instance.resumed",
626
+ version: "1.0.0",
627
+ description: "A workflow instance has been resumed.",
628
+ stability: "stable",
629
+ owners: ["@workflow-team"],
630
+ tags: ["workflow", "instance", "resumed"]
631
+ },
632
+ payload: InstanceEventPayload
633
+ });
634
+ var InstanceFailedEvent = defineEvent({
635
+ meta: {
636
+ key: "workflow.instance.failed",
637
+ version: "1.0.0",
638
+ description: "A workflow instance has failed.",
639
+ stability: "stable",
640
+ owners: ["@workflow-team"],
641
+ tags: ["workflow", "instance", "failed"]
642
+ },
643
+ payload: InstanceEventPayload
644
+ });
645
+ var InstanceTimedOutEvent = defineEvent({
646
+ meta: {
647
+ key: "workflow.instance.timedOut",
648
+ version: "1.0.0",
649
+ description: "A workflow instance has timed out.",
650
+ stability: "stable",
651
+ owners: ["@workflow-team"],
652
+ tags: ["workflow", "instance", "timeout"]
653
+ },
654
+ payload: InstanceEventPayload
655
+ });
656
+ export {
657
+ WorkflowInstanceModel,
658
+ TransitionWorkflowContract,
659
+ TransitionResultModel,
660
+ TransitionInputModel,
661
+ StepExitedEvent,
662
+ StepEnteredEvent,
663
+ StartWorkflowInputModel,
664
+ StartWorkflowContract,
665
+ ResumeWorkflowContract,
666
+ PauseWorkflowContract,
667
+ ListInstancesContract,
668
+ InstanceTimedOutEvent,
669
+ InstanceStatusEnum,
670
+ InstanceStartedEvent,
671
+ InstanceResumedEvent,
672
+ InstancePausedEvent,
673
+ InstanceFailedEvent,
674
+ InstanceCompletedEvent,
675
+ InstanceCancelledEvent,
676
+ GetInstanceContract,
677
+ CancelWorkflowContract
678
+ };