Security News
New Python Packaging Proposal Aims to Solve Phantom Dependency Problem with SBOMs
PEP 770 proposes adding SBOM support to Python packages to improve transparency and catch hidden non-Python dependencies that security tools often miss.
A light-weight HTTP client for Node.js.
It started as a light-wrapper of node-fetch
due to the lack of HTTP_PROXY
support.
The surface grew to incorporate new requirements. In comparison to the WHATWG Fetch, xfetch API is designed to keep the code minimal by providing short-cuts to common operations.
On top of the node-fetch
, xfetch implements:
type HeadersConfigurationType = {
[key: string]: string | number
};
type RawHeadersType = {|
[key: string]: $ReadOnlyArray<string>
|};
type HeadersType = {|
+raw: () => RawHeadersType,
+get: (name: string) => string
|};
type IsResponseRedirectType = (Response: ResponseType) => boolean;
type IsResponseValidType = (response: ResponseType) => boolean | Promise<boolean>;
type HttpMethodType = 'get' | 'post' | 'delete' | 'post' | 'trace';
/**
* @see https://github.com/tim-kos/node-retry#retrytimeoutsoptions
*/
type RetryConfigurationType = {
factor?: number,
maxTimeout?: number,
minTimeout?: number,
randomize?: boolean,
retries?: number
};
type ResponseType = {|
+headers: HeadersType,
+json: () => Promise<Object>,
+status: number,
+text: () => Promise<string>,
+url: string
|} | string;
/**
* @property isResponseValid Used to validate response. Refer to [Validate response](#validate-response).
* @property retry Used to retry requests that produce response that does not pass validation. Refer to [Retry request](#retry-request) and [Validating response](#validating-response).
* @property jar An instance of `tough-cookie` [`CookieJar`](https://github.com/salesforce/tough-cookie#cookiejar). Used to collect & set cookies.
* @property timeout Timeout in milliseconds.
*/
type UserConfigurationType = {
+body?: string | URLSearchParams | FormData,
+compress?: boolean,
+headers?: HeadersConfigurationType,
+isResponseRedirect?: IsResponseRedirectType,
+isResponseValid?: IsResponseValidType,
+jar?: CookieJar,
+method?: HttpMethodType,
+query?: Object,
+responseType?: 'full' | 'text' | 'json',
+retry?: RetryConfigurationType,
+timeout?: number
};
type fetch = (url: string, configuration?: UserConfigurationType) => Promise<ResponseType>;
Uses HTTP_PROXY
(http://host:port
) environment variable value to configure HTTP proxy.
Note: You must also configure
NODE_TLS_REJECT_UNAUTHORIZED=0
. This is a lazy workaround to enable the proxy to work with TLS.
Throws UnexpectedResponseCodeError
error if response code is non-2xx or 3xx.
This behaviour can be overridden using isResponseValid
configuration.
xfetch
defaults to a 30 seconds timeout after which ResponseTimeoutError
error is thrown.
A timeout error does not trigger the request retry strategy.
import xfetch, {
ResponseTimeoutError
} from 'xfetch';
try {
await fetch('http://gajus.com/', {
timeout: 30 * 1000
});
} catch (error) {
if (error instanceof ResponseTimeoutError) {
// Request has not received a response within 30 seconds.
}
throw error;
}
Requests that result in non-2xx response will be retried.
retry
option is used to configure request retry strategy.
The retry
configuration shape matches configuration of the retry
module.
Define a custom validator function to force use the request retry strategy.
A custom validator is configured using isResponseValid
configuration, e.g.
import xfetch, {
UnexpectedResponseError
};
const isResponseValid = async (response) => {
const body = await response.text();
if (body.includes('rate error')) {
throw new UnexpectedResponseError(response);
}
return true;
}
await xfetch('http://gajus.com', {
isResponseValid
});
A custom validator must return a boolean flag indicating whether the response is valid. A custom validator can throw an error that extends UnexpectedResponseError
error.
xfetch
default validator can be imported and used to extend a custom validator, e.g.
import xfetch, {
UnexpectedResponseError,
isResponseValid as defaultIsResponseValid
};
const isResponseValid = async (response) => {
const responseIsValid = await defaultIsResponseValid(response);
if (!responseIsValid) {
return responseIsValid;
}
const body = await response.text();
if (body.includes('rate error')) {
throw new UnexpectedResponseError(response);
}
return true;
}
await xfetch('http://gajus.com', {
isResponseValid
});
jar
parameter can be passed an instance of tough-cookie
CookieJar
to collect cookies and use them for the following requests.
import xfetch, {
CookieJar
};
const jar = new CookieJar();
await xfetch('http://gajus.com/this-url-sets-cookies', {
jar
});
await xfetch('http://gajus.com/this-url-requires-cookies-to-be-present', {
jar
});
Note:
xfetch
exportsCookieJar
class that can be used to construct an instance oftough-cookie
CookieJar
.
FAQs
A light-weight HTTP client for Node.js.
The npm package xfetch receives a total of 4 weekly downloads. As such, xfetch popularity was classified as not popular.
We found that xfetch demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
PEP 770 proposes adding SBOM support to Python packages to improve transparency and catch hidden non-Python dependencies that security tools often miss.
Security News
Socket CEO Feross Aboukhadijeh discusses open source security challenges, including zero-day attacks and supply chain risks, on the Cyber Security Council podcast.
Security News
Research
Socket researchers uncover how threat actors weaponize Out-of-Band Application Security Testing (OAST) techniques across the npm, PyPI, and RubyGems ecosystems to exfiltrate sensitive data.