@package-broker/ui 0.19.8 → 2.0.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (207) hide show
  1. package/LICENSE +661 -0
  2. package/dist/.tsbuildinfo +1 -0
  3. package/dist/api-types.d.ts +9987 -0
  4. package/dist/api-types.d.ts.map +1 -0
  5. package/dist/api-types.js +6 -0
  6. package/dist/api-types.js.map +1 -0
  7. package/dist/api.d.ts +88 -0
  8. package/dist/api.d.ts.map +1 -0
  9. package/dist/api.js +179 -0
  10. package/dist/api.js.map +1 -0
  11. package/dist/app.d.ts +76 -0
  12. package/dist/app.d.ts.map +1 -0
  13. package/dist/app.js +239 -0
  14. package/dist/app.js.map +1 -0
  15. package/dist/assets/app.0348e5888f99.js +15 -0
  16. package/dist/assets/app.e8cea8b32d3a.css +2 -0
  17. package/dist/assets/index.html +13 -0
  18. package/dist/assets/manifest.json +26 -0
  19. package/dist/assets/setup.98343039898f.js +1 -0
  20. package/dist/assets/setup.html +14 -0
  21. package/dist/auth.d.ts +170 -0
  22. package/dist/auth.d.ts.map +1 -0
  23. package/dist/auth.js +551 -0
  24. package/dist/auth.js.map +1 -0
  25. package/dist/components/ui/alert.d.ts +10 -0
  26. package/dist/components/ui/alert.d.ts.map +1 -0
  27. package/dist/components/ui/alert.js +22 -0
  28. package/dist/components/ui/alert.js.map +1 -0
  29. package/dist/components/ui/badge.d.ts +8 -0
  30. package/dist/components/ui/badge.d.ts.map +1 -0
  31. package/dist/components/ui/badge.js +18 -0
  32. package/dist/components/ui/badge.js.map +1 -0
  33. package/dist/components/ui/button.d.ts +13 -0
  34. package/dist/components/ui/button.d.ts.map +1 -0
  35. package/dist/components/ui/button.js +27 -0
  36. package/dist/components/ui/button.js.map +1 -0
  37. package/dist/components/ui/card.d.ts +10 -0
  38. package/dist/components/ui/card.d.ts.map +1 -0
  39. package/dist/components/ui/card.js +21 -0
  40. package/dist/components/ui/card.js.map +1 -0
  41. package/dist/components/ui/confirm-action.d.ts +12 -0
  42. package/dist/components/ui/confirm-action.d.ts.map +1 -0
  43. package/dist/components/ui/confirm-action.js +19 -0
  44. package/dist/components/ui/confirm-action.js.map +1 -0
  45. package/dist/components/ui/dialog.d.ts +17 -0
  46. package/dist/components/ui/dialog.d.ts.map +1 -0
  47. package/dist/components/ui/dialog.js +180 -0
  48. package/dist/components/ui/dialog.js.map +1 -0
  49. package/dist/components/ui/dropdown-menu.d.ts +8 -0
  50. package/dist/components/ui/dropdown-menu.d.ts.map +1 -0
  51. package/dist/components/ui/dropdown-menu.js +71 -0
  52. package/dist/components/ui/dropdown-menu.js.map +1 -0
  53. package/dist/components/ui/id-text.d.ts +11 -0
  54. package/dist/components/ui/id-text.d.ts.map +1 -0
  55. package/dist/components/ui/id-text.js +23 -0
  56. package/dist/components/ui/id-text.js.map +1 -0
  57. package/dist/components/ui/input.d.ts +5 -0
  58. package/dist/components/ui/input.d.ts.map +1 -0
  59. package/dist/components/ui/input.js +6 -0
  60. package/dist/components/ui/input.js.map +1 -0
  61. package/dist/components/ui/label.d.ts +4 -0
  62. package/dist/components/ui/label.d.ts.map +1 -0
  63. package/dist/components/ui/label.js +7 -0
  64. package/dist/components/ui/label.js.map +1 -0
  65. package/dist/components/ui/list-state.d.ts +7 -0
  66. package/dist/components/ui/list-state.d.ts.map +1 -0
  67. package/dist/components/ui/list-state.js +5 -0
  68. package/dist/components/ui/list-state.js.map +1 -0
  69. package/dist/components/ui/overlay-host.d.ts +6 -0
  70. package/dist/components/ui/overlay-host.d.ts.map +1 -0
  71. package/dist/components/ui/overlay-host.js +36 -0
  72. package/dist/components/ui/overlay-host.js.map +1 -0
  73. package/dist/components/ui/row-actions.d.ts +17 -0
  74. package/dist/components/ui/row-actions.d.ts.map +1 -0
  75. package/dist/components/ui/row-actions.js +21 -0
  76. package/dist/components/ui/row-actions.js.map +1 -0
  77. package/dist/components/ui/select.d.ts +3 -0
  78. package/dist/components/ui/select.d.ts.map +1 -0
  79. package/dist/components/ui/select.js +6 -0
  80. package/dist/components/ui/select.js.map +1 -0
  81. package/dist/components/ui/status-badge.d.ts +28 -0
  82. package/dist/components/ui/status-badge.d.ts.map +1 -0
  83. package/dist/components/ui/status-badge.js +50 -0
  84. package/dist/components/ui/status-badge.js.map +1 -0
  85. package/dist/components/ui/table.d.ts +27 -0
  86. package/dist/components/ui/table.d.ts.map +1 -0
  87. package/dist/components/ui/table.js +81 -0
  88. package/dist/components/ui/table.js.map +1 -0
  89. package/dist/components/ui/tabs.d.ts +7 -0
  90. package/dist/components/ui/tabs.d.ts.map +1 -0
  91. package/dist/components/ui/tabs.js +14 -0
  92. package/dist/components/ui/tabs.js.map +1 -0
  93. package/dist/components/ui/textarea.d.ts +3 -0
  94. package/dist/components/ui/textarea.d.ts.map +1 -0
  95. package/dist/components/ui/textarea.js +14 -0
  96. package/dist/components/ui/textarea.js.map +1 -0
  97. package/dist/components/ui/time.d.ts +5 -0
  98. package/dist/components/ui/time.d.ts.map +1 -0
  99. package/dist/components/ui/time.js +14 -0
  100. package/dist/components/ui/time.js.map +1 -0
  101. package/dist/components/ui/toolbar.d.ts +20 -0
  102. package/dist/components/ui/toolbar.d.ts.map +1 -0
  103. package/dist/components/ui/toolbar.js +42 -0
  104. package/dist/components/ui/toolbar.js.map +1 -0
  105. package/dist/components/vulnerability-status.d.ts +8 -0
  106. package/dist/components/vulnerability-status.d.ts.map +1 -0
  107. package/dist/components/vulnerability-status.js +49 -0
  108. package/dist/components/vulnerability-status.js.map +1 -0
  109. package/dist/index.d.ts +2 -0
  110. package/dist/index.d.ts.map +1 -0
  111. package/dist/index.js +2 -0
  112. package/dist/index.js.map +1 -0
  113. package/dist/lib/use-merged-refs.d.ts +3 -0
  114. package/dist/lib/use-merged-refs.d.ts.map +1 -0
  115. package/dist/lib/use-merged-refs.js +22 -0
  116. package/dist/lib/use-merged-refs.js.map +1 -0
  117. package/dist/lib/utils.d.ts +4 -0
  118. package/dist/lib/utils.d.ts.map +1 -0
  119. package/dist/lib/utils.js +11 -0
  120. package/dist/lib/utils.js.map +1 -0
  121. package/dist/main.d.ts +2 -0
  122. package/dist/main.d.ts.map +1 -0
  123. package/dist/main.js +9 -0
  124. package/dist/main.js.map +1 -0
  125. package/dist/manifest.d.ts +8 -0
  126. package/dist/manifest.d.ts.map +1 -0
  127. package/dist/manifest.js +21 -0
  128. package/dist/manifest.js.map +1 -0
  129. package/dist/page-hash.d.ts +23 -0
  130. package/dist/page-hash.d.ts.map +1 -0
  131. package/dist/page-hash.js +45 -0
  132. package/dist/page-hash.js.map +1 -0
  133. package/dist/pages/access.d.ts +69 -0
  134. package/dist/pages/access.d.ts.map +1 -0
  135. package/dist/pages/access.js +391 -0
  136. package/dist/pages/access.js.map +1 -0
  137. package/dist/pages/audit.d.ts +63 -0
  138. package/dist/pages/audit.d.ts.map +1 -0
  139. package/dist/pages/audit.js +182 -0
  140. package/dist/pages/audit.js.map +1 -0
  141. package/dist/pages/import.d.ts +41 -0
  142. package/dist/pages/import.d.ts.map +1 -0
  143. package/dist/pages/import.js +274 -0
  144. package/dist/pages/import.js.map +1 -0
  145. package/dist/pages/management.d.ts +47 -0
  146. package/dist/pages/management.d.ts.map +1 -0
  147. package/dist/pages/management.js +141 -0
  148. package/dist/pages/management.js.map +1 -0
  149. package/dist/pages/packages.d.ts +74 -0
  150. package/dist/pages/packages.d.ts.map +1 -0
  151. package/dist/pages/packages.js +505 -0
  152. package/dist/pages/packages.js.map +1 -0
  153. package/dist/pages/projects.d.ts +58 -0
  154. package/dist/pages/projects.d.ts.map +1 -0
  155. package/dist/pages/projects.js +357 -0
  156. package/dist/pages/projects.js.map +1 -0
  157. package/dist/pages/sources/add-package-dialog.d.ts +10 -0
  158. package/dist/pages/sources/add-package-dialog.d.ts.map +1 -0
  159. package/dist/pages/sources/add-package-dialog.js +19 -0
  160. package/dist/pages/sources/add-package-dialog.js.map +1 -0
  161. package/dist/pages/sources/proxy-message.d.ts +2 -0
  162. package/dist/pages/sources/proxy-message.d.ts.map +1 -0
  163. package/dist/pages/sources/proxy-message.js +2 -0
  164. package/dist/pages/sources/proxy-message.js.map +1 -0
  165. package/dist/pages/sources/source-form.d.ts +29 -0
  166. package/dist/pages/sources/source-form.d.ts.map +1 -0
  167. package/dist/pages/sources/source-form.js +463 -0
  168. package/dist/pages/sources/source-form.js.map +1 -0
  169. package/dist/pages/sources/sync-poll.d.ts +20 -0
  170. package/dist/pages/sources/sync-poll.d.ts.map +1 -0
  171. package/dist/pages/sources/sync-poll.js +71 -0
  172. package/dist/pages/sources/sync-poll.js.map +1 -0
  173. package/dist/pages/sources.d.ts +325 -0
  174. package/dist/pages/sources.d.ts.map +1 -0
  175. package/dist/pages/sources.js +1132 -0
  176. package/dist/pages/sources.js.map +1 -0
  177. package/dist/pages/tokens/client-config.d.ts +5 -0
  178. package/dist/pages/tokens/client-config.d.ts.map +1 -0
  179. package/dist/pages/tokens/client-config.js +9 -0
  180. package/dist/pages/tokens/client-config.js.map +1 -0
  181. package/dist/pages/tokens.d.ts +127 -0
  182. package/dist/pages/tokens.d.ts.map +1 -0
  183. package/dist/pages/tokens.js +744 -0
  184. package/dist/pages/tokens.js.map +1 -0
  185. package/dist/pending.d.ts +33 -0
  186. package/dist/pending.d.ts.map +1 -0
  187. package/dist/pending.js +156 -0
  188. package/dist/pending.js.map +1 -0
  189. package/dist/qr.d.ts +14 -0
  190. package/dist/qr.d.ts.map +1 -0
  191. package/dist/qr.js +322 -0
  192. package/dist/qr.js.map +1 -0
  193. package/dist/setup.d.ts +49 -0
  194. package/dist/setup.d.ts.map +1 -0
  195. package/dist/setup.js +390 -0
  196. package/dist/setup.js.map +1 -0
  197. package/dist/test-fixtures/api-types.d.ts +228 -0
  198. package/dist/test-fixtures/api-types.d.ts.map +1 -0
  199. package/dist/test-fixtures/api-types.js +6 -0
  200. package/dist/test-fixtures/api-types.js.map +1 -0
  201. package/package.json +37 -40
  202. package/public/index.html +11 -0
  203. package/README.md +0 -11
  204. package/dist/assets/main-3NLwl1eV.js +0 -111
  205. package/dist/assets/main-CsTEYyDl.css +0 -1
  206. package/dist/config.js +0 -3
  207. package/dist/index.html +0 -22
@@ -0,0 +1,357 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useEffect, useMemo, useSyncExternalStore } from 'react';
3
+ import { useServices } from '../auth.js';
4
+ import { buildListFilterHash } from '../page-hash.js';
5
+ import { Button } from '../components/ui/button.js';
6
+ import { Label } from '../components/ui/label.js';
7
+ import { Select } from '../components/ui/select.js';
8
+ import { DataTable } from '../components/ui/table.js';
9
+ import { StatusBadge } from '../components/ui/status-badge.js';
10
+ import { IdText } from '../components/ui/id-text.js';
11
+ import { ListState } from '../components/ui/list-state.js';
12
+ import { ConfirmAction } from '../components/ui/confirm-action.js';
13
+ import { createManagementStore, failureNotice, Field, formValues, ManagementFilters, ManagementNotice, parseManagementHash, requireReauth, useManagementHash, } from './management.js';
14
+ const ARCHIVED_NOTICE = 'Project archived.';
15
+ const STATUSES = ['active', 'archived'];
16
+ export const parseProjectsHash = (hash) => parseManagementHash(hash, STATUSES);
17
+ export const buildProjectsHash = (query) => buildListFilterHash('projects', parseProjectsHash(buildListFilterHash('projects', query)));
18
+ async function loadProjectList(client, query, includeArchived = true) {
19
+ if (query.status)
20
+ return client.request('get', '/_pb/projects', {
21
+ query: { status: query.status, after: query.after, limit: '50' },
22
+ });
23
+ let cursors = [query.after, undefined];
24
+ if (query.after?.startsWith('all:')) {
25
+ try {
26
+ const parsed = JSON.parse(query.after.slice(4));
27
+ if (!Array.isArray(parsed) ||
28
+ parsed.length !== 2 ||
29
+ !parsed.every((value) => value === null || typeof value === 'string'))
30
+ throw new Error('Invalid cursor');
31
+ cursors = parsed;
32
+ }
33
+ catch {
34
+ return {
35
+ ok: false,
36
+ status: 400,
37
+ code: 'invalid_request',
38
+ details: [],
39
+ request: { method: 'GET', path: '/_pb/projects' },
40
+ };
41
+ }
42
+ }
43
+ if (!includeArchived && cursors[0] === null)
44
+ return { ok: true, status: 200, data: { items: [], next: null } };
45
+ if (!includeArchived)
46
+ return client.request('get', '/_pb/projects', {
47
+ query: { status: 'active', after: cursors[0] ?? undefined, limit: '50' },
48
+ });
49
+ const pages = await Promise.all(STATUSES.map((status, index) => cursors[index] === null
50
+ ? null
51
+ : client.request('get', '/_pb/projects', {
52
+ query: { status, after: cursors[index] ?? undefined, limit: '50' },
53
+ })));
54
+ const items = [];
55
+ const next = [];
56
+ for (const [index, page] of pages.entries()) {
57
+ if (page && !page.ok) {
58
+ if (STATUSES[index] === 'archived' && page.status === 403) {
59
+ next.push(null);
60
+ continue;
61
+ }
62
+ return page;
63
+ }
64
+ if (page?.ok)
65
+ items.push(...page.data.items);
66
+ next.push(page?.ok ? page.data.next : null);
67
+ }
68
+ return {
69
+ ok: true,
70
+ status: 200,
71
+ data: {
72
+ items,
73
+ next: next.some((cursor) => cursor !== null) ? `all:${JSON.stringify(next)}` : null,
74
+ },
75
+ };
76
+ }
77
+ export function projectsViewModel(state) {
78
+ const selected = state.selected;
79
+ const ready = !!selected && !!state.etag && !state.loading && !state.stale;
80
+ return {
81
+ items: state.items.filter((item) => !state.query.q || item.name.toLowerCase().startsWith(state.query.q.toLowerCase())),
82
+ create: state.organization.includes('org:projects:create') && !state.stale && !state.loading,
83
+ settings: ready && selected.status === 'active' && state.permissions.includes('project:settings:write'),
84
+ transition: ready && state.organization.includes('org:projects:archive'),
85
+ transitionItems: !state.loading && !state.stale && state.organization.includes('org:projects:archive'),
86
+ };
87
+ }
88
+ export function createProjectsController(services) {
89
+ const store = createManagementStore({
90
+ query: { project: null },
91
+ items: [],
92
+ next: null,
93
+ selected: null,
94
+ etag: null,
95
+ organization: [],
96
+ permissions: [],
97
+ loading: false,
98
+ listError: false,
99
+ busy: false,
100
+ stale: false,
101
+ notice: null,
102
+ });
103
+ let generation = 0;
104
+ const { client } = services;
105
+ async function load(query, notice = buildProjectsHash(query) ===
106
+ buildProjectsHash(store.snapshot().query) && store.snapshot().notice === ARCHIVED_NOTICE
107
+ ? ARCHIVED_NOTICE
108
+ : null) {
109
+ const current = ++generation;
110
+ store.set({
111
+ query,
112
+ items: [],
113
+ next: null,
114
+ selected: null,
115
+ etag: null,
116
+ organization: [],
117
+ permissions: [],
118
+ loading: true,
119
+ listError: false,
120
+ busy: false,
121
+ stale: false,
122
+ notice,
123
+ });
124
+ const organizationRequest = client.request('get', '/_pb/me/permissions');
125
+ const [initialList, organization, initialSelected, initialPermissions] = await Promise.all([
126
+ organizationRequest.then((result) => loadProjectList(client, query, result.ok &&
127
+ result.data.organization.includes('org:projects:archive') &&
128
+ result.data.organization.includes('project:read'))),
129
+ organizationRequest,
130
+ query.project === null
131
+ ? null
132
+ : client.request('get', '/_pb/projects/{project}', { params: { project: query.project } }),
133
+ query.project === null
134
+ ? null
135
+ : client.request('get', '/_pb/projects/{project}/permissions', {
136
+ params: { project: query.project },
137
+ }),
138
+ ]);
139
+ if (current !== generation)
140
+ return;
141
+ let list = initialList;
142
+ let selected = initialSelected;
143
+ let permissions = initialPermissions;
144
+ if (selected && !selected.ok && selected.status === 404) {
145
+ let after;
146
+ const cursors = new Set();
147
+ while (true) {
148
+ const archivedQuery = { project: null, status: 'archived', after };
149
+ const archived = await loadProjectList(client, archivedQuery);
150
+ if (current !== generation)
151
+ return;
152
+ if (!archived.ok)
153
+ break;
154
+ if (archived.data.items.some((item) => item.slug === query.project && item.status === 'archived')) {
155
+ query = archivedQuery;
156
+ list = archived;
157
+ selected = null;
158
+ permissions = null;
159
+ notice = ARCHIVED_NOTICE;
160
+ break;
161
+ }
162
+ const next = archived.data.next;
163
+ if (!next || cursors.has(next))
164
+ break;
165
+ cursors.add(next);
166
+ after = next;
167
+ }
168
+ }
169
+ if (notice === ARCHIVED_NOTICE) {
170
+ query = { ...query, project: null };
171
+ selected = null;
172
+ permissions = null;
173
+ if (!list.ok) {
174
+ query = { ...query, status: 'active', after: undefined };
175
+ list = await loadProjectList(client, query);
176
+ if (current !== generation)
177
+ return;
178
+ }
179
+ }
180
+ store.set({
181
+ query,
182
+ loading: false,
183
+ listError: !list.ok,
184
+ items: list.ok ? list.data.items : [],
185
+ next: list.ok ? list.data.next : null,
186
+ organization: organization.ok ? organization.data.organization : [],
187
+ selected: selected?.ok ? selected.data : null,
188
+ etag: selected?.ok ? (selected.headers?.etag ?? null) : null,
189
+ permissions: permissions?.ok ? permissions.data.project : [],
190
+ notice: !list.ok
191
+ ? failureNotice(list)
192
+ : selected && !selected.ok
193
+ ? failureNotice(selected)
194
+ : notice,
195
+ });
196
+ }
197
+ async function write(run, archivedSlug) {
198
+ const state = store.snapshot();
199
+ if (state.busy || state.loading || state.stale)
200
+ return;
201
+ const current = generation;
202
+ store.set({ busy: true, notice: null });
203
+ const result = await run();
204
+ if (result.ok)
205
+ services.onProjectsChanged?.();
206
+ if (current !== generation)
207
+ return;
208
+ store.set({ busy: false });
209
+ if (requireReauth(services, result)) {
210
+ store.set({
211
+ stale: true,
212
+ notice: 'Complete reauthentication and confirm the pending action.',
213
+ });
214
+ }
215
+ else if (!result.ok) {
216
+ store.set({ stale: result.status === 412, notice: failureNotice(result) });
217
+ }
218
+ else
219
+ await load(archivedSlug ? { ...state.query, project: archivedSlug } : state.query, archivedSlug ? ARCHIVED_NOTICE : 'Project updated.');
220
+ }
221
+ return {
222
+ snapshot: store.snapshot,
223
+ subscribe: store.subscribe,
224
+ load,
225
+ async create(body) {
226
+ if (projectsViewModel(store.snapshot()).create)
227
+ await write(() => client.request('post', '/_pb/projects', { body, idempotencyKey: crypto.randomUUID() }));
228
+ },
229
+ async update(body) {
230
+ const state = store.snapshot();
231
+ if (projectsViewModel(state).settings)
232
+ await write(() => client.request('patch', '/_pb/projects/{project}', {
233
+ params: { project: state.selected.slug },
234
+ headers: { 'If-Match': state.etag },
235
+ body,
236
+ }));
237
+ },
238
+ async transition() {
239
+ const state = store.snapshot();
240
+ if (projectsViewModel(state).transition)
241
+ await write(() => client.request('post', state.selected.status === 'active'
242
+ ? '/_pb/projects/{project}/archive'
243
+ : '/_pb/projects/{project}/restore', {
244
+ params: { project: state.selected.slug },
245
+ headers: { 'If-Match': state.etag },
246
+ idempotencyKey: crypto.randomUUID(),
247
+ }), state.selected.status === 'active' ? state.selected.slug : undefined);
248
+ },
249
+ async transitionItem(id) {
250
+ const state = store.snapshot();
251
+ const item = state.items.find((entry) => entry.id === id);
252
+ if (!item?.etag || !projectsViewModel(state).transitionItems)
253
+ return;
254
+ await write(() => client.request('post', item.status === 'active'
255
+ ? '/_pb/projects/{project}/archive'
256
+ : '/_pb/projects/{project}/restore', {
257
+ params: { project: item.slug },
258
+ headers: { 'If-Match': item.etag },
259
+ idempotencyKey: crypto.randomUUID(),
260
+ }), item.status === 'active' ? item.slug : undefined);
261
+ },
262
+ async replayed(result) {
263
+ const project = store.snapshot().query.project;
264
+ const path = project === null ? null : `/_pb/projects/${encodeURIComponent(project)}`;
265
+ const listTransition = /^\/_pb\/projects\/[^/]+\/(?:archive|restore)$/.test(result.path);
266
+ if (!listTransition &&
267
+ result.path !== '/_pb/projects' &&
268
+ (path === null || ![path, `${path}/archive`, `${path}/restore`].includes(result.path)))
269
+ return;
270
+ if (result.ok) {
271
+ const archivedSlug = listTransition && result.path.endsWith('/archive')
272
+ ? decodeURIComponent(result.path.split('/')[3])
273
+ : null;
274
+ await load(archivedSlug
275
+ ? { ...store.snapshot().query, project: archivedSlug }
276
+ : store.snapshot().query, archivedSlug ? ARCHIVED_NOTICE : 'Project updated.');
277
+ }
278
+ else
279
+ store.set({ stale: true, notice: failureNotice(result) });
280
+ },
281
+ dispose() {
282
+ ++generation;
283
+ },
284
+ };
285
+ }
286
+ function TokenPolicy(props) {
287
+ return (_jsxs(_Fragment, { children: [_jsxs(Label, { className: "grid gap-1", children: ["Maximum token scope", _jsx(Select, { name: "tokenMaxScope", defaultValue: props.project?.tokenMaxScope ?? 'read', children: ['read', 'write', 'full'].map((scope) => (_jsx("option", { value: scope, children: scope }, scope))) })] }), _jsxs(Label, { className: "grid gap-1", children: ["Publish approval", _jsxs(Select, { name: "requirePublishApproval", defaultValue: String(props.project?.requirePublishApproval ?? false), children: [_jsx("option", { value: "false", children: "Not required" }), _jsx("option", { value: "true", children: "Required" })] })] })] }));
288
+ }
289
+ export function ProjectsView({ state, controller, }) {
290
+ const model = projectsViewModel(state);
291
+ return (_jsxs(_Fragment, { children: [_jsx(ManagementNotice, { ...state, reload: () => void controller.load(state.query) }), state.query.q ? _jsx("p", { children: "Filtering loaded projects on this page." }) : null, !state.loading && !state.listError ? (model.items.length ? (_jsxs(_Fragment, { children: [_jsxs("p", { className: "my-3 text-sm text-neutral-600", children: [model.items.length, " projects on this page"] }), _jsx(DataTable, { label: "Projects", items: model.items, selectedId: state.selected?.id ?? '', columns: [
292
+ {
293
+ key: 'name',
294
+ label: 'Name',
295
+ value: (item) => item.name,
296
+ render: (item) => (_jsxs("div", { className: "grid gap-1", children: [_jsx("a", { className: "font-medium underline", href: buildProjectsHash({ ...state.query, project: item.slug }), children: item.name }), _jsx("code", { className: "text-xs text-neutral-600", children: item.slug })] })),
297
+ },
298
+ {
299
+ key: 'status',
300
+ label: 'Status',
301
+ value: (item) => item.status,
302
+ render: (item) => _jsx(StatusBadge, { status: item.status }),
303
+ },
304
+ {
305
+ key: 'id',
306
+ label: 'Project ID',
307
+ value: (item) => item.id,
308
+ render: (item) => _jsx(IdText, { value: item.id, label: "project ID" }),
309
+ priority: 3,
310
+ },
311
+ {
312
+ key: 'actions',
313
+ label: 'Actions',
314
+ value: () => '',
315
+ sortable: false,
316
+ render: (item) => (_jsxs("div", { className: "flex flex-wrap items-center gap-2", children: [_jsx("a", { className: "underline", href: buildProjectsHash({ ...state.query, project: item.slug }), children: "Open settings" }), model.transitionItems && item.etag ? (item.status === 'active' ? (_jsx(ConfirmAction, { action: "Archive", target: `${item.name} (${item.id})`, scope: `Project: ${item.slug}`, description: "Archiving keeps project history and blocks new publishes. You can restore this project later.", disabled: state.busy, onConfirm: () => void controller.transitionItem(item.id) }, `${item.id}:${item.etag}`)) : (_jsx(Button, { type: "button", size: "sm", variant: "outline", disabled: state.busy, onClick: () => void controller.transitionItem(item.id), children: "Restore" }))) : null] })),
317
+ },
318
+ ] })] })) : (_jsx(ListState, { kind: state.query.q || state.query.status ? 'filtered-empty' : 'empty', title: "No projects found on this page." }))) : null, state.next ? (_jsx("a", { className: "my-4 inline-block underline", href: buildProjectsHash({ ...state.query, after: state.next }), children: "Next projects" })) : null, model.create ? (_jsxs("details", { className: "detail-group my-6", children: [_jsx("summary", { className: "cursor-pointer font-semibold", children: "New project" }), _jsx("p", { className: "mt-3 text-neutral-600", children: "The slug is the API and CLI name; it cannot change after creation." }), _jsxs("form", { className: "my-6 grid gap-3", onSubmit: (event) => {
319
+ event.preventDefault();
320
+ if (state.busy)
321
+ return;
322
+ const values = formValues(event);
323
+ void controller.create({
324
+ name: values['name'] ?? '',
325
+ slug: values['slug'] ?? '',
326
+ tokenMaxScope: values['tokenMaxScope'],
327
+ requirePublishApproval: values['requirePublishApproval'] === 'true',
328
+ });
329
+ }, children: [_jsx("h2", { className: "text-lg font-semibold", children: "New project" }), _jsx(Field, { name: "name", label: "Project name" }), _jsx(Field, { name: "slug", label: "Slug" }), _jsx(TokenPolicy, {}), _jsx(Button, { type: "submit", disabled: state.busy, children: "Create project" })] })] })) : null, state.selected ? (_jsxs("section", { className: "detail-group my-6 grid gap-3", "aria-label": "Project settings", children: [_jsxs("h2", { className: "text-lg font-semibold", children: ["Settings: ", state.selected.name] }), _jsxs("p", { children: ["Maximum token scope: ", state.selected.tokenMaxScope, ". Publish approval:", ' ', state.selected.requirePublishApproval ? 'required' : 'not required', "."] }), model.settings ? (_jsxs("form", { className: "grid gap-3", onSubmit: (event) => {
330
+ event.preventDefault();
331
+ if (state.busy)
332
+ return;
333
+ const values = formValues(event);
334
+ void controller.update({
335
+ name: values['name'] ?? '',
336
+ tokenMaxScope: values['tokenMaxScope'],
337
+ requirePublishApproval: values['requirePublishApproval'] === 'true',
338
+ });
339
+ }, children: [_jsx(Field, { name: "name", label: "Project name", value: state.selected.name }), _jsx(TokenPolicy, { project: state.selected }), _jsx(Button, { type: "submit", disabled: state.busy, children: "Save settings" })] }, `${state.selected.id}-${state.etag}`)) : null, model.transition ? (state.selected.status === 'active' ? (_jsx(ConfirmAction, { action: "Archive", target: state.selected.name, scope: `Project: ${state.selected.slug}`, description: "Archiving keeps project history and blocks new publishes. You can restore this project later.", disabled: state.busy, onConfirm: () => void controller.transition() }, `${state.selected.id}:${state.etag}`)) : (_jsx(Button, { type: "button", variant: "outline", disabled: state.busy, onClick: () => void controller.transition(), children: "Restore" }))) : null] })) : null] }));
340
+ }
341
+ export function ProjectsPage() {
342
+ const services = useServices();
343
+ const controller = useMemo(() => createProjectsController(services), [services]);
344
+ const state = useSyncExternalStore(controller.subscribe, controller.snapshot, controller.snapshot);
345
+ const hash = useManagementHash(services, controller, parseProjectsHash, 'projects');
346
+ useEffect(() => {
347
+ if (state.loading || state.notice !== ARCHIVED_NOTICE || state.query.project !== null)
348
+ return;
349
+ const next = buildProjectsHash(state.query);
350
+ if (window.location.hash === next)
351
+ return;
352
+ window.history.replaceState(null, '', next);
353
+ window.dispatchEvent(new HashChangeEvent('hashchange'));
354
+ }, [state.loading, state.notice, state.query]);
355
+ return (_jsxs("section", { "aria-labelledby": "page-heading", children: [_jsx("h1", { tabIndex: -1, id: "page-heading", className: "text-xl font-semibold", children: "Projects" }), _jsx("p", { className: "mt-1 text-neutral-600", children: "Scopes for sources, packages and tokens. Archiving keeps history and blocks new publishes." }), _jsx(ManagementFilters, { route: "projects", query: parseProjectsHash(hash), statuses: STATUSES }, hash), _jsx(ProjectsView, { state: state, controller: controller })] }));
356
+ }
357
+ //# sourceMappingURL=projects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projects.js","sourceRoot":"","sources":["../../src/pages/projects.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { Source } from '../sources.js';
2
+ export declare function AddPackageDialog({ source, busy, fieldError, alert, onSubmit, onClose, }: {
3
+ source: Source;
4
+ busy: boolean;
5
+ fieldError: string | null;
6
+ alert: string | null;
7
+ onSubmit: (name: string) => void;
8
+ onClose: () => void;
9
+ }): import("react").JSX.Element;
10
+ //# sourceMappingURL=add-package-dialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-package-dialog.d.ts","sourceRoot":"","sources":["../../../src/pages/sources/add-package-dialog.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAa5C,wBAAgB,gBAAgB,CAAC,EAC/B,MAAM,EACN,IAAI,EACJ,UAAU,EACV,KAAK,EACL,QAAQ,EACR,OAAO,GACR,EAAE;IACD,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;IACd,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,+BAuDA"}
@@ -0,0 +1,19 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Button } from '../../components/ui/button.js';
3
+ import { Input } from '../../components/ui/input.js';
4
+ import { Label } from '../../components/ui/label.js';
5
+ import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from '../../components/ui/dialog.js';
6
+ export function AddPackageDialog({ source, busy, fieldError, alert, onSubmit, onClose, }) {
7
+ return (_jsx(Dialog, { open: true, onOpenChange: (open) => {
8
+ if (!open && !busy)
9
+ onClose();
10
+ }, children: _jsxs(DialogContent, { onCancel: (event) => {
11
+ if (busy)
12
+ event.preventDefault();
13
+ }, children: [_jsxs(DialogHeader, { children: [_jsx(DialogTitle, { children: "Add package" }), _jsxs(DialogDescription, { children: ["Request a package from ", source.name, " for this project."] })] }), _jsxs("form", { className: "grid gap-3", onSubmit: (event) => {
14
+ event.preventDefault();
15
+ if (!busy)
16
+ onSubmit(new FormData(event.currentTarget).get('name')?.toString() ?? '');
17
+ }, children: [_jsx(Label, { htmlFor: "add-package-name", children: "Package name" }), _jsx(Input, { id: "add-package-name", name: "name", required: true, maxLength: 428, placeholder: source.ecosystem === 'composer' ? 'vendor/package' : '@scope/package', disabled: busy, "aria-invalid": fieldError ? true : undefined, "aria-describedby": fieldError ? 'add-package-error' : undefined }), fieldError ? (_jsx("p", { id: "add-package-error", role: "alert", children: fieldError })) : null, alert ? _jsx("p", { role: "alert", children: alert }) : null, _jsxs(DialogFooter, { children: [_jsx(Button, { type: "button", variant: "outline", disabled: busy, onClick: onClose, children: "Cancel" }), _jsx(Button, { type: "submit", disabled: busy, children: busy ? 'Requesting…' : 'Add package' })] })] })] }) }));
18
+ }
19
+ //# sourceMappingURL=add-package-dialog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-package-dialog.js","sourceRoot":"","sources":["../../../src/pages/sources/add-package-dialog.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;AACrD,OAAO,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;AACrD,OAAO,EACL,MAAM,EACN,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,WAAW,GACZ,MAAM,+BAA+B,CAAC;AAEvC,MAAM,UAAU,gBAAgB,CAAC,EAC/B,MAAM,EACN,IAAI,EACJ,UAAU,EACV,KAAK,EACL,QAAQ,EACR,OAAO,GAQR;IACC,OAAO,CACL,KAAC,MAAM,IACL,IAAI,QACJ,YAAY,EAAE,CAAC,IAAI,EAAE,EAAE;YACrB,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI;gBAAE,OAAO,EAAE,CAAC;QAChC,CAAC,YAED,MAAC,aAAa,IACZ,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;gBAClB,IAAI,IAAI;oBAAE,KAAK,CAAC,cAAc,EAAE,CAAC;YACnC,CAAC,aAED,MAAC,YAAY,eACX,KAAC,WAAW,8BAA0B,EACtC,MAAC,iBAAiB,0CACQ,MAAM,CAAC,IAAI,0BACjB,IACP,EACf,gBACE,SAAS,EAAC,YAAY,EACtB,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;wBAClB,KAAK,CAAC,cAAc,EAAE,CAAC;wBACvB,IAAI,CAAC,IAAI;4BAAE,QAAQ,CAAC,IAAI,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;oBACvF,CAAC,aAED,KAAC,KAAK,IAAC,OAAO,EAAC,kBAAkB,6BAAqB,EACtD,KAAC,KAAK,IACJ,EAAE,EAAC,kBAAkB,EACrB,IAAI,EAAC,MAAM,EACX,QAAQ,QACR,SAAS,EAAE,GAAG,EACd,WAAW,EAAE,MAAM,CAAC,SAAS,KAAK,UAAU,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,gBAAgB,EAClF,QAAQ,EAAE,IAAI,kBACA,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,sBACzB,UAAU,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,SAAS,GAC9D,EACD,UAAU,CAAC,CAAC,CAAC,CACZ,YAAG,EAAE,EAAC,mBAAmB,EAAC,IAAI,EAAC,OAAO,YACnC,UAAU,GACT,CACL,CAAC,CAAC,CAAC,IAAI,EACP,KAAK,CAAC,CAAC,CAAC,YAAG,IAAI,EAAC,OAAO,YAAE,KAAK,GAAK,CAAC,CAAC,CAAC,IAAI,EAC3C,MAAC,YAAY,eACX,KAAC,MAAM,IAAC,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAC,SAAS,EAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,uBAE/D,EACT,KAAC,MAAM,IAAC,IAAI,EAAC,QAAQ,EAAC,QAAQ,EAAE,IAAI,YACjC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,aAAa,GAC9B,IACI,IACV,IACO,GACT,CACV,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const PROXY_DEMAND_MESSAGE = "For proxy sources, packages appear when a client first requests them.";
2
+ //# sourceMappingURL=proxy-message.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proxy-message.d.ts","sourceRoot":"","sources":["../../../src/pages/sources/proxy-message.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,oBAAoB,0EACwC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export const PROXY_DEMAND_MESSAGE = 'For proxy sources, packages appear when a client first requests them.';
2
+ //# sourceMappingURL=proxy-message.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proxy-message.js","sourceRoot":"","sources":["../../../src/pages/sources/proxy-message.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,oBAAoB,GAC/B,uEAAuE,CAAC"}
@@ -0,0 +1,29 @@
1
+ import type { operations } from '../../api-types.js';
2
+ import type { ApiErrorDetail } from '../../api.js';
3
+ import { type Source } from '../sources.js';
4
+ export type CreateSource = operations['createOrganizationSource']['requestBody']['content']['application/json'];
5
+ export type SourceChanges = operations['updateOrganizationSource']['requestBody']['content']['application/json'];
6
+ export type VcsProvider = operations['listOrganizationSources']['responses'][200]['content']['application/json']['vcsProviders'][number];
7
+ /** The provider choices in display order, limited to those the broker reports it serves. */
8
+ export declare function vcsProviderOptions(reported: readonly string[]): readonly (readonly [VcsProvider, string])[];
9
+ export declare const SOURCE_TYPES: {
10
+ readonly composer: readonly ["packagist_proxy", "composer_repository", "vcs"];
11
+ readonly npm: readonly ["npmjs_proxy", "npm_registry"];
12
+ };
13
+ export declare const SOURCE_TYPE_LABELS: Record<CreateSource['type'], string>;
14
+ export declare function sourceFieldErrors(details: ApiErrorDetail[]): Record<string, string>;
15
+ export declare function validateSourceForm(data: FormData, type: CreateSource['type'], editing: boolean, original?: Source | null, baseline?: FormData | null): Record<string, string>;
16
+ export declare function sourceSubmission(data: FormData, ecosystem: CreateSource['ecosystem'], type: CreateSource['type'], original: Source | null, initialData?: FormData | null): CreateSource | SourceChanges;
17
+ export declare function sourceFormData(source: Source): FormData;
18
+ export declare function scopeNamePatterns(scopes: string): string[];
19
+ export declare function focusSourceError(form: HTMLFormElement | null, errors: Record<string, string>): void;
20
+ export declare function SourceForm({ source, busy, errors: serverErrors, alert, onSubmit, onClose, vcsProviders, }: {
21
+ source: Source | null;
22
+ busy: boolean;
23
+ errors: Record<string, string>;
24
+ alert: string | null;
25
+ onSubmit: (body: CreateSource | SourceChanges) => void;
26
+ onClose: () => void;
27
+ vcsProviders?: readonly VcsProvider[] | undefined;
28
+ }): import("react").JSX.Element;
29
+ //# sourceMappingURL=source-form.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source-form.d.ts","sourceRoot":"","sources":["../../../src/pages/sources/source-form.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAanD,OAAO,EAAc,KAAK,MAAM,EAAE,MAAM,eAAe,CAAC;AAGxD,MAAM,MAAM,YAAY,GACtB,UAAU,CAAC,0BAA0B,CAAC,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,CAAC;AACvF,MAAM,MAAM,aAAa,GACvB,UAAU,CAAC,0BAA0B,CAAC,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,CAAC;AACvF,MAAM,MAAM,WAAW,GACrB,UAAU,CAAC,yBAAyB,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAQjH,4FAA4F;AAC5F,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,SAAS,MAAM,EAAE,GAC1B,SAAS,CAAC,SAAS,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,EAAE,CAI7C;AACD,eAAO,MAAM,YAAY;;;CAGf,CAAC;AAKX,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,MAAM,CAOnE,CAAC;AAyFF,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAUnF;AAED,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,QAAQ,EACd,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,EAC1B,OAAO,EAAE,OAAO,EAChB,QAAQ,GAAE,MAAM,GAAG,IAAW,EAC9B,QAAQ,GAAE,QAAQ,GAAG,IAAiD,GACrE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAkDxB;AAuFD,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,QAAQ,EACd,SAAS,EAAE,YAAY,CAAC,WAAW,CAAC,EACpC,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,EAC1B,QAAQ,EAAE,MAAM,GAAG,IAAI,EACvB,WAAW,GAAE,QAAQ,GAAG,IAAiD,GACxE,YAAY,GAAG,aAAa,CAoB9B;AAWD,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAoBvD;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAS1D;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,QAS5F;AAED,wBAAgB,UAAU,CAAC,EACzB,MAAM,EACN,IAAI,EACJ,MAAM,EAAE,YAAY,EACpB,KAAK,EACL,QAAQ,EACR,OAAO,EACP,YAAoC,GACrC,EAAE;IACD,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,QAAQ,EAAE,CAAC,IAAI,EAAE,YAAY,GAAG,aAAa,KAAK,IAAI,CAAC;IACvD,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,YAAY,CAAC,EAAE,SAAS,WAAW,EAAE,GAAG,SAAS,CAAC;CACnD,+BAqiBA"}