@f2a/network 0.1.2 → 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.
Files changed (226) hide show
  1. package/README.md +278 -63
  2. package/dist/cli/commands.d.ts.map +1 -1
  3. package/dist/cli/commands.js +29 -2
  4. package/dist/cli/commands.js.map +1 -1
  5. package/dist/cli/config.d.ts +176 -0
  6. package/dist/cli/config.d.ts.map +1 -0
  7. package/dist/cli/config.js +386 -0
  8. package/dist/cli/config.js.map +1 -0
  9. package/dist/cli/daemon.d.ts +54 -0
  10. package/dist/cli/daemon.d.ts.map +1 -0
  11. package/dist/cli/daemon.js +572 -0
  12. package/dist/cli/daemon.js.map +1 -0
  13. package/dist/cli/index.js +90 -16
  14. package/dist/cli/index.js.map +1 -1
  15. package/dist/cli/init.d.ts +13 -0
  16. package/dist/cli/init.d.ts.map +1 -0
  17. package/dist/cli/init.js +352 -0
  18. package/dist/cli/init.js.map +1 -0
  19. package/dist/core/e2ee-crypto.d.ts +127 -1
  20. package/dist/core/e2ee-crypto.d.ts.map +1 -1
  21. package/dist/core/e2ee-crypto.js +446 -12
  22. package/dist/core/e2ee-crypto.js.map +1 -1
  23. package/dist/core/f2a.d.ts +2 -1
  24. package/dist/core/f2a.d.ts.map +1 -1
  25. package/dist/core/f2a.js +6 -2
  26. package/dist/core/f2a.js.map +1 -1
  27. package/dist/core/identity/encrypted-key-store.d.ts +19 -0
  28. package/dist/core/identity/encrypted-key-store.d.ts.map +1 -0
  29. package/dist/core/identity/encrypted-key-store.js +72 -0
  30. package/dist/core/identity/encrypted-key-store.js.map +1 -0
  31. package/dist/core/identity/identity-manager.d.ts +133 -0
  32. package/dist/core/identity/identity-manager.d.ts.map +1 -0
  33. package/dist/core/identity/identity-manager.js +454 -0
  34. package/dist/core/identity/identity-manager.js.map +1 -0
  35. package/dist/core/identity/index.d.ts +8 -0
  36. package/dist/core/identity/index.d.ts.map +1 -0
  37. package/dist/core/identity/index.js +7 -0
  38. package/dist/core/identity/index.js.map +1 -0
  39. package/dist/core/identity/types.d.ts +70 -0
  40. package/dist/core/identity/types.d.ts.map +1 -0
  41. package/dist/core/identity/types.js +17 -0
  42. package/dist/core/identity/types.js.map +1 -0
  43. package/dist/core/p2p-network.d.ts +26 -0
  44. package/dist/core/p2p-network.d.ts.map +1 -1
  45. package/dist/core/p2p-network.js +434 -105
  46. package/dist/core/p2p-network.js.map +1 -1
  47. package/dist/core/reputation-security.d.ts +15 -0
  48. package/dist/core/reputation-security.d.ts.map +1 -1
  49. package/dist/core/reputation-security.js +73 -3
  50. package/dist/core/reputation-security.js.map +1 -1
  51. package/dist/core/reputation.d.ts +129 -4
  52. package/dist/core/reputation.d.ts.map +1 -1
  53. package/dist/core/reputation.js +294 -1
  54. package/dist/core/reputation.js.map +1 -1
  55. package/dist/core/review-committee.d.ts +2 -2
  56. package/dist/core/review-committee.d.ts.map +1 -1
  57. package/dist/core/review-committee.js +17 -0
  58. package/dist/core/review-committee.js.map +1 -1
  59. package/dist/daemon/control-server.d.ts.map +1 -1
  60. package/dist/daemon/control-server.js +44 -1
  61. package/dist/daemon/control-server.js.map +1 -1
  62. package/dist/daemon/webhook.d.ts +3 -0
  63. package/dist/daemon/webhook.d.ts.map +1 -1
  64. package/dist/daemon/webhook.js +318 -6
  65. package/dist/daemon/webhook.js.map +1 -1
  66. package/dist/index.d.ts +3 -3
  67. package/dist/index.d.ts.map +1 -1
  68. package/dist/index.js +7 -3
  69. package/dist/index.js.map +1 -1
  70. package/dist/types/index.d.ts +4 -0
  71. package/dist/types/index.d.ts.map +1 -1
  72. package/dist/types/index.js.map +1 -1
  73. package/dist/types/result.d.ts +1 -1
  74. package/dist/types/result.d.ts.map +1 -1
  75. package/dist/types/result.js.map +1 -1
  76. package/dist/utils/crypto-utils.d.ts +17 -0
  77. package/dist/utils/crypto-utils.d.ts.map +1 -0
  78. package/dist/utils/crypto-utils.js +28 -0
  79. package/dist/utils/crypto-utils.js.map +1 -0
  80. package/dist/utils/logger.d.ts +1 -0
  81. package/dist/utils/logger.d.ts.map +1 -1
  82. package/dist/utils/logger.js +9 -3
  83. package/dist/utils/logger.js.map +1 -1
  84. package/dist/utils/rate-limiter.d.ts.map +1 -1
  85. package/dist/utils/rate-limiter.js +3 -1
  86. package/dist/utils/rate-limiter.js.map +1 -1
  87. package/dist/utils/signature.d.ts +47 -1
  88. package/dist/utils/signature.d.ts.map +1 -1
  89. package/dist/utils/signature.js +166 -11
  90. package/dist/utils/signature.js.map +1 -1
  91. package/package.json +9 -1
  92. package/.github/workflows/ci.yml +0 -113
  93. package/.github/workflows/publish.yml +0 -60
  94. package/MONOREPO.md +0 -58
  95. package/SKILL.md +0 -137
  96. package/dist/adapters/openclaw.d.ts +0 -103
  97. package/dist/adapters/openclaw.d.ts.map +0 -1
  98. package/dist/adapters/openclaw.js +0 -297
  99. package/dist/adapters/openclaw.js.map +0 -1
  100. package/dist/core/connection-manager.d.ts +0 -80
  101. package/dist/core/connection-manager.d.ts.map +0 -1
  102. package/dist/core/connection-manager.js +0 -235
  103. package/dist/core/connection-manager.js.map +0 -1
  104. package/dist/core/connection-manager.test.d.ts +0 -2
  105. package/dist/core/connection-manager.test.d.ts.map +0 -1
  106. package/dist/core/connection-manager.test.js +0 -52
  107. package/dist/core/connection-manager.test.js.map +0 -1
  108. package/dist/core/identity.d.ts +0 -47
  109. package/dist/core/identity.d.ts.map +0 -1
  110. package/dist/core/identity.js +0 -130
  111. package/dist/core/identity.js.map +0 -1
  112. package/dist/core/identity.test.d.ts +0 -2
  113. package/dist/core/identity.test.d.ts.map +0 -1
  114. package/dist/core/identity.test.js +0 -43
  115. package/dist/core/identity.test.js.map +0 -1
  116. package/dist/core/serverless.d.ts +0 -155
  117. package/dist/core/serverless.d.ts.map +0 -1
  118. package/dist/core/serverless.js +0 -615
  119. package/dist/core/serverless.js.map +0 -1
  120. package/dist/daemon/webhook.test.d.ts +0 -2
  121. package/dist/daemon/webhook.test.d.ts.map +0 -1
  122. package/dist/daemon/webhook.test.js +0 -24
  123. package/dist/daemon/webhook.test.js.map +0 -1
  124. package/dist/protocol/messages.d.ts +0 -739
  125. package/dist/protocol/messages.d.ts.map +0 -1
  126. package/dist/protocol/messages.js +0 -188
  127. package/dist/protocol/messages.js.map +0 -1
  128. package/dist/protocol/messages.test.d.ts +0 -2
  129. package/dist/protocol/messages.test.d.ts.map +0 -1
  130. package/dist/protocol/messages.test.js +0 -55
  131. package/dist/protocol/messages.test.js.map +0 -1
  132. package/docs/F2A-PROTOCOL.md +0 -61
  133. package/docs/MOBILE_BOOTSTRAP_DESIGN.md +0 -126
  134. package/docs/a2a-lessons.md +0 -316
  135. package/docs/middleware-guide.md +0 -448
  136. package/docs/readme-update-checklist.md +0 -90
  137. package/docs/reputation-guide.md +0 -396
  138. package/docs/rfcs/001-reputation-system.md +0 -712
  139. package/docs/security-design.md +0 -247
  140. package/install.sh +0 -231
  141. package/packages/openclaw-adapter/README.md +0 -510
  142. package/packages/openclaw-adapter/openclaw.plugin.json +0 -106
  143. package/packages/openclaw-adapter/package.json +0 -40
  144. package/packages/openclaw-adapter/src/announcement-queue.test.ts +0 -449
  145. package/packages/openclaw-adapter/src/announcement-queue.ts +0 -403
  146. package/packages/openclaw-adapter/src/capability-detector.test.ts +0 -99
  147. package/packages/openclaw-adapter/src/capability-detector.ts +0 -183
  148. package/packages/openclaw-adapter/src/claim-handlers.test.ts +0 -974
  149. package/packages/openclaw-adapter/src/claim-handlers.ts +0 -482
  150. package/packages/openclaw-adapter/src/connector.business.test.ts +0 -583
  151. package/packages/openclaw-adapter/src/connector.ts +0 -795
  152. package/packages/openclaw-adapter/src/index.test.ts +0 -82
  153. package/packages/openclaw-adapter/src/index.ts +0 -18
  154. package/packages/openclaw-adapter/src/integration.e2e.test.ts +0 -829
  155. package/packages/openclaw-adapter/src/logger.ts +0 -51
  156. package/packages/openclaw-adapter/src/network-client.test.ts +0 -266
  157. package/packages/openclaw-adapter/src/network-client.ts +0 -251
  158. package/packages/openclaw-adapter/src/network-recovery.test.ts +0 -465
  159. package/packages/openclaw-adapter/src/node-manager.test.ts +0 -136
  160. package/packages/openclaw-adapter/src/node-manager.ts +0 -429
  161. package/packages/openclaw-adapter/src/plugin.test.ts +0 -439
  162. package/packages/openclaw-adapter/src/plugin.ts +0 -104
  163. package/packages/openclaw-adapter/src/reputation.test.ts +0 -221
  164. package/packages/openclaw-adapter/src/reputation.ts +0 -368
  165. package/packages/openclaw-adapter/src/task-guard.test.ts +0 -502
  166. package/packages/openclaw-adapter/src/task-guard.ts +0 -860
  167. package/packages/openclaw-adapter/src/task-queue.concurrency.test.ts +0 -462
  168. package/packages/openclaw-adapter/src/task-queue.edge-cases.test.ts +0 -284
  169. package/packages/openclaw-adapter/src/task-queue.persistence.test.ts +0 -408
  170. package/packages/openclaw-adapter/src/task-queue.ts +0 -668
  171. package/packages/openclaw-adapter/src/tool-handlers.test.ts +0 -906
  172. package/packages/openclaw-adapter/src/tool-handlers.ts +0 -574
  173. package/packages/openclaw-adapter/src/types.ts +0 -361
  174. package/packages/openclaw-adapter/src/webhook-pusher.test.ts +0 -188
  175. package/packages/openclaw-adapter/src/webhook-pusher.ts +0 -220
  176. package/packages/openclaw-adapter/src/webhook-server.test.ts +0 -580
  177. package/packages/openclaw-adapter/src/webhook-server.ts +0 -202
  178. package/packages/openclaw-adapter/tsconfig.json +0 -20
  179. package/src/cli/commands.test.ts +0 -157
  180. package/src/cli/commands.ts +0 -129
  181. package/src/cli/index.test.ts +0 -77
  182. package/src/cli/index.ts +0 -234
  183. package/src/core/autonomous-economy.test.ts +0 -291
  184. package/src/core/autonomous-economy.ts +0 -428
  185. package/src/core/e2ee-crypto.test.ts +0 -125
  186. package/src/core/e2ee-crypto.ts +0 -246
  187. package/src/core/f2a.test.ts +0 -269
  188. package/src/core/f2a.ts +0 -618
  189. package/src/core/p2p-network.test.ts +0 -199
  190. package/src/core/p2p-network.ts +0 -1432
  191. package/src/core/reputation-security.test.ts +0 -403
  192. package/src/core/reputation-security.ts +0 -562
  193. package/src/core/reputation.test.ts +0 -260
  194. package/src/core/reputation.ts +0 -576
  195. package/src/core/review-committee.test.ts +0 -380
  196. package/src/core/review-committee.ts +0 -401
  197. package/src/core/token-manager.test.ts +0 -133
  198. package/src/core/token-manager.ts +0 -140
  199. package/src/daemon/control-server.test.ts +0 -216
  200. package/src/daemon/control-server.ts +0 -292
  201. package/src/daemon/index.test.ts +0 -85
  202. package/src/daemon/index.ts +0 -89
  203. package/src/daemon/main.ts +0 -44
  204. package/src/daemon/start.ts +0 -29
  205. package/src/daemon/webhook.test.ts +0 -68
  206. package/src/daemon/webhook.ts +0 -105
  207. package/src/index.test.ts +0 -436
  208. package/src/index.ts +0 -72
  209. package/src/types/index.test.ts +0 -87
  210. package/src/types/index.ts +0 -341
  211. package/src/types/result.ts +0 -68
  212. package/src/utils/benchmark.ts +0 -237
  213. package/src/utils/logger.ts +0 -331
  214. package/src/utils/middleware.ts +0 -229
  215. package/src/utils/rate-limiter.ts +0 -207
  216. package/src/utils/signature.ts +0 -136
  217. package/src/utils/validation.ts +0 -186
  218. package/tests/docker/Dockerfile.node +0 -23
  219. package/tests/docker/Dockerfile.runner +0 -18
  220. package/tests/docker/docker-compose.test.yml +0 -73
  221. package/tests/integration/message-passing.test.ts +0 -109
  222. package/tests/integration/multi-node.test.ts +0 -92
  223. package/tests/integration/p2p-connection.test.ts +0 -83
  224. package/tests/integration/test-config.ts +0 -32
  225. package/tsconfig.json +0 -21
  226. package/vitest.config.ts +0 -26
@@ -1,52 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const vitest_1 = require("vitest");
4
- const connection_manager_1 = require("./connection-manager");
5
- // Mock Socket
6
- function createMockSocket() {
7
- return {
8
- ended: false,
9
- end: function () { this.ended = true; },
10
- remoteAddress: '192.168.1.100',
11
- remotePort: 9001
12
- };
13
- }
14
- (0, vitest_1.describe)('ConnectionManager', () => {
15
- let cm;
16
- (0, vitest_1.beforeEach)(() => {
17
- cm = new connection_manager_1.ConnectionManager({ timeout: 1000, cleanupInterval: 100 });
18
- });
19
- (0, vitest_1.afterEach)(() => {
20
- cm.stop();
21
- });
22
- (0, vitest_1.it)('should add pending connection', () => {
23
- const socket = createMockSocket();
24
- const result = cm.addPending('agent-1', socket, 'key', '192.168.1.100', 9001);
25
- (0, vitest_1.expect)(result.confirmationId).toBeDefined();
26
- (0, vitest_1.expect)(result.isDuplicate).toBe(false);
27
- (0, vitest_1.expect)(cm.getPendingCount()).toBe(1);
28
- });
29
- (0, vitest_1.it)('should deduplicate same agent requests', () => {
30
- const socket1 = createMockSocket();
31
- cm.addPending('agent-1', socket1, 'key1', '192.168.1.100', 9001);
32
- const socket2 = createMockSocket();
33
- const result = cm.addPending('agent-1', socket2, 'key2', '192.168.1.100', 9002);
34
- (0, vitest_1.expect)(result.isDuplicate).toBe(true);
35
- (0, vitest_1.expect)(cm.getPendingCount()).toBe(1);
36
- });
37
- (0, vitest_1.it)('should confirm connection', () => {
38
- cm.addPending('agent-1', createMockSocket(), 'key1', '192.168.1.100', 9001);
39
- const result = cm.confirm(1);
40
- (0, vitest_1.expect)(result.success).toBe(true);
41
- (0, vitest_1.expect)(cm.getPendingCount()).toBe(0);
42
- });
43
- (0, vitest_1.it)('should reject connection', () => {
44
- const socket = createMockSocket();
45
- cm.addPending('agent-1', socket, 'key1', '192.168.1.100', 9001);
46
- const result = cm.reject(1, 'test reason');
47
- (0, vitest_1.expect)(result.success).toBe(true);
48
- (0, vitest_1.expect)(socket.ended).toBe(true);
49
- (0, vitest_1.expect)(cm.getPendingCount()).toBe(0);
50
- });
51
- });
52
- //# sourceMappingURL=connection-manager.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"connection-manager.test.js","sourceRoot":"","sources":["../../src/core/connection-manager.test.ts"],"names":[],"mappings":"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"}
@@ -1,47 +0,0 @@
1
- /**
2
- * 身份管理器
3
- * 负责生成、加载和保存 Agent 身份
4
- */
5
- import { AgentIdentity, IdentityInfo, Result } from '../types';
6
- export interface IdentityManagerOptions {
7
- configDir?: string;
8
- }
9
- export declare class IdentityManager {
10
- private configDir;
11
- private identityFile;
12
- constructor(options?: IdentityManagerOptions);
13
- /**
14
- * 获取或创建身份
15
- */
16
- getOrCreateIdentity(displayName?: string): IdentityInfo;
17
- /**
18
- * 创建新身份
19
- */
20
- createIdentity(displayName?: string): IdentityInfo;
21
- /**
22
- * 加载已有身份
23
- */
24
- loadIdentity(): AgentIdentity | null;
25
- /**
26
- * 保存身份
27
- */
28
- saveIdentity(identity: AgentIdentity): Result<void>;
29
- /**
30
- * 获取身份文件路径
31
- */
32
- getConfigPath(): string;
33
- /**
34
- * 获取身份信息(只读)
35
- */
36
- getIdentityInfo(): Pick<AgentIdentity, 'agentId' | 'displayName'> | null;
37
- /**
38
- * 生成 Agent ID
39
- * 基于公钥派生
40
- */
41
- private generateAgentId;
42
- /**
43
- * 确保配置目录存在
44
- */
45
- private ensureConfigDir;
46
- }
47
- //# sourceMappingURL=identity.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../../src/core/identity.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAE/D,MAAM,WAAW,sBAAsB;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,eAAe;IAC1B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,YAAY,CAAS;gBAEjB,OAAO,GAAE,sBAA2B;IAMhD;;OAEG;IACH,mBAAmB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,YAAY;IASvD;;OAEG;IACH,cAAc,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,YAAY;IAwBlD;;OAEG;IACH,YAAY,IAAI,aAAa,GAAG,IAAI;IAsBpC;;OAEG;IACH,YAAY,CAAC,QAAQ,EAAE,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC;IAWnD;;OAEG;IACH,aAAa,IAAI,MAAM;IAIvB;;OAEG;IACH,eAAe,IAAI,IAAI,CAAC,aAAa,EAAE,SAAS,GAAG,aAAa,CAAC,GAAG,IAAI;IAUxE;;;OAGG;IACH,OAAO,CAAC,eAAe;IAYvB;;OAEG;IACH,OAAO,CAAC,eAAe;CAKxB"}
@@ -1,130 +0,0 @@
1
- "use strict";
2
- /**
3
- * 身份管理器
4
- * 负责生成、加载和保存 Agent 身份
5
- */
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.IdentityManager = void 0;
8
- const crypto_1 = require("crypto");
9
- const fs_1 = require("fs");
10
- const path_1 = require("path");
11
- const os_1 = require("os");
12
- class IdentityManager {
13
- configDir;
14
- identityFile;
15
- constructor(options = {}) {
16
- this.configDir = options.configDir ?? (0, path_1.join)((0, os_1.homedir)(), '.f2a');
17
- this.identityFile = (0, path_1.join)(this.configDir, 'identity.json');
18
- this.ensureConfigDir();
19
- }
20
- /**
21
- * 获取或创建身份
22
- */
23
- getOrCreateIdentity(displayName) {
24
- const existing = this.loadIdentity();
25
- if (existing) {
26
- return { ...existing, isNew: false };
27
- }
28
- return this.createIdentity(displayName);
29
- }
30
- /**
31
- * 创建新身份
32
- */
33
- createIdentity(displayName) {
34
- const keyPair = (0, crypto_1.generateKeyPairSync)('ed25519', {
35
- publicKeyEncoding: { type: 'spki', format: 'pem' },
36
- privateKeyEncoding: { type: 'pkcs8', format: 'pem' }
37
- });
38
- const agentId = this.generateAgentId(keyPair.publicKey);
39
- const identity = {
40
- agentId,
41
- publicKey: keyPair.publicKey,
42
- privateKey: keyPair.privateKey,
43
- displayName
44
- };
45
- this.saveIdentity(identity);
46
- return {
47
- ...identity,
48
- isNew: true,
49
- createdAt: Date.now()
50
- };
51
- }
52
- /**
53
- * 加载已有身份
54
- */
55
- loadIdentity() {
56
- try {
57
- if (!(0, fs_1.existsSync)(this.identityFile)) {
58
- return null;
59
- }
60
- const data = (0, fs_1.readFileSync)(this.identityFile, 'utf-8');
61
- const identity = JSON.parse(data);
62
- // 验证必要字段
63
- if (!identity.agentId || !identity.publicKey || !identity.privateKey) {
64
- console.error('[IdentityManager] 身份文件格式错误');
65
- return null;
66
- }
67
- return identity;
68
- }
69
- catch (error) {
70
- console.error('[IdentityManager] 加载身份失败:', error);
71
- return null;
72
- }
73
- }
74
- /**
75
- * 保存身份
76
- */
77
- saveIdentity(identity) {
78
- try {
79
- const data = JSON.stringify(identity, null, 2);
80
- (0, fs_1.writeFileSync)(this.identityFile, data, { mode: 0o600 }); // 只有所有者可读写
81
- return { success: true, data: undefined };
82
- }
83
- catch (error) {
84
- const message = error instanceof Error ? error.message : String(error);
85
- return { success: false, error: `保存身份失败: ${message}` };
86
- }
87
- }
88
- /**
89
- * 获取身份文件路径
90
- */
91
- getConfigPath() {
92
- return this.identityFile;
93
- }
94
- /**
95
- * 获取身份信息(只读)
96
- */
97
- getIdentityInfo() {
98
- const identity = this.loadIdentity();
99
- if (!identity)
100
- return null;
101
- return {
102
- agentId: identity.agentId,
103
- displayName: identity.displayName
104
- };
105
- }
106
- /**
107
- * 生成 Agent ID
108
- * 基于公钥派生
109
- */
110
- generateAgentId(publicKey) {
111
- // 使用公钥的前 16 位作为基础
112
- const base = publicKey
113
- .replace(/-----BEGIN PUBLIC KEY-----/, '')
114
- .replace(/-----END PUBLIC KEY-----/, '')
115
- .replace(/\s/g, '')
116
- .slice(0, 16);
117
- // 格式: f2a-xxxx-xxxx
118
- return `f2a-${base.slice(0, 4)}-${base.slice(4, 8)}-${base.slice(8, 12)}`;
119
- }
120
- /**
121
- * 确保配置目录存在
122
- */
123
- ensureConfigDir() {
124
- if (!(0, fs_1.existsSync)(this.configDir)) {
125
- (0, fs_1.mkdirSync)(this.configDir, { recursive: true, mode: 0o700 });
126
- }
127
- }
128
- }
129
- exports.IdentityManager = IdentityManager;
130
- //# sourceMappingURL=identity.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"identity.js","sourceRoot":"","sources":["../../src/core/identity.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=identity.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"identity.test.d.ts","sourceRoot":"","sources":["../../src/core/identity.test.ts"],"names":[],"mappings":""}
@@ -1,43 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const vitest_1 = require("vitest");
4
- const identity_1 = require("./identity");
5
- const fs_1 = require("fs");
6
- const path_1 = require("path");
7
- const os_1 = require("os");
8
- (0, vitest_1.describe)('IdentityManager', () => {
9
- let testDir;
10
- let im;
11
- (0, vitest_1.beforeEach)(() => {
12
- testDir = (0, path_1.join)((0, os_1.tmpdir)(), `f2a-test-${Date.now()}`);
13
- im = new identity_1.IdentityManager({ configDir: testDir });
14
- });
15
- (0, vitest_1.afterEach)(() => {
16
- if ((0, fs_1.existsSync)(testDir)) {
17
- (0, fs_1.rmSync)(testDir, { recursive: true });
18
- }
19
- });
20
- (0, vitest_1.it)('should create new identity', () => {
21
- const identity = im.getOrCreateIdentity('TestAgent');
22
- (0, vitest_1.expect)(identity.isNew).toBe(true);
23
- (0, vitest_1.expect)(identity.agentId).toBeDefined();
24
- (0, vitest_1.expect)(identity.publicKey).toBeDefined();
25
- (0, vitest_1.expect)(identity.privateKey).toBeDefined();
26
- (0, vitest_1.expect)(identity.displayName).toBe('TestAgent');
27
- });
28
- (0, vitest_1.it)('should load existing identity', () => {
29
- const identity1 = im.getOrCreateIdentity();
30
- const identity2 = im.getOrCreateIdentity();
31
- (0, vitest_1.expect)(identity1.isNew).toBe(true);
32
- (0, vitest_1.expect)(identity2.isNew).toBe(false);
33
- (0, vitest_1.expect)(identity1.agentId).toBe(identity2.agentId);
34
- });
35
- (0, vitest_1.it)('should return identity info', () => {
36
- im.getOrCreateIdentity('TestAgent');
37
- const info = im.getIdentityInfo();
38
- (0, vitest_1.expect)(info).toBeDefined();
39
- (0, vitest_1.expect)(info?.agentId).toBeDefined();
40
- (0, vitest_1.expect)(info?.displayName).toBe('TestAgent');
41
- });
42
- });
43
- //# sourceMappingURL=identity.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"identity.test.js","sourceRoot":"","sources":["../../src/core/identity.test.ts"],"names":[],"mappings":";;AAAA,mCAAqE;AACrE,yCAA6C;AAC7C,2BAAwC;AACxC,+BAA4B;AAC5B,2BAA4B;AAE5B,IAAA,iBAAQ,EAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,IAAI,OAAe,CAAC;IACpB,IAAI,EAAmB,CAAC;IAExB,IAAA,mBAAU,EAAC,GAAG,EAAE;QACd,OAAO,GAAG,IAAA,WAAI,EAAC,IAAA,WAAM,GAAE,EAAE,YAAY,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACnD,EAAE,GAAG,IAAI,0BAAe,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,IAAA,kBAAS,EAAC,GAAG,EAAE;QACb,IAAI,IAAA,eAAU,EAAC,OAAO,CAAC,EAAE,CAAC;YACxB,IAAA,WAAM,EAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACvC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,4BAA4B,EAAE,GAAG,EAAE;QACpC,MAAM,QAAQ,GAAG,EAAE,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC;QAErD,IAAA,eAAM,EAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,IAAA,eAAM,EAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;QACvC,IAAA,eAAM,EAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC;QACzC,IAAA,eAAM,EAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;QAC1C,IAAA,eAAM,EAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,SAAS,GAAG,EAAE,CAAC,mBAAmB,EAAE,CAAC;QAC3C,MAAM,SAAS,GAAG,EAAE,CAAC,mBAAmB,EAAE,CAAC;QAE3C,IAAA,eAAM,EAAC,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnC,IAAA,eAAM,EAAC,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpC,IAAA,eAAM,EAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,EAAE,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC;QACpC,MAAM,IAAI,GAAG,EAAE,CAAC,eAAe,EAAE,CAAC;QAElC,IAAA,eAAM,EAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;QAC3B,IAAA,eAAM,EAAC,IAAI,EAAE,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;QACpC,IAAA,eAAM,EAAC,IAAI,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,155 +0,0 @@
1
- /**
2
- * P2P Serverless 模块
3
- * 处理 TCP 连接、UDP 发现、身份验证
4
- */
5
- import { EventEmitter } from 'eventemitter3';
6
- import { Socket } from 'net';
7
- import { ConnectionConfig, AgentIdentity, DiscoveredAgent, Result, F2AMessage } from '../types';
8
- import { ConnectionManager } from './connection-manager';
9
- export interface ServerlessP2POptions {
10
- identity: AgentIdentity;
11
- config: ConnectionConfig;
12
- connectionManager: ConnectionManager;
13
- }
14
- export interface PeerInfo {
15
- socket: Socket;
16
- address: string;
17
- port: number;
18
- publicKey: string;
19
- verified: boolean;
20
- connectedAt: number;
21
- }
22
- export declare class ServerlessP2P extends EventEmitter<{
23
- 'agent_discovered': (agent: DiscoveredAgent) => void;
24
- 'peer_connected': (info: {
25
- peerId: string;
26
- publicKey: string;
27
- }) => void;
28
- 'peer_disconnected': (info: {
29
- peerId: string;
30
- }) => void;
31
- 'message': (info: {
32
- peerId: string;
33
- message: F2AMessage;
34
- }) => void;
35
- 'started': (info: {
36
- port: number;
37
- }) => void;
38
- 'stopped': () => void;
39
- 'error': (error: Error) => void;
40
- }> {
41
- private identity;
42
- private config;
43
- private connectionManager;
44
- private tcpServer?;
45
- private udpSocket?;
46
- private peers;
47
- private discoveredAgents;
48
- private pendingChallenges;
49
- private rateLimiter;
50
- private discoveryInterval?;
51
- private broadcastInterval?;
52
- private cleanupInterval?;
53
- constructor(options: ServerlessP2POptions);
54
- /**
55
- * 启动 P2P 服务
56
- */
57
- start(): Promise<Result<void>>;
58
- /**
59
- * 停止 P2P 服务
60
- */
61
- stop(): void;
62
- /**
63
- * 连接到指定 Agent
64
- */
65
- connectToAgent(agentId: string, address: string, port: number): Promise<Result<void>>;
66
- /**
67
- * 发送消息给 Peer
68
- */
69
- sendToPeer(peerId: string, message: F2AMessage): Result<void>;
70
- /**
71
- * 获取已连接的 Peers
72
- */
73
- getConnectedPeers(): string[];
74
- /**
75
- * 获取发现的 Agents
76
- */
77
- getDiscoveredAgents(): DiscoveredAgent[];
78
- /**
79
- * 启动 TCP 监听器
80
- */
81
- private startTCPListener;
82
- /**
83
- * 启动 UDP 发现
84
- */
85
- private startUDPDiscovery;
86
- /**
87
- * 开始发现广播
88
- */
89
- private startDiscoveryBroadcast;
90
- /**
91
- * 处理发现消息
92
- */
93
- private handleDiscoveryMessage;
94
- /**
95
- * 处理传入连接
96
- */
97
- private handleIncomingConnection;
98
- /**
99
- * 设置 Socket 处理器
100
- */
101
- private setupSocketHandlers;
102
- /**
103
- * 处理 Socket 消息
104
- */
105
- private handleSocketMessage;
106
- /**
107
- * 发送身份挑战
108
- */
109
- private sendIdentityChallenge;
110
- /**
111
- * 处理身份挑战
112
- */
113
- private handleIdentityChallenge;
114
- /**
115
- * 处理身份响应
116
- */
117
- private handleIdentityResponse;
118
- /**
119
- * 请求确认
120
- */
121
- private requestConfirmation;
122
- /**
123
- * 处理确认结果
124
- */
125
- private handleConfirmationResult;
126
- /**
127
- * 验证 Peer
128
- */
129
- private verifyPeer;
130
- /**
131
- * 处理 Socket 关闭
132
- */
133
- private handleSocketClose;
134
- /**
135
- * 获取 Socket 对应的 Peer ID
136
- */
137
- private getPeerIdBySocket;
138
- /**
139
- * 速率限制检查
140
- */
141
- private checkRateLimit;
142
- /**
143
- * 获取广播地址列表
144
- */
145
- private getBroadcastAddresses;
146
- /**
147
- * 启动清理定时器
148
- */
149
- private startCleanup;
150
- /**
151
- * 安全关闭 Socket
152
- */
153
- private closeSocket;
154
- }
155
- //# sourceMappingURL=serverless.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"serverless.d.ts","sourceRoot":"","sources":["../../src/core/serverless.ts"],"names":[],"mappings":"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"}