@verdaccio/proxy 6.0.0-6-next.53 → 7.0.0-next-7.7

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/.babelrc CHANGED
@@ -1,3 +1,3 @@
1
1
  {
2
- "extends": "../../.babelrc"
2
+ "extends": "../../.babelrc"
3
3
  }
package/CHANGELOG.md CHANGED
@@ -1,5 +1,311 @@
1
1
  # @verdaccio/proxy
2
2
 
3
+ ## 7.0.0-next-7.7
4
+
5
+ ### Patch Changes
6
+
7
+ - @verdaccio/core@7.0.0-next-7.7
8
+ - @verdaccio/config@7.0.0-next-7.7
9
+ - @verdaccio/utils@7.0.0-next-7.7
10
+
11
+ ## 7.0.0-next.6
12
+
13
+ ### Patch Changes
14
+
15
+ - Updated dependencies [4d96324]
16
+ - @verdaccio/config@7.0.0-next.6
17
+ - @verdaccio/core@7.0.0-next.6
18
+ - @verdaccio/utils@7.0.0-next.6
19
+
20
+ ## 7.0.0-next.5
21
+
22
+ ### Patch Changes
23
+
24
+ - Updated dependencies [f047cc8]
25
+ - @verdaccio/core@7.0.0-next.5
26
+ - @verdaccio/config@7.0.0-next.5
27
+ - @verdaccio/utils@7.0.0-next.5
28
+
29
+ ## 7.0.0-next.4
30
+
31
+ ### Patch Changes
32
+
33
+ - @verdaccio/core@7.0.0-next.4
34
+ - @verdaccio/config@7.0.0-next.4
35
+ - @verdaccio/utils@7.0.0-next.4
36
+
37
+ ## 7.0.0-next.3
38
+
39
+ ### Major Changes
40
+
41
+ - e7ebccb61: update major dependencies, remove old nodejs support
42
+
43
+ ### Patch Changes
44
+
45
+ - Updated dependencies [daceb6d87]
46
+ - Updated dependencies [e7ebccb61]
47
+ - @verdaccio/config@7.0.0-next.3
48
+ - @verdaccio/core@7.0.0-next.3
49
+ - @verdaccio/utils@7.0.0-next.3
50
+
51
+ ## 7.0.0-next.2
52
+
53
+ ### Patch Changes
54
+
55
+ - @verdaccio/core@7.0.0-next.2
56
+ - @verdaccio/config@7.0.0-next.2
57
+ - @verdaccio/utils@7.0.0-next.2
58
+
59
+ ## 7.0.0-next.1
60
+
61
+ ### Patch Changes
62
+
63
+ - @verdaccio/core@7.0.0-next.1
64
+ - @verdaccio/config@7.0.0-next.1
65
+ - @verdaccio/utils@7.0.0-next.1
66
+
67
+ ## 7.0.0-next.0
68
+
69
+ ### Major Changes
70
+
71
+ - feat!: bump to v7
72
+
73
+ ### Patch Changes
74
+
75
+ - Updated dependencies
76
+ - @verdaccio/config@7.0.0-next.0
77
+ - @verdaccio/core@7.0.0-next.0
78
+ - @verdaccio/utils@7.0.0-next.0
79
+
80
+ ## 6.0.0
81
+
82
+ ### Major Changes
83
+
84
+ - 292c0a37f: feat!: replace deprecated request dependency by got
85
+
86
+ This is a big refactoring of the core, fetching dependencies, improve code, more tests and better stability. This is essential for the next release, will take some time but would allow modularize more the core.
87
+
88
+ ## Notes
89
+
90
+ - Remove deprecated `request` by other `got`, retry improved, custom Agent ( got does not include it built-in)
91
+ - Remove `async` dependency from storage (used by core) it was linked with proxy somehow safe to remove now
92
+ - Refactor with promises instead callback wherever is possible
93
+ - ~Document the API~
94
+ - Improve testing, integration tests
95
+ - Bugfix
96
+ - Clean up old validations
97
+ - Improve performance
98
+
99
+ ## 💥 Breaking changes
100
+
101
+ - Plugin API methods were callbacks based are returning promises, this will break current storage plugins, check documentation for upgrade.
102
+ - Write Tarball, Read Tarball methods parameters change, a new set of options like `AbortController` signals are being provided to the `addAbortSignal` can be internally used with Streams when a request is aborted. eg: `addAbortSignal(signal, fs.createReadStream(pathName));`
103
+ - `@verdaccio/streams` stream abort support is legacy is being deprecated removed
104
+ - Remove AWS and Google Cloud packages for future refactoring [#2574](https://github.com/verdaccio/verdaccio/pull/2574).
105
+
106
+ - 459b6fa72: refactor: search v1 endpoint and local-database
107
+
108
+ - refactor search `api v1` endpoint, improve performance
109
+ - remove usage of `async` dependency https://github.com/verdaccio/verdaccio/issues/1225
110
+ - refactor method storage class
111
+ - create new module `core` to reduce the ammount of modules with utilities
112
+ - use `undici` instead `node-fetch`
113
+ - use `fastify` instead `express` for functional test
114
+
115
+ ### Breaking changes
116
+
117
+ - plugin storage API changes
118
+ - remove old search endpoint (return 404)
119
+ - filter local private packages at plugin level
120
+
121
+ The storage api changes for methods `get`, `add`, `remove` as promise base. The `search` methods also changes and recieves a `query` object that contains all query params from the client.
122
+
123
+ ```ts
124
+ export interface IPluginStorage<T> extends IPlugin {
125
+ add(name: string): Promise<void>;
126
+ remove(name: string): Promise<void>;
127
+ get(): Promise<any>;
128
+ init(): Promise<void>;
129
+ getSecret(): Promise<string>;
130
+ setSecret(secret: string): Promise<any>;
131
+ getPackageStorage(packageInfo: string): IPackageStorage;
132
+ search(query: searchUtils.SearchQuery): Promise<searchUtils.SearchItem[]>;
133
+ saveToken(token: Token): Promise<any>;
134
+ deleteToken(user: string, tokenKey: string): Promise<any>;
135
+ readTokens(filter: TokenFilter): Promise<Token[]>;
136
+ }
137
+ ```
138
+
139
+ - 10aeb4f13: feat!: experiments config renamed to flags
140
+
141
+ - The `experiments` configuration is renamed to `flags`. The functionality is exactly the same.
142
+
143
+ ```js
144
+ flags: token: false;
145
+ search: false;
146
+ ```
147
+
148
+ - The `self_path` property from the config file is being removed in favor of `config_file` full path.
149
+ - Refactor `config` module, better types and utilities
150
+
151
+ - e367c3f1e: - Replace signature handler for legacy tokens by removing deprecated crypto.createDecipher by createCipheriv
152
+
153
+ - Introduce environment variables for legacy tokens
154
+
155
+ ### Code Improvements
156
+
157
+ - Add debug library for improve developer experience
158
+
159
+ ### Breaking change
160
+
161
+ - The new signature invalidates all previous tokens generated by Verdaccio 4 or previous versions.
162
+ - The secret key must have 32 characters long.
163
+
164
+ ### New environment variables
165
+
166
+ - `VERDACCIO_LEGACY_ALGORITHM`: Allows to define the specific algorithm for the token signature which by default is `aes-256-ctr`
167
+ - `VERDACCIO_LEGACY_ENCRYPTION_KEY`: By default, the token stores in the database, but using this variable allows to get it from memory
168
+
169
+ - 82cb0f2bf: feat!: config.logs throw an error, logging config not longer accept array or logs property
170
+
171
+ ### 💥 Breaking change
172
+
173
+ This is valid
174
+
175
+ ```yaml
176
+ log: { type: stdout, format: pretty, level: http }
177
+ ```
178
+
179
+ This is invalid
180
+
181
+ ```yaml
182
+ logs: { type: stdout, format: pretty, level: http }
183
+ ```
184
+
185
+ or
186
+
187
+ ```yaml
188
+ logs:
189
+ - [{ type: stdout, format: pretty, level: http }]
190
+ ```
191
+
192
+ ### Minor Changes
193
+
194
+ - 631abe1ac: feat: refactor logger
195
+ - b702ea363: abort search request support for proxy
196
+ - b61f762d6: feat: add server rate limit protection to all request
197
+
198
+ To modify custom values, use the server settings property.
199
+
200
+ ```markdown
201
+ server:
202
+
203
+ ## https://www.npmjs.com/package/express-rate-limit#configuration-options
204
+
205
+ rateLimit:
206
+ windowMs: 1000
207
+ max: 10000
208
+ ```
209
+
210
+ The values are intended to be high, if you want to improve security of your server consider
211
+ using different values.
212
+
213
+ - 154b2ecd3: refactor: remove @verdaccio/commons-api in favor @verdaccio/core and remove duplications
214
+ - aa763baec: feat: add typescript project references settings
215
+
216
+ Reading https://ebaytech.berlin/optimizing-multi-package-apps-with-typescript-project-references-d5c57a3b4440 I realized I can use project references to solve the issue to pre-compile modules on develop mode.
217
+
218
+ It allows to navigate (IDE) trough the packages without need compile the packages.
219
+
220
+ Add two `tsconfig`, one using the previous existing configuration that is able to produce declaration files (`tsconfig.build`) and a new one `tsconfig` which is enables [_projects references_](https://www.typescriptlang.org/docs/handbook/project-references.html).
221
+
222
+ - 0a6412ca9: feat: refactor proxy with got v12
223
+ - 5167bb528: feat: ui search support for remote, local and private packages
224
+
225
+ The command `npm search` search globally and return all matches, with this improvement the user interface
226
+ is powered with the same capabilities.
227
+
228
+ The UI also tag where is the origin the package with a tag, also provide the latest version and description of the package.
229
+
230
+ - 45c03819e: refactor: render html middleware
231
+
232
+ ### Patch Changes
233
+
234
+ - 351aeeaa8: fix(deps): @verdaccio/utils should be a prod dep of local-storage
235
+ - a610ef26b: chore: add release step to private regisry on merge changeset pr
236
+ - 65cb26cf3: refactor: migrate request to node-fetch at hooks package
237
+ - e381e4845: fix: improve legacy nodejs support
238
+ - 34f0f1101: Enable prerelease mode with **changesets**
239
+ - 0a6412ca9: refactor: got instead undici
240
+ - 68ea21214: ESLint Warnings Fixed
241
+
242
+ Related to issue #1461
243
+
244
+ - max-len: most of the sensible max-len errors are fixed
245
+ - no-unused-vars: most of these types of errors are fixed by deleting not needed declarations
246
+ - @typescript-eslint/no-unused-vars: same as above
247
+
248
+ - Updated dependencies [292c0a37f]
249
+ - Updated dependencies [a1986e098]
250
+ - Updated dependencies [974cd8c19]
251
+ - Updated dependencies [a828271d6]
252
+ - Updated dependencies [ef88da3b4]
253
+ - Updated dependencies [43f32687c]
254
+ - Updated dependencies [679c19c1b]
255
+ - Updated dependencies [a3a209b5e]
256
+ - Updated dependencies [459b6fa72]
257
+ - Updated dependencies [9fc2e7961]
258
+ - Updated dependencies [24b9be020]
259
+ - Updated dependencies [794af76c5]
260
+ - Updated dependencies [351aeeaa8]
261
+ - Updated dependencies [10aeb4f13]
262
+ - Updated dependencies [9718e0330]
263
+ - Updated dependencies [1b217fd34]
264
+ - Updated dependencies [e367c3f1e]
265
+ - Updated dependencies [a1da11308]
266
+ - Updated dependencies [d167f92e1]
267
+ - Updated dependencies [d2c65da9c]
268
+ - Updated dependencies [00d1d2a17]
269
+ - Updated dependencies [1810ed0d8]
270
+ - Updated dependencies [a610ef26b]
271
+ - Updated dependencies [ddb6a2239]
272
+ - Updated dependencies [648575aa4]
273
+ - Updated dependencies [b61f762d6]
274
+ - Updated dependencies [d43894e8f]
275
+ - Updated dependencies [154b2ecd3]
276
+ - Updated dependencies [aa763baec]
277
+ - Updated dependencies [378e907d5]
278
+ - Updated dependencies [16e38df8a]
279
+ - Updated dependencies [34f0f1101]
280
+ - Updated dependencies [82cb0f2bf]
281
+ - Updated dependencies [dc571aabd]
282
+ - Updated dependencies [f859d2b1a]
283
+ - Updated dependencies [6c1eb021b]
284
+ - Updated dependencies [62c24b632]
285
+ - Updated dependencies [0a6412ca9]
286
+ - Updated dependencies [d08fe29d9]
287
+ - Updated dependencies [5167bb528]
288
+ - Updated dependencies [f86c31ed0]
289
+ - Updated dependencies [c9d1af0e5]
290
+ - Updated dependencies [4b29d715b]
291
+ - Updated dependencies [b13a3fefd]
292
+ - Updated dependencies [68ea21214]
293
+ - Updated dependencies [8f43bf17d]
294
+ - Updated dependencies [45c03819e]
295
+ - Updated dependencies [b849128de]
296
+ - @verdaccio/config@6.0.0
297
+ - @verdaccio/core@6.0.0
298
+ - @verdaccio/utils@6.0.0
299
+
300
+ ## 6.0.0-6-next.54
301
+
302
+ ### Patch Changes
303
+
304
+ - e381e4845: fix: improve legacy nodejs support
305
+ - @verdaccio/core@6.0.0-6-next.76
306
+ - @verdaccio/config@6.0.0-6-next.76
307
+ - @verdaccio/utils@6.0.0-6-next.44
308
+
3
309
  ## 6.0.0-6-next.53
4
310
 
5
311
  ### Minor Changes
package/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2021 Verdaccio contributors
3
+ Copyright (c) 2024 Verdaccio contributors
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
package/build/agent.js CHANGED
@@ -47,6 +47,5 @@ class CustomAgents {
47
47
  return this.proxy ? new _url.URL(this.proxy) : new _url.URL(this.url);
48
48
  }
49
49
  }
50
- var _default = CustomAgents;
51
- exports.default = _default;
50
+ var _default = exports.default = CustomAgents;
52
51
  //# sourceMappingURL=agent.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent.js","names":["_hpagent","require","_http","_https","_url","CustomAgents","constructor","url","proxy","agentOptions","protocol","getParsedUrl","agent","getAgent","get","isHTTPS","options","https","HttpsProxyAgent","http","HttpProxyAgent","HttpsAgent","HttpAgent","URL","_default","exports","default"],"sources":["../src/agent.ts"],"sourcesContent":["import { Agents } from 'got-cjs';\nimport { HttpProxyAgent, HttpsProxyAgent } from 'hpagent';\nimport { Agent as HttpAgent, AgentOptions as HttpAgentOptions } from 'http';\nimport { Agent as HttpsAgent, AgentOptions as HttpsAgentOptions } from 'https';\nimport { URL } from 'url';\n\nexport type AgentOptionsConf = HttpAgentOptions | HttpsAgentOptions;\n\nclass CustomAgents {\n private url: string;\n private proxy: string | undefined;\n private agentOptions: HttpAgentOptions | HttpsAgentOptions;\n private agent: Agents;\n public constructor(\n url: string,\n proxy: string | undefined,\n agentOptions: HttpAgentOptions | HttpsAgentOptions\n ) {\n this.proxy = proxy;\n this.url = url;\n this.agentOptions = agentOptions;\n const { protocol } = this.getParsedUrl();\n this.agent = this.getAgent(protocol);\n }\n\n public get() {\n return this.agent;\n }\n\n private getAgent(protocol: string): Agents {\n const isHTTPS = protocol === 'https:';\n if (this.proxy) {\n const options = {\n proxy: this.proxy,\n ...this.agentOptions,\n };\n // use hpagent\n return isHTTPS\n ? { https: new HttpsProxyAgent(options) }\n : { http: new HttpProxyAgent(options) };\n } else {\n // use native http/https agent\n return isHTTPS\n ? { https: new HttpsAgent(this.agentOptions) }\n : { http: new HttpAgent(this.agentOptions) };\n }\n }\n\n private getParsedUrl() {\n return this.proxy ? new URL(this.proxy) : new URL(this.url);\n }\n}\n\nexport default CustomAgents;\n"],"mappings":";;;;;;AACA,IAAAA,QAAA,GAAAC,OAAA;AACA,IAAAC,KAAA,GAAAD,OAAA;AACA,IAAAE,MAAA,GAAAF,OAAA;AACA,IAAAG,IAAA,GAAAH,OAAA;AAIA,MAAMI,YAAY,CAAC;EAKVC,WAAWA,CAChBC,GAAW,EACXC,KAAyB,EACzBC,YAAkD,EAClD;IACA,IAAI,CAACD,KAAK,GAAGA,KAAK;IAClB,IAAI,CAACD,GAAG,GAAGA,GAAG;IACd,IAAI,CAACE,YAAY,GAAGA,YAAY;IAChC,MAAM;MAAEC;IAAS,CAAC,GAAG,IAAI,CAACC,YAAY,CAAC,CAAC;IACxC,IAAI,CAACC,KAAK,GAAG,IAAI,CAACC,QAAQ,CAACH,QAAQ,CAAC;EACtC;EAEOI,GAAGA,CAAA,EAAG;IACX,OAAO,IAAI,CAACF,KAAK;EACnB;EAEQC,QAAQA,CAACH,QAAgB,EAAU;IACzC,MAAMK,OAAO,GAAGL,QAAQ,KAAK,QAAQ;IACrC,IAAI,IAAI,CAACF,KAAK,EAAE;MACd,MAAMQ,OAAO,GAAG;QACdR,KAAK,EAAE,IAAI,CAACA,KAAK;QACjB,GAAG,IAAI,CAACC;MACV,CAAC;MACD;MACA,OAAOM,OAAO,GACV;QAAEE,KAAK,EAAE,IAAIC,wBAAe,CAACF,OAAO;MAAE,CAAC,GACvC;QAAEG,IAAI,EAAE,IAAIC,uBAAc,CAACJ,OAAO;MAAE,CAAC;IAC3C,CAAC,MAAM;MACL;MACA,OAAOD,OAAO,GACV;QAAEE,KAAK,EAAE,IAAII,YAAU,CAAC,IAAI,CAACZ,YAAY;MAAE,CAAC,GAC5C;QAAEU,IAAI,EAAE,IAAIG,WAAS,CAAC,IAAI,CAACb,YAAY;MAAE,CAAC;IAChD;EACF;EAEQE,YAAYA,CAAA,EAAG;IACrB,OAAO,IAAI,CAACH,KAAK,GAAG,IAAIe,QAAG,CAAC,IAAI,CAACf,KAAK,CAAC,GAAG,IAAIe,QAAG,CAAC,IAAI,CAAChB,GAAG,CAAC;EAC7D;AACF;AAAC,IAAAiB,QAAA,GAEcnB,YAAY;AAAAoB,OAAA,CAAAC,OAAA,GAAAF,QAAA"}
1
+ {"version":3,"file":"agent.js","names":["_hpagent","require","_http","_https","_url","CustomAgents","constructor","url","proxy","agentOptions","protocol","getParsedUrl","agent","getAgent","get","isHTTPS","options","https","HttpsProxyAgent","http","HttpProxyAgent","HttpsAgent","HttpAgent","URL","_default","exports","default"],"sources":["../src/agent.ts"],"sourcesContent":["import { Agents } from 'got-cjs';\nimport { HttpProxyAgent, HttpsProxyAgent } from 'hpagent';\nimport { Agent as HttpAgent, AgentOptions as HttpAgentOptions } from 'http';\nimport { Agent as HttpsAgent, AgentOptions as HttpsAgentOptions } from 'https';\nimport { URL } from 'url';\n\nexport type AgentOptionsConf = HttpAgentOptions | HttpsAgentOptions;\n\nclass CustomAgents {\n private url: string;\n private proxy: string | undefined;\n private agentOptions: HttpAgentOptions | HttpsAgentOptions;\n private agent: Agents;\n public constructor(\n url: string,\n proxy: string | undefined,\n agentOptions: HttpAgentOptions | HttpsAgentOptions\n ) {\n this.proxy = proxy;\n this.url = url;\n this.agentOptions = agentOptions;\n const { protocol } = this.getParsedUrl();\n this.agent = this.getAgent(protocol);\n }\n\n public get() {\n return this.agent;\n }\n\n private getAgent(protocol: string): Agents {\n const isHTTPS = protocol === 'https:';\n if (this.proxy) {\n const options = {\n proxy: this.proxy,\n ...this.agentOptions,\n };\n // use hpagent\n return isHTTPS\n ? { https: new HttpsProxyAgent(options) }\n : { http: new HttpProxyAgent(options) };\n } else {\n // use native http/https agent\n return isHTTPS\n ? { https: new HttpsAgent(this.agentOptions) }\n : { http: new HttpAgent(this.agentOptions) };\n }\n }\n\n private getParsedUrl() {\n return this.proxy ? new URL(this.proxy) : new URL(this.url);\n }\n}\n\nexport default CustomAgents;\n"],"mappings":";;;;;;AACA,IAAAA,QAAA,GAAAC,OAAA;AACA,IAAAC,KAAA,GAAAD,OAAA;AACA,IAAAE,MAAA,GAAAF,OAAA;AACA,IAAAG,IAAA,GAAAH,OAAA;AAIA,MAAMI,YAAY,CAAC;EAKVC,WAAWA,CAChBC,GAAW,EACXC,KAAyB,EACzBC,YAAkD,EAClD;IACA,IAAI,CAACD,KAAK,GAAGA,KAAK;IAClB,IAAI,CAACD,GAAG,GAAGA,GAAG;IACd,IAAI,CAACE,YAAY,GAAGA,YAAY;IAChC,MAAM;MAAEC;IAAS,CAAC,GAAG,IAAI,CAACC,YAAY,CAAC,CAAC;IACxC,IAAI,CAACC,KAAK,GAAG,IAAI,CAACC,QAAQ,CAACH,QAAQ,CAAC;EACtC;EAEOI,GAAGA,CAAA,EAAG;IACX,OAAO,IAAI,CAACF,KAAK;EACnB;EAEQC,QAAQA,CAACH,QAAgB,EAAU;IACzC,MAAMK,OAAO,GAAGL,QAAQ,KAAK,QAAQ;IACrC,IAAI,IAAI,CAACF,KAAK,EAAE;MACd,MAAMQ,OAAO,GAAG;QACdR,KAAK,EAAE,IAAI,CAACA,KAAK;QACjB,GAAG,IAAI,CAACC;MACV,CAAC;MACD;MACA,OAAOM,OAAO,GACV;QAAEE,KAAK,EAAE,IAAIC,wBAAe,CAACF,OAAO;MAAE,CAAC,GACvC;QAAEG,IAAI,EAAE,IAAIC,uBAAc,CAACJ,OAAO;MAAE,CAAC;IAC3C,CAAC,MAAM;MACL;MACA,OAAOD,OAAO,GACV;QAAEE,KAAK,EAAE,IAAII,YAAU,CAAC,IAAI,CAACZ,YAAY;MAAE,CAAC,GAC5C;QAAEU,IAAI,EAAE,IAAIG,WAAS,CAAC,IAAI,CAACb,YAAY;MAAE,CAAC;IAChD;EACF;EAEQE,YAAYA,CAAA,EAAG;IACrB,OAAO,IAAI,CAACH,KAAK,GAAG,IAAIe,QAAG,CAAC,IAAI,CAACf,KAAK,CAAC,GAAG,IAAIe,QAAG,CAAC,IAAI,CAAChB,GAAG,CAAC;EAC7D;AACF;AAAC,IAAAiB,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEcrB,YAAY"}
package/build/proxy.js CHANGED
@@ -20,8 +20,8 @@ var _core = require("@verdaccio/core");
20
20
  var _utils = require("@verdaccio/utils");
21
21
  var _agent = _interopRequireDefault(require("./agent"));
22
22
  var _proxyUtils = require("./proxy-utils");
23
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
24
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
23
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
24
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
25
25
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
26
26
  const debug = (0, _debug.default)('verdaccio:proxy');
27
27
  const encode = function (thing) {
@@ -46,11 +46,14 @@ const setConfig = (config, key, def) => {
46
46
  class ProxyStorage {
47
47
  // FIXME: upname is assigned to each instance
48
48
  // @ts-ignore
49
+
49
50
  // @ts-ignore
51
+
50
52
  constructor(config, mainConfig, logger, agent) {
53
+ var _mainConfig$user_agen, _this$config$max_fail, _this$max_fails;
51
54
  this.config = config;
52
55
  this.failed_requests = 0;
53
- this.userAgent = mainConfig.user_agent ?? 'hidden';
56
+ this.userAgent = (_mainConfig$user_agen = mainConfig.user_agent) !== null && _mainConfig$user_agen !== void 0 ? _mainConfig$user_agen : 'hidden';
54
57
  this.ca = config.ca;
55
58
  this.logger = logger;
56
59
  this.server_id = mainConfig.server_id;
@@ -62,7 +65,7 @@ class ProxyStorage {
62
65
  this.url = new _url.URL(this.config.url);
63
66
  const isHTTPS = this.url.protocol === 'https:';
64
67
  this._setupProxy(this.url.hostname, config, mainConfig, isHTTPS);
65
- this.agent = agent ?? this.getAgent();
68
+ this.agent = agent !== null && agent !== void 0 ? agent : this.getAgent();
66
69
  this.config.url = this.config.url.replace(/\/$/, '');
67
70
  if (this.config.timeout && Number(this.config.timeout) >= 1000) {
68
71
  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'));
@@ -75,11 +78,11 @@ class ProxyStorage {
75
78
  request: (0, _proxyUtils.parseInterval)(setConfig(this.config, 'timeout', '30s'))
76
79
  };
77
80
  debug('set timeout %s', this.timeout);
78
- this.max_fails = Number(setConfig(this.config, 'max_fails', this.config.max_fails ?? 2));
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));
79
82
  this.fail_timeout = (0, _proxyUtils.parseInterval)(setConfig(this.config, 'fail_timeout', '5m'));
80
83
  this.strict_ssl = Boolean(setConfig(this.config, 'strict_ssl', true));
81
84
  this.retry = {
82
- limit: this.max_fails ?? 2
85
+ limit: (_this$max_fails = this.max_fails) !== null && _this$max_fails !== void 0 ? _this$max_fails : 2
83
86
  };
84
87
  }
85
88
  getAgent() {
@@ -237,8 +240,8 @@ class ProxyStorage {
237
240
  let response;
238
241
  let responseLength = 0;
239
242
  try {
240
- var _response;
241
- const retry = (options === null || options === void 0 ? void 0 : options.retry) ?? this.retry;
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
245
  debug('retry initial count %s', retry);
243
246
  response = await (0, _gotCjs.default)(uri, {
244
247
  headers,
@@ -263,7 +266,7 @@ class ProxyStorage {
263
266
  }],
264
267
  beforeRetry: [(error, count) => {
265
268
  debug('retry %s count: %s', uri, count);
266
- this.failed_requests = count ?? 0;
269
+ this.failed_requests = count !== null && count !== void 0 ? count : 0;
267
270
  this.logger.info({
268
271
  request: {
269
272
  method: method,
@@ -347,6 +350,7 @@ class ProxyStorage {
347
350
 
348
351
  // FIXME: handle stream and retry
349
352
  fetchTarball(url, overrideOptions) {
353
+ var _this$retry;
350
354
  debug('fetching url for %s', url);
351
355
  const options = {
352
356
  ...this.config,
@@ -368,7 +372,7 @@ class ProxyStorage {
368
372
  method,
369
373
  agent: this.agent,
370
374
  // FIXME: this should be taken from construtor as priority
371
- retry: this.retry ?? (options === null || options === void 0 ? void 0 : options.retry),
375
+ retry: (_this$retry = this.retry) !== null && _this$retry !== void 0 ? _this$retry : options === null || options === void 0 ? void 0 : options.retry,
372
376
  timeout: this.timeout
373
377
  }).on('request', () => {
374
378
  this.last_request_time = Date.now();
@@ -399,7 +403,7 @@ class ProxyStorage {
399
403
  signal: abort ? abort.signal : {},
400
404
  agent: this.agent,
401
405
  timeout: this.timeout,
402
- retry: retry ?? this.retry
406
+ retry: retry !== null && retry !== void 0 ? retry : this.retry
403
407
  });
404
408
  const res = await response.text();
405
409
  const streamSearch = new _stream.PassThrough({
@@ -1 +1 @@
1
- {"version":3,"file":"proxy.js","names":["_JSONStream","_interopRequireDefault","require","_debug","_gotCjs","_interopRequireWildcard","_lodash","_stream","_url","_core","_utils","_agent","_proxyUtils","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","default","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","debug","buildDebug","encode","thing","encodeURIComponent","replace","jsonContentType","HEADERS","JSON","contentTypeAccept","setConfig","config","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","_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","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","i","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.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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"}
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","prototype","hasOwnProperty","call","i","set","obj","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.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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@verdaccio/proxy",
3
- "version": "6.0.0-6-next.53",
3
+ "version": "7.0.0-next-7.7",
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": ">=12"
29
+ "node": ">=18"
30
30
  },
31
31
  "dependencies": {
32
- "@verdaccio/config": "6.0.0-6-next.75",
33
- "@verdaccio/core": "6.0.0-6-next.75",
34
- "@verdaccio/utils": "6.0.0-6-next.43",
32
+ "@verdaccio/config": "7.0.0-next-7.7",
33
+ "@verdaccio/core": "7.0.0-next-7.7",
34
+ "@verdaccio/utils": "7.0.0-next-7.7",
35
35
  "JSONStream": "1.3.5",
36
36
  "debug": "4.3.4",
37
37
  "got-cjs": "12.5.4",
@@ -39,11 +39,11 @@
39
39
  "lodash": "4.17.21"
40
40
  },
41
41
  "devDependencies": {
42
- "@verdaccio/types": "11.0.0-6-next.25",
43
- "@verdaccio/logger": "6.0.0-6-next.43",
42
+ "@verdaccio/logger": "7.0.0-next-7.7",
43
+ "@verdaccio/types": "12.0.0-next.2",
44
44
  "get-stream": "^6.0.1",
45
- "nock": "13.2.9",
46
- "node-mocks-http": "1.12.1",
45
+ "nock": "13.4.0",
46
+ "node-mocks-http": "1.14.1",
47
47
  "p-cancelable": "2.1.1",
48
48
  "semver": "7.5.4"
49
49
  },
@@ -198,11 +198,7 @@ describe('proxy', () => {
198
198
  prox1.getRemoteMetadata('jquery', {
199
199
  remoteAddress: '127.0.0.1',
200
200
  })
201
- ).rejects.toThrow(
202
- new Error(
203
- 'Unexpected token s in JSON at position 0 in "https://registry.npmjs.org/jquery"'
204
- )
205
- );
201
+ ).rejects.toThrow();
206
202
  });
207
203
 
208
204
  test('400 error proxy call', async () => {