UNPKG

lotus-sdk

Version:

Central repository for several classes of tools for integrating with, and building for, the Lotusia ecosystem

163 lines 4.99 kB
import { PublicKey } from '../bitcore/publickey.js'; import type { Connection, Stream, PeerId, PrivateKey } from '@libp2p/interface'; import type { Multiaddr } from '@multiformats/multiaddr'; import type { Libp2p } from 'libp2p'; import type { PeerInfoMapper } from '@libp2p/kad-dht'; export type { PeerId, Connection, Stream, Multiaddr, Libp2p, PeerInfoMapper }; export declare enum BaseMessageType { PEER_HANDSHAKE = "peer-handshake", PEER_DISCONNECT = "peer-disconnect", PEER_HEARTBEAT = "peer-heartbeat", DHT_ANNOUNCE = "dht-announce", DHT_QUERY = "dht-query", DHT_RESPONSE = "dht-response", DATA_MESSAGE = "data-message", DATA_BROADCAST = "data-broadcast", ERROR = "error" } export interface PeerInfo { peerId: string; publicKey?: PublicKey; multiaddrs?: string[]; metadata?: Record<string, unknown>; lastSeen?: number; } export interface P2PMessage<T = unknown> { type: string; from: string; to?: string; payload: T; timestamp: number; messageId: string; signature?: Buffer; protocol?: string; } export interface DHTQuery { key: string; filters?: Record<string, unknown>; maxResults?: number; } export declare enum ConnectionEvent { CONNECTED = "peer:connect", DISCONNECTED = "peer:disconnect", DISCOVERED = "peer:discovery", UPDATED = "peer:update", MESSAGE = "message", ERROR = "error" } export declare enum RelayEvent { ADDRESSES_AVAILABLE = "relay:addresses-available", CONNECTED = "relay:connected", DISCONNECTED = "relay:disconnected" } export interface P2PConfig { privateKey?: PrivateKey; listen?: string[]; announce?: string[]; bootstrapPeers?: string[]; enableDHT?: boolean; dhtProtocol?: string; enableDHTServer?: boolean; enableGossipSub?: boolean; securityConfig?: { disableRateLimiting?: boolean; customLimits?: Partial<typeof CORE_P2P_SECURITY_LIMITS>; }; dhtPeerInfoMapper?: PeerInfoMapper; enableRelay?: boolean; enableRelayServer?: boolean; enableAutoNAT?: boolean; enableDCUTR?: boolean; enableUPnP?: boolean; maxConnections?: number; connectionManager?: { maxConnections?: number; }; metadata?: Record<string, unknown>; relayMonitoring?: { enabled?: boolean; checkInterval?: number; bootstrapOnly?: boolean; }; } export interface IProtocolHandler { readonly protocolName: string; readonly protocolId: string; handleMessage(message: P2PMessage, from: PeerInfo): Promise<void>; onPeerDiscovered?(peerInfo: PeerInfo): Promise<void>; onPeerConnected?(peerId: string): Promise<void>; onPeerDisconnected?(peerId: string): Promise<void>; onPeerUpdated?(peerInfo: PeerInfo): Promise<void>; handleStream?(stream: Stream, connection: Connection): Promise<void>; onRelayAddressesChanged?(data: { peerId: string; reachableAddresses: string[]; relayAddresses: string[]; timestamp: number; }): Promise<void>; } export interface ResourceAnnouncement<T = unknown> { resourceId: string; resourceType: string; creatorPeerId: string; data: T; createdAt: number; expiresAt?: number; signature?: Buffer; } export interface BroadcastOptions { exclude?: string[]; includedOnly?: string[]; protocol?: string; } export type MessageHandler = (message: P2PMessage, from: PeerInfo) => Promise<void> | void; export interface DHTStats { enabled: boolean; mode: 'client' | 'server' | 'disabled'; routingTableSize: number; isReady: boolean; } export interface P2PStats { peerId: string; peers: { total: number; connected: number; }; dht: { enabled: boolean; mode: 'client' | 'server' | 'disabled'; routingTableSize: number; localRecords: number; }; multiaddrs: string[]; } export declare const CORE_P2P_SECURITY_LIMITS: { readonly MAX_P2P_MESSAGE_SIZE: 100000; readonly MIN_DHT_ANNOUNCEMENT_INTERVAL: 30000; readonly MAX_DHT_RESOURCES_PER_PEER: 100; readonly MAX_DHT_RESOURCES_PER_TYPE_PER_PEER: 20; readonly DHT_CLEANUP_INTERVAL: number; readonly MAX_INVALID_MESSAGES_PER_PEER: 20; }; export interface IProtocolValidator { validateResourceAnnouncement?(resourceType: string, resourceId: string, data: unknown, peerId: string): Promise<boolean> | boolean; validateMessage?(message: P2PMessage, from: PeerInfo): Promise<boolean> | boolean; canAnnounceResource?(resourceType: string, peerId: string): Promise<boolean> | boolean; } export interface CoreSecurityMetrics { dhtAnnouncements: { total: number; rejected: number; rateLimited: number; }; messages: { total: number; rejected: number; oversized: number; }; peers: { banned: number; warnings: number; }; } //# sourceMappingURL=types.d.ts.map