@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
|
-
|
|
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
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
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.
|
|
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",
|