cnpmcore 4.28.4 → 4.29.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/dist/app/common/CryptoUtil.js +7 -9
- package/dist/app/common/constants.d.ts +1 -0
- package/dist/app/common/constants.js +2 -1
- package/dist/app/core/entity/Org.d.ts +18 -0
- package/dist/app/core/entity/Org.js +16 -0
- package/dist/app/core/entity/OrgMember.d.ts +18 -0
- package/dist/app/core/entity/OrgMember.js +16 -0
- package/dist/app/core/entity/Team.d.ts +20 -0
- package/dist/app/core/entity/Team.js +17 -0
- package/dist/app/core/entity/TeamMember.d.ts +16 -0
- package/dist/app/core/entity/TeamMember.js +15 -0
- package/dist/app/core/entity/TeamPackage.d.ts +16 -0
- package/dist/app/core/entity/TeamPackage.js +15 -0
- package/dist/app/core/service/OrgService.d.ts +20 -0
- package/dist/app/core/service/OrgService.js +131 -0
- package/dist/app/core/service/TeamService.d.ts +16 -0
- package/dist/app/core/service/TeamService.js +110 -0
- package/dist/app/port/UserRoleManager.d.ts +2 -0
- package/dist/app/port/UserRoleManager.js +26 -1
- package/dist/app/port/controller/OrgController.d.ts +34 -0
- package/dist/app/port/controller/OrgController.js +217 -0
- package/dist/app/port/controller/PackageVersionFileController.js +3 -1
- package/dist/app/port/controller/TeamController.d.ts +48 -0
- package/dist/app/port/controller/TeamController.js +326 -0
- package/dist/app/port/controller/package/DownloadPackageVersionTar.js +3 -1
- package/dist/app/port/controller/package/ShowPackageController.d.ts +1 -0
- package/dist/app/port/controller/package/ShowPackageController.js +15 -5
- package/dist/app/port/controller/package/ShowPackageVersionController.js +2 -1
- package/dist/app/repository/OrgRepository.d.ts +23 -0
- package/dist/app/repository/OrgRepository.js +115 -0
- package/dist/app/repository/PackageRepository.d.ts +1 -0
- package/dist/app/repository/PackageRepository.js +7 -1
- package/dist/app/repository/TeamRepository.d.ts +33 -0
- package/dist/app/repository/TeamRepository.js +177 -0
- package/dist/app/repository/UserRepository.d.ts +1 -0
- package/dist/app/repository/UserRepository.js +7 -1
- package/dist/app/repository/model/Org.d.ts +9 -0
- package/dist/app/repository/model/Org.js +45 -0
- package/dist/app/repository/model/OrgMember.d.ts +10 -0
- package/dist/app/repository/model/OrgMember.js +49 -0
- package/dist/app/repository/model/Team.d.ts +10 -0
- package/dist/app/repository/model/Team.js +49 -0
- package/dist/app/repository/model/TeamMember.d.ts +9 -0
- package/dist/app/repository/model/TeamMember.js +45 -0
- package/dist/app/repository/model/TeamPackage.d.ts +9 -0
- package/dist/app/repository/model/TeamPackage.js +45 -0
- package/package.json +1 -1
|
@@ -0,0 +1,326 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
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;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
11
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
12
|
+
};
|
|
13
|
+
import { Context, HTTPBody, HTTPContext, HTTPController, HTTPMethod, HTTPMethodEnum, HTTPParam, Inject } from 'egg';
|
|
14
|
+
import { NotFoundError, UnprocessableEntityError } from 'egg/errors';
|
|
15
|
+
import { getScopeAndName } from "../../common/PackageUtil.js";
|
|
16
|
+
import { AbstractController } from "./AbstractController.js";
|
|
17
|
+
let TeamController = class TeamController extends AbstractController {
|
|
18
|
+
isAllowScopeOrg(orgName) {
|
|
19
|
+
return this.config.cnpmcore.allowScopes.includes(`@${orgName}`);
|
|
20
|
+
}
|
|
21
|
+
// For allowScopes orgs, auto-ensure; for others, just look up
|
|
22
|
+
async findOrg(orgName) {
|
|
23
|
+
if (this.isAllowScopeOrg(orgName)) {
|
|
24
|
+
return await this.orgService.ensureOrgForScope(`@${orgName}`);
|
|
25
|
+
}
|
|
26
|
+
return await this.orgService.findOrgByName(orgName);
|
|
27
|
+
}
|
|
28
|
+
async requireOrgWriteAccess(ctx, orgName) {
|
|
29
|
+
const authorizedUser = await this.userRoleManager.requiredAuthorizedUser(ctx, 'setting');
|
|
30
|
+
if (this.isAllowScopeOrg(orgName)) {
|
|
31
|
+
// allowScopes org: any authenticated user can operate, auto-ensure org
|
|
32
|
+
const org = await this.orgService.ensureOrgForScope(`@${orgName}`);
|
|
33
|
+
return { org, authorizedUser };
|
|
34
|
+
}
|
|
35
|
+
// Non-allowScopes org: admin or org owner only
|
|
36
|
+
const org = await this.orgService.findOrgByName(orgName);
|
|
37
|
+
if (!org) {
|
|
38
|
+
throw new NotFoundError(`Org "${orgName}" not found`);
|
|
39
|
+
}
|
|
40
|
+
const isAdmin = await this.userRoleManager.isAdmin(ctx);
|
|
41
|
+
await this.orgService.requiredOrgOwnerOrAdmin(org.orgId, authorizedUser.userId, isAdmin);
|
|
42
|
+
return { org, authorizedUser };
|
|
43
|
+
}
|
|
44
|
+
async requireTeamWriteAccess(ctx, orgName, teamName) {
|
|
45
|
+
const { org, authorizedUser } = await this.requireOrgWriteAccess(ctx, orgName);
|
|
46
|
+
const team = await this.teamRepository.findTeam(org.orgId, teamName);
|
|
47
|
+
if (!team) {
|
|
48
|
+
throw new NotFoundError(`Team "${teamName}" not found`);
|
|
49
|
+
}
|
|
50
|
+
return { org, team, authorizedUser };
|
|
51
|
+
}
|
|
52
|
+
// --- Team CRUD ---
|
|
53
|
+
// npm team create @scope:team → PUT /-/org/:orgName/team
|
|
54
|
+
async createTeam(ctx, orgName, body) {
|
|
55
|
+
const { org } = await this.requireOrgWriteAccess(ctx, orgName);
|
|
56
|
+
if (!body.name) {
|
|
57
|
+
throw new UnprocessableEntityError('name is required');
|
|
58
|
+
}
|
|
59
|
+
await this.teamService.createTeam(org.orgId, body.name, body.description);
|
|
60
|
+
return { ok: true };
|
|
61
|
+
}
|
|
62
|
+
// npm team ls @scope → GET /-/org/:orgName/team
|
|
63
|
+
async listTeams(ctx, orgName) {
|
|
64
|
+
await this.userRoleManager.requiredAuthorizedUser(ctx, 'read');
|
|
65
|
+
const org = await this.findOrg(orgName);
|
|
66
|
+
if (!org) {
|
|
67
|
+
throw new NotFoundError(`Org "${orgName}" not found`);
|
|
68
|
+
}
|
|
69
|
+
const teams = await this.teamRepository.listTeamsByOrgId(org.orgId);
|
|
70
|
+
// npm CLI adds @ prefix itself, return "scope:teamname" format
|
|
71
|
+
return teams.map((t) => `${orgName}:${t.name}`);
|
|
72
|
+
}
|
|
73
|
+
// GET /-/team/:orgName/:teamName (npm compatible show)
|
|
74
|
+
async showTeam(ctx, orgName, teamName) {
|
|
75
|
+
await this.userRoleManager.requiredAuthorizedUser(ctx, 'read');
|
|
76
|
+
const org = await this.findOrg(orgName);
|
|
77
|
+
if (!org) {
|
|
78
|
+
throw new NotFoundError(`Org "${orgName}" not found`);
|
|
79
|
+
}
|
|
80
|
+
const team = await this.teamRepository.findTeam(org.orgId, teamName);
|
|
81
|
+
if (!team) {
|
|
82
|
+
throw new NotFoundError(`Team "${teamName}" not found`);
|
|
83
|
+
}
|
|
84
|
+
return {
|
|
85
|
+
name: team.name,
|
|
86
|
+
description: team.description,
|
|
87
|
+
created: team.createdAt,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
// npm team destroy @scope:team → DELETE /-/team/:orgName/:teamName
|
|
91
|
+
async removeTeam(ctx, orgName, teamName) {
|
|
92
|
+
const { team } = await this.requireTeamWriteAccess(ctx, orgName, teamName);
|
|
93
|
+
await this.teamService.removeTeam(team.teamId);
|
|
94
|
+
return { ok: true };
|
|
95
|
+
}
|
|
96
|
+
// --- Team Members (npm uses "user") ---
|
|
97
|
+
// npm team ls @scope:team → GET /-/team/:orgName/:teamName/user
|
|
98
|
+
async listTeamMembers(ctx, orgName, teamName) {
|
|
99
|
+
await this.userRoleManager.requiredAuthorizedUser(ctx, 'read');
|
|
100
|
+
const org = await this.findOrg(orgName);
|
|
101
|
+
if (!org) {
|
|
102
|
+
throw new NotFoundError(`Org "${orgName}" not found`);
|
|
103
|
+
}
|
|
104
|
+
const team = await this.teamRepository.findTeam(org.orgId, teamName);
|
|
105
|
+
if (!team) {
|
|
106
|
+
throw new NotFoundError(`Team "${teamName}" not found`);
|
|
107
|
+
}
|
|
108
|
+
const members = await this.teamService.listMembers(team.teamId);
|
|
109
|
+
const users = await this.userRepository.findUsersByUserIds(members.map((m) => m.userId));
|
|
110
|
+
return users.map((u) => u.displayName);
|
|
111
|
+
}
|
|
112
|
+
// npm team add <user> @scope:team → PUT /-/team/:orgName/:teamName/user
|
|
113
|
+
async addTeamMember(ctx, orgName, teamName, body) {
|
|
114
|
+
const { team } = await this.requireTeamWriteAccess(ctx, orgName, teamName);
|
|
115
|
+
if (!body.user) {
|
|
116
|
+
throw new UnprocessableEntityError('user is required');
|
|
117
|
+
}
|
|
118
|
+
const targetUser = await this.userRepository.findUserByName(body.user);
|
|
119
|
+
if (!targetUser) {
|
|
120
|
+
throw new NotFoundError(`User "${body.user}" not found`);
|
|
121
|
+
}
|
|
122
|
+
await this.teamService.addMember(team.teamId, targetUser.userId);
|
|
123
|
+
return { ok: true };
|
|
124
|
+
}
|
|
125
|
+
// npm team rm <user> @scope:team → DELETE /-/team/:orgName/:teamName/user body:{user}
|
|
126
|
+
async removeTeamMember(ctx, orgName, teamName, body) {
|
|
127
|
+
const { team } = await this.requireTeamWriteAccess(ctx, orgName, teamName);
|
|
128
|
+
if (!body.user) {
|
|
129
|
+
throw new UnprocessableEntityError('user is required');
|
|
130
|
+
}
|
|
131
|
+
const targetUser = await this.userRepository.findUserByName(body.user);
|
|
132
|
+
if (!targetUser) {
|
|
133
|
+
throw new NotFoundError(`User "${body.user}" not found`);
|
|
134
|
+
}
|
|
135
|
+
await this.teamService.removeMember(team.teamId, targetUser.userId);
|
|
136
|
+
return { ok: true };
|
|
137
|
+
}
|
|
138
|
+
// --- Team Packages ---
|
|
139
|
+
// npm access ls-packages @scope:team → GET /-/team/:orgName/:teamName/package
|
|
140
|
+
async listTeamPackages(ctx, orgName, teamName) {
|
|
141
|
+
await this.userRoleManager.requiredAuthorizedUser(ctx, 'read');
|
|
142
|
+
const org = await this.findOrg(orgName);
|
|
143
|
+
if (!org) {
|
|
144
|
+
throw new NotFoundError(`Org "${orgName}" not found`);
|
|
145
|
+
}
|
|
146
|
+
const team = await this.teamRepository.findTeam(org.orgId, teamName);
|
|
147
|
+
if (!team) {
|
|
148
|
+
throw new NotFoundError(`Team "${teamName}" not found`);
|
|
149
|
+
}
|
|
150
|
+
const teamPackages = await this.teamService.listPackages(team.teamId);
|
|
151
|
+
const pkgs = await this.packageRepository.findPackagesByPackageIds(teamPackages.map((tp) => tp.packageId));
|
|
152
|
+
const result = {};
|
|
153
|
+
for (const pkg of pkgs) {
|
|
154
|
+
result[pkg.fullname] = 'read';
|
|
155
|
+
}
|
|
156
|
+
return result;
|
|
157
|
+
}
|
|
158
|
+
// npm access grant read-only @scope:team <pkg> → PUT /-/team/:orgName/:teamName/package
|
|
159
|
+
async grantPackageAccess(ctx, orgName, teamName, body) {
|
|
160
|
+
const { team } = await this.requireTeamWriteAccess(ctx, orgName, teamName);
|
|
161
|
+
if (!body.package) {
|
|
162
|
+
throw new UnprocessableEntityError('package is required');
|
|
163
|
+
}
|
|
164
|
+
const [scope, name] = getScopeAndName(body.package);
|
|
165
|
+
const pkg = await this.packageRepository.findPackage(scope, name);
|
|
166
|
+
if (!pkg) {
|
|
167
|
+
throw new NotFoundError(`Package "${body.package}" not found`);
|
|
168
|
+
}
|
|
169
|
+
await this.teamService.grantPackageAccess(team.teamId, pkg.packageId);
|
|
170
|
+
return { ok: true };
|
|
171
|
+
}
|
|
172
|
+
// npm access revoke @scope:team <pkg> → DELETE /-/team/:orgName/:teamName/package body:{package}
|
|
173
|
+
async revokePackageAccess(ctx, orgName, teamName, body) {
|
|
174
|
+
const { team } = await this.requireTeamWriteAccess(ctx, orgName, teamName);
|
|
175
|
+
if (!body.package) {
|
|
176
|
+
throw new UnprocessableEntityError('package is required');
|
|
177
|
+
}
|
|
178
|
+
const [scope, name] = getScopeAndName(body.package);
|
|
179
|
+
const pkg = await this.packageRepository.findPackage(scope, name);
|
|
180
|
+
if (!pkg) {
|
|
181
|
+
throw new NotFoundError(`Package "${body.package}" not found`);
|
|
182
|
+
}
|
|
183
|
+
await this.teamService.revokePackageAccess(team.teamId, pkg.packageId);
|
|
184
|
+
return { ok: true };
|
|
185
|
+
}
|
|
186
|
+
};
|
|
187
|
+
__decorate([
|
|
188
|
+
Inject(),
|
|
189
|
+
__metadata("design:type", Function)
|
|
190
|
+
], TeamController.prototype, "orgService", void 0);
|
|
191
|
+
__decorate([
|
|
192
|
+
Inject(),
|
|
193
|
+
__metadata("design:type", Function)
|
|
194
|
+
], TeamController.prototype, "teamService", void 0);
|
|
195
|
+
__decorate([
|
|
196
|
+
Inject(),
|
|
197
|
+
__metadata("design:type", Function)
|
|
198
|
+
], TeamController.prototype, "teamRepository", void 0);
|
|
199
|
+
__decorate([
|
|
200
|
+
HTTPMethod({
|
|
201
|
+
path: '/-/org/:orgName/team',
|
|
202
|
+
method: HTTPMethodEnum.PUT,
|
|
203
|
+
}),
|
|
204
|
+
__param(0, HTTPContext()),
|
|
205
|
+
__param(1, HTTPParam()),
|
|
206
|
+
__param(2, HTTPBody()),
|
|
207
|
+
__metadata("design:type", Function),
|
|
208
|
+
__metadata("design:paramtypes", [Context, String, Object]),
|
|
209
|
+
__metadata("design:returntype", Promise)
|
|
210
|
+
], TeamController.prototype, "createTeam", null);
|
|
211
|
+
__decorate([
|
|
212
|
+
HTTPMethod({
|
|
213
|
+
path: '/-/org/:orgName/team',
|
|
214
|
+
method: HTTPMethodEnum.GET,
|
|
215
|
+
}),
|
|
216
|
+
__param(0, HTTPContext()),
|
|
217
|
+
__param(1, HTTPParam()),
|
|
218
|
+
__metadata("design:type", Function),
|
|
219
|
+
__metadata("design:paramtypes", [Context, String]),
|
|
220
|
+
__metadata("design:returntype", Promise)
|
|
221
|
+
], TeamController.prototype, "listTeams", null);
|
|
222
|
+
__decorate([
|
|
223
|
+
HTTPMethod({
|
|
224
|
+
path: '/-/team/:orgName/:teamName',
|
|
225
|
+
method: HTTPMethodEnum.GET,
|
|
226
|
+
}),
|
|
227
|
+
__param(0, HTTPContext()),
|
|
228
|
+
__param(1, HTTPParam()),
|
|
229
|
+
__param(2, HTTPParam()),
|
|
230
|
+
__metadata("design:type", Function),
|
|
231
|
+
__metadata("design:paramtypes", [Context, String, String]),
|
|
232
|
+
__metadata("design:returntype", Promise)
|
|
233
|
+
], TeamController.prototype, "showTeam", null);
|
|
234
|
+
__decorate([
|
|
235
|
+
HTTPMethod({
|
|
236
|
+
path: '/-/team/:orgName/:teamName',
|
|
237
|
+
method: HTTPMethodEnum.DELETE,
|
|
238
|
+
}),
|
|
239
|
+
__param(0, HTTPContext()),
|
|
240
|
+
__param(1, HTTPParam()),
|
|
241
|
+
__param(2, HTTPParam()),
|
|
242
|
+
__metadata("design:type", Function),
|
|
243
|
+
__metadata("design:paramtypes", [Context, String, String]),
|
|
244
|
+
__metadata("design:returntype", Promise)
|
|
245
|
+
], TeamController.prototype, "removeTeam", null);
|
|
246
|
+
__decorate([
|
|
247
|
+
HTTPMethod({
|
|
248
|
+
path: '/-/team/:orgName/:teamName/user',
|
|
249
|
+
method: HTTPMethodEnum.GET,
|
|
250
|
+
}),
|
|
251
|
+
__param(0, HTTPContext()),
|
|
252
|
+
__param(1, HTTPParam()),
|
|
253
|
+
__param(2, HTTPParam()),
|
|
254
|
+
__metadata("design:type", Function),
|
|
255
|
+
__metadata("design:paramtypes", [Context, String, String]),
|
|
256
|
+
__metadata("design:returntype", Promise)
|
|
257
|
+
], TeamController.prototype, "listTeamMembers", null);
|
|
258
|
+
__decorate([
|
|
259
|
+
HTTPMethod({
|
|
260
|
+
path: '/-/team/:orgName/:teamName/user',
|
|
261
|
+
method: HTTPMethodEnum.PUT,
|
|
262
|
+
}),
|
|
263
|
+
__param(0, HTTPContext()),
|
|
264
|
+
__param(1, HTTPParam()),
|
|
265
|
+
__param(2, HTTPParam()),
|
|
266
|
+
__param(3, HTTPBody()),
|
|
267
|
+
__metadata("design:type", Function),
|
|
268
|
+
__metadata("design:paramtypes", [Context, String, String, Object]),
|
|
269
|
+
__metadata("design:returntype", Promise)
|
|
270
|
+
], TeamController.prototype, "addTeamMember", null);
|
|
271
|
+
__decorate([
|
|
272
|
+
HTTPMethod({
|
|
273
|
+
path: '/-/team/:orgName/:teamName/user',
|
|
274
|
+
method: HTTPMethodEnum.DELETE,
|
|
275
|
+
}),
|
|
276
|
+
__param(0, HTTPContext()),
|
|
277
|
+
__param(1, HTTPParam()),
|
|
278
|
+
__param(2, HTTPParam()),
|
|
279
|
+
__param(3, HTTPBody()),
|
|
280
|
+
__metadata("design:type", Function),
|
|
281
|
+
__metadata("design:paramtypes", [Context, String, String, Object]),
|
|
282
|
+
__metadata("design:returntype", Promise)
|
|
283
|
+
], TeamController.prototype, "removeTeamMember", null);
|
|
284
|
+
__decorate([
|
|
285
|
+
HTTPMethod({
|
|
286
|
+
path: '/-/team/:orgName/:teamName/package',
|
|
287
|
+
method: HTTPMethodEnum.GET,
|
|
288
|
+
}),
|
|
289
|
+
__param(0, HTTPContext()),
|
|
290
|
+
__param(1, HTTPParam()),
|
|
291
|
+
__param(2, HTTPParam()),
|
|
292
|
+
__metadata("design:type", Function),
|
|
293
|
+
__metadata("design:paramtypes", [Context, String, String]),
|
|
294
|
+
__metadata("design:returntype", Promise)
|
|
295
|
+
], TeamController.prototype, "listTeamPackages", null);
|
|
296
|
+
__decorate([
|
|
297
|
+
HTTPMethod({
|
|
298
|
+
path: '/-/team/:orgName/:teamName/package',
|
|
299
|
+
method: HTTPMethodEnum.PUT,
|
|
300
|
+
}),
|
|
301
|
+
__param(0, HTTPContext()),
|
|
302
|
+
__param(1, HTTPParam()),
|
|
303
|
+
__param(2, HTTPParam()),
|
|
304
|
+
__param(3, HTTPBody()),
|
|
305
|
+
__metadata("design:type", Function),
|
|
306
|
+
__metadata("design:paramtypes", [Context, String, String, Object]),
|
|
307
|
+
__metadata("design:returntype", Promise)
|
|
308
|
+
], TeamController.prototype, "grantPackageAccess", null);
|
|
309
|
+
__decorate([
|
|
310
|
+
HTTPMethod({
|
|
311
|
+
path: '/-/team/:orgName/:teamName/package',
|
|
312
|
+
method: HTTPMethodEnum.DELETE,
|
|
313
|
+
}),
|
|
314
|
+
__param(0, HTTPContext()),
|
|
315
|
+
__param(1, HTTPParam()),
|
|
316
|
+
__param(2, HTTPParam()),
|
|
317
|
+
__param(3, HTTPBody()),
|
|
318
|
+
__metadata("design:type", Function),
|
|
319
|
+
__metadata("design:paramtypes", [Context, String, String, Object]),
|
|
320
|
+
__metadata("design:returntype", Promise)
|
|
321
|
+
], TeamController.prototype, "revokePackageAccess", null);
|
|
322
|
+
TeamController = __decorate([
|
|
323
|
+
HTTPController()
|
|
324
|
+
], TeamController);
|
|
325
|
+
export { TeamController };
|
|
326
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGVhbUNvbnRyb2xsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9hcHAvcG9ydC9jb250cm9sbGVyL1RlYW1Db250cm9sbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBQ3BILE9BQU8sRUFBRSxhQUFhLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFckUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBSTlELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBR3RELElBQU0sY0FBYyxHQUFwQixNQUFNLGNBQWUsU0FBUSxrQkFBa0I7SUFVNUMsZUFBZSxDQUFDLE9BQWU7UUFDckMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLElBQUksT0FBTyxFQUFFLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUQsOERBQThEO0lBQ3RELEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBZTtRQUNuQyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUNsQyxPQUFPLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDaEUsQ0FBQztRQUNELE9BQU8sTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRU8sS0FBSyxDQUFDLHFCQUFxQixDQUFDLEdBQVksRUFBRSxPQUFlO1FBQy9ELE1BQU0sY0FBYyxHQUFHLE1BQU0sSUFBSSxDQUFDLGVBQWUs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
|
|
@@ -24,6 +24,8 @@ let DownloadPackageVersionTarController = class DownloadPackageVersionTarControl
|
|
|
24
24
|
ctx.status = 204;
|
|
25
25
|
}
|
|
26
26
|
async download(ctx, fullname, filenameWithVersion) {
|
|
27
|
+
const [scope, name] = getScopeAndName(fullname);
|
|
28
|
+
await this.userRoleManager.checkReadAccess(ctx, scope, name);
|
|
27
29
|
// tgz file storeKey: `/packages/${this.fullname}/${version}/${filename}`
|
|
28
30
|
const version = this.getAndCheckVersionFromFilename(ctx, fullname, filenameWithVersion);
|
|
29
31
|
const storeKey = `/packages/${fullname}/${version}/${filenameWithVersion}.tgz`;
|
|
@@ -189,4 +191,4 @@ DownloadPackageVersionTarController = __decorate([
|
|
|
189
191
|
HTTPController()
|
|
190
192
|
], DownloadPackageVersionTarController);
|
|
191
193
|
export { DownloadPackageVersionTarController };
|
|
192
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
194
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRG93bmxvYWRQYWNrYWdlVmVyc2lvblRhci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2FwcC9wb3J0L2NvbnRyb2xsZXIvcGFja2FnZS9Eb3dubG9hZFBhY2thZ2VWZXJzaW9uVGFyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFMUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLEtBQUssQ0FBQztBQUMxRyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRzNDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsZUFBZSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFLdEYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFHdkQsSUFBTSxtQ0FBbUMsR0FBekMsTUFBTSxtQ0FBb0MsU0FBUSxrQkFBa0I7SUFZekUsMENBQTBDO0lBTXBDLEFBQU4sS0FBSyxDQUFDLGtCQUFrQixDQUFnQixHQUFZO1FBQ2xELEdBQUcsQ0FBQyxHQUFHLENBQUMsNkJBQTZCLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDNUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyw4QkFBOEIsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNwRCxHQUFHLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQztJQUNuQixDQUFDO0lBT0ssQUFBTixLQUFLLENBQUMsUUFBUSxDQUFnQixHQUFZLEVBQWUsUUFBZ0IsRUFBZSxtQkFBMkI7UUFDakgsTUFBTSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsR0FBRyxlQUFlLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDaEQsTUFB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
|
|
@@ -5,6 +5,7 @@ export declare class ShowPackageController extends AbstractController {
|
|
|
5
5
|
private cacheService;
|
|
6
6
|
private proxyCacheService;
|
|
7
7
|
private bugVersionService;
|
|
8
|
+
private setCacheHeaders;
|
|
8
9
|
show(ctx: Context, fullname: string): Promise<Buffer<ArrayBufferLike> | undefined>;
|
|
9
10
|
private getFullManifestsBytes;
|
|
10
11
|
private getFullManifestsBytesWithJSONBuilder;
|
|
@@ -18,7 +18,17 @@ import { DIST_NAMES } from "../../../core/entity/Package.js";
|
|
|
18
18
|
import { BugVersionService } from "../../../core/service/BugVersionService.js";
|
|
19
19
|
import { AbstractController } from "../AbstractController.js";
|
|
20
20
|
let ShowPackageController = class ShowPackageController extends AbstractController {
|
|
21
|
+
setCacheHeaders(ctx, isTeamBound) {
|
|
22
|
+
if (isTeamBound) {
|
|
23
|
+
ctx.set('cache-control', 'private, no-store');
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
this.setCDNHeaders(ctx);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
21
29
|
async show(ctx, fullname) {
|
|
30
|
+
const [scope, name] = getScopeAndName(fullname);
|
|
31
|
+
const isTeamBound = await this.userRoleManager.checkReadAccess(ctx, scope, name);
|
|
22
32
|
const isSync = isSyncWorkerRequest(ctx);
|
|
23
33
|
const isFullManifests = ctx.accepts(['json', ABBREVIATED_META_TYPE]) !== ABBREVIATED_META_TYPE;
|
|
24
34
|
// handle cache
|
|
@@ -32,7 +42,7 @@ let ShowPackageController = class ShowPackageController extends AbstractControll
|
|
|
32
42
|
}
|
|
33
43
|
if (requestEtag === cacheEtag) {
|
|
34
44
|
// make sure CDN cache header set here
|
|
35
|
-
this.
|
|
45
|
+
this.setCacheHeaders(ctx, isTeamBound);
|
|
36
46
|
// match etag, set status 304
|
|
37
47
|
ctx.status = 304;
|
|
38
48
|
return;
|
|
@@ -42,7 +52,7 @@ let ShowPackageController = class ShowPackageController extends AbstractControll
|
|
|
42
52
|
if (cacheBytes && cacheBytes.length > 0) {
|
|
43
53
|
ctx.set('etag', `W/${cacheEtag}`);
|
|
44
54
|
ctx.type = 'json';
|
|
45
|
-
this.
|
|
55
|
+
this.setCacheHeaders(ctx, isTeamBound);
|
|
46
56
|
return cacheBytes;
|
|
47
57
|
}
|
|
48
58
|
}
|
|
@@ -60,7 +70,7 @@ let ShowPackageController = class ShowPackageController extends AbstractControll
|
|
|
60
70
|
throw this.createPackageNotFoundErrorWithRedirect(fullname, undefined, allowSync);
|
|
61
71
|
}
|
|
62
72
|
if (blockReason) {
|
|
63
|
-
this.
|
|
73
|
+
this.setCacheHeaders(ctx, isTeamBound);
|
|
64
74
|
throw this.createPackageBlockError(blockReason, fullname);
|
|
65
75
|
}
|
|
66
76
|
// only set cache with normal request
|
|
@@ -75,7 +85,7 @@ let ShowPackageController = class ShowPackageController extends AbstractControll
|
|
|
75
85
|
// should set weak etag avoid nginx remove it
|
|
76
86
|
ctx.set('etag', `W/${etag}`);
|
|
77
87
|
ctx.type = 'json';
|
|
78
|
-
this.
|
|
88
|
+
this.setCacheHeaders(ctx, isTeamBound);
|
|
79
89
|
return cacheBytes;
|
|
80
90
|
}
|
|
81
91
|
async getFullManifestsBytes(ctx, fullname, isFullManifests, isSync) {
|
|
@@ -153,4 +163,4 @@ ShowPackageController = __decorate([
|
|
|
153
163
|
HTTPController()
|
|
154
164
|
], ShowPackageController);
|
|
155
165
|
export { ShowPackageController };
|
|
156
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
166
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2hvd1BhY2thZ2VDb250cm9sbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vYXBwL3BvcnQvY29udHJvbGxlci9wYWNrYWdlL1Nob3dQYWNrYWdlQ29udHJvbGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBRTFHLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxRQUFRLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMvRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsZUFBZSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDMUcsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDbEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzdELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBSS9FLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBR3ZELElBQU0scUJBQXFCLEdBQTNCLE1BQU0scUJBQXNCLFNBQVEsa0JBQWtCO0lBVW5ELGVBQWUsQ0FBQyxHQUFZLEVBQUUsV0FBb0I7UUFDeEQsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNoQixHQUFHLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO1FBQ2hELENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMxQixDQUFDO0lBQ0gsQ0FBQztJQVFLLEFBQU4sS0FBSyxDQUFDLElBQUksQ0FBZ0IsR0FBWSxFQUFlLFFBQWdCO1FBQ25FLE1BQU0sQ0FBQyxLQUFLLEVBQUUsSUFBSSxD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
|
|
@@ -23,6 +23,7 @@ let ShowPackageVersionController = class ShowPackageVersionController extends Ab
|
|
|
23
23
|
// https://github.com/npm/registry/blob/master/docs/responses/package-metadata.md#full-metadata-format
|
|
24
24
|
ctx.tValidate(Spec, `${fullname}@${versionSpec}`);
|
|
25
25
|
const [scope, name] = getScopeAndName(fullname);
|
|
26
|
+
await this.userRoleManager.checkReadAccess(ctx, scope, name);
|
|
26
27
|
const isSync = isSyncWorkerRequest(ctx);
|
|
27
28
|
const isFullManifests = ctx.accepts(['json', ABBREVIATED_META_TYPE]) !== ABBREVIATED_META_TYPE;
|
|
28
29
|
const { blockReason, manifest, pkg } = await this.packageManagerService.showPackageVersionManifest(scope, name, versionSpec, isSync, isFullManifests);
|
|
@@ -72,4 +73,4 @@ ShowPackageVersionController = __decorate([
|
|
|
72
73
|
HTTPController()
|
|
73
74
|
], ShowPackageVersionController);
|
|
74
75
|
export { ShowPackageVersionController };
|
|
75
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
76
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2hvd1BhY2thZ2VWZXJzaW9uQ29udHJvbGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2FwcC9wb3J0L2NvbnRyb2xsZXIvcGFja2FnZS9TaG93UGFja2FnZVZlcnNpb25Db250cm9sbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFDMUcsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUUzQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsUUFBUSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDL0UsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGVBQWUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ2xFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUc3RCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFHdkQsSUFBTSw0QkFBNEIsR0FBbEMsTUFBTSw0QkFBNkIsU0FBUSxrQkFBa0I7SUFXNUQsQUFBTixLQUFLLENBQUMsSUFBSSxDQUFnQixHQUFZLEVBQWUsUUFBZ0IsRUFBZSxXQUFtQjtRQUNyRyxzR0FBc0c7UUFDdEcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxRQUFRLElBQUksV0FBVyxFQUFFLENBQUMsQ0FBQztRQUNsRCxNQUFNLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLGVBQWUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNoRCxNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDN0QsTUFBTSxNQUFNLEdBQUcsbUJBQW1CLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDeEMsTUFBTSxlQUFlLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxxQkFBcUIsQ0FBQyxDQUFDLEtBQUsscUJBQXFCLENBQUM7UUFFL0YsTUFBTSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMscUJBQXFCLENBQUMsMEJBQTBCLENBQ2hHLEtBQUssRUFDTCxJQUFJLEVBQ0osV0FBVyxFQUNYLE1BQU0sRUFDTixlQUFlLENBQ2hCLENBQUM7UUFDRixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRXpDLElBQUksV0FBVyxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN4QixNQUFNLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3pFLENBQUM7UUFFRCxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDdEIsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNyRCxNQUFNLFFBQVEsR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUM7Z0JBQ2hGLE9BQU8sTUFBTSxJQUFJLENBQUMsaUJBQWlCLENBQUMseUJBQXlCLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FBQztZQUNqRyxDQUFDO1lBRUQsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUNULE1BQU0sSUFBSSxDQUFDLHNDQUFzQyxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDcEYsQ0FBQztZQUNELElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDZCxNQUFNLElBQUksYUFBYSxDQUFDLEdBQUcsUUFBUSxJQUFJLFdBQVcsWUFBWSxDQUFDLENBQUM7WUFDbEUsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3hCLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7Q0FDRixDQUFBO0FBaERTO0lBRFAsTUFBTSxFQUFFOzsyRUFDNEM7QUFFN0M7SUFEUCxNQUFNLEVBQUU7O3VFQUNvQztBQU92QztJQUxMLFVBQVUsQ0FBQztRQUNWLDhCQUE4QjtRQUM5QixJQUFJLEVBQUUsY0FBYyxtQkFBbUIsZ0JBQWdCO1FBQ3ZELE1BQU0sRUFBRSxjQUFjLENBQUMsR0FBRztLQUMzQixDQUFDO0lBQ1UsV0FBQSxXQUFXLEVBQUUsQ0FBQTtJQUFnQixXQUFBLFNBQVMsRUFBRSxDQUFBO0lBQW9CLFdBQUEsU0FBUyxFQUFFLENBQUE7O3FDQUFwRCxPQUFPOzt3REFzQ3JDO0FBakRVLDRCQUE0QjtJQUR4QyxjQUFjLEVBQUU7R0FDSiw0QkFBNEIsQ0FrRHhDIn0=
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Org } from '../core/entity/Org.ts';
|
|
2
|
+
import { OrgMember } from '../core/entity/OrgMember.ts';
|
|
3
|
+
import { Team } from '../core/entity/Team.ts';
|
|
4
|
+
import { TeamMember } from '../core/entity/TeamMember.ts';
|
|
5
|
+
import { AbstractRepository } from './AbstractRepository.ts';
|
|
6
|
+
export declare class OrgRepository extends AbstractRepository {
|
|
7
|
+
private readonly Org;
|
|
8
|
+
private readonly OrgMember;
|
|
9
|
+
private readonly Team;
|
|
10
|
+
private readonly TeamMember;
|
|
11
|
+
private readonly TeamPackage;
|
|
12
|
+
findOrgByName(name: string): Promise<Org | null>;
|
|
13
|
+
findOrgByOrgId(orgId: string): Promise<Org | null>;
|
|
14
|
+
saveOrg(org: Org): Promise<void>;
|
|
15
|
+
removeOrg(orgId: string): Promise<void>;
|
|
16
|
+
findMember(orgId: string, userId: string): Promise<OrgMember | null>;
|
|
17
|
+
saveMember(member: OrgMember): Promise<void>;
|
|
18
|
+
removeMember(orgId: string, userId: string): Promise<void>;
|
|
19
|
+
listMembers(orgId: string): Promise<OrgMember[]>;
|
|
20
|
+
removeAllMembers(orgId: string): Promise<void>;
|
|
21
|
+
createOrgCascade(org: Org, developersTeam: Team, ownerMember: OrgMember, teamMember: TeamMember): Promise<void>;
|
|
22
|
+
removeOrgCascade(orgId: string): Promise<void>;
|
|
23
|
+
}
|