@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.
Files changed (53) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +38 -0
  3. package/bin/verdaccio +3 -0
  4. package/bin/verdaccio-canary +3 -0
  5. package/build/api/debug/index.js +28 -0
  6. package/build/api/endpoint/api/dist-tags.js +77 -0
  7. package/build/api/endpoint/api/package.js +103 -0
  8. package/build/api/endpoint/api/ping.js +13 -0
  9. package/build/api/endpoint/api/publish.js +359 -0
  10. package/build/api/endpoint/api/search.js +107 -0
  11. package/build/api/endpoint/api/star.js +73 -0
  12. package/build/api/endpoint/api/stars.js +42 -0
  13. package/build/api/endpoint/api/user.js +84 -0
  14. package/build/api/endpoint/api/v1/profile.js +69 -0
  15. package/build/api/endpoint/api/v1/search.js +181 -0
  16. package/build/api/endpoint/api/v1/token.js +140 -0
  17. package/build/api/endpoint/api/whoami.js +15 -0
  18. package/build/api/endpoint/index.js +58 -0
  19. package/build/api/index.js +105 -0
  20. package/build/api/middleware.js +56 -0
  21. package/build/api/web/api/index.js +31 -0
  22. package/build/api/web/api/package.js +165 -0
  23. package/build/api/web/api/search.js +53 -0
  24. package/build/api/web/api/user.js +70 -0
  25. package/build/api/web/api/utils.js +14 -0
  26. package/build/api/web/html/favicon.ico +0 -0
  27. package/build/api/web/index.js +96 -0
  28. package/build/index.js +76 -0
  29. package/build/lib/auth-utils.js +16 -0
  30. package/build/lib/bootstrap.js +167 -0
  31. package/build/lib/cli/cli.js +26 -0
  32. package/build/lib/cli/commands/info.js +26 -0
  33. package/build/lib/cli/commands/init.js +78 -0
  34. package/build/lib/cli/commands/version.js +17 -0
  35. package/build/lib/cli/utils.js +14 -0
  36. package/build/lib/cli.js +16 -0
  37. package/build/lib/config.js +22 -0
  38. package/build/lib/constants.js +121 -0
  39. package/build/lib/experiments.js +29 -0
  40. package/build/lib/local-storage.js +760 -0
  41. package/build/lib/logger/index.js +21 -0
  42. package/build/lib/metadata-utils.js +39 -0
  43. package/build/lib/run-server.js +122 -0
  44. package/build/lib/storage-utils.js +282 -0
  45. package/build/lib/storage.js +676 -0
  46. package/build/lib/up-storage.js +605 -0
  47. package/build/lib/uplink-util.js +36 -0
  48. package/build/lib/utils.js +265 -0
  49. package/conf/.gitkeep +0 -0
  50. package/index.js +1 -0
  51. package/package.json +156 -0
  52. package/security.txt +5 -0
  53. package/systemd/verdaccio.service +11 -0
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.setupUpLinks = setupUpLinks;
7
+ exports.updateVersionsHiddenUpLink = updateVersionsHiddenUpLink;
8
+ var _upStorage = _interopRequireDefault(require("./up-storage"));
9
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
+ /**
11
+ * Set up the Up Storage for each link.
12
+ */
13
+ function setupUpLinks(config) {
14
+ const uplinks = {};
15
+ for (const uplinkName in config.uplinks) {
16
+ if (Object.prototype.hasOwnProperty.call(config.uplinks, uplinkName)) {
17
+ // instance for each up-link definition
18
+ const proxy = new _upStorage.default(config.uplinks[uplinkName], config);
19
+ proxy.upname = uplinkName;
20
+ uplinks[uplinkName] = proxy;
21
+ }
22
+ }
23
+ return uplinks;
24
+ }
25
+ function updateVersionsHiddenUpLink(versions, upLink) {
26
+ for (const i in versions) {
27
+ if (Object.prototype.hasOwnProperty.call(versions, i)) {
28
+ const version = versions[i];
29
+
30
+ // holds a "hidden" value to be used by the package storage.
31
+
32
+ version[Symbol.for('__verdaccio_uplink')] = upLink.upname;
33
+ }
34
+ }
35
+ }
36
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfdXBTdG9yYWdlIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJzZXR1cFVwTGlua3MiLCJjb25maWciLCJ1cGxpbmtzIiwidXBsaW5rTmFtZSIsIk9iamVjdCIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsInByb3h5IiwiUHJveHlTdG9yYWdlIiwidXBuYW1lIiwidXBkYXRlVmVyc2lvbnNIaWRkZW5VcExpbmsiLCJ2ZXJzaW9ucyIsInVwTGluayIsImkiLCJ2ZXJzaW9uIiwiU3ltYm9sIiwiZm9yIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi91cGxpbmstdXRpbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25maWcsIFZlcnNpb25zIH0gZnJvbSAnQHZlcmRhY2Npby90eXBlcyc7XG5cbmltcG9ydCBQcm94eVN0b3JhZ2UgZnJvbSAnLi91cC1zdG9yYWdlJztcblxuLyoqXG4gKiBTZXQgdXAgdGhlIFVwIFN0b3JhZ2UgZm9yIGVhY2ggbGluay5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldHVwVXBMaW5rcyhjb25maWc6IENvbmZpZyk6IFJlY29yZDxzdHJpbmcsIFByb3h5U3RvcmFnZT4ge1xuICBjb25zdCB1cGxpbmtzID0ge307XG5cbiAgZm9yIChjb25zdCB1cGxpbmtOYW1lIGluIGNvbmZpZy51cGxpbmtzKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjb25maWcudXBsaW5rcywgdXBsaW5rTmFtZSkpIHtcbiAgICAgIC8vIGluc3RhbmNlIGZvciBlYWNoIHVwLWxpbmsgZGVmaW5pdGlvblxuICAgICAgY29uc3QgcHJveHkgPSBuZXcgUHJveHlTdG9yYWdlKGNvbmZpZy51cGxpbmtzW3VwbGlua05hbWVdLCBjb25maWcpO1xuICAgICAgcHJveHkudXBuYW1lID0gdXBsaW5rTmFtZTtcblxuICAgICAgdXBsaW5rc1t1cGxpbmtOYW1lXSA9IHByb3h5O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1cGxpbmtzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlVmVyc2lvbnNIaWRkZW5VcExpbmsodmVyc2lvbnM6IFZlcnNpb25zLCB1cExpbmspOiB2b2lkIHtcbiAgZm9yIChjb25zdCBpIGluIHZlcnNpb25zKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh2ZXJzaW9ucywgaSkpIHtcbiAgICAgIGNvbnN0IHZlcnNpb24gPSB2ZXJzaW9uc1tpXTtcblxuICAgICAgLy8gaG9sZHMgYSBcImhpZGRlblwiIHZhbHVlIHRvIGJlIHVzZWQgYnkgdGhlIHBhY2thZ2Ugc3RvcmFnZS5cblxuICAgICAgdmVyc2lvbltTeW1ib2wuZm9yKCdfX3ZlcmRhY2Npb191cGxpbmsnKV0gPSB1cExpbmsudXBuYW1lO1xuICAgIH1cbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBRUEsSUFBQUEsVUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQXdDLFNBQUFELHVCQUFBRSxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsS0FBQUUsT0FBQSxFQUFBRixDQUFBO0FBRXhDO0FBQ0E7QUFDQTtBQUNPLFNBQVNHLFlBQVlBLENBQUNDLE1BQWMsRUFBZ0M7RUFDekUsTUFBTUMsT0FBTyxHQUFHLENBQUMsQ0FBQztFQUVsQixLQUFLLE1BQU1DLFVBQVUsSUFBSUYsTUFBTSxDQUFDQyxPQUFPLEVBQUU7SUFDdkMsSUFBSUUsTUFBTSxDQUFDQyxTQUFTLENBQUNDLGNBQWMsQ0FBQ0MsSUFBSSxDQUFDTixNQUFNLENBQUNDLE9BQU8sRUFBRUMsVUFBVSxDQUFDLEVBQUU7TUFDcEU7TUFDQSxNQUFNSyxLQUFLLEdBQUcsSUFBSUMsa0JBQVksQ0FBQ1IsTUFBTSxDQUFDQyxPQUFPLENBQUNDLFVBQVUsQ0FBQyxFQUFFRixNQUFNLENBQUM7TUFDbEVPLEtBQUssQ0FBQ0UsTUFBTSxHQUFHUCxVQUFVO01BRXpCRCxPQUFPLENBQUNDLFVBQVUsQ0FBQyxHQUFHSyxLQUFLO0lBQzdCO0VBQ0Y7RUFFQSxPQUFPTixPQUFPO0FBQ2hCO0FBRU8sU0FBU1MsMEJBQTBCQSxDQUFDQyxRQUFrQixFQUFFQyxNQUFNLEVBQVE7RUFDM0UsS0FBSyxNQUFNQyxDQUFDLElBQUlGLFFBQVEsRUFBRTtJQUN4QixJQUFJUixNQUFNLENBQUNDLFNBQVMsQ0FBQ0MsY0FBYyxDQUFDQyxJQUFJLENBQUNLLFFBQVEsRUFBRUUsQ0FBQyxDQUFDLEVBQUU7TUFDckQsTUFBTUMsT0FBTyxHQUFHSCxRQUFRLENBQUNFLENBQUMsQ0FBQzs7TUFFM0I7O01BRUFDLE9BQU8sQ0FBQ0MsTUFBTSxDQUFDQyxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxHQUFHSixNQUFNLENBQUNILE1BQU07SUFDM0Q7RUFDRjtBQUNGIiwiaWdub3JlTGlzdCI6W119
@@ -0,0 +1,265 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.ErrorCode = void 0;
7
+ exports.addScope = addScope;
8
+ Object.defineProperty(exports, "buildToken", {
9
+ enumerable: true,
10
+ get: function () {
11
+ return _utils.buildToken;
12
+ }
13
+ });
14
+ exports.deleteProperties = deleteProperties;
15
+ exports.encodeScopedUri = encodeScopedUri;
16
+ exports.getVersion = getVersion;
17
+ exports.hasDiffOneKey = hasDiffOneKey;
18
+ exports.hasLogin = hasLogin;
19
+ exports.initLogger = initLogger;
20
+ exports.isObject = void 0;
21
+ exports.isObjectOrArray = isObjectOrArray;
22
+ exports.isRelatedToDeprecation = isRelatedToDeprecation;
23
+ exports.isVersionValid = isVersionValid;
24
+ exports.logHTTPSWarning = logHTTPSWarning;
25
+ exports.normalizeDistTags = normalizeDistTags;
26
+ Object.defineProperty(exports, "parseConfigFile", {
27
+ enumerable: true,
28
+ get: function () {
29
+ return _config.parseConfigFile;
30
+ }
31
+ });
32
+ exports.parseInterval = parseInterval;
33
+ exports.parseReadme = parseReadme;
34
+ exports.resolveConfigPath = void 0;
35
+ exports.sortByName = sortByName;
36
+ exports.tagVersion = tagVersion;
37
+ var _debug = _interopRequireDefault(require("debug"));
38
+ var _lodash = _interopRequireDefault(require("lodash"));
39
+ var _nodePath = _interopRequireDefault(require("node:path"));
40
+ var _semver = _interopRequireDefault(require("semver"));
41
+ var _config = require("@verdaccio/config");
42
+ var _core = require("@verdaccio/core");
43
+ var _utils = require("@verdaccio/utils");
44
+ var _constants = require("./constants");
45
+ var _logger = require("./logger");
46
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
47
+ const debug = (0, _debug.default)('verdaccio:lib:utils');
48
+ const {
49
+ getBadData,
50
+ getBadRequest,
51
+ getCode,
52
+ getConflict,
53
+ getForbidden,
54
+ getInternalError,
55
+ getNotFound,
56
+ getServiceUnavailable,
57
+ getUnauthorized
58
+ } = _core.errorUtils;
59
+ function initLogger(logConfig) {
60
+ if (logConfig.logs) {
61
+ logConfig.log = logConfig.logs;
62
+ _core.warningUtils.emit(_core.warningUtils.Codes.VERWAR002);
63
+ }
64
+ debug('initializing logger with config: %o', logConfig.log);
65
+ (0, _logger.setup)(logConfig.log);
66
+ }
67
+ function addScope(scope, packageName) {
68
+ return `@${scope}/${packageName}`;
69
+ }
70
+
71
+ /**
72
+ * Check whether an element is an Object
73
+ * @param {*} obj the element
74
+ * @return {Boolean}
75
+ */
76
+ const isObject = exports.isObject = _core.validationUtils.isObject;
77
+
78
+ /**
79
+ * @deprecated not used un v6
80
+ */
81
+ function isObjectOrArray(obj) {
82
+ return _lodash.default.isObject(obj) && _lodash.default.isNull(obj) === false;
83
+ }
84
+ function tagVersion(data, version, tag) {
85
+ if (tag && data[_constants.DIST_TAGS][tag] !== version && _semver.default.parse(version, true)) {
86
+ // valid version - store
87
+ data[_constants.DIST_TAGS][tag] = version;
88
+ return true;
89
+ }
90
+ return false;
91
+ }
92
+
93
+ /**
94
+ * Gets version from a package object taking into account semver weirdness.
95
+ * @return {String} return the semantic version of a package
96
+ */
97
+ function getVersion(pkg, version) {
98
+ // this condition must allow cast
99
+ if (_lodash.default.isNil(pkg.versions[version]) === false) {
100
+ return pkg.versions[version];
101
+ }
102
+ try {
103
+ version = _semver.default.parse(version, true);
104
+ for (const versionItem in pkg.versions) {
105
+ if (version.compare(_semver.default.parse(versionItem, true)) === 0) {
106
+ return pkg.versions[versionItem];
107
+ }
108
+ }
109
+ } catch {
110
+ return undefined;
111
+ }
112
+ }
113
+
114
+ /**
115
+ * Flatten arrays of tags.
116
+ * @param {*} data
117
+ */
118
+ function normalizeDistTags(pkg) {
119
+ let sorted;
120
+ if (!pkg[_constants.DIST_TAGS].latest) {
121
+ // overwrite latest with highest known version based on semver sort
122
+ sorted = _core.pkgUtils.semverSort(Object.keys(pkg.versions));
123
+ if (sorted && sorted.length) {
124
+ pkg[_constants.DIST_TAGS].latest = sorted.pop();
125
+ }
126
+ }
127
+ for (const tag in pkg[_constants.DIST_TAGS]) {
128
+ if (_lodash.default.isArray(pkg[_constants.DIST_TAGS][tag])) {
129
+ if (pkg[_constants.DIST_TAGS][tag].length) {
130
+ // sort array
131
+ // FIXME: this is clearly wrong, we need to research why this is like this.
132
+ sorted = _core.pkgUtils.semverSort(pkg[_constants.DIST_TAGS][tag]);
133
+ if (sorted.length) {
134
+ // use highest version based on semver sort
135
+ pkg[_constants.DIST_TAGS][tag] = sorted.pop();
136
+ }
137
+ } else {
138
+ delete pkg[_constants.DIST_TAGS][tag];
139
+ }
140
+ } else if (_lodash.default.isString(pkg[_constants.DIST_TAGS][tag])) {
141
+ if (!_semver.default.parse(pkg[_constants.DIST_TAGS][tag], true)) {
142
+ // if the version is invalid, delete the dist-tag entry
143
+ delete pkg[_constants.DIST_TAGS][tag];
144
+ }
145
+ }
146
+ }
147
+ }
148
+ const parseIntervalTable = {
149
+ '': 1000,
150
+ ms: 1,
151
+ s: 1000,
152
+ m: 60 * 1000,
153
+ h: 60 * 60 * 1000,
154
+ d: 86400000,
155
+ w: 7 * 86400000,
156
+ M: 30 * 86400000,
157
+ y: 365 * 86400000
158
+ };
159
+
160
+ /**
161
+ * Parse an internal string to number
162
+ * @param {*} interval
163
+ * @return {Number}
164
+ */
165
+ function parseInterval(interval) {
166
+ if (typeof interval === 'number') {
167
+ return interval * 1000;
168
+ }
169
+ let result = 0;
170
+ let last_suffix = Infinity;
171
+ interval.split(/\s+/).forEach(function (x) {
172
+ if (!x) {
173
+ return;
174
+ }
175
+ const m = x.match(/^((0|[1-9][0-9]*)(\.[0-9]+)?)(ms|s|m|h|d|w|M|y|)$/);
176
+ if (!m || parseIntervalTable[m[4]] >= last_suffix || m[4] === '' && last_suffix !== Infinity) {
177
+ throw Error('invalid interval: ' + interval);
178
+ }
179
+ last_suffix = parseIntervalTable[m[4]];
180
+ result += Number(m[1]) * parseIntervalTable[m[4]];
181
+ });
182
+ return result;
183
+ }
184
+ const ErrorCode = exports.ErrorCode = {
185
+ getConflict,
186
+ getBadData,
187
+ getBadRequest,
188
+ getInternalError,
189
+ getUnauthorized,
190
+ getForbidden,
191
+ getServiceUnavailable,
192
+ getNotFound,
193
+ getCode
194
+ };
195
+ function sortByName(packages, orderAscending = true) {
196
+ return packages.slice().sort(function (a, b) {
197
+ const comparatorNames = a.name.toLowerCase() < b.name.toLowerCase();
198
+ return orderAscending ? comparatorNames ? -1 : 1 : comparatorNames ? 1 : -1;
199
+ });
200
+ }
201
+ function deleteProperties(propertiesToDelete, objectItem) {
202
+ _lodash.default.forEach(propertiesToDelete, property => {
203
+ delete objectItem[property];
204
+ });
205
+ return objectItem;
206
+ }
207
+
208
+ /**
209
+ * parse package readme - markdown/ascii
210
+ * @param {String} packageName name of package
211
+ * @param {String} readme package readme
212
+
213
+ * @return {String} converted html template
214
+ */
215
+ // TODO: rename, does not parse anymore
216
+ function parseReadme(packageName, readme) {
217
+ if (_lodash.default.isEmpty(readme) === false) {
218
+ return readme;
219
+ }
220
+
221
+ // logs readme not found error
222
+ _logger.logger.info({
223
+ packageName
224
+ }, '@{packageName}: No readme found');
225
+ return 'ERROR: No README data found!';
226
+ }
227
+ function encodeScopedUri(packageName) {
228
+ return packageName.replace(/\//g, '%2f');
229
+ }
230
+ function hasDiffOneKey(versions) {
231
+ return Object.keys(versions).length !== 1;
232
+ }
233
+ function isVersionValid(packageMeta, packageVersion) {
234
+ const hasVersion = typeof packageVersion !== 'undefined';
235
+ if (!hasVersion) {
236
+ return false;
237
+ }
238
+ const hasMatchVersion = Object.keys(packageMeta.versions).includes(packageVersion);
239
+ return hasMatchVersion;
240
+ }
241
+ function isRelatedToDeprecation(pkgInfo) {
242
+ const {
243
+ versions
244
+ } = pkgInfo;
245
+ for (const version in versions) {
246
+ if (Object.prototype.hasOwnProperty.call(versions[version], 'deprecated')) {
247
+ return true;
248
+ }
249
+ }
250
+ return false;
251
+ }
252
+ const resolveConfigPath = function (storageLocation, file) {
253
+ return _nodePath.default.resolve(_nodePath.default.dirname(storageLocation), file);
254
+ };
255
+ exports.resolveConfigPath = resolveConfigPath;
256
+ function logHTTPSWarning(storageLocation) {
257
+ _logger.logger.fatal(['You have enabled HTTPS and need to specify either ', ' "https.key" and "https.cert" or ', ' "https.pfx" and optionally "https.passphrase" ', 'to run https server', '',
258
+ // commands are borrowed from node.js docs
259
+ 'To quickly create self-signed certificate, use:', ' $ openssl genrsa -out ' + resolveConfigPath(storageLocation, _constants.keyPem) + ' 2048', ' $ openssl req -new -sha256 -key ' + resolveConfigPath(storageLocation, _constants.keyPem) + ' -out ' + resolveConfigPath(storageLocation, _constants.csrPem), ' $ openssl x509 -req -in ' + resolveConfigPath(storageLocation, _constants.csrPem) + ' -signkey ' + resolveConfigPath(storageLocation, _constants.keyPem) + ' -out ' + resolveConfigPath(storageLocation, _constants.certPem), '', 'And then add to config file (' + storageLocation + '):', ' https:', ` key: ${resolveConfigPath(storageLocation, _constants.keyPem)}`, ` cert: ${resolveConfigPath(storageLocation, _constants.certPem)}`].join('\n'));
260
+ process.exit(2);
261
+ }
262
+ function hasLogin(config) {
263
+ return _lodash.default.isNil(config?.web?.login) || config?.web?.login === true;
264
+ }
265
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZGVidWciLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9sb2Rhc2giLCJfbm9kZVBhdGgiLCJfc2VtdmVyIiwiX2NvbmZpZyIsIl9jb3JlIiwiX3V0aWxzIiwiX2NvbnN0YW50cyIsIl9sb2dnZXIiLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJkZWJ1ZyIsImNyZWF0ZURlYnVnIiwiZ2V0QmFkRGF0YSIsImdldEJhZFJlcXVlc3QiLCJnZXRDb2RlIiwiZ2V0Q29uZmxpY3QiLCJnZXRGb3JiaWRkZW4iLCJnZXRJbnRlcm5hbEVycm9yIiwiZ2V0Tm90Rm91bmQiLCJnZXRTZXJ2aWNlVW5hdmFpbGFibGUiLCJnZXRVbmF1dGhvcml6ZWQiLCJlcnJvclV0aWxzIiwiaW5pdExvZ2dlciIsImxvZ0NvbmZpZyIsImxvZ3MiLCJsb2ciLCJ3YXJuaW5nVXRpbHMiLCJlbWl0IiwiQ29kZXMiLCJWRVJXQVIwMDIiLCJzZXR1cCIsImFkZFNjb3BlIiwic2NvcGUiLCJwYWNrYWdlTmFtZSIsImlzT2JqZWN0IiwiZXhwb3J0cyIsInZhbGlkYXRpb25VdGlscyIsImlzT2JqZWN0T3JBcnJheSIsIm9iaiIsIl8iLCJpc051bGwiLCJ0YWdWZXJzaW9uIiwiZGF0YSIsInZlcnNpb24iLCJ0YWciLCJESVNUX1RBR1MiLCJzZW12ZXIiLCJwYXJzZSIsImdldFZlcnNpb24iLCJwa2ciLCJpc05pbCIsInZlcnNpb25zIiwidmVyc2lvbkl0ZW0iLCJjb21wYXJlIiwidW5kZWZpbmVkIiwibm9ybWFsaXplRGlzdFRhZ3MiLCJzb3J0ZWQiLCJsYXRlc3QiLCJwa2dVdGlscyIsInNlbXZlclNvcnQiLCJPYmplY3QiLCJrZXlzIiwibGVuZ3RoIiwicG9wIiwiaXNBcnJheSIsImlzU3RyaW5nIiwicGFyc2VJbnRlcnZhbFRhYmxlIiwibXMiLCJzIiwibSIsImgiLCJkIiwidyIsIk0iLCJ5IiwicGFyc2VJbnRlcnZhbCIsImludGVydmFsIiwicmVzdWx0IiwibGFzdF9zdWZmaXgiLCJJbmZpbml0eSIsInNwbGl0IiwiZm9yRWFjaCIsIngiLCJtYXRjaCIsIkVycm9yIiwiTnVtYmVyIiwiRXJyb3JDb2RlIiwic29ydEJ5TmFtZSIsInBhY2thZ2VzIiwib3JkZXJBc2NlbmRpbmciLCJzbGljZSIsInNvcnQiLCJhIiwiYiIsImNvbXBhcmF0b3JOYW1lcyIsIm5hbWUiLCJ0b0xvd2VyQ2FzZSIsImRlbGV0ZVByb3BlcnRpZXMiLCJwcm9wZXJ0aWVzVG9EZWxldGUiLCJvYmplY3RJdGVtIiwicHJvcGVydHkiLCJwYXJzZVJlYWRtZSIsInJlYWRtZSIsImlzRW1wdHkiLCJsb2dnZXIiLCJpbmZvIiwiZW5jb2RlU2NvcGVkVXJpIiwicmVwbGFjZSIsImhhc0RpZmZPbmVLZXkiLCJpc1ZlcnNpb25WYWxpZCIsInBhY2thZ2VNZXRhIiwicGFja2FnZVZlcnNpb24iLCJoYXNWZXJzaW9uIiwiaGFzTWF0Y2hWZXJzaW9uIiwiaW5jbHVkZXMiLCJpc1JlbGF0ZWRUb0RlcHJlY2F0aW9uIiwicGtnSW5mbyIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsInJlc29sdmVDb25maWdQYXRoIiwic3RvcmFnZUxvY2F0aW9uIiwiZmlsZSIsInBhdGgiLCJyZXNvbHZlIiwiZGlybmFtZSIsImxvZ0hUVFBTV2FybmluZyIsImZhdGFsIiwia2V5UGVtIiwiY3NyUGVtIiwiY2VydFBlbSIsImpvaW4iLCJwcm9jZXNzIiwiZXhpdCIsImhhc0xvZ2luIiwiY29uZmlnIiwid2ViIiwibG9naW4iXSwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL3V0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjcmVhdGVEZWJ1ZyBmcm9tICdkZWJ1Zyc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCBzZW12ZXIgZnJvbSAnc2VtdmVyJztcblxuaW1wb3J0IHsgcGFyc2VDb25maWdGaWxlIH0gZnJvbSAnQHZlcmRhY2Npby9jb25maWcnO1xuaW1wb3J0IHsgZXJyb3JVdGlscywgcGtnVXRpbHMsIHZhbGlkYXRpb25VdGlscywgd2FybmluZ1V0aWxzIH0gZnJvbSAnQHZlcmRhY2Npby9jb3JlJztcbmltcG9ydCB7IENvbmZpZ1lhbWwsIExvZ2dlckNvbmZpZ0l0ZW0sIFN0cmluZ1ZhbHVlIH0gZnJvbSAnQHZlcmRhY2Npby90eXBlcyc7XG5pbXBvcnQgeyBDb25maWcsIE1hbmlmZXN0LCBWZXJzaW9uIH0gZnJvbSAnQHZlcmRhY2Npby90eXBlcyc7XG5pbXBvcnQgeyBidWlsZFRva2VuIGFzIGJ1aWxkVG9rZW5VdGlsIH0gZnJvbSAnQHZlcmRhY2Npby91dGlscyc7XG5cbmltcG9ydCB7IERJU1RfVEFHUywgY2VydFBlbSwgY3NyUGVtLCBrZXlQZW0gfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBsb2dnZXIsIHNldHVwIH0gZnJvbSAnLi9sb2dnZXInO1xuXG5jb25zdCBkZWJ1ZyA9IGNyZWF0ZURlYnVnKCd2ZXJkYWNjaW86bGliOnV0aWxzJyk7XG5cbmNvbnN0IHtcbiAgZ2V0QmFkRGF0YSxcbiAgZ2V0QmFkUmVxdWVzdCxcbiAgZ2V0Q29kZSxcbiAgZ2V0Q29uZmxpY3QsXG4gIGdldEZvcmJpZGRlbixcbiAgZ2V0SW50ZXJuYWxFcnJvcixcbiAgZ2V0Tm90Rm91bmQsXG4gIGdldFNlcnZpY2VVbmF2YWlsYWJsZSxcbiAgZ2V0VW5hdXRob3JpemVkLFxufSA9IGVycm9yVXRpbHM7XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0TG9nZ2VyKGxvZ0NvbmZpZzogQ29uZmlnWWFtbCkge1xuICBpZiAobG9nQ29uZmlnLmxvZ3MpIHtcbiAgICBsb2dDb25maWcubG9nID0gbG9nQ29uZmlnLmxvZ3M7XG4gICAgd2FybmluZ1V0aWxzLmVtaXQod2FybmluZ1V0aWxzLkNvZGVzLlZFUldBUjAwMik7XG4gIH1cbiAgZGVidWcoJ2luaXRpYWxpemluZyBsb2dnZXIgd2l0aCBjb25maWc6ICVvJywgbG9nQ29uZmlnLmxvZyk7XG4gIHNldHVwKGxvZ0NvbmZpZy5sb2cgYXMgTG9nZ2VyQ29uZmlnSXRlbSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRTY29wZShzY29wZTogc3RyaW5nLCBwYWNrYWdlTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBAJHtzY29wZX0vJHtwYWNrYWdlTmFtZX1gO1xufVxuXG4vKipcbiAqIENoZWNrIHdoZXRoZXIgYW4gZWxlbWVudCBpcyBhbiBPYmplY3RcbiAqIEBwYXJhbSB7Kn0gb2JqIHRoZSBlbGVtZW50XG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICovXG5leHBvcnQgY29uc3QgaXNPYmplY3QgPSB2YWxpZGF0aW9uVXRpbHMuaXNPYmplY3Q7XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgbm90IHVzZWQgdW4gdjZcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzT2JqZWN0T3JBcnJheShvYmo6IGFueSk6IGJvb2xlYW4ge1xuICByZXR1cm4gXy5pc09iamVjdChvYmopICYmIF8uaXNOdWxsKG9iaikgPT09IGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGFnVmVyc2lvbihkYXRhOiBNYW5pZmVzdCwgdmVyc2lvbjogc3RyaW5nLCB0YWc6IFN0cmluZ1ZhbHVlKTogYm9vbGVhbiB7XG4gIGlmICh0YWcgJiYgZGF0YVtESVNUX1RBR1NdW3RhZ10gIT09IHZlcnNpb24gJiYgc2VtdmVyLnBhcnNlKHZlcnNpb24sIHRydWUpKSB7XG4gICAgLy8gdmFsaWQgdmVyc2lvbiAtIHN0b3JlXG4gICAgZGF0YVtESVNUX1RBR1NdW3RhZ10gPSB2ZXJzaW9uO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBHZXRzIHZlcnNpb24gZnJvbSBhIHBhY2thZ2Ugb2JqZWN0IHRha2luZyBpbnRvIGFjY291bnQgc2VtdmVyIHdlaXJkbmVzcy5cbiAqIEByZXR1cm4ge1N0cmluZ30gcmV0dXJuIHRoZSBzZW1hbnRpYyB2ZXJzaW9uIG9mIGEgcGFja2FnZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmVyc2lvbihwa2c6IE1hbmlmZXN0LCB2ZXJzaW9uOiBhbnkpOiBWZXJzaW9uIHwgdm9pZCB7XG4gIC8vIHRoaXMgY29uZGl0aW9uIG11c3QgYWxsb3cgY2FzdFxuICBpZiAoXy5pc05pbChwa2cudmVyc2lvbnNbdmVyc2lvbl0pID09PSBmYWxzZSkge1xuICAgIHJldHVybiBwa2cudmVyc2lvbnNbdmVyc2lvbl07XG4gIH1cblxuICB0cnkge1xuICAgIHZlcnNpb24gPSBzZW12ZXIucGFyc2UodmVyc2lvbiwgdHJ1ZSk7XG4gICAgZm9yIChjb25zdCB2ZXJzaW9uSXRlbSBpbiBwa2cudmVyc2lvbnMpIHtcbiAgICAgIGlmICh2ZXJzaW9uLmNvbXBhcmUoc2VtdmVyLnBhcnNlKHZlcnNpb25JdGVtLCB0cnVlKSkgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHBrZy52ZXJzaW9uc1t2ZXJzaW9uSXRlbV07XG4gICAgICB9XG4gICAgfVxuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbi8qKlxuICogRmxhdHRlbiBhcnJheXMgb2YgdGFncy5cbiAqIEBwYXJhbSB7Kn0gZGF0YVxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplRGlzdFRhZ3MocGtnOiBNYW5pZmVzdCk6IHZvaWQge1xuICBsZXQgc29ydGVkO1xuICBpZiAoIXBrZ1tESVNUX1RBR1NdLmxhdGVzdCkge1xuICAgIC8vIG92ZXJ3cml0ZSBsYXRlc3Qgd2l0aCBoaWdoZXN0IGtub3duIHZlcnNpb24gYmFzZWQgb24gc2VtdmVyIHNvcnRcbiAgICBzb3J0ZWQgPSBwa2dVdGlscy5zZW12ZXJTb3J0KE9iamVjdC5rZXlzKHBrZy52ZXJzaW9ucykpO1xuICAgIGlmIChzb3J0ZWQgJiYgc29ydGVkLmxlbmd0aCkge1xuICAgICAgcGtnW0RJU1RfVEFHU10ubGF0ZXN0ID0gc29ydGVkLnBvcCgpO1xuICAgIH1cbiAgfVxuXG4gIGZvciAoY29uc3QgdGFnIGluIHBrZ1tESVNUX1RBR1NdKSB7XG4gICAgaWYgKF8uaXNBcnJheShwa2dbRElTVF9UQUdTXVt0YWddKSkge1xuICAgICAgaWYgKHBrZ1tESVNUX1RBR1NdW3RhZ10ubGVuZ3RoKSB7XG4gICAgICAgIC8vIHNvcnQgYXJyYXlcbiAgICAgICAgLy8gRklYTUU6IHRoaXMgaXMgY2xlYXJseSB3cm9uZywgd2UgbmVlZCB0byByZXNlYXJjaCB3aHkgdGhpcyBpcyBsaWtlIHRoaXMuXG4gICAgICAgIHNvcnRlZCA9IHBrZ1V0aWxzLnNlbXZlclNvcnQocGtnW0RJU1RfVEFHU11bdGFnXSk7XG4gICAgICAgIGlmIChzb3J0ZWQubGVuZ3RoKSB7XG4gICAgICAgICAgLy8gdXNlIGhpZ2hlc3QgdmVyc2lvbiBiYXNlZCBvbiBzZW12ZXIgc29ydFxuICAgICAgICAgIHBrZ1tESVNUX1RBR1NdW3RhZ10gPSBzb3J0ZWQucG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlbGV0ZSBwa2dbRElTVF9UQUdTXVt0YWddO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXy5pc1N0cmluZyhwa2dbRElTVF9UQUdTXVt0YWddKSkge1xuICAgICAgaWYgKCFzZW12ZXIucGFyc2UocGtnW0RJU1RfVEFHU11bdGFnXSwgdHJ1ZSkpIHtcbiAgICAgICAgLy8gaWYgdGhlIHZlcnNpb24gaXMgaW52YWxpZCwgZGVsZXRlIHRoZSBkaXN0LXRhZyBlbnRyeVxuICAgICAgICBkZWxldGUgcGtnW0RJU1RfVEFHU11bdGFnXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuY29uc3QgcGFyc2VJbnRlcnZhbFRhYmxlID0ge1xuICAnJzogMTAwMCxcbiAgbXM6IDEsXG4gIHM6IDEwMDAsXG4gIG06IDYwICogMTAwMCxcbiAgaDogNjAgKiA2MCAqIDEwMDAsXG4gIGQ6IDg2NDAwMDAwLFxuICB3OiA3ICogODY0MDAwMDAsXG4gIE06IDMwICogODY0MDAwMDAsXG4gIHk6IDM2NSAqIDg2NDAwMDAwLFxufTtcblxuLyoqXG4gKiBQYXJzZSBhbiBpbnRlcm5hbCBzdHJpbmcgdG8gbnVtYmVyXG4gKiBAcGFyYW0geyp9IGludGVydmFsXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUludGVydmFsKGludGVydmFsOiBhbnkpOiBudW1iZXIge1xuICBpZiAodHlwZW9mIGludGVydmFsID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBpbnRlcnZhbCAqIDEwMDA7XG4gIH1cbiAgbGV0IHJlc3VsdCA9IDA7XG4gIGxldCBsYXN0X3N1ZmZpeCA9IEluZmluaXR5O1xuICBpbnRlcnZhbC5zcGxpdCgvXFxzKy8pLmZvckVhY2goZnVuY3Rpb24gKHgpOiB2b2lkIHtcbiAgICBpZiAoIXgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbSA9IHgubWF0Y2goL14oKDB8WzEtOV1bMC05XSopKFxcLlswLTldKyk/KShtc3xzfG18aHxkfHd8TXx5fCkkLyk7XG4gICAgaWYgKFxuICAgICAgIW0gfHxcbiAgICAgIHBhcnNlSW50ZXJ2YWxUYWJsZVttWzRdXSA+PSBsYXN0X3N1ZmZpeCB8fFxuICAgICAgKG1bNF0gPT09ICcnICYmIGxhc3Rfc3VmZml4ICE9PSBJbmZpbml0eSlcbiAgICApIHtcbiAgICAgIHRocm93IEVycm9yKCdpbnZhbGlkIGludGVydmFsOiAnICsgaW50ZXJ2YWwpO1xuICAgIH1cbiAgICBsYXN0X3N1ZmZpeCA9IHBhcnNlSW50ZXJ2YWxUYWJsZVttWzRdXTtcbiAgICByZXN1bHQgKz0gTnVtYmVyKG1bMV0pICogcGFyc2VJbnRlcnZhbFRhYmxlW21bNF1dO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGNvbnN0IEVycm9yQ29kZSA9IHtcbiAgZ2V0Q29uZmxpY3QsXG4gIGdldEJhZERhdGEsXG4gIGdldEJhZFJlcXVlc3QsXG4gIGdldEludGVybmFsRXJyb3IsXG4gIGdldFVuYXV0aG9yaXplZCxcbiAgZ2V0Rm9yYmlkZGVuLFxuICBnZXRTZXJ2aWNlVW5hdmFpbGFibGUsXG4gIGdldE5vdEZvdW5kLFxuICBnZXRDb2RlLFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHNvcnRCeU5hbWUocGFja2FnZXM6IGFueVtdLCBvcmRlckFzY2VuZGluZzogYm9vbGVhbiB8IHZvaWQgPSB0cnVlKTogc3RyaW5nW10ge1xuICByZXR1cm4gcGFja2FnZXMuc2xpY2UoKS5zb3J0KGZ1bmN0aW9uIChhLCBiKTogbnVtYmVyIHtcbiAgICBjb25zdCBjb21wYXJhdG9yTmFtZXMgPSBhLm5hbWUudG9Mb3dlckNhc2UoKSA8IGIubmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgcmV0dXJuIG9yZGVyQXNjZW5kaW5nID8gKGNvbXBhcmF0b3JOYW1lcyA/IC0xIDogMSkgOiBjb21wYXJhdG9yTmFtZXMgPyAxIDogLTE7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVsZXRlUHJvcGVydGllcyhwcm9wZXJ0aWVzVG9EZWxldGU6IHN0cmluZ1tdLCBvYmplY3RJdGVtOiBhbnkpOiBhbnkge1xuICBfLmZvckVhY2gocHJvcGVydGllc1RvRGVsZXRlLCAocHJvcGVydHkpOiBhbnkgPT4ge1xuICAgIGRlbGV0ZSBvYmplY3RJdGVtW3Byb3BlcnR5XTtcbiAgfSk7XG5cbiAgcmV0dXJuIG9iamVjdEl0ZW07XG59XG5cbi8qKlxuICogcGFyc2UgcGFja2FnZSByZWFkbWUgLSBtYXJrZG93bi9hc2NpaVxuICogQHBhcmFtIHtTdHJpbmd9IHBhY2thZ2VOYW1lIG5hbWUgb2YgcGFja2FnZVxuICogQHBhcmFtIHtTdHJpbmd9IHJlYWRtZSBwYWNrYWdlIHJlYWRtZVxuXG4gKiBAcmV0dXJuIHtTdHJpbmd9IGNvbnZlcnRlZCBodG1sIHRlbXBsYXRlXG4gKi9cbi8vIFRPRE86IHJlbmFtZSwgZG9lcyBub3QgcGFyc2UgYW55bW9yZVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUmVhZG1lKHBhY2thZ2VOYW1lOiBzdHJpbmcsIHJlYWRtZTogc3RyaW5nKTogc3RyaW5nIHwgdm9pZCB7XG4gIGlmIChfLmlzRW1wdHkocmVhZG1lKSA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4gcmVhZG1lO1xuICB9XG5cbiAgLy8gbG9ncyByZWFkbWUgbm90IGZvdW5kIGVycm9yXG4gIGxvZ2dlci5pbmZvKHsgcGFja2FnZU5hbWUgfSwgJ0B7cGFja2FnZU5hbWV9OiBObyByZWFkbWUgZm91bmQnKTtcblxuICByZXR1cm4gJ0VSUk9SOiBObyBSRUFETUUgZGF0YSBmb3VuZCEnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW5jb2RlU2NvcGVkVXJpKHBhY2thZ2VOYW1lKTogc3RyaW5nIHtcbiAgcmV0dXJuIHBhY2thZ2VOYW1lLnJlcGxhY2UoL1xcLy9nLCAnJTJmJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNEaWZmT25lS2V5KHZlcnNpb25zKTogYm9vbGVhbiB7XG4gIHJldHVybiBPYmplY3Qua2V5cyh2ZXJzaW9ucykubGVuZ3RoICE9PSAxO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNWZXJzaW9uVmFsaWQocGFja2FnZU1ldGEsIHBhY2thZ2VWZXJzaW9uKTogYm9vbGVhbiB7XG4gIGNvbnN0IGhhc1ZlcnNpb24gPSB0eXBlb2YgcGFja2FnZVZlcnNpb24gIT09ICd1bmRlZmluZWQnO1xuICBpZiAoIWhhc1ZlcnNpb24pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBoYXNNYXRjaFZlcnNpb24gPSBPYmplY3Qua2V5cyhwYWNrYWdlTWV0YS52ZXJzaW9ucykuaW5jbHVkZXMocGFja2FnZVZlcnNpb24pO1xuICByZXR1cm4gaGFzTWF0Y2hWZXJzaW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNSZWxhdGVkVG9EZXByZWNhdGlvbihwa2dJbmZvOiBNYW5pZmVzdCk6IGJvb2xlYW4ge1xuICBjb25zdCB7IHZlcnNpb25zIH0gPSBwa2dJbmZvO1xuICBmb3IgKGNvbnN0IHZlcnNpb24gaW4gdmVyc2lvbnMpIHtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZlcnNpb25zW3ZlcnNpb25dLCAnZGVwcmVjYXRlZCcpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZUNvbmZpZ1BhdGggPSBmdW5jdGlvbiAoc3RvcmFnZUxvY2F0aW9uOiBzdHJpbmcsIGZpbGU6IHN0cmluZykge1xuICByZXR1cm4gcGF0aC5yZXNvbHZlKHBhdGguZGlybmFtZShzdG9yYWdlTG9jYXRpb24pLCBmaWxlKTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2dIVFRQU1dhcm5pbmcoc3RvcmFnZUxvY2F0aW9uKSB7XG4gIGxvZ2dlci5mYXRhbChcbiAgICBbXG4gICAgICAnWW91IGhhdmUgZW5hYmxlZCBIVFRQUyBhbmQgbmVlZCB0byBzcGVjaWZ5IGVpdGhlciAnLFxuICAgICAgJyAgICBcImh0dHBzLmtleVwiIGFuZCBcImh0dHBzLmNlcnRcIiBvciAnLFxuICAgICAgJyAgICBcImh0dHBzLnBmeFwiIGFuZCBvcHRpb25hbGx5IFwiaHR0cHMucGFzc3BocmFzZVwiICcsXG4gICAgICAndG8gcnVuIGh0dHBzIHNlcnZlcicsXG4gICAgICAnJyxcbiAgICAgIC8vIGNvbW1hbmRzIGFyZSBib3Jyb3dlZCBmcm9tIG5vZGUuanMgZG9jc1xuICAgICAgJ1RvIHF1aWNrbHkgY3JlYXRlIHNlbGYtc2lnbmVkIGNlcnRpZmljYXRlLCB1c2U6JyxcbiAgICAgICcgJCBvcGVuc3NsIGdlbnJzYSAtb3V0ICcgKyByZXNvbHZlQ29uZmlnUGF0aChzdG9yYWdlTG9jYXRpb24sIGtleVBlbSkgKyAnIDIwNDgnLFxuICAgICAgJyAkIG9wZW5zc2wgcmVxIC1uZXcgLXNoYTI1NiAta2V5ICcgK1xuICAgICAgICByZXNvbHZlQ29uZmlnUGF0aChzdG9yYWdlTG9jYXRpb24sIGtleVBlbSkgK1xuICAgICAgICAnIC1vdXQgJyArXG4gICAgICAgIHJlc29sdmVDb25maWdQYXRoKHN0b3JhZ2VMb2NhdGlvbiwgY3NyUGVtKSxcbiAgICAgICcgJCBvcGVuc3NsIHg1MDkgLXJlcSAtaW4gJyArXG4gICAgICAgIHJlc29sdmVDb25maWdQYXRoKHN0b3JhZ2VMb2NhdGlvbiwgY3NyUGVtKSArXG4gICAgICAgICcgLXNpZ25rZXkgJyArXG4gICAgICAgIHJlc29sdmVDb25maWdQYXRoKHN0b3JhZ2VMb2NhdGlvbiwga2V5UGVtKSArXG4gICAgICAgICcgLW91dCAnICtcbiAgICAgICAgcmVzb2x2ZUNvbmZpZ1BhdGgoc3RvcmFnZUxvY2F0aW9uLCBjZXJ0UGVtKSxcbiAgICAgICcnLFxuICAgICAgJ0FuZCB0aGVuIGFkZCB0byBjb25maWcgZmlsZSAoJyArIHN0b3JhZ2VMb2NhdGlvbiArICcpOicsXG4gICAgICAnICBodHRwczonLFxuICAgICAgYCAgICBrZXk6ICR7cmVzb2x2ZUNvbmZpZ1BhdGgoc3RvcmFnZUxvY2F0aW9uLCBrZXlQZW0pfWAsXG4gICAgICBgICAgIGNlcnQ6ICR7cmVzb2x2ZUNvbmZpZ1BhdGgoc3RvcmFnZUxvY2F0aW9uLCBjZXJ0UGVtKX1gLFxuICAgIF0uam9pbignXFxuJylcbiAgKTtcbiAgcHJvY2Vzcy5leGl0KDIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzTG9naW4oY29uZmlnOiBDb25maWcpIHtcbiAgcmV0dXJuIF8uaXNOaWwoY29uZmlnPy53ZWI/LmxvZ2luKSB8fCBjb25maWc/LndlYj8ubG9naW4gPT09IHRydWU7XG59XG5cbmV4cG9ydCB7IGJ1aWxkVG9rZW5VdGlsIGFzIGJ1aWxkVG9rZW4sIHBhcnNlQ29uZmlnRmlsZSB9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxJQUFBQSxNQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxPQUFBLEdBQUFGLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRSxTQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7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
package/conf/.gitkeep ADDED
File without changes
package/index.js ADDED
@@ -0,0 +1 @@
1
+ export { default as startVerdaccio } from './build/index';
package/package.json ADDED
@@ -0,0 +1,156 @@
1
+ {
2
+ "name": "@verdaccio/canary",
3
+ "version": "6.3.2-canary.404363f",
4
+ "description": "A lightweight private npm proxy registry",
5
+ "author": {
6
+ "name": "Verdaccio Maintainers",
7
+ "email": "verdaccio.npm@gmail.com"
8
+ },
9
+ "repository": {
10
+ "type": "git",
11
+ "url": "git://github.com/verdaccio/verdaccio"
12
+ },
13
+ "homepage": "https://verdaccio.org",
14
+ "main": "build/index.js",
15
+ "types": "build/index.d.ts",
16
+ "bin": {
17
+ "verdaccio-canary": "./bin/verdaccio-canary"
18
+ },
19
+ "funding": {
20
+ "type": "opencollective",
21
+ "url": "https://opencollective.com/verdaccio"
22
+ },
23
+ "dependencies": {
24
+ "@cypress/request": "3.0.10",
25
+ "@verdaccio/auth": "8.0.0-next-8.36",
26
+ "@verdaccio/config": "8.0.0-next-8.36",
27
+ "@verdaccio/core": "8.0.0-next-8.36",
28
+ "@verdaccio/hooks": "8.0.0-next-8.36",
29
+ "@verdaccio/loaders": "8.0.0-next-8.26",
30
+ "@verdaccio/local-storage-legacy": "11.1.1",
31
+ "@verdaccio/logger": "8.0.0-next-8.36",
32
+ "@verdaccio/middleware": "8.0.0-next-8.36",
33
+ "@verdaccio/package-filter": "13.0.0-next-8.3",
34
+ "@verdaccio/search-indexer": "8.0.0-next-8.6",
35
+ "@verdaccio/signature": "8.0.0-next-8.28",
36
+ "@verdaccio/streams": "10.2.1",
37
+ "@verdaccio/tarball": "13.0.0-next-8.36",
38
+ "@verdaccio/ui-theme": "8.0.0-next-8.30",
39
+ "@verdaccio/url": "13.0.0-next-8.36",
40
+ "@verdaccio/utils": "8.1.0-next-8.36",
41
+ "JSONStream": "1.3.5",
42
+ "async": "3.2.6",
43
+ "clipanion": "4.0.0-rc.4",
44
+ "compression": "1.8.1",
45
+ "cors": "2.8.6",
46
+ "debug": "4.4.3",
47
+ "envinfo": "7.21.0",
48
+ "express": "4.22.1",
49
+ "lodash": "4.18.1",
50
+ "lru-cache": "7.18.3",
51
+ "mime": "3.0.0",
52
+ "semver": "7.7.4",
53
+ "verdaccio-audit": "13.0.0-next-8.36",
54
+ "verdaccio-htpasswd": "13.0.0-next-8.36"
55
+ },
56
+ "devDependencies": {
57
+ "@babel/cli": "7.28.6",
58
+ "@babel/core": "7.29.0",
59
+ "@babel/node": "7.29.0",
60
+ "@babel/preset-env": "7.29.0",
61
+ "@babel/preset-typescript": "7.28.5",
62
+ "@babel/register": "7.28.6",
63
+ "@babel/runtime": "7.28.6",
64
+ "@trivago/prettier-plugin-sort-imports": "5.2.2",
65
+ "@types/async": "3.2.25",
66
+ "@types/debug": "4.1.12",
67
+ "@types/express": "4.17.25",
68
+ "@types/express-serve-static-core": "4.19.8",
69
+ "@types/http-errors": "2.0.5",
70
+ "@types/lodash": "4.17.23",
71
+ "@types/mime": "3.0.4",
72
+ "@types/minimatch": "5.1.2",
73
+ "@types/node": "20.19.33",
74
+ "@types/pino": "7.0.5",
75
+ "@types/request": "2.48.13",
76
+ "@types/semver": "7.7.1",
77
+ "@types/supertest": "6.0.3",
78
+ "@verdaccio-scope/verdaccio-auth-foo": "0.0.2",
79
+ "@verdaccio/e2e-cli": "2.3.0",
80
+ "@verdaccio/eslint-config": "13.0.0",
81
+ "@verdaccio/test-helper": "4.0.0-next-8.13",
82
+ "@verdaccio/types": "13.0.0-next-8.11",
83
+ "@vitest/coverage-v8": "3.2.4",
84
+ "@vitest/eslint-plugin": "1.6.9",
85
+ "babel-plugin-transform-inline-environment-variables": "0.4.4",
86
+ "cross-env": "10.1.0",
87
+ "eslint": "10.0.3",
88
+ "eslint-plugin-cypress": "6.1.0",
89
+ "eslint-plugin-jest": "29.15.0",
90
+ "eslint-plugin-react": "7.37.5",
91
+ "eslint-plugin-react-hooks": "7.0.1",
92
+ "eslint-plugin-verdaccio": "10.1.0",
93
+ "fs-extra": "11.3.2",
94
+ "get-port": "7.1.0",
95
+ "kleur": "4.1.5",
96
+ "nock": "13.5.6",
97
+ "node-mocks-http": "^1.17.2",
98
+ "prettier": "3.6.2",
99
+ "selfsigned": "5.5.0",
100
+ "standard-version": "9.5.0",
101
+ "supertest": "7.2.2",
102
+ "ts-node": "10.9.2",
103
+ "typescript": "5.9.3",
104
+ "verdaccio-auth-memory": "10.3.1",
105
+ "verdaccio-memory": "10.4.1",
106
+ "vitest": "3.2.4"
107
+ },
108
+ "keywords": [
109
+ "private",
110
+ "package",
111
+ "repository",
112
+ "registry",
113
+ "enterprise",
114
+ "modules",
115
+ "proxy",
116
+ "server",
117
+ "verdaccio"
118
+ ],
119
+ "scripts": {
120
+ "release": "standard-version -a -s",
121
+ "type-check": "tsc --noEmit",
122
+ "cache:clean": "yarn cache clean --mirror && yarn cache clean --all",
123
+ "type-check:watch": "yarn run type-check -- --watch",
124
+ "format": "prettier --write \"**/*.{js,jsx,ts,tsx,json,yml,yaml,md}\"",
125
+ "format:check": "prettier --check \"**/*.{js,jsx,ts,tsx,json,yml,yaml,md}\"",
126
+ "test": "cross-env NODE_ENV=test TZ=UTC FORCE_COLOR=1 vitest run",
127
+ "pre:ci": "yarn run lint",
128
+ "lint:ts": "yarn run type-check",
129
+ "lint": "eslint \"**/*.{js,jsx,ts}\"",
130
+ "lint:lockfile": "echo 'No lockfile linting available'",
131
+ "start": "yarn babel-node --extensions \".ts,.tsx\" src/lib/cli --inspect",
132
+ "start:brk": "yarn babel-node --extensions \".ts,.tsx\" src/lib/cli --inspect-brk",
133
+ "start:debug": "yarn node debug/bootstrap.js",
134
+ "start:run-server": "yarn node debug/bootstrap-runserver.js",
135
+ "build": "rm -Rf build && PACKAGE_VERSION=$(node -p \"require('./package.json').version\") yarn babel src/ --out-dir build/ --copy-files --extensions \".ts,.tsx\" --source-maps inline",
136
+ "code:types": "tsc --emitDeclarationOnly -p tsconfig.json",
137
+ "code:docker-build": "yarn babel src/ --out-dir build/ --copy-files --extensions \".ts,.tsx\"",
138
+ "docker": "docker build -t verdaccio/verdaccio:local . --no-cache",
139
+ "docker:run": "docker run -it --rm -p 4873:4873 -e \"DEBUG=verdaccio*\" verdaccio/verdaccio:local"
140
+ },
141
+ "engines": {
142
+ "node": ">=18"
143
+ },
144
+ "preferGlobal": true,
145
+ "license": "MIT",
146
+ "resolutions": {
147
+ "@types/serve-static": "1.15.10",
148
+ "@types/express-serve-static-core": "4.19.8"
149
+ },
150
+ "collective": {
151
+ "type": "opencollective",
152
+ "url": "https://opencollective.com/verdaccio",
153
+ "logo": "https://opencollective.com/verdaccio/logo.txt"
154
+ },
155
+ "packageManager": "yarn@4.9.2"
156
+ }
package/security.txt ADDED
@@ -0,0 +1,5 @@
1
+ Contact: verdaccio@pm.me
2
+ Encryption: https://verdaccio.nyc3.digitaloceanspaces.com/gpg/publickey.verdaccio@pm.me.asc
3
+ Acknowledgments: https://verdaccio.org/thanks.html
4
+ Preferred-Languages: en
5
+ Policy: https://github.com/verdaccio/verdaccio/security/policy
@@ -0,0 +1,11 @@
1
+ [Unit]
2
+ Description=Verdaccio lightweight npm proxy registry
3
+
4
+ [Service]
5
+ Type=simple
6
+ Restart=on-failure
7
+ User=verdaccio
8
+ ExecStart=/usr/bin/verdaccio --config /etc/verdaccio/config.yaml
9
+
10
+ [Install]
11
+ WantedBy=multi-user.target