New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

electron-fetch

Package Overview
Dependencies
Maintainers
1
Versions
24
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

electron-fetch - npm Package Compare versions

Comparing version 1.6.0 to 1.7.0

4

CHANGELOG.md

@@ -7,2 +7,6 @@

## V1.7.0
- Add AbortController support (thanks @Informatic)
- Update all dependencies
## V1.6.0

@@ -9,0 +13,0 @@ - Add option `useSessionCookies` to use session cookies when running on Electron >=7 (thanks @taratatach)

@@ -92,2 +92,3 @@ import { Readable, Stream } from 'stream'

body?: BodyInit
signal: AbortSignal
// (/!\ only works when running on Node.js) set to `manual` to extract redirect headers, `error` to reject redirect

@@ -125,2 +126,3 @@ redirect?: RequestRedirect

readonly redirect: RequestRedirect
readonly signal: AbortSignal

@@ -127,0 +129,0 @@ clone (): Request

@@ -1138,2 +1138,3 @@ import { parse, format, resolve } from 'url';

this.redirect = init.redirect || input.redirect || 'follow';
this.signal = init.signal || input.signal || null;
this.headers = new Headers(init.headers || input.headers || {});

@@ -1282,2 +1283,7 @@ this.headers.delete('Content-Length'); // user cannot set content-length themself as per fetch spec

options.headers.host = options.headers.host[0];
}
if (request.signal && request.signal.aborted) {
reject(new FetchError('request aborted', 'abort'));
return;
} // send request

@@ -1312,6 +1318,27 @@

const abortRequest = () => {
const err = new FetchError('request aborted', 'abort');
reject(err);
if (request.useElectronNet) {
req.abort();
} else {
req.destroy(err);
}
};
if (request.signal) {
request.signal.addEventListener('abort', abortRequest);
}
if (request.timeout) {
reqTimeout = setTimeout(() => {
req.abort();
reject(new FetchError(`network timeout at: ${request.url}`, 'request-timeout'));
const err = new FetchError(`network timeout at: ${request.url}`, 'request-timeout');
reject(err);
if (request.useElectronNet) {
req.abort();
} else {
req.destroy(err);
}
}, request.timeout);

@@ -1336,7 +1363,24 @@ }

clearTimeout(reqTimeout);
if (request.signal) {
request.signal.removeEventListener('abort', abortRequest);
}
reject(new FetchError(`request to ${request.url} failed, reason: ${err.message}`, 'system', err));
});
req.on('abort', () => {
clearTimeout(reqTimeout);
if (request.signal) {
request.signal.removeEventListener('abort', abortRequest);
}
});
req.on('response', res => {
clearTimeout(reqTimeout); // handle redirect
clearTimeout(reqTimeout);
if (request.signal) {
request.signal.removeEventListener('abort', abortRequest);
} // handle redirect
if (fetch.isRedirect(res.statusCode) && request.redirect !== 'manual') {

@@ -1394,2 +1438,18 @@ if (request.redirect === 'error') {

res.pipe(body);
const abortBody = () => {
res.destroy();
res.emit('error', new FetchError('request aborted', 'abort')); // separated from the `.destroy()` because somehow Node's IncomingMessage streams do not emit errors on destroy
};
if (request.signal) {
request.signal.addEventListener('abort', abortBody);
res.on('end', () => {
request.signal.removeEventListener('abort', abortBody);
});
res.on('error', () => {
request.signal.removeEventListener('abort', abortBody);
});
}
const responseOptions = {

@@ -1396,0 +1456,0 @@ url: request.url,

@@ -1168,2 +1168,3 @@ 'use strict';

this.redirect = init.redirect || input.redirect || 'follow';
this.signal = init.signal || input.signal || null;
this.headers = new Headers(init.headers || input.headers || {});

@@ -1312,2 +1313,7 @@ this.headers.delete('Content-Length'); // user cannot set content-length themself as per fetch spec

options.headers.host = options.headers.host[0];
}
if (request.signal && request.signal.aborted) {
reject(new FetchError('request aborted', 'abort'));
return;
} // send request

@@ -1342,6 +1348,27 @@

const abortRequest = () => {
const err = new FetchError('request aborted', 'abort');
reject(err);
if (request.useElectronNet) {
req.abort();
} else {
req.destroy(err);
}
};
if (request.signal) {
request.signal.addEventListener('abort', abortRequest);
}
if (request.timeout) {
reqTimeout = setTimeout(() => {
req.abort();
reject(new FetchError(`network timeout at: ${request.url}`, 'request-timeout'));
const err = new FetchError(`network timeout at: ${request.url}`, 'request-timeout');
reject(err);
if (request.useElectronNet) {
req.abort();
} else {
req.destroy(err);
}
}, request.timeout);

@@ -1366,7 +1393,24 @@ }

clearTimeout(reqTimeout);
if (request.signal) {
request.signal.removeEventListener('abort', abortRequest);
}
reject(new FetchError(`request to ${request.url} failed, reason: ${err.message}`, 'system', err));
});
req.on('abort', () => {
clearTimeout(reqTimeout);
if (request.signal) {
request.signal.removeEventListener('abort', abortRequest);
}
});
req.on('response', res => {
clearTimeout(reqTimeout); // handle redirect
clearTimeout(reqTimeout);
if (request.signal) {
request.signal.removeEventListener('abort', abortRequest);
} // handle redirect
if (fetch.isRedirect(res.statusCode) && request.redirect !== 'manual') {

@@ -1424,2 +1468,18 @@ if (request.redirect === 'error') {

res.pipe(body);
const abortBody = () => {
res.destroy();
res.emit('error', new FetchError('request aborted', 'abort')); // separated from the `.destroy()` because somehow Node's IncomingMessage streams do not emit errors on destroy
};
if (request.signal) {
request.signal.addEventListener('abort', abortBody);
res.on('end', () => {
request.signal.removeEventListener('abort', abortBody);
});
res.on('error', () => {
request.signal.removeEventListener('abort', abortBody);
});
}
const responseOptions = {

@@ -1426,0 +1486,0 @@ url: request.url,

17

package.json
{
"name": "electron-fetch",
"version": "1.6.0",
"version": "1.7.0",
"description": "A light-weight module that brings window.fetch to electron's background process",

@@ -45,5 +45,6 @@ "main": "lib/index.js",

"devDependencies": {
"@babel/core": "^7.11.4",
"@babel/preset-env": "^7.11.0",
"@babel/register": "^7.10.5",
"@babel/core": "^7.11.5",
"@babel/preset-env": "^7.11.5",
"@babel/register": "^7.11.5",
"abortcontroller-polyfill": "^1.5.0",
"babel-eslint": "^10.1.0",

@@ -56,3 +57,3 @@ "babel-plugin-istanbul": "^6.0.0",

"cross-env": "^7.0.2",
"electron": "^10.0.0",
"electron": "^10.1.1",
"electron-mocha": "^9.1.0",

@@ -63,3 +64,3 @@ "form-data": "^3.0.0",

"istanbul-lib-coverage": "^3.0.0",
"mocha": "^8.1.1",
"mocha": "^8.1.3",
"nyc": "^15.1.0",

@@ -70,3 +71,3 @@ "parted": "^0.1.1",

"resumer": "0.0.0",
"rollup": "^2.26.5",
"rollup": "^2.26.9",
"rollup-plugin-babel": "^4.4.0",

@@ -76,3 +77,3 @@ "standard": "^14.3.4",

"typescript": "^4.0.2",
"whatwg-url": "^8.2.0",
"whatwg-url": "^8.2.1",
"xvfb-maybe": "^0.2.1"

@@ -79,0 +80,0 @@ },

@@ -193,2 +193,3 @@

redirect: 'follow', // (/!\ only works when running on Node.js) set to `manual` to extract redirect headers, `error` to reject redirect
signal: null, // the AbortSignal from an AbortController instance.

@@ -195,0 +196,0 @@ // The following properties are electron-fetch extensions

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