@homebridge/ciao
Version:
ciao is a RFC 6763 compliant dns-sd library, advertising on multicast dns (RFC 6762) implemented in plain Typescript/JavaScript
104 lines • 3.94 kB
TypeScript
import { EventEmitter } from "events";
export type InterfaceName = string;
export type MacAddress = string;
export type IPv4Address = string;
export type IPv6Address = string;
export type IPAddress = IPv4Address | IPv6Address;
export declare const enum IPFamily {
IPv4 = "IPv4",
IPv6 = "IPv6"
}
export declare const enum WifiState {
UNDEFINED = 0,
NOT_A_WIFI_INTERFACE = 1,
NOT_ASSOCIATED = 2,
CONNECTED = 3
}
export interface NetworkInterface {
name: InterfaceName;
loopback: boolean;
mac: MacAddress;
ipv4?: IPv4Address;
ip4Netmask?: IPv4Address;
ipv4Netaddress?: IPv4Address;
ipv6?: IPv6Address;
ipv6Netmask?: IPv6Address;
globallyRoutableIpv6?: IPv6Address;
globallyRoutableIpv6Netmask?: IPv6Address;
uniqueLocalIpv6?: IPv6Address;
uniqueLocalIpv6Netmask?: IPv6Address;
}
export interface NetworkUpdate {
added?: NetworkInterface[];
removed?: NetworkInterface[];
changes?: InterfaceChange[];
}
export interface InterfaceChange {
name: InterfaceName;
outdatedIpv4?: IPv4Address;
updatedIpv4?: IPv4Address;
outdatedIpv6?: IPv6Address;
updatedIpv6?: IPv6Address;
outdatedGloballyRoutableIpv6?: IPv6Address;
updatedGloballyRoutableIpv6?: IPv6Address;
outdatedUniqueLocalIpv6?: IPv6Address;
updatedUniqueLocalIpv6?: IPv6Address;
}
export interface NetworkManagerOptions {
interface?: (InterfaceName | IPAddress) | (InterfaceName | IPAddress)[];
excludeIpv6?: boolean;
excludeIpv6Only?: boolean;
}
export declare const enum NetworkManagerEvent {
NETWORK_UPDATE = "network-update"
}
export declare interface NetworkManager {
on(event: "network-update", listener: (networkUpdate: NetworkUpdate) => void): this;
emit(event: "network-update", networkUpdate: NetworkUpdate): boolean;
}
/**
* The NetworkManager maintains a representation of the network interfaces define on the host system.
* It periodically checks for updated network information.
*
* The NetworkManager makes the following decision when checking for interfaces:
* * First of all it gathers the default network interface of the system (by checking the routing table of the os)
* * The following interfaces are going to be tracked:
* * The loopback interface
* * All interfaces which match the subnet of the default interface
* * All interfaces which contain a globally unique (aka globally routable) ipv6 address
*/
export declare class NetworkManager extends EventEmitter {
private static readonly SPACE_PATTERN;
private static readonly NOTHING_FOUND_MESSAGE;
private static readonly POLLING_TIME;
private readonly restrictedInterfaces?;
private readonly excludeIpv6;
private readonly excludeIpv6Only;
private currentInterfaces;
/**
* A subset of our network interfaces, holding only loopback interfaces (or what node considers "internal").
*/
private loopbackInterfaces;
private initPromise?;
private currentTimer?;
constructor(options?: NetworkManagerOptions);
waitForInit(): Promise<void>;
shutdown(): void;
getInterfaceMap(): Map<InterfaceName, NetworkInterface>;
getInterface(name: InterfaceName): NetworkInterface | undefined;
isLoopbackNetaddressV4(netaddress: IPv4Address): boolean;
private scheduleNextJob;
private checkForNewInterfaces;
private getCurrentNetworkInterfaces;
static resolveInterface(address: IPAddress): InterfaceName | undefined;
private static getNetworkInterfaceNames;
private static assumeNetworkInterfaceNames;
private static getLoopbackInterface;
private static getWindowsNetworkInterfaces;
private static getDarwinNetworkInterfaces;
private static getLinuxNetworkInterfaces;
private static getFreeBSDNetworkInterfaces;
private static getOpenBSD_SUNOS_NetworkInterfaces;
private static getDarwinWifiNetworkState;
}
//# sourceMappingURL=NetworkManager.d.ts.map