docs/releases/v1.54.0-next.3-changelog.md
Upgrade Helper: https://backstage.github.io/upgrade-helper/?to=1.54.0-next.3
dba1eed: BREAKING: Connection lookups now take a query object instead of a url. Every connection type declares which query it accepts, so types that are not identified by a URL can be looked up by other identifiers. All built-in connection types are still matched by URL, so existing lookups just move the URL into the query:
const connection = await connections.find({
type: 'github',
query: { url },
authMethods: ['app', 'token'],
});
Connections returned from a lookup now also include their type.
87bfe22: GitHub integrations now cache the list of app installations for a short period, avoiding a full GET /app/installations pagination on every token fetch. This significantly reduces API usage against the 15k/hour GitHub App rate limit for organizations with many installations or frequent credential refreshes.
The cache is refreshed on a 10-minute TTL, and is additionally invalidated when a lookup for a previously-unseen owner occurs (throttled to once per minute) or when GitHub reports that a cached installation is no longer available, so newly added or removed installations are still picked up promptly.
Updated dependencies
skipUserProfile configuration option to true disables this extra call.defaultConfig for defining the initial grid layout via app-config.HomePageDefaultConfigItem type and optional defaultConfig prop to HomePageLayoutProps.scopes_supported to the OAuth 2.0 Protected Resource Metadata (RFC 9728) response. Without this field, RFC-compliant MCP clients did not know which scope to request and never received a refresh token, causing sessions to expire with the short-lived access token. The field now includes openid, and also offline_access when auth.experimentalRefreshToken is enabled.