Added
PageSettings.elements.errorHelpadds a deployment's help below the message of the error dialog, given the error code and message, such as a link for the code of a login provider it adds (#2369)useReportedQueryrequires anactionthat titles the error dialog with what failed, e.g. "Couldn’t load the namespace members", and anignorepredicate for the errors a page renders itself, e.g.isNotFoundfor a 404 shown as a not-found state;MainContext.handleErrortakes the dialogtitledirectly- Curated home rows are regions labelled with their title and set
aria-busywhile they load, so assistive technology can tell a loading row from a loaded one PageSettings.elements.userSettingsTabslets a deployment contribute user-settings tabs- The index exports
handleError,NO_CACHE,DelayedLoadIndicator,Timestamp,AddUserDialog,GenerateTokenDialog,SearchListContainer,createMultiSelectFilterOperators,createArrayContainsFilterOperators,SettingsHeaderandEmptyPlaceholder, for pages contributed throughadminPagesanduserSettingsTabs - Filter users on the Access Control page by granted permission and show each user's permissions as chips in the results;
useAdminUserSearchtakes an optionalpermission(#2399) - Registering a trusted publisher for a private repository shows its single-use registration code once and marks the registration as pending in the list until the first publish completes it (#2350)
Changed
- The error dialog no longer has help for the
eclipse-missing-github-idandeclipse-mismatch-github-idlogin errors, and a failed publisher agreement points topageSettings.publisherAgreement.email, or to the registry's administrators without one, instead ofwebmaster@eclipse.org; the error message itself is still shown (#2369) - The publisher agreement panel and the admin revoke dialog take the login they require from the new
publisherAgreement.loginProviderandloginProviderName(display label) fields ofUserDatainstead of assuming Eclipse; without it no extra login is asked for; their login links return to the page they were on - The publisher agreement panel shows a
revokedstatus without a sign action, a different message for anoutdatedone, and admins can reinstate a revoked agreement MainContextkeeps its value,handleErrorandupdateUserstable across renders, so consumers can depend on them in effects and skip needless re-renders- The default publisher agreement text URL is now the server's
/api/publisher-agreement, instead of/documents/publisher-agreement.md sendRequestrejects a 200 carrying an error result and no longer retries; retries belong to the query client, which waits out a 429 for queries and never retries a mutation.ExtensionRegistryServicequery methods take anAbortSignalinstead of anAbortControllerand write methods take neither; no method resolves anErrorResultany more but rejects with it, asgetUserdoes when nobody is logged in.- The error dialog is titled with what failed, e.g. "Couldn’t load the namespace members", instead of a bare "Error"
- A curated row on the home page that fails to load shows "We couldn’t load extensions at this time." with a Retry button instead of disappearing;
CuratedRowcarries the row'serrorand arefetchfor custom home pages AdminPermissionis a string,ADMIN_PERMISSIONSnames the built-in ones, and the Access Control page lists permissions from the server, so a deployment can register its own- Breaking:
AppProvidersno longer mounts theQueryClientProvideror takes aqueryClient;Mainmounts it above everything else, so a page that mountsAppProviderswithoutMainwraps it in its ownQueryClientProvider
Fixed
- A query reported through
useReportedQuery(or a page's own error effect) no longer reopens the error dialog in a loop that cannot be closed while the query stays failed (#2348) - A failed review post or removal, token revocation or user search no longer leaves its spinner running
- An expired session no longer leaves the UI logged in and failing every request until the page is reloaded: a 401 the registry confirms is the end of the session logs the user out and asks them to log in again, back to the page they were on, which needs a registry that answers 401 when nobody is logged in; any other 401 is reported as an error
- The extension details show no latest version, instead of a removed one, for an extension the registry no longer serves (#2409)
Removed
sendNonRetriableRequest,controllerFromSignaland theabortControllerfield ofServerAPIRequest: usesendRequestwithsignal, and pass aqueryFn'ssignalstraight to the service- The Rate Limiting admin pages (tiers, customers, usage stats), the user-settings Rate Limiting tab, the
manage_rate_limitspermission and the tier, customer, usage and rate limit token methods and types ofExtensionRegistryService: a deployment adds such pages throughPageSettings.elements.adminPagesanduserSettingsTabs
Dependencies
- Bump vite from 8.3.2 to 8.3.5 (#2357)
- Bump markdown-it from 14.3.2 to 14.3.3 (#2358)
- Bump undici from 8.11.2 to 8.12.3 (#2362)
- Remove
fetch-retry; the query client owns retries - Bump dompurify from 3.4.16 to 3.4.17 (#2379)
- Upgrade
yarnfrom 4.9.1 to 4.18.1 and setnpmMinimalAgeGateto 7 days, so versions published in the last 7 days are not picked for new resolutions (#2393) - Bump qs from 6.16.0 to 6.17.1 (#2429)