@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
TypeScript
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 {};