UNPKG

@bsv/teranode-listener

Version:

An npm package to subscribe to Teranode P2P topics in a private DHT network and log messages

72 lines (71 loc) 2.54 kB
import { type Libp2p } from 'libp2p'; type MessageCallback = (data: Uint8Array, topic: Topic, from: string) => void; /** * Topic types for Teranode P2P messages * * 'bitcoin/mainnet-bestblock' is for the best block message * 'bitcoin/mainnet-block' is for when miners find a block solution * 'bitcoin/mainnet-subtree' is for when a subtree is created * 'bitcoin/mainnet-mining_on' is for when mining is enabled * 'bitcoin/mainnet-handshake' is for when a peer connects to the network * 'bitcoin/mainnet-rejected_tx' is for when a transaction is rejected */ export type Topic = 'bitcoin/mainnet-bestblock' | 'bitcoin/mainnet-block' | 'bitcoin/mainnet-subtree' | 'bitcoin/mainnet-mining_on' | 'bitcoin/mainnet-handshake' | 'bitcoin/mainnet-rejected_tx'; type TopicCallbacks = Partial<Record<Topic, MessageCallback>>; interface SubscriberConfig { bootstrapPeers?: string[]; staticPeers?: string[]; sharedKey?: string; dhtProtocolID?: string; topics?: Topic[]; listenAddresses?: string[]; usePrivateDHT?: boolean; } interface TeranodeListenerConfig extends Omit<SubscriberConfig, 'topics'> { } /** * TeranodeListener provides a callback-based API for subscribing to Teranode P2P topics. * Each topic can have its own callback function for handling messages. */ export declare class TeranodeListener { private node; private topicCallbacks; private config; private reconnectionInterval?; /** * Creates a new TeranodeListener instance. * @param topicCallbacks - Object mapping topic names to callback functions * @param config - Optional configuration (uses Teranode mainnet defaults) */ constructor(topicCallbacks: TopicCallbacks, config?: TeranodeListenerConfig); /** * Start the P2P listener and subscribe to topics */ start(): Promise<void>; /** * Stop the P2P listener */ stop(): Promise<void>; /** * Add a new topic callback */ addTopicCallback(topic: Topic, callback: MessageCallback): void; /** * Remove a topic callback */ removeTopicCallback(topic: Topic): void; /** * Get the current libp2p node instance */ getNode(): Libp2p | null; /** * Get connected peer count */ getConnectedPeerCount(): number; private setupEventListeners; private setupTopicSubscriptions; private connectToStaticPeers; private startStaticPeerMonitoring; } export declare function startSubscriber(config?: SubscriberConfig): Promise<void>; export {};