From c522e846d2367cd20c7875a7ebf0c12bb0bec5cb Mon Sep 17 00:00:00 2001 From: simov Date: Tue, 18 Nov 2014 20:42:32 +0200 Subject: [PATCH 01/16] Set transfer encoding for multipart/related to chunked by default --- request.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/request.js b/request.js index 826ed7f1b..8365ab62a 100644 --- a/request.js +++ b/request.js @@ -1429,6 +1429,10 @@ Request.prototype.multipart = function (multipart) { return chunked ? items.append(part) : items.push(new Buffer(part)) } + if (chunked) { + self.setHeader('transfer-encoding', 'chunked') + } + var headerName = self.hasHeader('content-type') if (!headerName || self.headers[headerName].indexOf('multipart') === -1) { self.setHeader('content-type', 'multipart/related; boundary=' + self.boundary) From 9a6e61cea511f2ba1fdafb9e04e77a7efe71c2e4 Mon Sep 17 00:00:00 2001 From: simov Date: Tue, 18 Nov 2014 20:43:45 +0200 Subject: [PATCH 02/16] Test multipart/related with GET request --- tests/test-multipart.js | 50 +++++++++++++++++++++++------------------ 1 file changed, 28 insertions(+), 22 deletions(-) diff --git a/tests/test-multipart.js b/tests/test-multipart.js index bc1ab1438..c8b86724b 100644 --- a/tests/test-multipart.js +++ b/tests/test-multipart.js @@ -44,24 +44,26 @@ function runTest(t, a) { req.on('end', function() { // check for the fields' traces - // 1st field : my_field - t.ok( data.indexOf('name: my_field') !== -1 ) - t.ok( data.indexOf(multipartData[0].body) !== -1 ) - - // 2nd field : my_buffer - t.ok( data.indexOf('name: my_buffer') !== -1 ) - t.ok( data.indexOf(multipartData[1].body) !== -1 ) - - if (chunked) { - // 3rd field : my_file - t.ok( data.indexOf('name: my_file') !== -1 ) - // check for unicycle.jpg traces - t.ok( data.indexOf('2005:06:21 01:44:12') !== -1 ) - - // 4th field : remote_file - t.ok( data.indexOf('name: remote_file') !== -1 ) - // check for http://localhost:8080/file traces - t.ok( data.indexOf('Photoshop ICC') !== -1 ) + if (a.method === 'post') { + // 1st field : my_field + t.ok( data.indexOf('name: my_field') !== -1 ) + t.ok( data.indexOf(multipartData[0].body) !== -1 ) + + // 2nd field : my_buffer + t.ok( data.indexOf('name: my_buffer') !== -1 ) + t.ok( data.indexOf(multipartData[1].body) !== -1 ) + + if (chunked) { + // 3rd field : my_file + t.ok( data.indexOf('name: my_file') !== -1 ) + // check for unicycle.jpg traces + t.ok( data.indexOf('2005:06:21 01:44:12') !== -1 ) + + // 4th field : remote_file + t.ok( data.indexOf('name: remote_file') !== -1 ) + // check for http://localhost:8080/file traces + t.ok( data.indexOf('Photoshop ICC') !== -1 ) + } } res.writeHead(200) @@ -94,7 +96,7 @@ function runTest(t, a) { if (a.json) { reqOptions.json = true } - request.post(reqOptions, function (err, res, body) { + request[a.method](reqOptions, function (err, res, body) { t.equal(err, null) t.equal(res.statusCode, 200) t.deepEqual(body, a.json ? {status: 'done'} : 'done') @@ -105,6 +107,7 @@ function runTest(t, a) { }) } +var methods = ['post', 'get'] var cases = [ {name: '-json +array', args: {json: false, array: true}}, {name: '-json -array', args: {json: false, array: false}}, @@ -127,8 +130,11 @@ var cases = [ {name: '+json +headers -chunked', args: {json: true, headers: true, array: false, chunked: false}} ] -cases.forEach(function (test) { - tape('multipart related ' + test.name, function(t) { - runTest(t, test.args) +methods.forEach(function(method) { + cases.forEach(function (test) { + tape('multipart related ' + test.name, function(t) { + test.args.method = method + runTest(t, test.args) + }) }) }) From f34bef51cc8e2e92dd05815259d490873c7632ca Mon Sep 17 00:00:00 2001 From: simov Date: Tue, 18 Nov 2014 21:10:08 +0200 Subject: [PATCH 03/16] Test req data for each http request type --- tests/test-multipart.js | 40 +++++++++++++++++++--------------------- 1 file changed, 19 insertions(+), 21 deletions(-) diff --git a/tests/test-multipart.js b/tests/test-multipart.js index c8b86724b..ec18ef8ea 100644 --- a/tests/test-multipart.js +++ b/tests/test-multipart.js @@ -44,26 +44,24 @@ function runTest(t, a) { req.on('end', function() { // check for the fields' traces - if (a.method === 'post') { - // 1st field : my_field - t.ok( data.indexOf('name: my_field') !== -1 ) - t.ok( data.indexOf(multipartData[0].body) !== -1 ) - - // 2nd field : my_buffer - t.ok( data.indexOf('name: my_buffer') !== -1 ) - t.ok( data.indexOf(multipartData[1].body) !== -1 ) - - if (chunked) { - // 3rd field : my_file - t.ok( data.indexOf('name: my_file') !== -1 ) - // check for unicycle.jpg traces - t.ok( data.indexOf('2005:06:21 01:44:12') !== -1 ) - - // 4th field : remote_file - t.ok( data.indexOf('name: remote_file') !== -1 ) - // check for http://localhost:8080/file traces - t.ok( data.indexOf('Photoshop ICC') !== -1 ) - } + // 1st field : my_field + t.ok( data.indexOf('name: my_field') !== -1 ) + t.ok( data.indexOf(multipartData[0].body) !== -1 ) + + // 2nd field : my_buffer + t.ok( data.indexOf('name: my_buffer') !== -1 ) + t.ok( data.indexOf(multipartData[1].body) !== -1 ) + + if (chunked) { + // 3rd field : my_file + t.ok( data.indexOf('name: my_file') !== -1 ) + // check for unicycle.jpg traces + t.ok( data.indexOf('2005:06:21 01:44:12') !== -1 ) + + // 4th field : remote_file + t.ok( data.indexOf('name: remote_file') !== -1 ) + // check for http://localhost:8080/file traces + t.ok( data.indexOf('Photoshop ICC') !== -1 ) } res.writeHead(200) @@ -132,7 +130,7 @@ var cases = [ methods.forEach(function(method) { cases.forEach(function (test) { - tape('multipart related ' + test.name, function(t) { + tape('multipart related ' + method + ' ' + test.name, function(t) { test.args.method = method runTest(t, test.args) }) From 068ab7d7ec3588b819ffb1f293be5c956814c323 Mon Sep 17 00:00:00 2001 From: Cliff Crosland Date: Tue, 25 Nov 2014 17:31:19 -0800 Subject: [PATCH 04/16] Update README.md to explain custom file use case Adding documentation to indicate a use case for custom file values and options in multipart form data requests. The added sentence may have saved my team a few hours. Use case: - A user wants to upload a file to your service, and you in turn want to upload the file to an external service. - Constraint: you don't want the file to be written to disk in your service. - Because you're uploading a file from a stream, you need to add custom file-related information manually in your request to the external service. --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index c2c1c860e..c39685e25 100644 --- a/README.md +++ b/README.md @@ -260,6 +260,7 @@ var formData = { fs.createReadStream(__dirname + '/attachment2.jpg') ], // Pass optional meta-data with an 'options' object with style: {value: DATA, options: OPTIONS} + // Use case: for some types of streams, you'll need to provide "file"-related information manually. // See the `form-data` README for more information about options: https://github.com/felixge/node-form-data custom_file: { value: fs.createReadStream('/dev/urandom'), From 9f2fe4cea74e0f5d28c84177a3b7073ae0a103b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maciej=20Ma=C5=82ecki?= Date: Wed, 26 Nov 2014 13:27:31 +0100 Subject: [PATCH 05/16] Upgrade `caseless` to 0.8.0 Fixes #1291. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b3db50d5f..f83bd80cc 100755 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ "main": "index.js", "dependencies": { "bl": "~0.9.0", - "caseless": "~0.7.0", + "caseless": "~0.8.0", "forever-agent": "~0.5.0", "form-data": "~0.1.0", "json-stringify-safe": "~5.0.0", From 9fa20d24576bcf68fe7566ee98cea70a198478ce Mon Sep 17 00:00:00 2001 From: Olivier Amblet Date: Fri, 28 Nov 2014 17:29:19 +0100 Subject: [PATCH 06/16] fix(proxy): no-proxy false positive If one of the no-proxy item is exactly one character longer than the request URL, it was considered as a valid match for no-proxy case detection. This patch handle the special (-1) value. --- request.js | 3 ++- tests/test-proxy.js | 7 +++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/request.js b/request.js index 8365ab62a..db07ea911 100644 --- a/request.js +++ b/request.js @@ -199,7 +199,8 @@ function getProxyFromURI(uri) { } } else { noProxyItem = noProxyItem.replace(/^\.*/, '.') - if (hostname.indexOf(noProxyItem) === hostname.length - noProxyItem.length) { + var isMatchedAt = hostname.indexOf(noProxyItem) + if (isMatchedAt > -1 && isMatchedAt === hostname.length - noProxyItem.length) { return null } } diff --git a/tests/test-proxy.js b/tests/test-proxy.js index fd329fbfc..12c5f9666 100644 --- a/tests/test-proxy.js +++ b/tests/test-proxy.js @@ -131,6 +131,13 @@ if (process.env.TEST_PROXY_HARNESS) { env : { http_proxy : s.url } }, true) + runTest('http_proxy with length of one more than the URL', { + env: { + HTTP_PROXY : s.url, + NO_PROXY: 'elgoog1.com' // one more char than google.com + } + }, true) + runTest('NO_PROXY hostnames are case insensitive', { env : { HTTP_PROXY : s.url, From a87a1851cc39ae2e112e9ba76620d3d602eed41b Mon Sep 17 00:00:00 2001 From: James Nylen Date: Fri, 28 Nov 2014 12:11:34 -0600 Subject: [PATCH 07/16] 2.49.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index f83bd80cc..623e58b07 100755 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "util", "utility" ], - "version": "2.48.1", + "version": "2.49.0", "author": "Mikeal Rogers ", "repository": { "type": "git", From 6e6e589159a30bb441df4eb5e30428ce4d50c2ec Mon Sep 17 00:00:00 2001 From: James Nylen Date: Fri, 28 Nov 2014 12:11:47 -0600 Subject: [PATCH 08/16] Update changelog --- CHANGELOG.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4a0a2cc25..e163ee24f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ ## Change Log +### v2.49.0 (2014/11/28) +- [#1295](https://github.com/request/request/pull/1295) fix(proxy): no-proxy false positive (@oliamb) +- [#1292](https://github.com/request/request/pull/1292) Upgrade `caseless` to 0.8.1 (@mmalecki) +- [#1276](https://github.com/request/request/pull/1276) Set transfer encoding for multipart/related to chunked by default (@simov) +- [#1275](https://github.com/request/request/pull/1275) Fix multipart content-type headers detection (@simov) +- [#1269](https://github.com/request/request/pull/1269) adds streams example for review (@tbuchok) +- [#1238](https://github.com/request/request/pull/1238) Add examples README.md (@simov) + ### v2.48.0 (2014/11/12) - [#1263](https://github.com/request/request/pull/1263) Fixed a syntax error / typo in README.md (@xna2) - [#1253](https://github.com/request/request/pull/1253) Add multipart chunked flag (@simov, @nylen) From 28b24a0d04d6bbf15abcdbf0db2d1be151bcb08f Mon Sep 17 00:00:00 2001 From: James Nylen Date: Fri, 28 Nov 2014 12:11:49 -0600 Subject: [PATCH 09/16] 2.49.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 623e58b07..60f71784e 100755 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "util", "utility" ], - "version": "2.49.0", + "version": "2.49.1", "author": "Mikeal Rogers ", "repository": { "type": "git", From 9021618b56a2b3bb58b29d09300c165a6a933f42 Mon Sep 17 00:00:00 2001 From: DullReferenceException Date: Fri, 21 Nov 2014 13:28:20 -0800 Subject: [PATCH 10/16] Enable non-object JSON bodies Updated JSON requests so they can contain bodies that are not objects. For avoid unexpected surprises, JSON `null` values are not sent. --- .gitignore | 1 + request.js | 2 +- tests/test-json-request.js | 47 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 tests/test-json-request.js diff --git a/.gitignore b/.gitignore index 3c3629e64..34977ee7d 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ node_modules +.idea \ No newline at end of file diff --git a/request.js b/request.js index db07ea911..560b76775 100644 --- a/request.js +++ b/request.js @@ -1482,7 +1482,7 @@ Request.prototype.json = function (val) { self._json = true if (typeof val === 'boolean') { - if (typeof self.body === 'object') { + if (self.body !== undefined && self.body !== null) { self.body = safeStringify(self.body) if (!self.hasHeader('content-type')) { self.setHeader('content-type', 'application/json') diff --git a/tests/test-json-request.js b/tests/test-json-request.js new file mode 100644 index 000000000..d6b55b92d --- /dev/null +++ b/tests/test-json-request.js @@ -0,0 +1,47 @@ +'use strict' + +var server = require('./server') + , stream = require('stream') + , request = require('../index') + , tape = require('tape') + +var s = server.createServer() + +tape('setup', function(t) { + s.listen(s.port, function() { + t.end() + }) +}) + +tape('test testPutBoolean', function(t) { + s.on('/testPutBoolean', server.createPostValidator('true', 'application/json')) + var opts = { + method: 'PUT', + uri: s.url + '/testPutBoolean', + json: true, + body: true + } + request(opts, function (err, resp, body) { + t.equal(err, null) + t.end() + }) +}) + +tape('test testPutNull', function(t) { + s.on('/testPutNull', server.createPostValidator('')) + var opts = { + method: 'PUT', + uri: s.url + '/testPutNull', + json: true, + body: null + } + request(opts, function (err, resp, body) { + t.equal(err, null) + t.end() + }) +}) + +tape('cleanup', function(t) { + s.close() + t.end() +}) From 34176437c3a575bd76cedbaed8dcceeebc9e1ca2 Mon Sep 17 00:00:00 2001 From: DullReferenceException Date: Fri, 21 Nov 2014 16:09:56 -0800 Subject: [PATCH 11/16] Reverted null body behavior --- request.js | 2 +- tests/test-json-request.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/request.js b/request.js index 560b76775..93239feb7 100644 --- a/request.js +++ b/request.js @@ -1482,7 +1482,7 @@ Request.prototype.json = function (val) { self._json = true if (typeof val === 'boolean') { - if (self.body !== undefined && self.body !== null) { + if (self.body !== undefined) { self.body = safeStringify(self.body) if (!self.hasHeader('content-type')) { self.setHeader('content-type', 'application/json') diff --git a/tests/test-json-request.js b/tests/test-json-request.js index d6b55b92d..af96d03de 100644 --- a/tests/test-json-request.js +++ b/tests/test-json-request.js @@ -28,7 +28,7 @@ tape('test testPutBoolean', function(t) { }) tape('test testPutNull', function(t) { - s.on('/testPutNull', server.createPostValidator('')) + s.on('/testPutNull', server.createPostValidator('null', 'application/json')) var opts = { method: 'PUT', uri: s.url + '/testPutNull', From 2d74ed877d4d96378c7a31bc553d8f1d950b740b Mon Sep 17 00:00:00 2001 From: DullReferenceException Date: Fri, 21 Nov 2014 13:28:20 -0800 Subject: [PATCH 12/16] More JSON request tests Added test to ensure each type of JSON root object can be sent in a request --- tests/test-json-request.js | 53 +++++++++++++++++++++----------------- 1 file changed, 29 insertions(+), 24 deletions(-) diff --git a/tests/test-json-request.js b/tests/test-json-request.js index af96d03de..cc3a72fc4 100644 --- a/tests/test-json-request.js +++ b/tests/test-json-request.js @@ -13,32 +13,37 @@ tape('setup', function(t) { }) }) -tape('test testPutBoolean', function(t) { - s.on('/testPutBoolean', server.createPostValidator('true', 'application/json')) - var opts = { - method: 'PUT', - uri: s.url + '/testPutBoolean', - json: true, - body: true - } - request(opts, function (err, resp, body) { - t.equal(err, null) - t.end() +function testJSONValue(testId, value) { + tape('test ' + testId, function(t) { + var testUrl = '/' + testId + s.on(testUrl, server.createPostValidator(JSON.stringify(value), 'application/json')) + var opts = { + method: 'PUT', + uri: s.url + testUrl, + json: true, + body: value + } + request(opts, function (err, resp, body) { + t.equal(err, null) + t.end() + }) }) -}) +} -tape('test testPutNull', function(t) { - s.on('/testPutNull', server.createPostValidator('null', 'application/json')) - var opts = { - method: 'PUT', - uri: s.url + '/testPutNull', - json: true, - body: null - } - request(opts, function (err, resp, body) { - t.equal(err, null) - t.end() - }) +testJSONValue('jsonNull', null) +testJSONValue('jsonTrue', true) +testJSONValue('jsonFalse', false) +testJSONValue('jsonNumber', -289365.2938) +testJSONValue('jsonString', 'some string') +testJSONValue('jsonArray', ['value1', 2, null, 8925.53289, true, false, ['array'], { object: 'property' }]) +testJSONValue('jsonObject', { + trueProperty: true, + falseProperty: false, + numberProperty: -98346.34698, + stringProperty: 'string', + nullProperty: null, + arrayProperty: ['array'], + objectProperty: { object: 'property' } }) tape('cleanup', function(t) { From a3dd3f8aa6c23366d041affda574bc344a5a5eef Mon Sep 17 00:00:00 2001 From: Jacob Page Date: Mon, 24 Nov 2014 20:53:48 -0800 Subject: [PATCH 13/16] Updated test to verify JSON responses --- tests/server.js | 18 ++++++++++++++++++ tests/test-json-request.js | 4 +++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/tests/server.js b/tests/server.js index f18c01d1e..658b18e58 100644 --- a/tests/server.js +++ b/tests/server.js @@ -77,6 +77,24 @@ exports.createPostValidator = function (text, reqContentType) { } return l } +exports.createPostJSONValidator = function (value, reqContentType) { + var l = function (req, resp) { + var r = '' + req.on('data', function (chunk) {r += chunk}) + req.on('end', function () { + var parsedValue = JSON.parse(r) + assert.deepEqual(parsedValue, value) + if (reqContentType) { + assert.ok(req.headers['content-type']) + assert.ok(~req.headers['content-type'].indexOf(reqContentType)) + } + resp.writeHead(200, {'content-type':'application/json'}) + resp.write(JSON.stringify({ status: 'OK', value: parsedValue })) + resp.end() + }) + } + return l +} exports.createGetResponse = function (text, contentType) { var l = function (req, resp) { contentType = contentType || 'text/plain' diff --git a/tests/test-json-request.js b/tests/test-json-request.js index cc3a72fc4..d841b1668 100644 --- a/tests/test-json-request.js +++ b/tests/test-json-request.js @@ -16,7 +16,7 @@ tape('setup', function(t) { function testJSONValue(testId, value) { tape('test ' + testId, function(t) { var testUrl = '/' + testId - s.on(testUrl, server.createPostValidator(JSON.stringify(value), 'application/json')) + s.on(testUrl, server.createPostJSONValidator(value, 'application/json')) var opts = { method: 'PUT', uri: s.url + testUrl, @@ -25,6 +25,8 @@ function testJSONValue(testId, value) { } request(opts, function (err, resp, body) { t.equal(err, null) + t.equal(body.status, 'OK') + t.deepEqual(body.value, value) t.end() }) }) From ce705147036b57e5b4c91d2f0ff7b48c7512b561 Mon Sep 17 00:00:00 2001 From: Jacob Page Date: Mon, 1 Dec 2014 17:06:12 -0800 Subject: [PATCH 14/16] Modifying JSON request test Modified JSON request tests so the same value sent in the request is echoed in the test server JSON response. --- tests/server.js | 2 +- tests/test-json-request.js | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/server.js b/tests/server.js index 658b18e58..7e64a165a 100644 --- a/tests/server.js +++ b/tests/server.js @@ -89,7 +89,7 @@ exports.createPostJSONValidator = function (value, reqContentType) { assert.ok(~req.headers['content-type'].indexOf(reqContentType)) } resp.writeHead(200, {'content-type':'application/json'}) - resp.write(JSON.stringify({ status: 'OK', value: parsedValue })) + resp.write(r) resp.end() }) } diff --git a/tests/test-json-request.js b/tests/test-json-request.js index d841b1668..af41964bd 100644 --- a/tests/test-json-request.js +++ b/tests/test-json-request.js @@ -25,8 +25,8 @@ function testJSONValue(testId, value) { } request(opts, function (err, resp, body) { t.equal(err, null) - t.equal(body.status, 'OK') - t.deepEqual(body.value, value) + t.equal(resp.statusCode, 200) + t.deepEqual(body, value) t.end() }) }) From 1b9babcfac27f2d32c6b55434f3f63e1f1122577 Mon Sep 17 00:00:00 2001 From: Lewis J Ellis Date: Fri, 5 Dec 2014 01:03:50 -0500 Subject: [PATCH 15/16] Fix typo in README.md --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index c39685e25..1a5481ac5 100644 --- a/README.md +++ b/README.md @@ -256,7 +256,7 @@ var formData = { my_file: fs.createReadStream(__dirname + '/unicycle.jpg'), // Pass multiple values /w an Array attachments: [ - fs.createReadStream(__dirname + '/attacment1.jpg'), + fs.createReadStream(__dirname + '/attachment1.jpg'), fs.createReadStream(__dirname + '/attachment2.jpg') ], // Pass optional meta-data with an 'options' object with style: {value: DATA, options: OPTIONS} @@ -278,7 +278,7 @@ request.post({url:'http://service.com/upload', formData: formData}, function opt }); ``` -For advanced cases, you can the form-data object itself via `r.form()`. This can be modified until the request is fired on the next cycle of the event-loop. (Note that this calling `form()` will clear the currently set form data for that request.) +For advanced cases, you can access the form-data object itself via `r.form()`. This can be modified until the request is fired on the next cycle of the event-loop. (Note that this calling `form()` will clear the currently set form data for that request.) ```javascript // NOTE: Advanced use-case, for normal use see 'formData' usage above @@ -314,7 +314,7 @@ Some variations in different HTTP implementations require a newline/CRLF before, chunked: false, data: [ { - 'content-type': 'application/json', + 'content-type': 'application/json', body: JSON.stringify({foo: 'bar', _attachments: {'message.txt': {follows: true, length: 18, 'content_type': 'text/plain' }}}) }, { body: 'I am an attachment' } From e165ee3c1244128e4160751d6730c63e7d944445 Mon Sep 17 00:00:00 2001 From: "Eirik S. Morland" Date: Sun, 7 Dec 2014 10:17:16 +0100 Subject: [PATCH 16/16] Upgrade form-data, add back browserify compability. Fixes #455. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 60f71784e..1f28ea2fa 100755 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ "bl": "~0.9.0", "caseless": "~0.8.0", "forever-agent": "~0.5.0", - "form-data": "~0.1.0", + "form-data": "~0.2.0", "json-stringify-safe": "~5.0.0", "mime-types": "~1.0.1", "node-uuid": "~1.4.0",