Add FetchMiddlewares.clarifyFailures and improve permission error handling

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Signed-off-by: Fredrik Adelöw <freben@spotify.com>
This commit is contained in:
Fredrik Adelöw
2026-03-28 16:55:33 +01:00
parent 7d942709fa
commit 400aa2313a
9 changed files with 141 additions and 11 deletions
@@ -24,6 +24,7 @@ import type {
EvaluatePermissionRequest,
EvaluatePermissionResponse,
} from '@backstage/plugin-permission-common';
import { assertError, ForwardedError } from '@backstage/errors';
export type ExtensionPredicateContext = {
featureFlags: string[];
@@ -84,17 +85,25 @@ export function createPredicateContextLoader(options: {
let allowedPermissions: string[] = [];
const permissionApi = options.apis.get(localPermissionApiRef);
if (permissionApi) {
const permissionNames = options.predicateReferences.permissions;
const responses = await Promise.all(
permissionNames.map(name =>
permissionApi.authorize({
permission: { name, type: 'basic', attributes: {} },
}),
),
);
allowedPermissions = permissionNames.filter(
(_, i) => responses[i].result === 'ALLOW',
);
try {
const permissionNames = options.predicateReferences.permissions;
const responses = await Promise.all(
permissionNames.map(name =>
permissionApi.authorize({
permission: { name, type: 'basic', attributes: {} },
}),
),
);
allowedPermissions = permissionNames.filter(
(_, i) => responses[i].result === 'ALLOW',
);
} catch (error) {
assertError(error);
throw new ForwardedError(
'Failed to authorize extension permissions',
error,
);
}
}
return {