mirror of
https://github.com/maxgoedjen/secretive.git
synced 2025-09-15 08:50:57 +00:00
44 lines
1.5 KiB
Swift
44 lines
1.5 KiB
Swift
import Foundation
|
|
import SecretAgentKit
|
|
|
|
public final class XPCAgentInputParser: SSHAgentInputParserProtocol {
|
|
|
|
private let session: XPCSession
|
|
private let queue = DispatchQueue(label: "com.maxgoedjen.Secretive.AgentRequestParser", qos: .userInteractive)
|
|
|
|
public init() throws {
|
|
if #available(macOS 26.0, *) {
|
|
session = try XPCSession(xpcService: "com.maxgoedjen.Secretive.AgentRequestParser", targetQueue: queue, options: .inactive, requirement: .isFromSameTeam())
|
|
} else {
|
|
session = try XPCSession(xpcService: "com.maxgoedjen.Secretive.AgentRequestParser", targetQueue: queue, options: .inactive)
|
|
}
|
|
try session.activate()
|
|
}
|
|
|
|
public func parse(data: Data) async throws -> SSHAgent.Request {
|
|
try await withCheckedThrowingContinuation { continuation in
|
|
do {
|
|
try session.send(data) { result in
|
|
switch result {
|
|
case .success(let result):
|
|
do {
|
|
continuation.resume(returning: try result.decode(as: SSHAgent.Request.self))
|
|
} catch {
|
|
continuation.resume(throwing: error)
|
|
}
|
|
case .failure(let error):
|
|
continuation.resume(throwing: error)
|
|
}
|
|
}
|
|
} catch {
|
|
continuation.resume(throwing: error)
|
|
}
|
|
}
|
|
}
|
|
|
|
deinit {
|
|
session.cancel(reason: "Done")
|
|
}
|
|
|
|
}
|