@lssm/example.workflow-system 0.0.0-canary-20251217083314 → 1.41.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 (187) hide show
  1. package/dist/approval/approval.contracts.js +1 -250
  2. package/dist/approval/approval.enum.js +1 -29
  3. package/dist/approval/approval.event.js +1 -186
  4. package/dist/approval/approval.handler.js +1 -71
  5. package/dist/approval/approval.schema.js +1 -111
  6. package/dist/approval/index.js +1 -6
  7. package/dist/docs/index.js +1 -1
  8. package/dist/docs/workflow-system.docblock.js +5 -61
  9. package/dist/entities/approval.js +1 -128
  10. package/dist/entities/index.js +1 -31
  11. package/dist/entities/instance.js +1 -168
  12. package/dist/entities/step.js +1 -135
  13. package/dist/entities/workflow.js +1 -102
  14. package/dist/example.js +1 -50
  15. package/dist/index.js +1 -19
  16. package/dist/instance/index.js +1 -6
  17. package/dist/instance/instance.contracts.js +1 -334
  18. package/dist/instance/instance.enum.js +1 -20
  19. package/dist/instance/instance.event.js +1 -214
  20. package/dist/instance/instance.handler.js +1 -93
  21. package/dist/instance/instance.schema.js +1 -173
  22. package/dist/presentations/index.js +1 -291
  23. package/dist/shared/index.js +1 -3
  24. package/dist/shared/mock-data.js +1 -11
  25. package/dist/state-machine/index.js +1 -157
  26. package/dist/workflow/index.js +1 -6
  27. package/dist/workflow/workflow.contracts.js +1 -239
  28. package/dist/workflow/workflow.enum.js +1 -47
  29. package/dist/workflow/workflow.event.js +1 -116
  30. package/dist/workflow/workflow.handler.js +1 -65
  31. package/dist/workflow/workflow.schema.js +1 -250
  32. package/dist/workflow-system.feature.js +1 -337
  33. package/package.json +44 -45
  34. package/dist/approval/approval.contracts.d.ts +0 -534
  35. package/dist/approval/approval.enum.d.ts +0 -13
  36. package/dist/approval/approval.event.d.ts +0 -130
  37. package/dist/approval/approval.handler.d.ts +0 -22
  38. package/dist/approval/approval.schema.d.ts +0 -99
  39. package/dist/approval/index.d.ts +0 -5
  40. package/dist/docs/index.d.ts +0 -1
  41. package/dist/docs/workflow-system.docblock.d.ts +0 -1
  42. package/dist/entities/approval.d.ts +0 -57
  43. package/dist/entities/index.d.ts +0 -138
  44. package/dist/entities/instance.d.ts +0 -68
  45. package/dist/entities/step.d.ts +0 -49
  46. package/dist/entities/workflow.d.ts +0 -40
  47. package/dist/example.d.ts +0 -39
  48. package/dist/index.d.ts +0 -16
  49. package/dist/instance/index.d.ts +0 -5
  50. package/dist/instance/instance.contracts.d.ts +0 -1023
  51. package/dist/instance/instance.enum.d.ts +0 -9
  52. package/dist/instance/instance.event.d.ts +0 -355
  53. package/dist/instance/instance.handler.d.ts +0 -26
  54. package/dist/instance/instance.schema.d.ts +0 -222
  55. package/dist/libs/contracts/dist/capabilities/openbanking.js +0 -88
  56. package/dist/libs/contracts/dist/client/index.js +0 -5
  57. package/dist/libs/contracts/dist/client/react/feature-render.js +0 -2
  58. package/dist/libs/contracts/dist/client/react/form-render.js +0 -4
  59. package/dist/libs/contracts/dist/client/react/index.js +0 -4
  60. package/dist/libs/contracts/dist/contract-registry/index.js +0 -1
  61. package/dist/libs/contracts/dist/contract-registry/schemas.js +0 -60
  62. package/dist/libs/contracts/dist/docs/PUBLISHING.docblock.js +0 -16
  63. package/dist/libs/contracts/dist/docs/accessibility_wcag_compliance_specs.docblock.js +0 -16
  64. package/dist/libs/contracts/dist/docs/index.js +0 -29
  65. package/dist/libs/contracts/dist/docs/presentations.js +0 -71
  66. package/dist/libs/contracts/dist/docs/registry.js +0 -44
  67. package/dist/libs/contracts/dist/docs/tech/PHASE_1_QUICKSTART.docblock.js +0 -16
  68. package/dist/libs/contracts/dist/docs/tech/PHASE_2_AI_NATIVE_OPERATIONS.docblock.js +0 -16
  69. package/dist/libs/contracts/dist/docs/tech/PHASE_3_AUTO_EVOLUTION.docblock.js +0 -16
  70. package/dist/libs/contracts/dist/docs/tech/PHASE_4_PERSONALIZATION_ENGINE.docblock.js +0 -16
  71. package/dist/libs/contracts/dist/docs/tech/PHASE_5_ZERO_TOUCH_OPERATIONS.docblock.js +0 -16
  72. package/dist/libs/contracts/dist/docs/tech/auth/better-auth-nextjs.docblock.js +0 -80
  73. package/dist/libs/contracts/dist/docs/tech/contracts/openapi-export.docblock.js +0 -57
  74. package/dist/libs/contracts/dist/docs/tech/lifecycle-stage-system.docblock.js +0 -16
  75. package/dist/libs/contracts/dist/docs/tech/llm/llm-integration.docblock.js +0 -357
  76. package/dist/libs/contracts/dist/docs/tech/mcp-endpoints.docblock.js +0 -37
  77. package/dist/libs/contracts/dist/docs/tech/presentation-runtime.docblock.js +0 -16
  78. package/dist/libs/contracts/dist/docs/tech/schema/README.docblock.js +0 -20
  79. package/dist/libs/contracts/dist/docs/tech/studio/learning-events.docblock.js +0 -48
  80. package/dist/libs/contracts/dist/docs/tech/studio/learning-journeys.docblock.js +0 -79
  81. package/dist/libs/contracts/dist/docs/tech/studio/platform-admin-panel.docblock.js +0 -84
  82. package/dist/libs/contracts/dist/docs/tech/studio/project-access-teams.docblock.js +0 -45
  83. package/dist/libs/contracts/dist/docs/tech/studio/project-routing.docblock.js +0 -67
  84. package/dist/libs/contracts/dist/docs/tech/studio/sandbox-unlogged.docblock.js +0 -40
  85. package/dist/libs/contracts/dist/docs/tech/studio/team-invitations.docblock.js +0 -69
  86. package/dist/libs/contracts/dist/docs/tech/studio/workspace-ops.docblock.js +0 -47
  87. package/dist/libs/contracts/dist/docs/tech/studio/workspaces.docblock.js +0 -62
  88. package/dist/libs/contracts/dist/docs/tech/telemetry-ingest.docblock.js +0 -155
  89. package/dist/libs/contracts/dist/docs/tech/templates/runtime.docblock.js +0 -20
  90. package/dist/libs/contracts/dist/docs/tech/vscode-extension.docblock.js +0 -101
  91. package/dist/libs/contracts/dist/docs/tech/workflows/overview.docblock.js +0 -20
  92. package/dist/libs/contracts/dist/events.js +0 -10
  93. package/dist/libs/contracts/dist/experiments/evaluator.js +0 -1
  94. package/dist/libs/contracts/dist/index.js +0 -71
  95. package/dist/libs/contracts/dist/install.js +0 -2
  96. package/dist/libs/contracts/dist/integrations/contracts.js +0 -377
  97. package/dist/libs/contracts/dist/integrations/index.js +0 -18
  98. package/dist/libs/contracts/dist/integrations/openbanking/contracts/accounts.js +0 -228
  99. package/dist/libs/contracts/dist/integrations/openbanking/contracts/balances.js +0 -159
  100. package/dist/libs/contracts/dist/integrations/openbanking/contracts/index.js +0 -3
  101. package/dist/libs/contracts/dist/integrations/openbanking/contracts/transactions.js +0 -210
  102. package/dist/libs/contracts/dist/integrations/openbanking/models.js +0 -242
  103. package/dist/libs/contracts/dist/integrations/openbanking/telemetry.js +0 -13
  104. package/dist/libs/contracts/dist/integrations/providers/elevenlabs.js +0 -52
  105. package/dist/libs/contracts/dist/integrations/providers/gcs-storage.js +0 -75
  106. package/dist/libs/contracts/dist/integrations/providers/gmail.js +0 -87
  107. package/dist/libs/contracts/dist/integrations/providers/google-calendar.js +0 -66
  108. package/dist/libs/contracts/dist/integrations/providers/index.js +0 -11
  109. package/dist/libs/contracts/dist/integrations/providers/mistral.js +0 -68
  110. package/dist/libs/contracts/dist/integrations/providers/postmark.js +0 -68
  111. package/dist/libs/contracts/dist/integrations/providers/powens.js +0 -116
  112. package/dist/libs/contracts/dist/integrations/providers/qdrant.js +0 -73
  113. package/dist/libs/contracts/dist/integrations/providers/registry.js +0 -10
  114. package/dist/libs/contracts/dist/integrations/providers/stripe.js +0 -83
  115. package/dist/libs/contracts/dist/integrations/providers/twilio-sms.js +0 -61
  116. package/dist/libs/contracts/dist/jsonschema.js +0 -1
  117. package/dist/libs/contracts/dist/knowledge/contracts.js +0 -306
  118. package/dist/libs/contracts/dist/knowledge/index.js +0 -7
  119. package/dist/libs/contracts/dist/knowledge/spaces/email-threads.js +0 -34
  120. package/dist/libs/contracts/dist/knowledge/spaces/financial-docs.js +0 -34
  121. package/dist/libs/contracts/dist/knowledge/spaces/financial-overview.js +0 -38
  122. package/dist/libs/contracts/dist/knowledge/spaces/index.js +0 -6
  123. package/dist/libs/contracts/dist/knowledge/spaces/product-canon.js +0 -34
  124. package/dist/libs/contracts/dist/knowledge/spaces/support-faq.js +0 -37
  125. package/dist/libs/contracts/dist/knowledge/spaces/uploaded-docs.js +0 -34
  126. package/dist/libs/contracts/dist/llm/exporters.js +0 -19
  127. package/dist/libs/contracts/dist/llm/index.js +0 -2
  128. package/dist/libs/contracts/dist/llm/prompts.js +0 -1
  129. package/dist/libs/contracts/dist/onboarding-base.js +0 -196
  130. package/dist/libs/contracts/dist/openapi.js +0 -1
  131. package/dist/libs/contracts/dist/ownership.js +0 -21
  132. package/dist/libs/contracts/dist/presentations.js +0 -1
  133. package/dist/libs/contracts/dist/presentations.v2.js +0 -11
  134. package/dist/libs/contracts/dist/prompt.js +0 -1
  135. package/dist/libs/contracts/dist/promptRegistry.js +0 -1
  136. package/dist/libs/contracts/dist/regenerator/index.js +0 -1
  137. package/dist/libs/contracts/dist/regenerator/service.js +0 -6
  138. package/dist/libs/contracts/dist/registry.js +0 -2
  139. package/dist/libs/contracts/dist/resources.js +0 -1
  140. package/dist/libs/contracts/dist/schema/dist/EnumType.js +0 -2
  141. package/dist/libs/contracts/dist/schema/dist/FieldType.js +0 -49
  142. package/dist/libs/contracts/dist/schema/dist/ScalarTypeEnum.js +0 -236
  143. package/dist/libs/contracts/dist/schema/dist/SchemaModel.js +0 -39
  144. package/dist/libs/contracts/dist/schema/dist/entity/defineEntity.js +0 -1
  145. package/dist/libs/contracts/dist/schema/dist/entity/index.js +0 -2
  146. package/dist/libs/contracts/dist/schema/dist/entity/types.js +0 -1
  147. package/dist/libs/contracts/dist/schema/dist/index.js +0 -6
  148. package/dist/libs/contracts/dist/server/graphql-pothos.js +0 -6
  149. package/dist/libs/contracts/dist/server/index.js +0 -8
  150. package/dist/libs/contracts/dist/server/mcp/createMcpServer.js +0 -4
  151. package/dist/libs/contracts/dist/server/mcp/registerPresentations.js +0 -2
  152. package/dist/libs/contracts/dist/server/mcp/registerPrompts.js +0 -1
  153. package/dist/libs/contracts/dist/server/mcp/registerResources.js +0 -2
  154. package/dist/libs/contracts/dist/server/mcp/registerTools.js +0 -1
  155. package/dist/libs/contracts/dist/server/provider-mcp.js +0 -1
  156. package/dist/libs/contracts/dist/server/rest-elysia.js +0 -1
  157. package/dist/libs/contracts/dist/server/rest-express.js +0 -1
  158. package/dist/libs/contracts/dist/server/rest-generic.js +0 -1
  159. package/dist/libs/contracts/dist/server/rest-next-app.js +0 -1
  160. package/dist/libs/contracts/dist/server/rest-next-pages.js +0 -1
  161. package/dist/libs/contracts/dist/spec.js +0 -34
  162. package/dist/libs/contracts/dist/telemetry/index.js +0 -1
  163. package/dist/libs/contracts/dist/telemetry/tracker.js +0 -1
  164. package/dist/libs/contracts/dist/tests/index.js +0 -1
  165. package/dist/libs/contracts/dist/tests/runner.js +0 -2
  166. package/dist/libs/contracts/dist/workflow/index.js +0 -1
  167. package/dist/libs/contracts/dist/workflow/runner.js +0 -1
  168. package/dist/libs/schema/dist/EnumType.js +0 -56
  169. package/dist/libs/schema/dist/FieldType.js +0 -49
  170. package/dist/libs/schema/dist/ScalarTypeEnum.js +0 -236
  171. package/dist/libs/schema/dist/SchemaModel.js +0 -39
  172. package/dist/libs/schema/dist/entity/defineEntity.js +0 -236
  173. package/dist/libs/schema/dist/entity/index.js +0 -2
  174. package/dist/libs/schema/dist/entity/types.js +0 -1
  175. package/dist/libs/schema/dist/index.js +0 -6
  176. package/dist/presentations/index.d.ts +0 -63
  177. package/dist/shared/index.d.ts +0 -3
  178. package/dist/shared/mock-data.d.ts +0 -18
  179. package/dist/shared/types.d.ts +0 -80
  180. package/dist/state-machine/index.d.ts +0 -147
  181. package/dist/workflow/index.d.ts +0 -5
  182. package/dist/workflow/workflow.contracts.d.ts +0 -1010
  183. package/dist/workflow/workflow.enum.d.ts +0 -21
  184. package/dist/workflow/workflow.event.d.ts +0 -134
  185. package/dist/workflow/workflow.handler.d.ts +0 -28
  186. package/dist/workflow/workflow.schema.d.ts +0 -264
  187. package/dist/workflow-system.feature.d.ts +0 -11
@@ -1,250 +1 @@
1
- import { ScalarTypeEnum } from "../libs/schema/dist/ScalarTypeEnum.js";
2
- import { defineSchemaModel } from "../libs/schema/dist/SchemaModel.js";
3
- import "../libs/schema/dist/index.js";
4
- import { defineCommand, defineQuery } from "../libs/contracts/dist/spec.js";
5
- import { ApprovalDecisionEnum, ApprovalStatusEnum } from "./approval.enum.js";
6
- import { ApprovalCommentModel, ApprovalRequestModel } from "./approval.schema.js";
7
-
8
- //#region src/approval/approval.contracts.ts
9
- const OWNERS = ["@example.workflow-system"];
10
- /**
11
- * Approve or reject an approval request.
12
- */
13
- const SubmitDecisionContract = defineCommand({
14
- meta: {
15
- name: "workflow.approval.decide",
16
- version: 1,
17
- stability: "stable",
18
- owners: [...OWNERS],
19
- tags: [
20
- "workflow",
21
- "approval",
22
- "decision"
23
- ],
24
- description: "Submit an approval decision (approve/reject).",
25
- goal: "Allow approvers to make decisions on requests.",
26
- context: "Approval inbox, workflow detail."
27
- },
28
- io: {
29
- input: defineSchemaModel({
30
- name: "ApproveRejectInput",
31
- fields: {
32
- requestId: {
33
- type: ScalarTypeEnum.String_unsecure(),
34
- isOptional: false
35
- },
36
- decision: {
37
- type: ApprovalDecisionEnum,
38
- isOptional: false
39
- },
40
- comment: {
41
- type: ScalarTypeEnum.String_unsecure(),
42
- isOptional: true
43
- },
44
- data: {
45
- type: ScalarTypeEnum.JSON(),
46
- isOptional: true
47
- }
48
- }
49
- }),
50
- output: ApprovalRequestModel
51
- },
52
- policy: { auth: "user" },
53
- sideEffects: {
54
- emits: [{
55
- name: "workflow.approval.decided",
56
- version: 1,
57
- when: "Decision is made",
58
- payload: ApprovalRequestModel
59
- }],
60
- audit: ["workflow.approval.decided"]
61
- }
62
- });
63
- /**
64
- * Delegate an approval to another user.
65
- */
66
- const DelegateApprovalContract = defineCommand({
67
- meta: {
68
- name: "workflow.approval.delegate",
69
- version: 1,
70
- stability: "stable",
71
- owners: [...OWNERS],
72
- tags: [
73
- "workflow",
74
- "approval",
75
- "delegate"
76
- ],
77
- description: "Delegate an approval request to another user.",
78
- goal: "Allow approvers to pass approval to others.",
79
- context: "Approval inbox."
80
- },
81
- io: {
82
- input: defineSchemaModel({
83
- name: "DelegateInput",
84
- fields: {
85
- requestId: {
86
- type: ScalarTypeEnum.String_unsecure(),
87
- isOptional: false
88
- },
89
- delegateTo: {
90
- type: ScalarTypeEnum.String_unsecure(),
91
- isOptional: false
92
- },
93
- reason: {
94
- type: ScalarTypeEnum.String_unsecure(),
95
- isOptional: true
96
- }
97
- }
98
- }),
99
- output: ApprovalRequestModel
100
- },
101
- policy: { auth: "user" },
102
- sideEffects: {
103
- emits: [{
104
- name: "workflow.approval.delegated",
105
- version: 1,
106
- when: "Approval is delegated",
107
- payload: ApprovalRequestModel
108
- }],
109
- audit: ["workflow.approval.delegated"]
110
- }
111
- });
112
- /**
113
- * Add a comment to an approval request.
114
- */
115
- const AddApprovalCommentContract = defineCommand({
116
- meta: {
117
- name: "workflow.approval.comment.add",
118
- version: 1,
119
- stability: "stable",
120
- owners: [...OWNERS],
121
- tags: [
122
- "workflow",
123
- "approval",
124
- "comment"
125
- ],
126
- description: "Add a comment to an approval request.",
127
- goal: "Allow discussion on approval requests.",
128
- context: "Approval detail view."
129
- },
130
- io: {
131
- input: defineSchemaModel({
132
- name: "AddCommentInput",
133
- fields: {
134
- requestId: {
135
- type: ScalarTypeEnum.String_unsecure(),
136
- isOptional: false
137
- },
138
- content: {
139
- type: ScalarTypeEnum.NonEmptyString(),
140
- isOptional: false
141
- },
142
- isInternal: {
143
- type: ScalarTypeEnum.Boolean(),
144
- isOptional: true
145
- }
146
- }
147
- }),
148
- output: ApprovalCommentModel
149
- },
150
- policy: { auth: "user" },
151
- sideEffects: { emits: [{
152
- name: "workflow.approval.comment.added",
153
- version: 1,
154
- when: "Comment is added",
155
- payload: ApprovalCommentModel
156
- }] }
157
- });
158
- /**
159
- * List approvals assigned to the current user.
160
- */
161
- const ListMyApprovalsContract = defineQuery({
162
- meta: {
163
- name: "workflow.approval.list.mine",
164
- version: 1,
165
- stability: "stable",
166
- owners: [...OWNERS],
167
- tags: [
168
- "workflow",
169
- "approval",
170
- "list",
171
- "inbox"
172
- ],
173
- description: "List approval requests assigned to current user.",
174
- goal: "Show pending approvals in user inbox.",
175
- context: "Approval inbox, dashboard widget."
176
- },
177
- io: {
178
- input: defineSchemaModel({
179
- name: "ListMyApprovalsInput",
180
- fields: {
181
- status: {
182
- type: ApprovalStatusEnum,
183
- isOptional: true
184
- },
185
- limit: {
186
- type: ScalarTypeEnum.Int_unsecure(),
187
- isOptional: true,
188
- defaultValue: 20
189
- },
190
- offset: {
191
- type: ScalarTypeEnum.Int_unsecure(),
192
- isOptional: true,
193
- defaultValue: 0
194
- }
195
- }
196
- }),
197
- output: defineSchemaModel({
198
- name: "ListMyApprovalsOutput",
199
- fields: {
200
- requests: {
201
- type: ApprovalRequestModel,
202
- isArray: true,
203
- isOptional: false
204
- },
205
- total: {
206
- type: ScalarTypeEnum.Int_unsecure(),
207
- isOptional: false
208
- },
209
- pendingCount: {
210
- type: ScalarTypeEnum.Int_unsecure(),
211
- isOptional: false
212
- }
213
- }
214
- })
215
- },
216
- policy: { auth: "user" }
217
- });
218
- /**
219
- * Get a single approval request.
220
- */
221
- const GetApprovalContract = defineQuery({
222
- meta: {
223
- name: "workflow.approval.get",
224
- version: 1,
225
- stability: "stable",
226
- owners: [...OWNERS],
227
- tags: [
228
- "workflow",
229
- "approval",
230
- "get"
231
- ],
232
- description: "Get an approval request with details.",
233
- goal: "View approval request details.",
234
- context: "Approval detail view."
235
- },
236
- io: {
237
- input: defineSchemaModel({
238
- name: "GetApprovalInput",
239
- fields: { requestId: {
240
- type: ScalarTypeEnum.String_unsecure(),
241
- isOptional: false
242
- } }
243
- }),
244
- output: ApprovalRequestModel
245
- },
246
- policy: { auth: "user" }
247
- });
248
-
249
- //#endregion
250
- export { AddApprovalCommentContract, DelegateApprovalContract, GetApprovalContract, ListMyApprovalsContract, SubmitDecisionContract };
1
+ import{ApprovalDecisionEnum as e,ApprovalStatusEnum as t}from"./approval.enum.js";import{ApprovalCommentModel as n,ApprovalRequestModel as r}from"./approval.schema.js";import{ScalarTypeEnum as i,defineSchemaModel as a}from"@lssm/lib.schema";import{defineCommand as o,defineQuery as s}from"@lssm/lib.contracts/spec";const c=[`@example.workflow-system`],l=o({meta:{name:`workflow.approval.decide`,version:1,stability:`stable`,owners:[...c],tags:[`workflow`,`approval`,`decision`],description:`Submit an approval decision (approve/reject).`,goal:`Allow approvers to make decisions on requests.`,context:`Approval inbox, workflow detail.`},io:{input:a({name:`ApproveRejectInput`,fields:{requestId:{type:i.String_unsecure(),isOptional:!1},decision:{type:e,isOptional:!1},comment:{type:i.String_unsecure(),isOptional:!0},data:{type:i.JSON(),isOptional:!0}}}),output:r},policy:{auth:`user`},sideEffects:{emits:[{name:`workflow.approval.decided`,version:1,when:`Decision is made`,payload:r}],audit:[`workflow.approval.decided`]}}),u=o({meta:{name:`workflow.approval.delegate`,version:1,stability:`stable`,owners:[...c],tags:[`workflow`,`approval`,`delegate`],description:`Delegate an approval request to another user.`,goal:`Allow approvers to pass approval to others.`,context:`Approval inbox.`},io:{input:a({name:`DelegateInput`,fields:{requestId:{type:i.String_unsecure(),isOptional:!1},delegateTo:{type:i.String_unsecure(),isOptional:!1},reason:{type:i.String_unsecure(),isOptional:!0}}}),output:r},policy:{auth:`user`},sideEffects:{emits:[{name:`workflow.approval.delegated`,version:1,when:`Approval is delegated`,payload:r}],audit:[`workflow.approval.delegated`]}}),d=o({meta:{name:`workflow.approval.comment.add`,version:1,stability:`stable`,owners:[...c],tags:[`workflow`,`approval`,`comment`],description:`Add a comment to an approval request.`,goal:`Allow discussion on approval requests.`,context:`Approval detail view.`},io:{input:a({name:`AddCommentInput`,fields:{requestId:{type:i.String_unsecure(),isOptional:!1},content:{type:i.NonEmptyString(),isOptional:!1},isInternal:{type:i.Boolean(),isOptional:!0}}}),output:n},policy:{auth:`user`},sideEffects:{emits:[{name:`workflow.approval.comment.added`,version:1,when:`Comment is added`,payload:n}]}}),f=s({meta:{name:`workflow.approval.list.mine`,version:1,stability:`stable`,owners:[...c],tags:[`workflow`,`approval`,`list`,`inbox`],description:`List approval requests assigned to current user.`,goal:`Show pending approvals in user inbox.`,context:`Approval inbox, dashboard widget.`},io:{input:a({name:`ListMyApprovalsInput`,fields:{status:{type:t,isOptional:!0},limit:{type:i.Int_unsecure(),isOptional:!0,defaultValue:20},offset:{type:i.Int_unsecure(),isOptional:!0,defaultValue:0}}}),output:a({name:`ListMyApprovalsOutput`,fields:{requests:{type:r,isArray:!0,isOptional:!1},total:{type:i.Int_unsecure(),isOptional:!1},pendingCount:{type:i.Int_unsecure(),isOptional:!1}}})},policy:{auth:`user`}}),p=s({meta:{name:`workflow.approval.get`,version:1,stability:`stable`,owners:[...c],tags:[`workflow`,`approval`,`get`],description:`Get an approval request with details.`,goal:`View approval request details.`,context:`Approval detail view.`},io:{input:a({name:`GetApprovalInput`,fields:{requestId:{type:i.String_unsecure(),isOptional:!1}}}),output:r},policy:{auth:`user`}});export{d as AddApprovalCommentContract,u as DelegateApprovalContract,p as GetApprovalContract,f as ListMyApprovalsContract,l as SubmitDecisionContract};
@@ -1,29 +1 @@
1
- import { defineEnum } from "../libs/schema/dist/EnumType.js";
2
- import "../libs/schema/dist/index.js";
3
-
4
- //#region src/approval/approval.enum.ts
5
- /**
6
- * Approval status enum.
7
- */
8
- const ApprovalStatusEnum = defineEnum("ApprovalStatus", [
9
- "PENDING",
10
- "APPROVED",
11
- "REJECTED",
12
- "DELEGATED",
13
- "ESCALATED",
14
- "WITHDRAWN",
15
- "EXPIRED"
16
- ]);
17
- /**
18
- * Approval decision enum.
19
- */
20
- const ApprovalDecisionEnum = defineEnum("ApprovalDecision", [
21
- "APPROVE",
22
- "REJECT",
23
- "REQUEST_CHANGES",
24
- "DELEGATE",
25
- "ABSTAIN"
26
- ]);
27
-
28
- //#endregion
29
- export { ApprovalDecisionEnum, ApprovalStatusEnum };
1
+ import{defineEnum as e}from"@lssm/lib.schema";const t=e(`ApprovalStatus`,[`PENDING`,`APPROVED`,`REJECTED`,`DELEGATED`,`ESCALATED`,`WITHDRAWN`,`EXPIRED`]),n=e(`ApprovalDecision`,[`APPROVE`,`REJECT`,`REQUEST_CHANGES`,`DELEGATE`,`ABSTAIN`]);export{n as ApprovalDecisionEnum,t as ApprovalStatusEnum};
@@ -1,186 +1 @@
1
- import { ScalarTypeEnum } from "../libs/schema/dist/ScalarTypeEnum.js";
2
- import "../libs/schema/dist/index.js";
3
- import { defineSchemaModel } from "../libs/contracts/dist/schema/dist/SchemaModel.js";
4
- import { defineEvent } from "../libs/contracts/dist/events.js";
5
- import "../libs/contracts/dist/index.js";
6
-
7
- //#region src/approval/approval.event.ts
8
- /**
9
- * Payload when approval is requested.
10
- */
11
- const ApprovalRequestedPayload = defineSchemaModel({
12
- name: "ApprovalRequestedEventPayload",
13
- description: "Payload when approval is requested",
14
- fields: {
15
- requestId: {
16
- type: ScalarTypeEnum.String_unsecure(),
17
- isOptional: false
18
- },
19
- instanceId: {
20
- type: ScalarTypeEnum.String_unsecure(),
21
- isOptional: false
22
- },
23
- workflowKey: {
24
- type: ScalarTypeEnum.String_unsecure(),
25
- isOptional: false
26
- },
27
- approverId: {
28
- type: ScalarTypeEnum.String_unsecure(),
29
- isOptional: false
30
- },
31
- approverRole: {
32
- type: ScalarTypeEnum.String_unsecure(),
33
- isOptional: true
34
- },
35
- title: {
36
- type: ScalarTypeEnum.String_unsecure(),
37
- isOptional: false
38
- },
39
- dueAt: {
40
- type: ScalarTypeEnum.DateTime(),
41
- isOptional: true
42
- },
43
- timestamp: {
44
- type: ScalarTypeEnum.DateTime(),
45
- isOptional: false
46
- }
47
- }
48
- });
49
- /**
50
- * Payload when approval decision is made.
51
- */
52
- const ApprovalDecidedPayload = defineSchemaModel({
53
- name: "ApprovalDecidedEventPayload",
54
- description: "Payload when approval decision is made",
55
- fields: {
56
- requestId: {
57
- type: ScalarTypeEnum.String_unsecure(),
58
- isOptional: false
59
- },
60
- instanceId: {
61
- type: ScalarTypeEnum.String_unsecure(),
62
- isOptional: false
63
- },
64
- decision: {
65
- type: ScalarTypeEnum.String_unsecure(),
66
- isOptional: false
67
- },
68
- decidedBy: {
69
- type: ScalarTypeEnum.String_unsecure(),
70
- isOptional: false
71
- },
72
- comment: {
73
- type: ScalarTypeEnum.String_unsecure(),
74
- isOptional: true
75
- },
76
- timestamp: {
77
- type: ScalarTypeEnum.DateTime(),
78
- isOptional: false
79
- }
80
- }
81
- });
82
- /**
83
- * Payload when approval is delegated.
84
- */
85
- const ApprovalDelegatedPayload = defineSchemaModel({
86
- name: "ApprovalDelegatedEventPayload",
87
- description: "Payload when approval is delegated",
88
- fields: {
89
- requestId: {
90
- type: ScalarTypeEnum.String_unsecure(),
91
- isOptional: false
92
- },
93
- instanceId: {
94
- type: ScalarTypeEnum.String_unsecure(),
95
- isOptional: false
96
- },
97
- fromUserId: {
98
- type: ScalarTypeEnum.String_unsecure(),
99
- isOptional: false
100
- },
101
- toUserId: {
102
- type: ScalarTypeEnum.String_unsecure(),
103
- isOptional: false
104
- },
105
- reason: {
106
- type: ScalarTypeEnum.String_unsecure(),
107
- isOptional: true
108
- },
109
- timestamp: {
110
- type: ScalarTypeEnum.DateTime(),
111
- isOptional: false
112
- }
113
- }
114
- });
115
- /**
116
- * Payload when approval is escalated.
117
- */
118
- const ApprovalEscalatedPayload = defineSchemaModel({
119
- name: "ApprovalEscalatedEventPayload",
120
- description: "Payload when approval is escalated",
121
- fields: {
122
- requestId: {
123
- type: ScalarTypeEnum.String_unsecure(),
124
- isOptional: false
125
- },
126
- instanceId: {
127
- type: ScalarTypeEnum.String_unsecure(),
128
- isOptional: false
129
- },
130
- escalationLevel: {
131
- type: ScalarTypeEnum.Int_unsecure(),
132
- isOptional: false
133
- },
134
- escalatedTo: {
135
- type: ScalarTypeEnum.String_unsecure(),
136
- isOptional: false
137
- },
138
- reason: {
139
- type: ScalarTypeEnum.String_unsecure(),
140
- isOptional: false
141
- },
142
- timestamp: {
143
- type: ScalarTypeEnum.DateTime(),
144
- isOptional: false
145
- }
146
- }
147
- });
148
- /**
149
- * ApprovalRequestedEvent - An approval has been requested.
150
- */
151
- const ApprovalRequestedEvent = defineEvent({
152
- name: "workflow.approval.requested",
153
- version: 1,
154
- description: "An approval has been requested.",
155
- payload: ApprovalRequestedPayload
156
- });
157
- /**
158
- * ApprovalDecidedEvent - An approval decision has been made.
159
- */
160
- const ApprovalDecidedEvent = defineEvent({
161
- name: "workflow.approval.decided",
162
- version: 1,
163
- description: "An approval decision has been made.",
164
- payload: ApprovalDecidedPayload
165
- });
166
- /**
167
- * ApprovalDelegatedEvent - An approval has been delegated.
168
- */
169
- const ApprovalDelegatedEvent = defineEvent({
170
- name: "workflow.approval.delegated",
171
- version: 1,
172
- description: "An approval has been delegated.",
173
- payload: ApprovalDelegatedPayload
174
- });
175
- /**
176
- * ApprovalEscalatedEvent - An approval has been escalated.
177
- */
178
- const ApprovalEscalatedEvent = defineEvent({
179
- name: "workflow.approval.escalated",
180
- version: 1,
181
- description: "An approval has been escalated.",
182
- payload: ApprovalEscalatedPayload
183
- });
184
-
185
- //#endregion
186
- export { ApprovalDecidedEvent, ApprovalDelegatedEvent, ApprovalEscalatedEvent, ApprovalRequestedEvent };
1
+ import{ScalarTypeEnum as e}from"@lssm/lib.schema";import{defineEvent as t,defineSchemaModel as n}from"@lssm/lib.contracts";const r=n({name:`ApprovalRequestedEventPayload`,description:`Payload when approval is requested`,fields:{requestId:{type:e.String_unsecure(),isOptional:!1},instanceId:{type:e.String_unsecure(),isOptional:!1},workflowKey:{type:e.String_unsecure(),isOptional:!1},approverId:{type:e.String_unsecure(),isOptional:!1},approverRole:{type:e.String_unsecure(),isOptional:!0},title:{type:e.String_unsecure(),isOptional:!1},dueAt:{type:e.DateTime(),isOptional:!0},timestamp:{type:e.DateTime(),isOptional:!1}}}),i=n({name:`ApprovalDecidedEventPayload`,description:`Payload when approval decision is made`,fields:{requestId:{type:e.String_unsecure(),isOptional:!1},instanceId:{type:e.String_unsecure(),isOptional:!1},decision:{type:e.String_unsecure(),isOptional:!1},decidedBy:{type:e.String_unsecure(),isOptional:!1},comment:{type:e.String_unsecure(),isOptional:!0},timestamp:{type:e.DateTime(),isOptional:!1}}}),a=n({name:`ApprovalDelegatedEventPayload`,description:`Payload when approval is delegated`,fields:{requestId:{type:e.String_unsecure(),isOptional:!1},instanceId:{type:e.String_unsecure(),isOptional:!1},fromUserId:{type:e.String_unsecure(),isOptional:!1},toUserId:{type:e.String_unsecure(),isOptional:!1},reason:{type:e.String_unsecure(),isOptional:!0},timestamp:{type:e.DateTime(),isOptional:!1}}}),o=n({name:`ApprovalEscalatedEventPayload`,description:`Payload when approval is escalated`,fields:{requestId:{type:e.String_unsecure(),isOptional:!1},instanceId:{type:e.String_unsecure(),isOptional:!1},escalationLevel:{type:e.Int_unsecure(),isOptional:!1},escalatedTo:{type:e.String_unsecure(),isOptional:!1},reason:{type:e.String_unsecure(),isOptional:!1},timestamp:{type:e.DateTime(),isOptional:!1}}}),s=t({name:`workflow.approval.requested`,version:1,description:`An approval has been requested.`,payload:r}),c=t({name:`workflow.approval.decided`,version:1,description:`An approval decision has been made.`,payload:i}),l=t({name:`workflow.approval.delegated`,version:1,description:`An approval has been delegated.`,payload:a}),u=t({name:`workflow.approval.escalated`,version:1,description:`An approval has been escalated.`,payload:o});export{c as ApprovalDecidedEvent,l as ApprovalDelegatedEvent,u as ApprovalEscalatedEvent,s as ApprovalRequestedEvent};
@@ -1,71 +1 @@
1
- import { mockDataStore } from "../shared/mock-data.js";
2
- import { handleTransitionWorkflow } from "../instance/instance.handler.js";
3
-
4
- //#region src/approval/approval.handler.ts
5
- async function createApprovalRequests(instance, step, _context) {
6
- const now = /* @__PURE__ */ new Date();
7
- for (let i = 0; i < step.approverRoles.length; i++) {
8
- const role = step.approverRoles[i];
9
- const id = `approval_${Date.now()}_${i}`;
10
- const request = {
11
- id,
12
- workflowInstanceId: instance.id,
13
- stepExecutionId: `exec_${instance.id}_${step.id}`,
14
- approverId: `user_${role}`,
15
- approverRole: role,
16
- title: `Approval required for ${step.name}`,
17
- description: step.description,
18
- status: "PENDING",
19
- contextSnapshot: instance.contextData,
20
- sequenceOrder: i,
21
- createdAt: now,
22
- updatedAt: now
23
- };
24
- mockDataStore.approvals.set(id, request);
25
- }
26
- }
27
- async function handleSubmitDecision(input, context) {
28
- const request = mockDataStore.approvals.get(input.requestId);
29
- if (!request) throw new Error(`Approval request ${input.requestId} not found`);
30
- if (request.approverId !== context.userId && !context.userRoles.includes(request.approverRole ?? "")) throw new Error("User is not authorized to make this decision");
31
- const now = /* @__PURE__ */ new Date();
32
- request.decision = input.decision;
33
- request.decisionComment = input.comment;
34
- request.decidedAt = now;
35
- request.updatedAt = now;
36
- if (input.decision === "APPROVE") {
37
- request.status = "APPROVED";
38
- await handleTransitionWorkflow({
39
- instanceId: request.workflowInstanceId,
40
- action: "approve",
41
- data: input.data,
42
- comment: input.comment
43
- }, context);
44
- } else if (input.decision === "REJECT") {
45
- request.status = "REJECTED";
46
- await handleTransitionWorkflow({
47
- instanceId: request.workflowInstanceId,
48
- action: "reject",
49
- data: input.data,
50
- comment: input.comment
51
- }, context);
52
- }
53
- return request;
54
- }
55
- async function handleListMyApprovals(input, context) {
56
- let requests = Array.from(mockDataStore.approvals.values()).filter((r) => r.approverId === context.userId || context.userRoles.includes(r.approverRole ?? ""));
57
- const pendingCount = requests.filter((r) => r.status === "PENDING").length;
58
- if (input.status) requests = requests.filter((r) => r.status === input.status);
59
- const total = requests.length;
60
- const offset = input.offset ?? 0;
61
- const limit = input.limit ?? 20;
62
- requests = requests.sort((a, b) => b.createdAt.getTime() - a.createdAt.getTime()).slice(offset, offset + limit);
63
- return {
64
- requests,
65
- total,
66
- pendingCount
67
- };
68
- }
69
-
70
- //#endregion
71
- export { createApprovalRequests, handleListMyApprovals, handleSubmitDecision };
1
+ import{mockDataStore as e}from"../shared/mock-data.js";import{handleTransitionWorkflow as t}from"../instance/instance.handler.js";async function n(t,n,r){let i=new Date;for(let r=0;r<n.approverRoles.length;r++){let a=n.approverRoles[r],o=`approval_${Date.now()}_${r}`,s={id:o,workflowInstanceId:t.id,stepExecutionId:`exec_${t.id}_${n.id}`,approverId:`user_${a}`,approverRole:a,title:`Approval required for ${n.name}`,description:n.description,status:`PENDING`,contextSnapshot:t.contextData,sequenceOrder:r,createdAt:i,updatedAt:i};e.approvals.set(o,s)}}async function r(n,r){let i=e.approvals.get(n.requestId);if(!i)throw Error(`Approval request ${n.requestId} not found`);if(i.approverId!==r.userId&&!r.userRoles.includes(i.approverRole??``))throw Error(`User is not authorized to make this decision`);let a=new Date;return i.decision=n.decision,i.decisionComment=n.comment,i.decidedAt=a,i.updatedAt=a,n.decision===`APPROVE`?(i.status=`APPROVED`,await t({instanceId:i.workflowInstanceId,action:`approve`,data:n.data,comment:n.comment},r)):n.decision===`REJECT`&&(i.status=`REJECTED`,await t({instanceId:i.workflowInstanceId,action:`reject`,data:n.data,comment:n.comment},r)),i}async function i(t,n){let r=Array.from(e.approvals.values()).filter(e=>e.approverId===n.userId||n.userRoles.includes(e.approverRole??``)),i=r.filter(e=>e.status===`PENDING`).length;t.status&&(r=r.filter(e=>e.status===t.status));let a=r.length,o=t.offset??0,s=t.limit??20;return r=r.sort((e,t)=>t.createdAt.getTime()-e.createdAt.getTime()).slice(o,o+s),{requests:r,total:a,pendingCount:i}}export{n as createApprovalRequests,i as handleListMyApprovals,r as handleSubmitDecision};
@@ -1,111 +1 @@
1
- import { ScalarTypeEnum } from "../libs/schema/dist/ScalarTypeEnum.js";
2
- import { defineSchemaModel } from "../libs/schema/dist/SchemaModel.js";
3
- import "../libs/schema/dist/index.js";
4
- import { ApprovalDecisionEnum, ApprovalStatusEnum } from "./approval.enum.js";
5
-
6
- //#region src/approval/approval.schema.ts
7
- /**
8
- * An approval request.
9
- */
10
- const ApprovalRequestModel = defineSchemaModel({
11
- name: "ApprovalRequestModel",
12
- description: "An approval request",
13
- fields: {
14
- id: {
15
- type: ScalarTypeEnum.String_unsecure(),
16
- isOptional: false
17
- },
18
- workflowInstanceId: {
19
- type: ScalarTypeEnum.String_unsecure(),
20
- isOptional: false
21
- },
22
- stepExecutionId: {
23
- type: ScalarTypeEnum.String_unsecure(),
24
- isOptional: false
25
- },
26
- approverId: {
27
- type: ScalarTypeEnum.String_unsecure(),
28
- isOptional: false
29
- },
30
- approverRole: {
31
- type: ScalarTypeEnum.String_unsecure(),
32
- isOptional: true
33
- },
34
- title: {
35
- type: ScalarTypeEnum.String_unsecure(),
36
- isOptional: false
37
- },
38
- description: {
39
- type: ScalarTypeEnum.String_unsecure(),
40
- isOptional: true
41
- },
42
- status: {
43
- type: ApprovalStatusEnum,
44
- isOptional: false
45
- },
46
- decision: {
47
- type: ApprovalDecisionEnum,
48
- isOptional: true
49
- },
50
- decisionComment: {
51
- type: ScalarTypeEnum.String_unsecure(),
52
- isOptional: true
53
- },
54
- decidedAt: {
55
- type: ScalarTypeEnum.DateTime(),
56
- isOptional: true
57
- },
58
- dueAt: {
59
- type: ScalarTypeEnum.DateTime(),
60
- isOptional: true
61
- },
62
- contextSnapshot: {
63
- type: ScalarTypeEnum.JSON(),
64
- isOptional: true
65
- },
66
- sequenceOrder: {
67
- type: ScalarTypeEnum.Int_unsecure(),
68
- isOptional: false
69
- },
70
- createdAt: {
71
- type: ScalarTypeEnum.DateTime(),
72
- isOptional: false
73
- }
74
- }
75
- });
76
- /**
77
- * A comment on an approval.
78
- */
79
- const ApprovalCommentModel = defineSchemaModel({
80
- name: "ApprovalCommentModel",
81
- description: "A comment on an approval",
82
- fields: {
83
- id: {
84
- type: ScalarTypeEnum.String_unsecure(),
85
- isOptional: false
86
- },
87
- approvalRequestId: {
88
- type: ScalarTypeEnum.String_unsecure(),
89
- isOptional: false
90
- },
91
- authorId: {
92
- type: ScalarTypeEnum.String_unsecure(),
93
- isOptional: false
94
- },
95
- content: {
96
- type: ScalarTypeEnum.String_unsecure(),
97
- isOptional: false
98
- },
99
- isInternal: {
100
- type: ScalarTypeEnum.Boolean(),
101
- isOptional: false
102
- },
103
- createdAt: {
104
- type: ScalarTypeEnum.DateTime(),
105
- isOptional: false
106
- }
107
- }
108
- });
109
-
110
- //#endregion
111
- export { ApprovalCommentModel, ApprovalRequestModel };
1
+ import{ApprovalDecisionEnum as e,ApprovalStatusEnum as t}from"./approval.enum.js";import{ScalarTypeEnum as n,defineSchemaModel as r}from"@lssm/lib.schema";const i=r({name:`ApprovalRequestModel`,description:`An approval request`,fields:{id:{type:n.String_unsecure(),isOptional:!1},workflowInstanceId:{type:n.String_unsecure(),isOptional:!1},stepExecutionId:{type:n.String_unsecure(),isOptional:!1},approverId:{type:n.String_unsecure(),isOptional:!1},approverRole:{type:n.String_unsecure(),isOptional:!0},title:{type:n.String_unsecure(),isOptional:!1},description:{type:n.String_unsecure(),isOptional:!0},status:{type:t,isOptional:!1},decision:{type:e,isOptional:!0},decisionComment:{type:n.String_unsecure(),isOptional:!0},decidedAt:{type:n.DateTime(),isOptional:!0},dueAt:{type:n.DateTime(),isOptional:!0},contextSnapshot:{type:n.JSON(),isOptional:!0},sequenceOrder:{type:n.Int_unsecure(),isOptional:!1},createdAt:{type:n.DateTime(),isOptional:!1}}}),a=r({name:`ApprovalCommentModel`,description:`A comment on an approval`,fields:{id:{type:n.String_unsecure(),isOptional:!1},approvalRequestId:{type:n.String_unsecure(),isOptional:!1},authorId:{type:n.String_unsecure(),isOptional:!1},content:{type:n.String_unsecure(),isOptional:!1},isInternal:{type:n.Boolean(),isOptional:!1},createdAt:{type:n.DateTime(),isOptional:!1}}});export{a as ApprovalCommentModel,i as ApprovalRequestModel};
@@ -1,6 +1 @@
1
- import { ApprovalDecisionEnum, ApprovalStatusEnum } from "./approval.enum.js";
2
- import { ApprovalCommentModel, ApprovalRequestModel } from "./approval.schema.js";
3
- import { AddApprovalCommentContract, DelegateApprovalContract, GetApprovalContract, ListMyApprovalsContract, SubmitDecisionContract } from "./approval.contracts.js";
4
- import { ApprovalDecidedEvent, ApprovalDelegatedEvent, ApprovalEscalatedEvent, ApprovalRequestedEvent } from "./approval.event.js";
5
-
6
- export { AddApprovalCommentContract, ApprovalCommentModel, ApprovalDecidedEvent, ApprovalDecisionEnum, ApprovalDelegatedEvent, ApprovalEscalatedEvent, ApprovalRequestModel, ApprovalRequestedEvent, ApprovalStatusEnum, DelegateApprovalContract, GetApprovalContract, ListMyApprovalsContract, SubmitDecisionContract };
1
+ import{ApprovalDecisionEnum as e,ApprovalStatusEnum as t}from"./approval.enum.js";import{ApprovalCommentModel as n,ApprovalRequestModel as r}from"./approval.schema.js";import{AddApprovalCommentContract as i,DelegateApprovalContract as a,GetApprovalContract as o,ListMyApprovalsContract as s,SubmitDecisionContract as c}from"./approval.contracts.js";import{ApprovalDecidedEvent as l,ApprovalDelegatedEvent as u,ApprovalEscalatedEvent as d,ApprovalRequestedEvent as f}from"./approval.event.js";export{i as AddApprovalCommentContract,n as ApprovalCommentModel,l as ApprovalDecidedEvent,e as ApprovalDecisionEnum,u as ApprovalDelegatedEvent,d as ApprovalEscalatedEvent,r as ApprovalRequestModel,f as ApprovalRequestedEvent,t as ApprovalStatusEnum,a as DelegateApprovalContract,o as GetApprovalContract,s as ListMyApprovalsContract,c as SubmitDecisionContract};
@@ -1 +1 @@
1
- import "./workflow-system.docblock.js";
1
+ import"./workflow-system.docblock.js";