@msafe/sui-app-store 0.0.166 → 0.0.167

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.mjs CHANGED
@@ -1,2 +1,2 @@
1
- var ms=Object.defineProperty;var ar=(o,t)=>{for(var e in t)ms(o,e,{get:t[e],enumerable:!0})};import{TransactionType as vs}from"@msafe/sui3-utils";import{TransactionType as Ss}from"@msafe/sui3-utils";import fs from"sort-keys-recursive";var b=class{constructor(t){this.data=t}serialize(){return JSON.stringify(fs(this.data))}};import{SuiClient as bs}from"@firefly-exchange/library-sui";import{OnChainCalls as gs}from"@firefly-exchange/library-sui/dist/src/spot";var rr={rpc:"https://fullnode.mainnet.sui.io/",objects:{GlobalConfig:"0x03db251ba509a8d5d8777b6338836082335d93eecbdd09a11e190a1cff51c352",BasePackage:"0x3492c874c1e3b3e2984e8c41b589e642d4d0a5d6459e5a9cfc2d52fd7c89c267",CurrentPackage:"0x702301e7c6ca527a6f6a83f12c5edf2dcd6ec7a23fb5318ec86d88282eab7057"}},et=(o,t)=>{if(o!=="sui:mainnet")throw new Error("Bluefin spot protocol is only available on sui::mainnet");let e=new bs({url:rr.rpc});return new gs(e,rr.objects,{address:t.address,isUIWallet:!1})};import{BN as ir,ClmmPoolUtil as hs}from"@firefly-exchange/library-sui";import{Decimal as ys}from"turbos-clmm-sdk";var B=class{static async openPositionAndAddLiquidity(t,e,n){let a=et(n,e),r=await a.queryChain.getPool(t.pool),i=this.prototype.buildLiqInput(r,t);return await a.openPositionWithFixedAmount(r,t.lowerTick,t.upperTick,i,{returnTx:!0})}static async provideLiquidity(t,e,n){let a=et(n,e),r=await a.queryChain.getPool(t.pool),i=this.prototype.buildLiqInput(r,t);return await a.provideLiquidityWithFixedAmount(r,t.position,i,{returnTx:!0})}static async removeLiquidity(t,e,n){let a=et(n,e),r=await a.queryChain.getPool(t.pool),i=this.prototype.buildLiqInput(r,t);return await a.removeLiquidity(r,t.position,i,{returnTx:!0})}static async closePosition(t,e,n){let a=et(n,e),r=await a.queryChain.getPool(t.pool);return await a.closePosition(r,t.position,{returnTx:!0})}static async collectRewards(t,e,n){let a=et(n,e),r=await a.queryChain.getPool(t.pool);return await a.collectRewards(r,t.position,{rewardCoinsType:t.rewardCoinsType,returnTx:!0})}static async collectFee(t,e,n){let a=et(n,e),r=await a.queryChain.getPool(t.pool);return await a.collectFee(r,t.position,{returnTx:!0})}static async collectFeeAndRewards(t,e,n){let a=et(n,e),r=await a.queryChain.getPool(t.pool);return await a.collectFeeAndRewards(r,t.position,{returnTx:!0})}buildLiqInput(t,e){return hs.estLiquidityAndCoinAmountFromOneAmounts(e.lowerTick,e.upperTick,new ir(new ys(e.tokenAmount).mul(10**(e.isCoinA?t.coin_a.decimals:t.coin_b.decimals)).toFixed(0)),e.isCoinA,!0,e.slippage,new ir(t.current_sqrt_price))}};var be=class o extends b{constructor(e){super(e);this.data=e}txType=Ss.Other;txSubType="ClosePosition";async build(e){let{account:n,network:a}=e,{txbParams:r}=this.data;return await B.closePosition(r,n,a)}static fromData(e){return new o(e)}};import{TransactionType as ws}from"@msafe/sui3-utils";var ge=class o extends b{constructor(e){super(e);this.data=e}txType=ws.Other;txSubType="CollectFee";async build(e){let{account:n,network:a}=e,{txbParams:r}=this.data;return await B.collectFee(r,n,a)}static fromData(e){return new o(e)}};import{TransactionType as Ts}from"@msafe/sui3-utils";var he=class o extends b{constructor(e){super(e);this.data=e}txType=Ts.Other;txSubType="CollectFeeAndRewards";async build(e){let{account:n,network:a}=e,{txbParams:r}=this.data;return await B.collectFeeAndRewards(r,n,a)}static fromData(e){return new o(e)}};import{TransactionType as Cs}from"@msafe/sui3-utils";var ye=class o extends b{constructor(e){super(e);this.data=e}txType=Cs.Other;txSubType="CollectRewards";async build(e){let{account:n,network:a}=e,{txbParams:r}=this.data;return await B.collectRewards(r,n,a)}static fromData(e){return new o(e)}};import{TransactionType as Is}from"@msafe/sui3-utils";var Se=class o extends b{constructor(e){super(e);this.data=e}txType=Is.Other;txSubType="OpenAndAddLiquidity";async build(e){let{account:n,network:a}=e,{txbParams:r}=this.data;return await B.openPositionAndAddLiquidity(r,n,a)}static fromData(e){return new o(e)}};import{TransactionType as ks}from"@msafe/sui3-utils";var we=class o extends b{constructor(e){super(e);this.data=e}txType=ks.Other;txSubType="ProvideLiquidity";async build(e){let{account:n,network:a}=e,{txbParams:r}=this.data;return await B.provideLiquidity(r,n,a)}static fromData(e){return new o(e)}};import{TransactionType as xs}from"@msafe/sui3-utils";var Te=class o extends b{constructor(e){super(e);this.data=e}txType=xs.Other;txSubType="RemoveLiquidity";async build(e){let{account:n,network:a}=e,{txbParams:r}=this.data;return await B.removeLiquidity(r,n,a)}static fromData(e){return new o(e)}};var Ce=class{application="bluefin";supportSDK="@mysten/sui";async deserialize(t){console.log("Bluefin helper deserialize input: ",t);let{txbParams:e,action:n}=t;return{txType:vs.Other,txSubType:n,intentionData:{txbParams:{...e},action:n}}}async build(t){let{suiClient:e,account:n,network:a}=t,r;switch(t.txSubType){case"OpenAndAddLiquidity":r=Se.fromData(t.intentionData);break;case"ProvideLiquidity":r=we.fromData(t.intentionData);break;case"RemoveLiquidity":r=Te.fromData(t.intentionData);break;case"ClosePosition":r=be.fromData(t.intentionData);break;case"CollectFee":r=ge.fromData(t.intentionData);break;case"CollectRewards":r=ye.fromData(t.intentionData);break;case"CollectFeeAndRewards":r=he.fromData(t.intentionData);break;default:throw new Error("not implemented")}return r.build({suiClient:e,account:n,network:a})}};import{TransactionType as Rs}from"@msafe/sui3-utils";import{TransactionType as Os}from"@msafe/sui3-utils";import{Transaction as Ds}from"@mysten/sui/transactions";import{BucketClient as As}from"bucket-protocol-sdk";var sr=(o,t)=>{let e=o==="sui:mainnet"?"mainnet":"testnet";return new As(e,t.address)};var Ie=async(o,t,e,n)=>{let{coinType:a,amount:r}=o,i=new Ds;return await sr(e,t).getPsmTx(i,a,r,n,t.address),i};var ke=class o extends b{constructor(e){super(e);this.data=e}txType=Os.Other;txSubType="psm-in";async build(e){let{account:n,network:a}=e;return await Ie(this.data,n,a,!1)}static fromData(e){return new o(e)}};import{TransactionType as Ps}from"@msafe/sui3-utils";var xe=class o extends b{constructor(e){super(e);this.data=e}txType=Ps.Other;txSubType="psm-out";async build(e){let{account:n,network:a}=e;return await Ie(this.data,n,a,!0)}static fromData(e){return new o(e)}};import{TransactionType as cr}from"@msafe/sui3-utils";import{bcs as _s}from"@mysten/sui/bcs";var ve=class{constructor(t){this.transaction=t}decode(){if(this.isPsmInTransaction())return this.decodePsmIn();if(this.isPsmOutTransaction())return this.decodePsmOut();throw new Error("Unknown transaction type")}get commands(){return this.transaction.getData().commands}get inputs(){return this.transaction.getData().inputs}getMoveCallCommand(t){return this.commands.find(e=>e.$kind==="MoveCall"&&e.MoveCall.function===t)}getSplitCoinsCommands(){return this.commands.filter(t=>t.$kind==="SplitCoins")}getTransferCommands(){return this.commands.filter(t=>t.$kind==="TransferObjects")}isPsmInTransaction(){return!!this.getMoveCallCommand("charge_reservoir")}isPsmOutTransaction(){return!!this.getMoveCallCommand("discharge_reservoir")}decodePsmIn(){let t="0",e=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];e.$kind=="Input"&&(t=this.getPureInputU64(e.Input));let a=this.getMoveCallCommand("charge_reservoir").MoveCall.typeArguments[0];return console.log("Decoder.decodePsmIn",a,t),{txType:cr.Other,type:"psm-in",intentionData:{coinType:a,amount:t}}}decodePsmOut(){let t="0",e=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];e.$kind=="Input"&&(t=this.getPureInputU64(e.Input));let a=this.getMoveCallCommand("discharge_reservoir").MoveCall.typeArguments[0];return console.log("Decoder.decodePsmOut",a,t),{txType:cr.Other,type:"psm-out",intentionData:{coinType:a,amount:t}}}getPureInputU64(t){let e=this.inputs[t];if(e.$kind!=="Pure")throw new Error("not pure argument");return _s.U64.fromBase64(e.Pure.bytes)}};var Ae=class{application="bucket";supportSDK="@mysten/sui";async deserialize(t){console.log("Bucket helper deserialize input: ",t);let{transaction:e}=t,a=new ve(e).decode();return{txType:Rs.Other,txSubType:a.type,intentionData:a.intentionData}}async build(t){let{suiClient:e,account:n,network:a}=t,r;switch(t.txSubType){case"psm-in":r=ke.fromData(t.intentionData);break;case"psm-out":r=xe.fromData(t.intentionData);break;default:throw new Error("not implemented")}return r.build({suiClient:e,account:n,network:a})}};import{TransactionType as fc}from"@msafe/sui3-utils";import{TransactionType as $s}from"@msafe/sui3-utils";import{AggregatorClient as Bs,Env as js}from"@cetusprotocol/aggregator-sdk";import{CetusPeripherySDK as Ms}from"@cetusprotocol/cetus-periphery-sdk";import{CetusClmmSDK as Ns}from"@cetusprotocol/cetus-sui-clmm-sdk";import{SuiClient as Es}from"@mysten/sui/client";var Ws={fullRpcUrl:"https://fullnode.mainnet.sui.io/",simulationAccount:{address:"0x326ce9894f08dcaa337fa232641cc34db957aec9ff6614c1186bc9a7508df0bb"},cetus_config:{package_id:"0x95b8d278b876cae22206131fb9724f701c9444515813042f54f0a426c9a3bc2f",published_at:"0x95b8d278b876cae22206131fb9724f701c9444515813042f54f0a426c9a3bc2f",config:{coin_list_id:"0x8cbc11d9e10140db3d230f50b4d30e9b721201c0083615441707ffec1ef77b23",launchpad_pools_id:"0x1098fac992eab3a0ab7acf15bb654fc1cf29b5a6142c4ef1058e6c408dd15115",clmm_pools_id:"0x15b6a27dd9ae03eb455aba03b39e29aad74abd3757b8e18c0755651b2ae5b71e",admin_cap_id:"0x39d78781750e193ce35c45ff32c6c0c3f2941fa3ddaf8595c90c555589ddb113",global_config_id:"0x0408fa4e4a4c03cc0de8f23d0c2bbfe8913d178713c9a271ed4080973fe42d8f",coin_list_handle:"0x49136005e90e28c4695419ed4194cc240603f1ea8eb84e62275eaff088a71063",launchpad_pools_handle:"0x5e194a8efcf653830daf85a85b52e3ae8f65dc39481d54b2382acda25068375c",clmm_pools_handle:"0x37f60eb2d9d227949b95da8fea810db3c32d1e1fa8ed87434fc51664f87d83cb"}},clmm_pool:{package_id:"0x1eabed72c53feb3805120a081dc15963c204dc8d091542592abaf7a35689b2fb",published_at:"0x70968826ad1b4ba895753f634b0aea68d0672908ca1075a2abdf0fc9e0b2fc6a",version:4,config:{pools_id:"0xf699e7f2276f5c9a75944b37a0c5b5d9ddfd2471bf6242483b03ab2887d198d0",global_config_id:"0xdaa46292632c3c4d8f31f23ea0f9b36a28ff3677e9684980e4438403a67a3d8f",global_vault_id:"0xce7bceef26d3ad1f6d9b6f13a953f053e6ed3ca77907516481ce99ae8e588f2b",admin_cap_id:"0x89c1a321291d15ddae5a086c9abc533dff697fde3d89e0ca836c41af73e36a75"}},integrate:{package_id:"0x996c4d9480708fb8b92aa7acf819fb0497b5ec8e65ba06601cae2fb6db3312c3",published_at:"0x8faab90228e4c4df91c41626bbaefa19fc25c514405ac64de54578dec9e6f5ee",version:6},deepbook:{package_id:"0x000000000000000000000000000000000000000000000000000000000000dee9",published_at:"0x000000000000000000000000000000000000000000000000000000000000dee9"},deepbook_endpoint_v2:{package_id:"0x92aee86c01c79146d23938a00c7fff725ee0688c389be36d1bcbe03761b466c6",published_at:"0x92aee86c01c79146d23938a00c7fff725ee0688c389be36d1bcbe03761b466c6"},aggregatorUrl:"https://api-sui.cetus.zone/router",swapCountUrl:"https://api-sui.cetus.zone/v2/sui/swap/count"},Ls={launchpad:{package_id:"0x80d114c5d474eabc2eb2fcd1a0903f1eb5b5096a8dc4184d72453f7a9be728e4",published_at:"0x80d114c5d474eabc2eb2fcd1a0903f1eb5b5096a8dc4184d72453f7a9be728e4",config:{pools_id:"0xfd8d37f7a1276878972d240302c8efe32f577220c1bbc6c8984d8b60dddfcab3",admin_cap_id:"0x66c70d58c69353714cc6fe2d3a62492d605a96a9821e2bd8274de17219c69980",config_cap_id:"0x02b8d23f033687579966e182c776fe0287cacdbb18bff56c29f141e29a18a4d1"}},ido:{package_id:"0x1192c9e20b4b0a8848a73a8c711b43e38f7ea1f307b556aab6ffab4e982e9c59",published_at:"0x1192c9e20b4b0a8848a73a8c711b43e38f7ea1f307b556aab6ffab4e982e9c59",config:{pools_id:"0xefc209b47acf1f23b29d166440904600229e520ad36228aaf2329b7c16be9762",admin_cap_id:"0x281859d366951830aeeda90779aa170d8ee6845875545470d33ecb890e78c8ce",package_version_id:"0xc93dc996106770af5f4e979b6808518f8cee080f22f35b936f071f59d834bb22"}},xcetus:{package_id:"0x9e69acc50ca03bc943c4f7c5304c2a6002d507b51c11913b247159c60422c606",published_at:"0x9e69acc50ca03bc943c4f7c5304c2a6002d507b51c11913b247159c60422c606",config:{xcetus_manager_id:"0x838b3dbade12b1e602efcaf8c8b818fae643e43176462bf14fd196afa59d1d9d",lock_manager_id:"0x288b59d9dedb51d0bb6cb5e13bfb30885ecf44f8c9076b6f5221c5ef6644fd28",lock_handle_id:"0x7c534bb7b8a2cc21538d0dbedd2437cc64f47106cb4c259b9ff921b5c3cb1a49"}},xcetus_dividends:{package_id:"0x785248249ac457dfd378bdc6d2fbbfec9d1daf65e9d728b820eb4888c8da2c10",published_at:"0x5aa58e1623885bd93de2331d05c29bf4930e54e56beeabcab8fe5385de2d31dc",config:{dividend_manager_id:"0x721c990bfc031d074341c6059a113a59c1febfbd2faeb62d49dcead8408fa6b5",dividend_admin_id:"0x682ba823134f156eac2bcfb27d85a284954a0e61998dc628c40b9bcb4a46ff30",dividend_settle_id:"0xade40abe9f6dd10b83b11085be18f07b63b681cf1c169b041fa16854403388c5",venft_dividends_id:"0x9dcdb97b4307684bedaeaf803d381b12321a31ecbb9dad7df2cd5f64384f9456",venft_dividends_id_v2:"0xaa21fbc1707786d56302952f8327362f4eb9a431a5bc574834e6d46125390de3"}},cetus_faucet:{package_id:"0x6864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b",published_at:"0x6864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b"},xtoken:{package_id:"",published_at:"",config:{xtoken_manager_id:"",lock_manager_id:"",lock_handle_id:""}},xtoken_dividends:{package_id:"",published_at:"",config:{dividend_manager_id:"",dividend_admin_id:"",dividend_settle_id:""}},token_faucet:{package_id:"",published_at:""},booster:{package_id:"",published_at:"",config:{booster_config_id:"",booster_pool_handle:""}},maker_bonus:{package_id:"",published_at:"",config:{maker_config_id:"",maker_pool_handle:""}},liquidity_stratefy:{package_id:"",published_at:"",version:void 0,config:void 0},vaults:{package_id:"0xd3453d9be7e35efe222f78a810bb3af1859fd1600926afced8b4936d825c9a05",published_at:"0xabbd278f738affe762e9df4765b3409bb1e86a355a4f611ad82b278c18108918",version:1,config:{admin_cap_id:"0x78a42978709c4032fab7b33b782b5bcef64c1c6603250bf23644650b72144375",vaults_manager_id:"0x25b82dd2f5ee486ed1c8af144b89a8931cd9c29dee3a86a1bfe194fdea9d04a6",vaults_pool_handle:"0x9036bcc5aa7fd2cceec1659a6a1082871f45bc400c743f50063363457d1738bd",haedal:{package_id:"0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d",published_at:"0x1d56b8ec33c3fae897eb7bb1acb79914e8152faed614868928e684c25c8b198d",version:1,config:{staking_id:"0x47b224762220393057ebf4f70501b6e657c3e56684737568439a04f80849b2ca",coin_type:"0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d::hasui::HASUI"}},volo:{package_id:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55",published_at:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55",version:1,config:{native_pool:"0x7fa2faa111b8c65bea48a23049bfd81ca8f971a262d981dcd9a17c3825cb5baf",vsui_metadata:"0x680cd26af32b2bde8d3361e804c53ec1d1cfe24c7f039eb7f549e8dfde389a60",coin_type:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55::cert::CERT"}},aftermath:{package_id:"0x7f6ce7ade63857c4fd16ef7783fed2dfc4d7fb7e40615abdb653030b76aef0c6",published_at:"0x7f6ce7ade63857c4fd16ef7783fed2dfc4d7fb7e40615abdb653030b76aef0c6",version:1,config:{staked_sui_vault:"0x2f8f6d5da7f13ea37daa397724280483ed062769813b6f31e9788e59cc88994d",referral_vault:"0x4ce9a19b594599536c53edb25d22532f82f18038dc8ef618afd00fbbfb9845ef",safe:"0xeb685899830dd5837b47007809c76d91a098d52aabbf61e8ac467c59e5cc4610",validator_address:"0xd30018ec3f5ff1a3c75656abf927a87d7f0529e6dc89c7ddd1bd27ecb05e3db2",coin_type:"0xf325ce1300e8dac124071d3152c5c5ee6174914f8bc2161e88329cf579246efc::afsui::AFSUI"}}}},limit_order:{package_id:"",published_at:"",version:1,config:{rate_orders_indexer_id:"",rate_orders_indexer_handle:"",global_config_id:"",token_list_handle:"",user_orders_indexer_id:"",user_orders_indexer_handle:""}},frams:{package_id:"0x11ea791d82b5742cc8cab0bf7946035c97d9001d7c3803a93f119753da66f526",published_at:"0xd817d90368dafcbf3b051e96546dea6209bffad23289d66025beef80354dcd6b",version:1,config:{global_config_id:"0x21215f2f6de04b57dd87d9be7bb4e15499aec935e36078e2488f36436d64996e",rewarder_manager_id:"0xe0e155a88c77025056da08db5b1701a91b79edb6167462f768e387c3ed6614d5",rewarder_manager_handle:"0xb32e312cbb3367d6f3d2b4e57c9225e903d29b7b9f612dae2ddf75bdeb26a5aa",admin_cap_id:"0xf10fbf1fea5b7aeaa524b87769461a28c5c977613046360093673991f26d886c"}},dca:{package_id:"",published_at:"",version:0,config:{admin_cap_id:"",global_config_id:"",indexer_id:"",user_indexer_id:"",in_coin_whitelist_id:"",out_coin_whitelist_id:""}}},Us={fullRpcUrl:"https://fullnode.testnet.sui.io/",simulationAccount:{address:"0xcd0247d0b67e53dde69b285e7a748e3dc390e8a5244eb9dd9c5c53d95e4cf0aa"},cetus_config:{package_id:"0xf5ff7d5ba73b581bca6b4b9fa0049cd320360abd154b809f8700a8fd3cfaf7ca",published_at:"0xf5ff7d5ba73b581bca6b4b9fa0049cd320360abd154b809f8700a8fd3cfaf7ca",config:{coin_list_id:"0x257eb2ba592a5480bba0a97d05338fab17cc3283f8df6998a0e12e4ab9b84478",launchpad_pools_id:"0xdc3a7bd66a6dcff73c77c866e87d73826e446e9171f34e1c1b656377314f94da",clmm_pools_id:"0x26c85500f5dd2983bf35123918a144de24e18936d0b234ef2b49fbb2d3d6307d",admin_cap_id:"0x1a496f6c67668eb2c27c99e07e1d61754715c1acf86dac45020c886ac601edb8",global_config_id:"0xe1f3db327e75f7ec30585fa52241edf66f7e359ef550b533f89aa1528dd1be52",coin_list_handle:"0x3204350fc603609c91675e07b8f9ac0999b9607d83845086321fca7f469de235",launchpad_pools_handle:"0xae67ff87c34aceea4d28107f9c6c62e297a111e9f8e70b9abbc2f4c9f5ec20fd",clmm_pools_handle:"0xd28736923703342b4752f5ed8c2f2a5c0cb2336c30e1fed42b387234ce8408ec"}},clmm_pool:{package_id:"0x0868b71c0cba55bf0faf6c40df8c179c67a4d0ba0e79965b68b3d72d7dfbf666",published_at:"0x1c29d658882c40eeb39a8bb8fe58f71a216a918acb3e3eb3b47d24efd07257f2",config:{pools_id:"0xc090b101978bd6370def2666b7a31d7d07704f84e833e108a969eda86150e8cf",global_config_id:"0x6f4149091a5aea0e818e7243a13adcfb403842d670b9a2089de058512620687a",global_vault_id:"0xf3114a74d54cbe56b3e68f9306661c043ede8c6615f0351b0c3a93ce895e1699",admin_cap_id:""}},integrate:{package_id:"0x8627c5cdcd8b63bc3daa09a6ab7ed81a829a90cafce6003ae13372d611fbb1a9",published_at:"0xf1a5d0c5b0593e41d13f9684ca91365bdfe54a98836c1d33c90e361a031fac74",version:6},deepbook:{package_id:"0x000000000000000000000000000000000000000000000000000000000000dee9",published_at:"0x000000000000000000000000000000000000000000000000000000000000dee9"},deepbook_endpoint_v2:{package_id:"0xa34ffca2c6540e1ca9e53963ab43e7b1eed7b82e37696c743bb7c6179c15dfa6",published_at:"0xa34ffca2c6540e1ca9e53963ab43e7b1eed7b82e37696c743bb7c6179c15dfa6"},aggregatorUrl:"https://api-sui.devcetus.com/router",swapCountUrl:"https://api-sui.devcetus.com/v2/sui/swap/count"},Fs={launchpad:{package_id:"0x3beee8416089a5cbff9cfd5c0a2ce2937b0452dc7e2a3ab4dc431c7be05c2335",published_at:"0x3beee8416089a5cbff9cfd5c0a2ce2937b0452dc7e2a3ab4dc431c7be05c2335",config:{pools_id:"0xccc10403ab3da4ae943847908e0e674fe1fdab81c6383e4c6dcd0eea0edade3d",admin_cap_id:"0x8a72713049dbcfc40902ff209dc5e6066fe455d152baa235957c84d7a3b875ed",config_cap_id:"0x16492b4252b01debb60f8a825334020d7fdb9d895b52f8139c98618de30817fc"}},ido:{package_id:"0x1352bf18ef20458f7cc773852d4a90b240015a6a54479dda3a1debfc500bf044",published_at:"0xbd09a0889ea9970b821512428bab3e2fd01e16809a90a325cd3b3d3573eab6a4",config:{pools_id:"0x346bee25ab4d15bcfa9484ef5ebd4d7c94eb665ebaa745ff4094936a7f59a8b1",admin_cap_id:"0xc1bb19a24d3bb65dfd4f3835637b63347c223c67cde4b0888f1a857974f33cbb",package_version_id:"0x3ccf1b38e3259e638b980d4e6b49eac8c5aa94d3cb2ace5e75f0a551c8e67e5e"}},xcetus:{package_id:"0xdebaab6b851fd3414c0a62dbdf8eb752d6b0d31f5cfce5e38541bc6c6daa8966",published_at:"0xdebaab6b851fd3414c0a62dbdf8eb752d6b0d31f5cfce5e38541bc6c6daa8966",config:{xcetus_manager_id:"0x3be34cbad122c8b100ed7157d762b9610e68b3c65734e08bc3c3baf857da807d",lock_manager_id:"0x7c67e805182e3fecd098bd68a6b06c317f28f8c6249bd771e07904a10b424e60",lock_handle_id:"0xc5f3bbfefe9a45c13da7a34bc72cac122ee45d633690476a8ac56bd2c4e78c86"}},xcetus_dividends:{package_id:"0x20d948d640edd0c749f533d41efc5f843f212d441220324ad7959c6e1d281828",published_at:"0x20d948d640edd0c749f533d41efc5f843f212d441220324ad7959c6e1d281828",config:{dividend_manager_id:"0x13b7facb704fae1d199ff0038b8acabc253415a77d142b39189dee97d457e442",dividend_admin_id:"0x5eb78463007422d4130b21f61c180bcd190819b7792f56e00a61df3b8fb928ef",dividend_settle_id:"0x495095e13a170ff494d242ae44ac2c7453011ca6c33cff27498010105e10e4b4",venft_dividends_id:"",venft_dividends_id_v2:""}},cetus_faucet:{package_id:"0x1a69aee6be709054750949959a67aedbb4200583b39586d5e3eabe57f40012c7",published_at:"0x1a69aee6be709054750949959a67aedbb4200583b39586d5e3eabe57f40012c7"},xtoken:{package_id:"",published_at:"",config:{xtoken_manager_id:"",lock_manager_id:"",lock_handle_id:""}},xtoken_dividends:{package_id:"",published_at:"",config:{dividend_manager_id:"",dividend_admin_id:"",dividend_settle_id:""}},token_faucet:{package_id:"",published_at:""},booster:{package_id:"",published_at:"",config:{booster_config_id:"",booster_pool_handle:""}},maker_bonus:{package_id:"",published_at:"",config:{maker_config_id:"",maker_pool_handle:""}},liquidity_stratefy:{package_id:"",published_at:"",version:void 0,config:void 0},vaults:{package_id:"0x25cff94bdb454bae6a5565d09047bfe2b230025ef3bd2199622ec48d854b86b9",published_at:"0x25cff94bdb454bae6a5565d09047bfe2b230025ef3bd2199622ec48d854b86b9",config:{admin_cap_id:"0x9b2d6f5be2650d16d27cd630c4539a76d7793970343ed3cbb023e13f1637c07c",vaults_manager_id:"0xc0a1a937df08880e395d85014ff40c74f13abe7a53abdbffea36f51adaaaf79e",vaults_pool_handle:"0x3ab02203de753de9c8198cc0ce7594dc960878f2c34c5c5a4b7742082241860a"}},limit_order:{package_id:"",published_at:"",version:1,config:{rate_orders_indexer_id:"",rate_orders_indexer_handle:"",global_config_id:"",token_list_handle:"",user_orders_indexer_id:"",user_orders_indexer_handle:""}},frams:{package_id:"0xfa0d98e99c1dbdbea1b0fe089fa93ebab40a7719ae4160c42cc78ebfe029fda0",published_at:"0xfa0d98e99c1dbdbea1b0fe089fa93ebab40a7719ae4160c42cc78ebfe029fda0",config:{global_config_id:"0x5082c7a5ee9a758025d7b0a5e8aa08b56625c7cd535b8909d2b7993991e229cc",rewarder_manager_id:"0xe789e092dbd9dceadbe89350c4761a6f2e11647aab97f09746a01b151926cc0e",rewarder_manager_handle:"0x7e7dd42392b5d82564dc9ad5093a111c5f0598cc9f806cff257d7dacb71f7837",admin_cap_id:"0x4ec248bca2d1fc05f39fd7491ab490464a46d128624caa4d3c2a66d957ef40b0"}},dca:{package_id:"",published_at:"",version:0,config:{admin_cap_id:"",global_config_id:"",indexer_id:"",user_indexer_id:"",in_coin_whitelist_id:"",out_coin_whitelist_id:""}}},yt=(o,t)=>{let e=o==="sui:mainnet"?Ws:Us,n=new Ns(e);return n.senderAddress=t.address,n},j=(o,t)=>{let e=yt(o,t),n=o==="sui:mainnet"?Ls:Fs;return new Ms(n,e)},qs="https://api-sui.cetus.zone/router_v2/find_routes",lr=(o,t)=>{let e=new Es({url:"https://fullnode.mainnet.sui.io/"});return new Bs(qs,t.address,e,js.Mainnet)};var dr=async(o,t,e)=>await yt(e,t).Position.createAddLiquidityFixTokenPayload(o?.parameter,o?.gasEstimateArg),ur=async(o,t,e)=>await yt(e,t).Position.createAddLiquidityFixTokenPayload(o?.parameter,o?.gasEstimateArg),pr=async(o,t,e)=>await yt(e,t).Position.closePositionTransactionPayload(o),mr=async(o,t,e)=>await yt(e,t).Position.removeLiquidityTransactionPayload(o),fr=async(o,t,e)=>await yt(e,t).Rewarder.collectRewarderTransactionPayload(o);var De=class o extends b{constructor(e){super(e);this.data=e}txType=$s.Other;txSubType="OpenAndAddLiquidity";async build(e){let{account:n,network:a}=e,{txbParams:r}=this.data;return await dr(r,n,a)}static fromData(e){return new o(e)}};import{TransactionType as Qs}from"@msafe/sui3-utils";var Oe=class o extends b{constructor(e){super(e);this.data=e}txType=Qs.Other;txSubType="ClaimFeeAndMining";async build(e){let{account:n,network:a}=e,{txbParams:r}=this.data;return await fr(r,n,a)}static fromData(e){return new o(e)}};import{TransactionType as Vs}from"@msafe/sui3-utils";var Pe=class o extends b{constructor(e){super(e);this.data=e}txType=Vs.Other;txSubType="DecreaseLiquidity";async build(e){let{account:n,network:a}=e,{txbParams:r}=this.data;return await mr(r,n,a)}static fromData(e){return new o(e)}};import{TransactionType as Hs}from"@msafe/sui3-utils";var br=async(o,t,e)=>await j(e,t).Farms.openPositionAddLiquidityStakePaylod(o),gr=async(o,t,e)=>await j(e,t).Farms.addLiquidityFixCoinPayload(o),hr=async(o,t,e)=>await j(e,t).Farms.removeLiquidityPayload(o),yr=async(o,t,e)=>await j(e,t).Farms.removeLiquidityPayload(o),Sr=async(o,t,e)=>await j(e,t).Farms.claimFeeAndClmmReward(o),wr=async(o,t,e)=>await j(e,t).Farms.harvestPayload(o),Tr=async(o,t,e)=>{let n=j(e,t),a=Object.values(o);return await n.Farms.batchHarvestPayload(a)},Cr=async(o,t,e)=>await j(e,t).Farms.depositPayload(o),Ir=async(o,t,e)=>await j(e,t).Farms.withdrawPayload(o);var _e=class o extends b{constructor(e){super(e);this.data=e}txType=Hs.Other;txSubType="FarmingOpenAndAddLiquidity";async build(e){let{account:n,network:a}=e,{txbParams:r}=this.data;return await br(r,n,a)}static fromData(e){return new o(e)}};import{TransactionType as Ks}from"@msafe/sui3-utils";var Re=class o extends b{constructor(e){super(e);this.data=e}txType=Ks.Other;txSubType="FarmingBatchHarvest";async build(e){let{account:n,network:a}=e,{txbParams:r}=this.data;return await Tr(r,n,a)}static fromData(e){return new o(e)}};import{TransactionType as Gs}from"@msafe/sui3-utils";var Be=class o extends b{constructor(e){super(e);this.data=e}txType=Gs.Other;txSubType="FarmingClaimFeeAndReward";async build(e){let{account:n,network:a}=e,{txbParams:r}=this.data;return await Sr(r,n,a)}static fromData(e){return new o(e)}};import{TransactionType as zs}from"@msafe/sui3-utils";var je=class o extends b{constructor(e){super(e);this.data=e}txType=zs.Other;txSubType="FarmingDecreaseLiquidity";async build(e){let{account:n,network:a}=e,{txbParams:r}=this.data;return await hr(r,n,a)}static fromData(e){return new o(e)}};import{TransactionType as Js}from"@msafe/sui3-utils";var Me=class o extends b{constructor(e){super(e);this.data=e}txType=Js.Other;txSubType="FarmingHarvest";async build(e){let{account:n,network:a}=e,{txbParams:r}=this.data;return await wr(r,n,a)}static fromData(e){return new o(e)}};import{TransactionType as Xs}from"@msafe/sui3-utils";var Ne=class o extends b{constructor(e){super(e);this.data=e}txType=Xs.Other;txSubType="FarmingIncreaseLiquidity";async build(e){let{account:n,network:a}=e,{txbParams:r}=this.data;return await gr(r,n,a)}static fromData(e){return new o(e)}};import{TransactionType as Ys}from"@msafe/sui3-utils";var Ee=class o extends b{constructor(e){super(e);this.data=e}txType=Ys.Other;txSubType="FarmingRemoveLiquidity";async build(e){let{account:n,network:a}=e,{txbParams:r}=this.data;return await yr(r,n,a)}static fromData(e){return new o(e)}};import{TransactionType as Zs}from"@msafe/sui3-utils";var We=class o extends b{constructor(e){super(e);this.data=e}txType=Zs.Other;txSubType="FarmingStake";async build(e){let{account:n,network:a}=e,{txbParams:r}=this.data;return await Cr(r,n,a)}static fromData(e){return new o(e)}};import{TransactionType as tc}from"@msafe/sui3-utils";var Le=class o extends b{constructor(e){super(e);this.data=e}txType=tc.Other;txSubType="FarmingUnstake";async build(e){let{account:n,network:a}=e,{txbParams:r}=this.data;return await Ir(r,n,a)}static fromData(e){return new o(e)}};import{TransactionType as ec}from"@msafe/sui3-utils";var Ue=class o extends b{constructor(e){super(e);this.data=e}txType=ec.Other;txSubType="IncreaseLiquidity";async build(e){let{account:n,network:a}=e,{txbParams:r}=this.data;return await ur(r,n,a)}static fromData(e){return new o(e)}};import{TransactionType as nc}from"@msafe/sui3-utils";var Fe=class o extends b{constructor(e){super(e);this.data=e}txType=nc.Other;txSubType="RemoveLiquidity";async build(e){let{account:n,network:a}=e,{txbParams:r}=this.data;return await pr(r,n,a)}static fromData(e){return new o(e)}};import{TransactionType as rc}from"@msafe/sui3-utils";import{restituteMsafeFastRouterSwapParams as oc}from"@cetusprotocol/aggregator-sdk";import{Transaction as ac}from"@mysten/sui/transactions";var kr=async(o,t,e)=>{let n=lr(e,t),a=new ac;return await n.fastRouterSwap({...o,routers:oc(o.routers),txb:a}),a};var qe=class o extends b{constructor(e){super(e);this.data=e}txType=rc.Other;txSubType="AggregatorSwap";async build(e){let{account:n,network:a}=e,{txbParams:r}=this.data;return await kr(r,n,a)}static fromData(e){return new o(e)}};import{TransactionType as sc}from"@msafe/sui3-utils";import{Transaction as ic}from"@mysten/sui/transactions";var xr={package_id:"0x355714a1eeb7ab1d80902da6c92001170cda1212edf524c32aa308a3ac177c31",published_at:"0x355714a1eeb7ab1d80902da6c92001170cda1212edf524c32aa308a3ac177c31",cetus_coin_type:"0x06864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b::cetus::CETUS"},vr=async(o,t,e)=>{console.log("getVestingRedeemTxb txbParams: ",o),console.log("getVestingRedeemTxb account: ",t),console.log("getVestingRedeemTxb network: ",e);let{pool:n,nftId:a,periods:r,CLOCK_ADDRESS:i}=o,s=new ic;return r.forEach(c=>{s.moveCall({target:`${xr.published_at}::router::redeem`,typeArguments:[xr.cetus_coin_type],arguments:[s.object(n),s.object(a),s.pure(c),s.object(i)]})}),s};var $e=class o extends b{constructor(e){super(e);this.data=e}txType=sc.Other;txSubType="VestingRedeem";async build(e){let{account:n,network:a}=e,{txbParams:r}=this.data;return await vr(r,n,a)}static fromData(e){return new o(e)}};import{TransactionType as lc}from"@msafe/sui3-utils";import{Transaction as cc}from"@mysten/sui/transactions";var Ar=async(o,t,e)=>{let n=j(e,t),a=new cc;return await n.XCetusModule.convertPayload(o,a)},Dr=async(o,t,e)=>await j(e,t).XCetusModule.redeemLockPayload(o),Or=async(o,t,e)=>await j(e,t).XCetusModule.redeemDividendV3Payload(o.phases,o.venft_id,o.bonus_types,o.bonus_types_v2,o.xTokenType),Pr=async(o,t,e)=>await j(e,t).XCetusModule.cancelRedeemPayload(o),_r=async(o,t,e)=>await j(e,t).XCetusModule.redeemPayload(o);var Qe=class o extends b{constructor(e){super(e);this.data=e}txType=lc.Other;txSubType="xCETUSCancelRedeem";async build(e){let{account:n,network:a}=e,{txbParams:r}=this.data;return await Pr(r,n,a)}static fromData(e){return new o(e)}};import{TransactionType as dc}from"@msafe/sui3-utils";var Ve=class o extends b{constructor(e){super(e);this.data=e}txType=dc.Other;txSubType="xCETUSClaimStakingRwewards";async build(e){let{account:n,network:a}=e,{txbParams:r}=this.data;return await Or(r,n,a)}static fromData(e){return new o(e)}};import{TransactionType as uc}from"@msafe/sui3-utils";var He=class o extends b{constructor(e){super(e);this.data=e}txType=uc.Other;txSubType="xCETUSConvert";async build(e){let{account:n,network:a}=e,{txbParams:r}=this.data;return await Ar(r,n,a)}static fromData(e){return new o(e)}};import{TransactionType as pc}from"@msafe/sui3-utils";var Ke=class o extends b{constructor(e){super(e);this.data=e}txType=pc.Other;txSubType="xCETUSRedeem";async build(e){let{account:n,network:a}=e,{txbParams:r}=this.data;return await _r(r,n,a)}static fromData(e){return new o(e)}};import{TransactionType as mc}from"@msafe/sui3-utils";var Ge=class o extends b{constructor(e){super(e);this.data=e}txType=mc.Other;txSubType="xCETUSRedeemLock";async build(e){let{account:n,network:a}=e,{txbParams:r}=this.data;return await Dr(r,n,a)}static fromData(e){return new o(e)}};var ze=class{application="cetus";supportSDK="@mysten/sui";async deserialize(t){console.log("Cetus helper deserialize input: ",t);let{txbParams:e,action:n}=t;return{txType:fc.Other,txSubType:n,intentionData:{txbParams:{...e},action:n}}}async build(t){let{suiClient:e,account:n,network:a}=t,r;switch(t.txSubType){case"OpenAndAddLiquidity":r=De.fromData(t.intentionData);break;case"IncreaseLiquidity":r=Ue.fromData(t.intentionData);break;case"DecreaseLiquidity":r=Pe.fromData(t.intentionData);break;case"RemoveLiquidity":r=Fe.fromData(t.intentionData);break;case"ClaimFeeAndMining":r=Oe.fromData(t.intentionData);break;case"FarmingOpenAndAddLiquidity":r=_e.fromData(t.intentionData);break;case"FarmingIncreaseLiquidity":r=Ne.fromData(t.intentionData);break;case"FarmingDecreaseLiquidity":r=je.fromData(t.intentionData);break;case"FarmingRemoveLiquidity":r=Ee.fromData(t.intentionData);break;case"FarmingClaimFeeAndReward":r=Be.fromData(t.intentionData);break;case"FarmingHarvest":r=Me.fromData(t.intentionData);break;case"FarmingBatchHarvest":r=Re.fromData(t.intentionData);break;case"FarmingStake":r=We.fromData(t.intentionData);break;case"FarmingUnstake":r=Le.fromData(t.intentionData);break;case"xCETUSConvert":r=He.fromData(t.intentionData);break;case"xCETUSRedeemLock":r=Ge.fromData(t.intentionData);break;case"xCETUSClaimStakingRwewards":r=Ve.fromData(t.intentionData);break;case"xCETUSCancelRedeem":r=Qe.fromData(t.intentionData);break;case"xCETUSRedeem":r=Ke.fromData(t.intentionData);break;case"VestingRedeem":r=$e.fromData(t.intentionData);break;case"AggregatorSwap":r=qe.fromData(t.intentionData);break;default:throw new Error("not implemented")}return r.build({suiClient:e,account:n,network:a})}};import{TransactionType as pl}from"@msafe/sui3-utils";import bc from"sort-keys-recursive";var y=class{constructor(t){this.data=t}serialize(){return JSON.stringify(bc(this.data))}};import{getFullnodeUrl as Je}from"@mysten/sui.js/client";var ba={};ar(ba,{contractId:()=>yc,default:()=>Ic,feeObjId:()=>Tc,roleObjId:()=>Sc,status:()=>hc,transaction:()=>gc,upgradeCapObjId:()=>Cc,vaultObjId:()=>wc});var gc="DiBZq4UmVVYiRL6ZJmFKYoHcxtxqrhsCXSkFyT7wUr3j",hc="success",yc="0x81c960dc653975fbd0072deca8afb92d322898c911622898ba1b2e3ad0c4bd8d",Sc="0xc6ec0bdee0bb59a72077e9acd2f42457043cf47080b3d3fad4d39abf28bba63a",wc="0xbc4021387fbac149119fd24e92be9e58f745774292f3a2a12e2ac6daf5363e1d",Tc="0x4178f63970fe2daeb256dc5730ad172e82b3e8eb45f31b33e0daae72cd35e1e1",Cc="0xe1e9aa7d222d151bfe6dd83358b0d7fdcb11260f710800cfaf7ccc1b1e245115",Ic={transaction:gc,status:hc,contractId:yc,roleObjId:Sc,vaultObjId:wc,feeObjId:Tc,upgradeCapObjId:Cc};var ga={};ar(ga,{contractId:()=>vc,default:()=>_c,feeObjId:()=>Oc,roleObjId:()=>Ac,status:()=>xc,transaction:()=>kc,upgradeCapObjId:()=>Pc,vaultObjId:()=>Dc});var kc="855FNDV8o8Z3fWULPnQo9qdhLJpsg7wZrkCpNyfw9KfB",xc="success",vc="0xc357c3985e8fb875d6b37141497af660779aa1bab0ec489b2213efd74067d1fa",Ac="0x5ab49bdf9fd1413e328ef242b3f8d83dde791b38a0b627bfc87fb25c010d34f1",Dc="0xb483558770d8eb26007f193b75db40f0a45f2e36863a687625885d4de6993378",Oc="0x48453fc4d7cde3fe35aad89e5dfb496608a6a55ea529a1c0274681a808627f94",Pc="0x34279779a0d0d36bd5044b04830d607fa1b0ecf316548c8ac3a44151e4f1a42a",_c={transaction:kc,status:xc,contractId:vc,roleObjId:Ac,vaultObjId:Dc,feeObjId:Oc,upgradeCapObjId:Pc};var Rc=Je("testnet"),Bc=Je("testnet"),jc=Je("mainnet"),Mc=Je("mainnet"),Nc="https://bc3p6l5unl.execute-api.us-west-1.amazonaws.com/prod",Ec="https://rolsbkota7.execute-api.us-west-1.amazonaws.com/prod",Wc="https://6p6mkx33ne.execute-api.us-west-1.amazonaws.com/prod",Lc="https://xrae3mrjv5.execute-api.us-west-1.amazonaws.com/prod",Rr=ba,Br=ga,Uc=new Map([["dev",{env:"dev",rpc:{url:Rc},backend:{url:Nc},contract:Rr}],["stg",{env:"stg",rpc:{url:Bc},backend:{url:Ec},contract:Rr}],["prev",{env:"prev",rpc:{url:jc},backend:{url:Wc},contract:Br}],["prod",{env:"prod",rpc:{url:Mc},backend:{url:Lc},contract:Br}]]);function jr(o,t){let e=Uc.get(o);if(!e)throw new Error(`Env not supported: ${o}`);return t&&t.rpc&&(e.rpc=t.rpc),t&&t.backend&&(e.backend=t.backend),t&&t.contract&&(e.contract=t.contract),e}import{SuiClient as qc}from"@mysten/sui.js/client";var k=class extends Error{mpayErrorCode;context;constructor(t,e,n={}){let{cause:a,context:r}=n;a?super(`[MPay] ${e}: ${a}`):super(`[MPay] ${e}`),this.mpayErrorCode=t,this.context=r}};var Xe=class extends k{constructor(){super(11,"Backend is not specified")}};var Ye=class extends k{constructor(){super(1,"Wallet not connected")}};import Ct,{AxiosError as Fc}from"axios";var Tt=class extends k{constructor(t,e){super(10,t,{context:e})}};var Ze=class o{constructor(t){this.apiURL=t}static parseResponseData(t){if(t instanceof Fc)throw new Tt(t.response?.statusText);if(t.status===200){if(t.data.success)return t.data.data;throw new Tt(t.data.code)}throw new Tt(t.status.toString())}async getIncomingStreams(t,e){let n=await Ct.post(`${this.apiURL}/stream`,{recipient:t,...e});return o.parseResponseData(n)}async getOutgoingStreams(t,e){let n=await Ct.post(`${this.apiURL}/stream`,{sender:t,...e});return o.parseResponseData(n)}async getStreamHistory(t){let e=await Ct.post(`${this.apiURL}/stream-events`,t),n=o.parseResponseData(e);return n.data.forEach(a=>{let r=a;return r.data.type==="create_stream"?r.data.balance=BigInt(r.data.balance):r.data.type==="cancel_stream"?r.data.withdrawAmount=BigInt(r.data.withdrawAmount):r.data.type==="claim"||r.data.type==="auto_claim"?r.data.claimAmount=BigInt(r.data.claimAmount):r.data.type==="set_auto_claim"&&(r.data.enabled=!!r.data.enabled),r.createdAt=new Date(r.createdAt),r}),n}async getAllCoinTypes(t){let e=await Ct.post(`${this.apiURL}/stream-info`,{address:t});return o.parseResponseData(e)}async getAllRecipients(t,e){let n=await Ct.post(`${this.apiURL}/stream-info`,{sender:t,status:e});return o.parseResponseData(n)}async getAllSenders(t,e){let n=await Ct.post(`${this.apiURL}/stream-info`,{recipient:t,status:e});return o.parseResponseData(n)}};var It=class o{signer;suiClient;envConfig;_backend;constructor(t){this.envConfig=t,this.suiClient=new qc({url:t.rpc.url}),t.backend&&(this._backend=new Ze(t.backend.url))}static new(t,e){let n=jr(t,e);return new o(n)}get walletType(){return this.wallet?this.wallet.type:"disconnected"}get backend(){if(!this._backend)throw new Xe;return this._backend}set backend(t){this._backend=t}connectWallet(t){this.signer=t}disconnect(){this.signer=void 0}get wallet(){if(!this.signer)throw new Ye;return this.signer}async walletAddress(){return this.wallet.address()}};import{SUI_TYPE_ARG as ll,normalizeStructTag as dl,normalizeSuiAddress as ai}from"@mysten/sui.js/utils";import{TransactionBlock as rn}from"@mysten/sui.js/transactions";import{TransactionBlock as $r}from"@mysten/sui.js/transactions";import{SUI_TYPE_ARG as Qr,normalizeStructTag as Hc}from"@mysten/sui.js/utils";var ha=50n,tn=10000n,Mr=25n,ya=100000000n;var G=class{constructor(t){this.object=t}moveArg(t){return t.object(this.object)}},Ut=class{constructor(t){this.objects=t}moveArgs(t){return t.makeMoveVec({objects:this.objects.map(e=>t.object(e))})}},at=class o{constructor(t){this.result=t;return new Proxy(this,{set(){throw new Error("The transaction result is a proxy, and does not support setting properties directly")},get(e,n){if(n in e)return Reflect.get(e,n);let a=i=>new o(e.result[i]);if(n===Symbol.iterator)return function*(){let i=0;for(;;)yield a(i),i++};if(typeof n=="symbol")return;let r=parseInt(n,10);if(!(Number.isNaN(r)||r<0))return a(r)}})}moveArg(){return this.result}};import{Buffer as Nr}from"buffer";import{normalizeSuiAddress as $c}from"@mysten/sui.js/utils";var Ft=class extends k{constructor(t,e){super(3,t,{context:e})}};var en=class{constructor(t){this.results=t}callResult(t){return this.results.results[t]}returnValue(t,e){return t.returnValues[e]}getValue(t=0,e=0){let n=this.callResult(t);return this.returnValue(n,e)}getAddress(t=0,e=0){let[n,a]=this.getValue(t,e);if(a!=="address")throw new Ft("Invalid contract return type.",{ctx:{expectType:"address",gotType:a}});return $c(Nr.from(n).toString("hex"))}getU64(t=0,e=0){let[n,a]=this.getValue(t,e);if(a!=="u64")throw new Ft("Invalid contract return type.",{ctx:{expectType:"u64",gotType:a}});return Nr.from(n).readBigInt64LE()}};import{bcs as Wr}from"@mysten/sui.js/bcs";var A=class extends k{constructor(t,e,n){super(2,`Invalid input: ${t}`,{context:{fieldKey:e,fieldValue:n}})}};var Lr={groupId:"string",name:"string"},Qc=64;function Ur(o){return Fr(o),Wr.ser(Lr,o).toString("base64")}function qt(o){let t=Wr.de(Lr,o,"base64");return Fr(t),t}function Fr(o){if(!Er(o.name))throw new A("Invalid metadata: Name contains unknown character");if(!Er(o.groupId))throw new A("Invalid metadata: Group ID contains unknown character");if(o.name.length>Qc)throw new A("Invalid metadata: Name exceed max length 64")}function Er(o){return/^[\x00-\x7F]+$/.test(o)}import{normalizeStructTag as nn}from"@mysten/sui.js/utils";function on(o,t){return nn(o)===nn(t)}function rt(o,t){return nn(o)===nn(t)}var an="txn.gas";import{nanoid as Vc}from"nanoid";function qr(){return Vc()}var St=class o{constructor(t,e,n){this.globals=t;this.feeContract=e;this.streamContract=n}static convertCreateStreamInfoToInternal(t){return{metadata:Ur({name:t.name,groupId:qr()}),coinType:Hc(t.coinType),recipients:t.recipients.map(e=>({address:e.address,cliffAmount:e.cliffAmount,amountPerEpoch:e.amountPerStep})),epochInterval:t.interval,numberEpoch:t.steps,startTime:t.startTimeMs,cancelable:t.cancelable}}async buildCreateStreamTransactionBlock(t){let e=new $r,n=this.calculateFeesInternal(t),a=this.getCreateStreamCoinRequests(t,n),r=await this.wallet.requestCoins(a),i=await this.addMergeCoins(e,r[0]),s;a.length>1?s=await this.addMergeCoins(e,r[1]):s=i;for(let c=0;c<t.recipients.length;c++){let l=t.recipients[c],d=this.amountForRecipient(l,t.numberEpoch),u=this.getStreamFeeLocal(d),[p]=e.splitCoins(i,[e.pure(d+u,"u64")]),[m]=e.splitCoins(s,[e.pure(this.flatSuiFee,"u64")]);this.streamContract.createStream(e,{paymentCoin:new at(p),flatFeeCoin:new at(m),metadata:t.metadata,recipient:l.address,timeStart:t.startTime,cliff:l.cliffAmount,epochInterval:t.epochInterval,numEpoch:t.numberEpoch,amountPerEpoch:l.amountPerEpoch,cancelable:t.cancelable,coinType:t.coinType})}return e}calculateCreateStreamFees(t){let e=o.convertCreateStreamInfoToInternal(t);return this.calculateFeesInternal(e)}feeParams(){return{createFeePercent:{numerator:ha,denominator:tn},claimFeePercent:{numerator:Mr,denominator:tn},flatFeePerStream:ya}}async addMergeCoins(t,e){let n;return e.mergedCoins&&e.mergedCoins.length?(t.mergeCoins(t.object(e.primaryCoin),e.mergedCoins.map(a=>t.object(a))),n=t.object(e.primaryCoin)):e.primaryCoin===an?n=t.gas:n=t.object(e.primaryCoin),n}getCreateStreamCoinRequests(t,e){let n=t.coinType;return on(n,Qr)?[{coinType:n,amount:e.totalAmount+e.streamFeeAmount+e.flatFeeAmount}]:[{coinType:n,amount:e.totalAmount+e.streamFeeAmount},{coinType:Qr,amount:e.flatFeeAmount}]}calculateFeesInternal(t){let e=t.recipients.reduce((a,r)=>{let i=this.amountForRecipient(r,t.numberEpoch),s=this.getStreamFeeLocal(i);return{totalAmount:a.totalAmount+i,streamFeeAmount:a.streamFeeAmount+s}},{totalAmount:0n,streamFeeAmount:0n});return{flatFeeAmount:BigInt(t.recipients.length)*this.flatSuiFee,...e}}amountForRecipient(t,e){return BigInt(t.amountPerEpoch)*BigInt(e)+BigInt(t.cliffAmount)}get flatSuiFee(){return ya}getStreamFeeLocal(t){return t*ha/tn}async getStreamFeeRemote(t){let e=this.feeContract.streamingFee(new $r,t),n=await this.globals.suiClient.devInspectTransactionBlock({sender:await this.globals.walletAddress(),transactionBlock:e});return new en(n).getU64()}get wallet(){return this.globals.wallet}};import{Transactions as Hr}from"@mysten/sui.js/transactions";var Vr="0x0000000000000000000000000000000000000000000000000000000000000006";var kt=class{constructor(t,e,n){this.moduleName=t;this.config=e;this.globals=n}addContractCall(t,e){let n=`${this.config.contractId}::${this.moduleName}::${e.method}`;return t.add(Hr.MoveCall({target:n,arguments:e.arguments.map(a=>a instanceof Ut?a.moveArgs(t):a instanceof G?a.moveArg(t):a instanceof at?a.moveArg():t.pure(a)),typeArguments:e.typeArgs})),t}addTransactionBlock(t,e,n=[],a=[]){t.add(Hr.MoveCall({target:e,arguments:n.map(r=>r instanceof Ut?r.moveArgs(t):r instanceof G?r.moveArg(t):r instanceof at?r.moveArg():t.pure(r)),typeArguments:a}))}makeObject(t){return typeof t=="string"?new G(t):t}vaultObject(){return new G(this.config.vaultObjId)}roleObject(){return new G(this.config.roleObjId)}feeObject(){return new G(this.config.feeObjId)}clockObject(){return new G(Vr)}};var xt=class o extends kt{constructor(e,n){super(o.ModuleName,e,n);this.config=e;this.globals=n}static ModuleName="fee_module";static MethodName={set_streaming_fee:"set_streaming_fee",set_claim_fee:"set_claim_fee",set_streaming_flat_fee:"set_streaming_flat_fee",streaming_flat_fee:"streaming_flat_fee",streaming_fee:"streaming_fee",claim_fee:"claim_fee",fee_denominator:"fee_denominator"};setStreamingFee(e,n){let a=this.roleObject(),r=this.feeObject();return this.addContractCall(e,{method:o.MethodName.set_streaming_fee,arguments:[a,r,n],typeArgs:[]})}setStreamingFlatFee(e,n){let a=this.roleObject(),r=this.feeObject();return this.addContractCall(e,{method:o.MethodName.set_streaming_flat_fee,arguments:[a,r,n],typeArgs:[]})}setClaimFee(e,n){let a=this.roleObject(),r=this.feeObject();return this.addContractCall(e,{method:o.MethodName.set_claim_fee,arguments:[a,r,n],typeArgs:[]})}streamingFee(e,n){let a=this.feeObject();return this.addContractCall(e,{method:o.MethodName.streaming_fee,arguments:[a,n],typeArgs:[]})}claimFee(e,n){return this.addContractCall(e,{method:o.MethodName.claim_fee,arguments:[this.feeObject(),n],typeArgs:[]})}feeDenominator(e){return this.addContractCall(e,{method:o.MethodName.fee_denominator,arguments:[this.feeObject()],typeArgs:[]})}};var z=class o extends kt{constructor(e,n){super(o.ModuleName,e,n);this.config=e;this.globals=n}static ModuleName="stream";static MethodName={create_stream:"create_stream",set_auto_claim:"set_auto_claim",cancel_stream:"cancel_stream",claim_stream:"claim_stream",claim_stream_by_proxy:"claim_stream_by_proxy",stream_current_epoch:"stream_current_epoch",now_milli_seconds:"now_milli_seconds"};createStream(e,n){let a=this.feeObject(),r=this.vaultObject(),i=this.makeObject(n.paymentCoin),s=this.makeObject(n.flatFeeCoin),c=this.clockObject();return this.addContractCall(e,{method:o.MethodName.create_stream,arguments:[a,r,i,s,n.metadata,n.recipient,n.timeStart,n.cliff,n.epochInterval,n.numEpoch,n.amountPerEpoch,n.cancelable,c],typeArgs:[n.coinType]})}setAutoClaim(e,n){let a=this.makeObject(n.streamId);return this.addContractCall(e,{method:o.MethodName.set_auto_claim,arguments:[a,n.enabled],typeArgs:[n.coinType]})}cancelStream(e,n){let a=this.makeObject(n.streamId),r=this.clockObject();return this.addContractCall(e,{method:o.MethodName.cancel_stream,arguments:[a,r],typeArgs:[n.coinType]})}claimStream(e,n){let a=this.makeObject(n.streamId),r=this.clockObject();return this.addContractCall(e,{method:o.MethodName.claim_stream,arguments:[a,r],typeArgs:[n.coinType]})}claimStreamByProxy(e,n){let a=this.makeObject(n.streamId),r=this.vaultObject(),i=this.feeObject(),s=this.clockObject();return this.addContractCall(e,{method:o.MethodName.claim_stream_by_proxy,arguments:[a,r,i,s],typeArgs:[n.coinType]})}get createStreamTarget(){return`${this.config.contractId}::${o.ModuleName}::${o.MethodName.create_stream}`}get setAutoClaimTarget(){return`${this.config.contractId}::${o.ModuleName}::${o.MethodName.set_auto_claim}`}get cancelStreamTarget(){return`${this.config.contractId}::${o.ModuleName}::${o.MethodName.cancel_stream}`}get claimStreamTarget(){return`${this.config.contractId}::${o.ModuleName}::${o.MethodName.claim_stream}`}get claimStreamByProxyTarget(){return`${this.config.contractId}::${o.ModuleName}::${o.MethodName.claim_stream_by_proxy}`}};var vt=class{constructor(t){this.globals=t;let e=t.envConfig.contract;this.feeContract=new xt(e,t),this.streamContract=new z(e,t)}feeContract;streamContract;async createStreams(t){let e=St.convertCreateStreamInfoToInternal(t);return this.createStreamHelper().buildCreateStreamTransactionBlock(e)}createStreamHelper(){return new St(this.globals,this.feeContract,this.streamContract)}setAutoClaim(t,e,n){let a=new rn;return this.streamContract.setAutoClaim(a,{streamId:t,enabled:e,coinType:n})}claimStream(t,e){let n=new rn;return this.streamContract.claimStream(n,{streamId:t,coinType:e})}claimStreamByProxy(t,e){let n=new rn;return this.streamContract.claimStreamByProxy(n,{streamId:t,coinType:e})}cancelStream(t,e){let n=new rn;return this.streamContract.cancelStream(n,{streamId:t,coinType:e}),n}};var O=class extends k{constructor(t,e={}){super(0,t,e)}};async function wa(o){let t=[];for(;await o.hasNext();){let e=await o.next();t.push(e)}return t&&Array.isArray(t[0])?t.flat(1):t}var Sa=class{constructor(t){this.requester=t;this.curPage=void 0,this.init=!0}curPage;init;async hasNext(){if(this.init)return this.curPage||(this.curPage=await this.requester.doNextRequest()),!!this.curPage.data?.length||this.curPage.hasNext;if(!this.curPage)throw new Error("invalid implementation of iterator");return this.curPage.hasNext}async next(){return this.init?(this.init=!1,this.curPage||(this.curPage=await this.requester.doNextRequest()),this.curPage.data):(this.curPage=await this.requester.doNextRequest(),this.curPage.data)}},At=class{constructor(t){this.requester=t;this.pager=new Sa(t),this.curData=[],this.cursor=0}cursor;pager;curData;async hasNext(){return this.cursor<this.curData.length-1?!0:this.pager.hasNext()}async next(){for(this.cursor+=1;this.cursor>=this.curData.length;)if(await this.pager.hasNext())this.curData=await this.pager.next(),this.cursor=0;else throw new Error("not more data");return this.curData[this.cursor]}};var sn=class extends k{constructor(e,n,a){super(4,`Not enough balance: ${e}`,{context:{coinType:e,requestAmount:n,gotAmount:a}});this.coinType=e;this.requestAmount=n;this.gotAmount=a}};var Kc=25;async function Kr(o,t,e,n="0x2::sui::SUI",a=Kc){let r=new Ta(o,t,n,a),i=BigInt(0),s=[];for(;await r.hasNext()&&i<e;){let c=await r.next();c&&(s.push(c),i+=BigInt(c.balance))}if(i<e)throw new sn(n,e,i);return s}var Ta=class extends At{constructor(e,n,a,r){super(new Ca(e,n,a,r));this.suiClient=e;this.owner=n;this.coinType=a;this.reqPageSize=r}},Ca=class{constructor(t,e,n,a){this.suiClient=t;this.owner=e;this.coinType=n;this.reqPageSize=a;if(a<=0)throw new O("Invalid reqPageSize")}nextCursor;async doNextRequest(){let t=await this.suiClient.getCoins({owner:this.owner,coinType:this.coinType,cursor:this.nextCursor,limit:this.reqPageSize});return this.nextCursor=t.nextCursor,{data:t.data,hasNext:t.hasNextPage}}};import{TransactionBlock as un}from"@mysten/sui.js/transactions";import{normalizeStructTag as zr,parseStructTag as Jc}from"@mysten/sui.js/utils";import{DateTime as Xc}from"luxon";var cn=class extends k{constructor(){super(7,"Connected wallet is not creator")}};var $t=class extends k{constructor(){super(8,"Connected wallet is not recipient")}};var Qt=class extends k{constructor(t,e){super(6,t,{context:e})}};var ln=class extends k{constructor(t){super(5,"Stream not found",{context:{streamId:t}})}};import{DateTime as Gc,Duration as zc}from"luxon";var Gr=(1n<<64n)-1n,dn=1e3;function Ia(o){let t;typeof o=="number"?t=o:typeof o=="bigint"?t=Number(o):t=o.toMillis();let e=Math.round(t/dn);return Gc.fromMillis(e*dn)}function ka(o){let t;typeof o=="number"?t=o:typeof o=="bigint"?t=Number(o):t=o.toMillis();let e=Math.round(t/dn);return zc.fromMillis(e*dn)}var it=class o{constructor(t,e,n){this.globals=t;this.streamId=e;this.rawData=n;this.streamContract=new z(t.envConfig.contract,t)}streamContract;type="Stream";static async new(t,e){let n=await o.fetchStreamData(t,e);return new o(t,e,n)}static fromObjectData(t,e,n){let a=o.parseRawStreamData(e,n);return new o(t,e,a)}get info(){return{name:this.name,creator:this.creator,coinType:this.coinType,totalAmount:this.totalAmount,start:this.timeStart,end:this.timeEnd,cancelable:this.cancelable,cliffAmount:this.cliff,duration:this.duration,interval:this.interval,steps:this.totalSteps,nextReleaseDate:this.nextReleaseDate,nextReleaseAmount:this.nextReleaseAmount,groupId:this.groupId,streamId:this.streamId,recipient:this.recipient,progress:this.progress,autoClaim:this.autoClaim}}get groupCommonInfo(){return{name:this.name,groupId:this.groupId,creator:this.creator,start:this.timeStart,interval:this.interval,steps:this.totalSteps,cancelable:this.cancelable}}async refresh(){this.rawData=await o.fetchStreamData(this.globals,this.streamId)}refreshWithData(t){if(t.data?.objectId!==this.streamId)throw new O("Object Id does not align");this.rawData=o.parseRawStreamData(this.streamId,t)}async historyEvents(t){return this.globals.backend.getStreamHistory({streamId:this.streamId,pagination:t})}async cancel(){if(await this.globals.walletAddress()!==this.creator)throw new cn;let t=new un;return this.streamContract.cancelStream(t,{streamId:this.streamId,coinType:this.coinType}),t}async claim(){if(await this.globals.walletAddress()!==this.recipient)throw new $t;let t=new un;return this.streamContract.claimStream(t,{streamId:this.streamId,coinType:this.coinType}),t}async setAutoClaim(t){if(await this.globals.walletAddress()!==this.recipient)throw new $t;let e=new un;return this.streamContract.setAutoClaim(e,{streamId:this.streamId,coinType:this.coinType,enabled:t}),e}async claimByProxy(){let t=new un;return this.streamContract.claimStreamByProxy(t,{streamId:this.streamId,coinType:this.coinType}),t}get wallet(){return this.globals.wallet}get client(){return this.globals.suiClient}get coinType(){return zr(this.rawData.coinType)}get progress(){return{status:this.streamStatus,total:this.totalAmount,streamed:this.streamedAmount,claimed:this.claimedAmount,claimable:this.claimable,canceled:this.canceledAmount}}get balance(){return this.rawData.balance}get autoClaim(){return this.rawData.autoClaim}get amountPerEpoch(){return this.rawData.config.amountPerEpoch}get cancelable(){return this.rawData.config.cancelable}get cliff(){return this.rawData.config.cliff}get creator(){return this.rawData.config.creator}get interval(){return ka(this.rawData.config.epochInterval)}get groupId(){let{metadata:t}=this.rawData.config;return qt(t).groupId}get name(){let{metadata:t}=this.rawData.config;return qt(t).name}get recipient(){return this.rawData.config.recipient}get timeStart(){return Ia(this.rawData.config.timeStart)}get duration(){let t=this.rawData.config,e=t.epochInterval*t.totalEpoch;return ka(e)}get timeEnd(){return this.timeStart.plus(this.duration)}get totalSteps(){return this.rawData.config.totalEpoch}get claimable(){return this.streamedAmount-this.claimedAmount}get nextReleaseDate(){return this.currentEpoch===-1n?this.timeStart:this.currentEpoch>=this.totalSteps||this.isCanceled?null:Ia((this.currentEpoch+1n)*this.rawData.config.epochInterval+this.rawData.config.timeStart)}get nextReleaseAmount(){return this.currentEpoch===-1n?this.cliff:this.currentEpoch>=this.totalSteps||this.isCanceled?null:this.amountPerEpoch}get streamStatus(){let t=this.rawData.status.status;return t===16?"CANCELED":t===17?"SETTLED":t===1?"COMPLETED":this.currentEpoch>=this.totalSteps?"STREAMED":"STREAMING"}get streamedAmount(){return this.currentEpoch===-1n?0n:this.isCanceled?this.rawData.status.epochCanceled*this.amountPerEpoch+this.cliff:this.currentEpoch*this.amountPerEpoch+this.cliff}get claimedAmount(){return this.rawData.status.epochClaimed===Gr?0n:this.rawData.status.epochClaimed*this.amountPerEpoch+this.cliff}get currentEpoch(){let t=Xc.now().toMillis(),e=this.timeStart.toMillis();if(t<e)return-1n;let n=Math.floor((t-e)/Number(this.rawData.config.epochInterval));return BigInt(n)>Number(this.rawData.config.totalEpoch)?this.rawData.config.totalEpoch:BigInt(n)}get totalAmount(){let t=this.rawData.config;return t.amountPerEpoch*t.totalEpoch+t.cliff}get isCanceled(){let t=this.rawData.status.status;return t===16||t===17}get canceledAmount(){return this.isCanceled?this.totalAmount-this.streamedAmount:0n}static async fetchStreamData(t,e){let n=await t.suiClient.getObject({id:e,options:{showContent:!0,showType:!0}});return o.parseRawStreamData(e,n)}static parseRawStreamData(t,e){if(e.error)throw e.error.code==="notExists"?new ln(t):new Qt(`get stream data: ${e.error.code}`,{streamId:t,...e.error});let n=e.data.content;if(n.dataType!=="moveObject")throw new Qt("Unexpected object type",{gotType:n.dataType});let{typeParams:a}=Jc(n.type),r=zr(a[0]),i=n.fields,s=i.config.fields,c=i.status.fields;return{coinType:r,autoClaim:i.auto_claim,balance:BigInt(i.balance.fields.balance),config:{amountPerEpoch:BigInt(s.amount_per_epoch),cancelable:s.cancelable,cliff:BigInt(s.cliff),creator:s.creator,epochInterval:BigInt(s.epoch_interval),metadata:s.metadata,recipient:s.recipient,timeStart:BigInt(s.time_start),totalEpoch:BigInt(s.total_epoch)},status:{status:c.status,epochCanceled:BigInt(c.epoch_canceled),epochClaimed:BigInt(c.epoch_claimed)}}}};import{normalizeStructTag as xa,SUI_TYPE_ARG as Yc}from"@mysten/sui.js/utils";import{Duration as Jr}from"luxon";var pn=class extends k{constructor(t,e){super(12,`Transaction failed: ${e}`,{context:{status:t,msg:e}})}};var Zc=1e3,mn=class{constructor(t){this.globals=t;this.coinMetaHelper=new va(t.suiClient),this.createStreamHelper=new vt(t).createStreamHelper()}coinMetaHelper;createStreamHelper;getStreamIdsFromCreateStreamResponse(t){if(t.effects?.status.status!=="success")throw new pn(t.effects?.status.status,t.effects?.status.error);return t.objectChanges.filter(e=>e.type==="created"&&e.objectType.startsWith(`${this.globals.envConfig.contract.contractId}::stream::Stream`)).map(e=>e.objectId)}calculateCreateStreamFees(t){return this.createStreamHelper.calculateCreateStreamFees(t)}feeParams(){return this.createStreamHelper.feeParams()}calculateStreamAmount(t){if(t.steps===0n)throw new A("Invalid stream steps: 0");let e=t.cliff?t.cliff:{numerator:0n,denominator:100n},n=t.totalAmount*e.numerator/e.denominator,a=(t.totalAmount-n)/t.steps,i={realTotalAmount:a*t.steps+n,cliffAmount:n,amountPerStep:a};return this.validateStreamAmount(i,t.totalAmount),i}calculateTimelineByInterval(t){if(t.steps===0n)throw new A("Invalid stream steps: 0");let e=t.timeStart.plus(t.interval.toMillis()*Number(t.steps)),n={timeStart:t.timeStart,timeEnd:e,interval:t.interval,steps:t.steps};return this.validateTimeline(n),n}calculateTimelineByTotalDuration(t){if(t.steps===0n)throw new A("Invalid stream steps: 0");let e=BigInt(t.total.toMillis())/t.steps,n=t.timeStart.plus(Jr.fromMillis(Number(e*t.steps))),a={timeStart:t.timeStart,timeEnd:n,interval:Jr.fromMillis(Number(e)),steps:t.steps};return this.validateTimeline(a),a}async getBalance(t,e){let n=await this.globals.suiClient.getBalance({owner:t,coinType:e}),a=await this.getCoinMeta(e);return{...n,coinType:xa(n.coinType),coinMeta:a}}async getAllBalance(t){let e=await this.globals.suiClient.getAllBalances({owner:t}),n=await Promise.all(e.map(a=>this.getCoinMeta(a.coinType)));return e.map((a,r)=>({...a,coinType:xa(a.coinType),coinMeta:n[r]}))}async getCoinMeta(t){return this.coinMetaHelper.getCoinMeta(t)}async simulateTransactionBlock(t){return this.globals.suiClient.devInspectTransactionBlock({transactionBlock:t,sender:await this.globals.wallet.address()})}validateStreamAmount(t,e){if(t.amountPerStep===0n)throw new A("Stream amount too small","totalAmount",e);if(t.cliffAmount>t.realTotalAmount)throw new A("Invalid cliff settings")}validateTimeline(t){if(t.interval.toMillis()<Zc)throw new A("Interval shall be at least 1 second","interval",t.interval)}},va=class{constructor(t){this.suiClient=t;this.coinMetaReg=new Map}coinMetaReg;async getCoinMeta(t){let e=xa(t||Yc);if(this.coinMetaReg.has(e))return this.coinMetaReg.get(e);let n=await this.queryCoinMeta(e);return n&&this.coinMetaReg.set(e,n),n}async queryCoinMeta(t){return await this.suiClient.getCoinMetadata({coinType:t})||void 0}};import{normalizeStructTag as Xr,normalizeSuiAddress as bn}from"@mysten/sui.js/utils";import{DateTime as Yr}from"luxon";var Dt=class extends k{constructor(t,e){super(9,`Invalid stream group: ${t}`,{context:e})}};var tl=25;async function Da(o,t,e){let n=new Vt(t),a=new Ht(o,n,e);return await wa(a)}var Vt=class{constructor(t){this.ids=t;this.cursor=-1}cursor;async hasNext(){return this.cursor<this.ids.length-1}async next(){if(this.cursor+=1,this.cursor>=this.ids.length)throw new Error("invalid iterator implementation");return this.ids[this.cursor]}},Ht=class extends At{constructor(e,n,a){super(new Aa(e,n,a));this.suiClient=e;this.idIter=n;this.options=a}},Aa=class{constructor(t,e,n){this.suiClient=t;this.stringIter=e;this.options=n;this.filter=n?.filter,this.pageSize=n?.pageSize||tl,this.objectOptions=n?.objectOptions||{showType:!0,showContent:!0}}filter;pageSize;objectOptions;async doNextRequest(){let t=[];for(;t.length<this.pageSize&&await this.stringIter.hasNext();){let r=await this.stringIter.next();r&&t.push(r)}let e=await this.suiClient.multiGetObjects({ids:t,options:this.objectOptions}),n;if(this.filter){let{filter:a}=this;n=e.filter(r=>a?.(r))}else n=e;return{data:n,hasNext:await this.stringIter.hasNext()}}};var fn=class o{constructor(t,e){this.globals=t;this.streams=e;if(e.length===0)throw new Dt("stream size 0");let n=e.map(r=>r.groupId);if(new Set(n).size!==1)throw new A("Stream does not have same group ID")}type="StreamGroup";static async new(t,e){let n=await Da(t.suiClient,e);return n.forEach(a=>{if(!a)throw new O("stream group object data undefined")}),o.newFromObjectResponse(t,e,n)}static async newFromObjectResponse(t,e,n){let a=await o.parseGroupStreams(t,e,n);return new o(t,a)}static checkStreamGroup(t){let e=t.map(r=>r.groupCommonInfo),n=e[0],a=!0;return e.forEach(r=>{el(n,r)||(a=!1)}),a}async refresh(){let t=await Da(this.globals.suiClient,this.streams.map(e=>e.streamId));this.streams.forEach((e,n)=>{e.refreshWithData(t[n])})}get groupId(){return this.streams[0].groupId}get creator(){return this.streams[0].creator}get info(){return{groupId:this.groupId,streamIds:this.streams.map(t=>t.streamId),progress:this.progress,name:this.streams[0].name,creator:this.creator,coinType:this.streams[0].coinType,totalAmount:this.streams.reduce((t,e)=>t+e.totalAmount,0n),start:this.streams[0].timeStart,end:this.streams[0].timeEnd,cancelable:this.streams[0].cancelable,cliffAmount:this.streams.reduce((t,e)=>t+e.cliff,0n),duration:this.streams[0].duration,interval:this.streams[0].interval,steps:this.streams[0].totalSteps,nextReleaseAmount:this.streams.reduce((t,e)=>e.nextReleaseAmount===null?t:t+e.nextReleaseAmount,0n),nextReleaseDate:this.streams[0].nextReleaseDate}}get progress(){return{total:this.streams.reduce((t,e)=>t+e.totalAmount,0n),streamed:this.streams.reduce((t,e)=>t+e.streamedAmount,0n),claimed:this.streams.reduce((t,e)=>t+e.claimedAmount,0n),claimable:this.streams.reduce((t,e)=>t+e.claimable,0n),canceled:this.streams.reduce((t,e)=>t+e.canceledAmount,0n)}}async historyEvents(t){return this.globals.backend.getStreamHistory({groupId:this.groupId,pagination:t})}static async parseGroupStreams(t,e,n){let a=n.map((r,i)=>it.fromObjectData(t,e[i],r)).filter(r=>!!r);if(new Set(a.map(r=>r.groupId)).size!==1)throw new Dt("Not same group ID");if(!this.checkStreamGroup(a))throw new Dt("Not same stream settings");return a}};function el(o,t){return o.name===t.name&&o.groupId===t.groupId&&o.creator===t.creator&&o.start.toMillis()===t.start.toMillis()&&o.interval.toMillis()===t.interval.toMillis()&&o.steps===t.steps&&o.cancelable===t.cancelable}var Kt=class o{constructor(t,e){this.it=t;this.pageSize=e}static async newIncoming(t){let e=await gn.newIncoming(t);return new o(e,t.pageSize)}static async newOutgoing(t){let e=await gn.newOutgoing(t);return new o(e,t.pageSize)}async hasNext(){return this.it.hasNext()}async next(){let t=[];for(;t.length<this.pageSize&&await this.it.hasNext();)t.push(await this.it.next());return t}},gn=class o{constructor(t){this.requester=t}cachedNext;static async newIncoming(t){let e=await hn.newIncomingQuery(t);return new o(e)}static async newOutgoing(t){let e=await hn.newOutgoingQuery(t);return new o(e)}async hasNext(){return this.cachedNext===void 0&&(this.cachedNext=await this.requester.doNextRequest()),this.cachedNext!==null}async next(){if(this.cachedNext===void 0){let e=await this.requester.doNextRequest();if(e===null)throw new O("No more results");return e}let t=this.cachedNext;if(this.cachedNext=void 0,t===null)throw new O("No more results");return t}},hn=class o{constructor(t,e,n,a){this.globals=t;this.recipient=e;this.groupRefs=n;this.query=a;this.current=0;let r=new Vt(n.flat().map(i=>i.streamId));this.objectIter=new Ht(t.suiClient,r)}current=0;objectIter;static async newIncomingQuery(t){let e=il(t.query),n=await t.globals.walletAddress(),r=(await t.globals.backend.getIncomingStreams(n,e)).filter(s=>bn(s.recipient)===bn(n)),i=Zr(r);return new o(t.globals,n,i,t.query)}static async newOutgoingQuery(t){let e=sl(t.query),n=await t.globals.walletAddress(),a=await t.globals.backend.getOutgoingStreams(n,e),r=Zr(a);return new o(t.globals,n,r,t.query)}async doNextRequest(){if(this.current>=this.groupRefs.length)return null;let t=this.groupRefs[this.current];if(t.length===1){let e=await al(this.globals,t[0].streamId,this.objectIter);return this.current++,ti(e,this.query)?e:this.doNextRequest()}if(t.length>1){let e=await rl(this.globals,t.map(n=>n.streamId),this.objectIter);return this.current++,ol(e,this.query)?e:this.doNextRequest()}throw new O("Stream group with no stream")}};function Zr(o){let t=new Map;return o.forEach(e=>{let n=t.get(e.groupId);n?(n.push(e),t.set(e.groupId,n)):t.set(e.groupId,[e])}),Array.from(t.values()).sort((e,n)=>Yr.fromISO(n[0].createDate).toMillis()-Yr.fromISO(e[0].createDate).toMillis())}function ti(o,t){if(t===void 0)return!0;let e=nl(o,t.status);if(t&&"claimable"in t&&t.claimable!==void 0){let n=t.claimable?o.progress.claimable!==0n:o.progress.claimable===0n;return e&&n}return e}function nl(o,t){return t===void 0?!0:Array.isArray(t)?t.includes(o.progress.status):o.progress.status===t}function ol(o,t){if(!t)return!0;let e=!1;return o.streams.forEach(n=>{ti(n,t)&&(e=!0)}),e}async function al(o,t,e){let n=await ei(e,t);return it.fromObjectData(o,t,n)}async function rl(o,t,e){let n=[];for(;n.length<t.length;){let a=await ei(e,t[n.length]);n.push(a)}return fn.newFromObjectResponse(o,t,n)}async function ei(o,t){if(!await o.hasNext())throw new O("object iterator has been consumed");let e=await o.next();if(!e||e.error||e.data===void 0||e.data===null)throw new O("object iterator undefined response",{cause:e?.error});if(e?.data?.objectId!==t)throw new O("stream id not aligned");return e}function il(o){return{status:Oa(o?.status),coinType:ni(o?.coinType),sender:oi(o?.sender)}}function sl(o){return{status:Oa(o?.status),coinType:ni(o?.coinType),recipient:oi(o?.recipient)}}function Oa(o){return o===void 0||o.length===0?"all":Array.isArray(o)?o.reduce((t,e)=>{let n=Oa(e);return!t||t===n?n:"all"},void 0):cl(o)}function cl(o){switch(o){case"STREAMING":case"STREAMED":case"CANCELED":return"active";case"COMPLETED":case"SETTLED":return"inactive";default:throw new A("Unknown stream filtered status")}}function ni(o){if(o)return Array.isArray(o)?o.length!==0?o.map(t=>Xr(t)):void 0:Xr(o)}function oi(o){if(o)return Array.isArray(o)?o.length!==0?o.map(t=>bn(t)):void 0:bn(o)}var Pa=class{constructor(t){this.msafe=t}get type(){return"msafe"}async address(){return this.msafe.address()}async requestCoins(t){return this.msafe.requestCoins(t)}},yn=class{constructor(t){this.account=t}async address(){return this.account.address}},_a=class{constructor(t,e){this.singleWallet=t;this.suiClient=e}get type(){return"single"}async address(){return this.singleWallet.address()}async requestCoins(t){return Promise.all(t.map(e=>this.requestCoin(e)))}async requestCoin(t){if(on(t.coinType,ll))return{primaryCoin:an};if(t.amount<=0)throw new A("Invalid coin request","coinAmount",t.amount);let e=await Kr(this.suiClient,await this.address(),t.amount,t.coinType);if(e.length===0)throw new O("no coins available");return{primaryCoin:e[0].coinObjectId,mergedCoins:e.slice(1).map(n=>n.coinObjectId)}}},Sn=class{globals;helper;constructor(t,e){this.globals=It.new(t,e),this.helper=new mn(this.globals)}connectSingleWallet(t){let e=new _a(t,this.globals.suiClient);this.globals.connectWallet(e)}connectMSafeAccount(t){let e=new Pa(t);this.globals.connectWallet(e)}async createStream(t){return this.builder().createStreams(t)}async getStream(t){return it.new(this.globals,t)}async getIncomingStreams(t,e=10){return Kt.newIncoming({globals:this.globals,query:t,pageSize:e})}async getOutgoingStreams(t,e=10){return Kt.newOutgoing({globals:this.globals,query:t,pageSize:e})}async getCoinTypesForStreamFilter(){let t=await this.wallet.address();return(await this.globals.backend.getAllCoinTypes(t)).map(n=>dl(n))}async getRecipientsForStreamFilter(t){let e=await this.wallet.address();return(await this.globals.backend.getAllRecipients(e,t)).map(a=>ai(a))}async getCreatorsForStreamFilter(t){let e=await this.wallet.address();return(await this.globals.backend.getAllSenders(e,t)).map(a=>ai(a))}get wallet(){return this.globals.wallet}builder(){return new vt(this.globals)}};var Q=class extends y{application="mpay";getClient(t,e){let n=new Sn(t==="sui:mainnet"?"prod":"dev");return n.connectSingleWallet(new yn(e)),n}};var Gt=class extends Q{constructor(e){super(e);this.data=e}txType=pl.Stream;txSubType="Cancel";async build(e){let{network:n,account:a}=e;return(await this.getClient(n,a).getStream(this.data.streamId)).cancel()}};import{TransactionType as ml}from"@msafe/sui3-utils";var zt=class extends Q{constructor(e){super(e);this.data=e}txType=ml.Stream;txSubType="ClaimByProxy";async build(e){let{network:n,account:a}=e;return(await this.getClient(n,a).getStream(this.data.streamId)).claimByProxy()}};import{TransactionType as fl}from"@msafe/sui3-utils";var Jt=class extends Q{constructor(e){super(e);this.data=e}txType=fl.Stream;txSubType="Claim";async build(e){let{network:n,account:a}=e;return(await this.getClient(n,a).getStream(this.data.streamId)).claim()}};import{TransactionType as bl}from"@msafe/sui3-utils";var Xt=class extends Q{constructor(e){super(e);this.data=e}txType=bl.Stream;txSubType="CreateStream";async build(e){let{network:n,account:a}=e;return this.getClient(n,a).createStream(this.data)}};import{bcs as ri}from"@mysten/sui.js/bcs";import{normalizeStructTag as gl,normalizeSuiAddress as Yt}from"@mysten/sui.js/utils";var Ot=class o{constructor(t,e){this.moveCall=t;this.txb=e}decodeSharedObjectId(t){let e=this.getInputParam(t);return o.getSharedObjectId(e)}decodeOwnedObjectId(t){let e=this.getInputParam(t);return o.getOwnedObjectId(e)}decodeInputU64(t){let e=this.decodePureArg(t,"u64");return BigInt(e)}decodeInputAddress(t){let e=this.decodePureArg(t,"address");return Yt(e)}decodeInputString(t){return this.decodePureArg(t,"string")}decodeInputBool(t){return this.decodePureArg(t,"bool")}decodePureArg(t,e){let n=this.getInputParam(t);return o.getPureInputValue(n,e)}getInputParam(t){let e=this.moveCall.arguments[t];if(e.kind!=="Input")throw new Error("not input type");return this.txb.blockData.inputs[e.index]}static getPureInputValue(t,e){if(t.type!=="pure")throw new Error("not pure argument");if(typeof t.value=="object"&&"Pure"in t.value){let n=t.value.Pure;return ri.de(e,new Uint8Array(n))}return t.value}static getOwnedObjectId(t){if(t.type!=="object")throw new Error(`not object argument: ${JSON.stringify(t)}`);if(typeof t.value=="object"){if(!("Object"in t.value)||!("ImmOrOwned"in t.value.Object))throw new Error("not ImmOrOwned");return Yt(t.value.Object.ImmOrOwned.objectId)}return Yt(t.value)}static getSharedObjectId(t){if(t.type!=="object")throw new Error(`not object argument: ${JSON.stringify(t)}`);if(typeof t.value!="object")return Yt(t.value);if(!("Object"in t.value)||!("Shared"in t.value.Object))throw new Error("not Shared");return Yt(t.value.Object.Shared.objectId)}static getPureInput(t,e){if(t.type!=="pure")throw new Error("not pure argument");if(typeof t.value!="object")return t.value;if(!("Pure"in t.value))throw new Error("Pure not in value");let n=t.value.Pure;return ri.de(e,new Uint8Array(n))}typeArg(t){return gl(this.moveCall.typeArguments[t])}txArg(t){return this.moveCall.arguments[t]}};var wn=class{constructor(t,e){this.globals=t;this.txb=e}decode(){let t=this.decodeCreateStreamInfo(),e=this.createStreamHelper().calculateCreateStreamFees(t);return{type:"CreateStream",info:t,fees:e}}decodeCreateStreamInfo(){let e=this.createStreamTransactions().map(n=>this.getCreationInfoFromMoveCall(n));return this.aggregateGroupStreamInfo(e)}createStreamTransactions(){let t=this.transactions.filter(e=>e.kind==="MoveCall"&&rt(e.target,this.contract.createStreamTarget));if(t.length===0)throw new O("No create stream transactions");return t.map(e=>new Ot(e,this.txb))}getCreationInfoFromMoveCall(t){let e=t.decodeInputString(4),{name:n,groupId:a}=qt(e),r=t.decodeInputAddress(5),i=t.decodeInputU64(6),s=t.decodeInputU64(7),c=t.decodeInputU64(8),l=t.decodeInputU64(9),d=t.decodeInputU64(10),u=t.decodeInputBool(11),p=t.typeArg(0);return{name:n,groupId:a,recipient:r,timeStart:i,cliff:s,epochInterval:c,totalEpoch:l,amountPerEpoch:d,cancelable:u,coinType:p}}aggregateGroupStreamInfo(t){if(new Set(t.map(a=>JSON.stringify({name:a.name,groupId:a.groupId,timeStart:String(a.timeStart),epochInterval:String(a.epochInterval),totalEpoch:String(a.totalEpoch),cancelable:a.cancelable,coinType:a.coinType}))).size!==1)throw new A("Stream group not have common info");let n=t.map(a=>({address:a.recipient,amountPerStep:a.amountPerEpoch,cliffAmount:a.cliff}));return{name:t[0].name,coinType:t[0].coinType,recipients:n,interval:t[0].epochInterval,steps:t[0].totalEpoch,startTimeMs:t[0].timeStart,cancelable:t[0].cancelable}}mergeCoinTransactions(){return this.transactions.filter(t=>t.kind==="MergeCoins")}get transactions(){return this.txb.blockData.transactions}get contract(){return new z(this.globals.envConfig.contract,this.globals)}get feeContract(){return new xt(this.globals.envConfig.contract,this.globals)}createStreamHelper(){return new St(this.globals,this.feeContract,this.contract)}getInputArg(t){if(t.kind!=="Input")throw new Error("not input type");return"value"in t?t:this.txb.blockData.inputs[t.index]}};var Tn=class{constructor(t,e){this.globals=t;this.txb=e;this.contract=new z(t.envConfig.contract,t)}contract;decode(){if(this.isCreateStreamTransaction())return this.decodeCreateStreamTransaction();if(this.isClaimByProxyTransaction())return this.decodeClaimByProxyTransaction();if(this.isSetAutoClaimTransaction())return this.decodeSetAutoClaimTransaction();if(this.isCancelStreamTransaction())return this.decodeCancelStreamTransaction();if(this.isClaimStreamTransaction())return this.decodeClaimTransaction();throw new Error("Unknown stream transaction type")}get transactions(){return this.txb.blockData.transactions}isCreateStreamTransaction(){return this.transactions.findIndex(e=>e.kind==="MoveCall"&&rt(e.target,this.contract.createStreamTarget))!==-1}isSetAutoClaimTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&&rt(this.transactions[0].target,this.contract.setAutoClaimTarget)}isCancelStreamTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&&rt(this.transactions[0].target,this.contract.cancelStreamTarget)}isClaimStreamTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&&rt(this.transactions[0].target,this.contract.claimStreamTarget)}isClaimByProxyTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&&rt(this.transactions[0].target,this.contract.claimStreamByProxyTarget)}decodeCreateStreamTransaction(){return new wn(this.globals,this.txb).decode()}decodeSetAutoClaimTransaction(){let t=this.helper.decodeSharedObjectId(0),e=this.helper.decodeInputBool(1);return{type:"SetAutoClaim",streamId:t,enabled:e}}decodeClaimTransaction(){let t=this.helper.decodeSharedObjectId(0);return{type:"Claim",streamId:t}}decodeClaimByProxyTransaction(){let t=this.helper.decodeSharedObjectId(0);return{type:"ClaimByProxy",streamId:t}}decodeCancelStreamTransaction(){let t=this.helper.decodeSharedObjectId(0);return{type:"Cancel",streamId:t}}get helper(){let t=this.transactions[0];return new Ot(t,this.txb)}};import{TransactionType as hl}from"@msafe/sui3-utils";var Zt=class extends Q{constructor(e){super(e);this.data=e}txType=hl.Stream;txSubType="SetAutoClaim";async build(e){let{network:n,account:a}=e;return(await this.getClient(n,a).getStream(this.data.streamId)).setAutoClaim(this.data.enabled)}};var Cn=class{application="mpay";supportSDK="@mysten/sui.js";async deserialize(t){let{network:e,transactionBlock:n}=t,a=It.new(e==="sui:mainnet"?"prod":"dev"),i=new Tn(a,n).decode(),s;switch(i.type){case"CreateStream":s=new Xt(i.info);break;case"SetAutoClaim":s=new Zt({streamId:i.streamId,enabled:i.enabled});break;case"Claim":s=new Jt({streamId:i.streamId});break;case"ClaimByProxy":s=new zt({streamId:i.streamId});break;case"Cancel":s=new Gt({streamId:i.streamId});break;default:throw new Error(`Unknown transaction type: ${i}`)}return{txType:s.txType,txSubType:s.txSubType,intentionData:s.data}}async build(t){let{intentionData:e}=t,n;switch(t.txSubType){case"CreateStream":n=new Xt(e);break;case"Claim":n=new Jt(e);break;case"ClaimByProxy":n=new zt(e);break;case"SetAutoClaim":n=new Zt(e);break;case"Cancel":n=new Gt(e);break;default:throw new Error("not implemented")}return n.build({...t})}};import{TransactionDefaultApplication as Cl,TransactionSubTypes as Ra}from"@msafe/sui3-utils";import{buildCoinTransferTxb as yl}from"@msafe/sui3-utils";var In=class o extends y{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:a}=e;return yl(n,this.data,a.address)}static fromData(e){return new o(e)}};import{buildObjectTransferTxb as Sl}from"@msafe/sui3-utils";var kn=class o extends y{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:a}=e;return Sl(n,this.data,a.address)}static fromData(e){return new o(e)}};import{isSameAddress as wl}from"@msafe/sui3-utils";import{TransactionBlock as Tl}from"@mysten/sui.js/transactions";var xn=class o extends y{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{account:n}=e,a=Tl.from(this.data.content);if(!wl(a.blockData.sender,n.address))throw new Error("Invalid sender address");return a}static fromData(e){return new o(e)}};var vn=class{application="msafe-core";supportSDK="@mysten/sui.js";constructor(){this.application=Cl}deserialize(){throw new Error("MSafe core transaction intention should be build from API")}async build(t){let{suiClient:e,account:n}=t,a;switch(t.txSubType){case Ra.assets.coin.send:a=In.fromData(t.intentionData);break;case Ra.assets.object.send:a=kn.fromData(t.intentionData);break;case Ra.others.plain:a=xn.fromData(t.intentionData);break;default:throw new Error("not implemented")}return a.build({suiClient:e,account:n})}};import{TransactionType as _l}from"@msafe/sui3-utils";var ii=!1,te={ProtocolPackage:"0xc6374c7da60746002bfee93014aeb607e023b2d6b25c9e55a152b826dbc8c1ce",StorageId:"0xbb4e2f4b6205c2e2a2db47aeb4f830796ec7c005f88537ee775986639bc442fe",Incentive:"0xaaf735bf83ff564e1b219a0d644de894ef5bdc4b2250b126b2a46dd002331821",IncentiveV2:"0xf87a8acb8b81d14307894d12595541a73f19933f88e1326d5be349c7a6f7559c",gasBudget:5e7,PriceOracle:"0x1568865ed9a0b5ec414220e8f79b3d04c77acc82358f6e5ae4635687392ffbef",ReserveParentId:"0xe6d4c6610b86ce7735ea754596d71d72d10c7980b5052fc3c8cdf8d09fea9b4b",pool:{sui:{name:"SUI",assetId:0,poolId:"0x96df0fce3c471489f4debaaa762cf960b3d97820bd1f3f025ff8190730e958c5",fondPoolId:"0xf975bc2d4cca10e3ace8887e20afd77b46c383b4465eac694c4688344955dea4",type:"0x2::sui::SUI",coinType:"sui",reserveObjectId:"0xab644b5fd11aa11e930d1c7bc903ef609a9feaf9ffe1b23532ad8441854fbfaf",borrowBalanceParentId:"0xe7ff0daa9d090727210abe6a8b6c0c5cd483f3692a10610386e4dc9c57871ba7",supplyBalanceParentId:"0x589c83af4b035a3bc64c40d9011397b539b97ea47edf7be8f33d643606bf96f8"},wusdc:{name:"wUSDC",assetId:1,coinType:"wusdc",poolId:"0xa02a98f9c88db51c6f5efaaf2261c81f34dd56d86073387e0ef1805ca22e39c8",type:"0x5d4b302506645c37ff133b98c4b50a5ae14841659738d6d733d59d0d217a93bf::coin::COIN",reserveObjectId:"0xeb3903f7748ace73429bd52a70fff278aac1725d3b58afa781f25ce3450ac203",borrowBalanceParentId:"0x8a3aaa817a811131c624658f6e77cba04ab5829293d2c49c1a9cce8ac9c8dec4",supplyBalanceParentId:"0x8d0a4467806458052d577c8cd2be6031e972f2b8f5f77fce98aa12cd85330da9"},usdt:{name:"USDT",coinType:"usdt",assetId:2,poolId:"0x0e060c3b5b8de00fb50511b7a45188c8e34b6995c01f69d98ea5a466fe10d103",type:"0xc060006111016b8a020ad5b33834984a437aaa7d3c74c18e09a95d48aceab08c::coin::COIN",reserveObjectId:"0xb8c5eab02a0202f638958cc79a69a2d30055565caad1684b3c8bbca3bddcb322",borrowBalanceParentId:"0xc14d8292a7d69ae31164bafab7ca8a5bfda11f998540fe976a674ed0673e448f",supplyBalanceParentId:"0x7e2a49ff9d2edd875f82b76a9b21e2a5a098e7130abfd510a203b6ea08ab9257"},weth:{name:"WETH",coinType:"weth",assetId:3,poolId:"0x71b9f6e822c48ce827bceadce82201d6a7559f7b0350ed1daa1dc2ba3ac41b56",type:"0xaf8cd5edc19c4512f4259f0bee101a40d41ebed738ade5874359610ef8eeced5::coin::COIN",reserveObjectId:"0xafecf4b57899d377cc8c9de75854c68925d9f512d0c47150ca52a0d3a442b735",borrowBalanceParentId:"0x7568d06a1b6ffc416a36c82791e3daf0e621cf19d4a2724fc6f74842661b6323",supplyBalanceParentId:"0xa668905b1ad445a3159b4d29b1181c4a62d864861b463dd9106cc0d97ffe8f7f"},cetus:{name:"CETUS",coinType:"cetus",assetId:4,poolId:"0x3c376f857ec4247b8ee456c1db19e9c74e0154d4876915e54221b5052d5b1e2e",type:"0x06864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b::cetus::CETUS",reserveObjectId:"0x66a807c06212537fe46aa6719a00e4fa1e85a932d0b53ce7c4b1041983645133",borrowBalanceParentId:"0x4c3da45ffff6432b4592a39cdb3ce12f4a28034cbcb804bb071facc81fdd923d",supplyBalanceParentId:"0x6adc72faf2a9a15a583c9fb04f457c6a5f0b456bc9b4832413a131dfd4faddae"},voloSui:{name:"VoloSui",coinType:"voloSui",assetId:5,poolId:"0x9790c2c272e15b6bf9b341eb531ef16bcc8ed2b20dfda25d060bf47f5dd88d01",fondPoolId:"0xe2b5ada45273676e0da8ae10f8fe079a7cec3d0f59187d3d20b1549c275b07ea",type:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55::cert::CERT",reserveObjectId:"0xd4fd7e094af9819b06ea3136c13a6ae8da184016b78cf19773ac26d2095793e2",borrowBalanceParentId:"0x8fa5eccbca2c4ba9aae3b87fd44aa75aa5f5b41ea2d9be4d5321379384974984",supplyBalanceParentId:"0xe6457d247b6661b1cac123351998f88f3e724ff6e9ea542127b5dcb3176b3841"},haSui:{name:"HaedalSui",coinType:"haSui",assetId:6,poolId:"0x6fd9cb6ebd76bc80340a9443d72ea0ae282ee20e2fd7544f6ffcd2c070d9557a",fondPoolId:"0xa20e18085ce04be8aa722fbe85423f1ad6b1ae3b1be81ffac00a30f1d6d6ab51",type:"0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d::hasui::HASUI",reserveObjectId:"0x0c9f7a6ca561dc566bd75744bcc71a6af1dc3caf7bd32c099cd640bb5f3bb0e3",borrowBalanceParentId:"0x01f36898e020be6c3423e5c95d9f348868813cd4d0be39b0c8df9d8de4722b00",supplyBalanceParentId:"0x278b8e3d09c3548c60c51ed2f8eed281876ea58c392f71b7ff650cc9286d095b"},navx:{name:"NAVX",coinType:"navx",assetId:7,poolId:"0xc0e02e7a245e855dd365422faf76f87d9f5b2148a26d48dda6e8253c3fe9fa60",fondPoolId:"0x9dae0cf104a193217904f88a48ce2cf0221e8cd9073878edd05101d6b771fa09",type:"0xa99b8952d4f7d947ea77fe0ecdcc9e5fc0bcab2841d6e2a5aa00c3044e5544b5::navx::NAVX",reserveObjectId:"0x2e13b2f1f714c0c5fa72264f147ef7632b48ec2501f810c07df3ccb59d6fdc81",borrowBalanceParentId:"0xa5bf13075aa400cbdd4690a617c5f008e1fae0511dcd4f7121f09817df6c8d8b",supplyBalanceParentId:"0x59dedca8dc44e8df50b190f8b5fe673098c1273ac6168c0a4addf3613afcdee5"},wbtc:{name:"WBTC",coinType:"wbtc",assetId:8,poolId:"0xd162cbe40f8829ce71c9b3d3bf3a83859689a79fa220b23d70dc0300b777ae6e",type:"0x027792d9fed7f9844eb4839566001bb6f6cb4804f66aa2da6fe1ee242d896881::coin::COIN",reserveObjectId:"0x8b4d81f004e4e9faf4540951a896b6d96e42598a270e6375f598b99742db767e",borrowBalanceParentId:"0x55e1f3c9e6e5cf9fff563bdd61db07a3826458c56ef72c455e049ab3b1b0e99c",supplyBalanceParentId:"0x821e505a0091b089edba94deaa14c2f2230d026bbaa7b85680554441aad447e0"},ausd:{name:"AUSD",coinType:"ausd",assetId:9,poolId:"0xc9208c1e75f990b2c814fa3a45f1bf0e85bb78404cfdb2ae6bb97de58bb30932",type:"0x2053d08c1e2bd02791056171aab0fd12bd7cd7efad2ab8f6b9c8902f14df2ff2::ausd::AUSD",reserveObjectId:"0x918889c6a9d9b93108531d4d59a4ebb9cc4d41689798ffc1d4aed6e1ae816ec0",borrowBalanceParentId:"0x551300b9441c9a3a16ca1d7972c1dbb4715e15004ccd5f001b2c2eee22fd92c1",supplyBalanceParentId:"0xe151af690355de8be1c0281fbd0d483c099ea51920a57c4bf8c9666fd36808fd"},nusdc:{name:"USDC",assetId:10,coinType:"nusdc",poolId:"0xa3582097b4c57630046c0c49a88bfc6b202a3ec0a9db5597c31765f7563755a8",type:"0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC",reserveObjectId:"0x4c8a2c72a22ae8da803a8519798d312c86e74a9e0d6ec0eec2bfcf7e4b3fef5e",borrowBalanceParentId:"0xb0b0c7470e96cabbb4f1e8d06bef2fbea65f4dbac52afae8635d9286b1ea9a09",supplyBalanceParentId:"0x08b5ce8574ac3bc9327e66ad5decd34d07ee798f724ad01058e8855ac9acb605"},eth:{name:"ETH",assetId:11,coinType:"eth",poolId:"0x78ba01c21d8301be15690d3c30dc9f111871e38cfb0b2dd4b70cc6052fba41bb",type:"0xd0e89b2af5e4910726fbcd8b8dd37bb79b29e5f83f7491bca830e94f7f226d29::eth::ETH",reserveObjectId:"0x376faea6dfbffab9ea808474cb751d91222b6d664f38c0f1d23de442a8edb1ce",borrowBalanceParentId:"0xf0c6ce5cfaee96073876a5fab7426043f3a798b79502c4caeb6d9772cd35af1f",supplyBalanceParentId:"0xc0a0cb43620eb8a84d5a4a50a85650e7fa7ba81e660f9cc2863404fd84591d4b"},usdy:{name:"USDY",assetId:12,coinType:"usdy",poolId:"0x4b6253a9f8cf7f5d31e6d04aed4046b9e325a1681d34e0eff11a8441525d4563",type:"0x960b531667636f39e85867775f52f6b1f220a058c4de786905bdf761e06a56bb::usdy::USDY",reserveObjectId:"",borrowBalanceParentId:"",supplyBalanceParentId:""}},borrowFee:.003,borrowFeeAddress:"0x70b9b10704263cf53392849e33b1f5fd16005869b4198ed5524836bad1234ea2"};async function Ba(){if(!ii)try{let o=await fetch("https://open-api.naviprotocol.io/api/msafe").then(r=>r.json()),{packageId:t,borrowFee:e,borrowFeeAddress:n,pool:a}=o;t&&(te.ProtocolPackage=t),e&&(te.borrowFee=e),n&&(te.borrowFeeAddress=n),a&&(te.pool=a),ii=!0}catch(o){console.error(o.message)}}var h=te;import{TransactionType as Pt}from"@msafe/sui3-utils";import{bcs as si}from"@mysten/sui.js/bcs";import{normalizeStructTag as kl,normalizeSuiAddress as ee}from"@mysten/sui.js/utils";var An=class{constructor(t){this.txb=t}decode(){if(console.log("txb",this.txb),this.isClaimRewardTransaction())return this.decodeClaimReward();if(this.isEntryBorrowTransaction())return this.decodeEntryBorrow();if(this.isEntryBorrowWithFeeTransaction())return this.decodeEntryBorrow();if(this.isEntryMultiDepositTransaction())return this.decodeEntryMultiDeposit();if(this.isEntryDepositTransaction())return this.decodeEntryDeposit();if(this.isEntryRepayTransaction())return this.decodeEntryRepay();if(this.isEntryWithdrawTransaction())return this.decodeEntryWithdraw();throw new Error("Unknown transaction type")}get transactions(){return this.txb.blockData.transactions}getMoveCallTransaction(t){return this.transactions.find(e=>e.kind==="MoveCall"&&e.target===t)}isClaimRewardTransaction(){return!!this.getMoveCallTransaction(`${h.ProtocolPackage}::incentive_v2::claim_reward`)}isEntryBorrowTransaction(){return!!this.getMoveCallTransaction(`${h.ProtocolPackage}::incentive_v2::entry_borrow`)}isEntryBorrowWithFeeTransaction(){return!!this.getMoveCallTransaction(`${h.ProtocolPackage}::incentive_v2::borrow`)}isEntryMultiDepositTransaction(){let t=`${h.ProtocolPackage}::incentive_v2::entry_deposit`,e=this.transactions.filter(a=>a.kind==="MoveCall"&&a.target===t);return this.transactions.find(a=>a.kind==="MoveCall"&&a.target===`${h.ProtocolPackage}::incentive_v2::claim_reward_non_entry`)?!1:e.length>1}isEntryDepositTransaction(){return!!this.getMoveCallTransaction(`${h.ProtocolPackage}::incentive_v2::entry_deposit`)}isEntryRepayTransaction(){return!!this.getMoveCallTransaction(`${h.ProtocolPackage}::incentive_v2::entry_repay`)}isEntryWithdrawTransaction(){return!!this.getMoveCallTransaction(`${h.ProtocolPackage}::incentive_v2::entry_withdraw`)}findPoolByAssetId(t){let e=Object.values(h.pool).find(n=>n.assetId===t);if(!e)throw new Error("Pool not found");return e}decodeClaimReward(){let t=[];return this.transactions.forEach(e=>{if(e.kind==="MoveCall"&&e.target===`${h.ProtocolPackage}::incentive_v2::claim_reward`){let n=new ne(e,this.txb),a=n.decodeInputU8(4),r=n.decodeInputU8(5),i=n.decodeSharedObjectId(2),s=this.findPoolByAssetId(a),c=[...e.typeArguments];t.push({coinType:s.coinType,option:r,typeArguments:c,assetId:a,poolId:i})}}),console.log("decode claims",t),{txType:Pt.Other,type:"ClaimReward",intentionData:{claims:t}}}decodeEntryBorrow(){let t=this.helper.decodeInputU8(4),e=this.helper.decodeInputU64(5),n=this.findPoolByAssetId(t);return{txType:Pt.Other,type:"EntryBorrow",intentionData:{amount:e,coinType:n.coinType}}}decodeEntryMultiDeposit(){let t=[],e=`${h.ProtocolPackage}::incentive_v2::entry_deposit`;return this.transactions.forEach(n=>{if(n.kind==="MoveCall"&&n.target===e){let a=new ne(n,this.txb),r=a.decodeInputU8(3),i=a.decodeInputU64(5),s=this.findPoolByAssetId(r);t.push({coinType:s.coinType,amount:i})}}),{txType:Pt.Other,type:"EntryMultiDeposit",intentionData:{list:t}}}decodeEntryDeposit(){let t=this.helper.decodeInputU8(3),e=this.helper.decodeInputU64(5),n=this.findPoolByAssetId(t);return{txType:Pt.Other,type:"EntryDeposit",intentionData:{amount:e,coinType:n.coinType}}}decodeEntryRepay(){let t=this.helper.decodeInputU8(4),e=this.helper.decodeInputU64(6),n=this.findPoolByAssetId(t);return{txType:Pt.Other,type:"EntryRepay",intentionData:{amount:e,coinType:n.coinType}}}decodeEntryWithdraw(){let t=this.helper.decodeInputU8(4),e=this.helper.decodeInputU64(5),n=this.findPoolByAssetId(t);return{txType:Pt.Other,type:"EntryWithdraw",intentionData:{amount:e,coinType:n.coinType}}}get helper(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(h.ProtocolPackage));return new ne(t,this.txb)}},ne=class o{constructor(t,e){this.moveCall=t;this.txb=e}decodeSharedObjectId(t){let e=this.getInputParam(t);return o.getSharedObjectId(e)}decodeOwnedObjectId(t){let e=this.getInputParam(t);return o.getOwnedObjectId(e)}decodeInputU64(t){let e=this.decodePureArg(t,"u64");return Number(e)}decodeInputU8(t){let e=this.decodePureArg(t,"u8");return Number(e)}decodeInputAddress(t){let e=this.decodePureArg(t,"address");return ee(e)}decodeInputString(t){return this.decodePureArg(t,"string")}decodeInputBool(t){return this.decodePureArg(t,"bool")}decodePureArg(t,e){let n=this.getInputParam(t);return o.getPureInputValue(n,e)}getInputParam(t){let e=this.moveCall.arguments[t];if(e.kind!=="Input")throw new Error("not input type");return this.txb.blockData.inputs[e.index]}static getPureInputValue(t,e){if(t.type!=="pure")throw new Error("not pure argument");if(typeof t.value=="object"&&"Pure"in t.value){let n=t.value.Pure;return si.de(e,new Uint8Array(n))}return t.value}static getOwnedObjectId(t){if(t.type!=="object")throw new Error(`not object argument: ${JSON.stringify(t)}`);if(typeof t.value=="object"){if(!("Object"in t.value)||!("ImmOrOwned"in t.value.Object))throw new Error("not ImmOrOwned");return ee(t.value.Object.ImmOrOwned.objectId)}return ee(t.value)}static getSharedObjectId(t){if(t.type!=="object")throw new Error(`not object argument: ${JSON.stringify(t)}`);if(typeof t.value!="object")return ee(t.value);if(!("Object"in t.value)||!("Shared"in t.value.Object))throw new Error("not Shared");return ee(t.value.Object.Shared.objectId)}static getPureInput(t,e){if(t.type!=="pure")throw new Error("not pure argument");if(typeof t.value!="object")return t.value;if(!("Pure"in t.value))throw new Error("Pure not in value");let n=t.value.Pure;return si.de(e,new Uint8Array(n))}typeArg(t){return kl(this.moveCall.typeArguments[t])}txArg(t){return this.moveCall.arguments[t]}};import{TransactionBlock as xl}from"@mysten/sui.js/transactions";function _t(o,t,e,n){return o.moveCall({target:`${h.ProtocolPackage}::incentive_v2::entry_deposit`,arguments:[o.object("0x06"),o.object(h.StorageId),o.object(t.poolId),o.pure(t.assetId),e,o.pure(n),o.object(h.Incentive),o.object(h.IncentiveV2)],typeArguments:[t.type]}),o}function ci(o,t,e){return o.moveCall({target:`${h.ProtocolPackage}::incentive_v2::entry_withdraw`,arguments:[o.object("0x06"),o.object(h.PriceOracle),o.object(h.StorageId),o.object(t.poolId),o.pure(t.assetId),o.pure(e),o.object(h.Incentive),o.object(h.IncentiveV2)],typeArguments:[t.type]}),o}function li(o,t,e,n){let a=o.moveCall({target:`${h.ProtocolPackage}::incentive_v2::borrow`,arguments:[o.object("0x06"),o.object(h.PriceOracle),o.object(h.StorageId),o.object(t.poolId),o.pure(t.assetId),o.pure(e),o.object(h.IncentiveV2)],typeArguments:[t.type]}),[r]=o.moveCall({target:"0x02::coin::from_balance",typeArguments:[t.type],arguments:[a]});if(h.borrowFee>0){let[i]=o.splitCoins(r,[o.pure(Math.floor(e*h.borrowFee))]);o.transferObjects([r],o.pure(n)),o.transferObjects([i],o.pure(h.borrowFeeAddress))}else o.transferObjects([r],o.pure(n));return o}function ja(o,t,e,n){return o.moveCall({target:`${h.ProtocolPackage}::incentive_v2::entry_repay`,arguments:[o.object("0x06"),o.object(h.PriceOracle),o.object(h.StorageId),o.object(t.poolId),o.pure(t.assetId),e,o.pure(n),o.object(h.IncentiveV2)],typeArguments:[t.type]}),o}function di(o,t,e,n,a){return o.moveCall({target:`${h.ProtocolPackage}::incentive_v2::claim_reward`,arguments:[o.object("0x06"),o.object(h.IncentiveV2),o.object(e),o.object(h.StorageId),o.pure(t),o.pure(n)],typeArguments:a}),o}var Dn=class o extends y{constructor(e){super(e);this.data=e}txType;txSubType;async build(){let{claims:e}=this.data,n=new xl;return e.forEach(a=>{let{assetId:r,poolId:i,option:s,typeArguments:c}=a;di(n,r,i,s,c)}),n}static fromData(e){return new o(e)}};import{TransactionBlock as vl}from"@mysten/sui.js/transactions";var On=class o extends y{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{coinType:n,amount:a}=this.data,r=new vl;console.log("build",this.data);let i=h.pool[n];if(!i)throw new Error(`${n} not support, please use ${Object.keys(h.pool).join(", ")}.`);return li(r,i,a,e.account.address)}static fromData(e){return new o(e)}};import{TransactionBlock as Al}from"@mysten/sui.js/transactions";async function Rt(o,t,e){let n=await o.getCoins({owner:t,coinType:e});return console.log("getTokenObjs",t,n),n}var Pn=class o extends y{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:a}=e,{coinType:r,amount:i}=this.data,s=new Al;if(console.log("build",this.data),r==="sui"){let[u]=s.splitCoins(s.gas,[i]);return _t(s,h.pool.sui,u,i)}let c=h.pool[r];if(!c)throw new Error(`${r} not support, please use ${Object.keys(h.pool).join(", ")}.`);let l=await Rt(n,a.address,c.type);if(!l.data[0])throw new Error(`Insufficient balance for ${c.name} Token`);let d=l.data[0].coinObjectId;if(l.data.length>=2){let u=1;for(;u<l.data.length;)s.mergeCoins(d,[l.data[u].coinObjectId]),u++}return _t(s,c,s.object(d),i)}static fromData(e){return new o(e)}};import{TransactionBlock as Dl}from"@mysten/sui.js/transactions";var _n=class o extends y{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:a}=e,{coinType:r,amount:i}=this.data,s=new Dl;if(console.log("build",this.data),r==="sui"){let[u]=s.splitCoins(s.gas,[i]);return ja(s,h.pool.sui,u,i)}let c=h.pool[r];if(!c)throw new Error(`${r} not support, please use ${Object.keys(h.pool).join(", ")}.`);let l=await Rt(n,a.address,c.type);if(!l.data[0])throw new Error(`Insufficient balance for ${c.name} Token`);let d=l.data[0].coinObjectId;if(l.data.length>=2){let u=1;for(;u<l.data.length;)s.mergeCoins(d,[l.data[u].coinObjectId]),u++}return ja(s,c,s.object(d),i)}static fromData(e){return new o(e)}};import{TransactionBlock as Ol}from"@mysten/sui.js/transactions";var Rn=class o extends y{constructor(e){super(e);this.data=e}txType;txSubType;async build(){let{coinType:e,amount:n}=this.data,a=new Ol;console.log("build",this.data);let r=h.pool[e];if(!r)throw new Error(`${e} not support, please use ${Object.keys(h.pool).join(", ")}.`);return ci(a,r,n)}static fromData(e){return new o(e)}};import{TransactionBlock as Pl}from"@mysten/sui.js/transactions";var Bn=class o extends y{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:a}=e,{list:r}=this.data,i=new Pl;console.log("build",this.data);for(let s=0;s<r.length;s++){let{coinType:c,amount:l}=r[s];if(c==="sui"){let[m]=i.splitCoins(i.gas,[l]);_t(i,h.pool.sui,m,l);continue}let d=h.pool[c];if(!d)throw new Error(`${c} not support, please use ${Object.keys(h.pool).join(", ")}.`);let u=await Rt(n,a.address,d.type);if(!u.data[0])throw new Error(`Insufficient balance for ${d.name} Token`);let p=u.data[0].coinObjectId;if(u.data.length>=2){let m=1;for(;m<u.data.length;)i.mergeCoins(p,[u.data[s].coinObjectId]),m++}_t(i,d,i.object(p),l)}return i}static fromData(e){return new o(e)}};var jn=class{application="navi";supportSDK="@mysten/sui.js";async deserialize(t){await Ba();let{transactionBlock:e}=t,a=new An(e).decode();return{txType:_l.Other,txSubType:a.type,intentionData:a.intentionData}}async build(t){let{suiClient:e,account:n}=t,a;switch(await Ba(),t.txSubType){case"EntryDeposit":a=Pn.fromData(t.intentionData);break;case"EntryBorrow":a=On.fromData(t.intentionData);break;case"EntryRepay":a=_n.fromData(t.intentionData);break;case"EntryWithdraw":a=Rn.fromData(t.intentionData);break;case"EntryMultiDeposit":a=Bn.fromData(t.intentionData);break;case"ClaimReward":a=Dn.fromData(t.intentionData);break;default:throw new Error("not implemented")}return a.build({suiClient:e,account:n})}};import{TransactionSubTypes as Rl,TransactionType as ui}from"@msafe/sui3-utils";import{fromHEX as Bl,toHEX as jl}from"@mysten/bcs";import{Transaction as Ml}from"@mysten/sui/transactions";import Nl from"sort-keys-recursive";var pi="msafe-plain-tx",mi=Rl.others.plain,Ma=class o{constructor(t){this.data=t}application=pi;txType=ui.Other;txSubType=mi;serialize(){return JSON.stringify(Nl(this.data))}async build(t){return Ml.from(Bl(this.data.content))}static fromData(t){return new o(t)}},Mn=class{application;supportSDK="@mysten/sui";constructor(){this.application=pi}async deserialize(t){let{transaction:e}=t,n=await e.build({client:t.suiClient});return{txType:ui.Other,txSubType:mi,intentionData:{content:jl(n)}}}async build(t){let{account:e}=t,a=await Ma.fromData(t.intentionData).build({suiClient:t.suiClient,network:t.network,account:t.account}),i=await t.suiClient.devInspectTransactionBlock({transactionBlock:a,sender:e.address});if(!(i.effects.status.status==="success"))throw new Error(i.effects.status.error);return a}};import{SuiClient as fi}from"@mysten/sui/client";import{Transaction as El}from"@mysten/sui/transactions";import{SuiClient as Na}from"@mysten/sui.js/client";import{TransactionBlock as Wl}from"@mysten/sui.js/transactions";var Nn=class o{apps;constructor(){this.apps=new Map}static fromHelpers(t){let e=new o;for(let n=0;n<t.length;n++){let a=t[n];switch(a.supportSDK){case"@mysten/sui.js":e.addLegacyHelper(a);break;case"@mysten/sui":e.addHelper(a);break;default:throw new Error(`${a.application}: ${a.supportSDK} SDK not supported`)}}return e}addLegacyHelper(t){this.apps.set(t.application,new Wa(t))}addHelper(t){this.apps.set(t.application,new Ea(t))}getAppHelper(t){let e=this.apps.get(t);if(!e)throw new Error(`${t} not registered`);return e}},Ea=class{constructor(t){this.helper=t}async deserialize(t){let e=new fi({url:t.clientUrl}),n=new Na({url:t.clientUrl}),a=await t.transactionBlock.build({client:n}),r=El.from(a);return this.helper.deserialize({...t,suiClient:e,transaction:r})}async build(t){let e=new fi({url:t.clientUrl}),n=await this.helper.build({...t,suiClient:e});n.setSender(t.account.address);let a=await n.build({client:e});return Wl.from(a)}},Wa=class{constructor(t){this.helper=t}async deserialize(t){let e=new Na({url:t.clientUrl});return this.helper.deserialize({...t,transactionBlock:t.transactionBlock,suiClient:e})}async build(t){let e=new Na({url:t.clientUrl});return this.helper.build({...t,suiClient:e})}};import{TransactionType as pd}from"@msafe/sui3-utils";import{TransactionType as P}from"@msafe/sui3-utils";var st=class{constructor(t,e){this.txb=t;this.scallop=e}scallop;get coreId(){return{protocolPkg:this.scallop.address.get("core.packages.protocol.id"),market:this.scallop.address.get("core.market"),version:this.scallop.address.get("core.version"),coinDecimalsRegistry:this.scallop.address.get("core.coinDecimalsRegistry"),xOracle:this.scallop.address.get("core.oracles.xOracle"),spoolPkg:this.scallop.address.get("spool.id"),borrowIncentivePkg:this.scallop.address.get("borrowIncentive.id"),veScaPkgId:this.scallop.address.get("vesca.id"),scoin:this.scallop.address.get("scoin.id"),referral:this.scallop.address.get("referral.id")}}get transactions(){return this.txb.blockData.transactions}get inputTransaction(){return this.txb.blockData.inputs}getMoveCallTransaction(t){return this.transactions.find(e=>e.kind==="MoveCall"&&e.target===t)}};var bi="https://sui.apis.scallop.io";var gi="66f8e7ed9bb9e07fdfb86bbb",En="0xefe8b36d5b2e43728cc323298626b83177803521d195cfb11e15b910e892fddf";var ct="0x7016aae72cfc67f2fadf55769c0a7dd54291a583b63051a5ed71081cce836ac6::sca::SCA",lt="0xc63072e7f5f4983a2efaf5bdba1480d5e7d74d57948e1c7cc436f8e22cbeb410",J=["weth","wbtc","wusdc","wusdt","sui","wapt","wsol","cetus","afsui","hasui","vsui","sca","usdc"],Wn=["weth","wbtc","wusdc","wusdt","sui","wapt","wsol","cetus","afsui","hasui","vsui","sca","usdc"],dt=["sweth","ssui","swusdc","swusdt","scetus","safsui","shasui","svsui","susdc"],X=["ssui","swusdc","swusdt","safsui","shasui","svsui","sweth","ssca","scetus","swbtc","swsol","susdc"];var hi=["sui"],ut=["sui","wusdc","wusdt","afsui","hasui","vsui","weth","sca","wbtc","wsol","usdc"];var yi={weth:8,wbtc:8,wusdc:6,usdc:6,wusdt:6,sui:9,wapt:8,wsol:8,sca:9,cetus:9,afsui:9,hasui:9,vsui:9,sweth:8,swbtc:8,susdc:6,swusdt:6,swusdc:6,ssui:9,swapt:8,swsol:8,scetus:9,safsui:9,shasui:9,svsui:9,ssca:9};var Ln={sweth:"sui",ssui:"sui",swusdc:"sui",swusdt:"sui",scetus:"sui",safsui:"sui",shasui:"sui",svsui:"sui",susdc:"sui"},Si={sui:["sui","sca"],wusdc:["sui","sca"],wusdt:["sui","sca"],afsui:["sui","sca"],hasui:["sui","sca"],vsui:["sui","sca"],sca:["sui","sca"],weth:["sui","sca"],wbtc:["sui","sca"],wsol:["sui","sca"],usdc:["sui","sca"]},wi={sui:"0x0000000000000000000000000000000000000000000000000000000000000002",weth:"0xaf8cd5edc19c4512f4259f0bee101a40d41ebed738ade5874359610ef8eeced5",wbtc:"0x027792d9fed7f9844eb4839566001bb6f6cb4804f66aa2da6fe1ee242d896881",wusdc:"0x5d4b302506645c37ff133b98c4b50a5ae14841659738d6d733d59d0d217a93bf",wusdt:"0xc060006111016b8a020ad5b33834984a437aaa7d3c74c18e09a95d48aceab08c",wapt:"0x3a5143bb1196e3bcdfab6203d1683ae29edd26294fc8bfeafe4aaa9d2704df37",wsol:"0xb7844e289a8410e50fb3ca48d69eb9cf29e27d223ef90353fe1bd8e27ff8f3f8",cetus:"0x06864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b",afsui:"0xf325ce1300e8dac124071d3152c5c5ee6174914f8bc2161e88329cf579246efc",hasui:"0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d",vsui:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55",sca:"0x7016aae72cfc67f2fadf55769c0a7dd54291a583b63051a5ed71081cce836ac6",usdc:"0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7"},F={weth:"0xaf8cd5edc19c4512f4259f0bee101a40d41ebed738ade5874359610ef8eeced5",wbtc:"0x027792d9fed7f9844eb4839566001bb6f6cb4804f66aa2da6fe1ee242d896881",wusdc:"0x5d4b302506645c37ff133b98c4b50a5ae14841659738d6d733d59d0d217a93bf",wusdt:"0xc060006111016b8a020ad5b33834984a437aaa7d3c74c18e09a95d48aceab08c",wapt:"0x3a5143bb1196e3bcdfab6203d1683ae29edd26294fc8bfeafe4aaa9d2704df37",wsol:"0xb7844e289a8410e50fb3ca48d69eb9cf29e27d223ef90353fe1bd8e27ff8f3f8"},La={vsui:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55"},Ti={ssui:"0xaafc4f740de0dd0dde642a31148fb94517087052f19afb0f7bed1dc41a50c77b::scallop_sui::SCALLOP_SUI",scetus:"0xea346ce428f91ab007210443efcea5f5cdbbb3aae7e9affc0ca93f9203c31f0c::scallop_cetus::SCALLOP_CETUS",ssca:"0x5ca17430c1d046fae9edeaa8fd76c7b4193a00d764a0ecfa9418d733ad27bc1e::scallop_sca::SCALLOP_SCA",swusdc:"0xad4d71551d31092230db1fd482008ea42867dbf27b286e9c70a79d2a6191d58d::scallop_wormhole_usdc::SCALLOP_WORMHOLE_USDC",swusdt:"0xe6e5a012ec20a49a3d1d57bd2b67140b96cd4d3400b9d79e541f7bdbab661f95::scallop_wormhole_usdt::SCALLOP_WORMHOLE_USDT",sweth:"0x67540ceb850d418679e69f1fb6b2093d6df78a2a699ffc733f7646096d552e9b::scallop_wormhole_eth::SCALLOP_WORMHOLE_ETH",safsui:"0x00671b1fa2a124f5be8bdae8b91ee711462c5d9e31bda232e70fd9607b523c88::scallop_af_sui::SCALLOP_AF_SUI",shasui:"0x9a2376943f7d22f88087c259c5889925f332ca4347e669dc37d54c2bf651af3c::scallop_ha_sui::SCALLOP_HA_SUI",svsui:"0xe1a1cc6bcf0001a015eab84bcc6713393ce20535f55b8b6f35c142e057a25fbe::scallop_v_sui::SCALLOP_V_SUI",swbtc:"0x2cf76a9cf5d3337961d1154283234f94da2dcff18544dfe5cbdef65f319591b5::scallop_wormhole_btc::SCALLOP_WORMHOLE_BTC",swsol:"0x1392650f2eca9e3f6ffae3ff89e42a3590d7102b80e2b430f674730bc30d3259::scallop_wormhole_sol::SCALLOP_WORMHOLE_SOL",susdc:"0x854950aa624b1df59fe64e630b2ba7c550642e9342267a33061d59fb31582da5::scallop_usdc::SCALLOP_USDC"};import{bcs as Ci}from"@mysten/sui.js/bcs";import{normalizeStructTag as Ll,normalizeSuiAddress as oe}from"@mysten/sui.js/utils";var w=class o{constructor(t,e){this.moveCall=t;this.txb=e}decodeSharedObjectId(t){let e=this.getInputParam(t);return o.getSharedObjectId(e)}decodeOwnedObjectId(t){let e=this.getInputParam(t);return o.getOwnedObjectId(e)}decodeInputU64(t){let e=this.decodePureArg(t,"u64");return Number(e)}decodeInputU8(t){let e=this.decodePureArg(t,"u8");return Number(e)}decodeInputAddress(t){let e=this.decodePureArg(t,"address");return oe(e)}decodeInputString(t){return this.decodePureArg(t,"string")}decodeInputBool(t){return this.decodePureArg(t,"bool")}decodePureArg(t,e){let n=this.getInputParam(t);return o.getPureInputValue(n,e)}getInputParam(t){let e=this.moveCall.arguments[t];if(e.kind!=="Input")throw new Error("not input type");return this.txb.blockData.inputs[e.index]}getNestedInputParam(t){let e=this.moveCall.arguments[t];if(e.kind!=="NestedResult")throw new Error("not input type");return this.txb.blockData.transactions[e.index]}isHaveNestedInput(t){return this.moveCall.arguments[t].kind==="NestedResult"}static getPureInputValue(t,e){if(t.type!=="pure")throw new Error("not pure argument");if(typeof t.value=="object"&&"Pure"in t.value){let n=t.value.Pure;return Ci.de(e,new Uint8Array(n))}return t.value}static getOwnedObjectId(t){if(t.type!=="object")throw new Error(`not object argument: ${JSON.stringify(t)}`);if(typeof t.value=="object"){if(!("Object"in t.value)||!("ImmOrOwned"in t.value.Object))throw new Error("not ImmOrOwned");return oe(t.value.Object.ImmOrOwned.objectId)}return oe(t.value)}static getSharedObjectId(t){if(t.type!=="object")throw new Error(`not object argument: ${JSON.stringify(t)}`);if(typeof t.value!="object")return oe(t.value);if(!("Object"in t.value)||!("Shared"in t.value.Object))throw new Error("not Shared");return oe(t.value.Object.Shared.objectId)}static getPureInput(t,e){if(t.type!=="pure")throw new Error("not pure argument");if(typeof t.value!="object")return t.value;if(!("Pure"in t.value))throw new Error("Pure not in value");let n=t.value.Pure;return Ci.de(e,new Uint8Array(n))}typeArg(t){return Ll(this.moveCall.typeArguments[t])}txArg(t){return this.moveCall.arguments[t]}};import{bcs as Ul}from"@mysten/sui.js/bcs";var _=class{constructor(t,e){this.splitCoin=t;this.txb=e}getAmountInput(){return this.splitCoin.amounts.map(t=>{if(t.kind==="Input")return Number(w.getPureInputValue(t,"u64"))}).filter(t=>t!==void 0)}static getPureInputValue(t,e){if(t.type!=="pure")throw new Error("not pure argument");if(typeof t.value=="object"&&"Pure"in t.value){let n=t.value.Pure;return Ul.de(e,new Uint8Array(n))}return t.value}};var Un=class extends st{decode(){if(this.isMoveAsset())return this.decodeMoveAsset();if(this.isSupplyWithStakeSpoolTransaction())return this.decodeSupplyWithStakeSpool();if(this.isUnstakeAndWithdrawTransaction())return this.decodeUnstakeAndWithdraw();if(this.isStakeSpoolTransaction())return this.decodeStakeSpool();if(this.isDepositCollateralTransaction())return this.decodeDepositCollateral();if(this.isWithdrawCollateralTransaction())return this.decodeWithdrawCollateral();if(this.isWithdrawLendingScoinTransaction())return this.decodeWithdrawLendingScoin();if(this.isWithdrawLendingTransaction())return this.decodeWithdrawLending();if(this.isSupplyLendingTransaction())return this.decodeSupplyLending();if(this.isBorrowWithReferralTransaction())return this.decodeBorrowWithReferral();if(this.isBorrowWithBoostTransaction())return this.decodeBorrowWithBoost();if(this.isBorrowTransaction())return this.decodeBorrow();if(this.isRepayWithBoostTransaction())return this.decodeRepayWithBoost();if(this.isRepayTransaction())return this.decodeRepay();if(this.isUnstakeSpoolTransaction())return this.decodeUnstakeSpool();if(this.isClaimRewardTransaction())return this.decodeClaimReward();if(this.isOpenObligationTransaction())return this.decodeOpenObligation();if(this.isMigrateAndClaim())return this.decodeMigrateAndClaim();if(this.isMigrateScoinTransaction())return this.decodeMigrateScoin()}isMoveAsset(){return!!this.getMoveCallTransaction("0x5857d185897aaff40ae37b2eecc895efc1a9dff1b210c4fb894eabbce4ac2603::slippage_check::check_slippage")}isMigrateScoinTransaction(){return!!this.getMoveCallTransaction(`${this.coreId.scoin}::s_coin_converter::mint_s_coin`)}isSupplyLendingTransaction(){return!!this.getMoveCallTransaction(`${this.coreId.protocolPkg}::mint::mint`)}isSupplyWithStakeSpoolTransaction(){let t=this.getMoveCallTransaction(`${this.coreId.protocolPkg}::mint::mint`),e=this.getMoveCallTransaction(`${this.coreId.spoolPkg}::user::stake`);return!!t&&!!e}isUnstakeAndWithdrawTransaction(){let t=this.getMoveCallTransaction(`${this.coreId.spoolPkg}::user::unstake`),e=this.getMoveCallTransaction(`${this.coreId.protocolPkg}::redeem::redeem`);return!!t&&!!e}isStakeSpoolTransaction(){return!!this.getMoveCallTransaction(`${this.coreId.spoolPkg}::user::stake`)}isWithdrawLendingTransaction(){return!!this.getMoveCallTransaction(`${this.coreId.protocolPkg}::redeem::redeem`)}isWithdrawLendingScoinTransaction(){let t=!!this.getMoveCallTransaction(`${this.coreId.protocolPkg}::redeem::redeem`),e=!!this.getMoveCallTransaction(`${this.coreId.scoin}::s_coin_converter::burn_s_coin`);return!!t&&!!e}isDepositCollateralTransaction(){return!!this.getMoveCallTransaction(`${this.coreId.protocolPkg}::deposit_collateral::deposit_collateral`)}isWithdrawCollateralTransaction(){return!!this.getMoveCallTransaction(`${this.coreId.protocolPkg}::withdraw_collateral::withdraw_collateral`)}isBorrowTransaction(){return!!this.getMoveCallTransaction(`${this.coreId.protocolPkg}::borrow::borrow`)}isBorrowWithBoostTransaction(){let t=this.getMoveCallTransaction(`${this.coreId.protocolPkg}::borrow::borrow`),e=this.getMoveCallTransaction(`${this.coreId.borrowIncentivePkg}::user::stake_with_ve_sca`);return!!t&&!!e}isBorrowWithReferralTransaction(){return!!this.getMoveCallTransaction(`${this.coreId.protocolPkg}::borrow::borrow_with_referral`)}isRepayTransaction(){return!!this.getMoveCallTransaction(`${this.coreId.protocolPkg}::repay::repay`)}isRepayWithBoostTransaction(){let t=!!this.getMoveCallTransaction(`${this.coreId.protocolPkg}::repay::repay`),e=this.getMoveCallTransaction(`${this.coreId.borrowIncentivePkg}::user::stake_with_ve_sca`);return!!t&&!!e}isUnstakeSpoolTransaction(){return!!this.getMoveCallTransaction(`${this.coreId.spoolPkg}::user::unstake`)}isCreateStakeAccountTransaction(){return!!this.getMoveCallTransaction(`${this.coreId.spoolPkg}::user::new_spool_account`)}isClaimRewardTransaction(){let t=this.getMoveCallTransaction(`${this.coreId.spoolPkg}::user::redeem_rewards`),e=this.getMoveCallTransaction(`${this.coreId.borrowIncentivePkg}::user::redeem_rewards`);return!!t||!!e}isOpenObligationTransaction(){return!!this.getMoveCallTransaction(`${this.coreId.protocolPkg}::open_obligation::open_obligation`)}isMigrateAndClaim(){let t=this.getMoveCallTransaction(`${lt}::user::redeem_rewards`),e=this.getMoveCallTransaction(`${this.coreId.borrowIncentivePkg}::user::stake_with_ve_sca`),n=this.getMoveCallTransaction(`${this.coreId.borrowIncentivePkg}::user::stake`);return!!t&&(!!e||!!n)}get helperClaimLendingReward(){return this.transactions.filter(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.spoolPkg}::user::redeem_rewards`)).map(e=>new w(e,this.txb))}get helperClaimBorrowV2Reward(){return this.transactions.filter(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.borrowIncentivePkg}::user::redeem_rewards`)).map(e=>new w(e,this.txb))}get helperStakeObligationWithVeSca(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.borrowIncentivePkg}::user::stake_with_ve_sca`));return new w(t,this.txb)}get helperClaimBorrowReward(){return this.transactions.filter(e=>e.kind==="MoveCall"&&e.target.startsWith(`${lt}::user::redeem_rewards`)).map(e=>new w(e,this.txb))}get helperMint(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.protocolPkg}::mint::mint`));return new w(t,this.txb)}get helperUnstakes(){return this.transactions.filter(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.spoolPkg}::user::unstake`)).map(e=>new w(e,this.txb))}get helperRedeems(){return this.transactions.filter(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.protocolPkg}::redeem::redeem`)).map(e=>new w(e,this.txb))}get helperRedeem(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.protocolPkg}::redeem::redeem`));return new w(t,this.txb)}get helperBurnScoin(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.scoin}::s_coin_converter::burn_s_coin`));return new w(t,this.txb)}get helperSlippage(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith("0x5857d185897aaff40ae37b2eecc895efc1a9dff1b210c4fb894eabbce4ac2603::slippage_check::check_slippage"));return new w(t,this.txb)}get helperStake(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.spoolPkg}::user::stake`));return new w(t,this.txb)}get helperUnstake(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.spoolPkg}::user::unstake`));return new w(t,this.txb)}get helperDepositCollateral(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.protocolPkg}::deposit_collateral::deposit_collateral`));return new w(t,this.txb)}get helperWithdrawCollateral(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.protocolPkg}::withdraw_collateral::withdraw_collateral`));return new w(t,this.txb)}get helperBorrow(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.protocolPkg}::borrow::borrow`));return new w(t,this.txb)}get helperBorrowWithReferral(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.protocolPkg}::borrow::borrow_with_referral`));return new w(t,this.txb)}get helperRepay(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.protocolPkg}::repay::repay`));return new w(t,this.txb)}decodeMigrateScoin(){return{txType:P.Other,type:"MigrateScoin",intentionData:{}}}decodeMigrateAndClaim(){let t;this.helperStakeObligationWithVeSca.moveCall&&(t=this.helperStakeObligationWithVeSca.decodeOwnedObjectId(9));let e=this.helperClaimBorrowReward[0].decodeOwnedObjectId(2),n=this.helperClaimBorrowReward[0].decodeSharedObjectId(3),a=this.scallop.utils.parseCoinNameFromType(this.helperClaimBorrowReward[0].typeArg(0));return{txType:P.Other,type:"MigrateAndClaim",intentionData:{obligationKey:e,obligationId:n,rewardCoinName:a,veScaKey:t}}}decodeOpenObligation(){return{txType:P.Other,type:"OpenObligation",intentionData:{}}}decodeSupplyLending(){let t=this.scallop.utils.parseCoinNameFromType(this.helperMint.typeArg(0)),e=this.helperMint.getNestedInputParam(2),n=new _(e,this.txb).getAmountInput().reduce((a,r)=>a+r,0);return{txType:P.Other,type:"SupplyLending",intentionData:{amount:n,coinName:t}}}decodeWithdrawLending(){let t=this.scallop.utils.parseCoinNameFromType(this.helperRedeem.typeArg(0)),e=this.helperRedeem.getNestedInputParam(2),n=new _(e,this.txb).getAmountInput().reduce((a,r)=>a+r,0);return{txType:P.Other,type:"WithdrawLending",intentionData:{amount:n,coinName:t}}}decodeWithdrawLendingScoin(){let t=this.scallop.utils.parseCoinNameFromType(this.helperRedeem.typeArg(0)),e=this.helperBurnScoin.getNestedInputParam(1),n=new _(e,this.txb).getAmountInput().reduce((a,r)=>a+r,0);return{txType:P.Other,type:"WithdrawLending",intentionData:{amount:n,coinName:t}}}decodeDepositCollateral(){let t=this.scallop.utils.parseCoinNameFromType(this.helperDepositCollateral.typeArg(0)),e=this.helperDepositCollateral.getNestedInputParam(3),n=new _(e,this.txb).getAmountInput().reduce((r,i)=>r+i,0),a=this.helperDepositCollateral.decodeSharedObjectId(1);return{txType:P.Other,type:"DepositCollateral",intentionData:{amount:n,obligationId:a,collateralCoinName:t}}}decodeWithdrawCollateral(){let t=this.scallop.utils.parseCoinNameFromType(this.helperWithdrawCollateral.typeArg(0)),e=this.helperWithdrawCollateral.decodeInputU64(5),n=this.helperWithdrawCollateral.decodeSharedObjectId(1),a=this.helperWithdrawCollateral.decodeOwnedObjectId(2);return{txType:P.Other,type:"WithdrawCollateral",intentionData:{amount:e,collateralCoinName:t,obligationKey:a,obligationId:n}}}decodeBorrow(){let t=this.scallop.utils.parseCoinNameFromType(this.helperBorrow.typeArg(0)),e=this.helperBorrow.decodeInputU64(5),n=this.helperBorrow.decodeSharedObjectId(1),a=this.helperBorrow.decodeOwnedObjectId(2);return{txType:P.Other,type:"Borrow",intentionData:{amount:e,coinName:t,obligationKey:a,obligationId:n}}}decodeBorrowWithBoost(){let t=this.scallop.utils.parseCoinNameFromType(this.helperBorrow.typeArg(0)),e=this.helperStakeObligationWithVeSca.decodeOwnedObjectId(9),n=this.helperBorrow.decodeInputU64(5),a=this.helperBorrow.decodeSharedObjectId(1),r=this.helperBorrow.decodeOwnedObjectId(2);return{txType:P.Other,type:"BorrowWithBoost",intentionData:{amount:n,coinName:t,obligationKey:r,obligationId:a,veScaKey:e}}}decodeBorrowWithReferral(){let t=this.scallop.utils.parseCoinNameFromType(this.helperBorrowWithReferral.typeArg(0)),e;this.helperStakeObligationWithVeSca.moveCall&&(e=this.helperStakeObligationWithVeSca.decodeOwnedObjectId(9));let n=this.helperBorrowWithReferral.decodeInputU64(6),a=this.helperBorrowWithReferral.decodeSharedObjectId(1),r=this.helperBorrowWithReferral.decodeOwnedObjectId(2);return{txType:P.Other,type:"BorrowWithReferral",intentionData:{amount:n,coinName:t,obligationKey:r,obligationId:a,veScaKey:e}}}decodeRepay(){let t=this.scallop.utils.parseCoinNameFromType(this.helperRepay.typeArg(0)),e=this.helperRepay.getNestedInputParam(3),n=new _(e,this.txb).getAmountInput().reduce((r,i)=>r+i,0),a=this.helperRepay.decodeSharedObjectId(1);return{txType:P.Other,type:"Repay",intentionData:{amount:n,obligationId:a,coinName:t}}}decodeRepayWithBoost(){let t=this.scallop.utils.parseCoinNameFromType(this.helperRepay.typeArg(0)),e=this.helperStakeObligationWithVeSca.decodeOwnedObjectId(9),n=this.helperRepay.getNestedInputParam(3),a=new _(n,this.txb).getAmountInput().reduce((i,s)=>i+s,0),r=this.helperRepay.decodeSharedObjectId(1);return{txType:P.Other,type:"RepayWithBoost",intentionData:{amount:a,obligationId:r,coinName:t,veScaKey:e}}}decodeStakeSpool(){let t;this.isCreateStakeAccountTransaction()||(t=this.helperStake.decodeOwnedObjectId(1));let e=0;if(this.helperBurnScoin.moveCall){let r=this.helperBurnScoin.getNestedInputParam(1);e=new _(r,this.txb).getAmountInput().reduce((i,s)=>i+s,0)}if(this.helperStake.moveCall&&e===0){let r=this.helperStake.getNestedInputParam(2);e=new _(r,this.txb).getAmountInput().reduce((i,s)=>i+s,0)}let n=this.helperStake.typeArg(0),a=this.scallop.utils.parseCoinNameFromType(n);return{txType:P.Other,type:"StakeSpool",intentionData:{amount:e,marketCoinName:a,stakeAccountId:t}}}decodeUnstakeSpool(){let t=this.helperUnstake.decodeOwnedObjectId(1),e=this.helperUnstake.decodeInputU64(2),n=this.helperUnstake.typeArg(0),a=this.scallop.utils.parseCoinNameFromType(n);return{txType:P.Other,type:"UnstakeSpool",intentionData:{amount:e,marketCoinName:a,stakeAccountId:t}}}decodeSupplyWithStakeSpool(){let t=this.scallop.utils.parseCoinNameFromType(this.helperMint.typeArg(0)),e=this.helperMint.getNestedInputParam(2),n=new _(e,this.txb).getAmountInput().reduce((r,i)=>r+i,0),a;return this.isCreateStakeAccountTransaction()||(a=this.helperStake.decodeOwnedObjectId(1)),{txType:P.Other,type:"SupplyAndStakeLending",intentionData:{amount:n,coinName:t,stakeAccountId:a}}}decodeUnstakeAndWithdraw(){let t=[];this.helperUnstakes.forEach(a=>{let r=a.decodeOwnedObjectId(1),i=a.decodeInputU64(2);t.push({id:r,coin:i})});let e=this.scallop.utils.parseCoinNameFromType(this.helperRedeems[0].typeArg(0)),n=0;if(this.helperBurnScoin.moveCall){let a=this.helperBurnScoin.getNestedInputParam(1);n=new _(a,this.txb).getAmountInput().reduce((r,i)=>r+i,0)}return{txType:P.Other,type:"WithdrawAndUnstakeLending",intentionData:{amount:n,coinName:e,stakeAccountId:t}}}decodeMoveAsset(){let t=[];this.helperUnstakes.forEach(i=>{let s=i.decodeOwnedObjectId(1),c=i.decodeInputU64(2);t.push({id:s,coin:c})});let e=this.scallop.utils.parseCoinNameFromType(this.helperRedeems[0].typeArg(0)),n=0;if(this.helperBurnScoin.moveCall){let i=this.helperBurnScoin.getNestedInputParam(1);n=new _(i,this.txb).getAmountInput().reduce((s,c)=>s+c,0)}let a=this.helperSlippage.decodePureArg(1,"u64"),r=this.helperSlippage.decodePureArg(2,"string");return{txType:P.Other,type:"MigrateWusdcToUsdc",intentionData:{amount:n,coinName:e,slippage:a,validSwapAmount:r,stakeAccountId:t}}}decodeClaimReward(){let t=[],e=[],n=[];return this.helperClaimLendingReward.forEach(a=>{let r=a.decodeOwnedObjectId(2),i=a.typeArg(0),s=this.scallop.utils.parseCoinNameFromType(i);t.push({stakeMarketCoinName:s,stakeAccountId:r})}),this.helperClaimBorrowV2Reward.forEach(a=>{let r=a.decodeSharedObjectId(3),i=a.decodeOwnedObjectId(4),s=this.scallop.utils.parseCoinNameFromType(a.typeArg(0));e.push({obligationId:i,obligationKey:r,rewardCoinName:s})}),this.helperClaimBorrowReward.forEach(a=>{let r=a.decodeSharedObjectId(2),i=a.decodeOwnedObjectId(3),s=this.scallop.utils.parseCoinNameFromType(a.typeArg(0));n.push({obligationId:i,obligationKey:r,rewardCoinName:s})}),{txType:P.Other,type:"ClaimIncentiveReward",intentionData:{lendingIncentive:t,borrowIncentiveV2:e,borrowIncentive:n}}}};import{TransactionType as Fa}from"@msafe/sui3-utils";var Fn=class extends st{decode(){if(this.isCreateReferralLink())return this.decodeCreateReferralLink();if(this.isClaimRevenueReferral())return this.decodeClaimRevenueReferral();if(this.isBindReferral())return this.decodeBindReferral()}isClaimRevenueReferral(){return!!this.getMoveCallTransaction(`${this.coreId.referral}::referral_revenue_pool::claim_revenue_with_ve_sca_key`)}isCreateReferralLink(){return!!this.getMoveCallTransaction(`${this.coreId.veScaPkgId}::ve_sca::mint_ve_sca_placeholder_key`)}isBindReferral(){return!!this.getMoveCallTransaction(`${this.coreId.referral}::referral_bindings::bind_ve_sca_referrer`)}get helperClaimRevenueReferral(){return this.transactions.filter(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.referral}::referral_revenue_pool::claim_revenue_with_ve_sca_key`)).map(e=>new w(e,this.txb))}get helperBindReferral(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.referral}::referral_bindings::bind_ve_sca_referrer`));return new w(t,this.txb)}decodeCreateReferralLink(){return{txType:Fa.Other,type:"CreateReferralLink",intentionData:{}}}decodeClaimRevenueReferral(){let t=this.helperClaimRevenueReferral[0].decodeOwnedObjectId(2),e=this.helperClaimRevenueReferral.map(n=>n.typeArg(0));return{txType:Fa.Other,type:"ClaimRevenueReferral",intentionData:{veScaKey:t,coins:e}}}decodeBindReferral(){let t=this.helperBindReferral.decodePureArg(1,"address");return{txType:Fa.Other,type:"BindReferral",intentionData:{veScaKey:t}}}};import{TransactionType as ae}from"@msafe/sui3-utils";var qn=class extends st{decode(){if(this.isExtendPeriodAndStakeMoreSca())return this.decodePeriodAndStakeMoreSca();if(this.isStakeScaFirsTime()||this.isStakeMoreSca())return this.decodeStakeSca();if(this.isRenewExpiredVeSca())return this.decodeRenewExpiredVeSca();if(this.isExtendPeriod())return this.decodeExtendStakePeriod();if(this.isRedeemSca())return this.decodeRedeemSca()}isStakeScaFirsTime(){return!!this.getMoveCallTransaction(`${this.coreId.veScaPkgId}::ve_sca::mint_ve_sca_key`)}isExtendPeriodAndStakeMoreSca(){let t=this.getMoveCallTransaction(`${this.coreId.veScaPkgId}::ve_sca::extend_lock_period`),e=this.getMoveCallTransaction(`${this.coreId.veScaPkgId}::ve_sca::lock_more_sca`);return!!t&&!!e}isRedeemSca(){return!!this.getMoveCallTransaction(`${this.coreId.veScaPkgId}::ve_sca::redeem`)}isStakeMoreSca(){return!!this.getMoveCallTransaction(`${this.coreId.veScaPkgId}::ve_sca::lock_more_sca`)}isExtendPeriod(){return!!this.getMoveCallTransaction(`${this.coreId.veScaPkgId}::ve_sca::extend_lock_period`)}isRenewExpiredVeSca(){return!!this.getMoveCallTransaction(`${this.coreId.veScaPkgId}::ve_sca::renew_expired_ve_sca`)}get helperStakeMoreSca(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.veScaPkgId}::ve_sca::lock_more_sca`));return new w(t,this.txb)}get helperStakeSca(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.veScaPkgId}::ve_sca::mint_ve_sca_key`));return new w(t,this.txb)}get helperExtendStakePeriod(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.veScaPkgId}::ve_sca::extend_lock_period`));return new w(t,this.txb)}get helperRedeemSca(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.veScaPkgId}::ve_sca::redeem`));return new w(t,this.txb)}get helperRenewExpired(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.veScaPkgId}::ve_sca::renew_expired_ve_sca`));return new w(t,this.txb)}get helperOldUnstakeObligation(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${lt}::user::unstake`));return new w(t,this.txb)}get helperUnstakeObligation(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.borrowIncentivePkg}::user::unstake`));return new w(t,this.txb)}get helperStakeObligationWithVeSca(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.borrowIncentivePkg}::user::stake_with_ve_sca`));return new w(t,this.txb)}decodeRedeemSca(){let t=this.helperRedeemSca.decodeOwnedObjectId(1);return{txType:ae.Other,type:"RedeemSca",intentionData:{veScaKey:t}}}decodeRenewExpiredVeSca(){let t=this.helperRenewExpired.getNestedInputParam(4),e=this.helperRenewExpired.decodeInputU64(5),n=new _(t,this.txb).getAmountInput().reduce((f,S)=>f+S,0),a=this.helperRenewExpired.decodeOwnedObjectId(1),r=!!this.helperRedeemSca.moveCall,i=[],s=[],c=[];this.helperOldUnstakeObligation.moveCall&&(i=[this.helperOldUnstakeObligation.decodeSharedObjectId(2),this.helperOldUnstakeObligation.decodeSharedObjectId(3)]),this.helperUnstakeObligation.moveCall&&(s=[this.helperUnstakeObligation.decodeSharedObjectId(3),this.helperUnstakeObligation.decodeSharedObjectId(4)]),this.helperStakeObligationWithVeSca.moveCall&&(c=[this.helperStakeObligationWithVeSca.decodeSharedObjectId(3),this.helperStakeObligationWithVeSca.decodeSharedObjectId(4)]);let l=!1,d=!1,u,p,m=[{condition:i,isOld:!0},{condition:s,isOld:!1},{condition:c,isOld:!1}];for(let f=0;f<m.length;f++)m[f].condition.length>1&&([p,u]=m[f].condition,l=!0,d=m[f].isOld);return{txType:ae.Other,type:"RenewExpStakePeriod",intentionData:{amount:n,lockPeriodInDays:e,obligationId:u,obligationKey:p,veScaKey:a,isHaveRedeem:r,isObligationLocked:l,isOldBorrowIncentive:d}}}decodeExtendStakePeriod(){let t=this.helperExtendStakePeriod.decodeInputU64(4),e=this.helperExtendStakePeriod.decodeOwnedObjectId(1),n=[],a=[],r=[];this.helperOldUnstakeObligation.moveCall&&(n=[this.helperOldUnstakeObligation.decodeSharedObjectId(2),this.helperOldUnstakeObligation.decodeSharedObjectId(3)]),this.helperUnstakeObligation.moveCall&&(a=[this.helperUnstakeObligation.decodeSharedObjectId(3),this.helperUnstakeObligation.decodeSharedObjectId(4)]),this.helperStakeObligationWithVeSca.moveCall&&(r=[this.helperStakeObligationWithVeSca.decodeSharedObjectId(3),this.helperStakeObligationWithVeSca.decodeSharedObjectId(4)]);let i=!1,s=!1,c,l,d=[{condition:n,isOld:!0},{condition:a,isOld:!1},{condition:r,isOld:!1}];for(let u=0;u<d.length;u++)d[u].condition.length>1&&([l,c]=d[u].condition,i=!0,s=d[u].isOld);return{txType:ae.Other,type:"ExtendStakePeriod",intentionData:{lockPeriodInDays:t,obligationId:c,obligationKey:l,veScaKey:e,isObligationLocked:i,isOldBorrowIncentive:s}}}decodePeriodAndStakeMoreSca(){let t=this.helperStakeMoreSca.getNestedInputParam(4),e=this.helperExtendStakePeriod.decodeInputU64(4),n=new _(t,this.txb).getAmountInput().reduce((m,f)=>m+f,0),a=[],r=[],i,s=[];this.helperOldUnstakeObligation.moveCall&&(a=[this.helperOldUnstakeObligation.decodeSharedObjectId(2),this.helperOldUnstakeObligation.decodeSharedObjectId(3)]),this.helperUnstakeObligation.moveCall&&(r=[this.helperUnstakeObligation.decodeSharedObjectId(3),this.helperUnstakeObligation.decodeSharedObjectId(4)]),this.helperStakeMoreSca.moveCall&&(i=this.helperStakeMoreSca.decodeOwnedObjectId(1)),this.helperStakeObligationWithVeSca.moveCall&&(s=[this.helperStakeObligationWithVeSca.decodeSharedObjectId(3),this.helperStakeObligationWithVeSca.decodeSharedObjectId(4)]);let c=!1,l=!1,d,u,p=[{condition:a,isOld:!0},{condition:r,isOld:!1},{condition:s,isOld:!1}];for(let m=0;m<p.length;m++)p[m].condition.length>1&&([u,d]=p[m].condition,c=!0,l=p[m].isOld);return{txType:ae.Other,type:"ExtendPeriodAndStakeMore",intentionData:{amount:n,veScaKey:i,lockPeriodInDays:e,obligationId:d,obligationKey:u,isOldBorrowIncentive:l,isObligationLocked:c}}}decodeStakeSca(){let t,e;this.helperStakeSca.moveCall&&this.helperStakeMoreSca.moveCall===void 0?(t=this.helperStakeSca.getNestedInputParam(3),e=this.helperStakeSca.decodeInputU64(4)):t=this.helperStakeMoreSca.getNestedInputParam(4);let n=new _(t,this.txb).getAmountInput().reduce((m,f)=>m+f,0),a=[],r=[],i,s=[];this.helperOldUnstakeObligation.moveCall&&(a=[this.helperOldUnstakeObligation.decodeSharedObjectId(2),this.helperOldUnstakeObligation.decodeSharedObjectId(3)]),this.helperUnstakeObligation.moveCall&&(r=[this.helperUnstakeObligation.decodeSharedObjectId(3),this.helperUnstakeObligation.decodeSharedObjectId(4)]),this.helperStakeMoreSca.moveCall&&(i=this.helperStakeMoreSca.decodeOwnedObjectId(1)),this.helperStakeObligationWithVeSca.moveCall&&(s=[this.helperStakeObligationWithVeSca.decodeSharedObjectId(3),this.helperStakeObligationWithVeSca.decodeSharedObjectId(4)]);let c=!1,l=!1,d,u,p=[{condition:a,isOld:!0},{condition:r,isOld:!1},{condition:s,isOld:!1}];for(let m=0;m<p.length;m++)p[m].condition.length>1&&([u,d]=p[m].condition,c=!0,l=p[m].isOld);return{txType:ae.Other,type:"StakeSca",intentionData:{amount:n,lockPeriodInDays:e,obligationId:d,obligationKey:u,veScaKey:i,isObligationLocked:c,isOldBorrowIncentive:l}}}};import Fl from"sort-keys-recursive";var g=class{constructor(t){this.data=t}get application(){return"msafe-core"}serialize(){return JSON.stringify(Fl(this.data))}};var $n=class o extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.borrow(this.data.coinName,Number(this.data.amount),this.data.obligationId,this.data.obligationKey,e.account.address)}static fromData(e){return new o(e)}};var Qn=class o extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.borrowWithBoost(this.data.coinName,Number(this.data.amount),this.data.obligationId,this.data.obligationKey,this.data.veScaKey,e.account.address)}static fromData(e){return new o(e)}};var Vn=class o extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.borrowWithReferral(this.data.coinName,Number(this.data.amount),this.data.obligationId,this.data.obligationKey,this.data.veScaKey,e.account.address)}static fromData(e){return new o(e)}};var Hn=class o extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.claim(this.data.lendingIncentive,this.data.borrowIncentiveV2,this.data.borrowIncentive,e.account.address)}static fromData(e){return new o(e)}};var Kn=class o extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.depositCollateral(this.data.collateralCoinName,Number(this.data.amount),this.data.obligationId,e.account.address)}static fromData(e){return new o(e)}};var Gn=class o extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.migrateAndClaim(this.data.obligationKey,this.data.obligationId,this.data.rewardCoinName,this.data.veScaKey)}static fromData(e){return new o(e)}};var zn=class o extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.migrateAllMarketCoin()}static fromData(e){return new o(e)}};var Jn=class o extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.migrateLendingWusdcToUsdcNative(this.data.coinName,Number(this.data.amount),this.data.slippage,this.data.validSwapAmount,this.data.stakeAccountId)}static fromData(e){return new o(e)}};var Xn=class o extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.openObligation()}static fromData(e){return new o(e)}};var Yn=class o extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.repay(this.data.coinName,Number(this.data.amount),this.data.obligationId,this.data.obligationKey,e.account.address)}static fromData(e){return new o(e)}};var Zn=class o extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.repayWithBoost(this.data.coinName,Number(this.data.amount),this.data.obligationId,this.data.veScaKey,e.account.address)}static fromData(e){return new o(e)}};var to=class o extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.stake(this.data.marketCoinName,Number(this.data.amount),void 0,e.account.address)}static fromData(e){return new o(e)}};var eo=class o extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.deposit(this.data.coinName,Number(this.data.amount),e.account.address)}static fromData(e){return new o(e)}};var no=class o extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.unstake(this.data.marketCoinName,Number(this.data.amount),void 0,e.account.address)}static fromData(e){return new o(e)}};var oo=class o extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.unstakeAndWithdraw(this.data.coinName,Number(this.data.amount),this.data.stakeAccountId)}static fromData(e){return new o(e)}};var ao=class o extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.withdrawCollateral(this.data.collateralCoinName,Number(this.data.amount),this.data.obligationId,this.data.obligationKey,e.account.address)}static fromData(e){return new o(e)}};var ro=class o extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.withdraw(this.data.coinName,Number(this.data.amount),e.account.address)}static fromData(e){return new o(e)}};var io=class o extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.bindReferral(this.data.veScaKey)}static fromData(e){return new o(e)}};var so=class o extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.claimRevenuReferral(this.data.veScaKey,this.data.coins)}static fromData(e){return new o(e)}};var co=class o extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.createReferralLink()}static fromData(e){return new o(e)}};var lo=class o extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.extendPeriodAndStakeMoreSca(this.data.amount,this.data.veScaKey,this.data.lockPeriodInDays,this.data.obligationId,this.data.obligationKey,this.data.isObligationLocked,this.data.isOldBorrowIncentive,e.account.address)}static fromData(e){return new o(e)}};var uo=class o extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.extendStakeScaLockPeriod(this.data.lockPeriodInDays,this.data.veScaKey,this.data.obligationId,this.data.obligationKey,this.data.isObligationLocked,this.data.isOldBorrowIncentive,e.account.address)}static fromData(e){return new o(e)}};var po=class o extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.redeemSca(this.data.veScaKey)}static fromData(e){return new o(e)}};var mo=class o extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.renewExpiredStakeSca(this.data.amount,this.data.lockPeriodInDays,this.data.vescaKey,this.data.isHaveRedeem,this.data.obligation,this.data.obligationKey,this.data.isObligationLocked,this.data.isOldBorrowIncentive,e.account.address)}static fromData(e){return new o(e)}};var fo=class o extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.stakeSca(this.data.amount,this.data.isObligationLocked,this.data.isOldBorrowIncentive,this.data.obligationId,this.data.obligationKey,this.data.lockPeriodInDays,this.data.veScaKey,e.account.address)}static fromData(e){return new o(e)}};var bo=class o extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.supplyAndStake(this.data.coinName,Number(this.data.amount),this.data.stakeAccountId,e.account.address)}static fromData(e){return new o(e)}};var go=class o extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.withdrawUnlockedSca(this.data.vescaKey,e.account.address)}static fromData(e){return new o(e)}};var ho=class{id;addresses;constructor(t){let{id:e}=t;this.id=e}getId(){return this.id}getAddresses(){return this.addresses}get(t){if(!this.addresses)throw new Error(`Failed to fetch address ${this.id}`);return t.split(".").reduce((n,a)=>typeof n=="object"?n[a]:n,this.addresses)}async read(){let t={method:"GET",headers:new Headers({"Content-Type":"application/json"})},e=await fetch(`${bi}/addresses/${this.id}`,t);if(e.status===200){let n=await e.json();if("mainnet"in n){this.addresses=n.mainnet;return}throw new Error("Mainnet key is not in address!")}throw new Error(`Failed to fetch address with id ${this.id}`)}};import{TransactionBlock as I}from"@mysten/sui.js/transactions";import Xi from"bignumber.js";import{TransactionBlock as ql}from"@mysten/sui.js/transactions";var yo=class{params;isTestnet;address;query;utils;client;constructor(t,e){this.params=t,this.client=t.client;let{address:n,query:a,utils:r}=e;this.address=n,this.query=a,this.utils=r,this.isTestnet=t.networkType?t.networkType==="testnet":!1}createTxBlock(t){return new ql(t)}async selectCoin(t,e,n,a=this.params.walletAddress){let r=this.utils.parseCoinType(e),i=await this.utils.selectCoinIds(n,r,a),[s,c]=this.utils.takeAmountFromCoins(t,i,n);return{takeCoin:s,leftCoin:c}}async selectMarketCoin(t,e,n,a=this.params.walletAddress){let r=this.utils.parseMarketCoinType(e),i=await this.utils.selectCoins(n,r,a),s=i.reduce((u,p)=>(u+=Number(p.balance),u),0),c=i.map(u=>u.objectId),[l,d]=this.utils.takeAmountFromCoins(t,c,Math.min(n,s));return{takeCoin:l,leftCoin:d,totalAmount:s}}async selectSCoin(t,e,n,a=this.params.walletAddress){let r=this.utils.parseSCoinType(e),i=await this.utils.selectCoins(n,r,a),s=i.map(u=>u.objectId),c=i.reduce((u,p)=>u+Number(p.balance),0),[l,d]=this.utils.takeAmountFromCoins(t,s,Math.min(c,n));return{takeCoin:l,leftCoin:d,totalAmount:c}}};import{TransactionBlock as $l}from"@mysten/sui.js/transactions";import So from"bignumber.js";var Bt=async(o,t)=>{let e=t,n=o.address.get("core.object")||En,a=[],r=!1,i=null;do{let d=await o.client.getOwnedObjects({owner:e,filter:{StructType:`${n}::obligation::ObligationKey`},cursor:i});a.push(...d.data),d.hasNextPage&&d.nextCursor?(r=!0,i=d.nextCursor):r=!1}while(r);let s=a.map(d=>d?.data?.objectId).filter(d=>d!==void 0),c=await o.client.multiGetObjects({ids:s,options:{showContent:!0,showType:!0}}),l=[];for(let d=0;d<c.length;d++){let u=c[d].data.objectId,{content:p}=c[d].data;if(p&&"fields"in p){let m=p.fields,f=String(m.ownership.fields.of),S=await qa(o,f);l.push({id:f,keyId:u,locked:S})}}return l},qa=async(o,t)=>{let e=await o.client.getObject({id:t,options:{showContent:!0}}),n=!1;return e.data&&e?.data?.content?.dataType==="moveObject"&&"lock_key"in e.data.content.fields&&(n=!!e.data.content.fields.lock_key),n},Ii=async(o,t,e)=>{let n=e||[...J],a=t,r=[],i=!1,s=null;do{let d=await o.client.getOwnedObjects({owner:a,filter:{MatchAny:n.map(u=>({StructType:`0x2::coin::Coin<${o.utils.parseCoinType(u)}>`}))},options:{showType:!0,showContent:!0},cursor:s});r.push(...d.data),d.hasNextPage&&d.nextCursor?(i=!0,s=d.nextCursor):i=!1}while(i);let c={};return r.map(d=>d.data).filter(d=>d!=null).forEach(d=>{let u=d.type;if(d.content&&"fields"in d.content){let p=d.content.fields,m=o.utils.parseCoinNameFromType(u);m&&(c[m]=So(c[m]??0).plus(p.balance).toNumber())}}),c},ki=async(o,t,e)=>{let n=e,a=o.utils.parseCoinType(t),r=[],i=!1,s=null;do{let d=await o.client.getOwnedObjects({owner:n,filter:{StructType:`0x2::coin::Coin<${a}>`},options:{showContent:!0},cursor:s});r.push(...d.data),d.hasNextPage&&d.nextCursor?(i=!0,s=d.nextCursor):i=!1}while(i);let c=0;return r.map(d=>d.data).filter(d=>d!=null).forEach(d=>{if(d.content&&"fields"in d.content){let u=d.content.fields;c=So(c).plus(u.balance).toNumber()}}),c},xi=async(o,t,e)=>{let n=e||[...J].map(d=>o.utils.parseMarketCoinName(d)),a=t,r=[],i=!1,s=null;do{let d=await o.client.getOwnedObjects({owner:a,filter:{MatchAny:n.map(u=>({StructType:`0x2::coin::Coin<${o.utils.parseMarketCoinType(u)}>`}))},options:{showType:!0,showContent:!0},cursor:s});r.push(...d.data),d.hasNextPage&&d.nextCursor?(i=!0,s=d.nextCursor):i=!1}while(i);let c={};return r.map(d=>d.data).filter(d=>d!=null).forEach(d=>{let u=d.type;if(d.content&&"fields"in d.content){let p=d.content.fields,m=o.utils.parseCoinNameFromType(u);m&&(c[m]=So(c[m]??0).plus(p.balance).toNumber())}}),c},vi=async(o,t,e)=>{let n=e,a=o.utils.parseMarketCoinType(t),r=[],i=!1,s=null;do{let d=await o.client.getOwnedObjects({owner:n,filter:{StructType:`0x2::coin::Coin<${a}>`},options:{showContent:!0},cursor:s});r.push(...d.data),d.hasNextPage&&d.nextCursor?(i=!0,s=d.nextCursor):i=!1}while(i);let c=0;return r.map(d=>d.data).filter(d=>d!=null).forEach(d=>{if(d.content&&"fields"in d.content){let u=d.content.fields;c=So(c).plus(u.balance).toNumber()}}),c},Ai=async(o,t)=>{let n=`${o.address.get("core.packages.query.id")}::obligation_query::obligation_data`,a=new $l;return a.moveCall({target:n,arguments:[a.object(t)]}),(await o.client.devInspectTransactionBlock({transactionBlock:a,sender:o.params.walletAddress})).events[0].parsedJson};import{normalizeStructTag as C}from"@mysten/sui.js/utils";var re=async(o,t)=>{let e=t,n=o.address.get("spool.object"),a=`${n}::spool_account::SpoolAccount`,r=[],i=!1,s=null;do{let p=await o.client.getOwnedObjects({owner:e,filter:{StructType:a},options:{showContent:!0,showType:!0},cursor:s});r.push(...p.data),p.hasNextPage&&p.nextCursor?(i=!0,s=p.nextCursor):i=!1}while(i);let c={sweth:[],ssui:[],susdc:[],swusdc:[],swusdt:[],scetus:[],safsui:[],shasui:[],svsui:[]},l=Object.keys(c).reduce((p,m)=>{let f=o.utils.parseCoinName(m),S=o.utils.parseMarketCoinType(f),T={...p},x=`${n}::spool_account::SpoolAccount<${S}>`;return T[m]=x,T},{}),d=r.map(p=>p?.data?.objectId).filter(p=>p!==void 0);return(await o.client.multiGetObjects({ids:d,options:{showContent:!0,showType:!0}})).forEach(p=>{let m=p.data.objectId,f=p.data.type;if(p.data.content&&"fields"in p.data.content){let S=p.data.content.fields,T=String(S.spool_id),x=String(S.stake_type.fields.name),L=Number(S.stakes),R=Number(S.index),q=Number(S.points),U=Number(S.total_points);C(f)===l.sweth?c.sweth.push({id:m,type:C(f),stakePoolId:T,stakeType:C(x),staked:L,index:R,points:q,totalPoints:U}):C(f)===l.ssui?c.ssui.push({id:m,type:C(f),stakePoolId:T,stakeType:C(x),staked:L,index:R,points:q,totalPoints:U}):C(f)===l.swusdc?c.swusdc.push({id:m,type:C(f),stakePoolId:T,stakeType:C(x),staked:L,index:R,points:q,totalPoints:U}):C(f)===l.swusdt?c.swusdt.push({id:m,type:C(f),stakePoolId:T,stakeType:C(x),staked:L,index:R,points:q,totalPoints:U}):C(f)===l.scetus?c.scetus.push({id:m,type:C(f),stakePoolId:T,stakeType:C(x),staked:L,index:R,points:q,totalPoints:U}):C(f)===l.safsui?c.safsui.push({id:m,type:C(f),stakePoolId:T,stakeType:C(x),staked:L,index:R,points:q,totalPoints:U}):C(f)===l.shasui?c.shasui.push({id:m,type:C(f),stakePoolId:T,stakeType:C(x),staked:L,index:R,points:q,totalPoints:U}):C(f)===l.svsui?c.svsui.push({id:m,type:C(f),stakePoolId:T,stakeType:C(x),staked:L,index:R,points:q,totalPoints:U}):C(f)===l.susdc&&c.susdc.push({id:m,type:C(f),stakePoolId:T,stakeType:C(x),staked:L,index:R,points:q,totalPoints:U})}}),c},$a=async(o,t)=>{let e=o.address.get(`spool.pools.${t}.id`),n,a=await o.client.getObject({id:e,options:{showContent:!0,showType:!0}});if(a.data){let r=a.data,i=r.objectId,s=r.type;if(r.content&&"fields"in r.content){let c=r.content.fields,l=Number(c.max_distributed_point),d=Number(c.distributed_point),u=Number(c.distributed_point_per_period),p=Number(c.point_distribution_time),m=Number(c.max_stakes),f=String(c.stake_type.fields.name),S=Number(c.stakes),T=Number(c.index),x=Number(c.created_at),L=Number(c.last_update);n={id:i,type:C(s),maxPoint:l,distributedPoint:d,pointPerPeriod:u,period:p,maxStake:m,stakeType:C(f),totalStaked:S,index:T,createdAt:x,lastUpdate:L}}}return n},Qa=async(o,t)=>{let e=o.address.get(`spool.pools.${t}.rewardPoolId`),n,a=await o.client.getObject({id:e,options:{showContent:!0,showType:!0}});if(a.data){let r=a.data,i=r.objectId,s=r.type;if(r.content&&"fields"in r.content){let c=r.content.fields,l=String(c.spool_id),d=Number(c.exchange_rate_numerator),u=Number(c.exchange_rate_denominator),p=Number(c.rewards),m=Number(c.claimed_rewards);n={id:i,type:C(s),stakePoolId:l,ratioNumerator:d,ratioDenominator:u,rewards:p,claimedRewards:m}}}return n};import{TransactionBlock as Hl}from"@mysten/sui.js/transactions";import{normalizeStructTag as W0}from"@mysten/sui.js/utils";import U0 from"bignumber.js";var M=o=>{let{sender:t}=o.blockData;if(!t)throw new Error("Sender is required");return t},Pi=(o,t,e,n)=>{let a=!n,r=!a&&n*1e3<=new Date().getTime();if(a||r)if(o!==void 0&&t!==void 0){if(t<=0)throw new Error("Lock period must be greater than 0");if(typeof o=="number"&&o<1e10)throw new Error(`Minimum lock amount for ${r?"renewing expired veSca":"initial lock"} is 10 SCA`);if(t*86400>126144e3)throw new Error(`Maximum lock period is ~4 years (${1460} days)`)}else throw new Error(`SCA amount and lock period is required for ${r?"renewing expired veSca":"initial lock"}`);else{if(jt(n),typeof o=="number"&&o<1e9)throw new Error("Minimum top up amount is 1 SCA");if(e&&n&&e-n>126057600)throw new Error(`Maximum lock period is ~4 years (${1459} days)`)}},_i=(o,t,e)=>{if(jt(e),o<=0)throw new Error("Lock period must be greater than 0");if(!!e&&e*1e3<=new Date().getTime())throw new Error("veSca is expired, use renewExpiredVeScaQuick instead");if(e&&t-(e??0)>126057600)throw new Error(`Maximum lock period is ~4 years (${1459} days)`)},Ri=(o,t)=>{if(jt(t),o<1e9)throw new Error("Minimum top up amount is 1 SCA");if(!!t&&t*1e3<=new Date().getTime())throw new Error("veSca is expired, use renewExpiredVeScaQuick instead")},Bi=(o,t,e)=>{if(jt(e),o<1e10)throw new Error("Minimum lock amount for renewing expired vesca 10 SCA");if(t*86400>=126057600)throw new Error(`Maximum lock period is ~4 years (${1459} days)`)},jt=o=>{if(o===void 0)throw new Error("veSca not found")};import{normalizeStructTag as ji,parseStructTag as Ql}from"@mysten/sui.js/utils";import A0 from"bignumber.js";var Vl=o=>({pointType:ji(o.point_type.name),weightedAmount:Number(o.weighted_amount),points:Number(o.points),totalPoints:Number(o.total_points),index:Number(o.index)}),Mi=o=>({poolType:ji(o.pool_type.name),debtAmount:Number(o.debt_amount),pointList:o.points_list.reduce((t,e)=>{let n=Vl(e),a=Ql(n.pointType).name.toLowerCase();return t[a]=n,t},{})});var To=o=>{let t=o.slice(1).toLowerCase();return o.charAt(0).toLowerCase()==="s"&&[...new Set([...J,...Wn,...hi])].includes(t)},Va=o=>{switch(o){case"afsui":return"afSUI";case"hasui":return"haSUI";case"vsui":return"vSUI";default:return o.toUpperCase()}},Ni=o=>{let t=new Date(o*1e3),e=new Date(o*1e3);e.setUTCHours(0,0,0,0),t.getUTCHours()>=0&&e.setUTCDate(e.getUTCDate()+1);let n=new Date().getTime();return e.getTime()-n>126144e3*1e3&&e.setUTCDate(e.getUTCDate()-1),Math.floor(e.getTime()/1e3)};var Ei=async(o,t,e,n)=>{let a=n||[...ut],r=o.address.get("borrowIncentive.query"),i=o.address.get("borrowIncentive.incentiveAccounts"),s=`${r}::incentive_account_query::incentive_account_data`,c=new Hl;c.moveCall({target:s,arguments:[c.object(i),c.object(t)]});let d=(await o.client.devInspectTransactionBlock({transactionBlock:c,sender:e})).events[0].parsedJson,u={};return d.pool_records.forEach(p=>{let m=Mi(p),{poolType:f}=m,S=o.utils.parseCoinNameFromType(f);a.length>=1&&a.includes(S)&&(u[S]=m)},{}),u};var Wi=async({address:o,client:t},e)=>{let n=o.get("borrowIncentive.object"),a=o.get("borrowIncentive.incentiveAccounts"),r=o.get("core.object"),i=await t.getObject({id:a,options:{showContent:!0}});if(i?.data?.content?.dataType!=="moveObject")return null;let s=i.data.content.fields.accounts.fields.id.id,c=await t.getDynamicFieldObject({parentId:s,name:{type:`${n}::typed_id::TypedID<${r}::obligation::Obligation>`,value:e}});return c?.data?.content?.dataType!=="moveObject"?null:c.data.content.fields.value.fields.binded_ve_sca_key?.fields.id??null};var Li=async(o,t)=>{let e=o.address.get(`core.coins.${t}.oracle.pyth.feedObject`),n=await o.client.getObject({id:e,options:{showContent:!0}});if(n.data){let a=n.data;if(a.content&&"fields"in a.content){let r=a.content.fields,i=Number(r.price_info.fields.price_feed.fields.price.fields.expo.fields.magnitude),s=Number(r.price_info.fields.price_feed.fields.price.fields.expo.fields.negative),c=Number(r.price_info.fields.price_feed.fields.price.fields.price.fields.magnitude),l=Number(r.price_info.fields.price_feed.fields.price.fields.price.fields.negative);return c*10**((s?-1:1)*i)*(l?-1:1)}}return 0};import Ha from"bignumber.js";var Ui=async(o,t)=>{let e=t,a=`${o.address.get("vesca.id")}::ve_sca::VeScaKey`,r=[],i=!1,s=null;do{let l=await o.client.getOwnedObjects({owner:e,filter:{StructType:a},cursor:s});r.push(...l.data),l.hasNextPage&&l.nextCursor?(i=!0,s=l.nextCursor):i=!1}while(i);return r.map(l=>l.data).filter(l=>!!l)},Fi=async(o,t)=>{let n=(await Ui(o,t)).map(r=>r.objectId),a=[];for(let r=0;r<n.length;r++){let i=await Ka(o,n[r]);i&&a.push(i)}return a},Ka=async(o,t,e)=>{let n=o.address.get("vesca.tableId"),a=t||(await Ui(o,e))[0].objectId,r,s=(await o.client.getDynamicFieldObject({parentId:n,name:{type:"0x2::object::ID",value:a}})).data;if(s&&s.content&&s.content.dataType==="moveObject"&&"fields"in s.content){let c=s.content.fields.value.fields;r={id:s.objectId,keyId:a,lockedScaAmount:Ha(c.locked_sca_amount).toNumber(),lockedScaCoin:Ha(c.locked_sca_amount).shiftedBy(-9).toNumber(),unlockAt:Ha(c.unlock_at).toNumber()}}return r};var Co=class{params;address;client;utils;constructor(t,e){this.params=t,this.client=t.client;let{address:n,utils:a}=e;this.address=n,this.utils=a}async getObligations(t=this.params.walletAddress){return Bt(this,t)}async getCoinAmounts(t,e){return Ii(this,t,e)}async getCoinAmount(t,e=this.params.walletAddress){return ki(this,t,e)}async getMarketCoinAmounts(t,e){return xi(this,t,e)}async getMarketCoinAmount(t,e=this.params.walletAddress){return vi(this,t,e)}async getPriceFromPyth(t){return Li(this,t)}async getAllStakeAccounts(t=this.params.walletAddress){return re(this,t)}async getStakeAccounts(t,e=this.params.walletAddress){return(await this.getAllStakeAccounts(e))[t]??[]}async getStakePools(t=[...dt]){let e={};for(let n=0;n<t.length;n++){let a=t[n],r=await $a(this,a);r&&(e[a]=r)}return e}async getStakePool(t){return $a(this,t)}async getStakeRewardPools(t=[...dt]){let e={};for(let n=0;n<t.length;n++){let a=await Qa(this,t[n]);a&&(e[t[n]]=a)}return e}async getStakeRewardPool(t){return Qa(this,t)}async getBorrowIncentiveAccounts(t,e=this.params.walletAddress,n){return Ei(this,t,e,n)}async getObligationCoinNames(t){let e=await Ai(this,t),n=e.collaterals.map(s=>`0x${s.type.name}`),a=e.debts.map(s=>`0x${s.type.name}`);return[...new Set([...n,...a])].map(s=>this.utils.parseCoinNameFromType(s))}};import{SUI_TYPE_ARG as Ga,normalizeStructTag as Kl}from"@mysten/sui.js/utils";var Io=class{params;isTestnet;_address;client;constructor(t,e){this.params=t,this.client=t.client,this._address=e}parseSymbol(t){if(To(t)){let e=t.slice(1).toLowerCase();return t.slice(0,1).toLowerCase()+Va(e)}return Va(t)}parseCoinType(t){let e=To(t)?this.parseCoinName(t):t,n=wi[e];return[F.wusdc,F.wusdt,F.weth,F.wbtc,F.wsol,F.wapt].includes(n)?`${n}::coin::COIN`:t==="vsui"?`${La.vsui}::cert::CERT`:`${n}::${e}::${e.toUpperCase()}`}parseMarketCoinType(t){let e=this._address.get("core.object")||En,n=this.parseCoinType(t);return`${e}::reserve::MarketCoin<${n}>`}parseCoinNameFromType(t){let e=Kl(t),n=/((0x[^:]+::[^:]+::[^<>]+))(?![^<>]*<)/,a=t.match(n),r=t.includes("reserve::MarketCoin");e=a?.[1]||t;let i={[`${F.wusdc}::coin::COIN`]:"wusdc",[`${F.wusdt}::coin::COIN`]:"wusdt",[`${F.weth}::coin::COIN`]:"weth",[`${F.wbtc}::coin::COIN`]:"wbtc",[`${F.wsol}::coin::COIN`]:"wsol",[`${F.wapt}::coin::COIN`]:"wapt"},s={[`${La.vsui}::cert::CERT`]:"vsui"},c=i[e]||s[e]||e.split("::")[2].toLowerCase();return r?this.parseMarketCoinName(c):c}parseCoinName(t){return t.slice(1)}parseMarketCoinName(t){return`s${t}`}getSpoolRewardCoinName=t=>Ln[t];getBorrowIncentiveRewardCoinName=t=>Si[t];getCoinDecimal(t){return yi[t]}getCoinWrappedType(t){return t==="wusdc"||t==="wusdt"||t==="weth"||t==="wbtc"||t==="wapt"||t==="wsol"?{from:"Wormhole",type:"Portal from Ethereum"}:void 0}parseSCoinType(t){return Ti[t]}parseUnderlyingSCoinType(t){let e=this.parseCoinName(t);return this.parseCoinType(e)}getSCoinTreasury(t){return this._address.get(`scoin.coins.${t}.treasury`)}async selectCoins(t,e=Ga,n){let a=n,r=[],i=0,s=!0,c=null;for(;s&&i<t;){let l=await this.client.getCoins({owner:a,coinType:e,cursor:c});l.data.sort((d,u)=>parseInt(u.balance,10)-parseInt(d.balance,10));for(let d=0;d<l.data.length&&(r.push({objectId:l.data[d].coinObjectId,digest:l.data[d].digest,version:l.data[d].version,balance:l.data[d].balance}),i+=parseInt(l.data[d].balance,10),!(i>=t));d++);c=l.nextCursor,s=l.hasNextPage}if(!r.length)throw new Error("No valid coins found for the transaction.");return r}async selectCoinsMarketCoin(t=Ga,e){let n=e,a=[],r=!0,i=null;for(;r;){let s=await this.client.getCoins({owner:n,coinType:t,cursor:i});s.data.sort((c,l)=>parseInt(l.balance,10)-parseInt(c.balance,10));for(let c=0;c<s.data.length&&(a.push({objectId:s.data[c].coinObjectId,digest:s.data[c].digest,version:s.data[c].version,balance:s.data[c].balance}),!(a.length>50));c++);i=s.nextCursor,r=s.hasNextPage}return a}async selectCoinIds(t,e=Ga,n){return(await this.selectCoins(t,e,n)).map(r=>r.objectId)}parseAprToApy(t,e=365){return(1+t/e)**e-1}parseApyToApr(t,e=365){return((1+t)**(1/e)-1)*e}takeAmountFromCoins(t,e,n){let a=e.map(s=>t.object(s)),r=a[0];a.length>1&&t.mergeCoins(r,a.slice(1));let[i]=t.splitCoins(r,[t.pure(n)]);return[i,r]}getUnlockAt(t,e){let n=Math.floor(new Date().getTime()/1e3),a=e?Math.max(e-n,0):0,r=0;if(a===0){let i=(t??1)*86400;r=Math.min(n+i,n+126144e3)}else{let i=Math.min(t?t*86400+a:a,126144e3);r=n+i}return Ni(r)}parseSCoinName(t){if(To(t)&&X.includes(t))return t;let e=`s${t}`;if(X.includes(e))return e}};import{SUI_CLOCK_OBJECT_ID as Mt,SUI_TYPE_ARG as Gl}from"@mysten/sui.js/utils";var Nt=async(...o)=>{let[t,e,n]=o;if(o.length===3&&n&&typeof n=="string"){let i=await Ka(t.query,n);return i||void 0}let a=M(e),r=await Fi(t.query,a);if(r.length!==0)return r[0]};var za=async(...o)=>{let[t,e,n,a]=o;if(o.length===4&&n&&a&&typeof n=="string"){let c=await qa(t.query,n);return{obligationId:n,obligationKey:a,obligationLocked:c}}let r=M(e),i=await Bt(t.query,r);if(i.length===0)throw new Error(`No obligation found for sender ${r}`);let s=i.find(c=>c.id===n||c.keyId===a)??i[0];return{obligationId:s.id,obligationKey:s.keyId,obligationLocked:s.locked}},zl=async({builder:o,txBlock:t})=>{let e={borrowIncentivePkg:o.address.get("borrowIncentive.id"),query:o.address.get("borrowIncentive.query"),incentivePools:o.address.get("borrowIncentive.incentivePools"),incentiveAccounts:o.address.get("borrowIncentive.incentiveAccounts"),obligationAccessStore:o.address.get("core.obligationAccessStore"),config:o.address.get("borrowIncentive.config")},n={id:"0xc63072e7f5f4983a2efaf5bdba1480d5e7d74d57948e1c7cc436f8e22cbeb410",incentivePools:"0x64972b713ccec45ec3964809e477cea6f97350c0c50ca3aec85bb631639266ec",incentiveAccounts:"0x3c0b707068bdcea8bb859d751ad3e2149a9f83c13fcf4054ef91372a00bccdd3"},a={table:o.address.get("vesca.table"),treasury:o.address.get("vesca.treasury"),config:o.address.get("vesca.config")};return{stakeObligation:(r,i)=>{t.moveCall({target:`${e.borrowIncentivePkg}::user::stake`,arguments:[t.object(e.config),t.object(e.incentivePools),t.object(e.incentiveAccounts),t.object(i),t.object(r),t.object(e.obligationAccessStore),t.object(Mt)]})},stakeObligationWithVesca:(r,i,s)=>{t.moveCall({target:`${e.borrowIncentivePkg}::user::stake_with_ve_sca`,arguments:[t.object(e.config),t.object(e.incentivePools),t.object(e.incentiveAccounts),t.object(i),t.object(r),t.object(e.obligationAccessStore),t.object(a.config),t.object(a.treasury),t.object(a.table),t.object(s),t.object(Mt)]})},unstakeObligation:(r,i)=>{t.moveCall({target:`${e.borrowIncentivePkg}::user::unstake`,arguments:[t.object(e.config),t.object(e.incentivePools),t.object(e.incentiveAccounts),t.object(i),t.object(r),t.object(Mt)]})},oldUnstakeObligation:(r,i)=>{t.moveCall({target:`${e.borrowIncentivePkg}::user::unstake`,arguments:[t.object(n.incentivePools),t.object(n.incentiveAccounts),t.object(i),t.object(r),t.object(Mt)],typeArguments:[Gl]})},claimBorrowIncentive:(r,i,s)=>{let c=o.utils.parseCoinType(s);return t.moveCall({target:`${e.borrowIncentivePkg}::user::redeem_rewards`,arguments:[t.object(e.config),t.object(e.incentivePools),t.object(e.incentiveAccounts),t.object(i),t.object(r),t.object(Mt)],typeArguments:[c]})},oldClaimBorrowIncentive(r,i,s){let c=o.utils.parseCoinType(s);return t.moveCall({target:`${n.id}::user::redeem_rewards`,arguments:[t.object(n.incentivePools),t.object(n.incentiveAccounts),t.object(i),t.object(r),t.object(Mt)],typeArguments:[c]})}}},N=async({builder:o,txBlock:t})=>{let e=await zl({builder:o,txBlock:t});return{normalMethod:e,stakeObligationQuick:async(n,a)=>{let{obligationId:r,obligationKey:i,obligationLocked:s}=await za(o,t,n,a),c=!!t.blockData.transactions.find(l=>l.kind==="MoveCall"&&(l.target===`${lt}::user::unstake`||l.target===`${o.address.get("borrowIncentive.id")}::user::unstake`));(!s||c)&&e.stakeObligation(r,i)},unstakeObligationQuick:async(n,a)=>{let{obligationId:r,obligationKey:i,obligationLocked:s}=await za(o,t,n,a);s&&e.unstakeObligation(r,i)},stakeObligationWithVeScaQuick:async(n,a,r)=>{let{obligationId:i,obligationKey:s,obligationLocked:c}=await za(o,t,n,a),l=!!t.blockData.transactions.find(async d=>d.kind==="MoveCall"&&(d.target===`${lt}::user::unstake`||d.target===`${o.address.get("borrowIncentive.id")}::user::unstake`));if(!c||l){let d=await Wi({address:o.address,client:o.client},i);if(r&&r!==d)throw new Error("Binded veScaKey is not equal to the provided veScaKey");d?e.stakeObligationWithVesca(i,s,d):e.stakeObligation(i,s)}},claimBorrowIncentiveQuick:(n,a,r)=>e.claimBorrowIncentive(a,r,n)}};import{SUI_CLOCK_OBJECT_ID as Z}from"@mysten/sui.js/utils";import{SUI_CLOCK_OBJECT_ID as vo}from"@mysten/sui.js/utils";import Jl from"axios";var qi={testnet:["https://hermes-beta.pyth.network"],mainnet:["https://hermes.pyth.network","https://scallop.rpc.p2p.world"]};import{bcs as Ja}from"@mysten/sui.js/bcs";import{SUI_CLOCK_OBJECT_ID as ko}from"@mysten/sui.js/utils";var Xa=16*1024,xo=class{provider;pythStateId;wormholeStateId;pythPackageId;wormholePackageId;priceTableInfo;priceFeedObjectIdCache=new Map;baseUpdateFee;constructor(t,e,n){this.provider=t,this.pythStateId=e,this.wormholeStateId=n,this.pythPackageId=void 0,this.wormholePackageId=void 0}async getBaseUpdateFee(){if(this.baseUpdateFee===void 0){let t=await this.provider.getObject({id:this.pythStateId,options:{showContent:!0}});if(!t.data||!t.data.content||t.data.content.dataType!=="moveObject")throw new Error("Unable to fetch pyth state object");this.baseUpdateFee=t.data.content.fields.base_update_fee}return this.baseUpdateFee}async getPackageId(t){let e=await this.provider.getObject({id:t,options:{showContent:!0}}).then(n=>{if(n.data?.content?.dataType==="moveObject")return n.data.content.fields;throw new Error(`Cannot fetch package id for object ${t}`)});if("upgrade_cap"in e)return e.upgrade_cap.fields.package;throw new Error("upgrade_cap not found")}async verifyVaas(t,e){let n=await this.getWormholePackageId(),a=[];return t.forEach(r=>{let[i]=e.moveCall({target:`${n}::vaa::parse_and_verify`,arguments:[e.object(this.wormholeStateId),e.pure(Ja.ser("vector<u8>",Array.from(r),{maxSize:Xa}).toBytes()),e.object(ko)]});a.push(i)}),a}async updatePriceFeeds(t,e,n){let a=await this.getPythPackageId(),r;if(e.length>1)throw new Error("SDK does not support sending multiple accumulator messages in a single transaction");let i=this.extractVaaBytesFromAccumulatorMessage(e[0]),s=await this.verifyVaas([i],t);[r]=t.moveCall({target:`${a}::pyth::create_authenticated_price_infos_using_accumulator`,arguments:[t.object(this.pythStateId),t.pure(Ja.ser("vector<u8>",Array.from(e[0]),{maxSize:Xa}).toBytes()),s[0],t.object(ko)]});let c=[],l=await this.getBaseUpdateFee(),d=t.splitCoins(t.gas,n.map(()=>t.pure(l))),u=0;for(let p=0;p<n.length;p++){let m=await this.getPriceFeedObjectId(n[p]);if(!m)throw new Error(`Price feed ${n[0]} not found, please create it first`);c.push(m),[r]=t.moveCall({target:`${a}::pyth::update_single_price_feed`,arguments:[t.object(this.pythStateId),r,t.object(m),d[u],t.object(ko)]}),u++}return t.moveCall({target:`${a}::hot_potato_vector::destroy`,arguments:[r],typeArguments:[`${a}::price_info::PriceInfo`]}),c}async createPriceFeed(t,e){let n=await this.getPythPackageId();if(e.length>1)throw new Error("SDK does not support sending multiple accumulator messages in a single transaction");let a=this.extractVaaBytesFromAccumulatorMessage(e[0]),r=await this.verifyVaas([a],t);t.moveCall({target:`${n}::pyth::create_price_feeds_using_accumulator`,arguments:[t.object(this.pythStateId),t.pure(Ja.ser("vector<u8>",Array.from(e[0]),{maxSize:Xa}).toBytes()),r[0],t.object(ko)]})}async getWormholePackageId(){return this.wormholePackageId||(this.wormholePackageId=await this.getPackageId(this.wormholeStateId)),this.wormholePackageId}async getPythPackageId(){return this.pythPackageId||(this.pythPackageId=await this.getPackageId(this.pythStateId)),this.pythPackageId}async getPriceFeedObjectId(t){let e=t.replace("0x","");if(!this.priceFeedObjectIdCache.has(e)){let{id:n,fieldType:a}=await this.getPriceTableInfo(),r=await this.provider.getDynamicFieldObject({parentId:n,name:{type:`${a}::price_identifier::PriceIdentifier`,value:{bytes:Array.from(Buffer.from(e,"hex"))}}});if(!r.data||!r.data.content)return;if(r.data.content.dataType!=="moveObject")throw new Error("Price feed type mismatch");this.priceFeedObjectIdCache.set(e,r.data.content.fields.value)}return this.priceFeedObjectIdCache.get(e)}async getPriceTableInfo(){if(this.priceTableInfo===void 0){let t=await this.provider.getDynamicFieldObject({parentId:this.pythStateId,name:{type:"vector<u8>",value:"price_info"}});if(!t.data||!t.data.type)throw new Error("Price Table not found, contract may not be initialized");let e=t.data.type.replace("0x2::table::Table<","");e=e.replace("::price_identifier::PriceIdentifier, 0x2::object::ID>",""),this.priceTableInfo={id:t.data.objectId,fieldType:e}}return this.priceTableInfo}extractVaaBytesFromAccumulatorMessage(t){let n=7+t.readUint8(6)+1,a=t.readUint16BE(n),r=n+2;return t.subarray(r,r+a)}};var Xl=async(o,t)=>(await Jl.get(`${o}/api/latest_vaas`,{params:{ids:t}})).data.map(a=>Buffer.from(a,"base64")),ie=async(o,t,e)=>{let n=e??[...new Set([...J,...Wn])],a=o.isTestnet?["pyth"]:["pyth"];if(a.includes("pyth")){let i=new xo(o.client,o.address.get("core.oracles.pyth.state"),o.address.get("core.oracles.pyth.wormholeState")),s=[];await Promise.all(n.map(async l=>s.push(o.address.get(`core.coins.${l}.oracle.pyth.feed`))));let c=o.params.pythEndpoints??qi[o.isTestnet?"testnet":"mainnet"];try{let l=await Xl(c[0],s);await i.updatePriceFeeds(t,l,s)}catch(l){console.warn(`Failed to update price feeds with endpoint ${c[0]}: ${l}`)}}let r=[...new Set(n)];for(let i=0;i<r.length;i++)await Yl(o,t,r[i],a)},Yl=async(o,t,e,n)=>{let a=o.utils.parseCoinType(e);Zl(t,n,o.address.get("core.packages.xOracle.id"),o.address.get("core.oracles.xOracle"),o.address.get("core.packages.pyth.id"),o.address.get("core.oracles.pyth.registry"),o.address.get("core.oracles.pyth.state"),o.address.get(`core.coins.${e}.oracle.pyth.feedObject`),o.address.get("core.packages.switchboard.id"),o.address.get("core.oracles.switchboard.registry"),o.address.get(`core.coins.${e}.oracle.switchboard`),o.address.get("core.packages.supra.id"),o.address.get("core.oracles.supra.registry"),o.address.get("core.oracles.supra.holder"),a)},Zl=(o,t,e,n,a,r,i,s,c,l,d,u,p,m,f)=>{let S=td(o,e,n,f);return t.includes("pyth")&&ad(o,a,S,i,s,r,f),t.includes("switchboard")&&od(o,c,S,d,l,f),t.includes("supra")&&nd(o,u,S,m,p,f),ed(o,e,n,S,f),o},td=(o,t,e,n)=>{let a=typeof e=="string"?o.object(e):e,r=`${t}::x_oracle::price_update_request`,i=[n];return o.moveCall({target:r,arguments:[a],typeArguments:i})},ed=(o,t,e,n,a)=>{let r=`${t}::x_oracle::confirm_price_update_request`,i=[a],s=typeof e=="string"?o.object(e):e;return o.moveCall({target:r,arguments:[s,n,o.object(vo)],typeArguments:i}),o},nd=(o,t,e,n,a,r)=>{let i=typeof n=="string"?o.object(n):n,s=typeof a=="string"?o.object(a):a;o.moveCall({target:`${t}::rule::set_price`,arguments:[e,i,s,o.object(vo)],typeArguments:[r]})},od=(o,t,e,n,a,r)=>{let i=typeof n=="string"?o.object(n):n,s=typeof a=="string"?o.object(a):a;o.moveCall({target:`${t}::rule::set_price`,arguments:[e,i,s,o.object(vo)],typeArguments:[r]})},ad=(o,t,e,n,a,r,i)=>{let s=typeof e=="string"?o.object(e):e,c=typeof n=="string"?o.object(n):n,l=typeof a=="string"?o.object(a):a,d=typeof r=="string"?o.object(r):r;o.moveCall({target:`${t}::rule::set_price`,arguments:[s,c,l,d,o.object(vo)],typeArguments:[i]})};var mt=async({builder:o,txBlock:t})=>{let e={pkgId:o.address.get("scoin.id")},n={};return await Promise.all(X.map(async a=>{let r=o.utils.getSCoinTreasury(a);n[a]=r})),{mintSCoin:(a,r)=>t.moveCall({target:`${e.pkgId}::s_coin_converter::mint_s_coin`,arguments:[t.object(n[a]),typeof r!="string"?r:t.pure(r)],typeArguments:[o.utils.parseSCoinType(a),o.utils.parseUnderlyingSCoinType(a)]}),burnSCoin:(a,r)=>t.moveCall({target:`${e.pkgId}::s_coin_converter::burn_s_coin`,arguments:[t.object(n[a]),typeof r!="string"?r:t.pure(r)],typeArguments:[o.utils.parseSCoinType(a),o.utils.parseUnderlyingSCoinType(a)]})}};var se=async(...o)=>{let[t,e,n,a]=o;if(o.length===3&&n)return{obligationId:n};if(o.length===4&&n&&a)return{obligationId:n,obligationKey:a};let r=M(t),i=await Bt(e.query,r);if(i.length===0)throw new Error(`No obligation found for sender ${r}`);return{obligationId:i[0].id,obligationKey:i[0].keyId}},rd=async({builder:o,txBlock:t})=>{let e={protocolPkg:o.address.get("core.packages.protocol.id"),market:o.address.get("core.market"),version:o.address.get("core.version"),coinDecimalsRegistry:o.address.get("core.coinDecimalsRegistry"),xOracle:o.address.get("core.oracles.xOracle")},a=`${o.address.get("referral.id")}::scallop_referral_program::REFERRAL_WITNESS`;return{openObligation:()=>t.moveCall({target:`${e.protocolPkg}::open_obligation::open_obligation`,arguments:[t.object(e.version)]}),returnObligation:(r,i)=>t.moveCall({target:`${e.protocolPkg}::open_obligation::return_obligation`,arguments:[t.object(e.version),t.object(r),t.object(i)]}),openObligationEntry:()=>t.moveCall({target:`${e.protocolPkg}::open_obligation::open_obligation_entry`,arguments:[t.object(e.version)]}),addCollateral:(r,i,s)=>{let c=o.utils.parseCoinType(s);return t.moveCall({target:`${e.protocolPkg}::deposit_collateral::deposit_collateral`,arguments:[t.object(e.version),t.object(r),t.object(e.market),typeof i!="string"?i:t.pure(i)],typeArguments:[c]})},takeCollateral:(r,i,s,c)=>{let l=o.utils.parseCoinType(c);return t.moveCall({target:`${e.protocolPkg}::withdraw_collateral::withdraw_collateral`,arguments:[t.object(e.version),t.object(r),t.object(i),t.object(e.market),t.object(e.coinDecimalsRegistry),t.pure(s),t.object(e.xOracle),t.object(Z)],typeArguments:[l]})},deposit:(r,i)=>{let s=o.utils.parseCoinType(i);return t.moveCall({target:`${e.protocolPkg}::mint::mint`,arguments:[t.object(e.version),t.object(e.market),typeof r!="string"?r:t.pure(r),t.object(Z)],typeArguments:[s]})},depositEntry:(r,i)=>{let s=o.utils.parseCoinType(i);return t.moveCall({target:`${e.protocolPkg}::mint::mint_entry`,arguments:[t.object(e.version),t.object(e.market),typeof r!="string"?r:t.pure(r),t.object(Z)],typeArguments:[s]})},withdraw:(r,i)=>{let s=o.utils.parseCoinType(i);return t.moveCall({target:`${e.protocolPkg}::redeem::redeem`,arguments:[t.object(e.version),t.object(e.market),typeof r!="string"?r:t.pure(r),t.object(Z)],typeArguments:[s]})},withdrawEntry:(r,i)=>{let s=o.utils.parseCoinType(i);return t.moveCall({target:`${e.protocolPkg}::redeem::redeem_entry`,arguments:[t.object(e.version),t.object(e.market),typeof r!="string"?r:t.pure(r),t.object(Z)],typeArguments:[s]})},borrow:(r,i,s,c)=>{let l=o.utils.parseCoinType(c);return t.moveCall({target:`${e.protocolPkg}::borrow::borrow`,arguments:[t.object(e.version),t.object(r),t.object(i),t.object(e.market),t.object(e.coinDecimalsRegistry),t.pure(s),t.object(e.xOracle),t.object(Z)],typeArguments:[l]})},borrowEntry:(r,i,s,c)=>{let l=o.utils.parseCoinType(c);return t.moveCall({target:`${e.protocolPkg}::borrow::borrow_entry`,arguments:[t.object(e.version),t.object(r),t.object(i),t.object(e.market),t.object(e.coinDecimalsRegistry),t.pure(s),t.object(e.xOracle),t.object(Z)],typeArguments:[l]})},borrowWithReferral:(r,i,s,c,l)=>{let d=o.utils.parseCoinType(l);return t.moveCall({target:`${e.protocolPkg}::borrow::borrow_with_referral`,arguments:[t.object(e.version),t.object(r),t.object(i),t.object(e.market),t.object(e.coinDecimalsRegistry),t.object(s),t.pure(c),t.object(e.xOracle),t.object(Z)],typeArguments:[d,a]})},repay:(r,i,s)=>{let c=o.utils.parseCoinType(s);return t.moveCall({target:`${e.protocolPkg}::repay::repay`,arguments:[t.object(e.version),t.object(r),t.object(e.market),typeof i!="string"?i:t.pure(i),t.object(Z)],typeArguments:[c]})},borrowFlashLoan:(r,i)=>{let s=o.utils.parseCoinType(i);return t.moveCall({target:`${e.protocolPkg}::flash_loan::borrow_flash_loan`,arguments:[t.object(e.version),t.object(e.market),t.pure(r)],typeArguments:[s]})},repayFlashLoan:(r,i,s)=>{let c=o.utils.parseCoinType(s);return t.moveCall({target:`${e.protocolPkg}::flash_loan::repay_flash_loan`,arguments:[t.object(e.version),t.object(e.market),t.pure(r),t.object(i)],typeArguments:[c]})}}},E=async({builder:o,txBlock:t})=>{let e=await rd({builder:o,txBlock:t}),n=await mt({builder:o,txBlock:t});return{normalMethod:e,addCollateralQuick:async(a,r,i)=>{let s=M(t),{obligationId:c}=await se(t,o,i);if(r==="sui"){let[l]=t.splitCoins(t.gas,[a]);e.addCollateral(c,l,r)}else{let{leftCoin:l,takeCoin:d}=await o.selectCoin(t,r,a,s);e.addCollateral(c,d,r),t.transferObjects([l],s)}},takeCollateralQuick:async(a,r,i,s)=>{let c=await se(t,o,i,s),l=await o.query.getObligationCoinNames(c.obligationId);return await ie(o,t,l),e.takeCollateral(c.obligationId,c.obligationKey,a,r)},depositQuick:async(a,r,i)=>{if(r==="sui"){let[l]=t.splitCoins(t.gas,[a]);return e.deposit(l,r)}let{leftCoin:s,takeCoin:c}=await o.selectCoin(t,r,a,i);return t.transferObjects([s],i),e.deposit(c,r)},withdrawQuick:async(a,r)=>{let i=M(t),s=o.utils.parseMarketCoinName(r);try{let c=o.utils.parseSCoinName(r);if(!c)throw new Error(`No sCoin for ${r}`);let{leftCoin:l,takeCoin:d,totalAmount:u}=await o.selectSCoin(t,c,a,i);t.transferObjects([l],i);let p=n.burnSCoin(c,d),m=e.withdraw(p,r),f=a-u;try{if(f>0){let{leftCoin:S,takeCoin:T}=await o.selectMarketCoin(t,s,f,i);t.transferObjects([S],i),t.mergeCoins(m,[e.withdraw(T,r)])}}catch{}return m}catch{let{leftCoin:l,takeCoin:d}=await o.selectMarketCoin(t,s,a,i);return t.transferObjects([l],i),e.withdraw(d,r)}},borrowQuick:async(a,r,i,s)=>{let c=await se(t,o,i,s),d=[...await o.query.getObligationCoinNames(c.obligationId),r];return await ie(o,t,d),e.borrow(c.obligationId,c.obligationKey,a,r)},borrowWithReferralQuick:async(a,r,i,s,c)=>{let l=await se(t,o,s,c),u=[...await o.query.getObligationCoinNames(l.obligationId),r];return await ie(o,t,u),e.borrowWithReferral(l.obligationId,l.obligationKey,i,a,r)},repayQuick:async(a,r,i,s)=>{let c=await se(t,o,i);if(r==="sui"){let[u]=t.splitCoins(t.gas,[a]);return e.repay(c.obligationId,u,r)}let{leftCoin:l,takeCoin:d}=await o.selectCoin(t,r,a,s);return t.transferObjects([l],s),e.repay(c.obligationId,d,r)},updateAssetPricesQuick:async a=>ie(o,t,a)}};import{SUI_CLOCK_OBJECT_ID as Ao}from"@mysten/sui.js/utils";var Do=async({builder:o,txBlock:t})=>{let e={referralPgkId:o.address.get("referral.id"),referralBindings:o.address.get("referral.referralBindings"),referralRevenuePool:o.address.get("referral.referralRevenuePool"),authorizedWitnessList:o.address.get("referral.authorizedWitnessList"),referralTiers:o.address.get("referral.referralTiers"),version:o.address.get("referral.version")},n=o.address.get("vesca.table");return{bindToReferral:a=>t.moveCall({target:`${e.referralPgkId}::referral_bindings::bind_ve_sca_referrer`,arguments:[t.object(e.referralBindings),t.pure(a),t.object(n),t.object(Ao)],typeArguments:[]}),claimReferralTicket:a=>{let r=o.utils.parseCoinType(a);return t.moveCall({target:`${e.referralPgkId}::scallop_referral_program::claim_ve_sca_referral_ticket`,arguments:[t.object(e.version),t.object(n),t.object(e.referralBindings),t.object(e.authorizedWitnessList),t.object(e.referralTiers),t.object(Ao)],typeArguments:[r]})},burnReferralTicket:(a,r)=>{let i=o.utils.parseCoinType(r);return t.moveCall({target:`${e.referralPgkId}::scallop_referral_program::burn_ve_sca_referral_ticket`,arguments:[t.object(e.version),t.object(a),t.object(e.referralRevenuePool),t.object(Ao)],typeArguments:[i]})},claimReferralRevenue:(a,r)=>{let i=o.utils.parseCoinType(r);return t.moveCall({target:`${e.referralPgkId}::referral_revenue_pool::claim_revenue_with_ve_sca_key`,arguments:[t.object(e.version),t.object(e.referralRevenuePool),t.object(a),t.object(Ao)],typeArguments:[i]})}}},$i=async({builder:o,txBlock:t})=>{let e=await Do({builder:o,txBlock:t});return{claimReferralRevenueQuick:async(n,a,r=[...J])=>{let i=[];for(let s=0;s<r.length;s++)if(r[s]==="sui"){let c=e.claimReferralRevenue(n,r[s]);i.push(c)}else{let c=e.claimReferralRevenue(n,r[s]);try{let l=await o.utils.selectCoinIds(1/0,o.utils.parseCoinType(r[s]),a);t.mergeCoins(c,l.slice(0,500))}catch{}finally{i.push(c)}}i.length>0&&t.transferObjects(i,t.pure(a))}}};var id={packageId:"0x5857d185897aaff40ae37b2eecc895efc1a9dff1b210c4fb894eabbce4ac2603"},Qi={check_slippage:(o,t,e,n,a)=>o.moveCall({target:`${id.packageId}::slippage_check::check_slippage`,arguments:[t,o.pure(e),o.pure(n)],typeArguments:[a]})};import{SUI_CLOCK_OBJECT_ID as Oo}from"@mysten/sui.js/utils";var Vi=async(o,t,e,n,a,r,i=!1)=>{let s=await mt({builder:o,txBlock:t}),c=await Ki({builder:o,txBlock:t});try{let{takeCoin:l,leftCoin:d,totalAmount:u}=i?await o.selectSCoin(t,n,a,r):await o.selectMarketCoin(t,n,a,r);if(i){let p=s.burnSCoin(n,l);c.stake(e,p,n)}else c.stake(e,l,n);return t.transferObjects([d],r),u}catch{return 0}},Hi=async(...o)=>{let[t,e,n,a]=o;if(o.length===4&&a)return[a];let r=M(e);return(await re(t.query,r))[n].map(s=>s.id)},sd=async(...o)=>{let[t,e,n,a]=o,r=M(e),i=await re(t.query,r);if(i[n].length===0)throw new Error(`No stake account found for sender ${r}`);return a?i[n].filter(c=>c.id===a):i[n]},Ki=async({builder:o,txBlock:t})=>{let e={spoolPkg:o.address.get("spool.id")},n={},a={},r={};return dt.forEach(i=>{let s=o.address.get(`spool.pools.${i}.id`),c=o.address.get(`spool.pools.${i}.rewardPoolId`),l=o.utils.parseMarketCoinType(i);n[i]=s,a[i]=c,r[i]=l}),{createStakeAccount:i=>{let s=r[i],c=n[i];return t.moveCall({target:`${e.spoolPkg}::user::new_spool_account`,arguments:[t.object(c),t.object(Oo)],typeArguments:[s]})},stake:(i,s,c)=>{let l=r[c],d=n[c];t.moveCall({target:`${e.spoolPkg}::user::stake`,arguments:[t.object(d),t.object(i),typeof s=="string"?t.pure(s):s,t.object(Oo)],typeArguments:[l]})},unstake:(i,s,c)=>{let l=r[c],d=n[c];return t.moveCall({target:`${e.spoolPkg}::user::unstake`,arguments:[t.object(d),t.object(i),t.pure(s),t.object(Oo)],typeArguments:[l]})},claim:(i,s)=>{let c=n[s],l=a[s],d=r[s],u=Ln[s],p=o.utils.parseCoinType(u);return t.moveCall({target:`${e.spoolPkg}::user::redeem_rewards`,arguments:[t.object(c),t.object(l),t.object(i),t.object(Oo)],typeArguments:[d,p]})}}},tt=async({builder:o,txBlock:t})=>{let e=await Ki({builder:o,txBlock:t}),n=await mt({builder:o,txBlock:t});return{normalMethod:e,stakeQuick:async(a,r,i)=>{let s=M(t),c=await Hi(o,t,r,i),l=[];if(c.length===0){let d=e.createStakeAccount(r);l.push(d)}if(typeof a=="number"){let d=await Vi(o,t,c.length>0?c[0]:l[0],r,a,s);a-=d,d||await Vi(o,t,c.length>0?c[0]:l[0],r,a,s,!0)}else e.stake(c.length>0?c[0]:l[0],a,r);l.length>0&&t.transferObjects(l,s)},unstakeQuick:async(a,r,i,s)=>{let c=await sd(o,t,r,i),l=[],d=a;for(let u of c){if(u.staked===0)continue;let p=Math.min(d,u.staked),m=e.unstake(u.id,p,r);if(s){let f=n.mintSCoin(r,m);l.push(f)}else l.push(m);if(d-=p,a<=0)break}if(l.length>0){let u=l[0];return l.length>1&&t.mergeCoins(u,l.slice(1)),u}},claimQuick:async(a,r)=>{let i=await Hi(o,t,a,r),s=[];return i.forEach(c=>{let l=e.claim(c,a);s.push(l)}),s}}};import{SUI_CLOCK_OBJECT_ID as ce}from"@mysten/sui.js/utils";var cd=async({builder:o,txBlock:t})=>{let e={pkgId:o.address.get("vesca.id"),table:o.address.get("vesca.table"),treasury:o.address.get("vesca.treasury"),config:o.address.get("vesca.config")};return{lockSca:(n,a)=>t.moveCall({target:`${e.pkgId}::ve_sca::mint_ve_sca_key`,arguments:[t.object(e.config),t.object(e.table),t.object(e.treasury),typeof n=="string"?t.pure(n):n,t.pure(a),t.object(ce)]}),extendLockPeriod:(n,a)=>{t.moveCall({target:`${e.pkgId}::ve_sca::extend_lock_period`,arguments:[t.object(e.config),t.object(n),t.object(e.table),t.object(e.treasury),t.pure(a),t.object(ce)]})},extendLockAmount:(n,a)=>{t.moveCall({target:`${e.pkgId}::ve_sca::lock_more_sca`,arguments:[t.object(e.config),t.object(n),t.object(e.table),t.object(e.treasury),typeof a=="string"?t.pure(a):a,t.object(ce)]})},renewExpiredVeSca:(n,a,r)=>{t.moveCall({target:`${e.pkgId}::ve_sca::renew_expired_ve_sca`,arguments:[t.object(e.config),t.object(n),t.object(e.table),t.object(e.treasury),typeof a=="string"?t.pure(a):a,t.pure(r),t.object(ce)]})},redeemSca:n=>t.moveCall({target:`${e.pkgId}::ve_sca::redeem`,arguments:[t.object(e.config),t.object(n),t.object(e.table),t.object(e.treasury),t.object(ce)]}),mintEmptyVeSca:()=>t.moveCall({target:`${e.pkgId}::ve_sca::mint_ve_sca_placeholder_key`,arguments:[t.object(e.config),t.object(e.table)],typeArguments:[]})}},ft=async({builder:o,txBlock:t})=>{let e=await cd({builder:o,txBlock:t});return{normalMethod:e,lockScaQuick:async(n,a,r=!0)=>{let i=M(t),s=await Nt(o,t),c,l=[];if(n!==void 0&&typeof n=="number"){let m=await o.utils.selectCoinIds(n,ct,i),[f,S]=o.utils.takeAmountFromCoins(t,m,n);c=f,l.push(S)}else c=n;let d=o.utils.getUnlockAt(a,s?.unlockAt);r&&Pi(n,a,d,s?.unlockAt),console.log(new Date(d*1e3).toLocaleString("en-CA",{hour12:!0}));let u=!s?.unlockAt,p=!u&&s.unlockAt*1e3<=new Date().getTime();if(u||p){if(c)if(u){let m=e.lockSca(c,d);l.push(m)}else{if(s.lockedScaAmount!==0){let m=e.redeemSca(s.keyId);l.push(m)}e.renewExpiredVeSca(s.keyId,c,d)}}else c&&a?(e.extendLockPeriod(s.keyId,d),e.extendLockAmount(s.keyId,c)):a?e.extendLockPeriod(s.keyId,d):c&&e.extendLockAmount(s.keyId,c);l.length>0&&t.transferObjects(l,i)},extendLockPeriodQuick:async(n,a,r=!0)=>{let i=await Nt(o,t,a),s=o.utils.getUnlockAt(n);r&&_i(n,s,i?.unlockAt),i&&e.extendLockPeriod(i.keyId,s)},extendLockAmountQuick:async(n,a,r=!0)=>{let i=M(t),s=await Nt(o,t,a);if(r&&Ri(n,s?.unlockAt),s){let c=await o.utils.selectCoinIds(n,ct,i),[l,d]=o.utils.takeAmountFromCoins(t,c,n);e.extendLockAmount(s.keyId,l),t.transferObjects([d],i)}},renewExpiredVeScaQuick:async(n,a,r,i=!0)=>{let s=M(t),c=await Nt(o,t,r),l=o.utils.getUnlockAt(a,c?.unlockAt);if(i&&Bi(n,a,c?.unlockAt),c){let d=[];if(c.lockedScaAmount!==0){let f=e.redeemSca(c.keyId);d.push(f)}let u=await o.utils.selectCoinIds(n,ct,s),[p,m]=o.utils.takeAmountFromCoins(t,u,n);d.push(m),e.renewExpiredVeSca(c.keyId,p,l),t.transferObjects(d,s)}},redeemScaQuick:async n=>{let a=M(t),r=await Nt(o,t,n);if(jt(r?.unlockAt),r){let i=e.redeemSca(r.keyId);t.transferObjects([i],a)}}}};import{normalizeStructTag as ud}from"@mysten/sui.js/utils";import{SUI_CLOCK_OBJECT_ID as ld}from"@mysten/sui.js/utils";var Et={id:"0x000000000000000000000000000000000000000000000000000000000000dee9",pools:{sui2usdc:{object:{objectId:"0x4405b50d791fd3346754e8171aaab6bc2ed26c2c46efdd033c14b30ae507ac33",initialSharedVersion:"32079148",mutable:!0},lotsize:1e8},usdt2usdc:{object:{objectId:"0xd1f0a9baacc1864ab19534e2d4c5d6c14f2e071a1f075e8e7f9d51f2c17dc238",initialSharedVersion:"32079148",mutable:!0},lotsize:1e5},wusdc2usdc:{object:{objectId:"0x39f2f7c126189b9b5cda6b770ab34031dde22307d19842e95ab576873c77fa14",initialSharedVersion:"82838334",mutable:!0},lotsize:1e5}}},Gi={id:"0x000000000000000000000000000000000000000000000000000000000000dee9"},Ya={id:"0x2c6c36393db063a9534885d22a47caead720272475336470736be28f119971f3"},zi={clob_v2:{swap_exact_quote_for_base:"clob_v2::swap_exact_quote_for_base",swap_exact_base_for_quote:"clob_v2::swap_exact_base_for_quote",create_account:"clob_v2::create_account"}};var Ji={objectId:ld,initialSharedVersion:"1",mutable:!1},dd=(o,t)=>{if(o==="sui")switch(t){case"wusdc":return{pool:Et.pools.sui2usdc,aToB:!0};default:throw new Error(`Invalid coin pair: ${o} and ${t}`)}else if(o==="wusdc")switch(t){case"sui":return{pool:Et.pools.sui2usdc,aToB:!1};case"wusdt":return{pool:Et.pools.usdt2usdc,aToB:!1};case"usdc":return{pool:Et.pools.wusdc2usdc,aToB:!0};default:throw new Error(`Invalid coin pair: ${o} and ${t}`)}else if(o==="wusdt")switch(t){case"wusdc":return{pool:Et.pools.usdt2usdc,aToB:!0};default:throw new Error(`Invalid coin pair: ${o} and ${t}`)}else throw new Error(`Invalid coin pair: ${o} and ${t}`)},Za={createAccount:o=>o.moveCall({target:`${Gi.id}::${zi.clob_v2.create_account}`,arguments:[],typeArguments:[]}),swap:(o,t,e,n,a,r,i)=>{let{pool:s,aToB:c}=dd(e,n),l=i.parseCoinType(e),d=i.parseCoinType(n),u=typeof r=="string"?o.object(r):"objectId"in r?o.objectRef(r):o.object(r);if(!s)throw new Error(`Deepbook: No pool found for ${e} to ${n}`);return c?o.moveCall({target:`${Ya.id}::deepbook::deepbook_base_for_quote`,arguments:[o.sharedObjectRef(s.object),o.pure(a),u,o.object(t),o.sharedObjectRef(Ji),o.pure(s.lotsize)],typeArguments:[l,d]}):o.moveCall({target:`${Ya.id}::deepbook::deepbook_quote_for_base`,arguments:[o.sharedObjectRef(s.object),o.pure(a),u,o.sharedObjectRef(Ji),o.object(t),o.pure(s.lotsize)],typeArguments:[d,l]})}};var Po=class{suiClient;scallopUtils;_clientOrderId=0;_accountCap;currentAddress;constructor({client:t,currentAddress:e,accountCap:n,scallopUtils:a}){this.currentAddress=e,this.suiClient=t,this._accountCap=n,this.scallopUtils=a}get clientOrderId(){let t=this._clientOrderId;return this._clientOrderId++,t}async accountCap(t){if(this._accountCap)return this._accountCap;try{let{data:e}=await this.suiClient.getOwnedObjects({owner:this.currentAddress,filter:{StructType:ud("0xdee9::custodian_v2::AccountCap")},limit:1});return e.length===0||!e[0].data?Za.createAccount(t):{objectId:e[0].data.objectId,version:e[0].data.version,digest:e[0].data.digest}}catch{throw new Error("Failed to create account cap")}}async swapToken({tokenObjectIn:t,baseCoinName:e,quoteCoinName:n,tx:a}){let r=await this.accountCap(a);return{swapResult:Za.swap(a,t,e,n,this.clientOrderId,r,this.scallopUtils),accountCap:r}}};var _o=class{params;client;address;builder;query;utils;walletAddress;deepbookSwap;constructor(t,e){this.params=t,this.client=t.client,this.address=e,this.utils=new Io(t,this.address),this.query=new Co(t,{address:this.address,utils:this.utils}),this.builder=new yo(t,{address:this.address,query:this.query,utils:this.utils}),this.deepbookSwap=new Po({client:this.client,currentAddress:this.params.walletAddress,scallopUtils:this.utils})}async getObligations(t){let e=t||this.params.walletAddress;return this.query.getObligations(e)}async getAllStakeAccounts(t){let e=t||this.params.walletAddress;return this.query.getAllStakeAccounts(e)}async getStakeAccounts(t,e){let n=e||this.params.walletAddress;return this.query.getStakeAccounts(t,n)}async getStakePool(t){return this.query.getStakePool(t)}async getStakeRewardPool(t){return this.query.getStakeRewardPool(t)}async openObligation(t){let e=new I,n=await E({builder:this.builder,txBlock:e}),a=await N({builder:this.builder,txBlock:e}),r=t||this.params.walletAddress;e.setSender(r);let[i,s,c]=n.normalMethod.openObligation();return a.normalMethod.stakeObligation(i,s),n.normalMethod.returnObligation(i,c),e.transferObjects([s],r),e}async depositCollateral(t,e,n,a){let r=new I,i=a||this.params.walletAddress;r.setSender(i);let s=await E({builder:this.builder,txBlock:r}),c=await this.query.getObligations(i),l=n||c?.[0]?.id;if(l)await s.addCollateralQuick(e,t,l);else{let[d,u,p]=s.normalMethod.openObligation();await s.addCollateralQuick(e,t,d),s.normalMethod.returnObligation(d,p),r.transferObjects([u],i)}return r}async withdrawCollateral(t,e,n,a,r){let i=new I,s=await E({builder:this.builder,txBlock:i}),c=r||this.params.walletAddress;i.setSender(c);let l=await s.takeCollateralQuick(e,t,n,a);return i.transferObjects([l],c),i}async deposit(t,e,n){let a=new I,r=await E({builder:this.builder,txBlock:a}),i=await mt({builder:this.builder,txBlock:a}),s=n||this.params.walletAddress;a.setSender(s);let c=await r.depositQuick(e,t,n),l=this.utils.parseMarketCoinName(t);if(!X.includes(l))a.transferObjects([c],s);else{let d=i.mintSCoin(l,c);a.transferObjects([d],s)}return a}async withdraw(t,e,n){let a=new I,r=n||this.params.walletAddress,i=await E({builder:this.builder,txBlock:a});a.setSender(r);let s=await i.withdrawQuick(e,t);return a.transferObjects([s],r),a}async borrow(t,e,n,a,r){let i=new I,s=await E({builder:this.builder,txBlock:i}),c=await N({builder:this.builder,txBlock:i}),l=r||this.params.walletAddress;i.setSender(l);let d=ut.includes(t);d&&await c.unstakeObligationQuick(n,a);let u=await s.borrowQuick(e,t,n,a);return i.transferObjects([u],l),d&&await c.stakeObligationQuick(n,a),i}async borrowWithBoost(t,e,n,a,r,i){let s=new I,c=await E({builder:this.builder,txBlock:s}),l=await N({builder:this.builder,txBlock:s}),d=i||this.params.walletAddress;s.setSender(d);let u=ut.includes(t);u&&await l.unstakeObligationQuick(n,a);let p=await c.borrowQuick(e,t,n,a);return s.transferObjects([p],d),u&&await l.stakeObligationWithVeScaQuick(n,a,r),s}async borrowWithReferral(t,e,n,a,r,i){let s=new I,c=await E({builder:this.builder,txBlock:s}),l=await N({builder:this.builder,txBlock:s}),d=await Do({builder:this.builder,txBlock:s}),u=i||this.params.walletAddress;s.setSender(u);let p=ut.includes(t);p&&await l.unstakeObligationQuick(n,a);let m=d.claimReferralTicket(t),f=await c.borrowWithReferralQuick(e,t,m,n,a);return d.burnReferralTicket(m,t),s.transferObjects([f],u),p&&r?await l.stakeObligationWithVeScaQuick(n,a,r):await l.stakeObligationQuick(n,a),s}async repay(t,e,n,a,r){let i=new I,s=await E({builder:this.builder,txBlock:i}),c=await N({builder:this.builder,txBlock:i}),l=r||this.params.walletAddress;i.setSender(l);let d=ut.includes(t);return d&&await c.unstakeObligationQuick(n,a),await s.repayQuick(e,t,n,l),d&&await c.stakeObligationQuick(n,a),i}async repayWithBoost(t,e,n,a,r){let i=new I,s=await E({builder:this.builder,txBlock:i}),c=await N({builder:this.builder,txBlock:i}),l=r||this.params.walletAddress;i.setSender(l);let d=ut.includes(t);return d&&await c.unstakeObligationQuick(n,void 0),await s.repayQuick(e,t,n,l),d&&await c.stakeObligationWithVeScaQuick(n,void 0,a),i}async createStakeAccount(t,e){let n=new I,a=await tt({builder:this.builder,txBlock:n}),r=e||this.params.walletAddress;n.setSender(r);let i=a.normalMethod.createStakeAccount(t);return n.transferObjects([i],r),n}async supplyAndStake(t,e,n,a){let r=new I,i=await E({builder:this.builder,txBlock:r}),s=await tt({builder:this.builder,txBlock:r}),c=a||this.params.walletAddress;r.setSender(c);let l=await i.depositQuick(e,t,a),d=this.utils.parseMarketCoinName(t);if(!dt.find(m=>m===d))return r;let u=await this.query.getStakeAccounts(d,c),p=n||(u.length>0?u[0].id:void 0);if(p)await s.stakeQuick(l,d,p);else{let m=s.normalMethod.createStakeAccount(d);await s.stakeQuick(l,d,m),r.transferObjects([m],c)}return r}async unstakeAndWithdraw(t,e,n){let a=new I,r=await E({builder:this.builder,txBlock:a}),i=await tt({builder:this.builder,txBlock:a}),s=this.params.walletAddress,c=[];a.setSender(s);let l=this.utils.parseMarketCoinName(t);for(let d=0;d<n.length;d++){let u=n[d],[p]=await i.unstakeQuick(u.coin,l,u.id);if(p){let m=r.normalMethod.withdraw(p,t);c.push(m)}}if(e>0){let d=await r.withdrawQuick(e,t);c.push(d)}return c.length>1&&a.mergeCoins(c[0],c.slice(1)),a.transferObjects(c,s),a}async stake(t,e,n,a){let r=new I,i=await tt({builder:this.builder,txBlock:r}),s=a||this.params.walletAddress;r.setSender(s);let c=await this.query.getStakeAccounts(t,s),l=n||(c.length>0?c[0].id:void 0);if(l)await i.stakeQuick(e,t,l);else{let d=i.normalMethod.createStakeAccount(t);await i.stakeQuick(e,t,d),r.transferObjects([d],s)}return r}async unstake(t,e,n,a){let r=new I,i=await tt({builder:this.builder,txBlock:r}),s=a||this.params.walletAddress;r.setSender(s);let c=X.includes(t),l=await i.unstakeQuick(e,t,n,c);return r.transferObjects([l],r.pure(s)),r}async claim(t,e,n,a){let r=new I,i=await tt({builder:this.builder,txBlock:r}),s=await N({builder:this.builder,txBlock:r}),c=a||this.params.walletAddress;r.setSender(c);let l={sui:[],sca:[]};for(let d=0;d<t.length;d++){let{stakeMarketCoinName:u,stakeAccountId:p}=t[d],m=i.normalMethod.claim(p,u);l.sui.push(m)}for(let d=0;d<e.length;d++){let{obligationId:u,obligationKey:p,rewardCoinName:m}=e[d],f=s.normalMethod.claimBorrowIncentive(u,p,m);l[m].push(f)}for(let d=0;d<n.length;d++){let{obligationId:u,obligationKey:p,rewardCoinName:m}=n[d],f=s.normalMethod.oldClaimBorrowIncentive(u,p,m);l[m].push(f)}return l.sui.length>0&&(l.sui.length>1&&r.mergeCoins(l.sui[0],l.sui.slice(1)),r.transferObjects([l.sui[0]],r.pure(c))),l.sca.length>0&&(l.sca.length>1&&r.mergeCoins(l.sca[0],l.sca.slice(1)),r.transferObjects([l.sca[0]],r.pure(c))),r}async stakeObligation(t,e,n){let a=this.builder.createTxBlock(),r=await N({builder:this.builder,txBlock:a}),i=n||this.params.walletAddress;return a.setSender(i),await r.stakeObligationQuick(t,e),a}async unstakeObligation(t,e,n){let a=this.builder.createTxBlock(),r=await N({builder:this.builder,txBlock:a}),i=n||this.params.walletAddress;return a.setSender(i),await r.unstakeObligationQuick(t,e),a}async stakeSca(t,e=!1,n=!1,a,r,i,s,c){let l=new I,d=await ft({builder:this.builder,txBlock:l}),u=await N({builder:this.builder,txBlock:l}),p=c||this.params.walletAddress;l.setSender(p);let m=await this.builder.utils.selectCoinIds(t,ct,p),[f,S]=this.builder.utils.takeAmountFromCoins(l,m,t),T;return s?d.normalMethod.extendLockAmount(s,f):T=d.normalMethod.lockSca(f,i),a&&r&&(e&&(n?u.normalMethod.oldUnstakeObligation(a,r):u.normalMethod.unstakeObligation(a,r)),u.normalMethod.stakeObligationWithVesca(a,r,s||T)),s||l.transferObjects([T,S],p),l}async stakeMoreSca(t,e,n){let a=new I,r=n||this.params.walletAddress;return a.setSender(r),a}async extendStakeScaLockPeriod(t,e,n,a,r=!1,i=!1,s){let c=new I,l=await ft({builder:this.builder,txBlock:c}),d=await N({builder:this.builder,txBlock:c}),u=s||this.params.walletAddress;return c.setSender(u),l.normalMethod.extendLockPeriod(e,t),n&&a&&(r&&(i?d.normalMethod.oldUnstakeObligation(n,a):d.normalMethod.unstakeObligation(n,a)),d.normalMethod.stakeObligationWithVesca(n,a,e)),c}async extendPeriodAndStakeMoreSca(t,e,n,a,r,i=!1,s=!1,c){let l=new I,d=await ft({builder:this.builder,txBlock:l}),u=await N({builder:this.builder,txBlock:l}),p=c||this.params.walletAddress;l.setSender(p);let m=await this.builder.utils.selectCoinIds(t,ct,p),[f,S]=this.builder.utils.takeAmountFromCoins(l,m,t);return d.normalMethod.extendLockPeriod(e,n),d.normalMethod.extendLockAmount(e,f),l.transferObjects([S],p),!a||!r||(i&&(s?u.normalMethod.oldUnstakeObligation(a,r):u.normalMethod.unstakeObligation(a,r)),u.normalMethod.stakeObligationWithVesca(a,r,e)),l}async renewExpiredStakeSca(t,e,n,a=!1,r,i,s=!1,c=!1,l){let d=new I,u=await ft({builder:this.builder,txBlock:d}),p=await N({builder:this.builder,txBlock:d}),m=l||this.params.walletAddress;if(d.setSender(m),a){let x=u.normalMethod.redeemSca(n);d.transferObjects([x],m)}let f=await this.builder.utils.selectCoinIds(t,ct,m),[S,T]=this.builder.utils.takeAmountFromCoins(d,f,t);return d.transferObjects([T],m),u.normalMethod.renewExpiredVeSca(n,S,e),!r||!i||(s&&(c?p.normalMethod.oldUnstakeObligation(r,i):p.normalMethod.unstakeObligation(r,i)),p.normalMethod.stakeObligationWithVesca(r,i,n)),d}async redeemSca(t){let e=new I,n=await ft({builder:this.builder,txBlock:e}),a=this.params.walletAddress;return e.setSender(a),await n.redeemScaQuick(t),e}async migrateAndClaim(t,e,n,a){let r=new I,i=await N({builder:this.builder,txBlock:r}),s=this.params.walletAddress;r.setSender(s);let c=i.normalMethod.oldClaimBorrowIncentive(e,t,n);return r.transferObjects([c],s),await i.unstakeObligationQuick(e,t),a?await i.stakeObligationWithVeScaQuick(e,t,a):await i.stakeObligationQuick(e,t),r}async withdrawUnlockedSca(t,e){let n=new I,a=await ft({builder:this.builder,txBlock:n}),r=e||this.params.walletAddress;return n.setSender(r),await a.redeemScaQuick(t),n}calculateAvailableClaimCoin(t,e){let n=new Xi(t.weightedAmount),r=e.currentPointIndex?Xi(e.currentPointIndex-t.index).dividedBy(1e9):1;return n.multipliedBy(r).plus(t.points).shiftedBy(-1*e.coinDecimal)}async createReferralLink(){let t=new I,e=await ft({builder:this.builder,txBlock:t}),n=this.params.walletAddress;t.setSender(n);let a=e.normalMethod.mintEmptyVeSca();return t.transferObjects([a],n),t}async claimRevenuReferral(t,e){let n=new I,a=await $i({builder:this.builder,txBlock:n}),r=this.params.walletAddress;n.setSender(r);let i=e.map(s=>this.utils.parseCoinNameFromType(s));return await a.claimReferralRevenueQuick(t,r,i),n}async bindReferral(t){let e=new I,n=await Do({builder:this.builder,txBlock:e}),a=this.params.walletAddress;return e.setSender(a),n.bindToReferral(t),e}async migrateAllMarketCoin(){let t=new I,e=await mt({builder:this.builder,txBlock:t}),n=await tt({builder:this.builder,txBlock:t});t.setSender(this.params.walletAddress);let a=[];return await Promise.all(X.map(async r=>{let i=[],s;try{let c=await this.utils.selectCoinIds(Number.MAX_SAFE_INTEGER,this.utils.parseMarketCoinType(r),this.params.walletAddress),l=c[0];c.length>1&&t.mergeCoins(l,c.slice(1)),s=l}catch(c){if(!c.toString().includes("No valid coins found for the transaction"))throw c}if(s){let c=e.mintSCoin(r,s);try{let l=await this.utils.selectCoinIds(Number.MAX_SAFE_INTEGER,this.utils.parseSCoinType(r),this.params.walletAddress);t.mergeCoins(c,l)}catch(l){console.log(l)}i.push(c)}if(dt.includes(r))try{let c=await n.unstakeQuick(Number.MAX_SAFE_INTEGER,r);c&&i.push(c)}catch(c){console.log(c)}if(i.length>0){let c=i[0];i.length>1&&t.mergeCoins(c,i.slice(1)),a.push(c)}})),a.length>0&&t.transferObjects(a,this.params.walletAddress),t}async migrateLendingWusdcToUsdcNative(t,e,n,a,r){let i=new I,s=await E({builder:this.builder,txBlock:i}),c=await tt({builder:this.builder,txBlock:i}),l=this.params.walletAddress,d=[],u=this.utils.parseMarketCoinName(t),p=this.utils.parseMarketCoinType(u),f=(await this.utils.selectCoinsMarketCoin(p,l)).map(R=>R.objectId);i.setSender(l);for(let R=0;R<r.length;R++){let q=r[R],[U]=await c.unstakeQuick(q.coin,u,q.id);if(U){f.length>0&&i.mergeCoins(U,f);let ps=s.normalMethod.withdraw(U,t);d.push(ps)}}if(e>0){let R=await s.withdrawQuick(e,t);d.push(R)}d.length>1&&i.mergeCoins(d[0],d.slice(1));let[S]=i.splitCoins(d[0],[i.pure(a)]);i.transferObjects([d[0]],l);let{swapResult:T,accountCap:x}=await this.deepbookSwap.swapToken({baseCoinName:"wusdc",quoteCoinName:"usdc",tokenObjectIn:S,tx:i});typeof x=="string"&&i.transferObjects([x],l),Qi.check_slippage(i,T,n,a,this.query.utils.parseCoinType("usdc"));let L=s.normalMethod.deposit(T,"usdc");return await c.stakeQuick(L,"susdc"),i}};var le=class{params;client;builder;query;utils;address;constructor(t){this.params=t,this.address=t.address}async init(){this.address||(this.address=new ho({id:gi})),await this.address.read(),this.client=new _o(this.params,this.address);let{builder:t,query:e,utils:n}=this.client;this.builder=t,this.query=e,this.utils=n}};var Ro=class{application="scallop";supportSDK="@mysten/sui.js";scallop;async deserialize(t){this.scallop||(this.scallop=new le({client:t.suiClient,walletAddress:t.account.address}),await this.scallop.init());let{transactionBlock:e}=t;console.log("transactionBlock",e);let n=new Un(e,this.scallop),a=new Fn(e,this.scallop),r=new qn(e,this.scallop),i=n.decode()||a.decode()||r.decode();if(!i)throw new Error("Unknown transaction type");return{txType:pd.Other,txSubType:i.type,intentionData:i.intentionData}}async build(t){let{suiClient:e,account:n,network:a,txSubType:r,intentionData:i}=t;this.scallop||(this.scallop=new le({client:t.suiClient,walletAddress:t.account.address}),await this.scallop.init());let s;switch(r){case"SupplyLending":s=eo.fromData(i);break;case"WithdrawLending":s=ro.fromData(i);break;case"Borrow":s=$n.fromData(i);break;case"Repay":s=Yn.fromData(i);break;case"DepositCollateral":s=Kn.fromData(i);break;case"WithdrawCollateral":s=ao.fromData(i);break;case"OpenObligation":s=Xn.fromData(i);break;case"StakeSpool":s=to.fromData(i);break;case"UnstakeSpool":s=no.fromData(i);break;case"ClaimIncentiveReward":s=Hn.fromData(i);break;case"BorrowWithBoost":s=Qn.fromData(i);break;case"StakeSca":s=fo.fromData(i);break;case"ExtendStakePeriod":s=uo.fromData(i);break;case"ExtendPeriodAndStakeMore":s=lo.fromData(i);break;case"RenewExpStakePeriod":s=mo.fromData(i);break;case"WithdrawStakedSca":s=go.fromData(i);break;case"SupplyAndStakeLending":s=bo.fromData(i);break;case"WithdrawAndUnstakeLending":s=oo.fromData(i);break;case"RedeemSca":s=po.fromData(i);break;case"MigrateAndClaim":s=Gn.fromData(i);break;case"BorrowWithReferral":s=Vn.fromData(i);break;case"CreateReferralLink":s=co.fromData(i);break;case"ClaimRevenueReferral":s=so.fromData(i);break;case"BindReferral":s=io.fromData(i);break;case"MigrateScoin":s=zn.fromData(i);break;case"RepayWithBoost":s=Zn.fromData(i);break;case"MigrateWusdcToUsdc":s=Jn.fromData(i);break;default:throw new Error("not implemented")}return s.build({suiClient:e,account:n,network:a,scallop:this.scallop})}};import{TransactionType as Nd}from"@msafe/sui3-utils";import{LIQUID_STAKING_INFO_MAP as Ed,LstId as Wd}from"@suilend/frontend-sui";import{LstClient as Ld}from"@suilend/springsui-sdk";import{TransactionType as tr}from"@msafe/sui3-utils";var Bo=class{constructor(t,e){this.transaction=t;this.simResult=e}decode(){if(this.isMintTransaction())return this.decodeMint();if(this.isMintAndDepositTransaction())return this.decodeMintAndDeposit();if(this.isRedeemTransaction())return this.decodeRedeem();throw new Error("Unknown transaction type")}get commands(){return this.transaction.getData().commands}getMoveCallCommand(t){return this.commands.find(e=>e.$kind==="MoveCall"&&e.MoveCall.function===t)}hasSuilendDepositTransactionMoveCallCommands(){return!!this.getMoveCallCommand("deposit_liquidity_and_mint_ctokens")&&!!this.getMoveCallCommand("deposit_ctokens_into_obligation")}hasMintTransactionMoveCallCommands(){return!!this.getMoveCallCommand("mint")}isMintTransaction(){return this.hasMintTransactionMoveCallCommands()&&!this.hasSuilendDepositTransactionMoveCallCommands()}isMintAndDepositTransaction(){return this.hasMintTransactionMoveCallCommands()&&this.hasSuilendDepositTransactionMoveCallCommands()}isRedeemTransaction(){return!!this.getMoveCallCommand("redeem")}decodeMint(){let e={MintEvent:this.simResult.events.find(n=>n.type.includes("liquid_staking::MintEvent"))}.MintEvent.parsedJson.event.sui_amount_in;return console.log("Decoder.decodeMint",e),{txType:tr.Other,type:"mint",intentionData:{amount:e}}}decodeMintAndDeposit(){return{txType:tr.Other,type:"mintAndDeposit",intentionData:this.decodeMint().intentionData}}decodeRedeem(){let e={RedeemEvent:this.simResult.events.find(n=>n.type.includes("liquid_staking::RedeemEvent"))}.RedeemEvent.parsedJson.event.lst_amount_in;return console.log("Decoder.decodeRedeem",e),{txType:tr.Other,type:"redeem",intentionData:{amount:e}}}};import{Transaction as bd}from"@mysten/sui/transactions";import fd from"sort-keys-recursive";var bt=class{constructor(t){this.data=t}serialize(){return JSON.stringify(fd(this.data))}};var jo=class o extends bt{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:a,lstClient:r,suilendClient:i,obligationOwnerCap:s,obligation:c}=e;console.log("MintIntention.build",n,a,r,i,s,c);let l=new bd;return r.mintAndRebalanceAndSendToUser(l,a.address,this.data.amount),l}static fromData(e){return console.log("MintIntention.fromData",e),new o(e)}};import{Transaction as gd}from"@mysten/sui/transactions";var Mo=class o extends bt{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:a,lstClient:r,suilendClient:i,obligationOwnerCap:s,obligation:c}=e;console.log("MintAndDepositIntention.build",n,a,r,i,s,c);let l=new gd;return i.depositCoin(a.address,r.mintAndRebalance(l,this.data.amount),r.liquidStakingObject.type,l,s?.id),l}static fromData(e){return console.log("MintAndDepositIntention.fromData",e),new o(e)}};import{Transaction as hd}from"@mysten/sui/transactions";var No=class o extends bt{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:a,lstClient:r,suilendClient:i,obligationOwnerCap:s,obligation:c}=e;console.log("RedeemIntention.build",n,a,r,i,s,c);let l=new hd;return await r.redeemAndSendToUser(l,a.address,this.data.amount),l}static fromData(e){return console.log("RedeemIntention.fromData",e),new o(e)}};import{TransactionType as _d}from"@msafe/sui3-utils";import{LENDING_MARKET_ID as Rd,LENDING_MARKET_TYPE as Bd,SuilendClient as er}from"@suilend/sdk";import{phantom as jd}from"@suilend/sdk/_generated/_framework/reified";import{LendingMarket as Md}from"@suilend/sdk/_generated/suilend/lending-market/structs";import{TransactionType as Wt}from"@msafe/sui3-utils";import{fromB64 as Yi,toHEX as Zi}from"@mysten/bcs";import{normalizeStructTag as de}from"@mysten/sui/utils";import{maxU64 as Lt}from"@suilend/sdk";import ts from"bignumber.js";var Eo=class{constructor(t,e){this.transaction=t;this.simResult=e}decode(){if(this.isDepositTransaction())return this.decodeDeposit();if(this.isWithdrawTransaction())return this.decodeWithdraw();if(this.isBorrowTransaction())return this.decodeBorrow();if(this.isRepayTransaction())return this.decodeRepay();if(this.isClaimTransaction())return this.decodeClaim();if(this.isClaimAndDepositTransaction())return this.decodeClaimAndDeposit();throw new Error("Unknown transaction type")}get inputs(){return console.log("XXX this.transaction.getData().inputs",this.transaction.getData().inputs),this.transaction.getData().inputs}get commands(){return console.log("XXX this.transaction.getData().commands",this.transaction.getData().commands),this.transaction.getData().commands}getMoveCallCommand(t){return this.commands.find(e=>e.$kind==="MoveCall"&&e.MoveCall.function===t)}hasDepositTransactionMoveCallCommands(){return!!this.getMoveCallCommand("deposit_liquidity_and_mint_ctokens")&&!!this.getMoveCallCommand("deposit_ctokens_into_obligation")}hasClaimTransactionMoveCallCommands(){return!!this.getMoveCallCommand("claim_rewards")}isDepositTransaction(){return!this.hasClaimTransactionMoveCallCommands()&&this.hasDepositTransactionMoveCallCommands()}isWithdrawTransaction(){return!!this.getMoveCallCommand("withdraw_ctokens")&&!!this.getMoveCallCommand("redeem_ctokens_and_withdraw_liquidity_request")}isBorrowTransaction(){return!!this.getMoveCallCommand("borrow_request")}isRepayTransaction(){return!!this.getMoveCallCommand("repay")}isClaimTransaction(){return this.hasClaimTransactionMoveCallCommands()&&!this.hasDepositTransactionMoveCallCommands()}isClaimAndDepositTransaction(){return this.hasClaimTransactionMoveCallCommands()&&this.hasDepositTransactionMoveCallCommands()}decodeDeposit(){let t={MintEvent:this.simResult.events.find(a=>a.type.includes("lending_market::MintEvent"))},e=de(t.MintEvent.parsedJson.coin_type.name),n=t.MintEvent.parsedJson.liquidity_amount;return console.log("Decoder.decodeDeposit",e,n),{txType:Wt.Other,type:"deposit",intentionData:{coinType:e,value:n}}}decodeWithdraw(){let t={withdraw_ctokens:this.getMoveCallCommand("withdraw_ctokens")},e={RedeemEvent:this.simResult.events.find(c=>c.type.includes("lending_market::RedeemEvent"))},n=de(e.RedeemEvent.parsedJson.coin_type.name),a=e.RedeemEvent.parsedJson.liquidity_amount;console.log("Decoder.decodeWithdraw",n,a);let r=t.withdraw_ctokens.MoveCall.arguments[4].Input,i=new ts(Zi(Yi(this.inputs[r].Pure.bytes)),16).toString(),s=i===Lt.toString();return console.log("XXX decodeWithdraw - isMax:",s,"inputIndex:",r,"inputValue:",i,"maxU64.toString():",Lt.toString()),s&&(a=Lt.toString()),{txType:Wt.Other,type:"withdraw",intentionData:{coinType:n,value:a}}}decodeBorrow(){let t={borrow_request:this.getMoveCallCommand("borrow_request")},e={BorrowEvent:this.simResult.events.find(c=>c.type.includes("lending_market::BorrowEvent"))},n=de(e.BorrowEvent.parsedJson.coin_type.name),a=`${+e.BorrowEvent.parsedJson.liquidity_amount-+e.BorrowEvent.parsedJson.origination_fee_amount}`;console.log("Decoder.decodeBorrow",n,a);let r=t.borrow_request.MoveCall.arguments[4].Input,i=new ts(Zi(Yi(this.inputs[r].Pure.bytes)),16).toString(),s=i===Lt.toString();return console.log("XXX decodeBorrow - isMax:",s,"inputIndex:",r,"inputValue:",i,"maxU64.toString():",Lt.toString()),s&&(a=Lt.toString()),{txType:Wt.Other,type:"borrow",intentionData:{coinType:n,value:a}}}decodeRepay(){let t={RepayEvent:this.simResult.events.find(a=>a.type.includes("lending_market::RepayEvent"))},e=de(t.RepayEvent.parsedJson.coin_type.name),n=t.RepayEvent.parsedJson.liquidity_amount;return console.log("Decoder.decodeRepay",e,n),{txType:Wt.Other,type:"repay",intentionData:{coinType:e,value:n}}}decodeClaim(){let t={ClaimReward:this.simResult.events.filter(n=>n.type.includes("lending_market::ClaimReward"))},e={};for(let n=0;n<t.ClaimReward.length;n++){let a=t.ClaimReward[n],r=de(a.parsedJson.coin_type.name),i=a.parsedJson.liquidity_amount;e[r]=`${+(e[r]??"0")+ +i}`}return console.log("Decoder.decodeClaimRewards",e),{txType:Wt.Other,type:"claim",intentionData:{value:e}}}decodeClaimAndDeposit(){return{txType:Wt.Other,type:"claimAndDeposit",intentionData:this.decodeClaim().intentionData}}};import{Transaction as wd}from"@mysten/sui/transactions";import Sd from"sort-keys-recursive";var W=class{constructor(t){this.data=t}serialize(){return JSON.stringify(Sd(this.data))}};var Wo=class o extends W{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:a,suilendClient:r,obligationOwnerCap:i,obligation:s}=e;if(console.log("BorrowIntention.build",n,a,r,i,s),!i||!s)throw new Error("Obligation not found");let c=new wd;return await r.borrowAndSendToUser(a.address,i.id,s.id,this.data.coinType,this.data.value,c),c}static fromData(e){return console.log("BorrowIntention.fromData",e),new o(e)}};import{Transaction as vd}from"@mysten/sui/transactions";import{normalizeStructTag as Id}from"@mysten/sui/utils";import{Side as ue}from"@suilend/sdk";import kd from"bignumber.js";import{normalizeStructTag as es}from"@mysten/sui/utils";var Td="0x34fe4f3c9e450fed4d0a3c587ed842eec5313c30c3cc3c0841247c49425e246b::suilend_point::SUILEND_POINT",Cd=es(Td),ns=o=>es(o)===Cd;var xd=(o,t)=>{let e={[ue.DEPOSIT]:[],[ue.BORROW]:[]};return o.lendingMarket.reserves.forEach(n=>{[ue.DEPOSIT,ue.BORROW].forEach(a=>{let r=a===ue.DEPOSIT?n.depositsPoolRewardManager:n.borrowsPoolRewardManager,i=t.userRewardManagers.find(s=>s.poolRewardManagerId===r.id);i&&(e[a]=r.poolRewards.map((s,c)=>({reserveArrayIndex:n.arrayIndex,rewardIndex:BigInt(c),rewardCoinType:Id(s.coinType.name),side:a})).filter(s=>!ns(s.rewardCoinType)&&!!i.rewards[Number(s.rewardIndex)]&&new kd(i.rewards[Number(s.rewardIndex)].earnedRewards.value.toString()).gt(0)))})}),Object.values(e).flat()},Lo=xd;var Uo=class o extends W{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:a,suilendClient:r,obligationOwnerCap:i,obligation:s}=e;if(console.log("ClaimIntention.build",n,a,r,i,s),!i||!s)throw new Error("Obligation not found");let c=new vd;return r.claimRewardsAndSendToUser(a.address,i.id,Lo(r,s),c),c}static fromData(e){return console.log("ClaimIntention.fromData",e),new o(e)}};import{Transaction as Ad}from"@mysten/sui/transactions";var Fo=class o extends W{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:a,suilendClient:r,obligationOwnerCap:i,obligation:s}=e;if(console.log("ClaimAndDepositIntention.build",n,a,r,i,s),!i||!s)throw new Error("Obligation not found");let c=new Ad;return r.claimRewardsAndDeposit(a.address,i.id,Lo(r,s),c),c}static fromData(e){return console.log("ClaimAndDepositIntention.fromData",e),new o(e)}};import{Transaction as Dd}from"@mysten/sui/transactions";var qo=class o extends W{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:a,suilendClient:r,obligationOwnerCap:i,obligation:s}=e;console.log("DepositIntention.build",n,a,r,i,s);let c=new Dd;return await r.depositIntoObligation(a.address,this.data.coinType,this.data.value,c,i?.id),c}static fromData(e){return console.log("DepositIntention.fromData",e),new o(e)}};import{Transaction as Od}from"@mysten/sui/transactions";var $o=class o extends W{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:a,suilendClient:r,obligationOwnerCap:i,obligation:s}=e;if(console.log("RepayIntention.build",n,a,r,i,s),!i||!s)throw new Error("Obligation not found");let c=new Od;return await r.repayIntoObligation(a.address,s.id,this.data.coinType,this.data.value,c),c}static fromData(e){return console.log("RepayIntention.fromData",e),new o(e)}};import{Transaction as Pd}from"@mysten/sui/transactions";var Qo=class o extends W{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:a,suilendClient:r,obligationOwnerCap:i,obligation:s}=e;if(console.log("WithdrawIntention.build",n,a,r,i,s),!i||!s)throw new Error("Obligation not found");let c=new Pd;return await r.withdrawAndSendToUser(a.address,i.id,s.id,this.data.coinType,this.data.value,c),c}static fromData(e){return console.log("WithdrawIntention.fromData",e),new o(e)}};var Vo=async(o,t)=>{let e=await er.initializeWithLendingMarket(await Md.fetch(o,jd(Bd),Rd),o),n=await er.getObligationOwnerCaps(t.address,e.lendingMarket.$typeArgs,o),a=await Promise.all(n.map(r=>er.getObligation(r.obligationId,e.lendingMarket.$typeArgs,o)));return{suilendClient:e,obligationOwnerCaps:n,obligations:a}},Ho=class{application="Suilend";supportSDK="@mysten/sui";utils;async deserialize(t){let{transaction:e,suiClient:n,account:a}=t;this.utils||(this.utils=await Vo(n,a));let r=await n.devInspectTransactionBlock({sender:a.address,transactionBlock:e});console.log("SuilendAppHelper.deserialize",r);let s=new Eo(e,r).decode();return{txType:_d.Other,txSubType:s.type,intentionData:s.intentionData}}async build(t){let{network:e,txSubType:n,intentionData:a,suiClient:r,account:i}=t;this.utils||(this.utils=await Vo(r,i));let s;switch(n){case"deposit":s=qo.fromData(a);break;case"withdraw":s=Qo.fromData(a);break;case"borrow":s=Wo.fromData(a);break;case"repay":s=$o.fromData(a);break;case"claim":s=Uo.fromData(a);break;case"claimAndDeposit":s=Fo.fromData(a);break;default:throw new Error("not implemented")}let c=window.localStorage.getItem("obligationId"),l=this.utils.obligations?.find(u=>u.id===c)??this.utils.obligations?.[0],d=this.utils.obligationOwnerCaps?.find(u=>u.obligationId===l?.id);return console.log("XXX obligationId:",c,"obligations:",this.utils.obligations,"obligationOwnerCaps:",this.utils.obligationOwnerCaps),s.build({network:e,suiClient:r,account:i,suilendClient:this.utils.suilendClient,obligationOwnerCap:d,obligation:l})}};var os=async(o,t)=>{let e=await Ld.initialize(o,Ed[Wd.sSUI]),n=await Vo(o,t);return{lstClient:e,...n}},Ko=class{application="SpringSui";supportSDK="@mysten/sui";utils;async deserialize(t){let{transaction:e,suiClient:n,account:a}=t;this.utils||(this.utils=await os(n,a));let r=await n.devInspectTransactionBlock({sender:a.address,transactionBlock:e});console.log("SpringSuiAppHelper.deserialize",r);let s=new Bo(e,r).decode();return{txType:Nd.Other,txSubType:s.type,intentionData:s.intentionData}}async build(t){let{network:e,txSubType:n,intentionData:a,suiClient:r,account:i}=t;this.utils||(this.utils=await os(r,i));let s;switch(n){case"mint":s=jo.fromData(a);break;case"mintAndDeposit":s=Mo.fromData(a);break;case"redeem":s=No.fromData(a);break;default:throw new Error("not implemented")}return s.build({network:e,suiClient:r,account:i,lstClient:this.utils.lstClient,suilendClient:this.utils.suilendClient,obligationOwnerCap:this.utils.obligationOwnerCaps?.[0],obligation:this.utils.obligations?.[0]})}};import{TransactionType as iu}from"@msafe/sui3-utils";import{TurbosSdk as su}from"turbos-clmm-sdk";import{TransactionType as V}from"@msafe/sui3-utils";import{bcs as as}from"@mysten/sui.js/bcs";import{normalizeStructTag as Fd,normalizeSuiAddress as pe}from"@mysten/sui.js/utils";import{BN as qd}from"turbos-clmm-sdk";var H={PackageId:"0x02fe4933f4521250e55a15441096d1d4a38a7311195b0bca126fc0138c1f5a97",Claim:"0x0c822cec42f7ca703696b4232f1c47b348330c23580172a29aab465bc071d894",turbosCoinType:"0x5d1f47ea69bb0de31c313d7acf89b890dbb8991ea8e03c6c355171f84bb1ba4a::turbos::TURBOS"},K={PackageId:"0xdee9"};var $d=(o,t,e,n)=>{if(o===1)switch(n.findIndex(i=>i===t)){case 0:return[!0,!0];case 1:return[!0,!1];case 2:return[!1,!0];case 3:return[!1,!1];default:throw new Error(`not target: ${t}`)}switch(e.findIndex(r=>r===t)){case 0:return[!0];case 1:return[!1];default:throw new Error(`not target: ${t}`)}},Go=class{constructor(t,e,n){this.txb=t;this.turbosSdk=e;this.config=n}get transactions(){return this.txb.blockData.transactions}get swap1Layer(){return[`${this.config.PackageId}::swap_router::swap_a_b`,`${this.config.PackageId}::swap_router::swap_b_a`]}get swap2Layer(){return[`${this.config.PackageId}::swap_router::swap_a_b_b_c`,`${this.config.PackageId}::swap_router::swap_a_b_c_b`,`${this.config.PackageId}::swap_router::swap_b_a_b_c`,`${this.config.PackageId}::swap_router::swap_b_a_c_b`]}async decode(t){if(this.isSwapTransaction())return await this.decodeSwap();if(this.isAddLiquidityTransaction())return this.decodeAddLiquidity();if(this.isIncreaseLiquidityTransaction())return this.decodeIncreaseLiquidity(t);if(this.isRemoveLiquidityTransaction())return this.decodeRemoveLiquidity(t);if(this.isDecreaseLiquidityTransaction())return this.decodeDecreaseLiquidity(t);if(this.isCollectFeeTransaction())return this.decodeCollectFee();if(this.isCollectRewardTransaction())return this.decodeCollectReward();if(this.isBurnTransaction())return this.decodeBurn();if(this.isPrixClaimTransaction())return this.decodePrixClaim();if(this.isPrixJoinTransaction())return this.decodePrixJoin();if(this.isSwapExactBaseForQuoteTransaction())return this.decodeSwapExactBaseForQuote();if(this.isSwapExactQuoteForBaseTransaction())return this.decodeSwapExactQuoteForBase();throw new Error("Unknown transaction type")}getMoveCallTransaction(t){return this.transactions.find(e=>e.kind==="MoveCall"&&e.target===t)}getMoveCallsTransaction(t){return t.every(e=>this.transactions.find(n=>n.kind==="MoveCall"&&n.target===e))}getSwapMoveCallTransaction(t){return this.transactions.find(e=>e.kind==="MoveCall"&&t.includes(e.target))}isSwapTransaction(){return!!this.getSwapMoveCallTransaction([...this.swap1Layer,...this.swap2Layer])}isAddLiquidityTransaction(){return!!this.getMoveCallTransaction(`${this.config.PackageId}::position_manager::mint`)}isIncreaseLiquidityTransaction(){return!!this.getMoveCallTransaction(`${this.config.PackageId}::position_manager::increase_liquidity`)}isDecreaseLiquidityTransaction(){return!!this.getMoveCallTransaction(`${this.config.PackageId}::position_manager::decrease_liquidity`)}isCollectFeeTransaction(){return!!this.getMoveCallTransaction(`${this.config.PackageId}::position_manager::collect`)}isCollectRewardTransaction(){return!!this.getMoveCallTransaction(`${this.config.PackageId}::position_manager::collect_reward`)}isBurnTransaction(){return!!this.getMoveCallTransaction(`${this.config.PackageId}::position_manager::burn`)}isPrixJoinTransaction(){return!!this.getMoveCallTransaction(`${H.PackageId}::claim::join`)}isPrixClaimTransaction(){return!!this.getMoveCallTransaction(`${H.PackageId}::claim::claim`)}isRemoveLiquidityTransaction(){return!!this.getMoveCallsTransaction([`${this.config.PackageId}::position_manager::decrease_liquidity`,`${this.config.PackageId}::position_manager::burn`])}isSwapExactBaseForQuoteTransaction(){return!!this.getMoveCallTransaction(`${K.PackageId}::clob_v2::swap_exact_base_for_quote`)}isSwapExactQuoteForBaseTransaction(){return!!this.getMoveCallTransaction(`${K.PackageId}::clob_v2::swap_exact_quote_for_base`)}async decodeSwap(){let t=this.transactions.find(m=>m.kind==="MoveCall"),e=0;this.swap2Layer.includes(t.target)&&(e=1);let n=$d(e,t.target,this.swap1Layer,this.swap2Layer),a=n.map((m,f)=>{let S=this.helper.decodeSharedObjectId(f),T=this.helper.decodeInputU128(4+f+e),x=this.turbosSdk.math.sqrtPriceX64ToTickIndex(new qd(T.toString()));return{pool:S,a2b:m,nextTickIndex:x}}),r=n[0]||e===1?t.typeArguments[0]:t.typeArguments[1],i=e===1?t.typeArguments[4]:n[0]?t.typeArguments[1]:t.typeArguments[0],s=this.helper.decodeInputAddress(6+2*e),c=this.helper.decodeInputU64(7+2*e),l=this.helper.decodeInputBool(5+2*e),d=this.helper.decodeInputU64(2+e),u=this.helper.decodeInputU64(3+e),p=await this.turbosSdk.trade.computeSwapResultV2({pools:[{pool:a[0].pool,a2b:a[0].a2b,amountSpecified:d}],address:s,amountSpecifiedIsInput:l});return{txType:V.Other,type:"Swap",intentionData:{routes:a,coinTypeA:r,coinTypeB:i,address:s,amountA:l?d:u,amountB:l?u:d,amountSpecifiedIsInput:l,slippage:"0.1",deadline:c}}}decodeAddLiquidity(){console.log(this.helper,"decodeAddLiquidity this.helper");let t=this.helper.decodeSharedObjectId(0),e=this.helper.decodeInputAddress(12),n=this.helper.decodeInputU64(8),a=this.helper.decodeInputU64(9),r=this.helper.decodeInputU32(4),i=this.helper.decodeInputBool(5),s=this.helper.decodeInputU32(6),c=this.helper.decodeInputBool(7),l=this.helper.decodeInputU64(13);return{txType:V.Other,type:"AddLiquidity",intentionData:{pool:t,slippage:10,address:e,amountA:n,amountB:a,tickLower:i?-r:r,tickUpper:c?-s:s,deadline:l}}}decodeIncreaseLiquidity(t){console.log(this.helper,"decodeIncreaseLiquidity this.helper");let e=this.helper.decodeSharedObjectId(0),n=this.helper.decodeSharedObjectId(4),a=this.helper.decodeInputU64(5),r=this.helper.decodeInputU64(6),i=this.helper.decodeInputU64(9);return{txType:V.Other,type:"IncreaseLiquidity",intentionData:{pool:e,slippage:10,address:t,amountA:a,amountB:r,nft:n,deadline:i}}}decodeDecreaseLiquidity(t){console.log(this.helper,"decodeDecreaseLiquidity this.helper");let e=this.helper.decodeSharedObjectId(0),n=this.helper.decodeSharedObjectId(2),a=this.helper.decodeInputU64(3),r=this.helper.decodeInputU64(4),i=this.helper.decodeInputU64(5),s=this.helper.decodeInputU64(6);return{txType:V.Other,type:"DecreaseLiquidity",intentionData:{pool:e,decreaseLiquidity:a,nft:n,amountA:r,amountB:i,slippage:10,address:t,deadline:s}}}decodeCollectFee(){console.log(this.helper,"decodeCollectFee this.helper");let t=this.helper.decodeSharedObjectId(0),e=this.helper.decodeSharedObjectId(2),n=this.helper.decodeInputAddress(5),a=this.helper.decodeInputU64(3),r=this.helper.decodeInputU64(4),i=this.helper.decodeInputU64(6);return{txType:V.Other,type:"CollectFee",intentionData:{pool:t,address:n,collectAmountA:a,collectAmountB:r,nft:e,deadline:i}}}decodeCollectReward(){console.log(this.helper,"decodeCollectReward this.helper");let t=this.helper.decodeSharedObjectId(0),e=this.helper.decodeSharedObjectId(2),n=this.helper.decodeInputAddress(6),a=this.collectRewardHelper.map(i=>i.decodeInputU64(5)),r=this.helper.decodeInputU64(7);return{txType:V.Other,type:"CollectReward",intentionData:{pool:t,address:n,rewardAmounts:a,nft:e,deadline:r}}}decodeBurn(){console.log(this.helper,"decodeBurn this.helper");let t=this.helper.decodeSharedObjectId(0),e=this.helper.decodeSharedObjectId(2);return{txType:V.Other,type:"Burn",intentionData:{pool:t,nft:e}}}decodeRemoveLiquidity(t){console.log(this.helper,"decodeRemoveLiquidity this.helper");let e=this.decreaseLiquidityHelper.decodeSharedObjectId(0),n=this.decreaseLiquidityHelper.decodeSharedObjectId(2),a=this.decreaseLiquidityHelper.decodeInputU64(3),r=this.decreaseLiquidityHelper.decodeInputU64(4),i=this.decreaseLiquidityHelper.decodeInputU64(5),s=this.decreaseLiquidityHelper.decodeInputU64(6),c=this.collectRewardHelper.map(u=>u.decodeInputU64(5)),l=this.collectFeeHelper.decodeInputU64(3)||0,d=this.collectFeeHelper.decodeInputU64(4)||0;return{txType:V.Other,type:"RemoveLiquidity",intentionData:{pool:e,decreaseLiquidity:a,nft:n,amountA:r,amountB:i,slippage:10,address:t,collectAmountA:l,collectAmountB:d,rewardAmounts:c,deadline:s}}}decodePrixClaim(){return{txType:V.Other,type:"PrixClaim",intentionData:{}}}decodePrixJoin(){return{txType:V.Other,type:"PrixJoin",intentionData:{}}}decodeSwapExactBaseForQuote(){let t=this.swapExactBaseForQuoteHelper.decodeSharedObjectId(0),e=this.swapExactBaseForQuoteHelper.decodeInputU64(3),n=this.swapExactBaseForQuoteHelper.shortTypeArg(0),a=this.swapExactBaseForQuoteHelper.shortTypeArg(1);return{txType:V.Other,type:"SwapExactBaseForQuote",intentionData:{poolId:t,amountIn:e,token1:n,token2:a}}}decodeSwapExactQuoteForBase(){let t=this.swapExactQuoteForBaseHelper.decodeSharedObjectId(0),e=this.swapExactQuoteForBaseHelper.decodeInputU64(3),n=this.swapExactQuoteForBaseHelper.shortTypeArg(0),a=this.swapExactQuoteForBaseHelper.shortTypeArg(1);return{txType:V.Other,type:"SwapExactQuoteForBase",intentionData:{poolId:t,amountIn:e,token1:n,token2:a}}}get helper(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target!=="0x2::coin::zero"&&e.target!=="0x0000000000000000000000000000000000000000000000000000000000000002::coin::zero");return new gt(t,this.txb)}get collectRewardHelper(){return this.transactions.filter(e=>e.kind==="MoveCall"&&e.target===`${this.config.PackageId}::position_manager::collect_reward`).map(e=>new gt(e,this.txb))}get collectFeeHelper(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target===`${this.config.PackageId}::position_manager::collect`);return new gt(t,this.txb)}get decreaseLiquidityHelper(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target===`${this.config.PackageId}::position_manager::decrease_liquidity`);return new gt(t,this.txb)}get swapExactBaseForQuoteHelper(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target===`${K.PackageId}::clob_v2::swap_exact_base_for_quote`);return new gt(t,this.txb)}get swapExactQuoteForBaseHelper(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target===`${K.PackageId}::clob_v2::swap_exact_quote_for_base`);return new gt(t,this.txb)}},gt=class o{constructor(t,e){this.moveCall=t;this.txb=e}decodeSharedObjectId(t){let e=this.getInputParam(t);return o.getSharedObjectId(e)}decodeOwnedObjectId(t){let e=this.getInputParam(t);return o.getOwnedObjectId(e)}decodeInputU128(t){let e=this.decodePureArg(t,"u128");return Number(e)}decodeInputU64(t){let e=this.decodePureArg(t,"u64");return Number(e)}decodeInputU32(t){let e=this.decodePureArg(t,"u32");return Number(e)}decodeInputU8(t){let e=this.decodePureArg(t,"u8");return Number(e)}decodeInputAddress(t){let e=this.decodePureArg(t,"address");return pe(e)}decodeInputString(t){return this.decodePureArg(t,"string")}decodeInputBool(t){return this.decodePureArg(t,"bool")}decodePureArg(t,e){let n=this.getInputParam(t);return o.getPureInputValue(n,e)}getInputParam(t){let e=this.moveCall.arguments[t];if(e.kind!=="Input")throw new Error("not input type");return this.txb.blockData.inputs[e.index]}static getPureInputValue(t,e){if(t.type!=="pure")throw new Error("not pure argument");if(typeof t.value=="object"&&"Pure"in t.value){let n=t.value.Pure;return as.de(e,new Uint8Array(n))}return t.value}static getOwnedObjectId(t){if(t.type!=="object")throw new Error(`not object argument: ${JSON.stringify(t)}`);if(typeof t.value=="object"){if(!("Object"in t.value)||!("ImmOrOwned"in t.value.Object))throw new Error("not ImmOrOwned");return pe(t.value.Object.ImmOrOwned.objectId)}return pe(t.value)}static getSharedObjectId(t){if(t.type!=="object")throw new Error(`not object argument: ${JSON.stringify(t)}`);if(typeof t.value!="object")return pe(t.value);if(!("Object"in t.value)||!("Shared"in t.value.Object))throw new Error("not Shared");return pe(t.value.Object.Shared.objectId)}static getPureInput(t,e){if(t.type!=="pure")throw new Error("not pure argument");if(typeof t.value!="object")return t.value;if(!("Pure"in t.value))throw new Error("Pure not in value");let n=t.value.Pure;return as.de(e,new Uint8Array(n))}typeArg(t){return Fd(this.moveCall.typeArguments[t])}shortTypeArg(t){return this.moveCall.typeArguments[t]}txArg(t){return this.moveCall.arguments[t]}};import{TurbosSdk as Qd}from"turbos-clmm-sdk";var zo=class o extends y{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new Qd(e.network.replace("sui:",""),e.suiClient),{pool:a,address:r,amountA:i,amountB:s,slippage:c,tickLower:l,tickUpper:d,deadline:u,txb:p}=this.data;return n.pool.addLiquidity({pool:a,slippage:c,address:r,amountA:i,amountB:s,tickLower:l,tickUpper:d,deadline:u,txb:p})}static fromData(e){return new o(e)}};import{TurbosSdk as Vd}from"turbos-clmm-sdk";var Jo=class o extends y{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new Vd(e.network.replace("sui:",""),e.suiClient),{pool:a,nft:r,txb:i}=this.data;return n.nft.burn({pool:a,nft:r,txb:i})}static fromData(e){return new o(e)}};import{TurbosSdk as Hd}from"turbos-clmm-sdk";var Xo=class o extends y{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new Hd(e.network.replace("sui:",""),e.suiClient),{pool:a,address:r,nft:i,collectAmountA:s,collectAmountB:c,deadline:l,txb:d}=this.data;return n.pool.collectFee({pool:a,address:r,collectAmountA:s,collectAmountB:c,nft:i,deadline:l,txb:d})}static fromData(e){return new o(e)}};import{TurbosSdk as Kd}from"turbos-clmm-sdk";var Yo=class o extends y{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new Kd(e.network.replace("sui:",""),e.suiClient),{pool:a,address:r,nft:i,rewardAmounts:s,deadline:c,txb:l}=this.data;return n.pool.collectReward({pool:a,address:r,rewardAmounts:s,nft:i,deadline:c,txb:l})}static fromData(e){return new o(e)}};import{TurbosSdk as Gd}from"turbos-clmm-sdk";var Zo=class o extends y{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new Gd(e.network.replace("sui:",""),e.suiClient),{fee:a,address:r,tickLower:i,tickUpper:s,sqrtPrice:c,slippage:l,coinTypeA:d,coinTypeB:u,amountA:p,amountB:m,deadline:f,txb:S}=this.data;return n.pool.createPool({fee:a,amountA:p,amountB:m,address:r,tickLower:i,tickUpper:s,sqrtPrice:c,slippage:l,coinTypeA:d,coinTypeB:u,deadline:f,txb:S})}static fromData(e){return new o(e)}};import{TurbosSdk as zd}from"turbos-clmm-sdk";var ta=class o extends y{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new zd(e.network.replace("sui:",""),e.suiClient),{pool:a,address:r,amountA:i,amountB:s,slippage:c,nft:l,decreaseLiquidity:d,deadline:u,txb:p}=this.data;return n.pool.decreaseLiquidity({pool:a,slippage:c,address:r,amountA:i,amountB:s,nft:l,decreaseLiquidity:d,deadline:u,txb:p})}static fromData(e){return new o(e)}};import{TurbosSdk as Jd}from"turbos-clmm-sdk";var ea=class o extends y{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new Jd(e.network.replace("sui:",""),e.suiClient),{pool:a,address:r,amountA:i,amountB:s,slippage:c,nft:l,deadline:d,txb:u}=this.data;return n.pool.increaseLiquidity({pool:a,slippage:c,address:r,amountA:i,amountB:s,nft:l,deadline:d,txb:u})}static fromData(e){return new o(e)}};import{TransactionBlock as Xd}from"@mysten/sui.js/transactions";import{SUI_CLOCK_OBJECT_ID as Yd}from"@mysten/sui.js/utils";var na=class o extends y{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new Xd;return n.moveCall({target:`${H.PackageId}::claim::claim`,typeArguments:[H.turbosCoinType],arguments:[n.object(H.Claim),n.object(Yd)]}),n}static fromData(e){return new o(e)}};import{TransactionBlock as Zd}from"@mysten/sui.js/transactions";var oa=class o extends y{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new Zd;return n.moveCall({target:`${H.PackageId}::claim::join`,typeArguments:[H.turbosCoinType],arguments:[n.object(H.Claim)]}),n}static fromData(e){return new o(e)}};import{TransactionBlock as tu}from"@mysten/sui.js/transactions";import{TurbosSdk as eu}from"turbos-clmm-sdk";var aa=class o extends y{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new eu(e.network.replace("sui:",""),e.suiClient),a=new tu;return a=await n.pool.collectFee({txb:a,...this.data}),a=await n.pool.collectReward({txb:a,...this.data}),a=await n.pool.decreaseLiquidity({txb:a,...this.data}),a=await n.nft.burn({txb:a,nft:this.data.nft,pool:this.data.pool}),a}static fromData(e){return new o(e)}};import{TurbosSdk as nu}from"turbos-clmm-sdk";var ra=class o extends y{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){console.log(this.data,"this.data");let n=new nu(e.network.replace("sui:",""),e.suiClient),{routes:a,coinTypeA:r,coinTypeB:i,address:s,amountA:c,amountB:l,slippage:d,amountSpecifiedIsInput:u,deadline:p,txb:m}=this.data;return n.trade.swap({routes:a,coinTypeA:r,coinTypeB:i,address:s,amountA:c,amountB:l,amountSpecifiedIsInput:u,slippage:d,deadline:p,txb:m})}static fromData(e){return new o(e)}};import{TurbosSdk as au}from"turbos-clmm-sdk";import{normalizeSuiObjectId as rs}from"@mysten/sui.js/utils";import{TransactionBlock as is}from"@mysten/sui.js/transactions";import{unstable_getObjectId as ou}from"turbos-clmm-sdk";var me=class{constructor(t){this.turbosSdk=t}async getCoinsData(t,e,n){let a=[],r;do r=await this.turbosSdk.provider.getCoins({owner:t,coinType:e,cursor:r?.nextCursor}),a.push(...r.data);while(r.hasNextPage);let i=[],s=0;return a.sort((c,l)=>Number(l.balance)-Number(c.balance)).some(c=>s>=n?!0:(s+=Number(c.balance),i.push(c),!1)),i}splitAndMergeCoin(t,e,n){if(!t||t.length<1)return[void 0,void 0];if(this.isSuiCoinAddress(t[0].coinType)){let[i]=n.splitCoins(n.gas,[n.pure(e)]);return[i,void 0]}let a=n.object(t[0].coinObjectId);t.length>1&&n.mergeCoins(a,t.slice(1).map(i=>n.object(i.coinObjectId)));let[r]=n.splitCoins(a,[n.pure(e)]);return[r,a]}isSuiCoinAddress(t){return t.toLocaleLowerCase()==="0x2::sui::sui"}async IsAccountCap(t){let e=await this.turbosSdk.provider.getOwnedObjects({owner:t,options:{showContent:!0,showType:!0,showOwner:!0},filter:{StructType:`${K.PackageId}::custodian_v2::AccountCap`}});return e.data[0]?.data?ou(e.data[0].data):void 0}createAccount(t){let[e]=t.moveCall({typeArguments:[],target:`${K.PackageId}::clob_v2::create_account`,arguments:[]});return e}zero(t,e){return e.moveCall({typeArguments:[t],target:"0x2::coin::zero",arguments:[]})}};var ss=89,cs=1e6,ls=async o=>{let{token1:t,token2:e,poolId:n,amountIn:a,currentAddress:r,turbosSdk:i}=o,s=new is,c=new me(i),l=await c.getCoinsData(r,e,a),[d,u]=c.splitAndMergeCoin(l,a,s);if(!d)throw new Error(`Not enough balance: ${e}`);let p=await c.IsAccountCap(r),m=p?s.object(p):c.createAccount(s),[f,S,T]=s.moveCall({typeArguments:[t,e],target:`${K.PackageId}::clob_v2::swap_exact_quote_for_base`,arguments:[s.object(String(n)),s.pure(ss),m,s.pure(a),s.object(rs("0x6")),d]});return u&&s.transferObjects([u],s.pure(r)),s.transferObjects([f],s.pure(r)),s.transferObjects([S],s.pure(r)),p||s.transferObjects([m],s.pure(r)),s.setSenderIfNotSet(r),s.setGasBudget(cs),s},ds=async o=>{let{token1:t,token2:e,poolId:n,amountIn:a,currentAddress:r,turbosSdk:i}=o,s=new is,c=new me(i),l=await c.getCoinsData(r,t,a),[d,u]=c.splitAndMergeCoin(l,a,s);if(!d)throw new Error(`Not enough balance: ${t}`);let p=await c.IsAccountCap(r),m=p?s.object(p):c.createAccount(s),f=c.zero(e,s),[S,T,x]=s.moveCall({typeArguments:[t,e],target:`${K.PackageId}::clob_v2::swap_exact_base_for_quote`,arguments:[s.object(String(n)),s.pure(ss),m,s.pure(a),d,f,s.object(rs("0x6"))]});return u&&s.transferObjects([u],s.pure(r)),s.transferObjects([S],s.pure(r)),s.transferObjects([T],s.pure(r)),p||s.transferObjects([m],s.pure(r)),s.setSenderIfNotSet(r),s.setGasBudget(cs),s};var ia=class o extends y{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new au(e.network.replace("sui:",""),e.suiClient);return await ds({...this.data,turbosSdk:n,currentAddress:e.account.address})}static fromData(e){return new o(e)}};import{TurbosSdk as ru}from"turbos-clmm-sdk";var sa=class o extends y{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new ru(e.network.replace("sui:",""),e.suiClient);return await ls({...this.data,turbosSdk:n,currentAddress:e.account.address})}static fromData(e){return new o(e)}};var ca=class{application="turbos";supportSDK="@mysten/sui.js";async deserialize(t){let e=new su(t.network.replace("sui:",""),t.suiClient),n=await e.contract.getConfig(),{transactionBlock:a,account:r}=t;console.log(t,"input");let s=await new Go(a,e,n).decode(r.address);return{txType:iu.Other,txSubType:s.type,intentionData:s.intentionData}}async build(t){let{suiClient:e,account:n,network:a}=t,r;switch(console.log(t.intentionData,"intentionData"),t.txSubType){case"CreatePool":r=Zo.fromData(t.intentionData);break;case"AddLiquidity":r=zo.fromData(t.intentionData);break;case"IncreaseLiquidity":r=ea.fromData(t.intentionData);break;case"DecreaseLiquidity":r=ta.fromData(t.intentionData);break;case"RemoveLiquidity":r=aa.fromData(t.intentionData);break;case"CollectFee":r=Xo.fromData(t.intentionData);break;case"CollectReward":r=Yo.fromData(t.intentionData);break;case"Burn":r=Jo.fromData(t.intentionData);break;case"Swap":r=ra.fromData(t.intentionData);break;case"PrixJoin":r=oa.fromData(t.intentionData);break;case"PrixClaim":r=na.fromData(t.intentionData);break;case"SwapExactBaseForQuote":r=ia.fromData(t.intentionData);break;case"SwapExactQuoteForBase":r=sa.fromData(t.intentionData);break;default:throw new Error("not implemented")}return r.build({suiClient:e,account:n,network:a})}};import{TransactionType as fu}from"@msafe/sui3-utils";import{TransactionType as nr}from"@msafe/sui3-utils";import{bcs as us}from"@mysten/sui.js/bcs";import{normalizeStructTag as du,normalizeSuiAddress as fe}from"@mysten/sui.js/utils";var cu={packageId:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55",poolObjectId:"0x7fa2faa111b8c65bea48a23049bfd81ca8f971a262d981dcd9a17c3825cb5baf",metadataObjectId:"0x680cd26af32b2bde8d3361e804c53ec1d1cfe24c7f039eb7f549e8dfde389a60",systemStateObjectId:"0x0000000000000000000000000000000000000000000000000000000000000005",certType:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55::cert::CERT",gasBudget:5e7},D=cu;var la=class{constructor(t){this.txb=t}decode(){if(console.log("txb",this.txb),this.isStakeTransaction())return this.decodeStake();if(this.isUnStakeTransaction())return this.decodeUnStake();if(this.isClaimTicketTransaction())return this.decodeClaimTicket();throw new Error("Unknown transaction type")}get transactions(){return this.txb.blockData.transactions}getMoveCallTransaction(t){return this.transactions.find(e=>e.kind==="MoveCall"&&e.target===t)}isStakeTransaction(){return!!this.getMoveCallTransaction(`${D.packageId}::native_pool::stake`)}isUnStakeTransaction(){return!!this.getMoveCallTransaction(`${D.packageId}::native_pool::unstake`)}isClaimTicketTransaction(){return!!this.getMoveCallTransaction(`${D.packageId}::native_pool::burn_ticket`)}decodeStake(){let t=this.transactions[0].amounts[0].value.toNumber();return{txType:nr.Other,type:"Stake",intentionData:{amount:t}}}decodeUnStake(){let e=this.transactions.find(n=>n.kind==="SplitCoins").amounts[0].value.toNumber();return{txType:nr.Other,type:"UnStake",intentionData:{amount:e}}}decodeClaimTicket(){let t=this.helper.decodeOwnedObjectId(2);return console.log(t),{txType:nr.Other,type:"ClaimTicket",intentionData:{ticketId:t}}}get helper(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(D.packageId));return new or(t,this.txb)}},or=class o{constructor(t,e){this.moveCall=t;this.txb=e}decodeSharedObjectId(t){let e=this.getInputParam(t);return o.getSharedObjectId(e)}decodeOwnedObjectId(t){let e=this.getInputParam(t);return o.getOwnedObjectId(e)}decodeInputU64(t){let e=this.decodePureArg(t,"u64");return Number(e)}decodeInputU8(t){let e=this.decodePureArg(t,"u8");return Number(e)}decodeInputAddress(t){let e=this.decodePureArg(t,"address");return fe(e)}decodeInputString(t){return this.decodePureArg(t,"string")}decodeInputBool(t){return this.decodePureArg(t,"bool")}decodePureArg(t,e){let n=this.getInputParam(t);return o.getPureInputValue(n,e)}getInputParam(t){let e=this.moveCall.arguments[t];if(e.kind!=="Input")throw new Error("not input type");return this.txb.blockData.inputs[e.index]}static getPureInputValue(t,e){if(t.type!=="pure")throw new Error("not pure argument");if(typeof t.value=="object"&&"Pure"in t.value){let n=t.value.Pure;return us.de(e,new Uint8Array(n))}return t.value}static getOwnedObjectId(t){if(t.type!=="object")throw new Error(`not object argument: ${JSON.stringify(t)}`);if(typeof t.value=="object"){if(!("Object"in t.value)||!("ImmOrOwned"in t.value.Object))throw new Error("not ImmOrOwned");return fe(t.value.Object.ImmOrOwned.objectId)}return fe(t.value)}static getSharedObjectId(t){if(t.type!=="object")throw new Error(`not object argument: ${JSON.stringify(t)}`);if(typeof t.value!="object")return fe(t.value);if(!("Object"in t.value)||!("Shared"in t.value.Object))throw new Error("not Shared");return fe(t.value.Object.Shared.objectId)}static getPureInput(t,e){if(t.type!=="pure")throw new Error("not pure argument");if(typeof t.value!="object")return t.value;if(!("Pure"in t.value))throw new Error("Pure not in value");let n=t.value.Pure;return us.de(e,new Uint8Array(n))}typeArg(t){return du(this.moveCall.typeArguments[t])}txArg(t){return this.moveCall.arguments[t]}};import{TransactionBlock as uu}from"@mysten/sui.js/transactions";var da=class o extends y{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){console.log(e);let n=new uu,{ticketId:a}=this.data;return n.moveCall({target:`${D.packageId}::native_pool::burn_ticket`,arguments:[n.object(D.poolObjectId),n.object(D.systemStateObjectId),n.object(a)]}),n}static fromData(e){return new o(e)}};import{TransactionBlock as pu}from"@mysten/sui.js/transactions";var ua=class o extends y{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){console.log(e);let n=new pu,{amount:a}=this.data,[r]=n.splitCoins(n.gas,[n.pure(a)]);return n.moveCall({target:`${D.packageId}::native_pool::stake`,arguments:[n.object(D.poolObjectId),n.object(D.metadataObjectId),n.object(D.systemStateObjectId),r]}),n}static fromData(e){return new o(e)}};import{TransactionBlock as mu}from"@mysten/sui.js/transactions";var pa=class o extends y{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){console.log(e);let n=new mu,{amount:a}=this.data,r=(await e.suiClient.getAllCoins({owner:e.account.address,limit:100})).data,[i,...s]=r.filter(d=>d.coinType.split("::")[0]===D.certType.split("::")[0]),c=n.object(i.coinObjectId);s.length&&n.mergeCoins(c,s.map(d=>n.object(d.coinObjectId)));let l=n.splitCoins(n.object(i.coinObjectId),[n.pure(a)]);return n.moveCall({target:`${D.packageId}::native_pool::unstake`,arguments:[n.object(D.poolObjectId),n.object(D.metadataObjectId),n.object(D.systemStateObjectId),l]}),n}static fromData(e){return new o(e)}};var ma=class{application="volo";supportSDK="@mysten/sui.js";async deserialize(t){let{transactionBlock:e}=t,a=new la(e).decode();return{txType:fu.Other,txSubType:a.type,intentionData:a.intentionData}}async build(t){let{suiClient:e,account:n}=t,a;switch(t.txSubType){case"Stake":a=ua.fromData(t.intentionData);break;case"UnStake":a=pa.fromData(t.intentionData);break;case"ClaimTicket":a=da.fromData(t.intentionData);break;default:throw new Error("not implemented")}return a.build({suiClient:e,account:n})}};var i1=Nn.fromHelpers([new vn,new jn,new Cn,new Mn,new ze,new ca,new Ro,new ma,new Ae,new Ho,new Ko,new Ce]);export{i1 as appHelpers};
1
+ var ts=Object.defineProperty;var Ko=(a,t)=>{for(var e in t)ts(a,e,{get:t[e],enumerable:!0})};import{TransactionType as ss}from"@msafe/sui3-utils";import{TransactionType as os}from"@msafe/sui3-utils";import es from"sort-keys-recursive";var y=class{constructor(t){this.data=t}serialize(){return JSON.stringify(es(this.data))}};import{Transaction as as}from"@mysten/sui/transactions";import{BucketClient as ns}from"bucket-protocol-sdk";var Go=(a,t)=>{let e=a==="sui:mainnet"?"mainnet":"testnet";return new ns(e,t.address)};var pe=async(a,t,e,n)=>{let{coinType:o,amount:r}=a,i=new as;return await Go(e,t).getPsmTx(i,o,r,n,t.address),i};var me=class a extends y{constructor(e){super(e);this.data=e}txType=os.Other;txSubType="psm-in";async build(e){let{account:n,network:o}=e;return await pe(this.data,n,o,!1)}static fromData(e){return new a(e)}};import{TransactionType as rs}from"@msafe/sui3-utils";var fe=class a extends y{constructor(e){super(e);this.data=e}txType=rs.Other;txSubType="psm-out";async build(e){let{account:n,network:o}=e;return await pe(this.data,n,o,!0)}static fromData(e){return new a(e)}};import{TransactionType as zo}from"@msafe/sui3-utils";import{bcs as is}from"@mysten/sui/bcs";var be=class{constructor(t){this.transaction=t}decode(){if(this.isPsmInTransaction())return this.decodePsmIn();if(this.isPsmOutTransaction())return this.decodePsmOut();throw new Error("Unknown transaction type")}get commands(){return this.transaction.getData().commands}get inputs(){return this.transaction.getData().inputs}getMoveCallCommand(t){return this.commands.find(e=>e.$kind==="MoveCall"&&e.MoveCall.function===t)}getSplitCoinsCommands(){return this.commands.filter(t=>t.$kind==="SplitCoins")}getTransferCommands(){return this.commands.filter(t=>t.$kind==="TransferObjects")}isPsmInTransaction(){return!!this.getMoveCallCommand("charge_reservoir")}isPsmOutTransaction(){return!!this.getMoveCallCommand("discharge_reservoir")}decodePsmIn(){let t="0",e=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];e.$kind=="Input"&&(t=this.getPureInputU64(e.Input));let o=this.getMoveCallCommand("charge_reservoir").MoveCall.typeArguments[0];return console.log("Decoder.decodePsmIn",o,t),{txType:zo.Other,type:"psm-in",intentionData:{coinType:o,amount:t}}}decodePsmOut(){let t="0",e=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];e.$kind=="Input"&&(t=this.getPureInputU64(e.Input));let o=this.getMoveCallCommand("discharge_reservoir").MoveCall.typeArguments[0];return console.log("Decoder.decodePsmOut",o,t),{txType:zo.Other,type:"psm-out",intentionData:{coinType:o,amount:t}}}getPureInputU64(t){let e=this.inputs[t];if(e.$kind!=="Pure")throw new Error("not pure argument");return is.U64.fromBase64(e.Pure.bytes)}};var ge=class{application="bucket";supportSDK="@mysten/sui";async deserialize(t){console.log("Bucket helper deserialize input: ",t);let{transaction:e}=t,o=new be(e).decode();return{txType:ss.Other,txSubType:o.type,intentionData:o.intentionData}}async build(t){let{suiClient:e,account:n,network:o}=t,r;switch(t.txSubType){case"psm-in":r=me.fromData(t.intentionData);break;case"psm-out":r=fe.fromData(t.intentionData);break;default:throw new Error("not implemented")}return r.build({suiClient:e,account:n,network:o})}};import{TransactionType as qs}from"@msafe/sui3-utils";import{TransactionType as ys}from"@msafe/sui3-utils";import{AggregatorClient as cs,Env as ls}from"@cetusprotocol/aggregator-sdk";import{CetusPeripherySDK as ds}from"@cetusprotocol/cetus-periphery-sdk";import{CetusClmmSDK as us}from"@cetusprotocol/cetus-sui-clmm-sdk";import{SuiClient as ps}from"@mysten/sui/client";var ms={fullRpcUrl:"https://fullnode.mainnet.sui.io/",simulationAccount:{address:"0x326ce9894f08dcaa337fa232641cc34db957aec9ff6614c1186bc9a7508df0bb"},cetus_config:{package_id:"0x95b8d278b876cae22206131fb9724f701c9444515813042f54f0a426c9a3bc2f",published_at:"0x95b8d278b876cae22206131fb9724f701c9444515813042f54f0a426c9a3bc2f",config:{coin_list_id:"0x8cbc11d9e10140db3d230f50b4d30e9b721201c0083615441707ffec1ef77b23",launchpad_pools_id:"0x1098fac992eab3a0ab7acf15bb654fc1cf29b5a6142c4ef1058e6c408dd15115",clmm_pools_id:"0x15b6a27dd9ae03eb455aba03b39e29aad74abd3757b8e18c0755651b2ae5b71e",admin_cap_id:"0x39d78781750e193ce35c45ff32c6c0c3f2941fa3ddaf8595c90c555589ddb113",global_config_id:"0x0408fa4e4a4c03cc0de8f23d0c2bbfe8913d178713c9a271ed4080973fe42d8f",coin_list_handle:"0x49136005e90e28c4695419ed4194cc240603f1ea8eb84e62275eaff088a71063",launchpad_pools_handle:"0x5e194a8efcf653830daf85a85b52e3ae8f65dc39481d54b2382acda25068375c",clmm_pools_handle:"0x37f60eb2d9d227949b95da8fea810db3c32d1e1fa8ed87434fc51664f87d83cb"}},clmm_pool:{package_id:"0x1eabed72c53feb3805120a081dc15963c204dc8d091542592abaf7a35689b2fb",published_at:"0x70968826ad1b4ba895753f634b0aea68d0672908ca1075a2abdf0fc9e0b2fc6a",version:4,config:{pools_id:"0xf699e7f2276f5c9a75944b37a0c5b5d9ddfd2471bf6242483b03ab2887d198d0",global_config_id:"0xdaa46292632c3c4d8f31f23ea0f9b36a28ff3677e9684980e4438403a67a3d8f",global_vault_id:"0xce7bceef26d3ad1f6d9b6f13a953f053e6ed3ca77907516481ce99ae8e588f2b",admin_cap_id:"0x89c1a321291d15ddae5a086c9abc533dff697fde3d89e0ca836c41af73e36a75"}},integrate:{package_id:"0x996c4d9480708fb8b92aa7acf819fb0497b5ec8e65ba06601cae2fb6db3312c3",published_at:"0x8faab90228e4c4df91c41626bbaefa19fc25c514405ac64de54578dec9e6f5ee",version:6},deepbook:{package_id:"0x000000000000000000000000000000000000000000000000000000000000dee9",published_at:"0x000000000000000000000000000000000000000000000000000000000000dee9"},deepbook_endpoint_v2:{package_id:"0x92aee86c01c79146d23938a00c7fff725ee0688c389be36d1bcbe03761b466c6",published_at:"0x92aee86c01c79146d23938a00c7fff725ee0688c389be36d1bcbe03761b466c6"},aggregatorUrl:"https://api-sui.cetus.zone/router",swapCountUrl:"https://api-sui.cetus.zone/v2/sui/swap/count"},fs={launchpad:{package_id:"0x80d114c5d474eabc2eb2fcd1a0903f1eb5b5096a8dc4184d72453f7a9be728e4",published_at:"0x80d114c5d474eabc2eb2fcd1a0903f1eb5b5096a8dc4184d72453f7a9be728e4",config:{pools_id:"0xfd8d37f7a1276878972d240302c8efe32f577220c1bbc6c8984d8b60dddfcab3",admin_cap_id:"0x66c70d58c69353714cc6fe2d3a62492d605a96a9821e2bd8274de17219c69980",config_cap_id:"0x02b8d23f033687579966e182c776fe0287cacdbb18bff56c29f141e29a18a4d1"}},ido:{package_id:"0x1192c9e20b4b0a8848a73a8c711b43e38f7ea1f307b556aab6ffab4e982e9c59",published_at:"0x1192c9e20b4b0a8848a73a8c711b43e38f7ea1f307b556aab6ffab4e982e9c59",config:{pools_id:"0xefc209b47acf1f23b29d166440904600229e520ad36228aaf2329b7c16be9762",admin_cap_id:"0x281859d366951830aeeda90779aa170d8ee6845875545470d33ecb890e78c8ce",package_version_id:"0xc93dc996106770af5f4e979b6808518f8cee080f22f35b936f071f59d834bb22"}},xcetus:{package_id:"0x9e69acc50ca03bc943c4f7c5304c2a6002d507b51c11913b247159c60422c606",published_at:"0x9e69acc50ca03bc943c4f7c5304c2a6002d507b51c11913b247159c60422c606",config:{xcetus_manager_id:"0x838b3dbade12b1e602efcaf8c8b818fae643e43176462bf14fd196afa59d1d9d",lock_manager_id:"0x288b59d9dedb51d0bb6cb5e13bfb30885ecf44f8c9076b6f5221c5ef6644fd28",lock_handle_id:"0x7c534bb7b8a2cc21538d0dbedd2437cc64f47106cb4c259b9ff921b5c3cb1a49"}},xcetus_dividends:{package_id:"0x785248249ac457dfd378bdc6d2fbbfec9d1daf65e9d728b820eb4888c8da2c10",published_at:"0x5aa58e1623885bd93de2331d05c29bf4930e54e56beeabcab8fe5385de2d31dc",config:{dividend_manager_id:"0x721c990bfc031d074341c6059a113a59c1febfbd2faeb62d49dcead8408fa6b5",dividend_admin_id:"0x682ba823134f156eac2bcfb27d85a284954a0e61998dc628c40b9bcb4a46ff30",dividend_settle_id:"0xade40abe9f6dd10b83b11085be18f07b63b681cf1c169b041fa16854403388c5",venft_dividends_id:"0x9dcdb97b4307684bedaeaf803d381b12321a31ecbb9dad7df2cd5f64384f9456",venft_dividends_id_v2:"0xaa21fbc1707786d56302952f8327362f4eb9a431a5bc574834e6d46125390de3"}},cetus_faucet:{package_id:"0x6864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b",published_at:"0x6864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b"},xtoken:{package_id:"",published_at:"",config:{xtoken_manager_id:"",lock_manager_id:"",lock_handle_id:""}},xtoken_dividends:{package_id:"",published_at:"",config:{dividend_manager_id:"",dividend_admin_id:"",dividend_settle_id:""}},token_faucet:{package_id:"",published_at:""},booster:{package_id:"",published_at:"",config:{booster_config_id:"",booster_pool_handle:""}},maker_bonus:{package_id:"",published_at:"",config:{maker_config_id:"",maker_pool_handle:""}},liquidity_stratefy:{package_id:"",published_at:"",version:void 0,config:void 0},vaults:{package_id:"0xd3453d9be7e35efe222f78a810bb3af1859fd1600926afced8b4936d825c9a05",published_at:"0xabbd278f738affe762e9df4765b3409bb1e86a355a4f611ad82b278c18108918",version:1,config:{admin_cap_id:"0x78a42978709c4032fab7b33b782b5bcef64c1c6603250bf23644650b72144375",vaults_manager_id:"0x25b82dd2f5ee486ed1c8af144b89a8931cd9c29dee3a86a1bfe194fdea9d04a6",vaults_pool_handle:"0x9036bcc5aa7fd2cceec1659a6a1082871f45bc400c743f50063363457d1738bd",haedal:{package_id:"0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d",published_at:"0x1d56b8ec33c3fae897eb7bb1acb79914e8152faed614868928e684c25c8b198d",version:1,config:{staking_id:"0x47b224762220393057ebf4f70501b6e657c3e56684737568439a04f80849b2ca",coin_type:"0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d::hasui::HASUI"}},volo:{package_id:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55",published_at:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55",version:1,config:{native_pool:"0x7fa2faa111b8c65bea48a23049bfd81ca8f971a262d981dcd9a17c3825cb5baf",vsui_metadata:"0x680cd26af32b2bde8d3361e804c53ec1d1cfe24c7f039eb7f549e8dfde389a60",coin_type:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55::cert::CERT"}},aftermath:{package_id:"0x7f6ce7ade63857c4fd16ef7783fed2dfc4d7fb7e40615abdb653030b76aef0c6",published_at:"0x7f6ce7ade63857c4fd16ef7783fed2dfc4d7fb7e40615abdb653030b76aef0c6",version:1,config:{staked_sui_vault:"0x2f8f6d5da7f13ea37daa397724280483ed062769813b6f31e9788e59cc88994d",referral_vault:"0x4ce9a19b594599536c53edb25d22532f82f18038dc8ef618afd00fbbfb9845ef",safe:"0xeb685899830dd5837b47007809c76d91a098d52aabbf61e8ac467c59e5cc4610",validator_address:"0xd30018ec3f5ff1a3c75656abf927a87d7f0529e6dc89c7ddd1bd27ecb05e3db2",coin_type:"0xf325ce1300e8dac124071d3152c5c5ee6174914f8bc2161e88329cf579246efc::afsui::AFSUI"}}}},limit_order:{package_id:"",published_at:"",version:1,config:{rate_orders_indexer_id:"",rate_orders_indexer_handle:"",global_config_id:"",token_list_handle:"",user_orders_indexer_id:"",user_orders_indexer_handle:""}},frams:{package_id:"0x11ea791d82b5742cc8cab0bf7946035c97d9001d7c3803a93f119753da66f526",published_at:"0xd817d90368dafcbf3b051e96546dea6209bffad23289d66025beef80354dcd6b",version:1,config:{global_config_id:"0x21215f2f6de04b57dd87d9be7bb4e15499aec935e36078e2488f36436d64996e",rewarder_manager_id:"0xe0e155a88c77025056da08db5b1701a91b79edb6167462f768e387c3ed6614d5",rewarder_manager_handle:"0xb32e312cbb3367d6f3d2b4e57c9225e903d29b7b9f612dae2ddf75bdeb26a5aa",admin_cap_id:"0xf10fbf1fea5b7aeaa524b87769461a28c5c977613046360093673991f26d886c"}},dca:{package_id:"",published_at:"",version:0,config:{admin_cap_id:"",global_config_id:"",indexer_id:"",user_indexer_id:"",in_coin_whitelist_id:"",out_coin_whitelist_id:""}}},bs={fullRpcUrl:"https://fullnode.testnet.sui.io/",simulationAccount:{address:"0xcd0247d0b67e53dde69b285e7a748e3dc390e8a5244eb9dd9c5c53d95e4cf0aa"},cetus_config:{package_id:"0xf5ff7d5ba73b581bca6b4b9fa0049cd320360abd154b809f8700a8fd3cfaf7ca",published_at:"0xf5ff7d5ba73b581bca6b4b9fa0049cd320360abd154b809f8700a8fd3cfaf7ca",config:{coin_list_id:"0x257eb2ba592a5480bba0a97d05338fab17cc3283f8df6998a0e12e4ab9b84478",launchpad_pools_id:"0xdc3a7bd66a6dcff73c77c866e87d73826e446e9171f34e1c1b656377314f94da",clmm_pools_id:"0x26c85500f5dd2983bf35123918a144de24e18936d0b234ef2b49fbb2d3d6307d",admin_cap_id:"0x1a496f6c67668eb2c27c99e07e1d61754715c1acf86dac45020c886ac601edb8",global_config_id:"0xe1f3db327e75f7ec30585fa52241edf66f7e359ef550b533f89aa1528dd1be52",coin_list_handle:"0x3204350fc603609c91675e07b8f9ac0999b9607d83845086321fca7f469de235",launchpad_pools_handle:"0xae67ff87c34aceea4d28107f9c6c62e297a111e9f8e70b9abbc2f4c9f5ec20fd",clmm_pools_handle:"0xd28736923703342b4752f5ed8c2f2a5c0cb2336c30e1fed42b387234ce8408ec"}},clmm_pool:{package_id:"0x0868b71c0cba55bf0faf6c40df8c179c67a4d0ba0e79965b68b3d72d7dfbf666",published_at:"0x1c29d658882c40eeb39a8bb8fe58f71a216a918acb3e3eb3b47d24efd07257f2",config:{pools_id:"0xc090b101978bd6370def2666b7a31d7d07704f84e833e108a969eda86150e8cf",global_config_id:"0x6f4149091a5aea0e818e7243a13adcfb403842d670b9a2089de058512620687a",global_vault_id:"0xf3114a74d54cbe56b3e68f9306661c043ede8c6615f0351b0c3a93ce895e1699",admin_cap_id:""}},integrate:{package_id:"0x8627c5cdcd8b63bc3daa09a6ab7ed81a829a90cafce6003ae13372d611fbb1a9",published_at:"0xf1a5d0c5b0593e41d13f9684ca91365bdfe54a98836c1d33c90e361a031fac74",version:6},deepbook:{package_id:"0x000000000000000000000000000000000000000000000000000000000000dee9",published_at:"0x000000000000000000000000000000000000000000000000000000000000dee9"},deepbook_endpoint_v2:{package_id:"0xa34ffca2c6540e1ca9e53963ab43e7b1eed7b82e37696c743bb7c6179c15dfa6",published_at:"0xa34ffca2c6540e1ca9e53963ab43e7b1eed7b82e37696c743bb7c6179c15dfa6"},aggregatorUrl:"https://api-sui.devcetus.com/router",swapCountUrl:"https://api-sui.devcetus.com/v2/sui/swap/count"},gs={launchpad:{package_id:"0x3beee8416089a5cbff9cfd5c0a2ce2937b0452dc7e2a3ab4dc431c7be05c2335",published_at:"0x3beee8416089a5cbff9cfd5c0a2ce2937b0452dc7e2a3ab4dc431c7be05c2335",config:{pools_id:"0xccc10403ab3da4ae943847908e0e674fe1fdab81c6383e4c6dcd0eea0edade3d",admin_cap_id:"0x8a72713049dbcfc40902ff209dc5e6066fe455d152baa235957c84d7a3b875ed",config_cap_id:"0x16492b4252b01debb60f8a825334020d7fdb9d895b52f8139c98618de30817fc"}},ido:{package_id:"0x1352bf18ef20458f7cc773852d4a90b240015a6a54479dda3a1debfc500bf044",published_at:"0xbd09a0889ea9970b821512428bab3e2fd01e16809a90a325cd3b3d3573eab6a4",config:{pools_id:"0x346bee25ab4d15bcfa9484ef5ebd4d7c94eb665ebaa745ff4094936a7f59a8b1",admin_cap_id:"0xc1bb19a24d3bb65dfd4f3835637b63347c223c67cde4b0888f1a857974f33cbb",package_version_id:"0x3ccf1b38e3259e638b980d4e6b49eac8c5aa94d3cb2ace5e75f0a551c8e67e5e"}},xcetus:{package_id:"0xdebaab6b851fd3414c0a62dbdf8eb752d6b0d31f5cfce5e38541bc6c6daa8966",published_at:"0xdebaab6b851fd3414c0a62dbdf8eb752d6b0d31f5cfce5e38541bc6c6daa8966",config:{xcetus_manager_id:"0x3be34cbad122c8b100ed7157d762b9610e68b3c65734e08bc3c3baf857da807d",lock_manager_id:"0x7c67e805182e3fecd098bd68a6b06c317f28f8c6249bd771e07904a10b424e60",lock_handle_id:"0xc5f3bbfefe9a45c13da7a34bc72cac122ee45d633690476a8ac56bd2c4e78c86"}},xcetus_dividends:{package_id:"0x20d948d640edd0c749f533d41efc5f843f212d441220324ad7959c6e1d281828",published_at:"0x20d948d640edd0c749f533d41efc5f843f212d441220324ad7959c6e1d281828",config:{dividend_manager_id:"0x13b7facb704fae1d199ff0038b8acabc253415a77d142b39189dee97d457e442",dividend_admin_id:"0x5eb78463007422d4130b21f61c180bcd190819b7792f56e00a61df3b8fb928ef",dividend_settle_id:"0x495095e13a170ff494d242ae44ac2c7453011ca6c33cff27498010105e10e4b4",venft_dividends_id:"",venft_dividends_id_v2:""}},cetus_faucet:{package_id:"0x1a69aee6be709054750949959a67aedbb4200583b39586d5e3eabe57f40012c7",published_at:"0x1a69aee6be709054750949959a67aedbb4200583b39586d5e3eabe57f40012c7"},xtoken:{package_id:"",published_at:"",config:{xtoken_manager_id:"",lock_manager_id:"",lock_handle_id:""}},xtoken_dividends:{package_id:"",published_at:"",config:{dividend_manager_id:"",dividend_admin_id:"",dividend_settle_id:""}},token_faucet:{package_id:"",published_at:""},booster:{package_id:"",published_at:"",config:{booster_config_id:"",booster_pool_handle:""}},maker_bonus:{package_id:"",published_at:"",config:{maker_config_id:"",maker_pool_handle:""}},liquidity_stratefy:{package_id:"",published_at:"",version:void 0,config:void 0},vaults:{package_id:"0x25cff94bdb454bae6a5565d09047bfe2b230025ef3bd2199622ec48d854b86b9",published_at:"0x25cff94bdb454bae6a5565d09047bfe2b230025ef3bd2199622ec48d854b86b9",config:{admin_cap_id:"0x9b2d6f5be2650d16d27cd630c4539a76d7793970343ed3cbb023e13f1637c07c",vaults_manager_id:"0xc0a1a937df08880e395d85014ff40c74f13abe7a53abdbffea36f51adaaaf79e",vaults_pool_handle:"0x3ab02203de753de9c8198cc0ce7594dc960878f2c34c5c5a4b7742082241860a"}},limit_order:{package_id:"",published_at:"",version:1,config:{rate_orders_indexer_id:"",rate_orders_indexer_handle:"",global_config_id:"",token_list_handle:"",user_orders_indexer_id:"",user_orders_indexer_handle:""}},frams:{package_id:"0xfa0d98e99c1dbdbea1b0fe089fa93ebab40a7719ae4160c42cc78ebfe029fda0",published_at:"0xfa0d98e99c1dbdbea1b0fe089fa93ebab40a7719ae4160c42cc78ebfe029fda0",config:{global_config_id:"0x5082c7a5ee9a758025d7b0a5e8aa08b56625c7cd535b8909d2b7993991e229cc",rewarder_manager_id:"0xe789e092dbd9dceadbe89350c4761a6f2e11647aab97f09746a01b151926cc0e",rewarder_manager_handle:"0x7e7dd42392b5d82564dc9ad5093a111c5f0598cc9f806cff257d7dacb71f7837",admin_cap_id:"0x4ec248bca2d1fc05f39fd7491ab490464a46d128624caa4d3c2a66d957ef40b0"}},dca:{package_id:"",published_at:"",version:0,config:{admin_cap_id:"",global_config_id:"",indexer_id:"",user_indexer_id:"",in_coin_whitelist_id:"",out_coin_whitelist_id:""}}},bt=(a,t)=>{let e=a==="sui:mainnet"?ms:bs,n=new us(e);return n.senderAddress=t.address,n},j=(a,t)=>{let e=bt(a,t),n=a==="sui:mainnet"?fs:gs;return new ds(n,e)},hs="https://api-sui.cetus.zone/router_v2/find_routes",Jo=(a,t)=>{let e=new ps({url:"https://fullnode.mainnet.sui.io/"});return new cs(hs,t.address,e,ls.Mainnet)};var Xo=async(a,t,e)=>await bt(e,t).Position.createAddLiquidityFixTokenPayload(a?.parameter,a?.gasEstimateArg),Yo=async(a,t,e)=>await bt(e,t).Position.createAddLiquidityFixTokenPayload(a?.parameter,a?.gasEstimateArg),Zo=async(a,t,e)=>await bt(e,t).Position.closePositionTransactionPayload(a),tr=async(a,t,e)=>await bt(e,t).Position.removeLiquidityTransactionPayload(a),er=async(a,t,e)=>await bt(e,t).Rewarder.collectRewarderTransactionPayload(a);var he=class a extends y{constructor(e){super(e);this.data=e}txType=ys.Other;txSubType="OpenAndAddLiquidity";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await Xo(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Ss}from"@msafe/sui3-utils";var ye=class a extends y{constructor(e){super(e);this.data=e}txType=Ss.Other;txSubType="ClaimFeeAndMining";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await er(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as ws}from"@msafe/sui3-utils";var Se=class a extends y{constructor(e){super(e);this.data=e}txType=ws.Other;txSubType="DecreaseLiquidity";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await tr(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Is}from"@msafe/sui3-utils";var nr=async(a,t,e)=>await j(e,t).Farms.openPositionAddLiquidityStakePaylod(a),ar=async(a,t,e)=>await j(e,t).Farms.addLiquidityFixCoinPayload(a),or=async(a,t,e)=>await j(e,t).Farms.removeLiquidityPayload(a),rr=async(a,t,e)=>await j(e,t).Farms.removeLiquidityPayload(a),ir=async(a,t,e)=>await j(e,t).Farms.claimFeeAndClmmReward(a),sr=async(a,t,e)=>await j(e,t).Farms.harvestPayload(a),cr=async(a,t,e)=>{let n=j(e,t),o=Object.values(a);return await n.Farms.batchHarvestPayload(o)},lr=async(a,t,e)=>await j(e,t).Farms.depositPayload(a),dr=async(a,t,e)=>await j(e,t).Farms.withdrawPayload(a);var we=class a extends y{constructor(e){super(e);this.data=e}txType=Is.Other;txSubType="FarmingOpenAndAddLiquidity";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await nr(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Cs}from"@msafe/sui3-utils";var Ie=class a extends y{constructor(e){super(e);this.data=e}txType=Cs.Other;txSubType="FarmingBatchHarvest";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await cr(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Ts}from"@msafe/sui3-utils";var Ce=class a extends y{constructor(e){super(e);this.data=e}txType=Ts.Other;txSubType="FarmingClaimFeeAndReward";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await ir(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as ks}from"@msafe/sui3-utils";var Te=class a extends y{constructor(e){super(e);this.data=e}txType=ks.Other;txSubType="FarmingDecreaseLiquidity";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await or(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as vs}from"@msafe/sui3-utils";var ke=class a extends y{constructor(e){super(e);this.data=e}txType=vs.Other;txSubType="FarmingHarvest";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await sr(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as xs}from"@msafe/sui3-utils";var ve=class a extends y{constructor(e){super(e);this.data=e}txType=xs.Other;txSubType="FarmingIncreaseLiquidity";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await ar(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as As}from"@msafe/sui3-utils";var xe=class a extends y{constructor(e){super(e);this.data=e}txType=As.Other;txSubType="FarmingRemoveLiquidity";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await rr(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Ds}from"@msafe/sui3-utils";var Ae=class a extends y{constructor(e){super(e);this.data=e}txType=Ds.Other;txSubType="FarmingStake";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await lr(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Os}from"@msafe/sui3-utils";var De=class a extends y{constructor(e){super(e);this.data=e}txType=Os.Other;txSubType="FarmingUnstake";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await dr(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Ps}from"@msafe/sui3-utils";var Oe=class a extends y{constructor(e){super(e);this.data=e}txType=Ps.Other;txSubType="IncreaseLiquidity";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await Yo(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as _s}from"@msafe/sui3-utils";var Pe=class a extends y{constructor(e){super(e);this.data=e}txType=_s.Other;txSubType="RemoveLiquidity";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await Zo(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Ms}from"@msafe/sui3-utils";import{restituteMsafeFastRouterSwapParams as Rs}from"@cetusprotocol/aggregator-sdk";import{Transaction as js}from"@mysten/sui/transactions";var ur=async(a,t,e)=>{let n=Jo(e,t),o=new js;return await n.fastRouterSwap({...a,routers:Rs(a.routers),txb:o}),o};var _e=class a extends y{constructor(e){super(e);this.data=e}txType=Ms.Other;txSubType="AggregatorSwap";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await ur(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Ns}from"@msafe/sui3-utils";import{Transaction as Bs}from"@mysten/sui/transactions";var pr={package_id:"0x355714a1eeb7ab1d80902da6c92001170cda1212edf524c32aa308a3ac177c31",published_at:"0x355714a1eeb7ab1d80902da6c92001170cda1212edf524c32aa308a3ac177c31",cetus_coin_type:"0x06864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b::cetus::CETUS"},mr=async(a,t,e)=>{console.log("getVestingRedeemTxb txbParams: ",a),console.log("getVestingRedeemTxb account: ",t),console.log("getVestingRedeemTxb network: ",e);let{pool:n,nftId:o,periods:r,CLOCK_ADDRESS:i}=a,s=new Bs;return r.forEach(c=>{s.moveCall({target:`${pr.published_at}::router::redeem`,typeArguments:[pr.cetus_coin_type],arguments:[s.object(n),s.object(o),s.pure(c),s.object(i)]})}),s};var Re=class a extends y{constructor(e){super(e);this.data=e}txType=Ns.Other;txSubType="VestingRedeem";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await mr(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Ws}from"@msafe/sui3-utils";import{Transaction as Es}from"@mysten/sui/transactions";var fr=async(a,t,e)=>{let n=j(e,t),o=new Es;return await n.XCetusModule.convertPayload(a,o)},br=async(a,t,e)=>await j(e,t).XCetusModule.redeemLockPayload(a),gr=async(a,t,e)=>await j(e,t).XCetusModule.redeemDividendV3Payload(a.phases,a.venft_id,a.bonus_types,a.bonus_types_v2,a.xTokenType),hr=async(a,t,e)=>await j(e,t).XCetusModule.cancelRedeemPayload(a),yr=async(a,t,e)=>await j(e,t).XCetusModule.redeemPayload(a);var je=class a extends y{constructor(e){super(e);this.data=e}txType=Ws.Other;txSubType="xCETUSCancelRedeem";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await hr(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Ls}from"@msafe/sui3-utils";var Me=class a extends y{constructor(e){super(e);this.data=e}txType=Ls.Other;txSubType="xCETUSClaimStakingRwewards";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await gr(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Us}from"@msafe/sui3-utils";var Be=class a extends y{constructor(e){super(e);this.data=e}txType=Us.Other;txSubType="xCETUSConvert";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await fr(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Fs}from"@msafe/sui3-utils";var Ne=class a extends y{constructor(e){super(e);this.data=e}txType=Fs.Other;txSubType="xCETUSRedeem";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await yr(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as $s}from"@msafe/sui3-utils";var Ee=class a extends y{constructor(e){super(e);this.data=e}txType=$s.Other;txSubType="xCETUSRedeemLock";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await br(r,n,o)}static fromData(e){return new a(e)}};var We=class{application="cetus";supportSDK="@mysten/sui";async deserialize(t){console.log("Cetus helper deserialize input: ",t);let{txbParams:e,action:n}=t;return{txType:qs.Other,txSubType:n,intentionData:{txbParams:{...e},action:n}}}async build(t){let{suiClient:e,account:n,network:o}=t,r;switch(t.txSubType){case"OpenAndAddLiquidity":r=he.fromData(t.intentionData);break;case"IncreaseLiquidity":r=Oe.fromData(t.intentionData);break;case"DecreaseLiquidity":r=Se.fromData(t.intentionData);break;case"RemoveLiquidity":r=Pe.fromData(t.intentionData);break;case"ClaimFeeAndMining":r=ye.fromData(t.intentionData);break;case"FarmingOpenAndAddLiquidity":r=we.fromData(t.intentionData);break;case"FarmingIncreaseLiquidity":r=ve.fromData(t.intentionData);break;case"FarmingDecreaseLiquidity":r=Te.fromData(t.intentionData);break;case"FarmingRemoveLiquidity":r=xe.fromData(t.intentionData);break;case"FarmingClaimFeeAndReward":r=Ce.fromData(t.intentionData);break;case"FarmingHarvest":r=ke.fromData(t.intentionData);break;case"FarmingBatchHarvest":r=Ie.fromData(t.intentionData);break;case"FarmingStake":r=Ae.fromData(t.intentionData);break;case"FarmingUnstake":r=De.fromData(t.intentionData);break;case"xCETUSConvert":r=Be.fromData(t.intentionData);break;case"xCETUSRedeemLock":r=Ee.fromData(t.intentionData);break;case"xCETUSClaimStakingRwewards":r=Me.fromData(t.intentionData);break;case"xCETUSCancelRedeem":r=je.fromData(t.intentionData);break;case"xCETUSRedeem":r=Ne.fromData(t.intentionData);break;case"VestingRedeem":r=Re.fromData(t.intentionData);break;case"AggregatorSwap":r=_e.fromData(t.intentionData);break;default:throw new Error("not implemented")}return r.build({suiClient:e,account:n,network:o})}};import{TransactionType as Fc}from"@msafe/sui3-utils";import Qs from"sort-keys-recursive";var h=class{constructor(t){this.data=t}serialize(){return JSON.stringify(Qs(this.data))}};import{getFullnodeUrl as Le}from"@mysten/sui.js/client";var ao={};Ko(ao,{contractId:()=>Ks,default:()=>Ys,feeObjId:()=>Js,roleObjId:()=>Gs,status:()=>Hs,transaction:()=>Vs,upgradeCapObjId:()=>Xs,vaultObjId:()=>zs});var Vs="DiBZq4UmVVYiRL6ZJmFKYoHcxtxqrhsCXSkFyT7wUr3j",Hs="success",Ks="0x81c960dc653975fbd0072deca8afb92d322898c911622898ba1b2e3ad0c4bd8d",Gs="0xc6ec0bdee0bb59a72077e9acd2f42457043cf47080b3d3fad4d39abf28bba63a",zs="0xbc4021387fbac149119fd24e92be9e58f745774292f3a2a12e2ac6daf5363e1d",Js="0x4178f63970fe2daeb256dc5730ad172e82b3e8eb45f31b33e0daae72cd35e1e1",Xs="0xe1e9aa7d222d151bfe6dd83358b0d7fdcb11260f710800cfaf7ccc1b1e245115",Ys={transaction:Vs,status:Hs,contractId:Ks,roleObjId:Gs,vaultObjId:zs,feeObjId:Js,upgradeCapObjId:Xs};var oo={};Ko(oo,{contractId:()=>ec,default:()=>ic,feeObjId:()=>oc,roleObjId:()=>nc,status:()=>tc,transaction:()=>Zs,upgradeCapObjId:()=>rc,vaultObjId:()=>ac});var Zs="855FNDV8o8Z3fWULPnQo9qdhLJpsg7wZrkCpNyfw9KfB",tc="success",ec="0xc357c3985e8fb875d6b37141497af660779aa1bab0ec489b2213efd74067d1fa",nc="0x5ab49bdf9fd1413e328ef242b3f8d83dde791b38a0b627bfc87fb25c010d34f1",ac="0xb483558770d8eb26007f193b75db40f0a45f2e36863a687625885d4de6993378",oc="0x48453fc4d7cde3fe35aad89e5dfb496608a6a55ea529a1c0274681a808627f94",rc="0x34279779a0d0d36bd5044b04830d607fa1b0ecf316548c8ac3a44151e4f1a42a",ic={transaction:Zs,status:tc,contractId:ec,roleObjId:nc,vaultObjId:ac,feeObjId:oc,upgradeCapObjId:rc};var sc=Le("testnet"),cc=Le("testnet"),lc=Le("mainnet"),dc=Le("mainnet"),uc="https://bc3p6l5unl.execute-api.us-west-1.amazonaws.com/prod",pc="https://rolsbkota7.execute-api.us-west-1.amazonaws.com/prod",mc="https://6p6mkx33ne.execute-api.us-west-1.amazonaws.com/prod",fc="https://xrae3mrjv5.execute-api.us-west-1.amazonaws.com/prod",Sr=ao,wr=oo,bc=new Map([["dev",{env:"dev",rpc:{url:sc},backend:{url:uc},contract:Sr}],["stg",{env:"stg",rpc:{url:cc},backend:{url:pc},contract:Sr}],["prev",{env:"prev",rpc:{url:lc},backend:{url:mc},contract:wr}],["prod",{env:"prod",rpc:{url:dc},backend:{url:fc},contract:wr}]]);function Ir(a,t){let e=bc.get(a);if(!e)throw new Error(`Env not supported: ${a}`);return t&&t.rpc&&(e.rpc=t.rpc),t&&t.backend&&(e.backend=t.backend),t&&t.contract&&(e.contract=t.contract),e}import{SuiClient as hc}from"@mysten/sui.js/client";var k=class extends Error{mpayErrorCode;context;constructor(t,e,n={}){let{cause:o,context:r}=n;o?super(`[MPay] ${e}: ${o}`):super(`[MPay] ${e}`),this.mpayErrorCode=t,this.context=r}};var Ue=class extends k{constructor(){super(11,"Backend is not specified")}};var Fe=class extends k{constructor(){super(1,"Wallet not connected")}};import St,{AxiosError as gc}from"axios";var yt=class extends k{constructor(t,e){super(10,t,{context:e})}};var $e=class a{constructor(t){this.apiURL=t}static parseResponseData(t){if(t instanceof gc)throw new yt(t.response?.statusText);if(t.status===200){if(t.data.success)return t.data.data;throw new yt(t.data.code)}throw new yt(t.status.toString())}async getIncomingStreams(t,e){let n=await St.post(`${this.apiURL}/stream`,{recipient:t,...e});return a.parseResponseData(n)}async getOutgoingStreams(t,e){let n=await St.post(`${this.apiURL}/stream`,{sender:t,...e});return a.parseResponseData(n)}async getStreamHistory(t){let e=await St.post(`${this.apiURL}/stream-events`,t),n=a.parseResponseData(e);return n.data.forEach(o=>{let r=o;return r.data.type==="create_stream"?r.data.balance=BigInt(r.data.balance):r.data.type==="cancel_stream"?r.data.withdrawAmount=BigInt(r.data.withdrawAmount):r.data.type==="claim"||r.data.type==="auto_claim"?r.data.claimAmount=BigInt(r.data.claimAmount):r.data.type==="set_auto_claim"&&(r.data.enabled=!!r.data.enabled),r.createdAt=new Date(r.createdAt),r}),n}async getAllCoinTypes(t){let e=await St.post(`${this.apiURL}/stream-info`,{address:t});return a.parseResponseData(e)}async getAllRecipients(t,e){let n=await St.post(`${this.apiURL}/stream-info`,{sender:t,status:e});return a.parseResponseData(n)}async getAllSenders(t,e){let n=await St.post(`${this.apiURL}/stream-info`,{recipient:t,status:e});return a.parseResponseData(n)}};var wt=class a{signer;suiClient;envConfig;_backend;constructor(t){this.envConfig=t,this.suiClient=new hc({url:t.rpc.url}),t.backend&&(this._backend=new $e(t.backend.url))}static new(t,e){let n=Ir(t,e);return new a(n)}get walletType(){return this.wallet?this.wallet.type:"disconnected"}get backend(){if(!this._backend)throw new Ue;return this._backend}set backend(t){this._backend=t}connectWallet(t){this.signer=t}disconnect(){this.signer=void 0}get wallet(){if(!this.signer)throw new Fe;return this.signer}async walletAddress(){return this.wallet.address()}};import{SUI_TYPE_ARG as Wc,normalizeStructTag as Lc,normalizeSuiAddress as Vr}from"@mysten/sui.js/utils";import{TransactionBlock as Ge}from"@mysten/sui.js/transactions";import{TransactionBlock as Pr}from"@mysten/sui.js/transactions";import{SUI_TYPE_ARG as _r,normalizeStructTag as Ic}from"@mysten/sui.js/utils";var ro=50n,qe=10000n,Cr=25n,io=100000000n;var K=class{constructor(t){this.object=t}moveArg(t){return t.object(this.object)}},Et=class{constructor(t){this.objects=t}moveArgs(t){return t.makeMoveVec({objects:this.objects.map(e=>t.object(e))})}},nt=class a{constructor(t){this.result=t;return new Proxy(this,{set(){throw new Error("The transaction result is a proxy, and does not support setting properties directly")},get(e,n){if(n in e)return Reflect.get(e,n);let o=i=>new a(e.result[i]);if(n===Symbol.iterator)return function*(){let i=0;for(;;)yield o(i),i++};if(typeof n=="symbol")return;let r=parseInt(n,10);if(!(Number.isNaN(r)||r<0))return o(r)}})}moveArg(){return this.result}};import{Buffer as Tr}from"buffer";import{normalizeSuiAddress as yc}from"@mysten/sui.js/utils";var Wt=class extends k{constructor(t,e){super(3,t,{context:e})}};var Qe=class{constructor(t){this.results=t}callResult(t){return this.results.results[t]}returnValue(t,e){return t.returnValues[e]}getValue(t=0,e=0){let n=this.callResult(t);return this.returnValue(n,e)}getAddress(t=0,e=0){let[n,o]=this.getValue(t,e);if(o!=="address")throw new Wt("Invalid contract return type.",{ctx:{expectType:"address",gotType:o}});return yc(Tr.from(n).toString("hex"))}getU64(t=0,e=0){let[n,o]=this.getValue(t,e);if(o!=="u64")throw new Wt("Invalid contract return type.",{ctx:{expectType:"u64",gotType:o}});return Tr.from(n).readBigInt64LE()}};import{bcs as vr}from"@mysten/sui.js/bcs";var A=class extends k{constructor(t,e,n){super(2,`Invalid input: ${t}`,{context:{fieldKey:e,fieldValue:n}})}};var xr={groupId:"string",name:"string"},Sc=64;function Ar(a){return Dr(a),vr.ser(xr,a).toString("base64")}function Lt(a){let t=vr.de(xr,a,"base64");return Dr(t),t}function Dr(a){if(!kr(a.name))throw new A("Invalid metadata: Name contains unknown character");if(!kr(a.groupId))throw new A("Invalid metadata: Group ID contains unknown character");if(a.name.length>Sc)throw new A("Invalid metadata: Name exceed max length 64")}function kr(a){return/^[\x00-\x7F]+$/.test(a)}import{normalizeStructTag as Ve}from"@mysten/sui.js/utils";function He(a,t){return Ve(a)===Ve(t)}function at(a,t){return Ve(a)===Ve(t)}var Ke="txn.gas";import{nanoid as wc}from"nanoid";function Or(){return wc()}var gt=class a{constructor(t,e,n){this.globals=t;this.feeContract=e;this.streamContract=n}static convertCreateStreamInfoToInternal(t){return{metadata:Ar({name:t.name,groupId:Or()}),coinType:Ic(t.coinType),recipients:t.recipients.map(e=>({address:e.address,cliffAmount:e.cliffAmount,amountPerEpoch:e.amountPerStep})),epochInterval:t.interval,numberEpoch:t.steps,startTime:t.startTimeMs,cancelable:t.cancelable}}async buildCreateStreamTransactionBlock(t){let e=new Pr,n=this.calculateFeesInternal(t),o=this.getCreateStreamCoinRequests(t,n),r=await this.wallet.requestCoins(o),i=await this.addMergeCoins(e,r[0]),s;o.length>1?s=await this.addMergeCoins(e,r[1]):s=i;for(let c=0;c<t.recipients.length;c++){let l=t.recipients[c],d=this.amountForRecipient(l,t.numberEpoch),u=this.getStreamFeeLocal(d),[p]=e.splitCoins(i,[e.pure(d+u,"u64")]),[m]=e.splitCoins(s,[e.pure(this.flatSuiFee,"u64")]);this.streamContract.createStream(e,{paymentCoin:new nt(p),flatFeeCoin:new nt(m),metadata:t.metadata,recipient:l.address,timeStart:t.startTime,cliff:l.cliffAmount,epochInterval:t.epochInterval,numEpoch:t.numberEpoch,amountPerEpoch:l.amountPerEpoch,cancelable:t.cancelable,coinType:t.coinType})}return e}calculateCreateStreamFees(t){let e=a.convertCreateStreamInfoToInternal(t);return this.calculateFeesInternal(e)}feeParams(){return{createFeePercent:{numerator:ro,denominator:qe},claimFeePercent:{numerator:Cr,denominator:qe},flatFeePerStream:io}}async addMergeCoins(t,e){let n;return e.mergedCoins&&e.mergedCoins.length?(t.mergeCoins(t.object(e.primaryCoin),e.mergedCoins.map(o=>t.object(o))),n=t.object(e.primaryCoin)):e.primaryCoin===Ke?n=t.gas:n=t.object(e.primaryCoin),n}getCreateStreamCoinRequests(t,e){let n=t.coinType;return He(n,_r)?[{coinType:n,amount:e.totalAmount+e.streamFeeAmount+e.flatFeeAmount}]:[{coinType:n,amount:e.totalAmount+e.streamFeeAmount},{coinType:_r,amount:e.flatFeeAmount}]}calculateFeesInternal(t){let e=t.recipients.reduce((o,r)=>{let i=this.amountForRecipient(r,t.numberEpoch),s=this.getStreamFeeLocal(i);return{totalAmount:o.totalAmount+i,streamFeeAmount:o.streamFeeAmount+s}},{totalAmount:0n,streamFeeAmount:0n});return{flatFeeAmount:BigInt(t.recipients.length)*this.flatSuiFee,...e}}amountForRecipient(t,e){return BigInt(t.amountPerEpoch)*BigInt(e)+BigInt(t.cliffAmount)}get flatSuiFee(){return io}getStreamFeeLocal(t){return t*ro/qe}async getStreamFeeRemote(t){let e=this.feeContract.streamingFee(new Pr,t),n=await this.globals.suiClient.devInspectTransactionBlock({sender:await this.globals.walletAddress(),transactionBlock:e});return new Qe(n).getU64()}get wallet(){return this.globals.wallet}};import{Transactions as jr}from"@mysten/sui.js/transactions";var Rr="0x0000000000000000000000000000000000000000000000000000000000000006";var It=class{constructor(t,e,n){this.moduleName=t;this.config=e;this.globals=n}addContractCall(t,e){let n=`${this.config.contractId}::${this.moduleName}::${e.method}`;return t.add(jr.MoveCall({target:n,arguments:e.arguments.map(o=>o instanceof Et?o.moveArgs(t):o instanceof K?o.moveArg(t):o instanceof nt?o.moveArg():t.pure(o)),typeArguments:e.typeArgs})),t}addTransactionBlock(t,e,n=[],o=[]){t.add(jr.MoveCall({target:e,arguments:n.map(r=>r instanceof Et?r.moveArgs(t):r instanceof K?r.moveArg(t):r instanceof nt?r.moveArg():t.pure(r)),typeArguments:o}))}makeObject(t){return typeof t=="string"?new K(t):t}vaultObject(){return new K(this.config.vaultObjId)}roleObject(){return new K(this.config.roleObjId)}feeObject(){return new K(this.config.feeObjId)}clockObject(){return new K(Rr)}};var Ct=class a extends It{constructor(e,n){super(a.ModuleName,e,n);this.config=e;this.globals=n}static ModuleName="fee_module";static MethodName={set_streaming_fee:"set_streaming_fee",set_claim_fee:"set_claim_fee",set_streaming_flat_fee:"set_streaming_flat_fee",streaming_flat_fee:"streaming_flat_fee",streaming_fee:"streaming_fee",claim_fee:"claim_fee",fee_denominator:"fee_denominator"};setStreamingFee(e,n){let o=this.roleObject(),r=this.feeObject();return this.addContractCall(e,{method:a.MethodName.set_streaming_fee,arguments:[o,r,n],typeArgs:[]})}setStreamingFlatFee(e,n){let o=this.roleObject(),r=this.feeObject();return this.addContractCall(e,{method:a.MethodName.set_streaming_flat_fee,arguments:[o,r,n],typeArgs:[]})}setClaimFee(e,n){let o=this.roleObject(),r=this.feeObject();return this.addContractCall(e,{method:a.MethodName.set_claim_fee,arguments:[o,r,n],typeArgs:[]})}streamingFee(e,n){let o=this.feeObject();return this.addContractCall(e,{method:a.MethodName.streaming_fee,arguments:[o,n],typeArgs:[]})}claimFee(e,n){return this.addContractCall(e,{method:a.MethodName.claim_fee,arguments:[this.feeObject(),n],typeArgs:[]})}feeDenominator(e){return this.addContractCall(e,{method:a.MethodName.fee_denominator,arguments:[this.feeObject()],typeArgs:[]})}};var G=class a extends It{constructor(e,n){super(a.ModuleName,e,n);this.config=e;this.globals=n}static ModuleName="stream";static MethodName={create_stream:"create_stream",set_auto_claim:"set_auto_claim",cancel_stream:"cancel_stream",claim_stream:"claim_stream",claim_stream_by_proxy:"claim_stream_by_proxy",stream_current_epoch:"stream_current_epoch",now_milli_seconds:"now_milli_seconds"};createStream(e,n){let o=this.feeObject(),r=this.vaultObject(),i=this.makeObject(n.paymentCoin),s=this.makeObject(n.flatFeeCoin),c=this.clockObject();return this.addContractCall(e,{method:a.MethodName.create_stream,arguments:[o,r,i,s,n.metadata,n.recipient,n.timeStart,n.cliff,n.epochInterval,n.numEpoch,n.amountPerEpoch,n.cancelable,c],typeArgs:[n.coinType]})}setAutoClaim(e,n){let o=this.makeObject(n.streamId);return this.addContractCall(e,{method:a.MethodName.set_auto_claim,arguments:[o,n.enabled],typeArgs:[n.coinType]})}cancelStream(e,n){let o=this.makeObject(n.streamId),r=this.clockObject();return this.addContractCall(e,{method:a.MethodName.cancel_stream,arguments:[o,r],typeArgs:[n.coinType]})}claimStream(e,n){let o=this.makeObject(n.streamId),r=this.clockObject();return this.addContractCall(e,{method:a.MethodName.claim_stream,arguments:[o,r],typeArgs:[n.coinType]})}claimStreamByProxy(e,n){let o=this.makeObject(n.streamId),r=this.vaultObject(),i=this.feeObject(),s=this.clockObject();return this.addContractCall(e,{method:a.MethodName.claim_stream_by_proxy,arguments:[o,r,i,s],typeArgs:[n.coinType]})}get createStreamTarget(){return`${this.config.contractId}::${a.ModuleName}::${a.MethodName.create_stream}`}get setAutoClaimTarget(){return`${this.config.contractId}::${a.ModuleName}::${a.MethodName.set_auto_claim}`}get cancelStreamTarget(){return`${this.config.contractId}::${a.ModuleName}::${a.MethodName.cancel_stream}`}get claimStreamTarget(){return`${this.config.contractId}::${a.ModuleName}::${a.MethodName.claim_stream}`}get claimStreamByProxyTarget(){return`${this.config.contractId}::${a.ModuleName}::${a.MethodName.claim_stream_by_proxy}`}};var Tt=class{constructor(t){this.globals=t;let e=t.envConfig.contract;this.feeContract=new Ct(e,t),this.streamContract=new G(e,t)}feeContract;streamContract;async createStreams(t){let e=gt.convertCreateStreamInfoToInternal(t);return this.createStreamHelper().buildCreateStreamTransactionBlock(e)}createStreamHelper(){return new gt(this.globals,this.feeContract,this.streamContract)}setAutoClaim(t,e,n){let o=new Ge;return this.streamContract.setAutoClaim(o,{streamId:t,enabled:e,coinType:n})}claimStream(t,e){let n=new Ge;return this.streamContract.claimStream(n,{streamId:t,coinType:e})}claimStreamByProxy(t,e){let n=new Ge;return this.streamContract.claimStreamByProxy(n,{streamId:t,coinType:e})}cancelStream(t,e){let n=new Ge;return this.streamContract.cancelStream(n,{streamId:t,coinType:e}),n}};var O=class extends k{constructor(t,e={}){super(0,t,e)}};async function co(a){let t=[];for(;await a.hasNext();){let e=await a.next();t.push(e)}return t&&Array.isArray(t[0])?t.flat(1):t}var so=class{constructor(t){this.requester=t;this.curPage=void 0,this.init=!0}curPage;init;async hasNext(){if(this.init)return this.curPage||(this.curPage=await this.requester.doNextRequest()),!!this.curPage.data?.length||this.curPage.hasNext;if(!this.curPage)throw new Error("invalid implementation of iterator");return this.curPage.hasNext}async next(){return this.init?(this.init=!1,this.curPage||(this.curPage=await this.requester.doNextRequest()),this.curPage.data):(this.curPage=await this.requester.doNextRequest(),this.curPage.data)}},kt=class{constructor(t){this.requester=t;this.pager=new so(t),this.curData=[],this.cursor=0}cursor;pager;curData;async hasNext(){return this.cursor<this.curData.length-1?!0:this.pager.hasNext()}async next(){for(this.cursor+=1;this.cursor>=this.curData.length;)if(await this.pager.hasNext())this.curData=await this.pager.next(),this.cursor=0;else throw new Error("not more data");return this.curData[this.cursor]}};var ze=class extends k{constructor(e,n,o){super(4,`Not enough balance: ${e}`,{context:{coinType:e,requestAmount:n,gotAmount:o}});this.coinType=e;this.requestAmount=n;this.gotAmount=o}};var Cc=25;async function Mr(a,t,e,n="0x2::sui::SUI",o=Cc){let r=new lo(a,t,n,o),i=BigInt(0),s=[];for(;await r.hasNext()&&i<e;){let c=await r.next();c&&(s.push(c),i+=BigInt(c.balance))}if(i<e)throw new ze(n,e,i);return s}var lo=class extends kt{constructor(e,n,o,r){super(new uo(e,n,o,r));this.suiClient=e;this.owner=n;this.coinType=o;this.reqPageSize=r}},uo=class{constructor(t,e,n,o){this.suiClient=t;this.owner=e;this.coinType=n;this.reqPageSize=o;if(o<=0)throw new O("Invalid reqPageSize")}nextCursor;async doNextRequest(){let t=await this.suiClient.getCoins({owner:this.owner,coinType:this.coinType,cursor:this.nextCursor,limit:this.reqPageSize});return this.nextCursor=t.nextCursor,{data:t.data,hasNext:t.hasNextPage}}};import{TransactionBlock as Ze}from"@mysten/sui.js/transactions";import{normalizeStructTag as Nr,parseStructTag as vc}from"@mysten/sui.js/utils";import{DateTime as xc}from"luxon";var Je=class extends k{constructor(){super(7,"Connected wallet is not creator")}};var Ut=class extends k{constructor(){super(8,"Connected wallet is not recipient")}};var Ft=class extends k{constructor(t,e){super(6,t,{context:e})}};var Xe=class extends k{constructor(t){super(5,"Stream not found",{context:{streamId:t}})}};import{DateTime as Tc,Duration as kc}from"luxon";var Br=(1n<<64n)-1n,Ye=1e3;function po(a){let t;typeof a=="number"?t=a:typeof a=="bigint"?t=Number(a):t=a.toMillis();let e=Math.round(t/Ye);return Tc.fromMillis(e*Ye)}function mo(a){let t;typeof a=="number"?t=a:typeof a=="bigint"?t=Number(a):t=a.toMillis();let e=Math.round(t/Ye);return kc.fromMillis(e*Ye)}var ot=class a{constructor(t,e,n){this.globals=t;this.streamId=e;this.rawData=n;this.streamContract=new G(t.envConfig.contract,t)}streamContract;type="Stream";static async new(t,e){let n=await a.fetchStreamData(t,e);return new a(t,e,n)}static fromObjectData(t,e,n){let o=a.parseRawStreamData(e,n);return new a(t,e,o)}get info(){return{name:this.name,creator:this.creator,coinType:this.coinType,totalAmount:this.totalAmount,start:this.timeStart,end:this.timeEnd,cancelable:this.cancelable,cliffAmount:this.cliff,duration:this.duration,interval:this.interval,steps:this.totalSteps,nextReleaseDate:this.nextReleaseDate,nextReleaseAmount:this.nextReleaseAmount,groupId:this.groupId,streamId:this.streamId,recipient:this.recipient,progress:this.progress,autoClaim:this.autoClaim}}get groupCommonInfo(){return{name:this.name,groupId:this.groupId,creator:this.creator,start:this.timeStart,interval:this.interval,steps:this.totalSteps,cancelable:this.cancelable}}async refresh(){this.rawData=await a.fetchStreamData(this.globals,this.streamId)}refreshWithData(t){if(t.data?.objectId!==this.streamId)throw new O("Object Id does not align");this.rawData=a.parseRawStreamData(this.streamId,t)}async historyEvents(t){return this.globals.backend.getStreamHistory({streamId:this.streamId,pagination:t})}async cancel(){if(await this.globals.walletAddress()!==this.creator)throw new Je;let t=new Ze;return this.streamContract.cancelStream(t,{streamId:this.streamId,coinType:this.coinType}),t}async claim(){if(await this.globals.walletAddress()!==this.recipient)throw new Ut;let t=new Ze;return this.streamContract.claimStream(t,{streamId:this.streamId,coinType:this.coinType}),t}async setAutoClaim(t){if(await this.globals.walletAddress()!==this.recipient)throw new Ut;let e=new Ze;return this.streamContract.setAutoClaim(e,{streamId:this.streamId,coinType:this.coinType,enabled:t}),e}async claimByProxy(){let t=new Ze;return this.streamContract.claimStreamByProxy(t,{streamId:this.streamId,coinType:this.coinType}),t}get wallet(){return this.globals.wallet}get client(){return this.globals.suiClient}get coinType(){return Nr(this.rawData.coinType)}get progress(){return{status:this.streamStatus,total:this.totalAmount,streamed:this.streamedAmount,claimed:this.claimedAmount,claimable:this.claimable,canceled:this.canceledAmount}}get balance(){return this.rawData.balance}get autoClaim(){return this.rawData.autoClaim}get amountPerEpoch(){return this.rawData.config.amountPerEpoch}get cancelable(){return this.rawData.config.cancelable}get cliff(){return this.rawData.config.cliff}get creator(){return this.rawData.config.creator}get interval(){return mo(this.rawData.config.epochInterval)}get groupId(){let{metadata:t}=this.rawData.config;return Lt(t).groupId}get name(){let{metadata:t}=this.rawData.config;return Lt(t).name}get recipient(){return this.rawData.config.recipient}get timeStart(){return po(this.rawData.config.timeStart)}get duration(){let t=this.rawData.config,e=t.epochInterval*t.totalEpoch;return mo(e)}get timeEnd(){return this.timeStart.plus(this.duration)}get totalSteps(){return this.rawData.config.totalEpoch}get claimable(){return this.streamedAmount-this.claimedAmount}get nextReleaseDate(){return this.currentEpoch===-1n?this.timeStart:this.currentEpoch>=this.totalSteps||this.isCanceled?null:po((this.currentEpoch+1n)*this.rawData.config.epochInterval+this.rawData.config.timeStart)}get nextReleaseAmount(){return this.currentEpoch===-1n?this.cliff:this.currentEpoch>=this.totalSteps||this.isCanceled?null:this.amountPerEpoch}get streamStatus(){let t=this.rawData.status.status;return t===16?"CANCELED":t===17?"SETTLED":t===1?"COMPLETED":this.currentEpoch>=this.totalSteps?"STREAMED":"STREAMING"}get streamedAmount(){return this.currentEpoch===-1n?0n:this.isCanceled?this.rawData.status.epochCanceled*this.amountPerEpoch+this.cliff:this.currentEpoch*this.amountPerEpoch+this.cliff}get claimedAmount(){return this.rawData.status.epochClaimed===Br?0n:this.rawData.status.epochClaimed*this.amountPerEpoch+this.cliff}get currentEpoch(){let t=xc.now().toMillis(),e=this.timeStart.toMillis();if(t<e)return-1n;let n=Math.floor((t-e)/Number(this.rawData.config.epochInterval));return BigInt(n)>Number(this.rawData.config.totalEpoch)?this.rawData.config.totalEpoch:BigInt(n)}get totalAmount(){let t=this.rawData.config;return t.amountPerEpoch*t.totalEpoch+t.cliff}get isCanceled(){let t=this.rawData.status.status;return t===16||t===17}get canceledAmount(){return this.isCanceled?this.totalAmount-this.streamedAmount:0n}static async fetchStreamData(t,e){let n=await t.suiClient.getObject({id:e,options:{showContent:!0,showType:!0}});return a.parseRawStreamData(e,n)}static parseRawStreamData(t,e){if(e.error)throw e.error.code==="notExists"?new Xe(t):new Ft(`get stream data: ${e.error.code}`,{streamId:t,...e.error});let n=e.data.content;if(n.dataType!=="moveObject")throw new Ft("Unexpected object type",{gotType:n.dataType});let{typeParams:o}=vc(n.type),r=Nr(o[0]),i=n.fields,s=i.config.fields,c=i.status.fields;return{coinType:r,autoClaim:i.auto_claim,balance:BigInt(i.balance.fields.balance),config:{amountPerEpoch:BigInt(s.amount_per_epoch),cancelable:s.cancelable,cliff:BigInt(s.cliff),creator:s.creator,epochInterval:BigInt(s.epoch_interval),metadata:s.metadata,recipient:s.recipient,timeStart:BigInt(s.time_start),totalEpoch:BigInt(s.total_epoch)},status:{status:c.status,epochCanceled:BigInt(c.epoch_canceled),epochClaimed:BigInt(c.epoch_claimed)}}}};import{normalizeStructTag as fo,SUI_TYPE_ARG as Ac}from"@mysten/sui.js/utils";import{Duration as Er}from"luxon";var tn=class extends k{constructor(t,e){super(12,`Transaction failed: ${e}`,{context:{status:t,msg:e}})}};var Dc=1e3,en=class{constructor(t){this.globals=t;this.coinMetaHelper=new bo(t.suiClient),this.createStreamHelper=new Tt(t).createStreamHelper()}coinMetaHelper;createStreamHelper;getStreamIdsFromCreateStreamResponse(t){if(t.effects?.status.status!=="success")throw new tn(t.effects?.status.status,t.effects?.status.error);return t.objectChanges.filter(e=>e.type==="created"&&e.objectType.startsWith(`${this.globals.envConfig.contract.contractId}::stream::Stream`)).map(e=>e.objectId)}calculateCreateStreamFees(t){return this.createStreamHelper.calculateCreateStreamFees(t)}feeParams(){return this.createStreamHelper.feeParams()}calculateStreamAmount(t){if(t.steps===0n)throw new A("Invalid stream steps: 0");let e=t.cliff?t.cliff:{numerator:0n,denominator:100n},n=t.totalAmount*e.numerator/e.denominator,o=(t.totalAmount-n)/t.steps,i={realTotalAmount:o*t.steps+n,cliffAmount:n,amountPerStep:o};return this.validateStreamAmount(i,t.totalAmount),i}calculateTimelineByInterval(t){if(t.steps===0n)throw new A("Invalid stream steps: 0");let e=t.timeStart.plus(t.interval.toMillis()*Number(t.steps)),n={timeStart:t.timeStart,timeEnd:e,interval:t.interval,steps:t.steps};return this.validateTimeline(n),n}calculateTimelineByTotalDuration(t){if(t.steps===0n)throw new A("Invalid stream steps: 0");let e=BigInt(t.total.toMillis())/t.steps,n=t.timeStart.plus(Er.fromMillis(Number(e*t.steps))),o={timeStart:t.timeStart,timeEnd:n,interval:Er.fromMillis(Number(e)),steps:t.steps};return this.validateTimeline(o),o}async getBalance(t,e){let n=await this.globals.suiClient.getBalance({owner:t,coinType:e}),o=await this.getCoinMeta(e);return{...n,coinType:fo(n.coinType),coinMeta:o}}async getAllBalance(t){let e=await this.globals.suiClient.getAllBalances({owner:t}),n=await Promise.all(e.map(o=>this.getCoinMeta(o.coinType)));return e.map((o,r)=>({...o,coinType:fo(o.coinType),coinMeta:n[r]}))}async getCoinMeta(t){return this.coinMetaHelper.getCoinMeta(t)}async simulateTransactionBlock(t){return this.globals.suiClient.devInspectTransactionBlock({transactionBlock:t,sender:await this.globals.wallet.address()})}validateStreamAmount(t,e){if(t.amountPerStep===0n)throw new A("Stream amount too small","totalAmount",e);if(t.cliffAmount>t.realTotalAmount)throw new A("Invalid cliff settings")}validateTimeline(t){if(t.interval.toMillis()<Dc)throw new A("Interval shall be at least 1 second","interval",t.interval)}},bo=class{constructor(t){this.suiClient=t;this.coinMetaReg=new Map}coinMetaReg;async getCoinMeta(t){let e=fo(t||Ac);if(this.coinMetaReg.has(e))return this.coinMetaReg.get(e);let n=await this.queryCoinMeta(e);return n&&this.coinMetaReg.set(e,n),n}async queryCoinMeta(t){return await this.suiClient.getCoinMetadata({coinType:t})||void 0}};import{normalizeStructTag as Wr,normalizeSuiAddress as an}from"@mysten/sui.js/utils";import{DateTime as Lr}from"luxon";var vt=class extends k{constructor(t,e){super(9,`Invalid stream group: ${t}`,{context:e})}};var Oc=25;async function ho(a,t,e){let n=new $t(t),o=new qt(a,n,e);return await co(o)}var $t=class{constructor(t){this.ids=t;this.cursor=-1}cursor;async hasNext(){return this.cursor<this.ids.length-1}async next(){if(this.cursor+=1,this.cursor>=this.ids.length)throw new Error("invalid iterator implementation");return this.ids[this.cursor]}},qt=class extends kt{constructor(e,n,o){super(new go(e,n,o));this.suiClient=e;this.idIter=n;this.options=o}},go=class{constructor(t,e,n){this.suiClient=t;this.stringIter=e;this.options=n;this.filter=n?.filter,this.pageSize=n?.pageSize||Oc,this.objectOptions=n?.objectOptions||{showType:!0,showContent:!0}}filter;pageSize;objectOptions;async doNextRequest(){let t=[];for(;t.length<this.pageSize&&await this.stringIter.hasNext();){let r=await this.stringIter.next();r&&t.push(r)}let e=await this.suiClient.multiGetObjects({ids:t,options:this.objectOptions}),n;if(this.filter){let{filter:o}=this;n=e.filter(r=>o?.(r))}else n=e;return{data:n,hasNext:await this.stringIter.hasNext()}}};var nn=class a{constructor(t,e){this.globals=t;this.streams=e;if(e.length===0)throw new vt("stream size 0");let n=e.map(r=>r.groupId);if(new Set(n).size!==1)throw new A("Stream does not have same group ID")}type="StreamGroup";static async new(t,e){let n=await ho(t.suiClient,e);return n.forEach(o=>{if(!o)throw new O("stream group object data undefined")}),a.newFromObjectResponse(t,e,n)}static async newFromObjectResponse(t,e,n){let o=await a.parseGroupStreams(t,e,n);return new a(t,o)}static checkStreamGroup(t){let e=t.map(r=>r.groupCommonInfo),n=e[0],o=!0;return e.forEach(r=>{Pc(n,r)||(o=!1)}),o}async refresh(){let t=await ho(this.globals.suiClient,this.streams.map(e=>e.streamId));this.streams.forEach((e,n)=>{e.refreshWithData(t[n])})}get groupId(){return this.streams[0].groupId}get creator(){return this.streams[0].creator}get info(){return{groupId:this.groupId,streamIds:this.streams.map(t=>t.streamId),progress:this.progress,name:this.streams[0].name,creator:this.creator,coinType:this.streams[0].coinType,totalAmount:this.streams.reduce((t,e)=>t+e.totalAmount,0n),start:this.streams[0].timeStart,end:this.streams[0].timeEnd,cancelable:this.streams[0].cancelable,cliffAmount:this.streams.reduce((t,e)=>t+e.cliff,0n),duration:this.streams[0].duration,interval:this.streams[0].interval,steps:this.streams[0].totalSteps,nextReleaseAmount:this.streams.reduce((t,e)=>e.nextReleaseAmount===null?t:t+e.nextReleaseAmount,0n),nextReleaseDate:this.streams[0].nextReleaseDate}}get progress(){return{total:this.streams.reduce((t,e)=>t+e.totalAmount,0n),streamed:this.streams.reduce((t,e)=>t+e.streamedAmount,0n),claimed:this.streams.reduce((t,e)=>t+e.claimedAmount,0n),claimable:this.streams.reduce((t,e)=>t+e.claimable,0n),canceled:this.streams.reduce((t,e)=>t+e.canceledAmount,0n)}}async historyEvents(t){return this.globals.backend.getStreamHistory({groupId:this.groupId,pagination:t})}static async parseGroupStreams(t,e,n){let o=n.map((r,i)=>ot.fromObjectData(t,e[i],r)).filter(r=>!!r);if(new Set(o.map(r=>r.groupId)).size!==1)throw new vt("Not same group ID");if(!this.checkStreamGroup(o))throw new vt("Not same stream settings");return o}};function Pc(a,t){return a.name===t.name&&a.groupId===t.groupId&&a.creator===t.creator&&a.start.toMillis()===t.start.toMillis()&&a.interval.toMillis()===t.interval.toMillis()&&a.steps===t.steps&&a.cancelable===t.cancelable}var Qt=class a{constructor(t,e){this.it=t;this.pageSize=e}static async newIncoming(t){let e=await on.newIncoming(t);return new a(e,t.pageSize)}static async newOutgoing(t){let e=await on.newOutgoing(t);return new a(e,t.pageSize)}async hasNext(){return this.it.hasNext()}async next(){let t=[];for(;t.length<this.pageSize&&await this.it.hasNext();)t.push(await this.it.next());return t}},on=class a{constructor(t){this.requester=t}cachedNext;static async newIncoming(t){let e=await rn.newIncomingQuery(t);return new a(e)}static async newOutgoing(t){let e=await rn.newOutgoingQuery(t);return new a(e)}async hasNext(){return this.cachedNext===void 0&&(this.cachedNext=await this.requester.doNextRequest()),this.cachedNext!==null}async next(){if(this.cachedNext===void 0){let e=await this.requester.doNextRequest();if(e===null)throw new O("No more results");return e}let t=this.cachedNext;if(this.cachedNext=void 0,t===null)throw new O("No more results");return t}},rn=class a{constructor(t,e,n,o){this.globals=t;this.recipient=e;this.groupRefs=n;this.query=o;this.current=0;let r=new $t(n.flat().map(i=>i.streamId));this.objectIter=new qt(t.suiClient,r)}current=0;objectIter;static async newIncomingQuery(t){let e=Bc(t.query),n=await t.globals.walletAddress(),r=(await t.globals.backend.getIncomingStreams(n,e)).filter(s=>an(s.recipient)===an(n)),i=Ur(r);return new a(t.globals,n,i,t.query)}static async newOutgoingQuery(t){let e=Nc(t.query),n=await t.globals.walletAddress(),o=await t.globals.backend.getOutgoingStreams(n,e),r=Ur(o);return new a(t.globals,n,r,t.query)}async doNextRequest(){if(this.current>=this.groupRefs.length)return null;let t=this.groupRefs[this.current];if(t.length===1){let e=await jc(this.globals,t[0].streamId,this.objectIter);return this.current++,Fr(e,this.query)?e:this.doNextRequest()}if(t.length>1){let e=await Mc(this.globals,t.map(n=>n.streamId),this.objectIter);return this.current++,Rc(e,this.query)?e:this.doNextRequest()}throw new O("Stream group with no stream")}};function Ur(a){let t=new Map;return a.forEach(e=>{let n=t.get(e.groupId);n?(n.push(e),t.set(e.groupId,n)):t.set(e.groupId,[e])}),Array.from(t.values()).sort((e,n)=>Lr.fromISO(n[0].createDate).toMillis()-Lr.fromISO(e[0].createDate).toMillis())}function Fr(a,t){if(t===void 0)return!0;let e=_c(a,t.status);if(t&&"claimable"in t&&t.claimable!==void 0){let n=t.claimable?a.progress.claimable!==0n:a.progress.claimable===0n;return e&&n}return e}function _c(a,t){return t===void 0?!0:Array.isArray(t)?t.includes(a.progress.status):a.progress.status===t}function Rc(a,t){if(!t)return!0;let e=!1;return a.streams.forEach(n=>{Fr(n,t)&&(e=!0)}),e}async function jc(a,t,e){let n=await $r(e,t);return ot.fromObjectData(a,t,n)}async function Mc(a,t,e){let n=[];for(;n.length<t.length;){let o=await $r(e,t[n.length]);n.push(o)}return nn.newFromObjectResponse(a,t,n)}async function $r(a,t){if(!await a.hasNext())throw new O("object iterator has been consumed");let e=await a.next();if(!e||e.error||e.data===void 0||e.data===null)throw new O("object iterator undefined response",{cause:e?.error});if(e?.data?.objectId!==t)throw new O("stream id not aligned");return e}function Bc(a){return{status:yo(a?.status),coinType:qr(a?.coinType),sender:Qr(a?.sender)}}function Nc(a){return{status:yo(a?.status),coinType:qr(a?.coinType),recipient:Qr(a?.recipient)}}function yo(a){return a===void 0||a.length===0?"all":Array.isArray(a)?a.reduce((t,e)=>{let n=yo(e);return!t||t===n?n:"all"},void 0):Ec(a)}function Ec(a){switch(a){case"STREAMING":case"STREAMED":case"CANCELED":return"active";case"COMPLETED":case"SETTLED":return"inactive";default:throw new A("Unknown stream filtered status")}}function qr(a){if(a)return Array.isArray(a)?a.length!==0?a.map(t=>Wr(t)):void 0:Wr(a)}function Qr(a){if(a)return Array.isArray(a)?a.length!==0?a.map(t=>an(t)):void 0:an(a)}var So=class{constructor(t){this.msafe=t}get type(){return"msafe"}async address(){return this.msafe.address()}async requestCoins(t){return this.msafe.requestCoins(t)}},sn=class{constructor(t){this.account=t}async address(){return this.account.address}},wo=class{constructor(t,e){this.singleWallet=t;this.suiClient=e}get type(){return"single"}async address(){return this.singleWallet.address()}async requestCoins(t){return Promise.all(t.map(e=>this.requestCoin(e)))}async requestCoin(t){if(He(t.coinType,Wc))return{primaryCoin:Ke};if(t.amount<=0)throw new A("Invalid coin request","coinAmount",t.amount);let e=await Mr(this.suiClient,await this.address(),t.amount,t.coinType);if(e.length===0)throw new O("no coins available");return{primaryCoin:e[0].coinObjectId,mergedCoins:e.slice(1).map(n=>n.coinObjectId)}}},cn=class{globals;helper;constructor(t,e){this.globals=wt.new(t,e),this.helper=new en(this.globals)}connectSingleWallet(t){let e=new wo(t,this.globals.suiClient);this.globals.connectWallet(e)}connectMSafeAccount(t){let e=new So(t);this.globals.connectWallet(e)}async createStream(t){return this.builder().createStreams(t)}async getStream(t){return ot.new(this.globals,t)}async getIncomingStreams(t,e=10){return Qt.newIncoming({globals:this.globals,query:t,pageSize:e})}async getOutgoingStreams(t,e=10){return Qt.newOutgoing({globals:this.globals,query:t,pageSize:e})}async getCoinTypesForStreamFilter(){let t=await this.wallet.address();return(await this.globals.backend.getAllCoinTypes(t)).map(n=>Lc(n))}async getRecipientsForStreamFilter(t){let e=await this.wallet.address();return(await this.globals.backend.getAllRecipients(e,t)).map(o=>Vr(o))}async getCreatorsForStreamFilter(t){let e=await this.wallet.address();return(await this.globals.backend.getAllSenders(e,t)).map(o=>Vr(o))}get wallet(){return this.globals.wallet}builder(){return new Tt(this.globals)}};var q=class extends h{application="mpay";getClient(t,e){let n=new cn(t==="sui:mainnet"?"prod":"dev");return n.connectSingleWallet(new sn(e)),n}};var Vt=class extends q{constructor(e){super(e);this.data=e}txType=Fc.Stream;txSubType="Cancel";async build(e){let{network:n,account:o}=e;return(await this.getClient(n,o).getStream(this.data.streamId)).cancel()}};import{TransactionType as $c}from"@msafe/sui3-utils";var Ht=class extends q{constructor(e){super(e);this.data=e}txType=$c.Stream;txSubType="ClaimByProxy";async build(e){let{network:n,account:o}=e;return(await this.getClient(n,o).getStream(this.data.streamId)).claimByProxy()}};import{TransactionType as qc}from"@msafe/sui3-utils";var Kt=class extends q{constructor(e){super(e);this.data=e}txType=qc.Stream;txSubType="Claim";async build(e){let{network:n,account:o}=e;return(await this.getClient(n,o).getStream(this.data.streamId)).claim()}};import{TransactionType as Qc}from"@msafe/sui3-utils";var Gt=class extends q{constructor(e){super(e);this.data=e}txType=Qc.Stream;txSubType="CreateStream";async build(e){let{network:n,account:o}=e;return this.getClient(n,o).createStream(this.data)}};import{bcs as Hr}from"@mysten/sui.js/bcs";import{normalizeStructTag as Vc,normalizeSuiAddress as zt}from"@mysten/sui.js/utils";var xt=class a{constructor(t,e){this.moveCall=t;this.txb=e}decodeSharedObjectId(t){let e=this.getInputParam(t);return a.getSharedObjectId(e)}decodeOwnedObjectId(t){let e=this.getInputParam(t);return a.getOwnedObjectId(e)}decodeInputU64(t){let e=this.decodePureArg(t,"u64");return BigInt(e)}decodeInputAddress(t){let e=this.decodePureArg(t,"address");return zt(e)}decodeInputString(t){return this.decodePureArg(t,"string")}decodeInputBool(t){return this.decodePureArg(t,"bool")}decodePureArg(t,e){let n=this.getInputParam(t);return a.getPureInputValue(n,e)}getInputParam(t){let e=this.moveCall.arguments[t];if(e.kind!=="Input")throw new Error("not input type");return this.txb.blockData.inputs[e.index]}static getPureInputValue(t,e){if(t.type!=="pure")throw new Error("not pure argument");if(typeof t.value=="object"&&"Pure"in t.value){let n=t.value.Pure;return Hr.de(e,new Uint8Array(n))}return t.value}static getOwnedObjectId(t){if(t.type!=="object")throw new Error(`not object argument: ${JSON.stringify(t)}`);if(typeof t.value=="object"){if(!("Object"in t.value)||!("ImmOrOwned"in t.value.Object))throw new Error("not ImmOrOwned");return zt(t.value.Object.ImmOrOwned.objectId)}return zt(t.value)}static getSharedObjectId(t){if(t.type!=="object")throw new Error(`not object argument: ${JSON.stringify(t)}`);if(typeof t.value!="object")return zt(t.value);if(!("Object"in t.value)||!("Shared"in t.value.Object))throw new Error("not Shared");return zt(t.value.Object.Shared.objectId)}static getPureInput(t,e){if(t.type!=="pure")throw new Error("not pure argument");if(typeof t.value!="object")return t.value;if(!("Pure"in t.value))throw new Error("Pure not in value");let n=t.value.Pure;return Hr.de(e,new Uint8Array(n))}typeArg(t){return Vc(this.moveCall.typeArguments[t])}txArg(t){return this.moveCall.arguments[t]}};var ln=class{constructor(t,e){this.globals=t;this.txb=e}decode(){let t=this.decodeCreateStreamInfo(),e=this.createStreamHelper().calculateCreateStreamFees(t);return{type:"CreateStream",info:t,fees:e}}decodeCreateStreamInfo(){let e=this.createStreamTransactions().map(n=>this.getCreationInfoFromMoveCall(n));return this.aggregateGroupStreamInfo(e)}createStreamTransactions(){let t=this.transactions.filter(e=>e.kind==="MoveCall"&&at(e.target,this.contract.createStreamTarget));if(t.length===0)throw new O("No create stream transactions");return t.map(e=>new xt(e,this.txb))}getCreationInfoFromMoveCall(t){let e=t.decodeInputString(4),{name:n,groupId:o}=Lt(e),r=t.decodeInputAddress(5),i=t.decodeInputU64(6),s=t.decodeInputU64(7),c=t.decodeInputU64(8),l=t.decodeInputU64(9),d=t.decodeInputU64(10),u=t.decodeInputBool(11),p=t.typeArg(0);return{name:n,groupId:o,recipient:r,timeStart:i,cliff:s,epochInterval:c,totalEpoch:l,amountPerEpoch:d,cancelable:u,coinType:p}}aggregateGroupStreamInfo(t){if(new Set(t.map(o=>JSON.stringify({name:o.name,groupId:o.groupId,timeStart:String(o.timeStart),epochInterval:String(o.epochInterval),totalEpoch:String(o.totalEpoch),cancelable:o.cancelable,coinType:o.coinType}))).size!==1)throw new A("Stream group not have common info");let n=t.map(o=>({address:o.recipient,amountPerStep:o.amountPerEpoch,cliffAmount:o.cliff}));return{name:t[0].name,coinType:t[0].coinType,recipients:n,interval:t[0].epochInterval,steps:t[0].totalEpoch,startTimeMs:t[0].timeStart,cancelable:t[0].cancelable}}mergeCoinTransactions(){return this.transactions.filter(t=>t.kind==="MergeCoins")}get transactions(){return this.txb.blockData.transactions}get contract(){return new G(this.globals.envConfig.contract,this.globals)}get feeContract(){return new Ct(this.globals.envConfig.contract,this.globals)}createStreamHelper(){return new gt(this.globals,this.feeContract,this.contract)}getInputArg(t){if(t.kind!=="Input")throw new Error("not input type");return"value"in t?t:this.txb.blockData.inputs[t.index]}};var dn=class{constructor(t,e){this.globals=t;this.txb=e;this.contract=new G(t.envConfig.contract,t)}contract;decode(){if(this.isCreateStreamTransaction())return this.decodeCreateStreamTransaction();if(this.isClaimByProxyTransaction())return this.decodeClaimByProxyTransaction();if(this.isSetAutoClaimTransaction())return this.decodeSetAutoClaimTransaction();if(this.isCancelStreamTransaction())return this.decodeCancelStreamTransaction();if(this.isClaimStreamTransaction())return this.decodeClaimTransaction();throw new Error("Unknown stream transaction type")}get transactions(){return this.txb.blockData.transactions}isCreateStreamTransaction(){return this.transactions.findIndex(e=>e.kind==="MoveCall"&&at(e.target,this.contract.createStreamTarget))!==-1}isSetAutoClaimTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&&at(this.transactions[0].target,this.contract.setAutoClaimTarget)}isCancelStreamTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&&at(this.transactions[0].target,this.contract.cancelStreamTarget)}isClaimStreamTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&&at(this.transactions[0].target,this.contract.claimStreamTarget)}isClaimByProxyTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&&at(this.transactions[0].target,this.contract.claimStreamByProxyTarget)}decodeCreateStreamTransaction(){return new ln(this.globals,this.txb).decode()}decodeSetAutoClaimTransaction(){let t=this.helper.decodeSharedObjectId(0),e=this.helper.decodeInputBool(1);return{type:"SetAutoClaim",streamId:t,enabled:e}}decodeClaimTransaction(){let t=this.helper.decodeSharedObjectId(0);return{type:"Claim",streamId:t}}decodeClaimByProxyTransaction(){let t=this.helper.decodeSharedObjectId(0);return{type:"ClaimByProxy",streamId:t}}decodeCancelStreamTransaction(){let t=this.helper.decodeSharedObjectId(0);return{type:"Cancel",streamId:t}}get helper(){let t=this.transactions[0];return new xt(t,this.txb)}};import{TransactionType as Hc}from"@msafe/sui3-utils";var Jt=class extends q{constructor(e){super(e);this.data=e}txType=Hc.Stream;txSubType="SetAutoClaim";async build(e){let{network:n,account:o}=e;return(await this.getClient(n,o).getStream(this.data.streamId)).setAutoClaim(this.data.enabled)}};var un=class{application="mpay";supportSDK="@mysten/sui.js";async deserialize(t){let{network:e,transactionBlock:n}=t,o=wt.new(e==="sui:mainnet"?"prod":"dev"),i=new dn(o,n).decode(),s;switch(i.type){case"CreateStream":s=new Gt(i.info);break;case"SetAutoClaim":s=new Jt({streamId:i.streamId,enabled:i.enabled});break;case"Claim":s=new Kt({streamId:i.streamId});break;case"ClaimByProxy":s=new Ht({streamId:i.streamId});break;case"Cancel":s=new Vt({streamId:i.streamId});break;default:throw new Error(`Unknown transaction type: ${i}`)}return{txType:s.txType,txSubType:s.txSubType,intentionData:s.data}}async build(t){let{intentionData:e}=t,n;switch(t.txSubType){case"CreateStream":n=new Gt(e);break;case"Claim":n=new Kt(e);break;case"ClaimByProxy":n=new Ht(e);break;case"SetAutoClaim":n=new Jt(e);break;case"Cancel":n=new Vt(e);break;default:throw new Error("not implemented")}return n.build({...t})}};import{TransactionDefaultApplication as Xc,TransactionSubTypes as Io}from"@msafe/sui3-utils";import{buildCoinTransferTxb as Kc}from"@msafe/sui3-utils";var pn=class a extends h{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o}=e;return Kc(n,this.data,o.address)}static fromData(e){return new a(e)}};import{buildObjectTransferTxb as Gc}from"@msafe/sui3-utils";var mn=class a extends h{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o}=e;return Gc(n,this.data,o.address)}static fromData(e){return new a(e)}};import{isSameAddress as zc}from"@msafe/sui3-utils";import{TransactionBlock as Jc}from"@mysten/sui.js/transactions";var fn=class a extends h{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{account:n}=e,o=Jc.from(this.data.content);if(!zc(o.blockData.sender,n.address))throw new Error("Invalid sender address");return o}static fromData(e){return new a(e)}};var bn=class{application="msafe-core";supportSDK="@mysten/sui.js";constructor(){this.application=Xc}deserialize(){throw new Error("MSafe core transaction intention should be build from API")}async build(t){let{suiClient:e,account:n}=t,o;switch(t.txSubType){case Io.assets.coin.send:o=pn.fromData(t.intentionData);break;case Io.assets.object.send:o=mn.fromData(t.intentionData);break;case Io.others.plain:o=fn.fromData(t.intentionData);break;default:throw new Error("not implemented")}return o.build({suiClient:e,account:n})}};import{TransactionType as il}from"@msafe/sui3-utils";var Kr=!1,Xt={ProtocolPackage:"0xc6374c7da60746002bfee93014aeb607e023b2d6b25c9e55a152b826dbc8c1ce",StorageId:"0xbb4e2f4b6205c2e2a2db47aeb4f830796ec7c005f88537ee775986639bc442fe",Incentive:"0xaaf735bf83ff564e1b219a0d644de894ef5bdc4b2250b126b2a46dd002331821",IncentiveV2:"0xf87a8acb8b81d14307894d12595541a73f19933f88e1326d5be349c7a6f7559c",gasBudget:5e7,PriceOracle:"0x1568865ed9a0b5ec414220e8f79b3d04c77acc82358f6e5ae4635687392ffbef",ReserveParentId:"0xe6d4c6610b86ce7735ea754596d71d72d10c7980b5052fc3c8cdf8d09fea9b4b",pool:{sui:{name:"SUI",assetId:0,poolId:"0x96df0fce3c471489f4debaaa762cf960b3d97820bd1f3f025ff8190730e958c5",fondPoolId:"0xf975bc2d4cca10e3ace8887e20afd77b46c383b4465eac694c4688344955dea4",type:"0x2::sui::SUI",coinType:"sui",reserveObjectId:"0xab644b5fd11aa11e930d1c7bc903ef609a9feaf9ffe1b23532ad8441854fbfaf",borrowBalanceParentId:"0xe7ff0daa9d090727210abe6a8b6c0c5cd483f3692a10610386e4dc9c57871ba7",supplyBalanceParentId:"0x589c83af4b035a3bc64c40d9011397b539b97ea47edf7be8f33d643606bf96f8"},wusdc:{name:"wUSDC",assetId:1,coinType:"wusdc",poolId:"0xa02a98f9c88db51c6f5efaaf2261c81f34dd56d86073387e0ef1805ca22e39c8",type:"0x5d4b302506645c37ff133b98c4b50a5ae14841659738d6d733d59d0d217a93bf::coin::COIN",reserveObjectId:"0xeb3903f7748ace73429bd52a70fff278aac1725d3b58afa781f25ce3450ac203",borrowBalanceParentId:"0x8a3aaa817a811131c624658f6e77cba04ab5829293d2c49c1a9cce8ac9c8dec4",supplyBalanceParentId:"0x8d0a4467806458052d577c8cd2be6031e972f2b8f5f77fce98aa12cd85330da9"},usdt:{name:"USDT",coinType:"usdt",assetId:2,poolId:"0x0e060c3b5b8de00fb50511b7a45188c8e34b6995c01f69d98ea5a466fe10d103",type:"0xc060006111016b8a020ad5b33834984a437aaa7d3c74c18e09a95d48aceab08c::coin::COIN",reserveObjectId:"0xb8c5eab02a0202f638958cc79a69a2d30055565caad1684b3c8bbca3bddcb322",borrowBalanceParentId:"0xc14d8292a7d69ae31164bafab7ca8a5bfda11f998540fe976a674ed0673e448f",supplyBalanceParentId:"0x7e2a49ff9d2edd875f82b76a9b21e2a5a098e7130abfd510a203b6ea08ab9257"},weth:{name:"WETH",coinType:"weth",assetId:3,poolId:"0x71b9f6e822c48ce827bceadce82201d6a7559f7b0350ed1daa1dc2ba3ac41b56",type:"0xaf8cd5edc19c4512f4259f0bee101a40d41ebed738ade5874359610ef8eeced5::coin::COIN",reserveObjectId:"0xafecf4b57899d377cc8c9de75854c68925d9f512d0c47150ca52a0d3a442b735",borrowBalanceParentId:"0x7568d06a1b6ffc416a36c82791e3daf0e621cf19d4a2724fc6f74842661b6323",supplyBalanceParentId:"0xa668905b1ad445a3159b4d29b1181c4a62d864861b463dd9106cc0d97ffe8f7f"},cetus:{name:"CETUS",coinType:"cetus",assetId:4,poolId:"0x3c376f857ec4247b8ee456c1db19e9c74e0154d4876915e54221b5052d5b1e2e",type:"0x06864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b::cetus::CETUS",reserveObjectId:"0x66a807c06212537fe46aa6719a00e4fa1e85a932d0b53ce7c4b1041983645133",borrowBalanceParentId:"0x4c3da45ffff6432b4592a39cdb3ce12f4a28034cbcb804bb071facc81fdd923d",supplyBalanceParentId:"0x6adc72faf2a9a15a583c9fb04f457c6a5f0b456bc9b4832413a131dfd4faddae"},voloSui:{name:"VoloSui",coinType:"voloSui",assetId:5,poolId:"0x9790c2c272e15b6bf9b341eb531ef16bcc8ed2b20dfda25d060bf47f5dd88d01",fondPoolId:"0xe2b5ada45273676e0da8ae10f8fe079a7cec3d0f59187d3d20b1549c275b07ea",type:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55::cert::CERT",reserveObjectId:"0xd4fd7e094af9819b06ea3136c13a6ae8da184016b78cf19773ac26d2095793e2",borrowBalanceParentId:"0x8fa5eccbca2c4ba9aae3b87fd44aa75aa5f5b41ea2d9be4d5321379384974984",supplyBalanceParentId:"0xe6457d247b6661b1cac123351998f88f3e724ff6e9ea542127b5dcb3176b3841"},haSui:{name:"HaedalSui",coinType:"haSui",assetId:6,poolId:"0x6fd9cb6ebd76bc80340a9443d72ea0ae282ee20e2fd7544f6ffcd2c070d9557a",fondPoolId:"0xa20e18085ce04be8aa722fbe85423f1ad6b1ae3b1be81ffac00a30f1d6d6ab51",type:"0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d::hasui::HASUI",reserveObjectId:"0x0c9f7a6ca561dc566bd75744bcc71a6af1dc3caf7bd32c099cd640bb5f3bb0e3",borrowBalanceParentId:"0x01f36898e020be6c3423e5c95d9f348868813cd4d0be39b0c8df9d8de4722b00",supplyBalanceParentId:"0x278b8e3d09c3548c60c51ed2f8eed281876ea58c392f71b7ff650cc9286d095b"},navx:{name:"NAVX",coinType:"navx",assetId:7,poolId:"0xc0e02e7a245e855dd365422faf76f87d9f5b2148a26d48dda6e8253c3fe9fa60",fondPoolId:"0x9dae0cf104a193217904f88a48ce2cf0221e8cd9073878edd05101d6b771fa09",type:"0xa99b8952d4f7d947ea77fe0ecdcc9e5fc0bcab2841d6e2a5aa00c3044e5544b5::navx::NAVX",reserveObjectId:"0x2e13b2f1f714c0c5fa72264f147ef7632b48ec2501f810c07df3ccb59d6fdc81",borrowBalanceParentId:"0xa5bf13075aa400cbdd4690a617c5f008e1fae0511dcd4f7121f09817df6c8d8b",supplyBalanceParentId:"0x59dedca8dc44e8df50b190f8b5fe673098c1273ac6168c0a4addf3613afcdee5"},wbtc:{name:"WBTC",coinType:"wbtc",assetId:8,poolId:"0xd162cbe40f8829ce71c9b3d3bf3a83859689a79fa220b23d70dc0300b777ae6e",type:"0x027792d9fed7f9844eb4839566001bb6f6cb4804f66aa2da6fe1ee242d896881::coin::COIN",reserveObjectId:"0x8b4d81f004e4e9faf4540951a896b6d96e42598a270e6375f598b99742db767e",borrowBalanceParentId:"0x55e1f3c9e6e5cf9fff563bdd61db07a3826458c56ef72c455e049ab3b1b0e99c",supplyBalanceParentId:"0x821e505a0091b089edba94deaa14c2f2230d026bbaa7b85680554441aad447e0"},ausd:{name:"AUSD",coinType:"ausd",assetId:9,poolId:"0xc9208c1e75f990b2c814fa3a45f1bf0e85bb78404cfdb2ae6bb97de58bb30932",type:"0x2053d08c1e2bd02791056171aab0fd12bd7cd7efad2ab8f6b9c8902f14df2ff2::ausd::AUSD",reserveObjectId:"0x918889c6a9d9b93108531d4d59a4ebb9cc4d41689798ffc1d4aed6e1ae816ec0",borrowBalanceParentId:"0x551300b9441c9a3a16ca1d7972c1dbb4715e15004ccd5f001b2c2eee22fd92c1",supplyBalanceParentId:"0xe151af690355de8be1c0281fbd0d483c099ea51920a57c4bf8c9666fd36808fd"},nusdc:{name:"USDC",assetId:10,coinType:"nusdc",poolId:"0xa3582097b4c57630046c0c49a88bfc6b202a3ec0a9db5597c31765f7563755a8",type:"0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC",reserveObjectId:"0x4c8a2c72a22ae8da803a8519798d312c86e74a9e0d6ec0eec2bfcf7e4b3fef5e",borrowBalanceParentId:"0xb0b0c7470e96cabbb4f1e8d06bef2fbea65f4dbac52afae8635d9286b1ea9a09",supplyBalanceParentId:"0x08b5ce8574ac3bc9327e66ad5decd34d07ee798f724ad01058e8855ac9acb605"},eth:{name:"ETH",assetId:11,coinType:"eth",poolId:"0x78ba01c21d8301be15690d3c30dc9f111871e38cfb0b2dd4b70cc6052fba41bb",type:"0xd0e89b2af5e4910726fbcd8b8dd37bb79b29e5f83f7491bca830e94f7f226d29::eth::ETH",reserveObjectId:"0x376faea6dfbffab9ea808474cb751d91222b6d664f38c0f1d23de442a8edb1ce",borrowBalanceParentId:"0xf0c6ce5cfaee96073876a5fab7426043f3a798b79502c4caeb6d9772cd35af1f",supplyBalanceParentId:"0xc0a0cb43620eb8a84d5a4a50a85650e7fa7ba81e660f9cc2863404fd84591d4b"},usdy:{name:"USDY",assetId:12,coinType:"usdy",poolId:"0x4b6253a9f8cf7f5d31e6d04aed4046b9e325a1681d34e0eff11a8441525d4563",type:"0x960b531667636f39e85867775f52f6b1f220a058c4de786905bdf761e06a56bb::usdy::USDY",reserveObjectId:"",borrowBalanceParentId:"",supplyBalanceParentId:""}},borrowFee:.003,borrowFeeAddress:"0x70b9b10704263cf53392849e33b1f5fd16005869b4198ed5524836bad1234ea2"};async function Co(){if(!Kr)try{let a=await fetch("https://open-api.naviprotocol.io/api/msafe").then(r=>r.json()),{packageId:t,borrowFee:e,borrowFeeAddress:n,pool:o}=a;t&&(Xt.ProtocolPackage=t),e&&(Xt.borrowFee=e),n&&(Xt.borrowFeeAddress=n),o&&(Xt.pool=o),Kr=!0}catch(a){console.error(a.message)}}var g=Xt;import{TransactionType as At}from"@msafe/sui3-utils";import{bcs as Gr}from"@mysten/sui.js/bcs";import{normalizeStructTag as Zc,normalizeSuiAddress as Yt}from"@mysten/sui.js/utils";var gn=class{constructor(t){this.txb=t}decode(){if(console.log("txb",this.txb),this.isClaimRewardTransaction())return this.decodeClaimReward();if(this.isEntryBorrowTransaction())return this.decodeEntryBorrow();if(this.isEntryBorrowWithFeeTransaction())return this.decodeEntryBorrow();if(this.isEntryMultiDepositTransaction())return this.decodeEntryMultiDeposit();if(this.isEntryDepositTransaction())return this.decodeEntryDeposit();if(this.isEntryRepayTransaction())return this.decodeEntryRepay();if(this.isEntryWithdrawTransaction())return this.decodeEntryWithdraw();throw new Error("Unknown transaction type")}get transactions(){return this.txb.blockData.transactions}getMoveCallTransaction(t){return this.transactions.find(e=>e.kind==="MoveCall"&&e.target===t)}isClaimRewardTransaction(){return!!this.getMoveCallTransaction(`${g.ProtocolPackage}::incentive_v2::claim_reward`)}isEntryBorrowTransaction(){return!!this.getMoveCallTransaction(`${g.ProtocolPackage}::incentive_v2::entry_borrow`)}isEntryBorrowWithFeeTransaction(){return!!this.getMoveCallTransaction(`${g.ProtocolPackage}::incentive_v2::borrow`)}isEntryMultiDepositTransaction(){let t=`${g.ProtocolPackage}::incentive_v2::entry_deposit`,e=this.transactions.filter(o=>o.kind==="MoveCall"&&o.target===t);return this.transactions.find(o=>o.kind==="MoveCall"&&o.target===`${g.ProtocolPackage}::incentive_v2::claim_reward_non_entry`)?!1:e.length>1}isEntryDepositTransaction(){return!!this.getMoveCallTransaction(`${g.ProtocolPackage}::incentive_v2::entry_deposit`)}isEntryRepayTransaction(){return!!this.getMoveCallTransaction(`${g.ProtocolPackage}::incentive_v2::entry_repay`)}isEntryWithdrawTransaction(){return!!this.getMoveCallTransaction(`${g.ProtocolPackage}::incentive_v2::entry_withdraw`)}findPoolByAssetId(t){let e=Object.values(g.pool).find(n=>n.assetId===t);if(!e)throw new Error("Pool not found");return e}decodeClaimReward(){let t=[];return this.transactions.forEach(e=>{if(e.kind==="MoveCall"&&e.target===`${g.ProtocolPackage}::incentive_v2::claim_reward`){let n=new Zt(e,this.txb),o=n.decodeInputU8(4),r=n.decodeInputU8(5),i=n.decodeSharedObjectId(2),s=this.findPoolByAssetId(o),c=[...e.typeArguments];t.push({coinType:s.coinType,option:r,typeArguments:c,assetId:o,poolId:i})}}),console.log("decode claims",t),{txType:At.Other,type:"ClaimReward",intentionData:{claims:t}}}decodeEntryBorrow(){let t=this.helper.decodeInputU8(4),e=this.helper.decodeInputU64(5),n=this.findPoolByAssetId(t);return{txType:At.Other,type:"EntryBorrow",intentionData:{amount:e,coinType:n.coinType}}}decodeEntryMultiDeposit(){let t=[],e=`${g.ProtocolPackage}::incentive_v2::entry_deposit`;return this.transactions.forEach(n=>{if(n.kind==="MoveCall"&&n.target===e){let o=new Zt(n,this.txb),r=o.decodeInputU8(3),i=o.decodeInputU64(5),s=this.findPoolByAssetId(r);t.push({coinType:s.coinType,amount:i})}}),{txType:At.Other,type:"EntryMultiDeposit",intentionData:{list:t}}}decodeEntryDeposit(){let t=this.helper.decodeInputU8(3),e=this.helper.decodeInputU64(5),n=this.findPoolByAssetId(t);return{txType:At.Other,type:"EntryDeposit",intentionData:{amount:e,coinType:n.coinType}}}decodeEntryRepay(){let t=this.helper.decodeInputU8(4),e=this.helper.decodeInputU64(6),n=this.findPoolByAssetId(t);return{txType:At.Other,type:"EntryRepay",intentionData:{amount:e,coinType:n.coinType}}}decodeEntryWithdraw(){let t=this.helper.decodeInputU8(4),e=this.helper.decodeInputU64(5),n=this.findPoolByAssetId(t);return{txType:At.Other,type:"EntryWithdraw",intentionData:{amount:e,coinType:n.coinType}}}get helper(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(g.ProtocolPackage));return new Zt(t,this.txb)}},Zt=class a{constructor(t,e){this.moveCall=t;this.txb=e}decodeSharedObjectId(t){let e=this.getInputParam(t);return a.getSharedObjectId(e)}decodeOwnedObjectId(t){let e=this.getInputParam(t);return a.getOwnedObjectId(e)}decodeInputU64(t){let e=this.decodePureArg(t,"u64");return Number(e)}decodeInputU8(t){let e=this.decodePureArg(t,"u8");return Number(e)}decodeInputAddress(t){let e=this.decodePureArg(t,"address");return Yt(e)}decodeInputString(t){return this.decodePureArg(t,"string")}decodeInputBool(t){return this.decodePureArg(t,"bool")}decodePureArg(t,e){let n=this.getInputParam(t);return a.getPureInputValue(n,e)}getInputParam(t){let e=this.moveCall.arguments[t];if(e.kind!=="Input")throw new Error("not input type");return this.txb.blockData.inputs[e.index]}static getPureInputValue(t,e){if(t.type!=="pure")throw new Error("not pure argument");if(typeof t.value=="object"&&"Pure"in t.value){let n=t.value.Pure;return Gr.de(e,new Uint8Array(n))}return t.value}static getOwnedObjectId(t){if(t.type!=="object")throw new Error(`not object argument: ${JSON.stringify(t)}`);if(typeof t.value=="object"){if(!("Object"in t.value)||!("ImmOrOwned"in t.value.Object))throw new Error("not ImmOrOwned");return Yt(t.value.Object.ImmOrOwned.objectId)}return Yt(t.value)}static getSharedObjectId(t){if(t.type!=="object")throw new Error(`not object argument: ${JSON.stringify(t)}`);if(typeof t.value!="object")return Yt(t.value);if(!("Object"in t.value)||!("Shared"in t.value.Object))throw new Error("not Shared");return Yt(t.value.Object.Shared.objectId)}static getPureInput(t,e){if(t.type!=="pure")throw new Error("not pure argument");if(typeof t.value!="object")return t.value;if(!("Pure"in t.value))throw new Error("Pure not in value");let n=t.value.Pure;return Gr.de(e,new Uint8Array(n))}typeArg(t){return Zc(this.moveCall.typeArguments[t])}txArg(t){return this.moveCall.arguments[t]}};import{TransactionBlock as tl}from"@mysten/sui.js/transactions";function Dt(a,t,e,n){return a.moveCall({target:`${g.ProtocolPackage}::incentive_v2::entry_deposit`,arguments:[a.object("0x06"),a.object(g.StorageId),a.object(t.poolId),a.pure(t.assetId),e,a.pure(n),a.object(g.Incentive),a.object(g.IncentiveV2)],typeArguments:[t.type]}),a}function zr(a,t,e){return a.moveCall({target:`${g.ProtocolPackage}::incentive_v2::entry_withdraw`,arguments:[a.object("0x06"),a.object(g.PriceOracle),a.object(g.StorageId),a.object(t.poolId),a.pure(t.assetId),a.pure(e),a.object(g.Incentive),a.object(g.IncentiveV2)],typeArguments:[t.type]}),a}function Jr(a,t,e,n){let o=a.moveCall({target:`${g.ProtocolPackage}::incentive_v2::borrow`,arguments:[a.object("0x06"),a.object(g.PriceOracle),a.object(g.StorageId),a.object(t.poolId),a.pure(t.assetId),a.pure(e),a.object(g.IncentiveV2)],typeArguments:[t.type]}),[r]=a.moveCall({target:"0x02::coin::from_balance",typeArguments:[t.type],arguments:[o]});if(g.borrowFee>0){let[i]=a.splitCoins(r,[a.pure(Math.floor(e*g.borrowFee))]);a.transferObjects([r],a.pure(n)),a.transferObjects([i],a.pure(g.borrowFeeAddress))}else a.transferObjects([r],a.pure(n));return a}function To(a,t,e,n){return a.moveCall({target:`${g.ProtocolPackage}::incentive_v2::entry_repay`,arguments:[a.object("0x06"),a.object(g.PriceOracle),a.object(g.StorageId),a.object(t.poolId),a.pure(t.assetId),e,a.pure(n),a.object(g.IncentiveV2)],typeArguments:[t.type]}),a}function Xr(a,t,e,n,o){return a.moveCall({target:`${g.ProtocolPackage}::incentive_v2::claim_reward`,arguments:[a.object("0x06"),a.object(g.IncentiveV2),a.object(e),a.object(g.StorageId),a.pure(t),a.pure(n)],typeArguments:o}),a}var hn=class a extends h{constructor(e){super(e);this.data=e}txType;txSubType;async build(){let{claims:e}=this.data,n=new tl;return e.forEach(o=>{let{assetId:r,poolId:i,option:s,typeArguments:c}=o;Xr(n,r,i,s,c)}),n}static fromData(e){return new a(e)}};import{TransactionBlock as el}from"@mysten/sui.js/transactions";var yn=class a extends h{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{coinType:n,amount:o}=this.data,r=new el;console.log("build",this.data);let i=g.pool[n];if(!i)throw new Error(`${n} not support, please use ${Object.keys(g.pool).join(", ")}.`);return Jr(r,i,o,e.account.address)}static fromData(e){return new a(e)}};import{TransactionBlock as nl}from"@mysten/sui.js/transactions";async function Ot(a,t,e){let n=await a.getCoins({owner:t,coinType:e});return console.log("getTokenObjs",t,n),n}var Sn=class a extends h{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o}=e,{coinType:r,amount:i}=this.data,s=new nl;if(console.log("build",this.data),r==="sui"){let[u]=s.splitCoins(s.gas,[i]);return Dt(s,g.pool.sui,u,i)}let c=g.pool[r];if(!c)throw new Error(`${r} not support, please use ${Object.keys(g.pool).join(", ")}.`);let l=await Ot(n,o.address,c.type);if(!l.data[0])throw new Error(`Insufficient balance for ${c.name} Token`);let d=l.data[0].coinObjectId;if(l.data.length>=2){let u=1;for(;u<l.data.length;)s.mergeCoins(d,[l.data[u].coinObjectId]),u++}return Dt(s,c,s.object(d),i)}static fromData(e){return new a(e)}};import{TransactionBlock as al}from"@mysten/sui.js/transactions";var wn=class a extends h{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o}=e,{coinType:r,amount:i}=this.data,s=new al;if(console.log("build",this.data),r==="sui"){let[u]=s.splitCoins(s.gas,[i]);return To(s,g.pool.sui,u,i)}let c=g.pool[r];if(!c)throw new Error(`${r} not support, please use ${Object.keys(g.pool).join(", ")}.`);let l=await Ot(n,o.address,c.type);if(!l.data[0])throw new Error(`Insufficient balance for ${c.name} Token`);let d=l.data[0].coinObjectId;if(l.data.length>=2){let u=1;for(;u<l.data.length;)s.mergeCoins(d,[l.data[u].coinObjectId]),u++}return To(s,c,s.object(d),i)}static fromData(e){return new a(e)}};import{TransactionBlock as ol}from"@mysten/sui.js/transactions";var In=class a extends h{constructor(e){super(e);this.data=e}txType;txSubType;async build(){let{coinType:e,amount:n}=this.data,o=new ol;console.log("build",this.data);let r=g.pool[e];if(!r)throw new Error(`${e} not support, please use ${Object.keys(g.pool).join(", ")}.`);return zr(o,r,n)}static fromData(e){return new a(e)}};import{TransactionBlock as rl}from"@mysten/sui.js/transactions";var Cn=class a extends h{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o}=e,{list:r}=this.data,i=new rl;console.log("build",this.data);for(let s=0;s<r.length;s++){let{coinType:c,amount:l}=r[s];if(c==="sui"){let[m]=i.splitCoins(i.gas,[l]);Dt(i,g.pool.sui,m,l);continue}let d=g.pool[c];if(!d)throw new Error(`${c} not support, please use ${Object.keys(g.pool).join(", ")}.`);let u=await Ot(n,o.address,d.type);if(!u.data[0])throw new Error(`Insufficient balance for ${d.name} Token`);let p=u.data[0].coinObjectId;if(u.data.length>=2){let m=1;for(;m<u.data.length;)i.mergeCoins(p,[u.data[s].coinObjectId]),m++}Dt(i,d,i.object(p),l)}return i}static fromData(e){return new a(e)}};var Tn=class{application="navi";supportSDK="@mysten/sui.js";async deserialize(t){await Co();let{transactionBlock:e}=t,o=new gn(e).decode();return{txType:il.Other,txSubType:o.type,intentionData:o.intentionData}}async build(t){let{suiClient:e,account:n}=t,o;switch(await Co(),t.txSubType){case"EntryDeposit":o=Sn.fromData(t.intentionData);break;case"EntryBorrow":o=yn.fromData(t.intentionData);break;case"EntryRepay":o=wn.fromData(t.intentionData);break;case"EntryWithdraw":o=In.fromData(t.intentionData);break;case"EntryMultiDeposit":o=Cn.fromData(t.intentionData);break;case"ClaimReward":o=hn.fromData(t.intentionData);break;default:throw new Error("not implemented")}return o.build({suiClient:e,account:n})}};import{TransactionSubTypes as sl,TransactionType as Yr}from"@msafe/sui3-utils";import{fromHEX as cl,toHEX as ll}from"@mysten/bcs";import{Transaction as dl}from"@mysten/sui/transactions";import ul from"sort-keys-recursive";var Zr="msafe-plain-tx",ti=sl.others.plain,ko=class a{constructor(t){this.data=t}application=Zr;txType=Yr.Other;txSubType=ti;serialize(){return JSON.stringify(ul(this.data))}async build(t){return dl.from(cl(this.data.content))}static fromData(t){return new a(t)}},kn=class{application;supportSDK="@mysten/sui";constructor(){this.application=Zr}async deserialize(t){let{transaction:e}=t,n=await e.build({client:t.suiClient});return{txType:Yr.Other,txSubType:ti,intentionData:{content:ll(n)}}}async build(t){let{account:e}=t,o=await ko.fromData(t.intentionData).build({suiClient:t.suiClient,network:t.network,account:t.account}),i=await t.suiClient.devInspectTransactionBlock({transactionBlock:o,sender:e.address});if(!(i.effects.status.status==="success"))throw new Error(i.effects.status.error);return o}};import{SuiClient as ei}from"@mysten/sui/client";import{Transaction as pl}from"@mysten/sui/transactions";import{SuiClient as vo}from"@mysten/sui.js/client";import{TransactionBlock as ml}from"@mysten/sui.js/transactions";var vn=class a{apps;constructor(){this.apps=new Map}static fromHelpers(t){let e=new a;for(let n=0;n<t.length;n++){let o=t[n];switch(o.supportSDK){case"@mysten/sui.js":e.addLegacyHelper(o);break;case"@mysten/sui":e.addHelper(o);break;default:throw new Error(`${o.application}: ${o.supportSDK} SDK not supported`)}}return e}addLegacyHelper(t){this.apps.set(t.application,new Ao(t))}addHelper(t){this.apps.set(t.application,new xo(t))}getAppHelper(t){let e=this.apps.get(t);if(!e)throw new Error(`${t} not registered`);return e}},xo=class{constructor(t){this.helper=t}async deserialize(t){let e=new ei({url:t.clientUrl}),n=new vo({url:t.clientUrl}),o=await t.transactionBlock.build({client:n}),r=pl.from(o);return this.helper.deserialize({...t,suiClient:e,transaction:r})}async build(t){let e=new ei({url:t.clientUrl}),n=await this.helper.build({...t,suiClient:e});n.setSender(t.account.address);let o=await n.build({client:e});return ml.from(o)}},Ao=class{constructor(t){this.helper=t}async deserialize(t){let e=new vo({url:t.clientUrl});return this.helper.deserialize({...t,transactionBlock:t.transactionBlock,suiClient:e})}async build(t){let e=new vo({url:t.clientUrl});return this.helper.build({...t,suiClient:e})}};import{TransactionType as Fl}from"@msafe/sui3-utils";import{TransactionType as P}from"@msafe/sui3-utils";var rt=class{constructor(t,e){this.txb=t;this.scallop=e}scallop;get coreId(){return{protocolPkg:this.scallop.address.get("core.packages.protocol.id"),market:this.scallop.address.get("core.market"),version:this.scallop.address.get("core.version"),coinDecimalsRegistry:this.scallop.address.get("core.coinDecimalsRegistry"),xOracle:this.scallop.address.get("core.oracles.xOracle"),spoolPkg:this.scallop.address.get("spool.id"),borrowIncentivePkg:this.scallop.address.get("borrowIncentive.id"),veScaPkgId:this.scallop.address.get("vesca.id"),scoin:this.scallop.address.get("scoin.id"),referral:this.scallop.address.get("referral.id")}}get transactions(){return this.txb.blockData.transactions}get inputTransaction(){return this.txb.blockData.inputs}getMoveCallTransaction(t){return this.transactions.find(e=>e.kind==="MoveCall"&&e.target===t)}};var ni="https://sui.apis.scallop.io";var ai="66f8e7ed9bb9e07fdfb86bbb",xn="0xefe8b36d5b2e43728cc323298626b83177803521d195cfb11e15b910e892fddf";var it="0x7016aae72cfc67f2fadf55769c0a7dd54291a583b63051a5ed71081cce836ac6::sca::SCA",st="0xc63072e7f5f4983a2efaf5bdba1480d5e7d74d57948e1c7cc436f8e22cbeb410",z=["weth","wbtc","wusdc","wusdt","sui","wapt","wsol","cetus","afsui","hasui","vsui","sca","usdc"],An=["weth","wbtc","wusdc","wusdt","sui","wapt","wsol","cetus","afsui","hasui","vsui","sca","usdc"],ct=["sweth","ssui","swusdc","swusdt","scetus","safsui","shasui","svsui","susdc"],J=["ssui","swusdc","swusdt","safsui","shasui","svsui","sweth","ssca","scetus","swbtc","swsol","susdc"];var oi=["sui"],lt=["sui","wusdc","wusdt","afsui","hasui","vsui","weth","sca","wbtc","wsol","usdc"];var ri={weth:8,wbtc:8,wusdc:6,usdc:6,wusdt:6,sui:9,wapt:8,wsol:8,sca:9,cetus:9,afsui:9,hasui:9,vsui:9,sweth:8,swbtc:8,susdc:6,swusdt:6,swusdc:6,ssui:9,swapt:8,swsol:8,scetus:9,safsui:9,shasui:9,svsui:9,ssca:9};var Dn={sweth:"sui",ssui:"sui",swusdc:"sui",swusdt:"sui",scetus:"sui",safsui:"sui",shasui:"sui",svsui:"sui",susdc:"sui"},ii={sui:["sui","sca"],wusdc:["sui","sca"],wusdt:["sui","sca"],afsui:["sui","sca"],hasui:["sui","sca"],vsui:["sui","sca"],sca:["sui","sca"],weth:["sui","sca"],wbtc:["sui","sca"],wsol:["sui","sca"],usdc:["sui","sca"]},si={sui:"0x0000000000000000000000000000000000000000000000000000000000000002",weth:"0xaf8cd5edc19c4512f4259f0bee101a40d41ebed738ade5874359610ef8eeced5",wbtc:"0x027792d9fed7f9844eb4839566001bb6f6cb4804f66aa2da6fe1ee242d896881",wusdc:"0x5d4b302506645c37ff133b98c4b50a5ae14841659738d6d733d59d0d217a93bf",wusdt:"0xc060006111016b8a020ad5b33834984a437aaa7d3c74c18e09a95d48aceab08c",wapt:"0x3a5143bb1196e3bcdfab6203d1683ae29edd26294fc8bfeafe4aaa9d2704df37",wsol:"0xb7844e289a8410e50fb3ca48d69eb9cf29e27d223ef90353fe1bd8e27ff8f3f8",cetus:"0x06864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b",afsui:"0xf325ce1300e8dac124071d3152c5c5ee6174914f8bc2161e88329cf579246efc",hasui:"0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d",vsui:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55",sca:"0x7016aae72cfc67f2fadf55769c0a7dd54291a583b63051a5ed71081cce836ac6",usdc:"0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7"},U={weth:"0xaf8cd5edc19c4512f4259f0bee101a40d41ebed738ade5874359610ef8eeced5",wbtc:"0x027792d9fed7f9844eb4839566001bb6f6cb4804f66aa2da6fe1ee242d896881",wusdc:"0x5d4b302506645c37ff133b98c4b50a5ae14841659738d6d733d59d0d217a93bf",wusdt:"0xc060006111016b8a020ad5b33834984a437aaa7d3c74c18e09a95d48aceab08c",wapt:"0x3a5143bb1196e3bcdfab6203d1683ae29edd26294fc8bfeafe4aaa9d2704df37",wsol:"0xb7844e289a8410e50fb3ca48d69eb9cf29e27d223ef90353fe1bd8e27ff8f3f8"},Do={vsui:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55"},ci={ssui:"0xaafc4f740de0dd0dde642a31148fb94517087052f19afb0f7bed1dc41a50c77b::scallop_sui::SCALLOP_SUI",scetus:"0xea346ce428f91ab007210443efcea5f5cdbbb3aae7e9affc0ca93f9203c31f0c::scallop_cetus::SCALLOP_CETUS",ssca:"0x5ca17430c1d046fae9edeaa8fd76c7b4193a00d764a0ecfa9418d733ad27bc1e::scallop_sca::SCALLOP_SCA",swusdc:"0xad4d71551d31092230db1fd482008ea42867dbf27b286e9c70a79d2a6191d58d::scallop_wormhole_usdc::SCALLOP_WORMHOLE_USDC",swusdt:"0xe6e5a012ec20a49a3d1d57bd2b67140b96cd4d3400b9d79e541f7bdbab661f95::scallop_wormhole_usdt::SCALLOP_WORMHOLE_USDT",sweth:"0x67540ceb850d418679e69f1fb6b2093d6df78a2a699ffc733f7646096d552e9b::scallop_wormhole_eth::SCALLOP_WORMHOLE_ETH",safsui:"0x00671b1fa2a124f5be8bdae8b91ee711462c5d9e31bda232e70fd9607b523c88::scallop_af_sui::SCALLOP_AF_SUI",shasui:"0x9a2376943f7d22f88087c259c5889925f332ca4347e669dc37d54c2bf651af3c::scallop_ha_sui::SCALLOP_HA_SUI",svsui:"0xe1a1cc6bcf0001a015eab84bcc6713393ce20535f55b8b6f35c142e057a25fbe::scallop_v_sui::SCALLOP_V_SUI",swbtc:"0x2cf76a9cf5d3337961d1154283234f94da2dcff18544dfe5cbdef65f319591b5::scallop_wormhole_btc::SCALLOP_WORMHOLE_BTC",swsol:"0x1392650f2eca9e3f6ffae3ff89e42a3590d7102b80e2b430f674730bc30d3259::scallop_wormhole_sol::SCALLOP_WORMHOLE_SOL",susdc:"0x854950aa624b1df59fe64e630b2ba7c550642e9342267a33061d59fb31582da5::scallop_usdc::SCALLOP_USDC"};import{bcs as li}from"@mysten/sui.js/bcs";import{normalizeStructTag as fl,normalizeSuiAddress as te}from"@mysten/sui.js/utils";var w=class a{constructor(t,e){this.moveCall=t;this.txb=e}decodeSharedObjectId(t){let e=this.getInputParam(t);return a.getSharedObjectId(e)}decodeOwnedObjectId(t){let e=this.getInputParam(t);return a.getOwnedObjectId(e)}decodeInputU64(t){let e=this.decodePureArg(t,"u64");return Number(e)}decodeInputU8(t){let e=this.decodePureArg(t,"u8");return Number(e)}decodeInputAddress(t){let e=this.decodePureArg(t,"address");return te(e)}decodeInputString(t){return this.decodePureArg(t,"string")}decodeInputBool(t){return this.decodePureArg(t,"bool")}decodePureArg(t,e){let n=this.getInputParam(t);return a.getPureInputValue(n,e)}getInputParam(t){let e=this.moveCall.arguments[t];if(e.kind!=="Input")throw new Error("not input type");return this.txb.blockData.inputs[e.index]}getNestedInputParam(t){let e=this.moveCall.arguments[t];if(e.kind!=="NestedResult")throw new Error("not input type");return this.txb.blockData.transactions[e.index]}isHaveNestedInput(t){return this.moveCall.arguments[t].kind==="NestedResult"}static getPureInputValue(t,e){if(t.type!=="pure")throw new Error("not pure argument");if(typeof t.value=="object"&&"Pure"in t.value){let n=t.value.Pure;return li.de(e,new Uint8Array(n))}return t.value}static getOwnedObjectId(t){if(t.type!=="object")throw new Error(`not object argument: ${JSON.stringify(t)}`);if(typeof t.value=="object"){if(!("Object"in t.value)||!("ImmOrOwned"in t.value.Object))throw new Error("not ImmOrOwned");return te(t.value.Object.ImmOrOwned.objectId)}return te(t.value)}static getSharedObjectId(t){if(t.type!=="object")throw new Error(`not object argument: ${JSON.stringify(t)}`);if(typeof t.value!="object")return te(t.value);if(!("Object"in t.value)||!("Shared"in t.value.Object))throw new Error("not Shared");return te(t.value.Object.Shared.objectId)}static getPureInput(t,e){if(t.type!=="pure")throw new Error("not pure argument");if(typeof t.value!="object")return t.value;if(!("Pure"in t.value))throw new Error("Pure not in value");let n=t.value.Pure;return li.de(e,new Uint8Array(n))}typeArg(t){return fl(this.moveCall.typeArguments[t])}txArg(t){return this.moveCall.arguments[t]}};import{bcs as bl}from"@mysten/sui.js/bcs";var _=class{constructor(t,e){this.splitCoin=t;this.txb=e}getAmountInput(){return this.splitCoin.amounts.map(t=>{if(t.kind==="Input")return Number(w.getPureInputValue(t,"u64"))}).filter(t=>t!==void 0)}static getPureInputValue(t,e){if(t.type!=="pure")throw new Error("not pure argument");if(typeof t.value=="object"&&"Pure"in t.value){let n=t.value.Pure;return bl.de(e,new Uint8Array(n))}return t.value}};var On=class extends rt{decode(){if(this.isMoveAsset())return this.decodeMoveAsset();if(this.isSupplyWithStakeSpoolTransaction())return this.decodeSupplyWithStakeSpool();if(this.isUnstakeAndWithdrawTransaction())return this.decodeUnstakeAndWithdraw();if(this.isStakeSpoolTransaction())return this.decodeStakeSpool();if(this.isDepositCollateralTransaction())return this.decodeDepositCollateral();if(this.isWithdrawCollateralTransaction())return this.decodeWithdrawCollateral();if(this.isWithdrawLendingScoinTransaction())return this.decodeWithdrawLendingScoin();if(this.isWithdrawLendingTransaction())return this.decodeWithdrawLending();if(this.isSupplyLendingTransaction())return this.decodeSupplyLending();if(this.isBorrowWithReferralTransaction())return this.decodeBorrowWithReferral();if(this.isBorrowWithBoostTransaction())return this.decodeBorrowWithBoost();if(this.isBorrowTransaction())return this.decodeBorrow();if(this.isRepayWithBoostTransaction())return this.decodeRepayWithBoost();if(this.isRepayTransaction())return this.decodeRepay();if(this.isUnstakeSpoolTransaction())return this.decodeUnstakeSpool();if(this.isClaimRewardTransaction())return this.decodeClaimReward();if(this.isOpenObligationTransaction())return this.decodeOpenObligation();if(this.isMigrateAndClaim())return this.decodeMigrateAndClaim();if(this.isMigrateScoinTransaction())return this.decodeMigrateScoin()}isMoveAsset(){return!!this.getMoveCallTransaction("0x5857d185897aaff40ae37b2eecc895efc1a9dff1b210c4fb894eabbce4ac2603::slippage_check::check_slippage")}isMigrateScoinTransaction(){return!!this.getMoveCallTransaction(`${this.coreId.scoin}::s_coin_converter::mint_s_coin`)}isSupplyLendingTransaction(){return!!this.getMoveCallTransaction(`${this.coreId.protocolPkg}::mint::mint`)}isSupplyWithStakeSpoolTransaction(){let t=this.getMoveCallTransaction(`${this.coreId.protocolPkg}::mint::mint`),e=this.getMoveCallTransaction(`${this.coreId.spoolPkg}::user::stake`);return!!t&&!!e}isUnstakeAndWithdrawTransaction(){let t=this.getMoveCallTransaction(`${this.coreId.spoolPkg}::user::unstake`),e=this.getMoveCallTransaction(`${this.coreId.protocolPkg}::redeem::redeem`);return!!t&&!!e}isStakeSpoolTransaction(){return!!this.getMoveCallTransaction(`${this.coreId.spoolPkg}::user::stake`)}isWithdrawLendingTransaction(){return!!this.getMoveCallTransaction(`${this.coreId.protocolPkg}::redeem::redeem`)}isWithdrawLendingScoinTransaction(){let t=!!this.getMoveCallTransaction(`${this.coreId.protocolPkg}::redeem::redeem`),e=!!this.getMoveCallTransaction(`${this.coreId.scoin}::s_coin_converter::burn_s_coin`);return!!t&&!!e}isDepositCollateralTransaction(){return!!this.getMoveCallTransaction(`${this.coreId.protocolPkg}::deposit_collateral::deposit_collateral`)}isWithdrawCollateralTransaction(){return!!this.getMoveCallTransaction(`${this.coreId.protocolPkg}::withdraw_collateral::withdraw_collateral`)}isBorrowTransaction(){return!!this.getMoveCallTransaction(`${this.coreId.protocolPkg}::borrow::borrow`)}isBorrowWithBoostTransaction(){let t=this.getMoveCallTransaction(`${this.coreId.protocolPkg}::borrow::borrow`),e=this.getMoveCallTransaction(`${this.coreId.borrowIncentivePkg}::user::stake_with_ve_sca`);return!!t&&!!e}isBorrowWithReferralTransaction(){return!!this.getMoveCallTransaction(`${this.coreId.protocolPkg}::borrow::borrow_with_referral`)}isRepayTransaction(){return!!this.getMoveCallTransaction(`${this.coreId.protocolPkg}::repay::repay`)}isRepayWithBoostTransaction(){let t=!!this.getMoveCallTransaction(`${this.coreId.protocolPkg}::repay::repay`),e=this.getMoveCallTransaction(`${this.coreId.borrowIncentivePkg}::user::stake_with_ve_sca`);return!!t&&!!e}isUnstakeSpoolTransaction(){return!!this.getMoveCallTransaction(`${this.coreId.spoolPkg}::user::unstake`)}isCreateStakeAccountTransaction(){return!!this.getMoveCallTransaction(`${this.coreId.spoolPkg}::user::new_spool_account`)}isClaimRewardTransaction(){let t=this.getMoveCallTransaction(`${this.coreId.spoolPkg}::user::redeem_rewards`),e=this.getMoveCallTransaction(`${this.coreId.borrowIncentivePkg}::user::redeem_rewards`);return!!t||!!e}isOpenObligationTransaction(){return!!this.getMoveCallTransaction(`${this.coreId.protocolPkg}::open_obligation::open_obligation`)}isMigrateAndClaim(){let t=this.getMoveCallTransaction(`${st}::user::redeem_rewards`),e=this.getMoveCallTransaction(`${this.coreId.borrowIncentivePkg}::user::stake_with_ve_sca`),n=this.getMoveCallTransaction(`${this.coreId.borrowIncentivePkg}::user::stake`);return!!t&&(!!e||!!n)}get helperClaimLendingReward(){return this.transactions.filter(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.spoolPkg}::user::redeem_rewards`)).map(e=>new w(e,this.txb))}get helperClaimBorrowV2Reward(){return this.transactions.filter(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.borrowIncentivePkg}::user::redeem_rewards`)).map(e=>new w(e,this.txb))}get helperStakeObligationWithVeSca(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.borrowIncentivePkg}::user::stake_with_ve_sca`));return new w(t,this.txb)}get helperClaimBorrowReward(){return this.transactions.filter(e=>e.kind==="MoveCall"&&e.target.startsWith(`${st}::user::redeem_rewards`)).map(e=>new w(e,this.txb))}get helperMint(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.protocolPkg}::mint::mint`));return new w(t,this.txb)}get helperUnstakes(){return this.transactions.filter(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.spoolPkg}::user::unstake`)).map(e=>new w(e,this.txb))}get helperRedeems(){return this.transactions.filter(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.protocolPkg}::redeem::redeem`)).map(e=>new w(e,this.txb))}get helperRedeem(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.protocolPkg}::redeem::redeem`));return new w(t,this.txb)}get helperBurnScoin(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.scoin}::s_coin_converter::burn_s_coin`));return new w(t,this.txb)}get helperSlippage(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith("0x5857d185897aaff40ae37b2eecc895efc1a9dff1b210c4fb894eabbce4ac2603::slippage_check::check_slippage"));return new w(t,this.txb)}get helperStake(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.spoolPkg}::user::stake`));return new w(t,this.txb)}get helperUnstake(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.spoolPkg}::user::unstake`));return new w(t,this.txb)}get helperDepositCollateral(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.protocolPkg}::deposit_collateral::deposit_collateral`));return new w(t,this.txb)}get helperWithdrawCollateral(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.protocolPkg}::withdraw_collateral::withdraw_collateral`));return new w(t,this.txb)}get helperBorrow(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.protocolPkg}::borrow::borrow`));return new w(t,this.txb)}get helperBorrowWithReferral(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.protocolPkg}::borrow::borrow_with_referral`));return new w(t,this.txb)}get helperRepay(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.protocolPkg}::repay::repay`));return new w(t,this.txb)}decodeMigrateScoin(){return{txType:P.Other,type:"MigrateScoin",intentionData:{}}}decodeMigrateAndClaim(){let t;this.helperStakeObligationWithVeSca.moveCall&&(t=this.helperStakeObligationWithVeSca.decodeOwnedObjectId(9));let e=this.helperClaimBorrowReward[0].decodeOwnedObjectId(2),n=this.helperClaimBorrowReward[0].decodeSharedObjectId(3),o=this.scallop.utils.parseCoinNameFromType(this.helperClaimBorrowReward[0].typeArg(0));return{txType:P.Other,type:"MigrateAndClaim",intentionData:{obligationKey:e,obligationId:n,rewardCoinName:o,veScaKey:t}}}decodeOpenObligation(){return{txType:P.Other,type:"OpenObligation",intentionData:{}}}decodeSupplyLending(){let t=this.scallop.utils.parseCoinNameFromType(this.helperMint.typeArg(0)),e=this.helperMint.getNestedInputParam(2),n=new _(e,this.txb).getAmountInput().reduce((o,r)=>o+r,0);return{txType:P.Other,type:"SupplyLending",intentionData:{amount:n,coinName:t}}}decodeWithdrawLending(){let t=this.scallop.utils.parseCoinNameFromType(this.helperRedeem.typeArg(0)),e=this.helperRedeem.getNestedInputParam(2),n=new _(e,this.txb).getAmountInput().reduce((o,r)=>o+r,0);return{txType:P.Other,type:"WithdrawLending",intentionData:{amount:n,coinName:t}}}decodeWithdrawLendingScoin(){let t=this.scallop.utils.parseCoinNameFromType(this.helperRedeem.typeArg(0)),e=this.helperBurnScoin.getNestedInputParam(1),n=new _(e,this.txb).getAmountInput().reduce((o,r)=>o+r,0);return{txType:P.Other,type:"WithdrawLending",intentionData:{amount:n,coinName:t}}}decodeDepositCollateral(){let t=this.scallop.utils.parseCoinNameFromType(this.helperDepositCollateral.typeArg(0)),e=this.helperDepositCollateral.getNestedInputParam(3),n=new _(e,this.txb).getAmountInput().reduce((r,i)=>r+i,0),o=this.helperDepositCollateral.decodeSharedObjectId(1);return{txType:P.Other,type:"DepositCollateral",intentionData:{amount:n,obligationId:o,collateralCoinName:t}}}decodeWithdrawCollateral(){let t=this.scallop.utils.parseCoinNameFromType(this.helperWithdrawCollateral.typeArg(0)),e=this.helperWithdrawCollateral.decodeInputU64(5),n=this.helperWithdrawCollateral.decodeSharedObjectId(1),o=this.helperWithdrawCollateral.decodeOwnedObjectId(2);return{txType:P.Other,type:"WithdrawCollateral",intentionData:{amount:e,collateralCoinName:t,obligationKey:o,obligationId:n}}}decodeBorrow(){let t=this.scallop.utils.parseCoinNameFromType(this.helperBorrow.typeArg(0)),e=this.helperBorrow.decodeInputU64(5),n=this.helperBorrow.decodeSharedObjectId(1),o=this.helperBorrow.decodeOwnedObjectId(2);return{txType:P.Other,type:"Borrow",intentionData:{amount:e,coinName:t,obligationKey:o,obligationId:n}}}decodeBorrowWithBoost(){let t=this.scallop.utils.parseCoinNameFromType(this.helperBorrow.typeArg(0)),e=this.helperStakeObligationWithVeSca.decodeOwnedObjectId(9),n=this.helperBorrow.decodeInputU64(5),o=this.helperBorrow.decodeSharedObjectId(1),r=this.helperBorrow.decodeOwnedObjectId(2);return{txType:P.Other,type:"BorrowWithBoost",intentionData:{amount:n,coinName:t,obligationKey:r,obligationId:o,veScaKey:e}}}decodeBorrowWithReferral(){let t=this.scallop.utils.parseCoinNameFromType(this.helperBorrowWithReferral.typeArg(0)),e;this.helperStakeObligationWithVeSca.moveCall&&(e=this.helperStakeObligationWithVeSca.decodeOwnedObjectId(9));let n=this.helperBorrowWithReferral.decodeInputU64(6),o=this.helperBorrowWithReferral.decodeSharedObjectId(1),r=this.helperBorrowWithReferral.decodeOwnedObjectId(2);return{txType:P.Other,type:"BorrowWithReferral",intentionData:{amount:n,coinName:t,obligationKey:r,obligationId:o,veScaKey:e}}}decodeRepay(){let t=this.scallop.utils.parseCoinNameFromType(this.helperRepay.typeArg(0)),e=this.helperRepay.getNestedInputParam(3),n=new _(e,this.txb).getAmountInput().reduce((r,i)=>r+i,0),o=this.helperRepay.decodeSharedObjectId(1);return{txType:P.Other,type:"Repay",intentionData:{amount:n,obligationId:o,coinName:t}}}decodeRepayWithBoost(){let t=this.scallop.utils.parseCoinNameFromType(this.helperRepay.typeArg(0)),e=this.helperStakeObligationWithVeSca.decodeOwnedObjectId(9),n=this.helperRepay.getNestedInputParam(3),o=new _(n,this.txb).getAmountInput().reduce((i,s)=>i+s,0),r=this.helperRepay.decodeSharedObjectId(1);return{txType:P.Other,type:"RepayWithBoost",intentionData:{amount:o,obligationId:r,coinName:t,veScaKey:e}}}decodeStakeSpool(){let t;this.isCreateStakeAccountTransaction()||(t=this.helperStake.decodeOwnedObjectId(1));let e=0;if(this.helperBurnScoin.moveCall){let r=this.helperBurnScoin.getNestedInputParam(1);e=new _(r,this.txb).getAmountInput().reduce((i,s)=>i+s,0)}if(this.helperStake.moveCall&&e===0){let r=this.helperStake.getNestedInputParam(2);e=new _(r,this.txb).getAmountInput().reduce((i,s)=>i+s,0)}let n=this.helperStake.typeArg(0),o=this.scallop.utils.parseCoinNameFromType(n);return{txType:P.Other,type:"StakeSpool",intentionData:{amount:e,marketCoinName:o,stakeAccountId:t}}}decodeUnstakeSpool(){let t=this.helperUnstake.decodeOwnedObjectId(1),e=this.helperUnstake.decodeInputU64(2),n=this.helperUnstake.typeArg(0),o=this.scallop.utils.parseCoinNameFromType(n);return{txType:P.Other,type:"UnstakeSpool",intentionData:{amount:e,marketCoinName:o,stakeAccountId:t}}}decodeSupplyWithStakeSpool(){let t=this.scallop.utils.parseCoinNameFromType(this.helperMint.typeArg(0)),e=this.helperMint.getNestedInputParam(2),n=new _(e,this.txb).getAmountInput().reduce((r,i)=>r+i,0),o;return this.isCreateStakeAccountTransaction()||(o=this.helperStake.decodeOwnedObjectId(1)),{txType:P.Other,type:"SupplyAndStakeLending",intentionData:{amount:n,coinName:t,stakeAccountId:o}}}decodeUnstakeAndWithdraw(){let t=[];this.helperUnstakes.forEach(o=>{let r=o.decodeOwnedObjectId(1),i=o.decodeInputU64(2);t.push({id:r,coin:i})});let e=this.scallop.utils.parseCoinNameFromType(this.helperRedeems[0].typeArg(0)),n=0;if(this.helperBurnScoin.moveCall){let o=this.helperBurnScoin.getNestedInputParam(1);n=new _(o,this.txb).getAmountInput().reduce((r,i)=>r+i,0)}return{txType:P.Other,type:"WithdrawAndUnstakeLending",intentionData:{amount:n,coinName:e,stakeAccountId:t}}}decodeMoveAsset(){let t=[];this.helperUnstakes.forEach(i=>{let s=i.decodeOwnedObjectId(1),c=i.decodeInputU64(2);t.push({id:s,coin:c})});let e=this.scallop.utils.parseCoinNameFromType(this.helperRedeems[0].typeArg(0)),n=0;if(this.helperBurnScoin.moveCall){let i=this.helperBurnScoin.getNestedInputParam(1);n=new _(i,this.txb).getAmountInput().reduce((s,c)=>s+c,0)}let o=this.helperSlippage.decodePureArg(1,"u64"),r=this.helperSlippage.decodePureArg(2,"string");return{txType:P.Other,type:"MigrateWusdcToUsdc",intentionData:{amount:n,coinName:e,slippage:o,validSwapAmount:r,stakeAccountId:t}}}decodeClaimReward(){let t=[],e=[],n=[];return this.helperClaimLendingReward.forEach(o=>{let r=o.decodeOwnedObjectId(2),i=o.typeArg(0),s=this.scallop.utils.parseCoinNameFromType(i);t.push({stakeMarketCoinName:s,stakeAccountId:r})}),this.helperClaimBorrowV2Reward.forEach(o=>{let r=o.decodeSharedObjectId(3),i=o.decodeOwnedObjectId(4),s=this.scallop.utils.parseCoinNameFromType(o.typeArg(0));e.push({obligationId:i,obligationKey:r,rewardCoinName:s})}),this.helperClaimBorrowReward.forEach(o=>{let r=o.decodeSharedObjectId(2),i=o.decodeOwnedObjectId(3),s=this.scallop.utils.parseCoinNameFromType(o.typeArg(0));n.push({obligationId:i,obligationKey:r,rewardCoinName:s})}),{txType:P.Other,type:"ClaimIncentiveReward",intentionData:{lendingIncentive:t,borrowIncentiveV2:e,borrowIncentive:n}}}};import{TransactionType as Po}from"@msafe/sui3-utils";var Pn=class extends rt{decode(){if(this.isCreateReferralLink())return this.decodeCreateReferralLink();if(this.isClaimRevenueReferral())return this.decodeClaimRevenueReferral();if(this.isBindReferral())return this.decodeBindReferral()}isClaimRevenueReferral(){return!!this.getMoveCallTransaction(`${this.coreId.referral}::referral_revenue_pool::claim_revenue_with_ve_sca_key`)}isCreateReferralLink(){return!!this.getMoveCallTransaction(`${this.coreId.veScaPkgId}::ve_sca::mint_ve_sca_placeholder_key`)}isBindReferral(){return!!this.getMoveCallTransaction(`${this.coreId.referral}::referral_bindings::bind_ve_sca_referrer`)}get helperClaimRevenueReferral(){return this.transactions.filter(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.referral}::referral_revenue_pool::claim_revenue_with_ve_sca_key`)).map(e=>new w(e,this.txb))}get helperBindReferral(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.referral}::referral_bindings::bind_ve_sca_referrer`));return new w(t,this.txb)}decodeCreateReferralLink(){return{txType:Po.Other,type:"CreateReferralLink",intentionData:{}}}decodeClaimRevenueReferral(){let t=this.helperClaimRevenueReferral[0].decodeOwnedObjectId(2),e=this.helperClaimRevenueReferral.map(n=>n.typeArg(0));return{txType:Po.Other,type:"ClaimRevenueReferral",intentionData:{veScaKey:t,coins:e}}}decodeBindReferral(){let t=this.helperBindReferral.decodePureArg(1,"address");return{txType:Po.Other,type:"BindReferral",intentionData:{veScaKey:t}}}};import{TransactionType as ee}from"@msafe/sui3-utils";var _n=class extends rt{decode(){if(this.isExtendPeriodAndStakeMoreSca())return this.decodePeriodAndStakeMoreSca();if(this.isStakeScaFirsTime()||this.isStakeMoreSca())return this.decodeStakeSca();if(this.isRenewExpiredVeSca())return this.decodeRenewExpiredVeSca();if(this.isExtendPeriod())return this.decodeExtendStakePeriod();if(this.isRedeemSca())return this.decodeRedeemSca()}isStakeScaFirsTime(){return!!this.getMoveCallTransaction(`${this.coreId.veScaPkgId}::ve_sca::mint_ve_sca_key`)}isExtendPeriodAndStakeMoreSca(){let t=this.getMoveCallTransaction(`${this.coreId.veScaPkgId}::ve_sca::extend_lock_period`),e=this.getMoveCallTransaction(`${this.coreId.veScaPkgId}::ve_sca::lock_more_sca`);return!!t&&!!e}isRedeemSca(){return!!this.getMoveCallTransaction(`${this.coreId.veScaPkgId}::ve_sca::redeem`)}isStakeMoreSca(){return!!this.getMoveCallTransaction(`${this.coreId.veScaPkgId}::ve_sca::lock_more_sca`)}isExtendPeriod(){return!!this.getMoveCallTransaction(`${this.coreId.veScaPkgId}::ve_sca::extend_lock_period`)}isRenewExpiredVeSca(){return!!this.getMoveCallTransaction(`${this.coreId.veScaPkgId}::ve_sca::renew_expired_ve_sca`)}get helperStakeMoreSca(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.veScaPkgId}::ve_sca::lock_more_sca`));return new w(t,this.txb)}get helperStakeSca(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.veScaPkgId}::ve_sca::mint_ve_sca_key`));return new w(t,this.txb)}get helperExtendStakePeriod(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.veScaPkgId}::ve_sca::extend_lock_period`));return new w(t,this.txb)}get helperRedeemSca(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.veScaPkgId}::ve_sca::redeem`));return new w(t,this.txb)}get helperRenewExpired(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.veScaPkgId}::ve_sca::renew_expired_ve_sca`));return new w(t,this.txb)}get helperOldUnstakeObligation(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${st}::user::unstake`));return new w(t,this.txb)}get helperUnstakeObligation(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.borrowIncentivePkg}::user::unstake`));return new w(t,this.txb)}get helperStakeObligationWithVeSca(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.borrowIncentivePkg}::user::stake_with_ve_sca`));return new w(t,this.txb)}decodeRedeemSca(){let t=this.helperRedeemSca.decodeOwnedObjectId(1);return{txType:ee.Other,type:"RedeemSca",intentionData:{veScaKey:t}}}decodeRenewExpiredVeSca(){let t=this.helperRenewExpired.getNestedInputParam(4),e=this.helperRenewExpired.decodeInputU64(5),n=new _(t,this.txb).getAmountInput().reduce((f,S)=>f+S,0),o=this.helperRenewExpired.decodeOwnedObjectId(1),r=!!this.helperRedeemSca.moveCall,i=[],s=[],c=[];this.helperOldUnstakeObligation.moveCall&&(i=[this.helperOldUnstakeObligation.decodeSharedObjectId(2),this.helperOldUnstakeObligation.decodeSharedObjectId(3)]),this.helperUnstakeObligation.moveCall&&(s=[this.helperUnstakeObligation.decodeSharedObjectId(3),this.helperUnstakeObligation.decodeSharedObjectId(4)]),this.helperStakeObligationWithVeSca.moveCall&&(c=[this.helperStakeObligationWithVeSca.decodeSharedObjectId(3),this.helperStakeObligationWithVeSca.decodeSharedObjectId(4)]);let l=!1,d=!1,u,p,m=[{condition:i,isOld:!0},{condition:s,isOld:!1},{condition:c,isOld:!1}];for(let f=0;f<m.length;f++)m[f].condition.length>1&&([p,u]=m[f].condition,l=!0,d=m[f].isOld);return{txType:ee.Other,type:"RenewExpStakePeriod",intentionData:{amount:n,lockPeriodInDays:e,obligationId:u,obligationKey:p,veScaKey:o,isHaveRedeem:r,isObligationLocked:l,isOldBorrowIncentive:d}}}decodeExtendStakePeriod(){let t=this.helperExtendStakePeriod.decodeInputU64(4),e=this.helperExtendStakePeriod.decodeOwnedObjectId(1),n=[],o=[],r=[];this.helperOldUnstakeObligation.moveCall&&(n=[this.helperOldUnstakeObligation.decodeSharedObjectId(2),this.helperOldUnstakeObligation.decodeSharedObjectId(3)]),this.helperUnstakeObligation.moveCall&&(o=[this.helperUnstakeObligation.decodeSharedObjectId(3),this.helperUnstakeObligation.decodeSharedObjectId(4)]),this.helperStakeObligationWithVeSca.moveCall&&(r=[this.helperStakeObligationWithVeSca.decodeSharedObjectId(3),this.helperStakeObligationWithVeSca.decodeSharedObjectId(4)]);let i=!1,s=!1,c,l,d=[{condition:n,isOld:!0},{condition:o,isOld:!1},{condition:r,isOld:!1}];for(let u=0;u<d.length;u++)d[u].condition.length>1&&([l,c]=d[u].condition,i=!0,s=d[u].isOld);return{txType:ee.Other,type:"ExtendStakePeriod",intentionData:{lockPeriodInDays:t,obligationId:c,obligationKey:l,veScaKey:e,isObligationLocked:i,isOldBorrowIncentive:s}}}decodePeriodAndStakeMoreSca(){let t=this.helperStakeMoreSca.getNestedInputParam(4),e=this.helperExtendStakePeriod.decodeInputU64(4),n=new _(t,this.txb).getAmountInput().reduce((m,f)=>m+f,0),o=[],r=[],i,s=[];this.helperOldUnstakeObligation.moveCall&&(o=[this.helperOldUnstakeObligation.decodeSharedObjectId(2),this.helperOldUnstakeObligation.decodeSharedObjectId(3)]),this.helperUnstakeObligation.moveCall&&(r=[this.helperUnstakeObligation.decodeSharedObjectId(3),this.helperUnstakeObligation.decodeSharedObjectId(4)]),this.helperStakeMoreSca.moveCall&&(i=this.helperStakeMoreSca.decodeOwnedObjectId(1)),this.helperStakeObligationWithVeSca.moveCall&&(s=[this.helperStakeObligationWithVeSca.decodeSharedObjectId(3),this.helperStakeObligationWithVeSca.decodeSharedObjectId(4)]);let c=!1,l=!1,d,u,p=[{condition:o,isOld:!0},{condition:r,isOld:!1},{condition:s,isOld:!1}];for(let m=0;m<p.length;m++)p[m].condition.length>1&&([u,d]=p[m].condition,c=!0,l=p[m].isOld);return{txType:ee.Other,type:"ExtendPeriodAndStakeMore",intentionData:{amount:n,veScaKey:i,lockPeriodInDays:e,obligationId:d,obligationKey:u,isOldBorrowIncentive:l,isObligationLocked:c}}}decodeStakeSca(){let t,e;this.helperStakeSca.moveCall&&this.helperStakeMoreSca.moveCall===void 0?(t=this.helperStakeSca.getNestedInputParam(3),e=this.helperStakeSca.decodeInputU64(4)):t=this.helperStakeMoreSca.getNestedInputParam(4);let n=new _(t,this.txb).getAmountInput().reduce((m,f)=>m+f,0),o=[],r=[],i,s=[];this.helperOldUnstakeObligation.moveCall&&(o=[this.helperOldUnstakeObligation.decodeSharedObjectId(2),this.helperOldUnstakeObligation.decodeSharedObjectId(3)]),this.helperUnstakeObligation.moveCall&&(r=[this.helperUnstakeObligation.decodeSharedObjectId(3),this.helperUnstakeObligation.decodeSharedObjectId(4)]),this.helperStakeMoreSca.moveCall&&(i=this.helperStakeMoreSca.decodeOwnedObjectId(1)),this.helperStakeObligationWithVeSca.moveCall&&(s=[this.helperStakeObligationWithVeSca.decodeSharedObjectId(3),this.helperStakeObligationWithVeSca.decodeSharedObjectId(4)]);let c=!1,l=!1,d,u,p=[{condition:o,isOld:!0},{condition:r,isOld:!1},{condition:s,isOld:!1}];for(let m=0;m<p.length;m++)p[m].condition.length>1&&([u,d]=p[m].condition,c=!0,l=p[m].isOld);return{txType:ee.Other,type:"StakeSca",intentionData:{amount:n,lockPeriodInDays:e,obligationId:d,obligationKey:u,veScaKey:i,isObligationLocked:c,isOldBorrowIncentive:l}}}};import gl from"sort-keys-recursive";var b=class{constructor(t){this.data=t}get application(){return"msafe-core"}serialize(){return JSON.stringify(gl(this.data))}};var Rn=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.borrow(this.data.coinName,Number(this.data.amount),this.data.obligationId,this.data.obligationKey,e.account.address)}static fromData(e){return new a(e)}};var jn=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.borrowWithBoost(this.data.coinName,Number(this.data.amount),this.data.obligationId,this.data.obligationKey,this.data.veScaKey,e.account.address)}static fromData(e){return new a(e)}};var Mn=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.borrowWithReferral(this.data.coinName,Number(this.data.amount),this.data.obligationId,this.data.obligationKey,this.data.veScaKey,e.account.address)}static fromData(e){return new a(e)}};var Bn=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.claim(this.data.lendingIncentive,this.data.borrowIncentiveV2,this.data.borrowIncentive,e.account.address)}static fromData(e){return new a(e)}};var Nn=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.depositCollateral(this.data.collateralCoinName,Number(this.data.amount),this.data.obligationId,e.account.address)}static fromData(e){return new a(e)}};var En=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.migrateAndClaim(this.data.obligationKey,this.data.obligationId,this.data.rewardCoinName,this.data.veScaKey)}static fromData(e){return new a(e)}};var Wn=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.migrateAllMarketCoin()}static fromData(e){return new a(e)}};var Ln=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.migrateLendingWusdcToUsdcNative(this.data.coinName,Number(this.data.amount),this.data.slippage,this.data.validSwapAmount,this.data.stakeAccountId)}static fromData(e){return new a(e)}};var Un=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.openObligation()}static fromData(e){return new a(e)}};var Fn=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.repay(this.data.coinName,Number(this.data.amount),this.data.obligationId,this.data.obligationKey,e.account.address)}static fromData(e){return new a(e)}};var $n=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.repayWithBoost(this.data.coinName,Number(this.data.amount),this.data.obligationId,this.data.veScaKey,e.account.address)}static fromData(e){return new a(e)}};var qn=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.stake(this.data.marketCoinName,Number(this.data.amount),void 0,e.account.address)}static fromData(e){return new a(e)}};var Qn=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.deposit(this.data.coinName,Number(this.data.amount),e.account.address)}static fromData(e){return new a(e)}};var Vn=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.unstake(this.data.marketCoinName,Number(this.data.amount),void 0,e.account.address)}static fromData(e){return new a(e)}};var Hn=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.unstakeAndWithdraw(this.data.coinName,Number(this.data.amount),this.data.stakeAccountId)}static fromData(e){return new a(e)}};var Kn=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.withdrawCollateral(this.data.collateralCoinName,Number(this.data.amount),this.data.obligationId,this.data.obligationKey,e.account.address)}static fromData(e){return new a(e)}};var Gn=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.withdraw(this.data.coinName,Number(this.data.amount),e.account.address)}static fromData(e){return new a(e)}};var zn=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.bindReferral(this.data.veScaKey)}static fromData(e){return new a(e)}};var Jn=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.claimRevenuReferral(this.data.veScaKey,this.data.coins)}static fromData(e){return new a(e)}};var Xn=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.createReferralLink()}static fromData(e){return new a(e)}};var Yn=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.extendPeriodAndStakeMoreSca(this.data.amount,this.data.veScaKey,this.data.lockPeriodInDays,this.data.obligationId,this.data.obligationKey,this.data.isObligationLocked,this.data.isOldBorrowIncentive,e.account.address)}static fromData(e){return new a(e)}};var Zn=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.extendStakeScaLockPeriod(this.data.lockPeriodInDays,this.data.veScaKey,this.data.obligationId,this.data.obligationKey,this.data.isObligationLocked,this.data.isOldBorrowIncentive,e.account.address)}static fromData(e){return new a(e)}};var ta=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.redeemSca(this.data.veScaKey)}static fromData(e){return new a(e)}};var ea=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.renewExpiredStakeSca(this.data.amount,this.data.lockPeriodInDays,this.data.vescaKey,this.data.isHaveRedeem,this.data.obligation,this.data.obligationKey,this.data.isObligationLocked,this.data.isOldBorrowIncentive,e.account.address)}static fromData(e){return new a(e)}};var na=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.stakeSca(this.data.amount,this.data.isObligationLocked,this.data.isOldBorrowIncentive,this.data.obligationId,this.data.obligationKey,this.data.lockPeriodInDays,this.data.veScaKey,e.account.address)}static fromData(e){return new a(e)}};var aa=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.supplyAndStake(this.data.coinName,Number(this.data.amount),this.data.stakeAccountId,e.account.address)}static fromData(e){return new a(e)}};var oa=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.withdrawUnlockedSca(this.data.vescaKey,e.account.address)}static fromData(e){return new a(e)}};var ra=class{id;addresses;constructor(t){let{id:e}=t;this.id=e}getId(){return this.id}getAddresses(){return this.addresses}get(t){if(!this.addresses)throw new Error(`Failed to fetch address ${this.id}`);return t.split(".").reduce((n,o)=>typeof n=="object"?n[o]:n,this.addresses)}async read(){let t={method:"GET",headers:new Headers({"Content-Type":"application/json"})},e=await fetch(`${ni}/addresses/${this.id}`,t);if(e.status===200){let n=await e.json();if("mainnet"in n){this.addresses=n.mainnet;return}throw new Error("Mainnet key is not in address!")}throw new Error(`Failed to fetch address with id ${this.id}`)}};import{TransactionBlock as T}from"@mysten/sui.js/transactions";import Wi from"bignumber.js";import{TransactionBlock as hl}from"@mysten/sui.js/transactions";var ia=class{params;isTestnet;address;query;utils;client;constructor(t,e){this.params=t,this.client=t.client;let{address:n,query:o,utils:r}=e;this.address=n,this.query=o,this.utils=r,this.isTestnet=t.networkType?t.networkType==="testnet":!1}createTxBlock(t){return new hl(t)}async selectCoin(t,e,n,o=this.params.walletAddress){let r=this.utils.parseCoinType(e),i=await this.utils.selectCoinIds(n,r,o),[s,c]=this.utils.takeAmountFromCoins(t,i,n);return{takeCoin:s,leftCoin:c}}async selectMarketCoin(t,e,n,o=this.params.walletAddress){let r=this.utils.parseMarketCoinType(e),i=await this.utils.selectCoins(n,r,o),s=i.reduce((u,p)=>(u+=Number(p.balance),u),0),c=i.map(u=>u.objectId),[l,d]=this.utils.takeAmountFromCoins(t,c,Math.min(n,s));return{takeCoin:l,leftCoin:d,totalAmount:s}}async selectSCoin(t,e,n,o=this.params.walletAddress){let r=this.utils.parseSCoinType(e),i=await this.utils.selectCoins(n,r,o),s=i.map(u=>u.objectId),c=i.reduce((u,p)=>u+Number(p.balance),0),[l,d]=this.utils.takeAmountFromCoins(t,s,Math.min(c,n));return{takeCoin:l,leftCoin:d,totalAmount:c}}};import{TransactionBlock as yl}from"@mysten/sui.js/transactions";import sa from"bignumber.js";var Pt=async(a,t)=>{let e=t,n=a.address.get("core.object")||xn,o=[],r=!1,i=null;do{let d=await a.client.getOwnedObjects({owner:e,filter:{StructType:`${n}::obligation::ObligationKey`},cursor:i});o.push(...d.data),d.hasNextPage&&d.nextCursor?(r=!0,i=d.nextCursor):r=!1}while(r);let s=o.map(d=>d?.data?.objectId).filter(d=>d!==void 0),c=await a.client.multiGetObjects({ids:s,options:{showContent:!0,showType:!0}}),l=[];for(let d=0;d<c.length;d++){let u=c[d].data.objectId,{content:p}=c[d].data;if(p&&"fields"in p){let m=p.fields,f=String(m.ownership.fields.of),S=await _o(a,f);l.push({id:f,keyId:u,locked:S})}}return l},_o=async(a,t)=>{let e=await a.client.getObject({id:t,options:{showContent:!0}}),n=!1;return e.data&&e?.data?.content?.dataType==="moveObject"&&"lock_key"in e.data.content.fields&&(n=!!e.data.content.fields.lock_key),n},di=async(a,t,e)=>{let n=e||[...z],o=t,r=[],i=!1,s=null;do{let d=await a.client.getOwnedObjects({owner:o,filter:{MatchAny:n.map(u=>({StructType:`0x2::coin::Coin<${a.utils.parseCoinType(u)}>`}))},options:{showType:!0,showContent:!0},cursor:s});r.push(...d.data),d.hasNextPage&&d.nextCursor?(i=!0,s=d.nextCursor):i=!1}while(i);let c={};return r.map(d=>d.data).filter(d=>d!=null).forEach(d=>{let u=d.type;if(d.content&&"fields"in d.content){let p=d.content.fields,m=a.utils.parseCoinNameFromType(u);m&&(c[m]=sa(c[m]??0).plus(p.balance).toNumber())}}),c},ui=async(a,t,e)=>{let n=e,o=a.utils.parseCoinType(t),r=[],i=!1,s=null;do{let d=await a.client.getOwnedObjects({owner:n,filter:{StructType:`0x2::coin::Coin<${o}>`},options:{showContent:!0},cursor:s});r.push(...d.data),d.hasNextPage&&d.nextCursor?(i=!0,s=d.nextCursor):i=!1}while(i);let c=0;return r.map(d=>d.data).filter(d=>d!=null).forEach(d=>{if(d.content&&"fields"in d.content){let u=d.content.fields;c=sa(c).plus(u.balance).toNumber()}}),c},pi=async(a,t,e)=>{let n=e||[...z].map(d=>a.utils.parseMarketCoinName(d)),o=t,r=[],i=!1,s=null;do{let d=await a.client.getOwnedObjects({owner:o,filter:{MatchAny:n.map(u=>({StructType:`0x2::coin::Coin<${a.utils.parseMarketCoinType(u)}>`}))},options:{showType:!0,showContent:!0},cursor:s});r.push(...d.data),d.hasNextPage&&d.nextCursor?(i=!0,s=d.nextCursor):i=!1}while(i);let c={};return r.map(d=>d.data).filter(d=>d!=null).forEach(d=>{let u=d.type;if(d.content&&"fields"in d.content){let p=d.content.fields,m=a.utils.parseCoinNameFromType(u);m&&(c[m]=sa(c[m]??0).plus(p.balance).toNumber())}}),c},mi=async(a,t,e)=>{let n=e,o=a.utils.parseMarketCoinType(t),r=[],i=!1,s=null;do{let d=await a.client.getOwnedObjects({owner:n,filter:{StructType:`0x2::coin::Coin<${o}>`},options:{showContent:!0},cursor:s});r.push(...d.data),d.hasNextPage&&d.nextCursor?(i=!0,s=d.nextCursor):i=!1}while(i);let c=0;return r.map(d=>d.data).filter(d=>d!=null).forEach(d=>{if(d.content&&"fields"in d.content){let u=d.content.fields;c=sa(c).plus(u.balance).toNumber()}}),c},fi=async(a,t)=>{let n=`${a.address.get("core.packages.query.id")}::obligation_query::obligation_data`,o=new yl;return o.moveCall({target:n,arguments:[o.object(t)]}),(await a.client.devInspectTransactionBlock({transactionBlock:o,sender:a.params.walletAddress})).events[0].parsedJson};import{normalizeStructTag as C}from"@mysten/sui.js/utils";var ne=async(a,t)=>{let e=t,n=a.address.get("spool.object"),o=`${n}::spool_account::SpoolAccount`,r=[],i=!1,s=null;do{let p=await a.client.getOwnedObjects({owner:e,filter:{StructType:o},options:{showContent:!0,showType:!0},cursor:s});r.push(...p.data),p.hasNextPage&&p.nextCursor?(i=!0,s=p.nextCursor):i=!1}while(i);let c={sweth:[],ssui:[],susdc:[],swusdc:[],swusdt:[],scetus:[],safsui:[],shasui:[],svsui:[]},l=Object.keys(c).reduce((p,m)=>{let f=a.utils.parseCoinName(m),S=a.utils.parseMarketCoinType(f),I={...p},v=`${n}::spool_account::SpoolAccount<${S}>`;return I[m]=v,I},{}),d=r.map(p=>p?.data?.objectId).filter(p=>p!==void 0);return(await a.client.multiGetObjects({ids:d,options:{showContent:!0,showType:!0}})).forEach(p=>{let m=p.data.objectId,f=p.data.type;if(p.data.content&&"fields"in p.data.content){let S=p.data.content.fields,I=String(S.spool_id),v=String(S.stake_type.fields.name),W=Number(S.stakes),R=Number(S.index),F=Number(S.points),L=Number(S.total_points);C(f)===l.sweth?c.sweth.push({id:m,type:C(f),stakePoolId:I,stakeType:C(v),staked:W,index:R,points:F,totalPoints:L}):C(f)===l.ssui?c.ssui.push({id:m,type:C(f),stakePoolId:I,stakeType:C(v),staked:W,index:R,points:F,totalPoints:L}):C(f)===l.swusdc?c.swusdc.push({id:m,type:C(f),stakePoolId:I,stakeType:C(v),staked:W,index:R,points:F,totalPoints:L}):C(f)===l.swusdt?c.swusdt.push({id:m,type:C(f),stakePoolId:I,stakeType:C(v),staked:W,index:R,points:F,totalPoints:L}):C(f)===l.scetus?c.scetus.push({id:m,type:C(f),stakePoolId:I,stakeType:C(v),staked:W,index:R,points:F,totalPoints:L}):C(f)===l.safsui?c.safsui.push({id:m,type:C(f),stakePoolId:I,stakeType:C(v),staked:W,index:R,points:F,totalPoints:L}):C(f)===l.shasui?c.shasui.push({id:m,type:C(f),stakePoolId:I,stakeType:C(v),staked:W,index:R,points:F,totalPoints:L}):C(f)===l.svsui?c.svsui.push({id:m,type:C(f),stakePoolId:I,stakeType:C(v),staked:W,index:R,points:F,totalPoints:L}):C(f)===l.susdc&&c.susdc.push({id:m,type:C(f),stakePoolId:I,stakeType:C(v),staked:W,index:R,points:F,totalPoints:L})}}),c},Ro=async(a,t)=>{let e=a.address.get(`spool.pools.${t}.id`),n,o=await a.client.getObject({id:e,options:{showContent:!0,showType:!0}});if(o.data){let r=o.data,i=r.objectId,s=r.type;if(r.content&&"fields"in r.content){let c=r.content.fields,l=Number(c.max_distributed_point),d=Number(c.distributed_point),u=Number(c.distributed_point_per_period),p=Number(c.point_distribution_time),m=Number(c.max_stakes),f=String(c.stake_type.fields.name),S=Number(c.stakes),I=Number(c.index),v=Number(c.created_at),W=Number(c.last_update);n={id:i,type:C(s),maxPoint:l,distributedPoint:d,pointPerPeriod:u,period:p,maxStake:m,stakeType:C(f),totalStaked:S,index:I,createdAt:v,lastUpdate:W}}}return n},jo=async(a,t)=>{let e=a.address.get(`spool.pools.${t}.rewardPoolId`),n,o=await a.client.getObject({id:e,options:{showContent:!0,showType:!0}});if(o.data){let r=o.data,i=r.objectId,s=r.type;if(r.content&&"fields"in r.content){let c=r.content.fields,l=String(c.spool_id),d=Number(c.exchange_rate_numerator),u=Number(c.exchange_rate_denominator),p=Number(c.rewards),m=Number(c.claimed_rewards);n={id:i,type:C(s),stakePoolId:l,ratioNumerator:d,ratioDenominator:u,rewards:p,claimedRewards:m}}}return n};import{TransactionBlock as Il}from"@mysten/sui.js/transactions";import{normalizeStructTag as zC}from"@mysten/sui.js/utils";import XC from"bignumber.js";var M=a=>{let{sender:t}=a.blockData;if(!t)throw new Error("Sender is required");return t},hi=(a,t,e,n)=>{let o=!n,r=!o&&n*1e3<=new Date().getTime();if(o||r)if(a!==void 0&&t!==void 0){if(t<=0)throw new Error("Lock period must be greater than 0");if(typeof a=="number"&&a<1e10)throw new Error(`Minimum lock amount for ${r?"renewing expired veSca":"initial lock"} is 10 SCA`);if(t*86400>126144e3)throw new Error(`Maximum lock period is ~4 years (${1460} days)`)}else throw new Error(`SCA amount and lock period is required for ${r?"renewing expired veSca":"initial lock"}`);else{if(_t(n),typeof a=="number"&&a<1e9)throw new Error("Minimum top up amount is 1 SCA");if(e&&n&&e-n>126057600)throw new Error(`Maximum lock period is ~4 years (${1459} days)`)}},yi=(a,t,e)=>{if(_t(e),a<=0)throw new Error("Lock period must be greater than 0");if(!!e&&e*1e3<=new Date().getTime())throw new Error("veSca is expired, use renewExpiredVeScaQuick instead");if(e&&t-(e??0)>126057600)throw new Error(`Maximum lock period is ~4 years (${1459} days)`)},Si=(a,t)=>{if(_t(t),a<1e9)throw new Error("Minimum top up amount is 1 SCA");if(!!t&&t*1e3<=new Date().getTime())throw new Error("veSca is expired, use renewExpiredVeScaQuick instead")},wi=(a,t,e)=>{if(_t(e),a<1e10)throw new Error("Minimum lock amount for renewing expired vesca 10 SCA");if(t*86400>=126057600)throw new Error(`Maximum lock period is ~4 years (${1459} days)`)},_t=a=>{if(a===void 0)throw new Error("veSca not found")};import{normalizeStructTag as Ii,parseStructTag as Sl}from"@mysten/sui.js/utils";import WC from"bignumber.js";var wl=a=>({pointType:Ii(a.point_type.name),weightedAmount:Number(a.weighted_amount),points:Number(a.points),totalPoints:Number(a.total_points),index:Number(a.index)}),Ci=a=>({poolType:Ii(a.pool_type.name),debtAmount:Number(a.debt_amount),pointList:a.points_list.reduce((t,e)=>{let n=wl(e),o=Sl(n.pointType).name.toLowerCase();return t[o]=n,t},{})});var la=a=>{let t=a.slice(1).toLowerCase();return a.charAt(0).toLowerCase()==="s"&&[...new Set([...z,...An,...oi])].includes(t)},Mo=a=>{switch(a){case"afsui":return"afSUI";case"hasui":return"haSUI";case"vsui":return"vSUI";default:return a.toUpperCase()}},Ti=a=>{let t=new Date(a*1e3),e=new Date(a*1e3);e.setUTCHours(0,0,0,0),t.getUTCHours()>=0&&e.setUTCDate(e.getUTCDate()+1);let n=new Date().getTime();return e.getTime()-n>126144e3*1e3&&e.setUTCDate(e.getUTCDate()-1),Math.floor(e.getTime()/1e3)};var ki=async(a,t,e,n)=>{let o=n||[...lt],r=a.address.get("borrowIncentive.query"),i=a.address.get("borrowIncentive.incentiveAccounts"),s=`${r}::incentive_account_query::incentive_account_data`,c=new Il;c.moveCall({target:s,arguments:[c.object(i),c.object(t)]});let d=(await a.client.devInspectTransactionBlock({transactionBlock:c,sender:e})).events[0].parsedJson,u={};return d.pool_records.forEach(p=>{let m=Ci(p),{poolType:f}=m,S=a.utils.parseCoinNameFromType(f);o.length>=1&&o.includes(S)&&(u[S]=m)},{}),u};var vi=async({address:a,client:t},e)=>{let n=a.get("borrowIncentive.object"),o=a.get("borrowIncentive.incentiveAccounts"),r=a.get("core.object"),i=await t.getObject({id:o,options:{showContent:!0}});if(i?.data?.content?.dataType!=="moveObject")return null;let s=i.data.content.fields.accounts.fields.id.id,c=await t.getDynamicFieldObject({parentId:s,name:{type:`${n}::typed_id::TypedID<${r}::obligation::Obligation>`,value:e}});return c?.data?.content?.dataType!=="moveObject"?null:c.data.content.fields.value.fields.binded_ve_sca_key?.fields.id??null};var xi=async(a,t)=>{let e=a.address.get(`core.coins.${t}.oracle.pyth.feedObject`),n=await a.client.getObject({id:e,options:{showContent:!0}});if(n.data){let o=n.data;if(o.content&&"fields"in o.content){let r=o.content.fields,i=Number(r.price_info.fields.price_feed.fields.price.fields.expo.fields.magnitude),s=Number(r.price_info.fields.price_feed.fields.price.fields.expo.fields.negative),c=Number(r.price_info.fields.price_feed.fields.price.fields.price.fields.magnitude),l=Number(r.price_info.fields.price_feed.fields.price.fields.price.fields.negative);return c*10**((s?-1:1)*i)*(l?-1:1)}}return 0};import Bo from"bignumber.js";var Ai=async(a,t)=>{let e=t,o=`${a.address.get("vesca.id")}::ve_sca::VeScaKey`,r=[],i=!1,s=null;do{let l=await a.client.getOwnedObjects({owner:e,filter:{StructType:o},cursor:s});r.push(...l.data),l.hasNextPage&&l.nextCursor?(i=!0,s=l.nextCursor):i=!1}while(i);return r.map(l=>l.data).filter(l=>!!l)},Di=async(a,t)=>{let n=(await Ai(a,t)).map(r=>r.objectId),o=[];for(let r=0;r<n.length;r++){let i=await No(a,n[r]);i&&o.push(i)}return o},No=async(a,t,e)=>{let n=a.address.get("vesca.tableId"),o=t||(await Ai(a,e))[0].objectId,r,s=(await a.client.getDynamicFieldObject({parentId:n,name:{type:"0x2::object::ID",value:o}})).data;if(s&&s.content&&s.content.dataType==="moveObject"&&"fields"in s.content){let c=s.content.fields.value.fields;r={id:s.objectId,keyId:o,lockedScaAmount:Bo(c.locked_sca_amount).toNumber(),lockedScaCoin:Bo(c.locked_sca_amount).shiftedBy(-9).toNumber(),unlockAt:Bo(c.unlock_at).toNumber()}}return r};var da=class{params;address;client;utils;constructor(t,e){this.params=t,this.client=t.client;let{address:n,utils:o}=e;this.address=n,this.utils=o}async getObligations(t=this.params.walletAddress){return Pt(this,t)}async getCoinAmounts(t,e){return di(this,t,e)}async getCoinAmount(t,e=this.params.walletAddress){return ui(this,t,e)}async getMarketCoinAmounts(t,e){return pi(this,t,e)}async getMarketCoinAmount(t,e=this.params.walletAddress){return mi(this,t,e)}async getPriceFromPyth(t){return xi(this,t)}async getAllStakeAccounts(t=this.params.walletAddress){return ne(this,t)}async getStakeAccounts(t,e=this.params.walletAddress){return(await this.getAllStakeAccounts(e))[t]??[]}async getStakePools(t=[...ct]){let e={};for(let n=0;n<t.length;n++){let o=t[n],r=await Ro(this,o);r&&(e[o]=r)}return e}async getStakePool(t){return Ro(this,t)}async getStakeRewardPools(t=[...ct]){let e={};for(let n=0;n<t.length;n++){let o=await jo(this,t[n]);o&&(e[t[n]]=o)}return e}async getStakeRewardPool(t){return jo(this,t)}async getBorrowIncentiveAccounts(t,e=this.params.walletAddress,n){return ki(this,t,e,n)}async getObligationCoinNames(t){let e=await fi(this,t),n=e.collaterals.map(s=>`0x${s.type.name}`),o=e.debts.map(s=>`0x${s.type.name}`);return[...new Set([...n,...o])].map(s=>this.utils.parseCoinNameFromType(s))}};import{SUI_TYPE_ARG as Eo,normalizeStructTag as Cl}from"@mysten/sui.js/utils";var ua=class{params;isTestnet;_address;client;constructor(t,e){this.params=t,this.client=t.client,this._address=e}parseSymbol(t){if(la(t)){let e=t.slice(1).toLowerCase();return t.slice(0,1).toLowerCase()+Mo(e)}return Mo(t)}parseCoinType(t){let e=la(t)?this.parseCoinName(t):t,n=si[e];return[U.wusdc,U.wusdt,U.weth,U.wbtc,U.wsol,U.wapt].includes(n)?`${n}::coin::COIN`:t==="vsui"?`${Do.vsui}::cert::CERT`:`${n}::${e}::${e.toUpperCase()}`}parseMarketCoinType(t){let e=this._address.get("core.object")||xn,n=this.parseCoinType(t);return`${e}::reserve::MarketCoin<${n}>`}parseCoinNameFromType(t){let e=Cl(t),n=/((0x[^:]+::[^:]+::[^<>]+))(?![^<>]*<)/,o=t.match(n),r=t.includes("reserve::MarketCoin");e=o?.[1]||t;let i={[`${U.wusdc}::coin::COIN`]:"wusdc",[`${U.wusdt}::coin::COIN`]:"wusdt",[`${U.weth}::coin::COIN`]:"weth",[`${U.wbtc}::coin::COIN`]:"wbtc",[`${U.wsol}::coin::COIN`]:"wsol",[`${U.wapt}::coin::COIN`]:"wapt"},s={[`${Do.vsui}::cert::CERT`]:"vsui"},c=i[e]||s[e]||e.split("::")[2].toLowerCase();return r?this.parseMarketCoinName(c):c}parseCoinName(t){return t.slice(1)}parseMarketCoinName(t){return`s${t}`}getSpoolRewardCoinName=t=>Dn[t];getBorrowIncentiveRewardCoinName=t=>ii[t];getCoinDecimal(t){return ri[t]}getCoinWrappedType(t){return t==="wusdc"||t==="wusdt"||t==="weth"||t==="wbtc"||t==="wapt"||t==="wsol"?{from:"Wormhole",type:"Portal from Ethereum"}:void 0}parseSCoinType(t){return ci[t]}parseUnderlyingSCoinType(t){let e=this.parseCoinName(t);return this.parseCoinType(e)}getSCoinTreasury(t){return this._address.get(`scoin.coins.${t}.treasury`)}async selectCoins(t,e=Eo,n){let o=n,r=[],i=0,s=!0,c=null;for(;s&&i<t;){let l=await this.client.getCoins({owner:o,coinType:e,cursor:c});l.data.sort((d,u)=>parseInt(u.balance,10)-parseInt(d.balance,10));for(let d=0;d<l.data.length&&(r.push({objectId:l.data[d].coinObjectId,digest:l.data[d].digest,version:l.data[d].version,balance:l.data[d].balance}),i+=parseInt(l.data[d].balance,10),!(i>=t));d++);c=l.nextCursor,s=l.hasNextPage}if(!r.length)throw new Error("No valid coins found for the transaction.");return r}async selectCoinsMarketCoin(t=Eo,e){let n=e,o=[],r=!0,i=null;for(;r;){let s=await this.client.getCoins({owner:n,coinType:t,cursor:i});s.data.sort((c,l)=>parseInt(l.balance,10)-parseInt(c.balance,10));for(let c=0;c<s.data.length&&(o.push({objectId:s.data[c].coinObjectId,digest:s.data[c].digest,version:s.data[c].version,balance:s.data[c].balance}),!(o.length>50));c++);i=s.nextCursor,r=s.hasNextPage}return o}async selectCoinIds(t,e=Eo,n){return(await this.selectCoins(t,e,n)).map(r=>r.objectId)}parseAprToApy(t,e=365){return(1+t/e)**e-1}parseApyToApr(t,e=365){return((1+t)**(1/e)-1)*e}takeAmountFromCoins(t,e,n){let o=e.map(s=>t.object(s)),r=o[0];o.length>1&&t.mergeCoins(r,o.slice(1));let[i]=t.splitCoins(r,[t.pure(n)]);return[i,r]}getUnlockAt(t,e){let n=Math.floor(new Date().getTime()/1e3),o=e?Math.max(e-n,0):0,r=0;if(o===0){let i=(t??1)*86400;r=Math.min(n+i,n+126144e3)}else{let i=Math.min(t?t*86400+o:o,126144e3);r=n+i}return Ti(r)}parseSCoinName(t){if(la(t)&&J.includes(t))return t;let e=`s${t}`;if(J.includes(e))return e}};import{SUI_CLOCK_OBJECT_ID as Rt,SUI_TYPE_ARG as Tl}from"@mysten/sui.js/utils";var jt=async(...a)=>{let[t,e,n]=a;if(a.length===3&&n&&typeof n=="string"){let i=await No(t.query,n);return i||void 0}let o=M(e),r=await Di(t.query,o);if(r.length!==0)return r[0]};var Wo=async(...a)=>{let[t,e,n,o]=a;if(a.length===4&&n&&o&&typeof n=="string"){let c=await _o(t.query,n);return{obligationId:n,obligationKey:o,obligationLocked:c}}let r=M(e),i=await Pt(t.query,r);if(i.length===0)throw new Error(`No obligation found for sender ${r}`);let s=i.find(c=>c.id===n||c.keyId===o)??i[0];return{obligationId:s.id,obligationKey:s.keyId,obligationLocked:s.locked}},kl=async({builder:a,txBlock:t})=>{let e={borrowIncentivePkg:a.address.get("borrowIncentive.id"),query:a.address.get("borrowIncentive.query"),incentivePools:a.address.get("borrowIncentive.incentivePools"),incentiveAccounts:a.address.get("borrowIncentive.incentiveAccounts"),obligationAccessStore:a.address.get("core.obligationAccessStore"),config:a.address.get("borrowIncentive.config")},n={id:"0xc63072e7f5f4983a2efaf5bdba1480d5e7d74d57948e1c7cc436f8e22cbeb410",incentivePools:"0x64972b713ccec45ec3964809e477cea6f97350c0c50ca3aec85bb631639266ec",incentiveAccounts:"0x3c0b707068bdcea8bb859d751ad3e2149a9f83c13fcf4054ef91372a00bccdd3"},o={table:a.address.get("vesca.table"),treasury:a.address.get("vesca.treasury"),config:a.address.get("vesca.config")};return{stakeObligation:(r,i)=>{t.moveCall({target:`${e.borrowIncentivePkg}::user::stake`,arguments:[t.object(e.config),t.object(e.incentivePools),t.object(e.incentiveAccounts),t.object(i),t.object(r),t.object(e.obligationAccessStore),t.object(Rt)]})},stakeObligationWithVesca:(r,i,s)=>{t.moveCall({target:`${e.borrowIncentivePkg}::user::stake_with_ve_sca`,arguments:[t.object(e.config),t.object(e.incentivePools),t.object(e.incentiveAccounts),t.object(i),t.object(r),t.object(e.obligationAccessStore),t.object(o.config),t.object(o.treasury),t.object(o.table),t.object(s),t.object(Rt)]})},unstakeObligation:(r,i)=>{t.moveCall({target:`${e.borrowIncentivePkg}::user::unstake`,arguments:[t.object(e.config),t.object(e.incentivePools),t.object(e.incentiveAccounts),t.object(i),t.object(r),t.object(Rt)]})},oldUnstakeObligation:(r,i)=>{t.moveCall({target:`${e.borrowIncentivePkg}::user::unstake`,arguments:[t.object(n.incentivePools),t.object(n.incentiveAccounts),t.object(i),t.object(r),t.object(Rt)],typeArguments:[Tl]})},claimBorrowIncentive:(r,i,s)=>{let c=a.utils.parseCoinType(s);return t.moveCall({target:`${e.borrowIncentivePkg}::user::redeem_rewards`,arguments:[t.object(e.config),t.object(e.incentivePools),t.object(e.incentiveAccounts),t.object(i),t.object(r),t.object(Rt)],typeArguments:[c]})},oldClaimBorrowIncentive(r,i,s){let c=a.utils.parseCoinType(s);return t.moveCall({target:`${n.id}::user::redeem_rewards`,arguments:[t.object(n.incentivePools),t.object(n.incentiveAccounts),t.object(i),t.object(r),t.object(Rt)],typeArguments:[c]})}}},B=async({builder:a,txBlock:t})=>{let e=await kl({builder:a,txBlock:t});return{normalMethod:e,stakeObligationQuick:async(n,o)=>{let{obligationId:r,obligationKey:i,obligationLocked:s}=await Wo(a,t,n,o),c=!!t.blockData.transactions.find(l=>l.kind==="MoveCall"&&(l.target===`${st}::user::unstake`||l.target===`${a.address.get("borrowIncentive.id")}::user::unstake`));(!s||c)&&e.stakeObligation(r,i)},unstakeObligationQuick:async(n,o)=>{let{obligationId:r,obligationKey:i,obligationLocked:s}=await Wo(a,t,n,o);s&&e.unstakeObligation(r,i)},stakeObligationWithVeScaQuick:async(n,o,r)=>{let{obligationId:i,obligationKey:s,obligationLocked:c}=await Wo(a,t,n,o),l=!!t.blockData.transactions.find(async d=>d.kind==="MoveCall"&&(d.target===`${st}::user::unstake`||d.target===`${a.address.get("borrowIncentive.id")}::user::unstake`));if(!c||l){let d=await vi({address:a.address,client:a.client},i);if(r&&r!==d)throw new Error("Binded veScaKey is not equal to the provided veScaKey");d?e.stakeObligationWithVesca(i,s,d):e.stakeObligation(i,s)}},claimBorrowIncentiveQuick:(n,o,r)=>e.claimBorrowIncentive(o,r,n)}};import{SUI_CLOCK_OBJECT_ID as Y}from"@mysten/sui.js/utils";import{SUI_CLOCK_OBJECT_ID as fa}from"@mysten/sui.js/utils";import vl from"axios";var Oi={testnet:["https://hermes-beta.pyth.network"],mainnet:["https://hermes.pyth.network","https://scallop.rpc.p2p.world"]};import{bcs as Lo}from"@mysten/sui.js/bcs";import{SUI_CLOCK_OBJECT_ID as pa}from"@mysten/sui.js/utils";var Uo=16*1024,ma=class{provider;pythStateId;wormholeStateId;pythPackageId;wormholePackageId;priceTableInfo;priceFeedObjectIdCache=new Map;baseUpdateFee;constructor(t,e,n){this.provider=t,this.pythStateId=e,this.wormholeStateId=n,this.pythPackageId=void 0,this.wormholePackageId=void 0}async getBaseUpdateFee(){if(this.baseUpdateFee===void 0){let t=await this.provider.getObject({id:this.pythStateId,options:{showContent:!0}});if(!t.data||!t.data.content||t.data.content.dataType!=="moveObject")throw new Error("Unable to fetch pyth state object");this.baseUpdateFee=t.data.content.fields.base_update_fee}return this.baseUpdateFee}async getPackageId(t){let e=await this.provider.getObject({id:t,options:{showContent:!0}}).then(n=>{if(n.data?.content?.dataType==="moveObject")return n.data.content.fields;throw new Error(`Cannot fetch package id for object ${t}`)});if("upgrade_cap"in e)return e.upgrade_cap.fields.package;throw new Error("upgrade_cap not found")}async verifyVaas(t,e){let n=await this.getWormholePackageId(),o=[];return t.forEach(r=>{let[i]=e.moveCall({target:`${n}::vaa::parse_and_verify`,arguments:[e.object(this.wormholeStateId),e.pure(Lo.ser("vector<u8>",Array.from(r),{maxSize:Uo}).toBytes()),e.object(pa)]});o.push(i)}),o}async updatePriceFeeds(t,e,n){let o=await this.getPythPackageId(),r;if(e.length>1)throw new Error("SDK does not support sending multiple accumulator messages in a single transaction");let i=this.extractVaaBytesFromAccumulatorMessage(e[0]),s=await this.verifyVaas([i],t);[r]=t.moveCall({target:`${o}::pyth::create_authenticated_price_infos_using_accumulator`,arguments:[t.object(this.pythStateId),t.pure(Lo.ser("vector<u8>",Array.from(e[0]),{maxSize:Uo}).toBytes()),s[0],t.object(pa)]});let c=[],l=await this.getBaseUpdateFee(),d=t.splitCoins(t.gas,n.map(()=>t.pure(l))),u=0;for(let p=0;p<n.length;p++){let m=await this.getPriceFeedObjectId(n[p]);if(!m)throw new Error(`Price feed ${n[0]} not found, please create it first`);c.push(m),[r]=t.moveCall({target:`${o}::pyth::update_single_price_feed`,arguments:[t.object(this.pythStateId),r,t.object(m),d[u],t.object(pa)]}),u++}return t.moveCall({target:`${o}::hot_potato_vector::destroy`,arguments:[r],typeArguments:[`${o}::price_info::PriceInfo`]}),c}async createPriceFeed(t,e){let n=await this.getPythPackageId();if(e.length>1)throw new Error("SDK does not support sending multiple accumulator messages in a single transaction");let o=this.extractVaaBytesFromAccumulatorMessage(e[0]),r=await this.verifyVaas([o],t);t.moveCall({target:`${n}::pyth::create_price_feeds_using_accumulator`,arguments:[t.object(this.pythStateId),t.pure(Lo.ser("vector<u8>",Array.from(e[0]),{maxSize:Uo}).toBytes()),r[0],t.object(pa)]})}async getWormholePackageId(){return this.wormholePackageId||(this.wormholePackageId=await this.getPackageId(this.wormholeStateId)),this.wormholePackageId}async getPythPackageId(){return this.pythPackageId||(this.pythPackageId=await this.getPackageId(this.pythStateId)),this.pythPackageId}async getPriceFeedObjectId(t){let e=t.replace("0x","");if(!this.priceFeedObjectIdCache.has(e)){let{id:n,fieldType:o}=await this.getPriceTableInfo(),r=await this.provider.getDynamicFieldObject({parentId:n,name:{type:`${o}::price_identifier::PriceIdentifier`,value:{bytes:Array.from(Buffer.from(e,"hex"))}}});if(!r.data||!r.data.content)return;if(r.data.content.dataType!=="moveObject")throw new Error("Price feed type mismatch");this.priceFeedObjectIdCache.set(e,r.data.content.fields.value)}return this.priceFeedObjectIdCache.get(e)}async getPriceTableInfo(){if(this.priceTableInfo===void 0){let t=await this.provider.getDynamicFieldObject({parentId:this.pythStateId,name:{type:"vector<u8>",value:"price_info"}});if(!t.data||!t.data.type)throw new Error("Price Table not found, contract may not be initialized");let e=t.data.type.replace("0x2::table::Table<","");e=e.replace("::price_identifier::PriceIdentifier, 0x2::object::ID>",""),this.priceTableInfo={id:t.data.objectId,fieldType:e}}return this.priceTableInfo}extractVaaBytesFromAccumulatorMessage(t){let n=7+t.readUint8(6)+1,o=t.readUint16BE(n),r=n+2;return t.subarray(r,r+o)}};var xl=async(a,t)=>(await vl.get(`${a}/api/latest_vaas`,{params:{ids:t}})).data.map(o=>Buffer.from(o,"base64")),ae=async(a,t,e)=>{let n=e??[...new Set([...z,...An])],o=a.isTestnet?["pyth"]:["pyth"];if(o.includes("pyth")){let i=new ma(a.client,a.address.get("core.oracles.pyth.state"),a.address.get("core.oracles.pyth.wormholeState")),s=[];await Promise.all(n.map(async l=>s.push(a.address.get(`core.coins.${l}.oracle.pyth.feed`))));let c=a.params.pythEndpoints??Oi[a.isTestnet?"testnet":"mainnet"];try{let l=await xl(c[0],s);await i.updatePriceFeeds(t,l,s)}catch(l){console.warn(`Failed to update price feeds with endpoint ${c[0]}: ${l}`)}}let r=[...new Set(n)];for(let i=0;i<r.length;i++)await Al(a,t,r[i],o)},Al=async(a,t,e,n)=>{let o=a.utils.parseCoinType(e);Dl(t,n,a.address.get("core.packages.xOracle.id"),a.address.get("core.oracles.xOracle"),a.address.get("core.packages.pyth.id"),a.address.get("core.oracles.pyth.registry"),a.address.get("core.oracles.pyth.state"),a.address.get(`core.coins.${e}.oracle.pyth.feedObject`),a.address.get("core.packages.switchboard.id"),a.address.get("core.oracles.switchboard.registry"),a.address.get(`core.coins.${e}.oracle.switchboard`),a.address.get("core.packages.supra.id"),a.address.get("core.oracles.supra.registry"),a.address.get("core.oracles.supra.holder"),o)},Dl=(a,t,e,n,o,r,i,s,c,l,d,u,p,m,f)=>{let S=Ol(a,e,n,f);return t.includes("pyth")&&jl(a,o,S,i,s,r,f),t.includes("switchboard")&&Rl(a,c,S,d,l,f),t.includes("supra")&&_l(a,u,S,m,p,f),Pl(a,e,n,S,f),a},Ol=(a,t,e,n)=>{let o=typeof e=="string"?a.object(e):e,r=`${t}::x_oracle::price_update_request`,i=[n];return a.moveCall({target:r,arguments:[o],typeArguments:i})},Pl=(a,t,e,n,o)=>{let r=`${t}::x_oracle::confirm_price_update_request`,i=[o],s=typeof e=="string"?a.object(e):e;return a.moveCall({target:r,arguments:[s,n,a.object(fa)],typeArguments:i}),a},_l=(a,t,e,n,o,r)=>{let i=typeof n=="string"?a.object(n):n,s=typeof o=="string"?a.object(o):o;a.moveCall({target:`${t}::rule::set_price`,arguments:[e,i,s,a.object(fa)],typeArguments:[r]})},Rl=(a,t,e,n,o,r)=>{let i=typeof n=="string"?a.object(n):n,s=typeof o=="string"?a.object(o):o;a.moveCall({target:`${t}::rule::set_price`,arguments:[e,i,s,a.object(fa)],typeArguments:[r]})},jl=(a,t,e,n,o,r,i)=>{let s=typeof e=="string"?a.object(e):e,c=typeof n=="string"?a.object(n):n,l=typeof o=="string"?a.object(o):o,d=typeof r=="string"?a.object(r):r;a.moveCall({target:`${t}::rule::set_price`,arguments:[s,c,l,d,a.object(fa)],typeArguments:[i]})};var ut=async({builder:a,txBlock:t})=>{let e={pkgId:a.address.get("scoin.id")},n={};return await Promise.all(J.map(async o=>{let r=a.utils.getSCoinTreasury(o);n[o]=r})),{mintSCoin:(o,r)=>t.moveCall({target:`${e.pkgId}::s_coin_converter::mint_s_coin`,arguments:[t.object(n[o]),typeof r!="string"?r:t.pure(r)],typeArguments:[a.utils.parseSCoinType(o),a.utils.parseUnderlyingSCoinType(o)]}),burnSCoin:(o,r)=>t.moveCall({target:`${e.pkgId}::s_coin_converter::burn_s_coin`,arguments:[t.object(n[o]),typeof r!="string"?r:t.pure(r)],typeArguments:[a.utils.parseSCoinType(o),a.utils.parseUnderlyingSCoinType(o)]})}};var oe=async(...a)=>{let[t,e,n,o]=a;if(a.length===3&&n)return{obligationId:n};if(a.length===4&&n&&o)return{obligationId:n,obligationKey:o};let r=M(t),i=await Pt(e.query,r);if(i.length===0)throw new Error(`No obligation found for sender ${r}`);return{obligationId:i[0].id,obligationKey:i[0].keyId}},Ml=async({builder:a,txBlock:t})=>{let e={protocolPkg:a.address.get("core.packages.protocol.id"),market:a.address.get("core.market"),version:a.address.get("core.version"),coinDecimalsRegistry:a.address.get("core.coinDecimalsRegistry"),xOracle:a.address.get("core.oracles.xOracle")},o=`${a.address.get("referral.id")}::scallop_referral_program::REFERRAL_WITNESS`;return{openObligation:()=>t.moveCall({target:`${e.protocolPkg}::open_obligation::open_obligation`,arguments:[t.object(e.version)]}),returnObligation:(r,i)=>t.moveCall({target:`${e.protocolPkg}::open_obligation::return_obligation`,arguments:[t.object(e.version),t.object(r),t.object(i)]}),openObligationEntry:()=>t.moveCall({target:`${e.protocolPkg}::open_obligation::open_obligation_entry`,arguments:[t.object(e.version)]}),addCollateral:(r,i,s)=>{let c=a.utils.parseCoinType(s);return t.moveCall({target:`${e.protocolPkg}::deposit_collateral::deposit_collateral`,arguments:[t.object(e.version),t.object(r),t.object(e.market),typeof i!="string"?i:t.pure(i)],typeArguments:[c]})},takeCollateral:(r,i,s,c)=>{let l=a.utils.parseCoinType(c);return t.moveCall({target:`${e.protocolPkg}::withdraw_collateral::withdraw_collateral`,arguments:[t.object(e.version),t.object(r),t.object(i),t.object(e.market),t.object(e.coinDecimalsRegistry),t.pure(s),t.object(e.xOracle),t.object(Y)],typeArguments:[l]})},deposit:(r,i)=>{let s=a.utils.parseCoinType(i);return t.moveCall({target:`${e.protocolPkg}::mint::mint`,arguments:[t.object(e.version),t.object(e.market),typeof r!="string"?r:t.pure(r),t.object(Y)],typeArguments:[s]})},depositEntry:(r,i)=>{let s=a.utils.parseCoinType(i);return t.moveCall({target:`${e.protocolPkg}::mint::mint_entry`,arguments:[t.object(e.version),t.object(e.market),typeof r!="string"?r:t.pure(r),t.object(Y)],typeArguments:[s]})},withdraw:(r,i)=>{let s=a.utils.parseCoinType(i);return t.moveCall({target:`${e.protocolPkg}::redeem::redeem`,arguments:[t.object(e.version),t.object(e.market),typeof r!="string"?r:t.pure(r),t.object(Y)],typeArguments:[s]})},withdrawEntry:(r,i)=>{let s=a.utils.parseCoinType(i);return t.moveCall({target:`${e.protocolPkg}::redeem::redeem_entry`,arguments:[t.object(e.version),t.object(e.market),typeof r!="string"?r:t.pure(r),t.object(Y)],typeArguments:[s]})},borrow:(r,i,s,c)=>{let l=a.utils.parseCoinType(c);return t.moveCall({target:`${e.protocolPkg}::borrow::borrow`,arguments:[t.object(e.version),t.object(r),t.object(i),t.object(e.market),t.object(e.coinDecimalsRegistry),t.pure(s),t.object(e.xOracle),t.object(Y)],typeArguments:[l]})},borrowEntry:(r,i,s,c)=>{let l=a.utils.parseCoinType(c);return t.moveCall({target:`${e.protocolPkg}::borrow::borrow_entry`,arguments:[t.object(e.version),t.object(r),t.object(i),t.object(e.market),t.object(e.coinDecimalsRegistry),t.pure(s),t.object(e.xOracle),t.object(Y)],typeArguments:[l]})},borrowWithReferral:(r,i,s,c,l)=>{let d=a.utils.parseCoinType(l);return t.moveCall({target:`${e.protocolPkg}::borrow::borrow_with_referral`,arguments:[t.object(e.version),t.object(r),t.object(i),t.object(e.market),t.object(e.coinDecimalsRegistry),t.object(s),t.pure(c),t.object(e.xOracle),t.object(Y)],typeArguments:[d,o]})},repay:(r,i,s)=>{let c=a.utils.parseCoinType(s);return t.moveCall({target:`${e.protocolPkg}::repay::repay`,arguments:[t.object(e.version),t.object(r),t.object(e.market),typeof i!="string"?i:t.pure(i),t.object(Y)],typeArguments:[c]})},borrowFlashLoan:(r,i)=>{let s=a.utils.parseCoinType(i);return t.moveCall({target:`${e.protocolPkg}::flash_loan::borrow_flash_loan`,arguments:[t.object(e.version),t.object(e.market),t.pure(r)],typeArguments:[s]})},repayFlashLoan:(r,i,s)=>{let c=a.utils.parseCoinType(s);return t.moveCall({target:`${e.protocolPkg}::flash_loan::repay_flash_loan`,arguments:[t.object(e.version),t.object(e.market),t.pure(r),t.object(i)],typeArguments:[c]})}}},N=async({builder:a,txBlock:t})=>{let e=await Ml({builder:a,txBlock:t}),n=await ut({builder:a,txBlock:t});return{normalMethod:e,addCollateralQuick:async(o,r,i)=>{let s=M(t),{obligationId:c}=await oe(t,a,i);if(r==="sui"){let[l]=t.splitCoins(t.gas,[o]);e.addCollateral(c,l,r)}else{let{leftCoin:l,takeCoin:d}=await a.selectCoin(t,r,o,s);e.addCollateral(c,d,r),t.transferObjects([l],s)}},takeCollateralQuick:async(o,r,i,s)=>{let c=await oe(t,a,i,s),l=await a.query.getObligationCoinNames(c.obligationId);return await ae(a,t,l),e.takeCollateral(c.obligationId,c.obligationKey,o,r)},depositQuick:async(o,r,i)=>{if(r==="sui"){let[l]=t.splitCoins(t.gas,[o]);return e.deposit(l,r)}let{leftCoin:s,takeCoin:c}=await a.selectCoin(t,r,o,i);return t.transferObjects([s],i),e.deposit(c,r)},withdrawQuick:async(o,r)=>{let i=M(t),s=a.utils.parseMarketCoinName(r);try{let c=a.utils.parseSCoinName(r);if(!c)throw new Error(`No sCoin for ${r}`);let{leftCoin:l,takeCoin:d,totalAmount:u}=await a.selectSCoin(t,c,o,i);t.transferObjects([l],i);let p=n.burnSCoin(c,d),m=e.withdraw(p,r),f=o-u;try{if(f>0){let{leftCoin:S,takeCoin:I}=await a.selectMarketCoin(t,s,f,i);t.transferObjects([S],i),t.mergeCoins(m,[e.withdraw(I,r)])}}catch{}return m}catch{let{leftCoin:l,takeCoin:d}=await a.selectMarketCoin(t,s,o,i);return t.transferObjects([l],i),e.withdraw(d,r)}},borrowQuick:async(o,r,i,s)=>{let c=await oe(t,a,i,s),d=[...await a.query.getObligationCoinNames(c.obligationId),r];return await ae(a,t,d),e.borrow(c.obligationId,c.obligationKey,o,r)},borrowWithReferralQuick:async(o,r,i,s,c)=>{let l=await oe(t,a,s,c),u=[...await a.query.getObligationCoinNames(l.obligationId),r];return await ae(a,t,u),e.borrowWithReferral(l.obligationId,l.obligationKey,i,o,r)},repayQuick:async(o,r,i,s)=>{let c=await oe(t,a,i);if(r==="sui"){let[u]=t.splitCoins(t.gas,[o]);return e.repay(c.obligationId,u,r)}let{leftCoin:l,takeCoin:d}=await a.selectCoin(t,r,o,s);return t.transferObjects([l],s),e.repay(c.obligationId,d,r)},updateAssetPricesQuick:async o=>ae(a,t,o)}};import{SUI_CLOCK_OBJECT_ID as ba}from"@mysten/sui.js/utils";var ga=async({builder:a,txBlock:t})=>{let e={referralPgkId:a.address.get("referral.id"),referralBindings:a.address.get("referral.referralBindings"),referralRevenuePool:a.address.get("referral.referralRevenuePool"),authorizedWitnessList:a.address.get("referral.authorizedWitnessList"),referralTiers:a.address.get("referral.referralTiers"),version:a.address.get("referral.version")},n=a.address.get("vesca.table");return{bindToReferral:o=>t.moveCall({target:`${e.referralPgkId}::referral_bindings::bind_ve_sca_referrer`,arguments:[t.object(e.referralBindings),t.pure(o),t.object(n),t.object(ba)],typeArguments:[]}),claimReferralTicket:o=>{let r=a.utils.parseCoinType(o);return t.moveCall({target:`${e.referralPgkId}::scallop_referral_program::claim_ve_sca_referral_ticket`,arguments:[t.object(e.version),t.object(n),t.object(e.referralBindings),t.object(e.authorizedWitnessList),t.object(e.referralTiers),t.object(ba)],typeArguments:[r]})},burnReferralTicket:(o,r)=>{let i=a.utils.parseCoinType(r);return t.moveCall({target:`${e.referralPgkId}::scallop_referral_program::burn_ve_sca_referral_ticket`,arguments:[t.object(e.version),t.object(o),t.object(e.referralRevenuePool),t.object(ba)],typeArguments:[i]})},claimReferralRevenue:(o,r)=>{let i=a.utils.parseCoinType(r);return t.moveCall({target:`${e.referralPgkId}::referral_revenue_pool::claim_revenue_with_ve_sca_key`,arguments:[t.object(e.version),t.object(e.referralRevenuePool),t.object(o),t.object(ba)],typeArguments:[i]})}}},Pi=async({builder:a,txBlock:t})=>{let e=await ga({builder:a,txBlock:t});return{claimReferralRevenueQuick:async(n,o,r=[...z])=>{let i=[];for(let s=0;s<r.length;s++)if(r[s]==="sui"){let c=e.claimReferralRevenue(n,r[s]);i.push(c)}else{let c=e.claimReferralRevenue(n,r[s]);try{let l=await a.utils.selectCoinIds(1/0,a.utils.parseCoinType(r[s]),o);t.mergeCoins(c,l.slice(0,500))}catch{}finally{i.push(c)}}i.length>0&&t.transferObjects(i,t.pure(o))}}};var Bl={packageId:"0x5857d185897aaff40ae37b2eecc895efc1a9dff1b210c4fb894eabbce4ac2603"},_i={check_slippage:(a,t,e,n,o)=>a.moveCall({target:`${Bl.packageId}::slippage_check::check_slippage`,arguments:[t,a.pure(e),a.pure(n)],typeArguments:[o]})};import{SUI_CLOCK_OBJECT_ID as ha}from"@mysten/sui.js/utils";var Ri=async(a,t,e,n,o,r,i=!1)=>{let s=await ut({builder:a,txBlock:t}),c=await Mi({builder:a,txBlock:t});try{let{takeCoin:l,leftCoin:d,totalAmount:u}=i?await a.selectSCoin(t,n,o,r):await a.selectMarketCoin(t,n,o,r);if(i){let p=s.burnSCoin(n,l);c.stake(e,p,n)}else c.stake(e,l,n);return t.transferObjects([d],r),u}catch{return 0}},ji=async(...a)=>{let[t,e,n,o]=a;if(a.length===4&&o)return[o];let r=M(e);return(await ne(t.query,r))[n].map(s=>s.id)},Nl=async(...a)=>{let[t,e,n,o]=a,r=M(e),i=await ne(t.query,r);if(i[n].length===0)throw new Error(`No stake account found for sender ${r}`);return o?i[n].filter(c=>c.id===o):i[n]},Mi=async({builder:a,txBlock:t})=>{let e={spoolPkg:a.address.get("spool.id")},n={},o={},r={};return ct.forEach(i=>{let s=a.address.get(`spool.pools.${i}.id`),c=a.address.get(`spool.pools.${i}.rewardPoolId`),l=a.utils.parseMarketCoinType(i);n[i]=s,o[i]=c,r[i]=l}),{createStakeAccount:i=>{let s=r[i],c=n[i];return t.moveCall({target:`${e.spoolPkg}::user::new_spool_account`,arguments:[t.object(c),t.object(ha)],typeArguments:[s]})},stake:(i,s,c)=>{let l=r[c],d=n[c];t.moveCall({target:`${e.spoolPkg}::user::stake`,arguments:[t.object(d),t.object(i),typeof s=="string"?t.pure(s):s,t.object(ha)],typeArguments:[l]})},unstake:(i,s,c)=>{let l=r[c],d=n[c];return t.moveCall({target:`${e.spoolPkg}::user::unstake`,arguments:[t.object(d),t.object(i),t.pure(s),t.object(ha)],typeArguments:[l]})},claim:(i,s)=>{let c=n[s],l=o[s],d=r[s],u=Dn[s],p=a.utils.parseCoinType(u);return t.moveCall({target:`${e.spoolPkg}::user::redeem_rewards`,arguments:[t.object(c),t.object(l),t.object(i),t.object(ha)],typeArguments:[d,p]})}}},Z=async({builder:a,txBlock:t})=>{let e=await Mi({builder:a,txBlock:t}),n=await ut({builder:a,txBlock:t});return{normalMethod:e,stakeQuick:async(o,r,i)=>{let s=M(t),c=await ji(a,t,r,i),l=[];if(c.length===0){let d=e.createStakeAccount(r);l.push(d)}if(typeof o=="number"){let d=await Ri(a,t,c.length>0?c[0]:l[0],r,o,s);o-=d,d||await Ri(a,t,c.length>0?c[0]:l[0],r,o,s,!0)}else e.stake(c.length>0?c[0]:l[0],o,r);l.length>0&&t.transferObjects(l,s)},unstakeQuick:async(o,r,i,s)=>{let c=await Nl(a,t,r,i),l=[],d=o;for(let u of c){if(u.staked===0)continue;let p=Math.min(d,u.staked),m=e.unstake(u.id,p,r);if(s){let f=n.mintSCoin(r,m);l.push(f)}else l.push(m);if(d-=p,o<=0)break}if(l.length>0){let u=l[0];return l.length>1&&t.mergeCoins(u,l.slice(1)),u}},claimQuick:async(o,r)=>{let i=await ji(a,t,o,r),s=[];return i.forEach(c=>{let l=e.claim(c,o);s.push(l)}),s}}};import{SUI_CLOCK_OBJECT_ID as re}from"@mysten/sui.js/utils";var El=async({builder:a,txBlock:t})=>{let e={pkgId:a.address.get("vesca.id"),table:a.address.get("vesca.table"),treasury:a.address.get("vesca.treasury"),config:a.address.get("vesca.config")};return{lockSca:(n,o)=>t.moveCall({target:`${e.pkgId}::ve_sca::mint_ve_sca_key`,arguments:[t.object(e.config),t.object(e.table),t.object(e.treasury),typeof n=="string"?t.pure(n):n,t.pure(o),t.object(re)]}),extendLockPeriod:(n,o)=>{t.moveCall({target:`${e.pkgId}::ve_sca::extend_lock_period`,arguments:[t.object(e.config),t.object(n),t.object(e.table),t.object(e.treasury),t.pure(o),t.object(re)]})},extendLockAmount:(n,o)=>{t.moveCall({target:`${e.pkgId}::ve_sca::lock_more_sca`,arguments:[t.object(e.config),t.object(n),t.object(e.table),t.object(e.treasury),typeof o=="string"?t.pure(o):o,t.object(re)]})},renewExpiredVeSca:(n,o,r)=>{t.moveCall({target:`${e.pkgId}::ve_sca::renew_expired_ve_sca`,arguments:[t.object(e.config),t.object(n),t.object(e.table),t.object(e.treasury),typeof o=="string"?t.pure(o):o,t.pure(r),t.object(re)]})},redeemSca:n=>t.moveCall({target:`${e.pkgId}::ve_sca::redeem`,arguments:[t.object(e.config),t.object(n),t.object(e.table),t.object(e.treasury),t.object(re)]}),mintEmptyVeSca:()=>t.moveCall({target:`${e.pkgId}::ve_sca::mint_ve_sca_placeholder_key`,arguments:[t.object(e.config),t.object(e.table)],typeArguments:[]})}},pt=async({builder:a,txBlock:t})=>{let e=await El({builder:a,txBlock:t});return{normalMethod:e,lockScaQuick:async(n,o,r=!0)=>{let i=M(t),s=await jt(a,t),c,l=[];if(n!==void 0&&typeof n=="number"){let m=await a.utils.selectCoinIds(n,it,i),[f,S]=a.utils.takeAmountFromCoins(t,m,n);c=f,l.push(S)}else c=n;let d=a.utils.getUnlockAt(o,s?.unlockAt);r&&hi(n,o,d,s?.unlockAt),console.log(new Date(d*1e3).toLocaleString("en-CA",{hour12:!0}));let u=!s?.unlockAt,p=!u&&s.unlockAt*1e3<=new Date().getTime();if(u||p){if(c)if(u){let m=e.lockSca(c,d);l.push(m)}else{if(s.lockedScaAmount!==0){let m=e.redeemSca(s.keyId);l.push(m)}e.renewExpiredVeSca(s.keyId,c,d)}}else c&&o?(e.extendLockPeriod(s.keyId,d),e.extendLockAmount(s.keyId,c)):o?e.extendLockPeriod(s.keyId,d):c&&e.extendLockAmount(s.keyId,c);l.length>0&&t.transferObjects(l,i)},extendLockPeriodQuick:async(n,o,r=!0)=>{let i=await jt(a,t,o),s=a.utils.getUnlockAt(n);r&&yi(n,s,i?.unlockAt),i&&e.extendLockPeriod(i.keyId,s)},extendLockAmountQuick:async(n,o,r=!0)=>{let i=M(t),s=await jt(a,t,o);if(r&&Si(n,s?.unlockAt),s){let c=await a.utils.selectCoinIds(n,it,i),[l,d]=a.utils.takeAmountFromCoins(t,c,n);e.extendLockAmount(s.keyId,l),t.transferObjects([d],i)}},renewExpiredVeScaQuick:async(n,o,r,i=!0)=>{let s=M(t),c=await jt(a,t,r),l=a.utils.getUnlockAt(o,c?.unlockAt);if(i&&wi(n,o,c?.unlockAt),c){let d=[];if(c.lockedScaAmount!==0){let f=e.redeemSca(c.keyId);d.push(f)}let u=await a.utils.selectCoinIds(n,it,s),[p,m]=a.utils.takeAmountFromCoins(t,u,n);d.push(m),e.renewExpiredVeSca(c.keyId,p,l),t.transferObjects(d,s)}},redeemScaQuick:async n=>{let o=M(t),r=await jt(a,t,n);if(_t(r?.unlockAt),r){let i=e.redeemSca(r.keyId);t.transferObjects([i],o)}}}};import{normalizeStructTag as Ul}from"@mysten/sui.js/utils";import{SUI_CLOCK_OBJECT_ID as Wl}from"@mysten/sui.js/utils";var Mt={id:"0x000000000000000000000000000000000000000000000000000000000000dee9",pools:{sui2usdc:{object:{objectId:"0x4405b50d791fd3346754e8171aaab6bc2ed26c2c46efdd033c14b30ae507ac33",initialSharedVersion:"32079148",mutable:!0},lotsize:1e8},usdt2usdc:{object:{objectId:"0xd1f0a9baacc1864ab19534e2d4c5d6c14f2e071a1f075e8e7f9d51f2c17dc238",initialSharedVersion:"32079148",mutable:!0},lotsize:1e5},wusdc2usdc:{object:{objectId:"0x39f2f7c126189b9b5cda6b770ab34031dde22307d19842e95ab576873c77fa14",initialSharedVersion:"82838334",mutable:!0},lotsize:1e5}}},Bi={id:"0x000000000000000000000000000000000000000000000000000000000000dee9"},Fo={id:"0x2c6c36393db063a9534885d22a47caead720272475336470736be28f119971f3"},Ni={clob_v2:{swap_exact_quote_for_base:"clob_v2::swap_exact_quote_for_base",swap_exact_base_for_quote:"clob_v2::swap_exact_base_for_quote",create_account:"clob_v2::create_account"}};var Ei={objectId:Wl,initialSharedVersion:"1",mutable:!1},Ll=(a,t)=>{if(a==="sui")switch(t){case"wusdc":return{pool:Mt.pools.sui2usdc,aToB:!0};default:throw new Error(`Invalid coin pair: ${a} and ${t}`)}else if(a==="wusdc")switch(t){case"sui":return{pool:Mt.pools.sui2usdc,aToB:!1};case"wusdt":return{pool:Mt.pools.usdt2usdc,aToB:!1};case"usdc":return{pool:Mt.pools.wusdc2usdc,aToB:!0};default:throw new Error(`Invalid coin pair: ${a} and ${t}`)}else if(a==="wusdt")switch(t){case"wusdc":return{pool:Mt.pools.usdt2usdc,aToB:!0};default:throw new Error(`Invalid coin pair: ${a} and ${t}`)}else throw new Error(`Invalid coin pair: ${a} and ${t}`)},$o={createAccount:a=>a.moveCall({target:`${Bi.id}::${Ni.clob_v2.create_account}`,arguments:[],typeArguments:[]}),swap:(a,t,e,n,o,r,i)=>{let{pool:s,aToB:c}=Ll(e,n),l=i.parseCoinType(e),d=i.parseCoinType(n),u=typeof r=="string"?a.object(r):"objectId"in r?a.objectRef(r):a.object(r);if(!s)throw new Error(`Deepbook: No pool found for ${e} to ${n}`);return c?a.moveCall({target:`${Fo.id}::deepbook::deepbook_base_for_quote`,arguments:[a.sharedObjectRef(s.object),a.pure(o),u,a.object(t),a.sharedObjectRef(Ei),a.pure(s.lotsize)],typeArguments:[l,d]}):a.moveCall({target:`${Fo.id}::deepbook::deepbook_quote_for_base`,arguments:[a.sharedObjectRef(s.object),a.pure(o),u,a.sharedObjectRef(Ei),a.object(t),a.pure(s.lotsize)],typeArguments:[d,l]})}};var ya=class{suiClient;scallopUtils;_clientOrderId=0;_accountCap;currentAddress;constructor({client:t,currentAddress:e,accountCap:n,scallopUtils:o}){this.currentAddress=e,this.suiClient=t,this._accountCap=n,this.scallopUtils=o}get clientOrderId(){let t=this._clientOrderId;return this._clientOrderId++,t}async accountCap(t){if(this._accountCap)return this._accountCap;try{let{data:e}=await this.suiClient.getOwnedObjects({owner:this.currentAddress,filter:{StructType:Ul("0xdee9::custodian_v2::AccountCap")},limit:1});return e.length===0||!e[0].data?$o.createAccount(t):{objectId:e[0].data.objectId,version:e[0].data.version,digest:e[0].data.digest}}catch{throw new Error("Failed to create account cap")}}async swapToken({tokenObjectIn:t,baseCoinName:e,quoteCoinName:n,tx:o}){let r=await this.accountCap(o);return{swapResult:$o.swap(o,t,e,n,this.clientOrderId,r,this.scallopUtils),accountCap:r}}};var Sa=class{params;client;address;builder;query;utils;walletAddress;deepbookSwap;constructor(t,e){this.params=t,this.client=t.client,this.address=e,this.utils=new ua(t,this.address),this.query=new da(t,{address:this.address,utils:this.utils}),this.builder=new ia(t,{address:this.address,query:this.query,utils:this.utils}),this.deepbookSwap=new ya({client:this.client,currentAddress:this.params.walletAddress,scallopUtils:this.utils})}async getObligations(t){let e=t||this.params.walletAddress;return this.query.getObligations(e)}async getAllStakeAccounts(t){let e=t||this.params.walletAddress;return this.query.getAllStakeAccounts(e)}async getStakeAccounts(t,e){let n=e||this.params.walletAddress;return this.query.getStakeAccounts(t,n)}async getStakePool(t){return this.query.getStakePool(t)}async getStakeRewardPool(t){return this.query.getStakeRewardPool(t)}async openObligation(t){let e=new T,n=await N({builder:this.builder,txBlock:e}),o=await B({builder:this.builder,txBlock:e}),r=t||this.params.walletAddress;e.setSender(r);let[i,s,c]=n.normalMethod.openObligation();return o.normalMethod.stakeObligation(i,s),n.normalMethod.returnObligation(i,c),e.transferObjects([s],r),e}async depositCollateral(t,e,n,o){let r=new T,i=o||this.params.walletAddress;r.setSender(i);let s=await N({builder:this.builder,txBlock:r}),c=await this.query.getObligations(i),l=n||c?.[0]?.id;if(l)await s.addCollateralQuick(e,t,l);else{let[d,u,p]=s.normalMethod.openObligation();await s.addCollateralQuick(e,t,d),s.normalMethod.returnObligation(d,p),r.transferObjects([u],i)}return r}async withdrawCollateral(t,e,n,o,r){let i=new T,s=await N({builder:this.builder,txBlock:i}),c=r||this.params.walletAddress;i.setSender(c);let l=await s.takeCollateralQuick(e,t,n,o);return i.transferObjects([l],c),i}async deposit(t,e,n){let o=new T,r=await N({builder:this.builder,txBlock:o}),i=await ut({builder:this.builder,txBlock:o}),s=n||this.params.walletAddress;o.setSender(s);let c=await r.depositQuick(e,t,n),l=this.utils.parseMarketCoinName(t);if(!J.includes(l))o.transferObjects([c],s);else{let d=i.mintSCoin(l,c);o.transferObjects([d],s)}return o}async withdraw(t,e,n){let o=new T,r=n||this.params.walletAddress,i=await N({builder:this.builder,txBlock:o});o.setSender(r);let s=await i.withdrawQuick(e,t);return o.transferObjects([s],r),o}async borrow(t,e,n,o,r){let i=new T,s=await N({builder:this.builder,txBlock:i}),c=await B({builder:this.builder,txBlock:i}),l=r||this.params.walletAddress;i.setSender(l);let d=lt.includes(t);d&&await c.unstakeObligationQuick(n,o);let u=await s.borrowQuick(e,t,n,o);return i.transferObjects([u],l),d&&await c.stakeObligationQuick(n,o),i}async borrowWithBoost(t,e,n,o,r,i){let s=new T,c=await N({builder:this.builder,txBlock:s}),l=await B({builder:this.builder,txBlock:s}),d=i||this.params.walletAddress;s.setSender(d);let u=lt.includes(t);u&&await l.unstakeObligationQuick(n,o);let p=await c.borrowQuick(e,t,n,o);return s.transferObjects([p],d),u&&await l.stakeObligationWithVeScaQuick(n,o,r),s}async borrowWithReferral(t,e,n,o,r,i){let s=new T,c=await N({builder:this.builder,txBlock:s}),l=await B({builder:this.builder,txBlock:s}),d=await ga({builder:this.builder,txBlock:s}),u=i||this.params.walletAddress;s.setSender(u);let p=lt.includes(t);p&&await l.unstakeObligationQuick(n,o);let m=d.claimReferralTicket(t),f=await c.borrowWithReferralQuick(e,t,m,n,o);return d.burnReferralTicket(m,t),s.transferObjects([f],u),p&&r?await l.stakeObligationWithVeScaQuick(n,o,r):await l.stakeObligationQuick(n,o),s}async repay(t,e,n,o,r){let i=new T,s=await N({builder:this.builder,txBlock:i}),c=await B({builder:this.builder,txBlock:i}),l=r||this.params.walletAddress;i.setSender(l);let d=lt.includes(t);return d&&await c.unstakeObligationQuick(n,o),await s.repayQuick(e,t,n,l),d&&await c.stakeObligationQuick(n,o),i}async repayWithBoost(t,e,n,o,r){let i=new T,s=await N({builder:this.builder,txBlock:i}),c=await B({builder:this.builder,txBlock:i}),l=r||this.params.walletAddress;i.setSender(l);let d=lt.includes(t);return d&&await c.unstakeObligationQuick(n,void 0),await s.repayQuick(e,t,n,l),d&&await c.stakeObligationWithVeScaQuick(n,void 0,o),i}async createStakeAccount(t,e){let n=new T,o=await Z({builder:this.builder,txBlock:n}),r=e||this.params.walletAddress;n.setSender(r);let i=o.normalMethod.createStakeAccount(t);return n.transferObjects([i],r),n}async supplyAndStake(t,e,n,o){let r=new T,i=await N({builder:this.builder,txBlock:r}),s=await Z({builder:this.builder,txBlock:r}),c=o||this.params.walletAddress;r.setSender(c);let l=await i.depositQuick(e,t,o),d=this.utils.parseMarketCoinName(t);if(!ct.find(m=>m===d))return r;let u=await this.query.getStakeAccounts(d,c),p=n||(u.length>0?u[0].id:void 0);if(p)await s.stakeQuick(l,d,p);else{let m=s.normalMethod.createStakeAccount(d);await s.stakeQuick(l,d,m),r.transferObjects([m],c)}return r}async unstakeAndWithdraw(t,e,n){let o=new T,r=await N({builder:this.builder,txBlock:o}),i=await Z({builder:this.builder,txBlock:o}),s=this.params.walletAddress,c=[];o.setSender(s);let l=this.utils.parseMarketCoinName(t);for(let d=0;d<n.length;d++){let u=n[d],[p]=await i.unstakeQuick(u.coin,l,u.id);if(p){let m=r.normalMethod.withdraw(p,t);c.push(m)}}if(e>0){let d=await r.withdrawQuick(e,t);c.push(d)}return c.length>1&&o.mergeCoins(c[0],c.slice(1)),o.transferObjects(c,s),o}async stake(t,e,n,o){let r=new T,i=await Z({builder:this.builder,txBlock:r}),s=o||this.params.walletAddress;r.setSender(s);let c=await this.query.getStakeAccounts(t,s),l=n||(c.length>0?c[0].id:void 0);if(l)await i.stakeQuick(e,t,l);else{let d=i.normalMethod.createStakeAccount(t);await i.stakeQuick(e,t,d),r.transferObjects([d],s)}return r}async unstake(t,e,n,o){let r=new T,i=await Z({builder:this.builder,txBlock:r}),s=o||this.params.walletAddress;r.setSender(s);let c=J.includes(t),l=await i.unstakeQuick(e,t,n,c);return r.transferObjects([l],r.pure(s)),r}async claim(t,e,n,o){let r=new T,i=await Z({builder:this.builder,txBlock:r}),s=await B({builder:this.builder,txBlock:r}),c=o||this.params.walletAddress;r.setSender(c);let l={sui:[],sca:[]};for(let d=0;d<t.length;d++){let{stakeMarketCoinName:u,stakeAccountId:p}=t[d],m=i.normalMethod.claim(p,u);l.sui.push(m)}for(let d=0;d<e.length;d++){let{obligationId:u,obligationKey:p,rewardCoinName:m}=e[d],f=s.normalMethod.claimBorrowIncentive(u,p,m);l[m].push(f)}for(let d=0;d<n.length;d++){let{obligationId:u,obligationKey:p,rewardCoinName:m}=n[d],f=s.normalMethod.oldClaimBorrowIncentive(u,p,m);l[m].push(f)}return l.sui.length>0&&(l.sui.length>1&&r.mergeCoins(l.sui[0],l.sui.slice(1)),r.transferObjects([l.sui[0]],r.pure(c))),l.sca.length>0&&(l.sca.length>1&&r.mergeCoins(l.sca[0],l.sca.slice(1)),r.transferObjects([l.sca[0]],r.pure(c))),r}async stakeObligation(t,e,n){let o=this.builder.createTxBlock(),r=await B({builder:this.builder,txBlock:o}),i=n||this.params.walletAddress;return o.setSender(i),await r.stakeObligationQuick(t,e),o}async unstakeObligation(t,e,n){let o=this.builder.createTxBlock(),r=await B({builder:this.builder,txBlock:o}),i=n||this.params.walletAddress;return o.setSender(i),await r.unstakeObligationQuick(t,e),o}async stakeSca(t,e=!1,n=!1,o,r,i,s,c){let l=new T,d=await pt({builder:this.builder,txBlock:l}),u=await B({builder:this.builder,txBlock:l}),p=c||this.params.walletAddress;l.setSender(p);let m=await this.builder.utils.selectCoinIds(t,it,p),[f,S]=this.builder.utils.takeAmountFromCoins(l,m,t),I;return s?d.normalMethod.extendLockAmount(s,f):I=d.normalMethod.lockSca(f,i),o&&r&&(e&&(n?u.normalMethod.oldUnstakeObligation(o,r):u.normalMethod.unstakeObligation(o,r)),u.normalMethod.stakeObligationWithVesca(o,r,s||I)),s||l.transferObjects([I,S],p),l}async stakeMoreSca(t,e,n){let o=new T,r=n||this.params.walletAddress;return o.setSender(r),o}async extendStakeScaLockPeriod(t,e,n,o,r=!1,i=!1,s){let c=new T,l=await pt({builder:this.builder,txBlock:c}),d=await B({builder:this.builder,txBlock:c}),u=s||this.params.walletAddress;return c.setSender(u),l.normalMethod.extendLockPeriod(e,t),n&&o&&(r&&(i?d.normalMethod.oldUnstakeObligation(n,o):d.normalMethod.unstakeObligation(n,o)),d.normalMethod.stakeObligationWithVesca(n,o,e)),c}async extendPeriodAndStakeMoreSca(t,e,n,o,r,i=!1,s=!1,c){let l=new T,d=await pt({builder:this.builder,txBlock:l}),u=await B({builder:this.builder,txBlock:l}),p=c||this.params.walletAddress;l.setSender(p);let m=await this.builder.utils.selectCoinIds(t,it,p),[f,S]=this.builder.utils.takeAmountFromCoins(l,m,t);return d.normalMethod.extendLockPeriod(e,n),d.normalMethod.extendLockAmount(e,f),l.transferObjects([S],p),!o||!r||(i&&(s?u.normalMethod.oldUnstakeObligation(o,r):u.normalMethod.unstakeObligation(o,r)),u.normalMethod.stakeObligationWithVesca(o,r,e)),l}async renewExpiredStakeSca(t,e,n,o=!1,r,i,s=!1,c=!1,l){let d=new T,u=await pt({builder:this.builder,txBlock:d}),p=await B({builder:this.builder,txBlock:d}),m=l||this.params.walletAddress;if(d.setSender(m),o){let v=u.normalMethod.redeemSca(n);d.transferObjects([v],m)}let f=await this.builder.utils.selectCoinIds(t,it,m),[S,I]=this.builder.utils.takeAmountFromCoins(d,f,t);return d.transferObjects([I],m),u.normalMethod.renewExpiredVeSca(n,S,e),!r||!i||(s&&(c?p.normalMethod.oldUnstakeObligation(r,i):p.normalMethod.unstakeObligation(r,i)),p.normalMethod.stakeObligationWithVesca(r,i,n)),d}async redeemSca(t){let e=new T,n=await pt({builder:this.builder,txBlock:e}),o=this.params.walletAddress;return e.setSender(o),await n.redeemScaQuick(t),e}async migrateAndClaim(t,e,n,o){let r=new T,i=await B({builder:this.builder,txBlock:r}),s=this.params.walletAddress;r.setSender(s);let c=i.normalMethod.oldClaimBorrowIncentive(e,t,n);return r.transferObjects([c],s),await i.unstakeObligationQuick(e,t),o?await i.stakeObligationWithVeScaQuick(e,t,o):await i.stakeObligationQuick(e,t),r}async withdrawUnlockedSca(t,e){let n=new T,o=await pt({builder:this.builder,txBlock:n}),r=e||this.params.walletAddress;return n.setSender(r),await o.redeemScaQuick(t),n}calculateAvailableClaimCoin(t,e){let n=new Wi(t.weightedAmount),r=e.currentPointIndex?Wi(e.currentPointIndex-t.index).dividedBy(1e9):1;return n.multipliedBy(r).plus(t.points).shiftedBy(-1*e.coinDecimal)}async createReferralLink(){let t=new T,e=await pt({builder:this.builder,txBlock:t}),n=this.params.walletAddress;t.setSender(n);let o=e.normalMethod.mintEmptyVeSca();return t.transferObjects([o],n),t}async claimRevenuReferral(t,e){let n=new T,o=await Pi({builder:this.builder,txBlock:n}),r=this.params.walletAddress;n.setSender(r);let i=e.map(s=>this.utils.parseCoinNameFromType(s));return await o.claimReferralRevenueQuick(t,r,i),n}async bindReferral(t){let e=new T,n=await ga({builder:this.builder,txBlock:e}),o=this.params.walletAddress;return e.setSender(o),n.bindToReferral(t),e}async migrateAllMarketCoin(){let t=new T,e=await ut({builder:this.builder,txBlock:t}),n=await Z({builder:this.builder,txBlock:t});t.setSender(this.params.walletAddress);let o=[];return await Promise.all(J.map(async r=>{let i=[],s;try{let c=await this.utils.selectCoinIds(Number.MAX_SAFE_INTEGER,this.utils.parseMarketCoinType(r),this.params.walletAddress),l=c[0];c.length>1&&t.mergeCoins(l,c.slice(1)),s=l}catch(c){if(!c.toString().includes("No valid coins found for the transaction"))throw c}if(s){let c=e.mintSCoin(r,s);try{let l=await this.utils.selectCoinIds(Number.MAX_SAFE_INTEGER,this.utils.parseSCoinType(r),this.params.walletAddress);t.mergeCoins(c,l)}catch(l){console.log(l)}i.push(c)}if(ct.includes(r))try{let c=await n.unstakeQuick(Number.MAX_SAFE_INTEGER,r);c&&i.push(c)}catch(c){console.log(c)}if(i.length>0){let c=i[0];i.length>1&&t.mergeCoins(c,i.slice(1)),o.push(c)}})),o.length>0&&t.transferObjects(o,this.params.walletAddress),t}async migrateLendingWusdcToUsdcNative(t,e,n,o,r){let i=new T,s=await N({builder:this.builder,txBlock:i}),c=await Z({builder:this.builder,txBlock:i}),l=this.params.walletAddress,d=[],u=this.utils.parseMarketCoinName(t),p=this.utils.parseMarketCoinType(u),f=(await this.utils.selectCoinsMarketCoin(p,l)).map(R=>R.objectId);i.setSender(l);for(let R=0;R<r.length;R++){let F=r[R],[L]=await c.unstakeQuick(F.coin,u,F.id);if(L){f.length>0&&i.mergeCoins(L,f);let Zi=s.normalMethod.withdraw(L,t);d.push(Zi)}}if(e>0){let R=await s.withdrawQuick(e,t);d.push(R)}d.length>1&&i.mergeCoins(d[0],d.slice(1));let[S]=i.splitCoins(d[0],[i.pure(o)]);i.transferObjects([d[0]],l);let{swapResult:I,accountCap:v}=await this.deepbookSwap.swapToken({baseCoinName:"wusdc",quoteCoinName:"usdc",tokenObjectIn:S,tx:i});typeof v=="string"&&i.transferObjects([v],l),_i.check_slippage(i,I,n,o,this.query.utils.parseCoinType("usdc"));let W=s.normalMethod.deposit(I,"usdc");return await c.stakeQuick(W,"susdc"),i}};var ie=class{params;client;builder;query;utils;address;constructor(t){this.params=t,this.address=t.address}async init(){this.address||(this.address=new ra({id:ai})),await this.address.read(),this.client=new Sa(this.params,this.address);let{builder:t,query:e,utils:n}=this.client;this.builder=t,this.query=e,this.utils=n}};var wa=class{application="scallop";supportSDK="@mysten/sui.js";scallop;async deserialize(t){this.scallop||(this.scallop=new ie({client:t.suiClient,walletAddress:t.account.address}),await this.scallop.init());let{transactionBlock:e}=t;console.log("transactionBlock",e);let n=new On(e,this.scallop),o=new Pn(e,this.scallop),r=new _n(e,this.scallop),i=n.decode()||o.decode()||r.decode();if(!i)throw new Error("Unknown transaction type");return{txType:Fl.Other,txSubType:i.type,intentionData:i.intentionData}}async build(t){let{suiClient:e,account:n,network:o,txSubType:r,intentionData:i}=t;this.scallop||(this.scallop=new ie({client:t.suiClient,walletAddress:t.account.address}),await this.scallop.init());let s;switch(r){case"SupplyLending":s=Qn.fromData(i);break;case"WithdrawLending":s=Gn.fromData(i);break;case"Borrow":s=Rn.fromData(i);break;case"Repay":s=Fn.fromData(i);break;case"DepositCollateral":s=Nn.fromData(i);break;case"WithdrawCollateral":s=Kn.fromData(i);break;case"OpenObligation":s=Un.fromData(i);break;case"StakeSpool":s=qn.fromData(i);break;case"UnstakeSpool":s=Vn.fromData(i);break;case"ClaimIncentiveReward":s=Bn.fromData(i);break;case"BorrowWithBoost":s=jn.fromData(i);break;case"StakeSca":s=na.fromData(i);break;case"ExtendStakePeriod":s=Zn.fromData(i);break;case"ExtendPeriodAndStakeMore":s=Yn.fromData(i);break;case"RenewExpStakePeriod":s=ea.fromData(i);break;case"WithdrawStakedSca":s=oa.fromData(i);break;case"SupplyAndStakeLending":s=aa.fromData(i);break;case"WithdrawAndUnstakeLending":s=Hn.fromData(i);break;case"RedeemSca":s=ta.fromData(i);break;case"MigrateAndClaim":s=En.fromData(i);break;case"BorrowWithReferral":s=Mn.fromData(i);break;case"CreateReferralLink":s=Xn.fromData(i);break;case"ClaimRevenueReferral":s=Jn.fromData(i);break;case"BindReferral":s=zn.fromData(i);break;case"MigrateScoin":s=Wn.fromData(i);break;case"RepayWithBoost":s=$n.fromData(i);break;case"MigrateWusdcToUsdc":s=Ln.fromData(i);break;default:throw new Error("not implemented")}return s.build({suiClient:e,account:n,network:o,scallop:this.scallop})}};import{TransactionType as ud}from"@msafe/sui3-utils";import{LIQUID_STAKING_INFO_MAP as pd,LstId as md}from"@suilend/frontend-sui";import{LstClient as fd}from"@suilend/springsui-sdk";import{TransactionType as qo}from"@msafe/sui3-utils";var Ia=class{constructor(t,e){this.transaction=t;this.simResult=e}decode(){if(this.isMintTransaction())return this.decodeMint();if(this.isMintAndDepositTransaction())return this.decodeMintAndDeposit();if(this.isRedeemTransaction())return this.decodeRedeem();throw new Error("Unknown transaction type")}get commands(){return this.transaction.getData().commands}getMoveCallCommand(t){return this.commands.find(e=>e.$kind==="MoveCall"&&e.MoveCall.function===t)}hasSuilendDepositTransactionMoveCallCommands(){return!!this.getMoveCallCommand("deposit_liquidity_and_mint_ctokens")&&!!this.getMoveCallCommand("deposit_ctokens_into_obligation")}hasMintTransactionMoveCallCommands(){return!!this.getMoveCallCommand("mint")}isMintTransaction(){return this.hasMintTransactionMoveCallCommands()&&!this.hasSuilendDepositTransactionMoveCallCommands()}isMintAndDepositTransaction(){return this.hasMintTransactionMoveCallCommands()&&this.hasSuilendDepositTransactionMoveCallCommands()}isRedeemTransaction(){return!!this.getMoveCallCommand("redeem")}decodeMint(){let e={MintEvent:this.simResult.events.find(n=>n.type.includes("liquid_staking::MintEvent"))}.MintEvent.parsedJson.event.sui_amount_in;return console.log("Decoder.decodeMint",e),{txType:qo.Other,type:"mint",intentionData:{amount:e}}}decodeMintAndDeposit(){return{txType:qo.Other,type:"mintAndDeposit",intentionData:this.decodeMint().intentionData}}decodeRedeem(){let e={RedeemEvent:this.simResult.events.find(n=>n.type.includes("liquid_staking::RedeemEvent"))}.RedeemEvent.parsedJson.event.lst_amount_in;return console.log("Decoder.decodeRedeem",e),{txType:qo.Other,type:"redeem",intentionData:{amount:e}}}};import{Transaction as Ql}from"@mysten/sui/transactions";import ql from"sort-keys-recursive";var mt=class{constructor(t){this.data=t}serialize(){return JSON.stringify(ql(this.data))}};var Ca=class a extends mt{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o,lstClient:r,suilendClient:i,obligationOwnerCap:s,obligation:c}=e;console.log("MintIntention.build",n,o,r,i,s,c);let l=new Ql;return r.mintAndRebalanceAndSendToUser(l,o.address,this.data.amount),l}static fromData(e){return console.log("MintIntention.fromData",e),new a(e)}};import{Transaction as Vl}from"@mysten/sui/transactions";var Ta=class a extends mt{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o,lstClient:r,suilendClient:i,obligationOwnerCap:s,obligation:c}=e;console.log("MintAndDepositIntention.build",n,o,r,i,s,c);let l=new Vl;return i.depositCoin(o.address,r.mintAndRebalance(l,this.data.amount),r.liquidStakingObject.type,l,s?.id),l}static fromData(e){return console.log("MintAndDepositIntention.fromData",e),new a(e)}};import{Transaction as Hl}from"@mysten/sui/transactions";var ka=class a extends mt{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o,lstClient:r,suilendClient:i,obligationOwnerCap:s,obligation:c}=e;console.log("RedeemIntention.build",n,o,r,i,s,c);let l=new Hl;return await r.redeemAndSendToUser(l,o.address,this.data.amount),l}static fromData(e){return console.log("RedeemIntention.fromData",e),new a(e)}};import{TransactionType as id}from"@msafe/sui3-utils";import{LENDING_MARKET_ID as sd,LENDING_MARKET_TYPE as cd,SuilendClient as Qo}from"@suilend/sdk";import{phantom as ld}from"@suilend/sdk/_generated/_framework/reified";import{LendingMarket as dd}from"@suilend/sdk/_generated/suilend/lending-market/structs";import{TransactionType as Bt}from"@msafe/sui3-utils";import{fromB64 as Li,toHEX as Ui}from"@mysten/bcs";import{normalizeStructTag as se}from"@mysten/sui/utils";import{maxU64 as Nt}from"@suilend/sdk";import Fi from"bignumber.js";var va=class{constructor(t,e){this.transaction=t;this.simResult=e}decode(){if(this.isDepositTransaction())return this.decodeDeposit();if(this.isWithdrawTransaction())return this.decodeWithdraw();if(this.isBorrowTransaction())return this.decodeBorrow();if(this.isRepayTransaction())return this.decodeRepay();if(this.isClaimTransaction())return this.decodeClaim();if(this.isClaimAndDepositTransaction())return this.decodeClaimAndDeposit();throw new Error("Unknown transaction type")}get inputs(){return console.log("XXX this.transaction.getData().inputs",this.transaction.getData().inputs),this.transaction.getData().inputs}get commands(){return console.log("XXX this.transaction.getData().commands",this.transaction.getData().commands),this.transaction.getData().commands}getMoveCallCommand(t){return this.commands.find(e=>e.$kind==="MoveCall"&&e.MoveCall.function===t)}hasDepositTransactionMoveCallCommands(){return!!this.getMoveCallCommand("deposit_liquidity_and_mint_ctokens")&&!!this.getMoveCallCommand("deposit_ctokens_into_obligation")}hasClaimTransactionMoveCallCommands(){return!!this.getMoveCallCommand("claim_rewards")}isDepositTransaction(){return!this.hasClaimTransactionMoveCallCommands()&&this.hasDepositTransactionMoveCallCommands()}isWithdrawTransaction(){return!!this.getMoveCallCommand("withdraw_ctokens")&&!!this.getMoveCallCommand("redeem_ctokens_and_withdraw_liquidity_request")}isBorrowTransaction(){return!!this.getMoveCallCommand("borrow_request")}isRepayTransaction(){return!!this.getMoveCallCommand("repay")}isClaimTransaction(){return this.hasClaimTransactionMoveCallCommands()&&!this.hasDepositTransactionMoveCallCommands()}isClaimAndDepositTransaction(){return this.hasClaimTransactionMoveCallCommands()&&this.hasDepositTransactionMoveCallCommands()}decodeDeposit(){let t={MintEvent:this.simResult.events.find(o=>o.type.includes("lending_market::MintEvent"))},e=se(t.MintEvent.parsedJson.coin_type.name),n=t.MintEvent.parsedJson.liquidity_amount;return console.log("Decoder.decodeDeposit",e,n),{txType:Bt.Other,type:"deposit",intentionData:{coinType:e,value:n}}}decodeWithdraw(){let t={withdraw_ctokens:this.getMoveCallCommand("withdraw_ctokens")},e={RedeemEvent:this.simResult.events.find(c=>c.type.includes("lending_market::RedeemEvent"))},n=se(e.RedeemEvent.parsedJson.coin_type.name),o=e.RedeemEvent.parsedJson.liquidity_amount;console.log("Decoder.decodeWithdraw",n,o);let r=t.withdraw_ctokens.MoveCall.arguments[4].Input,i=new Fi(Ui(Li(this.inputs[r].Pure.bytes)),16).toString(),s=i===Nt.toString();return console.log("XXX decodeWithdraw - isMax:",s,"inputIndex:",r,"inputValue:",i,"maxU64.toString():",Nt.toString()),s&&(o=Nt.toString()),{txType:Bt.Other,type:"withdraw",intentionData:{coinType:n,value:o}}}decodeBorrow(){let t={borrow_request:this.getMoveCallCommand("borrow_request")},e={BorrowEvent:this.simResult.events.find(c=>c.type.includes("lending_market::BorrowEvent"))},n=se(e.BorrowEvent.parsedJson.coin_type.name),o=`${+e.BorrowEvent.parsedJson.liquidity_amount-+e.BorrowEvent.parsedJson.origination_fee_amount}`;console.log("Decoder.decodeBorrow",n,o);let r=t.borrow_request.MoveCall.arguments[4].Input,i=new Fi(Ui(Li(this.inputs[r].Pure.bytes)),16).toString(),s=i===Nt.toString();return console.log("XXX decodeBorrow - isMax:",s,"inputIndex:",r,"inputValue:",i,"maxU64.toString():",Nt.toString()),s&&(o=Nt.toString()),{txType:Bt.Other,type:"borrow",intentionData:{coinType:n,value:o}}}decodeRepay(){let t={RepayEvent:this.simResult.events.find(o=>o.type.includes("lending_market::RepayEvent"))},e=se(t.RepayEvent.parsedJson.coin_type.name),n=t.RepayEvent.parsedJson.liquidity_amount;return console.log("Decoder.decodeRepay",e,n),{txType:Bt.Other,type:"repay",intentionData:{coinType:e,value:n}}}decodeClaim(){let t={ClaimReward:this.simResult.events.filter(n=>n.type.includes("lending_market::ClaimReward"))},e={};for(let n=0;n<t.ClaimReward.length;n++){let o=t.ClaimReward[n],r=se(o.parsedJson.coin_type.name),i=o.parsedJson.liquidity_amount;e[r]=`${+(e[r]??"0")+ +i}`}return console.log("Decoder.decodeClaimRewards",e),{txType:Bt.Other,type:"claim",intentionData:{value:e}}}decodeClaimAndDeposit(){return{txType:Bt.Other,type:"claimAndDeposit",intentionData:this.decodeClaim().intentionData}}};import{Transaction as zl}from"@mysten/sui/transactions";import Gl from"sort-keys-recursive";var E=class{constructor(t){this.data=t}serialize(){return JSON.stringify(Gl(this.data))}};var xa=class a extends E{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o,suilendClient:r,obligationOwnerCap:i,obligation:s}=e;if(console.log("BorrowIntention.build",n,o,r,i,s),!i||!s)throw new Error("Obligation not found");let c=new zl;return await r.borrowAndSendToUser(o.address,i.id,s.id,this.data.coinType,this.data.value,c),c}static fromData(e){return console.log("BorrowIntention.fromData",e),new a(e)}};import{Transaction as ed}from"@mysten/sui/transactions";import{normalizeStructTag as Yl}from"@mysten/sui/utils";import{Side as ce}from"@suilend/sdk";import Zl from"bignumber.js";import{normalizeStructTag as $i}from"@mysten/sui/utils";var Jl="0x34fe4f3c9e450fed4d0a3c587ed842eec5313c30c3cc3c0841247c49425e246b::suilend_point::SUILEND_POINT",Xl=$i(Jl),qi=a=>$i(a)===Xl;var td=(a,t)=>{let e={[ce.DEPOSIT]:[],[ce.BORROW]:[]};return a.lendingMarket.reserves.forEach(n=>{[ce.DEPOSIT,ce.BORROW].forEach(o=>{let r=o===ce.DEPOSIT?n.depositsPoolRewardManager:n.borrowsPoolRewardManager,i=t.userRewardManagers.find(s=>s.poolRewardManagerId===r.id);i&&(e[o]=r.poolRewards.map((s,c)=>({reserveArrayIndex:n.arrayIndex,rewardIndex:BigInt(c),rewardCoinType:Yl(s.coinType.name),side:o})).filter(s=>!qi(s.rewardCoinType)&&!!i.rewards[Number(s.rewardIndex)]&&new Zl(i.rewards[Number(s.rewardIndex)].earnedRewards.value.toString()).gt(0)))})}),Object.values(e).flat()},Aa=td;var Da=class a extends E{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o,suilendClient:r,obligationOwnerCap:i,obligation:s}=e;if(console.log("ClaimIntention.build",n,o,r,i,s),!i||!s)throw new Error("Obligation not found");let c=new ed;return r.claimRewardsAndSendToUser(o.address,i.id,Aa(r,s),c),c}static fromData(e){return console.log("ClaimIntention.fromData",e),new a(e)}};import{Transaction as nd}from"@mysten/sui/transactions";var Oa=class a extends E{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o,suilendClient:r,obligationOwnerCap:i,obligation:s}=e;if(console.log("ClaimAndDepositIntention.build",n,o,r,i,s),!i||!s)throw new Error("Obligation not found");let c=new nd;return r.claimRewardsAndDeposit(o.address,i.id,Aa(r,s),c),c}static fromData(e){return console.log("ClaimAndDepositIntention.fromData",e),new a(e)}};import{Transaction as ad}from"@mysten/sui/transactions";var Pa=class a extends E{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o,suilendClient:r,obligationOwnerCap:i,obligation:s}=e;console.log("DepositIntention.build",n,o,r,i,s);let c=new ad;return await r.depositIntoObligation(o.address,this.data.coinType,this.data.value,c,i?.id),c}static fromData(e){return console.log("DepositIntention.fromData",e),new a(e)}};import{Transaction as od}from"@mysten/sui/transactions";var _a=class a extends E{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o,suilendClient:r,obligationOwnerCap:i,obligation:s}=e;if(console.log("RepayIntention.build",n,o,r,i,s),!i||!s)throw new Error("Obligation not found");let c=new od;return await r.repayIntoObligation(o.address,s.id,this.data.coinType,this.data.value,c),c}static fromData(e){return console.log("RepayIntention.fromData",e),new a(e)}};import{Transaction as rd}from"@mysten/sui/transactions";var Ra=class a extends E{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o,suilendClient:r,obligationOwnerCap:i,obligation:s}=e;if(console.log("WithdrawIntention.build",n,o,r,i,s),!i||!s)throw new Error("Obligation not found");let c=new rd;return await r.withdrawAndSendToUser(o.address,i.id,s.id,this.data.coinType,this.data.value,c),c}static fromData(e){return console.log("WithdrawIntention.fromData",e),new a(e)}};var ja=async(a,t)=>{let e=await Qo.initializeWithLendingMarket(await dd.fetch(a,ld(cd),sd),a),n=await Qo.getObligationOwnerCaps(t.address,e.lendingMarket.$typeArgs,a),o=await Promise.all(n.map(r=>Qo.getObligation(r.obligationId,e.lendingMarket.$typeArgs,a)));return{suilendClient:e,obligationOwnerCaps:n,obligations:o}},Ma=class{application="Suilend";supportSDK="@mysten/sui";utils;async deserialize(t){let{transaction:e,suiClient:n,account:o}=t;this.utils||(this.utils=await ja(n,o));let r=await n.devInspectTransactionBlock({sender:o.address,transactionBlock:e});console.log("SuilendAppHelper.deserialize",r);let s=new va(e,r).decode();return{txType:id.Other,txSubType:s.type,intentionData:s.intentionData}}async build(t){let{network:e,txSubType:n,intentionData:o,suiClient:r,account:i}=t;this.utils||(this.utils=await ja(r,i));let s;switch(n){case"deposit":s=Pa.fromData(o);break;case"withdraw":s=Ra.fromData(o);break;case"borrow":s=xa.fromData(o);break;case"repay":s=_a.fromData(o);break;case"claim":s=Da.fromData(o);break;case"claimAndDeposit":s=Oa.fromData(o);break;default:throw new Error("not implemented")}let c=window.localStorage.getItem("obligationId"),l=this.utils.obligations?.find(u=>u.id===c)??this.utils.obligations?.[0],d=this.utils.obligationOwnerCaps?.find(u=>u.obligationId===l?.id);return console.log("XXX obligationId:",c,"obligations:",this.utils.obligations,"obligationOwnerCaps:",this.utils.obligationOwnerCaps),s.build({network:e,suiClient:r,account:i,suilendClient:this.utils.suilendClient,obligationOwnerCap:d,obligation:l})}};var Qi=async(a,t)=>{let e=await fd.initialize(a,pd[md.sSUI]),n=await ja(a,t);return{lstClient:e,...n}},Ba=class{application="SpringSui";supportSDK="@mysten/sui";utils;async deserialize(t){let{transaction:e,suiClient:n,account:o}=t;this.utils||(this.utils=await Qi(n,o));let r=await n.devInspectTransactionBlock({sender:o.address,transactionBlock:e});console.log("SpringSuiAppHelper.deserialize",r);let s=new Ia(e,r).decode();return{txType:ud.Other,txSubType:s.type,intentionData:s.intentionData}}async build(t){let{network:e,txSubType:n,intentionData:o,suiClient:r,account:i}=t;this.utils||(this.utils=await Qi(r,i));let s;switch(n){case"mint":s=Ca.fromData(o);break;case"mintAndDeposit":s=Ta.fromData(o);break;case"redeem":s=ka.fromData(o);break;default:throw new Error("not implemented")}return s.build({network:e,suiClient:r,account:i,lstClient:this.utils.lstClient,suilendClient:this.utils.suilendClient,obligationOwnerCap:this.utils.obligationOwnerCaps?.[0],obligation:this.utils.obligations?.[0]})}};import{TransactionType as Bd}from"@msafe/sui3-utils";import{TurbosSdk as Nd}from"turbos-clmm-sdk";import{TransactionType as Q}from"@msafe/sui3-utils";import{bcs as Vi}from"@mysten/sui.js/bcs";import{normalizeStructTag as gd,normalizeSuiAddress as le}from"@mysten/sui.js/utils";import{BN as hd}from"turbos-clmm-sdk";var V={PackageId:"0x02fe4933f4521250e55a15441096d1d4a38a7311195b0bca126fc0138c1f5a97",Claim:"0x0c822cec42f7ca703696b4232f1c47b348330c23580172a29aab465bc071d894",turbosCoinType:"0x5d1f47ea69bb0de31c313d7acf89b890dbb8991ea8e03c6c355171f84bb1ba4a::turbos::TURBOS"},H={PackageId:"0xdee9"};var yd=(a,t,e,n)=>{if(a===1)switch(n.findIndex(i=>i===t)){case 0:return[!0,!0];case 1:return[!0,!1];case 2:return[!1,!0];case 3:return[!1,!1];default:throw new Error(`not target: ${t}`)}switch(e.findIndex(r=>r===t)){case 0:return[!0];case 1:return[!1];default:throw new Error(`not target: ${t}`)}},Na=class{constructor(t,e,n){this.txb=t;this.turbosSdk=e;this.config=n}get transactions(){return this.txb.blockData.transactions}get swap1Layer(){return[`${this.config.PackageId}::swap_router::swap_a_b`,`${this.config.PackageId}::swap_router::swap_b_a`]}get swap2Layer(){return[`${this.config.PackageId}::swap_router::swap_a_b_b_c`,`${this.config.PackageId}::swap_router::swap_a_b_c_b`,`${this.config.PackageId}::swap_router::swap_b_a_b_c`,`${this.config.PackageId}::swap_router::swap_b_a_c_b`]}async decode(t){if(this.isSwapTransaction())return await this.decodeSwap();if(this.isAddLiquidityTransaction())return this.decodeAddLiquidity();if(this.isIncreaseLiquidityTransaction())return this.decodeIncreaseLiquidity(t);if(this.isRemoveLiquidityTransaction())return this.decodeRemoveLiquidity(t);if(this.isDecreaseLiquidityTransaction())return this.decodeDecreaseLiquidity(t);if(this.isCollectFeeTransaction())return this.decodeCollectFee();if(this.isCollectRewardTransaction())return this.decodeCollectReward();if(this.isBurnTransaction())return this.decodeBurn();if(this.isPrixClaimTransaction())return this.decodePrixClaim();if(this.isPrixJoinTransaction())return this.decodePrixJoin();if(this.isSwapExactBaseForQuoteTransaction())return this.decodeSwapExactBaseForQuote();if(this.isSwapExactQuoteForBaseTransaction())return this.decodeSwapExactQuoteForBase();throw new Error("Unknown transaction type")}getMoveCallTransaction(t){return this.transactions.find(e=>e.kind==="MoveCall"&&e.target===t)}getMoveCallsTransaction(t){return t.every(e=>this.transactions.find(n=>n.kind==="MoveCall"&&n.target===e))}getSwapMoveCallTransaction(t){return this.transactions.find(e=>e.kind==="MoveCall"&&t.includes(e.target))}isSwapTransaction(){return!!this.getSwapMoveCallTransaction([...this.swap1Layer,...this.swap2Layer])}isAddLiquidityTransaction(){return!!this.getMoveCallTransaction(`${this.config.PackageId}::position_manager::mint`)}isIncreaseLiquidityTransaction(){return!!this.getMoveCallTransaction(`${this.config.PackageId}::position_manager::increase_liquidity`)}isDecreaseLiquidityTransaction(){return!!this.getMoveCallTransaction(`${this.config.PackageId}::position_manager::decrease_liquidity`)}isCollectFeeTransaction(){return!!this.getMoveCallTransaction(`${this.config.PackageId}::position_manager::collect`)}isCollectRewardTransaction(){return!!this.getMoveCallTransaction(`${this.config.PackageId}::position_manager::collect_reward`)}isBurnTransaction(){return!!this.getMoveCallTransaction(`${this.config.PackageId}::position_manager::burn`)}isPrixJoinTransaction(){return!!this.getMoveCallTransaction(`${V.PackageId}::claim::join`)}isPrixClaimTransaction(){return!!this.getMoveCallTransaction(`${V.PackageId}::claim::claim`)}isRemoveLiquidityTransaction(){return!!this.getMoveCallsTransaction([`${this.config.PackageId}::position_manager::decrease_liquidity`,`${this.config.PackageId}::position_manager::burn`])}isSwapExactBaseForQuoteTransaction(){return!!this.getMoveCallTransaction(`${H.PackageId}::clob_v2::swap_exact_base_for_quote`)}isSwapExactQuoteForBaseTransaction(){return!!this.getMoveCallTransaction(`${H.PackageId}::clob_v2::swap_exact_quote_for_base`)}async decodeSwap(){let t=this.transactions.find(m=>m.kind==="MoveCall"),e=0;this.swap2Layer.includes(t.target)&&(e=1);let n=yd(e,t.target,this.swap1Layer,this.swap2Layer),o=n.map((m,f)=>{let S=this.helper.decodeSharedObjectId(f),I=this.helper.decodeInputU128(4+f+e),v=this.turbosSdk.math.sqrtPriceX64ToTickIndex(new hd(I.toString()));return{pool:S,a2b:m,nextTickIndex:v}}),r=n[0]||e===1?t.typeArguments[0]:t.typeArguments[1],i=e===1?t.typeArguments[4]:n[0]?t.typeArguments[1]:t.typeArguments[0],s=this.helper.decodeInputAddress(6+2*e),c=this.helper.decodeInputU64(7+2*e),l=this.helper.decodeInputBool(5+2*e),d=this.helper.decodeInputU64(2+e),u=this.helper.decodeInputU64(3+e),p=await this.turbosSdk.trade.computeSwapResultV2({pools:[{pool:o[0].pool,a2b:o[0].a2b,amountSpecified:d}],address:s,amountSpecifiedIsInput:l});return{txType:Q.Other,type:"Swap",intentionData:{routes:o,coinTypeA:r,coinTypeB:i,address:s,amountA:l?d:u,amountB:l?u:d,amountSpecifiedIsInput:l,slippage:"0.1",deadline:c}}}decodeAddLiquidity(){console.log(this.helper,"decodeAddLiquidity this.helper");let t=this.helper.decodeSharedObjectId(0),e=this.helper.decodeInputAddress(12),n=this.helper.decodeInputU64(8),o=this.helper.decodeInputU64(9),r=this.helper.decodeInputU32(4),i=this.helper.decodeInputBool(5),s=this.helper.decodeInputU32(6),c=this.helper.decodeInputBool(7),l=this.helper.decodeInputU64(13);return{txType:Q.Other,type:"AddLiquidity",intentionData:{pool:t,slippage:10,address:e,amountA:n,amountB:o,tickLower:i?-r:r,tickUpper:c?-s:s,deadline:l}}}decodeIncreaseLiquidity(t){console.log(this.helper,"decodeIncreaseLiquidity this.helper");let e=this.helper.decodeSharedObjectId(0),n=this.helper.decodeSharedObjectId(4),o=this.helper.decodeInputU64(5),r=this.helper.decodeInputU64(6),i=this.helper.decodeInputU64(9);return{txType:Q.Other,type:"IncreaseLiquidity",intentionData:{pool:e,slippage:10,address:t,amountA:o,amountB:r,nft:n,deadline:i}}}decodeDecreaseLiquidity(t){console.log(this.helper,"decodeDecreaseLiquidity this.helper");let e=this.helper.decodeSharedObjectId(0),n=this.helper.decodeSharedObjectId(2),o=this.helper.decodeInputU64(3),r=this.helper.decodeInputU64(4),i=this.helper.decodeInputU64(5),s=this.helper.decodeInputU64(6);return{txType:Q.Other,type:"DecreaseLiquidity",intentionData:{pool:e,decreaseLiquidity:o,nft:n,amountA:r,amountB:i,slippage:10,address:t,deadline:s}}}decodeCollectFee(){console.log(this.helper,"decodeCollectFee this.helper");let t=this.helper.decodeSharedObjectId(0),e=this.helper.decodeSharedObjectId(2),n=this.helper.decodeInputAddress(5),o=this.helper.decodeInputU64(3),r=this.helper.decodeInputU64(4),i=this.helper.decodeInputU64(6);return{txType:Q.Other,type:"CollectFee",intentionData:{pool:t,address:n,collectAmountA:o,collectAmountB:r,nft:e,deadline:i}}}decodeCollectReward(){console.log(this.helper,"decodeCollectReward this.helper");let t=this.helper.decodeSharedObjectId(0),e=this.helper.decodeSharedObjectId(2),n=this.helper.decodeInputAddress(6),o=this.collectRewardHelper.map(i=>i.decodeInputU64(5)),r=this.helper.decodeInputU64(7);return{txType:Q.Other,type:"CollectReward",intentionData:{pool:t,address:n,rewardAmounts:o,nft:e,deadline:r}}}decodeBurn(){console.log(this.helper,"decodeBurn this.helper");let t=this.helper.decodeSharedObjectId(0),e=this.helper.decodeSharedObjectId(2);return{txType:Q.Other,type:"Burn",intentionData:{pool:t,nft:e}}}decodeRemoveLiquidity(t){console.log(this.helper,"decodeRemoveLiquidity this.helper");let e=this.decreaseLiquidityHelper.decodeSharedObjectId(0),n=this.decreaseLiquidityHelper.decodeSharedObjectId(2),o=this.decreaseLiquidityHelper.decodeInputU64(3),r=this.decreaseLiquidityHelper.decodeInputU64(4),i=this.decreaseLiquidityHelper.decodeInputU64(5),s=this.decreaseLiquidityHelper.decodeInputU64(6),c=this.collectRewardHelper.map(u=>u.decodeInputU64(5)),l=this.collectFeeHelper.decodeInputU64(3)||0,d=this.collectFeeHelper.decodeInputU64(4)||0;return{txType:Q.Other,type:"RemoveLiquidity",intentionData:{pool:e,decreaseLiquidity:o,nft:n,amountA:r,amountB:i,slippage:10,address:t,collectAmountA:l,collectAmountB:d,rewardAmounts:c,deadline:s}}}decodePrixClaim(){return{txType:Q.Other,type:"PrixClaim",intentionData:{}}}decodePrixJoin(){return{txType:Q.Other,type:"PrixJoin",intentionData:{}}}decodeSwapExactBaseForQuote(){let t=this.swapExactBaseForQuoteHelper.decodeSharedObjectId(0),e=this.swapExactBaseForQuoteHelper.decodeInputU64(3),n=this.swapExactBaseForQuoteHelper.shortTypeArg(0),o=this.swapExactBaseForQuoteHelper.shortTypeArg(1);return{txType:Q.Other,type:"SwapExactBaseForQuote",intentionData:{poolId:t,amountIn:e,token1:n,token2:o}}}decodeSwapExactQuoteForBase(){let t=this.swapExactQuoteForBaseHelper.decodeSharedObjectId(0),e=this.swapExactQuoteForBaseHelper.decodeInputU64(3),n=this.swapExactQuoteForBaseHelper.shortTypeArg(0),o=this.swapExactQuoteForBaseHelper.shortTypeArg(1);return{txType:Q.Other,type:"SwapExactQuoteForBase",intentionData:{poolId:t,amountIn:e,token1:n,token2:o}}}get helper(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target!=="0x2::coin::zero"&&e.target!=="0x0000000000000000000000000000000000000000000000000000000000000002::coin::zero");return new ft(t,this.txb)}get collectRewardHelper(){return this.transactions.filter(e=>e.kind==="MoveCall"&&e.target===`${this.config.PackageId}::position_manager::collect_reward`).map(e=>new ft(e,this.txb))}get collectFeeHelper(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target===`${this.config.PackageId}::position_manager::collect`);return new ft(t,this.txb)}get decreaseLiquidityHelper(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target===`${this.config.PackageId}::position_manager::decrease_liquidity`);return new ft(t,this.txb)}get swapExactBaseForQuoteHelper(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target===`${H.PackageId}::clob_v2::swap_exact_base_for_quote`);return new ft(t,this.txb)}get swapExactQuoteForBaseHelper(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target===`${H.PackageId}::clob_v2::swap_exact_quote_for_base`);return new ft(t,this.txb)}},ft=class a{constructor(t,e){this.moveCall=t;this.txb=e}decodeSharedObjectId(t){let e=this.getInputParam(t);return a.getSharedObjectId(e)}decodeOwnedObjectId(t){let e=this.getInputParam(t);return a.getOwnedObjectId(e)}decodeInputU128(t){let e=this.decodePureArg(t,"u128");return Number(e)}decodeInputU64(t){let e=this.decodePureArg(t,"u64");return Number(e)}decodeInputU32(t){let e=this.decodePureArg(t,"u32");return Number(e)}decodeInputU8(t){let e=this.decodePureArg(t,"u8");return Number(e)}decodeInputAddress(t){let e=this.decodePureArg(t,"address");return le(e)}decodeInputString(t){return this.decodePureArg(t,"string")}decodeInputBool(t){return this.decodePureArg(t,"bool")}decodePureArg(t,e){let n=this.getInputParam(t);return a.getPureInputValue(n,e)}getInputParam(t){let e=this.moveCall.arguments[t];if(e.kind!=="Input")throw new Error("not input type");return this.txb.blockData.inputs[e.index]}static getPureInputValue(t,e){if(t.type!=="pure")throw new Error("not pure argument");if(typeof t.value=="object"&&"Pure"in t.value){let n=t.value.Pure;return Vi.de(e,new Uint8Array(n))}return t.value}static getOwnedObjectId(t){if(t.type!=="object")throw new Error(`not object argument: ${JSON.stringify(t)}`);if(typeof t.value=="object"){if(!("Object"in t.value)||!("ImmOrOwned"in t.value.Object))throw new Error("not ImmOrOwned");return le(t.value.Object.ImmOrOwned.objectId)}return le(t.value)}static getSharedObjectId(t){if(t.type!=="object")throw new Error(`not object argument: ${JSON.stringify(t)}`);if(typeof t.value!="object")return le(t.value);if(!("Object"in t.value)||!("Shared"in t.value.Object))throw new Error("not Shared");return le(t.value.Object.Shared.objectId)}static getPureInput(t,e){if(t.type!=="pure")throw new Error("not pure argument");if(typeof t.value!="object")return t.value;if(!("Pure"in t.value))throw new Error("Pure not in value");let n=t.value.Pure;return Vi.de(e,new Uint8Array(n))}typeArg(t){return gd(this.moveCall.typeArguments[t])}shortTypeArg(t){return this.moveCall.typeArguments[t]}txArg(t){return this.moveCall.arguments[t]}};import{TurbosSdk as Sd}from"turbos-clmm-sdk";var Ea=class a extends h{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new Sd(e.network.replace("sui:",""),e.suiClient),{pool:o,address:r,amountA:i,amountB:s,slippage:c,tickLower:l,tickUpper:d,deadline:u,txb:p}=this.data;return n.pool.addLiquidity({pool:o,slippage:c,address:r,amountA:i,amountB:s,tickLower:l,tickUpper:d,deadline:u,txb:p})}static fromData(e){return new a(e)}};import{TurbosSdk as wd}from"turbos-clmm-sdk";var Wa=class a extends h{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new wd(e.network.replace("sui:",""),e.suiClient),{pool:o,nft:r,txb:i}=this.data;return n.nft.burn({pool:o,nft:r,txb:i})}static fromData(e){return new a(e)}};import{TurbosSdk as Id}from"turbos-clmm-sdk";var La=class a extends h{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new Id(e.network.replace("sui:",""),e.suiClient),{pool:o,address:r,nft:i,collectAmountA:s,collectAmountB:c,deadline:l,txb:d}=this.data;return n.pool.collectFee({pool:o,address:r,collectAmountA:s,collectAmountB:c,nft:i,deadline:l,txb:d})}static fromData(e){return new a(e)}};import{TurbosSdk as Cd}from"turbos-clmm-sdk";var Ua=class a extends h{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new Cd(e.network.replace("sui:",""),e.suiClient),{pool:o,address:r,nft:i,rewardAmounts:s,deadline:c,txb:l}=this.data;return n.pool.collectReward({pool:o,address:r,rewardAmounts:s,nft:i,deadline:c,txb:l})}static fromData(e){return new a(e)}};import{TurbosSdk as Td}from"turbos-clmm-sdk";var Fa=class a extends h{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new Td(e.network.replace("sui:",""),e.suiClient),{fee:o,address:r,tickLower:i,tickUpper:s,sqrtPrice:c,slippage:l,coinTypeA:d,coinTypeB:u,amountA:p,amountB:m,deadline:f,txb:S}=this.data;return n.pool.createPool({fee:o,amountA:p,amountB:m,address:r,tickLower:i,tickUpper:s,sqrtPrice:c,slippage:l,coinTypeA:d,coinTypeB:u,deadline:f,txb:S})}static fromData(e){return new a(e)}};import{TurbosSdk as kd}from"turbos-clmm-sdk";var $a=class a extends h{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new kd(e.network.replace("sui:",""),e.suiClient),{pool:o,address:r,amountA:i,amountB:s,slippage:c,nft:l,decreaseLiquidity:d,deadline:u,txb:p}=this.data;return n.pool.decreaseLiquidity({pool:o,slippage:c,address:r,amountA:i,amountB:s,nft:l,decreaseLiquidity:d,deadline:u,txb:p})}static fromData(e){return new a(e)}};import{TurbosSdk as vd}from"turbos-clmm-sdk";var qa=class a extends h{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new vd(e.network.replace("sui:",""),e.suiClient),{pool:o,address:r,amountA:i,amountB:s,slippage:c,nft:l,deadline:d,txb:u}=this.data;return n.pool.increaseLiquidity({pool:o,slippage:c,address:r,amountA:i,amountB:s,nft:l,deadline:d,txb:u})}static fromData(e){return new a(e)}};import{TransactionBlock as xd}from"@mysten/sui.js/transactions";import{SUI_CLOCK_OBJECT_ID as Ad}from"@mysten/sui.js/utils";var Qa=class a extends h{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new xd;return n.moveCall({target:`${V.PackageId}::claim::claim`,typeArguments:[V.turbosCoinType],arguments:[n.object(V.Claim),n.object(Ad)]}),n}static fromData(e){return new a(e)}};import{TransactionBlock as Dd}from"@mysten/sui.js/transactions";var Va=class a extends h{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new Dd;return n.moveCall({target:`${V.PackageId}::claim::join`,typeArguments:[V.turbosCoinType],arguments:[n.object(V.Claim)]}),n}static fromData(e){return new a(e)}};import{TransactionBlock as Od}from"@mysten/sui.js/transactions";import{TurbosSdk as Pd}from"turbos-clmm-sdk";var Ha=class a extends h{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new Pd(e.network.replace("sui:",""),e.suiClient),o=new Od;return o=await n.pool.collectFee({txb:o,...this.data}),o=await n.pool.collectReward({txb:o,...this.data}),o=await n.pool.decreaseLiquidity({txb:o,...this.data}),o=await n.nft.burn({txb:o,nft:this.data.nft,pool:this.data.pool}),o}static fromData(e){return new a(e)}};import{TurbosSdk as _d}from"turbos-clmm-sdk";var Ka=class a extends h{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){console.log(this.data,"this.data");let n=new _d(e.network.replace("sui:",""),e.suiClient),{routes:o,coinTypeA:r,coinTypeB:i,address:s,amountA:c,amountB:l,slippage:d,amountSpecifiedIsInput:u,deadline:p,txb:m}=this.data;return n.trade.swap({routes:o,coinTypeA:r,coinTypeB:i,address:s,amountA:c,amountB:l,amountSpecifiedIsInput:u,slippage:d,deadline:p,txb:m})}static fromData(e){return new a(e)}};import{TurbosSdk as jd}from"turbos-clmm-sdk";import{normalizeSuiObjectId as Hi}from"@mysten/sui.js/utils";import{TransactionBlock as Ki}from"@mysten/sui.js/transactions";import{unstable_getObjectId as Rd}from"turbos-clmm-sdk";var de=class{constructor(t){this.turbosSdk=t}async getCoinsData(t,e,n){let o=[],r;do r=await this.turbosSdk.provider.getCoins({owner:t,coinType:e,cursor:r?.nextCursor}),o.push(...r.data);while(r.hasNextPage);let i=[],s=0;return o.sort((c,l)=>Number(l.balance)-Number(c.balance)).some(c=>s>=n?!0:(s+=Number(c.balance),i.push(c),!1)),i}splitAndMergeCoin(t,e,n){if(!t||t.length<1)return[void 0,void 0];if(this.isSuiCoinAddress(t[0].coinType)){let[i]=n.splitCoins(n.gas,[n.pure(e)]);return[i,void 0]}let o=n.object(t[0].coinObjectId);t.length>1&&n.mergeCoins(o,t.slice(1).map(i=>n.object(i.coinObjectId)));let[r]=n.splitCoins(o,[n.pure(e)]);return[r,o]}isSuiCoinAddress(t){return t.toLocaleLowerCase()==="0x2::sui::sui"}async IsAccountCap(t){let e=await this.turbosSdk.provider.getOwnedObjects({owner:t,options:{showContent:!0,showType:!0,showOwner:!0},filter:{StructType:`${H.PackageId}::custodian_v2::AccountCap`}});return e.data[0]?.data?Rd(e.data[0].data):void 0}createAccount(t){let[e]=t.moveCall({typeArguments:[],target:`${H.PackageId}::clob_v2::create_account`,arguments:[]});return e}zero(t,e){return e.moveCall({typeArguments:[t],target:"0x2::coin::zero",arguments:[]})}};var Gi=89,zi=1e6,Ji=async a=>{let{token1:t,token2:e,poolId:n,amountIn:o,currentAddress:r,turbosSdk:i}=a,s=new Ki,c=new de(i),l=await c.getCoinsData(r,e,o),[d,u]=c.splitAndMergeCoin(l,o,s);if(!d)throw new Error(`Not enough balance: ${e}`);let p=await c.IsAccountCap(r),m=p?s.object(p):c.createAccount(s),[f,S,I]=s.moveCall({typeArguments:[t,e],target:`${H.PackageId}::clob_v2::swap_exact_quote_for_base`,arguments:[s.object(String(n)),s.pure(Gi),m,s.pure(o),s.object(Hi("0x6")),d]});return u&&s.transferObjects([u],s.pure(r)),s.transferObjects([f],s.pure(r)),s.transferObjects([S],s.pure(r)),p||s.transferObjects([m],s.pure(r)),s.setSenderIfNotSet(r),s.setGasBudget(zi),s},Xi=async a=>{let{token1:t,token2:e,poolId:n,amountIn:o,currentAddress:r,turbosSdk:i}=a,s=new Ki,c=new de(i),l=await c.getCoinsData(r,t,o),[d,u]=c.splitAndMergeCoin(l,o,s);if(!d)throw new Error(`Not enough balance: ${t}`);let p=await c.IsAccountCap(r),m=p?s.object(p):c.createAccount(s),f=c.zero(e,s),[S,I,v]=s.moveCall({typeArguments:[t,e],target:`${H.PackageId}::clob_v2::swap_exact_base_for_quote`,arguments:[s.object(String(n)),s.pure(Gi),m,s.pure(o),d,f,s.object(Hi("0x6"))]});return u&&s.transferObjects([u],s.pure(r)),s.transferObjects([S],s.pure(r)),s.transferObjects([I],s.pure(r)),p||s.transferObjects([m],s.pure(r)),s.setSenderIfNotSet(r),s.setGasBudget(zi),s};var Ga=class a extends h{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new jd(e.network.replace("sui:",""),e.suiClient);return await Xi({...this.data,turbosSdk:n,currentAddress:e.account.address})}static fromData(e){return new a(e)}};import{TurbosSdk as Md}from"turbos-clmm-sdk";var za=class a extends h{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new Md(e.network.replace("sui:",""),e.suiClient);return await Ji({...this.data,turbosSdk:n,currentAddress:e.account.address})}static fromData(e){return new a(e)}};var Ja=class{application="turbos";supportSDK="@mysten/sui.js";async deserialize(t){let e=new Nd(t.network.replace("sui:",""),t.suiClient),n=await e.contract.getConfig(),{transactionBlock:o,account:r}=t;console.log(t,"input");let s=await new Na(o,e,n).decode(r.address);return{txType:Bd.Other,txSubType:s.type,intentionData:s.intentionData}}async build(t){let{suiClient:e,account:n,network:o}=t,r;switch(console.log(t.intentionData,"intentionData"),t.txSubType){case"CreatePool":r=Fa.fromData(t.intentionData);break;case"AddLiquidity":r=Ea.fromData(t.intentionData);break;case"IncreaseLiquidity":r=qa.fromData(t.intentionData);break;case"DecreaseLiquidity":r=$a.fromData(t.intentionData);break;case"RemoveLiquidity":r=Ha.fromData(t.intentionData);break;case"CollectFee":r=La.fromData(t.intentionData);break;case"CollectReward":r=Ua.fromData(t.intentionData);break;case"Burn":r=Wa.fromData(t.intentionData);break;case"Swap":r=Ka.fromData(t.intentionData);break;case"PrixJoin":r=Va.fromData(t.intentionData);break;case"PrixClaim":r=Qa.fromData(t.intentionData);break;case"SwapExactBaseForQuote":r=Ga.fromData(t.intentionData);break;case"SwapExactQuoteForBase":r=za.fromData(t.intentionData);break;default:throw new Error("not implemented")}return r.build({suiClient:e,account:n,network:o})}};import{TransactionType as qd}from"@msafe/sui3-utils";import{TransactionType as Vo}from"@msafe/sui3-utils";import{bcs as Yi}from"@mysten/sui.js/bcs";import{normalizeStructTag as Ld,normalizeSuiAddress as ue}from"@mysten/sui.js/utils";var Ed={packageId:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55",poolObjectId:"0x7fa2faa111b8c65bea48a23049bfd81ca8f971a262d981dcd9a17c3825cb5baf",metadataObjectId:"0x680cd26af32b2bde8d3361e804c53ec1d1cfe24c7f039eb7f549e8dfde389a60",systemStateObjectId:"0x0000000000000000000000000000000000000000000000000000000000000005",certType:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55::cert::CERT",gasBudget:5e7},D=Ed;var Xa=class{constructor(t){this.txb=t}decode(){if(console.log("txb",this.txb),this.isStakeTransaction())return this.decodeStake();if(this.isUnStakeTransaction())return this.decodeUnStake();if(this.isClaimTicketTransaction())return this.decodeClaimTicket();throw new Error("Unknown transaction type")}get transactions(){return this.txb.blockData.transactions}getMoveCallTransaction(t){return this.transactions.find(e=>e.kind==="MoveCall"&&e.target===t)}isStakeTransaction(){return!!this.getMoveCallTransaction(`${D.packageId}::native_pool::stake`)}isUnStakeTransaction(){return!!this.getMoveCallTransaction(`${D.packageId}::native_pool::unstake`)}isClaimTicketTransaction(){return!!this.getMoveCallTransaction(`${D.packageId}::native_pool::burn_ticket`)}decodeStake(){let t=this.transactions[0].amounts[0].value.toNumber();return{txType:Vo.Other,type:"Stake",intentionData:{amount:t}}}decodeUnStake(){let e=this.transactions.find(n=>n.kind==="SplitCoins").amounts[0].value.toNumber();return{txType:Vo.Other,type:"UnStake",intentionData:{amount:e}}}decodeClaimTicket(){let t=this.helper.decodeOwnedObjectId(2);return console.log(t),{txType:Vo.Other,type:"ClaimTicket",intentionData:{ticketId:t}}}get helper(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(D.packageId));return new Ho(t,this.txb)}},Ho=class a{constructor(t,e){this.moveCall=t;this.txb=e}decodeSharedObjectId(t){let e=this.getInputParam(t);return a.getSharedObjectId(e)}decodeOwnedObjectId(t){let e=this.getInputParam(t);return a.getOwnedObjectId(e)}decodeInputU64(t){let e=this.decodePureArg(t,"u64");return Number(e)}decodeInputU8(t){let e=this.decodePureArg(t,"u8");return Number(e)}decodeInputAddress(t){let e=this.decodePureArg(t,"address");return ue(e)}decodeInputString(t){return this.decodePureArg(t,"string")}decodeInputBool(t){return this.decodePureArg(t,"bool")}decodePureArg(t,e){let n=this.getInputParam(t);return a.getPureInputValue(n,e)}getInputParam(t){let e=this.moveCall.arguments[t];if(e.kind!=="Input")throw new Error("not input type");return this.txb.blockData.inputs[e.index]}static getPureInputValue(t,e){if(t.type!=="pure")throw new Error("not pure argument");if(typeof t.value=="object"&&"Pure"in t.value){let n=t.value.Pure;return Yi.de(e,new Uint8Array(n))}return t.value}static getOwnedObjectId(t){if(t.type!=="object")throw new Error(`not object argument: ${JSON.stringify(t)}`);if(typeof t.value=="object"){if(!("Object"in t.value)||!("ImmOrOwned"in t.value.Object))throw new Error("not ImmOrOwned");return ue(t.value.Object.ImmOrOwned.objectId)}return ue(t.value)}static getSharedObjectId(t){if(t.type!=="object")throw new Error(`not object argument: ${JSON.stringify(t)}`);if(typeof t.value!="object")return ue(t.value);if(!("Object"in t.value)||!("Shared"in t.value.Object))throw new Error("not Shared");return ue(t.value.Object.Shared.objectId)}static getPureInput(t,e){if(t.type!=="pure")throw new Error("not pure argument");if(typeof t.value!="object")return t.value;if(!("Pure"in t.value))throw new Error("Pure not in value");let n=t.value.Pure;return Yi.de(e,new Uint8Array(n))}typeArg(t){return Ld(this.moveCall.typeArguments[t])}txArg(t){return this.moveCall.arguments[t]}};import{TransactionBlock as Ud}from"@mysten/sui.js/transactions";var Ya=class a extends h{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){console.log(e);let n=new Ud,{ticketId:o}=this.data;return n.moveCall({target:`${D.packageId}::native_pool::burn_ticket`,arguments:[n.object(D.poolObjectId),n.object(D.systemStateObjectId),n.object(o)]}),n}static fromData(e){return new a(e)}};import{TransactionBlock as Fd}from"@mysten/sui.js/transactions";var Za=class a extends h{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){console.log(e);let n=new Fd,{amount:o}=this.data,[r]=n.splitCoins(n.gas,[n.pure(o)]);return n.moveCall({target:`${D.packageId}::native_pool::stake`,arguments:[n.object(D.poolObjectId),n.object(D.metadataObjectId),n.object(D.systemStateObjectId),r]}),n}static fromData(e){return new a(e)}};import{TransactionBlock as $d}from"@mysten/sui.js/transactions";var to=class a extends h{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){console.log(e);let n=new $d,{amount:o}=this.data,r=(await e.suiClient.getAllCoins({owner:e.account.address,limit:100})).data,[i,...s]=r.filter(d=>d.coinType.split("::")[0]===D.certType.split("::")[0]),c=n.object(i.coinObjectId);s.length&&n.mergeCoins(c,s.map(d=>n.object(d.coinObjectId)));let l=n.splitCoins(n.object(i.coinObjectId),[n.pure(o)]);return n.moveCall({target:`${D.packageId}::native_pool::unstake`,arguments:[n.object(D.poolObjectId),n.object(D.metadataObjectId),n.object(D.systemStateObjectId),l]}),n}static fromData(e){return new a(e)}};var eo=class{application="volo";supportSDK="@mysten/sui.js";async deserialize(t){let{transactionBlock:e}=t,o=new Xa(e).decode();return{txType:qd.Other,txSubType:o.type,intentionData:o.intentionData}}async build(t){let{suiClient:e,account:n}=t,o;switch(t.txSubType){case"Stake":o=Za.fromData(t.intentionData);break;case"UnStake":o=to.fromData(t.intentionData);break;case"ClaimTicket":o=Ya.fromData(t.intentionData);break;default:throw new Error("not implemented")}return o.build({suiClient:e,account:n})}};var gO=vn.fromHelpers([new bn,new Tn,new un,new kn,new We,new Ja,new wa,new eo,new ge,new Ma,new Ba]);export{gO as appHelpers};
2
2
  //# sourceMappingURL=index.mjs.map