chore: wrap up in forwarded error

Signed-off-by: benjdlambert <ben@blam.sh>

Signed-off-by: benjdlambert <ben@blam.sh>
This commit is contained in:
benjdlambert
2025-05-27 13:38:45 +02:00
parent 664c07a98f
commit 2d2d97e12b
2 changed files with 30 additions and 17 deletions
@@ -26,7 +26,12 @@ import PromiseRouter from 'express-promise-router';
import { Router, json } from 'express';
import { z, ZodType } from 'zod';
import zodToJsonSchema from 'zod-to-json-schema';
import { InputError, NotAllowedError, NotFoundError } from '@backstage/errors';
import {
ForwardedError,
InputError,
NotAllowedError,
NotFoundError,
} from '@backstage/errors';
export class DefaultActionsRegistryService implements ActionsRegistryService {
private constructor(
@@ -133,25 +138,31 @@ export class DefaultActionsRegistryService implements ActionsRegistryService {
);
}
// todo: wrap up in forwardederror?
const result = await action.action({
input: input.data,
credentials,
logger: this.logger,
});
try {
const result = await action.action({
input: input.data,
credentials,
logger: this.logger,
});
const output = action.schema?.output
? action.schema.output(z).safeParse(result?.output)
: ({ success: true, data: result?.output } as const);
const output = action.schema?.output
? action.schema.output(z).safeParse(result?.output)
: ({ success: true, data: result?.output } as const);
if (!output.success) {
throw new InputError(
`Invalid output from action "${req.params.actionId}"`,
output.error,
if (!output.success) {
throw new InputError(
`Invalid output from action "${req.params.actionId}"`,
output.error,
);
}
res.json({ output: output.data });
} catch (error) {
throw new ForwardedError(
`Failed execution of action "${req.params.actionId}"`,
error,
);
}
return res.json({ output: output.data });
},
);
}
@@ -420,7 +420,9 @@ describe('actionsRegistryServiceFactory', () => {
expect(status).toBe(400);
expect(body).toMatchObject({
error: {
message: 'test',
message: expect.stringContaining(
'Failed execution of action "my-plugin:test"',
),
},
});
});