@f2a/openclaw-adapter 0.1.0 → 0.2.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/announcement-queue.d.ts +72 -1
- package/dist/announcement-queue.d.ts.map +1 -1
- package/dist/announcement-queue.js +145 -20
- package/dist/announcement-queue.js.map +1 -1
- package/dist/claim-handlers.d.ts +75 -0
- package/dist/claim-handlers.d.ts.map +1 -0
- package/dist/claim-handlers.js +368 -0
- package/dist/claim-handlers.js.map +1 -0
- package/dist/connector.d.ts +46 -18
- package/dist/connector.d.ts.map +1 -1
- package/dist/connector.js +319 -592
- package/dist/connector.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/logger.d.ts +28 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +44 -0
- package/dist/logger.js.map +1 -0
- package/dist/network-client.d.ts +17 -1
- package/dist/network-client.d.ts.map +1 -1
- package/dist/network-client.js +119 -23
- package/dist/network-client.js.map +1 -1
- package/dist/node-manager.d.ts +20 -0
- package/dist/node-manager.d.ts.map +1 -1
- package/dist/node-manager.js +194 -18
- package/dist/node-manager.js.map +1 -1
- package/dist/plugin.d.ts +1 -1
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +4 -5
- package/dist/plugin.js.map +1 -1
- package/dist/reputation.d.ts +85 -1
- package/dist/reputation.d.ts.map +1 -1
- package/dist/reputation.js +222 -9
- package/dist/reputation.js.map +1 -1
- package/dist/task-guard.d.ts +82 -0
- package/dist/task-guard.d.ts.map +1 -1
- package/dist/task-guard.js +449 -16
- package/dist/task-guard.js.map +1 -1
- package/dist/task-queue.d.ts +55 -7
- package/dist/task-queue.d.ts.map +1 -1
- package/dist/task-queue.js +477 -12
- package/dist/task-queue.js.map +1 -1
- package/dist/tool-handlers.d.ts +158 -0
- package/dist/tool-handlers.d.ts.map +1 -0
- package/dist/tool-handlers.js +724 -0
- package/dist/tool-handlers.js.map +1 -0
- package/dist/types.d.ts +112 -15
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +23 -0
- package/dist/types.js.map +1 -1
- package/dist/webhook-pusher.d.ts +71 -0
- package/dist/webhook-pusher.d.ts.map +1 -0
- package/dist/webhook-pusher.js +174 -0
- package/dist/webhook-pusher.js.map +1 -0
- package/dist/webhook-server.d.ts +8 -1
- package/dist/webhook-server.d.ts.map +1 -1
- package/dist/webhook-server.js +65 -7
- package/dist/webhook-server.js.map +1 -1
- package/package.json +21 -8
package/dist/webhook-server.js
CHANGED
|
@@ -6,13 +6,45 @@
|
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
7
|
exports.WebhookServer = void 0;
|
|
8
8
|
const http_1 = require("http");
|
|
9
|
+
const logger_js_1 = require("./logger.js");
|
|
10
|
+
/** 默认请求体大小限制 (64KB) - 元数据交换足够,防止 DoS */
|
|
11
|
+
const DEFAULT_MAX_BODY_SIZE = 64 * 1024;
|
|
12
|
+
/** 默认允许的 CORS 来源 */
|
|
13
|
+
const DEFAULT_ALLOWED_ORIGINS = ['http://localhost'];
|
|
14
|
+
/**
|
|
15
|
+
* P2 修复:生产环境 CORS 配置验证
|
|
16
|
+
*/
|
|
17
|
+
function validateCorsConfig(allowedOrigins) {
|
|
18
|
+
const isProduction = process.env.NODE_ENV === 'production';
|
|
19
|
+
if (isProduction) {
|
|
20
|
+
// 检查是否使用默认配置
|
|
21
|
+
if (allowedOrigins.length === 1 && allowedOrigins[0] === 'http://localhost') {
|
|
22
|
+
logger_js_1.webhookLogger.error('CORS configuration warning: Using default localhost origin in production!');
|
|
23
|
+
logger_js_1.webhookLogger.error('Set F2A_WEBHOOK_ALLOWED_ORIGINS environment variable or pass allowedOrigins option.');
|
|
24
|
+
}
|
|
25
|
+
// 检查是否包含通配符
|
|
26
|
+
if (allowedOrigins.includes('*')) {
|
|
27
|
+
logger_js_1.webhookLogger.error('CORS configuration error: Wildcard origin (*) is not allowed in production!');
|
|
28
|
+
throw new Error('Wildcard CORS origin is not allowed in production. Configure specific allowed origins.');
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
9
32
|
class WebhookServer {
|
|
10
33
|
port;
|
|
11
34
|
handler;
|
|
12
35
|
server;
|
|
13
|
-
|
|
36
|
+
maxBodySize;
|
|
37
|
+
/** 允许的 CORS 来源列表 */
|
|
38
|
+
allowedOrigins;
|
|
39
|
+
constructor(port, handler, options) {
|
|
14
40
|
this.port = port;
|
|
15
41
|
this.handler = handler;
|
|
42
|
+
this.maxBodySize = options?.maxBodySize || DEFAULT_MAX_BODY_SIZE;
|
|
43
|
+
// P2 修复:支持从环境变量读取 CORS 配置
|
|
44
|
+
const envOrigins = process.env.F2A_WEBHOOK_ALLOWED_ORIGINS?.split(',').map(o => o.trim()).filter(Boolean);
|
|
45
|
+
this.allowedOrigins = options?.allowedOrigins ?? envOrigins ?? DEFAULT_ALLOWED_ORIGINS;
|
|
46
|
+
// P2 修复:生产环境强制验证 CORS 配置
|
|
47
|
+
validateCorsConfig(this.allowedOrigins);
|
|
16
48
|
}
|
|
17
49
|
/**
|
|
18
50
|
* 启动 Webhook 服务器
|
|
@@ -21,7 +53,7 @@ class WebhookServer {
|
|
|
21
53
|
return new Promise((resolve, reject) => {
|
|
22
54
|
this.server = (0, http_1.createServer)(this.handleRequest.bind(this));
|
|
23
55
|
this.server.listen(this.port, () => {
|
|
24
|
-
|
|
56
|
+
logger_js_1.webhookLogger.info('服务器启动在端口 %d', this.port);
|
|
25
57
|
resolve();
|
|
26
58
|
});
|
|
27
59
|
this.server.on('error', (err) => {
|
|
@@ -36,7 +68,7 @@ class WebhookServer {
|
|
|
36
68
|
if (this.server) {
|
|
37
69
|
return new Promise((resolve) => {
|
|
38
70
|
this.server?.close(() => {
|
|
39
|
-
|
|
71
|
+
logger_js_1.webhookLogger.info('服务器已停止');
|
|
40
72
|
resolve();
|
|
41
73
|
});
|
|
42
74
|
});
|
|
@@ -46,8 +78,25 @@ class WebhookServer {
|
|
|
46
78
|
* 处理 HTTP 请求
|
|
47
79
|
*/
|
|
48
80
|
async handleRequest(req, res) {
|
|
49
|
-
// 设置 CORS
|
|
50
|
-
|
|
81
|
+
// 设置 CORS - 使用配置的允许来源
|
|
82
|
+
const origin = req.headers.origin;
|
|
83
|
+
// 当 allowedOrigins 为空数组时,使用默认值 'http://localhost'
|
|
84
|
+
// 当 origin 不在允许列表中时,使用第一个允许的来源或默认值
|
|
85
|
+
const defaultOrigin = 'http://localhost';
|
|
86
|
+
let allowOrigin;
|
|
87
|
+
if (this.allowedOrigins.length === 0) {
|
|
88
|
+
// 没有配置允许来源,使用默认值
|
|
89
|
+
allowOrigin = defaultOrigin;
|
|
90
|
+
}
|
|
91
|
+
else if (origin && this.allowedOrigins.includes(origin)) {
|
|
92
|
+
// origin 在允许列表中
|
|
93
|
+
allowOrigin = origin;
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
// origin 不在允许列表中,使用第一个允许的来源
|
|
97
|
+
allowOrigin = this.allowedOrigins[0];
|
|
98
|
+
}
|
|
99
|
+
res.setHeader('Access-Control-Allow-Origin', allowOrigin);
|
|
51
100
|
res.setHeader('Access-Control-Allow-Methods', 'POST, OPTIONS');
|
|
52
101
|
res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
|
|
53
102
|
if (req.method === 'OPTIONS') {
|
|
@@ -63,7 +112,7 @@ class WebhookServer {
|
|
|
63
112
|
try {
|
|
64
113
|
const body = await this.parseBody(req);
|
|
65
114
|
const event = body;
|
|
66
|
-
|
|
115
|
+
logger_js_1.webhookLogger.info('收到事件: %s', event.type);
|
|
67
116
|
let result;
|
|
68
117
|
switch (event.type) {
|
|
69
118
|
case 'discover':
|
|
@@ -84,7 +133,7 @@ class WebhookServer {
|
|
|
84
133
|
res.end(JSON.stringify(result));
|
|
85
134
|
}
|
|
86
135
|
catch (error) {
|
|
87
|
-
|
|
136
|
+
logger_js_1.webhookLogger.error('处理错误: %s', error);
|
|
88
137
|
res.writeHead(500, { 'Content-Type': 'application/json' });
|
|
89
138
|
res.end(JSON.stringify({
|
|
90
139
|
error: error instanceof Error ? error.message : 'Internal error'
|
|
@@ -93,11 +142,20 @@ class WebhookServer {
|
|
|
93
142
|
}
|
|
94
143
|
/**
|
|
95
144
|
* 解析请求体
|
|
145
|
+
* 带大小限制,防止 DoS 攻击
|
|
96
146
|
*/
|
|
97
147
|
parseBody(req) {
|
|
98
148
|
return new Promise((resolve, reject) => {
|
|
99
149
|
let body = '';
|
|
150
|
+
let size = 0;
|
|
100
151
|
req.on('data', (chunk) => {
|
|
152
|
+
size += chunk.length;
|
|
153
|
+
// 检查请求体大小
|
|
154
|
+
if (size > this.maxBodySize) {
|
|
155
|
+
req.destroy();
|
|
156
|
+
reject(new Error(`Request body too large: ${size} bytes (max: ${this.maxBodySize})`));
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
101
159
|
body += chunk.toString();
|
|
102
160
|
});
|
|
103
161
|
req.on('end', () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webhook-server.js","sourceRoot":"","sources":["../src/webhook-server.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAEH,+BAAqE;
|
|
1
|
+
{"version":3,"file":"webhook-server.js","sourceRoot":"","sources":["../src/webhook-server.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@f2a/openclaw-adapter",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "OpenClaw adapter for F2A P2P Agent network",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -10,7 +10,9 @@
|
|
|
10
10
|
"README.md"
|
|
11
11
|
],
|
|
12
12
|
"openclaw": {
|
|
13
|
-
"extensions": [
|
|
13
|
+
"extensions": [
|
|
14
|
+
"./dist/plugin.js"
|
|
15
|
+
]
|
|
14
16
|
},
|
|
15
17
|
"scripts": {
|
|
16
18
|
"build": "tsc",
|
|
@@ -18,17 +20,28 @@
|
|
|
18
20
|
"test": "vitest",
|
|
19
21
|
"lint": "eslint src/**/*.ts"
|
|
20
22
|
},
|
|
21
|
-
"keywords": [
|
|
23
|
+
"keywords": [
|
|
24
|
+
"openclaw",
|
|
25
|
+
"f2a",
|
|
26
|
+
"p2p",
|
|
27
|
+
"agent",
|
|
28
|
+
"plugin"
|
|
29
|
+
],
|
|
22
30
|
"author": "F2A Team",
|
|
23
31
|
"license": "MIT",
|
|
32
|
+
"repository": {
|
|
33
|
+
"type": "git",
|
|
34
|
+
"url": "https://github.com/LuciusCao/F2A.git"
|
|
35
|
+
},
|
|
24
36
|
"dependencies": {
|
|
25
|
-
"@f2a/network": "
|
|
26
|
-
"
|
|
37
|
+
"@f2a/network": "^0.2.0",
|
|
38
|
+
"better-sqlite3": "^11.0.0",
|
|
27
39
|
"node-fetch": "^3.3.2",
|
|
28
|
-
"
|
|
29
|
-
"
|
|
40
|
+
"ws": "^8.16.0",
|
|
41
|
+
"zod": "^3.22.4"
|
|
30
42
|
},
|
|
31
43
|
"devDependencies": {
|
|
44
|
+
"@types/better-sqlite3": "^7.6.13",
|
|
32
45
|
"@types/node": "^20.10.0",
|
|
33
46
|
"@types/ws": "^8.5.10",
|
|
34
47
|
"typescript": "^5.3.0",
|
|
@@ -37,4 +50,4 @@
|
|
|
37
50
|
"peerDependencies": {
|
|
38
51
|
"openclaw": ">=1.0.0"
|
|
39
52
|
}
|
|
40
|
-
}
|
|
53
|
+
}
|