method: method
headers: 'Content-Type': content_type
opts.headers['Authorization'] = token if token?
- # no Accept header: -> unsupported media type
- opts.headers['Accept'] = '*/*;q=0.8' # -> bad request (in json)
- #opts.headers['Accept'] = 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' # -> bad request (in json) or blank 404
- #opts.headers['Accept'] = 'application/json' -> unsupported media type
+ opts.headers['Accept'] = '*/*;q=0.8'
async.waterfall [
(callback) ->
if content_type is 'multipart/form-data'
exports.app_publish = (token, app_name, zip_file, callback) ->
exports.app_update_files token, app_name, zip_file, (err) ->
return callback err if err?
- # FIXME add "restart" call that only calls app_info once
- exports.app_stop token, app_name, (err) ->
- if err?
- return callback "Couldn't stop the app (to restart it). App is probably still running old version (though perhaps accessing new files.). Server responded: #{err}"
- exports.app_start token, app_name, (err) ->
- if err?
- return callback "CRITICAL ERROR: Couldn't start the app back up! Server responded: #{err}"
- callback()
+ exports.app_restart token, app_name, callback
exports.app_update_files = (token, app_name, zip_file, callback) ->
request(
json_put "/apps/#{app_name}", info, token, callback
app_set_state = (token, app_name, state, callback) ->
- exports.app_info token, app_name, (err, info) ->
- return callback err if err?
- info.state = state
- exports.app_set_info token, app_name, info, callback
+ async.waterfall [
+ (callback) ->
+ exports.app_info token, app_name, callback
+ (info, callback) ->
+ info.state = state
+ exports.app_set_info token, app_name, info, callback
+ ], callback
exports.app_start = (token, app_name, callback) ->
app_set_state token, app_name, 'STARTED', callback
exports.app_stop = (token, app_name, callback) ->
app_set_state token, app_name, 'STOPPED', callback
+exports.app_restart = (token, app_name, callback) ->
+ # Server requires you to fetch the app state before each call to change
+ # it, so there's no quicker way than just calling app_stop then app_start
+ async.waterfall [
+ (callback) -> exports.app_stop token, app_name, callback
+ (callback) -> exports.app_start token, app_name, callback
+ ], callback
app_get = (path) ->
return (token, app_name, callback) ->