Files
purchases-ios/Sources/Networking/IdentityAPI.swift
T

48 lines
1.8 KiB
Swift
Raw Normal View History

//
// Copyright RevenueCat Inc. All Rights Reserved.
//
// Licensed under the MIT License (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// https://opensource.org/licenses/MIT
//
// IdentityAPI.swift
//
// Created by Joshua Liebowitz on 6/15/22.
import Foundation
class IdentityAPI {
2022-08-15 15:01:51 -07:00
typealias LogInResponse = Result<(info: CustomerInfo, created: Bool), BackendError>
typealias LogInResponseHandler = (LogInResponse) -> Void
private let logInCallbacksCache: CallbackCache<LogInCallback>
private let backendConfig: BackendConfiguration
init(backendConfig: BackendConfiguration) {
self.backendConfig = backendConfig
self.logInCallbacksCache = CallbackCache<LogInCallback>()
}
func logIn(currentAppUserID: String,
newAppUserID: String,
completion: @escaping LogInResponseHandler) {
let config = NetworkOperation.UserSpecificConfiguration(httpClient: self.backendConfig.httpClient,
appUserID: currentAppUserID)
let factory = LogInOperation.createFactory(configuration: config,
newAppUserID: newAppUserID,
loginCallbackCache: self.logInCallbacksCache)
let loginCallback = LogInCallback(cacheKey: factory.cacheKey, completion: completion)
let cacheStatus = self.logInCallbacksCache.add(loginCallback)
self.backendConfig.operationQueue.addCacheableOperation(with: factory, cacheStatus: cacheStatus)
}
}
2022-08-31 13:30:38 -07:00
// @unchecked because:
// - Class is not `final` (it's mocked). This implicitly makes subclasses `Sendable` even if they're not thread-safe.
extension IdentityAPI: @unchecked Sendable {}