             }
         }
         
+        //configuration
         let configuration = URLSessionConfiguration.default
         configuration.timeoutIntervalForRequest = timeout
         
+        //session
         let session = URLSession(configuration: configuration, delegate: self, delegateQueue: nil)
         
         let dataTask = session.dataTask(with: request, completionHandler: {

        completionHandler?(.failure(.descriptive(message: message)))
    }
    
    private func send(httpMethod: String) {
        
        guard let url = self.url else {
            handleGenericError(with: "URL cannot be `nil`")
            return

        var request = URLRequest(url: nsurl, cachePolicy: .useProtocolCachePolicy)
        request.httpMethod = httpMethod
        
        //basic auth
        let basicAuthResult = createBasicAuth()
        switch basicAuthResult {
        case .success(let basicAuth):
            request.setValue(basicAuth, forHTTPHeaderField: "Authorization")
        case .failure(let error):
            MochaLogger.log(error.description)
        }
        
        //headers
        if header.count > 0 {
            for (key, value) in header {
                request.setValue(value, forHTTPHeaderField: key)
