UNPKG

linkup-bot-lib

Version:

342 lines (307 loc) 10.4 kB
declare module "dht-rpc" { import { EventEmitter } from "node:events"; import { Buffer } from "node:buffer"; import { Readable } from "stream"; import RoutingTable from "kademlia-routing-table"; import TOS from "time-ordered-set"; import UDX, { UDXSocket } from "udx-native"; export interface Node { host: string; port: number; id?: Buffer; } export interface QueryInput { target: Buffer; command: number; value?: Buffer; } export interface QueryOptions { concurrency?: number; maxSlow?: number; nodes?: Node[]; closestNodes?: Node[]; replies?: any[]; // Define a more specific type if possible closestReplies?: any[]; // Define a more specific type if possible commit?: boolean | ((reply: any, dht: DHT, query: Query) => Promise<void>); session?: Session; onlyClosestNodes?: boolean; } export interface RequestInput { token?: Buffer; command: number; target?: Buffer; value?: Buffer; } export interface RequestOptions { session?: Session; ttl?: number; } export interface PingOptions { size?: number; session?: Session; ttl?: number; } export interface DHTOptions { bootstrap?: boolean | Node[]; udx?: UDX; concurrency?: number; addNode?: (node: Node) => void; nodes?: TOS<Node>; ephemeral?: boolean; adaptive?: boolean; quickFirewall?: boolean; } export interface IOOptions { maxWindow?: number; port?: number; host?: string; anyPort?: boolean; firewalled?: boolean; onrequest?: (req: Request, external: boolean) => void; onresponse?: (res: any, external: boolean) => void; // Adjust 'any' to the actual response type ontimeout?: (req: Request) => void; } export class CongestionWindow { constructor(maxWindow: number); isFull(): boolean; recv(): void; send(): void; drain(): void; } export class IO { constructor(table: RoutingTable, udx: UDX, options?: IOOptions); // Adjust 'any' to the actual types readonly table: RoutingTable; readonly udx: UDX; readonly inflight: Request[]; readonly clientSocket: UDXSocket | null; readonly serverSocket: UDXSocket | null; readonly firewalled: boolean; readonly ephemeral: boolean; readonly congestion: CongestionWindow; readonly networkInterfaces: any; // Adjust 'any' to the actual type readonly suspended: boolean; onrequest: (req: Request, external: boolean) => void; onresponse: (res: any, external: boolean) => void; // Adjust 'any' to the actual response type ontimeout: (req: Request) => void; onmessage(socket: UDXSocket, buffer: Buffer, from: Node): void; token(addr: { host: string }, i: number): Uint8Array; destroy(): Promise<void>; suspend(): void; resume(): Promise<void>; bind(): Promise<void>; createRequest( to: Node, token: Uint8Array | null, internal: boolean, command: number, target: any | null, value: any | null, session: any | null, ttl: number, ): Request | null; // Adjust 'any' to the actual types } export class DHT extends EventEmitter { constructor(opts?: DHTOptions); static bootstrapper(port: number, host: string, opts?: DHTOptions): DHT; readonly id: Buffer | null; readonly host: string | null; readonly port: number | null; readonly randomized: boolean; readonly socket: UDXSocket | null; readonly table: RoutingTable; readonly udx: UDX; readonly io: IO; readonly nodes: TOS<Node>; readonly bootstrapNodes: Node[]; private concurrency: number; private bootstrapped: boolean; private ephemeral: boolean; private firewalled: boolean; private adaptive: boolean; private destroyed: boolean; private suspended: boolean; private online: boolean; onmessage(socket: UDXSocket, buffer: Buffer, from: Node): void; bind(): Promise<void>; suspend(): Promise<void>; resume(): Promise<void>; address(): any | null; localAddress(): Node | null; remoteAddress(): Node | null; addNode({ host, port }: Node): void; toArray(): Node[]; ready(): Promise<void>; findNode(target: Buffer, opts?: any): Query; query(query: QueryInput, opts?: QueryOptions): Query; ping(node: Node, opts?: PingOptions): Promise<number>; request(request: RequestInput, node: Node, opts?: RequestOptions): Query; refresh(): void; destroy(): void; on(event: "ready", listener: () => void): this; on(event: "suspend", listener: () => void): this; on(event: "resume", listener: () => void): this; on(event: "ping", listener: (node: Node, ms: number) => void): this; on(event: "node", listener: (node: Node) => void): this; on( event: "node-failed", listener: (node: Node, reason: string) => void, ): this; on( event: "node-removed", listener: (node: Node, reason: string) => void, ): this; on(event: "query", listener: (query: Query) => void): this; on( event: "query-failed", listener: (query: Query, reason: string) => void, ): this; on(event: "query-finished", listener: (query: Query) => void): this; on(event: "error", listener: (err: Error) => void): this; on(event: string, listener: (...args: any[]) => void): this; once(event: "ready", listener: () => void): this; once(event: "suspend", listener: () => void): this; once(event: "resume", listener: () => void): this; once(event: "ping", listener: (node: Node, ms: number) => void): this; once(event: "node", listener: (node: Node) => void): this; once( event: "node-failed", listener: (node: Node, reason: string) => void, ): this; once( event: "node-removed", listener: (node: Node, reason: string) => void, ): this; once(event: "query", listener: (query: Query) => void): this; once( event: "query-failed", listener: (query: Query, reason: string) => void, ): this; once(event: "query-finished", listener: (query: Query) => void): this; once(event: "error", listener: (err: Error) => void): this; once(event: string, listener: (...args: any[]) => void): this; emit(event: "ready"): boolean; emit(event: "suspend"): boolean; emit(event: "resume"): boolean; emit(event: "ping", node: Node, ms: number): boolean; emit(event: "node", node: Node): boolean; emit(event: "node-failed", node: Node, reason: string): boolean; emit(event: "node-removed", node: Node, reason: string): boolean; emit(event: "query", query: Query): boolean; emit(event: "query-failed", query: Query, reason: string): boolean; emit(event: "query-finished", query: Query): boolean; emit(event: "error", err: Error): boolean; emit(event: string, ...args: any[]): boolean; off(event: "ready", listener: () => void): this; off(event: "suspend", listener: () => void): this; off(event: "resume", listener: () => void): this; off(event: "ping", listener: (node: Node, ms: number) => void): this; off(event: "node", listener: (node: Node) => void): this; off( event: "node-failed", listener: (node: Node, reason: string) => void, ): this; off( event: "node-removed", listener: (node: Node, reason: string) => void, ): this; off(event: "query", listener: (query: Query) => void): this; off( event: "query-failed", listener: (query: Query, reason: string) => void, ): this; off(event: "query-finished", listener: (query: Query) => void): this; off(event: "error", listener: (err: Error) => void): this; off(event: string, listener: (...args: any[]) => void): this; } export class Request { constructor( io: IO, socket: UDXSocket, tid: number, from: any, to: any, token: Buffer | null, internal: boolean, command: number, target: Buffer | null, value: Buffer | null, session: Session | null, ttl: number, ); // Properties socket: UDXSocket; tid: number; from: any; // Define a more specific type if possible to: any; // Define a more specific type if possible token: Buffer | null; internal: boolean; command: number; target: Buffer | null; value: Buffer | null; session: Session | null; ttl: number; index: number; sent: number; retries: number; destroyed: boolean; oncycle: (req: Request) => void; onerror: (err: Error, req: Request) => void; onresponse: (res: any, req: Request) => void; // Define a more specific type for res if possible // Methods reply(value: Buffer | null, opts?: any): void; // Define a more specific type for opts if possible error(code: number, opts?: any): void; // Define a more specific type for opts if possible relay(value: Buffer | null, to: any, opts?: any): void; // Define a more specific type for to and opts if possible send(force?: boolean): void; sendReply( error: number, value: Buffer | null, token: boolean, hasCloserNodes: boolean, from: any, socket: UDXSocket, ttl?: number, ): void; // Define a more specific type for from if possible destroy(err?: Error): void; } export class Query extends Readable { constructor( dht: DHT, target: Buffer, internal: boolean, command: number, value: Buffer | null, opts?: QueryOptions, ); // Properties dht: DHT; target: Buffer; internal: boolean; command: number; value: Buffer | null; errors: number; successes: number; concurrency: number; inflight: number; map: (m: any) => any; // Define a more specific type if possible maxSlow: number; closestReplies: any[]; // Define a more specific type if possible // Methods finished(): Promise<void>; } export class Session { constructor(dht: DHT); // Properties dht: DHT; inflight: Request[]; // Methods query(query: QueryInput, opts?: QueryOptions): Query; request( request: RequestInput, to: Node, opts?: RequestOptions, ): Promise<void>; ping(to: Node, opts?: PingOptions): Promise<void>; destroy(err?: Error): void; } export default DHT; }