diff options
| -rw-r--r-- | ios/MullvadVPN/MullvadAPI.swift | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/ios/MullvadVPN/MullvadAPI.swift b/ios/MullvadVPN/MullvadAPI.swift index 9e6add133a..7ba5de4d5c 100644 --- a/ios/MullvadVPN/MullvadAPI.swift +++ b/ios/MullvadVPN/MullvadAPI.swift @@ -38,6 +38,22 @@ enum DeferReasonError: Error { case server(MullvadAPI.ResponseError) } +/// A response received when sending the AppStore receipt to the backend +struct SendAppStoreReceiptResponse: Codable { + let timeAdded: TimeInterval + let newExpiry: Date + + /// Returns a formatted string for the `timeAdded` interval, i.e "30 days" + var formattedTimeAdded: String? { + let formatter = DateComponentsFormatter() + formatter.allowedUnits = [.day, .hour] + formatter.unitsStyle = .full + formatter.maximumUnitCount = 1 + + return formatter.string(from: timeAdded) + } +} + class MullvadAPI { private let session: URLSession @@ -172,6 +188,15 @@ class MullvadAPI { return MullvadAPI.makeDataTaskPublisher(request: request) } + func sendAppStoreReceipt(accountToken: String, receiptData: Data) -> AnyPublisher<Response<SendAppStoreReceiptResponse>, MullvadAPI.Error> { + let request = JsonRpcRequest(method: "apple_payment", params: [ + AnyEncodable(accountToken), + AnyEncodable(receiptData) + ]) + + return MullvadAPI.makeDataTaskPublisher(request: request) + } + private static func makeDataTaskPublisher<T: Decodable>(request: JsonRpcRequest) -> AnyPublisher<Response<T>, MullvadAPI.Error> { return Just(request) .encode(encoder: makeJSONEncoder()) |
