@exaudeus/workrail 0.0.2-beta.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/README.md +223 -0
- package/dist/application/app.d.ts +32 -0
- package/dist/application/app.d.ts.map +1 -0
- package/dist/application/app.js +133 -0
- package/dist/application/app.js.map +1 -0
- package/dist/application/services/validation-engine.d.ts +102 -0
- package/dist/application/services/validation-engine.d.ts.map +1 -0
- package/dist/application/services/validation-engine.js +293 -0
- package/dist/application/services/validation-engine.js.map +1 -0
- package/dist/application/services/workflow-service.d.ts +47 -0
- package/dist/application/services/workflow-service.d.ts.map +1 -0
- package/dist/application/services/workflow-service.js +80 -0
- package/dist/application/services/workflow-service.js.map +1 -0
- package/dist/application/use-cases/get-next-step.d.ts +22 -0
- package/dist/application/use-cases/get-next-step.d.ts.map +1 -0
- package/dist/application/use-cases/get-next-step.js +21 -0
- package/dist/application/use-cases/get-next-step.js.map +1 -0
- package/dist/application/use-cases/get-workflow.d.ts +13 -0
- package/dist/application/use-cases/get-workflow.d.ts.map +1 -0
- package/dist/application/use-cases/get-workflow.js +26 -0
- package/dist/application/use-cases/get-workflow.js.map +1 -0
- package/dist/application/use-cases/list-workflows.d.ts +13 -0
- package/dist/application/use-cases/list-workflows.d.ts.map +1 -0
- package/dist/application/use-cases/list-workflows.js +21 -0
- package/dist/application/use-cases/list-workflows.js.map +1 -0
- package/dist/application/use-cases/validate-step-output.d.ts +20 -0
- package/dist/application/use-cases/validate-step-output.d.ts.map +1 -0
- package/dist/application/use-cases/validate-step-output.js +21 -0
- package/dist/application/use-cases/validate-step-output.js.map +1 -0
- package/dist/application/validation.d.ts +6 -0
- package/dist/application/validation.d.ts.map +1 -0
- package/dist/application/validation.js +19 -0
- package/dist/application/validation.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +106 -0
- package/dist/cli.js.map +1 -0
- package/dist/container.d.ts +22 -0
- package/dist/container.d.ts.map +1 -0
- package/dist/container.js +25 -0
- package/dist/container.js.map +1 -0
- package/dist/core/error-handler.d.ts +93 -0
- package/dist/core/error-handler.d.ts.map +1 -0
- package/dist/core/error-handler.js +336 -0
- package/dist/core/error-handler.js.map +1 -0
- package/dist/domain/index.d.ts +3 -0
- package/dist/domain/index.d.ts.map +1 -0
- package/dist/domain/index.js +6 -0
- package/dist/domain/index.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +30 -0
- package/dist/index.js.map +1 -0
- package/dist/infrastructure/index.d.ts +3 -0
- package/dist/infrastructure/index.d.ts.map +1 -0
- package/dist/infrastructure/index.js +6 -0
- package/dist/infrastructure/index.js.map +1 -0
- package/dist/infrastructure/rpc/handler.d.ts +26 -0
- package/dist/infrastructure/rpc/handler.d.ts.map +1 -0
- package/dist/infrastructure/rpc/handler.js +91 -0
- package/dist/infrastructure/rpc/handler.js.map +1 -0
- package/dist/infrastructure/rpc/index.d.ts +2 -0
- package/dist/infrastructure/rpc/index.d.ts.map +1 -0
- package/dist/infrastructure/rpc/index.js +5 -0
- package/dist/infrastructure/rpc/index.js.map +1 -0
- package/dist/infrastructure/rpc/server.d.ts +4 -0
- package/dist/infrastructure/rpc/server.d.ts.map +1 -0
- package/dist/infrastructure/rpc/server.js +40 -0
- package/dist/infrastructure/rpc/server.js.map +1 -0
- package/dist/infrastructure/storage/caching-workflow-storage.d.ts +22 -0
- package/dist/infrastructure/storage/caching-workflow-storage.d.ts.map +1 -0
- package/dist/infrastructure/storage/caching-workflow-storage.js +61 -0
- package/dist/infrastructure/storage/caching-workflow-storage.js.map +1 -0
- package/dist/infrastructure/storage/file-workflow-storage.d.ts +56 -0
- package/dist/infrastructure/storage/file-workflow-storage.d.ts.map +1 -0
- package/dist/infrastructure/storage/file-workflow-storage.js +206 -0
- package/dist/infrastructure/storage/file-workflow-storage.js.map +1 -0
- package/dist/infrastructure/storage/in-memory-storage.d.ts +17 -0
- package/dist/infrastructure/storage/in-memory-storage.d.ts.map +1 -0
- package/dist/infrastructure/storage/in-memory-storage.js +43 -0
- package/dist/infrastructure/storage/in-memory-storage.js.map +1 -0
- package/dist/infrastructure/storage/index.d.ts +6 -0
- package/dist/infrastructure/storage/index.d.ts.map +1 -0
- package/dist/infrastructure/storage/index.js +9 -0
- package/dist/infrastructure/storage/index.js.map +1 -0
- package/dist/infrastructure/storage/schema-validating-workflow-storage.d.ts +23 -0
- package/dist/infrastructure/storage/schema-validating-workflow-storage.d.ts.map +1 -0
- package/dist/infrastructure/storage/schema-validating-workflow-storage.js +70 -0
- package/dist/infrastructure/storage/schema-validating-workflow-storage.js.map +1 -0
- package/dist/infrastructure/storage/storage.d.ts +16 -0
- package/dist/infrastructure/storage/storage.d.ts.map +1 -0
- package/dist/infrastructure/storage/storage.js +32 -0
- package/dist/infrastructure/storage/storage.js.map +1 -0
- package/dist/mcp-server-simple.js +391 -0
- package/dist/mcp-server.d.ts +3 -0
- package/dist/mcp-server.d.ts.map +1 -0
- package/dist/mcp-server.js +223 -0
- package/dist/mcp-server.js.map +1 -0
- package/dist/tools/mcp_initialize.d.ts +3 -0
- package/dist/tools/mcp_initialize.d.ts.map +1 -0
- package/dist/tools/mcp_initialize.js +52 -0
- package/dist/tools/mcp_initialize.js.map +1 -0
- package/dist/tools/mcp_shutdown.d.ts +3 -0
- package/dist/tools/mcp_shutdown.d.ts.map +1 -0
- package/dist/tools/mcp_shutdown.js +11 -0
- package/dist/tools/mcp_shutdown.js.map +1 -0
- package/dist/tools/mcp_tools_list.d.ts +3 -0
- package/dist/tools/mcp_tools_list.d.ts.map +1 -0
- package/dist/tools/mcp_tools_list.js +61 -0
- package/dist/tools/mcp_tools_list.js.map +1 -0
- package/dist/types/mcp-types.d.ts +251 -0
- package/dist/types/mcp-types.d.ts.map +1 -0
- package/dist/types/mcp-types.js +27 -0
- package/dist/types/mcp-types.js.map +1 -0
- package/dist/types/server.d.ts +5 -0
- package/dist/types/server.d.ts.map +1 -0
- package/dist/types/server.js +3 -0
- package/dist/types/server.js.map +1 -0
- package/dist/types/storage.d.ts +27 -0
- package/dist/types/storage.d.ts.map +1 -0
- package/dist/types/storage.js +6 -0
- package/dist/types/storage.js.map +1 -0
- package/dist/types/workflow-types.d.ts +251 -0
- package/dist/types/workflow-types.d.ts.map +1 -0
- package/dist/types/workflow-types.js +5 -0
- package/dist/types/workflow-types.js.map +1 -0
- package/dist/utils/condition-evaluator.d.ts +32 -0
- package/dist/utils/condition-evaluator.d.ts.map +1 -0
- package/dist/utils/condition-evaluator.js +105 -0
- package/dist/utils/condition-evaluator.js.map +1 -0
- package/dist/utils/config.d.ts +195 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +332 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/validation/request-validator.d.ts +9 -0
- package/dist/validation/request-validator.d.ts.map +1 -0
- package/dist/validation/request-validator.js +32 -0
- package/dist/validation/request-validator.js.map +1 -0
- package/dist/validation/response-validator.d.ts +9 -0
- package/dist/validation/response-validator.d.ts.map +1 -0
- package/dist/validation/response-validator.js +83 -0
- package/dist/validation/response-validator.js.map +1 -0
- package/dist/validation/schemas.d.ts +6 -0
- package/dist/validation/schemas.d.ts.map +1 -0
- package/dist/validation/schemas.js +52 -0
- package/dist/validation/schemas.js.map +1 -0
- package/package.json +48 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// MCP Protocol Type Definitions
|
|
3
|
+
// Model Context Protocol (MCP) specification types
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.MCPErrorCodes = void 0;
|
|
6
|
+
// =============================================================================
|
|
7
|
+
// MCP ERROR CODES
|
|
8
|
+
// =============================================================================
|
|
9
|
+
var MCPErrorCodes;
|
|
10
|
+
(function (MCPErrorCodes) {
|
|
11
|
+
// Standard JSON-RPC 2.0 error codes
|
|
12
|
+
MCPErrorCodes[MCPErrorCodes["PARSE_ERROR"] = -32700] = "PARSE_ERROR";
|
|
13
|
+
MCPErrorCodes[MCPErrorCodes["INVALID_REQUEST"] = -32600] = "INVALID_REQUEST";
|
|
14
|
+
MCPErrorCodes[MCPErrorCodes["METHOD_NOT_FOUND"] = -32601] = "METHOD_NOT_FOUND";
|
|
15
|
+
MCPErrorCodes[MCPErrorCodes["INVALID_PARAMS"] = -32602] = "INVALID_PARAMS";
|
|
16
|
+
MCPErrorCodes[MCPErrorCodes["INTERNAL_ERROR"] = -32603] = "INTERNAL_ERROR";
|
|
17
|
+
// MCP-specific error codes (-32000 to -32099)
|
|
18
|
+
MCPErrorCodes[MCPErrorCodes["SERVER_ERROR"] = -32000] = "SERVER_ERROR";
|
|
19
|
+
MCPErrorCodes[MCPErrorCodes["WORKFLOW_NOT_FOUND"] = -32001] = "WORKFLOW_NOT_FOUND";
|
|
20
|
+
MCPErrorCodes[MCPErrorCodes["INVALID_WORKFLOW"] = -32002] = "INVALID_WORKFLOW";
|
|
21
|
+
MCPErrorCodes[MCPErrorCodes["STEP_NOT_FOUND"] = -32003] = "STEP_NOT_FOUND";
|
|
22
|
+
MCPErrorCodes[MCPErrorCodes["VALIDATION_ERROR"] = -32004] = "VALIDATION_ERROR";
|
|
23
|
+
MCPErrorCodes[MCPErrorCodes["STATE_ERROR"] = -32005] = "STATE_ERROR";
|
|
24
|
+
MCPErrorCodes[MCPErrorCodes["STORAGE_ERROR"] = -32006] = "STORAGE_ERROR";
|
|
25
|
+
MCPErrorCodes[MCPErrorCodes["SECURITY_ERROR"] = -32007] = "SECURITY_ERROR";
|
|
26
|
+
})(MCPErrorCodes || (exports.MCPErrorCodes = MCPErrorCodes = {}));
|
|
27
|
+
//# sourceMappingURL=mcp-types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-types.js","sourceRoot":"","sources":["../../src/types/mcp-types.ts"],"names":[],"mappings":";AAAA,gCAAgC;AAChC,mDAAmD;;;AAyGnD,gFAAgF;AAChF,kBAAkB;AAClB,gFAAgF;AAEhF,IAAY,aAiBX;AAjBD,WAAY,aAAa;IACvB,oCAAoC;IACpC,oEAAoB,CAAA;IACpB,4EAAwB,CAAA;IACxB,8EAAyB,CAAA;IACzB,0EAAuB,CAAA;IACvB,0EAAuB,CAAA;IAEvB,8CAA8C;IAC9C,sEAAqB,CAAA;IACrB,kFAA2B,CAAA;IAC3B,8EAAyB,CAAA;IACzB,0EAAuB,CAAA;IACvB,8EAAyB,CAAA;IACzB,oEAAoB,CAAA;IACpB,wEAAsB,CAAA;IACtB,0EAAuB,CAAA;AACzB,CAAC,EAjBW,aAAa,6BAAb,aAAa,QAiBxB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/types/server.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,oBAAoB;IACnC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/types/server.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { Workflow, WorkflowSummary } from './mcp-types';
|
|
2
|
+
/**
|
|
3
|
+
* Generic interface for any workflow storage backend.
|
|
4
|
+
* The default implementation uses the local filesystem, but additional
|
|
5
|
+
* backends (e.g., in-memory, database, remote) can implement this contract.
|
|
6
|
+
*/
|
|
7
|
+
export interface IWorkflowStorage {
|
|
8
|
+
/**
|
|
9
|
+
* Load and return all workflows available in this storage backend.
|
|
10
|
+
*/
|
|
11
|
+
loadAllWorkflows(): Promise<Workflow[]>;
|
|
12
|
+
/**
|
|
13
|
+
* Retrieve a single workflow by its unique identifier.
|
|
14
|
+
* @param id The workflow `id` field.
|
|
15
|
+
*/
|
|
16
|
+
getWorkflowById(id: string): Promise<Workflow | null>;
|
|
17
|
+
/**
|
|
18
|
+
* Return lightweight summaries for all workflows (used by `workflow_list`).
|
|
19
|
+
*/
|
|
20
|
+
listWorkflowSummaries(): Promise<WorkflowSummary[]>;
|
|
21
|
+
/**
|
|
22
|
+
* (Optional) Persist or update a workflow definition.
|
|
23
|
+
* Not used by the current read-only MVP but included for future parity.
|
|
24
|
+
*/
|
|
25
|
+
save?(workflow: Workflow): Promise<void>;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=storage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/types/storage.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAExD;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,gBAAgB,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IAExC;;;OAGG;IACH,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;IAEtD;;OAEG;IACH,qBAAqB,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;IAEpD;;;OAGG;IACH,IAAI,CAAC,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1C"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// =============================================================================
|
|
3
|
+
// WORKFLOW STORAGE INTERFACES
|
|
4
|
+
// =============================================================================
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
//# sourceMappingURL=storage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/types/storage.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,8BAA8B;AAC9B,gFAAgF"}
|
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
export interface Workflow {
|
|
2
|
+
id: string;
|
|
3
|
+
name: string;
|
|
4
|
+
description: string;
|
|
5
|
+
version: string;
|
|
6
|
+
preconditions?: string[];
|
|
7
|
+
clarificationPrompts?: string[];
|
|
8
|
+
steps: WorkflowStep[];
|
|
9
|
+
metaGuidance?: string[];
|
|
10
|
+
}
|
|
11
|
+
export interface WorkflowStep {
|
|
12
|
+
id: string;
|
|
13
|
+
title: string;
|
|
14
|
+
prompt: string;
|
|
15
|
+
guidance?: string[];
|
|
16
|
+
askForFiles?: boolean;
|
|
17
|
+
requireConfirmation?: boolean;
|
|
18
|
+
runCondition?: object;
|
|
19
|
+
}
|
|
20
|
+
export interface WorkflowValidationResult {
|
|
21
|
+
valid: boolean;
|
|
22
|
+
errors: WorkflowValidationError[];
|
|
23
|
+
warnings?: WorkflowValidationWarning[];
|
|
24
|
+
}
|
|
25
|
+
export interface WorkflowValidationError {
|
|
26
|
+
path: string;
|
|
27
|
+
message: string;
|
|
28
|
+
code: string;
|
|
29
|
+
field?: string;
|
|
30
|
+
}
|
|
31
|
+
export interface WorkflowValidationWarning {
|
|
32
|
+
path: string;
|
|
33
|
+
message: string;
|
|
34
|
+
code: string;
|
|
35
|
+
field?: string;
|
|
36
|
+
}
|
|
37
|
+
export interface WorkflowValidationRule {
|
|
38
|
+
type: 'required' | 'pattern' | 'length' | 'custom' | 'schema';
|
|
39
|
+
field: string;
|
|
40
|
+
message: string;
|
|
41
|
+
validator?: (value: any, context?: any) => boolean;
|
|
42
|
+
schema?: Record<string, any>;
|
|
43
|
+
}
|
|
44
|
+
export interface WorkflowExecution {
|
|
45
|
+
id: string;
|
|
46
|
+
workflowId: string;
|
|
47
|
+
status: WorkflowExecutionStatus;
|
|
48
|
+
state: WorkflowExecutionState;
|
|
49
|
+
startedAt: Date;
|
|
50
|
+
updatedAt: Date;
|
|
51
|
+
completedAt?: Date;
|
|
52
|
+
error?: WorkflowExecutionError;
|
|
53
|
+
}
|
|
54
|
+
export type WorkflowExecutionStatus = 'initialized' | 'running' | 'paused' | 'completed' | 'failed' | 'cancelled';
|
|
55
|
+
export interface WorkflowExecutionState {
|
|
56
|
+
currentStep?: string;
|
|
57
|
+
completedSteps: string[];
|
|
58
|
+
context: Record<string, any>;
|
|
59
|
+
stepResults: Record<string, WorkflowStepResult>;
|
|
60
|
+
metadata: WorkflowExecutionMetadata;
|
|
61
|
+
}
|
|
62
|
+
export interface WorkflowStepResult {
|
|
63
|
+
stepId: string;
|
|
64
|
+
status: 'pending' | 'running' | 'completed' | 'failed' | 'skipped';
|
|
65
|
+
startedAt?: Date;
|
|
66
|
+
completedAt?: Date;
|
|
67
|
+
output?: string;
|
|
68
|
+
error?: string;
|
|
69
|
+
validationResult?: WorkflowValidationResult;
|
|
70
|
+
}
|
|
71
|
+
export interface WorkflowExecutionMetadata {
|
|
72
|
+
totalSteps: number;
|
|
73
|
+
completedSteps: number;
|
|
74
|
+
progress: number;
|
|
75
|
+
estimatedTimeRemaining?: number;
|
|
76
|
+
lastActivity: Date;
|
|
77
|
+
}
|
|
78
|
+
export interface WorkflowExecutionError {
|
|
79
|
+
code: string;
|
|
80
|
+
message: string;
|
|
81
|
+
stepId?: string;
|
|
82
|
+
details?: Record<string, any>;
|
|
83
|
+
}
|
|
84
|
+
export interface WorkflowGuidance {
|
|
85
|
+
prompt: string;
|
|
86
|
+
modelHint?: string;
|
|
87
|
+
requiresConfirmation?: boolean;
|
|
88
|
+
validationCriteria?: string[];
|
|
89
|
+
context?: Record<string, any>;
|
|
90
|
+
suggestions?: string[];
|
|
91
|
+
}
|
|
92
|
+
export interface WorkflowStepGuidance {
|
|
93
|
+
step: WorkflowStep;
|
|
94
|
+
guidance: WorkflowGuidance;
|
|
95
|
+
isComplete: boolean;
|
|
96
|
+
nextStep?: string;
|
|
97
|
+
progress: number;
|
|
98
|
+
}
|
|
99
|
+
export interface WorkflowStorage {
|
|
100
|
+
type: 'file' | 'database' | 'memory';
|
|
101
|
+
path?: string;
|
|
102
|
+
connectionString?: string;
|
|
103
|
+
}
|
|
104
|
+
export interface WorkflowMetadata {
|
|
105
|
+
id: string;
|
|
106
|
+
name: string;
|
|
107
|
+
description: string;
|
|
108
|
+
category: string;
|
|
109
|
+
version: string;
|
|
110
|
+
author?: string;
|
|
111
|
+
tags?: string[];
|
|
112
|
+
createdAt: Date;
|
|
113
|
+
updatedAt: Date;
|
|
114
|
+
usageCount: number;
|
|
115
|
+
rating?: number;
|
|
116
|
+
complexity: 'simple' | 'medium' | 'complex';
|
|
117
|
+
estimatedDuration: number;
|
|
118
|
+
}
|
|
119
|
+
export interface WorkflowSearchCriteria {
|
|
120
|
+
category?: string;
|
|
121
|
+
tags?: string[];
|
|
122
|
+
complexity?: 'simple' | 'medium' | 'complex';
|
|
123
|
+
maxDuration?: number;
|
|
124
|
+
author?: string;
|
|
125
|
+
rating?: number;
|
|
126
|
+
searchTerm?: string;
|
|
127
|
+
}
|
|
128
|
+
export type WorkflowCategory = 'development' | 'review' | 'documentation' | 'testing' | 'deployment' | 'maintenance' | 'debugging' | 'optimization' | 'security' | 'migration' | 'custom';
|
|
129
|
+
export interface WorkflowTag {
|
|
130
|
+
name: string;
|
|
131
|
+
description: string;
|
|
132
|
+
color?: string;
|
|
133
|
+
}
|
|
134
|
+
export interface WorkflowVersion {
|
|
135
|
+
version: string;
|
|
136
|
+
changelog: string;
|
|
137
|
+
breakingChanges: boolean;
|
|
138
|
+
deprecated: boolean;
|
|
139
|
+
minServerVersion?: string;
|
|
140
|
+
maxServerVersion?: string;
|
|
141
|
+
}
|
|
142
|
+
export interface WorkflowVersionInfo {
|
|
143
|
+
currentVersion: string;
|
|
144
|
+
availableVersions: WorkflowVersion[];
|
|
145
|
+
updateAvailable: boolean;
|
|
146
|
+
latestVersion?: string;
|
|
147
|
+
}
|
|
148
|
+
export interface WorkflowTemplate {
|
|
149
|
+
id: string;
|
|
150
|
+
name: string;
|
|
151
|
+
description: string;
|
|
152
|
+
category: WorkflowCategory;
|
|
153
|
+
template: Workflow;
|
|
154
|
+
variables: WorkflowTemplateVariable[];
|
|
155
|
+
examples: WorkflowTemplateExample[];
|
|
156
|
+
}
|
|
157
|
+
export interface WorkflowTemplateVariable {
|
|
158
|
+
name: string;
|
|
159
|
+
description: string;
|
|
160
|
+
type: 'string' | 'number' | 'boolean' | 'array' | 'object';
|
|
161
|
+
required: boolean;
|
|
162
|
+
defaultValue?: any;
|
|
163
|
+
validation?: Record<string, any>;
|
|
164
|
+
}
|
|
165
|
+
export interface WorkflowTemplateExample {
|
|
166
|
+
name: string;
|
|
167
|
+
description: string;
|
|
168
|
+
variables: Record<string, any>;
|
|
169
|
+
result: Workflow;
|
|
170
|
+
}
|
|
171
|
+
export interface WorkflowAnalytics {
|
|
172
|
+
workflowId: string;
|
|
173
|
+
totalExecutions: number;
|
|
174
|
+
successfulExecutions: number;
|
|
175
|
+
failedExecutions: number;
|
|
176
|
+
averageExecutionTime: number;
|
|
177
|
+
averageStepsCompleted: number;
|
|
178
|
+
popularSteps: string[];
|
|
179
|
+
commonErrors: string[];
|
|
180
|
+
userSatisfaction: number;
|
|
181
|
+
lastExecuted: Date;
|
|
182
|
+
}
|
|
183
|
+
export interface WorkflowExecutionAnalytics {
|
|
184
|
+
executionId: string;
|
|
185
|
+
workflowId: string;
|
|
186
|
+
duration: number;
|
|
187
|
+
stepsCompleted: number;
|
|
188
|
+
totalSteps: number;
|
|
189
|
+
success: boolean;
|
|
190
|
+
error?: string;
|
|
191
|
+
userFeedback?: number;
|
|
192
|
+
performanceMetrics: WorkflowPerformanceMetrics;
|
|
193
|
+
}
|
|
194
|
+
export interface WorkflowPerformanceMetrics {
|
|
195
|
+
stepExecutionTimes: Record<string, number>;
|
|
196
|
+
memoryUsage: number;
|
|
197
|
+
cpuUsage: number;
|
|
198
|
+
networkRequests: number;
|
|
199
|
+
cacheHits: number;
|
|
200
|
+
cacheMisses: number;
|
|
201
|
+
}
|
|
202
|
+
export interface WorkflowPlugin {
|
|
203
|
+
id: string;
|
|
204
|
+
name: string;
|
|
205
|
+
version: string;
|
|
206
|
+
description: string;
|
|
207
|
+
author: string;
|
|
208
|
+
hooks: WorkflowPluginHook[];
|
|
209
|
+
commands: WorkflowPluginCommand[];
|
|
210
|
+
dependencies?: string[];
|
|
211
|
+
}
|
|
212
|
+
export interface WorkflowPluginHook {
|
|
213
|
+
name: string;
|
|
214
|
+
event: 'beforeStep' | 'afterStep' | 'beforeWorkflow' | 'afterWorkflow' | 'onError';
|
|
215
|
+
handler: (context: WorkflowPluginContext) => Promise<void>;
|
|
216
|
+
}
|
|
217
|
+
export interface WorkflowPluginCommand {
|
|
218
|
+
name: string;
|
|
219
|
+
description: string;
|
|
220
|
+
parameters: Record<string, any>;
|
|
221
|
+
handler: (params: Record<string, any>) => Promise<any>;
|
|
222
|
+
}
|
|
223
|
+
export interface WorkflowPluginContext {
|
|
224
|
+
workflowId: string;
|
|
225
|
+
executionId: string;
|
|
226
|
+
stepId?: string;
|
|
227
|
+
data: Record<string, any>;
|
|
228
|
+
state: WorkflowExecutionState;
|
|
229
|
+
}
|
|
230
|
+
export type WorkflowStepStatus = 'pending' | 'running' | 'completed' | 'failed' | 'skipped' | 'cancelled';
|
|
231
|
+
export type WorkflowComplexity = 'simple' | 'medium' | 'complex';
|
|
232
|
+
export interface WorkflowSummary {
|
|
233
|
+
id: string;
|
|
234
|
+
name: string;
|
|
235
|
+
description: string;
|
|
236
|
+
category: WorkflowCategory;
|
|
237
|
+
version: string;
|
|
238
|
+
complexity: WorkflowComplexity;
|
|
239
|
+
estimatedDuration: number;
|
|
240
|
+
tags: string[];
|
|
241
|
+
rating?: number;
|
|
242
|
+
usageCount: number;
|
|
243
|
+
}
|
|
244
|
+
export interface WorkflowSearchResult {
|
|
245
|
+
workflows: WorkflowSummary[];
|
|
246
|
+
total: number;
|
|
247
|
+
page: number;
|
|
248
|
+
pageSize: number;
|
|
249
|
+
filters: WorkflowSearchCriteria;
|
|
250
|
+
}
|
|
251
|
+
//# sourceMappingURL=workflow-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-types.d.ts","sourceRoot":"","sources":["../../src/types/workflow-types.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAChC,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAMD,MAAM,WAAW,wBAAwB;IACvC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,uBAAuB,EAAE,CAAC;IAClC,QAAQ,CAAC,EAAE,yBAAyB,EAAE,CAAC;CACxC;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC9D,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,GAAG,KAAK,OAAO,CAAC;IACnD,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC9B;AAMD,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,uBAAuB,CAAC;IAChC,KAAK,EAAE,sBAAsB,CAAC;IAC9B,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAChB,WAAW,CAAC,EAAE,IAAI,CAAC;IACnB,KAAK,CAAC,EAAE,sBAAsB,CAAC;CAChC;AAED,MAAM,MAAM,uBAAuB,GAC/B,aAAa,GACb,SAAS,GACT,QAAQ,GACR,WAAW,GACX,QAAQ,GACR,WAAW,CAAC;AAEhB,MAAM,WAAW,sBAAsB;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAChD,QAAQ,EAAE,yBAAyB,CAAC;CACrC;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,SAAS,CAAC;IACnE,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,WAAW,CAAC,EAAE,IAAI,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,wBAAwB,CAAC;CAC7C;AAED,MAAM,WAAW,yBAAyB;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,YAAY,EAAE,IAAI,CAAC;CACpB;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC/B;AAMD,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,YAAY,CAAC;IACnB,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAMD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,QAAQ,CAAC;IACrC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IAC5C,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAMD,MAAM,MAAM,gBAAgB,GACxB,aAAa,GACb,QAAQ,GACR,eAAe,GACf,SAAS,GACT,YAAY,GACZ,aAAa,GACb,WAAW,GACX,cAAc,GACd,UAAU,GACV,WAAW,GACX,QAAQ,CAAC;AAEb,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAMD,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,OAAO,CAAC;IACzB,UAAU,EAAE,OAAO,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,mBAAmB;IAClC,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,eAAe,EAAE,CAAC;IACrC,eAAe,EAAE,OAAO,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAMD,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,QAAQ,EAAE,QAAQ,CAAC;IACnB,SAAS,EAAE,wBAAwB,EAAE,CAAC;IACtC,QAAQ,EAAE,uBAAuB,EAAE,CAAC;CACrC;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;IAC3D,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,GAAG,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC/B,MAAM,EAAE,QAAQ,CAAC;CAClB;AAMD,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,gBAAgB,EAAE,MAAM,CAAC;IACzB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,IAAI,CAAC;CACpB;AAED,MAAM,WAAW,0BAA0B;IACzC,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,0BAA0B,CAAC;CAChD;AAED,MAAM,WAAW,0BAA0B;IACzC,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3C,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAMD,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,kBAAkB,EAAE,CAAC;IAC5B,QAAQ,EAAE,qBAAqB,EAAE,CAAC;IAClC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,YAAY,GAAG,WAAW,GAAG,gBAAgB,GAAG,eAAe,GAAG,SAAS,CAAC;IACnF,OAAO,EAAE,CAAC,OAAO,EAAE,qBAAqB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5D;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAChC,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;CACxD;AAED,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC1B,KAAK,EAAE,sBAAsB,CAAC;CAC/B;AAMD,MAAM,MAAM,kBAAkB,GAC1B,SAAS,GACT,SAAS,GACT,WAAW,GACX,QAAQ,GACR,SAAS,GACT,WAAW,CAAC;AAEhB,MAAM,MAAM,kBAAkB,GAC1B,QAAQ,GACR,QAAQ,GACR,SAAS,CAAC;AAEd,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,kBAAkB,CAAC;IAC/B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,eAAe,EAAE,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,sBAAsB,CAAC;CACjC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-types.js","sourceRoot":"","sources":["../../src/types/workflow-types.ts"],"names":[],"mappings":";AAAA,mCAAmC;AACnC,6CAA6C"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Safe condition evaluator for workflow step runCondition expressions.
|
|
3
|
+
* Supports a limited set of operators to prevent code injection.
|
|
4
|
+
*/
|
|
5
|
+
export interface ConditionContext {
|
|
6
|
+
[key: string]: any;
|
|
7
|
+
}
|
|
8
|
+
export interface Condition {
|
|
9
|
+
var?: string;
|
|
10
|
+
equals?: any;
|
|
11
|
+
not_equals?: any;
|
|
12
|
+
gt?: number;
|
|
13
|
+
gte?: number;
|
|
14
|
+
lt?: number;
|
|
15
|
+
lte?: number;
|
|
16
|
+
and?: Condition[];
|
|
17
|
+
or?: Condition[];
|
|
18
|
+
not?: Condition;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Evaluates a condition expression against a context.
|
|
22
|
+
* Returns true if the condition passes, false otherwise.
|
|
23
|
+
* If condition is null/undefined, returns true (step is eligible).
|
|
24
|
+
* If evaluation fails, returns false (step is skipped for safety).
|
|
25
|
+
*/
|
|
26
|
+
export declare function evaluateCondition(condition: Condition | null | undefined, context?: ConditionContext): boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Validates that a condition uses only supported operators.
|
|
29
|
+
* Throws an error if unsupported operators are found.
|
|
30
|
+
*/
|
|
31
|
+
export declare function validateCondition(condition: any): void;
|
|
32
|
+
//# sourceMappingURL=condition-evaluator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"condition-evaluator.d.ts","sourceRoot":"","sources":["../../src/utils/condition-evaluator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,SAAS;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,GAAG,CAAC;IACb,UAAU,CAAC,EAAE,GAAG,CAAC;IACjB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,SAAS,EAAE,CAAC;IAClB,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC;IACjB,GAAG,CAAC,EAAE,SAAS,CAAC;CACjB;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,SAAS,GAAG,IAAI,GAAG,SAAS,EACvC,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAkBT;AAsDD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,GAAG,GAAG,IAAI,CA0BtD"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Safe condition evaluator for workflow step runCondition expressions.
|
|
4
|
+
* Supports a limited set of operators to prevent code injection.
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.evaluateCondition = evaluateCondition;
|
|
8
|
+
exports.validateCondition = validateCondition;
|
|
9
|
+
/**
|
|
10
|
+
* Evaluates a condition expression against a context.
|
|
11
|
+
* Returns true if the condition passes, false otherwise.
|
|
12
|
+
* If condition is null/undefined, returns true (step is eligible).
|
|
13
|
+
* If evaluation fails, returns false (step is skipped for safety).
|
|
14
|
+
*/
|
|
15
|
+
function evaluateCondition(condition, context = {}) {
|
|
16
|
+
// No condition means step is always eligible
|
|
17
|
+
if (!condition || typeof condition !== 'object') {
|
|
18
|
+
return true;
|
|
19
|
+
}
|
|
20
|
+
// Empty object means no condition, so step is eligible
|
|
21
|
+
if (Object.keys(condition).length === 0) {
|
|
22
|
+
return true;
|
|
23
|
+
}
|
|
24
|
+
try {
|
|
25
|
+
return evaluateConditionUnsafe(condition, context);
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
// Log error in production, but return false for safety
|
|
29
|
+
console.warn('Condition evaluation failed:', error);
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
function evaluateConditionUnsafe(condition, context) {
|
|
34
|
+
// Variable reference
|
|
35
|
+
if (condition.var !== undefined) {
|
|
36
|
+
const value = context[condition.var];
|
|
37
|
+
// Comparison operators
|
|
38
|
+
if (condition.equals !== undefined) {
|
|
39
|
+
return value === condition.equals;
|
|
40
|
+
}
|
|
41
|
+
if (condition.not_equals !== undefined) {
|
|
42
|
+
return value !== condition.not_equals;
|
|
43
|
+
}
|
|
44
|
+
if (condition.gt !== undefined) {
|
|
45
|
+
return typeof value === 'number' && value > condition.gt;
|
|
46
|
+
}
|
|
47
|
+
if (condition.gte !== undefined) {
|
|
48
|
+
return typeof value === 'number' && value >= condition.gte;
|
|
49
|
+
}
|
|
50
|
+
if (condition.lt !== undefined) {
|
|
51
|
+
return typeof value === 'number' && value < condition.lt;
|
|
52
|
+
}
|
|
53
|
+
if (condition.lte !== undefined) {
|
|
54
|
+
return typeof value === 'number' && value <= condition.lte;
|
|
55
|
+
}
|
|
56
|
+
// If only var is specified, check for truthiness
|
|
57
|
+
return !!value;
|
|
58
|
+
}
|
|
59
|
+
// Logical operators
|
|
60
|
+
if (condition.and !== undefined) {
|
|
61
|
+
if (!Array.isArray(condition.and)) {
|
|
62
|
+
throw new Error('and operator requires an array');
|
|
63
|
+
}
|
|
64
|
+
return condition.and.every(subCondition => evaluateConditionUnsafe(subCondition, context));
|
|
65
|
+
}
|
|
66
|
+
if (condition.or !== undefined) {
|
|
67
|
+
if (!Array.isArray(condition.or)) {
|
|
68
|
+
throw new Error('or operator requires an array');
|
|
69
|
+
}
|
|
70
|
+
return condition.or.some(subCondition => evaluateConditionUnsafe(subCondition, context));
|
|
71
|
+
}
|
|
72
|
+
if (condition.not !== undefined) {
|
|
73
|
+
return !evaluateConditionUnsafe(condition.not, context);
|
|
74
|
+
}
|
|
75
|
+
// Unknown condition format
|
|
76
|
+
throw new Error('Invalid condition format');
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Validates that a condition uses only supported operators.
|
|
80
|
+
* Throws an error if unsupported operators are found.
|
|
81
|
+
*/
|
|
82
|
+
function validateCondition(condition) {
|
|
83
|
+
if (!condition || typeof condition !== 'object') {
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
const supportedKeys = [
|
|
87
|
+
'var', 'equals', 'not_equals', 'gt', 'gte', 'lt', 'lte', 'and', 'or', 'not'
|
|
88
|
+
];
|
|
89
|
+
const conditionKeys = Object.keys(condition);
|
|
90
|
+
const unsupportedKeys = conditionKeys.filter(key => !supportedKeys.includes(key));
|
|
91
|
+
if (unsupportedKeys.length > 0) {
|
|
92
|
+
throw new Error(`Unsupported condition operators: ${unsupportedKeys.join(', ')}`);
|
|
93
|
+
}
|
|
94
|
+
// Recursively validate nested conditions
|
|
95
|
+
if (condition.and && Array.isArray(condition.and)) {
|
|
96
|
+
condition.and.forEach(validateCondition);
|
|
97
|
+
}
|
|
98
|
+
if (condition.or && Array.isArray(condition.or)) {
|
|
99
|
+
condition.or.forEach(validateCondition);
|
|
100
|
+
}
|
|
101
|
+
if (condition.not) {
|
|
102
|
+
validateCondition(condition.not);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=condition-evaluator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"condition-evaluator.js","sourceRoot":"","sources":["../../src/utils/condition-evaluator.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAyBH,8CAqBC;AA0DD,8CA0BC;AA/GD;;;;;GAKG;AACH,SAAgB,iBAAiB,CAC/B,SAAuC,EACvC,UAA4B,EAAE;IAE9B,6CAA6C;IAC7C,IAAI,CAAC,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;QAChD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,uDAAuD;IACvD,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACH,OAAO,uBAAuB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,uDAAuD;QACvD,OAAO,CAAC,IAAI,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;QACpD,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,uBAAuB,CAAC,SAAoB,EAAE,OAAyB;IAC9E,qBAAqB;IACrB,IAAI,SAAS,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;QAErC,uBAAuB;QACvB,IAAI,SAAS,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACnC,OAAO,KAAK,KAAK,SAAS,CAAC,MAAM,CAAC;QACpC,CAAC;QACD,IAAI,SAAS,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YACvC,OAAO,KAAK,KAAK,SAAS,CAAC,UAAU,CAAC;QACxC,CAAC;QACD,IAAI,SAAS,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;YAC/B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,GAAG,SAAS,CAAC,EAAE,CAAC;QAC3D,CAAC;QACD,IAAI,SAAS,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;YAChC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,IAAI,SAAS,CAAC,GAAG,CAAC;QAC7D,CAAC;QACD,IAAI,SAAS,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;YAC/B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,GAAG,SAAS,CAAC,EAAE,CAAC;QAC3D,CAAC;QACD,IAAI,SAAS,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;YAChC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,IAAI,SAAS,CAAC,GAAG,CAAC;QAC7D,CAAC;QAED,iDAAiD;QACjD,OAAO,CAAC,CAAC,KAAK,CAAC;IACjB,CAAC;IAED,oBAAoB;IACpB,IAAI,SAAS,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;QAChC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACpD,CAAC;QACD,OAAO,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC,uBAAuB,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC;IAC7F,CAAC;IAED,IAAI,SAAS,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;QAC/B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACnD,CAAC;QACD,OAAO,SAAS,CAAC,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,uBAAuB,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC;IAC3F,CAAC;IAED,IAAI,SAAS,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO,CAAC,uBAAuB,CAAC,SAAS,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC1D,CAAC;IAED,2BAA2B;IAC3B,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;AAC9C,CAAC;AAED;;;GAGG;AACH,SAAgB,iBAAiB,CAAC,SAAc;IAC9C,IAAI,CAAC,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE,CAAC;QAChD,OAAO;IACT,CAAC;IAED,MAAM,aAAa,GAAG;QACpB,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK;KAC5E,CAAC;IAEF,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC7C,MAAM,eAAe,GAAG,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IAElF,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,oCAAoC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACpF,CAAC;IAED,yCAAyC;IACzC,IAAI,SAAS,CAAC,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;QAClD,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC3C,CAAC;IACD,IAAI,SAAS,CAAC,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC;QAChD,SAAS,CAAC,EAAE,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC1C,CAAC;IACD,IAAI,SAAS,CAAC,GAAG,EAAE,CAAC;QAClB,iBAAiB,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC;AACH,CAAC"}
|