Socket
Socket
Sign inDemoInstall

popsicle

Package Overview
Dependencies
Maintainers
1
Versions
99
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

popsicle - npm Package Compare versions

Comparing version 1.2.2 to 1.3.0

1

dist/lib/browser.js

@@ -17,2 +17,3 @@ var Promise = require('native-or-bluebird');

status: xhr.status === 1223 ? 204 : xhr.status,
statusText: xhr.statusText,
headers: get_headers_1.parse(xhr.getAllResponseHeaders()),

@@ -19,0 +20,0 @@ body: responseType ? xhr.response : xhr.responseText,

208

dist/lib/index.js
var http_1 = require('http');
var https_1 = require('https');
var agent = require('infinity-agent');
var through2 = require('through2');
var stream_1 = require('stream');
var urlLib = require('url');
var extend = require('xtend');
var arrify = require('arrify');
var get_headers_1 = require('get-headers');

@@ -26,92 +26,97 @@ var Promise = require('native-or-bluebird');

function open(request) {
return new Promise(function (resolve, reject) {
var maxRedirects = num(request.options.maxRedirects, 5);
var followRedirects = request.options.followRedirects !== false;
var requestCount = 0;
var confirmRedirect = typeof request.options.followRedirects === 'function' ?
request.options.followRedirects : falsey;
var requestProxy = through2(function (chunk, enc, cb) {
request.uploadedBytes = request.uploadedBytes + chunk.length;
this.push(chunk);
cb();
}, function (cb) {
request.uploadedBytes = request.uploadLength;
cb();
});
var responseProxy = through2(function (chunk, enc, cb) {
request.downloadedBytes = request.downloadedBytes + chunk.length;
this.push(chunk);
cb();
}, function (cb) {
request.downloadedBytes = request.downloadLength;
cb();
});
function get(url, opts, body) {
if (requestCount++ > maxRedirects) {
reject(request.error("Exceeded maximum of " + maxRedirects + " redirects", 'EMAXREDIRECTS'));
return;
}
var arg = extend(urlLib.parse(url), opts);
var isHttp = arg.protocol !== 'https:';
var engine = isHttp ? http_1.request : https_1.request;
arg.agent = request.options.agent || (isHttp ? agent.http.globalAgent : agent.https.globalAgent);
arg.rejectUnauthorized = request.options.rejectUnauthorized !== false;
var req = engine(arg);
req.once('response', function (res) {
var status = res.statusCode;
var redirect = REDIRECT_STATUS[status];
if (followRedirects && redirect != null && res.headers.location) {
var newUrl = urlLib.resolve(url, res.headers.location);
res.resume();
if (redirect === REDIRECT_TYPE.FOLLOW_WITH_GET) {
get(newUrl, { method: 'GET' });
return;
}
if (redirect === REDIRECT_TYPE.FOLLOW_WITH_CONFIRMATION) {
if (arg.method === 'GET' || arg.method === 'HEAD') {
get(newUrl, opts, body);
return;
var maxRedirects = num(request.options.maxRedirects, 5);
var followRedirects = request.options.followRedirects !== false;
var requestCount = 0;
var confirmRedirect = typeof request.options.followRedirects === 'function' ?
request.options.followRedirects : falsey;
function get(url, method, body) {
if (requestCount++ > maxRedirects) {
return Promise.reject(request.error("Exceeded maximum of " + maxRedirects + " redirects", 'EMAXREDIRECTS'));
}
return appendCookies(request)
.then(function () {
return new Promise(function (resolve, reject) {
var arg = urlLib.parse(url);
var isHttp = arg.protocol !== 'https:';
var engine = isHttp ? http_1.request : https_1.request;
arg.method = method;
arg.headers = request.get();
arg.agent = request.options.agent;
arg.rejectUnauthorized = request.options.rejectUnauthorized !== false;
if (!arg.agent) {
arg.agent = isHttp ? agent.http.globalAgent : agent.https.globalAgent;
}
var req = engine(arg);
var requestProxy = new stream_1.PassThrough();
var responseProxy = new stream_1.PassThrough();
requestProxy.on('data', function (chunk) {
request.uploadedBytes = request.uploadedBytes + chunk.length;
});
requestProxy.on('end', function () {
request.uploadedBytes = request.uploadLength;
});
responseProxy.on('data', function (chunk) {
request.downloadedBytes = request.downloadedBytes + chunk.length;
});
responseProxy.on('end', function () {
request.downloadedBytes = request.downloadLength;
});
function response(res) {
var status = res.statusCode;
var redirect = REDIRECT_STATUS[status];
if (followRedirects && redirect != null && res.headers.location) {
var newUrl = urlLib.resolve(url, res.headers.location);
res.resume();
request.remove('Cookie');
if (redirect === REDIRECT_TYPE.FOLLOW_WITH_GET) {
request.set('Content-Length', '0');
return get(newUrl, 'GET');
}
if (confirmRedirect(req, res)) {
get(newUrl, opts, body);
return;
if (redirect === REDIRECT_TYPE.FOLLOW_WITH_CONFIRMATION) {
if (arg.method === 'GET' || arg.method === 'HEAD') {
return get(newUrl, method, body);
}
if (confirmRedirect(req, res)) {
return get(newUrl, method, body);
}
}
}
request.downloadLength = num(res.headers['content-length'], 0);
res.pipe(responseProxy);
return Promise.resolve({
body: responseProxy,
status: status,
statusText: res.statusMessage,
headers: get_headers_1.http(res),
url: url
});
}
request.downloadLength = num(res.headers['content-length'], 0);
res.pipe(responseProxy);
return resolve({
body: responseProxy,
status: status,
headers: get_headers_1.http(res),
url: url
req.once('response', function (message) {
return resolve(setCookies(request, message).then(function () { return response(message); }));
});
});
req.once('abort', function () {
return reject(request.error('Request aborted', 'EABORT'));
});
req.once('error', function (error) {
return reject(request.error("Unable to connect to \"" + url + "\"", 'EUNAVAILABLE', error));
});
requestProxy.once('error', reject);
request.raw = req;
request.uploadLength = num(req.getHeader('content-length'), 0);
requestProxy.pipe(req);
if (body) {
if (typeof body.pipe === 'function') {
body.pipe(requestProxy);
req.once('abort', function () {
return reject(request.error('Request aborted', 'EABORT'));
});
req.once('error', function (error) {
return reject(request.error("Unable to connect to \"" + url + "\"", 'EUNAVAILABLE', error));
});
requestProxy.once('error', reject);
request.raw = req;
request.uploadLength = num(req.getHeader('content-length'), 0);
requestProxy.pipe(req);
if (body) {
if (typeof body.pipe === 'function') {
body.pipe(requestProxy);
}
else {
requestProxy.end(body);
}
}
else {
requestProxy.end(body);
requestProxy.end();
}
}
else {
requestProxy.end();
}
}
get(request.fullUrl(), {
headers: request.get(),
method: request.method
}, request.body);
});
});
});
}
return get(request.fullUrl(), request.method, request.body);
}

@@ -130,2 +135,37 @@ function abort(request) {

}
function appendCookies(request) {
return new Promise(function (resolve, reject) {
if (!request.options.jar) {
return resolve();
}
request.options.jar.getCookies(request.url, function (err, cookies) {
if (err) {
return reject(err);
}
if (cookies.length) {
request.append('Cookie', cookies.join('; '));
}
return resolve();
});
});
}
function setCookies(request, message) {
return new Promise(function (resolve, reject) {
if (!request.options.jar) {
return resolve();
}
var cookies = arrify(message.headers['set-cookie']);
if (!cookies.length) {
return resolve();
}
var setCookies = cookies.map(function (cookie) {
return new Promise(function (resolve, reject) {
request.options.jar.setCookie(cookie, request.url, function (err) {
return err ? reject(err) : resolve();
});
});
});
return resolve(Promise.all(setCookies));
});
}
module.exports = common_1.defaults({

@@ -132,0 +172,0 @@ transport: { open: open, abort: abort, use: index_1.defaults }

export * from './common';
import Request, { Middleware } from '../request';
export declare function cookieJar(request: Request): void;
export declare function unzip(request: Request): void;

@@ -5,0 +4,0 @@ export declare function concatStream(encoding: string): (request: Request) => void;

function __export(m) {
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
}
var arrify = require('arrify');
var concat = require('concat-stream');

@@ -11,40 +10,2 @@ var FormData = require('form-data');

var common_2 = require('./common');
function getCookieJar(request) {
return new Promise(function (resolve, reject) {
request.options.jar.getCookies(request.url, function (err, cookies) {
if (err) {
return reject(err);
}
if (cookies.length) {
request.append('Cookie', cookies.join('; '));
}
return resolve();
});
});
}
function setCookieJar(response) {
return new Promise(function (resolve, reject) {
var cookies = arrify(response.get('Set-Cookie'));
var request = response.request;
if (!cookies.length) {
return resolve();
}
var setCookies = cookies.map(function (cookie) {
return new Promise(function (resolve, reject) {
request.options.jar.setCookie(cookie, request.url, function (err) {
return err ? reject(err) : resolve();
});
});
});
return resolve(Promise.all(setCookies));
});
}
function cookieJar(request) {
if (!request.options.jar) {
return;
}
request.before(getCookieJar);
request.after(setCookieJar);
}
exports.cookieJar = cookieJar;
function unzipResponse(response) {

@@ -129,3 +90,3 @@ if (['gzip', 'deflate'].indexOf(response.get('Content-Encoding')) > -1) {

exports.headers = headers;
exports.defaults = [common_2.stringify, headers, cookieJar, unzip, concatStream('string'), common_2.parse];
exports.defaults = [common_2.stringify, headers, unzip, concatStream('string'), common_2.parse];
//# sourceMappingURL=index.js.map

@@ -6,2 +6,3 @@ import Base, { BaseOptions, Headers } from './base';

status: number;
statusText: string;
}

@@ -13,5 +14,7 @@ export interface ResponseJSON {

status: number;
statusText: string;
}
export default class Response extends Base {
status: number;
statusText: string;
body: any;

@@ -18,0 +21,0 @@ request: Request;

@@ -13,2 +13,3 @@ var __extends = (this && this.__extends) || function (d, b) {

this.status = options.status;
this.statusText = options.statusText;
}

@@ -26,3 +27,4 @@ Response.prototype.statusType = function () {

body: this.body,
status: this.status
status: this.status,
statusText: this.statusText
};

@@ -29,0 +31,0 @@ };

{
"name": "popsicle",
"version": "1.2.2",
"version": "1.3.0",
"description": "Simple HTTP requests for node and the browser",

@@ -26,4 +26,4 @@ "main": "dist/lib/index.js",

"test-spec": "npm run test-server-open && PORT=7357 node dist/test/index.js; npm run test-server-close",
"test-cov": "PORT=7357 istanbul cover --print none dist/test/index.js | faucet",
"test-browser": "PORT=7357 browserify -t envify dist/test/index.js | tape-run | faucet",
"test-cov": "PORT=7357 istanbul cover --print none dist/test/index.js | tap-dot",
"test-browser": "PORT=7357 browserify -t envify dist/test/index.js | tape-run | tap-dot",
"test-server-open": "PORT=7357 node test/support/server.js & echo $! > test.pid",

@@ -70,6 +70,6 @@ "test-server-close": "if [ -f test.pid ]; then kill -9 $(cat test.pid); rm test.pid; fi",

"express": "^4.10.2",
"faucet": "0.0.1",
"istanbul": "^0.3.17",
"phantomjs": "^1.9.18",
"pre-commit": "^1.0.10",
"tap-dot": "^1.0.0",
"tape-run": "^1.0.0",

@@ -86,3 +86,2 @@ "typescript": "^1.6.2"

"native-or-bluebird": "^1.2.0",
"through2": "^2.0.0",
"tough-cookie": "^2.0.0",

@@ -89,0 +88,0 @@ "xtend": "^4.0.0"

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc