@verdaccio/store 6.0.0-6-next.20 → 6.0.0-6-next.21

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/storage.ts"],"names":["semver","lte","process","version","global","AbortController","require","debug","Storage","constructor","config","uplinks","Object","keys","logger","child","module","filters","localStorage","searchManager","init","LocalStorage","getSecret","SearchManager","addPackage","name","metadata","callback","_isAllowPublishOffline","_syncUplinksMetadata","bind","err","addPackageNext","publish","_","isBoolean","allow_offline","readTokens","filter","saveToken","token","deleteToken","user","tokenKey","addVersion","tag","addVersionNext","mergeTags","tagHash","changePackage","revision","changePackageNext","removePackage","SearchInstance","remove","removeTarball","filename","addTarball","getTarball","readStream","ReadTarball","abort","self","localStream","isOpen","on","status","HTTP_STATUS","NOT_FOUND","emit","err404","getPackageMetadata","info","isNil","_distfiles","serveFile","v","pipe","file","uplink","uplinkId","packages","ProxyStorage","url","cache","_autogenerated","savestream","on_open","rstream2","fetchTarball","done","warn","fileName","getPackageByVersion","options","queryVersion","errorUtils","getNotFound","API_ERROR","VERSION_NOT_EXIST","convertedManifest","getPackageNext","versions","requestOptions","url_prefix","DIST_TAGS","matchedDisTagVersion","disTagVersion","getPackageManifest","manifest","getPackageByOptions","data","getPackageMetadataNext","INTERNAL_ERROR","_syncUplinksMetadataNext","req","uplinksLook","keepUpLinkData","error","message","Promise","resolve","reject","getPackageSynUpLinksCallback","result","uplinkErrors","normalizedPkg","assign","_attachments","length","getPackage","getLocalDatabase","storagePlugin","get","then","locals","itemPkg","pkgMetadata","latest","timeList","time","users","push","package","catch","packageInfo","found","upLinks","hasToLookIntoUplinks","async","map","upLink","cb","_options","upLinkMeta","_uplinks","upname","validatioUtils","isObject","fetched","Date","now","maxage","etag","getRemoteMetadata","upLinkResponse","eTag","remoteStatus","getInternalError","validateMetadata","sub","pkgUtils","mergeVersions","upLinksErrors","Array","isArray","uplinkTimeoutError","i","j","code","getServiceUnavailable","NO_PACKAGE","updateVersions","packageJsonLocal","filterErrors","filter_metadata","concat","_updateVersionsHiddenUpLink","prototype","hasOwnProperty","call","Symbol","for"],"mappings":"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","sourcesContent":["import assert from 'assert';\nimport async, { AsyncResultArrayCallback } from 'async';\nimport buildDebug from 'debug';\nimport _ from 'lodash';\nimport semver from 'semver';\n\nimport { hasProxyTo } from '@verdaccio/config';\nimport {\n API_ERROR,\n DIST_TAGS,\n HTTP_STATUS,\n errorUtils,\n pkgUtils,\n validatioUtils,\n} from '@verdaccio/core';\nimport { logger } from '@verdaccio/logger';\nimport { ProxyStorage } from '@verdaccio/proxy';\nimport { IProxy, ProxyList } from '@verdaccio/proxy';\nimport { ReadTarball } from '@verdaccio/streams';\nimport {\n convertDistRemoteToLocalTarballUrls,\n convertDistVersionToLocalTarballsUrl,\n} from '@verdaccio/tarball';\nimport {\n Callback,\n CallbackAction,\n Config,\n DistFile,\n GenericBody,\n IReadTarball,\n IUploadTarball,\n Logger,\n MergeTags,\n Package,\n StringValue,\n Token,\n TokenFilter,\n Version,\n Versions,\n} from '@verdaccio/types';\nimport { getVersion, normalizeDistTags } from '@verdaccio/utils';\n\nimport { LocalStorage } from './local-storage';\nimport { SearchInstance, SearchManager } from './search';\n// import { isPublishablePackage, validateInputs } from './star-utils';\nimport {\n checkPackageLocal,\n checkPackageRemote,\n cleanUpLinksRef,\n generatePackageTemplate,\n mergeUplinkTimeIntoLocal,\n publishPackage,\n} from './storage-utils';\nimport { IGetPackageOptions, IGetPackageOptionsNext, IPluginFilters, ISyncUplinks } from './type';\n// import { StarBody, Users } from './type';\nimport { setupUpLinks, updateVersionsHiddenUpLink } from './uplink-util';\n\nif (semver.lte(process.version, 'v15.0.0')) {\n global.AbortController = require('abortcontroller-polyfill/dist/cjs-ponyfill').AbortController;\n}\n\nconst debug = buildDebug('verdaccio:storage');\nclass Storage {\n public localStorage: LocalStorage;\n public searchManager: SearchManager | null;\n public readonly config: Config;\n public readonly logger: Logger;\n public readonly uplinks: ProxyList;\n public filters: IPluginFilters;\n\n public constructor(config: Config) {\n this.config = config;\n this.uplinks = setupUpLinks(config);\n debug('uplinks available %o', Object.keys(this.uplinks));\n this.logger = logger.child({ module: 'storage' });\n this.filters = [];\n // @ts-ignore\n this.localStorage = null;\n this.searchManager = null;\n }\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 this.searchManager = new SearchManager(this.uplinks, this.localStorage);\n } else {\n debug('storage has been already initialized');\n }\n return;\n }\n\n /**\n * Add a {name} package to a system\n Function checks if package with the same name is available from uplinks.\n If it isn't, we create package locally\n Used storages: local (write) && uplinks\n */\n public async addPackage(name: string, metadata: any, callback: Function): Promise<void> {\n try {\n debug('add package for %o', name);\n await checkPackageLocal(name, this.localStorage);\n debug('look up remote for %o', name);\n await checkPackageRemote(\n name,\n this._isAllowPublishOffline(),\n this._syncUplinksMetadata.bind(this)\n );\n debug('publishing a package for %o', name);\n await publishPackage(name, metadata, this.localStorage as LocalStorage);\n // TODO: return published data and replace callback by a promise\n callback(null, true);\n } catch (err: any) {\n debug('error on add a package for %o with error %o', name, err);\n callback(err);\n }\n }\n\n /**\n * Add a {name} package to a system\n Function checks if package with the same name is available from uplinks.\n If it isn't, we create package locally\n Used storages: local (write) && uplinks\n */\n public async addPackageNext(name: string, metadata: Package): Promise<Package> {\n try {\n debug('add package for %o', name);\n await checkPackageLocal(name, this.localStorage);\n debug('look up remote for %o', name);\n await checkPackageRemote(\n name,\n this._isAllowPublishOffline(),\n this._syncUplinksMetadata.bind(this)\n );\n debug('publishing a package for %o', name);\n // FIXME: publishPackage should return fresh metadata from backend\n // instead return metadata\n await publishPackage(name, metadata, this.localStorage as LocalStorage);\n return metadata;\n } catch (err: any) {\n debug('error on add a package for %o with error %o', name, err);\n throw err;\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 public readTokens(filter: TokenFilter): Promise<Token[]> {\n return this.localStorage.readTokens(filter);\n }\n\n public saveToken(token: Token): Promise<void> {\n return this.localStorage.saveToken(token);\n }\n\n public deleteToken(user: string, tokenKey: string): Promise<any> {\n return this.localStorage.deleteToken(user, tokenKey);\n }\n\n /**\n * Add a new version of package {name} to a system\n Used storages: local (write)\n */\n public addVersion(\n name: string,\n version: string,\n metadata: Version,\n tag: StringValue,\n callback: CallbackAction\n ): void {\n debug('add the version %o for package %o', version, name);\n this.localStorage.addVersion(name, version, metadata, tag, callback);\n }\n\n public async addVersionNext(\n name: string,\n version: string,\n metadata: Version,\n tag: StringValue\n ): Promise<void> {\n debug('add the version %o for package %o', version, name);\n return this.localStorage.addVersionNext(name, version, metadata, tag);\n }\n\n /**\n * Tags a package version with a provided tag\n Used storages: local (write)\n */\n public mergeTags(name: string, tagHash: MergeTags, callback: CallbackAction): void {\n debug('merge tags for package %o tags %o', name, tagHash);\n this.localStorage.mergeTags(name, tagHash, callback);\n }\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 changePackage(\n name: string,\n metadata: Package,\n revision: string,\n callback: Callback\n ): void {\n debug('change existing package for package %o revision %o', name, revision);\n this.localStorage.changePackage(name, metadata, revision, callback);\n }\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(name: string, metadata: Package, revision: string): Promise<void> {\n debug('change existing package for package %o revision %o', name, revision);\n this.localStorage.changePackageNext(name, metadata, revision);\n }\n\n /**\n * Remove a package from a system\n Function removes a package from local storage\n Used storages: local (write)\n */\n public async removePackage(name: string): Promise<void> {\n debug('remove packagefor package %o', name);\n await this.localStorage.removePackage(name);\n // update the indexer\n SearchInstance.remove(name);\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 public removeTarball(\n name: string,\n filename: string,\n revision: string,\n callback: CallbackAction\n ): void {\n this.localStorage.removeTarball(name, filename, revision, callback);\n }\n\n /**\n * Upload a tarball for {name} package\n Function is synchronous and returns a WritableStream\n Used storages: local (write)\n */\n public addTarball(name: string, filename: string): IUploadTarball {\n debug('add tarball for package %o', name);\n return this.localStorage.addTarball(name, filename);\n }\n\n /**\n Get a tarball from a storage for {name} package\n Function is synchronous and returns a ReadableStream\n Function tries to read tarball locally, if it fails then it reads package\n information in order to figure out where we can get this tarball from\n Used storages: local || uplink (just one)\n */\n public getTarball(name: string, filename: string): IReadTarball {\n debug('get tarball for package %o filename %o', name, filename);\n const readStream = new ReadTarball({});\n readStream.abort = function () {};\n\n const self = this;\n\n // if someone requesting tarball, it means that we should already have some\n // information about it, so fetching package info is unnecessary\n\n // trying local first\n // flow: should be IReadTarball\n let localStream: any = self.localStorage.getTarball(name, filename);\n let isOpen = false;\n localStream.on('error', (err): any => {\n if (isOpen || err.status !== HTTP_STATUS.NOT_FOUND) {\n return readStream.emit('error', err);\n }\n\n // local reported 404\n const err404 = err;\n localStream.abort();\n localStream = null; // we force for garbage collector\n self.localStorage.getPackageMetadata(name, (err, info: Package): void => {\n if (_.isNil(err) && info._distfiles && _.isNil(info._distfiles[filename]) === false) {\n // information about this file exists locally\n serveFile(info._distfiles[filename]);\n } else {\n // we know nothing about this file, trying to get information elsewhere\n self._syncUplinksMetadata(name, info, {}, (err, info: Package): any => {\n if (_.isNil(err) === false) {\n return readStream.emit('error', err);\n }\n if (_.isNil(info._distfiles) || _.isNil(info._distfiles[filename])) {\n return readStream.emit('error', err404);\n }\n serveFile(info._distfiles[filename]);\n });\n }\n });\n });\n localStream.on('content-length', function (v): void {\n readStream.emit('content-length', v);\n });\n\n localStream.on('open', function (): void {\n isOpen = true;\n localStream.pipe(readStream);\n });\n return readStream;\n\n /**\n * Fetch and cache local/remote packages.\n * @param {Object} file define the package shape\n */\n function serveFile(file: DistFile): void {\n let uplink: any = null;\n\n for (const uplinkId in self.uplinks) {\n // https://github.com/verdaccio/verdaccio/issues/1642\n if (hasProxyTo(name, uplinkId, self.config.packages)) {\n uplink = self.uplinks[uplinkId];\n }\n }\n\n if (uplink == null) {\n uplink = new ProxyStorage(\n {\n url: file.url,\n cache: true,\n _autogenerated: true,\n },\n self.config\n );\n }\n\n let savestream: IUploadTarball | null = null;\n if (uplink.config.cache) {\n savestream = self.localStorage.addTarball(name, filename);\n }\n\n let on_open = function (): void {\n // prevent it from being called twice\n on_open = function () {};\n const rstream2 = uplink.fetchTarball(file.url);\n rstream2.on('error', function (err): void {\n if (savestream) {\n savestream.abort();\n }\n savestream = null;\n readStream.emit('error', err);\n });\n rstream2.on('end', function (): void {\n if (savestream) {\n savestream.done();\n }\n });\n\n rstream2.on('content-length', function (v): void {\n readStream.emit('content-length', v);\n if (savestream) {\n savestream.emit('content-length', v);\n }\n });\n rstream2.pipe(readStream);\n if (savestream) {\n rstream2.pipe(savestream);\n }\n };\n\n if (savestream) {\n savestream.on('open', function (): void {\n on_open();\n });\n\n savestream.on('error', function (err): void {\n self.logger.warn(\n { err: err, fileName: file },\n 'error saving file @{fileName}: @{err?.message}\\n@{err.stack}'\n );\n if (savestream) {\n savestream.abort();\n }\n savestream = null;\n on_open();\n });\n } else {\n on_open();\n }\n }\n }\n\n // public async starPackage(body: StarBody, options: IGetPackageOptionsNext): Promise<void> {\n // debug('star package');\n // const manifest = await this.getPackageNext(options);\n // const newStarUser = body[constants.USERS];\n // const remoteUsername: string = options.remoteUser.name as string;\n // const localStarUsers = manifest[constants.USERS];\n // // Check is star or unstar\n // const isStar = Object.keys(newStarUser).includes(remoteUsername);\n // debug('is start? %o', isStar);\n // if (\n // _.isNil(localStarUsers) === false &&\n // validateInputs(localStarUsers, remoteUsername, isStar)\n // ) {\n // // return afterChangePackage();\n // }\n // const users: Users = isStar\n // ? {\n // ...localStarUsers,\n // [remoteUsername]: true,\n // }\n // : _.reduce(\n // localStarUsers,\n // (users, value, key) => {\n // if (key !== remoteUsername) {\n // users[key] = value;\n // }\n // return users;\n // },\n // {}\n // );\n // debug('update package for %o', name);\n // }\n\n // public async publish(body: any, options: IGetPackageOptionsNext): Promise<any> {\n // const { name } = options;\n // debug('publishing or updating a new version for %o', name);\n // // we check if the request is npm star\n // if (!isPublishablePackage(body) && isObject(body.users)) {\n // debug('starting star a package');\n // await this.starPackage(body as StarBody, options);\n // }\n\n // return { ok: API_MESSAGE.PKG_CHANGED, success: true };\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<Package> {\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 /**\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(options: IGetPackageOptionsNext): Promise<Package | Version> {\n // if no version we return the whole manifest\n if (_.isNil(options.version) === false) {\n return this.getPackageByVersion(options);\n } else {\n return this.getPackageManifest(options);\n }\n }\n\n public async getPackageNext(options: IGetPackageOptionsNext): Promise<[Package, any[]]> {\n const { name } = options;\n debug('get package for %o', name);\n try {\n let data: Package;\n try {\n data = await this.localStorage.getPackageMetadataNext(name);\n } catch (err: any) {\n // we don't have package locally, so we need to fetch it from uplinks\n if (err && (!err.status || err.status >= HTTP_STATUS.INTERNAL_ERROR)) {\n throw err;\n }\n }\n\n // time to sync with uplinks if we have any\n debug('sync uplinks for %o', name);\n // @ts-expect-error\n return this._syncUplinksMetadataNext(name, data, {\n req: options.req,\n uplinksLook: options.uplinksLook,\n keepUpLinkData: options.keepUpLinkData,\n });\n } catch (err: any) {\n this.logger.error(\n { name, err: err.message },\n 'error on get package for @{name} with error @{err}'\n );\n throw err;\n }\n }\n\n private _syncUplinksMetadataNext(\n name: string,\n data: Package,\n { uplinksLook, keepUpLinkData, req }\n ): Promise<[Package, any[]]> {\n return new Promise((resolve, reject) => {\n this._syncUplinksMetadata(\n name,\n data,\n { req: req, uplinksLook },\n function getPackageSynUpLinksCallback(err, result: Package, uplinkErrors): void {\n if (err) {\n debug('error on sync package for %o with error %o', name, err?.message);\n return reject(err);\n }\n\n const normalizedPkg = Object.assign({}, result, {\n ...normalizeDistTags(cleanUpLinksRef(result, keepUpLinkData)),\n _attachments: {},\n });\n\n debug('no. sync uplinks errors %o', uplinkErrors?.length);\n resolve([normalizedPkg, uplinkErrors]);\n }\n );\n });\n }\n\n /**\n Retrieve a package metadata for {name} package\n Function invokes localStorage.getPackage and uplink.get_package for every\n uplink with proxy_access rights against {name} and combines results\n into one json object\n Used storages: local && uplink (proxy_access)\n\n * @param {object} options\n * @property {string} options.name Package Name\n * @property {object} options.req Express `req` object\n * @property {boolean} options.keepUpLinkData keep up link info in package meta, last update, etc.\n * @property {function} options.callback Callback for receive data\n */\n public getPackage(options: IGetPackageOptions): void {\n const { name } = options;\n debug('get package for %o', name);\n this.localStorage.getPackageMetadata(name, (err, data) => {\n if (err && (!err.status || err.status >= HTTP_STATUS.INTERNAL_ERROR)) {\n // report internal errors right away\n debug('error on get package for %o with error %o', name, err?.message);\n return options.callback(err);\n }\n\n debug('sync uplinks for %o', name);\n this._syncUplinksMetadata(\n name,\n data,\n { req: options.req, uplinksLook: options.uplinksLook },\n function getPackageSynUpLinksCallback(err, result: Package, uplinkErrors): void {\n if (err) {\n debug('error on sync package for %o with error %o', name, err?.message);\n return options.callback(err);\n }\n\n result = normalizeDistTags(cleanUpLinksRef(result, options?.keepUpLinkData));\n\n // npm can throw if this field doesn't exist\n result._attachments = {};\n\n debug('no. sync uplinks errors %o', uplinkErrors?.length);\n options.callback(null, result, uplinkErrors);\n }\n );\n });\n }\n\n /**\n * Retrieve only private local packages\n * @param {*} callback\n */\n public getLocalDatabase(callback: Callback): void {\n const self = this;\n debug('get local database');\n if (this.localStorage.storagePlugin !== null) {\n this.localStorage.storagePlugin\n .get()\n .then((locals) => {\n const packages: Version[] = [];\n const getPackage = function (itemPkg): void {\n self.localStorage.getPackageMetadata(\n locals[itemPkg],\n function (err, pkgMetadata: Package): void {\n if (_.isNil(err)) {\n const latest = pkgMetadata[DIST_TAGS].latest;\n if (latest && pkgMetadata.versions[latest]) {\n const version: Version = pkgMetadata.versions[latest];\n const timeList = pkgMetadata.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 = pkgMetadata.users;\n\n packages.push(version);\n } else {\n self.logger.warn(\n { package: locals[itemPkg] },\n 'package @{package} does not have a \"latest\" tag?'\n );\n }\n }\n\n if (itemPkg >= locals.length - 1) {\n callback(null, packages);\n } else {\n getPackage(itemPkg + 1);\n }\n }\n );\n };\n\n if (locals.length) {\n getPackage(0);\n } else {\n callback(null, []);\n }\n })\n .catch((err) => {\n callback(err);\n });\n } else {\n debug('local stora instance is null');\n }\n }\n\n // notas, debo migrar _syncUplinksMetadata algo mas lindo\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 returns callback(err, result, uplink_errors)\n */\n public _syncUplinksMetadata(\n name: string,\n packageInfo: Package,\n options: ISyncUplinks,\n callback: Callback\n ): void {\n let found = true;\n const self = this;\n const upLinks: IProxy[] = [];\n const hasToLookIntoUplinks = _.isNil(options.uplinksLook) || options.uplinksLook;\n debug('is sync uplink enabled %o', hasToLookIntoUplinks);\n\n if (!packageInfo) {\n found = false;\n packageInfo = generatePackageTemplate(name);\n }\n\n for (const uplink in this.uplinks) {\n if (hasProxyTo(name, uplink, this.config.packages) && hasToLookIntoUplinks) {\n upLinks.push(this.uplinks[uplink]);\n }\n }\n\n debug('uplink list %o', upLinks.length);\n\n async.map(\n upLinks,\n (upLink, cb): void => {\n const _options = Object.assign({}, options);\n const upLinkMeta = packageInfo._uplinks[upLink.upname];\n\n if (validatioUtils.isObject(upLinkMeta)) {\n const fetched = upLinkMeta.fetched;\n\n if (fetched && Date.now() - fetched < upLink.maxage) {\n return cb();\n }\n\n _options.etag = upLinkMeta.etag;\n }\n\n upLink.getRemoteMetadata(name, _options, (err, upLinkResponse, eTag): void => {\n if (err && err.remoteStatus === 304) {\n upLinkMeta.fetched = Date.now();\n }\n\n if (err || !upLinkResponse) {\n return cb(null, [err || errorUtils.getInternalError('no data')]);\n }\n\n try {\n validatioUtils.validateMetadata(upLinkResponse, name);\n } catch (err: any) {\n self.logger.error(\n {\n sub: 'out',\n err: err,\n },\n 'package.json validating error @{!err?.message}\\n@{err.stack}'\n );\n return cb(null, [err]);\n }\n\n packageInfo._uplinks[upLink.upname] = {\n etag: eTag,\n fetched: Date.now(),\n };\n\n packageInfo.time = mergeUplinkTimeIntoLocal(packageInfo, upLinkResponse);\n\n updateVersionsHiddenUpLink(upLinkResponse.versions, upLink);\n\n try {\n pkgUtils.mergeVersions(packageInfo, upLinkResponse);\n } catch (err: any) {\n self.logger.error(\n {\n sub: 'out',\n err: err,\n },\n 'package.json parsing error @{!err?.message}\\n@{err.stack}'\n );\n return cb(null, [err]);\n }\n\n // if we got to this point, assume that the correct package exists\n // on the uplink\n found = true;\n cb();\n });\n },\n // @ts-ignore\n (err: Error, upLinksErrors: any): AsyncResultArrayCallback<unknown, Error> => {\n assert(!err && Array.isArray(upLinksErrors));\n\n // Check for connection timeout or reset errors with uplink(s)\n // (these should be handled differently from the package not being found)\n if (!found) {\n let uplinkTimeoutError;\n for (let i = 0; i < upLinksErrors.length; i++) {\n if (upLinksErrors[i]) {\n for (let j = 0; j < upLinksErrors[i].length; j++) {\n if (upLinksErrors[i][j]) {\n const code = upLinksErrors[i][j].code;\n if (code === 'ETIMEDOUT' || code === 'ESOCKETTIMEDOUT' || code === 'ECONNRESET') {\n uplinkTimeoutError = true;\n break;\n }\n }\n }\n }\n }\n\n if (uplinkTimeoutError) {\n return callback(errorUtils.getServiceUnavailable(), null, upLinksErrors);\n }\n return callback(errorUtils.getNotFound(API_ERROR.NO_PACKAGE), null, upLinksErrors);\n }\n\n if (upLinks.length === 0) {\n return callback(null, packageInfo);\n }\n\n self.localStorage.updateVersions(\n name,\n packageInfo,\n async (err, packageJsonLocal: Package): Promise<any> => {\n if (err) {\n return callback(err);\n }\n // Any error here will cause a 404, like an uplink error. This is likely\n // the right thing to do\n // as a broken filter is a security risk.\n const filterErrors: Error[] = [];\n // This MUST be done serially and not in parallel as they modify packageJsonLocal\n for (const filter of self.filters) {\n try {\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 packageJsonLocal = await filter.filter_metadata(packageJsonLocal);\n } catch (err: any) {\n filterErrors.push(err);\n }\n }\n callback(null, packageJsonLocal, _.concat(upLinksErrors, filterErrors));\n }\n );\n }\n );\n }\n\n /**\n * Set a hidden value for each version.\n * @param {Array} versions list of version\n * @param {String} upLink uplink name\n * @private\n */\n public _updateVersionsHiddenUpLink(versions: Versions, upLink: IProxy): void {\n for (const i in versions) {\n if (Object.prototype.hasOwnProperty.call(versions, i)) {\n const version = versions[i];\n\n // holds a \"hidden\" value to be used by the package storage.\n // $FlowFixMe\n version[Symbol.for('__verdaccio_uplink')] = upLink.upname;\n }\n }\n }\n}\n\nexport { Storage };\n"],"file":"storage.js"}
1
+ {"version":3,"sources":["../src/storage.ts"],"names":["debug","Storage","constructor","config","uplinks","Object","keys","logger","child","module","filters","localStorage","searchManager","init","LocalStorage","getSecret","SearchManager","addPackage","name","metadata","callback","_isAllowPublishOffline","_syncUplinksMetadata","bind","err","addPackageNext","publish","_","isBoolean","allow_offline","readTokens","filter","saveToken","token","deleteToken","user","tokenKey","addVersion","version","tag","addVersionNext","mergeTags","tagHash","changePackage","revision","changePackageNext","removePackage","removeTarball","filename","addTarball","getTarball","readStream","ReadTarball","abort","self","localStream","isOpen","on","status","HTTP_STATUS","NOT_FOUND","emit","err404","getPackageMetadata","info","isNil","_distfiles","serveFile","v","pipe","file","uplink","uplinkId","packages","ProxyStorage","url","cache","_autogenerated","savestream","on_open","rstream2","fetchTarball","done","warn","fileName","getPackageByVersion","options","queryVersion","errorUtils","getNotFound","API_ERROR","VERSION_NOT_EXIST","convertedManifest","getPackageNext","versions","requestOptions","url_prefix","DIST_TAGS","matchedDisTagVersion","disTagVersion","getPackageManifest","manifest","getPackageByOptions","data","getPackageMetadataNext","INTERNAL_ERROR","_syncUplinksMetadataNext","req","uplinksLook","keepUpLinkData","error","message","Promise","resolve","reject","getPackageSynUpLinksCallback","result","uplinkErrors","normalizedPkg","assign","_attachments","length","getPackage","getLocalDatabase","storagePlugin","get","then","locals","itemPkg","pkgMetadata","latest","timeList","time","users","push","package","catch","packageInfo","found","upLinks","hasToLookIntoUplinks","async","map","upLink","cb","_options","upLinkMeta","_uplinks","upname","validatioUtils","isObject","fetched","Date","now","maxage","etag","getRemoteMetadata","upLinkResponse","eTag","remoteStatus","getInternalError","validateMetadata","sub","pkgUtils","mergeVersions","upLinksErrors","Array","isArray","uplinkTimeoutError","i","j","code","getServiceUnavailable","NO_PACKAGE","updateVersions","packageJsonLocal","filterErrors","filter_metadata","concat","_updateVersionsHiddenUpLink","prototype","hasOwnProperty","call","Symbol","for"],"mappings":"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","sourcesContent":["import assert from 'assert';\nimport async, { AsyncResultArrayCallback } from 'async';\nimport buildDebug from 'debug';\nimport _ from 'lodash';\n\nimport { hasProxyTo } from '@verdaccio/config';\nimport {\n API_ERROR,\n DIST_TAGS,\n HTTP_STATUS,\n errorUtils,\n pkgUtils,\n validatioUtils,\n} from '@verdaccio/core';\nimport { logger } from '@verdaccio/logger';\nimport { ProxyStorage } from '@verdaccio/proxy';\nimport { IProxy, ProxyList } from '@verdaccio/proxy';\nimport { ReadTarball } from '@verdaccio/streams';\nimport {\n convertDistRemoteToLocalTarballUrls,\n convertDistVersionToLocalTarballsUrl,\n} from '@verdaccio/tarball';\nimport {\n Callback,\n CallbackAction,\n Config,\n DistFile,\n GenericBody,\n IReadTarball,\n IUploadTarball,\n Logger,\n MergeTags,\n Package,\n StringValue,\n Token,\n TokenFilter,\n Version,\n Versions,\n} from '@verdaccio/types';\nimport { getVersion, normalizeDistTags } from '@verdaccio/utils';\n\nimport { LocalStorage } from './local-storage';\nimport { SearchManager } from './search';\n// import { isPublishablePackage, validateInputs } from './star-utils';\nimport {\n checkPackageLocal,\n checkPackageRemote,\n cleanUpLinksRef,\n generatePackageTemplate,\n mergeUplinkTimeIntoLocal,\n publishPackage,\n} from './storage-utils';\nimport { IGetPackageOptions, IGetPackageOptionsNext, IPluginFilters, ISyncUplinks } from './type';\n// import { StarBody, Users } from './type';\nimport { setupUpLinks, updateVersionsHiddenUpLink } from './uplink-util';\n\nconst debug = buildDebug('verdaccio:storage');\nclass Storage {\n public localStorage: LocalStorage;\n public searchManager: SearchManager | null;\n public readonly config: Config;\n public readonly logger: Logger;\n public readonly uplinks: ProxyList;\n public filters: IPluginFilters;\n\n public constructor(config: Config) {\n this.config = config;\n this.uplinks = setupUpLinks(config);\n debug('uplinks available %o', Object.keys(this.uplinks));\n this.logger = logger.child({ module: 'storage' });\n this.filters = [];\n // @ts-ignore\n this.localStorage = null;\n this.searchManager = null;\n }\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 this.searchManager = new SearchManager(this.uplinks, this.localStorage);\n } else {\n debug('storage has been already initialized');\n }\n return;\n }\n\n /**\n * Add a {name} package to a system\n Function checks if package with the same name is available from uplinks.\n If it isn't, we create package locally\n Used storages: local (write) && uplinks\n */\n public async addPackage(name: string, metadata: any, callback: Function): Promise<void> {\n try {\n debug('add package for %o', name);\n await checkPackageLocal(name, this.localStorage);\n debug('look up remote for %o', name);\n await checkPackageRemote(\n name,\n this._isAllowPublishOffline(),\n this._syncUplinksMetadata.bind(this)\n );\n debug('publishing a package for %o', name);\n await publishPackage(name, metadata, this.localStorage as LocalStorage);\n // TODO: return published data and replace callback by a promise\n callback(null, true);\n } catch (err: any) {\n debug('error on add a package for %o with error %o', name, err);\n callback(err);\n }\n }\n\n /**\n * Add a {name} package to a system\n Function checks if package with the same name is available from uplinks.\n If it isn't, we create package locally\n Used storages: local (write) && uplinks\n */\n public async addPackageNext(name: string, metadata: Package): Promise<Package> {\n try {\n debug('add package for %o', name);\n await checkPackageLocal(name, this.localStorage);\n debug('look up remote for %o', name);\n await checkPackageRemote(\n name,\n this._isAllowPublishOffline(),\n this._syncUplinksMetadata.bind(this)\n );\n debug('publishing a package for %o', name);\n // FIXME: publishPackage should return fresh metadata from backend\n // instead return metadata\n await publishPackage(name, metadata, this.localStorage as LocalStorage);\n return metadata;\n } catch (err: any) {\n debug('error on add a package for %o with error %o', name, err);\n throw err;\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 public readTokens(filter: TokenFilter): Promise<Token[]> {\n return this.localStorage.readTokens(filter);\n }\n\n public saveToken(token: Token): Promise<void> {\n return this.localStorage.saveToken(token);\n }\n\n public deleteToken(user: string, tokenKey: string): Promise<any> {\n return this.localStorage.deleteToken(user, tokenKey);\n }\n\n /**\n * Add a new version of package {name} to a system\n Used storages: local (write)\n */\n public addVersion(\n name: string,\n version: string,\n metadata: Version,\n tag: StringValue,\n callback: CallbackAction\n ): void {\n debug('add the version %o for package %o', version, name);\n this.localStorage.addVersion(name, version, metadata, tag, callback);\n }\n\n public async addVersionNext(\n name: string,\n version: string,\n metadata: Version,\n tag: StringValue\n ): Promise<void> {\n debug('add the version %o for package %o', version, name);\n return this.localStorage.addVersionNext(name, version, metadata, tag);\n }\n\n /**\n * Tags a package version with a provided tag\n Used storages: local (write)\n */\n public mergeTags(name: string, tagHash: MergeTags, callback: CallbackAction): void {\n debug('merge tags for package %o tags %o', name, tagHash);\n this.localStorage.mergeTags(name, tagHash, callback);\n }\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 changePackage(\n name: string,\n metadata: Package,\n revision: string,\n callback: Callback\n ): void {\n debug('change existing package for package %o revision %o', name, revision);\n this.localStorage.changePackage(name, metadata, revision, callback);\n }\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(name: string, metadata: Package, revision: string): Promise<void> {\n debug('change existing package for package %o revision %o', name, revision);\n this.localStorage.changePackageNext(name, metadata, revision);\n }\n\n /**\n * Remove a package from a system\n Function removes a package from local storage\n Used storages: local (write)\n */\n public async removePackage(name: string): Promise<void> {\n debug('remove packagefor package %o', name);\n await this.localStorage.removePackage(name);\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 public removeTarball(\n name: string,\n filename: string,\n revision: string,\n callback: CallbackAction\n ): void {\n this.localStorage.removeTarball(name, filename, revision, callback);\n }\n\n /**\n * Upload a tarball for {name} package\n Function is synchronous and returns a WritableStream\n Used storages: local (write)\n */\n public addTarball(name: string, filename: string): IUploadTarball {\n debug('add tarball for package %o', name);\n return this.localStorage.addTarball(name, filename);\n }\n\n /**\n Get a tarball from a storage for {name} package\n Function is synchronous and returns a ReadableStream\n Function tries to read tarball locally, if it fails then it reads package\n information in order to figure out where we can get this tarball from\n Used storages: local || uplink (just one)\n */\n public getTarball(name: string, filename: string): IReadTarball {\n debug('get tarball for package %o filename %o', name, filename);\n const readStream = new ReadTarball({});\n readStream.abort = function () {};\n\n const self = this;\n\n // if someone requesting tarball, it means that we should already have some\n // information about it, so fetching package info is unnecessary\n\n // trying local first\n // flow: should be IReadTarball\n let localStream: any = self.localStorage.getTarball(name, filename);\n let isOpen = false;\n localStream.on('error', (err): any => {\n if (isOpen || err.status !== HTTP_STATUS.NOT_FOUND) {\n return readStream.emit('error', err);\n }\n\n // local reported 404\n const err404 = err;\n localStream.abort();\n localStream = null; // we force for garbage collector\n self.localStorage.getPackageMetadata(name, (err, info: Package): void => {\n if (_.isNil(err) && info._distfiles && _.isNil(info._distfiles[filename]) === false) {\n // information about this file exists locally\n serveFile(info._distfiles[filename]);\n } else {\n // we know nothing about this file, trying to get information elsewhere\n self._syncUplinksMetadata(name, info, {}, (err, info: Package): any => {\n if (_.isNil(err) === false) {\n return readStream.emit('error', err);\n }\n if (_.isNil(info._distfiles) || _.isNil(info._distfiles[filename])) {\n return readStream.emit('error', err404);\n }\n serveFile(info._distfiles[filename]);\n });\n }\n });\n });\n localStream.on('content-length', function (v): void {\n readStream.emit('content-length', v);\n });\n\n localStream.on('open', function (): void {\n isOpen = true;\n localStream.pipe(readStream);\n });\n return readStream;\n\n /**\n * Fetch and cache local/remote packages.\n * @param {Object} file define the package shape\n */\n function serveFile(file: DistFile): void {\n let uplink: any = null;\n\n for (const uplinkId in self.uplinks) {\n // https://github.com/verdaccio/verdaccio/issues/1642\n if (hasProxyTo(name, uplinkId, self.config.packages)) {\n uplink = self.uplinks[uplinkId];\n }\n }\n\n if (uplink == null) {\n uplink = new ProxyStorage(\n {\n url: file.url,\n cache: true,\n _autogenerated: true,\n },\n self.config\n );\n }\n\n let savestream: IUploadTarball | null = null;\n if (uplink.config.cache) {\n savestream = self.localStorage.addTarball(name, filename);\n }\n\n let on_open = function (): void {\n // prevent it from being called twice\n on_open = function () {};\n const rstream2 = uplink.fetchTarball(file.url);\n rstream2.on('error', function (err): void {\n if (savestream) {\n savestream.abort();\n }\n savestream = null;\n readStream.emit('error', err);\n });\n rstream2.on('end', function (): void {\n if (savestream) {\n savestream.done();\n }\n });\n\n rstream2.on('content-length', function (v): void {\n readStream.emit('content-length', v);\n if (savestream) {\n savestream.emit('content-length', v);\n }\n });\n rstream2.pipe(readStream);\n if (savestream) {\n rstream2.pipe(savestream);\n }\n };\n\n if (savestream) {\n savestream.on('open', function (): void {\n on_open();\n });\n\n savestream.on('error', function (err): void {\n self.logger.warn(\n { err: err, fileName: file },\n 'error saving file @{fileName}: @{err?.message}\\n@{err.stack}'\n );\n if (savestream) {\n savestream.abort();\n }\n savestream = null;\n on_open();\n });\n } else {\n on_open();\n }\n }\n }\n\n // public async starPackage(body: StarBody, options: IGetPackageOptionsNext): Promise<void> {\n // debug('star package');\n // const manifest = await this.getPackageNext(options);\n // const newStarUser = body[constants.USERS];\n // const remoteUsername: string = options.remoteUser.name as string;\n // const localStarUsers = manifest[constants.USERS];\n // // Check is star or unstar\n // const isStar = Object.keys(newStarUser).includes(remoteUsername);\n // debug('is start? %o', isStar);\n // if (\n // _.isNil(localStarUsers) === false &&\n // validateInputs(localStarUsers, remoteUsername, isStar)\n // ) {\n // // return afterChangePackage();\n // }\n // const users: Users = isStar\n // ? {\n // ...localStarUsers,\n // [remoteUsername]: true,\n // }\n // : _.reduce(\n // localStarUsers,\n // (users, value, key) => {\n // if (key !== remoteUsername) {\n // users[key] = value;\n // }\n // return users;\n // },\n // {}\n // );\n // debug('update package for %o', name);\n // }\n\n // public async publish(body: any, options: IGetPackageOptionsNext): Promise<any> {\n // const { name } = options;\n // debug('publishing or updating a new version for %o', name);\n // // we check if the request is npm star\n // if (!isPublishablePackage(body) && isObject(body.users)) {\n // debug('starting star a package');\n // await this.starPackage(body as StarBody, options);\n // }\n\n // return { ok: API_MESSAGE.PKG_CHANGED, success: true };\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<Package> {\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 /**\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(options: IGetPackageOptionsNext): Promise<Package | Version> {\n // if no version we return the whole manifest\n if (_.isNil(options.version) === false) {\n return this.getPackageByVersion(options);\n } else {\n return this.getPackageManifest(options);\n }\n }\n\n public async getPackageNext(options: IGetPackageOptionsNext): Promise<[Package, any[]]> {\n const { name } = options;\n debug('get package for %o', name);\n try {\n let data: Package;\n try {\n data = await this.localStorage.getPackageMetadataNext(name);\n } catch (err: any) {\n // we don't have package locally, so we need to fetch it from uplinks\n if (err && (!err.status || err.status >= HTTP_STATUS.INTERNAL_ERROR)) {\n throw err;\n }\n }\n\n // time to sync with uplinks if we have any\n debug('sync uplinks for %o', name);\n // @ts-expect-error\n return this._syncUplinksMetadataNext(name, data, {\n req: options.req,\n uplinksLook: options.uplinksLook,\n keepUpLinkData: options.keepUpLinkData,\n });\n } catch (err: any) {\n this.logger.error(\n { name, err: err.message },\n 'error on get package for @{name} with error @{err}'\n );\n throw err;\n }\n }\n\n private _syncUplinksMetadataNext(\n name: string,\n data: Package,\n { uplinksLook, keepUpLinkData, req }\n ): Promise<[Package, any[]]> {\n return new Promise((resolve, reject) => {\n this._syncUplinksMetadata(\n name,\n data,\n { req: req, uplinksLook },\n function getPackageSynUpLinksCallback(err, result: Package, uplinkErrors): void {\n if (err) {\n debug('error on sync package for %o with error %o', name, err?.message);\n return reject(err);\n }\n\n const normalizedPkg = Object.assign({}, result, {\n ...normalizeDistTags(cleanUpLinksRef(result, keepUpLinkData)),\n _attachments: {},\n });\n\n debug('no. sync uplinks errors %o for %s', uplinkErrors?.length, name);\n resolve([normalizedPkg, uplinkErrors]);\n }\n );\n });\n }\n\n /**\n Retrieve a package metadata for {name} package\n Function invokes localStorage.getPackage and uplink.get_package for every\n uplink with proxy_access rights against {name} and combines results\n into one json object\n Used storages: local && uplink (proxy_access)\n\n * @param {object} options\n * @property {string} options.name Package Name\n * @property {object} options.req Express `req` object\n * @property {boolean} options.keepUpLinkData keep up link info in package meta, last update, etc.\n * @property {function} options.callback Callback for receive data\n */\n public getPackage(options: IGetPackageOptions): void {\n const { name } = options;\n debug('get package for %o', name);\n this.localStorage.getPackageMetadata(name, (err, data) => {\n if (err && (!err.status || err.status >= HTTP_STATUS.INTERNAL_ERROR)) {\n // report internal errors right away\n debug('error on get package for %o with error %o', name, err?.message);\n return options.callback(err);\n }\n\n debug('sync uplinks for %o', name);\n this._syncUplinksMetadata(\n name,\n data,\n { req: options.req, uplinksLook: options.uplinksLook },\n function getPackageSynUpLinksCallback(err, result: Package, uplinkErrors): void {\n if (err) {\n debug('error on sync package for %o with error %o', name, err?.message);\n return options.callback(err);\n }\n\n result = normalizeDistTags(cleanUpLinksRef(result, options?.keepUpLinkData));\n\n // npm can throw if this field doesn't exist\n result._attachments = {};\n\n debug('no. sync uplinks errors %o', uplinkErrors?.length);\n options.callback(null, result, uplinkErrors);\n }\n );\n });\n }\n\n /**\n * Retrieve only private local packages\n * @param {*} callback\n */\n public getLocalDatabase(callback: Callback): void {\n const self = this;\n debug('get local database');\n if (this.localStorage.storagePlugin !== null) {\n this.localStorage.storagePlugin\n .get()\n .then((locals) => {\n const packages: Version[] = [];\n const getPackage = function (itemPkg): void {\n self.localStorage.getPackageMetadata(\n locals[itemPkg],\n function (err, pkgMetadata: Package): void {\n if (_.isNil(err)) {\n const latest = pkgMetadata[DIST_TAGS].latest;\n if (latest && pkgMetadata.versions[latest]) {\n const version: Version = pkgMetadata.versions[latest];\n const timeList = pkgMetadata.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 = pkgMetadata.users;\n\n packages.push(version);\n } else {\n self.logger.warn(\n { package: locals[itemPkg] },\n 'package @{package} does not have a \"latest\" tag?'\n );\n }\n }\n\n if (itemPkg >= locals.length - 1) {\n callback(null, packages);\n } else {\n getPackage(itemPkg + 1);\n }\n }\n );\n };\n\n if (locals.length) {\n getPackage(0);\n } else {\n callback(null, []);\n }\n })\n .catch((err) => {\n callback(err);\n });\n } else {\n debug('local stora instance is null');\n }\n }\n\n // notas, debo migrar _syncUplinksMetadata algo mas lindo\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 returns callback(err, result, uplink_errors)\n */\n public _syncUplinksMetadata(\n name: string,\n packageInfo: Package,\n options: ISyncUplinks,\n callback: Callback\n ): void {\n let found = true;\n const self = this;\n const upLinks: IProxy[] = [];\n const hasToLookIntoUplinks = _.isNil(options.uplinksLook) || options.uplinksLook;\n debug('is sync uplink enabled %o', hasToLookIntoUplinks);\n\n if (!packageInfo) {\n found = false;\n packageInfo = generatePackageTemplate(name);\n }\n\n for (const uplink in this.uplinks) {\n if (hasProxyTo(name, uplink, this.config.packages) && hasToLookIntoUplinks) {\n upLinks.push(this.uplinks[uplink]);\n }\n }\n\n debug('uplink list %o', upLinks.length);\n\n async.map(\n upLinks,\n (upLink, cb): void => {\n const _options = Object.assign({}, options);\n const upLinkMeta = packageInfo._uplinks[upLink.upname];\n\n if (validatioUtils.isObject(upLinkMeta)) {\n const fetched = upLinkMeta.fetched;\n\n if (fetched && Date.now() - fetched < upLink.maxage) {\n return cb();\n }\n\n _options.etag = upLinkMeta.etag;\n }\n\n upLink.getRemoteMetadata(name, _options, (err, upLinkResponse, eTag): void => {\n if (err && err.remoteStatus === 304) {\n upLinkMeta.fetched = Date.now();\n }\n\n if (err || !upLinkResponse) {\n return cb(null, [err || errorUtils.getInternalError('no data')]);\n }\n\n try {\n validatioUtils.validateMetadata(upLinkResponse, name);\n } catch (err: any) {\n self.logger.error(\n {\n sub: 'out',\n err: err,\n },\n 'package.json validating error @{!err?.message}\\n@{err.stack}'\n );\n return cb(null, [err]);\n }\n\n packageInfo._uplinks[upLink.upname] = {\n etag: eTag,\n fetched: Date.now(),\n };\n\n packageInfo.time = mergeUplinkTimeIntoLocal(packageInfo, upLinkResponse);\n\n updateVersionsHiddenUpLink(upLinkResponse.versions, upLink);\n\n try {\n pkgUtils.mergeVersions(packageInfo, upLinkResponse);\n } catch (err: any) {\n self.logger.error(\n {\n sub: 'out',\n err: err,\n },\n 'package.json parsing error @{!err?.message}\\n@{err.stack}'\n );\n return cb(null, [err]);\n }\n\n // if we got to this point, assume that the correct package exists\n // on the uplink\n found = true;\n cb();\n });\n },\n // @ts-ignore\n (err: Error, upLinksErrors: any): AsyncResultArrayCallback<unknown, Error> => {\n assert(!err && Array.isArray(upLinksErrors));\n\n // Check for connection timeout or reset errors with uplink(s)\n // (these should be handled differently from the package not being found)\n if (!found) {\n let uplinkTimeoutError;\n for (let i = 0; i < upLinksErrors.length; i++) {\n if (upLinksErrors[i]) {\n for (let j = 0; j < upLinksErrors[i].length; j++) {\n if (upLinksErrors[i][j]) {\n const code = upLinksErrors[i][j].code;\n if (code === 'ETIMEDOUT' || code === 'ESOCKETTIMEDOUT' || code === 'ECONNRESET') {\n uplinkTimeoutError = true;\n break;\n }\n }\n }\n }\n }\n\n if (uplinkTimeoutError) {\n return callback(errorUtils.getServiceUnavailable(), null, upLinksErrors);\n }\n return callback(errorUtils.getNotFound(API_ERROR.NO_PACKAGE), null, upLinksErrors);\n }\n\n if (upLinks.length === 0) {\n return callback(null, packageInfo);\n }\n\n self.localStorage.updateVersions(\n name,\n packageInfo,\n async (err, packageJsonLocal: Package): Promise<any> => {\n if (err) {\n return callback(err);\n }\n // Any error here will cause a 404, like an uplink error. This is likely\n // the right thing to do\n // as a broken filter is a security risk.\n const filterErrors: Error[] = [];\n // This MUST be done serially and not in parallel as they modify packageJsonLocal\n for (const filter of self.filters) {\n try {\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 packageJsonLocal = await filter.filter_metadata(packageJsonLocal);\n } catch (err: any) {\n filterErrors.push(err);\n }\n }\n callback(null, packageJsonLocal, _.concat(upLinksErrors, filterErrors));\n }\n );\n }\n );\n }\n\n /**\n * Set a hidden value for each version.\n * @param {Array} versions list of version\n * @param {String} upLink uplink name\n * @private\n */\n public _updateVersionsHiddenUpLink(versions: Versions, upLink: IProxy): void {\n for (const i in versions) {\n if (Object.prototype.hasOwnProperty.call(versions, i)) {\n const version = versions[i];\n\n // holds a \"hidden\" value to be used by the package storage.\n // $FlowFixMe\n version[Symbol.for('__verdaccio_uplink')] = upLink.upname;\n }\n }\n }\n}\n\nexport { Storage };\n"],"file":"storage.js"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@verdaccio/store",
3
- "version": "6.0.0-6-next.20",
3
+ "version": "6.0.0-6-next.21",
4
4
  "description": "loaders logic",
5
5
  "main": "./build/index.js",
6
6
  "types": "build/index.d.ts",
@@ -30,30 +30,27 @@
30
30
  "npm": ">=6"
31
31
  },
32
32
  "dependencies": {
33
- "@verdaccio/config": "6.0.0-6-next.12",
34
- "@verdaccio/core": "6.0.0-6-next.4",
35
- "@verdaccio/loaders": "6.0.0-6-next.11",
36
- "@verdaccio/local-storage": "11.0.0-6-next.11",
37
- "@verdaccio/logger": "6.0.0-6-next.10",
38
- "@verdaccio/proxy": "6.0.0-6-next.18",
33
+ "@verdaccio/config": "6.0.0-6-next.13",
34
+ "@verdaccio/core": "6.0.0-6-next.5",
35
+ "@verdaccio/loaders": "6.0.0-6-next.12",
36
+ "@verdaccio/local-storage": "11.0.0-6-next.12",
37
+ "@verdaccio/logger": "6.0.0-6-next.11",
38
+ "@verdaccio/proxy": "6.0.0-6-next.19",
39
39
  "@verdaccio/streams": "11.0.0-6-next.5",
40
- "@verdaccio/utils": "6.0.0-6-next.10",
41
- "@verdaccio/tarball": "11.0.0-6-next.11",
40
+ "@verdaccio/utils": "6.0.0-6-next.11",
41
+ "@verdaccio/tarball": "11.0.0-6-next.12",
42
42
  "JSONStream": "1.3.5",
43
- "abortcontroller-polyfill": "1.7.3",
44
43
  "async": "3.2.3",
45
44
  "debug": "4.3.3",
46
45
  "lodash": "4.17.21",
47
- "lunr": "2.3.9",
48
- "lunr-mutable-indexes": "2.3.2",
49
46
  "merge2": "1.4.1",
50
47
  "semver": "7.3.5"
51
48
  },
52
49
  "devDependencies": {
53
50
  "@types/node": "16.11.21",
54
- "@verdaccio/mock": "6.0.0-6-next.13",
55
- "@verdaccio/types": "11.0.0-6-next.10",
56
- "@verdaccio/helper": "1.0.0",
51
+ "@verdaccio/mock": "6.0.0-6-next.14",
52
+ "@verdaccio/types": "11.0.0-6-next.11",
53
+ "@verdaccio/test-helper": "1.1.0-6-next.0",
57
54
  "undici": "4.15.0",
58
55
  "nock": "13.2.2",
59
56
  "tmp-promise": "3.0.3",
@@ -958,10 +958,16 @@ class LocalStorage {
958
958
  reject(err);
959
959
  }
960
960
 
961
+ if (_.isEmpty(pkg?.versions)) {
962
+ return resolve({});
963
+ }
964
+
961
965
  const searchPackage = normalizeSearchPackage(pkg, searchItem);
962
966
  const searchPackageItem: searchUtils.SearchPackageItem = {
963
967
  package: searchPackage,
964
968
  score: searchItem.score,
969
+ verdaccioPkgCached: searchItem.verdaccioPkgCached,
970
+ verdaccioPrivate: searchItem.verdaccioPrivate,
965
971
  flags: searchItem?.flags,
966
972
  // FUTURE: find a better way to calculate the score
967
973
  searchScore: 1,
package/src/search.ts CHANGED
@@ -2,8 +2,6 @@
2
2
  // eslint-disable no-invalid-this
3
3
  import buildDebug from 'debug';
4
4
  import _ from 'lodash';
5
- import lunr from 'lunr';
6
- import lunrMutable from 'lunr-mutable-indexes';
7
5
  import { PassThrough, Transform, pipeline } from 'stream';
8
6
 
9
7
  import { VerdaccioError } from '@verdaccio/core';
@@ -20,8 +18,8 @@ export interface ISearchResult {
20
18
  ref: string;
21
19
  score: number;
22
20
  }
21
+ // @deprecated not longer used
23
22
  export interface IWebSearch {
24
- index: lunrMutable.index;
25
23
  storage: Storage;
26
24
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
27
25
  query(query: string): ISearchResult[];
@@ -33,7 +31,8 @@ export interface IWebSearch {
33
31
 
34
32
  export function removeDuplicates(results: searchUtils.SearchPackageItem[]) {
35
33
  const pkgNames: any[] = [];
36
- return results.filter((pkg) => {
34
+ const orderByResults = _.orderBy(results, ['verdaccioPrivate', 'asc']);
35
+ return orderByResults.filter((pkg) => {
37
36
  if (pkgNames.includes(pkg?.package?.name)) {
38
37
  return false;
39
38
  }
@@ -58,16 +57,18 @@ class TransFormResults extends Transform {
58
57
  */
59
58
  public _transform(chunk, _encoding, callback) {
60
59
  if (_.isArray(chunk)) {
60
+ // from remotes we should expect chunks as arrays
61
61
  (chunk as searchUtils.SearchItem[])
62
62
  .filter((pkgItem) => {
63
63
  debug(`streaming remote pkg name ${pkgItem?.package?.name}`);
64
64
  return true;
65
65
  })
66
66
  .forEach((pkgItem) => {
67
- this.push(pkgItem);
67
+ this.push({ ...pkgItem, verdaccioPkgCached: false, verdaccioPrivate: false });
68
68
  });
69
69
  return callback();
70
70
  } else {
71
+ // local we expect objects
71
72
  debug(`streaming local pkg name ${chunk?.package?.name}`);
72
73
  this.push(chunk);
73
74
  return callback();
@@ -105,30 +106,34 @@ export class SearchManager {
105
106
  if (!uplink) {
106
107
  // this should never tecnically happens
107
108
  logger.fatal({ uplinkId }, 'uplink @upLinkId not found');
108
- throw new Error(`uplink ${uplinkId} not found`);
109
109
  }
110
110
  return this.consumeSearchStream(uplinkId, uplink, options, streamPassThrough);
111
111
  });
112
112
 
113
113
  try {
114
114
  debug('search uplinks');
115
- await Promise.all([...searchUplinksStreams]);
115
+ // we only process those streams end successfully, if all fails
116
+ // we just include local storage
117
+ await Promise.allSettled([...searchUplinksStreams]);
116
118
  debug('search uplinks done');
117
- } catch (err) {
118
- logger.error({ err }, ' error on uplinks search @{err}');
119
+ } catch (err: any) {
120
+ logger.error({ err: err?.message }, ' error on uplinks search @{err}');
119
121
  streamPassThrough.emit('error', err);
120
- throw err;
121
122
  }
122
123
  debug('search local');
123
- await this.localStorage.search(streamPassThrough, options.query as searchUtils.SearchQuery);
124
-
124
+ try {
125
+ await this.localStorage.search(streamPassThrough, options.query as searchUtils.SearchQuery);
126
+ } catch (err: any) {
127
+ logger.error({ err: err?.message }, ' error on local search @{err}');
128
+ streamPassThrough.emit('error', err);
129
+ }
125
130
  const data: searchUtils.SearchPackageItem[] = [];
126
131
  const outPutStream = new PassThrough({ objectMode: true });
127
132
  pipeline(streamPassThrough, transformResults, outPutStream, (err) => {
128
133
  if (err) {
129
134
  throw errorUtils.getInternalError(err ? err.message : 'unknown error');
130
135
  } else {
131
- debug('Pipeline succeeded.');
136
+ debug('pipeline succeeded');
132
137
  }
133
138
  });
134
139
 
@@ -138,9 +143,9 @@ export class SearchManager {
138
143
 
139
144
  return new Promise((resolve) => {
140
145
  outPutStream.on('finish', async () => {
141
- const checkAccessPromises: searchUtils.SearchPackageItem[] = removeDuplicates(data);
142
- debug('stream finish event %s', checkAccessPromises.length);
143
- return resolve(checkAccessPromises);
146
+ const searchFinalResults: searchUtils.SearchPackageItem[] = removeDuplicates(data);
147
+ debug('search stream total results: %o', searchFinalResults.length);
148
+ return resolve(searchFinalResults);
144
149
  });
145
150
  debug('search done');
146
151
  });
@@ -168,111 +173,3 @@ export class SearchManager {
168
173
  });
169
174
  }
170
175
  }
171
-
172
- /**
173
- * Handle the search Indexer.
174
- */
175
- class Search implements IWebSearch {
176
- public readonly index: lunrMutable.index;
177
- // @ts-ignore
178
- public storage: Storage;
179
-
180
- /**
181
- * Constructor.
182
- */
183
- public constructor() {
184
- this.index = lunrMutable(function (): void {
185
- // FIXME: there is no types for this library
186
- /* eslint no-invalid-this:off */
187
- // @ts-ignore
188
- this.field('name', { boost: 10 });
189
- // @ts-ignore
190
- this.field('description', { boost: 4 });
191
- // @ts-ignore
192
- this.field('author', { boost: 6 });
193
- // @ts-ignore
194
- this.field('keywords', { boost: 7 });
195
- // @ts-ignore
196
- this.field('version');
197
- // @ts-ignore
198
- this.field('readme');
199
- });
200
-
201
- this.index.builder.pipeline.remove(lunr.stemmer);
202
- }
203
-
204
- public init() {
205
- return Promise.resolve();
206
- }
207
-
208
- /**
209
- * Performs a query to the indexer.
210
- * If the keyword is a * it returns all local elements
211
- * otherwise performs a search
212
- * @param {*} q the keyword
213
- * @return {Array} list of results.
214
- */
215
- public query(query: string): ISearchResult[] {
216
- const localStorage = this.storage.localStorage as LocalStorage;
217
-
218
- return query === '*'
219
- ? (localStorage.storagePlugin as any).get((items): any => {
220
- items.map(function (pkg): any {
221
- return { ref: pkg, score: 1 };
222
- });
223
- })
224
- : this.index.search(`*${query}*`);
225
- }
226
-
227
- /**
228
- * Add a new element to index
229
- * @param {*} pkg the package
230
- */
231
- public add(pkg: Version): void {
232
- this.index.add({
233
- id: pkg.name,
234
- name: pkg.name,
235
- description: pkg.description,
236
- version: `v${pkg.version}`,
237
- keywords: pkg.keywords,
238
- author: pkg._npmUser ? pkg._npmUser.name : '???',
239
- });
240
- }
241
-
242
- /**
243
- * Remove an element from the index.
244
- * @param {*} name the id element
245
- */
246
- public remove(name: string): void {
247
- this.index.remove({ id: name });
248
- }
249
-
250
- /**
251
- * Force a re-index.
252
- */
253
- public reindex(): void {
254
- this.storage.getLocalDatabase((error, packages): void => {
255
- if (error) {
256
- // that function shouldn't produce any
257
- throw error;
258
- }
259
- let i = packages.length;
260
- while (i--) {
261
- this.add(packages[i]);
262
- }
263
- });
264
- }
265
-
266
- /**
267
- * Set up the {Storage}
268
- * @param {*} storage An storage reference.
269
- */
270
- public configureStorage(storage: Storage): void {
271
- this.storage = storage;
272
- this.reindex();
273
- }
274
- }
275
-
276
- const SearchInstance = new Search();
277
-
278
- export { SearchInstance };
@@ -6,9 +6,7 @@ import { API_ERROR, DIST_TAGS, HTTP_STATUS, USERS } from '@verdaccio/core';
6
6
  import { AttachMents, Package, StringValue, Version, Versions } from '@verdaccio/types';
7
7
  import { generateRandomHexString, isNil, isObject, normalizeDistTags } from '@verdaccio/utils';
8
8
 
9
- // import { Users } from '.';
10
9
  import { LocalStorage } from './local-storage';
11
- import { SearchInstance } from './search';
12
10
 
13
11
  export const STORAGE = {
14
12
  PACKAGE_FILE_NAME: 'package.json',
@@ -149,11 +147,9 @@ export function publishPackage(
149
147
  localStorage: LocalStorage
150
148
  ): Promise<any> {
151
149
  return new Promise<void>((resolve, reject): void => {
152
- localStorage.addPackage(name, metadata, (err, latest): void => {
150
+ localStorage.addPackage(name, metadata, (err): void => {
153
151
  if (!_.isNull(err)) {
154
152
  return reject(err);
155
- } else if (!_.isUndefined(latest)) {
156
- SearchInstance.add(latest);
157
153
  }
158
154
  return resolve();
159
155
  });
package/src/storage.ts CHANGED
@@ -2,7 +2,6 @@ import assert from 'assert';
2
2
  import async, { AsyncResultArrayCallback } from 'async';
3
3
  import buildDebug from 'debug';
4
4
  import _ from 'lodash';
5
- import semver from 'semver';
6
5
 
7
6
  import { hasProxyTo } from '@verdaccio/config';
8
7
  import {
@@ -41,7 +40,7 @@ import {
41
40
  import { getVersion, normalizeDistTags } from '@verdaccio/utils';
42
41
 
43
42
  import { LocalStorage } from './local-storage';
44
- import { SearchInstance, SearchManager } from './search';
43
+ import { SearchManager } from './search';
45
44
  // import { isPublishablePackage, validateInputs } from './star-utils';
46
45
  import {
47
46
  checkPackageLocal,
@@ -55,10 +54,6 @@ import { IGetPackageOptions, IGetPackageOptionsNext, IPluginFilters, ISyncUplink
55
54
  // import { StarBody, Users } from './type';
56
55
  import { setupUpLinks, updateVersionsHiddenUpLink } from './uplink-util';
57
56
 
58
- if (semver.lte(process.version, 'v15.0.0')) {
59
- global.AbortController = require('abortcontroller-polyfill/dist/cjs-ponyfill').AbortController;
60
- }
61
-
62
57
  const debug = buildDebug('verdaccio:storage');
63
58
  class Storage {
64
59
  public localStorage: LocalStorage;
@@ -235,8 +230,6 @@ class Storage {
235
230
  public async removePackage(name: string): Promise<void> {
236
231
  debug('remove packagefor package %o', name);
237
232
  await this.localStorage.removePackage(name);
238
- // update the indexer
239
- SearchInstance.remove(name);
240
233
  }
241
234
 
242
235
  /**
@@ -579,7 +572,7 @@ class Storage {
579
572
  _attachments: {},
580
573
  });
581
574
 
582
- debug('no. sync uplinks errors %o', uplinkErrors?.length);
575
+ debug('no. sync uplinks errors %o for %s', uplinkErrors?.length, name);
583
576
  resolve([normalizedPkg, uplinkErrors]);
584
577
  }
585
578
  );