 Absorb all the delegates methods of NSURLSession and forwards them to pretty closures.
 This is basically the sin eater for NSURLSession.
 */
-class DelegateManager: NSObject, URLSessionDataDelegate, URLSessionDownloadDelegate {
+public class DelegateManager: NSObject, URLSessionDataDelegate, URLSessionDownloadDelegate {
     //the singleton to handle delegate needs of NSURLSession
     static let sharedInstance = DelegateManager()
     

    }
    
    //handle getting data
    func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive data: Data) {
        addResponseForTask(dataTask)
        guard let resp = responseForTask(dataTask) else { return }
        resp.collectData.append(data)

    }
    
    //handle authenication
    public func urlSession(_ session: URLSession, task: URLSessionTask, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {
        var sec = security
        var au = auth
        if let resp = responseForTask(task) {
