@package-broker/ui 2.0.0-rc.3 → 2.0.0-rc.5

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 (181) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/api-types.d.ts +9218 -3014
  3. package/dist/api-types.d.ts.map +1 -1
  4. package/dist/api.d.ts +1 -1
  5. package/dist/api.d.ts.map +1 -1
  6. package/dist/api.js +10 -0
  7. package/dist/api.js.map +1 -1
  8. package/dist/app-path.d.ts +2 -0
  9. package/dist/app-path.d.ts.map +1 -0
  10. package/dist/app-path.js +2 -0
  11. package/dist/app-path.js.map +1 -0
  12. package/dist/app.d.ts +2 -0
  13. package/dist/app.d.ts.map +1 -1
  14. package/dist/app.js +16 -3
  15. package/dist/app.js.map +1 -1
  16. package/dist/assets/access.def9a17dc4a8.js +1 -0
  17. package/dist/assets/app.ec678c27ec0a.css +2 -0
  18. package/dist/assets/{app.e8434f3343de.js → app.fba0d059b40b.js} +5 -5
  19. package/dist/assets/audit.453367b59daf.js +1 -0
  20. package/dist/assets/chunk.2c3648a5bad1.js +1 -0
  21. package/dist/assets/{chunk.bf48b04e6a00.js → chunk.304a2b5d1663.js} +1 -1
  22. package/dist/assets/{chunk.f922af39a279.js → chunk.3f077ff17cea.js} +1 -1
  23. package/dist/assets/chunk.4721d4544d48.js +1 -0
  24. package/dist/assets/{chunk.bb25fc845269.js → chunk.4acf8fa7653f.js} +1 -1
  25. package/dist/assets/{chunk.3704953b4a66.js → chunk.53134c7df4e5.js} +1 -1
  26. package/dist/assets/{chunk.862544cf5835.js → chunk.56e058d97e0f.js} +1 -1
  27. package/dist/assets/chunk.675b635d9462.js +1 -0
  28. package/dist/assets/chunk.75e1357175af.js +1 -0
  29. package/dist/assets/chunk.815f9a91c741.js +1 -0
  30. package/dist/assets/chunk.837eb41f53ef.js +1 -0
  31. package/dist/assets/{chunk.7cb6f6b4daaa.js → chunk.ab1a14143dc6.js} +1 -1
  32. package/dist/assets/{chunk.ce96495b8b55.js → chunk.dc41ee9219cf.js} +1 -1
  33. package/dist/assets/chunk.e3b0c44298fc.js +0 -0
  34. package/dist/assets/chunk.f0fd799728ef.js +1 -0
  35. package/dist/assets/chunk.fac952720b72.js +4 -0
  36. package/dist/assets/import.4275bbce08ac.js +1 -0
  37. package/dist/assets/index.html +9 -6
  38. package/dist/assets/manifest.json +66 -38
  39. package/dist/assets/notifications.bd7d4c3f9882.js +1 -0
  40. package/dist/assets/npm-login.d8b60e11fe87.js +1 -0
  41. package/dist/assets/packages.bdd474bcfc11.js +2 -0
  42. package/dist/assets/projects.44006a838c67.js +1 -0
  43. package/dist/assets/setup.7bc86366227c.js +1 -0
  44. package/dist/assets/setup.html +2 -2
  45. package/dist/assets/sources.d95aabfbec73.js +1 -0
  46. package/dist/assets/tokens.4ee13a722abb.js +4 -0
  47. package/dist/auth.d.ts +23 -3
  48. package/dist/auth.d.ts.map +1 -1
  49. package/dist/auth.js +142 -21
  50. package/dist/auth.js.map +1 -1
  51. package/dist/components/ui/status-badge.d.ts +5 -0
  52. package/dist/components/ui/status-badge.d.ts.map +1 -1
  53. package/dist/components/ui/status-badge.js +10 -0
  54. package/dist/components/ui/status-badge.js.map +1 -1
  55. package/dist/package-limits.d.ts +3 -0
  56. package/dist/package-limits.d.ts.map +1 -0
  57. package/dist/package-limits.js +3 -0
  58. package/dist/package-limits.js.map +1 -0
  59. package/dist/page-hash.d.ts +1 -1
  60. package/dist/page-hash.d.ts.map +1 -1
  61. package/dist/page-hash.js.map +1 -1
  62. package/dist/pages/access/grant-form.d.ts.map +1 -1
  63. package/dist/pages/access/grant-form.js +1 -1
  64. package/dist/pages/access/grant-form.js.map +1 -1
  65. package/dist/pages/audit.d.ts.map +1 -1
  66. package/dist/pages/notification-actions.d.ts +41 -0
  67. package/dist/pages/notification-actions.d.ts.map +1 -0
  68. package/dist/pages/notification-actions.js +187 -0
  69. package/dist/pages/notification-actions.js.map +1 -0
  70. package/dist/pages/notification-draft.d.ts +13 -0
  71. package/dist/pages/notification-draft.d.ts.map +1 -0
  72. package/dist/pages/notification-draft.js +75 -0
  73. package/dist/pages/notification-draft.js.map +1 -0
  74. package/dist/pages/notification-form.d.ts +35 -0
  75. package/dist/pages/notification-form.d.ts.map +1 -0
  76. package/dist/pages/notification-form.js +167 -0
  77. package/dist/pages/notification-form.js.map +1 -0
  78. package/dist/pages/notifications-controller.d.ts +41 -0
  79. package/dist/pages/notifications-controller.d.ts.map +1 -0
  80. package/dist/pages/notifications-controller.js +184 -0
  81. package/dist/pages/notifications-controller.js.map +1 -0
  82. package/dist/pages/notifications.d.ts +10 -0
  83. package/dist/pages/notifications.d.ts.map +1 -0
  84. package/dist/pages/notifications.js +301 -0
  85. package/dist/pages/notifications.js.map +1 -0
  86. package/dist/pages/npm-login.d.ts +2 -0
  87. package/dist/pages/npm-login.d.ts.map +1 -0
  88. package/dist/pages/npm-login.js +62 -0
  89. package/dist/pages/npm-login.js.map +1 -0
  90. package/dist/pages/packages/discovery-labels.d.ts +8 -0
  91. package/dist/pages/packages/discovery-labels.d.ts.map +1 -0
  92. package/dist/pages/packages/discovery-labels.js +25 -0
  93. package/dist/pages/packages/discovery-labels.js.map +1 -0
  94. package/dist/pages/packages/discovery-picker-view.d.ts +8 -0
  95. package/dist/pages/packages/discovery-picker-view.d.ts.map +1 -0
  96. package/dist/pages/packages/discovery-picker-view.js +109 -0
  97. package/dist/pages/packages/discovery-picker-view.js.map +1 -0
  98. package/dist/pages/packages/discovery-picker.d.ts +67 -0
  99. package/dist/pages/packages/discovery-picker.d.ts.map +1 -0
  100. package/dist/pages/packages/discovery-picker.js +238 -0
  101. package/dist/pages/packages/discovery-picker.js.map +1 -0
  102. package/dist/pages/packages/npm-workflow.d.ts +31 -0
  103. package/dist/pages/packages/npm-workflow.d.ts.map +1 -0
  104. package/dist/pages/packages/npm-workflow.js +381 -0
  105. package/dist/pages/packages/npm-workflow.js.map +1 -0
  106. package/dist/pages/packages/package-detail.d.ts +9 -0
  107. package/dist/pages/packages/package-detail.d.ts.map +1 -0
  108. package/dist/pages/packages/package-detail.js +242 -0
  109. package/dist/pages/packages/package-detail.js.map +1 -0
  110. package/dist/pages/packages/source-actions.d.ts +5 -2
  111. package/dist/pages/packages/source-actions.d.ts.map +1 -1
  112. package/dist/pages/packages/source-actions.js +27 -10
  113. package/dist/pages/packages/source-actions.js.map +1 -1
  114. package/dist/pages/packages.d.ts +15 -4
  115. package/dist/pages/packages.d.ts.map +1 -1
  116. package/dist/pages/packages.js +136 -19
  117. package/dist/pages/packages.js.map +1 -1
  118. package/dist/pages/projects/project-form.js +1 -1
  119. package/dist/pages/projects/project-form.js.map +1 -1
  120. package/dist/pages/projects.d.ts.map +1 -1
  121. package/dist/pages/projects.js +1 -1
  122. package/dist/pages/projects.js.map +1 -1
  123. package/dist/pages/sources/discovery-rule-prefill.d.ts +13 -0
  124. package/dist/pages/sources/discovery-rule-prefill.d.ts.map +1 -0
  125. package/dist/pages/sources/discovery-rule-prefill.js +9 -0
  126. package/dist/pages/sources/discovery-rule-prefill.js.map +1 -0
  127. package/dist/pages/sources/discovery-rules-view.d.ts +9 -0
  128. package/dist/pages/sources/discovery-rules-view.d.ts.map +1 -0
  129. package/dist/pages/sources/discovery-rules-view.js +144 -0
  130. package/dist/pages/sources/discovery-rules-view.js.map +1 -0
  131. package/dist/pages/sources/discovery-rules.d.ts +57 -0
  132. package/dist/pages/sources/discovery-rules.d.ts.map +1 -0
  133. package/dist/pages/sources/discovery-rules.js +383 -0
  134. package/dist/pages/sources/discovery-rules.js.map +1 -0
  135. package/dist/pages/sources/source-form.d.ts +3 -2
  136. package/dist/pages/sources/source-form.d.ts.map +1 -1
  137. package/dist/pages/sources/source-form.js +22 -12
  138. package/dist/pages/sources/source-form.js.map +1 -1
  139. package/dist/pages/sources.d.ts +9 -3
  140. package/dist/pages/sources.d.ts.map +1 -1
  141. package/dist/pages/sources.js +59 -12
  142. package/dist/pages/sources.js.map +1 -1
  143. package/dist/pages/tokens/issue-token-form.js +1 -1
  144. package/dist/pages/tokens/issue-token-form.js.map +1 -1
  145. package/dist/pages/tokens/principal-form.d.ts.map +1 -1
  146. package/dist/pages/tokens/principal-form.js +4 -0
  147. package/dist/pages/tokens/principal-form.js.map +1 -1
  148. package/dist/pages/tokens/trusted-publishers-controller.d.ts +42 -0
  149. package/dist/pages/tokens/trusted-publishers-controller.d.ts.map +1 -0
  150. package/dist/pages/tokens/trusted-publishers-controller.js +202 -0
  151. package/dist/pages/tokens/trusted-publishers-controller.js.map +1 -0
  152. package/dist/pages/tokens/trusted-publishers.d.ts +6 -0
  153. package/dist/pages/tokens/trusted-publishers.d.ts.map +1 -0
  154. package/dist/pages/tokens/trusted-publishers.js +116 -0
  155. package/dist/pages/tokens/trusted-publishers.js.map +1 -0
  156. package/dist/pages/tokens.d.ts +53 -0
  157. package/dist/pages/tokens.d.ts.map +1 -1
  158. package/dist/pages/tokens.js +9 -2
  159. package/dist/pages/tokens.js.map +1 -1
  160. package/dist/pending.d.ts +6 -1
  161. package/dist/pending.d.ts.map +1 -1
  162. package/dist/pending.js +1 -1
  163. package/dist/pending.js.map +1 -1
  164. package/dist/setup.d.ts +3 -2
  165. package/dist/setup.d.ts.map +1 -1
  166. package/dist/setup.js +66 -9
  167. package/dist/setup.js.map +1 -1
  168. package/package.json +3 -3
  169. package/dist/assets/access.6859f43998ca.js +0 -1
  170. package/dist/assets/app.f15f8f21f88b.css +0 -2
  171. package/dist/assets/audit.576009342714.js +0 -1
  172. package/dist/assets/chunk.297a2d571f9c.js +0 -4
  173. package/dist/assets/chunk.6e23a75a1324.js +0 -1
  174. package/dist/assets/chunk.855a50f45830.js +0 -1
  175. package/dist/assets/chunk.976a2ff4338e.js +0 -1
  176. package/dist/assets/import.e2a1e35fcb8d.js +0 -1
  177. package/dist/assets/packages.a8726e5144de.js +0 -1
  178. package/dist/assets/projects.711deb86b7c9.js +0 -1
  179. package/dist/assets/setup.dfed30ecfbad.js +0 -1
  180. package/dist/assets/sources.d0ba0048bd96.js +0 -1
  181. package/dist/assets/tokens.f48d235e8d25.js +0 -4
@@ -0,0 +1,301 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useEffect, useMemo, useRef, useState, useSyncExternalStore } from 'react';
3
+ import { useServices } from '../auth.js';
4
+ import { Button } from '../components/ui/button.js';
5
+ import { ConfirmAction } from '../components/ui/confirm-action.js';
6
+ import { ListState } from '../components/ui/list-state.js';
7
+ import { RowActions } from '../components/ui/row-actions.js';
8
+ import { Select } from '../components/ui/select.js';
9
+ import { StatusBadge } from '../components/ui/status-badge.js';
10
+ import { DataTable } from '../components/ui/table.js';
11
+ import { Time } from '../components/ui/time.js';
12
+ import { createEndpoint, deleteEndpoint, deliveryOutcome, eventLabel, setEnabled, stateSentence, updateEndpoint, } from './notification-actions.js';
13
+ import { takeNotificationDraft } from './notification-draft.js';
14
+ import { NotificationForm } from './notification-form.js';
15
+ import { createNotificationsController, } from './notifications-controller.js';
16
+ const MAX_ENDPOINTS = 20;
17
+ const FILTERS = [
18
+ { value: 'all', label: 'All deliveries' },
19
+ { value: 'pending', label: 'Waiting' },
20
+ { value: 'sending', label: 'Sending' },
21
+ { value: 'delivered', label: 'Delivered' },
22
+ { value: 'failed', label: 'Failed' },
23
+ { value: 'cancelled', label: 'Cancelled' },
24
+ ];
25
+ function useProjectSlug() {
26
+ const hash = useSyncExternalStore((listener) => {
27
+ window.addEventListener('hashchange', listener);
28
+ return () => window.removeEventListener('hashchange', listener);
29
+ }, () => window.location.hash, () => '');
30
+ const query = new URLSearchParams(hash.split('?')[1] ?? '');
31
+ const project = query.get('project');
32
+ return project !== null && /^[A-Za-z0-9._-]{1,64}$/.test(project) ? project : null;
33
+ }
34
+ export function NotificationsView(props) {
35
+ const { services, controller, project } = props;
36
+ const state = useSyncExternalStore(controller.subscribe, controller.snapshot, controller.snapshot);
37
+ const [form, setForm] = useState(null);
38
+ const restoredDraft = useRef(null);
39
+ const [restored, setRestored] = useState(null);
40
+ const [message, setMessage] = useState(null);
41
+ const [failure, setFailure] = useState(null);
42
+ const [stale, setStale] = useState(false);
43
+ const [busy, setBusy] = useState(null);
44
+ const [deleting, setDeleting] = useState(null);
45
+ useEffect(() => {
46
+ setForm(null);
47
+ setRestored(null);
48
+ setBusy(null);
49
+ setDeleting(null);
50
+ setMessage(null);
51
+ setFailure(null);
52
+ setStale(false);
53
+ void controller.load(project);
54
+ const isCurrent = controller.mutationScope();
55
+ if (restoredDraft.current?.project !== project)
56
+ restoredDraft.current = {
57
+ project,
58
+ value: project === null ? null : takeNotificationDraft(project),
59
+ };
60
+ const draft = restoredDraft.current.value;
61
+ if (draft !== null) {
62
+ const restore = (endpoint) => {
63
+ if (!isCurrent())
64
+ return;
65
+ setForm(endpoint);
66
+ setRestored(draft.options);
67
+ setMessage('Draft restored. Review it and enter the delivery settings again before saving.');
68
+ if (endpoint !== 'new' && endpoint.revision !== draft.endpoint?.revision) {
69
+ setStale(true);
70
+ setFailure('This endpoint changed while you were editing. Reload the latest settings before saving.');
71
+ }
72
+ };
73
+ if (draft.endpoint === null)
74
+ restore('new');
75
+ else
76
+ void services.client
77
+ .request('get', '/_pb/projects/{project}/notifications/{id}', {
78
+ params: { project: draft.project, id: draft.endpoint.id },
79
+ })
80
+ .then((result) => {
81
+ if (result.ok)
82
+ restore(result.data);
83
+ else if (isCurrent())
84
+ setFailure('The draft endpoint could not be loaded. Reload the list.');
85
+ });
86
+ }
87
+ return () => controller.dispose();
88
+ }, [controller, project, services]);
89
+ const projectLabel = props.projectName ?? project ?? '';
90
+ const settle = (id, outcome) => {
91
+ if (outcome.ok) {
92
+ if (outcome.endpoint !== null)
93
+ controller.replace(outcome.endpoint.id, outcome.endpoint);
94
+ else if (id !== null)
95
+ controller.replace(id, null);
96
+ setMessage(outcome.message);
97
+ setFailure(null);
98
+ setStale(false);
99
+ }
100
+ else {
101
+ setMessage(null);
102
+ setFailure(outcome.message);
103
+ setStale(outcome.stale);
104
+ }
105
+ return outcome;
106
+ };
107
+ const act = async (endpoint, run) => {
108
+ if (busy !== null || project === null)
109
+ return;
110
+ const isCurrent = controller.mutationScope();
111
+ setBusy(endpoint.id);
112
+ const outcome = await run(isCurrent);
113
+ if (!isCurrent())
114
+ return;
115
+ settle(endpoint.id, outcome);
116
+ setBusy(null);
117
+ };
118
+ const selected = state.items.find((item) => item.id === state.selected) ?? null;
119
+ if (project === null)
120
+ return (_jsxs("section", { className: "space-y-4", children: [_jsx("h1", { className: "text-2xl font-semibold", children: "Notifications" }), _jsx(ListState, { kind: "placeholder", title: "Choose a project to manage its notifications.", children: _jsx("p", { children: "Notification endpoints belong to one project. Pick it in the Scope menu." }) })] }));
121
+ return (_jsxs("section", { className: "space-y-4", children: [_jsx("h1", { className: "text-2xl font-semibold", children: "Notifications" }), _jsx("p", { children: `Project ${projectLabel} · Send a signed request to your own HTTPS receiver when a package in this project is published, released, removed, deprecated or re-tagged. Delivery is retried for up to 24 hours and is not guaranteed.` }), _jsx("div", { role: "status", "aria-live": "polite", children: message }), failure === null ? null : (_jsxs("div", { role: "alert", className: "space-y-2 text-red-700", children: [_jsx("p", { children: failure }), stale ? (_jsx(Button, { type: "button", variant: "outline", className: "min-h-11", onClick: () => {
122
+ setStale(false);
123
+ setFailure(null);
124
+ setForm(null);
125
+ void controller.load();
126
+ }, children: "Reload latest settings" })) : null] })), state.blocked === 'denied' ? (_jsx(ListState, { kind: "error", title: "You cannot manage notifications in this project.", children: _jsx("p", { children: "Changing project settings in a signed-in session is required." }) })) : state.blocked === 'unavailable' ? (_jsx(ListState, { kind: "placeholder", title: "Notifications are not available.", children: _jsx("p", { children: "This broker has notifications turned off, or the project is archived or not visible to you." }) })) : state.blocked === 'error' ? (_jsx(ListState, { kind: "error", title: "Notification endpoints could not be loaded. Try again.", children: _jsx(Button, { type: "button", className: "min-h-11", onClick: () => void controller.load(), children: "Try again" }) })) : (_jsxs(_Fragment, { children: [_jsxs("div", { className: "flex flex-wrap gap-2", children: [form === null ? (_jsx(Button, { type: "button", className: "min-h-11 w-full sm:w-auto", disabled: state.loading || state.items.length >= MAX_ENDPOINTS, "aria-describedby": state.items.length >= MAX_ENDPOINTS ? 'notification-limit' : undefined, onClick: () => {
127
+ setMessage(null);
128
+ setFailure(null);
129
+ setRestored(null);
130
+ setForm('new');
131
+ }, children: "Add endpoint" })) : null, _jsx(Button, { type: "button", variant: "outline", className: "min-h-11 w-full sm:w-auto", disabled: state.loading, onClick: () => void controller.load(), children: "Reload" })] }), state.items.length >= MAX_ENDPOINTS ? (_jsx("p", { id: "notification-limit", children: "A project can have at most 20 endpoints." })) : null, form === null ? null : (_jsx(NotificationForm, { projectName: projectLabel, endpoint: form === 'new' ? null : form, disabled: stale, ...(restored === null ? {} : { restoredOptions: restored, requireSecret: true }), onCancel: () => setForm(null), onSubmit: async (change) => {
132
+ const isCurrent = controller.mutationScope();
133
+ const outcome = form === 'new'
134
+ ? await createEndpoint(services, project, change.options, change.secret, isCurrent)
135
+ : await updateEndpoint(services, project, form, change, isCurrent);
136
+ if (!isCurrent())
137
+ return outcome;
138
+ settle(null, outcome);
139
+ if (outcome.ok)
140
+ setForm(null);
141
+ return outcome;
142
+ } }, `${project}/${form === 'new' ? 'new' : form.id}`)), state.loading ? (_jsx(ListState, { kind: "loading", title: "Loading notification endpoints\u2026" })) : state.items.length === 0 ? (_jsx(ListState, { kind: "empty", title: state.hasPrevious
143
+ ? 'No endpoints on this page.'
144
+ : 'No notification endpoints yet. Add one to tell another system about package changes.' })) : (_jsx(DataTable, { label: `Notification endpoints in ${projectLabel}`, items: state.items, ...(state.selected === null ? {} : { selectedId: state.selected }), columns: [
145
+ {
146
+ key: 'name',
147
+ label: 'Endpoint',
148
+ value: (item) => item.name,
149
+ render: (item) => (_jsxs("div", { className: "break-words", children: [_jsx("strong", { children: item.name }), _jsxs("p", { className: "text-sm text-neutral-600", children: [item.method, " \u00B7 signed", item.headersConfigured ? ' · custom headers' : '', item.templateConfigured ? ' · body template' : ''] })] })),
150
+ },
151
+ {
152
+ key: 'events',
153
+ label: 'Events and packages',
154
+ value: (item) => item.events.length,
155
+ render: (item) => (_jsxs("div", { className: "break-words", children: [_jsx("p", { children: item.events.map(eventLabel).join(', ') }), _jsx("p", { className: "font-mono text-sm", children: item.packagePattern })] })),
156
+ },
157
+ {
158
+ key: 'state',
159
+ label: 'Status',
160
+ value: (item) => item.state,
161
+ render: (item) => (_jsxs("div", { className: "space-y-1", children: [_jsx(StatusBadge, { status: item.state }), _jsx("p", { className: "text-sm", children: stateSentence(item) }), item.failureStreak > 0 ? (_jsx("p", { className: "text-sm", children: `${item.failureStreak} failed ${item.failureStreak === 1 ? 'delivery' : 'deliveries'} in a row.` })) : null] })),
162
+ },
163
+ {
164
+ key: 'updated',
165
+ label: 'Changed',
166
+ value: (item) => item.updatedAt,
167
+ priority: 2,
168
+ render: (item) => _jsx(Time, { value: item.updatedAt }),
169
+ },
170
+ {
171
+ key: 'actions',
172
+ label: 'Actions',
173
+ value: () => '',
174
+ sortable: false,
175
+ render: (item) => (_jsx(RowActions, { entityLabel: item.name, actions: [
176
+ {
177
+ id: 'history',
178
+ label: 'Delivery history',
179
+ onSelect: () => void controller.select(item.id),
180
+ },
181
+ ], overflow: [
182
+ {
183
+ id: 'edit',
184
+ label: 'Edit',
185
+ disabled: busy !== null || stale,
186
+ onSelect: () => {
187
+ setMessage(null);
188
+ setFailure(null);
189
+ setRestored(null);
190
+ setForm(item);
191
+ },
192
+ },
193
+ item.state === 'enabled'
194
+ ? {
195
+ id: 'disable',
196
+ label: 'Disable',
197
+ pending: busy === item.id,
198
+ disabled: stale,
199
+ onSelect: () => void act(item, (isCurrent) => setEnabled(services, project, item, false, isCurrent)),
200
+ }
201
+ : {
202
+ id: 'enable',
203
+ label: 'Enable',
204
+ pending: busy === item.id,
205
+ disabled: stale,
206
+ onSelect: () => void act(item, (isCurrent) => setEnabled(services, project, item, true, isCurrent)),
207
+ },
208
+ {
209
+ id: 'delete',
210
+ label: 'Remove',
211
+ variant: 'destructive',
212
+ disabled: busy !== null || stale,
213
+ onSelect: () => setDeleting(item),
214
+ },
215
+ ] })),
216
+ },
217
+ ] })), _jsx("p", { children: `${state.items.length} ${state.items.length === 1 ? 'endpoint' : 'endpoints'} on this page` }), state.hasPrevious || state.next !== null ? (_jsxs("div", { className: "flex flex-wrap gap-2", children: [_jsx(Button, { type: "button", variant: "outline", className: "min-h-11", disabled: state.loading || !state.hasPrevious, onClick: () => void controller.previousPage(), children: "Previous endpoints" }), _jsx(Button, { type: "button", variant: "outline", className: "min-h-11", disabled: state.loading || state.next === null, onClick: () => void controller.nextPage(), children: "Next endpoints" })] })) : null, deleting === null ? null : (_jsx(ConfirmAction, { action: "Remove endpoint", target: deleting.name, scope: `Project ${projectLabel}`, description: "No further events are sent to this receiver and deliveries still waiting are cancelled. A request already on its way cannot be recalled. Removing it needs a recent sign-in and cannot be undone.", open: true, hideTrigger: true, onOpenChange: (open) => {
218
+ if (!open)
219
+ setDeleting(null);
220
+ }, onConfirm: () => {
221
+ const target = deleting;
222
+ setDeleting(null);
223
+ void act(target, (isCurrent) => deleteEndpoint(services, project, target, isCurrent));
224
+ } })), selected === null ? null : _jsx(History, { controller: controller, name: selected.name })] }))] }));
225
+ }
226
+ function attemptText(attempt) {
227
+ const outcome = attempt.outcome === 'started'
228
+ ? 'started, result not recorded yet'
229
+ : deliveryOutcome({
230
+ state: attempt.outcome === 'delivered' ? 'delivered' : 'failed',
231
+ outcomeCode: attempt.outcomeCode,
232
+ });
233
+ return `${outcome}${attempt.status === null ? '' : ` (HTTP ${attempt.status})`}${attempt.durationMs === null ? '' : `, ${attempt.durationMs} ms`}`;
234
+ }
235
+ function History({ controller, name }) {
236
+ const state = useSyncExternalStore(controller.subscribe, controller.snapshot, controller.snapshot);
237
+ return (_jsxs("section", { "aria-labelledby": "delivery-history", className: "space-y-4", children: [_jsx("h2", { id: "delivery-history", className: "text-lg font-semibold", children: `Delivery history: ${name}` }), _jsx("p", { children: "Finished deliveries are kept for seven days. Request and response bodies, addresses and headers are never stored." }), _jsxs("div", { className: "flex flex-wrap items-end gap-2", children: [_jsxs("label", { className: "grid gap-1", children: ["Show", _jsx(Select, { value: state.filter, onChange: (event) => void controller.filterHistory(event.target.value), children: FILTERS.map((filter) => (_jsx("option", { value: filter.value, children: filter.label }, filter.value))) })] }), _jsx(Button, { type: "button", variant: "outline", className: "min-h-11", disabled: state.deliveriesLoading, onClick: () => void controller.reloadHistory(), children: "Reload history" }), _jsx(Button, { type: "button", variant: "outline", className: "min-h-11", onClick: () => void controller.select(null), children: "Close history" })] }), state.deliveriesLoading ? (_jsx(ListState, { kind: "loading", title: "Loading deliveries\u2026" })) : state.deliveriesError ? (_jsx(ListState, { kind: "error", title: "Deliveries could not be loaded. Try again.", children: _jsx(Button, { type: "button", className: "min-h-11", onClick: () => void controller.reloadHistory(), children: "Try again" }) })) : state.deliveries.length === 0 ? (_jsx(ListState, { kind: state.filter === 'all' ? 'empty' : 'filtered-empty', title: state.filter === 'all'
238
+ ? 'No deliveries yet. Events committed while the endpoint is enabled appear here.'
239
+ : 'No deliveries match this filter on this page.' })) : (_jsx(DataTable, { label: `Deliveries to ${name}`, items: state.deliveries, columns: [
240
+ {
241
+ key: 'event',
242
+ label: 'Event',
243
+ value: (item) => item.eventType,
244
+ render: (item) => eventLabel(item.eventType),
245
+ },
246
+ {
247
+ key: 'created',
248
+ label: 'Created',
249
+ value: (item) => item.createdAt,
250
+ render: (item) => _jsx(Time, { value: item.createdAt }),
251
+ },
252
+ {
253
+ key: 'result',
254
+ label: 'Result',
255
+ value: (item) => item.state,
256
+ render: (item) => (_jsxs("div", { className: "space-y-1", children: [_jsx(StatusBadge, { status: item.state }), _jsx("p", { className: "text-sm", children: `${deliveryOutcome(item)}${item.lastStatus === null ? '' : ` (HTTP ${item.lastStatus})`}` }), item.nextAttemptAt === null ? null : (_jsxs("p", { className: "text-sm", children: ["Next attempt ", _jsx(Time, { value: item.nextAttemptAt })] }))] })),
257
+ },
258
+ {
259
+ key: 'attempts',
260
+ label: 'Attempts',
261
+ value: (item) => item.attempts,
262
+ render: (item) => `${item.attempts} of 8`,
263
+ },
264
+ {
265
+ key: 'actions',
266
+ label: 'Actions',
267
+ value: () => '',
268
+ sortable: false,
269
+ render: (item) => (_jsx(RowActions, { entityLabel: `${eventLabel(item.eventType)} delivery`, actions: [
270
+ {
271
+ id: 'attempts',
272
+ label: 'Show attempts',
273
+ onSelect: () => void controller.openDelivery(item.id),
274
+ },
275
+ ] })),
276
+ },
277
+ ] })), state.deliveriesHasPrevious || state.deliveriesNext !== null ? (_jsxs("div", { className: "flex flex-wrap gap-2", children: [_jsx(Button, { type: "button", variant: "outline", className: "min-h-11", disabled: state.deliveriesLoading || !state.deliveriesHasPrevious, onClick: () => void controller.previousHistory(), children: "Newer deliveries" }), _jsx(Button, { type: "button", variant: "outline", className: "min-h-11", disabled: state.deliveriesLoading || state.deliveriesNext === null, onClick: () => void controller.nextHistory(), children: "Older deliveries" })] })) : null, state.detailError ? (_jsx("p", { role: "alert", children: "The attempts of this delivery could not be loaded." })) : state.detail === null ? null : (_jsxs("section", { "aria-labelledby": "delivery-attempts", className: "space-y-2", children: [_jsx("h3", { id: "delivery-attempts", className: "font-semibold", children: `Attempts for the ${eventLabel(state.detail.eventType)} delivery` }), state.detail.history.length === 0 ? (_jsx("p", { children: "No attempt has started." })) : (_jsx("ol", { className: "list-decimal space-y-1 pl-6", children: state.detail.history.map((attempt) => (_jsxs("li", { children: [_jsx(Time, { value: attempt.startedAt }), `: ${attemptText(attempt)}`] }, attempt.attempt))) }))] }))] }));
278
+ }
279
+ export function NotificationsPage() {
280
+ const services = useServices();
281
+ const controller = useMemo(() => createNotificationsController(services), [services]);
282
+ const project = useProjectSlug();
283
+ const [projectName, setProjectName] = useState(null);
284
+ useEffect(() => {
285
+ setProjectName(null);
286
+ if (project === null)
287
+ return;
288
+ let live = true;
289
+ void services.client
290
+ .request('get', '/_pb/projects/{project}', { params: { project } })
291
+ .then((result) => {
292
+ if (live && result.ok)
293
+ setProjectName(result.data.name);
294
+ });
295
+ return () => {
296
+ live = false;
297
+ };
298
+ }, [services, project]);
299
+ return (_jsx(NotificationsView, { services: services, controller: controller, project: project, projectName: projectName }));
300
+ }
301
+ //# sourceMappingURL=notifications.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notifications.js","sourceRoot":"","sources":["../../src/pages/notifications.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function NpmLoginPage(): import("react").JSX.Element;
2
+ //# sourceMappingURL=npm-login.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"npm-login.d.ts","sourceRoot":"","sources":["../../src/pages/npm-login.tsx"],"names":[],"mappings":"AASA,wBAAgB,YAAY,gCAG3B"}
@@ -0,0 +1,62 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect, useState } from 'react';
3
+ import { useServices } from '../auth.js';
4
+ import { Button } from '../components/ui/button.js';
5
+ import { Label } from '../components/ui/label.js';
6
+ import { Select } from '../components/ui/select.js';
7
+ import { Alert, AlertDescription } from '../components/ui/alert.js';
8
+ import { Time } from '../components/ui/time.js';
9
+ export function NpmLoginPage() {
10
+ const selector = /^#\/npm-login\/([A-Za-z0-9_-]{43})$/.exec(window.location.hash)?.[1] ?? '';
11
+ return _jsx(NpmLoginConfirmation, { selector: selector }, selector);
12
+ }
13
+ function NpmLoginConfirmation({ selector }) {
14
+ const { client } = useServices();
15
+ const [request, setRequest] = useState(null);
16
+ const [write, setWrite] = useState(false);
17
+ const [scope, setScope] = useState('read');
18
+ const [state, setState] = useState('loading');
19
+ useEffect(() => {
20
+ let active = true;
21
+ void client
22
+ .request('get', '/_pb/me/npm-login/{selector}', { params: { selector } })
23
+ .then(async (result) => {
24
+ if (!active)
25
+ return;
26
+ if (!result.ok) {
27
+ setState(result.code === 'reauth_required' ? 'reauth' : 'error');
28
+ return;
29
+ }
30
+ setRequest(result.data);
31
+ setState('ready');
32
+ const permissions = await client.request('get', '/_pb/projects/{project}/permissions', {
33
+ params: { project: result.data.project.slug },
34
+ });
35
+ if (active)
36
+ setWrite(permissions.ok && permissions.data.project.includes('project:packages:write'));
37
+ });
38
+ return () => {
39
+ active = false;
40
+ };
41
+ }, [client, selector]);
42
+ async function confirm(event) {
43
+ event.preventDefault();
44
+ if ((state !== 'ready' && state !== 'failed') || request === null)
45
+ return;
46
+ setState('busy');
47
+ const result = await client.request('post', '/_pb/me/npm-login/{selector}', {
48
+ params: { selector },
49
+ body: { scope: scope === 'write' ? 'write' : 'read' },
50
+ });
51
+ setState(result.ok
52
+ ? 'done'
53
+ : result.code === 'reauth_required'
54
+ ? 'reauth'
55
+ : result.code === 'conflict'
56
+ ? 'conflict'
57
+ : 'failed');
58
+ }
59
+ return (_jsxs("section", { className: "max-w-2xl space-y-4", children: [_jsx("h1", { className: "text-2xl font-semibold", children: "Confirm npm login" }), _jsx(Alert, { children: _jsx(AlertDescription, { children: "Only continue if you ran npm login yourself a moment ago. Someone else may have sent you this link to gain access through your account." }) }), state === 'loading' && _jsx("p", { role: "status", children: "Loading login request\u2026" }), state === 'reauth' && (_jsxs("p", { children: ["Confirm your identity before reviewing this request.", ' ', _jsx("a", { className: "underline", href: `#/reauth?return=${encodeURIComponent(`/npm-login/${selector}`)}`, children: "Reauthenticate" })] })), ['error', 'conflict'].includes(state) && (_jsx("p", { role: "alert", children: "This login request is unavailable or has already been confirmed. Run npm login again." })), state === 'done' ? (_jsx("p", { role: "status", children: "Login approved. Return to your terminal to collect the token." })) : (request !== null &&
60
+ state !== 'reauth' && (_jsxs("form", { onSubmit: (event) => void confirm(event), className: "space-y-4", children: [_jsxs("dl", { className: "space-y-2 break-words", children: [_jsx("dt", { children: "Project" }), _jsxs("dd", { children: [request.project.name, " (", request.project.slug, ")"] }), _jsx("dt", { children: "CLI hostname" }), _jsx("dd", { children: request.cliHostname ?? 'Unavailable' }), _jsx("dt", { children: "Source IP" }), _jsx("dd", { children: request.sourceIp ?? 'Unavailable' }), _jsx("dt", { children: "Requested" }), _jsx("dd", { children: _jsx(Time, { value: request.createdAt }) }), _jsx("dt", { children: "Request expires" }), _jsx("dd", { children: _jsx(Time, { value: request.expiresAt }) })] }), _jsxs("div", { children: [_jsx(Label, { htmlFor: "npm-login-scope", children: "Token access" }), _jsxs(Select, { id: "npm-login-scope", value: scope, onChange: (event) => setScope(event.target.value), disabled: state === 'busy', children: [_jsx("option", { value: "read", children: "Install and download" }), write && _jsx("option", { value: "write", children: "Install, download and publish" })] })] }), _jsx("p", { children: "This creates a personal token for this project with the organization\u2019s default lifetime. It carries only permissions you currently hold." }), state === 'failed' && (_jsx("p", { role: "alert", children: "Login could not be approved. Review the request before trying again." })), _jsx(Button, { type: "submit", disabled: state !== 'ready' && state !== 'failed', className: "min-h-11 w-full sm:w-auto", children: state === 'busy' ? 'Approving login…' : 'Approve login' }), state === 'failed' && (_jsx(Button, { type: "button", onClick: () => setState('ready'), children: "Review again" }))] })))] }));
61
+ }
62
+ //# sourceMappingURL=npm-login.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"npm-login.js","sourceRoot":"","sources":["../../src/pages/npm-login.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { operations } from '../../api-types.js';
2
+ export type DiscoveryConnection = operations['listSourceDiscoveryConnections']['responses'][200]['content']['application/json']['items'][number];
3
+ export declare function connectionLabel(c: DiscoveryConnection): string;
4
+ export declare const PATTERN_HELP = "Use * for any name or ? for one character. The default * includes all names.";
5
+ export declare const PATTERN_ERROR = "Enter a repository name pattern of 1 to 100 letters, numbers, dots, underscores, hyphens, * or ?.";
6
+ export declare function validDiscoveryPattern(pattern: string): boolean;
7
+ export declare function discoveryReason(reason: string | null | undefined): string;
8
+ //# sourceMappingURL=discovery-labels.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovery-labels.d.ts","sourceRoot":"","sources":["../../../src/pages/packages/discovery-labels.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD,MAAM,MAAM,mBAAmB,GAC7B,UAAU,CAAC,gCAAgC,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,kBAAkB,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC;AACjH,wBAAgB,eAAe,CAAC,CAAC,EAAE,mBAAmB,GAAG,MAAM,CAE9D;AACD,eAAO,MAAM,YAAY,iFACuD,CAAC;AACjF,eAAO,MAAM,aAAa,sGAC2E,CAAC;AACtG,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE9D;AAiBD,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,UAIhE"}
@@ -0,0 +1,25 @@
1
+ export function connectionLabel(c) {
2
+ return `${c.sourceNames.join(', ')}${c.sourceCount > c.sourceNames.length ? ` and ${c.sourceCount - c.sourceNames.length} more sources` : ''} · Installation ${c.installationId}`;
3
+ }
4
+ export const PATTERN_HELP = 'Use * for any name or ? for one character. The default * includes all names.';
5
+ export const PATTERN_ERROR = 'Enter a repository name pattern of 1 to 100 letters, numbers, dots, underscores, hyphens, * or ?.';
6
+ export function validDiscoveryPattern(pattern) {
7
+ return /^[A-Za-z0-9._*?-]{1,100}$/.test(pattern || '*');
8
+ }
9
+ const reasons = {
10
+ fork: 'Fork — Enable Include forks to consider this repository.',
11
+ archived: 'Archived — Archived repositories are not imported.',
12
+ no_manifest: 'No package manifest — Add a manifest for this ecosystem before importing.',
13
+ invalid_name: 'Invalid package name — Correct the manifest name before importing.',
14
+ name_public: 'Public package name — Choose a private name before importing.',
15
+ name_public_unverified: 'Name could not be verified — Try again when the public registry is available.',
16
+ claim_overlap: 'Name claimed by another source — Resolve the source conflict before importing.',
17
+ filtered_out: 'Outside the name pattern — Change the pattern to include this repository.',
18
+ error_451: 'Repository legally unavailable (451) — This repository cannot be imported.',
19
+ error_404: 'Repository unavailable (404) — Check the connection has access before trying again.',
20
+ unsupported_ecosystem: 'Unsupported ecosystem — This repository has no Composer or npm package to import.',
21
+ };
22
+ export function discoveryReason(reason) {
23
+ return (reasons[reason ?? ''] ?? 'Import refused — Review the repository settings before trying again.');
24
+ }
25
+ //# sourceMappingURL=discovery-labels.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovery-labels.js","sourceRoot":"","sources":["../../../src/pages/packages/discovery-labels.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,eAAe,CAAC,CAAsB;IACpD,OAAO,GAAG,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,WAAW,CAAC,MAAM,eAAe,CAAC,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAC,cAAc,EAAE,CAAC;AACpL,CAAC;AACD,MAAM,CAAC,MAAM,YAAY,GACvB,8EAA8E,CAAC;AACjF,MAAM,CAAC,MAAM,aAAa,GACxB,mGAAmG,CAAC;AACtG,MAAM,UAAU,qBAAqB,CAAC,OAAe;IACnD,OAAO,2BAA2B,CAAC,IAAI,CAAC,OAAO,IAAI,GAAG,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,OAAO,GAA2B;IACtC,IAAI,EAAE,0DAA0D;IAChE,QAAQ,EAAE,oDAAoD;IAC9D,WAAW,EAAE,2EAA2E;IACxF,YAAY,EAAE,oEAAoE;IAClF,WAAW,EAAE,+DAA+D;IAC5E,sBAAsB,EACpB,+EAA+E;IACjF,aAAa,EAAE,gFAAgF;IAC/F,YAAY,EAAE,2EAA2E;IACzF,SAAS,EAAE,4EAA4E;IACvF,SAAS,EAAE,qFAAqF;IAChG,qBAAqB,EACnB,mFAAmF;CACtF,CAAC;AACF,MAAM,UAAU,eAAe,CAAC,MAAiC;IAC/D,OAAO,CACL,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,IAAI,sEAAsE,CAChG,CAAC;AACJ,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { ShellServices } from '../../auth.js';
2
+ export declare function DiscoveryPicker({ services, ecosystem, onBack, onImportingChange, }: {
3
+ services: ShellServices;
4
+ ecosystem: 'composer' | 'npm';
5
+ onBack: () => void;
6
+ onImportingChange: (importing: boolean) => void;
7
+ }): import("react").JSX.Element;
8
+ //# sourceMappingURL=discovery-picker-view.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovery-picker-view.d.ts","sourceRoot":"","sources":["../../../src/pages/packages/discovery-picker-view.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AASnD,wBAAgB,eAAe,CAAC,EAC9B,QAAQ,EACR,SAAS,EACT,MAAM,EACN,iBAAiB,GAClB,EAAE;IACD,QAAQ,EAAE,aAAa,CAAC;IACxB,SAAS,EAAE,UAAU,GAAG,KAAK,CAAC;IAC9B,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,iBAAiB,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;CACjD,+BAiWA"}