@verdaccio/core 8.0.0-next-8.30 → 8.0.0-next-8.31

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,5 +1,5 @@
1
1
  /// <reference types="node" />
2
- import { PackageAccess, PackageList } from '@verdaccio/types';
2
+ import type { PackageAccess, PackageList } from '@verdaccio/types';
3
3
  export interface CookieSessionToken {
4
4
  expires: Date;
5
5
  }
@@ -1 +1 @@
1
- {"version":3,"file":"auth-utils.js","names":["_minimatch","require","createSessionToken","tenHoursTime","expires","Date","now","getAuthenticatedMessage","user","buildUserBuffer","name","password","Buffer","from","buildToken","type","token","capitalize","getMatchedPackagesSpec","pkgName","packages","i","minimatch","makeRe","exec","str","charAt","toUpperCase","slice","toLowerCase"],"sources":["../src/auth-utils.ts"],"sourcesContent":["import { MMRegExp, minimatch } from 'minimatch';\n\nimport { PackageAccess, PackageList } from '@verdaccio/types';\n\nexport interface CookieSessionToken {\n expires: Date;\n}\n\nexport function createSessionToken(): CookieSessionToken {\n const tenHoursTime = 10 * 60 * 60 * 1000;\n\n return {\n // npmjs.org sets 10h expire\n expires: new Date(Date.now() + tenHoursTime),\n };\n}\n\nexport function getAuthenticatedMessage(user: string): string {\n return `you are authenticated as '${user}'`;\n}\n\nexport function buildUserBuffer(name: string, password: string): Buffer {\n return Buffer.from(`${name}:${password}`, 'utf8');\n}\n\nexport function buildToken(type: string, token: string): string {\n return `${capitalize(type)} ${token}`;\n}\n\nexport function getMatchedPackagesSpec(\n pkgName: string,\n packages: PackageList\n): PackageAccess | void {\n for (const i in packages) {\n if ((minimatch.makeRe(i) as MMRegExp).exec(pkgName)) {\n return packages[i];\n }\n }\n return;\n}\n\nfunction capitalize(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase();\n}\n"],"mappings":";;;;;;;;;;AAAA,IAAAA,UAAA,GAAAC,OAAA;AAQO,SAASC,kBAAkBA,CAAA,EAAuB;EACvD,MAAMC,YAAY,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;EAExC,OAAO;IACL;IACAC,OAAO,EAAE,IAAIC,IAAI,CAACA,IAAI,CAACC,GAAG,CAAC,CAAC,GAAGH,YAAY;EAC7C,CAAC;AACH;AAEO,SAASI,uBAAuBA,CAACC,IAAY,EAAU;EAC5D,OAAO,6BAA6BA,IAAI,GAAG;AAC7C;AAEO,SAASC,eAAeA,CAACC,IAAY,EAAEC,QAAgB,EAAU;EACtE,OAAOC,MAAM,CAACC,IAAI,CAAC,GAAGH,IAAI,IAAIC,QAAQ,EAAE,EAAE,MAAM,CAAC;AACnD;AAEO,SAASG,UAAUA,CAACC,IAAY,EAAEC,KAAa,EAAU;EAC9D,OAAO,GAAGC,UAAU,CAACF,IAAI,CAAC,IAAIC,KAAK,EAAE;AACvC;AAEO,SAASE,sBAAsBA,CACpCC,OAAe,EACfC,QAAqB,EACC;EACtB,KAAK,MAAMC,CAAC,IAAID,QAAQ,EAAE;IACxB,IAAKE,oBAAS,CAACC,MAAM,CAACF,CAAC,CAAC,CAAcG,IAAI,CAACL,OAAO,CAAC,EAAE;MACnD,OAAOC,QAAQ,CAACC,CAAC,CAAC;IACpB;EACF;EACA;AACF;AAEA,SAASJ,UAAUA,CAACQ,GAAW,EAAU;EACvC,OAAOA,GAAG,CAACC,MAAM,CAAC,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC,GAAGF,GAAG,CAACG,KAAK,CAAC,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC;AACjE","ignoreList":[]}
1
+ {"version":3,"file":"auth-utils.js","names":["_minimatch","require","createSessionToken","tenHoursTime","expires","Date","now","getAuthenticatedMessage","user","buildUserBuffer","name","password","Buffer","from","buildToken","type","token","capitalize","getMatchedPackagesSpec","pkgName","packages","i","minimatch","makeRe","exec","str","charAt","toUpperCase","slice","toLowerCase"],"sources":["../src/auth-utils.ts"],"sourcesContent":["import type { MMRegExp } from 'minimatch';\nimport { minimatch } from 'minimatch';\n\nimport type { PackageAccess, PackageList } from '@verdaccio/types';\n\nexport interface CookieSessionToken {\n expires: Date;\n}\n\nexport function createSessionToken(): CookieSessionToken {\n const tenHoursTime = 10 * 60 * 60 * 1000;\n\n return {\n // npmjs.org sets 10h expire\n expires: new Date(Date.now() + tenHoursTime),\n };\n}\n\nexport function getAuthenticatedMessage(user: string): string {\n return `you are authenticated as '${user}'`;\n}\n\nexport function buildUserBuffer(name: string, password: string): Buffer {\n return Buffer.from(`${name}:${password}`, 'utf8');\n}\n\nexport function buildToken(type: string, token: string): string {\n return `${capitalize(type)} ${token}`;\n}\n\nexport function getMatchedPackagesSpec(\n pkgName: string,\n packages: PackageList\n): PackageAccess | void {\n for (const i in packages) {\n if ((minimatch.makeRe(i) as MMRegExp).exec(pkgName)) {\n return packages[i];\n }\n }\n return;\n}\n\nfunction capitalize(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase();\n}\n"],"mappings":";;;;;;;;;;AACA,IAAAA,UAAA,GAAAC,OAAA;AAQO,SAASC,kBAAkBA,CAAA,EAAuB;EACvD,MAAMC,YAAY,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;EAExC,OAAO;IACL;IACAC,OAAO,EAAE,IAAIC,IAAI,CAACA,IAAI,CAACC,GAAG,CAAC,CAAC,GAAGH,YAAY;EAC7C,CAAC;AACH;AAEO,SAASI,uBAAuBA,CAACC,IAAY,EAAU;EAC5D,OAAO,6BAA6BA,IAAI,GAAG;AAC7C;AAEO,SAASC,eAAeA,CAACC,IAAY,EAAEC,QAAgB,EAAU;EACtE,OAAOC,MAAM,CAACC,IAAI,CAAC,GAAGH,IAAI,IAAIC,QAAQ,EAAE,EAAE,MAAM,CAAC;AACnD;AAEO,SAASG,UAAUA,CAACC,IAAY,EAAEC,KAAa,EAAU;EAC9D,OAAO,GAAGC,UAAU,CAACF,IAAI,CAAC,IAAIC,KAAK,EAAE;AACvC;AAEO,SAASE,sBAAsBA,CACpCC,OAAe,EACfC,QAAqB,EACC;EACtB,KAAK,MAAMC,CAAC,IAAID,QAAQ,EAAE;IACxB,IAAKE,oBAAS,CAACC,MAAM,CAACF,CAAC,CAAC,CAAcG,IAAI,CAACL,OAAO,CAAC,EAAE;MACnD,OAAOC,QAAQ,CAACC,CAAC,CAAC;IACpB;EACF;EACA;AACF;AAEA,SAASJ,UAAUA,CAACQ,GAAW,EAAU;EACvC,OAAOA,GAAG,CAACC,MAAM,CAAC,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC,GAAGF,GAAG,CAACG,KAAK,CAAC,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC;AACjE","ignoreList":[]}
@@ -1,6 +1,6 @@
1
1
  /// <reference types="node" />
2
2
  /// <reference types="node" />
3
- import { Hash } from 'node:crypto';
3
+ import type { Hash } from 'node:crypto';
4
4
  export declare const defaultTarballHashAlgorithm = "sha1";
5
5
  export declare function createTarballHash(): Hash;
6
6
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"crypto-utils.js","names":["_nodeCrypto","require","defaultTarballHashAlgorithm","exports","createTarballHash","createHash","stringToMD5","data","update","digest","generateRandomHexString","length","pseudoRandomBytes","toString","mask","str","charNum","slice"],"sources":["../src/crypto-utils.ts"],"sourcesContent":["import { Hash, createHash, pseudoRandomBytes } from 'node:crypto';\n\nexport const defaultTarballHashAlgorithm = 'sha1';\n\nexport function createTarballHash(): Hash {\n return createHash(defaultTarballHashAlgorithm);\n}\n\n/**\n * Express doesn't do ETAGS with requests <= 1024b\n * we use md5 here, it works well on 1k+ bytes, but sucks with fewer data\n * could improve performance using crc32 after benchmarks.\n * @param {Object} data\n * @return {String}\n */\nexport function stringToMD5(data: Buffer | string): string {\n // @ts-ignore update method accepts Buffer or string\n return createHash('md5').update(data).digest('hex');\n}\n\nexport function generateRandomHexString(length = 8): string {\n return pseudoRandomBytes(length).toString('hex');\n}\n\n/**\n * return a masquerade string with its first and last {charNum} and three dots in between.\n * @param {String} str\n * @param {Number} charNum\n * @returns {String}\n */\nexport function mask(str: string, charNum = 3): string {\n return `${str.slice(0, charNum)}...${str.slice(-charNum)}`;\n}\n"],"mappings":";;;;;;;;;;AAAA,IAAAA,WAAA,GAAAC,OAAA;AAEO,MAAMC,2BAA2B,GAAAC,OAAA,CAAAD,2BAAA,GAAG,MAAM;AAE1C,SAASE,iBAAiBA,CAAA,EAAS;EACxC,OAAO,IAAAC,sBAAU,EAACH,2BAA2B,CAAC;AAChD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASI,WAAWA,CAACC,IAAqB,EAAU;EACzD;EACA,OAAO,IAAAF,sBAAU,EAAC,KAAK,CAAC,CAACG,MAAM,CAACD,IAAI,CAAC,CAACE,MAAM,CAAC,KAAK,CAAC;AACrD;AAEO,SAASC,uBAAuBA,CAACC,MAAM,GAAG,CAAC,EAAU;EAC1D,OAAO,IAAAC,6BAAiB,EAACD,MAAM,CAAC,CAACE,QAAQ,CAAC,KAAK,CAAC;AAClD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,IAAIA,CAACC,GAAW,EAAEC,OAAO,GAAG,CAAC,EAAU;EACrD,OAAO,GAAGD,GAAG,CAACE,KAAK,CAAC,CAAC,EAAED,OAAO,CAAC,MAAMD,GAAG,CAACE,KAAK,CAAC,CAACD,OAAO,CAAC,EAAE;AAC5D","ignoreList":[]}
1
+ {"version":3,"file":"crypto-utils.js","names":["_nodeCrypto","require","defaultTarballHashAlgorithm","exports","createTarballHash","createHash","stringToMD5","data","update","digest","generateRandomHexString","length","pseudoRandomBytes","toString","mask","str","charNum","slice"],"sources":["../src/crypto-utils.ts"],"sourcesContent":["import type { Hash } from 'node:crypto';\nimport { createHash, pseudoRandomBytes } from 'node:crypto';\n\nexport const defaultTarballHashAlgorithm = 'sha1';\n\nexport function createTarballHash(): Hash {\n return createHash(defaultTarballHashAlgorithm);\n}\n\n/**\n * Express doesn't do ETAGS with requests <= 1024b\n * we use md5 here, it works well on 1k+ bytes, but sucks with fewer data\n * could improve performance using crc32 after benchmarks.\n * @param {Object} data\n * @return {String}\n */\nexport function stringToMD5(data: Buffer | string): string {\n // @ts-ignore update method accepts Buffer or string\n return createHash('md5').update(data).digest('hex');\n}\n\nexport function generateRandomHexString(length = 8): string {\n return pseudoRandomBytes(length).toString('hex');\n}\n\n/**\n * return a masquerade string with its first and last {charNum} and three dots in between.\n * @param {String} str\n * @param {Number} charNum\n * @returns {String}\n */\nexport function mask(str: string, charNum = 3): string {\n return `${str.slice(0, charNum)}...${str.slice(-charNum)}`;\n}\n"],"mappings":";;;;;;;;;;AACA,IAAAA,WAAA,GAAAC,OAAA;AAEO,MAAMC,2BAA2B,GAAAC,OAAA,CAAAD,2BAAA,GAAG,MAAM;AAE1C,SAASE,iBAAiBA,CAAA,EAAS;EACxC,OAAO,IAAAC,sBAAU,EAACH,2BAA2B,CAAC;AAChD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASI,WAAWA,CAACC,IAAqB,EAAU;EACzD;EACA,OAAO,IAAAF,sBAAU,EAAC,KAAK,CAAC,CAACG,MAAM,CAACD,IAAI,CAAC,CAACE,MAAM,CAAC,KAAK,CAAC;AACrD;AAEO,SAASC,uBAAuBA,CAACC,MAAM,GAAG,CAAC,EAAU;EAC1D,OAAO,IAAAC,6BAAiB,EAACD,MAAM,CAAC,CAACE,QAAQ,CAAC,KAAK,CAAC;AAClD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,IAAIA,CAACC,GAAW,EAAEC,OAAO,GAAG,CAAC,EAAU;EACrD,OAAO,GAAGD,GAAG,CAACE,KAAK,CAAC,CAAC,EAAED,OAAO,CAAC,MAAMD,GAAG,CAACE,KAAK,CAAC,CAACD,OAAO,CAAC,EAAE;AAC5D","ignoreList":[]}
@@ -1,4 +1,4 @@
1
- import { HttpError } from 'http-errors';
1
+ import type { HttpError } from 'http-errors';
2
2
  export declare const API_ERROR: {
3
3
  PASSWORD_SHORT: string;
4
4
  MUST_BE_LOGGED: string;
@@ -1 +1 @@
1
- {"version":3,"file":"error-utils.js","names":["_httpErrors","_interopRequireDefault","require","_constants","e","__esModule","default","API_ERROR","exports","PASSWORD_SHORT","MUST_BE_LOGGED","PLUGIN_ERROR","CONFIG_BAD_FORMAT","BAD_USERNAME_PASSWORD","NO_PACKAGE","PACKAGE_CANNOT_BE_ADDED","BAD_DATA","NOT_ALLOWED","NOT_ALLOWED_PUBLISH","INTERNAL_SERVER_ERROR","UNKNOWN_ERROR","NOT_PACKAGE_UPLINK","UPLINK_OFFLINE_PUBLISH","UPLINK_OFFLINE","NOT_MODIFIED_NO_DATA","CONTENT_MISMATCH","NOT_FILE_UPLINK","MAX_USERS_REACHED","VERSION_NOT_EXIST","NO_SUCH_FILE","UNSUPORTED_REGISTRY_CALL","FILE_NOT_FOUND","REGISTRATION_DISABLED","UNAUTHORIZED_ACCESS","BAD_STATUS_CODE","SERVER_TIME_OUT","PACKAGE_EXIST","BAD_AUTH_HEADER","WEB_DISABLED","DEPRECATED_BASIC_HEADER","BAD_FORMAT_USER_GROUP","RESOURCE_UNAVAILABLE","BAD_PACKAGE_DATA","USERNAME_PASSWORD_REQUIRED","USERNAME_ALREADY_REGISTERED","USERNAME_MISMATCH","SESSION_ID_REQUIRED","SESSION_ID_INVALID","SESSION_TOKEN_EXPIRED","SUPPORT_ERRORS","PLUGIN_MISSING_INTERFACE","TFA_DISABLED","STORAGE_NOT_IMPLEMENT","PARAMETERS_NOT_VALID","APP_ERROR","CONFIG_NOT_VALID","PROFILE_ERROR","PASSWORD_VALIDATION","getError","code","message","httpError","createError","getConflict","HTTP_STATUS","CONFLICT","getBadData","customMessage","getBadRequest","BAD_REQUEST","getInternalError","INTERNAL_ERROR","getUnauthorized","UNAUTHORIZED","getForbidden","FORBIDDEN","getServiceUnavailable","SERVICE_UNAVAILABLE","getNotFound","NOT_FOUND","getCode","statusCode"],"sources":["../src/error-utils.ts"],"sourcesContent":["import createError, { HttpError } from 'http-errors';\n\nimport { HTTP_STATUS } from './constants';\n\nexport const API_ERROR = {\n PASSWORD_SHORT: 'The provided password does not pass the validation',\n MUST_BE_LOGGED: 'You must be logged in to publish packages.',\n PLUGIN_ERROR: 'bug in the auth plugin system',\n CONFIG_BAD_FORMAT: 'config file must be an object',\n BAD_USERNAME_PASSWORD: 'bad username/password, access denied',\n NO_PACKAGE: 'no such package available',\n PACKAGE_CANNOT_BE_ADDED: 'this package cannot be added',\n BAD_DATA: 'bad data',\n NOT_ALLOWED: 'not allowed to access package',\n NOT_ALLOWED_PUBLISH: 'not allowed to publish package',\n INTERNAL_SERVER_ERROR: 'internal server error',\n UNKNOWN_ERROR: 'unknown error',\n NOT_PACKAGE_UPLINK: 'package does not exist on uplink',\n UPLINK_OFFLINE_PUBLISH: 'one of the uplinks is down, refuse to publish',\n UPLINK_OFFLINE: 'uplink is offline',\n NOT_MODIFIED_NO_DATA: 'no data',\n CONTENT_MISMATCH: 'content length mismatch',\n NOT_FILE_UPLINK: \"file doesn't exist on uplink\",\n MAX_USERS_REACHED: 'maximum amount of users reached',\n VERSION_NOT_EXIST: \"this version doesn't exist\",\n NO_SUCH_FILE: 'no such file available',\n UNSUPORTED_REGISTRY_CALL: 'unsupported registry call',\n FILE_NOT_FOUND: 'File not found',\n REGISTRATION_DISABLED: 'user registration disabled',\n UNAUTHORIZED_ACCESS: 'unauthorized access',\n BAD_STATUS_CODE: 'bad status code',\n SERVER_TIME_OUT: 'looks like the server is taking to long to respond',\n PACKAGE_EXIST: 'this package is already present',\n BAD_AUTH_HEADER: 'bad authorization header',\n WEB_DISABLED: 'Web interface is disabled in the config file',\n DEPRECATED_BASIC_HEADER: 'basic authentication is deprecated, please use JWT instead',\n BAD_FORMAT_USER_GROUP: 'user groups is different than an array',\n RESOURCE_UNAVAILABLE: 'resource unavailable',\n BAD_PACKAGE_DATA: 'bad incoming package data',\n USERNAME_PASSWORD_REQUIRED: 'username and password is required',\n USERNAME_ALREADY_REGISTERED: 'username is already registered',\n USERNAME_MISMATCH: 'username does not match logged in user',\n SESSION_ID_REQUIRED: 'session id is required',\n SESSION_ID_INVALID: 'session id is invalid',\n SESSION_TOKEN_EXPIRED: 'session token expired',\n};\n\nexport const SUPPORT_ERRORS = {\n PLUGIN_MISSING_INTERFACE: 'the plugin does not provide implementation of the requested feature',\n TFA_DISABLED: 'the two-factor authentication is not yet supported',\n STORAGE_NOT_IMPLEMENT: 'the storage does not support token saving',\n PARAMETERS_NOT_VALID: 'the parameters are not valid',\n};\n\nexport const APP_ERROR = {\n CONFIG_NOT_VALID: 'CONFIG: it does not look like a valid config file',\n PROFILE_ERROR: 'profile unexpected error',\n PASSWORD_VALIDATION: 'not valid password',\n};\n\nexport type VerdaccioError = HttpError & { code: number };\n\nfunction getError(code: number, message: string): VerdaccioError {\n const httpError = createError(code, message);\n\n httpError.code = code;\n\n return httpError as VerdaccioError;\n}\n\nexport function getConflict(message: string = API_ERROR.PACKAGE_EXIST): VerdaccioError {\n return getError(HTTP_STATUS.CONFLICT, message);\n}\n\nexport function getBadData(customMessage?: string): VerdaccioError {\n return getError(HTTP_STATUS.BAD_DATA, customMessage || API_ERROR.BAD_DATA);\n}\n\nexport function getBadRequest(customMessage: string): VerdaccioError {\n return getError(HTTP_STATUS.BAD_REQUEST, customMessage);\n}\n\nexport function getInternalError(customMessage?: string): VerdaccioError {\n return customMessage\n ? getError(HTTP_STATUS.INTERNAL_ERROR, customMessage)\n : getError(HTTP_STATUS.INTERNAL_ERROR, API_ERROR.UNKNOWN_ERROR);\n}\n\nexport function getUnauthorized(message = 'no credentials provided'): VerdaccioError {\n return getError(HTTP_STATUS.UNAUTHORIZED, message);\n}\n\nexport function getForbidden(message = \"can't use this filename\"): VerdaccioError {\n return getError(HTTP_STATUS.FORBIDDEN, message);\n}\n\nexport function getServiceUnavailable(\n message: string = API_ERROR.RESOURCE_UNAVAILABLE\n): VerdaccioError {\n return getError(HTTP_STATUS.SERVICE_UNAVAILABLE, message);\n}\n\nexport function getNotFound(customMessage?: string): VerdaccioError {\n return getError(HTTP_STATUS.NOT_FOUND, customMessage || API_ERROR.NO_PACKAGE);\n}\n\nexport function getCode(statusCode: number, customMessage: string): VerdaccioError {\n return getError(statusCode, customMessage);\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"error-utils.js","names":["_httpErrors","_interopRequireDefault","require","_constants","e","__esModule","default","API_ERROR","exports","PASSWORD_SHORT","MUST_BE_LOGGED","PLUGIN_ERROR","CONFIG_BAD_FORMAT","BAD_USERNAME_PASSWORD","NO_PACKAGE","PACKAGE_CANNOT_BE_ADDED","BAD_DATA","NOT_ALLOWED","NOT_ALLOWED_PUBLISH","INTERNAL_SERVER_ERROR","UNKNOWN_ERROR","NOT_PACKAGE_UPLINK","UPLINK_OFFLINE_PUBLISH","UPLINK_OFFLINE","NOT_MODIFIED_NO_DATA","CONTENT_MISMATCH","NOT_FILE_UPLINK","MAX_USERS_REACHED","VERSION_NOT_EXIST","NO_SUCH_FILE","UNSUPORTED_REGISTRY_CALL","FILE_NOT_FOUND","REGISTRATION_DISABLED","UNAUTHORIZED_ACCESS","BAD_STATUS_CODE","SERVER_TIME_OUT","PACKAGE_EXIST","BAD_AUTH_HEADER","WEB_DISABLED","DEPRECATED_BASIC_HEADER","BAD_FORMAT_USER_GROUP","RESOURCE_UNAVAILABLE","BAD_PACKAGE_DATA","USERNAME_PASSWORD_REQUIRED","USERNAME_ALREADY_REGISTERED","USERNAME_MISMATCH","SESSION_ID_REQUIRED","SESSION_ID_INVALID","SESSION_TOKEN_EXPIRED","SUPPORT_ERRORS","PLUGIN_MISSING_INTERFACE","TFA_DISABLED","STORAGE_NOT_IMPLEMENT","PARAMETERS_NOT_VALID","APP_ERROR","CONFIG_NOT_VALID","PROFILE_ERROR","PASSWORD_VALIDATION","getError","code","message","httpError","createError","getConflict","HTTP_STATUS","CONFLICT","getBadData","customMessage","getBadRequest","BAD_REQUEST","getInternalError","INTERNAL_ERROR","getUnauthorized","UNAUTHORIZED","getForbidden","FORBIDDEN","getServiceUnavailable","SERVICE_UNAVAILABLE","getNotFound","NOT_FOUND","getCode","statusCode"],"sources":["../src/error-utils.ts"],"sourcesContent":["import type { HttpError } from 'http-errors';\nimport createError from 'http-errors';\n\nimport { HTTP_STATUS } from './constants';\n\nexport const API_ERROR = {\n PASSWORD_SHORT: 'The provided password does not pass the validation',\n MUST_BE_LOGGED: 'You must be logged in to publish packages.',\n PLUGIN_ERROR: 'bug in the auth plugin system',\n CONFIG_BAD_FORMAT: 'config file must be an object',\n BAD_USERNAME_PASSWORD: 'bad username/password, access denied',\n NO_PACKAGE: 'no such package available',\n PACKAGE_CANNOT_BE_ADDED: 'this package cannot be added',\n BAD_DATA: 'bad data',\n NOT_ALLOWED: 'not allowed to access package',\n NOT_ALLOWED_PUBLISH: 'not allowed to publish package',\n INTERNAL_SERVER_ERROR: 'internal server error',\n UNKNOWN_ERROR: 'unknown error',\n NOT_PACKAGE_UPLINK: 'package does not exist on uplink',\n UPLINK_OFFLINE_PUBLISH: 'one of the uplinks is down, refuse to publish',\n UPLINK_OFFLINE: 'uplink is offline',\n NOT_MODIFIED_NO_DATA: 'no data',\n CONTENT_MISMATCH: 'content length mismatch',\n NOT_FILE_UPLINK: \"file doesn't exist on uplink\",\n MAX_USERS_REACHED: 'maximum amount of users reached',\n VERSION_NOT_EXIST: \"this version doesn't exist\",\n NO_SUCH_FILE: 'no such file available',\n UNSUPORTED_REGISTRY_CALL: 'unsupported registry call',\n FILE_NOT_FOUND: 'File not found',\n REGISTRATION_DISABLED: 'user registration disabled',\n UNAUTHORIZED_ACCESS: 'unauthorized access',\n BAD_STATUS_CODE: 'bad status code',\n SERVER_TIME_OUT: 'looks like the server is taking to long to respond',\n PACKAGE_EXIST: 'this package is already present',\n BAD_AUTH_HEADER: 'bad authorization header',\n WEB_DISABLED: 'Web interface is disabled in the config file',\n DEPRECATED_BASIC_HEADER: 'basic authentication is deprecated, please use JWT instead',\n BAD_FORMAT_USER_GROUP: 'user groups is different than an array',\n RESOURCE_UNAVAILABLE: 'resource unavailable',\n BAD_PACKAGE_DATA: 'bad incoming package data',\n USERNAME_PASSWORD_REQUIRED: 'username and password is required',\n USERNAME_ALREADY_REGISTERED: 'username is already registered',\n USERNAME_MISMATCH: 'username does not match logged in user',\n SESSION_ID_REQUIRED: 'session id is required',\n SESSION_ID_INVALID: 'session id is invalid',\n SESSION_TOKEN_EXPIRED: 'session token expired',\n};\n\nexport const SUPPORT_ERRORS = {\n PLUGIN_MISSING_INTERFACE: 'the plugin does not provide implementation of the requested feature',\n TFA_DISABLED: 'the two-factor authentication is not yet supported',\n STORAGE_NOT_IMPLEMENT: 'the storage does not support token saving',\n PARAMETERS_NOT_VALID: 'the parameters are not valid',\n};\n\nexport const APP_ERROR = {\n CONFIG_NOT_VALID: 'CONFIG: it does not look like a valid config file',\n PROFILE_ERROR: 'profile unexpected error',\n PASSWORD_VALIDATION: 'not valid password',\n};\n\nexport type VerdaccioError = HttpError & { code: number };\n\nfunction getError(code: number, message: string): VerdaccioError {\n const httpError = createError(code, message);\n\n httpError.code = code;\n\n return httpError as VerdaccioError;\n}\n\nexport function getConflict(message: string = API_ERROR.PACKAGE_EXIST): VerdaccioError {\n return getError(HTTP_STATUS.CONFLICT, message);\n}\n\nexport function getBadData(customMessage?: string): VerdaccioError {\n return getError(HTTP_STATUS.BAD_DATA, customMessage || API_ERROR.BAD_DATA);\n}\n\nexport function getBadRequest(customMessage: string): VerdaccioError {\n return getError(HTTP_STATUS.BAD_REQUEST, customMessage);\n}\n\nexport function getInternalError(customMessage?: string): VerdaccioError {\n return customMessage\n ? getError(HTTP_STATUS.INTERNAL_ERROR, customMessage)\n : getError(HTTP_STATUS.INTERNAL_ERROR, API_ERROR.UNKNOWN_ERROR);\n}\n\nexport function getUnauthorized(message = 'no credentials provided'): VerdaccioError {\n return getError(HTTP_STATUS.UNAUTHORIZED, message);\n}\n\nexport function getForbidden(message = \"can't use this filename\"): VerdaccioError {\n return getError(HTTP_STATUS.FORBIDDEN, message);\n}\n\nexport function getServiceUnavailable(\n message: string = API_ERROR.RESOURCE_UNAVAILABLE\n): VerdaccioError {\n return getError(HTTP_STATUS.SERVICE_UNAVAILABLE, message);\n}\n\nexport function getNotFound(customMessage?: string): VerdaccioError {\n return getError(HTTP_STATUS.NOT_FOUND, customMessage || API_ERROR.NO_PACKAGE);\n}\n\nexport function getCode(statusCode: number, customMessage: string): VerdaccioError {\n return getError(statusCode, customMessage);\n}\n"],"mappings":";;;;;;;;;;;;;;;AACA,IAAAA,WAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEA,IAAAC,UAAA,GAAAD,OAAA;AAA0C,SAAAD,uBAAAG,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAEnC,MAAMG,SAAS,GAAAC,OAAA,CAAAD,SAAA,GAAG;EACvBE,cAAc,EAAE,oDAAoD;EACpEC,cAAc,EAAE,4CAA4C;EAC5DC,YAAY,EAAE,+BAA+B;EAC7CC,iBAAiB,EAAE,+BAA+B;EAClDC,qBAAqB,EAAE,sCAAsC;EAC7DC,UAAU,EAAE,2BAA2B;EACvCC,uBAAuB,EAAE,8BAA8B;EACvDC,QAAQ,EAAE,UAAU;EACpBC,WAAW,EAAE,+BAA+B;EAC5CC,mBAAmB,EAAE,gCAAgC;EACrDC,qBAAqB,EAAE,uBAAuB;EAC9CC,aAAa,EAAE,eAAe;EAC9BC,kBAAkB,EAAE,kCAAkC;EACtDC,sBAAsB,EAAE,+CAA+C;EACvEC,cAAc,EAAE,mBAAmB;EACnCC,oBAAoB,EAAE,SAAS;EAC/BC,gBAAgB,EAAE,yBAAyB;EAC3CC,eAAe,EAAE,8BAA8B;EAC/CC,iBAAiB,EAAE,iCAAiC;EACpDC,iBAAiB,EAAE,4BAA4B;EAC/CC,YAAY,EAAE,wBAAwB;EACtCC,wBAAwB,EAAE,2BAA2B;EACrDC,cAAc,EAAE,gBAAgB;EAChCC,qBAAqB,EAAE,4BAA4B;EACnDC,mBAAmB,EAAE,qBAAqB;EAC1CC,eAAe,EAAE,iBAAiB;EAClCC,eAAe,EAAE,oDAAoD;EACrEC,aAAa,EAAE,iCAAiC;EAChDC,eAAe,EAAE,0BAA0B;EAC3CC,YAAY,EAAE,8CAA8C;EAC5DC,uBAAuB,EAAE,4DAA4D;EACrFC,qBAAqB,EAAE,wCAAwC;EAC/DC,oBAAoB,EAAE,sBAAsB;EAC5CC,gBAAgB,EAAE,2BAA2B;EAC7CC,0BAA0B,EAAE,mCAAmC;EAC/DC,2BAA2B,EAAE,gCAAgC;EAC7DC,iBAAiB,EAAE,wCAAwC;EAC3DC,mBAAmB,EAAE,wBAAwB;EAC7CC,kBAAkB,EAAE,uBAAuB;EAC3CC,qBAAqB,EAAE;AACzB,CAAC;AAEM,MAAMC,cAAc,GAAAzC,OAAA,CAAAyC,cAAA,GAAG;EAC5BC,wBAAwB,EAAE,qEAAqE;EAC/FC,YAAY,EAAE,oDAAoD;EAClEC,qBAAqB,EAAE,2CAA2C;EAClEC,oBAAoB,EAAE;AACxB,CAAC;AAEM,MAAMC,SAAS,GAAA9C,OAAA,CAAA8C,SAAA,GAAG;EACvBC,gBAAgB,EAAE,mDAAmD;EACrEC,aAAa,EAAE,0BAA0B;EACzCC,mBAAmB,EAAE;AACvB,CAAC;AAID,SAASC,QAAQA,CAACC,IAAY,EAAEC,OAAe,EAAkB;EAC/D,MAAMC,SAAS,GAAG,IAAAC,mBAAW,EAACH,IAAI,EAAEC,OAAO,CAAC;EAE5CC,SAAS,CAACF,IAAI,GAAGA,IAAI;EAErB,OAAOE,SAAS;AAClB;AAEO,SAASE,WAAWA,CAACH,OAAe,GAAGrD,SAAS,CAAC6B,aAAa,EAAkB;EACrF,OAAOsB,QAAQ,CAACM,sBAAW,CAACC,QAAQ,EAAEL,OAAO,CAAC;AAChD;AAEO,SAASM,UAAUA,CAACC,aAAsB,EAAkB;EACjE,OAAOT,QAAQ,CAACM,sBAAW,CAAChD,QAAQ,EAAEmD,aAAa,IAAI5D,SAAS,CAACS,QAAQ,CAAC;AAC5E;AAEO,SAASoD,aAAaA,CAACD,aAAqB,EAAkB;EACnE,OAAOT,QAAQ,CAACM,sBAAW,CAACK,WAAW,EAAEF,aAAa,CAAC;AACzD;AAEO,SAASG,gBAAgBA,CAACH,aAAsB,EAAkB;EACvE,OAAOA,aAAa,GAChBT,QAAQ,CAACM,sBAAW,CAACO,cAAc,EAAEJ,aAAa,CAAC,GACnDT,QAAQ,CAACM,sBAAW,CAACO,cAAc,EAAEhE,SAAS,CAACa,aAAa,CAAC;AACnE;AAEO,SAASoD,eAAeA,CAACZ,OAAO,GAAG,yBAAyB,EAAkB;EACnF,OAAOF,QAAQ,CAACM,sBAAW,CAACS,YAAY,EAAEb,OAAO,CAAC;AACpD;AAEO,SAASc,YAAYA,CAACd,OAAO,GAAG,yBAAyB,EAAkB;EAChF,OAAOF,QAAQ,CAACM,sBAAW,CAACW,SAAS,EAAEf,OAAO,CAAC;AACjD;AAEO,SAASgB,qBAAqBA,CACnChB,OAAe,GAAGrD,SAAS,CAACkC,oBAAoB,EAChC;EAChB,OAAOiB,QAAQ,CAACM,sBAAW,CAACa,mBAAmB,EAAEjB,OAAO,CAAC;AAC3D;AAEO,SAASkB,WAAWA,CAACX,aAAsB,EAAkB;EAClE,OAAOT,QAAQ,CAACM,sBAAW,CAACe,SAAS,EAAEZ,aAAa,IAAI5D,SAAS,CAACO,UAAU,CAAC;AAC/E;AAEO,SAASkE,OAAOA,CAACC,UAAkB,EAAEd,aAAqB,EAAkB;EACjF,OAAOT,QAAQ,CAACuB,UAAU,EAAEd,aAAa,CAAC;AAC5C","ignoreList":[]}
@@ -1,4 +1,4 @@
1
- import { Manifest } from '@verdaccio/types';
1
+ import type { Manifest } from '@verdaccio/types';
2
2
  /**
3
3
  * Function filters out bad semver versions and sorts the array.
4
4
  * @return {Array} sorted Array
@@ -1 +1 @@
1
- {"version":3,"file":"pkg-utils.js","names":["_nodeFs","_interopRequireDefault","require","_nodePath","_semver","_constants","e","__esModule","default","semverSort","listVersions","filter","x","semver","parse","sort","compareLoose","map","String","semverSanitize","version","valid","coerce","includePrerelease","getLatest","pkg","Object","keys","versions","length","Error","latest","DIST_TAGS","mergeVersions","local","upstream","i","lte","readme","getPackageJson","packagePath","relativePath","packageJsonPath","path","join","JSON","fs","readFileSync"],"sources":["../src/pkg-utils.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\nimport semver from 'semver';\n\nimport { Manifest } from '@verdaccio/types';\n\nimport { DIST_TAGS } from './constants';\n\n/**\n * Function filters out bad semver versions and sorts the array.\n * @return {Array} sorted Array\n */\nexport function semverSort(listVersions: string[]): string[] {\n return listVersions\n .filter(function (x): boolean {\n if (!semver.parse(x, true)) {\n return false;\n }\n return true;\n })\n .sort(semver.compareLoose)\n .map(String);\n}\n\n/**\n * Sanitize a version string to a valid semver version.\n * @param version - The version string to sanitize.\n * @returns The sanitized version string.\n */\nexport function semverSanitize(version: string): string {\n return (\n semver.valid(version) || semver.coerce(version, { includePrerelease: true })?.version || ''\n );\n}\n\n/**\n * Get the latest publihsed version of a package.\n * @param package metadata\n **/\nexport function getLatest(pkg: Manifest): string {\n const listVersions: string[] = Object.keys(pkg.versions);\n if (listVersions.length < 1) {\n throw Error('cannot get lastest version of none');\n }\n\n const versions: string[] = semverSort(listVersions);\n const latest: string | undefined = pkg[DIST_TAGS]?.latest ? pkg[DIST_TAGS].latest : versions[0];\n\n return latest;\n}\n\n/**\n * Function gets a local info and an info from uplinks and tries to merge it\n exported for unit tests only.\n * @param {*} local\n * @param {*} upstream\n * @param {*} config sds\n * @deprecated use @verdaccio/storage mergeVersions method\n */\n// @deprecated\nexport function mergeVersions(local: Manifest, upstream: Manifest) {\n // copy new versions to a cache\n // NOTE: if a certain version was updated, we can't refresh it reliably\n for (const i in upstream.versions) {\n if (typeof local.versions[i] === 'undefined') {\n local.versions[i] = upstream.versions[i];\n }\n }\n\n for (const i in upstream[DIST_TAGS]) {\n if (local[DIST_TAGS][i] !== upstream[DIST_TAGS][i]) {\n if (!local[DIST_TAGS][i] || semver.lte(local[DIST_TAGS][i], upstream[DIST_TAGS][i])) {\n local[DIST_TAGS][i] = upstream[DIST_TAGS][i];\n }\n if (i === 'latest' && local[DIST_TAGS][i] === upstream[DIST_TAGS][i]) {\n // if remote has more fresh package, we should borrow its readme\n local.readme = upstream.readme;\n }\n }\n }\n}\n\n/**\n * Get package informations from package.json\n * @param packagePath - The path to the package.json file.\n * @returns The package.json content\n */\nexport function getPackageJson(packagePath: string, relativePath: string): Record<string, unknown> {\n const packageJsonPath = path.join(packagePath, relativePath, 'package.json');\n return JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"pkg-utils.js","names":["_nodeFs","_interopRequireDefault","require","_nodePath","_semver","_constants","e","__esModule","default","semverSort","listVersions","filter","x","semver","parse","sort","compareLoose","map","String","semverSanitize","version","valid","coerce","includePrerelease","getLatest","pkg","Object","keys","versions","length","Error","latest","DIST_TAGS","mergeVersions","local","upstream","i","lte","readme","getPackageJson","packagePath","relativePath","packageJsonPath","path","join","JSON","fs","readFileSync"],"sources":["../src/pkg-utils.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path from 'node:path';\nimport semver from 'semver';\n\nimport type { Manifest } from '@verdaccio/types';\n\nimport { DIST_TAGS } from './constants';\n\n/**\n * Function filters out bad semver versions and sorts the array.\n * @return {Array} sorted Array\n */\nexport function semverSort(listVersions: string[]): string[] {\n return listVersions\n .filter(function (x): boolean {\n if (!semver.parse(x, true)) {\n return false;\n }\n return true;\n })\n .sort(semver.compareLoose)\n .map(String);\n}\n\n/**\n * Sanitize a version string to a valid semver version.\n * @param version - The version string to sanitize.\n * @returns The sanitized version string.\n */\nexport function semverSanitize(version: string): string {\n return (\n semver.valid(version) || semver.coerce(version, { includePrerelease: true })?.version || ''\n );\n}\n\n/**\n * Get the latest publihsed version of a package.\n * @param package metadata\n **/\nexport function getLatest(pkg: Manifest): string {\n const listVersions: string[] = Object.keys(pkg.versions);\n if (listVersions.length < 1) {\n throw Error('cannot get lastest version of none');\n }\n\n const versions: string[] = semverSort(listVersions);\n const latest: string | undefined = pkg[DIST_TAGS]?.latest ? pkg[DIST_TAGS].latest : versions[0];\n\n return latest;\n}\n\n/**\n * Function gets a local info and an info from uplinks and tries to merge it\n exported for unit tests only.\n * @param {*} local\n * @param {*} upstream\n * @param {*} config sds\n * @deprecated use @verdaccio/storage mergeVersions method\n */\n// @deprecated\nexport function mergeVersions(local: Manifest, upstream: Manifest) {\n // copy new versions to a cache\n // NOTE: if a certain version was updated, we can't refresh it reliably\n for (const i in upstream.versions) {\n if (typeof local.versions[i] === 'undefined') {\n local.versions[i] = upstream.versions[i];\n }\n }\n\n for (const i in upstream[DIST_TAGS]) {\n if (local[DIST_TAGS][i] !== upstream[DIST_TAGS][i]) {\n if (!local[DIST_TAGS][i] || semver.lte(local[DIST_TAGS][i], upstream[DIST_TAGS][i])) {\n local[DIST_TAGS][i] = upstream[DIST_TAGS][i];\n }\n if (i === 'latest' && local[DIST_TAGS][i] === upstream[DIST_TAGS][i]) {\n // if remote has more fresh package, we should borrow its readme\n local.readme = upstream.readme;\n }\n }\n }\n}\n\n/**\n * Get package informations from package.json\n * @param packagePath - The path to the package.json file.\n * @returns The package.json content\n */\nexport function getPackageJson(packagePath: string, relativePath: string): Record<string, unknown> {\n const packageJsonPath = path.join(packagePath, relativePath, 'package.json');\n return JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,8 +1,8 @@
1
1
  /// <reference types="node" />
2
2
  import type { Express, RequestHandler } from 'express';
3
- import { Readable, Writable } from 'node:stream';
4
- import { AllowAccess, Callback, Config, Logger, Manifest, PackageAccess, RemoteUser, Token, TokenFilter } from '@verdaccio/types';
5
- import { VerdaccioError, searchUtils } from '.';
3
+ import type { Readable, Writable } from 'node:stream';
4
+ import type { AllowAccess, Callback, Config, Logger, Manifest, PackageAccess, RemoteUser, Token, TokenFilter } from '@verdaccio/types';
5
+ import type { VerdaccioError, searchUtils } from '.';
6
6
  export interface PluginOptions {
7
7
  config: Config;
8
8
  logger: Logger;
@@ -1 +1 @@
1
- {"version":3,"file":"plugin-utils.js","names":["Plugin","version","constructor","config","options","getVersion","exports"],"sources":["../src/plugin-utils.ts"],"sourcesContent":["import type { Express, RequestHandler } from 'express';\nimport { Readable, Writable } from 'node:stream';\n\nimport {\n AllowAccess,\n Callback,\n Config,\n Logger,\n Manifest,\n PackageAccess,\n RemoteUser,\n Token,\n TokenFilter,\n} from '@verdaccio/types';\n\nimport { VerdaccioError, searchUtils } from '.';\n\nexport interface PluginOptions {\n config: Config;\n logger: Logger;\n}\n\n/**\n * Base Plugin Class\n *\n * Set of utilities for developing plugins.\n */\nexport class Plugin<PluginConfig> {\n static version = 1;\n public readonly version: number;\n public readonly config: PluginConfig | unknown;\n public readonly options: PluginOptions;\n public constructor(config: PluginConfig, options: PluginOptions) {\n this.version = Plugin.version;\n this.config = config;\n this.options = options;\n }\n\n public getVersion() {\n return this.version;\n }\n}\n\n// --- STORAGE PLUGIN ---\n\n/**\n * Storage Handler\n *\n * Used in storage plugin for managing packages and tarballs.\n */\nexport interface StorageHandler {\n logger: Logger;\n deletePackage(fileName: string): Promise<void>;\n removePackage(packageName: string): Promise<void>;\n // next packages migration (this list is meant to replace the callback parent functions)\n updatePackage(\n packageName: string,\n handleUpdate: (manifest: Manifest) => Promise<Manifest>\n ): Promise<Manifest>;\n readPackage(packageName: string): Promise<Manifest>;\n savePackage(packageName: string, manifest: Manifest): Promise<void>;\n readTarball(fileName: string, { signal }: { signal: AbortSignal }): Promise<Readable>;\n createPackage(packageName: string, manifest: Manifest): Promise<void>;\n writeTarball(fileName: string, { signal }: { signal: AbortSignal }): Promise<Writable>;\n // verify if tarball exist in the storage\n hasTarball(fileName: string): Promise<boolean>;\n // verify if package exist in the storage\n hasPackage(packageName: string): Promise<boolean>;\n}\n\n/**\n * Storage Plugin interface\n *\n * https://verdaccio.org/docs/plugin-storage\n */\nexport interface Storage<PluginConfig> extends Plugin<PluginConfig> {\n add(packageName: string): Promise<void>;\n remove(packageName: string): Promise<void>;\n get(): Promise<string[]>;\n init(): Promise<void>;\n getSecret(): Promise<string>;\n setSecret(secret: string): Promise<any>;\n getPackageStorage(packageName: string): StorageHandler;\n search(query: searchUtils.SearchQuery): Promise<searchUtils.SearchItem[]>;\n saveToken(token: Token): Promise<any>;\n deleteToken(user: string, tokenKey: string): Promise<any>;\n readTokens(filter: TokenFilter): Promise<Token[]>;\n}\n\n// --- MIDDLEWARE PLUGIN ---\n\n/**\n * Middleware Plugin Interface\n *\n * https://verdaccio.org/docs/plugin-middleware\n *\n * This function allow add middleware to the application.\n *\n * ```ts\n * import express, { Request, Response } from 'express';\n * \n * class Middleware extends Plugin {\n * // instances of auth and storage are injected\n * register_middlewares(app, auth, storage) {\n * const router = express.Router();\n * router.post('/my-endpoint', (req: Request, res: Response): void => {\n res.status(200).end();\n });\n * }\n * }\n *\n * const [plugin] = await asyncLoadPlugin(...);\n * plugin.register_middlewares(app, auth, storage);\n * ```\n */\nexport interface ExpressMiddleware<PluginConfig, Storage, Auth> extends Plugin<PluginConfig> {\n register_middlewares(app: Express, auth: Auth, storage: Storage): void;\n}\n\n// --- AUTH PLUGIN ---\n\nexport type AuthCallback = (error: VerdaccioError | null, groups?: string[] | false) => void;\n\nexport type AuthAccessCallback = (error: VerdaccioError | null, access?: boolean) => void;\nexport type AuthUserCallback = (error: VerdaccioError | null, access?: boolean | string) => void;\nexport type AuthChangePasswordCallback = (error: VerdaccioError | null, access?: boolean) => void;\nexport type AccessCallback = (error: VerdaccioError | null, ok?: boolean) => void;\n\nexport interface AuthPluginPackage {\n packageName: string;\n packageVersion?: string;\n tag?: string;\n}\n\n/**\n * Authentication Plugin Interface\n *\n * https://verdaccio.org/docs/plugin-auth\n */\nexport interface Auth<T> extends Plugin<T> {\n /**\n * Handles the authenticated method.\n * ```ts\n * class Auth {\n public authenticate(user: string, password: string, done: AuthCallback): void {\n if (!password) {\n return done(errorUtils.getUnauthorized(API_ERROR.BAD_USERNAME_PASSWORD));\n }\n // always return an array of users\n return done(null, [user]); \n * }\n * ```\n */\n authenticate(user: string, password: string, cb: AuthCallback): void;\n /**\n * Handles the authenticated method.\n * ```ts\n * class Auth {\n public adduser(user: string, password: string, done: AuthCallback): void {\n if (!password) {\n return done(errorUtils.getUnauthorized(API_ERROR.BAD_USERNAME_PASSWORD));\n }\n // return boolean\n return done(null, true); \n * }\n * ```\n */\n adduser?(user: string, password: string, cb: AuthUserCallback): void;\n changePassword?(\n user: string,\n password: string,\n newPassword: string,\n cb: AuthChangePasswordCallback\n ): void;\n allow_publish?(user: RemoteUser, pkg: T & PackageAccess, cb: AuthAccessCallback): void;\n allow_publish?(user: RemoteUser, pkg: AllowAccess & PackageAccess, cb: AuthAccessCallback): void;\n allow_access?(user: RemoteUser, pkg: T & PackageAccess, cb: AccessCallback): void;\n allow_access?(user: RemoteUser, pkg: AllowAccess & PackageAccess, cb: AccessCallback): void;\n allow_unpublish?(user: RemoteUser, pkg: T & PackageAccess, cb: AuthAccessCallback): void;\n allow_unpublish?(\n user: RemoteUser,\n pkg: AllowAccess & PackageAccess,\n cb: AuthAccessCallback\n ): void;\n apiJWTmiddleware?(helpers: any): RequestHandler;\n}\n\nexport interface IBasicAuth {\n authenticate(user: string, password: string, cb: Callback): void;\n invalidateToken?(token: string): Promise<void>;\n changePassword(user: string, password: string, newPassword: string, cb: Callback): void;\n allow_access(pkg: AuthPluginPackage, user: RemoteUser, callback: Callback): void;\n add_user(user: string, password: string, cb: Callback): any;\n}\n\n// --- FILTER PLUGIN ---\n\n/**\n * Filter Plugin Interface\n *\n * https://verdaccio.org/docs/plugin-filter\n */\nexport interface ManifestFilter<T> extends Plugin<T> {\n filter_metadata(manifest: Manifest): Promise<Manifest>;\n}\n"],"mappings":";;;;;;AAsBA;AACA;AACA;AACA;AACA;AACO,MAAMA,MAAM,CAAe;EAChC,OAAOC,OAAO,GAAG,CAAC;EAIXC,WAAWA,CAACC,MAAoB,EAAEC,OAAsB,EAAE;IAC/D,IAAI,CAACH,OAAO,GAAGD,MAAM,CAACC,OAAO;IAC7B,IAAI,CAACE,MAAM,GAAGA,MAAM;IACpB,IAAI,CAACC,OAAO,GAAGA,OAAO;EACxB;EAEOC,UAAUA,CAAA,EAAG;IAClB,OAAO,IAAI,CAACJ,OAAO;EACrB;AACF;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAqBA;AACA;AACA;AACA;AACA;;AAeA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAKA;;AAeA;AACA;AACA;AACA;AACA;;AAyDA;;AAEA;AACA;AACA;AACA;AACA;AAJAK,OAAA,CAAAN,MAAA,GAAAA,MAAA","ignoreList":[]}
1
+ {"version":3,"file":"plugin-utils.js","names":["Plugin","version","constructor","config","options","getVersion","exports"],"sources":["../src/plugin-utils.ts"],"sourcesContent":["import type { Express, RequestHandler } from 'express';\nimport type { Readable, Writable } from 'node:stream';\n\nimport type {\n AllowAccess,\n Callback,\n Config,\n Logger,\n Manifest,\n PackageAccess,\n RemoteUser,\n Token,\n TokenFilter,\n} from '@verdaccio/types';\n\nimport type { VerdaccioError, searchUtils } from '.';\n\nexport interface PluginOptions {\n config: Config;\n logger: Logger;\n}\n\n/**\n * Base Plugin Class\n *\n * Set of utilities for developing plugins.\n */\nexport class Plugin<PluginConfig> {\n static version = 1;\n public readonly version: number;\n public readonly config: PluginConfig | unknown;\n public readonly options: PluginOptions;\n public constructor(config: PluginConfig, options: PluginOptions) {\n this.version = Plugin.version;\n this.config = config;\n this.options = options;\n }\n\n public getVersion() {\n return this.version;\n }\n}\n\n// --- STORAGE PLUGIN ---\n\n/**\n * Storage Handler\n *\n * Used in storage plugin for managing packages and tarballs.\n */\nexport interface StorageHandler {\n logger: Logger;\n deletePackage(fileName: string): Promise<void>;\n removePackage(packageName: string): Promise<void>;\n // next packages migration (this list is meant to replace the callback parent functions)\n updatePackage(\n packageName: string,\n handleUpdate: (manifest: Manifest) => Promise<Manifest>\n ): Promise<Manifest>;\n readPackage(packageName: string): Promise<Manifest>;\n savePackage(packageName: string, manifest: Manifest): Promise<void>;\n readTarball(fileName: string, { signal }: { signal: AbortSignal }): Promise<Readable>;\n createPackage(packageName: string, manifest: Manifest): Promise<void>;\n writeTarball(fileName: string, { signal }: { signal: AbortSignal }): Promise<Writable>;\n // verify if tarball exist in the storage\n hasTarball(fileName: string): Promise<boolean>;\n // verify if package exist in the storage\n hasPackage(packageName: string): Promise<boolean>;\n}\n\n/**\n * Storage Plugin interface\n *\n * https://verdaccio.org/docs/plugin-storage\n */\nexport interface Storage<PluginConfig> extends Plugin<PluginConfig> {\n add(packageName: string): Promise<void>;\n remove(packageName: string): Promise<void>;\n get(): Promise<string[]>;\n init(): Promise<void>;\n getSecret(): Promise<string>;\n setSecret(secret: string): Promise<any>;\n getPackageStorage(packageName: string): StorageHandler;\n search(query: searchUtils.SearchQuery): Promise<searchUtils.SearchItem[]>;\n saveToken(token: Token): Promise<any>;\n deleteToken(user: string, tokenKey: string): Promise<any>;\n readTokens(filter: TokenFilter): Promise<Token[]>;\n}\n\n// --- MIDDLEWARE PLUGIN ---\n\n/**\n * Middleware Plugin Interface\n *\n * https://verdaccio.org/docs/plugin-middleware\n *\n * This function allow add middleware to the application.\n *\n * ```ts\n * import express, { Request, Response } from 'express';\n * \n * class Middleware extends Plugin {\n * // instances of auth and storage are injected\n * register_middlewares(app, auth, storage) {\n * const router = express.Router();\n * router.post('/my-endpoint', (req: Request, res: Response): void => {\n res.status(200).end();\n });\n * }\n * }\n *\n * const [plugin] = await asyncLoadPlugin(...);\n * plugin.register_middlewares(app, auth, storage);\n * ```\n */\nexport interface ExpressMiddleware<PluginConfig, Storage, Auth> extends Plugin<PluginConfig> {\n register_middlewares(app: Express, auth: Auth, storage: Storage): void;\n}\n\n// --- AUTH PLUGIN ---\n\nexport type AuthCallback = (error: VerdaccioError | null, groups?: string[] | false) => void;\n\nexport type AuthAccessCallback = (error: VerdaccioError | null, access?: boolean) => void;\nexport type AuthUserCallback = (error: VerdaccioError | null, access?: boolean | string) => void;\nexport type AuthChangePasswordCallback = (error: VerdaccioError | null, access?: boolean) => void;\nexport type AccessCallback = (error: VerdaccioError | null, ok?: boolean) => void;\n\nexport interface AuthPluginPackage {\n packageName: string;\n packageVersion?: string;\n tag?: string;\n}\n\n/**\n * Authentication Plugin Interface\n *\n * https://verdaccio.org/docs/plugin-auth\n */\nexport interface Auth<T> extends Plugin<T> {\n /**\n * Handles the authenticated method.\n * ```ts\n * class Auth {\n public authenticate(user: string, password: string, done: AuthCallback): void {\n if (!password) {\n return done(errorUtils.getUnauthorized(API_ERROR.BAD_USERNAME_PASSWORD));\n }\n // always return an array of users\n return done(null, [user]); \n * }\n * ```\n */\n authenticate(user: string, password: string, cb: AuthCallback): void;\n /**\n * Handles the authenticated method.\n * ```ts\n * class Auth {\n public adduser(user: string, password: string, done: AuthCallback): void {\n if (!password) {\n return done(errorUtils.getUnauthorized(API_ERROR.BAD_USERNAME_PASSWORD));\n }\n // return boolean\n return done(null, true); \n * }\n * ```\n */\n adduser?(user: string, password: string, cb: AuthUserCallback): void;\n changePassword?(\n user: string,\n password: string,\n newPassword: string,\n cb: AuthChangePasswordCallback\n ): void;\n allow_publish?(user: RemoteUser, pkg: T & PackageAccess, cb: AuthAccessCallback): void;\n allow_publish?(user: RemoteUser, pkg: AllowAccess & PackageAccess, cb: AuthAccessCallback): void;\n allow_access?(user: RemoteUser, pkg: T & PackageAccess, cb: AccessCallback): void;\n allow_access?(user: RemoteUser, pkg: AllowAccess & PackageAccess, cb: AccessCallback): void;\n allow_unpublish?(user: RemoteUser, pkg: T & PackageAccess, cb: AuthAccessCallback): void;\n allow_unpublish?(\n user: RemoteUser,\n pkg: AllowAccess & PackageAccess,\n cb: AuthAccessCallback\n ): void;\n apiJWTmiddleware?(helpers: any): RequestHandler;\n}\n\nexport interface IBasicAuth {\n authenticate(user: string, password: string, cb: Callback): void;\n invalidateToken?(token: string): Promise<void>;\n changePassword(user: string, password: string, newPassword: string, cb: Callback): void;\n allow_access(pkg: AuthPluginPackage, user: RemoteUser, callback: Callback): void;\n add_user(user: string, password: string, cb: Callback): any;\n}\n\n// --- FILTER PLUGIN ---\n\n/**\n * Filter Plugin Interface\n *\n * https://verdaccio.org/docs/plugin-filter\n */\nexport interface ManifestFilter<T> extends Plugin<T> {\n filter_metadata(manifest: Manifest): Promise<Manifest>;\n}\n"],"mappings":";;;;;;AAsBA;AACA;AACA;AACA;AACA;AACO,MAAMA,MAAM,CAAe;EAChC,OAAOC,OAAO,GAAG,CAAC;EAIXC,WAAWA,CAACC,MAAoB,EAAEC,OAAsB,EAAE;IAC/D,IAAI,CAACH,OAAO,GAAGD,MAAM,CAACC,OAAO;IAC7B,IAAI,CAACE,MAAM,GAAGA,MAAM;IACpB,IAAI,CAACC,OAAO,GAAGA,OAAO;EACxB;EAEOC,UAAUA,CAAA,EAAG;IAClB,OAAO,IAAI,CAACJ,OAAO;EACrB;AACF;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAqBA;AACA;AACA;AACA;AACA;;AAeA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAKA;;AAeA;AACA;AACA;AACA;AACA;;AAyDA;;AAEA;AACA;AACA;AACA;AACA;AAJAK,OAAA,CAAAN,MAAA,GAAAA,MAAA","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"publish-manifest.js","names":["_ajv","_interopRequireDefault","require","e","__esModule","default","ajv","Ajv","schema","type","properties","name","versions","maxProperties","_attachments","required","additionalProperties","validate","compile","validatePublishSingleVersion","manifest"],"sources":["../../src/schemes/publish-manifest.ts"],"sourcesContent":["import Ajv, { JSONSchemaType } from 'ajv';\n\nconst ajv = new Ajv();\n\n// FIXME: this could extend from @verdaccio/types but we need\n// schemas from @verdaccio/types to be able to validate them\ninterface Manifest {\n name: string;\n versions: object;\n _attachments: object;\n}\n\nconst schema: JSONSchemaType<Manifest> = {\n type: 'object',\n properties: {\n name: { type: 'string' },\n versions: { type: 'object', maxProperties: 1 },\n _attachments: { type: 'object', maxProperties: 1 },\n },\n required: ['name', 'versions', '_attachments'],\n additionalProperties: true,\n};\n\n// validate is a type guard for MyData - type is inferred from schema type\nconst validate = ajv.compile(schema);\n\n/**\n * Validate if a manifest has the correct structure when a new package\n * is being created. The properties name, versions and _attachments must contain 1 element.\n * @param data a manifest object\n * @returns boolean\n */\nexport function validatePublishSingleVersion(manifest: any) {\n if (!manifest) {\n return false;\n }\n return validate(manifest);\n}\n"],"mappings":";;;;;;AAAA,IAAAA,IAAA,GAAAC,sBAAA,CAAAC,OAAA;AAA0C,SAAAD,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAE1C,MAAMG,GAAG,GAAG,IAAIC,YAAG,CAAC,CAAC;;AAErB;AACA;;AAOA,MAAMC,MAAgC,GAAG;EACvCC,IAAI,EAAE,QAAQ;EACdC,UAAU,EAAE;IACVC,IAAI,EAAE;MAAEF,IAAI,EAAE;IAAS,CAAC;IACxBG,QAAQ,EAAE;MAAEH,IAAI,EAAE,QAAQ;MAAEI,aAAa,EAAE;IAAE,CAAC;IAC9CC,YAAY,EAAE;MAAEL,IAAI,EAAE,QAAQ;MAAEI,aAAa,EAAE;IAAE;EACnD,CAAC;EACDE,QAAQ,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,cAAc,CAAC;EAC9CC,oBAAoB,EAAE;AACxB,CAAC;;AAED;AACA,MAAMC,QAAQ,GAAGX,GAAG,CAACY,OAAO,CAACV,MAAM,CAAC;;AAEpC;AACA;AACA;AACA;AACA;AACA;AACO,SAASW,4BAA4BA,CAACC,QAAa,EAAE;EAC1D,IAAI,CAACA,QAAQ,EAAE;IACb,OAAO,KAAK;EACd;EACA,OAAOH,QAAQ,CAACG,QAAQ,CAAC;AAC3B","ignoreList":[]}
1
+ {"version":3,"file":"publish-manifest.js","names":["_ajv","_interopRequireDefault","require","e","__esModule","default","ajv","Ajv","schema","type","properties","name","versions","maxProperties","_attachments","required","additionalProperties","validate","compile","validatePublishSingleVersion","manifest"],"sources":["../../src/schemes/publish-manifest.ts"],"sourcesContent":["import type { JSONSchemaType } from 'ajv';\nimport Ajv from 'ajv';\n\nconst ajv = new Ajv();\n\n// FIXME: this could extend from @verdaccio/types but we need\n// schemas from @verdaccio/types to be able to validate them\ninterface Manifest {\n name: string;\n versions: object;\n _attachments: object;\n}\n\nconst schema: JSONSchemaType<Manifest> = {\n type: 'object',\n properties: {\n name: { type: 'string' },\n versions: { type: 'object', maxProperties: 1 },\n _attachments: { type: 'object', maxProperties: 1 },\n },\n required: ['name', 'versions', '_attachments'],\n additionalProperties: true,\n};\n\n// validate is a type guard for MyData - type is inferred from schema type\nconst validate = ajv.compile(schema);\n\n/**\n * Validate if a manifest has the correct structure when a new package\n * is being created. The properties name, versions and _attachments must contain 1 element.\n * @param data a manifest object\n * @returns boolean\n */\nexport function validatePublishSingleVersion(manifest: any) {\n if (!manifest) {\n return false;\n }\n return validate(manifest);\n}\n"],"mappings":";;;;;;AACA,IAAAA,IAAA,GAAAC,sBAAA,CAAAC,OAAA;AAAsB,SAAAD,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAEtB,MAAMG,GAAG,GAAG,IAAIC,YAAG,CAAC,CAAC;;AAErB;AACA;;AAOA,MAAMC,MAAgC,GAAG;EACvCC,IAAI,EAAE,QAAQ;EACdC,UAAU,EAAE;IACVC,IAAI,EAAE;MAAEF,IAAI,EAAE;IAAS,CAAC;IACxBG,QAAQ,EAAE;MAAEH,IAAI,EAAE,QAAQ;MAAEI,aAAa,EAAE;IAAE,CAAC;IAC9CC,YAAY,EAAE;MAAEL,IAAI,EAAE,QAAQ;MAAEI,aAAa,EAAE;IAAE;EACnD,CAAC;EACDE,QAAQ,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,cAAc,CAAC;EAC9CC,oBAAoB,EAAE;AACxB,CAAC;;AAED;AACA,MAAMC,QAAQ,GAAGX,GAAG,CAACY,OAAO,CAACV,MAAM,CAAC;;AAEpC;AACA;AACA;AACA;AACA;AACA;AACO,SAASW,4BAA4BA,CAACC,QAAa,EAAE;EAC1D,IAAI,CAACA,QAAQ,EAAE;IACb,OAAO,KAAK;EACd;EACA,OAAOH,QAAQ,CAACG,QAAQ,CAAC;AAC3B","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"unpublish-manifest.js","names":["_ajv","_interopRequireDefault","require","e","__esModule","default","ajv","Ajv","schema","type","properties","name","versions","minProperties","_rev","_id","time","created","modified","patternProperties","additionalProperties","readme","latest","required","validate","compile","validateUnPublishSingleVersion","manifest"],"sources":["../../src/schemes/unpublish-manifest.ts"],"sourcesContent":["import Ajv, { JSONSchemaType } from 'ajv';\n\nconst ajv = new Ajv();\n\ninterface Manifest {\n name: string;\n versions: Record<string, unknown>;\n _rev: string;\n _id: string;\n time: {\n created: string;\n modified: string;\n [key: string]: string; // Allows pattern properties such as version numbers\n };\n readme: string;\n 'dist-tags': {\n latest: string;\n [key: string]: unknown; // Allows additional properties\n };\n}\n\n// @ts-ignore\nconst schema: JSONSchemaType<Manifest> = {\n type: 'object',\n properties: {\n name: { type: 'string' },\n versions: { type: 'object', minProperties: 1 },\n _rev: { type: 'string' },\n _id: { type: 'string' },\n time: {\n type: 'object',\n properties: {\n created: { type: 'string' },\n modified: { type: 'string' },\n },\n patternProperties: {\n '^[0-9]+\\\\.[0-9]+\\\\.[0-9]+-\\\\d+$': { type: 'string' },\n },\n additionalProperties: true,\n },\n readme: { type: 'string' },\n 'dist-tags': {\n type: 'object',\n properties: {\n latest: { type: 'string' },\n },\n required: ['latest'],\n additionalProperties: true,\n },\n },\n required: ['name', 'versions', 'dist-tags', '_rev', '_id', 'readme', 'time'],\n additionalProperties: true,\n};\n\n// validate is a type guard for MyData - type is inferred from schema type\nconst validate = ajv.compile(schema);\n\n/**\n * Validate if a manifest has the correct structure when a new package\n * is being created. The properties name, versions and _attachments must contain 1 element.\n * @param data a manifest object\n * @returns boolean\n */\nexport function validateUnPublishSingleVersion(manifest: any) {\n if (!manifest) {\n return false;\n }\n return validate(manifest);\n}\n"],"mappings":";;;;;;AAAA,IAAAA,IAAA,GAAAC,sBAAA,CAAAC,OAAA;AAA0C,SAAAD,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAE1C,MAAMG,GAAG,GAAG,IAAIC,YAAG,CAAC,CAAC;AAmBrB;AACA,MAAMC,MAAgC,GAAG;EACvCC,IAAI,EAAE,QAAQ;EACdC,UAAU,EAAE;IACVC,IAAI,EAAE;MAAEF,IAAI,EAAE;IAAS,CAAC;IACxBG,QAAQ,EAAE;MAAEH,IAAI,EAAE,QAAQ;MAAEI,aAAa,EAAE;IAAE,CAAC;IAC9CC,IAAI,EAAE;MAAEL,IAAI,EAAE;IAAS,CAAC;IACxBM,GAAG,EAAE;MAAEN,IAAI,EAAE;IAAS,CAAC;IACvBO,IAAI,EAAE;MACJP,IAAI,EAAE,QAAQ;MACdC,UAAU,EAAE;QACVO,OAAO,EAAE;UAAER,IAAI,EAAE;QAAS,CAAC;QAC3BS,QAAQ,EAAE;UAAET,IAAI,EAAE;QAAS;MAC7B,CAAC;MACDU,iBAAiB,EAAE;QACjB,iCAAiC,EAAE;UAAEV,IAAI,EAAE;QAAS;MACtD,CAAC;MACDW,oBAAoB,EAAE;IACxB,CAAC;IACDC,MAAM,EAAE;MAAEZ,IAAI,EAAE;IAAS,CAAC;IAC1B,WAAW,EAAE;MACXA,IAAI,EAAE,QAAQ;MACdC,UAAU,EAAE;QACVY,MAAM,EAAE;UAAEb,IAAI,EAAE;QAAS;MAC3B,CAAC;MACDc,QAAQ,EAAE,CAAC,QAAQ,CAAC;MACpBH,oBAAoB,EAAE;IACxB;EACF,CAAC;EACDG,QAAQ,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC;EAC5EH,oBAAoB,EAAE;AACxB,CAAC;;AAED;AACA,MAAMI,QAAQ,GAAGlB,GAAG,CAACmB,OAAO,CAACjB,MAAM,CAAC;;AAEpC;AACA;AACA;AACA;AACA;AACA;AACO,SAASkB,8BAA8BA,CAACC,QAAa,EAAE;EAC5D,IAAI,CAACA,QAAQ,EAAE;IACb,OAAO,KAAK;EACd;EACA,OAAOH,QAAQ,CAACG,QAAQ,CAAC;AAC3B","ignoreList":[]}
1
+ {"version":3,"file":"unpublish-manifest.js","names":["_ajv","_interopRequireDefault","require","e","__esModule","default","ajv","Ajv","schema","type","properties","name","versions","minProperties","_rev","_id","time","created","modified","patternProperties","additionalProperties","readme","latest","required","validate","compile","validateUnPublishSingleVersion","manifest"],"sources":["../../src/schemes/unpublish-manifest.ts"],"sourcesContent":["import type { JSONSchemaType } from 'ajv';\nimport Ajv from 'ajv';\n\nconst ajv = new Ajv();\n\ninterface Manifest {\n name: string;\n versions: Record<string, unknown>;\n _rev: string;\n _id: string;\n time: {\n created: string;\n modified: string;\n [key: string]: string; // Allows pattern properties such as version numbers\n };\n readme: string;\n 'dist-tags': {\n latest: string;\n [key: string]: unknown; // Allows additional properties\n };\n}\n\n// @ts-ignore\nconst schema: JSONSchemaType<Manifest> = {\n type: 'object',\n properties: {\n name: { type: 'string' },\n versions: { type: 'object', minProperties: 1 },\n _rev: { type: 'string' },\n _id: { type: 'string' },\n time: {\n type: 'object',\n properties: {\n created: { type: 'string' },\n modified: { type: 'string' },\n },\n patternProperties: {\n '^[0-9]+\\\\.[0-9]+\\\\.[0-9]+-\\\\d+$': { type: 'string' },\n },\n additionalProperties: true,\n },\n readme: { type: 'string' },\n 'dist-tags': {\n type: 'object',\n properties: {\n latest: { type: 'string' },\n },\n required: ['latest'],\n additionalProperties: true,\n },\n },\n required: ['name', 'versions', 'dist-tags', '_rev', '_id', 'readme', 'time'],\n additionalProperties: true,\n};\n\n// validate is a type guard for MyData - type is inferred from schema type\nconst validate = ajv.compile(schema);\n\n/**\n * Validate if a manifest has the correct structure when a new package\n * is being created. The properties name, versions and _attachments must contain 1 element.\n * @param data a manifest object\n * @returns boolean\n */\nexport function validateUnPublishSingleVersion(manifest: any) {\n if (!manifest) {\n return false;\n }\n return validate(manifest);\n}\n"],"mappings":";;;;;;AACA,IAAAA,IAAA,GAAAC,sBAAA,CAAAC,OAAA;AAAsB,SAAAD,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAEtB,MAAMG,GAAG,GAAG,IAAIC,YAAG,CAAC,CAAC;AAmBrB;AACA,MAAMC,MAAgC,GAAG;EACvCC,IAAI,EAAE,QAAQ;EACdC,UAAU,EAAE;IACVC,IAAI,EAAE;MAAEF,IAAI,EAAE;IAAS,CAAC;IACxBG,QAAQ,EAAE;MAAEH,IAAI,EAAE,QAAQ;MAAEI,aAAa,EAAE;IAAE,CAAC;IAC9CC,IAAI,EAAE;MAAEL,IAAI,EAAE;IAAS,CAAC;IACxBM,GAAG,EAAE;MAAEN,IAAI,EAAE;IAAS,CAAC;IACvBO,IAAI,EAAE;MACJP,IAAI,EAAE,QAAQ;MACdC,UAAU,EAAE;QACVO,OAAO,EAAE;UAAER,IAAI,EAAE;QAAS,CAAC;QAC3BS,QAAQ,EAAE;UAAET,IAAI,EAAE;QAAS;MAC7B,CAAC;MACDU,iBAAiB,EAAE;QACjB,iCAAiC,EAAE;UAAEV,IAAI,EAAE;QAAS;MACtD,CAAC;MACDW,oBAAoB,EAAE;IACxB,CAAC;IACDC,MAAM,EAAE;MAAEZ,IAAI,EAAE;IAAS,CAAC;IAC1B,WAAW,EAAE;MACXA,IAAI,EAAE,QAAQ;MACdC,UAAU,EAAE;QACVY,MAAM,EAAE;UAAEb,IAAI,EAAE;QAAS;MAC3B,CAAC;MACDc,QAAQ,EAAE,CAAC,QAAQ,CAAC;MACpBH,oBAAoB,EAAE;IACxB;EACF,CAAC;EACDG,QAAQ,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC;EAC5EH,oBAAoB,EAAE;AACxB,CAAC;;AAED;AACA,MAAMI,QAAQ,GAAGlB,GAAG,CAACmB,OAAO,CAACjB,MAAM,CAAC;;AAEpC;AACA;AACA;AACA;AACA;AACA;AACO,SAASkB,8BAA8BA,CAACC,QAAa,EAAE;EAC5D,IAAI,CAACA,QAAQ,EAAE;IACb,OAAO,KAAK;EACd;EACA,OAAOH,QAAQ,CAACG,QAAQ,CAAC;AAC3B","ignoreList":[]}
@@ -1,5 +1,6 @@
1
1
  /// <reference types="node" />
2
- import { Readable, Transform } from 'node:stream';
2
+ import type { Readable } from 'node:stream';
3
+ import { Transform } from 'node:stream';
3
4
  /**
4
5
  * Converts a buffer stream to a string.
5
6
  */
@@ -10,7 +10,7 @@ var _nodeStream = require("node:stream");
10
10
  */
11
11
  const readableToString = async stream => {
12
12
  const chunks = [];
13
- for await (let chunk of stream) {
13
+ for await (const chunk of stream) {
14
14
  chunks.push(Buffer.from(chunk));
15
15
  }
16
16
  const buffer = Buffer.concat(chunks);
@@ -1 +1 @@
1
- {"version":3,"file":"stream-utils.js","names":["_nodeStream","require","readableToString","stream","chunks","chunk","push","Buffer","from","buffer","concat","str","toString","exports","transformObjectToString","Transform","objectMode","transform","encoding","callback","JSON","stringify"],"sources":["../src/stream-utils.ts"],"sourcesContent":["import { Readable, Transform } from 'node:stream';\n\n/**\n * Converts a buffer stream to a string.\n */\nconst readableToString = async (stream: Readable) => {\n const chunks: Buffer[] = [];\n for await (let chunk of stream) {\n chunks.push(Buffer.from(chunk));\n }\n const buffer = Buffer.concat(chunks);\n const str = buffer.toString('utf-8');\n return str;\n};\n\n/**\n * Transform stream object mode to string\n **/\nconst transformObjectToString = () => {\n return new Transform({\n objectMode: true,\n transform: (chunk, encoding, callback) => {\n callback(null, JSON.stringify(chunk));\n },\n });\n};\n\nexport { readableToString, transformObjectToString };\n"],"mappings":";;;;;;AAAA,IAAAA,WAAA,GAAAC,OAAA;AAEA;AACA;AACA;AACA,MAAMC,gBAAgB,GAAG,MAAOC,MAAgB,IAAK;EACnD,MAAMC,MAAgB,GAAG,EAAE;EAC3B,WAAW,IAAIC,KAAK,IAAIF,MAAM,EAAE;IAC9BC,MAAM,CAACE,IAAI,CAACC,MAAM,CAACC,IAAI,CAACH,KAAK,CAAC,CAAC;EACjC;EACA,MAAMI,MAAM,GAAGF,MAAM,CAACG,MAAM,CAACN,MAAM,CAAC;EACpC,MAAMO,GAAG,GAAGF,MAAM,CAACG,QAAQ,CAAC,OAAO,CAAC;EACpC,OAAOD,GAAG;AACZ,CAAC;;AAED;AACA;AACA;AAFAE,OAAA,CAAAX,gBAAA,GAAAA,gBAAA;AAGA,MAAMY,uBAAuB,GAAGA,CAAA,KAAM;EACpC,OAAO,IAAIC,qBAAS,CAAC;IACnBC,UAAU,EAAE,IAAI;IAChBC,SAAS,EAAEA,CAACZ,KAAK,EAAEa,QAAQ,EAAEC,QAAQ,KAAK;MACxCA,QAAQ,CAAC,IAAI,EAAEC,IAAI,CAACC,SAAS,CAAChB,KAAK,CAAC,CAAC;IACvC;EACF,CAAC,CAAC;AACJ,CAAC;AAACQ,OAAA,CAAAC,uBAAA,GAAAA,uBAAA","ignoreList":[]}
1
+ {"version":3,"file":"stream-utils.js","names":["_nodeStream","require","readableToString","stream","chunks","chunk","push","Buffer","from","buffer","concat","str","toString","exports","transformObjectToString","Transform","objectMode","transform","encoding","callback","JSON","stringify"],"sources":["../src/stream-utils.ts"],"sourcesContent":["import type { Readable } from 'node:stream';\nimport { Transform } from 'node:stream';\n\n/**\n * Converts a buffer stream to a string.\n */\nconst readableToString = async (stream: Readable) => {\n const chunks: Buffer[] = [];\n for await (const chunk of stream) {\n chunks.push(Buffer.from(chunk));\n }\n const buffer = Buffer.concat(chunks);\n const str = buffer.toString('utf-8');\n return str;\n};\n\n/**\n * Transform stream object mode to string\n **/\nconst transformObjectToString = () => {\n return new Transform({\n objectMode: true,\n transform: (chunk, encoding, callback) => {\n callback(null, JSON.stringify(chunk));\n },\n });\n};\n\nexport { readableToString, transformObjectToString };\n"],"mappings":";;;;;;AACA,IAAAA,WAAA,GAAAC,OAAA;AAEA;AACA;AACA;AACA,MAAMC,gBAAgB,GAAG,MAAOC,MAAgB,IAAK;EACnD,MAAMC,MAAgB,GAAG,EAAE;EAC3B,WAAW,MAAMC,KAAK,IAAIF,MAAM,EAAE;IAChCC,MAAM,CAACE,IAAI,CAACC,MAAM,CAACC,IAAI,CAACH,KAAK,CAAC,CAAC;EACjC;EACA,MAAMI,MAAM,GAAGF,MAAM,CAACG,MAAM,CAACN,MAAM,CAAC;EACpC,MAAMO,GAAG,GAAGF,MAAM,CAACG,QAAQ,CAAC,OAAO,CAAC;EACpC,OAAOD,GAAG;AACZ,CAAC;;AAED;AACA;AACA;AAFAE,OAAA,CAAAX,gBAAA,GAAAA,gBAAA;AAGA,MAAMY,uBAAuB,GAAGA,CAAA,KAAM;EACpC,OAAO,IAAIC,qBAAS,CAAC;IACnBC,UAAU,EAAE,IAAI;IAChBC,SAAS,EAAEA,CAACZ,KAAK,EAAEa,QAAQ,EAAEC,QAAQ,KAAK;MACxCA,QAAQ,CAAC,IAAI,EAAEC,IAAI,CAACC,SAAS,CAAChB,KAAK,CAAC,CAAC;IACvC;EACF,CAAC,CAAC;AACJ,CAAC;AAACQ,OAAA,CAAAC,uBAAA,GAAAA,uBAAA","ignoreList":[]}
@@ -20,7 +20,7 @@ function getByQualityPriorityValue(headerValue) {
20
20
  const qList = split[0].split(';');
21
21
  return qList[0];
22
22
  }
23
- let [header] = split.reduce((acc, item) => {
23
+ const [header] = split.reduce((acc, item) => {
24
24
  const qList = item.split(';');
25
25
  if (qList.length > 1) {
26
26
  const [accept, q] = qList;
@@ -1 +1 @@
1
- {"version":3,"file":"string-utils.js","names":["getByQualityPriorityValue","headerValue","split","length","qList","header","reduce","acc","item","accept","q","query","push","trim","sort","a","b"],"sources":["../src/string-utils.ts"],"sourcesContent":["/**\n * Quality values, or q-values and q-factors, are used to describe the order\n * of priority of values in a comma-separated list.\n * It is a special syntax allowed in some HTTP headers and in HTML.\n * https://developer.mozilla.org/en-US/docs/Glossary/Quality_values\n * @param headerValue\n */\nexport function getByQualityPriorityValue(headerValue: string | undefined | null): string {\n if (typeof headerValue !== 'string') {\n return '';\n }\n\n const split = headerValue.split(',');\n\n if (split.length <= 1) {\n const qList = split[0].split(';');\n return qList[0];\n }\n\n let [header] = split\n .reduce((acc, item: string) => {\n const qList = item.split(';');\n if (qList.length > 1) {\n const [accept, q] = qList;\n const [, query] = q.split('=');\n acc.push([accept.trim(), query ? query : 0]);\n } else {\n acc.push([qList[0], 0]);\n }\n return acc;\n }, [] as any)\n .sort(function (a: number[], b: number[]) {\n return b[1] - a[1];\n });\n return header[0];\n}\n"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASA,yBAAyBA,CAACC,WAAsC,EAAU;EACxF,IAAI,OAAOA,WAAW,KAAK,QAAQ,EAAE;IACnC,OAAO,EAAE;EACX;EAEA,MAAMC,KAAK,GAAGD,WAAW,CAACC,KAAK,CAAC,GAAG,CAAC;EAEpC,IAAIA,KAAK,CAACC,MAAM,IAAI,CAAC,EAAE;IACrB,MAAMC,KAAK,GAAGF,KAAK,CAAC,CAAC,CAAC,CAACA,KAAK,CAAC,GAAG,CAAC;IACjC,OAAOE,KAAK,CAAC,CAAC,CAAC;EACjB;EAEA,IAAI,CAACC,MAAM,CAAC,GAAGH,KAAK,CACjBI,MAAM,CAAC,CAACC,GAAG,EAAEC,IAAY,KAAK;IAC7B,MAAMJ,KAAK,GAAGI,IAAI,CAACN,KAAK,CAAC,GAAG,CAAC;IAC7B,IAAIE,KAAK,CAACD,MAAM,GAAG,CAAC,EAAE;MACpB,MAAM,CAACM,MAAM,EAAEC,CAAC,CAAC,GAAGN,KAAK;MACzB,MAAM,GAAGO,KAAK,CAAC,GAAGD,CAAC,CAACR,KAAK,CAAC,GAAG,CAAC;MAC9BK,GAAG,CAACK,IAAI,CAAC,CAACH,MAAM,CAACI,IAAI,CAAC,CAAC,EAAEF,KAAK,GAAGA,KAAK,GAAG,CAAC,CAAC,CAAC;IAC9C,CAAC,MAAM;MACLJ,GAAG,CAACK,IAAI,CAAC,CAACR,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACzB;IACA,OAAOG,GAAG;EACZ,CAAC,EAAE,EAAS,CAAC,CACZO,IAAI,CAAC,UAAUC,CAAW,EAAEC,CAAW,EAAE;IACxC,OAAOA,CAAC,CAAC,CAAC,CAAC,GAAGD,CAAC,CAAC,CAAC,CAAC;EACpB,CAAC,CAAC;EACJ,OAAOV,MAAM,CAAC,CAAC,CAAC;AAClB","ignoreList":[]}
1
+ {"version":3,"file":"string-utils.js","names":["getByQualityPriorityValue","headerValue","split","length","qList","header","reduce","acc","item","accept","q","query","push","trim","sort","a","b"],"sources":["../src/string-utils.ts"],"sourcesContent":["/**\n * Quality values, or q-values and q-factors, are used to describe the order\n * of priority of values in a comma-separated list.\n * It is a special syntax allowed in some HTTP headers and in HTML.\n * https://developer.mozilla.org/en-US/docs/Glossary/Quality_values\n * @param headerValue\n */\nexport function getByQualityPriorityValue(headerValue: string | undefined | null): string {\n if (typeof headerValue !== 'string') {\n return '';\n }\n\n const split = headerValue.split(',');\n\n if (split.length <= 1) {\n const qList = split[0].split(';');\n return qList[0];\n }\n\n const [header] = split\n .reduce((acc, item: string) => {\n const qList = item.split(';');\n if (qList.length > 1) {\n const [accept, q] = qList;\n const [, query] = q.split('=');\n acc.push([accept.trim(), query ? query : 0]);\n } else {\n acc.push([qList[0], 0]);\n }\n return acc;\n }, [] as any)\n .sort(function (a: number[], b: number[]) {\n return b[1] - a[1];\n });\n return header[0];\n}\n"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASA,yBAAyBA,CAACC,WAAsC,EAAU;EACxF,IAAI,OAAOA,WAAW,KAAK,QAAQ,EAAE;IACnC,OAAO,EAAE;EACX;EAEA,MAAMC,KAAK,GAAGD,WAAW,CAACC,KAAK,CAAC,GAAG,CAAC;EAEpC,IAAIA,KAAK,CAACC,MAAM,IAAI,CAAC,EAAE;IACrB,MAAMC,KAAK,GAAGF,KAAK,CAAC,CAAC,CAAC,CAACA,KAAK,CAAC,GAAG,CAAC;IACjC,OAAOE,KAAK,CAAC,CAAC,CAAC;EACjB;EAEA,MAAM,CAACC,MAAM,CAAC,GAAGH,KAAK,CACnBI,MAAM,CAAC,CAACC,GAAG,EAAEC,IAAY,KAAK;IAC7B,MAAMJ,KAAK,GAAGI,IAAI,CAACN,KAAK,CAAC,GAAG,CAAC;IAC7B,IAAIE,KAAK,CAACD,MAAM,GAAG,CAAC,EAAE;MACpB,MAAM,CAACM,MAAM,EAAEC,CAAC,CAAC,GAAGN,KAAK;MACzB,MAAM,GAAGO,KAAK,CAAC,GAAGD,CAAC,CAACR,KAAK,CAAC,GAAG,CAAC;MAC9BK,GAAG,CAACK,IAAI,CAAC,CAACH,MAAM,CAACI,IAAI,CAAC,CAAC,EAAEF,KAAK,GAAGA,KAAK,GAAG,CAAC,CAAC,CAAC;IAC9C,CAAC,MAAM;MACLJ,GAAG,CAACK,IAAI,CAAC,CAACR,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACzB;IACA,OAAOG,GAAG;EACZ,CAAC,EAAE,EAAS,CAAC,CACZO,IAAI,CAAC,UAAUC,CAAW,EAAEC,CAAW,EAAE;IACxC,OAAOA,CAAC,CAAC,CAAC,CAAC,GAAGD,CAAC,CAAC,CAAC,CAAC;EACpB,CAAC,CAAC;EACJ,OAAOV,MAAM,CAAC,CAAC,CAAC;AAClB","ignoreList":[]}
@@ -1,4 +1,4 @@
1
- import { Manifest } from '@verdaccio/types';
1
+ import type { Manifest } from '@verdaccio/types';
2
2
  export { validatePublishSingleVersion } from './schemes/publish-manifest';
3
3
  export { validateUnPublishSingleVersion } from './schemes/unpublish-manifest';
4
4
  export declare function isPackageNameScoped(name: string): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"validation-utils.js","names":["_nodeAssert","_interopRequireDefault","require","_constants","_publishManifest","_unpublishManifest","e","__esModule","default","isPackageNameScoped","name","startsWith","validateName","normalizedName","toLowerCase","isScoped","scopedName","split","match","includes","validatePackage","nameList","length","slice","normalizeMetadata","manifest","assert","strictEqual","_manifest","isObject","DIST_TAGS","Array","isArray","MAINTAINERS","obj","Object","prototype","toString","call","validatePassword","password","validation","DEFAULT_PASSWORD_VALIDATION","RegExp","validateUserName","userName","expectedName"],"sources":["../src/validation-utils.ts"],"sourcesContent":["import assert from 'node:assert';\n\nimport { Manifest } from '@verdaccio/types';\n\nimport { DEFAULT_PASSWORD_VALIDATION, DIST_TAGS, MAINTAINERS } from './constants';\n\nexport { validatePublishSingleVersion } from './schemes/publish-manifest';\nexport { validateUnPublishSingleVersion } from './schemes/unpublish-manifest';\n\nexport function isPackageNameScoped(name: string): boolean {\n return name.startsWith('@');\n}\n\n/**\n * From normalize-package-data/lib/fixer.js\n * @param {*} name the package name\n * @return {Boolean} whether is valid or not\n */\nexport function validateName(name: string): boolean {\n if (typeof name !== 'string') {\n return false;\n }\n\n let normalizedName: string = name.toLowerCase();\n\n const isScoped: boolean = isPackageNameScoped(name);\n const scopedName = name.split('/', 2)[1];\n\n if (isScoped && typeof scopedName !== 'undefined') {\n normalizedName = scopedName.toLowerCase();\n }\n\n /**\n * Some context about the first regex\n * - npm used to have a different tarball naming system.\n * eg: http://registry.npmjs.com/thirty-two\n * https://registry.npmjs.org/thirty-two/-/thirty-two@0.0.1.tgz\n * The file name thirty-two@0.0.1.tgz, the version and the pkg name was separated by an at (@)\n * while nowadays the naming system is based in dashes\n * https://registry.npmjs.org/verdaccio/-/verdaccio-1.4.0.tgz\n *\n * more info here: https://github.com/rlidwka/sinopia/issues/75\n */\n return !(\n !normalizedName.match(/^[-a-zA-Z0-9_.!~*'()@]+$/) ||\n normalizedName.startsWith('.') || // \".bin\", etc.\n ['node_modules', '__proto__', 'favicon.ico'].includes(normalizedName)\n );\n}\n\n/**\n * Validate a package.\n * @return {Boolean} whether the package is valid or not\n */\nexport function validatePackage(name: string): boolean {\n const nameList = name.split('/', 2);\n if (nameList.length === 1) {\n // normal package\n return validateName(nameList[0]);\n }\n // scoped package\n return nameList[0][0] === '@' && validateName(nameList[0].slice(1)) && validateName(nameList[1]);\n}\n\n/**\n * Validate the package metadata, add additional properties whether are missing within\n * the metadata properties.\n * @param {*} manifest\n * @param {*} name\n * @return {Object} the object with additional properties as dist-tags ad versions\n */\nexport function normalizeMetadata(manifest: Manifest, name: string): Manifest {\n assert.strictEqual(manifest.name, name);\n const _manifest = { ...manifest };\n\n if (!isObject(manifest[DIST_TAGS])) {\n _manifest[DIST_TAGS] = {};\n }\n\n if (!Array.isArray(manifest[MAINTAINERS])) {\n _manifest[MAINTAINERS] = [];\n }\n\n // This may not be needed\n if (!isObject(manifest['versions'])) {\n _manifest['versions'] = {};\n }\n\n if (!isObject(manifest['time'])) {\n _manifest['time'] = {};\n }\n\n return _manifest;\n}\n\n/**\n * Check whether an element is an Object\n * @param {*} obj the element\n * @return {Boolean}\n */\nexport function isObject(obj: any): boolean {\n // if (obj === null || typeof obj === 'undefined' || typeof obj === 'string') {\n // return false;\n // }\n\n // return (\n // (typeof obj === 'object' || typeof obj.prototype === 'undefined') &&\n // Array.isArray(obj) === false\n // );\n return Object.prototype.toString.call(obj) === '[object Object]';\n}\n\nexport function validatePassword(\n password: string,\n validation: RegExp = DEFAULT_PASSWORD_VALIDATION\n): boolean {\n return typeof password === 'string' && validation instanceof RegExp\n ? password.match(validation) !== null\n : false;\n}\n\nexport function validateUserName(userName: any, expectedName: string): boolean {\n return (\n typeof userName === 'string' &&\n userName.split(':')[0] === 'org.couchdb.user' &&\n userName.split(':')[1] === expectedName\n );\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"validation-utils.js","names":["_nodeAssert","_interopRequireDefault","require","_constants","_publishManifest","_unpublishManifest","e","__esModule","default","isPackageNameScoped","name","startsWith","validateName","normalizedName","toLowerCase","isScoped","scopedName","split","match","includes","validatePackage","nameList","length","slice","normalizeMetadata","manifest","assert","strictEqual","_manifest","isObject","DIST_TAGS","Array","isArray","MAINTAINERS","obj","Object","prototype","toString","call","validatePassword","password","validation","DEFAULT_PASSWORD_VALIDATION","RegExp","validateUserName","userName","expectedName"],"sources":["../src/validation-utils.ts"],"sourcesContent":["import assert from 'node:assert';\n\nimport type { Manifest } from '@verdaccio/types';\n\nimport { DEFAULT_PASSWORD_VALIDATION, DIST_TAGS, MAINTAINERS } from './constants';\n\nexport { validatePublishSingleVersion } from './schemes/publish-manifest';\nexport { validateUnPublishSingleVersion } from './schemes/unpublish-manifest';\n\nexport function isPackageNameScoped(name: string): boolean {\n return name.startsWith('@');\n}\n\n/**\n * From normalize-package-data/lib/fixer.js\n * @param {*} name the package name\n * @return {Boolean} whether is valid or not\n */\nexport function validateName(name: string): boolean {\n if (typeof name !== 'string') {\n return false;\n }\n\n let normalizedName: string = name.toLowerCase();\n\n const isScoped: boolean = isPackageNameScoped(name);\n const scopedName = name.split('/', 2)[1];\n\n if (isScoped && typeof scopedName !== 'undefined') {\n normalizedName = scopedName.toLowerCase();\n }\n\n /**\n * Some context about the first regex\n * - npm used to have a different tarball naming system.\n * eg: http://registry.npmjs.com/thirty-two\n * https://registry.npmjs.org/thirty-two/-/thirty-two@0.0.1.tgz\n * The file name thirty-two@0.0.1.tgz, the version and the pkg name was separated by an at (@)\n * while nowadays the naming system is based in dashes\n * https://registry.npmjs.org/verdaccio/-/verdaccio-1.4.0.tgz\n *\n * more info here: https://github.com/rlidwka/sinopia/issues/75\n */\n return !(\n !normalizedName.match(/^[-a-zA-Z0-9_.!~*'()@]+$/) ||\n normalizedName.startsWith('.') || // \".bin\", etc.\n ['node_modules', '__proto__', 'favicon.ico'].includes(normalizedName)\n );\n}\n\n/**\n * Validate a package.\n * @return {Boolean} whether the package is valid or not\n */\nexport function validatePackage(name: string): boolean {\n const nameList = name.split('/', 2);\n if (nameList.length === 1) {\n // normal package\n return validateName(nameList[0]);\n }\n // scoped package\n return nameList[0][0] === '@' && validateName(nameList[0].slice(1)) && validateName(nameList[1]);\n}\n\n/**\n * Validate the package metadata, add additional properties whether are missing within\n * the metadata properties.\n * @param {*} manifest\n * @param {*} name\n * @return {Object} the object with additional properties as dist-tags ad versions\n */\nexport function normalizeMetadata(manifest: Manifest, name: string): Manifest {\n assert.strictEqual(manifest.name, name);\n const _manifest = { ...manifest };\n\n if (!isObject(manifest[DIST_TAGS])) {\n _manifest[DIST_TAGS] = {};\n }\n\n if (!Array.isArray(manifest[MAINTAINERS])) {\n _manifest[MAINTAINERS] = [];\n }\n\n // This may not be needed\n if (!isObject(manifest['versions'])) {\n _manifest['versions'] = {};\n }\n\n if (!isObject(manifest['time'])) {\n _manifest['time'] = {};\n }\n\n return _manifest;\n}\n\n/**\n * Check whether an element is an Object\n * @param {*} obj the element\n * @return {Boolean}\n */\nexport function isObject(obj: any): boolean {\n // if (obj === null || typeof obj === 'undefined' || typeof obj === 'string') {\n // return false;\n // }\n\n // return (\n // (typeof obj === 'object' || typeof obj.prototype === 'undefined') &&\n // Array.isArray(obj) === false\n // );\n return Object.prototype.toString.call(obj) === '[object Object]';\n}\n\nexport function validatePassword(\n password: string,\n validation: RegExp = DEFAULT_PASSWORD_VALIDATION\n): boolean {\n return typeof password === 'string' && validation instanceof RegExp\n ? password.match(validation) !== null\n : false;\n}\n\nexport function validateUserName(userName: any, expectedName: string): boolean {\n return (\n typeof userName === 'string' &&\n userName.split(':')[0] === 'org.couchdb.user' &&\n userName.split(':')[1] === expectedName\n );\n}\n"],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@verdaccio/core",
3
- "version": "8.0.0-next-8.30",
3
+ "version": "8.0.0-next-8.31",
4
4
  "description": "Verdaccio Core Components",
5
5
  "keywords": [
6
6
  "private",
@@ -33,15 +33,15 @@
33
33
  "access": "public"
34
34
  },
35
35
  "dependencies": {
36
- "ajv": "8.17.1",
36
+ "ajv": "8.18.0",
37
37
  "http-errors": "2.0.1",
38
38
  "http-status-codes": "2.3.0",
39
- "minimatch": "7.4.6",
39
+ "minimatch": "7.4.9",
40
40
  "process-warning": "1.0.0",
41
41
  "semver": "7.7.3"
42
42
  },
43
43
  "devDependencies": {
44
- "@verdaccio/types": "13.0.0-next-8.10",
44
+ "@verdaccio/types": "13.0.0-next-8.11",
45
45
  "express": "4.22.1",
46
46
  "typedoc": "0.28.14",
47
47
  "vitest": "3.2.4"