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

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 +185 -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.b2abf3c46f6e.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 +1137 -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,391 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { 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 { IdText } from '../components/ui/id-text.js';
10
+ import { Time } from '../components/ui/time.js';
11
+ import { Badge } from '../components/ui/badge.js';
12
+ import { ListState } from '../components/ui/list-state.js';
13
+ import { ConfirmAction } from '../components/ui/confirm-action.js';
14
+ import { createManagementStore, failureNotice, Field, formValues, ManagementFilters, ManagementNotice, parseManagementHash, requireReauth, revisionTag, useManagementHash, } from './management.js';
15
+ const VIEWS = ['grants', 'roles'];
16
+ export const parseAccessHash = (hash) => parseManagementHash(hash, VIEWS);
17
+ export const buildAccessHash = (query) => buildListFilterHash('access', parseAccessHash(buildListFilterHash('access', query)));
18
+ const rolesView = (state) => state.query.project === null && state.query.status === 'roles';
19
+ export function accessViewModel(state) {
20
+ const ready = !state.loading && !state.stale;
21
+ const prefix = state.query.q?.toLowerCase() ?? '';
22
+ return {
23
+ roles: state.roles.filter((role) => role.name.toLowerCase().startsWith(prefix)),
24
+ grants: state.grants.filter((grant) => [grant.principalName, grant.principalId, grant.id].some((value) => value?.toLowerCase().startsWith(prefix))),
25
+ writeRoles: ready && state.query.project === null && state.organization.includes('org:roles:write'),
26
+ writeGrants: ready &&
27
+ (state.query.project === null
28
+ ? state.organization.includes('org:grants:write')
29
+ : state.permissions.includes('project:grants:write')),
30
+ };
31
+ }
32
+ export function createAccessController(services) {
33
+ const store = createManagementStore({
34
+ query: { project: null },
35
+ roles: [],
36
+ grants: [],
37
+ next: null,
38
+ organization: [],
39
+ permissions: [],
40
+ loading: false,
41
+ listError: false,
42
+ busy: false,
43
+ stale: false,
44
+ notice: null,
45
+ });
46
+ const { client } = services;
47
+ let generation = 0;
48
+ async function load(query, notice = null) {
49
+ const current = ++generation;
50
+ store.set({
51
+ query,
52
+ roles: [],
53
+ grants: [],
54
+ next: null,
55
+ organization: [],
56
+ permissions: [],
57
+ loading: true,
58
+ listError: false,
59
+ busy: false,
60
+ stale: false,
61
+ notice,
62
+ });
63
+ const [organization, project] = await Promise.all([
64
+ client.request('get', '/_pb/me/permissions'),
65
+ query.project === null
66
+ ? null
67
+ : client.request('get', '/_pb/projects/{project}/permissions', {
68
+ params: { project: query.project },
69
+ }),
70
+ ]);
71
+ if (current !== generation)
72
+ return;
73
+ const orgPermissions = organization.ok ? organization.data.organization : [];
74
+ const permissions = project?.ok ? project.data.project : [];
75
+ store.set({ organization: orgPermissions, permissions });
76
+ const roles = rolesView(store.snapshot());
77
+ const canRead = query.project === null
78
+ ? orgPermissions.includes(roles ? 'org:roles:read' : 'org:grants:read')
79
+ : permissions.includes('project:grants:read');
80
+ if (!canRead) {
81
+ store.set({
82
+ loading: false,
83
+ listError: true,
84
+ notice: 'You do not have permission to view this list.',
85
+ });
86
+ return;
87
+ }
88
+ const page = { after: query.after, limit: '50' };
89
+ if (roles) {
90
+ const result = await client.request('get', '/_pb/roles', { query: page });
91
+ if (current !== generation)
92
+ return;
93
+ store.set({
94
+ loading: false,
95
+ listError: !result.ok,
96
+ roles: result.ok ? result.data.items : [],
97
+ next: result.ok ? result.data.next : null,
98
+ notice: result.ok ? notice : failureNotice(result),
99
+ });
100
+ }
101
+ else if (query.project !== null) {
102
+ const result = await client.request('get', '/_pb/projects/{project}/grants', {
103
+ params: { project: query.project },
104
+ query: page,
105
+ });
106
+ if (current !== generation)
107
+ return;
108
+ store.set({
109
+ loading: false,
110
+ listError: !result.ok,
111
+ grants: result.ok
112
+ ? result.data.items.map((item) => ({
113
+ id: item.id,
114
+ principalId: item.principal.id,
115
+ principalName: item.principal.displayName,
116
+ kind: item.principal.kind,
117
+ roleId: item.role.id,
118
+ roleName: item.role.name,
119
+ revision: item.revision,
120
+ createdAt: item.createdAt,
121
+ }))
122
+ : [],
123
+ next: result.ok ? result.data.next : null,
124
+ notice: result.ok ? notice : failureNotice(result),
125
+ });
126
+ }
127
+ else {
128
+ const result = await client.request('get', '/_pb/grants', { query: page });
129
+ if (current !== generation)
130
+ return;
131
+ store.set({
132
+ loading: false,
133
+ listError: !result.ok,
134
+ grants: result.ok
135
+ ? result.data.items.map((item) => ({
136
+ id: item.id,
137
+ principalId: null,
138
+ principalName: null,
139
+ kind: item.subject.type,
140
+ roleId: item.roleId,
141
+ roleName: item.roleId,
142
+ revision: item.revision,
143
+ createdAt: item.createdAt,
144
+ }))
145
+ : [],
146
+ next: result.ok ? result.data.next : null,
147
+ notice: result.ok ? notice : failureNotice(result),
148
+ });
149
+ }
150
+ }
151
+ async function write(run) {
152
+ const state = store.snapshot();
153
+ if (state.busy || state.loading || state.stale)
154
+ return;
155
+ const current = generation;
156
+ store.set({ busy: true, notice: null });
157
+ const result = await run();
158
+ if (current !== generation)
159
+ return;
160
+ store.set({ busy: false });
161
+ if (requireReauth(services, result))
162
+ store.set({
163
+ stale: true,
164
+ notice: 'Complete reauthentication and confirm the pending action.',
165
+ });
166
+ else if (!result.ok)
167
+ store.set({ stale: result.status === 412, notice: failureNotice(result) });
168
+ else
169
+ await load(state.query, 'Access updated.');
170
+ }
171
+ const mutableRole = (id) => {
172
+ const state = store.snapshot();
173
+ const role = state.roles.find((item) => item.id === id);
174
+ return accessViewModel(state).writeRoles && role && !role.isSystem && revisionTag(role.revision)
175
+ ? role
176
+ : null;
177
+ };
178
+ const mutableGrant = (id) => {
179
+ const state = store.snapshot();
180
+ const grant = state.grants.find((item) => item.id === id);
181
+ return accessViewModel(state).writeGrants && grant && revisionTag(grant.revision)
182
+ ? grant
183
+ : null;
184
+ };
185
+ return {
186
+ snapshot: store.snapshot,
187
+ subscribe: store.subscribe,
188
+ load,
189
+ async createGrant(body) {
190
+ const state = store.snapshot();
191
+ if (!accessViewModel(state).writeGrants)
192
+ return;
193
+ await write(() => state.query.project === null
194
+ ? client.request('post', '/_pb/grants', { body, idempotencyKey: crypto.randomUUID() })
195
+ : client.request('post', '/_pb/projects/{project}/grants', {
196
+ params: { project: state.query.project },
197
+ body,
198
+ idempotencyKey: crypto.randomUUID(),
199
+ }));
200
+ },
201
+ async changeGrant(id, roleId) {
202
+ const grant = mutableGrant(id);
203
+ if (!grant)
204
+ return;
205
+ const project = store.snapshot().query.project;
206
+ const headers = { 'If-Match': revisionTag(grant.revision) };
207
+ await write(() => project === null
208
+ ? client.request('patch', '/_pb/grants/{grant}', {
209
+ params: { grant: id },
210
+ headers,
211
+ body: { roleId },
212
+ })
213
+ : client.request('patch', '/_pb/projects/{project}/grants/{grant}', {
214
+ params: { project, grant: id },
215
+ headers,
216
+ body: { roleId },
217
+ }));
218
+ },
219
+ async revoke(id) {
220
+ const grant = mutableGrant(id);
221
+ if (!grant)
222
+ return;
223
+ const project = store.snapshot().query.project;
224
+ const headers = { 'If-Match': revisionTag(grant.revision) };
225
+ await write(() => project === null
226
+ ? client.request('delete', '/_pb/grants/{grant}', { params: { grant: id }, headers })
227
+ : client.request('delete', '/_pb/projects/{project}/grants/{grant}', {
228
+ params: { project, grant: id },
229
+ headers,
230
+ }));
231
+ },
232
+ async createRole(body) {
233
+ if (accessViewModel(store.snapshot()).writeRoles)
234
+ await write(() => client.request('post', '/_pb/roles', { body, idempotencyKey: crypto.randomUUID() }));
235
+ },
236
+ async updateRole(id, body) {
237
+ const role = mutableRole(id);
238
+ if (role)
239
+ await write(() => client.request('patch', '/_pb/roles/{role}', {
240
+ params: { role: id },
241
+ headers: { 'If-Match': revisionTag(role.revision) },
242
+ body,
243
+ }));
244
+ },
245
+ async deleteRole(id) {
246
+ const role = mutableRole(id);
247
+ if (role)
248
+ await write(() => client.request('delete', '/_pb/roles/{role}', {
249
+ params: { role: id },
250
+ headers: { 'If-Match': revisionTag(role.revision) },
251
+ }));
252
+ },
253
+ async replayed(result) {
254
+ const project = store.snapshot().query.project;
255
+ const prefix = project === null
256
+ ? rolesView(store.snapshot())
257
+ ? '/_pb/roles'
258
+ : '/_pb/grants'
259
+ : `/_pb/projects/${encodeURIComponent(project)}/grants`;
260
+ if (result.path !== prefix && !result.path.startsWith(`${prefix}/`))
261
+ return;
262
+ if (result.ok)
263
+ await load(store.snapshot().query, 'Access updated.');
264
+ else
265
+ store.set({ stale: true, notice: failureNotice(result) });
266
+ },
267
+ dispose() {
268
+ ++generation;
269
+ },
270
+ };
271
+ }
272
+ const permissionsOf = (value = '') => value.split(/[\s,]+/).filter(Boolean);
273
+ export function AccessView({ state, controller, }) {
274
+ const model = accessViewModel(state);
275
+ return (_jsxs(_Fragment, { children: [_jsx(ManagementNotice, { ...state, reload: () => void controller.load(state.query) }), rolesView(state) ? (_jsxs(_Fragment, { children: [!state.loading && !state.listError && model.roles.length ? (_jsx(DataTable, { label: "Roles", items: model.roles, columns: [
276
+ {
277
+ key: 'name',
278
+ label: 'Role',
279
+ value: (role) => role.name,
280
+ render: (role) => (_jsxs("div", { className: "grid gap-1", children: [_jsx("strong", { children: role.name }), _jsx(IdText, { value: role.id, label: "role ID" }), role.isSystem ? _jsx(Badge, { variant: "outline", children: "System" }) : null, role.protectsLastHolder ? (_jsx("span", { className: "text-xs text-neutral-600", children: "Last holder protected" })) : null] })),
281
+ },
282
+ { key: 'scope', label: 'Scope', value: (role) => role.scope },
283
+ {
284
+ key: 'permissions',
285
+ label: 'Permissions',
286
+ value: (role) => role.permissions.join(', '),
287
+ render: (role) => (_jsx("div", { className: "flex flex-wrap gap-1", children: role.permissions.map((permission) => (_jsx(Badge, { variant: "outline", children: permission }, permission))) })),
288
+ },
289
+ {
290
+ key: 'actions',
291
+ label: 'Actions',
292
+ value: () => '',
293
+ sortable: false,
294
+ render: (role) => model.writeRoles && !role.isSystem && revisionTag(role.revision) ? (_jsxs("details", { children: [_jsx("summary", { className: "cursor-pointer underline", children: "Edit role" }), _jsxs("div", { className: "mt-3 grid gap-3", children: [_jsxs("form", { className: "grid gap-2", onSubmit: (event) => {
295
+ event.preventDefault();
296
+ if (state.busy)
297
+ return;
298
+ const values = formValues(event);
299
+ void controller.updateRole(role.id, { name: values['name'] ?? '' });
300
+ }, children: [_jsx(Field, { name: "name", label: "Role name", value: role.name }), _jsx(Button, { type: "submit", disabled: state.busy, children: "Rename role" })] }), _jsxs("form", { className: "grid gap-2", onSubmit: (event) => {
301
+ event.preventDefault();
302
+ if (state.busy)
303
+ return;
304
+ const values = formValues(event);
305
+ void controller.updateRole(role.id, {
306
+ permissions: permissionsOf(values['permissions']),
307
+ });
308
+ }, children: [_jsx(Field, { name: "permissions", label: "Permissions (comma separated)", value: role.permissions.join(', '), required: false }), _jsx(Button, { type: "submit", disabled: state.busy, children: "Save permissions" })] }), _jsx(ConfirmAction, { action: "Remove role", target: `${role.name} (${role.id})`, scope: "Organization", description: "Deleting this role removes its permission bundle. Review grants using this role before continuing. This cannot be undone.", disabled: state.busy, onConfirm: () => void controller.deleteRole(role.id) }, `${role.id}:${role.revision}`)] })] })) : null,
309
+ },
310
+ ] })) : null, model.writeRoles ? (_jsxs("details", { className: "detail-group my-6", children: [_jsx("summary", { className: "cursor-pointer font-semibold", children: "New role" }), _jsxs("form", { className: "my-6 grid gap-3", onSubmit: (event) => {
311
+ event.preventDefault();
312
+ if (state.busy)
313
+ return;
314
+ const values = formValues(event);
315
+ void controller.createRole({
316
+ key: values['key'] ?? '',
317
+ name: values['name'] ?? '',
318
+ scope: values['scope'],
319
+ permissions: permissionsOf(values['permissions']),
320
+ });
321
+ }, children: [_jsx("h2", { className: "text-lg font-semibold", children: "New role" }), _jsx(Field, { name: "key", label: "Role key" }), _jsx(Field, { name: "name", label: "Role name" }), _jsxs(Label, { className: "grid gap-1", children: ["Scope", _jsxs(Select, { name: "scope", children: [_jsx("option", { value: "organization", children: "Organization" }), _jsx("option", { value: "project", children: "Project" })] })] }), _jsx(Field, { name: "permissions", label: "Permissions (comma separated)", required: false }), _jsx(Button, { type: "submit", disabled: state.busy, children: "Create role" })] })] })) : null] })) : (_jsxs(_Fragment, { children: [_jsx("h2", { className: "my-3 text-lg font-semibold", children: state.query.project === null ? 'Organization grants' : 'Members and project grants' }), !state.loading && !state.listError && model.grants.length ? (_jsx(DataTable, { label: state.query.project === null ? 'Organization grants' : 'Members and project grants', items: model.grants, columns: [
322
+ {
323
+ key: 'principal',
324
+ label: 'Principal / grant',
325
+ value: (grant) => grant.principalName ?? grant.principalId ?? grant.id,
326
+ render: (grant) => (_jsxs("div", { className: "grid gap-1", children: [_jsx("strong", { children: grant.principalName ?? 'Grant' }), _jsx(IdText, { value: grant.principalId ?? grant.id, label: grant.principalId ? 'principal ID' : 'grant ID' })] })),
327
+ },
328
+ {
329
+ key: 'kind',
330
+ label: 'Kind',
331
+ value: (grant) => grant.kind,
332
+ render: (grant) => _jsx(Badge, { variant: "outline", children: grant.kind }),
333
+ },
334
+ { key: 'role', label: 'Role', value: (grant) => grant.roleName },
335
+ {
336
+ key: 'added',
337
+ label: 'Added',
338
+ value: (grant) => grant.createdAt,
339
+ priority: 2,
340
+ render: (grant) => _jsx(Time, { value: grant.createdAt }),
341
+ },
342
+ {
343
+ key: 'id',
344
+ label: 'Grant ID',
345
+ value: (grant) => grant.id,
346
+ priority: 3,
347
+ render: (grant) => _jsx(IdText, { value: grant.id, label: "grant ID" }),
348
+ },
349
+ {
350
+ key: 'actions',
351
+ label: 'Actions',
352
+ value: () => '',
353
+ sortable: false,
354
+ render: (grant) => model.writeGrants && revisionTag(grant.revision) ? (_jsxs("details", { children: [_jsx("summary", { className: "cursor-pointer underline", children: "Edit grants" }), _jsxs("div", { className: "mt-3 grid gap-2", children: [_jsxs("form", { className: "grid gap-2", onSubmit: (event) => {
355
+ event.preventDefault();
356
+ if (state.busy)
357
+ return;
358
+ const values = formValues(event);
359
+ void controller.changeGrant(grant.id, values['roleId'] ?? '');
360
+ }, children: [_jsx(Field, { name: "roleId", label: "Role ID", value: grant.roleId }), _jsx(Button, { type: "submit", disabled: state.busy, children: "Change role" })] }), _jsx(ConfirmAction, { action: "Revoke", target: grant.principalName ?? grant.principalId ?? grant.id, scope: state.query.project === null
361
+ ? 'Organization'
362
+ : `Project: ${state.query.project}`, description: "Revoking this grant removes the access it provides. Other grants still apply. To give this access again, create a new grant.", disabled: state.busy, onConfirm: () => void controller.revoke(grant.id) }, `${grant.id}:${grant.revision}`)] })] })) : null,
363
+ },
364
+ ] })) : null, model.writeGrants ? (_jsxs("details", { className: "detail-group my-6", children: [_jsx("summary", { className: "cursor-pointer font-semibold", children: "New grant" }), _jsxs("form", { className: "my-6 grid gap-3", onSubmit: (event) => {
365
+ event.preventDefault();
366
+ if (state.busy)
367
+ return;
368
+ const values = formValues(event);
369
+ void controller.createGrant({
370
+ roleId: values['roleId'] ?? '',
371
+ subject: values['type'] === 'group'
372
+ ? {
373
+ type: 'group',
374
+ provider: values['provider'] ?? '',
375
+ value: values['subject'] ?? '',
376
+ }
377
+ : { type: 'email', value: values['subject'] ?? '' },
378
+ });
379
+ }, children: [_jsx("h2", { className: "text-lg font-semibold", children: "New grant" }), _jsx(Field, { name: "roleId", label: "Role ID" }), _jsxs(Label, { className: "grid gap-1", children: ["Subject type", _jsxs(Select, { name: "type", children: [_jsx("option", { value: "email", children: "Email" }), _jsx("option", { value: "group", children: "Group" })] })] }), _jsx(Field, { name: "subject", label: "Subject value" }), _jsx(Field, { name: "provider", label: "Provider (groups only)", required: false }), _jsx(Button, { type: "submit", disabled: state.busy, children: "Create grant" })] })] })) : null] })), !state.loading &&
380
+ !state.listError &&
381
+ (rolesView(state) ? model.roles : model.grants).length === 0 ? (_jsx(ListState, { kind: state.query.q ? 'filtered-empty' : 'empty', title: "No entries found on this page." })) : null, state.next ? (_jsx("a", { className: "my-4 inline-block underline", href: buildAccessHash({ ...state.query, after: state.next }), children: "Next entries" })) : null] }));
382
+ }
383
+ export function AccessPage() {
384
+ const services = useServices();
385
+ const controller = useMemo(() => createAccessController(services), [services]);
386
+ const state = useSyncExternalStore(controller.subscribe, controller.snapshot, controller.snapshot);
387
+ const hash = useManagementHash(services, controller, parseAccessHash, 'access');
388
+ const query = parseAccessHash(hash);
389
+ return (_jsxs("section", { "aria-labelledby": "page-heading", children: [_jsx("h1", { tabIndex: -1, id: "page-heading", className: "text-xl font-semibold", children: "Access" }), _jsx("p", { className: "mt-1 text-neutral-600", children: "Membership comes from project grants. A role is the bundle of permissions a grant carries." }), _jsx(ManagementFilters, { route: "access", query: query, statuses: query.project === null ? VIEWS : ['grants'] }, hash), _jsx(AccessView, { state: state, controller: controller })] }));
390
+ }
391
+ //# sourceMappingURL=access.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"access.js","sourceRoot":"","sources":["../../src/pages/access.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ import type { operations } from '../api-types.js';
2
+ import { type AuthClient } from '../auth.js';
3
+ type AuditList = operations['listAudit']['responses'][200]['content']['application/json'];
4
+ type AuditHead = operations['auditHead']['responses'][200]['content']['application/json'];
5
+ export interface AuditFilters {
6
+ actor: string;
7
+ action: string;
8
+ project: string;
9
+ limit: string;
10
+ after: string;
11
+ }
12
+ export declare function readAuditHash(hash: string): {
13
+ filters: AuditFilters;
14
+ scope: string | null;
15
+ };
16
+ export declare function auditHash(filters: AuditFilters, scope: string | null): string;
17
+ export declare function loadAudit(client: AuthClient, filters: AuditFilters, scope: string | null): Promise<{
18
+ data: {
19
+ items: {
20
+ action: string;
21
+ actor: {
22
+ id: string | null;
23
+ type: string;
24
+ };
25
+ createdAt: string;
26
+ id: string;
27
+ payload: {
28
+ changes?: {
29
+ [key: string]: {
30
+ new?: string | number | boolean | null | string[];
31
+ old?: string | number | boolean | null | string[];
32
+ };
33
+ };
34
+ op_id?: string;
35
+ request_id?: string;
36
+ };
37
+ projectId: string | null;
38
+ seq: number;
39
+ targetId: string | null;
40
+ targetType: string;
41
+ }[];
42
+ next: string | null;
43
+ } | null;
44
+ head: {
45
+ hash: string;
46
+ lastVerifiedAt: string | null;
47
+ pendingCount: number;
48
+ seq: number;
49
+ } | null;
50
+ error: string | null;
51
+ }>;
52
+ export declare function AuditView(props: {
53
+ filters: AuditFilters;
54
+ scope: string | null;
55
+ data: AuditList | null;
56
+ head: AuditHead | null;
57
+ error: string | null;
58
+ loading: boolean;
59
+ onNavigate: (filters: AuditFilters) => void;
60
+ }): import("react").JSX.Element;
61
+ export declare function AuditPage(): import("react").JSX.Element;
62
+ export {};
63
+ //# sourceMappingURL=audit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../src/pages/audit.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAe,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAW1D,KAAK,SAAS,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,CAAC;AAC1F,KAAK,SAAS,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,CAAC;AAC1F,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,YAAY,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAa3F;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAQ7E;AAED,wBAAsB,SAAS,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;;;;;;;;;;;uBA4S01qB,CAAC;;2BAA8D,CAAC;2BAAsE,CAAC;;;qBAA4G,CAAC;0BAAoC,CAAC;;;;;;;;;;;;;;;;GA3QjtrB;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE;IAC/B,OAAO,EAAE,YAAY,CAAC;IACtB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,IAAI,EAAE,SAAS,GAAG,IAAI,CAAC;IACvB,IAAI,EAAE,SAAS,GAAG,IAAI,CAAC;IACvB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,IAAI,CAAC;CAC7C,+BAkNA;AAED,wBAAgB,SAAS,gCA4CxB"}