     return exchangeToken(with: params, completion: completion)
   }
   
-  @discardableResult private func exchangeRefreshToken(_ completion: @escaping (Result<Bool, Error>) -> Void) -> URLSessionTask? {
+  @discardableResult
+  public func exchangeRefreshToken(_ completion: @escaping (Result<Bool, Error>) -> Void) -> URLSessionTask? {
     
     guard let token = token else {
       completion(.failure(buildError(with: .unauthorized)))

    return exchangeToken(with: params, completion: completion)
  }
  
  private func exchangeToken(with params: [String : Any], completion: @escaping (Result<Bool, Error>) -> Void) -> URLSessionTask? {
    let res = resource(for: "/oauth/token", params: params, method: .post, parse: parseToken)
    return load(resource: res, authenticated: true) { [weak self] result in
      switch result {

import Foundation

extension Trakt {
  
  // MARK: Properties
  
  public var authorized: Bool {
    guard let token = token?.accessToken else { return false }
