 	/// - Parameter type: Object name
 	/// - Returns: Promise<ObjectDescription>
 	open func describe(type: String) -> Promise<ObjectDescription> {
-		return request(.describe(type: type, version: version)) {
-			Alamofire.request($0).validateSalesforceResponse().responseJSONDictionary()
-		}.then(on: q) {
+		return requestor.request(resource: .describe(type: type, version: version)).asJSON().then(on: q) {
 			(json: [String: Any]) -> ObjectDescription in
 			return try ObjectDescription(json: json)
 		}

	/// - Parameter path: the 'nextRecordsPath' property of a previously-obtained QueryResult.
	/// - Returns: Promise of a QueryResult
	open func queryNext(path: String) -> Promise<QueryResult> {
		return request(.queryNext(path: path)) {
			Alamofire.request($0).validateSalesforceResponse().responseJSONDictionary()
		}.then(on: q) {
			(json: [String: Any]) -> QueryResult in
			return try QueryResult(json: json)
		}

	/// - Parameter fields: Optional array of field names to retrieve. If nil, all fields will be retrieved
	/// - Returns: Promise of a dictionary keyed by field names (aka "Record")
	open func retrieve(type: String, id: String, fields: [String]? = nil) -> Promise<Record> {
		return requestor.request(resource: .retrieve(type: type, id: id, fields: fields, version: version)).asJSON()
	}
	
	/// Asynchronously retrieves multiple records of the same type, by ID
