secretive/Sources/SecretAgent/XPCInputParser.swift
Max Goedjen 11074999ad
.
2025-09-06 15:24:23 -07:00

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")
}
}