37 lines
874 B
Plaintext
37 lines
874 B
Plaintext
|
// @flow
|
||
|
|
||
|
import {
|
||
|
parse as parseUrl,
|
||
|
} from 'url';
|
||
|
import {
|
||
|
UnexpectedStateError,
|
||
|
} from '../errors';
|
||
|
|
||
|
export default (url: string) => {
|
||
|
const urlTokens = parseUrl(url);
|
||
|
|
||
|
if (urlTokens.query !== null) {
|
||
|
throw new UnexpectedStateError('Unsupported `GLOBAL_AGENT.HTTP_PROXY` configuration value: URL must not have query.');
|
||
|
}
|
||
|
|
||
|
if (urlTokens.hash !== null) {
|
||
|
throw new UnexpectedStateError('Unsupported `GLOBAL_AGENT.HTTP_PROXY` configuration value: URL must not have hash.');
|
||
|
}
|
||
|
|
||
|
if (urlTokens.protocol !== 'http:') {
|
||
|
throw new UnexpectedStateError('Unsupported `GLOBAL_AGENT.HTTP_PROXY` configuration value: URL protocol must be "http:".');
|
||
|
}
|
||
|
|
||
|
let port = 80;
|
||
|
|
||
|
if (urlTokens.port) {
|
||
|
port = Number.parseInt(urlTokens.port, 10);
|
||
|
}
|
||
|
|
||
|
return {
|
||
|
authorization: urlTokens.auth || null,
|
||
|
hostname: urlTokens.hostname,
|
||
|
port,
|
||
|
};
|
||
|
};
|