@verdaccio/api 6.0.0-6-next.25 → 6.0.0-6-next.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +106 -0
- package/build/dist-tags.js +40 -35
- package/build/dist-tags.js.map +1 -1
- package/build/index.js +1 -7
- package/build/index.js.map +1 -1
- package/build/package.js +39 -28
- package/build/package.js.map +1 -1
- package/build/ping.js.map +1 -1
- package/build/publish.d.ts +79 -22
- package/build/publish.js +89 -313
- package/build/publish.js.map +1 -1
- package/build/search.js.map +1 -1
- package/build/star.js +53 -54
- package/build/star.js.map +1 -1
- package/build/stars.js +6 -6
- package/build/stars.js.map +1 -1
- package/build/user.js +19 -1
- package/build/user.js.map +1 -1
- package/build/v1/profile.js.map +1 -1
- package/build/v1/search.js +2 -4
- package/build/v1/search.js.map +1 -1
- package/build/v1/token.js.map +1 -1
- package/build/whoami.js +11 -25
- package/build/whoami.js.map +1 -1
- package/jest.config.js +8 -1
- package/package.json +71 -69
- package/src/dist-tags.ts +63 -50
- package/src/index.ts +1 -6
- package/src/package.ts +37 -44
- package/src/publish.ts +115 -336
- package/src/star.ts +53 -52
- package/src/stars.ts +9 -11
- package/src/user.ts +19 -2
- package/src/v1/search.ts +3 -3
- package/src/whoami.ts +8 -24
- package/test/integration/_helper.ts +97 -54
- package/test/integration/config/distTag.yaml +25 -0
- package/test/integration/config/package.yaml +3 -8
- package/test/integration/config/ping.yaml +2 -6
- package/test/integration/config/publish.yaml +4 -10
- package/test/integration/config/search.yaml +29 -0
- package/test/integration/config/token.jwt.yaml +27 -0
- package/test/integration/config/token.yaml +19 -0
- package/test/integration/config/user.jwt.yaml +37 -0
- package/test/integration/config/user.yaml +8 -14
- package/test/integration/config/whoami.yaml +4 -11
- package/test/integration/distTag.spec.ts +76 -0
- package/test/integration/package.spec.ts +53 -75
- package/test/integration/ping.spec.ts +4 -3
- package/test/integration/publish.spec.ts +60 -25
- package/test/integration/search.spec.ts +126 -0
- package/test/integration/token.spec.ts +124 -0
- package/test/integration/user.jwt.spec.ts +87 -0
- package/test/integration/user.spec.ts +1 -0
- package/test/integration/whoami.spec.ts +21 -39
- package/test/unit/publish.disabled.ts +252 -0
- package/tsconfig.json +1 -1
- package/__mocks__/@verdaccio/logger/index.js +0 -21
- package/build/utils.d.ts +0 -7
- package/build/utils.js +0 -36
- package/build/utils.js.map +0 -1
- package/src/utils.ts +0 -25
- package/test/unit/__snapshots__/publish.spec.ts.snap +0 -49
- package/test/unit/publish.spec.ts +0 -300
package/build/publish.js
CHANGED
|
@@ -3,42 +3,25 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.addVersion = addVersion;
|
|
7
6
|
exports.default = publish;
|
|
8
|
-
exports.
|
|
9
|
-
exports.removeTarball = removeTarball;
|
|
10
|
-
exports.unPublishPackage = unPublishPackage;
|
|
11
|
-
exports.uploadPackageTarball = uploadPackageTarball;
|
|
7
|
+
exports.publishPackageNext = publishPackageNext;
|
|
12
8
|
|
|
13
9
|
var _debug = _interopRequireDefault(require("debug"));
|
|
14
10
|
|
|
15
|
-
var _lodash = _interopRequireDefault(require("lodash"));
|
|
16
|
-
|
|
17
11
|
var _mime = _interopRequireDefault(require("mime"));
|
|
18
12
|
|
|
19
|
-
var _path = _interopRequireDefault(require("path"));
|
|
20
|
-
|
|
21
13
|
var _core = require("@verdaccio/core");
|
|
22
14
|
|
|
23
|
-
var _hooks = require("@verdaccio/hooks");
|
|
24
|
-
|
|
25
15
|
var _logger = require("@verdaccio/logger");
|
|
26
16
|
|
|
27
17
|
var _middleware = require("@verdaccio/middleware");
|
|
28
18
|
|
|
29
|
-
var _utils = require("@verdaccio/utils");
|
|
30
|
-
|
|
31
|
-
var _star = _interopRequireDefault(require("./star"));
|
|
32
|
-
|
|
33
|
-
var _utils2 = require("./utils");
|
|
34
|
-
|
|
35
19
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
36
20
|
|
|
21
|
+
// import star from './star';
|
|
22
|
+
// import { isPublishablePackage, isRelatedToDeprecation } from './utils';
|
|
37
23
|
const debug = (0, _debug.default)('verdaccio:api:publish');
|
|
38
|
-
|
|
39
|
-
function publish(router, auth, storage, config) {
|
|
40
|
-
const can = (0, _middleware.allow)(auth);
|
|
41
|
-
/**
|
|
24
|
+
/**
|
|
42
25
|
* Publish a package / update package / un/start a package
|
|
43
26
|
*
|
|
44
27
|
* There are multiples scenarios here to be considered:
|
|
@@ -77,13 +60,27 @@ function publish(router, auth, storage, config) {
|
|
|
77
60
|
*
|
|
78
61
|
* Example flow of unpublish.
|
|
79
62
|
*
|
|
80
|
-
*
|
|
81
|
-
*
|
|
82
|
-
*
|
|
83
|
-
* npm
|
|
84
|
-
* npm
|
|
85
|
-
* -e11c8db282b2d992 19ms
|
|
63
|
+
* There are two possible flows:
|
|
64
|
+
*
|
|
65
|
+
* - Remove all packages (entirely)
|
|
66
|
+
* eg: npm unpublish package-name@* --force
|
|
67
|
+
* eg: npm unpublish package-name --force
|
|
86
68
|
*
|
|
69
|
+
* npm http fetch GET 200 http://localhost:4873/custom-name?write=true 1680ms
|
|
70
|
+
* npm http fetch DELETE 201 http://localhost:4873/custom-name/-/test1-1.0.3.tgz/-rev/16-e11c8db282b2d992 19ms
|
|
71
|
+
*
|
|
72
|
+
* - Remove a specific version
|
|
73
|
+
* eg: npm unpublish package-name@1.0.0 --force
|
|
74
|
+
*
|
|
75
|
+
* Get fresh manifest
|
|
76
|
+
* npm http fetch GET 200 http://localhost:4873/custom-name?write=true 1680ms
|
|
77
|
+
* Update manifest without the version to be unpublished
|
|
78
|
+
* npm http fetch PUT 201 http://localhost:4873/custom-name/-rev/14-5d500cfce92f90fd 956606ms
|
|
79
|
+
* Get fresh manifest (revision should be different)
|
|
80
|
+
* npm http fetch GET 200 http://localhost:4873/custom-name?write=true 1601ms
|
|
81
|
+
* Remove the tarball
|
|
82
|
+
* npm http fetch DELETE 201 http://localhost:4873/custom-name/-/test1-1.0.3.tgz/-rev/16-e11c8db282b2d992 19ms
|
|
83
|
+
*
|
|
87
84
|
* 3. Star a package
|
|
88
85
|
*
|
|
89
86
|
* Permissions: start a package depends of the publish and unpublish permissions, there is no
|
|
@@ -94,257 +91,56 @@ function publish(router, auth, storage, config) {
|
|
|
94
91
|
* is the users property which is part of the payload and the body only includes
|
|
95
92
|
*
|
|
96
93
|
* {
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
94
|
+
"_id": pkgName,
|
|
95
|
+
"_rev": "3-b0cdaefc9bdb77c8",
|
|
96
|
+
"users": {
|
|
97
|
+
[username]: boolean value (true, false)
|
|
98
|
+
}
|
|
99
|
+
}
|
|
103
100
|
*
|
|
104
101
|
*/
|
|
105
102
|
|
|
106
|
-
|
|
103
|
+
function publish(router, auth, storage) {
|
|
104
|
+
const can = (0, _middleware.allow)(auth); // publish (update manifest) v6
|
|
105
|
+
|
|
106
|
+
router.put('/:package', can('publish'), (0, _middleware.media)(_mime.default.getType('json')), _middleware.expectJson, publishPackageNext(storage)); // unpublish a pacakge v6
|
|
107
|
+
|
|
108
|
+
router.put('/:package/-rev/:revision', can('unpublish'), (0, _middleware.media)(_mime.default.getType('json')), _middleware.expectJson, publishPackageNext(storage));
|
|
107
109
|
/**
|
|
108
110
|
* Un-publishing an entire package.
|
|
109
111
|
*
|
|
110
112
|
* This scenario happens when the first call detect there is only one version remaining
|
|
111
113
|
* in the metadata, then the client decides to DELETE the resource
|
|
112
|
-
* npm http fetch GET 304 http://localhost:4873
|
|
113
|
-
|
|
114
|
+
* npm http fetch GET 304 http://localhost:4873/package-name?write=true 1076ms (from cache)
|
|
115
|
+
* npm http fetch DELETE 201 http://localhost:4873/package-name/-rev/18-d8ebe3020bd4ac9c 22ms
|
|
114
116
|
*/
|
|
117
|
+
// v6
|
|
115
118
|
|
|
116
|
-
router.delete('/:package/-rev
|
|
117
|
-
|
|
118
|
-
router.delete('/:package/-/:filename/-rev/:revision', can('unpublish'), can('publish'), removeTarball(storage)); // uploading package tarball
|
|
119
|
-
|
|
120
|
-
router.put('/:package/-/:filename/*', can('publish'), (0, _middleware.media)(_core.HEADERS.OCTET_STREAM), uploadPackageTarball(storage)); // adding a version
|
|
121
|
-
|
|
122
|
-
router.put('/:package/:version/-tag/:tag', can('publish'), (0, _middleware.media)(_mime.default.getType('json')), _middleware.expectJson, addVersion(storage));
|
|
123
|
-
}
|
|
124
|
-
/**
|
|
125
|
-
* Publish a package
|
|
126
|
-
*/
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
function publishPackage(storage, config, auth) {
|
|
130
|
-
const starApi = (0, _star.default)(storage);
|
|
131
|
-
return function (req, res, next) {
|
|
132
|
-
const packageName = req.params.package;
|
|
133
|
-
debug('publishing or updating a new version for %o', packageName);
|
|
134
|
-
/**
|
|
135
|
-
* Write tarball of stream data from package clients.
|
|
136
|
-
*/
|
|
137
|
-
|
|
138
|
-
const createTarball = function (filename, data, cb) {
|
|
139
|
-
const stream = storage.addTarball(packageName, filename);
|
|
140
|
-
stream.on('error', function (err) {
|
|
141
|
-
debug('error on stream a tarball %o for %o with error %o', filename, packageName, err.message);
|
|
142
|
-
cb(err);
|
|
143
|
-
});
|
|
144
|
-
stream.on('success', function () {
|
|
145
|
-
debug('success on stream a tarball %o for %o', filename, packageName);
|
|
146
|
-
cb();
|
|
147
|
-
}); // this is dumb and memory-consuming, but what choices do we have?
|
|
148
|
-
// flow: we need first refactor this file before decides which type use here
|
|
149
|
-
|
|
150
|
-
stream.end(Buffer.from(data.data, 'base64'));
|
|
151
|
-
stream.done();
|
|
152
|
-
};
|
|
153
|
-
/**
|
|
154
|
-
* Add new package version in storage
|
|
155
|
-
*/
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
const createVersion = function (version, metadata, cb) {
|
|
159
|
-
debug('add a new package version %o to storage %o', version, metadata);
|
|
160
|
-
storage.addVersion(packageName, version, metadata, null, cb);
|
|
161
|
-
};
|
|
162
|
-
/**
|
|
163
|
-
* Add new tags in storage
|
|
164
|
-
*/
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
const addTags = function (tags, cb) {
|
|
168
|
-
debug('add new tag %o to storage', packageName);
|
|
169
|
-
storage.mergeTags(packageName, tags, cb);
|
|
170
|
-
};
|
|
171
|
-
|
|
172
|
-
const afterChange = function (error, okMessage, metadata) {
|
|
173
|
-
const metadataCopy = { ...metadata
|
|
174
|
-
};
|
|
175
|
-
debug('after change metadata %o', metadata);
|
|
176
|
-
const {
|
|
177
|
-
_attachments,
|
|
178
|
-
versions
|
|
179
|
-
} = metadataCopy; // `npm star` wouldn't have attachments
|
|
180
|
-
// and `npm deprecate` would have attachments as a empty object, i.e {}
|
|
181
|
-
|
|
182
|
-
if (_lodash.default.isNil(_attachments) || JSON.stringify(_attachments) === '{}') {
|
|
183
|
-
debug('no attachments detected');
|
|
184
|
-
|
|
185
|
-
if (error) {
|
|
186
|
-
debug('no_attachments: after change error with %o', error.message);
|
|
187
|
-
return next(error);
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
debug('no_attachments: after change success');
|
|
191
|
-
res.status(_core.HTTP_STATUS.CREATED);
|
|
192
|
-
return next({
|
|
193
|
-
ok: okMessage,
|
|
194
|
-
success: true
|
|
195
|
-
});
|
|
196
|
-
}
|
|
197
|
-
/**
|
|
198
|
-
* npm-registry-client 0.3+ embeds tarball into the json upload
|
|
199
|
-
* issue https://github.com/rlidwka/sinopia/issues/31, dealing with it here:
|
|
200
|
-
*/
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
const isInvalidBodyFormat = (0, _utils.isObject)(_attachments) === false || (0, _utils.hasDiffOneKey)(_attachments) || (0, _utils.isObject)(versions) === false || (0, _utils.hasDiffOneKey)(versions);
|
|
204
|
-
|
|
205
|
-
if (isInvalidBodyFormat) {
|
|
206
|
-
// npm is doing something strange again
|
|
207
|
-
// if this happens in normal circumstances, report it as a bug
|
|
208
|
-
debug('invalid body format');
|
|
209
|
-
|
|
210
|
-
_logger.logger.info({
|
|
211
|
-
packageName
|
|
212
|
-
}, `wrong package format on publish a package @{packageName}`);
|
|
213
|
-
|
|
214
|
-
return next(_core.errorUtils.getBadRequest(_core.API_ERROR.UNSUPORTED_REGISTRY_CALL));
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
if (error && error.status !== _core.HTTP_STATUS.CONFLICT) {
|
|
218
|
-
debug('error on change or update a package with %o', error.message);
|
|
219
|
-
return next(error);
|
|
220
|
-
} // at this point document is either created or existed before
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
const [firstAttachmentKey] = Object.keys(_attachments);
|
|
224
|
-
createTarball(_path.default.basename(firstAttachmentKey), _attachments[firstAttachmentKey], function (error) {
|
|
225
|
-
debug('creating a tarball %o', firstAttachmentKey);
|
|
226
|
-
|
|
227
|
-
if (error) {
|
|
228
|
-
debug('error on create a tarball for %o with error %o', packageName, error.message);
|
|
229
|
-
return next(error);
|
|
230
|
-
}
|
|
231
|
-
|
|
232
|
-
const versionToPublish = Object.keys(versions)[0];
|
|
233
|
-
versions[versionToPublish].readme = _lodash.default.isNil(metadataCopy.readme) === false ? String(metadataCopy.readme) : '';
|
|
234
|
-
createVersion(versionToPublish, versions[versionToPublish], function (error) {
|
|
235
|
-
if (error) {
|
|
236
|
-
debug('error on create a version for %o with error %o', packageName, error.message);
|
|
237
|
-
return next(error);
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
addTags(metadataCopy[_core.DIST_TAGS], async function (error) {
|
|
241
|
-
if (error) {
|
|
242
|
-
debug('error on create a tag for %o with error %o', packageName, error.message);
|
|
243
|
-
return next(error);
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
try {
|
|
247
|
-
await (0, _hooks.notify)(metadataCopy, config, req.remote_user, `${metadataCopy.name}@${versionToPublish}`);
|
|
248
|
-
} catch (error) {
|
|
249
|
-
debug('error on notify add a new tag %o', `${metadataCopy.name}@${versionToPublish}`);
|
|
250
|
-
|
|
251
|
-
_logger.logger.error({
|
|
252
|
-
error
|
|
253
|
-
}, 'notify batch service has failed: @{error}');
|
|
254
|
-
}
|
|
255
|
-
|
|
256
|
-
debug('add a tag succesfully for %o', `${metadataCopy.name}@${versionToPublish}`);
|
|
257
|
-
res.status(_core.HTTP_STATUS.CREATED);
|
|
258
|
-
return next({
|
|
259
|
-
ok: okMessage,
|
|
260
|
-
success: true
|
|
261
|
-
});
|
|
262
|
-
});
|
|
263
|
-
});
|
|
264
|
-
});
|
|
265
|
-
};
|
|
266
|
-
|
|
267
|
-
if ((0, _utils2.isPublishablePackage)(req.body) === false && (0, _utils.isObject)(req.body.users)) {
|
|
268
|
-
debug('starting star a package');
|
|
269
|
-
return starApi(req, res, next);
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
try {
|
|
273
|
-
debug('pre validation metadata to publish %o', req.body);
|
|
274
|
-
const metadata = (0, _utils.validateMetadata)(req.body, packageName);
|
|
275
|
-
debug('post validation metadata to publish %o', metadata); // treating deprecation as updating a package
|
|
276
|
-
|
|
277
|
-
if (req.params._rev || (0, _utils2.isRelatedToDeprecation)(req.body)) {
|
|
278
|
-
debug('updating a new version for %o', packageName); // we check unpublish permissions, an update is basically remove versions
|
|
279
|
-
|
|
280
|
-
const remote = req.remote_user;
|
|
281
|
-
auth.allow_unpublish({
|
|
282
|
-
packageName
|
|
283
|
-
}, remote, error => {
|
|
284
|
-
debug('allowed to unpublish a package %o', packageName);
|
|
285
|
-
|
|
286
|
-
if (error) {
|
|
287
|
-
debug('not allowed to unpublish a version for %o', packageName);
|
|
288
|
-
return next(error);
|
|
289
|
-
}
|
|
290
|
-
|
|
291
|
-
debug('update a package');
|
|
292
|
-
storage.changePackage(packageName, metadata, req.params.revision, function (error) {
|
|
293
|
-
afterChange(error, _core.API_MESSAGE.PKG_CHANGED, metadata);
|
|
294
|
-
});
|
|
295
|
-
});
|
|
296
|
-
} else {
|
|
297
|
-
debug('adding a new version for the package %o', packageName);
|
|
298
|
-
storage.addPackage(packageName, metadata, function (error) {
|
|
299
|
-
debug('package metadata updated %o', metadata);
|
|
300
|
-
afterChange(error, _core.API_MESSAGE.PKG_CREATED, metadata);
|
|
301
|
-
});
|
|
302
|
-
}
|
|
303
|
-
} catch (error) {
|
|
304
|
-
debug('error on publish, bad package format %o', packageName);
|
|
305
|
-
|
|
306
|
-
_logger.logger.error({
|
|
307
|
-
packageName
|
|
308
|
-
}, 'error on publish, bad package data for @{packageName}');
|
|
309
|
-
|
|
310
|
-
return next(_core.errorUtils.getBadData(_core.API_ERROR.BAD_PACKAGE_DATA));
|
|
311
|
-
}
|
|
312
|
-
};
|
|
313
|
-
}
|
|
314
|
-
/**
|
|
315
|
-
* un-publish a package
|
|
316
|
-
*/
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
function unPublishPackage(storage) {
|
|
320
|
-
return async function (req, res, next) {
|
|
119
|
+
router.delete('/:package/-rev/:revision', can('unpublish'), async function (req, res, next) {
|
|
321
120
|
const packageName = req.params.package;
|
|
121
|
+
const rev = req.params.revision;
|
|
322
122
|
|
|
323
123
|
_logger.logger.debug({
|
|
324
124
|
packageName
|
|
325
125
|
}, `unpublishing @{packageName}`);
|
|
326
126
|
|
|
327
127
|
try {
|
|
328
|
-
await storage.removePackage(packageName);
|
|
128
|
+
await storage.removePackage(packageName, rev);
|
|
129
|
+
debug('package %s unpublished', packageName);
|
|
130
|
+
res.status(_core.HTTP_STATUS.CREATED);
|
|
131
|
+
return next({
|
|
132
|
+
ok: _core.API_MESSAGE.PKG_REMOVED
|
|
133
|
+
});
|
|
329
134
|
} catch (err) {
|
|
330
|
-
|
|
331
|
-
return next(err);
|
|
332
|
-
}
|
|
135
|
+
return next(err);
|
|
333
136
|
}
|
|
137
|
+
});
|
|
138
|
+
/*
|
|
139
|
+
Remove a tarball, this happens when npm unpublish a package unique version.
|
|
140
|
+
npm http fetch DELETE 201 http://localhost:4873/package-name/-rev/18-d8ebe3020bd4ac9c 22ms
|
|
141
|
+
*/
|
|
334
142
|
|
|
335
|
-
|
|
336
|
-
return next({
|
|
337
|
-
ok: _core.API_MESSAGE.PKG_REMOVED
|
|
338
|
-
});
|
|
339
|
-
};
|
|
340
|
-
}
|
|
341
|
-
/**
|
|
342
|
-
* Delete tarball
|
|
343
|
-
*/
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
function removeTarball(storage) {
|
|
347
|
-
return function (req, res, next) {
|
|
143
|
+
router.delete('/:package/-/:filename/-rev/:revision', can('unpublish'), can('publish'), async function (req, res, next) {
|
|
348
144
|
const packageName = req.params.package;
|
|
349
145
|
const {
|
|
350
146
|
filename,
|
|
@@ -357,11 +153,8 @@ function removeTarball(storage) {
|
|
|
357
153
|
revision
|
|
358
154
|
}, `removing a tarball for @{packageName}-@{tarballName}-@{revision}`);
|
|
359
155
|
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
return next(err);
|
|
363
|
-
}
|
|
364
|
-
|
|
156
|
+
try {
|
|
157
|
+
await storage.removeTarball(packageName, filename, revision);
|
|
365
158
|
res.status(_core.HTTP_STATUS.CREATED);
|
|
366
159
|
|
|
367
160
|
_logger.logger.debug({
|
|
@@ -373,66 +166,49 @@ function removeTarball(storage) {
|
|
|
373
166
|
return next({
|
|
374
167
|
ok: _core.API_MESSAGE.TARBALL_REMOVED
|
|
375
168
|
});
|
|
376
|
-
})
|
|
377
|
-
|
|
169
|
+
} catch (err) {
|
|
170
|
+
return next(err);
|
|
171
|
+
}
|
|
172
|
+
});
|
|
378
173
|
}
|
|
379
|
-
/**
|
|
380
|
-
* Adds a new version
|
|
381
|
-
*/
|
|
382
|
-
|
|
383
174
|
|
|
384
|
-
function
|
|
385
|
-
return function (req,
|
|
175
|
+
function publishPackageNext(storage) {
|
|
176
|
+
return async function (req, _res, next) {
|
|
177
|
+
const ac = new AbortController();
|
|
178
|
+
const packageName = req.params.package;
|
|
386
179
|
const {
|
|
387
|
-
|
|
388
|
-
tag
|
|
180
|
+
revision
|
|
389
181
|
} = req.params;
|
|
390
|
-
const
|
|
391
|
-
debug('add a new version %o and tag %o for %o', version, tag, packageName);
|
|
392
|
-
storage.addVersion(packageName, version, req.body, tag, function (error) {
|
|
393
|
-
if (error) {
|
|
394
|
-
debug('error on add new version');
|
|
395
|
-
return next(error);
|
|
396
|
-
}
|
|
182
|
+
const metadata = req.body;
|
|
397
183
|
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
184
|
+
try {
|
|
185
|
+
debug('publishing %s', packageName);
|
|
186
|
+
await storage.updateManifest(metadata, {
|
|
187
|
+
name: packageName,
|
|
188
|
+
revision,
|
|
189
|
+
signal: ac.signal,
|
|
190
|
+
requestOptions: {
|
|
191
|
+
host: req.hostname,
|
|
192
|
+
protocol: req.protocol,
|
|
193
|
+
// @ts-ignore
|
|
194
|
+
headers: req.headers
|
|
195
|
+
}
|
|
402
196
|
});
|
|
403
|
-
});
|
|
404
|
-
};
|
|
405
|
-
}
|
|
406
|
-
/**
|
|
407
|
-
* uploadPackageTarball
|
|
408
|
-
*/
|
|
409
|
-
|
|
410
197
|
|
|
411
|
-
|
|
412
|
-
return function (req, res, next) {
|
|
413
|
-
const packageName = req.params.package;
|
|
414
|
-
const stream = storage.addTarball(packageName, req.params.filename);
|
|
415
|
-
req.pipe(stream); // checking if end event came before closing
|
|
198
|
+
_res.status(_core.HTTP_STATUS.CREATED);
|
|
416
199
|
|
|
417
|
-
let complete = false;
|
|
418
|
-
req.on('end', function () {
|
|
419
|
-
complete = true;
|
|
420
|
-
stream.done();
|
|
421
|
-
});
|
|
422
|
-
req.on('close', function () {
|
|
423
|
-
if (!complete) {
|
|
424
|
-
stream.abort();
|
|
425
|
-
}
|
|
426
|
-
});
|
|
427
|
-
stream.on('error', function (err) {
|
|
428
|
-
return res.locals.report_error(err);
|
|
429
|
-
});
|
|
430
|
-
stream.on('success', function () {
|
|
431
|
-
res.status(_core.HTTP_STATUS.CREATED);
|
|
432
200
|
return next({
|
|
433
|
-
|
|
201
|
+
// TODO: this could be also Package Updated based on the
|
|
202
|
+
// action, deprecate, star, publish new version, or create a package
|
|
203
|
+
// the mssage some return from the method
|
|
204
|
+
ok: _core.API_MESSAGE.PKG_CREATED,
|
|
205
|
+
success: true
|
|
434
206
|
});
|
|
435
|
-
})
|
|
207
|
+
} catch (err) {
|
|
208
|
+
// TODO: review if we need the abort controller here
|
|
209
|
+
ac.abort();
|
|
210
|
+
next(err);
|
|
211
|
+
}
|
|
436
212
|
};
|
|
437
213
|
}
|
|
438
214
|
//# sourceMappingURL=publish.js.map
|
package/build/publish.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/publish.ts"],"names":["debug","publish","router","auth","storage","config","can","put","mime","getType","expectJson","publishPackage","delete","unPublishPackage","removeTarball","HEADERS","OCTET_STREAM","uploadPackageTarball","addVersion","starApi","req","res","next","packageName","params","package","createTarball","filename","data","cb","stream","addTarball","on","err","message","end","Buffer","from","done","createVersion","version","metadata","addTags","tags","mergeTags","afterChange","error","okMessage","metadataCopy","_attachments","versions","_","isNil","JSON","stringify","status","HTTP_STATUS","CREATED","ok","success","isInvalidBodyFormat","logger","info","errorUtils","getBadRequest","API_ERROR","UNSUPORTED_REGISTRY_CALL","CONFLICT","firstAttachmentKey","Object","keys","Path","basename","versionToPublish","readme","String","DIST_TAGS","remote_user","name","body","users","_rev","remote","allow_unpublish","changePackage","revision","API_MESSAGE","PKG_CHANGED","addPackage","PKG_CREATED","getBadData","BAD_PACKAGE_DATA","removePackage","PKG_REMOVED","TARBALL_REMOVED","tag","PKG_PUBLISHED","pipe","complete","abort","locals","report_error","TARBALL_UPLOADED"],"mappings":"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","sourcesContent":["import buildDebug from 'debug';\nimport { Router } from 'express';\nimport _ from 'lodash';\nimport mime from 'mime';\nimport Path from 'path';\n\nimport { IAuth } from '@verdaccio/auth';\nimport {\n API_ERROR,\n API_MESSAGE,\n DIST_TAGS,\n HEADERS,\n HTTP_STATUS,\n errorUtils,\n} from '@verdaccio/core';\nimport { notify } from '@verdaccio/hooks';\nimport { logger } from '@verdaccio/logger';\nimport { allow, expectJson, media } from '@verdaccio/middleware';\nimport { Storage } from '@verdaccio/store';\nimport { Callback, CallbackAction, Config, MergeTags, Package, Version } from '@verdaccio/types';\nimport { hasDiffOneKey, isObject, validateMetadata } from '@verdaccio/utils';\n\nimport { $NextFunctionVer, $RequestExtend, $ResponseExtend } from '../types/custom';\nimport star from './star';\nimport { isPublishablePackage, isRelatedToDeprecation } from './utils';\n\nconst debug = buildDebug('verdaccio:api:publish');\n\nexport default function publish(\n router: Router,\n auth: IAuth,\n storage: Storage,\n config: Config\n): void {\n const can = allow(auth);\n\n /**\n * Publish a package / update package / un/start a package\n *\n * There are multiples scenarios here to be considered:\n *\n * 1. Publish scenario\n *\n * Publish a package consist of at least 1 step (PUT) with a metadata payload.\n * When a package is published, an _attachment property is present that contains the data\n * of the tarball.\n *\n * Example flow of publish.\n *\n * npm http fetch PUT 201 http://localhost:4873/@scope%2ftest1 9627ms\n npm info lifecycle @scope/test1@1.0.1~publish: @scope/test1@1.0.1\n npm info lifecycle @scope/test1@1.0.1~postpublish: @scope/test1@1.0.1\n + @scope/test1@1.0.1\n npm verb exit [ 0, true ]\n *\n *\n * 2. Unpublish scenario\n *\n * Unpublish consist in 3 steps.\n * 1. Try to fetch metadata -> if it fails, return 404\n * 2. Compute metadata locally (client side) and send a mutate payload excluding the version to\n * be unpublished\n * eg: if metadata reflects 1.0.1, 1.0.2 and 1.0.3, the computed metadata won't include 1.0.3.\n * 3. Once the second step has been successfully finished, delete the tarball.\n *\n * All these steps are consecutive and required, there is no transacions here, if step 3 fails,\n * metadata might get corrupted.\n *\n * Note the unpublish call will suffix in the url a /-rev/14-5d500cfce92f90fd revision number,\n * this not\n * used internally.\n *\n *\n * Example flow of unpublish.\n *\n * npm http fetch GET 200 http://localhost:4873/@scope%2ftest1?write=true 1680ms\n * npm http fetch PUT 201 http://localhost:4873/@scope%2ftest1/-rev/14-5d500cfce92f90fd\n * 956606ms attempt #2\n * npm http fetch GET 200 http://localhost:4873/@scope%2ftest1?write=true 1601ms\n * npm http fetch DELETE 201 http://localhost:4873/@scope%2ftest1/-/test1-1.0.3.tgz/-rev/16\n * -e11c8db282b2d992 19ms\n *\n * 3. Star a package\n *\n * Permissions: start a package depends of the publish and unpublish permissions, there is no\n * specific flag for star or un start.\n * The URL for star is similar to the unpublish (change package format)\n *\n * npm has no enpoint for star a package, rather mutate the metadata and acts as, the difference\n * is the users property which is part of the payload and the body only includes\n *\n * {\n\t\t \"_id\": pkgName,\n\t \t\"_rev\": \"3-b0cdaefc9bdb77c8\",\n\t\t \"users\": {\n\t\t [username]: boolean value (true, false)\n\t\t }\n\t}\n *\n */\n router.put(\n '/:package/:_rev?/:revision?',\n can('publish'),\n media(mime.getType('json')),\n expectJson,\n publishPackage(storage, config, auth)\n );\n\n /**\n * Un-publishing an entire package.\n *\n * This scenario happens when the first call detect there is only one version remaining\n * in the metadata, then the client decides to DELETE the resource\n * npm http fetch GET 304 http://localhost:4873/@scope%2ftest1?write=true 1076ms (from cache)\n npm http fetch DELETE 201 http://localhost:4873/@scope%2ftest1/-rev/18-d8ebe3020bd4ac9c 22ms\n */\n router.delete('/:package/-rev/*', can('unpublish'), unPublishPackage(storage));\n\n // removing a tarball\n router.delete(\n '/:package/-/:filename/-rev/:revision',\n can('unpublish'),\n can('publish'),\n removeTarball(storage)\n );\n\n // uploading package tarball\n router.put(\n '/:package/-/:filename/*',\n can('publish'),\n media(HEADERS.OCTET_STREAM),\n uploadPackageTarball(storage)\n );\n\n // adding a version\n router.put(\n '/:package/:version/-tag/:tag',\n can('publish'),\n media(mime.getType('json')),\n expectJson,\n addVersion(storage)\n );\n}\n\n/**\n * Publish a package\n */\nexport function publishPackage(storage: Storage, config: Config, auth: IAuth): any {\n const starApi = star(storage);\n return function (req: $RequestExtend, res: $ResponseExtend, next: $NextFunctionVer): void {\n const packageName = req.params.package;\n\n debug('publishing or updating a new version for %o', packageName);\n\n /**\n * Write tarball of stream data from package clients.\n */\n const createTarball = function (filename: string, data, cb: Callback): void {\n const stream = storage.addTarball(packageName, filename);\n stream.on('error', function (err) {\n debug(\n 'error on stream a tarball %o for %o with error %o',\n filename,\n packageName,\n err.message\n );\n cb(err);\n });\n stream.on('success', function () {\n debug('success on stream a tarball %o for %o', filename, packageName);\n cb();\n });\n // this is dumb and memory-consuming, but what choices do we have?\n // flow: we need first refactor this file before decides which type use here\n stream.end(Buffer.from(data.data, 'base64'));\n stream.done();\n };\n\n /**\n * Add new package version in storage\n */\n const createVersion = function (version: string, metadata: Version, cb: CallbackAction): void {\n debug('add a new package version %o to storage %o', version, metadata);\n storage.addVersion(packageName, version, metadata, null, cb);\n };\n\n /**\n * Add new tags in storage\n */\n const addTags = function (tags: MergeTags, cb: CallbackAction): void {\n debug('add new tag %o to storage', packageName);\n storage.mergeTags(packageName, tags, cb);\n };\n\n const afterChange = function (error, okMessage, metadata: Package): void {\n const metadataCopy: Package = { ...metadata };\n debug('after change metadata %o', metadata);\n\n const { _attachments, versions } = metadataCopy;\n\n // `npm star` wouldn't have attachments\n // and `npm deprecate` would have attachments as a empty object, i.e {}\n if (_.isNil(_attachments) || JSON.stringify(_attachments) === '{}') {\n debug('no attachments detected');\n if (error) {\n debug('no_attachments: after change error with %o', error.message);\n return next(error);\n }\n\n debug('no_attachments: after change success');\n res.status(HTTP_STATUS.CREATED);\n return next({\n ok: okMessage,\n success: true,\n });\n }\n\n /**\n * npm-registry-client 0.3+ embeds tarball into the json upload\n * issue https://github.com/rlidwka/sinopia/issues/31, dealing with it here:\n */\n\n const isInvalidBodyFormat =\n isObject(_attachments) === false ||\n hasDiffOneKey(_attachments) ||\n isObject(versions) === false ||\n hasDiffOneKey(versions);\n\n if (isInvalidBodyFormat) {\n // npm is doing something strange again\n // if this happens in normal circumstances, report it as a bug\n debug('invalid body format');\n logger.info({ packageName }, `wrong package format on publish a package @{packageName}`);\n return next(errorUtils.getBadRequest(API_ERROR.UNSUPORTED_REGISTRY_CALL));\n }\n\n if (error && error.status !== HTTP_STATUS.CONFLICT) {\n debug('error on change or update a package with %o', error.message);\n return next(error);\n }\n\n // at this point document is either created or existed before\n const [firstAttachmentKey] = Object.keys(_attachments);\n\n createTarball(\n Path.basename(firstAttachmentKey),\n _attachments[firstAttachmentKey],\n function (error) {\n debug('creating a tarball %o', firstAttachmentKey);\n if (error) {\n debug('error on create a tarball for %o with error %o', packageName, error.message);\n return next(error);\n }\n\n const versionToPublish = Object.keys(versions)[0];\n\n versions[versionToPublish].readme =\n _.isNil(metadataCopy.readme) === false ? String(metadataCopy.readme) : '';\n\n createVersion(versionToPublish, versions[versionToPublish], function (error) {\n if (error) {\n debug('error on create a version for %o with error %o', packageName, error.message);\n return next(error);\n }\n\n addTags(metadataCopy[DIST_TAGS], async function (error) {\n if (error) {\n debug('error on create a tag for %o with error %o', packageName, error.message);\n return next(error);\n }\n\n try {\n await notify(\n metadataCopy,\n config,\n req.remote_user,\n `${metadataCopy.name}@${versionToPublish}`\n );\n } catch (error: any) {\n debug(\n 'error on notify add a new tag %o',\n `${metadataCopy.name}@${versionToPublish}`\n );\n logger.error({ error }, 'notify batch service has failed: @{error}');\n }\n\n debug('add a tag succesfully for %o', `${metadataCopy.name}@${versionToPublish}`);\n res.status(HTTP_STATUS.CREATED);\n return next({ ok: okMessage, success: true });\n });\n });\n }\n );\n };\n\n if (isPublishablePackage(req.body) === false && isObject(req.body.users)) {\n debug('starting star a package');\n return starApi(req, res, next);\n }\n\n try {\n debug('pre validation metadata to publish %o', req.body);\n const metadata = validateMetadata(req.body, packageName);\n debug('post validation metadata to publish %o', metadata);\n // treating deprecation as updating a package\n if (req.params._rev || isRelatedToDeprecation(req.body)) {\n debug('updating a new version for %o', packageName);\n // we check unpublish permissions, an update is basically remove versions\n const remote = req.remote_user;\n auth.allow_unpublish({ packageName }, remote, (error) => {\n debug('allowed to unpublish a package %o', packageName);\n if (error) {\n debug('not allowed to unpublish a version for %o', packageName);\n return next(error);\n }\n\n debug('update a package');\n storage.changePackage(packageName, metadata, req.params.revision, function (error) {\n afterChange(error, API_MESSAGE.PKG_CHANGED, metadata);\n });\n });\n } else {\n debug('adding a new version for the package %o', packageName);\n storage.addPackage(packageName, metadata, function (error) {\n debug('package metadata updated %o', metadata);\n afterChange(error, API_MESSAGE.PKG_CREATED, metadata);\n });\n }\n } catch (error: any) {\n debug('error on publish, bad package format %o', packageName);\n logger.error({ packageName }, 'error on publish, bad package data for @{packageName}');\n return next(errorUtils.getBadData(API_ERROR.BAD_PACKAGE_DATA));\n }\n };\n}\n\n/**\n * un-publish a package\n */\nexport function unPublishPackage(storage: Storage) {\n return async function (req: $RequestExtend, res: $ResponseExtend, next: $NextFunctionVer) {\n const packageName = req.params.package;\n\n logger.debug({ packageName }, `unpublishing @{packageName}`);\n try {\n await storage.removePackage(packageName);\n } catch (err) {\n if (err) {\n return next(err);\n }\n }\n res.status(HTTP_STATUS.CREATED);\n return next({ ok: API_MESSAGE.PKG_REMOVED });\n };\n}\n\n/**\n * Delete tarball\n */\nexport function removeTarball(storage: Storage) {\n return function (req: $RequestExtend, res: $ResponseExtend, next: $NextFunctionVer): void {\n const packageName = req.params.package;\n const { filename, revision } = req.params;\n\n logger.debug(\n { packageName, filename, revision },\n `removing a tarball for @{packageName}-@{tarballName}-@{revision}`\n );\n storage.removeTarball(packageName, filename, revision, function (err) {\n if (err) {\n return next(err);\n }\n res.status(HTTP_STATUS.CREATED);\n\n logger.debug(\n { packageName, filename, revision },\n `success remove tarball for @{packageName}-@{tarballName}-@{revision}`\n );\n return next({ ok: API_MESSAGE.TARBALL_REMOVED });\n });\n };\n}\n/**\n * Adds a new version\n */\nexport function addVersion(storage: Storage) {\n return function (req: $RequestExtend, res: $ResponseExtend, next: $NextFunctionVer): void {\n const { version, tag } = req.params;\n const packageName = req.params.package;\n debug('add a new version %o and tag %o for %o', version, tag, packageName);\n\n storage.addVersion(packageName, version, req.body, tag, function (error) {\n if (error) {\n debug('error on add new version');\n return next(error);\n }\n\n debug('success on add new version');\n res.status(HTTP_STATUS.CREATED);\n return next({\n ok: API_MESSAGE.PKG_PUBLISHED,\n });\n });\n };\n}\n\n/**\n * uploadPackageTarball\n */\nexport function uploadPackageTarball(storage: Storage) {\n return function (req: $RequestExtend, res: $ResponseExtend, next: $NextFunctionVer): void {\n const packageName = req.params.package;\n const stream = storage.addTarball(packageName, req.params.filename);\n req.pipe(stream);\n\n // checking if end event came before closing\n let complete = false;\n req.on('end', function () {\n complete = true;\n stream.done();\n });\n\n req.on('close', function () {\n if (!complete) {\n stream.abort();\n }\n });\n\n stream.on('error', function (err) {\n return res.locals.report_error(err);\n });\n\n stream.on('success', function () {\n res.status(HTTP_STATUS.CREATED);\n return next({\n ok: API_MESSAGE.TARBALL_UPLOADED,\n });\n });\n };\n}\n"],"file":"publish.js"}
|
|
1
|
+
{"version":3,"file":"publish.js","names":["debug","buildDebug","publish","router","auth","storage","can","allow","put","media","mime","getType","expectJson","publishPackageNext","delete","req","res","next","packageName","params","package","rev","revision","logger","removePackage","status","HTTP_STATUS","CREATED","ok","API_MESSAGE","PKG_REMOVED","err","filename","removeTarball","TARBALL_REMOVED","_res","ac","AbortController","metadata","body","updateManifest","name","signal","requestOptions","host","hostname","protocol","headers","PKG_CREATED","success","abort"],"sources":["../src/publish.ts"],"sourcesContent":["import buildDebug from 'debug';\nimport { Router } from 'express';\nimport mime from 'mime';\n\nimport { IAuth } from '@verdaccio/auth';\nimport { API_MESSAGE, HTTP_STATUS } from '@verdaccio/core';\nimport { logger } from '@verdaccio/logger';\nimport { allow, expectJson, media } from '@verdaccio/middleware';\nimport { Storage } from '@verdaccio/store';\n\nimport { $NextFunctionVer, $RequestExtend, $ResponseExtend } from '../types/custom';\n\n// import star from './star';\n// import { isPublishablePackage, isRelatedToDeprecation } from './utils';\n\nconst debug = buildDebug('verdaccio:api:publish');\n\n/**\n * Publish a package / update package / un/start a package\n *\n * There are multiples scenarios here to be considered:\n *\n * 1. Publish scenario\n *\n * Publish a package consist of at least 1 step (PUT) with a metadata payload.\n * When a package is published, an _attachment property is present that contains the data\n * of the tarball.\n *\n * Example flow of publish.\n *\n * npm http fetch PUT 201 http://localhost:4873/@scope%2ftest1 9627ms\n npm info lifecycle @scope/test1@1.0.1~publish: @scope/test1@1.0.1\n npm info lifecycle @scope/test1@1.0.1~postpublish: @scope/test1@1.0.1\n + @scope/test1@1.0.1\n npm verb exit [ 0, true ]\n *\n *\n * 2. Unpublish scenario\n *\n * Unpublish consist in 3 steps.\n * 1. Try to fetch metadata -> if it fails, return 404\n * 2. Compute metadata locally (client side) and send a mutate payload excluding the version to\n * be unpublished\n * eg: if metadata reflects 1.0.1, 1.0.2 and 1.0.3, the computed metadata won't include 1.0.3.\n * 3. Once the second step has been successfully finished, delete the tarball.\n *\n * All these steps are consecutive and required, there is no transacions here, if step 3 fails,\n * metadata might get corrupted.\n *\n * Note the unpublish call will suffix in the url a /-rev/14-5d500cfce92f90fd revision number,\n * this not\n * used internally.\n *\n *\n * Example flow of unpublish.\n *\n * There are two possible flows:\n *\n * - Remove all packages (entirely)\n * eg: npm unpublish package-name@* --force\n * eg: npm unpublish package-name --force\n *\n * npm http fetch GET 200 http://localhost:4873/custom-name?write=true 1680ms\n * npm http fetch DELETE 201 http://localhost:4873/custom-name/-/test1-1.0.3.tgz/-rev/16-e11c8db282b2d992 19ms\n *\n * - Remove a specific version\n * eg: npm unpublish package-name@1.0.0 --force\n *\n * Get fresh manifest\n * npm http fetch GET 200 http://localhost:4873/custom-name?write=true 1680ms\n * Update manifest without the version to be unpublished\n * npm http fetch PUT 201 http://localhost:4873/custom-name/-rev/14-5d500cfce92f90fd 956606ms\n * Get fresh manifest (revision should be different)\n * npm http fetch GET 200 http://localhost:4873/custom-name?write=true 1601ms\n * Remove the tarball\n * npm http fetch DELETE 201 http://localhost:4873/custom-name/-/test1-1.0.3.tgz/-rev/16-e11c8db282b2d992 19ms\n * \n * 3. Star a package\n *\n * Permissions: start a package depends of the publish and unpublish permissions, there is no\n * specific flag for star or un start.\n * The URL for star is similar to the unpublish (change package format)\n *\n * npm has no enpoint for star a package, rather mutate the metadata and acts as, the difference\n * is the users property which is part of the payload and the body only includes\n *\n * {\n\t\t \"_id\": pkgName,\n\t \t\"_rev\": \"3-b0cdaefc9bdb77c8\",\n\t\t \"users\": {\n\t\t [username]: boolean value (true, false)\n\t\t }\n\t}\n *\n */\nexport default function publish(router: Router, auth: IAuth, storage: Storage): void {\n const can = allow(auth);\n // publish (update manifest) v6\n router.put(\n '/:package',\n can('publish'),\n media(mime.getType('json')),\n expectJson,\n publishPackageNext(storage)\n );\n\n // unpublish a pacakge v6\n router.put(\n '/:package/-rev/:revision',\n can('unpublish'),\n media(mime.getType('json')),\n expectJson,\n publishPackageNext(storage)\n );\n\n /**\n * Un-publishing an entire package.\n *\n * This scenario happens when the first call detect there is only one version remaining\n * in the metadata, then the client decides to DELETE the resource\n * npm http fetch GET 304 http://localhost:4873/package-name?write=true 1076ms (from cache)\n * npm http fetch DELETE 201 http://localhost:4873/package-name/-rev/18-d8ebe3020bd4ac9c 22ms\n */\n // v6\n router.delete(\n '/:package/-rev/:revision',\n can('unpublish'),\n async function (req: $RequestExtend, res: $ResponseExtend, next: $NextFunctionVer) {\n const packageName = req.params.package;\n const rev = req.params.revision;\n\n logger.debug({ packageName }, `unpublishing @{packageName}`);\n try {\n await storage.removePackage(packageName, rev);\n debug('package %s unpublished', packageName);\n res.status(HTTP_STATUS.CREATED);\n return next({ ok: API_MESSAGE.PKG_REMOVED });\n } catch (err) {\n return next(err);\n }\n }\n );\n\n /*\n Remove a tarball, this happens when npm unpublish a package unique version.\n npm http fetch DELETE 201 http://localhost:4873/package-name/-rev/18-d8ebe3020bd4ac9c 22ms\n */\n router.delete(\n '/:package/-/:filename/-rev/:revision',\n can('unpublish'),\n can('publish'),\n async function (\n req: $RequestExtend,\n res: $ResponseExtend,\n next: $NextFunctionVer\n ): Promise<void> {\n const packageName = req.params.package;\n const { filename, revision } = req.params;\n\n logger.debug(\n { packageName, filename, revision },\n `removing a tarball for @{packageName}-@{tarballName}-@{revision}`\n );\n try {\n await storage.removeTarball(packageName, filename, revision);\n res.status(HTTP_STATUS.CREATED);\n\n logger.debug(\n { packageName, filename, revision },\n `success remove tarball for @{packageName}-@{tarballName}-@{revision}`\n );\n return next({ ok: API_MESSAGE.TARBALL_REMOVED });\n } catch (err) {\n return next(err);\n }\n }\n );\n}\n\nexport function publishPackageNext(storage: Storage): any {\n return async function (\n req: $RequestExtend,\n _res: $ResponseExtend,\n next: $NextFunctionVer\n ): Promise<void> {\n const ac = new AbortController();\n const packageName = req.params.package;\n const { revision } = req.params;\n const metadata = req.body;\n\n try {\n debug('publishing %s', packageName);\n await storage.updateManifest(metadata, {\n name: packageName,\n revision,\n signal: ac.signal,\n requestOptions: {\n host: req.hostname,\n protocol: req.protocol,\n // @ts-ignore\n headers: req.headers,\n },\n });\n _res.status(HTTP_STATUS.CREATED);\n\n return next({\n // TODO: this could be also Package Updated based on the\n // action, deprecate, star, publish new version, or create a package\n // the mssage some return from the method\n ok: API_MESSAGE.PKG_CREATED,\n success: true,\n });\n } catch (err: any) {\n // TODO: review if we need the abort controller here\n ac.abort();\n next(err);\n }\n };\n}\n"],"mappings":";;;;;;;;AAAA;;AAEA;;AAGA;;AACA;;AACA;;;;AAKA;AACA;AAEA,MAAMA,KAAK,GAAG,IAAAC,cAAA,EAAW,uBAAX,CAAd;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACe,SAASC,OAAT,CAAiBC,MAAjB,EAAiCC,IAAjC,EAA8CC,OAA9C,EAAsE;EACnF,MAAMC,GAAG,GAAG,IAAAC,iBAAA,EAAMH,IAAN,CAAZ,CADmF,CAEnF;;EACAD,MAAM,CAACK,GAAP,CACE,WADF,EAEEF,GAAG,CAAC,SAAD,CAFL,EAGE,IAAAG,iBAAA,EAAMC,aAAA,CAAKC,OAAL,CAAa,MAAb,CAAN,CAHF,EAIEC,sBAJF,EAKEC,kBAAkB,CAACR,OAAD,CALpB,EAHmF,CAWnF;;EACAF,MAAM,CAACK,GAAP,CACE,0BADF,EAEEF,GAAG,CAAC,WAAD,CAFL,EAGE,IAAAG,iBAAA,EAAMC,aAAA,CAAKC,OAAL,CAAa,MAAb,CAAN,CAHF,EAIEC,sBAJF,EAKEC,kBAAkB,CAACR,OAAD,CALpB;EAQA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACE;;EACAF,MAAM,CAACW,MAAP,CACE,0BADF,EAEER,GAAG,CAAC,WAAD,CAFL,EAGE,gBAAgBS,GAAhB,EAAqCC,GAArC,EAA2DC,IAA3D,EAAmF;IACjF,MAAMC,WAAW,GAAGH,GAAG,CAACI,MAAJ,CAAWC,OAA/B;IACA,MAAMC,GAAG,GAAGN,GAAG,CAACI,MAAJ,CAAWG,QAAvB;;IAEAC,cAAA,CAAOvB,KAAP,CAAa;MAAEkB;IAAF,CAAb,EAA+B,6BAA/B;;IACA,IAAI;MACF,MAAMb,OAAO,CAACmB,aAAR,CAAsBN,WAAtB,EAAmCG,GAAnC,CAAN;MACArB,KAAK,CAAC,wBAAD,EAA2BkB,WAA3B,CAAL;MACAF,GAAG,CAACS,MAAJ,CAAWC,iBAAA,CAAYC,OAAvB;MACA,OAAOV,IAAI,CAAC;QAAEW,EAAE,EAAEC,iBAAA,CAAYC;MAAlB,CAAD,CAAX;IACD,CALD,CAKE,OAAOC,GAAP,EAAY;MACZ,OAAOd,IAAI,CAACc,GAAD,CAAX;IACD;EACF,CAhBH;EAmBA;AACF;AACA;AACA;;EACE5B,MAAM,CAACW,MAAP,CACE,sCADF,EAEER,GAAG,CAAC,WAAD,CAFL,EAGEA,GAAG,CAAC,SAAD,CAHL,EAIE,gBACES,GADF,EAEEC,GAFF,EAGEC,IAHF,EAIiB;IACf,MAAMC,WAAW,GAAGH,GAAG,CAACI,MAAJ,CAAWC,OAA/B;IACA,MAAM;MAAEY,QAAF;MAAYV;IAAZ,IAAyBP,GAAG,CAACI,MAAnC;;IAEAI,cAAA,CAAOvB,KAAP,CACE;MAAEkB,WAAF;MAAec,QAAf;MAAyBV;IAAzB,CADF,EAEG,kEAFH;;IAIA,IAAI;MACF,MAAMjB,OAAO,CAAC4B,aAAR,CAAsBf,WAAtB,EAAmCc,QAAnC,EAA6CV,QAA7C,CAAN;MACAN,GAAG,CAACS,MAAJ,CAAWC,iBAAA,CAAYC,OAAvB;;MAEAJ,cAAA,CAAOvB,KAAP,CACE;QAAEkB,WAAF;QAAec,QAAf;QAAyBV;MAAzB,CADF,EAEG,sEAFH;;MAIA,OAAOL,IAAI,CAAC;QAAEW,EAAE,EAAEC,iBAAA,CAAYK;MAAlB,CAAD,CAAX;IACD,CATD,CASE,OAAOH,GAAP,EAAY;MACZ,OAAOd,IAAI,CAACc,GAAD,CAAX;IACD;EACF,CA5BH;AA8BD;;AAEM,SAASlB,kBAAT,CAA4BR,OAA5B,EAAmD;EACxD,OAAO,gBACLU,GADK,EAELoB,IAFK,EAGLlB,IAHK,EAIU;IACf,MAAMmB,EAAE,GAAG,IAAIC,eAAJ,EAAX;IACA,MAAMnB,WAAW,GAAGH,GAAG,CAACI,MAAJ,CAAWC,OAA/B;IACA,MAAM;MAAEE;IAAF,IAAeP,GAAG,CAACI,MAAzB;IACA,MAAMmB,QAAQ,GAAGvB,GAAG,CAACwB,IAArB;;IAEA,IAAI;MACFvC,KAAK,CAAC,eAAD,EAAkBkB,WAAlB,CAAL;MACA,MAAMb,OAAO,CAACmC,cAAR,CAAuBF,QAAvB,EAAiC;QACrCG,IAAI,EAAEvB,WAD+B;QAErCI,QAFqC;QAGrCoB,MAAM,EAAEN,EAAE,CAACM,MAH0B;QAIrCC,cAAc,EAAE;UACdC,IAAI,EAAE7B,GAAG,CAAC8B,QADI;UAEdC,QAAQ,EAAE/B,GAAG,CAAC+B,QAFA;UAGd;UACAC,OAAO,EAAEhC,GAAG,CAACgC;QAJC;MAJqB,CAAjC,CAAN;;MAWAZ,IAAI,CAACV,MAAL,CAAYC,iBAAA,CAAYC,OAAxB;;MAEA,OAAOV,IAAI,CAAC;QACV;QACA;QACA;QACAW,EAAE,EAAEC,iBAAA,CAAYmB,WAJN;QAKVC,OAAO,EAAE;MALC,CAAD,CAAX;IAOD,CAtBD,CAsBE,OAAOlB,GAAP,EAAiB;MACjB;MACAK,EAAE,CAACc,KAAH;MACAjC,IAAI,CAACc,GAAD,CAAJ;IACD;EACF,CArCD;AAsCD"}
|
package/build/search.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"search.js","names":["route","get","_req","res","logger","warn","status","HTTP_STATUS","NOT_FOUND","json","error"],"sources":["../src/search.ts"],"sourcesContent":["import { HTTP_STATUS } from '@verdaccio/core';\nimport { logger } from '@verdaccio/logger';\n\nexport default function (route): void {\n // TODO: next major version, remove this\n route.get('/-/all(/since)?', function (_req, res) {\n logger.warn('search endpoint has been removed, please use search v1');\n res.status(HTTP_STATUS.NOT_FOUND);\n res.json({ error: 'not found, endpoint was removed' });\n });\n}\n"],"mappings":";;;;;;;AAAA;;AACA;;AAEe,kBAAUA,KAAV,EAAuB;EACpC;EACAA,KAAK,CAACC,GAAN,CAAU,iBAAV,EAA6B,UAAUC,IAAV,EAAgBC,GAAhB,EAAqB;IAChDC,cAAA,CAAOC,IAAP,CAAY,wDAAZ;;IACAF,GAAG,CAACG,MAAJ,CAAWC,iBAAA,CAAYC,SAAvB;IACAL,GAAG,CAACM,IAAJ,CAAS;MAAEC,KAAK,EAAE;IAAT,CAAT;EACD,CAJD;AAKD"}
|