@actiondock/core 2.6.0 → 2.7.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/errors.d.ts +20 -0
- package/dist/errors.js +20 -0
- package/dist/export/templates.js +42 -30
- package/dist/index.d.ts +3 -1
- package/dist/index.js +3 -1
- package/dist/input/advice.d.ts +100 -0
- package/dist/input/advice.js +767 -0
- package/dist/input/describe.d.ts +106 -0
- package/dist/input/describe.js +176 -0
- package/dist/input/file-input.d.ts +54 -0
- package/dist/input/file-input.js +124 -0
- package/dist/input/flat-decode.d.ts +11 -0
- package/dist/input/flat-decode.js +13 -0
- package/dist/input/flat-errors.d.ts +72 -0
- package/dist/input/flat-errors.js +87 -0
- package/dist/input/flat-materializer.d.ts +29 -0
- package/dist/input/flat-materializer.js +179 -0
- package/dist/input/flat-parser.d.ts +50 -0
- package/dist/input/flat-parser.js +169 -0
- package/dist/input/flat-predicates.d.ts +34 -0
- package/dist/input/flat-predicates.js +50 -0
- package/dist/input/index.d.ts +14 -0
- package/dist/input/index.js +14 -0
- package/dist/input/input-resolver.d.ts +63 -0
- package/dist/input/input-resolver.js +254 -0
- package/dist/input/json-depth-scanner.d.ts +17 -0
- package/dist/input/json-depth-scanner.js +49 -0
- package/dist/input/metadata.d.ts +99 -0
- package/dist/input/metadata.js +99 -0
- package/dist/input/stdin-input.d.ts +26 -0
- package/dist/input/stdin-input.js +125 -0
- package/dist/input/utf8.d.ts +19 -0
- package/dist/input/utf8.js +36 -0
- package/dist/input/validation-mapper.d.ts +27 -0
- package/dist/input/validation-mapper.js +144 -0
- package/dist/json/index.d.ts +1 -0
- package/dist/json/index.js +1 -0
- package/dist/json/value-validator.d.ts +88 -0
- package/dist/json/value-validator.js +330 -0
- package/dist/profile/client-health.js +1 -0
- package/dist/profile/client-transport.js +1 -0
- package/dist/project/init.js +2 -2
- package/dist/runtime/runner.d.ts +2 -12
- package/dist/runtime/runner.js +38 -68
- package/dist/runtime/standalone.d.ts +14 -1
- package/dist/runtime/standalone.js +177 -71
- package/dist/schema/index.d.ts +1 -0
- package/dist/schema/index.js +1 -0
- package/dist/schema/validator.d.ts +10 -0
- package/dist/schema/validator.js +48 -54
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +2 -2
package/dist/schema/validator.js
CHANGED
|
@@ -18,75 +18,36 @@ const validatorCache = new WeakMap();
|
|
|
18
18
|
/**
|
|
19
19
|
* 递归检查数据中是否包含危险的原型污染属性键名(__proto__、constructor、prototype)。
|
|
20
20
|
*/
|
|
21
|
+
import { validateActionInputValue } from "../json/value-validator.js";
|
|
22
|
+
/**
|
|
23
|
+
* 递归检查数据中是否包含危险的原型污染属性键名(__proto__、constructor、prototype)。
|
|
24
|
+
* 内部委托 validateActionInputValue 执行迭代遍历,确保环路安全、有向无环图安全且无调用栈溢出风险。
|
|
25
|
+
*/
|
|
21
26
|
export function hasDangerousKeys(data) {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
}
|
|
25
|
-
if (Array.isArray(data)) {
|
|
26
|
-
for (const item of data) {
|
|
27
|
-
if (hasDangerousKeys(item))
|
|
28
|
-
return true;
|
|
29
|
-
}
|
|
30
|
-
return false;
|
|
31
|
-
}
|
|
32
|
-
const obj = data;
|
|
33
|
-
const keys = Object.getOwnPropertyNames(obj);
|
|
34
|
-
for (const key of keys) {
|
|
35
|
-
if (key === "__proto__" || key === "constructor" || key === "prototype") {
|
|
36
|
-
return true;
|
|
37
|
-
}
|
|
38
|
-
if (hasDangerousKeys(obj[key])) {
|
|
39
|
-
return true;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
return false;
|
|
27
|
+
const result = validateActionInputValue(data);
|
|
28
|
+
return !result.valid && result.kind === "input-policy";
|
|
43
29
|
}
|
|
44
30
|
/**
|
|
45
|
-
*
|
|
31
|
+
* 内部纯 Schema 校验器。
|
|
32
|
+
* 仅处理布尔 Schema 与 Ajv 规则校验,严禁执行 dangerous-key 遍历。
|
|
46
33
|
*
|
|
47
|
-
*
|
|
48
|
-
* 1. 严格契约校验:当 Schema 中定义 additionalProperties: false 时,包含未声明属性的输入将被直接拒绝(返回 valid: false),系统不会静默过滤或篡改用户输入。
|
|
49
|
-
* 2. 危险原型键硬拦截:输入数据或其任意嵌套对象中若出现 __proto__、constructor 或 prototype 键名,即使 Schema 允许亦立即拒绝,彻底杜绝原型污染。
|
|
50
|
-
* 3. 布尔 Schema:false 显式拒绝所有输入;true 或未定义时允许所有合法非污染数据。
|
|
51
|
-
* 4. 无原型对象支持:完全支持 Object.create(null) 创建的无原型对象校验。
|
|
52
|
-
*
|
|
53
|
-
* @param schema 期望匹配的 JSON Schema 对象(未提供或为空对象/true 时默认通过;为 false 时拒绝所有数据)
|
|
34
|
+
* @param schema 期望匹配的 JSON Schema 对象
|
|
54
35
|
* @param data 待校验的原始数据
|
|
55
36
|
* @returns 包含 valid 状态与错误信息列表的 ValidationResult
|
|
56
37
|
*/
|
|
57
|
-
export function
|
|
58
|
-
// 1. 布尔 Schema 支持:false 拒绝一切输入;true/undefined 允许一切输入
|
|
38
|
+
export function validateSchemaOnly(schema, data) {
|
|
59
39
|
if (schema === false) {
|
|
60
40
|
return {
|
|
61
41
|
valid: false,
|
|
62
42
|
errors: ["Schema is false, rejecting all data"],
|
|
63
43
|
};
|
|
64
44
|
}
|
|
65
|
-
if (schema === true ||
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
errors: ["Data contains prohibited prototype pollution keys (__proto__, constructor, or prototype)"],
|
|
70
|
-
};
|
|
71
|
-
}
|
|
45
|
+
if (schema === true ||
|
|
46
|
+
!schema ||
|
|
47
|
+
typeof schema !== "object" ||
|
|
48
|
+
Object.keys(schema).length === 0) {
|
|
72
49
|
return { valid: true };
|
|
73
50
|
}
|
|
74
|
-
if (typeof schema !== "object" || Object.keys(schema).length === 0) {
|
|
75
|
-
if (hasDangerousKeys(data)) {
|
|
76
|
-
return {
|
|
77
|
-
valid: false,
|
|
78
|
-
errors: ["Data contains prohibited prototype pollution keys (__proto__, constructor, or prototype)"],
|
|
79
|
-
};
|
|
80
|
-
}
|
|
81
|
-
return { valid: true };
|
|
82
|
-
}
|
|
83
|
-
// 2. 危险原型键拦截
|
|
84
|
-
if (hasDangerousKeys(data)) {
|
|
85
|
-
return {
|
|
86
|
-
valid: false,
|
|
87
|
-
errors: ["Data contains prohibited prototype pollution keys (__proto__, constructor, or prototype)"],
|
|
88
|
-
};
|
|
89
|
-
}
|
|
90
51
|
try {
|
|
91
52
|
let validate = validatorCache.get(schema);
|
|
92
53
|
if (!validate) {
|
|
@@ -120,3 +81,36 @@ export function validateSchema(schema, data) {
|
|
|
120
81
|
};
|
|
121
82
|
}
|
|
122
83
|
}
|
|
84
|
+
/**
|
|
85
|
+
* 校验指定数据是否符合给定的 JSON Schema 契约。
|
|
86
|
+
*
|
|
87
|
+
* 行为与策略约定:
|
|
88
|
+
* 1. 严格契约校验:当 Schema 中定义 additionalProperties: false 时,包含未声明属性的输入将被直接拒绝(返回 valid: false),系统不会静默过滤或篡改用户输入。
|
|
89
|
+
* 2. 危险原型键硬拦截:输入数据或其任意嵌套对象中若出现 __proto__、constructor 或 prototype 键名,即使 Schema 允许亦立即拒绝,彻底杜绝原型污染。
|
|
90
|
+
* 3. 布尔 Schema:false 显式拒绝所有输入;true 或未定义时允许所有合法非污染数据。
|
|
91
|
+
* 4. 无原型对象支持:完全支持 Object.create(null) 创建的无原型对象校验。
|
|
92
|
+
*
|
|
93
|
+
* @param schema 期望匹配的 JSON Schema 对象(未提供或为空对象/true 时默认通过;为 false 时拒绝所有数据)
|
|
94
|
+
* @param data 待校验的原始数据
|
|
95
|
+
* @returns 包含 valid 状态与错误信息列表的 ValidationResult
|
|
96
|
+
*/
|
|
97
|
+
export function validateSchema(schema, data) {
|
|
98
|
+
// 1. 布尔 Schema 支持:false 拒绝一切输入
|
|
99
|
+
if (schema === false) {
|
|
100
|
+
return {
|
|
101
|
+
valid: false,
|
|
102
|
+
errors: ["Schema is false, rejecting all data"],
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
// 2. 危险原型键拦截(保持历史兼容,包含 schema 为 true / undefined / {} 的场景)
|
|
106
|
+
if (hasDangerousKeys(data)) {
|
|
107
|
+
return {
|
|
108
|
+
valid: false,
|
|
109
|
+
errors: [
|
|
110
|
+
"Data contains prohibited prototype pollution keys (__proto__, constructor, or prototype)",
|
|
111
|
+
],
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
// 3. 委托纯 Schema 校验器处理其余规则校验
|
|
115
|
+
return validateSchemaOnly(schema, data);
|
|
116
|
+
}
|
package/dist/version.d.ts
CHANGED
package/dist/version.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@actiondock/core",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.7.0",
|
|
4
4
|
"description": "ActionDock Core Engine - Project loader, runtime execution, SQLite storage, standalone builder, and skill exporter",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
"test": "node ../../scripts/run-tests.ts"
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@actiondock/sdk": "^2.
|
|
32
|
+
"@actiondock/sdk": "^2.7.0",
|
|
33
33
|
"ajv": "^8.17.1",
|
|
34
34
|
"ajv-formats": "^3.0.1"
|
|
35
35
|
},
|