@minswap/noodles-sdk 0.0.30 → 0.0.31-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";const __rslib_import_meta_url__="u"<typeof document?new(require("url".replace("",""))).URL("file:"+__filename).href:document.currentScript&&document.currentScript.src||new URL("main.js",document.baseURI).href;var types_TradeFeeOptions,constants_BlastFunConstants,package_MathUtils,package_Bps,package_BlastFunPackage,custom_calculation_BlastFunCustomCalculation,bluefin_BluefinTx,custom_transaction_BlastFunCustomTransaction,sdk_calculation_BlastFunSDKCalculation,sdk_transaction_BlastFunSDKTransaction,constants_MoonbagsConstants,package_MoonbagsPackage,calculation_MoonbagsCalculation,transaction_MoonbagsTransaction,__webpack_require__={};__webpack_require__.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return __webpack_require__.d(t,{a:t}),t},__webpack_require__.d=(e,t)=>{for(var n in t)__webpack_require__.o(t,n)&&!__webpack_require__.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},__webpack_require__.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),__webpack_require__.r=e=>{"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var __webpack_exports__={};__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{addGasFee:()=>addGasFee,TradeFeeOptions:()=>types_TradeFeeOptions,SUBSCRIPTION_CONFIG_ID:()=>SUBSCRIPTION_CONFIG_ID,getMemezPumpSDK:()=>getMemezPumpSDK,DraftTransferTx:()=>DraftTransferTx,BlastFunSDKCalculation:()=>sdk_calculation_BlastFunSDKCalculation,MoonbagsConstants:()=>constants_MoonbagsConstants,splitSuiCoinAfterFeeFromBuyTx:()=>splitSuiCoinAfterFeeFromBuyTx,Bps:()=>package_Bps,ADMIN_CAP_ID:()=>ADMIN_CAP_ID,getMoveObject:()=>getMoveObject,SUBSCRIPTION_PACKAGE_ID:()=>SUBSCRIPTION_PACKAGE_ID,MoonbagsCalculation:()=>calculation_MoonbagsCalculation,SUBSCRIPTION_ADMIN_CAP_ID:()=>SUBSCRIPTION_ADMIN_CAP_ID,getSplitCoinsAfterFee:()=>getSplitCoinsAfterFee,AstrosAggregator:()=>astros_AstrosAggregator,BlastFunSDKTransaction:()=>sdk_transaction_BlastFunSDKTransaction,CONFIG_ID:()=>CONFIG_ID,AftermathAggregator:()=>aftermath_AftermathAggregator,FlowXAggregator:()=>flowx_FlowXAggregator,adaptSuiClient:()=>adaptSuiClient,getNeededGasFee:()=>getNeededGasFee,AggregatorModule:()=>AggregatorModule,adaptTransaction:()=>adaptTransaction,createCompatibleSuiClient:()=>createCompatibleSuiClient,splitSuiCoinAfterFeeFromSellTx:()=>splitSuiCoinAfterFeeFromSellTx,SupportedAggregator:()=>common_SupportedAggregator,NATIVE_USDC_TOKEN_TYPE:()=>NATIVE_USDC_TOKEN_TYPE,BOOSTING_PACKAGE_ID:()=>BOOSTING_PACKAGE_ID,SUI_TYPE:()=>SUI_TYPE,USDC_TOKEN_TYPE:()=>USDC_TOKEN_TYPE,MoonbagsPackage:()=>package_MoonbagsPackage,getCoinObjectIdsByAmount:()=>getCoinObjectIdsByAmount,SUI_FULL_TYPE:()=>SUI_FULL_TYPE,getAmountAfterFee:()=>getAmountAfterFee,BLUEFIN_PACKAGE_ID:()=>BLUEFIN_PACKAGE_ID,SubscriptionModule:()=>SubscriptionModule,MathUtils:()=>package_MathUtils,CLOCK_OBJECT_ID:()=>CLOCK_OBJECT_ID,CurveModule:()=>CurveModule,MoonbagsTransaction:()=>transaction_MoonbagsTransaction,BlastFunPackage:()=>package_BlastFunPackage,CetusAggregator:()=>cetus_CetusAggregator,DEFAULT_TRADE_FEE:()=>DEFAULT_TRADE_FEE,BlastFunCustomTransaction:()=>custom_transaction_BlastFunCustomTransaction,NoodlesSdk:()=>NoodlesSdk,BoostingModule:()=>BoostingModule,getMoveObjectContent:()=>getMoveObjectContent,getSplitCoinForTx:()=>getSplitCoinForTx,BlastFunCustomCalculation:()=>custom_calculation_BlastFunCustomCalculation,SupportedBondingCurve:()=>types_SupportedBondingCurve,PAYMENT_COIN_TYPE:()=>PAYMENT_COIN_TYPE,BASE_BPS:()=>1e4,BluefinTx:()=>bluefin_BluefinTx,SUI_METADATA_OBJECT_ID:()=>SUI_METADATA_OBJECT_ID,SevenKAggregator:()=>_7k_SevenKAggregator,BlastFunConstants:()=>constants_BlastFunConstants});const sdk_ts_namespaceObject=require("@7kprotocol/sdk-ts"),transactions_namespaceObject=require("@mysten/sui/transactions"),external_bignumber_js_namespaceObject=require("bignumber.js");var external_bignumber_js_default=__webpack_require__.n(external_bignumber_js_namespaceObject);class _7k_SevenKAggregator{_config;_suiClient;constructor(e,t){this._config=e,this._suiClient=t}async getTradeRoute({coinInAmount:e,coinInType:t,coinOutType:n,tradeFee:a}){try{this._config.sevenKApiKey&&sdk_ts_namespaceObject.Config.setApiKey(this._config.sevenKApiKey);let i=a?a.tradeFeePercent:this._config.defaultTradeFee.tradeFeePercent;return await (0,sdk_ts_namespaceObject.getQuote)({tokenIn:t,tokenOut:n,amountIn:e.toString(),commissionBps:1e4*i})}catch(e){return null}}async getTransaction({walletAddress:e,completeRoute:t,slippage:n,tradeFee:a}){let i,o;a?(i=a.tradeFeePercent,o=a.tradeFeeRecipientAddress):(i=this._config.defaultTradeFee.tradeFeePercent,o=this._config.defaultTradeFee.tradeFeeRecipientAddress);let r=await (0,sdk_ts_namespaceObject.buildTx)({quoteResponse:t,slippage:n,accountAddress:e,commission:{partner:o,commissionBps:1e4*i}});return r.tx instanceof sdk_ts_namespaceObject.BluefinXTx?transactions_namespaceObject.Transaction.from(r.tx.txBytes).build({client:this._suiClient}):(r.tx.setSender(e),r.tx.build({client:this._suiClient}))}}(_7k_SevenKAggregator||(_7k_SevenKAggregator={})).toCommonTradeRoutes=function(e){let t=[];if(!e.routes||0===e.routes.length)return null;for(let n of e.routes){let e=[],a={};for(let t of n.hops){for(let e of t.pool.allTokens)a[e.address]=e.decimal;let n=a[t.tokenIn]??0,i=a[t.tokenOut]??0,o=BigInt(new(external_bignumber_js_default())(t.tokenInAmount).multipliedBy(10**n).toFixed(0,3)),r=BigInt(new(external_bignumber_js_default())(t.tokenOutAmount).multipliedBy(10**i).toFixed(0,3));e.push({poolAddress:t.poolId,coinIn:t.tokenIn,coinOut:t.tokenOut,amountIn:o,amountOut:r})}if(0===e.length)continue;let i=a[n.tokenIn]??0,o=a[n.tokenOut]??0,r=BigInt(new(external_bignumber_js_default())(n.tokenInAmount).multipliedBy(10**i).toFixed(0,3)),s=BigInt(new(external_bignumber_js_default())(n.tokenOutAmount).multipliedBy(10**o).toFixed(0,3));t.push({paths:e,coinIn:n.tokenIn,coinOut:n.tokenOut,amountIn:r,amountOut:s})}return 0===t.length?null:{coinIn:e.tokenIn,coinOut:e.tokenOut,amountIn:BigInt(e.swapAmountWithDecimal),amountOut:BigInt(e.returnAmountWithDecimal),routes:t}};const external_aftermath_ts_sdk_namespaceObject=require("aftermath-ts-sdk");class aftermath_AftermathAggregator{_config;_aftermathClient;_suiClient;constructor(e,t){this._config=e,this._suiClient=t}async aftermathClient(){if(this._aftermathClient)return this._aftermathClient;if(this._config.aftermathApiEndpoint?this._aftermathClient=new external_aftermath_ts_sdk_namespaceObject.Aftermath(this._config.aftermathApiEndpoint):this._aftermathClient=new external_aftermath_ts_sdk_namespaceObject.Aftermath("MAINNET"),await this._aftermathClient.init(),this._config.aftermathApiKey){let e=external_aftermath_ts_sdk_namespaceObject.Helpers.keypairFromPrivateKey(this._config.aftermathApiKey);await this._aftermathClient.Auth().init({async signMessageCallback({message:t}){let{signature:n}=await e.signPersonalMessage(t);return{signature:n}},walletAddress:e.toSuiAddress()})}return this._aftermathClient}async getTradeRoute({coinInAmount:e,coinInType:t,coinOutType:n,tradeFee:a}){try{let i;i=a?{recipient:a.tradeFeeRecipientAddress,feePercentage:a.tradeFeePercent}:{recipient:this._config.defaultTradeFee.tradeFeeRecipientAddress,feePercentage:this._config.defaultTradeFee.tradeFeePercent};let o=await this.aftermathClient();return await o.Router().getCompleteTradeRouteGivenAmountIn({coinInAmount:e,coinInType:t,coinOutType:n,externalFee:i})}catch(e){return null}}async getTransaction({completeRoute:e,walletAddress:t,slippage:n}){let a=await this.aftermathClient(),i=await a.Router().getTransactionForCompleteTradeRoute({completeRoute:e,walletAddress:t,slippage:n,isSponsoredTx:!1});return i.setSender(t),i.build({client:this._suiClient})}}(aftermath_AftermathAggregator||(aftermath_AftermathAggregator={})).toCommonTradeRoutes=function(e){if(0===e.routes.length)return null;let t=[];for(let n of e.routes){let e=[];for(let t of n.paths)e.push({poolAddress:t.poolId,coinIn:t.coinIn.type,coinOut:t.coinOut.type,amountIn:BigInt(t.coinIn.amount),amountOut:BigInt(t.coinOut.amount)});0!==e.length&&t.push({paths:e,coinIn:n.coinIn.type,coinOut:n.coinOut.type,amountIn:n.coinIn.amount,amountOut:n.coinOut.amount})}return 0===t.length?null:{coinIn:e.coinIn.type,coinOut:e.coinOut.type,amountIn:e.coinIn.amount,amountOut:e.coinOut.amount,routes:t}};const astros_aggregator_sdk_namespaceObject=require("@naviprotocol/astros-aggregator-sdk");function isSuiCoin(e){return"0x2::sui::SUI"===e||"0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI"===e}class astros_AstrosAggregator{_config;_suiClient;constructor(e,t){this._config=e,this._suiClient=t}async getTradeRoute({coinInAmount:e,coinInType:t,coinOutType:n,tradeFee:a}){try{let i;return i=a?{fee:a.tradeFeePercent,receiverAddress:a.tradeFeeRecipientAddress}:{fee:this._config.defaultTradeFee.tradeFeePercent,receiverAddress:this._config.defaultTradeFee.tradeFeeRecipientAddress},await (0,astros_aggregator_sdk_namespaceObject.getQuote)(t,n,e,this._config.astrosApiKey,{byAmountIn:!0,serviceFee:i})}catch(e){return null}}returnMergedCoins(e,t,n){if(t.length<2)return e.object(t[0].coinObjectId);let a=0,i=[];t.sort((e,t)=>Number(t.balance)-Number(e.balance)).slice(1).forEach(e=>{a>=n||(a+=Number(e.balance),i.push(e.coinObjectId))});let o=t[0].coinObjectId;return e.mergeCoins(o,i),e.object(o)}async getTransaction({completeRoute:e,walletAddress:t,slippage:n,tradeFee:a}){let i,o;i=a?{fee:a.tradeFeePercent,receiverAddress:a.tradeFeeRecipientAddress}:{fee:this._config.defaultTradeFee.tradeFeePercent,receiverAddress:this._config.defaultTradeFee.tradeFeeRecipientAddress};let r=new(external_bignumber_js_default())(e.amount_out).multipliedBy(1-n-i.fee).toNumber(),s=new transactions_namespaceObject.Transaction;if(isSuiCoin(e.from))o=s.splitCoins(s.gas,[s.pure.u64(e.amount_in)]);else{let n=await (0,astros_aggregator_sdk_namespaceObject.getCoins)(this._suiClient,t,e.from),a=this.returnMergedCoins(s,n.data,Number.parseFloat(e.amount_in));o=s.splitCoins(a,[s.pure.u64(e.amount_in)])}let u=await (0,astros_aggregator_sdk_namespaceObject.buildSwapPTBFromQuote)(t,s,r,o,e,void 0,!1,this._config.astrosApiKey,{serviceFee:i});return s.transferObjects([u],t),s.setSender(t),s.build({client:this._suiClient})}}(astros_AstrosAggregator||(astros_AstrosAggregator={})).toCommonTradeRoutes=function(e,t,n){if(0===e.routes.length)return null;let a=[];for(let t of e.routes){let e=[];for(let n of t.path)e.push({poolAddress:n.id,coinIn:n.from,coinOut:n.target,amountIn:BigInt(n.amount_in),amountOut:BigInt(n.amount_out)});0!==e.length&&a.push({amountIn:BigInt(t.amount_in),amountOut:BigInt(t.amount_out),coinIn:e[0].coinIn,coinOut:e[e.length-1].coinOut,paths:e})}return 0===a.length?null:{coinIn:t,coinOut:n,amountIn:BigInt(e.amount_in),amountOut:BigInt(e.amount_out),routes:a}};const aggregator_sdk_namespaceObject=require("@cetusprotocol/aggregator-sdk"),external_bn_js_namespaceObject=require("bn.js");var external_bn_js_default=__webpack_require__.n(external_bn_js_namespaceObject);(types_TradeFeeOptions||(types_TradeFeeOptions={})).equals=function(e,t){return e.tradeFeePercent===t.tradeFeePercent&&e.tradeFeeRecipientAddress===t.tradeFeeRecipientAddress};class cetus_CetusAggregator{_config;_suiClient;_cetusClient;constructor(e,t){this._config=e,this._suiClient=t}cetusClient(e,t){return t&&!types_TradeFeeOptions.equals(t,this._config.defaultTradeFee)?new aggregator_sdk_namespaceObject.AggregatorClient({client:this._suiClient,overlayFeeReceiver:t.tradeFeeRecipientAddress,overlayFeeRate:t.tradeFeePercent,env:aggregator_sdk_namespaceObject.Env.Mainnet,signer:e,...this._config.cetusApiKey&&this._config.cetusApiEndpoint?{apiKey:this._config.cetusApiKey,endpoint:this._config.cetusApiEndpoint}:{},partner:this._config.cetusPartnerId}):(this._cetusClient||(this._cetusClient=new aggregator_sdk_namespaceObject.AggregatorClient({client:this._suiClient,overlayFeeReceiver:this._config.defaultTradeFee.tradeFeeRecipientAddress,overlayFeeRate:this._config.defaultTradeFee.tradeFeePercent,env:aggregator_sdk_namespaceObject.Env.Mainnet,signer:e,...this._config.cetusApiKey&&this._config.cetusApiEndpoint?{apiKey:this._config.cetusApiKey,endpoint:this._config.cetusApiEndpoint}:{},partner:this._config.cetusPartnerId})),this._cetusClient)}async getTradeRoute({coinInAmount:e,coinInType:t,coinOutType:n,tradeFee:a}){try{let i=this.cetusClient(void 0,a);return await i.findRouters({from:t,target:n,amount:new(external_bn_js_default())(e.toString()),byAmountIn:!0})}catch(e){return null}}async getTransaction({completeRoute:e,walletAddress:t,slippage:n,tradeFee:a}){let i=new transactions_namespaceObject.Transaction,o=this.cetusClient(t,a);return await o.fastRouterSwap({router:e,txb:i,slippage:n}),await o.devInspectTransactionBlock(i),i.setSender(t),i.build({client:this._suiClient})}}(cetus_CetusAggregator||(cetus_CetusAggregator={})).toCommonTradeRoutes=function(e,t,n){if(0===e.paths.length)return null;let a=[],i=[],o=[];for(let t=0;t<e.paths.length;t++){let n=e.paths[t],a={poolAddress:n.id,amountIn:BigInt(n.amountIn),amountOut:BigInt(n.amountOut),coinIn:n.from,coinOut:n.target};if(o.push(a),t===e.paths.length-1)i.push([...o]);else{let a=e.paths[t+1];n.target!==a.from&&(i.push([...o]),o=[])}}for(let e of i)0!==e.length&&a.push({amountIn:e[0].amountIn,amountOut:e[e.length-1].amountOut,coinIn:e[0].coinIn,coinOut:e[e.length-1].coinOut,paths:e});return 0===a.length?null:{coinIn:t,coinOut:n,amountIn:BigInt(e.amountIn.toString(10)),amountOut:BigInt(e.amountOut.toString(10)),routes:a}};var common_SupportedAggregator=function(e){return e.ASTROS="ASTROS",e.AFTERMATH="AFTERMATH",e.SEVENK="7K",e.CETUS="CETUS",e.FLOWX="FLOWX",e}({});const sdk_namespaceObject=require("@flowx-finance/sdk");function getInputPercent(e){return 1e6*e}class flowx_FlowXAggregator{_config;_suiClient;constructor(e,t){this._config=e,this._suiClient=t}getCommission(e,t){let n,a;return t?(n=t.tradeFeePercent,a=t.tradeFeeRecipientAddress):(n=this._config.defaultTradeFee.tradeFeePercent,a=this._config.defaultTradeFee.tradeFeeRecipientAddress),new sdk_namespaceObject.Commission(a,new sdk_namespaceObject.Coin(e),sdk_namespaceObject.CommissionType.PERCENTAGE,getInputPercent(n),!0)}async getTradeRoute({coinInAmount:e,coinInType:t,coinOutType:n,tradeFee:a}){let i=new sdk_namespaceObject.AggregatorQuoter("mainnet",this._config.flowxApiKey);try{return await i.getRoutes({tokenIn:t,tokenOut:n,amountIn:e.toString(),commission:this.getCommission(t,a)})}catch(e){return null}}async getTransaction({walletAddress:e,completeRoute:t,slippage:n,tradeFee:a}){return new sdk_namespaceObject.TradeBuilder("mainnet",t.routes).sender(e).slippage(getInputPercent(n)).commission(this.getCommission(t.coinIn.coinType,a)).build().buildTransaction({client:this._suiClient}).then(t=>(t.setSender(e),t.build({client:this._suiClient})))}}(flowx_FlowXAggregator||(flowx_FlowXAggregator={})).toCommonTradeRoutes=function(e){if(0===e.routes.length)return null;let t=[];for(let n of e.routes){let e=[];for(let t of n.paths)e.push({amountIn:BigInt(t.amountIn.toString()),amountOut:BigInt(t.amountOut.toString()),coinIn:t.input.coinType,coinOut:t.output.coinType,poolAddress:t.pool.id});0!==e.length&&t.push({amountIn:BigInt(n.amountIn.toString()),amountOut:BigInt(n.amountOut.toString()),coinIn:n.input.coinType,coinOut:n.output.coinType,paths:e})}return 0===t.length?null:{coinIn:e.coinIn.coinType,coinOut:e.coinOut.coinType,amountIn:BigInt(e.amountIn.toString()),amountOut:BigInt(e.amountOut.toString()),routes:t}},function(e){e.PACKAGE_ID_V4="0x7e6aa6e179466ab2814425a780b122575296d011119fa69d27f289f5a28814bd",e.MEMEZ_AV_OBJECT_ID="0x2319e3e76dfad73d8f4684bdbf42be4f32d8ce4521dd61becc8261dc918d82c0"}(constants_BlastFunConstants||(constants_BlastFunConstants={}));const tiny_invariant_namespaceObject=require("@minswap/tiny-invariant");var tiny_invariant_default=__webpack_require__.n(tiny_invariant_namespaceObject);async function getMoveObjectContent(e,t){return(await getMoveObject(e,t)).fields}async function getMoveObject(e,t){let n=await e.getObject({id:t,options:{showContent:!0}}),a=n.data?.content;return tiny_invariant_default()(a,"Pool object not found or has no content"),tiny_invariant_default()("moveObject"===a.dataType,"Object is not a Move object"),a}const BASE_BPS=1e4;function getSplitCoinsAfterFee(e,t){let n=BigInt(e),a=BigInt(1e4*Number(t));if(a===BigInt(0))return[n.toString()];let i=n*a/BigInt(1e4);return[(n-i).toString(),i.toString()]}function getAmountAfterFee(e,t){if(!t||0>=Number(t))return BigInt(e);let n=BigInt(e),a=BigInt(1e4*Number(t));if(a===BigInt(0))return n;let i=n*a/BigInt(1e4);return n-i}async function getNeededGasFee(e,t,n,a){let{effects:{gasUsed:i,status:o}}=await e.devInspectTransactionBlock({sender:n,transactionBlock:t});if("success"!==o.status)throw Error(`Transaction failed during dev inspect: ${o.error??""}`);let r=BigInt(i.computationCost)+BigInt(i.storageCost)-BigInt(i.storageRebate),s=BigInt(1e4*Number(a));return r*(BigInt(1e4)+s)/BigInt(1e4)}!function(e){(e.U64||(e.U64={})).mulDivUp=function(e,t,n){let a=BigInt(0);return e*t%n>BigInt(0)&&(a=BigInt(1)),e*t/n+a}}(package_MathUtils||(package_MathUtils={})),function(e){function t(e){return tiny_invariant_default()(BigInt(e)<=BigInt(1e4),"Bps overflow"),BigInt(e)}e.calcUp=function(e,t){let n,a=BigInt(e.pos0),i=BigInt(1e4);return n=a*t%i!==BigInt(0)?BigInt(1):BigInt(0),a*t/i+n},e.sub=function(e,t){return tiny_invariant_default()(BigInt(e.pos0)>=BigInt(t.pos0),"Bps underflow"),{pos0:(BigInt(e.pos0)-BigInt(t.pos0)).toString()}},e.value=function(e){return BigInt(e.pos0)},e.new_=function(e){return{pos0:t(e).toString()}},e.assertOverflow=t}(package_Bps||(package_Bps={})),function(e){var t,n;(e.MemezFun||(e.MemezFun={})).isSniperProtectedMemezFun=async function(e,t){return(await getMoveObjectContent(e,t)).public_key.length>0},(t=e.MemezFees||(e.MemezFees={})).takeWithDiscount=function(e,t,n){if("Value"===e.variant){let n=BigInt(e.fields.pos0);if(n===BigInt(0))return BigInt(0);if(t>=n)return n;throw Error(`Insufficient amount to cover fee. Required: ${n}, provided: ${t}`)}if("Percentage"===e.variant){let a=e.fields.pos0.fields;if(BigInt(a.pos0)===BigInt(0))return BigInt(0);let i=package_Bps.calcUp(package_Bps.sub(a,n),t);if(t>=i)return i;throw Error(`Insufficient amount to cover fee. Required: ${i}, provided: ${t}`)}throw Error("Unknown fee variant")},t.calculateWithDiscount=function(e,t,n){if("Value"===e.variant)return BigInt(e.fields.pos0);if("Percentage"===e.variant){let a=e.fields.pos0.fields;return package_Bps.calcUp(package_Bps.sub(a,t),n)}throw Error("Unknown fee variant")},(e.MemezBurner||(e.MemezBurner={})).calculate=function(e,t){if(package_Bps.value(e.fee.fields)===BigInt(0)||t===BigInt(0)||t>=BigInt(e.target_liquidity))return package_Bps.new_(0);let n=BigInt(1e4);return package_Bps.new_(package_MathUtils.U64.mulDivUp(package_Bps.value(e.fee.fields),package_MathUtils.U64.mulDivUp(t,n,BigInt(e.target_liquidity)),n))},(n=e.MemezPump||(e.MemezPump={})).getPumpState=async function(e,t){return await getMoveObjectContent(e,t.inner_state)},n.pump=function(t,n){let a=t.constant_product.fields,i=e.MemezFees.takeWithDiscount(a.quote_swap_fee,n,a.quote_referrer_fee.fields),o=n-i,r=BigInt(a.meme_balance),s=BigInt(a.quote_balance),u=r*o/(BigInt(a.virtual_liquidity)+s+o),c=e.MemezFees.takeWithDiscount(a.meme_swap_fee,u,a.meme_referrer_fee.fields);return u-c},n.dump=function(t,n){let a=t.constant_product.fields,i=e.MemezFees.takeWithDiscount(a.meme_swap_fee,n,a.meme_referrer_fee.fields),o=n-i,r=BigInt(a.meme_balance),s=BigInt(a.quote_balance),u=BigInt(a.virtual_liquidity),c=e.MemezBurner.calculate(a.burner.fields,s),_=package_Bps.calcUp(c,o),l=o-(package_Bps.value(c)!==BigInt(0)?_:BigInt(0)),d=(u+s)*l/(r+l);d>s&&(d=s);let g=e.MemezFees.takeWithDiscount(a.quote_swap_fee,d,a.quote_referrer_fee.fields);return d-g}}(package_BlastFunPackage||(package_BlastFunPackage={})),function(e){e.getCurveAmountAfterBuy=async function(e,t){let{suiAmount:n,poolId:a,frontendFee:i}=e,o=await getMoveObjectContent(t,a),r=await package_BlastFunPackage.MemezPump.getPumpState(t,o);return n=getAmountAfterFee(n,i),package_BlastFunPackage.MemezPump.pump(r,n)},e.getSuiAmountAfterSell=async function(e,t){let{curveAmount:n,poolId:a,frontendFee:i}=e,o=await getMoveObjectContent(t,a),r=await package_BlastFunPackage.MemezPump.getPumpState(t,o);return getAmountAfterFee(package_BlastFunPackage.MemezPump.dump(r,n),i)}}(custom_calculation_BlastFunCustomCalculation||(custom_calculation_BlastFunCustomCalculation={}));const SUI_TYPE="0x2::sui::SUI",SUI_FULL_TYPE="0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI",USDC_TOKEN_TYPE="0x5d4b302506645c37ff133b98c4b50a5ae14841659738d6d733d59d0d217a93bf::coin::COIN",NATIVE_USDC_TOKEN_TYPE="0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC",SUI_METADATA_OBJECT_ID="0x9258181f5ceac8dbffb7030890243caed69a9599d2886d957a9cb7656af3bdb3",CLOCK_OBJECT_ID="0x0000000000000000000000000000000000000000000000000000000000000006",utils_namespaceObject=require("@mysten/sui/utils"),orderByKey=(e,t,n)=>{let a;if(e?.length){do{a=!1;for(let i=0;i<e.length-1;i++){let o=BigInt(e[i][t]),r=BigInt(e[i+1][t]);if("desc"===n?o<r:o>r){let t=e[i];e[i]=e[i+1],e[i+1]=t,a=!0}}}while(a);return e}},getCoinObjectIdsByAmount=async(e,t,n,a)=>{let i,o=[],r=!0;for(;r;)try{let n=await e.getCoins({owner:t,coinType:a,cursor:i});o=[...o,...n.data],r=n.hasNextPage,i=n.nextCursor}catch(e){console.error("Error fetching data:",e),r=!1}let s=orderByKey(o.map(e=>({...e,balance:e.balance})),"balance","desc")??[],u="0",c=[],_=[];for(let e of s)if(u=(BigInt(e.balance)+BigInt(u)).toString(10),c.push(e.coinObjectId),_.push(e),BigInt(u)>=BigInt(n))break;return{objectIds:c,balance:u,objectCoins:_}};async function getSplitCoinForTx(e,t){let{account:n,amount:a,splits:i,coinType:o,inheritTx:r,inspecTransaction:s,isSponsored:u=!1}=e,c=r??new transactions_namespaceObject.Transaction,{objectIds:_}=await getCoinObjectIdsByAmount(t,n,a,o),l=_[0];if((0,utils_namespaceObject.normalizeStructTag)(o)===(0,utils_namespaceObject.normalizeStructTag)(SUI_FULL_TYPE)&&!u){let e;return s?(_.length>1&&c.mergeCoins(c.object(l),_.slice(1).map(e=>c.object(e))),e=c.splitCoins(c.object(l),i)):e=c.splitCoins(c.gas,i),{tx:c,coinData:e}}_.length>1&&c.mergeCoins(c.object(l),_.slice(1).map(e=>c.object(e)));let d=c.splitCoins(c.object(l),i);return{tx:c,coinData:d}}const BLUEFIN_PACKAGE_ID="0x62412b7268c35f3808336aee57a52836501f40b8ba5d936f8ad275e672befd04";async function splitSuiCoinAfterFeeFromBuyTx(e,t){let n,a,{inputAmount:i,accountAddress:o,frontendFee:r,frontendFeeRecipient:s,extendTx:u,isSponsored:c}=e;tiny_invariant_default()(e.inCoinType===SUI_FULL_TYPE||e.inCoinType===SUI_TYPE,"Input must be SUI");let{tx:_,coinIn:l}=u||{},d=getSplitCoinsAfterFee(i,r||"0"),g=_||new transactions_namespaceObject.Transaction;if(l)n=g.splitCoins(l,d),bluefin_BluefinTx.transferOrDestroyZeroCoin(g,SUI_FULL_TYPE,l,o);else{let{coinData:e}=await getSplitCoinForTx({account:o,amount:i,splits:d,coinType:SUI_FULL_TYPE,inheritTx:g,isSponsored:c||!1},t);n=e}if(r&&s){let[e,t]=n;a=e,g.transferObjects([t],g.pure.address(s||o))}else[a]=n;return{tx:g,coinOut:a}}async function splitSuiCoinAfterFeeFromSellTx(e,t,n){if(tiny_invariant_default()(t.outCoinType===SUI_FULL_TYPE||t.outCoinType===SUI_TYPE,"Output must be SUI"),0>=Number(t.frontendFee||0))return{tx:e,coinOut:n};let a=e.moveCall({target:"0x2::coin::value",typeArguments:[t.outCoinType],arguments:[n]}),i=e.moveCall({target:`${BLUEFIN_PACKAGE_ID}::math::mul_div_u64`,typeArguments:[],arguments:[a,e.pure.u64(BigInt(1e4*Number(t.frontendFee||"0"))),e.pure.u64(BigInt(1e4))]}),o=e.moveCall({target:"0x2::coin::split",typeArguments:[t.outCoinType],arguments:[n,i]});return e.transferObjects([o],e.pure.address(t.frontendFeeRecipient||t.accountAddress)),{tx:e,coinOut:n}}(bluefin_BluefinTx||(bluefin_BluefinTx={})).transferOrDestroyZeroCoin=function(e,t,n,a){e.moveCall({target:`${BLUEFIN_PACKAGE_ID}::utils::transfer_or_destroy`,typeArguments:[t],arguments:[n,e.pure.address(a)]})},function(e){async function t(e){let t=e||new transactions_namespaceObject.Transaction;return t.moveCall({target:`${constants_BlastFunConstants.PACKAGE_ID_V4}::memez_allowed_versions::get_allowed_versions`,arguments:[t.object(constants_BlastFunConstants.MEMEZ_AV_OBJECT_ID)],typeArguments:[]})}e.getAllowedVersions=t,e.buildBuyTx=async function(e,n){tiny_invariant_default()(!await package_BlastFunPackage.MemezFun.isSniperProtectedMemezFun(n,e.poolId),"This coin is a sniper protected coin, please use the Blast Fun website to trade it.");let{tx:a,coinOut:i}=await splitSuiCoinAfterFeeFromBuyTx(e,n);tiny_invariant_default()(i,"Coin out is required");let o=a.moveCall({target:`${constants_BlastFunConstants.PACKAGE_ID_V4}::memez_pump::pump`,typeArguments:[e.outCoinType,SUI_FULL_TYPE],arguments:[a.object(e.poolId),i,a.pure.vector("address",[]),a.pure.vector("vector<u8>",[]),a.pure.u64(e.minAmountOut),await t(a)]});return{tx:a,coinOut:o}},e.buildSellTx=async function(e,n){tiny_invariant_default()(e.outCoinType===SUI_FULL_TYPE||e.outCoinType===SUI_TYPE,"Output must be SUI");let a=await getMoveObjectContent(n,e.poolId),{tx:i,coinData:o}=await getSplitCoinForTx({amount:e.inputAmount,coinType:e.inCoinType,inheritTx:e.extendTx?.tx,account:e.accountAddress,splits:[e.inputAmount]},n),[r]=o,[s]=i.moveCall({target:`${constants_BlastFunConstants.PACKAGE_ID_V4}::memez_pump::dump`,typeArguments:[e.inCoinType,e.outCoinType],arguments:[i.object(e.poolId),i.object(a.ipx_meme_coin_treasury),r,i.pure.vector("address",[]),i.pure.u64(e.minAmountOut),await t(i)]});return await splitSuiCoinAfterFeeFromSellTx(i,e,s)}}(custom_transaction_BlastFunCustomTransaction||(custom_transaction_BlastFunCustomTransaction={}));const memez_fun_sdk_namespaceObject=require("@interest-protocol/memez-fun-sdk"),sui_core_sdk_namespaceObject=require("@interest-protocol/sui-core-sdk"),client_namespaceObject=require("@mysten/sui/client"),payload={network:sui_core_sdk_namespaceObject.Network.MAINNET,fullNodeUrl:(0,client_namespaceObject.getFullnodeUrl)("mainnet")},memezPump=new memez_fun_sdk_namespaceObject.MemezPumpSDK(payload);function getMemezPumpSDK(){return memezPump}async function addGasFee(e,t){let{inheritTx:n,sender:a,feeAmount:i,suiInputAmount:o}=e,r=n||new transactions_namespaceObject.Transaction;r.setGasBudget(i);let{objectCoins:s}=await getCoinObjectIdsByAmount(t,a,(BigInt(o||"0")+i).toString(),SUI_FULL_TYPE);return r.setGasPayment(s.map(e=>({objectId:e.coinObjectId,version:e.version,digest:e.digest}))),r}!function(e){e.getCurveAmountAfterBuy=async function(e){let{suiAmount:t,poolId:n,frontendFee:a}=e;t=getAmountAfterFee(t,a);let{memeAmountOut:i}=await getMemezPumpSDK().quotePump({pool:n,amount:t});return i},e.getSuiAmountAfterSell=async function(e){let{curveAmount:t,poolId:n,frontendFee:a}=e,{quoteAmountOut:i}=await getMemezPumpSDK().quoteDump({pool:n,amount:t});return getAmountAfterFee(i,a)}}(sdk_calculation_BlastFunSDKCalculation||(sdk_calculation_BlastFunSDKCalculation={})),function(e){async function t(e,t){let{tx:n,coinOut:a}=await splitSuiCoinAfterFeeFromBuyTx(e,t);tiny_invariant_default()(a,"Coin out is required");let{memeCoin:i,tx:o}=await getMemezPumpSDK().pump({pool:e.poolId,quoteCoin:a,minAmountOut:e.minAmountOut,tx:n});return{tx:o,coinOut:i}}async function n(e,t){tiny_invariant_default()(e.outCoinType===SUI_FULL_TYPE||e.outCoinType===SUI_TYPE,"Output must be SUI");let{tx:n,coinData:a}=await getSplitCoinForTx({amount:e.inputAmount,coinType:e.inCoinType,inheritTx:e.extendTx?.tx,account:e.accountAddress,splits:[e.inputAmount]},t),[i]=a,{quoteCoin:o,tx:r}=await getMemezPumpSDK().dump({pool:e.poolId,memeCoin:i,tx:n,minAmountOut:e.minAmountOut});return await splitSuiCoinAfterFeeFromSellTx(r,e,o)}e.buildBuyTx=t,e.buildSellTx=n,e.getBuyTransaction=async function({coinInAmount:e,coinInType:n,coinOutType:a,poolId:i,slippage:o,walletAddress:r,tradeFee:s},u){tiny_invariant_default()(n===SUI_TYPE,"coinInType must be SUI for buy transaction"),tiny_invariant_default()(a!==n,"coinOutType must be different from coinInType"),tiny_invariant_default()(o>=0&&o<1,"slippage must be between 0 (inclusive) and 1 (exclusive)"),tiny_invariant_default()(e>0,"coinInAmount must be greater than 0");let c=await sdk_calculation_BlastFunSDKCalculation.getCurveAmountAfterBuy({poolId:i,suiAmount:e,frontendFee:s?s.tradeFeePercent:void 0}),_=BigInt(new(external_bignumber_js_default())(c.toString()).multipliedBy(1-o).toFixed(0,3)),{tx:l,coinOut:d}=await t({accountAddress:r,inCoinType:n,outCoinType:a,inputAmount:e.toString(),minAmountOut:_.toString(),poolId:i,frontendFee:s?s.tradeFeePercent:void 0,frontendFeeRecipient:s?s.tradeFeeRecipientAddress:void 0,extendTx:void 0,isSponsored:!1},u);tiny_invariant_default()(d,"Coin out is required"),l.transferObjects([d],l.pure.address(r)),l.setSender(r);let g=await getNeededGasFee(u,l,r,0);return(l=await addGasFee({inheritTx:l,sender:r,feeAmount:g,suiInputAmount:e},u)).build({client:u})},e.getSellTransaction=async function({coinInAmount:e,coinInType:t,coinOutType:a,poolId:i,slippage:o,walletAddress:r,tradeFee:s},u){tiny_invariant_default()(a===SUI_TYPE,"coinOutType must be SUI for sell transaction"),tiny_invariant_default()(a!==t,"coinOutType must be different from coinInType"),tiny_invariant_default()(o>=0&&o<1,"slippage must be between 0 (inclusive) and 1 (exclusive)"),tiny_invariant_default()(e>0,"coinInAmount must be greater than 0");let c=await sdk_calculation_BlastFunSDKCalculation.getSuiAmountAfterSell({poolId:i,curveAmount:e,frontendFee:s?s.tradeFeePercent:void 0}),_=BigInt(new(external_bignumber_js_default())(c.toString()).multipliedBy(1-o).toFixed(0,3)),{tx:l,coinOut:d}=await n({accountAddress:r,inCoinType:t,outCoinType:a,inputAmount:e.toString(),minAmountOut:_.toString(),poolId:i,frontendFee:s?s.tradeFeePercent:void 0,frontendFeeRecipient:s?s.tradeFeeRecipientAddress:void 0,extendTx:void 0,isSponsored:!1},u);tiny_invariant_default()(d,"Coin out is required"),l.transferObjects([d],l.pure.address(r)),l.setSender(r);let g=await getNeededGasFee(u,l,r,0);return(l=await addGasFee({inheritTx:l,sender:r,feeAmount:g},u)).build({client:u})}}(sdk_transaction_BlastFunSDKTransaction||(sdk_transaction_BlastFunSDKTransaction={}));var types_SupportedBondingCurve=function(e){return e.BLAST_FUN="BLAST_FUN",e.MOONBAGS="MOONBAGS",e}({});function adaptSuiClient(e){return e}function adaptTransaction(e){return e}function createCompatibleSuiClient(e){return new Proxy(e,{get(e,t){let n=e[t];return"function"==typeof n?n.bind(e):n}})}!function(e){e.PACKAGE_ID="0xb8df325010942634a4afb3db3901ee215546af43a4ec4af781e7213b0bba7290",e.CONFIG_OBJECT_ID="0x74aecf86067c6913960ba4925333aefd2b1f929cafca7e21fd55a8f244b70499",e.LOCK_CONFIG_OBJECT_ID="0xfb09822d9808980abd04c51321adb850701f5f55535c6206658ef4d910c3e9be",e.BURN_MANAGER_OBJECT_ID="0x1d94aa32518d0cb00f9de6ed60d450c9a2090761f326752ffad06b2e9404f845",e.POOLS_OBJECT_ID="0xf699e7f2276f5c9a75944b37a0c5b5d9ddfd2471bf6242483b03ab2887d198d0",e.GLOBAL_CONFIG_OBJECT_ID="0xdaa46292632c3c4d8f31f23ea0f9b36a28ff3677e9684980e4438403a67a3d8f",e.FEE_DENOMINATOR=BigInt(1e4)}(constants_MoonbagsConstants||(constants_MoonbagsConstants={})),function(e){var t,n;(t=e.Curves||(e.Curves={})).calculateAddLiquidityCost=function(e,t,n){return e*t/(t-n)-e},t.calculateRemoveLiquidityReturn=function(e,t,n){return t-e*t/(e+n)},t.calculateTokenAmountReceived=function(e,t,n){return t-e*t/(e+n)},(n=e.Moonbags||(e.Moonbags={})).getDynamicVirtualTokenReserves=async function(e,t){let n=await e.getDynamicFieldObject({parentId:t,name:{type:"vector<u8>",value:"virtual_token_reserves"}});if(n.data)return BigInt(n.data.content.fields.value)},n.buyExactInReturnsWithLock=function(t){let{inputAmount:n,amountIn:a,pool:i,config:o,dynamicVirtualTokenReserves:r}=t,s=BigInt(i.virtual_sui_reserves),u=BigInt(i.virtual_token_reserves),c=BigInt(i.remain_token_reserves.fields.balance),_=e.Curves.calculateRemoveLiquidityReturn(s,u,a),l=u-(r||c),d=_,g=a;_>l&&(d=l,g=e.Curves.calculateAddLiquidityCost(s,u,l)+BigInt(1));let p=g*BigInt(o.platform_fee)/constants_MoonbagsConstants.FEE_DENOMINATOR;return tiny_invariant_default()(n>=g+p,"Input amount is less than used SUI + fee"),{receivedCurve:d,receivedSui:n-g-p}},n.sellReturns=function(t){let{amountIn:n,pool:a,config:i}=t,o=BigInt(a.virtual_sui_reserves),r=BigInt(a.virtual_token_reserves),s=BigInt(a.real_sui_reserves.fields.balance),u=e.Curves.calculateRemoveLiquidityReturn(r,o,n);u>s&&(u=s);let c=u*BigInt(i.platform_fee)/constants_MoonbagsConstants.FEE_DENOMINATOR,_=u-c;return{receivedCurve:BigInt(0),receivedSui:_}}}(package_MoonbagsPackage||(package_MoonbagsPackage={})),function(e){e.getCurveAmountAfterBuy=async function(e,t){let{suiAmount:n,poolId:a,frontendFee:i}=e,[o,r,s]=await Promise.all([getMoveObjectContent(t,a),getMoveObjectContent(t,constants_MoonbagsConstants.CONFIG_OBJECT_ID),package_MoonbagsPackage.Moonbags.getDynamicVirtualTokenReserves(t,a)]);void 0!==i&&(n=getAmountAfterFee(n,i));let u=n*constants_MoonbagsConstants.FEE_DENOMINATOR/(constants_MoonbagsConstants.FEE_DENOMINATOR+BigInt(r.platform_fee)),{receivedCurve:c}=package_MoonbagsPackage.Moonbags.buyExactInReturnsWithLock({inputAmount:n,amountIn:u,pool:o,config:r,dynamicVirtualTokenReserves:s});return c},e.getSuiAmountAfterSell=async function(e,t){let{curveAmount:n,poolId:a,frontendFee:i}=e,[o,r]=await Promise.all([getMoveObjectContent(t,a),getMoveObjectContent(t,constants_MoonbagsConstants.CONFIG_OBJECT_ID)]),{receivedSui:s}=package_MoonbagsPackage.Moonbags.sellReturns({amountIn:n,pool:o,config:r});return void 0!==i?getAmountAfterFee(s,i):s},e.getUsedSuiForTx=async function(e,t){let{suiAmount:n,frontendFee:a}=e,i=await getMoveObjectContent(t,constants_MoonbagsConstants.CONFIG_OBJECT_ID);return void 0!==a&&(n=getAmountAfterFee(n,a)),n*constants_MoonbagsConstants.FEE_DENOMINATOR/(constants_MoonbagsConstants.FEE_DENOMINATOR+BigInt(i.platform_fee))}}(calculation_MoonbagsCalculation||(calculation_MoonbagsCalculation={})),function(e){async function t(e,t){let{tx:n,coinOut:a}=await splitSuiCoinAfterFeeFromBuyTx(e,t);tiny_invariant_default()(a,"Coin out is required");let i=await calculation_MoonbagsCalculation.getUsedSuiForTx({suiAmount:BigInt(e.inputAmount),frontendFee:e.frontendFee},t),[o,r]=n.moveCall({target:`${constants_MoonbagsConstants.PACKAGE_ID}::moonbags::buy_exact_in_returns_with_lock`,typeArguments:[e.outCoinType],arguments:[n.object(constants_MoonbagsConstants.CONFIG_OBJECT_ID),n.object(constants_MoonbagsConstants.LOCK_CONFIG_OBJECT_ID),a,n.pure.u64(i),n.pure.u64(e.minAmountOut),n.object(constants_MoonbagsConstants.BURN_MANAGER_OBJECT_ID),n.object(constants_MoonbagsConstants.POOLS_OBJECT_ID),n.object(constants_MoonbagsConstants.GLOBAL_CONFIG_OBJECT_ID),n.object(SUI_METADATA_OBJECT_ID),n.object(CLOCK_OBJECT_ID)]});return bluefin_BluefinTx.transferOrDestroyZeroCoin(n,SUI_FULL_TYPE,o,e.accountAddress),{tx:n,coinOut:r}}async function n(e,t){tiny_invariant_default()(e.outCoinType===SUI_FULL_TYPE||e.outCoinType===SUI_TYPE,"Output must be SUI");let{tx:n,coinData:a}=await getSplitCoinForTx({amount:e.inputAmount,coinType:e.inCoinType,inheritTx:e.extendTx?.tx,account:e.accountAddress,splits:[e.inputAmount]},t),[i]=a,[o,r]=n.moveCall({target:`${constants_MoonbagsConstants.PACKAGE_ID}::moonbags::sell_returns`,typeArguments:[e.inCoinType],arguments:[n.object(constants_MoonbagsConstants.CONFIG_OBJECT_ID),i,n.pure.u64(e.minAmountOut),n.object(CLOCK_OBJECT_ID)]});return bluefin_BluefinTx.transferOrDestroyZeroCoin(n,e.inCoinType,r,e.accountAddress),await splitSuiCoinAfterFeeFromSellTx(n,e,o)}e.buildBuyTx=t,e.buildSellTx=n,e.getBuyTransaction=async function({coinInAmount:e,coinInType:n,coinOutType:a,poolId:i,slippage:o,walletAddress:r,tradeFee:s},u){tiny_invariant_default()(n===SUI_TYPE,"coinInType must be SUI for buy transaction"),tiny_invariant_default()(a!==n,"coinOutType must be different from coinInType"),tiny_invariant_default()(o>=0&&o<1,"slippage must be between 0 (inclusive) and 1 (exclusive)"),tiny_invariant_default()(e>0,"coinInAmount must be greater than 0");let c=await calculation_MoonbagsCalculation.getCurveAmountAfterBuy({poolId:i,suiAmount:e,frontendFee:s?s.tradeFeePercent:void 0},u),_=BigInt(new(external_bignumber_js_default())(c.toString()).multipliedBy(1-o).toFixed(0,3)),{tx:l,coinOut:d}=await t({accountAddress:r,inCoinType:n,outCoinType:a,inputAmount:e.toString(),minAmountOut:_.toString(),poolId:i,frontendFee:s?s.tradeFeePercent:void 0,frontendFeeRecipient:s?s.tradeFeeRecipientAddress:void 0,extendTx:void 0,isSponsored:!1},u);tiny_invariant_default()(d,"Coin out is required"),l.transferObjects([d],l.pure.address(r)),l.setSender(r);let g=await getNeededGasFee(u,l,r,0);return(l=await addGasFee({inheritTx:l,sender:r,feeAmount:g,suiInputAmount:e},u)).build({client:u})},e.getSellTransaction=async function({coinInAmount:e,coinInType:t,coinOutType:a,poolId:i,slippage:o,walletAddress:r,tradeFee:s},u){tiny_invariant_default()(a===SUI_TYPE,"coinOutType must be SUI for sell transaction"),tiny_invariant_default()(a!==t,"coinOutType must be different from coinInType"),tiny_invariant_default()(o>=0&&o<1,"slippage must be between 0 (inclusive) and 1 (exclusive)"),tiny_invariant_default()(e>0,"coinInAmount must be greater than 0");let c=await calculation_MoonbagsCalculation.getSuiAmountAfterSell({poolId:i,curveAmount:e,frontendFee:s?s.tradeFeePercent:void 0},u),_=BigInt(new(external_bignumber_js_default())(c.toString()).multipliedBy(1-o).toFixed(0,3)),{tx:l,coinOut:d}=await n({accountAddress:r,inCoinType:t,outCoinType:a,inputAmount:e.toString(),minAmountOut:_.toString(),poolId:i,frontendFee:s?s.tradeFeePercent:void 0,frontendFeeRecipient:s?s.tradeFeeRecipientAddress:void 0,extendTx:void 0,isSponsored:!1},u);tiny_invariant_default()(d,"Coin out is required"),l.transferObjects([d],l.pure.address(r)),l.setSender(r);let g=await getNeededGasFee(u,l,r,0);return(l=await addGasFee({inheritTx:l,sender:r,feeAmount:g},u)).build({client:u})}}(transaction_MoonbagsTransaction||(transaction_MoonbagsTransaction={}));class AggregatorModule{sdk;_astrosAggregator;_aftermathAggregator;_sevenkAggregator;_cetusAggregator;_flowXAggregator;constructor(e){this.sdk=e,this._astrosAggregator=new astros_AstrosAggregator({defaultTradeFee:e.options.tradeFee,astrosApiKey:e.options.astrosApiKey},e.suiClient),this._aftermathAggregator=new aftermath_AftermathAggregator({defaultTradeFee:e.options.tradeFee,aftermathApiKey:e.options.aftermathApiKey,aftermathApiEndpoint:e.options.aftermathApiEndpoint},e.suiClient),this._sevenkAggregator=new _7k_SevenKAggregator({defaultTradeFee:e.options.tradeFee,sevenKApiKey:e.options.sevenKApiKey},e.suiClient),this._cetusAggregator=new cetus_CetusAggregator({defaultTradeFee:e.options.tradeFee,cetusApiKey:e.options.cetusApiKey,cetusApiEndpoint:e.options.cetusApiEndpoint,cetusPartnerId:e.options.cetusPartnerId},e.suiClient),this._flowXAggregator=new flowx_FlowXAggregator({defaultTradeFee:e.options.tradeFee,flowxApiKey:e.options.flowxApiKey},e.suiClient)}get astrosAggregator(){return this._astrosAggregator}get aftermathAggregator(){return this._aftermathAggregator}get sevenkAggregator(){return this._sevenkAggregator}get cetusAggregator(){return this._cetusAggregator}get flowXAggregator(){return this._flowXAggregator}async getTradeRoute(e,t){let n;switch(e){case common_SupportedAggregator.ASTROS:{let e,a=await this._astrosAggregator.getTradeRoute(t);if(!a)return null;let i=astros_AstrosAggregator.toCommonTradeRoutes(a,t.coinInType,t.coinOutType);if(!i)return null;e=t.tradeFee?t.tradeFee.tradeFeePercent:this.sdk.options.tradeFee.tradeFeePercent,i.amountOut=BigInt(new(external_bignumber_js_default())(a.amount_out).multipliedBy(1-e).toFixed(0,3)),n={route:i,aggregatorRoute:a};break}case common_SupportedAggregator.AFTERMATH:{let e=await this._aftermathAggregator.getTradeRoute(t);if(!e)return null;let a=aftermath_AftermathAggregator.toCommonTradeRoutes(e);if(!a)return null;n={route:a,aggregatorRoute:e};break}case common_SupportedAggregator.SEVENK:{let e=await this._sevenkAggregator.getTradeRoute(t);if(!e)return null;let a=_7k_SevenKAggregator.toCommonTradeRoutes(e);if(!a)return null;n={route:a,aggregatorRoute:e};break}case common_SupportedAggregator.CETUS:{let e=await this._cetusAggregator.getTradeRoute(t);if(!e)return null;let a=cetus_CetusAggregator.toCommonTradeRoutes(e,t.coinInType,t.coinOutType);if(!a)return null;n={route:a,aggregatorRoute:e};break}case common_SupportedAggregator.FLOWX:{let e=await this._flowXAggregator.getTradeRoute(t);if(!e)return null;let a=flowx_FlowXAggregator.toCommonTradeRoutes(e);if(!a)return null;n={route:a,aggregatorRoute:e}}}return n}async getTransactionByRoute(e,t){switch(e){case common_SupportedAggregator.ASTROS:return this._astrosAggregator.getTransaction({walletAddress:t.walletAddress,completeRoute:t.completeRoute,slippage:t.slippage,tradeFee:t.tradeFee});case common_SupportedAggregator.AFTERMATH:return this._aftermathAggregator.getTransaction({walletAddress:t.walletAddress,completeRoute:t.completeRoute,slippage:t.slippage});case common_SupportedAggregator.SEVENK:return this._sevenkAggregator.getTransaction({walletAddress:t.walletAddress,completeRoute:t.completeRoute,slippage:t.slippage,tradeFee:t.tradeFee});case common_SupportedAggregator.CETUS:return this._cetusAggregator.getTransaction({walletAddress:t.walletAddress,completeRoute:t.completeRoute,slippage:t.slippage,tradeFee:t.tradeFee});case common_SupportedAggregator.FLOWX:return this._flowXAggregator.getTransaction({walletAddress:t.walletAddress,completeRoute:t.completeRoute,slippage:t.slippage,tradeFee:t.tradeFee})}}async getTradeTransaction(e,t){let n=await this.getTradeRoute(e,{coinInAmount:t.coinInAmount,coinInType:t.coinInType,coinOutType:t.coinOutType,tradeFee:t.tradeFee});if(!n)return null;let a=await this.getTransactionByRoute(e,{walletAddress:t.walletAddress,completeRoute:n.aggregatorRoute,slippage:t.slippage,tradeFee:t.tradeFee});return{route:n.route,aggregatorRoute:n.aggregatorRoute,transaction:a}}async getTradeTransactionWithBestRate(e){let t=Object.keys(common_SupportedAggregator),n=await Promise.all(t.map(async t=>{try{return await this.getTradeRoute(t,e)}catch{return null}})),a=null,i=null;for(let e=0;e<n.length;e++){let o=n[e],r=t[e];if(o&&(!a||o.route.amountOut>a.route.amountOut)){a=o,i=r;continue}}if(!a||!i)return null;let o=await this.getTransactionByRoute(i,{walletAddress:e.walletAddress,completeRoute:a.aggregatorRoute,slippage:e.slippage,tradeFee:e.tradeFee});return{route:a.route,aggregatorRoute:a.aggregatorRoute,transaction:o}}async getAmountOut(e,t){let n=await this.getTradeRoute(e,t);return n?n.route.amountOut:null}async getBestAmountOut(e){let t=Object.keys(common_SupportedAggregator),n=null,a=null;for(let i of t){let t=await this.getAmountOut(i,e);null!==t&&(null===n||t>n)&&(n=t,a=i)}return null===n||null===a?null:{amountOut:n,aggregator:a}}}const BOOSTING_PACKAGE_ID="0x25fa0eb553dd69fa6a8028f73a38f1df7f289fa88a58ed3d7dc5a5360155bb19",CONFIG_ID="0x8b1a8ac6e34688cd8f8f8e5fefa9d5fb9e1ff74d2f132f8e208ae5ac9cc530bb",ADMIN_CAP_ID="0x13d101f44a0710a5475bec5f492a87b80e03d92d1cf540f26096f65850b23d26";class BoostingModule{sdk;constructor(e){this.sdk=e}async getConfig(){let e=await this.sdk.suiClient.getObject({id:CONFIG_ID,options:{showContent:!0}});tiny_invariant_default()(e.data?.content,"Config object not found or has no content"),tiny_invariant_default()(e.data?.content.dataType==="moveObject","Config object is not a Move object");let t=e.data.content.fields,n=t.id.id,a=t.fee_receiver,i=t.tiers.fields.contents,o={};for(let e of i){let t=e.fields.key,n=e.fields.value.fields.duration,a=e.fields.value.fields.amount,i=e.fields.value.fields.point,r=e.fields.value.fields.original_amount;o[t]={duration:BigInt(n),amount:BigInt(a),point:BigInt(i),originalAmount:BigInt(r)}}return{id:n,receiverAddress:a,tiers:o}}async buildPayBoostingTx({walletAddress:e,tierId:t,boostingCoinType:n,currentTx:a}){let i=await this.getConfig();tiny_invariant_default()(t in i.tiers,"Invalid tier ID");let o=i.tiers[t].amount,r=a||new transactions_namespaceObject.Transaction,s=r.splitCoins(r.gas,[r.pure.u64(o)]);r.moveCall({target:`${BOOSTING_PACKAGE_ID}::boosting::pay`,typeArguments:[(0,utils_namespaceObject.normalizeStructTag)(n)],arguments:[r.object(CONFIG_ID),r.pure.u64(t),s]}),r.setSender(e);let u=await getNeededGasFee(this.sdk.suiClient,r,e,0);return addGasFee({inheritTx:r,sender:e,feeAmount:u},this.sdk.suiClient)}async buildAddTierTx({adminAddress:e,tierId:t,duration:n,point:a,originalAmount:i,amount:o,currentTx:r}){let s=r||new transactions_namespaceObject.Transaction;s.moveCall({target:`${BOOSTING_PACKAGE_ID}::config::add_tier`,typeArguments:[],arguments:[s.object(CONFIG_ID),s.object(ADMIN_CAP_ID),s.pure.u64(t),s.pure.u64(a),s.pure.u64(n),s.pure.u64(i),s.pure.u64(o)]}),s.setSender(e);let u=await getNeededGasFee(this.sdk.suiClient,s,e,0);return addGasFee({inheritTx:s,sender:e,feeAmount:u},this.sdk.suiClient)}async buildUpdateTierTx({adminAddress:e,tierId:t,duration:n,amount:a,originalAmount:i,point:o,currentTx:r}){let s=r||new transactions_namespaceObject.Transaction;s.moveCall({target:`${BOOSTING_PACKAGE_ID}::config::update_tier`,typeArguments:[],arguments:[s.object(CONFIG_ID),s.object(ADMIN_CAP_ID),s.pure.u64(t),s.pure.u64(n),s.pure.u64(a),s.pure.u64(o),s.pure.u64(i)]}),s.setSender(e);let u=await getNeededGasFee(this.sdk.suiClient,s,e,0);return addGasFee({inheritTx:s,sender:e,feeAmount:u},this.sdk.suiClient)}async buildRemoveTierTx({adminAddress:e,tierId:t,currentTx:n}){let a=n||new transactions_namespaceObject.Transaction;a.moveCall({target:`${BOOSTING_PACKAGE_ID}::config::remove_tier`,typeArguments:[],arguments:[a.object(CONFIG_ID),a.object(ADMIN_CAP_ID),a.pure.u64(t)]}),a.setSender(e);let i=await getNeededGasFee(this.sdk.suiClient,a,e,0);return addGasFee({inheritTx:a,sender:e,feeAmount:i},this.sdk.suiClient)}async buildUpdateFeeReceiver({adminAddress:e,newReceiverAddress:t,currentTx:n}){let a=n||new transactions_namespaceObject.Transaction;a.moveCall({target:`${BOOSTING_PACKAGE_ID}::config::update_fee_receiver`,typeArguments:[],arguments:[a.object(CONFIG_ID),a.object(ADMIN_CAP_ID),a.pure.address(t)]}),a.setSender(e);let i=await getNeededGasFee(this.sdk.suiClient,a,e,0);return addGasFee({inheritTx:a,sender:e,feeAmount:i},this.sdk.suiClient)}async buildPayBoostingWithAdminTx({walletAddress:e,tierId:t,customAmount:n,boostingCoinType:a,currentTx:i}){let o=i||new transactions_namespaceObject.Transaction,r=o.splitCoins(o.gas,[o.pure.u64(n)]);o.moveCall({target:`${BOOSTING_PACKAGE_ID}::boosting::pay_with_admin`,typeArguments:[(0,utils_namespaceObject.normalizeStructTag)(a)],arguments:[o.object(ADMIN_CAP_ID),o.object(CONFIG_ID),o.pure.u64(t),o.pure.u64(n),r]}),o.setSender(e);let s=await getNeededGasFee(this.sdk.suiClient,o,e,0);return addGasFee({inheritTx:o,sender:e,feeAmount:s},this.sdk.suiClient)}}class CurveModule{sdk;constructor(e){this.sdk=e}async getTradeTransaction(e,t){let n,{coinInType:a,coinOutType:i}=t;tiny_invariant_default()(a!==i,"coinInType and coinOutType must be different"),tiny_invariant_default()(a===SUI_TYPE||i===SUI_TYPE,"One of coinInType or coinOutType must be SUI");let o=a===SUI_TYPE;switch(e){case types_SupportedBondingCurve.MOONBAGS:n=o?await transaction_MoonbagsTransaction.getBuyTransaction(t,this.sdk.suiClient):await transaction_MoonbagsTransaction.getSellTransaction(t,this.sdk.suiClient);break;case types_SupportedBondingCurve.BLAST_FUN:n=o?await sdk_transaction_BlastFunSDKTransaction.getBuyTransaction(t,this.sdk.suiClient):await sdk_transaction_BlastFunSDKTransaction.getSellTransaction(t,this.sdk.suiClient);break;default:throw Error(`Unsupported bonding curve platform: ${e}`)}return n}}const SUBSCRIPTION_PACKAGE_ID="0xaedb9a4330883c91769c99e7d2a7ea573b686504daf11d13353141260736a902",SUBSCRIPTION_CONFIG_ID="0xe88e0d6792c2bef3f54d594ef26d8df85c6227f5370c200b860d8264f5d78744",SUBSCRIPTION_ADMIN_CAP_ID="0x4d15fc6c181efbe82020697705d37b29154edecb4c682b502bd8f0136d4dd7bf",PAYMENT_COIN_TYPE="0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC";class SubscriptionModule{sdk;constructor(e){this.sdk=e}async getConfig(){let e=await this.sdk.suiClient.getObject({id:SUBSCRIPTION_CONFIG_ID,options:{showContent:!0}});tiny_invariant_default()(e.data,"Config object not found"),tiny_invariant_default()(e.data.content,"Config object has no content"),tiny_invariant_default()(e.data?.content.dataType==="moveObject","Config object is not a Move object");let t=e.data.content.fields,n=t.id.id,a=t.fee_receiver,i=t.paused,o=t.accepted_payment_type,r=t.plans.fields.contents,s={};for(let e of r){let t=e.fields.key,n=e.fields.value.fields.id,a=e.fields.value.fields.price,i=e.fields.value.fields.month_interval,o=e.fields.value.fields.ptype;s[t]={id:BigInt(n),price:BigInt(a),monthInterval:i,planType:o}}return{id:n,plans:s,feeReceiverWallet:a,paused:i,acceptedPaymentType:o}}async buildSubscribeCyclePlanTx({walletAddress:e,planId:t,reference:n,paymentCoinType:a=PAYMENT_COIN_TYPE,currentTx:i}){let o=await this.getConfig();tiny_invariant_default()(!o.paused,"Contract is paused"),tiny_invariant_default()(t in o.plans,"Invalid plan ID");let r=o.plans[t].price,{tx:s,coinData:u}=await getSplitCoinForTx({account:e,amount:r.toString(),splits:[r.toString()],coinType:a,inheritTx:i},this.sdk.suiClient);s.moveCall({target:`${SUBSCRIPTION_PACKAGE_ID}::subscription::subscribe_cycle_plan`,typeArguments:[a],arguments:[s.object(SUBSCRIPTION_CONFIG_ID),s.pure.u64(t),s.pure.string(n),u]}),s.setSender(e);let c=await getNeededGasFee(this.sdk.suiClient,s,e,0);return addGasFee({inheritTx:s,sender:e,feeAmount:c},this.sdk.suiClient)}async buildUpgradeCyclePlanTx({walletAddress:e,currentPlanId:t,targetPlanId:n,reference:a,isNextCycle:i,paymentCoinType:o=PAYMENT_COIN_TYPE,currentTx:r}){let s=await this.getConfig();tiny_invariant_default()(!s.paused,"Contract is paused"),tiny_invariant_default()(t in s.plans,"Invalid current plan ID"),tiny_invariant_default()(n in s.plans,"Invalid target plan ID"),tiny_invariant_default()(t!==n,"Current and target plan IDs must be different");let u=s.plans[n].price,{tx:c,coinData:_}=await getSplitCoinForTx({account:e,amount:u.toString(),splits:[u.toString()],coinType:o,inheritTx:r},this.sdk.suiClient);c.moveCall({target:`${SUBSCRIPTION_PACKAGE_ID}::subscription::upgrade_cycle_plan`,typeArguments:[o],arguments:[c.object(SUBSCRIPTION_CONFIG_ID),c.pure.u64(t),c.pure.u64(n),c.pure.string(a),c.pure.bool(i),_]}),c.setSender(e);let l=await getNeededGasFee(this.sdk.suiClient,c,e,0);return addGasFee({inheritTx:c,sender:e,feeAmount:l},this.sdk.suiClient)}async buildBuyMoreCUPlanTx({walletAddress:e,planId:t,reference:n,paidAmount:a,paymentCoinType:i=PAYMENT_COIN_TYPE,currentTx:o}){let r=await this.getConfig();tiny_invariant_default()(!r.paused,"Contract is paused"),tiny_invariant_default()(t in r.plans,"Invalid plan ID");let{tx:s,coinData:u}=await getSplitCoinForTx({account:e,amount:a.toString(),splits:[a.toString()],coinType:i,inheritTx:o},this.sdk.suiClient);s.moveCall({target:`${SUBSCRIPTION_PACKAGE_ID}::subscription::buy_more_cu`,typeArguments:[i],arguments:[s.object(SUBSCRIPTION_CONFIG_ID),s.pure.u64(t),s.pure.string(n),s.pure.u64(a),u]}),s.setSender(e);let c=await getNeededGasFee(this.sdk.suiClient,s,e,0);return addGasFee({inheritTx:s,sender:e,feeAmount:c},this.sdk.suiClient)}async buildSubscribePlanWithAdminTx({walletAddress:e,planId:t,reference:n,customAmount:a,paymentCoinType:i=PAYMENT_COIN_TYPE,currentTx:o}){let r=await this.getConfig();tiny_invariant_default()(!r.paused,"Contract is paused");let{tx:s,coinData:u}=await getSplitCoinForTx({account:e,amount:a.toString(),splits:[a.toString()],coinType:i,inheritTx:o},this.sdk.suiClient);s.moveCall({target:`${SUBSCRIPTION_PACKAGE_ID}::subscription::subscribe_plan_with_admin`,typeArguments:[i],arguments:[s.object(SUBSCRIPTION_ADMIN_CAP_ID),s.object(SUBSCRIPTION_CONFIG_ID),s.pure.u64(t),s.pure.string(n),s.pure.u64(a),u]}),s.setSender(e);let c=await getNeededGasFee(this.sdk.suiClient,s,e,0);return addGasFee({inheritTx:s,sender:e,feeAmount:c},this.sdk.suiClient)}async buildAddPlanTx({adminAddress:e,planId:t,planType:n,monthInterval:a,price:i,currentTx:o}){let r=o||new transactions_namespaceObject.Transaction;r.moveCall({target:`${SUBSCRIPTION_PACKAGE_ID}::config::add_plan`,typeArguments:[],arguments:[r.object(SUBSCRIPTION_CONFIG_ID),r.object(SUBSCRIPTION_ADMIN_CAP_ID),r.pure.u64(t),r.pure.u8(n),r.pure.u8(a),r.pure.u64(i)]}),r.setSender(e);let s=await getNeededGasFee(this.sdk.suiClient,r,e,0);return addGasFee({inheritTx:r,sender:e,feeAmount:s},this.sdk.suiClient)}async buildUpdatePlanTx({adminAddress:e,planId:t,planType:n,monthInterval:a,price:i,currentTx:o}){let r=o||new transactions_namespaceObject.Transaction;r.moveCall({target:`${SUBSCRIPTION_PACKAGE_ID}::config::update_plan`,typeArguments:[],arguments:[r.object(SUBSCRIPTION_CONFIG_ID),r.object(SUBSCRIPTION_ADMIN_CAP_ID),r.pure.u64(BigInt(t)),r.pure.u8(n),r.pure.u8(a),r.pure.u64(i)]}),r.setSender(e);let s=await getNeededGasFee(this.sdk.suiClient,r,e,0);return addGasFee({inheritTx:r,sender:e,feeAmount:s},this.sdk.suiClient)}async buildRemovePlanTx({adminAddress:e,planId:t,currentTx:n}){let a=n||new transactions_namespaceObject.Transaction;a.moveCall({target:`${SUBSCRIPTION_PACKAGE_ID}::config::remove_plan`,typeArguments:[],arguments:[a.object(SUBSCRIPTION_CONFIG_ID),a.object(SUBSCRIPTION_ADMIN_CAP_ID),a.pure.u64(BigInt(t))]}),a.setSender(e);let i=await getNeededGasFee(this.sdk.suiClient,a,e,0);return addGasFee({inheritTx:a,sender:e,feeAmount:i},this.sdk.suiClient)}async buildUpdateFeeReceiverWalletTx({adminAddress:e,newFeeReceiverWallet:t,currentTx:n}){let a=n||new transactions_namespaceObject.Transaction;a.moveCall({target:`${SUBSCRIPTION_PACKAGE_ID}::config::update_fee_receiver`,typeArguments:[],arguments:[a.object(SUBSCRIPTION_CONFIG_ID),a.object(SUBSCRIPTION_ADMIN_CAP_ID),a.pure.address(t)]}),a.setSender(e);let i=await getNeededGasFee(this.sdk.suiClient,a,e,0);return addGasFee({inheritTx:a,sender:e,feeAmount:i},this.sdk.suiClient)}async buildSetPausedTx({adminAddress:e,paused:t,currentTx:n}){let a=n||new transactions_namespaceObject.Transaction;a.moveCall({target:`${SUBSCRIPTION_PACKAGE_ID}::config::set_paused`,typeArguments:[],arguments:[a.object(SUBSCRIPTION_CONFIG_ID),a.object(SUBSCRIPTION_ADMIN_CAP_ID),a.pure.bool(t)]}),a.setSender(e);let i=await getNeededGasFee(this.sdk.suiClient,a,e,0);return addGasFee({inheritTx:a,sender:e,feeAmount:i},this.sdk.suiClient)}async buildSetAcceptedPaymentTypeTx({adminAddress:e,paymentCoinType:t,currentTx:n}){let a=n||new transactions_namespaceObject.Transaction;a.moveCall({target:`${SUBSCRIPTION_PACKAGE_ID}::config::set_accepted_payment_type`,typeArguments:[t],arguments:[a.object(SUBSCRIPTION_CONFIG_ID),a.object(SUBSCRIPTION_ADMIN_CAP_ID)]}),a.setSender(e);let i=await getNeededGasFee(this.sdk.suiClient,a,e,0);return addGasFee({inheritTx:a,sender:e,feeAmount:i},this.sdk.suiClient)}}const DEFAULT_TRADE_FEE={tradeFeePercent:.01,tradeFeeRecipientAddress:"0xdaf1c8ed29d89cd8f217f609bad0a668fa6f158c12000bfa5f93e670c99e24ff"};class NoodlesSdk{options;_suiClient;aggregatorModule;curveModule;boostingModule;subscriptionModule;constructor(e){this.options=e,this._suiClient=new client_namespaceObject.SuiClient({url:(0,client_namespaceObject.getFullnodeUrl)("mainnet")}),this.aggregatorModule=new AggregatorModule(this),this.curveModule=new CurveModule(this),this.boostingModule=new BoostingModule(this),this.subscriptionModule=new SubscriptionModule(this)}get suiClient(){return this._suiClient}}const ed25519_namespaceObject=require("@mysten/sui/keypairs/ed25519"),CONSTANTS={GAS_FEE_BUFFER_PERCENTAGE:.1};class DraftTransferTx{suiClient;constructor(e){this.suiClient=e}validatePrivateKey(e,t){tiny_invariant_default()(e?.trim(),"Private key is required");let n=ed25519_namespaceObject.Ed25519Keypair.fromSecretKey(e),a=n.getPublicKey().toSuiAddress();if(a!==t)throw Error(`Private key mismatch. Expected: ${t}, Got: ${a}`);return n}async createDraft(e,t,n){tiny_invariant_default()(e?.trim(),"Sender address is required"),tiny_invariant_default()(t?.trim(),"Recipient address is required"),tiny_invariant_default()(e!==t,"Sender and recipient cannot be the same"),tiny_invariant_default()(n>0n,"Transfer amount must be at least 1 MIST");try{let a=new transactions_namespaceObject.Transaction,[i]=a.splitCoins(a.gas,[n]);a.transferObjects([i],t),a.setSender(e);let o=await this.suiClient.getReferenceGasPrice();a.setGasPrice(o);let r=await getNeededGasFee(this.suiClient,a,e,CONSTANTS.GAS_FEE_BUFFER_PERCENTAGE);a=await addGasFee({inheritTx:a,sender:e,feeAmount:r,suiInputAmount:n},this.suiClient);let s=await a.build({client:this.suiClient}),u=Buffer.from(s).toString("base64"),c=await a.getDigest();return{sender:e,recipient:t,amountMIST:n,txDraftBase64:u,txDigest:c}}catch(e){throw Error(`Failed to create draft transaction: ${e instanceof Error?e.message:"Unknown error"}`)}}async execute(e,t){try{tiny_invariant_default()(e,"Draft transaction is required"),tiny_invariant_default()(e.txDraftBase64?.trim(),"Transaction data is required");let n=this.validatePrivateKey(t,e.sender),a=(0,utils_namespaceObject.fromBase64)(e.txDraftBase64),{signature:i}=await n.signTransaction(a),o=await this.suiClient.executeTransactionBlock({transactionBlock:a,signature:i});return{success:!0,txDigest:o.digest,effects:o.effects}}catch(e){return{success:!1,error:e instanceof Error?e.message:"Unknown error occurred"}}}async getTransactionStatus(e){tiny_invariant_default()(e?.trim(),"Transaction digest is required");try{let t=await this.suiClient.getTransactionBlock({digest:e,options:{showEffects:!0}});if(!t?.effects?.status)return"pending";return"success"===t.effects.status.status?"success":"failure"}catch(e){if(e instanceof Error&&(e.message.includes("not found")||e.message.includes("Could not find")))return"pending";return"failure"}}}for(var __rspack_i in exports.ADMIN_CAP_ID=__webpack_exports__.ADMIN_CAP_ID,exports.AftermathAggregator=__webpack_exports__.AftermathAggregator,exports.AggregatorModule=__webpack_exports__.AggregatorModule,exports.AstrosAggregator=__webpack_exports__.AstrosAggregator,exports.BASE_BPS=__webpack_exports__.BASE_BPS,exports.BLUEFIN_PACKAGE_ID=__webpack_exports__.BLUEFIN_PACKAGE_ID,exports.BOOSTING_PACKAGE_ID=__webpack_exports__.BOOSTING_PACKAGE_ID,exports.BlastFunConstants=__webpack_exports__.BlastFunConstants,exports.BlastFunCustomCalculation=__webpack_exports__.BlastFunCustomCalculation,exports.BlastFunCustomTransaction=__webpack_exports__.BlastFunCustomTransaction,exports.BlastFunPackage=__webpack_exports__.BlastFunPackage,exports.BlastFunSDKCalculation=__webpack_exports__.BlastFunSDKCalculation,exports.BlastFunSDKTransaction=__webpack_exports__.BlastFunSDKTransaction,exports.BluefinTx=__webpack_exports__.BluefinTx,exports.BoostingModule=__webpack_exports__.BoostingModule,exports.Bps=__webpack_exports__.Bps,exports.CLOCK_OBJECT_ID=__webpack_exports__.CLOCK_OBJECT_ID,exports.CONFIG_ID=__webpack_exports__.CONFIG_ID,exports.CetusAggregator=__webpack_exports__.CetusAggregator,exports.CurveModule=__webpack_exports__.CurveModule,exports.DEFAULT_TRADE_FEE=__webpack_exports__.DEFAULT_TRADE_FEE,exports.DraftTransferTx=__webpack_exports__.DraftTransferTx,exports.FlowXAggregator=__webpack_exports__.FlowXAggregator,exports.MathUtils=__webpack_exports__.MathUtils,exports.MoonbagsCalculation=__webpack_exports__.MoonbagsCalculation,exports.MoonbagsConstants=__webpack_exports__.MoonbagsConstants,exports.MoonbagsPackage=__webpack_exports__.MoonbagsPackage,exports.MoonbagsTransaction=__webpack_exports__.MoonbagsTransaction,exports.NATIVE_USDC_TOKEN_TYPE=__webpack_exports__.NATIVE_USDC_TOKEN_TYPE,exports.NoodlesSdk=__webpack_exports__.NoodlesSdk,exports.PAYMENT_COIN_TYPE=__webpack_exports__.PAYMENT_COIN_TYPE,exports.SUBSCRIPTION_ADMIN_CAP_ID=__webpack_exports__.SUBSCRIPTION_ADMIN_CAP_ID,exports.SUBSCRIPTION_CONFIG_ID=__webpack_exports__.SUBSCRIPTION_CONFIG_ID,exports.SUBSCRIPTION_PACKAGE_ID=__webpack_exports__.SUBSCRIPTION_PACKAGE_ID,exports.SUI_FULL_TYPE=__webpack_exports__.SUI_FULL_TYPE,exports.SUI_METADATA_OBJECT_ID=__webpack_exports__.SUI_METADATA_OBJECT_ID,exports.SUI_TYPE=__webpack_exports__.SUI_TYPE,exports.SevenKAggregator=__webpack_exports__.SevenKAggregator,exports.SubscriptionModule=__webpack_exports__.SubscriptionModule,exports.SupportedAggregator=__webpack_exports__.SupportedAggregator,exports.SupportedBondingCurve=__webpack_exports__.SupportedBondingCurve,exports.TradeFeeOptions=__webpack_exports__.TradeFeeOptions,exports.USDC_TOKEN_TYPE=__webpack_exports__.USDC_TOKEN_TYPE,exports.adaptSuiClient=__webpack_exports__.adaptSuiClient,exports.adaptTransaction=__webpack_exports__.adaptTransaction,exports.addGasFee=__webpack_exports__.addGasFee,exports.createCompatibleSuiClient=__webpack_exports__.createCompatibleSuiClient,exports.getAmountAfterFee=__webpack_exports__.getAmountAfterFee,exports.getCoinObjectIdsByAmount=__webpack_exports__.getCoinObjectIdsByAmount,exports.getMemezPumpSDK=__webpack_exports__.getMemezPumpSDK,exports.getMoveObject=__webpack_exports__.getMoveObject,exports.getMoveObjectContent=__webpack_exports__.getMoveObjectContent,exports.getNeededGasFee=__webpack_exports__.getNeededGasFee,exports.getSplitCoinForTx=__webpack_exports__.getSplitCoinForTx,exports.getSplitCoinsAfterFee=__webpack_exports__.getSplitCoinsAfterFee,exports.splitSuiCoinAfterFeeFromBuyTx=__webpack_exports__.splitSuiCoinAfterFeeFromBuyTx,exports.splitSuiCoinAfterFeeFromSellTx=__webpack_exports__.splitSuiCoinAfterFeeFromSellTx,__webpack_exports__)-1===["ADMIN_CAP_ID","AftermathAggregator","AggregatorModule","AstrosAggregator","BASE_BPS","BLUEFIN_PACKAGE_ID","BOOSTING_PACKAGE_ID","BlastFunConstants","BlastFunCustomCalculation","BlastFunCustomTransaction","BlastFunPackage","BlastFunSDKCalculation","BlastFunSDKTransaction","BluefinTx","BoostingModule","Bps","CLOCK_OBJECT_ID","CONFIG_ID","CetusAggregator","CurveModule","DEFAULT_TRADE_FEE","DraftTransferTx","FlowXAggregator","MathUtils","MoonbagsCalculation","MoonbagsConstants","MoonbagsPackage","MoonbagsTransaction","NATIVE_USDC_TOKEN_TYPE","NoodlesSdk","PAYMENT_COIN_TYPE","SUBSCRIPTION_ADMIN_CAP_ID","SUBSCRIPTION_CONFIG_ID","SUBSCRIPTION_PACKAGE_ID","SUI_FULL_TYPE","SUI_METADATA_OBJECT_ID","SUI_TYPE","SevenKAggregator","SubscriptionModule","SupportedAggregator","SupportedBondingCurve","TradeFeeOptions","USDC_TOKEN_TYPE","adaptSuiClient","adaptTransaction","addGasFee","createCompatibleSuiClient","getAmountAfterFee","getCoinObjectIdsByAmount","getMemezPumpSDK","getMoveObject","getMoveObjectContent","getNeededGasFee","getSplitCoinForTx","getSplitCoinsAfterFee","splitSuiCoinAfterFeeFromBuyTx","splitSuiCoinAfterFeeFromSellTx"].indexOf(__rspack_i)&&(exports[__rspack_i]=__webpack_exports__[__rspack_i]);Object.defineProperty(exports,"__esModule",{value:!0});
1
+ "use strict";const __rslib_import_meta_url__="u"<typeof document?new(require("url".replace("",""))).URL("file:"+__filename).href:document.currentScript&&document.currentScript.src||new URL("main.js",document.baseURI).href;var types_TradeFeeOptions,constants_BlastFunConstants,package_MathUtils,package_Bps,package_BlastFunPackage,custom_calculation_BlastFunCustomCalculation,bluefin_BluefinTx,custom_transaction_BlastFunCustomTransaction,sdk_calculation_BlastFunSDKCalculation,sdk_transaction_BlastFunSDKTransaction,constants_MoonbagsConstants,package_MoonbagsPackage,calculation_MoonbagsCalculation,transaction_MoonbagsTransaction,__webpack_require__={};__webpack_require__.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return __webpack_require__.d(t,{a:t}),t},__webpack_require__.d=(e,t)=>{for(var n in t)__webpack_require__.o(t,n)&&!__webpack_require__.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},__webpack_require__.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),__webpack_require__.r=e=>{"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var __webpack_exports__={};__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{addGasFee:()=>addGasFee,TradeFeeOptions:()=>types_TradeFeeOptions,SUBSCRIPTION_CONFIG_ID:()=>SUBSCRIPTION_CONFIG_ID,getMemezPumpSDK:()=>getMemezPumpSDK,DraftTransferTx:()=>DraftTransferTx,BlastFunSDKCalculation:()=>sdk_calculation_BlastFunSDKCalculation,MoonbagsConstants:()=>constants_MoonbagsConstants,NoodlesPaySdk:()=>NoodlesPaySdk,Bps:()=>package_Bps,ADMIN_CAP_ID:()=>ADMIN_CAP_ID,splitSuiCoinAfterFeeFromBuyTx:()=>splitSuiCoinAfterFeeFromBuyTx,getMoveObject:()=>getMoveObject,SUBSCRIPTION_PACKAGE_ID:()=>SUBSCRIPTION_PACKAGE_ID,MoonbagsCalculation:()=>calculation_MoonbagsCalculation,SUBSCRIPTION_ADMIN_CAP_ID:()=>SUBSCRIPTION_ADMIN_CAP_ID,getSplitCoinsAfterFee:()=>getSplitCoinsAfterFee,AstrosAggregator:()=>astros_AstrosAggregator,BlastFunSDKTransaction:()=>sdk_transaction_BlastFunSDKTransaction,CONFIG_ID:()=>CONFIG_ID,AftermathAggregator:()=>aftermath_AftermathAggregator,FlowXAggregator:()=>flowx_FlowXAggregator,adaptSuiClient:()=>adaptSuiClient,getNeededGasFee:()=>getNeededGasFee,AggregatorModule:()=>AggregatorModule,adaptTransaction:()=>adaptTransaction,createCompatibleSuiClient:()=>createCompatibleSuiClient,splitSuiCoinAfterFeeFromSellTx:()=>splitSuiCoinAfterFeeFromSellTx,SupportedAggregator:()=>common_SupportedAggregator,NATIVE_USDC_TOKEN_TYPE:()=>NATIVE_USDC_TOKEN_TYPE,BOOSTING_PACKAGE_ID:()=>BOOSTING_PACKAGE_ID,SUI_TYPE:()=>SUI_TYPE,USDC_TOKEN_TYPE:()=>USDC_TOKEN_TYPE,MoonbagsPackage:()=>package_MoonbagsPackage,getCoinObjectIdsByAmount:()=>getCoinObjectIdsByAmount,SUI_FULL_TYPE:()=>SUI_FULL_TYPE,getAmountAfterFee:()=>getAmountAfterFee,BLUEFIN_PACKAGE_ID:()=>BLUEFIN_PACKAGE_ID,SubscriptionModule:()=>SubscriptionModule,MathUtils:()=>package_MathUtils,CLOCK_OBJECT_ID:()=>CLOCK_OBJECT_ID,CurveModule:()=>CurveModule,MoonbagsTransaction:()=>transaction_MoonbagsTransaction,BlastFunPackage:()=>package_BlastFunPackage,CetusAggregator:()=>cetus_CetusAggregator,DEFAULT_TRADE_FEE:()=>DEFAULT_TRADE_FEE,BlastFunCustomTransaction:()=>custom_transaction_BlastFunCustomTransaction,NoodlesSdk:()=>NoodlesSdk,BoostingModule:()=>BoostingModule,getMoveObjectContent:()=>getMoveObjectContent,getSplitCoinForTx:()=>getSplitCoinForTx,BlastFunCustomCalculation:()=>custom_calculation_BlastFunCustomCalculation,SupportedBondingCurve:()=>types_SupportedBondingCurve,PAYMENT_COIN_TYPE:()=>PAYMENT_COIN_TYPE,BASE_BPS:()=>1e4,BluefinTx:()=>bluefin_BluefinTx,SUI_METADATA_OBJECT_ID:()=>SUI_METADATA_OBJECT_ID,SevenKAggregator:()=>_7k_SevenKAggregator,BlastFunConstants:()=>constants_BlastFunConstants});const sdk_ts_namespaceObject=require("@7kprotocol/sdk-ts"),transactions_namespaceObject=require("@mysten/sui/transactions"),external_bignumber_js_namespaceObject=require("bignumber.js");var external_bignumber_js_default=__webpack_require__.n(external_bignumber_js_namespaceObject);class _7k_SevenKAggregator{_config;_suiClient;constructor(e,t){this._config=e,this._suiClient=t}async getTradeRoute({coinInAmount:e,coinInType:t,coinOutType:n,tradeFee:a}){try{this._config.sevenKApiKey&&sdk_ts_namespaceObject.Config.setApiKey(this._config.sevenKApiKey);let i=a?a.tradeFeePercent:this._config.defaultTradeFee.tradeFeePercent;return await (0,sdk_ts_namespaceObject.getQuote)({tokenIn:t,tokenOut:n,amountIn:e.toString(),commissionBps:1e4*i})}catch(e){return null}}async getTransaction({walletAddress:e,completeRoute:t,slippage:n,tradeFee:a}){let i,o;a?(i=a.tradeFeePercent,o=a.tradeFeeRecipientAddress):(i=this._config.defaultTradeFee.tradeFeePercent,o=this._config.defaultTradeFee.tradeFeeRecipientAddress);let r=await (0,sdk_ts_namespaceObject.buildTx)({quoteResponse:t,slippage:n,accountAddress:e,commission:{partner:o,commissionBps:1e4*i}});return r.tx instanceof sdk_ts_namespaceObject.BluefinXTx?transactions_namespaceObject.Transaction.from(r.tx.txBytes).build({client:this._suiClient}):(r.tx.setSender(e),r.tx.build({client:this._suiClient}))}}(_7k_SevenKAggregator||(_7k_SevenKAggregator={})).toCommonTradeRoutes=function(e){let t=[];if(!e.routes||0===e.routes.length)return null;for(let n of e.routes){let e=[],a={};for(let t of n.hops){for(let e of t.pool.allTokens)a[e.address]=e.decimal;let n=a[t.tokenIn]??0,i=a[t.tokenOut]??0,o=BigInt(new(external_bignumber_js_default())(t.tokenInAmount).multipliedBy(10**n).toFixed(0,3)),r=BigInt(new(external_bignumber_js_default())(t.tokenOutAmount).multipliedBy(10**i).toFixed(0,3));e.push({poolAddress:t.poolId,coinIn:t.tokenIn,coinOut:t.tokenOut,amountIn:o,amountOut:r})}if(0===e.length)continue;let i=a[n.tokenIn]??0,o=a[n.tokenOut]??0,r=BigInt(new(external_bignumber_js_default())(n.tokenInAmount).multipliedBy(10**i).toFixed(0,3)),s=BigInt(new(external_bignumber_js_default())(n.tokenOutAmount).multipliedBy(10**o).toFixed(0,3));t.push({paths:e,coinIn:n.tokenIn,coinOut:n.tokenOut,amountIn:r,amountOut:s})}return 0===t.length?null:{coinIn:e.tokenIn,coinOut:e.tokenOut,amountIn:BigInt(e.swapAmountWithDecimal),amountOut:BigInt(e.returnAmountWithDecimal),routes:t}};const external_aftermath_ts_sdk_namespaceObject=require("aftermath-ts-sdk");class aftermath_AftermathAggregator{_config;_aftermathClient;_suiClient;constructor(e,t){this._config=e,this._suiClient=t}async aftermathClient(){if(this._aftermathClient)return this._aftermathClient;if(this._config.aftermathApiEndpoint?this._aftermathClient=new external_aftermath_ts_sdk_namespaceObject.Aftermath(this._config.aftermathApiEndpoint):this._aftermathClient=new external_aftermath_ts_sdk_namespaceObject.Aftermath("MAINNET"),await this._aftermathClient.init(),this._config.aftermathApiKey){let e=external_aftermath_ts_sdk_namespaceObject.Helpers.keypairFromPrivateKey(this._config.aftermathApiKey);await this._aftermathClient.Auth().init({async signMessageCallback({message:t}){let{signature:n}=await e.signPersonalMessage(t);return{signature:n}},walletAddress:e.toSuiAddress()})}return this._aftermathClient}async getTradeRoute({coinInAmount:e,coinInType:t,coinOutType:n,tradeFee:a}){try{let i;i=a?{recipient:a.tradeFeeRecipientAddress,feePercentage:a.tradeFeePercent}:{recipient:this._config.defaultTradeFee.tradeFeeRecipientAddress,feePercentage:this._config.defaultTradeFee.tradeFeePercent};let o=await this.aftermathClient();return await o.Router().getCompleteTradeRouteGivenAmountIn({coinInAmount:e,coinInType:t,coinOutType:n,externalFee:i})}catch(e){return null}}async getTransaction({completeRoute:e,walletAddress:t,slippage:n}){let a=await this.aftermathClient(),i=await a.Router().getTransactionForCompleteTradeRoute({completeRoute:e,walletAddress:t,slippage:n,isSponsoredTx:!1});return i.setSender(t),i.build({client:this._suiClient})}}(aftermath_AftermathAggregator||(aftermath_AftermathAggregator={})).toCommonTradeRoutes=function(e){if(0===e.routes.length)return null;let t=[];for(let n of e.routes){let e=[];for(let t of n.paths)e.push({poolAddress:t.poolId,coinIn:t.coinIn.type,coinOut:t.coinOut.type,amountIn:BigInt(t.coinIn.amount),amountOut:BigInt(t.coinOut.amount)});0!==e.length&&t.push({paths:e,coinIn:n.coinIn.type,coinOut:n.coinOut.type,amountIn:n.coinIn.amount,amountOut:n.coinOut.amount})}return 0===t.length?null:{coinIn:e.coinIn.type,coinOut:e.coinOut.type,amountIn:e.coinIn.amount,amountOut:e.coinOut.amount,routes:t}};const astros_aggregator_sdk_namespaceObject=require("@naviprotocol/astros-aggregator-sdk");function isSuiCoin(e){return"0x2::sui::SUI"===e||"0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI"===e}class astros_AstrosAggregator{_config;_suiClient;constructor(e,t){this._config=e,this._suiClient=t}async getTradeRoute({coinInAmount:e,coinInType:t,coinOutType:n,tradeFee:a}){try{let i;return i=a?{fee:a.tradeFeePercent,receiverAddress:a.tradeFeeRecipientAddress}:{fee:this._config.defaultTradeFee.tradeFeePercent,receiverAddress:this._config.defaultTradeFee.tradeFeeRecipientAddress},await (0,astros_aggregator_sdk_namespaceObject.getQuote)(t,n,e,this._config.astrosApiKey,{byAmountIn:!0,serviceFee:i})}catch(e){return null}}returnMergedCoins(e,t,n){if(t.length<2)return e.object(t[0].coinObjectId);let a=0,i=[];t.sort((e,t)=>Number(t.balance)-Number(e.balance)).slice(1).forEach(e=>{a>=n||(a+=Number(e.balance),i.push(e.coinObjectId))});let o=t[0].coinObjectId;return e.mergeCoins(o,i),e.object(o)}async getTransaction({completeRoute:e,walletAddress:t,slippage:n,tradeFee:a}){let i,o;i=a?{fee:a.tradeFeePercent,receiverAddress:a.tradeFeeRecipientAddress}:{fee:this._config.defaultTradeFee.tradeFeePercent,receiverAddress:this._config.defaultTradeFee.tradeFeeRecipientAddress};let r=new(external_bignumber_js_default())(e.amount_out).multipliedBy(1-n-i.fee).toNumber(),s=new transactions_namespaceObject.Transaction;if(isSuiCoin(e.from))o=s.splitCoins(s.gas,[s.pure.u64(e.amount_in)]);else{let n=await (0,astros_aggregator_sdk_namespaceObject.getCoins)(this._suiClient,t,e.from),a=this.returnMergedCoins(s,n.data,Number.parseFloat(e.amount_in));o=s.splitCoins(a,[s.pure.u64(e.amount_in)])}let u=await (0,astros_aggregator_sdk_namespaceObject.buildSwapPTBFromQuote)(t,s,r,o,e,void 0,!1,this._config.astrosApiKey,{serviceFee:i});return s.transferObjects([u],t),s.setSender(t),s.build({client:this._suiClient})}}(astros_AstrosAggregator||(astros_AstrosAggregator={})).toCommonTradeRoutes=function(e,t,n){if(0===e.routes.length)return null;let a=[];for(let t of e.routes){let e=[];for(let n of t.path)e.push({poolAddress:n.id,coinIn:n.from,coinOut:n.target,amountIn:BigInt(n.amount_in),amountOut:BigInt(n.amount_out)});0!==e.length&&a.push({amountIn:BigInt(t.amount_in),amountOut:BigInt(t.amount_out),coinIn:e[0].coinIn,coinOut:e[e.length-1].coinOut,paths:e})}return 0===a.length?null:{coinIn:t,coinOut:n,amountIn:BigInt(e.amount_in),amountOut:BigInt(e.amount_out),routes:a}};const aggregator_sdk_namespaceObject=require("@cetusprotocol/aggregator-sdk"),external_bn_js_namespaceObject=require("bn.js");var external_bn_js_default=__webpack_require__.n(external_bn_js_namespaceObject);(types_TradeFeeOptions||(types_TradeFeeOptions={})).equals=function(e,t){return e.tradeFeePercent===t.tradeFeePercent&&e.tradeFeeRecipientAddress===t.tradeFeeRecipientAddress};class cetus_CetusAggregator{_config;_suiClient;_cetusClient;constructor(e,t){this._config=e,this._suiClient=t}cetusClient(e,t){return t&&!types_TradeFeeOptions.equals(t,this._config.defaultTradeFee)?new aggregator_sdk_namespaceObject.AggregatorClient({client:this._suiClient,overlayFeeReceiver:t.tradeFeeRecipientAddress,overlayFeeRate:t.tradeFeePercent,env:aggregator_sdk_namespaceObject.Env.Mainnet,signer:e,...this._config.cetusApiKey&&this._config.cetusApiEndpoint?{apiKey:this._config.cetusApiKey,endpoint:this._config.cetusApiEndpoint}:{},partner:this._config.cetusPartnerId}):(this._cetusClient||(this._cetusClient=new aggregator_sdk_namespaceObject.AggregatorClient({client:this._suiClient,overlayFeeReceiver:this._config.defaultTradeFee.tradeFeeRecipientAddress,overlayFeeRate:this._config.defaultTradeFee.tradeFeePercent,env:aggregator_sdk_namespaceObject.Env.Mainnet,signer:e,...this._config.cetusApiKey&&this._config.cetusApiEndpoint?{apiKey:this._config.cetusApiKey,endpoint:this._config.cetusApiEndpoint}:{},partner:this._config.cetusPartnerId})),this._cetusClient)}async getTradeRoute({coinInAmount:e,coinInType:t,coinOutType:n,tradeFee:a}){try{let i=this.cetusClient(void 0,a);return await i.findRouters({from:t,target:n,amount:new(external_bn_js_default())(e.toString()),byAmountIn:!0})}catch(e){return null}}async getTransaction({completeRoute:e,walletAddress:t,slippage:n,tradeFee:a}){let i=new transactions_namespaceObject.Transaction,o=this.cetusClient(t,a);return await o.fastRouterSwap({router:e,txb:i,slippage:n}),await o.devInspectTransactionBlock(i),i.setSender(t),i.build({client:this._suiClient})}}(cetus_CetusAggregator||(cetus_CetusAggregator={})).toCommonTradeRoutes=function(e,t,n){if(0===e.paths.length)return null;let a=[],i=[],o=[];for(let t=0;t<e.paths.length;t++){let n=e.paths[t],a={poolAddress:n.id,amountIn:BigInt(n.amountIn),amountOut:BigInt(n.amountOut),coinIn:n.from,coinOut:n.target};if(o.push(a),t===e.paths.length-1)i.push([...o]);else{let a=e.paths[t+1];n.target!==a.from&&(i.push([...o]),o=[])}}for(let e of i)0!==e.length&&a.push({amountIn:e[0].amountIn,amountOut:e[e.length-1].amountOut,coinIn:e[0].coinIn,coinOut:e[e.length-1].coinOut,paths:e});return 0===a.length?null:{coinIn:t,coinOut:n,amountIn:BigInt(e.amountIn.toString(10)),amountOut:BigInt(e.amountOut.toString(10)),routes:a}};var common_SupportedAggregator=function(e){return e.ASTROS="ASTROS",e.AFTERMATH="AFTERMATH",e.SEVENK="7K",e.CETUS="CETUS",e.FLOWX="FLOWX",e}({});const sdk_namespaceObject=require("@flowx-finance/sdk");function getInputPercent(e){return 1e6*e}class flowx_FlowXAggregator{_config;_suiClient;constructor(e,t){this._config=e,this._suiClient=t}getCommission(e,t){let n,a;return t?(n=t.tradeFeePercent,a=t.tradeFeeRecipientAddress):(n=this._config.defaultTradeFee.tradeFeePercent,a=this._config.defaultTradeFee.tradeFeeRecipientAddress),new sdk_namespaceObject.Commission(a,new sdk_namespaceObject.Coin(e),sdk_namespaceObject.CommissionType.PERCENTAGE,getInputPercent(n),!0)}async getTradeRoute({coinInAmount:e,coinInType:t,coinOutType:n,tradeFee:a}){let i=new sdk_namespaceObject.AggregatorQuoter("mainnet",this._config.flowxApiKey);try{return await i.getRoutes({tokenIn:t,tokenOut:n,amountIn:e.toString(),commission:this.getCommission(t,a)})}catch(e){return null}}async getTransaction({walletAddress:e,completeRoute:t,slippage:n,tradeFee:a}){return new sdk_namespaceObject.TradeBuilder("mainnet",t.routes).sender(e).slippage(getInputPercent(n)).commission(this.getCommission(t.coinIn.coinType,a)).build().buildTransaction({client:this._suiClient}).then(t=>(t.setSender(e),t.build({client:this._suiClient})))}}(flowx_FlowXAggregator||(flowx_FlowXAggregator={})).toCommonTradeRoutes=function(e){if(0===e.routes.length)return null;let t=[];for(let n of e.routes){let e=[];for(let t of n.paths)e.push({amountIn:BigInt(t.amountIn.toString()),amountOut:BigInt(t.amountOut.toString()),coinIn:t.input.coinType,coinOut:t.output.coinType,poolAddress:t.pool.id});0!==e.length&&t.push({amountIn:BigInt(n.amountIn.toString()),amountOut:BigInt(n.amountOut.toString()),coinIn:n.input.coinType,coinOut:n.output.coinType,paths:e})}return 0===t.length?null:{coinIn:e.coinIn.coinType,coinOut:e.coinOut.coinType,amountIn:BigInt(e.amountIn.toString()),amountOut:BigInt(e.amountOut.toString()),routes:t}},function(e){e.PACKAGE_ID_V4="0x7e6aa6e179466ab2814425a780b122575296d011119fa69d27f289f5a28814bd",e.MEMEZ_AV_OBJECT_ID="0x2319e3e76dfad73d8f4684bdbf42be4f32d8ce4521dd61becc8261dc918d82c0"}(constants_BlastFunConstants||(constants_BlastFunConstants={}));const tiny_invariant_namespaceObject=require("@minswap/tiny-invariant");var tiny_invariant_default=__webpack_require__.n(tiny_invariant_namespaceObject);async function getMoveObjectContent(e,t){return(await getMoveObject(e,t)).fields}async function getMoveObject(e,t){let n=await e.getObject({id:t,options:{showContent:!0}}),a=n.data?.content;return tiny_invariant_default()(a,"Pool object not found or has no content"),tiny_invariant_default()("moveObject"===a.dataType,"Object is not a Move object"),a}const BASE_BPS=1e4;function getSplitCoinsAfterFee(e,t){let n=BigInt(e),a=BigInt(1e4*Number(t));if(a===BigInt(0))return[n.toString()];let i=n*a/BigInt(1e4);return[(n-i).toString(),i.toString()]}function getAmountAfterFee(e,t){if(!t||0>=Number(t))return BigInt(e);let n=BigInt(e),a=BigInt(1e4*Number(t));if(a===BigInt(0))return n;let i=n*a/BigInt(1e4);return n-i}async function getNeededGasFee(e,t,n,a){let{effects:{gasUsed:i,status:o}}=await e.devInspectTransactionBlock({sender:n,transactionBlock:t});if("success"!==o.status)throw Error(`Transaction failed during dev inspect: ${o.error??""}`);let r=BigInt(i.computationCost)+BigInt(i.storageCost)-BigInt(i.storageRebate),s=BigInt(1e4*Number(a));return r*(BigInt(1e4)+s)/BigInt(1e4)}!function(e){(e.U64||(e.U64={})).mulDivUp=function(e,t,n){let a=BigInt(0);return e*t%n>BigInt(0)&&(a=BigInt(1)),e*t/n+a}}(package_MathUtils||(package_MathUtils={})),function(e){function t(e){return tiny_invariant_default()(BigInt(e)<=BigInt(1e4),"Bps overflow"),BigInt(e)}e.calcUp=function(e,t){let n,a=BigInt(e.pos0),i=BigInt(1e4);return n=a*t%i!==BigInt(0)?BigInt(1):BigInt(0),a*t/i+n},e.sub=function(e,t){return tiny_invariant_default()(BigInt(e.pos0)>=BigInt(t.pos0),"Bps underflow"),{pos0:(BigInt(e.pos0)-BigInt(t.pos0)).toString()}},e.value=function(e){return BigInt(e.pos0)},e.new_=function(e){return{pos0:t(e).toString()}},e.assertOverflow=t}(package_Bps||(package_Bps={})),function(e){var t,n;(e.MemezFun||(e.MemezFun={})).isSniperProtectedMemezFun=async function(e,t){return(await getMoveObjectContent(e,t)).public_key.length>0},(t=e.MemezFees||(e.MemezFees={})).takeWithDiscount=function(e,t,n){if("Value"===e.variant){let n=BigInt(e.fields.pos0);if(n===BigInt(0))return BigInt(0);if(t>=n)return n;throw Error(`Insufficient amount to cover fee. Required: ${n}, provided: ${t}`)}if("Percentage"===e.variant){let a=e.fields.pos0.fields;if(BigInt(a.pos0)===BigInt(0))return BigInt(0);let i=package_Bps.calcUp(package_Bps.sub(a,n),t);if(t>=i)return i;throw Error(`Insufficient amount to cover fee. Required: ${i}, provided: ${t}`)}throw Error("Unknown fee variant")},t.calculateWithDiscount=function(e,t,n){if("Value"===e.variant)return BigInt(e.fields.pos0);if("Percentage"===e.variant){let a=e.fields.pos0.fields;return package_Bps.calcUp(package_Bps.sub(a,t),n)}throw Error("Unknown fee variant")},(e.MemezBurner||(e.MemezBurner={})).calculate=function(e,t){if(package_Bps.value(e.fee.fields)===BigInt(0)||t===BigInt(0)||t>=BigInt(e.target_liquidity))return package_Bps.new_(0);let n=BigInt(1e4);return package_Bps.new_(package_MathUtils.U64.mulDivUp(package_Bps.value(e.fee.fields),package_MathUtils.U64.mulDivUp(t,n,BigInt(e.target_liquidity)),n))},(n=e.MemezPump||(e.MemezPump={})).getPumpState=async function(e,t){return await getMoveObjectContent(e,t.inner_state)},n.pump=function(t,n){let a=t.constant_product.fields,i=e.MemezFees.takeWithDiscount(a.quote_swap_fee,n,a.quote_referrer_fee.fields),o=n-i,r=BigInt(a.meme_balance),s=BigInt(a.quote_balance),u=r*o/(BigInt(a.virtual_liquidity)+s+o),c=e.MemezFees.takeWithDiscount(a.meme_swap_fee,u,a.meme_referrer_fee.fields);return u-c},n.dump=function(t,n){let a=t.constant_product.fields,i=e.MemezFees.takeWithDiscount(a.meme_swap_fee,n,a.meme_referrer_fee.fields),o=n-i,r=BigInt(a.meme_balance),s=BigInt(a.quote_balance),u=BigInt(a.virtual_liquidity),c=e.MemezBurner.calculate(a.burner.fields,s),_=package_Bps.calcUp(c,o),l=o-(package_Bps.value(c)!==BigInt(0)?_:BigInt(0)),d=(u+s)*l/(r+l);d>s&&(d=s);let g=e.MemezFees.takeWithDiscount(a.quote_swap_fee,d,a.quote_referrer_fee.fields);return d-g}}(package_BlastFunPackage||(package_BlastFunPackage={})),function(e){e.getCurveAmountAfterBuy=async function(e,t){let{suiAmount:n,poolId:a,frontendFee:i}=e,o=await getMoveObjectContent(t,a),r=await package_BlastFunPackage.MemezPump.getPumpState(t,o);return n=getAmountAfterFee(n,i),package_BlastFunPackage.MemezPump.pump(r,n)},e.getSuiAmountAfterSell=async function(e,t){let{curveAmount:n,poolId:a,frontendFee:i}=e,o=await getMoveObjectContent(t,a),r=await package_BlastFunPackage.MemezPump.getPumpState(t,o);return getAmountAfterFee(package_BlastFunPackage.MemezPump.dump(r,n),i)}}(custom_calculation_BlastFunCustomCalculation||(custom_calculation_BlastFunCustomCalculation={}));const SUI_TYPE="0x2::sui::SUI",SUI_FULL_TYPE="0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI",USDC_TOKEN_TYPE="0x5d4b302506645c37ff133b98c4b50a5ae14841659738d6d733d59d0d217a93bf::coin::COIN",NATIVE_USDC_TOKEN_TYPE="0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC",SUI_METADATA_OBJECT_ID="0x9258181f5ceac8dbffb7030890243caed69a9599d2886d957a9cb7656af3bdb3",CLOCK_OBJECT_ID="0x0000000000000000000000000000000000000000000000000000000000000006",utils_namespaceObject=require("@mysten/sui/utils"),orderByKey=(e,t,n)=>{let a;if(e?.length){do{a=!1;for(let i=0;i<e.length-1;i++){let o=BigInt(e[i][t]),r=BigInt(e[i+1][t]);if("desc"===n?o<r:o>r){let t=e[i];e[i]=e[i+1],e[i+1]=t,a=!0}}}while(a);return e}},getCoinObjectIdsByAmount=async(e,t,n,a)=>{let i,o=[],r=!0;for(;r;)try{let n=await e.getCoins({owner:t,coinType:a,cursor:i});o=[...o,...n.data],r=n.hasNextPage,i=n.nextCursor}catch(e){console.error("Error fetching data:",e),r=!1}let s=orderByKey(o.map(e=>({...e,balance:e.balance})),"balance","desc")??[],u="0",c=[],_=[];for(let e of s)if(u=(BigInt(e.balance)+BigInt(u)).toString(10),c.push(e.coinObjectId),_.push(e),BigInt(u)>=BigInt(n))break;return{objectIds:c,balance:u,objectCoins:_}};async function getSplitCoinForTx(e,t){let{account:n,amount:a,splits:i,coinType:o,inheritTx:r,inspecTransaction:s,isSponsored:u=!1}=e,c=r??new transactions_namespaceObject.Transaction,{objectIds:_}=await getCoinObjectIdsByAmount(t,n,a,o),l=_[0];if((0,utils_namespaceObject.normalizeStructTag)(o)===(0,utils_namespaceObject.normalizeStructTag)(SUI_FULL_TYPE)&&!u){let e;return s?(_.length>1&&c.mergeCoins(c.object(l),_.slice(1).map(e=>c.object(e))),e=c.splitCoins(c.object(l),i)):e=c.splitCoins(c.gas,i),{tx:c,coinData:e}}_.length>1&&c.mergeCoins(c.object(l),_.slice(1).map(e=>c.object(e)));let d=c.splitCoins(c.object(l),i);return{tx:c,coinData:d}}const BLUEFIN_PACKAGE_ID="0x62412b7268c35f3808336aee57a52836501f40b8ba5d936f8ad275e672befd04";async function splitSuiCoinAfterFeeFromBuyTx(e,t){let n,a,{inputAmount:i,accountAddress:o,frontendFee:r,frontendFeeRecipient:s,extendTx:u,isSponsored:c}=e;tiny_invariant_default()(e.inCoinType===SUI_FULL_TYPE||e.inCoinType===SUI_TYPE,"Input must be SUI");let{tx:_,coinIn:l}=u||{},d=getSplitCoinsAfterFee(i,r||"0"),g=_||new transactions_namespaceObject.Transaction;if(l)n=g.splitCoins(l,d),bluefin_BluefinTx.transferOrDestroyZeroCoin(g,SUI_FULL_TYPE,l,o);else{let{coinData:e}=await getSplitCoinForTx({account:o,amount:i,splits:d,coinType:SUI_FULL_TYPE,inheritTx:g,isSponsored:c||!1},t);n=e}if(r&&s){let[e,t]=n;a=e,g.transferObjects([t],g.pure.address(s||o))}else[a]=n;return{tx:g,coinOut:a}}async function splitSuiCoinAfterFeeFromSellTx(e,t,n){if(tiny_invariant_default()(t.outCoinType===SUI_FULL_TYPE||t.outCoinType===SUI_TYPE,"Output must be SUI"),0>=Number(t.frontendFee||0))return{tx:e,coinOut:n};let a=e.moveCall({target:"0x2::coin::value",typeArguments:[t.outCoinType],arguments:[n]}),i=e.moveCall({target:`${BLUEFIN_PACKAGE_ID}::math::mul_div_u64`,typeArguments:[],arguments:[a,e.pure.u64(BigInt(1e4*Number(t.frontendFee||"0"))),e.pure.u64(BigInt(1e4))]}),o=e.moveCall({target:"0x2::coin::split",typeArguments:[t.outCoinType],arguments:[n,i]});return e.transferObjects([o],e.pure.address(t.frontendFeeRecipient||t.accountAddress)),{tx:e,coinOut:n}}(bluefin_BluefinTx||(bluefin_BluefinTx={})).transferOrDestroyZeroCoin=function(e,t,n,a){e.moveCall({target:`${BLUEFIN_PACKAGE_ID}::utils::transfer_or_destroy`,typeArguments:[t],arguments:[n,e.pure.address(a)]})},function(e){async function t(e){let t=e||new transactions_namespaceObject.Transaction;return t.moveCall({target:`${constants_BlastFunConstants.PACKAGE_ID_V4}::memez_allowed_versions::get_allowed_versions`,arguments:[t.object(constants_BlastFunConstants.MEMEZ_AV_OBJECT_ID)],typeArguments:[]})}e.getAllowedVersions=t,e.buildBuyTx=async function(e,n){tiny_invariant_default()(!await package_BlastFunPackage.MemezFun.isSniperProtectedMemezFun(n,e.poolId),"This coin is a sniper protected coin, please use the Blast Fun website to trade it.");let{tx:a,coinOut:i}=await splitSuiCoinAfterFeeFromBuyTx(e,n);tiny_invariant_default()(i,"Coin out is required");let o=a.moveCall({target:`${constants_BlastFunConstants.PACKAGE_ID_V4}::memez_pump::pump`,typeArguments:[e.outCoinType,SUI_FULL_TYPE],arguments:[a.object(e.poolId),i,a.pure.vector("address",[]),a.pure.vector("vector<u8>",[]),a.pure.u64(e.minAmountOut),await t(a)]});return{tx:a,coinOut:o}},e.buildSellTx=async function(e,n){tiny_invariant_default()(e.outCoinType===SUI_FULL_TYPE||e.outCoinType===SUI_TYPE,"Output must be SUI");let a=await getMoveObjectContent(n,e.poolId),{tx:i,coinData:o}=await getSplitCoinForTx({amount:e.inputAmount,coinType:e.inCoinType,inheritTx:e.extendTx?.tx,account:e.accountAddress,splits:[e.inputAmount]},n),[r]=o,[s]=i.moveCall({target:`${constants_BlastFunConstants.PACKAGE_ID_V4}::memez_pump::dump`,typeArguments:[e.inCoinType,e.outCoinType],arguments:[i.object(e.poolId),i.object(a.ipx_meme_coin_treasury),r,i.pure.vector("address",[]),i.pure.u64(e.minAmountOut),await t(i)]});return await splitSuiCoinAfterFeeFromSellTx(i,e,s)}}(custom_transaction_BlastFunCustomTransaction||(custom_transaction_BlastFunCustomTransaction={}));const memez_fun_sdk_namespaceObject=require("@interest-protocol/memez-fun-sdk"),sui_core_sdk_namespaceObject=require("@interest-protocol/sui-core-sdk"),client_namespaceObject=require("@mysten/sui/client"),payload={network:sui_core_sdk_namespaceObject.Network.MAINNET,fullNodeUrl:(0,client_namespaceObject.getFullnodeUrl)("mainnet")},memezPump=new memez_fun_sdk_namespaceObject.MemezPumpSDK(payload);function getMemezPumpSDK(){return memezPump}async function addGasFee(e,t){let{inheritTx:n,sender:a,feeAmount:i,suiInputAmount:o}=e,r=n||new transactions_namespaceObject.Transaction;r.setGasBudget(i);let{objectCoins:s}=await getCoinObjectIdsByAmount(t,a,(BigInt(o||"0")+i).toString(),SUI_FULL_TYPE);return r.setGasPayment(s.map(e=>({objectId:e.coinObjectId,version:e.version,digest:e.digest}))),r}!function(e){e.getCurveAmountAfterBuy=async function(e){let{suiAmount:t,poolId:n,frontendFee:a}=e;t=getAmountAfterFee(t,a);let{memeAmountOut:i}=await getMemezPumpSDK().quotePump({pool:n,amount:t});return i},e.getSuiAmountAfterSell=async function(e){let{curveAmount:t,poolId:n,frontendFee:a}=e,{quoteAmountOut:i}=await getMemezPumpSDK().quoteDump({pool:n,amount:t});return getAmountAfterFee(i,a)}}(sdk_calculation_BlastFunSDKCalculation||(sdk_calculation_BlastFunSDKCalculation={})),function(e){async function t(e,t){let{tx:n,coinOut:a}=await splitSuiCoinAfterFeeFromBuyTx(e,t);tiny_invariant_default()(a,"Coin out is required");let{memeCoin:i,tx:o}=await getMemezPumpSDK().pump({pool:e.poolId,quoteCoin:a,minAmountOut:e.minAmountOut,tx:n});return{tx:o,coinOut:i}}async function n(e,t){tiny_invariant_default()(e.outCoinType===SUI_FULL_TYPE||e.outCoinType===SUI_TYPE,"Output must be SUI");let{tx:n,coinData:a}=await getSplitCoinForTx({amount:e.inputAmount,coinType:e.inCoinType,inheritTx:e.extendTx?.tx,account:e.accountAddress,splits:[e.inputAmount]},t),[i]=a,{quoteCoin:o,tx:r}=await getMemezPumpSDK().dump({pool:e.poolId,memeCoin:i,tx:n,minAmountOut:e.minAmountOut});return await splitSuiCoinAfterFeeFromSellTx(r,e,o)}e.buildBuyTx=t,e.buildSellTx=n,e.getBuyTransaction=async function({coinInAmount:e,coinInType:n,coinOutType:a,poolId:i,slippage:o,walletAddress:r,tradeFee:s},u){tiny_invariant_default()(n===SUI_TYPE,"coinInType must be SUI for buy transaction"),tiny_invariant_default()(a!==n,"coinOutType must be different from coinInType"),tiny_invariant_default()(o>=0&&o<1,"slippage must be between 0 (inclusive) and 1 (exclusive)"),tiny_invariant_default()(e>0,"coinInAmount must be greater than 0");let c=await sdk_calculation_BlastFunSDKCalculation.getCurveAmountAfterBuy({poolId:i,suiAmount:e,frontendFee:s?s.tradeFeePercent:void 0}),_=BigInt(new(external_bignumber_js_default())(c.toString()).multipliedBy(1-o).toFixed(0,3)),{tx:l,coinOut:d}=await t({accountAddress:r,inCoinType:n,outCoinType:a,inputAmount:e.toString(),minAmountOut:_.toString(),poolId:i,frontendFee:s?s.tradeFeePercent:void 0,frontendFeeRecipient:s?s.tradeFeeRecipientAddress:void 0,extendTx:void 0,isSponsored:!1},u);tiny_invariant_default()(d,"Coin out is required"),l.transferObjects([d],l.pure.address(r)),l.setSender(r);let g=await getNeededGasFee(u,l,r,0);return(l=await addGasFee({inheritTx:l,sender:r,feeAmount:g,suiInputAmount:e},u)).build({client:u})},e.getSellTransaction=async function({coinInAmount:e,coinInType:t,coinOutType:a,poolId:i,slippage:o,walletAddress:r,tradeFee:s},u){tiny_invariant_default()(a===SUI_TYPE,"coinOutType must be SUI for sell transaction"),tiny_invariant_default()(a!==t,"coinOutType must be different from coinInType"),tiny_invariant_default()(o>=0&&o<1,"slippage must be between 0 (inclusive) and 1 (exclusive)"),tiny_invariant_default()(e>0,"coinInAmount must be greater than 0");let c=await sdk_calculation_BlastFunSDKCalculation.getSuiAmountAfterSell({poolId:i,curveAmount:e,frontendFee:s?s.tradeFeePercent:void 0}),_=BigInt(new(external_bignumber_js_default())(c.toString()).multipliedBy(1-o).toFixed(0,3)),{tx:l,coinOut:d}=await n({accountAddress:r,inCoinType:t,outCoinType:a,inputAmount:e.toString(),minAmountOut:_.toString(),poolId:i,frontendFee:s?s.tradeFeePercent:void 0,frontendFeeRecipient:s?s.tradeFeeRecipientAddress:void 0,extendTx:void 0,isSponsored:!1},u);tiny_invariant_default()(d,"Coin out is required"),l.transferObjects([d],l.pure.address(r)),l.setSender(r);let g=await getNeededGasFee(u,l,r,0);return(l=await addGasFee({inheritTx:l,sender:r,feeAmount:g},u)).build({client:u})}}(sdk_transaction_BlastFunSDKTransaction||(sdk_transaction_BlastFunSDKTransaction={}));var types_SupportedBondingCurve=function(e){return e.BLAST_FUN="BLAST_FUN",e.MOONBAGS="MOONBAGS",e}({});function adaptSuiClient(e){return e}function adaptTransaction(e){return e}function createCompatibleSuiClient(e){return new Proxy(e,{get(e,t){let n=e[t];return"function"==typeof n?n.bind(e):n}})}!function(e){e.PACKAGE_ID="0xb8df325010942634a4afb3db3901ee215546af43a4ec4af781e7213b0bba7290",e.CONFIG_OBJECT_ID="0x74aecf86067c6913960ba4925333aefd2b1f929cafca7e21fd55a8f244b70499",e.LOCK_CONFIG_OBJECT_ID="0xfb09822d9808980abd04c51321adb850701f5f55535c6206658ef4d910c3e9be",e.BURN_MANAGER_OBJECT_ID="0x1d94aa32518d0cb00f9de6ed60d450c9a2090761f326752ffad06b2e9404f845",e.POOLS_OBJECT_ID="0xf699e7f2276f5c9a75944b37a0c5b5d9ddfd2471bf6242483b03ab2887d198d0",e.GLOBAL_CONFIG_OBJECT_ID="0xdaa46292632c3c4d8f31f23ea0f9b36a28ff3677e9684980e4438403a67a3d8f",e.FEE_DENOMINATOR=BigInt(1e4)}(constants_MoonbagsConstants||(constants_MoonbagsConstants={})),function(e){var t,n;(t=e.Curves||(e.Curves={})).calculateAddLiquidityCost=function(e,t,n){return e*t/(t-n)-e},t.calculateRemoveLiquidityReturn=function(e,t,n){return t-e*t/(e+n)},t.calculateTokenAmountReceived=function(e,t,n){return t-e*t/(e+n)},(n=e.Moonbags||(e.Moonbags={})).getDynamicVirtualTokenReserves=async function(e,t){let n=await e.getDynamicFieldObject({parentId:t,name:{type:"vector<u8>",value:"virtual_token_reserves"}});if(n.data)return BigInt(n.data.content.fields.value)},n.buyExactInReturnsWithLock=function(t){let{inputAmount:n,amountIn:a,pool:i,config:o,dynamicVirtualTokenReserves:r}=t,s=BigInt(i.virtual_sui_reserves),u=BigInt(i.virtual_token_reserves),c=BigInt(i.remain_token_reserves.fields.balance),_=e.Curves.calculateRemoveLiquidityReturn(s,u,a),l=u-(r||c),d=_,g=a;_>l&&(d=l,g=e.Curves.calculateAddLiquidityCost(s,u,l)+BigInt(1));let p=g*BigInt(o.platform_fee)/constants_MoonbagsConstants.FEE_DENOMINATOR;return tiny_invariant_default()(n>=g+p,"Input amount is less than used SUI + fee"),{receivedCurve:d,receivedSui:n-g-p}},n.sellReturns=function(t){let{amountIn:n,pool:a,config:i}=t,o=BigInt(a.virtual_sui_reserves),r=BigInt(a.virtual_token_reserves),s=BigInt(a.real_sui_reserves.fields.balance),u=e.Curves.calculateRemoveLiquidityReturn(r,o,n);u>s&&(u=s);let c=u*BigInt(i.platform_fee)/constants_MoonbagsConstants.FEE_DENOMINATOR,_=u-c;return{receivedCurve:BigInt(0),receivedSui:_}}}(package_MoonbagsPackage||(package_MoonbagsPackage={})),function(e){e.getCurveAmountAfterBuy=async function(e,t){let{suiAmount:n,poolId:a,frontendFee:i}=e,[o,r,s]=await Promise.all([getMoveObjectContent(t,a),getMoveObjectContent(t,constants_MoonbagsConstants.CONFIG_OBJECT_ID),package_MoonbagsPackage.Moonbags.getDynamicVirtualTokenReserves(t,a)]);void 0!==i&&(n=getAmountAfterFee(n,i));let u=n*constants_MoonbagsConstants.FEE_DENOMINATOR/(constants_MoonbagsConstants.FEE_DENOMINATOR+BigInt(r.platform_fee)),{receivedCurve:c}=package_MoonbagsPackage.Moonbags.buyExactInReturnsWithLock({inputAmount:n,amountIn:u,pool:o,config:r,dynamicVirtualTokenReserves:s});return c},e.getSuiAmountAfterSell=async function(e,t){let{curveAmount:n,poolId:a,frontendFee:i}=e,[o,r]=await Promise.all([getMoveObjectContent(t,a),getMoveObjectContent(t,constants_MoonbagsConstants.CONFIG_OBJECT_ID)]),{receivedSui:s}=package_MoonbagsPackage.Moonbags.sellReturns({amountIn:n,pool:o,config:r});return void 0!==i?getAmountAfterFee(s,i):s},e.getUsedSuiForTx=async function(e,t){let{suiAmount:n,frontendFee:a}=e,i=await getMoveObjectContent(t,constants_MoonbagsConstants.CONFIG_OBJECT_ID);return void 0!==a&&(n=getAmountAfterFee(n,a)),n*constants_MoonbagsConstants.FEE_DENOMINATOR/(constants_MoonbagsConstants.FEE_DENOMINATOR+BigInt(i.platform_fee))}}(calculation_MoonbagsCalculation||(calculation_MoonbagsCalculation={})),function(e){async function t(e,t){let{tx:n,coinOut:a}=await splitSuiCoinAfterFeeFromBuyTx(e,t);tiny_invariant_default()(a,"Coin out is required");let i=await calculation_MoonbagsCalculation.getUsedSuiForTx({suiAmount:BigInt(e.inputAmount),frontendFee:e.frontendFee},t),[o,r]=n.moveCall({target:`${constants_MoonbagsConstants.PACKAGE_ID}::moonbags::buy_exact_in_returns_with_lock`,typeArguments:[e.outCoinType],arguments:[n.object(constants_MoonbagsConstants.CONFIG_OBJECT_ID),n.object(constants_MoonbagsConstants.LOCK_CONFIG_OBJECT_ID),a,n.pure.u64(i),n.pure.u64(e.minAmountOut),n.object(constants_MoonbagsConstants.BURN_MANAGER_OBJECT_ID),n.object(constants_MoonbagsConstants.POOLS_OBJECT_ID),n.object(constants_MoonbagsConstants.GLOBAL_CONFIG_OBJECT_ID),n.object(SUI_METADATA_OBJECT_ID),n.object(CLOCK_OBJECT_ID)]});return bluefin_BluefinTx.transferOrDestroyZeroCoin(n,SUI_FULL_TYPE,o,e.accountAddress),{tx:n,coinOut:r}}async function n(e,t){tiny_invariant_default()(e.outCoinType===SUI_FULL_TYPE||e.outCoinType===SUI_TYPE,"Output must be SUI");let{tx:n,coinData:a}=await getSplitCoinForTx({amount:e.inputAmount,coinType:e.inCoinType,inheritTx:e.extendTx?.tx,account:e.accountAddress,splits:[e.inputAmount]},t),[i]=a,[o,r]=n.moveCall({target:`${constants_MoonbagsConstants.PACKAGE_ID}::moonbags::sell_returns`,typeArguments:[e.inCoinType],arguments:[n.object(constants_MoonbagsConstants.CONFIG_OBJECT_ID),i,n.pure.u64(e.minAmountOut),n.object(CLOCK_OBJECT_ID)]});return bluefin_BluefinTx.transferOrDestroyZeroCoin(n,e.inCoinType,r,e.accountAddress),await splitSuiCoinAfterFeeFromSellTx(n,e,o)}e.buildBuyTx=t,e.buildSellTx=n,e.getBuyTransaction=async function({coinInAmount:e,coinInType:n,coinOutType:a,poolId:i,slippage:o,walletAddress:r,tradeFee:s},u){tiny_invariant_default()(n===SUI_TYPE,"coinInType must be SUI for buy transaction"),tiny_invariant_default()(a!==n,"coinOutType must be different from coinInType"),tiny_invariant_default()(o>=0&&o<1,"slippage must be between 0 (inclusive) and 1 (exclusive)"),tiny_invariant_default()(e>0,"coinInAmount must be greater than 0");let c=await calculation_MoonbagsCalculation.getCurveAmountAfterBuy({poolId:i,suiAmount:e,frontendFee:s?s.tradeFeePercent:void 0},u),_=BigInt(new(external_bignumber_js_default())(c.toString()).multipliedBy(1-o).toFixed(0,3)),{tx:l,coinOut:d}=await t({accountAddress:r,inCoinType:n,outCoinType:a,inputAmount:e.toString(),minAmountOut:_.toString(),poolId:i,frontendFee:s?s.tradeFeePercent:void 0,frontendFeeRecipient:s?s.tradeFeeRecipientAddress:void 0,extendTx:void 0,isSponsored:!1},u);tiny_invariant_default()(d,"Coin out is required"),l.transferObjects([d],l.pure.address(r)),l.setSender(r);let g=await getNeededGasFee(u,l,r,0);return(l=await addGasFee({inheritTx:l,sender:r,feeAmount:g,suiInputAmount:e},u)).build({client:u})},e.getSellTransaction=async function({coinInAmount:e,coinInType:t,coinOutType:a,poolId:i,slippage:o,walletAddress:r,tradeFee:s},u){tiny_invariant_default()(a===SUI_TYPE,"coinOutType must be SUI for sell transaction"),tiny_invariant_default()(a!==t,"coinOutType must be different from coinInType"),tiny_invariant_default()(o>=0&&o<1,"slippage must be between 0 (inclusive) and 1 (exclusive)"),tiny_invariant_default()(e>0,"coinInAmount must be greater than 0");let c=await calculation_MoonbagsCalculation.getSuiAmountAfterSell({poolId:i,curveAmount:e,frontendFee:s?s.tradeFeePercent:void 0},u),_=BigInt(new(external_bignumber_js_default())(c.toString()).multipliedBy(1-o).toFixed(0,3)),{tx:l,coinOut:d}=await n({accountAddress:r,inCoinType:t,outCoinType:a,inputAmount:e.toString(),minAmountOut:_.toString(),poolId:i,frontendFee:s?s.tradeFeePercent:void 0,frontendFeeRecipient:s?s.tradeFeeRecipientAddress:void 0,extendTx:void 0,isSponsored:!1},u);tiny_invariant_default()(d,"Coin out is required"),l.transferObjects([d],l.pure.address(r)),l.setSender(r);let g=await getNeededGasFee(u,l,r,0);return(l=await addGasFee({inheritTx:l,sender:r,feeAmount:g},u)).build({client:u})}}(transaction_MoonbagsTransaction||(transaction_MoonbagsTransaction={}));class AggregatorModule{sdk;_astrosAggregator;_aftermathAggregator;_sevenkAggregator;_cetusAggregator;_flowXAggregator;constructor(e){this.sdk=e,this._astrosAggregator=new astros_AstrosAggregator({defaultTradeFee:e.options.tradeFee,astrosApiKey:e.options.astrosApiKey},e.suiClient),this._aftermathAggregator=new aftermath_AftermathAggregator({defaultTradeFee:e.options.tradeFee,aftermathApiKey:e.options.aftermathApiKey,aftermathApiEndpoint:e.options.aftermathApiEndpoint},e.suiClient),this._sevenkAggregator=new _7k_SevenKAggregator({defaultTradeFee:e.options.tradeFee,sevenKApiKey:e.options.sevenKApiKey},e.suiClient),this._cetusAggregator=new cetus_CetusAggregator({defaultTradeFee:e.options.tradeFee,cetusApiKey:e.options.cetusApiKey,cetusApiEndpoint:e.options.cetusApiEndpoint,cetusPartnerId:e.options.cetusPartnerId},e.suiClient),this._flowXAggregator=new flowx_FlowXAggregator({defaultTradeFee:e.options.tradeFee,flowxApiKey:e.options.flowxApiKey},e.suiClient)}get astrosAggregator(){return this._astrosAggregator}get aftermathAggregator(){return this._aftermathAggregator}get sevenkAggregator(){return this._sevenkAggregator}get cetusAggregator(){return this._cetusAggregator}get flowXAggregator(){return this._flowXAggregator}async getTradeRoute(e,t){let n;switch(e){case common_SupportedAggregator.ASTROS:{let e,a=await this._astrosAggregator.getTradeRoute(t);if(!a)return null;let i=astros_AstrosAggregator.toCommonTradeRoutes(a,t.coinInType,t.coinOutType);if(!i)return null;e=t.tradeFee?t.tradeFee.tradeFeePercent:this.sdk.options.tradeFee.tradeFeePercent,i.amountOut=BigInt(new(external_bignumber_js_default())(a.amount_out).multipliedBy(1-e).toFixed(0,3)),n={route:i,aggregatorRoute:a};break}case common_SupportedAggregator.AFTERMATH:{let e=await this._aftermathAggregator.getTradeRoute(t);if(!e)return null;let a=aftermath_AftermathAggregator.toCommonTradeRoutes(e);if(!a)return null;n={route:a,aggregatorRoute:e};break}case common_SupportedAggregator.SEVENK:{let e=await this._sevenkAggregator.getTradeRoute(t);if(!e)return null;let a=_7k_SevenKAggregator.toCommonTradeRoutes(e);if(!a)return null;n={route:a,aggregatorRoute:e};break}case common_SupportedAggregator.CETUS:{let e=await this._cetusAggregator.getTradeRoute(t);if(!e)return null;let a=cetus_CetusAggregator.toCommonTradeRoutes(e,t.coinInType,t.coinOutType);if(!a)return null;n={route:a,aggregatorRoute:e};break}case common_SupportedAggregator.FLOWX:{let e=await this._flowXAggregator.getTradeRoute(t);if(!e)return null;let a=flowx_FlowXAggregator.toCommonTradeRoutes(e);if(!a)return null;n={route:a,aggregatorRoute:e}}}return n}async getTransactionByRoute(e,t){switch(e){case common_SupportedAggregator.ASTROS:return this._astrosAggregator.getTransaction({walletAddress:t.walletAddress,completeRoute:t.completeRoute,slippage:t.slippage,tradeFee:t.tradeFee});case common_SupportedAggregator.AFTERMATH:return this._aftermathAggregator.getTransaction({walletAddress:t.walletAddress,completeRoute:t.completeRoute,slippage:t.slippage});case common_SupportedAggregator.SEVENK:return this._sevenkAggregator.getTransaction({walletAddress:t.walletAddress,completeRoute:t.completeRoute,slippage:t.slippage,tradeFee:t.tradeFee});case common_SupportedAggregator.CETUS:return this._cetusAggregator.getTransaction({walletAddress:t.walletAddress,completeRoute:t.completeRoute,slippage:t.slippage,tradeFee:t.tradeFee});case common_SupportedAggregator.FLOWX:return this._flowXAggregator.getTransaction({walletAddress:t.walletAddress,completeRoute:t.completeRoute,slippage:t.slippage,tradeFee:t.tradeFee})}}async getTradeTransaction(e,t){let n=await this.getTradeRoute(e,{coinInAmount:t.coinInAmount,coinInType:t.coinInType,coinOutType:t.coinOutType,tradeFee:t.tradeFee});if(!n)return null;let a=await this.getTransactionByRoute(e,{walletAddress:t.walletAddress,completeRoute:n.aggregatorRoute,slippage:t.slippage,tradeFee:t.tradeFee});return{route:n.route,aggregatorRoute:n.aggregatorRoute,transaction:a}}async getTradeTransactionWithBestRate(e){let t=Object.keys(common_SupportedAggregator),n=await Promise.all(t.map(async t=>{try{return await this.getTradeRoute(t,e)}catch{return null}})),a=null,i=null;for(let e=0;e<n.length;e++){let o=n[e],r=t[e];if(o&&(!a||o.route.amountOut>a.route.amountOut)){a=o,i=r;continue}}if(!a||!i)return null;let o=await this.getTransactionByRoute(i,{walletAddress:e.walletAddress,completeRoute:a.aggregatorRoute,slippage:e.slippage,tradeFee:e.tradeFee});return{route:a.route,aggregatorRoute:a.aggregatorRoute,transaction:o}}async getAmountOut(e,t){let n=await this.getTradeRoute(e,t);return n?n.route.amountOut:null}async getBestAmountOut(e){let t=Object.keys(common_SupportedAggregator),n=null,a=null;for(let i of t){let t=await this.getAmountOut(i,e);null!==t&&(null===n||t>n)&&(n=t,a=i)}return null===n||null===a?null:{amountOut:n,aggregator:a}}}const BOOSTING_PACKAGE_ID="0x25fa0eb553dd69fa6a8028f73a38f1df7f289fa88a58ed3d7dc5a5360155bb19",CONFIG_ID="0x8b1a8ac6e34688cd8f8f8e5fefa9d5fb9e1ff74d2f132f8e208ae5ac9cc530bb",ADMIN_CAP_ID="0x13d101f44a0710a5475bec5f492a87b80e03d92d1cf540f26096f65850b23d26";class BoostingModule{sdk;constructor(e){this.sdk=e}async getConfig(){let e=await this.sdk.suiClient.getObject({id:CONFIG_ID,options:{showContent:!0}});tiny_invariant_default()(e.data?.content,"Config object not found or has no content"),tiny_invariant_default()(e.data?.content.dataType==="moveObject","Config object is not a Move object");let t=e.data.content.fields,n=t.id.id,a=t.fee_receiver,i=t.tiers.fields.contents,o={};for(let e of i){let t=e.fields.key,n=e.fields.value.fields.duration,a=e.fields.value.fields.amount,i=e.fields.value.fields.point,r=e.fields.value.fields.original_amount;o[t]={duration:BigInt(n),amount:BigInt(a),point:BigInt(i),originalAmount:BigInt(r)}}return{id:n,receiverAddress:a,tiers:o}}async buildPayBoostingTx({walletAddress:e,tierId:t,boostingCoinType:n,currentTx:a}){let i=await this.getConfig();tiny_invariant_default()(t in i.tiers,"Invalid tier ID");let o=i.tiers[t].amount,r=a||new transactions_namespaceObject.Transaction,s=r.splitCoins(r.gas,[r.pure.u64(o)]);r.moveCall({target:`${BOOSTING_PACKAGE_ID}::boosting::pay`,typeArguments:[(0,utils_namespaceObject.normalizeStructTag)(n)],arguments:[r.object(CONFIG_ID),r.pure.u64(t),s]}),r.setSender(e);let u=await getNeededGasFee(this.sdk.suiClient,r,e,0);return addGasFee({inheritTx:r,sender:e,feeAmount:u},this.sdk.suiClient)}async buildAddTierTx({adminAddress:e,tierId:t,duration:n,point:a,originalAmount:i,amount:o,currentTx:r}){let s=r||new transactions_namespaceObject.Transaction;s.moveCall({target:`${BOOSTING_PACKAGE_ID}::config::add_tier`,typeArguments:[],arguments:[s.object(CONFIG_ID),s.object(ADMIN_CAP_ID),s.pure.u64(t),s.pure.u64(a),s.pure.u64(n),s.pure.u64(i),s.pure.u64(o)]}),s.setSender(e);let u=await getNeededGasFee(this.sdk.suiClient,s,e,0);return addGasFee({inheritTx:s,sender:e,feeAmount:u},this.sdk.suiClient)}async buildUpdateTierTx({adminAddress:e,tierId:t,duration:n,amount:a,originalAmount:i,point:o,currentTx:r}){let s=r||new transactions_namespaceObject.Transaction;s.moveCall({target:`${BOOSTING_PACKAGE_ID}::config::update_tier`,typeArguments:[],arguments:[s.object(CONFIG_ID),s.object(ADMIN_CAP_ID),s.pure.u64(t),s.pure.u64(n),s.pure.u64(a),s.pure.u64(o),s.pure.u64(i)]}),s.setSender(e);let u=await getNeededGasFee(this.sdk.suiClient,s,e,0);return addGasFee({inheritTx:s,sender:e,feeAmount:u},this.sdk.suiClient)}async buildRemoveTierTx({adminAddress:e,tierId:t,currentTx:n}){let a=n||new transactions_namespaceObject.Transaction;a.moveCall({target:`${BOOSTING_PACKAGE_ID}::config::remove_tier`,typeArguments:[],arguments:[a.object(CONFIG_ID),a.object(ADMIN_CAP_ID),a.pure.u64(t)]}),a.setSender(e);let i=await getNeededGasFee(this.sdk.suiClient,a,e,0);return addGasFee({inheritTx:a,sender:e,feeAmount:i},this.sdk.suiClient)}async buildUpdateFeeReceiver({adminAddress:e,newReceiverAddress:t,currentTx:n}){let a=n||new transactions_namespaceObject.Transaction;a.moveCall({target:`${BOOSTING_PACKAGE_ID}::config::update_fee_receiver`,typeArguments:[],arguments:[a.object(CONFIG_ID),a.object(ADMIN_CAP_ID),a.pure.address(t)]}),a.setSender(e);let i=await getNeededGasFee(this.sdk.suiClient,a,e,0);return addGasFee({inheritTx:a,sender:e,feeAmount:i},this.sdk.suiClient)}async buildPayBoostingWithAdminTx({walletAddress:e,tierId:t,customAmount:n,boostingCoinType:a,currentTx:i}){let o=i||new transactions_namespaceObject.Transaction,r=o.splitCoins(o.gas,[o.pure.u64(n)]);o.moveCall({target:`${BOOSTING_PACKAGE_ID}::boosting::pay_with_admin`,typeArguments:[(0,utils_namespaceObject.normalizeStructTag)(a)],arguments:[o.object(ADMIN_CAP_ID),o.object(CONFIG_ID),o.pure.u64(t),o.pure.u64(n),r]}),o.setSender(e);let s=await getNeededGasFee(this.sdk.suiClient,o,e,0);return addGasFee({inheritTx:o,sender:e,feeAmount:s},this.sdk.suiClient)}}class CurveModule{sdk;constructor(e){this.sdk=e}async getTradeTransaction(e,t){let n,{coinInType:a,coinOutType:i}=t;tiny_invariant_default()(a!==i,"coinInType and coinOutType must be different"),tiny_invariant_default()(a===SUI_TYPE||i===SUI_TYPE,"One of coinInType or coinOutType must be SUI");let o=a===SUI_TYPE;switch(e){case types_SupportedBondingCurve.MOONBAGS:n=o?await transaction_MoonbagsTransaction.getBuyTransaction(t,this.sdk.suiClient):await transaction_MoonbagsTransaction.getSellTransaction(t,this.sdk.suiClient);break;case types_SupportedBondingCurve.BLAST_FUN:n=o?await sdk_transaction_BlastFunSDKTransaction.getBuyTransaction(t,this.sdk.suiClient):await sdk_transaction_BlastFunSDKTransaction.getSellTransaction(t,this.sdk.suiClient);break;default:throw Error(`Unsupported bonding curve platform: ${e}`)}return n}}const SUBSCRIPTION_PACKAGE_ID="0xaedb9a4330883c91769c99e7d2a7ea573b686504daf11d13353141260736a902",SUBSCRIPTION_CONFIG_ID="0xe88e0d6792c2bef3f54d594ef26d8df85c6227f5370c200b860d8264f5d78744",SUBSCRIPTION_ADMIN_CAP_ID="0x4d15fc6c181efbe82020697705d37b29154edecb4c682b502bd8f0136d4dd7bf",PAYMENT_COIN_TYPE="0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC";class SubscriptionModule{sdk;constructor(e){this.sdk=e}async getConfig(){let e=await this.sdk.suiClient.getObject({id:SUBSCRIPTION_CONFIG_ID,options:{showContent:!0}});tiny_invariant_default()(e.data,"Config object not found"),tiny_invariant_default()(e.data.content,"Config object has no content"),tiny_invariant_default()(e.data?.content.dataType==="moveObject","Config object is not a Move object");let t=e.data.content.fields,n=t.id.id,a=t.fee_receiver,i=t.paused,o=t.accepted_payment_type,r=t.plans.fields.contents,s={};for(let e of r){let t=e.fields.key,n=e.fields.value.fields.id,a=e.fields.value.fields.price,i=e.fields.value.fields.month_interval,o=e.fields.value.fields.ptype;s[t]={id:BigInt(n),price:BigInt(a),monthInterval:i,planType:o}}return{id:n,plans:s,feeReceiverWallet:a,paused:i,acceptedPaymentType:o}}async buildSubscribeCyclePlanTx({walletAddress:e,planId:t,reference:n,paymentCoinType:a=PAYMENT_COIN_TYPE,currentTx:i}){let o=await this.getConfig();tiny_invariant_default()(!o.paused,"Contract is paused"),tiny_invariant_default()(t in o.plans,"Invalid plan ID");let r=o.plans[t].price,{tx:s,coinData:u}=await getSplitCoinForTx({account:e,amount:r.toString(),splits:[r.toString()],coinType:a,inheritTx:i},this.sdk.suiClient);s.moveCall({target:`${SUBSCRIPTION_PACKAGE_ID}::subscription::subscribe_cycle_plan`,typeArguments:[a],arguments:[s.object(SUBSCRIPTION_CONFIG_ID),s.pure.u64(t),s.pure.string(n),u]}),s.setSender(e);let c=await getNeededGasFee(this.sdk.suiClient,s,e,0);return addGasFee({inheritTx:s,sender:e,feeAmount:c},this.sdk.suiClient)}async buildUpgradeCyclePlanTx({walletAddress:e,currentPlanId:t,targetPlanId:n,reference:a,isNextCycle:i,paymentCoinType:o=PAYMENT_COIN_TYPE,currentTx:r}){let s=await this.getConfig();tiny_invariant_default()(!s.paused,"Contract is paused"),tiny_invariant_default()(t in s.plans,"Invalid current plan ID"),tiny_invariant_default()(n in s.plans,"Invalid target plan ID"),tiny_invariant_default()(t!==n,"Current and target plan IDs must be different");let u=s.plans[n].price,{tx:c,coinData:_}=await getSplitCoinForTx({account:e,amount:u.toString(),splits:[u.toString()],coinType:o,inheritTx:r},this.sdk.suiClient);c.moveCall({target:`${SUBSCRIPTION_PACKAGE_ID}::subscription::upgrade_cycle_plan`,typeArguments:[o],arguments:[c.object(SUBSCRIPTION_CONFIG_ID),c.pure.u64(t),c.pure.u64(n),c.pure.string(a),c.pure.bool(i),_]}),c.setSender(e);let l=await getNeededGasFee(this.sdk.suiClient,c,e,0);return addGasFee({inheritTx:c,sender:e,feeAmount:l},this.sdk.suiClient)}async buildBuyMoreCUPlanTx({walletAddress:e,planId:t,reference:n,paidAmount:a,paymentCoinType:i=PAYMENT_COIN_TYPE,currentTx:o}){let r=await this.getConfig();tiny_invariant_default()(!r.paused,"Contract is paused"),tiny_invariant_default()(t in r.plans,"Invalid plan ID");let{tx:s,coinData:u}=await getSplitCoinForTx({account:e,amount:a.toString(),splits:[a.toString()],coinType:i,inheritTx:o},this.sdk.suiClient);s.moveCall({target:`${SUBSCRIPTION_PACKAGE_ID}::subscription::buy_more_cu`,typeArguments:[i],arguments:[s.object(SUBSCRIPTION_CONFIG_ID),s.pure.u64(t),s.pure.string(n),s.pure.u64(a),u]}),s.setSender(e);let c=await getNeededGasFee(this.sdk.suiClient,s,e,0);return addGasFee({inheritTx:s,sender:e,feeAmount:c},this.sdk.suiClient)}async buildSubscribePlanWithAdminTx({walletAddress:e,planId:t,reference:n,customAmount:a,paymentCoinType:i=PAYMENT_COIN_TYPE,currentTx:o}){let r=await this.getConfig();tiny_invariant_default()(!r.paused,"Contract is paused");let{tx:s,coinData:u}=await getSplitCoinForTx({account:e,amount:a.toString(),splits:[a.toString()],coinType:i,inheritTx:o},this.sdk.suiClient);s.moveCall({target:`${SUBSCRIPTION_PACKAGE_ID}::subscription::subscribe_plan_with_admin`,typeArguments:[i],arguments:[s.object(SUBSCRIPTION_ADMIN_CAP_ID),s.object(SUBSCRIPTION_CONFIG_ID),s.pure.u64(t),s.pure.string(n),s.pure.u64(a),u]}),s.setSender(e);let c=await getNeededGasFee(this.sdk.suiClient,s,e,0);return addGasFee({inheritTx:s,sender:e,feeAmount:c},this.sdk.suiClient)}async buildAddPlanTx({adminAddress:e,planId:t,planType:n,monthInterval:a,price:i,currentTx:o}){let r=o||new transactions_namespaceObject.Transaction;r.moveCall({target:`${SUBSCRIPTION_PACKAGE_ID}::config::add_plan`,typeArguments:[],arguments:[r.object(SUBSCRIPTION_CONFIG_ID),r.object(SUBSCRIPTION_ADMIN_CAP_ID),r.pure.u64(t),r.pure.u8(n),r.pure.u8(a),r.pure.u64(i)]}),r.setSender(e);let s=await getNeededGasFee(this.sdk.suiClient,r,e,0);return addGasFee({inheritTx:r,sender:e,feeAmount:s},this.sdk.suiClient)}async buildUpdatePlanTx({adminAddress:e,planId:t,planType:n,monthInterval:a,price:i,currentTx:o}){let r=o||new transactions_namespaceObject.Transaction;r.moveCall({target:`${SUBSCRIPTION_PACKAGE_ID}::config::update_plan`,typeArguments:[],arguments:[r.object(SUBSCRIPTION_CONFIG_ID),r.object(SUBSCRIPTION_ADMIN_CAP_ID),r.pure.u64(BigInt(t)),r.pure.u8(n),r.pure.u8(a),r.pure.u64(i)]}),r.setSender(e);let s=await getNeededGasFee(this.sdk.suiClient,r,e,0);return addGasFee({inheritTx:r,sender:e,feeAmount:s},this.sdk.suiClient)}async buildRemovePlanTx({adminAddress:e,planId:t,currentTx:n}){let a=n||new transactions_namespaceObject.Transaction;a.moveCall({target:`${SUBSCRIPTION_PACKAGE_ID}::config::remove_plan`,typeArguments:[],arguments:[a.object(SUBSCRIPTION_CONFIG_ID),a.object(SUBSCRIPTION_ADMIN_CAP_ID),a.pure.u64(BigInt(t))]}),a.setSender(e);let i=await getNeededGasFee(this.sdk.suiClient,a,e,0);return addGasFee({inheritTx:a,sender:e,feeAmount:i},this.sdk.suiClient)}async buildUpdateFeeReceiverWalletTx({adminAddress:e,newFeeReceiverWallet:t,currentTx:n}){let a=n||new transactions_namespaceObject.Transaction;a.moveCall({target:`${SUBSCRIPTION_PACKAGE_ID}::config::update_fee_receiver`,typeArguments:[],arguments:[a.object(SUBSCRIPTION_CONFIG_ID),a.object(SUBSCRIPTION_ADMIN_CAP_ID),a.pure.address(t)]}),a.setSender(e);let i=await getNeededGasFee(this.sdk.suiClient,a,e,0);return addGasFee({inheritTx:a,sender:e,feeAmount:i},this.sdk.suiClient)}async buildSetPausedTx({adminAddress:e,paused:t,currentTx:n}){let a=n||new transactions_namespaceObject.Transaction;a.moveCall({target:`${SUBSCRIPTION_PACKAGE_ID}::config::set_paused`,typeArguments:[],arguments:[a.object(SUBSCRIPTION_CONFIG_ID),a.object(SUBSCRIPTION_ADMIN_CAP_ID),a.pure.bool(t)]}),a.setSender(e);let i=await getNeededGasFee(this.sdk.suiClient,a,e,0);return addGasFee({inheritTx:a,sender:e,feeAmount:i},this.sdk.suiClient)}async buildSetAcceptedPaymentTypeTx({adminAddress:e,paymentCoinType:t,currentTx:n}){let a=n||new transactions_namespaceObject.Transaction;a.moveCall({target:`${SUBSCRIPTION_PACKAGE_ID}::config::set_accepted_payment_type`,typeArguments:[t],arguments:[a.object(SUBSCRIPTION_CONFIG_ID),a.object(SUBSCRIPTION_ADMIN_CAP_ID)]}),a.setSender(e);let i=await getNeededGasFee(this.sdk.suiClient,a,e,0);return addGasFee({inheritTx:a,sender:e,feeAmount:i},this.sdk.suiClient)}}class NoodlesPaySdk{_suiClient;boostingModule;subscriptionModule;constructor(){this._suiClient=new client_namespaceObject.SuiClient({url:(0,client_namespaceObject.getFullnodeUrl)("mainnet")}),this.subscriptionModule=new SubscriptionModule(this),this.boostingModule=new BoostingModule(this)}get suiClient(){return this._suiClient}}const DEFAULT_TRADE_FEE={tradeFeePercent:.01,tradeFeeRecipientAddress:"0xdaf1c8ed29d89cd8f217f609bad0a668fa6f158c12000bfa5f93e670c99e24ff"};class NoodlesSdk{options;_suiClient;aggregatorModule;curveModule;constructor(e){this.options=e,this._suiClient=new client_namespaceObject.SuiClient({url:(0,client_namespaceObject.getFullnodeUrl)("mainnet")}),this.aggregatorModule=new AggregatorModule(this),this.curveModule=new CurveModule(this)}get suiClient(){return this._suiClient}}const ed25519_namespaceObject=require("@mysten/sui/keypairs/ed25519"),CONSTANTS={GAS_FEE_BUFFER_PERCENTAGE:.1};class DraftTransferTx{suiClient;constructor(e){this.suiClient=e}validatePrivateKey(e,t){tiny_invariant_default()(e?.trim(),"Private key is required");let n=ed25519_namespaceObject.Ed25519Keypair.fromSecretKey(e),a=n.getPublicKey().toSuiAddress();if(a!==t)throw Error(`Private key mismatch. Expected: ${t}, Got: ${a}`);return n}async createDraft(e,t,n){tiny_invariant_default()(e?.trim(),"Sender address is required"),tiny_invariant_default()(t?.trim(),"Recipient address is required"),tiny_invariant_default()(e!==t,"Sender and recipient cannot be the same"),tiny_invariant_default()(n>0n,"Transfer amount must be at least 1 MIST");try{let a=new transactions_namespaceObject.Transaction,[i]=a.splitCoins(a.gas,[n]);a.transferObjects([i],t),a.setSender(e);let o=await this.suiClient.getReferenceGasPrice();a.setGasPrice(o);let r=await getNeededGasFee(this.suiClient,a,e,CONSTANTS.GAS_FEE_BUFFER_PERCENTAGE);a=await addGasFee({inheritTx:a,sender:e,feeAmount:r,suiInputAmount:n},this.suiClient);let s=await a.build({client:this.suiClient}),u=Buffer.from(s).toString("base64"),c=await a.getDigest();return{sender:e,recipient:t,amountMIST:n,txDraftBase64:u,txDigest:c}}catch(e){throw Error(`Failed to create draft transaction: ${e instanceof Error?e.message:"Unknown error"}`)}}async execute(e,t){try{tiny_invariant_default()(e,"Draft transaction is required"),tiny_invariant_default()(e.txDraftBase64?.trim(),"Transaction data is required");let n=this.validatePrivateKey(t,e.sender),a=(0,utils_namespaceObject.fromBase64)(e.txDraftBase64),{signature:i}=await n.signTransaction(a),o=await this.suiClient.executeTransactionBlock({transactionBlock:a,signature:i});return{success:!0,txDigest:o.digest,effects:o.effects}}catch(e){return{success:!1,error:e instanceof Error?e.message:"Unknown error occurred"}}}async getTransactionStatus(e){tiny_invariant_default()(e?.trim(),"Transaction digest is required");try{let t=await this.suiClient.getTransactionBlock({digest:e,options:{showEffects:!0}});if(!t?.effects?.status)return"pending";return"success"===t.effects.status.status?"success":"failure"}catch(e){if(e instanceof Error&&(e.message.includes("not found")||e.message.includes("Could not find")))return"pending";return"failure"}}}for(var __rspack_i in exports.ADMIN_CAP_ID=__webpack_exports__.ADMIN_CAP_ID,exports.AftermathAggregator=__webpack_exports__.AftermathAggregator,exports.AggregatorModule=__webpack_exports__.AggregatorModule,exports.AstrosAggregator=__webpack_exports__.AstrosAggregator,exports.BASE_BPS=__webpack_exports__.BASE_BPS,exports.BLUEFIN_PACKAGE_ID=__webpack_exports__.BLUEFIN_PACKAGE_ID,exports.BOOSTING_PACKAGE_ID=__webpack_exports__.BOOSTING_PACKAGE_ID,exports.BlastFunConstants=__webpack_exports__.BlastFunConstants,exports.BlastFunCustomCalculation=__webpack_exports__.BlastFunCustomCalculation,exports.BlastFunCustomTransaction=__webpack_exports__.BlastFunCustomTransaction,exports.BlastFunPackage=__webpack_exports__.BlastFunPackage,exports.BlastFunSDKCalculation=__webpack_exports__.BlastFunSDKCalculation,exports.BlastFunSDKTransaction=__webpack_exports__.BlastFunSDKTransaction,exports.BluefinTx=__webpack_exports__.BluefinTx,exports.BoostingModule=__webpack_exports__.BoostingModule,exports.Bps=__webpack_exports__.Bps,exports.CLOCK_OBJECT_ID=__webpack_exports__.CLOCK_OBJECT_ID,exports.CONFIG_ID=__webpack_exports__.CONFIG_ID,exports.CetusAggregator=__webpack_exports__.CetusAggregator,exports.CurveModule=__webpack_exports__.CurveModule,exports.DEFAULT_TRADE_FEE=__webpack_exports__.DEFAULT_TRADE_FEE,exports.DraftTransferTx=__webpack_exports__.DraftTransferTx,exports.FlowXAggregator=__webpack_exports__.FlowXAggregator,exports.MathUtils=__webpack_exports__.MathUtils,exports.MoonbagsCalculation=__webpack_exports__.MoonbagsCalculation,exports.MoonbagsConstants=__webpack_exports__.MoonbagsConstants,exports.MoonbagsPackage=__webpack_exports__.MoonbagsPackage,exports.MoonbagsTransaction=__webpack_exports__.MoonbagsTransaction,exports.NATIVE_USDC_TOKEN_TYPE=__webpack_exports__.NATIVE_USDC_TOKEN_TYPE,exports.NoodlesPaySdk=__webpack_exports__.NoodlesPaySdk,exports.NoodlesSdk=__webpack_exports__.NoodlesSdk,exports.PAYMENT_COIN_TYPE=__webpack_exports__.PAYMENT_COIN_TYPE,exports.SUBSCRIPTION_ADMIN_CAP_ID=__webpack_exports__.SUBSCRIPTION_ADMIN_CAP_ID,exports.SUBSCRIPTION_CONFIG_ID=__webpack_exports__.SUBSCRIPTION_CONFIG_ID,exports.SUBSCRIPTION_PACKAGE_ID=__webpack_exports__.SUBSCRIPTION_PACKAGE_ID,exports.SUI_FULL_TYPE=__webpack_exports__.SUI_FULL_TYPE,exports.SUI_METADATA_OBJECT_ID=__webpack_exports__.SUI_METADATA_OBJECT_ID,exports.SUI_TYPE=__webpack_exports__.SUI_TYPE,exports.SevenKAggregator=__webpack_exports__.SevenKAggregator,exports.SubscriptionModule=__webpack_exports__.SubscriptionModule,exports.SupportedAggregator=__webpack_exports__.SupportedAggregator,exports.SupportedBondingCurve=__webpack_exports__.SupportedBondingCurve,exports.TradeFeeOptions=__webpack_exports__.TradeFeeOptions,exports.USDC_TOKEN_TYPE=__webpack_exports__.USDC_TOKEN_TYPE,exports.adaptSuiClient=__webpack_exports__.adaptSuiClient,exports.adaptTransaction=__webpack_exports__.adaptTransaction,exports.addGasFee=__webpack_exports__.addGasFee,exports.createCompatibleSuiClient=__webpack_exports__.createCompatibleSuiClient,exports.getAmountAfterFee=__webpack_exports__.getAmountAfterFee,exports.getCoinObjectIdsByAmount=__webpack_exports__.getCoinObjectIdsByAmount,exports.getMemezPumpSDK=__webpack_exports__.getMemezPumpSDK,exports.getMoveObject=__webpack_exports__.getMoveObject,exports.getMoveObjectContent=__webpack_exports__.getMoveObjectContent,exports.getNeededGasFee=__webpack_exports__.getNeededGasFee,exports.getSplitCoinForTx=__webpack_exports__.getSplitCoinForTx,exports.getSplitCoinsAfterFee=__webpack_exports__.getSplitCoinsAfterFee,exports.splitSuiCoinAfterFeeFromBuyTx=__webpack_exports__.splitSuiCoinAfterFeeFromBuyTx,exports.splitSuiCoinAfterFeeFromSellTx=__webpack_exports__.splitSuiCoinAfterFeeFromSellTx,__webpack_exports__)-1===["ADMIN_CAP_ID","AftermathAggregator","AggregatorModule","AstrosAggregator","BASE_BPS","BLUEFIN_PACKAGE_ID","BOOSTING_PACKAGE_ID","BlastFunConstants","BlastFunCustomCalculation","BlastFunCustomTransaction","BlastFunPackage","BlastFunSDKCalculation","BlastFunSDKTransaction","BluefinTx","BoostingModule","Bps","CLOCK_OBJECT_ID","CONFIG_ID","CetusAggregator","CurveModule","DEFAULT_TRADE_FEE","DraftTransferTx","FlowXAggregator","MathUtils","MoonbagsCalculation","MoonbagsConstants","MoonbagsPackage","MoonbagsTransaction","NATIVE_USDC_TOKEN_TYPE","NoodlesPaySdk","NoodlesSdk","PAYMENT_COIN_TYPE","SUBSCRIPTION_ADMIN_CAP_ID","SUBSCRIPTION_CONFIG_ID","SUBSCRIPTION_PACKAGE_ID","SUI_FULL_TYPE","SUI_METADATA_OBJECT_ID","SUI_TYPE","SevenKAggregator","SubscriptionModule","SupportedAggregator","SupportedBondingCurve","TradeFeeOptions","USDC_TOKEN_TYPE","adaptSuiClient","adaptTransaction","addGasFee","createCompatibleSuiClient","getAmountAfterFee","getCoinObjectIdsByAmount","getMemezPumpSDK","getMoveObject","getMoveObjectContent","getNeededGasFee","getSplitCoinForTx","getSplitCoinsAfterFee","splitSuiCoinAfterFeeFromBuyTx","splitSuiCoinAfterFeeFromSellTx"].indexOf(__rspack_i)&&(exports[__rspack_i]=__webpack_exports__[__rspack_i]);Object.defineProperty(exports,"__esModule",{value:!0});
package/dist/index.d.ts CHANGED
@@ -450,15 +450,15 @@ export declare type BoostingConfig = {
450
450
  * - Retrieving boosting configuration
451
451
  * - Updating fee receiver settings
452
452
  */
453
- export declare class BoostingModule implements IModule {
453
+ export declare class BoostingModule implements IPayModule {
454
454
  /** Reference to the main SDK instance */
455
- sdk: NoodlesSdk;
455
+ sdk: NoodlesPaySdk;
456
456
  /**
457
457
  * Creates a new BoostingModule instance.
458
458
  *
459
- * @param sdk - The main Noodles SDK instance
459
+ * @param sdk - The main Noodles Pay SDK instance
460
460
  */
461
- constructor(sdk: NoodlesSdk);
461
+ constructor(sdk: NoodlesPaySdk);
462
462
  /**
463
463
  * Retrieves the current boosting configuration from the blockchain.
464
464
  *
@@ -1068,6 +1068,10 @@ export declare interface IModule {
1068
1068
  readonly sdk: NoodlesSdk;
1069
1069
  }
1070
1070
 
1071
+ export declare interface IPayModule {
1072
+ readonly sdk: NoodlesPaySdk;
1073
+ }
1074
+
1071
1075
  declare type LegacySuiClient = SuiClient;
1072
1076
 
1073
1077
  export declare namespace MathUtils {
@@ -1168,13 +1172,19 @@ export declare type MoveObjectStruct<Content> = {
1168
1172
 
1169
1173
  export declare const NATIVE_USDC_TOKEN_TYPE = "0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC";
1170
1174
 
1175
+ export declare class NoodlesPaySdk {
1176
+ private _suiClient;
1177
+ readonly boostingModule: BoostingModule;
1178
+ readonly subscriptionModule: SubscriptionModule;
1179
+ constructor();
1180
+ get suiClient(): SuiClient;
1181
+ }
1182
+
1171
1183
  export declare class NoodlesSdk {
1172
1184
  readonly options: SdkOptions;
1173
1185
  private _suiClient;
1174
1186
  readonly aggregatorModule: AggregatorModule;
1175
1187
  readonly curveModule: CurveModule;
1176
- readonly boostingModule: BoostingModule;
1177
- readonly subscriptionModule: SubscriptionModule;
1178
1188
  constructor(options: SdkOptions);
1179
1189
  get suiClient(): SuiClient;
1180
1190
  }
@@ -1403,15 +1413,15 @@ export declare type SubscriptionConfig = {
1403
1413
  * - Retrieving subscription configuration
1404
1414
  * - Updating fee receiver wallet and pause settings
1405
1415
  */
1406
- export declare class SubscriptionModule implements IModule {
1416
+ export declare class SubscriptionModule implements IPayModule {
1407
1417
  /** Reference to the main SDK instance */
1408
- sdk: NoodlesSdk;
1418
+ sdk: NoodlesPaySdk;
1409
1419
  /**
1410
1420
  * Creates a new SubscriptionModule instance.
1411
1421
  *
1412
- * @param sdk - The main Noodles SDK instance
1422
+ * @param sdk - The main Noodles Pay SDK instance
1413
1423
  */
1414
- constructor(sdk: NoodlesSdk);
1424
+ constructor(sdk: NoodlesPaySdk);
1415
1425
  /**
1416
1426
  * Retrieves the current subscription configuration from the blockchain.
1417
1427
  *
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import{BluefinXTx as e,Config as t,buildTx as n,getQuote as i}from"@7kprotocol/sdk-ts";import{Transaction as r}from"@mysten/sui/transactions";import o from"bignumber.js";import{Aftermath as a,Helpers as s}from"aftermath-ts-sdk";import{buildSwapPTBFromQuote as u,getCoins as l,getQuote as c}from"@naviprotocol/astros-aggregator-sdk";import{AggregatorClient as d,Env as g}from"@cetusprotocol/aggregator-sdk";import p from"bn.js";import{AggregatorQuoter as f,Coin as m,Commission as h,CommissionType as _,TradeBuilder as A}from"@flowx-finance/sdk";import I from"@minswap/tiny-invariant";import{fromBase64 as C,normalizeStructTag as b}from"@mysten/sui/utils";import{MemezPumpSDK as y}from"@interest-protocol/memez-fun-sdk";import{Network as T}from"@interest-protocol/sui-core-sdk";import{SuiClient as w,getFullnodeUrl as B}from"@mysten/sui/client";import{Ed25519Keypair as v}from"@mysten/sui/keypairs/ed25519";class O{_config;_suiClient;constructor(e,t){this._config=e,this._suiClient=t}async getTradeRoute({coinInAmount:e,coinInType:n,coinOutType:r,tradeFee:o}){try{this._config.sevenKApiKey&&t.setApiKey(this._config.sevenKApiKey);let a=o?o.tradeFeePercent:this._config.defaultTradeFee.tradeFeePercent;return await i({tokenIn:n,tokenOut:r,amountIn:e.toString(),commissionBps:1e4*a})}catch(e){return null}}async getTransaction({walletAddress:t,completeRoute:i,slippage:o,tradeFee:a}){let s,u;a?(s=a.tradeFeePercent,u=a.tradeFeeRecipientAddress):(s=this._config.defaultTradeFee.tradeFeePercent,u=this._config.defaultTradeFee.tradeFeeRecipientAddress);let l=await n({quoteResponse:i,slippage:o,accountAddress:t,commission:{partner:u,commissionBps:1e4*s}});return l.tx instanceof e?r.from(l.tx.txBytes).build({client:this._suiClient}):(l.tx.setSender(t),l.tx.build({client:this._suiClient}))}}(O||(O={})).toCommonTradeRoutes=function(e){let t=[];if(!e.routes||0===e.routes.length)return null;for(let n of e.routes){let e=[],i={};for(let t of n.hops){for(let e of t.pool.allTokens)i[e.address]=e.decimal;let n=i[t.tokenIn]??0,r=i[t.tokenOut]??0,a=BigInt(new o(t.tokenInAmount).multipliedBy(10**n).toFixed(0,3)),s=BigInt(new o(t.tokenOutAmount).multipliedBy(10**r).toFixed(0,3));e.push({poolAddress:t.poolId,coinIn:t.tokenIn,coinOut:t.tokenOut,amountIn:a,amountOut:s})}if(0===e.length)continue;let r=i[n.tokenIn]??0,a=i[n.tokenOut]??0,s=BigInt(new o(n.tokenInAmount).multipliedBy(10**r).toFixed(0,3)),u=BigInt(new o(n.tokenOutAmount).multipliedBy(10**a).toFixed(0,3));t.push({paths:e,coinIn:n.tokenIn,coinOut:n.tokenOut,amountIn:s,amountOut:u})}return 0===t.length?null:{coinIn:e.tokenIn,coinOut:e.tokenOut,amountIn:BigInt(e.swapAmountWithDecimal),amountOut:BigInt(e.returnAmountWithDecimal),routes:t}};class F{_config;_aftermathClient;_suiClient;constructor(e,t){this._config=e,this._suiClient=t}async aftermathClient(){if(this._aftermathClient)return this._aftermathClient;if(this._config.aftermathApiEndpoint?this._aftermathClient=new a(this._config.aftermathApiEndpoint):this._aftermathClient=new a("MAINNET"),await this._aftermathClient.init(),this._config.aftermathApiKey){let e=s.keypairFromPrivateKey(this._config.aftermathApiKey);await this._aftermathClient.Auth().init({async signMessageCallback({message:t}){let{signature:n}=await e.signPersonalMessage(t);return{signature:n}},walletAddress:e.toSuiAddress()})}return this._aftermathClient}async getTradeRoute({coinInAmount:e,coinInType:t,coinOutType:n,tradeFee:i}){try{let r;r=i?{recipient:i.tradeFeeRecipientAddress,feePercentage:i.tradeFeePercent}:{recipient:this._config.defaultTradeFee.tradeFeeRecipientAddress,feePercentage:this._config.defaultTradeFee.tradeFeePercent};let o=await this.aftermathClient();return await o.Router().getCompleteTradeRouteGivenAmountIn({coinInAmount:e,coinInType:t,coinOutType:n,externalFee:r})}catch(e){return null}}async getTransaction({completeRoute:e,walletAddress:t,slippage:n}){let i=await this.aftermathClient(),r=await i.Router().getTransactionForCompleteTradeRoute({completeRoute:e,walletAddress:t,slippage:n,isSponsoredTx:!1});return r.setSender(t),r.build({client:this._suiClient})}}(F||(F={})).toCommonTradeRoutes=function(e){if(0===e.routes.length)return null;let t=[];for(let n of e.routes){let e=[];for(let t of n.paths)e.push({poolAddress:t.poolId,coinIn:t.coinIn.type,coinOut:t.coinOut.type,amountIn:BigInt(t.coinIn.amount),amountOut:BigInt(t.coinOut.amount)});0!==e.length&&t.push({paths:e,coinIn:n.coinIn.type,coinOut:n.coinOut.type,amountIn:n.coinIn.amount,amountOut:n.coinOut.amount})}return 0===t.length?null:{coinIn:e.coinIn.type,coinOut:e.coinOut.type,amountIn:e.coinIn.amount,amountOut:e.coinOut.amount,routes:t}};class S{_config;_suiClient;constructor(e,t){this._config=e,this._suiClient=t}async getTradeRoute({coinInAmount:e,coinInType:t,coinOutType:n,tradeFee:i}){try{let r;return r=i?{fee:i.tradeFeePercent,receiverAddress:i.tradeFeeRecipientAddress}:{fee:this._config.defaultTradeFee.tradeFeePercent,receiverAddress:this._config.defaultTradeFee.tradeFeeRecipientAddress},await c(t,n,e,this._config.astrosApiKey,{byAmountIn:!0,serviceFee:r})}catch(e){return null}}returnMergedCoins(e,t,n){if(t.length<2)return e.object(t[0].coinObjectId);let i=0,r=[];t.sort((e,t)=>Number(t.balance)-Number(e.balance)).slice(1).forEach(e=>{i>=n||(i+=Number(e.balance),r.push(e.coinObjectId))});let o=t[0].coinObjectId;return e.mergeCoins(o,r),e.object(o)}async getTransaction({completeRoute:e,walletAddress:t,slippage:n,tradeFee:i}){var a;let s,c;s=i?{fee:i.tradeFeePercent,receiverAddress:i.tradeFeeRecipientAddress}:{fee:this._config.defaultTradeFee.tradeFeePercent,receiverAddress:this._config.defaultTradeFee.tradeFeeRecipientAddress};let d=new o(e.amount_out).multipliedBy(1-n-s.fee).toNumber(),g=new r;if("0x2::sui::SUI"===(a=e.from)||"0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI"===a)c=g.splitCoins(g.gas,[g.pure.u64(e.amount_in)]);else{let n=await l(this._suiClient,t,e.from),i=this.returnMergedCoins(g,n.data,Number.parseFloat(e.amount_in));c=g.splitCoins(i,[g.pure.u64(e.amount_in)])}let p=await u(t,g,d,c,e,void 0,!1,this._config.astrosApiKey,{serviceFee:s});return g.transferObjects([p],t),g.setSender(t),g.build({client:this._suiClient})}}(S||(S={})).toCommonTradeRoutes=function(e,t,n){if(0===e.routes.length)return null;let i=[];for(let t of e.routes){let e=[];for(let n of t.path)e.push({poolAddress:n.id,coinIn:n.from,coinOut:n.target,amountIn:BigInt(n.amount_in),amountOut:BigInt(n.amount_out)});0!==e.length&&i.push({amountIn:BigInt(t.amount_in),amountOut:BigInt(t.amount_out),coinIn:e[0].coinIn,coinOut:e[e.length-1].coinOut,paths:e})}return 0===i.length?null:{coinIn:t,coinOut:n,amountIn:BigInt(e.amount_in),amountOut:BigInt(e.amount_out),routes:i}},(z||(z={})).equals=function(e,t){return e.tradeFeePercent===t.tradeFeePercent&&e.tradeFeeRecipientAddress===t.tradeFeeRecipientAddress};class x{_config;_suiClient;_cetusClient;constructor(e,t){this._config=e,this._suiClient=t}cetusClient(e,t){return t&&!z.equals(t,this._config.defaultTradeFee)?new d({client:this._suiClient,overlayFeeReceiver:t.tradeFeeRecipientAddress,overlayFeeRate:t.tradeFeePercent,env:g.Mainnet,signer:e,...this._config.cetusApiKey&&this._config.cetusApiEndpoint?{apiKey:this._config.cetusApiKey,endpoint:this._config.cetusApiEndpoint}:{},partner:this._config.cetusPartnerId}):(this._cetusClient||(this._cetusClient=new d({client:this._suiClient,overlayFeeReceiver:this._config.defaultTradeFee.tradeFeeRecipientAddress,overlayFeeRate:this._config.defaultTradeFee.tradeFeePercent,env:g.Mainnet,signer:e,...this._config.cetusApiKey&&this._config.cetusApiEndpoint?{apiKey:this._config.cetusApiKey,endpoint:this._config.cetusApiEndpoint}:{},partner:this._config.cetusPartnerId})),this._cetusClient)}async getTradeRoute({coinInAmount:e,coinInType:t,coinOutType:n,tradeFee:i}){try{let r=this.cetusClient(void 0,i);return await r.findRouters({from:t,target:n,amount:new p(e.toString()),byAmountIn:!0})}catch(e){return null}}async getTransaction({completeRoute:e,walletAddress:t,slippage:n,tradeFee:i}){let o=new r,a=this.cetusClient(t,i);return await a.fastRouterSwap({router:e,txb:o,slippage:n}),await a.devInspectTransactionBlock(o),o.setSender(t),o.build({client:this._suiClient})}}(x||(x={})).toCommonTradeRoutes=function(e,t,n){if(0===e.paths.length)return null;let i=[],r=[],o=[];for(let t=0;t<e.paths.length;t++){let n=e.paths[t],i={poolAddress:n.id,amountIn:BigInt(n.amountIn),amountOut:BigInt(n.amountOut),coinIn:n.from,coinOut:n.target};if(o.push(i),t===e.paths.length-1)r.push([...o]);else{let i=e.paths[t+1];n.target!==i.from&&(r.push([...o]),o=[])}}for(let e of r)0!==e.length&&i.push({amountIn:e[0].amountIn,amountOut:e[e.length-1].amountOut,coinIn:e[0].coinIn,coinOut:e[e.length-1].coinOut,paths:e});return 0===i.length?null:{coinIn:t,coinOut:n,amountIn:BigInt(e.amountIn.toString(10)),amountOut:BigInt(e.amountOut.toString(10)),routes:i}};var k,R,E,P,j,D,M,N,U,K,G,q,$,L,z,W,J,V,X,Y,Z,H,Q,ee,et,en,ei,er,eo=((L={}).ASTROS="ASTROS",L.AFTERMATH="AFTERMATH",L.SEVENK="7K",L.CETUS="CETUS",L.FLOWX="FLOWX",L);class ea{_config;_suiClient;constructor(e,t){this._config=e,this._suiClient=t}getCommission(e,t){let n,i;return t?(n=t.tradeFeePercent,i=t.tradeFeeRecipientAddress):(n=this._config.defaultTradeFee.tradeFeePercent,i=this._config.defaultTradeFee.tradeFeeRecipientAddress),new h(i,new m(e),_.PERCENTAGE,1e6*n,!0)}async getTradeRoute({coinInAmount:e,coinInType:t,coinOutType:n,tradeFee:i}){let r=new f("mainnet",this._config.flowxApiKey);try{return await r.getRoutes({tokenIn:t,tokenOut:n,amountIn:e.toString(),commission:this.getCommission(t,i)})}catch(e){return null}}async getTransaction({walletAddress:e,completeRoute:t,slippage:n,tradeFee:i}){return new A("mainnet",t.routes).sender(e).slippage(1e6*n).commission(this.getCommission(t.coinIn.coinType,i)).build().buildTransaction({client:this._suiClient}).then(t=>(t.setSender(e),t.build({client:this._suiClient})))}}async function es(e,t){return(await eu(e,t)).fields}async function eu(e,t){let n=await e.getObject({id:t,options:{showContent:!0}}),i=n.data?.content;return I(i,"Pool object not found or has no content"),I("moveObject"===i.dataType,"Object is not a Move object"),i}function el(e,t){let n=BigInt(e),i=BigInt(1e4*Number(t));if(i===BigInt(0))return[n.toString()];let r=n*i/BigInt(1e4);return[(n-r).toString(),r.toString()]}function ec(e,t){if(!t||0>=Number(t))return BigInt(e);let n=BigInt(e),i=BigInt(1e4*Number(t));if(i===BigInt(0))return n;let r=n*i/BigInt(1e4);return n-r}async function ed(e,t,n,i){let{effects:{gasUsed:r,status:o}}=await e.devInspectTransactionBlock({sender:n,transactionBlock:t});if("success"!==o.status)throw Error(`Transaction failed during dev inspect: ${o.error??""}`);let a=BigInt(r.computationCost)+BigInt(r.storageCost)-BigInt(r.storageRebate),s=BigInt(1e4*Number(i));return a*(BigInt(1e4)+s)/BigInt(1e4)}(ea||(ea={})).toCommonTradeRoutes=function(e){if(0===e.routes.length)return null;let t=[];for(let n of e.routes){let e=[];for(let t of n.paths)e.push({amountIn:BigInt(t.amountIn.toString()),amountOut:BigInt(t.amountOut.toString()),coinIn:t.input.coinType,coinOut:t.output.coinType,poolAddress:t.pool.id});0!==e.length&&t.push({amountIn:BigInt(n.amountIn.toString()),amountOut:BigInt(n.amountOut.toString()),coinIn:n.input.coinType,coinOut:n.output.coinType,paths:e})}return 0===t.length?null:{coinIn:e.coinIn.coinType,coinOut:e.coinOut.coinType,amountIn:BigInt(e.amountIn.toString()),amountOut:BigInt(e.amountOut.toString()),routes:t}},(k=W||(W={})).PACKAGE_ID_V4="0x7e6aa6e179466ab2814425a780b122575296d011119fa69d27f289f5a28814bd",k.MEMEZ_AV_OBJECT_ID="0x2319e3e76dfad73d8f4684bdbf42be4f32d8ce4521dd61becc8261dc918d82c0",((R=J||(J={})).U64||(R.U64={})).mulDivUp=function(e,t,n){let i=BigInt(0);return e*t%n>BigInt(0)&&(i=BigInt(1)),e*t/n+i};var eg=V||(V={});function ep(e){return I(BigInt(e)<=BigInt(1e4),"Bps overflow"),BigInt(e)}eg.calcUp=function(e,t){let n,i=BigInt(e.pos0),r=BigInt(1e4);return n=i*t%r!==BigInt(0)?BigInt(1):BigInt(0),i*t/r+n},eg.sub=function(e,t){return I(BigInt(e.pos0)>=BigInt(t.pos0),"Bps underflow"),{pos0:(BigInt(e.pos0)-BigInt(t.pos0)).toString()}},eg.value=function(e){return BigInt(e.pos0)},eg.new_=function(e){return{pos0:ep(e).toString()}},eg.assertOverflow=ep,((E=X||(X={})).MemezFun||(E.MemezFun={})).isSniperProtectedMemezFun=async function(e,t){return(await es(e,t)).public_key.length>0},(P=E.MemezFees||(E.MemezFees={})).takeWithDiscount=function(e,t,n){if("Value"===e.variant){let n=BigInt(e.fields.pos0);if(n===BigInt(0))return BigInt(0);if(t>=n)return n;throw Error(`Insufficient amount to cover fee. Required: ${n}, provided: ${t}`)}if("Percentage"===e.variant){let i=e.fields.pos0.fields;if(BigInt(i.pos0)===BigInt(0))return BigInt(0);let r=V.calcUp(V.sub(i,n),t);if(t>=r)return r;throw Error(`Insufficient amount to cover fee. Required: ${r}, provided: ${t}`)}throw Error("Unknown fee variant")},P.calculateWithDiscount=function(e,t,n){if("Value"===e.variant)return BigInt(e.fields.pos0);if("Percentage"===e.variant){let i=e.fields.pos0.fields;return V.calcUp(V.sub(i,t),n)}throw Error("Unknown fee variant")},(E.MemezBurner||(E.MemezBurner={})).calculate=function(e,t){if(V.value(e.fee.fields)===BigInt(0)||t===BigInt(0)||t>=BigInt(e.target_liquidity))return V.new_(0);let n=BigInt(1e4);return V.new_(J.U64.mulDivUp(V.value(e.fee.fields),J.U64.mulDivUp(t,n,BigInt(e.target_liquidity)),n))},(j=E.MemezPump||(E.MemezPump={})).getPumpState=async function(e,t){return await es(e,t.inner_state)},j.pump=function(e,t){let n=e.constant_product.fields,i=E.MemezFees.takeWithDiscount(n.quote_swap_fee,t,n.quote_referrer_fee.fields),r=t-i,o=BigInt(n.meme_balance),a=BigInt(n.quote_balance),s=o*r/(BigInt(n.virtual_liquidity)+a+r),u=E.MemezFees.takeWithDiscount(n.meme_swap_fee,s,n.meme_referrer_fee.fields);return s-u},j.dump=function(e,t){let n=e.constant_product.fields,i=E.MemezFees.takeWithDiscount(n.meme_swap_fee,t,n.meme_referrer_fee.fields),r=t-i,o=BigInt(n.meme_balance),a=BigInt(n.quote_balance),s=BigInt(n.virtual_liquidity),u=E.MemezBurner.calculate(n.burner.fields,a),l=V.calcUp(u,r),c=r-(V.value(u)!==BigInt(0)?l:BigInt(0)),d=(s+a)*c/(o+c);d>a&&(d=a);let g=E.MemezFees.takeWithDiscount(n.quote_swap_fee,d,n.quote_referrer_fee.fields);return d-g},(D=Y||(Y={})).getCurveAmountAfterBuy=async function(e,t){let{suiAmount:n,poolId:i,frontendFee:r}=e,o=await es(t,i),a=await X.MemezPump.getPumpState(t,o);return n=ec(n,r),X.MemezPump.pump(a,n)},D.getSuiAmountAfterSell=async function(e,t){let{curveAmount:n,poolId:i,frontendFee:r}=e,o=await es(t,i),a=await X.MemezPump.getPumpState(t,o);return ec(X.MemezPump.dump(a,n),r)};let ef="0x2::sui::SUI",em="0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI",eh="0x5d4b302506645c37ff133b98c4b50a5ae14841659738d6d733d59d0d217a93bf::coin::COIN",e_="0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC",eA="0x9258181f5ceac8dbffb7030890243caed69a9599d2886d957a9cb7656af3bdb3",eI="0x0000000000000000000000000000000000000000000000000000000000000006",eC=async(e,t,n,i)=>{let r,o=[],a=!0;for(;a;)try{let n=await e.getCoins({owner:t,coinType:i,cursor:r});o=[...o,...n.data],a=n.hasNextPage,r=n.nextCursor}catch(e){console.error("Error fetching data:",e),a=!1}let s=((e,t,n)=>{let i;if(e?.length){do{i=!1;for(let r=0;r<e.length-1;r++){let o=BigInt(e[r][t]),a=BigInt(e[r+1][t]);if("desc"===n?o<a:o>a){let t=e[r];e[r]=e[r+1],e[r+1]=t,i=!0}}}while(i);return e}})(o.map(e=>({...e,balance:e.balance})),"balance","desc")??[],u="0",l=[],c=[];for(let e of s)if(u=(BigInt(e.balance)+BigInt(u)).toString(10),l.push(e.coinObjectId),c.push(e),BigInt(u)>=BigInt(n))break;return{objectIds:l,balance:u,objectCoins:c}};async function eb(e,t){let{account:n,amount:i,splits:o,coinType:a,inheritTx:s,inspecTransaction:u,isSponsored:l=!1}=e,c=s??new r,{objectIds:d}=await eC(t,n,i,a),g=d[0];if(b(a)===b(em)&&!l){let e;return u?(d.length>1&&c.mergeCoins(c.object(g),d.slice(1).map(e=>c.object(e))),e=c.splitCoins(c.object(g),o)):e=c.splitCoins(c.gas,o),{tx:c,coinData:e}}d.length>1&&c.mergeCoins(c.object(g),d.slice(1).map(e=>c.object(e)));let p=c.splitCoins(c.object(g),o);return{tx:c,coinData:p}}let ey="0x62412b7268c35f3808336aee57a52836501f40b8ba5d936f8ad275e672befd04";async function eT(e,t){let n,i,{inputAmount:o,accountAddress:a,frontendFee:s,frontendFeeRecipient:u,extendTx:l,isSponsored:c}=e;I(e.inCoinType===em||e.inCoinType===ef,"Input must be SUI");let{tx:d,coinIn:g}=l||{},p=el(o,s||"0"),f=d||new r;if(g)n=f.splitCoins(g,p),Z.transferOrDestroyZeroCoin(f,em,g,a);else{let{coinData:e}=await eb({account:a,amount:o,splits:p,coinType:em,inheritTx:f,isSponsored:c||!1},t);n=e}if(s&&u){let[e,t]=n;i=e,f.transferObjects([t],f.pure.address(u||a))}else[i]=n;return{tx:f,coinOut:i}}async function ew(e,t,n){if(I(t.outCoinType===em||t.outCoinType===ef,"Output must be SUI"),0>=Number(t.frontendFee||0))return{tx:e,coinOut:n};let i=e.moveCall({target:"0x2::coin::value",typeArguments:[t.outCoinType],arguments:[n]}),r=e.moveCall({target:`${ey}::math::mul_div_u64`,typeArguments:[],arguments:[i,e.pure.u64(BigInt(1e4*Number(t.frontendFee||"0"))),e.pure.u64(BigInt(1e4))]}),o=e.moveCall({target:"0x2::coin::split",typeArguments:[t.outCoinType],arguments:[n,r]});return e.transferObjects([o],e.pure.address(t.frontendFeeRecipient||t.accountAddress)),{tx:e,coinOut:n}}(Z||(Z={})).transferOrDestroyZeroCoin=function(e,t,n,i){e.moveCall({target:`${ey}::utils::transfer_or_destroy`,typeArguments:[t],arguments:[n,e.pure.address(i)]})};var eB=H||(H={});async function ev(e){let t=e||new r;return t.moveCall({target:`${W.PACKAGE_ID_V4}::memez_allowed_versions::get_allowed_versions`,arguments:[t.object(W.MEMEZ_AV_OBJECT_ID)],typeArguments:[]})}eB.getAllowedVersions=ev,eB.buildBuyTx=async function(e,t){I(!await X.MemezFun.isSniperProtectedMemezFun(t,e.poolId),"This coin is a sniper protected coin, please use the Blast Fun website to trade it.");let{tx:n,coinOut:i}=await eT(e,t);I(i,"Coin out is required");let r=n.moveCall({target:`${W.PACKAGE_ID_V4}::memez_pump::pump`,typeArguments:[e.outCoinType,em],arguments:[n.object(e.poolId),i,n.pure.vector("address",[]),n.pure.vector("vector<u8>",[]),n.pure.u64(e.minAmountOut),await ev(n)]});return{tx:n,coinOut:r}},eB.buildSellTx=async function(e,t){I(e.outCoinType===em||e.outCoinType===ef,"Output must be SUI");let n=await es(t,e.poolId),{tx:i,coinData:r}=await eb({amount:e.inputAmount,coinType:e.inCoinType,inheritTx:e.extendTx?.tx,account:e.accountAddress,splits:[e.inputAmount]},t),[o]=r,[a]=i.moveCall({target:`${W.PACKAGE_ID_V4}::memez_pump::dump`,typeArguments:[e.inCoinType,e.outCoinType],arguments:[i.object(e.poolId),i.object(n.ipx_meme_coin_treasury),o,i.pure.vector("address",[]),i.pure.u64(e.minAmountOut),await ev(i)]});return await ew(i,e,a)};let eO=new y({network:T.MAINNET,fullNodeUrl:B("mainnet")});function eF(){return eO}async function eS(e,t){let{inheritTx:n,sender:i,feeAmount:o,suiInputAmount:a}=e,s=n||new r;s.setGasBudget(o);let{objectCoins:u}=await eC(t,i,(BigInt(a||"0")+o).toString(),em);return s.setGasPayment(u.map(e=>({objectId:e.coinObjectId,version:e.version,digest:e.digest}))),s}(M=Q||(Q={})).getCurveAmountAfterBuy=async function(e){let{suiAmount:t,poolId:n,frontendFee:i}=e;t=ec(t,i);let{memeAmountOut:r}=await eF().quotePump({pool:n,amount:t});return r},M.getSuiAmountAfterSell=async function(e){let{curveAmount:t,poolId:n,frontendFee:i}=e,{quoteAmountOut:r}=await eF().quoteDump({pool:n,amount:t});return ec(r,i)};var ex=ee||(ee={});async function ek(e,t){let{tx:n,coinOut:i}=await eT(e,t);I(i,"Coin out is required");let{memeCoin:r,tx:o}=await eF().pump({pool:e.poolId,quoteCoin:i,minAmountOut:e.minAmountOut,tx:n});return{tx:o,coinOut:r}}async function eR(e,t){I(e.outCoinType===em||e.outCoinType===ef,"Output must be SUI");let{tx:n,coinData:i}=await eb({amount:e.inputAmount,coinType:e.inCoinType,inheritTx:e.extendTx?.tx,account:e.accountAddress,splits:[e.inputAmount]},t),[r]=i,{quoteCoin:o,tx:a}=await eF().dump({pool:e.poolId,memeCoin:r,tx:n,minAmountOut:e.minAmountOut});return await ew(a,e,o)}ex.buildBuyTx=ek,ex.buildSellTx=eR,ex.getBuyTransaction=async function({coinInAmount:e,coinInType:t,coinOutType:n,poolId:i,slippage:r,walletAddress:a,tradeFee:s},u){I(t===ef,"coinInType must be SUI for buy transaction"),I(n!==t,"coinOutType must be different from coinInType"),I(r>=0&&r<1,"slippage must be between 0 (inclusive) and 1 (exclusive)"),I(e>0,"coinInAmount must be greater than 0");let l=BigInt(new o((await Q.getCurveAmountAfterBuy({poolId:i,suiAmount:e,frontendFee:s?s.tradeFeePercent:void 0})).toString()).multipliedBy(1-r).toFixed(0,3)),{tx:c,coinOut:d}=await ek({accountAddress:a,inCoinType:t,outCoinType:n,inputAmount:e.toString(),minAmountOut:l.toString(),poolId:i,frontendFee:s?s.tradeFeePercent:void 0,frontendFeeRecipient:s?s.tradeFeeRecipientAddress:void 0,extendTx:void 0,isSponsored:!1},u);I(d,"Coin out is required"),c.transferObjects([d],c.pure.address(a)),c.setSender(a);let g=await ed(u,c,a,0);return(c=await eS({inheritTx:c,sender:a,feeAmount:g,suiInputAmount:e},u)).build({client:u})},ex.getSellTransaction=async function({coinInAmount:e,coinInType:t,coinOutType:n,poolId:i,slippage:r,walletAddress:a,tradeFee:s},u){I(n===ef,"coinOutType must be SUI for sell transaction"),I(n!==t,"coinOutType must be different from coinInType"),I(r>=0&&r<1,"slippage must be between 0 (inclusive) and 1 (exclusive)"),I(e>0,"coinInAmount must be greater than 0");let l=BigInt(new o((await Q.getSuiAmountAfterSell({poolId:i,curveAmount:e,frontendFee:s?s.tradeFeePercent:void 0})).toString()).multipliedBy(1-r).toFixed(0,3)),{tx:c,coinOut:d}=await eR({accountAddress:a,inCoinType:t,outCoinType:n,inputAmount:e.toString(),minAmountOut:l.toString(),poolId:i,frontendFee:s?s.tradeFeePercent:void 0,frontendFeeRecipient:s?s.tradeFeeRecipientAddress:void 0,extendTx:void 0,isSponsored:!1},u);I(d,"Coin out is required"),c.transferObjects([d],c.pure.address(a)),c.setSender(a);let g=await ed(u,c,a,0);return(c=await eS({inheritTx:c,sender:a,feeAmount:g},u)).build({client:u})};var eE=((N={}).BLAST_FUN="BLAST_FUN",N.MOONBAGS="MOONBAGS",N);(U=et||(et={})).PACKAGE_ID="0xb8df325010942634a4afb3db3901ee215546af43a4ec4af781e7213b0bba7290",U.CONFIG_OBJECT_ID="0x74aecf86067c6913960ba4925333aefd2b1f929cafca7e21fd55a8f244b70499",U.LOCK_CONFIG_OBJECT_ID="0xfb09822d9808980abd04c51321adb850701f5f55535c6206658ef4d910c3e9be",U.BURN_MANAGER_OBJECT_ID="0x1d94aa32518d0cb00f9de6ed60d450c9a2090761f326752ffad06b2e9404f845",U.POOLS_OBJECT_ID="0xf699e7f2276f5c9a75944b37a0c5b5d9ddfd2471bf6242483b03ab2887d198d0",U.GLOBAL_CONFIG_OBJECT_ID="0xdaa46292632c3c4d8f31f23ea0f9b36a28ff3677e9684980e4438403a67a3d8f",U.FEE_DENOMINATOR=BigInt(1e4),(G=(K=en||(en={})).Curves||(K.Curves={})).calculateAddLiquidityCost=function(e,t,n){return e*t/(t-n)-e},G.calculateRemoveLiquidityReturn=function(e,t,n){return t-e*t/(e+n)},G.calculateTokenAmountReceived=function(e,t,n){return t-e*t/(e+n)},(q=K.Moonbags||(K.Moonbags={})).getDynamicVirtualTokenReserves=async function(e,t){let n=await e.getDynamicFieldObject({parentId:t,name:{type:"vector<u8>",value:"virtual_token_reserves"}});if(n.data)return BigInt(n.data.content.fields.value)},q.buyExactInReturnsWithLock=function(e){let{inputAmount:t,amountIn:n,pool:i,config:r,dynamicVirtualTokenReserves:o}=e,a=BigInt(i.virtual_sui_reserves),s=BigInt(i.virtual_token_reserves),u=BigInt(i.remain_token_reserves.fields.balance),l=K.Curves.calculateRemoveLiquidityReturn(a,s,n),c=s-(o||u),d=l,g=n;l>c&&(d=c,g=K.Curves.calculateAddLiquidityCost(a,s,c)+BigInt(1));let p=g*BigInt(r.platform_fee)/et.FEE_DENOMINATOR;return I(t>=g+p,"Input amount is less than used SUI + fee"),{receivedCurve:d,receivedSui:t-g-p}},q.sellReturns=function(e){let{amountIn:t,pool:n,config:i}=e,r=BigInt(n.virtual_sui_reserves),o=BigInt(n.virtual_token_reserves),a=BigInt(n.real_sui_reserves.fields.balance),s=K.Curves.calculateRemoveLiquidityReturn(o,r,t);s>a&&(s=a);let u=s*BigInt(i.platform_fee)/et.FEE_DENOMINATOR,l=s-u;return{receivedCurve:BigInt(0),receivedSui:l}},($=ei||(ei={})).getCurveAmountAfterBuy=async function(e,t){let{suiAmount:n,poolId:i,frontendFee:r}=e,[o,a,s]=await Promise.all([es(t,i),es(t,et.CONFIG_OBJECT_ID),en.Moonbags.getDynamicVirtualTokenReserves(t,i)]);void 0!==r&&(n=ec(n,r));let u=n*et.FEE_DENOMINATOR/(et.FEE_DENOMINATOR+BigInt(a.platform_fee)),{receivedCurve:l}=en.Moonbags.buyExactInReturnsWithLock({inputAmount:n,amountIn:u,pool:o,config:a,dynamicVirtualTokenReserves:s});return l},$.getSuiAmountAfterSell=async function(e,t){let{curveAmount:n,poolId:i,frontendFee:r}=e,[o,a]=await Promise.all([es(t,i),es(t,et.CONFIG_OBJECT_ID)]),{receivedSui:s}=en.Moonbags.sellReturns({amountIn:n,pool:o,config:a});return void 0!==r?ec(s,r):s},$.getUsedSuiForTx=async function(e,t){let{suiAmount:n,frontendFee:i}=e,r=await es(t,et.CONFIG_OBJECT_ID);return void 0!==i&&(n=ec(n,i)),n*et.FEE_DENOMINATOR/(et.FEE_DENOMINATOR+BigInt(r.platform_fee))};var eP=er||(er={});async function ej(e,t){let{tx:n,coinOut:i}=await eT(e,t);I(i,"Coin out is required");let r=await ei.getUsedSuiForTx({suiAmount:BigInt(e.inputAmount),frontendFee:e.frontendFee},t),[o,a]=n.moveCall({target:`${et.PACKAGE_ID}::moonbags::buy_exact_in_returns_with_lock`,typeArguments:[e.outCoinType],arguments:[n.object(et.CONFIG_OBJECT_ID),n.object(et.LOCK_CONFIG_OBJECT_ID),i,n.pure.u64(r),n.pure.u64(e.minAmountOut),n.object(et.BURN_MANAGER_OBJECT_ID),n.object(et.POOLS_OBJECT_ID),n.object(et.GLOBAL_CONFIG_OBJECT_ID),n.object(eA),n.object(eI)]});return Z.transferOrDestroyZeroCoin(n,em,o,e.accountAddress),{tx:n,coinOut:a}}async function eD(e,t){I(e.outCoinType===em||e.outCoinType===ef,"Output must be SUI");let{tx:n,coinData:i}=await eb({amount:e.inputAmount,coinType:e.inCoinType,inheritTx:e.extendTx?.tx,account:e.accountAddress,splits:[e.inputAmount]},t),[r]=i,[o,a]=n.moveCall({target:`${et.PACKAGE_ID}::moonbags::sell_returns`,typeArguments:[e.inCoinType],arguments:[n.object(et.CONFIG_OBJECT_ID),r,n.pure.u64(e.minAmountOut),n.object(eI)]});return Z.transferOrDestroyZeroCoin(n,e.inCoinType,a,e.accountAddress),await ew(n,e,o)}function eM(e){return e}function eN(e){return e}function eU(e){return new Proxy(e,{get(e,t){let n=e[t];return"function"==typeof n?n.bind(e):n}})}eP.buildBuyTx=ej,eP.buildSellTx=eD,eP.getBuyTransaction=async function({coinInAmount:e,coinInType:t,coinOutType:n,poolId:i,slippage:r,walletAddress:a,tradeFee:s},u){I(t===ef,"coinInType must be SUI for buy transaction"),I(n!==t,"coinOutType must be different from coinInType"),I(r>=0&&r<1,"slippage must be between 0 (inclusive) and 1 (exclusive)"),I(e>0,"coinInAmount must be greater than 0");let l=BigInt(new o((await ei.getCurveAmountAfterBuy({poolId:i,suiAmount:e,frontendFee:s?s.tradeFeePercent:void 0},u)).toString()).multipliedBy(1-r).toFixed(0,3)),{tx:c,coinOut:d}=await ej({accountAddress:a,inCoinType:t,outCoinType:n,inputAmount:e.toString(),minAmountOut:l.toString(),poolId:i,frontendFee:s?s.tradeFeePercent:void 0,frontendFeeRecipient:s?s.tradeFeeRecipientAddress:void 0,extendTx:void 0,isSponsored:!1},u);I(d,"Coin out is required"),c.transferObjects([d],c.pure.address(a)),c.setSender(a);let g=await ed(u,c,a,0);return(c=await eS({inheritTx:c,sender:a,feeAmount:g,suiInputAmount:e},u)).build({client:u})},eP.getSellTransaction=async function({coinInAmount:e,coinInType:t,coinOutType:n,poolId:i,slippage:r,walletAddress:a,tradeFee:s},u){I(n===ef,"coinOutType must be SUI for sell transaction"),I(n!==t,"coinOutType must be different from coinInType"),I(r>=0&&r<1,"slippage must be between 0 (inclusive) and 1 (exclusive)"),I(e>0,"coinInAmount must be greater than 0");let l=BigInt(new o((await ei.getSuiAmountAfterSell({poolId:i,curveAmount:e,frontendFee:s?s.tradeFeePercent:void 0},u)).toString()).multipliedBy(1-r).toFixed(0,3)),{tx:c,coinOut:d}=await eD({accountAddress:a,inCoinType:t,outCoinType:n,inputAmount:e.toString(),minAmountOut:l.toString(),poolId:i,frontendFee:s?s.tradeFeePercent:void 0,frontendFeeRecipient:s?s.tradeFeeRecipientAddress:void 0,extendTx:void 0,isSponsored:!1},u);I(d,"Coin out is required"),c.transferObjects([d],c.pure.address(a)),c.setSender(a);let g=await ed(u,c,a,0);return(c=await eS({inheritTx:c,sender:a,feeAmount:g},u)).build({client:u})};class eK{sdk;_astrosAggregator;_aftermathAggregator;_sevenkAggregator;_cetusAggregator;_flowXAggregator;constructor(e){this.sdk=e,this._astrosAggregator=new S({defaultTradeFee:e.options.tradeFee,astrosApiKey:e.options.astrosApiKey},e.suiClient),this._aftermathAggregator=new F({defaultTradeFee:e.options.tradeFee,aftermathApiKey:e.options.aftermathApiKey,aftermathApiEndpoint:e.options.aftermathApiEndpoint},e.suiClient),this._sevenkAggregator=new O({defaultTradeFee:e.options.tradeFee,sevenKApiKey:e.options.sevenKApiKey},e.suiClient),this._cetusAggregator=new x({defaultTradeFee:e.options.tradeFee,cetusApiKey:e.options.cetusApiKey,cetusApiEndpoint:e.options.cetusApiEndpoint,cetusPartnerId:e.options.cetusPartnerId},e.suiClient),this._flowXAggregator=new ea({defaultTradeFee:e.options.tradeFee,flowxApiKey:e.options.flowxApiKey},e.suiClient)}get astrosAggregator(){return this._astrosAggregator}get aftermathAggregator(){return this._aftermathAggregator}get sevenkAggregator(){return this._sevenkAggregator}get cetusAggregator(){return this._cetusAggregator}get flowXAggregator(){return this._flowXAggregator}async getTradeRoute(e,t){let n;switch(e){case eo.ASTROS:{let e,i=await this._astrosAggregator.getTradeRoute(t);if(!i)return null;let r=S.toCommonTradeRoutes(i,t.coinInType,t.coinOutType);if(!r)return null;e=t.tradeFee?t.tradeFee.tradeFeePercent:this.sdk.options.tradeFee.tradeFeePercent,r.amountOut=BigInt(new o(i.amount_out).multipliedBy(1-e).toFixed(0,3)),n={route:r,aggregatorRoute:i};break}case eo.AFTERMATH:{let e=await this._aftermathAggregator.getTradeRoute(t);if(!e)return null;let i=F.toCommonTradeRoutes(e);if(!i)return null;n={route:i,aggregatorRoute:e};break}case eo.SEVENK:{let e=await this._sevenkAggregator.getTradeRoute(t);if(!e)return null;let i=O.toCommonTradeRoutes(e);if(!i)return null;n={route:i,aggregatorRoute:e};break}case eo.CETUS:{let e=await this._cetusAggregator.getTradeRoute(t);if(!e)return null;let i=x.toCommonTradeRoutes(e,t.coinInType,t.coinOutType);if(!i)return null;n={route:i,aggregatorRoute:e};break}case eo.FLOWX:{let e=await this._flowXAggregator.getTradeRoute(t);if(!e)return null;let i=ea.toCommonTradeRoutes(e);if(!i)return null;n={route:i,aggregatorRoute:e}}}return n}async getTransactionByRoute(e,t){switch(e){case eo.ASTROS:return this._astrosAggregator.getTransaction({walletAddress:t.walletAddress,completeRoute:t.completeRoute,slippage:t.slippage,tradeFee:t.tradeFee});case eo.AFTERMATH:return this._aftermathAggregator.getTransaction({walletAddress:t.walletAddress,completeRoute:t.completeRoute,slippage:t.slippage});case eo.SEVENK:return this._sevenkAggregator.getTransaction({walletAddress:t.walletAddress,completeRoute:t.completeRoute,slippage:t.slippage,tradeFee:t.tradeFee});case eo.CETUS:return this._cetusAggregator.getTransaction({walletAddress:t.walletAddress,completeRoute:t.completeRoute,slippage:t.slippage,tradeFee:t.tradeFee});case eo.FLOWX:return this._flowXAggregator.getTransaction({walletAddress:t.walletAddress,completeRoute:t.completeRoute,slippage:t.slippage,tradeFee:t.tradeFee})}}async getTradeTransaction(e,t){let n=await this.getTradeRoute(e,{coinInAmount:t.coinInAmount,coinInType:t.coinInType,coinOutType:t.coinOutType,tradeFee:t.tradeFee});if(!n)return null;let i=await this.getTransactionByRoute(e,{walletAddress:t.walletAddress,completeRoute:n.aggregatorRoute,slippage:t.slippage,tradeFee:t.tradeFee});return{route:n.route,aggregatorRoute:n.aggregatorRoute,transaction:i}}async getTradeTransactionWithBestRate(e){let t=Object.keys(eo),n=await Promise.all(t.map(async t=>{try{return await this.getTradeRoute(t,e)}catch{return null}})),i=null,r=null;for(let e=0;e<n.length;e++){let o=n[e],a=t[e];if(o&&(!i||o.route.amountOut>i.route.amountOut)){i=o,r=a;continue}}if(!i||!r)return null;let o=await this.getTransactionByRoute(r,{walletAddress:e.walletAddress,completeRoute:i.aggregatorRoute,slippage:e.slippage,tradeFee:e.tradeFee});return{route:i.route,aggregatorRoute:i.aggregatorRoute,transaction:o}}async getAmountOut(e,t){let n=await this.getTradeRoute(e,t);return n?n.route.amountOut:null}async getBestAmountOut(e){let t=Object.keys(eo),n=null,i=null;for(let r of t){let t=await this.getAmountOut(r,e);null!==t&&(null===n||t>n)&&(n=t,i=r)}return null===n||null===i?null:{amountOut:n,aggregator:i}}}let eG="0x25fa0eb553dd69fa6a8028f73a38f1df7f289fa88a58ed3d7dc5a5360155bb19",eq="0x8b1a8ac6e34688cd8f8f8e5fefa9d5fb9e1ff74d2f132f8e208ae5ac9cc530bb",e$="0x13d101f44a0710a5475bec5f492a87b80e03d92d1cf540f26096f65850b23d26";class eL{sdk;constructor(e){this.sdk=e}async getConfig(){let e=await this.sdk.suiClient.getObject({id:eq,options:{showContent:!0}});I(e.data?.content,"Config object not found or has no content"),I(e.data?.content.dataType==="moveObject","Config object is not a Move object");let t=e.data.content.fields,n=t.id.id,i=t.fee_receiver,r=t.tiers.fields.contents,o={};for(let e of r){let t=e.fields.key,n=e.fields.value.fields.duration,i=e.fields.value.fields.amount,r=e.fields.value.fields.point,a=e.fields.value.fields.original_amount;o[t]={duration:BigInt(n),amount:BigInt(i),point:BigInt(r),originalAmount:BigInt(a)}}return{id:n,receiverAddress:i,tiers:o}}async buildPayBoostingTx({walletAddress:e,tierId:t,boostingCoinType:n,currentTx:i}){let o=await this.getConfig();I(t in o.tiers,"Invalid tier ID");let a=o.tiers[t].amount,s=i||new r,u=s.splitCoins(s.gas,[s.pure.u64(a)]);s.moveCall({target:`${eG}::boosting::pay`,typeArguments:[b(n)],arguments:[s.object(eq),s.pure.u64(t),u]}),s.setSender(e);let l=await ed(this.sdk.suiClient,s,e,0);return eS({inheritTx:s,sender:e,feeAmount:l},this.sdk.suiClient)}async buildAddTierTx({adminAddress:e,tierId:t,duration:n,point:i,originalAmount:o,amount:a,currentTx:s}){let u=s||new r;u.moveCall({target:`${eG}::config::add_tier`,typeArguments:[],arguments:[u.object(eq),u.object(e$),u.pure.u64(t),u.pure.u64(i),u.pure.u64(n),u.pure.u64(o),u.pure.u64(a)]}),u.setSender(e);let l=await ed(this.sdk.suiClient,u,e,0);return eS({inheritTx:u,sender:e,feeAmount:l},this.sdk.suiClient)}async buildUpdateTierTx({adminAddress:e,tierId:t,duration:n,amount:i,originalAmount:o,point:a,currentTx:s}){let u=s||new r;u.moveCall({target:`${eG}::config::update_tier`,typeArguments:[],arguments:[u.object(eq),u.object(e$),u.pure.u64(t),u.pure.u64(n),u.pure.u64(i),u.pure.u64(a),u.pure.u64(o)]}),u.setSender(e);let l=await ed(this.sdk.suiClient,u,e,0);return eS({inheritTx:u,sender:e,feeAmount:l},this.sdk.suiClient)}async buildRemoveTierTx({adminAddress:e,tierId:t,currentTx:n}){let i=n||new r;i.moveCall({target:`${eG}::config::remove_tier`,typeArguments:[],arguments:[i.object(eq),i.object(e$),i.pure.u64(t)]}),i.setSender(e);let o=await ed(this.sdk.suiClient,i,e,0);return eS({inheritTx:i,sender:e,feeAmount:o},this.sdk.suiClient)}async buildUpdateFeeReceiver({adminAddress:e,newReceiverAddress:t,currentTx:n}){let i=n||new r;i.moveCall({target:`${eG}::config::update_fee_receiver`,typeArguments:[],arguments:[i.object(eq),i.object(e$),i.pure.address(t)]}),i.setSender(e);let o=await ed(this.sdk.suiClient,i,e,0);return eS({inheritTx:i,sender:e,feeAmount:o},this.sdk.suiClient)}async buildPayBoostingWithAdminTx({walletAddress:e,tierId:t,customAmount:n,boostingCoinType:i,currentTx:o}){let a=o||new r,s=a.splitCoins(a.gas,[a.pure.u64(n)]);a.moveCall({target:`${eG}::boosting::pay_with_admin`,typeArguments:[b(i)],arguments:[a.object(e$),a.object(eq),a.pure.u64(t),a.pure.u64(n),s]}),a.setSender(e);let u=await ed(this.sdk.suiClient,a,e,0);return eS({inheritTx:a,sender:e,feeAmount:u},this.sdk.suiClient)}}class ez{sdk;constructor(e){this.sdk=e}async getTradeTransaction(e,t){let n,{coinInType:i,coinOutType:r}=t;I(i!==r,"coinInType and coinOutType must be different"),I(i===ef||r===ef,"One of coinInType or coinOutType must be SUI");let o=i===ef;switch(e){case eE.MOONBAGS:n=o?await er.getBuyTransaction(t,this.sdk.suiClient):await er.getSellTransaction(t,this.sdk.suiClient);break;case eE.BLAST_FUN:n=o?await ee.getBuyTransaction(t,this.sdk.suiClient):await ee.getSellTransaction(t,this.sdk.suiClient);break;default:throw Error(`Unsupported bonding curve platform: ${e}`)}return n}}let eW="0xaedb9a4330883c91769c99e7d2a7ea573b686504daf11d13353141260736a902",eJ="0xe88e0d6792c2bef3f54d594ef26d8df85c6227f5370c200b860d8264f5d78744",eV="0x4d15fc6c181efbe82020697705d37b29154edecb4c682b502bd8f0136d4dd7bf",eX="0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC";class eY{sdk;constructor(e){this.sdk=e}async getConfig(){let e=await this.sdk.suiClient.getObject({id:eJ,options:{showContent:!0}});I(e.data,"Config object not found"),I(e.data.content,"Config object has no content"),I(e.data?.content.dataType==="moveObject","Config object is not a Move object");let t=e.data.content.fields,n=t.id.id,i=t.fee_receiver,r=t.paused,o=t.accepted_payment_type,a=t.plans.fields.contents,s={};for(let e of a){let t=e.fields.key,n=e.fields.value.fields.id,i=e.fields.value.fields.price,r=e.fields.value.fields.month_interval,o=e.fields.value.fields.ptype;s[t]={id:BigInt(n),price:BigInt(i),monthInterval:r,planType:o}}return{id:n,plans:s,feeReceiverWallet:i,paused:r,acceptedPaymentType:o}}async buildSubscribeCyclePlanTx({walletAddress:e,planId:t,reference:n,paymentCoinType:i=eX,currentTx:r}){let o=await this.getConfig();I(!o.paused,"Contract is paused"),I(t in o.plans,"Invalid plan ID");let a=o.plans[t].price,{tx:s,coinData:u}=await eb({account:e,amount:a.toString(),splits:[a.toString()],coinType:i,inheritTx:r},this.sdk.suiClient);s.moveCall({target:`${eW}::subscription::subscribe_cycle_plan`,typeArguments:[i],arguments:[s.object(eJ),s.pure.u64(t),s.pure.string(n),u]}),s.setSender(e);let l=await ed(this.sdk.suiClient,s,e,0);return eS({inheritTx:s,sender:e,feeAmount:l},this.sdk.suiClient)}async buildUpgradeCyclePlanTx({walletAddress:e,currentPlanId:t,targetPlanId:n,reference:i,isNextCycle:r,paymentCoinType:o=eX,currentTx:a}){let s=await this.getConfig();I(!s.paused,"Contract is paused"),I(t in s.plans,"Invalid current plan ID"),I(n in s.plans,"Invalid target plan ID"),I(t!==n,"Current and target plan IDs must be different");let u=s.plans[n].price,{tx:l,coinData:c}=await eb({account:e,amount:u.toString(),splits:[u.toString()],coinType:o,inheritTx:a},this.sdk.suiClient);l.moveCall({target:`${eW}::subscription::upgrade_cycle_plan`,typeArguments:[o],arguments:[l.object(eJ),l.pure.u64(t),l.pure.u64(n),l.pure.string(i),l.pure.bool(r),c]}),l.setSender(e);let d=await ed(this.sdk.suiClient,l,e,0);return eS({inheritTx:l,sender:e,feeAmount:d},this.sdk.suiClient)}async buildBuyMoreCUPlanTx({walletAddress:e,planId:t,reference:n,paidAmount:i,paymentCoinType:r=eX,currentTx:o}){let a=await this.getConfig();I(!a.paused,"Contract is paused"),I(t in a.plans,"Invalid plan ID");let{tx:s,coinData:u}=await eb({account:e,amount:i.toString(),splits:[i.toString()],coinType:r,inheritTx:o},this.sdk.suiClient);s.moveCall({target:`${eW}::subscription::buy_more_cu`,typeArguments:[r],arguments:[s.object(eJ),s.pure.u64(t),s.pure.string(n),s.pure.u64(i),u]}),s.setSender(e);let l=await ed(this.sdk.suiClient,s,e,0);return eS({inheritTx:s,sender:e,feeAmount:l},this.sdk.suiClient)}async buildSubscribePlanWithAdminTx({walletAddress:e,planId:t,reference:n,customAmount:i,paymentCoinType:r=eX,currentTx:o}){I(!(await this.getConfig()).paused,"Contract is paused");let{tx:a,coinData:s}=await eb({account:e,amount:i.toString(),splits:[i.toString()],coinType:r,inheritTx:o},this.sdk.suiClient);a.moveCall({target:`${eW}::subscription::subscribe_plan_with_admin`,typeArguments:[r],arguments:[a.object(eV),a.object(eJ),a.pure.u64(t),a.pure.string(n),a.pure.u64(i),s]}),a.setSender(e);let u=await ed(this.sdk.suiClient,a,e,0);return eS({inheritTx:a,sender:e,feeAmount:u},this.sdk.suiClient)}async buildAddPlanTx({adminAddress:e,planId:t,planType:n,monthInterval:i,price:o,currentTx:a}){let s=a||new r;s.moveCall({target:`${eW}::config::add_plan`,typeArguments:[],arguments:[s.object(eJ),s.object(eV),s.pure.u64(t),s.pure.u8(n),s.pure.u8(i),s.pure.u64(o)]}),s.setSender(e);let u=await ed(this.sdk.suiClient,s,e,0);return eS({inheritTx:s,sender:e,feeAmount:u},this.sdk.suiClient)}async buildUpdatePlanTx({adminAddress:e,planId:t,planType:n,monthInterval:i,price:o,currentTx:a}){let s=a||new r;s.moveCall({target:`${eW}::config::update_plan`,typeArguments:[],arguments:[s.object(eJ),s.object(eV),s.pure.u64(BigInt(t)),s.pure.u8(n),s.pure.u8(i),s.pure.u64(o)]}),s.setSender(e);let u=await ed(this.sdk.suiClient,s,e,0);return eS({inheritTx:s,sender:e,feeAmount:u},this.sdk.suiClient)}async buildRemovePlanTx({adminAddress:e,planId:t,currentTx:n}){let i=n||new r;i.moveCall({target:`${eW}::config::remove_plan`,typeArguments:[],arguments:[i.object(eJ),i.object(eV),i.pure.u64(BigInt(t))]}),i.setSender(e);let o=await ed(this.sdk.suiClient,i,e,0);return eS({inheritTx:i,sender:e,feeAmount:o},this.sdk.suiClient)}async buildUpdateFeeReceiverWalletTx({adminAddress:e,newFeeReceiverWallet:t,currentTx:n}){let i=n||new r;i.moveCall({target:`${eW}::config::update_fee_receiver`,typeArguments:[],arguments:[i.object(eJ),i.object(eV),i.pure.address(t)]}),i.setSender(e);let o=await ed(this.sdk.suiClient,i,e,0);return eS({inheritTx:i,sender:e,feeAmount:o},this.sdk.suiClient)}async buildSetPausedTx({adminAddress:e,paused:t,currentTx:n}){let i=n||new r;i.moveCall({target:`${eW}::config::set_paused`,typeArguments:[],arguments:[i.object(eJ),i.object(eV),i.pure.bool(t)]}),i.setSender(e);let o=await ed(this.sdk.suiClient,i,e,0);return eS({inheritTx:i,sender:e,feeAmount:o},this.sdk.suiClient)}async buildSetAcceptedPaymentTypeTx({adminAddress:e,paymentCoinType:t,currentTx:n}){let i=n||new r;i.moveCall({target:`${eW}::config::set_accepted_payment_type`,typeArguments:[t],arguments:[i.object(eJ),i.object(eV)]}),i.setSender(e);let o=await ed(this.sdk.suiClient,i,e,0);return eS({inheritTx:i,sender:e,feeAmount:o},this.sdk.suiClient)}}let eZ={tradeFeePercent:.01,tradeFeeRecipientAddress:"0xdaf1c8ed29d89cd8f217f609bad0a668fa6f158c12000bfa5f93e670c99e24ff"};class eH{options;_suiClient;aggregatorModule;curveModule;boostingModule;subscriptionModule;constructor(e){this.options=e,this._suiClient=new w({url:B("mainnet")}),this.aggregatorModule=new eK(this),this.curveModule=new ez(this),this.boostingModule=new eL(this),this.subscriptionModule=new eY(this)}get suiClient(){return this._suiClient}}class eQ{suiClient;constructor(e){this.suiClient=e}validatePrivateKey(e,t){I(e?.trim(),"Private key is required");let n=v.fromSecretKey(e),i=n.getPublicKey().toSuiAddress();if(i!==t)throw Error(`Private key mismatch. Expected: ${t}, Got: ${i}`);return n}async createDraft(e,t,n){I(e?.trim(),"Sender address is required"),I(t?.trim(),"Recipient address is required"),I(e!==t,"Sender and recipient cannot be the same"),I(n>0n,"Transfer amount must be at least 1 MIST");try{let i=new r,[o]=i.splitCoins(i.gas,[n]);i.transferObjects([o],t),i.setSender(e);let a=await this.suiClient.getReferenceGasPrice();i.setGasPrice(a);let s=await ed(this.suiClient,i,e,.1);i=await eS({inheritTx:i,sender:e,feeAmount:s,suiInputAmount:n},this.suiClient);let u=await i.build({client:this.suiClient}),l=Buffer.from(u).toString("base64"),c=await i.getDigest();return{sender:e,recipient:t,amountMIST:n,txDraftBase64:l,txDigest:c}}catch(e){throw Error(`Failed to create draft transaction: ${e instanceof Error?e.message:"Unknown error"}`)}}async execute(e,t){try{I(e,"Draft transaction is required"),I(e.txDraftBase64?.trim(),"Transaction data is required");let n=this.validatePrivateKey(t,e.sender),i=C(e.txDraftBase64),{signature:r}=await n.signTransaction(i),o=await this.suiClient.executeTransactionBlock({transactionBlock:i,signature:r});return{success:!0,txDigest:o.digest,effects:o.effects}}catch(e){return{success:!1,error:e instanceof Error?e.message:"Unknown error occurred"}}}async getTransactionStatus(e){I(e?.trim(),"Transaction digest is required");try{let t=await this.suiClient.getTransactionBlock({digest:e,options:{showEffects:!0}});if(!t?.effects?.status)return"pending";return"success"===t.effects.status.status?"success":"failure"}catch(e){if(e instanceof Error&&(e.message.includes("not found")||e.message.includes("Could not find")))return"pending";return"failure"}}}var e0=1e4;export{e$ as ADMIN_CAP_ID,F as AftermathAggregator,eK as AggregatorModule,S as AstrosAggregator,ey as BLUEFIN_PACKAGE_ID,eG as BOOSTING_PACKAGE_ID,W as BlastFunConstants,Y as BlastFunCustomCalculation,H as BlastFunCustomTransaction,X as BlastFunPackage,Q as BlastFunSDKCalculation,ee as BlastFunSDKTransaction,Z as BluefinTx,eL as BoostingModule,V as Bps,eI as CLOCK_OBJECT_ID,eq as CONFIG_ID,x as CetusAggregator,ez as CurveModule,eZ as DEFAULT_TRADE_FEE,eQ as DraftTransferTx,ea as FlowXAggregator,J as MathUtils,ei as MoonbagsCalculation,et as MoonbagsConstants,en as MoonbagsPackage,er as MoonbagsTransaction,e_ as NATIVE_USDC_TOKEN_TYPE,eH as NoodlesSdk,eX as PAYMENT_COIN_TYPE,eV as SUBSCRIPTION_ADMIN_CAP_ID,eJ as SUBSCRIPTION_CONFIG_ID,eW as SUBSCRIPTION_PACKAGE_ID,em as SUI_FULL_TYPE,eA as SUI_METADATA_OBJECT_ID,ef as SUI_TYPE,O as SevenKAggregator,eY as SubscriptionModule,eo as SupportedAggregator,eE as SupportedBondingCurve,z as TradeFeeOptions,eh as USDC_TOKEN_TYPE,eM as adaptSuiClient,eN as adaptTransaction,eS as addGasFee,eU as createCompatibleSuiClient,ec as getAmountAfterFee,eC as getCoinObjectIdsByAmount,eF as getMemezPumpSDK,eu as getMoveObject,es as getMoveObjectContent,ed as getNeededGasFee,eb as getSplitCoinForTx,el as getSplitCoinsAfterFee,eT as splitSuiCoinAfterFeeFromBuyTx,ew as splitSuiCoinAfterFeeFromSellTx,e0 as BASE_BPS};
1
+ import{BluefinXTx as e,Config as t,buildTx as n,getQuote as i}from"@7kprotocol/sdk-ts";import{Transaction as r}from"@mysten/sui/transactions";import o from"bignumber.js";import{Aftermath as a,Helpers as s}from"aftermath-ts-sdk";import{buildSwapPTBFromQuote as u,getCoins as l,getQuote as c}from"@naviprotocol/astros-aggregator-sdk";import{AggregatorClient as d,Env as g}from"@cetusprotocol/aggregator-sdk";import p from"bn.js";import{AggregatorQuoter as f,Coin as m,Commission as h,CommissionType as _,TradeBuilder as A}from"@flowx-finance/sdk";import C from"@minswap/tiny-invariant";import{fromBase64 as I,normalizeStructTag as b}from"@mysten/sui/utils";import{MemezPumpSDK as y}from"@interest-protocol/memez-fun-sdk";import{Network as T}from"@interest-protocol/sui-core-sdk";import{SuiClient as w,getFullnodeUrl as B}from"@mysten/sui/client";import{Ed25519Keypair as v}from"@mysten/sui/keypairs/ed25519";class O{_config;_suiClient;constructor(e,t){this._config=e,this._suiClient=t}async getTradeRoute({coinInAmount:e,coinInType:n,coinOutType:r,tradeFee:o}){try{this._config.sevenKApiKey&&t.setApiKey(this._config.sevenKApiKey);let a=o?o.tradeFeePercent:this._config.defaultTradeFee.tradeFeePercent;return await i({tokenIn:n,tokenOut:r,amountIn:e.toString(),commissionBps:1e4*a})}catch(e){return null}}async getTransaction({walletAddress:t,completeRoute:i,slippage:o,tradeFee:a}){let s,u;a?(s=a.tradeFeePercent,u=a.tradeFeeRecipientAddress):(s=this._config.defaultTradeFee.tradeFeePercent,u=this._config.defaultTradeFee.tradeFeeRecipientAddress);let l=await n({quoteResponse:i,slippage:o,accountAddress:t,commission:{partner:u,commissionBps:1e4*s}});return l.tx instanceof e?r.from(l.tx.txBytes).build({client:this._suiClient}):(l.tx.setSender(t),l.tx.build({client:this._suiClient}))}}(O||(O={})).toCommonTradeRoutes=function(e){let t=[];if(!e.routes||0===e.routes.length)return null;for(let n of e.routes){let e=[],i={};for(let t of n.hops){for(let e of t.pool.allTokens)i[e.address]=e.decimal;let n=i[t.tokenIn]??0,r=i[t.tokenOut]??0,a=BigInt(new o(t.tokenInAmount).multipliedBy(10**n).toFixed(0,3)),s=BigInt(new o(t.tokenOutAmount).multipliedBy(10**r).toFixed(0,3));e.push({poolAddress:t.poolId,coinIn:t.tokenIn,coinOut:t.tokenOut,amountIn:a,amountOut:s})}if(0===e.length)continue;let r=i[n.tokenIn]??0,a=i[n.tokenOut]??0,s=BigInt(new o(n.tokenInAmount).multipliedBy(10**r).toFixed(0,3)),u=BigInt(new o(n.tokenOutAmount).multipliedBy(10**a).toFixed(0,3));t.push({paths:e,coinIn:n.tokenIn,coinOut:n.tokenOut,amountIn:s,amountOut:u})}return 0===t.length?null:{coinIn:e.tokenIn,coinOut:e.tokenOut,amountIn:BigInt(e.swapAmountWithDecimal),amountOut:BigInt(e.returnAmountWithDecimal),routes:t}};class F{_config;_aftermathClient;_suiClient;constructor(e,t){this._config=e,this._suiClient=t}async aftermathClient(){if(this._aftermathClient)return this._aftermathClient;if(this._config.aftermathApiEndpoint?this._aftermathClient=new a(this._config.aftermathApiEndpoint):this._aftermathClient=new a("MAINNET"),await this._aftermathClient.init(),this._config.aftermathApiKey){let e=s.keypairFromPrivateKey(this._config.aftermathApiKey);await this._aftermathClient.Auth().init({async signMessageCallback({message:t}){let{signature:n}=await e.signPersonalMessage(t);return{signature:n}},walletAddress:e.toSuiAddress()})}return this._aftermathClient}async getTradeRoute({coinInAmount:e,coinInType:t,coinOutType:n,tradeFee:i}){try{let r;r=i?{recipient:i.tradeFeeRecipientAddress,feePercentage:i.tradeFeePercent}:{recipient:this._config.defaultTradeFee.tradeFeeRecipientAddress,feePercentage:this._config.defaultTradeFee.tradeFeePercent};let o=await this.aftermathClient();return await o.Router().getCompleteTradeRouteGivenAmountIn({coinInAmount:e,coinInType:t,coinOutType:n,externalFee:r})}catch(e){return null}}async getTransaction({completeRoute:e,walletAddress:t,slippage:n}){let i=await this.aftermathClient(),r=await i.Router().getTransactionForCompleteTradeRoute({completeRoute:e,walletAddress:t,slippage:n,isSponsoredTx:!1});return r.setSender(t),r.build({client:this._suiClient})}}(F||(F={})).toCommonTradeRoutes=function(e){if(0===e.routes.length)return null;let t=[];for(let n of e.routes){let e=[];for(let t of n.paths)e.push({poolAddress:t.poolId,coinIn:t.coinIn.type,coinOut:t.coinOut.type,amountIn:BigInt(t.coinIn.amount),amountOut:BigInt(t.coinOut.amount)});0!==e.length&&t.push({paths:e,coinIn:n.coinIn.type,coinOut:n.coinOut.type,amountIn:n.coinIn.amount,amountOut:n.coinOut.amount})}return 0===t.length?null:{coinIn:e.coinIn.type,coinOut:e.coinOut.type,amountIn:e.coinIn.amount,amountOut:e.coinOut.amount,routes:t}};class S{_config;_suiClient;constructor(e,t){this._config=e,this._suiClient=t}async getTradeRoute({coinInAmount:e,coinInType:t,coinOutType:n,tradeFee:i}){try{let r;return r=i?{fee:i.tradeFeePercent,receiverAddress:i.tradeFeeRecipientAddress}:{fee:this._config.defaultTradeFee.tradeFeePercent,receiverAddress:this._config.defaultTradeFee.tradeFeeRecipientAddress},await c(t,n,e,this._config.astrosApiKey,{byAmountIn:!0,serviceFee:r})}catch(e){return null}}returnMergedCoins(e,t,n){if(t.length<2)return e.object(t[0].coinObjectId);let i=0,r=[];t.sort((e,t)=>Number(t.balance)-Number(e.balance)).slice(1).forEach(e=>{i>=n||(i+=Number(e.balance),r.push(e.coinObjectId))});let o=t[0].coinObjectId;return e.mergeCoins(o,r),e.object(o)}async getTransaction({completeRoute:e,walletAddress:t,slippage:n,tradeFee:i}){var a;let s,c;s=i?{fee:i.tradeFeePercent,receiverAddress:i.tradeFeeRecipientAddress}:{fee:this._config.defaultTradeFee.tradeFeePercent,receiverAddress:this._config.defaultTradeFee.tradeFeeRecipientAddress};let d=new o(e.amount_out).multipliedBy(1-n-s.fee).toNumber(),g=new r;if("0x2::sui::SUI"===(a=e.from)||"0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI"===a)c=g.splitCoins(g.gas,[g.pure.u64(e.amount_in)]);else{let n=await l(this._suiClient,t,e.from),i=this.returnMergedCoins(g,n.data,Number.parseFloat(e.amount_in));c=g.splitCoins(i,[g.pure.u64(e.amount_in)])}let p=await u(t,g,d,c,e,void 0,!1,this._config.astrosApiKey,{serviceFee:s});return g.transferObjects([p],t),g.setSender(t),g.build({client:this._suiClient})}}(S||(S={})).toCommonTradeRoutes=function(e,t,n){if(0===e.routes.length)return null;let i=[];for(let t of e.routes){let e=[];for(let n of t.path)e.push({poolAddress:n.id,coinIn:n.from,coinOut:n.target,amountIn:BigInt(n.amount_in),amountOut:BigInt(n.amount_out)});0!==e.length&&i.push({amountIn:BigInt(t.amount_in),amountOut:BigInt(t.amount_out),coinIn:e[0].coinIn,coinOut:e[e.length-1].coinOut,paths:e})}return 0===i.length?null:{coinIn:t,coinOut:n,amountIn:BigInt(e.amount_in),amountOut:BigInt(e.amount_out),routes:i}},(z||(z={})).equals=function(e,t){return e.tradeFeePercent===t.tradeFeePercent&&e.tradeFeeRecipientAddress===t.tradeFeeRecipientAddress};class x{_config;_suiClient;_cetusClient;constructor(e,t){this._config=e,this._suiClient=t}cetusClient(e,t){return t&&!z.equals(t,this._config.defaultTradeFee)?new d({client:this._suiClient,overlayFeeReceiver:t.tradeFeeRecipientAddress,overlayFeeRate:t.tradeFeePercent,env:g.Mainnet,signer:e,...this._config.cetusApiKey&&this._config.cetusApiEndpoint?{apiKey:this._config.cetusApiKey,endpoint:this._config.cetusApiEndpoint}:{},partner:this._config.cetusPartnerId}):(this._cetusClient||(this._cetusClient=new d({client:this._suiClient,overlayFeeReceiver:this._config.defaultTradeFee.tradeFeeRecipientAddress,overlayFeeRate:this._config.defaultTradeFee.tradeFeePercent,env:g.Mainnet,signer:e,...this._config.cetusApiKey&&this._config.cetusApiEndpoint?{apiKey:this._config.cetusApiKey,endpoint:this._config.cetusApiEndpoint}:{},partner:this._config.cetusPartnerId})),this._cetusClient)}async getTradeRoute({coinInAmount:e,coinInType:t,coinOutType:n,tradeFee:i}){try{let r=this.cetusClient(void 0,i);return await r.findRouters({from:t,target:n,amount:new p(e.toString()),byAmountIn:!0})}catch(e){return null}}async getTransaction({completeRoute:e,walletAddress:t,slippage:n,tradeFee:i}){let o=new r,a=this.cetusClient(t,i);return await a.fastRouterSwap({router:e,txb:o,slippage:n}),await a.devInspectTransactionBlock(o),o.setSender(t),o.build({client:this._suiClient})}}(x||(x={})).toCommonTradeRoutes=function(e,t,n){if(0===e.paths.length)return null;let i=[],r=[],o=[];for(let t=0;t<e.paths.length;t++){let n=e.paths[t],i={poolAddress:n.id,amountIn:BigInt(n.amountIn),amountOut:BigInt(n.amountOut),coinIn:n.from,coinOut:n.target};if(o.push(i),t===e.paths.length-1)r.push([...o]);else{let i=e.paths[t+1];n.target!==i.from&&(r.push([...o]),o=[])}}for(let e of r)0!==e.length&&i.push({amountIn:e[0].amountIn,amountOut:e[e.length-1].amountOut,coinIn:e[0].coinIn,coinOut:e[e.length-1].coinOut,paths:e});return 0===i.length?null:{coinIn:t,coinOut:n,amountIn:BigInt(e.amountIn.toString(10)),amountOut:BigInt(e.amountOut.toString(10)),routes:i}};var k,R,E,P,j,D,M,N,U,K,G,q,$,L,z,W,J,V,X,Y,Z,H,Q,ee,et,en,ei,er,eo=((L={}).ASTROS="ASTROS",L.AFTERMATH="AFTERMATH",L.SEVENK="7K",L.CETUS="CETUS",L.FLOWX="FLOWX",L);class ea{_config;_suiClient;constructor(e,t){this._config=e,this._suiClient=t}getCommission(e,t){let n,i;return t?(n=t.tradeFeePercent,i=t.tradeFeeRecipientAddress):(n=this._config.defaultTradeFee.tradeFeePercent,i=this._config.defaultTradeFee.tradeFeeRecipientAddress),new h(i,new m(e),_.PERCENTAGE,1e6*n,!0)}async getTradeRoute({coinInAmount:e,coinInType:t,coinOutType:n,tradeFee:i}){let r=new f("mainnet",this._config.flowxApiKey);try{return await r.getRoutes({tokenIn:t,tokenOut:n,amountIn:e.toString(),commission:this.getCommission(t,i)})}catch(e){return null}}async getTransaction({walletAddress:e,completeRoute:t,slippage:n,tradeFee:i}){return new A("mainnet",t.routes).sender(e).slippage(1e6*n).commission(this.getCommission(t.coinIn.coinType,i)).build().buildTransaction({client:this._suiClient}).then(t=>(t.setSender(e),t.build({client:this._suiClient})))}}async function es(e,t){return(await eu(e,t)).fields}async function eu(e,t){let n=await e.getObject({id:t,options:{showContent:!0}}),i=n.data?.content;return C(i,"Pool object not found or has no content"),C("moveObject"===i.dataType,"Object is not a Move object"),i}function el(e,t){let n=BigInt(e),i=BigInt(1e4*Number(t));if(i===BigInt(0))return[n.toString()];let r=n*i/BigInt(1e4);return[(n-r).toString(),r.toString()]}function ec(e,t){if(!t||0>=Number(t))return BigInt(e);let n=BigInt(e),i=BigInt(1e4*Number(t));if(i===BigInt(0))return n;let r=n*i/BigInt(1e4);return n-r}async function ed(e,t,n,i){let{effects:{gasUsed:r,status:o}}=await e.devInspectTransactionBlock({sender:n,transactionBlock:t});if("success"!==o.status)throw Error(`Transaction failed during dev inspect: ${o.error??""}`);let a=BigInt(r.computationCost)+BigInt(r.storageCost)-BigInt(r.storageRebate),s=BigInt(1e4*Number(i));return a*(BigInt(1e4)+s)/BigInt(1e4)}(ea||(ea={})).toCommonTradeRoutes=function(e){if(0===e.routes.length)return null;let t=[];for(let n of e.routes){let e=[];for(let t of n.paths)e.push({amountIn:BigInt(t.amountIn.toString()),amountOut:BigInt(t.amountOut.toString()),coinIn:t.input.coinType,coinOut:t.output.coinType,poolAddress:t.pool.id});0!==e.length&&t.push({amountIn:BigInt(n.amountIn.toString()),amountOut:BigInt(n.amountOut.toString()),coinIn:n.input.coinType,coinOut:n.output.coinType,paths:e})}return 0===t.length?null:{coinIn:e.coinIn.coinType,coinOut:e.coinOut.coinType,amountIn:BigInt(e.amountIn.toString()),amountOut:BigInt(e.amountOut.toString()),routes:t}},(k=W||(W={})).PACKAGE_ID_V4="0x7e6aa6e179466ab2814425a780b122575296d011119fa69d27f289f5a28814bd",k.MEMEZ_AV_OBJECT_ID="0x2319e3e76dfad73d8f4684bdbf42be4f32d8ce4521dd61becc8261dc918d82c0",((R=J||(J={})).U64||(R.U64={})).mulDivUp=function(e,t,n){let i=BigInt(0);return e*t%n>BigInt(0)&&(i=BigInt(1)),e*t/n+i};var eg=V||(V={});function ep(e){return C(BigInt(e)<=BigInt(1e4),"Bps overflow"),BigInt(e)}eg.calcUp=function(e,t){let n,i=BigInt(e.pos0),r=BigInt(1e4);return n=i*t%r!==BigInt(0)?BigInt(1):BigInt(0),i*t/r+n},eg.sub=function(e,t){return C(BigInt(e.pos0)>=BigInt(t.pos0),"Bps underflow"),{pos0:(BigInt(e.pos0)-BigInt(t.pos0)).toString()}},eg.value=function(e){return BigInt(e.pos0)},eg.new_=function(e){return{pos0:ep(e).toString()}},eg.assertOverflow=ep,((E=X||(X={})).MemezFun||(E.MemezFun={})).isSniperProtectedMemezFun=async function(e,t){return(await es(e,t)).public_key.length>0},(P=E.MemezFees||(E.MemezFees={})).takeWithDiscount=function(e,t,n){if("Value"===e.variant){let n=BigInt(e.fields.pos0);if(n===BigInt(0))return BigInt(0);if(t>=n)return n;throw Error(`Insufficient amount to cover fee. Required: ${n}, provided: ${t}`)}if("Percentage"===e.variant){let i=e.fields.pos0.fields;if(BigInt(i.pos0)===BigInt(0))return BigInt(0);let r=V.calcUp(V.sub(i,n),t);if(t>=r)return r;throw Error(`Insufficient amount to cover fee. Required: ${r}, provided: ${t}`)}throw Error("Unknown fee variant")},P.calculateWithDiscount=function(e,t,n){if("Value"===e.variant)return BigInt(e.fields.pos0);if("Percentage"===e.variant){let i=e.fields.pos0.fields;return V.calcUp(V.sub(i,t),n)}throw Error("Unknown fee variant")},(E.MemezBurner||(E.MemezBurner={})).calculate=function(e,t){if(V.value(e.fee.fields)===BigInt(0)||t===BigInt(0)||t>=BigInt(e.target_liquidity))return V.new_(0);let n=BigInt(1e4);return V.new_(J.U64.mulDivUp(V.value(e.fee.fields),J.U64.mulDivUp(t,n,BigInt(e.target_liquidity)),n))},(j=E.MemezPump||(E.MemezPump={})).getPumpState=async function(e,t){return await es(e,t.inner_state)},j.pump=function(e,t){let n=e.constant_product.fields,i=E.MemezFees.takeWithDiscount(n.quote_swap_fee,t,n.quote_referrer_fee.fields),r=t-i,o=BigInt(n.meme_balance),a=BigInt(n.quote_balance),s=o*r/(BigInt(n.virtual_liquidity)+a+r),u=E.MemezFees.takeWithDiscount(n.meme_swap_fee,s,n.meme_referrer_fee.fields);return s-u},j.dump=function(e,t){let n=e.constant_product.fields,i=E.MemezFees.takeWithDiscount(n.meme_swap_fee,t,n.meme_referrer_fee.fields),r=t-i,o=BigInt(n.meme_balance),a=BigInt(n.quote_balance),s=BigInt(n.virtual_liquidity),u=E.MemezBurner.calculate(n.burner.fields,a),l=V.calcUp(u,r),c=r-(V.value(u)!==BigInt(0)?l:BigInt(0)),d=(s+a)*c/(o+c);d>a&&(d=a);let g=E.MemezFees.takeWithDiscount(n.quote_swap_fee,d,n.quote_referrer_fee.fields);return d-g},(D=Y||(Y={})).getCurveAmountAfterBuy=async function(e,t){let{suiAmount:n,poolId:i,frontendFee:r}=e,o=await es(t,i),a=await X.MemezPump.getPumpState(t,o);return n=ec(n,r),X.MemezPump.pump(a,n)},D.getSuiAmountAfterSell=async function(e,t){let{curveAmount:n,poolId:i,frontendFee:r}=e,o=await es(t,i),a=await X.MemezPump.getPumpState(t,o);return ec(X.MemezPump.dump(a,n),r)};let ef="0x2::sui::SUI",em="0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI",eh="0x5d4b302506645c37ff133b98c4b50a5ae14841659738d6d733d59d0d217a93bf::coin::COIN",e_="0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC",eA="0x9258181f5ceac8dbffb7030890243caed69a9599d2886d957a9cb7656af3bdb3",eC="0x0000000000000000000000000000000000000000000000000000000000000006",eI=async(e,t,n,i)=>{let r,o=[],a=!0;for(;a;)try{let n=await e.getCoins({owner:t,coinType:i,cursor:r});o=[...o,...n.data],a=n.hasNextPage,r=n.nextCursor}catch(e){console.error("Error fetching data:",e),a=!1}let s=((e,t,n)=>{let i;if(e?.length){do{i=!1;for(let r=0;r<e.length-1;r++){let o=BigInt(e[r][t]),a=BigInt(e[r+1][t]);if("desc"===n?o<a:o>a){let t=e[r];e[r]=e[r+1],e[r+1]=t,i=!0}}}while(i);return e}})(o.map(e=>({...e,balance:e.balance})),"balance","desc")??[],u="0",l=[],c=[];for(let e of s)if(u=(BigInt(e.balance)+BigInt(u)).toString(10),l.push(e.coinObjectId),c.push(e),BigInt(u)>=BigInt(n))break;return{objectIds:l,balance:u,objectCoins:c}};async function eb(e,t){let{account:n,amount:i,splits:o,coinType:a,inheritTx:s,inspecTransaction:u,isSponsored:l=!1}=e,c=s??new r,{objectIds:d}=await eI(t,n,i,a),g=d[0];if(b(a)===b(em)&&!l){let e;return u?(d.length>1&&c.mergeCoins(c.object(g),d.slice(1).map(e=>c.object(e))),e=c.splitCoins(c.object(g),o)):e=c.splitCoins(c.gas,o),{tx:c,coinData:e}}d.length>1&&c.mergeCoins(c.object(g),d.slice(1).map(e=>c.object(e)));let p=c.splitCoins(c.object(g),o);return{tx:c,coinData:p}}let ey="0x62412b7268c35f3808336aee57a52836501f40b8ba5d936f8ad275e672befd04";async function eT(e,t){let n,i,{inputAmount:o,accountAddress:a,frontendFee:s,frontendFeeRecipient:u,extendTx:l,isSponsored:c}=e;C(e.inCoinType===em||e.inCoinType===ef,"Input must be SUI");let{tx:d,coinIn:g}=l||{},p=el(o,s||"0"),f=d||new r;if(g)n=f.splitCoins(g,p),Z.transferOrDestroyZeroCoin(f,em,g,a);else{let{coinData:e}=await eb({account:a,amount:o,splits:p,coinType:em,inheritTx:f,isSponsored:c||!1},t);n=e}if(s&&u){let[e,t]=n;i=e,f.transferObjects([t],f.pure.address(u||a))}else[i]=n;return{tx:f,coinOut:i}}async function ew(e,t,n){if(C(t.outCoinType===em||t.outCoinType===ef,"Output must be SUI"),0>=Number(t.frontendFee||0))return{tx:e,coinOut:n};let i=e.moveCall({target:"0x2::coin::value",typeArguments:[t.outCoinType],arguments:[n]}),r=e.moveCall({target:`${ey}::math::mul_div_u64`,typeArguments:[],arguments:[i,e.pure.u64(BigInt(1e4*Number(t.frontendFee||"0"))),e.pure.u64(BigInt(1e4))]}),o=e.moveCall({target:"0x2::coin::split",typeArguments:[t.outCoinType],arguments:[n,r]});return e.transferObjects([o],e.pure.address(t.frontendFeeRecipient||t.accountAddress)),{tx:e,coinOut:n}}(Z||(Z={})).transferOrDestroyZeroCoin=function(e,t,n,i){e.moveCall({target:`${ey}::utils::transfer_or_destroy`,typeArguments:[t],arguments:[n,e.pure.address(i)]})};var eB=H||(H={});async function ev(e){let t=e||new r;return t.moveCall({target:`${W.PACKAGE_ID_V4}::memez_allowed_versions::get_allowed_versions`,arguments:[t.object(W.MEMEZ_AV_OBJECT_ID)],typeArguments:[]})}eB.getAllowedVersions=ev,eB.buildBuyTx=async function(e,t){C(!await X.MemezFun.isSniperProtectedMemezFun(t,e.poolId),"This coin is a sniper protected coin, please use the Blast Fun website to trade it.");let{tx:n,coinOut:i}=await eT(e,t);C(i,"Coin out is required");let r=n.moveCall({target:`${W.PACKAGE_ID_V4}::memez_pump::pump`,typeArguments:[e.outCoinType,em],arguments:[n.object(e.poolId),i,n.pure.vector("address",[]),n.pure.vector("vector<u8>",[]),n.pure.u64(e.minAmountOut),await ev(n)]});return{tx:n,coinOut:r}},eB.buildSellTx=async function(e,t){C(e.outCoinType===em||e.outCoinType===ef,"Output must be SUI");let n=await es(t,e.poolId),{tx:i,coinData:r}=await eb({amount:e.inputAmount,coinType:e.inCoinType,inheritTx:e.extendTx?.tx,account:e.accountAddress,splits:[e.inputAmount]},t),[o]=r,[a]=i.moveCall({target:`${W.PACKAGE_ID_V4}::memez_pump::dump`,typeArguments:[e.inCoinType,e.outCoinType],arguments:[i.object(e.poolId),i.object(n.ipx_meme_coin_treasury),o,i.pure.vector("address",[]),i.pure.u64(e.minAmountOut),await ev(i)]});return await ew(i,e,a)};let eO=new y({network:T.MAINNET,fullNodeUrl:B("mainnet")});function eF(){return eO}async function eS(e,t){let{inheritTx:n,sender:i,feeAmount:o,suiInputAmount:a}=e,s=n||new r;s.setGasBudget(o);let{objectCoins:u}=await eI(t,i,(BigInt(a||"0")+o).toString(),em);return s.setGasPayment(u.map(e=>({objectId:e.coinObjectId,version:e.version,digest:e.digest}))),s}(M=Q||(Q={})).getCurveAmountAfterBuy=async function(e){let{suiAmount:t,poolId:n,frontendFee:i}=e;t=ec(t,i);let{memeAmountOut:r}=await eF().quotePump({pool:n,amount:t});return r},M.getSuiAmountAfterSell=async function(e){let{curveAmount:t,poolId:n,frontendFee:i}=e,{quoteAmountOut:r}=await eF().quoteDump({pool:n,amount:t});return ec(r,i)};var ex=ee||(ee={});async function ek(e,t){let{tx:n,coinOut:i}=await eT(e,t);C(i,"Coin out is required");let{memeCoin:r,tx:o}=await eF().pump({pool:e.poolId,quoteCoin:i,minAmountOut:e.minAmountOut,tx:n});return{tx:o,coinOut:r}}async function eR(e,t){C(e.outCoinType===em||e.outCoinType===ef,"Output must be SUI");let{tx:n,coinData:i}=await eb({amount:e.inputAmount,coinType:e.inCoinType,inheritTx:e.extendTx?.tx,account:e.accountAddress,splits:[e.inputAmount]},t),[r]=i,{quoteCoin:o,tx:a}=await eF().dump({pool:e.poolId,memeCoin:r,tx:n,minAmountOut:e.minAmountOut});return await ew(a,e,o)}ex.buildBuyTx=ek,ex.buildSellTx=eR,ex.getBuyTransaction=async function({coinInAmount:e,coinInType:t,coinOutType:n,poolId:i,slippage:r,walletAddress:a,tradeFee:s},u){C(t===ef,"coinInType must be SUI for buy transaction"),C(n!==t,"coinOutType must be different from coinInType"),C(r>=0&&r<1,"slippage must be between 0 (inclusive) and 1 (exclusive)"),C(e>0,"coinInAmount must be greater than 0");let l=BigInt(new o((await Q.getCurveAmountAfterBuy({poolId:i,suiAmount:e,frontendFee:s?s.tradeFeePercent:void 0})).toString()).multipliedBy(1-r).toFixed(0,3)),{tx:c,coinOut:d}=await ek({accountAddress:a,inCoinType:t,outCoinType:n,inputAmount:e.toString(),minAmountOut:l.toString(),poolId:i,frontendFee:s?s.tradeFeePercent:void 0,frontendFeeRecipient:s?s.tradeFeeRecipientAddress:void 0,extendTx:void 0,isSponsored:!1},u);C(d,"Coin out is required"),c.transferObjects([d],c.pure.address(a)),c.setSender(a);let g=await ed(u,c,a,0);return(c=await eS({inheritTx:c,sender:a,feeAmount:g,suiInputAmount:e},u)).build({client:u})},ex.getSellTransaction=async function({coinInAmount:e,coinInType:t,coinOutType:n,poolId:i,slippage:r,walletAddress:a,tradeFee:s},u){C(n===ef,"coinOutType must be SUI for sell transaction"),C(n!==t,"coinOutType must be different from coinInType"),C(r>=0&&r<1,"slippage must be between 0 (inclusive) and 1 (exclusive)"),C(e>0,"coinInAmount must be greater than 0");let l=BigInt(new o((await Q.getSuiAmountAfterSell({poolId:i,curveAmount:e,frontendFee:s?s.tradeFeePercent:void 0})).toString()).multipliedBy(1-r).toFixed(0,3)),{tx:c,coinOut:d}=await eR({accountAddress:a,inCoinType:t,outCoinType:n,inputAmount:e.toString(),minAmountOut:l.toString(),poolId:i,frontendFee:s?s.tradeFeePercent:void 0,frontendFeeRecipient:s?s.tradeFeeRecipientAddress:void 0,extendTx:void 0,isSponsored:!1},u);C(d,"Coin out is required"),c.transferObjects([d],c.pure.address(a)),c.setSender(a);let g=await ed(u,c,a,0);return(c=await eS({inheritTx:c,sender:a,feeAmount:g},u)).build({client:u})};var eE=((N={}).BLAST_FUN="BLAST_FUN",N.MOONBAGS="MOONBAGS",N);(U=et||(et={})).PACKAGE_ID="0xb8df325010942634a4afb3db3901ee215546af43a4ec4af781e7213b0bba7290",U.CONFIG_OBJECT_ID="0x74aecf86067c6913960ba4925333aefd2b1f929cafca7e21fd55a8f244b70499",U.LOCK_CONFIG_OBJECT_ID="0xfb09822d9808980abd04c51321adb850701f5f55535c6206658ef4d910c3e9be",U.BURN_MANAGER_OBJECT_ID="0x1d94aa32518d0cb00f9de6ed60d450c9a2090761f326752ffad06b2e9404f845",U.POOLS_OBJECT_ID="0xf699e7f2276f5c9a75944b37a0c5b5d9ddfd2471bf6242483b03ab2887d198d0",U.GLOBAL_CONFIG_OBJECT_ID="0xdaa46292632c3c4d8f31f23ea0f9b36a28ff3677e9684980e4438403a67a3d8f",U.FEE_DENOMINATOR=BigInt(1e4),(G=(K=en||(en={})).Curves||(K.Curves={})).calculateAddLiquidityCost=function(e,t,n){return e*t/(t-n)-e},G.calculateRemoveLiquidityReturn=function(e,t,n){return t-e*t/(e+n)},G.calculateTokenAmountReceived=function(e,t,n){return t-e*t/(e+n)},(q=K.Moonbags||(K.Moonbags={})).getDynamicVirtualTokenReserves=async function(e,t){let n=await e.getDynamicFieldObject({parentId:t,name:{type:"vector<u8>",value:"virtual_token_reserves"}});if(n.data)return BigInt(n.data.content.fields.value)},q.buyExactInReturnsWithLock=function(e){let{inputAmount:t,amountIn:n,pool:i,config:r,dynamicVirtualTokenReserves:o}=e,a=BigInt(i.virtual_sui_reserves),s=BigInt(i.virtual_token_reserves),u=BigInt(i.remain_token_reserves.fields.balance),l=K.Curves.calculateRemoveLiquidityReturn(a,s,n),c=s-(o||u),d=l,g=n;l>c&&(d=c,g=K.Curves.calculateAddLiquidityCost(a,s,c)+BigInt(1));let p=g*BigInt(r.platform_fee)/et.FEE_DENOMINATOR;return C(t>=g+p,"Input amount is less than used SUI + fee"),{receivedCurve:d,receivedSui:t-g-p}},q.sellReturns=function(e){let{amountIn:t,pool:n,config:i}=e,r=BigInt(n.virtual_sui_reserves),o=BigInt(n.virtual_token_reserves),a=BigInt(n.real_sui_reserves.fields.balance),s=K.Curves.calculateRemoveLiquidityReturn(o,r,t);s>a&&(s=a);let u=s*BigInt(i.platform_fee)/et.FEE_DENOMINATOR,l=s-u;return{receivedCurve:BigInt(0),receivedSui:l}},($=ei||(ei={})).getCurveAmountAfterBuy=async function(e,t){let{suiAmount:n,poolId:i,frontendFee:r}=e,[o,a,s]=await Promise.all([es(t,i),es(t,et.CONFIG_OBJECT_ID),en.Moonbags.getDynamicVirtualTokenReserves(t,i)]);void 0!==r&&(n=ec(n,r));let u=n*et.FEE_DENOMINATOR/(et.FEE_DENOMINATOR+BigInt(a.platform_fee)),{receivedCurve:l}=en.Moonbags.buyExactInReturnsWithLock({inputAmount:n,amountIn:u,pool:o,config:a,dynamicVirtualTokenReserves:s});return l},$.getSuiAmountAfterSell=async function(e,t){let{curveAmount:n,poolId:i,frontendFee:r}=e,[o,a]=await Promise.all([es(t,i),es(t,et.CONFIG_OBJECT_ID)]),{receivedSui:s}=en.Moonbags.sellReturns({amountIn:n,pool:o,config:a});return void 0!==r?ec(s,r):s},$.getUsedSuiForTx=async function(e,t){let{suiAmount:n,frontendFee:i}=e,r=await es(t,et.CONFIG_OBJECT_ID);return void 0!==i&&(n=ec(n,i)),n*et.FEE_DENOMINATOR/(et.FEE_DENOMINATOR+BigInt(r.platform_fee))};var eP=er||(er={});async function ej(e,t){let{tx:n,coinOut:i}=await eT(e,t);C(i,"Coin out is required");let r=await ei.getUsedSuiForTx({suiAmount:BigInt(e.inputAmount),frontendFee:e.frontendFee},t),[o,a]=n.moveCall({target:`${et.PACKAGE_ID}::moonbags::buy_exact_in_returns_with_lock`,typeArguments:[e.outCoinType],arguments:[n.object(et.CONFIG_OBJECT_ID),n.object(et.LOCK_CONFIG_OBJECT_ID),i,n.pure.u64(r),n.pure.u64(e.minAmountOut),n.object(et.BURN_MANAGER_OBJECT_ID),n.object(et.POOLS_OBJECT_ID),n.object(et.GLOBAL_CONFIG_OBJECT_ID),n.object(eA),n.object(eC)]});return Z.transferOrDestroyZeroCoin(n,em,o,e.accountAddress),{tx:n,coinOut:a}}async function eD(e,t){C(e.outCoinType===em||e.outCoinType===ef,"Output must be SUI");let{tx:n,coinData:i}=await eb({amount:e.inputAmount,coinType:e.inCoinType,inheritTx:e.extendTx?.tx,account:e.accountAddress,splits:[e.inputAmount]},t),[r]=i,[o,a]=n.moveCall({target:`${et.PACKAGE_ID}::moonbags::sell_returns`,typeArguments:[e.inCoinType],arguments:[n.object(et.CONFIG_OBJECT_ID),r,n.pure.u64(e.minAmountOut),n.object(eC)]});return Z.transferOrDestroyZeroCoin(n,e.inCoinType,a,e.accountAddress),await ew(n,e,o)}function eM(e){return e}function eN(e){return e}function eU(e){return new Proxy(e,{get(e,t){let n=e[t];return"function"==typeof n?n.bind(e):n}})}eP.buildBuyTx=ej,eP.buildSellTx=eD,eP.getBuyTransaction=async function({coinInAmount:e,coinInType:t,coinOutType:n,poolId:i,slippage:r,walletAddress:a,tradeFee:s},u){C(t===ef,"coinInType must be SUI for buy transaction"),C(n!==t,"coinOutType must be different from coinInType"),C(r>=0&&r<1,"slippage must be between 0 (inclusive) and 1 (exclusive)"),C(e>0,"coinInAmount must be greater than 0");let l=BigInt(new o((await ei.getCurveAmountAfterBuy({poolId:i,suiAmount:e,frontendFee:s?s.tradeFeePercent:void 0},u)).toString()).multipliedBy(1-r).toFixed(0,3)),{tx:c,coinOut:d}=await ej({accountAddress:a,inCoinType:t,outCoinType:n,inputAmount:e.toString(),minAmountOut:l.toString(),poolId:i,frontendFee:s?s.tradeFeePercent:void 0,frontendFeeRecipient:s?s.tradeFeeRecipientAddress:void 0,extendTx:void 0,isSponsored:!1},u);C(d,"Coin out is required"),c.transferObjects([d],c.pure.address(a)),c.setSender(a);let g=await ed(u,c,a,0);return(c=await eS({inheritTx:c,sender:a,feeAmount:g,suiInputAmount:e},u)).build({client:u})},eP.getSellTransaction=async function({coinInAmount:e,coinInType:t,coinOutType:n,poolId:i,slippage:r,walletAddress:a,tradeFee:s},u){C(n===ef,"coinOutType must be SUI for sell transaction"),C(n!==t,"coinOutType must be different from coinInType"),C(r>=0&&r<1,"slippage must be between 0 (inclusive) and 1 (exclusive)"),C(e>0,"coinInAmount must be greater than 0");let l=BigInt(new o((await ei.getSuiAmountAfterSell({poolId:i,curveAmount:e,frontendFee:s?s.tradeFeePercent:void 0},u)).toString()).multipliedBy(1-r).toFixed(0,3)),{tx:c,coinOut:d}=await eD({accountAddress:a,inCoinType:t,outCoinType:n,inputAmount:e.toString(),minAmountOut:l.toString(),poolId:i,frontendFee:s?s.tradeFeePercent:void 0,frontendFeeRecipient:s?s.tradeFeeRecipientAddress:void 0,extendTx:void 0,isSponsored:!1},u);C(d,"Coin out is required"),c.transferObjects([d],c.pure.address(a)),c.setSender(a);let g=await ed(u,c,a,0);return(c=await eS({inheritTx:c,sender:a,feeAmount:g},u)).build({client:u})};class eK{sdk;_astrosAggregator;_aftermathAggregator;_sevenkAggregator;_cetusAggregator;_flowXAggregator;constructor(e){this.sdk=e,this._astrosAggregator=new S({defaultTradeFee:e.options.tradeFee,astrosApiKey:e.options.astrosApiKey},e.suiClient),this._aftermathAggregator=new F({defaultTradeFee:e.options.tradeFee,aftermathApiKey:e.options.aftermathApiKey,aftermathApiEndpoint:e.options.aftermathApiEndpoint},e.suiClient),this._sevenkAggregator=new O({defaultTradeFee:e.options.tradeFee,sevenKApiKey:e.options.sevenKApiKey},e.suiClient),this._cetusAggregator=new x({defaultTradeFee:e.options.tradeFee,cetusApiKey:e.options.cetusApiKey,cetusApiEndpoint:e.options.cetusApiEndpoint,cetusPartnerId:e.options.cetusPartnerId},e.suiClient),this._flowXAggregator=new ea({defaultTradeFee:e.options.tradeFee,flowxApiKey:e.options.flowxApiKey},e.suiClient)}get astrosAggregator(){return this._astrosAggregator}get aftermathAggregator(){return this._aftermathAggregator}get sevenkAggregator(){return this._sevenkAggregator}get cetusAggregator(){return this._cetusAggregator}get flowXAggregator(){return this._flowXAggregator}async getTradeRoute(e,t){let n;switch(e){case eo.ASTROS:{let e,i=await this._astrosAggregator.getTradeRoute(t);if(!i)return null;let r=S.toCommonTradeRoutes(i,t.coinInType,t.coinOutType);if(!r)return null;e=t.tradeFee?t.tradeFee.tradeFeePercent:this.sdk.options.tradeFee.tradeFeePercent,r.amountOut=BigInt(new o(i.amount_out).multipliedBy(1-e).toFixed(0,3)),n={route:r,aggregatorRoute:i};break}case eo.AFTERMATH:{let e=await this._aftermathAggregator.getTradeRoute(t);if(!e)return null;let i=F.toCommonTradeRoutes(e);if(!i)return null;n={route:i,aggregatorRoute:e};break}case eo.SEVENK:{let e=await this._sevenkAggregator.getTradeRoute(t);if(!e)return null;let i=O.toCommonTradeRoutes(e);if(!i)return null;n={route:i,aggregatorRoute:e};break}case eo.CETUS:{let e=await this._cetusAggregator.getTradeRoute(t);if(!e)return null;let i=x.toCommonTradeRoutes(e,t.coinInType,t.coinOutType);if(!i)return null;n={route:i,aggregatorRoute:e};break}case eo.FLOWX:{let e=await this._flowXAggregator.getTradeRoute(t);if(!e)return null;let i=ea.toCommonTradeRoutes(e);if(!i)return null;n={route:i,aggregatorRoute:e}}}return n}async getTransactionByRoute(e,t){switch(e){case eo.ASTROS:return this._astrosAggregator.getTransaction({walletAddress:t.walletAddress,completeRoute:t.completeRoute,slippage:t.slippage,tradeFee:t.tradeFee});case eo.AFTERMATH:return this._aftermathAggregator.getTransaction({walletAddress:t.walletAddress,completeRoute:t.completeRoute,slippage:t.slippage});case eo.SEVENK:return this._sevenkAggregator.getTransaction({walletAddress:t.walletAddress,completeRoute:t.completeRoute,slippage:t.slippage,tradeFee:t.tradeFee});case eo.CETUS:return this._cetusAggregator.getTransaction({walletAddress:t.walletAddress,completeRoute:t.completeRoute,slippage:t.slippage,tradeFee:t.tradeFee});case eo.FLOWX:return this._flowXAggregator.getTransaction({walletAddress:t.walletAddress,completeRoute:t.completeRoute,slippage:t.slippage,tradeFee:t.tradeFee})}}async getTradeTransaction(e,t){let n=await this.getTradeRoute(e,{coinInAmount:t.coinInAmount,coinInType:t.coinInType,coinOutType:t.coinOutType,tradeFee:t.tradeFee});if(!n)return null;let i=await this.getTransactionByRoute(e,{walletAddress:t.walletAddress,completeRoute:n.aggregatorRoute,slippage:t.slippage,tradeFee:t.tradeFee});return{route:n.route,aggregatorRoute:n.aggregatorRoute,transaction:i}}async getTradeTransactionWithBestRate(e){let t=Object.keys(eo),n=await Promise.all(t.map(async t=>{try{return await this.getTradeRoute(t,e)}catch{return null}})),i=null,r=null;for(let e=0;e<n.length;e++){let o=n[e],a=t[e];if(o&&(!i||o.route.amountOut>i.route.amountOut)){i=o,r=a;continue}}if(!i||!r)return null;let o=await this.getTransactionByRoute(r,{walletAddress:e.walletAddress,completeRoute:i.aggregatorRoute,slippage:e.slippage,tradeFee:e.tradeFee});return{route:i.route,aggregatorRoute:i.aggregatorRoute,transaction:o}}async getAmountOut(e,t){let n=await this.getTradeRoute(e,t);return n?n.route.amountOut:null}async getBestAmountOut(e){let t=Object.keys(eo),n=null,i=null;for(let r of t){let t=await this.getAmountOut(r,e);null!==t&&(null===n||t>n)&&(n=t,i=r)}return null===n||null===i?null:{amountOut:n,aggregator:i}}}let eG="0x25fa0eb553dd69fa6a8028f73a38f1df7f289fa88a58ed3d7dc5a5360155bb19",eq="0x8b1a8ac6e34688cd8f8f8e5fefa9d5fb9e1ff74d2f132f8e208ae5ac9cc530bb",e$="0x13d101f44a0710a5475bec5f492a87b80e03d92d1cf540f26096f65850b23d26";class eL{sdk;constructor(e){this.sdk=e}async getConfig(){let e=await this.sdk.suiClient.getObject({id:eq,options:{showContent:!0}});C(e.data?.content,"Config object not found or has no content"),C(e.data?.content.dataType==="moveObject","Config object is not a Move object");let t=e.data.content.fields,n=t.id.id,i=t.fee_receiver,r=t.tiers.fields.contents,o={};for(let e of r){let t=e.fields.key,n=e.fields.value.fields.duration,i=e.fields.value.fields.amount,r=e.fields.value.fields.point,a=e.fields.value.fields.original_amount;o[t]={duration:BigInt(n),amount:BigInt(i),point:BigInt(r),originalAmount:BigInt(a)}}return{id:n,receiverAddress:i,tiers:o}}async buildPayBoostingTx({walletAddress:e,tierId:t,boostingCoinType:n,currentTx:i}){let o=await this.getConfig();C(t in o.tiers,"Invalid tier ID");let a=o.tiers[t].amount,s=i||new r,u=s.splitCoins(s.gas,[s.pure.u64(a)]);s.moveCall({target:`${eG}::boosting::pay`,typeArguments:[b(n)],arguments:[s.object(eq),s.pure.u64(t),u]}),s.setSender(e);let l=await ed(this.sdk.suiClient,s,e,0);return eS({inheritTx:s,sender:e,feeAmount:l},this.sdk.suiClient)}async buildAddTierTx({adminAddress:e,tierId:t,duration:n,point:i,originalAmount:o,amount:a,currentTx:s}){let u=s||new r;u.moveCall({target:`${eG}::config::add_tier`,typeArguments:[],arguments:[u.object(eq),u.object(e$),u.pure.u64(t),u.pure.u64(i),u.pure.u64(n),u.pure.u64(o),u.pure.u64(a)]}),u.setSender(e);let l=await ed(this.sdk.suiClient,u,e,0);return eS({inheritTx:u,sender:e,feeAmount:l},this.sdk.suiClient)}async buildUpdateTierTx({adminAddress:e,tierId:t,duration:n,amount:i,originalAmount:o,point:a,currentTx:s}){let u=s||new r;u.moveCall({target:`${eG}::config::update_tier`,typeArguments:[],arguments:[u.object(eq),u.object(e$),u.pure.u64(t),u.pure.u64(n),u.pure.u64(i),u.pure.u64(a),u.pure.u64(o)]}),u.setSender(e);let l=await ed(this.sdk.suiClient,u,e,0);return eS({inheritTx:u,sender:e,feeAmount:l},this.sdk.suiClient)}async buildRemoveTierTx({adminAddress:e,tierId:t,currentTx:n}){let i=n||new r;i.moveCall({target:`${eG}::config::remove_tier`,typeArguments:[],arguments:[i.object(eq),i.object(e$),i.pure.u64(t)]}),i.setSender(e);let o=await ed(this.sdk.suiClient,i,e,0);return eS({inheritTx:i,sender:e,feeAmount:o},this.sdk.suiClient)}async buildUpdateFeeReceiver({adminAddress:e,newReceiverAddress:t,currentTx:n}){let i=n||new r;i.moveCall({target:`${eG}::config::update_fee_receiver`,typeArguments:[],arguments:[i.object(eq),i.object(e$),i.pure.address(t)]}),i.setSender(e);let o=await ed(this.sdk.suiClient,i,e,0);return eS({inheritTx:i,sender:e,feeAmount:o},this.sdk.suiClient)}async buildPayBoostingWithAdminTx({walletAddress:e,tierId:t,customAmount:n,boostingCoinType:i,currentTx:o}){let a=o||new r,s=a.splitCoins(a.gas,[a.pure.u64(n)]);a.moveCall({target:`${eG}::boosting::pay_with_admin`,typeArguments:[b(i)],arguments:[a.object(e$),a.object(eq),a.pure.u64(t),a.pure.u64(n),s]}),a.setSender(e);let u=await ed(this.sdk.suiClient,a,e,0);return eS({inheritTx:a,sender:e,feeAmount:u},this.sdk.suiClient)}}class ez{sdk;constructor(e){this.sdk=e}async getTradeTransaction(e,t){let n,{coinInType:i,coinOutType:r}=t;C(i!==r,"coinInType and coinOutType must be different"),C(i===ef||r===ef,"One of coinInType or coinOutType must be SUI");let o=i===ef;switch(e){case eE.MOONBAGS:n=o?await er.getBuyTransaction(t,this.sdk.suiClient):await er.getSellTransaction(t,this.sdk.suiClient);break;case eE.BLAST_FUN:n=o?await ee.getBuyTransaction(t,this.sdk.suiClient):await ee.getSellTransaction(t,this.sdk.suiClient);break;default:throw Error(`Unsupported bonding curve platform: ${e}`)}return n}}let eW="0xaedb9a4330883c91769c99e7d2a7ea573b686504daf11d13353141260736a902",eJ="0xe88e0d6792c2bef3f54d594ef26d8df85c6227f5370c200b860d8264f5d78744",eV="0x4d15fc6c181efbe82020697705d37b29154edecb4c682b502bd8f0136d4dd7bf",eX="0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC";class eY{sdk;constructor(e){this.sdk=e}async getConfig(){let e=await this.sdk.suiClient.getObject({id:eJ,options:{showContent:!0}});C(e.data,"Config object not found"),C(e.data.content,"Config object has no content"),C(e.data?.content.dataType==="moveObject","Config object is not a Move object");let t=e.data.content.fields,n=t.id.id,i=t.fee_receiver,r=t.paused,o=t.accepted_payment_type,a=t.plans.fields.contents,s={};for(let e of a){let t=e.fields.key,n=e.fields.value.fields.id,i=e.fields.value.fields.price,r=e.fields.value.fields.month_interval,o=e.fields.value.fields.ptype;s[t]={id:BigInt(n),price:BigInt(i),monthInterval:r,planType:o}}return{id:n,plans:s,feeReceiverWallet:i,paused:r,acceptedPaymentType:o}}async buildSubscribeCyclePlanTx({walletAddress:e,planId:t,reference:n,paymentCoinType:i=eX,currentTx:r}){let o=await this.getConfig();C(!o.paused,"Contract is paused"),C(t in o.plans,"Invalid plan ID");let a=o.plans[t].price,{tx:s,coinData:u}=await eb({account:e,amount:a.toString(),splits:[a.toString()],coinType:i,inheritTx:r},this.sdk.suiClient);s.moveCall({target:`${eW}::subscription::subscribe_cycle_plan`,typeArguments:[i],arguments:[s.object(eJ),s.pure.u64(t),s.pure.string(n),u]}),s.setSender(e);let l=await ed(this.sdk.suiClient,s,e,0);return eS({inheritTx:s,sender:e,feeAmount:l},this.sdk.suiClient)}async buildUpgradeCyclePlanTx({walletAddress:e,currentPlanId:t,targetPlanId:n,reference:i,isNextCycle:r,paymentCoinType:o=eX,currentTx:a}){let s=await this.getConfig();C(!s.paused,"Contract is paused"),C(t in s.plans,"Invalid current plan ID"),C(n in s.plans,"Invalid target plan ID"),C(t!==n,"Current and target plan IDs must be different");let u=s.plans[n].price,{tx:l,coinData:c}=await eb({account:e,amount:u.toString(),splits:[u.toString()],coinType:o,inheritTx:a},this.sdk.suiClient);l.moveCall({target:`${eW}::subscription::upgrade_cycle_plan`,typeArguments:[o],arguments:[l.object(eJ),l.pure.u64(t),l.pure.u64(n),l.pure.string(i),l.pure.bool(r),c]}),l.setSender(e);let d=await ed(this.sdk.suiClient,l,e,0);return eS({inheritTx:l,sender:e,feeAmount:d},this.sdk.suiClient)}async buildBuyMoreCUPlanTx({walletAddress:e,planId:t,reference:n,paidAmount:i,paymentCoinType:r=eX,currentTx:o}){let a=await this.getConfig();C(!a.paused,"Contract is paused"),C(t in a.plans,"Invalid plan ID");let{tx:s,coinData:u}=await eb({account:e,amount:i.toString(),splits:[i.toString()],coinType:r,inheritTx:o},this.sdk.suiClient);s.moveCall({target:`${eW}::subscription::buy_more_cu`,typeArguments:[r],arguments:[s.object(eJ),s.pure.u64(t),s.pure.string(n),s.pure.u64(i),u]}),s.setSender(e);let l=await ed(this.sdk.suiClient,s,e,0);return eS({inheritTx:s,sender:e,feeAmount:l},this.sdk.suiClient)}async buildSubscribePlanWithAdminTx({walletAddress:e,planId:t,reference:n,customAmount:i,paymentCoinType:r=eX,currentTx:o}){C(!(await this.getConfig()).paused,"Contract is paused");let{tx:a,coinData:s}=await eb({account:e,amount:i.toString(),splits:[i.toString()],coinType:r,inheritTx:o},this.sdk.suiClient);a.moveCall({target:`${eW}::subscription::subscribe_plan_with_admin`,typeArguments:[r],arguments:[a.object(eV),a.object(eJ),a.pure.u64(t),a.pure.string(n),a.pure.u64(i),s]}),a.setSender(e);let u=await ed(this.sdk.suiClient,a,e,0);return eS({inheritTx:a,sender:e,feeAmount:u},this.sdk.suiClient)}async buildAddPlanTx({adminAddress:e,planId:t,planType:n,monthInterval:i,price:o,currentTx:a}){let s=a||new r;s.moveCall({target:`${eW}::config::add_plan`,typeArguments:[],arguments:[s.object(eJ),s.object(eV),s.pure.u64(t),s.pure.u8(n),s.pure.u8(i),s.pure.u64(o)]}),s.setSender(e);let u=await ed(this.sdk.suiClient,s,e,0);return eS({inheritTx:s,sender:e,feeAmount:u},this.sdk.suiClient)}async buildUpdatePlanTx({adminAddress:e,planId:t,planType:n,monthInterval:i,price:o,currentTx:a}){let s=a||new r;s.moveCall({target:`${eW}::config::update_plan`,typeArguments:[],arguments:[s.object(eJ),s.object(eV),s.pure.u64(BigInt(t)),s.pure.u8(n),s.pure.u8(i),s.pure.u64(o)]}),s.setSender(e);let u=await ed(this.sdk.suiClient,s,e,0);return eS({inheritTx:s,sender:e,feeAmount:u},this.sdk.suiClient)}async buildRemovePlanTx({adminAddress:e,planId:t,currentTx:n}){let i=n||new r;i.moveCall({target:`${eW}::config::remove_plan`,typeArguments:[],arguments:[i.object(eJ),i.object(eV),i.pure.u64(BigInt(t))]}),i.setSender(e);let o=await ed(this.sdk.suiClient,i,e,0);return eS({inheritTx:i,sender:e,feeAmount:o},this.sdk.suiClient)}async buildUpdateFeeReceiverWalletTx({adminAddress:e,newFeeReceiverWallet:t,currentTx:n}){let i=n||new r;i.moveCall({target:`${eW}::config::update_fee_receiver`,typeArguments:[],arguments:[i.object(eJ),i.object(eV),i.pure.address(t)]}),i.setSender(e);let o=await ed(this.sdk.suiClient,i,e,0);return eS({inheritTx:i,sender:e,feeAmount:o},this.sdk.suiClient)}async buildSetPausedTx({adminAddress:e,paused:t,currentTx:n}){let i=n||new r;i.moveCall({target:`${eW}::config::set_paused`,typeArguments:[],arguments:[i.object(eJ),i.object(eV),i.pure.bool(t)]}),i.setSender(e);let o=await ed(this.sdk.suiClient,i,e,0);return eS({inheritTx:i,sender:e,feeAmount:o},this.sdk.suiClient)}async buildSetAcceptedPaymentTypeTx({adminAddress:e,paymentCoinType:t,currentTx:n}){let i=n||new r;i.moveCall({target:`${eW}::config::set_accepted_payment_type`,typeArguments:[t],arguments:[i.object(eJ),i.object(eV)]}),i.setSender(e);let o=await ed(this.sdk.suiClient,i,e,0);return eS({inheritTx:i,sender:e,feeAmount:o},this.sdk.suiClient)}}class eZ{_suiClient;boostingModule;subscriptionModule;constructor(){this._suiClient=new w({url:B("mainnet")}),this.subscriptionModule=new eY(this),this.boostingModule=new eL(this)}get suiClient(){return this._suiClient}}let eH={tradeFeePercent:.01,tradeFeeRecipientAddress:"0xdaf1c8ed29d89cd8f217f609bad0a668fa6f158c12000bfa5f93e670c99e24ff"};class eQ{options;_suiClient;aggregatorModule;curveModule;constructor(e){this.options=e,this._suiClient=new w({url:B("mainnet")}),this.aggregatorModule=new eK(this),this.curveModule=new ez(this)}get suiClient(){return this._suiClient}}class e0{suiClient;constructor(e){this.suiClient=e}validatePrivateKey(e,t){C(e?.trim(),"Private key is required");let n=v.fromSecretKey(e),i=n.getPublicKey().toSuiAddress();if(i!==t)throw Error(`Private key mismatch. Expected: ${t}, Got: ${i}`);return n}async createDraft(e,t,n){C(e?.trim(),"Sender address is required"),C(t?.trim(),"Recipient address is required"),C(e!==t,"Sender and recipient cannot be the same"),C(n>0n,"Transfer amount must be at least 1 MIST");try{let i=new r,[o]=i.splitCoins(i.gas,[n]);i.transferObjects([o],t),i.setSender(e);let a=await this.suiClient.getReferenceGasPrice();i.setGasPrice(a);let s=await ed(this.suiClient,i,e,.1);i=await eS({inheritTx:i,sender:e,feeAmount:s,suiInputAmount:n},this.suiClient);let u=await i.build({client:this.suiClient}),l=Buffer.from(u).toString("base64"),c=await i.getDigest();return{sender:e,recipient:t,amountMIST:n,txDraftBase64:l,txDigest:c}}catch(e){throw Error(`Failed to create draft transaction: ${e instanceof Error?e.message:"Unknown error"}`)}}async execute(e,t){try{C(e,"Draft transaction is required"),C(e.txDraftBase64?.trim(),"Transaction data is required");let n=this.validatePrivateKey(t,e.sender),i=I(e.txDraftBase64),{signature:r}=await n.signTransaction(i),o=await this.suiClient.executeTransactionBlock({transactionBlock:i,signature:r});return{success:!0,txDigest:o.digest,effects:o.effects}}catch(e){return{success:!1,error:e instanceof Error?e.message:"Unknown error occurred"}}}async getTransactionStatus(e){C(e?.trim(),"Transaction digest is required");try{let t=await this.suiClient.getTransactionBlock({digest:e,options:{showEffects:!0}});if(!t?.effects?.status)return"pending";return"success"===t.effects.status.status?"success":"failure"}catch(e){if(e instanceof Error&&(e.message.includes("not found")||e.message.includes("Could not find")))return"pending";return"failure"}}}var e1=1e4;export{e$ as ADMIN_CAP_ID,F as AftermathAggregator,eK as AggregatorModule,S as AstrosAggregator,ey as BLUEFIN_PACKAGE_ID,eG as BOOSTING_PACKAGE_ID,W as BlastFunConstants,Y as BlastFunCustomCalculation,H as BlastFunCustomTransaction,X as BlastFunPackage,Q as BlastFunSDKCalculation,ee as BlastFunSDKTransaction,Z as BluefinTx,eL as BoostingModule,V as Bps,eC as CLOCK_OBJECT_ID,eq as CONFIG_ID,x as CetusAggregator,ez as CurveModule,eH as DEFAULT_TRADE_FEE,e0 as DraftTransferTx,ea as FlowXAggregator,J as MathUtils,ei as MoonbagsCalculation,et as MoonbagsConstants,en as MoonbagsPackage,er as MoonbagsTransaction,e_ as NATIVE_USDC_TOKEN_TYPE,eZ as NoodlesPaySdk,eQ as NoodlesSdk,eX as PAYMENT_COIN_TYPE,eV as SUBSCRIPTION_ADMIN_CAP_ID,eJ as SUBSCRIPTION_CONFIG_ID,eW as SUBSCRIPTION_PACKAGE_ID,em as SUI_FULL_TYPE,eA as SUI_METADATA_OBJECT_ID,ef as SUI_TYPE,O as SevenKAggregator,eY as SubscriptionModule,eo as SupportedAggregator,eE as SupportedBondingCurve,z as TradeFeeOptions,eh as USDC_TOKEN_TYPE,eM as adaptSuiClient,eN as adaptTransaction,eS as addGasFee,eU as createCompatibleSuiClient,ec as getAmountAfterFee,eI as getCoinObjectIdsByAmount,eF as getMemezPumpSDK,eu as getMoveObject,es as getMoveObjectContent,ed as getNeededGasFee,eb as getSplitCoinForTx,el as getSplitCoinsAfterFee,eT as splitSuiCoinAfterFeeFromBuyTx,ew as splitSuiCoinAfterFeeFromSellTx,e1 as BASE_BPS};
package/dist/pay.cjs ADDED
@@ -0,0 +1 @@
1
+ "use strict";const __rslib_import_meta_url__="u"<typeof document?new(require("url".replace("",""))).URL("file:"+__filename).href:document.currentScript&&document.currentScript.src||new URL("main.js",document.baseURI).href;var __webpack_require__={};__webpack_require__.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return __webpack_require__.d(t,{a:t}),t},__webpack_require__.d=(e,t)=>{for(var n in t)__webpack_require__.o(t,n)&&!__webpack_require__.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},__webpack_require__.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),__webpack_require__.r=e=>{"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var __webpack_exports__={};__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{ADMIN_CAP_ID:()=>ADMIN_CAP_ID,CONFIG_ID:()=>CONFIG_ID,BOOSTING_PACKAGE_ID:()=>BOOSTING_PACKAGE_ID,SUBSCRIPTION_PACKAGE_ID:()=>SUBSCRIPTION_PACKAGE_ID,SUBSCRIPTION_ADMIN_CAP_ID:()=>SUBSCRIPTION_ADMIN_CAP_ID,SUBSCRIPTION_CONFIG_ID:()=>SUBSCRIPTION_CONFIG_ID,SubscriptionModule:()=>SubscriptionModule,PAYMENT_COIN_TYPE:()=>PAYMENT_COIN_TYPE,BoostingModule:()=>BoostingModule,NoodlesPaySdk:()=>NoodlesPaySdk});const tiny_invariant_namespaceObject=require("@minswap/tiny-invariant");var tiny_invariant_default=__webpack_require__.n(tiny_invariant_namespaceObject);const transactions_namespaceObject=require("@mysten/sui/transactions"),utils_namespaceObject=require("@mysten/sui/utils"),BASE_BPS=1e4;function getSplitCoinsAfterFee(e,t){let n=BigInt(e),i=BigInt(1e4*Number(t));if(i===BigInt(0))return[n.toString()];let a=n*i/BigInt(1e4);return[(n-a).toString(),a.toString()]}function getAmountAfterFee(e,t){if(!t||0>=Number(t))return BigInt(e);let n=BigInt(e),i=BigInt(1e4*Number(t));if(i===BigInt(0))return n;let a=n*i/BigInt(1e4);return n-a}async function getNeededGasFee(e,t,n,i){let{effects:{gasUsed:a,status:s}}=await e.devInspectTransactionBlock({sender:n,transactionBlock:t});if("success"!==s.status)throw Error(`Transaction failed during dev inspect: ${s.error??""}`);let r=BigInt(a.computationCost)+BigInt(a.storageCost)-BigInt(a.storageRebate),_=BigInt(1e4*Number(i));return r*(BigInt(1e4)+_)/BigInt(1e4)}const SUI_TYPE="0x2::sui::SUI",SUI_FULL_TYPE="0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI",USDC_TOKEN_TYPE="0x5d4b302506645c37ff133b98c4b50a5ae14841659738d6d733d59d0d217a93bf::coin::COIN",NATIVE_USDC_TOKEN_TYPE="0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC",SUI_METADATA_OBJECT_ID="0x9258181f5ceac8dbffb7030890243caed69a9599d2886d957a9cb7656af3bdb3",CLOCK_OBJECT_ID="0x0000000000000000000000000000000000000000000000000000000000000006",orderByKey=(e,t,n)=>{let i;if(e?.length){do{i=!1;for(let a=0;a<e.length-1;a++){let s=BigInt(e[a][t]),r=BigInt(e[a+1][t]);if("desc"===n?s<r:s>r){let t=e[a];e[a]=e[a+1],e[a+1]=t,i=!0}}}while(i);return e}},getCoinObjectIdsByAmount=async(e,t,n,i)=>{let a,s=[],r=!0;for(;r;)try{let n=await e.getCoins({owner:t,coinType:i,cursor:a});s=[...s,...n.data],r=n.hasNextPage,a=n.nextCursor}catch(e){console.error("Error fetching data:",e),r=!1}let _=orderByKey(s.map(e=>({...e,balance:e.balance})),"balance","desc")??[],o="0",u=[],d=[];for(let e of _)if(o=(BigInt(e.balance)+BigInt(o)).toString(10),u.push(e.coinObjectId),d.push(e),BigInt(o)>=BigInt(n))break;return{objectIds:u,balance:o,objectCoins:d}};async function addGasFee(e,t){let{inheritTx:n,sender:i,feeAmount:a,suiInputAmount:s}=e,r=n||new transactions_namespaceObject.Transaction;r.setGasBudget(a);let{objectCoins:_}=await getCoinObjectIdsByAmount(t,i,(BigInt(s||"0")+a).toString(),SUI_FULL_TYPE);return r.setGasPayment(_.map(e=>({objectId:e.coinObjectId,version:e.version,digest:e.digest}))),r}const BOOSTING_PACKAGE_ID="0x25fa0eb553dd69fa6a8028f73a38f1df7f289fa88a58ed3d7dc5a5360155bb19",CONFIG_ID="0x8b1a8ac6e34688cd8f8f8e5fefa9d5fb9e1ff74d2f132f8e208ae5ac9cc530bb",ADMIN_CAP_ID="0x13d101f44a0710a5475bec5f492a87b80e03d92d1cf540f26096f65850b23d26";class BoostingModule{sdk;constructor(e){this.sdk=e}async getConfig(){let e=await this.sdk.suiClient.getObject({id:CONFIG_ID,options:{showContent:!0}});tiny_invariant_default()(e.data?.content,"Config object not found or has no content"),tiny_invariant_default()(e.data?.content.dataType==="moveObject","Config object is not a Move object");let t=e.data.content.fields,n=t.id.id,i=t.fee_receiver,a=t.tiers.fields.contents,s={};for(let e of a){let t=e.fields.key,n=e.fields.value.fields.duration,i=e.fields.value.fields.amount,a=e.fields.value.fields.point,r=e.fields.value.fields.original_amount;s[t]={duration:BigInt(n),amount:BigInt(i),point:BigInt(a),originalAmount:BigInt(r)}}return{id:n,receiverAddress:i,tiers:s}}async buildPayBoostingTx({walletAddress:e,tierId:t,boostingCoinType:n,currentTx:i}){let a=await this.getConfig();tiny_invariant_default()(t in a.tiers,"Invalid tier ID");let s=a.tiers[t].amount,r=i||new transactions_namespaceObject.Transaction,_=r.splitCoins(r.gas,[r.pure.u64(s)]);r.moveCall({target:`${BOOSTING_PACKAGE_ID}::boosting::pay`,typeArguments:[(0,utils_namespaceObject.normalizeStructTag)(n)],arguments:[r.object(CONFIG_ID),r.pure.u64(t),_]}),r.setSender(e);let o=await getNeededGasFee(this.sdk.suiClient,r,e,0);return addGasFee({inheritTx:r,sender:e,feeAmount:o},this.sdk.suiClient)}async buildAddTierTx({adminAddress:e,tierId:t,duration:n,point:i,originalAmount:a,amount:s,currentTx:r}){let _=r||new transactions_namespaceObject.Transaction;_.moveCall({target:`${BOOSTING_PACKAGE_ID}::config::add_tier`,typeArguments:[],arguments:[_.object(CONFIG_ID),_.object(ADMIN_CAP_ID),_.pure.u64(t),_.pure.u64(i),_.pure.u64(n),_.pure.u64(a),_.pure.u64(s)]}),_.setSender(e);let o=await getNeededGasFee(this.sdk.suiClient,_,e,0);return addGasFee({inheritTx:_,sender:e,feeAmount:o},this.sdk.suiClient)}async buildUpdateTierTx({adminAddress:e,tierId:t,duration:n,amount:i,originalAmount:a,point:s,currentTx:r}){let _=r||new transactions_namespaceObject.Transaction;_.moveCall({target:`${BOOSTING_PACKAGE_ID}::config::update_tier`,typeArguments:[],arguments:[_.object(CONFIG_ID),_.object(ADMIN_CAP_ID),_.pure.u64(t),_.pure.u64(n),_.pure.u64(i),_.pure.u64(s),_.pure.u64(a)]}),_.setSender(e);let o=await getNeededGasFee(this.sdk.suiClient,_,e,0);return addGasFee({inheritTx:_,sender:e,feeAmount:o},this.sdk.suiClient)}async buildRemoveTierTx({adminAddress:e,tierId:t,currentTx:n}){let i=n||new transactions_namespaceObject.Transaction;i.moveCall({target:`${BOOSTING_PACKAGE_ID}::config::remove_tier`,typeArguments:[],arguments:[i.object(CONFIG_ID),i.object(ADMIN_CAP_ID),i.pure.u64(t)]}),i.setSender(e);let a=await getNeededGasFee(this.sdk.suiClient,i,e,0);return addGasFee({inheritTx:i,sender:e,feeAmount:a},this.sdk.suiClient)}async buildUpdateFeeReceiver({adminAddress:e,newReceiverAddress:t,currentTx:n}){let i=n||new transactions_namespaceObject.Transaction;i.moveCall({target:`${BOOSTING_PACKAGE_ID}::config::update_fee_receiver`,typeArguments:[],arguments:[i.object(CONFIG_ID),i.object(ADMIN_CAP_ID),i.pure.address(t)]}),i.setSender(e);let a=await getNeededGasFee(this.sdk.suiClient,i,e,0);return addGasFee({inheritTx:i,sender:e,feeAmount:a},this.sdk.suiClient)}async buildPayBoostingWithAdminTx({walletAddress:e,tierId:t,customAmount:n,boostingCoinType:i,currentTx:a}){let s=a||new transactions_namespaceObject.Transaction,r=s.splitCoins(s.gas,[s.pure.u64(n)]);s.moveCall({target:`${BOOSTING_PACKAGE_ID}::boosting::pay_with_admin`,typeArguments:[(0,utils_namespaceObject.normalizeStructTag)(i)],arguments:[s.object(ADMIN_CAP_ID),s.object(CONFIG_ID),s.pure.u64(t),s.pure.u64(n),r]}),s.setSender(e);let _=await getNeededGasFee(this.sdk.suiClient,s,e,0);return addGasFee({inheritTx:s,sender:e,feeAmount:_},this.sdk.suiClient)}}async function getSplitCoinForTx(e,t){let{account:n,amount:i,splits:a,coinType:s,inheritTx:r,inspecTransaction:_,isSponsored:o=!1}=e,u=r??new transactions_namespaceObject.Transaction,{objectIds:d}=await getCoinObjectIdsByAmount(t,n,i,s),c=d[0];if((0,utils_namespaceObject.normalizeStructTag)(s)===(0,utils_namespaceObject.normalizeStructTag)(SUI_FULL_TYPE)&&!o){let e;return _?(d.length>1&&u.mergeCoins(u.object(c),d.slice(1).map(e=>u.object(e))),e=u.splitCoins(u.object(c),a)):e=u.splitCoins(u.gas,a),{tx:u,coinData:e}}d.length>1&&u.mergeCoins(u.object(c),d.slice(1).map(e=>u.object(e)));let l=u.splitCoins(u.object(c),a);return{tx:u,coinData:l}}const SUBSCRIPTION_PACKAGE_ID="0xaedb9a4330883c91769c99e7d2a7ea573b686504daf11d13353141260736a902",SUBSCRIPTION_CONFIG_ID="0xe88e0d6792c2bef3f54d594ef26d8df85c6227f5370c200b860d8264f5d78744",SUBSCRIPTION_ADMIN_CAP_ID="0x4d15fc6c181efbe82020697705d37b29154edecb4c682b502bd8f0136d4dd7bf",PAYMENT_COIN_TYPE="0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC";class SubscriptionModule{sdk;constructor(e){this.sdk=e}async getConfig(){let e=await this.sdk.suiClient.getObject({id:SUBSCRIPTION_CONFIG_ID,options:{showContent:!0}});tiny_invariant_default()(e.data,"Config object not found"),tiny_invariant_default()(e.data.content,"Config object has no content"),tiny_invariant_default()(e.data?.content.dataType==="moveObject","Config object is not a Move object");let t=e.data.content.fields,n=t.id.id,i=t.fee_receiver,a=t.paused,s=t.accepted_payment_type,r=t.plans.fields.contents,_={};for(let e of r){let t=e.fields.key,n=e.fields.value.fields.id,i=e.fields.value.fields.price,a=e.fields.value.fields.month_interval,s=e.fields.value.fields.ptype;_[t]={id:BigInt(n),price:BigInt(i),monthInterval:a,planType:s}}return{id:n,plans:_,feeReceiverWallet:i,paused:a,acceptedPaymentType:s}}async buildSubscribeCyclePlanTx({walletAddress:e,planId:t,reference:n,paymentCoinType:i=PAYMENT_COIN_TYPE,currentTx:a}){let s=await this.getConfig();tiny_invariant_default()(!s.paused,"Contract is paused"),tiny_invariant_default()(t in s.plans,"Invalid plan ID");let r=s.plans[t].price,{tx:_,coinData:o}=await getSplitCoinForTx({account:e,amount:r.toString(),splits:[r.toString()],coinType:i,inheritTx:a},this.sdk.suiClient);_.moveCall({target:`${SUBSCRIPTION_PACKAGE_ID}::subscription::subscribe_cycle_plan`,typeArguments:[i],arguments:[_.object(SUBSCRIPTION_CONFIG_ID),_.pure.u64(t),_.pure.string(n),o]}),_.setSender(e);let u=await getNeededGasFee(this.sdk.suiClient,_,e,0);return addGasFee({inheritTx:_,sender:e,feeAmount:u},this.sdk.suiClient)}async buildUpgradeCyclePlanTx({walletAddress:e,currentPlanId:t,targetPlanId:n,reference:i,isNextCycle:a,paymentCoinType:s=PAYMENT_COIN_TYPE,currentTx:r}){let _=await this.getConfig();tiny_invariant_default()(!_.paused,"Contract is paused"),tiny_invariant_default()(t in _.plans,"Invalid current plan ID"),tiny_invariant_default()(n in _.plans,"Invalid target plan ID"),tiny_invariant_default()(t!==n,"Current and target plan IDs must be different");let o=_.plans[n].price,{tx:u,coinData:d}=await getSplitCoinForTx({account:e,amount:o.toString(),splits:[o.toString()],coinType:s,inheritTx:r},this.sdk.suiClient);u.moveCall({target:`${SUBSCRIPTION_PACKAGE_ID}::subscription::upgrade_cycle_plan`,typeArguments:[s],arguments:[u.object(SUBSCRIPTION_CONFIG_ID),u.pure.u64(t),u.pure.u64(n),u.pure.string(i),u.pure.bool(a),d]}),u.setSender(e);let c=await getNeededGasFee(this.sdk.suiClient,u,e,0);return addGasFee({inheritTx:u,sender:e,feeAmount:c},this.sdk.suiClient)}async buildBuyMoreCUPlanTx({walletAddress:e,planId:t,reference:n,paidAmount:i,paymentCoinType:a=PAYMENT_COIN_TYPE,currentTx:s}){let r=await this.getConfig();tiny_invariant_default()(!r.paused,"Contract is paused"),tiny_invariant_default()(t in r.plans,"Invalid plan ID");let{tx:_,coinData:o}=await getSplitCoinForTx({account:e,amount:i.toString(),splits:[i.toString()],coinType:a,inheritTx:s},this.sdk.suiClient);_.moveCall({target:`${SUBSCRIPTION_PACKAGE_ID}::subscription::buy_more_cu`,typeArguments:[a],arguments:[_.object(SUBSCRIPTION_CONFIG_ID),_.pure.u64(t),_.pure.string(n),_.pure.u64(i),o]}),_.setSender(e);let u=await getNeededGasFee(this.sdk.suiClient,_,e,0);return addGasFee({inheritTx:_,sender:e,feeAmount:u},this.sdk.suiClient)}async buildSubscribePlanWithAdminTx({walletAddress:e,planId:t,reference:n,customAmount:i,paymentCoinType:a=PAYMENT_COIN_TYPE,currentTx:s}){let r=await this.getConfig();tiny_invariant_default()(!r.paused,"Contract is paused");let{tx:_,coinData:o}=await getSplitCoinForTx({account:e,amount:i.toString(),splits:[i.toString()],coinType:a,inheritTx:s},this.sdk.suiClient);_.moveCall({target:`${SUBSCRIPTION_PACKAGE_ID}::subscription::subscribe_plan_with_admin`,typeArguments:[a],arguments:[_.object(SUBSCRIPTION_ADMIN_CAP_ID),_.object(SUBSCRIPTION_CONFIG_ID),_.pure.u64(t),_.pure.string(n),_.pure.u64(i),o]}),_.setSender(e);let u=await getNeededGasFee(this.sdk.suiClient,_,e,0);return addGasFee({inheritTx:_,sender:e,feeAmount:u},this.sdk.suiClient)}async buildAddPlanTx({adminAddress:e,planId:t,planType:n,monthInterval:i,price:a,currentTx:s}){let r=s||new transactions_namespaceObject.Transaction;r.moveCall({target:`${SUBSCRIPTION_PACKAGE_ID}::config::add_plan`,typeArguments:[],arguments:[r.object(SUBSCRIPTION_CONFIG_ID),r.object(SUBSCRIPTION_ADMIN_CAP_ID),r.pure.u64(t),r.pure.u8(n),r.pure.u8(i),r.pure.u64(a)]}),r.setSender(e);let _=await getNeededGasFee(this.sdk.suiClient,r,e,0);return addGasFee({inheritTx:r,sender:e,feeAmount:_},this.sdk.suiClient)}async buildUpdatePlanTx({adminAddress:e,planId:t,planType:n,monthInterval:i,price:a,currentTx:s}){let r=s||new transactions_namespaceObject.Transaction;r.moveCall({target:`${SUBSCRIPTION_PACKAGE_ID}::config::update_plan`,typeArguments:[],arguments:[r.object(SUBSCRIPTION_CONFIG_ID),r.object(SUBSCRIPTION_ADMIN_CAP_ID),r.pure.u64(BigInt(t)),r.pure.u8(n),r.pure.u8(i),r.pure.u64(a)]}),r.setSender(e);let _=await getNeededGasFee(this.sdk.suiClient,r,e,0);return addGasFee({inheritTx:r,sender:e,feeAmount:_},this.sdk.suiClient)}async buildRemovePlanTx({adminAddress:e,planId:t,currentTx:n}){let i=n||new transactions_namespaceObject.Transaction;i.moveCall({target:`${SUBSCRIPTION_PACKAGE_ID}::config::remove_plan`,typeArguments:[],arguments:[i.object(SUBSCRIPTION_CONFIG_ID),i.object(SUBSCRIPTION_ADMIN_CAP_ID),i.pure.u64(BigInt(t))]}),i.setSender(e);let a=await getNeededGasFee(this.sdk.suiClient,i,e,0);return addGasFee({inheritTx:i,sender:e,feeAmount:a},this.sdk.suiClient)}async buildUpdateFeeReceiverWalletTx({adminAddress:e,newFeeReceiverWallet:t,currentTx:n}){let i=n||new transactions_namespaceObject.Transaction;i.moveCall({target:`${SUBSCRIPTION_PACKAGE_ID}::config::update_fee_receiver`,typeArguments:[],arguments:[i.object(SUBSCRIPTION_CONFIG_ID),i.object(SUBSCRIPTION_ADMIN_CAP_ID),i.pure.address(t)]}),i.setSender(e);let a=await getNeededGasFee(this.sdk.suiClient,i,e,0);return addGasFee({inheritTx:i,sender:e,feeAmount:a},this.sdk.suiClient)}async buildSetPausedTx({adminAddress:e,paused:t,currentTx:n}){let i=n||new transactions_namespaceObject.Transaction;i.moveCall({target:`${SUBSCRIPTION_PACKAGE_ID}::config::set_paused`,typeArguments:[],arguments:[i.object(SUBSCRIPTION_CONFIG_ID),i.object(SUBSCRIPTION_ADMIN_CAP_ID),i.pure.bool(t)]}),i.setSender(e);let a=await getNeededGasFee(this.sdk.suiClient,i,e,0);return addGasFee({inheritTx:i,sender:e,feeAmount:a},this.sdk.suiClient)}async buildSetAcceptedPaymentTypeTx({adminAddress:e,paymentCoinType:t,currentTx:n}){let i=n||new transactions_namespaceObject.Transaction;i.moveCall({target:`${SUBSCRIPTION_PACKAGE_ID}::config::set_accepted_payment_type`,typeArguments:[t],arguments:[i.object(SUBSCRIPTION_CONFIG_ID),i.object(SUBSCRIPTION_ADMIN_CAP_ID)]}),i.setSender(e);let a=await getNeededGasFee(this.sdk.suiClient,i,e,0);return addGasFee({inheritTx:i,sender:e,feeAmount:a},this.sdk.suiClient)}}const client_namespaceObject=require("@mysten/sui/client");class NoodlesPaySdk{_suiClient;boostingModule;subscriptionModule;constructor(){this._suiClient=new client_namespaceObject.SuiClient({url:(0,client_namespaceObject.getFullnodeUrl)("mainnet")}),this.subscriptionModule=new SubscriptionModule(this),this.boostingModule=new BoostingModule(this)}get suiClient(){return this._suiClient}}for(var __rspack_i in exports.ADMIN_CAP_ID=__webpack_exports__.ADMIN_CAP_ID,exports.BOOSTING_PACKAGE_ID=__webpack_exports__.BOOSTING_PACKAGE_ID,exports.BoostingModule=__webpack_exports__.BoostingModule,exports.CONFIG_ID=__webpack_exports__.CONFIG_ID,exports.NoodlesPaySdk=__webpack_exports__.NoodlesPaySdk,exports.PAYMENT_COIN_TYPE=__webpack_exports__.PAYMENT_COIN_TYPE,exports.SUBSCRIPTION_ADMIN_CAP_ID=__webpack_exports__.SUBSCRIPTION_ADMIN_CAP_ID,exports.SUBSCRIPTION_CONFIG_ID=__webpack_exports__.SUBSCRIPTION_CONFIG_ID,exports.SUBSCRIPTION_PACKAGE_ID=__webpack_exports__.SUBSCRIPTION_PACKAGE_ID,exports.SubscriptionModule=__webpack_exports__.SubscriptionModule,__webpack_exports__)-1===["ADMIN_CAP_ID","BOOSTING_PACKAGE_ID","BoostingModule","CONFIG_ID","NoodlesPaySdk","PAYMENT_COIN_TYPE","SUBSCRIPTION_ADMIN_CAP_ID","SUBSCRIPTION_CONFIG_ID","SUBSCRIPTION_PACKAGE_ID","SubscriptionModule"].indexOf(__rspack_i)&&(exports[__rspack_i]=__webpack_exports__[__rspack_i]);Object.defineProperty(exports,"__esModule",{value:!0});
package/dist/pay.d.ts ADDED
@@ -0,0 +1,541 @@
1
+ import { SuiClient } from '@mysten/sui/client';
2
+ import { Transaction } from '@mysten/sui/transactions';
3
+
4
+ /**
5
+ * Parameters for adding a new subscription plan (admin only).
6
+ */
7
+ export declare type AddPlanRequest = {
8
+ /** Address of the admin performing the operation */
9
+ adminAddress: string;
10
+ /** Unique identifier for the new plan */
11
+ planId: number;
12
+ /** Type of the plan (1 = Default, 2 = CUAddOn) */
13
+ planType: number;
14
+ /** Duration of the plan in months */
15
+ monthInterval: number;
16
+ /** Price of the plan in USDC (with 6 decimals) */
17
+ price: bigint;
18
+ /** Optional existing transaction to append to (for composability) */
19
+ currentTx?: Transaction;
20
+ };
21
+
22
+ /**
23
+ * Parameters for adding a new boosting tier (admin only).
24
+ */
25
+ export declare type AddTierRequest = {
26
+ /** Address of the admin performing the operation */
27
+ adminAddress: string;
28
+ /** Unique identifier for the new tier */
29
+ tierId: bigint;
30
+ /** Duration of the boosting effect in milliseconds */
31
+ duration: bigint;
32
+ /** Point value for the boosting tier */
33
+ point: bigint;
34
+ /** Original amount for the boosting tier */
35
+ originalAmount: bigint;
36
+ /** Amount required to purchase this tier */
37
+ amount: bigint;
38
+ /** Optional existing transaction to append to (for composability) */
39
+ currentTx?: Transaction;
40
+ };
41
+
42
+ /** Admin capability object ID for privileged operations */
43
+ export declare const ADMIN_CAP_ID = "0x13d101f44a0710a5475bec5f492a87b80e03d92d1cf540f26096f65850b23d26";
44
+
45
+ /** Sui package ID for the boosting protocol */
46
+ export declare const BOOSTING_PACKAGE_ID = "0x25fa0eb553dd69fa6a8028f73a38f1df7f289fa88a58ed3d7dc5a5360155bb19";
47
+
48
+ /**
49
+ * Complete boosting protocol configuration.
50
+ */
51
+ export declare type BoostingConfig = {
52
+ /** Configuration object ID */
53
+ id: string;
54
+ /** Map of tier ID to tier information */
55
+ tiers: Record<string, TierInfo>;
56
+ /** Address that receives boosting payment fees */
57
+ receiverAddress: string;
58
+ };
59
+
60
+ /**
61
+ * Module for managing boosting functionality in the Noodles SDK.
62
+ *
63
+ * This module provides methods for:
64
+ * - Paying boosting fees for different tiers
65
+ * - Managing boosting tiers (admin functions)
66
+ * - Retrieving boosting configuration
67
+ * - Updating fee receiver settings
68
+ */
69
+ export declare class BoostingModule implements IPayModule {
70
+ /** Reference to the main SDK instance */
71
+ sdk: NoodlesPaySdk;
72
+ /**
73
+ * Creates a new BoostingModule instance.
74
+ *
75
+ * @param sdk - The main Noodles Pay SDK instance
76
+ */
77
+ constructor(sdk: NoodlesPaySdk);
78
+ /**
79
+ * Retrieves the current boosting configuration from the blockchain.
80
+ *
81
+ * @returns Promise resolving to the current boosting configuration
82
+ * @throws Error if config object is not found or invalid
83
+ */
84
+ getConfig(): Promise<BoostingConfig>;
85
+ /**
86
+ * Builds a transaction for paying boosting fees for a specific tier.
87
+ * The payment amount is determined by the tier configuration.
88
+ *
89
+ * @param request - Payment request parameters
90
+ * @returns Promise resolving to a transaction ready for execution
91
+ * @throws Error if tier ID is invalid
92
+ */
93
+ buildPayBoostingTx({ walletAddress, tierId, boostingCoinType, currentTx, }: PayBoostingRequest): Promise<Transaction>;
94
+ /**
95
+ * Builds a transaction for adding a new boosting tier.
96
+ *
97
+ * **Requires admin capability.**
98
+ *
99
+ * @param request - Add tier request parameters
100
+ * @returns Promise resolving to a transaction ready for execution
101
+ */
102
+ buildAddTierTx({ adminAddress, tierId, duration, point, originalAmount, amount, currentTx, }: AddTierRequest): Promise<Transaction>;
103
+ /**
104
+ * Builds a transaction for updating an existing boosting tier.
105
+ *
106
+ * **Requires admin capability.**
107
+ *
108
+ * @param request - Update tier request parameters
109
+ * @returns Promise resolving to a transaction ready for execution
110
+ */
111
+ buildUpdateTierTx({ adminAddress, tierId, duration, amount, originalAmount, point, currentTx, }: UpdateTierRequest): Promise<Transaction>;
112
+ /**
113
+ * Builds a transaction for removing a boosting tier.
114
+ *
115
+ * **Requires admin capability.**
116
+ *
117
+ * @param request - Remove tier request parameters
118
+ * @returns Promise resolving to a transaction ready for execution
119
+ */
120
+ buildRemoveTierTx({ adminAddress, tierId, currentTx }: RemoveTierRequest): Promise<Transaction>;
121
+ /**
122
+ * Builds a transaction for updating the fee receiver address.
123
+ *
124
+ * **Requires admin capability.**
125
+ *
126
+ * @param request - Update fee receiver request parameters
127
+ * @returns Promise resolving to a transaction ready for execution
128
+ */
129
+ buildUpdateFeeReceiver({ adminAddress, newReceiverAddress, currentTx, }: UpdateFeeReceiverRequest): Promise<Transaction>;
130
+ /**
131
+ * Builds a transaction for paying boosting fees with admin privileges.
132
+ * Allows specifying a custom payment amount instead of using the tier's default amount.
133
+ *
134
+ * **Requires admin capability.**
135
+ *
136
+ * @param request - Admin payment request parameters
137
+ * @returns Promise resolving to a transaction ready for execution
138
+ */
139
+ buildPayBoostingWithAdminTx({ walletAddress, tierId, customAmount, boostingCoinType, currentTx, }: PayBoostingWithAdminRequest): Promise<Transaction>;
140
+ }
141
+
142
+ /**
143
+ * Parameters for buying additional compute units (CU) for CUAddOn plans.
144
+ */
145
+ export declare type BuyMoreCUPlanRequest = {
146
+ /** Address of the wallet making the purchase */
147
+ walletAddress: string;
148
+ /** ID of the CUAddOn subscription plan */
149
+ planId: number;
150
+ /** encrypted user_id */
151
+ reference: string;
152
+ /** Amount of payment coins want to paid */
153
+ paidAmount: bigint;
154
+ /** Type of coin used for payment (should be USDC) */
155
+ paymentCoinType?: string;
156
+ /** Optional existing transaction to append to (for composability) */
157
+ currentTx?: Transaction;
158
+ };
159
+
160
+ /** Configuration object ID for boosting settings */
161
+ export declare const CONFIG_ID = "0x8b1a8ac6e34688cd8f8f8e5fefa9d5fb9e1ff74d2f132f8e208ae5ac9cc530bb";
162
+
163
+ declare interface IPayModule {
164
+ readonly sdk: NoodlesPaySdk;
165
+ }
166
+
167
+ export declare class NoodlesPaySdk {
168
+ private _suiClient;
169
+ readonly boostingModule: BoostingModule;
170
+ readonly subscriptionModule: SubscriptionModule;
171
+ constructor();
172
+ get suiClient(): SuiClient;
173
+ }
174
+
175
+ /**
176
+ * Parameters for paying boosting fees for a specific tier.
177
+ */
178
+ export declare type PayBoostingRequest = {
179
+ /** Address of the wallet making the payment */
180
+ walletAddress: string;
181
+ /** ID of the boosting tier to pay for */
182
+ tierId: string;
183
+ /** Type of coin used for boosting payment */
184
+ boostingCoinType: string;
185
+ /** Optional existing transaction to append to (for composability) */
186
+ currentTx?: Transaction;
187
+ };
188
+
189
+ /**
190
+ * Parameters for paying boosting fees with admin privileges using custom amount.
191
+ */
192
+ export declare type PayBoostingWithAdminRequest = {
193
+ /** Address of the wallet making the payment */
194
+ walletAddress: string;
195
+ /** ID of the boosting tier */
196
+ tierId: string;
197
+ /** Custom payment amount (overrides tier amount) */
198
+ customAmount: bigint;
199
+ /** Type of coin used for boosting payment */
200
+ boostingCoinType: string;
201
+ /** Optional existing transaction to append to (for composability) */
202
+ currentTx?: Transaction;
203
+ };
204
+
205
+ /** Payment coin type on SUI */
206
+ export declare const PAYMENT_COIN_TYPE = "0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC";
207
+
208
+ /**
209
+ * Parameters for removing a subscription plan (admin only).
210
+ */
211
+ export declare type RemovePlanRequest = {
212
+ /** Address of the admin performing the operation */
213
+ adminAddress: string;
214
+ /** ID of the plan to remove */
215
+ planId: number;
216
+ /** Optional existing transaction to append to (for composability) */
217
+ currentTx?: Transaction;
218
+ };
219
+
220
+ /**
221
+ * Parameters for removing a boosting tier (admin only).
222
+ */
223
+ export declare type RemoveTierRequest = {
224
+ /** Address of the admin performing the operation */
225
+ adminAddress: string;
226
+ /** ID of the tier to remove */
227
+ tierId: bigint;
228
+ /** Optional existing transaction to append to (for composability) */
229
+ currentTx?: Transaction;
230
+ };
231
+
232
+ /**
233
+ * Parameters for setting the accepted payment coin type (admin only).
234
+ * Note: Only one payment type can be accepted at a time. Setting a new type replaces the previous one.
235
+ */
236
+ export declare type SetAcceptedPaymentTypeRequest = {
237
+ /** Address of the admin performing the operation */
238
+ adminAddress: string;
239
+ /** Type of coin to accept for payments (replaces current accepted type) */
240
+ paymentCoinType: string;
241
+ /** Optional existing transaction to append to (for composability) */
242
+ currentTx?: Transaction;
243
+ };
244
+
245
+ /**
246
+ * Parameters for pausing/unpausing the contract (admin only).
247
+ */
248
+ export declare type SetPausedRequest = {
249
+ /** Address of the admin performing the operation */
250
+ adminAddress: string;
251
+ /** Whether to pause (true) or unpause (false) the contract */
252
+ paused: boolean;
253
+ /** Optional existing transaction to append to (for composability) */
254
+ currentTx?: Transaction;
255
+ };
256
+
257
+ /**
258
+ * Parameters for subscribing to a plan.
259
+ */
260
+ export declare type SubscribePlanRequest = {
261
+ /** Address of the wallet making the subscription */
262
+ walletAddress: string;
263
+ /** ID of the subscription plan */
264
+ planId: number;
265
+ /** encrypted user_id */
266
+ reference: string;
267
+ /** Type of coin used for payment (should be USDC) */
268
+ paymentCoinType?: string;
269
+ /** Optional existing transaction to append to (for composability) */
270
+ currentTx?: Transaction;
271
+ };
272
+
273
+ /**
274
+ * Parameters for subscribing with admin privileges using custom amount.
275
+ */
276
+ export declare type SubscribePlanWithAdminRequest = {
277
+ /** Address of the wallet making the subscription */
278
+ walletAddress: string;
279
+ /** ID of the subscription plan */
280
+ planId: number;
281
+ /** encrypted user_id */
282
+ reference: string;
283
+ /** Custom payment amount (overrides plan price, for promotions/discounts) */
284
+ customAmount: bigint;
285
+ /** Type of coin used for payment (should be USDC) */
286
+ paymentCoinType?: string;
287
+ /** Optional existing transaction to append to (for composability) */
288
+ currentTx?: Transaction;
289
+ };
290
+
291
+ /** Admin capability object ID for privileged operations */
292
+ export declare const SUBSCRIPTION_ADMIN_CAP_ID = "0x4d15fc6c181efbe82020697705d37b29154edecb4c682b502bd8f0136d4dd7bf";
293
+
294
+ /** Configuration object ID for subscription settings */
295
+ export declare const SUBSCRIPTION_CONFIG_ID = "0xe88e0d6792c2bef3f54d594ef26d8df85c6227f5370c200b860d8264f5d78744";
296
+
297
+ /** Sui package ID for the subscription protocol */
298
+ export declare const SUBSCRIPTION_PACKAGE_ID = "0xaedb9a4330883c91769c99e7d2a7ea573b686504daf11d13353141260736a902";
299
+
300
+ /**
301
+ * Complete subscription protocol configuration.
302
+ */
303
+ export declare type SubscriptionConfig = {
304
+ /** Configuration object ID */
305
+ id: string;
306
+ /** Map of plan ID to plan information */
307
+ plans: Record<string, SubscriptionPlan>;
308
+ /** Address that receives subscription payments */
309
+ feeReceiverWallet: string;
310
+ /** Whether the contract is paused */
311
+ paused: boolean;
312
+ /** Currently accepted payment coin type (only one type allowed at a time) */
313
+ acceptedPaymentType: string;
314
+ };
315
+
316
+ /**
317
+ * Module for managing subscription functionality in the Noodles SDK.
318
+ *
319
+ * This module provides methods for:
320
+ * - Subscribing to plans
321
+ * - Upgrading plans (immediate or next billing cycle)
322
+ * - Managing subscription plans (admin functions)
323
+ * - Retrieving subscription configuration
324
+ * - Updating fee receiver wallet and pause settings
325
+ */
326
+ export declare class SubscriptionModule implements IPayModule {
327
+ /** Reference to the main SDK instance */
328
+ sdk: NoodlesPaySdk;
329
+ /**
330
+ * Creates a new SubscriptionModule instance.
331
+ *
332
+ * @param sdk - The main Noodles Pay SDK instance
333
+ */
334
+ constructor(sdk: NoodlesPaySdk);
335
+ /**
336
+ * Retrieves the current subscription configuration from the blockchain.
337
+ *
338
+ * @returns Promise resolving to the current subscription configuration
339
+ * @throws Error if config object is not found or invalid
340
+ */
341
+ getConfig(): Promise<SubscriptionConfig>;
342
+ /**
343
+ * Builds a transaction for subscribing to a plan.
344
+ * The payment amount is determined by the plan configuration.
345
+ *
346
+ * @param request - Subscription request parameters
347
+ * @returns Promise resolving to a transaction ready for execution
348
+ * @throws Error if plan ID is invalid or contract is paused
349
+ */
350
+ buildSubscribeCyclePlanTx({ walletAddress, planId, reference, paymentCoinType, currentTx, }: SubscribePlanRequest): Promise<Transaction>;
351
+ /**
352
+ * Builds a transaction for upgrading to a higher plan.
353
+ * The upgrade takes effect at the next billing cycle.
354
+ * Charges the full price of the target plan.
355
+ *
356
+ * @param request - Upgrade request parameters
357
+ * @returns Promise resolving to a transaction ready for execution
358
+ * @throws Error if plan IDs are invalid or contract is paused
359
+ */
360
+ buildUpgradeCyclePlanTx({ walletAddress, currentPlanId, targetPlanId, reference, isNextCycle, paymentCoinType, currentTx, }: UpgradePlanRequest): Promise<Transaction>;
361
+ buildBuyMoreCUPlanTx({ walletAddress, planId, reference, paidAmount, paymentCoinType, currentTx, }: BuyMoreCUPlanRequest): Promise<Transaction>;
362
+ /**
363
+ * Builds a transaction for subscribing with admin privileges.
364
+ * Allows specifying a custom payment amount instead of using the plan's default price.
365
+ * Useful for promotions, discounts, or special cases.
366
+ *
367
+ * **Requires admin capability.**
368
+ *
369
+ * @param request - Admin subscription request parameters
370
+ * @returns Promise resolving to a transaction ready for execution
371
+ * @throws Error if contract is paused
372
+ */
373
+ buildSubscribePlanWithAdminTx({ walletAddress, planId, reference, customAmount, paymentCoinType, currentTx, }: SubscribePlanWithAdminRequest): Promise<Transaction>;
374
+ /**
375
+ * Builds a transaction for adding a new subscription plan.
376
+ *
377
+ * **Requires admin capability.**
378
+ *
379
+ * @param request - Add plan request parameters
380
+ * @returns Promise resolving to a transaction ready for execution
381
+ */
382
+ buildAddPlanTx({ adminAddress, planId, planType, monthInterval, price, currentTx, }: AddPlanRequest): Promise<Transaction>;
383
+ /**
384
+ * Builds a transaction for updating an existing subscription plan.
385
+ *
386
+ * **Requires admin capability.**
387
+ *
388
+ * @param request - Update plan request parameters
389
+ * @returns Promise resolving to a transaction ready for execution
390
+ */
391
+ buildUpdatePlanTx({ adminAddress, planId, planType, monthInterval, price, currentTx, }: UpdatePlanRequest): Promise<Transaction>;
392
+ /**
393
+ * Builds a transaction for removing a subscription plan.
394
+ *
395
+ * **Requires admin capability.**
396
+ *
397
+ * @param request - Remove plan request parameters
398
+ * @returns Promise resolving to a transaction ready for execution
399
+ */
400
+ buildRemovePlanTx({ adminAddress, planId, currentTx }: RemovePlanRequest): Promise<Transaction>;
401
+ /**
402
+ * Builds a transaction for updating the admin wallet address.
403
+ *
404
+ * **Requires admin capability.**
405
+ *
406
+ * @param request - Update admin wallet request parameters
407
+ * @returns Promise resolving to a transaction ready for execution
408
+ */
409
+ buildUpdateFeeReceiverWalletTx({ adminAddress, newFeeReceiverWallet, currentTx, }: UpdateFeeReceiverWalletRequest): Promise<Transaction>;
410
+ /**
411
+ * Builds a transaction for pausing or unpausing the contract.
412
+ *
413
+ * **Requires admin capability.**
414
+ *
415
+ * @param request - Set paused request parameters
416
+ * @returns Promise resolving to a transaction ready for execution
417
+ */
418
+ buildSetPausedTx({ adminAddress, paused, currentTx }: SetPausedRequest): Promise<Transaction>;
419
+ /**
420
+ * Builds a transaction to set the accepted payment coin type.
421
+ * Note: Only one payment type can be accepted at a time. Setting a new type replaces the previous one.
422
+ *
423
+ * **Requires admin capability.**
424
+ *
425
+ * @param request - Set accepted payment type request parameters
426
+ * @returns Promise resolving to a transaction ready for execution
427
+ */
428
+ buildSetAcceptedPaymentTypeTx({ adminAddress, paymentCoinType, currentTx, }: SetAcceptedPaymentTypeRequest): Promise<Transaction>;
429
+ }
430
+
431
+ /**
432
+ * Information about a specific subscription plan.
433
+ */
434
+ export declare type SubscriptionPlan = {
435
+ /** Plan identifier */
436
+ id: bigint;
437
+ /** Price in USDC (6 decimals) */
438
+ price: bigint;
439
+ /** Type of the plan (1 = Default, 2 = CUAddOn) */
440
+ planType: number;
441
+ /** Duration of the plan in months */
442
+ monthInterval: number;
443
+ };
444
+
445
+ /**
446
+ * Information about a specific boosting tier.
447
+ */
448
+ export declare type TierInfo = {
449
+ /** Duration of the boosting effect in milliseconds */
450
+ duration: bigint;
451
+ /** Amount required to purchase this tier */
452
+ amount: bigint;
453
+ /** Point value associated with this tier */
454
+ point: bigint;
455
+ /** Original amount for the boosting tier */
456
+ originalAmount: bigint;
457
+ };
458
+
459
+ /**
460
+ * Parameters for updating the fee receiver address (admin only).
461
+ */
462
+ export declare type UpdateFeeReceiverRequest = {
463
+ /** Address of the admin performing the operation */
464
+ adminAddress: string;
465
+ /** New address to receive boosting fees */
466
+ newReceiverAddress: string;
467
+ /** Optional existing transaction to append to (for composability) */
468
+ currentTx?: Transaction;
469
+ };
470
+
471
+ /**
472
+ * Parameters for updating the admin wallet address (admin only).
473
+ */
474
+ export declare type UpdateFeeReceiverWalletRequest = {
475
+ /** Address of the admin performing the operation */
476
+ adminAddress: string;
477
+ /** New address to receive subscription payments */
478
+ newFeeReceiverWallet: string;
479
+ /** Optional existing transaction to append to (for composability) */
480
+ currentTx?: Transaction;
481
+ };
482
+
483
+ /**
484
+ * Parameters for updating an existing subscription plan (admin only).
485
+ */
486
+ export declare type UpdatePlanRequest = {
487
+ /** Address of the admin performing the operation */
488
+ adminAddress: string;
489
+ /** ID of the plan to update */
490
+ planId: number;
491
+ /** Type of the plan (1 = Default, 2 = CUAddOn) */
492
+ planType: number;
493
+ /** Duration of the plan in months */
494
+ monthInterval: number;
495
+ /** New price of the plan in USDC (with 6 decimals) */
496
+ price: bigint;
497
+ /** Optional existing transaction to append to (for composability) */
498
+ currentTx?: Transaction;
499
+ };
500
+
501
+ /**
502
+ * Parameters for updating an existing boosting tier (admin only).
503
+ */
504
+ export declare type UpdateTierRequest = {
505
+ /** Address of the admin performing the operation */
506
+ adminAddress: string;
507
+ /** ID of the tier to update */
508
+ tierId: bigint;
509
+ /** New duration of the boosting effect in milliseconds */
510
+ duration: bigint;
511
+ /** New point value for the boosting tier */
512
+ point: bigint;
513
+ /** New original amount for the boosting tier */
514
+ originalAmount: bigint;
515
+ /** New amount required to purchase this tier */
516
+ amount: bigint;
517
+ /** Optional existing transaction to append to (for composability) */
518
+ currentTx?: Transaction;
519
+ };
520
+
521
+ /**
522
+ * Parameters for upgrading to a higher plan (takes effect at next billing cycle).
523
+ */
524
+ export declare type UpgradePlanRequest = {
525
+ /** Address of the wallet making the upgrade */
526
+ walletAddress: string;
527
+ /** Current plan ID */
528
+ currentPlanId: number;
529
+ /** Target plan ID to upgrade to */
530
+ targetPlanId: number;
531
+ /** encrypted user_id */
532
+ reference: string;
533
+ /** Whether the upgrade should take effect in the next billing cycle */
534
+ isNextCycle: boolean;
535
+ /** Type of coin used for payment (should be USDC) */
536
+ paymentCoinType?: string;
537
+ /** Optional existing transaction to append to (for composability) */
538
+ currentTx?: Transaction;
539
+ };
540
+
541
+ export { }
package/dist/pay.js ADDED
@@ -0,0 +1 @@
1
+ import e from"@minswap/tiny-invariant";import{Transaction as t}from"@mysten/sui/transactions";import{normalizeStructTag as i}from"@mysten/sui/utils";import{SuiClient as n,getFullnodeUrl as s}from"@mysten/sui/client";async function a(e,t,i,n){let{effects:{gasUsed:s,status:a}}=await e.devInspectTransactionBlock({sender:i,transactionBlock:t});if("success"!==a.status)throw Error(`Transaction failed during dev inspect: ${a.error??""}`);let r=BigInt(s.computationCost)+BigInt(s.storageCost)-BigInt(s.storageRebate),u=BigInt(1e4*Number(n));return r*(BigInt(1e4)+u)/BigInt(1e4)}let r="0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI",u=async(e,t,i,n)=>{let s,a=[],r=!0;for(;r;)try{let i=await e.getCoins({owner:t,coinType:n,cursor:s});a=[...a,...i.data],r=i.hasNextPage,s=i.nextCursor}catch(e){console.error("Error fetching data:",e),r=!1}let u=((e,t,i)=>{let n;if(e?.length){do{n=!1;for(let s=0;s<e.length-1;s++){let a=BigInt(e[s][t]),r=BigInt(e[s+1][t]);if("desc"===i?a<r:a>r){let t=e[s];e[s]=e[s+1],e[s+1]=t,n=!0}}}while(n);return e}})(a.map(e=>({...e,balance:e.balance})),"balance","desc")??[],o="0",l=[],d=[];for(let e of u)if(o=(BigInt(e.balance)+BigInt(o)).toString(10),l.push(e.coinObjectId),d.push(e),BigInt(o)>=BigInt(i))break;return{objectIds:l,balance:o,objectCoins:d}};async function o(e,i){let{inheritTx:n,sender:s,feeAmount:a,suiInputAmount:o}=e,l=n||new t;l.setGasBudget(a);let{objectCoins:d}=await u(i,s,(BigInt(o||"0")+a).toString(),r);return l.setGasPayment(d.map(e=>({objectId:e.coinObjectId,version:e.version,digest:e.digest}))),l}let l="0x25fa0eb553dd69fa6a8028f73a38f1df7f289fa88a58ed3d7dc5a5360155bb19",d="0x8b1a8ac6e34688cd8f8f8e5fefa9d5fb9e1ff74d2f132f8e208ae5ac9cc530bb",c="0x13d101f44a0710a5475bec5f492a87b80e03d92d1cf540f26096f65850b23d26";class p{sdk;constructor(e){this.sdk=e}async getConfig(){let t=await this.sdk.suiClient.getObject({id:d,options:{showContent:!0}});e(t.data?.content,"Config object not found or has no content"),e(t.data?.content.dataType==="moveObject","Config object is not a Move object");let i=t.data.content.fields,n=i.id.id,s=i.fee_receiver,a=i.tiers.fields.contents,r={};for(let e of a){let t=e.fields.key,i=e.fields.value.fields.duration,n=e.fields.value.fields.amount,s=e.fields.value.fields.point,a=e.fields.value.fields.original_amount;r[t]={duration:BigInt(i),amount:BigInt(n),point:BigInt(s),originalAmount:BigInt(a)}}return{id:n,receiverAddress:s,tiers:r}}async buildPayBoostingTx({walletAddress:n,tierId:s,boostingCoinType:r,currentTx:u}){let c=await this.getConfig();e(s in c.tiers,"Invalid tier ID");let p=c.tiers[s].amount,g=u||new t,f=g.splitCoins(g.gas,[g.pure.u64(p)]);g.moveCall({target:`${l}::boosting::pay`,typeArguments:[i(r)],arguments:[g.object(d),g.pure.u64(s),f]}),g.setSender(n);let b=await a(this.sdk.suiClient,g,n,0);return o({inheritTx:g,sender:n,feeAmount:b},this.sdk.suiClient)}async buildAddTierTx({adminAddress:e,tierId:i,duration:n,point:s,originalAmount:r,amount:u,currentTx:p}){let g=p||new t;g.moveCall({target:`${l}::config::add_tier`,typeArguments:[],arguments:[g.object(d),g.object(c),g.pure.u64(i),g.pure.u64(s),g.pure.u64(n),g.pure.u64(r),g.pure.u64(u)]}),g.setSender(e);let f=await a(this.sdk.suiClient,g,e,0);return o({inheritTx:g,sender:e,feeAmount:f},this.sdk.suiClient)}async buildUpdateTierTx({adminAddress:e,tierId:i,duration:n,amount:s,originalAmount:r,point:u,currentTx:p}){let g=p||new t;g.moveCall({target:`${l}::config::update_tier`,typeArguments:[],arguments:[g.object(d),g.object(c),g.pure.u64(i),g.pure.u64(n),g.pure.u64(s),g.pure.u64(u),g.pure.u64(r)]}),g.setSender(e);let f=await a(this.sdk.suiClient,g,e,0);return o({inheritTx:g,sender:e,feeAmount:f},this.sdk.suiClient)}async buildRemoveTierTx({adminAddress:e,tierId:i,currentTx:n}){let s=n||new t;s.moveCall({target:`${l}::config::remove_tier`,typeArguments:[],arguments:[s.object(d),s.object(c),s.pure.u64(i)]}),s.setSender(e);let r=await a(this.sdk.suiClient,s,e,0);return o({inheritTx:s,sender:e,feeAmount:r},this.sdk.suiClient)}async buildUpdateFeeReceiver({adminAddress:e,newReceiverAddress:i,currentTx:n}){let s=n||new t;s.moveCall({target:`${l}::config::update_fee_receiver`,typeArguments:[],arguments:[s.object(d),s.object(c),s.pure.address(i)]}),s.setSender(e);let r=await a(this.sdk.suiClient,s,e,0);return o({inheritTx:s,sender:e,feeAmount:r},this.sdk.suiClient)}async buildPayBoostingWithAdminTx({walletAddress:e,tierId:n,customAmount:s,boostingCoinType:r,currentTx:u}){let p=u||new t,g=p.splitCoins(p.gas,[p.pure.u64(s)]);p.moveCall({target:`${l}::boosting::pay_with_admin`,typeArguments:[i(r)],arguments:[p.object(c),p.object(d),p.pure.u64(n),p.pure.u64(s),g]}),p.setSender(e);let f=await a(this.sdk.suiClient,p,e,0);return o({inheritTx:p,sender:e,feeAmount:f},this.sdk.suiClient)}}async function g(e,n){let{account:s,amount:a,splits:o,coinType:l,inheritTx:d,inspecTransaction:c,isSponsored:p=!1}=e,g=d??new t,{objectIds:f}=await u(n,s,a,l),b=f[0];if(i(l)===i(r)&&!p){let e;return c?(f.length>1&&g.mergeCoins(g.object(b),f.slice(1).map(e=>g.object(e))),e=g.splitCoins(g.object(b),o)):e=g.splitCoins(g.gas,o),{tx:g,coinData:e}}f.length>1&&g.mergeCoins(g.object(b),f.slice(1).map(e=>g.object(e)));let m=g.splitCoins(g.object(b),o);return{tx:g,coinData:m}}let f="0xaedb9a4330883c91769c99e7d2a7ea573b686504daf11d13353141260736a902",b="0xe88e0d6792c2bef3f54d594ef26d8df85c6227f5370c200b860d8264f5d78744",m="0x4d15fc6c181efbe82020697705d37b29154edecb4c682b502bd8f0136d4dd7bf",C="0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC";class h{sdk;constructor(e){this.sdk=e}async getConfig(){let t=await this.sdk.suiClient.getObject({id:b,options:{showContent:!0}});e(t.data,"Config object not found"),e(t.data.content,"Config object has no content"),e(t.data?.content.dataType==="moveObject","Config object is not a Move object");let i=t.data.content.fields,n=i.id.id,s=i.fee_receiver,a=i.paused,r=i.accepted_payment_type,u=i.plans.fields.contents,o={};for(let e of u){let t=e.fields.key,i=e.fields.value.fields.id,n=e.fields.value.fields.price,s=e.fields.value.fields.month_interval,a=e.fields.value.fields.ptype;o[t]={id:BigInt(i),price:BigInt(n),monthInterval:s,planType:a}}return{id:n,plans:o,feeReceiverWallet:s,paused:a,acceptedPaymentType:r}}async buildSubscribeCyclePlanTx({walletAddress:t,planId:i,reference:n,paymentCoinType:s=C,currentTx:r}){let u=await this.getConfig();e(!u.paused,"Contract is paused"),e(i in u.plans,"Invalid plan ID");let l=u.plans[i].price,{tx:d,coinData:c}=await g({account:t,amount:l.toString(),splits:[l.toString()],coinType:s,inheritTx:r},this.sdk.suiClient);d.moveCall({target:`${f}::subscription::subscribe_cycle_plan`,typeArguments:[s],arguments:[d.object(b),d.pure.u64(i),d.pure.string(n),c]}),d.setSender(t);let p=await a(this.sdk.suiClient,d,t,0);return o({inheritTx:d,sender:t,feeAmount:p},this.sdk.suiClient)}async buildUpgradeCyclePlanTx({walletAddress:t,currentPlanId:i,targetPlanId:n,reference:s,isNextCycle:r,paymentCoinType:u=C,currentTx:l}){let d=await this.getConfig();e(!d.paused,"Contract is paused"),e(i in d.plans,"Invalid current plan ID"),e(n in d.plans,"Invalid target plan ID"),e(i!==n,"Current and target plan IDs must be different");let c=d.plans[n].price,{tx:p,coinData:m}=await g({account:t,amount:c.toString(),splits:[c.toString()],coinType:u,inheritTx:l},this.sdk.suiClient);p.moveCall({target:`${f}::subscription::upgrade_cycle_plan`,typeArguments:[u],arguments:[p.object(b),p.pure.u64(i),p.pure.u64(n),p.pure.string(s),p.pure.bool(r),m]}),p.setSender(t);let h=await a(this.sdk.suiClient,p,t,0);return o({inheritTx:p,sender:t,feeAmount:h},this.sdk.suiClient)}async buildBuyMoreCUPlanTx({walletAddress:t,planId:i,reference:n,paidAmount:s,paymentCoinType:r=C,currentTx:u}){let l=await this.getConfig();e(!l.paused,"Contract is paused"),e(i in l.plans,"Invalid plan ID");let{tx:d,coinData:c}=await g({account:t,amount:s.toString(),splits:[s.toString()],coinType:r,inheritTx:u},this.sdk.suiClient);d.moveCall({target:`${f}::subscription::buy_more_cu`,typeArguments:[r],arguments:[d.object(b),d.pure.u64(i),d.pure.string(n),d.pure.u64(s),c]}),d.setSender(t);let p=await a(this.sdk.suiClient,d,t,0);return o({inheritTx:d,sender:t,feeAmount:p},this.sdk.suiClient)}async buildSubscribePlanWithAdminTx({walletAddress:t,planId:i,reference:n,customAmount:s,paymentCoinType:r=C,currentTx:u}){e(!(await this.getConfig()).paused,"Contract is paused");let{tx:l,coinData:d}=await g({account:t,amount:s.toString(),splits:[s.toString()],coinType:r,inheritTx:u},this.sdk.suiClient);l.moveCall({target:`${f}::subscription::subscribe_plan_with_admin`,typeArguments:[r],arguments:[l.object(m),l.object(b),l.pure.u64(i),l.pure.string(n),l.pure.u64(s),d]}),l.setSender(t);let c=await a(this.sdk.suiClient,l,t,0);return o({inheritTx:l,sender:t,feeAmount:c},this.sdk.suiClient)}async buildAddPlanTx({adminAddress:e,planId:i,planType:n,monthInterval:s,price:r,currentTx:u}){let l=u||new t;l.moveCall({target:`${f}::config::add_plan`,typeArguments:[],arguments:[l.object(b),l.object(m),l.pure.u64(i),l.pure.u8(n),l.pure.u8(s),l.pure.u64(r)]}),l.setSender(e);let d=await a(this.sdk.suiClient,l,e,0);return o({inheritTx:l,sender:e,feeAmount:d},this.sdk.suiClient)}async buildUpdatePlanTx({adminAddress:e,planId:i,planType:n,monthInterval:s,price:r,currentTx:u}){let l=u||new t;l.moveCall({target:`${f}::config::update_plan`,typeArguments:[],arguments:[l.object(b),l.object(m),l.pure.u64(BigInt(i)),l.pure.u8(n),l.pure.u8(s),l.pure.u64(r)]}),l.setSender(e);let d=await a(this.sdk.suiClient,l,e,0);return o({inheritTx:l,sender:e,feeAmount:d},this.sdk.suiClient)}async buildRemovePlanTx({adminAddress:e,planId:i,currentTx:n}){let s=n||new t;s.moveCall({target:`${f}::config::remove_plan`,typeArguments:[],arguments:[s.object(b),s.object(m),s.pure.u64(BigInt(i))]}),s.setSender(e);let r=await a(this.sdk.suiClient,s,e,0);return o({inheritTx:s,sender:e,feeAmount:r},this.sdk.suiClient)}async buildUpdateFeeReceiverWalletTx({adminAddress:e,newFeeReceiverWallet:i,currentTx:n}){let s=n||new t;s.moveCall({target:`${f}::config::update_fee_receiver`,typeArguments:[],arguments:[s.object(b),s.object(m),s.pure.address(i)]}),s.setSender(e);let r=await a(this.sdk.suiClient,s,e,0);return o({inheritTx:s,sender:e,feeAmount:r},this.sdk.suiClient)}async buildSetPausedTx({adminAddress:e,paused:i,currentTx:n}){let s=n||new t;s.moveCall({target:`${f}::config::set_paused`,typeArguments:[],arguments:[s.object(b),s.object(m),s.pure.bool(i)]}),s.setSender(e);let r=await a(this.sdk.suiClient,s,e,0);return o({inheritTx:s,sender:e,feeAmount:r},this.sdk.suiClient)}async buildSetAcceptedPaymentTypeTx({adminAddress:e,paymentCoinType:i,currentTx:n}){let s=n||new t;s.moveCall({target:`${f}::config::set_accepted_payment_type`,typeArguments:[i],arguments:[s.object(b),s.object(m)]}),s.setSender(e);let r=await a(this.sdk.suiClient,s,e,0);return o({inheritTx:s,sender:e,feeAmount:r},this.sdk.suiClient)}}class y{_suiClient;boostingModule;subscriptionModule;constructor(){this._suiClient=new n({url:s("mainnet")}),this.subscriptionModule=new h(this),this.boostingModule=new p(this)}get suiClient(){return this._suiClient}}export{c as ADMIN_CAP_ID,l as BOOSTING_PACKAGE_ID,p as BoostingModule,d as CONFIG_ID,y as NoodlesPaySdk,C as PAYMENT_COIN_TYPE,m as SUBSCRIPTION_ADMIN_CAP_ID,b as SUBSCRIPTION_CONFIG_ID,f as SUBSCRIPTION_PACKAGE_ID,h as SubscriptionModule};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@minswap/noodles-sdk",
3
- "version": "0.0.30",
3
+ "version": "0.0.31-beta.0",
4
4
  "type": "module",
5
5
  "sideEffects": false,
6
6
  "exports": {
@@ -8,6 +8,11 @@
8
8
  "types": "./dist/index.d.ts",
9
9
  "import": "./dist/index.js",
10
10
  "require": "./dist/index.cjs"
11
+ },
12
+ "./pay": {
13
+ "types": "./dist/pay.d.ts",
14
+ "import": "./dist/pay.js",
15
+ "require": "./dist/pay.cjs"
11
16
  }
12
17
  },
13
18
  "main": "./dist/index.cjs",