chore(8.0): final pre-RC1 sweep — API consistency, named errors, orphans, zero-cast codebase

This commit is contained in:
David Snelling 2026-06-11 14:51:00 -07:00
parent 970e08c466
commit 1f7e365a4e
237 changed files with 1951 additions and 49413 deletions

View file

@ -123,12 +123,13 @@ export class DistributedCoordinator extends EventEmitter {
*/
private setupNetworkHandlers(): void {
if (!this.networkTransport) return
// Register message handlers directly on the messageHandlers map
const handlers = (this.networkTransport as any).messageHandlers as Map<string, (msg: NetworkMessage) => Promise<any>>
// Register handlers through the transport's public onMessage(), which
// writes to the same messageHandlers map this code used to reach into.
const transport = this.networkTransport
// Handle vote requests
handlers.set('requestVote', async (msg: NetworkMessage) => {
transport.onMessage('requestVote', async (msg: NetworkMessage) => {
const response = await this.handleVoteRequest(msg)
// Send response back
if (this.networkTransport) {
@ -138,12 +139,12 @@ export class DistributedCoordinator extends EventEmitter {
})
// Handle vote responses
handlers.set('voteResponse', async (msg: NetworkMessage) => {
transport.onMessage('voteResponse', async (msg: NetworkMessage) => {
this.handleVoteResponse(msg)
})
// Handle heartbeats/append entries
handlers.set('appendEntries', async (msg: NetworkMessage) => {
transport.onMessage('appendEntries', async (msg: NetworkMessage) => {
const response = await this.handleAppendEntries(msg)
// Send response back
if (this.networkTransport) {
@ -153,7 +154,7 @@ export class DistributedCoordinator extends EventEmitter {
})
// Handle append responses
handlers.set('appendResponse', async (msg: NetworkMessage) => {
transport.onMessage('appendResponse', async (msg: NetworkMessage) => {
this.handleAppendResponse(msg)
})
}

View file

@ -75,7 +75,12 @@ export class NetworkTransport extends EventEmitter {
if (this.isRunning) return
const ws = await import('ws')
WebSocketServer = (ws as any).WebSocketServer || (ws as any).Server || ws.default
// The ws package has exported its server class as `WebSocketServer`
// (v8+), `Server` (older releases) and via the default export — and the
// available type declarations disagree on which of those are value
// exports, so probe all three through an optional-keyed module view.
const wsModule = ws as typeof ws & { WebSocketServer?: unknown; Server?: unknown }
WebSocketServer = wsModule.WebSocketServer || wsModule.Server || ws.default
await this.startHTTPServer()
await this.startWebSocketServer()

View file

@ -6,7 +6,7 @@
import { EventEmitter } from 'node:events'
import * as os from 'node:os'
import { StorageAdapter } from '../coreTypes.js'
import { NounMetadata, StorageAdapter } from '../coreTypes.js'
export interface NodeInfo {
id: string
@ -357,7 +357,11 @@ export class StorageDiscovery extends EventEmitter {
*/
private async loadNodeRegistry(): Promise<string[]> {
try {
const registry = await this.storage.getMetadata(`${this.CLUSTER_PATH}/registry.json`) as any
// The registry document is written by updateNodeRegistry() below with a
// `nodes` string-ID array on top of the base NounMetadata shape.
const registry = await this.storage.getMetadata(
`${this.CLUSTER_PATH}/registry.json`
) as (NounMetadata & { nodes?: string[] }) | null
return registry?.nodes || []
} catch (err) {
return []