import {
Saturn,
SaturnError,
SaturnPolicyDeniedError,
SaturnInsufficientBalanceError,
SaturnProviderError,
} from '@saturn-pay/sdk';
async function safeReason(saturn: Saturn, prompt: string) {
try {
return await saturn.reason({ prompt });
} catch (err) {
if (!(err instanceof SaturnError)) {
// Unknown error - rethrow
throw err;
}
switch (err.code) {
case 'BUDGET_EXCEEDED':
console.log('Budget limit reached');
// Could wait for reset or notify user
return null;
case 'CREDIT_EXHAUSTED':
console.log('Account needs funding');
// Could trigger funding flow
return null;
case 'AGENT_KILLED':
console.log('Agent is disabled');
// Requires manual intervention
throw err;
case 'CAPABILITY_DENIED':
console.log('Capability not allowed');
// Policy needs update
throw err;
case 'PROVIDER_UNAVAILABLE':
// Retry with backoff
await sleep(1000);
return await safeReason(saturn, prompt);
case 'PROVIDER_ERROR':
console.log('Upstream error:', err.message);
// Could try different provider
return null;
default:
throw err;
}
}
}