cnpmcore
Version:
Private NPM Registry for Enterprise
119 lines • 9.92 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);
};
import { AccessLevel, Inject, SingletonProto } from 'egg';
import { TaskState } from "../../common/enum/Task.js";
import { isoNow } from "../../common/LogUtil.js";
import { getScopeAndName } from "../../common/PackageUtil.js";
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, TaskState.Success, `[${isoNow()}][TriggerHooks] hook ${hookId} not exits`);
return;
}
try {
const payload = await this.createTriggerPayload(task, hookEvent, hook);
if (!payload) {
await this.taskService.finishTask(task, TaskState.Success, `[${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, TaskState.Success, `[${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, TaskState.Fail, `[${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] = getScopeAndName(hookEvent.fullname);
const pkg = await this.packageRepository.findPackage(scope, name);
if (!pkg) {
await this.taskService.finishTask(task, TaskState.Success, `[${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, TaskState.Success, `[${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,
};
}
};
__decorate([
Inject(),
__metadata("design:type", Function)
], HookTriggerService.prototype, "hookRepository", void 0);
__decorate([
Inject(),
__metadata("design:type", Function)
], HookTriggerService.prototype, "packageRepository", void 0);
__decorate([
Inject(),
__metadata("design:type", Function)
], HookTriggerService.prototype, "distRepository", void 0);
__decorate([
Inject(),
__metadata("design:type", Function)
], HookTriggerService.prototype, "userRepository", void 0);
__decorate([
Inject(),
__metadata("design:type", Function)
], HookTriggerService.prototype, "httpClient", void 0);
__decorate([
Inject(),
__metadata("design:type", Function)
], HookTriggerService.prototype, "taskService", void 0);
HookTriggerService = __decorate([
SingletonProto({
accessLevel: AccessLevel.PUBLIC,
})
], HookTriggerService);
export { HookTriggerService };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSG9va1RyaWdnZXJTZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vYXBwL2NvcmUvc2VydmljZS9Ib29rVHJpZ2dlclNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFjLE1BQU0sS0FBSyxDQUFDO0FBRXRFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDakQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBY3ZELElBQU0sa0JBQWtCLEdBQXhCLE1BQU0sa0JBQWtCO0lBbUI3QixLQUFLLENBQUMsV0FBVyxDQUFDLElBQXFCO1FBQ3JDLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUN4QyxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzVELElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNWLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQy9CLElBQUksRUFDSixTQUFTLENBQUMsT0FBTyxFQUNqQixJQUFJLE1BQU0sRUFBRSx3QkFBd0IsTUFBTSxZQUFZLENBQ3ZELENBQUM7WUFDRixPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQztZQUNILE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDdkUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNiLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQy9CLElBQUksRUFDSixTQUFTLENB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