@rytass/bpm-core-nestjs-module 0.13.5 → 0.14.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.
- package/CHANGELOG.md +55 -0
- package/package.json +2 -2
- package/src/lib/migrations/0000000025000-task-candidate-sequence.d.ts +21 -0
- package/src/lib/migrations/0000000025000-task-candidate-sequence.js +50 -0
- package/src/lib/migrations/0000000025000-task-candidate-sequence.js.map +1 -0
- package/src/lib/migrations/index.d.ts +1 -0
- package/src/lib/migrations/index.js +3 -0
- package/src/lib/migrations/index.js.map +1 -1
- package/src/lib/notification/notification.service.js +2 -2
- package/src/lib/notification/notification.service.js.map +1 -1
- package/src/lib/template/workflow-definition.validator.js +26 -1
- package/src/lib/template/workflow-definition.validator.js.map +1 -1
- package/src/lib/workflow-engine/task-candidate.entity.d.ts +2 -0
- package/src/lib/workflow-engine/task-candidate.entity.js +5 -0
- package/src/lib/workflow-engine/task-candidate.entity.js.map +1 -1
- package/src/lib/workflow-engine/task.entity.d.ts +11 -0
- package/src/lib/workflow-engine/task.entity.js +15 -0
- package/src/lib/workflow-engine/task.entity.js.map +1 -1
- package/src/lib/workflow-engine/workflow-engine.enums.d.ts +5 -1
- package/src/lib/workflow-engine/workflow-engine.enums.js +4 -0
- package/src/lib/workflow-engine/workflow-engine.enums.js.map +1 -1
- package/src/lib/workflow-engine/workflow-engine.service.d.ts +60 -1
- package/src/lib/workflow-engine/workflow-engine.service.js +678 -49
- package/src/lib/workflow-engine/workflow-engine.service.js.map +1 -1
|
@@ -34,7 +34,9 @@ export declare enum TaskCandidateStatusEnum {
|
|
|
34
34
|
COMPLETED = "COMPLETED",
|
|
35
35
|
PENDING = "PENDING",
|
|
36
36
|
SUPERSEDED = "SUPERSEDED",
|
|
37
|
-
TRANSFERRED = "TRANSFERRED"
|
|
37
|
+
TRANSFERRED = "TRANSFERRED",
|
|
38
|
+
/** SEQUENTIAL task, not this candidate's turn yet. */
|
|
39
|
+
WAITING = "WAITING"
|
|
38
40
|
}
|
|
39
41
|
export declare enum TaskDecisionActionEnum {
|
|
40
42
|
APPROVED = "APPROVED",
|
|
@@ -54,6 +56,8 @@ export declare enum ActivityLogEventTypeEnum {
|
|
|
54
56
|
SERVICE_TASK_EXECUTED = "SERVICE_TASK_EXECUTED",
|
|
55
57
|
SERVICE_TASK_FAILED = "SERVICE_TASK_FAILED",
|
|
56
58
|
SLA_TRIGGERED = "SLA_TRIGGERED",
|
|
59
|
+
/** A SEQUENTIAL task passed to its next candidate. */
|
|
60
|
+
TASK_CANDIDATE_ACTIVATED = "TASK_CANDIDATE_ACTIVATED",
|
|
57
61
|
TASK_CREATED = "TASK_CREATED",
|
|
58
62
|
TASK_DECIDED = "TASK_DECIDED",
|
|
59
63
|
TOKEN_ADVANCED = "TOKEN_ADVANCED",
|
|
@@ -45,6 +45,8 @@ var TaskCandidateStatusEnum;
|
|
|
45
45
|
TaskCandidateStatusEnum["PENDING"] = "PENDING";
|
|
46
46
|
TaskCandidateStatusEnum["SUPERSEDED"] = "SUPERSEDED";
|
|
47
47
|
TaskCandidateStatusEnum["TRANSFERRED"] = "TRANSFERRED";
|
|
48
|
+
/** SEQUENTIAL task, not this candidate's turn yet. */
|
|
49
|
+
TaskCandidateStatusEnum["WAITING"] = "WAITING";
|
|
48
50
|
})(TaskCandidateStatusEnum || (exports.TaskCandidateStatusEnum = TaskCandidateStatusEnum = {}));
|
|
49
51
|
var TaskDecisionActionEnum;
|
|
50
52
|
(function (TaskDecisionActionEnum) {
|
|
@@ -66,6 +68,8 @@ var ActivityLogEventTypeEnum;
|
|
|
66
68
|
ActivityLogEventTypeEnum["SERVICE_TASK_EXECUTED"] = "SERVICE_TASK_EXECUTED";
|
|
67
69
|
ActivityLogEventTypeEnum["SERVICE_TASK_FAILED"] = "SERVICE_TASK_FAILED";
|
|
68
70
|
ActivityLogEventTypeEnum["SLA_TRIGGERED"] = "SLA_TRIGGERED";
|
|
71
|
+
/** A SEQUENTIAL task passed to its next candidate. */
|
|
72
|
+
ActivityLogEventTypeEnum["TASK_CANDIDATE_ACTIVATED"] = "TASK_CANDIDATE_ACTIVATED";
|
|
69
73
|
ActivityLogEventTypeEnum["TASK_CREATED"] = "TASK_CREATED";
|
|
70
74
|
ActivityLogEventTypeEnum["TASK_DECIDED"] = "TASK_DECIDED";
|
|
71
75
|
ActivityLogEventTypeEnum["TOKEN_ADVANCED"] = "TOKEN_ADVANCED";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-engine.enums.js","sourceRoot":"","sources":["../../../../../../libs/bpm-core/src/lib/workflow-engine/workflow-engine.enums.ts"],"names":[],"mappings":";;;AAAA,6CAAmD;AAEnD,IAAY,yBAQX;AARD,WAAY,yBAAyB;IACnC,kDAAqB,CAAA;IACrB,oDAAuB,CAAA;IACvB,4CAAe,CAAA;IACf,gDAAmB,CAAA;IACnB,kDAAqB,CAAA;IACrB,kDAAqB,CAAA;IACrB,gDAAmB,CAAA;AACrB,CAAC,EARW,yBAAyB,yCAAzB,yBAAyB,QAQpC;AAED,IAAY,4BAIX;AAJD,WAAY,4BAA4B;IACtC,2CAAW,CAAA;IACX,yCAAS,CAAA;IACT,6CAAa,CAAA;AACf,CAAC,EAJW,4BAA4B,4CAA5B,4BAA4B,QAIvC;AAED,IAAY,uBAIX;AAJD,WAAY,uBAAuB;IACjC,4CAAiB,CAAA;IACjB,gDAAqB,CAAA;IACrB,8CAAmB,CAAA;AACrB,CAAC,EAJW,uBAAuB,uCAAvB,uBAAuB,QAIlC;AAED,IAAY,cAMX;AAND,WAAY,cAAc;IACxB,yCAAuB,CAAA;IACvB,yCAAuB,CAAA;IACvB,6CAA2B,CAAA;IAC3B,qCAAmB,CAAA;IACnB,6CAA2B,CAAA;AAC7B,CAAC,EANW,cAAc,8BAAd,cAAc,QAMzB;AAED,IAAY,sBAGX;AAHD,WAAY,sBAAsB;IAChC,6DAAmC,CAAA;IACnC,yDAA+B,CAAA;AACjC,CAAC,EAHW,sBAAsB,sCAAtB,sBAAsB,QAGjC;AAED,IAAY,
|
|
1
|
+
{"version":3,"file":"workflow-engine.enums.js","sourceRoot":"","sources":["../../../../../../libs/bpm-core/src/lib/workflow-engine/workflow-engine.enums.ts"],"names":[],"mappings":"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"}
|
|
@@ -129,9 +129,26 @@ export declare class WorkflowEngineService {
|
|
|
129
129
|
private loadAdhocOperationContext;
|
|
130
130
|
private recordAdhocDirectiveActivity;
|
|
131
131
|
private createAdhocTaskForDirective;
|
|
132
|
+
private resolveAdhocTaskCandidates;
|
|
132
133
|
private spawnCountersignTasksForNode;
|
|
133
134
|
private hasOpenTasksForTokenNode;
|
|
134
135
|
private handleAdhocPreApprovalRejection;
|
|
136
|
+
/**
|
|
137
|
+
* Follows a TRANSFERRED task to the task that replaced it, repeatedly, and
|
|
138
|
+
* returns the last one reached. A transfer leaves no pointer on either task
|
|
139
|
+
* row; the link is the `transferredFromTaskId` in the payload of the
|
|
140
|
+
* TASK_CREATED activity written for the replacement. When the trail stops
|
|
141
|
+
* (no such activity, or its task is gone) the last task reached is returned,
|
|
142
|
+
* so a caller sees the transferred row exactly as it did before.
|
|
143
|
+
*/
|
|
144
|
+
private readTransferSuccessorTask;
|
|
145
|
+
/**
|
|
146
|
+
* The requester's candidate row on a SEQUENTIAL origin task. A task that was
|
|
147
|
+
* transferred mid-order continues as a replacement that carries only the
|
|
148
|
+
* candidates still to sign, so a requester who already signed is found on an
|
|
149
|
+
* earlier task of the transfer chain instead.
|
|
150
|
+
*/
|
|
151
|
+
private readSequentialRequesterCandidate;
|
|
135
152
|
private readOpenTaskRecipientMemberIds;
|
|
136
153
|
private dispatchAdhocStageNotifications;
|
|
137
154
|
private dispatchAdhocCompletionNotifications;
|
|
@@ -142,6 +159,14 @@ export declare class WorkflowEngineService {
|
|
|
142
159
|
private simulateWorkflowPath;
|
|
143
160
|
private readDryRunAvailableOutgoingEdges;
|
|
144
161
|
private evaluateDryRunEdge;
|
|
162
|
+
/**
|
|
163
|
+
* The dry-run assignee of a user task. Only resolvers whose dry run yields
|
|
164
|
+
* real member ids (DIRECT, DYNAMIC_FORM, EXPRESSION and ORG_MANAGER, which
|
|
165
|
+
* reads the initiator snapshot) can be checked against the initiator; the
|
|
166
|
+
* others resolve to placeholders and are left as they are.
|
|
167
|
+
*/
|
|
168
|
+
private resolveDryRunAssignment;
|
|
169
|
+
private readDryRunMemberIds;
|
|
145
170
|
private resolveDryRunAssigneeMemberId;
|
|
146
171
|
getApprovalInstance(id: string, scope?: WorkflowReadScope): Promise<ApprovalInstanceEntity>;
|
|
147
172
|
listApprovalInstances(scope?: WorkflowReadScope, options?: ListApprovalInstancesOptions): Promise<readonly ApprovalInstanceEntity[]>;
|
|
@@ -183,6 +208,8 @@ export declare class WorkflowEngineService {
|
|
|
183
208
|
private advanceTokenToOutgoingNodes;
|
|
184
209
|
private isNodeEntryConditionMet;
|
|
185
210
|
private skipNodeByEntryCondition;
|
|
211
|
+
private skipNodeByInitiatorExclusion;
|
|
212
|
+
private skipNode;
|
|
186
213
|
private readAvailableOutgoingEdges;
|
|
187
214
|
private evaluateWorkflowEdge;
|
|
188
215
|
private readLastDecisionContext;
|
|
@@ -190,13 +217,45 @@ export declare class WorkflowEngineService {
|
|
|
190
217
|
private forkTokenAlongEdges;
|
|
191
218
|
private completeTokenAtEndNode;
|
|
192
219
|
private createUserTaskForToken;
|
|
220
|
+
/**
|
|
221
|
+
* Hands a SEQUENTIAL task to the lowest-`sequence` candidate still WAITING.
|
|
222
|
+
* A task without a WAITING candidate (every other policy, and SEQUENTIAL
|
|
223
|
+
* tasks created before candidates were ordered) is left alone.
|
|
224
|
+
*/
|
|
225
|
+
private activateNextSequentialCandidate;
|
|
226
|
+
/**
|
|
227
|
+
* Re-resolves the delegation of a candidate whose turn has come. When the
|
|
228
|
+
* delegate already holds another candidate row on the task, the stored values
|
|
229
|
+
* are kept: (task_id, member_id) is unique, and that member signs from the
|
|
230
|
+
* row they already have. On a node that excludes the initiator the stored
|
|
231
|
+
* values are kept as well when the new delegation path would run through the
|
|
232
|
+
* initiator: creation already filtered such paths out, and a delegation added
|
|
233
|
+
* while the candidate waited must not bring them back.
|
|
234
|
+
*/
|
|
235
|
+
private resolveActivationDelegation;
|
|
193
236
|
private markTaskCandidateDecision;
|
|
194
237
|
private transferTask;
|
|
238
|
+
/**
|
|
239
|
+
* Resolves who gets the node's task. `null` means the node asked to be
|
|
240
|
+
* skipped (`excludeInitiator.whenEmpty = SKIP_NODE`) because the initiator
|
|
241
|
+
* was the only approver — the sole caller creates no task and advances the
|
|
242
|
+
* token instead.
|
|
243
|
+
*/
|
|
195
244
|
private resolveRuntimeTaskCandidates;
|
|
196
|
-
private
|
|
245
|
+
private resolveInitiatorManagerReplacements;
|
|
246
|
+
private buildDelegationContext;
|
|
247
|
+
private delegateResolvedCandidates;
|
|
197
248
|
private resolveApproverResolver;
|
|
198
249
|
private resolvePositionCandidates;
|
|
199
250
|
private resolveInitiatorManagerCandidates;
|
|
251
|
+
/**
|
|
252
|
+
* Walks up the initiator's manager chain, nearest manager first, until a
|
|
253
|
+
* manager whose position level reaches `minPositionLevel` is added. The
|
|
254
|
+
* list is returned nearest manager first.
|
|
255
|
+
*/
|
|
256
|
+
private resolveOrgManagerChainCandidates;
|
|
257
|
+
/** Highest position level over the member's active memberships, or `null`. */
|
|
258
|
+
private readMemberPositionLevel;
|
|
200
259
|
private resolveFallbackAssignee;
|
|
201
260
|
private resolveManagerMemberIdsFromOrganization;
|
|
202
261
|
private resolveManagerMemberIdsAtLevel;
|