fix(cowork-service): preserve budget policy auth errors
This commit is contained in:
parent
6c2e9a67ca
commit
6936c007c7
@ -133,6 +133,22 @@ describe('usage proxy routes', () => {
|
||||
'Bearer test-token'
|
||||
);
|
||||
});
|
||||
|
||||
it('forwards budget-policy authorization failures', async () => {
|
||||
mockFetch.mockResolvedValue({
|
||||
ok: false,
|
||||
status: 403,
|
||||
json: async () => ({ error: 'Admin access required' }),
|
||||
});
|
||||
|
||||
const res = await app.inject({
|
||||
method: 'GET',
|
||||
url: '/api/usage/budget-policy',
|
||||
});
|
||||
|
||||
expect(res.statusCode).toBe(403);
|
||||
expect(JSON.parse(res.payload).error).toBe('Admin access required');
|
||||
});
|
||||
});
|
||||
|
||||
describe('PUT /api/usage/budget-policy', () => {
|
||||
|
||||
@ -54,7 +54,10 @@ async function listBudgetPolicies(
|
||||
headers: buildProxyHeaders(req),
|
||||
});
|
||||
if (!res.ok) {
|
||||
throw new Error(`Platform returned ${res.status}`);
|
||||
const body = (await res.json().catch(() => null)) as { error?: string } | null;
|
||||
const error = new Error(body?.error ?? `Platform returned ${res.status}`);
|
||||
(error as Error & { statusCode?: number }).statusCode = res.status;
|
||||
throw error;
|
||||
}
|
||||
return (await res.json()) as PlatformBudgetPolicy[];
|
||||
}
|
||||
@ -89,7 +92,10 @@ async function upsertPolicy(
|
||||
body: JSON.stringify(body),
|
||||
});
|
||||
if (!res.ok) {
|
||||
throw new Error(`Platform returned ${res.status}`);
|
||||
const body = (await res.json().catch(() => null)) as { error?: string } | null;
|
||||
const error = new Error(body?.error ?? `Platform returned ${res.status}`);
|
||||
(error as Error & { statusCode?: number }).statusCode = res.status;
|
||||
throw error;
|
||||
}
|
||||
return (await res.json()) as PlatformBudgetPolicy;
|
||||
}
|
||||
@ -170,8 +176,14 @@ export async function usageRoutes(app: FastifyInstance) {
|
||||
};
|
||||
} catch (err) {
|
||||
req.log.warn({ err }, 'Failed to load budget policy from platform-service');
|
||||
reply.code(502);
|
||||
return { error: 'Platform-service unavailable' };
|
||||
const statusCode =
|
||||
err instanceof Error && 'statusCode' in err && typeof err.statusCode === 'number'
|
||||
? err.statusCode
|
||||
: 502;
|
||||
reply.code(statusCode);
|
||||
return {
|
||||
error: err instanceof Error ? err.message : 'Platform-service unavailable',
|
||||
};
|
||||
}
|
||||
});
|
||||
|
||||
@ -207,8 +219,14 @@ export async function usageRoutes(app: FastifyInstance) {
|
||||
};
|
||||
} catch (err) {
|
||||
req.log.warn({ err }, 'Failed to save budget policy to platform-service');
|
||||
reply.code(502);
|
||||
return { error: 'Platform-service unavailable' };
|
||||
const statusCode =
|
||||
err instanceof Error && 'statusCode' in err && typeof err.statusCode === 'number'
|
||||
? err.statusCode
|
||||
: 502;
|
||||
reply.code(statusCode);
|
||||
return {
|
||||
error: err instanceof Error ? err.message : 'Platform-service unavailable',
|
||||
};
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user