@loopstack/core 0.36.0 → 0.38.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/dist/common/errors/index.d.ts +1 -0
- package/dist/common/errors/index.d.ts.map +1 -1
- package/dist/common/errors/index.js +1 -0
- package/dist/common/errors/index.js.map +1 -1
- package/dist/common/errors/transition-aborted.error.d.ts +4 -0
- package/dist/common/errors/transition-aborted.error.d.ts.map +1 -0
- package/dist/common/errors/transition-aborted.error.js +7 -0
- package/dist/common/errors/transition-aborted.error.js.map +1 -0
- package/dist/common/interfaces/app-config.interface.d.ts +1 -0
- package/dist/common/interfaces/app-config.interface.d.ts.map +1 -1
- package/dist/common/services/client-message.service.d.ts +6 -5
- package/dist/common/services/client-message.service.d.ts.map +1 -1
- package/dist/common/services/client-message.service.js +32 -17
- package/dist/common/services/client-message.service.js.map +1 -1
- package/dist/common/services/index.d.ts +1 -0
- package/dist/common/services/index.d.ts.map +1 -1
- package/dist/common/services/index.js +1 -0
- package/dist/common/services/index.js.map +1 -1
- package/dist/common/services/system-clock.d.ts +6 -0
- package/dist/common/services/system-clock.d.ts.map +1 -0
- package/dist/common/services/system-clock.js +21 -0
- package/dist/common/services/system-clock.js.map +1 -0
- package/dist/loop-core.module.d.ts +0 -1
- package/dist/loop-core.module.d.ts.map +1 -1
- package/dist/loop-core.module.js +10 -5
- package/dist/loop-core.module.js.map +1 -1
- package/dist/persistence/services/workflow.service.d.ts.map +1 -1
- package/dist/persistence/services/workflow.service.js +7 -4
- package/dist/persistence/services/workflow.service.js.map +1 -1
- package/dist/scheduler/services/task-processor/run-workflow-task-processor.service.d.ts +1 -0
- package/dist/scheduler/services/task-processor/run-workflow-task-processor.service.d.ts.map +1 -1
- package/dist/scheduler/services/task-processor/run-workflow-task-processor.service.js +8 -0
- package/dist/scheduler/services/task-processor/run-workflow-task-processor.service.js.map +1 -1
- package/dist/scheduler/services/task-processor.service.d.ts.map +1 -1
- package/dist/scheduler/services/task-processor.service.js +1 -0
- package/dist/scheduler/services/task-processor.service.js.map +1 -1
- package/dist/scheduler/services/workflow-runner.service.d.ts +1 -1
- package/dist/scheduler/services/workflow-runner.service.d.ts.map +1 -1
- package/dist/scheduler/services/workflow-runner.service.js +7 -1
- package/dist/scheduler/services/workflow-runner.service.js.map +1 -1
- package/dist/workflow-processor/services/document-persistence.service.d.ts.map +1 -1
- package/dist/workflow-processor/services/document-persistence.service.js +12 -1
- package/dist/workflow-processor/services/document-persistence.service.js.map +1 -1
- package/dist/workflow-processor/services/document-store.service.d.ts +1 -0
- package/dist/workflow-processor/services/document-store.service.d.ts.map +1 -1
- package/dist/workflow-processor/services/document-store.service.js +14 -1
- package/dist/workflow-processor/services/document-store.service.js.map +1 -1
- package/dist/workflow-processor/services/index.d.ts +2 -1
- package/dist/workflow-processor/services/index.d.ts.map +1 -1
- package/dist/workflow-processor/services/index.js +2 -1
- package/dist/workflow-processor/services/index.js.map +1 -1
- package/dist/workflow-processor/services/processors/workflow-processor.service.d.ts +7 -2
- package/dist/workflow-processor/services/processors/workflow-processor.service.d.ts.map +1 -1
- package/dist/workflow-processor/services/processors/workflow-processor.service.js +163 -16
- package/dist/workflow-processor/services/processors/workflow-processor.service.js.map +1 -1
- package/dist/workflow-processor/services/run-trace.service.d.ts +19 -0
- package/dist/workflow-processor/services/run-trace.service.d.ts.map +1 -0
- package/dist/workflow-processor/services/run-trace.service.js +110 -0
- package/dist/workflow-processor/services/run-trace.service.js.map +1 -0
- package/dist/workflow-processor/services/stateless-child-runner.service.d.ts +14 -0
- package/dist/workflow-processor/services/stateless-child-runner.service.d.ts.map +1 -0
- package/dist/workflow-processor/services/stateless-child-runner.service.js +40 -0
- package/dist/workflow-processor/services/stateless-child-runner.service.js.map +1 -0
- package/dist/workflow-processor/services/studio-discovery.service.d.ts +1 -28
- package/dist/workflow-processor/services/studio-discovery.service.d.ts.map +1 -1
- package/dist/workflow-processor/services/studio-discovery.service.js.map +1 -1
- package/dist/workflow-processor/services/tool-pipeline.service.d.ts +4 -1
- package/dist/workflow-processor/services/tool-pipeline.service.d.ts.map +1 -1
- package/dist/workflow-processor/services/tool-pipeline.service.js +63 -5
- package/dist/workflow-processor/services/tool-pipeline.service.js.map +1 -1
- package/dist/workflow-processor/services/workflow-orchestration.service.d.ts +4 -1
- package/dist/workflow-processor/services/workflow-orchestration.service.d.ts.map +1 -1
- package/dist/workflow-processor/services/workflow-orchestration.service.js +56 -4
- package/dist/workflow-processor/services/workflow-orchestration.service.js.map +1 -1
- package/dist/workflow-processor/utils/execution-scope.d.ts +10 -3
- package/dist/workflow-processor/utils/execution-scope.d.ts.map +1 -1
- package/dist/workflow-processor/utils/execution-scope.js.map +1 -1
- package/dist/workflow-processor/utils/index.d.ts +1 -0
- package/dist/workflow-processor/utils/index.d.ts.map +1 -1
- package/dist/workflow-processor/utils/index.js +1 -0
- package/dist/workflow-processor/utils/index.js.map +1 -1
- package/dist/workflow-processor/utils/run-trace-collector.d.ts +14 -0
- package/dist/workflow-processor/utils/run-trace-collector.d.ts.map +1 -0
- package/dist/workflow-processor/utils/run-trace-collector.js +44 -0
- package/dist/workflow-processor/utils/run-trace-collector.js.map +1 -0
- package/dist/workflows/fan-out/fan-out.types.d.ts.map +1 -1
- package/dist/workflows/fan-out/fan-out.types.js.map +1 -1
- package/dist/workflows/fan-out/fan-out.workflow.d.ts.map +1 -1
- package/dist/workflows/fan-out/fan-out.workflow.js.map +1 -1
- package/dist/workflows/sequence/sequence.types.d.ts.map +1 -1
- package/dist/workflows/sequence/sequence.types.js.map +1 -1
- package/dist/workflows/sequence/sequence.workflow.d.ts.map +1 -1
- package/dist/workflows/sequence/sequence.workflow.js.map +1 -1
- package/package.json +2 -2
- package/dist/common/dtos/client-message.dto.d.ts +0 -13
- package/dist/common/dtos/client-message.dto.d.ts.map +0 -1
- package/dist/common/dtos/client-message.dto.js +0 -13
- package/dist/common/dtos/client-message.dto.js.map +0 -1
- package/dist/workflow-processor/services/tool-logging.interceptor.d.ts +0 -6
- package/dist/workflow-processor/services/tool-logging.interceptor.d.ts.map +0 -1
- package/dist/workflow-processor/services/tool-logging.interceptor.js +0 -34
- package/dist/workflow-processor/services/tool-logging.interceptor.js.map +0 -1
|
@@ -16,7 +16,7 @@ import { InjectRepository } from '@nestjs/typeorm';
|
|
|
16
16
|
import { randomUUID } from 'node:crypto';
|
|
17
17
|
import { Repository } from 'typeorm';
|
|
18
18
|
import { DocumentEntity, getBlockOptions, getDocumentSchema } from '@loopstack/common';
|
|
19
|
-
import { SchemaValidationError } from '../../common/index.js';
|
|
19
|
+
import { SchemaValidationError, TransitionAbortedError } from '../../common/index.js';
|
|
20
20
|
import { ExecutionScope } from '../utils/index.js';
|
|
21
21
|
let DocumentPersistenceService = DocumentPersistenceService_1 = class DocumentPersistenceService {
|
|
22
22
|
executionScope;
|
|
@@ -28,6 +28,9 @@ let DocumentPersistenceService = DocumentPersistenceService_1 = class DocumentPe
|
|
|
28
28
|
}
|
|
29
29
|
async create(documentName, documentClass, content, options) {
|
|
30
30
|
const scope = this.executionScope.get();
|
|
31
|
+
if (scope.abortController.signal.aborted) {
|
|
32
|
+
throw new TransitionAbortedError();
|
|
33
|
+
}
|
|
31
34
|
const transition = scope.transition;
|
|
32
35
|
if (!transition) {
|
|
33
36
|
throw new Error('DocumentPersistenceService.create() called outside an active transition');
|
|
@@ -100,6 +103,14 @@ let DocumentPersistenceService = DocumentPersistenceService_1 = class DocumentPe
|
|
|
100
103
|
this.logger.debug(`addDocument: ${document.documentName}(key=${document.key}) → index=${document.index} (inherited=${inheritedIndex !== undefined}, docCount=${documents.length})`);
|
|
101
104
|
documents.push(document);
|
|
102
105
|
}
|
|
106
|
+
scope.trace.emit({
|
|
107
|
+
type: 'document.emitted',
|
|
108
|
+
transitionId: scope.transition?.id,
|
|
109
|
+
...(document.id ? { documentId: document.id } : {}),
|
|
110
|
+
...(document.key ? { key: document.key } : {}),
|
|
111
|
+
documentName: document.documentName,
|
|
112
|
+
...(invalidated.length > 0 || inheritedIndex !== undefined ? { invalidatedKey: document.key } : {}),
|
|
113
|
+
});
|
|
103
114
|
scope.persistenceState = { documentsUpdated: true };
|
|
104
115
|
}
|
|
105
116
|
validateContent(schema, content, mode, documentName) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"document-persistence.service.js","sourceRoot":"","sources":["../../../src/workflow-processor/services/document-persistence.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC,OAAO,EAAE,cAAc,EAAuB,eAAe,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC5G,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"document-persistence.service.js","sourceRoot":"","sources":["../../../src/workflow-processor/services/document-persistence.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,4 +13,5 @@ export declare class DocumentStore {
|
|
|
13
13
|
static isDocumentClass(value: unknown): boolean;
|
|
14
14
|
}
|
|
15
15
|
export declare function resolveDocumentName(documentClass: object): string;
|
|
16
|
+
export declare function resolveDocumentClass(documentName: string, declaringTool?: string): DocumentClass;
|
|
16
17
|
//# sourceMappingURL=document-store.service.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"document-store.service.d.ts","sourceRoot":"","sources":["../../../src/workflow-processor/services/document-store.service.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,aAAa,EACb,cAAc,EACd,mBAAmB,
|
|
1
|
+
{"version":3,"file":"document-store.service.d.ts","sourceRoot":"","sources":["../../../src/workflow-processor/services/document-store.service.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,aAAa,EACb,cAAc,EACd,mBAAmB,EAMpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAC;AAa/E,qBACa,aAAa;IAEtB,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,0BAA0B;gBAD1B,cAAc,EAAE,cAAc,EAC9B,0BAA0B,EAAE,0BAA0B;IAOzE,MAAM,CAAC,CAAC,SAAS,MAAM,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC;IAS/D,IAAI,CAAC,CAAC,SAAS,MAAM,EACzB,eAAe,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,EACrC,aAAa,CAAC,EAAE,CAAC,GAAG,mBAAmB,EACvC,YAAY,CAAC,EAAE,mBAAmB,GACjC,OAAO,CAAC,cAAc,CAAC;IAsB1B,OAAO,CAAC,CAAC,SAAS,MAAM,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;IAa/D,gBAAgB,IAAI,cAAc,EAAE;IAQpC,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,EAAE;IAQxC,MAAM,CAAC,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO;CAGhD;AAMD,wBAAgB,mBAAmB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAQjE;AAUD,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,aAAa,CAehG"}
|
|
@@ -9,7 +9,7 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
9
9
|
};
|
|
10
10
|
import { Injectable } from '@nestjs/common';
|
|
11
11
|
import { plainToInstance } from 'class-transformer';
|
|
12
|
-
import { deriveDocumentIdentifier, getBlockName, getBlockTypeFromMetadata, getDocumentSchema, } from '@loopstack/common';
|
|
12
|
+
import { deriveDocumentIdentifier, getBlockName, getBlockTypeFromMetadata, getDocumentSchema, getRegisteredDocuments, } from '@loopstack/common';
|
|
13
13
|
import { ExecutionScope } from '../utils/index.js';
|
|
14
14
|
import { DocumentPersistenceService } from './document-persistence.service.js';
|
|
15
15
|
let DocumentStore = class DocumentStore {
|
|
@@ -75,4 +75,17 @@ export function resolveDocumentName(documentClass) {
|
|
|
75
75
|
}
|
|
76
76
|
return explicitName;
|
|
77
77
|
}
|
|
78
|
+
let documentClassByName;
|
|
79
|
+
export function resolveDocumentClass(documentName, declaringTool) {
|
|
80
|
+
let found = documentClassByName?.get(documentName);
|
|
81
|
+
if (!found) {
|
|
82
|
+
documentClassByName = new Map([...getRegisteredDocuments()].map((cls) => [resolveDocumentName(cls), cls]));
|
|
83
|
+
found = documentClassByName.get(documentName);
|
|
84
|
+
}
|
|
85
|
+
if (!found) {
|
|
86
|
+
const source = declaringTool ? ` declared by tool '${declaringTool}'` : '';
|
|
87
|
+
throw new Error(`Unknown document '${documentName}'${source}. No registered @Document class resolves to this name.`);
|
|
88
|
+
}
|
|
89
|
+
return found;
|
|
90
|
+
}
|
|
78
91
|
//# sourceMappingURL=document-store.service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"document-store.service.js","sourceRoot":"","sources":["../../../src/workflow-processor/services/document-store.service.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAIL,wBAAwB,EACxB,YAAY,EACZ,wBAAwB,EACxB,iBAAiB,
|
|
1
|
+
{"version":3,"file":"document-store.service.js","sourceRoot":"","sources":["../../../src/workflow-processor/services/document-store.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,6 @@ export * from './workflow-state.service.js';
|
|
|
2
2
|
export * from './root-processor.service.js';
|
|
3
3
|
export * from './create-workflow.service.js';
|
|
4
4
|
export * from './tool-pipeline.service.js';
|
|
5
|
-
export * from './tool-logging.interceptor.js';
|
|
6
5
|
export * from './document-persistence.service.js';
|
|
7
6
|
export * from './document-store.service.js';
|
|
8
7
|
export * from './workflow-orchestration.service.js';
|
|
@@ -15,4 +14,6 @@ export * from './tool-registry.service.js';
|
|
|
15
14
|
export * from './block-processor.service.js';
|
|
16
15
|
export * from './processor.factory.js';
|
|
17
16
|
export * from './processors/workflow-processor.service.js';
|
|
17
|
+
export * from './stateless-child-runner.service.js';
|
|
18
|
+
export * from './run-trace.service.js';
|
|
18
19
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/workflow-processor/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAC;AAC5C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,4BAA4B,CAAC;AAC3C,cAAc
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/workflow-processor/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAC;AAC5C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mCAAmC,CAAC;AAClD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,qCAAqC,CAAC;AACpD,cAAc,kCAAkC,CAAC;AACjD,cAAc,sCAAsC,CAAC;AACrD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,4BAA4B,CAAC;AAE3C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,wBAAwB,CAAC;AACvC,cAAc,4CAA4C,CAAC;AAC3D,cAAc,qCAAqC,CAAC;AACpD,cAAc,wBAAwB,CAAC"}
|
|
@@ -2,7 +2,6 @@ export * from './workflow-state.service.js';
|
|
|
2
2
|
export * from './root-processor.service.js';
|
|
3
3
|
export * from './create-workflow.service.js';
|
|
4
4
|
export * from './tool-pipeline.service.js';
|
|
5
|
-
export * from './tool-logging.interceptor.js';
|
|
6
5
|
export * from './document-persistence.service.js';
|
|
7
6
|
export * from './document-store.service.js';
|
|
8
7
|
export * from './workflow-orchestration.service.js';
|
|
@@ -15,4 +14,6 @@ export * from './tool-registry.service.js';
|
|
|
15
14
|
export * from './block-processor.service.js';
|
|
16
15
|
export * from './processor.factory.js';
|
|
17
16
|
export * from './processors/workflow-processor.service.js';
|
|
17
|
+
export * from './stateless-child-runner.service.js';
|
|
18
|
+
export * from './run-trace.service.js';
|
|
18
19
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/workflow-processor/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAC;AAC5C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,4BAA4B,CAAC;AAC3C,cAAc
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/workflow-processor/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAC;AAC5C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mCAAmC,CAAC;AAClD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,qCAAqC,CAAC;AACpD,cAAc,kCAAkC,CAAC;AACjD,cAAc,sCAAsC,CAAC;AACrD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,4BAA4B,CAAC;AAE3C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,wBAAwB,CAAC;AACvC,cAAc,4CAA4C,CAAC;AAC3D,cAAc,qCAAqC,CAAC;AACpD,cAAc,wBAAwB,CAAC"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { DataSource } from 'typeorm';
|
|
2
|
-
import { WorkflowEntity, WorkflowInterface, WorkflowMetadataInterface } from '@loopstack/common';
|
|
2
|
+
import { StatelessExecutionState, WorkflowEntity, WorkflowInterface, WorkflowMetadataInterface } from '@loopstack/common';
|
|
3
|
+
import type { Clock } from '@loopstack/common';
|
|
3
4
|
import { Processor } from '../../../common/index.js';
|
|
4
5
|
import { ExecutionScope } from '../../utils/index.js';
|
|
6
|
+
import { RunTraceService } from '../run-trace.service.js';
|
|
5
7
|
import { TransitionResolverService } from '../transition-resolver.service.js';
|
|
6
8
|
import { WorkflowMemoryMonitorService } from '../workflow-memory-monitor.service.js';
|
|
7
9
|
import { WorkflowStateService } from '../workflow-state.service.js';
|
|
@@ -11,8 +13,10 @@ export declare class WorkflowProcessorService implements Processor {
|
|
|
11
13
|
private readonly executionScope;
|
|
12
14
|
private readonly memoryMonitor;
|
|
13
15
|
private readonly dataSource;
|
|
16
|
+
private readonly runTraceService;
|
|
17
|
+
private readonly clock;
|
|
14
18
|
private readonly logger;
|
|
15
|
-
constructor(workflowStateService: WorkflowStateService, transitionResolverService: TransitionResolverService, executionScope: ExecutionScope, memoryMonitor: WorkflowMemoryMonitorService, dataSource: DataSource);
|
|
19
|
+
constructor(workflowStateService: WorkflowStateService, transitionResolverService: TransitionResolverService, executionScope: ExecutionScope, memoryMonitor: WorkflowMemoryMonitorService, dataSource: DataSource, runTraceService: RunTraceService, clock: Clock);
|
|
16
20
|
process(workflow: WorkflowInterface, args: Record<string, unknown> | undefined, context: {
|
|
17
21
|
root: string;
|
|
18
22
|
userId: string;
|
|
@@ -22,6 +26,7 @@ export declare class WorkflowProcessorService implements Processor {
|
|
|
22
26
|
payload: Record<string, unknown>;
|
|
23
27
|
workflowContext?: Record<string, unknown>;
|
|
24
28
|
workflowEntity?: WorkflowEntity;
|
|
29
|
+
statelessState?: StatelessExecutionState;
|
|
25
30
|
options: {
|
|
26
31
|
stateless: boolean;
|
|
27
32
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow-processor.service.d.ts","sourceRoot":"","sources":["../../../../src/workflow-processor/services/processors/workflow-processor.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"workflow-processor.service.d.ts","sourceRoot":"","sources":["../../../../src/workflow-processor/services/processors/workflow-processor.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC,OAAO,EAEL,uBAAuB,EAGvB,cAAc,EACd,iBAAiB,EACjB,yBAAyB,EAI1B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,KAAK,EAAc,MAAM,mBAAmB,CAAC;AAG3D,OAAO,EAAoB,SAAS,EAA0B,MAAM,0BAA0B,CAAC;AAC/F,OAAO,EAAE,cAAc,EAA2D,MAAM,sBAAsB,CAAC;AAC/G,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,yBAAyB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,4BAA4B,EAAE,MAAM,uCAAuC,CAAC;AACrF,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAWpE,qBACa,wBAAyB,YAAW,SAAS;IAItD,OAAO,CAAC,QAAQ,CAAC,oBAAoB;IACrC,OAAO,CAAC,QAAQ,CAAC,yBAAyB;IAC1C,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAC9B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,eAAe;IACjB,OAAO,CAAC,QAAQ,CAAC,KAAK;IATvC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA6C;gBAGjD,oBAAoB,EAAE,oBAAoB,EAC1C,yBAAyB,EAAE,yBAAyB,EACpD,cAAc,EAAE,cAAc,EAC9B,aAAa,EAAE,4BAA4B,EAC3C,UAAU,EAAE,UAAU,EACtB,eAAe,EAAE,eAAe,EACjB,KAAK,EAAE,KAAK;IAGxC,OAAO,CACX,QAAQ,EAAE,iBAAiB,EAC3B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EACzC,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACjC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC1C,cAAc,CAAC,EAAE,cAAc,CAAC;QAChC,cAAc,CAAC,EAAE,uBAAuB,CAAC;QACzC,OAAO,EAAE;YAAE,SAAS,EAAE,OAAO,CAAA;SAAE,CAAC;KACjC,GACA,OAAO,CAAC,yBAAyB,CAAC;IA2MrC,OAAO,CAAC,oBAAoB;IAyB5B,OAAO,CAAC,gBAAgB;IA0BxB,OAAO,CAAC,aAAa;IAyBrB,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,WAAW;YAeL,iBAAiB;YAwHjB,qBAAqB;IAiEnC,OAAO,CAAC,eAAe;YAOT,mBAAmB;CAyQlC"}
|
|
@@ -7,38 +7,45 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
7
7
|
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
8
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
9
|
};
|
|
10
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
11
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
12
|
+
};
|
|
10
13
|
var WorkflowProcessorService_1;
|
|
11
|
-
import { Injectable, Logger } from '@nestjs/common';
|
|
14
|
+
import { Inject, Injectable, Logger } from '@nestjs/common';
|
|
12
15
|
import { DataSource } from 'typeorm';
|
|
13
|
-
import {
|
|
16
|
+
import { ZodError } from 'zod';
|
|
17
|
+
import { CLOCK, getGuardMetadataMap, getWorkflowIdentifier, getWorkflowStateSchema, } from '@loopstack/common';
|
|
14
18
|
import { WorkflowState, WorkflowState as WorkflowStateEnum } from '@loopstack/contracts/enums';
|
|
15
|
-
import { ConfigTraceError } from '../../../common/index.js';
|
|
16
|
-
import { ExecutionScope } from '../../utils/index.js';
|
|
19
|
+
import { ConfigTraceError, TransitionAbortedError } from '../../../common/index.js';
|
|
20
|
+
import { ExecutionScope, RunTraceCollector, shallowStateDiff } from '../../utils/index.js';
|
|
21
|
+
import { RunTraceService } from '../run-trace.service.js';
|
|
17
22
|
import { TransitionResolverService } from '../transition-resolver.service.js';
|
|
18
23
|
import { WorkflowMemoryMonitorService } from '../workflow-memory-monitor.service.js';
|
|
19
24
|
import { WorkflowStateService } from '../workflow-state.service.js';
|
|
20
|
-
function rejectAfter(ms, methodName) {
|
|
21
|
-
return new Promise((_, reject) => setTimeout(() => reject(new Error(`Transition '${methodName}' timed out after ${ms}ms`)), ms));
|
|
22
|
-
}
|
|
23
25
|
let WorkflowProcessorService = WorkflowProcessorService_1 = class WorkflowProcessorService {
|
|
24
26
|
workflowStateService;
|
|
25
27
|
transitionResolverService;
|
|
26
28
|
executionScope;
|
|
27
29
|
memoryMonitor;
|
|
28
30
|
dataSource;
|
|
31
|
+
runTraceService;
|
|
32
|
+
clock;
|
|
29
33
|
logger = new Logger(WorkflowProcessorService_1.name);
|
|
30
|
-
constructor(workflowStateService, transitionResolverService, executionScope, memoryMonitor, dataSource) {
|
|
34
|
+
constructor(workflowStateService, transitionResolverService, executionScope, memoryMonitor, dataSource, runTraceService, clock) {
|
|
31
35
|
this.workflowStateService = workflowStateService;
|
|
32
36
|
this.transitionResolverService = transitionResolverService;
|
|
33
37
|
this.executionScope = executionScope;
|
|
34
38
|
this.memoryMonitor = memoryMonitor;
|
|
35
39
|
this.dataSource = dataSource;
|
|
40
|
+
this.runTraceService = runTraceService;
|
|
41
|
+
this.clock = clock;
|
|
36
42
|
}
|
|
37
43
|
async process(workflow, args, context) {
|
|
38
44
|
const isStateless = !!context.options?.stateless;
|
|
39
45
|
let workflowEntity;
|
|
40
46
|
let pendingTransition;
|
|
41
47
|
let latestCheckpoint = null;
|
|
48
|
+
const trace = new RunTraceCollector(context.statelessState?.trace, () => this.clock.now());
|
|
42
49
|
const meta = {
|
|
43
50
|
hasError: false,
|
|
44
51
|
stop: false,
|
|
@@ -48,6 +55,7 @@ let WorkflowProcessorService = WorkflowProcessorService_1 = class WorkflowProces
|
|
|
48
55
|
documents: [],
|
|
49
56
|
place: 'start',
|
|
50
57
|
tools: {},
|
|
58
|
+
trace: trace.events,
|
|
51
59
|
result: null,
|
|
52
60
|
retryCount: 0,
|
|
53
61
|
retryTransitionId: undefined,
|
|
@@ -55,6 +63,12 @@ let WorkflowProcessorService = WorkflowProcessorService_1 = class WorkflowProces
|
|
|
55
63
|
};
|
|
56
64
|
if (isStateless) {
|
|
57
65
|
meta.status = WorkflowStateEnum.Running;
|
|
66
|
+
const resume = context.statelessState;
|
|
67
|
+
if (resume) {
|
|
68
|
+
meta.place = resume.place;
|
|
69
|
+
meta.documents = resume.documents;
|
|
70
|
+
pendingTransition = context.payload?.transition;
|
|
71
|
+
}
|
|
58
72
|
}
|
|
59
73
|
else {
|
|
60
74
|
workflowEntity = context.workflowEntity;
|
|
@@ -65,6 +79,7 @@ let WorkflowProcessorService = WorkflowProcessorService_1 = class WorkflowProces
|
|
|
65
79
|
meta.place = workflowEntity.place ?? 'start';
|
|
66
80
|
meta.retryCount = workflowEntity.retryCount ?? 0;
|
|
67
81
|
meta.retryTransitionId = workflowEntity.retryTransitionId ?? undefined;
|
|
82
|
+
meta.result = workflowEntity.result ?? null;
|
|
68
83
|
if (workflowEntity) {
|
|
69
84
|
delete workflowEntity.documents;
|
|
70
85
|
}
|
|
@@ -77,15 +92,21 @@ let WorkflowProcessorService = WorkflowProcessorService_1 = class WorkflowProces
|
|
|
77
92
|
this.logger.debug('Skipping processing since state is already processed.');
|
|
78
93
|
return meta;
|
|
79
94
|
}
|
|
95
|
+
if (this.runTraceService.isEnabled(workflowEntity.trace)) {
|
|
96
|
+
trace.continueFrom(await this.runTraceService.nextSeq(workflowEntity.id));
|
|
97
|
+
}
|
|
80
98
|
meta.status = WorkflowStateEnum.Running;
|
|
81
99
|
}
|
|
82
|
-
let state = latestCheckpoint
|
|
100
|
+
let state = latestCheckpoint
|
|
101
|
+
? (latestCheckpoint.state ?? {})
|
|
102
|
+
: (context.statelessState?.state ?? {});
|
|
83
103
|
const checkpointVersion = latestCheckpoint ? latestCheckpoint.version + 1 : 1;
|
|
84
104
|
meta.version = checkpointVersion;
|
|
85
105
|
const scopeData = {
|
|
86
106
|
userId: context.userId,
|
|
87
107
|
workspaceId: context.workspaceId,
|
|
88
108
|
workflowId: context.workflowId ?? '',
|
|
109
|
+
workflowName: getWorkflowIdentifier(workflow),
|
|
89
110
|
labels: context.labels ?? [],
|
|
90
111
|
args: args ? Object.freeze({ ...args }) : undefined,
|
|
91
112
|
options: context.options,
|
|
@@ -94,6 +115,11 @@ let WorkflowProcessorService = WorkflowProcessorService_1 = class WorkflowProces
|
|
|
94
115
|
documents: meta.documents,
|
|
95
116
|
persistenceState: meta.persistenceState,
|
|
96
117
|
transition: undefined,
|
|
118
|
+
trace,
|
|
119
|
+
tracePersist: workflowEntity ? this.runTraceService.isEnabled(workflowEntity.trace) : false,
|
|
120
|
+
statelessCallbacks: context.statelessState?.callbacks ? [...context.statelessState.callbacks] : [],
|
|
121
|
+
statelessChildren: context.statelessState?.children ? [...context.statelessState.children] : [],
|
|
122
|
+
abortController: new AbortController(),
|
|
97
123
|
stateDraft: {},
|
|
98
124
|
resultDraft: {},
|
|
99
125
|
resultDirty: false,
|
|
@@ -102,13 +128,22 @@ let WorkflowProcessorService = WorkflowProcessorService_1 = class WorkflowProces
|
|
|
102
128
|
this.memoryMonitor.logWorkflowStart(workflow.constructor.name);
|
|
103
129
|
try {
|
|
104
130
|
state = await this.processStateMachine(scopeData, meta, workflow, pendingTransition, workflowEntity, state);
|
|
131
|
+
if (isStateless) {
|
|
132
|
+
const callbacks = scopeData.statelessCallbacks ?? [];
|
|
133
|
+
while (callbacks.length > 0 && !meta.hasError && meta.place !== 'end') {
|
|
134
|
+
const traceLength = meta.trace.length;
|
|
135
|
+
state = await this.processStateMachine(scopeData, meta, workflow, callbacks[0], workflowEntity, state);
|
|
136
|
+
if (trace.startedSince(traceLength) === 0)
|
|
137
|
+
break;
|
|
138
|
+
callbacks.shift();
|
|
139
|
+
}
|
|
140
|
+
}
|
|
105
141
|
}
|
|
106
142
|
catch (e) {
|
|
107
143
|
const error = e instanceof Error ? e : new Error(String(e));
|
|
108
144
|
this.logger.error(new ConfigTraceError(error, workflow));
|
|
109
145
|
meta.errorMessage = error.message;
|
|
110
146
|
meta.hasError = true;
|
|
111
|
-
meta.place = 'error';
|
|
112
147
|
}
|
|
113
148
|
const hasRetrySignal = !!meta._retrySignal;
|
|
114
149
|
if (hasRetrySignal) {
|
|
@@ -128,9 +163,30 @@ let WorkflowProcessorService = WorkflowProcessorService_1 = class WorkflowProces
|
|
|
128
163
|
}
|
|
129
164
|
meta.documents = scopeData.documents;
|
|
130
165
|
meta.persistenceState = scopeData.persistenceState;
|
|
166
|
+
trace.emit({
|
|
167
|
+
type: 'run.settled',
|
|
168
|
+
status: meta.status,
|
|
169
|
+
place: meta.place,
|
|
170
|
+
...(meta.status === WorkflowState.Waiting
|
|
171
|
+
? { availableTransitions: meta.availableTransitions.map((t) => t.id) }
|
|
172
|
+
: {}),
|
|
173
|
+
});
|
|
174
|
+
if (isStateless) {
|
|
175
|
+
meta.statelessState = {
|
|
176
|
+
place: meta.place,
|
|
177
|
+
state,
|
|
178
|
+
documents: meta.documents,
|
|
179
|
+
trace: trace.events,
|
|
180
|
+
...(scopeData.statelessCallbacks?.length ? { callbacks: scopeData.statelessCallbacks } : {}),
|
|
181
|
+
...(scopeData.statelessChildren?.length ? { children: scopeData.statelessChildren } : {}),
|
|
182
|
+
};
|
|
183
|
+
}
|
|
131
184
|
this.memoryMonitor.logWorkflowEnd(workflow.constructor.name, meta.documents, meta.version);
|
|
132
185
|
if (workflowEntity) {
|
|
133
186
|
await this.workflowStateService.saveExecutionState(workflowEntity, state, meta);
|
|
187
|
+
if (scopeData.tracePersist) {
|
|
188
|
+
await this.runTraceService.saveBatch({ workflowId: workflowEntity.id, workflowName: scopeData.workflowName, workspaceId: scopeData.workspaceId }, trace.events);
|
|
189
|
+
}
|
|
134
190
|
}
|
|
135
191
|
return meta;
|
|
136
192
|
}
|
|
@@ -140,6 +196,7 @@ let WorkflowProcessorService = WorkflowProcessorService_1 = class WorkflowProces
|
|
|
140
196
|
workspaceId: scopeData.workspaceId,
|
|
141
197
|
workflowId: scopeData.workflowId,
|
|
142
198
|
args: scopeData.args,
|
|
199
|
+
signal: scopeData.abortController.signal,
|
|
143
200
|
execution: {
|
|
144
201
|
place: meta.place,
|
|
145
202
|
retryCount: meta.retryCount ?? 0,
|
|
@@ -187,13 +244,24 @@ let WorkflowProcessorService = WorkflowProcessorService_1 = class WorkflowProces
|
|
|
187
244
|
async executeTransition(scopeData, meta, workflow, methodName, to, data, state, workflowEntity, workflowName, transitionMeta) {
|
|
188
245
|
const defaultTimeout = parseInt(process.env.DEFAULT_TRANSITION_TIMEOUT ?? '', 10) || 300_000;
|
|
189
246
|
const timeoutMs = transitionMeta?.timeout ?? defaultTimeout;
|
|
247
|
+
scopeData.abortController = new AbortController();
|
|
190
248
|
const workflowCtx = this.buildWorkflowContext(scopeData, meta);
|
|
191
249
|
const invokeMethod = () => {
|
|
192
250
|
scopeData.stateDraft = { ...state };
|
|
193
251
|
scopeData.resultDraft = meta.result ? { ...meta.result } : {};
|
|
194
252
|
scopeData.resultDirty = false;
|
|
195
253
|
const methodPromise = this.executionScope.run(scopeData, () => this.invokeTransition(workflow, methodName, workflowCtx, state, data));
|
|
196
|
-
|
|
254
|
+
if (timeoutMs <= 0)
|
|
255
|
+
return methodPromise;
|
|
256
|
+
let cancel;
|
|
257
|
+
const timeoutPromise = new Promise((_, reject) => {
|
|
258
|
+
cancel = this.clock.schedule(() => {
|
|
259
|
+
const timeoutError = new TransitionAbortedError(`Transition '${methodName}' timed out after ${timeoutMs}ms`);
|
|
260
|
+
scopeData.abortController.abort(timeoutError);
|
|
261
|
+
reject(timeoutError);
|
|
262
|
+
}, timeoutMs);
|
|
263
|
+
});
|
|
264
|
+
return Promise.race([methodPromise, timeoutPromise]).finally(() => cancel());
|
|
197
265
|
};
|
|
198
266
|
if (!workflowEntity) {
|
|
199
267
|
const returnValue = await invokeMethod();
|
|
@@ -316,6 +384,13 @@ let WorkflowProcessorService = WorkflowProcessorService_1 = class WorkflowProces
|
|
|
316
384
|
return state;
|
|
317
385
|
}
|
|
318
386
|
}
|
|
387
|
+
scopeData.trace.emit({
|
|
388
|
+
type: 'transition.started',
|
|
389
|
+
transitionId: waitTransition.methodName,
|
|
390
|
+
from: meta.place,
|
|
391
|
+
to: waitTransition.to,
|
|
392
|
+
payload: pendingTransition.payload,
|
|
393
|
+
});
|
|
319
394
|
if (workflowEntity) {
|
|
320
395
|
await this.workflowStateService.saveExecutionState(workflowEntity, state, meta);
|
|
321
396
|
}
|
|
@@ -328,6 +403,13 @@ let WorkflowProcessorService = WorkflowProcessorService_1 = class WorkflowProces
|
|
|
328
403
|
const subError = new Error(errorMessage);
|
|
329
404
|
this.logger.warn(`Wait transition '${waitTransition.methodName}' received ${status} callback: ${errorMessage}`);
|
|
330
405
|
await this.handleTransitionError(meta, subError, waitTransition);
|
|
406
|
+
scopeData.trace.emit({
|
|
407
|
+
type: 'transition.failed',
|
|
408
|
+
transitionId: waitTransition.methodName,
|
|
409
|
+
error: errorMessage,
|
|
410
|
+
retryCount: meta.retryCount ?? 0,
|
|
411
|
+
willRetry: !!meta._retrySignal,
|
|
412
|
+
});
|
|
331
413
|
const errorAvailable = this.transitionResolverService.getAvailableTransitions(workflow, meta.place);
|
|
332
414
|
meta.availableTransitions = errorAvailable.map((t) => ({
|
|
333
415
|
id: t.methodName,
|
|
@@ -337,7 +419,32 @@ let WorkflowProcessorService = WorkflowProcessorService_1 = class WorkflowProces
|
|
|
337
419
|
}));
|
|
338
420
|
return state;
|
|
339
421
|
}
|
|
340
|
-
|
|
422
|
+
let validatedData;
|
|
423
|
+
if (waitTransition.schema && !isFailureCallback) {
|
|
424
|
+
try {
|
|
425
|
+
validatedData = waitTransition.schema.parse(rawData);
|
|
426
|
+
}
|
|
427
|
+
catch (e) {
|
|
428
|
+
const message = e instanceof ZodError
|
|
429
|
+
? e.issues.map((i) => `${i.path.length ? i.path.join('.') : '<root>'}: ${i.message}`).join('; ')
|
|
430
|
+
: e instanceof Error
|
|
431
|
+
? e.message
|
|
432
|
+
: String(e);
|
|
433
|
+
this.logger.warn(`Rejected invalid payload for wait transition '${waitTransition.methodName}': ${message}`);
|
|
434
|
+
meta.errorMessage = `Invalid payload for '${waitTransition.methodName}': ${message}`;
|
|
435
|
+
const stillAvailable = this.transitionResolverService.getAvailableTransitions(workflow, meta.place);
|
|
436
|
+
meta.availableTransitions = stillAvailable.map((t) => ({
|
|
437
|
+
id: t.methodName,
|
|
438
|
+
from: meta.place,
|
|
439
|
+
to: t.to,
|
|
440
|
+
trigger: t.wait ? 'manual' : undefined,
|
|
441
|
+
}));
|
|
442
|
+
return state;
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
else {
|
|
446
|
+
validatedData = rawData;
|
|
447
|
+
}
|
|
341
448
|
const transitionInput = {
|
|
342
449
|
workflowId: rawPayload.workflowId ?? pendingTransition.workflowId,
|
|
343
450
|
status,
|
|
@@ -346,8 +453,16 @@ let WorkflowProcessorService = WorkflowProcessorService_1 = class WorkflowProces
|
|
|
346
453
|
data: validatedData,
|
|
347
454
|
...(rawPayload.meta !== undefined ? { meta: rawPayload.meta } : {}),
|
|
348
455
|
};
|
|
456
|
+
const startedAt = performance.now();
|
|
349
457
|
try {
|
|
350
458
|
const result = await this.executeTransition(scopeData, meta, workflow, waitTransition.methodName, waitTransition.to, transitionInput, state, workflowEntity, workflowName, waitTransition);
|
|
459
|
+
scopeData.trace.emit({
|
|
460
|
+
type: 'transition.completed',
|
|
461
|
+
transitionId: waitTransition.methodName,
|
|
462
|
+
durationMs: Math.round(performance.now() - startedAt),
|
|
463
|
+
stateDiff: shallowStateDiff(state, result.newState),
|
|
464
|
+
resultDirty: scopeData.resultDirty,
|
|
465
|
+
});
|
|
351
466
|
state = result.newState;
|
|
352
467
|
this.clearRetryState(meta, waitTransition.methodName);
|
|
353
468
|
}
|
|
@@ -355,6 +470,14 @@ let WorkflowProcessorService = WorkflowProcessorService_1 = class WorkflowProces
|
|
|
355
470
|
const error = e instanceof Error ? e : new Error(String(e));
|
|
356
471
|
this.logger.error(new ConfigTraceError(error, workflow));
|
|
357
472
|
await this.handleTransitionError(meta, error, waitTransition);
|
|
473
|
+
scopeData.trace.emit({
|
|
474
|
+
type: 'transition.failed',
|
|
475
|
+
transitionId: waitTransition.methodName,
|
|
476
|
+
durationMs: Math.round(performance.now() - startedAt),
|
|
477
|
+
error: error.message,
|
|
478
|
+
retryCount: meta.retryCount ?? 0,
|
|
479
|
+
willRetry: !!meta._retrySignal,
|
|
480
|
+
});
|
|
358
481
|
const errorAvailable = this.transitionResolverService.getAvailableTransitions(workflow, meta.place);
|
|
359
482
|
meta.availableTransitions = errorAvailable.map((t) => ({
|
|
360
483
|
id: t.methodName,
|
|
@@ -367,9 +490,6 @@ let WorkflowProcessorService = WorkflowProcessorService_1 = class WorkflowProces
|
|
|
367
490
|
}
|
|
368
491
|
}
|
|
369
492
|
while (true) {
|
|
370
|
-
if (meta.place === 'end')
|
|
371
|
-
break;
|
|
372
|
-
meta.nextPlace = undefined;
|
|
373
493
|
const available = this.transitionResolverService.getAvailableTransitions(workflow, meta.place);
|
|
374
494
|
meta.availableTransitions = available.map((t) => ({
|
|
375
495
|
id: t.methodName,
|
|
@@ -377,6 +497,9 @@ let WorkflowProcessorService = WorkflowProcessorService_1 = class WorkflowProces
|
|
|
377
497
|
to: t.to,
|
|
378
498
|
trigger: t.wait ? 'manual' : undefined,
|
|
379
499
|
}));
|
|
500
|
+
if (meta.place === 'end')
|
|
501
|
+
break;
|
|
502
|
+
meta.nextPlace = undefined;
|
|
380
503
|
const next = await this.executionScope.run(scopeData, () => {
|
|
381
504
|
return this.transitionResolverService.resolveNextTransition(workflow, available, guards, state);
|
|
382
505
|
});
|
|
@@ -389,11 +512,25 @@ let WorkflowProcessorService = WorkflowProcessorService_1 = class WorkflowProces
|
|
|
389
512
|
payload: null,
|
|
390
513
|
};
|
|
391
514
|
scopeData.transition = meta.transition;
|
|
515
|
+
scopeData.trace.emit({
|
|
516
|
+
type: 'transition.started',
|
|
517
|
+
transitionId: next.methodName,
|
|
518
|
+
from: meta.place,
|
|
519
|
+
to: next.to,
|
|
520
|
+
});
|
|
392
521
|
if (workflowEntity) {
|
|
393
522
|
await this.workflowStateService.saveExecutionState(workflowEntity, state, meta);
|
|
394
523
|
}
|
|
524
|
+
const startedAt = performance.now();
|
|
395
525
|
try {
|
|
396
526
|
const result = await this.executeTransition(scopeData, meta, workflow, next.methodName, next.to, undefined, state, workflowEntity, workflowName, next);
|
|
527
|
+
scopeData.trace.emit({
|
|
528
|
+
type: 'transition.completed',
|
|
529
|
+
transitionId: next.methodName,
|
|
530
|
+
durationMs: Math.round(performance.now() - startedAt),
|
|
531
|
+
stateDiff: shallowStateDiff(state, result.newState),
|
|
532
|
+
resultDirty: scopeData.resultDirty,
|
|
533
|
+
});
|
|
397
534
|
state = result.newState;
|
|
398
535
|
this.clearRetryState(meta, next.methodName);
|
|
399
536
|
}
|
|
@@ -401,6 +538,14 @@ let WorkflowProcessorService = WorkflowProcessorService_1 = class WorkflowProces
|
|
|
401
538
|
const error = e instanceof Error ? e : new Error(String(e));
|
|
402
539
|
this.logger.error(new ConfigTraceError(error, workflow));
|
|
403
540
|
await this.handleTransitionError(meta, error, next);
|
|
541
|
+
scopeData.trace.emit({
|
|
542
|
+
type: 'transition.failed',
|
|
543
|
+
transitionId: next.methodName,
|
|
544
|
+
durationMs: Math.round(performance.now() - startedAt),
|
|
545
|
+
error: error.message,
|
|
546
|
+
retryCount: meta.retryCount ?? 0,
|
|
547
|
+
willRetry: !!meta._retrySignal,
|
|
548
|
+
});
|
|
404
549
|
const errorAvailable = this.transitionResolverService.getAvailableTransitions(workflow, meta.place);
|
|
405
550
|
meta.availableTransitions = errorAvailable.map((t) => ({
|
|
406
551
|
id: t.methodName,
|
|
@@ -416,11 +561,13 @@ let WorkflowProcessorService = WorkflowProcessorService_1 = class WorkflowProces
|
|
|
416
561
|
};
|
|
417
562
|
WorkflowProcessorService = WorkflowProcessorService_1 = __decorate([
|
|
418
563
|
Injectable(),
|
|
564
|
+
__param(6, Inject(CLOCK)),
|
|
419
565
|
__metadata("design:paramtypes", [WorkflowStateService,
|
|
420
566
|
TransitionResolverService,
|
|
421
567
|
ExecutionScope,
|
|
422
568
|
WorkflowMemoryMonitorService,
|
|
423
|
-
DataSource
|
|
569
|
+
DataSource,
|
|
570
|
+
RunTraceService, Object])
|
|
424
571
|
], WorkflowProcessorService);
|
|
425
572
|
export { WorkflowProcessorService };
|
|
426
573
|
//# sourceMappingURL=workflow-processor.service.js.map
|