/** * Raft Node Implementation * Core Raft consensus algorithm implementation */ import EventEmitter from 'eventemitter3'; import { NodeId, Term, LogIndex, NodeState, RaftNodeConfig, RequestVoteRequest, RequestVoteResponse, AppendEntriesRequest, AppendEntriesResponse, LogEntry, PersistentState } from './types.js'; /** Transport interface for sending RPCs to peers */ export interface RaftTransport { /** Send RequestVote RPC to a peer */ requestVote(peerId: NodeId, request: RequestVoteRequest): Promise; /** Send AppendEntries RPC to a peer */ appendEntries(peerId: NodeId, request: AppendEntriesRequest): Promise; } /** State machine interface for applying committed entries */ export interface StateMachine { /** Apply a committed command to the state machine */ apply(command: T): Promise; } /** Raft consensus node */ export declare class RaftNode extends EventEmitter { private readonly config; private readonly state; private nodeState; private leaderId; private transport; private stateMachine; private electionTimer; private heartbeatTimer; private running; constructor(config: RaftNodeConfig); /** Get node ID */ get nodeId(): NodeId; /** Get current state */ get currentState(): NodeState; /** Get current term */ get currentTerm(): Term; /** Get current leader ID */ get leader(): NodeId | null; /** Check if this node is the leader */ get isLeader(): boolean; /** Get commit index */ get commitIndex(): LogIndex; /** Set transport for RPC communication */ setTransport(transport: RaftTransport): void; /** Set state machine for applying commands */ setStateMachine(stateMachine: StateMachine): void; /** Start the Raft node */ start(): void; /** Stop the Raft node */ stop(): void; /** Propose a command to be replicated (only works if leader) */ propose(command: T): Promise>; /** Handle RequestVote RPC from a candidate */ handleRequestVote(request: RequestVoteRequest): Promise; /** Handle AppendEntries RPC from leader */ handleAppendEntries(request: AppendEntriesRequest): Promise; /** Load persistent state */ loadState(state: PersistentState): void; /** Get current persistent state */ getState(): PersistentState; private transitionTo; private getRandomElectionTimeout; private resetElectionTimer; private clearTimers; private startElection; private startHeartbeat; private replicateToFollowers; private replicateToPeer; private applyCommitted; } //# sourceMappingURL=node.d.ts.map