@orbytautomation/engine 0.4.1 → 0.6.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/core/OrbytEngine.d.ts +3 -21
- package/dist/core/OrbytEngine.d.ts.map +1 -1
- package/dist/core/OrbytEngine.js +48 -139
- package/dist/core/OrbytEngine.js.map +1 -1
- package/dist/errors/ErrorDebugger.d.ts +78 -25
- package/dist/errors/ErrorDebugger.d.ts.map +1 -1
- package/dist/errors/ErrorDebugger.js +383 -2
- package/dist/errors/ErrorDebugger.js.map +1 -1
- package/dist/errors/ErrorDetector.d.ts +107 -5
- package/dist/errors/ErrorDetector.d.ts.map +1 -1
- package/dist/errors/ErrorDetector.js +195 -40
- package/dist/errors/ErrorDetector.js.map +1 -1
- package/dist/errors/ErrorFormatter.d.ts +51 -0
- package/dist/errors/ErrorFormatter.d.ts.map +1 -1
- package/dist/errors/ErrorFormatter.js +128 -0
- package/dist/errors/ErrorFormatter.js.map +1 -1
- package/dist/errors/ErrorHandler.d.ts +93 -7
- package/dist/errors/ErrorHandler.d.ts.map +1 -1
- package/dist/errors/ErrorHandler.js +91 -42
- package/dist/errors/ErrorHandler.js.map +1 -1
- package/dist/errors/OrbytError.d.ts +28 -0
- package/dist/errors/OrbytError.d.ts.map +1 -1
- package/dist/errors/OrbytError.js.map +1 -1
- package/dist/errors/SecurityErrors.d.ts +2 -25
- package/dist/errors/SecurityErrors.d.ts.map +1 -1
- package/dist/errors/SecurityErrors.js +5 -119
- package/dist/errors/SecurityErrors.js.map +1 -1
- package/dist/errors/WorkflowError.d.ts +11 -1
- package/dist/errors/WorkflowError.d.ts.map +1 -1
- package/dist/errors/WorkflowError.js +104 -0
- package/dist/errors/WorkflowError.js.map +1 -1
- package/dist/loader/WorkflowLoader.d.ts +77 -5
- package/dist/loader/WorkflowLoader.d.ts.map +1 -1
- package/dist/loader/WorkflowLoader.js +170 -35
- package/dist/loader/WorkflowLoader.js.map +1 -1
- package/dist/logging/EngineLogger.d.ts +240 -289
- package/dist/logging/EngineLogger.d.ts.map +1 -1
- package/dist/logging/EngineLogger.js +424 -842
- package/dist/logging/EngineLogger.js.map +1 -1
- package/dist/logging/LoggerManager.d.ts +111 -22
- package/dist/logging/LoggerManager.d.ts.map +1 -1
- package/dist/logging/LoggerManager.js +138 -32
- package/dist/logging/LoggerManager.js.map +1 -1
- package/dist/logging/index.d.ts.map +1 -1
- package/dist/logging/index.js.map +1 -1
- package/dist/parser/WorkflowParser.d.ts.map +1 -1
- package/dist/parser/WorkflowParser.js +0 -5
- package/dist/parser/WorkflowParser.js.map +1 -1
- package/dist/security/ReservedFields.d.ts +11 -0
- package/dist/security/ReservedFields.d.ts.map +1 -1
- package/dist/security/ReservedFields.js +71 -34
- package/dist/security/ReservedFields.js.map +1 -1
- package/dist/types/log-types.d.ts +134 -2
- package/dist/types/log-types.d.ts.map +1 -1
- package/dist/types/log-types.js +10 -0
- package/dist/types/log-types.js.map +1 -1
- package/package.json +1 -1
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
*
|
|
12
12
|
* @module security
|
|
13
13
|
*/
|
|
14
|
-
import { SecurityError
|
|
14
|
+
import { SecurityError } from '../errors/SecurityErrors.js';
|
|
15
15
|
import { RESERVED_ANNOTATION_PREFIXES, RESERVED_CONTEXT_FIELDS, RESERVED_STEP_FIELDS, RESERVED_WORKFLOW_FIELDS, SecurityErrorCode } from '../types/core-types.js';
|
|
16
16
|
/**
|
|
17
17
|
* Check if a field name is reserved
|
|
@@ -118,67 +118,104 @@ export function findReservedFields(obj, reservedList, checkPrefix = true) {
|
|
|
118
118
|
* @throws {SecurityError} If reserved fields are found
|
|
119
119
|
*/
|
|
120
120
|
export function validateWorkflowSecurity(workflow) {
|
|
121
|
+
// 1. Check top-level workflow fields for reserved/internal fields
|
|
122
|
+
for (const key of Object.keys(workflow)) {
|
|
123
|
+
if (isReservedWorkflowField(key)) {
|
|
124
|
+
const code = determineErrorCode(key);
|
|
125
|
+
const reason = getFieldReason(key);
|
|
126
|
+
const err = SecurityError.reservedFieldOverride(key, 'workflow (root level)', code === SecurityErrorCode.BILLING_FIELD_OVERRIDE ? 'billing' : 'internal');
|
|
127
|
+
err.reason = reason;
|
|
128
|
+
throw err;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
// 2. workflow.context fields
|
|
132
|
+
if (workflow.context && typeof workflow.context === 'object') {
|
|
133
|
+
const contextViolations = findReservedFields(workflow.context, RESERVED_CONTEXT_FIELDS);
|
|
134
|
+
if (contextViolations.length > 0) {
|
|
135
|
+
const key = contextViolations[0];
|
|
136
|
+
const code = determineErrorCode(key);
|
|
137
|
+
const reason = getFieldReason(key);
|
|
138
|
+
const err = SecurityError.reservedFieldOverride(key, 'workflow.context', code === SecurityErrorCode.BILLING_FIELD_OVERRIDE ? 'billing' : 'internal');
|
|
139
|
+
err.reason = reason;
|
|
140
|
+
throw err;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
// 3. Annotations
|
|
144
|
+
if (workflow.annotations && typeof workflow.annotations === 'object') {
|
|
145
|
+
for (const key of Object.keys(workflow.annotations)) {
|
|
146
|
+
if (isReservedAnnotation(key)) {
|
|
147
|
+
throw SecurityError.reservedAnnotation(key, 'workflow.annotations');
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
// 4. Steps
|
|
152
|
+
if (workflow.workflow?.steps && Array.isArray(workflow.workflow.steps)) {
|
|
153
|
+
for (let index = 0; index < workflow.workflow.steps.length; index++) {
|
|
154
|
+
const step = workflow.workflow.steps[index];
|
|
155
|
+
const stepViolations = findReservedFields(step, RESERVED_STEP_FIELDS);
|
|
156
|
+
if (stepViolations.length > 0) {
|
|
157
|
+
const key = stepViolations[0];
|
|
158
|
+
const code = determineErrorCode(key);
|
|
159
|
+
const reason = getFieldReason(key);
|
|
160
|
+
const err = SecurityError.reservedFieldOverride(key, `workflow.steps[${index}] (${step.id || 'unnamed'})`, code === SecurityErrorCode.BILLING_FIELD_OVERRIDE ? 'billing' : 'internal');
|
|
161
|
+
err.reason = reason;
|
|
162
|
+
throw err;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Collect all reserved field violations in a workflow (for advanced use/testing)
|
|
169
|
+
* Returns an array of violation objects with code, reason, and location
|
|
170
|
+
*/
|
|
171
|
+
export function getAllReservedFieldViolations(workflow) {
|
|
121
172
|
const violations = [];
|
|
122
|
-
// 1.
|
|
123
|
-
const
|
|
124
|
-
for (const field of topLevelViolations) {
|
|
173
|
+
// 1. Top-level
|
|
174
|
+
for (const key of findReservedFields(workflow, RESERVED_WORKFLOW_FIELDS)) {
|
|
125
175
|
violations.push({
|
|
126
|
-
|
|
176
|
+
field: key,
|
|
127
177
|
location: 'workflow (root level)',
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
reason: getFieldReason(field),
|
|
131
|
-
suggestion: `Remove '${field}' from your workflow YAML. The engine will inject this field automatically during execution.`,
|
|
178
|
+
code: determineErrorCode(key),
|
|
179
|
+
reason: getFieldReason(key),
|
|
132
180
|
});
|
|
133
181
|
}
|
|
134
|
-
// 2.
|
|
182
|
+
// 2. Context
|
|
135
183
|
if (workflow.context && typeof workflow.context === 'object') {
|
|
136
|
-
const
|
|
137
|
-
for (const field of contextViolations) {
|
|
184
|
+
for (const key of findReservedFields(workflow.context, RESERVED_CONTEXT_FIELDS)) {
|
|
138
185
|
violations.push({
|
|
139
|
-
|
|
186
|
+
field: key,
|
|
140
187
|
location: 'workflow.context',
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
reason: getFieldReason(field),
|
|
144
|
-
suggestion: `Remove '${field}' from workflow.context. Use custom field names like 'myContext' or 'customData' instead.`,
|
|
188
|
+
code: determineErrorCode(key),
|
|
189
|
+
reason: getFieldReason(key),
|
|
145
190
|
});
|
|
146
191
|
}
|
|
147
192
|
}
|
|
148
|
-
// 3.
|
|
193
|
+
// 3. Annotations
|
|
149
194
|
if (workflow.annotations && typeof workflow.annotations === 'object') {
|
|
150
195
|
for (const key of Object.keys(workflow.annotations)) {
|
|
151
196
|
if (isReservedAnnotation(key)) {
|
|
152
197
|
violations.push({
|
|
153
|
-
code: SecurityErrorCode.RESERVED_ANNOTATION_NAMESPACE,
|
|
154
|
-
location: 'workflow.annotations',
|
|
155
198
|
field: key,
|
|
156
|
-
|
|
199
|
+
location: 'workflow.annotations',
|
|
200
|
+
code: SecurityErrorCode.RESERVED_ANNOTATION_NAMESPACE,
|
|
157
201
|
reason: `Annotation namespace '${key.split('.')[0]}.' is reserved for engine use.`,
|
|
158
|
-
suggestion: `Use a custom prefix like 'custom.${key}' or 'my.${key}' instead.`,
|
|
159
202
|
});
|
|
160
203
|
}
|
|
161
204
|
}
|
|
162
205
|
}
|
|
163
|
-
// 4.
|
|
206
|
+
// 4. Steps
|
|
164
207
|
if (workflow.workflow?.steps && Array.isArray(workflow.workflow.steps)) {
|
|
165
208
|
workflow.workflow.steps.forEach((step, index) => {
|
|
166
|
-
const
|
|
167
|
-
for (const field of stepViolations) {
|
|
209
|
+
for (const key of findReservedFields(step, RESERVED_STEP_FIELDS)) {
|
|
168
210
|
violations.push({
|
|
169
|
-
|
|
211
|
+
field: key,
|
|
170
212
|
location: `workflow.steps[${index}] (${step.id || 'unnamed'})`,
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
reason: getFieldReason(field),
|
|
174
|
-
suggestion: `Remove '${field}' from step definition. The engine tracks execution state internally.`,
|
|
213
|
+
code: determineErrorCode(key),
|
|
214
|
+
reason: getFieldReason(key),
|
|
175
215
|
});
|
|
176
216
|
}
|
|
177
217
|
});
|
|
178
218
|
}
|
|
179
|
-
|
|
180
|
-
if (violations.length > 0) {
|
|
181
|
-
throw new SecurityError(violations);
|
|
182
|
-
}
|
|
219
|
+
return violations;
|
|
183
220
|
}
|
|
184
221
|
//# sourceMappingURL=ReservedFields.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReservedFields.js","sourceRoot":"","sources":["../../src/security/ReservedFields.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"ReservedFields.js","sourceRoot":"","sources":["../../src/security/ReservedFields.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,36 @@
|
|
|
1
1
|
import { LogLevel } from "@dev-ecosystem/core";
|
|
2
|
+
/**
|
|
3
|
+
* Log categories (phase-based, not feature-based)
|
|
4
|
+
*
|
|
5
|
+
* - 'system': Engine lifecycle, infrastructure, configuration, adapter registration
|
|
6
|
+
* - 'analysis': Parsing, validation, explain, plan building, cycle detection
|
|
7
|
+
* - 'runtime': Actual workflow execution (steps, retries, completion, failures)
|
|
8
|
+
* - 'security': Internal field violation, reserved field usage, permission rejection
|
|
9
|
+
*
|
|
10
|
+
* Never add feature, adapter, or business domain categories here.
|
|
11
|
+
*/
|
|
12
|
+
export type LogCategory = 'system' | 'analysis' | 'runtime' | 'security';
|
|
13
|
+
/**
|
|
14
|
+
* Enum for log categories (for strict usage)
|
|
15
|
+
*/
|
|
16
|
+
export declare enum LogCategoryEnum {
|
|
17
|
+
SYSTEM = "system",
|
|
18
|
+
ANALYSIS = "analysis",
|
|
19
|
+
RUNTIME = "runtime",
|
|
20
|
+
SECURITY = "security"
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Interface for a structured engine log entry
|
|
24
|
+
* Every log must have a category and source.
|
|
25
|
+
*/
|
|
26
|
+
export interface EngineLog {
|
|
27
|
+
timestamp: number;
|
|
28
|
+
level: 'info' | 'warn' | 'error';
|
|
29
|
+
category: LogCategory;
|
|
30
|
+
source: string;
|
|
31
|
+
message: string;
|
|
32
|
+
context?: Record<string, unknown>;
|
|
33
|
+
}
|
|
2
34
|
/**
|
|
3
35
|
* Engine-specific log format type
|
|
4
36
|
*/
|
|
@@ -36,7 +68,7 @@ export declare enum EngineLogType {
|
|
|
36
68
|
ERROR = "error"
|
|
37
69
|
}
|
|
38
70
|
/**
|
|
39
|
-
* Structured engine log event
|
|
71
|
+
* Structured engine log event (with category and source)
|
|
40
72
|
*/
|
|
41
73
|
export interface EngineLogEvent {
|
|
42
74
|
/** Event type */
|
|
@@ -45,6 +77,10 @@ export interface EngineLogEvent {
|
|
|
45
77
|
timestamp: Date;
|
|
46
78
|
/** Log message */
|
|
47
79
|
message: string;
|
|
80
|
+
/** Log category (phase) */
|
|
81
|
+
category: LogCategory;
|
|
82
|
+
/** Log source (component/module) */
|
|
83
|
+
source: string;
|
|
48
84
|
/** Additional context */
|
|
49
85
|
context?: Record<string, unknown>;
|
|
50
86
|
/** Error object if applicable */
|
|
@@ -98,8 +134,104 @@ export interface EngineLoggerConfig {
|
|
|
98
134
|
/** Include timestamps */
|
|
99
135
|
timestamp?: boolean;
|
|
100
136
|
/** Source identifier */
|
|
101
|
-
source
|
|
137
|
+
source: string;
|
|
102
138
|
/** Enable structured event logging */
|
|
103
139
|
structuredEvents?: boolean;
|
|
140
|
+
/** Log category */
|
|
141
|
+
category: LogCategory;
|
|
142
|
+
/**
|
|
143
|
+
* Maximum number of log events to keep in the in-memory history ring-buffer.
|
|
144
|
+
* Older entries are silently dropped once the limit is reached. A value of
|
|
145
|
+
* `0` (the default) disables the limit so all events are retained.
|
|
146
|
+
*/
|
|
147
|
+
maxHistorySize?: number;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Workflow context — attached to the logger for the duration of a
|
|
151
|
+
* run / explain / validate session.
|
|
152
|
+
*
|
|
153
|
+
* When set via `EngineLogger.setWorkflowContext()`, every subsequent log
|
|
154
|
+
* entry automatically includes this under the `workflow` key so that log
|
|
155
|
+
* consumers can filter, group and display logs per workflow file without
|
|
156
|
+
* parsing the message text.
|
|
157
|
+
*
|
|
158
|
+
* Build it from a `ParsedWorkflow`:
|
|
159
|
+
* ```typescript
|
|
160
|
+
* logger.setWorkflowContext({
|
|
161
|
+
* name: workflow.name,
|
|
162
|
+
* version: workflow.version,
|
|
163
|
+
* kind: workflow.kind,
|
|
164
|
+
* description: workflow.description,
|
|
165
|
+
* stepCount: workflow.steps.length,
|
|
166
|
+
* filePath: '/user/project/deploy.yaml',
|
|
167
|
+
* tags: workflow.tags,
|
|
168
|
+
* });
|
|
169
|
+
* ```
|
|
170
|
+
*/
|
|
171
|
+
export interface WorkflowContext {
|
|
172
|
+
/** Workflow name from the YAML file (e.g. "deploy-api") */
|
|
173
|
+
name?: string;
|
|
174
|
+
/** Semantic version string (e.g. "1.2.0") */
|
|
175
|
+
version?: string;
|
|
176
|
+
/** Document kind (e.g. "workflow", "pipeline") */
|
|
177
|
+
kind?: string;
|
|
178
|
+
/** Human-readable description from the file */
|
|
179
|
+
description?: string;
|
|
180
|
+
/** Total number of declared steps */
|
|
181
|
+
stepCount?: number;
|
|
182
|
+
/** Absolute path to the source YAML/JSON file */
|
|
183
|
+
filePath?: string;
|
|
184
|
+
/** Tags from workflow metadata */
|
|
185
|
+
tags?: string[];
|
|
186
|
+
/** Inferred execution strategy */
|
|
187
|
+
executionStrategy?: 'sequential' | 'parallel' | 'mixed';
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Export logs in formats suitable for different consumers
|
|
191
|
+
*/
|
|
192
|
+
export interface ExportedLogs {
|
|
193
|
+
/** Raw JSON logs */
|
|
194
|
+
raw: EngineLogEvent[];
|
|
195
|
+
/** Logs grouped by type */
|
|
196
|
+
grouped: Record<string, EngineLogEvent[]>;
|
|
197
|
+
/** Workflow context snapshot at the time of export (if set) */
|
|
198
|
+
workflowContext?: WorkflowContext;
|
|
199
|
+
/** Statistics */
|
|
200
|
+
stats: {
|
|
201
|
+
total: number;
|
|
202
|
+
byType: Record<string, number>;
|
|
203
|
+
/** Count per phase category (`system`, `runtime`, `analysis`, `security`) */
|
|
204
|
+
byCategory: Record<string, number>;
|
|
205
|
+
withErrors: number;
|
|
206
|
+
withMetrics: number;
|
|
207
|
+
timeRange: {
|
|
208
|
+
first?: Date;
|
|
209
|
+
last?: Date;
|
|
210
|
+
};
|
|
211
|
+
};
|
|
212
|
+
/** Workflow execution summary for explanation */
|
|
213
|
+
execution?: {
|
|
214
|
+
workflow?: {
|
|
215
|
+
name: string;
|
|
216
|
+
status: string;
|
|
217
|
+
duration?: number;
|
|
218
|
+
};
|
|
219
|
+
steps: Array<{
|
|
220
|
+
id: string;
|
|
221
|
+
name: string;
|
|
222
|
+
status: string;
|
|
223
|
+
duration?: number;
|
|
224
|
+
}>;
|
|
225
|
+
errors: Array<{
|
|
226
|
+
step?: string;
|
|
227
|
+
message: string;
|
|
228
|
+
error?: Error;
|
|
229
|
+
}>;
|
|
230
|
+
metrics: Array<{
|
|
231
|
+
label: string;
|
|
232
|
+
duration?: number;
|
|
233
|
+
memory?: number;
|
|
234
|
+
}>;
|
|
235
|
+
};
|
|
104
236
|
}
|
|
105
237
|
//# sourceMappingURL=log-types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"log-types.d.ts","sourceRoot":"","sources":["../../src/types/log-types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"log-types.d.ts","sourceRoot":"","sources":["../../src/types/log-types.ts"],"names":[],"mappings":"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"}
|
package/dist/types/log-types.js
CHANGED
|
@@ -1,3 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Enum for log categories (for strict usage)
|
|
3
|
+
*/
|
|
4
|
+
export var LogCategoryEnum;
|
|
5
|
+
(function (LogCategoryEnum) {
|
|
6
|
+
LogCategoryEnum["SYSTEM"] = "system";
|
|
7
|
+
LogCategoryEnum["ANALYSIS"] = "analysis";
|
|
8
|
+
LogCategoryEnum["RUNTIME"] = "runtime";
|
|
9
|
+
LogCategoryEnum["SECURITY"] = "security";
|
|
10
|
+
})(LogCategoryEnum || (LogCategoryEnum = {}));
|
|
1
11
|
/**
|
|
2
12
|
* Engine log event types - All possible log events in the engine
|
|
3
13
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"log-types.js","sourceRoot":"","sources":["../../src/types/log-types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"log-types.js","sourceRoot":"","sources":["../../src/types/log-types.ts"],"names":[],"mappings":"AAmBA;;GAEG;AACH,MAAM,CAAN,IAAY,eAKX;AALD,WAAY,eAAe;IACzB,oCAAiB,CAAA;IACjB,wCAAqB,CAAA;IACrB,sCAAmB,CAAA;IACnB,wCAAqB,CAAA;AACvB,CAAC,EALW,eAAe,KAAf,eAAe,QAK1B;AAoBD;;GAEG;AACH,MAAM,CAAN,IAAY,aA2CX;AA3CD,WAAY,aAAa;IACvB,qBAAqB;IACrB,sDAAqC,CAAA;IACrC,0DAAyC,CAAA;IACzC,oDAAmC,CAAA;IACnC,4DAA2C,CAAA;IAE3C,iBAAiB;IACjB,8CAA6B,CAAA;IAC7B,kDAAiC,CAAA;IACjC,4CAA2B,CAAA;IAC3B,0CAAyB,CAAA;IACzB,8CAA6B,CAAA;IAE7B,cAAc;IACd,gEAA+C,CAAA;IAC/C,0DAAyC,CAAA;IAEzC,mBAAmB;IACnB,kDAAiC,CAAA;IACjC,kDAAiC,CAAA;IACjC,sDAAqC,CAAA;IACrC,oDAAmC,CAAA;IAEnC,gBAAgB;IAChB,kDAAiC,CAAA;IACjC,kDAAiC,CAAA;IACjC,sDAAqC,CAAA;IAErC,cAAc;IACd,0DAAyC,CAAA;IACzC,kDAAiC,CAAA;IAEjC,SAAS;IACT,kDAAiC,CAAA;IACjC,kDAAiC,CAAA;IACjC,sDAAqC,CAAA;IAErC,UAAU;IACV,8BAAa,CAAA;IACb,gCAAe,CAAA;IACf,oCAAmB,CAAA;IACnB,gCAAe,CAAA;AACjB,CAAC,EA3CW,aAAa,KAAb,aAAa,QA2CxB"}
|