@signageos/front-applet 8.2.4 → 8.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundle.js +2 -2
- package/dist/bundle.js.map +1 -1
- package/docs/sos_management/network.md +75 -0
- package/docs/sos_management/wifi.md +37 -7
- package/es6/FrontApplet/Management/Network/INetwork.d.ts +18 -0
- package/es6/FrontApplet/Management/Network/INetwork.js +8 -0
- package/es6/FrontApplet/Management/Network/INetwork.js.map +1 -1
- package/es6/FrontApplet/Management/Network/Network.d.ts +46 -1
- package/es6/FrontApplet/Management/Network/Network.js +52 -0
- package/es6/FrontApplet/Management/Network/Network.js.map +1 -1
- package/es6/FrontApplet/Management/Wifi/IWifi.d.ts +18 -0
- package/es6/FrontApplet/Management/Wifi/IWifi.js +8 -0
- package/es6/FrontApplet/Management/Wifi/IWifi.js.map +1 -1
- package/es6/FrontApplet/Management/Wifi/Wifi.d.ts +18 -0
- package/es6/FrontApplet/Management/Wifi/Wifi.js +18 -0
- package/es6/FrontApplet/Management/Wifi/Wifi.js.map +1 -1
- package/package.json +1 -1
|
@@ -53,6 +53,81 @@ await sos.management.network.disableInterface('eth0');
|
|
|
53
53
|
|
|
54
54
|
<Separator />
|
|
55
55
|
|
|
56
|
+
### importCertificate()
|
|
57
|
+
|
|
58
|
+
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).
|
|
59
|
+
|
|
60
|
+
:::note
|
|
61
|
+
- This API supports only PEM formatted certificates.
|
|
62
|
+
- Only EAP certificates are supported for now.
|
|
63
|
+
:::
|
|
64
|
+
|
|
65
|
+
```ts expandable
|
|
66
|
+
importCertificate(details: CertificateEapDetails): Promise<void>;
|
|
67
|
+
// show-more
|
|
68
|
+
interface CertificateEapDetails {
|
|
69
|
+
type: EAPType;
|
|
70
|
+
caCertificate?: string;
|
|
71
|
+
clientCertificate?: string;
|
|
72
|
+
clientKey?: string;
|
|
73
|
+
clientCertificatePassword?: string;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
type EAPType = 'EAP-TLS' | 'PEAP' | 'EAP-TTLS';
|
|
77
|
+
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
#### Params
|
|
81
|
+
|
|
82
|
+
| Name | Type | Required | Description |
|
|
83
|
+
|-------------------------------------|-------------------------|------------------|-----------------------------------------------------------------------------------|
|
|
84
|
+
| `details` | `CertificateEapDetails` | <div>Yes</div> | The certificate details. |
|
|
85
|
+
| `details.type` | `EAPType` | <div>Yes</div> | The type of the certificate is for. |
|
|
86
|
+
| `details.caCertificate` | `string` | <div>No</div> | The CA certificate in PEM format. Required for 'PEAP' and 'EAP-TTLS'. |
|
|
87
|
+
| `details.clientCertificate` | `string` | <div>No</div> | The client certificate in PEM format. Required for 'EAP-TLS'. |
|
|
88
|
+
| `details.clientKey` | `string` | <div>No</div> | The private key for the client certificate in PEM format. Required for 'EAP-TLS'. |
|
|
89
|
+
| `details.clientCertificatePassword` | `string` | <div>No</div> | The password for the private key, if it's encrypted. Optional. |
|
|
90
|
+
|
|
91
|
+
#### Return value
|
|
92
|
+
|
|
93
|
+
A promise that resolves when the certificate is imported.
|
|
94
|
+
|
|
95
|
+
#### Possible errors
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
- If the certificate details are invalid.
|
|
99
|
+
- If the device does not support certificate import.
|
|
100
|
+
|
|
101
|
+
#### Example
|
|
102
|
+
|
|
103
|
+
```ts
|
|
104
|
+
// Importing an EAP-TLS certificate
|
|
105
|
+
const certDetails = {
|
|
106
|
+
type: 'EAP-TLS',
|
|
107
|
+
caCertificate: '-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----',
|
|
108
|
+
clientCertificate: '-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----',
|
|
109
|
+
clientKey: '-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----',
|
|
110
|
+
clientCertificatePassword: 'your_password', // if the key is encrypted
|
|
111
|
+
};
|
|
112
|
+
await sos.management.network.importCertificate(certDetails);
|
|
113
|
+
|
|
114
|
+
// Importing a PEAP certificate
|
|
115
|
+
const certDetailsEapPeap = {
|
|
116
|
+
type: 'PEAP',
|
|
117
|
+
caCertificate: '-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----',
|
|
118
|
+
};
|
|
119
|
+
await sos.management.network.importCertificate(certDetailsEapPeap);
|
|
120
|
+
|
|
121
|
+
// Importing an EAP-TTLS certificate
|
|
122
|
+
const certDetailsEapTtls = {
|
|
123
|
+
type: 'EAP-TTLS',
|
|
124
|
+
caCertificate: '-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----',
|
|
125
|
+
};
|
|
126
|
+
await sos.management.network.importCertificate(certDetailsEapTtls);
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
<Separator />
|
|
130
|
+
|
|
56
131
|
### listInterfaces()
|
|
57
132
|
|
|
58
133
|
The `listInterface()` method returns a list of all network interfaces, and their information like MAC address, IP address, etc.
|
|
@@ -58,21 +58,39 @@ connect(ssid: string, password?: string, options?: IWifiConnectOptions): Promise
|
|
|
58
58
|
interface IWifiConnectOptions {
|
|
59
59
|
hidden?: boolean;
|
|
60
60
|
securityType?: WifiEncryptionType;
|
|
61
|
+
eap?: {
|
|
62
|
+
method: EAPMethod;
|
|
63
|
+
identity: string;
|
|
64
|
+
anonymousIdentity?: string;
|
|
65
|
+
passphrase: string;
|
|
66
|
+
phase2Auth?: EAPPhase2Auth;
|
|
67
|
+
useCACert?: boolean;
|
|
68
|
+
};
|
|
61
69
|
}
|
|
62
70
|
|
|
63
71
|
type WifiEncryptionType = 'OPEN' | 'WEP' | 'WPA2' | 'WPA2_WPA_MIXED' | 'WPA3' | '802.1X_EAP';
|
|
64
72
|
|
|
73
|
+
type EAPMethod = 'PEAP' | 'TLS' | 'TTLS';
|
|
74
|
+
|
|
75
|
+
type EAPPhase2Auth = 'PAP' | 'MSCHAP' | 'MSCHAPV2' | 'GTC';
|
|
76
|
+
|
|
65
77
|
```
|
|
66
78
|
|
|
67
79
|
#### Params
|
|
68
80
|
|
|
69
|
-
| Name
|
|
70
|
-
|
|
71
|
-
| `ssid`
|
|
72
|
-
| `password`
|
|
73
|
-
| `options`
|
|
74
|
-
| `options.hidden`
|
|
75
|
-
| `options.securityType`
|
|
81
|
+
| Name | Type | Required | Description |
|
|
82
|
+
|--------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------|-------------------------------------------------------------------------------------|
|
|
83
|
+
| `ssid` | `string` | <div>Yes</div> | Name of the network, max. allowed length is 32 characters. |
|
|
84
|
+
| `password` | `string` | <div>No</div> | Password of the device, must be between 8 and 32 characters. |
|
|
85
|
+
| `options` | `IWifiConnectOptions` | <div>No</div> | Additional options for the connection. |
|
|
86
|
+
| `options.hidden` | `boolean` | <div>No</div> | If the network is hidden, defaults to `false`. |
|
|
87
|
+
| `options.securityType` | `WifiEncryptionType` | <div>No</div> | The security type of the network. |
|
|
88
|
+
| `options.eap` | `{ method: EAPMethod; identity: string; anonymousIdentity?: string \| undefined; passphrase: string; phase2Auth?: EAPPhase2Auth \| undefined; useCACert?: boolean \| undefined; }` | <div>No</div> | Authentication details for networks that require EAP. |
|
|
89
|
+
| `options.eap.method` | `EAPMethod` | <div>Yes</div> | The type of EAP authentication to use. |
|
|
90
|
+
| `options.eap.identity` | `string` | <div>Yes</div> | Username or identity for authentication. |
|
|
91
|
+
| `options.eap.passphrase` | `string` | <div>Yes</div> | Password or passphrase for authentication. |
|
|
92
|
+
| `options.eap.phase2Auth` | `EAPPhase2Auth` | <div>No</div> | Secondary authentication method, if required by the EAP method. Not needed for TLS. |
|
|
93
|
+
| `options.eap.useCACert` | `boolean` | <div>No</div> | Whether to use a CA certificate for authentication. Not needed for TLS. |
|
|
76
94
|
|
|
77
95
|
#### Return value
|
|
78
96
|
|
|
@@ -101,6 +119,18 @@ await sos.management.wifi.connect('MyOpenNetwork', undefined, { hidden: true });
|
|
|
101
119
|
|
|
102
120
|
// To connect to an encrypted Wi-Fi network with WPA2 security
|
|
103
121
|
await sos.management.wifi.connect('MyEncryptedNetwork', 'my-password', { securityType: 'WPA2' });
|
|
122
|
+
|
|
123
|
+
// To connect to an enterprise Wi-Fi network using EAP
|
|
124
|
+
await sos.management.wifi.connect('MyEnterpriseNetwork', undefined, {
|
|
125
|
+
securityType: '802.1X_EAP',
|
|
126
|
+
eap: {
|
|
127
|
+
method: 'PEAP',
|
|
128
|
+
identity: 'my-username',
|
|
129
|
+
passphrase: 'my-password',
|
|
130
|
+
phase2Auth: 'MSCHAPV2',
|
|
131
|
+
useCACert: false,
|
|
132
|
+
},
|
|
133
|
+
});
|
|
104
134
|
```
|
|
105
135
|
|
|
106
136
|
<Separator />
|
|
@@ -1,4 +1,12 @@
|
|
|
1
1
|
import INetworkInfo, { INetworkInterface, INetworkOptions, INetworkOptionsLegacy, NetworkInterface } from './INetworkInfo';
|
|
2
|
+
export type EAPType = 'EAP-TLS' | 'PEAP' | 'EAP-TTLS';
|
|
3
|
+
export interface CertificateEapDetails {
|
|
4
|
+
type: EAPType;
|
|
5
|
+
caCertificate?: string;
|
|
6
|
+
clientCertificate?: string;
|
|
7
|
+
clientKey?: string;
|
|
8
|
+
clientCertificatePassword?: string;
|
|
9
|
+
}
|
|
2
10
|
export default interface INetwork {
|
|
3
11
|
getActiveInfo(): Promise<INetworkInfo>;
|
|
4
12
|
listInterfaces(): Promise<INetworkInterface[]>;
|
|
@@ -7,4 +15,14 @@ export default interface INetwork {
|
|
|
7
15
|
setDHCP(networkInterface: NetworkInterface): Promise<void>;
|
|
8
16
|
setDHCP(interfaceName: string): Promise<void>;
|
|
9
17
|
disableInterface(interfaceName: string): Promise<void>;
|
|
18
|
+
importCertificate(details: CertificateEapDetails): Promise<void>;
|
|
10
19
|
}
|
|
20
|
+
export declare const VCertificateEapDetails: {
|
|
21
|
+
type: {
|
|
22
|
+
string: string[];
|
|
23
|
+
};
|
|
24
|
+
caCertificate: string;
|
|
25
|
+
clientCertificate: string;
|
|
26
|
+
clientKey: string;
|
|
27
|
+
clientCertificatePassword: string;
|
|
28
|
+
};
|
|
@@ -1,3 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.VCertificateEapDetails = void 0;
|
|
4
|
+
exports.VCertificateEapDetails = {
|
|
5
|
+
type: { string: ['EAP-TLS', 'PEAP', 'EAP-TTLS'] },
|
|
6
|
+
caCertificate: '?string',
|
|
7
|
+
clientCertificate: '?string',
|
|
8
|
+
clientKey: '?string',
|
|
9
|
+
clientCertificatePassword: '?string',
|
|
10
|
+
};
|
|
3
11
|
//# sourceMappingURL=INetwork.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"INetwork.js","sourceRoot":"","sources":["../../../../src/FrontApplet/Management/Network/INetwork.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"INetwork.js","sourceRoot":"","sources":["../../../../src/FrontApplet/Management/Network/INetwork.ts"],"names":[],"mappings":";;;AA8Ba,QAAA,sBAAsB,GAAG;IACrC,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE;IACjD,aAAa,EAAE,SAAS;IACxB,iBAAiB,EAAE,SAAS;IAC5B,SAAS,EAAE,SAAS;IACpB,yBAAyB,EAAE,SAAS;CACpC,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import IPostMessage from '../../IPostMessage';
|
|
2
2
|
import INetworkInfo, { INetworkInterface, INetworkOptions, INetworkOptionsLegacy, NetworkInterface } from './INetworkInfo';
|
|
3
|
-
import INetwork from './INetwork';
|
|
3
|
+
import INetwork, { CertificateEapDetails } from './INetwork';
|
|
4
4
|
/**
|
|
5
5
|
* 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).
|
|
6
6
|
*
|
|
@@ -91,5 +91,50 @@ export default class Network implements INetwork {
|
|
|
91
91
|
* await sos.management.network.disableInterface('eth0');
|
|
92
92
|
*/
|
|
93
93
|
disableInterface(interfaceName: string): Promise<void>;
|
|
94
|
+
/**
|
|
95
|
+
* 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).
|
|
96
|
+
*
|
|
97
|
+
* :::note
|
|
98
|
+
* - This API supports only PEM formatted certificates.
|
|
99
|
+
* - Only EAP certificates are supported for now.
|
|
100
|
+
* :::
|
|
101
|
+
*
|
|
102
|
+
* @param details The certificate details.
|
|
103
|
+
* @param details.type The type of the certificate is for.
|
|
104
|
+
* @param details.caCertificate The CA certificate in PEM format. Required for 'PEAP' and 'EAP-TTLS'.
|
|
105
|
+
* @param details.clientCertificate The client certificate in PEM format. Required for 'EAP-TLS'.
|
|
106
|
+
* @param details.clientKey The private key for the client certificate in PEM format. Required for 'EAP-TLS'.
|
|
107
|
+
* @param details.clientCertificatePassword The password for the private key, if it's encrypted. Optional.
|
|
108
|
+
* @returns {Promise<void>} A promise that resolves when the certificate is imported.
|
|
109
|
+
* @throws {Error} If the certificate details are invalid.
|
|
110
|
+
* @throws {Error} If the device does not support certificate import.
|
|
111
|
+
* @since 8.3.0
|
|
112
|
+
*
|
|
113
|
+
* @example
|
|
114
|
+
* // Importing an EAP-TLS certificate
|
|
115
|
+
* const certDetails = {
|
|
116
|
+
* type: 'EAP-TLS',
|
|
117
|
+
* caCertificate: '-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----',
|
|
118
|
+
* clientCertificate: '-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----',
|
|
119
|
+
* clientKey: '-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----',
|
|
120
|
+
* clientCertificatePassword: 'your_password', // if the key is encrypted
|
|
121
|
+
* };
|
|
122
|
+
* await sos.management.network.importCertificate(certDetails);
|
|
123
|
+
*
|
|
124
|
+
* // Importing a PEAP certificate
|
|
125
|
+
* const certDetailsEapPeap = {
|
|
126
|
+
* type: 'PEAP',
|
|
127
|
+
* caCertificate: '-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----',
|
|
128
|
+
* };
|
|
129
|
+
* await sos.management.network.importCertificate(certDetailsEapPeap);
|
|
130
|
+
*
|
|
131
|
+
* // Importing an EAP-TTLS certificate
|
|
132
|
+
* const certDetailsEapTtls = {
|
|
133
|
+
* type: 'EAP-TTLS',
|
|
134
|
+
* caCertificate: '-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----',
|
|
135
|
+
* };
|
|
136
|
+
* await sos.management.network.importCertificate(certDetailsEapTtls);
|
|
137
|
+
*/
|
|
138
|
+
importCertificate(details: CertificateEapDetails): Promise<void>;
|
|
94
139
|
private getMessage;
|
|
95
140
|
}
|
|
@@ -5,6 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const INetworkInfo_1 = require("./INetworkInfo");
|
|
7
7
|
const Validate_1 = __importDefault(require("../../Validate/Validate"));
|
|
8
|
+
const INetwork_1 = require("./INetwork");
|
|
8
9
|
/**
|
|
9
10
|
* 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).
|
|
10
11
|
*
|
|
@@ -116,6 +117,57 @@ class Network {
|
|
|
116
117
|
interfaceName,
|
|
117
118
|
});
|
|
118
119
|
}
|
|
120
|
+
/**
|
|
121
|
+
* 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).
|
|
122
|
+
*
|
|
123
|
+
* :::note
|
|
124
|
+
* - This API supports only PEM formatted certificates.
|
|
125
|
+
* - Only EAP certificates are supported for now.
|
|
126
|
+
* :::
|
|
127
|
+
*
|
|
128
|
+
* @param details The certificate details.
|
|
129
|
+
* @param details.type The type of the certificate is for.
|
|
130
|
+
* @param details.caCertificate The CA certificate in PEM format. Required for 'PEAP' and 'EAP-TTLS'.
|
|
131
|
+
* @param details.clientCertificate The client certificate in PEM format. Required for 'EAP-TLS'.
|
|
132
|
+
* @param details.clientKey The private key for the client certificate in PEM format. Required for 'EAP-TLS'.
|
|
133
|
+
* @param details.clientCertificatePassword The password for the private key, if it's encrypted. Optional.
|
|
134
|
+
* @returns {Promise<void>} A promise that resolves when the certificate is imported.
|
|
135
|
+
* @throws {Error} If the certificate details are invalid.
|
|
136
|
+
* @throws {Error} If the device does not support certificate import.
|
|
137
|
+
* @since 8.3.0
|
|
138
|
+
*
|
|
139
|
+
* @example
|
|
140
|
+
* // Importing an EAP-TLS certificate
|
|
141
|
+
* const certDetails = {
|
|
142
|
+
* type: 'EAP-TLS',
|
|
143
|
+
* caCertificate: '-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----',
|
|
144
|
+
* clientCertificate: '-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----',
|
|
145
|
+
* clientKey: '-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----',
|
|
146
|
+
* clientCertificatePassword: 'your_password', // if the key is encrypted
|
|
147
|
+
* };
|
|
148
|
+
* await sos.management.network.importCertificate(certDetails);
|
|
149
|
+
*
|
|
150
|
+
* // Importing a PEAP certificate
|
|
151
|
+
* const certDetailsEapPeap = {
|
|
152
|
+
* type: 'PEAP',
|
|
153
|
+
* caCertificate: '-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----',
|
|
154
|
+
* };
|
|
155
|
+
* await sos.management.network.importCertificate(certDetailsEapPeap);
|
|
156
|
+
*
|
|
157
|
+
* // Importing an EAP-TTLS certificate
|
|
158
|
+
* const certDetailsEapTtls = {
|
|
159
|
+
* type: 'EAP-TTLS',
|
|
160
|
+
* caCertificate: '-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----',
|
|
161
|
+
* };
|
|
162
|
+
* await sos.management.network.importCertificate(certDetailsEapTtls);
|
|
163
|
+
*/
|
|
164
|
+
async importCertificate(details) {
|
|
165
|
+
(0, Validate_1.default)({ details }).required().object(INetwork_1.VCertificateEapDetails);
|
|
166
|
+
await this.postMessage({
|
|
167
|
+
type: this.getMessage('import_certificate'),
|
|
168
|
+
details,
|
|
169
|
+
});
|
|
170
|
+
}
|
|
119
171
|
getMessage(name) {
|
|
120
172
|
return this.messagePrefix + '.' + name;
|
|
121
173
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Network.js","sourceRoot":"","sources":["../../../../src/FrontApplet/Management/Network/Network.ts"],"names":[],"mappings":";;;;;AACA,iDAQwB;AACxB,uEAA+C;
|
|
1
|
+
{"version":3,"file":"Network.js","sourceRoot":"","sources":["../../../../src/FrontApplet/Management/Network/Network.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,11 +25,29 @@ export interface IScannedDevice {
|
|
|
25
25
|
encrypted: boolean;
|
|
26
26
|
}
|
|
27
27
|
export type WifiEncryptionType = 'OPEN' | 'WEP' | 'WPA2' | 'WPA2_WPA_MIXED' | 'WPA3' | '802.1X_EAP';
|
|
28
|
+
export type EAPMethod = 'PEAP' | 'TLS' | 'TTLS';
|
|
29
|
+
export type EAPPhase2Auth = 'PAP' | 'MSCHAP' | 'MSCHAPV2' | 'GTC';
|
|
28
30
|
export interface IWifiConnectOptions {
|
|
29
31
|
hidden?: boolean;
|
|
30
32
|
securityType?: WifiEncryptionType;
|
|
33
|
+
eap?: {
|
|
34
|
+
method: EAPMethod;
|
|
35
|
+
identity: string;
|
|
36
|
+
anonymousIdentity?: string;
|
|
37
|
+
passphrase: string;
|
|
38
|
+
phase2Auth?: EAPPhase2Auth;
|
|
39
|
+
useCACert?: boolean;
|
|
40
|
+
};
|
|
31
41
|
}
|
|
32
42
|
export declare const VIWifiConnectOptions: {
|
|
33
43
|
hidden: string;
|
|
34
44
|
securityType: string;
|
|
45
|
+
eap: {
|
|
46
|
+
method: string;
|
|
47
|
+
identity: string;
|
|
48
|
+
anonymousIdentity: string;
|
|
49
|
+
passphrase: string;
|
|
50
|
+
phase2Auth: string;
|
|
51
|
+
useCACert: string;
|
|
52
|
+
};
|
|
35
53
|
};
|
|
@@ -4,5 +4,13 @@ exports.VIWifiConnectOptions = void 0;
|
|
|
4
4
|
exports.VIWifiConnectOptions = {
|
|
5
5
|
hidden: '?boolean',
|
|
6
6
|
securityType: '?string',
|
|
7
|
+
eap: {
|
|
8
|
+
method: 'string',
|
|
9
|
+
identity: 'string',
|
|
10
|
+
anonymousIdentity: '?string',
|
|
11
|
+
passphrase: 'string',
|
|
12
|
+
phase2Auth: '?string',
|
|
13
|
+
useCACert: '?boolean',
|
|
14
|
+
},
|
|
7
15
|
};
|
|
8
16
|
//# sourceMappingURL=IWifi.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IWifi.js","sourceRoot":"","sources":["../../../../src/FrontApplet/Management/Wifi/IWifi.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"IWifi.js","sourceRoot":"","sources":["../../../../src/FrontApplet/Management/Wifi/IWifi.ts"],"names":[],"mappings":";;;AAuDa,QAAA,oBAAoB,GAAG;IACnC,MAAM,EAAE,UAAU;IAClB,YAAY,EAAE,SAAS;IACvB,GAAG,EAAE;QACJ,MAAM,EAAE,QAAQ;QAChB,QAAQ,EAAE,QAAQ;QAClB,iBAAiB,EAAE,SAAS;QAC5B,UAAU,EAAE,QAAQ;QACpB,UAAU,EAAE,SAAS;QACrB,SAAS,EAAE,UAAU;KACrB;CACD,CAAC"}
|
|
@@ -134,6 +134,12 @@ export default class Wifi implements IWifi {
|
|
|
134
134
|
* @param options Additional options for the connection.
|
|
135
135
|
* @param options.hidden If the network is hidden, defaults to `false`.
|
|
136
136
|
* @param options.securityType The security type of the network.
|
|
137
|
+
* @param options.eap Authentication details for networks that require EAP.
|
|
138
|
+
* @param options.eap.method The type of EAP authentication to use.
|
|
139
|
+
* @param options.eap.identity Username or identity for authentication.
|
|
140
|
+
* @param options.eap.passphrase Password or passphrase for authentication.
|
|
141
|
+
* @param options.eap.phase2Auth Secondary authentication method, if required by the EAP method. Not needed for TLS.
|
|
142
|
+
* @param options.eap.useCACert Whether to use a CA certificate for authentication. Not needed for TLS.
|
|
137
143
|
*
|
|
138
144
|
* @throws Error If the Wi-Fi state is not in the `client` state.
|
|
139
145
|
* @throws Error If the `ssid` is not a string or is empty.
|
|
@@ -155,6 +161,18 @@ export default class Wifi implements IWifi {
|
|
|
155
161
|
*
|
|
156
162
|
* // To connect to an encrypted Wi-Fi network with WPA2 security
|
|
157
163
|
* await sos.management.wifi.connect('MyEncryptedNetwork', 'my-password', { securityType: 'WPA2' });
|
|
164
|
+
*
|
|
165
|
+
* // To connect to an enterprise Wi-Fi network using EAP
|
|
166
|
+
* await sos.management.wifi.connect('MyEnterpriseNetwork', undefined, {
|
|
167
|
+
* securityType: '802.1X_EAP',
|
|
168
|
+
* eap: {
|
|
169
|
+
* method: 'PEAP',
|
|
170
|
+
* identity: 'my-username',
|
|
171
|
+
* passphrase: 'my-password',
|
|
172
|
+
* phase2Auth: 'MSCHAPV2',
|
|
173
|
+
* useCACert: false,
|
|
174
|
+
* },
|
|
175
|
+
* });
|
|
158
176
|
*/
|
|
159
177
|
connect(ssid: string, password?: string, options?: IWifiConnectOptions): Promise<void>;
|
|
160
178
|
/**
|
|
@@ -174,6 +174,12 @@ class Wifi {
|
|
|
174
174
|
* @param options Additional options for the connection.
|
|
175
175
|
* @param options.hidden If the network is hidden, defaults to `false`.
|
|
176
176
|
* @param options.securityType The security type of the network.
|
|
177
|
+
* @param options.eap Authentication details for networks that require EAP.
|
|
178
|
+
* @param options.eap.method The type of EAP authentication to use.
|
|
179
|
+
* @param options.eap.identity Username or identity for authentication.
|
|
180
|
+
* @param options.eap.passphrase Password or passphrase for authentication.
|
|
181
|
+
* @param options.eap.phase2Auth Secondary authentication method, if required by the EAP method. Not needed for TLS.
|
|
182
|
+
* @param options.eap.useCACert Whether to use a CA certificate for authentication. Not needed for TLS.
|
|
177
183
|
*
|
|
178
184
|
* @throws Error If the Wi-Fi state is not in the `client` state.
|
|
179
185
|
* @throws Error If the `ssid` is not a string or is empty.
|
|
@@ -195,6 +201,18 @@ class Wifi {
|
|
|
195
201
|
*
|
|
196
202
|
* // To connect to an encrypted Wi-Fi network with WPA2 security
|
|
197
203
|
* await sos.management.wifi.connect('MyEncryptedNetwork', 'my-password', { securityType: 'WPA2' });
|
|
204
|
+
*
|
|
205
|
+
* // To connect to an enterprise Wi-Fi network using EAP
|
|
206
|
+
* await sos.management.wifi.connect('MyEnterpriseNetwork', undefined, {
|
|
207
|
+
* securityType: '802.1X_EAP',
|
|
208
|
+
* eap: {
|
|
209
|
+
* method: 'PEAP',
|
|
210
|
+
* identity: 'my-username',
|
|
211
|
+
* passphrase: 'my-password',
|
|
212
|
+
* phase2Auth: 'MSCHAPV2',
|
|
213
|
+
* useCACert: false,
|
|
214
|
+
* },
|
|
215
|
+
* });
|
|
198
216
|
*/
|
|
199
217
|
async connect(ssid, password, options = {}) {
|
|
200
218
|
(0, Validate_1.default)({ ssid }).required().string();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Wifi.js","sourceRoot":"","sources":["../../../../src/FrontApplet/Management/Wifi/Wifi.ts"],"names":[],"mappings":";;;;;AAAA,mCAAsC;AAEtC,6CAAuD;AACvD,uEAA+C;AAE/C,mCAA2F;AAE3F;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAqB,IAAI;IAOf;IACA;IAPF,MAAM,CAAC,cAAc,GAAW,MAAM,CAAC;IAEtC,YAAY,CAAe;IAEnC,gBAAgB;IAChB,YACS,aAAqB,EACrB,WAA8B;QAD9B,kBAAa,GAAb,aAAa,CAAQ;QACrB,gBAAW,GAAX,WAAW,CAAmB;QAEtC,IAAI,CAAC,YAAY,GAAG,IAAI,qBAAY,EAAE,CAAC;IACxC,CAAC;IAED;;;;;;;;;;;;OAYG;IACI,KAAK,CAAC,eAAe;QAC3B,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC;YAChD,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;SACnC,CAAC,CAAC;QACH,OAAO,aAAa,CAAC;IACtB,CAAC;IAED;;;;;;OAMG;IACI,KAAK,CAAC,YAAY;QACxB,MAAM,IAAI,CAAC,WAAW,CAAC;YACtB,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;SAC/B,CAAC,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,WAAW;QACvB,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC;YAClD,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC;SACtC,CAAC,CAAC;QACH,OAAO,eAAe,CAAC;IACxB,CAAC;IAED;;;;;;;;;;;;;;;;OAgBG;IACI,KAAK,CAAC,QAAQ,CAAC,IAAY,EAAE,QAAgB;QACnD,IAAA,kBAAQ,EAAC,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,CAAC;QACvC,IAAA,kBAAQ,EAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,CAAC;QAC3C,MAAM,IAAI,CAAC,WAAW,CAAC;YACtB,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;YAClC,IAAI;YACJ,QAAQ;SACR,CAAC,CAAC;IACJ,CAAC;IAED;;;;;;;;;;;OAWG;IACI,KAAK,CAAC,OAAO;QACnB,MAAM,IAAI,CAAC,WAAW,CAAC;YACtB,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;SAChC,CAAC,CAAC;IACJ,CAAC;IAED;;;;;;;;;;;;OAYG;IACI,KAAK,CAAC,cAAc;QAC1B,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC;YACzC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC;SACzC,CAAC,CAAC;QACH,OAAO,UAAU,IAAI,IAAI,CAAC;IAC3B,CAAC;IAED
|
|
1
|
+
{"version":3,"file":"Wifi.js","sourceRoot":"","sources":["../../../../src/FrontApplet/Management/Wifi/Wifi.ts"],"names":[],"mappings":"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"}
|