{"version":3,"file":"index.cjs","names":[],"sources":["../../src/fees/index.ts"],"sourcesContent":["const MIN_FEE_SLIPPAGE_PERCENTAGE = 1;\nconst MAX_FEE_SLIPPAGE_PERCENTAGE = 100;\n\nexport function validateFeeSlippage(feeSlippage: number): void {\n\tif (\n\t\t!Number.isFinite(feeSlippage) ||\n\t\tfeeSlippage < 0 ||\n\t\tfeeSlippage > MAX_FEE_SLIPPAGE_PERCENTAGE ||\n\t\t(feeSlippage > 0 && feeSlippage < MIN_FEE_SLIPPAGE_PERCENTAGE)\n\t) {\n\t\tthrow new Error(\"feeSlippage must be 0 or a percentage between 1 and 100\");\n\t}\n}\n\nexport function adjustBuyAmountForFees(\n\tamount: number,\n\tprice: number,\n\tuserUSDCBalance: number,\n\tfeeRate: number,\n\tfeeExponent: number,\n\tbuilderTakerFeeRate: number,\n\tfeeSlippage = 0,\n): number {\n\tvalidateFeeSlippage(feeSlippage);\n\tconst platformFeeRate = feeRate * (price * (1 - price)) ** feeExponent;\n\tconst effectivePlatformFeeRate = platformFeeRate * (1 + feeSlippage / 100);\n\tconst feeBaseAmount = Math.min(amount, userUSDCBalance);\n\tconst platformFee = (feeBaseAmount / price) * effectivePlatformFeeRate;\n\tconst builderFee = feeBaseAmount * builderTakerFeeRate;\n\tconst totalCost = amount + platformFee + builderFee;\n\n\tif (userUSDCBalance <= totalCost) {\n\t\treturn Math.max(userUSDCBalance - platformFee - builderFee, 0);\n\t}\n\n\treturn amount;\n}\n"],"mappings":";;AAAA,MAAM,8BAA8B;AACpC,MAAM,8BAA8B;AAEpC,SAAgB,oBAAoB,aAA2B;AAC9D,KACC,CAAC,OAAO,SAAS,YAAY,IAC7B,cAAc,KACd,cAAc,+BACb,cAAc,KAAK,cAAc,4BAElC,OAAM,IAAI,MAAM,0DAA0D;;AAI5E,SAAgB,uBACf,QACA,OACA,iBACA,SACA,aACA,qBACA,cAAc,GACL;AACT,qBAAoB,YAAY;CAEhC,MAAM,2BADkB,WAAW,SAAS,IAAI,WAAW,eACP,IAAI,cAAc;CACtE,MAAM,gBAAgB,KAAK,IAAI,QAAQ,gBAAgB;CACvD,MAAM,cAAe,gBAAgB,QAAS;CAC9C,MAAM,aAAa,gBAAgB;AAGnC,KAAI,mBAFc,SAAS,cAAc,WAGxC,QAAO,KAAK,IAAI,kBAAkB,cAAc,YAAY,EAAE;AAG/D,QAAO"}