@lssm/example.workflow-system 0.0.0-canary-20251215234340 → 0.0.0-canary-20251216023757
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/approval/approval.contracts.js +1 -0
- package/dist/approval/approval.enum.js +1 -0
- package/dist/approval/approval.event.js +1 -0
- package/dist/approval/approval.handler.js +1 -0
- package/dist/approval/approval.schema.js +1 -0
- package/dist/approval/index.js +1 -0
- package/dist/entities/index.js +1 -1
- package/dist/index.js +1 -1
- package/dist/instance/index.js +1 -0
- package/dist/instance/instance.contracts.js +1 -0
- package/dist/instance/instance.enum.js +1 -0
- package/dist/instance/instance.event.js +1 -0
- package/dist/instance/instance.handler.js +1 -0
- package/dist/instance/instance.schema.js +1 -0
- package/dist/presentations/index.js +1 -1
- package/dist/shared/index.js +1 -0
- package/dist/shared/mock-data.js +1 -0
- package/dist/shared/types.js +0 -0
- package/dist/workflow/index.js +1 -0
- package/dist/workflow/workflow.contracts.js +1 -0
- package/dist/workflow/workflow.enum.js +1 -0
- package/dist/workflow/workflow.event.js +1 -0
- package/dist/workflow/workflow.handler.js +1 -0
- package/dist/workflow/workflow.schema.js +1 -0
- package/package.json +43 -13
- package/dist/contracts/approval.js +0 -1
- package/dist/contracts/index.js +0 -1
- package/dist/contracts/instance.js +0 -1
- package/dist/contracts/workflow.js +0 -1
- package/dist/events.js +0 -1
- package/dist/handlers/index.js +0 -1
|
@@ -0,0 +1 @@
|
|
|
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};
|
|
@@ -0,0 +1 @@
|
|
|
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};
|
|
@@ -0,0 +1 @@
|
|
|
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};
|
|
@@ -0,0 +1 @@
|
|
|
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};
|
|
@@ -0,0 +1 @@
|
|
|
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};
|
|
@@ -0,0 +1 @@
|
|
|
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};
|
package/dist/entities/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{ApprovalCommentEntity as e,ApprovalDecisionEnum as t,ApprovalRequestEntity as n,ApprovalStatusEnum as r}from"./approval.js";import{WorkflowDefinitionEntity as i,WorkflowStatusEnum as a,WorkflowTriggerTypeEnum as o}from"./workflow.js";import{ApprovalModeEnum as s,StepTypeEnum as c,WorkflowStepEntity as l}from"./step.js";import{InstanceStatusEnum as u,StepExecutionEntity as d,StepExecutionStatusEnum as f,WorkflowInstanceEntity as p}from"./instance.js";const m=[i,l,p,d,n,e],h={moduleId:`@lssm/example.workflow-system`,entities:m,enums:[a,o,c,s,u,f,r,t]};export{e as ApprovalCommentEntity,t as ApprovalDecisionEnum,s as ApprovalModeEnum,n as ApprovalRequestEntity,r as ApprovalStatusEnum,u as InstanceStatusEnum,d as StepExecutionEntity,f as StepExecutionStatusEnum,c as StepTypeEnum,i as WorkflowDefinitionEntity,p as WorkflowInstanceEntity,a as WorkflowStatusEnum,l as WorkflowStepEntity,o as WorkflowTriggerTypeEnum,m as workflowSystemEntities,h as workflowSystemSchemaContribution};
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{ApprovalModeEnum as e,StepTypeEnum as t,TriggerTypeEnum as n,WorkflowStatusEnum as r}from"./workflow/workflow.enum.js";import{AddStepInputModel as i,CreateWorkflowInputModel as a,UpdateWorkflowInputModel as o,WorkflowDefinitionModel as s,WorkflowStepModel as c}from"./workflow/workflow.schema.js";import{AddStepContract as l,CreateWorkflowContract as u,GetWorkflowContract as d,ListWorkflowsContract as f,PublishWorkflowContract as p,UpdateWorkflowContract as m}from"./workflow/workflow.contracts.js";import{StepAddedEvent as h,WorkflowCreatedEvent as g,WorkflowPublishedEvent as _,WorkflowUpdatedEvent as v}from"./workflow/workflow.event.js";import"./workflow/index.js";import{InstanceStatusEnum as y}from"./instance/instance.enum.js";import{StartWorkflowInputModel as b,TransitionInputModel as x,TransitionResultModel as S,WorkflowInstanceModel as C}from"./instance/instance.schema.js";import{CancelWorkflowContract as w,GetInstanceContract as T,ListInstancesContract as E,PauseWorkflowContract as D,ResumeWorkflowContract as O,StartWorkflowContract as k,TransitionWorkflowContract as A}from"./instance/instance.contracts.js";import{InstanceCancelledEvent as j,InstanceCompletedEvent as M,InstanceFailedEvent as N,InstancePausedEvent as P,InstanceResumedEvent as F,InstanceStartedEvent as I,InstanceTimedOutEvent as L,StepEnteredEvent as R,StepExitedEvent as z}from"./instance/instance.event.js";import"./instance/index.js";import{ApprovalDecisionEnum as B,ApprovalStatusEnum as V}from"./approval/approval.enum.js";import{ApprovalCommentModel as H,ApprovalRequestModel as U}from"./approval/approval.schema.js";import{AddApprovalCommentContract as W,DelegateApprovalContract as G,GetApprovalContract as K,ListMyApprovalsContract as q,SubmitDecisionContract as J}from"./approval/approval.contracts.js";import{ApprovalDecidedEvent as Y,ApprovalDelegatedEvent as X,ApprovalEscalatedEvent as Z,ApprovalRequestedEvent as Q}from"./approval/approval.event.js";import"./approval/index.js";import{mockDataStore as $}from"./shared/mock-data.js";import{BasicStateMachineEngine as ee,buildStateMachineDefinition as te,createInitialState as ne,createStateMachineEngine as re}from"./state-machine/index.js";export{W as AddApprovalCommentContract,l as AddStepContract,i as AddStepInputModel,H as ApprovalCommentModel,Y as ApprovalDecidedEvent,B as ApprovalDecisionEnum,X as ApprovalDelegatedEvent,Z as ApprovalEscalatedEvent,e as ApprovalModeEnum,U as ApprovalRequestModel,Q as ApprovalRequestedEvent,V as ApprovalStatusEnum,ee as BasicStateMachineEngine,w as CancelWorkflowContract,u as CreateWorkflowContract,a as CreateWorkflowInputModel,G as DelegateApprovalContract,K as GetApprovalContract,T as GetInstanceContract,d as GetWorkflowContract,j as InstanceCancelledEvent,M as InstanceCompletedEvent,N as InstanceFailedEvent,P as InstancePausedEvent,F as InstanceResumedEvent,I as InstanceStartedEvent,y as InstanceStatusEnum,L as InstanceTimedOutEvent,E as ListInstancesContract,q as ListMyApprovalsContract,f as ListWorkflowsContract,D as PauseWorkflowContract,p as PublishWorkflowContract,O as ResumeWorkflowContract,k as StartWorkflowContract,b as StartWorkflowInputModel,h as StepAddedEvent,R as StepEnteredEvent,z as StepExitedEvent,t as StepTypeEnum,J as SubmitDecisionContract,x as TransitionInputModel,S as TransitionResultModel,A as TransitionWorkflowContract,n as TriggerTypeEnum,m as UpdateWorkflowContract,o as UpdateWorkflowInputModel,g as WorkflowCreatedEvent,s as WorkflowDefinitionModel,C as WorkflowInstanceModel,_ as WorkflowPublishedEvent,r as WorkflowStatusEnum,c as WorkflowStepModel,v as WorkflowUpdatedEvent,te as buildStateMachineDefinition,ne as createInitialState,re as createStateMachineEngine,$ as mockDataStore};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{InstanceStatusEnum as e}from"./instance.enum.js";import{StartWorkflowInputModel as t,TransitionInputModel as n,TransitionResultModel as r,WorkflowInstanceModel as i}from"./instance.schema.js";import{CancelWorkflowContract as a,GetInstanceContract as o,ListInstancesContract as s,PauseWorkflowContract as c,ResumeWorkflowContract as l,StartWorkflowContract as u,TransitionWorkflowContract as d}from"./instance.contracts.js";import{InstanceCancelledEvent as f,InstanceCompletedEvent as p,InstanceFailedEvent as m,InstancePausedEvent as h,InstanceResumedEvent as g,InstanceStartedEvent as _,InstanceTimedOutEvent as v,StepEnteredEvent as y,StepExitedEvent as b}from"./instance.event.js";export{a as CancelWorkflowContract,o as GetInstanceContract,f as InstanceCancelledEvent,p as InstanceCompletedEvent,m as InstanceFailedEvent,h as InstancePausedEvent,g as InstanceResumedEvent,_ as InstanceStartedEvent,e as InstanceStatusEnum,v as InstanceTimedOutEvent,s as ListInstancesContract,c as PauseWorkflowContract,l as ResumeWorkflowContract,u as StartWorkflowContract,t as StartWorkflowInputModel,y as StepEnteredEvent,b as StepExitedEvent,n as TransitionInputModel,r as TransitionResultModel,d as TransitionWorkflowContract,i as WorkflowInstanceModel};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{InstanceStatusEnum as e}from"./instance.enum.js";import{StartWorkflowInputModel as t,TransitionInputModel as n,TransitionResultModel as r,WorkflowInstanceModel as i}from"./instance.schema.js";import{ScalarTypeEnum as a,defineSchemaModel as o}from"@lssm/lib.schema";import{defineCommand as s,defineQuery as c}from"@lssm/lib.contracts/spec";const l=[`@example.workflow-system`],u=s({meta:{name:`workflow.instance.start`,version:1,stability:`stable`,owners:[...l],tags:[`workflow`,`instance`,`start`],description:`Start a new workflow instance.`,goal:`Initiate a workflow for a business process.`,context:`Order creation, request submission, etc.`},io:{input:t,output:i},policy:{auth:`user`},sideEffects:{emits:[{name:`workflow.instance.started`,version:1,when:`Workflow starts`,payload:i},{name:`workflow.step.entered`,version:1,when:`First step entered`,payload:i}],audit:[`workflow.instance.started`]}}),d=s({meta:{name:`workflow.instance.transition`,version:1,stability:`stable`,owners:[...l],tags:[`workflow`,`instance`,`transition`,`state-machine`],description:`Transition a workflow instance to the next step.`,goal:`Move workflow forward based on action.`,context:`Task completion, approval decisions.`},io:{input:n,output:r},policy:{auth:`user`},sideEffects:{emits:[{name:`workflow.step.exited`,version:1,when:`Step is exited`,payload:i},{name:`workflow.step.entered`,version:1,when:`New step is entered`,payload:i},{name:`workflow.instance.completed`,version:1,when:`Workflow reaches end`,payload:i}],audit:[`workflow.instance.transitioned`]}}),f=s({meta:{name:`workflow.instance.pause`,version:1,stability:`stable`,owners:[...l],tags:[`workflow`,`instance`,`pause`],description:`Pause a running workflow instance.`,goal:`Temporarily halt workflow execution.`,context:`Administrative action, emergency stop.`},io:{input:o({name:`PauseResumeInput`,fields:{instanceId:{type:a.String_unsecure(),isOptional:!1},reason:{type:a.String_unsecure(),isOptional:!0}}}),output:i},policy:{auth:`user`},sideEffects:{emits:[{name:`workflow.instance.paused`,version:1,when:`Workflow is paused`,payload:i}],audit:[`workflow.instance.paused`]}}),p=s({meta:{name:`workflow.instance.resume`,version:1,stability:`stable`,owners:[...l],tags:[`workflow`,`instance`,`resume`],description:`Resume a paused workflow instance.`,goal:`Continue workflow execution.`,context:`Administrative action.`},io:{input:o({name:`PauseResumeInput`,fields:{instanceId:{type:a.String_unsecure(),isOptional:!1},reason:{type:a.String_unsecure(),isOptional:!0}}}),output:i},policy:{auth:`user`},sideEffects:{emits:[{name:`workflow.instance.resumed`,version:1,when:`Workflow is resumed`,payload:i}],audit:[`workflow.instance.resumed`]}}),m=s({meta:{name:`workflow.instance.cancel`,version:1,stability:`stable`,owners:[...l],tags:[`workflow`,`instance`,`cancel`],description:`Cancel a workflow instance.`,goal:`Terminate workflow without completion.`,context:`User request, system cancellation.`},io:{input:o({name:`CancelWorkflowInput`,fields:{instanceId:{type:a.String_unsecure(),isOptional:!1},reason:{type:a.String_unsecure(),isOptional:!1}}}),output:i},policy:{auth:`user`},sideEffects:{emits:[{name:`workflow.instance.cancelled`,version:1,when:`Workflow is cancelled`,payload:i}],audit:[`workflow.instance.cancelled`]}}),h=c({meta:{name:`workflow.instance.list`,version:1,stability:`stable`,owners:[...l],tags:[`workflow`,`instance`,`list`],description:`List workflow instances with filtering.`,goal:`Browse and search running workflows.`,context:`Dashboard, monitoring.`},io:{input:o({name:`ListInstancesInput`,fields:{workflowKey:{type:a.String_unsecure(),isOptional:!0},status:{type:e,isOptional:!0},referenceType:{type:a.String_unsecure(),isOptional:!0},referenceId:{type:a.String_unsecure(),isOptional:!0},triggeredBy:{type:a.String_unsecure(),isOptional:!0},limit:{type:a.Int_unsecure(),isOptional:!0,defaultValue:20},offset:{type:a.Int_unsecure(),isOptional:!0,defaultValue:0}}}),output:o({name:`ListInstancesOutput`,fields:{instances:{type:i,isArray:!0,isOptional:!1},total:{type:a.Int_unsecure(),isOptional:!1}}})},policy:{auth:`user`}}),g=c({meta:{name:`workflow.instance.get`,version:1,stability:`stable`,owners:[...l],tags:[`workflow`,`instance`,`get`],description:`Get a workflow instance with details.`,goal:`View workflow instance details.`,context:`Instance detail view.`},io:{input:o({name:`GetInstanceInput`,fields:{instanceId:{type:a.String_unsecure(),isOptional:!1}}}),output:i},policy:{auth:`user`}});export{m as CancelWorkflowContract,g as GetInstanceContract,h as ListInstancesContract,f as PauseWorkflowContract,p as ResumeWorkflowContract,u as StartWorkflowContract,d as TransitionWorkflowContract};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{defineEnum as e}from"@lssm/lib.schema";const t=e(`InstanceStatus`,[`PENDING`,`RUNNING`,`WAITING`,`PAUSED`,`COMPLETED`,`CANCELLED`,`FAILED`,`TIMEOUT`]);export{t as InstanceStatusEnum};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{ScalarTypeEnum as e}from"@lssm/lib.schema";import{defineEvent as t,defineSchemaModel as n}from"@lssm/lib.contracts";const r=n({name:`InstanceEventPayload`,description:`Base payload for instance events`,fields:{instanceId:{type:e.String_unsecure(),isOptional:!1},workflowId:{type:e.String_unsecure(),isOptional:!1},workflowKey:{type:e.String_unsecure(),isOptional:!1},status:{type:e.String_unsecure(),isOptional:!1},referenceId:{type:e.String_unsecure(),isOptional:!0},referenceType:{type:e.String_unsecure(),isOptional:!0},triggeredBy:{type:e.String_unsecure(),isOptional:!1},organizationId:{type:e.String_unsecure(),isOptional:!1},timestamp:{type:e.DateTime(),isOptional:!1}}}),i=n({name:`StepTransitionEventPayload`,description:`Payload for step transition events`,fields:{instanceId:{type:e.String_unsecure(),isOptional:!1},workflowId:{type:e.String_unsecure(),isOptional:!1},fromStepKey:{type:e.String_unsecure(),isOptional:!0},toStepKey:{type:e.String_unsecure(),isOptional:!1},action:{type:e.String_unsecure(),isOptional:!0},executedBy:{type:e.String_unsecure(),isOptional:!1},timestamp:{type:e.DateTime(),isOptional:!1}}}),a=n({name:`InstanceCompletedEventPayload`,description:`Payload when instance completes`,fields:{instanceId:{type:e.String_unsecure(),isOptional:!1},workflowId:{type:e.String_unsecure(),isOptional:!1},workflowKey:{type:e.String_unsecure(),isOptional:!1},outcome:{type:e.String_unsecure(),isOptional:!1},referenceId:{type:e.String_unsecure(),isOptional:!0},referenceType:{type:e.String_unsecure(),isOptional:!0},duration:{type:e.Int_unsecure(),isOptional:!1},timestamp:{type:e.DateTime(),isOptional:!1}}}),o=t({name:`workflow.instance.started`,version:1,description:`A new workflow instance has been started.`,payload:r}),s=t({name:`workflow.step.entered`,version:1,description:`A workflow instance has entered a new step.`,payload:i}),c=t({name:`workflow.step.exited`,version:1,description:`A workflow instance has exited a step.`,payload:i}),l=t({name:`workflow.instance.completed`,version:1,description:`A workflow instance has completed.`,payload:a}),u=t({name:`workflow.instance.cancelled`,version:1,description:`A workflow instance has been cancelled.`,payload:r}),d=t({name:`workflow.instance.paused`,version:1,description:`A workflow instance has been paused.`,payload:r}),f=t({name:`workflow.instance.resumed`,version:1,description:`A workflow instance has been resumed.`,payload:r}),p=t({name:`workflow.instance.failed`,version:1,description:`A workflow instance has failed.`,payload:r}),m=t({name:`workflow.instance.timeout`,version:1,description:`A workflow instance has timed out.`,payload:r});export{u as InstanceCancelledEvent,l as InstanceCompletedEvent,p as InstanceFailedEvent,d as InstancePausedEvent,f as InstanceResumedEvent,o as InstanceStartedEvent,m as InstanceTimedOutEvent,s as StepEnteredEvent,c as StepExitedEvent};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{mockDataStore as e}from"../shared/mock-data.js";import{buildStateMachineDefinition as t,createStateMachineEngine as n}from"../state-machine/index.js";import{createApprovalRequests as r}from"../approval/approval.handler.js";async function i(t,n){let i=Array.from(e.workflows.values()).find(e=>e.key===t.workflowKey&&e.status===`ACTIVE`&&e.organizationId===n.organizationId);if(!i)throw Error(`Active workflow ${t.workflowKey} not found`);let a=`inst_${Date.now()}`,o=new Date,s={id:a,workflowDefinitionId:i.id,referenceId:t.referenceId,referenceType:t.referenceType,status:`RUNNING`,currentStepId:i.initialStepId,contextData:t.contextData??{},triggeredBy:n.userId,organizationId:n.organizationId,priority:t.priority??0,dueAt:t.dueAt,createdAt:o,updatedAt:o,startedAt:o};if(e.instances.set(a,s),i.initialStepId){let t=e.steps.get(i.initialStepId);t?.type===`APPROVAL`&&(s.status=`WAITING`,await r(s,t,n))}return s}async function a(i,a){let o=e.instances.get(i.instanceId);if(!o)throw Error(`Instance ${i.instanceId} not found`);let s=e.workflows.get(o.workflowDefinitionId);if(!s)throw Error(`Workflow ${o.workflowDefinitionId} not found`);let c=Array.from(e.steps.values()).filter(e=>e.workflowDefinitionId===s.id),l=t({key:s.key,name:s.name,version:s.version,initialStepId:s.initialStepId??null},c),u=c.find(e=>e.id===o.currentStepId),d={currentStepKey:u?.key??``,status:o.status,contextData:o.contextData,history:[]},f={userId:a.userId,userRoles:a.userRoles,data:i.data},p=n().transition(l,d,i.action,f);if(!p.success)return{success:!1,instance:o,message:p.error};let m=u?.key,h=c.find(e=>e.key===p.currentStepKey);return o.currentStepId=h?.id,o.status=p.status,o.contextData={...o.contextData,...i.data},o.updatedAt=new Date,p.status===`COMPLETED`&&(o.completedAt=new Date,o.outcome=i.action),h?.type===`APPROVAL`&&(o.status=`WAITING`,await r(o,h,a)),{success:!0,instance:o,previousStepKey:m,currentStepKey:p.currentStepKey??void 0}}export{i as handleStartWorkflow,a as handleTransitionWorkflow};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{InstanceStatusEnum as e}from"./instance.enum.js";import{ScalarTypeEnum as t,defineSchemaModel as n}from"@lssm/lib.schema";const r=n({name:`WorkflowInstanceModel`,description:`A running workflow instance`,fields:{id:{type:t.String_unsecure(),isOptional:!1},workflowDefinitionId:{type:t.String_unsecure(),isOptional:!1},referenceId:{type:t.String_unsecure(),isOptional:!0},referenceType:{type:t.String_unsecure(),isOptional:!0},status:{type:e,isOptional:!1},currentStepId:{type:t.String_unsecure(),isOptional:!0},contextData:{type:t.JSON(),isOptional:!0},triggeredBy:{type:t.String_unsecure(),isOptional:!1},organizationId:{type:t.String_unsecure(),isOptional:!1},priority:{type:t.Int_unsecure(),isOptional:!1},dueAt:{type:t.DateTime(),isOptional:!0},outcome:{type:t.String_unsecure(),isOptional:!0},resultData:{type:t.JSON(),isOptional:!0},errorMessage:{type:t.String_unsecure(),isOptional:!0},createdAt:{type:t.DateTime(),isOptional:!1},startedAt:{type:t.DateTime(),isOptional:!0},completedAt:{type:t.DateTime(),isOptional:!0}}}),i=n({name:`StartWorkflowInput`,description:`Input for starting a workflow`,fields:{workflowKey:{type:t.NonEmptyString(),isOptional:!1},contextData:{type:t.JSON(),isOptional:!0},referenceId:{type:t.String_unsecure(),isOptional:!0},referenceType:{type:t.String_unsecure(),isOptional:!0},priority:{type:t.Int_unsecure(),isOptional:!0},dueAt:{type:t.DateTime(),isOptional:!0}}}),a=n({name:`TransitionInput`,description:`Input for transitioning a workflow`,fields:{instanceId:{type:t.String_unsecure(),isOptional:!1},action:{type:t.NonEmptyString(),isOptional:!1},data:{type:t.JSON(),isOptional:!0},comment:{type:t.String_unsecure(),isOptional:!0}}}),o=n({name:`TransitionResult`,description:`Result of a workflow transition`,fields:{success:{type:t.Boolean(),isOptional:!1},instance:{type:r,isOptional:!1},previousStepKey:{type:t.String_unsecure(),isOptional:!0},currentStepKey:{type:t.String_unsecure(),isOptional:!0},message:{type:t.String_unsecure(),isOptional:!0}}});export{i as StartWorkflowInputModel,a as TransitionInputModel,o as TransitionResultModel,r as WorkflowInstanceModel};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{WorkflowDefinitionModel as e}from"../
|
|
1
|
+
import{WorkflowDefinitionModel as e}from"../workflow/workflow.schema.js";import{WorkflowInstanceModel as t}from"../instance/instance.schema.js";import{ApprovalRequestModel as n}from"../approval/approval.schema.js";const r={meta:{name:`workflow.designer`,version:1,description:`Visual workflow designer with drag-and-drop steps`,domain:`workflow-system`,owners:[`workflow-team`],tags:[`workflow`,`designer`,`admin`]},source:{type:`component`,framework:`react`,componentKey:`WorkflowDesigner`,props:e},targets:[`react`],policy:{flags:[`workflow.designer.enabled`]}},i={meta:{name:`workflow.definition.list`,version:1,description:`List of workflow definitions with status and actions`,domain:`workflow-system`,owners:[`workflow-team`],tags:[`workflow`,`list`,`admin`]},source:{type:`component`,framework:`react`,componentKey:`WorkflowDefinitionList`,props:e},targets:[`react`,`markdown`],policy:{flags:[`workflow.enabled`]}},a={meta:{name:`workflow.definition.detail`,version:1,description:`Detailed view of a workflow definition with steps`,domain:`workflow-system`,owners:[`workflow-team`],tags:[`workflow`,`detail`]},source:{type:`component`,framework:`react`,componentKey:`WorkflowDefinitionDetail`,props:e},targets:[`react`,`markdown`],policy:{flags:[`workflow.enabled`]}},o={meta:{name:`workflow.instance.list`,version:1,description:`List of workflow instances with status and progress`,domain:`workflow-system`,owners:[`workflow-team`],tags:[`workflow`,`instance`,`list`]},source:{type:`component`,framework:`react`,componentKey:`WorkflowInstanceList`,props:t},targets:[`react`,`markdown`],policy:{flags:[`workflow.enabled`]}},s={meta:{name:`workflow.instance.detail`,version:1,description:`Detailed view of a workflow instance with step timeline`,domain:`workflow-system`,owners:[`workflow-team`],tags:[`workflow`,`instance`,`detail`,`timeline`]},source:{type:`component`,framework:`react`,componentKey:`WorkflowInstanceDetail`,props:t},targets:[`react`,`markdown`],policy:{flags:[`workflow.enabled`]}},c={meta:{name:`workflow.instance.progress`,version:1,description:`Visual progress tracker showing current step in workflow`,domain:`workflow-system`,owners:[`workflow-team`],tags:[`workflow`,`progress`,`widget`]},source:{type:`component`,framework:`react`,componentKey:`WorkflowProgressTracker`,props:t},targets:[`react`],policy:{flags:[`workflow.enabled`]}},l={meta:{name:`workflow.approval.inbox`,version:1,description:`Inbox showing pending approval requests for current user`,domain:`workflow-system`,owners:[`workflow-team`],tags:[`workflow`,`approval`,`inbox`]},source:{type:`component`,framework:`react`,componentKey:`ApprovalInbox`,props:n},targets:[`react`,`markdown`],policy:{flags:[`workflow.approvals.enabled`]}},u={meta:{name:`workflow.approval.detail`,version:1,description:`Detailed approval request view with context and actions`,domain:`workflow-system`,owners:[`workflow-team`],tags:[`workflow`,`approval`,`detail`]},source:{type:`component`,framework:`react`,componentKey:`ApprovalRequestDetail`,props:n},targets:[`react`,`markdown`],policy:{flags:[`workflow.approvals.enabled`]}},d={meta:{name:`workflow.approval.form`,version:1,description:`Form for submitting approval decisions`,domain:`workflow-system`,owners:[`workflow-team`],tags:[`workflow`,`approval`,`form`]},source:{type:`component`,framework:`react`,componentKey:`ApprovalDecisionForm`},targets:[`react`],policy:{flags:[`workflow.approvals.enabled`]}},f={meta:{name:`workflow.approval.badge`,version:1,description:`Badge showing count of pending approvals`,domain:`workflow-system`,owners:[`workflow-team`],tags:[`workflow`,`approval`,`badge`,`widget`]},source:{type:`component`,framework:`react`,componentKey:`PendingApprovalsBadge`},targets:[`react`],policy:{flags:[`workflow.approvals.enabled`]}},p={meta:{name:`workflow.metrics`,version:1,description:`Dashboard widget showing workflow metrics and statistics`,domain:`workflow-system`,owners:[`workflow-team`],tags:[`workflow`,`metrics`,`dashboard`]},source:{type:`component`,framework:`react`,componentKey:`WorkflowMetricsDashboard`},targets:[`react`,`markdown`],policy:{flags:[`workflow.metrics.enabled`]}},m={WorkflowDesignerPresentation:r,WorkflowListPresentation:i,WorkflowDetailPresentation:a,InstanceListPresentation:o,InstanceDetailPresentation:s,ProgressTrackerPresentation:c,ApprovalInboxPresentation:l,ApprovalDetailPresentation:u,ApprovalFormPresentation:d,PendingApprovalsBadgePresentation:f,WorkflowMetricsPresentation:p};export{u as ApprovalDetailPresentation,d as ApprovalFormPresentation,l as ApprovalInboxPresentation,s as InstanceDetailPresentation,o as InstanceListPresentation,f as PendingApprovalsBadgePresentation,c as ProgressTrackerPresentation,r as WorkflowDesignerPresentation,a as WorkflowDetailPresentation,i as WorkflowListPresentation,p as WorkflowMetricsPresentation,m as WorkflowSystemPresentations};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{mockDataStore as e}from"./mock-data.js";export{e as mockDataStore};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const e={workflows:new Map,steps:new Map,instances:new Map,approvals:new Map,stepExecutions:new Map};export{e as mockDataStore};
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{ApprovalModeEnum as e,StepTypeEnum as t,TriggerTypeEnum as n,WorkflowStatusEnum as r}from"./workflow.enum.js";import{AddStepInputModel as i,CreateWorkflowInputModel as a,UpdateWorkflowInputModel as o,WorkflowDefinitionModel as s,WorkflowStepModel as c}from"./workflow.schema.js";import{AddStepContract as l,CreateWorkflowContract as u,GetWorkflowContract as d,ListWorkflowsContract as f,PublishWorkflowContract as p,UpdateWorkflowContract as m}from"./workflow.contracts.js";import{StepAddedEvent as h,WorkflowCreatedEvent as g,WorkflowPublishedEvent as _,WorkflowUpdatedEvent as v}from"./workflow.event.js";export{l as AddStepContract,i as AddStepInputModel,e as ApprovalModeEnum,u as CreateWorkflowContract,a as CreateWorkflowInputModel,d as GetWorkflowContract,f as ListWorkflowsContract,p as PublishWorkflowContract,h as StepAddedEvent,t as StepTypeEnum,n as TriggerTypeEnum,m as UpdateWorkflowContract,o as UpdateWorkflowInputModel,g as WorkflowCreatedEvent,s as WorkflowDefinitionModel,_ as WorkflowPublishedEvent,r as WorkflowStatusEnum,c as WorkflowStepModel,v as WorkflowUpdatedEvent};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{WorkflowStatusEnum as e}from"./workflow.enum.js";import{AddStepInputModel as t,CreateWorkflowInputModel as n,UpdateWorkflowInputModel as r,WorkflowDefinitionModel as i,WorkflowStepModel as a}from"./workflow.schema.js";import{ScalarTypeEnum as o,defineSchemaModel as s}from"@lssm/lib.schema";import{defineCommand as c,defineQuery as l}from"@lssm/lib.contracts/spec";const u=[`@example.workflow-system`],d=c({meta:{name:`workflow.definition.create`,version:1,stability:`stable`,owners:[...u],tags:[`workflow`,`definition`,`create`],description:`Create a new workflow definition.`,goal:`Allow users to define new workflow blueprints.`,context:`Workflow designer, admin panel.`},io:{input:n,output:i},policy:{auth:`user`},sideEffects:{emits:[{name:`workflow.definition.created`,version:1,when:`Workflow is created`,payload:i}],audit:[`workflow.definition.created`]}}),f=c({meta:{name:`workflow.definition.update`,version:1,stability:`stable`,owners:[...u],tags:[`workflow`,`definition`,`update`],description:`Update an existing workflow definition.`,goal:`Allow users to modify workflow blueprints.`,context:`Workflow designer.`},io:{input:r,output:i},policy:{auth:`user`},sideEffects:{emits:[{name:`workflow.definition.updated`,version:1,when:`Workflow is updated`,payload:i}],audit:[`workflow.definition.updated`]}}),p=c({meta:{name:`workflow.step.add`,version:1,stability:`stable`,owners:[...u],tags:[`workflow`,`step`,`add`],description:`Add a step to a workflow definition.`,goal:`Build workflow structure step by step.`,context:`Workflow designer.`},io:{input:t,output:a},policy:{auth:`user`},sideEffects:{emits:[{name:`workflow.step.added`,version:1,when:`Step is added`,payload:a}],audit:[`workflow.step.added`]}}),m=c({meta:{name:`workflow.definition.publish`,version:1,stability:`stable`,owners:[...u],tags:[`workflow`,`definition`,`publish`],description:`Publish a workflow definition to make it available for use.`,goal:`Activate workflow for production use.`,context:`Workflow designer, deployment.`},io:{input:s({name:`PublishWorkflowInput`,fields:{workflowId:{type:o.String_unsecure(),isOptional:!1}}}),output:i},policy:{auth:`user`},sideEffects:{emits:[{name:`workflow.definition.published`,version:1,when:`Workflow is published`,payload:i}],audit:[`workflow.definition.published`]}}),h=l({meta:{name:`workflow.definition.list`,version:1,stability:`stable`,owners:[...u],tags:[`workflow`,`definition`,`list`],description:`List workflow definitions with filtering.`,goal:`Browse and search available workflows.`,context:`Workflow list, search.`},io:{input:s({name:`ListWorkflowsInput`,fields:{status:{type:e,isOptional:!0},search:{type:o.String_unsecure(),isOptional:!0},limit:{type:o.Int_unsecure(),isOptional:!0,defaultValue:20},offset:{type:o.Int_unsecure(),isOptional:!0,defaultValue:0}}}),output:s({name:`ListWorkflowsOutput`,fields:{workflows:{type:i,isArray:!0,isOptional:!1},total:{type:o.Int_unsecure(),isOptional:!1}}})},policy:{auth:`user`}}),g=l({meta:{name:`workflow.definition.get`,version:1,stability:`stable`,owners:[...u],tags:[`workflow`,`definition`,`get`],description:`Get a workflow definition with all steps.`,goal:`View workflow details.`,context:`Workflow designer, detail view.`},io:{input:s({name:`GetWorkflowInput`,fields:{workflowId:{type:o.String_unsecure(),isOptional:!1}}}),output:i},policy:{auth:`user`}});export{p as AddStepContract,d as CreateWorkflowContract,g as GetWorkflowContract,h as ListWorkflowsContract,m as PublishWorkflowContract,f as UpdateWorkflowContract};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{defineEnum as e}from"@lssm/lib.schema";const t=e(`WorkflowStatus`,[`DRAFT`,`ACTIVE`,`DEPRECATED`,`ARCHIVED`]),n=e(`WorkflowTriggerType`,[`MANUAL`,`EVENT`,`SCHEDULED`,`API`]),r=e(`StepType`,[`START`,`APPROVAL`,`TASK`,`CONDITION`,`PARALLEL`,`WAIT`,`ACTION`,`END`]),i=e(`ApprovalMode`,[`ANY`,`ALL`,`MAJORITY`,`SEQUENTIAL`]);export{i as ApprovalModeEnum,r as StepTypeEnum,n as TriggerTypeEnum,t as WorkflowStatusEnum};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{ScalarTypeEnum as e}from"@lssm/lib.schema";import{defineEvent as t,defineSchemaModel as n}from"@lssm/lib.contracts";const r=n({name:`WorkflowDefinitionEventPayload`,description:`Payload for workflow definition events`,fields:{workflowId:{type:e.String_unsecure(),isOptional:!1},key:{type:e.String_unsecure(),isOptional:!1},name:{type:e.String_unsecure(),isOptional:!1},version:{type:e.Int_unsecure(),isOptional:!1},organizationId:{type:e.String_unsecure(),isOptional:!1},createdBy:{type:e.String_unsecure(),isOptional:!1},timestamp:{type:e.DateTime(),isOptional:!1}}}),i=n({name:`StepAddedEventPayload`,description:`Payload when a step is added`,fields:{stepId:{type:e.String_unsecure(),isOptional:!1},workflowId:{type:e.String_unsecure(),isOptional:!1},stepKey:{type:e.String_unsecure(),isOptional:!1},stepType:{type:e.String_unsecure(),isOptional:!1},position:{type:e.Int_unsecure(),isOptional:!1},timestamp:{type:e.DateTime(),isOptional:!1}}}),a=t({name:`workflow.definition.created`,version:1,description:`A new workflow definition has been created.`,payload:r}),o=t({name:`workflow.definition.updated`,version:1,description:`A workflow definition has been updated.`,payload:r}),s=t({name:`workflow.definition.published`,version:1,description:`A workflow definition has been published and is now active.`,payload:r}),c=t({name:`workflow.step.added`,version:1,description:`A step has been added to a workflow definition.`,payload:i});export{c as StepAddedEvent,a as WorkflowCreatedEvent,s as WorkflowPublishedEvent,o as WorkflowUpdatedEvent};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{mockDataStore as e}from"../shared/mock-data.js";async function t(t,n){let r=`wf_${Date.now()}`,i=new Date,a={id:r,key:t.key,name:t.name,description:t.description,version:1,status:`DRAFT`,triggerType:t.triggerType??`MANUAL`,featureFlagKey:t.featureFlagKey,organizationId:n.organizationId,createdBy:n.userId,createdAt:i,updatedAt:i};return e.workflows.set(r,a),a}async function n(t,n){let r=`step_${Date.now()}`,i=new Date,a=Array.from(e.steps.values()).filter(e=>e.workflowDefinitionId===t.workflowId),o=t.position??a.length,s={id:r,workflowDefinitionId:t.workflowId,key:t.key,name:t.name,description:t.description,type:t.type,position:o,transitions:t.transitions,approvalMode:t.approvalMode,approverRoles:t.approverRoles??[],timeoutSeconds:t.timeoutSeconds,createdAt:i,updatedAt:i};if(e.steps.set(r,s),a.length===0||t.type===`START`){let n=e.workflows.get(t.workflowId);n&&(n.initialStepId=r,n.updatedAt=i)}return s}async function r(t,n){let r=e.workflows.get(t.workflowId);if(!r)throw Error(`Workflow ${t.workflowId} not found`);let i=new Date;return r.status=`ACTIVE`,r.publishedAt=i,r.updatedAt=i,r}export{n as handleAddStep,t as handleCreateWorkflow,r as handlePublishWorkflow};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{ApprovalModeEnum as e,StepTypeEnum as t,TriggerTypeEnum as n,WorkflowStatusEnum as r}from"./workflow.enum.js";import{ScalarTypeEnum as i,defineSchemaModel as a}from"@lssm/lib.schema";const o=a({name:`WorkflowStepModel`,description:`A step in a workflow definition`,fields:{id:{type:i.String_unsecure(),isOptional:!1},key:{type:i.String_unsecure(),isOptional:!1},name:{type:i.String_unsecure(),isOptional:!1},description:{type:i.String_unsecure(),isOptional:!0},type:{type:t,isOptional:!1},position:{type:i.Int_unsecure(),isOptional:!1},transitions:{type:i.JSON(),isOptional:!1},approvalMode:{type:e,isOptional:!0},approverRoles:{type:i.String_unsecure(),isArray:!0,isOptional:!0}}}),s=a({name:`WorkflowDefinitionModel`,description:`A workflow definition`,fields:{id:{type:i.String_unsecure(),isOptional:!1},name:{type:i.String_unsecure(),isOptional:!1},key:{type:i.String_unsecure(),isOptional:!1},description:{type:i.String_unsecure(),isOptional:!0},version:{type:i.Int_unsecure(),isOptional:!1},status:{type:r,isOptional:!1},triggerType:{type:n,isOptional:!1},initialStepId:{type:i.String_unsecure(),isOptional:!0},featureFlagKey:{type:i.String_unsecure(),isOptional:!0},organizationId:{type:i.String_unsecure(),isOptional:!1},createdAt:{type:i.DateTime(),isOptional:!1},updatedAt:{type:i.DateTime(),isOptional:!1},steps:{type:o,isArray:!0,isOptional:!0}}}),c=a({name:`CreateWorkflowInput`,description:`Input for creating a workflow definition`,fields:{name:{type:i.NonEmptyString(),isOptional:!1},key:{type:i.NonEmptyString(),isOptional:!1},description:{type:i.String_unsecure(),isOptional:!0},triggerType:{type:n,isOptional:!0},triggerConfig:{type:i.JSON(),isOptional:!0},featureFlagKey:{type:i.String_unsecure(),isOptional:!0},settings:{type:i.JSON(),isOptional:!0}}}),l=a({name:`UpdateWorkflowInput`,description:`Input for updating a workflow definition`,fields:{workflowId:{type:i.String_unsecure(),isOptional:!1},name:{type:i.String_unsecure(),isOptional:!0},description:{type:i.String_unsecure(),isOptional:!0},triggerType:{type:n,isOptional:!0},triggerConfig:{type:i.JSON(),isOptional:!0},featureFlagKey:{type:i.String_unsecure(),isOptional:!0},settings:{type:i.JSON(),isOptional:!0}}}),u=a({name:`AddStepInput`,description:`Input for adding a step to a workflow`,fields:{workflowId:{type:i.String_unsecure(),isOptional:!1},key:{type:i.NonEmptyString(),isOptional:!1},name:{type:i.NonEmptyString(),isOptional:!1},description:{type:i.String_unsecure(),isOptional:!0},type:{type:t,isOptional:!1},position:{type:i.Int_unsecure(),isOptional:!0},transitions:{type:i.JSON(),isOptional:!1},approvalMode:{type:e,isOptional:!0},approverRoles:{type:i.String_unsecure(),isArray:!0,isOptional:!0},approverUserIds:{type:i.String_unsecure(),isArray:!0,isOptional:!0},timeoutSeconds:{type:i.Int_unsecure(),isOptional:!0},slaSeconds:{type:i.Int_unsecure(),isOptional:!0}}});export{u as AddStepInputModel,c as CreateWorkflowInputModel,l as UpdateWorkflowInputModel,s as WorkflowDefinitionModel,o as WorkflowStepModel};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lssm/example.workflow-system",
|
|
3
|
-
"version": "0.0.0-canary-
|
|
3
|
+
"version": "0.0.0-canary-20251216023757",
|
|
4
4
|
"description": "Workflow and approval system example for ContractSpec - State machine with role-based transitions",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -34,10 +34,12 @@
|
|
|
34
34
|
},
|
|
35
35
|
"exports": {
|
|
36
36
|
".": "./src/index.ts",
|
|
37
|
-
"./
|
|
38
|
-
"./
|
|
39
|
-
"./
|
|
40
|
-
"./
|
|
37
|
+
"./approval": "./src/approval/index.ts",
|
|
38
|
+
"./approval/approval.contracts": "./src/approval/approval.contracts.ts",
|
|
39
|
+
"./approval/approval.enum": "./src/approval/approval.enum.ts",
|
|
40
|
+
"./approval/approval.event": "./src/approval/approval.event.ts",
|
|
41
|
+
"./approval/approval.handler": "./src/approval/approval.handler.ts",
|
|
42
|
+
"./approval/approval.schema": "./src/approval/approval.schema.ts",
|
|
41
43
|
"./docs": "./src/docs/index.ts",
|
|
42
44
|
"./docs/workflow-system.docblock": "./src/docs/workflow-system.docblock.ts",
|
|
43
45
|
"./entities": "./src/entities/index.ts",
|
|
@@ -45,12 +47,25 @@
|
|
|
45
47
|
"./entities/instance": "./src/entities/instance.ts",
|
|
46
48
|
"./entities/step": "./src/entities/step.ts",
|
|
47
49
|
"./entities/workflow": "./src/entities/workflow.ts",
|
|
48
|
-
"./events": "./src/events.ts",
|
|
49
50
|
"./example": "./src/example.ts",
|
|
50
51
|
"./feature": "./src/feature.ts",
|
|
51
|
-
"./
|
|
52
|
+
"./instance": "./src/instance/index.ts",
|
|
53
|
+
"./instance/instance.contracts": "./src/instance/instance.contracts.ts",
|
|
54
|
+
"./instance/instance.enum": "./src/instance/instance.enum.ts",
|
|
55
|
+
"./instance/instance.event": "./src/instance/instance.event.ts",
|
|
56
|
+
"./instance/instance.handler": "./src/instance/instance.handler.ts",
|
|
57
|
+
"./instance/instance.schema": "./src/instance/instance.schema.ts",
|
|
52
58
|
"./presentations": "./src/presentations/index.ts",
|
|
59
|
+
"./shared": "./src/shared/index.ts",
|
|
60
|
+
"./shared/mock-data": "./src/shared/mock-data.ts",
|
|
61
|
+
"./shared/types": "./src/shared/types.ts",
|
|
53
62
|
"./state-machine": "./src/state-machine/index.ts",
|
|
63
|
+
"./workflow": "./src/workflow/index.ts",
|
|
64
|
+
"./workflow/workflow.contracts": "./src/workflow/workflow.contracts.ts",
|
|
65
|
+
"./workflow/workflow.enum": "./src/workflow/workflow.enum.ts",
|
|
66
|
+
"./workflow/workflow.event": "./src/workflow/workflow.event.ts",
|
|
67
|
+
"./workflow/workflow.handler": "./src/workflow/workflow.handler.ts",
|
|
68
|
+
"./workflow/workflow.schema": "./src/workflow/workflow.schema.ts",
|
|
54
69
|
"./*": "./*"
|
|
55
70
|
},
|
|
56
71
|
"module": "./dist/index.js",
|
|
@@ -62,10 +77,12 @@
|
|
|
62
77
|
"access": "public",
|
|
63
78
|
"exports": {
|
|
64
79
|
".": "./dist/index.js",
|
|
65
|
-
"./
|
|
66
|
-
"./
|
|
67
|
-
"./
|
|
68
|
-
"./
|
|
80
|
+
"./approval": "./dist/approval/index.js",
|
|
81
|
+
"./approval/approval.contracts": "./dist/approval/approval.contracts.js",
|
|
82
|
+
"./approval/approval.enum": "./dist/approval/approval.enum.js",
|
|
83
|
+
"./approval/approval.event": "./dist/approval/approval.event.js",
|
|
84
|
+
"./approval/approval.handler": "./dist/approval/approval.handler.js",
|
|
85
|
+
"./approval/approval.schema": "./dist/approval/approval.schema.js",
|
|
69
86
|
"./docs": "./dist/docs/index.js",
|
|
70
87
|
"./docs/workflow-system.docblock": "./dist/docs/workflow-system.docblock.js",
|
|
71
88
|
"./entities": "./dist/entities/index.js",
|
|
@@ -73,12 +90,25 @@
|
|
|
73
90
|
"./entities/instance": "./dist/entities/instance.js",
|
|
74
91
|
"./entities/step": "./dist/entities/step.js",
|
|
75
92
|
"./entities/workflow": "./dist/entities/workflow.js",
|
|
76
|
-
"./events": "./dist/events.js",
|
|
77
93
|
"./example": "./dist/example.js",
|
|
78
94
|
"./feature": "./dist/feature.js",
|
|
79
|
-
"./
|
|
95
|
+
"./instance": "./dist/instance/index.js",
|
|
96
|
+
"./instance/instance.contracts": "./dist/instance/instance.contracts.js",
|
|
97
|
+
"./instance/instance.enum": "./dist/instance/instance.enum.js",
|
|
98
|
+
"./instance/instance.event": "./dist/instance/instance.event.js",
|
|
99
|
+
"./instance/instance.handler": "./dist/instance/instance.handler.js",
|
|
100
|
+
"./instance/instance.schema": "./dist/instance/instance.schema.js",
|
|
80
101
|
"./presentations": "./dist/presentations/index.js",
|
|
102
|
+
"./shared": "./dist/shared/index.js",
|
|
103
|
+
"./shared/mock-data": "./dist/shared/mock-data.js",
|
|
104
|
+
"./shared/types": "./dist/shared/types.js",
|
|
81
105
|
"./state-machine": "./dist/state-machine/index.js",
|
|
106
|
+
"./workflow": "./dist/workflow/index.js",
|
|
107
|
+
"./workflow/workflow.contracts": "./dist/workflow/workflow.contracts.js",
|
|
108
|
+
"./workflow/workflow.enum": "./dist/workflow/workflow.enum.js",
|
|
109
|
+
"./workflow/workflow.event": "./dist/workflow/workflow.event.js",
|
|
110
|
+
"./workflow/workflow.handler": "./dist/workflow/workflow.handler.js",
|
|
111
|
+
"./workflow/workflow.schema": "./dist/workflow/workflow.schema.js",
|
|
82
112
|
"./*": "./*"
|
|
83
113
|
}
|
|
84
114
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{ScalarTypeEnum as e,defineEnum as t,defineSchemaModel as n}from"@lssm/lib.schema";import{defineCommand as r,defineQuery as i}from"@lssm/lib.contracts/spec";const a=[`example.workflow-system`],o=t(`ApprovalStatus`,[`PENDING`,`APPROVED`,`REJECTED`,`DELEGATED`,`ESCALATED`,`WITHDRAWN`,`EXPIRED`]),s=t(`ApprovalDecision`,[`APPROVE`,`REJECT`,`REQUEST_CHANGES`,`DELEGATE`,`ABSTAIN`]),c=n({name:`ApprovalRequestModel`,description:`An approval request`,fields:{id:{type:e.String_unsecure(),isOptional:!1},workflowInstanceId:{type:e.String_unsecure(),isOptional:!1},stepExecutionId:{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},description:{type:e.String_unsecure(),isOptional:!0},status:{type:o,isOptional:!1},decision:{type:s,isOptional:!0},decisionComment:{type:e.String_unsecure(),isOptional:!0},decidedAt:{type:e.DateTime(),isOptional:!0},dueAt:{type:e.DateTime(),isOptional:!0},contextSnapshot:{type:e.JSON(),isOptional:!0},sequenceOrder:{type:e.Int_unsecure(),isOptional:!1},createdAt:{type:e.DateTime(),isOptional:!1}}}),l=n({name:`ApproveRejectInput`,description:`Input for approving or rejecting a request`,fields:{requestId:{type:e.String_unsecure(),isOptional:!1},decision:{type:s,isOptional:!1},comment:{type:e.String_unsecure(),isOptional:!0},data:{type:e.JSON(),isOptional:!0}}}),u=n({name:`DelegateInput`,description:`Input for delegating an approval`,fields:{requestId:{type:e.String_unsecure(),isOptional:!1},delegateTo:{type:e.String_unsecure(),isOptional:!1},reason:{type:e.String_unsecure(),isOptional:!0}}}),d=n({name:`AddCommentInput`,description:`Input for adding a comment to an approval`,fields:{requestId:{type:e.String_unsecure(),isOptional:!1},content:{type:e.NonEmptyString(),isOptional:!1},isInternal:{type:e.Boolean(),isOptional:!0}}}),f=n({name:`ApprovalCommentModel`,description:`A comment on an approval`,fields:{id:{type:e.String_unsecure(),isOptional:!1},approvalRequestId:{type:e.String_unsecure(),isOptional:!1},authorId:{type:e.String_unsecure(),isOptional:!1},content:{type:e.String_unsecure(),isOptional:!1},isInternal:{type:e.Boolean(),isOptional:!1},createdAt:{type:e.DateTime(),isOptional:!1}}}),p=n({name:`ListMyApprovalsInput`,description:`Input for listing approvals assigned to current user`,fields:{status:{type:o,isOptional:!0},limit:{type:e.Int_unsecure(),isOptional:!0,defaultValue:20},offset:{type:e.Int_unsecure(),isOptional:!0,defaultValue:0}}}),m=n({name:`ListMyApprovalsOutput`,description:`Output for listing approvals`,fields:{requests:{type:c,isArray:!0,isOptional:!1},total:{type:e.Int_unsecure(),isOptional:!1},pendingCount:{type:e.Int_unsecure(),isOptional:!1}}}),h=r({meta:{name:`workflow.approval.decide`,version:1,stability:`stable`,owners:[...a],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:l,output:c},policy:{auth:`user`},sideEffects:{emits:[{name:`workflow.approval.decided`,version:1,when:`Decision is made`,payload:c}],audit:[`workflow.approval.decided`]}}),g=r({meta:{name:`workflow.approval.delegate`,version:1,stability:`stable`,owners:[...a],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:u,output:c},policy:{auth:`user`},sideEffects:{emits:[{name:`workflow.approval.delegated`,version:1,when:`Approval is delegated`,payload:c}],audit:[`workflow.approval.delegated`]}}),_=r({meta:{name:`workflow.approval.comment.add`,version:1,stability:`stable`,owners:[...a],tags:[`workflow`,`approval`,`comment`],description:`Add a comment to an approval request.`,goal:`Allow discussion on approval requests.`,context:`Approval detail view.`},io:{input:d,output:f},policy:{auth:`user`},sideEffects:{emits:[{name:`workflow.approval.comment.added`,version:1,when:`Comment is added`,payload:f}]}}),v=i({meta:{name:`workflow.approval.list.mine`,version:1,stability:`stable`,owners:[...a],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:p,output:m},policy:{auth:`user`}}),y=n({name:`GetApprovalInput`,fields:{requestId:{type:e.String_unsecure(),isOptional:!1}}}),b=i({meta:{name:`workflow.approval.get`,version:1,stability:`stable`,owners:[...a],tags:[`workflow`,`approval`,`get`],description:`Get an approval request with details.`,goal:`View approval request details.`,context:`Approval detail view.`},io:{input:y,output:c},policy:{auth:`user`}});export{_ as AddApprovalCommentContract,d as AddCommentInputModel,f as ApprovalCommentModel,c as ApprovalRequestModel,l as ApproveRejectInputModel,g as DelegateApprovalContract,u as DelegateInputModel,b as GetApprovalContract,y as GetApprovalInputModel,v as ListMyApprovalsContract,p as ListMyApprovalsInputModel,m as ListMyApprovalsOutputModel,h as SubmitDecisionContract};
|
package/dist/contracts/index.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{AddStepContract as e,AddStepInputModel as t,CreateWorkflowContract as n,CreateWorkflowInputModel as r,GetWorkflowContract as i,GetWorkflowInputModel as a,ListWorkflowsContract as o,ListWorkflowsInputModel as s,ListWorkflowsOutputModel as c,PublishWorkflowContract as l,PublishWorkflowInputModel as u,UpdateWorkflowContract as d,UpdateWorkflowInputModel as f,WorkflowDefinitionModel as p,WorkflowStepModel as m}from"./workflow.js";import{CancelWorkflowContract as h,CancelWorkflowInputModel as g,GetInstanceContract as _,GetInstanceInputModel as v,ListInstancesContract as y,ListInstancesInputModel as b,ListInstancesOutputModel as x,PauseResumeInputModel as S,PauseWorkflowContract as C,ResumeWorkflowContract as w,StartWorkflowContract as T,StartWorkflowInputModel as E,TransitionInputModel as D,TransitionResultModel as O,TransitionWorkflowContract as k,WorkflowInstanceModel as A}from"./instance.js";import{AddApprovalCommentContract as j,AddCommentInputModel as M,ApprovalCommentModel as N,ApprovalRequestModel as P,ApproveRejectInputModel as F,DelegateApprovalContract as I,DelegateInputModel as L,GetApprovalContract as R,GetApprovalInputModel as z,ListMyApprovalsContract as B,ListMyApprovalsInputModel as V,ListMyApprovalsOutputModel as H,SubmitDecisionContract as U}from"./approval.js";export{j as AddApprovalCommentContract,M as AddCommentInputModel,e as AddStepContract,t as AddStepInputModel,N as ApprovalCommentModel,P as ApprovalRequestModel,F as ApproveRejectInputModel,h as CancelWorkflowContract,g as CancelWorkflowInputModel,n as CreateWorkflowContract,r as CreateWorkflowInputModel,I as DelegateApprovalContract,L as DelegateInputModel,R as GetApprovalContract,z as GetApprovalInputModel,_ as GetInstanceContract,v as GetInstanceInputModel,i as GetWorkflowContract,a as GetWorkflowInputModel,y as ListInstancesContract,b as ListInstancesInputModel,x as ListInstancesOutputModel,B as ListMyApprovalsContract,V as ListMyApprovalsInputModel,H as ListMyApprovalsOutputModel,o as ListWorkflowsContract,s as ListWorkflowsInputModel,c as ListWorkflowsOutputModel,S as PauseResumeInputModel,C as PauseWorkflowContract,l as PublishWorkflowContract,u as PublishWorkflowInputModel,w as ResumeWorkflowContract,T as StartWorkflowContract,E as StartWorkflowInputModel,U as SubmitDecisionContract,D as TransitionInputModel,O as TransitionResultModel,k as TransitionWorkflowContract,d as UpdateWorkflowContract,f as UpdateWorkflowInputModel,p as WorkflowDefinitionModel,A as WorkflowInstanceModel,m as WorkflowStepModel};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{ScalarTypeEnum as e,defineEnum as t,defineSchemaModel as n}from"@lssm/lib.schema";import{defineCommand as r,defineQuery as i}from"@lssm/lib.contracts/spec";const a=[`example.workflow-system`],o=t(`InstanceStatus`,[`PENDING`,`RUNNING`,`WAITING`,`PAUSED`,`COMPLETED`,`CANCELLED`,`FAILED`,`TIMEOUT`]),s=n({name:`WorkflowInstanceModel`,description:`A running workflow instance`,fields:{id:{type:e.String_unsecure(),isOptional:!1},workflowDefinitionId:{type:e.String_unsecure(),isOptional:!1},referenceId:{type:e.String_unsecure(),isOptional:!0},referenceType:{type:e.String_unsecure(),isOptional:!0},status:{type:o,isOptional:!1},currentStepId:{type:e.String_unsecure(),isOptional:!0},contextData:{type:e.JSON(),isOptional:!0},triggeredBy:{type:e.String_unsecure(),isOptional:!1},organizationId:{type:e.String_unsecure(),isOptional:!1},priority:{type:e.Int_unsecure(),isOptional:!1},dueAt:{type:e.DateTime(),isOptional:!0},outcome:{type:e.String_unsecure(),isOptional:!0},resultData:{type:e.JSON(),isOptional:!0},errorMessage:{type:e.String_unsecure(),isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1},startedAt:{type:e.DateTime(),isOptional:!0},completedAt:{type:e.DateTime(),isOptional:!0}}}),c=n({name:`StartWorkflowInput`,description:`Input for starting a workflow`,fields:{workflowKey:{type:e.NonEmptyString(),isOptional:!1},contextData:{type:e.JSON(),isOptional:!0},referenceId:{type:e.String_unsecure(),isOptional:!0},referenceType:{type:e.String_unsecure(),isOptional:!0},priority:{type:e.Int_unsecure(),isOptional:!0},dueAt:{type:e.DateTime(),isOptional:!0}}}),l=n({name:`TransitionInput`,description:`Input for transitioning a workflow`,fields:{instanceId:{type:e.String_unsecure(),isOptional:!1},action:{type:e.NonEmptyString(),isOptional:!1},data:{type:e.JSON(),isOptional:!0},comment:{type:e.String_unsecure(),isOptional:!0}}}),u=n({name:`TransitionResult`,description:`Result of a workflow transition`,fields:{success:{type:e.Boolean(),isOptional:!1},instance:{type:s,isOptional:!1},previousStepKey:{type:e.String_unsecure(),isOptional:!0},currentStepKey:{type:e.String_unsecure(),isOptional:!0},message:{type:e.String_unsecure(),isOptional:!0}}}),d=n({name:`PauseResumeInput`,description:`Input for pausing/resuming a workflow`,fields:{instanceId:{type:e.String_unsecure(),isOptional:!1},reason:{type:e.String_unsecure(),isOptional:!0}}}),f=n({name:`CancelWorkflowInput`,description:`Input for cancelling a workflow`,fields:{instanceId:{type:e.String_unsecure(),isOptional:!1},reason:{type:e.String_unsecure(),isOptional:!1}}}),p=n({name:`ListInstancesInput`,description:`Input for listing workflow instances`,fields:{workflowKey:{type:e.String_unsecure(),isOptional:!0},status:{type:o,isOptional:!0},referenceType:{type:e.String_unsecure(),isOptional:!0},referenceId:{type:e.String_unsecure(),isOptional:!0},triggeredBy:{type:e.String_unsecure(),isOptional:!0},limit:{type:e.Int_unsecure(),isOptional:!0,defaultValue:20},offset:{type:e.Int_unsecure(),isOptional:!0,defaultValue:0}}}),m=n({name:`ListInstancesOutput`,description:`Output for listing workflow instances`,fields:{instances:{type:s,isArray:!0,isOptional:!1},total:{type:e.Int_unsecure(),isOptional:!1}}}),h=r({meta:{name:`workflow.instance.start`,version:1,stability:`stable`,owners:[...a],tags:[`workflow`,`instance`,`start`],description:`Start a new workflow instance.`,goal:`Initiate a workflow for a business process.`,context:`Order creation, request submission, etc.`},io:{input:c,output:s},policy:{auth:`user`},sideEffects:{emits:[{name:`workflow.instance.started`,version:1,when:`Workflow starts`,payload:s},{name:`workflow.step.entered`,version:1,when:`First step entered`,payload:s}],audit:[`workflow.instance.started`]}}),g=r({meta:{name:`workflow.instance.transition`,version:1,stability:`stable`,owners:[...a],tags:[`workflow`,`instance`,`transition`,`state-machine`],description:`Transition a workflow instance to the next step.`,goal:`Move workflow forward based on action.`,context:`Task completion, approval decisions.`},io:{input:l,output:u},policy:{auth:`user`},sideEffects:{emits:[{name:`workflow.step.exited`,version:1,when:`Step is exited`,payload:s},{name:`workflow.step.entered`,version:1,when:`New step is entered`,payload:s},{name:`workflow.instance.completed`,version:1,when:`Workflow reaches end`,payload:s}],audit:[`workflow.instance.transitioned`]}}),_=r({meta:{name:`workflow.instance.pause`,version:1,stability:`stable`,owners:[...a],tags:[`workflow`,`instance`,`pause`],description:`Pause a running workflow instance.`,goal:`Temporarily halt workflow execution.`,context:`Administrative action, emergency stop.`},io:{input:d,output:s},policy:{auth:`user`},sideEffects:{emits:[{name:`workflow.instance.paused`,version:1,when:`Workflow is paused`,payload:s}],audit:[`workflow.instance.paused`]}}),v=r({meta:{name:`workflow.instance.resume`,version:1,stability:`stable`,owners:[...a],tags:[`workflow`,`instance`,`resume`],description:`Resume a paused workflow instance.`,goal:`Continue workflow execution.`,context:`Administrative action.`},io:{input:d,output:s},policy:{auth:`user`},sideEffects:{emits:[{name:`workflow.instance.resumed`,version:1,when:`Workflow is resumed`,payload:s}],audit:[`workflow.instance.resumed`]}}),y=r({meta:{name:`workflow.instance.cancel`,version:1,stability:`stable`,owners:[...a],tags:[`workflow`,`instance`,`cancel`],description:`Cancel a workflow instance.`,goal:`Terminate workflow without completion.`,context:`User request, system cancellation.`},io:{input:f,output:s},policy:{auth:`user`},sideEffects:{emits:[{name:`workflow.instance.cancelled`,version:1,when:`Workflow is cancelled`,payload:s}],audit:[`workflow.instance.cancelled`]}}),b=i({meta:{name:`workflow.instance.list`,version:1,stability:`stable`,owners:[...a],tags:[`workflow`,`instance`,`list`],description:`List workflow instances with filtering.`,goal:`Browse and search running workflows.`,context:`Dashboard, monitoring.`},io:{input:p,output:m},policy:{auth:`user`}}),x=n({name:`GetInstanceInput`,fields:{instanceId:{type:e.String_unsecure(),isOptional:!1}}}),S=i({meta:{name:`workflow.instance.get`,version:1,stability:`stable`,owners:[...a],tags:[`workflow`,`instance`,`get`],description:`Get a workflow instance with details.`,goal:`View workflow instance details.`,context:`Instance detail view.`},io:{input:x,output:s},policy:{auth:`user`}});export{y as CancelWorkflowContract,f as CancelWorkflowInputModel,S as GetInstanceContract,x as GetInstanceInputModel,b as ListInstancesContract,p as ListInstancesInputModel,m as ListInstancesOutputModel,d as PauseResumeInputModel,_ as PauseWorkflowContract,v as ResumeWorkflowContract,h as StartWorkflowContract,c as StartWorkflowInputModel,l as TransitionInputModel,u as TransitionResultModel,g as TransitionWorkflowContract,s as WorkflowInstanceModel};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{ScalarTypeEnum as e,defineEnum as t,defineSchemaModel as n}from"@lssm/lib.schema";import{defineCommand as r,defineQuery as i}from"@lssm/lib.contracts/spec";const a=[`example.workflow-system`],o=t(`WorkflowStatus`,[`DRAFT`,`ACTIVE`,`DEPRECATED`,`ARCHIVED`]),s=t(`WorkflowTriggerType`,[`MANUAL`,`EVENT`,`SCHEDULED`,`API`]),c=t(`StepType`,[`START`,`APPROVAL`,`TASK`,`CONDITION`,`PARALLEL`,`WAIT`,`ACTION`,`END`]),l=t(`ApprovalMode`,[`ANY`,`ALL`,`MAJORITY`,`SEQUENTIAL`]),u=n({name:`WorkflowStepModel`,description:`A step in a workflow definition`,fields:{id:{type:e.String_unsecure(),isOptional:!1},key:{type:e.String_unsecure(),isOptional:!1},name:{type:e.String_unsecure(),isOptional:!1},description:{type:e.String_unsecure(),isOptional:!0},type:{type:c,isOptional:!1},position:{type:e.Int_unsecure(),isOptional:!1},transitions:{type:e.JSON(),isOptional:!1},approvalMode:{type:l,isOptional:!0},approverRoles:{type:e.String_unsecure(),isArray:!0,isOptional:!0}}}),d=n({name:`WorkflowDefinitionModel`,description:`A workflow definition`,fields:{id:{type:e.String_unsecure(),isOptional:!1},name:{type:e.String_unsecure(),isOptional:!1},key:{type:e.String_unsecure(),isOptional:!1},description:{type:e.String_unsecure(),isOptional:!0},version:{type:e.Int_unsecure(),isOptional:!1},status:{type:o,isOptional:!1},triggerType:{type:s,isOptional:!1},initialStepId:{type:e.String_unsecure(),isOptional:!0},featureFlagKey:{type:e.String_unsecure(),isOptional:!0},organizationId:{type:e.String_unsecure(),isOptional:!1},createdAt:{type:e.DateTime(),isOptional:!1},updatedAt:{type:e.DateTime(),isOptional:!1},steps:{type:u,isArray:!0,isOptional:!0}}}),f=n({name:`CreateWorkflowInput`,description:`Input for creating a workflow definition`,fields:{name:{type:e.NonEmptyString(),isOptional:!1},key:{type:e.NonEmptyString(),isOptional:!1},description:{type:e.String_unsecure(),isOptional:!0},triggerType:{type:s,isOptional:!0},triggerConfig:{type:e.JSON(),isOptional:!0},featureFlagKey:{type:e.String_unsecure(),isOptional:!0},settings:{type:e.JSON(),isOptional:!0}}}),p=n({name:`UpdateWorkflowInput`,description:`Input for updating a workflow definition`,fields:{workflowId:{type:e.String_unsecure(),isOptional:!1},name:{type:e.String_unsecure(),isOptional:!0},description:{type:e.String_unsecure(),isOptional:!0},triggerType:{type:s,isOptional:!0},triggerConfig:{type:e.JSON(),isOptional:!0},featureFlagKey:{type:e.String_unsecure(),isOptional:!0},settings:{type:e.JSON(),isOptional:!0}}}),m=n({name:`AddStepInput`,description:`Input for adding a step to a workflow`,fields:{workflowId:{type:e.String_unsecure(),isOptional:!1},key:{type:e.NonEmptyString(),isOptional:!1},name:{type:e.NonEmptyString(),isOptional:!1},description:{type:e.String_unsecure(),isOptional:!0},type:{type:c,isOptional:!1},position:{type:e.Int_unsecure(),isOptional:!0},transitions:{type:e.JSON(),isOptional:!1},approvalMode:{type:l,isOptional:!0},approverRoles:{type:e.String_unsecure(),isArray:!0,isOptional:!0},approverUserIds:{type:e.String_unsecure(),isArray:!0,isOptional:!0},timeoutSeconds:{type:e.Int_unsecure(),isOptional:!0},slaSeconds:{type:e.Int_unsecure(),isOptional:!0}}}),h=n({name:`PublishWorkflowInput`,description:`Input for publishing a workflow`,fields:{workflowId:{type:e.String_unsecure(),isOptional:!1}}}),g=n({name:`ListWorkflowsInput`,description:`Input for listing workflows`,fields:{status:{type:o,isOptional:!0},search:{type:e.String_unsecure(),isOptional:!0},limit:{type:e.Int_unsecure(),isOptional:!0,defaultValue:20},offset:{type:e.Int_unsecure(),isOptional:!0,defaultValue:0}}}),_=n({name:`ListWorkflowsOutput`,description:`Output for listing workflows`,fields:{workflows:{type:d,isArray:!0,isOptional:!1},total:{type:e.Int_unsecure(),isOptional:!1}}}),v=r({meta:{name:`workflow.definition.create`,version:1,stability:`stable`,owners:[...a],tags:[`workflow`,`definition`,`create`],description:`Create a new workflow definition.`,goal:`Allow users to define new workflow blueprints.`,context:`Workflow designer, admin panel.`},io:{input:f,output:d},policy:{auth:`user`},sideEffects:{emits:[{name:`workflow.definition.created`,version:1,when:`Workflow is created`,payload:d}],audit:[`workflow.definition.created`]}}),y=r({meta:{name:`workflow.definition.update`,version:1,stability:`stable`,owners:[...a],tags:[`workflow`,`definition`,`update`],description:`Update an existing workflow definition.`,goal:`Allow users to modify workflow blueprints.`,context:`Workflow designer.`},io:{input:p,output:d},policy:{auth:`user`},sideEffects:{emits:[{name:`workflow.definition.updated`,version:1,when:`Workflow is updated`,payload:d}],audit:[`workflow.definition.updated`]}}),b=r({meta:{name:`workflow.step.add`,version:1,stability:`stable`,owners:[...a],tags:[`workflow`,`step`,`add`],description:`Add a step to a workflow definition.`,goal:`Build workflow structure step by step.`,context:`Workflow designer.`},io:{input:m,output:u},policy:{auth:`user`},sideEffects:{emits:[{name:`workflow.step.added`,version:1,when:`Step is added`,payload:u}],audit:[`workflow.step.added`]}}),x=r({meta:{name:`workflow.definition.publish`,version:1,stability:`stable`,owners:[...a],tags:[`workflow`,`definition`,`publish`],description:`Publish a workflow definition to make it available for use.`,goal:`Activate workflow for production use.`,context:`Workflow designer, deployment.`},io:{input:h,output:d},policy:{auth:`user`},sideEffects:{emits:[{name:`workflow.definition.published`,version:1,when:`Workflow is published`,payload:d}],audit:[`workflow.definition.published`]}}),S=i({meta:{name:`workflow.definition.list`,version:1,stability:`stable`,owners:[...a],tags:[`workflow`,`definition`,`list`],description:`List workflow definitions with filtering.`,goal:`Browse and search available workflows.`,context:`Workflow list, search.`},io:{input:g,output:_},policy:{auth:`user`}}),C=n({name:`GetWorkflowInput`,fields:{workflowId:{type:e.String_unsecure(),isOptional:!1}}}),w=i({meta:{name:`workflow.definition.get`,version:1,stability:`stable`,owners:[...a],tags:[`workflow`,`definition`,`get`],description:`Get a workflow definition with all steps.`,goal:`View workflow details.`,context:`Workflow designer, detail view.`},io:{input:C,output:d},policy:{auth:`user`}});export{b as AddStepContract,m as AddStepInputModel,v as CreateWorkflowContract,f as CreateWorkflowInputModel,w as GetWorkflowContract,C as GetWorkflowInputModel,S as ListWorkflowsContract,g as ListWorkflowsInputModel,_ as ListWorkflowsOutputModel,x as PublishWorkflowContract,h as PublishWorkflowInputModel,y as UpdateWorkflowContract,p as UpdateWorkflowInputModel,d as WorkflowDefinitionModel,u as WorkflowStepModel};
|
package/dist/events.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{ScalarTypeEnum as e,defineSchemaModel as t}from"@lssm/lib.schema";import{defineEvent as n}from"@lssm/lib.contracts";const r=t({name:`WorkflowDefinitionEventPayload`,description:`Payload for workflow definition events`,fields:{workflowId:{type:e.String_unsecure(),isOptional:!1},key:{type:e.String_unsecure(),isOptional:!1},name:{type:e.String_unsecure(),isOptional:!1},version:{type:e.Int_unsecure(),isOptional:!1},organizationId:{type:e.String_unsecure(),isOptional:!1},createdBy:{type:e.String_unsecure(),isOptional:!1},timestamp:{type:e.DateTime(),isOptional:!1}}}),i=t({name:`StepAddedEventPayload`,description:`Payload when a step is added`,fields:{stepId:{type:e.String_unsecure(),isOptional:!1},workflowId:{type:e.String_unsecure(),isOptional:!1},stepKey:{type:e.String_unsecure(),isOptional:!1},stepType:{type:e.String_unsecure(),isOptional:!1},position:{type:e.Int_unsecure(),isOptional:!1},timestamp:{type:e.DateTime(),isOptional:!1}}}),a=t({name:`InstanceEventPayload`,description:`Base payload for instance events`,fields:{instanceId:{type:e.String_unsecure(),isOptional:!1},workflowId:{type:e.String_unsecure(),isOptional:!1},workflowKey:{type:e.String_unsecure(),isOptional:!1},status:{type:e.String_unsecure(),isOptional:!1},referenceId:{type:e.String_unsecure(),isOptional:!0},referenceType:{type:e.String_unsecure(),isOptional:!0},triggeredBy:{type:e.String_unsecure(),isOptional:!1},organizationId:{type:e.String_unsecure(),isOptional:!1},timestamp:{type:e.DateTime(),isOptional:!1}}}),o=t({name:`StepTransitionEventPayload`,description:`Payload for step transition events`,fields:{instanceId:{type:e.String_unsecure(),isOptional:!1},workflowId:{type:e.String_unsecure(),isOptional:!1},fromStepKey:{type:e.String_unsecure(),isOptional:!0},toStepKey:{type:e.String_unsecure(),isOptional:!1},action:{type:e.String_unsecure(),isOptional:!0},executedBy:{type:e.String_unsecure(),isOptional:!1},timestamp:{type:e.DateTime(),isOptional:!1}}}),s=t({name:`InstanceCompletedEventPayload`,description:`Payload when instance completes`,fields:{instanceId:{type:e.String_unsecure(),isOptional:!1},workflowId:{type:e.String_unsecure(),isOptional:!1},workflowKey:{type:e.String_unsecure(),isOptional:!1},outcome:{type:e.String_unsecure(),isOptional:!1},referenceId:{type:e.String_unsecure(),isOptional:!0},referenceType:{type:e.String_unsecure(),isOptional:!0},duration:{type:e.Int_unsecure(),isOptional:!1},timestamp:{type:e.DateTime(),isOptional:!1}}}),c=t({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}}}),l=t({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}}}),u=t({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}}}),d=t({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}}}),f=n({name:`workflow.definition.created`,version:1,description:`A new workflow definition has been created.`,payload:r}),p=n({name:`workflow.definition.updated`,version:1,description:`A workflow definition has been updated.`,payload:r}),m=n({name:`workflow.definition.published`,version:1,description:`A workflow definition has been published and is now active.`,payload:r}),h=n({name:`workflow.step.added`,version:1,description:`A step has been added to a workflow definition.`,payload:i}),g=n({name:`workflow.instance.started`,version:1,description:`A new workflow instance has been started.`,payload:a}),_=n({name:`workflow.step.entered`,version:1,description:`A workflow instance has entered a new step.`,payload:o}),v=n({name:`workflow.step.exited`,version:1,description:`A workflow instance has exited a step.`,payload:o}),y=n({name:`workflow.instance.completed`,version:1,description:`A workflow instance has completed.`,payload:s}),b=n({name:`workflow.instance.cancelled`,version:1,description:`A workflow instance has been cancelled.`,payload:a}),x=n({name:`workflow.instance.paused`,version:1,description:`A workflow instance has been paused.`,payload:a}),S=n({name:`workflow.instance.resumed`,version:1,description:`A workflow instance has been resumed.`,payload:a}),C=n({name:`workflow.instance.failed`,version:1,description:`A workflow instance has failed.`,payload:a}),w=n({name:`workflow.instance.timeout`,version:1,description:`A workflow instance has timed out.`,payload:a}),T=n({name:`workflow.approval.requested`,version:1,description:`An approval has been requested.`,payload:c}),E=n({name:`workflow.approval.decided`,version:1,description:`An approval decision has been made.`,payload:l}),D=n({name:`workflow.approval.delegated`,version:1,description:`An approval has been delegated.`,payload:u}),O=n({name:`workflow.approval.escalated`,version:1,description:`An approval has been escalated.`,payload:d}),k={WorkflowCreatedEvent:f,WorkflowUpdatedEvent:p,WorkflowPublishedEvent:m,StepAddedEvent:h,InstanceStartedEvent:g,StepEnteredEvent:_,StepExitedEvent:v,InstanceCompletedEvent:y,InstanceCancelledEvent:b,InstancePausedEvent:x,InstanceResumedEvent:S,InstanceFailedEvent:C,InstanceTimedOutEvent:w,ApprovalRequestedEvent:T,ApprovalDecidedEvent:E,ApprovalDelegatedEvent:D,ApprovalEscalatedEvent:O};export{E as ApprovalDecidedEvent,D as ApprovalDelegatedEvent,O as ApprovalEscalatedEvent,T as ApprovalRequestedEvent,b as InstanceCancelledEvent,y as InstanceCompletedEvent,C as InstanceFailedEvent,x as InstancePausedEvent,S as InstanceResumedEvent,g as InstanceStartedEvent,w as InstanceTimedOutEvent,h as StepAddedEvent,_ as StepEnteredEvent,v as StepExitedEvent,f as WorkflowCreatedEvent,m as WorkflowPublishedEvent,k as WorkflowSystemEvents,p as WorkflowUpdatedEvent};
|
package/dist/handlers/index.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{buildStateMachineDefinition as e,createStateMachineEngine as t}from"../state-machine/index.js";const n={workflows:new Map,steps:new Map,instances:new Map,approvals:new Map,stepExecutions:new Map};async function r(e,t){let r=`wf_${Date.now()}`,i=new Date,a={id:r,key:e.key,name:e.name,description:e.description,version:1,status:`DRAFT`,triggerType:e.triggerType??`MANUAL`,featureFlagKey:e.featureFlagKey,organizationId:t.organizationId,createdBy:t.userId,createdAt:i,updatedAt:i};return n.workflows.set(r,a),a}async function i(e,t){let r=`step_${Date.now()}`,i=new Date,a=Array.from(n.steps.values()).filter(t=>t.workflowDefinitionId===e.workflowId),o=e.position??a.length,s={id:r,workflowDefinitionId:e.workflowId,key:e.key,name:e.name,description:e.description,type:e.type,position:o,transitions:e.transitions,approvalMode:e.approvalMode,approverRoles:e.approverRoles??[],timeoutSeconds:e.timeoutSeconds,createdAt:i,updatedAt:i};if(n.steps.set(r,s),a.length===0||e.type===`START`){let t=n.workflows.get(e.workflowId);t&&(t.initialStepId=r,t.updatedAt=i)}return s}async function a(e,t){let r=n.workflows.get(e.workflowId);if(!r)throw Error(`Workflow ${e.workflowId} not found`);let i=new Date;return r.status=`ACTIVE`,r.publishedAt=i,r.updatedAt=i,r}async function o(e,t){let r=Array.from(n.workflows.values()).find(n=>n.key===e.workflowKey&&n.status===`ACTIVE`&&n.organizationId===t.organizationId);if(!r)throw Error(`Active workflow ${e.workflowKey} not found`);let i=`inst_${Date.now()}`,a=new Date,o={id:i,workflowDefinitionId:r.id,referenceId:e.referenceId,referenceType:e.referenceType,status:`RUNNING`,currentStepId:r.initialStepId,contextData:e.contextData??{},triggeredBy:t.userId,organizationId:t.organizationId,priority:e.priority??0,dueAt:e.dueAt,createdAt:a,updatedAt:a,startedAt:a};if(n.instances.set(i,o),r.initialStepId){let e=n.steps.get(r.initialStepId);e?.type===`APPROVAL`&&(o.status=`WAITING`,await c(o,e,t))}return o}async function s(r,i){let a=n.instances.get(r.instanceId);if(!a)throw Error(`Instance ${r.instanceId} not found`);let o=n.workflows.get(a.workflowDefinitionId);if(!o)throw Error(`Workflow ${a.workflowDefinitionId} not found`);let s=Array.from(n.steps.values()).filter(e=>e.workflowDefinitionId===o.id),l=e({key:o.key,name:o.name,version:o.version,initialStepId:o.initialStepId??null},s),u=s.find(e=>e.id===a.currentStepId),d={currentStepKey:u?.key??``,status:a.status,contextData:a.contextData,history:[]},f={userId:i.userId,userRoles:i.userRoles,data:r.data},p=t().transition(l,d,r.action,f);if(!p.success)return{success:!1,instance:a,message:p.error};let m=u?.key,h=s.find(e=>e.key===p.currentStepKey);return a.currentStepId=h?.id,a.status=p.status,a.contextData={...a.contextData,...r.data},a.updatedAt=new Date,p.status===`COMPLETED`&&(a.completedAt=new Date,a.outcome=r.action),h?.type===`APPROVAL`&&(a.status=`WAITING`,await c(a,h,i)),{success:!0,instance:a,previousStepKey:m,currentStepKey:p.currentStepKey??void 0}}async function c(e,t,r){let i=new Date;for(let r=0;r<t.approverRoles.length;r++){let a=t.approverRoles[r],o=`approval_${Date.now()}_${r}`,s={id:o,workflowInstanceId:e.id,stepExecutionId:`exec_${e.id}_${t.id}`,approverId:`user_${a}`,approverRole:a,title:`Approval required for ${t.name}`,description:t.description,status:`PENDING`,contextSnapshot:e.contextData,sequenceOrder:r,createdAt:i,updatedAt:i};n.approvals.set(o,s)}}async function l(e,t){let r=n.approvals.get(e.requestId);if(!r)throw Error(`Approval request ${e.requestId} not found`);if(r.approverId!==t.userId&&!t.userRoles.includes(r.approverRole??``))throw Error(`User is not authorized to make this decision`);let i=new Date;return r.decision=e.decision,r.decisionComment=e.comment,r.decidedAt=i,r.updatedAt=i,e.decision===`APPROVE`?(r.status=`APPROVED`,await s({instanceId:r.workflowInstanceId,action:`approve`,data:e.data,comment:e.comment},t)):e.decision===`REJECT`&&(r.status=`REJECTED`,await s({instanceId:r.workflowInstanceId,action:`reject`,data:e.data,comment:e.comment},t)),r}async function u(e,t){let r=Array.from(n.approvals.values()).filter(e=>e.approverId===t.userId||t.userRoles.includes(e.approverRole??``)),i=r.filter(e=>e.status===`PENDING`).length;e.status&&(r=r.filter(t=>t.status===e.status));let a=r.length,o=e.offset??0,s=e.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{i as handleAddStep,r as handleCreateWorkflow,u as handleListMyApprovals,a as handlePublishWorkflow,o as handleStartWorkflow,l as handleSubmitDecision,s as handleTransitionWorkflow,n as mockDataStore};
|