this repo has no description
at main 2.2 kB view raw
1// 2// ATProtocolService.swift 3// AtProtoBackup 4// 5// Created by Assistant on 8/26/25. 6// 7 8import Foundation 9 10struct DIDResponse: Codable { 11 let did: String 12 let handle: String 13 let pds: String 14} 15 16class ATProtocolService { 17 static let shared = ATProtocolService() 18 19 private init() {} 20 21 func lookupDID(for handle: String) async throws -> (parsed: DIDResponse, jsonData: Data) { 22 print("[ATProtocolService] lookupDID called with handle: '\(handle)'") 23 24 guard let url = URL(string: "https://slingshot.microcosm.blue/xrpc/com.bad-example.identity.resolveMiniDoc?identifier=\(handle)") else { 25 print("[ATProtocolService] Failed to create URL") 26 throw ATProtocolError.invalidURL 27 } 28 29 print("[ATProtocolService] Making request to: \(url)") 30 let (data, response) = try await URLSession.shared.data(from: url) 31 32 print("[ATProtocolService] Received response") 33 34 guard let httpResponse = response as? HTTPURLResponse else { 35 print("[ATProtocolService] Response is not HTTPURLResponse") 36 throw ATProtocolError.invalidResponse 37 } 38 39 print("[ATProtocolService] HTTP Status Code: \(httpResponse.statusCode)") 40 41 guard httpResponse.statusCode == 200 else { 42 print("[ATProtocolService] Non-200 status code") 43 throw ATProtocolError.invalidResponse 44 } 45 46 print("[ATProtocolService] Response data length: \(data.count) bytes") 47 print("[ATProtocolService] Raw response: \(String(data: data, encoding: .utf8) ?? "Unable to decode as UTF-8")") 48 49 do { 50 let didResponse = try JSONDecoder().decode(DIDResponse.self, from: data) 51 print("[ATProtocolService] Successfully decoded - DID: \(didResponse.did)") 52 return (parsed: didResponse, jsonData: data) 53 } catch { 54 print("[ATProtocolService] Decoding error: \(error)") 55 throw ATProtocolError.decodingError 56 } 57 } 58} 59 60enum ATProtocolError: LocalizedError { 61 case invalidURL 62 case invalidResponse 63 case decodingError 64 65 var errorDescription: String? { 66 switch self { 67 case .invalidURL: 68 return "Invalid URL" 69 case .invalidResponse: 70 return "Invalid response from server" 71 case .decodingError: 72 return "Failed to decode response" 73 } 74 } 75}