@verdaccio/api 7.0.0-next.5 → 7.0.1-next-8.0

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 (50) hide show
  1. package/CHANGELOG.md +282 -0
  2. package/LICENSE +1 -1
  3. package/build/dist-tags.js +1 -1
  4. package/build/dist-tags.js.map +1 -1
  5. package/build/index.js +3 -3
  6. package/build/index.js.map +1 -1
  7. package/build/package.js +6 -3
  8. package/build/package.js.map +1 -1
  9. package/build/ping.js.map +1 -1
  10. package/build/publish.d.ts +21 -4
  11. package/build/publish.js +35 -9
  12. package/build/publish.js.map +1 -1
  13. package/build/search.js.map +1 -1
  14. package/build/stars.js +1 -1
  15. package/build/stars.js.map +1 -1
  16. package/build/user.js +19 -3
  17. package/build/user.js.map +1 -1
  18. package/build/v1/profile.js +6 -3
  19. package/build/v1/profile.js.map +1 -1
  20. package/build/v1/search.js +4 -3
  21. package/build/v1/search.js.map +1 -1
  22. package/build/v1/token.js +1 -1
  23. package/build/v1/token.js.map +1 -1
  24. package/build/whoami.js +2 -2
  25. package/build/whoami.js.map +1 -1
  26. package/package.json +17 -17
  27. package/src/index.ts +3 -2
  28. package/src/package.ts +3 -1
  29. package/src/publish.ts +31 -6
  30. package/src/user.ts +17 -0
  31. package/src/v1/profile.ts +5 -3
  32. package/src/v1/search.ts +2 -1
  33. package/test/integration/_helper.ts +33 -1
  34. package/test/integration/config/owner.yaml +24 -0
  35. package/test/integration/config/profile.yaml +27 -0
  36. package/test/integration/config/user.jwt.yaml +1 -1
  37. package/test/integration/config/user.yaml +1 -1
  38. package/test/integration/distTag.spec.ts +1 -0
  39. package/test/integration/owner.spec.ts +119 -0
  40. package/test/integration/package.spec.ts +3 -2
  41. package/test/integration/ping.spec.ts +1 -0
  42. package/test/integration/profile.spec.ts +112 -0
  43. package/test/integration/publish.spec.ts +1 -0
  44. package/test/integration/search.spec.ts +13 -0
  45. package/test/integration/star.spec.ts +1 -0
  46. package/test/integration/token.spec.ts +1 -0
  47. package/test/integration/user.spec.ts +54 -1
  48. package/test/integration/whoami.spec.ts +1 -0
  49. package/test/unit/validate.api.params.middleware.spec.ts +1 -0
  50. package/jest.config.js +0 -10
package/CHANGELOG.md CHANGED
@@ -1,5 +1,287 @@
1
1
  # @verdaccio/api
2
2
 
3
+ ## 7.0.1-next-8.0
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies
8
+ - @verdaccio/logger@8.0.0-next-8.0
9
+ - @verdaccio/middleware@8.0.0-next-8.0
10
+ - @verdaccio/core@8.0.0-next-8.0
11
+ - @verdaccio/config@8.0.0-next-8.0
12
+ - @verdaccio/store@8.0.0-next-8.0
13
+ - @verdaccio/auth@7.0.1-next-8.0
14
+ - @verdaccio/utils@7.0.1-next-8.0
15
+
16
+ ## 7.0.0
17
+
18
+ ### Major Changes
19
+
20
+ - 47f61c6: feat!: bump to v7
21
+ - e7ebccb: update major dependencies, remove old nodejs support
22
+
23
+ ### Minor Changes
24
+
25
+ - f047cc8: refactor: auth with legacy sign support
26
+
27
+ ### Patch Changes
28
+
29
+ - 6e764e3: feat: add support for npm owner
30
+ - 74cd588: fix: bug on change password npm profile
31
+ - 19df355: chore(api): update comment about route parameters
32
+ - Updated dependencies [e5624e1]
33
+ - Updated dependencies [47f61c6]
34
+ - Updated dependencies [2a6ee33]
35
+ - Updated dependencies [10dd81f]
36
+ - Updated dependencies [5bfab62]
37
+ - Updated dependencies [6c5f7a4]
38
+ - Updated dependencies [6e764e3]
39
+ - Updated dependencies [b0946b2]
40
+ - Updated dependencies [ccc7bd1]
41
+ - Updated dependencies [8c10a3e]
42
+ - Updated dependencies [daceb6d]
43
+ - Updated dependencies [e14b064]
44
+ - Updated dependencies [e7ebccb]
45
+ - Updated dependencies [c9962fe]
46
+ - Updated dependencies [7400830]
47
+ - Updated dependencies [f967a69]
48
+ - Updated dependencies [de6ff5c]
49
+ - Updated dependencies [f047cc8]
50
+ - Updated dependencies [a99a4bb]
51
+ - Updated dependencies [c807f0c]
52
+ - Updated dependencies [a05a7d8]
53
+ - Updated dependencies [7c9f3cf]
54
+ - Updated dependencies [c31aec8]
55
+ - Updated dependencies [bd8703e]
56
+ - Updated dependencies [4dc62a8]
57
+ - Updated dependencies [253cc13]
58
+ - Updated dependencies [4d96324]
59
+ - @verdaccio/store@7.0.0
60
+ - @verdaccio/auth@7.0.0
61
+ - @verdaccio/config@7.0.0
62
+ - @verdaccio/core@7.0.0
63
+ - @verdaccio/logger@7.0.0
64
+ - @verdaccio/middleware@7.0.0
65
+ - @verdaccio/utils@7.0.0
66
+
67
+ ## 7.0.0-next-8.21
68
+
69
+ ### Patch Changes
70
+
71
+ - Updated dependencies [8c10a3e]
72
+ - Updated dependencies [a05a7d8]
73
+ - Updated dependencies [7c9f3cf]
74
+ - @verdaccio/config@7.0.0-next-8.21
75
+ - @verdaccio/core@7.0.0-next-8.21
76
+ - @verdaccio/store@7.0.0-next-8.21
77
+ - @verdaccio/auth@7.0.0-next-8.21
78
+ - @verdaccio/middleware@7.0.0-next-8.21
79
+ - @verdaccio/utils@7.0.0-next-8.21
80
+ - @verdaccio/logger@7.0.0-next-8.21
81
+
82
+ ## 7.0.0-next-7.20
83
+
84
+ ### Patch Changes
85
+
86
+ - Updated dependencies [ccc7bd1]
87
+ - @verdaccio/middleware@7.0.0-next-7.20
88
+ - @verdaccio/auth@7.0.0-next-7.20
89
+ - @verdaccio/store@7.0.0-next-7.20
90
+ - @verdaccio/core@7.0.0-next-7.20
91
+ - @verdaccio/config@7.0.0-next-7.20
92
+ - @verdaccio/utils@7.0.0-next-7.20
93
+ - @verdaccio/logger@7.0.0-next-7.20
94
+
95
+ ## 7.0.0-next-7.19
96
+
97
+ ### Patch Changes
98
+
99
+ - 19df355: chore(api): update comment about route parameters
100
+ - Updated dependencies [2a6ee33]
101
+ - Updated dependencies [6c5f7a4]
102
+ - Updated dependencies [c31aec8]
103
+ - @verdaccio/middleware@7.0.0-next-7.19
104
+ - @verdaccio/config@7.0.0-next-7.19
105
+ - @verdaccio/auth@7.0.0-next-7.19
106
+ - @verdaccio/store@7.0.0-next-7.19
107
+ - @verdaccio/core@7.0.0-next-7.19
108
+ - @verdaccio/utils@7.0.0-next-7.19
109
+ - @verdaccio/logger@7.0.0-next-7.19
110
+
111
+ ## 7.0.0-next-7.18
112
+
113
+ ### Patch Changes
114
+
115
+ - Updated dependencies [10dd81f]
116
+ - @verdaccio/middleware@7.0.0-next-7.18
117
+ - @verdaccio/config@7.0.0-next-7.18
118
+ - @verdaccio/auth@7.0.0-next-7.18
119
+ - @verdaccio/core@7.0.0-next-7.18
120
+ - @verdaccio/logger@7.0.0-next-7.18
121
+ - @verdaccio/store@7.0.0-next-7.18
122
+ - @verdaccio/utils@7.0.0-next-7.18
123
+
124
+ ## 7.0.0-next-7.17
125
+
126
+ ### Patch Changes
127
+
128
+ - 6e764e3: feat: add support for npm owner
129
+ - Updated dependencies [6e764e3]
130
+ - Updated dependencies [de6ff5c]
131
+ - @verdaccio/config@7.0.0-next-7.17
132
+ - @verdaccio/core@7.0.0-next-7.17
133
+ - @verdaccio/store@7.0.0-next-7.17
134
+ - @verdaccio/auth@7.0.0-next-7.17
135
+ - @verdaccio/logger@7.0.0-next-7.17
136
+ - @verdaccio/middleware@7.0.0-next-7.17
137
+ - @verdaccio/utils@7.0.0-next-7.17
138
+
139
+ ## 7.0.0-next-7.16
140
+
141
+ ### Patch Changes
142
+
143
+ - Updated dependencies [e5624e1]
144
+ - Updated dependencies [5bfab62]
145
+ - @verdaccio/store@7.0.0-next-7.16
146
+ - @verdaccio/logger@7.0.0-next-7.16
147
+ - @verdaccio/middleware@7.0.0-next-7.16
148
+ - @verdaccio/auth@7.0.0-next-7.16
149
+ - @verdaccio/core@7.0.0-next-7.16
150
+ - @verdaccio/config@7.0.0-next-7.16
151
+ - @verdaccio/utils@7.0.0-next-7.16
152
+
153
+ ## 7.0.0-next-7.15
154
+
155
+ ### Patch Changes
156
+
157
+ - Updated dependencies [7400830]
158
+ - Updated dependencies [bd8703e]
159
+ - @verdaccio/store@7.0.0-next-7.15
160
+ - @verdaccio/core@7.0.0-next-7.15
161
+ - @verdaccio/config@7.0.0-next-7.15
162
+ - @verdaccio/auth@7.0.0-next-7.15
163
+ - @verdaccio/logger@7.0.0-next-7.15
164
+ - @verdaccio/middleware@7.0.0-next-7.15
165
+ - @verdaccio/utils@7.0.0-next-7.15
166
+
167
+ ## 7.0.0-next-7.14
168
+
169
+ ### Patch Changes
170
+
171
+ - Updated dependencies [b0946b2]
172
+ - Updated dependencies [f967a69]
173
+ - Updated dependencies [4dc62a8]
174
+ - Updated dependencies [253cc13]
175
+ - @verdaccio/middleware@7.0.0-next-7.14
176
+ - @verdaccio/store@7.0.0-next-7.14
177
+ - @verdaccio/auth@7.0.0-next-7.14
178
+ - @verdaccio/core@7.0.0-next-7.14
179
+ - @verdaccio/config@7.0.0-next-7.14
180
+ - @verdaccio/utils@7.0.0-next-7.14
181
+ - @verdaccio/logger@7.0.0-next-7.14
182
+
183
+ ## 7.0.0-next-7.13
184
+
185
+ ### Patch Changes
186
+
187
+ - Updated dependencies [a99a4bb]
188
+ - @verdaccio/config@7.0.0-next-7.13
189
+ - @verdaccio/auth@7.0.0-next-7.13
190
+ - @verdaccio/middleware@7.0.0-next-7.13
191
+ - @verdaccio/store@7.0.0-next-7.13
192
+ - @verdaccio/logger@7.0.0-next-7.13
193
+ - @verdaccio/core@7.0.0-next-7.13
194
+ - @verdaccio/utils@7.0.0-next-7.13
195
+
196
+ ## 7.0.0-next-7.12
197
+
198
+ ### Patch Changes
199
+
200
+ - @verdaccio/store@7.0.0-next-7.12
201
+ - @verdaccio/core@7.0.0-next-7.12
202
+ - @verdaccio/config@7.0.0-next-7.12
203
+ - @verdaccio/auth@7.0.0-next-7.12
204
+ - @verdaccio/middleware@7.0.0-next-7.12
205
+ - @verdaccio/utils@7.0.0-next-7.12
206
+ - @verdaccio/logger@7.0.0-next-7.12
207
+
208
+ ## 7.0.0-next-7.11
209
+
210
+ ### Patch Changes
211
+
212
+ - Updated dependencies [c9962fe]
213
+ - @verdaccio/config@7.0.0-next-7.11
214
+ - @verdaccio/auth@7.0.0-next-7.11
215
+ - @verdaccio/middleware@7.0.0-next-7.11
216
+ - @verdaccio/store@7.0.0-next-7.11
217
+ - @verdaccio/core@7.0.0-next-7.11
218
+ - @verdaccio/utils@7.0.0-next-7.11
219
+ - @verdaccio/logger@7.0.0-next-7.11
220
+
221
+ ## 7.0.0-next-7.10
222
+
223
+ ### Patch Changes
224
+
225
+ - @verdaccio/core@7.0.0-next-7.10
226
+ - @verdaccio/config@7.0.0-next-7.10
227
+ - @verdaccio/auth@7.0.0-next-7.10
228
+ - @verdaccio/middleware@7.0.0-next-7.10
229
+ - @verdaccio/store@7.0.0-next-7.10
230
+ - @verdaccio/utils@7.0.0-next-7.10
231
+ - @verdaccio/logger@7.0.0-next-7.10
232
+
233
+ ## 7.0.0-next-7.9
234
+
235
+ ### Patch Changes
236
+
237
+ - Updated dependencies [c807f0c]
238
+ - @verdaccio/store@7.0.0-next-7.9
239
+ - @verdaccio/core@7.0.0-next-7.9
240
+ - @verdaccio/config@7.0.0-next-7.9
241
+ - @verdaccio/auth@7.0.0-next-7.9
242
+ - @verdaccio/middleware@7.0.0-next-7.9
243
+ - @verdaccio/utils@7.0.0-next-7.9
244
+ - @verdaccio/logger@7.0.0-next-7.9
245
+
246
+ ## 7.0.0-next-7.8
247
+
248
+ ### Patch Changes
249
+
250
+ - 74cd588: fix: bug on change password npm profile
251
+ - @verdaccio/core@7.0.0-next-7.8
252
+ - @verdaccio/config@7.0.0-next-7.8
253
+ - @verdaccio/auth@7.0.0-next-7.8
254
+ - @verdaccio/middleware@7.0.0-next-7.8
255
+ - @verdaccio/store@7.0.0-next-7.8
256
+ - @verdaccio/utils@7.0.0-next-7.8
257
+ - @verdaccio/logger@7.0.0-next-7.8
258
+
259
+ ## 7.0.0-next-7.7
260
+
261
+ ### Patch Changes
262
+
263
+ - @verdaccio/core@7.0.0-next-7.7
264
+ - @verdaccio/config@7.0.0-next-7.7
265
+ - @verdaccio/auth@7.0.0-next-7.7
266
+ - @verdaccio/middleware@7.0.0-next-7.7
267
+ - @verdaccio/store@7.0.0-next-7.7
268
+ - @verdaccio/utils@7.0.0-next-7.7
269
+ - @verdaccio/logger@7.0.0-next-7.7
270
+
271
+ ## 7.0.0-next.6
272
+
273
+ ### Patch Changes
274
+
275
+ - Updated dependencies [e14b064]
276
+ - Updated dependencies [4d96324]
277
+ - @verdaccio/store@7.0.0-next.6
278
+ - @verdaccio/config@7.0.0-next.6
279
+ - @verdaccio/auth@7.0.0-next.6
280
+ - @verdaccio/middleware@7.0.0-next.6
281
+ - @verdaccio/core@7.0.0-next.6
282
+ - @verdaccio/utils@7.0.0-next.6
283
+ - @verdaccio/logger@7.0.0-next.6
284
+
3
285
  ## 7.0.0-next.5
4
286
 
5
287
  ### 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
@@ -9,7 +9,7 @@ var _mime = _interopRequireDefault(require("mime"));
9
9
  var _core = require("@verdaccio/core");
10
10
  var _logger = require("@verdaccio/logger");
11
11
  var _middleware = require("@verdaccio/middleware");
12
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
13
13
  function _default(route, auth, storage) {
14
14
  const can = (0, _middleware.allow)(auth, {
15
15
  beforeAll: (a, b) => _logger.logger.trace(a, b),
@@ -1 +1 @@
1
- {"version":3,"file":"dist-tags.js","names":["_lodash","_interopRequireDefault","require","_mime","_core","_logger","_middleware","obj","__esModule","default","_default","route","auth","storage","can","allow","beforeAll","a","b","logger","trace","afterAll","addTagPackageVersionMiddleware","req","res","next","_","isString","body","errorUtils","getBadRequest","tags","params","tag","mergeTagsNext","package","status","constants","HTTP_STATUS","CREATED","ok","API_MESSAGE","TAG_ADDED","err","put","media","mime","getType","delete","TAG_REMOVED","get","name","requestOptions","protocol","headers","host","remoteAddress","socket","manifest","getPackageByOptions","uplinksLook","DIST_TAGS"],"sources":["../src/dist-tags.ts"],"sourcesContent":["import { Router } from 'express';\nimport _ from 'lodash';\nimport mime from 'mime';\n\nimport { Auth } from '@verdaccio/auth';\nimport { constants, errorUtils } from '@verdaccio/core';\nimport { logger } from '@verdaccio/logger';\nimport { allow, media } from '@verdaccio/middleware';\nimport { Storage } from '@verdaccio/store';\n\nimport { $NextFunctionVer, $RequestExtend, $ResponseExtend } from '../types/custom';\n\nexport default function (route: Router, auth: Auth, storage: Storage): void {\n const can = allow(auth, {\n beforeAll: (a, b) => logger.trace(a, b),\n afterAll: (a, b) => logger.trace(a, b),\n });\n const addTagPackageVersionMiddleware = async function (\n req: $RequestExtend,\n res: $ResponseExtend,\n next: $NextFunctionVer\n ): Promise<$NextFunctionVer> {\n if (_.isString(req.body) === false) {\n return next(errorUtils.getBadRequest('version is missing'));\n }\n\n const tags = {};\n tags[req.params.tag] = req.body;\n try {\n await storage.mergeTagsNext(req.params.package, tags);\n res.status(constants.HTTP_STATUS.CREATED);\n return next({\n ok: constants.API_MESSAGE.TAG_ADDED,\n });\n } catch (err) {\n next(err);\n }\n };\n\n // tagging a package.\n route.put(\n '/:package/:tag',\n can('publish'),\n media(mime.getType('json')),\n addTagPackageVersionMiddleware\n );\n\n route.put(\n '/-/package/:package/dist-tags/:tag',\n can('publish'),\n media(mime.getType('json')),\n addTagPackageVersionMiddleware\n );\n\n route.delete(\n '/-/package/:package/dist-tags/:tag',\n can('publish'),\n async function (\n req: $RequestExtend,\n res: $ResponseExtend,\n next: $NextFunctionVer\n ): Promise<void> {\n const tags = {};\n tags[req.params.tag] = null;\n try {\n await storage.mergeTagsNext(req.params.package, tags);\n res.status(constants.HTTP_STATUS.CREATED);\n return next({\n ok: constants.API_MESSAGE.TAG_REMOVED,\n });\n } catch (err) {\n next(err);\n }\n }\n );\n\n route.get(\n '/-/package/:package/dist-tags',\n can('access'),\n async function (\n req: $RequestExtend,\n res: $ResponseExtend,\n next: $NextFunctionVer\n ): Promise<void> {\n const name = req.params.package;\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 remoteAddress: req.socket.remoteAddress,\n };\n try {\n const manifest = await storage.getPackageByOptions({\n name,\n uplinksLook: true,\n requestOptions,\n });\n next(manifest[constants.DIST_TAGS]);\n } catch (err) {\n next(err);\n }\n }\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"dist-tags.js","names":["_lodash","_interopRequireDefault","require","_mime","_core","_logger","_middleware","e","__esModule","default","_default","route","auth","storage","can","allow","beforeAll","a","b","logger","trace","afterAll","addTagPackageVersionMiddleware","req","res","next","_","isString","body","errorUtils","getBadRequest","tags","params","tag","mergeTagsNext","package","status","constants","HTTP_STATUS","CREATED","ok","API_MESSAGE","TAG_ADDED","err","put","media","mime","getType","delete","TAG_REMOVED","get","name","requestOptions","protocol","headers","host","remoteAddress","socket","manifest","getPackageByOptions","uplinksLook","DIST_TAGS"],"sources":["../src/dist-tags.ts"],"sourcesContent":["import { Router } from 'express';\nimport _ from 'lodash';\nimport mime from 'mime';\n\nimport { Auth } from '@verdaccio/auth';\nimport { constants, errorUtils } from '@verdaccio/core';\nimport { logger } from '@verdaccio/logger';\nimport { allow, media } from '@verdaccio/middleware';\nimport { Storage } from '@verdaccio/store';\n\nimport { $NextFunctionVer, $RequestExtend, $ResponseExtend } from '../types/custom';\n\nexport default function (route: Router, auth: Auth, storage: Storage): void {\n const can = allow(auth, {\n beforeAll: (a, b) => logger.trace(a, b),\n afterAll: (a, b) => logger.trace(a, b),\n });\n const addTagPackageVersionMiddleware = async function (\n req: $RequestExtend,\n res: $ResponseExtend,\n next: $NextFunctionVer\n ): Promise<$NextFunctionVer> {\n if (_.isString(req.body) === false) {\n return next(errorUtils.getBadRequest('version is missing'));\n }\n\n const tags = {};\n tags[req.params.tag] = req.body;\n try {\n await storage.mergeTagsNext(req.params.package, tags);\n res.status(constants.HTTP_STATUS.CREATED);\n return next({\n ok: constants.API_MESSAGE.TAG_ADDED,\n });\n } catch (err) {\n next(err);\n }\n };\n\n // tagging a package.\n route.put(\n '/:package/:tag',\n can('publish'),\n media(mime.getType('json')),\n addTagPackageVersionMiddleware\n );\n\n route.put(\n '/-/package/:package/dist-tags/:tag',\n can('publish'),\n media(mime.getType('json')),\n addTagPackageVersionMiddleware\n );\n\n route.delete(\n '/-/package/:package/dist-tags/:tag',\n can('publish'),\n async function (\n req: $RequestExtend,\n res: $ResponseExtend,\n next: $NextFunctionVer\n ): Promise<void> {\n const tags = {};\n tags[req.params.tag] = null;\n try {\n await storage.mergeTagsNext(req.params.package, tags);\n res.status(constants.HTTP_STATUS.CREATED);\n return next({\n ok: constants.API_MESSAGE.TAG_REMOVED,\n });\n } catch (err) {\n next(err);\n }\n }\n );\n\n route.get(\n '/-/package/:package/dist-tags',\n can('access'),\n async function (\n req: $RequestExtend,\n res: $ResponseExtend,\n next: $NextFunctionVer\n ): Promise<void> {\n const name = req.params.package;\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 remoteAddress: req.socket.remoteAddress,\n };\n try {\n const manifest = await storage.getPackageByOptions({\n name,\n uplinksLook: true,\n requestOptions,\n });\n next(manifest[constants.DIST_TAGS]);\n } catch (err) {\n next(err);\n }\n }\n );\n}\n"],"mappings":"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","ignoreList":[]}
package/build/index.js CHANGED
@@ -17,7 +17,7 @@ var _profile = _interopRequireDefault(require("./v1/profile"));
17
17
  var _search2 = _interopRequireDefault(require("./v1/search"));
18
18
  var _token = _interopRequireDefault(require("./v1/token"));
19
19
  var _whoami = _interopRequireDefault(require("./whoami"));
20
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
20
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
21
21
  function _default(config, auth, storage) {
22
22
  /* eslint new-cap:off */
23
23
  const app = _express.default.Router();
@@ -32,8 +32,8 @@ function _default(config, auth, storage) {
32
32
  app.param('revision', _middleware.validateName);
33
33
  app.param('token', _middleware.validateName);
34
34
 
35
- // these can't be safely put into express url for some reason
36
- // TODO: For some reason? what reason?
35
+ // Express route parameter names must be valid JavaScript identifiers, which means
36
+ // they cannot start with a hyphen (-) or contain special characters like dots (.)
37
37
  app.param('_rev', (0, _middleware.match)(/^-rev$/));
38
38
  app.param('org_couchdb_user', (0, _middleware.match)(/^org\.couchdb\.user:/));
39
39
  app.use(auth.apiJWTmiddleware());
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_express","_interopRequireDefault","require","_middleware","_distTags","_package","_ping","_publish","_search","_stars","_user","_profile","_search2","_token","_whoami","obj","__esModule","default","_default","config","auth","storage","app","express","Router","param","validatePackage","validateName","match","use","apiJWTmiddleware","json","strict","limit","max_body_size","antiLoop","encodeScopePackage","whoami","profile","search","user","distTags","publish","ping","stars","v1Search","token","pkg"],"sources":["../src/index.ts"],"sourcesContent":["import express, { Router } from 'express';\n\nimport { Auth } 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\nexport default function (config: Config, auth: Auth, 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.use(auth.apiJWTmiddleware());\n app.use(express.json({ strict: false, limit: config.max_body_size || '10mb' }));\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 profile(app, auth, config);\n search(app);\n user(app, auth, config);\n distTags(app, auth, storage);\n publish(app, auth, storage);\n ping(app);\n stars(app, storage);\n v1Search(app, auth, storage);\n token(app, auth, storage, config);\n pkg(app, auth, storage);\n return app;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["_express","_interopRequireDefault","require","_middleware","_distTags","_package","_ping","_publish","_search","_stars","_user","_profile","_search2","_token","_whoami","e","__esModule","default","_default","config","auth","storage","app","express","Router","param","validatePackage","validateName","match","use","apiJWTmiddleware","json","strict","limit","max_body_size","antiLoop","encodeScopePackage","whoami","profile","search","user","distTags","publish","ping","stars","v1Search","token","pkg"],"sources":["../src/index.ts"],"sourcesContent":["import express, { Router } from 'express';\n\nimport { Auth } 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\nexport default function (config: Config, auth: Auth, 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 // Express route parameter names must be valid JavaScript identifiers, which means\n // they cannot start with a hyphen (-) or contain special characters like dots (.)\n app.param('_rev', match(/^-rev$/));\n app.param('org_couchdb_user', match(/^org\\.couchdb\\.user:/));\n\n app.use(auth.apiJWTmiddleware());\n app.use(express.json({ strict: false, limit: config.max_body_size || '10mb' }));\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 profile(app, auth, config);\n search(app);\n user(app, auth, config);\n distTags(app, auth, storage);\n publish(app, auth, storage);\n ping(app);\n stars(app, storage);\n v1Search(app, auth, storage);\n token(app, auth, storage, config);\n pkg(app, auth, storage);\n return app;\n}\n"],"mappings":"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","ignoreList":[]}
package/build/package.js CHANGED
@@ -9,7 +9,7 @@ var _core = require("@verdaccio/core");
9
9
  var _logger = require("@verdaccio/logger");
10
10
  var _middleware = require("@verdaccio/middleware");
11
11
  var _store = require("@verdaccio/store");
12
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
13
13
  const debug = (0, _debug.default)('verdaccio:api:package');
14
14
  function _default(route, auth, storage) {
15
15
  const can = (0, _middleware.allow)(auth, {
@@ -17,10 +17,12 @@ function _default(route, auth, storage) {
17
17
  afterAll: (a, b) => _logger.logger.trace(a, b)
18
18
  });
19
19
  route.get('/:package/:version?', can('access'), async function (req, _res, next) {
20
+ var _req$remote_user;
20
21
  debug('init package by version');
21
22
  const name = req.params.package;
22
23
  let version = req.params.version;
23
24
  const write = req.query.write === 'true';
25
+ const username = req === null || req === void 0 || (_req$remote_user = req.remote_user) === null || _req$remote_user === void 0 ? void 0 : _req$remote_user.name;
24
26
  const abbreviated = _core.stringUtils.getByQualityPriorityValue(req.get('Accept')) === _store.Storage.ABBREVIATED_HEADER;
25
27
  const requestOptions = {
26
28
  protocol: req.protocol,
@@ -28,7 +30,8 @@ function _default(route, auth, storage) {
28
30
  // FIXME: if we migrate to req.hostname, the port is not longer included.
29
31
  host: req.host,
30
32
  remoteAddress: req.socket.remoteAddress,
31
- byPassCache: write
33
+ byPassCache: write,
34
+ username
32
35
  };
33
36
  try {
34
37
  const manifest = await storage.getPackageByOptions({
@@ -55,7 +58,7 @@ function _default(route, auth, storage) {
55
58
  } = req.params;
56
59
  const abort = new AbortController();
57
60
  try {
58
- const stream = await storage.getTarballNext(pkgName, filename, {
61
+ const stream = await storage.getTarball(pkgName, filename, {
59
62
  signal: abort.signal
60
63
  // TODO: review why this param
61
64
  // enableRemote: true,
@@ -1 +1 @@
1
- {"version":3,"file":"package.js","names":["_debug","_interopRequireDefault","require","_core","_logger","_middleware","_store","obj","__esModule","default","debug","buildDebug","_default","route","auth","storage","can","allow","beforeAll","a","b","logger","trace","afterAll","get","req","_res","next","name","params","package","version","write","query","abbreviated","stringUtils","getByQualityPriorityValue","Storage","ABBREVIATED_HEADER","requestOptions","protocol","headers","host","remoteAddress","socket","byPassCache","manifest","getPackageByOptions","uplinksLook","setHeader","HEADER_TYPE","CONTENT_TYPE","HEADERS","JSON_INSTALL_CHARSET","JSON","err","res","pkgName","filename","abort","AbortController","stream","getTarballNext","signal","on","size","header","CONTENT_LENGTH","once","locals","report_error","url","OCTET_STREAM","pipe"],"sources":["../src/package.ts"],"sourcesContent":["import buildDebug from 'debug';\nimport { Router } from 'express';\n\nimport { Auth } from '@verdaccio/auth';\nimport { HEADERS, HEADER_TYPE, stringUtils } from '@verdaccio/core';\nimport { logger } from '@verdaccio/logger';\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\nexport default function (route: Router, auth: Auth, storage: Storage): void {\n const can = allow(auth, {\n beforeAll: (a, b) => logger.trace(a, b),\n afterAll: (a, b) => logger.trace(a, b),\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 version = req.params.version;\n const write = req.query.write === 'true';\n const abbreviated =\n stringUtils.getByQualityPriorityValue(req.get('Accept')) === Storage.ABBREVIATED_HEADER;\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 remoteAddress: req.socket.remoteAddress,\n byPassCache: write,\n };\n\n try {\n const manifest = await storage.getPackageByOptions({\n name,\n uplinksLook: true,\n abbreviated,\n version,\n requestOptions,\n });\n if (abbreviated) {\n _res.setHeader(HEADER_TYPE.CONTENT_TYPE, HEADERS.JSON_INSTALL_CHARSET);\n } else {\n _res.setHeader(HEADER_TYPE.CONTENT_TYPE, HEADERS.JSON);\n }\n\n next(manifest);\n } catch (err) {\n next(err);\n }\n }\n );\n\n route.get(\n '/:package/-/:filename',\n can('access'),\n async function (req: $RequestExtend, res: $ResponseExtend, next): Promise<void> {\n const { package: pkgName, filename } = req.params;\n const abort = new AbortController();\n try {\n const stream = (await storage.getTarballNext(pkgName, filename, {\n signal: abort.signal,\n // TODO: review why this param\n // enableRemote: true,\n })) as any;\n\n stream.on('content-length', (size) => {\n res.header(HEADER_TYPE.CONTENT_LENGTH, size);\n });\n\n stream.once('error', (err) => {\n res.locals.report_error(err);\n next(err);\n });\n\n req.on('abort', () => {\n debug('request aborted for %o', req.url);\n abort.abort();\n });\n\n res.header(HEADERS.CONTENT_TYPE, HEADERS.OCTET_STREAM);\n stream.pipe(res);\n } catch (err: any) {\n // console.log('catch API error request', err);\n res.locals.report_error(err);\n next(err);\n }\n }\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"package.js","names":["_debug","_interopRequireDefault","require","_core","_logger","_middleware","_store","e","__esModule","default","debug","buildDebug","_default","route","auth","storage","can","allow","beforeAll","a","b","logger","trace","afterAll","get","req","_res","next","_req$remote_user","name","params","package","version","write","query","username","remote_user","abbreviated","stringUtils","getByQualityPriorityValue","Storage","ABBREVIATED_HEADER","requestOptions","protocol","headers","host","remoteAddress","socket","byPassCache","manifest","getPackageByOptions","uplinksLook","setHeader","HEADER_TYPE","CONTENT_TYPE","HEADERS","JSON_INSTALL_CHARSET","JSON","err","res","pkgName","filename","abort","AbortController","stream","getTarball","signal","on","size","header","CONTENT_LENGTH","once","locals","report_error","url","OCTET_STREAM","pipe"],"sources":["../src/package.ts"],"sourcesContent":["import buildDebug from 'debug';\nimport { Router } from 'express';\n\nimport { Auth } from '@verdaccio/auth';\nimport { HEADERS, HEADER_TYPE, stringUtils } from '@verdaccio/core';\nimport { logger } from '@verdaccio/logger';\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\nexport default function (route: Router, auth: Auth, storage: Storage): void {\n const can = allow(auth, {\n beforeAll: (a, b) => logger.trace(a, b),\n afterAll: (a, b) => logger.trace(a, b),\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 version = req.params.version;\n const write = req.query.write === 'true';\n const username = req?.remote_user?.name;\n const abbreviated =\n stringUtils.getByQualityPriorityValue(req.get('Accept')) === Storage.ABBREVIATED_HEADER;\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 remoteAddress: req.socket.remoteAddress,\n byPassCache: write,\n username,\n };\n\n try {\n const manifest = await storage.getPackageByOptions({\n name,\n uplinksLook: true,\n abbreviated,\n version,\n requestOptions,\n });\n if (abbreviated) {\n _res.setHeader(HEADER_TYPE.CONTENT_TYPE, HEADERS.JSON_INSTALL_CHARSET);\n } else {\n _res.setHeader(HEADER_TYPE.CONTENT_TYPE, HEADERS.JSON);\n }\n\n next(manifest);\n } catch (err) {\n next(err);\n }\n }\n );\n\n route.get(\n '/:package/-/:filename',\n can('access'),\n async function (req: $RequestExtend, res: $ResponseExtend, next): Promise<void> {\n const { package: pkgName, filename } = req.params;\n const abort = new AbortController();\n try {\n const stream = (await storage.getTarball(pkgName, filename, {\n signal: abort.signal,\n // TODO: review why this param\n // enableRemote: true,\n })) as any;\n\n stream.on('content-length', (size) => {\n res.header(HEADER_TYPE.CONTENT_LENGTH, size);\n });\n\n stream.once('error', (err) => {\n res.locals.report_error(err);\n next(err);\n });\n\n req.on('abort', () => {\n debug('request aborted for %o', req.url);\n abort.abort();\n });\n\n res.header(HEADERS.CONTENT_TYPE, HEADERS.OCTET_STREAM);\n stream.pipe(res);\n } catch (err: any) {\n // console.log('catch API error request', err);\n res.locals.report_error(err);\n next(err);\n }\n }\n );\n}\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AAIA,IAAAC,KAAA,GAAAD,OAAA;AACA,IAAAE,OAAA,GAAAF,OAAA;AACA,IAAAG,WAAA,GAAAH,OAAA;AACA,IAAAI,MAAA,GAAAJ,OAAA;AAA2C,SAAAD,uBAAAM,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAI3C,MAAMG,KAAK,GAAG,IAAAC,cAAU,EAAC,uBAAuB,CAAC;AAElC,SAAAC,SAAUC,KAAa,EAAEC,IAAU,EAAEC,OAAgB,EAAQ;EAC1E,MAAMC,GAAG,GAAG,IAAAC,iBAAK,EAACH,IAAI,EAAE;IACtBI,SAAS,EAAEA,CAACC,CAAC,EAAEC,CAAC,KAAKC,cAAM,CAACC,KAAK,CAACH,CAAC,EAAEC,CAAC,CAAC;IACvCG,QAAQ,EAAEA,CAACJ,CAAC,EAAEC,CAAC,KAAKC,cAAM,CAACC,KAAK,CAACH,CAAC,EAAEC,CAAC;EACvC,CAAC,CAAC;EACFP,KAAK,CAACW,GAAG,CACP,qBAAqB,EACrBR,GAAG,CAAC,QAAQ,CAAC,EACb,gBACES,GAAmB,EACnBC,IAAqB,EACrBC,IAAsB,EACP;IAAA,IAAAC,gBAAA;IACflB,KAAK,CAAC,yBAAyB,CAAC;IAChC,MAAMmB,IAAI,GAAGJ,GAAG,CAACK,MAAM,CAACC,OAAO;IAC/B,IAAIC,OAAO,GAAGP,GAAG,CAACK,MAAM,CAACE,OAAO;IAChC,MAAMC,KAAK,GAAGR,GAAG,CAACS,KAAK,CAACD,KAAK,KAAK,MAAM;IACxC,MAAME,QAAQ,GAAGV,GAAG,aAAHA,GAAG,gBAAAG,gBAAA,GAAHH,GAAG,CAAEW,WAAW,cAAAR,gBAAA,uBAAhBA,gBAAA,CAAkBC,IAAI;IACvC,MAAMQ,WAAW,GACfC,iBAAW,CAACC,yBAAyB,CAACd,GAAG,CAACD,GAAG,CAAC,QAAQ,CAAC,CAAC,KAAKgB,cAAO,CAACC,kBAAkB;IACzF,MAAMC,cAAc,GAAG;MACrBC,QAAQ,EAAElB,GAAG,CAACkB,QAAQ;MACtBC,OAAO,EAAEnB,GAAG,CAACmB,OAAc;MAC3B;MACAC,IAAI,EAAEpB,GAAG,CAACoB,IAAI;MACdC,aAAa,EAAErB,GAAG,CAACsB,MAAM,CAACD,aAAa;MACvCE,WAAW,EAAEf,KAAK;MAClBE;IACF,CAAC;IAED,IAAI;MACF,MAAMc,QAAQ,GAAG,MAAMlC,OAAO,CAACmC,mBAAmB,CAAC;QACjDrB,IAAI;QACJsB,WAAW,EAAE,IAAI;QACjBd,WAAW;QACXL,OAAO;QACPU;MACF,CAAC,CAAC;MACF,IAAIL,WAAW,EAAE;QACfX,IAAI,CAAC0B,SAAS,CAACC,iBAAW,CAACC,YAAY,EAAEC,aAAO,CAACC,oBAAoB,CAAC;MACxE,CAAC,MAAM;QACL9B,IAAI,CAAC0B,SAAS,CAACC,iBAAW,CAACC,YAAY,EAAEC,aAAO,CAACE,IAAI,CAAC;MACxD;MAEA9B,IAAI,CAACsB,QAAQ,CAAC;IAChB,CAAC,CAAC,OAAOS,GAAG,EAAE;MACZ/B,IAAI,CAAC+B,GAAG,CAAC;IACX;EACF,CACF,CAAC;EAED7C,KAAK,CAACW,GAAG,CACP,uBAAuB,EACvBR,GAAG,CAAC,QAAQ,CAAC,EACb,gBAAgBS,GAAmB,EAAEkC,GAAoB,EAAEhC,IAAI,EAAiB;IAC9E,MAAM;MAAEI,OAAO,EAAE6B,OAAO;MAAEC;IAAS,CAAC,GAAGpC,GAAG,CAACK,MAAM;IACjD,MAAMgC,KAAK,GAAG,IAAIC,eAAe,CAAC,CAAC;IACnC,IAAI;MACF,MAAMC,MAAM,GAAI,MAAMjD,OAAO,CAACkD,UAAU,CAACL,OAAO,EAAEC,QAAQ,EAAE;QAC1DK,MAAM,EAAEJ,KAAK,CAACI;QACd;QACA;MACF,CAAC,CAAS;MAEVF,MAAM,CAACG,EAAE,CAAC,gBAAgB,EAAGC,IAAI,IAAK;QACpCT,GAAG,CAACU,MAAM,CAAChB,iBAAW,CAACiB,cAAc,EAAEF,IAAI,CAAC;MAC9C,CAAC,CAAC;MAEFJ,MAAM,CAACO,IAAI,CAAC,OAAO,EAAGb,GAAG,IAAK;QAC5BC,GAAG,CAACa,MAAM,CAACC,YAAY,CAACf,GAAG,CAAC;QAC5B/B,IAAI,CAAC+B,GAAG,CAAC;MACX,CAAC,CAAC;MAEFjC,GAAG,CAAC0C,EAAE,CAAC,OAAO,EAAE,MAAM;QACpBzD,KAAK,CAAC,wBAAwB,EAAEe,GAAG,CAACiD,GAAG,CAAC;QACxCZ,KAAK,CAACA,KAAK,CAAC,CAAC;MACf,CAAC,CAAC;MAEFH,GAAG,CAACU,MAAM,CAACd,aAAO,CAACD,YAAY,EAAEC,aAAO,CAACoB,YAAY,CAAC;MACtDX,MAAM,CAACY,IAAI,CAACjB,GAAG,CAAC;IAClB,CAAC,CAAC,OAAOD,GAAQ,EAAE;MACjB;MACAC,GAAG,CAACa,MAAM,CAACC,YAAY,CAACf,GAAG,CAAC;MAC5B/B,IAAI,CAAC+B,GAAG,CAAC;IACX;EACF,CACF,CAAC;AACH","ignoreList":[]}
package/build/ping.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"ping.js","names":["_default","route","get","req","res","next"],"sources":["../src/ping.ts"],"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"],"mappings":";;;;;;AAIe,SAAAA,SAAUC,KAAa,EAAQ;EAC5CA,KAAK,CAACC,GAAG,CACP,SAAS,EACT,UAAUC,GAAmB,EAAEC,GAAoB,EAAEC,IAAsB,EAAE;IAC3EA,IAAI,CAAC,CAAC,CAAC,CAAC;EACV,CACF,CAAC;AACH"}
1
+ {"version":3,"file":"ping.js","names":["_default","route","get","req","res","next"],"sources":["../src/ping.ts"],"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"],"mappings":";;;;;;AAIe,SAAAA,SAAUC,KAAa,EAAQ;EAC5CA,KAAK,CAACC,GAAG,CACP,SAAS,EACT,UAAUC,GAAmB,EAAEC,GAAoB,EAAEC,IAAsB,EAAE;IAC3EA,IAAI,CAAC,CAAC,CAAC,CAAC;EACV,CACF,CAAC;AACH","ignoreList":[]}
@@ -63,11 +63,11 @@ import { Storage } from '@verdaccio/store';
63
63
  *
64
64
  * 3. Star a package
65
65
  *
66
- * Permissions: start a package depends of the publish and unpublish permissions, there is no
67
- * specific flag for star or un start.
66
+ * Permissions: staring a package depends of the publish and unpublish permissions, there is no
67
+ * specific flag for star or unstar.
68
68
  * The URL for star is similar to the unpublish (change package format)
69
69
  *
70
- * npm has no endpoint for star a package, rather mutate the metadata and acts as, the difference
70
+ * npm has no endpoint for staring a package, rather mutate the metadata and acts as, the difference
71
71
  * is the users property which is part of the payload and the body only includes
72
72
  *
73
73
  * {
@@ -76,7 +76,24 @@ import { Storage } from '@verdaccio/store';
76
76
  "users": {
77
77
  [username]: boolean value (true, false)
78
78
  }
79
- }
79
+ }
80
+ *
81
+ * 4. Change owners of a package
82
+ *
83
+ * Similar to staring a package, changing owners (maintainers) of a package uses the publish
84
+ * endpoint.
85
+ *
86
+ * The body includes a list of the new owners with the following format
87
+ *
88
+ * {
89
+ "_id": pkgName,
90
+ "_rev": "4-b0cdaefc9bdb77c8",
91
+ "maintainers": [
92
+ { "name": "first owner", "email": "me@verdaccio.org" },
93
+ { "name": "second owner", "email": "you@verdaccio.org" },
94
+ ...
95
+ ]
96
+ }
80
97
  *
81
98
  */
82
99
  export default function publish(router: Router, auth: Auth, storage: Storage): void;
package/build/publish.js CHANGED
@@ -10,7 +10,7 @@ var _mime = _interopRequireDefault(require("mime"));
10
10
  var _core = require("@verdaccio/core");
11
11
  var _logger = require("@verdaccio/logger");
12
12
  var _middleware = require("@verdaccio/middleware");
13
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
14
14
  // import star from './star';
15
15
 
16
16
  const debug = (0, _debug.default)('verdaccio:api:publish');
@@ -77,11 +77,11 @@ const debug = (0, _debug.default)('verdaccio:api:publish');
77
77
  *
78
78
  * 3. Star a package
79
79
  *
80
- * Permissions: start a package depends of the publish and unpublish permissions, there is no
81
- * specific flag for star or un start.
80
+ * Permissions: staring a package depends of the publish and unpublish permissions, there is no
81
+ * specific flag for star or unstar.
82
82
  * The URL for star is similar to the unpublish (change package format)
83
83
  *
84
- * npm has no endpoint for star a package, rather mutate the metadata and acts as, the difference
84
+ * npm has no endpoint for staring a package, rather mutate the metadata and acts as, the difference
85
85
  * is the users property which is part of the payload and the body only includes
86
86
  *
87
87
  * {
@@ -90,7 +90,24 @@ const debug = (0, _debug.default)('verdaccio:api:publish');
90
90
  "users": {
91
91
  [username]: boolean value (true, false)
92
92
  }
93
- }
93
+ }
94
+ *
95
+ * 4. Change owners of a package
96
+ *
97
+ * Similar to staring a package, changing owners (maintainers) of a package uses the publish
98
+ * endpoint.
99
+ *
100
+ * The body includes a list of the new owners with the following format
101
+ *
102
+ * {
103
+ "_id": pkgName,
104
+ "_rev": "4-b0cdaefc9bdb77c8",
105
+ "maintainers": [
106
+ { "name": "first owner", "email": "me@verdaccio.org" },
107
+ { "name": "second owner", "email": "you@verdaccio.org" },
108
+ ...
109
+ ]
110
+ }
94
111
  *
95
112
  */
96
113
  function publish(router, auth, storage) {
@@ -110,13 +127,15 @@ function publish(router, auth, storage) {
110
127
  * npm http fetch DELETE 201 http://localhost:4873/package-name/-rev/18-d8ebe3020bd4ac9c 22ms
111
128
  */
112
129
  router.delete('/:package/-rev/:revision', can('unpublish'), async function (req, res, next) {
130
+ var _req$remote_user;
113
131
  const packageName = req.params.package;
114
132
  const rev = req.params.revision;
133
+ const username = req === null || req === void 0 || (_req$remote_user = req.remote_user) === null || _req$remote_user === void 0 ? void 0 : _req$remote_user.name;
115
134
  _logger.logger.debug({
116
135
  packageName
117
136
  }, `unpublishing @{packageName}`);
118
137
  try {
119
- await storage.removePackage(packageName, rev);
138
+ await storage.removePackage(packageName, rev, username);
120
139
  debug('package %s unpublished', packageName);
121
140
  res.status(_core.HTTP_STATUS.CREATED);
122
141
  return next({
@@ -132,18 +151,20 @@ function publish(router, auth, storage) {
132
151
  npm http fetch DELETE 201 http://localhost:4873/package-name/-rev/18-d8ebe3020bd4ac9c 22ms
133
152
  */
134
153
  router.delete('/:package/-/:filename/-rev/:revision', can('unpublish'), can('publish'), async function (req, res, next) {
154
+ var _req$remote_user2;
135
155
  const packageName = req.params.package;
136
156
  const {
137
157
  filename,
138
158
  revision
139
159
  } = req.params;
160
+ const username = req === null || req === void 0 || (_req$remote_user2 = req.remote_user) === null || _req$remote_user2 === void 0 ? void 0 : _req$remote_user2.name;
140
161
  _logger.logger.debug({
141
162
  packageName,
142
163
  filename,
143
164
  revision
144
165
  }, `removing a tarball for @{packageName}-@{tarballName}-@{revision}`);
145
166
  try {
146
- await storage.removeTarball(packageName, filename, revision);
167
+ await storage.removeTarball(packageName, filename, revision, username);
147
168
  res.status(_core.HTTP_STATUS.CREATED);
148
169
  _logger.logger.debug({
149
170
  packageName,
@@ -160,14 +181,19 @@ function publish(router, auth, storage) {
160
181
  }
161
182
  function publishPackage(storage) {
162
183
  return async function (req, res, next) {
163
- var _req$remote_user;
184
+ var _req$remote_user3;
164
185
  const ac = new AbortController();
165
186
  const packageName = req.params.package;
166
187
  const {
167
188
  revision
168
189
  } = req.params;
169
190
  const metadata = req.body;
170
- const username = req === null || req === void 0 ? void 0 : (_req$remote_user = req.remote_user) === null || _req$remote_user === void 0 ? void 0 : _req$remote_user.name;
191
+ const username = req === null || req === void 0 || (_req$remote_user3 = req.remote_user) === null || _req$remote_user3 === void 0 ? void 0 : _req$remote_user3.name;
192
+ debug('publishing package %o for user %o', packageName, username);
193
+ _logger.logger.debug({
194
+ packageName,
195
+ username
196
+ }, 'publishing package @{packageName} for user @{username}');
171
197
  try {
172
198
  const message = await storage.updateManifest(metadata, {
173
199
  name: packageName,