// // SDLApi.swift // sdlan // // Created by 安礼成 on 2024/6/5. // import Foundation struct JSONRPCResponse: Decodable { let result: T? let error: JSONRPCError? } struct JSONRPCError: Decodable { let code: Int let message: String let data: String? } struct SDLAPI { static let baseUrl: String = "https://punchnet.s5s8.com/api" static let testBaseUrl: String = "http://127.0.0.1:19082/test" struct Upgrade: Decodable { let upgrade_type: Int let upgrade_prompt: String let upgrade_address: String } struct NetworkProfile: Decodable { struct NetworkItem: Decodable { let name: String let code: String } let network: [NetworkItem] } static func checkVersion(clientId: String, version: Int, channel: String) async throws -> JSONRPCResponse { let params: [String:Any] = [ "client_id": clientId, "version": version, "channel": channel ] let postData = try! JSONSerialization.data(withJSONObject: params) var request = URLRequest(url: URL(string: baseUrl + "/upgrade")!) request.httpMethod = "POST" request.addValue("application/json", forHTTPHeaderField: "Content-Type") request.httpBody = postData let (data, _) = try await URLSession.shared.data(for: request) return try JSONDecoder().decode(JSONRPCResponse.self, from: data) } static func getUserNetworks(clientId: String) async throws -> JSONRPCResponse { let params: [String:Any] = [ "client_id": clientId ] let postData = try! JSONSerialization.data(withJSONObject: params) var request = URLRequest(url: URL(string: baseUrl + "/get_user_network")!) request.httpMethod = "POST" request.addValue("application/json", forHTTPHeaderField: "Content-Type") request.httpBody = postData let (data, _) = try await URLSession.shared.data(for: request) return try JSONDecoder().decode(JSONRPCResponse.self, from: data) } }