@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,199 +0,0 @@
1
- import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
2
- import { P2PNetwork } from './p2p-network.js';
3
- import { AgentInfo } from '../types/index.js';
4
-
5
- describe('P2PNetwork', () => {
6
- let network: P2PNetwork;
7
- let mockAgentInfo: AgentInfo;
8
-
9
- beforeEach(() => {
10
- mockAgentInfo = {
11
- peerId: '',
12
- displayName: 'Test Agent',
13
- agentType: 'openclaw',
14
- version: '1.0.0',
15
- capabilities: [],
16
- protocolVersion: 'f2a/1.0',
17
- lastSeen: Date.now(),
18
- multiaddrs: []
19
- };
20
- network = new P2PNetwork(mockAgentInfo);
21
- });
22
-
23
- afterEach(async () => {
24
- await network.stop();
25
- });
26
-
27
- describe('initialization', () => {
28
- it('should initialize with correct default config', () => {
29
- expect(network).toBeDefined();
30
- expect(network.getPeerId()).toBe('');
31
- });
32
-
33
- it('should handle multiple stop calls gracefully', async () => {
34
- await network.stop();
35
- await network.stop(); // Should not throw
36
- expect(network.getPeerId()).toBe('');
37
- });
38
- });
39
-
40
- describe('peer management', () => {
41
- it('should return empty array when no peers connected', () => {
42
- const peers = network.getConnectedPeers();
43
- expect(peers).toEqual([]);
44
- });
45
-
46
- it('should return empty array for all peers initially', () => {
47
- const peers = network.getAllPeers();
48
- expect(peers).toEqual([]);
49
- });
50
- });
51
-
52
- describe('capability checking', () => {
53
- it('should correctly identify agent capabilities', () => {
54
- const agentWithCaps: AgentInfo = {
55
- ...mockAgentInfo,
56
- capabilities: [
57
- { name: 'file-operation', description: 'File ops', tools: ['read'] }
58
- ]
59
- };
60
-
61
- const hasCap = (network as any).hasCapability(agentWithCaps, 'file-operation');
62
- expect(hasCap).toBe(true);
63
- });
64
-
65
- it('should return false for missing capabilities', () => {
66
- const agentWithCaps: AgentInfo = {
67
- ...mockAgentInfo,
68
- capabilities: []
69
- };
70
-
71
- const hasCap = (network as any).hasCapability(agentWithCaps, 'file-operation');
72
- expect(hasCap).toBe(false);
73
- });
74
- });
75
-
76
- describe('DHT features', () => {
77
- it('should return false for isDHTEnabled when not started', () => {
78
- expect(network.isDHTEnabled()).toBe(false);
79
- });
80
-
81
- it('should return 0 for getDHTPeerCount when not started', () => {
82
- expect(network.getDHTPeerCount()).toBe(0);
83
- });
84
-
85
- it('should return error when findPeerViaDHT called before start', async () => {
86
- const result = await network.findPeerViaDHT('test-peer-id');
87
- expect(result.success).toBe(false);
88
- expect(result.error?.code).toBe('NETWORK_NOT_STARTED');
89
- });
90
- });
91
-
92
- describe('E2EE features', () => {
93
- it('should return null for getEncryptionPublicKey when not started', () => {
94
- expect(network.getEncryptionPublicKey()).toBeNull();
95
- });
96
-
97
- it('should return 0 for getEncryptedPeerCount when not started', () => {
98
- expect(network.getEncryptedPeerCount()).toBe(0);
99
- });
100
- });
101
-
102
- describe('events', () => {
103
- it('should emit error event', async () => {
104
- const errorPromise = new Promise<Error>((resolve) => {
105
- network.on('error', (error) => {
106
- resolve(error);
107
- });
108
- });
109
-
110
- (network as any).emit('error', new Error('Test error'));
111
-
112
- const error = await errorPromise;
113
- expect(error).toBeInstanceOf(Error);
114
- expect(error.message).toBe('Test error');
115
- });
116
- });
117
-
118
- describe('message handling', () => {
119
- it('should process DISCOVER_RESP and upsert peer', async () => {
120
- const agentInfo: AgentInfo = {
121
- ...mockAgentInfo,
122
- peerId: 'peer-remote',
123
- multiaddrs: ['/ip4/127.0.0.1/tcp/9002']
124
- };
125
-
126
- await (network as any).handleMessage(
127
- {
128
- id: '00000000-0000-4000-8000-000000000001',
129
- type: 'DISCOVER_RESP',
130
- from: 'peer-remote',
131
- timestamp: Date.now(),
132
- payload: { agentInfo }
133
- },
134
- 'peer-remote'
135
- );
136
-
137
- const peers = network.getAllPeers();
138
- expect(peers).toHaveLength(1);
139
- expect(peers[0].agentInfo?.peerId).toBe('peer-remote');
140
- expect(peers[0].multiaddrs[0].toString()).toContain('/tcp/9002');
141
- });
142
-
143
- it('should process CAPABILITY_RESPONSE and upsert peer', async () => {
144
- const agentInfo: AgentInfo = {
145
- ...mockAgentInfo,
146
- peerId: 'peer-cap',
147
- capabilities: [{ name: 'code-gen', description: 'Code Gen', tools: ['generate'] }],
148
- multiaddrs: ['/ip4/127.0.0.1/tcp/9003']
149
- };
150
-
151
- await (network as any).handleMessage(
152
- {
153
- id: '00000000-0000-4000-8000-000000000002',
154
- type: 'CAPABILITY_RESPONSE',
155
- from: 'peer-cap',
156
- timestamp: Date.now(),
157
- payload: { agentInfo }
158
- },
159
- 'peer-cap'
160
- );
161
-
162
- const peers = network.getAllPeers();
163
- expect(peers).toHaveLength(1);
164
- expect(peers[0].agentInfo?.capabilities[0].name).toBe('code-gen');
165
- });
166
- });
167
-
168
- describe('broadcast', () => {
169
- it('should count fulfilled failures in broadcast warning', async () => {
170
- const warnSpy = vi.spyOn((network as any).logger, 'warn');
171
-
172
- (network as any).node = {
173
- getPeers: vi.fn().mockReturnValue([
174
- { toString: () => 'peer-a' },
175
- { toString: () => 'peer-b' }
176
- ]),
177
- stop: vi.fn().mockResolvedValue(undefined)
178
- };
179
-
180
- const sendSpy = vi.spyOn(network as any, 'sendMessage')
181
- .mockResolvedValueOnce({ success: true, data: undefined })
182
- .mockResolvedValueOnce({ success: false, error: { code: 'PEER_NOT_FOUND', message: 'Peer not found' } });
183
-
184
- await (network as any).broadcast({
185
- id: 'msg-broadcast',
186
- type: 'DISCOVER',
187
- from: 'self',
188
- timestamp: Date.now(),
189
- payload: { agentInfo: mockAgentInfo }
190
- });
191
-
192
- expect(sendSpy).toHaveBeenCalledTimes(2);
193
- expect(warnSpy).toHaveBeenCalledWith('Broadcast failed to some peers', {
194
- failed: 1,
195
- total: 2
196
- });
197
- });
198
- });
199
- });