{"version":3,"file":"index.mjs","names":[],"sources":["../../../src/api/endpoint/index.ts"],"sourcesContent":["import express from 'express';\n\nimport type { Auth } from '@verdaccio/auth';\nimport {\n  antiLoop,\n  encodeScopePackage,\n  enforceGeneratedTokenMetadata,\n  match,\n  validateName,\n  validatePackage,\n} from '@verdaccio/middleware';\nimport type { Config } from '@verdaccio/types';\n\nimport { logger } from '../../lib/logger';\nimport type Storage from '../../lib/storage';\nimport distTags from './api/dist-tags';\nimport pkg from './api/package';\nimport ping from './api/ping';\nimport publish from './api/publish';\nimport search from './api/search';\nimport stars from './api/stars';\nimport user from './api/user';\nimport profile from './api/v1/profile';\nimport v1Search from './api/v1/search';\nimport token from './api/v1/token';\nimport whoami from './api/whoami';\n\nexport default function (config: Config, auth: Auth, storage: Storage) {\n  const app = express.Router();\n\n  // validate all of these params as a package name\n  // this might be too harsh, so ask if it causes trouble\n  app.param('package', validatePackage);\n  app.param('filename', validateName);\n  app.param('tag', validateName);\n  app.param('version', validateName);\n  app.param('revision', validateName);\n  app.param('token', validateName);\n\n  // these can't be safely put into express url for some reason\n  // TODO: For some reason? what reason?\n  app.param('_rev', match(/^-rev$/));\n  app.param('org_couchdb_user', match(/^org\\.couchdb\\.user:/));\n\n  // Avoid executing JWT twice when the parent app already registered the JWT middleware\n  const apiJwtMiddleware = auth.apiJWTmiddleware();\n  app.use((req, res, next) => {\n    const remoteUser = (req as any).remote_user ?? (res.locals as any).remote_user;\n    if (remoteUser) {\n      return next();\n    }\n    return apiJwtMiddleware(req, res, next);\n  });\n  app.use(enforceGeneratedTokenMetadata(storage, logger));\n  app.use(express.json({ strict: false, limit: config.max_body_size || '10mb' }));\n  app.use(antiLoop(config));\n  // encode / in a scoped package name to be matched as a single parameter in routes\n  app.use(encodeScopePackage);\n  whoami(app);\n  profile(app, auth, config);\n  search(app, auth, storage);\n  user(app, auth, config);\n  distTags(app, auth, storage);\n  publish(app, auth, storage, config);\n  ping(app);\n  stars(app, storage);\n  v1Search(app, auth, storage, config);\n  token(app, auth, storage, config);\n  pkg(app, auth, storage, config);\n  return app;\n}\n"],"mappings":";;;;;;;;;;;;;;;AA2BA,SAAA,iBAAyB,QAAgB,MAAY,SAAkB;CACrE,MAAM,MAAM,QAAQ,OAAO;CAI3B,IAAI,MAAM,WAAW,eAAe;CACpC,IAAI,MAAM,YAAY,YAAY;CAClC,IAAI,MAAM,OAAO,YAAY;CAC7B,IAAI,MAAM,WAAW,YAAY;CACjC,IAAI,MAAM,YAAY,YAAY;CAClC,IAAI,MAAM,SAAS,YAAY;CAI/B,IAAI,MAAM,QAAQ,MAAM,QAAQ,CAAC;CACjC,IAAI,MAAM,oBAAoB,MAAM,sBAAsB,CAAC;CAG3D,MAAM,mBAAmB,KAAK,iBAAiB;CAC/C,IAAI,KAAK,KAAK,KAAK,SAAS;EAE1B,IADoB,IAAY,eAAgB,IAAI,OAAe,aAEjE,OAAO,KAAK;EAEd,OAAO,iBAAiB,KAAK,KAAK,IAAI;CACxC,CAAC;CACD,IAAI,IAAI,8BAA8B,SAAS,MAAM,CAAC;CACtD,IAAI,IAAI,QAAQ,KAAK;EAAE,QAAQ;EAAO,OAAO,OAAO,iBAAiB;CAAO,CAAC,CAAC;CAC9E,IAAI,IAAI,SAAS,MAAM,CAAC;CAExB,IAAI,IAAI,kBAAkB;CAC1B,eAAO,GAAG;CACV,gBAAQ,KAAK,MAAM,MAAM;CACzB,eAAO,KAAK,MAAM,OAAO;CACzB,aAAK,KAAK,MAAM,MAAM;CACtB,kBAAS,KAAK,MAAM,OAAO;CAC3B,QAAQ,KAAK,MAAM,SAAS,MAAM;CAClC,aAAK,GAAG;CACR,cAAM,KAAK,OAAO;CAClB,iBAAS,KAAK,MAAM,SAAS,MAAM;CACnC,cAAM,KAAK,MAAM,SAAS,MAAM;CAChC,gBAAI,KAAK,MAAM,SAAS,MAAM;CAC9B,OAAO;AACT"}