@verdaccio/store 6.0.0-6-next.24 → 6.0.0-6-next.27
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +49 -0
- package/build/lib/storage-utils.d.ts +1 -0
- package/build/storage.d.ts +3 -6
- package/build/storage.js +23 -21
- package/build/storage.js.map +1 -1
- package/package.json +14 -14
- package/src/storage.ts +39 -43
- package/test/storage.spec.ts +31 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,54 @@
|
|
|
1
1
|
# @verdaccio/store
|
|
2
2
|
|
|
3
|
+
## 6.0.0-6-next.27
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- @verdaccio/core@6.0.0-6-next.47
|
|
8
|
+
- @verdaccio/config@6.0.0-6-next.47
|
|
9
|
+
- @verdaccio/tarball@11.0.0-6-next.16
|
|
10
|
+
- @verdaccio/url@11.0.0-6-next.13
|
|
11
|
+
- @verdaccio/hooks@6.0.0-6-next.17
|
|
12
|
+
- @verdaccio/loaders@6.0.0-6-next.16
|
|
13
|
+
- @verdaccio/logger@6.0.0-6-next.15
|
|
14
|
+
- @verdaccio/local-storage@11.0.0-6-next.17
|
|
15
|
+
- @verdaccio/proxy@6.0.0-6-next.25
|
|
16
|
+
- @verdaccio/utils@6.0.0-6-next.15
|
|
17
|
+
|
|
18
|
+
## 6.0.0-6-next.26
|
|
19
|
+
|
|
20
|
+
### Patch Changes
|
|
21
|
+
|
|
22
|
+
- b849128d: fix: handle upload scoped tarball
|
|
23
|
+
- Updated dependencies [b849128d]
|
|
24
|
+
- @verdaccio/core@6.0.0-6-next.8
|
|
25
|
+
- @verdaccio/config@6.0.0-6-next.17
|
|
26
|
+
- @verdaccio/tarball@11.0.0-6-next.15
|
|
27
|
+
- @verdaccio/url@11.0.0-6-next.12
|
|
28
|
+
- @verdaccio/hooks@6.0.0-6-next.16
|
|
29
|
+
- @verdaccio/loaders@6.0.0-6-next.15
|
|
30
|
+
- @verdaccio/logger@6.0.0-6-next.14
|
|
31
|
+
- @verdaccio/local-storage@11.0.0-6-next.16
|
|
32
|
+
- @verdaccio/proxy@6.0.0-6-next.24
|
|
33
|
+
- @verdaccio/utils@6.0.0-6-next.14
|
|
34
|
+
|
|
35
|
+
## 6.0.0-6-next.25
|
|
36
|
+
|
|
37
|
+
### Patch Changes
|
|
38
|
+
|
|
39
|
+
- 351aeeaa: fix(deps): @verdaccio/utils should be a prod dep of local-storage
|
|
40
|
+
- Updated dependencies [351aeeaa]
|
|
41
|
+
- @verdaccio/core@6.0.0-6-next.7
|
|
42
|
+
- @verdaccio/tarball@11.0.0-6-next.14
|
|
43
|
+
- @verdaccio/url@11.0.0-6-next.11
|
|
44
|
+
- @verdaccio/hooks@6.0.0-6-next.15
|
|
45
|
+
- @verdaccio/loaders@6.0.0-6-next.14
|
|
46
|
+
- @verdaccio/logger@6.0.0-6-next.13
|
|
47
|
+
- @verdaccio/local-storage@11.0.0-6-next.15
|
|
48
|
+
- @verdaccio/proxy@6.0.0-6-next.23
|
|
49
|
+
- @verdaccio/config@6.0.0-6-next.16
|
|
50
|
+
- @verdaccio/utils@6.0.0-6-next.13
|
|
51
|
+
|
|
3
52
|
## 6.0.0-6-next.24
|
|
4
53
|
|
|
5
54
|
### Minor Changes
|
|
@@ -49,6 +49,7 @@ export declare function updateUpLinkMetadata(uplinkId: any, manifest: Manifest,
|
|
|
49
49
|
directory?: string | undefined;
|
|
50
50
|
} | undefined;
|
|
51
51
|
keywords?: string[] | undefined;
|
|
52
|
+
author?: string | import("@verdaccio/types").Author | undefined;
|
|
52
53
|
_attachments: AttachMents;
|
|
53
54
|
};
|
|
54
55
|
export declare function prepareSearchPackage(data: Manifest): any;
|
package/build/storage.d.ts
CHANGED
|
@@ -160,9 +160,7 @@ declare class Storage {
|
|
|
160
160
|
uploadTarball(name: string, fileName: string, contentReadable: Readable, { signal }: {
|
|
161
161
|
signal: any;
|
|
162
162
|
}): Promise<void>;
|
|
163
|
-
uploadTarballAsStream
|
|
164
|
-
signal: any;
|
|
165
|
-
}): Promise<PassThrough>;
|
|
163
|
+
private uploadTarballAsStream;
|
|
166
164
|
/**
|
|
167
165
|
* Add a new version to a package.
|
|
168
166
|
* @param name package name
|
|
@@ -177,7 +175,6 @@ declare class Storage {
|
|
|
177
175
|
* @returns
|
|
178
176
|
*/
|
|
179
177
|
private createNewLocalCachePackage;
|
|
180
|
-
private isAllowPublishOffline;
|
|
181
178
|
/**
|
|
182
179
|
*
|
|
183
180
|
* @param name package name
|
|
@@ -219,8 +216,8 @@ declare class Storage {
|
|
|
219
216
|
|
|
220
217
|
A package requires uplinks syncronization if enables the proxy section, uplinks
|
|
221
218
|
can be more than one, the more are the most slow request will take, the request
|
|
222
|
-
are made in
|
|
223
|
-
the 1st will reply and others will be
|
|
219
|
+
are made in serial and if 1st call fails, the second will be triggered, otherwise
|
|
220
|
+
the 1st will reply and others will be discarded. The order is important.
|
|
224
221
|
|
|
225
222
|
Errors on upkinks are considered are, time outs, connection fails and http status 304,
|
|
226
223
|
in that case the request returns empty body and we want ask next on the list if has fresh
|
package/build/storage.js
CHANGED
|
@@ -11,6 +11,8 @@ var _debug = _interopRequireDefault(require("debug"));
|
|
|
11
11
|
|
|
12
12
|
var _lodash = _interopRequireWildcard(require("lodash"));
|
|
13
13
|
|
|
14
|
+
var _path = require("path");
|
|
15
|
+
|
|
14
16
|
var _stream = require("stream");
|
|
15
17
|
|
|
16
18
|
var _promises = require("stream/promises");
|
|
@@ -973,7 +975,7 @@ class Storage {
|
|
|
973
975
|
// if (typeof storage === 'undefined') {
|
|
974
976
|
// throw errorUtils.getNotFound();
|
|
975
977
|
// }
|
|
976
|
-
throw _core.errorUtils.getInternalError('no
|
|
978
|
+
throw _core.errorUtils.getInternalError('no implementation ready for npm deprecate');
|
|
977
979
|
} // eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
978
980
|
|
|
979
981
|
|
|
@@ -982,7 +984,7 @@ class Storage {
|
|
|
982
984
|
// if (typeof storage === 'undefined') {
|
|
983
985
|
// throw errorUtils.getNotFound();
|
|
984
986
|
// }
|
|
985
|
-
throw _core.errorUtils.getInternalError('no
|
|
987
|
+
throw _core.errorUtils.getInternalError('no implementation ready for npm star');
|
|
986
988
|
}
|
|
987
989
|
/**
|
|
988
990
|
* Get local package, on fails return null.
|
|
@@ -1071,16 +1073,19 @@ class Storage {
|
|
|
1071
1073
|
const buffer = this.getBufferManifest(body._attachments[firstAttachmentKey].data);
|
|
1072
1074
|
|
|
1073
1075
|
try {
|
|
1076
|
+
var _this$config, _this$config$publish;
|
|
1077
|
+
|
|
1074
1078
|
// we check if package exist already locally
|
|
1075
1079
|
const manifest = await this.getPackagelocalByNameNext(name); // if continue, the version to be published does not exist
|
|
1076
1080
|
|
|
1077
1081
|
if ((manifest === null || manifest === void 0 ? void 0 : manifest.versions[versionToPublish]) != null) {
|
|
1078
1082
|
debug('%s version %s already exists', name, versionToPublish);
|
|
1079
1083
|
throw _core.errorUtils.getConflict();
|
|
1080
|
-
}
|
|
1084
|
+
}
|
|
1081
1085
|
|
|
1086
|
+
const uplinksLook = ((_this$config = this.config) === null || _this$config === void 0 ? void 0 : (_this$config$publish = _this$config.publish) === null || _this$config$publish === void 0 ? void 0 : _this$config$publish.allow_offline) === false; // if execution get here, package does not exist locally, we search upstream
|
|
1082
1087
|
|
|
1083
|
-
const remoteManifest = await this.checkPackageRemote(name,
|
|
1088
|
+
const remoteManifest = await this.checkPackageRemote(name, uplinksLook);
|
|
1084
1089
|
|
|
1085
1090
|
if ((remoteManifest === null || remoteManifest === void 0 ? void 0 : remoteManifest.versions[versionToPublish]) != null) {
|
|
1086
1091
|
debug('%s version %s already exists', name, versionToPublish);
|
|
@@ -1143,7 +1148,7 @@ class Storage {
|
|
|
1143
1148
|
try {
|
|
1144
1149
|
const readable = _stream.Readable.from(buffer);
|
|
1145
1150
|
|
|
1146
|
-
await this.uploadTarball(name, firstAttachmentKey, readable, {
|
|
1151
|
+
await this.uploadTarball(name, (0, _path.basename)(firstAttachmentKey), readable, {
|
|
1147
1152
|
signal: options.signal
|
|
1148
1153
|
});
|
|
1149
1154
|
} catch (err) {
|
|
@@ -1182,14 +1187,13 @@ class Storage {
|
|
|
1182
1187
|
*/
|
|
1183
1188
|
|
|
1184
1189
|
|
|
1185
|
-
|
|
1190
|
+
uploadTarball(name, fileName, contentReadable, {
|
|
1186
1191
|
signal
|
|
1187
1192
|
}) {
|
|
1188
1193
|
return new Promise((resolve, reject) => {
|
|
1189
|
-
(
|
|
1190
|
-
|
|
1191
|
-
|
|
1192
|
-
});
|
|
1194
|
+
this.uploadTarballAsStream(name, fileName, {
|
|
1195
|
+
signal
|
|
1196
|
+
}).then(stream => {
|
|
1193
1197
|
stream.on('error', err => {
|
|
1194
1198
|
debug('error on stream a tarball %o for %o with error %o', 'foo.tar.gz', name, err.message);
|
|
1195
1199
|
reject(err);
|
|
@@ -1198,14 +1202,16 @@ class Storage {
|
|
|
1198
1202
|
this.logger.debug({
|
|
1199
1203
|
fileName,
|
|
1200
1204
|
name
|
|
1201
|
-
}, 'file @{fileName} for package @{name} has been
|
|
1205
|
+
}, 'file @{fileName} for package @{name} has been successfully uploaded');
|
|
1202
1206
|
resolve();
|
|
1203
1207
|
});
|
|
1204
|
-
|
|
1208
|
+
return stream;
|
|
1209
|
+
}).then(stream => {
|
|
1210
|
+
(0, _promises.pipeline)(contentReadable, stream, {
|
|
1205
1211
|
signal
|
|
1206
|
-
})
|
|
1207
|
-
|
|
1208
|
-
reject
|
|
1212
|
+
}).then(() => {
|
|
1213
|
+
debug('success pipe upload tarball');
|
|
1214
|
+
}).catch(reject);
|
|
1209
1215
|
});
|
|
1210
1216
|
});
|
|
1211
1217
|
}
|
|
@@ -1413,10 +1419,6 @@ class Storage {
|
|
|
1413
1419
|
return;
|
|
1414
1420
|
}
|
|
1415
1421
|
}
|
|
1416
|
-
|
|
1417
|
-
isAllowPublishOffline() {
|
|
1418
|
-
return typeof this.config.publish !== 'undefined' && _lodash.default.isBoolean(this.config.publish.allow_offline) && this.config.publish.allow_offline;
|
|
1419
|
-
}
|
|
1420
1422
|
/**
|
|
1421
1423
|
*
|
|
1422
1424
|
* @param name package name
|
|
@@ -1579,8 +1581,8 @@ class Storage {
|
|
|
1579
1581
|
proxy: npmjs
|
|
1580
1582
|
A package requires uplinks syncronization if enables the proxy section, uplinks
|
|
1581
1583
|
can be more than one, the more are the most slow request will take, the request
|
|
1582
|
-
are made in
|
|
1583
|
-
the 1st will reply and others will be
|
|
1584
|
+
are made in serial and if 1st call fails, the second will be triggered, otherwise
|
|
1585
|
+
the 1st will reply and others will be discarded. The order is important.
|
|
1584
1586
|
Errors on upkinks are considered are, time outs, connection fails and http status 304,
|
|
1585
1587
|
in that case the request returns empty body and we want ask next on the list if has fresh
|
|
1586
1588
|
updates.
|
package/build/storage.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.js","names":["debug","buildDebug","noSuchFile","resourceNotAvailable","PROTO_NAME","Storage","constructor","config","uplinks","setupUpLinks","logger","child","module","filters","localStorage","Object","keys","ABBREVIATED_HEADER","changePackageNext","name","metadata","revision","validatioUtils","isObject","versions","DIST_TAGS","errorUtils","getBadData","updatePackageNext","localData","version","incomingVersion","_","isNil","info","time","file","_attachments","prototype","hasOwnProperty","call","incomingDeprecated","deprecated","modified","Date","toISOString","USERS","removePackage","removePackageByRevision","removeTarball","filename","_revision","assert","validateName","storage","getPrivatePackageStorage","error","getInternalError","API_ERROR","INTERNAL_SERVER_ERROR","cacheManifest","readPackage","getNotFound","err","code","manifest","data","newData","deletePackage","search","options","transformResults","TransFormResults","objectMode","streamPassThrough","PassThrough","upLinkList","getProxyList","searchUplinksStreams","map","uplinkId","uplink","consumeSearchStream","Promise","allSettled","message","emit","searchCachedPackages","query","outPutStream","streamPipeline","on","chunk","push","resolve","searchFinalResults","removeDuplicates","length","getTarballFromUpstream","signal","cachedManifest","getPackageLocalMetadata","_distfiles","url","distFile","current_length","expected_length","passThroughRemoteStream","proxy","getUpLinkForDistFile","remoteStream","fetchTarballNext","cache","localStorageWriteStream","writeTarball","pipeline","res","statusCode","HTTP_STATUS","NOT_FOUND","NOT_FILE_UPLINK","OK","MULTIPLE_CHOICES","headers","HEADER_TYPE","CONTENT_LENGTH","progress","transferred","total","CONTENT_MISMATCH","updatedManifest","syncUplinksMetadataNext","uplinksLook","NO_SUCH_FILE","getTarballNext","isOpen","localTarballStream","localStream","getLocalTarball","STORAGE","NO_SUCH_FILE_ERROR","then","uplinkStream","catch","getPackageByVersion","queryVersion","VERSION_NOT_EXIST","convertedManifest","getPackageNext","getVersion","convertDistVersionToLocalTarballsUrl","requestOptions","url_prefix","matchedDisTagVersion","disTagVersion","getPackageManifest","convertDistRemoteToLocalTarballUrls","convertAbbreviatedManifest","abbreviatedVersions","reduce","acc","_version","_version_abbreviated","description","bin","dist","engines","funding","directories","dependencies","devDependencies","peerDependencies","optionalDependencies","bundleDependencies","_hasShrinkwrap","hasInstallScript","getPackageByOptions","abbreviated","getLocalDatabaseNext","getStoragePlugin","database","get","packages","pkg","latest","timeList","users","warn","package","saveToken","token","isFunction","reject","getCode","SERVICE_UNAVAILABLE","SUPPORT_ERRORS","PLUGIN_MISSING_INTERFACE","deleteToken","user","tokenKey","readTokens","filter","init","LocalStorage","getSecret","searchPassThrough","bodyStream","pipe","end","pkgName","getPackageStorage","createFailureStreamResponseNext","readTarball","searchStream","t","text","q","quality","p","popularity","m","maintenance","s","size","items","searchItem","isEmpty","searchPackage","mapManifestToSearchPackageBody","searchPackageItem","score","verdaccioPkgCached","verdaccioPrivate","flags","searchScore","write","getServiceUnavailable","normalizePackage","remove","attachments","attachment","PACKAGE_FILE_NAME","result","stream","process","nextTick","mergeTagsNext","tags","tag","isNull","tagVersionNext","hasProxyTo","ProxyStorage","updateLocalMetadata","updateManifest","isDeprecatedManifest","deprecate","isPublishablePackage","star","validatePublishSingleVersion","mergedManifest","publishANewVersion","notify","packageName","getBadRequest","UNSUPORTED_REGISTRY_CALL","_body","_options","getPackagelocalByNameNext","getBufferManifest","buffer","Buffer","from","hasPackage","body","normalizeMetadata","versionToPublish","firstAttachmentKey","getConflict","remoteManifest","checkPackageRemote","isAllowPublishOffline","hasPackageInStorage","createNewLocalCachePackage","readme","String","addVersionNext","readable","Readable","uploadTarball","_manifest","_message","uplinksList","fileName","contentReadable","uploadTarballAsStream","shaOneHash","createTarballHash","transformHash","Transform","transform","_encoding","callback","update","uploadStream","getForbidden","fileDoesExist","hasTarball","shasum","digest","cleanUpReadme","contributors","normalizeContributors","isString","tarball","replace","errorMessage","currentDate","created","tagVersion","add","latestVersion","currentTime","packageData","generatePackageTemplate","createPackage","FILE_EXIST_ERROR","CONFLICT","publish","isBoolean","allow_offline","upLinksErrors","PACKAGE_EXIST","errorItem","status","UPLINK_OFFLINE_PUBLISH","setDefaultRevision","json","_rev","DEFAULT_REVISION","_debug","generateRevision","writePackageNext","savePackage","updateHandler","updatePackage","INTERNAL_ERROR","retry","remoteAddress","NOT_PACKAGE_UPLINK","normalizedPkg","assign","normalizeDistTags","cleanUpLinksRef","keepUpLinkData","localManifest","found","syncManifest","upLinks","hasToLookIntoUplinks","uplinksErrors","tempManifest","mergeCacheRemoteMetadata","updatedCacheManifest","updateVersionsNext","filteredManifest","filtersErrors","applyFilters","NOT_MODIFIED","NO_PACKAGE","upLinkMeta","_uplinks","upname","_cacheManifest","fetched","now","maxage","remoteOptions","etag","getRemoteMetadataNext","updateUpLinkMetadata","mergeUplinkTimeIntoLocalNext","updateVersionsHiddenUpLinkNext","mergeVersions","filterPluginErrors","filter_metadata","_createNewPackageNext","updateUplinkToRemoteProtocol","hash","upLinkKey","tarballUrl","URL","parse","uplinkUrl","host","protocol","registry","format","readCreatePackage","change","getLatestReadme","versionId","pkgUtils","extractTarballName","sha","upLink","Symbol","for","up","need_change","isEqual"],"sources":["../src/storage.ts"],"sourcesContent":["import assert from 'assert';\nimport buildDebug from 'debug';\nimport _, { isEmpty, isNil } from 'lodash';\nimport { PassThrough, Readable, Transform, Writable, pipeline as streamPipeline } from 'stream';\nimport { pipeline } from 'stream/promises';\nimport { default as URL } from 'url';\n\nimport { hasProxyTo } from '@verdaccio/config';\nimport {\n API_ERROR,\n DIST_TAGS,\n HEADER_TYPE,\n HTTP_STATUS,\n SUPPORT_ERRORS,\n USERS,\n errorUtils,\n pkgUtils,\n searchUtils,\n validatioUtils,\n} from '@verdaccio/core';\nimport { logger } from '@verdaccio/logger';\nimport { IProxy, ISyncUplinksOptions, ProxySearchParams, ProxyStorage } from '@verdaccio/proxy';\nimport {\n convertDistRemoteToLocalTarballUrls,\n convertDistVersionToLocalTarballsUrl,\n} from '@verdaccio/tarball';\nimport {\n AbbreviatedManifest,\n AbbreviatedVersions,\n Author,\n Config,\n DistFile,\n GenericBody,\n IPackageStorage,\n Logger,\n Manifest,\n MergeTags,\n StringValue,\n Token,\n TokenFilter,\n Version,\n} from '@verdaccio/types';\nimport { createTarballHash, isObject, normalizeContributors } from '@verdaccio/utils';\n\nimport {\n PublishOptions,\n UpdateManifestOptions,\n cleanUpReadme,\n isDeprecatedManifest,\n mapManifestToSearchPackageBody,\n tagVersion,\n tagVersionNext,\n} from '.';\nimport { TransFormResults } from './lib/TransFormResults';\nimport { removeDuplicates } from './lib/search-utils';\nimport { isPublishablePackage } from './lib/star-utils';\nimport {\n STORAGE,\n cleanUpLinksRef,\n generatePackageTemplate,\n generateRevision,\n getLatestReadme,\n mergeUplinkTimeIntoLocalNext,\n mergeVersions,\n normalizeDistTags,\n normalizePackage,\n updateUpLinkMetadata,\n} from './lib/storage-utils';\nimport { ProxyInstanceList, setupUpLinks, updateVersionsHiddenUpLinkNext } from './lib/uplink-util';\nimport { getVersion } from './lib/versions-utils';\nimport { LocalStorage } from './local-storage';\nimport { IGetPackageOptionsNext, IPluginFilters } from './type';\n\nconst debug = buildDebug('verdaccio:storage');\n\nexport const noSuchFile = 'ENOENT';\nexport const resourceNotAvailable = 'EAGAIN';\nexport const PROTO_NAME = '__proto__';\n\nclass Storage {\n public localStorage: LocalStorage;\n public filters: IPluginFilters;\n public readonly config: Config;\n public readonly logger: Logger;\n public readonly uplinks: ProxyInstanceList;\n public constructor(config: Config) {\n this.config = config;\n this.uplinks = setupUpLinks(config);\n this.logger = logger.child({ module: 'storage' });\n this.filters = [];\n // @ts-ignore\n this.localStorage = null;\n debug('uplinks available %o', Object.keys(this.uplinks));\n }\n\n static ABBREVIATED_HEADER =\n 'application/vnd.npm.install-v1+json; q=1.0, application/json; q=0.8, */*';\n\n /**\n * Change an existing package (i.e. unpublish one version)\n Function changes a package info from local storage and all uplinks with write access./\n Used storages: local (write)\n */\n public async changePackageNext(\n name: string,\n metadata: Manifest,\n revision: string\n ): Promise<void> {\n debug('change existing package for package %o revision %o', name, revision);\n debug(`change manifest tags for %o revision %s`, name, revision);\n if (\n !validatioUtils.isObject(metadata.versions) ||\n !validatioUtils.isObject(metadata[DIST_TAGS])\n ) {\n debug(`change manifest bad data for %o`, name);\n throw errorUtils.getBadData();\n }\n\n debug(`change manifest udapting manifest for %o`, name);\n await this.updatePackageNext(name, async (localData: Manifest): Promise<Manifest> => {\n // eslint-disable-next-line guard-for-in\n for (const version in localData.versions) {\n const incomingVersion = metadata.versions[version];\n if (_.isNil(incomingVersion)) {\n this.logger.info({ name: name, version: version }, 'unpublishing @{name}@@{version}');\n\n // FIXME: I prefer return a new object rather mutate the metadata\n delete localData.versions[version];\n delete localData.time![version];\n\n for (const file in localData._attachments) {\n if (localData._attachments[file].version === version) {\n delete localData._attachments[file].version;\n }\n }\n } else if (Object.prototype.hasOwnProperty.call(incomingVersion, 'deprecated')) {\n const incomingDeprecated = incomingVersion.deprecated;\n if (incomingDeprecated != localData.versions[version].deprecated) {\n if (!incomingDeprecated) {\n this.logger.info(\n { name: name, version: version },\n 'undeprecating @{name}@@{version}'\n );\n delete localData.versions[version].deprecated;\n } else {\n this.logger.info({ name: name, version: version }, 'deprecating @{name}@@{version}');\n localData.versions[version].deprecated = incomingDeprecated;\n }\n localData.time!.modified = new Date().toISOString();\n }\n }\n }\n\n localData[USERS] = metadata[USERS];\n localData[DIST_TAGS] = metadata[DIST_TAGS];\n return localData;\n });\n }\n\n public async removePackage(name: string, revision): Promise<void> {\n debug('remove package %o', name);\n await this.removePackageByRevision(name, revision);\n }\n\n /**\n Remove a tarball from a system\n Function removes a tarball from local storage.\n Tarball in question should not be linked to in any existing\n versions, i.e. package version should be unpublished first.\n Used storage: local (write)\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n public async removeTarball(name: string, filename: string, _revision: string): Promise<Manifest> {\n debug('remove tarball %s for %s', filename, name);\n assert(validatioUtils.validateName(filename));\n const storage: IPackageStorage = this.getPrivatePackageStorage(name);\n if (!storage) {\n debug(`method not implemented for storage`);\n this.logger.error('method for remove tarball not implemented');\n throw errorUtils.getInternalError(API_ERROR.INTERNAL_SERVER_ERROR);\n }\n\n try {\n const cacheManifest = await storage.readPackage(name);\n if (!cacheManifest._attachments[filename]) {\n throw errorUtils.getNotFound('no such file available');\n }\n } catch (err: any) {\n if (err.code === noSuchFile) {\n throw errorUtils.getNotFound();\n }\n throw err;\n }\n\n const manifest = await this.updatePackageNext(\n name,\n async (data: Manifest): Promise<Manifest> => {\n let newData: Manifest = { ...data };\n delete data._attachments[filename];\n return newData;\n }\n );\n\n try {\n const storage: IPackageStorage = this.getPrivatePackageStorage(name);\n if (!storage) {\n debug(`method not implemented for storage`);\n this.logger.error('method for remove tarball not implemented');\n throw errorUtils.getInternalError(API_ERROR.INTERNAL_SERVER_ERROR);\n }\n\n await storage.deletePackage(filename);\n debug('package %s removed', filename);\n } catch (err: any) {\n this.logger.error({ err }, 'error removing %s from storage');\n throw err;\n }\n return manifest;\n }\n\n /**\n * Handle search on packages and proxies.\n * Iterate all proxies configured and search in all endpoints in v2 and pipe all responses\n * to a stream, once the proxies request has finished search in local storage for all packages\n * (privated and cached).\n */\n public async search(options: ProxySearchParams): Promise<searchUtils.SearchPackageItem[]> {\n const transformResults = new TransFormResults({ objectMode: true });\n const streamPassThrough = new PassThrough({ objectMode: true });\n const upLinkList = this.getProxyList();\n\n const searchUplinksStreams = upLinkList.map((uplinkId: string) => {\n const uplink = this.uplinks[uplinkId];\n if (!uplink) {\n // this should never tecnically happens\n this.logger.error({ uplinkId }, 'uplink @upLinkId not found');\n }\n return this.consumeSearchStream(uplinkId, uplink, options, streamPassThrough);\n });\n\n try {\n debug('search uplinks');\n // we only process those streams end successfully, if all fails\n // we just include local storage\n await Promise.allSettled([...searchUplinksStreams]);\n debug('search uplinks done');\n } catch (err: any) {\n this.logger.error({ err: err?.message }, ' error on uplinks search @{err}');\n streamPassThrough.emit('error', err);\n }\n debug('search local');\n try {\n await this.searchCachedPackages(streamPassThrough, options.query as searchUtils.SearchQuery);\n } catch (err: any) {\n this.logger.error({ err: err?.message }, ' error on local search @{err}');\n streamPassThrough.emit('error', err);\n }\n const data: searchUtils.SearchPackageItem[] = [];\n const outPutStream = new PassThrough({ objectMode: true });\n streamPipeline(streamPassThrough, transformResults, outPutStream, (err: any) => {\n if (err) {\n this.logger.error({ err: err?.message }, ' error on search @{err}');\n throw errorUtils.getInternalError(err ? err.message : 'unknown search error');\n } else {\n debug('pipeline succeeded');\n }\n });\n\n outPutStream.on('data', (chunk) => {\n data.push(chunk);\n });\n\n return new Promise((resolve) => {\n outPutStream.on('finish', async () => {\n const searchFinalResults: searchUtils.SearchPackageItem[] = removeDuplicates(data);\n debug('search stream total results: %o', searchFinalResults.length);\n return resolve(searchFinalResults);\n });\n debug('search done');\n });\n }\n\n private async getTarballFromUpstream(name: string, filename: string, { signal }) {\n let cachedManifest: Manifest | null = null;\n try {\n cachedManifest = await this.getPackageLocalMetadata(name);\n } catch (err) {\n debug('error on get package local metadata %o', err);\n }\n // dist url should be on local cache metadata\n if (\n cachedManifest?._distfiles &&\n typeof cachedManifest?._distfiles[filename]?.url === 'string'\n ) {\n debug('dist file found, using it %o', cachedManifest?._distfiles[filename].url);\n // dist file found, proceed to download\n const distFile = cachedManifest._distfiles[filename];\n\n let current_length = 0;\n let expected_length;\n const passThroughRemoteStream = new PassThrough();\n const proxy = this.getUpLinkForDistFile(name, distFile);\n const remoteStream = proxy.fetchTarballNext(distFile.url, {});\n\n remoteStream.on('request', async () => {\n try {\n debug('remote stream request');\n const storage = this.getPrivatePackageStorage(name) as any;\n if (proxy.config.cache === true && storage) {\n const localStorageWriteStream = await storage.writeTarball(filename, {\n signal,\n });\n\n await pipeline(remoteStream, passThroughRemoteStream, localStorageWriteStream, {\n signal,\n });\n } else {\n await pipeline(remoteStream, passThroughRemoteStream, {\n signal,\n });\n }\n } catch (err: any) {\n debug('error on pipeline downloading tarball for package %o', name);\n passThroughRemoteStream.emit('error', err);\n }\n });\n\n remoteStream\n .on('response', async (res) => {\n if (res.statusCode === HTTP_STATUS.NOT_FOUND) {\n debug('remote stream response 404');\n passThroughRemoteStream.emit(\n 'error',\n errorUtils.getNotFound(errorUtils.API_ERROR.NOT_FILE_UPLINK)\n );\n return;\n }\n\n if (\n !(res.statusCode >= HTTP_STATUS.OK && res.statusCode < HTTP_STATUS.MULTIPLE_CHOICES)\n ) {\n debug('remote stream response ok');\n passThroughRemoteStream.emit(\n 'error',\n errorUtils.getInternalError(`bad uplink status code: ${res.statusCode}`)\n );\n return;\n }\n\n if (res.headers[HEADER_TYPE.CONTENT_LENGTH]) {\n expected_length = res.headers[HEADER_TYPE.CONTENT_LENGTH];\n debug('remote stream response content length %o', expected_length);\n passThroughRemoteStream.emit(\n HEADER_TYPE.CONTENT_LENGTH,\n res.headers[HEADER_TYPE.CONTENT_LENGTH]\n );\n }\n })\n .on('downloadProgress', (progress) => {\n current_length = progress.transferred;\n if (typeof expected_length === 'undefined' && progress.total) {\n expected_length = progress.total;\n }\n })\n .on('end', () => {\n if (expected_length && current_length != expected_length) {\n debug('stream end, but length mismatch %o %o', current_length, expected_length);\n passThroughRemoteStream.emit(\n 'error',\n errorUtils.getInternalError(API_ERROR.CONTENT_MISMATCH)\n );\n }\n debug('remote stream end');\n })\n .on('error', (err) => {\n debug('remote stream error %o', err);\n passThroughRemoteStream.emit('error', err);\n });\n return passThroughRemoteStream;\n } else {\n debug('dist file not found, proceed update upstream');\n // no dist url found, proceed to fetch from upstream\n // should not be the case\n const passThroughRemoteStream = new PassThrough();\n // ensure get the latest data\n const [updatedManifest] = await this.syncUplinksMetadataNext(name, cachedManifest, {\n uplinksLook: true,\n });\n const distFile = (updatedManifest as Manifest)._distfiles[filename];\n\n if (updatedManifest === null || !distFile) {\n debug('remote tarball not found');\n throw errorUtils.getNotFound(API_ERROR.NO_SUCH_FILE);\n }\n\n const proxy = this.getUpLinkForDistFile(name, distFile);\n const remoteStream = proxy.fetchTarballNext(distFile.url, {});\n remoteStream.on('response', async () => {\n try {\n const storage = this.getPrivatePackageStorage(name);\n if (proxy.config.cache === true && storage) {\n debug('cache remote tarball enabled');\n const localStorageWriteStream = await storage.writeTarball(filename, {\n signal,\n });\n await pipeline(remoteStream, passThroughRemoteStream, localStorageWriteStream, {\n signal,\n });\n } else {\n debug('cache remote tarball disabled');\n await pipeline(remoteStream, passThroughRemoteStream, { signal });\n }\n } catch (err) {\n debug('error on pipeline downloading tarball for package %o', name);\n passThroughRemoteStream.emit('error', err);\n }\n });\n return passThroughRemoteStream;\n }\n }\n\n /**\n *\n * @param name\n * @param filename\n * @param param2\n * @returns\n */\n public async getTarballNext(name: string, filename: string, { signal }): Promise<PassThrough> {\n debug('get tarball for package %o filename %o', name, filename);\n // TODO: check if isOpen is need it after all.\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n let isOpen = false;\n const localTarballStream = new PassThrough();\n const localStream = await this.getLocalTarball(name, filename, { signal });\n localStream.on('open', async () => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n isOpen = true;\n await pipeline(localStream, localTarballStream, { signal });\n });\n\n localStream.on('error', (err: any) => {\n // eslint-disable-next-line no-console\n if (err.code === STORAGE.NO_SUCH_FILE_ERROR || err.code === HTTP_STATUS.NOT_FOUND) {\n this.getTarballFromUpstream(name, filename, { signal })\n .then((uplinkStream) => {\n pipeline(uplinkStream, localTarballStream, { signal })\n .then(() => {\n debug('successfully downloaded tarball for package %o filename %o', name, filename);\n })\n .catch((err) => {\n localTarballStream.emit('error', err);\n });\n })\n .catch((err) => {\n localTarballStream.emit('error', err);\n });\n } else {\n this.logger.error({ err: err.message }, 'some error on fatal @{err}');\n localTarballStream.emit('error', err);\n }\n });\n\n return localTarballStream;\n }\n\n public async getPackageByVersion(options: IGetPackageOptionsNext): Promise<Version> {\n const queryVersion = options.version as string;\n if (_.isNil(queryVersion)) {\n throw errorUtils.getNotFound(`${API_ERROR.VERSION_NOT_EXIST}: ${queryVersion}`);\n }\n\n // we have version, so we need to return specific version\n const [convertedManifest] = await this.getPackageNext(options);\n\n const version: Version | undefined = getVersion(convertedManifest.versions, queryVersion);\n\n debug('query by latest version %o and result %o', queryVersion, version);\n if (typeof version !== 'undefined') {\n debug('latest version found %o', version);\n return convertDistVersionToLocalTarballsUrl(\n convertedManifest.name,\n version,\n options.requestOptions,\n this.config.url_prefix\n );\n }\n\n // the version could be a dist-tag eg: beta, alpha, so we find the matched version\n // on disg-tag list\n if (_.isNil(convertedManifest[DIST_TAGS]) === false) {\n if (_.isNil(convertedManifest[DIST_TAGS][queryVersion]) === false) {\n // the version found as a distag\n const matchedDisTagVersion: string = convertedManifest[DIST_TAGS][queryVersion];\n debug('dist-tag version found %o', matchedDisTagVersion);\n const disTagVersion: Version | undefined = getVersion(\n convertedManifest.versions,\n matchedDisTagVersion\n );\n if (typeof disTagVersion !== 'undefined') {\n debug('dist-tag found %o', disTagVersion);\n return convertDistVersionToLocalTarballsUrl(\n convertedManifest.name,\n disTagVersion,\n options.requestOptions,\n this.config.url_prefix\n );\n }\n }\n } else {\n debug('dist tag not detected');\n }\n\n // we didn't find the version, not found error\n debug('package version not found %o', queryVersion);\n throw errorUtils.getNotFound(`${API_ERROR.VERSION_NOT_EXIST}: ${queryVersion}`);\n }\n\n public async getPackageManifest(options: IGetPackageOptionsNext): Promise<Manifest> {\n // convert dist remotes to local bars\n const [manifest] = await this.getPackageNext(options);\n const convertedManifest = convertDistRemoteToLocalTarballUrls(\n manifest,\n options.requestOptions,\n this.config.url_prefix\n );\n\n return convertedManifest;\n }\n\n private convertAbbreviatedManifest(manifest: Manifest): AbbreviatedManifest {\n const abbreviatedVersions = Object.keys(manifest.versions).reduce(\n (acc: AbbreviatedVersions, version: string) => {\n const _version = manifest.versions[version];\n // This should be align with this document\n // https://github.com/npm/registry/blob/master/docs/responses/package-metadata.md#abbreviated-version-object\n const _version_abbreviated = {\n name: _version.name,\n version: _version.version,\n description: _version.description,\n deprecated: _version.deprecated,\n bin: _version.bin,\n dist: _version.dist,\n engines: _version.engines,\n funding: _version.funding,\n directories: _version.directories,\n dependencies: _version.dependencies,\n devDependencies: _version.devDependencies,\n peerDependencies: _version.peerDependencies,\n optionalDependencies: _version.optionalDependencies,\n bundleDependencies: _version.bundleDependencies,\n // npm cli specifics\n _hasShrinkwrap: _version._hasShrinkwrap,\n hasInstallScript: _version.hasInstallScript,\n };\n acc[version] = _version_abbreviated;\n return acc;\n },\n {}\n );\n const convertedManifest = {\n name: manifest['name'],\n [DIST_TAGS]: manifest[DIST_TAGS],\n versions: abbreviatedVersions,\n modified: manifest.time.modified,\n // NOTE: special case for pnpm https://github.com/pnpm/rfcs/pull/2\n time: manifest.time,\n };\n\n return convertedManifest;\n }\n\n /**\n * Return a manifest or version based on the options.\n * @param options {Object}\n * @returns A package manifest or specific version\n */\n public async getPackageByOptions(\n options: IGetPackageOptionsNext\n ): Promise<Manifest | AbbreviatedManifest | Version> {\n // if no version we return the whole manifest\n if (_.isNil(options.version) === false) {\n return this.getPackageByVersion(options);\n } else {\n const manifest = await this.getPackageManifest(options);\n if (options.abbreviated === true) {\n debug('abbreviated manifest');\n return this.convertAbbreviatedManifest(manifest);\n }\n return manifest;\n }\n }\n\n public async getLocalDatabaseNext(): Promise<Version[]> {\n debug('get local database');\n const storage = this.localStorage.getStoragePlugin();\n const database = await storage.get();\n const packages: Version[] = [];\n for (const pkg of database) {\n debug('get local database %o', pkg);\n const manifest = await this.getPackageLocalMetadata(pkg);\n const latest = manifest[DIST_TAGS].latest;\n if (latest && manifest.versions[latest]) {\n const version: Version = manifest.versions[latest];\n const timeList = manifest.time as GenericBody;\n const time = timeList[latest];\n // @ts-ignore\n version.time = time;\n\n // Add for stars api\n // @ts-ignore\n version.users = manifest.users;\n\n packages.push(version);\n } else {\n this.logger.warn({ package: pkg }, 'package @{package} does not have a \"latest\" tag?');\n }\n }\n return packages;\n }\n\n public saveToken(token: Token): Promise<any> {\n if (_.isFunction(this.localStorage.getStoragePlugin().saveToken) === false) {\n return Promise.reject(\n errorUtils.getCode(HTTP_STATUS.SERVICE_UNAVAILABLE, SUPPORT_ERRORS.PLUGIN_MISSING_INTERFACE)\n );\n }\n\n return this.localStorage.getStoragePlugin().saveToken(token);\n }\n\n public deleteToken(user: string, tokenKey: string): Promise<any> {\n if (_.isFunction(this.localStorage.getStoragePlugin().deleteToken) === false) {\n return Promise.reject(\n errorUtils.getCode(HTTP_STATUS.SERVICE_UNAVAILABLE, SUPPORT_ERRORS.PLUGIN_MISSING_INTERFACE)\n );\n }\n\n return this.localStorage.getStoragePlugin().deleteToken(user, tokenKey);\n }\n\n public readTokens(filter: TokenFilter): Promise<Token[]> {\n if (_.isFunction(this.localStorage.getStoragePlugin().readTokens) === false) {\n return Promise.reject(\n errorUtils.getCode(HTTP_STATUS.SERVICE_UNAVAILABLE, SUPPORT_ERRORS.PLUGIN_MISSING_INTERFACE)\n );\n }\n\n return this.localStorage.getStoragePlugin().readTokens(filter);\n }\n\n /**\n * Initialize the storage asynchronously.\n * @param config Config\n * @param filters IPluginFilters\n * @returns Storage instance\n */\n public async init(config: Config, filters: IPluginFilters = []): Promise<void> {\n if (this.localStorage === null) {\n this.filters = filters || [];\n debug('filters available %o', filters);\n this.localStorage = new LocalStorage(this.config, logger);\n await this.localStorage.init();\n debug('local init storage initialized');\n await this.localStorage.getSecret(config);\n debug('local storage secret initialized');\n } else {\n debug('storage has been already initialized');\n }\n return;\n }\n\n /**\n * Consume the upstream and pipe it to a transformable stream.\n */\n private consumeSearchStream(\n uplinkId: string,\n uplink: IProxy,\n options: ProxySearchParams,\n searchPassThrough: PassThrough\n ): Promise<any> {\n return uplink.search({ ...options }).then((bodyStream) => {\n bodyStream.pipe(searchPassThrough, { end: false });\n bodyStream.on('error', (err: any): void => {\n logger.error(\n { uplinkId, err: err },\n 'search error for uplink @{uplinkId}: @{err?.message}'\n );\n searchPassThrough.end();\n });\n return new Promise((resolve) => bodyStream.on('end', resolve));\n });\n }\n\n /**\n * Retrieve a wrapper that provide access to the package location.\n * @param {Object} pkgName package name.\n * @return {Object}\n */\n private getPrivatePackageStorage(pkgName: string): IPackageStorage {\n debug('get local storage for %o', pkgName);\n return this.localStorage.getStoragePlugin().getPackageStorage(pkgName);\n }\n\n /**\n * Create a tarball stream from a package.\n * @param name\n * @param filename\n * @param options\n * @returns\n */\n public async getLocalTarball(\n pkgName: string,\n filename: string,\n { signal }: { signal: AbortSignal }\n ): Promise<Readable> {\n assert(validatioUtils.validateName(filename));\n const storage: IPackageStorage = this.getPrivatePackageStorage(pkgName);\n if (typeof storage === 'undefined') {\n return this.createFailureStreamResponseNext();\n }\n\n return await storage.readTarball(filename, { signal });\n }\n\n private async searchCachedPackages(\n searchStream: PassThrough,\n query: searchUtils.SearchQuery\n ): Promise<void> {\n debug('search on each package');\n this.logger.info(\n { t: query.text, q: query.quality, p: query.popularity, m: query.maintenance, s: query.size },\n 'search by text @{t}| maintenance @{m}| quality @{q}| popularity @{p}'\n );\n\n if (typeof this.localStorage.getStoragePlugin().search === 'undefined') {\n this.logger.info('plugin search not implemented yet');\n searchStream.end();\n } else {\n debug('search on each package by plugin');\n const items = await this.localStorage.getStoragePlugin().search(query);\n try {\n for (const searchItem of items) {\n const manifest = await this.getPackageLocalMetadata(searchItem.package.name);\n if (_.isEmpty(manifest?.versions) === false) {\n const searchPackage = mapManifestToSearchPackageBody(manifest, searchItem);\n const searchPackageItem: searchUtils.SearchPackageItem = {\n package: searchPackage,\n score: searchItem.score,\n verdaccioPkgCached: searchItem.verdaccioPkgCached,\n verdaccioPrivate: searchItem.verdaccioPrivate,\n flags: searchItem?.flags,\n // FUTURE: find a better way to calculate the score\n searchScore: 1,\n };\n searchStream.write(searchPackageItem);\n }\n }\n debug('search local stream end');\n searchStream.end();\n } catch (err) {\n this.logger.error({ err, query }, 'error on search by plugin @{err.message}');\n searchStream.emit('error', err);\n }\n }\n }\n\n private async removePackageByRevision(pkgName: string, revision: string): Promise<void> {\n const storage: IPackageStorage = this.getPrivatePackageStorage(pkgName);\n debug('get package metadata for %o', pkgName);\n if (typeof storage === 'undefined') {\n throw errorUtils.getServiceUnavailable('storage not initialized');\n }\n let manifest;\n try {\n manifest = await storage.readPackage(pkgName);\n manifest = normalizePackage(manifest);\n } catch (err: any) {\n if (err.code === STORAGE.NO_SUCH_FILE_ERROR || err.code === HTTP_STATUS.NOT_FOUND) {\n logger.info({ pkgName, revision }, 'package not found');\n throw errorUtils.getNotFound();\n }\n logger.error(\n { pkgName, revision, err: err.message },\n 'error @{err} while reading package @{pkgName}-{revision}'\n );\n throw err;\n }\n\n // TODO: move this to another method\n try {\n await this.localStorage.getStoragePlugin().remove(pkgName);\n // remove each attachment\n const attachments = Object.keys(manifest._attachments);\n debug('attachments to remove %s', attachments?.length);\n for (let attachment of attachments) {\n debug('remove attachment %s', attachment);\n await storage.deletePackage(attachment);\n logger.info({ attachment }, 'attachment @{attachment} removed');\n }\n // remove package.json\n debug('remove package.json');\n await storage.deletePackage(STORAGE.PACKAGE_FILE_NAME);\n // remove folder\n debug('remove package folder');\n await storage.removePackage();\n logger.info({ pkgName }, 'package @{pkgName} removed');\n } catch (err: any) {\n this.logger.error({ err }, 'removed package has failed @{err.message}');\n throw errorUtils.getBadData(err.message);\n }\n }\n\n /**\n * Get a package local manifest.\n *\n * Fails if package is not found.\n * @param name package name\n * @param revision of package\n * @returns local manifest\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n public async getPackageLocalMetadata(name: string, _revision?: string): Promise<Manifest> {\n const storage: IPackageStorage = this.getPrivatePackageStorage(name);\n debug('get package metadata for %o', name);\n if (typeof storage === 'undefined') {\n throw errorUtils.getServiceUnavailable('storage not initialized');\n }\n\n try {\n const result: Manifest = await storage.readPackage(name);\n return normalizePackage(result);\n } catch (err: any) {\n if (err.code === STORAGE.NO_SUCH_FILE_ERROR || err.code === HTTP_STATUS.NOT_FOUND) {\n debug('package %s not found', name);\n throw errorUtils.getNotFound();\n }\n this.logger.error(\n { err: err, file: STORAGE.PACKAGE_FILE_NAME },\n `error reading @{file}: @{!err.message}`\n );\n\n throw errorUtils.getInternalError();\n }\n }\n\n /**\n * Fail the stream response with an not found error.\n * @returns\n */\n private createFailureStreamResponseNext(): PassThrough {\n const stream: PassThrough = new PassThrough();\n\n // we ensure fails on the next tick into the event loop\n process.nextTick((): void => {\n stream.emit('error', errorUtils.getNotFound(API_ERROR.NO_SUCH_FILE));\n });\n\n return stream;\n }\n\n /**\n * Update a package and merge tags\n * @param name package name\n * @param tags list of dist-tags\n */\n public async mergeTagsNext(name: string, tags: MergeTags): Promise<Manifest> {\n return await this.updatePackageNext(name, async (data: Manifest): Promise<Manifest> => {\n let newData: Manifest = { ...data };\n for (const tag of Object.keys(tags)) {\n // this handle dist-tag rm command\n if (_.isNull(tags[tag])) {\n delete newData[DIST_TAGS][tag];\n continue;\n }\n\n if (_.isNil(newData.versions[tags[tag]])) {\n throw errorUtils.getNotFound(API_ERROR.VERSION_NOT_EXIST);\n }\n const version: string = tags[tag];\n newData = tagVersionNext(newData, version, tag);\n }\n\n return newData;\n });\n }\n\n private getUpLinkForDistFile(pkgName: string, distFile: DistFile): IProxy {\n let uplink: IProxy | null = null;\n\n for (const uplinkId in this.uplinks) {\n // refer to https://github.com/verdaccio/verdaccio/issues/1642\n if (hasProxyTo(pkgName, uplinkId, this.config.packages)) {\n uplink = this.uplinks[uplinkId];\n }\n }\n\n if (uplink == null) {\n debug('upstream not found creating one for %o', pkgName);\n uplink = new ProxyStorage(\n {\n url: distFile.url,\n cache: true,\n },\n this.config\n );\n }\n return uplink;\n }\n\n public async updateLocalMetadata(pkgName: string) {\n const storage = this.getPrivatePackageStorage(pkgName);\n\n if (!storage) {\n throw errorUtils.getNotFound();\n }\n }\n\n public async updateManifest(manifest: Manifest, options: UpdateManifestOptions): Promise<void> {\n if (isDeprecatedManifest(manifest)) {\n // if the manifest is deprecated, we need to update the package.json\n await this.deprecate(manifest, {\n ...options,\n });\n } else if (\n isPublishablePackage(manifest) === false &&\n validatioUtils.isObject(manifest.users)\n ) {\n // if user request to apply a star to the manifest\n await this.star(manifest, {\n ...options,\n });\n } else if (validatioUtils.validatePublishSingleVersion(manifest)) {\n // if continue, the version to be published does not exist\n // we create a new package\n const [mergedManifest, version] = await this.publishANewVersion(manifest, {\n ...options,\n });\n // send notification of publication (notification step, non transactional)\n try {\n const { name } = mergedManifest;\n await this.notify(mergedManifest, `${name}@${version}`);\n logger.info({ name, version }, 'notify for @{name}@@{version} has been sent');\n } catch (error: any) {\n logger.error({ error: error.message }, 'notify batch service has failed: @{error}');\n }\n } else {\n debug('invalid body format');\n logger.info(\n { packageName: options.name },\n `wrong package format on publish a package @{packageName}`\n );\n throw errorUtils.getBadRequest(API_ERROR.UNSUPORTED_REGISTRY_CALL);\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n private async deprecate(_body: Manifest, _options: PublishOptions): Promise<void> {\n // // const storage: IPackageStorage = this.getPrivatePackageStorage(opname);\n\n // if (typeof storage === 'undefined') {\n // throw errorUtils.getNotFound();\n // }\n throw errorUtils.getInternalError('no implemenation ready for npm deprecate');\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n private async star(_body: Manifest, _options: PublishOptions): Promise<void> {\n // // const storage: IPackageStorage = this.getPrivatePackageStorage(opname);\n\n // if (typeof storage === 'undefined') {\n // throw errorUtils.getNotFound();\n // }\n\n throw errorUtils.getInternalError('no implemenation ready for npm star');\n }\n\n /**\n * Get local package, on fails return null.\n * Errors are considered package not found.\n * @param name\n * @returns\n */\n private async getPackagelocalByNameNext(name: string): Promise<Manifest | null> {\n try {\n return await this.getPackageLocalMetadata(name);\n } catch (err: any) {\n debug('local package %s not found', name);\n return null;\n }\n }\n\n /**\n * Convert tarball as string into a Buffer and validate the length.\n * @param data the tarball data as string\n * @returns\n */\n private getBufferManifest(data: string): Buffer {\n const buffer = Buffer.from(data, 'base64');\n if (buffer.length === 0) {\n throw errorUtils.getBadData('refusing to accept zero-length file');\n }\n return buffer;\n }\n\n /**\n * Verify if the package exists in the local storage\n * (the package refers to the package.json), directory would return false.\n * @param pkgName package name\n * @returns boolean\n */\n private async hasPackage(pkgName: string): Promise<boolean> {\n const storage: IPackageStorage = this.getPrivatePackageStorage(pkgName);\n if (typeof storage === 'undefined') {\n throw errorUtils.getNotFound();\n }\n const hasPackage = await storage.hasPackage();\n debug('has package %o for %o', pkgName, hasPackage);\n return hasPackage;\n }\n\n /**\n * Create a new package.\n * This situation happens only of the package does not exist on the cache.\n *\n * @param body package metadata\n * @param options\n * @returns\n */\n private async publishANewVersion(\n body: Manifest,\n options: PublishOptions\n ): Promise<[Manifest, string]> {\n const { name } = options;\n debug('publishing a new package for %o', name);\n\n const manifest: Manifest = { ...validatioUtils.normalizeMetadata(body, name) };\n const { _attachments, versions } = manifest;\n\n // validation step, if _attachments is not an object throw error\n // _attachments is need it for holding the tarball buffer in the local storage as file\n // versions is need it for holding the version in the local storage as file\n // _attachments and validation are required otherwise cannot continue.\n if (isEmpty(_attachments)) {\n throw errorUtils.getBadRequest(API_ERROR.UNSUPORTED_REGISTRY_CALL);\n }\n\n // get the unique version available\n const [versionToPublish] = Object.keys(versions);\n\n // at this point document is either created or existed before\n const [firstAttachmentKey] = Object.keys(_attachments);\n const buffer = this.getBufferManifest(body._attachments[firstAttachmentKey].data as string);\n\n try {\n // we check if package exist already locally\n const manifest = await this.getPackagelocalByNameNext(name);\n // if continue, the version to be published does not exist\n if (manifest?.versions[versionToPublish] != null) {\n debug('%s version %s already exists', name, versionToPublish);\n throw errorUtils.getConflict();\n }\n\n // if execution get here, package does not exist locally, we search upstream\n const remoteManifest = await this.checkPackageRemote(name, this.isAllowPublishOffline());\n if (remoteManifest?.versions[versionToPublish] != null) {\n debug('%s version %s already exists', name, versionToPublish);\n throw errorUtils.getConflict();\n }\n\n const hasPackageInStorage = await this.hasPackage(name);\n if (!hasPackageInStorage) {\n await this.createNewLocalCachePackage(name, versionToPublish);\n }\n } catch (err: any) {\n debug('error on change or update a package with %o', err.message);\n logger.error({ err: err.message }, 'error on create package: @{err}');\n throw err;\n }\n\n // 1. after tarball has been successfully uploaded, we update the version\n try {\n // TODO: review why do this\n versions[versionToPublish].readme =\n _.isNil(manifest.readme) === false ? String(manifest.readme) : '';\n await this.addVersionNext(name, versionToPublish, versions[versionToPublish], null);\n } catch (err: any) {\n logger.error({ err: err.message }, 'updated version has failed: @{err}');\n debug('error on create a version for %o with error %o', name, err.message);\n // TODO: remove tarball if add version fails\n throw err;\n }\n\n // 2. update and merge tags\n let mergedManifest;\n try {\n // note: I could merge this with addVersionNext\n // 1. add version\n // 2. merge versions\n // 3. upload tarball\n // 3.update once to the storage (easy peasy)\n mergedManifest = await this.mergeTagsNext(name, manifest[DIST_TAGS]);\n } catch (err: any) {\n logger.error({ err: err.message }, 'merge version has failed: @{err}');\n debug('error on create a version for %o with error %o', name, err.message);\n // TODO: undo if this fails\n // 1. remove tarball\n // 2. remove updated version\n throw err;\n }\n\n // 3. upload the tarball to the storage\n try {\n const readable = Readable.from(buffer);\n await this.uploadTarball(name, firstAttachmentKey, readable, {\n signal: options.signal,\n });\n } catch (err: any) {\n logger.error({ err: err.message }, 'upload tarball has failed: @{err}');\n throw err;\n }\n\n logger.info(\n { name, version: versionToPublish },\n 'package @{name}@@{version} has been published'\n );\n\n return [mergedManifest, versionToPublish];\n }\n\n // TODO: pending implementation\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n private async notify(_manifest: Manifest, _message: string): Promise<void> {\n return;\n }\n\n private getProxyList() {\n const uplinksList = Object.keys(this.uplinks);\n\n return uplinksList;\n }\n\n /**\n * Wrap uploadTarballAsStream into a promise.\n * @param name package name\n * @param fileName tarball name\n * @param contentReadable content as readable stream\n * @param options\n * @returns\n */\n public async uploadTarball(\n name: string,\n fileName: string,\n contentReadable: Readable,\n { signal }\n ): Promise<void> {\n return new Promise((resolve, reject) => {\n (async () => {\n const stream: Writable = await this.uploadTarballAsStream(name, fileName, {\n signal,\n });\n\n stream.on('error', (err) => {\n debug(\n 'error on stream a tarball %o for %o with error %o',\n 'foo.tar.gz',\n name,\n err.message\n );\n reject(err);\n });\n stream.on('success', () => {\n this.logger.debug(\n { fileName, name },\n 'file @{fileName} for package @{name} has been succesfully uploaded'\n );\n resolve();\n });\n\n await pipeline(contentReadable, stream, { signal });\n })().catch((err) => {\n reject(err);\n });\n });\n }\n\n public async uploadTarballAsStream(\n pkgName: string,\n filename: string,\n { signal }\n ): Promise<PassThrough> {\n debug(`add a tarball for %o`, pkgName);\n assert(validatioUtils.validateName(filename));\n\n const shaOneHash = createTarballHash();\n const transformHash = new Transform({\n transform(chunk: any, _encoding: string, callback: any): void {\n // measure the length for validation reasons\n shaOneHash.update(chunk);\n callback(null, chunk);\n },\n });\n const uploadStream = new PassThrough();\n const storage = this.getPrivatePackageStorage(pkgName);\n\n // FUTURE: this validation could happen even before\n if (pkgName === PROTO_NAME) {\n process.nextTick((): void => {\n uploadStream.emit('error', errorUtils.getForbidden());\n });\n return uploadStream;\n }\n\n // FIXME: this condition will never met, storage is always defined\n if (!storage) {\n process.nextTick((): void => {\n uploadStream.emit('error', \"can't upload this package storage is missing\");\n });\n return uploadStream;\n }\n\n const fileDoesExist = await storage.hasTarball(filename);\n if (fileDoesExist) {\n process.nextTick((): void => {\n uploadStream.emit('error', errorUtils.getConflict());\n });\n } else {\n const localStorageWriteStream = await storage.writeTarball(filename, { signal });\n\n localStorageWriteStream.on('open', async () => {\n await pipeline(uploadStream, transformHash, localStorageWriteStream, { signal });\n });\n\n // once the file descriptor has been closed\n localStorageWriteStream.on('close', async () => {\n try {\n debug('uploaded tarball %o for %o', filename, pkgName);\n // update the package metadata\n await this.updatePackageNext(pkgName, async (data: Manifest): Promise<Manifest> => {\n const newData: Manifest = { ...data };\n debug('added _attachment for %o', pkgName);\n newData._attachments[filename] = {\n // TODO: add integrity hash here\n shasum: shaOneHash.digest('hex'),\n };\n\n return newData;\n });\n debug('emit success for %o', pkgName);\n uploadStream.emit('success');\n } catch (err: any) {\n // FUTURE: if the update package fails, remove tarball to avoid left\n // orphan tarballs\n debug(\n 'something has failed on upload tarball %o for %o : %s',\n filename,\n pkgName,\n err.message\n );\n uploadStream.emit('error', err);\n }\n });\n\n // something went wrong writing into the local storage\n localStorageWriteStream.on('error', async (err: any) => {\n uploadStream.emit('error', err);\n });\n }\n\n return uploadStream;\n }\n\n /**\n * Add a new version to a package.\n * @param name package name\n * @param version version\n * @param metadata version metadata\n * @param tag tag of the version\n */\n public async addVersionNext(\n name: string,\n version: string,\n metadata: Version,\n tag: StringValue\n ): Promise<void> {\n debug(`add version %s package for %s`, version, name);\n await this.updatePackageNext(name, async (data: Manifest): Promise<Manifest> => {\n // keep only one readme per package\n data.readme = metadata.readme;\n debug('%s` readme mutated', name);\n // TODO: lodash remove\n metadata = cleanUpReadme(metadata);\n metadata.contributors = normalizeContributors(metadata.contributors as Author[]);\n debug('%s` contributors normalized', name);\n\n // if uploaded tarball has a different shasum, it's very likely that we\n // have some kind of error\n if (validatioUtils.isObject(metadata.dist) && _.isString(metadata.dist.tarball)) {\n const tarball = metadata.dist.tarball.replace(/.*\\//, '');\n if (validatioUtils.isObject(data._attachments[tarball])) {\n if (\n _.isNil(data._attachments[tarball].shasum) === false &&\n _.isNil(metadata.dist.shasum) === false\n ) {\n if (data._attachments[tarball].shasum != metadata.dist.shasum) {\n const errorMessage =\n `shasum error, ` +\n `${data._attachments[tarball].shasum} != ${metadata.dist.shasum}`;\n throw errorUtils.getBadRequest(errorMessage);\n }\n }\n data._attachments[tarball].version = version;\n }\n\n // if the time field doesn't exist, we create it, some old storage\n // might not have it\n // https://github.com/verdaccio/verdaccio/issues/740\n if (_.isNil(data.time)) {\n this.logger.warn(\n { name },\n 'time field could not be found, it has been recreated for @{name}'\n );\n data.time = {};\n }\n\n // populate the time field with the date of the version\n const currentDate = new Date().toISOString();\n data.time.modified = currentDate;\n if (!data.time?.created) {\n data.time.created = currentDate;\n }\n\n if (typeof data.time[version] === 'string') {\n // this should not h appen, but we keep this check to avoid or easy bug report\n this.logger.warn(\n { name, version },\n 'the time for the version @{version} already exists, it has been overwritten for package @{name}'\n );\n }\n data.time[version] = currentDate;\n debug('time added for %s version %s', name, version);\n }\n\n data.versions[version] = metadata;\n // TODO: review this method, it's a bit ugly\n tagVersion(data, version, tag);\n\n try {\n debug('%s` add on database', name);\n await this.localStorage.getStoragePlugin().add(name);\n this.logger.debug({ name, version }, 'version @{version} added to database for @{name}');\n } catch (err: any) {\n throw errorUtils.getBadData(err.message);\n }\n return data;\n });\n }\n\n /**\n * Create an empty new local cache package without versions.\n * @param name name of the package\n * @returns\n */\n private async createNewLocalCachePackage(name: string, latestVersion: string): Promise<void> {\n const storage: IPackageStorage = this.getPrivatePackageStorage(name);\n\n if (!storage) {\n debug(`storage is missing for %o package cannot be added`, name);\n throw errorUtils.getNotFound('this package cannot be added');\n }\n\n const currentTime = new Date().toISOString();\n const packageData: Manifest = {\n ...generatePackageTemplate(name),\n time: {\n created: currentTime,\n modified: currentTime,\n [latestVersion]: currentTime,\n },\n };\n\n try {\n await storage.createPackage(name, packageData);\n this.logger.info({ name }, 'created new package @{name}');\n return;\n } catch (err: any) {\n if (\n _.isNull(err) === false &&\n (err.code === STORAGE.FILE_EXIST_ERROR || err.code === HTTP_STATUS.CONFLICT)\n ) {\n debug(`error on creating a package for %o with error %o`, name, err.message);\n throw errorUtils.getConflict();\n }\n return;\n }\n }\n\n private isAllowPublishOffline(): boolean {\n return (\n typeof this.config.publish !== 'undefined' &&\n _.isBoolean(this.config.publish.allow_offline) &&\n this.config.publish.allow_offline\n );\n }\n\n /**\n *\n * @param name package name\n * @param uplinksLook\n * @returns\n */\n private async checkPackageRemote(name: string, uplinksLook: boolean): Promise<Manifest | null> {\n try {\n // we provide a null manifest, thus the manifest returned will be the remote one\n const [remoteManifest, upLinksErrors] = await this.syncUplinksMetadataNext(name, null, {\n uplinksLook,\n });\n\n // checking package exist already\n if (isNil(remoteManifest) === false) {\n throw errorUtils.getConflict(API_ERROR.PACKAGE_EXIST);\n }\n\n for (let errorItem = 0; errorItem < upLinksErrors.length; errorItem++) {\n // checking error\n // if uplink fails with a status other than 404, we report failure\n if (isNil(upLinksErrors[errorItem][0]) === false) {\n if (upLinksErrors[errorItem][0].status !== HTTP_STATUS.NOT_FOUND) {\n if (upLinksErrors) {\n return null;\n }\n\n throw errorUtils.getServiceUnavailable(API_ERROR.UPLINK_OFFLINE_PUBLISH);\n }\n }\n }\n return remoteManifest;\n } catch (err: any) {\n if (err && err.status !== HTTP_STATUS.NOT_FOUND) {\n throw err;\n }\n return null;\n }\n }\n\n private setDefaultRevision(json: Manifest): Manifest {\n // calculate revision from couch db\n if (_.isString(json._rev) === false) {\n json._rev = STORAGE.DEFAULT_REVISION;\n }\n\n // this is intended in debug mode we do not want modify the store revision\n if (_.isNil(this.config._debug)) {\n json._rev = generateRevision(json._rev);\n }\n\n return json;\n }\n\n private async writePackageNext(name: string, json: Manifest): Promise<void> {\n const storage: any = this.getPrivatePackageStorage(name);\n if (_.isNil(storage)) {\n // TODO: replace here 500 error\n throw errorUtils.getBadData();\n }\n await storage.savePackage(name, this.setDefaultRevision(json));\n }\n\n /**\n * @param {*} name package name\n * @param {*} updateHandler function(package, cb) - update function\n * @param {*} callback callback that gets invoked after it's all updated\n * @return {Function}\n */\n private async updatePackageNext(\n name: string,\n updateHandler: (manifest: Manifest) => Promise<Manifest>\n ): Promise<Manifest> {\n const storage: IPackageStorage = this.getPrivatePackageStorage(name);\n\n if (!storage) {\n throw errorUtils.getNotFound();\n }\n\n // we update the package on the local storage\n const updatedManifest: Manifest = await storage.updatePackage(name, updateHandler);\n // after correctly updated write to the storage\n try {\n await this.writePackageNext(name, normalizePackage(updatedManifest));\n return updatedManifest;\n } catch (err: any) {\n if (err.code === resourceNotAvailable) {\n throw errorUtils.getInternalError('resource temporarily unavailable');\n } else if (err.code === noSuchFile) {\n throw errorUtils.getNotFound();\n } else {\n throw err;\n }\n }\n }\n\n /**\n *\n * @protected\n * @param {IGetPackageOptionsNext} options\n * @return {*} {Promise<[Manifest, any[]]>}\n * @memberof AbstractStorage\n */\n private async getPackageNext(options: IGetPackageOptionsNext): Promise<[Manifest, any[]]> {\n const { name } = options;\n debug('get package for %o', name);\n let data: Manifest | null = null;\n\n try {\n data = await this.getPackageLocalMetadata(name);\n } catch (err: any) {\n // if error code is higher than 500 stop here\n if (err && (!err.status || err.status >= HTTP_STATUS.INTERNAL_ERROR)) {\n throw err;\n }\n }\n\n // if we can't get the local metadata, we try to get the remote metadata\n // if we do to have local metadata, we try to update it with the upstream registry\n debug('sync uplinks for %o', name);\n const [remoteManifest, upLinksErrors] = await this.syncUplinksMetadataNext(name, data, {\n uplinksLook: options.uplinksLook,\n retry: options.retry,\n remoteAddress: options.requestOptions.remoteAddress,\n // etag??\n });\n\n // if either local data and upstream data are empty, we throw an error\n if (!remoteManifest && _.isNull(data)) {\n throw errorUtils.getNotFound(`${API_ERROR.NOT_PACKAGE_UPLINK}: ${name}`);\n // if the remote manifest is empty, we return local data\n } else if (!remoteManifest && !_.isNull(data)) {\n // no data on uplinks\n return [data as Manifest, upLinksErrors];\n }\n\n // if we have local data, we try to update it with the upstream registry\n const normalizedPkg = Object.assign({}, remoteManifest, {\n // FIXME: clean up mutation within cleanUpLinksRef method\n ...normalizeDistTags(cleanUpLinksRef(remoteManifest as Manifest, options.keepUpLinkData)),\n _attachments: {},\n });\n\n debug('no. sync uplinks errors %o for %s', upLinksErrors?.length, name);\n return [normalizedPkg, upLinksErrors];\n }\n\n /**\n * Function fetches package metadata from uplinks and synchronizes it with local data\n if package is available locally, it MUST be provided in pkginfo.\n\n Using this example:\n\n \"jquery\":\n access: $all\n publish: $authenticated\n unpublish: $authenticated\n # two uplinks setup\n proxy: ver npmjs\n # one uplink setup\n proxy: npmjs\n\n A package requires uplinks syncronization if enables the proxy section, uplinks\n can be more than one, the more are the most slow request will take, the request\n are made in serie and if 1st call fails, the second will be triggered, otherwise\n the 1st will reply and others will be discareded. The order is important.\n\n Errors on upkinks are considered are, time outs, connection fails and http status 304,\n in that case the request returns empty body and we want ask next on the list if has fresh\n updates.\n */\n public async syncUplinksMetadataNext(\n name: string,\n localManifest: Manifest | null,\n options: ISyncUplinksOptions = {}\n ): Promise<[Manifest | null, any]> {\n let found = localManifest !== null;\n let syncManifest: Manifest | null = null;\n const upLinks: string[] = [];\n const hasToLookIntoUplinks = _.isNil(options.uplinksLook) || options.uplinksLook;\n debug('is sync uplink enabled %o', hasToLookIntoUplinks);\n\n for (const uplink in this.uplinks) {\n if (hasProxyTo(name, uplink, this.config.packages) && hasToLookIntoUplinks) {\n debug('sync uplink %o', uplink);\n upLinks.push(uplink);\n }\n }\n\n // if none uplink match we return the local manifest\n if (upLinks.length === 0) {\n debug('no uplinks found for %o upstream update aborted', name);\n return [localManifest, []];\n }\n\n const uplinksErrors: any[] = [];\n // we resolve uplinks async in serie, first come first serve\n for (const uplink of upLinks) {\n try {\n const tempManifest = _.isNil(localManifest)\n ? generatePackageTemplate(name)\n : { ...localManifest };\n syncManifest = await this.mergeCacheRemoteMetadata(\n this.uplinks[uplink],\n tempManifest,\n options\n );\n debug('syncing on uplink %o', syncManifest.name);\n if (_.isNil(syncManifest) === false) {\n found = true;\n break;\n }\n } catch (err: any) {\n debug('error captured on uplink %o', err.message);\n uplinksErrors.push(err);\n // enforce use next uplink on the list\n continue;\n }\n }\n\n if (found && syncManifest !== null) {\n // updates the local cache manifest with fresh data\n let updatedCacheManifest = await this.updateVersionsNext(name, syncManifest);\n // plugin filter applied to the manifest\n const [filteredManifest, filtersErrors] = await this.applyFilters(updatedCacheManifest);\n return [\n { ...updatedCacheManifest, ...filteredManifest },\n [...uplinksErrors, ...filtersErrors],\n ];\n } else if (found && _.isNil(localManifest) === false) {\n return [localManifest, uplinksErrors];\n } else {\n // if is not found, calculate the right error to return\n debug('uplinks sync failed with %o errors', uplinksErrors.length);\n for (const err of uplinksErrors) {\n const { code } = err;\n if (code === 'ETIMEDOUT' || code === 'ESOCKETTIMEDOUT' || code === 'ECONNRESET') {\n debug('uplinks sync failed with timeout error');\n throw errorUtils.getServiceUnavailable(err.code);\n }\n // we bubble up the 304 special error case\n if (code === HTTP_STATUS.NOT_MODIFIED) {\n debug('uplinks sync failed with 304 error');\n throw err;\n }\n }\n debug('uplinks sync failed with no package found');\n\n throw errorUtils.getNotFound(API_ERROR.NO_PACKAGE);\n }\n }\n\n /**\n * Merge a manifest with a remote manifest.\n *\n * If the uplinks are not available, the local manifest is returned.\n * If the uplinks are available, the local manifest is merged with the remote one.\n *\n *\n * @param uplink uplink instance\n * @param cachedManifest the local cached manifest\n * @param options options\n * @returns Returns a promise that resolves with the merged manifest.\n */\n private async mergeCacheRemoteMetadata(\n uplink: IProxy,\n cachedManifest: Manifest,\n options: ISyncUplinksOptions\n ): Promise<Manifest> {\n // we store which uplink is updating the manifest\n const upLinkMeta = cachedManifest._uplinks[uplink.upname];\n let _cacheManifest = { ...cachedManifest };\n\n if (validatioUtils.isObject(upLinkMeta)) {\n const fetched = upLinkMeta.fetched;\n\n // we check the uplink cache is fresh\n if (fetched && Date.now() - fetched < uplink.maxage) {\n return cachedManifest;\n }\n }\n\n const remoteOptions = Object.assign({}, options, {\n etag: upLinkMeta?.etag,\n });\n\n // get the latest metadata from the uplink\n const [remoteManifest, etag] = await uplink.getRemoteMetadataNext(\n _cacheManifest.name,\n remoteOptions\n );\n\n try {\n _cacheManifest = validatioUtils.normalizeMetadata(_cacheManifest, _cacheManifest.name);\n } catch (err: any) {\n this.logger.error(\n {\n err: err,\n },\n 'package.json validating error @{!err?.message}\\n@{err.stack}'\n );\n throw err;\n }\n // updates the _uplink metadata fields, cache, etc\n _cacheManifest = updateUpLinkMetadata(uplink.upname, _cacheManifest, etag);\n // merge time field cache and remote\n _cacheManifest = mergeUplinkTimeIntoLocalNext(_cacheManifest, remoteManifest);\n // update the _uplinks field in the cache\n _cacheManifest = updateVersionsHiddenUpLinkNext(_cacheManifest, uplink);\n try {\n // merge versions from remote into the cache\n _cacheManifest = mergeVersions(_cacheManifest, remoteManifest);\n return _cacheManifest;\n } catch (err: any) {\n this.logger.error(\n {\n err: err,\n },\n 'package.json merge has failed @{!err?.message}\\n@{err.stack}'\n );\n throw err;\n }\n }\n\n /**\n * Apply filters to manifest.\n * @param manifest\n * @returns\n */\n public async applyFilters(manifest: Manifest): Promise<[Manifest, any]> {\n if (this.filters.length === 0) {\n return [manifest, []];\n }\n\n let filterPluginErrors: any[] = [];\n let filteredManifest = { ...manifest };\n for (const filter of this.filters) {\n // These filters can assume it's save to modify packageJsonLocal\n // and return it directly for\n // performance (i.e. need not be pure)\n try {\n filteredManifest = await filter.filter_metadata(manifest);\n } catch (err: any) {\n this.logger.error({ err: err.message }, 'filter has failed @{err}');\n filterPluginErrors.push(err);\n }\n }\n return [filteredManifest, filterPluginErrors];\n }\n\n private _createNewPackageNext(name: string): Manifest {\n return normalizePackage(generatePackageTemplate(name));\n }\n\n /**\n * Ensure the dist file remains as the same protocol\n * @param {Object} hash metadata\n * @param {String} upLinkKey registry key\n * @private\n * @deprecated use _updateUplinkToRemoteProtocolNext (???)\n */\n private updateUplinkToRemoteProtocol(hash: DistFile, upLinkKey: string): void {\n // if we got this information from a known registry,\n // use the same protocol for the tarball\n const tarballUrl: any = URL.parse(hash.url);\n const uplinkUrl: any = URL.parse(this.config.uplinks[upLinkKey].url);\n\n if (uplinkUrl.host === tarballUrl.host) {\n tarballUrl.protocol = uplinkUrl.protocol;\n hash.registry = upLinkKey;\n hash.url = URL.format(tarballUrl);\n }\n }\n\n /**\n * Create or read a package.\n *\n * If the package already exists, it will be read.\n * If the package is not found, it will be created.\n * If the error is anything else will throw an error\n *\n * @param {*} pkgName\n * @param {*} callback\n * @return {Function}\n */\n private async readCreatePackage(pkgName: string): Promise<Manifest> {\n const storage: any = this.getPrivatePackageStorage(pkgName);\n if (_.isNil(storage)) {\n throw errorUtils.getInternalError('storage could not be found');\n }\n\n try {\n const result: Manifest = await storage.readPackage(pkgName);\n return normalizePackage(result);\n } catch (err: any) {\n if (err.code === STORAGE.NO_SUCH_FILE_ERROR || err.code === HTTP_STATUS.NOT_FOUND) {\n return this._createNewPackageNext(pkgName);\n } else {\n this.logger.error(\n { err: err, file: STORAGE.PACKAGE_FILE_NAME },\n `'error reading' @{file}: @{!err.message}`\n );\n\n throw errorUtils.getInternalError();\n }\n }\n }\n\n /**\n Updates the local cache with the merge from the remote/client manifest.\n\n The steps are the following.\n 1. Get the latest version of the package from the cache.\n 2. If does not exist will return a \n\n @param name\n @param remoteManifest\n @returns return a merged manifest.\n */\n public async updateVersionsNext(name: string, remoteManifest: Manifest): Promise<Manifest> {\n debug(`updating versions for package %o`, name);\n let cacheManifest: Manifest = await this.readCreatePackage(name);\n let change = false;\n // updating readme\n cacheManifest.readme = getLatestReadme(remoteManifest);\n if (remoteManifest.readme !== cacheManifest.readme) {\n debug('manifest readme updated for %o', name);\n change = true;\n }\n\n debug('updating new remote versions');\n for (const versionId in remoteManifest.versions) {\n // if detect a new remote version does not exist cache\n if (_.isNil(cacheManifest.versions[versionId])) {\n debug('new version from upstream %o', versionId);\n let version = remoteManifest.versions[versionId];\n\n // we don't keep readme for package versions,\n // only one readme per package\n // TODO: readme clean up could be saved in configured eventually\n version = cleanUpReadme(version);\n debug('clean up readme for %o', versionId);\n version.contributors = normalizeContributors(version.contributors as Author[]);\n\n change = true;\n cacheManifest.versions[versionId] = version;\n\n if (version?.dist?.tarball) {\n const filename = pkgUtils.extractTarballName(version.dist.tarball);\n // store a fast access to the dist file by tarball name\n // it does NOT overwrite any existing records\n if (_.isNil(cacheManifest?._distfiles[filename])) {\n const hash: DistFile = (cacheManifest._distfiles[filename] = {\n url: version.dist.tarball,\n sha: version.dist.shasum,\n });\n // store cache metadata this the manifest\n const upLink: string = version[Symbol.for('__verdaccio_uplink')];\n if (_.isNil(upLink) === false) {\n this.updateUplinkToRemoteProtocol(hash, upLink);\n }\n }\n }\n } else {\n debug('no new versions from upstream %s', name);\n }\n }\n\n debug('update dist-tags');\n for (const tag in remoteManifest[DIST_TAGS]) {\n if (\n !cacheManifest[DIST_TAGS][tag] ||\n cacheManifest[DIST_TAGS][tag] !== remoteManifest[DIST_TAGS][tag]\n ) {\n change = true;\n cacheManifest[DIST_TAGS][tag] = remoteManifest[DIST_TAGS][tag];\n }\n }\n\n for (const up in remoteManifest._uplinks) {\n if (Object.prototype.hasOwnProperty.call(remoteManifest._uplinks, up)) {\n const need_change =\n !isObject(cacheManifest._uplinks[up]) ||\n remoteManifest._uplinks[up].etag !== cacheManifest._uplinks[up].etag ||\n remoteManifest._uplinks[up].fetched !== cacheManifest._uplinks[up].fetched;\n\n if (need_change) {\n change = true;\n cacheManifest._uplinks[up] = remoteManifest._uplinks[up];\n }\n }\n }\n\n debug('update time');\n if ('time' in remoteManifest && !_.isEqual(cacheManifest.time, remoteManifest.time)) {\n cacheManifest.time = remoteManifest.time;\n change = true;\n }\n\n if (change) {\n debug('updating package info %o', name);\n await this.writePackageNext(name, cacheManifest);\n return cacheManifest;\n } else {\n return cacheManifest;\n }\n }\n}\n\nexport { Storage };\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"storage.js","names":["debug","buildDebug","noSuchFile","resourceNotAvailable","PROTO_NAME","Storage","constructor","config","uplinks","setupUpLinks","logger","child","module","filters","localStorage","Object","keys","ABBREVIATED_HEADER","changePackageNext","name","metadata","revision","validatioUtils","isObject","versions","DIST_TAGS","errorUtils","getBadData","updatePackageNext","localData","version","incomingVersion","_","isNil","info","time","file","_attachments","prototype","hasOwnProperty","call","incomingDeprecated","deprecated","modified","Date","toISOString","USERS","removePackage","removePackageByRevision","removeTarball","filename","_revision","assert","validateName","storage","getPrivatePackageStorage","error","getInternalError","API_ERROR","INTERNAL_SERVER_ERROR","cacheManifest","readPackage","getNotFound","err","code","manifest","data","newData","deletePackage","search","options","transformResults","TransFormResults","objectMode","streamPassThrough","PassThrough","upLinkList","getProxyList","searchUplinksStreams","map","uplinkId","uplink","consumeSearchStream","Promise","allSettled","message","emit","searchCachedPackages","query","outPutStream","streamPipeline","on","chunk","push","resolve","searchFinalResults","removeDuplicates","length","getTarballFromUpstream","signal","cachedManifest","getPackageLocalMetadata","_distfiles","url","distFile","current_length","expected_length","passThroughRemoteStream","proxy","getUpLinkForDistFile","remoteStream","fetchTarballNext","cache","localStorageWriteStream","writeTarball","pipeline","res","statusCode","HTTP_STATUS","NOT_FOUND","NOT_FILE_UPLINK","OK","MULTIPLE_CHOICES","headers","HEADER_TYPE","CONTENT_LENGTH","progress","transferred","total","CONTENT_MISMATCH","updatedManifest","syncUplinksMetadataNext","uplinksLook","NO_SUCH_FILE","getTarballNext","isOpen","localTarballStream","localStream","getLocalTarball","STORAGE","NO_SUCH_FILE_ERROR","then","uplinkStream","catch","getPackageByVersion","queryVersion","VERSION_NOT_EXIST","convertedManifest","getPackageNext","getVersion","convertDistVersionToLocalTarballsUrl","requestOptions","url_prefix","matchedDisTagVersion","disTagVersion","getPackageManifest","convertDistRemoteToLocalTarballUrls","convertAbbreviatedManifest","abbreviatedVersions","reduce","acc","_version","_version_abbreviated","description","bin","dist","engines","funding","directories","dependencies","devDependencies","peerDependencies","optionalDependencies","bundleDependencies","_hasShrinkwrap","hasInstallScript","getPackageByOptions","abbreviated","getLocalDatabaseNext","getStoragePlugin","database","get","packages","pkg","latest","timeList","users","warn","package","saveToken","token","isFunction","reject","getCode","SERVICE_UNAVAILABLE","SUPPORT_ERRORS","PLUGIN_MISSING_INTERFACE","deleteToken","user","tokenKey","readTokens","filter","init","LocalStorage","getSecret","searchPassThrough","bodyStream","pipe","end","pkgName","getPackageStorage","createFailureStreamResponseNext","readTarball","searchStream","t","text","q","quality","p","popularity","m","maintenance","s","size","items","searchItem","isEmpty","searchPackage","mapManifestToSearchPackageBody","searchPackageItem","score","verdaccioPkgCached","verdaccioPrivate","flags","searchScore","write","getServiceUnavailable","normalizePackage","remove","attachments","attachment","PACKAGE_FILE_NAME","result","stream","process","nextTick","mergeTagsNext","tags","tag","isNull","tagVersionNext","hasProxyTo","ProxyStorage","updateLocalMetadata","updateManifest","isDeprecatedManifest","deprecate","isPublishablePackage","star","validatePublishSingleVersion","mergedManifest","publishANewVersion","notify","packageName","getBadRequest","UNSUPORTED_REGISTRY_CALL","_body","_options","getPackagelocalByNameNext","getBufferManifest","buffer","Buffer","from","hasPackage","body","normalizeMetadata","versionToPublish","firstAttachmentKey","getConflict","publish","allow_offline","remoteManifest","checkPackageRemote","hasPackageInStorage","createNewLocalCachePackage","readme","String","addVersionNext","readable","Readable","uploadTarball","basename","_manifest","_message","uplinksList","fileName","contentReadable","uploadTarballAsStream","shaOneHash","createTarballHash","transformHash","Transform","transform","_encoding","callback","update","uploadStream","getForbidden","fileDoesExist","hasTarball","shasum","digest","cleanUpReadme","contributors","normalizeContributors","isString","tarball","replace","errorMessage","currentDate","created","tagVersion","add","latestVersion","currentTime","packageData","generatePackageTemplate","createPackage","FILE_EXIST_ERROR","CONFLICT","upLinksErrors","PACKAGE_EXIST","errorItem","status","UPLINK_OFFLINE_PUBLISH","setDefaultRevision","json","_rev","DEFAULT_REVISION","_debug","generateRevision","writePackageNext","savePackage","updateHandler","updatePackage","INTERNAL_ERROR","retry","remoteAddress","NOT_PACKAGE_UPLINK","normalizedPkg","assign","normalizeDistTags","cleanUpLinksRef","keepUpLinkData","localManifest","found","syncManifest","upLinks","hasToLookIntoUplinks","uplinksErrors","tempManifest","mergeCacheRemoteMetadata","updatedCacheManifest","updateVersionsNext","filteredManifest","filtersErrors","applyFilters","NOT_MODIFIED","NO_PACKAGE","upLinkMeta","_uplinks","upname","_cacheManifest","fetched","now","maxage","remoteOptions","etag","getRemoteMetadataNext","updateUpLinkMetadata","mergeUplinkTimeIntoLocalNext","updateVersionsHiddenUpLinkNext","mergeVersions","filterPluginErrors","filter_metadata","_createNewPackageNext","updateUplinkToRemoteProtocol","hash","upLinkKey","tarballUrl","URL","parse","uplinkUrl","host","protocol","registry","format","readCreatePackage","change","getLatestReadme","versionId","pkgUtils","extractTarballName","sha","upLink","Symbol","for","up","need_change","isEqual"],"sources":["../src/storage.ts"],"sourcesContent":["import assert from 'assert';\nimport buildDebug from 'debug';\nimport _, { isEmpty, isNil } from 'lodash';\nimport { basename } from 'path';\nimport { PassThrough, Readable, Transform, pipeline as streamPipeline } from 'stream';\nimport { pipeline } from 'stream/promises';\nimport { default as URL } from 'url';\n\nimport { hasProxyTo } from '@verdaccio/config';\nimport {\n API_ERROR,\n DIST_TAGS,\n HEADER_TYPE,\n HTTP_STATUS,\n SUPPORT_ERRORS,\n USERS,\n errorUtils,\n pkgUtils,\n searchUtils,\n validatioUtils,\n} from '@verdaccio/core';\nimport { logger } from '@verdaccio/logger';\nimport { IProxy, ISyncUplinksOptions, ProxySearchParams, ProxyStorage } from '@verdaccio/proxy';\nimport {\n convertDistRemoteToLocalTarballUrls,\n convertDistVersionToLocalTarballsUrl,\n} from '@verdaccio/tarball';\nimport {\n AbbreviatedManifest,\n AbbreviatedVersions,\n Author,\n Config,\n DistFile,\n GenericBody,\n IPackageStorage,\n Logger,\n Manifest,\n MergeTags,\n StringValue,\n Token,\n TokenFilter,\n Version,\n} from '@verdaccio/types';\nimport { createTarballHash, isObject, normalizeContributors } from '@verdaccio/utils';\n\nimport {\n PublishOptions,\n UpdateManifestOptions,\n cleanUpReadme,\n isDeprecatedManifest,\n mapManifestToSearchPackageBody,\n tagVersion,\n tagVersionNext,\n} from '.';\nimport { TransFormResults } from './lib/TransFormResults';\nimport { removeDuplicates } from './lib/search-utils';\nimport { isPublishablePackage } from './lib/star-utils';\nimport {\n STORAGE,\n cleanUpLinksRef,\n generatePackageTemplate,\n generateRevision,\n getLatestReadme,\n mergeUplinkTimeIntoLocalNext,\n mergeVersions,\n normalizeDistTags,\n normalizePackage,\n updateUpLinkMetadata,\n} from './lib/storage-utils';\nimport { ProxyInstanceList, setupUpLinks, updateVersionsHiddenUpLinkNext } from './lib/uplink-util';\nimport { getVersion } from './lib/versions-utils';\nimport { LocalStorage } from './local-storage';\nimport { IGetPackageOptionsNext, IPluginFilters } from './type';\n\nconst debug = buildDebug('verdaccio:storage');\n\nexport const noSuchFile = 'ENOENT';\nexport const resourceNotAvailable = 'EAGAIN';\nexport const PROTO_NAME = '__proto__';\n\nclass Storage {\n public localStorage: LocalStorage;\n public filters: IPluginFilters;\n public readonly config: Config;\n public readonly logger: Logger;\n public readonly uplinks: ProxyInstanceList;\n public constructor(config: Config) {\n this.config = config;\n this.uplinks = setupUpLinks(config);\n this.logger = logger.child({ module: 'storage' });\n this.filters = [];\n // @ts-ignore\n this.localStorage = null;\n debug('uplinks available %o', Object.keys(this.uplinks));\n }\n\n static ABBREVIATED_HEADER =\n 'application/vnd.npm.install-v1+json; q=1.0, application/json; q=0.8, */*';\n\n /**\n * Change an existing package (i.e. unpublish one version)\n Function changes a package info from local storage and all uplinks with write access./\n Used storages: local (write)\n */\n public async changePackageNext(\n name: string,\n metadata: Manifest,\n revision: string\n ): Promise<void> {\n debug('change existing package for package %o revision %o', name, revision);\n debug(`change manifest tags for %o revision %s`, name, revision);\n if (\n !validatioUtils.isObject(metadata.versions) ||\n !validatioUtils.isObject(metadata[DIST_TAGS])\n ) {\n debug(`change manifest bad data for %o`, name);\n throw errorUtils.getBadData();\n }\n\n debug(`change manifest udapting manifest for %o`, name);\n await this.updatePackageNext(name, async (localData: Manifest): Promise<Manifest> => {\n // eslint-disable-next-line guard-for-in\n for (const version in localData.versions) {\n const incomingVersion = metadata.versions[version];\n if (_.isNil(incomingVersion)) {\n this.logger.info({ name: name, version: version }, 'unpublishing @{name}@@{version}');\n\n // FIXME: I prefer return a new object rather mutate the metadata\n delete localData.versions[version];\n delete localData.time![version];\n\n for (const file in localData._attachments) {\n if (localData._attachments[file].version === version) {\n delete localData._attachments[file].version;\n }\n }\n } else if (Object.prototype.hasOwnProperty.call(incomingVersion, 'deprecated')) {\n const incomingDeprecated = incomingVersion.deprecated;\n if (incomingDeprecated != localData.versions[version].deprecated) {\n if (!incomingDeprecated) {\n this.logger.info(\n { name: name, version: version },\n 'undeprecating @{name}@@{version}'\n );\n delete localData.versions[version].deprecated;\n } else {\n this.logger.info({ name: name, version: version }, 'deprecating @{name}@@{version}');\n localData.versions[version].deprecated = incomingDeprecated;\n }\n localData.time!.modified = new Date().toISOString();\n }\n }\n }\n\n localData[USERS] = metadata[USERS];\n localData[DIST_TAGS] = metadata[DIST_TAGS];\n return localData;\n });\n }\n\n public async removePackage(name: string, revision): Promise<void> {\n debug('remove package %o', name);\n await this.removePackageByRevision(name, revision);\n }\n\n /**\n Remove a tarball from a system\n Function removes a tarball from local storage.\n Tarball in question should not be linked to in any existing\n versions, i.e. package version should be unpublished first.\n Used storage: local (write)\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n public async removeTarball(name: string, filename: string, _revision: string): Promise<Manifest> {\n debug('remove tarball %s for %s', filename, name);\n assert(validatioUtils.validateName(filename));\n const storage: IPackageStorage = this.getPrivatePackageStorage(name);\n if (!storage) {\n debug(`method not implemented for storage`);\n this.logger.error('method for remove tarball not implemented');\n throw errorUtils.getInternalError(API_ERROR.INTERNAL_SERVER_ERROR);\n }\n\n try {\n const cacheManifest = await storage.readPackage(name);\n if (!cacheManifest._attachments[filename]) {\n throw errorUtils.getNotFound('no such file available');\n }\n } catch (err: any) {\n if (err.code === noSuchFile) {\n throw errorUtils.getNotFound();\n }\n throw err;\n }\n\n const manifest = await this.updatePackageNext(\n name,\n async (data: Manifest): Promise<Manifest> => {\n let newData: Manifest = { ...data };\n delete data._attachments[filename];\n return newData;\n }\n );\n\n try {\n const storage: IPackageStorage = this.getPrivatePackageStorage(name);\n if (!storage) {\n debug(`method not implemented for storage`);\n this.logger.error('method for remove tarball not implemented');\n throw errorUtils.getInternalError(API_ERROR.INTERNAL_SERVER_ERROR);\n }\n\n await storage.deletePackage(filename);\n debug('package %s removed', filename);\n } catch (err: any) {\n this.logger.error({ err }, 'error removing %s from storage');\n throw err;\n }\n return manifest;\n }\n\n /**\n * Handle search on packages and proxies.\n * Iterate all proxies configured and search in all endpoints in v2 and pipe all responses\n * to a stream, once the proxies request has finished search in local storage for all packages\n * (privated and cached).\n */\n public async search(options: ProxySearchParams): Promise<searchUtils.SearchPackageItem[]> {\n const transformResults = new TransFormResults({ objectMode: true });\n const streamPassThrough = new PassThrough({ objectMode: true });\n const upLinkList = this.getProxyList();\n\n const searchUplinksStreams = upLinkList.map((uplinkId: string) => {\n const uplink = this.uplinks[uplinkId];\n if (!uplink) {\n // this should never tecnically happens\n this.logger.error({ uplinkId }, 'uplink @upLinkId not found');\n }\n return this.consumeSearchStream(uplinkId, uplink, options, streamPassThrough);\n });\n\n try {\n debug('search uplinks');\n // we only process those streams end successfully, if all fails\n // we just include local storage\n await Promise.allSettled([...searchUplinksStreams]);\n debug('search uplinks done');\n } catch (err: any) {\n this.logger.error({ err: err?.message }, ' error on uplinks search @{err}');\n streamPassThrough.emit('error', err);\n }\n debug('search local');\n try {\n await this.searchCachedPackages(streamPassThrough, options.query as searchUtils.SearchQuery);\n } catch (err: any) {\n this.logger.error({ err: err?.message }, ' error on local search @{err}');\n streamPassThrough.emit('error', err);\n }\n const data: searchUtils.SearchPackageItem[] = [];\n const outPutStream = new PassThrough({ objectMode: true });\n streamPipeline(streamPassThrough, transformResults, outPutStream, (err: any) => {\n if (err) {\n this.logger.error({ err: err?.message }, ' error on search @{err}');\n throw errorUtils.getInternalError(err ? err.message : 'unknown search error');\n } else {\n debug('pipeline succeeded');\n }\n });\n\n outPutStream.on('data', (chunk) => {\n data.push(chunk);\n });\n\n return new Promise((resolve) => {\n outPutStream.on('finish', async () => {\n const searchFinalResults: searchUtils.SearchPackageItem[] = removeDuplicates(data);\n debug('search stream total results: %o', searchFinalResults.length);\n return resolve(searchFinalResults);\n });\n debug('search done');\n });\n }\n\n private async getTarballFromUpstream(name: string, filename: string, { signal }) {\n let cachedManifest: Manifest | null = null;\n try {\n cachedManifest = await this.getPackageLocalMetadata(name);\n } catch (err) {\n debug('error on get package local metadata %o', err);\n }\n // dist url should be on local cache metadata\n if (\n cachedManifest?._distfiles &&\n typeof cachedManifest?._distfiles[filename]?.url === 'string'\n ) {\n debug('dist file found, using it %o', cachedManifest?._distfiles[filename].url);\n // dist file found, proceed to download\n const distFile = cachedManifest._distfiles[filename];\n\n let current_length = 0;\n let expected_length;\n const passThroughRemoteStream = new PassThrough();\n const proxy = this.getUpLinkForDistFile(name, distFile);\n const remoteStream = proxy.fetchTarballNext(distFile.url, {});\n\n remoteStream.on('request', async () => {\n try {\n debug('remote stream request');\n const storage = this.getPrivatePackageStorage(name) as any;\n if (proxy.config.cache === true && storage) {\n const localStorageWriteStream = await storage.writeTarball(filename, {\n signal,\n });\n\n await pipeline(remoteStream, passThroughRemoteStream, localStorageWriteStream, {\n signal,\n });\n } else {\n await pipeline(remoteStream, passThroughRemoteStream, {\n signal,\n });\n }\n } catch (err: any) {\n debug('error on pipeline downloading tarball for package %o', name);\n passThroughRemoteStream.emit('error', err);\n }\n });\n\n remoteStream\n .on('response', async (res) => {\n if (res.statusCode === HTTP_STATUS.NOT_FOUND) {\n debug('remote stream response 404');\n passThroughRemoteStream.emit(\n 'error',\n errorUtils.getNotFound(errorUtils.API_ERROR.NOT_FILE_UPLINK)\n );\n return;\n }\n\n if (\n !(res.statusCode >= HTTP_STATUS.OK && res.statusCode < HTTP_STATUS.MULTIPLE_CHOICES)\n ) {\n debug('remote stream response ok');\n passThroughRemoteStream.emit(\n 'error',\n errorUtils.getInternalError(`bad uplink status code: ${res.statusCode}`)\n );\n return;\n }\n\n if (res.headers[HEADER_TYPE.CONTENT_LENGTH]) {\n expected_length = res.headers[HEADER_TYPE.CONTENT_LENGTH];\n debug('remote stream response content length %o', expected_length);\n passThroughRemoteStream.emit(\n HEADER_TYPE.CONTENT_LENGTH,\n res.headers[HEADER_TYPE.CONTENT_LENGTH]\n );\n }\n })\n .on('downloadProgress', (progress) => {\n current_length = progress.transferred;\n if (typeof expected_length === 'undefined' && progress.total) {\n expected_length = progress.total;\n }\n })\n .on('end', () => {\n if (expected_length && current_length != expected_length) {\n debug('stream end, but length mismatch %o %o', current_length, expected_length);\n passThroughRemoteStream.emit(\n 'error',\n errorUtils.getInternalError(API_ERROR.CONTENT_MISMATCH)\n );\n }\n debug('remote stream end');\n })\n .on('error', (err) => {\n debug('remote stream error %o', err);\n passThroughRemoteStream.emit('error', err);\n });\n return passThroughRemoteStream;\n } else {\n debug('dist file not found, proceed update upstream');\n // no dist url found, proceed to fetch from upstream\n // should not be the case\n const passThroughRemoteStream = new PassThrough();\n // ensure get the latest data\n const [updatedManifest] = await this.syncUplinksMetadataNext(name, cachedManifest, {\n uplinksLook: true,\n });\n const distFile = (updatedManifest as Manifest)._distfiles[filename];\n\n if (updatedManifest === null || !distFile) {\n debug('remote tarball not found');\n throw errorUtils.getNotFound(API_ERROR.NO_SUCH_FILE);\n }\n\n const proxy = this.getUpLinkForDistFile(name, distFile);\n const remoteStream = proxy.fetchTarballNext(distFile.url, {});\n remoteStream.on('response', async () => {\n try {\n const storage = this.getPrivatePackageStorage(name);\n if (proxy.config.cache === true && storage) {\n debug('cache remote tarball enabled');\n const localStorageWriteStream = await storage.writeTarball(filename, {\n signal,\n });\n await pipeline(remoteStream, passThroughRemoteStream, localStorageWriteStream, {\n signal,\n });\n } else {\n debug('cache remote tarball disabled');\n await pipeline(remoteStream, passThroughRemoteStream, { signal });\n }\n } catch (err) {\n debug('error on pipeline downloading tarball for package %o', name);\n passThroughRemoteStream.emit('error', err);\n }\n });\n return passThroughRemoteStream;\n }\n }\n\n /**\n *\n * @param name\n * @param filename\n * @param param2\n * @returns\n */\n public async getTarballNext(name: string, filename: string, { signal }): Promise<PassThrough> {\n debug('get tarball for package %o filename %o', name, filename);\n // TODO: check if isOpen is need it after all.\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n let isOpen = false;\n const localTarballStream = new PassThrough();\n const localStream = await this.getLocalTarball(name, filename, { signal });\n localStream.on('open', async () => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n isOpen = true;\n await pipeline(localStream, localTarballStream, { signal });\n });\n\n localStream.on('error', (err: any) => {\n // eslint-disable-next-line no-console\n if (err.code === STORAGE.NO_SUCH_FILE_ERROR || err.code === HTTP_STATUS.NOT_FOUND) {\n this.getTarballFromUpstream(name, filename, { signal })\n .then((uplinkStream) => {\n pipeline(uplinkStream, localTarballStream, { signal })\n .then(() => {\n debug('successfully downloaded tarball for package %o filename %o', name, filename);\n })\n .catch((err) => {\n localTarballStream.emit('error', err);\n });\n })\n .catch((err) => {\n localTarballStream.emit('error', err);\n });\n } else {\n this.logger.error({ err: err.message }, 'some error on fatal @{err}');\n localTarballStream.emit('error', err);\n }\n });\n\n return localTarballStream;\n }\n\n public async getPackageByVersion(options: IGetPackageOptionsNext): Promise<Version> {\n const queryVersion = options.version as string;\n if (_.isNil(queryVersion)) {\n throw errorUtils.getNotFound(`${API_ERROR.VERSION_NOT_EXIST}: ${queryVersion}`);\n }\n\n // we have version, so we need to return specific version\n const [convertedManifest] = await this.getPackageNext(options);\n\n const version: Version | undefined = getVersion(convertedManifest.versions, queryVersion);\n\n debug('query by latest version %o and result %o', queryVersion, version);\n if (typeof version !== 'undefined') {\n debug('latest version found %o', version);\n return convertDistVersionToLocalTarballsUrl(\n convertedManifest.name,\n version,\n options.requestOptions,\n this.config.url_prefix\n );\n }\n\n // the version could be a dist-tag eg: beta, alpha, so we find the matched version\n // on disg-tag list\n if (_.isNil(convertedManifest[DIST_TAGS]) === false) {\n if (_.isNil(convertedManifest[DIST_TAGS][queryVersion]) === false) {\n // the version found as a distag\n const matchedDisTagVersion: string = convertedManifest[DIST_TAGS][queryVersion];\n debug('dist-tag version found %o', matchedDisTagVersion);\n const disTagVersion: Version | undefined = getVersion(\n convertedManifest.versions,\n matchedDisTagVersion\n );\n if (typeof disTagVersion !== 'undefined') {\n debug('dist-tag found %o', disTagVersion);\n return convertDistVersionToLocalTarballsUrl(\n convertedManifest.name,\n disTagVersion,\n options.requestOptions,\n this.config.url_prefix\n );\n }\n }\n } else {\n debug('dist tag not detected');\n }\n\n // we didn't find the version, not found error\n debug('package version not found %o', queryVersion);\n throw errorUtils.getNotFound(`${API_ERROR.VERSION_NOT_EXIST}: ${queryVersion}`);\n }\n\n public async getPackageManifest(options: IGetPackageOptionsNext): Promise<Manifest> {\n // convert dist remotes to local bars\n const [manifest] = await this.getPackageNext(options);\n const convertedManifest = convertDistRemoteToLocalTarballUrls(\n manifest,\n options.requestOptions,\n this.config.url_prefix\n );\n\n return convertedManifest;\n }\n\n private convertAbbreviatedManifest(manifest: Manifest): AbbreviatedManifest {\n const abbreviatedVersions = Object.keys(manifest.versions).reduce(\n (acc: AbbreviatedVersions, version: string) => {\n const _version = manifest.versions[version];\n // This should be align with this document\n // https://github.com/npm/registry/blob/master/docs/responses/package-metadata.md#abbreviated-version-object\n const _version_abbreviated = {\n name: _version.name,\n version: _version.version,\n description: _version.description,\n deprecated: _version.deprecated,\n bin: _version.bin,\n dist: _version.dist,\n engines: _version.engines,\n funding: _version.funding,\n directories: _version.directories,\n dependencies: _version.dependencies,\n devDependencies: _version.devDependencies,\n peerDependencies: _version.peerDependencies,\n optionalDependencies: _version.optionalDependencies,\n bundleDependencies: _version.bundleDependencies,\n // npm cli specifics\n _hasShrinkwrap: _version._hasShrinkwrap,\n hasInstallScript: _version.hasInstallScript,\n };\n acc[version] = _version_abbreviated;\n return acc;\n },\n {}\n );\n const convertedManifest = {\n name: manifest['name'],\n [DIST_TAGS]: manifest[DIST_TAGS],\n versions: abbreviatedVersions,\n modified: manifest.time.modified,\n // NOTE: special case for pnpm https://github.com/pnpm/rfcs/pull/2\n time: manifest.time,\n };\n\n return convertedManifest;\n }\n\n /**\n * Return a manifest or version based on the options.\n * @param options {Object}\n * @returns A package manifest or specific version\n */\n public async getPackageByOptions(\n options: IGetPackageOptionsNext\n ): Promise<Manifest | AbbreviatedManifest | Version> {\n // if no version we return the whole manifest\n if (_.isNil(options.version) === false) {\n return this.getPackageByVersion(options);\n } else {\n const manifest = await this.getPackageManifest(options);\n if (options.abbreviated === true) {\n debug('abbreviated manifest');\n return this.convertAbbreviatedManifest(manifest);\n }\n return manifest;\n }\n }\n\n public async getLocalDatabaseNext(): Promise<Version[]> {\n debug('get local database');\n const storage = this.localStorage.getStoragePlugin();\n const database = await storage.get();\n const packages: Version[] = [];\n for (const pkg of database) {\n debug('get local database %o', pkg);\n const manifest = await this.getPackageLocalMetadata(pkg);\n const latest = manifest[DIST_TAGS].latest;\n if (latest && manifest.versions[latest]) {\n const version: Version = manifest.versions[latest];\n const timeList = manifest.time as GenericBody;\n const time = timeList[latest];\n // @ts-ignore\n version.time = time;\n\n // Add for stars api\n // @ts-ignore\n version.users = manifest.users;\n\n packages.push(version);\n } else {\n this.logger.warn({ package: pkg }, 'package @{package} does not have a \"latest\" tag?');\n }\n }\n return packages;\n }\n\n public saveToken(token: Token): Promise<any> {\n if (_.isFunction(this.localStorage.getStoragePlugin().saveToken) === false) {\n return Promise.reject(\n errorUtils.getCode(HTTP_STATUS.SERVICE_UNAVAILABLE, SUPPORT_ERRORS.PLUGIN_MISSING_INTERFACE)\n );\n }\n\n return this.localStorage.getStoragePlugin().saveToken(token);\n }\n\n public deleteToken(user: string, tokenKey: string): Promise<any> {\n if (_.isFunction(this.localStorage.getStoragePlugin().deleteToken) === false) {\n return Promise.reject(\n errorUtils.getCode(HTTP_STATUS.SERVICE_UNAVAILABLE, SUPPORT_ERRORS.PLUGIN_MISSING_INTERFACE)\n );\n }\n\n return this.localStorage.getStoragePlugin().deleteToken(user, tokenKey);\n }\n\n public readTokens(filter: TokenFilter): Promise<Token[]> {\n if (_.isFunction(this.localStorage.getStoragePlugin().readTokens) === false) {\n return Promise.reject(\n errorUtils.getCode(HTTP_STATUS.SERVICE_UNAVAILABLE, SUPPORT_ERRORS.PLUGIN_MISSING_INTERFACE)\n );\n }\n\n return this.localStorage.getStoragePlugin().readTokens(filter);\n }\n\n /**\n * Initialize the storage asynchronously.\n * @param config Config\n * @param filters IPluginFilters\n * @returns Storage instance\n */\n public async init(config: Config, filters: IPluginFilters = []): Promise<void> {\n if (this.localStorage === null) {\n this.filters = filters || [];\n debug('filters available %o', filters);\n this.localStorage = new LocalStorage(this.config, logger);\n await this.localStorage.init();\n debug('local init storage initialized');\n await this.localStorage.getSecret(config);\n debug('local storage secret initialized');\n } else {\n debug('storage has been already initialized');\n }\n return;\n }\n\n /**\n * Consume the upstream and pipe it to a transformable stream.\n */\n private consumeSearchStream(\n uplinkId: string,\n uplink: IProxy,\n options: ProxySearchParams,\n searchPassThrough: PassThrough\n ): Promise<any> {\n return uplink.search({ ...options }).then((bodyStream) => {\n bodyStream.pipe(searchPassThrough, { end: false });\n bodyStream.on('error', (err: any): void => {\n logger.error(\n { uplinkId, err: err },\n 'search error for uplink @{uplinkId}: @{err?.message}'\n );\n searchPassThrough.end();\n });\n return new Promise((resolve) => bodyStream.on('end', resolve));\n });\n }\n\n /**\n * Retrieve a wrapper that provide access to the package location.\n * @param {Object} pkgName package name.\n * @return {Object}\n */\n private getPrivatePackageStorage(pkgName: string): IPackageStorage {\n debug('get local storage for %o', pkgName);\n return this.localStorage.getStoragePlugin().getPackageStorage(pkgName);\n }\n\n /**\n * Create a tarball stream from a package.\n * @param name\n * @param filename\n * @param options\n * @returns\n */\n public async getLocalTarball(\n pkgName: string,\n filename: string,\n { signal }: { signal: AbortSignal }\n ): Promise<Readable> {\n assert(validatioUtils.validateName(filename));\n const storage: IPackageStorage = this.getPrivatePackageStorage(pkgName);\n if (typeof storage === 'undefined') {\n return this.createFailureStreamResponseNext();\n }\n\n return await storage.readTarball(filename, { signal });\n }\n\n private async searchCachedPackages(\n searchStream: PassThrough,\n query: searchUtils.SearchQuery\n ): Promise<void> {\n debug('search on each package');\n this.logger.info(\n { t: query.text, q: query.quality, p: query.popularity, m: query.maintenance, s: query.size },\n 'search by text @{t}| maintenance @{m}| quality @{q}| popularity @{p}'\n );\n\n if (typeof this.localStorage.getStoragePlugin().search === 'undefined') {\n this.logger.info('plugin search not implemented yet');\n searchStream.end();\n } else {\n debug('search on each package by plugin');\n const items = await this.localStorage.getStoragePlugin().search(query);\n try {\n for (const searchItem of items) {\n const manifest = await this.getPackageLocalMetadata(searchItem.package.name);\n if (_.isEmpty(manifest?.versions) === false) {\n const searchPackage = mapManifestToSearchPackageBody(manifest, searchItem);\n const searchPackageItem: searchUtils.SearchPackageItem = {\n package: searchPackage,\n score: searchItem.score,\n verdaccioPkgCached: searchItem.verdaccioPkgCached,\n verdaccioPrivate: searchItem.verdaccioPrivate,\n flags: searchItem?.flags,\n // FUTURE: find a better way to calculate the score\n searchScore: 1,\n };\n searchStream.write(searchPackageItem);\n }\n }\n debug('search local stream end');\n searchStream.end();\n } catch (err) {\n this.logger.error({ err, query }, 'error on search by plugin @{err.message}');\n searchStream.emit('error', err);\n }\n }\n }\n\n private async removePackageByRevision(pkgName: string, revision: string): Promise<void> {\n const storage: IPackageStorage = this.getPrivatePackageStorage(pkgName);\n debug('get package metadata for %o', pkgName);\n if (typeof storage === 'undefined') {\n throw errorUtils.getServiceUnavailable('storage not initialized');\n }\n let manifest;\n try {\n manifest = await storage.readPackage(pkgName);\n manifest = normalizePackage(manifest);\n } catch (err: any) {\n if (err.code === STORAGE.NO_SUCH_FILE_ERROR || err.code === HTTP_STATUS.NOT_FOUND) {\n logger.info({ pkgName, revision }, 'package not found');\n throw errorUtils.getNotFound();\n }\n logger.error(\n { pkgName, revision, err: err.message },\n 'error @{err} while reading package @{pkgName}-{revision}'\n );\n throw err;\n }\n\n // TODO: move this to another method\n try {\n await this.localStorage.getStoragePlugin().remove(pkgName);\n // remove each attachment\n const attachments = Object.keys(manifest._attachments);\n debug('attachments to remove %s', attachments?.length);\n for (let attachment of attachments) {\n debug('remove attachment %s', attachment);\n await storage.deletePackage(attachment);\n logger.info({ attachment }, 'attachment @{attachment} removed');\n }\n // remove package.json\n debug('remove package.json');\n await storage.deletePackage(STORAGE.PACKAGE_FILE_NAME);\n // remove folder\n debug('remove package folder');\n await storage.removePackage();\n logger.info({ pkgName }, 'package @{pkgName} removed');\n } catch (err: any) {\n this.logger.error({ err }, 'removed package has failed @{err.message}');\n throw errorUtils.getBadData(err.message);\n }\n }\n\n /**\n * Get a package local manifest.\n *\n * Fails if package is not found.\n * @param name package name\n * @param revision of package\n * @returns local manifest\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n public async getPackageLocalMetadata(name: string, _revision?: string): Promise<Manifest> {\n const storage: IPackageStorage = this.getPrivatePackageStorage(name);\n debug('get package metadata for %o', name);\n if (typeof storage === 'undefined') {\n throw errorUtils.getServiceUnavailable('storage not initialized');\n }\n\n try {\n const result: Manifest = await storage.readPackage(name);\n return normalizePackage(result);\n } catch (err: any) {\n if (err.code === STORAGE.NO_SUCH_FILE_ERROR || err.code === HTTP_STATUS.NOT_FOUND) {\n debug('package %s not found', name);\n throw errorUtils.getNotFound();\n }\n this.logger.error(\n { err: err, file: STORAGE.PACKAGE_FILE_NAME },\n `error reading @{file}: @{!err.message}`\n );\n\n throw errorUtils.getInternalError();\n }\n }\n\n /**\n * Fail the stream response with an not found error.\n * @returns\n */\n private createFailureStreamResponseNext(): PassThrough {\n const stream: PassThrough = new PassThrough();\n\n // we ensure fails on the next tick into the event loop\n process.nextTick((): void => {\n stream.emit('error', errorUtils.getNotFound(API_ERROR.NO_SUCH_FILE));\n });\n\n return stream;\n }\n\n /**\n * Update a package and merge tags\n * @param name package name\n * @param tags list of dist-tags\n */\n public async mergeTagsNext(name: string, tags: MergeTags): Promise<Manifest> {\n return await this.updatePackageNext(name, async (data: Manifest): Promise<Manifest> => {\n let newData: Manifest = { ...data };\n for (const tag of Object.keys(tags)) {\n // this handle dist-tag rm command\n if (_.isNull(tags[tag])) {\n delete newData[DIST_TAGS][tag];\n continue;\n }\n\n if (_.isNil(newData.versions[tags[tag]])) {\n throw errorUtils.getNotFound(API_ERROR.VERSION_NOT_EXIST);\n }\n const version: string = tags[tag];\n newData = tagVersionNext(newData, version, tag);\n }\n\n return newData;\n });\n }\n\n private getUpLinkForDistFile(pkgName: string, distFile: DistFile): IProxy {\n let uplink: IProxy | null = null;\n\n for (const uplinkId in this.uplinks) {\n // refer to https://github.com/verdaccio/verdaccio/issues/1642\n if (hasProxyTo(pkgName, uplinkId, this.config.packages)) {\n uplink = this.uplinks[uplinkId];\n }\n }\n\n if (uplink == null) {\n debug('upstream not found creating one for %o', pkgName);\n uplink = new ProxyStorage(\n {\n url: distFile.url,\n cache: true,\n },\n this.config\n );\n }\n return uplink;\n }\n\n public async updateLocalMetadata(pkgName: string) {\n const storage = this.getPrivatePackageStorage(pkgName);\n\n if (!storage) {\n throw errorUtils.getNotFound();\n }\n }\n\n public async updateManifest(manifest: Manifest, options: UpdateManifestOptions): Promise<void> {\n if (isDeprecatedManifest(manifest)) {\n // if the manifest is deprecated, we need to update the package.json\n await this.deprecate(manifest, {\n ...options,\n });\n } else if (\n isPublishablePackage(manifest) === false &&\n validatioUtils.isObject(manifest.users)\n ) {\n // if user request to apply a star to the manifest\n await this.star(manifest, {\n ...options,\n });\n } else if (validatioUtils.validatePublishSingleVersion(manifest)) {\n // if continue, the version to be published does not exist\n // we create a new package\n const [mergedManifest, version] = await this.publishANewVersion(manifest, {\n ...options,\n });\n // send notification of publication (notification step, non transactional)\n try {\n const { name } = mergedManifest;\n await this.notify(mergedManifest, `${name}@${version}`);\n logger.info({ name, version }, 'notify for @{name}@@{version} has been sent');\n } catch (error: any) {\n logger.error({ error: error.message }, 'notify batch service has failed: @{error}');\n }\n } else {\n debug('invalid body format');\n logger.info(\n { packageName: options.name },\n `wrong package format on publish a package @{packageName}`\n );\n throw errorUtils.getBadRequest(API_ERROR.UNSUPORTED_REGISTRY_CALL);\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n private async deprecate(_body: Manifest, _options: PublishOptions): Promise<void> {\n // // const storage: IPackageStorage = this.getPrivatePackageStorage(opname);\n\n // if (typeof storage === 'undefined') {\n // throw errorUtils.getNotFound();\n // }\n throw errorUtils.getInternalError('no implementation ready for npm deprecate');\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n private async star(_body: Manifest, _options: PublishOptions): Promise<void> {\n // // const storage: IPackageStorage = this.getPrivatePackageStorage(opname);\n\n // if (typeof storage === 'undefined') {\n // throw errorUtils.getNotFound();\n // }\n\n throw errorUtils.getInternalError('no implementation ready for npm star');\n }\n\n /**\n * Get local package, on fails return null.\n * Errors are considered package not found.\n * @param name\n * @returns\n */\n private async getPackagelocalByNameNext(name: string): Promise<Manifest | null> {\n try {\n return await this.getPackageLocalMetadata(name);\n } catch (err: any) {\n debug('local package %s not found', name);\n return null;\n }\n }\n\n /**\n * Convert tarball as string into a Buffer and validate the length.\n * @param data the tarball data as string\n * @returns\n */\n private getBufferManifest(data: string): Buffer {\n const buffer = Buffer.from(data, 'base64');\n if (buffer.length === 0) {\n throw errorUtils.getBadData('refusing to accept zero-length file');\n }\n return buffer;\n }\n\n /**\n * Verify if the package exists in the local storage\n * (the package refers to the package.json), directory would return false.\n * @param pkgName package name\n * @returns boolean\n */\n private async hasPackage(pkgName: string): Promise<boolean> {\n const storage: IPackageStorage = this.getPrivatePackageStorage(pkgName);\n if (typeof storage === 'undefined') {\n throw errorUtils.getNotFound();\n }\n const hasPackage = await storage.hasPackage();\n debug('has package %o for %o', pkgName, hasPackage);\n return hasPackage;\n }\n\n /**\n * Create a new package.\n * This situation happens only of the package does not exist on the cache.\n *\n * @param body package metadata\n * @param options\n * @returns\n */\n private async publishANewVersion(\n body: Manifest,\n options: PublishOptions\n ): Promise<[Manifest, string]> {\n const { name } = options;\n debug('publishing a new package for %o', name);\n\n const manifest: Manifest = { ...validatioUtils.normalizeMetadata(body, name) };\n const { _attachments, versions } = manifest;\n\n // validation step, if _attachments is not an object throw error\n // _attachments is need it for holding the tarball buffer in the local storage as file\n // versions is need it for holding the version in the local storage as file\n // _attachments and validation are required otherwise cannot continue.\n if (isEmpty(_attachments)) {\n throw errorUtils.getBadRequest(API_ERROR.UNSUPORTED_REGISTRY_CALL);\n }\n\n // get the unique version available\n const [versionToPublish] = Object.keys(versions);\n\n // at this point document is either created or existed before\n const [firstAttachmentKey] = Object.keys(_attachments);\n const buffer = this.getBufferManifest(body._attachments[firstAttachmentKey].data as string);\n\n try {\n // we check if package exist already locally\n const manifest = await this.getPackagelocalByNameNext(name);\n // if continue, the version to be published does not exist\n if (manifest?.versions[versionToPublish] != null) {\n debug('%s version %s already exists', name, versionToPublish);\n throw errorUtils.getConflict();\n }\n const uplinksLook = this.config?.publish?.allow_offline === false;\n // if execution get here, package does not exist locally, we search upstream\n const remoteManifest = await this.checkPackageRemote(name, uplinksLook);\n if (remoteManifest?.versions[versionToPublish] != null) {\n debug('%s version %s already exists', name, versionToPublish);\n throw errorUtils.getConflict();\n }\n\n const hasPackageInStorage = await this.hasPackage(name);\n if (!hasPackageInStorage) {\n await this.createNewLocalCachePackage(name, versionToPublish);\n }\n } catch (err: any) {\n debug('error on change or update a package with %o', err.message);\n logger.error({ err: err.message }, 'error on create package: @{err}');\n throw err;\n }\n\n // 1. after tarball has been successfully uploaded, we update the version\n try {\n // TODO: review why do this\n versions[versionToPublish].readme =\n _.isNil(manifest.readme) === false ? String(manifest.readme) : '';\n await this.addVersionNext(name, versionToPublish, versions[versionToPublish], null);\n } catch (err: any) {\n logger.error({ err: err.message }, 'updated version has failed: @{err}');\n debug('error on create a version for %o with error %o', name, err.message);\n // TODO: remove tarball if add version fails\n throw err;\n }\n\n // 2. update and merge tags\n let mergedManifest;\n try {\n // note: I could merge this with addVersionNext\n // 1. add version\n // 2. merge versions\n // 3. upload tarball\n // 3.update once to the storage (easy peasy)\n mergedManifest = await this.mergeTagsNext(name, manifest[DIST_TAGS]);\n } catch (err: any) {\n logger.error({ err: err.message }, 'merge version has failed: @{err}');\n debug('error on create a version for %o with error %o', name, err.message);\n // TODO: undo if this fails\n // 1. remove tarball\n // 2. remove updated version\n throw err;\n }\n\n // 3. upload the tarball to the storage\n try {\n const readable = Readable.from(buffer);\n await this.uploadTarball(name, basename(firstAttachmentKey), readable, {\n signal: options.signal,\n });\n } catch (err: any) {\n logger.error({ err: err.message }, 'upload tarball has failed: @{err}');\n throw err;\n }\n\n logger.info(\n { name, version: versionToPublish },\n 'package @{name}@@{version} has been published'\n );\n\n return [mergedManifest, versionToPublish];\n }\n\n // TODO: pending implementation\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n private async notify(_manifest: Manifest, _message: string): Promise<void> {\n return;\n }\n\n private getProxyList() {\n const uplinksList = Object.keys(this.uplinks);\n\n return uplinksList;\n }\n\n /**\n * Wrap uploadTarballAsStream into a promise.\n * @param name package name\n * @param fileName tarball name\n * @param contentReadable content as readable stream\n * @param options\n * @returns\n */\n public uploadTarball(\n name: string,\n fileName: string,\n contentReadable: Readable,\n { signal }\n ): Promise<void> {\n return new Promise((resolve, reject) => {\n this.uploadTarballAsStream(name, fileName, {\n signal,\n })\n .then((stream) => {\n stream.on('error', (err) => {\n debug(\n 'error on stream a tarball %o for %o with error %o',\n 'foo.tar.gz',\n name,\n err.message\n );\n reject(err);\n });\n stream.on('success', () => {\n this.logger.debug(\n { fileName, name },\n 'file @{fileName} for package @{name} has been successfully uploaded'\n );\n resolve();\n });\n return stream;\n })\n .then((stream) => {\n pipeline(contentReadable, stream, { signal })\n .then(() => {\n debug('success pipe upload tarball');\n })\n .catch(reject);\n });\n });\n }\n\n private async uploadTarballAsStream(\n pkgName: string,\n filename: string,\n { signal }\n ): Promise<PassThrough> {\n debug(`add a tarball for %o`, pkgName);\n assert(validatioUtils.validateName(filename));\n\n const shaOneHash = createTarballHash();\n const transformHash = new Transform({\n transform(chunk: any, _encoding: string, callback: any): void {\n // measure the length for validation reasons\n shaOneHash.update(chunk);\n callback(null, chunk);\n },\n });\n const uploadStream = new PassThrough();\n const storage = this.getPrivatePackageStorage(pkgName);\n\n // FUTURE: this validation could happen even before\n if (pkgName === PROTO_NAME) {\n process.nextTick((): void => {\n uploadStream.emit('error', errorUtils.getForbidden());\n });\n return uploadStream;\n }\n\n // FIXME: this condition will never met, storage is always defined\n if (!storage) {\n process.nextTick((): void => {\n uploadStream.emit('error', \"can't upload this package storage is missing\");\n });\n return uploadStream;\n }\n\n const fileDoesExist = await storage.hasTarball(filename);\n if (fileDoesExist) {\n process.nextTick((): void => {\n uploadStream.emit('error', errorUtils.getConflict());\n });\n } else {\n const localStorageWriteStream = await storage.writeTarball(filename, { signal });\n\n localStorageWriteStream.on('open', async () => {\n await pipeline(uploadStream, transformHash, localStorageWriteStream, { signal });\n });\n\n // once the file descriptor has been closed\n localStorageWriteStream.on('close', async () => {\n try {\n debug('uploaded tarball %o for %o', filename, pkgName);\n // update the package metadata\n await this.updatePackageNext(pkgName, async (data: Manifest): Promise<Manifest> => {\n const newData: Manifest = { ...data };\n debug('added _attachment for %o', pkgName);\n newData._attachments[filename] = {\n // TODO: add integrity hash here\n shasum: shaOneHash.digest('hex'),\n };\n\n return newData;\n });\n debug('emit success for %o', pkgName);\n uploadStream.emit('success');\n } catch (err: any) {\n // FUTURE: if the update package fails, remove tarball to avoid left\n // orphan tarballs\n debug(\n 'something has failed on upload tarball %o for %o : %s',\n filename,\n pkgName,\n err.message\n );\n uploadStream.emit('error', err);\n }\n });\n\n // something went wrong writing into the local storage\n localStorageWriteStream.on('error', async (err: any) => {\n uploadStream.emit('error', err);\n });\n }\n\n return uploadStream;\n }\n\n /**\n * Add a new version to a package.\n * @param name package name\n * @param version version\n * @param metadata version metadata\n * @param tag tag of the version\n */\n public async addVersionNext(\n name: string,\n version: string,\n metadata: Version,\n tag: StringValue\n ): Promise<void> {\n debug(`add version %s package for %s`, version, name);\n await this.updatePackageNext(name, async (data: Manifest): Promise<Manifest> => {\n // keep only one readme per package\n data.readme = metadata.readme;\n debug('%s` readme mutated', name);\n // TODO: lodash remove\n metadata = cleanUpReadme(metadata);\n metadata.contributors = normalizeContributors(metadata.contributors as Author[]);\n debug('%s` contributors normalized', name);\n\n // if uploaded tarball has a different shasum, it's very likely that we\n // have some kind of error\n if (validatioUtils.isObject(metadata.dist) && _.isString(metadata.dist.tarball)) {\n const tarball = metadata.dist.tarball.replace(/.*\\//, '');\n if (validatioUtils.isObject(data._attachments[tarball])) {\n if (\n _.isNil(data._attachments[tarball].shasum) === false &&\n _.isNil(metadata.dist.shasum) === false\n ) {\n if (data._attachments[tarball].shasum != metadata.dist.shasum) {\n const errorMessage =\n `shasum error, ` +\n `${data._attachments[tarball].shasum} != ${metadata.dist.shasum}`;\n throw errorUtils.getBadRequest(errorMessage);\n }\n }\n data._attachments[tarball].version = version;\n }\n\n // if the time field doesn't exist, we create it, some old storage\n // might not have it\n // https://github.com/verdaccio/verdaccio/issues/740\n if (_.isNil(data.time)) {\n this.logger.warn(\n { name },\n 'time field could not be found, it has been recreated for @{name}'\n );\n data.time = {};\n }\n\n // populate the time field with the date of the version\n const currentDate = new Date().toISOString();\n data.time.modified = currentDate;\n if (!data.time?.created) {\n data.time.created = currentDate;\n }\n\n if (typeof data.time[version] === 'string') {\n // this should not h appen, but we keep this check to avoid or easy bug report\n this.logger.warn(\n { name, version },\n 'the time for the version @{version} already exists, it has been overwritten for package @{name}'\n );\n }\n data.time[version] = currentDate;\n debug('time added for %s version %s', name, version);\n }\n\n data.versions[version] = metadata;\n // TODO: review this method, it's a bit ugly\n tagVersion(data, version, tag);\n\n try {\n debug('%s` add on database', name);\n await this.localStorage.getStoragePlugin().add(name);\n this.logger.debug({ name, version }, 'version @{version} added to database for @{name}');\n } catch (err: any) {\n throw errorUtils.getBadData(err.message);\n }\n return data;\n });\n }\n\n /**\n * Create an empty new local cache package without versions.\n * @param name name of the package\n * @returns\n */\n private async createNewLocalCachePackage(name: string, latestVersion: string): Promise<void> {\n const storage: IPackageStorage = this.getPrivatePackageStorage(name);\n\n if (!storage) {\n debug(`storage is missing for %o package cannot be added`, name);\n throw errorUtils.getNotFound('this package cannot be added');\n }\n\n const currentTime = new Date().toISOString();\n const packageData: Manifest = {\n ...generatePackageTemplate(name),\n time: {\n created: currentTime,\n modified: currentTime,\n [latestVersion]: currentTime,\n },\n };\n\n try {\n await storage.createPackage(name, packageData);\n this.logger.info({ name }, 'created new package @{name}');\n return;\n } catch (err: any) {\n if (\n _.isNull(err) === false &&\n (err.code === STORAGE.FILE_EXIST_ERROR || err.code === HTTP_STATUS.CONFLICT)\n ) {\n debug(`error on creating a package for %o with error %o`, name, err.message);\n throw errorUtils.getConflict();\n }\n return;\n }\n }\n\n /**\n *\n * @param name package name\n * @param uplinksLook\n * @returns\n */\n private async checkPackageRemote(name: string, uplinksLook: boolean): Promise<Manifest | null> {\n try {\n // we provide a null manifest, thus the manifest returned will be the remote one\n const [remoteManifest, upLinksErrors] = await this.syncUplinksMetadataNext(name, null, {\n uplinksLook,\n });\n\n // checking package exist already\n if (isNil(remoteManifest) === false) {\n throw errorUtils.getConflict(API_ERROR.PACKAGE_EXIST);\n }\n\n for (let errorItem = 0; errorItem < upLinksErrors.length; errorItem++) {\n // checking error\n // if uplink fails with a status other than 404, we report failure\n if (isNil(upLinksErrors[errorItem][0]) === false) {\n if (upLinksErrors[errorItem][0].status !== HTTP_STATUS.NOT_FOUND) {\n if (upLinksErrors) {\n return null;\n }\n\n throw errorUtils.getServiceUnavailable(API_ERROR.UPLINK_OFFLINE_PUBLISH);\n }\n }\n }\n return remoteManifest;\n } catch (err: any) {\n if (err && err.status !== HTTP_STATUS.NOT_FOUND) {\n throw err;\n }\n return null;\n }\n }\n\n private setDefaultRevision(json: Manifest): Manifest {\n // calculate revision from couch db\n if (_.isString(json._rev) === false) {\n json._rev = STORAGE.DEFAULT_REVISION;\n }\n\n // this is intended in debug mode we do not want modify the store revision\n if (_.isNil(this.config._debug)) {\n json._rev = generateRevision(json._rev);\n }\n\n return json;\n }\n\n private async writePackageNext(name: string, json: Manifest): Promise<void> {\n const storage: any = this.getPrivatePackageStorage(name);\n if (_.isNil(storage)) {\n // TODO: replace here 500 error\n throw errorUtils.getBadData();\n }\n await storage.savePackage(name, this.setDefaultRevision(json));\n }\n\n /**\n * @param {*} name package name\n * @param {*} updateHandler function(package, cb) - update function\n * @param {*} callback callback that gets invoked after it's all updated\n * @return {Function}\n */\n private async updatePackageNext(\n name: string,\n updateHandler: (manifest: Manifest) => Promise<Manifest>\n ): Promise<Manifest> {\n const storage: IPackageStorage = this.getPrivatePackageStorage(name);\n\n if (!storage) {\n throw errorUtils.getNotFound();\n }\n\n // we update the package on the local storage\n const updatedManifest: Manifest = await storage.updatePackage(name, updateHandler);\n // after correctly updated write to the storage\n try {\n await this.writePackageNext(name, normalizePackage(updatedManifest));\n return updatedManifest;\n } catch (err: any) {\n if (err.code === resourceNotAvailable) {\n throw errorUtils.getInternalError('resource temporarily unavailable');\n } else if (err.code === noSuchFile) {\n throw errorUtils.getNotFound();\n } else {\n throw err;\n }\n }\n }\n\n /**\n *\n * @protected\n * @param {IGetPackageOptionsNext} options\n * @return {*} {Promise<[Manifest, any[]]>}\n * @memberof AbstractStorage\n */\n private async getPackageNext(options: IGetPackageOptionsNext): Promise<[Manifest, any[]]> {\n const { name } = options;\n debug('get package for %o', name);\n let data: Manifest | null = null;\n\n try {\n data = await this.getPackageLocalMetadata(name);\n } catch (err: any) {\n // if error code is higher than 500 stop here\n if (err && (!err.status || err.status >= HTTP_STATUS.INTERNAL_ERROR)) {\n throw err;\n }\n }\n\n // if we can't get the local metadata, we try to get the remote metadata\n // if we do to have local metadata, we try to update it with the upstream registry\n debug('sync uplinks for %o', name);\n const [remoteManifest, upLinksErrors] = await this.syncUplinksMetadataNext(name, data, {\n uplinksLook: options.uplinksLook,\n retry: options.retry,\n remoteAddress: options.requestOptions.remoteAddress,\n // etag??\n });\n\n // if either local data and upstream data are empty, we throw an error\n if (!remoteManifest && _.isNull(data)) {\n throw errorUtils.getNotFound(`${API_ERROR.NOT_PACKAGE_UPLINK}: ${name}`);\n // if the remote manifest is empty, we return local data\n } else if (!remoteManifest && !_.isNull(data)) {\n // no data on uplinks\n return [data as Manifest, upLinksErrors];\n }\n\n // if we have local data, we try to update it with the upstream registry\n const normalizedPkg = Object.assign({}, remoteManifest, {\n // FIXME: clean up mutation within cleanUpLinksRef method\n ...normalizeDistTags(cleanUpLinksRef(remoteManifest as Manifest, options.keepUpLinkData)),\n _attachments: {},\n });\n\n debug('no. sync uplinks errors %o for %s', upLinksErrors?.length, name);\n return [normalizedPkg, upLinksErrors];\n }\n\n /**\n * Function fetches package metadata from uplinks and synchronizes it with local data\n if package is available locally, it MUST be provided in pkginfo.\n\n Using this example:\n\n \"jquery\":\n access: $all\n publish: $authenticated\n unpublish: $authenticated\n # two uplinks setup\n proxy: ver npmjs\n # one uplink setup\n proxy: npmjs\n\n A package requires uplinks syncronization if enables the proxy section, uplinks\n can be more than one, the more are the most slow request will take, the request\n are made in serial and if 1st call fails, the second will be triggered, otherwise\n the 1st will reply and others will be discarded. The order is important.\n\n Errors on upkinks are considered are, time outs, connection fails and http status 304,\n in that case the request returns empty body and we want ask next on the list if has fresh\n updates.\n */\n public async syncUplinksMetadataNext(\n name: string,\n localManifest: Manifest | null,\n options: ISyncUplinksOptions = {}\n ): Promise<[Manifest | null, any]> {\n let found = localManifest !== null;\n let syncManifest: Manifest | null = null;\n const upLinks: string[] = [];\n const hasToLookIntoUplinks = _.isNil(options.uplinksLook) || options.uplinksLook;\n debug('is sync uplink enabled %o', hasToLookIntoUplinks);\n\n for (const uplink in this.uplinks) {\n if (hasProxyTo(name, uplink, this.config.packages) && hasToLookIntoUplinks) {\n debug('sync uplink %o', uplink);\n upLinks.push(uplink);\n }\n }\n\n // if none uplink match we return the local manifest\n if (upLinks.length === 0) {\n debug('no uplinks found for %o upstream update aborted', name);\n return [localManifest, []];\n }\n\n const uplinksErrors: any[] = [];\n // we resolve uplinks async in serie, first come first serve\n for (const uplink of upLinks) {\n try {\n const tempManifest = _.isNil(localManifest)\n ? generatePackageTemplate(name)\n : { ...localManifest };\n syncManifest = await this.mergeCacheRemoteMetadata(\n this.uplinks[uplink],\n tempManifest,\n options\n );\n debug('syncing on uplink %o', syncManifest.name);\n if (_.isNil(syncManifest) === false) {\n found = true;\n break;\n }\n } catch (err: any) {\n debug('error captured on uplink %o', err.message);\n uplinksErrors.push(err);\n // enforce use next uplink on the list\n continue;\n }\n }\n\n if (found && syncManifest !== null) {\n // updates the local cache manifest with fresh data\n let updatedCacheManifest = await this.updateVersionsNext(name, syncManifest);\n // plugin filter applied to the manifest\n const [filteredManifest, filtersErrors] = await this.applyFilters(updatedCacheManifest);\n return [\n { ...updatedCacheManifest, ...filteredManifest },\n [...uplinksErrors, ...filtersErrors],\n ];\n } else if (found && _.isNil(localManifest) === false) {\n return [localManifest, uplinksErrors];\n } else {\n // if is not found, calculate the right error to return\n debug('uplinks sync failed with %o errors', uplinksErrors.length);\n for (const err of uplinksErrors) {\n const { code } = err;\n if (code === 'ETIMEDOUT' || code === 'ESOCKETTIMEDOUT' || code === 'ECONNRESET') {\n debug('uplinks sync failed with timeout error');\n throw errorUtils.getServiceUnavailable(err.code);\n }\n // we bubble up the 304 special error case\n if (code === HTTP_STATUS.NOT_MODIFIED) {\n debug('uplinks sync failed with 304 error');\n throw err;\n }\n }\n debug('uplinks sync failed with no package found');\n\n throw errorUtils.getNotFound(API_ERROR.NO_PACKAGE);\n }\n }\n\n /**\n * Merge a manifest with a remote manifest.\n *\n * If the uplinks are not available, the local manifest is returned.\n * If the uplinks are available, the local manifest is merged with the remote one.\n *\n *\n * @param uplink uplink instance\n * @param cachedManifest the local cached manifest\n * @param options options\n * @returns Returns a promise that resolves with the merged manifest.\n */\n private async mergeCacheRemoteMetadata(\n uplink: IProxy,\n cachedManifest: Manifest,\n options: ISyncUplinksOptions\n ): Promise<Manifest> {\n // we store which uplink is updating the manifest\n const upLinkMeta = cachedManifest._uplinks[uplink.upname];\n let _cacheManifest = { ...cachedManifest };\n\n if (validatioUtils.isObject(upLinkMeta)) {\n const fetched = upLinkMeta.fetched;\n\n // we check the uplink cache is fresh\n if (fetched && Date.now() - fetched < uplink.maxage) {\n return cachedManifest;\n }\n }\n\n const remoteOptions = Object.assign({}, options, {\n etag: upLinkMeta?.etag,\n });\n\n // get the latest metadata from the uplink\n const [remoteManifest, etag] = await uplink.getRemoteMetadataNext(\n _cacheManifest.name,\n remoteOptions\n );\n\n try {\n _cacheManifest = validatioUtils.normalizeMetadata(_cacheManifest, _cacheManifest.name);\n } catch (err: any) {\n this.logger.error(\n {\n err: err,\n },\n 'package.json validating error @{!err?.message}\\n@{err.stack}'\n );\n throw err;\n }\n // updates the _uplink metadata fields, cache, etc\n _cacheManifest = updateUpLinkMetadata(uplink.upname, _cacheManifest, etag);\n // merge time field cache and remote\n _cacheManifest = mergeUplinkTimeIntoLocalNext(_cacheManifest, remoteManifest);\n // update the _uplinks field in the cache\n _cacheManifest = updateVersionsHiddenUpLinkNext(_cacheManifest, uplink);\n try {\n // merge versions from remote into the cache\n _cacheManifest = mergeVersions(_cacheManifest, remoteManifest);\n return _cacheManifest;\n } catch (err: any) {\n this.logger.error(\n {\n err: err,\n },\n 'package.json merge has failed @{!err?.message}\\n@{err.stack}'\n );\n throw err;\n }\n }\n\n /**\n * Apply filters to manifest.\n * @param manifest\n * @returns\n */\n public async applyFilters(manifest: Manifest): Promise<[Manifest, any]> {\n if (this.filters.length === 0) {\n return [manifest, []];\n }\n\n let filterPluginErrors: any[] = [];\n let filteredManifest = { ...manifest };\n for (const filter of this.filters) {\n // These filters can assume it's save to modify packageJsonLocal\n // and return it directly for\n // performance (i.e. need not be pure)\n try {\n filteredManifest = await filter.filter_metadata(manifest);\n } catch (err: any) {\n this.logger.error({ err: err.message }, 'filter has failed @{err}');\n filterPluginErrors.push(err);\n }\n }\n return [filteredManifest, filterPluginErrors];\n }\n\n private _createNewPackageNext(name: string): Manifest {\n return normalizePackage(generatePackageTemplate(name));\n }\n\n /**\n * Ensure the dist file remains as the same protocol\n * @param {Object} hash metadata\n * @param {String} upLinkKey registry key\n * @private\n * @deprecated use _updateUplinkToRemoteProtocolNext (???)\n */\n private updateUplinkToRemoteProtocol(hash: DistFile, upLinkKey: string): void {\n // if we got this information from a known registry,\n // use the same protocol for the tarball\n const tarballUrl: any = URL.parse(hash.url);\n const uplinkUrl: any = URL.parse(this.config.uplinks[upLinkKey].url);\n\n if (uplinkUrl.host === tarballUrl.host) {\n tarballUrl.protocol = uplinkUrl.protocol;\n hash.registry = upLinkKey;\n hash.url = URL.format(tarballUrl);\n }\n }\n\n /**\n * Create or read a package.\n *\n * If the package already exists, it will be read.\n * If the package is not found, it will be created.\n * If the error is anything else will throw an error\n *\n * @param {*} pkgName\n * @param {*} callback\n * @return {Function}\n */\n private async readCreatePackage(pkgName: string): Promise<Manifest> {\n const storage: any = this.getPrivatePackageStorage(pkgName);\n if (_.isNil(storage)) {\n throw errorUtils.getInternalError('storage could not be found');\n }\n\n try {\n const result: Manifest = await storage.readPackage(pkgName);\n return normalizePackage(result);\n } catch (err: any) {\n if (err.code === STORAGE.NO_SUCH_FILE_ERROR || err.code === HTTP_STATUS.NOT_FOUND) {\n return this._createNewPackageNext(pkgName);\n } else {\n this.logger.error(\n { err: err, file: STORAGE.PACKAGE_FILE_NAME },\n `'error reading' @{file}: @{!err.message}`\n );\n\n throw errorUtils.getInternalError();\n }\n }\n }\n\n /**\n Updates the local cache with the merge from the remote/client manifest.\n\n The steps are the following.\n 1. Get the latest version of the package from the cache.\n 2. If does not exist will return a \n\n @param name\n @param remoteManifest\n @returns return a merged manifest.\n */\n public async updateVersionsNext(name: string, remoteManifest: Manifest): Promise<Manifest> {\n debug(`updating versions for package %o`, name);\n let cacheManifest: Manifest = await this.readCreatePackage(name);\n let change = false;\n // updating readme\n cacheManifest.readme = getLatestReadme(remoteManifest);\n if (remoteManifest.readme !== cacheManifest.readme) {\n debug('manifest readme updated for %o', name);\n change = true;\n }\n\n debug('updating new remote versions');\n for (const versionId in remoteManifest.versions) {\n // if detect a new remote version does not exist cache\n if (_.isNil(cacheManifest.versions[versionId])) {\n debug('new version from upstream %o', versionId);\n let version = remoteManifest.versions[versionId];\n\n // we don't keep readme for package versions,\n // only one readme per package\n // TODO: readme clean up could be saved in configured eventually\n version = cleanUpReadme(version);\n debug('clean up readme for %o', versionId);\n version.contributors = normalizeContributors(version.contributors as Author[]);\n\n change = true;\n cacheManifest.versions[versionId] = version;\n\n if (version?.dist?.tarball) {\n const filename = pkgUtils.extractTarballName(version.dist.tarball);\n // store a fast access to the dist file by tarball name\n // it does NOT overwrite any existing records\n if (_.isNil(cacheManifest?._distfiles[filename])) {\n const hash: DistFile = (cacheManifest._distfiles[filename] = {\n url: version.dist.tarball,\n sha: version.dist.shasum,\n });\n // store cache metadata this the manifest\n const upLink: string = version[Symbol.for('__verdaccio_uplink')];\n if (_.isNil(upLink) === false) {\n this.updateUplinkToRemoteProtocol(hash, upLink);\n }\n }\n }\n } else {\n debug('no new versions from upstream %s', name);\n }\n }\n\n debug('update dist-tags');\n for (const tag in remoteManifest[DIST_TAGS]) {\n if (\n !cacheManifest[DIST_TAGS][tag] ||\n cacheManifest[DIST_TAGS][tag] !== remoteManifest[DIST_TAGS][tag]\n ) {\n change = true;\n cacheManifest[DIST_TAGS][tag] = remoteManifest[DIST_TAGS][tag];\n }\n }\n\n for (const up in remoteManifest._uplinks) {\n if (Object.prototype.hasOwnProperty.call(remoteManifest._uplinks, up)) {\n const need_change =\n !isObject(cacheManifest._uplinks[up]) ||\n remoteManifest._uplinks[up].etag !== cacheManifest._uplinks[up].etag ||\n remoteManifest._uplinks[up].fetched !== cacheManifest._uplinks[up].fetched;\n\n if (need_change) {\n change = true;\n cacheManifest._uplinks[up] = remoteManifest._uplinks[up];\n }\n }\n }\n\n debug('update time');\n if ('time' in remoteManifest && !_.isEqual(cacheManifest.time, remoteManifest.time)) {\n cacheManifest.time = remoteManifest.time;\n change = true;\n }\n\n if (change) {\n debug('updating package info %o', name);\n await this.writePackageNext(name, cacheManifest);\n return cacheManifest;\n } else {\n return cacheManifest;\n }\n }\n}\n\nexport { Storage };\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@verdaccio/store",
|
|
3
|
-
"version": "6.0.0-6-next.
|
|
3
|
+
"version": "6.0.0-6-next.27",
|
|
4
4
|
"description": "loaders logic",
|
|
5
5
|
"main": "./build/index.js",
|
|
6
6
|
"types": "build/index.d.ts",
|
|
@@ -30,16 +30,16 @@
|
|
|
30
30
|
"npm": ">=6"
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
|
-
"@verdaccio/config": "6.0.0-6-next.
|
|
34
|
-
"@verdaccio/core": "6.0.0-6-next.
|
|
35
|
-
"@verdaccio/hooks": "6.0.0-6-next.
|
|
36
|
-
"@verdaccio/loaders": "6.0.0-6-next.
|
|
37
|
-
"@verdaccio/local-storage": "11.0.0-6-next.
|
|
38
|
-
"@verdaccio/logger": "6.0.0-6-next.
|
|
39
|
-
"@verdaccio/proxy": "6.0.0-6-next.
|
|
40
|
-
"@verdaccio/url": "11.0.0-6-next.
|
|
41
|
-
"@verdaccio/utils": "6.0.0-6-next.
|
|
42
|
-
"@verdaccio/tarball": "11.0.0-6-next.
|
|
33
|
+
"@verdaccio/config": "6.0.0-6-next.47",
|
|
34
|
+
"@verdaccio/core": "6.0.0-6-next.47",
|
|
35
|
+
"@verdaccio/hooks": "6.0.0-6-next.17",
|
|
36
|
+
"@verdaccio/loaders": "6.0.0-6-next.16",
|
|
37
|
+
"@verdaccio/local-storage": "11.0.0-6-next.17",
|
|
38
|
+
"@verdaccio/logger": "6.0.0-6-next.15",
|
|
39
|
+
"@verdaccio/proxy": "6.0.0-6-next.25",
|
|
40
|
+
"@verdaccio/url": "11.0.0-6-next.13",
|
|
41
|
+
"@verdaccio/utils": "6.0.0-6-next.15",
|
|
42
|
+
"@verdaccio/tarball": "11.0.0-6-next.16",
|
|
43
43
|
"JSONStream": "1.3.5",
|
|
44
44
|
"debug": "4.3.4",
|
|
45
45
|
"lodash": "4.17.21",
|
|
@@ -47,9 +47,9 @@
|
|
|
47
47
|
"semver": "7.3.7"
|
|
48
48
|
},
|
|
49
49
|
"devDependencies": {
|
|
50
|
-
"@types/node": "16.11.
|
|
51
|
-
"@verdaccio/types": "11.0.0-6-next.
|
|
52
|
-
"@verdaccio/test-helper": "1.1.0-6-next.
|
|
50
|
+
"@types/node": "16.11.56",
|
|
51
|
+
"@verdaccio/types": "11.0.0-6-next.16",
|
|
52
|
+
"@verdaccio/test-helper": "1.1.0-6-next.4",
|
|
53
53
|
"undici": "4.16.0",
|
|
54
54
|
"nock": "13.2.9",
|
|
55
55
|
"node-mocks-http": "1.11.0",
|
package/src/storage.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import assert from 'assert';
|
|
2
2
|
import buildDebug from 'debug';
|
|
3
3
|
import _, { isEmpty, isNil } from 'lodash';
|
|
4
|
-
import {
|
|
4
|
+
import { basename } from 'path';
|
|
5
|
+
import { PassThrough, Readable, Transform, pipeline as streamPipeline } from 'stream';
|
|
5
6
|
import { pipeline } from 'stream/promises';
|
|
6
7
|
import { default as URL } from 'url';
|
|
7
8
|
|
|
@@ -961,7 +962,7 @@ class Storage {
|
|
|
961
962
|
// if (typeof storage === 'undefined') {
|
|
962
963
|
// throw errorUtils.getNotFound();
|
|
963
964
|
// }
|
|
964
|
-
throw errorUtils.getInternalError('no
|
|
965
|
+
throw errorUtils.getInternalError('no implementation ready for npm deprecate');
|
|
965
966
|
}
|
|
966
967
|
|
|
967
968
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
@@ -972,7 +973,7 @@ class Storage {
|
|
|
972
973
|
// throw errorUtils.getNotFound();
|
|
973
974
|
// }
|
|
974
975
|
|
|
975
|
-
throw errorUtils.getInternalError('no
|
|
976
|
+
throw errorUtils.getInternalError('no implementation ready for npm star');
|
|
976
977
|
}
|
|
977
978
|
|
|
978
979
|
/**
|
|
@@ -1060,9 +1061,9 @@ class Storage {
|
|
|
1060
1061
|
debug('%s version %s already exists', name, versionToPublish);
|
|
1061
1062
|
throw errorUtils.getConflict();
|
|
1062
1063
|
}
|
|
1063
|
-
|
|
1064
|
+
const uplinksLook = this.config?.publish?.allow_offline === false;
|
|
1064
1065
|
// if execution get here, package does not exist locally, we search upstream
|
|
1065
|
-
const remoteManifest = await this.checkPackageRemote(name,
|
|
1066
|
+
const remoteManifest = await this.checkPackageRemote(name, uplinksLook);
|
|
1066
1067
|
if (remoteManifest?.versions[versionToPublish] != null) {
|
|
1067
1068
|
debug('%s version %s already exists', name, versionToPublish);
|
|
1068
1069
|
throw errorUtils.getConflict();
|
|
@@ -1112,7 +1113,7 @@ class Storage {
|
|
|
1112
1113
|
// 3. upload the tarball to the storage
|
|
1113
1114
|
try {
|
|
1114
1115
|
const readable = Readable.from(buffer);
|
|
1115
|
-
await this.uploadTarball(name, firstAttachmentKey, readable, {
|
|
1116
|
+
await this.uploadTarball(name, basename(firstAttachmentKey), readable, {
|
|
1116
1117
|
signal: options.signal,
|
|
1117
1118
|
});
|
|
1118
1119
|
} catch (err: any) {
|
|
@@ -1148,43 +1149,46 @@ class Storage {
|
|
|
1148
1149
|
* @param options
|
|
1149
1150
|
* @returns
|
|
1150
1151
|
*/
|
|
1151
|
-
public
|
|
1152
|
+
public uploadTarball(
|
|
1152
1153
|
name: string,
|
|
1153
1154
|
fileName: string,
|
|
1154
1155
|
contentReadable: Readable,
|
|
1155
1156
|
{ signal }
|
|
1156
1157
|
): Promise<void> {
|
|
1157
1158
|
return new Promise((resolve, reject) => {
|
|
1158
|
-
(
|
|
1159
|
-
|
|
1160
|
-
|
|
1161
|
-
|
|
1162
|
-
|
|
1163
|
-
|
|
1164
|
-
|
|
1165
|
-
|
|
1166
|
-
|
|
1167
|
-
|
|
1168
|
-
|
|
1169
|
-
|
|
1170
|
-
|
|
1171
|
-
|
|
1172
|
-
|
|
1173
|
-
|
|
1174
|
-
|
|
1175
|
-
|
|
1176
|
-
|
|
1177
|
-
|
|
1159
|
+
this.uploadTarballAsStream(name, fileName, {
|
|
1160
|
+
signal,
|
|
1161
|
+
})
|
|
1162
|
+
.then((stream) => {
|
|
1163
|
+
stream.on('error', (err) => {
|
|
1164
|
+
debug(
|
|
1165
|
+
'error on stream a tarball %o for %o with error %o',
|
|
1166
|
+
'foo.tar.gz',
|
|
1167
|
+
name,
|
|
1168
|
+
err.message
|
|
1169
|
+
);
|
|
1170
|
+
reject(err);
|
|
1171
|
+
});
|
|
1172
|
+
stream.on('success', () => {
|
|
1173
|
+
this.logger.debug(
|
|
1174
|
+
{ fileName, name },
|
|
1175
|
+
'file @{fileName} for package @{name} has been successfully uploaded'
|
|
1176
|
+
);
|
|
1177
|
+
resolve();
|
|
1178
|
+
});
|
|
1179
|
+
return stream;
|
|
1180
|
+
})
|
|
1181
|
+
.then((stream) => {
|
|
1182
|
+
pipeline(contentReadable, stream, { signal })
|
|
1183
|
+
.then(() => {
|
|
1184
|
+
debug('success pipe upload tarball');
|
|
1185
|
+
})
|
|
1186
|
+
.catch(reject);
|
|
1178
1187
|
});
|
|
1179
|
-
|
|
1180
|
-
await pipeline(contentReadable, stream, { signal });
|
|
1181
|
-
})().catch((err) => {
|
|
1182
|
-
reject(err);
|
|
1183
|
-
});
|
|
1184
1188
|
});
|
|
1185
1189
|
}
|
|
1186
1190
|
|
|
1187
|
-
|
|
1191
|
+
private async uploadTarballAsStream(
|
|
1188
1192
|
pkgName: string,
|
|
1189
1193
|
filename: string,
|
|
1190
1194
|
{ signal }
|
|
@@ -1395,14 +1399,6 @@ class Storage {
|
|
|
1395
1399
|
}
|
|
1396
1400
|
}
|
|
1397
1401
|
|
|
1398
|
-
private isAllowPublishOffline(): boolean {
|
|
1399
|
-
return (
|
|
1400
|
-
typeof this.config.publish !== 'undefined' &&
|
|
1401
|
-
_.isBoolean(this.config.publish.allow_offline) &&
|
|
1402
|
-
this.config.publish.allow_offline
|
|
1403
|
-
);
|
|
1404
|
-
}
|
|
1405
|
-
|
|
1406
1402
|
/**
|
|
1407
1403
|
*
|
|
1408
1404
|
* @param name package name
|
|
@@ -1567,8 +1563,8 @@ class Storage {
|
|
|
1567
1563
|
|
|
1568
1564
|
A package requires uplinks syncronization if enables the proxy section, uplinks
|
|
1569
1565
|
can be more than one, the more are the most slow request will take, the request
|
|
1570
|
-
are made in
|
|
1571
|
-
the 1st will reply and others will be
|
|
1566
|
+
are made in serial and if 1st call fails, the second will be triggered, otherwise
|
|
1567
|
+
the 1st will reply and others will be discarded. The order is important.
|
|
1572
1568
|
|
|
1573
1569
|
Errors on upkinks are considered are, time outs, connection fails and http status 304,
|
|
1574
1570
|
in that case the request returns empty body and we want ask next on the list if has fresh
|
package/test/storage.spec.ts
CHANGED
|
@@ -668,8 +668,9 @@ describe('storage', () => {
|
|
|
668
668
|
});
|
|
669
669
|
test.todo('should handle double proxy with last one success');
|
|
670
670
|
});
|
|
671
|
+
|
|
671
672
|
describe('options', () => {
|
|
672
|
-
test('should handle disable uplinks via options.uplinksLook=false', async () => {
|
|
673
|
+
test('should handle disable uplinks via options.uplinksLook=false with cache', async () => {
|
|
673
674
|
const fooManifest = generatePackageMetadata('foo', '8.0.0');
|
|
674
675
|
nock('https://registry.verdaccio.org').get('/foo').reply(201, manifestFooRemoteNpmjs);
|
|
675
676
|
const config = new Config(
|
|
@@ -691,6 +692,35 @@ describe('storage', () => {
|
|
|
691
692
|
expect((response as Manifest).name).toEqual(fooManifest.name);
|
|
692
693
|
expect((response as Manifest)[DIST_TAGS].latest).toEqual('8.0.0');
|
|
693
694
|
});
|
|
695
|
+
|
|
696
|
+
test('should handle disable uplinks via options.uplinksLook=false without cache', async () => {
|
|
697
|
+
const fooRemoteManifest = generateRemotePackageMetadata(
|
|
698
|
+
'foo',
|
|
699
|
+
'9.0.0',
|
|
700
|
+
'https://registry.verdaccio.org',
|
|
701
|
+
['9.0.0', '9.0.1', '9.0.2', '9.0.3']
|
|
702
|
+
);
|
|
703
|
+
nock('https://registry.verdaccio.org').get('/foo').reply(201, fooRemoteManifest);
|
|
704
|
+
const config = new Config(
|
|
705
|
+
configExample(
|
|
706
|
+
{
|
|
707
|
+
...getDefaultConfig(),
|
|
708
|
+
storage: generateRandomStorage(),
|
|
709
|
+
},
|
|
710
|
+
'./fixtures/config/syncSingleUplinksMetadata.yaml',
|
|
711
|
+
__dirname
|
|
712
|
+
)
|
|
713
|
+
);
|
|
714
|
+
const storage = new Storage(config);
|
|
715
|
+
await storage.init(config);
|
|
716
|
+
|
|
717
|
+
const [response] = await storage.syncUplinksMetadataNext('foo', null, {
|
|
718
|
+
uplinksLook: true,
|
|
719
|
+
});
|
|
720
|
+
|
|
721
|
+
expect((response as Manifest).name).toEqual('foo');
|
|
722
|
+
expect((response as Manifest)[DIST_TAGS].latest).toEqual('9.0.0');
|
|
723
|
+
});
|
|
694
724
|
});
|
|
695
725
|
});
|
|
696
726
|
|