 
 public class GraphClient {
     
-    public let session:  URLSession?
+    public let session:  URLSession
     
     private let apiURL:  URL
     private let headers: [String : String]

    // ----------------------------------
    //  MARK: - Queries -
    //
	public func queryGraphWith(_ query: ApiSchema.QueryRootQuery, completionHandler: @escaping (ApiSchema.QueryRoot?, GraphError?) -> Void) -> URLSessionTask? {
		return graphRequestTask(query: query, completionHandler: completionHandler)
	}
	
    // ----------------------------------
    //  MARK: - Mutations -
    //
	public func mutateGraphWith(_ mutation: ApiSchema.MutationQuery, completionHandler: @escaping (ApiSchema.Mutation?, GraphError?) -> Void) -> URLSessionTask? {
		return graphRequestTask(query: mutation, completionHandler: completionHandler)
	}
	
    // ----------------------------------
    //  MARK: - Request Management -
    //
	private func graphRequestTask<Q: GraphQL.AbstractQuery, R: GraphQL.AbstractResponse>(query: Q, completionHandler: @escaping (R?, GraphError?) -> Void) -> URLSessionTask? {
        
		func processGraphResponse(data: Data?, response: URLResponse?, error: Error?) -> (json: JSON?, error: GraphError?) {
            

            return (json: graphData, error: queryError)
		}
		
		return self.session.dataTask(with: graphRequest(query: query)) { (data, response, error) in
			let (json, error) = processGraphResponse(data: data, response: response, error: error)
			DispatchQueue.main.async {
				if let json = json {
