@package-broker/ui 2.0.0-rc.2 → 2.0.0-rc.4
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/.tsbuildinfo +1 -1
- package/dist/api-types.d.ts +8148 -2725
- package/dist/api-types.d.ts.map +1 -1
- package/dist/api.d.ts +1 -1
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +10 -0
- package/dist/api.js.map +1 -1
- package/dist/app-path.d.ts +2 -0
- package/dist/app-path.d.ts.map +1 -0
- package/dist/app-path.js +2 -0
- package/dist/app-path.js.map +1 -0
- package/dist/app.d.ts +10 -14
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +37 -22
- package/dist/app.js.map +1 -1
- package/dist/assets/access.62e9484517a0.js +1 -0
- package/dist/assets/app.45b156168495.css +2 -0
- package/dist/assets/app.c064670cdc0d.js +9 -0
- package/dist/assets/audit.b7c40b9dc998.js +1 -0
- package/dist/assets/chunk.28a4d8aab337.js +1 -0
- package/dist/assets/chunk.3fcd6998795a.js +1 -0
- package/dist/assets/chunk.51497edc7697.js +4 -0
- package/dist/assets/chunk.56d473a1587d.js +1 -0
- package/dist/assets/chunk.675b635d9462.js +1 -0
- package/dist/assets/chunk.6ea6bdcaa465.js +1 -0
- package/dist/assets/chunk.741aec8d1ff9.js +1 -0
- package/dist/assets/chunk.815f9a91c741.js +1 -0
- package/dist/assets/chunk.8442124f6802.js +1 -0
- package/dist/assets/chunk.965b76812604.js +2 -0
- package/dist/assets/chunk.a6d755a9789f.js +1 -0
- package/dist/assets/chunk.d18497920e4d.js +1 -0
- package/dist/assets/chunk.d813fefb410d.js +1 -0
- package/dist/assets/chunk.e3b0c44298fc.js +0 -0
- package/dist/assets/chunk.f54ea1378c8c.js +1 -0
- package/dist/assets/chunk.fd375c54b526.js +1 -0
- package/dist/assets/import.e7a1e5834631.js +1 -0
- package/dist/assets/index.html +9 -2
- package/dist/assets/manifest.json +108 -8
- package/dist/assets/notifications.19225fe12044.js +1 -0
- package/dist/assets/npm-login.e059678af13d.js +1 -0
- package/dist/assets/packages.ab5ab25b1c75.js +2 -0
- package/dist/assets/projects.927fe18c785c.js +1 -0
- package/dist/assets/setup.8e977608d413.js +1 -0
- package/dist/assets/setup.html +3 -3
- package/dist/assets/sources.ae50f239f80f.js +1 -0
- package/dist/assets/tokens.6b86d8d97e07.js +4 -0
- package/dist/auth.d.ts +26 -3
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +133 -19
- package/dist/auth.js.map +1 -1
- package/dist/components/product-footer-content.d.ts +21 -0
- package/dist/components/product-footer-content.d.ts.map +1 -0
- package/dist/components/product-footer-content.js +30 -0
- package/dist/components/product-footer-content.js.map +1 -0
- package/dist/components/product-footer.d.ts +3 -0
- package/dist/components/product-footer.d.ts.map +1 -0
- package/dist/components/product-footer.js +6 -0
- package/dist/components/product-footer.js.map +1 -0
- package/dist/components/ui/status-badge.d.ts +5 -0
- package/dist/components/ui/status-badge.d.ts.map +1 -1
- package/dist/components/ui/status-badge.js +10 -0
- package/dist/components/ui/status-badge.js.map +1 -1
- package/dist/manifest.d.ts +32 -0
- package/dist/manifest.d.ts.map +1 -1
- package/dist/manifest.js +41 -0
- package/dist/manifest.js.map +1 -1
- package/dist/package-limits.d.ts +3 -0
- package/dist/package-limits.d.ts.map +1 -0
- package/dist/package-limits.js +3 -0
- package/dist/package-limits.js.map +1 -0
- package/dist/page-hash.d.ts +1 -1
- package/dist/page-hash.d.ts.map +1 -1
- package/dist/page-hash.js.map +1 -1
- package/dist/page-loader.d.ts +5 -0
- package/dist/page-loader.d.ts.map +1 -0
- package/dist/page-loader.js +39 -0
- package/dist/page-loader.js.map +1 -0
- package/dist/pages/access/grant-form.d.ts +48 -0
- package/dist/pages/access/grant-form.d.ts.map +1 -0
- package/dist/pages/access/grant-form.js +153 -0
- package/dist/pages/access/grant-form.js.map +1 -0
- package/dist/pages/access/permission-descriptions.d.ts +2 -0
- package/dist/pages/access/permission-descriptions.d.ts.map +1 -0
- package/dist/pages/access/permission-descriptions.js +36 -0
- package/dist/pages/access/permission-descriptions.js.map +1 -0
- package/dist/pages/access/role-catalogue.d.ts +22 -0
- package/dist/pages/access/role-catalogue.d.ts.map +1 -0
- package/dist/pages/access/role-catalogue.js +40 -0
- package/dist/pages/access/role-catalogue.js.map +1 -0
- package/dist/pages/access.d.ts +6 -0
- package/dist/pages/access.d.ts.map +1 -1
- package/dist/pages/access.js +66 -31
- package/dist/pages/access.js.map +1 -1
- package/dist/pages/audit.d.ts.map +1 -1
- package/dist/pages/notification-actions.d.ts +41 -0
- package/dist/pages/notification-actions.d.ts.map +1 -0
- package/dist/pages/notification-actions.js +187 -0
- package/dist/pages/notification-actions.js.map +1 -0
- package/dist/pages/notification-draft.d.ts +13 -0
- package/dist/pages/notification-draft.d.ts.map +1 -0
- package/dist/pages/notification-draft.js +75 -0
- package/dist/pages/notification-draft.js.map +1 -0
- package/dist/pages/notification-form.d.ts +35 -0
- package/dist/pages/notification-form.d.ts.map +1 -0
- package/dist/pages/notification-form.js +167 -0
- package/dist/pages/notification-form.js.map +1 -0
- package/dist/pages/notifications-controller.d.ts +41 -0
- package/dist/pages/notifications-controller.d.ts.map +1 -0
- package/dist/pages/notifications-controller.js +184 -0
- package/dist/pages/notifications-controller.js.map +1 -0
- package/dist/pages/notifications.d.ts +10 -0
- package/dist/pages/notifications.d.ts.map +1 -0
- package/dist/pages/notifications.js +301 -0
- package/dist/pages/notifications.js.map +1 -0
- package/dist/pages/npm-login.d.ts +2 -0
- package/dist/pages/npm-login.d.ts.map +1 -0
- package/dist/pages/npm-login.js +62 -0
- package/dist/pages/npm-login.js.map +1 -0
- package/dist/pages/packages/npm-workflow.d.ts +31 -0
- package/dist/pages/packages/npm-workflow.d.ts.map +1 -0
- package/dist/pages/packages/npm-workflow.js +381 -0
- package/dist/pages/packages/npm-workflow.js.map +1 -0
- package/dist/pages/packages/package-detail.d.ts +9 -0
- package/dist/pages/packages/package-detail.d.ts.map +1 -0
- package/dist/pages/packages/package-detail.js +242 -0
- package/dist/pages/packages/package-detail.js.map +1 -0
- package/dist/pages/packages/source-actions.d.ts +49 -0
- package/dist/pages/packages/source-actions.d.ts.map +1 -0
- package/dist/pages/packages/source-actions.js +319 -0
- package/dist/pages/packages/source-actions.js.map +1 -0
- package/dist/pages/packages.d.ts +15 -4
- package/dist/pages/packages.d.ts.map +1 -1
- package/dist/pages/packages.js +138 -20
- package/dist/pages/packages.js.map +1 -1
- package/dist/pages/projects/project-form-model.d.ts +25 -0
- package/dist/pages/projects/project-form-model.d.ts.map +1 -0
- package/dist/pages/projects/project-form-model.js +69 -0
- package/dist/pages/projects/project-form-model.js.map +1 -0
- package/dist/pages/projects/project-form.d.ts +14 -0
- package/dist/pages/projects/project-form.d.ts.map +1 -0
- package/dist/pages/projects/project-form.js +91 -0
- package/dist/pages/projects/project-form.js.map +1 -0
- package/dist/pages/projects.d.ts +3 -2
- package/dist/pages/projects.d.ts.map +1 -1
- package/dist/pages/projects.js +29 -38
- package/dist/pages/projects.js.map +1 -1
- package/dist/pages/sources/source-form.d.ts +5 -2
- package/dist/pages/sources/source-form.d.ts.map +1 -1
- package/dist/pages/sources/source-form.js +39 -27
- package/dist/pages/sources/source-form.js.map +1 -1
- package/dist/pages/sources/sync-copy.d.ts +5 -0
- package/dist/pages/sources/sync-copy.d.ts.map +1 -0
- package/dist/pages/sources/sync-copy.js +11 -0
- package/dist/pages/sources/sync-copy.js.map +1 -0
- package/dist/pages/sources.d.ts +11 -3
- package/dist/pages/sources.d.ts.map +1 -1
- package/dist/pages/sources.js +103 -25
- package/dist/pages/sources.js.map +1 -1
- package/dist/pages/tokens/client-config.d.ts +3 -0
- package/dist/pages/tokens/client-config.d.ts.map +1 -1
- package/dist/pages/tokens/client-config.js +12 -2
- package/dist/pages/tokens/client-config.js.map +1 -1
- package/dist/pages/tokens/issue-token-form.d.ts +27 -0
- package/dist/pages/tokens/issue-token-form.d.ts.map +1 -0
- package/dist/pages/tokens/issue-token-form.js +270 -0
- package/dist/pages/tokens/issue-token-form.js.map +1 -0
- package/dist/pages/tokens/principal-form.d.ts +8 -0
- package/dist/pages/tokens/principal-form.d.ts.map +1 -0
- package/dist/pages/tokens/principal-form.js +155 -0
- package/dist/pages/tokens/principal-form.js.map +1 -0
- package/dist/pages/tokens/trusted-publishers-controller.d.ts +42 -0
- package/dist/pages/tokens/trusted-publishers-controller.d.ts.map +1 -0
- package/dist/pages/tokens/trusted-publishers-controller.js +202 -0
- package/dist/pages/tokens/trusted-publishers-controller.js.map +1 -0
- package/dist/pages/tokens/trusted-publishers.d.ts +6 -0
- package/dist/pages/tokens/trusted-publishers.d.ts.map +1 -0
- package/dist/pages/tokens/trusted-publishers.js +116 -0
- package/dist/pages/tokens/trusted-publishers.js.map +1 -0
- package/dist/pages/tokens.d.ts +100 -6
- package/dist/pages/tokens.d.ts.map +1 -1
- package/dist/pages/tokens.js +324 -86
- package/dist/pages/tokens.js.map +1 -1
- package/dist/setup.d.ts +3 -2
- package/dist/setup.d.ts.map +1 -1
- package/dist/setup.js +70 -10
- package/dist/setup.js.map +1 -1
- package/dist/token-pending.d.ts +4 -0
- package/dist/token-pending.d.ts.map +1 -0
- package/dist/token-pending.js +12 -0
- package/dist/token-pending.js.map +1 -0
- package/package.json +3 -3
- package/dist/assets/app.b2abf3c46f6e.js +0 -15
- package/dist/assets/app.e8cea8b32d3a.css +0 -2
- package/dist/assets/setup.98343039898f.js +0 -1
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { type Controller, type Draft, type IssueProject, type State } from '../tokens.js';
|
|
2
|
+
export declare const createTokenLabel = "Create token";
|
|
3
|
+
export declare const accessLabels: {
|
|
4
|
+
read: string;
|
|
5
|
+
write: string;
|
|
6
|
+
full: string;
|
|
7
|
+
};
|
|
8
|
+
export declare function conferredPermissions(permissions: string[], scope: Draft['scope'], organizationBound: boolean): string[];
|
|
9
|
+
export declare function organizationScopeReason(scope: Draft['scope'], principalPermissions: string[] | undefined, organizationPermissions: string[]): "Choose a service identity first." | "This service identity has no permissions." | "The service identity needs the required package permission." | "This service identity has no token-eligible permissions at this access level." | "You cannot confer this service identity’s permissions at this access level." | null;
|
|
10
|
+
export declare function scopeReason(scope: Draft['scope'], projects: IssueProject[], personal: boolean, principalPermissions?: string[]): "Choose a service identity first." | "The service identity needs the required package permission." | "You cannot confer this service identity’s permissions at this access level." | "Choose a project first." | "Loading project access…" | "Project policy or permissions could not be loaded. Try again." | "This access level is not available for every selected project. Choose Install and download or change the selected projects." | "Creating this access level requires package publishing permission on every selected project, even when you only need audit access." | "Your access does not include the required package permission for every selected project." | "You need permission to create tokens for this project." | "This service identity has no permissions. Choose another identity or ask an organization administrator to grant it access." | null;
|
|
11
|
+
export declare function selectionError(ids: string[]): "Choose between 1 and 200 projects." | null;
|
|
12
|
+
export declare function usablePrincipals(state: State, projectId: string | null | undefined): {
|
|
13
|
+
createdByUserId: string;
|
|
14
|
+
id: string;
|
|
15
|
+
name: string;
|
|
16
|
+
permissions: string[];
|
|
17
|
+
projectId: string | null;
|
|
18
|
+
revision: number;
|
|
19
|
+
status: "active" | "suspended";
|
|
20
|
+
}[];
|
|
21
|
+
export declare function IssueTokenForm({ state: s, controller: c, initialAudience, defaultOpen, }: {
|
|
22
|
+
state: State;
|
|
23
|
+
controller: Controller;
|
|
24
|
+
initialAudience?: 'ci' | 'personal';
|
|
25
|
+
defaultOpen?: boolean;
|
|
26
|
+
}): import("react").JSX.Element;
|
|
27
|
+
//# sourceMappingURL=issue-token-form.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"issue-token-form.d.ts","sourceRoot":"","sources":["../../../src/pages/tokens/issue-token-form.tsx"],"names":[],"mappings":"AAMA,OAAO,EAGL,KAAK,UAAU,EACf,KAAK,KAAK,EACV,KAAK,YAAY,EACjB,KAAK,KAAK,EACX,MAAM,cAAc,CAAC;AAGtB,eAAO,MAAM,gBAAgB,iBAAiB,CAAC;AAE/C,eAAO,MAAM,YAAY;;;;CAIxB,CAAC;AAqBF,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,MAAM,EAAE,EACrB,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,EACrB,iBAAiB,EAAE,OAAO,YAa3B;AACD,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,EACrB,oBAAoB,EAAE,MAAM,EAAE,GAAG,SAAS,EAC1C,uBAAuB,EAAE,MAAM,EAAE,6TAalC;AACD,wBAAgB,WAAW,CACzB,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,EACrB,QAAQ,EAAE,YAAY,EAAE,EACxB,QAAQ,EAAE,OAAO,EACjB,oBAAoB,CAAC,EAAE,MAAM,EAAE,q1BA8BhC;AAoBD,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,+CAE3C;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;;;;;;;;IAElF;AAED,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EAAE,CAAC,EACR,UAAU,EAAE,CAAC,EACb,eAAsB,EACtB,WAAmB,GACpB,EAAE;IACD,KAAK,EAAE,KAAK,CAAC;IACb,UAAU,EAAE,UAAU,CAAC;IACvB,eAAe,CAAC,EAAE,IAAI,GAAG,UAAU,CAAC;IACpC,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,+BA4dA"}
|
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useState } from 'react';
|
|
3
|
+
import { permissionCopy, tokenEligiblePermissions } from './principal-form.js';
|
|
4
|
+
import { Button } from '../../components/ui/button.js';
|
|
5
|
+
import { Input } from '../../components/ui/input.js';
|
|
6
|
+
import { Label } from '../../components/ui/label.js';
|
|
7
|
+
import { Select } from '../../components/ui/select.js';
|
|
8
|
+
import { dayLabel, lifetimeChoices, } from '../tokens.js';
|
|
9
|
+
// eslint-disable-next-line no-restricted-syntax -- Button copy, not SQL.
|
|
10
|
+
export const createTokenLabel = 'Create token';
|
|
11
|
+
export const accessLabels = {
|
|
12
|
+
read: 'Install and download',
|
|
13
|
+
write: 'Include publish permission',
|
|
14
|
+
full: 'Include grants, sources and audit access',
|
|
15
|
+
};
|
|
16
|
+
const permissionLabels = {
|
|
17
|
+
'project:read': 'Read project details',
|
|
18
|
+
'project:packages:read': 'Install and download packages',
|
|
19
|
+
'project:packages:write': 'Include publish permission',
|
|
20
|
+
'project:grants:read': 'Read project grants',
|
|
21
|
+
'project:sources:read': 'Read project sources',
|
|
22
|
+
'project:audit:read': 'Read project audit records',
|
|
23
|
+
};
|
|
24
|
+
const descriptions = {
|
|
25
|
+
read: 'Read project details and download packages.',
|
|
26
|
+
write: 'Also include the package publishing permission. Publish npm packages to an enabled hosted source that claims the package name.',
|
|
27
|
+
full: 'Also allow reading project grants, sources and audit records, plus the publish permission.',
|
|
28
|
+
};
|
|
29
|
+
const levelAnchor = { read: 'project:packages:read', write: 'project:packages:write', full: null };
|
|
30
|
+
const levelMask = {
|
|
31
|
+
read: ['project:read', 'project:packages:read'],
|
|
32
|
+
write: ['project:read', 'project:packages:read', 'project:packages:write'],
|
|
33
|
+
full: null,
|
|
34
|
+
};
|
|
35
|
+
export function conferredPermissions(permissions, scope, organizationBound) {
|
|
36
|
+
const mask = levelMask[scope];
|
|
37
|
+
return [
|
|
38
|
+
...new Set(permissions.filter((name) => tokenEligiblePermissions.includes(name) &&
|
|
39
|
+
(mask === null || mask.includes(name)) &&
|
|
40
|
+
(organizationBound || name.startsWith('project:')))),
|
|
41
|
+
].sort();
|
|
42
|
+
}
|
|
43
|
+
export function organizationScopeReason(scope, principalPermissions, organizationPermissions) {
|
|
44
|
+
if (!principalPermissions)
|
|
45
|
+
return 'Choose a service identity first.';
|
|
46
|
+
if (!principalPermissions.length)
|
|
47
|
+
return 'This service identity has no permissions.';
|
|
48
|
+
const covers = conferredPermissions(principalPermissions, scope, true);
|
|
49
|
+
const anchor = levelAnchor[scope];
|
|
50
|
+
if (anchor !== null && !covers.includes(anchor))
|
|
51
|
+
return 'The service identity needs the required package permission.';
|
|
52
|
+
if (!covers.length)
|
|
53
|
+
return 'This service identity has no token-eligible permissions at this access level.';
|
|
54
|
+
if (covers.some((p) => !organizationPermissions.includes(p)))
|
|
55
|
+
return 'You cannot confer this service identity’s permissions at this access level.';
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
export function scopeReason(scope, projects, personal, principalPermissions) {
|
|
59
|
+
if (!projects.length)
|
|
60
|
+
return 'Choose a project first.';
|
|
61
|
+
const rank = { read: 0, write: 1, full: 2 };
|
|
62
|
+
for (const project of projects) {
|
|
63
|
+
if (project.policyState === 'idle' || project.policyState === 'loading')
|
|
64
|
+
return 'Loading project access…';
|
|
65
|
+
if (project.cap === null || project.permissions === null)
|
|
66
|
+
return 'Project policy or permissions could not be loaded. Try again.';
|
|
67
|
+
if (rank[scope] > rank[project.cap])
|
|
68
|
+
return 'This access level is not available for every selected project. Choose Install and download or change the selected projects.';
|
|
69
|
+
const required = scope === 'read' ? 'project:packages:read' : 'project:packages:write';
|
|
70
|
+
if (personal && !project.permissions.includes(required))
|
|
71
|
+
return scope === 'full'
|
|
72
|
+
? 'Creating this access level requires package publishing permission on every selected project, even when you only need audit access.'
|
|
73
|
+
: 'Your access does not include the required package permission for every selected project.';
|
|
74
|
+
if (!personal) {
|
|
75
|
+
if (!project.permissions.includes('project:tokens:create'))
|
|
76
|
+
return 'You need permission to create tokens for this project.';
|
|
77
|
+
if (!principalPermissions)
|
|
78
|
+
return 'Choose a service identity first.';
|
|
79
|
+
if (!principalPermissions.length)
|
|
80
|
+
return 'This service identity has no permissions. Choose another identity or ask an organization administrator to grant it access.';
|
|
81
|
+
const covers = conferredPermissions(principalPermissions, scope, false);
|
|
82
|
+
if (scope !== 'full' && !covers.includes(levelAnchor[scope]))
|
|
83
|
+
return 'The service identity needs the required package permission.';
|
|
84
|
+
if (!covers.length || covers.some((p) => !project.permissions.includes(p)))
|
|
85
|
+
return 'You cannot confer this service identity’s permissions at this access level.';
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
const empty = () => ({
|
|
91
|
+
name: '',
|
|
92
|
+
scope: 'read',
|
|
93
|
+
days: '',
|
|
94
|
+
project: '',
|
|
95
|
+
ids: [],
|
|
96
|
+
mode: 'selected',
|
|
97
|
+
principal: '',
|
|
98
|
+
});
|
|
99
|
+
export function selectionError(ids) {
|
|
100
|
+
return ids.length < 1 || ids.length > 200 ? 'Choose between 1 and 200 projects.' : null;
|
|
101
|
+
}
|
|
102
|
+
export function usablePrincipals(state, projectId) {
|
|
103
|
+
return state.principals.filter((p) => p.status === 'active' && p.projectId === projectId);
|
|
104
|
+
}
|
|
105
|
+
export function IssueTokenForm({ state: s, controller: c, initialAudience = 'ci', defaultOpen = false, }) {
|
|
106
|
+
const restored = s.issuanceDraft;
|
|
107
|
+
const [open, setOpen] = useState(defaultOpen || restored !== null);
|
|
108
|
+
const [personal, setPersonal] = useState(restored ? restored.target === 'personal' : initialAudience === 'personal');
|
|
109
|
+
const fromRestored = () => restored
|
|
110
|
+
? {
|
|
111
|
+
name: restored.draft.name,
|
|
112
|
+
scope: restored.draft.scope,
|
|
113
|
+
days: String(restored.draft.lifetimeDays),
|
|
114
|
+
project: restored.target === 'organization' ? '__organization' : (restored.project ?? ''),
|
|
115
|
+
ids: restored.draft.projectIds,
|
|
116
|
+
mode: restored.draft.projectMode,
|
|
117
|
+
principal: restored.draft.servicePrincipalId,
|
|
118
|
+
}
|
|
119
|
+
: empty();
|
|
120
|
+
const [ci, setCi] = useState(() => restored && restored.target !== 'personal'
|
|
121
|
+
? fromRestored()
|
|
122
|
+
: { ...empty(), project: s.issuanceProject ?? '' });
|
|
123
|
+
useEffect(() => {
|
|
124
|
+
if (s.issuanceProject !== null)
|
|
125
|
+
setCi((old) => ({
|
|
126
|
+
...old,
|
|
127
|
+
project: s.issuanceProject,
|
|
128
|
+
principal: s.issuancePrincipal ?? old.principal,
|
|
129
|
+
scope: s.issuanceProject === '__organization' ? 'full' : old.scope,
|
|
130
|
+
}));
|
|
131
|
+
if (s.issuancePrincipal) {
|
|
132
|
+
setOpen(true);
|
|
133
|
+
setPersonal(false);
|
|
134
|
+
}
|
|
135
|
+
}, [s.issuanceProject, s.issuancePrincipal, s.issuanceNonce]);
|
|
136
|
+
const [me, setMe] = useState(() => restored?.target === 'personal' ? fromRestored() : empty());
|
|
137
|
+
useEffect(() => {
|
|
138
|
+
if (!restored)
|
|
139
|
+
return;
|
|
140
|
+
const value = {
|
|
141
|
+
name: restored.draft.name,
|
|
142
|
+
scope: restored.draft.scope,
|
|
143
|
+
days: String(restored.draft.lifetimeDays),
|
|
144
|
+
project: restored.target === 'organization' ? '__organization' : (restored.project ?? ''),
|
|
145
|
+
ids: restored.draft.projectIds,
|
|
146
|
+
mode: restored.draft.projectMode,
|
|
147
|
+
principal: restored.draft.servicePrincipalId,
|
|
148
|
+
};
|
|
149
|
+
(restored.target === 'personal' ? setMe : setCi)(value);
|
|
150
|
+
setPersonal(restored.target === 'personal');
|
|
151
|
+
setOpen(true);
|
|
152
|
+
}, [restored]);
|
|
153
|
+
const [search, setSearch] = useState('');
|
|
154
|
+
const [ciError, setCiError] = useState(null);
|
|
155
|
+
const [meError, setMeError] = useState(null);
|
|
156
|
+
const error = personal ? meError : ciError;
|
|
157
|
+
const setError = personal ? setMeError : setCiError;
|
|
158
|
+
const d = personal ? me : ci;
|
|
159
|
+
const update = (value) => (personal ? setMe : setCi)((old) => ({ ...old, ...value }));
|
|
160
|
+
const projects = personal
|
|
161
|
+
? s.projects.filter((p) => d.mode === 'all'
|
|
162
|
+
? p.permissions === null ||
|
|
163
|
+
p.permissions.some((x) => x === 'project:packages:read' || x === 'project:packages:write')
|
|
164
|
+
: d.ids.includes(p.id))
|
|
165
|
+
: s.projects.filter((p) => p.slug === d.project);
|
|
166
|
+
const organization = !personal && d.project === '__organization';
|
|
167
|
+
const principals = usablePrincipals(s, organization ? null : projects[0]?.id);
|
|
168
|
+
const principal = principals.find((p) => p.id === d.principal);
|
|
169
|
+
const policy = s.lifetime?.[personal ? 'personal' : 'service'];
|
|
170
|
+
const days = d.days || String(policy?.defaultDays ?? '');
|
|
171
|
+
const all = personal && d.mode === 'all';
|
|
172
|
+
const organizationReason = (scope) => !principal
|
|
173
|
+
? 'Choose a service identity first.'
|
|
174
|
+
: organizationScopeReason(scope, principal.permissions, s.organizationPermissions);
|
|
175
|
+
const reason = all
|
|
176
|
+
? null
|
|
177
|
+
: organization
|
|
178
|
+
? organizationReason(d.scope)
|
|
179
|
+
: scopeReason(d.scope, projects, personal, principal?.permissions);
|
|
180
|
+
const policyIds = projects.map((p) => p.id).join(',');
|
|
181
|
+
useEffect(() => {
|
|
182
|
+
if (open && !all)
|
|
183
|
+
c.loadProjectPolicies(policyIds ? policyIds.split(',') : []);
|
|
184
|
+
}, [c, open, all, policyIds, s.projects]);
|
|
185
|
+
function validate() {
|
|
186
|
+
if (!d.name.trim())
|
|
187
|
+
return { message: 'Enter a token name.', target: 'issue-name' };
|
|
188
|
+
if (s.projectsError && !all)
|
|
189
|
+
return {
|
|
190
|
+
message: 'Projects could not be loaded. Try again.',
|
|
191
|
+
target: personal ? 'project-search' : 'issue-project',
|
|
192
|
+
};
|
|
193
|
+
if (personal && d.mode === 'selected' && selectionError(d.ids))
|
|
194
|
+
return { message: selectionError(d.ids), target: 'project-search' };
|
|
195
|
+
if (!personal && !d.project)
|
|
196
|
+
return { message: 'Choose a project first.', target: 'issue-project' };
|
|
197
|
+
if (!personal && !principal)
|
|
198
|
+
return { message: 'Choose a service identity first.', target: 'issue-principal' };
|
|
199
|
+
if (reason)
|
|
200
|
+
return { message: reason, target: 'issue-access' };
|
|
201
|
+
if (!policy || !lifetimeChoices(policy).includes(Number(days)))
|
|
202
|
+
return { message: 'Choose an available lifetime.', target: 'issue-lifetime' };
|
|
203
|
+
return null;
|
|
204
|
+
}
|
|
205
|
+
function close() {
|
|
206
|
+
setOpen(false);
|
|
207
|
+
document.getElementById('new-token')?.focus();
|
|
208
|
+
}
|
|
209
|
+
return (_jsxs(_Fragment, { children: [_jsx(Button, { className: "min-h-11", id: "new-token", type: "button", onClick: () => setOpen(true), children: "New token" }), !open ? null : (_jsxs("form", { noValidate: true, className: "grid max-w-5xl items-start gap-x-6 gap-y-4 lg:grid-cols-2", onSubmit: (event) => {
|
|
210
|
+
event.preventDefault();
|
|
211
|
+
const invalid = validate();
|
|
212
|
+
if (invalid) {
|
|
213
|
+
setError(invalid);
|
|
214
|
+
requestAnimationFrame(() => document.getElementById('token-errors')?.focus());
|
|
215
|
+
return;
|
|
216
|
+
}
|
|
217
|
+
setError(null);
|
|
218
|
+
void c.issueFor(personal ? 'personal' : organization ? 'organization' : 'project', personal || organization ? null : d.project, {
|
|
219
|
+
name: d.name,
|
|
220
|
+
scope: d.scope,
|
|
221
|
+
lifetimeDays: Number(days),
|
|
222
|
+
servicePrincipalId: personal ? '' : d.principal,
|
|
223
|
+
projectMode: personal ? d.mode : 'selected',
|
|
224
|
+
projectIds: personal && d.mode === 'selected' ? d.ids : [],
|
|
225
|
+
});
|
|
226
|
+
}, children: [_jsx("h2", { className: "lg:col-span-2", children: "New token" }), _jsxs("fieldset", { className: "lg:col-span-2", children: [_jsx("legend", { children: "Who is this token for?" }), _jsxs("label", { className: "flex min-h-11 items-center gap-2", children: [_jsx("input", { type: "radio", name: "audience", checked: !personal, onChange: () => {
|
|
227
|
+
setPersonal(false);
|
|
228
|
+
} }), "A CI pipeline or service"] }), _jsx("p", { children: "Keeps working when the person who created it leaves." }), _jsxs("label", { className: "flex min-h-11 items-center gap-2", children: [_jsx("input", { type: "radio", name: "audience", checked: personal, onChange: () => {
|
|
229
|
+
setPersonal(true);
|
|
230
|
+
} }), "Me"] }), _jsx("p", { children: "Uses your access. Stops working if you leave or your account is suspended." })] }), error && (_jsx("div", { id: "token-errors", role: "alert", tabIndex: -1, className: "lg:col-span-2", children: _jsx("button", { type: "button", className: "min-h-11 underline", onClick: () => document.getElementById(error.target)?.focus(), children: error.message }) })), _jsxs("div", { children: [_jsx(Label, { htmlFor: "issue-name", children: "Token name" }), _jsx(Input, { className: "min-h-11", id: "issue-name", value: d.name, "aria-invalid": !!error && !d.name.trim(), "aria-describedby": error ? 'token-errors' : undefined, placeholder: personal ? 'e.g. My laptop' : 'e.g. Storefront CI', onChange: (e) => update({ name: e.target.value }) })] }), personal ? (_jsxs("fieldset", { children: [_jsx("legend", { children: "Which projects?" }), ['selected', 'all'].map((mode) => (_jsxs("label", { className: "flex min-h-11 items-center gap-2", children: [_jsx("input", { type: "radio", name: "projects-mode", checked: d.mode === mode, onChange: () => update({ mode }) }), mode === 'selected' ? 'Choose projects' : 'All projects I can access'] }, mode))), d.mode === 'all' ? (_jsx("p", { children: "Includes projects you can access now and projects you gain access to later." })) : (_jsxs(_Fragment, { children: [_jsx(Label, { htmlFor: "project-search", children: "Search projects" }), _jsx(Input, { className: "min-h-11", id: "project-search", value: search, onChange: (e) => setSearch(e.target.value) }), _jsx("p", { id: "project-help", children: "Choose up to 200 projects. This does not give you access you do not already have." }), _jsxs("p", { children: [d.ids.length, " ", d.ids.length === 1 ? 'project selected' : 'projects selected'] }), _jsx("div", { className: "max-h-60 overflow-y-auto", children: s.projects
|
|
231
|
+
.filter((p) => p.name.toLowerCase().includes(search.toLowerCase()))
|
|
232
|
+
.map((p) => (_jsxs("label", { className: "flex min-h-11 items-center gap-2", children: [_jsx("input", { type: "checkbox", checked: d.ids.includes(p.id), disabled: !d.ids.includes(p.id) && d.ids.length >= 200, "aria-describedby": "project-help", onChange: (e) => update({
|
|
233
|
+
ids: e.target.checked
|
|
234
|
+
? [...d.ids, p.id]
|
|
235
|
+
: d.ids.filter((id) => id !== p.id),
|
|
236
|
+
}) }), p.name] }, p.id))) })] }))] })) : (_jsxs("div", { children: [_jsx(Label, { htmlFor: "issue-project", children: "Project" }), _jsxs(Select, { className: "min-h-11", "aria-invalid": !!error && !d.project, "aria-describedby": error ? 'token-errors' : undefined, id: "issue-project", value: d.project, onChange: (e) => update({
|
|
237
|
+
project: e.target.value,
|
|
238
|
+
principal: '',
|
|
239
|
+
scope: e.target.value === '__organization' ? 'full' : 'read',
|
|
240
|
+
}), children: [_jsx("option", { value: "", children: "Choose a project" }), s.projects.map((p) => (_jsx("option", { value: p.slug, children: p.name }, p.id))), s.organizationPermissions.includes('org:settings:write') &&
|
|
241
|
+
s.organizationPermissions.includes('org:service-principals:write') && (_jsx("option", { value: "__organization", children: "Organization-wide (advanced)" }))] }), d.project === '' &&
|
|
242
|
+
d.principal !== '' &&
|
|
243
|
+
s.principals.some((p) => p.id === d.principal && p.projectId !== null) && (_jsx("p", { children: "Project name unavailable. You may not have access to this service identity\u2019s project." }))] })), s.projectsError && (_jsxs("p", { className: "lg:col-span-2", children: ["Projects could not be loaded.", ' ', _jsx(Button, { type: "button", onClick: () => void c.identity(), children: "Try again" })] })), _jsxs("fieldset", { id: "issue-access", tabIndex: -1, className: "lg:col-span-2", "aria-describedby": "access-help", children: [_jsx("legend", { children: "What can this token do?" }), ['read', 'write', 'full'].map((scope) => {
|
|
244
|
+
const why = all
|
|
245
|
+
? null
|
|
246
|
+
: organization
|
|
247
|
+
? organizationReason(scope)
|
|
248
|
+
: scopeReason(scope, projects, personal, principal?.permissions);
|
|
249
|
+
return (_jsxs("div", { children: [_jsxs("label", { className: "flex min-h-11 items-center gap-2", children: [_jsx("input", { type: "radio", name: "access", checked: d.scope === scope, disabled: why !== null, "aria-invalid": error?.target === 'issue-access', onChange: () => update({ scope }), "aria-describedby": `help-${scope}` }), accessLabels[scope]] }), _jsxs("p", { id: `help-${scope}`, children: [descriptions[scope], " ", why] })] }, scope));
|
|
250
|
+
}), projects
|
|
251
|
+
.filter((p) => !all || p.policyState === 'error')
|
|
252
|
+
.map((p) => (_jsx("p", { children: p.cap && !all
|
|
253
|
+
? `${p.name} allows ${{ read: 'install and download only', write: 'install, download and publish permission', full: 'all token-eligible project permissions' }[p.cap]}.`
|
|
254
|
+
: `${p.name}: ${p.policyState === 'loading' ? 'Loading project access…' : p.policyState === 'error' ? 'Project access could not be loaded.' : 'Project access has not been loaded.'}` }, p.id))), projects.some((p) => p.policyState === 'error') && (_jsx(Button, { type: "button", onClick: () => c.loadProjectPolicies(projects.filter((p) => p.policyState === 'error').map((p) => p.id), true), children: "Try again loading project access" })), organization && (_jsx("p", { children: "This token may also use the service identity\u2019s organization permissions. Project policies only limit access within projects." })), _jsx("p", { id: "access-help", children: "Your token can only use permissions its holder has and the project allows. Tokens cannot change project settings or delete packages. Publishing is not available in this version." })] }), !personal && (_jsxs("div", { children: [_jsx(Label, { htmlFor: "issue-principal", children: "Service identity" }), _jsxs(Select, { className: "min-h-11", "aria-invalid": !!error && !principal, "aria-describedby": error ? 'token-errors' : undefined, id: "issue-principal", value: d.principal, onChange: (e) => update({ principal: e.target.value }), children: [_jsx("option", { value: "", children: "Choose a service identity" }), principals.map((p) => (_jsx("option", { value: p.id, children: p.name }, p.id)))] }), _jsx("p", { children: "A service principal is an identity for automation. Its tokens keep working when the person who created them leaves." }), principal && (_jsxs("p", { children: ["Permissions:", ' ', (principal.permissions ?? [])
|
|
255
|
+
.map((p) => permissionLabels[p] ?? permissionCopy[p]?.[0])
|
|
256
|
+
.filter(Boolean)
|
|
257
|
+
.join('; ')] })), s.principalsLoading ? (_jsx("p", { children: "Loading service principals\u2026" })) : s.principalsError ? (_jsxs("p", { children: ["Service principals could not be loaded.", ' ', _jsx(Button, { type: "button", onClick: () => void c.loadPrincipals(), children: "Try again" })] })) : ((s.principalsRestricted || !principals.length) && (_jsxs("p", { children: [s.principalsRestricted && 'You cannot browse service principals here. ', "Ask an organization administrator to create a service identity for this project."] })))] })), _jsxs("div", { children: [_jsx(Label, { htmlFor: "issue-lifetime", children: "Expires after" }), _jsx(Select, { className: "min-h-11", id: "issue-lifetime", "aria-invalid": error?.target === 'issue-lifetime', "aria-describedby": error?.target === 'issue-lifetime' ? 'token-errors' : undefined, value: days, disabled: !policy, onChange: (e) => update({ days: e.target.value }), children: policy &&
|
|
258
|
+
lifetimeChoices(policy).map((n) => (_jsxs("option", { value: n, children: [dayLabel(n), n === policy.defaultDays ? ' (organization default)' : ''] }, n))) }), !policy && !s.loading && (_jsx(Button, { type: "button", onClick: () => void c.load(), children: "Try again" })), _jsx("p", { children: policy
|
|
259
|
+
? `Maximum: ${dayLabel(policy.maxDays)}. Create a replacement before this token expires.`
|
|
260
|
+
: 'Lifetime policy could not be loaded.' })] }), _jsx("p", { className: "lg:col-span-2 break-words", children: [
|
|
261
|
+
d.name,
|
|
262
|
+
all ? 'All projects I can access' : projects.map((p) => p.name).join(', '),
|
|
263
|
+
accessLabels[d.scope],
|
|
264
|
+
dayLabel(Number(days)),
|
|
265
|
+
personal ? '' : principal?.name,
|
|
266
|
+
]
|
|
267
|
+
.filter(Boolean)
|
|
268
|
+
.join(' · ') }), _jsxs("div", { className: "flex flex-wrap gap-2 lg:col-span-2", children: [_jsx(Button, { className: "min-h-11 w-full sm:w-auto", type: "submit", disabled: s.busy, children: s.busy ? 'Creating token…' : createTokenLabel }), _jsx(Button, { className: "min-h-11 w-full sm:w-auto", type: "button", variant: "outline", disabled: s.busy, onClick: close, children: "Cancel" })] })] }))] }));
|
|
269
|
+
}
|
|
270
|
+
//# sourceMappingURL=issue-token-form.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"issue-token-form.js","sourceRoot":"","sources":["../../../src/pages/tokens/issue-token-form.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Controller, State } from '../tokens.js';
|
|
2
|
+
export declare const permissionCopy: Record<string, [string, string]>;
|
|
3
|
+
export declare const tokenEligiblePermissions: string[];
|
|
4
|
+
export declare function PrincipalForm({ state: s, controller: c, }: {
|
|
5
|
+
state: State;
|
|
6
|
+
controller: Controller;
|
|
7
|
+
}): import("react").JSX.Element | null;
|
|
8
|
+
//# sourceMappingURL=principal-form.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"principal-form.d.ts","sourceRoot":"","sources":["../../../src/pages/tokens/principal-form.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAEtD,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CA4B3D,CAAC;AACF,eAAO,MAAM,wBAAwB,UAA8B,CAAC;AASpE,wBAAgB,aAAa,CAAC,EAC5B,KAAK,EAAE,CAAC,EACR,UAAU,EAAE,CAAC,GACd,EAAE;IACD,KAAK,EAAE,KAAK,CAAC;IACb,UAAU,EAAE,UAAU,CAAC;CACxB,sCAyRA"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useState } from 'react';
|
|
3
|
+
import { Button } from '../../components/ui/button.js';
|
|
4
|
+
import { Input } from '../../components/ui/input.js';
|
|
5
|
+
import { Label } from '../../components/ui/label.js';
|
|
6
|
+
import { Select } from '../../components/ui/select.js';
|
|
7
|
+
export const permissionCopy = {
|
|
8
|
+
'project:read': ['Read project details', 'View project information.'],
|
|
9
|
+
'project:packages:read': [
|
|
10
|
+
'Install and download packages',
|
|
11
|
+
'Read package metadata and download packages.',
|
|
12
|
+
],
|
|
13
|
+
'project:packages:write': [
|
|
14
|
+
'Include publish permission',
|
|
15
|
+
'Publishing is not available in this version.',
|
|
16
|
+
],
|
|
17
|
+
'project:grants:read': ['Read project grants', 'View who has access to this project.'],
|
|
18
|
+
'project:sources:read': ['Read project sources', "View this project's package sources."],
|
|
19
|
+
'project:audit:read': ['Read project audit records', 'View recorded changes in this project.'],
|
|
20
|
+
'org:packages:publish': [
|
|
21
|
+
'Include organization publish permission',
|
|
22
|
+
'Include permission to publish packages to the organization. Publishing is not available in this version.',
|
|
23
|
+
],
|
|
24
|
+
'org:read': ['Read organization details', 'View organization information.'],
|
|
25
|
+
'org:users:read': ['Read organization users', 'Read user information allowed by the API.'],
|
|
26
|
+
'org:roles:read': ['Read organization roles', 'View organization role definitions.'],
|
|
27
|
+
'org:grants:read': ['Read organization grants', 'View organization access rules.'],
|
|
28
|
+
'org:sources:read': ['Read organization sources', 'View organization package sources.'],
|
|
29
|
+
'org:import:write': [
|
|
30
|
+
// eslint-disable-next-line no-restricted-syntax -- Permission label, not SQL.
|
|
31
|
+
'Create and read import runs',
|
|
32
|
+
'Plan and inspect imports; cannot approve or apply them.',
|
|
33
|
+
],
|
|
34
|
+
'org:audit:read': ['Read organization audit records', 'View recorded organization changes.'],
|
|
35
|
+
};
|
|
36
|
+
export const tokenEligiblePermissions = Object.keys(permissionCopy);
|
|
37
|
+
const install = ['project:read', 'project:packages:read'];
|
|
38
|
+
const records = [
|
|
39
|
+
'project:read',
|
|
40
|
+
'project:grants:read',
|
|
41
|
+
'project:sources:read',
|
|
42
|
+
'project:audit:read',
|
|
43
|
+
];
|
|
44
|
+
export function PrincipalForm({ state: s, controller: c, }) {
|
|
45
|
+
const [open, setOpen] = useState(false);
|
|
46
|
+
const [name, setName] = useState('');
|
|
47
|
+
const [binding, setBinding] = useState('');
|
|
48
|
+
const [permissions, setPermissions] = useState(install);
|
|
49
|
+
const [preset, setPreset] = useState('Install packages');
|
|
50
|
+
const [error, setError] = useState('');
|
|
51
|
+
const [errorTarget, setErrorTarget] = useState('principal-name');
|
|
52
|
+
const [created, setCreated] = useState(null);
|
|
53
|
+
const project = s.projects.find((p) => p.id === binding);
|
|
54
|
+
const allowed = binding === 'organization' ? s.organizationPermissions : (project?.permissions ?? []);
|
|
55
|
+
const eligible = tokenEligiblePermissions
|
|
56
|
+
.filter((key) => binding === 'organization' || key.startsWith('project:'))
|
|
57
|
+
.map((name) => ({
|
|
58
|
+
name,
|
|
59
|
+
scope: name.startsWith('org:') ? 'organization' : 'project',
|
|
60
|
+
description: permissionCopy[name][0],
|
|
61
|
+
}));
|
|
62
|
+
const canManage = s.organizationPermissions.includes('org:service-principals:write');
|
|
63
|
+
// The current create route requires organization admin authority for a project binding too.
|
|
64
|
+
const admin = s.organizationPermissions.includes('org:settings:write') && canManage;
|
|
65
|
+
useEffect(() => {
|
|
66
|
+
if (project)
|
|
67
|
+
c.loadProjectPolicies([project.id]);
|
|
68
|
+
}, [c, project]);
|
|
69
|
+
useEffect(() => {
|
|
70
|
+
if (!binding || (project && project.policyState !== 'loaded'))
|
|
71
|
+
return;
|
|
72
|
+
setPermissions((old) => (preset === 'Install packages'
|
|
73
|
+
? install
|
|
74
|
+
: preset === 'Read project records'
|
|
75
|
+
? records
|
|
76
|
+
: old).filter((p) => allowed.includes(p)));
|
|
77
|
+
}, [binding, project, preset, s.organizationPermissions]);
|
|
78
|
+
if (!admin)
|
|
79
|
+
return null;
|
|
80
|
+
return (_jsxs(_Fragment, { children: [_jsx(Button, { className: "min-h-11 w-full sm:w-auto", type: "button", onClick: () => {
|
|
81
|
+
setOpen(true);
|
|
82
|
+
setCreated(null);
|
|
83
|
+
}, children: "New service principal" }), created && (_jsx("div", { children: _jsx(Button, { className: "min-h-11 w-full sm:w-auto", type: "button", onClick: () => {
|
|
84
|
+
c.choosePrincipal(created.id, s.projects.find((p) => p.id === created.projectId)?.slug ?? null, created.projectId === null);
|
|
85
|
+
setCreated(null);
|
|
86
|
+
document.getElementById('new-token')?.focus();
|
|
87
|
+
}, children: "Create token" }) })), open && (_jsxs("form", { noValidate: true, "aria-label": "New service principal", className: "grid max-w-5xl items-start gap-x-6 gap-y-4 lg:grid-cols-2", onSubmit: (event) => {
|
|
88
|
+
event.preventDefault();
|
|
89
|
+
const failure = !name.trim()
|
|
90
|
+
? { target: 'principal-name', message: 'Enter a service identity name.' }
|
|
91
|
+
: !binding
|
|
92
|
+
? { target: 'principal-project', message: 'Choose a project.' }
|
|
93
|
+
: project?.policyState === 'loading' || project?.policyState === 'idle'
|
|
94
|
+
? { target: 'principal-project', message: 'Project access is still loading.' }
|
|
95
|
+
: project?.policyState === 'error'
|
|
96
|
+
? {
|
|
97
|
+
target: 'principal-project',
|
|
98
|
+
message: 'Project access could not be loaded. Try again.',
|
|
99
|
+
}
|
|
100
|
+
: !permissions.length
|
|
101
|
+
? {
|
|
102
|
+
target: 'principal-permissions',
|
|
103
|
+
message: 'Choose at least one permission.',
|
|
104
|
+
}
|
|
105
|
+
: !permissions.every((p) => allowed.includes(p))
|
|
106
|
+
? {
|
|
107
|
+
target: 'principal-permissions',
|
|
108
|
+
message: 'You cannot grant every selected permission here.',
|
|
109
|
+
}
|
|
110
|
+
: null;
|
|
111
|
+
if (failure) {
|
|
112
|
+
setErrorTarget(failure.target);
|
|
113
|
+
requestAnimationFrame(() => document.getElementById('principal-errors')?.focus());
|
|
114
|
+
setError(failure.message);
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
setError('');
|
|
118
|
+
void c
|
|
119
|
+
.createPrincipal(name, binding === 'organization' ? '' : binding, permissions)
|
|
120
|
+
.then((value) => {
|
|
121
|
+
if (value) {
|
|
122
|
+
setCreated(value);
|
|
123
|
+
setOpen(false);
|
|
124
|
+
setName('');
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
}, children: [_jsx("h2", { className: "lg:col-span-2", children: "New service principal" }), _jsx("p", { className: "lg:col-span-2", children: "Create a service identity for automation, then issue a token for it." }), error && (_jsx("div", { id: "principal-errors", tabIndex: -1, role: "alert", className: "lg:col-span-2", children: _jsx("button", { type: "button", className: "min-h-11 underline", onClick: () => document.getElementById(errorTarget)?.focus(), children: error }) })), _jsxs("div", { children: [_jsx(Label, { htmlFor: "principal-name", children: "Service identity name" }), _jsx(Input, { className: "min-h-11", id: "principal-name", "aria-invalid": !!error && errorTarget === 'principal-name', value: name, placeholder: "e.g. ci-storefront", "aria-describedby": "principal-name-help", onChange: (e) => setName(e.target.value) }), _jsx("p", { id: "principal-name-help", children: "Use one identity for each CI pipeline so you can stop its access separately." })] }), _jsxs("div", { children: [_jsx(Label, { htmlFor: "principal-project", children: "Project" }), _jsxs(Select, { className: "min-h-11", id: "principal-project", "aria-invalid": !!error && errorTarget === 'principal-project', value: binding, onChange: (e) => {
|
|
128
|
+
const next = e.target.value;
|
|
129
|
+
const kept = permissions.filter((p) => next === 'organization' || p.startsWith('project:'));
|
|
130
|
+
setBinding(next);
|
|
131
|
+
setPermissions(kept);
|
|
132
|
+
if (kept.length !== permissions.length)
|
|
133
|
+
c.announce('Project changed. Incompatible permissions were removed.');
|
|
134
|
+
}, children: [_jsx("option", { value: "", children: "Choose a project" }), s.projects.map((p) => (_jsx("option", { value: p.id, children: p.name }, p.id))), _jsx("option", { value: "organization", children: "Organization-wide (advanced)" })] }), binding === 'organization' && (_jsx("p", { children: "Can carry permissions across projects and for the organization. Choose a single project for a CI pipeline that only installs its packages." }))] }), _jsxs("fieldset", { id: "principal-permissions", tabIndex: -1, className: "lg:col-span-2", children: [_jsx("legend", { children: "Permissions" }), _jsx("div", { className: "flex flex-wrap gap-2", children: ['Install packages', 'Read project records', 'Custom'].map((label) => (_jsx(Button, { className: "min-h-11 w-full sm:w-auto", type: "button", "aria-pressed": preset === label, onClick: () => {
|
|
135
|
+
setPreset(label);
|
|
136
|
+
if (label !== 'Custom')
|
|
137
|
+
setPermissions((label === 'Install packages' ? install : records).filter((p) => allowed.includes(p)));
|
|
138
|
+
}, children: label }, label))) }), preset === 'Read project records' && (_jsx("p", { children: "To issue an Install and download token, also select Install and download packages." })), project?.policyState === 'loading' && _jsx("p", { children: "Loading project access\u2026" }), project?.policyState === 'error' && (_jsx(Button, { className: "min-h-11 w-full sm:w-auto", type: "button", onClick: () => c.loadProjectPolicies([project.id], true), children: "Try again loading project access" })), (binding === 'organization'
|
|
139
|
+
? ['Packages', 'Project records', 'Organization']
|
|
140
|
+
: ['Packages', 'Project records']).map((group) => (_jsxs("fieldset", { children: [_jsx("legend", { children: group }), eligible
|
|
141
|
+
.filter((p) => group === 'Organization'
|
|
142
|
+
? p.scope === 'organization'
|
|
143
|
+
: group === 'Packages'
|
|
144
|
+
? install.includes(p.name) || p.name === 'project:packages:write'
|
|
145
|
+
: p.scope === 'project' &&
|
|
146
|
+
!install.includes(p.name) &&
|
|
147
|
+
p.name !== 'project:packages:write')
|
|
148
|
+
.map((p) => (_jsxs("label", { className: "flex min-h-11 items-center gap-2", children: [_jsx("input", { type: "checkbox", checked: permissions.includes(p.name) && allowed.includes(p.name), disabled: !allowed.includes(p.name), "aria-invalid": !!error && errorTarget === 'principal-permissions', onChange: (e) => {
|
|
149
|
+
setPreset('Custom');
|
|
150
|
+
setPermissions((old) => e.target.checked
|
|
151
|
+
? [...old, p.name]
|
|
152
|
+
: old.filter((key) => key !== p.name));
|
|
153
|
+
} }), permissionCopy[p.name]?.[0] ?? p.description, " \u2014 ", permissionCopy[p.name]?.[1], !allowed.includes(p.name) && ' You cannot grant this permission here.'] }, p.name)))] }, group))), _jsx("p", { children: "A token's access level and the project's access policy may limit these permissions further." })] }), _jsxs("p", { className: "lg:col-span-2", children: [name, " \u00B7 ", binding === 'organization' ? 'Organization-wide' : project?.name, " \u00B7", ' ', permissions.length, " ", permissions.length === 1 ? 'permission' : 'permissions'] }), _jsxs("div", { className: "flex flex-wrap gap-2 lg:col-span-2", children: [_jsx(Button, { className: "min-h-11 w-full sm:w-auto", type: "submit", disabled: s.busy, children: s.busy ? 'Creating service principal…' : 'Create service principal' }), _jsx(Button, { className: "min-h-11 w-full sm:w-auto", type: "button", variant: "outline", onClick: () => setOpen(false), children: "Cancel" })] })] }))] }));
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=principal-form.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"principal-form.js","sourceRoot":"","sources":["../../../src/pages/tokens/principal-form.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { ShellServices } from '../../auth.js';
|
|
2
|
+
import type { operations } from '../../api-types.js';
|
|
3
|
+
type Publisher = operations['listTrustedPublishers']['responses'][200]['content']['application/json']['items'][number];
|
|
4
|
+
type Draft = {
|
|
5
|
+
packageName: string;
|
|
6
|
+
repository: string;
|
|
7
|
+
workflow: string;
|
|
8
|
+
environment: string;
|
|
9
|
+
refPattern: string;
|
|
10
|
+
};
|
|
11
|
+
export interface State {
|
|
12
|
+
items: Publisher[];
|
|
13
|
+
next: string | null;
|
|
14
|
+
hasPrevious: boolean;
|
|
15
|
+
draft: Draft;
|
|
16
|
+
editing: {
|
|
17
|
+
id: string;
|
|
18
|
+
revision: number;
|
|
19
|
+
} | null;
|
|
20
|
+
loading: boolean;
|
|
21
|
+
loadError: boolean;
|
|
22
|
+
busy: boolean;
|
|
23
|
+
stale: boolean;
|
|
24
|
+
editDisabled: boolean;
|
|
25
|
+
notice: string | null;
|
|
26
|
+
}
|
|
27
|
+
export declare function createTrustedPublishersController(services: ShellServices): {
|
|
28
|
+
snapshot: () => State;
|
|
29
|
+
subscribe(listener: () => void): () => void;
|
|
30
|
+
draft(draft: Draft): void;
|
|
31
|
+
edit(item: Pick<Publisher, "id" | "revision" | "packageName" | "repository" | "workflow" | "environment" | "refPattern">): void;
|
|
32
|
+
cancel(): void;
|
|
33
|
+
clear(): void;
|
|
34
|
+
load(): Promise<void>;
|
|
35
|
+
nextPage(): Promise<void>;
|
|
36
|
+
previousPage(): Promise<void>;
|
|
37
|
+
save(): Promise<void>;
|
|
38
|
+
disable(item: Pick<Publisher, "id" | "revision">): Promise<void>;
|
|
39
|
+
};
|
|
40
|
+
export type Controller = ReturnType<typeof createTrustedPublishersController>;
|
|
41
|
+
export {};
|
|
42
|
+
//# sourceMappingURL=trusted-publishers-controller.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trusted-publishers-controller.d.ts","sourceRoot":"","sources":["../../../src/pages/tokens/trusted-publishers-controller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGrD,KAAK,SAAS,GACZ,UAAU,CAAC,uBAAuB,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC;AACxG,KAAK,KAAK,GAAG;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAQF,MAAM,WAAW,KAAK;IACpB,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,KAAK,EAAE,KAAK,CAAC;IACb,OAAO,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACjD,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IACf,YAAY,EAAE,OAAO,CAAC;IACtB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AACD,wBAAgB,iCAAiC,CAAC,QAAQ,EAAE,aAAa;;wBAsCjD,MAAM,IAAI;iBAMjB,KAAK;eAIV,IAAI,CACR,SAAS,EACT,IAAI,GAAG,UAAU,GAAG,aAAa,GAAG,YAAY,GAAG,UAAU,GAAG,aAAa,GAAG,YAAY,CAC7F;;;;;;;kBAgIiB,IAAI,CAAC,SAAS,EAAE,IAAI,GAAG,UAAU,CAAC;EAmBzD;AACD,MAAM,MAAM,UAAU,GAAG,UAAU,CAAC,OAAO,iCAAiC,CAAC,CAAC"}
|