@cappitolian/http-local-server-swifter 0.0.24 → 0.0.25

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.
@@ -24,52 +24,27 @@ public protocol HttpLocalServerSwifterDelegate: AnyObject {
24
24
  super.init()
25
25
  }
26
26
 
27
+ // En HttpLocalServerSwifter.swift — connect() sin checkPermission
27
28
  @objc public func connect(_ call: CAPPluginCall) {
28
- // Check Local Network permission first via NWBrowser callback.
29
- // iOS only shows the system dialog once — subsequent calls return the stored decision.
30
- // We must do this BEFORE starting the server because Swifter uses plain TCP sockets
31
- // which iOS never blocks — the denial only surfaces through Bonjour/mDNS errors,
32
- // not through server.start() failures.
33
- networkPermission.checkPermission { [weak self] status in
29
+ DispatchQueue.global(qos: .userInitiated).async { [weak self] in
34
30
  guard let self = self else { return }
35
-
36
- if status == .denied {
37
- print("❌ SWIFTER: Local Network permission denied by user")
38
- call.reject("LOCAL_NETWORK_PERMISSION_DENIED")
39
- return
40
- }
41
-
42
- // .granted or .unknown — proceed with server startup.
43
- // .unknown means iOS didn't respond within the timeout (simulator, already granted, etc.)
44
- DispatchQueue.global(qos: .userInitiated).async { [weak self] in
45
- guard let self = self else { return }
46
-
47
- self.disconnect()
48
- let server = HttpServer()
49
- self.webServer = server
50
-
51
- // Use middleware to catch ALL requests and avoid route misses.
52
- server.middleware.append { [weak self] request in
53
- if request.method == "OPTIONS" {
54
- return self?.corsResponse() ?? .raw(204, "No Content", nil, nil)
55
- }
56
- return self?.processRequest(request) ?? .raw(500, "Internal Server Error", nil, nil)
57
- }
58
-
59
- do {
60
- try server.start(self.defaultPort, forceIPv4: true)
61
- let ip = Self.getWiFiAddress() ?? "127.0.0.1"
62
-
63
- print("🚀 SWIFTER: Server running on http://\(ip):\(self.defaultPort)")
64
-
65
- call.resolve([
66
- "ip": ip,
67
- "port": Int(self.defaultPort)
68
- ])
69
- } catch {
70
- print("❌ SWIFTER ERROR: \(error)")
71
- call.reject("Could not start server")
31
+ self.disconnect()
32
+ let server = HttpServer()
33
+ self.webServer = server
34
+ server.middleware.append { [weak self] request in
35
+ if request.method == "OPTIONS" {
36
+ return self?.corsResponse() ?? .raw(204, "No Content", nil, nil)
72
37
  }
38
+ return self?.processRequest(request) ?? .raw(500, "Internal Server Error", nil, nil)
39
+ }
40
+ do {
41
+ try server.start(self.defaultPort, forceIPv4: true)
42
+ let ip = Self.getWiFiAddress() ?? "127.0.0.1"
43
+ print("🚀 SWIFTER: Server running on http://\(ip):\(self.defaultPort)")
44
+ call.resolve(["ip": ip, "port": Int(self.defaultPort)])
45
+ } catch {
46
+ print("❌ SWIFTER ERROR: \(error)")
47
+ call.reject("Could not start server")
73
48
  }
74
49
  }
75
50
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cappitolian/http-local-server-swifter",
3
- "version": "0.0.24",
3
+ "version": "0.0.25",
4
4
  "description": "Runs a local HTTP server on your device, accessible over LAN. Supports connect, disconnect, GET, and POST methods with IP and port discovery.",
5
5
  "main": "dist/plugin.cjs.js",
6
6
  "module": "dist/esm/index.js",