@rookdaemon/agora 0.2.8 → 0.2.9

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 (143) hide show
  1. package/dist/chunk-JUOGKXFN.js +1645 -0
  2. package/dist/chunk-JUOGKXFN.js.map +1 -0
  3. package/dist/cli.d.ts +0 -2
  4. package/dist/cli.js +1163 -1137
  5. package/dist/cli.js.map +1 -1
  6. package/dist/index.d.ts +1613 -30
  7. package/dist/index.js +1135 -29
  8. package/dist/index.js.map +1 -1
  9. package/package.json +4 -2
  10. package/dist/cli.d.ts.map +0 -1
  11. package/dist/config.d.ts +0 -59
  12. package/dist/config.d.ts.map +0 -1
  13. package/dist/config.js +0 -115
  14. package/dist/config.js.map +0 -1
  15. package/dist/discovery/bootstrap.d.ts +0 -32
  16. package/dist/discovery/bootstrap.d.ts.map +0 -1
  17. package/dist/discovery/bootstrap.js +0 -36
  18. package/dist/discovery/bootstrap.js.map +0 -1
  19. package/dist/discovery/peer-discovery.d.ts +0 -59
  20. package/dist/discovery/peer-discovery.d.ts.map +0 -1
  21. package/dist/discovery/peer-discovery.js +0 -108
  22. package/dist/discovery/peer-discovery.js.map +0 -1
  23. package/dist/identity/keypair.d.ts +0 -42
  24. package/dist/identity/keypair.d.ts.map +0 -1
  25. package/dist/identity/keypair.js +0 -83
  26. package/dist/identity/keypair.js.map +0 -1
  27. package/dist/index.d.ts.map +0 -1
  28. package/dist/message/envelope.d.ts +0 -59
  29. package/dist/message/envelope.d.ts.map +0 -1
  30. package/dist/message/envelope.js +0 -83
  31. package/dist/message/envelope.js.map +0 -1
  32. package/dist/message/types/paper-discovery.d.ts +0 -28
  33. package/dist/message/types/paper-discovery.d.ts.map +0 -1
  34. package/dist/message/types/paper-discovery.js +0 -2
  35. package/dist/message/types/paper-discovery.js.map +0 -1
  36. package/dist/message/types/peer-discovery.d.ts +0 -78
  37. package/dist/message/types/peer-discovery.d.ts.map +0 -1
  38. package/dist/message/types/peer-discovery.js +0 -90
  39. package/dist/message/types/peer-discovery.js.map +0 -1
  40. package/dist/peer/client.d.ts +0 -50
  41. package/dist/peer/client.d.ts.map +0 -1
  42. package/dist/peer/client.js +0 -138
  43. package/dist/peer/client.js.map +0 -1
  44. package/dist/peer/manager.d.ts +0 -65
  45. package/dist/peer/manager.d.ts.map +0 -1
  46. package/dist/peer/manager.js +0 -153
  47. package/dist/peer/manager.js.map +0 -1
  48. package/dist/peer/server.d.ts +0 -65
  49. package/dist/peer/server.d.ts.map +0 -1
  50. package/dist/peer/server.js +0 -154
  51. package/dist/peer/server.js.map +0 -1
  52. package/dist/registry/capability.d.ts +0 -44
  53. package/dist/registry/capability.d.ts.map +0 -1
  54. package/dist/registry/capability.js +0 -94
  55. package/dist/registry/capability.js.map +0 -1
  56. package/dist/registry/discovery-service.d.ts +0 -64
  57. package/dist/registry/discovery-service.d.ts.map +0 -1
  58. package/dist/registry/discovery-service.js +0 -129
  59. package/dist/registry/discovery-service.js.map +0 -1
  60. package/dist/registry/messages.d.ts +0 -105
  61. package/dist/registry/messages.d.ts.map +0 -1
  62. package/dist/registry/messages.js +0 -2
  63. package/dist/registry/messages.js.map +0 -1
  64. package/dist/registry/peer-store.d.ts +0 -57
  65. package/dist/registry/peer-store.d.ts.map +0 -1
  66. package/dist/registry/peer-store.js +0 -92
  67. package/dist/registry/peer-store.js.map +0 -1
  68. package/dist/registry/peer.d.ts +0 -20
  69. package/dist/registry/peer.d.ts.map +0 -1
  70. package/dist/registry/peer.js +0 -2
  71. package/dist/registry/peer.js.map +0 -1
  72. package/dist/relay/client.d.ts +0 -112
  73. package/dist/relay/client.d.ts.map +0 -1
  74. package/dist/relay/client.js +0 -281
  75. package/dist/relay/client.js.map +0 -1
  76. package/dist/relay/jwt-auth.d.ts +0 -40
  77. package/dist/relay/jwt-auth.d.ts.map +0 -1
  78. package/dist/relay/jwt-auth.js +0 -109
  79. package/dist/relay/jwt-auth.js.map +0 -1
  80. package/dist/relay/message-buffer.d.ts +0 -41
  81. package/dist/relay/message-buffer.d.ts.map +0 -1
  82. package/dist/relay/message-buffer.js +0 -53
  83. package/dist/relay/message-buffer.js.map +0 -1
  84. package/dist/relay/rest-api.d.ts +0 -68
  85. package/dist/relay/rest-api.d.ts.map +0 -1
  86. package/dist/relay/rest-api.js +0 -225
  87. package/dist/relay/rest-api.js.map +0 -1
  88. package/dist/relay/run-relay.d.ts +0 -33
  89. package/dist/relay/run-relay.d.ts.map +0 -1
  90. package/dist/relay/run-relay.js +0 -57
  91. package/dist/relay/run-relay.js.map +0 -1
  92. package/dist/relay/server.d.ts +0 -91
  93. package/dist/relay/server.d.ts.map +0 -1
  94. package/dist/relay/server.js +0 -385
  95. package/dist/relay/server.js.map +0 -1
  96. package/dist/relay/store.d.ts +0 -19
  97. package/dist/relay/store.d.ts.map +0 -1
  98. package/dist/relay/store.js +0 -55
  99. package/dist/relay/store.js.map +0 -1
  100. package/dist/relay/types.d.ts +0 -35
  101. package/dist/relay/types.d.ts.map +0 -1
  102. package/dist/relay/types.js +0 -2
  103. package/dist/relay/types.js.map +0 -1
  104. package/dist/reputation/commit-reveal.d.ts +0 -45
  105. package/dist/reputation/commit-reveal.d.ts.map +0 -1
  106. package/dist/reputation/commit-reveal.js +0 -125
  107. package/dist/reputation/commit-reveal.js.map +0 -1
  108. package/dist/reputation/scoring.d.ts +0 -31
  109. package/dist/reputation/scoring.d.ts.map +0 -1
  110. package/dist/reputation/scoring.js +0 -105
  111. package/dist/reputation/scoring.js.map +0 -1
  112. package/dist/reputation/store.d.ts +0 -83
  113. package/dist/reputation/store.d.ts.map +0 -1
  114. package/dist/reputation/store.js +0 -202
  115. package/dist/reputation/store.js.map +0 -1
  116. package/dist/reputation/types.d.ts +0 -150
  117. package/dist/reputation/types.d.ts.map +0 -1
  118. package/dist/reputation/types.js +0 -113
  119. package/dist/reputation/types.js.map +0 -1
  120. package/dist/reputation/verification.d.ts +0 -28
  121. package/dist/reputation/verification.d.ts.map +0 -1
  122. package/dist/reputation/verification.js +0 -91
  123. package/dist/reputation/verification.js.map +0 -1
  124. package/dist/service.d.ts +0 -90
  125. package/dist/service.d.ts.map +0 -1
  126. package/dist/service.js +0 -176
  127. package/dist/service.js.map +0 -1
  128. package/dist/transport/http.d.ts +0 -41
  129. package/dist/transport/http.d.ts.map +0 -1
  130. package/dist/transport/http.js +0 -103
  131. package/dist/transport/http.js.map +0 -1
  132. package/dist/transport/peer-config.d.ts +0 -38
  133. package/dist/transport/peer-config.d.ts.map +0 -1
  134. package/dist/transport/peer-config.js +0 -41
  135. package/dist/transport/peer-config.js.map +0 -1
  136. package/dist/transport/relay.d.ts +0 -30
  137. package/dist/transport/relay.d.ts.map +0 -1
  138. package/dist/transport/relay.js +0 -85
  139. package/dist/transport/relay.js.map +0 -1
  140. package/dist/utils.d.ts +0 -40
  141. package/dist/utils.d.ts.map +0 -1
  142. package/dist/utils.js +0 -59
  143. package/dist/utils.js.map +0 -1
@@ -1,138 +0,0 @@
1
- import { EventEmitter } from 'node:events';
2
- import WebSocket from 'ws';
3
- import { createEnvelope, verifyEnvelope } from '../message/envelope.js';
4
- /**
5
- * WebSocket client for connecting to peers
6
- */
7
- export class PeerClient extends EventEmitter {
8
- socket = null;
9
- identity;
10
- announcePayload;
11
- url;
12
- peerPublicKey = null;
13
- reconnectAttempts = 0;
14
- maxReconnectAttempts = 10;
15
- baseReconnectDelay = 1000; // 1 second
16
- reconnectTimeout = null;
17
- shouldReconnect = true;
18
- constructor(url, identity, announcePayload) {
19
- super();
20
- this.url = url;
21
- this.identity = identity;
22
- this.announcePayload = announcePayload;
23
- }
24
- /**
25
- * Connect to the peer
26
- */
27
- connect() {
28
- if (this.socket && this.socket.readyState === WebSocket.OPEN) {
29
- return;
30
- }
31
- try {
32
- this.socket = new WebSocket(this.url);
33
- this.socket.on('open', () => {
34
- this.reconnectAttempts = 0;
35
- // Send announce message immediately
36
- const announceEnvelope = createEnvelope('announce', this.identity.publicKey, this.identity.privateKey, this.announcePayload);
37
- this.socket.send(JSON.stringify(announceEnvelope));
38
- });
39
- this.socket.on('message', (data) => {
40
- try {
41
- const envelope = JSON.parse(data.toString());
42
- // Verify envelope signature
43
- const verification = verifyEnvelope(envelope);
44
- if (!verification.valid) {
45
- // Drop invalid messages
46
- return;
47
- }
48
- // First message should be an announce from the peer
49
- if (!this.peerPublicKey) {
50
- if (envelope.type === 'announce') {
51
- this.peerPublicKey = envelope.sender;
52
- this.emit('connected', this.peerPublicKey);
53
- }
54
- return;
55
- }
56
- // Verify the message is from the announced peer
57
- if (envelope.sender !== this.peerPublicKey) {
58
- // Drop messages from wrong sender
59
- return;
60
- }
61
- // Emit message-received event
62
- this.emit('message-received', envelope);
63
- }
64
- catch {
65
- // Invalid JSON or other parsing errors - drop the message
66
- }
67
- });
68
- this.socket.on('close', () => {
69
- const wasConnected = this.peerPublicKey !== null;
70
- this.peerPublicKey = null;
71
- if (wasConnected) {
72
- this.emit('disconnected');
73
- }
74
- // Attempt to reconnect with exponential backoff
75
- if (this.shouldReconnect && this.reconnectAttempts < this.maxReconnectAttempts) {
76
- this.reconnectAttempts++;
77
- // Calculate delay with exponential backoff, capped at 30 seconds
78
- const delay = Math.min(this.baseReconnectDelay * Math.pow(2, this.reconnectAttempts - 1), 30000);
79
- this.reconnectTimeout = setTimeout(() => {
80
- this.connect();
81
- }, delay);
82
- }
83
- });
84
- this.socket.on('error', (error) => {
85
- this.emit('error', error);
86
- });
87
- }
88
- catch (error) {
89
- this.emit('error', error);
90
- }
91
- }
92
- /**
93
- * Disconnect from the peer
94
- */
95
- disconnect() {
96
- this.shouldReconnect = false;
97
- if (this.reconnectTimeout) {
98
- clearTimeout(this.reconnectTimeout);
99
- this.reconnectTimeout = null;
100
- }
101
- if (this.socket) {
102
- this.socket.close();
103
- this.socket = null;
104
- }
105
- this.peerPublicKey = null;
106
- }
107
- /**
108
- * Send a message to the peer
109
- */
110
- send(envelope) {
111
- if (!this.socket || this.socket.readyState !== WebSocket.OPEN) {
112
- return false;
113
- }
114
- try {
115
- this.socket.send(JSON.stringify(envelope));
116
- return true;
117
- }
118
- catch (error) {
119
- this.emit('error', error);
120
- return false;
121
- }
122
- }
123
- /**
124
- * Check if connected to peer
125
- */
126
- isConnected() {
127
- return this.socket !== null &&
128
- this.socket.readyState === WebSocket.OPEN &&
129
- this.peerPublicKey !== null;
130
- }
131
- /**
132
- * Get the peer's public key (if connected)
133
- */
134
- getPeerPublicKey() {
135
- return this.peerPublicKey;
136
- }
137
- }
138
- //# sourceMappingURL=client.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/peer/client.ts"],"names":[],"mappings":"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"}
@@ -1,65 +0,0 @@
1
- import { EventEmitter } from 'node:events';
2
- import type { KeyPair } from '../identity/keypair.js';
3
- import type { Envelope } from '../message/envelope.js';
4
- import type { AnnouncePayload } from '../registry/messages.js';
5
- /**
6
- * Peer information with public key
7
- */
8
- export interface PeerInfo {
9
- publicKey: string;
10
- metadata?: {
11
- name?: string;
12
- version?: string;
13
- };
14
- }
15
- /**
16
- * Events emitted by PeerManager
17
- */
18
- export interface PeerManagerEvents {
19
- 'peer-connected': (publicKey: string) => void;
20
- 'peer-disconnected': (publicKey: string) => void;
21
- 'message-received': (envelope: Envelope, fromPublicKey: string) => void;
22
- 'error': (error: Error) => void;
23
- }
24
- /**
25
- * Manages both server (incoming connections) and client (outbound connections)
26
- */
27
- export declare class PeerManager extends EventEmitter {
28
- private server;
29
- private clients;
30
- private identity;
31
- private announcePayload;
32
- constructor(identity: KeyPair, announcePayload: AnnouncePayload);
33
- /**
34
- * Start listening for incoming peer connections
35
- * @param port - Port to listen on
36
- */
37
- start(port: number): Promise<void>;
38
- /**
39
- * Stop the server and disconnect all clients
40
- */
41
- stop(): Promise<void>;
42
- /**
43
- * Connect to a peer at the given URL
44
- * @param url - WebSocket URL of the peer (e.g., ws://localhost:8080)
45
- */
46
- connect(url: string): void;
47
- /**
48
- * Broadcast a message to all connected peers (both incoming and outgoing)
49
- * @param envelope - The envelope to broadcast
50
- */
51
- broadcast(envelope: Envelope): void;
52
- /**
53
- * Get list of all connected peers with their public keys
54
- * @returns Array of peer information
55
- */
56
- getPeers(): PeerInfo[];
57
- /**
58
- * Send a message to a specific peer by public key
59
- * @param publicKey - The peer's public key
60
- * @param envelope - The envelope to send
61
- * @returns true if sent successfully, false otherwise
62
- */
63
- send(publicKey: string, envelope: Envelope): boolean;
64
- }
65
- //# sourceMappingURL=manager.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/peer/manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAI/D;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE;QACT,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,gBAAgB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,mBAAmB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACjD,kBAAkB,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,KAAK,IAAI,CAAC;IACxE,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACjC;AAED;;GAEG;AACH,qBAAa,WAAY,SAAQ,YAAY;IAC3C,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,OAAO,CAAiC;IAChD,OAAO,CAAC,QAAQ,CAAU;IAC1B,OAAO,CAAC,eAAe,CAAkB;gBAE7B,QAAQ,EAAE,OAAO,EAAE,eAAe,EAAE,eAAe;IAM/D;;;OAGG;IACG,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA2BxC;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAc3B;;;OAGG;IACH,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAmC1B;;;OAGG;IACH,SAAS,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAcnC;;;OAGG;IACH,QAAQ,IAAI,QAAQ,EAAE;IA6BtB;;;;;OAKG;IACH,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO;CAerD"}
@@ -1,153 +0,0 @@
1
- import { EventEmitter } from 'node:events';
2
- import { PeerServer } from './server.js';
3
- import { PeerClient } from './client.js';
4
- /**
5
- * Manages both server (incoming connections) and client (outbound connections)
6
- */
7
- export class PeerManager extends EventEmitter {
8
- server = null;
9
- clients = new Map();
10
- identity;
11
- announcePayload;
12
- constructor(identity, announcePayload) {
13
- super();
14
- this.identity = identity;
15
- this.announcePayload = announcePayload;
16
- }
17
- /**
18
- * Start listening for incoming peer connections
19
- * @param port - Port to listen on
20
- */
21
- async start(port) {
22
- if (this.server) {
23
- throw new Error('Server already started');
24
- }
25
- this.server = new PeerServer(this.identity, this.announcePayload);
26
- // Forward server events
27
- this.server.on('peer-connected', (publicKey, _peer) => {
28
- this.emit('peer-connected', publicKey);
29
- });
30
- this.server.on('peer-disconnected', (publicKey) => {
31
- this.emit('peer-disconnected', publicKey);
32
- });
33
- this.server.on('message-received', (envelope, fromPublicKey) => {
34
- this.emit('message-received', envelope, fromPublicKey);
35
- });
36
- this.server.on('error', (error) => {
37
- this.emit('error', error);
38
- });
39
- await this.server.start(port);
40
- }
41
- /**
42
- * Stop the server and disconnect all clients
43
- */
44
- async stop() {
45
- // Disconnect all clients
46
- for (const client of this.clients.values()) {
47
- client.disconnect();
48
- }
49
- this.clients.clear();
50
- // Stop server
51
- if (this.server) {
52
- await this.server.stop();
53
- this.server = null;
54
- }
55
- }
56
- /**
57
- * Connect to a peer at the given URL
58
- * @param url - WebSocket URL of the peer (e.g., ws://localhost:8080)
59
- */
60
- connect(url) {
61
- // Check if already connected to this URL
62
- if (this.clients.has(url)) {
63
- return;
64
- }
65
- const client = new PeerClient(url, this.identity, this.announcePayload);
66
- // Forward client events
67
- client.on('connected', (publicKey) => {
68
- this.emit('peer-connected', publicKey);
69
- });
70
- client.on('disconnected', () => {
71
- const publicKey = client.getPeerPublicKey();
72
- if (publicKey) {
73
- this.emit('peer-disconnected', publicKey);
74
- }
75
- });
76
- client.on('message-received', (envelope) => {
77
- const publicKey = client.getPeerPublicKey();
78
- if (publicKey) {
79
- this.emit('message-received', envelope, publicKey);
80
- }
81
- });
82
- client.on('error', (error) => {
83
- this.emit('error', error);
84
- });
85
- this.clients.set(url, client);
86
- client.connect();
87
- }
88
- /**
89
- * Broadcast a message to all connected peers (both incoming and outgoing)
90
- * @param envelope - The envelope to broadcast
91
- */
92
- broadcast(envelope) {
93
- // Broadcast to server peers
94
- if (this.server) {
95
- this.server.broadcast(envelope);
96
- }
97
- // Broadcast to client peers
98
- for (const client of this.clients.values()) {
99
- if (client.isConnected()) {
100
- client.send(envelope);
101
- }
102
- }
103
- }
104
- /**
105
- * Get list of all connected peers with their public keys
106
- * @returns Array of peer information
107
- */
108
- getPeers() {
109
- const peers = [];
110
- // Get server peers
111
- if (this.server) {
112
- for (const [publicKey, peer] of this.server.getPeers()) {
113
- peers.push({
114
- publicKey,
115
- metadata: peer.metadata,
116
- });
117
- }
118
- }
119
- // Get client peers
120
- for (const client of this.clients.values()) {
121
- if (client.isConnected()) {
122
- const publicKey = client.getPeerPublicKey();
123
- if (publicKey) {
124
- // Avoid duplicates (same peer might be connected via both server and client)
125
- if (!peers.find(p => p.publicKey === publicKey)) {
126
- peers.push({ publicKey });
127
- }
128
- }
129
- }
130
- }
131
- return peers;
132
- }
133
- /**
134
- * Send a message to a specific peer by public key
135
- * @param publicKey - The peer's public key
136
- * @param envelope - The envelope to send
137
- * @returns true if sent successfully, false otherwise
138
- */
139
- send(publicKey, envelope) {
140
- // Try to send via server
141
- if (this.server && this.server.send(publicKey, envelope)) {
142
- return true;
143
- }
144
- // Try to send via clients
145
- for (const client of this.clients.values()) {
146
- if (client.getPeerPublicKey() === publicKey && client.isConnected()) {
147
- return client.send(envelope);
148
- }
149
- }
150
- return false;
151
- }
152
- }
153
- //# sourceMappingURL=manager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/peer/manager.ts"],"names":[],"mappings":"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"}
@@ -1,65 +0,0 @@
1
- import { EventEmitter } from 'node:events';
2
- import { WebSocket } from 'ws';
3
- import type { KeyPair } from '../identity/keypair.js';
4
- import type { Envelope } from '../message/envelope.js';
5
- import type { AnnouncePayload } from '../registry/messages.js';
6
- /**
7
- * Represents a connected peer
8
- */
9
- export interface ConnectedPeer {
10
- /** Peer's public key */
11
- publicKey: string;
12
- /** WebSocket connection */
13
- socket: WebSocket;
14
- /** Whether the peer has been announced */
15
- announced: boolean;
16
- /** Peer metadata from announce message */
17
- metadata?: {
18
- name?: string;
19
- version?: string;
20
- };
21
- }
22
- /**
23
- * Events emitted by PeerServer
24
- */
25
- export interface PeerServerEvents {
26
- 'peer-connected': (publicKey: string, peer: ConnectedPeer) => void;
27
- 'peer-disconnected': (publicKey: string) => void;
28
- 'message-received': (envelope: Envelope, fromPublicKey: string) => void;
29
- 'error': (error: Error) => void;
30
- }
31
- /**
32
- * WebSocket server for accepting peer connections
33
- */
34
- export declare class PeerServer extends EventEmitter {
35
- private wss;
36
- private peers;
37
- private identity;
38
- private announcePayload;
39
- constructor(identity: KeyPair, announcePayload: AnnouncePayload);
40
- /**
41
- * Start the WebSocket server
42
- */
43
- start(port: number): Promise<void>;
44
- /**
45
- * Stop the WebSocket server
46
- */
47
- stop(): Promise<void>;
48
- /**
49
- * Get all connected peers
50
- */
51
- getPeers(): Map<string, ConnectedPeer>;
52
- /**
53
- * Send a message to a specific peer
54
- */
55
- send(publicKey: string, envelope: Envelope): boolean;
56
- /**
57
- * Broadcast a message to all connected peers
58
- */
59
- broadcast(envelope: Envelope): void;
60
- /**
61
- * Handle incoming connection
62
- */
63
- private handleConnection;
64
- }
65
- //# sourceMappingURL=server.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/peer/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAmB,SAAS,EAAE,MAAM,IAAI,CAAC;AAChD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAEvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE/D;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,wBAAwB;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,2BAA2B;IAC3B,MAAM,EAAE,SAAS,CAAC;IAClB,0CAA0C;IAC1C,SAAS,EAAE,OAAO,CAAC;IACnB,0CAA0C;IAC1C,QAAQ,CAAC,EAAE;QACT,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,gBAAgB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,KAAK,IAAI,CAAC;IACnE,mBAAmB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACjD,kBAAkB,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,KAAK,IAAI,CAAC;IACxE,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACjC;AAED;;GAEG;AACH,qBAAa,UAAW,SAAQ,YAAY;IAC1C,OAAO,CAAC,GAAG,CAAgC;IAC3C,OAAO,CAAC,KAAK,CAAoC;IACjD,OAAO,CAAC,QAAQ,CAAU;IAC1B,OAAO,CAAC,eAAe,CAAkB;gBAE7B,QAAQ,EAAE,OAAO,EAAE,eAAe,EAAE,eAAe;IAM/D;;OAEG;IACH,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBlC;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAwB3B;;OAEG;IACH,QAAQ,IAAI,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC;IAItC;;OAEG;IACH,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO;IAepD;;OAEG;IACH,SAAS,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAQnC;;OAEG;IACH,OAAO,CAAC,gBAAgB;CAkEzB"}
@@ -1,154 +0,0 @@
1
- import { EventEmitter } from 'node:events';
2
- import { WebSocketServer, WebSocket } from 'ws';
3
- import { createEnvelope, verifyEnvelope } from '../message/envelope.js';
4
- /**
5
- * WebSocket server for accepting peer connections
6
- */
7
- export class PeerServer extends EventEmitter {
8
- wss = null;
9
- peers = new Map();
10
- identity;
11
- announcePayload;
12
- constructor(identity, announcePayload) {
13
- super();
14
- this.identity = identity;
15
- this.announcePayload = announcePayload;
16
- }
17
- /**
18
- * Start the WebSocket server
19
- */
20
- start(port) {
21
- return new Promise((resolve, reject) => {
22
- try {
23
- this.wss = new WebSocketServer({ port });
24
- this.wss.on('error', (error) => {
25
- this.emit('error', error);
26
- reject(error);
27
- });
28
- this.wss.on('listening', () => {
29
- resolve();
30
- });
31
- this.wss.on('connection', (socket) => {
32
- this.handleConnection(socket);
33
- });
34
- }
35
- catch (error) {
36
- reject(error);
37
- }
38
- });
39
- }
40
- /**
41
- * Stop the WebSocket server
42
- */
43
- async stop() {
44
- return new Promise((resolve, reject) => {
45
- if (!this.wss) {
46
- resolve();
47
- return;
48
- }
49
- // Close all peer connections
50
- for (const peer of this.peers.values()) {
51
- peer.socket.close();
52
- }
53
- this.peers.clear();
54
- this.wss.close((err) => {
55
- if (err) {
56
- reject(err);
57
- }
58
- else {
59
- this.wss = null;
60
- resolve();
61
- }
62
- });
63
- });
64
- }
65
- /**
66
- * Get all connected peers
67
- */
68
- getPeers() {
69
- return new Map(this.peers);
70
- }
71
- /**
72
- * Send a message to a specific peer
73
- */
74
- send(publicKey, envelope) {
75
- const peer = this.peers.get(publicKey);
76
- if (!peer || peer.socket.readyState !== WebSocket.OPEN) {
77
- return false;
78
- }
79
- try {
80
- peer.socket.send(JSON.stringify(envelope));
81
- return true;
82
- }
83
- catch (error) {
84
- this.emit('error', error);
85
- return false;
86
- }
87
- }
88
- /**
89
- * Broadcast a message to all connected peers
90
- */
91
- broadcast(envelope) {
92
- for (const [publicKey, peer] of this.peers) {
93
- if (peer.socket.readyState === WebSocket.OPEN) {
94
- this.send(publicKey, envelope);
95
- }
96
- }
97
- }
98
- /**
99
- * Handle incoming connection
100
- */
101
- handleConnection(socket) {
102
- let peerPublicKey = null;
103
- // Send announce message immediately
104
- const announceEnvelope = createEnvelope('announce', this.identity.publicKey, this.identity.privateKey, this.announcePayload);
105
- socket.send(JSON.stringify(announceEnvelope));
106
- socket.on('message', (data) => {
107
- try {
108
- const envelope = JSON.parse(data.toString());
109
- // Verify envelope signature
110
- const verification = verifyEnvelope(envelope);
111
- if (!verification.valid) {
112
- // Drop invalid messages
113
- return;
114
- }
115
- // First message should be an announce
116
- if (!peerPublicKey) {
117
- if (envelope.type === 'announce') {
118
- peerPublicKey = envelope.sender;
119
- const payload = envelope.payload;
120
- const peer = {
121
- publicKey: peerPublicKey,
122
- socket,
123
- announced: true,
124
- metadata: payload.metadata,
125
- };
126
- this.peers.set(peerPublicKey, peer);
127
- this.emit('peer-connected', peerPublicKey, peer);
128
- }
129
- return;
130
- }
131
- // Verify the message is from the announced peer
132
- if (envelope.sender !== peerPublicKey) {
133
- // Drop messages from wrong sender
134
- return;
135
- }
136
- // Emit message-received event
137
- this.emit('message-received', envelope, peerPublicKey);
138
- }
139
- catch {
140
- // Invalid JSON or other parsing errors - drop the message
141
- }
142
- });
143
- socket.on('close', () => {
144
- if (peerPublicKey) {
145
- this.peers.delete(peerPublicKey);
146
- this.emit('peer-disconnected', peerPublicKey);
147
- }
148
- });
149
- socket.on('error', (error) => {
150
- this.emit('error', error);
151
- });
152
- }
153
- }
154
- //# sourceMappingURL=server.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/peer/server.ts"],"names":[],"mappings":"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"}
@@ -1,44 +0,0 @@
1
- /**
2
- * A capability describes something an agent can do
3
- */
4
- export interface Capability {
5
- /** Unique ID (content-addressed hash of name + version + schema) */
6
- id: string;
7
- /** Human-readable name: 'code-review', 'summarization', 'translation' */
8
- name: string;
9
- /** Semantic version */
10
- version: string;
11
- /** What the capability does */
12
- description: string;
13
- /** JSON Schema for expected input */
14
- inputSchema?: object;
15
- /** JSON Schema for expected output */
16
- outputSchema?: object;
17
- /** Discovery tags: ['code', 'typescript', 'review'] */
18
- tags: string[];
19
- }
20
- /**
21
- * Creates a capability with a content-addressed ID.
22
- *
23
- * @param name - Human-readable capability name
24
- * @param version - Semantic version string
25
- * @param description - Description of what the capability does
26
- * @param options - Optional input/output schemas and tags
27
- * @returns A Capability object with computed ID
28
- */
29
- export declare function createCapability(name: string, version: string, description: string, options?: {
30
- inputSchema?: object;
31
- outputSchema?: object;
32
- tags?: string[];
33
- }): Capability;
34
- /**
35
- * Validates that a capability has all required fields.
36
- *
37
- * @param capability - The capability to validate
38
- * @returns Object with `valid` boolean and optional `errors` array
39
- */
40
- export declare function validateCapability(capability: unknown): {
41
- valid: boolean;
42
- errors?: string[];
43
- };
44
- //# sourceMappingURL=capability.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"capability.d.ts","sourceRoot":"","sources":["../../src/registry/capability.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,oEAAoE;IACpE,EAAE,EAAE,MAAM,CAAC;IACX,yEAAyE;IACzE,IAAI,EAAE,MAAM,CAAC;IACb,uBAAuB;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,+BAA+B;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,qCAAqC;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sCAAsC;IACtC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,uDAAuD;IACvD,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AA+BD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE;IACP,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACZ,GACL,UAAU,CAcZ;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,OAAO,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,CA4C7F"}