import chalk from 'chalk'; import { BenchmarkRunner, DryRunHelper, createMockCustomer, createMockProduct } from './benchmark-utils.js'; // Mock product attachment operations const mockAttachProduct = async (params: any) => { const { customer_id, product_id, force_checkout } = params; // Simulate the attach workflow from existing tests DryRunHelper.mockDbOperation('getCustomer', { customerId: customer_id }); DryRunHelper.mockDbOperation('getProduct', { productId: product_id }); // Simulate pricing calculations DryRunHelper.mockComplexCalculation(300); // Price calculation logic if (force_checkout) { // Simulate Stripe checkout creation DryRunHelper.mockStripeOperation('createCheckout', { customer_id, product_id, }); } // Simulate entitlement updates DryRunHelper.mockDbOperation('updateEntitlements', { customer_id, product_id, entitlements: ['premium_feature', 'advanced_api'], }); return { success: true, attached: true }; }; const mockUpgradeProduct = async (params: any) => { const { customer_id, from_product_id, to_product_id } = params; // Simulate upgrade workflow DryRunHelper.mockDbOperation('getCurrentProduct', { customer_id, from_product_id }); DryRunHelper.mockDbOperation('getTargetProduct', { to_product_id }); // Simulate prorated billing calculation (CPU intensive) DryRunHelper.mockComplexCalculation(800); // Simulate Stripe subscription update DryRunHelper.mockStripeOperation('updateSubscription', { customer_id, from_product_id, to_product_id, }); // Update entitlements DryRunHelper.mockDbOperation('migrateEntitlements', { customer_id, from_product_id, to_product_id, }); return { success: true, upgraded: true }; }; const mockDowngradeProduct = async (params: any) => { const { customer_id, from_product_id, to_product_id } = params; // Similar to upgrade but with different calculations DryRunHelper.mockDbOperation('getCurrentProduct', { customer_id, from_product_id }); DryRunHelper.mockDbOperation('getTargetProduct', { to_product_id }); // Downgrade calculations (typically simpler) DryRunHelper.mockComplexCalculation(400); // Stripe operations DryRunHelper.mockStripeOperation('updateSubscription', { customer_id, from_product_id, to_product_id, }); // Handle feature restrictions DryRunHelper.mockDbOperation('restrictEntitlements', { customer_id, restricted_features: ['premium_feature'], }); return { success: true, downgraded: true }; }; const mockCalculatePricing = async (params: any) => { const { product_id, customer_id, usage_data } = params; // Simulate complex pricing calculation DryRunHelper.mockDbOperation('getProductPricing', { product_id }); DryRunHelper.mockDbOperation('getCustomerUsage', { customer_id }); // CPU-intensive pricing calculations DryRunHelper.mockComplexCalculation(600); // Simulate tier-based pricing logic const tiers = usage_data?.tiers || [100, 1000, 10000]; let totalCost = 0; for (const tier of tiers) { totalCost += tier * 0.01; // Mock pricing calculation } return { totalCost, breakdown: tiers }; }; const mockEntityAttachment = async (params: any) => { const { customer_id, product_id, entity_id } = params; // Simulate entity-specific attachment DryRunHelper.mockDbOperation('getEntity', { entity_id }); DryRunHelper.mockDbOperation('attachToEntity', { customer_id, product_id, entity_id, }); // Entity-specific calculations DryRunHelper.mockComplexCalculation(200); return { success: true, entity_attached: true }; }; export const runAttachBenchmarks = async () => { const runner = new BenchmarkRunner({ iterations: 50, warmupIterations: 5, }); console.log(chalk.cyan('🔗 Product & Billing Operations')); console.log(chalk.gray('Measuring subscription and pricing workflows\n')); // Real-world product operations await runner.run('Free Plan Signup', async () => { await mockAttachProduct({ customer_id: 'new_customer_123', product_id: 'starter_free', force_checkout: false, }); }); await runner.run('Paid Plan Subscription', async () => { await mockAttachProduct({ customer_id: 'converting_customer_456', product_id: 'pro_monthly', force_checkout: true, }); }); await runner.run('Plan Upgrade (Basic → Pro)', async () => { await mockUpgradeProduct({ customer_id: 'existing_customer_789', from_product_id: 'basic_monthly', to_product_id: 'pro_monthly', }); }); await runner.run('Plan Downgrade (Pro → Basic)', async () => { await mockDowngradeProduct({ customer_id: 'downgrading_customer_321', from_product_id: 'pro_monthly', to_product_id: 'basic_monthly', }); }); await runner.run('Usage-Based Pricing Calc', async () => { await mockCalculatePricing({ product_id: 'usage_tier_product', customer_id: 'heavy_user_654', usage_data: { tiers: [1000, 5000, 25000, 100000], features: ['api_requests', 'storage_gb', 'compute_hours'], }, }); }); await runner.run('Team Plan Setup', async () => { await mockEntityAttachment({ customer_id: 'team_lead_987', product_id: 'team_plan', entity_id: 'team_acme_corp', }); }); await runner.run('Bulk Plan Changes (5 customers)', async () => { const promises: Promise[] = []; for (let i = 0; i < 5; i++) { promises.push(mockAttachProduct({ customer_id: `bulk_customer_${i}`, product_id: 'standard_plan', force_checkout: false, })); } await Promise.all(promises); }); runner.printSummary(); return runner.getResults(); };