// New method in unified.ts
async createOrderWithBestRate(params: CreateOrderWithBestRateParams): Promise<any> {
try {
if (!params.order || !params.from_address) {
throw new ValidationError('order and from_address are required');
}
// Create Veeqo order
const veeqoResult = await veeqoMethods.createOrder({
order: params.order,
idempotency_key: params.idempotency_key ? `${params.idempotency_key}-veeqo` : undefined
});
// Create EasyPost shipment
const easypostResult = await easypostMethods.createShipment({
to_address: convertVeeqoToEasyPostAddress(params.order.deliver_to!),
from_address: params.from_address,
parcel: params.parcel,
idempotency_key: params.idempotency_key ? `${params.idempotency_key}-easypost` : undefined
});
// Get rates and find the best one
const rates = await easypostMethods.getRates({ shipment_id: easypostResult.id });
// Filter by carrier if specified
let filteredRates = rates;
if (params.preferred_carriers && params.preferred_carriers.length > 0) {
filteredRates = rates.filter(rate =>
params.preferred_carriers!.includes(rate.carrier)
);
}
// Sort by rate (cheapest first) or delivery time if requested
const sortedRates = params.sort_by === 'delivery_time'
? filteredRates.sort((a, b) => (a.delivery_days || 99) - (b.delivery_days || 99))
: filteredRates.sort((a, b) => parseFloat(a.rate) - parseFloat(b.rate));
const bestRate = sortedRates[0];
if (!bestRate) {
throw new ValidationError('No shipping rates available');
}
// Buy label with best rate
const labelResult = await easypostMethods.buyLabel({
shipment_id: easypostResult.id,
rate_id: bestRate.id,
idempotency_key: params.idempotency_key ? `${params.idempotency_key}-label` : undefined
});
// Update Veeqo order with tracking info
const updatedOrder = await veeqoMethods.updateOrder({
order_id: veeqoResult.id,
order: {
status: 'shipped',
additional_options: {
shipping_method_override: bestRate.service
}
}
});
return {
order: updatedOrder,
shipment: {
id: easypostResult.id,
tracking_code: labelResult.tracking_code,
label_url: labelResult.label_url,
selected_rate: {
service: bestRate.service,
carrier: bestRate.carrier,
rate: bestRate.rate,
currency: bestRate.currency,
delivery_days: bestRate.delivery_days
}
}
};
} catch (error) {
logger.error('Error in unified.createOrderWithBestRate', { error });
if (error instanceof RpcBaseError) throw error;
throw new RpcBaseError('UNIFIED_CREATE_ORDER_WITH_BEST_RATE_ERROR', 'Failed to create order with best rate', error);
}
}