@verdaccio/api 6.0.0-6-next.15 → 6.0.0-6-next.19

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.
Files changed (58) hide show
  1. package/CHANGELOG.md +108 -0
  2. package/build/dist-tags.d.ts +1 -1
  3. package/build/dist-tags.js +10 -10
  4. package/build/dist-tags.js.map +1 -1
  5. package/build/index.js +16 -10
  6. package/build/index.js.map +1 -1
  7. package/build/package.d.ts +1 -2
  8. package/build/package.js +30 -63
  9. package/build/package.js.map +1 -1
  10. package/build/ping.js.map +1 -1
  11. package/build/publish.d.ts +2 -2
  12. package/build/publish.js +28 -34
  13. package/build/publish.js.map +1 -1
  14. package/build/search.js +2 -2
  15. package/build/search.js.map +1 -1
  16. package/build/star.d.ts +1 -1
  17. package/build/star.js +9 -15
  18. package/build/star.js.map +1 -1
  19. package/build/stars.js +3 -3
  20. package/build/stars.js.map +1 -1
  21. package/build/user.d.ts +1 -1
  22. package/build/user.js +17 -17
  23. package/build/user.js.map +1 -1
  24. package/build/utils.js.map +1 -1
  25. package/build/v1/profile.js +10 -10
  26. package/build/v1/profile.js.map +1 -1
  27. package/build/v1/search.js +16 -7
  28. package/build/v1/search.js.map +1 -1
  29. package/build/v1/token.d.ts +1 -1
  30. package/build/v1/token.js +17 -23
  31. package/build/v1/token.js.map +1 -1
  32. package/build/whoami.js +0 -1
  33. package/build/whoami.js.map +1 -1
  34. package/package.json +18 -19
  35. package/src/dist-tags.ts +14 -13
  36. package/src/index.ts +16 -10
  37. package/src/package.ts +38 -57
  38. package/src/ping.ts +2 -1
  39. package/src/publish.ts +18 -11
  40. package/src/search.ts +1 -1
  41. package/src/star.ts +4 -3
  42. package/src/stars.ts +4 -4
  43. package/src/user.ts +13 -13
  44. package/src/utils.ts +2 -1
  45. package/src/v1/profile.ts +10 -9
  46. package/src/v1/search.ts +14 -7
  47. package/src/v1/token.ts +17 -16
  48. package/src/whoami.ts +3 -3
  49. package/test/integration/_helper.ts +7 -5
  50. package/test/integration/package.spec.ts +3 -2
  51. package/test/integration/ping.spec.ts +2 -1
  52. package/test/integration/publish.spec.ts +6 -9
  53. package/test/integration/user.spec.ts +9 -11
  54. package/test/integration/whoami.spec.ts +1 -1
  55. package/test/unit/publish.spec.ts +6 -6
  56. package/test/unit/validate.api.params.middleware.spec.ts +1 -1
  57. package/tsconfig.json +0 -3
  58. package/types/custom.d.ts +2 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,113 @@
1
1
  # @verdaccio/api
2
2
 
3
+ ## 6.0.0-6-next.19
4
+
5
+ ### Major Changes
6
+
7
+ - a828271d: refactor: download manifest endpoint and integrate fastify
8
+
9
+ Much simpler API for fetching a package
10
+
11
+ ```
12
+ const manifest = await storage.getPackageNext({
13
+ name,
14
+ uplinksLook: true,
15
+ req,
16
+ version: queryVersion,
17
+ requestOptions,
18
+ });
19
+ ```
20
+
21
+ > not perfect, the `req` still is being passed to the proxy (this has to be refactored at proxy package) and then removed from here, in proxy we pass the request instance to the `request` library.
22
+
23
+ ### Details
24
+
25
+ - `async/await` sugar for getPackage()
26
+ - Improve and reuse code between current implementation and new fastify endpoint (add scaffolding for request manifest)
27
+ - Improve performance
28
+ - Add new tests
29
+
30
+ ### Breaking changes
31
+
32
+ All storage plugins will stop to work since the storage uses `getPackageNext` method which is Promise based, I won't replace this now because will force me to update all plugins, I'll follow up in another PR. Currently will throw http 500
33
+
34
+ ### Minor Changes
35
+
36
+ - 24b9be02: refactor: improve docker image build with strict dependencies and prod build
37
+ - b13a3fef: refactor: improve versions and dist-tag filters
38
+
39
+ ### Patch Changes
40
+
41
+ - Updated dependencies [a828271d]
42
+ - Updated dependencies [24b9be02]
43
+ - Updated dependencies [e75c0a3b]
44
+ - Updated dependencies [b13a3fef]
45
+ - @verdaccio/store@6.0.0-6-next.17
46
+ - @verdaccio/utils@6.0.0-6-next.10
47
+ - @verdaccio/core@6.0.0-6-next.4
48
+ - @verdaccio/middleware@6.0.0-6-next.16
49
+ - @verdaccio/logger@6.0.0-6-next.8
50
+ - @verdaccio/auth@6.0.0-6-next.16
51
+ - @verdaccio/config@6.0.0-6-next.12
52
+ - @verdaccio/hooks@6.0.0-6-next.10
53
+
54
+ ## 6.0.0-6-next.18
55
+
56
+ ### Patch Changes
57
+
58
+ - Updated dependencies [f86c31ed]
59
+ - Updated dependencies [20c9e43e]
60
+ - @verdaccio/store@6.0.0-6-next.16
61
+ - @verdaccio/utils@6.0.0-6-next.9
62
+ - @verdaccio/auth@6.0.0-6-next.15
63
+ - @verdaccio/config@6.0.0-6-next.11
64
+ - @verdaccio/tarball@11.0.0-6-next.10
65
+ - @verdaccio/middleware@6.0.0-6-next.15
66
+ - @verdaccio/hooks@6.0.0-6-next.9
67
+
68
+ ## 6.0.0-6-next.17
69
+
70
+ ### Patch Changes
71
+
72
+ - Updated dependencies [6c1eb021]
73
+ - @verdaccio/core@6.0.0-6-next.3
74
+ - @verdaccio/logger@6.0.0-6-next.7
75
+ - @verdaccio/auth@6.0.0-6-next.14
76
+ - @verdaccio/config@6.0.0-6-next.10
77
+ - @verdaccio/tarball@11.0.0-6-next.9
78
+ - @verdaccio/hooks@6.0.0-6-next.9
79
+ - @verdaccio/middleware@6.0.0-6-next.14
80
+ - @verdaccio/store@6.0.0-6-next.15
81
+ - @verdaccio/utils@6.0.0-6-next.8
82
+
83
+ ## 6.0.0-6-next.16
84
+
85
+ ### Major Changes
86
+
87
+ - 794af76c: Remove Node 12 support
88
+
89
+ - We need move to the new `undici` and does not support Node.js 12
90
+
91
+ ### Minor Changes
92
+
93
+ - b702ea36: abort search request support for proxy
94
+ - 154b2ecd: refactor: remove @verdaccio/commons-api in favor @verdaccio/core and remove duplications
95
+
96
+ ### Patch Changes
97
+
98
+ - Updated dependencies [794af76c]
99
+ - Updated dependencies [b702ea36]
100
+ - Updated dependencies [154b2ecd]
101
+ - @verdaccio/auth@6.0.0-6-next.13
102
+ - @verdaccio/config@6.0.0-6-next.9
103
+ - @verdaccio/core@6.0.0-6-next.2
104
+ - @verdaccio/tarball@11.0.0-6-next.8
105
+ - @verdaccio/hooks@6.0.0-6-next.8
106
+ - @verdaccio/logger@6.0.0-6-next.6
107
+ - @verdaccio/middleware@6.0.0-6-next.13
108
+ - @verdaccio/store@6.0.0-6-next.14
109
+ - @verdaccio/utils@6.0.0-6-next.7
110
+
3
111
  ## 6.0.0-6-next.15
4
112
 
5
113
  ### Patch Changes
@@ -1,4 +1,4 @@
1
1
  import { Router } from 'express';
2
- import { Storage } from '@verdaccio/store';
3
2
  import { IAuth } from '@verdaccio/auth';
3
+ import { Storage } from '@verdaccio/store';
4
4
  export default function (route: Router, auth: IAuth, storage: Storage): void;
@@ -5,14 +5,14 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = _default;
7
7
 
8
+ var _lodash = _interopRequireDefault(require("lodash"));
9
+
8
10
  var _mime = _interopRequireDefault(require("mime"));
9
11
 
10
- var _lodash = _interopRequireDefault(require("lodash"));
12
+ var _core = require("@verdaccio/core");
11
13
 
12
14
  var _middleware = require("@verdaccio/middleware");
13
15
 
14
- var _commonsApi = require("@verdaccio/commons-api");
15
-
16
16
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
17
 
18
18
  function _default(route, auth, storage) {
@@ -30,9 +30,9 @@ function _default(route, auth, storage) {
30
30
  return next(err);
31
31
  }
32
32
 
33
- res.status(_commonsApi.HTTP_STATUS.CREATED);
33
+ res.status(_core.constants.HTTP_STATUS.CREATED);
34
34
  return next({
35
- ok: _commonsApi.API_MESSAGE.TAG_ADDED
35
+ ok: _core.constants.API_MESSAGE.TAG_ADDED
36
36
  });
37
37
  });
38
38
  }; // tagging a package.
@@ -49,9 +49,9 @@ function _default(route, auth, storage) {
49
49
  return next(err);
50
50
  }
51
51
 
52
- res.status(_commonsApi.HTTP_STATUS.CREATED);
52
+ res.status(_core.constants.HTTP_STATUS.CREATED);
53
53
  return next({
54
- ok: _commonsApi.API_MESSAGE.TAG_REMOVED
54
+ ok: _core.constants.API_MESSAGE.TAG_REMOVED
55
55
  });
56
56
  });
57
57
  });
@@ -65,7 +65,7 @@ function _default(route, auth, storage) {
65
65
  return next(err);
66
66
  }
67
67
 
68
- next(info[_commonsApi.DIST_TAGS]);
68
+ next(info[_core.constants.DIST_TAGS]);
69
69
  }
70
70
  });
71
71
  });
@@ -75,9 +75,9 @@ function _default(route, auth, storage) {
75
75
  return next(err);
76
76
  }
77
77
 
78
- res.status(_commonsApi.HTTP_STATUS.CREATED);
78
+ res.status(_core.constants.HTTP_STATUS.CREATED);
79
79
  return next({
80
- ok: _commonsApi.API_MESSAGE.TAG_UPDATED
80
+ ok: _core.constants.API_MESSAGE.TAG_UPDATED
81
81
  });
82
82
  });
83
83
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/dist-tags.ts"],"names":["route","auth","storage","can","tag_package_version","req","res","next","_","isString","body","tags","params","tag","mergeTags","package","err","status","HTTP_STATUS","CREATED","ok","API_MESSAGE","TAG_ADDED","put","mime","getType","post","delete","TAG_REMOVED","get","getPackage","name","uplinksLook","callback","info","DIST_TAGS","TAG_UPDATED"],"mappings":"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","sourcesContent":["import mime from 'mime';\nimport _ from 'lodash';\nimport { Router } from 'express';\n\nimport { media, allow } from '@verdaccio/middleware';\nimport { API_MESSAGE, HTTP_STATUS, DIST_TAGS, VerdaccioError } from '@verdaccio/commons-api';\nimport { Package } from '@verdaccio/types';\nimport { Storage } from '@verdaccio/store';\nimport { IAuth } from '@verdaccio/auth';\nimport { $NextFunctionVer, $RequestExtend, $ResponseExtend } from '../types/custom';\n\nexport default function (route: Router, auth: IAuth, storage: Storage): void {\n const can = allow(auth);\n const tag_package_version = function (\n req: $RequestExtend,\n res: $ResponseExtend,\n next: $NextFunctionVer\n ): $NextFunctionVer {\n if (_.isString(req.body) === false) {\n return next('route');\n }\n\n const tags = {};\n tags[req.params.tag] = req.body;\n storage.mergeTags(req.params.package, tags, function (err: Error): $NextFunctionVer {\n if (err) {\n return next(err);\n }\n res.status(HTTP_STATUS.CREATED);\n return next({ ok: API_MESSAGE.TAG_ADDED });\n });\n };\n\n // tagging a package.\n route.put('/:package/:tag', can('publish'), media(mime.getType('json')), tag_package_version);\n\n route.post(\n '/-/package/:package/dist-tags/:tag',\n can('publish'),\n media(mime.getType('json')),\n tag_package_version\n );\n\n route.put(\n '/-/package/:package/dist-tags/:tag',\n can('publish'),\n media(mime.getType('json')),\n tag_package_version\n );\n\n route.delete(\n '/-/package/:package/dist-tags/:tag',\n can('publish'),\n function (req: $RequestExtend, res: $ResponseExtend, next: $NextFunctionVer): void {\n const tags = {};\n tags[req.params.tag] = null;\n storage.mergeTags(req.params.package, tags, function (err: VerdaccioError): $NextFunctionVer {\n if (err) {\n return next(err);\n }\n res.status(HTTP_STATUS.CREATED);\n return next({\n ok: API_MESSAGE.TAG_REMOVED,\n });\n });\n }\n );\n\n route.get(\n '/-/package/:package/dist-tags',\n can('access'),\n function (req: $RequestExtend, res: $ResponseExtend, next: $NextFunctionVer): void {\n storage.getPackage({\n name: req.params.package,\n uplinksLook: true,\n req,\n callback: function (err: VerdaccioError, info: Package): $NextFunctionVer {\n if (err) {\n return next(err);\n }\n\n next(info[DIST_TAGS]);\n },\n });\n }\n );\n\n route.post(\n '/-/package/:package/dist-tags',\n can('publish'),\n function (req: $RequestExtend, res: $ResponseExtend, next: $NextFunctionVer): void {\n storage.mergeTags(\n req.params.package,\n req.body,\n function (err: VerdaccioError): $NextFunctionVer {\n if (err) {\n return next(err);\n }\n res.status(HTTP_STATUS.CREATED);\n return next({\n ok: API_MESSAGE.TAG_UPDATED,\n });\n }\n );\n }\n );\n}\n"],"file":"dist-tags.js"}
1
+ {"version":3,"sources":["../src/dist-tags.ts"],"names":["route","auth","storage","can","tag_package_version","req","res","next","_","isString","body","tags","params","tag","mergeTags","package","err","status","constants","HTTP_STATUS","CREATED","ok","API_MESSAGE","TAG_ADDED","put","mime","getType","post","delete","TAG_REMOVED","get","getPackage","name","uplinksLook","callback","info","DIST_TAGS","TAG_UPDATED"],"mappings":"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","sourcesContent":["import { Router } from 'express';\nimport _ from 'lodash';\nimport mime from 'mime';\n\nimport { IAuth } from '@verdaccio/auth';\nimport { VerdaccioError, constants } from '@verdaccio/core';\nimport { allow, media } from '@verdaccio/middleware';\nimport { Storage } from '@verdaccio/store';\nimport { Package } from '@verdaccio/types';\n\nimport { $NextFunctionVer, $RequestExtend, $ResponseExtend } from '../types/custom';\n\nexport default function (route: Router, auth: IAuth, storage: Storage): void {\n const can = allow(auth);\n const tag_package_version = function (\n req: $RequestExtend,\n res: $ResponseExtend,\n next: $NextFunctionVer\n ): $NextFunctionVer {\n if (_.isString(req.body) === false) {\n return next('route');\n }\n\n const tags = {};\n tags[req.params.tag] = req.body;\n storage.mergeTags(req.params.package, tags, function (err: Error): $NextFunctionVer {\n if (err) {\n return next(err);\n }\n res.status(constants.HTTP_STATUS.CREATED);\n return next({ ok: constants.API_MESSAGE.TAG_ADDED });\n });\n };\n\n // tagging a package.\n route.put('/:package/:tag', can('publish'), media(mime.getType('json')), tag_package_version);\n\n route.post(\n '/-/package/:package/dist-tags/:tag',\n can('publish'),\n media(mime.getType('json')),\n tag_package_version\n );\n\n route.put(\n '/-/package/:package/dist-tags/:tag',\n can('publish'),\n media(mime.getType('json')),\n tag_package_version\n );\n\n route.delete(\n '/-/package/:package/dist-tags/:tag',\n can('publish'),\n function (req: $RequestExtend, res: $ResponseExtend, next: $NextFunctionVer): void {\n const tags = {};\n tags[req.params.tag] = null;\n storage.mergeTags(req.params.package, tags, function (err: VerdaccioError): $NextFunctionVer {\n if (err) {\n return next(err);\n }\n res.status(constants.HTTP_STATUS.CREATED);\n return next({\n ok: constants.API_MESSAGE.TAG_REMOVED,\n });\n });\n }\n );\n\n route.get(\n '/-/package/:package/dist-tags',\n can('access'),\n function (req: $RequestExtend, res: $ResponseExtend, next: $NextFunctionVer): void {\n storage.getPackage({\n name: req.params.package,\n uplinksLook: true,\n req,\n callback: function (err: VerdaccioError, info: Package): $NextFunctionVer {\n if (err) {\n return next(err);\n }\n\n next(info[constants.DIST_TAGS]);\n },\n });\n }\n );\n\n route.post(\n '/-/package/:package/dist-tags',\n can('publish'),\n function (req: $RequestExtend, res: $ResponseExtend, next: $NextFunctionVer): void {\n storage.mergeTags(\n req.params.package,\n req.body,\n function (err: VerdaccioError): $NextFunctionVer {\n if (err) {\n return next(err);\n }\n res.status(constants.HTTP_STATUS.CREATED);\n return next({\n ok: constants.API_MESSAGE.TAG_UPDATED,\n });\n }\n );\n }\n );\n}\n"],"file":"dist-tags.js"}
package/build/index.js CHANGED
@@ -5,36 +5,42 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = _default;
7
7
 
8
+ var _bodyParser = _interopRequireDefault(require("body-parser"));
9
+
8
10
  var _express = _interopRequireDefault(require("express"));
9
11
 
12
+ var _semver = _interopRequireDefault(require("semver"));
13
+
10
14
  var _middleware = require("@verdaccio/middleware");
11
15
 
12
- var _bodyParser = _interopRequireDefault(require("body-parser"));
16
+ var _distTags = _interopRequireDefault(require("./dist-tags"));
13
17
 
14
- var _whoami = _interopRequireDefault(require("./whoami"));
18
+ var _package = _interopRequireDefault(require("./package"));
15
19
 
16
20
  var _ping = _interopRequireDefault(require("./ping"));
17
21
 
18
- var _user = _interopRequireDefault(require("./user"));
19
-
20
- var _distTags = _interopRequireDefault(require("./dist-tags"));
21
-
22
22
  var _publish = _interopRequireDefault(require("./publish"));
23
23
 
24
24
  var _search = _interopRequireDefault(require("./search"));
25
25
 
26
- var _package = _interopRequireDefault(require("./package"));
27
-
28
26
  var _stars = _interopRequireDefault(require("./stars"));
29
27
 
28
+ var _user = _interopRequireDefault(require("./user"));
29
+
30
30
  var _profile = _interopRequireDefault(require("./v1/profile"));
31
31
 
32
+ var _search2 = _interopRequireDefault(require("./v1/search"));
33
+
32
34
  var _token = _interopRequireDefault(require("./v1/token"));
33
35
 
34
- var _search2 = _interopRequireDefault(require("./v1/search"));
36
+ var _whoami = _interopRequireDefault(require("./whoami"));
35
37
 
36
38
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
37
39
 
40
+ if (_semver.default.lte(process.version, 'v15.0.0')) {
41
+ global.AbortController = require('abortcontroller-polyfill/dist/cjs-ponyfill').AbortController;
42
+ }
43
+
38
44
  function _default(config, auth, storage) {
39
45
  /* eslint new-cap:off */
40
46
  const app = _express.default.Router();
@@ -65,7 +71,7 @@ function _default(config, auth, storage) {
65
71
  app.use(_middleware.encodeScopePackage); // for "npm whoami"
66
72
 
67
73
  (0, _whoami.default)(app);
68
- (0, _package.default)(app, auth, storage, config);
74
+ (0, _package.default)(app, auth, storage);
69
75
  (0, _profile.default)(app, auth); // @deprecated endpoint, 404 by default
70
76
 
71
77
  (0, _search.default)(app);
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"names":["config","auth","storage","app","express","Router","param","validatePackage","validateName","use","apiJWTmiddleware","bodyParser","json","strict","limit","max_body_size","encodeScopePackage"],"mappings":";;;;;;;AAAA;;AACA;;AAUA;;AAEA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;AAEe,kBAAUA,MAAV,EAA0BC,IAA1B,EAAuCC,OAAvC,EAAiE;AAC9E;AACA,QAAMC,GAAG,GAAGC,iBAAQC,MAAR,EAAZ;AACA;AAEA;AACA;;;AACAF,EAAAA,GAAG,CAACG,KAAJ,CAAU,SAAV,EAAqBC,2BAArB;AACAJ,EAAAA,GAAG,CAACG,KAAJ,CAAU,UAAV,EAAsBE,wBAAtB;AACAL,EAAAA,GAAG,CAACG,KAAJ,CAAU,KAAV,EAAiBE,wBAAjB;AACAL,EAAAA,GAAG,CAACG,KAAJ,CAAU,SAAV,EAAqBE,wBAArB;AACAL,EAAAA,GAAG,CAACG,KAAJ,CAAU,UAAV,EAAsBE,wBAAtB;AACAL,EAAAA,GAAG,CAACG,KAAJ,CAAU,OAAV,EAAmBE,wBAAnB,EAZ8E,CAc9E;AACA;;AACAL,EAAAA,GAAG,CAACG,KAAJ,CAAU,MAAV,EAAkB,uBAAM,QAAN,CAAlB;AACAH,EAAAA,GAAG,CAACG,KAAJ,CAAU,kBAAV,EAA8B,uBAAM,sBAAN,CAA9B;AACAH,EAAAA,GAAG,CAACG,KAAJ,CAAU,UAAV,EAAsB,uBAAM,IAAN,CAAtB;AACAH,EAAAA,GAAG,CAACM,GAAJ,CAAQR,IAAI,CAACS,gBAAL,EAAR;AACAP,EAAAA,GAAG,CAACM,GAAJ,CAAQE,oBAAWC,IAAX,CAAgB;AAAEC,IAAAA,MAAM,EAAE,KAAV;AAAiBC,IAAAA,KAAK,EAAEd,MAAM,CAACe,aAAP,IAAwB;AAAhD,GAAhB,CAAR,EApB8E,CAqB9E;;AACAZ,EAAAA,GAAG,CAACM,GAAJ,CAAQ,0BAAST,MAAT,CAAR,EAtB8E,CAuB9E;;AACAG,EAAAA,GAAG,CAACM,GAAJ,CAAQO,8BAAR,EAxB8E,CAyB9E;;AACA,uBAAOb,GAAP;AACA,wBAAIA,GAAJ,EAASF,IAAT,EAAeC,OAAf,EAAwBF,MAAxB;AACA,wBAAQG,GAAR,EAAaF,IAAb,EA5B8E,CA6B9E;;AACA,uBAAOE,GAAP;AACA,qBAAKA,GAAL,EAAUF,IAAV,EAAgBD,MAAhB;AACA,yBAASG,GAAT,EAAcF,IAAd,EAAoBC,OAApB;AACA,wBAAQC,GAAR,EAAaF,IAAb,EAAmBC,OAAnB,EAA4BF,MAA5B;AACA,qBAAKG,GAAL;AACA,sBAAMA,GAAN,EAAWD,OAAX,EAnC8E,CAoC9E;;AACA,wBAASC,GAAT,EAAcF,IAAd,EAAoBC,OAApB;AACA,sBAAMC,GAAN,EAAWF,IAAX,EAAiBC,OAAjB,EAA0BF,MAA1B;AACA,SAAOG,GAAP;AACD","sourcesContent":["import express, { Router } from 'express';\nimport {\n match,\n validateName,\n validatePackage,\n encodeScopePackage,\n antiLoop,\n} from '@verdaccio/middleware';\nimport { IAuth } from '@verdaccio/auth';\nimport { Storage } from '@verdaccio/store';\nimport { Config } from '@verdaccio/types';\nimport bodyParser from 'body-parser';\n\nimport whoami from './whoami';\nimport ping from './ping';\nimport user from './user';\nimport distTags from './dist-tags';\nimport publish from './publish';\nimport search from './search';\nimport pkg from './package';\nimport stars from './stars';\nimport profile from './v1/profile';\nimport token from './v1/token';\nimport v1Search from './v1/search';\n\nexport default function (config: Config, auth: IAuth, storage: Storage): Router {\n /* eslint new-cap:off */\n const app = express.Router();\n /* eslint new-cap:off */\n\n // validate all of these params as a package name\n // this might be too harsh, so ask if it causes trouble\n app.param('package', validatePackage);\n app.param('filename', validateName);\n app.param('tag', validateName);\n app.param('version', validateName);\n app.param('revision', validateName);\n app.param('token', validateName);\n\n // these can't be safely put into express url for some reason\n // TODO: For some reason? what reason?\n app.param('_rev', match(/^-rev$/));\n app.param('org_couchdb_user', match(/^org\\.couchdb\\.user:/));\n app.param('anything', match(/.*/));\n app.use(auth.apiJWTmiddleware());\n app.use(bodyParser.json({ strict: false, limit: config.max_body_size || '10mb' }));\n // @ts-ignore\n app.use(antiLoop(config));\n // encode / in a scoped package name to be matched as a single parameter in routes\n app.use(encodeScopePackage);\n // for \"npm whoami\"\n whoami(app);\n pkg(app, auth, storage, config);\n profile(app, auth);\n // @deprecated endpoint, 404 by default\n search(app);\n user(app, auth, config);\n distTags(app, auth, storage);\n publish(app, auth, storage, config);\n ping(app);\n stars(app, storage);\n // @ts-ignore\n v1Search(app, auth, storage);\n token(app, auth, storage, config);\n return app;\n}\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../src/index.ts"],"names":["semver","lte","process","version","global","AbortController","require","config","auth","storage","app","express","Router","param","validatePackage","validateName","use","apiJWTmiddleware","bodyParser","json","strict","limit","max_body_size","encodeScopePackage"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;AAGA;;AAUA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;AAEA,IAAIA,gBAAOC,GAAP,CAAWC,OAAO,CAACC,OAAnB,EAA4B,SAA5B,CAAJ,EAA4C;AAC1CC,EAAAA,MAAM,CAACC,eAAP,GAAyBC,OAAO,CAAC,4CAAD,CAAP,CAAsDD,eAA/E;AACD;;AAEc,kBAAUE,MAAV,EAA0BC,IAA1B,EAAuCC,OAAvC,EAAiE;AAC9E;AACA,QAAMC,GAAG,GAAGC,iBAAQC,MAAR,EAAZ;AACA;AAEA;AACA;;;AACAF,EAAAA,GAAG,CAACG,KAAJ,CAAU,SAAV,EAAqBC,2BAArB;AACAJ,EAAAA,GAAG,CAACG,KAAJ,CAAU,UAAV,EAAsBE,wBAAtB;AACAL,EAAAA,GAAG,CAACG,KAAJ,CAAU,KAAV,EAAiBE,wBAAjB;AACAL,EAAAA,GAAG,CAACG,KAAJ,CAAU,SAAV,EAAqBE,wBAArB;AACAL,EAAAA,GAAG,CAACG,KAAJ,CAAU,UAAV,EAAsBE,wBAAtB;AACAL,EAAAA,GAAG,CAACG,KAAJ,CAAU,OAAV,EAAmBE,wBAAnB,EAZ8E,CAc9E;AACA;;AACAL,EAAAA,GAAG,CAACG,KAAJ,CAAU,MAAV,EAAkB,uBAAM,QAAN,CAAlB;AACAH,EAAAA,GAAG,CAACG,KAAJ,CAAU,kBAAV,EAA8B,uBAAM,sBAAN,CAA9B;AACAH,EAAAA,GAAG,CAACG,KAAJ,CAAU,UAAV,EAAsB,uBAAM,IAAN,CAAtB;AACAH,EAAAA,GAAG,CAACM,GAAJ,CAAQR,IAAI,CAACS,gBAAL,EAAR;AACAP,EAAAA,GAAG,CAACM,GAAJ,CAAQE,oBAAWC,IAAX,CAAgB;AAAEC,IAAAA,MAAM,EAAE,KAAV;AAAiBC,IAAAA,KAAK,EAAEd,MAAM,CAACe,aAAP,IAAwB;AAAhD,GAAhB,CAAR,EApB8E,CAqB9E;;AACAZ,EAAAA,GAAG,CAACM,GAAJ,CAAQ,0BAAST,MAAT,CAAR,EAtB8E,CAuB9E;;AACAG,EAAAA,GAAG,CAACM,GAAJ,CAAQO,8BAAR,EAxB8E,CAyB9E;;AACA,uBAAOb,GAAP;AACA,wBAAIA,GAAJ,EAASF,IAAT,EAAeC,OAAf;AACA,wBAAQC,GAAR,EAAaF,IAAb,EA5B8E,CA6B9E;;AACA,uBAAOE,GAAP;AACA,qBAAKA,GAAL,EAAUF,IAAV,EAAgBD,MAAhB;AACA,yBAASG,GAAT,EAAcF,IAAd,EAAoBC,OAApB;AACA,wBAAQC,GAAR,EAAaF,IAAb,EAAmBC,OAAnB,EAA4BF,MAA5B;AACA,qBAAKG,GAAL;AACA,sBAAMA,GAAN,EAAWD,OAAX,EAnC8E,CAoC9E;;AACA,wBAASC,GAAT,EAAcF,IAAd,EAAoBC,OAApB;AACA,sBAAMC,GAAN,EAAWF,IAAX,EAAiBC,OAAjB,EAA0BF,MAA1B;AACA,SAAOG,GAAP;AACD","sourcesContent":["import bodyParser from 'body-parser';\nimport express, { Router } from 'express';\nimport semver from 'semver';\n\nimport { IAuth } from '@verdaccio/auth';\nimport {\n antiLoop,\n encodeScopePackage,\n match,\n validateName,\n validatePackage,\n} from '@verdaccio/middleware';\nimport { Storage } from '@verdaccio/store';\nimport { Config } from '@verdaccio/types';\n\nimport distTags from './dist-tags';\nimport pkg from './package';\nimport ping from './ping';\nimport publish from './publish';\nimport search from './search';\nimport stars from './stars';\nimport user from './user';\nimport profile from './v1/profile';\nimport v1Search from './v1/search';\nimport token from './v1/token';\nimport whoami from './whoami';\n\nif (semver.lte(process.version, 'v15.0.0')) {\n global.AbortController = require('abortcontroller-polyfill/dist/cjs-ponyfill').AbortController;\n}\n\nexport default function (config: Config, auth: IAuth, storage: Storage): Router {\n /* eslint new-cap:off */\n const app = express.Router();\n /* eslint new-cap:off */\n\n // validate all of these params as a package name\n // this might be too harsh, so ask if it causes trouble\n app.param('package', validatePackage);\n app.param('filename', validateName);\n app.param('tag', validateName);\n app.param('version', validateName);\n app.param('revision', validateName);\n app.param('token', validateName);\n\n // these can't be safely put into express url for some reason\n // TODO: For some reason? what reason?\n app.param('_rev', match(/^-rev$/));\n app.param('org_couchdb_user', match(/^org\\.couchdb\\.user:/));\n app.param('anything', match(/.*/));\n app.use(auth.apiJWTmiddleware());\n app.use(bodyParser.json({ strict: false, limit: config.max_body_size || '10mb' }));\n // @ts-ignore\n app.use(antiLoop(config));\n // encode / in a scoped package name to be matched as a single parameter in routes\n app.use(encodeScopePackage);\n // for \"npm whoami\"\n whoami(app);\n pkg(app, auth, storage);\n profile(app, auth);\n // @deprecated endpoint, 404 by default\n search(app);\n user(app, auth, config);\n distTags(app, auth, storage);\n publish(app, auth, storage, config);\n ping(app);\n stars(app, storage);\n // @ts-ignore\n v1Search(app, auth, storage);\n token(app, auth, storage, config);\n return app;\n}\n"],"file":"index.js"}
@@ -1,5 +1,4 @@
1
1
  import { Router } from 'express';
2
- import { Config } from '@verdaccio/types';
3
2
  import { IAuth } from '@verdaccio/auth';
4
3
  import { Storage } from '@verdaccio/store';
5
- export default function (route: Router, auth: IAuth, storage: Storage, config: Config): void;
4
+ export default function (route: Router, auth: IAuth, storage: Storage): void;
package/build/package.js CHANGED
@@ -5,23 +5,17 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = _default;
7
7
 
8
- var _lodash = _interopRequireDefault(require("lodash"));
9
-
10
8
  var _debug = _interopRequireDefault(require("debug"));
11
9
 
12
- var _middleware = require("@verdaccio/middleware");
13
-
14
- var _utils = require("@verdaccio/utils");
10
+ var _core = require("@verdaccio/core");
15
11
 
16
- var _commonsApi = require("@verdaccio/commons-api");
17
-
18
- var _tarball = require("@verdaccio/tarball");
12
+ var _middleware = require("@verdaccio/middleware");
19
13
 
20
14
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
21
15
 
22
16
  const debug = (0, _debug.default)('verdaccio:api:package');
23
17
 
24
- const downloadStream = (packageName, filename, storage, req, res) => {
18
+ const downloadStream = (packageName, filename, storage, _req, res) => {
25
19
  const stream = storage.getTarball(packageName, filename);
26
20
  stream.on('content-length', function (content) {
27
21
  res.header('Content-Length', content);
@@ -29,68 +23,41 @@ const downloadStream = (packageName, filename, storage, req, res) => {
29
23
  stream.on('error', function (err) {
30
24
  return res.locals.report_error(err);
31
25
  });
32
- res.header(_commonsApi.HEADERS.CONTENT_TYPE, _commonsApi.HEADERS.OCTET_STREAM);
26
+ res.header(_core.HEADERS.CONTENT_TYPE, _core.HEADERS.OCTET_STREAM);
33
27
  stream.pipe(res);
34
28
  };
35
29
 
36
- function _default(route, auth, storage, config) {
37
- const can = (0, _middleware.allow)(auth); // TODO: anonymous user?
38
-
39
- route.get('/:package/:version?', can('access'), function (req, res, next) {
30
+ function _default(route, auth, storage) {
31
+ const can = (0, _middleware.allow)(auth);
32
+ route.get('/:package/:version?', can('access'), async function (req, _res, next) {
40
33
  debug('init package by version');
41
34
  const name = req.params.package;
35
+ let queryVersion = req.params.version;
36
+ const requestOptions = {
37
+ protocol: req.protocol,
38
+ headers: req.headers,
39
+ // FIXME: if we migrate to req.hostname, the port is not longer included.
40
+ host: req.host
41
+ };
42
42
 
43
- const getPackageMetaCallback = function (err, metadata) {
44
- if (err) {
45
- debug('error on fetch metadata for %o with error %o', name, err.message);
46
- return next(err);
47
- }
48
-
49
- debug('convert dist remote to local with prefix %o', config === null || config === void 0 ? void 0 : config.url_prefix);
50
- metadata = (0, _tarball.convertDistRemoteToLocalTarballUrls)(metadata, req, config === null || config === void 0 ? void 0 : config.url_prefix);
51
- let queryVersion = req.params.version;
52
- debug('query by param version: %o', queryVersion);
53
-
54
- if (_lodash.default.isNil(queryVersion)) {
55
- debug('param %o version found', queryVersion);
56
- return next(metadata);
57
- }
58
-
59
- let version = (0, _utils.getVersion)(metadata, queryVersion);
60
- debug('query by latest version %o and result %o', queryVersion, version);
61
-
62
- if (_lodash.default.isNil(version) === false) {
63
- debug('latest version found %o', version);
64
- return next(version);
65
- }
66
-
67
- if (_lodash.default.isNil(metadata[_commonsApi.DIST_TAGS]) === false) {
68
- if (_lodash.default.isNil(metadata[_commonsApi.DIST_TAGS][queryVersion]) === false) {
69
- queryVersion = metadata[_commonsApi.DIST_TAGS][queryVersion];
70
- debug('dist-tag version found %o', queryVersion);
71
- version = (0, _utils.getVersion)(metadata, queryVersion);
72
-
73
- if (_lodash.default.isNil(version) === false) {
74
- debug('dist-tag found %o', version);
75
- return next(version);
76
- }
77
- }
78
- } else {
79
- debug('dist tag not detected');
43
+ try {
44
+ // TODO: this is just temporary while I migrate all plugins to use the new API
45
+ // the method will be renamed to getPackage again but Promise Based.
46
+ if (!storage.getPackageNext) {
47
+ throw _core.errorUtils.getInternalError('getPackageNext not implemented, check pr-2750 for more details');
80
48
  }
81
49
 
82
- debug('package version not found %o', queryVersion);
83
- return next(_utils.ErrorCode.getNotFound(`${_commonsApi.API_ERROR.VERSION_NOT_EXIST}: ${queryVersion}`));
84
- };
85
-
86
- debug('get package name %o', name);
87
- debug('uplinks look up enabled');
88
- storage.getPackage({
89
- name,
90
- uplinksLook: true,
91
- req,
92
- callback: getPackageMetaCallback
93
- });
50
+ const manifest = await storage.getPackageNext({
51
+ name,
52
+ uplinksLook: true,
53
+ req,
54
+ version: queryVersion,
55
+ requestOptions
56
+ });
57
+ next(manifest);
58
+ } catch (err) {
59
+ next(err);
60
+ }
94
61
  });
95
62
  route.get('/:scopedPackage/-/:scope/:filename', can('access'), function (req, res) {
96
63
  const {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/package.ts"],"names":["debug","downloadStream","packageName","filename","storage","req","res","stream","getTarball","on","content","header","err","locals","report_error","HEADERS","CONTENT_TYPE","OCTET_STREAM","pipe","route","auth","config","can","get","next","name","params","package","getPackageMetaCallback","metadata","message","url_prefix","queryVersion","version","_","isNil","DIST_TAGS","ErrorCode","getNotFound","API_ERROR","VERSION_NOT_EXIST","getPackage","uplinksLook","callback","scopedPackage"],"mappings":"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","sourcesContent":["import _ from 'lodash';\nimport { Router } from 'express';\nimport buildDebug from 'debug';\n\nimport { allow } from '@verdaccio/middleware';\nimport { getVersion, ErrorCode } from '@verdaccio/utils';\nimport { HEADERS, DIST_TAGS, API_ERROR } from '@verdaccio/commons-api';\nimport { Config, Package } from '@verdaccio/types';\nimport { IAuth } from '@verdaccio/auth';\nimport { Storage } from '@verdaccio/store';\nimport { convertDistRemoteToLocalTarballUrls } from '@verdaccio/tarball';\nimport { $RequestExtend, $ResponseExtend, $NextFunctionVer } from '../types/custom';\n\nconst debug = buildDebug('verdaccio:api:package');\n\nconst downloadStream = (\n packageName: string,\n filename: string,\n storage: any,\n req: $RequestExtend,\n res: $ResponseExtend\n): void => {\n const stream = storage.getTarball(packageName, filename);\n\n stream.on('content-length', function (content): void {\n res.header('Content-Length', content);\n });\n\n stream.on('error', function (err): void {\n return res.locals.report_error(err);\n });\n\n res.header(HEADERS.CONTENT_TYPE, HEADERS.OCTET_STREAM);\n stream.pipe(res);\n};\n\nexport default function (route: Router, auth: IAuth, storage: Storage, config: Config): void {\n const can = allow(auth);\n // TODO: anonymous user?\n route.get(\n '/:package/:version?',\n can('access'),\n function (req: $RequestExtend, res: $ResponseExtend, next: $NextFunctionVer): void {\n debug('init package by version');\n const name = req.params.package;\n const getPackageMetaCallback = function (err, metadata: Package): void {\n if (err) {\n debug('error on fetch metadata for %o with error %o', name, err.message);\n return next(err);\n }\n debug('convert dist remote to local with prefix %o', config?.url_prefix);\n metadata = convertDistRemoteToLocalTarballUrls(metadata, req, config?.url_prefix);\n\n let queryVersion = req.params.version;\n debug('query by param version: %o', queryVersion);\n if (_.isNil(queryVersion)) {\n debug('param %o version found', queryVersion);\n return next(metadata);\n }\n\n let version = getVersion(metadata, queryVersion);\n debug('query by latest version %o and result %o', queryVersion, version);\n if (_.isNil(version) === false) {\n debug('latest version found %o', version);\n return next(version);\n }\n\n if (_.isNil(metadata[DIST_TAGS]) === false) {\n if (_.isNil(metadata[DIST_TAGS][queryVersion]) === false) {\n queryVersion = metadata[DIST_TAGS][queryVersion];\n debug('dist-tag version found %o', queryVersion);\n version = getVersion(metadata, queryVersion);\n if (_.isNil(version) === false) {\n debug('dist-tag found %o', version);\n return next(version);\n }\n }\n } else {\n debug('dist tag not detected');\n }\n\n debug('package version not found %o', queryVersion);\n return next(ErrorCode.getNotFound(`${API_ERROR.VERSION_NOT_EXIST}: ${queryVersion}`));\n };\n\n debug('get package name %o', name);\n debug('uplinks look up enabled');\n storage.getPackage({\n name,\n uplinksLook: true,\n req,\n callback: getPackageMetaCallback,\n });\n }\n );\n\n route.get(\n '/:scopedPackage/-/:scope/:filename',\n can('access'),\n function (req: $RequestExtend, res: $ResponseExtend): void {\n const { scopedPackage, filename } = req.params;\n\n downloadStream(scopedPackage, filename, storage, req, res);\n }\n );\n\n route.get(\n '/:package/-/:filename',\n can('access'),\n function (req: $RequestExtend, res: $ResponseExtend): void {\n downloadStream(req.params.package, req.params.filename, storage, req, res);\n }\n );\n}\n"],"file":"package.js"}
1
+ {"version":3,"sources":["../src/package.ts"],"names":["debug","downloadStream","packageName","filename","storage","_req","res","stream","getTarball","on","content","header","err","locals","report_error","HEADERS","CONTENT_TYPE","OCTET_STREAM","pipe","route","auth","can","get","req","_res","next","name","params","package","queryVersion","version","requestOptions","protocol","headers","host","getPackageNext","errorUtils","getInternalError","manifest","uplinksLook","scopedPackage"],"mappings":";;;;;;;AAAA;;AAIA;;AACA;;;;AAKA,MAAMA,KAAK,GAAG,oBAAW,uBAAX,CAAd;;AAEA,MAAMC,cAAc,GAAG,CACrBC,WADqB,EAErBC,QAFqB,EAGrBC,OAHqB,EAIrBC,IAJqB,EAKrBC,GALqB,KAMZ;AACT,QAAMC,MAAM,GAAGH,OAAO,CAACI,UAAR,CAAmBN,WAAnB,EAAgCC,QAAhC,CAAf;AAEAI,EAAAA,MAAM,CAACE,EAAP,CAAU,gBAAV,EAA4B,UAAUC,OAAV,EAAyB;AACnDJ,IAAAA,GAAG,CAACK,MAAJ,CAAW,gBAAX,EAA6BD,OAA7B;AACD,GAFD;AAIAH,EAAAA,MAAM,CAACE,EAAP,CAAU,OAAV,EAAmB,UAAUG,GAAV,EAAqB;AACtC,WAAON,GAAG,CAACO,MAAJ,CAAWC,YAAX,CAAwBF,GAAxB,CAAP;AACD,GAFD;AAIAN,EAAAA,GAAG,CAACK,MAAJ,CAAWI,cAAQC,YAAnB,EAAiCD,cAAQE,YAAzC;AACAV,EAAAA,MAAM,CAACW,IAAP,CAAYZ,GAAZ;AACD,CAnBD;;AAqBe,kBAAUa,KAAV,EAAyBC,IAAzB,EAAsChB,OAAtC,EAA8D;AAC3E,QAAMiB,GAAG,GAAG,uBAAMD,IAAN,CAAZ;AAEAD,EAAAA,KAAK,CAACG,GAAN,CACE,qBADF,EAEED,GAAG,CAAC,QAAD,CAFL,EAGE,gBACEE,GADF,EAEEC,IAFF,EAGEC,IAHF,EAIiB;AACfzB,IAAAA,KAAK,CAAC,yBAAD,CAAL;AACA,UAAM0B,IAAI,GAAGH,GAAG,CAACI,MAAJ,CAAWC,OAAxB;AACA,QAAIC,YAAY,GAAGN,GAAG,CAACI,MAAJ,CAAWG,OAA9B;AACA,UAAMC,cAAc,GAAG;AACrBC,MAAAA,QAAQ,EAAET,GAAG,CAACS,QADO;AAErBC,MAAAA,OAAO,EAAEV,GAAG,CAACU,OAFQ;AAGrB;AACAC,MAAAA,IAAI,EAAEX,GAAG,CAACW;AAJW,KAAvB;;AAOA,QAAI;AACF;AACA;AACA,UAAI,CAAC9B,OAAO,CAAC+B,cAAb,EAA6B;AAC3B,cAAMC,iBAAWC,gBAAX,CACJ,gEADI,CAAN;AAGD;;AAED,YAAMC,QAAQ,GAAG,MAAMlC,OAAO,CAAC+B,cAAR,CAAuB;AAC5CT,QAAAA,IAD4C;AAE5Ca,QAAAA,WAAW,EAAE,IAF+B;AAG5ChB,QAAAA,GAH4C;AAI5CO,QAAAA,OAAO,EAAED,YAJmC;AAK5CE,QAAAA;AAL4C,OAAvB,CAAvB;AAOAN,MAAAA,IAAI,CAACa,QAAD,CAAJ;AACD,KAjBD,CAiBE,OAAO1B,GAAP,EAAY;AACZa,MAAAA,IAAI,CAACb,GAAD,CAAJ;AACD;AACF,GAtCH;AAyCAO,EAAAA,KAAK,CAACG,GAAN,CACE,oCADF,EAEED,GAAG,CAAC,QAAD,CAFL,EAGE,UAAUE,GAAV,EAA+BjB,GAA/B,EAA2D;AACzD,UAAM;AAAEkC,MAAAA,aAAF;AAAiBrC,MAAAA;AAAjB,QAA8BoB,GAAG,CAACI,MAAxC;AAEA1B,IAAAA,cAAc,CAACuC,aAAD,EAAgBrC,QAAhB,EAA0BC,OAA1B,EAAmCmB,GAAnC,EAAwCjB,GAAxC,CAAd;AACD,GAPH;AAUAa,EAAAA,KAAK,CAACG,GAAN,CACE,uBADF,EAEED,GAAG,CAAC,QAAD,CAFL,EAGE,UAAUE,GAAV,EAA+BjB,GAA/B,EAA2D;AACzDL,IAAAA,cAAc,CAACsB,GAAG,CAACI,MAAJ,CAAWC,OAAZ,EAAqBL,GAAG,CAACI,MAAJ,CAAWxB,QAAhC,EAA0CC,OAA1C,EAAmDmB,GAAnD,EAAwDjB,GAAxD,CAAd;AACD,GALH;AAOD","sourcesContent":["import buildDebug from 'debug';\nimport { Router } from 'express';\n\nimport { IAuth } from '@verdaccio/auth';\nimport { HEADERS, errorUtils } from '@verdaccio/core';\nimport { allow } from '@verdaccio/middleware';\nimport { Storage } from '@verdaccio/store';\n\nimport { $NextFunctionVer, $RequestExtend, $ResponseExtend } from '../types/custom';\n\nconst debug = buildDebug('verdaccio:api:package');\n\nconst downloadStream = (\n packageName: string,\n filename: string,\n storage: any,\n _req: $RequestExtend,\n res: $ResponseExtend\n): void => {\n const stream = storage.getTarball(packageName, filename);\n\n stream.on('content-length', function (content): void {\n res.header('Content-Length', content);\n });\n\n stream.on('error', function (err): void {\n return res.locals.report_error(err);\n });\n\n res.header(HEADERS.CONTENT_TYPE, HEADERS.OCTET_STREAM);\n stream.pipe(res);\n};\n\nexport default function (route: Router, auth: IAuth, storage: Storage): void {\n const can = allow(auth);\n\n route.get(\n '/:package/:version?',\n can('access'),\n async function (\n req: $RequestExtend,\n _res: $ResponseExtend,\n next: $NextFunctionVer\n ): Promise<void> {\n debug('init package by version');\n const name = req.params.package;\n let queryVersion = req.params.version;\n const requestOptions = {\n protocol: req.protocol,\n headers: req.headers as any,\n // FIXME: if we migrate to req.hostname, the port is not longer included.\n host: req.host,\n };\n\n try {\n // TODO: this is just temporary while I migrate all plugins to use the new API\n // the method will be renamed to getPackage again but Promise Based.\n if (!storage.getPackageNext) {\n throw errorUtils.getInternalError(\n 'getPackageNext not implemented, check pr-2750 for more details'\n );\n }\n\n const manifest = await storage.getPackageNext({\n name,\n uplinksLook: true,\n req,\n version: queryVersion,\n requestOptions,\n });\n next(manifest);\n } catch (err) {\n next(err);\n }\n }\n );\n\n route.get(\n '/:scopedPackage/-/:scope/:filename',\n can('access'),\n function (req: $RequestExtend, res: $ResponseExtend): void {\n const { scopedPackage, filename } = req.params;\n\n downloadStream(scopedPackage, filename, storage, req, res);\n }\n );\n\n route.get(\n '/:package/-/:filename',\n can('access'),\n function (req: $RequestExtend, res: $ResponseExtend): void {\n downloadStream(req.params.package, req.params.filename, storage, req, res);\n }\n );\n}\n"],"file":"package.js"}
package/build/ping.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ping.ts"],"names":["route","get","req","res","next"],"mappings":";;;;;;;AAGe,kBAAUA,KAAV,EAA+B;AAC5CA,EAAAA,KAAK,CAACC,GAAN,CACE,SADF,EAEE,UAAUC,GAAV,EAA+BC,GAA/B,EAAqDC,IAArD,EAA6E;AAC3EA,IAAAA,IAAI,CAAC,EAAD,CAAJ;AACD,GAJH;AAMD","sourcesContent":["import { Router } from 'express';\nimport { $RequestExtend, $ResponseExtend, $NextFunctionVer } from '../types/custom';\n\nexport default function (route: Router): void {\n route.get(\n '/-/ping',\n function (req: $RequestExtend, res: $ResponseExtend, next: $NextFunctionVer) {\n next({});\n }\n );\n}\n"],"file":"ping.js"}
1
+ {"version":3,"sources":["../src/ping.ts"],"names":["route","get","req","res","next"],"mappings":";;;;;;;AAIe,kBAAUA,KAAV,EAA+B;AAC5CA,EAAAA,KAAK,CAACC,GAAN,CACE,SADF,EAEE,UAAUC,GAAV,EAA+BC,GAA/B,EAAqDC,IAArD,EAA6E;AAC3EA,IAAAA,IAAI,CAAC,EAAD,CAAJ;AACD,GAJH;AAMD","sourcesContent":["import { Router } from 'express';\n\nimport { $NextFunctionVer, $RequestExtend, $ResponseExtend } from '../types/custom';\n\nexport default function (route: Router): void {\n route.get(\n '/-/ping',\n function (req: $RequestExtend, res: $ResponseExtend, next: $NextFunctionVer) {\n next({});\n }\n );\n}\n"],"file":"ping.js"}
@@ -1,8 +1,8 @@
1
1
  import { Router } from 'express';
2
- import { Config } from '@verdaccio/types';
3
2
  import { IAuth } from '@verdaccio/auth';
4
3
  import { Storage } from '@verdaccio/store';
5
- import { $RequestExtend, $ResponseExtend, $NextFunctionVer } from '../types/custom';
4
+ import { Config } from '@verdaccio/types';
5
+ import { $NextFunctionVer, $RequestExtend, $ResponseExtend } from '../types/custom';
6
6
  export default function publish(router: Router, auth: IAuth, storage: Storage, config: Config): void;
7
7
  /**
8
8
  * Publish a package