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,134 @@
|
|
|
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 __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
9
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.DownloadController = void 0;
|
|
16
|
+
const tegg_1 = require("@eggjs/tegg");
|
|
17
|
+
const egg_errors_1 = require("egg-errors");
|
|
18
|
+
const AbstractController_1 = require("./AbstractController");
|
|
19
|
+
const PackageUtil_1 = require("../../common/PackageUtil");
|
|
20
|
+
const dayjs_1 = __importDefault(require("../../common/dayjs"));
|
|
21
|
+
const DATE_FORMAT = 'YYYY-MM-DD';
|
|
22
|
+
let DownloadController = class DownloadController extends AbstractController_1.AbstractController {
|
|
23
|
+
async showPackageDownloads(fullname, range) {
|
|
24
|
+
const [startDate, endDate] = this.checkAndGetRange(range);
|
|
25
|
+
const [scope, name] = (0, PackageUtil_1.getScopeAndName)(fullname);
|
|
26
|
+
const pkg = await this.packageRepository.findPackage(scope, name);
|
|
27
|
+
if (!pkg)
|
|
28
|
+
throw new egg_errors_1.NotFoundError(`${fullname} not found`);
|
|
29
|
+
const entities = await this.packageVersionDownloadRepository.query(pkg.packageId, startDate.toDate(), endDate.toDate());
|
|
30
|
+
const days = {};
|
|
31
|
+
const versions = {};
|
|
32
|
+
for (const entity of entities) {
|
|
33
|
+
const yearMonth = String(entity.yearMonth);
|
|
34
|
+
const prefix = yearMonth.substring(0, 4) + '-' + yearMonth.substring(4, 6);
|
|
35
|
+
for (let i = 1; i <= 31; i++) {
|
|
36
|
+
const day = String(i).padStart(2, '0');
|
|
37
|
+
const field = `d${day}`;
|
|
38
|
+
const counter = entity[field];
|
|
39
|
+
if (!counter)
|
|
40
|
+
continue;
|
|
41
|
+
const date = `${prefix}-${day}`;
|
|
42
|
+
days[date] = (days[date] || 0) + counter;
|
|
43
|
+
if (entity.version === '*') {
|
|
44
|
+
// ignore sync data to versions
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
if (!versions[entity.version])
|
|
48
|
+
versions[entity.version] = [];
|
|
49
|
+
versions[entity.version].push({ day: date, downloads: counter });
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
const downloads = [];
|
|
53
|
+
for (const day of Object.keys(days).sort()) {
|
|
54
|
+
downloads.push({ day, downloads: days[day] });
|
|
55
|
+
}
|
|
56
|
+
return {
|
|
57
|
+
downloads,
|
|
58
|
+
versions,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
async showTotalDownloads(scope, range) {
|
|
62
|
+
const [startDate, endDate] = this.checkAndGetRange(range);
|
|
63
|
+
const entities = await this.packageVersionDownloadRepository.query(scope, startDate.toDate(), endDate.toDate());
|
|
64
|
+
const days = {};
|
|
65
|
+
for (const entity of entities) {
|
|
66
|
+
const yearMonth = String(entity.yearMonth);
|
|
67
|
+
const prefix = yearMonth.substring(0, 4) + '-' + yearMonth.substring(4, 6);
|
|
68
|
+
for (let i = 1; i <= 31; i++) {
|
|
69
|
+
const day = String(i).padStart(2, '0');
|
|
70
|
+
const field = `d${day}`;
|
|
71
|
+
const counter = entity[field];
|
|
72
|
+
if (!counter)
|
|
73
|
+
continue;
|
|
74
|
+
const date = `${prefix}-${day}`;
|
|
75
|
+
days[date] = (days[date] || 0) + counter;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
const downloads = [];
|
|
79
|
+
for (const day of Object.keys(days).sort()) {
|
|
80
|
+
downloads.push({ day, downloads: days[day] });
|
|
81
|
+
}
|
|
82
|
+
return {
|
|
83
|
+
downloads,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
checkAndGetRange(range) {
|
|
87
|
+
const matchs = /^(\d{4}\-\d{2}\-\d{2}):(\d{4}\-\d{2}\-\d{2})$/.exec(range);
|
|
88
|
+
if (!matchs) {
|
|
89
|
+
throw new egg_errors_1.UnprocessableEntityError(`range(${range}) format invalid, must be "${DATE_FORMAT}:${DATE_FORMAT}" style`);
|
|
90
|
+
}
|
|
91
|
+
const start = matchs[1];
|
|
92
|
+
const end = matchs[2];
|
|
93
|
+
let startDate = (0, dayjs_1.default)(start, DATE_FORMAT, true);
|
|
94
|
+
let endDate = (0, dayjs_1.default)(end, DATE_FORMAT, true);
|
|
95
|
+
if (!startDate.isValid() || !endDate.isValid()) {
|
|
96
|
+
throw new egg_errors_1.UnprocessableEntityError(`range(${range}) format invalid, must be "${DATE_FORMAT}:${DATE_FORMAT}" style`);
|
|
97
|
+
}
|
|
98
|
+
if (endDate.isBefore(startDate)) {
|
|
99
|
+
const tmp = startDate;
|
|
100
|
+
startDate = endDate;
|
|
101
|
+
endDate = tmp;
|
|
102
|
+
}
|
|
103
|
+
// max range for one year
|
|
104
|
+
const maxDate = startDate.add(1, 'year');
|
|
105
|
+
if (endDate.isAfter(maxDate)) {
|
|
106
|
+
throw new egg_errors_1.UnprocessableEntityError(`range(${range}) beyond the processable range, max up to "${maxDate.format(DATE_FORMAT)}"`);
|
|
107
|
+
}
|
|
108
|
+
return [startDate, endDate];
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
__decorate([
|
|
112
|
+
(0, tegg_1.Inject)()
|
|
113
|
+
], DownloadController.prototype, "packageVersionDownloadRepository", void 0);
|
|
114
|
+
__decorate([
|
|
115
|
+
(0, tegg_1.HTTPMethod)({
|
|
116
|
+
path: `/downloads/range/:range/:fullname(${PackageUtil_1.FULLNAME_REG_STRING})`,
|
|
117
|
+
method: tegg_1.HTTPMethodEnum.GET,
|
|
118
|
+
}),
|
|
119
|
+
__param(0, (0, tegg_1.HTTPParam)()),
|
|
120
|
+
__param(1, (0, tegg_1.HTTPParam)())
|
|
121
|
+
], DownloadController.prototype, "showPackageDownloads", null);
|
|
122
|
+
__decorate([
|
|
123
|
+
(0, tegg_1.HTTPMethod)({
|
|
124
|
+
path: '/downloads/:scope/:range',
|
|
125
|
+
method: tegg_1.HTTPMethodEnum.GET,
|
|
126
|
+
}),
|
|
127
|
+
__param(0, (0, tegg_1.HTTPParam)()),
|
|
128
|
+
__param(1, (0, tegg_1.HTTPParam)())
|
|
129
|
+
], DownloadController.prototype, "showTotalDownloads", null);
|
|
130
|
+
DownloadController = __decorate([
|
|
131
|
+
(0, tegg_1.HTTPController)()
|
|
132
|
+
], DownloadController);
|
|
133
|
+
exports.DownloadController = DownloadController;
|
|
134
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRG93bmxvYWRDb250cm9sbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vYXBwL3BvcnQvY29udHJvbGxlci9Eb3dubG9hZENvbnRyb2xsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsc0NBTXFCO0FBQ3JCLDJDQUFxRTtBQUNyRSw2REFBMEQ7QUFDMUQsMERBQWdGO0FBQ2hGLCtEQUF1QztBQUd2QyxNQUFNLFdBQVcsR0FBRyxZQUFZLENBQUM7QUFHakMsSUFBYSxrQkFBa0IsR0FBL0IsTUFBYSxrQkFBbUIsU0FBUSx1Q0FBa0I7SUFReEQsS0FBSyxDQUFDLG9CQUFvQixDQUFjLFFBQWdCLEVBQWUsS0FBYTtRQUNsRixNQUFNLENBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBRSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1RCxNQUFNLENBQUUsS0FBSyxFQUFFLElBQUksQ0FBRSxHQUFHLElBQUEsNkJBQWUsRUFBQyxRQUFRLENBQUMsQ0FBQztRQUNsRCxNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2xFLElBQUksQ0FBQyxHQUFHO1lBQUUsTUFBTSxJQUFJLDBCQUFhLENBQUMsR0FBRyxRQUFRLFlBQVksQ0FBQyxDQUFDO1FBQzNELE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLGdDQUFnQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUN4SCxNQUFNLElBQUksR0FBRyxFQUFFLENBQUM7UUFDaEIsTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLEtBQUssTUFBTSxNQUFNLElBQUksUUFBUSxFQUFFO1lBQzdCLE1BQU0s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
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { EggContext } from '@eggjs/tegg';
|
|
2
|
+
import { AbstractController } from './AbstractController';
|
|
3
|
+
export declare class HomeController extends AbstractController {
|
|
4
|
+
private readonly cacheService;
|
|
5
|
+
showTotal(): Promise<{
|
|
6
|
+
last_package: string;
|
|
7
|
+
last_package_version: string;
|
|
8
|
+
doc_count: number;
|
|
9
|
+
doc_version_count: number;
|
|
10
|
+
download: {
|
|
11
|
+
today: number;
|
|
12
|
+
yesterday: number;
|
|
13
|
+
samedayLastweek: number;
|
|
14
|
+
thisweek: number;
|
|
15
|
+
thismonth: number;
|
|
16
|
+
thisyear: number;
|
|
17
|
+
lastweek: number;
|
|
18
|
+
lastmonth: number;
|
|
19
|
+
lastyear: number;
|
|
20
|
+
};
|
|
21
|
+
update_seq: number | bigint;
|
|
22
|
+
sync_model: any;
|
|
23
|
+
sync_changes_steam: object;
|
|
24
|
+
sync_binary: any;
|
|
25
|
+
instance_start_time: Date;
|
|
26
|
+
node_version: string;
|
|
27
|
+
app_version: any;
|
|
28
|
+
engine: any;
|
|
29
|
+
source_registry: any;
|
|
30
|
+
changes_stream_registry: any;
|
|
31
|
+
cache_time: string;
|
|
32
|
+
}>;
|
|
33
|
+
ping(ctx: EggContext): Promise<{
|
|
34
|
+
pong: boolean;
|
|
35
|
+
use: number;
|
|
36
|
+
}>;
|
|
37
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
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 __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
9
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.HomeController = void 0;
|
|
13
|
+
const perf_hooks_1 = require("perf_hooks");
|
|
14
|
+
const tegg_1 = require("@eggjs/tegg");
|
|
15
|
+
const AbstractController_1 = require("./AbstractController");
|
|
16
|
+
const startTime = new Date();
|
|
17
|
+
let HomeController = class HomeController extends AbstractController_1.AbstractController {
|
|
18
|
+
async showTotal() {
|
|
19
|
+
const totalData = await this.cacheService.getTotalData();
|
|
20
|
+
const data = {
|
|
21
|
+
last_package: totalData.lastPackage,
|
|
22
|
+
last_package_version: totalData.lastPackageVersion,
|
|
23
|
+
doc_count: totalData.packageCount,
|
|
24
|
+
doc_version_count: totalData.packageVersionCount,
|
|
25
|
+
download: totalData.download,
|
|
26
|
+
update_seq: totalData.lastChangeId,
|
|
27
|
+
sync_model: this.config.cnpmcore.syncMode,
|
|
28
|
+
sync_changes_steam: totalData.changesStream,
|
|
29
|
+
sync_binary: this.config.cnpmcore.enableSyncBinary,
|
|
30
|
+
instance_start_time: startTime,
|
|
31
|
+
node_version: process.version,
|
|
32
|
+
app_version: this.config.pkg.version,
|
|
33
|
+
engine: this.config.orm.client,
|
|
34
|
+
source_registry: this.config.cnpmcore.sourceRegistry,
|
|
35
|
+
changes_stream_registry: this.config.cnpmcore.changesStreamRegistry,
|
|
36
|
+
cache_time: totalData.cacheTime,
|
|
37
|
+
};
|
|
38
|
+
return data;
|
|
39
|
+
}
|
|
40
|
+
// https://github.com/npm/cli/blob/latest/lib/utils/ping.js#L5
|
|
41
|
+
// https://registry.npmjs.org/-/ping?write=true
|
|
42
|
+
async ping(ctx) {
|
|
43
|
+
return {
|
|
44
|
+
pong: true,
|
|
45
|
+
use: perf_hooks_1.performance.now() - ctx.performanceStarttime,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
__decorate([
|
|
50
|
+
(0, tegg_1.Inject)()
|
|
51
|
+
], HomeController.prototype, "cacheService", void 0);
|
|
52
|
+
__decorate([
|
|
53
|
+
(0, tegg_1.HTTPMethod)({
|
|
54
|
+
// GET /
|
|
55
|
+
// https://github.com/cnpm/cnpmjs.org/blob/master/docs/registry-api.md#schema
|
|
56
|
+
path: '/',
|
|
57
|
+
method: tegg_1.HTTPMethodEnum.GET,
|
|
58
|
+
})
|
|
59
|
+
], HomeController.prototype, "showTotal", null);
|
|
60
|
+
__decorate([
|
|
61
|
+
(0, tegg_1.HTTPMethod)({
|
|
62
|
+
// GET /-/ping
|
|
63
|
+
path: '/-/ping',
|
|
64
|
+
method: tegg_1.HTTPMethodEnum.GET,
|
|
65
|
+
}),
|
|
66
|
+
__param(0, (0, tegg_1.Context)())
|
|
67
|
+
], HomeController.prototype, "ping", null);
|
|
68
|
+
HomeController = __decorate([
|
|
69
|
+
(0, tegg_1.HTTPController)()
|
|
70
|
+
], HomeController);
|
|
71
|
+
exports.HomeController = HomeController;
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSG9tZUNvbnRyb2xsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9hcHAvcG9ydC9jb250cm9sbGVyL0hvbWVDb250cm9sbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLDJDQUF5QztBQUN6QyxzQ0FPcUI7QUFDckIsNkRBQTBEO0FBRzFELE1BQU0sU0FBUyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7QUFHN0IsSUFBYSxjQUFjLEdBQTNCLE1BQWEsY0FBZSxTQUFRLHVDQUFrQjtJQVVwRCxLQUFLLENBQUMsU0FBUztRQUNiLE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN6RCxNQUFNLElBQUksR0FBRztZQUNYLFlBQVksRUFBRSxTQUFTLENBQUMsV0FBVztZQUNuQyxvQkFBb0IsRUFBRSxTQUFTLENBQUMsa0JBQWtCO1lBQ2xELFNBQVMsRUFBRSxTQUFTLENBQUMsWUFBWTtZQUNqQyxpQkFBaUIsRUFBRSxTQUFTLENBQUMsbUJBQW1CO1lBQ2hELFFBQVEsRUFBRSxTQUFTLENBQUMsUUFBUTtZQUM1QixVQUFVLEVBQUUsU0FBUyxDQUFDLFlBQVk7WUFDbEMsVUFBVSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVE7WUFDekMsa0JBQWtCLEVBQUUsU0FBUyxDQUFDLGFBQWE7WUFDM0MsV0FBVyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLGdCQUFnQjtZQUNsRCxtQkFBbUIsRUFBRSxTQUFTO1lBQzlCLFlBQVksRUFBRSxPQUFPLENBQUMsT0FBTztZQUM3QixXQUFXLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTztZQUNwQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTTtZQUM5QixlQUFlLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsY0FBYztZQUNwRCx1QkFBdUIsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxxQkFBcUI7WUFDbkUsVUFBVSxFQUFFLFNBQVMsQ0FBQyxTQUFTO1NBQ2hDLENBQUM7UUFDRixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCw4REFBOEQ7SUFDOUQsK0NBQStDO0lBTS9DLEtBQUssQ0FBQyxJQUFJLENBQVksR0FBZTtRQUNuQyxPQUFPO1lBQ0wsSUFBSSxFQUFFLElBQUk7WUFDVixHQUFHLEVBQUUsd0JBQVcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUMsb0JBQXFCO1NBQ25ELENBQUM7SUFDSixDQUFDO0NBQ0YsQ0FBQTtBQTVDQztJQURDLElBQUEsYUFBTSxHQUFFO29EQUNtQztBQVE1QztJQU5DLElBQUEsaUJBQVUsRUFBQztRQUNWLFFBQVE7UUFDUiw2RUFBNkU7UUFDN0UsSUFBSSxFQUFFLEdBQUc7UUFDVCxNQUFNLEVBQUUscUJBQWMsQ0FBQyxHQUFHO0tBQzNCLENBQUM7K0NBc0JEO0FBU0Q7SUFMQyxJQUFBLGlCQUFVLEVBQUM7UUFDVixjQUFjO1FBQ2QsSUFBSSxFQUFFLFNBQVM7UUFDZixNQUFNLEVBQUUscUJBQWMsQ0FBQyxHQUFHO0tBQzNCLENBQUM7SUFDVSxXQUFBLElBQUEsY0FBTyxHQUFFLENBQUE7MENBS3BCO0FBN0NVLGNBQWM7SUFEMUIsSUFBQSxxQkFBYyxHQUFFO0dBQ0osY0FBYyxDQThDMUI7QUE5Q1ksd0NBQWMifQ==
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { EggContext } from '@eggjs/tegg';
|
|
2
|
+
import { AbstractController } from './AbstractController';
|
|
3
|
+
import { BlockPackageType } from '../typebox';
|
|
4
|
+
export declare class PackageBlockController extends AbstractController {
|
|
5
|
+
private packageManagerService;
|
|
6
|
+
private packageVersionBlockRepository;
|
|
7
|
+
blockPackage(ctx: EggContext, fullname: string, data: BlockPackageType): Promise<{
|
|
8
|
+
ok: boolean;
|
|
9
|
+
id: string;
|
|
10
|
+
package_id: string;
|
|
11
|
+
}>;
|
|
12
|
+
unblockPackage(ctx: EggContext, fullname: string): Promise<{
|
|
13
|
+
ok: boolean;
|
|
14
|
+
}>;
|
|
15
|
+
listPackageBlocks(fullname: string): Promise<{
|
|
16
|
+
data: {
|
|
17
|
+
id: string;
|
|
18
|
+
version: string;
|
|
19
|
+
reason: string;
|
|
20
|
+
created: Date;
|
|
21
|
+
modified: Date;
|
|
22
|
+
}[];
|
|
23
|
+
}>;
|
|
24
|
+
}
|
|
@@ -0,0 +1,108 @@
|
|
|
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 __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
9
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.PackageBlockController = void 0;
|
|
13
|
+
const tegg_1 = require("@eggjs/tegg");
|
|
14
|
+
const egg_errors_1 = require("egg-errors");
|
|
15
|
+
const AbstractController_1 = require("./AbstractController");
|
|
16
|
+
const PackageUtil_1 = require("../../common/PackageUtil");
|
|
17
|
+
const typebox_1 = require("../typebox");
|
|
18
|
+
let PackageBlockController = class PackageBlockController extends AbstractController_1.AbstractController {
|
|
19
|
+
async blockPackage(ctx, fullname, data) {
|
|
20
|
+
const isAdmin = await this.userRoleManager.isAdmin(ctx);
|
|
21
|
+
if (!isAdmin) {
|
|
22
|
+
throw new egg_errors_1.ForbiddenError('Not allow to block package');
|
|
23
|
+
}
|
|
24
|
+
const params = { fullname, reason: data.reason };
|
|
25
|
+
ctx.tValidate(typebox_1.BlockPackageRule, params);
|
|
26
|
+
const packageEntity = await this.getPackageEntityByFullname(params.fullname);
|
|
27
|
+
if (packageEntity.isPrivate) {
|
|
28
|
+
throw new egg_errors_1.ForbiddenError(`Can\'t block private package "${params.fullname}"`);
|
|
29
|
+
}
|
|
30
|
+
const authorized = await this.userRoleManager.getAuthorizedUserAndToken(ctx);
|
|
31
|
+
const block = await this.packageManagerService.blockPackage(packageEntity, `${params.reason} (operator: ${authorized === null || authorized === void 0 ? void 0 : authorized.user.name}/${authorized === null || authorized === void 0 ? void 0 : authorized.user.userId})`);
|
|
32
|
+
ctx.logger.info('[PackageBlockController.blockPackage:success] fullname: %s, packageId: %s, packageVersionBlockId: %s', fullname, packageEntity.packageId, block.packageVersionBlockId);
|
|
33
|
+
ctx.status = 201;
|
|
34
|
+
return {
|
|
35
|
+
ok: true,
|
|
36
|
+
id: block.packageVersionBlockId,
|
|
37
|
+
package_id: packageEntity.packageId,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
async unblockPackage(ctx, fullname) {
|
|
41
|
+
const isAdmin = await this.userRoleManager.isAdmin(ctx);
|
|
42
|
+
if (!isAdmin) {
|
|
43
|
+
throw new egg_errors_1.ForbiddenError('Not allow to unblock package');
|
|
44
|
+
}
|
|
45
|
+
const packageEntity = await this.getPackageEntityByFullname(fullname);
|
|
46
|
+
if (packageEntity.isPrivate) {
|
|
47
|
+
throw new egg_errors_1.ForbiddenError(`Can\'t unblock private package "${fullname}"`);
|
|
48
|
+
}
|
|
49
|
+
await this.packageManagerService.unblockPackage(packageEntity);
|
|
50
|
+
ctx.logger.info('[PackageBlockController.unblockPackage:success] fullname: %s, packageId: %s', fullname, packageEntity.packageId);
|
|
51
|
+
return {
|
|
52
|
+
ok: true,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
async listPackageBlocks(fullname) {
|
|
56
|
+
const packageEntity = await this.getPackageEntityByFullname(fullname);
|
|
57
|
+
const blocks = await this.packageVersionBlockRepository.listPackageVersionBlocks(packageEntity.packageId);
|
|
58
|
+
return {
|
|
59
|
+
data: blocks.map(block => {
|
|
60
|
+
return {
|
|
61
|
+
id: block.packageVersionBlockId,
|
|
62
|
+
version: block.version,
|
|
63
|
+
reason: block.reason,
|
|
64
|
+
created: block.createdAt,
|
|
65
|
+
modified: block.updatedAt,
|
|
66
|
+
};
|
|
67
|
+
}),
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
__decorate([
|
|
72
|
+
(0, tegg_1.Inject)()
|
|
73
|
+
], PackageBlockController.prototype, "packageManagerService", void 0);
|
|
74
|
+
__decorate([
|
|
75
|
+
(0, tegg_1.Inject)()
|
|
76
|
+
], PackageBlockController.prototype, "packageVersionBlockRepository", void 0);
|
|
77
|
+
__decorate([
|
|
78
|
+
(0, tegg_1.HTTPMethod)({
|
|
79
|
+
// PUT /-/package/:fullname/blocks
|
|
80
|
+
path: `/-/package/:fullname(${PackageUtil_1.FULLNAME_REG_STRING})/blocks`,
|
|
81
|
+
method: tegg_1.HTTPMethodEnum.PUT,
|
|
82
|
+
}),
|
|
83
|
+
__param(0, (0, tegg_1.Context)()),
|
|
84
|
+
__param(1, (0, tegg_1.HTTPParam)()),
|
|
85
|
+
__param(2, (0, tegg_1.HTTPBody)())
|
|
86
|
+
], PackageBlockController.prototype, "blockPackage", null);
|
|
87
|
+
__decorate([
|
|
88
|
+
(0, tegg_1.HTTPMethod)({
|
|
89
|
+
// DELETE /-/package/:fullname/blocks
|
|
90
|
+
path: `/-/package/:fullname(${PackageUtil_1.FULLNAME_REG_STRING})/blocks`,
|
|
91
|
+
method: tegg_1.HTTPMethodEnum.DELETE,
|
|
92
|
+
}),
|
|
93
|
+
__param(0, (0, tegg_1.Context)()),
|
|
94
|
+
__param(1, (0, tegg_1.HTTPParam)())
|
|
95
|
+
], PackageBlockController.prototype, "unblockPackage", null);
|
|
96
|
+
__decorate([
|
|
97
|
+
(0, tegg_1.HTTPMethod)({
|
|
98
|
+
// GET /-/package/:fullname/blocks
|
|
99
|
+
path: `/-/package/:fullname(${PackageUtil_1.FULLNAME_REG_STRING})/blocks`,
|
|
100
|
+
method: tegg_1.HTTPMethodEnum.GET,
|
|
101
|
+
}),
|
|
102
|
+
__param(0, (0, tegg_1.HTTPParam)())
|
|
103
|
+
], PackageBlockController.prototype, "listPackageBlocks", null);
|
|
104
|
+
PackageBlockController = __decorate([
|
|
105
|
+
(0, tegg_1.HTTPController)()
|
|
106
|
+
], PackageBlockController);
|
|
107
|
+
exports.PackageBlockController = PackageBlockController;
|
|
108
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGFja2FnZUJsb2NrQ29udHJvbGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2FwcC9wb3J0L2NvbnRyb2xsZXIvUGFja2FnZUJsb2NrQ29udHJvbGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSxzQ0FTcUI7QUFDckIsMkNBQTRDO0FBQzVDLDZEQUEwRDtBQUMxRCwwREFBK0Q7QUFHL0Qsd0NBQWdFO0FBR2hFLElBQWEsc0JBQXNCLEdBQW5DLE1BQWEsc0JBQXVCLFNBQVEsdUNBQWtCO0lBVzVELEtBQUssQ0FBQyxZQUFZLENBQVksR0FBZSxFQUFlLFFBQWdCLEVBQWMsSUFBc0I7UUFDOUcsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN4RCxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ1osTUFBTSxJQUFJLDJCQUFjLENBQUMsNEJBQTRCLENBQUMsQ0FBQztTQUN4RDtRQUNELE1BQU0sTUFBTSxHQUFHLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDakQsR0FBRyxDQUFDLFNBQVMsQ0FBQywwQkFBZ0IsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUN4QyxNQUFNLGFBQWEsR0FBRyxNQUFNLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDN0UsSUFBSSxhQUFhLENBQUMsU0FBUyxFQUFFO1lBQzNCLE1BQU0sSUFBSSwyQkFBYyxDQUFDLGlDQUFpQyxNQUFNLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztTQUMvRTtRQUVELE1BQU0sVUFBVSxHQUFHLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyx5QkFBeUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM3RSxNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxZ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
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import { EggContext } from '@eggjs/tegg';
|
|
3
|
+
import { AbstractController } from './AbstractController';
|
|
4
|
+
import { TaskState } from '../../common/enum/Task';
|
|
5
|
+
import { SyncPackageTaskType } from '../typebox';
|
|
6
|
+
export declare class PackageSyncController extends AbstractController {
|
|
7
|
+
private packageSyncerService;
|
|
8
|
+
private _executeTaskAsync;
|
|
9
|
+
createSyncTask(ctx: EggContext, fullname: string, data: SyncPackageTaskType): Promise<{
|
|
10
|
+
ok: boolean;
|
|
11
|
+
id: string;
|
|
12
|
+
type: import("../../common/enum/Task").TaskType;
|
|
13
|
+
state: TaskState;
|
|
14
|
+
}>;
|
|
15
|
+
showSyncTask(fullname: string, taskId: string): Promise<{
|
|
16
|
+
ok: boolean;
|
|
17
|
+
id: string;
|
|
18
|
+
type: import("../../common/enum/Task").TaskType;
|
|
19
|
+
state: TaskState;
|
|
20
|
+
logUrl: string | undefined;
|
|
21
|
+
error: string | undefined;
|
|
22
|
+
}>;
|
|
23
|
+
showSyncTaskLog(ctx: EggContext, fullname: string, taskId: string): Promise<import("stream").Readable | undefined>;
|
|
24
|
+
deprecatedCreateSyncTask(ctx: EggContext, fullname: string, nodeps: string): Promise<{
|
|
25
|
+
ok: boolean;
|
|
26
|
+
logId: string;
|
|
27
|
+
}>;
|
|
28
|
+
deprecatedShowSyncTask(fullname: string, taskId: string): Promise<{
|
|
29
|
+
ok: boolean;
|
|
30
|
+
syncDone: boolean;
|
|
31
|
+
log: string;
|
|
32
|
+
logUrl: string | undefined;
|
|
33
|
+
error: string | undefined;
|
|
34
|
+
}>;
|
|
35
|
+
}
|
|
@@ -0,0 +1,205 @@
|
|
|
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 __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
9
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.PackageSyncController = void 0;
|
|
13
|
+
const tegg_1 = require("@eggjs/tegg");
|
|
14
|
+
const egg_errors_1 = require("egg-errors");
|
|
15
|
+
const AbstractController_1 = require("./AbstractController");
|
|
16
|
+
const PackageUtil_1 = require("../../common/PackageUtil");
|
|
17
|
+
const Task_1 = require("../../common/enum/Task");
|
|
18
|
+
const typebox_1 = require("../typebox");
|
|
19
|
+
let PackageSyncController = class PackageSyncController extends AbstractController_1.AbstractController {
|
|
20
|
+
async _executeTaskAsync(task) {
|
|
21
|
+
const startTime = Date.now();
|
|
22
|
+
this.logger.info('[PackageSyncController:executeTask:start] taskId: %s, targetName: %s, attempts: %s, params: %j, updatedAt: %s, delay %sms', task.taskId, task.targetName, task.attempts, task.data, task.updatedAt, startTime - task.updatedAt.getTime());
|
|
23
|
+
let result = 'success';
|
|
24
|
+
try {
|
|
25
|
+
await this.packageSyncerService.executeTask(task);
|
|
26
|
+
}
|
|
27
|
+
catch (err) {
|
|
28
|
+
result = 'error';
|
|
29
|
+
this.logger.error(err);
|
|
30
|
+
}
|
|
31
|
+
finally {
|
|
32
|
+
const use = Date.now() - startTime;
|
|
33
|
+
this.logger.info('[PackageSyncController:executeTask:%s] taskId: %s, targetName: %s, use %sms', result, task.taskId, task.targetName, use);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
async createSyncTask(ctx, fullname, data) {
|
|
37
|
+
if (!this.enableSyncAll) {
|
|
38
|
+
throw new egg_errors_1.ForbiddenError('Not allow to sync package');
|
|
39
|
+
}
|
|
40
|
+
const tips = data.tips || `Sync cause by "${ctx.href}", parent traceId: ${ctx.tracer.traceId}`;
|
|
41
|
+
const params = {
|
|
42
|
+
fullname,
|
|
43
|
+
tips,
|
|
44
|
+
skipDependencies: !!data.skipDependencies,
|
|
45
|
+
syncDownloadData: !!data.syncDownloadData,
|
|
46
|
+
force: !!data.force,
|
|
47
|
+
};
|
|
48
|
+
ctx.tValidate(typebox_1.SyncPackageTaskRule, params);
|
|
49
|
+
const [scope, name] = (0, PackageUtil_1.getScopeAndName)(params.fullname);
|
|
50
|
+
const packageEntity = await this.packageRepository.findPackage(scope, name);
|
|
51
|
+
if (packageEntity === null || packageEntity === void 0 ? void 0 : packageEntity.isPrivate) {
|
|
52
|
+
throw new egg_errors_1.ForbiddenError(`Can\'t sync private package "${params.fullname}"`);
|
|
53
|
+
}
|
|
54
|
+
if (params.syncDownloadData && !this.packageSyncerService.allowSyncDownloadData) {
|
|
55
|
+
throw new egg_errors_1.ForbiddenError('Not allow to sync package download data');
|
|
56
|
+
}
|
|
57
|
+
const authorized = await this.userRoleManager.getAuthorizedUserAndToken(ctx);
|
|
58
|
+
const task = await this.packageSyncerService.createTask(params.fullname, {
|
|
59
|
+
authorIp: ctx.ip,
|
|
60
|
+
authorId: authorized === null || authorized === void 0 ? void 0 : authorized.user.userId,
|
|
61
|
+
tips: params.tips,
|
|
62
|
+
skipDependencies: params.skipDependencies,
|
|
63
|
+
syncDownloadData: params.syncDownloadData,
|
|
64
|
+
});
|
|
65
|
+
ctx.logger.info('[PackageSyncController.createSyncTask:success] taskId: %s, fullname: %s', task.taskId, fullname);
|
|
66
|
+
if (data.force) {
|
|
67
|
+
const isAdmin = await this.userRoleManager.isAdmin(ctx);
|
|
68
|
+
if (isAdmin) {
|
|
69
|
+
// execute task in background
|
|
70
|
+
this._executeTaskAsync(task);
|
|
71
|
+
ctx.logger.info('[PackageSyncController.createSyncTask:execute-immediately] taskId: %s', task.taskId);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
ctx.status = 201;
|
|
75
|
+
return {
|
|
76
|
+
ok: true,
|
|
77
|
+
id: task.taskId,
|
|
78
|
+
type: task.type,
|
|
79
|
+
state: task.state,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
// TODO: no-cache for CDN if task state is processing or timeout
|
|
83
|
+
async showSyncTask(fullname, taskId) {
|
|
84
|
+
const task = await this.packageSyncerService.findTask(taskId);
|
|
85
|
+
if (!task)
|
|
86
|
+
throw new egg_errors_1.NotFoundError(`Package "${fullname}" sync task "${taskId}" not found`);
|
|
87
|
+
let logUrl;
|
|
88
|
+
if (task.state !== Task_1.TaskState.Waiting) {
|
|
89
|
+
logUrl = `${this.config.cnpmcore.registry}/-/package/${fullname}/syncs/${taskId}/log`;
|
|
90
|
+
}
|
|
91
|
+
const error = task.error || undefined;
|
|
92
|
+
return {
|
|
93
|
+
ok: true,
|
|
94
|
+
id: task.taskId,
|
|
95
|
+
type: task.type,
|
|
96
|
+
state: task.state,
|
|
97
|
+
logUrl,
|
|
98
|
+
error,
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
// TODO: no-cache for CDN if task state is processing or timeout
|
|
102
|
+
async showSyncTaskLog(ctx, fullname, taskId) {
|
|
103
|
+
const task = await this.packageSyncerService.findTask(taskId);
|
|
104
|
+
if (!task)
|
|
105
|
+
throw new egg_errors_1.NotFoundError(`Package "${fullname}" sync task "${taskId}" not found`);
|
|
106
|
+
if (task.state === Task_1.TaskState.Waiting)
|
|
107
|
+
throw new egg_errors_1.NotFoundError(`Package "${fullname}" sync task "${taskId}" log not found`);
|
|
108
|
+
const logUrlOrStream = await this.packageSyncerService.findTaskLog(task);
|
|
109
|
+
if (!logUrlOrStream)
|
|
110
|
+
throw new egg_errors_1.NotFoundError(`Package "${fullname}" sync task "${taskId}" log not found`);
|
|
111
|
+
if (typeof logUrlOrStream === 'string') {
|
|
112
|
+
ctx.redirect(logUrlOrStream);
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
ctx.type = 'log';
|
|
116
|
+
return logUrlOrStream;
|
|
117
|
+
}
|
|
118
|
+
// deprecate create sync task api for cnpmjs.org
|
|
119
|
+
// https://github.com/cnpm/cnpmjs.org/blob/master/controllers/sync.js
|
|
120
|
+
async deprecatedCreateSyncTask(ctx, fullname, nodeps) {
|
|
121
|
+
const options = {
|
|
122
|
+
fullname,
|
|
123
|
+
tips: `Sync cause by "${ctx.href}", parent traceId: ${ctx.tracer.traceId}`,
|
|
124
|
+
skipDependencies: nodeps === 'true',
|
|
125
|
+
syncDownloadData: false,
|
|
126
|
+
force: false,
|
|
127
|
+
};
|
|
128
|
+
const task = await this.createSyncTask(ctx, fullname, options);
|
|
129
|
+
return {
|
|
130
|
+
ok: true,
|
|
131
|
+
logId: task.id,
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
// https://github.com/cnpm/cnpmjs.org/blob/master/controllers/sync.js#L55
|
|
135
|
+
async deprecatedShowSyncTask(fullname, taskId) {
|
|
136
|
+
const task = await this.showSyncTask(fullname, taskId);
|
|
137
|
+
const syncDone = task.state !== Task_1.TaskState.Waiting && task.state !== Task_1.TaskState.Processing;
|
|
138
|
+
const stateMessage = syncDone ? '[done]' : '[processing]';
|
|
139
|
+
// https://github.com/cnpm/cnpm/blob/cadd3cd54c22b1a157810a43ab10febdb2410ca6/bin/cnpm-sync#L82
|
|
140
|
+
const log = `[${new Date().toISOString()}] ${stateMessage} Sync ${fullname} data: ${JSON.stringify(task)}`;
|
|
141
|
+
return {
|
|
142
|
+
ok: true,
|
|
143
|
+
syncDone,
|
|
144
|
+
log,
|
|
145
|
+
logUrl: task.logUrl,
|
|
146
|
+
error: task.error,
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
};
|
|
150
|
+
__decorate([
|
|
151
|
+
(0, tegg_1.Inject)()
|
|
152
|
+
], PackageSyncController.prototype, "packageSyncerService", void 0);
|
|
153
|
+
__decorate([
|
|
154
|
+
(0, tegg_1.HTTPMethod)({
|
|
155
|
+
// PUT /-/package/:fullname/syncs
|
|
156
|
+
path: `/-/package/:fullname(${PackageUtil_1.FULLNAME_REG_STRING})/syncs`,
|
|
157
|
+
method: tegg_1.HTTPMethodEnum.PUT,
|
|
158
|
+
}),
|
|
159
|
+
__param(0, (0, tegg_1.Context)()),
|
|
160
|
+
__param(1, (0, tegg_1.HTTPParam)()),
|
|
161
|
+
__param(2, (0, tegg_1.HTTPBody)())
|
|
162
|
+
], PackageSyncController.prototype, "createSyncTask", null);
|
|
163
|
+
__decorate([
|
|
164
|
+
(0, tegg_1.HTTPMethod)({
|
|
165
|
+
// GET /-/package/:fullname/syncs/:syncId
|
|
166
|
+
path: `/-/package/:fullname(${PackageUtil_1.FULLNAME_REG_STRING})/syncs/:taskId`,
|
|
167
|
+
method: tegg_1.HTTPMethodEnum.GET,
|
|
168
|
+
}),
|
|
169
|
+
__param(0, (0, tegg_1.HTTPParam)()),
|
|
170
|
+
__param(1, (0, tegg_1.HTTPParam)())
|
|
171
|
+
], PackageSyncController.prototype, "showSyncTask", null);
|
|
172
|
+
__decorate([
|
|
173
|
+
(0, tegg_1.HTTPMethod)({
|
|
174
|
+
// GET /-/package/:fullname/syncs/:syncId/log
|
|
175
|
+
path: `/-/package/:fullname(${PackageUtil_1.FULLNAME_REG_STRING})/syncs/:taskId/log`,
|
|
176
|
+
method: tegg_1.HTTPMethodEnum.GET,
|
|
177
|
+
}),
|
|
178
|
+
__param(0, (0, tegg_1.Context)()),
|
|
179
|
+
__param(1, (0, tegg_1.HTTPParam)()),
|
|
180
|
+
__param(2, (0, tegg_1.HTTPParam)())
|
|
181
|
+
], PackageSyncController.prototype, "showSyncTaskLog", null);
|
|
182
|
+
__decorate([
|
|
183
|
+
(0, tegg_1.HTTPMethod)({
|
|
184
|
+
// PUT /:fullname/sync
|
|
185
|
+
path: `/:fullname(${PackageUtil_1.FULLNAME_REG_STRING})/sync`,
|
|
186
|
+
method: tegg_1.HTTPMethodEnum.PUT,
|
|
187
|
+
}),
|
|
188
|
+
__param(0, (0, tegg_1.Context)()),
|
|
189
|
+
__param(1, (0, tegg_1.HTTPParam)()),
|
|
190
|
+
__param(2, (0, tegg_1.HTTPQuery)())
|
|
191
|
+
], PackageSyncController.prototype, "deprecatedCreateSyncTask", null);
|
|
192
|
+
__decorate([
|
|
193
|
+
(0, tegg_1.HTTPMethod)({
|
|
194
|
+
// GET /:fullname/sync/log/:taskId
|
|
195
|
+
path: `/:fullname(${PackageUtil_1.FULLNAME_REG_STRING})/sync/log/:taskId`,
|
|
196
|
+
method: tegg_1.HTTPMethodEnum.GET,
|
|
197
|
+
}),
|
|
198
|
+
__param(0, (0, tegg_1.HTTPParam)()),
|
|
199
|
+
__param(1, (0, tegg_1.HTTPParam)())
|
|
200
|
+
], PackageSyncController.prototype, "deprecatedShowSyncTask", null);
|
|
201
|
+
PackageSyncController = __decorate([
|
|
202
|
+
(0, tegg_1.HTTPController)()
|
|
203
|
+
], PackageSyncController);
|
|
204
|
+
exports.PackageSyncController = PackageSyncController;
|
|
205
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGFja2FnZVN5bmNDb250cm9sbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vYXBwL3BvcnQvY29udHJvbGxlci9QYWNrYWdlU3luY0NvbnRyb2xsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsc0NBVXFCO0FBQ3JCLDJDQUEyRDtBQUMzRCw2REFBMEQ7QUFDMUQsMERBQWdGO0FBR2hGLGlEQUFtRDtBQUNuRCx3Q0FBc0U7QUFHdEUsSUFBYSxxQkFBcUIsR0FBbEMsTUFBYSxxQkFBc0IsU0FBUSx1Q0FBa0I7SUFJbkQsS0FBSyxDQUFDLGlCQUFpQixDQUFDLElBQVU7UUFDeEMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLDJIQUEySCxFQUMxSSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQ3RFLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDeEMsSUFBSSxNQUFNLEdBQUcsU0FBUyxDQUFDO1FBQ3ZCLElBQUk7WUFDRixNQUFNLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDbkQ7UUFBQyxPQUFPLEdBQUcsRUFBRTtZQUNaLE1BQU0sR0FBRyxPQUFPLENBQUM7WUFDakIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDeEI7Z0JBQVM7WUFDUixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsU0FBUyxDQUFDO1lBQ25DLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLDZFQUE2RSxFQUM1RixNQUFNLEVBQUUs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
|