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.
Files changed (243) hide show
  1. package/History.md +19 -0
  2. package/LICENSE +1 -1
  3. package/README.md +13 -4
  4. package/dist/app/common/AbstractService.d.ts +5 -0
  5. package/dist/app/{port/type/BaseController.js → common/AbstractService.js} +11 -9
  6. package/dist/app/common/FileUtil.d.ts +15 -0
  7. package/dist/app/common/FileUtil.js +77 -0
  8. package/dist/app/common/PackageUtil.d.ts +9 -0
  9. package/dist/app/common/PackageUtil.js +38 -16
  10. package/dist/app/common/SyncUtil.d.ts +2 -0
  11. package/dist/app/common/SyncUtil.js +17 -0
  12. package/dist/app/common/UserUtil.d.ts +5 -0
  13. package/dist/app/common/UserUtil.js +72 -0
  14. package/dist/app/common/adapter/BugVersionStore.d.ts +7 -0
  15. package/dist/app/common/adapter/BugVersionStore.js +28 -0
  16. package/dist/app/common/adapter/CacheAdapter.d.ts +13 -0
  17. package/dist/app/common/adapter/CacheAdapter.js +78 -0
  18. package/dist/app/common/adapter/NFSAdapter.d.ts +16 -0
  19. package/dist/app/common/adapter/NFSAdapter.js +62 -22
  20. package/dist/app/common/adapter/NPMRegistry.d.ts +78 -0
  21. package/dist/app/common/adapter/NPMRegistry.js +98 -0
  22. package/dist/app/common/adapter/QueueAdapter.d.ts +7 -0
  23. package/dist/app/common/adapter/QueueAdapter.js +37 -0
  24. package/dist/app/common/adapter/binary/AbstractBinary.d.ts +33 -0
  25. package/dist/app/common/adapter/binary/AbstractBinary.js +76 -0
  26. package/dist/app/common/adapter/binary/ApiBinary.d.ts +8 -0
  27. package/dist/app/common/adapter/binary/ApiBinary.js +31 -0
  28. package/dist/app/common/adapter/binary/BucketBinary.d.ts +5 -0
  29. package/dist/app/common/adapter/binary/BucketBinary.js +77 -0
  30. package/dist/app/common/adapter/binary/CypressBinary.d.ts +5 -0
  31. package/dist/app/common/adapter/binary/CypressBinary.js +63 -0
  32. package/dist/app/common/adapter/binary/ElectronBinary.d.ts +5 -0
  33. package/dist/app/common/adapter/binary/ElectronBinary.js +44 -0
  34. package/dist/app/common/adapter/binary/GithubBinary.d.ts +7 -0
  35. package/dist/app/common/adapter/binary/GithubBinary.js +93 -0
  36. package/dist/app/common/adapter/binary/ImageminBinary.d.ts +5 -0
  37. package/dist/app/common/adapter/binary/ImageminBinary.js +96 -0
  38. package/dist/app/common/adapter/binary/NodeBinary.d.ts +4 -0
  39. package/dist/app/common/adapter/binary/NodeBinary.js +41 -0
  40. package/dist/app/common/adapter/binary/NodePreGypBinary.d.ts +5 -0
  41. package/dist/app/common/adapter/binary/NodePreGypBinary.js +136 -0
  42. package/dist/app/common/adapter/binary/NwjsBinary.d.ts +6 -0
  43. package/dist/app/common/adapter/binary/NwjsBinary.js +47 -0
  44. package/dist/app/common/adapter/binary/PlaywrightBinary.d.ts +5 -0
  45. package/dist/app/common/adapter/binary/PlaywrightBinary.js +214 -0
  46. package/dist/app/common/adapter/binary/PuppeteerBinary.d.ts +6 -0
  47. package/dist/app/common/adapter/binary/PuppeteerBinary.js +125 -0
  48. package/dist/app/common/adapter/binary/SqlcipherBinary.d.ts +5 -0
  49. package/dist/app/common/adapter/binary/SqlcipherBinary.js +78 -0
  50. package/dist/app/common/aop/AsyncTimer.d.ts +9 -0
  51. package/dist/app/common/aop/AsyncTimer.js +36 -0
  52. package/dist/app/common/constants.d.ts +2 -0
  53. package/dist/app/common/constants.js +6 -0
  54. package/dist/app/common/dayjs.d.ts +2 -0
  55. package/dist/app/common/dayjs.js +10 -0
  56. package/dist/app/common/enum/Task.d.ts +12 -0
  57. package/dist/app/common/enum/Task.js +18 -0
  58. package/dist/app/common/enum/User.d.ts +5 -0
  59. package/dist/app/common/enum/User.js +10 -0
  60. package/dist/app/common/typing.d.ts +28 -0
  61. package/dist/app/common/typing.js +3 -0
  62. package/dist/app/core/entity/Binary.d.ts +28 -0
  63. package/dist/app/core/entity/Binary.js +29 -0
  64. package/dist/app/core/entity/BugVersion.d.ts +14 -0
  65. package/dist/app/core/entity/BugVersion.js +43 -0
  66. package/dist/app/core/entity/Change.d.ts +17 -0
  67. package/dist/app/core/entity/Change.js +20 -0
  68. package/dist/app/core/entity/Dist.d.ts +21 -0
  69. package/dist/app/core/entity/Dist.js +1 -2
  70. package/dist/app/core/entity/Entity.d.ts +11 -0
  71. package/dist/app/core/entity/Entity.js +3 -3
  72. package/dist/app/core/entity/Package.d.ts +45 -0
  73. package/dist/app/core/entity/Package.js +33 -25
  74. package/dist/app/core/entity/PackageTag.d.ts +17 -0
  75. package/dist/app/core/entity/PackageVersion.d.ts +26 -0
  76. package/dist/app/core/entity/PackageVersionBlock.d.ts +17 -0
  77. package/dist/app/core/entity/PackageVersionBlock.js +20 -0
  78. package/dist/app/core/entity/PackageVersionManifest.d.ts +17 -0
  79. package/dist/app/core/entity/PackageVersionManifest.js +20 -0
  80. package/dist/app/core/entity/Task.d.ts +43 -0
  81. package/dist/app/core/entity/Task.js +94 -0
  82. package/dist/app/core/entity/Token.d.ts +24 -0
  83. package/dist/app/core/entity/Token.js +23 -0
  84. package/dist/app/core/entity/User.d.ts +25 -0
  85. package/dist/app/core/entity/User.js +24 -0
  86. package/dist/app/core/event/BugVersionFixHandler.d.ts +6 -0
  87. package/dist/app/core/event/BugVersionFixHandler.js +42 -0
  88. package/dist/app/core/event/CacheCleaner.d.ts +38 -0
  89. package/dist/app/core/event/CacheCleaner.js +119 -0
  90. package/dist/app/core/event/ChangesStream.d.ts +32 -0
  91. package/dist/app/core/event/ChangesStream.js +106 -0
  92. package/dist/app/core/event/StoreManifest.d.ts +11 -0
  93. package/dist/app/core/event/StoreManifest.js +54 -0
  94. package/dist/app/core/event/index.d.ts +27 -0
  95. package/dist/app/core/event/index.js +11 -3
  96. package/dist/app/core/service/BinarySyncerService.d.ts +23 -0
  97. package/dist/app/core/service/BinarySyncerService.js +281 -0
  98. package/dist/app/core/service/BugVersionService.d.ts +11 -0
  99. package/dist/app/core/service/BugVersionService.js +86 -0
  100. package/dist/app/core/service/CacheService.d.ts +33 -0
  101. package/dist/app/core/service/CacheService.js +75 -0
  102. package/dist/app/core/service/ChangesStreamService.d.ts +11 -0
  103. package/dist/app/core/service/ChangesStreamService.js +186 -0
  104. package/dist/app/core/service/PackageManagerService.d.ts +83 -0
  105. package/dist/app/core/service/PackageManagerService.js +675 -78
  106. package/dist/app/core/service/PackageSyncerService.d.ts +24 -0
  107. package/dist/app/core/service/PackageSyncerService.js +667 -0
  108. package/dist/app/core/service/TaskService.d.ts +22 -0
  109. package/dist/app/core/service/TaskService.js +142 -0
  110. package/dist/app/core/service/UserService.d.ts +36 -0
  111. package/dist/app/core/service/UserService.js +120 -0
  112. package/dist/app/core/util/EntityUtil.d.ts +8 -0
  113. package/dist/app/core/util/EntityUtil.js +3 -3
  114. package/dist/app/infra/NFSClientAdapter.d.ts +18 -0
  115. package/dist/app/infra/NFSClientAdapter.js +74 -0
  116. package/dist/app/infra/package.json +6 -0
  117. package/dist/app/port/UserRoleManager.d.ts +24 -0
  118. package/dist/app/port/UserRoleManager.js +146 -0
  119. package/dist/app/port/controller/AbstractController.d.ts +32 -0
  120. package/dist/app/port/controller/AbstractController.js +112 -0
  121. package/dist/app/port/controller/BinarySyncController.d.ts +36 -0
  122. package/dist/app/port/controller/BinarySyncController.js +123 -0
  123. package/dist/app/port/controller/ChangesStreamController.d.ts +13 -0
  124. package/dist/app/port/controller/ChangesStreamController.js +53 -0
  125. package/dist/app/port/controller/DownloadController.d.ts +18 -0
  126. package/dist/app/port/controller/DownloadController.js +134 -0
  127. package/dist/app/port/controller/HomeController.d.ts +37 -0
  128. package/dist/app/port/controller/HomeController.js +72 -0
  129. package/dist/app/port/controller/PackageBlockController.d.ts +24 -0
  130. package/dist/app/port/controller/PackageBlockController.js +108 -0
  131. package/dist/app/port/controller/PackageSyncController.d.ts +35 -0
  132. package/dist/app/port/controller/PackageSyncController.js +205 -0
  133. package/dist/app/port/controller/PackageTagController.d.ts +12 -0
  134. package/dist/app/port/controller/PackageTagController.js +88 -0
  135. package/dist/app/port/controller/TokenController.d.ts +38 -0
  136. package/dist/app/port/controller/TokenController.js +125 -0
  137. package/dist/app/port/controller/UserController.d.ts +39 -0
  138. package/dist/app/port/controller/UserController.js +223 -0
  139. package/dist/app/port/controller/package/DownloadPackageVersionTar.d.ts +9 -0
  140. package/dist/app/port/controller/package/DownloadPackageVersionTar.js +82 -0
  141. package/dist/app/port/controller/package/RemovePackageVersionController.d.ts +8 -0
  142. package/dist/app/port/controller/package/RemovePackageVersionController.js +56 -0
  143. package/dist/app/port/controller/package/SavePackageVersionController.d.ts +48 -0
  144. package/dist/app/port/controller/package/SavePackageVersionController.js +221 -0
  145. package/dist/app/port/controller/package/ShowPackageController.d.ts +8 -0
  146. package/dist/app/port/controller/package/ShowPackageController.js +99 -0
  147. package/dist/app/port/controller/package/ShowPackageVersionController.d.ts +6 -0
  148. package/dist/app/port/controller/package/ShowPackageVersionController.js +55 -0
  149. package/dist/app/port/controller/package/UpdatePackageController.d.ts +17 -0
  150. package/dist/app/port/controller/package/UpdatePackageController.js +68 -0
  151. package/dist/app/port/middleware/AlwaysAuth.d.ts +2 -0
  152. package/dist/app/port/middleware/AlwaysAuth.js +17 -0
  153. package/dist/app/port/middleware/ErrorHandler.d.ts +2 -0
  154. package/dist/app/port/middleware/ErrorHandler.js +27 -5
  155. package/dist/app/port/middleware/Tracing.d.ts +2 -0
  156. package/dist/app/port/middleware/Tracing.js +22 -0
  157. package/dist/app/port/middleware/index.d.ts +2 -0
  158. package/dist/app/port/middleware/index.js +22 -0
  159. package/dist/app/port/typebox.d.ts +29 -0
  160. package/dist/app/port/typebox.js +71 -0
  161. package/dist/app/repository/AbstractRepository.d.ts +4 -0
  162. package/dist/app/repository/AbstractRepository.js +17 -0
  163. package/dist/app/repository/BinaryRepository.d.ts +7 -0
  164. package/dist/app/repository/BinaryRepository.js +45 -0
  165. package/dist/app/repository/ChangeRepository.d.ts +8 -0
  166. package/dist/app/repository/ChangeRepository.js +31 -0
  167. package/dist/app/repository/DistRepository.d.ts +15 -0
  168. package/dist/app/repository/DistRepository.js +69 -0
  169. package/dist/app/repository/PackageRepository.d.ts +39 -0
  170. package/dist/app/repository/PackageRepository.js +223 -36
  171. package/dist/app/repository/PackageVersionBlockRepository.d.ts +10 -0
  172. package/dist/app/repository/PackageVersionBlockRepository.js +51 -0
  173. package/dist/app/repository/PackageVersionDownloadRepository.d.ts +7 -0
  174. package/dist/app/repository/PackageVersionDownloadRepository.js +77 -0
  175. package/dist/app/repository/TaskRepository.d.ts +10 -0
  176. package/dist/app/repository/TaskRepository.js +82 -0
  177. package/dist/app/repository/UserRepository.d.ts +15 -0
  178. package/dist/app/repository/UserRepository.js +81 -0
  179. package/dist/app/repository/model/Binary.d.ts +13 -0
  180. package/dist/app/repository/model/Binary.js +53 -0
  181. package/dist/app/repository/model/Change.d.ts +10 -0
  182. package/dist/app/repository/model/Change.js +44 -0
  183. package/dist/app/repository/model/Dist.d.ts +12 -0
  184. package/dist/app/repository/model/Dist.js +10 -13
  185. package/dist/app/repository/model/HistoryTask.d.ts +18 -0
  186. package/dist/app/repository/model/HistoryTask.js +65 -0
  187. package/dist/app/repository/model/Maintainer.d.ts +8 -0
  188. package/dist/app/repository/model/Maintainer.js +36 -0
  189. package/dist/app/repository/model/Package.d.ts +13 -0
  190. package/dist/app/repository/model/Package.js +18 -9
  191. package/dist/app/repository/model/PackageDep.d.ts +11 -0
  192. package/dist/app/repository/model/PackageDep.js +9 -9
  193. package/dist/app/repository/model/PackageTag.d.ts +10 -0
  194. package/dist/app/repository/model/PackageTag.js +9 -9
  195. package/dist/app/repository/model/PackageVersion.d.ts +14 -0
  196. package/dist/app/repository/model/PackageVersion.js +9 -9
  197. package/dist/app/repository/model/PackageVersionBlock.d.ts +10 -0
  198. package/dist/app/repository/model/PackageVersionBlock.js +44 -0
  199. package/dist/app/repository/model/PackageVersionDownload.d.ts +40 -0
  200. package/dist/app/repository/model/PackageVersionDownload.js +132 -0
  201. package/dist/app/repository/model/PackageVersionManifest.d.ts +10 -0
  202. package/dist/app/repository/model/PackageVersionManifest.js +46 -0
  203. package/dist/app/repository/model/Task.d.ts +18 -0
  204. package/dist/app/repository/model/Task.js +65 -0
  205. package/dist/app/repository/model/Token.d.ts +13 -0
  206. package/dist/app/repository/model/Token.js +55 -0
  207. package/dist/app/repository/model/User.d.ts +14 -0
  208. package/dist/app/repository/model/User.js +56 -0
  209. package/dist/app/repository/util/EntityProperty.d.ts +1 -0
  210. package/dist/app/repository/util/ModelConvertor.d.ts +7 -0
  211. package/dist/app/repository/util/ModelConvertor.js +35 -2
  212. package/dist/app/repository/util/ModelConvertorUtil.d.ts +8 -0
  213. package/dist/app/schedule/ChangesStreamWorker.d.ts +8 -0
  214. package/dist/app/schedule/ChangesStreamWorker.js +27 -0
  215. package/dist/app/schedule/CheckRecentlyUpdatedPackages.d.ts +8 -0
  216. package/dist/app/schedule/CheckRecentlyUpdatedPackages.js +66 -0
  217. package/dist/app/schedule/CleanTempDir.d.ts +8 -0
  218. package/dist/app/schedule/CleanTempDir.js +48 -0
  219. package/dist/app/schedule/CreateSyncBinaryTask.d.ts +8 -0
  220. package/dist/app/schedule/CreateSyncBinaryTask.js +34 -0
  221. package/dist/app/schedule/SavePackageVersionDownloadCounter.d.ts +8 -0
  222. package/dist/app/schedule/SavePackageVersionDownloadCounter.js +21 -0
  223. package/dist/app/schedule/SyncBinaryWorker.d.ts +8 -0
  224. package/dist/app/schedule/SyncBinaryWorker.js +30 -0
  225. package/dist/app/schedule/SyncPackageWorker.d.ts +8 -0
  226. package/dist/app/schedule/SyncPackageWorker.js +44 -0
  227. package/dist/app/schedule/TaskTimeoutHandler.d.ts +9 -0
  228. package/dist/app/schedule/TaskTimeoutHandler.js +27 -0
  229. package/dist/app/schedule/UpdateTotalData.d.ts +9 -0
  230. package/dist/app/schedule/UpdateTotalData.js +103 -0
  231. package/dist/app.d.ts +11 -0
  232. package/dist/app.js +22 -0
  233. package/dist/config/binaries.d.ts +38 -0
  234. package/dist/config/binaries.js +810 -0
  235. package/dist/config/config.default.d.ts +3 -0
  236. package/dist/config/config.default.js +128 -9
  237. package/dist/config/config.unittest.d.ts +3 -0
  238. package/dist/config/config.unittest.js +18 -0
  239. package/dist/config/plugin.d.ts +3 -0
  240. package/dist/config/plugin.js +19 -3
  241. package/package.json +76 -21
  242. package/dist/app/common/adapter/NFSClientAdapter.js +0 -43
  243. 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGFza1NlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9hcHAvY29yZS9zZXJ2aWNlL1Rhc2tTZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLHNDQUlxQjtBQUVyQixpREFBNkQ7QUFDN0Qsa0VBQStEO0FBUS9ELElBQWEsV0FBVyxHQUF4QixNQUFhLFdBQVksU0FBUSxpQ0FBZTtJQVF2QyxLQUFLLENBQUMsa0JBQWtCLENBQUMsUUFBa0I7UUFDaEQsT0FBTyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFTSxLQUFLLENBQUMsVUFBVSxDQUFDLElBQVUsRUFBRSxvQkFBNkI7UUFDL0QsTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzlGLElBQUksVUFBVSxFQUFFO1lBQ2QsSUFBSSxvQkFBb0IsSUFBSSxVQUFVLENBQUMsS0FBSyxLQUFLLGdCQUFTLENBQUMsT0FBTyxFQUFFO2dCQUNsRSxNQUFNLFdBQVcsR0FBRyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzdELElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLHNCQUFzQixFQUFFO29CQUM3RCxrQ0FBa0M7b0JBQ2xDLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQVMsSUFBSSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ25FLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLG1HQUFtRyxFQUNsSCxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQztpQkFDekQ7YUFDRjtZQUNELE9BQU8sVUFBVSxDQUFDO1NBQ25CO1FBQ0QsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QyxNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFTLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQy9FLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLHVGQUF1RixFQUN0RyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztRQUN0RCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFTSxLQUFLLENBQUMsU0FBUyxDQUFDLElBQVUsRUFBRSxTQUFrQjtRQUNuRCxJQUFJLFNBQVMsRUFBRTtZQUNiLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7U0FDNUM7UUFDRCxJQUFJLENBQUMsS0FBSyxHQUFHLGdCQUFTLENBQUMsT0FBTyxDQUFDO1FBQy9CLDhCQUE4QjtRQUM5QixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDNUIsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QyxNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFTLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQy9FLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLHVGQUF1RixFQUN0RyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRU0sS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFjO1FBQ2xDLE9BQU8sTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRU0sS0FBSyxDQUFDLFdBQVcsQ0FBQyxJQUFVO1FBQ2pDLE9BQU8sTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRU0sS0FBSyxDQUFDLGVBQWUsQ0FBQyxRQUFrQjtRQUM3QyxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFTLFFBQVEsQ0FBQyxDQUFDO1FBQzdELElBQUksTUFBTSxFQUFFO1lBQ1YsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN4RCxJQUFJLElBQUksRUFBRTtnQkFDUixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztnQkFDeEIsSUFBSSxDQUFDLEtBQUssR0FBRyxnQkFBUyxDQUFDLFVBQVUsQ0FBQztnQkFDbEMsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUM7Z0JBQ25CLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3pDLE9BQU8sSUFBSSxDQUFDO2FBQ2I7U0FDRjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVNLEtBQUssQ0FBQyx3QkFBd0I7UUFDbkMsMENBQTBDO1FBQzFDLE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBUyxDQUFDLFVBQVUsRUFBRSxLQUFLLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDM0YsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUU7WUFDeEIsOENBQThDO1lBQzlDLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxlQUFRLENBQUMsYUFBYSxFQUFFO2dCQUM5RCxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLGdCQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQy9DLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUNkLGtIQUFrSCxFQUNsSCxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQzFELFNBQVM7YUFDVjtZQUNELElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLEVBQUU7Z0JBQ3RCLGdCQUFnQjtnQkFDaEIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO2FBQ3JCO1lBQ0QsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzNCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUNkLHFIQUFxSCxFQUNySCxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDM0Q7UUFDRCx1Q0FBdUM7UUFDdkMsTUFBTSxZQUFZLEdBQUcsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLGdCQUFnQixDQUFDLGdCQUFTLENBQUMsT0FBTyxFQUFFLEtBQUssR0FBRyxFQUFFLENBQUMsQ0FBQztRQUMvRixLQUFLLE1BQU0sSUFBSSxJQUFJLFlBQVksRUFBRTtZQUMvQixNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ2QsK0dBQStHLEVBQy9HLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDNUM7UUFDRCxPQUFPO1lBQ0wsVUFBVSxFQUFFLEtBQUssQ0FBQyxNQUFNO1lBQ3hCLE9BQU8sRUFBRSxZQUFZLENBQUMsTUFBTTtTQUM3QixDQUFDO0lBQ0osQ0FBQztJQUVNLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBVSxFQUFFLFNBQWlCO1FBQ3RELE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQzVCLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVNLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBVSxFQUFFLFNBQW9CLEVBQUUsU0FBa0I7UUFDMUUsSUFBSSxTQUFTLEVBQUU7WUFDYixNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1NBQzVDO1FBQ0QsSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUM7UUFDdkIsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFTyxLQUFLLENBQUMsY0FBYyxDQUFDLElBQVUsRUFBRSxTQUFpQjtRQUN4RCxJQUFJO1lBQ0YsTUFBTSxZQUFZLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FDcEQsSUFBSSxDQUFDLE9BQU8sRUFDWixNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsRUFDN0IsSUFBSSxDQUFDLGdCQUFnQixFQUNyQjtnQkFDRSxjQUFjLEVBQUUsMkJBQTJCO2FBQzVDLENBQ0YsQ0FBQztZQUNGLElBQUksWUFBWSxFQUFFO2dCQUNoQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsWUFBWSxDQUFDO2FBQ3RDO1NBQ0Y7UUFBQyxPQUFPLEdBQVEsRUFBRTtZQUNqQixxRkFBcUY7WUFDckYsMkRBQTJEO1lBQzNELElBQUksR0FBRyxDQUFDLElBQUksS0FBSywwQkFBMEIsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLHFCQUFxQixFQUFFO2dCQUNqRiwyQkFBMkI7Z0JBQzNCLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQy9CLElBQUksQ0FBQyxPQUFPLEVBQ1osTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLENBQzlCLENBQUM7Z0JBQ0YsT0FBTzthQUNSO1lBQ0QsTUFBTSxHQUFHLENBQUM7U0FDWDtJQUNILENBQUM7Q0FDRixDQUFBO0FBL0lDO0lBREMsSUFBQSxhQUFNLEdBQUU7bURBQ3VDO0FBRWhEO0lBREMsSUFBQSxhQUFNLEdBQUU7K0NBQytCO0FBRXhDO0lBREMsSUFBQSxhQUFNLEdBQUU7aURBQ21DO0FBTmpDLFdBQVc7SUFIdkIsSUFBQSxtQkFBWSxFQUFDO1FBQ1osV0FBVyxFQUFFLGtCQUFXLENBQUMsTUFBTTtLQUNoQyxDQUFDO0dBQ1csV0FBVyxDQWlKdkI7QUFqSlksa0NBQVcifQ==
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVXNlclNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9hcHAvY29yZS9zZXJ2aWNlL1VzZXJTZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLG9EQUE0QjtBQUM1QixzQ0FJcUI7QUFDckIsMkNBQTJEO0FBRTNELHlDQUFvRDtBQUNwRCwyQ0FBdUQ7QUFDdkQsaURBQXlEO0FBQ3pELG9EQUF1RjtBQUN2RixrRUFBK0Q7QUF3Qi9ELElBQWEsV0FBVyxHQUF4QixNQUFhLFdBQVksU0FBUSxpQ0FBZTtJQUk5QyxhQUFhLENBQUMsSUFBZ0IsRUFBRSxRQUFnQjtRQUM5QyxNQUFNLEtBQUssR0FBRyxHQUFHLElBQUksQ0FBQyxZQUFZLEdBQUcsUUFBUSxFQUFFLENBQUM7UUFDaEQsT0FBTyxJQUFBLHlCQUFjLEVBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7SUFFRCxLQUFLLENBQUMsS0FBSyxDQUFDLElBQVksRUFBRSxRQUFnQjtRQUN4QyxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVELElBQUksQ0FBQyxJQUFJO1lBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxzQkFBZSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3pELElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsRUFBRTtZQUN2QyxPQUFPLEVBQUUsSUFBSSxFQUFFLHNCQUFlLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDdkM7UUFDRCxNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2xELE9BQU8sRUFBRSxJQUFJLEVBQUUsc0JBQWUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDO0lBQ3hELENBQUM7SUFFRCxLQUFLLENBQUMsTUFBTSxDQUFDLFVBQXNCO1FBQ2pDLE1BQU0sWUFBWSxHQUFHLGdCQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1RCxNQUFNLEtBQUssR0FBRyxHQUFHLFlBQVksR0FBRyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDdEQsTUFBTSxpQkFBaUIsR0FBRyxJQUFBLG9CQUFTLEVBQUMsS0FBSyxDQUFDLENBQUM7UUFDM0MsTUFBTSxVQUFVLEdBQUcsV0FBVSxDQUFDLE1BQU0sQ0FBQztZQUNuQyxJQUFJLEVBQUUsVUFBVSxDQUFDLElBQUk7WUFDckIsS0FBSyxFQUFFLFVBQVUsQ0FBQyxLQUFLO1lBQ3ZCLEVBQUUsRUFBRSxVQUFVLENBQUMsRUFBRTtZQUNqQixZQUFZO1lBQ1osaUJBQWlCO1lBQ2pCLFNBQVMsRUFBRSxJQUFJO1NBQ2hCLENBQUMsQ0FBQztRQUNILE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDL0MsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4RCxPQUFPLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsQ0FBQztJQUNyQyxDQUFDO0lBRUQsS0FBSyxDQUFDLGNBQWMsQ0FBQyxJQUFZLEVBQUUsS0FBYTtRQUM5QyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUM7UUFDbEUsSUFBSSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMvRCxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ1QsTUFBTSxZQUFZLEdBQUcsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVELE1BQU0saUJBQWlCLEdBQUcsSUFBQSxvQkFBUyxFQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ2xELElBQUksR0FBRyxXQUFVLENBQUMsTUFBTSxDQUFDO2dCQUN2QixJQUFJLEVBQUUsU0FBUztnQkFDZixLQUFLO2dCQUNMLEVBQUUsRUFBRSxFQUFFO2dCQUNOLFlBQVk7Z0JBQ1osaUJBQWlCO2dCQUNqQixTQUFTLEVBQUUsS0FBSzthQUNqQixDQUFDLENBQUM7WUFDSCxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3pDLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO1NBQ2hDO1FBQ0QsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLEtBQUssRUFBRTtZQUN4QixPQUFPO1lBQ1AsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUM7U0FDakM7UUFDRCxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pDLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVyxDQUFDLE1BQWMsRUFBRSxVQUE4QixFQUFFOztRQUNoRSwwRUFBMEU7UUFDMUUsa0ZBQWtGO1FBQ2xGLE1BQU0sS0FBSyxHQUFHLElBQUEsc0JBQVcsRUFBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyRCxNQUFNLFFBQVEsR0FBRyxJQUFBLGlCQUFNLEVBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0IsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUM3RCxNQUFNLFdBQVcsR0FBRyxhQUFXLENBQUMsTUFBTSxDQUFDO1lBQ3JDLFFBQVE7WUFDUixTQUFTO1lBQ1QsTUFBTTtZQUNOLGFBQWEsRUFBRSxNQUFBLE9BQU8sQ0FBQyxhQUFhLG1DQUFJLEVBQUU7WUFDMUMsVUFBVSxFQUFFLE1BQUEsT0FBTyxDQUFDLFVBQVUsbUNBQUksS0FBSztZQUN2QyxZQUFZLEVBQUUsTUFBQSxPQUFPLENBQUMsWUFBWSxtQ0FBSSxLQUFLO1NBQzVDLENBQUMsQ0FBQztRQUNILE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDakQsV0FBVyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDMUIsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVELEtBQUssQ0FBQyxXQUFXLENBQUMsTUFBYyxFQUFFLG9CQUE0QjtRQUM1RCxJQUFJLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsbUJBQW1CLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUNoRixJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ1YsNkRBQTZEO1lBQzdELEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsbUJBQW1CLENBQUMsSUFBQSxpQkFBTSxFQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQztTQUNyRjtRQUNELElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDVixNQUFNLElBQUksMEJBQWEsQ0FBQyxVQUFVLG9CQUFvQixjQUFjLENBQUMsQ0FBQztTQUN2RTtRQUNELElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxNQUFNLEVBQUU7WUFDM0IsTUFBTSxJQUFJLDJCQUFjLENBQUMsbUNBQW1DLG9CQUFvQixHQUFHLENBQUMsQ0FBQztTQUN0RjtRQUNELE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZELENBQUM7Q0FDRixDQUFBO0FBN0ZDO0lBREMsSUFBQSxhQUFNLEdBQUU7bURBQ3VDO0FBRnJDLFdBQVc7SUFIdkIsSUFBQSxtQkFBWSxFQUFDO1FBQ1osV0FBVyxFQUFFLGtCQUFXLENBQUMsTUFBTTtLQUNoQyxDQUFDO0dBQ1csV0FBVyxDQStGdkI7QUEvRlksa0NBQVcifQ==
@@ -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.gmtCreate = data.gmtCreate || new Date();
12
- data.gmtModified = data.gmtModified || new Date();
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRW50aXR5VXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2FwcC9jb3JlL3V0aWwvRW50aXR5VXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFDQSxrRUFBcUM7QUFPckMsTUFBYSxVQUFVO0lBQ3JCLE1BQU0sQ0FBQyxXQUFXLENBQTJDLElBQXFCLEVBQUUsRUFBTTtRQUN4RixPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksSUFBSSxFQUFFLENBQUM7UUFDOUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksSUFBSSxFQUFFLENBQUM7UUFDbEQsT0FBTyxJQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELE1BQU0sQ0FBQyxRQUFRO1FBQ2IsT0FBTyxJQUFJLHVCQUFRLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0NBQ0Y7QUFYRCxnQ0FXQyJ9
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,6 @@
1
+ {
2
+ "name": "cnpmcore-infra",
3
+ "eggModule": {
4
+ "name": "cnpmcoreInfra"
5
+ }
6
+ }
@@ -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 {};