// New method in easypost.ts
async compareRates(params: CompareRatesParams): Promise<any> {
try {
if (!params.shipment_ids || !Array.isArray(params.shipment_ids)) {
throw new ValidationError('shipment_ids array is required');
}
const comparison = [];
for (const shipmentId of params.shipment_ids) {
const rates = await client.getRates(shipmentId);
// Sort rates by cost (lowest first)
const sortedRates = rates.sort((a, b) => parseFloat(a.rate) - parseFloat(b.rate));
comparison.push({
shipment_id: shipmentId,
cheapest_rate: sortedRates[0] ? {
id: sortedRates[0].id,
service: sortedRates[0].service,
carrier: sortedRates[0].carrier,
rate: sortedRates[0].rate,
currency: sortedRates[0].currency
} : null,
all_rates: sortedRates.map(rate => ({
id: rate.id,
service: rate.service,
carrier: rate.carrier,
rate: rate.rate,
currency: rate.currency,
delivery_days: rate.delivery_days
}))
});
}
return { comparison };
} catch (error) {
logger.error('Error in easypost.compareRates', { error });
if (error instanceof RpcBaseError) throw error;
throw new RpcBaseError('EASYPOST_COMPARE_RATES_ERROR', 'Failed to compare rates', error);
}
}