@rookdaemon/agora 0.2.7 → 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 (124) hide show
  1. package/README.md +33 -0
  2. package/dist/chunk-JUOGKXFN.js +1645 -0
  3. package/dist/chunk-JUOGKXFN.js.map +1 -0
  4. package/dist/cli.d.ts +0 -2
  5. package/dist/cli.js +1163 -1137
  6. package/dist/cli.js.map +1 -1
  7. package/dist/index.d.ts +1613 -25
  8. package/dist/index.js +1135 -24
  9. package/dist/index.js.map +1 -1
  10. package/package.json +11 -2
  11. package/dist/cli.d.ts.map +0 -1
  12. package/dist/config.d.ts +0 -59
  13. package/dist/config.d.ts.map +0 -1
  14. package/dist/config.js +0 -115
  15. package/dist/config.js.map +0 -1
  16. package/dist/discovery/bootstrap.d.ts +0 -32
  17. package/dist/discovery/bootstrap.d.ts.map +0 -1
  18. package/dist/discovery/bootstrap.js +0 -36
  19. package/dist/discovery/bootstrap.js.map +0 -1
  20. package/dist/discovery/peer-discovery.d.ts +0 -59
  21. package/dist/discovery/peer-discovery.d.ts.map +0 -1
  22. package/dist/discovery/peer-discovery.js +0 -108
  23. package/dist/discovery/peer-discovery.js.map +0 -1
  24. package/dist/identity/keypair.d.ts +0 -42
  25. package/dist/identity/keypair.d.ts.map +0 -1
  26. package/dist/identity/keypair.js +0 -83
  27. package/dist/identity/keypair.js.map +0 -1
  28. package/dist/index.d.ts.map +0 -1
  29. package/dist/message/envelope.d.ts +0 -59
  30. package/dist/message/envelope.d.ts.map +0 -1
  31. package/dist/message/envelope.js +0 -83
  32. package/dist/message/envelope.js.map +0 -1
  33. package/dist/message/types/paper-discovery.d.ts +0 -28
  34. package/dist/message/types/paper-discovery.d.ts.map +0 -1
  35. package/dist/message/types/paper-discovery.js +0 -2
  36. package/dist/message/types/paper-discovery.js.map +0 -1
  37. package/dist/message/types/peer-discovery.d.ts +0 -78
  38. package/dist/message/types/peer-discovery.d.ts.map +0 -1
  39. package/dist/message/types/peer-discovery.js +0 -90
  40. package/dist/message/types/peer-discovery.js.map +0 -1
  41. package/dist/peer/client.d.ts +0 -50
  42. package/dist/peer/client.d.ts.map +0 -1
  43. package/dist/peer/client.js +0 -138
  44. package/dist/peer/client.js.map +0 -1
  45. package/dist/peer/manager.d.ts +0 -65
  46. package/dist/peer/manager.d.ts.map +0 -1
  47. package/dist/peer/manager.js +0 -153
  48. package/dist/peer/manager.js.map +0 -1
  49. package/dist/peer/server.d.ts +0 -65
  50. package/dist/peer/server.d.ts.map +0 -1
  51. package/dist/peer/server.js +0 -154
  52. package/dist/peer/server.js.map +0 -1
  53. package/dist/registry/capability.d.ts +0 -44
  54. package/dist/registry/capability.d.ts.map +0 -1
  55. package/dist/registry/capability.js +0 -94
  56. package/dist/registry/capability.js.map +0 -1
  57. package/dist/registry/discovery-service.d.ts +0 -64
  58. package/dist/registry/discovery-service.d.ts.map +0 -1
  59. package/dist/registry/discovery-service.js +0 -129
  60. package/dist/registry/discovery-service.js.map +0 -1
  61. package/dist/registry/messages.d.ts +0 -105
  62. package/dist/registry/messages.d.ts.map +0 -1
  63. package/dist/registry/messages.js +0 -2
  64. package/dist/registry/messages.js.map +0 -1
  65. package/dist/registry/peer-store.d.ts +0 -57
  66. package/dist/registry/peer-store.d.ts.map +0 -1
  67. package/dist/registry/peer-store.js +0 -92
  68. package/dist/registry/peer-store.js.map +0 -1
  69. package/dist/registry/peer.d.ts +0 -20
  70. package/dist/registry/peer.d.ts.map +0 -1
  71. package/dist/registry/peer.js +0 -2
  72. package/dist/registry/peer.js.map +0 -1
  73. package/dist/relay/client.d.ts +0 -112
  74. package/dist/relay/client.d.ts.map +0 -1
  75. package/dist/relay/client.js +0 -281
  76. package/dist/relay/client.js.map +0 -1
  77. package/dist/relay/server.d.ts +0 -76
  78. package/dist/relay/server.d.ts.map +0 -1
  79. package/dist/relay/server.js +0 -338
  80. package/dist/relay/server.js.map +0 -1
  81. package/dist/relay/types.d.ts +0 -35
  82. package/dist/relay/types.d.ts.map +0 -1
  83. package/dist/relay/types.js +0 -2
  84. package/dist/relay/types.js.map +0 -1
  85. package/dist/reputation/commit-reveal.d.ts +0 -45
  86. package/dist/reputation/commit-reveal.d.ts.map +0 -1
  87. package/dist/reputation/commit-reveal.js +0 -125
  88. package/dist/reputation/commit-reveal.js.map +0 -1
  89. package/dist/reputation/scoring.d.ts +0 -31
  90. package/dist/reputation/scoring.d.ts.map +0 -1
  91. package/dist/reputation/scoring.js +0 -105
  92. package/dist/reputation/scoring.js.map +0 -1
  93. package/dist/reputation/store.d.ts +0 -83
  94. package/dist/reputation/store.d.ts.map +0 -1
  95. package/dist/reputation/store.js +0 -202
  96. package/dist/reputation/store.js.map +0 -1
  97. package/dist/reputation/types.d.ts +0 -150
  98. package/dist/reputation/types.d.ts.map +0 -1
  99. package/dist/reputation/types.js +0 -113
  100. package/dist/reputation/types.js.map +0 -1
  101. package/dist/reputation/verification.d.ts +0 -28
  102. package/dist/reputation/verification.d.ts.map +0 -1
  103. package/dist/reputation/verification.js +0 -91
  104. package/dist/reputation/verification.js.map +0 -1
  105. package/dist/service.d.ts +0 -90
  106. package/dist/service.d.ts.map +0 -1
  107. package/dist/service.js +0 -176
  108. package/dist/service.js.map +0 -1
  109. package/dist/transport/http.d.ts +0 -41
  110. package/dist/transport/http.d.ts.map +0 -1
  111. package/dist/transport/http.js +0 -103
  112. package/dist/transport/http.js.map +0 -1
  113. package/dist/transport/peer-config.d.ts +0 -38
  114. package/dist/transport/peer-config.d.ts.map +0 -1
  115. package/dist/transport/peer-config.js +0 -41
  116. package/dist/transport/peer-config.js.map +0 -1
  117. package/dist/transport/relay.d.ts +0 -30
  118. package/dist/transport/relay.d.ts.map +0 -1
  119. package/dist/transport/relay.js +0 -85
  120. package/dist/transport/relay.js.map +0 -1
  121. package/dist/utils.d.ts +0 -40
  122. package/dist/utils.d.ts.map +0 -1
  123. package/dist/utils.js +0 -59
  124. package/dist/utils.js.map +0 -1
@@ -1,338 +0,0 @@
1
- import { EventEmitter } from 'node:events';
2
- import { WebSocketServer, WebSocket } from 'ws';
3
- import { verifyEnvelope, createEnvelope } from '../message/envelope.js';
4
- /**
5
- * WebSocket relay server for routing messages between agents.
6
- *
7
- * Agents connect to the relay and register with their public key.
8
- * Messages are routed to recipients based on the 'to' field.
9
- * All envelopes are verified before being forwarded.
10
- */
11
- export class RelayServer extends EventEmitter {
12
- wss = null;
13
- agents = new Map();
14
- identity;
15
- constructor(identity) {
16
- super();
17
- this.identity = identity;
18
- }
19
- /**
20
- * Start the relay server
21
- */
22
- start(port) {
23
- return new Promise((resolve, reject) => {
24
- try {
25
- this.wss = new WebSocketServer({ port });
26
- let resolved = false;
27
- this.wss.on('error', (error) => {
28
- this.emit('error', error);
29
- if (!resolved) {
30
- resolved = true;
31
- reject(error);
32
- }
33
- });
34
- this.wss.on('listening', () => {
35
- if (!resolved) {
36
- resolved = true;
37
- resolve();
38
- }
39
- });
40
- this.wss.on('connection', (socket) => {
41
- this.handleConnection(socket);
42
- });
43
- }
44
- catch (error) {
45
- reject(error);
46
- }
47
- });
48
- }
49
- /**
50
- * Stop the relay server
51
- */
52
- async stop() {
53
- return new Promise((resolve, reject) => {
54
- if (!this.wss) {
55
- resolve();
56
- return;
57
- }
58
- // Close all agent connections
59
- for (const agent of this.agents.values()) {
60
- agent.socket.close();
61
- }
62
- this.agents.clear();
63
- this.wss.close((err) => {
64
- if (err) {
65
- reject(err);
66
- }
67
- else {
68
- this.wss = null;
69
- resolve();
70
- }
71
- });
72
- });
73
- }
74
- /**
75
- * Get all connected agents
76
- */
77
- getAgents() {
78
- return new Map(this.agents);
79
- }
80
- /**
81
- * Handle incoming connection
82
- */
83
- handleConnection(socket) {
84
- let agentPublicKey = null;
85
- socket.on('message', (data) => {
86
- try {
87
- const msg = JSON.parse(data.toString());
88
- // Handle registration
89
- if (msg.type === 'register' && !agentPublicKey) {
90
- if (!msg.publicKey || typeof msg.publicKey !== 'string') {
91
- this.sendError(socket, 'Invalid registration: missing or invalid publicKey');
92
- socket.close();
93
- return;
94
- }
95
- const publicKey = msg.publicKey;
96
- const name = msg.name;
97
- agentPublicKey = publicKey;
98
- const agent = {
99
- publicKey,
100
- name,
101
- socket,
102
- lastSeen: Date.now(),
103
- };
104
- this.agents.set(publicKey, agent);
105
- this.emit('agent-registered', publicKey);
106
- // Send registration confirmation with list of online peers
107
- const peers = Array.from(this.agents.values())
108
- .filter(a => a.publicKey !== publicKey)
109
- .map(a => ({ publicKey: a.publicKey, name: a.name }));
110
- socket.send(JSON.stringify({
111
- type: 'registered',
112
- publicKey,
113
- peers,
114
- }));
115
- // Notify other agents that this agent is now online
116
- this.broadcastPeerEvent('peer_online', publicKey, name);
117
- return;
118
- }
119
- // Require registration before processing messages
120
- if (!agentPublicKey) {
121
- this.sendError(socket, 'Not registered: send registration message first');
122
- socket.close();
123
- return;
124
- }
125
- // Handle message relay
126
- if (msg.type === 'message') {
127
- if (!msg.to || typeof msg.to !== 'string') {
128
- this.sendError(socket, 'Invalid message: missing or invalid "to" field');
129
- return;
130
- }
131
- if (!msg.envelope || typeof msg.envelope !== 'object') {
132
- this.sendError(socket, 'Invalid message: missing or invalid "envelope" field');
133
- return;
134
- }
135
- const envelope = msg.envelope;
136
- // Verify envelope signature
137
- const verification = verifyEnvelope(envelope);
138
- if (!verification.valid) {
139
- this.sendError(socket, `Invalid envelope: ${verification.reason || 'verification failed'}`);
140
- return;
141
- }
142
- // Verify sender matches registered agent
143
- if (envelope.sender !== agentPublicKey) {
144
- this.sendError(socket, 'Envelope sender does not match registered public key');
145
- return;
146
- }
147
- // Update lastSeen timestamp
148
- const senderAgent = this.agents.get(agentPublicKey);
149
- if (senderAgent) {
150
- senderAgent.lastSeen = Date.now();
151
- }
152
- // Handle peer_list_request directed at relay
153
- if (envelope.type === 'peer_list_request' && this.identity && msg.to === this.identity.publicKey) {
154
- this.handlePeerListRequest(envelope, socket, agentPublicKey);
155
- return;
156
- }
157
- // Find recipient
158
- const recipient = this.agents.get(msg.to);
159
- if (!recipient || recipient.socket.readyState !== WebSocket.OPEN) {
160
- this.sendError(socket, 'Recipient not connected');
161
- return;
162
- }
163
- // Forward envelope to recipient wrapped in relay message format
164
- try {
165
- const senderAgent = this.agents.get(agentPublicKey);
166
- const relayMessage = {
167
- type: 'message',
168
- from: agentPublicKey,
169
- name: senderAgent?.name,
170
- envelope,
171
- };
172
- recipient.socket.send(JSON.stringify(relayMessage));
173
- this.emit('message-relayed', agentPublicKey, msg.to, envelope);
174
- }
175
- catch (err) {
176
- this.sendError(socket, 'Failed to relay message');
177
- this.emit('error', err);
178
- }
179
- return;
180
- }
181
- // Handle broadcast: same validation as message, then forward to all other agents
182
- if (msg.type === 'broadcast') {
183
- if (!msg.envelope || typeof msg.envelope !== 'object') {
184
- this.sendError(socket, 'Invalid broadcast: missing or invalid "envelope" field');
185
- return;
186
- }
187
- const envelope = msg.envelope;
188
- const verification = verifyEnvelope(envelope);
189
- if (!verification.valid) {
190
- this.sendError(socket, `Invalid envelope: ${verification.reason || 'verification failed'}`);
191
- return;
192
- }
193
- if (envelope.sender !== agentPublicKey) {
194
- this.sendError(socket, 'Envelope sender does not match registered public key');
195
- return;
196
- }
197
- // Update lastSeen timestamp
198
- const senderAgentBroadcast = this.agents.get(agentPublicKey);
199
- if (senderAgentBroadcast) {
200
- senderAgentBroadcast.lastSeen = Date.now();
201
- }
202
- const senderAgent = this.agents.get(agentPublicKey);
203
- const relayMessage = {
204
- type: 'message',
205
- from: agentPublicKey,
206
- name: senderAgent?.name,
207
- envelope,
208
- };
209
- const messageStr = JSON.stringify(relayMessage);
210
- for (const agent of this.agents.values()) {
211
- if (agent.publicKey !== agentPublicKey && agent.socket.readyState === WebSocket.OPEN) {
212
- try {
213
- agent.socket.send(messageStr);
214
- }
215
- catch (err) {
216
- this.emit('error', err);
217
- }
218
- }
219
- }
220
- return;
221
- }
222
- // Handle ping
223
- if (msg.type === 'ping') {
224
- socket.send(JSON.stringify({ type: 'pong' }));
225
- return;
226
- }
227
- // Unknown message type
228
- this.sendError(socket, `Unknown message type: ${msg.type}`);
229
- }
230
- catch (err) {
231
- // Invalid JSON or other parsing errors
232
- this.emit('error', new Error(`Message parsing failed: ${err instanceof Error ? err.message : String(err)}`));
233
- this.sendError(socket, 'Invalid message format');
234
- }
235
- });
236
- socket.on('close', () => {
237
- if (agentPublicKey) {
238
- const agent = this.agents.get(agentPublicKey);
239
- const agentName = agent?.name;
240
- this.agents.delete(agentPublicKey);
241
- this.emit('agent-disconnected', agentPublicKey);
242
- // Notify other agents that this agent went offline
243
- this.broadcastPeerEvent('peer_offline', agentPublicKey, agentName);
244
- }
245
- });
246
- socket.on('error', (error) => {
247
- this.emit('error', error);
248
- });
249
- }
250
- /**
251
- * Send an error message to a client
252
- */
253
- sendError(socket, message) {
254
- try {
255
- if (socket.readyState === WebSocket.OPEN) {
256
- socket.send(JSON.stringify({ type: 'error', message }));
257
- }
258
- }
259
- catch (err) {
260
- // Log errors when sending error messages, but don't propagate to avoid cascading failures
261
- this.emit('error', new Error(`Failed to send error message: ${err instanceof Error ? err.message : String(err)}`));
262
- }
263
- }
264
- /**
265
- * Broadcast a peer event to all connected agents
266
- */
267
- broadcastPeerEvent(eventType, publicKey, name) {
268
- const message = {
269
- type: eventType,
270
- publicKey,
271
- name,
272
- };
273
- const messageStr = JSON.stringify(message);
274
- for (const agent of this.agents.values()) {
275
- // Don't send the event to the agent it's about
276
- if (agent.publicKey !== publicKey && agent.socket.readyState === WebSocket.OPEN) {
277
- try {
278
- agent.socket.send(messageStr);
279
- }
280
- catch (err) {
281
- this.emit('error', new Error(`Failed to send ${eventType} event: ${err instanceof Error ? err.message : String(err)}`));
282
- }
283
- }
284
- }
285
- }
286
- /**
287
- * Handle peer list request from an agent
288
- */
289
- handlePeerListRequest(envelope, socket, requesterPublicKey) {
290
- if (!this.identity) {
291
- this.sendError(socket, 'Relay does not support peer discovery (no identity configured)');
292
- return;
293
- }
294
- const { filters } = envelope.payload;
295
- const now = Date.now();
296
- let peers = Array.from(this.agents.values());
297
- // Filter out requester first
298
- peers = peers.filter(p => p.publicKey !== requesterPublicKey);
299
- // Apply filters
300
- if (filters?.activeWithin) {
301
- peers = peers.filter(p => (now - p.lastSeen) < filters.activeWithin);
302
- }
303
- if (filters?.limit && filters.limit > 0) {
304
- peers = peers.slice(0, filters.limit);
305
- }
306
- // Build response payload
307
- const response = {
308
- peers: peers.map(p => ({
309
- publicKey: p.publicKey,
310
- metadata: p.name || p.metadata ? {
311
- name: p.name,
312
- version: p.metadata?.version,
313
- capabilities: p.metadata?.capabilities,
314
- } : undefined,
315
- lastSeen: p.lastSeen,
316
- })),
317
- totalPeers: this.agents.size - 1, // Exclude requester from count
318
- relayPublicKey: this.identity.publicKey,
319
- };
320
- // Create signed envelope
321
- const responseEnvelope = createEnvelope('peer_list_response', this.identity.publicKey, this.identity.privateKey, response, Date.now(), envelope.id // Reply to the request
322
- );
323
- // Send response
324
- const relayMessage = {
325
- type: 'message',
326
- from: this.identity.publicKey,
327
- name: 'relay',
328
- envelope: responseEnvelope,
329
- };
330
- try {
331
- socket.send(JSON.stringify(relayMessage));
332
- }
333
- catch (err) {
334
- this.emit('error', new Error(`Failed to send peer list response: ${err instanceof Error ? err.message : String(err)}`));
335
- }
336
- }
337
- }
338
- //# sourceMappingURL=server.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/relay/server.ts"],"names":[],"mappings":"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"}
@@ -1,35 +0,0 @@
1
- import type { Envelope } from '../message/envelope.js';
2
- /**
3
- * Messages sent from client to relay server
4
- */
5
- export interface RelayClientMessage {
6
- type: 'register' | 'message' | 'broadcast' | 'ping';
7
- publicKey?: string;
8
- name?: string;
9
- to?: string;
10
- envelope?: Envelope;
11
- }
12
- /**
13
- * Messages received from relay server
14
- */
15
- export interface RelayServerMessage {
16
- type: 'registered' | 'message' | 'error' | 'pong' | 'peer_online' | 'peer_offline';
17
- publicKey?: string;
18
- name?: string;
19
- from?: string;
20
- envelope?: Envelope;
21
- peers?: Array<{
22
- publicKey: string;
23
- name?: string;
24
- }>;
25
- code?: string;
26
- message?: string;
27
- }
28
- /**
29
- * Peer presence information
30
- */
31
- export interface RelayPeer {
32
- publicKey: string;
33
- name?: string;
34
- }
35
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/relay/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAEvD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,UAAU,GAAG,SAAS,GAAG,WAAW,GAAG,MAAM,CAAC;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,YAAY,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,aAAa,GAAG,cAAc,CAAC;IACnF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,KAAK,CAAC,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/relay/types.ts"],"names":[],"mappings":""}
@@ -1,45 +0,0 @@
1
- /**
2
- * Commit-reveal pattern implementation for tamper-proof predictions.
3
- * Agents commit to predictions before outcomes are known, then reveal after.
4
- */
5
- import type { CommitRecord, RevealRecord } from './types.js';
6
- /**
7
- * Create a commitment hash for a prediction
8
- * @param prediction - The prediction string
9
- * @returns SHA-256 hash of the prediction (hex string)
10
- */
11
- export declare function hashPrediction(prediction: string): string;
12
- /**
13
- * Create a signed commit record
14
- * @param agent - Public key of the committing agent
15
- * @param privateKey - Private key for signing
16
- * @param domain - Domain of the prediction
17
- * @param prediction - The prediction to commit to
18
- * @param timestamp - Timestamp for the commit (ms)
19
- * @param expiryMs - Expiry time in milliseconds from timestamp
20
- * @returns Signed CommitRecord
21
- */
22
- export declare function createCommit(agent: string, privateKey: string, domain: string, prediction: string, timestamp: number, expiryMs: number): CommitRecord;
23
- /**
24
- * Create a signed reveal record
25
- * @param agent - Public key of the revealing agent
26
- * @param privateKey - Private key for signing
27
- * @param commitmentId - ID of the original commit record
28
- * @param prediction - The original prediction (plaintext)
29
- * @param outcome - The observed outcome
30
- * @param timestamp - Timestamp for the reveal (ms)
31
- * @param evidence - Optional evidence for the outcome
32
- * @returns Signed RevealRecord
33
- */
34
- export declare function createReveal(agent: string, privateKey: string, commitmentId: string, prediction: string, outcome: string, timestamp: number, evidence?: string): RevealRecord;
35
- /**
36
- * Verify a reveal against its commitment
37
- * @param commit - The original commit record
38
- * @param reveal - The reveal record
39
- * @returns Object with valid flag and optional reason for failure
40
- */
41
- export declare function verifyReveal(commit: CommitRecord, reveal: RevealRecord): {
42
- valid: boolean;
43
- reason?: string;
44
- };
45
- //# sourceMappingURL=commit-reveal.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"commit-reveal.d.ts","sourceRoot":"","sources":["../../src/reputation/commit-reveal.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG7D;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,GACf,YAAY,CA0Bd;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,QAAQ,CAAC,EAAE,MAAM,GAChB,YAAY,CAkCd;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,YAAY,GACnB;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAkCrC"}
@@ -1,125 +0,0 @@
1
- /**
2
- * Commit-reveal pattern implementation for tamper-proof predictions.
3
- * Agents commit to predictions before outcomes are known, then reveal after.
4
- */
5
- import { createHash } from 'node:crypto';
6
- import { createEnvelope } from '../message/envelope.js';
7
- import { validateCommitRecord, validateRevealRecord } from './types.js';
8
- /**
9
- * Create a commitment hash for a prediction
10
- * @param prediction - The prediction string
11
- * @returns SHA-256 hash of the prediction (hex string)
12
- */
13
- export function hashPrediction(prediction) {
14
- return createHash('sha256').update(prediction).digest('hex');
15
- }
16
- /**
17
- * Create a signed commit record
18
- * @param agent - Public key of the committing agent
19
- * @param privateKey - Private key for signing
20
- * @param domain - Domain of the prediction
21
- * @param prediction - The prediction to commit to
22
- * @param timestamp - Timestamp for the commit (ms)
23
- * @param expiryMs - Expiry time in milliseconds from timestamp
24
- * @returns Signed CommitRecord
25
- */
26
- export function createCommit(agent, privateKey, domain, prediction, timestamp, expiryMs) {
27
- const commitment = hashPrediction(prediction);
28
- const expiry = timestamp + expiryMs;
29
- // Create the payload for signing
30
- const payload = {
31
- agent,
32
- domain,
33
- commitment,
34
- timestamp,
35
- expiry,
36
- };
37
- // Create signed envelope with type 'commit'
38
- const envelope = createEnvelope('commit', agent, privateKey, payload, timestamp);
39
- // Return commit record
40
- return {
41
- id: envelope.id,
42
- agent,
43
- domain,
44
- commitment,
45
- timestamp,
46
- expiry,
47
- signature: envelope.signature,
48
- };
49
- }
50
- /**
51
- * Create a signed reveal record
52
- * @param agent - Public key of the revealing agent
53
- * @param privateKey - Private key for signing
54
- * @param commitmentId - ID of the original commit record
55
- * @param prediction - The original prediction (plaintext)
56
- * @param outcome - The observed outcome
57
- * @param timestamp - Timestamp for the reveal (ms)
58
- * @param evidence - Optional evidence for the outcome
59
- * @returns Signed RevealRecord
60
- */
61
- export function createReveal(agent, privateKey, commitmentId, prediction, outcome, timestamp, evidence) {
62
- // Create the payload for signing
63
- const payload = {
64
- agent,
65
- commitmentId,
66
- prediction,
67
- outcome,
68
- timestamp,
69
- };
70
- if (evidence !== undefined) {
71
- payload.evidence = evidence;
72
- }
73
- // Create signed envelope with type 'reveal'
74
- const envelope = createEnvelope('reveal', agent, privateKey, payload, timestamp);
75
- // Return reveal record
76
- const record = {
77
- id: envelope.id,
78
- agent,
79
- commitmentId,
80
- prediction,
81
- outcome,
82
- timestamp,
83
- signature: envelope.signature,
84
- };
85
- if (evidence !== undefined) {
86
- record.evidence = evidence;
87
- }
88
- return record;
89
- }
90
- /**
91
- * Verify a reveal against its commitment
92
- * @param commit - The original commit record
93
- * @param reveal - The reveal record
94
- * @returns Object with valid flag and optional reason for failure
95
- */
96
- export function verifyReveal(commit, reveal) {
97
- // Validate structures
98
- const commitValidation = validateCommitRecord(commit);
99
- if (!commitValidation.valid) {
100
- return { valid: false, reason: `Invalid commit: ${commitValidation.errors.join(', ')}` };
101
- }
102
- const revealValidation = validateRevealRecord(reveal);
103
- if (!revealValidation.valid) {
104
- return { valid: false, reason: `Invalid reveal: ${revealValidation.errors.join(', ')}` };
105
- }
106
- // Check that reveal references the correct commit
107
- if (reveal.commitmentId !== commit.id) {
108
- return { valid: false, reason: 'Reveal does not reference this commit' };
109
- }
110
- // Check that agents match
111
- if (reveal.agent !== commit.agent) {
112
- return { valid: false, reason: 'Reveal agent does not match commit agent' };
113
- }
114
- // Check that reveal is after commit expiry
115
- if (reveal.timestamp < commit.expiry) {
116
- return { valid: false, reason: 'Reveal timestamp is before commit expiry' };
117
- }
118
- // Verify that the prediction hash matches the commitment
119
- const predictedHash = hashPrediction(reveal.prediction);
120
- if (predictedHash !== commit.commitment) {
121
- return { valid: false, reason: 'Prediction hash does not match commitment' };
122
- }
123
- return { valid: true };
124
- }
125
- //# sourceMappingURL=commit-reveal.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"commit-reveal.js","sourceRoot":"","sources":["../../src/reputation/commit-reveal.ts"],"names":[],"mappings":"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"}
@@ -1,31 +0,0 @@
1
- /**
2
- * Trust score computation with exponential time decay.
3
- * Domain-specific reputation scoring from verification history.
4
- */
5
- import type { VerificationRecord, TrustScore } from './types.js';
6
- /**
7
- * Exponential decay function for time-based reputation degradation.
8
- * @param deltaTimeMs - Time since verification (milliseconds)
9
- * @param lambda - Decay rate (default: ln(2)/70 ≈ 0.0099, giving 70-day half-life)
10
- * @returns Weight multiplier (0-1)
11
- */
12
- export declare function decay(deltaTimeMs: number, lambda?: number): number;
13
- /**
14
- * Compute trust score for an agent in a specific domain
15
- * @param agent - Public key of the agent being scored
16
- * @param domain - Capability domain
17
- * @param verifications - All verification records (will be filtered by target and domain)
18
- * @param currentTime - Current timestamp (ms)
19
- * @returns TrustScore object with computed reputation
20
- */
21
- export declare function computeTrustScore(agent: string, domain: string, verifications: VerificationRecord[], currentTime: number): TrustScore;
22
- /**
23
- * Compute trust scores for an agent across multiple domains
24
- * @param agent - Public key of the agent being scored
25
- * @param verifications - All verification records
26
- * @param currentTime - Current timestamp (ms)
27
- * @returns Map of domain to TrustScore
28
- */
29
- export declare function computeTrustScores(agent: string, verifications: VerificationRecord[], currentTime: number): Map<string, TrustScore>;
30
- export declare const computeAllTrustScores: typeof computeTrustScores;
31
- //# sourceMappingURL=scoring.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scoring.d.ts","sourceRoot":"","sources":["../../src/reputation/scoring.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEjE;;;;;GAKG;AACH,wBAAgB,KAAK,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,SAAmB,GAAG,MAAM,CAG5E;AAkBD;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,kBAAkB,EAAE,EACnC,WAAW,EAAE,MAAM,GAClB,UAAU,CAwDZ;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,kBAAkB,EAAE,EACnC,WAAW,EAAE,MAAM,GAClB,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAezB;AAGD,eAAO,MAAM,qBAAqB,2BAAqB,CAAC"}