@f2a/openclaw-adapter 0.1.0 → 0.1.4

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.
Files changed (61) hide show
  1. package/dist/announcement-queue.d.ts +72 -1
  2. package/dist/announcement-queue.d.ts.map +1 -1
  3. package/dist/announcement-queue.js +145 -20
  4. package/dist/announcement-queue.js.map +1 -1
  5. package/dist/claim-handlers.d.ts +75 -0
  6. package/dist/claim-handlers.d.ts.map +1 -0
  7. package/dist/claim-handlers.js +368 -0
  8. package/dist/claim-handlers.js.map +1 -0
  9. package/dist/connector.d.ts +45 -18
  10. package/dist/connector.d.ts.map +1 -1
  11. package/dist/connector.js +219 -583
  12. package/dist/connector.js.map +1 -1
  13. package/dist/index.d.ts +1 -1
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +2 -1
  16. package/dist/index.js.map +1 -1
  17. package/dist/logger.d.ts +28 -0
  18. package/dist/logger.d.ts.map +1 -0
  19. package/dist/logger.js +44 -0
  20. package/dist/logger.js.map +1 -0
  21. package/dist/network-client.d.ts +17 -1
  22. package/dist/network-client.d.ts.map +1 -1
  23. package/dist/network-client.js +119 -23
  24. package/dist/network-client.js.map +1 -1
  25. package/dist/node-manager.d.ts +20 -0
  26. package/dist/node-manager.d.ts.map +1 -1
  27. package/dist/node-manager.js +194 -18
  28. package/dist/node-manager.js.map +1 -1
  29. package/dist/plugin.d.ts +1 -1
  30. package/dist/plugin.d.ts.map +1 -1
  31. package/dist/plugin.js +4 -5
  32. package/dist/plugin.js.map +1 -1
  33. package/dist/reputation.d.ts +22 -1
  34. package/dist/reputation.d.ts.map +1 -1
  35. package/dist/reputation.js +102 -5
  36. package/dist/reputation.js.map +1 -1
  37. package/dist/task-guard.d.ts +82 -0
  38. package/dist/task-guard.d.ts.map +1 -1
  39. package/dist/task-guard.js +392 -15
  40. package/dist/task-guard.js.map +1 -1
  41. package/dist/task-queue.d.ts +50 -7
  42. package/dist/task-queue.d.ts.map +1 -1
  43. package/dist/task-queue.js +445 -12
  44. package/dist/task-queue.js.map +1 -1
  45. package/dist/tool-handlers.d.ts +96 -0
  46. package/dist/tool-handlers.d.ts.map +1 -0
  47. package/dist/tool-handlers.js +431 -0
  48. package/dist/tool-handlers.js.map +1 -0
  49. package/dist/types.d.ts +98 -10
  50. package/dist/types.d.ts.map +1 -1
  51. package/dist/types.js +10 -0
  52. package/dist/types.js.map +1 -1
  53. package/dist/webhook-pusher.d.ts +71 -0
  54. package/dist/webhook-pusher.d.ts.map +1 -0
  55. package/dist/webhook-pusher.js +174 -0
  56. package/dist/webhook-pusher.js.map +1 -0
  57. package/dist/webhook-server.d.ts +8 -1
  58. package/dist/webhook-server.d.ts.map +1 -1
  59. package/dist/webhook-server.js +42 -7
  60. package/dist/webhook-server.js.map +1 -1
  61. package/package.json +21 -8
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";AAAA;;GAEG"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAQH,wCAA+E;AAAtE,kGAAA,OAAO,OAAA;AAAE,kGAAA,OAAO,OAAA;AAAE,2GAAA,gBAAgB,OAAA;AAAE,sGAAA,WAAW,OAAA"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * F2A Webhook Pusher
3
+ * 优先使用 webhook 推送任务到 OpenClaw,失败时退化为轮询
4
+ */
5
+ import type { QueuedTask } from './task-queue.js';
6
+ export interface WebhookPushConfig {
7
+ /** OpenClaw webhook URL */
8
+ url: string;
9
+ /** Webhook 认证 token */
10
+ token: string;
11
+ /** 推送超时(毫秒) */
12
+ timeout?: number;
13
+ /** 是否启用 webhook 推送 */
14
+ enabled?: boolean;
15
+ }
16
+ export interface WebhookPushResult {
17
+ success: boolean;
18
+ error?: string;
19
+ latency?: number;
20
+ /** 是否处于降级模式(冷却期但允许轮询) */
21
+ degraded?: boolean;
22
+ }
23
+ export declare class WebhookPusher {
24
+ private config;
25
+ private consecutiveFailures;
26
+ private lastFailureTime;
27
+ private degradedMode;
28
+ private readonly FAILURE_THRESHOLD;
29
+ private readonly BASE_COOLDOWN_MS;
30
+ private readonly MAX_COOLDOWN_MS;
31
+ constructor(config: WebhookPushConfig);
32
+ /**
33
+ * 计算当前冷却期(指数退避)
34
+ */
35
+ private getCooldownMs;
36
+ /**
37
+ * 推送任务到 OpenClaw webhook
38
+ */
39
+ pushTask(task: QueuedTask): Promise<WebhookPushResult>;
40
+ /**
41
+ * 批量推送任务
42
+ */
43
+ pushTasks(tasks: QueuedTask[]): Promise<Map<string, WebhookPushResult>>;
44
+ /**
45
+ * 检查是否在冷却期
46
+ */
47
+ private isInCooldown;
48
+ /**
49
+ * 记录失败
50
+ */
51
+ private recordFailure;
52
+ /**
53
+ * 手动重置冷却期(用于外部干预)
54
+ */
55
+ resetCooldown(): void;
56
+ /**
57
+ * 获取状态
58
+ */
59
+ getStatus(): {
60
+ enabled: boolean;
61
+ consecutiveFailures: number;
62
+ inCooldown: boolean;
63
+ currentCooldownMs: number;
64
+ degradedMode: boolean;
65
+ };
66
+ /**
67
+ * 更新配置
68
+ */
69
+ updateConfig(config: Partial<WebhookPushConfig>): void;
70
+ }
71
+ //# sourceMappingURL=webhook-pusher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook-pusher.d.ts","sourceRoot":"","sources":["../src/webhook-pusher.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAGlD,MAAM,WAAW,iBAAiB;IAChC,2BAA2B;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,uBAAuB;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,eAAe;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sBAAsB;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yBAAyB;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,mBAAmB,CAAK;IAChC,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,YAAY,CAAS;IAG7B,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAK;IACvC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAU;gBAE9B,MAAM,EAAE,iBAAiB;IAQrC;;OAEG;IACH,OAAO,CAAC,aAAa;IAarB;;OAEG;IACG,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAgE5D;;OAEG;IACG,SAAS,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;IAyB7E;;OAEG;IACH,OAAO,CAAC,YAAY;IAUpB;;OAEG;IACH,OAAO,CAAC,aAAa;IAWrB;;OAEG;IACH,aAAa,IAAI,IAAI;IAOrB;;OAEG;IACH,SAAS,IAAI;QACX,OAAO,EAAE,OAAO,CAAC;QACjB,mBAAmB,EAAE,MAAM,CAAC;QAC5B,UAAU,EAAE,OAAO,CAAC;QACpB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,YAAY,EAAE,OAAO,CAAC;KACvB;IAUD;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAAG,IAAI;CAGvD"}
@@ -0,0 +1,174 @@
1
+ "use strict";
2
+ /**
3
+ * F2A Webhook Pusher
4
+ * 优先使用 webhook 推送任务到 OpenClaw,失败时退化为轮询
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.WebhookPusher = void 0;
8
+ const logger_js_1 = require("./logger.js");
9
+ class WebhookPusher {
10
+ config;
11
+ consecutiveFailures = 0;
12
+ lastFailureTime = 0;
13
+ degradedMode = false;
14
+ // 连续失败后暂停推送一段时间
15
+ FAILURE_THRESHOLD = 3;
16
+ BASE_COOLDOWN_MS = 10000; // 基础冷却期 10 秒
17
+ MAX_COOLDOWN_MS = 300000; // 最大冷却期 5 分钟
18
+ constructor(config) {
19
+ this.config = {
20
+ timeout: 5000,
21
+ enabled: true,
22
+ ...config
23
+ };
24
+ }
25
+ /**
26
+ * 计算当前冷却期(指数退避)
27
+ */
28
+ getCooldownMs() {
29
+ if (this.consecutiveFailures <= this.FAILURE_THRESHOLD) {
30
+ return this.BASE_COOLDOWN_MS;
31
+ }
32
+ // 指数退避:冷却期随失败次数增加,但有上限
33
+ const multiplier = Math.pow(2, this.consecutiveFailures - this.FAILURE_THRESHOLD);
34
+ const cooldown = Math.min(this.BASE_COOLDOWN_MS * multiplier, this.MAX_COOLDOWN_MS);
35
+ logger_js_1.queueLogger.debug(`冷却期计算: 失败次数=${this.consecutiveFailures}, 冷却期=${Math.round(cooldown / 1000)}秒`);
36
+ return cooldown;
37
+ }
38
+ /**
39
+ * 推送任务到 OpenClaw webhook
40
+ */
41
+ async pushTask(task) {
42
+ if (!this.config.enabled) {
43
+ return { success: false, error: 'Webhook push disabled' };
44
+ }
45
+ // 检查是否在冷却期
46
+ if (this.isInCooldown()) {
47
+ const remainingMs = this.getCooldownMs() - (Date.now() - this.lastFailureTime);
48
+ // 降级机制:冷却期内仍返回特殊结果,让调用方知道可以通过轮询处理
49
+ // 返回 degraded: true 表示处于降级模式,任务需要通过轮询机制处理
50
+ return {
51
+ success: false,
52
+ error: `In cooldown (${Math.round(remainingMs / 1000)}s remaining)`,
53
+ degraded: true
54
+ };
55
+ }
56
+ const start = Date.now();
57
+ try {
58
+ const response = await fetch(`${this.config.url}/hooks/agent`, {
59
+ method: 'POST',
60
+ headers: {
61
+ 'Authorization': `Bearer ${this.config.token}`,
62
+ 'Content-Type': 'application/json'
63
+ },
64
+ body: JSON.stringify({
65
+ message: `F2A 远程任务: ${task.taskType || 'unknown'}`,
66
+ name: 'F2A',
67
+ sessionKey: `f2a:${task.taskId}`,
68
+ wakeMode: 'now',
69
+ deliver: false,
70
+ timeoutSeconds: 120
71
+ }),
72
+ signal: AbortSignal.timeout(this.config.timeout)
73
+ });
74
+ const latency = Date.now() - start;
75
+ if (response.ok || response.status === 202) {
76
+ // 成功,重置失败计数和降级模式
77
+ this.consecutiveFailures = 0;
78
+ this.degradedMode = false;
79
+ return { success: true, latency };
80
+ }
81
+ // 失败
82
+ this.recordFailure();
83
+ return {
84
+ success: false,
85
+ error: `HTTP ${response.status}: ${response.statusText}`,
86
+ latency
87
+ };
88
+ }
89
+ catch (error) {
90
+ this.recordFailure();
91
+ return {
92
+ success: false,
93
+ error: error instanceof Error ? error.message : 'Unknown error',
94
+ latency: Date.now() - start
95
+ };
96
+ }
97
+ }
98
+ /**
99
+ * 批量推送任务
100
+ */
101
+ async pushTasks(tasks) {
102
+ const results = new Map();
103
+ for (const task of tasks) {
104
+ const result = await this.pushTask(task);
105
+ results.set(task.taskId, result);
106
+ // 如果进入冷却期,停止推送但标记剩余任务为可轮询
107
+ if (result.degraded) {
108
+ // 剩余任务标记为需要轮询
109
+ const remainingTasks = tasks.filter(t => !results.has(t.taskId));
110
+ for (const remaining of remainingTasks) {
111
+ results.set(remaining.taskId, {
112
+ success: false,
113
+ error: 'Skipped due to cooldown',
114
+ degraded: true
115
+ });
116
+ }
117
+ break;
118
+ }
119
+ }
120
+ return results;
121
+ }
122
+ /**
123
+ * 检查是否在冷却期
124
+ */
125
+ isInCooldown() {
126
+ if (this.consecutiveFailures < this.FAILURE_THRESHOLD) {
127
+ return false;
128
+ }
129
+ const elapsed = Date.now() - this.lastFailureTime;
130
+ const cooldownMs = this.getCooldownMs();
131
+ return elapsed < cooldownMs;
132
+ }
133
+ /**
134
+ * 记录失败
135
+ */
136
+ recordFailure() {
137
+ this.consecutiveFailures++;
138
+ this.lastFailureTime = Date.now();
139
+ this.degradedMode = true;
140
+ if (this.consecutiveFailures >= this.FAILURE_THRESHOLD) {
141
+ const cooldownSec = Math.round(this.getCooldownMs() / 1000);
142
+ logger_js_1.queueLogger.warn(`连续失败 ${this.consecutiveFailures} 次,进入 ${cooldownSec} 秒冷却期(降级模式启用)`);
143
+ }
144
+ }
145
+ /**
146
+ * 手动重置冷却期(用于外部干预)
147
+ */
148
+ resetCooldown() {
149
+ this.consecutiveFailures = 0;
150
+ this.lastFailureTime = 0;
151
+ this.degradedMode = false;
152
+ logger_js_1.queueLogger.info('冷却期已手动重置');
153
+ }
154
+ /**
155
+ * 获取状态
156
+ */
157
+ getStatus() {
158
+ return {
159
+ enabled: this.config.enabled ?? true,
160
+ consecutiveFailures: this.consecutiveFailures,
161
+ inCooldown: this.isInCooldown(),
162
+ currentCooldownMs: this.isInCooldown() ? this.getCooldownMs() : 0,
163
+ degradedMode: this.degradedMode
164
+ };
165
+ }
166
+ /**
167
+ * 更新配置
168
+ */
169
+ updateConfig(config) {
170
+ this.config = { ...this.config, ...config };
171
+ }
172
+ }
173
+ exports.WebhookPusher = WebhookPusher;
174
+ //# sourceMappingURL=webhook-pusher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook-pusher.js","sourceRoot":"","sources":["../src/webhook-pusher.ts"],"names":[],"mappings":"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"}
@@ -22,7 +22,13 @@ export declare class WebhookServer {
22
22
  private port;
23
23
  private handler;
24
24
  private server?;
25
- constructor(port: number, handler: WebhookHandler);
25
+ private maxBodySize;
26
+ /** 允许的 CORS 来源列表 */
27
+ private allowedOrigins;
28
+ constructor(port: number, handler: WebhookHandler, options?: {
29
+ maxBodySize?: number;
30
+ allowedOrigins?: string[];
31
+ });
26
32
  /**
27
33
  * 启动 Webhook 服务器
28
34
  */
@@ -37,6 +43,7 @@ export declare class WebhookServer {
37
43
  private handleRequest;
38
44
  /**
39
45
  * 解析请求体
46
+ * 带大小限制,防止 DoS 攻击
40
47
  */
41
48
  private parseBody;
42
49
  getUrl(): string;
@@ -1 +1 @@
1
- {"version":3,"file":"webhook-server.d.ts","sourceRoot":"","sources":["../src/webhook-server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAEV,sBAAsB,EACtB,sBAAsB,EACtB,eAAe,EAEhB,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,cAAc;IAC7B,UAAU,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC;QACnD,YAAY,EAAE,eAAe,EAAE,CAAC;QAChC,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC,CAAC;IAEH,UAAU,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC;QACnD,QAAQ,EAAE,OAAO,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;IAEH,QAAQ,IAAI,OAAO,CAAC;QAClB,MAAM,EAAE,WAAW,GAAG,MAAM,GAAG,SAAS,CAAC;QACzC,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC,CAAC;CACJ;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,MAAM,CAAC,CAAkC;gBAErC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc;IAKjD;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAe5B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAW3B;;OAEG;YACW,aAAa;IAyD3B;;OAEG;IACH,OAAO,CAAC,SAAS;IAoBjB,MAAM,IAAI,MAAM;CAGjB"}
1
+ {"version":3,"file":"webhook-server.d.ts","sourceRoot":"","sources":["../src/webhook-server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAEV,sBAAsB,EACtB,sBAAsB,EACtB,eAAe,EAEhB,MAAM,YAAY,CAAC;AAMpB,MAAM,WAAW,cAAc;IAC7B,UAAU,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC;QACnD,YAAY,EAAE,eAAe,EAAE,CAAC;QAChC,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC,CAAC;IAEH,UAAU,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC;QACnD,QAAQ,EAAE,OAAO,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;IAEH,QAAQ,IAAI,OAAO,CAAC;QAClB,MAAM,EAAE,WAAW,GAAG,MAAM,GAAG,SAAS,CAAC;QACzC,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC,CAAC;CACJ;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,MAAM,CAAC,CAAkC;IACjD,OAAO,CAAC,WAAW,CAAS;IAC5B,oBAAoB;IACpB,OAAO,CAAC,cAAc,CAAW;gBAErB,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,OAAO,CAAC,EAAE;QAC3D,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;KAC3B;IAQD;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAe5B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAW3B;;OAEG;YACW,aAAa;IA0E3B;;;OAGG;IACH,OAAO,CAAC,SAAS;IA8BjB,MAAM,IAAI,MAAM;CAGjB"}
@@ -6,13 +6,22 @@
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;
9
12
  class WebhookServer {
10
13
  port;
11
14
  handler;
12
15
  server;
13
- constructor(port, handler) {
16
+ maxBodySize;
17
+ /** 允许的 CORS 来源列表 */
18
+ allowedOrigins;
19
+ constructor(port, handler, options) {
14
20
  this.port = port;
15
21
  this.handler = handler;
22
+ this.maxBodySize = options?.maxBodySize || DEFAULT_MAX_BODY_SIZE;
23
+ // 默认只允许 localhost
24
+ this.allowedOrigins = options?.allowedOrigins ?? ['http://localhost'];
16
25
  }
17
26
  /**
18
27
  * 启动 Webhook 服务器
@@ -21,7 +30,7 @@ class WebhookServer {
21
30
  return new Promise((resolve, reject) => {
22
31
  this.server = (0, http_1.createServer)(this.handleRequest.bind(this));
23
32
  this.server.listen(this.port, () => {
24
- console.log(`[F2A Webhook] 服务器启动在端口 ${this.port}`);
33
+ logger_js_1.webhookLogger.info('服务器启动在端口 %d', this.port);
25
34
  resolve();
26
35
  });
27
36
  this.server.on('error', (err) => {
@@ -36,7 +45,7 @@ class WebhookServer {
36
45
  if (this.server) {
37
46
  return new Promise((resolve) => {
38
47
  this.server?.close(() => {
39
- console.log('[F2A Webhook] 服务器已停止');
48
+ logger_js_1.webhookLogger.info('服务器已停止');
40
49
  resolve();
41
50
  });
42
51
  });
@@ -46,8 +55,25 @@ class WebhookServer {
46
55
  * 处理 HTTP 请求
47
56
  */
48
57
  async handleRequest(req, res) {
49
- // 设置 CORS
50
- res.setHeader('Access-Control-Allow-Origin', '*');
58
+ // 设置 CORS - 使用配置的允许来源
59
+ const origin = req.headers.origin;
60
+ // 当 allowedOrigins 为空数组时,使用默认值 'http://localhost'
61
+ // 当 origin 不在允许列表中时,使用第一个允许的来源或默认值
62
+ const defaultOrigin = 'http://localhost';
63
+ let allowOrigin;
64
+ if (this.allowedOrigins.length === 0) {
65
+ // 没有配置允许来源,使用默认值
66
+ allowOrigin = defaultOrigin;
67
+ }
68
+ else if (origin && this.allowedOrigins.includes(origin)) {
69
+ // origin 在允许列表中
70
+ allowOrigin = origin;
71
+ }
72
+ else {
73
+ // origin 不在允许列表中,使用第一个允许的来源
74
+ allowOrigin = this.allowedOrigins[0];
75
+ }
76
+ res.setHeader('Access-Control-Allow-Origin', allowOrigin);
51
77
  res.setHeader('Access-Control-Allow-Methods', 'POST, OPTIONS');
52
78
  res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
53
79
  if (req.method === 'OPTIONS') {
@@ -63,7 +89,7 @@ class WebhookServer {
63
89
  try {
64
90
  const body = await this.parseBody(req);
65
91
  const event = body;
66
- console.log(`[F2A Webhook] 收到事件: ${event.type}`);
92
+ logger_js_1.webhookLogger.info('收到事件: %s', event.type);
67
93
  let result;
68
94
  switch (event.type) {
69
95
  case 'discover':
@@ -84,7 +110,7 @@ class WebhookServer {
84
110
  res.end(JSON.stringify(result));
85
111
  }
86
112
  catch (error) {
87
- console.error('[F2A Webhook] 处理错误:', error);
113
+ logger_js_1.webhookLogger.error('处理错误: %s', error);
88
114
  res.writeHead(500, { 'Content-Type': 'application/json' });
89
115
  res.end(JSON.stringify({
90
116
  error: error instanceof Error ? error.message : 'Internal error'
@@ -93,11 +119,20 @@ class WebhookServer {
93
119
  }
94
120
  /**
95
121
  * 解析请求体
122
+ * 带大小限制,防止 DoS 攻击
96
123
  */
97
124
  parseBody(req) {
98
125
  return new Promise((resolve, reject) => {
99
126
  let body = '';
127
+ let size = 0;
100
128
  req.on('data', (chunk) => {
129
+ size += chunk.length;
130
+ // 检查请求体大小
131
+ if (size > this.maxBodySize) {
132
+ req.destroy();
133
+ reject(new Error(`Request body too large: ${size} bytes (max: ${this.maxBodySize})`));
134
+ return;
135
+ }
101
136
  body += chunk.toString();
102
137
  });
103
138
  req.on('end', () => {
@@ -1 +1 @@
1
- {"version":3,"file":"webhook-server.js","sourceRoot":"","sources":["../src/webhook-server.ts"],"names":[],"mappings":"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"}
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.1.0",
3
+ "version": "0.1.4",
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": ["./dist/plugin.js"]
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": ["openclaw", "f2a", "p2p", "agent", "plugin"],
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": "file:../..",
26
- "ws": "^8.16.0",
37
+ "@f2a/network": "^0.1.2",
38
+ "better-sqlite3": "^11.0.0",
27
39
  "node-fetch": "^3.3.2",
28
- "zod": "^3.22.4",
29
- "better-sqlite3": "^11.0.0"
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
+ }