cnpmcore
Version:
126 lines • 11.2 kB
JavaScript
;
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); }
};
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
};
var _RemovePackageVersionController_instances, _RemovePackageVersionController_removePackageVersion;
Object.defineProperty(exports, "__esModule", { value: true });
exports.RemovePackageVersionController = void 0;
const egg_errors_1 = require("egg-errors");
const tegg_1 = require("@eggjs/tegg");
const AbstractController_1 = require("../AbstractController");
const PackageUtil_1 = require("../../../common/PackageUtil");
const PackageManagerService_1 = require("../../../core/service/PackageManagerService");
let RemovePackageVersionController = class RemovePackageVersionController extends AbstractController_1.AbstractController {
constructor() {
super(...arguments);
_RemovePackageVersionController_instances.add(this);
}
// https://github.com/npm/cli/blob/latest/lib/commands/unpublish.js#L101
// https://github.com/npm/libnpmpublish/blob/main/unpublish.js#L84
// await npmFetch(`${tarballUrl}/-rev/${_rev}`, {
// ...opts,
// method: 'DELETE',
// ignoreBody: true,
// })
async removeByTarballUrl(ctx, fullname, filenameWithVersion) {
const npmCommand = ctx.get('npm-command');
if (npmCommand !== 'unpublish') {
throw new egg_errors_1.BadRequestError('Only allow "unpublish" npm-command');
}
const ensureRes = await this.ensurePublishAccess(ctx, fullname, true);
const pkg = ensureRes.pkg;
const version = this.getAndCheckVersionFromFilename(ctx, fullname, filenameWithVersion);
const packageVersion = await this.getPackageVersionEntity(pkg, version);
await __classPrivateFieldGet(this, _RemovePackageVersionController_instances, "m", _RemovePackageVersionController_removePackageVersion).call(this, pkg, packageVersion);
return { ok: true };
}
// https://github.com/npm/libnpmpublish/blob/main/unpublish.js#L43
// npm http fetch DELETE 404 http://localhost:62649/@cnpm%2ffoo/-rev/1-642f6e8b52d7b8eb03aef23f
// await npmFetch(`${pkgUri}/-rev/${pkg._rev}`, {
// ...opts,
// method: 'DELETE',
// ignoreBody: true,
// })
async removeByPkgUri(ctx, fullname) {
const npmCommand = ctx.get('npm-command');
if (npmCommand !== 'unpublish') {
throw new egg_errors_1.BadRequestError('Only allow "unpublish" npm-command');
}
const ensureRes = await this.ensurePublishAccess(ctx, fullname, true);
const pkg = ensureRes.pkg;
// try to remove the latest version first
const packageTag = await this.packageRepository.findPackageTag(pkg.packageId, 'latest');
let packageVersion = null;
if (packageTag) {
packageVersion = await this.packageRepository.findPackageVersion(pkg.packageId, packageTag.version);
}
if (packageVersion) {
await __classPrivateFieldGet(this, _RemovePackageVersionController_instances, "m", _RemovePackageVersionController_removePackageVersion).call(this, pkg, packageVersion);
}
else {
this.logger.info('[PackageController:unpublishPackage] %s, packageId: %s', pkg.fullname, pkg.packageId);
await this.packageManagerService.unpublishPackage(pkg);
}
return { ok: true };
}
};
exports.RemovePackageVersionController = RemovePackageVersionController;
_RemovePackageVersionController_instances = new WeakSet();
_RemovePackageVersionController_removePackageVersion = async function _RemovePackageVersionController_removePackageVersion(pkg, packageVersion) {
// https://docs.npmjs.com/policies/unpublish
// can unpublish anytime within the first 72 hours after publishing
if (pkg.isPrivate && Date.now() - packageVersion.publishTime.getTime() >= 3600000 * 72) {
throw new egg_errors_1.ForbiddenError(`${pkg.fullname}@${packageVersion.version} unpublish is not allowed after 72 hours of released`);
}
this.logger.info('[PackageController:removeVersion] %s@%s, packageVersionId: %s', pkg.fullname, packageVersion.version, packageVersion.packageVersionId);
await this.packageManagerService.removePackageVersion(pkg, packageVersion);
};
__decorate([
(0, tegg_1.Inject)(),
__metadata("design:type", PackageManagerService_1.PackageManagerService)
], RemovePackageVersionController.prototype, "packageManagerService", void 0);
__decorate([
(0, tegg_1.HTTPMethod)({
// DELETE /@cnpm/foo/-/foo-4.0.0.tgz/-rev/61af62d6295fcbd9f8f1c08f
// DELETE /:fullname/-/:filenameWithVersion.tgz/-rev/:rev
path: `/:fullname(${PackageUtil_1.FULLNAME_REG_STRING})/-/:filenameWithVersion.tgz/-rev/:rev`,
method: tegg_1.HTTPMethodEnum.DELETE,
}),
__param(0, (0, tegg_1.Context)()),
__param(1, (0, tegg_1.HTTPParam)()),
__param(2, (0, tegg_1.HTTPParam)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object, String, String]),
__metadata("design:returntype", Promise)
], RemovePackageVersionController.prototype, "removeByTarballUrl", null);
__decorate([
(0, tegg_1.HTTPMethod)({
// DELETE /@cnpm/foo/-rev/61af62d6295fcbd9f8f1c08f
// DELETE /:fullname/-rev/:rev
path: `/:fullname(${PackageUtil_1.FULLNAME_REG_STRING})/-rev/:rev`,
method: tegg_1.HTTPMethodEnum.DELETE,
}),
__param(0, (0, tegg_1.Context)()),
__param(1, (0, tegg_1.HTTPParam)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [Object, String]),
__metadata("design:returntype", Promise)
], RemovePackageVersionController.prototype, "removeByPkgUri", null);
exports.RemovePackageVersionController = RemovePackageVersionController = __decorate([
(0, tegg_1.HTTPController)()
], RemovePackageVersionController);
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVtb3ZlUGFja2FnZVZlcnNpb25Db250cm9sbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vYXBwL3BvcnQvY29udHJvbGxlci9wYWNrYWdlL1JlbW92ZVBhY2thZ2VWZXJzaW9uQ29udHJvbGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwyQ0FHb0I7QUFDcEIsc0NBUXFCO0FBQ3JCLDhEQUEyRDtBQUMzRCw2REFBa0U7QUFDbEUsdUZBQW9GO0FBSzdFLElBQU0sOEJBQThCLEdBQXBDLE1BQU0sOEJBQStCLFNBQVEsdUNBQWtCO0lBQS9EOzs7SUE0RVAsQ0FBQztJQXhFQyx3RUFBd0U7SUFDeEUsa0VBQWtFO0lBQ2xFLGlEQUFpRDtJQUNqRCxhQUFhO0lBQ2Isc0JBQXNCO0lBQ3RCLHNCQUFzQjtJQUN0QixLQUFLO0lBT0MsQUFBTixLQUFLLENBQUMsa0JBQWtCLENBQVksR0FBZSxFQUFlLFFBQWdCLEVBQWUsbUJBQTJCO1FBQzFILE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDMUMsSUFBSSxVQUFVLEtBQUssV0FBVyxFQUFFO1lBQzlCLE1BQU0sSUFBSSw0QkFBZSxDQUFDLG9DQUFvQyxDQUFDLENBQUM7U0FDakU7UUFDRCxNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3RFLE1BQU0sR0FBRyxHQUFHLFNBQVMsQ0FBQyxHQUFJLENBQUM7UUFDM0IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLDhCQUE4QixDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztRQUN4RixNQUFNLGNBQWMsR0FBRyxNQUFNLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFD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