UNPKG

cnpmcore

Version:

Private NPM Registry for Enterprise

90 lines 8.06 kB
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; var __param = (this && this.__param) || function (paramIndex, decorator) { return function (target, key) { decorator(target, key, paramIndex); } }; import { Type } from '@eggjs/typebox-validate/typebox'; import { HTTPContext, Context, HTTPBody, HTTPController, HTTPMethod, HTTPMethodEnum, HTTPParam, Inject } from 'egg'; import { BadRequestError, UnprocessableEntityError } from 'egg/errors'; import { FULLNAME_REG_STRING } from "../../../common/PackageUtil.js"; import { AbstractController } from "../AbstractController.js"; const MaintainerDataRule = Type.Object({ maintainers: Type.Array(Type.Object({ name: Type.String({ minLength: 1, maxLength: 100 }), email: Type.String({ format: 'email', maxLength: 400 }), }), { minItems: 1 }), }); let UpdatePackageController = class UpdatePackageController extends AbstractController { // https://github.com/npm/cli/blob/latest/lib/commands/owner.js#L191 async update(ctx, fullname, data) { if (this.isNpmCommandValid(ctx, 'unpublish')) { // ignore it return { ok: false }; } // only support update maintainer if (!this.isNpmCommandValid(ctx, 'owner')) { const npmCommand = this.getNpmCommand(ctx); throw new BadRequestError(`header: npm-command expected "owner", but got "${npmCommand}"`); } ctx.tValidate(MaintainerDataRule, data); const ensureRes = await this.ensurePublishAccess(ctx, fullname, true); const pkg = ensureRes.pkg; const registry = await this.packageManagerService.getSourceRegistry(pkg); // make sure all maintainers exists const users = []; for (const maintainer of data.maintainers) { if (registry?.userPrefix && !maintainer.name.startsWith(registry.userPrefix)) { maintainer.name = `${registry?.userPrefix}${maintainer.name}`; } const user = await this.userRepository.findUserByName(maintainer.name); if (!user) { throw new UnprocessableEntityError(`Maintainer "${maintainer.name}" not exists`); } users.push(user); } await this.packageManagerService.replacePackageMaintainersAndDist(pkg, users); return { ok: true }; } getNpmCommand(ctx) { // npm@6: referer: 'xxx [REDACTED]' // npm@>=7: 'npm-command': 'xxx' let npmCommand = ctx.get('npm-command'); if (!npmCommand) { npmCommand = ctx.get('referer').split(' ', 1)[0]; } return npmCommand; } isNpmCommandValid(ctx, expectCommand) { const npmCommand = this.getNpmCommand(ctx); return npmCommand === expectCommand; } }; __decorate([ Inject(), __metadata("design:type", Function) ], UpdatePackageController.prototype, "packageManagerService", void 0); __decorate([ HTTPMethod({ // PUT /:fullname/-rev/:rev path: `/:fullname(${FULLNAME_REG_STRING})/-rev/:rev`, method: HTTPMethodEnum.PUT, }), __param(0, HTTPContext()), __param(1, HTTPParam()), __param(2, HTTPBody()), __metadata("design:type", Function), __metadata("design:paramtypes", [Context, String, Object]), __metadata("design:returntype", Promise) ], UpdatePackageController.prototype, "update", null); UpdatePackageController = __decorate([ HTTPController() ], UpdatePackageController); export { UpdatePackageController }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVXBkYXRlUGFja2FnZUNvbnRyb2xsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9hcHAvcG9ydC9jb250cm9sbGVyL3BhY2thZ2UvVXBkYXRlUGFja2FnZUNvbnRyb2xsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLElBQUksRUFBZSxNQUFNLGlDQUFpQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBQ3BILE9BQU8sRUFBRSxlQUFlLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFdkUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFHckUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFOUQsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JDLFdBQVcsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUNyQixJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ1YsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUNuRCxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDO0tBQ3hELENBQUMsRUFDRixFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FDaEI7Q0FDRixDQUFDLENBQUM7QUFJSSxJQUFNLHVCQUF1QixHQUE3QixNQUFNLHVCQUF3QixTQUFRLGtCQUFrQjtJQUk3RCxvRUFBb0U7SUFNOUQsQUFBTixLQUFLLENBQUMsTUFBTSxD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