/** * Core libp2p component interfaces */ export interface PeerId { toString(): string; toBytes(): Uint8Array; equals(other: PeerId): boolean; } export interface Multiaddr { toString(): string; bytes: Uint8Array; protos(): Array<{ code: number; name: string }>; getPeerId(): string | null; } export interface Connection { id: string; remotePeer: PeerId; remoteAddr: Multiaddr; stat: { direction: 'inbound' | 'outbound'; status: 'pending' | 'open' | 'closing' | 'closed'; timeline: { open: number; upgraded?: number; close?: number; }; }; } export interface PeerInfo { id: PeerId; multiaddrs: Multiaddr[]; } export interface ProtocolHandler { protocolId: string; handler: (data: { peerId: string; data?: Uint8Array }) => void | Promise; } export interface ILibp2pComponent { peerId: PeerId | null; multiaddrs: Multiaddr[]; start(): Promise; stop(): Promise; dial(multiaddr: string): Promise; hangUp(peerId: string): Promise; getConnections(peerId?: string): Promise; sendProtocolData(peerId: string, protocolId: string, data: Uint8Array): Promise; refreshDiscovery(): Promise; pingPeer(peerId: string): Promise<{ success: boolean; rtt?: number; peerId: string }>; addEventListener( event: K, handler: (evt: Libp2pEvents[K]) => void, ): void; removeEventListener( event: K, handler: (evt: Libp2pEvents[K]) => void, ): void; } export interface Libp2pEvents { 'peer:discovery': CustomEvent; 'peer:lost': CustomEvent<{ id: PeerId }>; 'peer:connect': CustomEvent; 'peer:disconnect': CustomEvent; 'connection:open': CustomEvent; 'connection:close': CustomEvent; 'self:peer:update': CustomEvent<{ peerId: PeerId; multiaddrs: Multiaddr[] }>; } export interface Libp2pOptions { config?: { tcpPort?: number; wsPort?: number; }; protocols?: ProtocolHandler[]; keypair?: { privateKey: Uint8Array; publicKey: Uint8Array; }; }