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; }