import IPostMessage from '../../IPostMessage';
import INetworkInfo, { INetworkInterface, INetworkOptions, INetworkOptionsLegacy, NetworkInterface } from './INetworkInfo';
import INetwork, { CertificateEapDetails } from './INetwork';
/**
* The `sos.management.network` API groups together networking methods. For Wi-Fi setup, use the [Wi-Fi API](https://developers.signageos.io/sdk/sos_management/wifi).
*
*
* Network Management Capabilities
* | Capability | Description |
* |:------------|:-------------|
* | `NETWORK_INFO` | If device supports returning network information |
*
* If you want to check if the device supports this capability, use [`sos.management.supports()`](https://developers.signageos.io/sdk/sos_management/#supports).
*
*/
export default class Network implements INetwork {
private messagePrefix;
private postMessage;
/** @internal */
constructor(messagePrefix: string, postMessage: IPostMessage);
/** @deprecated Use `sos.management.network.listInterfaces()` instead. */
getActiveInfo(): Promise;
/**
* The `listInterface()` method returns a list of all network interfaces, and their information like MAC address, IP address, etc.
* Wi-Fi connection strength is described as a percentage in the range from 0 to 100, linearly converted from dBm -90 to -30, respectively, based on the platform.
*
* @returns {Promise} Resolves to an array of network interfaces with their information.
* @since 4.9.0
*
* @example // {@link https://github.com/signageos/applet-examples/tree/master/examples/management-js-api/network | Applet Example with Network Interfaces}
*
* @example
* const interfaces = await sos.management.network.listInterfaces();
* interfaces.forEach((iface) => {
* console.log(`Interface: ${iface.type}, IP: ${iface.localAddress ?? 'Unknown'}, MAC: ${iface.macAddress}`);
* });
*/
listInterfaces(): Promise;
/** @deprecated Use `sos.management.network.setManual(interfaceName, options)` instead. */
setManual(options: INetworkOptionsLegacy): Promise;
/**
* The `setManual()` method manually configures a network interface.
*
* :::warning
* Wi-Fi interface can be configured with this method, but it has to be first enabled via the [Wi-Fi API](https://developers.signageos.io/sdk/sos_management/wifi#enableclient).
* :::
*
* @param interfaceName The interface name which can be retrieved from the list of interfaces returned by `listInterfaces()`
* @param options The network configuration options.
* @param options.localAddress The local IP address to be set.
* @param options.gateway The gateway IP address to be set.
* @param options.netmask The netmask to be set.
* @param options.dns The DNS server array of IP addresses to be set.
* @returns {Promise} A promise that resolves when the network is set.
* @throws {Error} If the network options are invalid.
* @throws {Error} If the device does not support network management.
* @since 4.0.0
*/
setManual(interfaceName: string, options: INetworkOptions): Promise;
/** @deprecated Use `sos.management.network.setDHCP(interfaceName)` instead. */
setDHCP(networkInterface: NetworkInterface): Promise;
/**
* The `setDHCP()` method configures a selected network interface to use DHCP.
*
* :::warning
* Wi-Fi interface can be configured with this method, but it has to be first enabled via the [Wi-Fi API](https://developers.signageos.io/sdk/sos_management/wifi#enableclient).
* :::
*
* @param interfaceName The interface name which can be retrieved from the list of interfaces returned by `listInterfaces()`
* @returns {Promise} A promise that resolves when the network interface is set to use DHCP.
* @since 4.0.0
*
* @example
* await sos.management.network.setDHCP('eth0');
*/
setDHCP(interfaceName: string): Promise;
/**
* The `disableInterface()` turns off a selected network interface.
*
* :::warning
* Don't use this method to disable Wi-Fi. Use [Wi-Fi API](https://developers.signageos.io/sdk/sos_management/wifi) to turn Wi-Fi on/off.
* :::
*
* @param interfaceName The interface name which can be retrieved from the list of interfaces returned by `listInterfaces()`
* @return {Promise} A promise that resolves when the network interface is disabled.
* @throws {Error} If the interface name is invalid.
* @throws {Error} If the device does not support network management.
* @since 4.13.0
*
* @example
* await sos.management.network.disableInterface('eth0');
*/
disableInterface(interfaceName: string): Promise;
/**
* The `importCertificate()` method imports a certificate to the device. The certificate can then be used when connecting to a Wi-Fi network using the [Wi-Fi API and EAP authentification](https://developers.signageos.io/sdk/sos_management/wifi).
*
* :::note
* - This API supports only PEM formatted certificates.
* - Only EAP certificates are supported for now.
* :::
*
* @param details The certificate details.
* @param details.type The type of the certificate is for.
* @param details.caCertificate The CA certificate in PEM format. Required for 'PEAP' and 'EAP-TTLS'.
* @param details.clientCertificate The client certificate in PEM format. Required for 'EAP-TLS'.
* @param details.clientKey The private key for the client certificate in PEM format. Required for 'EAP-TLS'.
* @param details.clientCertificatePassword The password for the private key, if it's encrypted. Optional.
* @returns {Promise} A promise that resolves when the certificate is imported.
* @throws {Error} If the certificate details are invalid.
* @throws {Error} If the device does not support certificate import.
* @since 8.3.0
*
* @example
* // Importing an EAP-TLS certificate
* const certDetails = {
* type: 'TLS',
* caCertificate: '-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----',
* clientCertificate: '-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----',
* clientKey: '-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----',
* clientCertificatePassword: 'your_password', // if the key is encrypted
* };
* await sos.management.network.importCertificate(certDetails);
*
* // Importing a PEAP certificate
* const certDetailsEapPeap = {
* type: 'PEAP',
* caCertificate: '-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----',
* };
* await sos.management.network.importCertificate(certDetailsEapPeap);
*
* // Importing an EAP-TTLS certificate
* const certDetailsEapTtls = {
* type: 'TTLS',
* caCertificate: '-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----',
* };
* await sos.management.network.importCertificate(certDetailsEapTtls);
*/
importCertificate(details: CertificateEapDetails): Promise;
/**
* The `sendUdp()` method sends a raw UDP datagram to the specified IP address and port.
* This is a low-level network primitive that can be used for protocols like Wake-on-LAN.
*
* @param ip The destination IP address. Use `'255.255.255.255'` for broadcast.
* @param port The destination UDP port number (1-65535).
* @param data The payload as a byte array. Each element must be an integer between 0 and 255. Maximum 1500 elements (Ethernet MTU).
* @returns {Promise} A promise that resolves when the UDP packet has been sent.
* @throws {Error} If the parameters are invalid.
* @throws {Error} If the device does not support sending UDP packets.
* @since 9.0.0
*
* @example
* // Send a Wake-on-LAN magic packet
* await sos.management.network.sendUdp('255.255.255.255', 9, [0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, ...]);
*/
sendUdp(ip: string, port: number, data: number[]): Promise;
/**
* The `sendWakeOnLan()` method sends a Wake-on-LAN magic packet to wake a device with the given MAC address.
* The target device must have Wake-on-LAN enabled and be on the same local network.
*
* Internally, this generates a 102-byte magic packet (6×0xFF + 16× MAC address) and sends it
* as a UDP broadcast to `255.255.255.255` on port 9 via `sendUdp()`.
*
* @param macAddress The MAC address of the target device. Accepted formats: `AA:BB:CC:DD:EE:FF`, `AA-BB-CC-DD-EE-FF`, `AABBCCDDEEFF`.
* @returns {Promise} A promise that resolves when the magic packet has been sent.
* @throws {Error} If the MAC address format is invalid.
* @throws {Error} If the device does not support sending UDP packets.
* @since 9.0.0
*
* @example
* // Wake a device by its MAC address
* await sos.management.network.sendWakeOnLan('AA:BB:CC:DD:EE:FF');
*/
sendWakeOnLan(macAddress: string): Promise;
private getMessage;
}