// // RESTAuthorization.swift // MullvadREST // // Created by pronebird on 16/04/2022. // Copyright © 2025 Mullvad VPN AB. All rights reserved. // import Foundation import MullvadTypes import Operations protocol RESTAuthorizationProvider { func getAuthorization(completion: @escaping @Sendable (Result) -> Void) -> Cancellable } extension REST { typealias Authorization = String struct AccessTokenProvider: RESTAuthorizationProvider { private let accessTokenManager: RESTAccessTokenManagement private let accountNumber: String init(accessTokenManager: RESTAccessTokenManagement, accountNumber: String) { self.accessTokenManager = accessTokenManager self.accountNumber = accountNumber } func getAuthorization( completion: @escaping @Sendable (Result) -> Void ) -> Cancellable { accessTokenManager.getAccessToken(accountNumber: accountNumber) { result in completion( result.map { tokenData in tokenData.accessToken }) } } } } extension REST.Proxy where ConfigurationType == REST.AuthProxyConfiguration { func createAuthorizationProvider(accountNumber: String) -> RESTAuthorizationProvider { REST.AccessTokenProvider( accessTokenManager: configuration.accessTokenManager, accountNumber: accountNumber ) } }