@elizaos/capacitor-wifi 2.0.0-beta.1
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/android/build.gradle +27 -0
- package/android/src/main/AndroidManifest.xml +14 -0
- package/android/src/main/java/ai/eliza/plugins/wifi/WiFiPlugin.kt +301 -0
- package/dist/esm/definitions.d.ts +84 -0
- package/dist/esm/definitions.d.ts.map +1 -0
- package/dist/esm/definitions.js +10 -0
- package/dist/esm/definitions.js.map +1 -0
- package/dist/esm/index.d.ts +4 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +7 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/web.d.ts +17 -0
- package/dist/esm/web.d.ts.map +1 -0
- package/dist/esm/web.js +39 -0
- package/dist/esm/web.js.map +1 -0
- package/dist/plugin.cjs.js +54 -0
- package/dist/plugin.cjs.js.map +1 -0
- package/dist/plugin.js +57 -0
- package/dist/plugin.js.map +1 -0
- package/package.json +57 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
ext {
|
|
2
|
+
junitVersion = project.hasProperty('junitVersion') ? rootProject.ext.junitVersion : '4.13.2'
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
apply plugin: 'com.android.library'
|
|
6
|
+
android {
|
|
7
|
+
namespace = "ai.eliza.plugins.wifi"
|
|
8
|
+
compileSdk project.hasProperty('compileSdkVersion') ? rootProject.ext.compileSdkVersion : 34
|
|
9
|
+
defaultConfig {
|
|
10
|
+
minSdkVersion project.hasProperty('minSdkVersion') ? rootProject.ext.minSdkVersion : 23
|
|
11
|
+
targetSdkVersion project.hasProperty('targetSdkVersion') ? rootProject.ext.targetSdkVersion : 34
|
|
12
|
+
}
|
|
13
|
+
compileOptions {
|
|
14
|
+
sourceCompatibility JavaVersion.VERSION_17
|
|
15
|
+
targetCompatibility JavaVersion.VERSION_17
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
repositories {
|
|
20
|
+
google()
|
|
21
|
+
maven { url = uri(rootProject.ext.has('mavenCentralMirrorUrl') ? rootProject.ext.mavenCentralMirrorUrl : 'https://repo.maven.apache.org/maven2') }
|
|
22
|
+
mavenCentral()
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
dependencies {
|
|
26
|
+
implementation project(':capacitor-android')
|
|
27
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
|
2
|
+
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
|
3
|
+
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
|
|
4
|
+
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
|
|
5
|
+
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
|
6
|
+
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
|
|
7
|
+
<!--
|
|
8
|
+
ACCESS_FINE_LOCATION is required for `WifiManager.scanResults` on
|
|
9
|
+
API 26+ — without a granted runtime location permission the platform
|
|
10
|
+
returns an empty list. Declared as normal `uses-permission`; runtime
|
|
11
|
+
grant is the responsibility of the host app at first scan.
|
|
12
|
+
-->
|
|
13
|
+
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
|
|
14
|
+
</manifest>
|
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
package ai.eliza.plugins.wifi
|
|
2
|
+
|
|
3
|
+
import android.Manifest
|
|
4
|
+
import android.content.Context
|
|
5
|
+
import android.net.ConnectivityManager
|
|
6
|
+
import android.net.NetworkRequest
|
|
7
|
+
import android.net.wifi.ScanResult
|
|
8
|
+
import android.net.wifi.WifiConfiguration
|
|
9
|
+
import android.net.wifi.WifiManager
|
|
10
|
+
import android.net.wifi.WifiNetworkSpecifier
|
|
11
|
+
import android.net.wifi.WifiNetworkSuggestion
|
|
12
|
+
import android.os.Build
|
|
13
|
+
import com.getcapacitor.JSArray
|
|
14
|
+
import com.getcapacitor.JSObject
|
|
15
|
+
import com.getcapacitor.Plugin
|
|
16
|
+
import com.getcapacitor.PluginCall
|
|
17
|
+
import com.getcapacitor.PluginMethod
|
|
18
|
+
import com.getcapacitor.annotation.CapacitorPlugin
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Wi-Fi bridge for ElizaOS.
|
|
22
|
+
*
|
|
23
|
+
* Exposes a small set of methods over the standard `WifiManager` /
|
|
24
|
+
* `ConnectivityManager` APIs. The connect path branches on API level:
|
|
25
|
+
* - API 29+ (Android 10+): `WifiNetworkSuggestion` is the supported way to
|
|
26
|
+
* request a connection without holding a system-signature permission.
|
|
27
|
+
* Legacy `WifiConfiguration.addNetwork` is deprecated and returns -1.
|
|
28
|
+
* - API 23–28: legacy `WifiConfiguration` + `enableNetwork` is still
|
|
29
|
+
* permitted for system / privileged callers like Eliza.
|
|
30
|
+
*/
|
|
31
|
+
@CapacitorPlugin(name = "ElizaWiFi")
|
|
32
|
+
class WiFiPlugin : Plugin() {
|
|
33
|
+
private val wifiManager: WifiManager?
|
|
34
|
+
get() = context.applicationContext
|
|
35
|
+
.getSystemService(Context.WIFI_SERVICE) as? WifiManager
|
|
36
|
+
|
|
37
|
+
private val connectivityManager: ConnectivityManager?
|
|
38
|
+
get() = context.applicationContext
|
|
39
|
+
.getSystemService(Context.CONNECTIVITY_SERVICE) as? ConnectivityManager
|
|
40
|
+
|
|
41
|
+
/** Cache of the last scan completion timestamp for the `maxAge` shortcut. */
|
|
42
|
+
private var lastScanCompletedAtMs: Long = 0L
|
|
43
|
+
|
|
44
|
+
@PluginMethod
|
|
45
|
+
fun getWifiState(call: PluginCall) {
|
|
46
|
+
val manager = wifiManager
|
|
47
|
+
if (manager == null) {
|
|
48
|
+
call.reject("Wi-Fi service is unavailable on this device")
|
|
49
|
+
return
|
|
50
|
+
}
|
|
51
|
+
val info = manager.connectionInfo
|
|
52
|
+
val connected = info != null && info.networkId != -1
|
|
53
|
+
val result = JSObject()
|
|
54
|
+
result.put("enabled", manager.isWifiEnabled)
|
|
55
|
+
result.put("connected", connected)
|
|
56
|
+
if (connected && info != null) {
|
|
57
|
+
result.put("rssi", info.rssi)
|
|
58
|
+
} else {
|
|
59
|
+
result.put("rssi", JSObject.NULL)
|
|
60
|
+
}
|
|
61
|
+
call.resolve(result)
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
@PluginMethod
|
|
65
|
+
fun getConnectedNetwork(call: PluginCall) {
|
|
66
|
+
if (!hasPermission(Manifest.permission.ACCESS_WIFI_STATE)) {
|
|
67
|
+
call.reject("ACCESS_WIFI_STATE permission is required")
|
|
68
|
+
return
|
|
69
|
+
}
|
|
70
|
+
val manager = wifiManager
|
|
71
|
+
if (manager == null) {
|
|
72
|
+
call.reject("Wi-Fi service is unavailable on this device")
|
|
73
|
+
return
|
|
74
|
+
}
|
|
75
|
+
val info = manager.connectionInfo
|
|
76
|
+
val result = JSObject()
|
|
77
|
+
if (info == null || info.networkId == -1) {
|
|
78
|
+
result.put("network", JSObject.NULL)
|
|
79
|
+
call.resolve(result)
|
|
80
|
+
return
|
|
81
|
+
}
|
|
82
|
+
val network = JSObject()
|
|
83
|
+
network.put("ssid", trimQuotes(info.ssid))
|
|
84
|
+
network.put("bssid", info.bssid ?: "")
|
|
85
|
+
network.put("rssi", info.rssi)
|
|
86
|
+
network.put("frequency", info.frequency)
|
|
87
|
+
network.put("capabilities", "")
|
|
88
|
+
network.put("secured", false)
|
|
89
|
+
result.put("network", network)
|
|
90
|
+
call.resolve(result)
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
@PluginMethod
|
|
94
|
+
fun listAvailableNetworks(call: PluginCall) {
|
|
95
|
+
if (!hasPermission(Manifest.permission.ACCESS_WIFI_STATE)) {
|
|
96
|
+
call.reject("ACCESS_WIFI_STATE permission is required")
|
|
97
|
+
return
|
|
98
|
+
}
|
|
99
|
+
// scanResults is gated behind ACCESS_FINE_LOCATION on API 26+. Reject
|
|
100
|
+
// with a clear message rather than letting the platform return an
|
|
101
|
+
// empty list — callers can prompt for location and retry.
|
|
102
|
+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O &&
|
|
103
|
+
!hasPermission(Manifest.permission.ACCESS_FINE_LOCATION)
|
|
104
|
+
) {
|
|
105
|
+
call.reject("ACCESS_FINE_LOCATION required for Wi-Fi scans on API 26+")
|
|
106
|
+
return
|
|
107
|
+
}
|
|
108
|
+
val manager = wifiManager
|
|
109
|
+
if (manager == null) {
|
|
110
|
+
call.reject("Wi-Fi service is unavailable on this device")
|
|
111
|
+
return
|
|
112
|
+
}
|
|
113
|
+
val maxAge = call.getInt("maxAge") ?: 30_000
|
|
114
|
+
val limit = call.getInt("limit") ?: 0
|
|
115
|
+
val now = System.currentTimeMillis()
|
|
116
|
+
if (lastScanCompletedAtMs == 0L || now - lastScanCompletedAtMs > maxAge) {
|
|
117
|
+
// startScan is best-effort and rate-limited on modern Android; the
|
|
118
|
+
// returned boolean is informational only.
|
|
119
|
+
manager.startScan()
|
|
120
|
+
lastScanCompletedAtMs = now
|
|
121
|
+
}
|
|
122
|
+
val seenSsids = HashSet<String>()
|
|
123
|
+
val networks = JSArray()
|
|
124
|
+
val scanResults: List<ScanResult> = manager.scanResults ?: emptyList()
|
|
125
|
+
// Sort by signal strength (closest / strongest first) for stable UI ordering.
|
|
126
|
+
val sorted = scanResults.sortedByDescending { it.level }
|
|
127
|
+
for (result in sorted) {
|
|
128
|
+
val ssid = result.SSID ?: ""
|
|
129
|
+
if (ssid.isEmpty()) continue
|
|
130
|
+
if (!seenSsids.add(ssid)) continue
|
|
131
|
+
val capabilities = result.capabilities ?: ""
|
|
132
|
+
val entry = JSObject()
|
|
133
|
+
entry.put("ssid", ssid)
|
|
134
|
+
entry.put("bssid", result.BSSID ?: "")
|
|
135
|
+
entry.put("rssi", result.level)
|
|
136
|
+
entry.put("frequency", result.frequency)
|
|
137
|
+
entry.put("capabilities", capabilities)
|
|
138
|
+
entry.put("secured", isSecured(capabilities))
|
|
139
|
+
networks.put(entry)
|
|
140
|
+
if (limit > 0 && networks.length() >= limit) break
|
|
141
|
+
}
|
|
142
|
+
val response = JSObject()
|
|
143
|
+
response.put("networks", networks)
|
|
144
|
+
call.resolve(response)
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
@PluginMethod
|
|
148
|
+
fun connectToNetwork(call: PluginCall) {
|
|
149
|
+
if (!hasPermission(Manifest.permission.CHANGE_WIFI_STATE)) {
|
|
150
|
+
call.reject("CHANGE_WIFI_STATE permission is required")
|
|
151
|
+
return
|
|
152
|
+
}
|
|
153
|
+
val ssid = call.getString("ssid")?.trim()
|
|
154
|
+
if (ssid.isNullOrEmpty()) {
|
|
155
|
+
call.reject("ssid is required")
|
|
156
|
+
return
|
|
157
|
+
}
|
|
158
|
+
val password = call.getString("password")
|
|
159
|
+
val hidden = call.getBoolean("hidden") ?: false
|
|
160
|
+
val manager = wifiManager
|
|
161
|
+
if (manager == null) {
|
|
162
|
+
call.reject("Wi-Fi service is unavailable on this device")
|
|
163
|
+
return
|
|
164
|
+
}
|
|
165
|
+
val ok = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
|
166
|
+
connectViaSuggestion(manager, ssid, password, hidden)
|
|
167
|
+
} else {
|
|
168
|
+
@Suppress("DEPRECATION")
|
|
169
|
+
connectViaLegacyConfig(manager, ssid, password, hidden)
|
|
170
|
+
}
|
|
171
|
+
val response = JSObject()
|
|
172
|
+
response.put("success", ok)
|
|
173
|
+
if (!ok) {
|
|
174
|
+
response.put("message", "Failed to request connection to $ssid")
|
|
175
|
+
}
|
|
176
|
+
call.resolve(response)
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
@PluginMethod
|
|
180
|
+
fun disconnectFromNetwork(call: PluginCall) {
|
|
181
|
+
if (!hasPermission(Manifest.permission.CHANGE_WIFI_STATE)) {
|
|
182
|
+
call.reject("CHANGE_WIFI_STATE permission is required")
|
|
183
|
+
return
|
|
184
|
+
}
|
|
185
|
+
val manager = wifiManager
|
|
186
|
+
if (manager == null) {
|
|
187
|
+
call.reject("Wi-Fi service is unavailable on this device")
|
|
188
|
+
return
|
|
189
|
+
}
|
|
190
|
+
@Suppress("DEPRECATION")
|
|
191
|
+
val ok = manager.disconnect()
|
|
192
|
+
val response = JSObject()
|
|
193
|
+
response.put("success", ok)
|
|
194
|
+
if (!ok) {
|
|
195
|
+
response.put("message", "WifiManager.disconnect() returned false")
|
|
196
|
+
}
|
|
197
|
+
call.resolve(response)
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
// -----------------------------------------------------------------------
|
|
201
|
+
// Helpers
|
|
202
|
+
// -----------------------------------------------------------------------
|
|
203
|
+
|
|
204
|
+
/**
|
|
205
|
+
* Modern (API 29+) connect path. Adds a network suggestion plus a
|
|
206
|
+
* matching `NetworkRequest` so the system attempts a connection on our
|
|
207
|
+
* behalf. Returns true when the suggestion was accepted; the actual
|
|
208
|
+
* connection state should be observed via `getConnectedNetwork`.
|
|
209
|
+
*/
|
|
210
|
+
private fun connectViaSuggestion(
|
|
211
|
+
manager: WifiManager,
|
|
212
|
+
ssid: String,
|
|
213
|
+
password: String?,
|
|
214
|
+
hidden: Boolean,
|
|
215
|
+
): Boolean {
|
|
216
|
+
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) return false
|
|
217
|
+
val suggestionBuilder = WifiNetworkSuggestion.Builder()
|
|
218
|
+
.setSsid(ssid)
|
|
219
|
+
.setIsHiddenSsid(hidden)
|
|
220
|
+
if (!password.isNullOrEmpty()) {
|
|
221
|
+
suggestionBuilder.setWpa2Passphrase(password)
|
|
222
|
+
}
|
|
223
|
+
val suggestion = suggestionBuilder.build()
|
|
224
|
+
// Replace any prior suggestions for the same SSID before re-adding.
|
|
225
|
+
manager.removeNetworkSuggestions(listOf(suggestion))
|
|
226
|
+
val addStatus = manager.addNetworkSuggestions(listOf(suggestion))
|
|
227
|
+
if (addStatus != WifiManager.STATUS_NETWORK_SUGGESTIONS_SUCCESS) {
|
|
228
|
+
return false
|
|
229
|
+
}
|
|
230
|
+
val specifierBuilder = WifiNetworkSpecifier.Builder()
|
|
231
|
+
.setSsid(ssid)
|
|
232
|
+
.setIsHiddenSsid(hidden)
|
|
233
|
+
if (!password.isNullOrEmpty()) {
|
|
234
|
+
specifierBuilder.setWpa2Passphrase(password)
|
|
235
|
+
}
|
|
236
|
+
val request = NetworkRequest.Builder()
|
|
237
|
+
.addTransportType(android.net.NetworkCapabilities.TRANSPORT_WIFI)
|
|
238
|
+
.setNetworkSpecifier(specifierBuilder.build())
|
|
239
|
+
.build()
|
|
240
|
+
connectivityManager?.requestNetwork(request, NoOpNetworkCallback)
|
|
241
|
+
return true
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
/**
|
|
245
|
+
* Legacy connect path for API 23–28. Uses the deprecated
|
|
246
|
+
* `WifiConfiguration` API which still works for system / privileged
|
|
247
|
+
* callers (Eliza ships as a privileged system app).
|
|
248
|
+
*/
|
|
249
|
+
@Suppress("DEPRECATION")
|
|
250
|
+
private fun connectViaLegacyConfig(
|
|
251
|
+
manager: WifiManager,
|
|
252
|
+
ssid: String,
|
|
253
|
+
password: String?,
|
|
254
|
+
hidden: Boolean,
|
|
255
|
+
): Boolean {
|
|
256
|
+
val config = WifiConfiguration()
|
|
257
|
+
config.SSID = "\"$ssid\""
|
|
258
|
+
config.hiddenSSID = hidden
|
|
259
|
+
if (password.isNullOrEmpty()) {
|
|
260
|
+
config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE)
|
|
261
|
+
} else {
|
|
262
|
+
config.preSharedKey = "\"$password\""
|
|
263
|
+
config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK)
|
|
264
|
+
}
|
|
265
|
+
val networkId = manager.addNetwork(config)
|
|
266
|
+
if (networkId == -1) return false
|
|
267
|
+
manager.disconnect()
|
|
268
|
+
val enabled = manager.enableNetwork(networkId, true)
|
|
269
|
+
manager.reconnect()
|
|
270
|
+
return enabled
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
/**
|
|
274
|
+
* `WifiInfo.getSsid()` returns the SSID wrapped in quotes
|
|
275
|
+
* (e.g. `"home-wifi"`). Strip them for display.
|
|
276
|
+
*/
|
|
277
|
+
private fun trimQuotes(ssid: String?): String {
|
|
278
|
+
if (ssid.isNullOrEmpty()) return ""
|
|
279
|
+
if (ssid.length >= 2 && ssid.startsWith("\"") && ssid.endsWith("\"")) {
|
|
280
|
+
return ssid.substring(1, ssid.length - 1)
|
|
281
|
+
}
|
|
282
|
+
return ssid
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
/**
|
|
286
|
+
* Treat any capability string mentioning a security suite as "secured".
|
|
287
|
+
* Open networks report capabilities like "[ESS]" with no auth marker.
|
|
288
|
+
*/
|
|
289
|
+
private fun isSecured(capabilities: String): Boolean {
|
|
290
|
+
if (capabilities.isEmpty()) return false
|
|
291
|
+
val upper = capabilities.uppercase()
|
|
292
|
+
return upper.contains("WPA") ||
|
|
293
|
+
upper.contains("WEP") ||
|
|
294
|
+
upper.contains("PSK") ||
|
|
295
|
+
upper.contains("EAP") ||
|
|
296
|
+
upper.contains("SAE")
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
/** No-op callback for the `requestNetwork` call — connection state is queried separately. */
|
|
300
|
+
private object NoOpNetworkCallback : ConnectivityManager.NetworkCallback()
|
|
301
|
+
}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type definitions for the @elizaos/capacitor-wifi bridge.
|
|
3
|
+
*
|
|
4
|
+
* The native side is implemented in Kotlin under
|
|
5
|
+
* android/src/main/java/ai/eliza/plugins/wifi/WiFiPlugin.kt and is registered
|
|
6
|
+
* with Capacitor as `ElizaWiFi`. The web fallback in `./web.ts` resolves
|
|
7
|
+
* with empty data and a warning so type-only consumers compile cleanly.
|
|
8
|
+
*/
|
|
9
|
+
/** Information about a single Wi-Fi network (scan result or active connection). */
|
|
10
|
+
export interface WiFiNetwork {
|
|
11
|
+
/** Service Set Identifier — display name of the network. May be empty when hidden. */
|
|
12
|
+
ssid: string;
|
|
13
|
+
/** BSSID — MAC of the access point. */
|
|
14
|
+
bssid: string;
|
|
15
|
+
/** Signal strength in dBm (typical range -30 strongest to -90 weakest). */
|
|
16
|
+
rssi: number;
|
|
17
|
+
/** Channel frequency in MHz (e.g. 2412, 5180). */
|
|
18
|
+
frequency: number;
|
|
19
|
+
/**
|
|
20
|
+
* Capability descriptor reported by `WifiManager.scanResults` (e.g.
|
|
21
|
+
* "[WPA2-PSK-CCMP][ESS]"). Empty for the active connection on Android,
|
|
22
|
+
* which does not expose capabilities for the connected network.
|
|
23
|
+
*/
|
|
24
|
+
capabilities: string;
|
|
25
|
+
/** Whether the network requires a password / key. */
|
|
26
|
+
secured: boolean;
|
|
27
|
+
}
|
|
28
|
+
/** Optional filters/tuning passed to `listAvailableNetworks`. */
|
|
29
|
+
export interface ListNetworksOptions {
|
|
30
|
+
/**
|
|
31
|
+
* If a fresh scan was completed within `maxAge` milliseconds, reuse those
|
|
32
|
+
* results instead of triggering a new `startScan`. Defaults to 30000.
|
|
33
|
+
*/
|
|
34
|
+
maxAge?: number;
|
|
35
|
+
/** Cap the number of networks returned (after de-duplication by SSID). */
|
|
36
|
+
limit?: number;
|
|
37
|
+
}
|
|
38
|
+
/** Parameters for `connectToNetwork`. */
|
|
39
|
+
export interface ConnectOptions {
|
|
40
|
+
/** Target SSID. Required. */
|
|
41
|
+
ssid: string;
|
|
42
|
+
/** Password / passphrase. Omit for open networks. */
|
|
43
|
+
password?: string;
|
|
44
|
+
/** Whether the SSID is hidden / not broadcast. Defaults to false. */
|
|
45
|
+
hidden?: boolean;
|
|
46
|
+
}
|
|
47
|
+
/** Result returned by `getWifiState`. */
|
|
48
|
+
export interface WifiStateResult {
|
|
49
|
+
/** Whether the Wi-Fi radio is enabled. */
|
|
50
|
+
enabled: boolean;
|
|
51
|
+
/** Whether a network is currently connected. */
|
|
52
|
+
connected: boolean;
|
|
53
|
+
/** Signal strength of the active connection in dBm, when connected. */
|
|
54
|
+
rssi: number | null;
|
|
55
|
+
}
|
|
56
|
+
/** Result returned by `getConnectedNetwork`. */
|
|
57
|
+
export interface ConnectedNetworkResult {
|
|
58
|
+
/** The active connection details, or null when not connected. */
|
|
59
|
+
network: WiFiNetwork | null;
|
|
60
|
+
}
|
|
61
|
+
/** Result returned by `listAvailableNetworks`. */
|
|
62
|
+
export interface ListNetworksResult {
|
|
63
|
+
networks: WiFiNetwork[];
|
|
64
|
+
}
|
|
65
|
+
/** Result returned by `connectToNetwork` and `disconnectFromNetwork`. */
|
|
66
|
+
export interface ConnectResult {
|
|
67
|
+
success: boolean;
|
|
68
|
+
/** Optional human-readable message, populated on failure. */
|
|
69
|
+
message?: string;
|
|
70
|
+
}
|
|
71
|
+
/** Public Capacitor plugin contract — implemented natively on Android, stubbed on web. */
|
|
72
|
+
export interface WiFiPlugin {
|
|
73
|
+
/** Read radio + active connection state. */
|
|
74
|
+
getWifiState(): Promise<WifiStateResult>;
|
|
75
|
+
/** Read active connection details. */
|
|
76
|
+
getConnectedNetwork(): Promise<ConnectedNetworkResult>;
|
|
77
|
+
/** Trigger a scan (or reuse a recent one) and return nearby networks. */
|
|
78
|
+
listAvailableNetworks(options?: ListNetworksOptions): Promise<ListNetworksResult>;
|
|
79
|
+
/** Best-effort connect using the appropriate per-API path. */
|
|
80
|
+
connectToNetwork(options: ConnectOptions): Promise<ConnectResult>;
|
|
81
|
+
/** Disconnect the currently connected network. */
|
|
82
|
+
disconnectFromNetwork(): Promise<ConnectResult>;
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=definitions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"definitions.d.ts","sourceRoot":"","sources":["../../src/definitions.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,mFAAmF;AACnF,MAAM,WAAW,WAAW;IAC1B,sFAAsF;IACtF,IAAI,EAAE,MAAM,CAAC;IACb,uCAAuC;IACvC,KAAK,EAAE,MAAM,CAAC;IACd,2EAA2E;IAC3E,IAAI,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,SAAS,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,YAAY,EAAE,MAAM,CAAC;IACrB,qDAAqD;IACrD,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,iEAAiE;AACjE,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0EAA0E;IAC1E,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,yCAAyC;AACzC,MAAM,WAAW,cAAc;IAC7B,6BAA6B;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,qDAAqD;IACrD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,qEAAqE;IACrE,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,yCAAyC;AACzC,MAAM,WAAW,eAAe;IAC9B,0CAA0C;IAC1C,OAAO,EAAE,OAAO,CAAC;IACjB,gDAAgD;IAChD,SAAS,EAAE,OAAO,CAAC;IACnB,uEAAuE;IACvE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB;AAED,gDAAgD;AAChD,MAAM,WAAW,sBAAsB;IACrC,iEAAiE;IACjE,OAAO,EAAE,WAAW,GAAG,IAAI,CAAC;CAC7B;AAED,kDAAkD;AAClD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,WAAW,EAAE,CAAC;CACzB;AAED,yEAAyE;AACzE,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,6DAA6D;IAC7D,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,0FAA0F;AAC1F,MAAM,WAAW,UAAU;IACzB,4CAA4C;IAC5C,YAAY,IAAI,OAAO,CAAC,eAAe,CAAC,CAAC;IACzC,sCAAsC;IACtC,mBAAmB,IAAI,OAAO,CAAC,sBAAsB,CAAC,CAAC;IACvD,yEAAyE;IACzE,qBAAqB,CACnB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC/B,8DAA8D;IAC9D,gBAAgB,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IAClE,kDAAkD;IAClD,qBAAqB,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC;CACjD"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type definitions for the @elizaos/capacitor-wifi bridge.
|
|
3
|
+
*
|
|
4
|
+
* The native side is implemented in Kotlin under
|
|
5
|
+
* android/src/main/java/ai/eliza/plugins/wifi/WiFiPlugin.kt and is registered
|
|
6
|
+
* with Capacitor as `ElizaWiFi`. The web fallback in `./web.ts` resolves
|
|
7
|
+
* with empty data and a warning so type-only consumers compile cleanly.
|
|
8
|
+
*/
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=definitions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../src/definitions.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD,cAAc,eAAe,CAAC;AAI9B,eAAO,MAAM,IAAI,YAEf,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAIjD,cAAc,eAAe,CAAC;AAE9B,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;AAEnE,MAAM,CAAC,MAAM,IAAI,GAAG,cAAc,CAAa,WAAW,EAAE;IAC1D,GAAG,EAAE,OAAO;CACb,CAAC,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { WebPlugin } from "@capacitor/core";
|
|
2
|
+
import type { ConnectedNetworkResult, ConnectOptions, ConnectResult, ListNetworksOptions, ListNetworksResult, WiFiPlugin, WifiStateResult } from "./definitions";
|
|
3
|
+
/**
|
|
4
|
+
* Web fallback — every method resolves with empty / disabled data so the
|
|
5
|
+
* full TypeScript interface is satisfied without throwing during normal
|
|
6
|
+
* desktop or browser dev sessions. `connectToNetwork` and
|
|
7
|
+
* `disconnectFromNetwork` resolve with `{ success: false }` because there is
|
|
8
|
+
* no meaningful action to take on the web side.
|
|
9
|
+
*/
|
|
10
|
+
export declare class WiFiWeb extends WebPlugin implements WiFiPlugin {
|
|
11
|
+
getWifiState(): Promise<WifiStateResult>;
|
|
12
|
+
getConnectedNetwork(): Promise<ConnectedNetworkResult>;
|
|
13
|
+
listAvailableNetworks(_options?: ListNetworksOptions): Promise<ListNetworksResult>;
|
|
14
|
+
connectToNetwork(_options: ConnectOptions): Promise<ConnectResult>;
|
|
15
|
+
disconnectFromNetwork(): Promise<ConnectResult>;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=web.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web.d.ts","sourceRoot":"","sources":["../../src/web.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,KAAK,EACV,sBAAsB,EACtB,cAAc,EACd,aAAa,EACb,mBAAmB,EACnB,kBAAkB,EAClB,UAAU,EACV,eAAe,EAChB,MAAM,eAAe,CAAC;AAWvB;;;;;;GAMG;AACH,qBAAa,OAAQ,SAAQ,SAAU,YAAW,UAAU;IACpD,YAAY,IAAI,OAAO,CAAC,eAAe,CAAC;IAKxC,mBAAmB,IAAI,OAAO,CAAC,sBAAsB,CAAC;IAKtD,qBAAqB,CACzB,QAAQ,CAAC,EAAE,mBAAmB,GAC7B,OAAO,CAAC,kBAAkB,CAAC;IAKxB,gBAAgB,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;IAKlE,qBAAqB,IAAI,OAAO,CAAC,aAAa,CAAC;CAItD"}
|
package/dist/esm/web.js
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { WebPlugin } from "@capacitor/core";
|
|
2
|
+
const UNAVAILABLE_MESSAGE = "Wi-Fi controls are only available on Android.";
|
|
3
|
+
let warned = false;
|
|
4
|
+
function warnOnce() {
|
|
5
|
+
if (warned)
|
|
6
|
+
return;
|
|
7
|
+
warned = true;
|
|
8
|
+
console.warn(`[ElizaWiFi] ${UNAVAILABLE_MESSAGE}`);
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Web fallback — every method resolves with empty / disabled data so the
|
|
12
|
+
* full TypeScript interface is satisfied without throwing during normal
|
|
13
|
+
* desktop or browser dev sessions. `connectToNetwork` and
|
|
14
|
+
* `disconnectFromNetwork` resolve with `{ success: false }` because there is
|
|
15
|
+
* no meaningful action to take on the web side.
|
|
16
|
+
*/
|
|
17
|
+
export class WiFiWeb extends WebPlugin {
|
|
18
|
+
async getWifiState() {
|
|
19
|
+
warnOnce();
|
|
20
|
+
return { enabled: false, connected: false, rssi: null };
|
|
21
|
+
}
|
|
22
|
+
async getConnectedNetwork() {
|
|
23
|
+
warnOnce();
|
|
24
|
+
return { network: null };
|
|
25
|
+
}
|
|
26
|
+
async listAvailableNetworks(_options) {
|
|
27
|
+
warnOnce();
|
|
28
|
+
return { networks: [] };
|
|
29
|
+
}
|
|
30
|
+
async connectToNetwork(_options) {
|
|
31
|
+
warnOnce();
|
|
32
|
+
return { success: false, message: UNAVAILABLE_MESSAGE };
|
|
33
|
+
}
|
|
34
|
+
async disconnectFromNetwork() {
|
|
35
|
+
warnOnce();
|
|
36
|
+
return { success: false, message: UNAVAILABLE_MESSAGE };
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=web.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web.js","sourceRoot":"","sources":["../../src/web.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAY5C,MAAM,mBAAmB,GAAG,+CAA+C,CAAC;AAE5E,IAAI,MAAM,GAAG,KAAK,CAAC;AACnB,SAAS,QAAQ;IACf,IAAI,MAAM;QAAE,OAAO;IACnB,MAAM,GAAG,IAAI,CAAC;IACd,OAAO,CAAC,IAAI,CAAC,eAAe,mBAAmB,EAAE,CAAC,CAAC;AACrD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,OAAO,OAAQ,SAAQ,SAAS;IACpC,KAAK,CAAC,YAAY;QAChB,QAAQ,EAAE,CAAC;QACX,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC1D,CAAC;IAED,KAAK,CAAC,mBAAmB;QACvB,QAAQ,EAAE,CAAC;QACX,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,qBAAqB,CACzB,QAA8B;QAE9B,QAAQ,EAAE,CAAC;QACX,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,QAAwB;QAC7C,QAAQ,EAAE,CAAC;QACX,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC;IAC1D,CAAC;IAED,KAAK,CAAC,qBAAqB;QACzB,QAAQ,EAAE,CAAC;QACX,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,mBAAmB,EAAE,CAAC;IAC1D,CAAC;CACF"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var core = require('@capacitor/core');
|
|
4
|
+
|
|
5
|
+
const loadWeb = () => Promise.resolve().then(function () { return web; }).then((m) => new m.WiFiWeb());
|
|
6
|
+
const WiFi = core.registerPlugin("ElizaWiFi", {
|
|
7
|
+
web: loadWeb,
|
|
8
|
+
});
|
|
9
|
+
|
|
10
|
+
const UNAVAILABLE_MESSAGE = "Wi-Fi controls are only available on Android.";
|
|
11
|
+
let warned = false;
|
|
12
|
+
function warnOnce() {
|
|
13
|
+
if (warned)
|
|
14
|
+
return;
|
|
15
|
+
warned = true;
|
|
16
|
+
console.warn(`[ElizaWiFi] ${UNAVAILABLE_MESSAGE}`);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Web fallback — every method resolves with empty / disabled data so the
|
|
20
|
+
* full TypeScript interface is satisfied without throwing during normal
|
|
21
|
+
* desktop or browser dev sessions. `connectToNetwork` and
|
|
22
|
+
* `disconnectFromNetwork` resolve with `{ success: false }` because there is
|
|
23
|
+
* no meaningful action to take on the web side.
|
|
24
|
+
*/
|
|
25
|
+
class WiFiWeb extends core.WebPlugin {
|
|
26
|
+
async getWifiState() {
|
|
27
|
+
warnOnce();
|
|
28
|
+
return { enabled: false, connected: false, rssi: null };
|
|
29
|
+
}
|
|
30
|
+
async getConnectedNetwork() {
|
|
31
|
+
warnOnce();
|
|
32
|
+
return { network: null };
|
|
33
|
+
}
|
|
34
|
+
async listAvailableNetworks(_options) {
|
|
35
|
+
warnOnce();
|
|
36
|
+
return { networks: [] };
|
|
37
|
+
}
|
|
38
|
+
async connectToNetwork(_options) {
|
|
39
|
+
warnOnce();
|
|
40
|
+
return { success: false, message: UNAVAILABLE_MESSAGE };
|
|
41
|
+
}
|
|
42
|
+
async disconnectFromNetwork() {
|
|
43
|
+
warnOnce();
|
|
44
|
+
return { success: false, message: UNAVAILABLE_MESSAGE };
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
var web = /*#__PURE__*/Object.freeze({
|
|
49
|
+
__proto__: null,
|
|
50
|
+
WiFiWeb: WiFiWeb
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
exports.WiFi = WiFi;
|
|
54
|
+
//# sourceMappingURL=plugin.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.cjs.js","sources":["esm/index.js","esm/web.js"],"sourcesContent":["import { registerPlugin } from \"@capacitor/core\";\nexport * from \"./definitions\";\nconst loadWeb = () => import(\"./web\").then((m) => new m.WiFiWeb());\nexport const WiFi = registerPlugin(\"ElizaWiFi\", {\n web: loadWeb,\n});\n//# sourceMappingURL=index.js.map","import { WebPlugin } from \"@capacitor/core\";\nconst UNAVAILABLE_MESSAGE = \"Wi-Fi controls are only available on Android.\";\nlet warned = false;\nfunction warnOnce() {\n if (warned)\n return;\n warned = true;\n console.warn(`[ElizaWiFi] ${UNAVAILABLE_MESSAGE}`);\n}\n/**\n * Web fallback — every method resolves with empty / disabled data so the\n * full TypeScript interface is satisfied without throwing during normal\n * desktop or browser dev sessions. `connectToNetwork` and\n * `disconnectFromNetwork` resolve with `{ success: false }` because there is\n * no meaningful action to take on the web side.\n */\nexport class WiFiWeb extends WebPlugin {\n async getWifiState() {\n warnOnce();\n return { enabled: false, connected: false, rssi: null };\n }\n async getConnectedNetwork() {\n warnOnce();\n return { network: null };\n }\n async listAvailableNetworks(_options) {\n warnOnce();\n return { networks: [] };\n }\n async connectToNetwork(_options) {\n warnOnce();\n return { success: false, message: UNAVAILABLE_MESSAGE };\n }\n async disconnectFromNetwork() {\n warnOnce();\n return { success: false, message: UNAVAILABLE_MESSAGE };\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["registerPlugin","WebPlugin"],"mappings":";;;;AAEA,MAAM,OAAO,GAAG,MAAM,mDAAe,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;AACtD,MAAC,IAAI,GAAGA,mBAAc,CAAC,WAAW,EAAE;AAChD,IAAI,GAAG,EAAE,OAAO;AAChB,CAAC;;ACJD,MAAM,mBAAmB,GAAG,+CAA+C;AAC3E,IAAI,MAAM,GAAG,KAAK;AAClB,SAAS,QAAQ,GAAG;AACpB,IAAI,IAAI,MAAM;AACd,QAAQ;AACR,IAAI,MAAM,GAAG,IAAI;AACjB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,mBAAmB,CAAC,CAAC,CAAC;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,OAAO,SAASC,cAAS,CAAC;AACvC,IAAI,MAAM,YAAY,GAAG;AACzB,QAAQ,QAAQ,EAAE;AAClB,QAAQ,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE;AAC/D,IAAI;AACJ,IAAI,MAAM,mBAAmB,GAAG;AAChC,QAAQ,QAAQ,EAAE;AAClB,QAAQ,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;AAChC,IAAI;AACJ,IAAI,MAAM,qBAAqB,CAAC,QAAQ,EAAE;AAC1C,QAAQ,QAAQ,EAAE;AAClB,QAAQ,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE;AAC/B,IAAI;AACJ,IAAI,MAAM,gBAAgB,CAAC,QAAQ,EAAE;AACrC,QAAQ,QAAQ,EAAE;AAClB,QAAQ,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,mBAAmB,EAAE;AAC/D,IAAI;AACJ,IAAI,MAAM,qBAAqB,GAAG;AAClC,QAAQ,QAAQ,EAAE;AAClB,QAAQ,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,mBAAmB,EAAE;AAC/D,IAAI;AACJ;;;;;;;;;"}
|
package/dist/plugin.js
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
var capacitorWifi = (function (exports, core) {
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
const loadWeb = () => Promise.resolve().then(function () { return web; }).then((m) => new m.WiFiWeb());
|
|
5
|
+
const WiFi = core.registerPlugin("ElizaWiFi", {
|
|
6
|
+
web: loadWeb,
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
const UNAVAILABLE_MESSAGE = "Wi-Fi controls are only available on Android.";
|
|
10
|
+
let warned = false;
|
|
11
|
+
function warnOnce() {
|
|
12
|
+
if (warned)
|
|
13
|
+
return;
|
|
14
|
+
warned = true;
|
|
15
|
+
console.warn(`[ElizaWiFi] ${UNAVAILABLE_MESSAGE}`);
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Web fallback — every method resolves with empty / disabled data so the
|
|
19
|
+
* full TypeScript interface is satisfied without throwing during normal
|
|
20
|
+
* desktop or browser dev sessions. `connectToNetwork` and
|
|
21
|
+
* `disconnectFromNetwork` resolve with `{ success: false }` because there is
|
|
22
|
+
* no meaningful action to take on the web side.
|
|
23
|
+
*/
|
|
24
|
+
class WiFiWeb extends core.WebPlugin {
|
|
25
|
+
async getWifiState() {
|
|
26
|
+
warnOnce();
|
|
27
|
+
return { enabled: false, connected: false, rssi: null };
|
|
28
|
+
}
|
|
29
|
+
async getConnectedNetwork() {
|
|
30
|
+
warnOnce();
|
|
31
|
+
return { network: null };
|
|
32
|
+
}
|
|
33
|
+
async listAvailableNetworks(_options) {
|
|
34
|
+
warnOnce();
|
|
35
|
+
return { networks: [] };
|
|
36
|
+
}
|
|
37
|
+
async connectToNetwork(_options) {
|
|
38
|
+
warnOnce();
|
|
39
|
+
return { success: false, message: UNAVAILABLE_MESSAGE };
|
|
40
|
+
}
|
|
41
|
+
async disconnectFromNetwork() {
|
|
42
|
+
warnOnce();
|
|
43
|
+
return { success: false, message: UNAVAILABLE_MESSAGE };
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
var web = /*#__PURE__*/Object.freeze({
|
|
48
|
+
__proto__: null,
|
|
49
|
+
WiFiWeb: WiFiWeb
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
exports.WiFi = WiFi;
|
|
53
|
+
|
|
54
|
+
return exports;
|
|
55
|
+
|
|
56
|
+
})({}, capacitorExports);
|
|
57
|
+
//# sourceMappingURL=plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.js","sources":["esm/index.js","esm/web.js"],"sourcesContent":["import { registerPlugin } from \"@capacitor/core\";\nexport * from \"./definitions\";\nconst loadWeb = () => import(\"./web\").then((m) => new m.WiFiWeb());\nexport const WiFi = registerPlugin(\"ElizaWiFi\", {\n web: loadWeb,\n});\n//# sourceMappingURL=index.js.map","import { WebPlugin } from \"@capacitor/core\";\nconst UNAVAILABLE_MESSAGE = \"Wi-Fi controls are only available on Android.\";\nlet warned = false;\nfunction warnOnce() {\n if (warned)\n return;\n warned = true;\n console.warn(`[ElizaWiFi] ${UNAVAILABLE_MESSAGE}`);\n}\n/**\n * Web fallback — every method resolves with empty / disabled data so the\n * full TypeScript interface is satisfied without throwing during normal\n * desktop or browser dev sessions. `connectToNetwork` and\n * `disconnectFromNetwork` resolve with `{ success: false }` because there is\n * no meaningful action to take on the web side.\n */\nexport class WiFiWeb extends WebPlugin {\n async getWifiState() {\n warnOnce();\n return { enabled: false, connected: false, rssi: null };\n }\n async getConnectedNetwork() {\n warnOnce();\n return { network: null };\n }\n async listAvailableNetworks(_options) {\n warnOnce();\n return { networks: [] };\n }\n async connectToNetwork(_options) {\n warnOnce();\n return { success: false, message: UNAVAILABLE_MESSAGE };\n }\n async disconnectFromNetwork() {\n warnOnce();\n return { success: false, message: UNAVAILABLE_MESSAGE };\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["registerPlugin","WebPlugin"],"mappings":";;;IAEA,MAAM,OAAO,GAAG,MAAM,mDAAe,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;AACtD,UAAC,IAAI,GAAGA,mBAAc,CAAC,WAAW,EAAE;IAChD,IAAI,GAAG,EAAE,OAAO;IAChB,CAAC;;ICJD,MAAM,mBAAmB,GAAG,+CAA+C;IAC3E,IAAI,MAAM,GAAG,KAAK;IAClB,SAAS,QAAQ,GAAG;IACpB,IAAI,IAAI,MAAM;IACd,QAAQ;IACR,IAAI,MAAM,GAAG,IAAI;IACjB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,mBAAmB,CAAC,CAAC,CAAC;IACtD;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACO,MAAM,OAAO,SAASC,cAAS,CAAC;IACvC,IAAI,MAAM,YAAY,GAAG;IACzB,QAAQ,QAAQ,EAAE;IAClB,QAAQ,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE;IAC/D,IAAI;IACJ,IAAI,MAAM,mBAAmB,GAAG;IAChC,QAAQ,QAAQ,EAAE;IAClB,QAAQ,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;IAChC,IAAI;IACJ,IAAI,MAAM,qBAAqB,CAAC,QAAQ,EAAE;IAC1C,QAAQ,QAAQ,EAAE;IAClB,QAAQ,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE;IAC/B,IAAI;IACJ,IAAI,MAAM,gBAAgB,CAAC,QAAQ,EAAE;IACrC,QAAQ,QAAQ,EAAE;IAClB,QAAQ,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,mBAAmB,EAAE;IAC/D,IAAI;IACJ,IAAI,MAAM,qBAAqB,GAAG;IAClC,QAAQ,QAAQ,EAAE;IAClB,QAAQ,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,mBAAmB,EAAE;IAC/D,IAAI;IACJ;;;;;;;;;;;;;;;"}
|
package/package.json
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@elizaos/capacitor-wifi",
|
|
3
|
+
"version": "2.0.0-beta.1",
|
|
4
|
+
"description": "Android Wi-Fi (WifiManager) bridge for ElizaOS.",
|
|
5
|
+
"main": "./dist/plugin.cjs.js",
|
|
6
|
+
"module": "./dist/esm/index.js",
|
|
7
|
+
"types": "./dist/esm/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/esm/index.d.ts",
|
|
11
|
+
"import": "./dist/esm/index.js",
|
|
12
|
+
"require": "./dist/plugin.cjs.js"
|
|
13
|
+
},
|
|
14
|
+
"./package.json": "./package.json"
|
|
15
|
+
},
|
|
16
|
+
"files": [
|
|
17
|
+
"android/src/main/",
|
|
18
|
+
"android/build.gradle",
|
|
19
|
+
"dist/",
|
|
20
|
+
"dist"
|
|
21
|
+
],
|
|
22
|
+
"scripts": {
|
|
23
|
+
"build": "bun run clean && tsc && bun --bun rollup -c rollup.config.mjs",
|
|
24
|
+
"clean": "node ../../../scripts/rm-path-recursive.mjs dist",
|
|
25
|
+
"prepublishOnly": "bun run build"
|
|
26
|
+
},
|
|
27
|
+
"license": "MIT",
|
|
28
|
+
"capacitor": {
|
|
29
|
+
"android": {
|
|
30
|
+
"src": "android"
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
"devDependencies": {
|
|
34
|
+
"@capacitor/cli": "^8.0.0",
|
|
35
|
+
"@capacitor/core": "^8.3.1",
|
|
36
|
+
"rimraf": "^6.0.0",
|
|
37
|
+
"rollup": "^4.60.2",
|
|
38
|
+
"typescript": "^6.0.3"
|
|
39
|
+
},
|
|
40
|
+
"peerDependencies": {
|
|
41
|
+
"@capacitor/core": "^8.3.1"
|
|
42
|
+
},
|
|
43
|
+
"elizaos": {
|
|
44
|
+
"platforms": [
|
|
45
|
+
"browser",
|
|
46
|
+
"node"
|
|
47
|
+
],
|
|
48
|
+
"runtime": "both",
|
|
49
|
+
"platformDetails": {
|
|
50
|
+
"browser": "Web fallback throws — Wi-Fi is only available on Android.",
|
|
51
|
+
"android": true
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
"publishConfig": {
|
|
55
|
+
"access": "public"
|
|
56
|
+
}
|
|
57
|
+
}
|