@verdaccio/canary 6.3.2-canary.404363f
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/LICENSE +21 -0
- package/README.md +38 -0
- package/bin/verdaccio +3 -0
- package/bin/verdaccio-canary +3 -0
- package/build/api/debug/index.js +28 -0
- package/build/api/endpoint/api/dist-tags.js +77 -0
- package/build/api/endpoint/api/package.js +103 -0
- package/build/api/endpoint/api/ping.js +13 -0
- package/build/api/endpoint/api/publish.js +359 -0
- package/build/api/endpoint/api/search.js +107 -0
- package/build/api/endpoint/api/star.js +73 -0
- package/build/api/endpoint/api/stars.js +42 -0
- package/build/api/endpoint/api/user.js +84 -0
- package/build/api/endpoint/api/v1/profile.js +69 -0
- package/build/api/endpoint/api/v1/search.js +181 -0
- package/build/api/endpoint/api/v1/token.js +140 -0
- package/build/api/endpoint/api/whoami.js +15 -0
- package/build/api/endpoint/index.js +58 -0
- package/build/api/index.js +105 -0
- package/build/api/middleware.js +56 -0
- package/build/api/web/api/index.js +31 -0
- package/build/api/web/api/package.js +165 -0
- package/build/api/web/api/search.js +53 -0
- package/build/api/web/api/user.js +70 -0
- package/build/api/web/api/utils.js +14 -0
- package/build/api/web/html/favicon.ico +0 -0
- package/build/api/web/index.js +96 -0
- package/build/index.js +76 -0
- package/build/lib/auth-utils.js +16 -0
- package/build/lib/bootstrap.js +167 -0
- package/build/lib/cli/cli.js +26 -0
- package/build/lib/cli/commands/info.js +26 -0
- package/build/lib/cli/commands/init.js +78 -0
- package/build/lib/cli/commands/version.js +17 -0
- package/build/lib/cli/utils.js +14 -0
- package/build/lib/cli.js +16 -0
- package/build/lib/config.js +22 -0
- package/build/lib/constants.js +121 -0
- package/build/lib/experiments.js +29 -0
- package/build/lib/local-storage.js +760 -0
- package/build/lib/logger/index.js +21 -0
- package/build/lib/metadata-utils.js +39 -0
- package/build/lib/run-server.js +122 -0
- package/build/lib/storage-utils.js +282 -0
- package/build/lib/storage.js +676 -0
- package/build/lib/up-storage.js +605 -0
- package/build/lib/uplink-util.js +36 -0
- package/build/lib/utils.js +265 -0
- package/conf/.gitkeep +0 -0
- package/index.js +1 -0
- package/package.json +156 -0
- package/security.txt +5 -0
- package/systemd/verdaccio.service +11 -0
|
@@ -0,0 +1,359 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.addVersion = addVersion;
|
|
7
|
+
exports.default = publish;
|
|
8
|
+
exports.publishPackage = publishPackage;
|
|
9
|
+
exports.removeTarball = removeTarball;
|
|
10
|
+
exports.unPublishPackage = unPublishPackage;
|
|
11
|
+
exports.uploadPackageTarball = uploadPackageTarball;
|
|
12
|
+
var _debug = _interopRequireDefault(require("debug"));
|
|
13
|
+
var _lodash = _interopRequireDefault(require("lodash"));
|
|
14
|
+
var _mime = _interopRequireDefault(require("mime"));
|
|
15
|
+
var _path = _interopRequireDefault(require("path"));
|
|
16
|
+
var _core = require("@verdaccio/core");
|
|
17
|
+
var _hooks = require("@verdaccio/hooks");
|
|
18
|
+
var _middleware = require("@verdaccio/middleware");
|
|
19
|
+
var _constants = require("../../../lib/constants");
|
|
20
|
+
var _logger = require("../../../lib/logger");
|
|
21
|
+
var _storageUtils = require("../../../lib/storage-utils");
|
|
22
|
+
var _utils = require("../../../lib/utils");
|
|
23
|
+
var _star = _interopRequireDefault(require("./star"));
|
|
24
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
25
|
+
const debug = (0, _debug.default)('verdaccio:publish');
|
|
26
|
+
function publish(router, auth, storage, config) {
|
|
27
|
+
const can = (0, _middleware.allow)(auth, {
|
|
28
|
+
beforeAll: (params, message) => _logger.logger.trace(params, message),
|
|
29
|
+
afterAll: (params, message) => _logger.logger.trace(params, message)
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Publish a package / update package / un/start a package
|
|
34
|
+
*
|
|
35
|
+
* There are multiples scenarios here to be considered:
|
|
36
|
+
*
|
|
37
|
+
* 1. Publish scenario
|
|
38
|
+
*
|
|
39
|
+
* Publish a package consist of at least 1 step (PUT) with a metadata payload.
|
|
40
|
+
* When a package is published, an _attachment property is present that contains the data
|
|
41
|
+
* of the tarball.
|
|
42
|
+
*
|
|
43
|
+
* Example flow of publish.
|
|
44
|
+
*
|
|
45
|
+
* npm http fetch PUT 201 http://localhost:4873/@scope%2ftest1 9627ms
|
|
46
|
+
npm info lifecycle @scope/test1@1.0.1~publish: @scope/test1@1.0.1
|
|
47
|
+
npm info lifecycle @scope/test1@1.0.1~postpublish: @scope/test1@1.0.1
|
|
48
|
+
+ @scope/test1@1.0.1
|
|
49
|
+
npm verb exit [ 0, true ]
|
|
50
|
+
*
|
|
51
|
+
*
|
|
52
|
+
* 2. Unpublish scenario
|
|
53
|
+
*
|
|
54
|
+
* Unpublish consist in 3 steps.
|
|
55
|
+
* 1. Try to fetch metadata -> if it fails, return 404
|
|
56
|
+
* 2. Compute metadata locally (client side) and send a mutate payload excluding the version to be unpublished
|
|
57
|
+
* eg: if metadata reflects 1.0.1, 1.0.2 and 1.0.3, the computed metadata won't include 1.0.3.
|
|
58
|
+
* 3. Once the second step has been successfully finished, delete the tarball.
|
|
59
|
+
*
|
|
60
|
+
* All these steps are consecutive and required, there is no transacions here, if step 3 fails, metadata might
|
|
61
|
+
* get corrupted.
|
|
62
|
+
*
|
|
63
|
+
* Note the unpublish call will suffix in the url a /-rev/14-5d500cfce92f90fd revision number, this not
|
|
64
|
+
* used internally.
|
|
65
|
+
*
|
|
66
|
+
*
|
|
67
|
+
* Example flow of unpublish.
|
|
68
|
+
*
|
|
69
|
+
* npm http fetch GET 200 http://localhost:4873/@scope%2ftest1?write=true 1680ms
|
|
70
|
+
npm http fetch PUT 201 http://localhost:4873/@scope%2ftest1/-rev/14-5d500cfce92f90fd 956606ms attempt #2
|
|
71
|
+
npm http fetch GET 200 http://localhost:4873/@scope%2ftest1?write=true 1601ms
|
|
72
|
+
npm http fetch DELETE 201 http://localhost:4873/@scope%2ftest1/-/test1-1.0.3.tgz/-rev/16-e11c8db282b2d992 19ms
|
|
73
|
+
*
|
|
74
|
+
* 3. Star a package
|
|
75
|
+
*
|
|
76
|
+
* Permissions: start a package depends of the publish and unpublish permissions, there is no specific flag for star or un start.
|
|
77
|
+
* The URL for star is similar to the unpublish (change package format)
|
|
78
|
+
*
|
|
79
|
+
* npm has no enpoint for star a package, rather mutate the metadata and acts as, the difference is the
|
|
80
|
+
* users property which is part of the payload and the body only includes
|
|
81
|
+
*
|
|
82
|
+
* {
|
|
83
|
+
"_id": pkgName,
|
|
84
|
+
"_rev": "3-b0cdaefc9bdb77c8",
|
|
85
|
+
"users": {
|
|
86
|
+
[username]: boolean value (true, false)
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
*
|
|
90
|
+
*/
|
|
91
|
+
router.put('/:package/:_rev?/:revision?', can('publish'), (0, _middleware.media)(_mime.default.getType('json')), _middleware.expectJson, publishPackage(storage, config, auth));
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Un-publishing an entire package.
|
|
95
|
+
*
|
|
96
|
+
* This scenario happens when the first call detect there is only one version remaining
|
|
97
|
+
* in the metadata, then the client decides to DELETE the resource
|
|
98
|
+
* npm http fetch GET 304 http://localhost:4873/@scope%2ftest1?write=true 1076ms (from cache)
|
|
99
|
+
npm http fetch DELETE 201 http://localhost:4873/@scope%2ftest1/-rev/18-d8ebe3020bd4ac9c 22ms
|
|
100
|
+
*/
|
|
101
|
+
router.delete('/:package/-rev/*', can('unpublish'), unPublishPackage(storage));
|
|
102
|
+
|
|
103
|
+
// removing a tarball
|
|
104
|
+
router.delete('/:package/-/:filename/-rev/:revision', can('unpublish'), can('publish'), removeTarball(storage));
|
|
105
|
+
|
|
106
|
+
// uploading package tarball
|
|
107
|
+
router.put('/:package/-/:filename/*', can('publish'), (0, _middleware.media)(_constants.HEADERS.OCTET_STREAM), uploadPackageTarball(storage));
|
|
108
|
+
|
|
109
|
+
// only used for development
|
|
110
|
+
if (config._debug) {
|
|
111
|
+
// adding a version
|
|
112
|
+
router.put('/:package/:version/-tag/:tag', can('publish'), (0, _middleware.media)(_mime.default.getType('json')), _middleware.expectJson, addVersion(storage));
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Publish a package
|
|
118
|
+
*/
|
|
119
|
+
function publishPackage(storage, config, auth) {
|
|
120
|
+
const starApi = (0, _star.default)(storage);
|
|
121
|
+
return function (req, res, next) {
|
|
122
|
+
const packageName = req.params.package;
|
|
123
|
+
debug('publishing or updating a new version for %o', packageName);
|
|
124
|
+
/**
|
|
125
|
+
* Write tarball of stream data from package clients.
|
|
126
|
+
*/
|
|
127
|
+
const createTarball = function (filename, data, cb) {
|
|
128
|
+
const stream = storage.addTarball(packageName, filename);
|
|
129
|
+
stream.on('error', function (err) {
|
|
130
|
+
cb(err);
|
|
131
|
+
});
|
|
132
|
+
stream.on('success', function () {
|
|
133
|
+
cb();
|
|
134
|
+
});
|
|
135
|
+
// this is dumb and memory-consuming, but what choices do we have?
|
|
136
|
+
// flow: we need first refactor this file before decides which type use here
|
|
137
|
+
stream.end(Buffer.from(data.data, 'base64'));
|
|
138
|
+
stream.done();
|
|
139
|
+
};
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* Add new package version in storage
|
|
143
|
+
*/
|
|
144
|
+
const createVersion = function (version, metadata, cb) {
|
|
145
|
+
storage.addVersion(packageName, version, metadata, null, cb);
|
|
146
|
+
};
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* Add new tags in storage
|
|
150
|
+
*/
|
|
151
|
+
const addTags = function (tags, cb) {
|
|
152
|
+
storage.mergeTags(packageName, tags, cb);
|
|
153
|
+
};
|
|
154
|
+
const afterChange = function (error, okMessage, metadata) {
|
|
155
|
+
const metadataCopy = {
|
|
156
|
+
...metadata
|
|
157
|
+
};
|
|
158
|
+
const {
|
|
159
|
+
_attachments,
|
|
160
|
+
versions
|
|
161
|
+
} = metadataCopy;
|
|
162
|
+
|
|
163
|
+
// `npm star` wouldn't have attachments
|
|
164
|
+
// and `npm deprecate` would have attachments as a empty object, i.e {}
|
|
165
|
+
if (_lodash.default.isNil(_attachments) || JSON.stringify(_attachments) === '{}') {
|
|
166
|
+
if (error) {
|
|
167
|
+
return next(error);
|
|
168
|
+
}
|
|
169
|
+
res.status(_constants.HTTP_STATUS.CREATED);
|
|
170
|
+
return next({
|
|
171
|
+
ok: okMessage,
|
|
172
|
+
success: true
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
// npm-registry-client 0.3+ embeds tarball into the json upload
|
|
177
|
+
// https://github.com/isaacs/npm-registry-client/commit/e9fbeb8b67f249394f735c74ef11fe4720d46ca0
|
|
178
|
+
// issue https://github.com/rlidwka/sinopia/issues/31, dealing with it here:
|
|
179
|
+
const isInvalidBodyFormat = (0, _utils.isObject)(_attachments) === false || (0, _utils.hasDiffOneKey)(_attachments) || (0, _utils.isObject)(versions) === false || (0, _utils.hasDiffOneKey)(versions);
|
|
180
|
+
if (isInvalidBodyFormat) {
|
|
181
|
+
// npm is doing something strange again
|
|
182
|
+
// if this happens in normal circumstances, report it as a bug
|
|
183
|
+
_logger.logger.info({
|
|
184
|
+
packageName
|
|
185
|
+
}, `wrong package format on publish a package @{packageName}`);
|
|
186
|
+
return next(_utils.ErrorCode.getBadRequest(_constants.API_ERROR.UNSUPORTED_REGISTRY_CALL));
|
|
187
|
+
}
|
|
188
|
+
if (error && error.status !== _constants.HTTP_STATUS.CONFLICT) {
|
|
189
|
+
return next(error);
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
// at this point document is either created or existed before
|
|
193
|
+
const [firstAttachmentKey] = Object.keys(_attachments);
|
|
194
|
+
createTarball(_path.default.basename(firstAttachmentKey), _attachments[firstAttachmentKey], function (error) {
|
|
195
|
+
if (error) {
|
|
196
|
+
return next(error);
|
|
197
|
+
}
|
|
198
|
+
const versionToPublish = Object.keys(versions)[0];
|
|
199
|
+
const versionMetadataToPublish = versions[versionToPublish];
|
|
200
|
+
versionMetadataToPublish.readme = _lodash.default.isNil(versionMetadataToPublish.readme) === false ? String(versionMetadataToPublish.readme) : '';
|
|
201
|
+
createVersion(versionToPublish, versionMetadataToPublish, function (error) {
|
|
202
|
+
if (error) {
|
|
203
|
+
return next(error);
|
|
204
|
+
}
|
|
205
|
+
addTags(metadataCopy[_constants.DIST_TAGS], async function (error) {
|
|
206
|
+
if (error) {
|
|
207
|
+
return next(error);
|
|
208
|
+
}
|
|
209
|
+
try {
|
|
210
|
+
await (0, _hooks.notify)(metadataCopy, config, req.remote_user, `${metadataCopy.name}@${versionToPublish}`);
|
|
211
|
+
} catch (error) {
|
|
212
|
+
_logger.logger.error({
|
|
213
|
+
error
|
|
214
|
+
}, 'notify batch service has failed: @{error}');
|
|
215
|
+
}
|
|
216
|
+
res.status(_constants.HTTP_STATUS.CREATED);
|
|
217
|
+
return next({
|
|
218
|
+
ok: okMessage,
|
|
219
|
+
success: true
|
|
220
|
+
});
|
|
221
|
+
});
|
|
222
|
+
});
|
|
223
|
+
});
|
|
224
|
+
};
|
|
225
|
+
if ((0, _storageUtils.isPublishablePackage)(req.body) === false && (0, _utils.isObject)(req.body.users)) {
|
|
226
|
+
return starApi(req, res, next);
|
|
227
|
+
}
|
|
228
|
+
try {
|
|
229
|
+
const metadata = _core.validationUtils.normalizeMetadata(req.body, packageName);
|
|
230
|
+
// check _attachments to distinguish publish and deprecate
|
|
231
|
+
if (req.params._rev || (0, _utils.isRelatedToDeprecation)(req.body) && _lodash.default.isEmpty(req.body._attachments)) {
|
|
232
|
+
debug('updating a new version for %o', packageName);
|
|
233
|
+
// we check unpublish permissions, an update is basically remove versions
|
|
234
|
+
const remote = req.remote_user;
|
|
235
|
+
auth.allow_unpublish({
|
|
236
|
+
packageName
|
|
237
|
+
}, remote, error => {
|
|
238
|
+
if (error) {
|
|
239
|
+
_logger.logger.error({
|
|
240
|
+
packageName
|
|
241
|
+
}, `not allowed to unpublish a version for @{packageName}`);
|
|
242
|
+
return next(error);
|
|
243
|
+
}
|
|
244
|
+
storage.changePackage(packageName, metadata, req.params.revision, function (error) {
|
|
245
|
+
afterChange(error, _constants.API_MESSAGE.PKG_CHANGED, metadata);
|
|
246
|
+
});
|
|
247
|
+
});
|
|
248
|
+
} else {
|
|
249
|
+
debug('adding a new version for %o', packageName);
|
|
250
|
+
storage.addPackage(packageName, metadata, function (error) {
|
|
251
|
+
afterChange(error, _constants.API_MESSAGE.PKG_CREATED, metadata);
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
} catch (error) {
|
|
255
|
+
debug('error on publish: %s', error.message);
|
|
256
|
+
_logger.logger.error({
|
|
257
|
+
packageName
|
|
258
|
+
}, 'error on publish, bad package data for @{packageName}');
|
|
259
|
+
return next(_utils.ErrorCode.getBadData(_constants.API_ERROR.BAD_PACKAGE_DATA));
|
|
260
|
+
}
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
/**
|
|
265
|
+
* un-publish a package
|
|
266
|
+
*/
|
|
267
|
+
function unPublishPackage(storage) {
|
|
268
|
+
return function (req, res, next) {
|
|
269
|
+
const packageName = req.params.package;
|
|
270
|
+
debug('unpublishing %o', packageName);
|
|
271
|
+
storage.removePackage(packageName, function (err) {
|
|
272
|
+
if (err) {
|
|
273
|
+
return next(err);
|
|
274
|
+
}
|
|
275
|
+
res.status(_constants.HTTP_STATUS.CREATED);
|
|
276
|
+
return next({
|
|
277
|
+
ok: _constants.API_MESSAGE.PKG_REMOVED
|
|
278
|
+
});
|
|
279
|
+
});
|
|
280
|
+
};
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
/**
|
|
284
|
+
* Delete tarball
|
|
285
|
+
*/
|
|
286
|
+
function removeTarball(storage) {
|
|
287
|
+
return function (req, res, next) {
|
|
288
|
+
const packageName = req.params.package;
|
|
289
|
+
const {
|
|
290
|
+
filename,
|
|
291
|
+
revision
|
|
292
|
+
} = req.params;
|
|
293
|
+
debug('removing a tarball for %o-%o-%o', packageName, filename, revision);
|
|
294
|
+
storage.removeTarball(packageName, filename, revision, function (err) {
|
|
295
|
+
if (err) {
|
|
296
|
+
return next(err);
|
|
297
|
+
}
|
|
298
|
+
res.status(_constants.HTTP_STATUS.CREATED);
|
|
299
|
+
debug('success remove tarball for %o-%o-%o', packageName, filename, revision);
|
|
300
|
+
return next({
|
|
301
|
+
ok: _constants.API_MESSAGE.TARBALL_REMOVED
|
|
302
|
+
});
|
|
303
|
+
});
|
|
304
|
+
};
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* Adds a new version
|
|
308
|
+
*/
|
|
309
|
+
function addVersion(storage) {
|
|
310
|
+
return function (req, res, next) {
|
|
311
|
+
const {
|
|
312
|
+
version,
|
|
313
|
+
tag
|
|
314
|
+
} = req.params;
|
|
315
|
+
const packageName = req.params.package;
|
|
316
|
+
storage.addVersion(packageName, version, req.body, tag, function (error) {
|
|
317
|
+
if (error) {
|
|
318
|
+
return next(error);
|
|
319
|
+
}
|
|
320
|
+
res.status(_constants.HTTP_STATUS.CREATED);
|
|
321
|
+
return next({
|
|
322
|
+
ok: _constants.API_MESSAGE.PKG_PUBLISHED
|
|
323
|
+
});
|
|
324
|
+
});
|
|
325
|
+
};
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
/**
|
|
329
|
+
* uploadPackageTarball
|
|
330
|
+
*/
|
|
331
|
+
function uploadPackageTarball(storage) {
|
|
332
|
+
return function (req, res, next) {
|
|
333
|
+
const packageName = req.params.package;
|
|
334
|
+
const stream = storage.addTarball(packageName, req.params.filename);
|
|
335
|
+
req.pipe(stream);
|
|
336
|
+
|
|
337
|
+
// checking if end event came before closing
|
|
338
|
+
let complete = false;
|
|
339
|
+
req.on('end', function () {
|
|
340
|
+
complete = true;
|
|
341
|
+
stream.done();
|
|
342
|
+
});
|
|
343
|
+
req.on('close', function () {
|
|
344
|
+
if (!complete) {
|
|
345
|
+
stream.abort();
|
|
346
|
+
}
|
|
347
|
+
});
|
|
348
|
+
stream.on('error', function (err) {
|
|
349
|
+
return res.locals.report_error(err);
|
|
350
|
+
});
|
|
351
|
+
stream.on('success', function () {
|
|
352
|
+
res.status(_constants.HTTP_STATUS.CREATED);
|
|
353
|
+
return next({
|
|
354
|
+
ok: _constants.API_MESSAGE.TARBALL_UPLOADED
|
|
355
|
+
});
|
|
356
|
+
});
|
|
357
|
+
};
|
|
358
|
+
}
|
|
359
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZGVidWciLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9sb2Rhc2giLCJfbWltZSIsIl9wYXRoIiwiX2NvcmUiLCJfaG9va3MiLCJfbWlkZGxld2FyZSIsIl9jb25zdGFudHMiLCJfbG9nZ2VyIiwiX3N0b3JhZ2VVdGlscyIsIl91dGlscyIsIl9zdGFyIiwiZSIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiZGVidWciLCJidWlsZERlYnVnIiwicHVibGlzaCIsInJvdXRlciIsImF1dGgiLCJzdG9yYWdlIiwiY29uZmlnIiwiY2FuIiwiYWxsb3ciLCJiZWZvcmVBbGwiLCJwYXJhbXMiLCJtZXNzYWdlIiwibG9nZ2VyIiwidHJhY2UiLCJhZnRlckFsbCIsInB1dCIsIm1lZGlhIiwibWltZSIsImdldFR5cGUiLCJleHBlY3RKc29uIiwicHVibGlzaFBhY2thZ2UiLCJkZWxldGUiLCJ1blB1Ymxpc2hQYWNrYWdlIiwicmVtb3ZlVGFyYmFsbCIsIkhFQURFUlMiLCJPQ1RFVF9TVFJFQU0iLCJ1cGxvYWRQYWNrYWdlVGFyYmFsbCIsImFkZFZlcnNpb24iLCJzdGFyQXBpIiwic3RhciIsInJlcSIsInJlcyIsIm5leHQiLCJwYWNrYWdlTmFtZSIsInBhY2thZ2UiLCJjcmVhdGVUYXJiYWxsIiwiZmlsZW5hbWUiLCJkYXRhIiwiY2IiLCJzdHJlYW0iLCJhZGRUYXJiYWxsIiwib24iLCJlcnIiLCJlbmQiLCJCdWZmZXIiLCJmcm9tIiwiZG9uZSIsImNyZWF0ZVZlcnNpb24iLCJ2ZXJzaW9uIiwibWV0YWRhdGEiLCJhZGRUYWdzIiwidGFncyIsIm1lcmdlVGFncyIsImFmdGVyQ2hhbmdlIiwiZXJyb3IiLCJva01lc3NhZ2UiLCJtZXRhZGF0YUNvcHkiLCJfYXR0YWNobWVudHMiLCJ2ZXJzaW9ucyIsIl8iLCJpc05pbCIsIkpTT04iLCJzdHJpbmdpZnkiLCJzdGF0dXMiLCJIVFRQX1NUQVRVUyIsIkNSRUFURUQiLCJvayIsInN1Y2Nlc3MiLCJpc0ludmFsaWRCb2R5Rm9ybWF0IiwiaXNPYmplY3QiLCJoYXNEaWZmT25lS2V5IiwiaW5mbyIsIkVycm9yQ29kZSIsImdldEJhZFJlcXVlc3QiLCJBUElfRVJST1IiLCJVTlNVUE9SVEVEX1JFR0lTVFJZX0NBTEwiLCJDT05GTElDVCIsImZpcnN0QXR0YWNobWVudEtleSIsIk9iamVjdCIsImtleXMiLCJQYXRoIiwiYmFzZW5hbWUiLCJ2ZXJzaW9uVG9QdWJsaXNoIiwidmVyc2lvbk1ldGFkYXRhVG9QdWJsaXNoIiwicmVhZG1lIiwiU3RyaW5nIiwiRElTVF9UQUdTIiwibm90aWZ5IiwicmVtb3RlX3VzZXIiLCJuYW1lIiwiaXNQdWJsaXNoYWJsZVBhY2thZ2UiLCJib2R5IiwidXNlcnMiLCJ2YWxpZGF0aW9uVXRpbHMiLCJub3JtYWxpemVNZXRhZGF0YSIsIl9yZXYiLCJpc1JlbGF0ZWRUb0RlcHJlY2F0aW9uIiwiaXNFbXB0eSIsInJlbW90ZSIsImFsbG93X3VucHVibGlzaCIsImNoYW5nZVBhY2thZ2UiLCJyZXZpc2lvbiIsIkFQSV9NRVNTQUdFIiwiUEtHX0NIQU5HRUQiLCJhZGRQYWNrYWdlIiwiUEtHX0NSRUFURUQiLCJnZXRCYWREYXRhIiwiQkFEX1BBQ0tBR0VfREFUQSIsInJlbW92ZVBhY2thZ2UiLCJQS0dfUkVNT1ZFRCIsIlRBUkJBTExfUkVNT1ZFRCIsInRhZyIsIlBLR19QVUJMSVNIRUQiLCJwaXBlIiwiY29tcGxldGUiLCJhYm9ydCIsImxvY2FscyIsInJlcG9ydF9lcnJvciIsIlRBUkJBTExfVVBMT0FERUQiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBpL2VuZHBvaW50L2FwaS9wdWJsaXNoLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBidWlsZERlYnVnIGZyb20gJ2RlYnVnJztcbmltcG9ydCB0eXBlIHsgUm91dGVyIH0gZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IG1pbWUgZnJvbSAnbWltZSc7XG5pbXBvcnQgUGF0aCBmcm9tICdwYXRoJztcblxuaW1wb3J0IHR5cGUgeyBBdXRoIH0gZnJvbSAnQHZlcmRhY2Npby9hdXRoJztcbmltcG9ydCB7IHZhbGlkYXRpb25VdGlscyB9IGZyb20gJ0B2ZXJkYWNjaW8vY29yZSc7XG5pbXBvcnQgeyBub3RpZnkgfSBmcm9tICdAdmVyZGFjY2lvL2hvb2tzJztcbmltcG9ydCB7IGFsbG93LCBleHBlY3RKc29uLCBtZWRpYSB9IGZyb20gJ0B2ZXJkYWNjaW8vbWlkZGxld2FyZSc7XG5pbXBvcnQgdHlwZSB7IENhbGxiYWNrLCBDb25maWcsIE1lcmdlVGFncywgUGFja2FnZSwgVmVyc2lvbiB9IGZyb20gJ0B2ZXJkYWNjaW8vdHlwZXMnO1xuXG5pbXBvcnQgeyBBUElfRVJST1IsIEFQSV9NRVNTQUdFLCBESVNUX1RBR1MsIEhFQURFUlMsIEhUVFBfU1RBVFVTIH0gZnJvbSAnLi4vLi4vLi4vbGliL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICcuLi8uLi8uLi9saWIvbG9nZ2VyJztcbmltcG9ydCB0eXBlIFN0b3JhZ2UgZnJvbSAnLi4vLi4vLi4vbGliL3N0b3JhZ2UnO1xuaW1wb3J0IHsgaXNQdWJsaXNoYWJsZVBhY2thZ2UgfSBmcm9tICcuLi8uLi8uLi9saWIvc3RvcmFnZS11dGlscyc7XG5pbXBvcnQgeyBFcnJvckNvZGUsIGhhc0RpZmZPbmVLZXksIGlzT2JqZWN0LCBpc1JlbGF0ZWRUb0RlcHJlY2F0aW9uIH0gZnJvbSAnLi4vLi4vLi4vbGliL3V0aWxzJztcbmltcG9ydCB0eXBlIHsgJE5leHRGdW5jdGlvblZlciwgJFJlcXVlc3RFeHRlbmQsICRSZXNwb25zZUV4dGVuZCB9IGZyb20gJy4uLy4uLy4uL3R5cGVzJztcbmltcG9ydCBzdGFyIGZyb20gJy4vc3Rhcic7XG5cbmNvbnN0IGRlYnVnID0gYnVpbGREZWJ1ZygndmVyZGFjY2lvOnB1Ymxpc2gnKTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcHVibGlzaChcbiAgcm91dGVyOiBSb3V0ZXIsXG4gIGF1dGg6IEF1dGgsXG4gIHN0b3JhZ2U6IFN0b3JhZ2UsXG4gIGNvbmZpZzogQ29uZmlnXG4pOiB2b2lkIHtcbiAgY29uc3QgY2FuID0gYWxsb3coYXV0aCwge1xuICAgIGJlZm9yZUFsbDogKHBhcmFtcywgbWVzc2FnZSkgPT4gbG9nZ2VyLnRyYWNlKHBhcmFtcywgbWVzc2FnZSksXG4gICAgYWZ0ZXJBbGw6IChwYXJhbXMsIG1lc3NhZ2UpID0+IGxvZ2dlci50cmFjZShwYXJhbXMsIG1lc3NhZ2UpLFxuICB9KTtcblxuICAvKipcbiAgICogUHVibGlzaCBhIHBhY2thZ2UgLyB1cGRhdGUgcGFja2FnZSAvIHVuL3N0YXJ0IGEgcGFja2FnZVxuICAgKlxuICAgKiBUaGVyZSBhcmUgbXVsdGlwbGVzIHNjZW5hcmlvcyBoZXJlIHRvIGJlIGNvbnNpZGVyZWQ6XG4gICAqXG4gICAqIDEuIFB1Ymxpc2ggc2NlbmFyaW9cbiAgICpcbiAgICogUHVibGlzaCBhIHBhY2thZ2UgY29uc2lzdCBvZiBhdCBsZWFzdCAxIHN0ZXAgKFBVVCkgd2l0aCBhIG1ldGFkYXRhIHBheWxvYWQuXG4gICAqIFdoZW4gYSBwYWNrYWdlIGlzIHB1Ymxpc2hlZCwgYW4gX2F0dGFjaG1lbnQgcHJvcGVydHkgaXMgcHJlc2VudCB0aGF0IGNvbnRhaW5zIHRoZSBkYXRhXG4gICAqIG9mIHRoZSB0YXJiYWxsLlxuICAgKlxuICAgKiBFeGFtcGxlIGZsb3cgb2YgcHVibGlzaC5cbiAgICpcbiAgICogIG5wbSBodHRwIGZldGNoIFBVVCAyMDEgaHR0cDovL2xvY2FsaG9zdDo0ODczL0BzY29wZSUyZnRlc3QxIDk2Mjdtc1xuICAgICAgbnBtIGluZm8gbGlmZWN5Y2xlIEBzY29wZS90ZXN0MUAxLjAuMX5wdWJsaXNoOiBAc2NvcGUvdGVzdDFAMS4wLjFcbiAgICAgIG5wbSBpbmZvIGxpZmVjeWNsZSBAc2NvcGUvdGVzdDFAMS4wLjF+cG9zdHB1Ymxpc2g6IEBzY29wZS90ZXN0MUAxLjAuMVxuICAgICAgKyBAc2NvcGUvdGVzdDFAMS4wLjFcbiAgICAgIG5wbSB2ZXJiIGV4aXQgWyAwLCB0cnVlIF1cbiAgICpcbiAgICpcbiAgICogMi4gVW5wdWJsaXNoIHNjZW5hcmlvXG4gICAqXG4gICAqIFVucHVibGlzaCBjb25zaXN0IGluIDMgc3RlcHMuXG4gICAqICAxLiBUcnkgdG8gZmV0Y2ggIG1ldGFkYXRhIC0+IGlmIGl0IGZhaWxzLCByZXR1cm4gNDA0XG4gICAqICAyLiBDb21wdXRlIG1ldGFkYXRhIGxvY2FsbHkgKGNsaWVudCBzaWRlKSBhbmQgc2VuZCBhIG11dGF0ZSBwYXlsb2FkIGV4Y2x1ZGluZyB0aGUgdmVyc2lvbiB0byBiZSB1bnB1Ymxpc2hlZFxuICAgKiAgICBlZzogaWYgbWV0YWRhdGEgcmVmbGVjdHMgMS4wLjEsIDEuMC4yIGFuZCAxLjAuMywgdGhlIGNvbXB1dGVkIG1ldGFkYXRhIHdvbid0IGluY2x1ZGUgMS4wLjMuXG4gICAqICAzLiBPbmNlIHRoZSBzZWNvbmQgc3RlcCBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgZmluaXNoZWQsIGRlbGV0ZSB0aGUgdGFyYmFsbC5cbiAgICpcbiAgICogIEFsbCB0aGVzZSBzdGVwcyBhcmUgY29uc2VjdXRpdmUgYW5kIHJlcXVpcmVkLCB0aGVyZSBpcyBubyB0cmFuc2FjaW9ucyBoZXJlLCBpZiBzdGVwIDMgZmFpbHMsIG1ldGFkYXRhIG1pZ2h0XG4gICAqICBnZXQgY29ycnVwdGVkLlxuICAgKlxuICAgKiAgTm90ZSB0aGUgdW5wdWJsaXNoIGNhbGwgd2lsbCBzdWZmaXggaW4gdGhlIHVybCBhIC8tcmV2LzE0LTVkNTAwY2ZjZTkyZjkwZmQgcmV2aXNpb24gbnVtYmVyLCB0aGlzIG5vdFxuICAgKiAgdXNlZCBpbnRlcm5hbGx5LlxuICAgKlxuICAgKlxuICAgKiBFeGFtcGxlIGZsb3cgb2YgdW5wdWJsaXNoLlxuICAgKlxuICAgKiBucG0gaHR0cCBmZXRjaCBHRVQgMjAwIGh0dHA6Ly9sb2NhbGhvc3Q6NDg3My9Ac2NvcGUlMmZ0ZXN0MT93cml0ZT10cnVlIDE2ODBtc1xuICAgICBucG0gaHR0cCBmZXRjaCBQVVQgMjAxIGh0dHA6Ly9sb2NhbGhvc3Q6NDg3My9Ac2NvcGUlMmZ0ZXN0MS8tcmV2LzE0LTVkNTAwY2ZjZTkyZjkwZmQgOTU2NjA2bXMgYXR0ZW1wdCAjMlxuICAgICBucG0gaHR0cCBmZXRjaCBHRVQgMjAwIGh0dHA6Ly9sb2NhbGhvc3Q6NDg3My9Ac2NvcGUlMmZ0ZXN0MT93cml0ZT10cnVlIDE2MDFtc1xuICAgICBucG0gaHR0cCBmZXRjaCBERUxFVEUgMjAxIGh0dHA6Ly9sb2NhbGhvc3Q6NDg3My9Ac2NvcGUlMmZ0ZXN0MS8tL3Rlc3QxLTEuMC4zLnRnei8tcmV2LzE2LWUxMWM4ZGIyODJiMmQ5OTIgMTltc1xuICAgKlxuICAgKiAzLiBTdGFyIGEgcGFja2FnZVxuICAgKlxuICAgKiBQZXJtaXNzaW9uczogc3RhcnQgYSBwYWNrYWdlIGRlcGVuZHMgb2YgdGhlIHB1Ymxpc2ggYW5kIHVucHVibGlzaCBwZXJtaXNzaW9ucywgdGhlcmUgaXMgbm8gc3BlY2lmaWMgZmxhZyBmb3Igc3RhciBvciB1biBzdGFydC5cbiAgICogVGhlIFVSTCBmb3Igc3RhciBpcyBzaW1pbGFyIHRvIHRoZSB1bnB1Ymxpc2ggKGNoYW5nZSBwYWNrYWdlIGZvcm1hdClcbiAgICpcbiAgICogbnBtIGhhcyBubyBlbnBvaW50IGZvciBzdGFyIGEgcGFja2FnZSwgcmF0aGVyIG11dGF0ZSB0aGUgbWV0YWRhdGEgYW5kIGFjdHMgYXMsIHRoZSBkaWZmZXJlbmNlIGlzIHRoZVxuICAgKiB1c2VycyBwcm9wZXJ0eSB3aGljaCBpcyBwYXJ0IG9mIHRoZSBwYXlsb2FkIGFuZCB0aGUgYm9keSBvbmx5IGluY2x1ZGVzXG4gICAqXG4gICAqIHtcblx0XHQgIFwiX2lkXCI6IHBrZ05hbWUsXG5cdCAgXHRcIl9yZXZcIjogXCIzLWIwY2RhZWZjOWJkYjc3YzhcIixcblx0XHQgIFwidXNlcnNcIjoge1xuXHRcdCAgICBbdXNlcm5hbWVdOiBib29sZWFuIHZhbHVlICh0cnVlLCBmYWxzZSlcblx0XHQgIH1cblx0fVxuICAgKlxuICAgKi9cbiAgcm91dGVyLnB1dChcbiAgICAnLzpwYWNrYWdlLzpfcmV2Py86cmV2aXNpb24/JyxcbiAgICBjYW4oJ3B1Ymxpc2gnKSxcbiAgICBtZWRpYShtaW1lLmdldFR5cGUoJ2pzb24nKSksXG4gICAgZXhwZWN0SnNvbixcbiAgICBwdWJsaXNoUGFja2FnZShzdG9yYWdlLCBjb25maWcsIGF1dGgpXG4gICk7XG5cbiAgLyoqXG4gICAqIFVuLXB1Ymxpc2hpbmcgYW4gZW50aXJlIHBhY2thZ2UuXG4gICAqXG4gICAqIFRoaXMgc2NlbmFyaW8gaGFwcGVucyB3aGVuIHRoZSBmaXJzdCBjYWxsIGRldGVjdCB0aGVyZSBpcyBvbmx5IG9uZSB2ZXJzaW9uIHJlbWFpbmluZ1xuICAgKiBpbiB0aGUgbWV0YWRhdGEsIHRoZW4gdGhlIGNsaWVudCBkZWNpZGVzIHRvIERFTEVURSB0aGUgcmVzb3VyY2VcbiAgICogbnBtIGh0dHAgZmV0Y2ggR0VUIDMwNCBodHRwOi8vbG9jYWxob3N0OjQ4NzMvQHNjb3BlJTJmdGVzdDE/d3JpdGU9dHJ1ZSAxMDc2bXMgKGZyb20gY2FjaGUpXG4gICAgIG5wbSBodHRwIGZldGNoIERFTEVURSAyMDEgaHR0cDovL2xvY2FsaG9zdDo0ODczL0BzY29wZSUyZnRlc3QxLy1yZXYvMTgtZDhlYmUzMDIwYmQ0YWM5YyAyMm1zXG4gICAqL1xuICByb3V0ZXIuZGVsZXRlKCcvOnBhY2thZ2UvLXJldi8qJywgY2FuKCd1bnB1Ymxpc2gnKSwgdW5QdWJsaXNoUGFja2FnZShzdG9yYWdlKSk7XG5cbiAgLy8gcmVtb3ZpbmcgYSB0YXJiYWxsXG4gIHJvdXRlci5kZWxldGUoXG4gICAgJy86cGFja2FnZS8tLzpmaWxlbmFtZS8tcmV2LzpyZXZpc2lvbicsXG4gICAgY2FuKCd1bnB1Ymxpc2gnKSxcbiAgICBjYW4oJ3B1Ymxpc2gnKSxcbiAgICByZW1vdmVUYXJiYWxsKHN0b3JhZ2UpXG4gICk7XG5cbiAgLy8gdXBsb2FkaW5nIHBhY2thZ2UgdGFyYmFsbFxuICByb3V0ZXIucHV0KFxuICAgICcvOnBhY2thZ2UvLS86ZmlsZW5hbWUvKicsXG4gICAgY2FuKCdwdWJsaXNoJyksXG4gICAgbWVkaWEoSEVBREVSUy5PQ1RFVF9TVFJFQU0pLFxuICAgIHVwbG9hZFBhY2thZ2VUYXJiYWxsKHN0b3JhZ2UpXG4gICk7XG5cbiAgLy8gb25seSB1c2VkIGZvciBkZXZlbG9wbWVudFxuICBpZiAoY29uZmlnLl9kZWJ1Zykge1xuICAgIC8vIGFkZGluZyBhIHZlcnNpb25cbiAgICByb3V0ZXIucHV0KFxuICAgICAgJy86cGFja2FnZS86dmVyc2lvbi8tdGFnLzp0YWcnLFxuICAgICAgY2FuKCdwdWJsaXNoJyksXG4gICAgICBtZWRpYShtaW1lLmdldFR5cGUoJ2pzb24nKSksXG4gICAgICBleHBlY3RKc29uLFxuICAgICAgYWRkVmVyc2lvbihzdG9yYWdlKVxuICAgICk7XG4gIH1cbn1cblxuLyoqXG4gKiBQdWJsaXNoIGEgcGFja2FnZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcHVibGlzaFBhY2thZ2Uoc3RvcmFnZTogU3RvcmFnZSwgY29uZmlnOiBDb25maWcsIGF1dGg6IEF1dGgpOiBhbnkge1xuICBjb25zdCBzdGFyQXBpID0gc3RhcihzdG9yYWdlKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChyZXE6ICRSZXF1ZXN0RXh0ZW5kLCByZXM6ICRSZXNwb25zZUV4dGVuZCwgbmV4dDogJE5leHRGdW5jdGlvblZlcik6IHZvaWQge1xuICAgIGNvbnN0IHBhY2thZ2VOYW1lID0gcmVxLnBhcmFtcy5wYWNrYWdlO1xuICAgIGRlYnVnKCdwdWJsaXNoaW5nIG9yIHVwZGF0aW5nIGEgbmV3IHZlcnNpb24gZm9yICVvJywgcGFja2FnZU5hbWUpO1xuICAgIC8qKlxuICAgICAqIFdyaXRlIHRhcmJhbGwgb2Ygc3RyZWFtIGRhdGEgZnJvbSBwYWNrYWdlIGNsaWVudHMuXG4gICAgICovXG4gICAgY29uc3QgY3JlYXRlVGFyYmFsbCA9IGZ1bmN0aW9uIChmaWxlbmFtZTogc3RyaW5nLCBkYXRhLCBjYjogQ2FsbGJhY2spOiB2b2lkIHtcbiAgICAgIGNvbnN0IHN0cmVhbSA9IHN0b3JhZ2UuYWRkVGFyYmFsbChwYWNrYWdlTmFtZSwgZmlsZW5hbWUpO1xuICAgICAgc3RyZWFtLm9uKCdlcnJvcicsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgY2IoZXJyKTtcbiAgICAgIH0pO1xuICAgICAgc3RyZWFtLm9uKCdzdWNjZXNzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBjYigpO1xuICAgICAgfSk7XG4gICAgICAvLyB0aGlzIGlzIGR1bWIgYW5kIG1lbW9yeS1jb25zdW1pbmcsIGJ1dCB3aGF0IGNob2ljZXMgZG8gd2UgaGF2ZT9cbiAgICAgIC8vIGZsb3c6IHdlIG5lZWQgZmlyc3QgcmVmYWN0b3IgdGhpcyBmaWxlIGJlZm9yZSBkZWNpZGVzIHdoaWNoIHR5cGUgdXNlIGhlcmVcbiAgICAgIHN0cmVhbS5lbmQoQnVmZmVyLmZyb20oZGF0YS5kYXRhLCAnYmFzZTY0JykpO1xuICAgICAgc3RyZWFtLmRvbmUoKTtcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogQWRkIG5ldyBwYWNrYWdlIHZlcnNpb24gaW4gc3RvcmFnZVxuICAgICAqL1xuICAgIGNvbnN0IGNyZWF0ZVZlcnNpb24gPSBmdW5jdGlvbiAodmVyc2lvbjogc3RyaW5nLCBtZXRhZGF0YTogVmVyc2lvbiwgY2I6IENhbGxiYWNrKTogdm9pZCB7XG4gICAgICBzdG9yYWdlLmFkZFZlcnNpb24ocGFja2FnZU5hbWUsIHZlcnNpb24sIG1ldGFkYXRhLCBudWxsLCBjYik7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEFkZCBuZXcgdGFncyBpbiBzdG9yYWdlXG4gICAgICovXG4gICAgY29uc3QgYWRkVGFncyA9IGZ1bmN0aW9uICh0YWdzOiBNZXJnZVRhZ3MsIGNiOiBDYWxsYmFjayk6IHZvaWQge1xuICAgICAgc3RvcmFnZS5tZXJnZVRhZ3MocGFja2FnZU5hbWUsIHRhZ3MsIGNiKTtcbiAgICB9O1xuXG4gICAgY29uc3QgYWZ0ZXJDaGFuZ2UgPSBmdW5jdGlvbiAoZXJyb3IsIG9rTWVzc2FnZSwgbWV0YWRhdGEpOiB2b2lkIHtcbiAgICAgIGNvbnN0IG1ldGFkYXRhQ29weTogUGFja2FnZSA9IHsgLi4ubWV0YWRhdGEgfTtcblxuICAgICAgY29uc3QgeyBfYXR0YWNobWVudHMsIHZlcnNpb25zIH0gPSBtZXRhZGF0YUNvcHk7XG5cbiAgICAgIC8vIGBucG0gc3RhcmAgd291bGRuJ3QgaGF2ZSBhdHRhY2htZW50c1xuICAgICAgLy8gYW5kIGBucG0gZGVwcmVjYXRlYCB3b3VsZCBoYXZlIGF0dGFjaG1lbnRzIGFzIGEgZW1wdHkgb2JqZWN0LCBpLmUge31cbiAgICAgIGlmIChfLmlzTmlsKF9hdHRhY2htZW50cykgfHwgSlNPTi5zdHJpbmdpZnkoX2F0dGFjaG1lbnRzKSA9PT0gJ3t9Jykge1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gbmV4dChlcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgcmVzLnN0YXR1cyhIVFRQX1NUQVRVUy5DUkVBVEVEKTtcbiAgICAgICAgcmV0dXJuIG5leHQoe1xuICAgICAgICAgIG9rOiBva01lc3NhZ2UsXG4gICAgICAgICAgc3VjY2VzczogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIC8vIG5wbS1yZWdpc3RyeS1jbGllbnQgMC4zKyBlbWJlZHMgdGFyYmFsbCBpbnRvIHRoZSBqc29uIHVwbG9hZFxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2lzYWFjcy9ucG0tcmVnaXN0cnktY2xpZW50L2NvbW1pdC9lOWZiZWI4YjY3ZjI0OTM5NGY3MzVjNzRlZjExZmU0NzIwZDQ2Y2EwXG4gICAgICAvLyBpc3N1ZSBodHRwczovL2dpdGh1Yi5jb20vcmxpZHdrYS9zaW5vcGlhL2lzc3Vlcy8zMSwgZGVhbGluZyB3aXRoIGl0IGhlcmU6XG4gICAgICBjb25zdCBpc0ludmFsaWRCb2R5Rm9ybWF0ID1cbiAgICAgICAgaXNPYmplY3QoX2F0dGFjaG1lbnRzKSA9PT0gZmFsc2UgfHxcbiAgICAgICAgaGFzRGlmZk9uZUtleShfYXR0YWNobWVudHMpIHx8XG4gICAgICAgIGlzT2JqZWN0KHZlcnNpb25zKSA9PT0gZmFsc2UgfHxcbiAgICAgICAgaGFzRGlmZk9uZUtleSh2ZXJzaW9ucyk7XG5cbiAgICAgIGlmIChpc0ludmFsaWRCb2R5Rm9ybWF0KSB7XG4gICAgICAgIC8vIG5wbSBpcyBkb2luZyBzb21ldGhpbmcgc3RyYW5nZSBhZ2FpblxuICAgICAgICAvLyBpZiB0aGlzIGhhcHBlbnMgaW4gbm9ybWFsIGNpcmN1bXN0YW5jZXMsIHJlcG9ydCBpdCBhcyBhIGJ1Z1xuICAgICAgICBsb2dnZXIuaW5mbyh7IHBhY2thZ2VOYW1lIH0sIGB3cm9uZyBwYWNrYWdlIGZvcm1hdCBvbiBwdWJsaXNoIGEgcGFja2FnZSBAe3BhY2thZ2VOYW1lfWApO1xuICAgICAgICByZXR1cm4gbmV4dChFcnJvckNvZGUuZ2V0QmFkUmVxdWVzdChBUElfRVJST1IuVU5TVVBPUlRFRF9SRUdJU1RSWV9DQUxMKSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChlcnJvciAmJiBlcnJvci5zdGF0dXMgIT09IEhUVFBfU1RBVFVTLkNPTkZMSUNUKSB7XG4gICAgICAgIHJldHVybiBuZXh0KGVycm9yKTtcbiAgICAgIH1cblxuICAgICAgLy8gYXQgdGhpcyBwb2ludCBkb2N1bWVudCBpcyBlaXRoZXIgY3JlYXRlZCBvciBleGlzdGVkIGJlZm9yZVxuICAgICAgY29uc3QgW2ZpcnN0QXR0YWNobWVudEtleV0gPSBPYmplY3Qua2V5cyhfYXR0YWNobWVudHMpO1xuXG4gICAgICBjcmVhdGVUYXJiYWxsKFxuICAgICAgICBQYXRoLmJhc2VuYW1lKGZpcnN0QXR0YWNobWVudEtleSksXG4gICAgICAgIF9hdHRhY2htZW50c1tmaXJzdEF0dGFjaG1lbnRLZXldLFxuICAgICAgICBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXh0KGVycm9yKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCB2ZXJzaW9uVG9QdWJsaXNoID0gT2JqZWN0LmtleXModmVyc2lvbnMpWzBdO1xuICAgICAgICAgIGNvbnN0IHZlcnNpb25NZXRhZGF0YVRvUHVibGlzaCA9IHZlcnNpb25zW3ZlcnNpb25Ub1B1Ymxpc2hdO1xuXG4gICAgICAgICAgdmVyc2lvbk1ldGFkYXRhVG9QdWJsaXNoLnJlYWRtZSA9XG4gICAgICAgICAgICBfLmlzTmlsKHZlcnNpb25NZXRhZGF0YVRvUHVibGlzaC5yZWFkbWUpID09PSBmYWxzZVxuICAgICAgICAgICAgICA/IFN0cmluZyh2ZXJzaW9uTWV0YWRhdGFUb1B1Ymxpc2gucmVhZG1lKVxuICAgICAgICAgICAgICA6ICcnO1xuXG4gICAgICAgICAgY3JlYXRlVmVyc2lvbih2ZXJzaW9uVG9QdWJsaXNoLCB2ZXJzaW9uTWV0YWRhdGFUb1B1Ymxpc2gsIGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICAgIHJldHVybiBuZXh0KGVycm9yKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYWRkVGFncyhtZXRhZGF0YUNvcHlbRElTVF9UQUdTXSwgYXN5bmMgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0KGVycm9yKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgbm90aWZ5KFxuICAgICAgICAgICAgICAgICAgbWV0YWRhdGFDb3B5LFxuICAgICAgICAgICAgICAgICAgY29uZmlnLFxuICAgICAgICAgICAgICAgICAgcmVxLnJlbW90ZV91c2VyLFxuICAgICAgICAgICAgICAgICAgYCR7bWV0YWRhdGFDb3B5Lm5hbWV9QCR7dmVyc2lvblRvUHVibGlzaH1gXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoeyBlcnJvciB9LCAnbm90aWZ5IGJhdGNoIHNlcnZpY2UgaGFzIGZhaWxlZDogQHtlcnJvcn0nKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJlcy5zdGF0dXMoSFRUUF9TVEFUVVMuQ1JFQVRFRCk7XG4gICAgICAgICAgICAgIHJldHVybiBuZXh0KHsgb2s6IG9rTWVzc2FnZSwgc3VjY2VzczogdHJ1ZSB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH07XG5cbiAgICBpZiAoaXNQdWJsaXNoYWJsZVBhY2thZ2UocmVxLmJvZHkpID09PSBmYWxzZSAmJiBpc09iamVjdChyZXEuYm9keS51c2VycykpIHtcbiAgICAgIHJldHVybiBzdGFyQXBpKHJlcSwgcmVzLCBuZXh0KTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgbWV0YWRhdGEgPSB2YWxpZGF0aW9uVXRpbHMubm9ybWFsaXplTWV0YWRhdGEocmVxLmJvZHksIHBhY2thZ2VOYW1lKTtcbiAgICAgIC8vIGNoZWNrIF9hdHRhY2htZW50cyB0byBkaXN0aW5ndWlzaCBwdWJsaXNoIGFuZCBkZXByZWNhdGVcbiAgICAgIGlmIChcbiAgICAgICAgcmVxLnBhcmFtcy5fcmV2IHx8XG4gICAgICAgIChpc1JlbGF0ZWRUb0RlcHJlY2F0aW9uKHJlcS5ib2R5KSAmJiBfLmlzRW1wdHkocmVxLmJvZHkuX2F0dGFjaG1lbnRzKSlcbiAgICAgICkge1xuICAgICAgICBkZWJ1ZygndXBkYXRpbmcgYSBuZXcgdmVyc2lvbiBmb3IgJW8nLCBwYWNrYWdlTmFtZSk7XG4gICAgICAgIC8vIHdlIGNoZWNrIHVucHVibGlzaCBwZXJtaXNzaW9ucywgYW4gdXBkYXRlIGlzIGJhc2ljYWxseSByZW1vdmUgdmVyc2lvbnNcbiAgICAgICAgY29uc3QgcmVtb3RlID0gcmVxLnJlbW90ZV91c2VyO1xuICAgICAgICBhdXRoLmFsbG93X3VucHVibGlzaCh7IHBhY2thZ2VOYW1lIH0sIHJlbW90ZSwgKGVycm9yKSA9PiB7XG4gICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICBsb2dnZXIuZXJyb3IoeyBwYWNrYWdlTmFtZSB9LCBgbm90IGFsbG93ZWQgdG8gdW5wdWJsaXNoIGEgdmVyc2lvbiBmb3IgQHtwYWNrYWdlTmFtZX1gKTtcbiAgICAgICAgICAgIHJldHVybiBuZXh0KGVycm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc3RvcmFnZS5jaGFuZ2VQYWNrYWdlKHBhY2thZ2VOYW1lLCBtZXRhZGF0YSwgcmVxLnBhcmFtcy5yZXZpc2lvbiwgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICBhZnRlckNoYW5nZShlcnJvciwgQVBJX01FU1NBR0UuUEtHX0NIQU5HRUQsIG1ldGFkYXRhKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWJ1ZygnYWRkaW5nIGEgbmV3IHZlcnNpb24gZm9yICVvJywgcGFja2FnZU5hbWUpO1xuICAgICAgICBzdG9yYWdlLmFkZFBhY2thZ2UocGFja2FnZU5hbWUsIG1ldGFkYXRhLCBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICBhZnRlckNoYW5nZShlcnJvciwgQVBJX01FU1NBR0UuUEtHX0NSRUFURUQsIG1ldGFkYXRhKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgZGVidWcoJ2Vycm9yIG9uIHB1Ymxpc2g6ICVzJywgZXJyb3IubWVzc2FnZSk7XG4gICAgICBsb2dnZXIuZXJyb3IoeyBwYWNrYWdlTmFtZSB9LCAnZXJyb3Igb24gcHVibGlzaCwgYmFkIHBhY2thZ2UgZGF0YSBmb3IgQHtwYWNrYWdlTmFtZX0nKTtcbiAgICAgIHJldHVybiBuZXh0KEVycm9yQ29kZS5nZXRCYWREYXRhKEFQSV9FUlJPUi5CQURfUEFDS0FHRV9EQVRBKSk7XG4gICAgfVxuICB9O1xufVxuXG4vKipcbiAqIHVuLXB1Ymxpc2ggYSBwYWNrYWdlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1blB1Ymxpc2hQYWNrYWdlKHN0b3JhZ2U6IFN0b3JhZ2UpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChyZXE6ICRSZXF1ZXN0RXh0ZW5kLCByZXM6ICRSZXNwb25zZUV4dGVuZCwgbmV4dDogJE5leHRGdW5jdGlvblZlcik6IHZvaWQge1xuICAgIGNvbnN0IHBhY2thZ2VOYW1lID0gcmVxLnBhcmFtcy5wYWNrYWdlO1xuICAgIGRlYnVnKCd1bnB1Ymxpc2hpbmcgJW8nLCBwYWNrYWdlTmFtZSk7XG4gICAgc3RvcmFnZS5yZW1vdmVQYWNrYWdlKHBhY2thZ2VOYW1lLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHJldHVybiBuZXh0KGVycik7XG4gICAgICB9XG4gICAgICByZXMuc3RhdHVzKEhUVFBfU1RBVFVTLkNSRUFURUQpO1xuICAgICAgcmV0dXJuIG5leHQoeyBvazogQVBJX01FU1NBR0UuUEtHX1JFTU9WRUQgfSk7XG4gICAgfSk7XG4gIH07XG59XG5cbi8qKlxuICogRGVsZXRlIHRhcmJhbGxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZVRhcmJhbGwoc3RvcmFnZTogU3RvcmFnZSkge1xuICByZXR1cm4gZnVuY3Rpb24gKHJlcTogJFJlcXVlc3RFeHRlbmQsIHJlczogJFJlc3BvbnNlRXh0ZW5kLCBuZXh0OiAkTmV4dEZ1bmN0aW9uVmVyKTogdm9pZCB7XG4gICAgY29uc3QgcGFja2FnZU5hbWUgPSByZXEucGFyYW1zLnBhY2thZ2U7XG4gICAgY29uc3QgeyBmaWxlbmFtZSwgcmV2aXNpb24gfSA9IHJlcS5wYXJhbXM7XG4gICAgZGVidWcoJ3JlbW92aW5nIGEgdGFyYmFsbCBmb3IgJW8tJW8tJW8nLCBwYWNrYWdlTmFtZSwgZmlsZW5hbWUsIHJldmlzaW9uKTtcbiAgICBzdG9yYWdlLnJlbW92ZVRhcmJhbGwocGFja2FnZU5hbWUsIGZpbGVuYW1lLCByZXZpc2lvbiwgZnVuY3Rpb24gKGVycikge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICByZXR1cm4gbmV4dChlcnIpO1xuICAgICAgfVxuICAgICAgcmVzLnN0YXR1cyhIVFRQX1NUQVRVUy5DUkVBVEVEKTtcbiAgICAgIGRlYnVnKCdzdWNjZXNzIHJlbW92ZSB0YXJiYWxsIGZvciAlby0lby0lbycsIHBhY2thZ2VOYW1lLCBmaWxlbmFtZSwgcmV2aXNpb24pO1xuICAgICAgcmV0dXJuIG5leHQoeyBvazogQVBJX01FU1NBR0UuVEFSQkFMTF9SRU1PVkVEIH0pO1xuICAgIH0pO1xuICB9O1xufVxuLyoqXG4gKiBBZGRzIGEgbmV3IHZlcnNpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZFZlcnNpb24oc3RvcmFnZTogU3RvcmFnZSkge1xuICByZXR1cm4gZnVuY3Rpb24gKHJlcTogJFJlcXVlc3RFeHRlbmQsIHJlczogJFJlc3BvbnNlRXh0ZW5kLCBuZXh0OiAkTmV4dEZ1bmN0aW9uVmVyKTogdm9pZCB7XG4gICAgY29uc3QgeyB2ZXJzaW9uLCB0YWcgfSA9IHJlcS5wYXJhbXM7XG4gICAgY29uc3QgcGFja2FnZU5hbWUgPSByZXEucGFyYW1zLnBhY2thZ2U7XG5cbiAgICBzdG9yYWdlLmFkZFZlcnNpb24ocGFja2FnZU5hbWUsIHZlcnNpb24sIHJlcS5ib2R5LCB0YWcsIGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgIHJldHVybiBuZXh0KGVycm9yKTtcbiAgICAgIH1cblxuICAgICAgcmVzLnN0YXR1cyhIVFRQX1NUQVRVUy5DUkVBVEVEKTtcbiAgICAgIHJldHVybiBuZXh0KHtcbiAgICAgICAgb2s6IEFQSV9NRVNTQUdFLlBLR19QVUJMSVNIRUQsXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcbn1cblxuLyoqXG4gKiB1cGxvYWRQYWNrYWdlVGFyYmFsbFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXBsb2FkUGFja2FnZVRhcmJhbGwoc3RvcmFnZTogU3RvcmFnZSkge1xuICByZXR1cm4gZnVuY3Rpb24gKHJlcTogJFJlcXVlc3RFeHRlbmQsIHJlczogJFJlc3BvbnNlRXh0ZW5kLCBuZXh0OiAkTmV4dEZ1bmN0aW9uVmVyKTogdm9pZCB7XG4gICAgY29uc3QgcGFja2FnZU5hbWUgPSByZXEucGFyYW1zLnBhY2thZ2U7XG4gICAgY29uc3Qgc3RyZWFtID0gc3RvcmFnZS5hZGRUYXJiYWxsKHBhY2thZ2VOYW1lLCByZXEucGFyYW1zLmZpbGVuYW1lKTtcbiAgICByZXEucGlwZShzdHJlYW0pO1xuXG4gICAgLy8gY2hlY2tpbmcgaWYgZW5kIGV2ZW50IGNhbWUgYmVmb3JlIGNsb3NpbmdcbiAgICBsZXQgY29tcGxldGUgPSBmYWxzZTtcbiAgICByZXEub24oJ2VuZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbXBsZXRlID0gdHJ1ZTtcbiAgICAgIHN0cmVhbS5kb25lKCk7XG4gICAgfSk7XG5cbiAgICByZXEub24oJ2Nsb3NlJywgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKCFjb21wbGV0ZSkge1xuICAgICAgICBzdHJlYW0uYWJvcnQoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHN0cmVhbS5vbignZXJyb3InLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICByZXR1cm4gcmVzLmxvY2Fscy5yZXBvcnRfZXJyb3IoZXJyKTtcbiAgICB9KTtcblxuICAgIHN0cmVhbS5vbignc3VjY2VzcycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJlcy5zdGF0dXMoSFRUUF9TVEFUVVMuQ1JFQVRFRCk7XG4gICAgICByZXR1cm4gbmV4dCh7XG4gICAgICAgIG9rOiBBUElfTUVTU0FHRS5UQVJCQUxMX1VQTE9BREVELFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUEsSUFBQUEsTUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBRUEsSUFB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
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = _default;
|
|
7
|
+
var _middleware = require("@verdaccio/middleware");
|
|
8
|
+
var _constants = require("../../../lib/constants");
|
|
9
|
+
var _logger = require("../../../lib/logger");
|
|
10
|
+
function _default(route, auth, storage) {
|
|
11
|
+
// searching packages
|
|
12
|
+
route.get(_middleware.SEARCH_API_ENDPOINTS.deprecated_search, function (req, res) {
|
|
13
|
+
let received_end = false;
|
|
14
|
+
let response_finished = false;
|
|
15
|
+
let processing_pkgs = 0;
|
|
16
|
+
let firstPackage = true;
|
|
17
|
+
_logger.logger.warn('/-/all search endpoint is deprecated, might be removed in the next major release');
|
|
18
|
+
res.status(200);
|
|
19
|
+
res.set(_constants.HEADERS.CONTENT_TYPE, _constants.HEADERS.JSON_CHARSET);
|
|
20
|
+
|
|
21
|
+
/*
|
|
22
|
+
* Offical NPM registry (registry.npmjs.org) no longer return whole database,
|
|
23
|
+
* They only return packages matched with keyword in `referer: search pkg-name`,
|
|
24
|
+
* And NPM client will request server in every search.
|
|
25
|
+
*
|
|
26
|
+
* The magic number 99999 was sent by NPM registry. Modify it may caused strange
|
|
27
|
+
* behaviour in the future.
|
|
28
|
+
*
|
|
29
|
+
* BTW: NPM will not return result if user-agent does not contain string 'npm',
|
|
30
|
+
* See: method 'request' in up-storage.js
|
|
31
|
+
*
|
|
32
|
+
* If there is no cache in local, NPM will request /-/all, then get response with
|
|
33
|
+
* _updated: 99999, 'Date' in response header was Mon, 10 Oct 1983 00:12:48 GMT,
|
|
34
|
+
* this will make NPM always query from server
|
|
35
|
+
*
|
|
36
|
+
* Data structure also different, whel request /-/all, response is an object, but
|
|
37
|
+
* when request /-/all/since, response is an array
|
|
38
|
+
*/
|
|
39
|
+
const respShouldBeArray = req.path.endsWith('/since');
|
|
40
|
+
if (!respShouldBeArray) {
|
|
41
|
+
res.set('Date', 'Mon, 10 Oct 1983 00:12:48 GMT');
|
|
42
|
+
}
|
|
43
|
+
const check_finish = function () {
|
|
44
|
+
if (!received_end) {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
if (processing_pkgs) {
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
if (response_finished) {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
response_finished = true;
|
|
54
|
+
if (respShouldBeArray) {
|
|
55
|
+
res.end(']\n');
|
|
56
|
+
} else {
|
|
57
|
+
res.end('}\n');
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
if (respShouldBeArray) {
|
|
61
|
+
res.write('[');
|
|
62
|
+
} else {
|
|
63
|
+
res.write('{"_updated":' + 99999);
|
|
64
|
+
}
|
|
65
|
+
const stream = storage.search(req.query.startkey || 0, {
|
|
66
|
+
req: req
|
|
67
|
+
});
|
|
68
|
+
stream.on('data', function each(pkg) {
|
|
69
|
+
processing_pkgs++;
|
|
70
|
+
auth.allow_access({
|
|
71
|
+
packageName: pkg.name
|
|
72
|
+
}, req.remote_user, function (err, allowed) {
|
|
73
|
+
processing_pkgs--;
|
|
74
|
+
if (err) {
|
|
75
|
+
if (err.status && String(err.status).match(/^4\d\d$/)) {
|
|
76
|
+
// auth plugin returns 4xx user error,
|
|
77
|
+
// that's equivalent of !allowed basically
|
|
78
|
+
allowed = false;
|
|
79
|
+
} else {
|
|
80
|
+
stream.abort(err);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
if (allowed) {
|
|
84
|
+
if (respShouldBeArray) {
|
|
85
|
+
res.write(`${firstPackage ? '' : ','}${JSON.stringify(pkg)}\n`);
|
|
86
|
+
if (firstPackage) {
|
|
87
|
+
firstPackage = false;
|
|
88
|
+
}
|
|
89
|
+
} else {
|
|
90
|
+
res.write(',\n' + JSON.stringify(pkg.name) + ':' + JSON.stringify(pkg));
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
check_finish();
|
|
94
|
+
});
|
|
95
|
+
});
|
|
96
|
+
stream.on('error', function (err) {
|
|
97
|
+
_logger.logger.error('search `/-/all endpoint has failed @{err}', err);
|
|
98
|
+
received_end = true;
|
|
99
|
+
check_finish();
|
|
100
|
+
});
|
|
101
|
+
stream.on('end', function () {
|
|
102
|
+
received_end = true;
|
|
103
|
+
check_finish();
|
|
104
|
+
});
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbWlkZGxld2FyZSIsInJlcXVpcmUiLCJfY29uc3RhbnRzIiwiX2xvZ2dlciIsIl9kZWZhdWx0Iiwicm91dGUiLCJhdXRoIiwic3RvcmFnZSIsImdldCIsIlNFQVJDSF9BUElfRU5EUE9JTlRTIiwiZGVwcmVjYXRlZF9zZWFyY2giLCJyZXEiLCJyZXMiLCJyZWNlaXZlZF9lbmQiLCJyZXNwb25zZV9maW5pc2hlZCIsInByb2Nlc3NpbmdfcGtncyIsImZpcnN0UGFja2FnZSIsImxvZ2dlciIsIndhcm4iLCJzdGF0dXMiLCJzZXQiLCJIRUFERVJTIiwiQ09OVEVOVF9UWVBFIiwiSlNPTl9DSEFSU0VUIiwicmVzcFNob3VsZEJlQXJyYXkiLCJwYXRoIiwiZW5kc1dpdGgiLCJjaGVja19maW5pc2giLCJlbmQiLCJ3cml0ZSIsInN0cmVhbSIsInNlYXJjaCIsInF1ZXJ5Iiwic3RhcnRrZXkiLCJvbiIsImVhY2giLCJwa2ciLCJhbGxvd19hY2Nlc3MiLCJwYWNrYWdlTmFtZSIsIm5hbWUiLCJyZW1vdGVfdXNlciIsImVyciIsImFsbG93ZWQiLCJTdHJpbmciLCJtYXRjaCIsImFib3J0IiwiSlNPTiIsInN0cmluZ2lmeSIsImVycm9yIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FwaS9lbmRwb2ludC9hcGkvc2VhcmNoLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNFQVJDSF9BUElfRU5EUE9JTlRTIH0gZnJvbSAnQHZlcmRhY2Npby9taWRkbGV3YXJlJztcblxuaW1wb3J0IHsgSEVBREVSUyB9IGZyb20gJy4uLy4uLy4uL2xpYi9jb25zdGFudHMnO1xuaW1wb3J0IHsgbG9nZ2VyIH0gZnJvbSAnLi4vLi4vLi4vbGliL2xvZ2dlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChyb3V0ZSwgYXV0aCwgc3RvcmFnZSk6IHZvaWQge1xuICAvLyBzZWFyY2hpbmcgcGFja2FnZXNcbiAgcm91dGUuZ2V0KFNFQVJDSF9BUElfRU5EUE9JTlRTLmRlcHJlY2F0ZWRfc2VhcmNoLCBmdW5jdGlvbiAocmVxLCByZXMpIHtcbiAgICBsZXQgcmVjZWl2ZWRfZW5kID0gZmFsc2U7XG4gICAgbGV0IHJlc3BvbnNlX2ZpbmlzaGVkID0gZmFsc2U7XG4gICAgbGV0IHByb2Nlc3NpbmdfcGtncyA9IDA7XG4gICAgbGV0IGZpcnN0UGFja2FnZSA9IHRydWU7XG4gICAgbG9nZ2VyLndhcm4oJy8tL2FsbCBzZWFyY2ggZW5kcG9pbnQgaXMgZGVwcmVjYXRlZCwgbWlnaHQgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciByZWxlYXNlJyk7XG4gICAgcmVzLnN0YXR1cygyMDApO1xuICAgIHJlcy5zZXQoSEVBREVSUy5DT05URU5UX1RZUEUsIEhFQURFUlMuSlNPTl9DSEFSU0VUKTtcblxuICAgIC8qXG4gICAgICogT2ZmaWNhbCBOUE0gcmVnaXN0cnkgKHJlZ2lzdHJ5Lm5wbWpzLm9yZykgbm8gbG9uZ2VyIHJldHVybiB3aG9sZSBkYXRhYmFzZSxcbiAgICAgKiBUaGV5IG9ubHkgcmV0dXJuIHBhY2thZ2VzIG1hdGNoZWQgd2l0aCBrZXl3b3JkIGluIGByZWZlcmVyOiBzZWFyY2ggcGtnLW5hbWVgLFxuICAgICAqIEFuZCBOUE0gY2xpZW50IHdpbGwgcmVxdWVzdCBzZXJ2ZXIgaW4gZXZlcnkgc2VhcmNoLlxuICAgICAqXG4gICAgICogVGhlIG1hZ2ljIG51bWJlciA5OTk5OSB3YXMgc2VudCBieSBOUE0gcmVnaXN0cnkuIE1vZGlmeSBpdCBtYXkgY2F1c2VkIHN0cmFuZ2VcbiAgICAgKiBiZWhhdmlvdXIgaW4gdGhlIGZ1dHVyZS5cbiAgICAgKlxuICAgICAqIEJUVzogTlBNIHdpbGwgbm90IHJldHVybiByZXN1bHQgaWYgdXNlci1hZ2VudCBkb2VzIG5vdCBjb250YWluIHN0cmluZyAnbnBtJyxcbiAgICAgKiBTZWU6IG1ldGhvZCAncmVxdWVzdCcgaW4gdXAtc3RvcmFnZS5qc1xuICAgICAqXG4gICAgICogSWYgdGhlcmUgaXMgbm8gY2FjaGUgaW4gbG9jYWwsIE5QTSB3aWxsIHJlcXVlc3QgLy0vYWxsLCB0aGVuIGdldCByZXNwb25zZSB3aXRoXG4gICAgICogX3VwZGF0ZWQ6IDk5OTk5LCAnRGF0ZScgaW4gcmVzcG9uc2UgaGVhZGVyIHdhcyBNb24sIDEwIE9jdCAxOTgzIDAwOjEyOjQ4IEdNVCxcbiAgICAgKiB0aGlzIHdpbGwgbWFrZSBOUE0gYWx3YXlzIHF1ZXJ5IGZyb20gc2VydmVyXG4gICAgICpcbiAgICAgKiBEYXRhIHN0cnVjdHVyZSBhbHNvIGRpZmZlcmVudCwgd2hlbCByZXF1ZXN0IC8tL2FsbCwgcmVzcG9uc2UgaXMgYW4gb2JqZWN0LCBidXRcbiAgICAgKiB3aGVuIHJlcXVlc3QgLy0vYWxsL3NpbmNlLCByZXNwb25zZSBpcyBhbiBhcnJheVxuICAgICAqL1xuICAgIGNvbnN0IHJlc3BTaG91bGRCZUFycmF5ID0gcmVxLnBhdGguZW5kc1dpdGgoJy9zaW5jZScpO1xuICAgIGlmICghcmVzcFNob3VsZEJlQXJyYXkpIHtcbiAgICAgIHJlcy5zZXQoJ0RhdGUnLCAnTW9uLCAxMCBPY3QgMTk4MyAwMDoxMjo0OCBHTVQnKTtcbiAgICB9XG4gICAgY29uc3QgY2hlY2tfZmluaXNoID0gZnVuY3Rpb24gKCk6IHZvaWQge1xuICAgICAgaWYgKCFyZWNlaXZlZF9lbmQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHByb2Nlc3NpbmdfcGtncykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAocmVzcG9uc2VfZmluaXNoZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcmVzcG9uc2VfZmluaXNoZWQgPSB0cnVlO1xuICAgICAgaWYgKHJlc3BTaG91bGRCZUFycmF5KSB7XG4gICAgICAgIHJlcy5lbmQoJ11cXG4nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlcy5lbmQoJ31cXG4nKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgaWYgKHJlc3BTaG91bGRCZUFycmF5KSB7XG4gICAgICByZXMud3JpdGUoJ1snKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzLndyaXRlKCd7XCJfdXBkYXRlZFwiOicgKyA5OTk5OSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RyZWFtID0gc3RvcmFnZS5zZWFyY2gocmVxLnF1ZXJ5LnN0YXJ0a2V5IHx8IDAsIHsgcmVxOiByZXEgfSk7XG5cbiAgICBzdHJlYW0ub24oJ2RhdGEnLCBmdW5jdGlvbiBlYWNoKHBrZykge1xuICAgICAgcHJvY2Vzc2luZ19wa2dzKys7XG5cbiAgICAgIGF1dGguYWxsb3dfYWNjZXNzKHsgcGFja2FnZU5hbWU6IHBrZy5uYW1lIH0sIHJlcS5yZW1vdGVfdXNlciwgZnVuY3Rpb24gKGVyciwgYWxsb3dlZCkge1xuICAgICAgICBwcm9jZXNzaW5nX3BrZ3MtLTtcblxuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgaWYgKGVyci5zdGF0dXMgJiYgU3RyaW5nKGVyci5zdGF0dXMpLm1hdGNoKC9eNFxcZFxcZCQvKSkge1xuICAgICAgICAgICAgLy8gYXV0aCBwbHVnaW4gcmV0dXJucyA0eHggdXNlciBlcnJvcixcbiAgICAgICAgICAgIC8vIHRoYXQncyBlcXVpdmFsZW50IG9mICFhbGxvd2VkIGJhc2ljYWxseVxuICAgICAgICAgICAgYWxsb3dlZCA9IGZhbHNlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdHJlYW0uYWJvcnQoZXJyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYWxsb3dlZCkge1xuICAgICAgICAgIGlmIChyZXNwU2hvdWxkQmVBcnJheSkge1xuICAgICAgICAgICAgcmVzLndyaXRlKGAke2ZpcnN0UGFja2FnZSA/ICcnIDogJywnfSR7SlNPTi5zdHJpbmdpZnkocGtnKX1cXG5gKTtcbiAgICAgICAgICAgIGlmIChmaXJzdFBhY2thZ2UpIHtcbiAgICAgICAgICAgICAgZmlyc3RQYWNrYWdlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlcy53cml0ZSgnLFxcbicgKyBKU09OLnN0cmluZ2lmeShwa2cubmFtZSkgKyAnOicgKyBKU09OLnN0cmluZ2lmeShwa2cpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjaGVja19maW5pc2goKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgc3RyZWFtLm9uKCdlcnJvcicsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignc2VhcmNoIGAvLS9hbGwgZW5kcG9pbnQgaGFzIGZhaWxlZCBAe2Vycn0nLCBlcnIpO1xuICAgICAgcmVjZWl2ZWRfZW5kID0gdHJ1ZTtcbiAgICAgIGNoZWNrX2ZpbmlzaCgpO1xuICAgIH0pO1xuXG4gICAgc3RyZWFtLm9uKCdlbmQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICByZWNlaXZlZF9lbmQgPSB0cnVlO1xuICAgICAgY2hlY2tfZmluaXNoKCk7XG4gICAgfSk7XG4gIH0pO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxXQUFBLEdBQUFDLE9BQUE7QUFFQSxJQUFBQyxVQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxPQUFBLEdBQUFGLE9BQUE7QUFFZSxTQUFBRyxTQUFVQyxLQUFLLEVBQUVDLElBQUksRUFBRUMsT0FBTyxFQUFRO0VBQ25EO0VBQ0FGLEtBQUssQ0FBQ0csR0FBRyxDQUFDQyxnQ0FBb0IsQ0FBQ0MsaUJBQWlCLEVBQUUsVUFBVUMsR0FBRyxFQUFFQyxHQUFHLEVBQUU7SUFDcEUsSUFBSUMsWUFBWSxHQUFHLEtBQUs7SUFDeEIsSUFBSUMsaUJBQWlCLEdBQUcsS0FBSztJQUM3QixJQUFJQyxlQUFlLEdBQUcsQ0FBQztJQUN2QixJQUFJQyxZQUFZLEdBQUcsSUFBSTtJQUN2QkMsY0FBTSxDQUFDQyxJQUFJLENBQUMsa0ZBQWtGLENBQUM7SUFDL0ZOLEdBQUcsQ0FBQ08sTUFBTSxDQUFDLEdBQUcsQ0FBQztJQUNmUCxHQUFHLENBQUNRLEdBQUcsQ0FBQ0Msa0JBQU8sQ0FBQ0MsWUFBWSxFQUFFRCxrQkFBTyxDQUFDRSxZQUFZLENBQUM7O0lBRW5EO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUNJLE1BQU1DLGlCQUFpQixHQUFHYixHQUFHLENBQUNjLElBQUksQ0FBQ0MsUUFBUSxDQUFDLFFBQVEsQ0FBQztJQUNyRCxJQUFJLENBQUNGLGlCQUFpQixFQUFFO01BQ3RCWixHQUFHLENBQUNRLEdBQUcsQ0FBQyxNQUFNLEVBQUUsK0JBQStCLENBQUM7SUFDbEQ7SUFDQSxNQUFNTyxZQUFZLEdBQUcsU0FBQUEsQ0FBQSxFQUFrQjtNQUNyQyxJQUFJLENBQUNkLFlBQVksRUFBRTtRQUNqQjtNQUNGO01BQ0EsSUFBSUUsZUFBZSxFQUFFO1FBQ25CO01BQ0Y7TUFDQSxJQUFJRCxpQkFBaUIsRUFBRTtRQUNyQjtNQUNGO01BQ0FBLGlCQUFpQixHQUFHLElBQUk7TUFDeEIsSUFBSVUsaUJBQWlCLEVBQUU7UUFDckJaLEdBQUcsQ0FBQ2dCLEdBQUcsQ0FBQyxLQUFLLENBQUM7TUFDaEIsQ0FBQyxNQUFNO1FBQ0xoQixHQUFHLENBQUNnQixHQUFHLENBQUMsS0FBSyxDQUFDO01BQ2hCO0lBQ0YsQ0FBQztJQUVELElBQUlKLGlCQUFpQixFQUFFO01BQ3JCWixHQUFHLENBQUNpQixLQUFLLENBQUMsR0FBRyxDQUFDO0lBQ2hCLENBQUMsTUFBTTtNQUNMakIsR0FBRyxDQUFDaUIsS0FBSyxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7SUFDbkM7SUFFQSxNQUFNQyxNQUFNLEdBQUd2QixPQUFPLENBQUN3QixNQUFNLENBQUNwQixHQUFHLENBQUNxQixLQUFLLENBQUNDLFFBQVEsSUFBSSxDQUFDLEVBQUU7TUFBRXRCLEdBQUcsRUFBRUE7SUFBSSxDQUFDLENBQUM7SUFFcEVtQixNQUFNLENBQUNJLEVBQUUsQ0FBQyxNQUFNLEVBQUUsU0FBU0MsSUFBSUEsQ0FBQ0MsR0FBRyxFQUFFO01BQ25DckIsZUFBZSxFQUFFO01BRWpCVCxJQUFJLENBQUMrQixZQUFZLENBQUM7UUFBRUMsV0FBVyxFQUFFRixHQUFHLENBQUNHO01BQUssQ0FBQyxFQUFFNUIsR0FBRyxDQUFDNkIsV0FBVyxFQUFFLFVBQVVDLEdBQUcsRUFBRUMsT0FBTyxFQUFFO1FBQ3BGM0IsZUFBZSxFQUFFO1FBRWpCLElBQUkwQixHQUFHLEVBQUU7VUFDUCxJQUFJQSxHQUFHLENBQUN0QixNQUFNLElBQUl3QixNQUFNLENBQUNGLEdBQUcsQ0FBQ3RCLE1BQU0sQ0FBQyxDQUFDeUIsS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQ3JEO1lBQ0E7WUFDQUYsT0FBTyxHQUFHLEtBQUs7VUFDakIsQ0FBQyxNQUFNO1lBQ0xaLE1BQU0sQ0FBQ2UsS0FBSyxDQUFDSixHQUFHLENBQUM7VUFDbkI7UUFDRjtRQUVBLElBQUlDLE9BQU8sRUFBRTtVQUNYLElBQUlsQixpQkFBaUIsRUFBRTtZQUNyQlosR0FBRyxDQUFDaUIsS0FBSyxDQUFDLEdBQUdiLFlBQVksR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHOEIsSUFBSSxDQUFDQyxTQUFTLENBQUNYLEdBQUcsQ0FBQyxJQUFJLENBQUM7WUFDL0QsSUFBSXBCLFlBQVksRUFBRTtjQUNoQkEsWUFBWSxHQUFHLEtBQUs7WUFDdEI7VUFDRixDQUFDLE1BQU07WUFDTEosR0FBRyxDQUFDaUIsS0FBSyxDQUFDLEtBQUssR0FBR2lCLElBQUksQ0FBQ0MsU0FBUyxDQUFDWCxHQUFHLENBQUNHLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBR08sSUFBSSxDQUFDQyxTQUFTLENBQUNYLEdBQUcsQ0FBQyxDQUFDO1VBQ3pFO1FBQ0Y7UUFFQVQsWUFBWSxDQUFDLENBQUM7TUFDaEIsQ0FBQyxDQUFDO0lBQ0osQ0FBQyxDQUFDO0lBRUZHLE1BQU0sQ0FBQ0ksRUFBRSxDQUFDLE9BQU8sRUFBRSxVQUFVTyxHQUFHLEVBQUU7TUFDaEN4QixjQUFNLENBQUMrQixLQUFLLENBQUMsMkNBQTJDLEVBQUVQLEdBQUcsQ0FBQztNQUM5RDVCLFlBQVksR0FBRyxJQUFJO01BQ25CYyxZQUFZLENBQUMsQ0FBQztJQUNoQixDQUFDLENBQUM7SUFFRkcsTUFBTSxDQUFDSSxFQUFFLENBQUMsS0FBSyxFQUFFLFlBQVk7TUFDM0JyQixZQUFZLEdBQUcsSUFBSTtNQUNuQmMsWUFBWSxDQUFDLENBQUM7SUFDaEIsQ0FBQyxDQUFDO0VBQ0osQ0FBQyxDQUFDO0FBQ0oiLCJpZ25vcmVMaXN0IjpbXX0=
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = _default;
|
|
7
|
+
var _debug = _interopRequireDefault(require("debug"));
|
|
8
|
+
var _lodash = _interopRequireDefault(require("lodash"));
|
|
9
|
+
var _constants = require("../../../lib/constants");
|
|
10
|
+
var _logger = require("../../../lib/logger");
|
|
11
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
12
|
+
const debug = (0, _debug.default)('verdaccio:star');
|
|
13
|
+
function _default(storage) {
|
|
14
|
+
const validateInputs = (newUsers, localUsers, username, isStar) => {
|
|
15
|
+
const isExistlocalUsers = _lodash.default.isNil(localUsers[username]) === false;
|
|
16
|
+
if (isStar && isExistlocalUsers && localUsers[username]) {
|
|
17
|
+
return true;
|
|
18
|
+
} else if (!isStar && isExistlocalUsers) {
|
|
19
|
+
return false;
|
|
20
|
+
} else if (!isStar && !isExistlocalUsers) {
|
|
21
|
+
return true;
|
|
22
|
+
}
|
|
23
|
+
return false;
|
|
24
|
+
};
|
|
25
|
+
return (req, res, next) => {
|
|
26
|
+
const name = req.params.package;
|
|
27
|
+
debug('starring a package for %o', name);
|
|
28
|
+
const afterChangePackage = function (err) {
|
|
29
|
+
if (err) {
|
|
30
|
+
return next(err);
|
|
31
|
+
}
|
|
32
|
+
_logger.logger.debug(`package ${name} starred by user ${req.remote_user?.name}`);
|
|
33
|
+
// we do not need
|
|
34
|
+
res.status(_constants.HTTP_STATUS.OK);
|
|
35
|
+
next({
|
|
36
|
+
success: true
|
|
37
|
+
});
|
|
38
|
+
};
|
|
39
|
+
storage.getPackage({
|
|
40
|
+
name,
|
|
41
|
+
req,
|
|
42
|
+
callback: function (err, info) {
|
|
43
|
+
if (err) {
|
|
44
|
+
return next(err);
|
|
45
|
+
}
|
|
46
|
+
const newStarUser = req.body[_constants.USERS];
|
|
47
|
+
const remoteUsername = req.remote_user.name;
|
|
48
|
+
const localStarUsers = info[_constants.USERS];
|
|
49
|
+
// Check is star or unstar
|
|
50
|
+
const isStar = Object.keys(newStarUser).includes(remoteUsername);
|
|
51
|
+
if (_lodash.default.isNil(localStarUsers) === false && validateInputs(newStarUser, localStarUsers, remoteUsername, isStar)) {
|
|
52
|
+
return afterChangePackage();
|
|
53
|
+
}
|
|
54
|
+
const users = isStar ? {
|
|
55
|
+
...localStarUsers,
|
|
56
|
+
[remoteUsername]: true
|
|
57
|
+
} : _lodash.default.reduce(localStarUsers, (users, value, key) => {
|
|
58
|
+
if (key !== remoteUsername) {
|
|
59
|
+
users[key] = value;
|
|
60
|
+
}
|
|
61
|
+
return users;
|
|
62
|
+
}, {});
|
|
63
|
+
storage.changePackage(name, {
|
|
64
|
+
...info,
|
|
65
|
+
users
|
|
66
|
+
}, req.body._rev, function (err) {
|
|
67
|
+
afterChangePackage(err);
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZGVidWciLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9sb2Rhc2giLCJfY29uc3RhbnRzIiwiX2xvZ2dlciIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsImRlYnVnIiwiYnVpbGREZWJ1ZyIsIl9kZWZhdWx0Iiwic3RvcmFnZSIsInZhbGlkYXRlSW5wdXRzIiwibmV3VXNlcnMiLCJsb2NhbFVzZXJzIiwidXNlcm5hbWUiLCJpc1N0YXIiLCJpc0V4aXN0bG9jYWxVc2VycyIsIl8iLCJpc05pbCIsInJlcSIsInJlcyIsIm5leHQiLCJuYW1lIiwicGFyYW1zIiwicGFja2FnZSIsImFmdGVyQ2hhbmdlUGFja2FnZSIsImVyciIsImxvZ2dlciIsInJlbW90ZV91c2VyIiwic3RhdHVzIiwiSFRUUF9TVEFUVVMiLCJPSyIsInN1Y2Nlc3MiLCJnZXRQYWNrYWdlIiwiY2FsbGJhY2siLCJpbmZvIiwibmV3U3RhclVzZXIiLCJib2R5IiwiVVNFUlMiLCJyZW1vdGVVc2VybmFtZSIsImxvY2FsU3RhclVzZXJzIiwiT2JqZWN0Iiwia2V5cyIsImluY2x1ZGVzIiwidXNlcnMiLCJyZWR1Y2UiLCJ2YWx1ZSIsImtleSIsImNoYW5nZVBhY2thZ2UiLCJfcmV2Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FwaS9lbmRwb2ludC9hcGkvc3Rhci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYnVpbGREZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgdHlwZSB7IFJlc3BvbnNlIH0gZnJvbSAnZXhwcmVzcyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuXG5pbXBvcnQgeyBIVFRQX1NUQVRVUywgVVNFUlMgfSBmcm9tICcuLi8uLi8uLi9saWIvY29uc3RhbnRzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4uLy4uLy4uL2xpYi9sb2dnZXInO1xuaW1wb3J0IHR5cGUgU3RvcmFnZSBmcm9tICcuLi8uLi8uLi9saWIvc3RvcmFnZSc7XG5pbXBvcnQgdHlwZSB7ICROZXh0RnVuY3Rpb25WZXIsICRSZXF1ZXN0RXh0ZW5kIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMnO1xuXG5jb25zdCBkZWJ1ZyA9IGJ1aWxkRGVidWcoJ3ZlcmRhY2NpbzpzdGFyJyk7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoXG4gIHN0b3JhZ2U6IFN0b3JhZ2Vcbik6IChyZXE6ICRSZXF1ZXN0RXh0ZW5kLCByZXM6IFJlc3BvbnNlLCBuZXh0OiAkTmV4dEZ1bmN0aW9uVmVyKSA9PiB2b2lkIHtcbiAgY29uc3QgdmFsaWRhdGVJbnB1dHMgPSAobmV3VXNlcnMsIGxvY2FsVXNlcnMsIHVzZXJuYW1lLCBpc1N0YXIpOiBib29sZWFuID0+IHtcbiAgICBjb25zdCBpc0V4aXN0bG9jYWxVc2VycyA9IF8uaXNOaWwobG9jYWxVc2Vyc1t1c2VybmFtZV0pID09PSBmYWxzZTtcbiAgICBpZiAoaXNTdGFyICYmIGlzRXhpc3Rsb2NhbFVzZXJzICYmIGxvY2FsVXNlcnNbdXNlcm5hbWVdKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKCFpc1N0YXIgJiYgaXNFeGlzdGxvY2FsVXNlcnMpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKCFpc1N0YXIgJiYgIWlzRXhpc3Rsb2NhbFVzZXJzKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9O1xuXG4gIHJldHVybiAocmVxOiAkUmVxdWVzdEV4dGVuZCwgcmVzOiBSZXNwb25zZSwgbmV4dDogJE5leHRGdW5jdGlvblZlcik6IHZvaWQgPT4ge1xuICAgIGNvbnN0IG5hbWUgPSByZXEucGFyYW1zLnBhY2thZ2U7XG4gICAgZGVidWcoJ3N0YXJyaW5nIGEgcGFja2FnZSBmb3IgJW8nLCBuYW1lKTtcbiAgICBjb25zdCBhZnRlckNoYW5nZVBhY2thZ2UgPSBmdW5jdGlvbiAoZXJyPzogRXJyb3IpIHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIG5leHQoZXJyKTtcbiAgICAgIH1cbiAgICAgIGxvZ2dlci5kZWJ1ZyhgcGFja2FnZSAke25hbWV9IHN0YXJyZWQgYnkgdXNlciAke3JlcS5yZW1vdGVfdXNlcj8ubmFtZX1gKTtcbiAgICAgIC8vIHdlIGRvIG5vdCBuZWVkXG4gICAgICByZXMuc3RhdHVzKEhUVFBfU1RBVFVTLk9LKTtcbiAgICAgIG5leHQoe1xuICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHN0b3JhZ2UuZ2V0UGFja2FnZSh7XG4gICAgICBuYW1lLFxuICAgICAgcmVxLFxuICAgICAgY2FsbGJhY2s6IGZ1bmN0aW9uIChlcnIsIGluZm8pIHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHJldHVybiBuZXh0KGVycik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmV3U3RhclVzZXIgPSByZXEuYm9keVtVU0VSU107XG4gICAgICAgIGNvbnN0IHJlbW90ZVVzZXJuYW1lID0gcmVxLnJlbW90ZV91c2VyLm5hbWU7XG4gICAgICAgIGNvbnN0IGxvY2FsU3RhclVzZXJzID0gaW5mb1tVU0VSU107XG4gICAgICAgIC8vIENoZWNrIGlzIHN0YXIgb3IgdW5zdGFyXG4gICAgICAgIGNvbnN0IGlzU3RhciA9IE9iamVjdC5rZXlzKG5ld1N0YXJVc2VyKS5pbmNsdWRlcyhyZW1vdGVVc2VybmFtZSk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBfLmlzTmlsKGxvY2FsU3RhclVzZXJzKSA9PT0gZmFsc2UgJiZcbiAgICAgICAgICB2YWxpZGF0ZUlucHV0cyhuZXdTdGFyVXNlciwgbG9jYWxTdGFyVXNlcnMsIHJlbW90ZVVzZXJuYW1lLCBpc1N0YXIpXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBhZnRlckNoYW5nZVBhY2thZ2UoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB1c2VycyA9IGlzU3RhclxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAuLi5sb2NhbFN0YXJVc2VycyxcbiAgICAgICAgICAgICAgW3JlbW90ZVVzZXJuYW1lXTogdHJ1ZSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IF8ucmVkdWNlKFxuICAgICAgICAgICAgICBsb2NhbFN0YXJVc2VycyxcbiAgICAgICAgICAgICAgKHVzZXJzLCB2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGtleSAhPT0gcmVtb3RlVXNlcm5hbWUpIHtcbiAgICAgICAgICAgICAgICAgIHVzZXJzW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVzZXJzO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB7fVxuICAgICAgICAgICAgKTtcbiAgICAgICAgc3RvcmFnZS5jaGFuZ2VQYWNrYWdlKG5hbWUsIHsgLi4uaW5mbywgdXNlcnMgfSwgcmVxLmJvZHkuX3JldiwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgIGFmdGVyQ2hhbmdlUGFja2FnZShlcnIpO1xuICAgICAgICB9KTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH07XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQUFBLE1BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUVBLElBQUFDLE9BQUEsR0FBQUYsc0JBQUEsQ0FBQUMsT0FBQTtBQUVBLElBQUFFLFVBQUEsR0FBQUYsT0FBQTtBQUNBLElBQUFHLE9BQUEsR0FBQUgsT0FBQTtBQUE2QyxTQUFBRCx1QkFBQUssQ0FBQSxXQUFBQSxDQUFBLElBQUFBLENBQUEsQ0FBQUMsVUFBQSxHQUFBRCxDQUFBLEtBQUFFLE9BQUEsRUFBQUYsQ0FBQTtBQUk3QyxNQUFNRyxLQUFLLEdBQUcsSUFBQUMsY0FBVSxFQUFDLGdCQUFnQixDQUFDO0FBQzNCLFNBQUFDLFNBQ2JDLE9BQWdCLEVBQ3NEO0VBQ3RFLE1BQU1DLGNBQWMsR0FBR0EsQ0FBQ0MsUUFBUSxFQUFFQyxVQUFVLEVBQUVD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
|