@msafe/sui-app-store 0.0.94 → 0.0.96
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.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var Ir=Object.defineProperty;var Ga=(a,t)=>{for(var e in t)Ir(a,e,{get:t[e],enumerable:!0})};import{TransactionType as Xr}from"@msafe/sui3-utils";import{TransactionType as _r}from"@msafe/sui3-utils";import kr from"sort-keys-recursive";var p=class{constructor(t){this.data=t}get application(){return"msafe-core"}serialize(){return JSON.stringify(kr(this.data))}};import{CetusPeripherySDK as xr}from"@cetusprotocol/cetus-periphery-sdk";import{CetusClmmSDK as vr}from"@cetusprotocol/cetus-sui-clmm-sdk";var Ar={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:"0xc33c3e937e5aa2009cc0c3fdb3f345a0c3193d4ee663ffc601fe8b894fbc4ba6",version:4,config:{pools_id:"0xf699e7f2276f5c9a75944b37a0c5b5d9ddfd2471bf6242483b03ab2887d198d0",global_config_id:"0xdaa46292632c3c4d8f31f23ea0f9b36a28ff3677e9684980e4438403a67a3d8f",global_vault_id:"0xce7bceef26d3ad1f6d9b6f13a953f053e6ed3ca77907516481ce99ae8e588f2b",admin_cap_id:"0x89c1a321291d15ddae5a086c9abc533dff697fde3d89e0ca836c41af73e36a75"}},integrate:{package_id:"0x996c4d9480708fb8b92aa7acf819fb0497b5ec8e65ba06601cae2fb6db3312c3",published_at:"0xd43348b8879c1457f882b02555ba862f2bc87bcc31b16294ca14a82f608875d2",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"},Or={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:"0xcec352932edc6663a118e8d64ed54da6b8107e8719603bf728f80717592cd9e8",version:3,config:{dividend_manager_id:"0x721c990bfc031d074341c6059a113a59c1febfbd2faeb62d49dcead8408fa6b5",dividend_admin_id:"",dividend_settle_id:""}},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:"0xd3453d9be7e35efe222f78a810bb3af1859fd1600926afced8b4936d825c9a05",version:1,config:{admin_cap_id:"0x78a42978709c4032fab7b33b782b5bcef64c1c6603250bf23644650b72144375",vaults_manager_id:"0x25b82dd2f5ee486ed1c8af144b89a8931cd9c29dee3a86a1bfe194fdea9d04a6",vaults_pool_handle:"0x9036bcc5aa7fd2cceec1659a6a1082871f45bc400c743f50063363457d1738bd"}},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:"0x11ea791d82b5742cc8cab0bf7946035c97d9001d7c3803a93f119753da66f526",version:1,config:{global_config_id:"0x21215f2f6de04b57dd87d9be7bb4e15499aec935e36078e2488f36436d64996e",rewarder_manager_id:"0xe0e155a88c77025056da08db5b1701a91b79edb6167462f768e387c3ed6614d5",rewarder_manager_handle:"0xb32e312cbb3367d6f3d2b4e57c9225e903d29b7b9f612dae2ddf75bdeb26a5aa",admin_cap_id:"0xf10fbf1fea5b7aeaa524b87769461a28c5c977613046360093673991f26d886c"}},haedal:{package_id:"0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d",published_at:"0x1d56b8ec33c3fae897eb7bb1acb79914e8152faed614868928e684c25c8b198d",version:1,config:{support_stakings:[{staking_id:"0x47b224762220393057ebf4f70501b6e657c3e56684737568439a04f80849b2ca",from_coin_type:"0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI",to_coin_type:"0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d::hasui::HASUI"}]}}},Dr={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"},Pr={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"}},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"}},haedal:{package_id:"0xac2afb455cbcdc2ff1a2e9bbb8aa4ccb4506a544b08c740886892a5cdf92f472",published_at:"0x9dac9c5770e5f930d2223ff68782958701acfaee9337e8d8363978ce7670dffb",config:{support_stakings:[{staking_id:"0x6e384d2da5b040b27f973155e25bbe4beb0ad5ca8ee0a36e20dff356094c9fc0",from_coin_type:"0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI",to_coin_type:"0xac2afb455cbcdc2ff1a2e9bbb8aa4ccb4506a544b08c740886892a5cdf92f472::hasui::HASUI"}]}}},it=(a,t)=>{let e=a==="sui:mainnet"?Ar:Dr,n=new vr(e);return n.senderAddress=t.address,n},_=(a,t)=>{let e=it(a,t),n=a==="sui:mainnet"?Or:Pr;return new xr(n,e)};var Ha=async(a,t,e)=>await it(e,t).Position.createAddLiquidityFixTokenPayload(a?.parameter,a?.gasEstimateArg),za=async(a,t,e)=>await it(e,t).Position.createAddLiquidityFixTokenPayload(a?.parameter,a?.gasEstimateArg),Xa=async(a,t,e)=>await it(e,t).Position.closePositionTransactionPayload(a),Ya=async(a,t,e)=>await it(e,t).Position.removeLiquidityTransactionPayload(a),Ja=async(a,t,e)=>await it(e,t).Rewarder.collectRewarderTransactionPayload(a);var ee=class a extends p{constructor(e){super(e);this.data=e}txType=_r.Other;txSubType="OpenAndAddLiquidity";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await Ha(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as jr}from"@msafe/sui3-utils";var ne=class a extends p{constructor(e){super(e);this.data=e}txType=jr.Other;txSubType="ClaimFeeAndMining";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await Ja(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Rr}from"@msafe/sui3-utils";var ae=class a extends p{constructor(e){super(e);this.data=e}txType=Rr.Other;txSubType="DecreaseLiquidity";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await Ya(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Br}from"@msafe/sui3-utils";var Za=async(a,t,e)=>await _(e,t).Farms.openPositionAddLiquidityStakePaylod(a),to=async(a,t,e)=>await _(e,t).Farms.addLiquidityFixCoinPayload(a),eo=async(a,t,e)=>await _(e,t).Farms.removeLiquidityPayload(a),no=async(a,t,e)=>await _(e,t).Farms.removeLiquidityPayload(a),ao=async(a,t,e)=>await _(e,t).Farms.claimFeeAndClmmReward(a),oo=async(a,t,e)=>{let n=_(e,t);return console.log("getFarmingHarvest txbParams: ",a),await n.Farms.harvestPayload(a)},ro=async(a,t,e)=>{let n=_(e,t),o=Object.values(a);return console.log("getFarmingBatchHarvest params: ",o),await n.Farms.batchHarvestPayload(o)},io=async(a,t,e)=>await _(e,t).Farms.depositPayload(a),so=async(a,t,e)=>await _(e,t).Farms.withdrawPayload(a);var oe=class a extends p{constructor(e){super(e);this.data=e}txType=Br.Other;txSubType="FarmingOpenAndAddLiquidity";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await Za(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Nr}from"@msafe/sui3-utils";var re=class a extends p{constructor(e){super(e);this.data=e}txType=Nr.Other;txSubType="FarmingBatchHarvest";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await ro(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Mr}from"@msafe/sui3-utils";var ie=class a extends p{constructor(e){super(e);this.data=e}txType=Mr.Other;txSubType="FarmingClaimFeeAndReward";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await ao(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Er}from"@msafe/sui3-utils";var se=class a extends p{constructor(e){super(e);this.data=e}txType=Er.Other;txSubType="FarmingDecreaseLiquidity";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await eo(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Lr}from"@msafe/sui3-utils";var ce=class a extends p{constructor(e){super(e);this.data=e}txType=Lr.Other;txSubType="FarmingHarvest";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await oo(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Wr}from"@msafe/sui3-utils";var de=class a extends p{constructor(e){super(e);this.data=e}txType=Wr.Other;txSubType="FarmingIncreaseLiquidity";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await to(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Ur}from"@msafe/sui3-utils";var le=class a extends p{constructor(e){super(e);this.data=e}txType=Ur.Other;txSubType="FarmingRemoveLiquidity";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await no(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as qr}from"@msafe/sui3-utils";var ue=class a extends p{constructor(e){super(e);this.data=e}txType=qr.Other;txSubType="FarmingStake";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await io(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Fr}from"@msafe/sui3-utils";var pe=class a extends p{constructor(e){super(e);this.data=e}txType=Fr.Other;txSubType="FarmingUnstake";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await so(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as $r}from"@msafe/sui3-utils";var me=class a extends p{constructor(e){super(e);this.data=e}txType=$r.Other;txSubType="IncreaseLiquidity";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await za(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Vr}from"@msafe/sui3-utils";var be=class a extends p{constructor(e){super(e);this.data=e}txType=Vr.Other;txSubType="RemoveLiquidity";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await Xa(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Qr}from"@msafe/sui3-utils";var co=async(a,t,e)=>await _(e,t).XCetusModule.convertPayload(a),lo=async(a,t,e)=>await _(e,t).XCetusModule.redeemLockPayload(a),uo=async(a,t,e)=>await _(e,t).XCetusModule.redeemDividendV2Payload(a.venft_id,a.bonus_types,a.xTokenType),po=async(a,t,e)=>await _(e,t).XCetusModule.cancelRedeemPayload(a),mo=async(a,t,e)=>await _(e,t).XCetusModule.redeemPayload(a);var fe=class a extends p{constructor(e){super(e);this.data=e}txType=Qr.Other;txSubType="xCETUSCancelRedeem";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await po(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Kr}from"@msafe/sui3-utils";var ge=class a extends p{constructor(e){super(e);this.data=e}txType=Kr.Other;txSubType="xCETUSClaimStakingRwewards";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await uo(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Gr}from"@msafe/sui3-utils";var he=class a extends p{constructor(e){super(e);this.data=e}txType=Gr.Other;txSubType="xCETUSConvert";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await co(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Hr}from"@msafe/sui3-utils";var ye=class a extends p{constructor(e){super(e);this.data=e}txType=Hr.Other;txSubType="xCETUSRedeem";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await mo(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as zr}from"@msafe/sui3-utils";var Se=class a extends p{constructor(e){super(e);this.data=e}txType=zr.Other;txSubType="xCETUSRedeemLock";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await lo(r,n,o)}static fromData(e){return new a(e)}};var we=class{application="cetus";async deserialize(t){console.log("Cetus helper deserialize input: ",t);let{txbParams:e,action:n}=t;return{txType:Xr.Other,txSubType:n,intentionData:{txbParams:{...e},action:n}}}async build(t){let{suiClient:e,account:n,network:o}=t;console.log("helper build input: ",t),console.log("helper build input.intentionData: ",t.intentionData),console.log("helper build input.intentionData JSON: ",JSON.stringify(t.intentionData));let r;switch(t.txSubType){case"OpenAndAddLiquidity":r=ee.fromData(t.intentionData);break;case"IncreaseLiquidity":r=me.fromData(t.intentionData);break;case"DecreaseLiquidity":r=ae.fromData(t.intentionData);break;case"RemoveLiquidity":r=be.fromData(t.intentionData);break;case"ClaimFeeAndMining":r=ne.fromData(t.intentionData);break;case"FarmingOpenAndAddLiquidity":r=oe.fromData(t.intentionData);break;case"FarmingIncreaseLiquidity":r=de.fromData(t.intentionData);break;case"FarmingDecreaseLiquidity":r=se.fromData(t.intentionData);break;case"FarmingRemoveLiquidity":r=le.fromData(t.intentionData);break;case"FarmingClaimFeeAndReward":r=ie.fromData(t.intentionData);break;case"FarmingHarvest":r=ce.fromData(t.intentionData);break;case"FarmingBatchHarvest":r=re.fromData(t.intentionData);break;case"FarmingStake":r=ue.fromData(t.intentionData);break;case"FarmingUnstake":r=pe.fromData(t.intentionData);break;case"xCETUSConvert":r=he.fromData(t.intentionData);break;case"xCETUSRedeemLock":r=Se.fromData(t.intentionData);break;case"xCETUSClaimStakingRwewards":r=ge.fromData(t.intentionData);break;case"xCETUSCancelRedeem":r=fe.fromData(t.intentionData);break;case"xCETUSRedeem":r=ye.fromData(t.intentionData);break;default:throw new Error("not implemented")}return console.log("helper build intention: ",r),console.log("helper build account: ",n),console.log("helper build network: ",o),r.build({suiClient:e,account:n,network:o})}};import{TransactionType as ui}from"@msafe/sui3-utils";import{TransactionType as mt}from"@msafe/sui3-utils";import{bcs as bo}from"@mysten/sui.js/bcs";import{normalizeStructTag as Jr,normalizeSuiAddress as jt}from"@mysten/sui.js/utils";var x={packageId:"0xa0eba10b173538c8fecca1dff298e488402cc9ff374f8a12ca7758eebe830b66",farmPackageId:"0x88701243d0445aa38c0a13f02a9af49a58092dfadb93af9754edb41c52f40085",functions:{swapX:"swap_token_x",swapY:"swap_token_y"}};var M="https://fullnode.mainnet.sui.io/";var Te=class{constructor(t){this.txb=t}decode(){if(console.log("txb",this.txb),this.isAddLiquidityTransaction())return this.decodeAddLiquidity();if(this.isAddLiquiditySingleSidedTransaction())return this.decodeAddLiquiditySingleSided();if(this.isClaimRewardsTransaction())return this.decodeClaimRewards();if(this.isRemoveLiquidityTransaction())return this.decodeRemoveLiquidity();if(this.isStakeLiquidityTransaction())return this.decodeStakeLiquidity();if(this.isUnstakeLiquidityTransaction())return this.decodeUnstakeLiquidity();throw new Error("Unknown transaction type")}isAddLiquidityTransaction(){return!!this.getMoveCallTransaction(`${x.packageId}::spot_dex::add_liquidity`)}isAddLiquiditySingleSidedTransaction(){return!!this.getMoveCallTransaction(`${x.packageId}::spot_dex::add_liquidity`)&&(!!this.getMoveCallTransaction(`${x.packageId}::spot_dex::${x.functions.swapX}`)||!!this.getMoveCallTransaction(`${x.packageId}::spot_dex::${x.functions.swapY}`))}isClaimRewardsTransaction(){return!!this.getMoveCallTransaction(`${x.farmPackageId}::farm::claim`)}isRemoveLiquidityTransaction(){return!!this.getMoveCallTransaction(`${x.packageId}::spot_dex::remove_liquidity`)}isStakeLiquidityTransaction(){return!!this.getMoveCallTransaction(`${x.farmPackageId}::farm::stake`)}isUnstakeLiquidityTransaction(){return!!this.getMoveCallTransaction(`${x.farmPackageId}::farm::unstake`)}decodeAddLiquidity(){let t=this.helperLiquidityDex.getInputParam(0).value,e=this.helperLiquidityDex.typeArg(0),n=this.helperLiquidityDex.typeArg(1),o=this.helperLiquidityDex.decodeInputU64String(4),r=this.helperLiquidityDex.decodeInputU64String(3),i=this.helperLiquidityDex.decodeInputU64String(6),s=this.helperLiquidityDex.decodeInputU64String(5),c=this.helperLiquidityDex.getInputParam(2).value,l=this.helperLiquidityDex.getInputParam(1).value;return{txType:mt.Other,type:"AddLiquidity",intentionData:{objectId:t,tokenXType:e,tokenYType:n,amountX:o,amountY:r,minAddAmountX:i,minAddAmountY:s,coinX:c,coinY:l}}}decodeAddLiquiditySingleSided(){let t=this.helperLiquidityDex.getInputParam(0).value,e=this.helperLiquidityDex.typeArg(0),n=this.helperLiquidityDex.typeArg(1),o=this.helperSwapDex.moveCall.target===`${x.packageId}::spot_dex::${x.functions.swapX}`?e:n,r=this.helperSwapDex.decodeInputU64String(2),i=this.helperSwapDex.getInputParam(1).value;return{txType:mt.Other,type:"AddLiquidity",intentionData:{objectId:t,tokenXType:e,tokenYType:n,inputCoinType:o,inputCoinAmount:r,inputCoin:i}}}decodeRemoveLiquidity(){let t=this.helperDex.getInputParam(0).value,e=this.helperDex.typeArg(0),n=this.helperDex.typeArg(1),o=this.helperDex.decodeInputU64String(2),r=this.helperDex.getInputParam(1).value;return{txType:mt.Other,type:"RemoveLiquidity",intentionData:{objectId:t,tokenXType:e,tokenYType:n,amount:o,kriyaLpToken:r}}}decodeClaimRewards(){let t=this.helperFarm.getInputParam(1).value,e=this.helperFarm.getInputParam(2).value,n=this.helperFarm.typeArg(0),o=this.helperFarm.typeArg(1);return{txType:mt.Other,type:"ClaimRewards",intentionData:{objectId:t,tokenXType:n,tokenYType:o,positionObjectId:e}}}decodeStakeLiquidity(){let t=this.helperFarm.getInputParam(1).value,e=this.helperFarm.typeArg(0),n=this.helperFarm.typeArg(1),o=this.helperFarm.getInputParam(2).value,r=this.helperFarm.decodeInputU64String(3);return{txType:mt.Other,type:"StakeLiquidity",intentionData:{lpObject:o,lockTime:r,objectId:t,tokenXType:e,tokenYType:n}}}decodeUnstakeLiquidity(){let t=this.helperFarm.getInputParam(1).value,e=this.helperFarm.getInputParam(2).value,n=this.helperFarm.typeArg(0),o=this.helperFarm.typeArg(1);return{txType:mt.Other,type:"UnstakeLiquidity",intentionData:{objectId:t,tokenXType:n,tokenYType:o,positionObjectId:e}}}get transactions(){return this.txb.blockData.transactions}getMoveCallTransaction(t){return this.transactions.find(e=>e.kind==="MoveCall"&&e.target===t)}get helperDex(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(x.packageId));return new bt(t,this.txb)}get helperLiquidityDex(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target===`${x.packageId}::spot_dex::add_liquidity`);return new bt(t,this.txb)}get helperSwapDex(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&(e.target===`${x.packageId}::spot_dex::${x.functions.swapX}`||e.target===`${x.packageId}::spot_dex::${x.functions.swapY}`));return new bt(t,this.txb)}get helperFarm(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(x.farmPackageId));return new bt(t,this.txb)}},bt=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)}decodeInputU64String(t){return this.decodePureArg(t,"u64")}decodeInputU8(t){let e=this.decodePureArg(t,"u8");return Number(e)}decodeInputAddress(t){let e=this.decodePureArg(t,"address");return jt(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 bo.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 jt(t.value.Object.ImmOrOwned.objectId)}return jt(t.value)}static getSharedObjectId(t){if(t.type!=="object")throw new Error(`not object argument: ${JSON.stringify(t)}`);if(typeof t.value!="object")return jt(t.value);if(!("Object"in t.value)||!("Shared"in t.value.Object))throw new Error("not Shared");return jt(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 bo.de(e,new Uint8Array(n))}typeArg(t){return Jr(this.moveCall.typeArguments[t])}txArg(t){return this.moveCall.arguments[t]}};import{TransactionBlock as Zr}from"@mysten/sui.js/transactions";import{KriyaSDK as ti}from"kriya-dex-sdk";var Ce=class a extends p{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o}=e,r=o.address,i=new ti.Dex(M),{objectId:s,tokenXType:c,tokenYType:l,amountX:d,amountY:u,minAddAmountX:m,minAddAmountY:b,coinX:f,coinY:y}=this.data,T=new Zr,N=(await n.getObject({id:s,options:{showContent:!0}})).data.content?.fields.is_stable;return i.addLiquidity({objectId:s,tokenXType:c,tokenYType:l,isStable:N},BigInt(d),BigInt(u),BigInt(m),BigInt(b),f,y,T,r),T}static fromData(e){return new a(e)}};import{TransactionBlock as ei}from"@mysten/sui.js/transactions";import{KriyaSDK as ni}from"kriya-dex-sdk";var Ie=class a extends p{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o}=e,r=o.address,i=new ni.Dex(M),{objectId:s,tokenXType:c,tokenYType:l,inputCoinType:d,inputCoinAmount:u,inputCoin:m}=this.data,b=new ei,y=(await n.getObject({id:s,options:{showContent:!0}})).data.content?.fields.is_stable;return i.addLiquiditySingleSided({objectId:s,tokenXType:c,tokenYType:l,isStable:y},d,BigInt(u),m,1,b,r),b}static fromData(e){return new a(e)}};import{TransactionBlock as ai}from"@mysten/sui.js/transactions";import{KriyaSDK as oi}from"kriya-dex-sdk";var ke=class a extends p{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o}=e,r=o.address,i=e.network==="sui:mainnet",s=new oi.StakingFarm(M,i),{objectId:c,tokenXType:l,tokenYType:d,positionObjectId:u}=this.data,m={objectId:c,tokenXType:l,tokenYType:d},b=new ai;return s.claimTx(b,m,u,r),b}static fromData(e){return new a(e)}};import{TransactionBlock as ri}from"@mysten/sui.js/transactions";import{KriyaSDK as ii}from"kriya-dex-sdk";var xe=class a extends p{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o}=e,r=o.address,i=new ii.Dex(M),{objectId:s,tokenXType:c,tokenYType:l,amount:d,kriyaLpToken:u}=this.data,m=new ri,f=(await n.getObject({id:s,options:{showContent:!0}})).data.content?.fields.is_stable,y={objectId:s,tokenXType:c,tokenYType:l,isStable:f};return i.removeLiquidity(y,BigInt(d),u,m,r),m}static fromData(e){return new a(e)}};import{TransactionBlock as si}from"@mysten/sui.js/transactions";import{KriyaSDK as ci}from"kriya-dex-sdk";var ve=class a extends p{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o}=e,r=o.address,i=e.network==="sui:mainnet",s=new ci.StakingFarm(M,i),{lpObject:c,lockTime:l,objectId:d,tokenXType:u,tokenYType:m}=this.data,b={objectId:d,tokenXType:u,tokenYType:m},f=new si;return s.stakeTx(f,c,l,b,r),f}static fromData(e){return new a(e)}};import{TransactionBlock as di}from"@mysten/sui.js/transactions";import{KriyaSDK as li}from"kriya-dex-sdk";var Ae=class a extends p{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o}=e,r=o.address,i=e.network==="sui:mainnet",s=new li.StakingFarm(M,i),{objectId:c,tokenXType:l,tokenYType:d,positionObjectId:u}=this.data,m={objectId:c,tokenXType:l,tokenYType:d},b=new di;return s.withdrawTx(b,m,u,r),b}static fromData(e){return new a(e)}};var Oe=class{application="kriya";async deserialize(t){let{transactionBlock:e}=t,o=new Te(e).decode();return{txType:ui.Other,txSubType:o.type,intentionData:o.intentionData}}async build(t){let{suiClient:e,account:n,network:o}=t,r;switch(t.txSubType){case"AddLiquidity":r=Ce.fromData(t.intentionData);break;case"AddLiquiditySingleSided":r=Ie.fromData(t.intentionData);break;case"RemoveLiquidity":r=xe.fromData(t.intentionData);break;case"ClaimRewards":r=ke.fromData(t.intentionData);break;case"StakeLiquidity":r=ve.fromData(t.intentionData);break;case"UnstakeLiquidity":r=Ae.fromData(t.intentionData);break;default:throw new Error("not implemented")}return r.build({suiClient:e,account:n,network:o})}};import{TransactionType as ds}from"@msafe/sui3-utils";var pa={};Ga(pa,{contractId:()=>bi,default:()=>Si,feeObjId:()=>hi,roleObjId:()=>fi,status:()=>mi,transaction:()=>pi,upgradeCapObjId:()=>yi,vaultObjId:()=>gi});var pi="DiBZq4UmVVYiRL6ZJmFKYoHcxtxqrhsCXSkFyT7wUr3j",mi="success",bi="0x81c960dc653975fbd0072deca8afb92d322898c911622898ba1b2e3ad0c4bd8d",fi="0xc6ec0bdee0bb59a72077e9acd2f42457043cf47080b3d3fad4d39abf28bba63a",gi="0xbc4021387fbac149119fd24e92be9e58f745774292f3a2a12e2ac6daf5363e1d",hi="0x4178f63970fe2daeb256dc5730ad172e82b3e8eb45f31b33e0daae72cd35e1e1",yi="0xe1e9aa7d222d151bfe6dd83358b0d7fdcb11260f710800cfaf7ccc1b1e245115",Si={transaction:pi,status:mi,contractId:bi,roleObjId:fi,vaultObjId:gi,feeObjId:hi,upgradeCapObjId:yi};var ma={};Ga(ma,{contractId:()=>Ci,default:()=>Ai,feeObjId:()=>xi,roleObjId:()=>Ii,status:()=>Ti,transaction:()=>wi,upgradeCapObjId:()=>vi,vaultObjId:()=>ki});var wi="855FNDV8o8Z3fWULPnQo9qdhLJpsg7wZrkCpNyfw9KfB",Ti="success",Ci="0xc357c3985e8fb875d6b37141497af660779aa1bab0ec489b2213efd74067d1fa",Ii="0x5ab49bdf9fd1413e328ef242b3f8d83dde791b38a0b627bfc87fb25c010d34f1",ki="0xb483558770d8eb26007f193b75db40f0a45f2e36863a687625885d4de6993378",xi="0x48453fc4d7cde3fe35aad89e5dfb496608a6a55ea529a1c0274681a808627f94",vi="0x34279779a0d0d36bd5044b04830d607fa1b0ecf316548c8ac3a44151e4f1a42a",Ai={transaction:wi,status:Ti,contractId:Ci,roleObjId:Ii,vaultObjId:ki,feeObjId:xi,upgradeCapObjId:vi};var Oi="https://sui-testnet.blockvision.org/v1/2Sgk89ivT64MnKdcGzjmyjY2ndD",Di="https://sui-testnet.blockvision.org/v1/2Sgk89ivT64MnKdcGzjmyjY2ndD",Pi="https://sui-mainnet.blockvision.org/v1/2Sgk7NPvqkd7mESYkxF01yX15l7",_i="https://sui-mainnet.blockvision.org/v1/2Sgk7NPvqkd7mESYkxF01yX15l7",ji="https://bc3p6l5unl.execute-api.us-west-1.amazonaws.com/prod",Ri="https://rolsbkota7.execute-api.us-west-1.amazonaws.com/prod",Bi="https://6p6mkx33ne.execute-api.us-west-1.amazonaws.com/prod",Ni="https://xrae3mrjv5.execute-api.us-west-1.amazonaws.com/prod",fo=pa,go=ma,Mi=new Map([["dev",{env:"dev",rpc:{url:Oi},backend:{url:ji},contract:fo}],["stg",{env:"stg",rpc:{url:Di},backend:{url:Ri},contract:fo}],["prev",{env:"prev",rpc:{url:Pi},backend:{url:Bi},contract:go}],["prod",{env:"prod",rpc:{url:_i},backend:{url:Ni},contract:go}]]);function ho(a,t){let e=Mi.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 Li}from"@mysten/sui.js/client";var S=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 De=class extends S{constructor(){super(11,"Backend is not specified")}};var Pe=class extends S{constructor(){super(1,"Wallet not connected")}};import gt,{AxiosError as Ei}from"axios";var ft=class extends S{constructor(t,e){super(10,t,{context:e})}};var _e=class a{constructor(t){this.apiURL=t}static parseResponseData(t){if(t instanceof Ei)throw new ft(t.response?.statusText);if(t.status===200){if(t.data.success)return t.data.data;throw new ft(t.data.code)}throw new ft(t.status.toString())}async getIncomingStreams(t,e){let n=await gt.post(`${this.apiURL}/stream`,{recipient:t,...e});return a.parseResponseData(n)}async getOutgoingStreams(t,e){let n=await gt.post(`${this.apiURL}/stream`,{sender:t,...e});return a.parseResponseData(n)}async getStreamHistory(t){let e=await gt.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 gt.post(`${this.apiURL}/stream-info`,{address:t});return a.parseResponseData(e)}async getAllRecipients(t,e){let n=await gt.post(`${this.apiURL}/stream-info`,{sender:t,status:e});return a.parseResponseData(n)}async getAllSenders(t,e){let n=await gt.post(`${this.apiURL}/stream-info`,{recipient:t,status:e});return a.parseResponseData(n)}};var ht=class a{signer;suiClient;envConfig;_backend;constructor(t){this.envConfig=t,this.suiClient=new Li({url:t.rpc.url}),t.backend&&(this._backend=new _e(t.backend.url))}static new(t,e){let n=ho(t,e);return new a(n)}get walletType(){return this.wallet?this.wallet.type:"disconnected"}get backend(){if(!this._backend)throw new De;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 Pe;return this.signer}async walletAddress(){return this.wallet.address()}};import{SUI_TYPE_ARG as rs,normalizeStructTag as is,normalizeSuiAddress as qo}from"@mysten/sui.js/utils";import{TransactionBlock as Ee}from"@mysten/sui.js/transactions";import{TransactionBlock as vo}from"@mysten/sui.js/transactions";import{SUI_TYPE_ARG as Ao,normalizeStructTag as Fi}from"@mysten/sui.js/utils";var ba=50n,je=10000n,yo=25n,fa=100000000n;var F=class{constructor(t){this.object=t}moveArg(t){return t.object(this.object)}},Rt=class{constructor(t){this.objects=t}moveArgs(t){return t.makeMoveVec({objects:this.objects.map(e=>t.object(e))})}},Y=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 So}from"buffer";import{normalizeSuiAddress as Wi}from"@mysten/sui.js/utils";var Bt=class extends S{constructor(t,e){super(3,t,{context:e})}};var Re=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 Bt("Invalid contract return type.",{ctx:{expectType:"address",gotType:o}});return Wi(So.from(n).toString("hex"))}getU64(t=0,e=0){let[n,o]=this.getValue(t,e);if(o!=="u64")throw new Bt("Invalid contract return type.",{ctx:{expectType:"u64",gotType:o}});return So.from(n).readBigInt64LE()}};import{bcs as To}from"@mysten/sui.js/bcs";var k=class extends S{constructor(t,e,n){super(2,`Invalid input: ${t}`,{context:{fieldKey:e,fieldValue:n}})}};var Co={groupId:"string",name:"string"},Ui=64;function Io(a){return ko(a),To.ser(Co,a).toString("base64")}function Nt(a){let t=To.de(Co,a,"base64");return ko(t),t}function ko(a){if(!wo(a.name))throw new k("Invalid metadata: Name contains unknown character");if(!wo(a.groupId))throw new k("Invalid metadata: Group ID contains unknown character");if(a.name.length>Ui)throw new k("Invalid metadata: Name exceed max length 64")}function wo(a){return/^[\x00-\x7F]+$/.test(a)}import{normalizeStructTag as Be}from"@mysten/sui.js/utils";function Ne(a,t){return Be(a)===Be(t)}function J(a,t){return Be(a)===Be(t)}var Me="txn.gas";import{nanoid as qi}from"nanoid";function xo(){return qi()}var st=class a{constructor(t,e,n){this.globals=t;this.feeContract=e;this.streamContract=n}static convertCreateStreamInfoToInternal(t){return{metadata:Io({name:t.name,groupId:xo()}),coinType:Fi(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 vo,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),[m]=e.splitCoins(i,[e.pure(d+u,"u64")]),[b]=e.splitCoins(s,[e.pure(this.flatSuiFee,"u64")]);this.streamContract.createStream(e,{paymentCoin:new Y(m),flatFeeCoin:new Y(b),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:ba,denominator:je},claimFeePercent:{numerator:yo,denominator:je},flatFeePerStream:fa}}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===Me?n=t.gas:n=t.object(e.primaryCoin),n}getCreateStreamCoinRequests(t,e){let n=t.coinType;return Ne(n,Ao)?[{coinType:n,amount:e.totalAmount+e.streamFeeAmount+e.flatFeeAmount}]:[{coinType:n,amount:e.totalAmount+e.streamFeeAmount},{coinType:Ao,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 fa}getStreamFeeLocal(t){return t*ba/je}async getStreamFeeRemote(t){let e=this.feeContract.streamingFee(new vo,t),n=await this.globals.suiClient.devInspectTransactionBlock({sender:await this.globals.walletAddress(),transactionBlock:e});return new Re(n).getU64()}get wallet(){return this.globals.wallet}};import{Transactions as Do}from"@mysten/sui.js/transactions";var Oo="0x0000000000000000000000000000000000000000000000000000000000000006";var yt=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(Do.MoveCall({target:n,arguments:e.arguments.map(o=>o instanceof Rt?o.moveArgs(t):o instanceof F?o.moveArg(t):o instanceof Y?o.moveArg():t.pure(o)),typeArguments:e.typeArgs})),t}addTransactionBlock(t,e,n=[],o=[]){t.add(Do.MoveCall({target:e,arguments:n.map(r=>r instanceof Rt?r.moveArgs(t):r instanceof F?r.moveArg(t):r instanceof Y?r.moveArg():t.pure(r)),typeArguments:o}))}makeObject(t){return typeof t=="string"?new F(t):t}vaultObject(){return new F(this.config.vaultObjId)}roleObject(){return new F(this.config.roleObjId)}feeObject(){return new F(this.config.feeObjId)}clockObject(){return new F(Oo)}};var St=class a extends yt{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 $=class a extends yt{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 wt=class{constructor(t){this.globals=t;let e=t.envConfig.contract;this.feeContract=new St(e,t),this.streamContract=new $(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 o=new Ee;return this.streamContract.setAutoClaim(o,{streamId:t,enabled:e,coinType:n})}claimStream(t,e){let n=new Ee;return this.streamContract.claimStream(n,{streamId:t,coinType:e})}claimStreamByProxy(t,e){let n=new Ee;return this.streamContract.claimStreamByProxy(n,{streamId:t,coinType:e})}cancelStream(t,e){let n=new Ee;return this.streamContract.cancelStream(n,{streamId:t,coinType:e}),n}};var O=class extends S{constructor(t,e={}){super(0,t,e)}};async function ha(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 ga=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)}},Tt=class{constructor(t){this.requester=t;this.pager=new ga(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 Le=class extends S{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 $i=25;async function Po(a,t,e,n="0x2::sui::SUI",o=$i){let r=new ya(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 Le(n,e,i);return s}var ya=class extends Tt{constructor(e,n,o,r){super(new Sa(e,n,o,r));this.suiClient=e;this.owner=n;this.coinType=o;this.reqPageSize=r}},Sa=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 Fe}from"@mysten/sui.js/transactions";import{normalizeStructTag as jo,parseStructTag as Ki}from"@mysten/sui.js/utils";import{DateTime as Gi}from"luxon";var We=class extends S{constructor(){super(7,"Connected wallet is not creator")}};var Mt=class extends S{constructor(){super(8,"Connected wallet is not recipient")}};var Et=class extends S{constructor(t,e){super(6,t,{context:e})}};var Ue=class extends S{constructor(t){super(5,"Stream not found",{context:{streamId:t}})}};import{DateTime as Vi,Duration as Qi}from"luxon";var _o=(1n<<64n)-1n,qe=1e3;function wa(a){let t;typeof a=="number"?t=a:typeof a=="bigint"?t=Number(a):t=a.toMillis();let e=Math.round(t/qe);return Vi.fromMillis(e*qe)}function Ta(a){let t;typeof a=="number"?t=a:typeof a=="bigint"?t=Number(a):t=a.toMillis();let e=Math.round(t/qe);return Qi.fromMillis(e*qe)}var Z=class a{constructor(t,e,n){this.globals=t;this.streamId=e;this.rawData=n;this.streamContract=new $(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 We;let t=new Fe;return this.streamContract.cancelStream(t,{streamId:this.streamId,coinType:this.coinType}),t}async claim(){if(await this.globals.walletAddress()!==this.recipient)throw new Mt;let t=new Fe;return this.streamContract.claimStream(t,{streamId:this.streamId,coinType:this.coinType}),t}async setAutoClaim(t){if(await this.globals.walletAddress()!==this.recipient)throw new Mt;let e=new Fe;return this.streamContract.setAutoClaim(e,{streamId:this.streamId,coinType:this.coinType,enabled:t}),e}async claimByProxy(){let t=new Fe;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 jo(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 Ta(this.rawData.config.epochInterval)}get groupId(){let{metadata:t}=this.rawData.config;return Nt(t).groupId}get name(){let{metadata:t}=this.rawData.config;return Nt(t).name}get recipient(){return this.rawData.config.recipient}get timeStart(){return wa(this.rawData.config.timeStart)}get duration(){let t=this.rawData.config,e=t.epochInterval*t.totalEpoch;return Ta(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:wa((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===_o?0n:this.rawData.status.epochClaimed*this.amountPerEpoch+this.cliff}get currentEpoch(){let t=Gi.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 Ue(t):new Et(`get stream data: ${e.error.code}`,{streamId:t,...e.error});let n=e.data.content;if(n.dataType!=="moveObject")throw new Et("Unexpected object type",{gotType:n.dataType});let{typeParams:o}=Ki(n.type),r=jo(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 Ca,SUI_TYPE_ARG as Hi}from"@mysten/sui.js/utils";import{Duration as Ro}from"luxon";var $e=class extends S{constructor(t,e){super(12,`Transaction failed: ${e}`,{context:{status:t,msg:e}})}};var zi=1e3,Ve=class{constructor(t){this.globals=t;this.coinMetaHelper=new Ia(t.suiClient),this.createStreamHelper=new wt(t).createStreamHelper()}coinMetaHelper;createStreamHelper;getStreamIdsFromCreateStreamResponse(t){if(t.effects?.status.status!=="success")throw new $e(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 k("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 k("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 k("Invalid stream steps: 0");let e=BigInt(t.total.toMillis())/t.steps,n=t.timeStart.plus(Ro.fromMillis(Number(e*t.steps))),o={timeStart:t.timeStart,timeEnd:n,interval:Ro.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:Ca(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:Ca(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 k("Stream amount too small","totalAmount",e);if(t.cliffAmount>t.realTotalAmount)throw new k("Invalid cliff settings")}validateTimeline(t){if(t.interval.toMillis()<zi)throw new k("Interval shall be at least 1 second","interval",t.interval)}},Ia=class{constructor(t){this.suiClient=t;this.coinMetaReg=new Map}coinMetaReg;async getCoinMeta(t){let e=Ca(t||Hi);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 Bo,normalizeSuiAddress as Ke}from"@mysten/sui.js/utils";import{DateTime as No}from"luxon";var Ct=class extends S{constructor(t,e){super(9,`Invalid stream group: ${t}`,{context:e})}};var Xi=25;async function xa(a,t,e){let n=new Lt(t),o=new Wt(a,n,e);return await ha(o)}var Lt=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]}},Wt=class extends Tt{constructor(e,n,o){super(new ka(e,n,o));this.suiClient=e;this.idIter=n;this.options=o}},ka=class{constructor(t,e,n){this.suiClient=t;this.stringIter=e;this.options=n;this.filter=n?.filter,this.pageSize=n?.pageSize||Xi,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 Qe=class a{constructor(t,e){this.globals=t;this.streams=e;if(e.length===0)throw new Ct("stream size 0");let n=e.map(r=>r.groupId);if(new Set(n).size!==1)throw new k("Stream does not have same group ID")}type="StreamGroup";static async new(t,e){let n=await xa(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=>{Yi(n,r)||(o=!1)}),o}async refresh(){let t=await xa(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)=>Z.fromObjectData(t,e[i],r)).filter(r=>!!r);if(new Set(o.map(r=>r.groupId)).size!==1)throw new Ct("Not same group ID");if(!this.checkStreamGroup(o))throw new Ct("Not same stream settings");return o}};function Yi(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 Ut=class a{constructor(t,e){this.it=t;this.pageSize=e}static async newIncoming(t){let e=await Ge.newIncoming(t);return new a(e,t.pageSize)}static async newOutgoing(t){let e=await Ge.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}},Ge=class a{constructor(t){this.requester=t}cachedNext;static async newIncoming(t){let e=await He.newIncomingQuery(t);return new a(e)}static async newOutgoing(t){let e=await He.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}},He=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 Lt(n.flat().map(i=>i.streamId));this.objectIter=new Wt(t.suiClient,r)}current=0;objectIter;static async newIncomingQuery(t){let e=ns(t.query),n=await t.globals.walletAddress(),r=(await t.globals.backend.getIncomingStreams(n,e)).filter(s=>Ke(s.recipient)===Ke(n)),i=Mo(r);return new a(t.globals,n,i,t.query)}static async newOutgoingQuery(t){let e=as(t.query),n=await t.globals.walletAddress(),o=await t.globals.backend.getOutgoingStreams(n,e),r=Mo(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 ts(this.globals,t[0].streamId,this.objectIter);return this.current++,Eo(e,this.query)?e:this.doNextRequest()}if(t.length>1){let e=await es(this.globals,t.map(n=>n.streamId),this.objectIter);return this.current++,Zi(e,this.query)?e:this.doNextRequest()}throw new O("Stream group with no stream")}};function Mo(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)=>No.fromISO(n[0].createDate).toMillis()-No.fromISO(e[0].createDate).toMillis())}function Eo(a,t){if(t===void 0)return!0;let e=Ji(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 Ji(a,t){return t===void 0?!0:Array.isArray(t)?t.includes(a.progress.status):a.progress.status===t}function Zi(a,t){if(!t)return!0;let e=!1;return a.streams.forEach(n=>{Eo(n,t)&&(e=!0)}),e}async function ts(a,t,e){let n=await Lo(e,t);return Z.fromObjectData(a,t,n)}async function es(a,t,e){let n=[];for(;n.length<t.length;){let o=await Lo(e,t[n.length]);n.push(o)}return Qe.newFromObjectResponse(a,t,n)}async function Lo(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 ns(a){return{status:va(a?.status),coinType:Wo(a?.coinType),sender:Uo(a?.sender)}}function as(a){return{status:va(a?.status),coinType:Wo(a?.coinType),recipient:Uo(a?.recipient)}}function va(a){return a===void 0||a.length===0?"all":Array.isArray(a)?a.reduce((t,e)=>{let n=va(e);return!t||t===n?n:"all"},void 0):os(a)}function os(a){switch(a){case"STREAMING":case"STREAMED":case"CANCELED":return"active";case"COMPLETED":case"SETTLED":return"inactive";default:throw new k("Unknown stream filtered status")}}function Wo(a){if(a)return Array.isArray(a)?a.length!==0?a.map(t=>Bo(t)):void 0:Bo(a)}function Uo(a){if(a)return Array.isArray(a)?a.length!==0?a.map(t=>Ke(t)):void 0:Ke(a)}var Aa=class{constructor(t){this.msafe=t}get type(){return"msafe"}async address(){return this.msafe.address()}async requestCoins(t){return this.msafe.requestCoins(t)}},ze=class{constructor(t){this.account=t}async address(){return this.account.address}},Oa=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(Ne(t.coinType,rs))return{primaryCoin:Me};if(t.amount<=0)throw new k("Invalid coin request","coinAmount",t.amount);let e=await Po(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)}}},Xe=class{globals;helper;constructor(t,e){this.globals=ht.new(t,e),this.helper=new Ve(this.globals)}connectSingleWallet(t){let e=new Oa(t,this.globals.suiClient);this.globals.connectWallet(e)}connectMSafeAccount(t){let e=new Aa(t);this.globals.connectWallet(e)}async createStream(t){return this.builder().createStreams(t)}async getStream(t){return Z.new(this.globals,t)}async getIncomingStreams(t,e=10){return Ut.newIncoming({globals:this.globals,query:t,pageSize:e})}async getOutgoingStreams(t,e=10){return Ut.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=>is(n))}async getRecipientsForStreamFilter(t){let e=await this.wallet.address();return(await this.globals.backend.getAllRecipients(e,t)).map(o=>qo(o))}async getCreatorsForStreamFilter(t){let e=await this.wallet.address();return(await this.globals.backend.getAllSenders(e,t)).map(o=>qo(o))}get wallet(){return this.globals.wallet}builder(){return new wt(this.globals)}};import ss from"sort-keys-recursive";var Ye=class{constructor(t){this.data=t}serialize(){return JSON.stringify(ss(this.data))}};var L=class extends Ye{application="mpay";getClient(t,e){let n=new Xe(t==="sui:mainnet"?"prod":"dev");return n.connectSingleWallet(new ze(e)),n}};var qt=class extends L{constructor(e){super(e);this.data=e}txType=ds.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 ls}from"@msafe/sui3-utils";var Ft=class extends L{constructor(e){super(e);this.data=e}txType=ls.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 us}from"@msafe/sui3-utils";var $t=class extends L{constructor(e){super(e);this.data=e}txType=us.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 ps}from"@msafe/sui3-utils";var Vt=class extends L{constructor(e){super(e);this.data=e}txType=ps.Stream;txSubType="CreateStream";async build(e){let{network:n,account:o}=e;return this.getClient(n,o).createStream(this.data)}};import{bcs as Fo}from"@mysten/sui.js/bcs";import{normalizeStructTag as ms,normalizeSuiAddress as Qt}from"@mysten/sui.js/utils";var It=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 Qt(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 Fo.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 Qt(t.value.Object.ImmOrOwned.objectId)}return Qt(t.value)}static getSharedObjectId(t){if(t.type!=="object")throw new Error(`not object argument: ${JSON.stringify(t)}`);if(typeof t.value!="object")return Qt(t.value);if(!("Object"in t.value)||!("Shared"in t.value.Object))throw new Error("not Shared");return Qt(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 Fo.de(e,new Uint8Array(n))}typeArg(t){return ms(this.moveCall.typeArguments[t])}txArg(t){return this.moveCall.arguments[t]}};var Je=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"&&J(e.target,this.contract.createStreamTarget));if(t.length===0)throw new O("No create stream transactions");return t.map(e=>new It(e,this.txb))}getCreationInfoFromMoveCall(t){let e=t.decodeInputString(4),{name:n,groupId:o}=Nt(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),m=t.typeArg(0);return{name:n,groupId:o,recipient:r,timeStart:i,cliff:s,epochInterval:c,totalEpoch:l,amountPerEpoch:d,cancelable:u,coinType:m}}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 k("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 $(this.globals.envConfig.contract,this.globals)}get feeContract(){return new St(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 Ze=class{constructor(t,e){this.globals=t;this.txb=e;this.contract=new $(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"&&J(e.target,this.contract.createStreamTarget))!==-1}isSetAutoClaimTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&&J(this.transactions[0].target,this.contract.setAutoClaimTarget)}isCancelStreamTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&&J(this.transactions[0].target,this.contract.cancelStreamTarget)}isClaimStreamTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&&J(this.transactions[0].target,this.contract.claimStreamTarget)}isClaimByProxyTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&&J(this.transactions[0].target,this.contract.claimStreamByProxyTarget)}decodeCreateStreamTransaction(){return new Je(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 It(t,this.txb)}};import{TransactionType as bs}from"@msafe/sui3-utils";var Kt=class extends L{constructor(e){super(e);this.data=e}txType=bs.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 tn=class{application="mpay";async deserialize(t){let{network:e,transactionBlock:n}=t,o=ht.new(e==="sui:mainnet"?"prod":"dev"),i=new Ze(o,n).decode(),s;switch(i.type){case"CreateStream":s=new Vt(i.info);break;case"SetAutoClaim":s=new Kt({streamId:i.streamId,enabled:i.enabled});break;case"Claim":s=new $t({streamId:i.streamId});break;case"ClaimByProxy":s=new Ft({streamId:i.streamId});break;case"Cancel":s=new qt({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 Vt(e);break;case"Claim":n=new $t(e);break;case"ClaimByProxy":n=new Ft(e);break;case"SetAutoClaim":n=new Kt(e);break;case"Cancel":n=new qt(e);break;default:throw new Error("not implemented")}return n.build({...t})}};import{TransactionDefaultApplication as Ss,TransactionSubTypes as Da}from"@msafe/sui3-utils";import{buildCoinTransferTxb as fs}from"@msafe/sui3-utils";var en=class a extends p{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o}=e;return fs(n,this.data,o.address)}static fromData(e){return new a(e)}};import{buildObjectTransferTxb as gs}from"@msafe/sui3-utils";var nn=class a extends p{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o}=e;return gs(n,this.data,o.address)}static fromData(e){return new a(e)}};import{isSameAddress as hs}from"@msafe/sui3-utils";import{TransactionBlock as ys}from"@mysten/sui.js/transactions";var an=class a extends p{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{account:n}=e,o=ys.from(this.data.content);if(!hs(o.blockData.sender,n.address))throw new Error("Invalid sender address");return o}static fromData(e){return new a(e)}};var on=class{application;constructor(){this.application=Ss}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 Da.assets.coin.send:o=en.fromData(t.intentionData);break;case Da.assets.object.send:o=nn.fromData(t.intentionData);break;case Da.others.plain:o=an.fromData(t.intentionData);break;default:throw new Error("not implemented")}return o.build({suiClient:e,account:n})}};import{TransactionType as Os}from"@msafe/sui3-utils";import{TransactionType as Gt}from"@msafe/sui3-utils";import{bcs as $o}from"@mysten/sui.js/bcs";import{normalizeStructTag as Cs,normalizeSuiAddress as Ht}from"@mysten/sui.js/utils";var ws={ProtocolPackage:"0x7c9b90b3fda0fa4aa8ee88ae6c4a0b83c773f74936b5354448cb94662e94442d",StorageId:"0xbb4e2f4b6205c2e2a2db47aeb4f830796ec7c005f88537ee775986639bc442fe",Incentive:"0xaaf735bf83ff564e1b219a0d644de894ef5bdc4b2250b126b2a46dd002331821",IncentiveV2:"0xf87a8acb8b81d14307894d12595541a73f19933f88e1326d5be349c7a6f7559c",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"},usdc:{name:"USDC",assetId:1,coinType:"usdc",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"}}},g=ws;var rn=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.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`)}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 sn(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:Gt.Other,type:"ClaimReward",intentionData:{claims:t}}}decodeEntryBorrow(){let t=this.helper.decodeInputU8(4),e=this.helper.decodeInputU64(5),n=this.findPoolByAssetId(t);return{txType:Gt.Other,type:"EntryBorrow",intentionData:{amount:e,coinType:n.coinType}}}decodeEntryDeposit(){let t=this.helper.decodeInputU8(3),e=this.helper.decodeInputU64(5),n=this.findPoolByAssetId(t);return{txType:Gt.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:Gt.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:Gt.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 sn(t,this.txb)}},sn=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 Ht(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 $o.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 Ht(t.value.Object.ImmOrOwned.objectId)}return Ht(t.value)}static getSharedObjectId(t){if(t.type!=="object")throw new Error(`not object argument: ${JSON.stringify(t)}`);if(typeof t.value!="object")return Ht(t.value);if(!("Object"in t.value)||!("Shared"in t.value.Object))throw new Error("not Shared");return Ht(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 $o.de(e,new Uint8Array(n))}typeArg(t){return Cs(this.moveCall.typeArguments[t])}txArg(t){return this.moveCall.arguments[t]}};import{TransactionBlock as Is}from"@mysten/sui.js/transactions";function Pa(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 Vo(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 Qo(a,t,e){return a.moveCall({target:`${g.ProtocolPackage}::incentive_v2::entry_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]}),a}function _a(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 Ko(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 cn=class a extends p{constructor(e){super(e);this.data=e}txType;txSubType;async build(){let{claims:e}=this.data,n=new Is;return e.forEach(o=>{let{assetId:r,poolId:i,option:s,typeArguments:c}=o;Ko(n,r,i,s,c)}),n}static fromData(e){return new a(e)}};import{TransactionBlock as ks}from"@mysten/sui.js/transactions";var dn=class a extends p{constructor(e){super(e);this.data=e}txType;txSubType;async build(){let{coinType:e,amount:n}=this.data,o=new ks;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 Qo(o,r,n)}static fromData(e){return new a(e)}};import{TransactionBlock as xs}from"@mysten/sui.js/transactions";async function ln(a,t,e){let n=await a.getCoins({owner:t,coinType:e});return console.log("getTokenObjs",t,n),n}var un=class a extends p{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 xs;if(console.log("build",this.data),r==="sui"){let[u]=s.splitCoins(s.gas,[i]);return Pa(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 ln(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 Pa(s,c,s.object(d),i)}static fromData(e){return new a(e)}};import{TransactionBlock as vs}from"@mysten/sui.js/transactions";var pn=class a extends p{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 vs;if(console.log("build",this.data),r==="sui"){let[u]=s.splitCoins(s.gas,[i]);return _a(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 ln(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 _a(s,c,s.object(d),i)}static fromData(e){return new a(e)}};import{TransactionBlock as As}from"@mysten/sui.js/transactions";var mn=class a extends p{constructor(e){super(e);this.data=e}txType;txSubType;async build(){let{coinType:e,amount:n}=this.data,o=new As;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 Vo(o,r,n)}static fromData(e){return new a(e)}};var bn=class{application="navi";async deserialize(t){let{transactionBlock:e}=t,o=new rn(e).decode();return{txType:Os.Other,txSubType:o.type,intentionData:o.intentionData}}async build(t){let{suiClient:e,account:n}=t,o;switch(t.txSubType){case"EntryDeposit":o=un.fromData(t.intentionData);break;case"EntryBorrow":o=dn.fromData(t.intentionData);break;case"EntryRepay":o=pn.fromData(t.intentionData);break;case"EntryWithdraw":o=mn.fromData(t.intentionData);break;case"ClaimReward":o=cn.fromData(t.intentionData);break;default:throw new Error("not implemented")}return o.build({suiClient:e,account:n})}};import{TransactionSubTypes as Ds,TransactionType as Ps}from"@msafe/sui3-utils";import{TransactionBlock as _s}from"@mysten/sui.js/transactions";import{fromHEX as js,toHEX as Rs}from"@mysten/sui.js/utils";import qy from"sort-keys-recursive";var Bs="msafe-plain-tx",Ns=Ds.others.plain;var fn=class{application;constructor(){this.application=Bs}async deserialize(t){let{transactionBlock:e,suiClient:n}=t,o=await e.build({client:n});return{txType:Ps.Other,txSubType:Ns,intentionData:{content:Rs(o)}}}async build(t){let{suiClient:e,account:n}=t,o=_s.from(js(t.intentionData.content)),r=await e.devInspectTransactionBlock({transactionBlock:o,sender:n.address});if(!(r.effects.status.status==="success"))throw new Error(r.effects.status.error);return o}};var gn=class{apps;constructor(t){this.apps=new Map(t.map(e=>[e.application,e]))}getAppHelper(t){let e=this.apps.get(t);if(!e)throw new Error(`${t} not registered`);return e}};import{TransactionType as cc}from"@msafe/sui3-utils";import{TransactionType as D}from"@msafe/sui3-utils";import{bcs as Ra}from"@mysten/sui.js/bcs";import{normalizeStructTag as Es,normalizeSuiAddress as Xt}from"@mysten/sui.js/utils";var tt="6601955b8b0024600a917079",hn="0xefe8b36d5b2e43728cc323298626b83177803521d195cfb11e15b910e892fddf";var kt="0xc63072e7f5f4983a2efaf5bdba1480d5e7d74d57948e1c7cc436f8e22cbeb410",et="0x7016aae72cfc67f2fadf55769c0a7dd54291a583b63051a5ed71081cce836ac6::sca::SCA",dt=["eth","btc","usdc","usdt","sui","apt","sol","cetus","afsui","hasui","vsui","sca"],yn=["eth","btc","usdc","usdt","sui","apt","sol","cetus","afsui","hasui","vsui","sca"],zt=["seth","ssui","susdc","susdt","scetus","safsui","shasui","svsui"],Go=["sui"],xt=["sui","usdc","usdt"];var Ho={eth:8,btc:8,usdc:6,usdt:6,sui:9,apt:8,sol:8,sca:9,cetus:9,afsui:9,hasui:9,vsui:9,seth:8,sbtc:8,susdc:6,susdt:6,ssui:9,sapt:8,ssol:8,scetus:9,safsui:9,shasui:9,svsui:9,ssca:9};var Sn={seth:"sui",ssui:"sui",susdc:"sui",susdt:"sui",scetus:"sui",safsui:"sui",shasui:"sui",svsui:"sui"},zo={sui:["sui","sca"],usdc:["sui","sca"],usdt:["sui","sca"]},Xo={sui:"0x0000000000000000000000000000000000000000000000000000000000000002",eth:"0xaf8cd5edc19c4512f4259f0bee101a40d41ebed738ade5874359610ef8eeced5",btc:"0x027792d9fed7f9844eb4839566001bb6f6cb4804f66aa2da6fe1ee242d896881",usdc:"0x5d4b302506645c37ff133b98c4b50a5ae14841659738d6d733d59d0d217a93bf",usdt:"0xc060006111016b8a020ad5b33834984a437aaa7d3c74c18e09a95d48aceab08c",apt:"0x3a5143bb1196e3bcdfab6203d1683ae29edd26294fc8bfeafe4aaa9d2704df37",sol:"0xb7844e289a8410e50fb3ca48d69eb9cf29e27d223ef90353fe1bd8e27ff8f3f8",cetus:"0x06864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b",afsui:"0xf325ce1300e8dac124071d3152c5c5ee6174914f8bc2161e88329cf579246efc",hasui:"0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d",vsui:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55",sca:"0x7016aae72cfc67f2fadf55769c0a7dd54291a583b63051a5ed71081cce836ac6"},B={eth:"0xaf8cd5edc19c4512f4259f0bee101a40d41ebed738ade5874359610ef8eeced5",btc:"0x027792d9fed7f9844eb4839566001bb6f6cb4804f66aa2da6fe1ee242d896881",usdc:"0x5d4b302506645c37ff133b98c4b50a5ae14841659738d6d733d59d0d217a93bf",usdt:"0xc060006111016b8a020ad5b33834984a437aaa7d3c74c18e09a95d48aceab08c",apt:"0x3a5143bb1196e3bcdfab6203d1683ae29edd26294fc8bfeafe4aaa9d2704df37",sol:"0xb7844e289a8410e50fb3ca48d69eb9cf29e27d223ef90353fe1bd8e27ff8f3f8"},ja={vsui:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55"};var wn=class{constructor(t,e){this.txb=t;this._builder=e}_builder;decode(){if(this.isExtendPeriodAndStakeMoreSca())return this.decodePeriodAndStakeMoreSca();if(this.isStakeScaFirsTime()||this.isStakeMoreSca())return this.decodeStakeSca();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.isWithdrawLendingTransaction())return this.decodeWithdrawLending();if(this.isSupplyLendingTransaction())return this.decodeSupplyLending();if(this.isBorrowWithBoostTransaction())return this.decodeBorrowWithBoost();if(this.isBorrowTransaction())return this.decodeBorrow();if(this.isRepayTransaction())return this.decodeRepay();if(this.isUnstakeSpoolTransaction())return this.decodeUnstakeSpool();if(this.isClaimRewardTransaction())return this.decodeClaimReward();if(this.isRenewExpiredVeSca())return this.decodeRenewExpiredVeSca();if(this.isExtendPeriod())return this.decodeExtendStakePeriod();if(this.isOpenObligationTransaction())return this.decodeOpenObligation();if(this.isRedeemSca())return this.decodeRedeemSca();if(this.isMigrateAndClaim())return this.decodeMigrateAndClaim();throw new Error("Unknown transaction type")}get coreId(){return{protocolPkg:this._builder.address.get("core.packages.protocol.id"),market:this._builder.address.get("core.market"),version:this._builder.address.get("core.version"),coinDecimalsRegistry:this._builder.address.get("core.coinDecimalsRegistry"),xOracle:this._builder.address.get("core.oracles.xOracle"),spoolPkg:this._builder.address.get("spool.id"),borrowIncentivePkg:this._builder.address.get("borrowIncentive.id"),veScaPkgId:this._builder.address.get("vesca.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)}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`)}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}isRepayTransaction(){return!!this.getMoveCallTransaction(`${this.coreId.protocolPkg}::repay::repay`)}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}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`)}isOpenObligationTransaction(){return!!this.getMoveCallTransaction(`${this.coreId.protocolPkg}::open_obligation::open_obligation_entry`)}isMigrateAndClaim(){let t=this.getMoveCallTransaction(`${kt}::user::redeem_rewards`),e=this.getMoveCallTransaction(`${this.coreId.borrowIncentivePkg}::user::stake_with_ve_sca`);return!!t&&!!e}decodeMigrateAndClaim(){let t=this.helperStakeObligationWithVeSca.decodeOwnedObjectId(9),e=this.helperClaimBorrowReward[0].decodeSharedObjectId(2),n=this.helperClaimBorrowReward[0].decodeOwnedObjectId(3),o=this._builder.utils.parseCoinNameFromType(this.helperClaimBorrowReward[0].typeArg(0));return{txType:D.Other,type:"MigrateAndClaim",intentionData:{veScaKey:t,obligationKey:e,obligationId:n,rewardCoinName:o}}}decodeOpenObligation(){return{txType:D.Other,type:"OpenObligation",intentionData:{}}}decodeRedeemSca(){let t=this.helperRedeemSca.decodeOwnedObjectId(1);return{txType:D.Other,type:"RedeemSca",intentionData:{veScaKey:t}}}decodeRenewExpiredVeSca(){let t=this.helperRenewExpired.getNestedInputParam(4),e=this.helperRenewExpired.decodeInputU64(5),n=new W(t,this.txb).getAmountInput().reduce((f,y)=>f+y,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,m,b=[{condition:i,isOld:!0},{condition:s,isOld:!1},{condition:c,isOld:!1}];for(let f=0;f<b.length;f++)b[f].condition.length>1&&([m,u]=b[f].condition,l=!0,d=b[f].isOld);return{txType:D.Other,type:"RenewExpStakePeriod",intentionData:{amount:n,lockPeriodInDays:e,obligationId:u,obligationKey:m,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:D.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 W(t,this.txb).getAmountInput().reduce((b,f)=>b+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,m=[{condition:o,isOld:!0},{condition:r,isOld:!1},{condition:s,isOld:!1}];for(let b=0;b<m.length;b++)m[b].condition.length>1&&([u,d]=m[b].condition,c=!0,l=m[b].isOld);return{txType:D.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),console.log(t));let n=new W(t,this.txb).getAmountInput().reduce((b,f)=>b+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,m=[{condition:o,isOld:!0},{condition:r,isOld:!1},{condition:s,isOld:!1}];for(let b=0;b<m.length;b++)m[b].condition.length>1&&([u,d]=m[b].condition,c=!0,l=m[b].isOld);return{txType:D.Other,type:"StakeSca",intentionData:{amount:n,lockPeriodInDays:e,obligationId:d,obligationKey:u,veScaKey:i,isObligationLocked:c,isOldBorrowIncentive:l}}}decodeSupplyLending(){let t=this._builder.utils.parseCoinNameFromType(this.helperMint.typeArg(0)),e=this.helperMint.getNestedInputParam(2),n=new W(e,this.txb).getAmountInput().reduce((o,r)=>o+r,0);return{txType:D.Other,type:"SupplyLending",intentionData:{amount:n,coinName:t}}}decodeWithdrawLending(){let t=this._builder.utils.parseCoinNameFromType(this.helperRedeem.typeArg(0)),e=this.helperRedeem.getNestedInputParam(2),n=new W(e,this.txb).getAmountInput().reduce((o,r)=>o+r,0);return{txType:D.Other,type:"WithdrawLending",intentionData:{amount:n,coinName:t}}}decodeDepositCollateral(){let t=this._builder.utils.parseCoinNameFromType(this.helperDepositCollateral.typeArg(0)),e=this.helperDepositCollateral.getNestedInputParam(3),n=new W(e,this.txb).getAmountInput().reduce((r,i)=>r+i,0),o=this.helperDepositCollateral.decodeSharedObjectId(1);return{txType:D.Other,type:"DepositCollateral",intentionData:{amount:n,obligationId:o,collateralCoinName:t}}}decodeWithdrawCollateral(){let t=this._builder.utils.parseCoinNameFromType(this.helperWithdrawCollateral.typeArg(0)),e=this.helperWithdrawCollateral.decodeInputU64(5),n=this.helperWithdrawCollateral.decodeSharedObjectId(1),o=this.helperWithdrawCollateral.decodeOwnedObjectId(2);return{txType:D.Other,type:"WithdrawCollateral",intentionData:{amount:e,collateralCoinName:t,obligationKey:o,obligationId:n}}}decodeBorrow(){let t=this._builder.utils.parseCoinNameFromType(this.helperBorrow.typeArg(0)),e=this.helperBorrow.decodeInputU64(5),n=this.helperBorrow.decodeSharedObjectId(1),o=this.helperBorrow.decodeOwnedObjectId(2);return{txType:D.Other,type:"Borrow",intentionData:{amount:e,coinName:t,obligationKey:o,obligationId:n}}}decodeBorrowWithBoost(){let t=this._builder.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:D.Other,type:"BorrowWithBoost",intentionData:{amount:n,coinName:t,obligationKey:r,obligationId:o,veScaKey:e}}}decodeRepay(){let t=this._builder.utils.parseCoinNameFromType(this.helperRepay.typeArg(0)),e=this.helperRepay.getNestedInputParam(3),n=new W(e,this.txb).getAmountInput().reduce((r,i)=>r+i,0),o=this.helperRepay.decodeSharedObjectId(1);return{txType:D.Other,type:"Repay",intentionData:{amount:n,obligationId:o,coinName:t}}}decodeStakeSpool(){let t;this.isCreateStakeAccountTransaction()||(t=this.helperStake.decodeOwnedObjectId(1));let e=this.helperStake.getNestedInputParam(2),n=new W(e,this.txb).getAmountInput().reduce((i,s)=>i+s,0),o=this.helperStake.typeArg(0),r=this._builder.utils.parseCoinNameFromType(o);return{txType:D.Other,type:"StakeSpool",intentionData:{amount:n,marketCoinName:r,stakeAccountId:t}}}decodeUnstakeSpool(){let t=this.helperUnstake.decodeOwnedObjectId(1),e=this.helperUnstake.decodeInputU64(2),n=this.helperUnstake.typeArg(0),o=this._builder.utils.parseCoinNameFromType(n);return{txType:D.Other,type:"UnstakeSpool",intentionData:{amount:e,marketCoinName:o,stakeAccountId:t}}}decodeSupplyWithStakeSpool(){let t=this._builder.utils.parseCoinNameFromType(this.helperMint.typeArg(0)),e=this.helperMint.getNestedInputParam(2),n=new W(e,this.txb).getAmountInput().reduce((r,i)=>r+i,0),o;return this.isCreateStakeAccountTransaction()||(o=this.helperStake.decodeOwnedObjectId(1)),{txType:D.Other,type:"SupplyAndStakeLending",intentionData:{amount:n,coinName:t,stakeAccountId:o}}}decodeUnstakeAndWithdraw(){let t=[];this.helperUnstakes.forEach(r=>{let i=r.decodeOwnedObjectId(1),s=r.decodeInputU64(2);t.push({id:i,coin:s})});let e=this._builder.utils.parseCoinNameFromType(this.helperRedeems[0].typeArg(0)),n=this.helperRedeems.find(r=>r.isHaveNestedInput(2)),o;return n&&(o=new W(n.getNestedInputParam(2),this.txb).getAmountInput().reduce((r,i)=>r+i,0)),{txType:D.Other,type:"WithdrawAndUnstakeLending",intentionData:{amount:o,coinName:e,stakeAccountId:t}}}decodeClaimReward(){let t=[],e=[],n=[];return this.helperClaimLendingReward.forEach(o=>{let r=o.decodeOwnedObjectId(2),i=o.typeArg(0),s=this._builder.utils.parseCoinNameFromType(i);t.push({stakeMarketCoinName:s,stakeAccountId:r})}),this.helperClaimBorrowV2Reward.forEach(o=>{let r=o.decodeSharedObjectId(3),i=o.decodeOwnedObjectId(4),s=this._builder.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._builder.utils.parseCoinNameFromType(o.typeArg(0));n.push({obligationId:i,obligationKey:r,rewardCoinName:s})}),{txType:D.Other,type:"ClaimIncentiveReward",intentionData:{lendingIncentive:t,borrowIncentiveV2:e,borrowIncentive:n}}}get helperClaimLendingReward(){return this.transactions.filter(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.spoolPkg}::user::redeem_rewards`)).map(e=>new C(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 C(e,this.txb))}get helperStakeMoreSca(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.veScaPkgId}::ve_sca::lock_more_sca`));return new C(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 C(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 C(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 C(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 C(t,this.txb)}get helperOldUnstakeObligation(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${kt}::user::unstake`));return new C(t,this.txb)}get helperUnstakeObligation(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.borrowIncentivePkg}::user::unstake`));return new C(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 C(t,this.txb)}get helperClaimBorrowReward(){return this.transactions.filter(e=>e.kind==="MoveCall"&&e.target.startsWith(`${kt}::user::redeem_rewards`)).map(e=>new C(e,this.txb))}get helperMint(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.protocolPkg}::mint::mint`));return new C(t,this.txb)}get helperUnstakes(){return this.transactions.filter(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.spoolPkg}::user::unstake`)).map(e=>new C(e,this.txb))}get helperRedeems(){return this.transactions.filter(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.protocolPkg}::redeem::redeem`)).map(e=>new C(e,this.txb))}get helperRedeem(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.protocolPkg}::redeem::redeem`));return new C(t,this.txb)}get helperStake(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.spoolPkg}::user::stake`));return new C(t,this.txb)}get helperUnstake(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.spoolPkg}::user::unstake`));return new C(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 C(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 C(t,this.txb)}get helperBorrow(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.protocolPkg}::borrow::borrow`));return new C(t,this.txb)}get helperRepay(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.protocolPkg}::repay::repay`));return new C(t,this.txb)}},W=class{constructor(t,e){this.splitCoin=t;this.txb=e}getAmountInput(){return this.splitCoin.amounts.map(t=>{if(t.kind==="Input")return Number(C.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 Ra.de(e,new Uint8Array(n))}return t.value}},C=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 Xt(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 Ra.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 Xt(t.value.Object.ImmOrOwned.objectId)}return Xt(t.value)}static getSharedObjectId(t){if(t.type!=="object")throw new Error(`not object argument: ${JSON.stringify(t)}`);if(typeof t.value!="object")return Xt(t.value);if(!("Object"in t.value)||!("Shared"in t.value.Object))throw new Error("not Shared");return Xt(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 Ra.de(e,new Uint8Array(n))}typeArg(t){return Es(this.moveCall.typeArguments[t])}txArg(t){return this.moveCall.arguments[t]}};import{TransactionBlock as I}from"@mysten/sui.js/transactions";import{normalizeSuiAddress as sc}from"@mysten/sui.js/utils";import Sr from"bignumber.js";var Yo={mainnet:{core:{version:"0x07871c4b3c847a0f674510d4978d5cf6f960452795e8ff6f189fd2088a3f6ac7",versionCap:"0x590a4011cb649b3878f3ea14b3a78674642a9548d79b7e091ef679574b158a07",object:"0xefe8b36d5b2e43728cc323298626b83177803521d195cfb11e15b910e892fddf",market:"0xa757975255146dc9686aa823b7838b507f315d704f428cbadad2f4ea061939d9",adminCap:"0x09689d018e71c337d9db6d67cbca06b74ed92196103624028ccc3ecea411777c",coinDecimalsRegistry:"0x200abe9bf19751cc566ae35aa58e2b7e4ff688fc1130f8d8909ea09bc137d668",obligationAccessStore:"0x733e30b7c94d619d78cb8f5bc4bfbb759ced9a531239028caabb2474e5be59c9",coins:{cetus:{id:"0x06864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b",metaData:"0x4c0dce55eff2db5419bbd2d239d1aa22b4a400c01bbb648b058a9883989025da",treasury:"",oracle:{supra:"",switchboard:"",pyth:{feed:"e5b274b2611143df055d6e7cd8d93fe1961716bcd4dca1cad87a83bc1e78c1ef",feedObject:"0x24c0247fb22457a719efac7f670cdc79be321b521460bd6bd2ccfa9f80713b14"}}},apt:{id:"0x3a5143bb1196e3bcdfab6203d1683ae29edd26294fc8bfeafe4aaa9d2704df37",metaData:"0xc969c5251f372c0f34c32759f1d315cf1ea0ee5e4454b52aea08778eacfdd0a8",treasury:"",oracle:{supra:"",switchboard:"",pyth:{feed:"03ae4db29ed4ae33d323568895aa00337e658e348b37509f5372ae51f0af00d5",feedObject:"0x7c5b7837c44a69b469325463ac0673ac1aa8435ff44ddb4191c9ae380463647f"}}},sol:{id:"0xb7844e289a8410e50fb3ca48d69eb9cf29e27d223ef90353fe1bd8e27ff8f3f8",metaData:"0x4d2c39082b4477e3e79dc4562d939147ab90c42fc5f3e4acf03b94383cd69b6e",treasury:"",oracle:{supra:"",switchboard:"",pyth:{feed:"ef0d8b6fda2ceba41da15d4095d1da392a0d2f8ed0c6c7bc0f4cfac8c280b56d",feedObject:"0x9d0d275efbd37d8a8855f6f2c761fa5983293dd8ce202ee5196626de8fcd4469"}}},btc:{id:"0x027792d9fed7f9844eb4839566001bb6f6cb4804f66aa2da6fe1ee242d896881",metaData:"0x5d3c6e60eeff8a05b693b481539e7847dfe33013e7070cdcb387f5c0cac05dfd",treasury:"",oracle:{supra:"",switchboard:"",pyth:{feed:"e62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43",feedObject:"0x9a62b4863bdeaabdc9500fce769cf7e72d5585eeb28a6d26e4cafadc13f76ab2"}}},eth:{id:"0xaf8cd5edc19c4512f4259f0bee101a40d41ebed738ade5874359610ef8eeced5",metaData:"0x8900e4ceede3363bef086d6b50ca89d816d0e90bf6bc46efefe1f8455e08f50f",treasury:"",oracle:{supra:"",switchboard:"",pyth:{feed:"ff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace",feedObject:"0x9193fd47f9a0ab99b6e365a464c8a9ae30e6150fc37ed2a89c1586631f6fc4ab"}}},usdc:{id:"0x5d4b302506645c37ff133b98c4b50a5ae14841659738d6d733d59d0d217a93bf",metaData:"0x4fbf84f3029bd0c0b77164b587963be957f853eccf834a67bb9ecba6ec80f189",treasury:"",oracle:{supra:"",switchboard:"",pyth:{feed:"eaa020c61cc479712813461ce153894a96a6c00b21ed0cfc2798d1f9a9e9c94a",feedObject:"0x5dec622733a204ca27f5a90d8c2fad453cc6665186fd5dff13a83d0b6c9027ab"}}},usdt:{id:"0xc060006111016b8a020ad5b33834984a437aaa7d3c74c18e09a95d48aceab08c",metaData:"0xfb0e3eb97dd158a5ae979dddfa24348063843c5b20eb8381dd5fa7c93699e45c",treasury:"",oracle:{supra:"",switchboard:"",pyth:{feed:"2b89b9dc8fdf9f34709a5b106b472f0f39bb6ca9ce04b0fd7f2e971688e2e53b",feedObject:"0x985e3db9f93f76ee8bace7c3dd5cc676a096accd5d9e09e9ae0fb6e492b14572"}}},sui:{id:"0x0000000000000000000000000000000000000000000000000000000000000002",metaData:"0x9258181f5ceac8dbffb7030890243caed69a9599d2886d957a9cb7656af3bdb3",treasury:"",oracle:{supra:"",switchboard:"0xbca474133638352ba83ccf7b5c931d50f764b09550e16612c9f70f1e21f3f594",pyth:{feed:"23d7315113f5b1d3ba7a83604c44b94d79f4fd69af77f804fc7f920a6dc65744",feedObject:"0x801dbc2f0053d34734814b2d6df491ce7807a725fe9a01ad74a07e9c51396c37"}}},afsui:{id:"0xf325ce1300e8dac124071d3152c5c5ee6174914f8bc2161e88329cf579246efc",metaData:"0x2f9217f533e51334873a39b8026a4aa6919497b47f49d0986a4f1aec66f8a34d",treasury:"",oracle:{supra:"",switchboard:"",pyth:{feed:"23d7315113f5b1d3ba7a83604c44b94d79f4fd69af77f804fc7f920a6dc65744",feedObject:"0x801dbc2f0053d34734814b2d6df491ce7807a725fe9a01ad74a07e9c51396c37"}}},hasui:{id:"0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d",metaData:"0x2c5f33af93f6511df699aaaa5822d823aac6ed99d4a0de2a4a50b3afa0172e24",treasury:"",oracle:{supra:"",switchboard:"",pyth:{feed:"23d7315113f5b1d3ba7a83604c44b94d79f4fd69af77f804fc7f920a6dc65744",feedObject:"0x801dbc2f0053d34734814b2d6df491ce7807a725fe9a01ad74a07e9c51396c37"}}},vsui:{id:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55",metaData:"0xabd84a23467b33854ab25cf862006fd97479f8f6f53e50fe732c43a274d939bd",treasury:"",oracle:{supra:"",switchboard:"",pyth:{feed:"23d7315113f5b1d3ba7a83604c44b94d79f4fd69af77f804fc7f920a6dc65744",feedObject:"0x801dbc2f0053d34734814b2d6df491ce7807a725fe9a01ad74a07e9c51396c37"}}},sca:{id:"0x7016aae72cfc67f2fadf55769c0a7dd54291a583b63051a5ed71081cce836ac6",metaData:"0x5d26a1e9a55c88147ac870bfa31b729d7f49f8804b8b3adfdf3582d301cca844",treasury:"",oracle:{supra:"",switchboard:"",pyth:{feed:"7e17f0ac105abe9214deb9944c30264f5986bf292869c6bd8e8da3ccd92d79bc",feedObject:"0xf6de1d3279a269a597d813cbaca59aa906543ab9a8c64e84a4722f1a20863985"}}}},oracles:{xOracle:"0x93d5bf0936b71eb27255941e532fac33b5a5c7759e377b4923af0a1359ad494f",xOracleCap:"0x1edeae568fde99e090dbdec4bcdbd33a15f53a1ce1f87aeef1a560dedf4b4a90",supra:{registry:"",registryCap:"",holder:""},switchboard:{registry:"",registryCap:""},pyth:{registry:"0xedc293f9413a5a7a5d53bdba1fd889d0a4030894469228f0acdae4aa3c55a213",registryCap:"0xbcb07141eb1f7e01fbda4130ecf5f5adaeabb77f5d9c32158b7532bcd2197acd",state:"0x1f9310238ee9298fb703c3419030b35b22bb1cc37113e3bb5007c99aec79e5b8",wormhole:"0x5306f64e312b581766351c07af79c72fcb1cd25147157fdc2f8ad76de9a3fb6a",wormholeState:"0xaeab97f96cf9877fee2883315d459552b2b921edc16d7ceac6eab944dd88919c"}},packages:{coinDecimalsRegistry:{id:"0xca5a5a62f01c79a104bf4d31669e29daa387f325c241de4edbe30986a9bc8b0d",upgradeCap:"0x34e76a945d29f195bc53ca704fa70877d1cf3a5d7bbfdda1b13e633fff13c0f6"},math:{id:"0xad013d5fde39e15eabda32b3dbdafd67dac32b798ce63237c27a8f73339b9b6f",upgradeCap:"0x3a329598231de02e6135c62284b66005b41cad1d9ab7ca2dc79c08293aba2ec6"},whitelist:{id:"0x1318fdc90319ec9c24df1456d960a447521b0a658316155895014a6e39b5482f",upgradeCap:"0xf5a22aea23db664f7b69855b6a546747f17c1ec4230319cfc17225e462b05761"},x:{id:"0x779b5c547976899f5474f3a5bc0db36ddf4697ad7e5a901db0415c2281d28162",upgradeCap:"0x3f203f6fff6a69d151e4f1cd931f22b68c489ef2759765662fc7baf673943c9e"},protocol:{id:"0x38fe42a5a69f7eb3635404389e8003be9457b1a5c873f133184648c7e9bd47b7",upgradeCap:"0x38527d154618d1fd5a644b90717fe07cf0e9f26b46b63e9568e611a3f86d5c1a"},protocolWhitelist:{id:"0x4c262d9343dac53ecb28f482a2a3f62c73d0ebac5b5f03d57383d56ff219acdf",upgradeCap:"0x4a5e88a75039b00988f633f811f58117f31b8627a46bf822aa114d9010049449"},query:{id:"0xb8d603a39114a5efef3dd0bf84df0bed1be1fbd39b78b7dd6e8a61ccc5e6006f",upgradeCap:"0x0d535c35f608b9b01b7ccce11acf43b1dd80c1b72bf8b541744a6e28e8d2745f"},supra:{id:"",upgradeCap:""},pyth:{id:"0x910f30cbc7f601f75a5141a01265cd47c62d468707c5e1aecb32a18f448cb25a",upgradeCap:"0xdf0ffbae1ea5bb25fbca5efba433dcf00c7cced65679af2f04728901275c6157"},switchboard:{id:"",upgradeCap:""},xOracle:{id:"0x1478a432123e4b3d61878b629f2c692969fdb375644f1251cd278a4b1e7d7cd6",upgradeCap:"0x0f928a6b2e26b73330fecaf9b44acfc9800a4a9794d6415c2a3153bc70e3c1f0"},testCoin:{id:"",upgradeCap:""}}},spool:{id:"0xec1ac7f4d01c5bf178ff4e62e523e7df7721453d81d4904a42a0ffc2686c843d",adminCap:"0xdd8a047cbbf802bfcde5288b8ef1910965d789cc614da11d39af05fca0bd020a",object:"0xe87f1b2d498106a2c61421cec75b7b5c5e348512b0dc263949a0e7a3c256571a",pools:{seth:{id:"0xeec40beccb07c575bebd842eeaabb835f77cd3dab73add433477e57f583a6787",rewardPoolId:"0x957de68a18d87817de8309b30c1ec269a4d87ae513abbeed86b5619cb9ce1077"},ssui:{id:"0x4f0ba970d3c11db05c8f40c64a15b6a33322db3702d634ced6536960ab6f3ee4",rewardPoolId:"0x162250ef72393a4ad3d46294c4e1bdfcb03f04c869d390e7efbfc995353a7ee9"},susdc:{id:"0x4ace6648ddc64e646ba47a957c562c32c9599b3bba8f5ac1aadb2ae23a2f8ca0",rewardPoolId:"0xf4268cc9b9413b9bfe09e8966b8de650494c9e5784bf0930759cfef4904daff8"},susdt:{id:"0xcb328f7ffa7f9342ed85af3fdb2f22919e1a06dfb2f713c04c73543870d7548f",rewardPoolId:"0x2c9f934d67a5baa586ceec2cc24163a2f049a6af3d5ba36b84d8ac40f25c4080"},scetus:{id:"0xac1bb13bf4472a637c18c2415fb0e3c1227ea2bcf35242e50563c98215bd298e",rewardPoolId:"0x6835c1224126a45086fc6406adc249e3f30df18d779ca4f4e570e38716a17f3f"},safsui:{id:"0xeedf438abcaa6ce4d9625ffca110920592d5867e4c5637d84ad9f466c4feb800",rewardPoolId:"0x89255a2f86ed7fbfef35ab8b7be48cc7667015975be2685dd9a55a9a64baf76e"},shasui:{id:"0xa6148bc1b623e936d39a952ceb5bea79e8b37228a8f595067bf1852efd3c34aa",rewardPoolId:"0x6f3563644d3e2ef13176dbf9d865bd93479df60ccbe07b7e66db57f6309f5a66"},svsui:{id:"0x69ce8e537e750a95381e6040794afa5ab1758353a1a2e1de7760391b01f91670",rewardPoolId:"0xbca914adce058ad0902c7f3cfcd698392a475f00dcfdc3f76001d0370b98777a"}},version:"",versionCap:""},borrowIncentive:{id:"0x874f1d43d81e2256e120bab2485938fe07ba0cc21d87129a99a1db11cacb382d",adminCap:"0xc486afa253646f4d381e81d7f1df8aa4723b845a6bb356f69bad635ffefffe2c",object:"0x002875153e09f8145ab63527bc85c00f2bd102e12f9573c47f8cdf1a1cb62934",query:"0x529edc54a3dce2207703ceebbccb0ac14133f7825c1f528775ba0d85a4063489",incentivePools:"0x6547e143d406b5ccd5f46aae482497de279cc1a68c406f701df70a05f9212ab4",incentiveAccounts:"0xc4701fdbc1c92f9a636d334d66012b3027659e9fb8aff27279a82edfb6b77d02",config:"0xdf5d04b4691cc67e82fd4db8394d89ff44823a9de29716c924f74bb4f11cc1f7",version:"",versionCap:""},vesca:{id:"0xcfe2d87aa5712b67cad2732edb6a2201bfdf592377e5c0968b7cb02099bd8e21",adminCap:"0x4d105b16467acca81d18c132cdd1a3cee159920a86c1ef4bdbf2e8d7878500c5",tableId:"0x0a0b7f749baeb61e3dfee2b42245e32d0e6b484063f0a536b33e771d573d7246",table:"0xd3a4632b1080f7d96e1c2487d4dabf2c1196916937c505a69954ac9f393be8d0",treasury:"0xafa4b6231e49c15a22d641ce33fda761baaf650fa21899dfa2eb1716146e7306",config:"0x7cbcb0a342179577a117dfdff974cf1ab765d3b571067bf22ddf5f9e3a667922"}}};var V=class{_auth;_id;_network;_currentAddresses;_addressesMap;constructor(t){let{id:e,auth:n,network:o}=t;n&&(this._auth=n),this._id=e,this._network=o||"mainnet",this._addressesMap=new Map}getId(){return this._id||void 0}get(t){if(this._currentAddresses)return t.split(".").reduce((n,o)=>typeof n=="object"?n[o]:n,this._currentAddresses)||void 0}set(t,e){if(this._currentAddresses){let n=t.split(".");n.reduce((o,r,i)=>{if(i===n.length-1){let s=o;s[r]=e}return o[r]},this._currentAddresses)}return this._currentAddresses}switchCurrentAddresses(t){return this._addressesMap.has(t)&&(this._currentAddresses=this._addressesMap.get(t),this._network=t),this._currentAddresses}getAddresses(t){return t?this._addressesMap.get(t):this._currentAddresses??this._addressesMap.get(this._network)}setAddresses(t,e){let n=e||this._network;n===this._network&&(this._currentAddresses=t),this._addressesMap.set(n,t)}getAllAddresses(){return Object.fromEntries(this._addressesMap)}read(){return Object.entries(Yo).forEach(([t,e])=>{["localnet","devnet","testnet","mainnet"].includes(t)&&(t===this._network&&(this._currentAddresses=e),this._addressesMap.set(t,e))}),this.getAllAddresses()}};import{TransactionBlock as $s}from"@mysten/sui.js/transactions";import{normalizeSuiAddress as Vs}from"@mysten/sui.js/utils";import{SUI_TYPE_ARG as Us,normalizeStructTag as sr}from"@mysten/sui.js/utils";var j=a=>{let{sender:t}=a.blockData;if(!t)throw new Error("Sender is required");return t},tr=(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(vt(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)`)}},er=(a,t,e)=>{if(vt(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)`)},nr=(a,t)=>{if(vt(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")},ar=(a,t,e)=>{if(vt(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)`)},vt=a=>{if(a===void 0)throw new Error("veSca not found")};import{normalizeStructTag as or,parseStructTag as Ls}from"@mysten/sui.js/utils";import uS from"bignumber.js";var Ws=a=>({pointType:or(a.point_type.name),weightedAmount:Number(a.weighted_amount),points:Number(a.points),totalPoints:Number(a.total_points),index:Number(a.index)}),rr=a=>({poolType:or(a.pool_type.name),debtAmount:Number(a.debt_amount),pointList:a.points_list.reduce((t,e)=>{let n=Ws(e),o=Ls(n.pointType).name.toLowerCase();return t[o]=n,t},{})});var Ba=a=>{let t=a.slice(1).toLowerCase();return a.charAt(0).toLowerCase()==="s"&&[...new Set([...dt,...yn,...Go])].includes(t)},Na=a=>{switch(a){case"afsui":return"afSUI";case"hasui":return"haSUI";case"vsui":return"vSUI";default:return a.toUpperCase()}};var ir=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 at=class{params;isTestnet;_address;client;constructor(t,e){this.params=t,this._address=e?.address??new V({id:t?.addressesId||tt,network:t?.networkType}),this.isTestnet=t.networkType?t.networkType==="testnet":!1,this.client=t.client}init(t=!1,e){t||!this._address.getAddresses()||!e?.getAddresses()?this._address.read():this._address=e}parseSymbol(t){if(Ba(t)){let e=t.slice(1).toLowerCase();return t.slice(0,1).toLowerCase()+Na(e)}return Na(t)}parseCoinType(t){let e=Ba(t)?this.parseCoinName(t):t,n=this._address.get(`core.coins.${e}.id`)||Xo[t]||void 0;if(!n)throw Error(`Coin ${t} is not supported`);if(t==="sui")return sr(`${n}::sui::SUI`);let o=[this._address.get("core.coins.usdc.id")??B.usdc,this._address.get("core.coins.usdt.id")??B.usdt,this._address.get("core.coins.eth.id")??B.eth,this._address.get("core.coins.btc.id")??B.btc,this._address.get("core.coins.sol.id")??B.sol,this._address.get("core.coins.apt.id")??B.apt],r=[this._address.get("core.coins.vsui.id")??ja.vsui];return o.includes(n)?`${n}::coin::COIN`:r.includes(n)?`${n}::cert::CERT`:`${n}::${e}::${e.toUpperCase()}`}parseMarketCoinType(t){let e=this._address.get("core.object")||hn,n=this.parseCoinType(t);return`${e}::reserve::MarketCoin<${n}>`}parseCoinNameFromType(t){let e=sr(t),n=/((0x[^:]+::[^:]+::[^<>]+))(?![^<>]*<)/,o=t.match(n),r=t.includes("reserve::MarketCoin");e=o?.[1]||t;let i={[`${this._address.get("core.coins.usdc.id")??B.usdc}::coin::COIN`]:"usdc",[`${this._address.get("core.coins.usdt.id")??B.usdt}::coin::COIN`]:"usdt",[`${this._address.get("core.coins.eth.id")??B.eth}::coin::COIN`]:"eth",[`${this._address.get("core.coins.btc.id")??B.btc}::coin::COIN`]:"btc",[`${this._address.get("core.coins.sol.id")??B.sol}::coin::COIN`]:"sol",[`${this._address.get("core.coins.apt.id")??B.apt}::coin::COIN`]:"apt"},s={[`${this._address.get("core.coins.vsui.id")??ja.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=>Sn[t];getBorrowIncentiveRewardCoinName=t=>zo[t];getCoinDecimal(t){return Ho[t]}getCoinWrappedType(t){return t==="usdc"||t==="usdt"||t==="eth"||t==="btc"||t==="apt"||t==="sol"?{from:"Wormhole",type:"Portal from Ethereum"}:void 0}async selectCoinIds(t,e=Us,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}),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.map(l=>l.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 ir(r)}};import{TransactionBlock as qs}from"@mysten/sui.js/transactions";import Cn from"bignumber.js";var At=async(a,t)=>{let e=t,n=a.address.get("core.object")||hn,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:m}=c[d].data;if(m&&"fields"in m){let b=m.fields,f=String(b.ownership.fields.of),y=await Ma(a,f);l.push({id:f,keyId:u,locked:y})}}return l},Ma=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},cr=async(a,t,e)=>{let n=e||[...dt],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 m=d.content.fields,b=a.utils.parseCoinNameFromType(u);b&&(c[b]=Cn(c[b]??0).plus(m.balance).toNumber())}}),c},dr=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=Cn(c).plus(u.balance).toNumber()}}),c},lr=async(a,t,e)=>{let n=e||[...dt].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 m=d.content.fields,b=a.utils.parseCoinNameFromType(u);b&&(c[b]=Cn(c[b]??0).plus(m.balance).toNumber())}}),c},ur=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=Cn(c).plus(u.balance).toNumber()}}),c},pr=async(a,t)=>{let n=`${a.address.get("core.packages.query.id")}::obligation_query::obligation_data`,o=new qs;return o.moveCall({target:n,arguments:[o.object(t)]}),(await a.client.devInspectTransactionBlock({transactionBlock:o,sender:a.walletAddress})).events[0].parsedJson};import{normalizeStructTag as w}from"@mysten/sui.js/utils";var Yt=async(a,t)=>{let e=t,n=a.address.get("spool.object"),o=`${n}::spool_account::SpoolAccount`,r=[],i=!1,s=null;do{let m=await a.client.getOwnedObjects({owner:e,filter:{StructType:o},options:{showContent:!0,showType:!0},cursor:s});r.push(...m.data),m.hasNextPage&&m.nextCursor?(i=!0,s=m.nextCursor):i=!1}while(i);let c={seth:[],ssui:[],susdc:[],susdt:[],scetus:[],safsui:[],shasui:[],svsui:[]},l=Object.keys(c).reduce((m,b)=>{let f=a.utils.parseCoinName(b),y=a.utils.parseMarketCoinType(f),T={...m},R=`${n}::spool_account::SpoolAccount<${y}>`;return T[b]=R,T},{}),d=r.map(m=>m?.data?.objectId).filter(m=>m!==void 0);return(await a.client.multiGetObjects({ids:d,options:{showContent:!0,showType:!0}})).forEach(m=>{let b=m.data.objectId,f=m.data.type;if(m.data.content&&"fields"in m.data.content){let y=m.data.content.fields,T=String(y.spool_id),R=String(y.stake_type.fields.name),N=Number(y.stakes),K=Number(y.index),G=Number(y.points),H=Number(y.total_points);w(f)===l.seth?c.seth.push({id:b,type:w(f),stakePoolId:T,stakeType:w(R),staked:N,index:K,points:G,totalPoints:H}):w(f)===l.ssui?c.ssui.push({id:b,type:w(f),stakePoolId:T,stakeType:w(R),staked:N,index:K,points:G,totalPoints:H}):w(f)===l.susdc?c.susdc.push({id:b,type:w(f),stakePoolId:T,stakeType:w(R),staked:N,index:K,points:G,totalPoints:H}):w(f)===l.susdt?c.susdt.push({id:b,type:w(f),stakePoolId:T,stakeType:w(R),staked:N,index:K,points:G,totalPoints:H}):w(f)===l.scetus?c.scetus.push({id:b,type:w(f),stakePoolId:T,stakeType:w(R),staked:N,index:K,points:G,totalPoints:H}):w(f)===l.safsui?c.safsui.push({id:b,type:w(f),stakePoolId:T,stakeType:w(R),staked:N,index:K,points:G,totalPoints:H}):w(f)===l.shasui?c.shasui.push({id:b,type:w(f),stakePoolId:T,stakeType:w(R),staked:N,index:K,points:G,totalPoints:H}):w(f)===l.svsui&&c.svsui.push({id:b,type:w(f),stakePoolId:T,stakeType:w(R),staked:N,index:K,points:G,totalPoints:H})}}),c},Ea=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),m=Number(c.point_distribution_time),b=Number(c.max_stakes),f=String(c.stake_type.fields.name),y=Number(c.stakes),T=Number(c.index),R=Number(c.created_at),N=Number(c.last_update);n={id:i,type:w(s),maxPoint:l,distributedPoint:d,pointPerPeriod:u,period:m,maxStake:b,stakeType:w(f),totalStaked:y,index:T,createdAt:R,lastUpdate:N}}}return n},La=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),m=Number(c.rewards),b=Number(c.claimed_rewards);n={id:i,type:w(s),stakePoolId:l,ratioNumerator:d,ratioDenominator:u,rewards:m,claimedRewards:b}}}return n};import{TransactionBlock as Fs}from"@mysten/sui.js/transactions";import{normalizeStructTag as RS}from"@mysten/sui.js/utils";import NS from"bignumber.js";var mr=async(a,t,e,n)=>{let o=n||[...xt],r=a.address.get("borrowIncentive.query"),i=a.address.get("borrowIncentive.incentiveAccounts"),s=`${r}::incentive_account_query::incentive_account_data`,c=new Fs;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(m=>{let b=rr(m),{poolType:f}=b,y=a.utils.parseCoinNameFromType(f);o.length>=1&&o.includes(y)&&(u[y]=b)},{}),u};var br=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 Wa from"bignumber.js";var fr=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)},gr=async(a,t)=>{let n=(await fr(a,t)).map(r=>r.objectId),o=[];for(let r=0;r<n.length;r++){let i=await Ua(a,n[r]);i&&o.push(i)}return o},Ua=async(a,t,e)=>{let n=a.address.get("vesca.tableId"),o=t||(await fr(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:Wa(c.locked_sca_amount).toNumber(),lockedScaCoin:Wa(c.locked_sca_amount).shiftedBy(-9).toNumber(),unlockAt:Wa(c.unlock_at).toNumber()}}return r};var Ot=class{params;address;client;utils;walletAddress;constructor(t,e){this.params=t,this.address=e?.address??new V({id:t?.addressesId||tt,network:t?.networkType}),this.client=t.client,this.utils=e?.utils??new at(this.params,{address:this.address}),this.walletAddress=t.walletAddress}init(t=!1,e){t||!this.address.getAddresses()||!e?.getAddresses()?this.address.read():this.address=e}async getObligations(t){return At(this,t)}async getCoinAmounts(t,e){return cr(this,t,e)}async getCoinAmount(t,e){return dr(this,t,e)}async getMarketCoinAmounts(t,e){return lr(this,t,e)}async getMarketCoinAmount(t,e){return ur(this,t,e)}async getPriceFromPyth(t){return br(this,t)}async getAllStakeAccounts(t){return Yt(this,t)}async getStakeAccounts(t,e){return(await this.getAllStakeAccounts(e))[t]??[]}async getStakePools(t){let e=t??[...zt],n={};for(let o=0;o<e.length;o++){let r=e[o],i=await Ea(this,r);i&&(n[r]=i)}return n}async getStakePool(t){return Ea(this,t)}async getStakeRewardPools(t){let e=t??[...zt],n={};for(let o=0;o<e.length;o++){let r=await La(this,e[o]);r&&(n[e[o]]=r)}return n}async getStakeRewardPool(t){return La(this,t)}async getBorrowIncentiveAccounts(t,e,n){return mr(this,t,e||this.walletAddress,n)}async getObligationCoinNames(t){let e=await pr(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))}};var Dt=class{params;isTestnet;address;query;utils;client;walletAddress;constructor(t,e){this.params=t,this.address=e?.address??new V({id:t?.addressesId||tt,network:t?.networkType}),this.query=e?.query??new Ot(t,{address:this.address}),this.utils=e?.utils??new at(this.params,{address:this.address,query:this.query}),this.client=t.client,this.walletAddress=Vs(t.walletAddress),this.isTestnet=t.networkType?t.networkType==="testnet":!1}async init(t=!1,e){t||!this.address.getAddresses()||!e?.getAddresses()?this.address.read():this.address=e,this.query.init(t,this.address),this.utils.init(t,this.address)}createTxBlock(t){return new $s(t)}async selectCoin(t,e,n,o){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){let r=this.utils.parseMarketCoinType(e),i=await this.utils.selectCoinIds(n,r,o),[s,c]=this.utils.takeAmountFromCoins(t,i,n);return{takeCoin:s,leftCoin:c}}};import{SUI_CLOCK_OBJECT_ID as Pt,SUI_TYPE_ARG as Qs}from"@mysten/sui.js/utils";var lt=async(...a)=>{let[t,e,n]=a;if(a.length===3&&n&&typeof n=="string"){let i=await Ua(t.query,n);return i||void 0}let o=j(e),r=await gr(t.query,o);if(r.length!==0)return r[0]},Ks=async(a,t)=>{let e=a.address.get("borrowIncentive.object"),n=a.address.get("borrowIncentive.incentivePools"),o=a.address.get("vesca.id"),{client:r}=a,i=await r.getObject({id:n,options:{showContent:!0}});if(i.data?.content?.dataType!=="moveObject")return!1;let c=i.data.content.fields.ve_sca_bind.fields.id.id,l=`${e}::typed_id::TypedID<${o}::ve_sca::VeScaKey>`,d=await r.getDynamicFieldObject({parentId:c,name:{type:l,value:t}});return d.data?.content?.dataType!=="moveObject"?!1:d.data.content.fields.value.fields.id},qa=async(...a)=>{let[t,e,n,o]=a;if(a.length===4&&n&&o&&typeof n=="string"){let s=await Ma(t.query,n);return{obligationId:n,obligationKey:o,obligationLocked:s}}let r=j(e),i=await At(t.query,r);if(i.length===0)throw new Error(`No obligation found for sender ${r}`);return{obligationId:i[0].id,obligationKey:i[0].keyId,obligationLocked:i[0].locked}},Gs=({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(Pt)]})},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(Pt)]})},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(Pt)]})},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(Pt)],typeArguments:[Qs]})},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(Pt)],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(Pt)],typeArguments:[c]})}}},U=({builder:a,txBlock:t})=>{let e=Gs({builder:a,txBlock:t});return{normalMethod:e,stakeObligationQuick:async(n,o)=>{let{obligationId:r,obligationKey:i,obligationLocked:s}=await qa(a,t,n,o),c=!!t.blockData.transactions.find(l=>l.kind==="MoveCall"&&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 qa(a,t,n,o);s&&e.unstakeObligation(r,i)},stakeObligationWithVeScaQuick:async(n,o,r)=>{let{obligationId:i,obligationKey:s,obligationLocked:c}=await qa(a,t,n,o),l=!!t.blockData.transactions.find(d=>d.kind==="MoveCall"&&(d.target===`${kt}::user::unstake`||d.target===`${a.address.get("borrowIncentive.id")}::user::unstake`));if(!c||l){let d=await lt(a,t,r);if(d){let u=await Ks(a,d.keyId);!u||u===i?e.stakeObligationWithVesca(i,s,d.keyId):e.stakeObligation(i,s)}else e.stakeObligation(i,s)}},claimBorrowIncentiveQuick:(n,o,r)=>e.claimBorrowIncentive(o,r,n)}};import{SUI_CLOCK_OBJECT_ID as ot}from"@mysten/sui.js/utils";import{SUI_CLOCK_OBJECT_ID as xn}from"@mysten/sui.js/utils";import Hs from"axios";var hr={testnet:["https://hermes-beta.pyth.network"],mainnet:["https://hermes.pyth.network","https://scallop.rpc.p2p.world"]};import{bcs as Fa}from"@mysten/sui.js/bcs";import{SUI_CLOCK_OBJECT_ID as In}from"@mysten/sui.js/utils";var $a=16*1024,kn=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 console.log(n.data?.content),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(Fa.ser("vector<u8>",Array.from(r),{maxSize:$a}).toBytes()),e.object(In)]});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(Fa.ser("vector<u8>",Array.from(e[0]),{maxSize:$a}).toBytes()),s[0],t.object(In)]});let c=[],l=await this.getBaseUpdateFee(),d=t.splitCoins(t.gas,n.map(()=>t.pure(l))),u=0;for(let m=0;m<n.length;m++){let b=await this.getPriceFeedObjectId(n[m]);if(!b)throw new Error(`Price feed ${n[0]} not found, please create it first`);c.push(b),[r]=t.moveCall({target:`${o}::pyth::update_single_price_feed`,arguments:[t.object(this.pythStateId),r,t.object(b),d[u],t.object(In)]}),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(Fa.ser("vector<u8>",Array.from(e[0]),{maxSize:$a}).toBytes()),r[0],t.object(In)]})}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 zs=async(a,t)=>(await Hs.get(`${a}/api/latest_vaas`,{params:{ids:t}})).data.map(o=>Buffer.from(o,"base64")),vn=async(a,t,e)=>{let n=e??[...new Set([...dt,...yn])],o=a.isTestnet?["pyth"]:["pyth"];if(o.includes("pyth")){let i=new kn(a.client,a.address.get("core.oracles.pyth.state"),a.address.get("core.oracles.pyth.wormholeState")),s=n.map(l=>a.address.get(`core.coins.${l}.oracle.pyth.feed`)),c=a.params.pythEndpoints??hr[a.isTestnet?"testnet":"mainnet"];try{let l=await zs(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 Xs(a,t,r[i],o)},Xs=async(a,t,e,n)=>{let o=a.utils.parseCoinType(e);Ys(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)},Ys=(a,t,e,n,o,r,i,s,c,l,d,u,m,b,f)=>{let y=Js(a,e,n,f);return t.includes("pyth")&&nc(a,o,y,i,s,r,f),t.includes("switchboard")&&ec(a,c,y,d,l,f),t.includes("supra")&&tc(a,u,y,b,m,f),Zs(a,e,n,y,f),a},Js=(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})},Zs=(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(xn)],typeArguments:i}),a},tc=(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(xn)],typeArguments:[r]})},ec=(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(xn)],typeArguments:[r]})},nc=(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(xn)],typeArguments:[i]})};var An=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=j(t),i=await At(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}},ac=({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")};return{openObligation:()=>t.moveCall({target:`${e.protocolPkg}::open_obligation::open_obligation`,arguments:[t.pure(e.version)]}),returnObligation:(n,o)=>t.moveCall({target:`${e.protocolPkg}::open_obligation::return_obligation`,arguments:[t.object(e.version),t.object(n),t.object(o)]}),openObligationEntry:()=>t.moveCall({target:`${e.protocolPkg}::open_obligation::open_obligation_entry`,arguments:[t.object(e.version)]}),addCollateral:(n,o,r)=>{let i=a.utils.parseCoinType(r);return t.moveCall({target:`${e.protocolPkg}::deposit_collateral::deposit_collateral`,arguments:[t.object(e.version),t.object(n),t.object(e.market),typeof o!="string"?o:t.pure(o)],typeArguments:[i]})},takeCollateral:(n,o,r,i)=>{let s=a.utils.parseCoinType(i);return t.moveCall({target:`${e.protocolPkg}::withdraw_collateral::withdraw_collateral`,arguments:[t.object(e.version),t.object(n),t.object(o),t.object(e.market),t.object(e.coinDecimalsRegistry),t.pure(r),t.object(e.xOracle),t.object(ot)],typeArguments:[s]})},deposit:(n,o)=>{let r=a.utils.parseCoinType(o);return t.moveCall({target:`${e.protocolPkg}::mint::mint`,arguments:[t.object(e.version),t.object(e.market),typeof n!="string"?n:t.pure(n),t.object(ot)],typeArguments:[r]})},depositEntry:(n,o)=>{let r=a.utils.parseCoinType(o);return t.moveCall({target:`${e.protocolPkg}::mint::mint_entry`,arguments:[t.object(e.version),t.object(e.market),typeof n!="string"?n:t.pure(n),t.object(ot)],typeArguments:[r]})},withdraw:(n,o)=>{let r=a.utils.parseCoinType(o);return t.moveCall({target:`${e.protocolPkg}::redeem::redeem`,arguments:[t.object(e.version),t.object(e.market),typeof n!="string"?n:t.pure(n),t.object(ot)],typeArguments:[r]})},withdrawEntry:(n,o)=>{let r=a.utils.parseCoinType(o);return t.moveCall({target:`${e.protocolPkg}::redeem::redeem_entry`,arguments:[t.object(e.version),t.object(e.market),typeof n!="string"?n:t.pure(n),t.object(ot)],typeArguments:[r]})},borrow:(n,o,r,i)=>{let s=a.utils.parseCoinType(i);return t.moveCall({target:`${e.protocolPkg}::borrow::borrow`,arguments:[t.object(e.version),t.object(n),t.object(o),t.object(e.market),t.object(e.coinDecimalsRegistry),t.pure(r),t.object(e.xOracle),t.object(ot)],typeArguments:[s]})},borrowEntry:(n,o,r,i)=>{let s=a.utils.parseCoinType(i);return t.moveCall({target:`${e.protocolPkg}::borrow::borrow_entry`,arguments:[t.object(e.version),t.object(n),t.object(o),t.object(e.market),t.object(e.coinDecimalsRegistry),t.pure(r),t.object(e.xOracle),t.object(ot)],typeArguments:[s]})},repay:(n,o,r)=>{let i=a.utils.parseCoinType(r);return t.moveCall({target:`${e.protocolPkg}::repay::repay`,arguments:[t.object(e.version),t.object(n),t.object(e.market),typeof o!="string"?o:t.pure(o),t.object(ot)],typeArguments:[i]})},borrowFlashLoan:(n,o)=>{let r=a.utils.parseCoinType(o);return t.moveCall({target:`${e.protocolPkg}::flash_loan::borrow_flash_loan`,arguments:[t.object(e.version),t.object(e.market),t.pure(n)],typeArguments:[r]})},repayFlashLoan:(n,o,r)=>{let i=a.utils.parseCoinType(r);return t.moveCall({target:`${e.protocolPkg}::flash_loan::repay_flash_loan`,arguments:[t.object(e.version),t.object(e.market),t.pure(n),t.object(o)],typeArguments:[i]})}}},q=({builder:a,txBlock:t})=>{let e=ac({builder:a,txBlock:t});return{normalMethod:e,addCollateralQuick:async(n,o,r)=>{let i=j(t),{obligationId:s}=await An(t,a,r);if(o==="sui"){let[c]=t.splitCoins(t.gas,[n]);e.addCollateral(s,c,o)}else{let{leftCoin:c,takeCoin:l}=await a.selectCoin(t,o,n,i);e.addCollateral(s,l,o),t.transferObjects([c],i)}},takeCollateralQuick:async(n,o,r,i)=>{let s=await An(t,a,r,i),c=await a.query.getObligationCoinNames(s.obligationId);return await vn(a,t,c),e.takeCollateral(s.obligationId,s.obligationKey,n,o)},depositQuick:async(n,o,r)=>{if(o==="sui"){let[c]=t.splitCoins(t.gas,[n]);return e.deposit(c,o)}let{leftCoin:i,takeCoin:s}=await a.selectCoin(t,o,n,r);return t.transferObjects([i],r),e.deposit(s,o)},withdrawQuick:async(n,o)=>{let r=j(t),i=a.utils.parseMarketCoinName(o),{leftCoin:s,takeCoin:c}=await a.selectMarketCoin(t,i,n,r);return t.transferObjects([s],r),e.withdraw(c,o)},borrowQuick:async(n,o,r,i)=>{let s=await An(t,a,r,i),l=[...await a.query.getObligationCoinNames(s.obligationId),o];return await vn(a,t,l),e.borrow(s.obligationId,s.obligationKey,n,o)},repayQuick:async(n,o,r,i)=>{let s=await An(t,a,r);if(o==="sui"){let[d]=t.splitCoins(t.gas,[n]);return e.repay(s.obligationId,d,o)}let{leftCoin:c,takeCoin:l}=await a.selectCoin(t,o,n,i);return t.transferObjects([c],i),e.repay(s.obligationId,l,o)},updateAssetPricesQuick:async n=>vn(a,t,n)}};import{SUI_CLOCK_OBJECT_ID as On}from"@mysten/sui.js/utils";var yr=async(...a)=>{let[t,e,n,o]=a;if(a.length===4&&o)return[o];let r=j(e),i=await Yt(t.query,r);if(i[n].length===0)throw new Error(`No stake account id found for sender ${r}`);return i[n].map(s=>s.id)},oc=async(...a)=>{let[t,e,n,o]=a,r=j(e),i=await Yt(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]},rc=({builder:a,txBlock:t})=>{let e={spoolPkg:a.address.get("spool.id")};return{createStakeAccount:n=>{let o=a.utils.parseMarketCoinType(n),r=a.address.get(`spool.pools.${n}.id`);return t.moveCall({target:`${e.spoolPkg}::user::new_spool_account`,arguments:[t.object(r),t.object(On)],typeArguments:[o]})},stake:(n,o,r)=>{let i=a.utils.parseMarketCoinType(r),s=a.address.get(`spool.pools.${r}.id`);t.moveCall({target:`${e.spoolPkg}::user::stake`,arguments:[t.object(s),t.object(n),typeof o=="string"?t.pure(o):o,t.object(On)],typeArguments:[i]})},unstake:(n,o,r)=>{let i=a.utils.parseMarketCoinType(r),s=a.address.get(`spool.pools.${r}.id`);return t.moveCall({target:`${e.spoolPkg}::user::unstake`,arguments:[t.object(s),t.object(n),t.pure(o),t.object(On)],typeArguments:[i]})},claim:(n,o)=>{let r=a.address.get(`spool.pools.${o}.id`),i=a.address.get(`spool.pools.${o}.rewardPoolId`),s=a.utils.parseMarketCoinType(o),c=Sn[o],l=a.utils.parseCoinType(c);return t.moveCall({target:`${e.spoolPkg}::user::redeem_rewards`,arguments:[t.object(r),t.object(i),t.object(n),t.object(On)],typeArguments:[s,l]})}}},ut=({builder:a,txBlock:t})=>{let e=rc({builder:a,txBlock:t});return{normalMethod:e,stakeQuick:async(n,o,r)=>{let i=j(t),s=await yr(a,t,o,r),c=a.utils.parseMarketCoinType(o);if(typeof n=="number"){let l=await a.utils.selectCoinIds(n,c,i),[d,u]=a.utils.takeAmountFromCoins(t,l,n);e.stake(s[0],d,o),t.transferObjects([u],i)}else e.stake(s[0],n,o)},unstakeQuick:async(n,o,r)=>{let i=n,s=await oc(a,t,o,r),c=[];for(let l=0;l<s.length;l++){if(s[l].staked===0)continue;let d=Math.min(i,s[l].staked),u=e.unstake(s[l].id,d,o);if(c.push(u),i-=d,i===0)break}return c},claimQuick:async(n,o)=>{let r=await yr(a,t,n,o),i=[];return r.forEach(s=>{let c=e.claim(s,n);i.push(c)}),i}}};import{SUI_CLOCK_OBJECT_ID as Jt}from"@mysten/sui.js/utils";var ic=({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(Jt)]}),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(Jt)]})},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(Jt)]})},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(Jt)]})},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(Jt)]})}},pt=({builder:a,txBlock:t})=>{let e=ic({builder:a,txBlock:t});return{normalMethod:e,lockScaQuick:async(n,o,r=!0)=>{let i=j(t),s=await lt(a,t),c,l=[];if(n!==void 0&&typeof n=="number"){let b=await a.utils.selectCoinIds(n,et,i),[f,y]=a.utils.takeAmountFromCoins(t,b,n);c=f,l.push(y)}else c=n;let d=a.utils.getUnlockAt(o,s?.unlockAt);r&&tr(n,o,d,s?.unlockAt),console.log(new Date(d*1e3).toLocaleString("en-CA",{hour12:!0}));let u=!s?.unlockAt,m=!u&&s.unlockAt*1e3<=new Date().getTime();if(u||m){if(c)if(u){let b=e.lockSca(c,d);l.push(b)}else{if(s.lockedScaAmount!==0){let b=e.redeemSca(s.keyId);l.push(b)}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 lt(a,t,o),s=a.utils.getUnlockAt(n);r&&er(n,s,i?.unlockAt),i&&e.extendLockPeriod(i.keyId,s)},extendLockAmountQuick:async(n,o,r=!0)=>{let i=j(t),s=await lt(a,t,o);if(r&&nr(n,s?.unlockAt),s){let c=await a.utils.selectCoinIds(n,et,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=j(t),c=await lt(a,t,r),l=a.utils.getUnlockAt(o,c?.unlockAt);if(i&&ar(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,et,s),[m,b]=a.utils.takeAmountFromCoins(t,u,n);d.push(b),e.renewExpiredVeSca(c.keyId,m,l),t.transferObjects(d,s)}},redeemScaQuick:async n=>{let o=j(t),r=await lt(a,t,n);if(vt(r?.unlockAt),r){let i=e.redeemSca(r.keyId);t.transferObjects([i],o)}}}};var h=class{params;client;address;builder;query;utils;walletAddress;constructor(t,e){this.params=t,this.client=t.client,this.address=e?.address??new V({id:t?.addressesId||tt,network:t?.networkType}),this.query=e?.query??new Ot(t,{address:this.address}),this.utils=e?.utils??new at(t,{address:this.address,query:this.query}),this.builder=e?.builder??new Dt(t,{address:this.address,query:this.query,utils:this.utils}),this.walletAddress=sc(t.walletAddress)}init(t=!1){(t||!this.address.getAddresses())&&this.address.read(),this.builder.init(t,this.address),this.query.init(t,this.address),this.utils.init(t,this.address)}async getObligations(t){let e=t||this.walletAddress;return this.query.getObligations(e)}async getAllStakeAccounts(t){let e=t||this.walletAddress;return this.query.getAllStakeAccounts(e)}async getStakeAccounts(t,e){let n=e||this.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=q({builder:this.builder,txBlock:e}),o=t||this.walletAddress;return e.setSender(o),n.normalMethod.openObligationEntry(),e}async depositCollateral(t,e,n,o){let r=new I,i=o||this.walletAddress;r.setSender(i);let s=q({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,m]=s.normalMethod.openObligation();await s.addCollateralQuick(e,t,d),s.normalMethod.returnObligation(d,m),r.transferObjects([u],i)}return r}async withdrawCollateral(t,e,n,o,r){let i=new I,s=q({builder:this.builder,txBlock:i}),c=r||this.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 I,r=q({builder:this.builder,txBlock:o}),i=n||this.walletAddress;o.setSender(i);let s=await r.depositQuick(e,t,n);return o.transferObjects([s],i),o}async withdraw(t,e,n){let o=new I,r=n||this.walletAddress,i=q({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 I,s=q({builder:this.builder,txBlock:i}),c=U({builder:this.builder,txBlock:i}),l=r||this.walletAddress;i.setSender(l);let d=xt.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 I,c=q({builder:this.builder,txBlock:s}),l=U({builder:this.builder,txBlock:s}),d=i||this.walletAddress;s.setSender(d);let u=xt.includes(t);u&&await l.unstakeObligationQuick(n,o);let m=await c.borrowQuick(e,t,n,o);return s.transferObjects([m],d),u&&await l.stakeObligationWithVeScaQuick(n,o,r),s}async repay(t,e,n,o,r){let i=new I,s=q({builder:this.builder,txBlock:i}),c=U({builder:this.builder,txBlock:i}),l=r||this.walletAddress;i.setSender(l);let d=xt.includes(t);return d&&await c.unstakeObligationQuick(n,o),await s.repayQuick(e,t,n,l),d&&await c.stakeObligationQuick(n,o),i}async createStakeAccount(t,e){let n=new I,o=ut({builder:this.builder,txBlock:n}),r=e||this.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 I,i=q({builder:this.builder,txBlock:r}),s=ut({builder:this.builder,txBlock:r}),c=o||this.walletAddress;r.setSender(c);let l=await i.depositQuick(e,t,o),d=this.utils.parseMarketCoinName(t);if(!zt.find(b=>b===d))return r;let u=await this.query.getStakeAccounts(d,c),m=n||(u.length>0?u[0].id:void 0);if(m)await s.stakeQuick(l,d,m);else{let b=s.normalMethod.createStakeAccount(d);await s.stakeQuick(l,d,b),r.transferObjects([b],c)}return r}async unstakeAndWithdraw(t,e,n){let o=new I,r=q({builder:this.builder,txBlock:o}),i=ut({builder:this.builder,txBlock:o}),s=this.walletAddress,c=[];o.setSender(s);let l=this.utils.parseMarketCoinName(t);for(let d=0;d<n.length;d++){let u=n[d],[m]=await i.unstakeQuick(u.coin,l,u.id);if(m){let b=r.normalMethod.withdraw(m,t);c.push(b)}}if(e>0){let d=await r.withdrawQuick(e,t);c.push(d)}return o.transferObjects(c,s),o}async stake(t,e,n,o){let r=new I,i=ut({builder:this.builder,txBlock:r}),s=o||this.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 I,i=ut({builder:this.builder,txBlock:r}),s=o||this.walletAddress;r.setSender(s);let c=await i.unstakeQuick(e,t,n);return r.transferObjects(c,s),r}async claim(t,e,n,o){let r=new I,i=ut({builder:this.builder,txBlock:r}),s=U({builder:this.builder,txBlock:r}),c=o||this.walletAddress;r.setSender(c);let l={sui:[],sca:[]};for(let d=0;d<t.length;d++){let{stakeMarketCoinName:u,stakeAccountId:m}=t[d],b=i.normalMethod.claim(m,u);l.sui.push(b)}for(let d=0;d<e.length;d++){let{obligationId:u,obligationKey:m,rewardCoinName:b}=e[d],f=s.normalMethod.claimBorrowIncentive(u,m,b);l[b].push(f)}for(let d=0;d<n.length;d++){let{obligationId:u,obligationKey:m,rewardCoinName:b}=n[d],f=s.normalMethod.oldClaimBorrowIncentive(u,m,b);l[b].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=U({builder:this.builder,txBlock:o}),i=n||this.walletAddress;return o.setSender(i),await r.stakeObligationQuick(t,e),o}async unstakeObligation(t,e,n){let o=this.builder.createTxBlock(),r=U({builder:this.builder,txBlock:o}),i=n||this.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 I,d=pt({builder:this.builder,txBlock:l}),u=U({builder:this.builder,txBlock:l}),m=c||this.walletAddress;l.setSender(m);let b=await this.builder.utils.selectCoinIds(t,et,m),[f,y]=this.builder.utils.takeAmountFromCoins(l,b,t),T;return s?d.normalMethod.extendLockAmount(s,f):T=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||T)),s||l.transferObjects([T,y],m),l}async stakeMoreSca(t,e,n){let o=new I,r=n||this.walletAddress;return o.setSender(r),o}async extendStakeScaLockPeriod(t,e,n,o,r=!1,i=!1,s){let c=new I,l=pt({builder:this.builder,txBlock:c}),d=U({builder:this.builder,txBlock:c}),u=s||this.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 I,d=pt({builder:this.builder,txBlock:l}),u=U({builder:this.builder,txBlock:l}),m=c||this.walletAddress;l.setSender(m);let b=await this.builder.utils.selectCoinIds(t,et,m),[f,y]=this.builder.utils.takeAmountFromCoins(l,b,t);return d.normalMethod.extendLockPeriod(e,n),d.normalMethod.extendLockAmount(e,f),l.transferObjects([y],m),!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 I,u=pt({builder:this.builder,txBlock:d}),m=U({builder:this.builder,txBlock:d}),b=l||this.walletAddress;if(d.setSender(b),o){let R=u.normalMethod.redeemSca(n);d.transferObjects([R],b)}let f=await this.builder.utils.selectCoinIds(t,et,b),[y,T]=this.builder.utils.takeAmountFromCoins(d,f,t);return d.transferObjects([T],b),u.normalMethod.renewExpiredVeSca(n,y,e),!r||!i||(s&&(c?m.normalMethod.oldUnstakeObligation(r,i):m.normalMethod.unstakeObligation(r,i)),m.normalMethod.stakeObligationWithVesca(r,i,n)),d}async redeemSca(t){let e=new I,n=pt({builder:this.builder,txBlock:e}),o=this.walletAddress;return e.setSender(o),await n.redeemScaQuick(t),e}async migrateAndClaim(t,e,n,o){let r=new I,i=U({builder:this.builder,txBlock:r}),s=this.walletAddress;r.setSender(s);let c=i.normalMethod.oldClaimBorrowIncentive(n,e,o);return r.transferObjects([c],s),i.stakeObligationWithVeScaQuick(n,e,t),r}async withdrawUnlockedSca(t,e){let n=new I,o=pt({builder:this.builder,txBlock:n}),r=e||this.walletAddress;return n.setSender(r),await o.redeemScaQuick(t),n}calculateAvailableClaimCoin(t,e){let n=new Sr(t.weightedAmount),r=e.currentPointIndex?Sr(e.currentPointIndex-t.index).dividedBy(1e9):1;return n.multipliedBy(r).plus(t.points).shiftedBy(-1*e.coinDecimal)}};var Dn=class a extends p{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new h({client:e.suiClient,walletAddress:e.account.address,networkType:e.network.split(":")[1]});return n.init(),n.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 Pn=class a extends p{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new h({client:e.suiClient,walletAddress:e.account.address,networkType:e.network.split(":")[1]});return await n.init(),n.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 _n=class a extends p{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new h({client:e.suiClient,walletAddress:e.account.address,networkType:e.network.split(":")[1]});return n.init(),n.claim(this.data.lendingIncentive,this.data.borrowIncentiveV2,this.data.borrowIncentive,e.account.address)}static fromData(e){return new a(e)}};var jn=class a extends p{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new h({client:e.suiClient,walletAddress:e.account.address,networkType:e.network.split(":")[1]});return n.init(),n.depositCollateral(this.data.collateralCoinName,Number(this.data.amount),this.data.obligationId,e.account.address)}static fromData(e){return new a(e)}};var Rn=class a extends p{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new h({client:e.suiClient,walletAddress:e.account.address,networkType:e.network.split(":")[1]});return n.init(),n.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 Bn=class a extends p{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new h({client:e.suiClient,walletAddress:e.account.address,networkType:e.network.split(":")[1]});return n.init(),n.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 Nn=class a extends p{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new h({client:e.suiClient,walletAddress:e.account.address,networkType:e.network.split(":")[1]});return await n.init(),n.migrateAndClaim(this.data.veScaKey,this.data.obligationKey,this.data.obligationId,this.data.rewardCoinName)}static fromData(e){return new a(e)}};var Mn=class a extends p{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=e.network.split(":")[1],o=new h({client:e.suiClient,walletAddress:e.account.address,networkType:n});return o.init(),o.openObligation()}static fromData(e){return new a(e)}};var En=class a extends p{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=e.network.split(":")[1],o=new h({client:e.suiClient,walletAddress:e.account.address,networkType:n});return o.init(),o.redeemSca(this.data.veScaKey)}static fromData(e){return new a(e)}};var Ln=class a extends p{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new h({client:e.suiClient,walletAddress:e.account.address,networkType:e.network.split(":")[1]});return n.init(),n.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 Wn=class a extends p{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new h({client:e.suiClient,walletAddress:e.account.address,networkType:e.network.split(":")[1]});return n.init(),n.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 Un=class a extends p{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new h({client:e.suiClient,walletAddress:e.account.address,networkType:e.network.split(":")[1]});return n.init(),n.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 qn=class a extends p{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new h({client:e.suiClient,walletAddress:e.account.address,networkType:e.network.split(":")[1]});return n.init(),n.stake(this.data.marketCoinName,Number(this.data.amount),void 0,e.account.address)}static fromData(e){return new a(e)}};var Fn=class a extends p{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=e.network.split(":")[1],o=new h({client:e.suiClient,walletAddress:e.account.address,networkType:n});return o.init(),o.supplyAndStake(this.data.coinName,Number(this.data.amount),this.data.stakeAccountId,e.account.address)}static fromData(e){return new a(e)}};var $n=class a extends p{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=e.network.split(":")[1],o=new h({client:e.suiClient,walletAddress:e.account.address,networkType:n});return o.init(),o.deposit(this.data.coinName,Number(this.data.amount),e.account.address)}static fromData(e){return new a(e)}};var Vn=class a extends p{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new h({client:e.suiClient,walletAddress:e.account.address,networkType:e.network.split(":")[1]});return n.init(),n.unstake(this.data.marketCoinName,Number(this.data.amount),void 0,e.account.address)}static fromData(e){return new a(e)}};var Qn=class a extends p{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=e.network.split(":")[1],o=new h({client:e.suiClient,walletAddress:e.account.address,networkType:n});return o.init(),o.unstakeAndWithdraw(this.data.coinName,Number(this.data.amount),this.data.stakeAccountId)}static fromData(e){return new a(e)}};var Kn=class a extends p{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new h({client:e.suiClient,walletAddress:e.account.address,networkType:e.network.split(":")[1]});return n.init(),n.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 p{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=e.network.split(":")[1],o=new h({client:e.suiClient,walletAddress:e.account.address,networkType:n});return o.init(),o.withdraw(this.data.coinName,Number(this.data.amount),e.account.address)}static fromData(e){return new a(e)}};var Hn=class a extends p{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new h({client:e.suiClient,walletAddress:e.account.address,networkType:e.network.split(":")[1]});return n.init(),n.withdrawUnlockedSca(this.data.vescaKey,e.account.address)}static fromData(e){return new a(e)}};var zn=class{application="scallop";async deserialize(t){let e=new Dt({client:t.suiClient,walletAddress:t.account.address,networkType:t.network.split(":")[1]});await e.init();let{transactionBlock:n}=t,r=new wn(n,e).decode();return{txType:cc.Other,txSubType:r.type,intentionData:r.intentionData}}async build(t){let{suiClient:e,account:n,network:o}=t,r;switch(t.txSubType){case"SupplyLending":r=$n.fromData(t.intentionData);break;case"WithdrawLending":r=Gn.fromData(t.intentionData);break;case"Borrow":r=Dn.fromData(t.intentionData);break;case"Repay":r=Wn.fromData(t.intentionData);break;case"DepositCollateral":r=jn.fromData(t.intentionData);break;case"WithdrawCollateral":r=Kn.fromData(t.intentionData);break;case"OpenObligation":r=Mn.fromData(t.intentionData);break;case"StakeSpool":r=qn.fromData(t.intentionData);break;case"UnstakeSpool":r=Vn.fromData(t.intentionData);break;case"ClaimIncentiveReward":r=_n.fromData(t.intentionData);break;case"BorrowWithBoost":r=Pn.fromData(t.intentionData);break;case"StakeSca":r=Un.fromData(t.intentionData);break;case"ExtendStakePeriod":r=Bn.fromData(t.intentionData);break;case"ExtendPeriodAndStakeMore":r=Rn.fromData(t.intentionData);break;case"RenewExpStakePeriod":r=Ln.fromData(t.intentionData);break;case"WithdrawStakedSca":r=Hn.fromData(t.intentionData);break;case"SupplyAndStakeLending":r=Fn.fromData(t.intentionData);break;case"WithdrawAndUnstakeLending":r=Qn.fromData(t.intentionData);break;case"RedeemSca":r=En.fromData(t.intentionData);break;case"MigrateAndClaim":r=Nn.fromData(t.intentionData);break;default:throw new Error("not implemented")}return r.build({suiClient:e,account:n,network:o})}};import{TransactionType as Ic}from"@msafe/sui3-utils";import{TurbosSdk as kc}from"turbos-clmm-sdk";import{TransactionType as rt}from"@msafe/sui3-utils";import{bcs as wr}from"@mysten/sui.js/bcs";import{normalizeStructTag as lc,normalizeSuiAddress as Zt}from"@mysten/sui.js/utils";var P={PackageId:"0x9632f61a796fc54952d9151d80b319e066cba5498a27b495c99e113db09726b1"};import{BN as uc}from"turbos-clmm-sdk";var Tr=[`${P.PackageId}::swap_router::swap_a_b`,`${P.PackageId}::swap_router::swap_b_a`],Va=[`${P.PackageId}::swap_router::swap_a_b_b_c`,`${P.PackageId}::swap_router::swap_a_b_c_b`,`${P.PackageId}::swap_router::swap_b_a_b_c`,`${P.PackageId}::swap_router::swap_b_a_c_b`],pc=(a,t)=>{if(a===1)switch(Va.findIndex(o=>o===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(Tr.findIndex(n=>n===t)){case 0:return[!0];case 1:return[!1];default:throw new Error(`not target: ${t}`)}},Xn=class{constructor(t,e){this.txb=t;this.turbosSdk=e}get transactions(){return this.txb.blockData.transactions}decode(t){if(this.isSwapTransaction())return 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();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([...Tr,...Va])}isAddLiquidityTransaction(){return!!this.getMoveCallTransaction(`${P.PackageId}::position_manager::mint`)}isIncreaseLiquidityTransaction(){return!!this.getMoveCallTransaction(`${P.PackageId}::position_manager::increase_liquidity`)}isDecreaseLiquidityTransaction(){return!!this.getMoveCallTransaction(`${P.PackageId}::position_manager::decrease_liquidity`)}isCollectFeeTransaction(){return!!this.getMoveCallTransaction(`${P.PackageId}::position_manager::collect`)}isCollectRewardTransaction(){return!!this.getMoveCallTransaction(`${P.PackageId}::position_manager::collect_reward`)}isBurnTransaction(){return!!this.getMoveCallTransaction(`${P.PackageId}::position_manager::burn`)}isRemoveLiquidityTransaction(){return!!this.getMoveCallsTransaction([`${P.PackageId}::position_manager::decrease_liquidity`,`${P.PackageId}::position_manager::burn`])}decodeSwap(){let t=this.transactions.find(m=>m.kind==="MoveCall"),e=0;Va.includes(t.target)&&(e=1);let n=pc(e,t.target),o=n.map((m,b)=>{let f=this.helper.decodeSharedObjectId(b),y=this.helper.decodeInputU128(4+b+e),T=this.turbosSdk.math.sqrtPriceX64ToTickIndex(new uc(y.toString()));return{pool:f,a2b:m,nextTickIndex:T}}),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);return{txType:rt.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(){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:rt.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){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:rt.Other,type:"IncreaseLiquidity",intentionData:{pool:e,slippage:10,address:t,amountA:o,amountB:r,nft:n,deadline:i}}}decodeDecreaseLiquidity(t){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:rt.Other,type:"DecreaseLiquidity",intentionData:{pool:e,decreaseLiquidity:o,nft:n,amountA:r,amountB:i,slippage:10,address:t,deadline:s}}}decodeCollectFee(){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:rt.Other,type:"CollectFee",intentionData:{pool:t,address:n,collectAmountA:o,collectAmountB:r,nft:e,deadline:i}}}decodeCollectReward(){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:rt.Other,type:"CollectReward",intentionData:{pool:t,address:n,rewardAmounts:o,nft:e,deadline:r}}}decodeBurn(){let t=this.helper.decodeSharedObjectId(0),e=this.helper.decodeSharedObjectId(2);return{txType:rt.Other,type:"Burn",intentionData:{pool:t,nft:e}}}decodeRemoveLiquidity(t){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:rt.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}}}get helper(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target!=="0x2::coin::zero");return new _t(t,this.txb)}get collectRewardHelper(){return this.transactions.filter(e=>e.kind==="MoveCall"&&e.target===`${P.PackageId}::position_manager::collect_reward`).map(e=>new _t(e,this.txb))}get collectFeeHelper(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target===`${P.PackageId}::position_manager::collect`);return new _t(t,this.txb)}get decreaseLiquidityHelper(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target===`${P.PackageId}::position_manager::decrease_liquidity`);return new _t(t,this.txb)}},_t=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 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 wr.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 wr.de(e,new Uint8Array(n))}typeArg(t){return lc(this.moveCall.typeArguments[t])}txArg(t){return this.moveCall.arguments[t]}};import{TurbosSdk as mc}from"turbos-clmm-sdk";var Yn=class a extends p{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new mc(e.network.replace("sui:",""),e.suiClient),{pool:o,address:r,amountA:i,amountB:s,slippage:c,tickLower:l,tickUpper:d,deadline:u,txb:m}=this.data;return n.pool.addLiquidity({pool:o,slippage:c,address:r,amountA:i,amountB:s,tickLower:l,tickUpper:d,deadline:u,txb:m})}static fromData(e){return new a(e)}};import{TurbosSdk as bc}from"turbos-clmm-sdk";var Jn=class a extends p{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new bc(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 fc}from"turbos-clmm-sdk";var Zn=class a extends p{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new fc(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 gc}from"turbos-clmm-sdk";var ta=class a extends p{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new gc(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 hc}from"turbos-clmm-sdk";var ea=class a extends p{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new hc(e.network.replace("sui:",""),e.suiClient),{fee:o,address:r,tickLower:i,tickUpper:s,sqrtPrice:c,slippage:l,coinTypeA:d,coinTypeB:u,amountA:m,amountB:b,deadline:f,txb:y}=this.data;return n.pool.createPool({fee:o,amountA:m,amountB:b,address:r,tickLower:i,tickUpper:s,sqrtPrice:c,slippage:l,coinTypeA:d,coinTypeB:u,deadline:f,txb:y})}static fromData(e){return new a(e)}};import{TurbosSdk as yc}from"turbos-clmm-sdk";var na=class a extends p{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new yc(e.network.replace("sui:",""),e.suiClient),{pool:o,address:r,amountA:i,amountB:s,slippage:c,nft:l,decreaseLiquidity:d,deadline:u,txb:m}=this.data;return n.pool.decreaseLiquidity({pool:o,slippage:c,address:r,amountA:i,amountB:s,nft:l,decreaseLiquidity:d,deadline:u,txb:m})}static fromData(e){return new a(e)}};import{TurbosSdk as Sc}from"turbos-clmm-sdk";var aa=class a extends p{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new Sc(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 wc}from"@mysten/sui.js/transactions";import{TurbosSdk as Tc}from"turbos-clmm-sdk";var oa=class a extends p{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new Tc(e.network.replace("sui:",""),e.suiClient),o=new wc;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 Cc}from"turbos-clmm-sdk";var ra=class a extends p{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new Cc(e.network.replace("sui:",""),e.suiClient),{routes:o,coinTypeA:r,coinTypeB:i,address:s,amountA:c,amountB:l,slippage:d,amountSpecifiedIsInput:u,deadline:m,txb:b}=this.data;return n.trade.swap({routes:o,coinTypeA:r,coinTypeB:i,address:s,amountA:c,amountB:l,amountSpecifiedIsInput:u,slippage:d,deadline:m,txb:b})}static fromData(e){return new a(e)}};var ia=class{application="turbos";async deserialize(t){let e=new kc(t.network.replace("sui:",""),t.suiClient),{transactionBlock:n,account:o}=t,i=new Xn(n,e).decode(o.address);return{txType:Ic.Other,txSubType:i.type,intentionData:i.intentionData}}async build(t){let{suiClient:e,account:n,network:o}=t,r;switch(t.txSubType){case"CreatePool":r=ea.fromData(t.intentionData);break;case"AddLiquidity":r=Yn.fromData(t.intentionData);break;case"IncreaseLiquidity":r=aa.fromData(t.intentionData);break;case"DecreaseLiquidity":r=na.fromData(t.intentionData);break;case"RemoveLiquidity":r=oa.fromData(t.intentionData);break;case"CollectFee":r=Zn.fromData(t.intentionData);break;case"CollectReward":r=ta.fromData(t.intentionData);break;case"Burn":r=Jn.fromData(t.intentionData);break;case"Swap":r=ra.fromData(t.intentionData);break;default:throw new Error("not implemented")}return r.build({suiClient:e,account:n,network:o})}};import{TransactionType as _c}from"@msafe/sui3-utils";import{TransactionType as Qa}from"@msafe/sui3-utils";import{bcs as Cr}from"@mysten/sui.js/bcs";import{normalizeStructTag as Ac,normalizeSuiAddress as te}from"@mysten/sui.js/utils";var xc={packageId:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55",poolObjectId:"0x7fa2faa111b8c65bea48a23049bfd81ca8f971a262d981dcd9a17c3825cb5baf",metadataObjectId:"0x680cd26af32b2bde8d3361e804c53ec1d1cfe24c7f039eb7f549e8dfde389a60",systemStateObjectId:"0x0000000000000000000000000000000000000000000000000000000000000005",certType:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55::cert::CERT"},v=xc;var sa=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(`${v.packageId}::native_pool::stake`)}isUnStakeTransaction(){return!!this.getMoveCallTransaction(`${v.packageId}::native_pool::unstake`)}isClaimTicketTransaction(){return!!this.getMoveCallTransaction(`${v.packageId}::native_pool::burn_ticket`)}decodeStake(){let t=this.transactions[0].amounts[0].value.div(1e9).toNumber();return{txType:Qa.Other,type:"Stake",intentionData:{amount:t}}}decodeUnStake(){let e=this.transactions.find(n=>n.kind==="SplitCoins").amounts[0].value.div(1e9).toNumber();return{txType:Qa.Other,type:"UnStake",intentionData:{amount:e}}}decodeClaimTicket(){let t=this.helper.decodeOwnedObjectId(2);return console.log(t),{txType:Qa.Other,type:"ClaimTicket",intentionData:{ticketId:t}}}get helper(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(v.packageId));return new Ka(t,this.txb)}},Ka=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]}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 Cr.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 Cr.de(e,new Uint8Array(n))}typeArg(t){return Ac(this.moveCall.typeArguments[t])}txArg(t){return this.moveCall.arguments[t]}};import{TransactionBlock as Oc}from"@mysten/sui.js/transactions";var ca=class a extends p{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){console.log(e);let n=new Oc,{ticketId:o}=this.data;return n.moveCall({target:`${v.packageId}::native_pool::burn_ticket`,arguments:[n.object(v.poolObjectId),n.object(v.systemStateObjectId),n.object(o)]}),n}static fromData(e){return new a(e)}};import{TransactionBlock as Dc}from"@mysten/sui.js/transactions";var da=class a extends p{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){console.log(e);let n=new Dc,{amount:o}=this.data,[r]=n.splitCoins(n.gas,[n.pure(o)]);return n.moveCall({target:`${v.packageId}::native_pool::stake`,arguments:[n.object(v.poolObjectId),n.object(v.metadataObjectId),n.object(v.systemStateObjectId),r]}),n}static fromData(e){return new a(e)}};import{TransactionBlock as Pc}from"@mysten/sui.js/transactions";var la=class a extends p{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){console.log(e);let n=new Pc,{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]===v.certType),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:`${v.packageId}::native_pool::unstake`,arguments:[n.object(v.poolObjectId),n.object(v.metadataObjectId),n.object(v.systemStateObjectId),l]}),n}static fromData(e){return new a(e)}};var ua=class{application="volo";async deserialize(t){let{transactionBlock:e}=t,o=new sa(e).decode();return{txType:_c.Other,txSubType:o.type,intentionData:o.intentionData}}async build(t){let{suiClient:e,account:n}=t,o;switch(t.txSubType){case"Stake":o=da.fromData(t.intentionData);break;case"UnStake":o=la.fromData(t.intentionData);break;case"ClaimTicket":o=ca.fromData(t.intentionData);break;default:throw new Error("not implemented")}return o.build({suiClient:e,account:n})}};var rk=new gn([new on,new bn,new tn,new fn,new we,new ia,new Oe,new zn,new ua]);export{rk as appHelpers};
|
|
1
|
+
var pr=Object.defineProperty;var En=(n,e)=>{for(var t in e)pr(n,t,{get:e[t],enumerable:!0})};import{TransactionType as Wr}from"@msafe/sui3-utils";import{TransactionType as wr}from"@msafe/sui3-utils";import mr from"sort-keys-recursive";var u=class{constructor(e){this.data=e}get application(){return"msafe-core"}serialize(){return JSON.stringify(mr(this.data))}};import{CetusPeripherySDK as br}from"@cetusprotocol/cetus-periphery-sdk";import{CetusClmmSDK as fr}from"@cetusprotocol/cetus-sui-clmm-sdk";var gr={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:"0xc33c3e937e5aa2009cc0c3fdb3f345a0c3193d4ee663ffc601fe8b894fbc4ba6",version:4,config:{pools_id:"0xf699e7f2276f5c9a75944b37a0c5b5d9ddfd2471bf6242483b03ab2887d198d0",global_config_id:"0xdaa46292632c3c4d8f31f23ea0f9b36a28ff3677e9684980e4438403a67a3d8f",global_vault_id:"0xce7bceef26d3ad1f6d9b6f13a953f053e6ed3ca77907516481ce99ae8e588f2b",admin_cap_id:"0x89c1a321291d15ddae5a086c9abc533dff697fde3d89e0ca836c41af73e36a75"}},integrate:{package_id:"0x996c4d9480708fb8b92aa7acf819fb0497b5ec8e65ba06601cae2fb6db3312c3",published_at:"0xd43348b8879c1457f882b02555ba862f2bc87bcc31b16294ca14a82f608875d2",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"},hr={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:"0xcec352932edc6663a118e8d64ed54da6b8107e8719603bf728f80717592cd9e8",version:3,config:{dividend_manager_id:"0x721c990bfc031d074341c6059a113a59c1febfbd2faeb62d49dcead8408fa6b5",dividend_admin_id:"",dividend_settle_id:""}},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:"0xd3453d9be7e35efe222f78a810bb3af1859fd1600926afced8b4936d825c9a05",version:1,config:{admin_cap_id:"0x78a42978709c4032fab7b33b782b5bcef64c1c6603250bf23644650b72144375",vaults_manager_id:"0x25b82dd2f5ee486ed1c8af144b89a8931cd9c29dee3a86a1bfe194fdea9d04a6",vaults_pool_handle:"0x9036bcc5aa7fd2cceec1659a6a1082871f45bc400c743f50063363457d1738bd"}},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:"0x11ea791d82b5742cc8cab0bf7946035c97d9001d7c3803a93f119753da66f526",version:1,config:{global_config_id:"0x21215f2f6de04b57dd87d9be7bb4e15499aec935e36078e2488f36436d64996e",rewarder_manager_id:"0xe0e155a88c77025056da08db5b1701a91b79edb6167462f768e387c3ed6614d5",rewarder_manager_handle:"0xb32e312cbb3367d6f3d2b4e57c9225e903d29b7b9f612dae2ddf75bdeb26a5aa",admin_cap_id:"0xf10fbf1fea5b7aeaa524b87769461a28c5c977613046360093673991f26d886c"}},haedal:{package_id:"0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d",published_at:"0x1d56b8ec33c3fae897eb7bb1acb79914e8152faed614868928e684c25c8b198d",version:1,config:{support_stakings:[{staking_id:"0x47b224762220393057ebf4f70501b6e657c3e56684737568439a04f80849b2ca",from_coin_type:"0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI",to_coin_type:"0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d::hasui::HASUI"}]}}},yr={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"},Sr={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"}},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"}},haedal:{package_id:"0xac2afb455cbcdc2ff1a2e9bbb8aa4ccb4506a544b08c740886892a5cdf92f472",published_at:"0x9dac9c5770e5f930d2223ff68782958701acfaee9337e8d8363978ce7670dffb",config:{support_stakings:[{staking_id:"0x6e384d2da5b040b27f973155e25bbe4beb0ad5ca8ee0a36e20dff356094c9fc0",from_coin_type:"0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI",to_coin_type:"0xac2afb455cbcdc2ff1a2e9bbb8aa4ccb4506a544b08c740886892a5cdf92f472::hasui::HASUI"}]}}},re=(n,e)=>{let t=n==="sui:mainnet"?gr:yr,a=new fr(t);return a.senderAddress=e.address,a},D=(n,e)=>{let t=re(n,e),a=n==="sui:mainnet"?hr:Sr;return new br(a,t)};var Ln=async(n,e,t)=>await re(t,e).Position.createAddLiquidityFixTokenPayload(n?.parameter,n?.gasEstimateArg),Wn=async(n,e,t)=>await re(t,e).Position.createAddLiquidityFixTokenPayload(n?.parameter,n?.gasEstimateArg),Un=async(n,e,t)=>await re(t,e).Position.closePositionTransactionPayload(n),Fn=async(n,e,t)=>await re(t,e).Position.removeLiquidityTransactionPayload(n),qn=async(n,e,t)=>await re(t,e).Rewarder.collectRewarderTransactionPayload(n);var Xe=class n extends u{constructor(t){super(t);this.data=t}txType=wr.Other;txSubType="OpenAndAddLiquidity";async build(t){let{account:a,network:o}=t,{txbParams:r}=this.data;return await Ln(r,a,o)}static fromData(t){return new n(t)}};import{TransactionType as Cr}from"@msafe/sui3-utils";var Ye=class n extends u{constructor(t){super(t);this.data=t}txType=Cr.Other;txSubType="ClaimFeeAndMining";async build(t){let{account:a,network:o}=t,{txbParams:r}=this.data;return await qn(r,a,o)}static fromData(t){return new n(t)}};import{TransactionType as Ir}from"@msafe/sui3-utils";var Ze=class n extends u{constructor(t){super(t);this.data=t}txType=Ir.Other;txSubType="DecreaseLiquidity";async build(t){let{account:a,network:o}=t,{txbParams:r}=this.data;return await Fn(r,a,o)}static fromData(t){return new n(t)}};import{TransactionType as Tr}from"@msafe/sui3-utils";var $n=async(n,e,t)=>await D(t,e).Farms.openPositionAddLiquidityStakePaylod(n),Vn=async(n,e,t)=>await D(t,e).Farms.addLiquidityFixCoinPayload(n),Qn=async(n,e,t)=>await D(t,e).Farms.removeLiquidityPayload(n),Gn=async(n,e,t)=>await D(t,e).Farms.removeLiquidityPayload(n),Kn=async(n,e,t)=>await D(t,e).Farms.claimFeeAndClmmReward(n),Hn=async(n,e,t)=>{let a=D(t,e);return console.log("getFarmingHarvest txbParams: ",n),await a.Farms.harvestPayload(n)},zn=async(n,e,t)=>{let a=D(t,e),o=Object.values(n);return console.log("getFarmingBatchHarvest params: ",o),await a.Farms.batchHarvestPayload(o)},Jn=async(n,e,t)=>await D(t,e).Farms.depositPayload(n),Xn=async(n,e,t)=>await D(t,e).Farms.withdrawPayload(n);var et=class n extends u{constructor(t){super(t);this.data=t}txType=Tr.Other;txSubType="FarmingOpenAndAddLiquidity";async build(t){let{account:a,network:o}=t,{txbParams:r}=this.data;return await $n(r,a,o)}static fromData(t){return new n(t)}};import{TransactionType as kr}from"@msafe/sui3-utils";var tt=class n extends u{constructor(t){super(t);this.data=t}txType=kr.Other;txSubType="FarmingBatchHarvest";async build(t){let{account:a,network:o}=t,{txbParams:r}=this.data;return await zn(r,a,o)}static fromData(t){return new n(t)}};import{TransactionType as xr}from"@msafe/sui3-utils";var at=class n extends u{constructor(t){super(t);this.data=t}txType=xr.Other;txSubType="FarmingClaimFeeAndReward";async build(t){let{account:a,network:o}=t,{txbParams:r}=this.data;return await Kn(r,a,o)}static fromData(t){return new n(t)}};import{TransactionType as vr}from"@msafe/sui3-utils";var nt=class n extends u{constructor(t){super(t);this.data=t}txType=vr.Other;txSubType="FarmingDecreaseLiquidity";async build(t){let{account:a,network:o}=t,{txbParams:r}=this.data;return await Qn(r,a,o)}static fromData(t){return new n(t)}};import{TransactionType as Ar}from"@msafe/sui3-utils";var ot=class n extends u{constructor(t){super(t);this.data=t}txType=Ar.Other;txSubType="FarmingHarvest";async build(t){let{account:a,network:o}=t,{txbParams:r}=this.data;return await Hn(r,a,o)}static fromData(t){return new n(t)}};import{TransactionType as Or}from"@msafe/sui3-utils";var rt=class n extends u{constructor(t){super(t);this.data=t}txType=Or.Other;txSubType="FarmingIncreaseLiquidity";async build(t){let{account:a,network:o}=t,{txbParams:r}=this.data;return await Vn(r,a,o)}static fromData(t){return new n(t)}};import{TransactionType as Pr}from"@msafe/sui3-utils";var it=class n extends u{constructor(t){super(t);this.data=t}txType=Pr.Other;txSubType="FarmingRemoveLiquidity";async build(t){let{account:a,network:o}=t,{txbParams:r}=this.data;return await Gn(r,a,o)}static fromData(t){return new n(t)}};import{TransactionType as Dr}from"@msafe/sui3-utils";var st=class n extends u{constructor(t){super(t);this.data=t}txType=Dr.Other;txSubType="FarmingStake";async build(t){let{account:a,network:o}=t,{txbParams:r}=this.data;return await Jn(r,a,o)}static fromData(t){return new n(t)}};import{TransactionType as _r}from"@msafe/sui3-utils";var ct=class n extends u{constructor(t){super(t);this.data=t}txType=_r.Other;txSubType="FarmingUnstake";async build(t){let{account:a,network:o}=t,{txbParams:r}=this.data;return await Xn(r,a,o)}static fromData(t){return new n(t)}};import{TransactionType as jr}from"@msafe/sui3-utils";var dt=class n extends u{constructor(t){super(t);this.data=t}txType=jr.Other;txSubType="IncreaseLiquidity";async build(t){let{account:a,network:o}=t,{txbParams:r}=this.data;return await Wn(r,a,o)}static fromData(t){return new n(t)}};import{TransactionType as Rr}from"@msafe/sui3-utils";var lt=class n extends u{constructor(t){super(t);this.data=t}txType=Rr.Other;txSubType="RemoveLiquidity";async build(t){let{account:a,network:o}=t,{txbParams:r}=this.data;return await Un(r,a,o)}static fromData(t){return new n(t)}};import{TransactionType as Nr}from"@msafe/sui3-utils";var Yn=async(n,e,t)=>await D(t,e).XCetusModule.convertPayload(n),Zn=async(n,e,t)=>await D(t,e).XCetusModule.redeemLockPayload(n),eo=async(n,e,t)=>await D(t,e).XCetusModule.redeemDividendV2Payload(n.venft_id,n.bonus_types,n.xTokenType),to=async(n,e,t)=>await D(t,e).XCetusModule.cancelRedeemPayload(n),ao=async(n,e,t)=>await D(t,e).XCetusModule.redeemPayload(n);var ut=class n extends u{constructor(t){super(t);this.data=t}txType=Nr.Other;txSubType="xCETUSCancelRedeem";async build(t){let{account:a,network:o}=t,{txbParams:r}=this.data;return await to(r,a,o)}static fromData(t){return new n(t)}};import{TransactionType as Br}from"@msafe/sui3-utils";var pt=class n extends u{constructor(t){super(t);this.data=t}txType=Br.Other;txSubType="xCETUSClaimStakingRwewards";async build(t){let{account:a,network:o}=t,{txbParams:r}=this.data;return await eo(r,a,o)}static fromData(t){return new n(t)}};import{TransactionType as Mr}from"@msafe/sui3-utils";var mt=class n extends u{constructor(t){super(t);this.data=t}txType=Mr.Other;txSubType="xCETUSConvert";async build(t){let{account:a,network:o}=t,{txbParams:r}=this.data;return await Yn(r,a,o)}static fromData(t){return new n(t)}};import{TransactionType as Er}from"@msafe/sui3-utils";var bt=class n extends u{constructor(t){super(t);this.data=t}txType=Er.Other;txSubType="xCETUSRedeem";async build(t){let{account:a,network:o}=t,{txbParams:r}=this.data;return await ao(r,a,o)}static fromData(t){return new n(t)}};import{TransactionType as Lr}from"@msafe/sui3-utils";var ft=class n extends u{constructor(t){super(t);this.data=t}txType=Lr.Other;txSubType="xCETUSRedeemLock";async build(t){let{account:a,network:o}=t,{txbParams:r}=this.data;return await Zn(r,a,o)}static fromData(t){return new n(t)}};var gt=class{application="cetus";async deserialize(e){console.log("Cetus helper deserialize input: ",e);let{txbParams:t,action:a}=e;return{txType:Wr.Other,txSubType:a,intentionData:{txbParams:{...t},action:a}}}async build(e){let{suiClient:t,account:a,network:o}=e;console.log("helper build input: ",e),console.log("helper build input.intentionData: ",e.intentionData),console.log("helper build input.intentionData JSON: ",JSON.stringify(e.intentionData));let r;switch(e.txSubType){case"OpenAndAddLiquidity":r=Xe.fromData(e.intentionData);break;case"IncreaseLiquidity":r=dt.fromData(e.intentionData);break;case"DecreaseLiquidity":r=Ze.fromData(e.intentionData);break;case"RemoveLiquidity":r=lt.fromData(e.intentionData);break;case"ClaimFeeAndMining":r=Ye.fromData(e.intentionData);break;case"FarmingOpenAndAddLiquidity":r=et.fromData(e.intentionData);break;case"FarmingIncreaseLiquidity":r=rt.fromData(e.intentionData);break;case"FarmingDecreaseLiquidity":r=nt.fromData(e.intentionData);break;case"FarmingRemoveLiquidity":r=it.fromData(e.intentionData);break;case"FarmingClaimFeeAndReward":r=at.fromData(e.intentionData);break;case"FarmingHarvest":r=ot.fromData(e.intentionData);break;case"FarmingBatchHarvest":r=tt.fromData(e.intentionData);break;case"FarmingStake":r=st.fromData(e.intentionData);break;case"FarmingUnstake":r=ct.fromData(e.intentionData);break;case"xCETUSConvert":r=mt.fromData(e.intentionData);break;case"xCETUSRedeemLock":r=ft.fromData(e.intentionData);break;case"xCETUSClaimStakingRwewards":r=pt.fromData(e.intentionData);break;case"xCETUSCancelRedeem":r=ut.fromData(e.intentionData);break;case"xCETUSRedeem":r=bt.fromData(e.intentionData);break;default:throw new Error("not implemented")}return console.log("helper build intention: ",r),console.log("helper build account: ",a),console.log("helper build network: ",o),r.build({suiClient:t,account:a,network:o})}};import{TransactionType as Ei}from"@msafe/sui3-utils";var tn={};En(tn,{contractId:()=>qr,default:()=>Kr,feeObjId:()=>Qr,roleObjId:()=>$r,status:()=>Fr,transaction:()=>Ur,upgradeCapObjId:()=>Gr,vaultObjId:()=>Vr});var Ur="DiBZq4UmVVYiRL6ZJmFKYoHcxtxqrhsCXSkFyT7wUr3j",Fr="success",qr="0x81c960dc653975fbd0072deca8afb92d322898c911622898ba1b2e3ad0c4bd8d",$r="0xc6ec0bdee0bb59a72077e9acd2f42457043cf47080b3d3fad4d39abf28bba63a",Vr="0xbc4021387fbac149119fd24e92be9e58f745774292f3a2a12e2ac6daf5363e1d",Qr="0x4178f63970fe2daeb256dc5730ad172e82b3e8eb45f31b33e0daae72cd35e1e1",Gr="0xe1e9aa7d222d151bfe6dd83358b0d7fdcb11260f710800cfaf7ccc1b1e245115",Kr={transaction:Ur,status:Fr,contractId:qr,roleObjId:$r,vaultObjId:Vr,feeObjId:Qr,upgradeCapObjId:Gr};var an={};En(an,{contractId:()=>Jr,default:()=>ti,feeObjId:()=>Zr,roleObjId:()=>Xr,status:()=>zr,transaction:()=>Hr,upgradeCapObjId:()=>ei,vaultObjId:()=>Yr});var Hr="855FNDV8o8Z3fWULPnQo9qdhLJpsg7wZrkCpNyfw9KfB",zr="success",Jr="0xc357c3985e8fb875d6b37141497af660779aa1bab0ec489b2213efd74067d1fa",Xr="0x5ab49bdf9fd1413e328ef242b3f8d83dde791b38a0b627bfc87fb25c010d34f1",Yr="0xb483558770d8eb26007f193b75db40f0a45f2e36863a687625885d4de6993378",Zr="0x48453fc4d7cde3fe35aad89e5dfb496608a6a55ea529a1c0274681a808627f94",ei="0x34279779a0d0d36bd5044b04830d607fa1b0ecf316548c8ac3a44151e4f1a42a",ti={transaction:Hr,status:zr,contractId:Jr,roleObjId:Xr,vaultObjId:Yr,feeObjId:Zr,upgradeCapObjId:ei};var ai="https://sui-testnet.blockvision.org/v1/2Sgk89ivT64MnKdcGzjmyjY2ndD",ni="https://sui-testnet.blockvision.org/v1/2Sgk89ivT64MnKdcGzjmyjY2ndD",oi="https://sui-mainnet.blockvision.org/v1/2Sgk7NPvqkd7mESYkxF01yX15l7",ri="https://sui-mainnet.blockvision.org/v1/2Sgk7NPvqkd7mESYkxF01yX15l7",ii="https://bc3p6l5unl.execute-api.us-west-1.amazonaws.com/prod",si="https://rolsbkota7.execute-api.us-west-1.amazonaws.com/prod",ci="https://6p6mkx33ne.execute-api.us-west-1.amazonaws.com/prod",di="https://xrae3mrjv5.execute-api.us-west-1.amazonaws.com/prod",no=tn,oo=an,li=new Map([["dev",{env:"dev",rpc:{url:ai},backend:{url:ii},contract:no}],["stg",{env:"stg",rpc:{url:ni},backend:{url:si},contract:no}],["prev",{env:"prev",rpc:{url:oi},backend:{url:ci},contract:oo}],["prod",{env:"prod",rpc:{url:ri},backend:{url:di},contract:oo}]]);function ro(n,e){let t=li.get(n);if(!t)throw new Error(`Env not supported: ${n}`);return e&&e.rpc&&(t.rpc=e.rpc),e&&e.backend&&(t.backend=e.backend),e&&e.contract&&(t.contract=e.contract),t}import{SuiClient as pi}from"@mysten/sui.js/client";var S=class extends Error{mpayErrorCode;context;constructor(e,t,a={}){let{cause:o,context:r}=a;o?super(`[MPay] ${t}: ${o}`):super(`[MPay] ${t}`),this.mpayErrorCode=e,this.context=r}};var ht=class extends S{constructor(){super(11,"Backend is not specified")}};var yt=class extends S{constructor(){super(1,"Wallet not connected")}};import me,{AxiosError as ui}from"axios";var pe=class extends S{constructor(e,t){super(10,e,{context:t})}};var St=class n{constructor(e){this.apiURL=e}static parseResponseData(e){if(e instanceof ui)throw new pe(e.response?.statusText);if(e.status===200){if(e.data.success)return e.data.data;throw new pe(e.data.code)}throw new pe(e.status.toString())}async getIncomingStreams(e,t){let a=await me.post(`${this.apiURL}/stream`,{recipient:e,...t});return n.parseResponseData(a)}async getOutgoingStreams(e,t){let a=await me.post(`${this.apiURL}/stream`,{sender:e,...t});return n.parseResponseData(a)}async getStreamHistory(e){let t=await me.post(`${this.apiURL}/stream-events`,e),a=n.parseResponseData(t);return a.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}),a}async getAllCoinTypes(e){let t=await me.post(`${this.apiURL}/stream-info`,{address:e});return n.parseResponseData(t)}async getAllRecipients(e,t){let a=await me.post(`${this.apiURL}/stream-info`,{sender:e,status:t});return n.parseResponseData(a)}async getAllSenders(e,t){let a=await me.post(`${this.apiURL}/stream-info`,{recipient:e,status:t});return n.parseResponseData(a)}};var be=class n{signer;suiClient;envConfig;_backend;constructor(e){this.envConfig=e,this.suiClient=new pi({url:e.rpc.url}),e.backend&&(this._backend=new St(e.backend.url))}static new(e,t){let a=ro(e,t);return new n(a)}get walletType(){return this.wallet?this.wallet.type:"disconnected"}get backend(){if(!this._backend)throw new ht;return this._backend}set backend(e){this._backend=e}connectWallet(e){this.signer=e}disconnect(){this.signer=void 0}get wallet(){if(!this.signer)throw new yt;return this.signer}async walletAddress(){return this.wallet.address()}};import{SUI_TYPE_ARG as Ri,normalizeStructTag as Ni,normalizeSuiAddress as Do}from"@mysten/sui.js/utils";import{TransactionBlock as xt}from"@mysten/sui.js/transactions";import{TransactionBlock as fo}from"@mysten/sui.js/transactions";import{SUI_TYPE_ARG as go,normalizeStructTag as gi}from"@mysten/sui.js/utils";var nn=50n,wt=10000n,io=25n,on=100000000n;var F=class{constructor(e){this.object=e}moveArg(e){return e.object(this.object)}},Pe=class{constructor(e){this.objects=e}moveArgs(e){return e.makeMoveVec({objects:this.objects.map(t=>e.object(t))})}},X=class n{constructor(e){this.result=e;return new Proxy(this,{set(){throw new Error("The transaction result is a proxy, and does not support setting properties directly")},get(t,a){if(a in t)return Reflect.get(t,a);let o=i=>new n(t.result[i]);if(a===Symbol.iterator)return function*(){let i=0;for(;;)yield o(i),i++};if(typeof a=="symbol")return;let r=parseInt(a,10);if(!(Number.isNaN(r)||r<0))return o(r)}})}moveArg(){return this.result}};import{Buffer as so}from"buffer";import{normalizeSuiAddress as mi}from"@mysten/sui.js/utils";var De=class extends S{constructor(e,t){super(3,e,{context:t})}};var Ct=class{constructor(e){this.results=e}callResult(e){return this.results.results[e]}returnValue(e,t){return e.returnValues[t]}getValue(e=0,t=0){let a=this.callResult(e);return this.returnValue(a,t)}getAddress(e=0,t=0){let[a,o]=this.getValue(e,t);if(o!=="address")throw new De("Invalid contract return type.",{ctx:{expectType:"address",gotType:o}});return mi(so.from(a).toString("hex"))}getU64(e=0,t=0){let[a,o]=this.getValue(e,t);if(o!=="u64")throw new De("Invalid contract return type.",{ctx:{expectType:"u64",gotType:o}});return so.from(a).readBigInt64LE()}};import{bcs as lo}from"@mysten/sui.js/bcs";var k=class extends S{constructor(e,t,a){super(2,`Invalid input: ${e}`,{context:{fieldKey:t,fieldValue:a}})}};var uo={groupId:"string",name:"string"},bi=64;function po(n){return mo(n),lo.ser(uo,n).toString("base64")}function _e(n){let e=lo.de(uo,n,"base64");return mo(e),e}function mo(n){if(!co(n.name))throw new k("Invalid metadata: Name contains unknown character");if(!co(n.groupId))throw new k("Invalid metadata: Group ID contains unknown character");if(n.name.length>bi)throw new k("Invalid metadata: Name exceed max length 64")}function co(n){return/^[\x00-\x7F]+$/.test(n)}import{normalizeStructTag as It}from"@mysten/sui.js/utils";function Tt(n,e){return It(n)===It(e)}function Y(n,e){return It(n)===It(e)}var kt="txn.gas";import{nanoid as fi}from"nanoid";function bo(){return fi()}var ie=class n{constructor(e,t,a){this.globals=e;this.feeContract=t;this.streamContract=a}static convertCreateStreamInfoToInternal(e){return{metadata:po({name:e.name,groupId:bo()}),coinType:gi(e.coinType),recipients:e.recipients.map(t=>({address:t.address,cliffAmount:t.cliffAmount,amountPerEpoch:t.amountPerStep})),epochInterval:e.interval,numberEpoch:e.steps,startTime:e.startTimeMs,cancelable:e.cancelable}}async buildCreateStreamTransactionBlock(e){let t=new fo,a=this.calculateFeesInternal(e),o=this.getCreateStreamCoinRequests(e,a),r=await this.wallet.requestCoins(o),i=await this.addMergeCoins(t,r[0]),s;o.length>1?s=await this.addMergeCoins(t,r[1]):s=i;for(let c=0;c<e.recipients.length;c++){let l=e.recipients[c],d=this.amountForRecipient(l,e.numberEpoch),p=this.getStreamFeeLocal(d),[m]=t.splitCoins(i,[t.pure(d+p,"u64")]),[b]=t.splitCoins(s,[t.pure(this.flatSuiFee,"u64")]);this.streamContract.createStream(t,{paymentCoin:new X(m),flatFeeCoin:new X(b),metadata:e.metadata,recipient:l.address,timeStart:e.startTime,cliff:l.cliffAmount,epochInterval:e.epochInterval,numEpoch:e.numberEpoch,amountPerEpoch:l.amountPerEpoch,cancelable:e.cancelable,coinType:e.coinType})}return t}calculateCreateStreamFees(e){let t=n.convertCreateStreamInfoToInternal(e);return this.calculateFeesInternal(t)}feeParams(){return{createFeePercent:{numerator:nn,denominator:wt},claimFeePercent:{numerator:io,denominator:wt},flatFeePerStream:on}}async addMergeCoins(e,t){let a;return t.mergedCoins&&t.mergedCoins.length?(e.mergeCoins(e.object(t.primaryCoin),t.mergedCoins.map(o=>e.object(o))),a=e.object(t.primaryCoin)):t.primaryCoin===kt?a=e.gas:a=e.object(t.primaryCoin),a}getCreateStreamCoinRequests(e,t){let a=e.coinType;return Tt(a,go)?[{coinType:a,amount:t.totalAmount+t.streamFeeAmount+t.flatFeeAmount}]:[{coinType:a,amount:t.totalAmount+t.streamFeeAmount},{coinType:go,amount:t.flatFeeAmount}]}calculateFeesInternal(e){let t=e.recipients.reduce((o,r)=>{let i=this.amountForRecipient(r,e.numberEpoch),s=this.getStreamFeeLocal(i);return{totalAmount:o.totalAmount+i,streamFeeAmount:o.streamFeeAmount+s}},{totalAmount:0n,streamFeeAmount:0n});return{flatFeeAmount:BigInt(e.recipients.length)*this.flatSuiFee,...t}}amountForRecipient(e,t){return BigInt(e.amountPerEpoch)*BigInt(t)+BigInt(e.cliffAmount)}get flatSuiFee(){return on}getStreamFeeLocal(e){return e*nn/wt}async getStreamFeeRemote(e){let t=this.feeContract.streamingFee(new fo,e),a=await this.globals.suiClient.devInspectTransactionBlock({sender:await this.globals.walletAddress(),transactionBlock:t});return new Ct(a).getU64()}get wallet(){return this.globals.wallet}};import{Transactions as yo}from"@mysten/sui.js/transactions";var ho="0x0000000000000000000000000000000000000000000000000000000000000006";var fe=class{constructor(e,t,a){this.moduleName=e;this.config=t;this.globals=a}addContractCall(e,t){let a=`${this.config.contractId}::${this.moduleName}::${t.method}`;return e.add(yo.MoveCall({target:a,arguments:t.arguments.map(o=>o instanceof Pe?o.moveArgs(e):o instanceof F?o.moveArg(e):o instanceof X?o.moveArg():e.pure(o)),typeArguments:t.typeArgs})),e}addTransactionBlock(e,t,a=[],o=[]){e.add(yo.MoveCall({target:t,arguments:a.map(r=>r instanceof Pe?r.moveArgs(e):r instanceof F?r.moveArg(e):r instanceof X?r.moveArg():e.pure(r)),typeArguments:o}))}makeObject(e){return typeof e=="string"?new F(e):e}vaultObject(){return new F(this.config.vaultObjId)}roleObject(){return new F(this.config.roleObjId)}feeObject(){return new F(this.config.feeObjId)}clockObject(){return new F(ho)}};var ge=class n extends fe{constructor(t,a){super(n.ModuleName,t,a);this.config=t;this.globals=a}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(t,a){let o=this.roleObject(),r=this.feeObject();return this.addContractCall(t,{method:n.MethodName.set_streaming_fee,arguments:[o,r,a],typeArgs:[]})}setStreamingFlatFee(t,a){let o=this.roleObject(),r=this.feeObject();return this.addContractCall(t,{method:n.MethodName.set_streaming_flat_fee,arguments:[o,r,a],typeArgs:[]})}setClaimFee(t,a){let o=this.roleObject(),r=this.feeObject();return this.addContractCall(t,{method:n.MethodName.set_claim_fee,arguments:[o,r,a],typeArgs:[]})}streamingFee(t,a){let o=this.feeObject();return this.addContractCall(t,{method:n.MethodName.streaming_fee,arguments:[o,a],typeArgs:[]})}claimFee(t,a){return this.addContractCall(t,{method:n.MethodName.claim_fee,arguments:[this.feeObject(),a],typeArgs:[]})}feeDenominator(t){return this.addContractCall(t,{method:n.MethodName.fee_denominator,arguments:[this.feeObject()],typeArgs:[]})}};var q=class n extends fe{constructor(t,a){super(n.ModuleName,t,a);this.config=t;this.globals=a}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(t,a){let o=this.feeObject(),r=this.vaultObject(),i=this.makeObject(a.paymentCoin),s=this.makeObject(a.flatFeeCoin),c=this.clockObject();return this.addContractCall(t,{method:n.MethodName.create_stream,arguments:[o,r,i,s,a.metadata,a.recipient,a.timeStart,a.cliff,a.epochInterval,a.numEpoch,a.amountPerEpoch,a.cancelable,c],typeArgs:[a.coinType]})}setAutoClaim(t,a){let o=this.makeObject(a.streamId);return this.addContractCall(t,{method:n.MethodName.set_auto_claim,arguments:[o,a.enabled],typeArgs:[a.coinType]})}cancelStream(t,a){let o=this.makeObject(a.streamId),r=this.clockObject();return this.addContractCall(t,{method:n.MethodName.cancel_stream,arguments:[o,r],typeArgs:[a.coinType]})}claimStream(t,a){let o=this.makeObject(a.streamId),r=this.clockObject();return this.addContractCall(t,{method:n.MethodName.claim_stream,arguments:[o,r],typeArgs:[a.coinType]})}claimStreamByProxy(t,a){let o=this.makeObject(a.streamId),r=this.vaultObject(),i=this.feeObject(),s=this.clockObject();return this.addContractCall(t,{method:n.MethodName.claim_stream_by_proxy,arguments:[o,r,i,s],typeArgs:[a.coinType]})}get createStreamTarget(){return`${this.config.contractId}::${n.ModuleName}::${n.MethodName.create_stream}`}get setAutoClaimTarget(){return`${this.config.contractId}::${n.ModuleName}::${n.MethodName.set_auto_claim}`}get cancelStreamTarget(){return`${this.config.contractId}::${n.ModuleName}::${n.MethodName.cancel_stream}`}get claimStreamTarget(){return`${this.config.contractId}::${n.ModuleName}::${n.MethodName.claim_stream}`}get claimStreamByProxyTarget(){return`${this.config.contractId}::${n.ModuleName}::${n.MethodName.claim_stream_by_proxy}`}};var he=class{constructor(e){this.globals=e;let t=e.envConfig.contract;this.feeContract=new ge(t,e),this.streamContract=new q(t,e)}feeContract;streamContract;async createStreams(e){let t=ie.convertCreateStreamInfoToInternal(e);return this.createStreamHelper().buildCreateStreamTransactionBlock(t)}createStreamHelper(){return new ie(this.globals,this.feeContract,this.streamContract)}setAutoClaim(e,t,a){let o=new xt;return this.streamContract.setAutoClaim(o,{streamId:e,enabled:t,coinType:a})}claimStream(e,t){let a=new xt;return this.streamContract.claimStream(a,{streamId:e,coinType:t})}claimStreamByProxy(e,t){let a=new xt;return this.streamContract.claimStreamByProxy(a,{streamId:e,coinType:t})}cancelStream(e,t){let a=new xt;return this.streamContract.cancelStream(a,{streamId:e,coinType:t}),a}};var A=class extends S{constructor(e,t={}){super(0,e,t)}};async function sn(n){let e=[];for(;await n.hasNext();){let t=await n.next();e.push(t)}return e&&Array.isArray(e[0])?e.flat(1):e}var rn=class{constructor(e){this.requester=e;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)}},ye=class{constructor(e){this.requester=e;this.pager=new rn(e),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 vt=class extends S{constructor(t,a,o){super(4,`Not enough balance: ${t}`,{context:{coinType:t,requestAmount:a,gotAmount:o}});this.coinType=t;this.requestAmount=a;this.gotAmount=o}};var hi=25;async function So(n,e,t,a="0x2::sui::SUI",o=hi){let r=new cn(n,e,a,o),i=BigInt(0),s=[];for(;await r.hasNext()&&i<t;){let c=await r.next();c&&(s.push(c),i+=BigInt(c.balance))}if(i<t)throw new vt(a,t,i);return s}var cn=class extends ye{constructor(t,a,o,r){super(new dn(t,a,o,r));this.suiClient=t;this.owner=a;this.coinType=o;this.reqPageSize=r}},dn=class{constructor(e,t,a,o){this.suiClient=e;this.owner=t;this.coinType=a;this.reqPageSize=o;if(o<=0)throw new A("Invalid reqPageSize")}nextCursor;async doNextRequest(){let e=await this.suiClient.getCoins({owner:this.owner,coinType:this.coinType,cursor:this.nextCursor,limit:this.reqPageSize});return this.nextCursor=e.nextCursor,{data:e.data,hasNext:e.hasNextPage}}};import{TransactionBlock as Dt}from"@mysten/sui.js/transactions";import{normalizeStructTag as Co,parseStructTag as wi}from"@mysten/sui.js/utils";import{DateTime as Ci}from"luxon";var At=class extends S{constructor(){super(7,"Connected wallet is not creator")}};var je=class extends S{constructor(){super(8,"Connected wallet is not recipient")}};var Re=class extends S{constructor(e,t){super(6,e,{context:t})}};var Ot=class extends S{constructor(e){super(5,"Stream not found",{context:{streamId:e}})}};import{DateTime as yi,Duration as Si}from"luxon";var wo=(1n<<64n)-1n,Pt=1e3;function ln(n){let e;typeof n=="number"?e=n:typeof n=="bigint"?e=Number(n):e=n.toMillis();let t=Math.round(e/Pt);return yi.fromMillis(t*Pt)}function un(n){let e;typeof n=="number"?e=n:typeof n=="bigint"?e=Number(n):e=n.toMillis();let t=Math.round(e/Pt);return Si.fromMillis(t*Pt)}var Z=class n{constructor(e,t,a){this.globals=e;this.streamId=t;this.rawData=a;this.streamContract=new q(e.envConfig.contract,e)}streamContract;type="Stream";static async new(e,t){let a=await n.fetchStreamData(e,t);return new n(e,t,a)}static fromObjectData(e,t,a){let o=n.parseRawStreamData(t,a);return new n(e,t,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 n.fetchStreamData(this.globals,this.streamId)}refreshWithData(e){if(e.data?.objectId!==this.streamId)throw new A("Object Id does not align");this.rawData=n.parseRawStreamData(this.streamId,e)}async historyEvents(e){return this.globals.backend.getStreamHistory({streamId:this.streamId,pagination:e})}async cancel(){if(await this.globals.walletAddress()!==this.creator)throw new At;let e=new Dt;return this.streamContract.cancelStream(e,{streamId:this.streamId,coinType:this.coinType}),e}async claim(){if(await this.globals.walletAddress()!==this.recipient)throw new je;let e=new Dt;return this.streamContract.claimStream(e,{streamId:this.streamId,coinType:this.coinType}),e}async setAutoClaim(e){if(await this.globals.walletAddress()!==this.recipient)throw new je;let t=new Dt;return this.streamContract.setAutoClaim(t,{streamId:this.streamId,coinType:this.coinType,enabled:e}),t}async claimByProxy(){let e=new Dt;return this.streamContract.claimStreamByProxy(e,{streamId:this.streamId,coinType:this.coinType}),e}get wallet(){return this.globals.wallet}get client(){return this.globals.suiClient}get coinType(){return Co(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 un(this.rawData.config.epochInterval)}get groupId(){let{metadata:e}=this.rawData.config;return _e(e).groupId}get name(){let{metadata:e}=this.rawData.config;return _e(e).name}get recipient(){return this.rawData.config.recipient}get timeStart(){return ln(this.rawData.config.timeStart)}get duration(){let e=this.rawData.config,t=e.epochInterval*e.totalEpoch;return un(t)}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:ln((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 e=this.rawData.status.status;return e===16?"CANCELED":e===17?"SETTLED":e===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===wo?0n:this.rawData.status.epochClaimed*this.amountPerEpoch+this.cliff}get currentEpoch(){let e=Ci.now().toMillis(),t=this.timeStart.toMillis();if(e<t)return-1n;let a=Math.floor((e-t)/Number(this.rawData.config.epochInterval));return BigInt(a)>Number(this.rawData.config.totalEpoch)?this.rawData.config.totalEpoch:BigInt(a)}get totalAmount(){let e=this.rawData.config;return e.amountPerEpoch*e.totalEpoch+e.cliff}get isCanceled(){let e=this.rawData.status.status;return e===16||e===17}get canceledAmount(){return this.isCanceled?this.totalAmount-this.streamedAmount:0n}static async fetchStreamData(e,t){let a=await e.suiClient.getObject({id:t,options:{showContent:!0,showType:!0}});return n.parseRawStreamData(t,a)}static parseRawStreamData(e,t){if(t.error)throw t.error.code==="notExists"?new Ot(e):new Re(`get stream data: ${t.error.code}`,{streamId:e,...t.error});let a=t.data.content;if(a.dataType!=="moveObject")throw new Re("Unexpected object type",{gotType:a.dataType});let{typeParams:o}=wi(a.type),r=Co(o[0]),i=a.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 pn,SUI_TYPE_ARG as Ii}from"@mysten/sui.js/utils";import{Duration as Io}from"luxon";var _t=class extends S{constructor(e,t){super(12,`Transaction failed: ${t}`,{context:{status:e,msg:t}})}};var Ti=1e3,jt=class{constructor(e){this.globals=e;this.coinMetaHelper=new mn(e.suiClient),this.createStreamHelper=new he(e).createStreamHelper()}coinMetaHelper;createStreamHelper;getStreamIdsFromCreateStreamResponse(e){if(e.effects?.status.status!=="success")throw new _t(e.effects?.status.status,e.effects?.status.error);return e.objectChanges.filter(t=>t.type==="created"&&t.objectType.startsWith(`${this.globals.envConfig.contract.contractId}::stream::Stream`)).map(t=>t.objectId)}calculateCreateStreamFees(e){return this.createStreamHelper.calculateCreateStreamFees(e)}feeParams(){return this.createStreamHelper.feeParams()}calculateStreamAmount(e){if(e.steps===0n)throw new k("Invalid stream steps: 0");let t=e.cliff?e.cliff:{numerator:0n,denominator:100n},a=e.totalAmount*t.numerator/t.denominator,o=(e.totalAmount-a)/e.steps,i={realTotalAmount:o*e.steps+a,cliffAmount:a,amountPerStep:o};return this.validateStreamAmount(i,e.totalAmount),i}calculateTimelineByInterval(e){if(e.steps===0n)throw new k("Invalid stream steps: 0");let t=e.timeStart.plus(e.interval.toMillis()*Number(e.steps)),a={timeStart:e.timeStart,timeEnd:t,interval:e.interval,steps:e.steps};return this.validateTimeline(a),a}calculateTimelineByTotalDuration(e){if(e.steps===0n)throw new k("Invalid stream steps: 0");let t=BigInt(e.total.toMillis())/e.steps,a=e.timeStart.plus(Io.fromMillis(Number(t*e.steps))),o={timeStart:e.timeStart,timeEnd:a,interval:Io.fromMillis(Number(t)),steps:e.steps};return this.validateTimeline(o),o}async getBalance(e,t){let a=await this.globals.suiClient.getBalance({owner:e,coinType:t}),o=await this.getCoinMeta(t);return{...a,coinType:pn(a.coinType),coinMeta:o}}async getAllBalance(e){let t=await this.globals.suiClient.getAllBalances({owner:e}),a=await Promise.all(t.map(o=>this.getCoinMeta(o.coinType)));return t.map((o,r)=>({...o,coinType:pn(o.coinType),coinMeta:a[r]}))}async getCoinMeta(e){return this.coinMetaHelper.getCoinMeta(e)}async simulateTransactionBlock(e){return this.globals.suiClient.devInspectTransactionBlock({transactionBlock:e,sender:await this.globals.wallet.address()})}validateStreamAmount(e,t){if(e.amountPerStep===0n)throw new k("Stream amount too small","totalAmount",t);if(e.cliffAmount>e.realTotalAmount)throw new k("Invalid cliff settings")}validateTimeline(e){if(e.interval.toMillis()<Ti)throw new k("Interval shall be at least 1 second","interval",e.interval)}},mn=class{constructor(e){this.suiClient=e;this.coinMetaReg=new Map}coinMetaReg;async getCoinMeta(e){let t=pn(e||Ii);if(this.coinMetaReg.has(t))return this.coinMetaReg.get(t);let a=await this.queryCoinMeta(t);return a&&this.coinMetaReg.set(t,a),a}async queryCoinMeta(e){return await this.suiClient.getCoinMetadata({coinType:e})||void 0}};import{normalizeStructTag as To,normalizeSuiAddress as Nt}from"@mysten/sui.js/utils";import{DateTime as ko}from"luxon";var Se=class extends S{constructor(e,t){super(9,`Invalid stream group: ${e}`,{context:t})}};var ki=25;async function fn(n,e,t){let a=new Ne(e),o=new Be(n,a,t);return await sn(o)}var Ne=class{constructor(e){this.ids=e;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]}},Be=class extends ye{constructor(t,a,o){super(new bn(t,a,o));this.suiClient=t;this.idIter=a;this.options=o}},bn=class{constructor(e,t,a){this.suiClient=e;this.stringIter=t;this.options=a;this.filter=a?.filter,this.pageSize=a?.pageSize||ki,this.objectOptions=a?.objectOptions||{showType:!0,showContent:!0}}filter;pageSize;objectOptions;async doNextRequest(){let e=[];for(;e.length<this.pageSize&&await this.stringIter.hasNext();){let r=await this.stringIter.next();r&&e.push(r)}let t=await this.suiClient.multiGetObjects({ids:e,options:this.objectOptions}),a;if(this.filter){let{filter:o}=this;a=t.filter(r=>o?.(r))}else a=t;return{data:a,hasNext:await this.stringIter.hasNext()}}};var Rt=class n{constructor(e,t){this.globals=e;this.streams=t;if(t.length===0)throw new Se("stream size 0");let a=t.map(r=>r.groupId);if(new Set(a).size!==1)throw new k("Stream does not have same group ID")}type="StreamGroup";static async new(e,t){let a=await fn(e.suiClient,t);return a.forEach(o=>{if(!o)throw new A("stream group object data undefined")}),n.newFromObjectResponse(e,t,a)}static async newFromObjectResponse(e,t,a){let o=await n.parseGroupStreams(e,t,a);return new n(e,o)}static checkStreamGroup(e){let t=e.map(r=>r.groupCommonInfo),a=t[0],o=!0;return t.forEach(r=>{xi(a,r)||(o=!1)}),o}async refresh(){let e=await fn(this.globals.suiClient,this.streams.map(t=>t.streamId));this.streams.forEach((t,a)=>{t.refreshWithData(e[a])})}get groupId(){return this.streams[0].groupId}get creator(){return this.streams[0].creator}get info(){return{groupId:this.groupId,streamIds:this.streams.map(e=>e.streamId),progress:this.progress,name:this.streams[0].name,creator:this.creator,coinType:this.streams[0].coinType,totalAmount:this.streams.reduce((e,t)=>e+t.totalAmount,0n),start:this.streams[0].timeStart,end:this.streams[0].timeEnd,cancelable:this.streams[0].cancelable,cliffAmount:this.streams.reduce((e,t)=>e+t.cliff,0n),duration:this.streams[0].duration,interval:this.streams[0].interval,steps:this.streams[0].totalSteps,nextReleaseAmount:this.streams.reduce((e,t)=>t.nextReleaseAmount===null?e:e+t.nextReleaseAmount,0n),nextReleaseDate:this.streams[0].nextReleaseDate}}get progress(){return{total:this.streams.reduce((e,t)=>e+t.totalAmount,0n),streamed:this.streams.reduce((e,t)=>e+t.streamedAmount,0n),claimed:this.streams.reduce((e,t)=>e+t.claimedAmount,0n),claimable:this.streams.reduce((e,t)=>e+t.claimable,0n),canceled:this.streams.reduce((e,t)=>e+t.canceledAmount,0n)}}async historyEvents(e){return this.globals.backend.getStreamHistory({groupId:this.groupId,pagination:e})}static async parseGroupStreams(e,t,a){let o=a.map((r,i)=>Z.fromObjectData(e,t[i],r)).filter(r=>!!r);if(new Set(o.map(r=>r.groupId)).size!==1)throw new Se("Not same group ID");if(!this.checkStreamGroup(o))throw new Se("Not same stream settings");return o}};function xi(n,e){return n.name===e.name&&n.groupId===e.groupId&&n.creator===e.creator&&n.start.toMillis()===e.start.toMillis()&&n.interval.toMillis()===e.interval.toMillis()&&n.steps===e.steps&&n.cancelable===e.cancelable}var Me=class n{constructor(e,t){this.it=e;this.pageSize=t}static async newIncoming(e){let t=await Bt.newIncoming(e);return new n(t,e.pageSize)}static async newOutgoing(e){let t=await Bt.newOutgoing(e);return new n(t,e.pageSize)}async hasNext(){return this.it.hasNext()}async next(){let e=[];for(;e.length<this.pageSize&&await this.it.hasNext();)e.push(await this.it.next());return e}},Bt=class n{constructor(e){this.requester=e}cachedNext;static async newIncoming(e){let t=await Mt.newIncomingQuery(e);return new n(t)}static async newOutgoing(e){let t=await Mt.newOutgoingQuery(e);return new n(t)}async hasNext(){return this.cachedNext===void 0&&(this.cachedNext=await this.requester.doNextRequest()),this.cachedNext!==null}async next(){if(this.cachedNext===void 0){let t=await this.requester.doNextRequest();if(t===null)throw new A("No more results");return t}let e=this.cachedNext;if(this.cachedNext=void 0,e===null)throw new A("No more results");return e}},Mt=class n{constructor(e,t,a,o){this.globals=e;this.recipient=t;this.groupRefs=a;this.query=o;this.current=0;let r=new Ne(a.flat().map(i=>i.streamId));this.objectIter=new Be(e.suiClient,r)}current=0;objectIter;static async newIncomingQuery(e){let t=Di(e.query),a=await e.globals.walletAddress(),r=(await e.globals.backend.getIncomingStreams(a,t)).filter(s=>Nt(s.recipient)===Nt(a)),i=xo(r);return new n(e.globals,a,i,e.query)}static async newOutgoingQuery(e){let t=_i(e.query),a=await e.globals.walletAddress(),o=await e.globals.backend.getOutgoingStreams(a,t),r=xo(o);return new n(e.globals,a,r,e.query)}async doNextRequest(){if(this.current>=this.groupRefs.length)return null;let e=this.groupRefs[this.current];if(e.length===1){let t=await Oi(this.globals,e[0].streamId,this.objectIter);return this.current++,vo(t,this.query)?t:this.doNextRequest()}if(e.length>1){let t=await Pi(this.globals,e.map(a=>a.streamId),this.objectIter);return this.current++,Ai(t,this.query)?t:this.doNextRequest()}throw new A("Stream group with no stream")}};function xo(n){let e=new Map;return n.forEach(t=>{let a=e.get(t.groupId);a?(a.push(t),e.set(t.groupId,a)):e.set(t.groupId,[t])}),Array.from(e.values()).sort((t,a)=>ko.fromISO(a[0].createDate).toMillis()-ko.fromISO(t[0].createDate).toMillis())}function vo(n,e){if(e===void 0)return!0;let t=vi(n,e.status);if(e&&"claimable"in e&&e.claimable!==void 0){let a=e.claimable?n.progress.claimable!==0n:n.progress.claimable===0n;return t&&a}return t}function vi(n,e){return e===void 0?!0:Array.isArray(e)?e.includes(n.progress.status):n.progress.status===e}function Ai(n,e){if(!e)return!0;let t=!1;return n.streams.forEach(a=>{vo(a,e)&&(t=!0)}),t}async function Oi(n,e,t){let a=await Ao(t,e);return Z.fromObjectData(n,e,a)}async function Pi(n,e,t){let a=[];for(;a.length<e.length;){let o=await Ao(t,e[a.length]);a.push(o)}return Rt.newFromObjectResponse(n,e,a)}async function Ao(n,e){if(!await n.hasNext())throw new A("object iterator has been consumed");let t=await n.next();if(!t||t.error||t.data===void 0||t.data===null)throw new A("object iterator undefined response",{cause:t?.error});if(t?.data?.objectId!==e)throw new A("stream id not aligned");return t}function Di(n){return{status:gn(n?.status),coinType:Oo(n?.coinType),sender:Po(n?.sender)}}function _i(n){return{status:gn(n?.status),coinType:Oo(n?.coinType),recipient:Po(n?.recipient)}}function gn(n){return n===void 0||n.length===0?"all":Array.isArray(n)?n.reduce((e,t)=>{let a=gn(t);return!e||e===a?a:"all"},void 0):ji(n)}function ji(n){switch(n){case"STREAMING":case"STREAMED":case"CANCELED":return"active";case"COMPLETED":case"SETTLED":return"inactive";default:throw new k("Unknown stream filtered status")}}function Oo(n){if(n)return Array.isArray(n)?n.length!==0?n.map(e=>To(e)):void 0:To(n)}function Po(n){if(n)return Array.isArray(n)?n.length!==0?n.map(e=>Nt(e)):void 0:Nt(n)}var hn=class{constructor(e){this.msafe=e}get type(){return"msafe"}async address(){return this.msafe.address()}async requestCoins(e){return this.msafe.requestCoins(e)}},Et=class{constructor(e){this.account=e}async address(){return this.account.address}},yn=class{constructor(e,t){this.singleWallet=e;this.suiClient=t}get type(){return"single"}async address(){return this.singleWallet.address()}async requestCoins(e){return Promise.all(e.map(t=>this.requestCoin(t)))}async requestCoin(e){if(Tt(e.coinType,Ri))return{primaryCoin:kt};if(e.amount<=0)throw new k("Invalid coin request","coinAmount",e.amount);let t=await So(this.suiClient,await this.address(),e.amount,e.coinType);if(t.length===0)throw new A("no coins available");return{primaryCoin:t[0].coinObjectId,mergedCoins:t.slice(1).map(a=>a.coinObjectId)}}},Lt=class{globals;helper;constructor(e,t){this.globals=be.new(e,t),this.helper=new jt(this.globals)}connectSingleWallet(e){let t=new yn(e,this.globals.suiClient);this.globals.connectWallet(t)}connectMSafeAccount(e){let t=new hn(e);this.globals.connectWallet(t)}async createStream(e){return this.builder().createStreams(e)}async getStream(e){return Z.new(this.globals,e)}async getIncomingStreams(e,t=10){return Me.newIncoming({globals:this.globals,query:e,pageSize:t})}async getOutgoingStreams(e,t=10){return Me.newOutgoing({globals:this.globals,query:e,pageSize:t})}async getCoinTypesForStreamFilter(){let e=await this.wallet.address();return(await this.globals.backend.getAllCoinTypes(e)).map(a=>Ni(a))}async getRecipientsForStreamFilter(e){let t=await this.wallet.address();return(await this.globals.backend.getAllRecipients(t,e)).map(o=>Do(o))}async getCreatorsForStreamFilter(e){let t=await this.wallet.address();return(await this.globals.backend.getAllSenders(t,e)).map(o=>Do(o))}get wallet(){return this.globals.wallet}builder(){return new he(this.globals)}};import Bi from"sort-keys-recursive";var Wt=class{constructor(e){this.data=e}serialize(){return JSON.stringify(Bi(this.data))}};var B=class extends Wt{application="mpay";getClient(e,t){let a=new Lt(e==="sui:mainnet"?"prod":"dev");return a.connectSingleWallet(new Et(t)),a}};var Ee=class extends B{constructor(t){super(t);this.data=t}txType=Ei.Stream;txSubType="Cancel";async build(t){let{network:a,account:o}=t;return(await this.getClient(a,o).getStream(this.data.streamId)).cancel()}};import{TransactionType as Li}from"@msafe/sui3-utils";var Le=class extends B{constructor(t){super(t);this.data=t}txType=Li.Stream;txSubType="ClaimByProxy";async build(t){let{network:a,account:o}=t;return(await this.getClient(a,o).getStream(this.data.streamId)).claimByProxy()}};import{TransactionType as Wi}from"@msafe/sui3-utils";var We=class extends B{constructor(t){super(t);this.data=t}txType=Wi.Stream;txSubType="Claim";async build(t){let{network:a,account:o}=t;return(await this.getClient(a,o).getStream(this.data.streamId)).claim()}};import{TransactionType as Ui}from"@msafe/sui3-utils";var Ue=class extends B{constructor(t){super(t);this.data=t}txType=Ui.Stream;txSubType="CreateStream";async build(t){let{network:a,account:o}=t;return this.getClient(a,o).createStream(this.data)}};import{bcs as _o}from"@mysten/sui.js/bcs";import{normalizeStructTag as Fi,normalizeSuiAddress as Fe}from"@mysten/sui.js/utils";var we=class n{constructor(e,t){this.moveCall=e;this.txb=t}decodeSharedObjectId(e){let t=this.getInputParam(e);return n.getSharedObjectId(t)}decodeOwnedObjectId(e){let t=this.getInputParam(e);return n.getOwnedObjectId(t)}decodeInputU64(e){let t=this.decodePureArg(e,"u64");return BigInt(t)}decodeInputAddress(e){let t=this.decodePureArg(e,"address");return Fe(t)}decodeInputString(e){return this.decodePureArg(e,"string")}decodeInputBool(e){return this.decodePureArg(e,"bool")}decodePureArg(e,t){let a=this.getInputParam(e);return n.getPureInputValue(a,t)}getInputParam(e){let t=this.moveCall.arguments[e];if(t.kind!=="Input")throw new Error("not input type");return this.txb.blockData.inputs[t.index]}static getPureInputValue(e,t){if(e.type!=="pure")throw new Error("not pure argument");if(typeof e.value=="object"&&"Pure"in e.value){let a=e.value.Pure;return _o.de(t,new Uint8Array(a))}return e.value}static getOwnedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value=="object"){if(!("Object"in e.value)||!("ImmOrOwned"in e.value.Object))throw new Error("not ImmOrOwned");return Fe(e.value.Object.ImmOrOwned.objectId)}return Fe(e.value)}static getSharedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value!="object")return Fe(e.value);if(!("Object"in e.value)||!("Shared"in e.value.Object))throw new Error("not Shared");return Fe(e.value.Object.Shared.objectId)}static getPureInput(e,t){if(e.type!=="pure")throw new Error("not pure argument");if(typeof e.value!="object")return e.value;if(!("Pure"in e.value))throw new Error("Pure not in value");let a=e.value.Pure;return _o.de(t,new Uint8Array(a))}typeArg(e){return Fi(this.moveCall.typeArguments[e])}txArg(e){return this.moveCall.arguments[e]}};var Ut=class{constructor(e,t){this.globals=e;this.txb=t}decode(){let e=this.decodeCreateStreamInfo(),t=this.createStreamHelper().calculateCreateStreamFees(e);return{type:"CreateStream",info:e,fees:t}}decodeCreateStreamInfo(){let t=this.createStreamTransactions().map(a=>this.getCreationInfoFromMoveCall(a));return this.aggregateGroupStreamInfo(t)}createStreamTransactions(){let e=this.transactions.filter(t=>t.kind==="MoveCall"&&Y(t.target,this.contract.createStreamTarget));if(e.length===0)throw new A("No create stream transactions");return e.map(t=>new we(t,this.txb))}getCreationInfoFromMoveCall(e){let t=e.decodeInputString(4),{name:a,groupId:o}=_e(t),r=e.decodeInputAddress(5),i=e.decodeInputU64(6),s=e.decodeInputU64(7),c=e.decodeInputU64(8),l=e.decodeInputU64(9),d=e.decodeInputU64(10),p=e.decodeInputBool(11),m=e.typeArg(0);return{name:a,groupId:o,recipient:r,timeStart:i,cliff:s,epochInterval:c,totalEpoch:l,amountPerEpoch:d,cancelable:p,coinType:m}}aggregateGroupStreamInfo(e){if(new Set(e.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 k("Stream group not have common info");let a=e.map(o=>({address:o.recipient,amountPerStep:o.amountPerEpoch,cliffAmount:o.cliff}));return{name:e[0].name,coinType:e[0].coinType,recipients:a,interval:e[0].epochInterval,steps:e[0].totalEpoch,startTimeMs:e[0].timeStart,cancelable:e[0].cancelable}}mergeCoinTransactions(){return this.transactions.filter(e=>e.kind==="MergeCoins")}get transactions(){return this.txb.blockData.transactions}get contract(){return new q(this.globals.envConfig.contract,this.globals)}get feeContract(){return new ge(this.globals.envConfig.contract,this.globals)}createStreamHelper(){return new ie(this.globals,this.feeContract,this.contract)}getInputArg(e){if(e.kind!=="Input")throw new Error("not input type");return"value"in e?e:this.txb.blockData.inputs[e.index]}};var Ft=class{constructor(e,t){this.globals=e;this.txb=t;this.contract=new q(e.envConfig.contract,e)}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(t=>t.kind==="MoveCall"&&Y(t.target,this.contract.createStreamTarget))!==-1}isSetAutoClaimTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&&Y(this.transactions[0].target,this.contract.setAutoClaimTarget)}isCancelStreamTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&&Y(this.transactions[0].target,this.contract.cancelStreamTarget)}isClaimStreamTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&&Y(this.transactions[0].target,this.contract.claimStreamTarget)}isClaimByProxyTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&&Y(this.transactions[0].target,this.contract.claimStreamByProxyTarget)}decodeCreateStreamTransaction(){return new Ut(this.globals,this.txb).decode()}decodeSetAutoClaimTransaction(){let e=this.helper.decodeSharedObjectId(0),t=this.helper.decodeInputBool(1);return{type:"SetAutoClaim",streamId:e,enabled:t}}decodeClaimTransaction(){let e=this.helper.decodeSharedObjectId(0);return{type:"Claim",streamId:e}}decodeClaimByProxyTransaction(){let e=this.helper.decodeSharedObjectId(0);return{type:"ClaimByProxy",streamId:e}}decodeCancelStreamTransaction(){let e=this.helper.decodeSharedObjectId(0);return{type:"Cancel",streamId:e}}get helper(){let e=this.transactions[0];return new we(e,this.txb)}};import{TransactionType as qi}from"@msafe/sui3-utils";var qe=class extends B{constructor(t){super(t);this.data=t}txType=qi.Stream;txSubType="SetAutoClaim";async build(t){let{network:a,account:o}=t;return(await this.getClient(a,o).getStream(this.data.streamId)).setAutoClaim(this.data.enabled)}};var qt=class{application="mpay";async deserialize(e){let{network:t,transactionBlock:a}=e,o=be.new(t==="sui:mainnet"?"prod":"dev"),i=new Ft(o,a).decode(),s;switch(i.type){case"CreateStream":s=new Ue(i.info);break;case"SetAutoClaim":s=new qe({streamId:i.streamId,enabled:i.enabled});break;case"Claim":s=new We({streamId:i.streamId});break;case"ClaimByProxy":s=new Le({streamId:i.streamId});break;case"Cancel":s=new Ee({streamId:i.streamId});break;default:throw new Error(`Unknown transaction type: ${i}`)}return{txType:s.txType,txSubType:s.txSubType,intentionData:s.data}}async build(e){let{intentionData:t}=e,a;switch(e.txSubType){case"CreateStream":a=new Ue(t);break;case"Claim":a=new We(t);break;case"ClaimByProxy":a=new Le(t);break;case"SetAutoClaim":a=new qe(t);break;case"Cancel":a=new Ee(t);break;default:throw new Error("not implemented")}return a.build({...e})}};import{TransactionDefaultApplication as Ki,TransactionSubTypes as Sn}from"@msafe/sui3-utils";import{buildCoinTransferTxb as $i}from"@msafe/sui3-utils";var $t=class n extends u{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:a,account:o}=t;return $i(a,this.data,o.address)}static fromData(t){return new n(t)}};import{buildObjectTransferTxb as Vi}from"@msafe/sui3-utils";var Vt=class n extends u{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:a,account:o}=t;return Vi(a,this.data,o.address)}static fromData(t){return new n(t)}};import{isSameAddress as Qi}from"@msafe/sui3-utils";import{TransactionBlock as Gi}from"@mysten/sui.js/transactions";var Qt=class n extends u{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{account:a}=t,o=Gi.from(this.data.content);if(!Qi(o.blockData.sender,a.address))throw new Error("Invalid sender address");return o}static fromData(t){return new n(t)}};var Gt=class{application;constructor(){this.application=Ki}deserialize(){throw new Error("MSafe core transaction intention should be build from API")}async build(e){let{suiClient:t,account:a}=e,o;switch(e.txSubType){case Sn.assets.coin.send:o=$t.fromData(e.intentionData);break;case Sn.assets.object.send:o=Vt.fromData(e.intentionData);break;case Sn.others.plain:o=Qt.fromData(e.intentionData);break;default:throw new Error("not implemented")}return o.build({suiClient:t,account:a})}};import{TransactionType as as}from"@msafe/sui3-utils";import{TransactionType as $e}from"@msafe/sui3-utils";import{bcs as jo}from"@mysten/sui.js/bcs";import{normalizeStructTag as Ji,normalizeSuiAddress as Ve}from"@mysten/sui.js/utils";var Hi={ProtocolPackage:"0x7c9b90b3fda0fa4aa8ee88ae6c4a0b83c773f74936b5354448cb94662e94442d",StorageId:"0xbb4e2f4b6205c2e2a2db47aeb4f830796ec7c005f88537ee775986639bc442fe",Incentive:"0xaaf735bf83ff564e1b219a0d644de894ef5bdc4b2250b126b2a46dd002331821",IncentiveV2:"0xf87a8acb8b81d14307894d12595541a73f19933f88e1326d5be349c7a6f7559c",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"},usdc:{name:"USDC",assetId:1,coinType:"usdc",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"}}},g=Hi;var Kt=class{constructor(e){this.txb=e}decode(){if(console.log("txb",this.txb),this.isClaimRewardTransaction())return this.decodeClaimReward();if(this.isEntryBorrowTransaction())return this.decodeEntryBorrow();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(e){return this.transactions.find(t=>t.kind==="MoveCall"&&t.target===e)}isClaimRewardTransaction(){return!!this.getMoveCallTransaction(`${g.ProtocolPackage}::incentive_v2::claim_reward`)}isEntryBorrowTransaction(){return!!this.getMoveCallTransaction(`${g.ProtocolPackage}::incentive_v2::entry_borrow`)}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(e){let t=Object.values(g.pool).find(a=>a.assetId===e);if(!t)throw new Error("Pool not found");return t}decodeClaimReward(){let e=[];return this.transactions.forEach(t=>{if(t.kind==="MoveCall"&&t.target===`${g.ProtocolPackage}::incentive_v2::claim_reward`){let a=new Ht(t,this.txb),o=a.decodeInputU8(4),r=a.decodeInputU8(5),i=a.decodeSharedObjectId(2),s=this.findPoolByAssetId(o),c=[...t.typeArguments];e.push({coinType:s.coinType,option:r,typeArguments:c,assetId:o,poolId:i})}}),console.log("decode claims",e),{txType:$e.Other,type:"ClaimReward",intentionData:{claims:e}}}decodeEntryBorrow(){let e=this.helper.decodeInputU8(4),t=this.helper.decodeInputU64(5),a=this.findPoolByAssetId(e);return{txType:$e.Other,type:"EntryBorrow",intentionData:{amount:t,coinType:a.coinType}}}decodeEntryDeposit(){let e=this.helper.decodeInputU8(3),t=this.helper.decodeInputU64(5),a=this.findPoolByAssetId(e);return{txType:$e.Other,type:"EntryDeposit",intentionData:{amount:t,coinType:a.coinType}}}decodeEntryRepay(){let e=this.helper.decodeInputU8(4),t=this.helper.decodeInputU64(6),a=this.findPoolByAssetId(e);return{txType:$e.Other,type:"EntryRepay",intentionData:{amount:t,coinType:a.coinType}}}decodeEntryWithdraw(){let e=this.helper.decodeInputU8(4),t=this.helper.decodeInputU64(5),a=this.findPoolByAssetId(e);return{txType:$e.Other,type:"EntryWithdraw",intentionData:{amount:t,coinType:a.coinType}}}get helper(){let e=this.transactions.find(t=>t.kind==="MoveCall"&&t.target.startsWith(g.ProtocolPackage));return new Ht(e,this.txb)}},Ht=class n{constructor(e,t){this.moveCall=e;this.txb=t}decodeSharedObjectId(e){let t=this.getInputParam(e);return n.getSharedObjectId(t)}decodeOwnedObjectId(e){let t=this.getInputParam(e);return n.getOwnedObjectId(t)}decodeInputU64(e){let t=this.decodePureArg(e,"u64");return Number(t)}decodeInputU8(e){let t=this.decodePureArg(e,"u8");return Number(t)}decodeInputAddress(e){let t=this.decodePureArg(e,"address");return Ve(t)}decodeInputString(e){return this.decodePureArg(e,"string")}decodeInputBool(e){return this.decodePureArg(e,"bool")}decodePureArg(e,t){let a=this.getInputParam(e);return n.getPureInputValue(a,t)}getInputParam(e){let t=this.moveCall.arguments[e];if(t.kind!=="Input")throw new Error("not input type");return this.txb.blockData.inputs[t.index]}static getPureInputValue(e,t){if(e.type!=="pure")throw new Error("not pure argument");if(typeof e.value=="object"&&"Pure"in e.value){let a=e.value.Pure;return jo.de(t,new Uint8Array(a))}return e.value}static getOwnedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value=="object"){if(!("Object"in e.value)||!("ImmOrOwned"in e.value.Object))throw new Error("not ImmOrOwned");return Ve(e.value.Object.ImmOrOwned.objectId)}return Ve(e.value)}static getSharedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value!="object")return Ve(e.value);if(!("Object"in e.value)||!("Shared"in e.value.Object))throw new Error("not Shared");return Ve(e.value.Object.Shared.objectId)}static getPureInput(e,t){if(e.type!=="pure")throw new Error("not pure argument");if(typeof e.value!="object")return e.value;if(!("Pure"in e.value))throw new Error("Pure not in value");let a=e.value.Pure;return jo.de(t,new Uint8Array(a))}typeArg(e){return Ji(this.moveCall.typeArguments[e])}txArg(e){return this.moveCall.arguments[e]}};import{TransactionBlock as Xi}from"@mysten/sui.js/transactions";function wn(n,e,t,a){return n.moveCall({target:`${g.ProtocolPackage}::incentive_v2::entry_deposit`,arguments:[n.object("0x06"),n.object(g.StorageId),n.object(e.poolId),n.pure(e.assetId),t,n.pure(a),n.object(g.Incentive),n.object(g.IncentiveV2)],typeArguments:[e.type]}),n}function Ro(n,e,t){return n.moveCall({target:`${g.ProtocolPackage}::incentive_v2::entry_withdraw`,arguments:[n.object("0x06"),n.object(g.PriceOracle),n.object(g.StorageId),n.object(e.poolId),n.pure(e.assetId),n.pure(t),n.object(g.Incentive),n.object(g.IncentiveV2)],typeArguments:[e.type]}),n}function No(n,e,t){return n.moveCall({target:`${g.ProtocolPackage}::incentive_v2::entry_borrow`,arguments:[n.object("0x06"),n.object(g.PriceOracle),n.object(g.StorageId),n.object(e.poolId),n.pure(e.assetId),n.pure(t),n.object(g.IncentiveV2)],typeArguments:[e.type]}),n}function Cn(n,e,t,a){return n.moveCall({target:`${g.ProtocolPackage}::incentive_v2::entry_repay`,arguments:[n.object("0x06"),n.object(g.PriceOracle),n.object(g.StorageId),n.object(e.poolId),n.pure(e.assetId),t,n.pure(a),n.object(g.IncentiveV2)],typeArguments:[e.type]}),n}function Bo(n,e,t,a,o){return n.moveCall({target:`${g.ProtocolPackage}::incentive_v2::claim_reward`,arguments:[n.object("0x06"),n.object(g.IncentiveV2),n.object(t),n.object(g.StorageId),n.pure(e),n.pure(a)],typeArguments:o}),n}var zt=class n extends u{constructor(t){super(t);this.data=t}txType;txSubType;async build(){let{claims:t}=this.data,a=new Xi;return t.forEach(o=>{let{assetId:r,poolId:i,option:s,typeArguments:c}=o;Bo(a,r,i,s,c)}),a}static fromData(t){return new n(t)}};import{TransactionBlock as Yi}from"@mysten/sui.js/transactions";var Jt=class n extends u{constructor(t){super(t);this.data=t}txType;txSubType;async build(){let{coinType:t,amount:a}=this.data,o=new Yi;console.log("build",this.data);let r=g.pool[t];if(!r)throw new Error(`${t} not support, please use ${Object.keys(g.pool).join(", ")}.`);return No(o,r,a)}static fromData(t){return new n(t)}};import{TransactionBlock as Zi}from"@mysten/sui.js/transactions";async function Xt(n,e,t){let a=await n.getCoins({owner:e,coinType:t});return console.log("getTokenObjs",e,a),a}var Yt=class n extends u{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:a,account:o}=t,{coinType:r,amount:i}=this.data,s=new Zi;if(console.log("build",this.data),r==="sui"){let[p]=s.splitCoins(s.gas,[i]);return wn(s,g.pool.sui,p,i)}let c=g.pool[r];if(!c)throw new Error(`${r} not support, please use ${Object.keys(g.pool).join(", ")}.`);let l=await Xt(a,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 p=1;for(;p<l.data.length;)s.mergeCoins(d,[l.data[p].coinObjectId]),p++}return wn(s,c,s.object(d),i)}static fromData(t){return new n(t)}};import{TransactionBlock as es}from"@mysten/sui.js/transactions";var Zt=class n extends u{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let{suiClient:a,account:o}=t,{coinType:r,amount:i}=this.data,s=new es;if(console.log("build",this.data),r==="sui"){let[p]=s.splitCoins(s.gas,[i]);return Cn(s,g.pool.sui,p,i)}let c=g.pool[r];if(!c)throw new Error(`${r} not support, please use ${Object.keys(g.pool).join(", ")}.`);let l=await Xt(a,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 p=1;for(;p<l.data.length;)s.mergeCoins(d,[l.data[p].coinObjectId]),p++}return Cn(s,c,s.object(d),i)}static fromData(t){return new n(t)}};import{TransactionBlock as ts}from"@mysten/sui.js/transactions";var ea=class n extends u{constructor(t){super(t);this.data=t}txType;txSubType;async build(){let{coinType:t,amount:a}=this.data,o=new ts;console.log("build",this.data);let r=g.pool[t];if(!r)throw new Error(`${t} not support, please use ${Object.keys(g.pool).join(", ")}.`);return Ro(o,r,a)}static fromData(t){return new n(t)}};var ta=class{application="navi";async deserialize(e){let{transactionBlock:t}=e,o=new Kt(t).decode();return{txType:as.Other,txSubType:o.type,intentionData:o.intentionData}}async build(e){let{suiClient:t,account:a}=e,o;switch(e.txSubType){case"EntryDeposit":o=Yt.fromData(e.intentionData);break;case"EntryBorrow":o=Jt.fromData(e.intentionData);break;case"EntryRepay":o=Zt.fromData(e.intentionData);break;case"EntryWithdraw":o=ea.fromData(e.intentionData);break;case"ClaimReward":o=zt.fromData(e.intentionData);break;default:throw new Error("not implemented")}return o.build({suiClient:t,account:a})}};import{TransactionSubTypes as ns,TransactionType as os}from"@msafe/sui3-utils";import{TransactionBlock as rs}from"@mysten/sui.js/transactions";import{fromHEX as is,toHEX as ss}from"@mysten/sui.js/utils";import ph from"sort-keys-recursive";var cs="msafe-plain-tx",ds=ns.others.plain;var aa=class{application;constructor(){this.application=cs}async deserialize(e){let{transactionBlock:t,suiClient:a}=e,o=await t.build({client:a});return{txType:os.Other,txSubType:ds,intentionData:{content:ss(o)}}}async build(e){let{suiClient:t,account:a}=e,o=rs.from(is(e.intentionData.content)),r=await t.devInspectTransactionBlock({transactionBlock:o,sender:a.address});if(!(r.effects.status.status==="success"))throw new Error(r.effects.status.error);return o}};var na=class{apps;constructor(e){this.apps=new Map(e.map(t=>[t.application,t]))}getAppHelper(e){let t=this.apps.get(e);if(!t)throw new Error(`${e} not registered`);return t}};import{TransactionType as Ms}from"@msafe/sui3-utils";import{TransactionType as O}from"@msafe/sui3-utils";import{bcs as Tn}from"@mysten/sui.js/bcs";import{normalizeStructTag as us,normalizeSuiAddress as Ge}from"@mysten/sui.js/utils";var ee="6601955b8b0024600a917079",oa="0xefe8b36d5b2e43728cc323298626b83177803521d195cfb11e15b910e892fddf";var Ce="0xc63072e7f5f4983a2efaf5bdba1480d5e7d74d57948e1c7cc436f8e22cbeb410",te="0x7016aae72cfc67f2fadf55769c0a7dd54291a583b63051a5ed71081cce836ac6::sca::SCA",ce=["eth","btc","usdc","usdt","sui","apt","sol","cetus","afsui","hasui","vsui","sca"],ra=["eth","btc","usdc","usdt","sui","apt","sol","cetus","afsui","hasui","vsui","sca"],Qe=["seth","ssui","susdc","susdt","scetus","safsui","shasui","svsui"],Mo=["sui"],Ie=["sui","usdc","usdt"];var Eo={eth:8,btc:8,usdc:6,usdt:6,sui:9,apt:8,sol:8,sca:9,cetus:9,afsui:9,hasui:9,vsui:9,seth:8,sbtc:8,susdc:6,susdt:6,ssui:9,sapt:8,ssol:8,scetus:9,safsui:9,shasui:9,svsui:9,ssca:9};var ia={seth:"sui",ssui:"sui",susdc:"sui",susdt:"sui",scetus:"sui",safsui:"sui",shasui:"sui",svsui:"sui"},Lo={sui:["sui","sca"],usdc:["sui","sca"],usdt:["sui","sca"]},Wo={sui:"0x0000000000000000000000000000000000000000000000000000000000000002",eth:"0xaf8cd5edc19c4512f4259f0bee101a40d41ebed738ade5874359610ef8eeced5",btc:"0x027792d9fed7f9844eb4839566001bb6f6cb4804f66aa2da6fe1ee242d896881",usdc:"0x5d4b302506645c37ff133b98c4b50a5ae14841659738d6d733d59d0d217a93bf",usdt:"0xc060006111016b8a020ad5b33834984a437aaa7d3c74c18e09a95d48aceab08c",apt:"0x3a5143bb1196e3bcdfab6203d1683ae29edd26294fc8bfeafe4aaa9d2704df37",sol:"0xb7844e289a8410e50fb3ca48d69eb9cf29e27d223ef90353fe1bd8e27ff8f3f8",cetus:"0x06864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b",afsui:"0xf325ce1300e8dac124071d3152c5c5ee6174914f8bc2161e88329cf579246efc",hasui:"0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d",vsui:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55",sca:"0x7016aae72cfc67f2fadf55769c0a7dd54291a583b63051a5ed71081cce836ac6"},R={eth:"0xaf8cd5edc19c4512f4259f0bee101a40d41ebed738ade5874359610ef8eeced5",btc:"0x027792d9fed7f9844eb4839566001bb6f6cb4804f66aa2da6fe1ee242d896881",usdc:"0x5d4b302506645c37ff133b98c4b50a5ae14841659738d6d733d59d0d217a93bf",usdt:"0xc060006111016b8a020ad5b33834984a437aaa7d3c74c18e09a95d48aceab08c",apt:"0x3a5143bb1196e3bcdfab6203d1683ae29edd26294fc8bfeafe4aaa9d2704df37",sol:"0xb7844e289a8410e50fb3ca48d69eb9cf29e27d223ef90353fe1bd8e27ff8f3f8"},In={vsui:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55"};var sa=class{constructor(e,t){this.txb=e;this._builder=t}_builder;decode(){if(this.isExtendPeriodAndStakeMoreSca())return this.decodePeriodAndStakeMoreSca();if(this.isStakeScaFirsTime()||this.isStakeMoreSca())return this.decodeStakeSca();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.isWithdrawLendingTransaction())return this.decodeWithdrawLending();if(this.isSupplyLendingTransaction())return this.decodeSupplyLending();if(this.isBorrowWithBoostTransaction())return this.decodeBorrowWithBoost();if(this.isBorrowTransaction())return this.decodeBorrow();if(this.isRepayTransaction())return this.decodeRepay();if(this.isUnstakeSpoolTransaction())return this.decodeUnstakeSpool();if(this.isClaimRewardTransaction())return this.decodeClaimReward();if(this.isRenewExpiredVeSca())return this.decodeRenewExpiredVeSca();if(this.isExtendPeriod())return this.decodeExtendStakePeriod();if(this.isOpenObligationTransaction())return this.decodeOpenObligation();if(this.isRedeemSca())return this.decodeRedeemSca();if(this.isMigrateAndClaim())return this.decodeMigrateAndClaim();throw new Error("Unknown transaction type")}get coreId(){return{protocolPkg:this._builder.address.get("core.packages.protocol.id"),market:this._builder.address.get("core.market"),version:this._builder.address.get("core.version"),coinDecimalsRegistry:this._builder.address.get("core.coinDecimalsRegistry"),xOracle:this._builder.address.get("core.oracles.xOracle"),spoolPkg:this._builder.address.get("spool.id"),borrowIncentivePkg:this._builder.address.get("borrowIncentive.id"),veScaPkgId:this._builder.address.get("vesca.id")}}get transactions(){return this.txb.blockData.transactions}get inputTransaction(){return this.txb.blockData.inputs}getMoveCallTransaction(e){return this.transactions.find(t=>t.kind==="MoveCall"&&t.target===e)}isSupplyLendingTransaction(){return!!this.getMoveCallTransaction(`${this.coreId.protocolPkg}::mint::mint`)}isSupplyWithStakeSpoolTransaction(){let e=this.getMoveCallTransaction(`${this.coreId.protocolPkg}::mint::mint`),t=this.getMoveCallTransaction(`${this.coreId.spoolPkg}::user::stake`);return!!e&&!!t}isUnstakeAndWithdrawTransaction(){let e=this.getMoveCallTransaction(`${this.coreId.spoolPkg}::user::unstake`),t=this.getMoveCallTransaction(`${this.coreId.protocolPkg}::redeem::redeem`);return!!e&&!!t}isStakeSpoolTransaction(){return!!this.getMoveCallTransaction(`${this.coreId.spoolPkg}::user::stake`)}isWithdrawLendingTransaction(){return!!this.getMoveCallTransaction(`${this.coreId.protocolPkg}::redeem::redeem`)}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 e=this.getMoveCallTransaction(`${this.coreId.protocolPkg}::borrow::borrow`),t=this.getMoveCallTransaction(`${this.coreId.borrowIncentivePkg}::user::stake_with_ve_sca`);return!!e&&!!t}isRepayTransaction(){return!!this.getMoveCallTransaction(`${this.coreId.protocolPkg}::repay::repay`)}isUnstakeSpoolTransaction(){return!!this.getMoveCallTransaction(`${this.coreId.spoolPkg}::user::unstake`)}isCreateStakeAccountTransaction(){return!!this.getMoveCallTransaction(`${this.coreId.spoolPkg}::user::new_spool_account`)}isClaimRewardTransaction(){let e=this.getMoveCallTransaction(`${this.coreId.spoolPkg}::user::redeem_rewards`),t=this.getMoveCallTransaction(`${this.coreId.borrowIncentivePkg}::user::redeem_rewards`);return!!e||!!t}isStakeScaFirsTime(){return!!this.getMoveCallTransaction(`${this.coreId.veScaPkgId}::ve_sca::mint_ve_sca_key`)}isExtendPeriodAndStakeMoreSca(){let e=this.getMoveCallTransaction(`${this.coreId.veScaPkgId}::ve_sca::extend_lock_period`),t=this.getMoveCallTransaction(`${this.coreId.veScaPkgId}::ve_sca::lock_more_sca`);return!!e&&!!t}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`)}isOpenObligationTransaction(){return!!this.getMoveCallTransaction(`${this.coreId.protocolPkg}::open_obligation::open_obligation_entry`)}isMigrateAndClaim(){let e=this.getMoveCallTransaction(`${Ce}::user::redeem_rewards`),t=this.getMoveCallTransaction(`${this.coreId.borrowIncentivePkg}::user::stake_with_ve_sca`);return!!e&&!!t}decodeMigrateAndClaim(){let e=this.helperStakeObligationWithVeSca.decodeOwnedObjectId(9),t=this.helperClaimBorrowReward[0].decodeSharedObjectId(2),a=this.helperClaimBorrowReward[0].decodeOwnedObjectId(3),o=this._builder.utils.parseCoinNameFromType(this.helperClaimBorrowReward[0].typeArg(0));return{txType:O.Other,type:"MigrateAndClaim",intentionData:{veScaKey:e,obligationKey:t,obligationId:a,rewardCoinName:o}}}decodeOpenObligation(){return{txType:O.Other,type:"OpenObligation",intentionData:{}}}decodeRedeemSca(){let e=this.helperRedeemSca.decodeOwnedObjectId(1);return{txType:O.Other,type:"RedeemSca",intentionData:{veScaKey:e}}}decodeRenewExpiredVeSca(){let e=this.helperRenewExpired.getNestedInputParam(4),t=this.helperRenewExpired.decodeInputU64(5),a=new M(e,this.txb).getAmountInput().reduce((f,y)=>f+y,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,p,m,b=[{condition:i,isOld:!0},{condition:s,isOld:!1},{condition:c,isOld:!1}];for(let f=0;f<b.length;f++)b[f].condition.length>1&&([m,p]=b[f].condition,l=!0,d=b[f].isOld);return{txType:O.Other,type:"RenewExpStakePeriod",intentionData:{amount:a,lockPeriodInDays:t,obligationId:p,obligationKey:m,veScaKey:o,isHaveRedeem:r,isObligationLocked:l,isOldBorrowIncentive:d}}}decodeExtendStakePeriod(){let e=this.helperExtendStakePeriod.decodeInputU64(4),t=this.helperExtendStakePeriod.decodeOwnedObjectId(1),a=[],o=[],r=[];this.helperOldUnstakeObligation.moveCall&&(a=[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:a,isOld:!0},{condition:o,isOld:!1},{condition:r,isOld:!1}];for(let p=0;p<d.length;p++)d[p].condition.length>1&&([l,c]=d[p].condition,i=!0,s=d[p].isOld);return{txType:O.Other,type:"ExtendStakePeriod",intentionData:{lockPeriodInDays:e,obligationId:c,obligationKey:l,veScaKey:t,isObligationLocked:i,isOldBorrowIncentive:s}}}decodePeriodAndStakeMoreSca(){let e=this.helperStakeMoreSca.getNestedInputParam(4),t=this.helperExtendStakePeriod.decodeInputU64(4),a=new M(e,this.txb).getAmountInput().reduce((b,f)=>b+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,p,m=[{condition:o,isOld:!0},{condition:r,isOld:!1},{condition:s,isOld:!1}];for(let b=0;b<m.length;b++)m[b].condition.length>1&&([p,d]=m[b].condition,c=!0,l=m[b].isOld);return{txType:O.Other,type:"ExtendPeriodAndStakeMore",intentionData:{amount:a,veScaKey:i,lockPeriodInDays:t,obligationId:d,obligationKey:p,isOldBorrowIncentive:l,isObligationLocked:c}}}decodeStakeSca(){let e,t;this.helperStakeSca.moveCall&&this.helperStakeMoreSca.moveCall===void 0?(e=this.helperStakeSca.getNestedInputParam(3),t=this.helperStakeSca.decodeInputU64(4)):(e=this.helperStakeMoreSca.getNestedInputParam(4),console.log(e));let a=new M(e,this.txb).getAmountInput().reduce((b,f)=>b+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,p,m=[{condition:o,isOld:!0},{condition:r,isOld:!1},{condition:s,isOld:!1}];for(let b=0;b<m.length;b++)m[b].condition.length>1&&([p,d]=m[b].condition,c=!0,l=m[b].isOld);return{txType:O.Other,type:"StakeSca",intentionData:{amount:a,lockPeriodInDays:t,obligationId:d,obligationKey:p,veScaKey:i,isObligationLocked:c,isOldBorrowIncentive:l}}}decodeSupplyLending(){let e=this._builder.utils.parseCoinNameFromType(this.helperMint.typeArg(0)),t=this.helperMint.getNestedInputParam(2),a=new M(t,this.txb).getAmountInput().reduce((o,r)=>o+r,0);return{txType:O.Other,type:"SupplyLending",intentionData:{amount:a,coinName:e}}}decodeWithdrawLending(){let e=this._builder.utils.parseCoinNameFromType(this.helperRedeem.typeArg(0)),t=this.helperRedeem.getNestedInputParam(2),a=new M(t,this.txb).getAmountInput().reduce((o,r)=>o+r,0);return{txType:O.Other,type:"WithdrawLending",intentionData:{amount:a,coinName:e}}}decodeDepositCollateral(){let e=this._builder.utils.parseCoinNameFromType(this.helperDepositCollateral.typeArg(0)),t=this.helperDepositCollateral.getNestedInputParam(3),a=new M(t,this.txb).getAmountInput().reduce((r,i)=>r+i,0),o=this.helperDepositCollateral.decodeSharedObjectId(1);return{txType:O.Other,type:"DepositCollateral",intentionData:{amount:a,obligationId:o,collateralCoinName:e}}}decodeWithdrawCollateral(){let e=this._builder.utils.parseCoinNameFromType(this.helperWithdrawCollateral.typeArg(0)),t=this.helperWithdrawCollateral.decodeInputU64(5),a=this.helperWithdrawCollateral.decodeSharedObjectId(1),o=this.helperWithdrawCollateral.decodeOwnedObjectId(2);return{txType:O.Other,type:"WithdrawCollateral",intentionData:{amount:t,collateralCoinName:e,obligationKey:o,obligationId:a}}}decodeBorrow(){let e=this._builder.utils.parseCoinNameFromType(this.helperBorrow.typeArg(0)),t=this.helperBorrow.decodeInputU64(5),a=this.helperBorrow.decodeSharedObjectId(1),o=this.helperBorrow.decodeOwnedObjectId(2);return{txType:O.Other,type:"Borrow",intentionData:{amount:t,coinName:e,obligationKey:o,obligationId:a}}}decodeBorrowWithBoost(){let e=this._builder.utils.parseCoinNameFromType(this.helperBorrow.typeArg(0)),t=this.helperStakeObligationWithVeSca.decodeOwnedObjectId(9),a=this.helperBorrow.decodeInputU64(5),o=this.helperBorrow.decodeSharedObjectId(1),r=this.helperBorrow.decodeOwnedObjectId(2);return{txType:O.Other,type:"BorrowWithBoost",intentionData:{amount:a,coinName:e,obligationKey:r,obligationId:o,veScaKey:t}}}decodeRepay(){let e=this._builder.utils.parseCoinNameFromType(this.helperRepay.typeArg(0)),t=this.helperRepay.getNestedInputParam(3),a=new M(t,this.txb).getAmountInput().reduce((r,i)=>r+i,0),o=this.helperRepay.decodeSharedObjectId(1);return{txType:O.Other,type:"Repay",intentionData:{amount:a,obligationId:o,coinName:e}}}decodeStakeSpool(){let e;this.isCreateStakeAccountTransaction()||(e=this.helperStake.decodeOwnedObjectId(1));let t=this.helperStake.getNestedInputParam(2),a=new M(t,this.txb).getAmountInput().reduce((i,s)=>i+s,0),o=this.helperStake.typeArg(0),r=this._builder.utils.parseCoinNameFromType(o);return{txType:O.Other,type:"StakeSpool",intentionData:{amount:a,marketCoinName:r,stakeAccountId:e}}}decodeUnstakeSpool(){let e=this.helperUnstake.decodeOwnedObjectId(1),t=this.helperUnstake.decodeInputU64(2),a=this.helperUnstake.typeArg(0),o=this._builder.utils.parseCoinNameFromType(a);return{txType:O.Other,type:"UnstakeSpool",intentionData:{amount:t,marketCoinName:o,stakeAccountId:e}}}decodeSupplyWithStakeSpool(){let e=this._builder.utils.parseCoinNameFromType(this.helperMint.typeArg(0)),t=this.helperMint.getNestedInputParam(2),a=new M(t,this.txb).getAmountInput().reduce((r,i)=>r+i,0),o;return this.isCreateStakeAccountTransaction()||(o=this.helperStake.decodeOwnedObjectId(1)),{txType:O.Other,type:"SupplyAndStakeLending",intentionData:{amount:a,coinName:e,stakeAccountId:o}}}decodeUnstakeAndWithdraw(){let e=[];this.helperUnstakes.forEach(r=>{let i=r.decodeOwnedObjectId(1),s=r.decodeInputU64(2);e.push({id:i,coin:s})});let t=this._builder.utils.parseCoinNameFromType(this.helperRedeems[0].typeArg(0)),a=this.helperRedeems.find(r=>r.isHaveNestedInput(2)),o;return a&&(o=new M(a.getNestedInputParam(2),this.txb).getAmountInput().reduce((r,i)=>r+i,0)),{txType:O.Other,type:"WithdrawAndUnstakeLending",intentionData:{amount:o,coinName:t,stakeAccountId:e}}}decodeClaimReward(){let e=[],t=[],a=[];return this.helperClaimLendingReward.forEach(o=>{let r=o.decodeOwnedObjectId(2),i=o.typeArg(0),s=this._builder.utils.parseCoinNameFromType(i);e.push({stakeMarketCoinName:s,stakeAccountId:r})}),this.helperClaimBorrowV2Reward.forEach(o=>{let r=o.decodeSharedObjectId(3),i=o.decodeOwnedObjectId(4),s=this._builder.utils.parseCoinNameFromType(o.typeArg(0));t.push({obligationId:i,obligationKey:r,rewardCoinName:s})}),this.helperClaimBorrowReward.forEach(o=>{let r=o.decodeSharedObjectId(2),i=o.decodeOwnedObjectId(3),s=this._builder.utils.parseCoinNameFromType(o.typeArg(0));a.push({obligationId:i,obligationKey:r,rewardCoinName:s})}),{txType:O.Other,type:"ClaimIncentiveReward",intentionData:{lendingIncentive:e,borrowIncentiveV2:t,borrowIncentive:a}}}get helperClaimLendingReward(){return this.transactions.filter(t=>t.kind==="MoveCall"&&t.target.startsWith(`${this.coreId.spoolPkg}::user::redeem_rewards`)).map(t=>new C(t,this.txb))}get helperClaimBorrowV2Reward(){return this.transactions.filter(t=>t.kind==="MoveCall"&&t.target.startsWith(`${this.coreId.borrowIncentivePkg}::user::redeem_rewards`)).map(t=>new C(t,this.txb))}get helperStakeMoreSca(){let e=this.transactions.find(t=>t.kind==="MoveCall"&&t.target.startsWith(`${this.coreId.veScaPkgId}::ve_sca::lock_more_sca`));return new C(e,this.txb)}get helperStakeSca(){let e=this.transactions.find(t=>t.kind==="MoveCall"&&t.target.startsWith(`${this.coreId.veScaPkgId}::ve_sca::mint_ve_sca_key`));return new C(e,this.txb)}get helperExtendStakePeriod(){let e=this.transactions.find(t=>t.kind==="MoveCall"&&t.target.startsWith(`${this.coreId.veScaPkgId}::ve_sca::extend_lock_period`));return new C(e,this.txb)}get helperRedeemSca(){let e=this.transactions.find(t=>t.kind==="MoveCall"&&t.target.startsWith(`${this.coreId.veScaPkgId}::ve_sca::redeem`));return new C(e,this.txb)}get helperRenewExpired(){let e=this.transactions.find(t=>t.kind==="MoveCall"&&t.target.startsWith(`${this.coreId.veScaPkgId}::ve_sca::renew_expired_ve_sca`));return new C(e,this.txb)}get helperOldUnstakeObligation(){let e=this.transactions.find(t=>t.kind==="MoveCall"&&t.target.startsWith(`${Ce}::user::unstake`));return new C(e,this.txb)}get helperUnstakeObligation(){let e=this.transactions.find(t=>t.kind==="MoveCall"&&t.target.startsWith(`${this.coreId.borrowIncentivePkg}::user::unstake`));return new C(e,this.txb)}get helperStakeObligationWithVeSca(){let e=this.transactions.find(t=>t.kind==="MoveCall"&&t.target.startsWith(`${this.coreId.borrowIncentivePkg}::user::stake_with_ve_sca`));return new C(e,this.txb)}get helperClaimBorrowReward(){return this.transactions.filter(t=>t.kind==="MoveCall"&&t.target.startsWith(`${Ce}::user::redeem_rewards`)).map(t=>new C(t,this.txb))}get helperMint(){let e=this.transactions.find(t=>t.kind==="MoveCall"&&t.target.startsWith(`${this.coreId.protocolPkg}::mint::mint`));return new C(e,this.txb)}get helperUnstakes(){return this.transactions.filter(t=>t.kind==="MoveCall"&&t.target.startsWith(`${this.coreId.spoolPkg}::user::unstake`)).map(t=>new C(t,this.txb))}get helperRedeems(){return this.transactions.filter(t=>t.kind==="MoveCall"&&t.target.startsWith(`${this.coreId.protocolPkg}::redeem::redeem`)).map(t=>new C(t,this.txb))}get helperRedeem(){let e=this.transactions.find(t=>t.kind==="MoveCall"&&t.target.startsWith(`${this.coreId.protocolPkg}::redeem::redeem`));return new C(e,this.txb)}get helperStake(){let e=this.transactions.find(t=>t.kind==="MoveCall"&&t.target.startsWith(`${this.coreId.spoolPkg}::user::stake`));return new C(e,this.txb)}get helperUnstake(){let e=this.transactions.find(t=>t.kind==="MoveCall"&&t.target.startsWith(`${this.coreId.spoolPkg}::user::unstake`));return new C(e,this.txb)}get helperDepositCollateral(){let e=this.transactions.find(t=>t.kind==="MoveCall"&&t.target.startsWith(`${this.coreId.protocolPkg}::deposit_collateral::deposit_collateral`));return new C(e,this.txb)}get helperWithdrawCollateral(){let e=this.transactions.find(t=>t.kind==="MoveCall"&&t.target.startsWith(`${this.coreId.protocolPkg}::withdraw_collateral::withdraw_collateral`));return new C(e,this.txb)}get helperBorrow(){let e=this.transactions.find(t=>t.kind==="MoveCall"&&t.target.startsWith(`${this.coreId.protocolPkg}::borrow::borrow`));return new C(e,this.txb)}get helperRepay(){let e=this.transactions.find(t=>t.kind==="MoveCall"&&t.target.startsWith(`${this.coreId.protocolPkg}::repay::repay`));return new C(e,this.txb)}},M=class{constructor(e,t){this.splitCoin=e;this.txb=t}getAmountInput(){return this.splitCoin.amounts.map(e=>{if(e.kind==="Input")return Number(C.getPureInputValue(e,"u64"))}).filter(e=>e!==void 0)}static getPureInputValue(e,t){if(e.type!=="pure")throw new Error("not pure argument");if(typeof e.value=="object"&&"Pure"in e.value){let a=e.value.Pure;return Tn.de(t,new Uint8Array(a))}return e.value}},C=class n{constructor(e,t){this.moveCall=e;this.txb=t}decodeSharedObjectId(e){let t=this.getInputParam(e);return n.getSharedObjectId(t)}decodeOwnedObjectId(e){let t=this.getInputParam(e);return n.getOwnedObjectId(t)}decodeInputU64(e){let t=this.decodePureArg(e,"u64");return Number(t)}decodeInputU8(e){let t=this.decodePureArg(e,"u8");return Number(t)}decodeInputAddress(e){let t=this.decodePureArg(e,"address");return Ge(t)}decodeInputString(e){return this.decodePureArg(e,"string")}decodeInputBool(e){return this.decodePureArg(e,"bool")}decodePureArg(e,t){let a=this.getInputParam(e);return n.getPureInputValue(a,t)}getInputParam(e){let t=this.moveCall.arguments[e];if(t.kind!=="Input")throw new Error("not input type");return this.txb.blockData.inputs[t.index]}getNestedInputParam(e){let t=this.moveCall.arguments[e];if(t.kind!=="NestedResult")throw new Error("not input type");return this.txb.blockData.transactions[t.index]}isHaveNestedInput(e){return this.moveCall.arguments[e].kind==="NestedResult"}static getPureInputValue(e,t){if(e.type!=="pure")throw new Error("not pure argument");if(typeof e.value=="object"&&"Pure"in e.value){let a=e.value.Pure;return Tn.de(t,new Uint8Array(a))}return e.value}static getOwnedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value=="object"){if(!("Object"in e.value)||!("ImmOrOwned"in e.value.Object))throw new Error("not ImmOrOwned");return Ge(e.value.Object.ImmOrOwned.objectId)}return Ge(e.value)}static getSharedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value!="object")return Ge(e.value);if(!("Object"in e.value)||!("Shared"in e.value.Object))throw new Error("not Shared");return Ge(e.value.Object.Shared.objectId)}static getPureInput(e,t){if(e.type!=="pure")throw new Error("not pure argument");if(typeof e.value!="object")return e.value;if(!("Pure"in e.value))throw new Error("Pure not in value");let a=e.value.Pure;return Tn.de(t,new Uint8Array(a))}typeArg(e){return us(this.moveCall.typeArguments[e])}txArg(e){return this.moveCall.arguments[e]}};import{TransactionBlock as I}from"@mysten/sui.js/transactions";import{normalizeSuiAddress as Bs}from"@mysten/sui.js/utils";import cr from"bignumber.js";var Uo={mainnet:{core:{version:"0x07871c4b3c847a0f674510d4978d5cf6f960452795e8ff6f189fd2088a3f6ac7",versionCap:"0x590a4011cb649b3878f3ea14b3a78674642a9548d79b7e091ef679574b158a07",object:"0xefe8b36d5b2e43728cc323298626b83177803521d195cfb11e15b910e892fddf",market:"0xa757975255146dc9686aa823b7838b507f315d704f428cbadad2f4ea061939d9",adminCap:"0x09689d018e71c337d9db6d67cbca06b74ed92196103624028ccc3ecea411777c",coinDecimalsRegistry:"0x200abe9bf19751cc566ae35aa58e2b7e4ff688fc1130f8d8909ea09bc137d668",obligationAccessStore:"0x733e30b7c94d619d78cb8f5bc4bfbb759ced9a531239028caabb2474e5be59c9",coins:{cetus:{id:"0x06864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b",metaData:"0x4c0dce55eff2db5419bbd2d239d1aa22b4a400c01bbb648b058a9883989025da",treasury:"",oracle:{supra:"",switchboard:"",pyth:{feed:"e5b274b2611143df055d6e7cd8d93fe1961716bcd4dca1cad87a83bc1e78c1ef",feedObject:"0x24c0247fb22457a719efac7f670cdc79be321b521460bd6bd2ccfa9f80713b14"}}},apt:{id:"0x3a5143bb1196e3bcdfab6203d1683ae29edd26294fc8bfeafe4aaa9d2704df37",metaData:"0xc969c5251f372c0f34c32759f1d315cf1ea0ee5e4454b52aea08778eacfdd0a8",treasury:"",oracle:{supra:"",switchboard:"",pyth:{feed:"03ae4db29ed4ae33d323568895aa00337e658e348b37509f5372ae51f0af00d5",feedObject:"0x7c5b7837c44a69b469325463ac0673ac1aa8435ff44ddb4191c9ae380463647f"}}},sol:{id:"0xb7844e289a8410e50fb3ca48d69eb9cf29e27d223ef90353fe1bd8e27ff8f3f8",metaData:"0x4d2c39082b4477e3e79dc4562d939147ab90c42fc5f3e4acf03b94383cd69b6e",treasury:"",oracle:{supra:"",switchboard:"",pyth:{feed:"ef0d8b6fda2ceba41da15d4095d1da392a0d2f8ed0c6c7bc0f4cfac8c280b56d",feedObject:"0x9d0d275efbd37d8a8855f6f2c761fa5983293dd8ce202ee5196626de8fcd4469"}}},btc:{id:"0x027792d9fed7f9844eb4839566001bb6f6cb4804f66aa2da6fe1ee242d896881",metaData:"0x5d3c6e60eeff8a05b693b481539e7847dfe33013e7070cdcb387f5c0cac05dfd",treasury:"",oracle:{supra:"",switchboard:"",pyth:{feed:"e62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43",feedObject:"0x9a62b4863bdeaabdc9500fce769cf7e72d5585eeb28a6d26e4cafadc13f76ab2"}}},eth:{id:"0xaf8cd5edc19c4512f4259f0bee101a40d41ebed738ade5874359610ef8eeced5",metaData:"0x8900e4ceede3363bef086d6b50ca89d816d0e90bf6bc46efefe1f8455e08f50f",treasury:"",oracle:{supra:"",switchboard:"",pyth:{feed:"ff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace",feedObject:"0x9193fd47f9a0ab99b6e365a464c8a9ae30e6150fc37ed2a89c1586631f6fc4ab"}}},usdc:{id:"0x5d4b302506645c37ff133b98c4b50a5ae14841659738d6d733d59d0d217a93bf",metaData:"0x4fbf84f3029bd0c0b77164b587963be957f853eccf834a67bb9ecba6ec80f189",treasury:"",oracle:{supra:"",switchboard:"",pyth:{feed:"eaa020c61cc479712813461ce153894a96a6c00b21ed0cfc2798d1f9a9e9c94a",feedObject:"0x5dec622733a204ca27f5a90d8c2fad453cc6665186fd5dff13a83d0b6c9027ab"}}},usdt:{id:"0xc060006111016b8a020ad5b33834984a437aaa7d3c74c18e09a95d48aceab08c",metaData:"0xfb0e3eb97dd158a5ae979dddfa24348063843c5b20eb8381dd5fa7c93699e45c",treasury:"",oracle:{supra:"",switchboard:"",pyth:{feed:"2b89b9dc8fdf9f34709a5b106b472f0f39bb6ca9ce04b0fd7f2e971688e2e53b",feedObject:"0x985e3db9f93f76ee8bace7c3dd5cc676a096accd5d9e09e9ae0fb6e492b14572"}}},sui:{id:"0x0000000000000000000000000000000000000000000000000000000000000002",metaData:"0x9258181f5ceac8dbffb7030890243caed69a9599d2886d957a9cb7656af3bdb3",treasury:"",oracle:{supra:"",switchboard:"0xbca474133638352ba83ccf7b5c931d50f764b09550e16612c9f70f1e21f3f594",pyth:{feed:"23d7315113f5b1d3ba7a83604c44b94d79f4fd69af77f804fc7f920a6dc65744",feedObject:"0x801dbc2f0053d34734814b2d6df491ce7807a725fe9a01ad74a07e9c51396c37"}}},afsui:{id:"0xf325ce1300e8dac124071d3152c5c5ee6174914f8bc2161e88329cf579246efc",metaData:"0x2f9217f533e51334873a39b8026a4aa6919497b47f49d0986a4f1aec66f8a34d",treasury:"",oracle:{supra:"",switchboard:"",pyth:{feed:"23d7315113f5b1d3ba7a83604c44b94d79f4fd69af77f804fc7f920a6dc65744",feedObject:"0x801dbc2f0053d34734814b2d6df491ce7807a725fe9a01ad74a07e9c51396c37"}}},hasui:{id:"0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d",metaData:"0x2c5f33af93f6511df699aaaa5822d823aac6ed99d4a0de2a4a50b3afa0172e24",treasury:"",oracle:{supra:"",switchboard:"",pyth:{feed:"23d7315113f5b1d3ba7a83604c44b94d79f4fd69af77f804fc7f920a6dc65744",feedObject:"0x801dbc2f0053d34734814b2d6df491ce7807a725fe9a01ad74a07e9c51396c37"}}},vsui:{id:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55",metaData:"0xabd84a23467b33854ab25cf862006fd97479f8f6f53e50fe732c43a274d939bd",treasury:"",oracle:{supra:"",switchboard:"",pyth:{feed:"23d7315113f5b1d3ba7a83604c44b94d79f4fd69af77f804fc7f920a6dc65744",feedObject:"0x801dbc2f0053d34734814b2d6df491ce7807a725fe9a01ad74a07e9c51396c37"}}},sca:{id:"0x7016aae72cfc67f2fadf55769c0a7dd54291a583b63051a5ed71081cce836ac6",metaData:"0x5d26a1e9a55c88147ac870bfa31b729d7f49f8804b8b3adfdf3582d301cca844",treasury:"",oracle:{supra:"",switchboard:"",pyth:{feed:"7e17f0ac105abe9214deb9944c30264f5986bf292869c6bd8e8da3ccd92d79bc",feedObject:"0xf6de1d3279a269a597d813cbaca59aa906543ab9a8c64e84a4722f1a20863985"}}}},oracles:{xOracle:"0x93d5bf0936b71eb27255941e532fac33b5a5c7759e377b4923af0a1359ad494f",xOracleCap:"0x1edeae568fde99e090dbdec4bcdbd33a15f53a1ce1f87aeef1a560dedf4b4a90",supra:{registry:"",registryCap:"",holder:""},switchboard:{registry:"",registryCap:""},pyth:{registry:"0xedc293f9413a5a7a5d53bdba1fd889d0a4030894469228f0acdae4aa3c55a213",registryCap:"0xbcb07141eb1f7e01fbda4130ecf5f5adaeabb77f5d9c32158b7532bcd2197acd",state:"0x1f9310238ee9298fb703c3419030b35b22bb1cc37113e3bb5007c99aec79e5b8",wormhole:"0x5306f64e312b581766351c07af79c72fcb1cd25147157fdc2f8ad76de9a3fb6a",wormholeState:"0xaeab97f96cf9877fee2883315d459552b2b921edc16d7ceac6eab944dd88919c"}},packages:{coinDecimalsRegistry:{id:"0xca5a5a62f01c79a104bf4d31669e29daa387f325c241de4edbe30986a9bc8b0d",upgradeCap:"0x34e76a945d29f195bc53ca704fa70877d1cf3a5d7bbfdda1b13e633fff13c0f6"},math:{id:"0xad013d5fde39e15eabda32b3dbdafd67dac32b798ce63237c27a8f73339b9b6f",upgradeCap:"0x3a329598231de02e6135c62284b66005b41cad1d9ab7ca2dc79c08293aba2ec6"},whitelist:{id:"0x1318fdc90319ec9c24df1456d960a447521b0a658316155895014a6e39b5482f",upgradeCap:"0xf5a22aea23db664f7b69855b6a546747f17c1ec4230319cfc17225e462b05761"},x:{id:"0x779b5c547976899f5474f3a5bc0db36ddf4697ad7e5a901db0415c2281d28162",upgradeCap:"0x3f203f6fff6a69d151e4f1cd931f22b68c489ef2759765662fc7baf673943c9e"},protocol:{id:"0x38fe42a5a69f7eb3635404389e8003be9457b1a5c873f133184648c7e9bd47b7",upgradeCap:"0x38527d154618d1fd5a644b90717fe07cf0e9f26b46b63e9568e611a3f86d5c1a"},protocolWhitelist:{id:"0x4c262d9343dac53ecb28f482a2a3f62c73d0ebac5b5f03d57383d56ff219acdf",upgradeCap:"0x4a5e88a75039b00988f633f811f58117f31b8627a46bf822aa114d9010049449"},query:{id:"0xb8d603a39114a5efef3dd0bf84df0bed1be1fbd39b78b7dd6e8a61ccc5e6006f",upgradeCap:"0x0d535c35f608b9b01b7ccce11acf43b1dd80c1b72bf8b541744a6e28e8d2745f"},supra:{id:"",upgradeCap:""},pyth:{id:"0x910f30cbc7f601f75a5141a01265cd47c62d468707c5e1aecb32a18f448cb25a",upgradeCap:"0xdf0ffbae1ea5bb25fbca5efba433dcf00c7cced65679af2f04728901275c6157"},switchboard:{id:"",upgradeCap:""},xOracle:{id:"0x1478a432123e4b3d61878b629f2c692969fdb375644f1251cd278a4b1e7d7cd6",upgradeCap:"0x0f928a6b2e26b73330fecaf9b44acfc9800a4a9794d6415c2a3153bc70e3c1f0"},testCoin:{id:"",upgradeCap:""}}},spool:{id:"0xec1ac7f4d01c5bf178ff4e62e523e7df7721453d81d4904a42a0ffc2686c843d",adminCap:"0xdd8a047cbbf802bfcde5288b8ef1910965d789cc614da11d39af05fca0bd020a",object:"0xe87f1b2d498106a2c61421cec75b7b5c5e348512b0dc263949a0e7a3c256571a",pools:{seth:{id:"0xeec40beccb07c575bebd842eeaabb835f77cd3dab73add433477e57f583a6787",rewardPoolId:"0x957de68a18d87817de8309b30c1ec269a4d87ae513abbeed86b5619cb9ce1077"},ssui:{id:"0x4f0ba970d3c11db05c8f40c64a15b6a33322db3702d634ced6536960ab6f3ee4",rewardPoolId:"0x162250ef72393a4ad3d46294c4e1bdfcb03f04c869d390e7efbfc995353a7ee9"},susdc:{id:"0x4ace6648ddc64e646ba47a957c562c32c9599b3bba8f5ac1aadb2ae23a2f8ca0",rewardPoolId:"0xf4268cc9b9413b9bfe09e8966b8de650494c9e5784bf0930759cfef4904daff8"},susdt:{id:"0xcb328f7ffa7f9342ed85af3fdb2f22919e1a06dfb2f713c04c73543870d7548f",rewardPoolId:"0x2c9f934d67a5baa586ceec2cc24163a2f049a6af3d5ba36b84d8ac40f25c4080"},scetus:{id:"0xac1bb13bf4472a637c18c2415fb0e3c1227ea2bcf35242e50563c98215bd298e",rewardPoolId:"0x6835c1224126a45086fc6406adc249e3f30df18d779ca4f4e570e38716a17f3f"},safsui:{id:"0xeedf438abcaa6ce4d9625ffca110920592d5867e4c5637d84ad9f466c4feb800",rewardPoolId:"0x89255a2f86ed7fbfef35ab8b7be48cc7667015975be2685dd9a55a9a64baf76e"},shasui:{id:"0xa6148bc1b623e936d39a952ceb5bea79e8b37228a8f595067bf1852efd3c34aa",rewardPoolId:"0x6f3563644d3e2ef13176dbf9d865bd93479df60ccbe07b7e66db57f6309f5a66"},svsui:{id:"0x69ce8e537e750a95381e6040794afa5ab1758353a1a2e1de7760391b01f91670",rewardPoolId:"0xbca914adce058ad0902c7f3cfcd698392a475f00dcfdc3f76001d0370b98777a"}},version:"",versionCap:""},borrowIncentive:{id:"0x874f1d43d81e2256e120bab2485938fe07ba0cc21d87129a99a1db11cacb382d",adminCap:"0xc486afa253646f4d381e81d7f1df8aa4723b845a6bb356f69bad635ffefffe2c",object:"0x002875153e09f8145ab63527bc85c00f2bd102e12f9573c47f8cdf1a1cb62934",query:"0x529edc54a3dce2207703ceebbccb0ac14133f7825c1f528775ba0d85a4063489",incentivePools:"0x6547e143d406b5ccd5f46aae482497de279cc1a68c406f701df70a05f9212ab4",incentiveAccounts:"0xc4701fdbc1c92f9a636d334d66012b3027659e9fb8aff27279a82edfb6b77d02",config:"0xdf5d04b4691cc67e82fd4db8394d89ff44823a9de29716c924f74bb4f11cc1f7",version:"",versionCap:""},vesca:{id:"0xcfe2d87aa5712b67cad2732edb6a2201bfdf592377e5c0968b7cb02099bd8e21",adminCap:"0x4d105b16467acca81d18c132cdd1a3cee159920a86c1ef4bdbf2e8d7878500c5",tableId:"0x0a0b7f749baeb61e3dfee2b42245e32d0e6b484063f0a536b33e771d573d7246",table:"0xd3a4632b1080f7d96e1c2487d4dabf2c1196916937c505a69954ac9f393be8d0",treasury:"0xafa4b6231e49c15a22d641ce33fda761baaf650fa21899dfa2eb1716146e7306",config:"0x7cbcb0a342179577a117dfdff974cf1ab765d3b571067bf22ddf5f9e3a667922"}}};var $=class{_auth;_id;_network;_currentAddresses;_addressesMap;constructor(e){let{id:t,auth:a,network:o}=e;a&&(this._auth=a),this._id=t,this._network=o||"mainnet",this._addressesMap=new Map}getId(){return this._id||void 0}get(e){if(this._currentAddresses)return e.split(".").reduce((a,o)=>typeof a=="object"?a[o]:a,this._currentAddresses)||void 0}set(e,t){if(this._currentAddresses){let a=e.split(".");a.reduce((o,r,i)=>{if(i===a.length-1){let s=o;s[r]=t}return o[r]},this._currentAddresses)}return this._currentAddresses}switchCurrentAddresses(e){return this._addressesMap.has(e)&&(this._currentAddresses=this._addressesMap.get(e),this._network=e),this._currentAddresses}getAddresses(e){return e?this._addressesMap.get(e):this._currentAddresses??this._addressesMap.get(this._network)}setAddresses(e,t){let a=t||this._network;a===this._network&&(this._currentAddresses=e),this._addressesMap.set(a,e)}getAllAddresses(){return Object.fromEntries(this._addressesMap)}read(){return Object.entries(Uo).forEach(([e,t])=>{["localnet","devnet","testnet","mainnet"].includes(e)&&(e===this._network&&(this._currentAddresses=t),this._addressesMap.set(e,t))}),this.getAllAddresses()}};import{TransactionBlock as hs}from"@mysten/sui.js/transactions";import{normalizeSuiAddress as ys}from"@mysten/sui.js/utils";import{SUI_TYPE_ARG as bs,normalizeStructTag as Jo}from"@mysten/sui.js/utils";var _=n=>{let{sender:e}=n.blockData;if(!e)throw new Error("Sender is required");return e},$o=(n,e,t,a)=>{let o=!a,r=!o&&a*1e3<=new Date().getTime();if(o||r)if(n!==void 0&&e!==void 0){if(e<=0)throw new Error("Lock period must be greater than 0");if(typeof n=="number"&&n<1e10)throw new Error(`Minimum lock amount for ${r?"renewing expired veSca":"initial lock"} is 10 SCA`);if(e*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(Te(a),typeof n=="number"&&n<1e9)throw new Error("Minimum top up amount is 1 SCA");if(t&&a&&t-a>126057600)throw new Error(`Maximum lock period is ~4 years (${1459} days)`)}},Vo=(n,e,t)=>{if(Te(t),n<=0)throw new Error("Lock period must be greater than 0");if(!!t&&t*1e3<=new Date().getTime())throw new Error("veSca is expired, use renewExpiredVeScaQuick instead");if(t&&e-(t??0)>126057600)throw new Error(`Maximum lock period is ~4 years (${1459} days)`)},Qo=(n,e)=>{if(Te(e),n<1e9)throw new Error("Minimum top up amount is 1 SCA");if(!!e&&e*1e3<=new Date().getTime())throw new Error("veSca is expired, use renewExpiredVeScaQuick instead")},Go=(n,e,t)=>{if(Te(t),n<1e10)throw new Error("Minimum lock amount for renewing expired vesca 10 SCA");if(e*86400>=126057600)throw new Error(`Maximum lock period is ~4 years (${1459} days)`)},Te=n=>{if(n===void 0)throw new Error("veSca not found")};import{normalizeStructTag as Ko,parseStructTag as ps}from"@mysten/sui.js/utils";import Mh from"bignumber.js";var ms=n=>({pointType:Ko(n.point_type.name),weightedAmount:Number(n.weighted_amount),points:Number(n.points),totalPoints:Number(n.total_points),index:Number(n.index)}),Ho=n=>({poolType:Ko(n.pool_type.name),debtAmount:Number(n.debt_amount),pointList:n.points_list.reduce((e,t)=>{let a=ms(t),o=ps(a.pointType).name.toLowerCase();return e[o]=a,e},{})});var kn=n=>{let e=n.slice(1).toLowerCase();return n.charAt(0).toLowerCase()==="s"&&[...new Set([...ce,...ra,...Mo])].includes(e)},xn=n=>{switch(n){case"afsui":return"afSUI";case"hasui":return"haSUI";case"vsui":return"vSUI";default:return n.toUpperCase()}};var zo=n=>{let e=new Date(n*1e3),t=new Date(n*1e3);t.setUTCHours(0,0,0,0),e.getUTCHours()>=0&&t.setUTCDate(t.getUTCDate()+1);let a=new Date().getTime();return t.getTime()-a>126144e3*1e3&&t.setUTCDate(t.getUTCDate()-1),Math.floor(t.getTime()/1e3)};var ne=class{params;isTestnet;_address;client;constructor(e,t){this.params=e,this._address=t?.address??new $({id:e?.addressesId||ee,network:e?.networkType}),this.isTestnet=e.networkType?e.networkType==="testnet":!1,this.client=e.client}init(e=!1,t){e||!this._address.getAddresses()||!t?.getAddresses()?this._address.read():this._address=t}parseSymbol(e){if(kn(e)){let t=e.slice(1).toLowerCase();return e.slice(0,1).toLowerCase()+xn(t)}return xn(e)}parseCoinType(e){let t=kn(e)?this.parseCoinName(e):e,a=this._address.get(`core.coins.${t}.id`)||Wo[e]||void 0;if(!a)throw Error(`Coin ${e} is not supported`);if(e==="sui")return Jo(`${a}::sui::SUI`);let o=[this._address.get("core.coins.usdc.id")??R.usdc,this._address.get("core.coins.usdt.id")??R.usdt,this._address.get("core.coins.eth.id")??R.eth,this._address.get("core.coins.btc.id")??R.btc,this._address.get("core.coins.sol.id")??R.sol,this._address.get("core.coins.apt.id")??R.apt],r=[this._address.get("core.coins.vsui.id")??In.vsui];return o.includes(a)?`${a}::coin::COIN`:r.includes(a)?`${a}::cert::CERT`:`${a}::${t}::${t.toUpperCase()}`}parseMarketCoinType(e){let t=this._address.get("core.object")||oa,a=this.parseCoinType(e);return`${t}::reserve::MarketCoin<${a}>`}parseCoinNameFromType(e){let t=Jo(e),a=/((0x[^:]+::[^:]+::[^<>]+))(?![^<>]*<)/,o=e.match(a),r=e.includes("reserve::MarketCoin");t=o?.[1]||e;let i={[`${this._address.get("core.coins.usdc.id")??R.usdc}::coin::COIN`]:"usdc",[`${this._address.get("core.coins.usdt.id")??R.usdt}::coin::COIN`]:"usdt",[`${this._address.get("core.coins.eth.id")??R.eth}::coin::COIN`]:"eth",[`${this._address.get("core.coins.btc.id")??R.btc}::coin::COIN`]:"btc",[`${this._address.get("core.coins.sol.id")??R.sol}::coin::COIN`]:"sol",[`${this._address.get("core.coins.apt.id")??R.apt}::coin::COIN`]:"apt"},s={[`${this._address.get("core.coins.vsui.id")??In.vsui}::cert::CERT`]:"vsui"},c=i[t]||s[t]||t.split("::")[2].toLowerCase();return r?this.parseMarketCoinName(c):c}parseCoinName(e){return e.slice(1)}parseMarketCoinName(e){return`s${e}`}getSpoolRewardCoinName=e=>ia[e];getBorrowIncentiveRewardCoinName=e=>Lo[e];getCoinDecimal(e){return Eo[e]}getCoinWrappedType(e){return e==="usdc"||e==="usdt"||e==="eth"||e==="btc"||e==="apt"||e==="sol"?{from:"Wormhole",type:"Portal from Ethereum"}:void 0}async selectCoinIds(e,t=bs,a){let o=a,r=[],i=0,s=!0,c=null;for(;s&&i<e;){let l=await this.client.getCoins({owner:o,coinType:t,cursor:c});l.data.sort((d,p)=>parseInt(p.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}),i+=parseInt(l.data[d].balance,10),!(i>=e));d++);c=l.nextCursor,s=l.hasNextPage}if(!r.length)throw new Error("No valid coins found for the transaction.");return r.map(l=>l.objectId)}parseAprToApy(e,t=365){return(1+e/t)**t-1}parseApyToApr(e,t=365){return((1+e)**(1/t)-1)*t}takeAmountFromCoins(e,t,a){let o=t.map(s=>e.object(s)),r=o[0];o.length>1&&e.mergeCoins(r,o.slice(1));let[i]=e.splitCoins(r,[e.pure(a)]);return[i,r]}getUnlockAt(e,t){let a=Math.floor(new Date().getTime()/1e3),o=t?Math.max(t-a,0):0,r=0;if(o===0){let i=(e??1)*86400;r=Math.min(a+i,a+126144e3)}else{let i=Math.min(e?e*86400+o:o,126144e3);r=a+i}return zo(r)}};import{TransactionBlock as fs}from"@mysten/sui.js/transactions";import da from"bignumber.js";var ke=async(n,e)=>{let t=e,a=n.address.get("core.object")||oa,o=[],r=!1,i=null;do{let d=await n.client.getOwnedObjects({owner:t,filter:{StructType:`${a}::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 n.client.multiGetObjects({ids:s,options:{showContent:!0,showType:!0}}),l=[];for(let d=0;d<c.length;d++){let p=c[d].data.objectId,{content:m}=c[d].data;if(m&&"fields"in m){let b=m.fields,f=String(b.ownership.fields.of),y=await vn(n,f);l.push({id:f,keyId:p,locked:y})}}return l},vn=async(n,e)=>{let t=await n.client.getObject({id:e,options:{showContent:!0}}),a=!1;return t.data&&t?.data?.content?.dataType==="moveObject"&&"lock_key"in t.data.content.fields&&(a=!!t.data.content.fields.lock_key),a},Xo=async(n,e,t)=>{let a=t||[...ce],o=e,r=[],i=!1,s=null;do{let d=await n.client.getOwnedObjects({owner:o,filter:{MatchAny:a.map(p=>({StructType:`0x2::coin::Coin<${n.utils.parseCoinType(p)}>`}))},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 p=d.type;if(d.content&&"fields"in d.content){let m=d.content.fields,b=n.utils.parseCoinNameFromType(p);b&&(c[b]=da(c[b]??0).plus(m.balance).toNumber())}}),c},Yo=async(n,e,t)=>{let a=t,o=n.utils.parseCoinType(e),r=[],i=!1,s=null;do{let d=await n.client.getOwnedObjects({owner:a,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 p=d.content.fields;c=da(c).plus(p.balance).toNumber()}}),c},Zo=async(n,e,t)=>{let a=t||[...ce].map(d=>n.utils.parseMarketCoinName(d)),o=e,r=[],i=!1,s=null;do{let d=await n.client.getOwnedObjects({owner:o,filter:{MatchAny:a.map(p=>({StructType:`0x2::coin::Coin<${n.utils.parseMarketCoinType(p)}>`}))},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 p=d.type;if(d.content&&"fields"in d.content){let m=d.content.fields,b=n.utils.parseCoinNameFromType(p);b&&(c[b]=da(c[b]??0).plus(m.balance).toNumber())}}),c},er=async(n,e,t)=>{let a=t,o=n.utils.parseMarketCoinType(e),r=[],i=!1,s=null;do{let d=await n.client.getOwnedObjects({owner:a,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 p=d.content.fields;c=da(c).plus(p.balance).toNumber()}}),c},tr=async(n,e)=>{let a=`${n.address.get("core.packages.query.id")}::obligation_query::obligation_data`,o=new fs;return o.moveCall({target:a,arguments:[o.object(e)]}),(await n.client.devInspectTransactionBlock({transactionBlock:o,sender:n.walletAddress})).events[0].parsedJson};import{normalizeStructTag as w}from"@mysten/sui.js/utils";var Ke=async(n,e)=>{let t=e,a=n.address.get("spool.object"),o=`${a}::spool_account::SpoolAccount`,r=[],i=!1,s=null;do{let m=await n.client.getOwnedObjects({owner:t,filter:{StructType:o},options:{showContent:!0,showType:!0},cursor:s});r.push(...m.data),m.hasNextPage&&m.nextCursor?(i=!0,s=m.nextCursor):i=!1}while(i);let c={seth:[],ssui:[],susdc:[],susdt:[],scetus:[],safsui:[],shasui:[],svsui:[]},l=Object.keys(c).reduce((m,b)=>{let f=n.utils.parseCoinName(b),y=n.utils.parseMarketCoinType(f),T={...m},j=`${a}::spool_account::SpoolAccount<${y}>`;return T[b]=j,T},{}),d=r.map(m=>m?.data?.objectId).filter(m=>m!==void 0);return(await n.client.multiGetObjects({ids:d,options:{showContent:!0,showType:!0}})).forEach(m=>{let b=m.data.objectId,f=m.data.type;if(m.data.content&&"fields"in m.data.content){let y=m.data.content.fields,T=String(y.spool_id),j=String(y.stake_type.fields.name),U=Number(y.stakes),G=Number(y.index),K=Number(y.points),H=Number(y.total_points);w(f)===l.seth?c.seth.push({id:b,type:w(f),stakePoolId:T,stakeType:w(j),staked:U,index:G,points:K,totalPoints:H}):w(f)===l.ssui?c.ssui.push({id:b,type:w(f),stakePoolId:T,stakeType:w(j),staked:U,index:G,points:K,totalPoints:H}):w(f)===l.susdc?c.susdc.push({id:b,type:w(f),stakePoolId:T,stakeType:w(j),staked:U,index:G,points:K,totalPoints:H}):w(f)===l.susdt?c.susdt.push({id:b,type:w(f),stakePoolId:T,stakeType:w(j),staked:U,index:G,points:K,totalPoints:H}):w(f)===l.scetus?c.scetus.push({id:b,type:w(f),stakePoolId:T,stakeType:w(j),staked:U,index:G,points:K,totalPoints:H}):w(f)===l.safsui?c.safsui.push({id:b,type:w(f),stakePoolId:T,stakeType:w(j),staked:U,index:G,points:K,totalPoints:H}):w(f)===l.shasui?c.shasui.push({id:b,type:w(f),stakePoolId:T,stakeType:w(j),staked:U,index:G,points:K,totalPoints:H}):w(f)===l.svsui&&c.svsui.push({id:b,type:w(f),stakePoolId:T,stakeType:w(j),staked:U,index:G,points:K,totalPoints:H})}}),c},An=async(n,e)=>{let t=n.address.get(`spool.pools.${e}.id`),a,o=await n.client.getObject({id:t,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),p=Number(c.distributed_point_per_period),m=Number(c.point_distribution_time),b=Number(c.max_stakes),f=String(c.stake_type.fields.name),y=Number(c.stakes),T=Number(c.index),j=Number(c.created_at),U=Number(c.last_update);a={id:i,type:w(s),maxPoint:l,distributedPoint:d,pointPerPeriod:p,period:m,maxStake:b,stakeType:w(f),totalStaked:y,index:T,createdAt:j,lastUpdate:U}}}return a},On=async(n,e)=>{let t=n.address.get(`spool.pools.${e}.rewardPoolId`),a,o=await n.client.getObject({id:t,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),p=Number(c.exchange_rate_denominator),m=Number(c.rewards),b=Number(c.claimed_rewards);a={id:i,type:w(s),stakePoolId:l,ratioNumerator:d,ratioDenominator:p,rewards:m,claimedRewards:b}}}return a};import{TransactionBlock as gs}from"@mysten/sui.js/transactions";import{normalizeStructTag as oy}from"@mysten/sui.js/utils";import iy from"bignumber.js";var ar=async(n,e,t,a)=>{let o=a||[...Ie],r=n.address.get("borrowIncentive.query"),i=n.address.get("borrowIncentive.incentiveAccounts"),s=`${r}::incentive_account_query::incentive_account_data`,c=new gs;c.moveCall({target:s,arguments:[c.object(i),c.object(e)]});let d=(await n.client.devInspectTransactionBlock({transactionBlock:c,sender:t})).events[0].parsedJson,p={};return d.pool_records.forEach(m=>{let b=Ho(m),{poolType:f}=b,y=n.utils.parseCoinNameFromType(f);o.length>=1&&o.includes(y)&&(p[y]=b)},{}),p};var nr=async(n,e)=>{let t=n.address.get(`core.coins.${e}.oracle.pyth.feedObject`),a=await n.client.getObject({id:t,options:{showContent:!0}});if(a.data){let o=a.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 Pn from"bignumber.js";var or=async(n,e)=>{let t=e,o=`${n.address.get("vesca.id")}::ve_sca::VeScaKey`,r=[],i=!1,s=null;do{let l=await n.client.getOwnedObjects({owner:t,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)},rr=async(n,e)=>{let a=(await or(n,e)).map(r=>r.objectId),o=[];for(let r=0;r<a.length;r++){let i=await Dn(n,a[r]);i&&o.push(i)}return o},Dn=async(n,e,t)=>{let a=n.address.get("vesca.tableId"),o=e||(await or(n,t))[0].objectId,r,s=(await n.client.getDynamicFieldObject({parentId:a,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:Pn(c.locked_sca_amount).toNumber(),lockedScaCoin:Pn(c.locked_sca_amount).shiftedBy(-9).toNumber(),unlockAt:Pn(c.unlock_at).toNumber()}}return r};var xe=class{params;address;client;utils;walletAddress;constructor(e,t){this.params=e,this.address=t?.address??new $({id:e?.addressesId||ee,network:e?.networkType}),this.client=e.client,this.utils=t?.utils??new ne(this.params,{address:this.address}),this.walletAddress=e.walletAddress}init(e=!1,t){e||!this.address.getAddresses()||!t?.getAddresses()?this.address.read():this.address=t}async getObligations(e){return ke(this,e)}async getCoinAmounts(e,t){return Xo(this,e,t)}async getCoinAmount(e,t){return Yo(this,e,t)}async getMarketCoinAmounts(e,t){return Zo(this,e,t)}async getMarketCoinAmount(e,t){return er(this,e,t)}async getPriceFromPyth(e){return nr(this,e)}async getAllStakeAccounts(e){return Ke(this,e)}async getStakeAccounts(e,t){return(await this.getAllStakeAccounts(t))[e]??[]}async getStakePools(e){let t=e??[...Qe],a={};for(let o=0;o<t.length;o++){let r=t[o],i=await An(this,r);i&&(a[r]=i)}return a}async getStakePool(e){return An(this,e)}async getStakeRewardPools(e){let t=e??[...Qe],a={};for(let o=0;o<t.length;o++){let r=await On(this,t[o]);r&&(a[t[o]]=r)}return a}async getStakeRewardPool(e){return On(this,e)}async getBorrowIncentiveAccounts(e,t,a){return ar(this,e,t||this.walletAddress,a)}async getObligationCoinNames(e){let t=await tr(this,e),a=t.collaterals.map(s=>`0x${s.type.name}`),o=t.debts.map(s=>`0x${s.type.name}`);return[...new Set([...a,...o])].map(s=>this.utils.parseCoinNameFromType(s))}};var ve=class{params;isTestnet;address;query;utils;client;walletAddress;constructor(e,t){this.params=e,this.address=t?.address??new $({id:e?.addressesId||ee,network:e?.networkType}),this.query=t?.query??new xe(e,{address:this.address}),this.utils=t?.utils??new ne(this.params,{address:this.address,query:this.query}),this.client=e.client,this.walletAddress=ys(e.walletAddress),this.isTestnet=e.networkType?e.networkType==="testnet":!1}async init(e=!1,t){e||!this.address.getAddresses()||!t?.getAddresses()?this.address.read():this.address=t,this.query.init(e,this.address),this.utils.init(e,this.address)}createTxBlock(e){return new hs(e)}async selectCoin(e,t,a,o){let r=this.utils.parseCoinType(t),i=await this.utils.selectCoinIds(a,r,o),[s,c]=this.utils.takeAmountFromCoins(e,i,a);return{takeCoin:s,leftCoin:c}}async selectMarketCoin(e,t,a,o){let r=this.utils.parseMarketCoinType(t),i=await this.utils.selectCoinIds(a,r,o),[s,c]=this.utils.takeAmountFromCoins(e,i,a);return{takeCoin:s,leftCoin:c}}};import{SUI_CLOCK_OBJECT_ID as Ae,SUI_TYPE_ARG as Ss}from"@mysten/sui.js/utils";var de=async(...n)=>{let[e,t,a]=n;if(n.length===3&&a&&typeof a=="string"){let i=await Dn(e.query,a);return i||void 0}let o=_(t),r=await rr(e.query,o);if(r.length!==0)return r[0]},ws=async(n,e)=>{let t=n.address.get("borrowIncentive.object"),a=n.address.get("borrowIncentive.incentivePools"),o=n.address.get("vesca.id"),{client:r}=n,i=await r.getObject({id:a,options:{showContent:!0}});if(i.data?.content?.dataType!=="moveObject")return!1;let c=i.data.content.fields.ve_sca_bind.fields.id.id,l=`${t}::typed_id::TypedID<${o}::ve_sca::VeScaKey>`,d=await r.getDynamicFieldObject({parentId:c,name:{type:l,value:e}});return d.data?.content?.dataType!=="moveObject"?!1:d.data.content.fields.value.fields.id},_n=async(...n)=>{let[e,t,a,o]=n;if(n.length===4&&a&&o&&typeof a=="string"){let s=await vn(e.query,a);return{obligationId:a,obligationKey:o,obligationLocked:s}}let r=_(t),i=await ke(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,obligationLocked:i[0].locked}},Cs=({builder:n,txBlock:e})=>{let t={borrowIncentivePkg:n.address.get("borrowIncentive.id"),query:n.address.get("borrowIncentive.query"),incentivePools:n.address.get("borrowIncentive.incentivePools"),incentiveAccounts:n.address.get("borrowIncentive.incentiveAccounts"),obligationAccessStore:n.address.get("core.obligationAccessStore"),config:n.address.get("borrowIncentive.config")},a={id:"0xc63072e7f5f4983a2efaf5bdba1480d5e7d74d57948e1c7cc436f8e22cbeb410",incentivePools:"0x64972b713ccec45ec3964809e477cea6f97350c0c50ca3aec85bb631639266ec",incentiveAccounts:"0x3c0b707068bdcea8bb859d751ad3e2149a9f83c13fcf4054ef91372a00bccdd3"},o={table:n.address.get("vesca.table"),treasury:n.address.get("vesca.treasury"),config:n.address.get("vesca.config")};return{stakeObligation:(r,i)=>{e.moveCall({target:`${t.borrowIncentivePkg}::user::stake`,arguments:[e.object(t.config),e.object(t.incentivePools),e.object(t.incentiveAccounts),e.object(i),e.object(r),e.object(t.obligationAccessStore),e.object(Ae)]})},stakeObligationWithVesca:(r,i,s)=>{e.moveCall({target:`${t.borrowIncentivePkg}::user::stake_with_ve_sca`,arguments:[e.object(t.config),e.object(t.incentivePools),e.object(t.incentiveAccounts),e.object(i),e.object(r),e.object(t.obligationAccessStore),e.object(o.config),e.object(o.treasury),e.object(o.table),e.object(s),e.object(Ae)]})},unstakeObligation:(r,i)=>{e.moveCall({target:`${t.borrowIncentivePkg}::user::unstake`,arguments:[e.object(t.config),e.object(t.incentivePools),e.object(t.incentiveAccounts),e.object(i),e.object(r),e.object(Ae)]})},oldUnstakeObligation:(r,i)=>{e.moveCall({target:`${t.borrowIncentivePkg}::user::unstake`,arguments:[e.object(a.incentivePools),e.object(a.incentiveAccounts),e.object(i),e.object(r),e.object(Ae)],typeArguments:[Ss]})},claimBorrowIncentive:(r,i,s)=>{let c=n.utils.parseCoinType(s);return e.moveCall({target:`${t.borrowIncentivePkg}::user::redeem_rewards`,arguments:[e.object(t.config),e.object(t.incentivePools),e.object(t.incentiveAccounts),e.object(i),e.object(r),e.object(Ae)],typeArguments:[c]})},oldClaimBorrowIncentive(r,i,s){let c=n.utils.parseCoinType(s);return e.moveCall({target:`${a.id}::user::redeem_rewards`,arguments:[e.object(a.incentivePools),e.object(a.incentiveAccounts),e.object(i),e.object(r),e.object(Ae)],typeArguments:[c]})}}},E=({builder:n,txBlock:e})=>{let t=Cs({builder:n,txBlock:e});return{normalMethod:t,stakeObligationQuick:async(a,o)=>{let{obligationId:r,obligationKey:i,obligationLocked:s}=await _n(n,e,a,o),c=!!e.blockData.transactions.find(l=>l.kind==="MoveCall"&&l.target===`${n.address.get("borrowIncentive.id")}::user::unstake`);(!s||c)&&t.stakeObligation(r,i)},unstakeObligationQuick:async(a,o)=>{let{obligationId:r,obligationKey:i,obligationLocked:s}=await _n(n,e,a,o);s&&t.unstakeObligation(r,i)},stakeObligationWithVeScaQuick:async(a,o,r)=>{let{obligationId:i,obligationKey:s,obligationLocked:c}=await _n(n,e,a,o),l=!!e.blockData.transactions.find(d=>d.kind==="MoveCall"&&(d.target===`${Ce}::user::unstake`||d.target===`${n.address.get("borrowIncentive.id")}::user::unstake`));if(!c||l){let d=await de(n,e,r);if(d){let p=await ws(n,d.keyId);!p||p===i?t.stakeObligationWithVesca(i,s,d.keyId):t.stakeObligation(i,s)}else t.stakeObligation(i,s)}},claimBorrowIncentiveQuick:(a,o,r)=>t.claimBorrowIncentive(o,r,a)}};import{SUI_CLOCK_OBJECT_ID as oe}from"@mysten/sui.js/utils";import{SUI_CLOCK_OBJECT_ID as pa}from"@mysten/sui.js/utils";import Is from"axios";var ir={testnet:["https://hermes-beta.pyth.network"],mainnet:["https://hermes.pyth.network","https://scallop.rpc.p2p.world"]};import{bcs as jn}from"@mysten/sui.js/bcs";import{SUI_CLOCK_OBJECT_ID as la}from"@mysten/sui.js/utils";var Rn=16*1024,ua=class{provider;pythStateId;wormholeStateId;pythPackageId;wormholePackageId;priceTableInfo;priceFeedObjectIdCache=new Map;baseUpdateFee;constructor(e,t,a){this.provider=e,this.pythStateId=t,this.wormholeStateId=a,this.pythPackageId=void 0,this.wormholePackageId=void 0}async getBaseUpdateFee(){if(this.baseUpdateFee===void 0){let e=await this.provider.getObject({id:this.pythStateId,options:{showContent:!0}});if(!e.data||!e.data.content||e.data.content.dataType!=="moveObject")throw new Error("Unable to fetch pyth state object");this.baseUpdateFee=e.data.content.fields.base_update_fee}return this.baseUpdateFee}async getPackageId(e){let t=await this.provider.getObject({id:e,options:{showContent:!0}}).then(a=>{if(a.data?.content?.dataType==="moveObject")return a.data.content.fields;throw console.log(a.data?.content),new Error(`Cannot fetch package id for object ${e}`)});if("upgrade_cap"in t)return t.upgrade_cap.fields.package;throw new Error("upgrade_cap not found")}async verifyVaas(e,t){let a=await this.getWormholePackageId(),o=[];return e.forEach(r=>{let[i]=t.moveCall({target:`${a}::vaa::parse_and_verify`,arguments:[t.object(this.wormholeStateId),t.pure(jn.ser("vector<u8>",Array.from(r),{maxSize:Rn}).toBytes()),t.object(la)]});o.push(i)}),o}async updatePriceFeeds(e,t,a){let o=await this.getPythPackageId(),r;if(t.length>1)throw new Error("SDK does not support sending multiple accumulator messages in a single transaction");let i=this.extractVaaBytesFromAccumulatorMessage(t[0]),s=await this.verifyVaas([i],e);[r]=e.moveCall({target:`${o}::pyth::create_authenticated_price_infos_using_accumulator`,arguments:[e.object(this.pythStateId),e.pure(jn.ser("vector<u8>",Array.from(t[0]),{maxSize:Rn}).toBytes()),s[0],e.object(la)]});let c=[],l=await this.getBaseUpdateFee(),d=e.splitCoins(e.gas,a.map(()=>e.pure(l))),p=0;for(let m=0;m<a.length;m++){let b=await this.getPriceFeedObjectId(a[m]);if(!b)throw new Error(`Price feed ${a[0]} not found, please create it first`);c.push(b),[r]=e.moveCall({target:`${o}::pyth::update_single_price_feed`,arguments:[e.object(this.pythStateId),r,e.object(b),d[p],e.object(la)]}),p++}return e.moveCall({target:`${o}::hot_potato_vector::destroy`,arguments:[r],typeArguments:[`${o}::price_info::PriceInfo`]}),c}async createPriceFeed(e,t){let a=await this.getPythPackageId();if(t.length>1)throw new Error("SDK does not support sending multiple accumulator messages in a single transaction");let o=this.extractVaaBytesFromAccumulatorMessage(t[0]),r=await this.verifyVaas([o],e);e.moveCall({target:`${a}::pyth::create_price_feeds_using_accumulator`,arguments:[e.object(this.pythStateId),e.pure(jn.ser("vector<u8>",Array.from(t[0]),{maxSize:Rn}).toBytes()),r[0],e.object(la)]})}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(e){let t=e.replace("0x","");if(!this.priceFeedObjectIdCache.has(t)){let{id:a,fieldType:o}=await this.getPriceTableInfo(),r=await this.provider.getDynamicFieldObject({parentId:a,name:{type:`${o}::price_identifier::PriceIdentifier`,value:{bytes:Array.from(Buffer.from(t,"hex"))}}});if(!r.data||!r.data.content)return;if(r.data.content.dataType!=="moveObject")throw new Error("Price feed type mismatch");this.priceFeedObjectIdCache.set(t,r.data.content.fields.value)}return this.priceFeedObjectIdCache.get(t)}async getPriceTableInfo(){if(this.priceTableInfo===void 0){let e=await this.provider.getDynamicFieldObject({parentId:this.pythStateId,name:{type:"vector<u8>",value:"price_info"}});if(!e.data||!e.data.type)throw new Error("Price Table not found, contract may not be initialized");let t=e.data.type.replace("0x2::table::Table<","");t=t.replace("::price_identifier::PriceIdentifier, 0x2::object::ID>",""),this.priceTableInfo={id:e.data.objectId,fieldType:t}}return this.priceTableInfo}extractVaaBytesFromAccumulatorMessage(e){let a=7+e.readUint8(6)+1,o=e.readUint16BE(a),r=a+2;return e.subarray(r,r+o)}};var Ts=async(n,e)=>(await Is.get(`${n}/api/latest_vaas`,{params:{ids:e}})).data.map(o=>Buffer.from(o,"base64")),ma=async(n,e,t)=>{let a=t??[...new Set([...ce,...ra])],o=n.isTestnet?["pyth"]:["pyth"];if(o.includes("pyth")){let i=new ua(n.client,n.address.get("core.oracles.pyth.state"),n.address.get("core.oracles.pyth.wormholeState")),s=a.map(l=>n.address.get(`core.coins.${l}.oracle.pyth.feed`)),c=n.params.pythEndpoints??ir[n.isTestnet?"testnet":"mainnet"];try{let l=await Ts(c[0],s);await i.updatePriceFeeds(e,l,s)}catch(l){console.warn(`Failed to update price feeds with endpoint ${c[0]}: ${l}`)}}let r=[...new Set(a)];for(let i=0;i<r.length;i++)await ks(n,e,r[i],o)},ks=async(n,e,t,a)=>{let o=n.utils.parseCoinType(t);xs(e,a,n.address.get("core.packages.xOracle.id"),n.address.get("core.oracles.xOracle"),n.address.get("core.packages.pyth.id"),n.address.get("core.oracles.pyth.registry"),n.address.get("core.oracles.pyth.state"),n.address.get(`core.coins.${t}.oracle.pyth.feedObject`),n.address.get("core.packages.switchboard.id"),n.address.get("core.oracles.switchboard.registry"),n.address.get(`core.coins.${t}.oracle.switchboard`),n.address.get("core.packages.supra.id"),n.address.get("core.oracles.supra.registry"),n.address.get("core.oracles.supra.holder"),o)},xs=(n,e,t,a,o,r,i,s,c,l,d,p,m,b,f)=>{let y=vs(n,t,a,f);return e.includes("pyth")&&Ds(n,o,y,i,s,r,f),e.includes("switchboard")&&Ps(n,c,y,d,l,f),e.includes("supra")&&Os(n,p,y,b,m,f),As(n,t,a,y,f),n},vs=(n,e,t,a)=>{let o=typeof t=="string"?n.object(t):t,r=`${e}::x_oracle::price_update_request`,i=[a];return n.moveCall({target:r,arguments:[o],typeArguments:i})},As=(n,e,t,a,o)=>{let r=`${e}::x_oracle::confirm_price_update_request`,i=[o],s=typeof t=="string"?n.object(t):t;return n.moveCall({target:r,arguments:[s,a,n.object(pa)],typeArguments:i}),n},Os=(n,e,t,a,o,r)=>{let i=typeof a=="string"?n.object(a):a,s=typeof o=="string"?n.object(o):o;n.moveCall({target:`${e}::rule::set_price`,arguments:[t,i,s,n.object(pa)],typeArguments:[r]})},Ps=(n,e,t,a,o,r)=>{let i=typeof a=="string"?n.object(a):a,s=typeof o=="string"?n.object(o):o;n.moveCall({target:`${e}::rule::set_price`,arguments:[t,i,s,n.object(pa)],typeArguments:[r]})},Ds=(n,e,t,a,o,r,i)=>{let s=typeof t=="string"?n.object(t):t,c=typeof a=="string"?n.object(a):a,l=typeof o=="string"?n.object(o):o,d=typeof r=="string"?n.object(r):r;n.moveCall({target:`${e}::rule::set_price`,arguments:[s,c,l,d,n.object(pa)],typeArguments:[i]})};var ba=async(...n)=>{let[e,t,a,o]=n;if(n.length===3&&a)return{obligationId:a};if(n.length===4&&a&&o)return{obligationId:a,obligationKey:o};let r=_(e),i=await ke(t.query,r);if(i.length===0)throw new Error(`No obligation found for sender ${r}`);return{obligationId:i[0].id,obligationKey:i[0].keyId}},_s=({builder:n,txBlock:e})=>{let t={protocolPkg:n.address.get("core.packages.protocol.id"),market:n.address.get("core.market"),version:n.address.get("core.version"),coinDecimalsRegistry:n.address.get("core.coinDecimalsRegistry"),xOracle:n.address.get("core.oracles.xOracle")};return{openObligation:()=>e.moveCall({target:`${t.protocolPkg}::open_obligation::open_obligation`,arguments:[e.pure(t.version)]}),returnObligation:(a,o)=>e.moveCall({target:`${t.protocolPkg}::open_obligation::return_obligation`,arguments:[e.object(t.version),e.object(a),e.object(o)]}),openObligationEntry:()=>e.moveCall({target:`${t.protocolPkg}::open_obligation::open_obligation_entry`,arguments:[e.object(t.version)]}),addCollateral:(a,o,r)=>{let i=n.utils.parseCoinType(r);return e.moveCall({target:`${t.protocolPkg}::deposit_collateral::deposit_collateral`,arguments:[e.object(t.version),e.object(a),e.object(t.market),typeof o!="string"?o:e.pure(o)],typeArguments:[i]})},takeCollateral:(a,o,r,i)=>{let s=n.utils.parseCoinType(i);return e.moveCall({target:`${t.protocolPkg}::withdraw_collateral::withdraw_collateral`,arguments:[e.object(t.version),e.object(a),e.object(o),e.object(t.market),e.object(t.coinDecimalsRegistry),e.pure(r),e.object(t.xOracle),e.object(oe)],typeArguments:[s]})},deposit:(a,o)=>{let r=n.utils.parseCoinType(o);return e.moveCall({target:`${t.protocolPkg}::mint::mint`,arguments:[e.object(t.version),e.object(t.market),typeof a!="string"?a:e.pure(a),e.object(oe)],typeArguments:[r]})},depositEntry:(a,o)=>{let r=n.utils.parseCoinType(o);return e.moveCall({target:`${t.protocolPkg}::mint::mint_entry`,arguments:[e.object(t.version),e.object(t.market),typeof a!="string"?a:e.pure(a),e.object(oe)],typeArguments:[r]})},withdraw:(a,o)=>{let r=n.utils.parseCoinType(o);return e.moveCall({target:`${t.protocolPkg}::redeem::redeem`,arguments:[e.object(t.version),e.object(t.market),typeof a!="string"?a:e.pure(a),e.object(oe)],typeArguments:[r]})},withdrawEntry:(a,o)=>{let r=n.utils.parseCoinType(o);return e.moveCall({target:`${t.protocolPkg}::redeem::redeem_entry`,arguments:[e.object(t.version),e.object(t.market),typeof a!="string"?a:e.pure(a),e.object(oe)],typeArguments:[r]})},borrow:(a,o,r,i)=>{let s=n.utils.parseCoinType(i);return e.moveCall({target:`${t.protocolPkg}::borrow::borrow`,arguments:[e.object(t.version),e.object(a),e.object(o),e.object(t.market),e.object(t.coinDecimalsRegistry),e.pure(r),e.object(t.xOracle),e.object(oe)],typeArguments:[s]})},borrowEntry:(a,o,r,i)=>{let s=n.utils.parseCoinType(i);return e.moveCall({target:`${t.protocolPkg}::borrow::borrow_entry`,arguments:[e.object(t.version),e.object(a),e.object(o),e.object(t.market),e.object(t.coinDecimalsRegistry),e.pure(r),e.object(t.xOracle),e.object(oe)],typeArguments:[s]})},repay:(a,o,r)=>{let i=n.utils.parseCoinType(r);return e.moveCall({target:`${t.protocolPkg}::repay::repay`,arguments:[e.object(t.version),e.object(a),e.object(t.market),typeof o!="string"?o:e.pure(o),e.object(oe)],typeArguments:[i]})},borrowFlashLoan:(a,o)=>{let r=n.utils.parseCoinType(o);return e.moveCall({target:`${t.protocolPkg}::flash_loan::borrow_flash_loan`,arguments:[e.object(t.version),e.object(t.market),e.pure(a)],typeArguments:[r]})},repayFlashLoan:(a,o,r)=>{let i=n.utils.parseCoinType(r);return e.moveCall({target:`${t.protocolPkg}::flash_loan::repay_flash_loan`,arguments:[e.object(t.version),e.object(t.market),e.pure(a),e.object(o)],typeArguments:[i]})}}},L=({builder:n,txBlock:e})=>{let t=_s({builder:n,txBlock:e});return{normalMethod:t,addCollateralQuick:async(a,o,r)=>{let i=_(e),{obligationId:s}=await ba(e,n,r);if(o==="sui"){let[c]=e.splitCoins(e.gas,[a]);t.addCollateral(s,c,o)}else{let{leftCoin:c,takeCoin:l}=await n.selectCoin(e,o,a,i);t.addCollateral(s,l,o),e.transferObjects([c],i)}},takeCollateralQuick:async(a,o,r,i)=>{let s=await ba(e,n,r,i),c=await n.query.getObligationCoinNames(s.obligationId);return await ma(n,e,c),t.takeCollateral(s.obligationId,s.obligationKey,a,o)},depositQuick:async(a,o,r)=>{if(o==="sui"){let[c]=e.splitCoins(e.gas,[a]);return t.deposit(c,o)}let{leftCoin:i,takeCoin:s}=await n.selectCoin(e,o,a,r);return e.transferObjects([i],r),t.deposit(s,o)},withdrawQuick:async(a,o)=>{let r=_(e),i=n.utils.parseMarketCoinName(o),{leftCoin:s,takeCoin:c}=await n.selectMarketCoin(e,i,a,r);return e.transferObjects([s],r),t.withdraw(c,o)},borrowQuick:async(a,o,r,i)=>{let s=await ba(e,n,r,i),l=[...await n.query.getObligationCoinNames(s.obligationId),o];return await ma(n,e,l),t.borrow(s.obligationId,s.obligationKey,a,o)},repayQuick:async(a,o,r,i)=>{let s=await ba(e,n,r);if(o==="sui"){let[d]=e.splitCoins(e.gas,[a]);return t.repay(s.obligationId,d,o)}let{leftCoin:c,takeCoin:l}=await n.selectCoin(e,o,a,i);return e.transferObjects([c],i),t.repay(s.obligationId,l,o)},updateAssetPricesQuick:async a=>ma(n,e,a)}};import{SUI_CLOCK_OBJECT_ID as fa}from"@mysten/sui.js/utils";var sr=async(...n)=>{let[e,t,a,o]=n;if(n.length===4&&o)return[o];let r=_(t),i=await Ke(e.query,r);if(i[a].length===0)throw new Error(`No stake account id found for sender ${r}`);return i[a].map(s=>s.id)},js=async(...n)=>{let[e,t,a,o]=n,r=_(t),i=await Ke(e.query,r);if(i[a].length===0)throw new Error(`No stake account found for sender ${r}`);return o?i[a].filter(c=>c.id===o):i[a]},Rs=({builder:n,txBlock:e})=>{let t={spoolPkg:n.address.get("spool.id")};return{createStakeAccount:a=>{let o=n.utils.parseMarketCoinType(a),r=n.address.get(`spool.pools.${a}.id`);return e.moveCall({target:`${t.spoolPkg}::user::new_spool_account`,arguments:[e.object(r),e.object(fa)],typeArguments:[o]})},stake:(a,o,r)=>{let i=n.utils.parseMarketCoinType(r),s=n.address.get(`spool.pools.${r}.id`);e.moveCall({target:`${t.spoolPkg}::user::stake`,arguments:[e.object(s),e.object(a),typeof o=="string"?e.pure(o):o,e.object(fa)],typeArguments:[i]})},unstake:(a,o,r)=>{let i=n.utils.parseMarketCoinType(r),s=n.address.get(`spool.pools.${r}.id`);return e.moveCall({target:`${t.spoolPkg}::user::unstake`,arguments:[e.object(s),e.object(a),e.pure(o),e.object(fa)],typeArguments:[i]})},claim:(a,o)=>{let r=n.address.get(`spool.pools.${o}.id`),i=n.address.get(`spool.pools.${o}.rewardPoolId`),s=n.utils.parseMarketCoinType(o),c=ia[o],l=n.utils.parseCoinType(c);return e.moveCall({target:`${t.spoolPkg}::user::redeem_rewards`,arguments:[e.object(r),e.object(i),e.object(a),e.object(fa)],typeArguments:[s,l]})}}},le=({builder:n,txBlock:e})=>{let t=Rs({builder:n,txBlock:e});return{normalMethod:t,stakeQuick:async(a,o,r)=>{let i=_(e),s=await sr(n,e,o,r),c=n.utils.parseMarketCoinType(o);if(typeof a=="number"){let l=await n.utils.selectCoinIds(a,c,i),[d,p]=n.utils.takeAmountFromCoins(e,l,a);t.stake(s[0],d,o),e.transferObjects([p],i)}else t.stake(s[0],a,o)},unstakeQuick:async(a,o,r)=>{let i=a,s=await js(n,e,o,r),c=[];for(let l=0;l<s.length;l++){if(s[l].staked===0)continue;let d=Math.min(i,s[l].staked),p=t.unstake(s[l].id,d,o);if(c.push(p),i-=d,i===0)break}return c},claimQuick:async(a,o)=>{let r=await sr(n,e,a,o),i=[];return r.forEach(s=>{let c=t.claim(s,a);i.push(c)}),i}}};import{SUI_CLOCK_OBJECT_ID as He}from"@mysten/sui.js/utils";var Ns=({builder:n,txBlock:e})=>{let t={pkgId:n.address.get("vesca.id"),table:n.address.get("vesca.table"),treasury:n.address.get("vesca.treasury"),config:n.address.get("vesca.config")};return{lockSca:(a,o)=>e.moveCall({target:`${t.pkgId}::ve_sca::mint_ve_sca_key`,arguments:[e.object(t.config),e.object(t.table),e.object(t.treasury),typeof a=="string"?e.pure(a):a,e.pure(o),e.object(He)]}),extendLockPeriod:(a,o)=>{e.moveCall({target:`${t.pkgId}::ve_sca::extend_lock_period`,arguments:[e.object(t.config),e.object(a),e.object(t.table),e.object(t.treasury),e.pure(o),e.object(He)]})},extendLockAmount:(a,o)=>{e.moveCall({target:`${t.pkgId}::ve_sca::lock_more_sca`,arguments:[e.object(t.config),e.object(a),e.object(t.table),e.object(t.treasury),typeof o=="string"?e.pure(o):o,e.object(He)]})},renewExpiredVeSca:(a,o,r)=>{e.moveCall({target:`${t.pkgId}::ve_sca::renew_expired_ve_sca`,arguments:[e.object(t.config),e.object(a),e.object(t.table),e.object(t.treasury),typeof o=="string"?e.pure(o):o,e.pure(r),e.object(He)]})},redeemSca:a=>e.moveCall({target:`${t.pkgId}::ve_sca::redeem`,arguments:[e.object(t.config),e.object(a),e.object(t.table),e.object(t.treasury),e.object(He)]})}},ue=({builder:n,txBlock:e})=>{let t=Ns({builder:n,txBlock:e});return{normalMethod:t,lockScaQuick:async(a,o,r=!0)=>{let i=_(e),s=await de(n,e),c,l=[];if(a!==void 0&&typeof a=="number"){let b=await n.utils.selectCoinIds(a,te,i),[f,y]=n.utils.takeAmountFromCoins(e,b,a);c=f,l.push(y)}else c=a;let d=n.utils.getUnlockAt(o,s?.unlockAt);r&&$o(a,o,d,s?.unlockAt),console.log(new Date(d*1e3).toLocaleString("en-CA",{hour12:!0}));let p=!s?.unlockAt,m=!p&&s.unlockAt*1e3<=new Date().getTime();if(p||m){if(c)if(p){let b=t.lockSca(c,d);l.push(b)}else{if(s.lockedScaAmount!==0){let b=t.redeemSca(s.keyId);l.push(b)}t.renewExpiredVeSca(s.keyId,c,d)}}else c&&o?(t.extendLockPeriod(s.keyId,d),t.extendLockAmount(s.keyId,c)):o?t.extendLockPeriod(s.keyId,d):c&&t.extendLockAmount(s.keyId,c);l.length>0&&e.transferObjects(l,i)},extendLockPeriodQuick:async(a,o,r=!0)=>{let i=await de(n,e,o),s=n.utils.getUnlockAt(a);r&&Vo(a,s,i?.unlockAt),i&&t.extendLockPeriod(i.keyId,s)},extendLockAmountQuick:async(a,o,r=!0)=>{let i=_(e),s=await de(n,e,o);if(r&&Qo(a,s?.unlockAt),s){let c=await n.utils.selectCoinIds(a,te,i),[l,d]=n.utils.takeAmountFromCoins(e,c,a);t.extendLockAmount(s.keyId,l),e.transferObjects([d],i)}},renewExpiredVeScaQuick:async(a,o,r,i=!0)=>{let s=_(e),c=await de(n,e,r),l=n.utils.getUnlockAt(o,c?.unlockAt);if(i&&Go(a,o,c?.unlockAt),c){let d=[];if(c.lockedScaAmount!==0){let f=t.redeemSca(c.keyId);d.push(f)}let p=await n.utils.selectCoinIds(a,te,s),[m,b]=n.utils.takeAmountFromCoins(e,p,a);d.push(b),t.renewExpiredVeSca(c.keyId,m,l),e.transferObjects(d,s)}},redeemScaQuick:async a=>{let o=_(e),r=await de(n,e,a);if(Te(r?.unlockAt),r){let i=t.redeemSca(r.keyId);e.transferObjects([i],o)}}}};var h=class{params;client;address;builder;query;utils;walletAddress;constructor(e,t){this.params=e,this.client=e.client,this.address=t?.address??new $({id:e?.addressesId||ee,network:e?.networkType}),this.query=t?.query??new xe(e,{address:this.address}),this.utils=t?.utils??new ne(e,{address:this.address,query:this.query}),this.builder=t?.builder??new ve(e,{address:this.address,query:this.query,utils:this.utils}),this.walletAddress=Bs(e.walletAddress)}init(e=!1){(e||!this.address.getAddresses())&&this.address.read(),this.builder.init(e,this.address),this.query.init(e,this.address),this.utils.init(e,this.address)}async getObligations(e){let t=e||this.walletAddress;return this.query.getObligations(t)}async getAllStakeAccounts(e){let t=e||this.walletAddress;return this.query.getAllStakeAccounts(t)}async getStakeAccounts(e,t){let a=t||this.walletAddress;return this.query.getStakeAccounts(e,a)}async getStakePool(e){return this.query.getStakePool(e)}async getStakeRewardPool(e){return this.query.getStakeRewardPool(e)}async openObligation(e){let t=new I,a=L({builder:this.builder,txBlock:t}),o=e||this.walletAddress;return t.setSender(o),a.normalMethod.openObligationEntry(),t}async depositCollateral(e,t,a,o){let r=new I,i=o||this.walletAddress;r.setSender(i);let s=L({builder:this.builder,txBlock:r}),c=await this.query.getObligations(i),l=a||c?.[0]?.id;if(l)await s.addCollateralQuick(t,e,l);else{let[d,p,m]=s.normalMethod.openObligation();await s.addCollateralQuick(t,e,d),s.normalMethod.returnObligation(d,m),r.transferObjects([p],i)}return r}async withdrawCollateral(e,t,a,o,r){let i=new I,s=L({builder:this.builder,txBlock:i}),c=r||this.walletAddress;i.setSender(c);let l=await s.takeCollateralQuick(t,e,a,o);return i.transferObjects([l],c),i}async deposit(e,t,a){let o=new I,r=L({builder:this.builder,txBlock:o}),i=a||this.walletAddress;o.setSender(i);let s=await r.depositQuick(t,e,a);return o.transferObjects([s],i),o}async withdraw(e,t,a){let o=new I,r=a||this.walletAddress,i=L({builder:this.builder,txBlock:o});o.setSender(r);let s=await i.withdrawQuick(t,e);return o.transferObjects([s],r),o}async borrow(e,t,a,o,r){let i=new I,s=L({builder:this.builder,txBlock:i}),c=E({builder:this.builder,txBlock:i}),l=r||this.walletAddress;i.setSender(l);let d=Ie.includes(e);d&&await c.unstakeObligationQuick(a,o);let p=await s.borrowQuick(t,e,a,o);return i.transferObjects([p],l),d&&await c.stakeObligationQuick(a,o),i}async borrowWithBoost(e,t,a,o,r,i){let s=new I,c=L({builder:this.builder,txBlock:s}),l=E({builder:this.builder,txBlock:s}),d=i||this.walletAddress;s.setSender(d);let p=Ie.includes(e);p&&await l.unstakeObligationQuick(a,o);let m=await c.borrowQuick(t,e,a,o);return s.transferObjects([m],d),p&&await l.stakeObligationWithVeScaQuick(a,o,r),s}async repay(e,t,a,o,r){let i=new I,s=L({builder:this.builder,txBlock:i}),c=E({builder:this.builder,txBlock:i}),l=r||this.walletAddress;i.setSender(l);let d=Ie.includes(e);return d&&await c.unstakeObligationQuick(a,o),await s.repayQuick(t,e,a,l),d&&await c.stakeObligationQuick(a,o),i}async createStakeAccount(e,t){let a=new I,o=le({builder:this.builder,txBlock:a}),r=t||this.walletAddress;a.setSender(r);let i=o.normalMethod.createStakeAccount(e);return a.transferObjects([i],r),a}async supplyAndStake(e,t,a,o){let r=new I,i=L({builder:this.builder,txBlock:r}),s=le({builder:this.builder,txBlock:r}),c=o||this.walletAddress;r.setSender(c);let l=await i.depositQuick(t,e,o),d=this.utils.parseMarketCoinName(e);if(!Qe.find(b=>b===d))return r;let p=await this.query.getStakeAccounts(d,c),m=a||(p.length>0?p[0].id:void 0);if(m)await s.stakeQuick(l,d,m);else{let b=s.normalMethod.createStakeAccount(d);await s.stakeQuick(l,d,b),r.transferObjects([b],c)}return r}async unstakeAndWithdraw(e,t,a){let o=new I,r=L({builder:this.builder,txBlock:o}),i=le({builder:this.builder,txBlock:o}),s=this.walletAddress,c=[];o.setSender(s);let l=this.utils.parseMarketCoinName(e);for(let d=0;d<a.length;d++){let p=a[d],[m]=await i.unstakeQuick(p.coin,l,p.id);if(m){let b=r.normalMethod.withdraw(m,e);c.push(b)}}if(t>0){let d=await r.withdrawQuick(t,e);c.push(d)}return o.transferObjects(c,s),o}async stake(e,t,a,o){let r=new I,i=le({builder:this.builder,txBlock:r}),s=o||this.walletAddress;r.setSender(s);let c=await this.query.getStakeAccounts(e,s),l=a||(c.length>0?c[0].id:void 0);if(l)await i.stakeQuick(t,e,l);else{let d=i.normalMethod.createStakeAccount(e);await i.stakeQuick(t,e,d),r.transferObjects([d],s)}return r}async unstake(e,t,a,o){let r=new I,i=le({builder:this.builder,txBlock:r}),s=o||this.walletAddress;r.setSender(s);let c=await i.unstakeQuick(t,e,a);return r.transferObjects(c,s),r}async claim(e,t,a,o){let r=new I,i=le({builder:this.builder,txBlock:r}),s=E({builder:this.builder,txBlock:r}),c=o||this.walletAddress;r.setSender(c);let l={sui:[],sca:[]};for(let d=0;d<e.length;d++){let{stakeMarketCoinName:p,stakeAccountId:m}=e[d],b=i.normalMethod.claim(m,p);l.sui.push(b)}for(let d=0;d<t.length;d++){let{obligationId:p,obligationKey:m,rewardCoinName:b}=t[d],f=s.normalMethod.claimBorrowIncentive(p,m,b);l[b].push(f)}for(let d=0;d<a.length;d++){let{obligationId:p,obligationKey:m,rewardCoinName:b}=a[d],f=s.normalMethod.oldClaimBorrowIncentive(p,m,b);l[b].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(e,t,a){let o=this.builder.createTxBlock(),r=E({builder:this.builder,txBlock:o}),i=a||this.walletAddress;return o.setSender(i),await r.stakeObligationQuick(e,t),o}async unstakeObligation(e,t,a){let o=this.builder.createTxBlock(),r=E({builder:this.builder,txBlock:o}),i=a||this.walletAddress;return o.setSender(i),await r.unstakeObligationQuick(e,t),o}async stakeSca(e,t=!1,a=!1,o,r,i,s,c){let l=new I,d=ue({builder:this.builder,txBlock:l}),p=E({builder:this.builder,txBlock:l}),m=c||this.walletAddress;l.setSender(m);let b=await this.builder.utils.selectCoinIds(e,te,m),[f,y]=this.builder.utils.takeAmountFromCoins(l,b,e),T;return s?d.normalMethod.extendLockAmount(s,f):T=d.normalMethod.lockSca(f,i),o&&r&&(t&&(a?p.normalMethod.oldUnstakeObligation(o,r):p.normalMethod.unstakeObligation(o,r)),p.normalMethod.stakeObligationWithVesca(o,r,s||T)),s||l.transferObjects([T,y],m),l}async stakeMoreSca(e,t,a){let o=new I,r=a||this.walletAddress;return o.setSender(r),o}async extendStakeScaLockPeriod(e,t,a,o,r=!1,i=!1,s){let c=new I,l=ue({builder:this.builder,txBlock:c}),d=E({builder:this.builder,txBlock:c}),p=s||this.walletAddress;return c.setSender(p),l.normalMethod.extendLockPeriod(t,e),a&&o&&(r&&(i?d.normalMethod.oldUnstakeObligation(a,o):d.normalMethod.unstakeObligation(a,o)),d.normalMethod.stakeObligationWithVesca(a,o,t)),c}async extendPeriodAndStakeMoreSca(e,t,a,o,r,i=!1,s=!1,c){let l=new I,d=ue({builder:this.builder,txBlock:l}),p=E({builder:this.builder,txBlock:l}),m=c||this.walletAddress;l.setSender(m);let b=await this.builder.utils.selectCoinIds(e,te,m),[f,y]=this.builder.utils.takeAmountFromCoins(l,b,e);return d.normalMethod.extendLockPeriod(t,a),d.normalMethod.extendLockAmount(t,f),l.transferObjects([y],m),!o||!r||(i&&(s?p.normalMethod.oldUnstakeObligation(o,r):p.normalMethod.unstakeObligation(o,r)),p.normalMethod.stakeObligationWithVesca(o,r,t)),l}async renewExpiredStakeSca(e,t,a,o=!1,r,i,s=!1,c=!1,l){let d=new I,p=ue({builder:this.builder,txBlock:d}),m=E({builder:this.builder,txBlock:d}),b=l||this.walletAddress;if(d.setSender(b),o){let j=p.normalMethod.redeemSca(a);d.transferObjects([j],b)}let f=await this.builder.utils.selectCoinIds(e,te,b),[y,T]=this.builder.utils.takeAmountFromCoins(d,f,e);return d.transferObjects([T],b),p.normalMethod.renewExpiredVeSca(a,y,t),!r||!i||(s&&(c?m.normalMethod.oldUnstakeObligation(r,i):m.normalMethod.unstakeObligation(r,i)),m.normalMethod.stakeObligationWithVesca(r,i,a)),d}async redeemSca(e){let t=new I,a=ue({builder:this.builder,txBlock:t}),o=this.walletAddress;return t.setSender(o),await a.redeemScaQuick(e),t}async migrateAndClaim(e,t,a,o){let r=new I,i=E({builder:this.builder,txBlock:r}),s=this.walletAddress;r.setSender(s);let c=i.normalMethod.oldClaimBorrowIncentive(a,t,o);return r.transferObjects([c],s),i.stakeObligationWithVeScaQuick(a,t,e),r}async withdrawUnlockedSca(e,t){let a=new I,o=ue({builder:this.builder,txBlock:a}),r=t||this.walletAddress;return a.setSender(r),await o.redeemScaQuick(e),a}calculateAvailableClaimCoin(e,t){let a=new cr(e.weightedAmount),r=t.currentPointIndex?cr(t.currentPointIndex-e.index).dividedBy(1e9):1;return a.multipliedBy(r).plus(e.points).shiftedBy(-1*t.coinDecimal)}};var ga=class n extends u{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let a=new h({client:t.suiClient,walletAddress:t.account.address,networkType:t.network.split(":")[1]});return a.init(),a.borrow(this.data.coinName,Number(this.data.amount),this.data.obligationId,this.data.obligationKey,t.account.address)}static fromData(t){return new n(t)}};var ha=class n extends u{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let a=new h({client:t.suiClient,walletAddress:t.account.address,networkType:t.network.split(":")[1]});return await a.init(),a.borrowWithBoost(this.data.coinName,Number(this.data.amount),this.data.obligationId,this.data.obligationKey,this.data.veScaKey,t.account.address)}static fromData(t){return new n(t)}};var ya=class n extends u{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let a=new h({client:t.suiClient,walletAddress:t.account.address,networkType:t.network.split(":")[1]});return a.init(),a.claim(this.data.lendingIncentive,this.data.borrowIncentiveV2,this.data.borrowIncentive,t.account.address)}static fromData(t){return new n(t)}};var Sa=class n extends u{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let a=new h({client:t.suiClient,walletAddress:t.account.address,networkType:t.network.split(":")[1]});return a.init(),a.depositCollateral(this.data.collateralCoinName,Number(this.data.amount),this.data.obligationId,t.account.address)}static fromData(t){return new n(t)}};var wa=class n extends u{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let a=new h({client:t.suiClient,walletAddress:t.account.address,networkType:t.network.split(":")[1]});return a.init(),a.extendPeriodAndStakeMoreSca(this.data.amount,this.data.veScaKey,this.data.lockPeriodInDays,this.data.obligationId,this.data.obligationKey,this.data.isObligationLocked,this.data.isOldBorrowIncentive,t.account.address)}static fromData(t){return new n(t)}};var Ca=class n extends u{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let a=new h({client:t.suiClient,walletAddress:t.account.address,networkType:t.network.split(":")[1]});return a.init(),a.extendStakeScaLockPeriod(this.data.lockPeriodInDays,this.data.veScaKey,this.data.obligationId,this.data.obligationKey,this.data.isObligationLocked,this.data.isOldBorrowIncentive,t.account.address)}static fromData(t){return new n(t)}};var Ia=class n extends u{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let a=new h({client:t.suiClient,walletAddress:t.account.address,networkType:t.network.split(":")[1]});return await a.init(),a.migrateAndClaim(this.data.veScaKey,this.data.obligationKey,this.data.obligationId,this.data.rewardCoinName)}static fromData(t){return new n(t)}};var Ta=class n extends u{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let a=t.network.split(":")[1],o=new h({client:t.suiClient,walletAddress:t.account.address,networkType:a});return o.init(),o.openObligation()}static fromData(t){return new n(t)}};var ka=class n extends u{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let a=t.network.split(":")[1],o=new h({client:t.suiClient,walletAddress:t.account.address,networkType:a});return o.init(),o.redeemSca(this.data.veScaKey)}static fromData(t){return new n(t)}};var xa=class n extends u{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let a=new h({client:t.suiClient,walletAddress:t.account.address,networkType:t.network.split(":")[1]});return a.init(),a.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,t.account.address)}static fromData(t){return new n(t)}};var va=class n extends u{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let a=new h({client:t.suiClient,walletAddress:t.account.address,networkType:t.network.split(":")[1]});return a.init(),a.repay(this.data.coinName,Number(this.data.amount),this.data.obligationId,this.data.obligationKey,t.account.address)}static fromData(t){return new n(t)}};var Aa=class n extends u{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let a=new h({client:t.suiClient,walletAddress:t.account.address,networkType:t.network.split(":")[1]});return a.init(),a.stakeSca(this.data.amount,this.data.isObligationLocked,this.data.isOldBorrowIncentive,this.data.obligationId,this.data.obligationKey,this.data.lockPeriodInDays,this.data.veScaKey,t.account.address)}static fromData(t){return new n(t)}};var Oa=class n extends u{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let a=new h({client:t.suiClient,walletAddress:t.account.address,networkType:t.network.split(":")[1]});return a.init(),a.stake(this.data.marketCoinName,Number(this.data.amount),void 0,t.account.address)}static fromData(t){return new n(t)}};var Pa=class n extends u{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let a=t.network.split(":")[1],o=new h({client:t.suiClient,walletAddress:t.account.address,networkType:a});return o.init(),o.supplyAndStake(this.data.coinName,Number(this.data.amount),this.data.stakeAccountId,t.account.address)}static fromData(t){return new n(t)}};var Da=class n extends u{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let a=t.network.split(":")[1],o=new h({client:t.suiClient,walletAddress:t.account.address,networkType:a});return o.init(),o.deposit(this.data.coinName,Number(this.data.amount),t.account.address)}static fromData(t){return new n(t)}};var _a=class n extends u{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let a=new h({client:t.suiClient,walletAddress:t.account.address,networkType:t.network.split(":")[1]});return a.init(),a.unstake(this.data.marketCoinName,Number(this.data.amount),void 0,t.account.address)}static fromData(t){return new n(t)}};var ja=class n extends u{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let a=t.network.split(":")[1],o=new h({client:t.suiClient,walletAddress:t.account.address,networkType:a});return o.init(),o.unstakeAndWithdraw(this.data.coinName,Number(this.data.amount),this.data.stakeAccountId)}static fromData(t){return new n(t)}};var Ra=class n extends u{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let a=new h({client:t.suiClient,walletAddress:t.account.address,networkType:t.network.split(":")[1]});return a.init(),a.withdrawCollateral(this.data.collateralCoinName,Number(this.data.amount),this.data.obligationId,this.data.obligationKey,t.account.address)}static fromData(t){return new n(t)}};var Na=class n extends u{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let a=t.network.split(":")[1],o=new h({client:t.suiClient,walletAddress:t.account.address,networkType:a});return o.init(),o.withdraw(this.data.coinName,Number(this.data.amount),t.account.address)}static fromData(t){return new n(t)}};var Ba=class n extends u{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let a=new h({client:t.suiClient,walletAddress:t.account.address,networkType:t.network.split(":")[1]});return a.init(),a.withdrawUnlockedSca(this.data.vescaKey,t.account.address)}static fromData(t){return new n(t)}};var Ma=class{application="scallop";async deserialize(e){let t=new ve({client:e.suiClient,walletAddress:e.account.address,networkType:e.network.split(":")[1]});await t.init();let{transactionBlock:a}=e,r=new sa(a,t).decode();return{txType:Ms.Other,txSubType:r.type,intentionData:r.intentionData}}async build(e){let{suiClient:t,account:a,network:o}=e,r;switch(e.txSubType){case"SupplyLending":r=Da.fromData(e.intentionData);break;case"WithdrawLending":r=Na.fromData(e.intentionData);break;case"Borrow":r=ga.fromData(e.intentionData);break;case"Repay":r=va.fromData(e.intentionData);break;case"DepositCollateral":r=Sa.fromData(e.intentionData);break;case"WithdrawCollateral":r=Ra.fromData(e.intentionData);break;case"OpenObligation":r=Ta.fromData(e.intentionData);break;case"StakeSpool":r=Oa.fromData(e.intentionData);break;case"UnstakeSpool":r=_a.fromData(e.intentionData);break;case"ClaimIncentiveReward":r=ya.fromData(e.intentionData);break;case"BorrowWithBoost":r=ha.fromData(e.intentionData);break;case"StakeSca":r=Aa.fromData(e.intentionData);break;case"ExtendStakePeriod":r=Ca.fromData(e.intentionData);break;case"ExtendPeriodAndStakeMore":r=wa.fromData(e.intentionData);break;case"RenewExpStakePeriod":r=xa.fromData(e.intentionData);break;case"WithdrawStakedSca":r=Ba.fromData(e.intentionData);break;case"SupplyAndStakeLending":r=Pa.fromData(e.intentionData);break;case"WithdrawAndUnstakeLending":r=ja.fromData(e.intentionData);break;case"RedeemSca":r=ka.fromData(e.intentionData);break;case"MigrateAndClaim":r=Ia.fromData(e.intentionData);break;default:throw new Error("not implemented")}return r.build({suiClient:t,account:a,network:o})}};import{TransactionType as ec}from"@msafe/sui3-utils";import{TurbosSdk as tc}from"turbos-clmm-sdk";import{TransactionType as V}from"@msafe/sui3-utils";import{bcs as dr}from"@mysten/sui.js/bcs";import{normalizeStructTag as Ls,normalizeSuiAddress as ze}from"@mysten/sui.js/utils";var P={PackageId:"0x9632f61a796fc54952d9151d80b319e066cba5498a27b495c99e113db09726b1"},W={PackageId:"0x02fe4933f4521250e55a15441096d1d4a38a7311195b0bca126fc0138c1f5a97",Claim:"0x0c822cec42f7ca703696b4232f1c47b348330c23580172a29aab465bc071d894",turbosCoinType:"0x5d1f47ea69bb0de31c313d7acf89b890dbb8991ea8e03c6c355171f84bb1ba4a::turbos::TURBOS"};import{BN as Ws}from"turbos-clmm-sdk";var lr=[`${P.PackageId}::swap_router::swap_a_b`,`${P.PackageId}::swap_router::swap_b_a`],Nn=[`${P.PackageId}::swap_router::swap_a_b_b_c`,`${P.PackageId}::swap_router::swap_a_b_c_b`,`${P.PackageId}::swap_router::swap_b_a_b_c`,`${P.PackageId}::swap_router::swap_b_a_c_b`],Us=(n,e)=>{if(n===1)switch(Nn.findIndex(o=>o===e)){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: ${e}`)}switch(lr.findIndex(a=>a===e)){case 0:return[!0];case 1:return[!1];default:throw new Error(`not target: ${e}`)}},Ea=class{constructor(e,t){this.txb=e;this.turbosSdk=t}get transactions(){return this.txb.blockData.transactions}decode(e){if(this.isSwapTransaction())return this.decodeSwap();if(this.isAddLiquidityTransaction())return this.decodeAddLiquidity();if(this.isIncreaseLiquidityTransaction())return this.decodeIncreaseLiquidity(e);if(this.isRemoveLiquidityTransaction())return this.decodeRemoveLiquidity(e);if(this.isDecreaseLiquidityTransaction())return this.decodeDecreaseLiquidity(e);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();throw new Error("Unknown transaction type")}getMoveCallTransaction(e){return this.transactions.find(t=>t.kind==="MoveCall"&&t.target===e)}getMoveCallsTransaction(e){return e.every(t=>this.transactions.find(a=>a.kind==="MoveCall"&&a.target===t))}getSwapMoveCallTransaction(e){return this.transactions.find(t=>t.kind==="MoveCall"&&e.includes(t.target))}isSwapTransaction(){return!!this.getSwapMoveCallTransaction([...lr,...Nn])}isAddLiquidityTransaction(){return!!this.getMoveCallTransaction(`${P.PackageId}::position_manager::mint`)}isIncreaseLiquidityTransaction(){return!!this.getMoveCallTransaction(`${P.PackageId}::position_manager::increase_liquidity`)}isDecreaseLiquidityTransaction(){return!!this.getMoveCallTransaction(`${P.PackageId}::position_manager::decrease_liquidity`)}isCollectFeeTransaction(){return!!this.getMoveCallTransaction(`${P.PackageId}::position_manager::collect`)}isCollectRewardTransaction(){return!!this.getMoveCallTransaction(`${P.PackageId}::position_manager::collect_reward`)}isBurnTransaction(){return!!this.getMoveCallTransaction(`${P.PackageId}::position_manager::burn`)}isPrixJoinTransaction(){return!!this.getMoveCallTransaction(`${W.PackageId}::claim::join`)}isPrixClaimTransaction(){return!!this.getMoveCallTransaction(`${W.PackageId}::claim::claim`)}isRemoveLiquidityTransaction(){return!!this.getMoveCallsTransaction([`${P.PackageId}::position_manager::decrease_liquidity`,`${P.PackageId}::position_manager::burn`])}decodeSwap(){let e=this.transactions.find(m=>m.kind==="MoveCall"),t=0;Nn.includes(e.target)&&(t=1);let a=Us(t,e.target),o=a.map((m,b)=>{let f=this.helper.decodeSharedObjectId(b),y=this.helper.decodeInputU128(4+b+t),T=this.turbosSdk.math.sqrtPriceX64ToTickIndex(new Ws(y.toString()));return{pool:f,a2b:m,nextTickIndex:T}}),r=a[0]||t===1?e.typeArguments[0]:e.typeArguments[1],i=t===1?e.typeArguments[4]:a[0]?e.typeArguments[1]:e.typeArguments[0],s=this.helper.decodeInputAddress(6+2*t),c=this.helper.decodeInputU64(7+2*t),l=this.helper.decodeInputBool(5+2*t),d=this.helper.decodeInputU64(2+t),p=this.helper.decodeInputU64(3+t);return{txType:V.Other,type:"Swap",intentionData:{routes:o,coinTypeA:r,coinTypeB:i,address:s,amountA:l?d:p,amountB:l?p:d,amountSpecifiedIsInput:l,slippage:"0.1",deadline:c}}}decodeAddLiquidity(){let e=this.helper.decodeSharedObjectId(0),t=this.helper.decodeInputAddress(12),a=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:V.Other,type:"AddLiquidity",intentionData:{pool:e,slippage:10,address:t,amountA:a,amountB:o,tickLower:i?-r:r,tickUpper:c?-s:s,deadline:l}}}decodeIncreaseLiquidity(e){let t=this.helper.decodeSharedObjectId(0),a=this.helper.decodeSharedObjectId(4),o=this.helper.decodeInputU64(5),r=this.helper.decodeInputU64(6),i=this.helper.decodeInputU64(9);return{txType:V.Other,type:"IncreaseLiquidity",intentionData:{pool:t,slippage:10,address:e,amountA:o,amountB:r,nft:a,deadline:i}}}decodeDecreaseLiquidity(e){let t=this.helper.decodeSharedObjectId(0),a=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:V.Other,type:"DecreaseLiquidity",intentionData:{pool:t,decreaseLiquidity:o,nft:a,amountA:r,amountB:i,slippage:10,address:e,deadline:s}}}decodeCollectFee(){let e=this.helper.decodeSharedObjectId(0),t=this.helper.decodeSharedObjectId(2),a=this.helper.decodeInputAddress(5),o=this.helper.decodeInputU64(3),r=this.helper.decodeInputU64(4),i=this.helper.decodeInputU64(6);return{txType:V.Other,type:"CollectFee",intentionData:{pool:e,address:a,collectAmountA:o,collectAmountB:r,nft:t,deadline:i}}}decodeCollectReward(){let e=this.helper.decodeSharedObjectId(0),t=this.helper.decodeSharedObjectId(2),a=this.helper.decodeInputAddress(6),o=this.collectRewardHelper.map(i=>i.decodeInputU64(5)),r=this.helper.decodeInputU64(7);return{txType:V.Other,type:"CollectReward",intentionData:{pool:e,address:a,rewardAmounts:o,nft:t,deadline:r}}}decodeBurn(){let e=this.helper.decodeSharedObjectId(0),t=this.helper.decodeSharedObjectId(2);return{txType:V.Other,type:"Burn",intentionData:{pool:e,nft:t}}}decodeRemoveLiquidity(e){let t=this.decreaseLiquidityHelper.decodeSharedObjectId(0),a=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(p=>p.decodeInputU64(5)),l=this.collectFeeHelper.decodeInputU64(3)||0,d=this.collectFeeHelper.decodeInputU64(4)||0;return{txType:V.Other,type:"RemoveLiquidity",intentionData:{pool:t,decreaseLiquidity:o,nft:a,amountA:r,amountB:i,slippage:10,address:e,collectAmountA:l,collectAmountB:d,rewardAmounts:c,deadline:s}}}decodePrixClaim(){return{txType:V.Other,type:"PrixClaim",intentionData:{}}}decodePrixJoin(){return{txType:V.Other,type:"PrixJoin",intentionData:{}}}get helper(){let e=this.transactions.find(t=>t.kind==="MoveCall"&&t.target!=="0x2::coin::zero");return new Oe(e,this.txb)}get collectRewardHelper(){return this.transactions.filter(t=>t.kind==="MoveCall"&&t.target===`${P.PackageId}::position_manager::collect_reward`).map(t=>new Oe(t,this.txb))}get collectFeeHelper(){let e=this.transactions.find(t=>t.kind==="MoveCall"&&t.target===`${P.PackageId}::position_manager::collect`);return new Oe(e,this.txb)}get decreaseLiquidityHelper(){let e=this.transactions.find(t=>t.kind==="MoveCall"&&t.target===`${P.PackageId}::position_manager::decrease_liquidity`);return new Oe(e,this.txb)}},Oe=class n{constructor(e,t){this.moveCall=e;this.txb=t}decodeSharedObjectId(e){let t=this.getInputParam(e);return n.getSharedObjectId(t)}decodeOwnedObjectId(e){let t=this.getInputParam(e);return n.getOwnedObjectId(t)}decodeInputU128(e){let t=this.decodePureArg(e,"u128");return Number(t)}decodeInputU64(e){let t=this.decodePureArg(e,"u64");return Number(t)}decodeInputU32(e){let t=this.decodePureArg(e,"u32");return Number(t)}decodeInputU8(e){let t=this.decodePureArg(e,"u8");return Number(t)}decodeInputAddress(e){let t=this.decodePureArg(e,"address");return ze(t)}decodeInputString(e){return this.decodePureArg(e,"string")}decodeInputBool(e){return this.decodePureArg(e,"bool")}decodePureArg(e,t){let a=this.getInputParam(e);return n.getPureInputValue(a,t)}getInputParam(e){let t=this.moveCall.arguments[e];if(t.kind!=="Input")throw new Error("not input type");return this.txb.blockData.inputs[t.index]}static getPureInputValue(e,t){if(e.type!=="pure")throw new Error("not pure argument");if(typeof e.value=="object"&&"Pure"in e.value){let a=e.value.Pure;return dr.de(t,new Uint8Array(a))}return e.value}static getOwnedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value=="object"){if(!("Object"in e.value)||!("ImmOrOwned"in e.value.Object))throw new Error("not ImmOrOwned");return ze(e.value.Object.ImmOrOwned.objectId)}return ze(e.value)}static getSharedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value!="object")return ze(e.value);if(!("Object"in e.value)||!("Shared"in e.value.Object))throw new Error("not Shared");return ze(e.value.Object.Shared.objectId)}static getPureInput(e,t){if(e.type!=="pure")throw new Error("not pure argument");if(typeof e.value!="object")return e.value;if(!("Pure"in e.value))throw new Error("Pure not in value");let a=e.value.Pure;return dr.de(t,new Uint8Array(a))}typeArg(e){return Ls(this.moveCall.typeArguments[e])}txArg(e){return this.moveCall.arguments[e]}};import{TurbosSdk as Fs}from"turbos-clmm-sdk";var La=class n extends u{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let a=new Fs(t.network.replace("sui:",""),t.suiClient),{pool:o,address:r,amountA:i,amountB:s,slippage:c,tickLower:l,tickUpper:d,deadline:p,txb:m}=this.data;return a.pool.addLiquidity({pool:o,slippage:c,address:r,amountA:i,amountB:s,tickLower:l,tickUpper:d,deadline:p,txb:m})}static fromData(t){return new n(t)}};import{TurbosSdk as qs}from"turbos-clmm-sdk";var Wa=class n extends u{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let a=new qs(t.network.replace("sui:",""),t.suiClient),{pool:o,nft:r,txb:i}=this.data;return a.nft.burn({pool:o,nft:r,txb:i})}static fromData(t){return new n(t)}};import{TurbosSdk as $s}from"turbos-clmm-sdk";var Ua=class n extends u{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let a=new $s(t.network.replace("sui:",""),t.suiClient),{pool:o,address:r,nft:i,collectAmountA:s,collectAmountB:c,deadline:l,txb:d}=this.data;return a.pool.collectFee({pool:o,address:r,collectAmountA:s,collectAmountB:c,nft:i,deadline:l,txb:d})}static fromData(t){return new n(t)}};import{TurbosSdk as Vs}from"turbos-clmm-sdk";var Fa=class n extends u{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let a=new Vs(t.network.replace("sui:",""),t.suiClient),{pool:o,address:r,nft:i,rewardAmounts:s,deadline:c,txb:l}=this.data;return a.pool.collectReward({pool:o,address:r,rewardAmounts:s,nft:i,deadline:c,txb:l})}static fromData(t){return new n(t)}};import{TurbosSdk as Qs}from"turbos-clmm-sdk";var qa=class n extends u{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let a=new Qs(t.network.replace("sui:",""),t.suiClient),{fee:o,address:r,tickLower:i,tickUpper:s,sqrtPrice:c,slippage:l,coinTypeA:d,coinTypeB:p,amountA:m,amountB:b,deadline:f,txb:y}=this.data;return a.pool.createPool({fee:o,amountA:m,amountB:b,address:r,tickLower:i,tickUpper:s,sqrtPrice:c,slippage:l,coinTypeA:d,coinTypeB:p,deadline:f,txb:y})}static fromData(t){return new n(t)}};import{TurbosSdk as Gs}from"turbos-clmm-sdk";var $a=class n extends u{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let a=new Gs(t.network.replace("sui:",""),t.suiClient),{pool:o,address:r,amountA:i,amountB:s,slippage:c,nft:l,decreaseLiquidity:d,deadline:p,txb:m}=this.data;return a.pool.decreaseLiquidity({pool:o,slippage:c,address:r,amountA:i,amountB:s,nft:l,decreaseLiquidity:d,deadline:p,txb:m})}static fromData(t){return new n(t)}};import{TurbosSdk as Ks}from"turbos-clmm-sdk";var Va=class n extends u{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let a=new Ks(t.network.replace("sui:",""),t.suiClient),{pool:o,address:r,amountA:i,amountB:s,slippage:c,nft:l,deadline:d,txb:p}=this.data;return a.pool.increaseLiquidity({pool:o,slippage:c,address:r,amountA:i,amountB:s,nft:l,deadline:d,txb:p})}static fromData(t){return new n(t)}};import{TransactionBlock as Hs}from"@mysten/sui.js/transactions";import{SUI_CLOCK_OBJECT_ID as zs}from"@mysten/sui.js/utils";var Qa=class n extends u{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let a=new Hs;return a.moveCall({target:`${W.PackageId}::claim::claim`,typeArguments:[W.turbosCoinType],arguments:[a.object(W.Claim),a.object(zs)]}),a}static fromData(t){return new n(t)}};import{TransactionBlock as Js}from"@mysten/sui.js/transactions";var Ga=class n extends u{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let a=new Js;return a.moveCall({target:`${W.PackageId}::claim::join`,typeArguments:[W.turbosCoinType],arguments:[a.object(W.Claim)]}),a}static fromData(t){return new n(t)}};import{TransactionBlock as Xs}from"@mysten/sui.js/transactions";import{TurbosSdk as Ys}from"turbos-clmm-sdk";var Ka=class n extends u{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let a=new Ys(t.network.replace("sui:",""),t.suiClient),o=new Xs;return o=await a.pool.collectFee({txb:o,...this.data}),o=await a.pool.collectReward({txb:o,...this.data}),o=await a.pool.decreaseLiquidity({txb:o,...this.data}),o=await a.nft.burn({txb:o,nft:this.data.nft,pool:this.data.pool}),o}static fromData(t){return new n(t)}};import{TurbosSdk as Zs}from"turbos-clmm-sdk";var Ha=class n extends u{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){let a=new Zs(t.network.replace("sui:",""),t.suiClient),{routes:o,coinTypeA:r,coinTypeB:i,address:s,amountA:c,amountB:l,slippage:d,amountSpecifiedIsInput:p,deadline:m,txb:b}=this.data;return a.trade.swap({routes:o,coinTypeA:r,coinTypeB:i,address:s,amountA:c,amountB:l,amountSpecifiedIsInput:p,slippage:d,deadline:m,txb:b})}static fromData(t){return new n(t)}};var za=class{application="turbos";async deserialize(e){let t=new tc(e.network.replace("sui:",""),e.suiClient),{transactionBlock:a,account:o}=e,i=new Ea(a,t).decode(o.address);return{txType:ec.Other,txSubType:i.type,intentionData:i.intentionData}}async build(e){let{suiClient:t,account:a,network:o}=e,r;switch(e.txSubType){case"CreatePool":r=qa.fromData(e.intentionData);break;case"AddLiquidity":r=La.fromData(e.intentionData);break;case"IncreaseLiquidity":r=Va.fromData(e.intentionData);break;case"DecreaseLiquidity":r=$a.fromData(e.intentionData);break;case"RemoveLiquidity":r=Ka.fromData(e.intentionData);break;case"CollectFee":r=Ua.fromData(e.intentionData);break;case"CollectReward":r=Fa.fromData(e.intentionData);break;case"Burn":r=Wa.fromData(e.intentionData);break;case"Swap":r=Ha.fromData(e.intentionData);break;case"PrixJoin":r=Ga.fromData(e.intentionData);break;case"PrixClaim":r=Qa.fromData(e.intentionData);break;default:throw new Error("not implemented")}return r.build({suiClient:t,account:a,network:o})}};import{TransactionType as cc}from"@msafe/sui3-utils";import{TransactionType as Bn}from"@msafe/sui3-utils";import{bcs as ur}from"@mysten/sui.js/bcs";import{normalizeStructTag as oc,normalizeSuiAddress as Je}from"@mysten/sui.js/utils";var ac={packageId:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55",poolObjectId:"0x7fa2faa111b8c65bea48a23049bfd81ca8f971a262d981dcd9a17c3825cb5baf",metadataObjectId:"0x680cd26af32b2bde8d3361e804c53ec1d1cfe24c7f039eb7f549e8dfde389a60",systemStateObjectId:"0x0000000000000000000000000000000000000000000000000000000000000005",certType:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55::cert::CERT"},x=ac;var Ja=class{constructor(e){this.txb=e}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(e){return this.transactions.find(t=>t.kind==="MoveCall"&&t.target===e)}isStakeTransaction(){return!!this.getMoveCallTransaction(`${x.packageId}::native_pool::stake`)}isUnStakeTransaction(){return!!this.getMoveCallTransaction(`${x.packageId}::native_pool::unstake`)}isClaimTicketTransaction(){return!!this.getMoveCallTransaction(`${x.packageId}::native_pool::burn_ticket`)}decodeStake(){let e=this.transactions[0].amounts[0].value.toNumber();return{txType:Bn.Other,type:"Stake",intentionData:{amount:e}}}decodeUnStake(){let t=this.transactions.find(a=>a.kind==="SplitCoins").amounts[0].value.toNumber();return{txType:Bn.Other,type:"UnStake",intentionData:{amount:t}}}decodeClaimTicket(){let e=this.helper.decodeOwnedObjectId(2);return console.log(e),{txType:Bn.Other,type:"ClaimTicket",intentionData:{ticketId:e}}}get helper(){let e=this.transactions.find(t=>t.kind==="MoveCall"&&t.target.startsWith(x.packageId));return new Mn(e,this.txb)}},Mn=class n{constructor(e,t){this.moveCall=e;this.txb=t}decodeSharedObjectId(e){let t=this.getInputParam(e);return n.getSharedObjectId(t)}decodeOwnedObjectId(e){let t=this.getInputParam(e);return n.getOwnedObjectId(t)}decodeInputU64(e){let t=this.decodePureArg(e,"u64");return Number(t)}decodeInputU8(e){let t=this.decodePureArg(e,"u8");return Number(t)}decodeInputAddress(e){let t=this.decodePureArg(e,"address");return Je(t)}decodeInputString(e){return this.decodePureArg(e,"string")}decodeInputBool(e){return this.decodePureArg(e,"bool")}decodePureArg(e,t){let a=this.getInputParam(e);return n.getPureInputValue(a,t)}getInputParam(e){let t=this.moveCall.arguments[e];if(t.kind!=="Input")throw new Error("not input type");return this.txb.blockData.inputs[t.index]}static getPureInputValue(e,t){if(e.type!=="pure")throw new Error("not pure argument");if(typeof e.value=="object"&&"Pure"in e.value){let a=e.value.Pure;return ur.de(t,new Uint8Array(a))}return e.value}static getOwnedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value=="object"){if(!("Object"in e.value)||!("ImmOrOwned"in e.value.Object))throw new Error("not ImmOrOwned");return Je(e.value.Object.ImmOrOwned.objectId)}return Je(e.value)}static getSharedObjectId(e){if(e.type!=="object")throw new Error(`not object argument: ${JSON.stringify(e)}`);if(typeof e.value!="object")return Je(e.value);if(!("Object"in e.value)||!("Shared"in e.value.Object))throw new Error("not Shared");return Je(e.value.Object.Shared.objectId)}static getPureInput(e,t){if(e.type!=="pure")throw new Error("not pure argument");if(typeof e.value!="object")return e.value;if(!("Pure"in e.value))throw new Error("Pure not in value");let a=e.value.Pure;return ur.de(t,new Uint8Array(a))}typeArg(e){return oc(this.moveCall.typeArguments[e])}txArg(e){return this.moveCall.arguments[e]}};import{TransactionBlock as rc}from"@mysten/sui.js/transactions";var Xa=class n extends u{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){console.log(t);let a=new rc,{ticketId:o}=this.data;return a.moveCall({target:`${x.packageId}::native_pool::burn_ticket`,arguments:[a.object(x.poolObjectId),a.object(x.systemStateObjectId),a.object(o)]}),a}static fromData(t){return new n(t)}};import{TransactionBlock as ic}from"@mysten/sui.js/transactions";var Ya=class n extends u{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){console.log(t);let a=new ic,{amount:o}=this.data,[r]=a.splitCoins(a.gas,[a.pure(o)]);return a.moveCall({target:`${x.packageId}::native_pool::stake`,arguments:[a.object(x.poolObjectId),a.object(x.metadataObjectId),a.object(x.systemStateObjectId),r]}),a}static fromData(t){return new n(t)}};import{TransactionBlock as sc}from"@mysten/sui.js/transactions";var Za=class n extends u{constructor(t){super(t);this.data=t}txType;txSubType;async build(t){console.log(t);let a=new sc,{amount:o}=this.data,r=(await t.suiClient.getAllCoins({owner:t.account.address,limit:100})).data,[i,...s]=r.filter(d=>d.coinType.split("::")[0]===x.certType),c=a.object(i.coinObjectId);s.length&&a.mergeCoins(c,s.map(d=>a.object(d.coinObjectId)));let l=a.splitCoins(a.object(i.coinObjectId),[a.pure(o)]);return a.moveCall({target:`${x.packageId}::native_pool::unstake`,arguments:[a.object(x.poolObjectId),a.object(x.metadataObjectId),a.object(x.systemStateObjectId),l]}),a}static fromData(t){return new n(t)}};var en=class{application="volo";async deserialize(e){let{transactionBlock:t}=e,o=new Ja(t).decode();return{txType:cc.Other,txSubType:o.type,intentionData:o.intentionData}}async build(e){let{suiClient:t,account:a}=e,o;switch(e.txSubType){case"Stake":o=Ya.fromData(e.intentionData);break;case"UnStake":o=Za.fromData(e.intentionData);break;case"ClaimTicket":o=Xa.fromData(e.intentionData);break;default:throw new Error("not implemented")}return o.build({suiClient:t,account:a})}};var qI=new na([new Gt,new ta,new qt,new aa,new gt,new za,new Ma,new en]);export{qI as appHelpers};
|
|
2
2
|
//# sourceMappingURL=index.mjs.map
|