munim-wifi 0.1.2 → 0.1.3

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.
@@ -50,9 +50,15 @@ class HybridMunimWifi: HybridMunimWifiSpec {
50
50
 
51
51
  NEHotspotNetwork.fetchCurrent { network in
52
52
  if let network = network {
53
+ // Get IP address
54
+ let ipAddress = self.getIPAddressSync()
53
55
  result = CurrentNetworkInfo(
54
56
  ssid: network.ssid,
55
- bssid: network.bssid ?? ""
57
+ bssid: network.bssid ?? "",
58
+ ipAddress: ipAddress,
59
+ subnetMask: nil,
60
+ gateway: nil,
61
+ dnsServers: nil
56
62
  )
57
63
  }
58
64
  semaphore.signal()
@@ -62,6 +68,38 @@ class HybridMunimWifi: HybridMunimWifiSpec {
62
68
  return result
63
69
  }
64
70
 
71
+ // Helper to get IP address synchronously
72
+ private func getIPAddressSync() -> String? {
73
+ var address: String?
74
+ var ifaddr: UnsafeMutablePointer<ifaddrs>?
75
+
76
+ guard getifaddrs(&ifaddr) == 0 else { return nil }
77
+ defer { freeifaddrs(ifaddr) }
78
+
79
+ guard var ptr = ifaddr else { return nil }
80
+
81
+ while ptr != nil {
82
+ defer { ptr = ptr.pointee.ifa_next }
83
+
84
+ let interface = ptr.pointee
85
+ let addrFamily = interface.ifa_addr.pointee.sa_family
86
+
87
+ if addrFamily == UInt8(AF_INET) {
88
+ let name = String(cString: interface.ifa_name)
89
+ if name == "en0" || name == "en1" {
90
+ var hostname = [CChar](repeating: 0, count: Int(NI_MAXHOST))
91
+ getnameinfo(interface.ifa_addr, socklen_t(interface.ifa_addr.pointee.sa_len),
92
+ &hostname, socklen_t(hostname.count),
93
+ nil, socklen_t(0), NI_NUMERICHOST)
94
+ address = String(cString: hostname)
95
+ break
96
+ }
97
+ }
98
+ }
99
+
100
+ return address
101
+ }
102
+
65
103
  func scanNetworks(options: ScanOptions?) throws -> Promise<[WifiNetwork]> {
66
104
  let promise = Promise<[WifiNetwork]>()
67
105
  // iOS limitation: Cannot scan for networks directly
@@ -78,7 +116,7 @@ class HybridMunimWifi: HybridMunimWifiSpec {
78
116
  channel: nil, // Not available on iOS
79
117
  capabilities: nil,
80
118
  isSecure: nil,
81
- timestamp: Int64(Date().timeIntervalSince1970 * 1000)
119
+ timestamp: Date().timeIntervalSince1970 * 1000
82
120
  )
83
121
  scanResults = [network]
84
122
  promise.resolve(withResult: [network])
@@ -102,7 +140,7 @@ class HybridMunimWifi: HybridMunimWifiSpec {
102
140
  channel: nil,
103
141
  capabilities: nil,
104
142
  isSecure: nil,
105
- timestamp: Int64(Date().timeIntervalSince1970 * 1000)
143
+ timestamp: Date().timeIntervalSince1970 * 1000
106
144
  )
107
145
  scanResults = [network]
108
146
  }
@@ -138,14 +176,15 @@ class HybridMunimWifi: HybridMunimWifiSpec {
138
176
  channel: nil,
139
177
  capabilities: nil,
140
178
  isSecure: nil,
141
- timestamp: Int64(Date().timeIntervalSince1970 * 1000)
179
+ timestamp: Date().timeIntervalSince1970 * 1000
142
180
  )]
143
181
  }
144
182
  }
145
183
 
146
184
  let fingerprint = WifiFingerprint(
147
185
  networks: networks,
148
- timestamp: Int64(Date().timeIntervalSince1970 * 1000)
186
+ timestamp: Date().timeIntervalSince1970 * 1000,
187
+ location: nil
149
188
  )
150
189
  promise.resolve(withResult: fingerprint)
151
190
  return promise
@@ -154,7 +193,7 @@ class HybridMunimWifi: HybridMunimWifiSpec {
154
193
  func getRSSI(ssid: String) throws -> Promise<Variant_NullType_Double> {
155
194
  let promise = Promise<Variant_NullType_Double>()
156
195
  // iOS limitation: RSSI not available for scanned networks
157
- promise.resolve(withResult: .first(NullType()))
196
+ promise.resolve(withResult: .first(margelo.nitro.NullType.null))
158
197
  return promise
159
198
  }
160
199
 
@@ -163,7 +202,7 @@ class HybridMunimWifi: HybridMunimWifiSpec {
163
202
  if let current = try? getCurrentNetworkSync(), current.ssid == ssid {
164
203
  promise.resolve(withResult: .second(current.bssid))
165
204
  } else {
166
- promise.resolve(withResult: .first(NullType()))
205
+ promise.resolve(withResult: .first(margelo.nitro.NullType.null))
167
206
  }
168
207
  return promise
169
208
  }
@@ -171,7 +210,7 @@ class HybridMunimWifi: HybridMunimWifiSpec {
171
210
  func getChannelInfo(ssid: String) throws -> Promise<Variant_NullType_ChannelInfo> {
172
211
  let promise = Promise<Variant_NullType_ChannelInfo>()
173
212
  // iOS limitation: Channel and frequency not available
174
- promise.resolve(withResult: .first(NullType()))
213
+ promise.resolve(withResult: .first(margelo.nitro.NullType.null))
175
214
  return promise
176
215
  }
177
216
 
@@ -186,11 +225,11 @@ class HybridMunimWifi: HybridMunimWifiSpec {
186
225
  channel: nil, // Not available on iOS
187
226
  capabilities: nil,
188
227
  isSecure: nil,
189
- timestamp: Int64(Date().timeIntervalSince1970 * 1000)
228
+ timestamp: Date().timeIntervalSince1970 * 1000
190
229
  )
191
230
  promise.resolve(withResult: .second(network))
192
231
  } else {
193
- promise.resolve(withResult: .first(NullType()))
232
+ promise.resolve(withResult: .first(margelo.nitro.NullType.null))
194
233
  }
195
234
  return promise
196
235
  }
@@ -202,9 +241,15 @@ class HybridMunimWifi: HybridMunimWifiSpec {
202
241
 
203
242
  NEHotspotNetwork.fetchCurrent { network in
204
243
  if let network = network {
244
+ // Get IP address
245
+ let ipAddress = self.getIPAddressSync()
205
246
  result = CurrentNetworkInfo(
206
247
  ssid: network.ssid,
207
- bssid: network.bssid ?? ""
248
+ bssid: network.bssid ?? "",
249
+ ipAddress: ipAddress,
250
+ subnetMask: nil,
251
+ gateway: nil,
252
+ dnsServers: nil
208
253
  )
209
254
  }
210
255
  semaphore.signal()
@@ -215,7 +260,7 @@ class HybridMunimWifi: HybridMunimWifiSpec {
215
260
  if let result = result {
216
261
  promise.resolve(withResult: .second(result))
217
262
  } else {
218
- promise.resolve(withResult: .first(NullType()))
263
+ promise.resolve(withResult: .first(margelo.nitro.NullType.null))
219
264
  }
220
265
  return promise
221
266
  }
@@ -269,37 +314,12 @@ class HybridMunimWifi: HybridMunimWifiSpec {
269
314
 
270
315
  func getIPAddress() throws -> Promise<Variant_NullType_String> {
271
316
  let promise = Promise<Variant_NullType_String>()
272
- var address: String?
273
- var ifaddr: UnsafeMutablePointer<ifaddrs>?
274
-
275
- guard getifaddrs(&ifaddr) == 0 else { return nil }
276
- defer { freeifaddrs(ifaddr) }
277
-
278
- guard var ptr = ifaddr else { return nil }
279
-
280
- while ptr != nil {
281
- defer { ptr = ptr.pointee.ifa_next }
282
-
283
- let interface = ptr.pointee
284
- let addrFamily = interface.ifa_addr.pointee.sa_family
285
-
286
- if addrFamily == UInt8(AF_INET) {
287
- let name = String(cString: interface.ifa_name)
288
- if name == "en0" || name == "en1" {
289
- var hostname = [CChar](repeating: 0, count: Int(NI_MAXHOST))
290
- getnameinfo(interface.ifa_addr, socklen_t(interface.ifa_addr.pointee.sa_len),
291
- &hostname, socklen_t(hostname.count),
292
- nil, socklen_t(0), NI_NUMERICHOST)
293
- address = String(cString: hostname)
294
- break
295
- }
296
- }
297
- }
317
+ let address = getIPAddressSync()
298
318
 
299
319
  if let address = address {
300
320
  promise.resolve(withResult: .second(address))
301
321
  } else {
302
- promise.resolve(withResult: .first(NullType()))
322
+ promise.resolve(withResult: .first(margelo.nitro.NullType.null))
303
323
  }
304
324
  return promise
305
325
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "munim-wifi",
3
- "version": "0.1.2",
3
+ "version": "0.1.3",
4
4
  "description": "munim-wifi is a react native package built with Nitro",
5
5
  "main": "./lib/commonjs/index.js",
6
6
  "module": "./lib/module/index.js",