@contractspec/example.workflow-system 3.8.9 → 3.8.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. package/dist/approval/approval.enum.js +1 -22
  2. package/dist/approval/approval.event.js +1 -112
  3. package/dist/approval/approval.operations.js +1 -369
  4. package/dist/approval/approval.schema.js +1 -73
  5. package/dist/approval/index.js +1 -484
  6. package/dist/browser/approval/approval.enum.js +1 -22
  7. package/dist/browser/approval/approval.event.js +1 -112
  8. package/dist/browser/approval/approval.operations.js +1 -369
  9. package/dist/browser/approval/approval.schema.js +1 -73
  10. package/dist/browser/approval/index.js +1 -484
  11. package/dist/browser/docs/index.js +5 -49
  12. package/dist/browser/docs/workflow-system.docblock.js +5 -49
  13. package/dist/browser/entities/approval.js +1 -119
  14. package/dist/browser/entities/index.js +1 -508
  15. package/dist/browser/entities/instance.js +1 -161
  16. package/dist/browser/entities/step.js +1 -124
  17. package/dist/browser/entities/workflow.js +1 -82
  18. package/dist/browser/example.js +1 -42
  19. package/dist/browser/handlers/index.js +8 -253
  20. package/dist/browser/handlers/workflow.handlers.js +8 -253
  21. package/dist/browser/index.js +13 -3524
  22. package/dist/browser/instance/index.js +1 -677
  23. package/dist/browser/instance/instance.enum.js +1 -15
  24. package/dist/browser/instance/instance.event.js +1 -164
  25. package/dist/browser/instance/instance.handler.js +1 -356
  26. package/dist/browser/instance/instance.operations.js +1 -9
  27. package/dist/browser/instance/instance.schema.js +1 -101
  28. package/dist/browser/presentations/index.js +1 -109
  29. package/dist/browser/seeders/index.js +1 -3
  30. package/dist/browser/shared/demo-scenario.js +1 -213
  31. package/dist/browser/shared/index.js +1 -3
  32. package/dist/browser/shared/mock-data.js +1 -11
  33. package/dist/browser/state-machine/index.js +1 -6
  34. package/dist/browser/tests/operations.test-spec.js +1 -6
  35. package/dist/browser/ui/WorkflowDashboard.js +1 -3
  36. package/dist/browser/ui/WorkflowDashboard.visualizations.js +1 -239
  37. package/dist/browser/ui/hooks/index.js +1 -3
  38. package/dist/browser/ui/hooks/useWorkflowList.js +1 -52
  39. package/dist/browser/ui/index.js +1 -56
  40. package/dist/browser/ui/renderers/index.js +5 -562
  41. package/dist/browser/ui/renderers/workflow.markdown.js +5 -562
  42. package/dist/browser/visualizations/catalog.js +1 -132
  43. package/dist/browser/visualizations/index.js +1 -133
  44. package/dist/browser/visualizations/selectors.js +1 -195
  45. package/dist/browser/workflow/index.js +1 -21
  46. package/dist/browser/workflow/workflow.enum.js +1 -36
  47. package/dist/browser/workflow/workflow.event.js +1 -6
  48. package/dist/browser/workflow/workflow.handler.js +1 -5
  49. package/dist/browser/workflow/workflow.operations.js +1 -8
  50. package/dist/browser/workflow/workflow.schema.js +1 -151
  51. package/dist/browser/workflow-system.capability.js +1 -5
  52. package/dist/browser/workflow-system.feature.js +1 -3
  53. package/dist/docs/index.js +5 -49
  54. package/dist/docs/workflow-system.docblock.js +5 -49
  55. package/dist/entities/approval.js +1 -119
  56. package/dist/entities/index.js +1 -508
  57. package/dist/entities/instance.js +1 -161
  58. package/dist/entities/step.js +1 -124
  59. package/dist/entities/workflow.js +1 -82
  60. package/dist/example.js +1 -42
  61. package/dist/handlers/index.js +8 -253
  62. package/dist/handlers/workflow.handlers.js +8 -253
  63. package/dist/index.js +13 -3524
  64. package/dist/instance/index.js +1 -677
  65. package/dist/instance/instance.enum.js +1 -15
  66. package/dist/instance/instance.event.js +1 -164
  67. package/dist/instance/instance.handler.js +1 -356
  68. package/dist/instance/instance.operations.js +1 -9
  69. package/dist/instance/instance.schema.js +1 -101
  70. package/dist/presentations/index.js +1 -109
  71. package/dist/seeders/index.js +1 -3
  72. package/dist/shared/demo-scenario.js +1 -213
  73. package/dist/shared/index.js +1 -3
  74. package/dist/shared/mock-data.js +1 -11
  75. package/dist/state-machine/index.js +1 -6
  76. package/dist/tests/operations.test-spec.js +1 -6
  77. package/dist/ui/WorkflowDashboard.js +1 -3
  78. package/dist/ui/WorkflowDashboard.visualizations.js +1 -239
  79. package/dist/ui/hooks/index.js +1 -3
  80. package/dist/ui/hooks/useWorkflowList.js +1 -52
  81. package/dist/ui/index.js +1 -56
  82. package/dist/ui/renderers/index.js +5 -562
  83. package/dist/ui/renderers/workflow.markdown.js +5 -562
  84. package/dist/visualizations/catalog.js +1 -132
  85. package/dist/visualizations/index.js +1 -133
  86. package/dist/visualizations/selectors.js +1 -195
  87. package/dist/workflow/index.js +1 -21
  88. package/dist/workflow/workflow.enum.js +1 -36
  89. package/dist/workflow/workflow.event.js +1 -6
  90. package/dist/workflow/workflow.handler.js +1 -5
  91. package/dist/workflow/workflow.operations.js +1 -8
  92. package/dist/workflow/workflow.schema.js +1 -151
  93. package/dist/workflow-system.capability.js +1 -5
  94. package/dist/workflow-system.feature.js +1 -3
  95. package/package.json +8 -8
@@ -1,161 +1 @@
1
- // src/entities/instance.ts
2
- import {
3
- defineEntity,
4
- defineEntityEnum,
5
- field,
6
- index
7
- } from "@contractspec/lib.schema";
8
- var InstanceStatusEnum = defineEntityEnum({
9
- name: "InstanceStatus",
10
- values: [
11
- "PENDING",
12
- "RUNNING",
13
- "WAITING",
14
- "PAUSED",
15
- "COMPLETED",
16
- "CANCELLED",
17
- "FAILED",
18
- "TIMEOUT"
19
- ],
20
- schema: "workflow",
21
- description: "Status of a workflow instance."
22
- });
23
- var StepExecutionStatusEnum = defineEntityEnum({
24
- name: "StepExecutionStatus",
25
- values: [
26
- "PENDING",
27
- "ACTIVE",
28
- "COMPLETED",
29
- "SKIPPED",
30
- "FAILED",
31
- "TIMEOUT"
32
- ],
33
- schema: "workflow",
34
- description: "Status of a step execution."
35
- });
36
- var WorkflowInstanceEntity = defineEntity({
37
- name: "WorkflowInstance",
38
- description: "A running instance of a workflow definition.",
39
- schema: "workflow",
40
- map: "workflow_instance",
41
- fields: {
42
- id: field.id({ description: "Unique instance ID" }),
43
- workflowDefinitionId: field.foreignKey(),
44
- referenceId: field.string({
45
- isOptional: true,
46
- description: "External reference (e.g., order ID)"
47
- }),
48
- referenceType: field.string({
49
- isOptional: true,
50
- description: 'Type of reference (e.g., "Order")'
51
- }),
52
- status: field.enum("InstanceStatus", { default: "PENDING" }),
53
- currentStepId: field.string({
54
- isOptional: true,
55
- description: "Current step being executed"
56
- }),
57
- contextData: field.json({ description: "Data context for this instance" }),
58
- triggeredBy: field.foreignKey({
59
- description: "User who triggered the workflow"
60
- }),
61
- triggerSource: field.string({
62
- isOptional: true,
63
- description: 'Source of trigger (e.g., "api", "ui")'
64
- }),
65
- organizationId: field.foreignKey(),
66
- priority: field.int({
67
- default: 0,
68
- description: "Processing priority (higher = more urgent)"
69
- }),
70
- dueAt: field.dateTime({
71
- isOptional: true,
72
- description: "When this instance should complete"
73
- }),
74
- outcome: field.string({
75
- isOptional: true,
76
- description: 'Final outcome (e.g., "approved", "rejected")'
77
- }),
78
- resultData: field.json({
79
- isOptional: true,
80
- description: "Final result data"
81
- }),
82
- errorMessage: field.string({
83
- isOptional: true,
84
- description: "Error message if failed"
85
- }),
86
- createdAt: field.createdAt(),
87
- updatedAt: field.updatedAt(),
88
- startedAt: field.dateTime({ isOptional: true }),
89
- completedAt: field.dateTime({ isOptional: true }),
90
- workflowDefinition: field.belongsTo("WorkflowDefinition", ["workflowDefinitionId"], ["id"]),
91
- currentStep: field.belongsTo("WorkflowStep", ["currentStepId"], ["id"]),
92
- stepExecutions: field.hasMany("StepExecution"),
93
- approvalRequests: field.hasMany("ApprovalRequest")
94
- },
95
- indexes: [
96
- index.on(["organizationId", "status"]),
97
- index.on(["workflowDefinitionId", "status"]),
98
- index.on(["referenceType", "referenceId"]),
99
- index.on(["triggeredBy", "status"]),
100
- index.on(["status", "dueAt"]),
101
- index.on(["createdAt"])
102
- ],
103
- enums: [InstanceStatusEnum]
104
- });
105
- var StepExecutionEntity = defineEntity({
106
- name: "StepExecution",
107
- description: "Execution record of a step within a workflow instance.",
108
- schema: "workflow",
109
- map: "step_execution",
110
- fields: {
111
- id: field.id({ description: "Unique execution ID" }),
112
- workflowInstanceId: field.foreignKey(),
113
- workflowStepId: field.foreignKey(),
114
- status: field.enum("StepExecutionStatus", { default: "PENDING" }),
115
- executionOrder: field.int({
116
- default: 0,
117
- description: "Order of execution within instance"
118
- }),
119
- inputData: field.json({
120
- isOptional: true,
121
- description: "Data when entering step"
122
- }),
123
- outputData: field.json({
124
- isOptional: true,
125
- description: "Data when exiting step"
126
- }),
127
- actionTaken: field.string({
128
- isOptional: true,
129
- description: 'Action that caused transition (e.g., "approve")'
130
- }),
131
- transitionedTo: field.string({
132
- isOptional: true,
133
- description: "Step key transitioned to"
134
- }),
135
- executedBy: field.string({
136
- isOptional: true,
137
- description: "User who completed this step"
138
- }),
139
- errorMessage: field.string({ isOptional: true }),
140
- errorDetails: field.json({ isOptional: true }),
141
- retryCount: field.int({ default: 0 }),
142
- createdAt: field.createdAt(),
143
- updatedAt: field.updatedAt(),
144
- startedAt: field.dateTime({ isOptional: true }),
145
- completedAt: field.dateTime({ isOptional: true }),
146
- workflowInstance: field.belongsTo("WorkflowInstance", ["workflowInstanceId"], ["id"], { onDelete: "Cascade" }),
147
- workflowStep: field.belongsTo("WorkflowStep", ["workflowStepId"], ["id"])
148
- },
149
- indexes: [
150
- index.on(["workflowInstanceId", "executionOrder"]),
151
- index.on(["workflowInstanceId", "workflowStepId"]),
152
- index.on(["status"])
153
- ],
154
- enums: [StepExecutionStatusEnum]
155
- });
156
- export {
157
- WorkflowInstanceEntity,
158
- StepExecutionStatusEnum,
159
- StepExecutionEntity,
160
- InstanceStatusEnum
161
- };
1
+ import{defineEntity as q,defineEntityEnum as v,field as g,index as j}from"@contractspec/lib.schema";var z=v({name:"InstanceStatus",values:["PENDING","RUNNING","WAITING","PAUSED","COMPLETED","CANCELLED","FAILED","TIMEOUT"],schema:"workflow",description:"Status of a workflow instance."}),B=v({name:"StepExecutionStatus",values:["PENDING","ACTIVE","COMPLETED","SKIPPED","FAILED","TIMEOUT"],schema:"workflow",description:"Status of a step execution."}),D=q({name:"WorkflowInstance",description:"A running instance of a workflow definition.",schema:"workflow",map:"workflow_instance",fields:{id:g.id({description:"Unique instance ID"}),workflowDefinitionId:g.foreignKey(),referenceId:g.string({isOptional:!0,description:"External reference (e.g., order ID)"}),referenceType:g.string({isOptional:!0,description:'Type of reference (e.g., "Order")'}),status:g.enum("InstanceStatus",{default:"PENDING"}),currentStepId:g.string({isOptional:!0,description:"Current step being executed"}),contextData:g.json({description:"Data context for this instance"}),triggeredBy:g.foreignKey({description:"User who triggered the workflow"}),triggerSource:g.string({isOptional:!0,description:'Source of trigger (e.g., "api", "ui")'}),organizationId:g.foreignKey(),priority:g.int({default:0,description:"Processing priority (higher = more urgent)"}),dueAt:g.dateTime({isOptional:!0,description:"When this instance should complete"}),outcome:g.string({isOptional:!0,description:'Final outcome (e.g., "approved", "rejected")'}),resultData:g.json({isOptional:!0,description:"Final result data"}),errorMessage:g.string({isOptional:!0,description:"Error message if failed"}),createdAt:g.createdAt(),updatedAt:g.updatedAt(),startedAt:g.dateTime({isOptional:!0}),completedAt:g.dateTime({isOptional:!0}),workflowDefinition:g.belongsTo("WorkflowDefinition",["workflowDefinitionId"],["id"]),currentStep:g.belongsTo("WorkflowStep",["currentStepId"],["id"]),stepExecutions:g.hasMany("StepExecution"),approvalRequests:g.hasMany("ApprovalRequest")},indexes:[j.on(["organizationId","status"]),j.on(["workflowDefinitionId","status"]),j.on(["referenceType","referenceId"]),j.on(["triggeredBy","status"]),j.on(["status","dueAt"]),j.on(["createdAt"])],enums:[z]}),F=q({name:"StepExecution",description:"Execution record of a step within a workflow instance.",schema:"workflow",map:"step_execution",fields:{id:g.id({description:"Unique execution ID"}),workflowInstanceId:g.foreignKey(),workflowStepId:g.foreignKey(),status:g.enum("StepExecutionStatus",{default:"PENDING"}),executionOrder:g.int({default:0,description:"Order of execution within instance"}),inputData:g.json({isOptional:!0,description:"Data when entering step"}),outputData:g.json({isOptional:!0,description:"Data when exiting step"}),actionTaken:g.string({isOptional:!0,description:'Action that caused transition (e.g., "approve")'}),transitionedTo:g.string({isOptional:!0,description:"Step key transitioned to"}),executedBy:g.string({isOptional:!0,description:"User who completed this step"}),errorMessage:g.string({isOptional:!0}),errorDetails:g.json({isOptional:!0}),retryCount:g.int({default:0}),createdAt:g.createdAt(),updatedAt:g.updatedAt(),startedAt:g.dateTime({isOptional:!0}),completedAt:g.dateTime({isOptional:!0}),workflowInstance:g.belongsTo("WorkflowInstance",["workflowInstanceId"],["id"],{onDelete:"Cascade"}),workflowStep:g.belongsTo("WorkflowStep",["workflowStepId"],["id"])},indexes:[j.on(["workflowInstanceId","executionOrder"]),j.on(["workflowInstanceId","workflowStepId"]),j.on(["status"])],enums:[B]});export{D as WorkflowInstanceEntity,B as StepExecutionStatusEnum,F as StepExecutionEntity,z as InstanceStatusEnum};
@@ -1,124 +1 @@
1
- // src/entities/step.ts
2
- import {
3
- defineEntity,
4
- defineEntityEnum,
5
- field,
6
- index
7
- } from "@contractspec/lib.schema";
8
- var StepTypeEnum = defineEntityEnum({
9
- name: "StepType",
10
- values: [
11
- "START",
12
- "APPROVAL",
13
- "TASK",
14
- "CONDITION",
15
- "PARALLEL",
16
- "WAIT",
17
- "ACTION",
18
- "END"
19
- ],
20
- schema: "workflow",
21
- description: "Type of workflow step."
22
- });
23
- var ApprovalModeEnum = defineEntityEnum({
24
- name: "ApprovalMode",
25
- values: [
26
- "ANY",
27
- "ALL",
28
- "MAJORITY",
29
- "SEQUENTIAL"
30
- ],
31
- schema: "workflow",
32
- description: "How multiple approvers are handled."
33
- });
34
- var WorkflowStepEntity = defineEntity({
35
- name: "WorkflowStep",
36
- description: "A single step/state in a workflow definition.",
37
- schema: "workflow",
38
- map: "workflow_step",
39
- fields: {
40
- id: field.id({ description: "Unique step ID" }),
41
- workflowDefinitionId: field.foreignKey(),
42
- name: field.string({ description: "Human-readable step name" }),
43
- key: field.string({
44
- description: 'Unique key within workflow (e.g., "manager_approval")'
45
- }),
46
- description: field.string({ isOptional: true }),
47
- type: field.enum("StepType", { default: "TASK" }),
48
- position: field.int({ default: 0, description: "Order for display" }),
49
- transitions: field.json({ description: "Map of action -> next step key" }),
50
- approvalMode: field.enum("ApprovalMode", {
51
- default: "ANY",
52
- isOptional: true
53
- }),
54
- approverRoles: field.string({
55
- isArray: true,
56
- description: "Roles that can approve"
57
- }),
58
- approverUserIds: field.string({
59
- isArray: true,
60
- description: "Specific users that can approve"
61
- }),
62
- escalationConfig: field.json({
63
- isOptional: true,
64
- description: "Escalation rules"
65
- }),
66
- assigneeRoles: field.string({
67
- isArray: true,
68
- description: "Roles that can be assigned"
69
- }),
70
- taskTemplate: field.json({
71
- isOptional: true,
72
- description: "Template for task creation"
73
- }),
74
- conditionExpression: field.string({
75
- isOptional: true,
76
- description: "Expression for branching"
77
- }),
78
- waitDuration: field.int({
79
- isOptional: true,
80
- description: "Wait duration in seconds"
81
- }),
82
- waitForEvent: field.string({
83
- isOptional: true,
84
- description: "Event name to wait for"
85
- }),
86
- actionType: field.string({
87
- isOptional: true,
88
- description: "Action to execute"
89
- }),
90
- actionConfig: field.json({
91
- isOptional: true,
92
- description: "Action parameters"
93
- }),
94
- timeoutSeconds: field.int({
95
- isOptional: true,
96
- description: "Step timeout"
97
- }),
98
- slaSeconds: field.int({ isOptional: true, description: "SLA deadline" }),
99
- notifyOnEnter: field.json({
100
- isOptional: true,
101
- description: "Notification config when entering step"
102
- }),
103
- notifyOnExit: field.json({
104
- isOptional: true,
105
- description: "Notification config when exiting step"
106
- }),
107
- metadata: field.json({ isOptional: true }),
108
- createdAt: field.createdAt(),
109
- updatedAt: field.updatedAt(),
110
- workflowDefinition: field.belongsTo("WorkflowDefinition", ["workflowDefinitionId"], ["id"], { onDelete: "Cascade" }),
111
- executions: field.hasMany("StepExecution")
112
- },
113
- indexes: [
114
- index.unique(["workflowDefinitionId", "key"]),
115
- index.on(["workflowDefinitionId", "position"]),
116
- index.on(["type"])
117
- ],
118
- enums: [StepTypeEnum, ApprovalModeEnum]
119
- });
120
- export {
121
- WorkflowStepEntity,
122
- StepTypeEnum,
123
- ApprovalModeEnum
124
- };
1
+ import{defineEntity as z,defineEntityEnum as q,field as j,index as k}from"@contractspec/lib.schema";var B=q({name:"StepType",values:["START","APPROVAL","TASK","CONDITION","PARALLEL","WAIT","ACTION","END"],schema:"workflow",description:"Type of workflow step."}),D=q({name:"ApprovalMode",values:["ANY","ALL","MAJORITY","SEQUENTIAL"],schema:"workflow",description:"How multiple approvers are handled."}),G=z({name:"WorkflowStep",description:"A single step/state in a workflow definition.",schema:"workflow",map:"workflow_step",fields:{id:j.id({description:"Unique step ID"}),workflowDefinitionId:j.foreignKey(),name:j.string({description:"Human-readable step name"}),key:j.string({description:'Unique key within workflow (e.g., "manager_approval")'}),description:j.string({isOptional:!0}),type:j.enum("StepType",{default:"TASK"}),position:j.int({default:0,description:"Order for display"}),transitions:j.json({description:"Map of action -> next step key"}),approvalMode:j.enum("ApprovalMode",{default:"ANY",isOptional:!0}),approverRoles:j.string({isArray:!0,description:"Roles that can approve"}),approverUserIds:j.string({isArray:!0,description:"Specific users that can approve"}),escalationConfig:j.json({isOptional:!0,description:"Escalation rules"}),assigneeRoles:j.string({isArray:!0,description:"Roles that can be assigned"}),taskTemplate:j.json({isOptional:!0,description:"Template for task creation"}),conditionExpression:j.string({isOptional:!0,description:"Expression for branching"}),waitDuration:j.int({isOptional:!0,description:"Wait duration in seconds"}),waitForEvent:j.string({isOptional:!0,description:"Event name to wait for"}),actionType:j.string({isOptional:!0,description:"Action to execute"}),actionConfig:j.json({isOptional:!0,description:"Action parameters"}),timeoutSeconds:j.int({isOptional:!0,description:"Step timeout"}),slaSeconds:j.int({isOptional:!0,description:"SLA deadline"}),notifyOnEnter:j.json({isOptional:!0,description:"Notification config when entering step"}),notifyOnExit:j.json({isOptional:!0,description:"Notification config when exiting step"}),metadata:j.json({isOptional:!0}),createdAt:j.createdAt(),updatedAt:j.updatedAt(),workflowDefinition:j.belongsTo("WorkflowDefinition",["workflowDefinitionId"],["id"],{onDelete:"Cascade"}),executions:j.hasMany("StepExecution")},indexes:[k.unique(["workflowDefinitionId","key"]),k.on(["workflowDefinitionId","position"]),k.on(["type"])],enums:[B,D]});export{G as WorkflowStepEntity,B as StepTypeEnum,D as ApprovalModeEnum};
@@ -1,82 +1 @@
1
- // src/entities/workflow.ts
2
- import {
3
- defineEntity,
4
- defineEntityEnum,
5
- field,
6
- index
7
- } from "@contractspec/lib.schema";
8
- var WorkflowStatusEnum = defineEntityEnum({
9
- name: "WorkflowStatus",
10
- values: ["DRAFT", "ACTIVE", "DEPRECATED", "ARCHIVED"],
11
- schema: "workflow",
12
- description: "Status of a workflow definition."
13
- });
14
- var WorkflowTriggerTypeEnum = defineEntityEnum({
15
- name: "WorkflowTriggerType",
16
- values: ["MANUAL", "EVENT", "SCHEDULED", "API"],
17
- schema: "workflow",
18
- description: "What triggers workflow instantiation."
19
- });
20
- var WorkflowDefinitionEntity = defineEntity({
21
- name: "WorkflowDefinition",
22
- description: "A workflow blueprint that defines the process structure.",
23
- schema: "workflow",
24
- map: "workflow_definition",
25
- fields: {
26
- id: field.id({ description: "Unique workflow definition ID" }),
27
- name: field.string({ description: "Human-readable workflow name" }),
28
- key: field.string({
29
- description: 'Unique key for referencing (e.g., "purchase_approval")'
30
- }),
31
- description: field.string({
32
- isOptional: true,
33
- description: "Detailed description"
34
- }),
35
- version: field.int({
36
- default: 1,
37
- description: "Version number for versioning definitions"
38
- }),
39
- status: field.enum("WorkflowStatus", { default: "DRAFT" }),
40
- triggerType: field.enum("WorkflowTriggerType", { default: "MANUAL" }),
41
- triggerConfig: field.json({
42
- isOptional: true,
43
- description: "Trigger-specific configuration"
44
- }),
45
- initialStepId: field.string({
46
- isOptional: true,
47
- description: "First step when workflow starts"
48
- }),
49
- featureFlagKey: field.string({
50
- isOptional: true,
51
- description: "Feature flag to control availability"
52
- }),
53
- settings: field.json({
54
- isOptional: true,
55
- description: "Workflow-wide settings"
56
- }),
57
- metadata: field.json({ isOptional: true, description: "Custom metadata" }),
58
- organizationId: field.foreignKey({ description: "Owning organization" }),
59
- createdBy: field.foreignKey({
60
- description: "User who created this workflow"
61
- }),
62
- createdAt: field.createdAt(),
63
- updatedAt: field.updatedAt(),
64
- publishedAt: field.dateTime({
65
- isOptional: true,
66
- description: "When workflow was activated"
67
- }),
68
- steps: field.hasMany("WorkflowStep"),
69
- instances: field.hasMany("WorkflowInstance")
70
- },
71
- indexes: [
72
- index.unique(["organizationId", "key", "version"]),
73
- index.on(["organizationId", "status"]),
74
- index.on(["key", "version"])
75
- ],
76
- enums: [WorkflowStatusEnum, WorkflowTriggerTypeEnum]
77
- });
78
- export {
79
- WorkflowTriggerTypeEnum,
80
- WorkflowStatusEnum,
81
- WorkflowDefinitionEntity
82
- };
1
+ import{defineEntity as z,defineEntityEnum as v,field as j,index as q}from"@contractspec/lib.schema";var B=v({name:"WorkflowStatus",values:["DRAFT","ACTIVE","DEPRECATED","ARCHIVED"],schema:"workflow",description:"Status of a workflow definition."}),G=v({name:"WorkflowTriggerType",values:["MANUAL","EVENT","SCHEDULED","API"],schema:"workflow",description:"What triggers workflow instantiation."}),J=z({name:"WorkflowDefinition",description:"A workflow blueprint that defines the process structure.",schema:"workflow",map:"workflow_definition",fields:{id:j.id({description:"Unique workflow definition ID"}),name:j.string({description:"Human-readable workflow name"}),key:j.string({description:'Unique key for referencing (e.g., "purchase_approval")'}),description:j.string({isOptional:!0,description:"Detailed description"}),version:j.int({default:1,description:"Version number for versioning definitions"}),status:j.enum("WorkflowStatus",{default:"DRAFT"}),triggerType:j.enum("WorkflowTriggerType",{default:"MANUAL"}),triggerConfig:j.json({isOptional:!0,description:"Trigger-specific configuration"}),initialStepId:j.string({isOptional:!0,description:"First step when workflow starts"}),featureFlagKey:j.string({isOptional:!0,description:"Feature flag to control availability"}),settings:j.json({isOptional:!0,description:"Workflow-wide settings"}),metadata:j.json({isOptional:!0,description:"Custom metadata"}),organizationId:j.foreignKey({description:"Owning organization"}),createdBy:j.foreignKey({description:"User who created this workflow"}),createdAt:j.createdAt(),updatedAt:j.updatedAt(),publishedAt:j.dateTime({isOptional:!0,description:"When workflow was activated"}),steps:j.hasMany("WorkflowStep"),instances:j.hasMany("WorkflowInstance")},indexes:[q.unique(["organizationId","key","version"]),q.on(["organizationId","status"]),q.on(["key","version"])],enums:[B,G]});export{G as WorkflowTriggerTypeEnum,B as WorkflowStatusEnum,J as WorkflowDefinitionEntity};
@@ -1,42 +1 @@
1
- // src/example.ts
2
- import { defineExample } from "@contractspec/lib.contracts-spec";
3
- var example = defineExample({
4
- meta: {
5
- key: "workflow-system",
6
- version: "1.0.0",
7
- title: "Workflow / Approval System",
8
- description: "State-machine driven approvals with RBAC, audit trail, notifications, and jobs.",
9
- kind: "template",
10
- visibility: "public",
11
- stability: "experimental",
12
- owners: ["@platform.core"],
13
- tags: ["workflow", "approval", "state-machine", "rbac"]
14
- },
15
- docs: {
16
- rootDocId: "docs.examples.workflow-system",
17
- goalDocId: "docs.examples.workflow-system.goal",
18
- usageDocId: "docs.examples.workflow-system.usage",
19
- constraintsDocId: "docs.examples.workflow-system.constraints"
20
- },
21
- entrypoints: {
22
- packageName: "@contractspec/example.workflow-system",
23
- feature: "./feature",
24
- contracts: "./contracts",
25
- presentations: "./presentations",
26
- handlers: "./handlers",
27
- docs: "./docs"
28
- },
29
- surfaces: {
30
- templates: true,
31
- sandbox: {
32
- enabled: true,
33
- modes: ["playground", "specs", "builder", "markdown", "evolution"]
34
- },
35
- studio: { enabled: true, installable: true },
36
- mcp: { enabled: true }
37
- }
38
- });
39
- var example_default = example;
40
- export {
41
- example_default as default
42
- };
1
+ import{defineExample as g}from"@contractspec/lib.contracts-spec";var h=g({meta:{key:"workflow-system",version:"1.0.0",title:"Workflow / Approval System",description:"State-machine driven approvals with RBAC, audit trail, notifications, and jobs.",kind:"template",visibility:"public",stability:"experimental",owners:["@platform.core"],tags:["workflow","approval","state-machine","rbac"]},docs:{rootDocId:"docs.examples.workflow-system",goalDocId:"docs.examples.workflow-system.goal",usageDocId:"docs.examples.workflow-system.usage",constraintsDocId:"docs.examples.workflow-system.constraints"},entrypoints:{packageName:"@contractspec/example.workflow-system",feature:"./feature",contracts:"./contracts",presentations:"./presentations",handlers:"./handlers",docs:"./docs"},surfaces:{templates:!0,sandbox:{enabled:!0,modes:["playground","specs","builder","markdown","evolution"]},studio:{enabled:!0,installable:!0},mcp:{enabled:!0}}}),q=h;export{q as default};