@highway1/core 0.1.48 → 0.1.53
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.
- package/dist/index.d.ts +190 -46
- package/dist/index.js +517 -3394
- package/dist/index.js.map +1 -1
- package/package.json +4 -16
- package/src/discovery/relay-index.ts +98 -0
- package/src/index.ts +4 -3
- package/src/messaging/router.ts +121 -327
- package/src/transport/relay-client.ts +437 -0
- package/src/transport/relay-types.ts +196 -0
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import { Libp2p } from 'libp2p';
|
|
2
|
-
import { PrivateKey } from '@libp2p/interface';
|
|
3
1
|
import { Level } from 'level';
|
|
4
2
|
|
|
5
3
|
interface KeyPair {
|
|
@@ -61,32 +59,6 @@ declare function signMessage(payload: Uint8Array, privateKey: Uint8Array, public
|
|
|
61
59
|
*/
|
|
62
60
|
declare function verifyMessage(signedMessage: SignedMessage, expectedPublicKey: Uint8Array): Promise<boolean>;
|
|
63
61
|
|
|
64
|
-
interface TransportConfig {
|
|
65
|
-
keyPair?: KeyPair;
|
|
66
|
-
listenAddresses?: string[];
|
|
67
|
-
bootstrapPeers?: string[];
|
|
68
|
-
enableDHT?: boolean;
|
|
69
|
-
/** Run as a relay server so NAT'd agents can receive messages through this node */
|
|
70
|
-
enableRelay?: boolean;
|
|
71
|
-
/** Reserve a relay slot on bootstrap nodes so others can reach us (only needed for hw1 join) */
|
|
72
|
-
reserveRelaySlot?: boolean;
|
|
73
|
-
/** Enable mDNS local peer discovery (default: false) */
|
|
74
|
-
enableMDNS?: boolean;
|
|
75
|
-
/** libp2p PrivateKey for persistent PeerID (from @libp2p/crypto) */
|
|
76
|
-
privateKey?: PrivateKey;
|
|
77
|
-
}
|
|
78
|
-
interface ClawiverseNode {
|
|
79
|
-
libp2p: Libp2p;
|
|
80
|
-
start: () => Promise<void>;
|
|
81
|
-
stop: () => Promise<void>;
|
|
82
|
-
getMultiaddrs: () => string[];
|
|
83
|
-
getPeerId: () => string;
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* Create a Clawiverse transport node with libp2p
|
|
87
|
-
*/
|
|
88
|
-
declare function createNode(config: TransportConfig): Promise<ClawiverseNode>;
|
|
89
|
-
|
|
90
62
|
/**
|
|
91
63
|
* Trust Score System
|
|
92
64
|
*
|
|
@@ -224,6 +196,168 @@ declare function upgradeLegacyCard(legacy: LegacyAgentCard): AgentCard;
|
|
|
224
196
|
*/
|
|
225
197
|
declare function downgradeToLegacyCard(card: AgentCard): LegacyAgentCard;
|
|
226
198
|
|
|
199
|
+
/**
|
|
200
|
+
* CVP-0011: Relay wire protocol types (shared between relay server and relay client)
|
|
201
|
+
*/
|
|
202
|
+
|
|
203
|
+
declare const RELAY_PROTOCOL_VERSION = 1;
|
|
204
|
+
type RelayMessageType = 'HELLO' | 'WELCOME' | 'SEND' | 'DELIVER' | 'DISCOVER' | 'DISCOVERED' | 'PING' | 'PONG' | 'ACK' | 'DELIVERY_REPORT' | 'FETCH_CARD' | 'CARD' | 'GOODBYE' | 'INDEX_SYNC' | 'ROUTE' | 'SYNC_HELLO' | 'SYNC_REQUEST' | 'SYNC_RESPONSE' | 'SYNC_PUSH' | 'SYNC_RECONCILE';
|
|
205
|
+
interface HelloMessage {
|
|
206
|
+
type: 'HELLO';
|
|
207
|
+
protocolVersion: number;
|
|
208
|
+
did: string;
|
|
209
|
+
card: AgentCard;
|
|
210
|
+
timestamp: number;
|
|
211
|
+
signature: Uint8Array;
|
|
212
|
+
extensions?: string[];
|
|
213
|
+
}
|
|
214
|
+
interface WelcomeMessage {
|
|
215
|
+
type: 'WELCOME';
|
|
216
|
+
protocolVersion: number;
|
|
217
|
+
relayId: string;
|
|
218
|
+
peers: number;
|
|
219
|
+
federatedRelays: string[];
|
|
220
|
+
yourAddr: string;
|
|
221
|
+
}
|
|
222
|
+
interface SendMessage {
|
|
223
|
+
type: 'SEND';
|
|
224
|
+
to: string;
|
|
225
|
+
envelope: Uint8Array;
|
|
226
|
+
}
|
|
227
|
+
interface DeliverMessage {
|
|
228
|
+
type: 'DELIVER';
|
|
229
|
+
messageId: string;
|
|
230
|
+
from: string;
|
|
231
|
+
envelope: Uint8Array;
|
|
232
|
+
}
|
|
233
|
+
interface DiscoverMessage {
|
|
234
|
+
type: 'DISCOVER';
|
|
235
|
+
query: string;
|
|
236
|
+
minTrust?: number;
|
|
237
|
+
limit?: number;
|
|
238
|
+
}
|
|
239
|
+
interface DiscoveredAgent {
|
|
240
|
+
did: string;
|
|
241
|
+
card: AgentCard;
|
|
242
|
+
online: boolean;
|
|
243
|
+
homeRelay?: string;
|
|
244
|
+
}
|
|
245
|
+
interface DiscoveredMessage {
|
|
246
|
+
type: 'DISCOVERED';
|
|
247
|
+
agents: DiscoveredAgent[];
|
|
248
|
+
}
|
|
249
|
+
interface AckMessage {
|
|
250
|
+
type: 'ACK';
|
|
251
|
+
messageId: string;
|
|
252
|
+
}
|
|
253
|
+
interface DeliveryReportMessage {
|
|
254
|
+
type: 'DELIVERY_REPORT';
|
|
255
|
+
messageId: string;
|
|
256
|
+
status: 'delivered' | 'expired' | 'queue_full' | 'unknown_recipient';
|
|
257
|
+
timestamp: number;
|
|
258
|
+
}
|
|
259
|
+
interface PingMessage {
|
|
260
|
+
type: 'PING';
|
|
261
|
+
}
|
|
262
|
+
interface PongMessage {
|
|
263
|
+
type: 'PONG';
|
|
264
|
+
peers: number;
|
|
265
|
+
}
|
|
266
|
+
interface FetchCardMessage {
|
|
267
|
+
type: 'FETCH_CARD';
|
|
268
|
+
did: string;
|
|
269
|
+
}
|
|
270
|
+
interface CardMessage {
|
|
271
|
+
type: 'CARD';
|
|
272
|
+
did: string;
|
|
273
|
+
card: AgentCard | null;
|
|
274
|
+
}
|
|
275
|
+
interface GoodbyeMessage {
|
|
276
|
+
type: 'GOODBYE';
|
|
277
|
+
reconnectAfter?: number;
|
|
278
|
+
}
|
|
279
|
+
interface PresenceProof {
|
|
280
|
+
did: string;
|
|
281
|
+
homeRelay: string;
|
|
282
|
+
expiry: number;
|
|
283
|
+
signature: Uint8Array;
|
|
284
|
+
}
|
|
285
|
+
interface SyncEvent {
|
|
286
|
+
seq: number;
|
|
287
|
+
type: 'JOIN' | 'LEAVE' | 'UPDATE';
|
|
288
|
+
did: string;
|
|
289
|
+
homeRelay: string;
|
|
290
|
+
cardHash?: string;
|
|
291
|
+
capabilityKeys?: string[];
|
|
292
|
+
online: boolean;
|
|
293
|
+
ts: number;
|
|
294
|
+
presenceProof?: PresenceProof;
|
|
295
|
+
}
|
|
296
|
+
interface IndexSyncMessage {
|
|
297
|
+
type: 'INDEX_SYNC';
|
|
298
|
+
events: SyncEvent[];
|
|
299
|
+
}
|
|
300
|
+
interface RouteMessage {
|
|
301
|
+
type: 'ROUTE';
|
|
302
|
+
to: string;
|
|
303
|
+
envelope: Uint8Array;
|
|
304
|
+
ttl: number;
|
|
305
|
+
}
|
|
306
|
+
interface SyncHelloMessage {
|
|
307
|
+
type: 'SYNC_HELLO';
|
|
308
|
+
relayId: string;
|
|
309
|
+
seq: number;
|
|
310
|
+
}
|
|
311
|
+
interface SyncRequestMessage {
|
|
312
|
+
type: 'SYNC_REQUEST';
|
|
313
|
+
fromSeq: number;
|
|
314
|
+
}
|
|
315
|
+
interface SyncResponseMessage {
|
|
316
|
+
type: 'SYNC_RESPONSE';
|
|
317
|
+
events: SyncEvent[];
|
|
318
|
+
}
|
|
319
|
+
interface SyncPushMessage {
|
|
320
|
+
type: 'SYNC_PUSH';
|
|
321
|
+
event: SyncEvent;
|
|
322
|
+
}
|
|
323
|
+
interface SyncReconcileMessage {
|
|
324
|
+
type: 'SYNC_RECONCILE';
|
|
325
|
+
dids: string[];
|
|
326
|
+
}
|
|
327
|
+
type RelayMessage = HelloMessage | WelcomeMessage | SendMessage | DeliverMessage | DiscoverMessage | DiscoveredMessage | AckMessage | DeliveryReportMessage | PingMessage | PongMessage | FetchCardMessage | CardMessage | GoodbyeMessage | IndexSyncMessage | RouteMessage | SyncHelloMessage | SyncRequestMessage | SyncResponseMessage | SyncPushMessage | SyncReconcileMessage;
|
|
328
|
+
|
|
329
|
+
/**
|
|
330
|
+
* CVP-0011: WebSocket relay client with reconnection logic
|
|
331
|
+
*/
|
|
332
|
+
|
|
333
|
+
interface RelayClientConfig {
|
|
334
|
+
relayUrls: string[];
|
|
335
|
+
did: string;
|
|
336
|
+
keyPair: KeyPair;
|
|
337
|
+
card: AgentCard;
|
|
338
|
+
reconnect?: {
|
|
339
|
+
baseMs?: number;
|
|
340
|
+
jitterMs?: number;
|
|
341
|
+
maxDelayMs?: number;
|
|
342
|
+
stableAfterMs?: number;
|
|
343
|
+
};
|
|
344
|
+
}
|
|
345
|
+
type MessageDeliveryHandler = (msg: DeliverMessage) => Promise<void>;
|
|
346
|
+
type DeliveryReportHandler = (msg: DeliveryReportMessage) => void;
|
|
347
|
+
interface RelayClient {
|
|
348
|
+
start(): Promise<void>;
|
|
349
|
+
stop(): Promise<void>;
|
|
350
|
+
sendEnvelope(toDid: string, envelopeBytes: Uint8Array): Promise<void>;
|
|
351
|
+
discover(query: string, minTrust?: number, limit?: number): Promise<DiscoveredAgent[]>;
|
|
352
|
+
fetchCard(did: string): Promise<AgentCard | null>;
|
|
353
|
+
onDeliver(handler: MessageDeliveryHandler): void;
|
|
354
|
+
onDeliveryReport(handler: DeliveryReportHandler): void;
|
|
355
|
+
isConnected(): boolean;
|
|
356
|
+
getConnectedRelays(): string[];
|
|
357
|
+
getPeerCount(): number;
|
|
358
|
+
}
|
|
359
|
+
declare function createRelayClient(config: RelayClientConfig): RelayClient;
|
|
360
|
+
|
|
227
361
|
/**
|
|
228
362
|
* Create a new Agent Card (Phase 2 format with structured capabilities)
|
|
229
363
|
*/
|
|
@@ -441,22 +575,25 @@ declare class SearchIndex {
|
|
|
441
575
|
private applyFilters;
|
|
442
576
|
}
|
|
443
577
|
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
578
|
+
/**
|
|
579
|
+
* CVP-0011: Relay-backed discovery operations
|
|
580
|
+
* Implements the same DHTOperations interface shape but backed by relay queries
|
|
581
|
+
*/
|
|
582
|
+
|
|
583
|
+
interface RelayIndexOperations {
|
|
449
584
|
publishAgentCard: (card: AgentCard) => Promise<void>;
|
|
450
585
|
queryAgentCard: (did: string) => Promise<AgentCard | null>;
|
|
451
586
|
queryByCapability: (capability: string) => Promise<AgentCard[]>;
|
|
452
587
|
searchSemantic: (query: SemanticQuery) => Promise<AgentCard[]>;
|
|
453
|
-
resolveDID: (did: string) => Promise<
|
|
588
|
+
resolveDID: (did: string) => Promise<{
|
|
589
|
+
relayUrl: string;
|
|
590
|
+
} | null>;
|
|
454
591
|
queryRelayPeers: () => Promise<string[]>;
|
|
455
592
|
}
|
|
456
593
|
/**
|
|
457
|
-
* Create
|
|
594
|
+
* Create relay-backed discovery operations
|
|
458
595
|
*/
|
|
459
|
-
declare function
|
|
596
|
+
declare function createRelayIndexOperations(client: RelayClient): RelayIndexOperations;
|
|
460
597
|
|
|
461
598
|
/**
|
|
462
599
|
* Capability Matcher
|
|
@@ -495,6 +632,19 @@ declare class CapabilityMatcher {
|
|
|
495
632
|
private levenshteinDistance;
|
|
496
633
|
}
|
|
497
634
|
|
|
635
|
+
interface ResolvedDID {
|
|
636
|
+
peerId: string;
|
|
637
|
+
multiaddrs: string[];
|
|
638
|
+
}
|
|
639
|
+
interface DHTOperations {
|
|
640
|
+
publishAgentCard: (card: AgentCard) => Promise<void>;
|
|
641
|
+
queryAgentCard: (did: string) => Promise<AgentCard | null>;
|
|
642
|
+
queryByCapability: (capability: string) => Promise<AgentCard[]>;
|
|
643
|
+
searchSemantic: (query: SemanticQuery) => Promise<AgentCard[]>;
|
|
644
|
+
resolveDID: (did: string) => Promise<ResolvedDID | null>;
|
|
645
|
+
queryRelayPeers: () => Promise<string[]>;
|
|
646
|
+
}
|
|
647
|
+
|
|
498
648
|
/**
|
|
499
649
|
* Semantic Search Engine
|
|
500
650
|
*
|
|
@@ -603,24 +753,18 @@ declare function encodeMessageJSON(envelope: MessageEnvelope): string;
|
|
|
603
753
|
declare function decodeMessageJSON(json: string): MessageEnvelope;
|
|
604
754
|
|
|
605
755
|
type MessageHandler = (envelope: MessageEnvelope) => Promise<MessageEnvelope | void>;
|
|
606
|
-
interface PeerHint {
|
|
607
|
-
peerId: string;
|
|
608
|
-
multiaddrs: string[];
|
|
609
|
-
}
|
|
610
756
|
interface MessageRouter {
|
|
611
757
|
registerHandler: (protocol: string, handler: MessageHandler) => void;
|
|
612
758
|
unregisterHandler: (protocol: string) => void;
|
|
613
759
|
registerCatchAllHandler: (handler: MessageHandler) => void;
|
|
614
|
-
sendMessage: (envelope: MessageEnvelope
|
|
760
|
+
sendMessage: (envelope: MessageEnvelope) => Promise<MessageEnvelope | void>;
|
|
615
761
|
start: () => Promise<void>;
|
|
616
762
|
stop: () => Promise<void>;
|
|
617
763
|
}
|
|
618
764
|
/**
|
|
619
|
-
* Create a message router
|
|
620
|
-
* When dht is provided, sendMessage can resolve DIDs to peer addresses via DHT lookup.
|
|
621
|
-
* When relayPeers is provided, sendMessage will attempt relay fallback if direct dial fails.
|
|
765
|
+
* Create a message router using relay client (CVP-0011)
|
|
622
766
|
*/
|
|
623
|
-
declare function createMessageRouter(
|
|
767
|
+
declare function createMessageRouter(relayClient: RelayClient, verifyFn: (signature: Uint8Array, data: Uint8Array) => Promise<boolean>): MessageRouter;
|
|
624
768
|
|
|
625
769
|
/**
|
|
626
770
|
* Message Queue Types
|
|
@@ -1229,4 +1373,4 @@ declare class MessagingError extends ClawiverseError {
|
|
|
1229
1373
|
constructor(message: string, details?: unknown);
|
|
1230
1374
|
}
|
|
1231
1375
|
|
|
1232
|
-
export { type AgentCard, type AllowlistEntry, type BlocklistEntry, CLAWIVERSE_CONTEXT, type Capability, CapabilityMatcher, type CapabilityParameter, CapabilityTypes, type Challenge, type ChallengeSolution, ClawiverseError, type
|
|
1376
|
+
export { type AckMessage, type AgentCard, type AllowlistEntry, type BlocklistEntry, CLAWIVERSE_CONTEXT, type Capability, CapabilityMatcher, type CapabilityParameter, CapabilityTypes, type CardMessage, type Challenge, type ChallengeSolution, ClawiverseError, DEFAULT_RATE_LIMIT_TIERS, type DefenseConfig, DefenseMiddleware, type DefenseResult, type DeliverMessage, type DeliveryReportHandler, type DeliveryReportMessage, type DiscoverMessage, type DiscoveredAgent, type DiscoveredMessage, DiscoveryError, type Endorsement, EndorsementManager, type FetchCardMessage, type GoodbyeMessage, type HelloMessage, IdentityError, type IndexSyncMessage, type Interaction, InteractionHistory, type InteractionStats, type KeyPair, type LegacyAgentCard, LogLevel, Logger, type MessageCallback, type MessageDeliveryHandler, type MessageDirection, type MessageEnvelope, type MessageFilter, type MessageHandler, type MessagePage, MessageQueue, type MessageQueueConfig, type MessageRouter, type MessageStatus, MessageStorage, MessagingError, type PaginationOptions, ParameterTypes, type PeerTrustLevel, type PingMessage, type PongMessage, type PresenceProof, type QueueStats, RELAY_PROTOCOL_VERSION, type RateLimitResult, type RateLimitState, type RateLimitTiers, type RelayClient, type RelayClientConfig, type RelayIndexOperations, type RelayMessage, type RelayMessageType, type RouteMessage, SCHEMA_ORG_CONTEXT, SearchIndex, type SearchResult, type SeenEntry, type SemanticQuery, SemanticSearchEngine, type SendMessage, type SignFunction, type SignedMessage, type StoredMessage, type SubscriptionFilter, SybilDefense, type SyncEvent, type SyncHelloMessage, type SyncPushMessage, type SyncReconcileMessage, type SyncRequestMessage, type SyncResponseMessage, TokenBucket, type TokenBucketConfig, TransportError, TrustMetrics, type TrustScore, TrustSystem, type TrustSystemConfig, type VerifyFunction, type WelcomeMessage, clawiverseContext, createAgentCard, createDefaultTrustScore, createEnvelope, createLegacyAgentCard, createLogger, createMessageRouter, createRelayClient, createRelayIndexOperations, createSemanticSearch, createTrustSystem, decodeAgentCard, decodeFromCBOR, decodeFromJSON, decodeMessage, decodeMessageJSON, deriveDID, downgradeToLegacyCard, encodeForDHT, encodeForWeb, encodeMessage, encodeMessageJSON, exportKeyPair, extractPublicKey, generateKeyPair, getAgentCardContext, getEncodedSize, getTierConfig, importKeyPair, isLegacyCard, isValidContext, matchesCapability, sign, signAgentCard, signEnvelope, signMessage, upgradeLegacyCard, validateAgentCard, validateDID, validateEnvelope, verify, verifyAgentCard, verifyEnvelope, verifyMessage };
|