feat(KAN-70): integrate native workspace and update settings
CI/CD / preconditions (pull_request) Successful in 1s
Native JavaScript checks / Native launcher and release tests (pull_request) Successful in 1m2s
macOS checks / Native Rust tests and unsigned build (pull_request) Successful in 1m38s
CI/CD / test_and_check_app (pull_request) Successful in 6m47s
CI/CD / Publish immutable image (pull_request) Skipped

This commit is contained in:
2026-09-29 17:11:10 +02:00
parent 752ba2cd38
commit 912cfc28c2
32 changed files with 1651 additions and 38 deletions
@@ -65,3 +65,32 @@ struct WorkspaceConnection {
return true
}
}
enum NativeSettingsError: Error { case invalidRequest, incompatibleVersion, invalidServer }
struct NativeSettingsRequest {
let id: Int
let action: String
let payload: [String: Any]
static func parse(_ body: String) throws -> NativeSettingsRequest {
guard body.utf8.count <= 8192,
let value = try JSONSerialization.jsonObject(with: Data(body.utf8)) as? [String: Any],
Set(value.keys) == Set(["version", "id", "action", "payload"]),
let version = value["version"] as? NSNumber, CFGetTypeID(version) != CFBooleanGetTypeID(),
version == 1 else { throw NativeSettingsError.incompatibleVersion }
guard let id = value["id"] as? NSNumber, CFGetTypeID(id) != CFBooleanGetTypeID(),
id.doubleValue >= 0, id.doubleValue <= 9007199254740991, id.doubleValue.rounded() == id.doubleValue,
let action = value["action"] as? String,
let payload = value["payload"] as? [String: Any] else { throw NativeSettingsError.invalidRequest }
switch action {
case "getState", "settingsReady", "openSettings":
guard payload.isEmpty else { throw NativeSettingsError.invalidRequest }
case "setWorkspace":
guard Set(payload.keys) == Set(["server"]), payload["server"] is String else { throw NativeSettingsError.invalidRequest }
default: throw NativeSettingsError.invalidRequest
}
return NativeSettingsRequest(id: id.intValue, action: action, payload: payload)
}
}