cnpmcore 0.0.2 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/History.md +19 -0
- package/LICENSE +1 -1
- package/README.md +13 -4
- package/dist/app/common/AbstractService.d.ts +5 -0
- package/dist/app/{port/type/BaseController.js → common/AbstractService.js} +11 -9
- package/dist/app/common/FileUtil.d.ts +15 -0
- package/dist/app/common/FileUtil.js +77 -0
- package/dist/app/common/PackageUtil.d.ts +9 -0
- package/dist/app/common/PackageUtil.js +38 -16
- package/dist/app/common/SyncUtil.d.ts +2 -0
- package/dist/app/common/SyncUtil.js +17 -0
- package/dist/app/common/UserUtil.d.ts +5 -0
- package/dist/app/common/UserUtil.js +72 -0
- package/dist/app/common/adapter/BugVersionStore.d.ts +7 -0
- package/dist/app/common/adapter/BugVersionStore.js +28 -0
- package/dist/app/common/adapter/CacheAdapter.d.ts +13 -0
- package/dist/app/common/adapter/CacheAdapter.js +78 -0
- package/dist/app/common/adapter/NFSAdapter.d.ts +16 -0
- package/dist/app/common/adapter/NFSAdapter.js +62 -22
- package/dist/app/common/adapter/NPMRegistry.d.ts +78 -0
- package/dist/app/common/adapter/NPMRegistry.js +98 -0
- package/dist/app/common/adapter/QueueAdapter.d.ts +7 -0
- package/dist/app/common/adapter/QueueAdapter.js +37 -0
- package/dist/app/common/adapter/binary/AbstractBinary.d.ts +33 -0
- package/dist/app/common/adapter/binary/AbstractBinary.js +76 -0
- package/dist/app/common/adapter/binary/ApiBinary.d.ts +8 -0
- package/dist/app/common/adapter/binary/ApiBinary.js +31 -0
- package/dist/app/common/adapter/binary/BucketBinary.d.ts +5 -0
- package/dist/app/common/adapter/binary/BucketBinary.js +77 -0
- package/dist/app/common/adapter/binary/CypressBinary.d.ts +5 -0
- package/dist/app/common/adapter/binary/CypressBinary.js +63 -0
- package/dist/app/common/adapter/binary/ElectronBinary.d.ts +5 -0
- package/dist/app/common/adapter/binary/ElectronBinary.js +44 -0
- package/dist/app/common/adapter/binary/GithubBinary.d.ts +7 -0
- package/dist/app/common/adapter/binary/GithubBinary.js +93 -0
- package/dist/app/common/adapter/binary/ImageminBinary.d.ts +5 -0
- package/dist/app/common/adapter/binary/ImageminBinary.js +96 -0
- package/dist/app/common/adapter/binary/NodeBinary.d.ts +4 -0
- package/dist/app/common/adapter/binary/NodeBinary.js +41 -0
- package/dist/app/common/adapter/binary/NodePreGypBinary.d.ts +5 -0
- package/dist/app/common/adapter/binary/NodePreGypBinary.js +136 -0
- package/dist/app/common/adapter/binary/NwjsBinary.d.ts +6 -0
- package/dist/app/common/adapter/binary/NwjsBinary.js +47 -0
- package/dist/app/common/adapter/binary/PlaywrightBinary.d.ts +5 -0
- package/dist/app/common/adapter/binary/PlaywrightBinary.js +214 -0
- package/dist/app/common/adapter/binary/PuppeteerBinary.d.ts +6 -0
- package/dist/app/common/adapter/binary/PuppeteerBinary.js +125 -0
- package/dist/app/common/adapter/binary/SqlcipherBinary.d.ts +5 -0
- package/dist/app/common/adapter/binary/SqlcipherBinary.js +78 -0
- package/dist/app/common/aop/AsyncTimer.d.ts +9 -0
- package/dist/app/common/aop/AsyncTimer.js +36 -0
- package/dist/app/common/constants.d.ts +2 -0
- package/dist/app/common/constants.js +6 -0
- package/dist/app/common/dayjs.d.ts +2 -0
- package/dist/app/common/dayjs.js +10 -0
- package/dist/app/common/enum/Task.d.ts +12 -0
- package/dist/app/common/enum/Task.js +18 -0
- package/dist/app/common/enum/User.d.ts +5 -0
- package/dist/app/common/enum/User.js +10 -0
- package/dist/app/common/typing.d.ts +28 -0
- package/dist/app/common/typing.js +3 -0
- package/dist/app/core/entity/Binary.d.ts +28 -0
- package/dist/app/core/entity/Binary.js +29 -0
- package/dist/app/core/entity/BugVersion.d.ts +14 -0
- package/dist/app/core/entity/BugVersion.js +43 -0
- package/dist/app/core/entity/Change.d.ts +17 -0
- package/dist/app/core/entity/Change.js +20 -0
- package/dist/app/core/entity/Dist.d.ts +21 -0
- package/dist/app/core/entity/Dist.js +1 -2
- package/dist/app/core/entity/Entity.d.ts +11 -0
- package/dist/app/core/entity/Entity.js +3 -3
- package/dist/app/core/entity/Package.d.ts +45 -0
- package/dist/app/core/entity/Package.js +33 -25
- package/dist/app/core/entity/PackageTag.d.ts +17 -0
- package/dist/app/core/entity/PackageVersion.d.ts +26 -0
- package/dist/app/core/entity/PackageVersionBlock.d.ts +17 -0
- package/dist/app/core/entity/PackageVersionBlock.js +20 -0
- package/dist/app/core/entity/PackageVersionManifest.d.ts +17 -0
- package/dist/app/core/entity/PackageVersionManifest.js +20 -0
- package/dist/app/core/entity/Task.d.ts +43 -0
- package/dist/app/core/entity/Task.js +94 -0
- package/dist/app/core/entity/Token.d.ts +24 -0
- package/dist/app/core/entity/Token.js +23 -0
- package/dist/app/core/entity/User.d.ts +25 -0
- package/dist/app/core/entity/User.js +24 -0
- package/dist/app/core/event/BugVersionFixHandler.d.ts +6 -0
- package/dist/app/core/event/BugVersionFixHandler.js +42 -0
- package/dist/app/core/event/CacheCleaner.d.ts +38 -0
- package/dist/app/core/event/CacheCleaner.js +119 -0
- package/dist/app/core/event/ChangesStream.d.ts +32 -0
- package/dist/app/core/event/ChangesStream.js +106 -0
- package/dist/app/core/event/StoreManifest.d.ts +11 -0
- package/dist/app/core/event/StoreManifest.js +54 -0
- package/dist/app/core/event/index.d.ts +27 -0
- package/dist/app/core/event/index.js +11 -3
- package/dist/app/core/service/BinarySyncerService.d.ts +23 -0
- package/dist/app/core/service/BinarySyncerService.js +281 -0
- package/dist/app/core/service/BugVersionService.d.ts +11 -0
- package/dist/app/core/service/BugVersionService.js +86 -0
- package/dist/app/core/service/CacheService.d.ts +33 -0
- package/dist/app/core/service/CacheService.js +75 -0
- package/dist/app/core/service/ChangesStreamService.d.ts +11 -0
- package/dist/app/core/service/ChangesStreamService.js +186 -0
- package/dist/app/core/service/PackageManagerService.d.ts +83 -0
- package/dist/app/core/service/PackageManagerService.js +675 -78
- package/dist/app/core/service/PackageSyncerService.d.ts +24 -0
- package/dist/app/core/service/PackageSyncerService.js +667 -0
- package/dist/app/core/service/TaskService.d.ts +22 -0
- package/dist/app/core/service/TaskService.js +142 -0
- package/dist/app/core/service/UserService.d.ts +36 -0
- package/dist/app/core/service/UserService.js +120 -0
- package/dist/app/core/util/EntityUtil.d.ts +8 -0
- package/dist/app/core/util/EntityUtil.js +3 -3
- package/dist/app/infra/NFSClientAdapter.d.ts +18 -0
- package/dist/app/infra/NFSClientAdapter.js +74 -0
- package/dist/app/infra/package.json +6 -0
- package/dist/app/port/UserRoleManager.d.ts +24 -0
- package/dist/app/port/UserRoleManager.js +146 -0
- package/dist/app/port/controller/AbstractController.d.ts +32 -0
- package/dist/app/port/controller/AbstractController.js +112 -0
- package/dist/app/port/controller/BinarySyncController.d.ts +36 -0
- package/dist/app/port/controller/BinarySyncController.js +123 -0
- package/dist/app/port/controller/ChangesStreamController.d.ts +13 -0
- package/dist/app/port/controller/ChangesStreamController.js +53 -0
- package/dist/app/port/controller/DownloadController.d.ts +18 -0
- package/dist/app/port/controller/DownloadController.js +134 -0
- package/dist/app/port/controller/HomeController.d.ts +37 -0
- package/dist/app/port/controller/HomeController.js +72 -0
- package/dist/app/port/controller/PackageBlockController.d.ts +24 -0
- package/dist/app/port/controller/PackageBlockController.js +108 -0
- package/dist/app/port/controller/PackageSyncController.d.ts +35 -0
- package/dist/app/port/controller/PackageSyncController.js +205 -0
- package/dist/app/port/controller/PackageTagController.d.ts +12 -0
- package/dist/app/port/controller/PackageTagController.js +88 -0
- package/dist/app/port/controller/TokenController.d.ts +38 -0
- package/dist/app/port/controller/TokenController.js +125 -0
- package/dist/app/port/controller/UserController.d.ts +39 -0
- package/dist/app/port/controller/UserController.js +223 -0
- package/dist/app/port/controller/package/DownloadPackageVersionTar.d.ts +9 -0
- package/dist/app/port/controller/package/DownloadPackageVersionTar.js +82 -0
- package/dist/app/port/controller/package/RemovePackageVersionController.d.ts +8 -0
- package/dist/app/port/controller/package/RemovePackageVersionController.js +56 -0
- package/dist/app/port/controller/package/SavePackageVersionController.d.ts +48 -0
- package/dist/app/port/controller/package/SavePackageVersionController.js +221 -0
- package/dist/app/port/controller/package/ShowPackageController.d.ts +8 -0
- package/dist/app/port/controller/package/ShowPackageController.js +99 -0
- package/dist/app/port/controller/package/ShowPackageVersionController.d.ts +6 -0
- package/dist/app/port/controller/package/ShowPackageVersionController.js +55 -0
- package/dist/app/port/controller/package/UpdatePackageController.d.ts +17 -0
- package/dist/app/port/controller/package/UpdatePackageController.js +68 -0
- package/dist/app/port/middleware/AlwaysAuth.d.ts +2 -0
- package/dist/app/port/middleware/AlwaysAuth.js +17 -0
- package/dist/app/port/middleware/ErrorHandler.d.ts +2 -0
- package/dist/app/port/middleware/ErrorHandler.js +27 -5
- package/dist/app/port/middleware/Tracing.d.ts +2 -0
- package/dist/app/port/middleware/Tracing.js +22 -0
- package/dist/app/port/middleware/index.d.ts +2 -0
- package/dist/app/port/middleware/index.js +22 -0
- package/dist/app/port/typebox.d.ts +29 -0
- package/dist/app/port/typebox.js +71 -0
- package/dist/app/repository/AbstractRepository.d.ts +4 -0
- package/dist/app/repository/AbstractRepository.js +17 -0
- package/dist/app/repository/BinaryRepository.d.ts +7 -0
- package/dist/app/repository/BinaryRepository.js +45 -0
- package/dist/app/repository/ChangeRepository.d.ts +8 -0
- package/dist/app/repository/ChangeRepository.js +31 -0
- package/dist/app/repository/DistRepository.d.ts +15 -0
- package/dist/app/repository/DistRepository.js +69 -0
- package/dist/app/repository/PackageRepository.d.ts +39 -0
- package/dist/app/repository/PackageRepository.js +223 -36
- package/dist/app/repository/PackageVersionBlockRepository.d.ts +10 -0
- package/dist/app/repository/PackageVersionBlockRepository.js +51 -0
- package/dist/app/repository/PackageVersionDownloadRepository.d.ts +7 -0
- package/dist/app/repository/PackageVersionDownloadRepository.js +77 -0
- package/dist/app/repository/TaskRepository.d.ts +10 -0
- package/dist/app/repository/TaskRepository.js +82 -0
- package/dist/app/repository/UserRepository.d.ts +15 -0
- package/dist/app/repository/UserRepository.js +81 -0
- package/dist/app/repository/model/Binary.d.ts +13 -0
- package/dist/app/repository/model/Binary.js +53 -0
- package/dist/app/repository/model/Change.d.ts +10 -0
- package/dist/app/repository/model/Change.js +44 -0
- package/dist/app/repository/model/Dist.d.ts +12 -0
- package/dist/app/repository/model/Dist.js +10 -13
- package/dist/app/repository/model/HistoryTask.d.ts +18 -0
- package/dist/app/repository/model/HistoryTask.js +65 -0
- package/dist/app/repository/model/Maintainer.d.ts +8 -0
- package/dist/app/repository/model/Maintainer.js +36 -0
- package/dist/app/repository/model/Package.d.ts +13 -0
- package/dist/app/repository/model/Package.js +18 -9
- package/dist/app/repository/model/PackageDep.d.ts +11 -0
- package/dist/app/repository/model/PackageDep.js +9 -9
- package/dist/app/repository/model/PackageTag.d.ts +10 -0
- package/dist/app/repository/model/PackageTag.js +9 -9
- package/dist/app/repository/model/PackageVersion.d.ts +14 -0
- package/dist/app/repository/model/PackageVersion.js +9 -9
- package/dist/app/repository/model/PackageVersionBlock.d.ts +10 -0
- package/dist/app/repository/model/PackageVersionBlock.js +44 -0
- package/dist/app/repository/model/PackageVersionDownload.d.ts +40 -0
- package/dist/app/repository/model/PackageVersionDownload.js +132 -0
- package/dist/app/repository/model/PackageVersionManifest.d.ts +10 -0
- package/dist/app/repository/model/PackageVersionManifest.js +46 -0
- package/dist/app/repository/model/Task.d.ts +18 -0
- package/dist/app/repository/model/Task.js +65 -0
- package/dist/app/repository/model/Token.d.ts +13 -0
- package/dist/app/repository/model/Token.js +55 -0
- package/dist/app/repository/model/User.d.ts +14 -0
- package/dist/app/repository/model/User.js +56 -0
- package/dist/app/repository/util/EntityProperty.d.ts +1 -0
- package/dist/app/repository/util/ModelConvertor.d.ts +7 -0
- package/dist/app/repository/util/ModelConvertor.js +35 -2
- package/dist/app/repository/util/ModelConvertorUtil.d.ts +8 -0
- package/dist/app/schedule/ChangesStreamWorker.d.ts +8 -0
- package/dist/app/schedule/ChangesStreamWorker.js +27 -0
- package/dist/app/schedule/CheckRecentlyUpdatedPackages.d.ts +8 -0
- package/dist/app/schedule/CheckRecentlyUpdatedPackages.js +66 -0
- package/dist/app/schedule/CleanTempDir.d.ts +8 -0
- package/dist/app/schedule/CleanTempDir.js +48 -0
- package/dist/app/schedule/CreateSyncBinaryTask.d.ts +8 -0
- package/dist/app/schedule/CreateSyncBinaryTask.js +34 -0
- package/dist/app/schedule/SavePackageVersionDownloadCounter.d.ts +8 -0
- package/dist/app/schedule/SavePackageVersionDownloadCounter.js +21 -0
- package/dist/app/schedule/SyncBinaryWorker.d.ts +8 -0
- package/dist/app/schedule/SyncBinaryWorker.js +30 -0
- package/dist/app/schedule/SyncPackageWorker.d.ts +8 -0
- package/dist/app/schedule/SyncPackageWorker.js +44 -0
- package/dist/app/schedule/TaskTimeoutHandler.d.ts +9 -0
- package/dist/app/schedule/TaskTimeoutHandler.js +27 -0
- package/dist/app/schedule/UpdateTotalData.d.ts +9 -0
- package/dist/app/schedule/UpdateTotalData.js +103 -0
- package/dist/app.d.ts +11 -0
- package/dist/app.js +22 -0
- package/dist/config/binaries.d.ts +38 -0
- package/dist/config/binaries.js +810 -0
- package/dist/config/config.default.d.ts +3 -0
- package/dist/config/config.default.js +128 -9
- package/dist/config/config.unittest.d.ts +3 -0
- package/dist/config/config.unittest.js +18 -0
- package/dist/config/plugin.d.ts +3 -0
- package/dist/config/plugin.js +19 -3
- package/package.json +76 -21
- package/dist/app/common/adapter/NFSClientAdapter.js +0 -43
- package/dist/app/port/controller/PackageController.js +0 -273
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { TaskState, TaskType } from '../../common/enum/Task';
|
|
3
|
+
import { AbstractService } from '../../common/AbstractService';
|
|
4
|
+
import { Task } from '../entity/Task';
|
|
5
|
+
export declare class TaskService extends AbstractService {
|
|
6
|
+
private readonly taskRepository;
|
|
7
|
+
private readonly nfsAdapter;
|
|
8
|
+
private readonly queueAdapter;
|
|
9
|
+
getTaskQueueLength(taskType: TaskType): Promise<number>;
|
|
10
|
+
createTask(task: Task, addTaskQueueOnExists: boolean): Promise<Task>;
|
|
11
|
+
retryTask(task: Task, appendLog?: string): Promise<void>;
|
|
12
|
+
findTask(taskId: string): Promise<Task | null>;
|
|
13
|
+
findTaskLog(task: Task): Promise<string | import("stream").Readable | undefined>;
|
|
14
|
+
findExecuteTask(taskType: TaskType): Promise<Task | null>;
|
|
15
|
+
retryExecuteTimeoutTasks(): Promise<{
|
|
16
|
+
processing: number;
|
|
17
|
+
waiting: number;
|
|
18
|
+
}>;
|
|
19
|
+
appendTaskLog(task: Task, appendLog: string): Promise<void>;
|
|
20
|
+
finishTask(task: Task, taskState: TaskState, appendLog?: string): Promise<void>;
|
|
21
|
+
private appendLogToNFS;
|
|
22
|
+
}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
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;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.TaskService = void 0;
|
|
10
|
+
const tegg_1 = require("@eggjs/tegg");
|
|
11
|
+
const Task_1 = require("../../common/enum/Task");
|
|
12
|
+
const AbstractService_1 = require("../../common/AbstractService");
|
|
13
|
+
let TaskService = class TaskService extends AbstractService_1.AbstractService {
|
|
14
|
+
async getTaskQueueLength(taskType) {
|
|
15
|
+
return await this.queueAdapter.length(taskType);
|
|
16
|
+
}
|
|
17
|
+
async createTask(task, addTaskQueueOnExists) {
|
|
18
|
+
const existsTask = await this.taskRepository.findTaskByTargetName(task.targetName, task.type);
|
|
19
|
+
if (existsTask) {
|
|
20
|
+
if (addTaskQueueOnExists && existsTask.state === Task_1.TaskState.Waiting) {
|
|
21
|
+
const queueLength = await this.getTaskQueueLength(task.type);
|
|
22
|
+
if (queueLength < this.config.cnpmcore.taskQueueHighWaterSize) {
|
|
23
|
+
// make sure waiting task in queue
|
|
24
|
+
await this.queueAdapter.push(task.type, existsTask.taskId);
|
|
25
|
+
this.logger.info('[TaskService.createTask:exists-to-queue] taskType: %s, targetName: %s, taskId: %s, queue size: %s', task.type, task.targetName, task.taskId, queueLength);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return existsTask;
|
|
29
|
+
}
|
|
30
|
+
await this.taskRepository.saveTask(task);
|
|
31
|
+
const queueSize = await this.queueAdapter.push(task.type, task.taskId);
|
|
32
|
+
this.logger.info('[TaskService.createTask:new] taskType: %s, targetName: %s, taskId: %s, queue size: %s', task.type, task.targetName, task.taskId, queueSize);
|
|
33
|
+
return task;
|
|
34
|
+
}
|
|
35
|
+
async retryTask(task, appendLog) {
|
|
36
|
+
if (appendLog) {
|
|
37
|
+
await this.appendLogToNFS(task, appendLog);
|
|
38
|
+
}
|
|
39
|
+
task.state = Task_1.TaskState.Waiting;
|
|
40
|
+
// make sure updatedAt changed
|
|
41
|
+
task.updatedAt = new Date();
|
|
42
|
+
await this.taskRepository.saveTask(task);
|
|
43
|
+
const queueSize = await this.queueAdapter.push(task.type, task.taskId);
|
|
44
|
+
this.logger.info('[TaskService.retryTask:save] taskType: %s, targetName: %s, taskId: %s, queue size: %s', task.type, task.targetName, task.taskId, queueSize);
|
|
45
|
+
}
|
|
46
|
+
async findTask(taskId) {
|
|
47
|
+
return await this.taskRepository.findTask(taskId);
|
|
48
|
+
}
|
|
49
|
+
async findTaskLog(task) {
|
|
50
|
+
return await this.nfsAdapter.getDownloadUrlOrStream(task.logPath);
|
|
51
|
+
}
|
|
52
|
+
async findExecuteTask(taskType) {
|
|
53
|
+
const taskId = await this.queueAdapter.pop(taskType);
|
|
54
|
+
if (taskId) {
|
|
55
|
+
const task = await this.taskRepository.findTask(taskId);
|
|
56
|
+
if (task) {
|
|
57
|
+
task.setExecuteWorker();
|
|
58
|
+
task.state = Task_1.TaskState.Processing;
|
|
59
|
+
task.attempts += 1;
|
|
60
|
+
await this.taskRepository.saveTask(task);
|
|
61
|
+
return task;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
66
|
+
async retryExecuteTimeoutTasks() {
|
|
67
|
+
// try processing timeout tasks in 10 mins
|
|
68
|
+
const tasks = await this.taskRepository.findTimeoutTasks(Task_1.TaskState.Processing, 60000 * 10);
|
|
69
|
+
for (const task of tasks) {
|
|
70
|
+
// ignore ChangesStream task, it won't timeout
|
|
71
|
+
if (task.attempts >= 3 && task.type !== Task_1.TaskType.ChangesStream) {
|
|
72
|
+
await this.finishTask(task, Task_1.TaskState.Timeout);
|
|
73
|
+
this.logger.warn('[TaskService.retryExecuteTimeoutTasks:timeout] taskType: %s, targetName: %s, taskId: %s, attempts %s set to fail', task.type, task.targetName, task.taskId, task.attempts);
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
if (task.attempts >= 1) {
|
|
77
|
+
// reset logPath
|
|
78
|
+
task.resetLogPath();
|
|
79
|
+
}
|
|
80
|
+
await this.retryTask(task);
|
|
81
|
+
this.logger.warn('[TaskService.retryExecuteTimeoutTasks:retry] taskType: %s, targetName: %s, taskId: %s, attempts %s will retry again', task.type, task.targetName, task.taskId, task.attempts);
|
|
82
|
+
}
|
|
83
|
+
// try waiting timeout tasks in 30 mins
|
|
84
|
+
const waitingTasks = await this.taskRepository.findTimeoutTasks(Task_1.TaskState.Waiting, 60000 * 30);
|
|
85
|
+
for (const task of waitingTasks) {
|
|
86
|
+
await this.retryTask(task);
|
|
87
|
+
this.logger.warn('[TaskService.retryExecuteTimeoutTasks:retryWaiting] taskType: %s, targetName: %s, taskId: %s waiting too long', task.type, task.targetName, task.taskId);
|
|
88
|
+
}
|
|
89
|
+
return {
|
|
90
|
+
processing: tasks.length,
|
|
91
|
+
waiting: waitingTasks.length,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
async appendTaskLog(task, appendLog) {
|
|
95
|
+
await this.appendLogToNFS(task, appendLog);
|
|
96
|
+
task.updatedAt = new Date();
|
|
97
|
+
await this.taskRepository.saveTask(task);
|
|
98
|
+
}
|
|
99
|
+
async finishTask(task, taskState, appendLog) {
|
|
100
|
+
if (appendLog) {
|
|
101
|
+
await this.appendLogToNFS(task, appendLog);
|
|
102
|
+
}
|
|
103
|
+
task.state = taskState;
|
|
104
|
+
await this.taskRepository.saveTaskToHistory(task);
|
|
105
|
+
}
|
|
106
|
+
async appendLogToNFS(task, appendLog) {
|
|
107
|
+
try {
|
|
108
|
+
const nextPosition = await this.nfsAdapter.appendBytes(task.logPath, Buffer.from(appendLog + '\n'), task.logStorePosition, {
|
|
109
|
+
'Content-Type': 'text/plain; charset=utf-8',
|
|
110
|
+
});
|
|
111
|
+
if (nextPosition) {
|
|
112
|
+
task.logStorePosition = nextPosition;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
catch (err) {
|
|
116
|
+
// [PositionNotEqualToLengthError]: Position is not equal to file length, status: 409
|
|
117
|
+
// [ObjectNotAppendableError]: The object is not appendable
|
|
118
|
+
if (err.code === 'PositionNotEqualToLength' || err.code === 'ObjectNotAppendable') {
|
|
119
|
+
// override exists log file
|
|
120
|
+
await this.nfsAdapter.uploadBytes(task.logPath, Buffer.from(appendLog + '\n'));
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
throw err;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
__decorate([
|
|
128
|
+
(0, tegg_1.Inject)()
|
|
129
|
+
], TaskService.prototype, "taskRepository", void 0);
|
|
130
|
+
__decorate([
|
|
131
|
+
(0, tegg_1.Inject)()
|
|
132
|
+
], TaskService.prototype, "nfsAdapter", void 0);
|
|
133
|
+
__decorate([
|
|
134
|
+
(0, tegg_1.Inject)()
|
|
135
|
+
], TaskService.prototype, "queueAdapter", void 0);
|
|
136
|
+
TaskService = __decorate([
|
|
137
|
+
(0, tegg_1.ContextProto)({
|
|
138
|
+
accessLevel: tegg_1.AccessLevel.PUBLIC,
|
|
139
|
+
})
|
|
140
|
+
], TaskService);
|
|
141
|
+
exports.TaskService = TaskService;
|
|
142
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGFza1NlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9hcHAvY29yZS9zZXJ2aWNlL1Rhc2tTZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLHNDQUlxQjtBQUVyQixpREFBNkQ7QUFDN0Qsa0VBQStEO0FBUS9ELElBQWEsV0FBVyxHQUF4QixNQUFhLFdBQVksU0FBUSxpQ0FBZTtJQVF2QyxLQUFLLENBQUMsa0JBQWtCLENBQUMsUUFBa0I7UUFDaEQsT0FBTyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFTSxLQUFLLENBQUMsVUFBVSxDQUFDLElBQVUsRUFBRSxvQkFBNkI7UUFDL0QsTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlGLElBQUksVUFBVSxFQUFFO1lBQ2QsSUFBSSxvQkFBb0IsSUFBSSxVQUFVLENBQUMsS0FBSyxLQUFLLGdCQUFTLENBQUMsT0FBTyxFQUFFO2dCQUNsRSxNQUFNLFdBQVcsR0FBRyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzdELElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLHNCQUFzQixFQUFFO29CQUM3RCxrQ0FBa0M7b0JBQ2xDLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQVMsSUFBSSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ25FLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLG1HQUFtRyxFQUNsSCxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLE1B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
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { User as UserEntity } from '../entity/User';
|
|
2
|
+
import { Token as TokenEntity } from '../entity/Token';
|
|
3
|
+
import { LoginResultCode } from '../../common/enum/User';
|
|
4
|
+
import { AbstractService } from '../../common/AbstractService';
|
|
5
|
+
declare type CreateUser = {
|
|
6
|
+
name: string;
|
|
7
|
+
password: string;
|
|
8
|
+
email: string;
|
|
9
|
+
ip: string;
|
|
10
|
+
};
|
|
11
|
+
declare type LoginResult = {
|
|
12
|
+
code: LoginResultCode;
|
|
13
|
+
user?: UserEntity;
|
|
14
|
+
token?: TokenEntity;
|
|
15
|
+
};
|
|
16
|
+
declare type CreateTokenOptions = {
|
|
17
|
+
isReadonly?: boolean;
|
|
18
|
+
isAutomation?: boolean;
|
|
19
|
+
cidrWhitelist?: string[];
|
|
20
|
+
};
|
|
21
|
+
export declare class UserService extends AbstractService {
|
|
22
|
+
private readonly userRepository;
|
|
23
|
+
checkPassword(user: UserEntity, password: string): boolean;
|
|
24
|
+
login(name: string, password: string): Promise<LoginResult>;
|
|
25
|
+
create(createUser: CreateUser): Promise<{
|
|
26
|
+
user: UserEntity;
|
|
27
|
+
token: TokenEntity;
|
|
28
|
+
}>;
|
|
29
|
+
savePublicUser(name: string, email: string): Promise<{
|
|
30
|
+
changed: boolean;
|
|
31
|
+
user: UserEntity;
|
|
32
|
+
}>;
|
|
33
|
+
createToken(userId: string, options?: CreateTokenOptions): Promise<TokenEntity>;
|
|
34
|
+
removeToken(userId: string, tokenKeyOrTokenValue: string): Promise<void>;
|
|
35
|
+
}
|
|
36
|
+
export {};
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
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;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
9
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.UserService = void 0;
|
|
13
|
+
const crypto_1 = __importDefault(require("crypto"));
|
|
14
|
+
const tegg_1 = require("@eggjs/tegg");
|
|
15
|
+
const egg_errors_1 = require("egg-errors");
|
|
16
|
+
const User_1 = require("../entity/User");
|
|
17
|
+
const Token_1 = require("../entity/Token");
|
|
18
|
+
const User_2 = require("../../common/enum/User");
|
|
19
|
+
const UserUtil_1 = require("../../common/UserUtil");
|
|
20
|
+
const AbstractService_1 = require("../../common/AbstractService");
|
|
21
|
+
let UserService = class UserService extends AbstractService_1.AbstractService {
|
|
22
|
+
checkPassword(user, password) {
|
|
23
|
+
const plain = `${user.passwordSalt}${password}`;
|
|
24
|
+
return (0, UserUtil_1.checkIntegrity)(plain, user.passwordIntegrity);
|
|
25
|
+
}
|
|
26
|
+
async login(name, password) {
|
|
27
|
+
const user = await this.userRepository.findUserByName(name);
|
|
28
|
+
if (!user)
|
|
29
|
+
return { code: User_2.LoginResultCode.UserNotFound };
|
|
30
|
+
if (!this.checkPassword(user, password)) {
|
|
31
|
+
return { code: User_2.LoginResultCode.Fail };
|
|
32
|
+
}
|
|
33
|
+
const token = await this.createToken(user.userId);
|
|
34
|
+
return { code: User_2.LoginResultCode.Success, user, token };
|
|
35
|
+
}
|
|
36
|
+
async create(createUser) {
|
|
37
|
+
const passwordSalt = crypto_1.default.randomBytes(30).toString('hex');
|
|
38
|
+
const plain = `${passwordSalt}${createUser.password}`;
|
|
39
|
+
const passwordIntegrity = (0, UserUtil_1.integrity)(plain);
|
|
40
|
+
const userEntity = User_1.User.create({
|
|
41
|
+
name: createUser.name,
|
|
42
|
+
email: createUser.email,
|
|
43
|
+
ip: createUser.ip,
|
|
44
|
+
passwordSalt,
|
|
45
|
+
passwordIntegrity,
|
|
46
|
+
isPrivate: true,
|
|
47
|
+
});
|
|
48
|
+
await this.userRepository.saveUser(userEntity);
|
|
49
|
+
const token = await this.createToken(userEntity.userId);
|
|
50
|
+
return { user: userEntity, token };
|
|
51
|
+
}
|
|
52
|
+
async savePublicUser(name, email) {
|
|
53
|
+
const storeName = name.startsWith('name:') ? name : `npm:${name}`;
|
|
54
|
+
let user = await this.userRepository.findUserByName(storeName);
|
|
55
|
+
if (!user) {
|
|
56
|
+
const passwordSalt = crypto_1.default.randomBytes(20).toString('hex');
|
|
57
|
+
const passwordIntegrity = (0, UserUtil_1.integrity)(passwordSalt);
|
|
58
|
+
user = User_1.User.create({
|
|
59
|
+
name: storeName,
|
|
60
|
+
email,
|
|
61
|
+
ip: '',
|
|
62
|
+
passwordSalt,
|
|
63
|
+
passwordIntegrity,
|
|
64
|
+
isPrivate: false,
|
|
65
|
+
});
|
|
66
|
+
await this.userRepository.saveUser(user);
|
|
67
|
+
return { changed: true, user };
|
|
68
|
+
}
|
|
69
|
+
if (user.email === email) {
|
|
70
|
+
// skip
|
|
71
|
+
return { changed: false, user };
|
|
72
|
+
}
|
|
73
|
+
user.email = email;
|
|
74
|
+
await this.userRepository.saveUser(user);
|
|
75
|
+
return { changed: true, user };
|
|
76
|
+
}
|
|
77
|
+
async createToken(userId, options = {}) {
|
|
78
|
+
var _a, _b, _c;
|
|
79
|
+
// https://github.blog/2021-09-23-announcing-npms-new-access-token-format/
|
|
80
|
+
// https://github.blog/2021-04-05-behind-githubs-new-authentication-token-formats/
|
|
81
|
+
const token = (0, UserUtil_1.randomToken)(this.config.cnpmcore.name);
|
|
82
|
+
const tokenKey = (0, UserUtil_1.sha512)(token);
|
|
83
|
+
const tokenMark = token.substring(0, token.indexOf('_') + 4);
|
|
84
|
+
const tokenEntity = Token_1.Token.create({
|
|
85
|
+
tokenKey,
|
|
86
|
+
tokenMark,
|
|
87
|
+
userId,
|
|
88
|
+
cidrWhitelist: (_a = options.cidrWhitelist) !== null && _a !== void 0 ? _a : [],
|
|
89
|
+
isReadonly: (_b = options.isReadonly) !== null && _b !== void 0 ? _b : false,
|
|
90
|
+
isAutomation: (_c = options.isAutomation) !== null && _c !== void 0 ? _c : false,
|
|
91
|
+
});
|
|
92
|
+
await this.userRepository.saveToken(tokenEntity);
|
|
93
|
+
tokenEntity.token = token;
|
|
94
|
+
return tokenEntity;
|
|
95
|
+
}
|
|
96
|
+
async removeToken(userId, tokenKeyOrTokenValue) {
|
|
97
|
+
let token = await this.userRepository.findTokenByTokenKey(tokenKeyOrTokenValue);
|
|
98
|
+
if (!token) {
|
|
99
|
+
// tokenKeyOrTokenValue is token value, sha512 and find again
|
|
100
|
+
token = await this.userRepository.findTokenByTokenKey((0, UserUtil_1.sha512)(tokenKeyOrTokenValue));
|
|
101
|
+
}
|
|
102
|
+
if (!token) {
|
|
103
|
+
throw new egg_errors_1.NotFoundError(`Token "${tokenKeyOrTokenValue}" not exists`);
|
|
104
|
+
}
|
|
105
|
+
if (token.userId !== userId) {
|
|
106
|
+
throw new egg_errors_1.ForbiddenError(`Not authorized to remove token "${tokenKeyOrTokenValue}"`);
|
|
107
|
+
}
|
|
108
|
+
await this.userRepository.removeToken(token.tokenId);
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
__decorate([
|
|
112
|
+
(0, tegg_1.Inject)()
|
|
113
|
+
], UserService.prototype, "userRepository", void 0);
|
|
114
|
+
UserService = __decorate([
|
|
115
|
+
(0, tegg_1.ContextProto)({
|
|
116
|
+
accessLevel: tegg_1.AccessLevel.PUBLIC,
|
|
117
|
+
})
|
|
118
|
+
], UserService);
|
|
119
|
+
exports.UserService = UserService;
|
|
120
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVXNlclNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9hcHAvY29yZS9zZXJ2aWNlL1VzZXJTZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLG9EQUE0QjtBQUM1QixzQ0FJcUI7QUFDckIsMkNBQTJEO0FBRTNELHlDQUFvRDtBQUNwRCwyQ0FBdUQ7QUFDdkQsaURBQXlEO0FBQ3pELG9EQUF1RjtBQUN2RixrRUFBK0Q7QUF3Qi9ELElBQWEsV0FBVyxHQUF4QixNQUFhLFdBQVksU0FBUSxpQ0FBZTtJQUk5QyxhQUFhLENBQUMsSUFBZ0IsRUFBRSxRQUFnQjtRQUM5QyxNQUFNLEtBQUssR0FBRyxHQUFHLElBQUksQ0FBQyxZQUFZLEdBQUcsUUFBUSxFQUFFLENBQUM7UUFDaEQsT0FBTyxJQUFBLHlCQUFjLEVBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRCxLQUFLLENBQUMsS0FBSyxDQUFDLElBQVksRUFBRSxRQUFnQjtRQUN4QyxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVELElBQUksQ0FBQyxJQUFJO1lBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxzQkFBZSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3pELElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsRUFBRTtZQUN2QyxPQUFPLEVBQUUsSUFBSSxFQUFFLHNCQUFlLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDdkM7UUFDRCxNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2xELE9BQU8sRUFBRSxJQUFJLEVBQUUsc0JBQWUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFB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
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { EntityData } from '../entity/Entity';
|
|
2
|
+
declare type PartialBy<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;
|
|
3
|
+
export declare type EasyData<T extends EntityData, Id extends keyof T> = PartialBy<T, 'createdAt' | 'updatedAt' | Id>;
|
|
4
|
+
export declare class EntityUtil {
|
|
5
|
+
static defaultData<T extends EntityData, Id extends keyof T>(data: EasyData<T, Id>, id: Id): T;
|
|
6
|
+
static createId(): string;
|
|
7
|
+
}
|
|
8
|
+
export {};
|
|
@@ -8,8 +8,8 @@ const bson_objectid_1 = __importDefault(require("bson-objectid"));
|
|
|
8
8
|
class EntityUtil {
|
|
9
9
|
static defaultData(data, id) {
|
|
10
10
|
Reflect.set(data, id, EntityUtil.createId());
|
|
11
|
-
data.
|
|
12
|
-
data.
|
|
11
|
+
data.createdAt = data.createdAt || new Date();
|
|
12
|
+
data.updatedAt = data.updatedAt || new Date();
|
|
13
13
|
return data;
|
|
14
14
|
}
|
|
15
15
|
static createId() {
|
|
@@ -17,4 +17,4 @@ class EntityUtil {
|
|
|
17
17
|
}
|
|
18
18
|
}
|
|
19
19
|
exports.EntityUtil = EntityUtil;
|
|
20
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRW50aXR5VXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2FwcC9jb3JlL3V0aWwvRW50aXR5VXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFDQSxrRUFBcUM7QUFPckMsTUFBYSxVQUFVO0lBQ3JCLE1BQU0sQ0FBQyxXQUFXLENBQTJDLElBQXFCLEVBQUUsRUFBTTtRQUN4RixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksSUFBSSxFQUFFLENBQUM7UUFDOUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksSUFBSSxFQUFFLENBQUM7UUFDOUMsT0FBTyxJQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELE1BQU0sQ0FBQyxRQUFRO1FBQ2IsT0FBTyxJQUFJLHVCQUFRLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0NBQ0Y7QUFYRCxnQ0FXQyJ9
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { EggObjectLifecycle } from '@eggjs/tegg';
|
|
3
|
+
import { AppendResult, NFSClient, UploadOptions, UploadResult } from '../common/typing';
|
|
4
|
+
import { Readable } from 'stream';
|
|
5
|
+
export declare class NFSClientAdapter implements EggObjectLifecycle, NFSClient {
|
|
6
|
+
private logger;
|
|
7
|
+
private config;
|
|
8
|
+
private _client;
|
|
9
|
+
get client(): any;
|
|
10
|
+
url?(key: string): string;
|
|
11
|
+
init(): Promise<void>;
|
|
12
|
+
appendBytes(bytes: Uint8Array, options: UploadOptions): Promise<AppendResult>;
|
|
13
|
+
createDownloadStream(key: string): Promise<Readable | undefined>;
|
|
14
|
+
readBytes(key: string): Promise<Uint8Array | undefined>;
|
|
15
|
+
remove(key: string): Promise<void>;
|
|
16
|
+
upload(filePath: string, options: UploadOptions): Promise<UploadResult>;
|
|
17
|
+
uploadBytes(bytes: Uint8Array, options: UploadOptions): Promise<UploadResult>;
|
|
18
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
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;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
9
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.NFSClientAdapter = void 0;
|
|
13
|
+
const tegg_1 = require("@eggjs/tegg");
|
|
14
|
+
const fs_cnpm_1 = __importDefault(require("fs-cnpm"));
|
|
15
|
+
let NFSClientAdapter = class NFSClientAdapter {
|
|
16
|
+
get client() {
|
|
17
|
+
return this._client;
|
|
18
|
+
}
|
|
19
|
+
async init() {
|
|
20
|
+
// NFS interface https://github.com/cnpm/cnpmjs.org/wiki/NFS-Guide
|
|
21
|
+
if (this.config.nfs.client) {
|
|
22
|
+
this._client = this.config.nfs.client;
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
if (this.config.env === 'prod') {
|
|
26
|
+
throw new Error('[NFSAdapter] Can\'t use local fs NFS on production env');
|
|
27
|
+
}
|
|
28
|
+
// try to use fs-cnpm, don't use it on production env
|
|
29
|
+
this.logger.warn('[NFSAdapter] Don\'t use local fs NFS on production env, store on %s', this.config.nfs.dir);
|
|
30
|
+
this._client = new fs_cnpm_1.default({ dir: this.config.nfs.dir });
|
|
31
|
+
}
|
|
32
|
+
if (typeof this._client.url === 'function') {
|
|
33
|
+
this.url = this._client.url.bind(this._client);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
async appendBytes(bytes, options) {
|
|
37
|
+
if (this._client.appendBytes) {
|
|
38
|
+
return await this._client.appendBytes(bytes, options);
|
|
39
|
+
}
|
|
40
|
+
return await this._client.appendBuffer(bytes, options);
|
|
41
|
+
}
|
|
42
|
+
async createDownloadStream(key) {
|
|
43
|
+
return await this._client.createDownloadStream(key);
|
|
44
|
+
}
|
|
45
|
+
async readBytes(key) {
|
|
46
|
+
return await this._client.readBytes(key);
|
|
47
|
+
}
|
|
48
|
+
async remove(key) {
|
|
49
|
+
return await this._client.remove(key);
|
|
50
|
+
}
|
|
51
|
+
async upload(filePath, options) {
|
|
52
|
+
return await this._client.upload(filePath, options);
|
|
53
|
+
}
|
|
54
|
+
async uploadBytes(bytes, options) {
|
|
55
|
+
if (this._client.uploadBytes) {
|
|
56
|
+
return await this._client.uploadBytes(bytes, options);
|
|
57
|
+
}
|
|
58
|
+
return await this._client.uploadBuffer(bytes, options);
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
__decorate([
|
|
62
|
+
(0, tegg_1.Inject)()
|
|
63
|
+
], NFSClientAdapter.prototype, "logger", void 0);
|
|
64
|
+
__decorate([
|
|
65
|
+
(0, tegg_1.Inject)()
|
|
66
|
+
], NFSClientAdapter.prototype, "config", void 0);
|
|
67
|
+
NFSClientAdapter = __decorate([
|
|
68
|
+
(0, tegg_1.SingletonProto)({
|
|
69
|
+
name: 'nfsClient',
|
|
70
|
+
accessLevel: tegg_1.AccessLevel.PUBLIC,
|
|
71
|
+
})
|
|
72
|
+
], NFSClientAdapter);
|
|
73
|
+
exports.NFSClientAdapter = NFSClientAdapter;
|
|
74
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTkZTQ2xpZW50QWRhcHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2FwcC9pbmZyYS9ORlNDbGllbnRBZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLHNDQUtxQjtBQUtyQixzREFBK0I7QUFRL0IsSUFBYSxnQkFBZ0IsR0FBN0IsTUFBYSxnQkFBZ0I7SUFTM0IsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFJRCxLQUFLLENBQUMsSUFBSTtRQUNSLGtFQUFrRTtRQUNsRSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRTtZQUMxQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQztTQUN2QzthQUFNO1lBQ0wsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsS0FBSyxNQUFNLEVBQUU7Z0JBQzlCLE1BQU0sSUFBSSxLQUFLLENBQUMsd0RBQXdELENBQUMsQ0FBQzthQUMzRTtZQUVELHFEQUFxRDtZQUNyRCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxxRUFBcUUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM3RyxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksaUJBQVEsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1NBQzNEO1FBRUQsSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxLQUFLLFVBQVUsRUFBRTtZQUMxQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDaEQ7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLFdBQVcsQ0FBQyxLQUFpQixFQUFFLE9BQXNCO1FBQ3pELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUU7WUFDNUIsT0FBTyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztTQUN2RDtRQUNELE9BQU8sTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVELEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxHQUFXO1FBQ3BDLE9BQU8sTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRCxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQVc7UUFDekIsT0FBTyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRCxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQVc7UUFDdEIsT0FBTyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRCxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQWdCLEVBQUUsT0FBc0I7UUFDbkQsT0FBTyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsS0FBSyxDQUFDLFdBQVcsQ0FBQyxLQUFpQixFQUFFLE9BQXNCO1FBQ3pELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUU7WUFDNUIsT0FBTyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztTQUN2RDtRQUNELE9BQU8sTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDekQsQ0FBQztDQUNGLENBQUE7QUE3REM7SUFEQyxJQUFBLGFBQU0sR0FBRTtnREFDaUI7QUFHMUI7SUFEQyxJQUFBLGFBQU0sR0FBRTtnREFDb0I7QUFMbEIsZ0JBQWdCO0lBSjVCLElBQUEscUJBQWMsRUFBQztRQUNkLElBQUksRUFBRSxXQUFXO1FBQ2pCLFdBQVcsRUFBRSxrQkFBVyxDQUFDLE1BQU07S0FDaEMsQ0FBQztHQUNXLGdCQUFnQixDQStENUI7QUEvRFksNENBQWdCIn0=
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { EggContext } from '@eggjs/tegg';
|
|
2
|
+
import { EggLogger } from 'egg';
|
|
3
|
+
import { Package as PackageEntity } from '../core/entity/Package';
|
|
4
|
+
import { User as UserEntity } from '../core/entity/User';
|
|
5
|
+
import { Token as TokenEntity } from '../core/entity/Token';
|
|
6
|
+
declare type TokenRole = 'read' | 'publish' | 'setting';
|
|
7
|
+
export declare class UserRoleManager {
|
|
8
|
+
private readonly userRepository;
|
|
9
|
+
private readonly packageRepository;
|
|
10
|
+
private readonly config;
|
|
11
|
+
protected logger: EggLogger;
|
|
12
|
+
private handleAuthorized;
|
|
13
|
+
private currentAuthorizedUser;
|
|
14
|
+
private currentAuthorizedToken;
|
|
15
|
+
getAuthorizedUserAndToken(ctx: EggContext): Promise<{
|
|
16
|
+
token: TokenEntity;
|
|
17
|
+
user: UserEntity;
|
|
18
|
+
} | null>;
|
|
19
|
+
requiredAuthorizedUser(ctx: EggContext, role: TokenRole): Promise<UserEntity>;
|
|
20
|
+
requiredPackageMaintainer(pkg: PackageEntity, user: UserEntity): Promise<void>;
|
|
21
|
+
requiredPackageScope(scope: string, user: UserEntity): Promise<void>;
|
|
22
|
+
isAdmin(ctx: EggContext): Promise<boolean>;
|
|
23
|
+
}
|
|
24
|
+
export {};
|