UNPKG

verdaccio

Version:

A lightweight private npm proxy registry

1 lines 5.76 kB
{"version":3,"file":"index.mjs","names":[],"sources":["../../src/api/index.ts"],"sourcesContent":["import compression from 'compression';\nimport cors from 'cors';\nimport type { Application } from 'express';\nimport express from 'express';\nimport _ from 'lodash';\n\nimport { Auth } from '@verdaccio/auth';\nimport { getUserAgent } from '@verdaccio/config';\nimport type { pluginUtils } from '@verdaccio/core';\nimport { PLUGIN_CATEGORY } from '@verdaccio/core';\nimport { asyncLoadPlugin } from '@verdaccio/loaders';\nimport { errorReportingMiddleware, final, handleError, log } from '@verdaccio/middleware';\nimport { SearchMemoryIndexer } from '@verdaccio/search-indexer';\nimport type { ConfigYaml, Config as IConfig } from '@verdaccio/types';\n\nimport AppConfig from '../lib/config';\nimport { API_ERROR } from '../lib/constants';\nimport { logger } from '../lib/logger';\nimport Storage from '../lib/storage';\nimport { ErrorCode } from '../lib/utils';\nimport type { $NextFunctionVer, $RequestExtend, $ResponseExtend } from '../types';\nimport hookDebug from './debug';\nimport apiEndpoint from './endpoint';\nimport { serveFavicon } from './middleware';\nimport webMiddleware from './web';\n\nconst version = process.env.PACKAGE_VERSION || 'dev';\n\nconst defineAPI = async function (config: IConfig, storage: Storage): Promise<express.Application> {\n const auth = new Auth(config, logger, { legacyMergeConfigs: true });\n await auth.init();\n const app: Application = express();\n SearchMemoryIndexer.configureStorage(storage);\n await SearchMemoryIndexer.init(logger);\n // run in production mode by default, just in case\n // it shouldn't make any difference anyway\n app.set('env', process.env.NODE_ENV || 'production');\n\n // Allow `req.ip` to resolve properly when Verdaccio is behind a proxy or load-balancer\n // See: https://expressjs.com/en/guide/behind-proxies.html\n if (config.server?.trustProxy) {\n app.set('trust proxy', config.server.trustProxy);\n }\n\n app.use(cors());\n\n // // Router setup\n app.use(log(logger));\n app.use(errorReportingMiddleware(logger));\n if (config.user_agent) {\n app.use(function (_req: $RequestExtend, res: $ResponseExtend, next: $NextFunctionVer): void {\n res.setHeader('X-Powered-By', getUserAgent(config.user_agent));\n next();\n });\n } else {\n app.disable('x-powered-by');\n }\n\n app.use(compression());\n\n app.get('/-/static/favicon.ico', serveFavicon(config));\n\n // Hook for tests only\n if (config._debug) {\n hookDebug(app, config.configPath);\n }\n\n const plugins: pluginUtils.ExpressMiddleware<IConfig, '', Auth>[] = await asyncLoadPlugin(\n config.middlewares,\n {\n config,\n logger,\n },\n function (plugin) {\n return typeof plugin.register_middlewares !== 'undefined';\n },\n true,\n config?.serverSettings?.pluginPrefix ?? 'verdaccio',\n PLUGIN_CATEGORY.MIDDLEWARE\n );\n\n // Register JWT middleware so middleware plugins can access req.remote_user\n app.use(auth.apiJWTmiddleware());\n\n plugins.forEach((plugin: any) => {\n plugin.register_middlewares(app, auth, storage);\n });\n\n // // For npm request\n app.use(apiEndpoint(config, auth, storage));\n\n // For WebUI & WebUI API\n if (_.get(config, 'web.enable', true)) {\n app.use((_req, res, next) => {\n res.locals.app_version = version ?? '';\n next();\n });\n const middleware = await webMiddleware(config, auth, storage, logger);\n app.use(middleware);\n } else {\n app.get('/', function (_, __, next: $NextFunctionVer) {\n next(ErrorCode.getNotFound(API_ERROR.WEB_DISABLED));\n });\n }\n\n app.get('/*', function (_, __, next: $NextFunctionVer) {\n next(ErrorCode.getNotFound(API_ERROR.FILE_NOT_FOUND));\n });\n app.use(handleError(logger));\n app.use(final);\n\n return app;\n};\n\nexport default (async function (configHash: ConfigYaml): Promise<express.Application> {\n const config: IConfig = new AppConfig(_.cloneDeep(configHash));\n\n const storage = new Storage(config);\n // waits until init calls have been initialized\n await storage.init(config);\n return await defineAPI(config, storage);\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AA0BA,IAAM,UAAA;AAEN,IAAM,YAAY,eAAgB,QAAiB,SAAgD;CACjG,MAAM,OAAO,IAAI,KAAK,QAAQ,QAAQ,EAAE,oBAAoB,KAAK,CAAC;CAClE,MAAM,KAAK,KAAK;CAChB,MAAM,MAAmB,QAAQ;CACjC,oBAAoB,iBAAiB,OAAO;CAC5C,MAAM,oBAAoB,KAAK,MAAM;CAGrC,IAAI,IAAI,OAAA,QAAA,IAAA,YAA+B,YAAY;CAInD,IAAI,OAAO,QAAQ,YACjB,IAAI,IAAI,eAAe,OAAO,OAAO,UAAU;CAGjD,IAAI,IAAI,KAAK,CAAC;CAGd,IAAI,IAAI,IAAI,MAAM,CAAC;CACnB,IAAI,IAAI,yBAAyB,MAAM,CAAC;CACxC,IAAI,OAAO,YACT,IAAI,IAAI,SAAU,MAAsB,KAAsB,MAA8B;EAC1F,IAAI,UAAU,gBAAgB,aAAa,OAAO,UAAU,CAAC;EAC7D,KAAK;CACP,CAAC;MAED,IAAI,QAAQ,cAAc;CAG5B,IAAI,IAAI,YAAY,CAAC;CAErB,IAAI,IAAI,yBAAyB,aAAa,MAAM,CAAC;CAGrD,IAAI,OAAO,QACT,cAAU,KAAK,OAAO,UAAU;CAGlC,MAAM,UAA8D,MAAM,gBACxE,OAAO,aACP;EACE;EACA;CACF,GACA,SAAU,QAAQ;EAChB,OAAO,OAAO,OAAO,yBAAyB;CAChD,GACA,MACA,QAAQ,gBAAgB,gBAAgB,aACxC,gBAAgB,UAClB;CAGA,IAAI,IAAI,KAAK,iBAAiB,CAAC;CAE/B,QAAQ,SAAS,WAAgB;EAC/B,OAAO,qBAAqB,KAAK,MAAM,OAAO;CAChD,CAAC;CAGD,IAAI,IAAI,iBAAY,QAAQ,MAAM,OAAO,CAAC;CAG1C,IAAI,EAAE,IAAI,QAAQ,cAAc,IAAI,GAAG;EACrC,IAAI,KAAK,MAAM,KAAK,SAAS;GAC3B,IAAI,OAAO,cAAc;GACzB,KAAK;EACP,CAAC;EACD,MAAM,aAAa,MAAM,YAAc,QAAQ,MAAM,SAAS,MAAM;EACpE,IAAI,IAAI,UAAU;CACpB,OACE,IAAI,IAAI,KAAK,SAAU,GAAG,IAAI,MAAwB;EACpD,KAAK,UAAU,YAAY,UAAU,YAAY,CAAC;CACpD,CAAC;CAGH,IAAI,IAAI,MAAM,SAAU,GAAG,IAAI,MAAwB;EACrD,KAAK,UAAU,YAAY,UAAU,cAAc,CAAC;CACtD,CAAC;CACD,IAAI,IAAI,YAAY,MAAM,CAAC;CAC3B,IAAI,IAAI,KAAK;CAEb,OAAO;AACT;AAEA,IAAA,eAAgB,eAAgB,YAAsD;CACpF,MAAM,SAAkB,IAAI,SAAU,EAAE,UAAU,UAAU,CAAC;CAE7D,MAAM,UAAU,IAAI,QAAQ,MAAM;CAElC,MAAM,QAAQ,KAAK,MAAM;CACzB,OAAO,MAAM,UAAU,QAAQ,OAAO;AACxC"}