cnpmcore
Version:
127 lines • 10.8 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);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.HookTriggerService = void 0;
const tegg_1 = require("@eggjs/tegg");
const HookRepository_1 = require("../../repository/HookRepository");
const PackageRepository_1 = require("../../repository/PackageRepository");
const DistRepository_1 = require("../../repository/DistRepository");
const UserRepository_1 = require("../../repository/UserRepository");
const LogUtil_1 = require("../../common/LogUtil");
const Task_1 = require("../../common/enum/Task");
const TaskService_1 = require("./TaskService");
const PackageUtil_1 = require("../../common/PackageUtil");
let HookTriggerService = class HookTriggerService {
async executeTask(task) {
const { hookId, hookEvent } = task.data;
const hook = await this.hookRepository.findHookById(hookId);
if (!hook) {
await this.taskService.finishTask(task, Task_1.TaskState.Success, `[${(0, LogUtil_1.isoNow)()}][TriggerHooks] hook ${hookId} not exits`);
return;
}
try {
const payload = await this.createTriggerPayload(task, hookEvent, hook);
if (!payload) {
await this.taskService.finishTask(task, Task_1.TaskState.Success, `[${(0, LogUtil_1.isoNow)()}][TriggerHooks] generate payload failed \n`);
return;
}
const status = await this.doExecuteTrigger(hook, payload);
hook.latestTaskId = task.taskId;
task.data.responseStatus = status;
await this.hookRepository.saveHook(hook);
await this.taskService.finishTask(task, Task_1.TaskState.Success, `[${(0, LogUtil_1.isoNow)()}][TriggerHooks] trigger hook succeed ${status} \n`);
}
catch (e) {
e.message = 'trigger hook failed: ' + e.message;
task.error = e.message;
await this.taskService.finishTask(task, Task_1.TaskState.Fail, `[${(0, LogUtil_1.isoNow)()}][TriggerHooks] ${e.stack} \n`);
return;
}
}
async doExecuteTrigger(hook, payload) {
const { digest, payloadStr } = hook.signPayload(payload);
const url = new URL(hook.endpoint);
const res = await this.httpclient.request(hook.endpoint, {
method: 'POST',
headers: {
'content-type': 'application/json',
'x-npm-signature': `sha256=${digest}`,
host: url.host,
},
// webhook 场景下,由于 endpoint 都不同
// 因此几乎不存在连接复用的情况,因此这里不使用 keepAlive
agent: false,
httpsAgent: false,
data: payloadStr,
});
if (res.status >= 200 && res.status < 300) {
return res.status;
}
throw new Error(`hook response with ${res.status}`);
}
async createTriggerPayload(task, hookEvent, hook) {
const [scope, name] = (0, PackageUtil_1.getScopeAndName)(hookEvent.fullname);
const pkg = await this.packageRepository.findPackage(scope, name);
if (!pkg) {
await this.taskService.finishTask(task, Task_1.TaskState.Success, `[${(0, LogUtil_1.isoNow)()}][TriggerHooks] can not found pkg for ${hookEvent.fullname} \n`);
return;
}
const user = await this.userRepository.findUserByUserId(hook.ownerId);
if (!user) {
await this.taskService.finishTask(task, Task_1.TaskState.Success, `[${(0, LogUtil_1.isoNow)()}][TriggerHooks] can not found user for ${hook.ownerId} \n`);
return;
}
const manifest = await this.distRepository.readDistBytesToJSON(pkg.manifestsDist);
return {
event: hookEvent.event,
name: pkg.fullname,
type: 'package',
version: '1.0.0',
hookOwner: {
username: user.name,
},
payload: manifest,
change: hookEvent.change,
time: hookEvent.time,
};
}
};
exports.HookTriggerService = HookTriggerService;
__decorate([
(0, tegg_1.Inject)(),
__metadata("design:type", HookRepository_1.HookRepository)
], HookTriggerService.prototype, "hookRepository", void 0);
__decorate([
(0, tegg_1.Inject)(),
__metadata("design:type", PackageRepository_1.PackageRepository)
], HookTriggerService.prototype, "packageRepository", void 0);
__decorate([
(0, tegg_1.Inject)(),
__metadata("design:type", DistRepository_1.DistRepository)
], HookTriggerService.prototype, "distRepository", void 0);
__decorate([
(0, tegg_1.Inject)(),
__metadata("design:type", UserRepository_1.UserRepository)
], HookTriggerService.prototype, "userRepository", void 0);
__decorate([
(0, tegg_1.Inject)(),
__metadata("design:type", Object)
], HookTriggerService.prototype, "httpclient", void 0);
__decorate([
(0, tegg_1.Inject)(),
__metadata("design:type", TaskService_1.TaskService)
], HookTriggerService.prototype, "taskService", void 0);
exports.HookTriggerService = HookTriggerService = __decorate([
(0, tegg_1.SingletonProto)({
accessLevel: tegg_1.AccessLevel.PUBLIC,
})
], HookTriggerService);
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSG9va1RyaWdnZXJTZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vYXBwL2NvcmUvc2VydmljZS9Ib29rVHJpZ2dlclNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsc0NBQWtFO0FBR2xFLG9FQUFpRTtBQUNqRSwwRUFBdUU7QUFDdkUsb0VBQWlFO0FBQ2pFLG9FQUFpRTtBQUdqRSxrREFBOEM7QUFDOUMsaURBQW1EO0FBQ25ELCtDQUE0QztBQUM1QywwREFBMkQ7QUFLcEQsSUFBTSxrQkFBa0IsR0FBeEIsTUFBTSxrQkFBa0I7SUFtQjdCLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBcUI7UUFDckMsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ3hDLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNULE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLGdCQUFTLENBQUMsT0FBTyxFQUFFLElBQUksSUFBQSxnQkFBTSxHQUFFLHdCQUF3QixNQUFNLFlBQVksQ0FBQyxDQUFDO1lBQ25ILE9BQU87U0FDUjtRQUNELElBQUk7WUFDRixNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3ZFLElBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQ1osTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsZ0JBQVMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxJQUFBLGdCQUFNLEdBQUUsNENBQTRDLENBQUMsQ0FBQztnQkFDckgsT0FBTzthQUNSO1lBQ0QsTUFBTSxNQUFNLEdB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