@verdaccio/store 6.0.0-6-next.18 → 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/local-storage.ts"],"names":["debug","normalizeSearchPackage","pkg","searchItem","latest","pkgUtils","getLatest","version","versions","result","name","scope","description","keywords","date","time","author","publisher","maintainers","links","npm","homepage","repository","bugs","package","scoped","PROTO_NAME","LocalStorage","constructor","config","logger","child","sub","storagePlugin","init","_loadStorage","warn","addPackage","callback","storage","_getLocalStorage","_","isNil","errorUtils","getNotFound","createPackage","err","isNull","code","STORAGE","FILE_EXIST_ERROR","HTTP_STATUS","CONFLICT","message","getConflict","removePackage","Promise","resolve","reject","readPackage","data","NO_SUCH_FILE_ERROR","NOT_FOUND","remove","attachments","Object","keys","_attachments","length","attachment","deletePackage","PACKAGE_FILE_NAME","error","getBadData","updateVersions","packageInfo","_readCreatePackage","packageLocalJson","change","readme","versionId","contributors","dist","tarball","urlObject","UrlNode","parse","filename","pathname","replace","_distfiles","hash","url","sha","shasum","upLink","Symbol","for","_updateUplinkToRemoteProtocol","tag","DIST_TAGS","up","_uplinks","prototype","hasOwnProperty","call","need_change","etag","fetched","isEqual","_writePackage","addVersion","metadata","_updatePackage","cb","hasVersion","validatioUtils","isObject","isString","errorMessage","getBadRequest","currentDate","Date","toISOString","created","add","mergeTags","pkgName","tags","API_ERROR","VERSION_NOT_EXIST","changePackage","incomingPkg","revision","localData","incomingVersion","info","file","incomingDeprecated","deprecated","modified","USERS","removeTarball","validateName","then","catch","getInternalError","addTarball","shaOneHash","uploadStream","UploadTarball","_transform","abort","done","args","update","appliedData","apply","process","nextTick","emit","getForbidden","writeStream","writeTarball","on","getPackageMetadata","_err","updater","digest","pipe","getTarball","_createFailureStreamResponse","_streamSuccessReadTarBall","stream","ReadTarball","readTarballStream","readTarball","e404","content","getPackageMetadataNext","_readPackageNext","_readPackage","search","searchStream","query","t","text","q","quality","p","popularity","m","maintenance","s","size","getMetadata","searchPackage","searchPackageItem","score","flags","searchScore","end","items","item","write","getPackageStorage","_internalError","readPackageNext","_createNewPackage","updateHandler","updatePackage","bind","normalizePackage","json","savePackage","_setDefaultRevision","_rev","DEFAULT_REVISION","_debug","upLinkKey","tarballUrl","uplinkUrl","uplinks","host","protocol","registry","format","getSecret","secretKey","setSecret","checkSecretKey","Storage","_loadStorePlugin","LocalDatabase","plugin_params","plugins","store","plugin","head","saveToken","token","isFunction","getCode","SERVICE_UNAVAILABLE","SUPPORT_ERRORS","PLUGIN_MISSING_INTERFACE","deleteToken","user","tokenKey","readTokens","filter"],"mappings":"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","sourcesContent":["import assert from 'assert';\nimport buildDebug from 'debug';\nimport _ from 'lodash';\nimport { PassThrough } from 'stream';\nimport UrlNode from 'url';\n\nimport { errorUtils, pkgUtils, pluginUtils, searchUtils, validatioUtils } from '@verdaccio/core';\nimport { API_ERROR, DIST_TAGS, HTTP_STATUS, SUPPORT_ERRORS, USERS } from '@verdaccio/core';\nimport { VerdaccioError } from '@verdaccio/core';\nimport { loadPlugin } from '@verdaccio/loaders';\nimport LocalDatabase from '@verdaccio/local-storage';\nimport { ReadTarball, UploadTarball } from '@verdaccio/streams';\nimport {\n Author,\n Callback,\n CallbackAction,\n Config,\n DistFile,\n IPackageStorage,\n IReadTarball,\n IUploadTarball,\n Logger,\n MergeTags,\n Package,\n StorageUpdateCallback,\n StringValue,\n Token,\n TokenFilter,\n Version,\n} from '@verdaccio/types';\nimport { getLatestVersion, isObject } from '@verdaccio/utils';\nimport { createTarballHash, normalizeContributors } from '@verdaccio/utils';\n\nimport {\n STORAGE,\n cleanUpReadme,\n generatePackageTemplate,\n generateRevision,\n getLatestReadme,\n normalizePackage,\n tagVersion,\n} from './storage-utils';\n\nconst debug = buildDebug('verdaccio:storage:local');\n\nexport type IPluginStorage = pluginUtils.IPluginStorage<Config>;\n\nexport function normalizeSearchPackage(\n pkg: Package,\n searchItem: searchUtils.SearchItem\n): searchUtils.SearchPackageBody {\n const latest = pkgUtils.getLatest(pkg);\n const version: Version = pkg.versions[latest];\n const result: searchUtils.SearchPackageBody = {\n name: version.name,\n scope: '',\n description: version.description,\n version: latest,\n keywords: version.keywords,\n date: pkg.time[latest],\n // FIXME: type\n author: version.author as any,\n // FIXME: not possible fill this out from a private package\n publisher: {},\n // FIXME: type\n maintainers: version.maintainers as any,\n links: {\n npm: '',\n homepage: version.homepage,\n repository: version.repository,\n bugs: version.bugs,\n },\n };\n\n if (typeof searchItem.package.scoped === 'string') {\n result.scope = searchItem.package.scoped;\n }\n\n return result;\n}\n\nexport const PROTO_NAME = '__proto__';\n\n/**\n * Implements Storage interface (same for storage.js, local-storage.js, up-storage.js).\n */\nclass LocalStorage {\n public config: Config;\n public storagePlugin: IPluginStorage;\n public logger: Logger;\n\n public constructor(config: Config, logger: Logger) {\n debug('local storage created');\n this.logger = logger.child({ sub: 'fs' });\n this.config = config;\n // @ts-expect-error\n this.storagePlugin = null;\n }\n\n public async init() {\n if (this.storagePlugin === null) {\n this.storagePlugin = this._loadStorage(this.config, this.logger);\n debug('storage plugin init');\n await this.storagePlugin.init();\n debug('storage plugin initialized');\n } else {\n this.logger.warn('storage plugin has been already initialized');\n }\n return;\n }\n\n public addPackage(name: string, pkg: Package, callback: Callback): void {\n debug(`creating a package for`, name);\n const storage: any = this._getLocalStorage(name);\n\n if (_.isNil(storage)) {\n debug(`storage is missing for %o package cannot be added`, name);\n return callback(errorUtils.getNotFound('this package cannot be added'));\n }\n\n storage.createPackage(name, generatePackageTemplate(name), (err) => {\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 return callback(errorUtils.getConflict());\n }\n\n const latest = getLatestVersion(pkg);\n if (_.isNil(latest) === false && pkg.versions[latest]) {\n debug('latest version found %o for %o', latest, name);\n return callback(null, pkg.versions[latest]);\n }\n\n debug('no latest version found for %o', name);\n return callback();\n });\n }\n\n /**\n * Remove package with all it contents.\n */\n public async removePackage(name: string): Promise<void> {\n debug('remove package %s', name);\n const storage: any = this._getLocalStorage(name);\n\n if (_.isNil(storage)) {\n throw errorUtils.getNotFound();\n }\n\n return new Promise((resolve, reject) => {\n storage.readPackage(name, async (err, data: Package): Promise<void> => {\n if (_.isNil(err) === false) {\n if (err.code === STORAGE.NO_SUCH_FILE_ERROR || err.code === HTTP_STATUS.NOT_FOUND) {\n debug(`error on not found %o with error %o`, name, err.message);\n return reject(errorUtils.getNotFound());\n }\n return reject(err);\n }\n\n data = normalizePackage(data);\n\n try {\n await this.storagePlugin.remove(name);\n // remove each attachment\n const attachments = Object.keys(data._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 }\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 resolve();\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\n /**\n * Synchronize remote package info with the local one\n * @param {*} name\n * @param {*} packageInfo\n * @param {*} callback\n */\n public updateVersions(name: string, packageInfo: Package, callback: Callback): void {\n debug(`updating versions for package %o`, name);\n this._readCreatePackage(name, (err, packageLocalJson): void => {\n if (err) {\n return callback(err);\n }\n\n let change = false;\n // updating readme\n packageLocalJson.readme = getLatestReadme(packageInfo);\n if (packageInfo.readme !== packageLocalJson.readme) {\n change = true;\n }\n\n debug('update versions');\n for (const versionId in packageInfo.versions) {\n if (_.isNil(packageLocalJson.versions[versionId])) {\n let version = packageInfo.versions[versionId];\n\n // we don't keep readme for package versions,\n // only one readme per package\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 packageLocalJson.versions[versionId] = version;\n\n if (version?.dist?.tarball) {\n const urlObject: any = UrlNode.parse(version.dist.tarball);\n const filename = urlObject.pathname.replace(/^.*\\//, '');\n\n // we do NOT overwrite any existing records\n if (_.isNil(packageLocalJson._distfiles[filename])) {\n const hash: DistFile = (packageLocalJson._distfiles[filename] = {\n url: version.dist.tarball,\n sha: version.dist.shasum,\n });\n const upLink: string = version[Symbol.for('__verdaccio_uplink')];\n\n if (_.isNil(upLink) === false) {\n this._updateUplinkToRemoteProtocol(hash, upLink);\n }\n }\n }\n }\n }\n\n debug('update dist-tags');\n for (const tag in packageInfo[DIST_TAGS]) {\n if (\n !packageLocalJson[DIST_TAGS][tag] ||\n packageLocalJson[DIST_TAGS][tag] !== packageInfo[DIST_TAGS][tag]\n ) {\n change = true;\n packageLocalJson[DIST_TAGS][tag] = packageInfo[DIST_TAGS][tag];\n }\n }\n\n for (const up in packageInfo._uplinks) {\n if (Object.prototype.hasOwnProperty.call(packageInfo._uplinks, up)) {\n const need_change =\n !isObject(packageLocalJson._uplinks[up]) ||\n packageInfo._uplinks[up].etag !== packageLocalJson._uplinks[up].etag ||\n packageInfo._uplinks[up].fetched !== packageLocalJson._uplinks[up].fetched;\n\n if (need_change) {\n change = true;\n packageLocalJson._uplinks[up] = packageInfo._uplinks[up];\n }\n }\n }\n\n debug('update time');\n if ('time' in packageInfo && !_.isEqual(packageLocalJson.time, packageInfo.time)) {\n packageLocalJson.time = packageInfo.time;\n change = true;\n }\n\n if (change) {\n debug('updating package info %o', name);\n this._writePackage(name, packageLocalJson, function (err): void {\n callback(err, packageLocalJson);\n });\n } else {\n callback(null, packageLocalJson);\n }\n });\n }\n\n /**\n * Add a new version to a previous local package.\n * @param {*} name\n * @param {*} version\n * @param {*} metadata\n * @param {*} tag\n * @param {*} callback\n */\n public addVersion(\n name: string,\n version: string,\n metadata: Version,\n tag: StringValue,\n callback: Callback\n ): void {\n debug(`add version %s package for %s`, version, name);\n this._updatePackage(\n name,\n async (data, cb: Callback): Promise<void> => {\n debug('%s package is being updated', name);\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 const hasVersion = data.versions[version] != null;\n if (hasVersion) {\n debug('%s version %s already exists', name, version);\n return cb(errorUtils.getConflict());\n }\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\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 return cb(errorUtils.getBadRequest(errorMessage));\n }\n }\n\n const currentDate = new Date().toISOString();\n\n // some old storage do not have this field #740\n if (_.isNil(data.time)) {\n data.time = {};\n }\n\n data.time['modified'] = currentDate;\n\n if ('created' in data.time === false) {\n data.time.created = currentDate;\n }\n\n data.time[version] = currentDate;\n data._attachments[tarball].version = version;\n }\n }\n\n data.versions[version] = metadata;\n tagVersion(data, version, tag);\n\n try {\n debug('%s` add on database', name);\n await this.storagePlugin.add(name);\n cb();\n } catch (err: any) {\n cb(errorUtils.getBadData(err.message));\n }\n },\n callback\n );\n }\n\n /**\n * Merge a new list of tags for a local packages with the existing one.\n * @param {*} pkgName\n * @param {*} tags\n * @param {*} callback\n */\n public mergeTags(pkgName: string, tags: MergeTags, callback: Callback): void {\n debug(`merge tags for`, pkgName);\n this._updatePackage(\n pkgName,\n (data, cb): void => {\n /* eslint guard-for-in: 0 */\n for (const tag in tags) {\n // this handle dist-tag rm command\n if (_.isNull(tags[tag])) {\n delete data[DIST_TAGS][tag];\n continue;\n }\n\n if (_.isNil(data.versions[tags[tag]])) {\n return cb(errorUtils.getNotFound(API_ERROR.VERSION_NOT_EXIST));\n }\n const version: string = tags[tag];\n tagVersion(data, version, tag);\n }\n cb(null);\n },\n callback\n );\n }\n\n /**\n * Update the package metadata, tags and attachments (tarballs).\n * Note: Currently supports unpublishing and deprecation.\n * @param {*} name\n * @param {*} incomingPkg\n * @param {*} revision\n * @param {*} callback\n * @return {Function}\n */\n public changePackage(\n name: string,\n incomingPkg: Package,\n revision: string | void,\n callback: Callback\n ): void {\n debug(`change package tags for %o revision %s`, name, revision);\n if (\n !validatioUtils.isObject(incomingPkg.versions) ||\n !validatioUtils.isObject(incomingPkg[DIST_TAGS])\n ) {\n debug(`change package bad data for %o`, name);\n return callback(errorUtils.getBadData());\n }\n\n debug(`change package udapting package for %o`, name);\n this._updatePackage(\n name,\n (localData: Package, cb: CallbackAction): void => {\n for (const version in localData.versions) {\n const incomingVersion = incomingPkg.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(\n { name: name, version: version },\n 'deprecating @{name}@@{version}'\n );\n localData.versions[version].deprecated = incomingDeprecated;\n }\n localData.time!.modified = new Date().toISOString();\n }\n }\n }\n\n localData[USERS] = incomingPkg[USERS];\n localData[DIST_TAGS] = incomingPkg[DIST_TAGS];\n cb(null);\n },\n function (err): void {\n if (err) {\n return callback(err);\n }\n callback();\n }\n );\n }\n /**\n * Remove a tarball.\n * @param {*} name\n * @param {*} filename\n * @param {*} revision\n * @param {*} callback\n */\n public removeTarball(\n name: string,\n filename: string,\n revision: string,\n callback: CallbackAction\n ): void {\n debug('remove tarball %s for %s', filename, name);\n assert(validatioUtils.validateName(filename));\n this._updatePackage(\n name,\n (data, cb): void => {\n if (data._attachments[filename]) {\n // TODO: avoid using delete\n delete data._attachments[filename];\n cb(null);\n } else {\n cb(errorUtils.getNotFound('no such file available'));\n }\n },\n (err: VerdaccioError) => {\n if (err) {\n this.logger.error({ err }, 'remove tarball error @{err.message}');\n return callback(err);\n }\n const storage = this._getLocalStorage(name);\n\n if (storage) {\n debug('removing %s from storage', filename);\n storage\n .deletePackage(filename)\n .then((): void => {\n debug('package %s removed', filename);\n return callback(null);\n })\n .catch((err) => {\n this.logger.error({ err }, 'error removing %s from storage');\n return callback(null);\n });\n } else {\n callback(errorUtils.getInternalError());\n }\n }\n );\n }\n\n /**\n * Add a tarball.\n * @param {String} name\n * @param {String} filename\n * @return {Stream}\n */\n public addTarball(name: string, filename: string): IUploadTarball {\n debug(`add a tarball for %o`, name);\n assert(validatioUtils.validateName(filename));\n\n let length = 0;\n const shaOneHash = createTarballHash();\n const uploadStream: IUploadTarball = new UploadTarball({});\n const _transform = uploadStream._transform;\n const storage = this._getLocalStorage(name);\n\n uploadStream.abort = function (): void {};\n uploadStream.done = function (): void {};\n\n uploadStream._transform = function (data, ...args): void {\n shaOneHash.update(data);\n // measure the length for validation reasons\n length += data.length;\n const appliedData = [data, ...args];\n // FIXME: not sure about this approach, tsc complains\n // @ts-ignore\n _transform.apply(uploadStream, appliedData);\n };\n\n if (name === 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\");\n });\n return uploadStream;\n }\n\n const writeStream: IUploadTarball = storage.writeTarball(filename);\n\n writeStream.on('error', (err) => {\n // @ts-ignore\n if (err.code === STORAGE.FILE_EXIST_ERROR || err.code === HTTP_STATUS.CONFLICT) {\n uploadStream.emit('error', errorUtils.getConflict());\n uploadStream.abort();\n // @ts-ignore\n } else if (err.code === STORAGE.NO_SUCH_FILE_ERROR || err.code === HTTP_STATUS.NOT_FOUND) {\n // check if package exists to throw an appropriate message\n this.getPackageMetadata(name, function (_err: VerdaccioError): void {\n if (_err) {\n uploadStream.emit('error', _err);\n } else {\n uploadStream.emit('error', err);\n }\n });\n } else {\n uploadStream.emit('error', err);\n }\n });\n\n writeStream.on('open', function (): void {\n // re-emitting open because it's handled in storage.js\n uploadStream.emit('open');\n });\n\n writeStream.on('success', (): void => {\n this._updatePackage(\n name,\n function updater(data, cb): void {\n // FUTURE: move this to tarballUtils\n data._attachments[filename] = {\n shasum: shaOneHash.digest('hex'),\n };\n cb(null);\n },\n function (err): void {\n if (err) {\n // FIXME: if the update package fails, remove tarball to avoid left\n // orphan tarballs\n uploadStream.emit('error', err);\n } else {\n uploadStream.emit('success');\n }\n }\n );\n });\n\n uploadStream.abort = function (): void {\n writeStream.abort();\n };\n\n uploadStream.done = function (): void {\n if (!length) {\n uploadStream.emit('error', errorUtils.getBadData('refusing to accept zero-length file'));\n writeStream.abort();\n } else {\n writeStream.done();\n }\n };\n\n uploadStream.pipe(writeStream);\n\n return uploadStream;\n }\n\n /**\n * Get a tarball.\n * @param {*} name\n * @param {*} filename\n * @return {ReadTarball}\n */\n public getTarball(name: string, filename: string): IReadTarball {\n assert(validatioUtils.validateName(filename));\n\n const storage: IPackageStorage = this._getLocalStorage(name);\n\n if (_.isNil(storage)) {\n return this._createFailureStreamResponse();\n }\n\n return this._streamSuccessReadTarBall(storage, filename);\n }\n\n /**\n * Return a stream that emits a read failure.\n * @private\n * @return {ReadTarball}\n */\n private _createFailureStreamResponse(): IReadTarball {\n const stream: IReadTarball = new ReadTarball({});\n\n process.nextTick((): void => {\n stream.emit('error', errorUtils.getNotFound('no such file available'));\n });\n return stream;\n }\n\n /**\n * Return a stream that emits the tarball data\n * @param {Object} storage\n * @param {String} filename\n * @private\n * @return {ReadTarball}\n */\n private _streamSuccessReadTarBall(storage: any, filename: string): IReadTarball {\n const stream: IReadTarball = new ReadTarball({});\n const readTarballStream = storage.readTarball(filename);\n const e404 = errorUtils.getNotFound;\n\n stream.abort = function (): void {\n if (_.isNil(readTarballStream) === false) {\n readTarballStream.abort();\n }\n };\n\n readTarballStream.on('error', function (err) {\n // @ts-ignore\n if (err.code === STORAGE.NO_SUCH_FILE_ERROR || err.code === HTTP_STATUS.NOT_FOUND) {\n stream.emit('error', e404('no such file available'));\n } else {\n stream.emit('error', err);\n }\n });\n\n readTarballStream.on('content-length', function (content): void {\n stream.emit('content-length', content);\n });\n\n readTarballStream.on('open', function (): void {\n // re-emitting open because it's handled in storage.js\n stream.emit('open');\n readTarballStream.pipe(stream);\n });\n\n return stream;\n }\n\n public async getPackageMetadataNext(name: string): Promise<Package> {\n const storage: IPackageStorage = this._getLocalStorage(name);\n debug('get package metadata for %o', name);\n if (typeof storage === 'undefined') {\n // TODO: this might be a better an error to throw\n // if storage is not there cannot be 404.\n throw errorUtils.getNotFound();\n }\n\n return await this._readPackageNext(name, storage);\n }\n\n /**\n * Retrieve a package by name.\n * @param {*} name\n * @param {*} callback\n * @return {Function}\n * @deprecated\n */\n public getPackageMetadata(name: string, callback: Callback = (): void => {}): void {\n const storage: IPackageStorage = this._getLocalStorage(name);\n debug('get package metadata for %o', name);\n if (typeof storage === 'undefined') {\n return callback(errorUtils.getNotFound());\n }\n\n this._readPackage(name, storage, callback);\n }\n\n public async search(searchStream: PassThrough, query: searchUtils.SearchQuery): 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 const getMetadata = (searchItem: searchUtils.SearchItem) => {\n return new Promise((resolve, reject) => {\n this.getPackageMetadata(\n searchItem?.package?.name,\n (err: VerdaccioError, pkg: Package): void => {\n if (err) {\n this.logger.error(\n { err, pkgName: searchItem?.package?.name },\n 'error on load package @{pkgName} metaadata @{err.message}'\n );\n reject(err);\n }\n\n const searchPackage = normalizeSearchPackage(pkg, searchItem);\n const searchPackageItem: searchUtils.SearchPackageItem = {\n package: searchPackage,\n score: searchItem.score,\n flags: searchItem?.flags,\n // FUTURE: find a better way to calculate the score\n searchScore: 1,\n };\n debug('push to stream %o', searchItem?.package?.name);\n resolve(searchPackageItem);\n }\n );\n });\n };\n\n if (typeof this.storagePlugin.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.storagePlugin.search(query);\n try {\n for (const item of items) {\n const metadata = await getMetadata(item);\n searchStream.write(metadata);\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 /**\n * Retrieve a wrapper that provide access to the package location.\n * @param {Object} pkgName package name.\n * @return {Object}\n */\n private _getLocalStorage(pkgName: string): IPackageStorage {\n debug('get local storage for %o', pkgName);\n return this.storagePlugin.getPackageStorage(pkgName);\n }\n\n /**\n * Read a json file from storage.\n * @param {Object} storage\n * @param {Function} callback\n * @deprecated\n */\n private _readPackage(name: string, storage: any, callback: Callback): void {\n storage.readPackage(name, (err, result): void => {\n if (err) {\n if (err.code === STORAGE.NO_SUCH_FILE_ERROR || err.code === HTTP_STATUS.NOT_FOUND) {\n debug('package %s not found', name);\n return callback(errorUtils.getNotFound());\n }\n return callback(this._internalError(err, STORAGE.PACKAGE_FILE_NAME, 'error reading'));\n }\n\n callback(err, normalizePackage(result));\n });\n }\n\n private async _readPackageNext(name: string, storage: any): Promise<Package> {\n try {\n const result: Package = await storage.readPackageNext(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 * Retrieve either a previous created local package or a boilerplate.\n * @param {*} pkgName\n * @param {*} callback\n * @return {Function}\n */\n private _readCreatePackage(pkgName: string, callback: Callback): void {\n const storage: any = this._getLocalStorage(pkgName);\n if (_.isNil(storage)) {\n this._createNewPackage(pkgName, callback);\n return;\n }\n\n storage.readPackage(pkgName, (err, data): void => {\n // TODO: race condition\n if (_.isNil(err) === false) {\n if (err.code === STORAGE.NO_SUCH_FILE_ERROR || err.code === HTTP_STATUS.NOT_FOUND) {\n data = generatePackageTemplate(pkgName);\n } else {\n return callback(this._internalError(err, STORAGE.PACKAGE_FILE_NAME, 'error reading'));\n }\n }\n\n callback(null, normalizePackage(data));\n });\n }\n\n private _createNewPackage(name: string, callback: Callback): Callback {\n return callback(null, normalizePackage(generatePackageTemplate(name)));\n }\n\n /**\n * Handle internal error\n * @param {*} err\n * @param {*} file\n * @param {*} message\n * @return {Object} Error instance\n */\n private _internalError(err: string, file: string, message: string): VerdaccioError {\n this.logger.error({ err: err, file: file }, `${message} @{file}: @{!err.message}`);\n\n return errorUtils.getInternalError();\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 _updatePackage(\n name: string,\n updateHandler: StorageUpdateCallback,\n callback: Callback\n ): void {\n const storage: IPackageStorage = this._getLocalStorage(name);\n\n if (!storage) {\n return callback(errorUtils.getNotFound());\n }\n\n storage.updatePackage(\n name,\n updateHandler,\n this._writePackage.bind(this),\n normalizePackage,\n callback\n );\n }\n\n /**\n * Update the revision (_rev) string for a package.\n * @param {*} name\n * @param {*} json\n * @param {*} callback\n * @return {Function}\n */\n private _writePackage(name: string, json: Package, callback: Callback): void {\n const storage: any = this._getLocalStorage(name);\n if (_.isNil(storage)) {\n return callback();\n }\n storage.savePackage(name, this._setDefaultRevision(json), callback);\n }\n\n private _setDefaultRevision(json: Package): Package {\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 _deleteAttachments(storage: any, attachments: string[], callback: Callback): void {\n // debug('deleting %o attachments total %o', attachments?.length);\n // const unlinkNext = function (cb): void {\n // if (_.isEmpty(attachments)) {\n // return cb();\n // }\n\n // const attachment = attachments.shift();\n // storage.deletePackage(attachment, function (): void {\n // unlinkNext(cb);\n // });\n // };\n\n // unlinkNext(function (): void {\n // // try to unlink the directory, but ignore errors because it can fail\n // storage.removePackage(function (err): void {\n // callback(err);\n // });\n // });\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 */\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 //\n // see https://github.com/rlidwka/sinopia/issues/166\n const tarballUrl: any = UrlNode.parse(hash.url);\n const uplinkUrl: any = UrlNode.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 = UrlNode.format(tarballUrl);\n }\n }\n\n public async getSecret(config: Config): Promise<void> {\n const secretKey = await this.storagePlugin.getSecret();\n\n return this.storagePlugin.setSecret(config.checkSecretKey(secretKey));\n }\n\n private _loadStorage(config: Config, logger: Logger): IPluginStorage {\n const Storage = this._loadStorePlugin();\n\n if (_.isNil(Storage)) {\n assert(this.config.storage, 'CONFIG: storage path not defined');\n return new LocalDatabase(this.config, logger);\n }\n return Storage as IPluginStorage;\n }\n\n private _loadStorePlugin(): IPluginStorage | void {\n const plugin_params = {\n config: this.config,\n logger: this.logger,\n };\n\n const plugins: IPluginStorage[] = loadPlugin<IPluginStorage>(\n this.config,\n this.config.store,\n plugin_params,\n (plugin): IPluginStorage => {\n return plugin.getPackageStorage;\n }\n );\n\n return _.head(plugins);\n }\n\n public saveToken(token: Token): Promise<any> {\n if (_.isFunction(this.storagePlugin.saveToken) === false) {\n return Promise.reject(\n errorUtils.getCode(HTTP_STATUS.SERVICE_UNAVAILABLE, SUPPORT_ERRORS.PLUGIN_MISSING_INTERFACE)\n );\n }\n\n return this.storagePlugin.saveToken(token);\n }\n\n public deleteToken(user: string, tokenKey: string): Promise<any> {\n if (_.isFunction(this.storagePlugin.deleteToken) === false) {\n return Promise.reject(\n errorUtils.getCode(HTTP_STATUS.SERVICE_UNAVAILABLE, SUPPORT_ERRORS.PLUGIN_MISSING_INTERFACE)\n );\n }\n\n return this.storagePlugin.deleteToken(user, tokenKey);\n }\n\n public readTokens(filter: TokenFilter): Promise<Token[]> {\n if (_.isFunction(this.storagePlugin.readTokens) === false) {\n return Promise.reject(\n errorUtils.getCode(HTTP_STATUS.SERVICE_UNAVAILABLE, SUPPORT_ERRORS.PLUGIN_MISSING_INTERFACE)\n );\n }\n\n return this.storagePlugin.readTokens(filter);\n }\n}\n\nexport { LocalStorage };\n"],"file":"local-storage.js"}
1
+ {"version":3,"sources":["../src/local-storage.ts"],"names":["debug","noSuchFile","resourceNotAvailable","normalizeSearchPackage","pkg","searchItem","latest","pkgUtils","getLatest","version","versions","result","name","scope","description","keywords","date","time","author","publisher","maintainers","links","npm","homepage","repository","bugs","package","scoped","PROTO_NAME","LocalStorage","constructor","config","logger","child","sub","storagePlugin","init","_loadStorage","warn","addPackage","callback","storage","_getLocalStorage","_","isNil","errorUtils","getNotFound","createPackage","err","isNull","code","STORAGE","FILE_EXIST_ERROR","HTTP_STATUS","CONFLICT","message","getConflict","removePackage","Promise","resolve","reject","readPackage","data","NO_SUCH_FILE_ERROR","NOT_FOUND","remove","attachments","Object","keys","_attachments","length","attachment","deletePackage","PACKAGE_FILE_NAME","error","getBadData","updateVersions","packageInfo","_readCreatePackage","packageLocalJson","change","readme","versionId","contributors","dist","tarball","urlObject","UrlNode","parse","filename","pathname","replace","_distfiles","hash","url","sha","shasum","upLink","Symbol","for","_updateUplinkToRemoteProtocol","tag","DIST_TAGS","up","_uplinks","prototype","hasOwnProperty","call","need_change","etag","fetched","isEqual","_writePackage","addVersion","metadata","_updatePackage","cb","hasVersion","validatioUtils","isObject","isString","errorMessage","getBadRequest","currentDate","Date","toISOString","created","add","addVersionNext","updatePackageNext","mergeTags","pkgName","tags","API_ERROR","VERSION_NOT_EXIST","changePackage","incomingPkg","revision","localData","incomingVersion","info","file","incomingDeprecated","deprecated","modified","USERS","changePackageNext","removeTarball","validateName","then","catch","getInternalError","addTarball","shaOneHash","uploadStream","UploadTarball","_transform","abort","done","args","update","appliedData","apply","process","nextTick","emit","getForbidden","writeStream","writeTarball","on","getPackageMetadata","_err","updater","digest","pipe","getTarball","_createFailureStreamResponse","_streamSuccessReadTarBall","stream","ReadTarball","readTarballStream","readTarball","e404","content","getPackageMetadataNext","_readPackageNext","_readPackage","search","searchStream","query","t","text","q","quality","p","popularity","m","maintenance","s","size","getMetadata","isEmpty","searchPackage","searchPackageItem","score","verdaccioPkgCached","verdaccioPrivate","flags","searchScore","end","items","item","write","getPackageStorage","_internalError","readPackageNext","_createNewPackage","updateHandler","onEnd","updatePackage","bind","normalizePackage","updatedManifest","writePackageNext","json","savePackage","_setDefaultRevision","savePackageNext","_rev","DEFAULT_REVISION","_debug","upLinkKey","tarballUrl","uplinkUrl","uplinks","host","protocol","registry","format","getSecret","secretKey","setSecret","checkSecretKey","Storage","_loadStorePlugin","LocalDatabase","plugin_params","plugins","store","plugin","head","saveToken","token","isFunction","getCode","SERVICE_UNAVAILABLE","SUPPORT_ERRORS","PLUGIN_MISSING_INTERFACE","deleteToken","user","tokenKey","readTokens","filter"],"mappings":"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","sourcesContent":["import assert from 'assert';\nimport buildDebug from 'debug';\nimport _ from 'lodash';\nimport { PassThrough } from 'stream';\nimport UrlNode from 'url';\n\nimport { errorUtils, pkgUtils, pluginUtils, searchUtils, validatioUtils } from '@verdaccio/core';\nimport { API_ERROR, DIST_TAGS, HTTP_STATUS, SUPPORT_ERRORS, USERS } from '@verdaccio/core';\nimport { VerdaccioError } from '@verdaccio/core';\nimport { loadPlugin } from '@verdaccio/loaders';\nimport LocalDatabase from '@verdaccio/local-storage';\nimport { ReadTarball, UploadTarball } from '@verdaccio/streams';\nimport {\n Author,\n Callback,\n CallbackAction,\n Config,\n DistFile,\n IPackageStorage,\n IReadTarball,\n IUploadTarball,\n Logger,\n MergeTags,\n Package,\n StorageUpdateCallback,\n StringValue,\n Token,\n TokenFilter,\n Version,\n} from '@verdaccio/types';\nimport { getLatestVersion, isObject } from '@verdaccio/utils';\nimport { createTarballHash, normalizeContributors } from '@verdaccio/utils';\n\nimport {\n STORAGE,\n cleanUpReadme,\n generatePackageTemplate,\n generateRevision,\n getLatestReadme,\n normalizePackage,\n tagVersion,\n} from './storage-utils';\n\nconst debug = buildDebug('verdaccio:storage:local');\n\nexport const noSuchFile = 'ENOENT';\nexport const resourceNotAvailable = 'EAGAIN';\nexport type IPluginStorage = pluginUtils.IPluginStorage<Config>;\n\nexport function normalizeSearchPackage(\n pkg: Package,\n searchItem: searchUtils.SearchItem\n): searchUtils.SearchPackageBody {\n const latest = pkgUtils.getLatest(pkg);\n const version: Version = pkg.versions[latest];\n const result: searchUtils.SearchPackageBody = {\n name: version.name,\n scope: '',\n description: version.description,\n version: latest,\n keywords: version.keywords,\n date: pkg.time[latest],\n // FIXME: type\n author: version.author as any,\n // FIXME: not possible fill this out from a private package\n publisher: {},\n // FIXME: type\n maintainers: version.maintainers as any,\n links: {\n npm: '',\n homepage: version.homepage,\n repository: version.repository,\n bugs: version.bugs,\n },\n };\n\n if (typeof searchItem.package.scoped === 'string') {\n result.scope = searchItem.package.scoped;\n }\n\n return result;\n}\n\nexport const PROTO_NAME = '__proto__';\n\n/**\n * Implements Storage interface (same for storage.js, local-storage.js, up-storage.js).\n */\nclass LocalStorage {\n public config: Config;\n public storagePlugin: IPluginStorage;\n public logger: Logger;\n\n public constructor(config: Config, logger: Logger) {\n debug('local storage created');\n this.logger = logger.child({ sub: 'fs' });\n this.config = config;\n // @ts-expect-error\n this.storagePlugin = null;\n }\n\n public async init() {\n if (this.storagePlugin === null) {\n this.storagePlugin = this._loadStorage(this.config, this.logger);\n debug('storage plugin init');\n await this.storagePlugin.init();\n debug('storage plugin initialized');\n } else {\n this.logger.warn('storage plugin has been already initialized');\n }\n return;\n }\n\n public addPackage(name: string, pkg: Package, callback: Callback): void {\n debug(`creating a package for`, name);\n const storage: any = this._getLocalStorage(name);\n\n if (_.isNil(storage)) {\n debug(`storage is missing for %o package cannot be added`, name);\n return callback(errorUtils.getNotFound('this package cannot be added'));\n }\n\n storage.createPackage(name, generatePackageTemplate(name), (err) => {\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 return callback(errorUtils.getConflict());\n }\n\n const latest = getLatestVersion(pkg);\n if (_.isNil(latest) === false && pkg.versions[latest]) {\n debug('latest version found %o for %o', latest, name);\n return callback(null, pkg.versions[latest]);\n }\n\n debug('no latest version found for %o', name);\n return callback();\n });\n }\n\n /**\n * Remove package with all it contents.\n */\n public async removePackage(name: string): Promise<void> {\n debug('remove package %s', name);\n const storage: any = this._getLocalStorage(name);\n\n if (_.isNil(storage)) {\n throw errorUtils.getNotFound();\n }\n\n return new Promise((resolve, reject) => {\n storage.readPackage(name, async (err, data: Package): Promise<void> => {\n if (_.isNil(err) === false) {\n if (err.code === STORAGE.NO_SUCH_FILE_ERROR || err.code === HTTP_STATUS.NOT_FOUND) {\n debug(`error on not found %o with error %o`, name, err.message);\n return reject(errorUtils.getNotFound());\n }\n return reject(err);\n }\n\n data = normalizePackage(data);\n\n try {\n await this.storagePlugin.remove(name);\n // remove each attachment\n const attachments = Object.keys(data._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 }\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 resolve();\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\n /**\n * Synchronize remote package info with the local one\n * @param {*} name\n * @param {*} packageInfo\n * @param {*} callback\n */\n public updateVersions(name: string, packageInfo: Package, callback: Callback): void {\n debug(`updating versions for package %o`, name);\n this._readCreatePackage(name, (err, packageLocalJson): void => {\n if (err) {\n return callback(err);\n }\n\n let change = false;\n // updating readme\n packageLocalJson.readme = getLatestReadme(packageInfo);\n if (packageInfo.readme !== packageLocalJson.readme) {\n change = true;\n }\n\n debug('update versions');\n for (const versionId in packageInfo.versions) {\n if (_.isNil(packageLocalJson.versions[versionId])) {\n let version = packageInfo.versions[versionId];\n\n // we don't keep readme for package versions,\n // only one readme per package\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 packageLocalJson.versions[versionId] = version;\n\n if (version?.dist?.tarball) {\n const urlObject: any = UrlNode.parse(version.dist.tarball);\n const filename = urlObject.pathname.replace(/^.*\\//, '');\n\n // we do NOT overwrite any existing records\n if (_.isNil(packageLocalJson._distfiles[filename])) {\n const hash: DistFile = (packageLocalJson._distfiles[filename] = {\n url: version.dist.tarball,\n sha: version.dist.shasum,\n });\n const upLink: string = version[Symbol.for('__verdaccio_uplink')];\n\n if (_.isNil(upLink) === false) {\n this._updateUplinkToRemoteProtocol(hash, upLink);\n }\n }\n }\n }\n }\n\n debug('update dist-tags');\n for (const tag in packageInfo[DIST_TAGS]) {\n if (\n !packageLocalJson[DIST_TAGS][tag] ||\n packageLocalJson[DIST_TAGS][tag] !== packageInfo[DIST_TAGS][tag]\n ) {\n change = true;\n packageLocalJson[DIST_TAGS][tag] = packageInfo[DIST_TAGS][tag];\n }\n }\n\n for (const up in packageInfo._uplinks) {\n if (Object.prototype.hasOwnProperty.call(packageInfo._uplinks, up)) {\n const need_change =\n !isObject(packageLocalJson._uplinks[up]) ||\n packageInfo._uplinks[up].etag !== packageLocalJson._uplinks[up].etag ||\n packageInfo._uplinks[up].fetched !== packageLocalJson._uplinks[up].fetched;\n\n if (need_change) {\n change = true;\n packageLocalJson._uplinks[up] = packageInfo._uplinks[up];\n }\n }\n }\n\n debug('update time');\n if ('time' in packageInfo && !_.isEqual(packageLocalJson.time, packageInfo.time)) {\n packageLocalJson.time = packageInfo.time;\n change = true;\n }\n\n if (change) {\n debug('updating package info %o', name);\n this._writePackage(name, packageLocalJson, function (err): void {\n callback(err, packageLocalJson);\n });\n } else {\n callback(null, packageLocalJson);\n }\n });\n }\n\n /**\n * Add a new version to a previous local package.\n * @param {*} name\n * @param {*} version\n * @param {*} metadata\n * @param {*} tag\n * @param {*} callback\n */\n public addVersion(\n name: string,\n version: string,\n metadata: Version,\n tag: StringValue,\n callback: Callback\n ): void {\n debug(`add version %s package for %s`, version, name);\n this._updatePackage(\n name,\n async (data, cb: Callback): Promise<void> => {\n debug('%s package is being updated', name);\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 const hasVersion = data.versions[version] != null;\n if (hasVersion) {\n debug('%s version %s already exists', name, version);\n return cb(errorUtils.getConflict());\n }\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\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 return cb(errorUtils.getBadRequest(errorMessage));\n }\n }\n\n const currentDate = new Date().toISOString();\n\n // some old storage do not have this field #740\n if (_.isNil(data.time)) {\n data.time = {};\n }\n\n data.time['modified'] = currentDate;\n\n if ('created' in data.time === false) {\n data.time.created = currentDate;\n }\n\n data.time[version] = currentDate;\n data._attachments[tarball].version = version;\n }\n }\n\n data.versions[version] = metadata;\n tagVersion(data, version, tag);\n\n try {\n debug('%s` add on database', name);\n await this.storagePlugin.add(name);\n cb();\n } catch (err: any) {\n cb(errorUtils.getBadData(err.message));\n }\n },\n callback\n );\n }\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: Package): Promise<Package> => {\n debug('%s package is being updated', name);\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 const hasVersion = data.versions[version] != null;\n if (hasVersion) {\n debug('%s version %s already exists', name, version);\n throw errorUtils.getConflict();\n }\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\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\n const currentDate = new Date().toISOString();\n\n // some old storage do not have this field #740\n if (_.isNil(data.time)) {\n data.time = {};\n }\n\n data.time['modified'] = currentDate;\n\n if ('created' in data.time === false) {\n data.time.created = currentDate;\n }\n\n data.time[version] = currentDate;\n data._attachments[tarball].version = version;\n }\n }\n\n data.versions[version] = metadata;\n tagVersion(data, version, tag);\n\n try {\n debug('%s` add on database', name);\n await this.storagePlugin.add(name);\n } catch (err: any) {\n throw errorUtils.getBadData(err.message);\n }\n return data;\n });\n\n // this._updatePackage(\n // name,\n // async (data, cb: Callback): Promise<void> => {\n // debug('%s package is being updated', name);\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 // const hasVersion = data.versions[version] != null;\n // if (hasVersion) {\n // debug('%s version %s already exists', name, version);\n // return cb(errorUtils.getConflict());\n // }\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\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 // return cb(errorUtils.getBadRequest(errorMessage));\n // }\n // }\n\n // const currentDate = new Date().toISOString();\n\n // // some old storage do not have this field #740\n // if (_.isNil(data.time)) {\n // data.time = {};\n // }\n\n // data.time['modified'] = currentDate;\n\n // if ('created' in data.time === false) {\n // data.time.created = currentDate;\n // }\n\n // data.time[version] = currentDate;\n // data._attachments[tarball].version = version;\n // }\n // }\n\n // data.versions[version] = metadata;\n // tagVersion(data, version, tag);\n\n // try {\n // debug('%s` add on database', name);\n // await this.storagePlugin.add(name);\n // cb();\n // } catch (err: any) {\n // cb(errorUtils.getBadData(err.message));\n // }\n // },\n // callback\n // );\n }\n\n /**\n * Merge a new list of tags for a local packages with the existing one.\n * @param {*} pkgName\n * @param {*} tags\n * @param {*} callback\n */\n public mergeTags(pkgName: string, tags: MergeTags, callback: Callback): void {\n debug(`merge tags for`, pkgName);\n this._updatePackage(\n pkgName,\n (data, cb): void => {\n /* eslint guard-for-in: 0 */\n for (const tag in tags) {\n // this handle dist-tag rm command\n if (_.isNull(tags[tag])) {\n delete data[DIST_TAGS][tag];\n continue;\n }\n\n if (_.isNil(data.versions[tags[tag]])) {\n return cb(errorUtils.getNotFound(API_ERROR.VERSION_NOT_EXIST));\n }\n const version: string = tags[tag];\n tagVersion(data, version, tag);\n }\n cb(null);\n },\n callback\n );\n }\n\n /**\n * Update the package metadata, tags and attachments (tarballs).\n * Note: Currently supports unpublishing and deprecation.\n * @param {*} name\n * @param {*} incomingPkg\n * @param {*} revision\n * @param {*} callback\n * @return {Function}\n */\n public changePackage(\n name: string,\n incomingPkg: Package,\n revision: string | undefined,\n callback: Callback\n ): void {\n debug(`change package tags for %o revision %s`, name, revision);\n if (\n !validatioUtils.isObject(incomingPkg.versions) ||\n !validatioUtils.isObject(incomingPkg[DIST_TAGS])\n ) {\n debug(`change package bad data for %o`, name);\n return callback(errorUtils.getBadData());\n }\n\n debug(`change package udapting package for %o`, name);\n this._updatePackage(\n name,\n (localData: Package, cb: CallbackAction): void => {\n for (const version in localData.versions) {\n const incomingVersion = incomingPkg.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(\n { name: name, version: version },\n 'deprecating @{name}@@{version}'\n );\n localData.versions[version].deprecated = incomingDeprecated;\n }\n localData.time!.modified = new Date().toISOString();\n }\n }\n }\n\n localData[USERS] = incomingPkg[USERS];\n localData[DIST_TAGS] = incomingPkg[DIST_TAGS];\n cb(null);\n },\n function (err): void {\n if (err) {\n return callback(err);\n }\n callback();\n }\n );\n }\n\n /**\n * Update the package metadata, tags and attachments (tarballs).\n * Note: Currently supports unpublishing and deprecation.\n * @param {*} name\n * @param {*} incomingPkg\n * @param {*} revision\n * @param {*} callback\n * @return {Function}\n */\n public async changePackageNext(\n name: string,\n incomingPkg: Package,\n revision: string | undefined\n ): Promise<void> {\n debug(`change package tags for %o revision %s`, name, revision);\n if (\n !validatioUtils.isObject(incomingPkg.versions) ||\n !validatioUtils.isObject(incomingPkg[DIST_TAGS])\n ) {\n debug(`change package bad data for %o`, name);\n throw errorUtils.getBadData();\n }\n\n debug(`change package udapting package for %o`, name);\n await this.updatePackageNext(name, async (localData: Package): Promise<Package> => {\n for (const version in localData.versions) {\n const incomingVersion = incomingPkg.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] = incomingPkg[USERS];\n localData[DIST_TAGS] = incomingPkg[DIST_TAGS];\n return localData;\n });\n }\n\n /**\n * Remove a tarball.\n * @param {*} name\n * @param {*} filename\n * @param {*} revision\n * @param {*} callback\n */\n public removeTarball(\n name: string,\n filename: string,\n revision: string,\n callback: CallbackAction\n ): void {\n debug('remove tarball %s for %s', filename, name);\n assert(validatioUtils.validateName(filename));\n this._updatePackage(\n name,\n (data, cb): void => {\n if (data._attachments[filename]) {\n // TODO: avoid using delete\n delete data._attachments[filename];\n cb(null);\n } else {\n cb(errorUtils.getNotFound('no such file available'));\n }\n },\n (err: VerdaccioError) => {\n if (err) {\n this.logger.error({ err }, 'remove tarball error @{err.message}');\n return callback(err);\n }\n const storage = this._getLocalStorage(name);\n\n if (storage) {\n debug('removing %s from storage', filename);\n storage\n .deletePackage(filename)\n .then((): void => {\n debug('package %s removed', filename);\n return callback(null);\n })\n .catch((err) => {\n this.logger.error({ err }, 'error removing %s from storage');\n return callback(null);\n });\n } else {\n callback(errorUtils.getInternalError());\n }\n }\n );\n }\n\n /**\n * Add a tarball.\n * @param {String} name\n * @param {String} filename\n * @return {Stream}\n */\n public addTarball(name: string, filename: string): IUploadTarball {\n debug(`add a tarball for %o`, name);\n assert(validatioUtils.validateName(filename));\n\n let length = 0;\n const shaOneHash = createTarballHash();\n const uploadStream: IUploadTarball = new UploadTarball({});\n const _transform = uploadStream._transform;\n const storage = this._getLocalStorage(name);\n\n uploadStream.abort = function (): void {};\n uploadStream.done = function (): void {};\n\n uploadStream._transform = function (data, ...args): void {\n shaOneHash.update(data);\n // measure the length for validation reasons\n length += data.length;\n const appliedData = [data, ...args];\n // FIXME: not sure about this approach, tsc complains\n // @ts-ignore\n _transform.apply(uploadStream, appliedData);\n };\n\n if (name === 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\");\n });\n return uploadStream;\n }\n\n const writeStream: IUploadTarball = storage.writeTarball(filename);\n\n writeStream.on('error', (err) => {\n // @ts-ignore\n if (err.code === STORAGE.FILE_EXIST_ERROR || err.code === HTTP_STATUS.CONFLICT) {\n uploadStream.emit('error', errorUtils.getConflict());\n uploadStream.abort();\n // @ts-ignore\n } else if (err.code === STORAGE.NO_SUCH_FILE_ERROR || err.code === HTTP_STATUS.NOT_FOUND) {\n // check if package exists to throw an appropriate message\n this.getPackageMetadata(name, function (_err: VerdaccioError): void {\n if (_err) {\n uploadStream.emit('error', _err);\n } else {\n uploadStream.emit('error', err);\n }\n });\n } else {\n uploadStream.emit('error', err);\n }\n });\n\n writeStream.on('open', function (): void {\n // re-emitting open because it's handled in storage.js\n uploadStream.emit('open');\n });\n\n writeStream.on('success', (): void => {\n this._updatePackage(\n name,\n function updater(data, cb): void {\n // FUTURE: move this to tarballUtils\n data._attachments[filename] = {\n shasum: shaOneHash.digest('hex'),\n };\n cb(null);\n },\n function (err): void {\n if (err) {\n // FIXME: if the update package fails, remove tarball to avoid left\n // orphan tarballs\n uploadStream.emit('error', err);\n } else {\n uploadStream.emit('success');\n }\n }\n );\n });\n\n uploadStream.abort = function (): void {\n writeStream.abort();\n };\n\n uploadStream.done = function (): void {\n if (!length) {\n uploadStream.emit('error', errorUtils.getBadData('refusing to accept zero-length file'));\n writeStream.abort();\n } else {\n writeStream.done();\n }\n };\n\n uploadStream.pipe(writeStream);\n\n return uploadStream;\n }\n\n /**\n * Get a tarball.\n * @param {*} name\n * @param {*} filename\n * @return {ReadTarball}\n */\n public getTarball(name: string, filename: string): IReadTarball {\n assert(validatioUtils.validateName(filename));\n\n const storage: IPackageStorage = this._getLocalStorage(name);\n\n if (_.isNil(storage)) {\n return this._createFailureStreamResponse();\n }\n\n return this._streamSuccessReadTarBall(storage, filename);\n }\n\n /**\n * Return a stream that emits a read failure.\n * @private\n * @return {ReadTarball}\n */\n private _createFailureStreamResponse(): IReadTarball {\n const stream: IReadTarball = new ReadTarball({});\n\n process.nextTick((): void => {\n stream.emit('error', errorUtils.getNotFound('no such file available'));\n });\n return stream;\n }\n\n /**\n * Return a stream that emits the tarball data\n * @param {Object} storage\n * @param {String} filename\n * @private\n * @return {ReadTarball}\n */\n private _streamSuccessReadTarBall(storage: any, filename: string): IReadTarball {\n const stream: IReadTarball = new ReadTarball({});\n const readTarballStream = storage.readTarball(filename);\n const e404 = errorUtils.getNotFound;\n\n stream.abort = function (): void {\n if (_.isNil(readTarballStream) === false) {\n readTarballStream.abort();\n }\n };\n\n readTarballStream.on('error', function (err) {\n // @ts-ignore\n if (err.code === STORAGE.NO_SUCH_FILE_ERROR || err.code === HTTP_STATUS.NOT_FOUND) {\n stream.emit('error', e404('no such file available'));\n } else {\n stream.emit('error', err);\n }\n });\n\n readTarballStream.on('content-length', function (content): void {\n stream.emit('content-length', content);\n });\n\n readTarballStream.on('open', function (): void {\n // re-emitting open because it's handled in storage.js\n stream.emit('open');\n readTarballStream.pipe(stream);\n });\n\n return stream;\n }\n\n public async getPackageMetadataNext(name: string): Promise<Package> {\n const storage: IPackageStorage = this._getLocalStorage(name);\n debug('get package metadata for %o', name);\n if (typeof storage === 'undefined') {\n // TODO: this might be a better an error to throw\n // if storage is not there cannot be 404.\n throw errorUtils.getNotFound();\n }\n\n return await this._readPackageNext(name, storage);\n }\n\n /**\n * Retrieve a package by name.\n * @param {*} name\n * @param {*} callback\n * @return {Function}\n * @deprecated\n */\n public getPackageMetadata(name: string, callback: Callback = (): void => {}): void {\n const storage: IPackageStorage = this._getLocalStorage(name);\n debug('get package metadata for %o', name);\n if (typeof storage === 'undefined') {\n return callback(errorUtils.getNotFound());\n }\n\n this._readPackage(name, storage, callback);\n }\n\n public async search(searchStream: PassThrough, query: searchUtils.SearchQuery): 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 const getMetadata = (searchItem: searchUtils.SearchItem) => {\n return new Promise((resolve, reject) => {\n this.getPackageMetadata(\n searchItem?.package?.name,\n (err: VerdaccioError, pkg: Package): void => {\n if (err) {\n this.logger.error(\n { err, pkgName: searchItem?.package?.name },\n 'error on load package @{pkgName} metaadata @{err.message}'\n );\n reject(err);\n }\n\n if (_.isEmpty(pkg?.versions)) {\n return resolve({});\n }\n\n const searchPackage = normalizeSearchPackage(pkg, 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 debug('push to stream %o', searchItem?.package?.name);\n resolve(searchPackageItem);\n }\n );\n });\n };\n\n if (typeof this.storagePlugin.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.storagePlugin.search(query);\n try {\n for (const item of items) {\n const metadata = await getMetadata(item);\n searchStream.write(metadata);\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 /**\n * Retrieve a wrapper that provide access to the package location.\n * @param {Object} pkgName package name.\n * @return {Object}\n */\n private _getLocalStorage(pkgName: string): IPackageStorage {\n debug('get local storage for %o', pkgName);\n return this.storagePlugin.getPackageStorage(pkgName);\n }\n\n /**\n * Read a json file from storage.\n * @param {Object} storage\n * @param {Function} callback\n * @deprecated\n */\n private _readPackage(name: string, storage: any, callback: Callback): void {\n storage.readPackage(name, (err, result): void => {\n if (err) {\n if (err.code === STORAGE.NO_SUCH_FILE_ERROR || err.code === HTTP_STATUS.NOT_FOUND) {\n debug('package %s not found', name);\n return callback(errorUtils.getNotFound());\n }\n return callback(this._internalError(err, STORAGE.PACKAGE_FILE_NAME, 'error reading'));\n }\n\n callback(err, normalizePackage(result));\n });\n }\n\n private async _readPackageNext(name: string, storage: any): Promise<Package> {\n try {\n const result: Package = await storage.readPackageNext(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 * Retrieve either a previous created local package or a boilerplate.\n * @param {*} pkgName\n * @param {*} callback\n * @return {Function}\n */\n private _readCreatePackage(pkgName: string, callback: Callback): void {\n const storage: any = this._getLocalStorage(pkgName);\n if (_.isNil(storage)) {\n this._createNewPackage(pkgName, callback);\n return;\n }\n\n storage.readPackage(pkgName, (err, data): void => {\n // TODO: race condition\n if (_.isNil(err) === false) {\n if (err.code === STORAGE.NO_SUCH_FILE_ERROR || err.code === HTTP_STATUS.NOT_FOUND) {\n data = generatePackageTemplate(pkgName);\n } else {\n return callback(this._internalError(err, STORAGE.PACKAGE_FILE_NAME, 'error reading'));\n }\n }\n\n callback(null, normalizePackage(data));\n });\n }\n\n private _createNewPackage(name: string, callback: Callback): Callback {\n return callback(null, normalizePackage(generatePackageTemplate(name)));\n }\n\n /**\n * Handle internal error\n * @param {*} err\n * @param {*} file\n * @param {*} message\n * @return {Object} Error instance\n */\n private _internalError(err: string, file: string, message: string): VerdaccioError {\n this.logger.error({ err: err, file: file }, `${message} @{file}: @{!err.message}`);\n\n return errorUtils.getInternalError();\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 _updatePackage(\n name: string,\n updateHandler: StorageUpdateCallback,\n onEnd: Callback\n ): void {\n const storage: IPackageStorage = this._getLocalStorage(name);\n\n if (!storage) {\n return onEnd(errorUtils.getNotFound());\n }\n\n storage.updatePackage(\n name,\n updateHandler,\n this._writePackage.bind(this),\n normalizePackage,\n onEnd\n );\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: Package) => Promise<Package>\n ): Promise<void> {\n const storage: IPackageStorage = this._getLocalStorage(name);\n\n if (!storage) {\n throw errorUtils.getNotFound();\n }\n\n // we update the package on the local storage\n const updatedManifest: Package = await storage.updatePackageNext(name, updateHandler);\n // after correctly updated write to the storage\n try {\n await this.writePackageNext(name, normalizePackage(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 * Update the revision (_rev) string for a package.\n * @param {*} name\n * @param {*} json\n * @param {*} callback\n * @return {Function}\n */\n private _writePackage(name: string, json: Package, callback: Callback): void {\n const storage: any = this._getLocalStorage(name);\n if (_.isNil(storage)) {\n return callback();\n }\n storage.savePackage(name, this._setDefaultRevision(json), callback);\n }\n\n private async writePackageNext(name: string, json: Package): Promise<void> {\n const storage: any = this._getLocalStorage(name);\n if (_.isNil(storage)) {\n // TODO: replace here 500 error\n throw errorUtils.getBadData();\n }\n await storage.savePackageNext(name, this._setDefaultRevision(json));\n }\n\n private _setDefaultRevision(json: Package): Package {\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 _deleteAttachments(storage: any, attachments: string[], callback: Callback): void {\n // debug('deleting %o attachments total %o', attachments?.length);\n // const unlinkNext = function (cb): void {\n // if (_.isEmpty(attachments)) {\n // return cb();\n // }\n\n // const attachment = attachments.shift();\n // storage.deletePackage(attachment, function (): void {\n // unlinkNext(cb);\n // });\n // };\n\n // unlinkNext(function (): void {\n // // try to unlink the directory, but ignore errors because it can fail\n // storage.removePackage(function (err): void {\n // callback(err);\n // });\n // });\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 */\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 //\n // see https://github.com/rlidwka/sinopia/issues/166\n const tarballUrl: any = UrlNode.parse(hash.url);\n const uplinkUrl: any = UrlNode.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 = UrlNode.format(tarballUrl);\n }\n }\n\n public async getSecret(config: Config): Promise<void> {\n const secretKey = await this.storagePlugin.getSecret();\n\n return this.storagePlugin.setSecret(config.checkSecretKey(secretKey));\n }\n\n private _loadStorage(config: Config, logger: Logger): IPluginStorage {\n const Storage = this._loadStorePlugin();\n\n if (_.isNil(Storage)) {\n assert(this.config.storage, 'CONFIG: storage path not defined');\n return new LocalDatabase(this.config, logger);\n }\n return Storage as IPluginStorage;\n }\n\n private _loadStorePlugin(): IPluginStorage | void {\n const plugin_params = {\n config: this.config,\n logger: this.logger,\n };\n\n const plugins: IPluginStorage[] = loadPlugin<IPluginStorage>(\n this.config,\n this.config.store,\n plugin_params,\n (plugin): IPluginStorage => {\n return plugin.getPackageStorage;\n }\n );\n\n return _.head(plugins);\n }\n\n public saveToken(token: Token): Promise<any> {\n if (_.isFunction(this.storagePlugin.saveToken) === false) {\n return Promise.reject(\n errorUtils.getCode(HTTP_STATUS.SERVICE_UNAVAILABLE, SUPPORT_ERRORS.PLUGIN_MISSING_INTERFACE)\n );\n }\n\n return this.storagePlugin.saveToken(token);\n }\n\n public deleteToken(user: string, tokenKey: string): Promise<any> {\n if (_.isFunction(this.storagePlugin.deleteToken) === false) {\n return Promise.reject(\n errorUtils.getCode(HTTP_STATUS.SERVICE_UNAVAILABLE, SUPPORT_ERRORS.PLUGIN_MISSING_INTERFACE)\n );\n }\n\n return this.storagePlugin.deleteToken(user, tokenKey);\n }\n\n public readTokens(filter: TokenFilter): Promise<Token[]> {\n if (_.isFunction(this.storagePlugin.readTokens) === false) {\n return Promise.reject(\n errorUtils.getCode(HTTP_STATUS.SERVICE_UNAVAILABLE, SUPPORT_ERRORS.PLUGIN_MISSING_INTERFACE)\n );\n }\n\n return this.storagePlugin.readTokens(filter);\n }\n}\n\nexport { LocalStorage };\n"],"file":"local-storage.js"}
package/build/search.d.ts CHANGED
@@ -1,4 +1,3 @@
1
- import lunrMutable from 'lunr-mutable-indexes';
2
1
  import { searchUtils } from '@verdaccio/core';
3
2
  import { ProxyList, ProxySearchParams } from '@verdaccio/proxy';
4
3
  import { Version } from '@verdaccio/types';
@@ -9,7 +8,6 @@ export interface ISearchResult {
9
8
  score: number;
10
9
  }
11
10
  export interface IWebSearch {
12
- index: lunrMutable.index;
13
11
  storage: Storage;
14
12
  query(query: string): ISearchResult[];
15
13
  add(pkg: Version): void;
@@ -35,44 +33,3 @@ export declare class SearchManager {
35
33
  */
36
34
  private consumeSearchStream;
37
35
  }
38
- /**
39
- * Handle the search Indexer.
40
- */
41
- declare class Search implements IWebSearch {
42
- readonly index: lunrMutable.index;
43
- storage: Storage;
44
- /**
45
- * Constructor.
46
- */
47
- constructor();
48
- init(): Promise<void>;
49
- /**
50
- * Performs a query to the indexer.
51
- * If the keyword is a * it returns all local elements
52
- * otherwise performs a search
53
- * @param {*} q the keyword
54
- * @return {Array} list of results.
55
- */
56
- query(query: string): ISearchResult[];
57
- /**
58
- * Add a new element to index
59
- * @param {*} pkg the package
60
- */
61
- add(pkg: Version): void;
62
- /**
63
- * Remove an element from the index.
64
- * @param {*} name the id element
65
- */
66
- remove(name: string): void;
67
- /**
68
- * Force a re-index.
69
- */
70
- reindex(): void;
71
- /**
72
- * Set up the {Storage}
73
- * @param {*} storage An storage reference.
74
- */
75
- configureStorage(storage: Storage): void;
76
- }
77
- declare const SearchInstance: Search;
78
- export { SearchInstance };