Skip to content

Commit

Permalink
Removed usage of multipart in favor of working directly on the reques…
Browse files Browse the repository at this point in the history
…t module, which supports unbuffered streaming.
  • Loading branch information
deestan committed Apr 11, 2013
1 parent b37344b commit 8d9c1bb
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 39 deletions.
65 changes: 27 additions & 38 deletions lib/client.js
@@ -1,5 +1,4 @@
var http = require('http');
var multi = require('multiparter');
var request = require('request');
var crypto = require('crypto');
var _ = require('underscore');
var fs = require('fs');
Expand All @@ -16,15 +15,14 @@ var API_PATH = '/assemblies';
* @return {Client} object
*/

var Client = module.exports = function(authKey, authSecret) {
var Client = module.exports = function(authKey, authSecret, apiOptions) {
this.authKey = authKey;
this.authSecret = authSecret;
this.streams = {};
this.apiOptions = {
this.apiOptions = apiOptions || {
host: API_HOST,
port: 80,
path: API_PATH,
method: 'POST'
};

};
Expand Down Expand Up @@ -64,46 +62,37 @@ var methods = function() {
if (!params.auth) { params.auth = {}; }
if (!params.auth.key) { params.auth.key = this.authKey; }
params.auth.expires = expires_date.toISOString();

var req = new multi.request(http, this.apiOptions);

var json_params = JSON.stringify(params);
var hmac = crypto.createHmac('sha1', this.authSecret);
hmac.update(json_params);
var signature = hmac.digest('hex');

req.setParam("params", json_params);
for(var key in fields){
if (_.isObject(fields[key]) || _.isArray(fields[key]))
req.setParam(key, json.stringify(fields[key]));
else
req.setParam(key, fields[key]);
var onResponse = function(err, res) {
if (err) return failure_cb(err);

var result = JSON.parse(res.body);

if (result.ok && success_cb)
return success_cb(result);
if (failure_cb)
return failure_cb(result.error || "NOT OK");
};

var opts = this.apiOptions;
var requestOptions = { uri: "http://" + opts.host + ":" + opts.port + opts.path };
var req = request.post(requestOptions, onResponse);
var form = req.form();
form.append("params", json_params);
for (var key in fields) {
var val = (_.isObject(fields[key]) || _.isArray(fields[key]))
? json.stringify(fields[key])
: fields[key];
form.append(key, val);
}
req.setParam("signature", signature);
form.append("signature", signature);
_.each(this.streams, function(value, key) {
req.addStream(key, value.file, value.type, value.length, value.stream);
});

req.send(function(err, res) {
if(err) return failure_cb(err);
var body = '';
res.on('data', function (chunk) {
body += chunk;
});

res.on('end', function() {
var result = JSON.parse(body);
// console.log('Final data: ' + JSON.stringify(result));

if (result.ok) {
if (success_cb) {
success_cb(result);
}
} else {
if (failure_cb) {
failure_cb(result);
}
}
});
form.append(key, value.stream);
});
};
};
Expand Down
2 changes: 1 addition & 1 deletion package.json
Expand Up @@ -6,7 +6,7 @@
"author": "Geoff Wilson <gmwils@gmail.com>",
"engines": [ "node" ],
"dependencies": {
"multiparter": "0.1.4"
"request": "~2.16.6"
, "underscore": "1.2.1"
},
"devDependencies": {
Expand Down

0 comments on commit 8d9c1bb

Please sign in to comment.