* Add aliased W3C routes
* Implement getTimeouts command
* getTimeouts returns an object containing all the timeouts and their values as key-value pairings
* Added routeHandler too
* Added w3c routes
* Remember protocol requested in createSession
* Also renamed 'processCaps' to 'processCapabilities'
* Checks the parameters in 'createSession' and determines if it's W3C or MJSONWP
* Add W3C error format
* Add W3C status codes to errors
* When deciding error format to return in mjsonwp.js, check format and then return eitherJSONWP or W3C format
* Added a test for unzipFile (which uses adm-zip)
* Tested that it worked with adm-zip and then failed once adm-zip was taken out
* Replaced 'adm-zip' with zip.extractAllTo from appium-supprt
* Update hash
* Add validateCapabilities and parseCapabilities
* Added merge capabilities
* Moved capabilities into it's own file
* Added capabilities as a possible required param
* Can pass desiredCapabilities or capabilities into createSession
* Remove 'required' desiredCapabilities
* desiredCapabilities isn't required any more because we can provide capabilities as well
* Will need to update validation logic in 'driver.createSession' to do the validation there instead
* Code cleanup
* Skip presence constraint in parseCapabilities
* We don't need to check that items are present until after we've formed the matched capabilities
* Added validation function to routes
* Function 'validate' takes params as an arg and then returns a message if the validation fails
* Uses this to validate that either "capabilities" or "desiredCapabilities" was provided
* Renamed capabilities to caps
* Move caps required validator from process to parse
* Removed InvalidParametersError
* Update BadParametersError so that if a message is added as the 3rd argument it shows a different error message
* Made validation re-usable
APK files were not being installed because they were being written to a file without an "apk" extension. So added back the appExt suffix logic. If it's given and the downloaded file is not a ZIP file, then everything behaves normally. If the downloaded file is a ZIP file, then regardless of what we thought initially, it will be unzipped and placed into another temp location.
Sometimes you can't tell the file type from a URL. Let URL minimizers or
if there are parameters, etc. So just check the content type of the
response. If it's a zip file, ensure it gets unzipped in subsequent
logic. Otherwise, assume it's an app file.
ProxyRequestError will be thrown for all unsuccessfull proxy requests, ProxyRequestError will contain the actual error route cause information(`jsonwp`)
The exact specification of what to return in a findElement command was a little hard to find. This was the first place I looked, so a good place to put the answer.