@verdaccio/proxy 8.0.0-next-8.0 → 8.0.0-next-8.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,26 @@
1
1
  # @verdaccio/proxy
2
2
 
3
+ ## 8.0.0-next-8.2
4
+
5
+ ### Minor Changes
6
+
7
+ - 6a8154c: feat: update logger pino to latest
8
+
9
+ ### Patch Changes
10
+
11
+ - Updated dependencies [6a8154c]
12
+ - @verdaccio/config@8.0.0-next-8.2
13
+ - @verdaccio/core@8.0.0-next-8.2
14
+ - @verdaccio/utils@7.1.0-next-8.2
15
+
16
+ ## 8.0.0-next-8.1
17
+
18
+ ### Patch Changes
19
+
20
+ - @verdaccio/core@8.0.0-next-8.1
21
+ - @verdaccio/config@8.0.0-next-8.1
22
+ - @verdaccio/utils@7.0.1-next-8.1
23
+
3
24
  ## 8.0.0-next-8.0
4
25
 
5
26
  ### Major Changes
package/build/proxy.js CHANGED
@@ -50,10 +50,9 @@ class ProxyStorage {
50
50
  // @ts-ignore
51
51
 
52
52
  constructor(config, mainConfig, logger, agent) {
53
- var _mainConfig$user_agen, _this$config$max_fail, _this$max_fails;
54
53
  this.config = config;
55
54
  this.failed_requests = 0;
56
- this.userAgent = (_mainConfig$user_agen = mainConfig.user_agent) !== null && _mainConfig$user_agen !== void 0 ? _mainConfig$user_agen : 'hidden';
55
+ this.userAgent = mainConfig.user_agent ?? 'hidden';
57
56
  this.ca = config.ca;
58
57
  this.logger = logger;
59
58
  this.server_id = mainConfig.server_id;
@@ -65,7 +64,7 @@ class ProxyStorage {
65
64
  this.url = new _url.URL(this.config.url);
66
65
  const isHTTPS = this.url.protocol === 'https:';
67
66
  this._setupProxy(this.url.hostname, config, mainConfig, isHTTPS);
68
- this.agent = agent !== null && agent !== void 0 ? agent : this.getAgent();
67
+ this.agent = agent ?? this.getAgent();
69
68
  this.config.url = this.config.url.replace(/\/$/, '');
70
69
  if (this.config.timeout && Number(this.config.timeout) >= 1000) {
71
70
  this.logger.warn(['Too big timeout value: ' + this.config.timeout, 'We changed time format to nginx-like one', '(see http://nginx.org/en/docs/syntax.html)', 'so please update your config accordingly'].join('\n'));
@@ -78,11 +77,11 @@ class ProxyStorage {
78
77
  request: (0, _proxyUtils.parseInterval)(setConfig(this.config, 'timeout', '30s'))
79
78
  };
80
79
  debug('set timeout %s', this.timeout);
81
- this.max_fails = Number(setConfig(this.config, 'max_fails', (_this$config$max_fail = this.config.max_fails) !== null && _this$config$max_fail !== void 0 ? _this$config$max_fail : 2));
80
+ this.max_fails = Number(setConfig(this.config, 'max_fails', this.config.max_fails ?? 2));
82
81
  this.fail_timeout = (0, _proxyUtils.parseInterval)(setConfig(this.config, 'fail_timeout', '5m'));
83
82
  this.strict_ssl = Boolean(setConfig(this.config, 'strict_ssl', true));
84
83
  this.retry = {
85
- limit: (_this$max_fails = this.max_fails) !== null && _this$max_fails !== void 0 ? _this$max_fails : 2
84
+ limit: this.max_fails ?? 2
86
85
  };
87
86
  }
88
87
  getAgent() {
@@ -226,7 +225,7 @@ class ProxyStorage {
226
225
 
227
226
  // FUTURE: allow mix headers that comes from the client
228
227
  debug('getting metadata for package %s', name);
229
- let headers = this.getHeaders(options === null || options === void 0 ? void 0 : options.headers);
228
+ let headers = this.getHeaders(options?.headers);
230
229
  headers = this.addProxyHeaders(headers, options.remoteAddress);
231
230
  headers = this.applyUplinkHeaders(headers);
232
231
  // the following headers cannot be overwritten
@@ -240,8 +239,7 @@ class ProxyStorage {
240
239
  let response;
241
240
  let responseLength = 0;
242
241
  try {
243
- var _options$retry, _response;
244
- const retry = (_options$retry = options === null || options === void 0 ? void 0 : options.retry) !== null && _options$retry !== void 0 ? _options$retry : this.retry;
242
+ const retry = options?.retry ?? this.retry;
245
243
  debug('retry initial count %s', retry);
246
244
  response = await (0, _gotCjs.default)(uri, {
247
245
  headers,
@@ -266,7 +264,7 @@ class ProxyStorage {
266
264
  }],
267
265
  beforeRetry: [(error, count) => {
268
266
  debug('retry %s count: %s', uri, count);
269
- this.failed_requests = count !== null && count !== void 0 ? count : 0;
267
+ this.failed_requests = count ?? 0;
270
268
  this.logger.info({
271
269
  request: {
272
270
  method: method,
@@ -304,7 +302,7 @@ class ProxyStorage {
304
302
 
305
303
  // not modified status (304) registry does not return any payload
306
304
  // it is handled as an error
307
- if (((_response = response) === null || _response === void 0 ? void 0 : _response.statusCode) === _core.HTTP_STATUS.NOT_MODIFIED) {
305
+ if (response?.statusCode === _core.HTTP_STATUS.NOT_MODIFIED) {
308
306
  throw _core.errorUtils.getCode(_core.HTTP_STATUS.NOT_MODIFIED, _core.API_ERROR.NOT_MODIFIED_NO_DATA);
309
307
  }
310
308
  debug('uri %s success', uri);
@@ -317,7 +315,7 @@ class ProxyStorage {
317
315
  },
318
316
  status: response.statusCode,
319
317
  bytes: {
320
- in: options !== null && options !== void 0 && options.json ? JSON.stringify(options === null || options === void 0 ? void 0 : options.json).length : 0,
318
+ in: options?.json ? JSON.stringify(options?.json).length : 0,
321
319
  out: responseLength || 0
322
320
  }
323
321
  }, message);
@@ -350,13 +348,12 @@ class ProxyStorage {
350
348
 
351
349
  // FIXME: handle stream and retry
352
350
  fetchTarball(url, overrideOptions) {
353
- var _this$retry;
354
351
  debug('fetching url for %s', url);
355
352
  const options = {
356
353
  ...this.config,
357
354
  ...overrideOptions
358
355
  };
359
- let headers = this.getHeaders(options === null || options === void 0 ? void 0 : options.headers);
356
+ let headers = this.getHeaders(options?.headers);
360
357
  headers = this.addProxyHeaders(headers, options.remoteAddress);
361
358
  headers = this.applyUplinkHeaders(headers);
362
359
  // the following headers cannot be overwritten
@@ -372,7 +369,7 @@ class ProxyStorage {
372
369
  method,
373
370
  agent: this.agent,
374
371
  // FIXME: this should be taken from construtor as priority
375
- retry: (_this$retry = this.retry) !== null && _this$retry !== void 0 ? _this$retry : options === null || options === void 0 ? void 0 : options.retry,
372
+ retry: this.retry ?? options?.retry,
376
373
  timeout: this.timeout
377
374
  }).on('request', () => {
378
375
  this.last_request_time = Date.now();
@@ -403,7 +400,7 @@ class ProxyStorage {
403
400
  signal: abort ? abort.signal : {},
404
401
  agent: this.agent,
405
402
  timeout: this.timeout,
406
- retry: retry !== null && retry !== void 0 ? retry : this.retry
403
+ retry: retry ?? this.retry
407
404
  });
408
405
  const res = await response.text();
409
406
  const streamSearch = new _stream.PassThrough({
@@ -421,7 +418,7 @@ class ProxyStorage {
421
418
  throw _core.errorUtils.getInternalError(`bad status code ${err.response.statusCode} from uplink`);
422
419
  }
423
420
  this.logger.error({
424
- errorMessage: err === null || err === void 0 ? void 0 : err.message,
421
+ errorMessage: err?.message,
425
422
  name: this.upname
426
423
  }, 'proxy uplink @{name} search error: @{errorMessage}');
427
424
  throw err;
@@ -1 +1 @@
1
- {"version":3,"file":"proxy.js","names":["_JSONStream","_interopRequireDefault","require","_debug","_gotCjs","_interopRequireWildcard","_lodash","_stream","_url","_core","_utils","_agent","_proxyUtils","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","debug","buildDebug","encode","thing","encodeURIComponent","replace","jsonContentType","HEADERS","JSON","contentTypeAccept","setConfig","config","key","def","_","isNil","ProxyStorage","constructor","mainConfig","logger","agent","_mainConfig$user_agen","_this$config$max_fail","_this$max_fails","failed_requests","userAgent","user_agent","ca","server_id","agent_options","keepAlive","maxSockets","maxFreeSockets","url","URL","isHTTPS","protocol","_setupProxy","hostname","getAgent","timeout","Number","warn","join","maxage","parseInterval","request","max_fails","fail_timeout","strict_ssl","Boolean","retry","limit","agentInstance","CustomAgents","proxy","getHeaders","headers","accept","ACCEPT","acceptEncoding","ACCEPT_ENCODING","USER_AGENT","setAuthNext","auth","AUTHORIZATION","isObject","token","_throwErrorAuth","tokenConf","isString","token_env","process","env","NPM_TOKEN","error","constants","ERROR_CODE","token_required","type","TOKEN_BASIC","_setHeaderAuthorization","message","Error","_type","toLowerCase","TOKEN_BEARER","upperFirst","buildToken","_overrideWithUpLinkConfLocaligHeaders","applyUplinkHeaders","getRemoteMetadata","name","options","_ifRequestFailure","errorUtils","getInternalError","API_ERROR","UPLINK_OFFLINE","addProxyHeaders","remoteAddress","etag","NONE_MATCH","method","uri","response","responseLength","_options$retry","_response","got","responseType","hooks","afterResponse","code","statusCode","HTTP_STATUS","OK","MULTIPLE_CHOICES","host","beforeRetry","count","info","retryCount","on","last_request_time","Date","now","eventResponse","http","status","isNull","progress","total","data","body","NOT_MODIFIED","getCode","NOT_MODIFIED_NO_DATA","bytes","in","json","stringify","length","out","err","NOT_FOUND","getNotFound","NOT_PACKAGE_UPLINK","BAD_STATUS_CODE","remoteStatus","SERVER_TIME_OUT","fetchTarball","overrideOptions","_this$retry","readStream","stream","search","abort","fullURL","href","uplink","upname","signal","res","text","streamSearch","PassThrough","objectMode","streamResponse","Readable","from","pipe","JSONStream","parse","end","errorMessage","FORWARDED_FOR","Math","abs","mainconfig","noProxyList","proxy_key","no_proxy","split","isArray","noProxyItem","endsWith","rule","undefined","exports"],"sources":["../src/proxy.ts"],"sourcesContent":["import JSONStream from 'JSONStream';\nimport buildDebug from 'debug';\nimport got, {\n Agents,\n Delays,\n Options,\n RequestError,\n RetryOptions,\n Headers as gotHeaders,\n} from 'got-cjs';\nimport _ from 'lodash';\nimport Stream, { PassThrough, Readable } from 'stream';\nimport { URL } from 'url';\n\nimport {\n API_ERROR,\n HEADERS,\n HTTP_STATUS,\n TOKEN_BASIC,\n TOKEN_BEARER,\n constants,\n errorUtils,\n searchUtils,\n} from '@verdaccio/core';\nimport { Manifest } from '@verdaccio/types';\nimport { Config, Logger, UpLinkConf } from '@verdaccio/types';\nimport { buildToken } from '@verdaccio/utils';\n\nimport CustomAgents, { AgentOptionsConf } from './agent';\nimport { parseInterval } from './proxy-utils';\n\nconst debug = buildDebug('verdaccio:proxy');\n\nconst encode = function (thing): string {\n return encodeURIComponent(thing).replace(/^%40/, '@');\n};\n\nconst jsonContentType = HEADERS.JSON;\nconst contentTypeAccept = `${jsonContentType};`;\n\n/**\n * Just a helper (`config[key] || default` doesn't work because of zeroes)\n */\nconst setConfig = (config: UpLinkConfLocal, key: string, def): string => {\n return _.isNil(config[key]) === false ? config[key] : def;\n};\n\nexport type UpLinkConfLocal = UpLinkConf & {\n no_proxy?: string;\n};\n\nexport interface ProxyList {\n [key: string]: IProxy;\n}\n\nexport type ProxySearchParams = {\n url: string;\n abort: AbortController;\n query?: searchUtils.SearchQuery;\n headers?: Headers;\n retry?: Partial<RetryOptions>;\n};\nexport interface IProxy {\n config: UpLinkConfLocal;\n failed_requests: number;\n userAgent: string;\n ca?: string | void;\n logger: Logger;\n server_id: string;\n url: URL;\n maxage: number;\n timeout: Delays;\n max_fails: number;\n fail_timeout: number;\n upname: string;\n search(options: ProxySearchParams): Promise<Stream.Readable>;\n getRemoteMetadata(\n name: string,\n options: Partial<ISyncUplinksOptions>\n ): Promise<[Manifest, string]>;\n fetchTarball(\n url: string,\n options: Partial<Pick<ISyncUplinksOptions, 'remoteAddress' | 'etag' | 'retry'>>\n ): PassThrough;\n}\n\n// this type is need it by storage\nexport { Options as FetchOptions };\n\nexport interface ISyncUplinksOptions extends Options {\n uplinksLook?: boolean;\n etag?: string;\n remoteAddress?: string;\n}\n\n/**\n * Implements Storage interface\n * (same for storage.js, local-storage.js, up-storage.js)\n */\nclass ProxyStorage implements IProxy {\n public config: UpLinkConfLocal;\n public failed_requests: number;\n public userAgent: string;\n public ca: string | void;\n public logger: Logger;\n public server_id: string;\n public url: URL;\n public maxage: number;\n public timeout: Delays;\n public max_fails: number;\n public fail_timeout: number;\n public agent_options: AgentOptionsConf;\n // FIXME: upname is assigned to each instance\n // @ts-ignore\n public upname: string;\n public proxy: string | undefined;\n private agent: Agents;\n // @ts-ignore\n public last_request_time: number | null;\n public strict_ssl: boolean;\n private retry: Partial<RetryOptions>;\n\n public constructor(config: UpLinkConfLocal, mainConfig: Config, logger: Logger, agent?: Agents) {\n this.config = config;\n this.failed_requests = 0;\n this.userAgent = mainConfig.user_agent ?? 'hidden';\n this.ca = config.ca;\n this.logger = logger;\n this.server_id = mainConfig.server_id;\n this.agent_options = setConfig(this.config, 'agent_options', {\n keepAlive: true,\n maxSockets: 40,\n maxFreeSockets: 10,\n }) as AgentOptionsConf;\n this.url = new URL(this.config.url);\n const isHTTPS = this.url.protocol === 'https:';\n this._setupProxy(this.url.hostname, config, mainConfig, isHTTPS);\n this.agent = agent ?? this.getAgent();\n this.config.url = this.config.url.replace(/\\/$/, '');\n\n if (this.config.timeout && Number(this.config.timeout) >= 1000) {\n this.logger.warn(\n [\n 'Too big timeout value: ' + this.config.timeout,\n 'We changed time format to nginx-like one',\n '(see http://nginx.org/en/docs/syntax.html)',\n 'so please update your config accordingly',\n ].join('\\n')\n );\n }\n\n // a bunch of different configurable timers\n this.maxage = parseInterval(setConfig(this.config, 'maxage', '2m'));\n // https://github.com/sindresorhus/got/blob/main/documentation/6-timeout.md\n this.timeout = {\n request: parseInterval(setConfig(this.config, 'timeout', '30s')),\n };\n debug('set timeout %s', this.timeout);\n this.max_fails = Number(setConfig(this.config, 'max_fails', this.config.max_fails ?? 2));\n this.fail_timeout = parseInterval(setConfig(this.config, 'fail_timeout', '5m'));\n this.strict_ssl = Boolean(setConfig(this.config, 'strict_ssl', true));\n this.retry = { limit: this.max_fails ?? 2 };\n }\n\n private getAgent() {\n if (!this.agent) {\n // TODO: the config.ca (certificates) is not yet injected here\n const agentInstance = new CustomAgents(this.config.url, this.proxy, this.agent_options);\n return agentInstance.get();\n } else {\n return this.agent;\n }\n }\n\n public getHeaders(headers = {}): gotHeaders {\n const accept = HEADERS.ACCEPT;\n const acceptEncoding = HEADERS.ACCEPT_ENCODING;\n const userAgent = HEADERS.USER_AGENT;\n\n headers[accept] = headers[accept] || contentTypeAccept;\n headers[acceptEncoding] = headers[acceptEncoding] || 'gzip';\n // registry.npmjs.org will only return search result if user-agent include string 'npm'\n headers[userAgent] = headers[userAgent] || `npm (${this.userAgent})`;\n return this.setAuthNext(headers);\n }\n\n /**\n * Validate configuration auth and assign Header authorization\n * @param {Object} headers\n * @return {Object}\n * @private\n */\n private setAuthNext(headers: gotHeaders): gotHeaders {\n const { auth } = this.config;\n if (typeof auth === 'undefined' || typeof headers[HEADERS.AUTHORIZATION] === 'string') {\n return headers;\n }\n\n if (_.isObject(auth) === false && _.isObject((auth as any).token) === false) {\n this._throwErrorAuth('Auth invalid');\n }\n\n // get NPM_TOKEN http://blog.npmjs.org/post/118393368555/deploying-with-npm-private-modules\n // or get other variable export in env\n // https://github.com/verdaccio/verdaccio/releases/tag/v2.5.0\n let token: any;\n const tokenConf: any = auth;\n if (_.isNil(tokenConf.token) === false && _.isString(tokenConf.token)) {\n token = tokenConf.token;\n } else if (_.isNil(tokenConf.token_env) === false) {\n if (typeof tokenConf.token_env === 'string') {\n token = process.env[tokenConf.token_env];\n } else if (typeof tokenConf.token_env === 'boolean' && tokenConf.token_env) {\n token = process.env.NPM_TOKEN;\n } else {\n this.logger.error(constants.ERROR_CODE.token_required);\n this._throwErrorAuth(constants.ERROR_CODE.token_required);\n }\n } else {\n token = process.env.NPM_TOKEN;\n }\n\n if (typeof token === 'undefined') {\n this._throwErrorAuth(constants.ERROR_CODE.token_required);\n }\n\n // define type Auth allow basic and bearer\n const type = tokenConf.type || TOKEN_BASIC;\n this._setHeaderAuthorization(headers, type, token);\n\n return headers;\n }\n\n /**\n * @param {string} message\n * @throws {Error}\n * @private\n */\n private _throwErrorAuth(message: string): Error {\n this.logger.error(message);\n throw new Error(message);\n }\n\n /**\n * Assign Header authorization with type authentication\n * @param {Object} headers\n * @param {string} type\n * @param {string} token\n * @private\n */\n private _setHeaderAuthorization(headers: any, type: string, token: any): void {\n const _type: string = type.toLowerCase();\n\n if (_type !== TOKEN_BEARER.toLowerCase() && _type !== TOKEN_BASIC.toLowerCase()) {\n this._throwErrorAuth(`Auth type '${_type}' not allowed`);\n }\n\n type = _.upperFirst(type);\n headers[HEADERS.AUTHORIZATION] = buildToken(type, token);\n }\n\n /**\n * It will add or override specified headers from config file.\n *\n * Eg:\n *\n * uplinks:\n npmjs:\n url: https://registry.npmjs.org/\n headers:\n Accept: \"application/vnd.npm.install-v2+json; q=1.0\"\n verdaccio-staging:\n url: https://mycompany.com/npm\n headers:\n Accept: \"application/json\"\n authorization: \"Basic YourBase64EncodedCredentials==\"\n\n * @param {Object} headers\n * @private\n * @deprecated use applyUplinkHeaders\n */\n private _overrideWithUpLinkConfLocaligHeaders(headers: Headers): any {\n if (!this.config.headers) {\n return headers;\n }\n\n // add/override headers specified in the config\n /* eslint guard-for-in: 0 */\n for (const key in this.config.headers) {\n headers[key] = this.config.headers[key];\n }\n }\n\n private applyUplinkHeaders(headers: gotHeaders): gotHeaders {\n if (!this.config.headers) {\n return headers;\n }\n\n // add/override headers specified in the config\n /* eslint guard-for-in: 0 */\n for (const key in this.config.headers) {\n headers[key] = this.config.headers[key];\n }\n return headers;\n }\n\n public async getRemoteMetadata(\n name: string,\n options: Partial<ISyncUplinksOptions>\n ): Promise<[Manifest, string]> {\n if (this._ifRequestFailure()) {\n throw errorUtils.getInternalError(API_ERROR.UPLINK_OFFLINE);\n }\n\n // FUTURE: allow mix headers that comes from the client\n debug('getting metadata for package %s', name);\n let headers = this.getHeaders(options?.headers);\n headers = this.addProxyHeaders(headers, options.remoteAddress);\n headers = this.applyUplinkHeaders(headers);\n // the following headers cannot be overwritten\n if (_.isNil(options.etag) === false) {\n headers[HEADERS.NONE_MATCH] = options.etag;\n headers[HEADERS.ACCEPT] = contentTypeAccept;\n }\n const method = options.method || 'GET';\n const uri = this.config.url + `/${encode(name)}`;\n debug('set retry limit is %s', this.retry.limit);\n let response;\n let responseLength = 0;\n try {\n const retry = options?.retry ?? this.retry;\n debug('retry initial count %s', retry);\n response = await got(uri, {\n headers,\n responseType: 'json',\n method,\n agent: this.agent,\n retry,\n timeout: this.timeout,\n hooks: {\n afterResponse: [\n (afterResponse) => {\n const code = afterResponse.statusCode;\n debug('after response code is %s', code);\n if (code >= HTTP_STATUS.OK && code < HTTP_STATUS.MULTIPLE_CHOICES) {\n if (this.failed_requests >= this.max_fails) {\n this.failed_requests = 0;\n this.logger.warn(\n {\n host: this.url.host,\n },\n 'host @{host} is now online'\n );\n }\n }\n\n return afterResponse;\n },\n ],\n beforeRetry: [\n (error: RequestError, count: number) => {\n debug('retry %s count: %s', uri, count);\n this.failed_requests = count ?? 0;\n this.logger.info(\n {\n request: {\n method: method,\n url: uri,\n },\n error: error.message,\n retryCount: this.failed_requests,\n },\n \"retry @{retryCount} req: '@{request.method} @{request.url}'\"\n );\n if (this.failed_requests >= this.max_fails) {\n this.logger.warn(\n {\n host: this.url.host,\n },\n 'host @{host} is now offline'\n );\n }\n },\n ],\n },\n })\n .on('request', () => {\n this.last_request_time = Date.now();\n })\n .on<any>('response', (eventResponse) => {\n const message = \"@{!status}, req: '@{request.method} @{request.url}' (streaming)\";\n this.logger.http(\n {\n request: {\n method: method,\n url: uri,\n },\n status: _.isNull(eventResponse) === false ? eventResponse.statusCode : 'ERR',\n },\n message\n );\n })\n .on('downloadProgress', (progress) => {\n if (progress.total) {\n debug('responseLength %s', progress.total);\n responseLength = progress.total;\n }\n });\n const etag = response.headers.etag as string;\n const data = response.body;\n\n // not modified status (304) registry does not return any payload\n // it is handled as an error\n if (response?.statusCode === HTTP_STATUS.NOT_MODIFIED) {\n throw errorUtils.getCode(HTTP_STATUS.NOT_MODIFIED, API_ERROR.NOT_MODIFIED_NO_DATA);\n }\n\n debug('uri %s success', uri);\n const message = \"@{!status}, req: '@{request.method} @{request.url}'\";\n this.logger.http(\n {\n // if error is null/false change this to undefined so it wont log\n request: { method: method, url: uri },\n status: response.statusCode,\n bytes: {\n in: options?.json ? JSON.stringify(options?.json).length : 0,\n out: responseLength || 0,\n },\n },\n message\n );\n return [data, etag];\n } catch (err: any) {\n debug('error %s on uri %s', err.code, uri);\n if (err.code === 'ERR_NON_2XX_3XX_RESPONSE') {\n const code = err.response.statusCode;\n debug('error code %s', code);\n if (code === HTTP_STATUS.NOT_FOUND) {\n throw errorUtils.getNotFound(errorUtils.API_ERROR.NOT_PACKAGE_UPLINK);\n }\n\n if (!(code >= HTTP_STATUS.OK && code < HTTP_STATUS.MULTIPLE_CHOICES)) {\n const error = errorUtils.getInternalError(\n `${errorUtils.API_ERROR.BAD_STATUS_CODE}: ${code}`\n );\n // we need this code to identify outside which status code triggered the error\n error.remoteStatus = code;\n throw error;\n }\n } else if (err.code === 'ETIMEDOUT') {\n debug('error code timeout');\n const code = err.code;\n const error = errorUtils.getInternalError(\n `${errorUtils.API_ERROR.SERVER_TIME_OUT}: ${code}`\n );\n // we need this code to identify outside which status code triggered the error\n error.remoteStatus = code;\n throw error;\n }\n throw err;\n }\n }\n\n // FIXME: handle stream and retry\n public fetchTarball(\n url: string,\n overrideOptions: Pick<ISyncUplinksOptions, 'remoteAddress' | 'etag' | 'retry'>\n ): any {\n debug('fetching url for %s', url);\n const options = { ...this.config, ...overrideOptions };\n let headers = this.getHeaders(options?.headers);\n headers = this.addProxyHeaders(headers, options.remoteAddress);\n headers = this.applyUplinkHeaders(headers);\n // the following headers cannot be overwritten\n if (_.isNil(options.etag) === false) {\n headers[HEADERS.NONE_MATCH] = options.etag;\n headers[HEADERS.ACCEPT] = contentTypeAccept;\n }\n const method = 'GET';\n // const uri = this.config.url + `/${encode(name)}`;\n debug('request uri for %s', url);\n\n const readStream = got\n .stream(url, {\n headers,\n method,\n agent: this.agent,\n // FIXME: this should be taken from construtor as priority\n retry: this.retry ?? options?.retry,\n timeout: this.timeout,\n })\n .on('request', () => {\n this.last_request_time = Date.now();\n });\n\n return readStream;\n }\n\n /**\n * Perform a stream search.\n * @param {*} options request options\n * @return {Stream}\n */\n public async search({ url, abort, retry }: ProxySearchParams): Promise<Stream.Readable> {\n try {\n const fullURL = new URL(`${this.url}${url}`);\n // FIXME: a better way to remove duplicate slashes?\n const uri = fullURL.href.replace(/([^:]\\/)\\/+/g, '$1');\n this.logger.http({ uri, uplink: this.upname }, 'search request to uplink @{uplink} - @{uri}');\n debug('searching on %s', uri);\n const response = got(uri, {\n signal: abort ? abort.signal : {},\n agent: this.agent,\n timeout: this.timeout,\n retry: retry ?? this.retry,\n });\n\n const res = await response.text();\n const streamSearch = new PassThrough({ objectMode: true });\n const streamResponse = Readable.from(res);\n // objects is one of the properties on the body, it ignores date and total\n streamResponse.pipe(JSONStream.parse('objects')).pipe(streamSearch, { end: true });\n return streamSearch;\n } catch (err: any) {\n debug('search error %s', err);\n if (err.response.statusCode === 409) {\n throw errorUtils.getInternalError(`bad status code ${err.response.statusCode} from uplink`);\n }\n this.logger.error(\n { errorMessage: err?.message, name: this.upname },\n 'proxy uplink @{name} search error: @{errorMessage}'\n );\n throw err;\n }\n }\n\n private addProxyHeaders(headers: gotHeaders, remoteAddress?: string): gotHeaders {\n // Only submit X-Forwarded-For field if we don't have a proxy selected\n // in the config file.\n //\n // Otherwise misconfigured proxy could return 407\n if (!this.proxy) {\n headers[HEADERS.FORWARDED_FOR] =\n (headers['x-forwarded-for'] ? headers['x-forwarded-for'] + ', ' : '') + remoteAddress;\n }\n\n // always attach Via header to avoid loops, even if we're not proxying\n headers['via'] = headers['via'] ? headers['via'] + ', ' : '';\n headers['via'] += '1.1 ' + this.server_id + ' (Verdaccio)';\n\n return headers;\n }\n\n /**\n * If the request failure.\n * @return {boolean}\n * @private\n */\n private _ifRequestFailure(): boolean {\n return (\n this.failed_requests >= this.max_fails &&\n Math.abs(Date.now() - (this.last_request_time as number)) < this.fail_timeout\n );\n }\n\n /**\n * Set up a proxy.\n * @param {*} hostname\n * @param {*} config\n * @param {*} mainconfig\n * @param {*} isHTTPS\n */\n private _setupProxy(\n hostname: string,\n config: UpLinkConfLocal,\n mainconfig: Config,\n isHTTPS: boolean\n ): void {\n let noProxyList;\n const proxy_key: string = isHTTPS ? 'https_proxy' : 'http_proxy';\n\n // get http_proxy and no_proxy configs\n if (proxy_key in config) {\n this.proxy = config[proxy_key];\n } else if (proxy_key in mainconfig) {\n this.proxy = mainconfig[proxy_key];\n }\n if ('no_proxy' in config) {\n noProxyList = config.no_proxy;\n } else if ('no_proxy' in mainconfig) {\n noProxyList = mainconfig.no_proxy;\n }\n\n // use wget-like algorithm to determine if proxy shouldn't be used\n if (hostname[0] !== '.') {\n hostname = '.' + hostname;\n }\n\n if (_.isString(noProxyList) && noProxyList.length) {\n noProxyList = noProxyList.split(',');\n }\n\n if (_.isArray(noProxyList)) {\n for (let i = 0; i < noProxyList.length; i++) {\n let noProxyItem = noProxyList[i];\n if (noProxyItem[0] !== '.') {\n noProxyItem = '.' + noProxyItem;\n }\n if (hostname.endsWith(noProxyItem)) {\n if (this.proxy) {\n this.logger.debug(\n { url: this.url.href, rule: noProxyItem },\n 'not using proxy for @{url}, excluded by @{rule} rule'\n );\n this.proxy = undefined;\n }\n break;\n }\n }\n }\n\n if (typeof this.proxy === 'string') {\n this.logger.debug(\n { url: this.url.href, proxy: this.proxy },\n 'using proxy @{proxy} for @{url}'\n );\n }\n }\n}\n\nexport { ProxyStorage };\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"proxy.js","names":["_JSONStream","_interopRequireDefault","require","_debug","_gotCjs","_interopRequireWildcard","_lodash","_stream","_url","_core","_utils","_agent","_proxyUtils","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","debug","buildDebug","encode","thing","encodeURIComponent","replace","jsonContentType","HEADERS","JSON","contentTypeAccept","setConfig","config","key","def","_","isNil","ProxyStorage","constructor","mainConfig","logger","agent","failed_requests","userAgent","user_agent","ca","server_id","agent_options","keepAlive","maxSockets","maxFreeSockets","url","URL","isHTTPS","protocol","_setupProxy","hostname","getAgent","timeout","Number","warn","join","maxage","parseInterval","request","max_fails","fail_timeout","strict_ssl","Boolean","retry","limit","agentInstance","CustomAgents","proxy","getHeaders","headers","accept","ACCEPT","acceptEncoding","ACCEPT_ENCODING","USER_AGENT","setAuthNext","auth","AUTHORIZATION","isObject","token","_throwErrorAuth","tokenConf","isString","token_env","process","env","NPM_TOKEN","error","constants","ERROR_CODE","token_required","type","TOKEN_BASIC","_setHeaderAuthorization","message","Error","_type","toLowerCase","TOKEN_BEARER","upperFirst","buildToken","_overrideWithUpLinkConfLocaligHeaders","applyUplinkHeaders","getRemoteMetadata","name","options","_ifRequestFailure","errorUtils","getInternalError","API_ERROR","UPLINK_OFFLINE","addProxyHeaders","remoteAddress","etag","NONE_MATCH","method","uri","response","responseLength","got","responseType","hooks","afterResponse","code","statusCode","HTTP_STATUS","OK","MULTIPLE_CHOICES","host","beforeRetry","count","info","retryCount","on","last_request_time","Date","now","eventResponse","http","status","isNull","progress","total","data","body","NOT_MODIFIED","getCode","NOT_MODIFIED_NO_DATA","bytes","in","json","stringify","length","out","err","NOT_FOUND","getNotFound","NOT_PACKAGE_UPLINK","BAD_STATUS_CODE","remoteStatus","SERVER_TIME_OUT","fetchTarball","overrideOptions","readStream","stream","search","abort","fullURL","href","uplink","upname","signal","res","text","streamSearch","PassThrough","objectMode","streamResponse","Readable","from","pipe","JSONStream","parse","end","errorMessage","FORWARDED_FOR","Math","abs","mainconfig","noProxyList","proxy_key","no_proxy","split","isArray","noProxyItem","endsWith","rule","undefined","exports"],"sources":["../src/proxy.ts"],"sourcesContent":["import JSONStream from 'JSONStream';\nimport buildDebug from 'debug';\nimport got, {\n Agents,\n Delays,\n Options,\n RequestError,\n RetryOptions,\n Headers as gotHeaders,\n} from 'got-cjs';\nimport _ from 'lodash';\nimport Stream, { PassThrough, Readable } from 'stream';\nimport { URL } from 'url';\n\nimport {\n API_ERROR,\n HEADERS,\n HTTP_STATUS,\n TOKEN_BASIC,\n TOKEN_BEARER,\n constants,\n errorUtils,\n searchUtils,\n} from '@verdaccio/core';\nimport { Manifest } from '@verdaccio/types';\nimport { Config, Logger, UpLinkConf } from '@verdaccio/types';\nimport { buildToken } from '@verdaccio/utils';\n\nimport CustomAgents, { AgentOptionsConf } from './agent';\nimport { parseInterval } from './proxy-utils';\n\nconst debug = buildDebug('verdaccio:proxy');\n\nconst encode = function (thing): string {\n return encodeURIComponent(thing).replace(/^%40/, '@');\n};\n\nconst jsonContentType = HEADERS.JSON;\nconst contentTypeAccept = `${jsonContentType};`;\n\n/**\n * Just a helper (`config[key] || default` doesn't work because of zeroes)\n */\nconst setConfig = (config: UpLinkConfLocal, key: string, def): string => {\n return _.isNil(config[key]) === false ? config[key] : def;\n};\n\nexport type UpLinkConfLocal = UpLinkConf & {\n no_proxy?: string;\n};\n\nexport interface ProxyList {\n [key: string]: IProxy;\n}\n\nexport type ProxySearchParams = {\n url: string;\n abort: AbortController;\n query?: searchUtils.SearchQuery;\n headers?: Headers;\n retry?: Partial<RetryOptions>;\n};\nexport interface IProxy {\n config: UpLinkConfLocal;\n failed_requests: number;\n userAgent: string;\n ca?: string | void;\n logger: Logger;\n server_id: string;\n url: URL;\n maxage: number;\n timeout: Delays;\n max_fails: number;\n fail_timeout: number;\n upname: string;\n search(options: ProxySearchParams): Promise<Stream.Readable>;\n getRemoteMetadata(\n name: string,\n options: Partial<ISyncUplinksOptions>\n ): Promise<[Manifest, string]>;\n fetchTarball(\n url: string,\n options: Partial<Pick<ISyncUplinksOptions, 'remoteAddress' | 'etag' | 'retry'>>\n ): PassThrough;\n}\n\n// this type is need it by storage\nexport { Options as FetchOptions };\n\nexport interface ISyncUplinksOptions extends Options {\n uplinksLook?: boolean;\n etag?: string;\n remoteAddress?: string;\n}\n\n/**\n * Implements Storage interface\n * (same for storage.js, local-storage.js, up-storage.js)\n */\nclass ProxyStorage implements IProxy {\n public config: UpLinkConfLocal;\n public failed_requests: number;\n public userAgent: string;\n public ca: string | void;\n public logger: Logger;\n public server_id: string;\n public url: URL;\n public maxage: number;\n public timeout: Delays;\n public max_fails: number;\n public fail_timeout: number;\n public agent_options: AgentOptionsConf;\n // FIXME: upname is assigned to each instance\n // @ts-ignore\n public upname: string;\n public proxy: string | undefined;\n private agent: Agents;\n // @ts-ignore\n public last_request_time: number | null;\n public strict_ssl: boolean;\n private retry: Partial<RetryOptions>;\n\n public constructor(config: UpLinkConfLocal, mainConfig: Config, logger: Logger, agent?: Agents) {\n this.config = config;\n this.failed_requests = 0;\n this.userAgent = mainConfig.user_agent ?? 'hidden';\n this.ca = config.ca;\n this.logger = logger;\n this.server_id = mainConfig.server_id;\n this.agent_options = setConfig(this.config, 'agent_options', {\n keepAlive: true,\n maxSockets: 40,\n maxFreeSockets: 10,\n }) as AgentOptionsConf;\n this.url = new URL(this.config.url);\n const isHTTPS = this.url.protocol === 'https:';\n this._setupProxy(this.url.hostname, config, mainConfig, isHTTPS);\n this.agent = agent ?? this.getAgent();\n this.config.url = this.config.url.replace(/\\/$/, '');\n\n if (this.config.timeout && Number(this.config.timeout) >= 1000) {\n this.logger.warn(\n [\n 'Too big timeout value: ' + this.config.timeout,\n 'We changed time format to nginx-like one',\n '(see http://nginx.org/en/docs/syntax.html)',\n 'so please update your config accordingly',\n ].join('\\n')\n );\n }\n\n // a bunch of different configurable timers\n this.maxage = parseInterval(setConfig(this.config, 'maxage', '2m'));\n // https://github.com/sindresorhus/got/blob/main/documentation/6-timeout.md\n this.timeout = {\n request: parseInterval(setConfig(this.config, 'timeout', '30s')),\n };\n debug('set timeout %s', this.timeout);\n this.max_fails = Number(setConfig(this.config, 'max_fails', this.config.max_fails ?? 2));\n this.fail_timeout = parseInterval(setConfig(this.config, 'fail_timeout', '5m'));\n this.strict_ssl = Boolean(setConfig(this.config, 'strict_ssl', true));\n this.retry = { limit: this.max_fails ?? 2 };\n }\n\n private getAgent() {\n if (!this.agent) {\n // TODO: the config.ca (certificates) is not yet injected here\n const agentInstance = new CustomAgents(this.config.url, this.proxy, this.agent_options);\n return agentInstance.get();\n } else {\n return this.agent;\n }\n }\n\n public getHeaders(headers = {}): gotHeaders {\n const accept = HEADERS.ACCEPT;\n const acceptEncoding = HEADERS.ACCEPT_ENCODING;\n const userAgent = HEADERS.USER_AGENT;\n\n headers[accept] = headers[accept] || contentTypeAccept;\n headers[acceptEncoding] = headers[acceptEncoding] || 'gzip';\n // registry.npmjs.org will only return search result if user-agent include string 'npm'\n headers[userAgent] = headers[userAgent] || `npm (${this.userAgent})`;\n return this.setAuthNext(headers);\n }\n\n /**\n * Validate configuration auth and assign Header authorization\n * @param {Object} headers\n * @return {Object}\n * @private\n */\n private setAuthNext(headers: gotHeaders): gotHeaders {\n const { auth } = this.config;\n if (typeof auth === 'undefined' || typeof headers[HEADERS.AUTHORIZATION] === 'string') {\n return headers;\n }\n\n if (_.isObject(auth) === false && _.isObject((auth as any).token) === false) {\n this._throwErrorAuth('Auth invalid');\n }\n\n // get NPM_TOKEN http://blog.npmjs.org/post/118393368555/deploying-with-npm-private-modules\n // or get other variable export in env\n // https://github.com/verdaccio/verdaccio/releases/tag/v2.5.0\n let token: any;\n const tokenConf: any = auth;\n if (_.isNil(tokenConf.token) === false && _.isString(tokenConf.token)) {\n token = tokenConf.token;\n } else if (_.isNil(tokenConf.token_env) === false) {\n if (typeof tokenConf.token_env === 'string') {\n token = process.env[tokenConf.token_env];\n } else if (typeof tokenConf.token_env === 'boolean' && tokenConf.token_env) {\n token = process.env.NPM_TOKEN;\n } else {\n this.logger.error(constants.ERROR_CODE.token_required);\n this._throwErrorAuth(constants.ERROR_CODE.token_required);\n }\n } else {\n token = process.env.NPM_TOKEN;\n }\n\n if (typeof token === 'undefined') {\n this._throwErrorAuth(constants.ERROR_CODE.token_required);\n }\n\n // define type Auth allow basic and bearer\n const type = tokenConf.type || TOKEN_BASIC;\n this._setHeaderAuthorization(headers, type, token);\n\n return headers;\n }\n\n /**\n * @param {string} message\n * @throws {Error}\n * @private\n */\n private _throwErrorAuth(message: string): Error {\n this.logger.error(message);\n throw new Error(message);\n }\n\n /**\n * Assign Header authorization with type authentication\n * @param {Object} headers\n * @param {string} type\n * @param {string} token\n * @private\n */\n private _setHeaderAuthorization(headers: any, type: string, token: any): void {\n const _type: string = type.toLowerCase();\n\n if (_type !== TOKEN_BEARER.toLowerCase() && _type !== TOKEN_BASIC.toLowerCase()) {\n this._throwErrorAuth(`Auth type '${_type}' not allowed`);\n }\n\n type = _.upperFirst(type);\n headers[HEADERS.AUTHORIZATION] = buildToken(type, token);\n }\n\n /**\n * It will add or override specified headers from config file.\n *\n * Eg:\n *\n * uplinks:\n npmjs:\n url: https://registry.npmjs.org/\n headers:\n Accept: \"application/vnd.npm.install-v2+json; q=1.0\"\n verdaccio-staging:\n url: https://mycompany.com/npm\n headers:\n Accept: \"application/json\"\n authorization: \"Basic YourBase64EncodedCredentials==\"\n\n * @param {Object} headers\n * @private\n * @deprecated use applyUplinkHeaders\n */\n private _overrideWithUpLinkConfLocaligHeaders(headers: Headers): any {\n if (!this.config.headers) {\n return headers;\n }\n\n // add/override headers specified in the config\n /* eslint guard-for-in: 0 */\n for (const key in this.config.headers) {\n headers[key] = this.config.headers[key];\n }\n }\n\n private applyUplinkHeaders(headers: gotHeaders): gotHeaders {\n if (!this.config.headers) {\n return headers;\n }\n\n // add/override headers specified in the config\n /* eslint guard-for-in: 0 */\n for (const key in this.config.headers) {\n headers[key] = this.config.headers[key];\n }\n return headers;\n }\n\n public async getRemoteMetadata(\n name: string,\n options: Partial<ISyncUplinksOptions>\n ): Promise<[Manifest, string]> {\n if (this._ifRequestFailure()) {\n throw errorUtils.getInternalError(API_ERROR.UPLINK_OFFLINE);\n }\n\n // FUTURE: allow mix headers that comes from the client\n debug('getting metadata for package %s', name);\n let headers = this.getHeaders(options?.headers);\n headers = this.addProxyHeaders(headers, options.remoteAddress);\n headers = this.applyUplinkHeaders(headers);\n // the following headers cannot be overwritten\n if (_.isNil(options.etag) === false) {\n headers[HEADERS.NONE_MATCH] = options.etag;\n headers[HEADERS.ACCEPT] = contentTypeAccept;\n }\n const method = options.method || 'GET';\n const uri = this.config.url + `/${encode(name)}`;\n debug('set retry limit is %s', this.retry.limit);\n let response;\n let responseLength = 0;\n try {\n const retry = options?.retry ?? this.retry;\n debug('retry initial count %s', retry);\n response = await got(uri, {\n headers,\n responseType: 'json',\n method,\n agent: this.agent,\n retry,\n timeout: this.timeout,\n hooks: {\n afterResponse: [\n (afterResponse) => {\n const code = afterResponse.statusCode;\n debug('after response code is %s', code);\n if (code >= HTTP_STATUS.OK && code < HTTP_STATUS.MULTIPLE_CHOICES) {\n if (this.failed_requests >= this.max_fails) {\n this.failed_requests = 0;\n this.logger.warn(\n {\n host: this.url.host,\n },\n 'host @{host} is now online'\n );\n }\n }\n\n return afterResponse;\n },\n ],\n beforeRetry: [\n (error: RequestError, count: number) => {\n debug('retry %s count: %s', uri, count);\n this.failed_requests = count ?? 0;\n this.logger.info(\n {\n request: {\n method: method,\n url: uri,\n },\n error: error.message,\n retryCount: this.failed_requests,\n },\n \"retry @{retryCount} req: '@{request.method} @{request.url}'\"\n );\n if (this.failed_requests >= this.max_fails) {\n this.logger.warn(\n {\n host: this.url.host,\n },\n 'host @{host} is now offline'\n );\n }\n },\n ],\n },\n })\n .on('request', () => {\n this.last_request_time = Date.now();\n })\n .on<any>('response', (eventResponse) => {\n const message = \"@{!status}, req: '@{request.method} @{request.url}' (streaming)\";\n this.logger.http(\n {\n request: {\n method: method,\n url: uri,\n },\n status: _.isNull(eventResponse) === false ? eventResponse.statusCode : 'ERR',\n },\n message\n );\n })\n .on('downloadProgress', (progress) => {\n if (progress.total) {\n debug('responseLength %s', progress.total);\n responseLength = progress.total;\n }\n });\n const etag = response.headers.etag as string;\n const data = response.body;\n\n // not modified status (304) registry does not return any payload\n // it is handled as an error\n if (response?.statusCode === HTTP_STATUS.NOT_MODIFIED) {\n throw errorUtils.getCode(HTTP_STATUS.NOT_MODIFIED, API_ERROR.NOT_MODIFIED_NO_DATA);\n }\n\n debug('uri %s success', uri);\n const message = \"@{!status}, req: '@{request.method} @{request.url}'\";\n this.logger.http(\n {\n // if error is null/false change this to undefined so it wont log\n request: { method: method, url: uri },\n status: response.statusCode,\n bytes: {\n in: options?.json ? JSON.stringify(options?.json).length : 0,\n out: responseLength || 0,\n },\n },\n message\n );\n return [data, etag];\n } catch (err: any) {\n debug('error %s on uri %s', err.code, uri);\n if (err.code === 'ERR_NON_2XX_3XX_RESPONSE') {\n const code = err.response.statusCode;\n debug('error code %s', code);\n if (code === HTTP_STATUS.NOT_FOUND) {\n throw errorUtils.getNotFound(errorUtils.API_ERROR.NOT_PACKAGE_UPLINK);\n }\n\n if (!(code >= HTTP_STATUS.OK && code < HTTP_STATUS.MULTIPLE_CHOICES)) {\n const error = errorUtils.getInternalError(\n `${errorUtils.API_ERROR.BAD_STATUS_CODE}: ${code}`\n );\n // we need this code to identify outside which status code triggered the error\n error.remoteStatus = code;\n throw error;\n }\n } else if (err.code === 'ETIMEDOUT') {\n debug('error code timeout');\n const code = err.code;\n const error = errorUtils.getInternalError(\n `${errorUtils.API_ERROR.SERVER_TIME_OUT}: ${code}`\n );\n // we need this code to identify outside which status code triggered the error\n error.remoteStatus = code;\n throw error;\n }\n throw err;\n }\n }\n\n // FIXME: handle stream and retry\n public fetchTarball(\n url: string,\n overrideOptions: Pick<ISyncUplinksOptions, 'remoteAddress' | 'etag' | 'retry'>\n ): any {\n debug('fetching url for %s', url);\n const options = { ...this.config, ...overrideOptions };\n let headers = this.getHeaders(options?.headers);\n headers = this.addProxyHeaders(headers, options.remoteAddress);\n headers = this.applyUplinkHeaders(headers);\n // the following headers cannot be overwritten\n if (_.isNil(options.etag) === false) {\n headers[HEADERS.NONE_MATCH] = options.etag;\n headers[HEADERS.ACCEPT] = contentTypeAccept;\n }\n const method = 'GET';\n // const uri = this.config.url + `/${encode(name)}`;\n debug('request uri for %s', url);\n\n const readStream = got\n .stream(url, {\n headers,\n method,\n agent: this.agent,\n // FIXME: this should be taken from construtor as priority\n retry: this.retry ?? options?.retry,\n timeout: this.timeout,\n })\n .on('request', () => {\n this.last_request_time = Date.now();\n });\n\n return readStream;\n }\n\n /**\n * Perform a stream search.\n * @param {*} options request options\n * @return {Stream}\n */\n public async search({ url, abort, retry }: ProxySearchParams): Promise<Stream.Readable> {\n try {\n const fullURL = new URL(`${this.url}${url}`);\n // FIXME: a better way to remove duplicate slashes?\n const uri = fullURL.href.replace(/([^:]\\/)\\/+/g, '$1');\n this.logger.http({ uri, uplink: this.upname }, 'search request to uplink @{uplink} - @{uri}');\n debug('searching on %s', uri);\n const response = got(uri, {\n signal: abort ? abort.signal : {},\n agent: this.agent,\n timeout: this.timeout,\n retry: retry ?? this.retry,\n });\n\n const res = await response.text();\n const streamSearch = new PassThrough({ objectMode: true });\n const streamResponse = Readable.from(res);\n // objects is one of the properties on the body, it ignores date and total\n streamResponse.pipe(JSONStream.parse('objects')).pipe(streamSearch, { end: true });\n return streamSearch;\n } catch (err: any) {\n debug('search error %s', err);\n if (err.response.statusCode === 409) {\n throw errorUtils.getInternalError(`bad status code ${err.response.statusCode} from uplink`);\n }\n this.logger.error(\n { errorMessage: err?.message, name: this.upname },\n 'proxy uplink @{name} search error: @{errorMessage}'\n );\n throw err;\n }\n }\n\n private addProxyHeaders(headers: gotHeaders, remoteAddress?: string): gotHeaders {\n // Only submit X-Forwarded-For field if we don't have a proxy selected\n // in the config file.\n //\n // Otherwise misconfigured proxy could return 407\n if (!this.proxy) {\n headers[HEADERS.FORWARDED_FOR] =\n (headers['x-forwarded-for'] ? headers['x-forwarded-for'] + ', ' : '') + remoteAddress;\n }\n\n // always attach Via header to avoid loops, even if we're not proxying\n headers['via'] = headers['via'] ? headers['via'] + ', ' : '';\n headers['via'] += '1.1 ' + this.server_id + ' (Verdaccio)';\n\n return headers;\n }\n\n /**\n * If the request failure.\n * @return {boolean}\n * @private\n */\n private _ifRequestFailure(): boolean {\n return (\n this.failed_requests >= this.max_fails &&\n Math.abs(Date.now() - (this.last_request_time as number)) < this.fail_timeout\n );\n }\n\n /**\n * Set up a proxy.\n * @param {*} hostname\n * @param {*} config\n * @param {*} mainconfig\n * @param {*} isHTTPS\n */\n private _setupProxy(\n hostname: string,\n config: UpLinkConfLocal,\n mainconfig: Config,\n isHTTPS: boolean\n ): void {\n let noProxyList;\n const proxy_key: string = isHTTPS ? 'https_proxy' : 'http_proxy';\n\n // get http_proxy and no_proxy configs\n if (proxy_key in config) {\n this.proxy = config[proxy_key];\n } else if (proxy_key in mainconfig) {\n this.proxy = mainconfig[proxy_key];\n }\n if ('no_proxy' in config) {\n noProxyList = config.no_proxy;\n } else if ('no_proxy' in mainconfig) {\n noProxyList = mainconfig.no_proxy;\n }\n\n // use wget-like algorithm to determine if proxy shouldn't be used\n if (hostname[0] !== '.') {\n hostname = '.' + hostname;\n }\n\n if (_.isString(noProxyList) && noProxyList.length) {\n noProxyList = noProxyList.split(',');\n }\n\n if (_.isArray(noProxyList)) {\n for (let i = 0; i < noProxyList.length; i++) {\n let noProxyItem = noProxyList[i];\n if (noProxyItem[0] !== '.') {\n noProxyItem = '.' + noProxyItem;\n }\n if (hostname.endsWith(noProxyItem)) {\n if (this.proxy) {\n this.logger.debug(\n { url: this.url.href, rule: noProxyItem },\n 'not using proxy for @{url}, excluded by @{rule} rule'\n );\n this.proxy = undefined;\n }\n break;\n }\n }\n }\n\n if (typeof this.proxy === 'string') {\n this.logger.debug(\n { url: this.url.href, proxy: this.proxy },\n 'using proxy @{proxy} for @{url}'\n );\n }\n }\n}\n\nexport { ProxyStorage };\n"],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@verdaccio/proxy",
3
- "version": "8.0.0-next-8.0",
3
+ "version": "8.0.0-next-8.2",
4
4
  "description": "verdaccio proxy fetcher",
5
5
  "main": "./build/index.js",
6
6
  "types": "build/index.d.ts",
@@ -26,12 +26,12 @@
26
26
  "verdaccio"
27
27
  ],
28
28
  "engines": {
29
- "node": ">=14"
29
+ "node": ">=18"
30
30
  },
31
31
  "dependencies": {
32
- "@verdaccio/config": "8.0.0-next-8.0",
33
- "@verdaccio/core": "8.0.0-next-8.0",
34
- "@verdaccio/utils": "7.0.1-next-8.0",
32
+ "@verdaccio/config": "8.0.0-next-8.2",
33
+ "@verdaccio/core": "8.0.0-next-8.2",
34
+ "@verdaccio/utils": "7.1.0-next-8.2",
35
35
  "JSONStream": "1.3.5",
36
36
  "debug": "4.3.7",
37
37
  "got-cjs": "12.5.4",
@@ -39,8 +39,8 @@
39
39
  "lodash": "4.17.21"
40
40
  },
41
41
  "devDependencies": {
42
- "@verdaccio/logger": "8.0.0-next-8.0",
43
- "@verdaccio/types": "13.0.0-next-8.0",
42
+ "@verdaccio/logger": "8.0.0-next-8.2",
43
+ "@verdaccio/types": "13.0.0-next-8.1",
44
44
  "get-stream": "^6.0.1",
45
45
  "nock": "13.5.1",
46
46
  "node-mocks-http": "1.14.1",