summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--ios/MullvadVPN/MullvadAPI.swift25
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())