xray-manager 1.8.4 → 2.0.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/README.md +102 -42
- package/dist/cli.mjs +8587 -0
- package/dist/cli.mjs.map +7 -0
- package/package.json +13 -5
- package/dist/cli.d.ts +0 -11
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js +0 -134
- package/dist/cli.js.map +0 -1
- package/dist/commands/clash.d.ts +0 -20
- package/dist/commands/clash.d.ts.map +0 -1
- package/dist/commands/clash.js +0 -156
- package/dist/commands/clash.js.map +0 -1
- package/dist/commands/config.d.ts +0 -56
- package/dist/commands/config.d.ts.map +0 -1
- package/dist/commands/config.js +0 -461
- package/dist/commands/config.js.map +0 -1
- package/dist/commands/interactive.d.ts +0 -55
- package/dist/commands/interactive.d.ts.map +0 -1
- package/dist/commands/interactive.js +0 -418
- package/dist/commands/interactive.js.map +0 -1
- package/dist/commands/logs.d.ts +0 -62
- package/dist/commands/logs.d.ts.map +0 -1
- package/dist/commands/logs.js +0 -389
- package/dist/commands/logs.js.map +0 -1
- package/dist/commands/quota.d.ts +0 -54
- package/dist/commands/quota.d.ts.map +0 -1
- package/dist/commands/quota.js +0 -661
- package/dist/commands/quota.js.map +0 -1
- package/dist/commands/review.d.ts +0 -8
- package/dist/commands/review.d.ts.map +0 -1
- package/dist/commands/review.js +0 -79
- package/dist/commands/review.js.map +0 -1
- package/dist/commands/service.d.ts +0 -43
- package/dist/commands/service.d.ts.map +0 -1
- package/dist/commands/service.js +0 -202
- package/dist/commands/service.js.map +0 -1
- package/dist/commands/user.d.ts +0 -49
- package/dist/commands/user.d.ts.map +0 -1
- package/dist/commands/user.js +0 -371
- package/dist/commands/user.js.map +0 -1
- package/dist/components/dashboard-widget.d.ts +0 -21
- package/dist/components/dashboard-widget.d.ts.map +0 -1
- package/dist/components/dashboard-widget.js +0 -234
- package/dist/components/dashboard-widget.js.map +0 -1
- package/dist/components/progress-bar.d.ts +0 -67
- package/dist/components/progress-bar.d.ts.map +0 -1
- package/dist/components/progress-bar.js +0 -138
- package/dist/components/progress-bar.js.map +0 -1
- package/dist/components/user-table.d.ts +0 -8
- package/dist/components/user-table.d.ts.map +0 -1
- package/dist/components/user-table.js +0 -91
- package/dist/components/user-table.js.map +0 -1
- package/dist/config/i18n.d.ts +0 -136
- package/dist/config/i18n.d.ts.map +0 -1
- package/dist/config/i18n.js +0 -323
- package/dist/config/i18n.js.map +0 -1
- package/dist/constants/error-codes.d.ts +0 -344
- package/dist/constants/error-codes.d.ts.map +0 -1
- package/dist/constants/error-codes.js +0 -462
- package/dist/constants/error-codes.js.map +0 -1
- package/dist/constants/exit-codes.d.ts +0 -49
- package/dist/constants/exit-codes.d.ts.map +0 -1
- package/dist/constants/exit-codes.js +0 -100
- package/dist/constants/exit-codes.js.map +0 -1
- package/dist/constants/paths.d.ts +0 -63
- package/dist/constants/paths.d.ts.map +0 -1
- package/dist/constants/paths.js +0 -78
- package/dist/constants/paths.js.map +0 -1
- package/dist/constants/quota.d.ts +0 -126
- package/dist/constants/quota.d.ts.map +0 -1
- package/dist/constants/quota.js +0 -135
- package/dist/constants/quota.js.map +0 -1
- package/dist/constants/review.d.ts +0 -14
- package/dist/constants/review.d.ts.map +0 -1
- package/dist/constants/review.js +0 -33
- package/dist/constants/review.js.map +0 -1
- package/dist/constants/supported-distros.d.ts +0 -17
- package/dist/constants/supported-distros.d.ts.map +0 -1
- package/dist/constants/supported-distros.js +0 -68
- package/dist/constants/supported-distros.js.map +0 -1
- package/dist/constants/theme.d.ts +0 -34
- package/dist/constants/theme.d.ts.map +0 -1
- package/dist/constants/theme.js +0 -52
- package/dist/constants/theme.js.map +0 -1
- package/dist/constants/timeouts.d.ts +0 -84
- package/dist/constants/timeouts.d.ts.map +0 -1
- package/dist/constants/timeouts.js +0 -111
- package/dist/constants/timeouts.js.map +0 -1
- package/dist/constants/ui-symbols.d.ts +0 -47
- package/dist/constants/ui-symbols.d.ts.map +0 -1
- package/dist/constants/ui-symbols.js +0 -48
- package/dist/constants/ui-symbols.js.map +0 -1
- package/dist/services/clash-config.d.ts +0 -16
- package/dist/services/clash-config.d.ts.map +0 -1
- package/dist/services/clash-config.js +0 -107
- package/dist/services/clash-config.js.map +0 -1
- package/dist/services/config-manager.d.ts +0 -90
- package/dist/services/config-manager.d.ts.map +0 -1
- package/dist/services/config-manager.js +0 -307
- package/dist/services/config-manager.js.map +0 -1
- package/dist/services/layout-manager.d.ts +0 -94
- package/dist/services/layout-manager.d.ts.map +0 -1
- package/dist/services/layout-manager.js +0 -192
- package/dist/services/layout-manager.js.map +0 -1
- package/dist/services/log-manager.d.ts +0 -157
- package/dist/services/log-manager.d.ts.map +0 -1
- package/dist/services/log-manager.js +0 -397
- package/dist/services/log-manager.js.map +0 -1
- package/dist/services/navigation-manager.d.ts +0 -23
- package/dist/services/navigation-manager.d.ts.map +0 -1
- package/dist/services/navigation-manager.js +0 -39
- package/dist/services/navigation-manager.js.map +0 -1
- package/dist/services/platform-detector.d.ts +0 -10
- package/dist/services/platform-detector.d.ts.map +0 -1
- package/dist/services/platform-detector.js +0 -106
- package/dist/services/platform-detector.js.map +0 -1
- package/dist/services/public-ip-manager.d.ts +0 -78
- package/dist/services/public-ip-manager.d.ts.map +0 -1
- package/dist/services/public-ip-manager.js +0 -296
- package/dist/services/public-ip-manager.js.map +0 -1
- package/dist/services/quota-enforcer.d.ts +0 -86
- package/dist/services/quota-enforcer.d.ts.map +0 -1
- package/dist/services/quota-enforcer.js +0 -151
- package/dist/services/quota-enforcer.js.map +0 -1
- package/dist/services/quota-manager.d.ts +0 -101
- package/dist/services/quota-manager.d.ts.map +0 -1
- package/dist/services/quota-manager.js +0 -257
- package/dist/services/quota-manager.js.map +0 -1
- package/dist/services/review/areas/community.d.ts +0 -9
- package/dist/services/review/areas/community.d.ts.map +0 -1
- package/dist/services/review/areas/community.js +0 -59
- package/dist/services/review/areas/community.js.map +0 -1
- package/dist/services/review/areas/contribution.d.ts +0 -9
- package/dist/services/review/areas/contribution.d.ts.map +0 -1
- package/dist/services/review/areas/contribution.js +0 -107
- package/dist/services/review/areas/contribution.js.map +0 -1
- package/dist/services/review/areas/documentation.d.ts +0 -9
- package/dist/services/review/areas/documentation.d.ts.map +0 -1
- package/dist/services/review/areas/documentation.js +0 -110
- package/dist/services/review/areas/documentation.js.map +0 -1
- package/dist/services/review/areas/license.d.ts +0 -9
- package/dist/services/review/areas/license.d.ts.map +0 -1
- package/dist/services/review/areas/license.js +0 -86
- package/dist/services/review/areas/license.js.map +0 -1
- package/dist/services/review/areas/quality.d.ts +0 -9
- package/dist/services/review/areas/quality.d.ts.map +0 -1
- package/dist/services/review/areas/quality.js +0 -84
- package/dist/services/review/areas/quality.js.map +0 -1
- package/dist/services/review/areas/security.d.ts +0 -9
- package/dist/services/review/areas/security.d.ts.map +0 -1
- package/dist/services/review/areas/security.js +0 -64
- package/dist/services/review/areas/security.js.map +0 -1
- package/dist/services/review/evidence.d.ts +0 -10
- package/dist/services/review/evidence.d.ts.map +0 -1
- package/dist/services/review/evidence.js +0 -40
- package/dist/services/review/evidence.js.map +0 -1
- package/dist/services/review/recommendations-filter.d.ts +0 -12
- package/dist/services/review/recommendations-filter.d.ts.map +0 -1
- package/dist/services/review/recommendations-filter.js +0 -20
- package/dist/services/review/recommendations-filter.js.map +0 -1
- package/dist/services/review/repo-scanner.d.ts +0 -8
- package/dist/services/review/repo-scanner.d.ts.map +0 -1
- package/dist/services/review/repo-scanner.js +0 -15
- package/dist/services/review/repo-scanner.js.map +0 -1
- package/dist/services/review/report-renderer.d.ts +0 -15
- package/dist/services/review/report-renderer.d.ts.map +0 -1
- package/dist/services/review/report-renderer.js +0 -120
- package/dist/services/review/report-renderer.js.map +0 -1
- package/dist/services/review/review-engine.d.ts +0 -15
- package/dist/services/review/review-engine.d.ts.map +0 -1
- package/dist/services/review/review-engine.js +0 -61
- package/dist/services/review/review-engine.js.map +0 -1
- package/dist/services/review/summary-builder.d.ts +0 -8
- package/dist/services/review/summary-builder.d.ts.map +0 -1
- package/dist/services/review/summary-builder.js +0 -26
- package/dist/services/review/summary-builder.js.map +0 -1
- package/dist/services/screen-manager.d.ts +0 -13
- package/dist/services/screen-manager.d.ts.map +0 -1
- package/dist/services/screen-manager.js +0 -42
- package/dist/services/screen-manager.js.map +0 -1
- package/dist/services/stats-config-manager.d.ts +0 -110
- package/dist/services/stats-config-manager.d.ts.map +0 -1
- package/dist/services/stats-config-manager.js +0 -443
- package/dist/services/stats-config-manager.js.map +0 -1
- package/dist/services/systemd-manager.d.ts +0 -197
- package/dist/services/systemd-manager.d.ts.map +0 -1
- package/dist/services/systemd-manager.js +0 -458
- package/dist/services/systemd-manager.js.map +0 -1
- package/dist/services/traffic-manager.d.ts +0 -106
- package/dist/services/traffic-manager.d.ts.map +0 -1
- package/dist/services/traffic-manager.js +0 -368
- package/dist/services/traffic-manager.js.map +0 -1
- package/dist/services/user-manager.d.ts +0 -90
- package/dist/services/user-manager.d.ts.map +0 -1
- package/dist/services/user-manager.js +0 -347
- package/dist/services/user-manager.js.map +0 -1
- package/dist/services/user-metadata-manager.d.ts +0 -85
- package/dist/services/user-metadata-manager.d.ts.map +0 -1
- package/dist/services/user-metadata-manager.js +0 -181
- package/dist/services/user-metadata-manager.js.map +0 -1
- package/dist/types/config.d.ts +0 -340
- package/dist/types/config.d.ts.map +0 -1
- package/dist/types/config.js +0 -7
- package/dist/types/config.js.map +0 -1
- package/dist/types/layout.d.ts +0 -119
- package/dist/types/layout.d.ts.map +0 -1
- package/dist/types/layout.js +0 -142
- package/dist/types/layout.js.map +0 -1
- package/dist/types/platform.d.ts +0 -72
- package/dist/types/platform.d.ts.map +0 -1
- package/dist/types/platform.js +0 -38
- package/dist/types/platform.js.map +0 -1
- package/dist/types/quota.d.ts +0 -158
- package/dist/types/quota.d.ts.map +0 -1
- package/dist/types/quota.js +0 -26
- package/dist/types/quota.js.map +0 -1
- package/dist/types/review.d.ts +0 -62
- package/dist/types/review.d.ts.map +0 -1
- package/dist/types/review.js +0 -8
- package/dist/types/review.js.map +0 -1
- package/dist/types/server-config.d.ts +0 -53
- package/dist/types/server-config.d.ts.map +0 -1
- package/dist/types/server-config.js +0 -19
- package/dist/types/server-config.js.map +0 -1
- package/dist/types/service.d.ts +0 -96
- package/dist/types/service.d.ts.map +0 -1
- package/dist/types/service.js +0 -7
- package/dist/types/service.js.map +0 -1
- package/dist/types/terminal.d.ts +0 -35
- package/dist/types/terminal.d.ts.map +0 -1
- package/dist/types/terminal.js +0 -20
- package/dist/types/terminal.js.map +0 -1
- package/dist/types/ui-components.d.ts +0 -53
- package/dist/types/ui-components.d.ts.map +0 -1
- package/dist/types/ui-components.js +0 -3
- package/dist/types/ui-components.js.map +0 -1
- package/dist/types/user-metadata.d.ts +0 -43
- package/dist/types/user-metadata.d.ts.map +0 -1
- package/dist/types/user-metadata.js +0 -17
- package/dist/types/user-metadata.js.map +0 -1
- package/dist/types/user.d.ts +0 -134
- package/dist/types/user.d.ts.map +0 -1
- package/dist/types/user.js +0 -7
- package/dist/types/user.js.map +0 -1
- package/dist/utils/clipboard.d.ts +0 -21
- package/dist/utils/clipboard.d.ts.map +0 -1
- package/dist/utils/clipboard.js +0 -45
- package/dist/utils/clipboard.js.map +0 -1
- package/dist/utils/error-formatter.d.ts +0 -60
- package/dist/utils/error-formatter.d.ts.map +0 -1
- package/dist/utils/error-formatter.js +0 -244
- package/dist/utils/error-formatter.js.map +0 -1
- package/dist/utils/errors.d.ts +0 -92
- package/dist/utils/errors.d.ts.map +0 -1
- package/dist/utils/errors.js +0 -143
- package/dist/utils/errors.js.map +0 -1
- package/dist/utils/firewall.d.ts +0 -14
- package/dist/utils/firewall.d.ts.map +0 -1
- package/dist/utils/firewall.js +0 -78
- package/dist/utils/firewall.js.map +0 -1
- package/dist/utils/format.d.ts +0 -93
- package/dist/utils/format.d.ts.map +0 -1
- package/dist/utils/format.js +0 -240
- package/dist/utils/format.js.map +0 -1
- package/dist/utils/icons.d.ts +0 -53
- package/dist/utils/icons.d.ts.map +0 -1
- package/dist/utils/icons.js +0 -143
- package/dist/utils/icons.js.map +0 -1
- package/dist/utils/layout.d.ts +0 -142
- package/dist/utils/layout.d.ts.map +0 -1
- package/dist/utils/layout.js +0 -381
- package/dist/utils/layout.js.map +0 -1
- package/dist/utils/logger.d.ts +0 -160
- package/dist/utils/logger.d.ts.map +0 -1
- package/dist/utils/logger.js +0 -351
- package/dist/utils/logger.js.map +0 -1
- package/dist/utils/network.d.ts +0 -39
- package/dist/utils/network.d.ts.map +0 -1
- package/dist/utils/network.js +0 -227
- package/dist/utils/network.js.map +0 -1
- package/dist/utils/os-detection.d.ts +0 -10
- package/dist/utils/os-detection.d.ts.map +0 -1
- package/dist/utils/os-detection.js +0 -86
- package/dist/utils/os-detection.js.map +0 -1
- package/dist/utils/preflight.d.ts +0 -57
- package/dist/utils/preflight.d.ts.map +0 -1
- package/dist/utils/preflight.js +0 -215
- package/dist/utils/preflight.js.map +0 -1
- package/dist/utils/repo-scan.d.ts +0 -54
- package/dist/utils/repo-scan.d.ts.map +0 -1
- package/dist/utils/repo-scan.js +0 -165
- package/dist/utils/repo-scan.js.map +0 -1
- package/dist/utils/report-output.d.ts +0 -13
- package/dist/utils/report-output.d.ts.map +0 -1
- package/dist/utils/report-output.js +0 -33
- package/dist/utils/report-output.js.map +0 -1
- package/dist/utils/review-id.d.ts +0 -8
- package/dist/utils/review-id.d.ts.map +0 -1
- package/dist/utils/review-id.js +0 -17
- package/dist/utils/review-id.js.map +0 -1
- package/dist/utils/splash.d.ts +0 -21
- package/dist/utils/splash.d.ts.map +0 -1
- package/dist/utils/splash.js +0 -179
- package/dist/utils/splash.js.map +0 -1
- package/dist/utils/terminal.d.ts +0 -32
- package/dist/utils/terminal.d.ts.map +0 -1
- package/dist/utils/terminal.js +0 -93
- package/dist/utils/terminal.js.map +0 -1
- package/dist/utils/traffic-formatter.d.ts +0 -45
- package/dist/utils/traffic-formatter.d.ts.map +0 -1
- package/dist/utils/traffic-formatter.js +0 -131
- package/dist/utils/traffic-formatter.js.map +0 -1
- package/dist/utils/validator.d.ts +0 -102
- package/dist/utils/validator.d.ts.map +0 -1
- package/dist/utils/validator.js +0 -238
- package/dist/utils/validator.js.map +0 -1
- package/dist/utils/vless-link.d.ts +0 -27
- package/dist/utils/vless-link.d.ts.map +0 -1
- package/dist/utils/vless-link.js +0 -69
- package/dist/utils/vless-link.js.map +0 -1
- package/dist/utils/which.d.ts +0 -13
- package/dist/utils/which.d.ts.map +0 -1
- package/dist/utils/which.js +0 -28
- package/dist/utils/which.js.map +0 -1
|
@@ -1,151 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Quota Enforcer Service
|
|
4
|
-
*
|
|
5
|
-
* Monitors user traffic and enforces quota limits by disabling users
|
|
6
|
-
* who exceed their allocated quota.
|
|
7
|
-
*
|
|
8
|
-
* @module services/quota-enforcer
|
|
9
|
-
*/
|
|
10
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
-
exports.QuotaEnforcer = void 0;
|
|
12
|
-
const quota_manager_1 = require("./quota-manager");
|
|
13
|
-
const traffic_manager_1 = require("./traffic-manager");
|
|
14
|
-
const traffic_formatter_1 = require("../utils/traffic-formatter");
|
|
15
|
-
/**
|
|
16
|
-
* QuotaEnforcer class
|
|
17
|
-
*
|
|
18
|
-
* Checks all users against their quotas and disables those who exceed limits.
|
|
19
|
-
*/
|
|
20
|
-
class QuotaEnforcer {
|
|
21
|
-
constructor(_configPath, _serviceName) {
|
|
22
|
-
this.quotaManager = new quota_manager_1.QuotaManager();
|
|
23
|
-
this.trafficManager = new traffic_manager_1.TrafficManager();
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* Check and enforce quotas for all users
|
|
27
|
-
*
|
|
28
|
-
* @param autoDisable - Whether to automatically disable users who exceed quota
|
|
29
|
-
* @returns Enforcement summary
|
|
30
|
-
*/
|
|
31
|
-
async enforceQuotas(autoDisable = true) {
|
|
32
|
-
const results = [];
|
|
33
|
-
let normalCount = 0;
|
|
34
|
-
let warningCount = 0;
|
|
35
|
-
let exceededCount = 0;
|
|
36
|
-
let newlyDisabledCount = 0;
|
|
37
|
-
// Get all data
|
|
38
|
-
const [quotas, usages] = await Promise.all([
|
|
39
|
-
this.quotaManager.getAllQuotas(),
|
|
40
|
-
this.trafficManager.getAllUsage(),
|
|
41
|
-
]);
|
|
42
|
-
// Check each user with a quota
|
|
43
|
-
for (const [email, quota] of Object.entries(quotas)) {
|
|
44
|
-
// Skip unlimited quotas
|
|
45
|
-
if (quota.quotaBytes < 0) {
|
|
46
|
-
continue;
|
|
47
|
-
}
|
|
48
|
-
// Get current usage
|
|
49
|
-
const usage = usages.find((u) => u.email === email);
|
|
50
|
-
const usedBytes = usage?.total || quota.usedBytes || 0;
|
|
51
|
-
// Calculate percentage and alert level
|
|
52
|
-
const usagePercent = (0, traffic_formatter_1.calculateUsagePercent)(usedBytes, quota.quotaBytes);
|
|
53
|
-
const alertLevel = (0, traffic_formatter_1.getAlertLevel)(usagePercent);
|
|
54
|
-
const result = {
|
|
55
|
-
email,
|
|
56
|
-
usedBytes,
|
|
57
|
-
quotaBytes: quota.quotaBytes,
|
|
58
|
-
usagePercent,
|
|
59
|
-
alertLevel,
|
|
60
|
-
wasDisabled: false,
|
|
61
|
-
previousStatus: quota.status,
|
|
62
|
-
};
|
|
63
|
-
// Count by alert level
|
|
64
|
-
switch (alertLevel) {
|
|
65
|
-
case 'normal':
|
|
66
|
-
normalCount++;
|
|
67
|
-
break;
|
|
68
|
-
case 'warning':
|
|
69
|
-
warningCount++;
|
|
70
|
-
break;
|
|
71
|
-
case 'exceeded':
|
|
72
|
-
exceededCount++;
|
|
73
|
-
// Auto-disable if enabled and user is not already disabled
|
|
74
|
-
if (autoDisable && quota.status === 'active') {
|
|
75
|
-
await this.quotaManager.setStatus(email, 'exceeded');
|
|
76
|
-
result.wasDisabled = true;
|
|
77
|
-
newlyDisabledCount++;
|
|
78
|
-
}
|
|
79
|
-
break;
|
|
80
|
-
}
|
|
81
|
-
results.push(result);
|
|
82
|
-
}
|
|
83
|
-
return {
|
|
84
|
-
totalChecked: results.length,
|
|
85
|
-
normalCount,
|
|
86
|
-
warningCount,
|
|
87
|
-
exceededCount,
|
|
88
|
-
newlyDisabledCount,
|
|
89
|
-
results,
|
|
90
|
-
timestamp: new Date().toISOString(),
|
|
91
|
-
};
|
|
92
|
-
}
|
|
93
|
-
/**
|
|
94
|
-
* Check quota for a single user
|
|
95
|
-
*
|
|
96
|
-
* @param email - User email
|
|
97
|
-
* @param autoDisable - Whether to automatically disable if exceeded
|
|
98
|
-
* @returns Enforcement result or null if user has no quota
|
|
99
|
-
*/
|
|
100
|
-
async checkUser(email, autoDisable = true) {
|
|
101
|
-
const quota = await this.quotaManager.getQuota(email);
|
|
102
|
-
// No quota or unlimited
|
|
103
|
-
if (quota.quotaBytes < 0) {
|
|
104
|
-
return null;
|
|
105
|
-
}
|
|
106
|
-
// Get current usage
|
|
107
|
-
const usage = await this.trafficManager.getUsage(email);
|
|
108
|
-
const usedBytes = usage?.total || quota.usedBytes || 0;
|
|
109
|
-
// Calculate percentage and alert level
|
|
110
|
-
const usagePercent = (0, traffic_formatter_1.calculateUsagePercent)(usedBytes, quota.quotaBytes);
|
|
111
|
-
const alertLevel = (0, traffic_formatter_1.getAlertLevel)(usagePercent);
|
|
112
|
-
const result = {
|
|
113
|
-
email,
|
|
114
|
-
usedBytes,
|
|
115
|
-
quotaBytes: quota.quotaBytes,
|
|
116
|
-
usagePercent,
|
|
117
|
-
alertLevel,
|
|
118
|
-
wasDisabled: false,
|
|
119
|
-
previousStatus: quota.status,
|
|
120
|
-
};
|
|
121
|
-
// Auto-disable if exceeded and enabled
|
|
122
|
-
if (autoDisable && alertLevel === 'exceeded' && quota.status === 'active') {
|
|
123
|
-
await this.quotaManager.setStatus(email, 'exceeded');
|
|
124
|
-
result.wasDisabled = true;
|
|
125
|
-
}
|
|
126
|
-
return result;
|
|
127
|
-
}
|
|
128
|
-
/**
|
|
129
|
-
* Get users who need attention (warning or exceeded)
|
|
130
|
-
*
|
|
131
|
-
* @returns Array of users needing attention
|
|
132
|
-
*/
|
|
133
|
-
async getUsersNeedingAttention() {
|
|
134
|
-
const summary = await this.enforceQuotas(false); // Don't auto-disable, just check
|
|
135
|
-
return summary.results.filter((r) => r.alertLevel !== 'normal');
|
|
136
|
-
}
|
|
137
|
-
/**
|
|
138
|
-
* Re-enable a disabled user
|
|
139
|
-
*
|
|
140
|
-
* @param email - User email
|
|
141
|
-
* @param resetUsage - Whether to also reset usage counter
|
|
142
|
-
*/
|
|
143
|
-
async reenableUser(email, resetUsage = false) {
|
|
144
|
-
await this.quotaManager.setStatus(email, 'active');
|
|
145
|
-
if (resetUsage) {
|
|
146
|
-
await this.quotaManager.resetUsage(email);
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
exports.QuotaEnforcer = QuotaEnforcer;
|
|
151
|
-
//# sourceMappingURL=quota-enforcer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"quota-enforcer.js","sourceRoot":"","sources":["../../src/services/quota-enforcer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* QuotaManager - 配额配置管理服务
|
|
3
|
-
*
|
|
4
|
-
* 管理用户流量配额的配置和持久化
|
|
5
|
-
*
|
|
6
|
-
* @module services/quota-manager
|
|
7
|
-
*/
|
|
8
|
-
import type { TrafficQuota, QuotaConfig, SetQuotaParams, AlertLevel } from '../types/quota';
|
|
9
|
-
/**
|
|
10
|
-
* QuotaManager - 管理用户流量配额
|
|
11
|
-
*/
|
|
12
|
-
export declare class QuotaManager {
|
|
13
|
-
private configPath;
|
|
14
|
-
/**
|
|
15
|
-
* 创建 QuotaManager 实例
|
|
16
|
-
*
|
|
17
|
-
* @param configPath - 配额配置文件路径(默认 /usr/local/etc/xray/quota.json)
|
|
18
|
-
*/
|
|
19
|
-
constructor(configPath?: string);
|
|
20
|
-
/**
|
|
21
|
-
* 读取配额配置文件
|
|
22
|
-
*
|
|
23
|
-
* @returns 配额配置
|
|
24
|
-
*/
|
|
25
|
-
readConfig(): Promise<QuotaConfig>;
|
|
26
|
-
/**
|
|
27
|
-
* 写入配额配置文件
|
|
28
|
-
*
|
|
29
|
-
* @param config - 配额配置
|
|
30
|
-
*/
|
|
31
|
-
writeConfig(config: QuotaConfig): Promise<void>;
|
|
32
|
-
/**
|
|
33
|
-
* 获取用户配额
|
|
34
|
-
*
|
|
35
|
-
* @param email - 用户邮箱
|
|
36
|
-
* @returns 配额配置,不存在时返回默认值
|
|
37
|
-
*/
|
|
38
|
-
getQuota(email: string): Promise<TrafficQuota>;
|
|
39
|
-
/**
|
|
40
|
-
* 设置用户配额
|
|
41
|
-
*
|
|
42
|
-
* @param params - 配额设置参数
|
|
43
|
-
* @throws Error 如果参数无效
|
|
44
|
-
*/
|
|
45
|
-
setQuota(params: SetQuotaParams): Promise<void>;
|
|
46
|
-
/**
|
|
47
|
-
* 重置用户已用流量
|
|
48
|
-
*
|
|
49
|
-
* @param email - 用户邮箱
|
|
50
|
-
*/
|
|
51
|
-
resetUsage(email: string): Promise<void>;
|
|
52
|
-
/**
|
|
53
|
-
* 更新用户已用流量
|
|
54
|
-
*
|
|
55
|
-
* @param email - 用户邮箱
|
|
56
|
-
* @param usedBytes - 已用字节数
|
|
57
|
-
* @throws Error 如果参数无效
|
|
58
|
-
*/
|
|
59
|
-
updateUsage(email: string, usedBytes: number): Promise<void>;
|
|
60
|
-
/**
|
|
61
|
-
* 获取所有用户配额
|
|
62
|
-
*
|
|
63
|
-
* @returns 用户配额映射
|
|
64
|
-
*/
|
|
65
|
-
getAllQuotas(): Promise<Record<string, TrafficQuota>>;
|
|
66
|
-
/**
|
|
67
|
-
* 删除用户配额记录
|
|
68
|
-
*
|
|
69
|
-
* @param email - 用户邮箱
|
|
70
|
-
*/
|
|
71
|
-
deleteQuota(email: string): Promise<void>;
|
|
72
|
-
/**
|
|
73
|
-
* 设置用户状态
|
|
74
|
-
*
|
|
75
|
-
* @param email - 用户邮箱
|
|
76
|
-
* @param status - 新状态
|
|
77
|
-
*/
|
|
78
|
-
setStatus(email: string, status: TrafficQuota['status']): Promise<void>;
|
|
79
|
-
/**
|
|
80
|
-
* 计算警告级别
|
|
81
|
-
*
|
|
82
|
-
* @param usedBytes - 已用字节数
|
|
83
|
-
* @param quotaBytes - 配额字节数(-1 表示无限制)
|
|
84
|
-
* @returns 警告级别
|
|
85
|
-
*/
|
|
86
|
-
calculateAlertLevel(usedBytes: number, quotaBytes: number): AlertLevel;
|
|
87
|
-
/**
|
|
88
|
-
* 获取 API 端口
|
|
89
|
-
*
|
|
90
|
-
* @returns API 端口号
|
|
91
|
-
*/
|
|
92
|
-
getApiPort(): Promise<number>;
|
|
93
|
-
/**
|
|
94
|
-
* 设置 API 端口
|
|
95
|
-
*
|
|
96
|
-
* @param port - API 端口号
|
|
97
|
-
* @throws Error 如果端口号无效
|
|
98
|
-
*/
|
|
99
|
-
setApiPort(port: number): Promise<void>;
|
|
100
|
-
}
|
|
101
|
-
//# sourceMappingURL=quota-manager.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"quota-manager.d.ts","sourceRoot":"","sources":["../../src/services/quota-manager.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AA6B5F;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,UAAU,CAAS;IAE3B;;;;OAIG;gBACS,UAAU,GAAE,MAA0B;IAIlD;;;;OAIG;IACG,UAAU,IAAI,OAAO,CAAC,WAAW,CAAC;IAyBxC;;;;OAIG;IACG,WAAW,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBrD;;;;;OAKG;IACG,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAKpD;;;;;OAKG;IACG,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IA2BrD;;;;OAIG;IACG,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAc9C;;;;;;OAMG;IACG,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBlE;;;;OAIG;IACG,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAK3D;;;;OAIG;IACG,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAW/C;;;;;OAKG;IACG,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAW7E;;;;;;OAMG;IACH,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,UAAU;IAgBtE;;;;OAIG;IACG,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;IAKnC;;;;;OAKG;IACG,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAS9C"}
|
|
@@ -1,257 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* QuotaManager - 配额配置管理服务
|
|
4
|
-
*
|
|
5
|
-
* 管理用户流量配额的配置和持久化
|
|
6
|
-
*
|
|
7
|
-
* @module services/quota-manager
|
|
8
|
-
*/
|
|
9
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
-
exports.QuotaManager = void 0;
|
|
11
|
-
const promises_1 = require("fs/promises");
|
|
12
|
-
const fs_1 = require("fs");
|
|
13
|
-
const path_1 = require("path");
|
|
14
|
-
const quota_1 = require("../types/quota");
|
|
15
|
-
const quota_2 = require("../constants/quota");
|
|
16
|
-
const errors_1 = require("../utils/errors");
|
|
17
|
-
const error_codes_1 = require("../constants/error-codes");
|
|
18
|
-
/**
|
|
19
|
-
* 验证邮箱格式
|
|
20
|
-
*/
|
|
21
|
-
function isValidEmail(email) {
|
|
22
|
-
return email.length > 0 && email.includes('@') && email.length <= 254;
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* 验证配额值
|
|
26
|
-
* @param bytes - 配额字节数
|
|
27
|
-
* @returns true 如果有效(-1 表示无限制,或者 >= 0)
|
|
28
|
-
*/
|
|
29
|
-
function isValidQuotaBytes(bytes) {
|
|
30
|
-
return bytes === -1 || (Number.isFinite(bytes) && bytes >= 0);
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* 验证端口号
|
|
34
|
-
*/
|
|
35
|
-
function isValidPort(port) {
|
|
36
|
-
return Number.isInteger(port) && port >= 1 && port <= 65535;
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* QuotaManager - 管理用户流量配额
|
|
40
|
-
*/
|
|
41
|
-
class QuotaManager {
|
|
42
|
-
/**
|
|
43
|
-
* 创建 QuotaManager 实例
|
|
44
|
-
*
|
|
45
|
-
* @param configPath - 配额配置文件路径(默认 /usr/local/etc/xray/quota.json)
|
|
46
|
-
*/
|
|
47
|
-
constructor(configPath = quota_2.QUOTA_CONFIG_PATH) {
|
|
48
|
-
this.configPath = configPath;
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* 读取配额配置文件
|
|
52
|
-
*
|
|
53
|
-
* @returns 配额配置
|
|
54
|
-
*/
|
|
55
|
-
async readConfig() {
|
|
56
|
-
try {
|
|
57
|
-
if (!(0, fs_1.existsSync)(this.configPath)) {
|
|
58
|
-
return { ...quota_1.DEFAULT_QUOTA_CONFIG };
|
|
59
|
-
}
|
|
60
|
-
const content = await (0, promises_1.readFile)(this.configPath, 'utf-8');
|
|
61
|
-
const config = JSON.parse(content);
|
|
62
|
-
// 确保配置结构完整
|
|
63
|
-
return {
|
|
64
|
-
...quota_1.DEFAULT_QUOTA_CONFIG,
|
|
65
|
-
...config,
|
|
66
|
-
users: config.users || {},
|
|
67
|
-
};
|
|
68
|
-
}
|
|
69
|
-
catch (error) {
|
|
70
|
-
if (error.code === 'EACCES') {
|
|
71
|
-
throw new errors_1.QuotaError(error_codes_1.QuotaErrors.QUOTA_CONFIG_NOT_FOUND, this.configPath);
|
|
72
|
-
}
|
|
73
|
-
else if (error instanceof SyntaxError) {
|
|
74
|
-
throw new errors_1.QuotaError(error_codes_1.QuotaErrors.QUOTA_CONFIG_NOT_FOUND, error.message);
|
|
75
|
-
}
|
|
76
|
-
throw error;
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
/**
|
|
80
|
-
* 写入配额配置文件
|
|
81
|
-
*
|
|
82
|
-
* @param config - 配额配置
|
|
83
|
-
*/
|
|
84
|
-
async writeConfig(config) {
|
|
85
|
-
try {
|
|
86
|
-
// 确保目录存在
|
|
87
|
-
const dir = (0, path_1.dirname)(this.configPath);
|
|
88
|
-
if (!(0, fs_1.existsSync)(dir)) {
|
|
89
|
-
await (0, promises_1.mkdir)(dir, { recursive: true });
|
|
90
|
-
}
|
|
91
|
-
// 写入配置
|
|
92
|
-
const content = JSON.stringify(config, null, 2);
|
|
93
|
-
await (0, promises_1.writeFile)(this.configPath, content, 'utf-8');
|
|
94
|
-
// 设置安全权限
|
|
95
|
-
await (0, promises_1.chmod)(this.configPath, 0o600);
|
|
96
|
-
}
|
|
97
|
-
catch (error) {
|
|
98
|
-
if (error.code === 'EACCES') {
|
|
99
|
-
throw new errors_1.QuotaError(error_codes_1.QuotaErrors.TRAFFIC_UPDATE_FAILED, this.configPath);
|
|
100
|
-
}
|
|
101
|
-
throw error;
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
/**
|
|
105
|
-
* 获取用户配额
|
|
106
|
-
*
|
|
107
|
-
* @param email - 用户邮箱
|
|
108
|
-
* @returns 配额配置,不存在时返回默认值
|
|
109
|
-
*/
|
|
110
|
-
async getQuota(email) {
|
|
111
|
-
const config = await this.readConfig();
|
|
112
|
-
return config.users[email] || { ...quota_1.DEFAULT_QUOTA };
|
|
113
|
-
}
|
|
114
|
-
/**
|
|
115
|
-
* 设置用户配额
|
|
116
|
-
*
|
|
117
|
-
* @param params - 配额设置参数
|
|
118
|
-
* @throws Error 如果参数无效
|
|
119
|
-
*/
|
|
120
|
-
async setQuota(params) {
|
|
121
|
-
// 验证邮箱
|
|
122
|
-
if (!isValidEmail(params.email)) {
|
|
123
|
-
throw new errors_1.ValidationError(error_codes_1.ValidationErrors.INVALID_FORMAT, params.email);
|
|
124
|
-
}
|
|
125
|
-
// 验证配额值
|
|
126
|
-
if (!isValidQuotaBytes(params.quotaBytes)) {
|
|
127
|
-
throw new errors_1.QuotaError(error_codes_1.QuotaErrors.INVALID_QUOTA_VALUE, String(params.quotaBytes));
|
|
128
|
-
}
|
|
129
|
-
const config = await this.readConfig();
|
|
130
|
-
const existingQuota = config.users[params.email];
|
|
131
|
-
const now = new Date().toISOString();
|
|
132
|
-
config.users[params.email] = {
|
|
133
|
-
quotaBytes: params.quotaBytes,
|
|
134
|
-
quotaType: params.quotaType,
|
|
135
|
-
usedBytes: existingQuota?.usedBytes || 0,
|
|
136
|
-
lastReset: existingQuota?.lastReset || now,
|
|
137
|
-
status: existingQuota?.status || 'active',
|
|
138
|
-
};
|
|
139
|
-
await this.writeConfig(config);
|
|
140
|
-
}
|
|
141
|
-
/**
|
|
142
|
-
* 重置用户已用流量
|
|
143
|
-
*
|
|
144
|
-
* @param email - 用户邮箱
|
|
145
|
-
*/
|
|
146
|
-
async resetUsage(email) {
|
|
147
|
-
const config = await this.readConfig();
|
|
148
|
-
if (!config.users[email]) {
|
|
149
|
-
throw new errors_1.QuotaError(error_codes_1.QuotaErrors.USER_QUOTA_NOT_FOUND, email);
|
|
150
|
-
}
|
|
151
|
-
config.users[email].usedBytes = 0;
|
|
152
|
-
config.users[email].lastReset = new Date().toISOString();
|
|
153
|
-
config.users[email].status = 'active';
|
|
154
|
-
await this.writeConfig(config);
|
|
155
|
-
}
|
|
156
|
-
/**
|
|
157
|
-
* 更新用户已用流量
|
|
158
|
-
*
|
|
159
|
-
* @param email - 用户邮箱
|
|
160
|
-
* @param usedBytes - 已用字节数
|
|
161
|
-
* @throws Error 如果参数无效
|
|
162
|
-
*/
|
|
163
|
-
async updateUsage(email, usedBytes) {
|
|
164
|
-
// 验证已用字节数
|
|
165
|
-
if (!Number.isFinite(usedBytes) || usedBytes < 0) {
|
|
166
|
-
throw new errors_1.ValidationError(error_codes_1.ValidationErrors.VALUE_OUT_OF_RANGE, String(usedBytes));
|
|
167
|
-
}
|
|
168
|
-
const config = await this.readConfig();
|
|
169
|
-
if (!config.users[email]) {
|
|
170
|
-
// 如果用户没有配额记录,创建默认记录
|
|
171
|
-
config.users[email] = { ...quota_1.DEFAULT_QUOTA };
|
|
172
|
-
}
|
|
173
|
-
config.users[email].usedBytes = usedBytes;
|
|
174
|
-
await this.writeConfig(config);
|
|
175
|
-
}
|
|
176
|
-
/**
|
|
177
|
-
* 获取所有用户配额
|
|
178
|
-
*
|
|
179
|
-
* @returns 用户配额映射
|
|
180
|
-
*/
|
|
181
|
-
async getAllQuotas() {
|
|
182
|
-
const config = await this.readConfig();
|
|
183
|
-
return config.users;
|
|
184
|
-
}
|
|
185
|
-
/**
|
|
186
|
-
* 删除用户配额记录
|
|
187
|
-
*
|
|
188
|
-
* @param email - 用户邮箱
|
|
189
|
-
*/
|
|
190
|
-
async deleteQuota(email) {
|
|
191
|
-
const config = await this.readConfig();
|
|
192
|
-
if (!config.users[email]) {
|
|
193
|
-
return; // 不存在则静默返回
|
|
194
|
-
}
|
|
195
|
-
delete config.users[email];
|
|
196
|
-
await this.writeConfig(config);
|
|
197
|
-
}
|
|
198
|
-
/**
|
|
199
|
-
* 设置用户状态
|
|
200
|
-
*
|
|
201
|
-
* @param email - 用户邮箱
|
|
202
|
-
* @param status - 新状态
|
|
203
|
-
*/
|
|
204
|
-
async setStatus(email, status) {
|
|
205
|
-
const config = await this.readConfig();
|
|
206
|
-
if (!config.users[email]) {
|
|
207
|
-
throw new errors_1.QuotaError(error_codes_1.QuotaErrors.USER_QUOTA_NOT_FOUND, email);
|
|
208
|
-
}
|
|
209
|
-
config.users[email].status = status;
|
|
210
|
-
await this.writeConfig(config);
|
|
211
|
-
}
|
|
212
|
-
/**
|
|
213
|
-
* 计算警告级别
|
|
214
|
-
*
|
|
215
|
-
* @param usedBytes - 已用字节数
|
|
216
|
-
* @param quotaBytes - 配额字节数(-1 表示无限制)
|
|
217
|
-
* @returns 警告级别
|
|
218
|
-
*/
|
|
219
|
-
calculateAlertLevel(usedBytes, quotaBytes) {
|
|
220
|
-
if (quotaBytes < 0) {
|
|
221
|
-
return 'normal'; // 无限制
|
|
222
|
-
}
|
|
223
|
-
const percent = (usedBytes / quotaBytes) * 100;
|
|
224
|
-
if (percent >= quota_2.EXCEEDED_THRESHOLD) {
|
|
225
|
-
return 'exceeded';
|
|
226
|
-
}
|
|
227
|
-
if (percent >= quota_2.WARNING_THRESHOLD) {
|
|
228
|
-
return 'warning';
|
|
229
|
-
}
|
|
230
|
-
return 'normal';
|
|
231
|
-
}
|
|
232
|
-
/**
|
|
233
|
-
* 获取 API 端口
|
|
234
|
-
*
|
|
235
|
-
* @returns API 端口号
|
|
236
|
-
*/
|
|
237
|
-
async getApiPort() {
|
|
238
|
-
const config = await this.readConfig();
|
|
239
|
-
return config.apiPort;
|
|
240
|
-
}
|
|
241
|
-
/**
|
|
242
|
-
* 设置 API 端口
|
|
243
|
-
*
|
|
244
|
-
* @param port - API 端口号
|
|
245
|
-
* @throws Error 如果端口号无效
|
|
246
|
-
*/
|
|
247
|
-
async setApiPort(port) {
|
|
248
|
-
if (!isValidPort(port)) {
|
|
249
|
-
throw new errors_1.NetworkError(error_codes_1.NetworkErrors.INVALID_PORT, String(port));
|
|
250
|
-
}
|
|
251
|
-
const config = await this.readConfig();
|
|
252
|
-
config.apiPort = port;
|
|
253
|
-
await this.writeConfig(config);
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
exports.QuotaManager = QuotaManager;
|
|
257
|
-
//# sourceMappingURL=quota-manager.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"quota-manager.js","sourceRoot":"","sources":["../../src/services/quota-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Community area evaluation
|
|
3
|
-
*
|
|
4
|
-
* @module services/review/areas/community
|
|
5
|
-
*/
|
|
6
|
-
import { type AreaEvaluation } from '../review-engine';
|
|
7
|
-
import type { RepoScanResult } from '../../../utils/repo-scan';
|
|
8
|
-
export declare function evaluateCommunity(scan: RepoScanResult): AreaEvaluation;
|
|
9
|
-
//# sourceMappingURL=community.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"community.d.ts","sourceRoot":"","sources":["../../../../src/services/review/areas/community.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAG/D,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,cAAc,GAAG,cAAc,CAkDtE"}
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Community area evaluation
|
|
4
|
-
*
|
|
5
|
-
* @module services/review/areas/community
|
|
6
|
-
*/
|
|
7
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
-
exports.evaluateCommunity = evaluateCommunity;
|
|
9
|
-
const evidence_1 = require("../evidence");
|
|
10
|
-
function evaluateCommunity(scan) {
|
|
11
|
-
const findings = [];
|
|
12
|
-
const recommendations = [];
|
|
13
|
-
if (!scan.signals.hasMaintainers) {
|
|
14
|
-
recommendations.push({
|
|
15
|
-
areaId: 'community',
|
|
16
|
-
title: 'Document maintainers and support cadence',
|
|
17
|
-
details: 'Provide a MAINTAINERS file or similar guidance on support expectations.',
|
|
18
|
-
priority: 'medium',
|
|
19
|
-
timeHorizon: 'long-term',
|
|
20
|
-
riskIfIgnored: 'Users may not know where to seek support or how active maintenance is.',
|
|
21
|
-
evidence: [(0, evidence_1.missingEvidence)('MAINTAINERS.md missing')],
|
|
22
|
-
});
|
|
23
|
-
}
|
|
24
|
-
else if (scan.files.maintainers) {
|
|
25
|
-
findings.push({
|
|
26
|
-
areaId: 'community',
|
|
27
|
-
title: 'Maintainers guidance present',
|
|
28
|
-
details: 'Maintainers or support expectations are documented.',
|
|
29
|
-
evidence: [(0, evidence_1.fileEvidence)(scan.repoPath, scan.files.maintainers)],
|
|
30
|
-
});
|
|
31
|
-
}
|
|
32
|
-
if (!scan.signals.hasRoadmap) {
|
|
33
|
-
recommendations.push({
|
|
34
|
-
areaId: 'community',
|
|
35
|
-
title: 'Publish a lightweight roadmap',
|
|
36
|
-
details: 'Add a ROADMAP file to communicate future direction and release cadence.',
|
|
37
|
-
priority: 'low',
|
|
38
|
-
timeHorizon: 'long-term',
|
|
39
|
-
riskIfIgnored: 'Community members may not know what is planned or prioritized.',
|
|
40
|
-
evidence: [(0, evidence_1.missingEvidence)('ROADMAP.md missing')],
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
else if (scan.files.roadmap) {
|
|
44
|
-
findings.push({
|
|
45
|
-
areaId: 'community',
|
|
46
|
-
title: 'Roadmap present',
|
|
47
|
-
details: 'A roadmap exists to communicate future plans.',
|
|
48
|
-
evidence: [(0, evidence_1.fileEvidence)(scan.repoPath, scan.files.roadmap)],
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
|
-
const status = recommendations.length > 0 ? 'needs-improvement' : 'good';
|
|
52
|
-
return {
|
|
53
|
-
areaId: 'community',
|
|
54
|
-
status,
|
|
55
|
-
findings,
|
|
56
|
-
recommendations,
|
|
57
|
-
};
|
|
58
|
-
}
|
|
59
|
-
//# sourceMappingURL=community.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"community.js","sourceRoot":"","sources":["../../../../src/services/review/areas/community.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;AAMH,8CAkDC;AApDD,0CAA4D;AAE5D,SAAgB,iBAAiB,CAAC,IAAoB;IACpD,MAAM,QAAQ,GAA+B,EAAE,CAAC;IAChD,MAAM,eAAe,GAAsC,EAAE,CAAC;IAE9D,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;QACjC,eAAe,CAAC,IAAI,CAAC;YACnB,MAAM,EAAE,WAAW;YACnB,KAAK,EAAE,0CAA0C;YACjD,OAAO,EAAE,yEAAyE;YAClF,QAAQ,EAAE,QAAQ;YAClB,WAAW,EAAE,WAAW;YACxB,aAAa,EAAE,wEAAwE;YACvF,QAAQ,EAAE,CAAC,IAAA,0BAAe,EAAC,wBAAwB,CAAC,CAAC;SACtD,CAAC,CAAC;IACL,CAAC;SAAM,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QAClC,QAAQ,CAAC,IAAI,CAAC;YACZ,MAAM,EAAE,WAAW;YACnB,KAAK,EAAE,8BAA8B;YACrC,OAAO,EAAE,qDAAqD;YAC9D,QAAQ,EAAE,CAAC,IAAA,uBAAY,EAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;SAChE,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;QAC7B,eAAe,CAAC,IAAI,CAAC;YACnB,MAAM,EAAE,WAAW;YACnB,KAAK,EAAE,+BAA+B;YACtC,OAAO,EAAE,yEAAyE;YAClF,QAAQ,EAAE,KAAK;YACf,WAAW,EAAE,WAAW;YACxB,aAAa,EAAE,gEAAgE;YAC/E,QAAQ,EAAE,CAAC,IAAA,0BAAe,EAAC,oBAAoB,CAAC,CAAC;SAClD,CAAC,CAAC;IACL,CAAC;SAAM,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QAC9B,QAAQ,CAAC,IAAI,CAAC;YACZ,MAAM,EAAE,WAAW;YACnB,KAAK,EAAE,iBAAiB;YACxB,OAAO,EAAE,+CAA+C;YACxD,QAAQ,EAAE,CAAC,IAAA,uBAAY,EAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;SAC5D,CAAC,CAAC;IACL,CAAC;IAED,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,MAAM,CAAC;IAEzE,OAAO;QACL,MAAM,EAAE,WAAW;QACnB,MAAM;QACN,QAAQ;QACR,eAAe;KAChB,CAAC;AACJ,CAAC"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Contribution area evaluation
|
|
3
|
-
*
|
|
4
|
-
* @module services/review/areas/contribution
|
|
5
|
-
*/
|
|
6
|
-
import { type AreaEvaluation } from '../review-engine';
|
|
7
|
-
import type { RepoScanResult } from '../../../utils/repo-scan';
|
|
8
|
-
export declare function evaluateContribution(scan: RepoScanResult): AreaEvaluation;
|
|
9
|
-
//# sourceMappingURL=contribution.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"contribution.d.ts","sourceRoot":"","sources":["../../../../src/services/review/areas/contribution.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAG/D,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,cAAc,GAAG,cAAc,CAmGzE"}
|