@onekeyfe/react-native-network-info 1.1.55
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/NetworkInfo.podspec +20 -0
- package/android/build.gradle +77 -0
- package/android/src/main/java/com/rnnetworkinfo/NetworkInfoModule.kt +265 -0
- package/android/src/main/java/com/rnnetworkinfo/NetworkInfoPackage.kt +33 -0
- package/ios/NetworkInfo.h +24 -0
- package/ios/NetworkInfo.mm +347 -0
- package/ios/getgateway.c +83 -0
- package/ios/getgateway.h +15 -0
- package/lib/module/NativeNetworkInfo.js +5 -0
- package/lib/module/NativeNetworkInfo.js.map +1 -0
- package/lib/module/index.js +5 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/typescript/package.json +1 -0
- package/lib/typescript/src/NativeNetworkInfo.d.ts +15 -0
- package/lib/typescript/src/NativeNetworkInfo.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +3 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/package.json +162 -0
- package/src/NativeNetworkInfo.ts +16 -0
- package/src/index.tsx +4 -0
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
require "json"
|
|
2
|
+
|
|
3
|
+
package = JSON.parse(File.read(File.join(__dir__, "package.json")))
|
|
4
|
+
|
|
5
|
+
Pod::Spec.new do |s|
|
|
6
|
+
s.name = "NetworkInfo"
|
|
7
|
+
s.version = package["version"]
|
|
8
|
+
s.summary = package["description"]
|
|
9
|
+
s.homepage = package["homepage"]
|
|
10
|
+
s.license = package["license"]
|
|
11
|
+
s.authors = package["author"]
|
|
12
|
+
|
|
13
|
+
s.platforms = { :ios => min_ios_version_supported }
|
|
14
|
+
s.source = { :git => "https://github.com/OneKeyHQ/app-modules/react-native-network-info.git", :tag => "#{s.version}" }
|
|
15
|
+
|
|
16
|
+
s.source_files = "ios/**/*.{h,m,mm,swift,c}"
|
|
17
|
+
s.frameworks = 'CoreLocation', 'SystemConfiguration', 'NetworkExtension'
|
|
18
|
+
|
|
19
|
+
install_modules_dependencies(s)
|
|
20
|
+
end
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
buildscript {
|
|
2
|
+
ext.getExtOrDefault = {name ->
|
|
3
|
+
return rootProject.ext.has(name) ? rootProject.ext.get(name) : project.properties['NetworkInfo_' + name]
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
repositories {
|
|
7
|
+
google()
|
|
8
|
+
mavenCentral()
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
dependencies {
|
|
12
|
+
classpath "com.android.tools.build:gradle:8.7.2"
|
|
13
|
+
// noinspection DifferentKotlinGradleVersion
|
|
14
|
+
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:${getExtOrDefault('kotlinVersion')}"
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
apply plugin: "com.android.library"
|
|
20
|
+
apply plugin: "kotlin-android"
|
|
21
|
+
|
|
22
|
+
apply plugin: "com.facebook.react"
|
|
23
|
+
|
|
24
|
+
def getExtOrIntegerDefault(name) {
|
|
25
|
+
return rootProject.ext.has(name) ? rootProject.ext.get(name) : (project.properties["NetworkInfo_" + name]).toInteger()
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
android {
|
|
29
|
+
namespace "com.rnnetworkinfo"
|
|
30
|
+
|
|
31
|
+
compileSdkVersion getExtOrIntegerDefault("compileSdkVersion")
|
|
32
|
+
|
|
33
|
+
defaultConfig {
|
|
34
|
+
minSdkVersion getExtOrIntegerDefault("minSdkVersion")
|
|
35
|
+
targetSdkVersion getExtOrIntegerDefault("targetSdkVersion")
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
buildFeatures {
|
|
39
|
+
buildConfig true
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
buildTypes {
|
|
43
|
+
release {
|
|
44
|
+
minifyEnabled false
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
lintOptions {
|
|
49
|
+
disable "GradleCompatible"
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
compileOptions {
|
|
53
|
+
sourceCompatibility JavaVersion.VERSION_1_8
|
|
54
|
+
targetCompatibility JavaVersion.VERSION_1_8
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
sourceSets {
|
|
58
|
+
main {
|
|
59
|
+
java.srcDirs += [
|
|
60
|
+
"generated/java",
|
|
61
|
+
"generated/jni"
|
|
62
|
+
]
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
repositories {
|
|
68
|
+
mavenCentral()
|
|
69
|
+
google()
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
def kotlin_version = getExtOrDefault("kotlinVersion")
|
|
73
|
+
|
|
74
|
+
dependencies {
|
|
75
|
+
implementation "com.facebook.react:react-android"
|
|
76
|
+
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
|
|
77
|
+
}
|
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
package com.rnnetworkinfo
|
|
2
|
+
|
|
3
|
+
import android.content.Context
|
|
4
|
+
import android.net.ConnectivityManager
|
|
5
|
+
import android.net.NetworkCapabilities
|
|
6
|
+
import android.net.wifi.WifiInfo
|
|
7
|
+
import android.net.wifi.WifiManager
|
|
8
|
+
import android.os.Build
|
|
9
|
+
import com.facebook.react.bridge.Promise
|
|
10
|
+
import com.facebook.react.bridge.ReactApplicationContext
|
|
11
|
+
import com.facebook.react.module.annotations.ReactModule
|
|
12
|
+
import java.net.Inet4Address
|
|
13
|
+
import java.net.Inet6Address
|
|
14
|
+
import java.net.InetAddress
|
|
15
|
+
import java.net.NetworkInterface
|
|
16
|
+
|
|
17
|
+
@ReactModule(name = NetworkInfoModule.NAME)
|
|
18
|
+
class NetworkInfoModule(reactContext: ReactApplicationContext) :
|
|
19
|
+
NativeRNNetworkInfoSpec(reactContext) {
|
|
20
|
+
|
|
21
|
+
companion object {
|
|
22
|
+
const val NAME = "RNNetworkInfo"
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
override fun getName(): String = NAME
|
|
26
|
+
|
|
27
|
+
// MARK: - getSSID
|
|
28
|
+
|
|
29
|
+
override fun getSSID(promise: Promise) {
|
|
30
|
+
Thread {
|
|
31
|
+
try {
|
|
32
|
+
val ssid = getWifiSSID()
|
|
33
|
+
promise.resolve(ssid)
|
|
34
|
+
} catch (e: Exception) {
|
|
35
|
+
promise.resolve(null)
|
|
36
|
+
}
|
|
37
|
+
}.start()
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
private fun getWifiSSID(): String? {
|
|
41
|
+
val context = reactApplicationContext
|
|
42
|
+
val wifiManager = context.applicationContext.getSystemService(Context.WIFI_SERVICE) as? WifiManager
|
|
43
|
+
?: return null
|
|
44
|
+
@Suppress("DEPRECATION")
|
|
45
|
+
val wifiInfo: WifiInfo = wifiManager.connectionInfo ?: return null
|
|
46
|
+
@Suppress("DEPRECATION")
|
|
47
|
+
val ssid = wifiInfo.ssid
|
|
48
|
+
if (ssid == null || ssid == "<unknown ssid>") return null
|
|
49
|
+
return if (ssid.startsWith("\"") && ssid.endsWith("\"")) {
|
|
50
|
+
ssid.substring(1, ssid.length - 1)
|
|
51
|
+
} else {
|
|
52
|
+
ssid
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// MARK: - getBSSID
|
|
57
|
+
|
|
58
|
+
override fun getBSSID(promise: Promise) {
|
|
59
|
+
Thread {
|
|
60
|
+
try {
|
|
61
|
+
val context = reactApplicationContext
|
|
62
|
+
val wifiManager = context.applicationContext.getSystemService(Context.WIFI_SERVICE) as? WifiManager
|
|
63
|
+
@Suppress("DEPRECATION")
|
|
64
|
+
val bssid = wifiManager?.connectionInfo?.bssid
|
|
65
|
+
promise.resolve(bssid)
|
|
66
|
+
} catch (e: Exception) {
|
|
67
|
+
promise.resolve(null)
|
|
68
|
+
}
|
|
69
|
+
}.start()
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// MARK: - getBroadcast
|
|
73
|
+
|
|
74
|
+
override fun getBroadcast(promise: Promise) {
|
|
75
|
+
Thread {
|
|
76
|
+
try {
|
|
77
|
+
var broadcast: String? = null
|
|
78
|
+
val interfaces = NetworkInterface.getNetworkInterfaces()
|
|
79
|
+
while (interfaces.hasMoreElements()) {
|
|
80
|
+
val iface = interfaces.nextElement()
|
|
81
|
+
if (iface.name == "wlan0" || iface.name == "eth0") {
|
|
82
|
+
for (ia in iface.interfaceAddresses) {
|
|
83
|
+
val broadcastAddr = ia.broadcast
|
|
84
|
+
if (broadcastAddr != null) {
|
|
85
|
+
broadcast = broadcastAddr.hostAddress
|
|
86
|
+
break
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
if (broadcast != null) break
|
|
91
|
+
}
|
|
92
|
+
promise.resolve(broadcast)
|
|
93
|
+
} catch (e: Exception) {
|
|
94
|
+
promise.resolve(null)
|
|
95
|
+
}
|
|
96
|
+
}.start()
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// MARK: - getIPAddress
|
|
100
|
+
|
|
101
|
+
override fun getIPAddress(promise: Promise) {
|
|
102
|
+
Thread {
|
|
103
|
+
try {
|
|
104
|
+
val address = getIPv4Address()
|
|
105
|
+
promise.resolve(address ?: "")
|
|
106
|
+
} catch (e: Exception) {
|
|
107
|
+
promise.resolve("")
|
|
108
|
+
}
|
|
109
|
+
}.start()
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
// MARK: - getIPV6Address
|
|
113
|
+
|
|
114
|
+
override fun getIPV6Address(promise: Promise) {
|
|
115
|
+
Thread {
|
|
116
|
+
try {
|
|
117
|
+
var address: String? = null
|
|
118
|
+
val interfaces = NetworkInterface.getNetworkInterfaces()
|
|
119
|
+
loop@ while (interfaces.hasMoreElements()) {
|
|
120
|
+
val iface = interfaces.nextElement()
|
|
121
|
+
if (!iface.isUp || iface.isLoopback) continue
|
|
122
|
+
val addrs = iface.inetAddresses
|
|
123
|
+
while (addrs.hasMoreElements()) {
|
|
124
|
+
val addr = addrs.nextElement()
|
|
125
|
+
if (addr is Inet6Address && !addr.isLoopbackAddress && !addr.isLinkLocalAddress) {
|
|
126
|
+
address = addr.hostAddress
|
|
127
|
+
break@loop
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
promise.resolve(address ?: "")
|
|
132
|
+
} catch (e: Exception) {
|
|
133
|
+
promise.resolve("")
|
|
134
|
+
}
|
|
135
|
+
}.start()
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
// MARK: - getGatewayIPAddress
|
|
139
|
+
|
|
140
|
+
override fun getGatewayIPAddress(promise: Promise) {
|
|
141
|
+
Thread {
|
|
142
|
+
try {
|
|
143
|
+
val context = reactApplicationContext
|
|
144
|
+
val wifiManager = context.applicationContext.getSystemService(Context.WIFI_SERVICE) as? WifiManager
|
|
145
|
+
@Suppress("DEPRECATION")
|
|
146
|
+
val dhcpInfo = wifiManager?.dhcpInfo
|
|
147
|
+
val gateway = if (dhcpInfo != null && dhcpInfo.gateway != 0) {
|
|
148
|
+
formatIpAddress(dhcpInfo.gateway)
|
|
149
|
+
} else {
|
|
150
|
+
null
|
|
151
|
+
}
|
|
152
|
+
promise.resolve(gateway ?: "")
|
|
153
|
+
} catch (e: Exception) {
|
|
154
|
+
promise.resolve("")
|
|
155
|
+
}
|
|
156
|
+
}.start()
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
// MARK: - getIPV4Address
|
|
160
|
+
|
|
161
|
+
override fun getIPV4Address(promise: Promise) {
|
|
162
|
+
Thread {
|
|
163
|
+
try {
|
|
164
|
+
val address = getIPv4Address()
|
|
165
|
+
promise.resolve(address ?: "0.0.0.0")
|
|
166
|
+
} catch (e: Exception) {
|
|
167
|
+
promise.resolve("0.0.0.0")
|
|
168
|
+
}
|
|
169
|
+
}.start()
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
// MARK: - getWIFIIPV4Address
|
|
173
|
+
|
|
174
|
+
override fun getWIFIIPV4Address(promise: Promise) {
|
|
175
|
+
Thread {
|
|
176
|
+
try {
|
|
177
|
+
var address: String? = null
|
|
178
|
+
val interfaces = NetworkInterface.getNetworkInterfaces()
|
|
179
|
+
loop@ while (interfaces.hasMoreElements()) {
|
|
180
|
+
val iface = interfaces.nextElement()
|
|
181
|
+
if (iface.name == "wlan0") {
|
|
182
|
+
val addrs = iface.inetAddresses
|
|
183
|
+
while (addrs.hasMoreElements()) {
|
|
184
|
+
val addr = addrs.nextElement()
|
|
185
|
+
if (addr is Inet4Address && !addr.isLoopbackAddress) {
|
|
186
|
+
address = addr.hostAddress
|
|
187
|
+
break@loop
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
promise.resolve(address ?: "0.0.0.0")
|
|
193
|
+
} catch (e: Exception) {
|
|
194
|
+
promise.resolve("0.0.0.0")
|
|
195
|
+
}
|
|
196
|
+
}.start()
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
// MARK: - getSubnet
|
|
200
|
+
|
|
201
|
+
override fun getSubnet(promise: Promise) {
|
|
202
|
+
Thread {
|
|
203
|
+
try {
|
|
204
|
+
var subnet: String? = null
|
|
205
|
+
val interfaces = NetworkInterface.getNetworkInterfaces()
|
|
206
|
+
loop@ while (interfaces.hasMoreElements()) {
|
|
207
|
+
val iface = interfaces.nextElement()
|
|
208
|
+
if (!iface.isUp || iface.isLoopback) continue
|
|
209
|
+
for (ia in iface.interfaceAddresses) {
|
|
210
|
+
val addr = ia.address
|
|
211
|
+
if (addr is Inet4Address && !addr.isLoopbackAddress) {
|
|
212
|
+
val prefixLen = ia.networkPrefixLength.toInt()
|
|
213
|
+
val mask = prefixLengthToSubnetMask(prefixLen)
|
|
214
|
+
subnet = mask
|
|
215
|
+
break@loop
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
promise.resolve(subnet ?: "0.0.0.0")
|
|
220
|
+
} catch (e: Exception) {
|
|
221
|
+
promise.resolve("0.0.0.0")
|
|
222
|
+
}
|
|
223
|
+
}.start()
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
// MARK: - Helpers
|
|
227
|
+
|
|
228
|
+
private fun getIPv4Address(): String? {
|
|
229
|
+
val interfaces = NetworkInterface.getNetworkInterfaces()
|
|
230
|
+
while (interfaces.hasMoreElements()) {
|
|
231
|
+
val iface = interfaces.nextElement()
|
|
232
|
+
if (!iface.isUp || iface.isLoopback) continue
|
|
233
|
+
val addrs = iface.inetAddresses
|
|
234
|
+
while (addrs.hasMoreElements()) {
|
|
235
|
+
val addr = addrs.nextElement()
|
|
236
|
+
if (addr is Inet4Address && !addr.isLoopbackAddress) {
|
|
237
|
+
return addr.hostAddress
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
return null
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
@Suppress("DEPRECATION")
|
|
245
|
+
private fun formatIpAddress(ip: Int): String {
|
|
246
|
+
return String.format(
|
|
247
|
+
"%d.%d.%d.%d",
|
|
248
|
+
ip and 0xff,
|
|
249
|
+
ip shr 8 and 0xff,
|
|
250
|
+
ip shr 16 and 0xff,
|
|
251
|
+
ip shr 24 and 0xff
|
|
252
|
+
)
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
private fun prefixLengthToSubnetMask(prefixLength: Int): String {
|
|
256
|
+
val mask = if (prefixLength == 0) 0 else (-1 shl (32 - prefixLength))
|
|
257
|
+
return String.format(
|
|
258
|
+
"%d.%d.%d.%d",
|
|
259
|
+
mask shr 24 and 0xff,
|
|
260
|
+
mask shr 16 and 0xff,
|
|
261
|
+
mask shr 8 and 0xff,
|
|
262
|
+
mask and 0xff
|
|
263
|
+
)
|
|
264
|
+
}
|
|
265
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
package com.rnnetworkinfo
|
|
2
|
+
|
|
3
|
+
import com.facebook.react.BaseReactPackage
|
|
4
|
+
import com.facebook.react.bridge.NativeModule
|
|
5
|
+
import com.facebook.react.bridge.ReactApplicationContext
|
|
6
|
+
import com.facebook.react.module.model.ReactModuleInfo
|
|
7
|
+
import com.facebook.react.module.model.ReactModuleInfoProvider
|
|
8
|
+
import java.util.HashMap
|
|
9
|
+
|
|
10
|
+
class NetworkInfoPackage : BaseReactPackage() {
|
|
11
|
+
override fun getModule(name: String, reactContext: ReactApplicationContext): NativeModule? {
|
|
12
|
+
return if (name == NetworkInfoModule.NAME) {
|
|
13
|
+
NetworkInfoModule(reactContext)
|
|
14
|
+
} else {
|
|
15
|
+
null
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
override fun getReactModuleInfoProvider(): ReactModuleInfoProvider {
|
|
20
|
+
return ReactModuleInfoProvider {
|
|
21
|
+
val moduleInfos: MutableMap<String, ReactModuleInfo> = HashMap()
|
|
22
|
+
moduleInfos[NetworkInfoModule.NAME] = ReactModuleInfo(
|
|
23
|
+
NetworkInfoModule.NAME,
|
|
24
|
+
NetworkInfoModule.NAME,
|
|
25
|
+
false, // canOverrideExistingModule
|
|
26
|
+
false, // needsEagerInit
|
|
27
|
+
false, // isCxxModule
|
|
28
|
+
true // isTurboModule
|
|
29
|
+
)
|
|
30
|
+
moduleInfos
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
#import <RNNetworkInfoSpec/RNNetworkInfoSpec.h>
|
|
2
|
+
|
|
3
|
+
@interface NetworkInfo : NativeRNNetworkInfoSpecBase <NativeRNNetworkInfoSpec>
|
|
4
|
+
|
|
5
|
+
- (void)getSSID:(RCTPromiseResolveBlock)resolve
|
|
6
|
+
reject:(RCTPromiseRejectBlock)reject;
|
|
7
|
+
- (void)getBSSID:(RCTPromiseResolveBlock)resolve
|
|
8
|
+
reject:(RCTPromiseRejectBlock)reject;
|
|
9
|
+
- (void)getBroadcast:(RCTPromiseResolveBlock)resolve
|
|
10
|
+
reject:(RCTPromiseRejectBlock)reject;
|
|
11
|
+
- (void)getIPAddress:(RCTPromiseResolveBlock)resolve
|
|
12
|
+
reject:(RCTPromiseRejectBlock)reject;
|
|
13
|
+
- (void)getIPV6Address:(RCTPromiseResolveBlock)resolve
|
|
14
|
+
reject:(RCTPromiseRejectBlock)reject;
|
|
15
|
+
- (void)getGatewayIPAddress:(RCTPromiseResolveBlock)resolve
|
|
16
|
+
reject:(RCTPromiseRejectBlock)reject;
|
|
17
|
+
- (void)getIPV4Address:(RCTPromiseResolveBlock)resolve
|
|
18
|
+
reject:(RCTPromiseRejectBlock)reject;
|
|
19
|
+
- (void)getWIFIIPV4Address:(RCTPromiseResolveBlock)resolve
|
|
20
|
+
reject:(RCTPromiseRejectBlock)reject;
|
|
21
|
+
- (void)getSubnet:(RCTPromiseResolveBlock)resolve
|
|
22
|
+
reject:(RCTPromiseRejectBlock)reject;
|
|
23
|
+
|
|
24
|
+
@end
|
|
@@ -0,0 +1,347 @@
|
|
|
1
|
+
#import "NetworkInfo.h"
|
|
2
|
+
#import "getgateway.h"
|
|
3
|
+
|
|
4
|
+
#import <ifaddrs.h>
|
|
5
|
+
#import <arpa/inet.h>
|
|
6
|
+
#include <net/if.h>
|
|
7
|
+
#include <sys/types.h>
|
|
8
|
+
#include <netinet/in.h>
|
|
9
|
+
#include <TargetConditionals.h>
|
|
10
|
+
#import <NetworkExtension/NetworkExtension.h>
|
|
11
|
+
|
|
12
|
+
#define IOS_CELLULAR @"pdp_ip0"
|
|
13
|
+
#define IOS_WIFI @"en0"
|
|
14
|
+
#define IP_ADDR_IPv4 @"ipv4"
|
|
15
|
+
#define IP_ADDR_IPv6 @"ipv6"
|
|
16
|
+
|
|
17
|
+
@import SystemConfiguration.CaptiveNetwork;
|
|
18
|
+
|
|
19
|
+
@implementation NetworkInfo
|
|
20
|
+
|
|
21
|
+
- (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:
|
|
22
|
+
(const facebook::react::ObjCTurboModule::InitParams &)params
|
|
23
|
+
{
|
|
24
|
+
return std::make_shared<facebook::react::NativeRNNetworkInfoSpecJSI>(params);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
+ (NSString *)moduleName
|
|
28
|
+
{
|
|
29
|
+
return @"RNNetworkInfo";
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
+ (BOOL)requiresMainQueueSetup
|
|
33
|
+
{
|
|
34
|
+
return NO;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// MARK: - getSSID
|
|
38
|
+
|
|
39
|
+
- (void)getSSID:(RCTPromiseResolveBlock)resolve
|
|
40
|
+
reject:(RCTPromiseRejectBlock)reject
|
|
41
|
+
{
|
|
42
|
+
#if TARGET_OS_IOS
|
|
43
|
+
if (@available(iOS 14.0, *)) {
|
|
44
|
+
[NEHotspotNetwork fetchCurrentWithCompletionHandler:^(NEHotspotNetwork * _Nullable currentNetwork) {
|
|
45
|
+
resolve(currentNetwork.SSID);
|
|
46
|
+
}];
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
@try {
|
|
51
|
+
NSArray *interfaceNames = CFBridgingRelease(CNCopySupportedInterfaces());
|
|
52
|
+
NSDictionary *SSIDInfo;
|
|
53
|
+
NSString *SSID = nil;
|
|
54
|
+
|
|
55
|
+
for (NSString *interfaceName in interfaceNames) {
|
|
56
|
+
SSIDInfo = CFBridgingRelease(CNCopyCurrentNetworkInfo((__bridge CFStringRef)interfaceName));
|
|
57
|
+
if (SSIDInfo.count > 0) {
|
|
58
|
+
SSID = SSIDInfo[@"SSID"];
|
|
59
|
+
break;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
resolve(SSID);
|
|
63
|
+
} @catch (NSException *exception) {
|
|
64
|
+
resolve(nil);
|
|
65
|
+
}
|
|
66
|
+
#else
|
|
67
|
+
resolve(nil);
|
|
68
|
+
#endif
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
// MARK: - getBSSID
|
|
72
|
+
|
|
73
|
+
- (void)getBSSID:(RCTPromiseResolveBlock)resolve
|
|
74
|
+
reject:(RCTPromiseRejectBlock)reject
|
|
75
|
+
{
|
|
76
|
+
#if TARGET_OS_IOS
|
|
77
|
+
if (@available(iOS 14.0, *)) {
|
|
78
|
+
[NEHotspotNetwork fetchCurrentWithCompletionHandler:^(NEHotspotNetwork * _Nullable currentNetwork) {
|
|
79
|
+
resolve(currentNetwork.BSSID);
|
|
80
|
+
}];
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
@try {
|
|
85
|
+
NSArray *interfaceNames = CFBridgingRelease(CNCopySupportedInterfaces());
|
|
86
|
+
NSString *BSSID = nil;
|
|
87
|
+
|
|
88
|
+
for (NSString *interface in interfaceNames) {
|
|
89
|
+
CFDictionaryRef networkDetails = CNCopyCurrentNetworkInfo((CFStringRef)interface);
|
|
90
|
+
if (networkDetails) {
|
|
91
|
+
BSSID = (NSString *)CFDictionaryGetValue(networkDetails, kCNNetworkInfoKeyBSSID);
|
|
92
|
+
CFRelease(networkDetails);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
resolve(BSSID);
|
|
96
|
+
} @catch (NSException *exception) {
|
|
97
|
+
resolve(nil);
|
|
98
|
+
}
|
|
99
|
+
#else
|
|
100
|
+
resolve(nil);
|
|
101
|
+
#endif
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
// MARK: - getBroadcast
|
|
105
|
+
|
|
106
|
+
- (void)getBroadcast:(RCTPromiseResolveBlock)resolve
|
|
107
|
+
reject:(RCTPromiseRejectBlock)reject
|
|
108
|
+
{
|
|
109
|
+
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
|
|
110
|
+
@try {
|
|
111
|
+
NSString *address = nil;
|
|
112
|
+
|
|
113
|
+
struct ifaddrs *interfaces = NULL;
|
|
114
|
+
struct ifaddrs *temp_addr = NULL;
|
|
115
|
+
int success = getifaddrs(&interfaces);
|
|
116
|
+
|
|
117
|
+
if (success == 0) {
|
|
118
|
+
temp_addr = interfaces;
|
|
119
|
+
while (temp_addr != NULL) {
|
|
120
|
+
if (temp_addr->ifa_addr->sa_family == AF_INET) {
|
|
121
|
+
if ([[NSString stringWithUTF8String:temp_addr->ifa_name] isEqualToString:@"en0"]) {
|
|
122
|
+
NSString *localAddr = [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_addr)->sin_addr)];
|
|
123
|
+
NSString *netmask = [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_netmask)->sin_addr)];
|
|
124
|
+
|
|
125
|
+
struct in_addr local_addr;
|
|
126
|
+
struct in_addr netmask_addr;
|
|
127
|
+
inet_aton([localAddr UTF8String], &local_addr);
|
|
128
|
+
inet_aton([netmask UTF8String], &netmask_addr);
|
|
129
|
+
|
|
130
|
+
local_addr.s_addr |= ~(netmask_addr.s_addr);
|
|
131
|
+
address = [NSString stringWithUTF8String:inet_ntoa(local_addr)];
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
temp_addr = temp_addr->ifa_next;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
freeifaddrs(interfaces);
|
|
138
|
+
resolve(address);
|
|
139
|
+
} @catch (NSException *exception) {
|
|
140
|
+
resolve(nil);
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
// MARK: - getIPAddress
|
|
146
|
+
|
|
147
|
+
- (void)getIPAddress:(RCTPromiseResolveBlock)resolve
|
|
148
|
+
reject:(RCTPromiseRejectBlock)reject
|
|
149
|
+
{
|
|
150
|
+
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
|
|
151
|
+
@try {
|
|
152
|
+
NSString *address = nil;
|
|
153
|
+
|
|
154
|
+
struct ifaddrs *interfaces = NULL;
|
|
155
|
+
struct ifaddrs *temp_addr = NULL;
|
|
156
|
+
int success = getifaddrs(&interfaces);
|
|
157
|
+
|
|
158
|
+
if (success == 0) {
|
|
159
|
+
temp_addr = interfaces;
|
|
160
|
+
while (temp_addr != NULL) {
|
|
161
|
+
if (temp_addr->ifa_addr->sa_family == AF_INET) {
|
|
162
|
+
if ([[NSString stringWithUTF8String:temp_addr->ifa_name] isEqualToString:@"en0"]) {
|
|
163
|
+
address = [NSString stringWithUTF8String:inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_addr)->sin_addr)];
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
temp_addr = temp_addr->ifa_next;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
freeifaddrs(interfaces);
|
|
170
|
+
resolve(address ?: @"");
|
|
171
|
+
} @catch (NSException *exception) {
|
|
172
|
+
resolve(@"");
|
|
173
|
+
}
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
// MARK: - getIPV6Address
|
|
178
|
+
|
|
179
|
+
- (void)getIPV6Address:(RCTPromiseResolveBlock)resolve
|
|
180
|
+
reject:(RCTPromiseRejectBlock)reject
|
|
181
|
+
{
|
|
182
|
+
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
|
|
183
|
+
@try {
|
|
184
|
+
NSString *address = nil;
|
|
185
|
+
|
|
186
|
+
struct ifaddrs *interfaces = NULL;
|
|
187
|
+
struct ifaddrs *temp_addr = NULL;
|
|
188
|
+
int success = getifaddrs(&interfaces);
|
|
189
|
+
|
|
190
|
+
if (success == 0) {
|
|
191
|
+
temp_addr = interfaces;
|
|
192
|
+
while (temp_addr != NULL) {
|
|
193
|
+
if (temp_addr->ifa_addr->sa_family == AF_INET6) {
|
|
194
|
+
if ([[NSString stringWithUTF8String:temp_addr->ifa_name] isEqualToString:@"en0"]) {
|
|
195
|
+
char ipAddress[INET6_ADDRSTRLEN];
|
|
196
|
+
struct sockaddr_in6 *addr6 = (struct sockaddr_in6 *)temp_addr->ifa_addr;
|
|
197
|
+
if (inet_ntop(AF_INET6, &addr6->sin6_addr, ipAddress, INET6_ADDRSTRLEN)) {
|
|
198
|
+
address = [NSString stringWithUTF8String:ipAddress];
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
temp_addr = temp_addr->ifa_next;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
freeifaddrs(interfaces);
|
|
206
|
+
resolve(address ?: @"");
|
|
207
|
+
} @catch (NSException *exception) {
|
|
208
|
+
resolve(@"");
|
|
209
|
+
}
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
// MARK: - getGatewayIPAddress
|
|
214
|
+
|
|
215
|
+
- (void)getGatewayIPAddress:(RCTPromiseResolveBlock)resolve
|
|
216
|
+
reject:(RCTPromiseRejectBlock)reject
|
|
217
|
+
{
|
|
218
|
+
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
|
|
219
|
+
@try {
|
|
220
|
+
NSString *ipString = nil;
|
|
221
|
+
struct in_addr gatewayaddr;
|
|
222
|
+
int r = getdefaultgateway(&(gatewayaddr.s_addr));
|
|
223
|
+
if (r >= 0) {
|
|
224
|
+
ipString = [NSString stringWithFormat:@"%s", inet_ntoa(gatewayaddr)];
|
|
225
|
+
}
|
|
226
|
+
resolve(ipString ?: @"");
|
|
227
|
+
} @catch (NSException *exception) {
|
|
228
|
+
resolve(@"");
|
|
229
|
+
}
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
// MARK: - getIPV4Address
|
|
234
|
+
|
|
235
|
+
- (void)getIPV4Address:(RCTPromiseResolveBlock)resolve
|
|
236
|
+
reject:(RCTPromiseRejectBlock)reject
|
|
237
|
+
{
|
|
238
|
+
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
|
|
239
|
+
@try {
|
|
240
|
+
NSArray *searchArray = @[IOS_WIFI @"/" IP_ADDR_IPv4, IOS_CELLULAR @"/" IP_ADDR_IPv4];
|
|
241
|
+
NSDictionary *addresses = [self getAllIPAddresses];
|
|
242
|
+
|
|
243
|
+
__block NSString *address = nil;
|
|
244
|
+
[searchArray enumerateObjectsUsingBlock:^(NSString *key, NSUInteger idx, BOOL *stop) {
|
|
245
|
+
address = addresses[key];
|
|
246
|
+
if (address) *stop = YES;
|
|
247
|
+
}];
|
|
248
|
+
resolve(address ?: @"0.0.0.0");
|
|
249
|
+
} @catch (NSException *exception) {
|
|
250
|
+
resolve(@"0.0.0.0");
|
|
251
|
+
}
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
// MARK: - getWIFIIPV4Address
|
|
256
|
+
|
|
257
|
+
- (void)getWIFIIPV4Address:(RCTPromiseResolveBlock)resolve
|
|
258
|
+
reject:(RCTPromiseRejectBlock)reject
|
|
259
|
+
{
|
|
260
|
+
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
|
|
261
|
+
@try {
|
|
262
|
+
NSArray *searchArray = @[IOS_WIFI @"/" IP_ADDR_IPv4];
|
|
263
|
+
NSDictionary *addresses = [self getAllIPAddresses];
|
|
264
|
+
|
|
265
|
+
__block NSString *address = nil;
|
|
266
|
+
[searchArray enumerateObjectsUsingBlock:^(NSString *key, NSUInteger idx, BOOL *stop) {
|
|
267
|
+
address = addresses[key];
|
|
268
|
+
if (address) *stop = YES;
|
|
269
|
+
}];
|
|
270
|
+
resolve(address ?: @"0.0.0.0");
|
|
271
|
+
} @catch (NSException *exception) {
|
|
272
|
+
resolve(@"0.0.0.0");
|
|
273
|
+
}
|
|
274
|
+
});
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
// MARK: - getSubnet
|
|
278
|
+
|
|
279
|
+
- (void)getSubnet:(RCTPromiseResolveBlock)resolve
|
|
280
|
+
reject:(RCTPromiseRejectBlock)reject
|
|
281
|
+
{
|
|
282
|
+
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
|
|
283
|
+
@try {
|
|
284
|
+
NSString *netmask = nil;
|
|
285
|
+
struct ifaddrs *interfaces = NULL;
|
|
286
|
+
struct ifaddrs *temp_addr = NULL;
|
|
287
|
+
|
|
288
|
+
int success = getifaddrs(&interfaces);
|
|
289
|
+
if (success == 0) {
|
|
290
|
+
temp_addr = interfaces;
|
|
291
|
+
while (temp_addr != NULL) {
|
|
292
|
+
if (temp_addr->ifa_addr->sa_family == AF_INET) {
|
|
293
|
+
if ([@(temp_addr->ifa_name) isEqualToString:@"en0"]) {
|
|
294
|
+
netmask = @(inet_ntoa(((struct sockaddr_in *)temp_addr->ifa_netmask)->sin_addr));
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
temp_addr = temp_addr->ifa_next;
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
freeifaddrs(interfaces);
|
|
301
|
+
resolve(netmask ?: @"0.0.0.0");
|
|
302
|
+
} @catch (NSException *exception) {
|
|
303
|
+
resolve(@"0.0.0.0");
|
|
304
|
+
}
|
|
305
|
+
});
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
// MARK: - getAllIPAddresses helper
|
|
309
|
+
|
|
310
|
+
- (NSDictionary *)getAllIPAddresses
|
|
311
|
+
{
|
|
312
|
+
NSMutableDictionary *addresses = [NSMutableDictionary dictionaryWithCapacity:8];
|
|
313
|
+
|
|
314
|
+
struct ifaddrs *interfaces;
|
|
315
|
+
if (!getifaddrs(&interfaces)) {
|
|
316
|
+
struct ifaddrs *interface;
|
|
317
|
+
for (interface = interfaces; interface; interface = interface->ifa_next) {
|
|
318
|
+
if (!(interface->ifa_flags & IFF_UP)) {
|
|
319
|
+
continue;
|
|
320
|
+
}
|
|
321
|
+
const struct sockaddr_in *addr = (const struct sockaddr_in *)interface->ifa_addr;
|
|
322
|
+
char addrBuf[MAX(INET_ADDRSTRLEN, INET6_ADDRSTRLEN)];
|
|
323
|
+
if (addr && (addr->sin_family == AF_INET || addr->sin_family == AF_INET6)) {
|
|
324
|
+
NSString *name = [NSString stringWithUTF8String:interface->ifa_name];
|
|
325
|
+
NSString *type = nil;
|
|
326
|
+
if (addr->sin_family == AF_INET) {
|
|
327
|
+
if (inet_ntop(AF_INET, &addr->sin_addr, addrBuf, INET_ADDRSTRLEN)) {
|
|
328
|
+
type = IP_ADDR_IPv4;
|
|
329
|
+
}
|
|
330
|
+
} else {
|
|
331
|
+
const struct sockaddr_in6 *addr6 = (const struct sockaddr_in6 *)interface->ifa_addr;
|
|
332
|
+
if (inet_ntop(AF_INET6, &addr6->sin6_addr, addrBuf, INET6_ADDRSTRLEN)) {
|
|
333
|
+
type = IP_ADDR_IPv6;
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
if (type) {
|
|
337
|
+
NSString *key = [NSString stringWithFormat:@"%@/%@", name, type];
|
|
338
|
+
addresses[key] = [NSString stringWithUTF8String:addrBuf];
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
freeifaddrs(interfaces);
|
|
343
|
+
}
|
|
344
|
+
return [addresses count] ? addresses : @{};
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
@end
|
package/ios/getgateway.c
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
//
|
|
2
|
+
// getgateway.c
|
|
3
|
+
//
|
|
4
|
+
// This is pulled directly from https://stackoverflow.com/a/29440193/1120802
|
|
5
|
+
//
|
|
6
|
+
|
|
7
|
+
#include <stdio.h>
|
|
8
|
+
#include <netinet/in.h>
|
|
9
|
+
#include <stdlib.h>
|
|
10
|
+
#include <sys/sysctl.h>
|
|
11
|
+
#include "getgateway.h"
|
|
12
|
+
|
|
13
|
+
#include "TargetConditionals.h"
|
|
14
|
+
#if TARGET_IPHONE_SIMULATOR
|
|
15
|
+
#include <net/route.h>
|
|
16
|
+
#define TypeEN "en1"
|
|
17
|
+
#else
|
|
18
|
+
#include <net/route.h>
|
|
19
|
+
#define TypeEN "en0"
|
|
20
|
+
#endif
|
|
21
|
+
|
|
22
|
+
#include <net/if.h>
|
|
23
|
+
#include <string.h>
|
|
24
|
+
|
|
25
|
+
#define CTL_NET 4 /* network, see socket.h */
|
|
26
|
+
|
|
27
|
+
#if defined(BSD) || defined(__APPLE__)
|
|
28
|
+
|
|
29
|
+
#define ROUNDUP(a) \
|
|
30
|
+
((a) > 0 ? (1 + (((a) - 1) | (sizeof(long) - 1))) : sizeof(long))
|
|
31
|
+
|
|
32
|
+
int getdefaultgateway(in_addr_t *addr)
|
|
33
|
+
{
|
|
34
|
+
int mib[] = {CTL_NET, PF_ROUTE, 0, AF_INET,
|
|
35
|
+
NET_RT_FLAGS, RTF_GATEWAY};
|
|
36
|
+
size_t l;
|
|
37
|
+
char *buf, *p;
|
|
38
|
+
struct rt_msghdr *rt;
|
|
39
|
+
struct sockaddr *sa;
|
|
40
|
+
struct sockaddr *sa_tab[RTAX_MAX];
|
|
41
|
+
int i;
|
|
42
|
+
int r = -1;
|
|
43
|
+
if (sysctl(mib, sizeof(mib) / sizeof(int), 0, &l, 0, 0) < 0) {
|
|
44
|
+
return -1;
|
|
45
|
+
}
|
|
46
|
+
if (l > 0) {
|
|
47
|
+
buf = malloc(l);
|
|
48
|
+
if (sysctl(mib, sizeof(mib) / sizeof(int), buf, &l, 0, 0) < 0) {
|
|
49
|
+
free(buf);
|
|
50
|
+
return -1;
|
|
51
|
+
}
|
|
52
|
+
for (p = buf; p < buf + l; p += rt->rtm_msglen) {
|
|
53
|
+
rt = (struct rt_msghdr *)p;
|
|
54
|
+
sa = (struct sockaddr *)(rt + 1);
|
|
55
|
+
for (i = 0; i < RTAX_MAX; i++) {
|
|
56
|
+
if (rt->rtm_addrs & (1 << i)) {
|
|
57
|
+
sa_tab[i] = sa;
|
|
58
|
+
sa = (struct sockaddr *)((char *)sa + ROUNDUP(sa->sa_len));
|
|
59
|
+
} else {
|
|
60
|
+
sa_tab[i] = NULL;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
if (((rt->rtm_addrs & (RTA_DST | RTA_GATEWAY)) == (RTA_DST | RTA_GATEWAY))
|
|
65
|
+
&& sa_tab[RTAX_DST]->sa_family == AF_INET
|
|
66
|
+
&& sa_tab[RTAX_GATEWAY]->sa_family == AF_INET) {
|
|
67
|
+
|
|
68
|
+
if (((struct sockaddr_in *)sa_tab[RTAX_DST])->sin_addr.s_addr == 0) {
|
|
69
|
+
char ifName[128];
|
|
70
|
+
if_indextoname(rt->rtm_index, ifName);
|
|
71
|
+
if (strcmp(TypeEN, ifName) == 0) {
|
|
72
|
+
*addr = ((struct sockaddr_in *)(sa_tab[RTAX_GATEWAY]))->sin_addr.s_addr;
|
|
73
|
+
r = 0;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
free(buf);
|
|
79
|
+
}
|
|
80
|
+
return r;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
#endif
|
package/ios/getgateway.h
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
//
|
|
2
|
+
// getgateway.h
|
|
3
|
+
//
|
|
4
|
+
// This is pulled directly from https://stackoverflow.com/a/29440193/1120802
|
|
5
|
+
//
|
|
6
|
+
|
|
7
|
+
#ifndef getgateway_h
|
|
8
|
+
#define getgateway_h
|
|
9
|
+
|
|
10
|
+
#include <stdio.h>
|
|
11
|
+
#include <netinet/in.h>
|
|
12
|
+
|
|
13
|
+
int getdefaultgateway(in_addr_t *addr);
|
|
14
|
+
|
|
15
|
+
#endif /* getgateway_h */
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["TurboModuleRegistry","getEnforcing"],"sourceRoot":"../../src","sources":["NativeNetworkInfo.ts"],"mappings":";;AAAA,SAASA,mBAAmB,QAAQ,cAAc;AAelD,eAAeA,mBAAmB,CAACC,YAAY,CAAO,eAAe,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["NativeNetworkInfo","NetworkInfo"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA,OAAOA,iBAAiB,MAAM,wBAAqB;AAEnD,OAAO,MAAMC,WAAW,GAAGD,iBAAiB","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"type":"module"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"type":"module"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { TurboModule } from 'react-native';
|
|
2
|
+
export interface Spec extends TurboModule {
|
|
3
|
+
getSSID(): Promise<string | null>;
|
|
4
|
+
getBSSID(): Promise<string | null>;
|
|
5
|
+
getBroadcast(): Promise<string | null>;
|
|
6
|
+
getIPAddress(): Promise<string>;
|
|
7
|
+
getIPV6Address(): Promise<string>;
|
|
8
|
+
getGatewayIPAddress(): Promise<string>;
|
|
9
|
+
getIPV4Address(): Promise<string>;
|
|
10
|
+
getWIFIIPV4Address(): Promise<string>;
|
|
11
|
+
getSubnet(): Promise<string>;
|
|
12
|
+
}
|
|
13
|
+
declare const _default: Spec;
|
|
14
|
+
export default _default;
|
|
15
|
+
//# sourceMappingURL=NativeNetworkInfo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NativeNetworkInfo.d.ts","sourceRoot":"","sources":["../../../src/NativeNetworkInfo.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,MAAM,WAAW,IAAK,SAAQ,WAAW;IACvC,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAClC,QAAQ,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACnC,YAAY,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACvC,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAChC,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAClC,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IACvC,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAClC,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IACtC,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;CAC9B;;AAED,wBAAuE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AAEA,eAAO,MAAM,WAAW,oCAAoB,CAAC;AAC7C,YAAY,EAAE,IAAI,IAAI,eAAe,EAAE,MAAM,qBAAqB,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@onekeyfe/react-native-network-info",
|
|
3
|
+
"version": "1.1.55",
|
|
4
|
+
"description": "react-native-network-info",
|
|
5
|
+
"main": "./lib/module/index.js",
|
|
6
|
+
"types": "./lib/typescript/src/index.d.ts",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": {
|
|
9
|
+
"source": "./src/index.tsx",
|
|
10
|
+
"types": "./lib/typescript/src/index.d.ts",
|
|
11
|
+
"default": "./lib/module/index.js"
|
|
12
|
+
},
|
|
13
|
+
"./package.json": "./package.json"
|
|
14
|
+
},
|
|
15
|
+
"files": [
|
|
16
|
+
"src",
|
|
17
|
+
"lib",
|
|
18
|
+
"android",
|
|
19
|
+
"ios",
|
|
20
|
+
"*.podspec",
|
|
21
|
+
"!ios/build",
|
|
22
|
+
"!android/build",
|
|
23
|
+
"!android/gradle",
|
|
24
|
+
"!android/gradlew",
|
|
25
|
+
"!android/gradlew.bat",
|
|
26
|
+
"!android/local.properties",
|
|
27
|
+
"!**/__tests__",
|
|
28
|
+
"!**/__fixtures__",
|
|
29
|
+
"!**/__mocks__",
|
|
30
|
+
"!**/.*"
|
|
31
|
+
],
|
|
32
|
+
"scripts": {
|
|
33
|
+
"clean": "del-cli android/build example/android/build example/android/app/build example/ios/build lib",
|
|
34
|
+
"prepare": "bob build",
|
|
35
|
+
"typecheck": "tsc",
|
|
36
|
+
"lint": "eslint \"**/*.{js,ts,tsx}\"",
|
|
37
|
+
"test": "jest",
|
|
38
|
+
"release": "yarn prepare && npm whoami && npm publish --access public"
|
|
39
|
+
},
|
|
40
|
+
"keywords": [
|
|
41
|
+
"react-native",
|
|
42
|
+
"ios",
|
|
43
|
+
"android"
|
|
44
|
+
],
|
|
45
|
+
"repository": {
|
|
46
|
+
"type": "git",
|
|
47
|
+
"url": "git+https://github.com/OneKeyHQ/app-modules/react-native-network-info.git"
|
|
48
|
+
},
|
|
49
|
+
"author": "@onekeyhq <huanming@onekey.so> (https://github.com/OneKeyHQ/app-modules)",
|
|
50
|
+
"license": "MIT",
|
|
51
|
+
"bugs": {
|
|
52
|
+
"url": "https://github.com/OneKeyHQ/app-modules/react-native-network-info/issues"
|
|
53
|
+
},
|
|
54
|
+
"homepage": "https://github.com/OneKeyHQ/app-modules/react-native-network-info#readme",
|
|
55
|
+
"publishConfig": {
|
|
56
|
+
"registry": "https://registry.npmjs.org/"
|
|
57
|
+
},
|
|
58
|
+
"devDependencies": {
|
|
59
|
+
"@commitlint/config-conventional": "^19.8.1",
|
|
60
|
+
"@eslint/compat": "^1.3.2",
|
|
61
|
+
"@eslint/eslintrc": "^3.3.1",
|
|
62
|
+
"@eslint/js": "^9.35.0",
|
|
63
|
+
"@react-native/babel-preset": "0.83.0",
|
|
64
|
+
"@react-native/eslint-config": "0.83.0",
|
|
65
|
+
"@release-it/conventional-changelog": "^10.0.1",
|
|
66
|
+
"@types/jest": "^29.5.14",
|
|
67
|
+
"@types/react": "^19.2.0",
|
|
68
|
+
"commitlint": "^19.8.1",
|
|
69
|
+
"del-cli": "^6.0.0",
|
|
70
|
+
"eslint": "^9.35.0",
|
|
71
|
+
"eslint-config-prettier": "^10.1.8",
|
|
72
|
+
"eslint-plugin-prettier": "^5.5.4",
|
|
73
|
+
"jest": "^29.7.0",
|
|
74
|
+
"lefthook": "^2.0.3",
|
|
75
|
+
"prettier": "^2.8.8",
|
|
76
|
+
"react": "19.2.0",
|
|
77
|
+
"react-native": "patch:react-native@npm%3A0.83.0#~/.yarn/patches/react-native-npm-0.83.0-577d0f2d83.patch",
|
|
78
|
+
"react-native-builder-bob": "^0.40.17",
|
|
79
|
+
"release-it": "^19.0.4",
|
|
80
|
+
"turbo": "^2.5.6",
|
|
81
|
+
"typescript": "^5.9.2"
|
|
82
|
+
},
|
|
83
|
+
"peerDependencies": {
|
|
84
|
+
"react": "*",
|
|
85
|
+
"react-native": "*"
|
|
86
|
+
},
|
|
87
|
+
"react-native-builder-bob": {
|
|
88
|
+
"source": "src",
|
|
89
|
+
"output": "lib",
|
|
90
|
+
"targets": [
|
|
91
|
+
[
|
|
92
|
+
"module",
|
|
93
|
+
{
|
|
94
|
+
"esm": true
|
|
95
|
+
}
|
|
96
|
+
],
|
|
97
|
+
[
|
|
98
|
+
"typescript",
|
|
99
|
+
{
|
|
100
|
+
"project": "tsconfig.build.json"
|
|
101
|
+
}
|
|
102
|
+
]
|
|
103
|
+
]
|
|
104
|
+
},
|
|
105
|
+
"codegenConfig": {
|
|
106
|
+
"name": "RNNetworkInfoSpec",
|
|
107
|
+
"type": "modules",
|
|
108
|
+
"jsSrcsDir": "src",
|
|
109
|
+
"android": {
|
|
110
|
+
"javaPackageName": "com.rnnetworkinfo"
|
|
111
|
+
}
|
|
112
|
+
},
|
|
113
|
+
"prettier": {
|
|
114
|
+
"quoteProps": "consistent",
|
|
115
|
+
"singleQuote": true,
|
|
116
|
+
"tabWidth": 2,
|
|
117
|
+
"trailingComma": "es5",
|
|
118
|
+
"useTabs": false
|
|
119
|
+
},
|
|
120
|
+
"jest": {
|
|
121
|
+
"preset": "react-native",
|
|
122
|
+
"modulePathIgnorePatterns": [
|
|
123
|
+
"<rootDir>/example/node_modules",
|
|
124
|
+
"<rootDir>/lib/"
|
|
125
|
+
]
|
|
126
|
+
},
|
|
127
|
+
"commitlint": {
|
|
128
|
+
"extends": [
|
|
129
|
+
"@commitlint/config-conventional"
|
|
130
|
+
]
|
|
131
|
+
},
|
|
132
|
+
"release-it": {
|
|
133
|
+
"git": {
|
|
134
|
+
"commitMessage": "chore: release ${version}",
|
|
135
|
+
"tagName": "v${version}"
|
|
136
|
+
},
|
|
137
|
+
"npm": {
|
|
138
|
+
"publish": true
|
|
139
|
+
},
|
|
140
|
+
"github": {
|
|
141
|
+
"release": true
|
|
142
|
+
},
|
|
143
|
+
"plugins": {
|
|
144
|
+
"@release-it/conventional-changelog": {
|
|
145
|
+
"preset": {
|
|
146
|
+
"name": "angular"
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
},
|
|
151
|
+
"create-react-native-library": {
|
|
152
|
+
"type": "turbo-module",
|
|
153
|
+
"languages": "kotlin-objc",
|
|
154
|
+
"tools": [
|
|
155
|
+
"eslint",
|
|
156
|
+
"jest",
|
|
157
|
+
"lefthook",
|
|
158
|
+
"release-it"
|
|
159
|
+
],
|
|
160
|
+
"version": "0.56.0"
|
|
161
|
+
}
|
|
162
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { TurboModuleRegistry } from 'react-native';
|
|
2
|
+
import type { TurboModule } from 'react-native';
|
|
3
|
+
|
|
4
|
+
export interface Spec extends TurboModule {
|
|
5
|
+
getSSID(): Promise<string | null>;
|
|
6
|
+
getBSSID(): Promise<string | null>;
|
|
7
|
+
getBroadcast(): Promise<string | null>;
|
|
8
|
+
getIPAddress(): Promise<string>;
|
|
9
|
+
getIPV6Address(): Promise<string>;
|
|
10
|
+
getGatewayIPAddress(): Promise<string>;
|
|
11
|
+
getIPV4Address(): Promise<string>;
|
|
12
|
+
getWIFIIPV4Address(): Promise<string>;
|
|
13
|
+
getSubnet(): Promise<string>;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export default TurboModuleRegistry.getEnforcing<Spec>('RNNetworkInfo');
|
package/src/index.tsx
ADDED