     ///
     /// - parameter request: An unauthenticated URLRequest.
     /// - parameter completion: A callback to invoke with the authenticated request.
-    public func authenticateRequest(_ request: URLRequest, completion: @escaping (Result<URLRequest, NSError>) -> ()) {
+    open func authenticateRequest(_ request: URLRequest, completion: @escaping (Result<URLRequest, NSError>) -> ()) {
         requestQueue.async {
             self.blockRequestQueue()
             self.authenticateRequestConcurrently(request, completion: completion)


/// The all-seeing and all-hearing guardian sentry of your application who
/// stands on the rainbow bridge network to authorize relevant requests.
@objc public class Heimdallr: NSObject {
    public let tokenURL: URL
    private let credentials: OAuthClientCredentials?


    /// - parameter grantType: The grant type URI of the extension grant
    /// - parameter parameters: The required parameters for the external grant
    /// - parameter completion: A callback to invoke when the request completed.
    open func requestAccessToken(grantType: String, parameters: [String: String], completion: @escaping (Result<Void, NSError>) -> ()) {
        requestAccessToken(grant: .extension(grantType, parameters)) { result in
            completion(result.map { _ in return })
        }
