this repo has no description
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}