1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
|
var crypto = require('crypto')
var HttpAgent = require('http').Agent
var HttpsAgent = require('https').Agent
var pkg = require('../package.json')
module.exports = initialize
function initialize (uri, method, accept, headers) {
if (!this.config.sessionToken) {
this.config.sessionToken = crypto.randomBytes(8).toString('hex')
this.log.verbose('request id', this.config.sessionToken)
}
if (this.config.isFromCI == null) {
this.config.isFromCI = Boolean(
process.env['CI'] === 'true' || process.env['TDDIUM'] ||
process.env['JENKINS_URL'] || process.env['bamboo.buildKey'])
}
var opts = {
url: uri,
method: method,
headers: headers,
localAddress: this.config.proxy.localAddress,
strictSSL: this.config.ssl.strict,
cert: this.config.ssl.certificate,
key: this.config.ssl.key,
ca: this.config.ssl.ca,
agent: getAgent.call(this, uri.protocol)
}
// allow explicit disabling of proxy in environment via CLI
//
// how false gets here is the CLI's problem (it's gross)
if (this.config.proxy.http === false) {
opts.proxy = null
} else {
// request will not pay attention to the NOPROXY environment variable if a
// config value named proxy is passed in, even if it's set to null.
var proxy
if (uri.protocol === 'https:') {
proxy = this.config.proxy.https
} else {
proxy = this.config.proxy.http
}
if (typeof proxy === 'string') opts.proxy = proxy
}
headers.version = this.version || pkg.version
headers.accept = accept
if (this.refer) headers.referer = this.refer
headers['npm-session'] = this.config.sessionToken
headers['npm-in-ci'] = String(this.config.isFromCI)
headers['user-agent'] = this.config.userAgent
if (this.config.scope) {
headers['npm-scope'] = this.config.scope
}
return opts
}
function getAgent (protocol) {
if (protocol === 'https:') {
if (!this.httpsAgent) {
this.httpsAgent = new HttpsAgent({
keepAlive: true,
maxSockets: this.config.maxSockets,
localAddress: this.config.proxy.localAddress,
rejectUnauthorized: this.config.ssl.strict,
ca: this.config.ssl.ca,
cert: this.config.ssl.certificate,
key: this.config.ssl.key
})
}
return this.httpsAgent
} else {
if (!this.httpAgent) {
this.httpAgent = new HttpAgent({
keepAlive: true,
maxSockets: this.config.maxSockets,
localAddress: this.config.proxy.localAddress
})
}
return this.httpAgent
}
}
|