@msafe/sui-app-store 0.0.156 → 0.0.157
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 +2 -1
package/dist/index.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var Fi=Object.defineProperty;var No=(a,t)=>{for(var e in t)Fi(a,e,{get:t[e],enumerable:!0})};import{TransactionType as Gi}from"@msafe/sui3-utils";import{TransactionType as Vi}from"@msafe/sui3-utils";import $i from"sort-keys-recursive";var h=class{constructor(t){this.data=t}serialize(){return JSON.stringify($i(this.data))}};import{Transaction as Qi}from"@mysten/sui/transactions";import{BucketClient as qi}from"bucket-protocol-sdk";var Mo=(a,t)=>{let e=a==="sui:mainnet"?"mainnet":"testnet";return new qi(e,t.address)};var se=async(a,t,e,n)=>{let{coinType:o,amount:r}=a,i=new Qi;return await Mo(e,t).getPsmTx(i,o,r,n,t.address),i};var ce=class a extends h{constructor(e){super(e);this.data=e}txType=Vi.Other;txSubType="psm-in";async build(e){let{account:n,network:o}=e;return await se(this.data,n,o,!1)}static fromData(e){return new a(e)}};import{TransactionType as Hi}from"@msafe/sui3-utils";var le=class a extends h{constructor(e){super(e);this.data=e}txType=Hi.Other;txSubType="psm-out";async build(e){let{account:n,network:o}=e;return await se(this.data,n,o,!0)}static fromData(e){return new a(e)}};import{TransactionType as Eo}from"@msafe/sui3-utils";import{bcs as Ki}from"@mysten/sui/bcs";var de=class{constructor(t){this.transaction=t}decode(){if(this.isPsmInTransaction())return this.decodePsmIn();if(this.isPsmOutTransaction())return this.decodePsmOut();throw new Error("Unknown transaction type")}get commands(){return this.transaction.getData().commands}get inputs(){return this.transaction.getData().inputs}getMoveCallCommand(t){return this.commands.find(e=>e.$kind==="MoveCall"&&e.MoveCall.function===t)}getSplitCoinsCommands(){return this.commands.filter(t=>t.$kind==="SplitCoins")}getTransferCommands(){return this.commands.filter(t=>t.$kind==="TransferObjects")}isPsmInTransaction(){return!!this.getMoveCallCommand("charge_reservoir")}isPsmOutTransaction(){return!!this.getMoveCallCommand("discharge_reservoir")}decodePsmIn(){let t="0",e=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];e.$kind=="Input"&&(t=this.getPureInputU64(e.Input));let o=this.getMoveCallCommand("charge_reservoir").MoveCall.typeArguments[0];return console.log("Decoder.decodePsmIn",o,t),{txType:Eo.Other,type:"psm-in",intentionData:{coinType:o,amount:t}}}decodePsmOut(){let t="0",e=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];e.$kind=="Input"&&(t=this.getPureInputU64(e.Input));let o=this.getMoveCallCommand("discharge_reservoir").MoveCall.typeArguments[0];return console.log("Decoder.decodePsmOut",o,t),{txType:Eo.Other,type:"psm-out",intentionData:{coinType:o,amount:t}}}getPureInputU64(t){let e=this.inputs[t];if(e.$kind!=="Pure")throw new Error("not pure argument");return Ki.U64.fromBase64(e.Pure.bytes)}};var ue=class{application="bucket";supportSDK="@mysten/sui";async deserialize(t){console.log("Bucket helper deserialize input: ",t);let{transaction:e}=t,o=new de(e).decode();return{txType:Gi.Other,txSubType:o.type,intentionData:o.intentionData}}async build(t){let{suiClient:e,account:n,network:o}=t,r;switch(t.txSubType){case"psm-in":r=ce.fromData(t.intentionData);break;case"psm-out":r=le.fromData(t.intentionData);break;default:throw new Error("not implemented")}return r.build({suiClient:e,account:n,network:o})}};import{TransactionType as Ps}from"@msafe/sui3-utils";import{TransactionType as rs}from"@msafe/sui3-utils";import{AggregatorClient as zi,Env as Ji}from"@cetusprotocol/aggregator-sdk";import{CetusPeripherySDK as Xi}from"@cetusprotocol/cetus-periphery-sdk";import{CetusClmmSDK as Yi}from"@cetusprotocol/cetus-sui-clmm-sdk";import{SuiClient as Zi}from"@mysten/sui/client";var ts={fullRpcUrl:"https://fullnode.mainnet.sui.io/",simulationAccount:{address:"0x326ce9894f08dcaa337fa232641cc34db957aec9ff6614c1186bc9a7508df0bb"},cetus_config:{package_id:"0x95b8d278b876cae22206131fb9724f701c9444515813042f54f0a426c9a3bc2f",published_at:"0x95b8d278b876cae22206131fb9724f701c9444515813042f54f0a426c9a3bc2f",config:{coin_list_id:"0x8cbc11d9e10140db3d230f50b4d30e9b721201c0083615441707ffec1ef77b23",launchpad_pools_id:"0x1098fac992eab3a0ab7acf15bb654fc1cf29b5a6142c4ef1058e6c408dd15115",clmm_pools_id:"0x15b6a27dd9ae03eb455aba03b39e29aad74abd3757b8e18c0755651b2ae5b71e",admin_cap_id:"0x39d78781750e193ce35c45ff32c6c0c3f2941fa3ddaf8595c90c555589ddb113",global_config_id:"0x0408fa4e4a4c03cc0de8f23d0c2bbfe8913d178713c9a271ed4080973fe42d8f",coin_list_handle:"0x49136005e90e28c4695419ed4194cc240603f1ea8eb84e62275eaff088a71063",launchpad_pools_handle:"0x5e194a8efcf653830daf85a85b52e3ae8f65dc39481d54b2382acda25068375c",clmm_pools_handle:"0x37f60eb2d9d227949b95da8fea810db3c32d1e1fa8ed87434fc51664f87d83cb"}},clmm_pool:{package_id:"0x1eabed72c53feb3805120a081dc15963c204dc8d091542592abaf7a35689b2fb",published_at:"0x70968826ad1b4ba895753f634b0aea68d0672908ca1075a2abdf0fc9e0b2fc6a",version:4,config:{pools_id:"0xf699e7f2276f5c9a75944b37a0c5b5d9ddfd2471bf6242483b03ab2887d198d0",global_config_id:"0xdaa46292632c3c4d8f31f23ea0f9b36a28ff3677e9684980e4438403a67a3d8f",global_vault_id:"0xce7bceef26d3ad1f6d9b6f13a953f053e6ed3ca77907516481ce99ae8e588f2b",admin_cap_id:"0x89c1a321291d15ddae5a086c9abc533dff697fde3d89e0ca836c41af73e36a75"}},integrate:{package_id:"0x996c4d9480708fb8b92aa7acf819fb0497b5ec8e65ba06601cae2fb6db3312c3",published_at:"0x8faab90228e4c4df91c41626bbaefa19fc25c514405ac64de54578dec9e6f5ee",version:6},deepbook:{package_id:"0x000000000000000000000000000000000000000000000000000000000000dee9",published_at:"0x000000000000000000000000000000000000000000000000000000000000dee9"},deepbook_endpoint_v2:{package_id:"0x92aee86c01c79146d23938a00c7fff725ee0688c389be36d1bcbe03761b466c6",published_at:"0x92aee86c01c79146d23938a00c7fff725ee0688c389be36d1bcbe03761b466c6"},aggregatorUrl:"https://api-sui.cetus.zone/router",swapCountUrl:"https://api-sui.cetus.zone/v2/sui/swap/count"},es={launchpad:{package_id:"0x80d114c5d474eabc2eb2fcd1a0903f1eb5b5096a8dc4184d72453f7a9be728e4",published_at:"0x80d114c5d474eabc2eb2fcd1a0903f1eb5b5096a8dc4184d72453f7a9be728e4",config:{pools_id:"0xfd8d37f7a1276878972d240302c8efe32f577220c1bbc6c8984d8b60dddfcab3",admin_cap_id:"0x66c70d58c69353714cc6fe2d3a62492d605a96a9821e2bd8274de17219c69980",config_cap_id:"0x02b8d23f033687579966e182c776fe0287cacdbb18bff56c29f141e29a18a4d1"}},ido:{package_id:"0x1192c9e20b4b0a8848a73a8c711b43e38f7ea1f307b556aab6ffab4e982e9c59",published_at:"0x1192c9e20b4b0a8848a73a8c711b43e38f7ea1f307b556aab6ffab4e982e9c59",config:{pools_id:"0xefc209b47acf1f23b29d166440904600229e520ad36228aaf2329b7c16be9762",admin_cap_id:"0x281859d366951830aeeda90779aa170d8ee6845875545470d33ecb890e78c8ce",package_version_id:"0xc93dc996106770af5f4e979b6808518f8cee080f22f35b936f071f59d834bb22"}},xcetus:{package_id:"0x9e69acc50ca03bc943c4f7c5304c2a6002d507b51c11913b247159c60422c606",published_at:"0x9e69acc50ca03bc943c4f7c5304c2a6002d507b51c11913b247159c60422c606",config:{xcetus_manager_id:"0x838b3dbade12b1e602efcaf8c8b818fae643e43176462bf14fd196afa59d1d9d",lock_manager_id:"0x288b59d9dedb51d0bb6cb5e13bfb30885ecf44f8c9076b6f5221c5ef6644fd28",lock_handle_id:"0x7c534bb7b8a2cc21538d0dbedd2437cc64f47106cb4c259b9ff921b5c3cb1a49"}},xcetus_dividends:{package_id:"0x785248249ac457dfd378bdc6d2fbbfec9d1daf65e9d728b820eb4888c8da2c10",published_at:"0x5aa58e1623885bd93de2331d05c29bf4930e54e56beeabcab8fe5385de2d31dc",config:{dividend_manager_id:"0x721c990bfc031d074341c6059a113a59c1febfbd2faeb62d49dcead8408fa6b5",dividend_admin_id:"0x682ba823134f156eac2bcfb27d85a284954a0e61998dc628c40b9bcb4a46ff30",dividend_settle_id:"0xade40abe9f6dd10b83b11085be18f07b63b681cf1c169b041fa16854403388c5",venft_dividends_id:"0x9dcdb97b4307684bedaeaf803d381b12321a31ecbb9dad7df2cd5f64384f9456",venft_dividends_id_v2:"0xaa21fbc1707786d56302952f8327362f4eb9a431a5bc574834e6d46125390de3"}},cetus_faucet:{package_id:"0x6864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b",published_at:"0x6864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b"},xtoken:{package_id:"",published_at:"",config:{xtoken_manager_id:"",lock_manager_id:"",lock_handle_id:""}},xtoken_dividends:{package_id:"",published_at:"",config:{dividend_manager_id:"",dividend_admin_id:"",dividend_settle_id:""}},token_faucet:{package_id:"",published_at:""},booster:{package_id:"",published_at:"",config:{booster_config_id:"",booster_pool_handle:""}},maker_bonus:{package_id:"",published_at:"",config:{maker_config_id:"",maker_pool_handle:""}},liquidity_stratefy:{package_id:"",published_at:"",version:void 0,config:void 0},vaults:{package_id:"0xd3453d9be7e35efe222f78a810bb3af1859fd1600926afced8b4936d825c9a05",published_at:"0xabbd278f738affe762e9df4765b3409bb1e86a355a4f611ad82b278c18108918",version:1,config:{admin_cap_id:"0x78a42978709c4032fab7b33b782b5bcef64c1c6603250bf23644650b72144375",vaults_manager_id:"0x25b82dd2f5ee486ed1c8af144b89a8931cd9c29dee3a86a1bfe194fdea9d04a6",vaults_pool_handle:"0x9036bcc5aa7fd2cceec1659a6a1082871f45bc400c743f50063363457d1738bd",haedal:{package_id:"0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d",published_at:"0x1d56b8ec33c3fae897eb7bb1acb79914e8152faed614868928e684c25c8b198d",version:1,config:{staking_id:"0x47b224762220393057ebf4f70501b6e657c3e56684737568439a04f80849b2ca",coin_type:"0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d::hasui::HASUI"}},volo:{package_id:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55",published_at:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55",version:1,config:{native_pool:"0x7fa2faa111b8c65bea48a23049bfd81ca8f971a262d981dcd9a17c3825cb5baf",vsui_metadata:"0x680cd26af32b2bde8d3361e804c53ec1d1cfe24c7f039eb7f549e8dfde389a60",coin_type:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55::cert::CERT"}},aftermath:{package_id:"0x7f6ce7ade63857c4fd16ef7783fed2dfc4d7fb7e40615abdb653030b76aef0c6",published_at:"0x7f6ce7ade63857c4fd16ef7783fed2dfc4d7fb7e40615abdb653030b76aef0c6",version:1,config:{staked_sui_vault:"0x2f8f6d5da7f13ea37daa397724280483ed062769813b6f31e9788e59cc88994d",referral_vault:"0x4ce9a19b594599536c53edb25d22532f82f18038dc8ef618afd00fbbfb9845ef",safe:"0xeb685899830dd5837b47007809c76d91a098d52aabbf61e8ac467c59e5cc4610",validator_address:"0xd30018ec3f5ff1a3c75656abf927a87d7f0529e6dc89c7ddd1bd27ecb05e3db2",coin_type:"0xf325ce1300e8dac124071d3152c5c5ee6174914f8bc2161e88329cf579246efc::afsui::AFSUI"}}}},limit_order:{package_id:"",published_at:"",version:1,config:{rate_orders_indexer_id:"",rate_orders_indexer_handle:"",global_config_id:"",token_list_handle:"",user_orders_indexer_id:"",user_orders_indexer_handle:""}},frams:{package_id:"0x11ea791d82b5742cc8cab0bf7946035c97d9001d7c3803a93f119753da66f526",published_at:"0xd817d90368dafcbf3b051e96546dea6209bffad23289d66025beef80354dcd6b",version:1,config:{global_config_id:"0x21215f2f6de04b57dd87d9be7bb4e15499aec935e36078e2488f36436d64996e",rewarder_manager_id:"0xe0e155a88c77025056da08db5b1701a91b79edb6167462f768e387c3ed6614d5",rewarder_manager_handle:"0xb32e312cbb3367d6f3d2b4e57c9225e903d29b7b9f612dae2ddf75bdeb26a5aa",admin_cap_id:"0xf10fbf1fea5b7aeaa524b87769461a28c5c977613046360093673991f26d886c"}},dca:{package_id:"",published_at:"",version:0,config:{admin_cap_id:"",global_config_id:"",indexer_id:"",user_indexer_id:"",in_coin_whitelist_id:"",out_coin_whitelist_id:""}}},ns={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"},as={launchpad:{package_id:"0x3beee8416089a5cbff9cfd5c0a2ce2937b0452dc7e2a3ab4dc431c7be05c2335",published_at:"0x3beee8416089a5cbff9cfd5c0a2ce2937b0452dc7e2a3ab4dc431c7be05c2335",config:{pools_id:"0xccc10403ab3da4ae943847908e0e674fe1fdab81c6383e4c6dcd0eea0edade3d",admin_cap_id:"0x8a72713049dbcfc40902ff209dc5e6066fe455d152baa235957c84d7a3b875ed",config_cap_id:"0x16492b4252b01debb60f8a825334020d7fdb9d895b52f8139c98618de30817fc"}},ido:{package_id:"0x1352bf18ef20458f7cc773852d4a90b240015a6a54479dda3a1debfc500bf044",published_at:"0xbd09a0889ea9970b821512428bab3e2fd01e16809a90a325cd3b3d3573eab6a4",config:{pools_id:"0x346bee25ab4d15bcfa9484ef5ebd4d7c94eb665ebaa745ff4094936a7f59a8b1",admin_cap_id:"0xc1bb19a24d3bb65dfd4f3835637b63347c223c67cde4b0888f1a857974f33cbb",package_version_id:"0x3ccf1b38e3259e638b980d4e6b49eac8c5aa94d3cb2ace5e75f0a551c8e67e5e"}},xcetus:{package_id:"0xdebaab6b851fd3414c0a62dbdf8eb752d6b0d31f5cfce5e38541bc6c6daa8966",published_at:"0xdebaab6b851fd3414c0a62dbdf8eb752d6b0d31f5cfce5e38541bc6c6daa8966",config:{xcetus_manager_id:"0x3be34cbad122c8b100ed7157d762b9610e68b3c65734e08bc3c3baf857da807d",lock_manager_id:"0x7c67e805182e3fecd098bd68a6b06c317f28f8c6249bd771e07904a10b424e60",lock_handle_id:"0xc5f3bbfefe9a45c13da7a34bc72cac122ee45d633690476a8ac56bd2c4e78c86"}},xcetus_dividends:{package_id:"0x20d948d640edd0c749f533d41efc5f843f212d441220324ad7959c6e1d281828",published_at:"0x20d948d640edd0c749f533d41efc5f843f212d441220324ad7959c6e1d281828",config:{dividend_manager_id:"0x13b7facb704fae1d199ff0038b8acabc253415a77d142b39189dee97d457e442",dividend_admin_id:"0x5eb78463007422d4130b21f61c180bcd190819b7792f56e00a61df3b8fb928ef",dividend_settle_id:"0x495095e13a170ff494d242ae44ac2c7453011ca6c33cff27498010105e10e4b4",venft_dividends_id:"",venft_dividends_id_v2:""}},cetus_faucet:{package_id:"0x1a69aee6be709054750949959a67aedbb4200583b39586d5e3eabe57f40012c7",published_at:"0x1a69aee6be709054750949959a67aedbb4200583b39586d5e3eabe57f40012c7"},xtoken:{package_id:"",published_at:"",config:{xtoken_manager_id:"",lock_manager_id:"",lock_handle_id:""}},xtoken_dividends:{package_id:"",published_at:"",config:{dividend_manager_id:"",dividend_admin_id:"",dividend_settle_id:""}},token_faucet:{package_id:"",published_at:""},booster:{package_id:"",published_at:"",config:{booster_config_id:"",booster_pool_handle:""}},maker_bonus:{package_id:"",published_at:"",config:{maker_config_id:"",maker_pool_handle:""}},liquidity_stratefy:{package_id:"",published_at:"",version:void 0,config:void 0},vaults:{package_id:"0x25cff94bdb454bae6a5565d09047bfe2b230025ef3bd2199622ec48d854b86b9",published_at:"0x25cff94bdb454bae6a5565d09047bfe2b230025ef3bd2199622ec48d854b86b9",config:{admin_cap_id:"0x9b2d6f5be2650d16d27cd630c4539a76d7793970343ed3cbb023e13f1637c07c",vaults_manager_id:"0xc0a1a937df08880e395d85014ff40c74f13abe7a53abdbffea36f51adaaaf79e",vaults_pool_handle:"0x3ab02203de753de9c8198cc0ce7594dc960878f2c34c5c5a4b7742082241860a"}},limit_order:{package_id:"",published_at:"",version:1,config:{rate_orders_indexer_id:"",rate_orders_indexer_handle:"",global_config_id:"",token_list_handle:"",user_orders_indexer_id:"",user_orders_indexer_handle:""}},frams:{package_id:"0xfa0d98e99c1dbdbea1b0fe089fa93ebab40a7719ae4160c42cc78ebfe029fda0",published_at:"0xfa0d98e99c1dbdbea1b0fe089fa93ebab40a7719ae4160c42cc78ebfe029fda0",config:{global_config_id:"0x5082c7a5ee9a758025d7b0a5e8aa08b56625c7cd535b8909d2b7993991e229cc",rewarder_manager_id:"0xe789e092dbd9dceadbe89350c4761a6f2e11647aab97f09746a01b151926cc0e",rewarder_manager_handle:"0x7e7dd42392b5d82564dc9ad5093a111c5f0598cc9f806cff257d7dacb71f7837",admin_cap_id:"0x4ec248bca2d1fc05f39fd7491ab490464a46d128624caa4d3c2a66d957ef40b0"}},dca:{package_id:"",published_at:"",version:0,config:{admin_cap_id:"",global_config_id:"",indexer_id:"",user_indexer_id:"",in_coin_whitelist_id:"",out_coin_whitelist_id:""}}},ft=(a,t)=>{let e=a==="sui:mainnet"?ts:ns,n=new Yi(e);return n.senderAddress=t.address,n},j=(a,t)=>{let e=ft(a,t),n=a==="sui:mainnet"?es:as;return new Xi(n,e)},os="https://api-sui.cetus.zone/router_v2/find_routes",Wo=(a,t)=>{let e=new Zi({url:"https://fullnode.mainnet.sui.io/"});return new zi(os,t.address,e,Ji.Mainnet)};var Lo=async(a,t,e)=>await ft(e,t).Position.createAddLiquidityFixTokenPayload(a?.parameter,a?.gasEstimateArg),Uo=async(a,t,e)=>await ft(e,t).Position.createAddLiquidityFixTokenPayload(a?.parameter,a?.gasEstimateArg),Fo=async(a,t,e)=>await ft(e,t).Position.closePositionTransactionPayload(a),$o=async(a,t,e)=>await ft(e,t).Position.removeLiquidityTransactionPayload(a),qo=async(a,t,e)=>await ft(e,t).Rewarder.collectRewarderTransactionPayload(a);var pe=class a extends h{constructor(e){super(e);this.data=e}txType=rs.Other;txSubType="OpenAndAddLiquidity";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)}};import{TransactionType as is}from"@msafe/sui3-utils";var me=class a extends h{constructor(e){super(e);this.data=e}txType=is.Other;txSubType="ClaimFeeAndMining";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await qo(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as ss}from"@msafe/sui3-utils";var fe=class a extends h{constructor(e){super(e);this.data=e}txType=ss.Other;txSubType="DecreaseLiquidity";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await $o(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as cs}from"@msafe/sui3-utils";var Qo=async(a,t,e)=>await j(e,t).Farms.openPositionAddLiquidityStakePaylod(a),Vo=async(a,t,e)=>await j(e,t).Farms.addLiquidityFixCoinPayload(a),Ho=async(a,t,e)=>await j(e,t).Farms.removeLiquidityPayload(a),Ko=async(a,t,e)=>await j(e,t).Farms.removeLiquidityPayload(a),Go=async(a,t,e)=>await j(e,t).Farms.claimFeeAndClmmReward(a),zo=async(a,t,e)=>await j(e,t).Farms.harvestPayload(a),Jo=async(a,t,e)=>{let n=j(e,t),o=Object.values(a);return await n.Farms.batchHarvestPayload(o)},Xo=async(a,t,e)=>await j(e,t).Farms.depositPayload(a),Yo=async(a,t,e)=>await j(e,t).Farms.withdrawPayload(a);var be=class a extends h{constructor(e){super(e);this.data=e}txType=cs.Other;txSubType="FarmingOpenAndAddLiquidity";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await Qo(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as ls}from"@msafe/sui3-utils";var ge=class a extends h{constructor(e){super(e);this.data=e}txType=ls.Other;txSubType="FarmingBatchHarvest";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await Jo(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as ds}from"@msafe/sui3-utils";var he=class a extends h{constructor(e){super(e);this.data=e}txType=ds.Other;txSubType="FarmingClaimFeeAndReward";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await Go(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as us}from"@msafe/sui3-utils";var ye=class a extends h{constructor(e){super(e);this.data=e}txType=us.Other;txSubType="FarmingDecreaseLiquidity";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await Ho(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as ps}from"@msafe/sui3-utils";var Se=class a extends h{constructor(e){super(e);this.data=e}txType=ps.Other;txSubType="FarmingHarvest";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await zo(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as ms}from"@msafe/sui3-utils";var we=class a extends h{constructor(e){super(e);this.data=e}txType=ms.Other;txSubType="FarmingIncreaseLiquidity";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await Vo(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as fs}from"@msafe/sui3-utils";var Ce=class a extends h{constructor(e){super(e);this.data=e}txType=fs.Other;txSubType="FarmingRemoveLiquidity";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await Ko(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as bs}from"@msafe/sui3-utils";var Ie=class a extends h{constructor(e){super(e);this.data=e}txType=bs.Other;txSubType="FarmingStake";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await Xo(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as gs}from"@msafe/sui3-utils";var Te=class a extends h{constructor(e){super(e);this.data=e}txType=gs.Other;txSubType="FarmingUnstake";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await Yo(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as hs}from"@msafe/sui3-utils";var ke=class a extends h{constructor(e){super(e);this.data=e}txType=hs.Other;txSubType="IncreaseLiquidity";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 ys}from"@msafe/sui3-utils";var ve=class a extends h{constructor(e){super(e);this.data=e}txType=ys.Other;txSubType="RemoveLiquidity";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await Fo(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Cs}from"@msafe/sui3-utils";import{restituteMsafeFastRouterSwapParams as Ss}from"@cetusprotocol/aggregator-sdk";import{Transaction as ws}from"@mysten/sui/transactions";var Zo=async(a,t,e)=>{let n=Wo(e,t),o=new ws;return await n.fastRouterSwap({...a,routers:Ss(a.routers),txb:o}),o};var xe=class a extends h{constructor(e){super(e);this.data=e}txType=Cs.Other;txSubType="AggregatorSwap";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await Zo(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Ts}from"@msafe/sui3-utils";import{Transaction as Is}from"@mysten/sui/transactions";var tr={package_id:"0x355714a1eeb7ab1d80902da6c92001170cda1212edf524c32aa308a3ac177c31",published_at:"0x355714a1eeb7ab1d80902da6c92001170cda1212edf524c32aa308a3ac177c31",cetus_coin_type:"0x06864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b::cetus::CETUS"},er=async(a,t,e)=>{console.log("getVestingRedeemTxb txbParams: ",a),console.log("getVestingRedeemTxb account: ",t),console.log("getVestingRedeemTxb network: ",e);let{pool:n,nftId:o,periods:r,CLOCK_ADDRESS:i}=a,s=new Is;return r.forEach(c=>{s.moveCall({target:`${tr.published_at}::router::redeem`,typeArguments:[tr.cetus_coin_type],arguments:[s.object(n),s.object(o),s.pure(c),s.object(i)]})}),s};var Ae=class a extends h{constructor(e){super(e);this.data=e}txType=Ts.Other;txSubType="VestingRedeem";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await er(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as vs}from"@msafe/sui3-utils";import{Transaction as ks}from"@mysten/sui/transactions";var nr=async(a,t,e)=>{let n=j(e,t),o=new ks;return await n.XCetusModule.convertPayload(a,o)},ar=async(a,t,e)=>await j(e,t).XCetusModule.redeemLockPayload(a),or=async(a,t,e)=>await j(e,t).XCetusModule.redeemDividendV3Payload(a.phases,a.venft_id,a.bonus_types,a.bonus_types_v2,a.xTokenType),rr=async(a,t,e)=>await j(e,t).XCetusModule.cancelRedeemPayload(a),ir=async(a,t,e)=>await j(e,t).XCetusModule.redeemPayload(a);var Oe=class a extends h{constructor(e){super(e);this.data=e}txType=vs.Other;txSubType="xCETUSCancelRedeem";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await rr(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as xs}from"@msafe/sui3-utils";var De=class a extends h{constructor(e){super(e);this.data=e}txType=xs.Other;txSubType="xCETUSClaimStakingRwewards";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await or(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as As}from"@msafe/sui3-utils";var Pe=class a extends h{constructor(e){super(e);this.data=e}txType=As.Other;txSubType="xCETUSConvert";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await nr(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Os}from"@msafe/sui3-utils";var _e=class a extends h{constructor(e){super(e);this.data=e}txType=Os.Other;txSubType="xCETUSRedeem";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await ir(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Ds}from"@msafe/sui3-utils";var Re=class a extends h{constructor(e){super(e);this.data=e}txType=Ds.Other;txSubType="xCETUSRedeemLock";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await ar(r,n,o)}static fromData(e){return new a(e)}};var je=class{application="cetus";supportSDK="@mysten/sui";async deserialize(t){console.log("Cetus helper deserialize input: ",t);let{txbParams:e,action:n}=t;return{txType:Ps.Other,txSubType:n,intentionData:{txbParams:{...e},action:n}}}async build(t){let{suiClient:e,account:n,network:o}=t,r;switch(t.txSubType){case"OpenAndAddLiquidity":r=pe.fromData(t.intentionData);break;case"IncreaseLiquidity":r=ke.fromData(t.intentionData);break;case"DecreaseLiquidity":r=fe.fromData(t.intentionData);break;case"RemoveLiquidity":r=ve.fromData(t.intentionData);break;case"ClaimFeeAndMining":r=me.fromData(t.intentionData);break;case"FarmingOpenAndAddLiquidity":r=be.fromData(t.intentionData);break;case"FarmingIncreaseLiquidity":r=we.fromData(t.intentionData);break;case"FarmingDecreaseLiquidity":r=ye.fromData(t.intentionData);break;case"FarmingRemoveLiquidity":r=Ce.fromData(t.intentionData);break;case"FarmingClaimFeeAndReward":r=he.fromData(t.intentionData);break;case"FarmingHarvest":r=Se.fromData(t.intentionData);break;case"FarmingBatchHarvest":r=ge.fromData(t.intentionData);break;case"FarmingStake":r=Ie.fromData(t.intentionData);break;case"FarmingUnstake":r=Te.fromData(t.intentionData);break;case"xCETUSConvert":r=Pe.fromData(t.intentionData);break;case"xCETUSRedeemLock":r=Re.fromData(t.intentionData);break;case"xCETUSClaimStakingRwewards":r=De.fromData(t.intentionData);break;case"xCETUSCancelRedeem":r=Oe.fromData(t.intentionData);break;case"xCETUSRedeem":r=_e.fromData(t.intentionData);break;case"VestingRedeem":r=Ae.fromData(t.intentionData);break;case"AggregatorSwap":r=xe.fromData(t.intentionData);break;default:throw new Error("not implemented")}return r.build({suiClient:e,account:n,network:o})}};import{TransactionType as Oc}from"@msafe/sui3-utils";import _s from"sort-keys-recursive";var g=class{constructor(t){this.data=t}serialize(){return JSON.stringify(_s(this.data))}};import{getFullnodeUrl as Be}from"@mysten/sui.js/client";var Va={};No(Va,{contractId:()=>Bs,default:()=>Ls,feeObjId:()=>Es,roleObjId:()=>Ns,status:()=>js,transaction:()=>Rs,upgradeCapObjId:()=>Ws,vaultObjId:()=>Ms});var Rs="DiBZq4UmVVYiRL6ZJmFKYoHcxtxqrhsCXSkFyT7wUr3j",js="success",Bs="0x81c960dc653975fbd0072deca8afb92d322898c911622898ba1b2e3ad0c4bd8d",Ns="0xc6ec0bdee0bb59a72077e9acd2f42457043cf47080b3d3fad4d39abf28bba63a",Ms="0xbc4021387fbac149119fd24e92be9e58f745774292f3a2a12e2ac6daf5363e1d",Es="0x4178f63970fe2daeb256dc5730ad172e82b3e8eb45f31b33e0daae72cd35e1e1",Ws="0xe1e9aa7d222d151bfe6dd83358b0d7fdcb11260f710800cfaf7ccc1b1e245115",Ls={transaction:Rs,status:js,contractId:Bs,roleObjId:Ns,vaultObjId:Ms,feeObjId:Es,upgradeCapObjId:Ws};var Ha={};No(Ha,{contractId:()=>$s,default:()=>Ks,feeObjId:()=>Vs,roleObjId:()=>qs,status:()=>Fs,transaction:()=>Us,upgradeCapObjId:()=>Hs,vaultObjId:()=>Qs});var Us="855FNDV8o8Z3fWULPnQo9qdhLJpsg7wZrkCpNyfw9KfB",Fs="success",$s="0xc357c3985e8fb875d6b37141497af660779aa1bab0ec489b2213efd74067d1fa",qs="0x5ab49bdf9fd1413e328ef242b3f8d83dde791b38a0b627bfc87fb25c010d34f1",Qs="0xb483558770d8eb26007f193b75db40f0a45f2e36863a687625885d4de6993378",Vs="0x48453fc4d7cde3fe35aad89e5dfb496608a6a55ea529a1c0274681a808627f94",Hs="0x34279779a0d0d36bd5044b04830d607fa1b0ecf316548c8ac3a44151e4f1a42a",Ks={transaction:Us,status:Fs,contractId:$s,roleObjId:qs,vaultObjId:Qs,feeObjId:Vs,upgradeCapObjId:Hs};var Gs=Be("testnet"),zs=Be("testnet"),Js=Be("mainnet"),Xs=Be("mainnet"),Ys="https://bc3p6l5unl.execute-api.us-west-1.amazonaws.com/prod",Zs="https://rolsbkota7.execute-api.us-west-1.amazonaws.com/prod",tc="https://6p6mkx33ne.execute-api.us-west-1.amazonaws.com/prod",ec="https://xrae3mrjv5.execute-api.us-west-1.amazonaws.com/prod",sr=Va,cr=Ha,nc=new Map([["dev",{env:"dev",rpc:{url:Gs},backend:{url:Ys},contract:sr}],["stg",{env:"stg",rpc:{url:zs},backend:{url:Zs},contract:sr}],["prev",{env:"prev",rpc:{url:Js},backend:{url:tc},contract:cr}],["prod",{env:"prod",rpc:{url:Xs},backend:{url:ec},contract:cr}]]);function lr(a,t){let e=nc.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 oc}from"@mysten/sui.js/client";var k=class extends Error{mpayErrorCode;context;constructor(t,e,n={}){let{cause:o,context:r}=n;o?super(`[MPay] ${e}: ${o}`):super(`[MPay] ${e}`),this.mpayErrorCode=t,this.context=r}};var Ne=class extends k{constructor(){super(11,"Backend is not specified")}};var Me=class extends k{constructor(){super(1,"Wallet not connected")}};import yt,{AxiosError as ac}from"axios";var ht=class extends k{constructor(t,e){super(10,t,{context:e})}};var Ee=class a{constructor(t){this.apiURL=t}static parseResponseData(t){if(t instanceof ac)throw new ht(t.response?.statusText);if(t.status===200){if(t.data.success)return t.data.data;throw new ht(t.data.code)}throw new ht(t.status.toString())}async getIncomingStreams(t,e){let n=await yt.post(`${this.apiURL}/stream`,{recipient:t,...e});return a.parseResponseData(n)}async getOutgoingStreams(t,e){let n=await yt.post(`${this.apiURL}/stream`,{sender:t,...e});return a.parseResponseData(n)}async getStreamHistory(t){let e=await yt.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 yt.post(`${this.apiURL}/stream-info`,{address:t});return a.parseResponseData(e)}async getAllRecipients(t,e){let n=await yt.post(`${this.apiURL}/stream-info`,{sender:t,status:e});return a.parseResponseData(n)}async getAllSenders(t,e){let n=await yt.post(`${this.apiURL}/stream-info`,{recipient:t,status:e});return a.parseResponseData(n)}};var St=class a{signer;suiClient;envConfig;_backend;constructor(t){this.envConfig=t,this.suiClient=new oc({url:t.rpc.url}),t.backend&&(this._backend=new Ee(t.backend.url))}static new(t,e){let n=lr(t,e);return new a(n)}get walletType(){return this.wallet?this.wallet.type:"disconnected"}get backend(){if(!this._backend)throw new Ne;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 Me;return this.signer}async walletAddress(){return this.wallet.address()}};import{SUI_TYPE_ARG as vc,normalizeStructTag as xc,normalizeSuiAddress as jr}from"@mysten/sui.js/utils";import{TransactionBlock as qe}from"@mysten/sui.js/transactions";import{TransactionBlock as yr}from"@mysten/sui.js/transactions";import{SUI_TYPE_ARG as Sr,normalizeStructTag as cc}from"@mysten/sui.js/utils";var Ka=50n,We=10000n,dr=25n,Ga=100000000n;var K=class{constructor(t){this.object=t}moveArg(t){return t.object(this.object)}},_t=class{constructor(t){this.objects=t}moveArgs(t){return t.makeMoveVec({objects:this.objects.map(e=>t.object(e))})}},nt=class a{constructor(t){this.result=t;return new Proxy(this,{set(){throw new Error("The transaction result is a proxy, and does not support setting properties directly")},get(e,n){if(n in e)return Reflect.get(e,n);let o=i=>new a(e.result[i]);if(n===Symbol.iterator)return function*(){let i=0;for(;;)yield o(i),i++};if(typeof n=="symbol")return;let r=parseInt(n,10);if(!(Number.isNaN(r)||r<0))return o(r)}})}moveArg(){return this.result}};import{Buffer as ur}from"buffer";import{normalizeSuiAddress as rc}from"@mysten/sui.js/utils";var Rt=class extends k{constructor(t,e){super(3,t,{context:e})}};var Le=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 Rt("Invalid contract return type.",{ctx:{expectType:"address",gotType:o}});return rc(ur.from(n).toString("hex"))}getU64(t=0,e=0){let[n,o]=this.getValue(t,e);if(o!=="u64")throw new Rt("Invalid contract return type.",{ctx:{expectType:"u64",gotType:o}});return ur.from(n).readBigInt64LE()}};import{bcs as mr}from"@mysten/sui.js/bcs";var A=class extends k{constructor(t,e,n){super(2,`Invalid input: ${t}`,{context:{fieldKey:e,fieldValue:n}})}};var fr={groupId:"string",name:"string"},ic=64;function br(a){return gr(a),mr.ser(fr,a).toString("base64")}function jt(a){let t=mr.de(fr,a,"base64");return gr(t),t}function gr(a){if(!pr(a.name))throw new A("Invalid metadata: Name contains unknown character");if(!pr(a.groupId))throw new A("Invalid metadata: Group ID contains unknown character");if(a.name.length>ic)throw new A("Invalid metadata: Name exceed max length 64")}function pr(a){return/^[\x00-\x7F]+$/.test(a)}import{normalizeStructTag as Ue}from"@mysten/sui.js/utils";function Fe(a,t){return Ue(a)===Ue(t)}function at(a,t){return Ue(a)===Ue(t)}var $e="txn.gas";import{nanoid as sc}from"nanoid";function hr(){return sc()}var bt=class a{constructor(t,e,n){this.globals=t;this.feeContract=e;this.streamContract=n}static convertCreateStreamInfoToInternal(t){return{metadata:br({name:t.name,groupId:hr()}),coinType:cc(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 yr,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 d=t.recipients[c],l=this.amountForRecipient(d,t.numberEpoch),u=this.getStreamFeeLocal(l),[p]=e.splitCoins(i,[e.pure(l+u,"u64")]),[m]=e.splitCoins(s,[e.pure(this.flatSuiFee,"u64")]);this.streamContract.createStream(e,{paymentCoin:new nt(p),flatFeeCoin:new nt(m),metadata:t.metadata,recipient:d.address,timeStart:t.startTime,cliff:d.cliffAmount,epochInterval:t.epochInterval,numEpoch:t.numberEpoch,amountPerEpoch:d.amountPerEpoch,cancelable:t.cancelable,coinType:t.coinType})}return e}calculateCreateStreamFees(t){let e=a.convertCreateStreamInfoToInternal(t);return this.calculateFeesInternal(e)}feeParams(){return{createFeePercent:{numerator:Ka,denominator:We},claimFeePercent:{numerator:dr,denominator:We},flatFeePerStream:Ga}}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===$e?n=t.gas:n=t.object(e.primaryCoin),n}getCreateStreamCoinRequests(t,e){let n=t.coinType;return Fe(n,Sr)?[{coinType:n,amount:e.totalAmount+e.streamFeeAmount+e.flatFeeAmount}]:[{coinType:n,amount:e.totalAmount+e.streamFeeAmount},{coinType:Sr,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 Ga}getStreamFeeLocal(t){return t*Ka/We}async getStreamFeeRemote(t){let e=this.feeContract.streamingFee(new yr,t),n=await this.globals.suiClient.devInspectTransactionBlock({sender:await this.globals.walletAddress(),transactionBlock:e});return new Le(n).getU64()}get wallet(){return this.globals.wallet}};import{Transactions as Cr}from"@mysten/sui.js/transactions";var wr="0x0000000000000000000000000000000000000000000000000000000000000006";var wt=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(Cr.MoveCall({target:n,arguments:e.arguments.map(o=>o instanceof _t?o.moveArgs(t):o instanceof K?o.moveArg(t):o instanceof nt?o.moveArg():t.pure(o)),typeArguments:e.typeArgs})),t}addTransactionBlock(t,e,n=[],o=[]){t.add(Cr.MoveCall({target:e,arguments:n.map(r=>r instanceof _t?r.moveArgs(t):r instanceof K?r.moveArg(t):r instanceof nt?r.moveArg():t.pure(r)),typeArguments:o}))}makeObject(t){return typeof t=="string"?new K(t):t}vaultObject(){return new K(this.config.vaultObjId)}roleObject(){return new K(this.config.roleObjId)}feeObject(){return new K(this.config.feeObjId)}clockObject(){return new K(wr)}};var Ct=class a extends wt{constructor(e,n){super(a.ModuleName,e,n);this.config=e;this.globals=n}static ModuleName="fee_module";static MethodName={set_streaming_fee:"set_streaming_fee",set_claim_fee:"set_claim_fee",set_streaming_flat_fee:"set_streaming_flat_fee",streaming_flat_fee:"streaming_flat_fee",streaming_fee:"streaming_fee",claim_fee:"claim_fee",fee_denominator:"fee_denominator"};setStreamingFee(e,n){let o=this.roleObject(),r=this.feeObject();return this.addContractCall(e,{method:a.MethodName.set_streaming_fee,arguments:[o,r,n],typeArgs:[]})}setStreamingFlatFee(e,n){let o=this.roleObject(),r=this.feeObject();return this.addContractCall(e,{method:a.MethodName.set_streaming_flat_fee,arguments:[o,r,n],typeArgs:[]})}setClaimFee(e,n){let o=this.roleObject(),r=this.feeObject();return this.addContractCall(e,{method:a.MethodName.set_claim_fee,arguments:[o,r,n],typeArgs:[]})}streamingFee(e,n){let o=this.feeObject();return this.addContractCall(e,{method:a.MethodName.streaming_fee,arguments:[o,n],typeArgs:[]})}claimFee(e,n){return this.addContractCall(e,{method:a.MethodName.claim_fee,arguments:[this.feeObject(),n],typeArgs:[]})}feeDenominator(e){return this.addContractCall(e,{method:a.MethodName.fee_denominator,arguments:[this.feeObject()],typeArgs:[]})}};var G=class a extends wt{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 It=class{constructor(t){this.globals=t;let e=t.envConfig.contract;this.feeContract=new Ct(e,t),this.streamContract=new G(e,t)}feeContract;streamContract;async createStreams(t){let e=bt.convertCreateStreamInfoToInternal(t);return this.createStreamHelper().buildCreateStreamTransactionBlock(e)}createStreamHelper(){return new bt(this.globals,this.feeContract,this.streamContract)}setAutoClaim(t,e,n){let o=new qe;return this.streamContract.setAutoClaim(o,{streamId:t,enabled:e,coinType:n})}claimStream(t,e){let n=new qe;return this.streamContract.claimStream(n,{streamId:t,coinType:e})}claimStreamByProxy(t,e){let n=new qe;return this.streamContract.claimStreamByProxy(n,{streamId:t,coinType:e})}cancelStream(t,e){let n=new qe;return this.streamContract.cancelStream(n,{streamId:t,coinType:e}),n}};var D=class extends k{constructor(t,e={}){super(0,t,e)}};async function Ja(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 za=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 za(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 Qe=class extends k{constructor(e,n,o){super(4,`Not enough balance: ${e}`,{context:{coinType:e,requestAmount:n,gotAmount:o}});this.coinType=e;this.requestAmount=n;this.gotAmount=o}};var lc=25;async function Ir(a,t,e,n="0x2::sui::SUI",o=lc){let r=new Xa(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 Qe(n,e,i);return s}var Xa=class extends Tt{constructor(e,n,o,r){super(new Ya(e,n,o,r));this.suiClient=e;this.owner=n;this.coinType=o;this.reqPageSize=r}},Ya=class{constructor(t,e,n,o){this.suiClient=t;this.owner=e;this.coinType=n;this.reqPageSize=o;if(o<=0)throw new D("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 Ge}from"@mysten/sui.js/transactions";import{normalizeStructTag as kr,parseStructTag as pc}from"@mysten/sui.js/utils";import{DateTime as mc}from"luxon";var Ve=class extends k{constructor(){super(7,"Connected wallet is not creator")}};var Bt=class extends k{constructor(){super(8,"Connected wallet is not recipient")}};var Nt=class extends k{constructor(t,e){super(6,t,{context:e})}};var He=class extends k{constructor(t){super(5,"Stream not found",{context:{streamId:t}})}};import{DateTime as dc,Duration as uc}from"luxon";var Tr=(1n<<64n)-1n,Ke=1e3;function Za(a){let t;typeof a=="number"?t=a:typeof a=="bigint"?t=Number(a):t=a.toMillis();let e=Math.round(t/Ke);return dc.fromMillis(e*Ke)}function to(a){let t;typeof a=="number"?t=a:typeof a=="bigint"?t=Number(a):t=a.toMillis();let e=Math.round(t/Ke);return uc.fromMillis(e*Ke)}var ot=class a{constructor(t,e,n){this.globals=t;this.streamId=e;this.rawData=n;this.streamContract=new G(t.envConfig.contract,t)}streamContract;type="Stream";static async new(t,e){let n=await a.fetchStreamData(t,e);return new a(t,e,n)}static fromObjectData(t,e,n){let o=a.parseRawStreamData(e,n);return new a(t,e,o)}get info(){return{name:this.name,creator:this.creator,coinType:this.coinType,totalAmount:this.totalAmount,start:this.timeStart,end:this.timeEnd,cancelable:this.cancelable,cliffAmount:this.cliff,duration:this.duration,interval:this.interval,steps:this.totalSteps,nextReleaseDate:this.nextReleaseDate,nextReleaseAmount:this.nextReleaseAmount,groupId:this.groupId,streamId:this.streamId,recipient:this.recipient,progress:this.progress,autoClaim:this.autoClaim}}get groupCommonInfo(){return{name:this.name,groupId:this.groupId,creator:this.creator,start:this.timeStart,interval:this.interval,steps:this.totalSteps,cancelable:this.cancelable}}async refresh(){this.rawData=await a.fetchStreamData(this.globals,this.streamId)}refreshWithData(t){if(t.data?.objectId!==this.streamId)throw new D("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 Ve;let t=new Ge;return this.streamContract.cancelStream(t,{streamId:this.streamId,coinType:this.coinType}),t}async claim(){if(await this.globals.walletAddress()!==this.recipient)throw new Bt;let t=new Ge;return this.streamContract.claimStream(t,{streamId:this.streamId,coinType:this.coinType}),t}async setAutoClaim(t){if(await this.globals.walletAddress()!==this.recipient)throw new Bt;let e=new Ge;return this.streamContract.setAutoClaim(e,{streamId:this.streamId,coinType:this.coinType,enabled:t}),e}async claimByProxy(){let t=new Ge;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 kr(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 to(this.rawData.config.epochInterval)}get groupId(){let{metadata:t}=this.rawData.config;return jt(t).groupId}get name(){let{metadata:t}=this.rawData.config;return jt(t).name}get recipient(){return this.rawData.config.recipient}get timeStart(){return Za(this.rawData.config.timeStart)}get duration(){let t=this.rawData.config,e=t.epochInterval*t.totalEpoch;return to(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:Za((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===Tr?0n:this.rawData.status.epochClaimed*this.amountPerEpoch+this.cliff}get currentEpoch(){let t=mc.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 He(t):new Nt(`get stream data: ${e.error.code}`,{streamId:t,...e.error});let n=e.data.content;if(n.dataType!=="moveObject")throw new Nt("Unexpected object type",{gotType:n.dataType});let{typeParams:o}=pc(n.type),r=kr(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 eo,SUI_TYPE_ARG as fc}from"@mysten/sui.js/utils";import{Duration as vr}from"luxon";var ze=class extends k{constructor(t,e){super(12,`Transaction failed: ${e}`,{context:{status:t,msg:e}})}};var bc=1e3,Je=class{constructor(t){this.globals=t;this.coinMetaHelper=new no(t.suiClient),this.createStreamHelper=new It(t).createStreamHelper()}coinMetaHelper;createStreamHelper;getStreamIdsFromCreateStreamResponse(t){if(t.effects?.status.status!=="success")throw new ze(t.effects?.status.status,t.effects?.status.error);return t.objectChanges.filter(e=>e.type==="created"&&e.objectType.startsWith(`${this.globals.envConfig.contract.contractId}::stream::Stream`)).map(e=>e.objectId)}calculateCreateStreamFees(t){return this.createStreamHelper.calculateCreateStreamFees(t)}feeParams(){return this.createStreamHelper.feeParams()}calculateStreamAmount(t){if(t.steps===0n)throw new A("Invalid stream steps: 0");let e=t.cliff?t.cliff:{numerator:0n,denominator:100n},n=t.totalAmount*e.numerator/e.denominator,o=(t.totalAmount-n)/t.steps,i={realTotalAmount:o*t.steps+n,cliffAmount:n,amountPerStep:o};return this.validateStreamAmount(i,t.totalAmount),i}calculateTimelineByInterval(t){if(t.steps===0n)throw new A("Invalid stream steps: 0");let e=t.timeStart.plus(t.interval.toMillis()*Number(t.steps)),n={timeStart:t.timeStart,timeEnd:e,interval:t.interval,steps:t.steps};return this.validateTimeline(n),n}calculateTimelineByTotalDuration(t){if(t.steps===0n)throw new A("Invalid stream steps: 0");let e=BigInt(t.total.toMillis())/t.steps,n=t.timeStart.plus(vr.fromMillis(Number(e*t.steps))),o={timeStart:t.timeStart,timeEnd:n,interval:vr.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:eo(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:eo(o.coinType),coinMeta:n[r]}))}async getCoinMeta(t){return this.coinMetaHelper.getCoinMeta(t)}async simulateTransactionBlock(t){return this.globals.suiClient.devInspectTransactionBlock({transactionBlock:t,sender:await this.globals.wallet.address()})}validateStreamAmount(t,e){if(t.amountPerStep===0n)throw new A("Stream amount too small","totalAmount",e);if(t.cliffAmount>t.realTotalAmount)throw new A("Invalid cliff settings")}validateTimeline(t){if(t.interval.toMillis()<bc)throw new A("Interval shall be at least 1 second","interval",t.interval)}},no=class{constructor(t){this.suiClient=t;this.coinMetaReg=new Map}coinMetaReg;async getCoinMeta(t){let e=eo(t||fc);if(this.coinMetaReg.has(e))return this.coinMetaReg.get(e);let n=await this.queryCoinMeta(e);return n&&this.coinMetaReg.set(e,n),n}async queryCoinMeta(t){return await this.suiClient.getCoinMetadata({coinType:t})||void 0}};import{normalizeStructTag as xr,normalizeSuiAddress as Ye}from"@mysten/sui.js/utils";import{DateTime as Ar}from"luxon";var kt=class extends k{constructor(t,e){super(9,`Invalid stream group: ${t}`,{context:e})}};var gc=25;async function oo(a,t,e){let n=new Mt(t),o=new Et(a,n,e);return await Ja(o)}var Mt=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]}},Et=class extends Tt{constructor(e,n,o){super(new ao(e,n,o));this.suiClient=e;this.idIter=n;this.options=o}},ao=class{constructor(t,e,n){this.suiClient=t;this.stringIter=e;this.options=n;this.filter=n?.filter,this.pageSize=n?.pageSize||gc,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 Xe=class a{constructor(t,e){this.globals=t;this.streams=e;if(e.length===0)throw new kt("stream size 0");let n=e.map(r=>r.groupId);if(new Set(n).size!==1)throw new A("Stream does not have same group ID")}type="StreamGroup";static async new(t,e){let n=await oo(t.suiClient,e);return n.forEach(o=>{if(!o)throw new D("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=>{hc(n,r)||(o=!1)}),o}async refresh(){let t=await oo(this.globals.suiClient,this.streams.map(e=>e.streamId));this.streams.forEach((e,n)=>{e.refreshWithData(t[n])})}get groupId(){return this.streams[0].groupId}get creator(){return this.streams[0].creator}get info(){return{groupId:this.groupId,streamIds:this.streams.map(t=>t.streamId),progress:this.progress,name:this.streams[0].name,creator:this.creator,coinType:this.streams[0].coinType,totalAmount:this.streams.reduce((t,e)=>t+e.totalAmount,0n),start:this.streams[0].timeStart,end:this.streams[0].timeEnd,cancelable:this.streams[0].cancelable,cliffAmount:this.streams.reduce((t,e)=>t+e.cliff,0n),duration:this.streams[0].duration,interval:this.streams[0].interval,steps:this.streams[0].totalSteps,nextReleaseAmount:this.streams.reduce((t,e)=>e.nextReleaseAmount===null?t:t+e.nextReleaseAmount,0n),nextReleaseDate:this.streams[0].nextReleaseDate}}get progress(){return{total:this.streams.reduce((t,e)=>t+e.totalAmount,0n),streamed:this.streams.reduce((t,e)=>t+e.streamedAmount,0n),claimed:this.streams.reduce((t,e)=>t+e.claimedAmount,0n),claimable:this.streams.reduce((t,e)=>t+e.claimable,0n),canceled:this.streams.reduce((t,e)=>t+e.canceledAmount,0n)}}async historyEvents(t){return this.globals.backend.getStreamHistory({groupId:this.groupId,pagination:t})}static async parseGroupStreams(t,e,n){let o=n.map((r,i)=>ot.fromObjectData(t,e[i],r)).filter(r=>!!r);if(new Set(o.map(r=>r.groupId)).size!==1)throw new kt("Not same group ID");if(!this.checkStreamGroup(o))throw new kt("Not same stream settings");return o}};function hc(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 Wt=class a{constructor(t,e){this.it=t;this.pageSize=e}static async newIncoming(t){let e=await Ze.newIncoming(t);return new a(e,t.pageSize)}static async newOutgoing(t){let e=await Ze.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}},Ze=class a{constructor(t){this.requester=t}cachedNext;static async newIncoming(t){let e=await tn.newIncomingQuery(t);return new a(e)}static async newOutgoing(t){let e=await tn.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 D("No more results");return e}let t=this.cachedNext;if(this.cachedNext=void 0,t===null)throw new D("No more results");return t}},tn=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 Mt(n.flat().map(i=>i.streamId));this.objectIter=new Et(t.suiClient,r)}current=0;objectIter;static async newIncomingQuery(t){let e=Ic(t.query),n=await t.globals.walletAddress(),r=(await t.globals.backend.getIncomingStreams(n,e)).filter(s=>Ye(s.recipient)===Ye(n)),i=Or(r);return new a(t.globals,n,i,t.query)}static async newOutgoingQuery(t){let e=Tc(t.query),n=await t.globals.walletAddress(),o=await t.globals.backend.getOutgoingStreams(n,e),r=Or(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 wc(this.globals,t[0].streamId,this.objectIter);return this.current++,Dr(e,this.query)?e:this.doNextRequest()}if(t.length>1){let e=await Cc(this.globals,t.map(n=>n.streamId),this.objectIter);return this.current++,Sc(e,this.query)?e:this.doNextRequest()}throw new D("Stream group with no stream")}};function Or(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)=>Ar.fromISO(n[0].createDate).toMillis()-Ar.fromISO(e[0].createDate).toMillis())}function Dr(a,t){if(t===void 0)return!0;let e=yc(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 yc(a,t){return t===void 0?!0:Array.isArray(t)?t.includes(a.progress.status):a.progress.status===t}function Sc(a,t){if(!t)return!0;let e=!1;return a.streams.forEach(n=>{Dr(n,t)&&(e=!0)}),e}async function wc(a,t,e){let n=await Pr(e,t);return ot.fromObjectData(a,t,n)}async function Cc(a,t,e){let n=[];for(;n.length<t.length;){let o=await Pr(e,t[n.length]);n.push(o)}return Xe.newFromObjectResponse(a,t,n)}async function Pr(a,t){if(!await a.hasNext())throw new D("object iterator has been consumed");let e=await a.next();if(!e||e.error||e.data===void 0||e.data===null)throw new D("object iterator undefined response",{cause:e?.error});if(e?.data?.objectId!==t)throw new D("stream id not aligned");return e}function Ic(a){return{status:ro(a?.status),coinType:_r(a?.coinType),sender:Rr(a?.sender)}}function Tc(a){return{status:ro(a?.status),coinType:_r(a?.coinType),recipient:Rr(a?.recipient)}}function ro(a){return a===void 0||a.length===0?"all":Array.isArray(a)?a.reduce((t,e)=>{let n=ro(e);return!t||t===n?n:"all"},void 0):kc(a)}function kc(a){switch(a){case"STREAMING":case"STREAMED":case"CANCELED":return"active";case"COMPLETED":case"SETTLED":return"inactive";default:throw new A("Unknown stream filtered status")}}function _r(a){if(a)return Array.isArray(a)?a.length!==0?a.map(t=>xr(t)):void 0:xr(a)}function Rr(a){if(a)return Array.isArray(a)?a.length!==0?a.map(t=>Ye(t)):void 0:Ye(a)}var io=class{constructor(t){this.msafe=t}get type(){return"msafe"}async address(){return this.msafe.address()}async requestCoins(t){return this.msafe.requestCoins(t)}},en=class{constructor(t){this.account=t}async address(){return this.account.address}},so=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(Fe(t.coinType,vc))return{primaryCoin:$e};if(t.amount<=0)throw new A("Invalid coin request","coinAmount",t.amount);let e=await Ir(this.suiClient,await this.address(),t.amount,t.coinType);if(e.length===0)throw new D("no coins available");return{primaryCoin:e[0].coinObjectId,mergedCoins:e.slice(1).map(n=>n.coinObjectId)}}},nn=class{globals;helper;constructor(t,e){this.globals=St.new(t,e),this.helper=new Je(this.globals)}connectSingleWallet(t){let e=new so(t,this.globals.suiClient);this.globals.connectWallet(e)}connectMSafeAccount(t){let e=new io(t);this.globals.connectWallet(e)}async createStream(t){return this.builder().createStreams(t)}async getStream(t){return ot.new(this.globals,t)}async getIncomingStreams(t,e=10){return Wt.newIncoming({globals:this.globals,query:t,pageSize:e})}async getOutgoingStreams(t,e=10){return Wt.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=>xc(n))}async getRecipientsForStreamFilter(t){let e=await this.wallet.address();return(await this.globals.backend.getAllRecipients(e,t)).map(o=>jr(o))}async getCreatorsForStreamFilter(t){let e=await this.wallet.address();return(await this.globals.backend.getAllSenders(e,t)).map(o=>jr(o))}get wallet(){return this.globals.wallet}builder(){return new It(this.globals)}};var $=class extends g{application="mpay";getClient(t,e){let n=new nn(t==="sui:mainnet"?"prod":"dev");return n.connectSingleWallet(new en(e)),n}};var Lt=class extends ${constructor(e){super(e);this.data=e}txType=Oc.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 Dc}from"@msafe/sui3-utils";var Ut=class extends ${constructor(e){super(e);this.data=e}txType=Dc.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 Pc}from"@msafe/sui3-utils";var Ft=class extends ${constructor(e){super(e);this.data=e}txType=Pc.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 _c}from"@msafe/sui3-utils";var $t=class extends ${constructor(e){super(e);this.data=e}txType=_c.Stream;txSubType="CreateStream";async build(e){let{network:n,account:o}=e;return this.getClient(n,o).createStream(this.data)}};import{bcs as Br}from"@mysten/sui.js/bcs";import{normalizeStructTag as Rc,normalizeSuiAddress as qt}from"@mysten/sui.js/utils";var vt=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 Br.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 Br.de(e,new Uint8Array(n))}typeArg(t){return Rc(this.moveCall.typeArguments[t])}txArg(t){return this.moveCall.arguments[t]}};var an=class{constructor(t,e){this.globals=t;this.txb=e}decode(){let t=this.decodeCreateStreamInfo(),e=this.createStreamHelper().calculateCreateStreamFees(t);return{type:"CreateStream",info:t,fees:e}}decodeCreateStreamInfo(){let e=this.createStreamTransactions().map(n=>this.getCreationInfoFromMoveCall(n));return this.aggregateGroupStreamInfo(e)}createStreamTransactions(){let t=this.transactions.filter(e=>e.kind==="MoveCall"&&at(e.target,this.contract.createStreamTarget));if(t.length===0)throw new D("No create stream transactions");return t.map(e=>new vt(e,this.txb))}getCreationInfoFromMoveCall(t){let e=t.decodeInputString(4),{name:n,groupId:o}=jt(e),r=t.decodeInputAddress(5),i=t.decodeInputU64(6),s=t.decodeInputU64(7),c=t.decodeInputU64(8),d=t.decodeInputU64(9),l=t.decodeInputU64(10),u=t.decodeInputBool(11),p=t.typeArg(0);return{name:n,groupId:o,recipient:r,timeStart:i,cliff:s,epochInterval:c,totalEpoch:d,amountPerEpoch:l,cancelable:u,coinType:p}}aggregateGroupStreamInfo(t){if(new Set(t.map(o=>JSON.stringify({name:o.name,groupId:o.groupId,timeStart:String(o.timeStart),epochInterval:String(o.epochInterval),totalEpoch:String(o.totalEpoch),cancelable:o.cancelable,coinType:o.coinType}))).size!==1)throw new A("Stream group not have common info");let n=t.map(o=>({address:o.recipient,amountPerStep:o.amountPerEpoch,cliffAmount:o.cliff}));return{name:t[0].name,coinType:t[0].coinType,recipients:n,interval:t[0].epochInterval,steps:t[0].totalEpoch,startTimeMs:t[0].timeStart,cancelable:t[0].cancelable}}mergeCoinTransactions(){return this.transactions.filter(t=>t.kind==="MergeCoins")}get transactions(){return this.txb.blockData.transactions}get contract(){return new G(this.globals.envConfig.contract,this.globals)}get feeContract(){return new Ct(this.globals.envConfig.contract,this.globals)}createStreamHelper(){return new bt(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 on=class{constructor(t,e){this.globals=t;this.txb=e;this.contract=new G(t.envConfig.contract,t)}contract;decode(){if(this.isCreateStreamTransaction())return this.decodeCreateStreamTransaction();if(this.isClaimByProxyTransaction())return this.decodeClaimByProxyTransaction();if(this.isSetAutoClaimTransaction())return this.decodeSetAutoClaimTransaction();if(this.isCancelStreamTransaction())return this.decodeCancelStreamTransaction();if(this.isClaimStreamTransaction())return this.decodeClaimTransaction();throw new Error("Unknown stream transaction type")}get transactions(){return this.txb.blockData.transactions}isCreateStreamTransaction(){return this.transactions.findIndex(e=>e.kind==="MoveCall"&&at(e.target,this.contract.createStreamTarget))!==-1}isSetAutoClaimTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&&at(this.transactions[0].target,this.contract.setAutoClaimTarget)}isCancelStreamTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&&at(this.transactions[0].target,this.contract.cancelStreamTarget)}isClaimStreamTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&&at(this.transactions[0].target,this.contract.claimStreamTarget)}isClaimByProxyTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&&at(this.transactions[0].target,this.contract.claimStreamByProxyTarget)}decodeCreateStreamTransaction(){return new an(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 vt(t,this.txb)}};import{TransactionType as jc}from"@msafe/sui3-utils";var Qt=class extends ${constructor(e){super(e);this.data=e}txType=jc.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 rn=class{application="mpay";supportSDK="@mysten/sui.js";async deserialize(t){let{network:e,transactionBlock:n}=t,o=St.new(e==="sui:mainnet"?"prod":"dev"),i=new on(o,n).decode(),s;switch(i.type){case"CreateStream":s=new $t(i.info);break;case"SetAutoClaim":s=new Qt({streamId:i.streamId,enabled:i.enabled});break;case"Claim":s=new Ft({streamId:i.streamId});break;case"ClaimByProxy":s=new Ut({streamId:i.streamId});break;case"Cancel":s=new Lt({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 $t(e);break;case"Claim":n=new Ft(e);break;case"ClaimByProxy":n=new Ut(e);break;case"SetAutoClaim":n=new Qt(e);break;case"Cancel":n=new Lt(e);break;default:throw new Error("not implemented")}return n.build({...t})}};import{TransactionDefaultApplication as Wc,TransactionSubTypes as co}from"@msafe/sui3-utils";import{buildCoinTransferTxb as Bc}from"@msafe/sui3-utils";var sn=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o}=e;return Bc(n,this.data,o.address)}static fromData(e){return new a(e)}};import{buildObjectTransferTxb as Nc}from"@msafe/sui3-utils";var cn=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o}=e;return Nc(n,this.data,o.address)}static fromData(e){return new a(e)}};import{isSameAddress as Mc}from"@msafe/sui3-utils";import{TransactionBlock as Ec}from"@mysten/sui.js/transactions";var ln=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{account:n}=e,o=Ec.from(this.data.content);if(!Mc(o.blockData.sender,n.address))throw new Error("Invalid sender address");return o}static fromData(e){return new a(e)}};var dn=class{application="msafe-core";supportSDK="@mysten/sui.js";constructor(){this.application=Wc}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 co.assets.coin.send:o=sn.fromData(t.intentionData);break;case co.assets.object.send:o=cn.fromData(t.intentionData);break;case co.others.plain:o=ln.fromData(t.intentionData);break;default:throw new Error("not implemented")}return o.build({suiClient:e,account:n})}};import{TransactionType as Hc}from"@msafe/sui3-utils";var Nr=!1,Vt={ProtocolPackage:"0xc6374c7da60746002bfee93014aeb607e023b2d6b25c9e55a152b826dbc8c1ce",StorageId:"0xbb4e2f4b6205c2e2a2db47aeb4f830796ec7c005f88537ee775986639bc442fe",Incentive:"0xaaf735bf83ff564e1b219a0d644de894ef5bdc4b2250b126b2a46dd002331821",IncentiveV2:"0xf87a8acb8b81d14307894d12595541a73f19933f88e1326d5be349c7a6f7559c",gasBudget:5e7,PriceOracle:"0x1568865ed9a0b5ec414220e8f79b3d04c77acc82358f6e5ae4635687392ffbef",ReserveParentId:"0xe6d4c6610b86ce7735ea754596d71d72d10c7980b5052fc3c8cdf8d09fea9b4b",pool:{sui:{name:"SUI",assetId:0,poolId:"0x96df0fce3c471489f4debaaa762cf960b3d97820bd1f3f025ff8190730e958c5",fondPoolId:"0xf975bc2d4cca10e3ace8887e20afd77b46c383b4465eac694c4688344955dea4",type:"0x2::sui::SUI",coinType:"sui",reserveObjectId:"0xab644b5fd11aa11e930d1c7bc903ef609a9feaf9ffe1b23532ad8441854fbfaf",borrowBalanceParentId:"0xe7ff0daa9d090727210abe6a8b6c0c5cd483f3692a10610386e4dc9c57871ba7",supplyBalanceParentId:"0x589c83af4b035a3bc64c40d9011397b539b97ea47edf7be8f33d643606bf96f8"},wusdc:{name:"wUSDC",assetId:1,coinType:"wusdc",poolId:"0xa02a98f9c88db51c6f5efaaf2261c81f34dd56d86073387e0ef1805ca22e39c8",type:"0x5d4b302506645c37ff133b98c4b50a5ae14841659738d6d733d59d0d217a93bf::coin::COIN",reserveObjectId:"0xeb3903f7748ace73429bd52a70fff278aac1725d3b58afa781f25ce3450ac203",borrowBalanceParentId:"0x8a3aaa817a811131c624658f6e77cba04ab5829293d2c49c1a9cce8ac9c8dec4",supplyBalanceParentId:"0x8d0a4467806458052d577c8cd2be6031e972f2b8f5f77fce98aa12cd85330da9"},usdt:{name:"USDT",coinType:"usdt",assetId:2,poolId:"0x0e060c3b5b8de00fb50511b7a45188c8e34b6995c01f69d98ea5a466fe10d103",type:"0xc060006111016b8a020ad5b33834984a437aaa7d3c74c18e09a95d48aceab08c::coin::COIN",reserveObjectId:"0xb8c5eab02a0202f638958cc79a69a2d30055565caad1684b3c8bbca3bddcb322",borrowBalanceParentId:"0xc14d8292a7d69ae31164bafab7ca8a5bfda11f998540fe976a674ed0673e448f",supplyBalanceParentId:"0x7e2a49ff9d2edd875f82b76a9b21e2a5a098e7130abfd510a203b6ea08ab9257"},weth:{name:"WETH",coinType:"weth",assetId:3,poolId:"0x71b9f6e822c48ce827bceadce82201d6a7559f7b0350ed1daa1dc2ba3ac41b56",type:"0xaf8cd5edc19c4512f4259f0bee101a40d41ebed738ade5874359610ef8eeced5::coin::COIN",reserveObjectId:"0xafecf4b57899d377cc8c9de75854c68925d9f512d0c47150ca52a0d3a442b735",borrowBalanceParentId:"0x7568d06a1b6ffc416a36c82791e3daf0e621cf19d4a2724fc6f74842661b6323",supplyBalanceParentId:"0xa668905b1ad445a3159b4d29b1181c4a62d864861b463dd9106cc0d97ffe8f7f"},cetus:{name:"CETUS",coinType:"cetus",assetId:4,poolId:"0x3c376f857ec4247b8ee456c1db19e9c74e0154d4876915e54221b5052d5b1e2e",type:"0x06864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b::cetus::CETUS",reserveObjectId:"0x66a807c06212537fe46aa6719a00e4fa1e85a932d0b53ce7c4b1041983645133",borrowBalanceParentId:"0x4c3da45ffff6432b4592a39cdb3ce12f4a28034cbcb804bb071facc81fdd923d",supplyBalanceParentId:"0x6adc72faf2a9a15a583c9fb04f457c6a5f0b456bc9b4832413a131dfd4faddae"},voloSui:{name:"VoloSui",coinType:"voloSui",assetId:5,poolId:"0x9790c2c272e15b6bf9b341eb531ef16bcc8ed2b20dfda25d060bf47f5dd88d01",fondPoolId:"0xe2b5ada45273676e0da8ae10f8fe079a7cec3d0f59187d3d20b1549c275b07ea",type:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55::cert::CERT",reserveObjectId:"0xd4fd7e094af9819b06ea3136c13a6ae8da184016b78cf19773ac26d2095793e2",borrowBalanceParentId:"0x8fa5eccbca2c4ba9aae3b87fd44aa75aa5f5b41ea2d9be4d5321379384974984",supplyBalanceParentId:"0xe6457d247b6661b1cac123351998f88f3e724ff6e9ea542127b5dcb3176b3841"},haSui:{name:"HaedalSui",coinType:"haSui",assetId:6,poolId:"0x6fd9cb6ebd76bc80340a9443d72ea0ae282ee20e2fd7544f6ffcd2c070d9557a",fondPoolId:"0xa20e18085ce04be8aa722fbe85423f1ad6b1ae3b1be81ffac00a30f1d6d6ab51",type:"0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d::hasui::HASUI",reserveObjectId:"0x0c9f7a6ca561dc566bd75744bcc71a6af1dc3caf7bd32c099cd640bb5f3bb0e3",borrowBalanceParentId:"0x01f36898e020be6c3423e5c95d9f348868813cd4d0be39b0c8df9d8de4722b00",supplyBalanceParentId:"0x278b8e3d09c3548c60c51ed2f8eed281876ea58c392f71b7ff650cc9286d095b"},navx:{name:"NAVX",coinType:"navx",assetId:7,poolId:"0xc0e02e7a245e855dd365422faf76f87d9f5b2148a26d48dda6e8253c3fe9fa60",fondPoolId:"0x9dae0cf104a193217904f88a48ce2cf0221e8cd9073878edd05101d6b771fa09",type:"0xa99b8952d4f7d947ea77fe0ecdcc9e5fc0bcab2841d6e2a5aa00c3044e5544b5::navx::NAVX",reserveObjectId:"0x2e13b2f1f714c0c5fa72264f147ef7632b48ec2501f810c07df3ccb59d6fdc81",borrowBalanceParentId:"0xa5bf13075aa400cbdd4690a617c5f008e1fae0511dcd4f7121f09817df6c8d8b",supplyBalanceParentId:"0x59dedca8dc44e8df50b190f8b5fe673098c1273ac6168c0a4addf3613afcdee5"},wbtc:{name:"WBTC",coinType:"wbtc",assetId:8,poolId:"0xd162cbe40f8829ce71c9b3d3bf3a83859689a79fa220b23d70dc0300b777ae6e",type:"0x027792d9fed7f9844eb4839566001bb6f6cb4804f66aa2da6fe1ee242d896881::coin::COIN",reserveObjectId:"0x8b4d81f004e4e9faf4540951a896b6d96e42598a270e6375f598b99742db767e",borrowBalanceParentId:"0x55e1f3c9e6e5cf9fff563bdd61db07a3826458c56ef72c455e049ab3b1b0e99c",supplyBalanceParentId:"0x821e505a0091b089edba94deaa14c2f2230d026bbaa7b85680554441aad447e0"},ausd:{name:"AUSD",coinType:"ausd",assetId:9,poolId:"0xc9208c1e75f990b2c814fa3a45f1bf0e85bb78404cfdb2ae6bb97de58bb30932",type:"0x2053d08c1e2bd02791056171aab0fd12bd7cd7efad2ab8f6b9c8902f14df2ff2::ausd::AUSD",reserveObjectId:"0x918889c6a9d9b93108531d4d59a4ebb9cc4d41689798ffc1d4aed6e1ae816ec0",borrowBalanceParentId:"0x551300b9441c9a3a16ca1d7972c1dbb4715e15004ccd5f001b2c2eee22fd92c1",supplyBalanceParentId:"0xe151af690355de8be1c0281fbd0d483c099ea51920a57c4bf8c9666fd36808fd"},nusdc:{name:"USDC",assetId:10,coinType:"nusdc",poolId:"0xa3582097b4c57630046c0c49a88bfc6b202a3ec0a9db5597c31765f7563755a8",type:"0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC",reserveObjectId:"0x4c8a2c72a22ae8da803a8519798d312c86e74a9e0d6ec0eec2bfcf7e4b3fef5e",borrowBalanceParentId:"0xb0b0c7470e96cabbb4f1e8d06bef2fbea65f4dbac52afae8635d9286b1ea9a09",supplyBalanceParentId:"0x08b5ce8574ac3bc9327e66ad5decd34d07ee798f724ad01058e8855ac9acb605"},eth:{name:"ETH",assetId:11,coinType:"eth",poolId:"0x78ba01c21d8301be15690d3c30dc9f111871e38cfb0b2dd4b70cc6052fba41bb",type:"0xd0e89b2af5e4910726fbcd8b8dd37bb79b29e5f83f7491bca830e94f7f226d29::eth::ETH",reserveObjectId:"0x376faea6dfbffab9ea808474cb751d91222b6d664f38c0f1d23de442a8edb1ce",borrowBalanceParentId:"0xf0c6ce5cfaee96073876a5fab7426043f3a798b79502c4caeb6d9772cd35af1f",supplyBalanceParentId:"0xc0a0cb43620eb8a84d5a4a50a85650e7fa7ba81e660f9cc2863404fd84591d4b"},usdy:{name:"USDY",assetId:12,coinType:"usdy",poolId:"0x4b6253a9f8cf7f5d31e6d04aed4046b9e325a1681d34e0eff11a8441525d4563",type:"0x960b531667636f39e85867775f52f6b1f220a058c4de786905bdf761e06a56bb::usdy::USDY",reserveObjectId:"",borrowBalanceParentId:"",supplyBalanceParentId:""}},borrowFee:.003,borrowFeeAddress:"0x70b9b10704263cf53392849e33b1f5fd16005869b4198ed5524836bad1234ea2"};async function lo(){if(!Nr)try{let a=await fetch("https://open-api.naviprotocol.io/api/msafe").then(r=>r.json()),{packageId:t,borrowFee:e,borrowFeeAddress:n,pool:o}=a;t&&(Vt.ProtocolPackage=t),e&&(Vt.borrowFee=e),n&&(Vt.borrowFeeAddress=n),o&&(Vt.pool=o),Nr=!0}catch(a){console.error(a.message)}}var y=Vt;import{TransactionType as Ht}from"@msafe/sui3-utils";import{bcs as Mr}from"@mysten/sui.js/bcs";import{normalizeStructTag as Uc,normalizeSuiAddress as Kt}from"@mysten/sui.js/utils";var un=class{constructor(t){this.txb=t}decode(){if(console.log("txb",this.txb),this.isClaimRewardTransaction())return this.decodeClaimReward();if(this.isEntryBorrowTransaction())return this.decodeEntryBorrow();if(this.isEntryBorrowWithFeeTransaction())return this.decodeEntryBorrow();if(this.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(`${y.ProtocolPackage}::incentive_v2::claim_reward`)}isEntryBorrowTransaction(){return!!this.getMoveCallTransaction(`${y.ProtocolPackage}::incentive_v2::entry_borrow`)}isEntryBorrowWithFeeTransaction(){return!!this.getMoveCallTransaction(`${y.ProtocolPackage}::incentive_v2::borrow`)}isEntryDepositTransaction(){return!!this.getMoveCallTransaction(`${y.ProtocolPackage}::incentive_v2::entry_deposit`)}isEntryRepayTransaction(){return!!this.getMoveCallTransaction(`${y.ProtocolPackage}::incentive_v2::entry_repay`)}isEntryWithdrawTransaction(){return!!this.getMoveCallTransaction(`${y.ProtocolPackage}::incentive_v2::entry_withdraw`)}findPoolByAssetId(t){let e=Object.values(y.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===`${y.ProtocolPackage}::incentive_v2::claim_reward`){let n=new pn(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:Ht.Other,type:"ClaimReward",intentionData:{claims:t}}}decodeEntryBorrow(){let t=this.helper.decodeInputU8(4),e=this.helper.decodeInputU64(5),n=this.findPoolByAssetId(t);return{txType:Ht.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:Ht.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:Ht.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:Ht.Other,type:"EntryWithdraw",intentionData:{amount:e,coinType:n.coinType}}}get helper(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(y.ProtocolPackage));return new pn(t,this.txb)}},pn=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 Kt(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 Mr.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 Kt(t.value.Object.ImmOrOwned.objectId)}return Kt(t.value)}static getSharedObjectId(t){if(t.type!=="object")throw new Error(`not object argument: ${JSON.stringify(t)}`);if(typeof t.value!="object")return Kt(t.value);if(!("Object"in t.value)||!("Shared"in t.value.Object))throw new Error("not Shared");return Kt(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 Mr.de(e,new Uint8Array(n))}typeArg(t){return Uc(this.moveCall.typeArguments[t])}txArg(t){return this.moveCall.arguments[t]}};import{TransactionBlock as Fc}from"@mysten/sui.js/transactions";function uo(a,t,e,n){return a.moveCall({target:`${y.ProtocolPackage}::incentive_v2::entry_deposit`,arguments:[a.object("0x06"),a.object(y.StorageId),a.object(t.poolId),a.pure(t.assetId),e,a.pure(n),a.object(y.Incentive),a.object(y.IncentiveV2)],typeArguments:[t.type]}),a}function Er(a,t,e){return a.moveCall({target:`${y.ProtocolPackage}::incentive_v2::entry_withdraw`,arguments:[a.object("0x06"),a.object(y.PriceOracle),a.object(y.StorageId),a.object(t.poolId),a.pure(t.assetId),a.pure(e),a.object(y.Incentive),a.object(y.IncentiveV2)],typeArguments:[t.type]}),a}function Wr(a,t,e,n){let o=a.moveCall({target:`${y.ProtocolPackage}::incentive_v2::borrow`,arguments:[a.object("0x06"),a.object(y.PriceOracle),a.object(y.StorageId),a.object(t.poolId),a.pure(t.assetId),a.pure(e),a.object(y.IncentiveV2)],typeArguments:[t.type]}),[r]=a.moveCall({target:"0x02::coin::from_balance",typeArguments:[t.type],arguments:[o]});if(y.borrowFee>0){let[i]=a.splitCoins(r,[a.pure(Math.floor(e*y.borrowFee))]);a.transferObjects([r],a.pure(n)),a.transferObjects([i],a.pure(y.borrowFeeAddress))}else a.transferObjects([r],a.pure(n));return a}function po(a,t,e,n){return a.moveCall({target:`${y.ProtocolPackage}::incentive_v2::entry_repay`,arguments:[a.object("0x06"),a.object(y.PriceOracle),a.object(y.StorageId),a.object(t.poolId),a.pure(t.assetId),e,a.pure(n),a.object(y.IncentiveV2)],typeArguments:[t.type]}),a}function Lr(a,t,e,n,o){return a.moveCall({target:`${y.ProtocolPackage}::incentive_v2::claim_reward`,arguments:[a.object("0x06"),a.object(y.IncentiveV2),a.object(e),a.object(y.StorageId),a.pure(t),a.pure(n)],typeArguments:o}),a}var mn=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(){let{claims:e}=this.data,n=new Fc;return e.forEach(o=>{let{assetId:r,poolId:i,option:s,typeArguments:c}=o;Lr(n,r,i,s,c)}),n}static fromData(e){return new a(e)}};import{TransactionBlock as $c}from"@mysten/sui.js/transactions";var fn=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{coinType:n,amount:o}=this.data,r=new $c;console.log("build",this.data);let i=y.pool[n];if(!i)throw new Error(`${n} not support, please use ${Object.keys(y.pool).join(", ")}.`);return Wr(r,i,o,e.account.address)}static fromData(e){return new a(e)}};import{TransactionBlock as qc}from"@mysten/sui.js/transactions";async function bn(a,t,e){let n=await a.getCoins({owner:t,coinType:e});return console.log("getTokenObjs",t,n),n}var gn=class a extends g{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 qc;if(console.log("build",this.data),r==="sui"){let[u]=s.splitCoins(s.gas,[i]);return uo(s,y.pool.sui,u,i)}let c=y.pool[r];if(!c)throw new Error(`${r} not support, please use ${Object.keys(y.pool).join(", ")}.`);let d=await bn(n,o.address,c.type);if(!d.data[0])throw new Error(`Insufficient balance for ${c.name} Token`);let l=d.data[0].coinObjectId;if(d.data.length>=2){let u=1;for(;u<d.data.length;)s.mergeCoins(l,[d.data[u].coinObjectId]),u++}return uo(s,c,s.object(l),i)}static fromData(e){return new a(e)}};import{TransactionBlock as Qc}from"@mysten/sui.js/transactions";var hn=class a extends g{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 Qc;if(console.log("build",this.data),r==="sui"){let[u]=s.splitCoins(s.gas,[i]);return po(s,y.pool.sui,u,i)}let c=y.pool[r];if(!c)throw new Error(`${r} not support, please use ${Object.keys(y.pool).join(", ")}.`);let d=await bn(n,o.address,c.type);if(!d.data[0])throw new Error(`Insufficient balance for ${c.name} Token`);let l=d.data[0].coinObjectId;if(d.data.length>=2){let u=1;for(;u<d.data.length;)s.mergeCoins(l,[d.data[u].coinObjectId]),u++}return po(s,c,s.object(l),i)}static fromData(e){return new a(e)}};import{TransactionBlock as Vc}from"@mysten/sui.js/transactions";var yn=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(){let{coinType:e,amount:n}=this.data,o=new Vc;console.log("build",this.data);let r=y.pool[e];if(!r)throw new Error(`${e} not support, please use ${Object.keys(y.pool).join(", ")}.`);return Er(o,r,n)}static fromData(e){return new a(e)}};var Sn=class{application="navi";supportSDK="@mysten/sui.js";async deserialize(t){await lo();let{transactionBlock:e}=t,o=new un(e).decode();return{txType:Hc.Other,txSubType:o.type,intentionData:o.intentionData}}async build(t){let{suiClient:e,account:n}=t,o;switch(await lo(),t.txSubType){case"EntryDeposit":o=gn.fromData(t.intentionData);break;case"EntryBorrow":o=fn.fromData(t.intentionData);break;case"EntryRepay":o=hn.fromData(t.intentionData);break;case"EntryWithdraw":o=yn.fromData(t.intentionData);break;case"ClaimReward":o=mn.fromData(t.intentionData);break;default:throw new Error("not implemented")}return o.build({suiClient:e,account:n})}};import{TransactionSubTypes as Kc,TransactionType as Ur}from"@msafe/sui3-utils";import{fromHEX as Gc,toHEX as zc}from"@mysten/bcs";import{Transaction as Jc}from"@mysten/sui/transactions";import Xc from"sort-keys-recursive";var Fr="msafe-plain-tx",$r=Kc.others.plain,mo=class a{constructor(t){this.data=t}application=Fr;txType=Ur.Other;txSubType=$r;serialize(){return JSON.stringify(Xc(this.data))}async build(t){return Jc.from(Gc(this.data.content))}static fromData(t){return new a(t)}},wn=class{application;supportSDK="@mysten/sui";constructor(){this.application=Fr}async deserialize(t){let{transaction:e}=t,n=await e.build({client:t.suiClient});return{txType:Ur.Other,txSubType:$r,intentionData:{content:zc(n)}}}async build(t){let{account:e}=t,o=await mo.fromData(t.intentionData).build({suiClient:t.suiClient,network:t.network,account:t.account}),i=await t.suiClient.devInspectTransactionBlock({transactionBlock:o,sender:e.address});if(!(i.effects.status.status==="success"))throw new Error(i.effects.status.error);return o}};import{SuiClient as qr}from"@mysten/sui/client";import{Transaction as Yc}from"@mysten/sui/transactions";import{SuiClient as fo}from"@mysten/sui.js/client";import{TransactionBlock as Zc}from"@mysten/sui.js/transactions";var Cn=class a{apps;constructor(){this.apps=new Map}static fromHelpers(t){let e=new a;for(let n=0;n<t.length;n++){let o=t[n];switch(o.supportSDK){case"@mysten/sui.js":e.addLegacyHelper(o);break;case"@mysten/sui":e.addHelper(o);break;default:throw new Error(`${o.application}: ${o.supportSDK} SDK not supported`)}}return e}addLegacyHelper(t){this.apps.set(t.application,new go(t))}addHelper(t){this.apps.set(t.application,new bo(t))}getAppHelper(t){let e=this.apps.get(t);if(!e)throw new Error(`${t} not registered`);return e}},bo=class{constructor(t){this.helper=t}async deserialize(t){let e=new qr({url:t.clientUrl}),n=new fo({url:t.clientUrl}),o=await t.transactionBlock.build({client:n}),r=Yc.from(o);return this.helper.deserialize({...t,suiClient:e,transaction:r})}async build(t){let e=new qr({url:t.clientUrl}),n=await this.helper.build({...t,suiClient:e});n.setSender(t.account.address);let o=await n.build({client:e});return Zc.from(o)}},go=class{constructor(t){this.helper=t}async deserialize(t){let e=new fo({url:t.clientUrl});return this.helper.deserialize({...t,transactionBlock:t.transactionBlock,suiClient:e})}async build(t){let e=new fo({url:t.clientUrl});return this.helper.build({...t,suiClient:e})}};import{TransactionType as Al}from"@msafe/sui3-utils";import{TransactionType as P}from"@msafe/sui3-utils";var rt=class{constructor(t,e){this.txb=t;this.scallop=e}scallop;get coreId(){return{protocolPkg:this.scallop.address.get("core.packages.protocol.id"),market:this.scallop.address.get("core.market"),version:this.scallop.address.get("core.version"),coinDecimalsRegistry:this.scallop.address.get("core.coinDecimalsRegistry"),xOracle:this.scallop.address.get("core.oracles.xOracle"),spoolPkg:this.scallop.address.get("spool.id"),borrowIncentivePkg:this.scallop.address.get("borrowIncentive.id"),veScaPkgId:this.scallop.address.get("vesca.id"),scoin:this.scallop.address.get("scoin.id"),referral:this.scallop.address.get("referral.id")}}get transactions(){return this.txb.blockData.transactions}get inputTransaction(){return this.txb.blockData.inputs}getMoveCallTransaction(t){return this.transactions.find(e=>e.kind==="MoveCall"&&e.target===t)}};var Qr="https://sui.apis.scallop.io";var Vr="66f8e7ed9bb9e07fdfb86bbb",In="0xefe8b36d5b2e43728cc323298626b83177803521d195cfb11e15b910e892fddf";var it="0x7016aae72cfc67f2fadf55769c0a7dd54291a583b63051a5ed71081cce836ac6::sca::SCA",st="0xc63072e7f5f4983a2efaf5bdba1480d5e7d74d57948e1c7cc436f8e22cbeb410",z=["weth","wbtc","wusdc","wusdt","sui","wapt","wsol","cetus","afsui","hasui","vsui","sca","usdc"],Tn=["weth","wbtc","wusdc","wusdt","sui","wapt","wsol","cetus","afsui","hasui","vsui","sca","usdc"],ct=["sweth","ssui","swusdc","swusdt","scetus","safsui","shasui","svsui","susdc"],J=["ssui","swusdc","swusdt","safsui","shasui","svsui","sweth","ssca","scetus","swbtc","swsol","susdc"];var Hr=["sui"],lt=["sui","wusdc","wusdt","afsui","hasui","vsui","weth","sca","wbtc","wsol","usdc"];var Kr={weth:8,wbtc:8,wusdc:6,usdc:6,wusdt:6,sui:9,wapt:8,wsol:8,sca:9,cetus:9,afsui:9,hasui:9,vsui:9,sweth:8,swbtc:8,susdc:6,swusdt:6,swusdc:6,ssui:9,swapt:8,swsol:8,scetus:9,safsui:9,shasui:9,svsui:9,ssca:9};var kn={sweth:"sui",ssui:"sui",swusdc:"sui",swusdt:"sui",scetus:"sui",safsui:"sui",shasui:"sui",svsui:"sui",susdc:"sui"},Gr={sui:["sui","sca"],wusdc:["sui","sca"],wusdt:["sui","sca"],afsui:["sui","sca"],hasui:["sui","sca"],vsui:["sui","sca"],sca:["sui","sca"],weth:["sui","sca"],wbtc:["sui","sca"],wsol:["sui","sca"],usdc:["sui","sca"]},zr={sui:"0x0000000000000000000000000000000000000000000000000000000000000002",weth:"0xaf8cd5edc19c4512f4259f0bee101a40d41ebed738ade5874359610ef8eeced5",wbtc:"0x027792d9fed7f9844eb4839566001bb6f6cb4804f66aa2da6fe1ee242d896881",wusdc:"0x5d4b302506645c37ff133b98c4b50a5ae14841659738d6d733d59d0d217a93bf",wusdt:"0xc060006111016b8a020ad5b33834984a437aaa7d3c74c18e09a95d48aceab08c",wapt:"0x3a5143bb1196e3bcdfab6203d1683ae29edd26294fc8bfeafe4aaa9d2704df37",wsol:"0xb7844e289a8410e50fb3ca48d69eb9cf29e27d223ef90353fe1bd8e27ff8f3f8",cetus:"0x06864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b",afsui:"0xf325ce1300e8dac124071d3152c5c5ee6174914f8bc2161e88329cf579246efc",hasui:"0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d",vsui:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55",sca:"0x7016aae72cfc67f2fadf55769c0a7dd54291a583b63051a5ed71081cce836ac6",usdc:"0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7"},L={weth:"0xaf8cd5edc19c4512f4259f0bee101a40d41ebed738ade5874359610ef8eeced5",wbtc:"0x027792d9fed7f9844eb4839566001bb6f6cb4804f66aa2da6fe1ee242d896881",wusdc:"0x5d4b302506645c37ff133b98c4b50a5ae14841659738d6d733d59d0d217a93bf",wusdt:"0xc060006111016b8a020ad5b33834984a437aaa7d3c74c18e09a95d48aceab08c",wapt:"0x3a5143bb1196e3bcdfab6203d1683ae29edd26294fc8bfeafe4aaa9d2704df37",wsol:"0xb7844e289a8410e50fb3ca48d69eb9cf29e27d223ef90353fe1bd8e27ff8f3f8"},ho={vsui:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55"},Jr={ssui:"0xaafc4f740de0dd0dde642a31148fb94517087052f19afb0f7bed1dc41a50c77b::scallop_sui::SCALLOP_SUI",scetus:"0xea346ce428f91ab007210443efcea5f5cdbbb3aae7e9affc0ca93f9203c31f0c::scallop_cetus::SCALLOP_CETUS",ssca:"0x5ca17430c1d046fae9edeaa8fd76c7b4193a00d764a0ecfa9418d733ad27bc1e::scallop_sca::SCALLOP_SCA",swusdc:"0xad4d71551d31092230db1fd482008ea42867dbf27b286e9c70a79d2a6191d58d::scallop_wormhole_usdc::SCALLOP_WORMHOLE_USDC",swusdt:"0xe6e5a012ec20a49a3d1d57bd2b67140b96cd4d3400b9d79e541f7bdbab661f95::scallop_wormhole_usdt::SCALLOP_WORMHOLE_USDT",sweth:"0x67540ceb850d418679e69f1fb6b2093d6df78a2a699ffc733f7646096d552e9b::scallop_wormhole_eth::SCALLOP_WORMHOLE_ETH",safsui:"0x00671b1fa2a124f5be8bdae8b91ee711462c5d9e31bda232e70fd9607b523c88::scallop_af_sui::SCALLOP_AF_SUI",shasui:"0x9a2376943f7d22f88087c259c5889925f332ca4347e669dc37d54c2bf651af3c::scallop_ha_sui::SCALLOP_HA_SUI",svsui:"0xe1a1cc6bcf0001a015eab84bcc6713393ce20535f55b8b6f35c142e057a25fbe::scallop_v_sui::SCALLOP_V_SUI",swbtc:"0x2cf76a9cf5d3337961d1154283234f94da2dcff18544dfe5cbdef65f319591b5::scallop_wormhole_btc::SCALLOP_WORMHOLE_BTC",swsol:"0x1392650f2eca9e3f6ffae3ff89e42a3590d7102b80e2b430f674730bc30d3259::scallop_wormhole_sol::SCALLOP_WORMHOLE_SOL",susdc:"0x854950aa624b1df59fe64e630b2ba7c550642e9342267a33061d59fb31582da5::scallop_usdc::SCALLOP_USDC"};import{bcs as Xr}from"@mysten/sui.js/bcs";import{normalizeStructTag as tl,normalizeSuiAddress as Gt}from"@mysten/sui.js/utils";var 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 Gt(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 Xr.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 Gt(t.value.Object.ImmOrOwned.objectId)}return Gt(t.value)}static getSharedObjectId(t){if(t.type!=="object")throw new Error(`not object argument: ${JSON.stringify(t)}`);if(typeof t.value!="object")return Gt(t.value);if(!("Object"in t.value)||!("Shared"in t.value.Object))throw new Error("not Shared");return Gt(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 Xr.de(e,new Uint8Array(n))}typeArg(t){return tl(this.moveCall.typeArguments[t])}txArg(t){return this.moveCall.arguments[t]}};import{bcs as el}from"@mysten/sui.js/bcs";var _=class{constructor(t,e){this.splitCoin=t;this.txb=e}getAmountInput(){return this.splitCoin.amounts.map(t=>{if(t.kind==="Input")return Number(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 el.de(e,new Uint8Array(n))}return t.value}};var vn=class extends rt{decode(){if(this.isMoveAsset())return this.decodeMoveAsset();if(this.isSupplyWithStakeSpoolTransaction())return this.decodeSupplyWithStakeSpool();if(this.isUnstakeAndWithdrawTransaction())return this.decodeUnstakeAndWithdraw();if(this.isStakeSpoolTransaction())return this.decodeStakeSpool();if(this.isDepositCollateralTransaction())return this.decodeDepositCollateral();if(this.isWithdrawCollateralTransaction())return this.decodeWithdrawCollateral();if(this.isWithdrawLendingScoinTransaction())return this.decodeWithdrawLendingScoin();if(this.isWithdrawLendingTransaction())return this.decodeWithdrawLending();if(this.isSupplyLendingTransaction())return this.decodeSupplyLending();if(this.isBorrowWithReferralTransaction())return this.decodeBorrowWithReferral();if(this.isBorrowWithBoostTransaction())return this.decodeBorrowWithBoost();if(this.isBorrowTransaction())return this.decodeBorrow();if(this.isRepayWithBoostTransaction())return this.decodeRepayWithBoost();if(this.isRepayTransaction())return this.decodeRepay();if(this.isUnstakeSpoolTransaction())return this.decodeUnstakeSpool();if(this.isClaimRewardTransaction())return this.decodeClaimReward();if(this.isOpenObligationTransaction())return this.decodeOpenObligation();if(this.isMigrateAndClaim())return this.decodeMigrateAndClaim();if(this.isMigrateScoinTransaction())return this.decodeMigrateScoin()}isMoveAsset(){return!!this.getMoveCallTransaction("0x5857d185897aaff40ae37b2eecc895efc1a9dff1b210c4fb894eabbce4ac2603::slippage_check::check_slippage")}isMigrateScoinTransaction(){return!!this.getMoveCallTransaction(`${this.coreId.scoin}::s_coin_converter::mint_s_coin`)}isSupplyLendingTransaction(){return!!this.getMoveCallTransaction(`${this.coreId.protocolPkg}::mint::mint`)}isSupplyWithStakeSpoolTransaction(){let t=this.getMoveCallTransaction(`${this.coreId.protocolPkg}::mint::mint`),e=this.getMoveCallTransaction(`${this.coreId.spoolPkg}::user::stake`);return!!t&&!!e}isUnstakeAndWithdrawTransaction(){let t=this.getMoveCallTransaction(`${this.coreId.spoolPkg}::user::unstake`),e=this.getMoveCallTransaction(`${this.coreId.protocolPkg}::redeem::redeem`);return!!t&&!!e}isStakeSpoolTransaction(){return!!this.getMoveCallTransaction(`${this.coreId.spoolPkg}::user::stake`)}isWithdrawLendingTransaction(){return!!this.getMoveCallTransaction(`${this.coreId.protocolPkg}::redeem::redeem`)}isWithdrawLendingScoinTransaction(){let t=!!this.getMoveCallTransaction(`${this.coreId.protocolPkg}::redeem::redeem`),e=!!this.getMoveCallTransaction(`${this.coreId.scoin}::s_coin_converter::burn_s_coin`);return!!t&&!!e}isDepositCollateralTransaction(){return!!this.getMoveCallTransaction(`${this.coreId.protocolPkg}::deposit_collateral::deposit_collateral`)}isWithdrawCollateralTransaction(){return!!this.getMoveCallTransaction(`${this.coreId.protocolPkg}::withdraw_collateral::withdraw_collateral`)}isBorrowTransaction(){return!!this.getMoveCallTransaction(`${this.coreId.protocolPkg}::borrow::borrow`)}isBorrowWithBoostTransaction(){let t=this.getMoveCallTransaction(`${this.coreId.protocolPkg}::borrow::borrow`),e=this.getMoveCallTransaction(`${this.coreId.borrowIncentivePkg}::user::stake_with_ve_sca`);return!!t&&!!e}isBorrowWithReferralTransaction(){return!!this.getMoveCallTransaction(`${this.coreId.protocolPkg}::borrow::borrow_with_referral`)}isRepayTransaction(){return!!this.getMoveCallTransaction(`${this.coreId.protocolPkg}::repay::repay`)}isRepayWithBoostTransaction(){let t=!!this.getMoveCallTransaction(`${this.coreId.protocolPkg}::repay::repay`),e=this.getMoveCallTransaction(`${this.coreId.borrowIncentivePkg}::user::stake_with_ve_sca`);return!!t&&!!e}isUnstakeSpoolTransaction(){return!!this.getMoveCallTransaction(`${this.coreId.spoolPkg}::user::unstake`)}isCreateStakeAccountTransaction(){return!!this.getMoveCallTransaction(`${this.coreId.spoolPkg}::user::new_spool_account`)}isClaimRewardTransaction(){let t=this.getMoveCallTransaction(`${this.coreId.spoolPkg}::user::redeem_rewards`),e=this.getMoveCallTransaction(`${this.coreId.borrowIncentivePkg}::user::redeem_rewards`);return!!t||!!e}isOpenObligationTransaction(){return!!this.getMoveCallTransaction(`${this.coreId.protocolPkg}::open_obligation::open_obligation`)}isMigrateAndClaim(){let t=this.getMoveCallTransaction(`${st}::user::redeem_rewards`),e=this.getMoveCallTransaction(`${this.coreId.borrowIncentivePkg}::user::stake_with_ve_sca`),n=this.getMoveCallTransaction(`${this.coreId.borrowIncentivePkg}::user::stake`);return!!t&&(!!e||!!n)}get helperClaimLendingReward(){return this.transactions.filter(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.spoolPkg}::user::redeem_rewards`)).map(e=>new 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 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(`${st}::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 helperBurnScoin(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.scoin}::s_coin_converter::burn_s_coin`));return new C(t,this.txb)}get helperSlippage(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith("0x5857d185897aaff40ae37b2eecc895efc1a9dff1b210c4fb894eabbce4ac2603::slippage_check::check_slippage"));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 helperBorrowWithReferral(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.protocolPkg}::borrow::borrow_with_referral`));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)}decodeMigrateScoin(){return{txType:P.Other,type:"MigrateScoin",intentionData:{}}}decodeMigrateAndClaim(){let t;this.helperStakeObligationWithVeSca.moveCall&&(t=this.helperStakeObligationWithVeSca.decodeOwnedObjectId(9));let e=this.helperClaimBorrowReward[0].decodeOwnedObjectId(2),n=this.helperClaimBorrowReward[0].decodeSharedObjectId(3),o=this.scallop.utils.parseCoinNameFromType(this.helperClaimBorrowReward[0].typeArg(0));return{txType:P.Other,type:"MigrateAndClaim",intentionData:{obligationKey:e,obligationId:n,rewardCoinName:o,veScaKey:t}}}decodeOpenObligation(){return{txType:P.Other,type:"OpenObligation",intentionData:{}}}decodeSupplyLending(){let t=this.scallop.utils.parseCoinNameFromType(this.helperMint.typeArg(0)),e=this.helperMint.getNestedInputParam(2),n=new _(e,this.txb).getAmountInput().reduce((o,r)=>o+r,0);return{txType:P.Other,type:"SupplyLending",intentionData:{amount:n,coinName:t}}}decodeWithdrawLending(){let t=this.scallop.utils.parseCoinNameFromType(this.helperRedeem.typeArg(0)),e=this.helperRedeem.getNestedInputParam(2),n=new _(e,this.txb).getAmountInput().reduce((o,r)=>o+r,0);return{txType:P.Other,type:"WithdrawLending",intentionData:{amount:n,coinName:t}}}decodeWithdrawLendingScoin(){let t=this.scallop.utils.parseCoinNameFromType(this.helperRedeem.typeArg(0)),e=this.helperBurnScoin.getNestedInputParam(1),n=new _(e,this.txb).getAmountInput().reduce((o,r)=>o+r,0);return{txType:P.Other,type:"WithdrawLending",intentionData:{amount:n,coinName:t}}}decodeDepositCollateral(){let t=this.scallop.utils.parseCoinNameFromType(this.helperDepositCollateral.typeArg(0)),e=this.helperDepositCollateral.getNestedInputParam(3),n=new _(e,this.txb).getAmountInput().reduce((r,i)=>r+i,0),o=this.helperDepositCollateral.decodeSharedObjectId(1);return{txType:P.Other,type:"DepositCollateral",intentionData:{amount:n,obligationId:o,collateralCoinName:t}}}decodeWithdrawCollateral(){let t=this.scallop.utils.parseCoinNameFromType(this.helperWithdrawCollateral.typeArg(0)),e=this.helperWithdrawCollateral.decodeInputU64(5),n=this.helperWithdrawCollateral.decodeSharedObjectId(1),o=this.helperWithdrawCollateral.decodeOwnedObjectId(2);return{txType:P.Other,type:"WithdrawCollateral",intentionData:{amount:e,collateralCoinName:t,obligationKey:o,obligationId:n}}}decodeBorrow(){let t=this.scallop.utils.parseCoinNameFromType(this.helperBorrow.typeArg(0)),e=this.helperBorrow.decodeInputU64(5),n=this.helperBorrow.decodeSharedObjectId(1),o=this.helperBorrow.decodeOwnedObjectId(2);return{txType:P.Other,type:"Borrow",intentionData:{amount:e,coinName:t,obligationKey:o,obligationId:n}}}decodeBorrowWithBoost(){let t=this.scallop.utils.parseCoinNameFromType(this.helperBorrow.typeArg(0)),e=this.helperStakeObligationWithVeSca.decodeOwnedObjectId(9),n=this.helperBorrow.decodeInputU64(5),o=this.helperBorrow.decodeSharedObjectId(1),r=this.helperBorrow.decodeOwnedObjectId(2);return{txType:P.Other,type:"BorrowWithBoost",intentionData:{amount:n,coinName:t,obligationKey:r,obligationId:o,veScaKey:e}}}decodeBorrowWithReferral(){let t=this.scallop.utils.parseCoinNameFromType(this.helperBorrowWithReferral.typeArg(0)),e;this.helperStakeObligationWithVeSca.moveCall&&(e=this.helperStakeObligationWithVeSca.decodeOwnedObjectId(9));let n=this.helperBorrowWithReferral.decodeInputU64(6),o=this.helperBorrowWithReferral.decodeSharedObjectId(1),r=this.helperBorrowWithReferral.decodeOwnedObjectId(2);return{txType:P.Other,type:"BorrowWithReferral",intentionData:{amount:n,coinName:t,obligationKey:r,obligationId:o,veScaKey:e}}}decodeRepay(){let t=this.scallop.utils.parseCoinNameFromType(this.helperRepay.typeArg(0)),e=this.helperRepay.getNestedInputParam(3),n=new _(e,this.txb).getAmountInput().reduce((r,i)=>r+i,0),o=this.helperRepay.decodeSharedObjectId(1);return{txType:P.Other,type:"Repay",intentionData:{amount:n,obligationId:o,coinName:t}}}decodeRepayWithBoost(){let t=this.scallop.utils.parseCoinNameFromType(this.helperRepay.typeArg(0)),e=this.helperStakeObligationWithVeSca.decodeOwnedObjectId(9),n=this.helperRepay.getNestedInputParam(3),o=new _(n,this.txb).getAmountInput().reduce((i,s)=>i+s,0),r=this.helperRepay.decodeSharedObjectId(1);return{txType:P.Other,type:"RepayWithBoost",intentionData:{amount:o,obligationId:r,coinName:t,veScaKey:e}}}decodeStakeSpool(){let t;this.isCreateStakeAccountTransaction()||(t=this.helperStake.decodeOwnedObjectId(1));let e=0;if(this.helperBurnScoin.moveCall){let r=this.helperBurnScoin.getNestedInputParam(1);e=new _(r,this.txb).getAmountInput().reduce((i,s)=>i+s,0)}if(this.helperStake.moveCall&&e===0){let r=this.helperStake.getNestedInputParam(2);e=new _(r,this.txb).getAmountInput().reduce((i,s)=>i+s,0)}let n=this.helperStake.typeArg(0),o=this.scallop.utils.parseCoinNameFromType(n);return{txType:P.Other,type:"StakeSpool",intentionData:{amount:e,marketCoinName:o,stakeAccountId:t}}}decodeUnstakeSpool(){let t=this.helperUnstake.decodeOwnedObjectId(1),e=this.helperUnstake.decodeInputU64(2),n=this.helperUnstake.typeArg(0),o=this.scallop.utils.parseCoinNameFromType(n);return{txType:P.Other,type:"UnstakeSpool",intentionData:{amount:e,marketCoinName:o,stakeAccountId:t}}}decodeSupplyWithStakeSpool(){let t=this.scallop.utils.parseCoinNameFromType(this.helperMint.typeArg(0)),e=this.helperMint.getNestedInputParam(2),n=new _(e,this.txb).getAmountInput().reduce((r,i)=>r+i,0),o;return this.isCreateStakeAccountTransaction()||(o=this.helperStake.decodeOwnedObjectId(1)),{txType:P.Other,type:"SupplyAndStakeLending",intentionData:{amount:n,coinName:t,stakeAccountId:o}}}decodeUnstakeAndWithdraw(){let t=[];this.helperUnstakes.forEach(o=>{let r=o.decodeOwnedObjectId(1),i=o.decodeInputU64(2);t.push({id:r,coin:i})});let e=this.scallop.utils.parseCoinNameFromType(this.helperRedeems[0].typeArg(0)),n=0;if(this.helperBurnScoin.moveCall){let o=this.helperBurnScoin.getNestedInputParam(1);n=new _(o,this.txb).getAmountInput().reduce((r,i)=>r+i,0)}return{txType:P.Other,type:"WithdrawAndUnstakeLending",intentionData:{amount:n,coinName:e,stakeAccountId:t}}}decodeMoveAsset(){let t=[];this.helperUnstakes.forEach(i=>{let s=i.decodeOwnedObjectId(1),c=i.decodeInputU64(2);t.push({id:s,coin:c})});let e=this.scallop.utils.parseCoinNameFromType(this.helperRedeems[0].typeArg(0)),n=0;if(this.helperBurnScoin.moveCall){let i=this.helperBurnScoin.getNestedInputParam(1);n=new _(i,this.txb).getAmountInput().reduce((s,c)=>s+c,0)}let o=this.helperSlippage.decodePureArg(1,"u64"),r=this.helperSlippage.decodePureArg(2,"string");return{txType:P.Other,type:"MigrateWusdcToUsdc",intentionData:{amount:n,coinName:e,slippage:o,validSwapAmount:r,stakeAccountId:t}}}decodeClaimReward(){let t=[],e=[],n=[];return this.helperClaimLendingReward.forEach(o=>{let r=o.decodeOwnedObjectId(2),i=o.typeArg(0),s=this.scallop.utils.parseCoinNameFromType(i);t.push({stakeMarketCoinName:s,stakeAccountId:r})}),this.helperClaimBorrowV2Reward.forEach(o=>{let r=o.decodeSharedObjectId(3),i=o.decodeOwnedObjectId(4),s=this.scallop.utils.parseCoinNameFromType(o.typeArg(0));e.push({obligationId:i,obligationKey:r,rewardCoinName:s})}),this.helperClaimBorrowReward.forEach(o=>{let r=o.decodeSharedObjectId(2),i=o.decodeOwnedObjectId(3),s=this.scallop.utils.parseCoinNameFromType(o.typeArg(0));n.push({obligationId:i,obligationKey:r,rewardCoinName:s})}),{txType:P.Other,type:"ClaimIncentiveReward",intentionData:{lendingIncentive:t,borrowIncentiveV2:e,borrowIncentive:n}}}};import{TransactionType as So}from"@msafe/sui3-utils";var xn=class extends rt{decode(){if(this.isCreateReferralLink())return this.decodeCreateReferralLink();if(this.isClaimRevenueReferral())return this.decodeClaimRevenueReferral();if(this.isBindReferral())return this.decodeBindReferral()}isClaimRevenueReferral(){return!!this.getMoveCallTransaction(`${this.coreId.referral}::referral_revenue_pool::claim_revenue_with_ve_sca_key`)}isCreateReferralLink(){return!!this.getMoveCallTransaction(`${this.coreId.veScaPkgId}::ve_sca::mint_ve_sca_placeholder_key`)}isBindReferral(){return!!this.getMoveCallTransaction(`${this.coreId.referral}::referral_bindings::bind_ve_sca_referrer`)}get helperClaimRevenueReferral(){return this.transactions.filter(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.referral}::referral_revenue_pool::claim_revenue_with_ve_sca_key`)).map(e=>new C(e,this.txb))}get helperBindReferral(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.referral}::referral_bindings::bind_ve_sca_referrer`));return new C(t,this.txb)}decodeCreateReferralLink(){return{txType:So.Other,type:"CreateReferralLink",intentionData:{}}}decodeClaimRevenueReferral(){let t=this.helperClaimRevenueReferral[0].decodeOwnedObjectId(2),e=this.helperClaimRevenueReferral.map(n=>n.typeArg(0));return{txType:So.Other,type:"ClaimRevenueReferral",intentionData:{veScaKey:t,coins:e}}}decodeBindReferral(){let t=this.helperBindReferral.decodePureArg(1,"address");return{txType:So.Other,type:"BindReferral",intentionData:{veScaKey:t}}}};import{TransactionType as zt}from"@msafe/sui3-utils";var An=class extends rt{decode(){if(this.isExtendPeriodAndStakeMoreSca())return this.decodePeriodAndStakeMoreSca();if(this.isStakeScaFirsTime()||this.isStakeMoreSca())return this.decodeStakeSca();if(this.isRenewExpiredVeSca())return this.decodeRenewExpiredVeSca();if(this.isExtendPeriod())return this.decodeExtendStakePeriod();if(this.isRedeemSca())return this.decodeRedeemSca()}isStakeScaFirsTime(){return!!this.getMoveCallTransaction(`${this.coreId.veScaPkgId}::ve_sca::mint_ve_sca_key`)}isExtendPeriodAndStakeMoreSca(){let t=this.getMoveCallTransaction(`${this.coreId.veScaPkgId}::ve_sca::extend_lock_period`),e=this.getMoveCallTransaction(`${this.coreId.veScaPkgId}::ve_sca::lock_more_sca`);return!!t&&!!e}isRedeemSca(){return!!this.getMoveCallTransaction(`${this.coreId.veScaPkgId}::ve_sca::redeem`)}isStakeMoreSca(){return!!this.getMoveCallTransaction(`${this.coreId.veScaPkgId}::ve_sca::lock_more_sca`)}isExtendPeriod(){return!!this.getMoveCallTransaction(`${this.coreId.veScaPkgId}::ve_sca::extend_lock_period`)}isRenewExpiredVeSca(){return!!this.getMoveCallTransaction(`${this.coreId.veScaPkgId}::ve_sca::renew_expired_ve_sca`)}get helperStakeMoreSca(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.veScaPkgId}::ve_sca::lock_more_sca`));return new 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(`${st}::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)}decodeRedeemSca(){let t=this.helperRedeemSca.decodeOwnedObjectId(1);return{txType:zt.Other,type:"RedeemSca",intentionData:{veScaKey:t}}}decodeRenewExpiredVeSca(){let t=this.helperRenewExpired.getNestedInputParam(4),e=this.helperRenewExpired.decodeInputU64(5),n=new _(t,this.txb).getAmountInput().reduce((f,S)=>f+S,0),o=this.helperRenewExpired.decodeOwnedObjectId(1),r=!!this.helperRedeemSca.moveCall,i=[],s=[],c=[];this.helperOldUnstakeObligation.moveCall&&(i=[this.helperOldUnstakeObligation.decodeSharedObjectId(2),this.helperOldUnstakeObligation.decodeSharedObjectId(3)]),this.helperUnstakeObligation.moveCall&&(s=[this.helperUnstakeObligation.decodeSharedObjectId(3),this.helperUnstakeObligation.decodeSharedObjectId(4)]),this.helperStakeObligationWithVeSca.moveCall&&(c=[this.helperStakeObligationWithVeSca.decodeSharedObjectId(3),this.helperStakeObligationWithVeSca.decodeSharedObjectId(4)]);let d=!1,l=!1,u,p,m=[{condition:i,isOld:!0},{condition:s,isOld:!1},{condition:c,isOld:!1}];for(let f=0;f<m.length;f++)m[f].condition.length>1&&([p,u]=m[f].condition,d=!0,l=m[f].isOld);return{txType:zt.Other,type:"RenewExpStakePeriod",intentionData:{amount:n,lockPeriodInDays:e,obligationId:u,obligationKey:p,veScaKey:o,isHaveRedeem:r,isObligationLocked:d,isOldBorrowIncentive:l}}}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,d,l=[{condition:n,isOld:!0},{condition:o,isOld:!1},{condition:r,isOld:!1}];for(let u=0;u<l.length;u++)l[u].condition.length>1&&([d,c]=l[u].condition,i=!0,s=l[u].isOld);return{txType:zt.Other,type:"ExtendStakePeriod",intentionData:{lockPeriodInDays:t,obligationId:c,obligationKey:d,veScaKey:e,isObligationLocked:i,isOldBorrowIncentive:s}}}decodePeriodAndStakeMoreSca(){let t=this.helperStakeMoreSca.getNestedInputParam(4),e=this.helperExtendStakePeriod.decodeInputU64(4),n=new _(t,this.txb).getAmountInput().reduce((m,f)=>m+f,0),o=[],r=[],i,s=[];this.helperOldUnstakeObligation.moveCall&&(o=[this.helperOldUnstakeObligation.decodeSharedObjectId(2),this.helperOldUnstakeObligation.decodeSharedObjectId(3)]),this.helperUnstakeObligation.moveCall&&(r=[this.helperUnstakeObligation.decodeSharedObjectId(3),this.helperUnstakeObligation.decodeSharedObjectId(4)]),this.helperStakeMoreSca.moveCall&&(i=this.helperStakeMoreSca.decodeOwnedObjectId(1)),this.helperStakeObligationWithVeSca.moveCall&&(s=[this.helperStakeObligationWithVeSca.decodeSharedObjectId(3),this.helperStakeObligationWithVeSca.decodeSharedObjectId(4)]);let c=!1,d=!1,l,u,p=[{condition:o,isOld:!0},{condition:r,isOld:!1},{condition:s,isOld:!1}];for(let m=0;m<p.length;m++)p[m].condition.length>1&&([u,l]=p[m].condition,c=!0,d=p[m].isOld);return{txType:zt.Other,type:"ExtendPeriodAndStakeMore",intentionData:{amount:n,veScaKey:i,lockPeriodInDays:e,obligationId:l,obligationKey:u,isOldBorrowIncentive:d,isObligationLocked:c}}}decodeStakeSca(){let t,e;this.helperStakeSca.moveCall&&this.helperStakeMoreSca.moveCall===void 0?(t=this.helperStakeSca.getNestedInputParam(3),e=this.helperStakeSca.decodeInputU64(4)):t=this.helperStakeMoreSca.getNestedInputParam(4);let n=new _(t,this.txb).getAmountInput().reduce((m,f)=>m+f,0),o=[],r=[],i,s=[];this.helperOldUnstakeObligation.moveCall&&(o=[this.helperOldUnstakeObligation.decodeSharedObjectId(2),this.helperOldUnstakeObligation.decodeSharedObjectId(3)]),this.helperUnstakeObligation.moveCall&&(r=[this.helperUnstakeObligation.decodeSharedObjectId(3),this.helperUnstakeObligation.decodeSharedObjectId(4)]),this.helperStakeMoreSca.moveCall&&(i=this.helperStakeMoreSca.decodeOwnedObjectId(1)),this.helperStakeObligationWithVeSca.moveCall&&(s=[this.helperStakeObligationWithVeSca.decodeSharedObjectId(3),this.helperStakeObligationWithVeSca.decodeSharedObjectId(4)]);let c=!1,d=!1,l,u,p=[{condition:o,isOld:!0},{condition:r,isOld:!1},{condition:s,isOld:!1}];for(let m=0;m<p.length;m++)p[m].condition.length>1&&([u,l]=p[m].condition,c=!0,d=p[m].isOld);return{txType:zt.Other,type:"StakeSca",intentionData:{amount:n,lockPeriodInDays:e,obligationId:l,obligationKey:u,veScaKey:i,isObligationLocked:c,isOldBorrowIncentive:d}}}};import nl from"sort-keys-recursive";var b=class{constructor(t){this.data=t}get application(){return"msafe-core"}serialize(){return JSON.stringify(nl(this.data))}};var On=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.borrow(this.data.coinName,Number(this.data.amount),this.data.obligationId,this.data.obligationKey,e.account.address)}static fromData(e){return new a(e)}};var Dn=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.borrowWithBoost(this.data.coinName,Number(this.data.amount),this.data.obligationId,this.data.obligationKey,this.data.veScaKey,e.account.address)}static fromData(e){return new a(e)}};var Pn=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.borrowWithReferral(this.data.coinName,Number(this.data.amount),this.data.obligationId,this.data.obligationKey,this.data.veScaKey,e.account.address)}static fromData(e){return new a(e)}};var _n=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.claim(this.data.lendingIncentive,this.data.borrowIncentiveV2,this.data.borrowIncentive,e.account.address)}static fromData(e){return new a(e)}};var Rn=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.depositCollateral(this.data.collateralCoinName,Number(this.data.amount),this.data.obligationId,e.account.address)}static fromData(e){return new a(e)}};var jn=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.migrateAndClaim(this.data.obligationKey,this.data.obligationId,this.data.rewardCoinName,this.data.veScaKey)}static fromData(e){return new a(e)}};var Bn=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.migrateAllMarketCoin()}static fromData(e){return new a(e)}};var Nn=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.migrateLendingWusdcToUsdcNative(this.data.coinName,Number(this.data.amount),this.data.slippage,this.data.validSwapAmount,this.data.stakeAccountId)}static fromData(e){return new a(e)}};var Mn=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.openObligation()}static fromData(e){return new a(e)}};var En=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.repay(this.data.coinName,Number(this.data.amount),this.data.obligationId,this.data.obligationKey,e.account.address)}static fromData(e){return new a(e)}};var Wn=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.repayWithBoost(this.data.coinName,Number(this.data.amount),this.data.obligationId,this.data.veScaKey,e.account.address)}static fromData(e){return new a(e)}};var Ln=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.stake(this.data.marketCoinName,Number(this.data.amount),void 0,e.account.address)}static fromData(e){return new a(e)}};var Un=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.deposit(this.data.coinName,Number(this.data.amount),e.account.address)}static fromData(e){return new a(e)}};var Fn=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.unstake(this.data.marketCoinName,Number(this.data.amount),void 0,e.account.address)}static fromData(e){return new a(e)}};var $n=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.unstakeAndWithdraw(this.data.coinName,Number(this.data.amount),this.data.stakeAccountId)}static fromData(e){return new a(e)}};var qn=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.withdrawCollateral(this.data.collateralCoinName,Number(this.data.amount),this.data.obligationId,this.data.obligationKey,e.account.address)}static fromData(e){return new a(e)}};var Qn=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.withdraw(this.data.coinName,Number(this.data.amount),e.account.address)}static fromData(e){return new a(e)}};var Vn=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.bindReferral(this.data.veScaKey)}static fromData(e){return new a(e)}};var Hn=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.claimRevenuReferral(this.data.veScaKey,this.data.coins)}static fromData(e){return new a(e)}};var Kn=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.createReferralLink()}static fromData(e){return new a(e)}};var Gn=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.extendPeriodAndStakeMoreSca(this.data.amount,this.data.veScaKey,this.data.lockPeriodInDays,this.data.obligationId,this.data.obligationKey,this.data.isObligationLocked,this.data.isOldBorrowIncentive,e.account.address)}static fromData(e){return new a(e)}};var zn=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.extendStakeScaLockPeriod(this.data.lockPeriodInDays,this.data.veScaKey,this.data.obligationId,this.data.obligationKey,this.data.isObligationLocked,this.data.isOldBorrowIncentive,e.account.address)}static fromData(e){return new a(e)}};var Jn=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.redeemSca(this.data.veScaKey)}static fromData(e){return new a(e)}};var Xn=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.renewExpiredStakeSca(this.data.amount,this.data.lockPeriodInDays,this.data.vescaKey,this.data.isHaveRedeem,this.data.obligation,this.data.obligationKey,this.data.isObligationLocked,this.data.isOldBorrowIncentive,e.account.address)}static fromData(e){return new a(e)}};var Yn=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.stakeSca(this.data.amount,this.data.isObligationLocked,this.data.isOldBorrowIncentive,this.data.obligationId,this.data.obligationKey,this.data.lockPeriodInDays,this.data.veScaKey,e.account.address)}static fromData(e){return new a(e)}};var Zn=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.supplyAndStake(this.data.coinName,Number(this.data.amount),this.data.stakeAccountId,e.account.address)}static fromData(e){return new a(e)}};var ta=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.withdrawUnlockedSca(this.data.vescaKey,e.account.address)}static fromData(e){return new a(e)}};var ea=class{id;addresses;constructor(t){let{id:e}=t;this.id=e}getId(){return this.id}getAddresses(){return this.addresses}get(t){if(!this.addresses)throw new Error(`Failed to fetch address ${this.id}`);return t.split(".").reduce((n,o)=>typeof n=="object"?n[o]:n,this.addresses)}async read(){let t={method:"GET",headers:new Headers({"Content-Type":"application/json"})},e=await fetch(`${Qr}/addresses/${this.id}`,t);if(e.status===200){let n=await e.json();if("mainnet"in n){this.addresses=n.mainnet;return}throw new Error("Mainnet key is not in address!")}throw new Error(`Failed to fetch address with id ${this.id}`)}};import{TransactionBlock as T}from"@mysten/sui.js/transactions";import xi from"bignumber.js";import{TransactionBlock as al}from"@mysten/sui.js/transactions";var na=class{params;isTestnet;address;query;utils;client;constructor(t,e){this.params=t,this.client=t.client;let{address:n,query:o,utils:r}=e;this.address=n,this.query=o,this.utils=r,this.isTestnet=t.networkType?t.networkType==="testnet":!1}createTxBlock(t){return new al(t)}async selectCoin(t,e,n,o=this.params.walletAddress){let r=this.utils.parseCoinType(e),i=await this.utils.selectCoinIds(n,r,o),[s,c]=this.utils.takeAmountFromCoins(t,i,n);return{takeCoin:s,leftCoin:c}}async selectMarketCoin(t,e,n,o=this.params.walletAddress){let r=this.utils.parseMarketCoinType(e),i=await this.utils.selectCoins(n,r,o),s=i.reduce((u,p)=>(u+=Number(p.balance),u),0),c=i.map(u=>u.objectId),[d,l]=this.utils.takeAmountFromCoins(t,c,Math.min(n,s));return{takeCoin:d,leftCoin:l,totalAmount:s}}async selectSCoin(t,e,n,o=this.params.walletAddress){let r=this.utils.parseSCoinType(e),i=await this.utils.selectCoins(n,r,o),s=i.map(u=>u.objectId),c=i.reduce((u,p)=>u+Number(p.balance),0),[d,l]=this.utils.takeAmountFromCoins(t,s,Math.min(c,n));return{takeCoin:d,leftCoin:l,totalAmount:c}}};import{TransactionBlock as ol}from"@mysten/sui.js/transactions";import aa from"bignumber.js";var xt=async(a,t)=>{let e=t,n=a.address.get("core.object")||In,o=[],r=!1,i=null;do{let l=await a.client.getOwnedObjects({owner:e,filter:{StructType:`${n}::obligation::ObligationKey`},cursor:i});o.push(...l.data),l.hasNextPage&&l.nextCursor?(r=!0,i=l.nextCursor):r=!1}while(r);let s=o.map(l=>l?.data?.objectId).filter(l=>l!==void 0),c=await a.client.multiGetObjects({ids:s,options:{showContent:!0,showType:!0}}),d=[];for(let l=0;l<c.length;l++){let u=c[l].data.objectId,{content:p}=c[l].data;if(p&&"fields"in p){let m=p.fields,f=String(m.ownership.fields.of),S=await wo(a,f);d.push({id:f,keyId:u,locked:S})}}return d},wo=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},Yr=async(a,t,e)=>{let n=e||[...z],o=t,r=[],i=!1,s=null;do{let l=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(...l.data),l.hasNextPage&&l.nextCursor?(i=!0,s=l.nextCursor):i=!1}while(i);let c={};return r.map(l=>l.data).filter(l=>l!=null).forEach(l=>{let u=l.type;if(l.content&&"fields"in l.content){let p=l.content.fields,m=a.utils.parseCoinNameFromType(u);m&&(c[m]=aa(c[m]??0).plus(p.balance).toNumber())}}),c},Zr=async(a,t,e)=>{let n=e,o=a.utils.parseCoinType(t),r=[],i=!1,s=null;do{let l=await a.client.getOwnedObjects({owner:n,filter:{StructType:`0x2::coin::Coin<${o}>`},options:{showContent:!0},cursor:s});r.push(...l.data),l.hasNextPage&&l.nextCursor?(i=!0,s=l.nextCursor):i=!1}while(i);let c=0;return r.map(l=>l.data).filter(l=>l!=null).forEach(l=>{if(l.content&&"fields"in l.content){let u=l.content.fields;c=aa(c).plus(u.balance).toNumber()}}),c},ti=async(a,t,e)=>{let n=e||[...z].map(l=>a.utils.parseMarketCoinName(l)),o=t,r=[],i=!1,s=null;do{let l=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(...l.data),l.hasNextPage&&l.nextCursor?(i=!0,s=l.nextCursor):i=!1}while(i);let c={};return r.map(l=>l.data).filter(l=>l!=null).forEach(l=>{let u=l.type;if(l.content&&"fields"in l.content){let p=l.content.fields,m=a.utils.parseCoinNameFromType(u);m&&(c[m]=aa(c[m]??0).plus(p.balance).toNumber())}}),c},ei=async(a,t,e)=>{let n=e,o=a.utils.parseMarketCoinType(t),r=[],i=!1,s=null;do{let l=await a.client.getOwnedObjects({owner:n,filter:{StructType:`0x2::coin::Coin<${o}>`},options:{showContent:!0},cursor:s});r.push(...l.data),l.hasNextPage&&l.nextCursor?(i=!0,s=l.nextCursor):i=!1}while(i);let c=0;return r.map(l=>l.data).filter(l=>l!=null).forEach(l=>{if(l.content&&"fields"in l.content){let u=l.content.fields;c=aa(c).plus(u.balance).toNumber()}}),c},ni=async(a,t)=>{let n=`${a.address.get("core.packages.query.id")}::obligation_query::obligation_data`,o=new ol;return o.moveCall({target:n,arguments:[o.object(t)]}),(await a.client.devInspectTransactionBlock({transactionBlock:o,sender:a.params.walletAddress})).events[0].parsedJson};import{normalizeStructTag as I}from"@mysten/sui.js/utils";var Jt=async(a,t)=>{let e=t,n=a.address.get("spool.object"),o=`${n}::spool_account::SpoolAccount`,r=[],i=!1,s=null;do{let p=await a.client.getOwnedObjects({owner:e,filter:{StructType:o},options:{showContent:!0,showType:!0},cursor:s});r.push(...p.data),p.hasNextPage&&p.nextCursor?(i=!0,s=p.nextCursor):i=!1}while(i);let c={sweth:[],ssui:[],susdc:[],swusdc:[],swusdt:[],scetus:[],safsui:[],shasui:[],svsui:[]},d=Object.keys(c).reduce((p,m)=>{let f=a.utils.parseCoinName(m),S=a.utils.parseMarketCoinType(f),w={...p},v=`${n}::spool_account::SpoolAccount<${S}>`;return w[m]=v,w},{}),l=r.map(p=>p?.data?.objectId).filter(p=>p!==void 0);return(await a.client.multiGetObjects({ids:l,options:{showContent:!0,showType:!0}})).forEach(p=>{let m=p.data.objectId,f=p.data.type;if(p.data.content&&"fields"in p.data.content){let S=p.data.content.fields,w=String(S.spool_id),v=String(S.stake_type.fields.name),E=Number(S.stakes),R=Number(S.index),U=Number(S.points),W=Number(S.total_points);I(f)===d.sweth?c.sweth.push({id:m,type:I(f),stakePoolId:w,stakeType:I(v),staked:E,index:R,points:U,totalPoints:W}):I(f)===d.ssui?c.ssui.push({id:m,type:I(f),stakePoolId:w,stakeType:I(v),staked:E,index:R,points:U,totalPoints:W}):I(f)===d.swusdc?c.swusdc.push({id:m,type:I(f),stakePoolId:w,stakeType:I(v),staked:E,index:R,points:U,totalPoints:W}):I(f)===d.swusdt?c.swusdt.push({id:m,type:I(f),stakePoolId:w,stakeType:I(v),staked:E,index:R,points:U,totalPoints:W}):I(f)===d.scetus?c.scetus.push({id:m,type:I(f),stakePoolId:w,stakeType:I(v),staked:E,index:R,points:U,totalPoints:W}):I(f)===d.safsui?c.safsui.push({id:m,type:I(f),stakePoolId:w,stakeType:I(v),staked:E,index:R,points:U,totalPoints:W}):I(f)===d.shasui?c.shasui.push({id:m,type:I(f),stakePoolId:w,stakeType:I(v),staked:E,index:R,points:U,totalPoints:W}):I(f)===d.svsui?c.svsui.push({id:m,type:I(f),stakePoolId:w,stakeType:I(v),staked:E,index:R,points:U,totalPoints:W}):I(f)===d.susdc&&c.susdc.push({id:m,type:I(f),stakePoolId:w,stakeType:I(v),staked:E,index:R,points:U,totalPoints:W})}}),c},Co=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,d=Number(c.max_distributed_point),l=Number(c.distributed_point),u=Number(c.distributed_point_per_period),p=Number(c.point_distribution_time),m=Number(c.max_stakes),f=String(c.stake_type.fields.name),S=Number(c.stakes),w=Number(c.index),v=Number(c.created_at),E=Number(c.last_update);n={id:i,type:I(s),maxPoint:d,distributedPoint:l,pointPerPeriod:u,period:p,maxStake:m,stakeType:I(f),totalStaked:S,index:w,createdAt:v,lastUpdate:E}}}return n},Io=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,d=String(c.spool_id),l=Number(c.exchange_rate_numerator),u=Number(c.exchange_rate_denominator),p=Number(c.rewards),m=Number(c.claimed_rewards);n={id:i,type:I(s),stakePoolId:d,ratioNumerator:l,ratioDenominator:u,rewards:p,claimedRewards:m}}}return n};import{TransactionBlock as sl}from"@mysten/sui.js/transactions";import{normalizeStructTag as gI}from"@mysten/sui.js/utils";import yI from"bignumber.js";var B=a=>{let{sender:t}=a.blockData;if(!t)throw new Error("Sender is required");return t},ri=(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(At(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)`)}},ii=(a,t,e)=>{if(At(e),a<=0)throw new Error("Lock period must be greater than 0");if(!!e&&e*1e3<=new Date().getTime())throw new Error("veSca is expired, use renewExpiredVeScaQuick instead");if(e&&t-(e??0)>126057600)throw new Error(`Maximum lock period is ~4 years (${1459} days)`)},si=(a,t)=>{if(At(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")},ci=(a,t,e)=>{if(At(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)`)},At=a=>{if(a===void 0)throw new Error("veSca not found")};import{normalizeStructTag as li,parseStructTag as rl}from"@mysten/sui.js/utils";import rI from"bignumber.js";var il=a=>({pointType:li(a.point_type.name),weightedAmount:Number(a.weighted_amount),points:Number(a.points),totalPoints:Number(a.total_points),index:Number(a.index)}),di=a=>({poolType:li(a.pool_type.name),debtAmount:Number(a.debt_amount),pointList:a.points_list.reduce((t,e)=>{let n=il(e),o=rl(n.pointType).name.toLowerCase();return t[o]=n,t},{})});var ra=a=>{let t=a.slice(1).toLowerCase();return a.charAt(0).toLowerCase()==="s"&&[...new Set([...z,...Tn,...Hr])].includes(t)},To=a=>{switch(a){case"afsui":return"afSUI";case"hasui":return"haSUI";case"vsui":return"vSUI";default:return a.toUpperCase()}},ui=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 pi=async(a,t,e,n)=>{let o=n||[...lt],r=a.address.get("borrowIncentive.query"),i=a.address.get("borrowIncentive.incentiveAccounts"),s=`${r}::incentive_account_query::incentive_account_data`,c=new sl;c.moveCall({target:s,arguments:[c.object(i),c.object(t)]});let l=(await a.client.devInspectTransactionBlock({transactionBlock:c,sender:e})).events[0].parsedJson,u={};return l.pool_records.forEach(p=>{let m=di(p),{poolType:f}=m,S=a.utils.parseCoinNameFromType(f);o.length>=1&&o.includes(S)&&(u[S]=m)},{}),u};var mi=async({address:a,client:t},e)=>{let n=a.get("borrowIncentive.object"),o=a.get("borrowIncentive.incentiveAccounts"),r=a.get("core.object"),i=await t.getObject({id:o,options:{showContent:!0}});if(i?.data?.content?.dataType!=="moveObject")return null;let s=i.data.content.fields.accounts.fields.id.id,c=await t.getDynamicFieldObject({parentId:s,name:{type:`${n}::typed_id::TypedID<${r}::obligation::Obligation>`,value:e}});return c?.data?.content?.dataType!=="moveObject"?null:c.data.content.fields.value.fields.binded_ve_sca_key?.fields.id??null};var fi=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),d=Number(r.price_info.fields.price_feed.fields.price.fields.price.fields.negative);return c*10**((s?-1:1)*i)*(d?-1:1)}}return 0};import ko from"bignumber.js";var bi=async(a,t)=>{let e=t,o=`${a.address.get("vesca.id")}::ve_sca::VeScaKey`,r=[],i=!1,s=null;do{let d=await a.client.getOwnedObjects({owner:e,filter:{StructType:o},cursor:s});r.push(...d.data),d.hasNextPage&&d.nextCursor?(i=!0,s=d.nextCursor):i=!1}while(i);return r.map(d=>d.data).filter(d=>!!d)},gi=async(a,t)=>{let n=(await bi(a,t)).map(r=>r.objectId),o=[];for(let r=0;r<n.length;r++){let i=await vo(a,n[r]);i&&o.push(i)}return o},vo=async(a,t,e)=>{let n=a.address.get("vesca.tableId"),o=t||(await bi(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:ko(c.locked_sca_amount).toNumber(),lockedScaCoin:ko(c.locked_sca_amount).shiftedBy(-9).toNumber(),unlockAt:ko(c.unlock_at).toNumber()}}return r};var ia=class{params;address;client;utils;constructor(t,e){this.params=t,this.client=t.client;let{address:n,utils:o}=e;this.address=n,this.utils=o}async getObligations(t=this.params.walletAddress){return xt(this,t)}async getCoinAmounts(t,e){return Yr(this,t,e)}async getCoinAmount(t,e=this.params.walletAddress){return Zr(this,t,e)}async getMarketCoinAmounts(t,e){return ti(this,t,e)}async getMarketCoinAmount(t,e=this.params.walletAddress){return ei(this,t,e)}async getPriceFromPyth(t){return fi(this,t)}async getAllStakeAccounts(t=this.params.walletAddress){return Jt(this,t)}async getStakeAccounts(t,e=this.params.walletAddress){return(await this.getAllStakeAccounts(e))[t]??[]}async getStakePools(t=[...ct]){let e={};for(let n=0;n<t.length;n++){let o=t[n],r=await Co(this,o);r&&(e[o]=r)}return e}async getStakePool(t){return Co(this,t)}async getStakeRewardPools(t=[...ct]){let e={};for(let n=0;n<t.length;n++){let o=await Io(this,t[n]);o&&(e[t[n]]=o)}return e}async getStakeRewardPool(t){return Io(this,t)}async getBorrowIncentiveAccounts(t,e=this.params.walletAddress,n){return pi(this,t,e,n)}async getObligationCoinNames(t){let e=await ni(this,t),n=e.collaterals.map(s=>`0x${s.type.name}`),o=e.debts.map(s=>`0x${s.type.name}`);return[...new Set([...n,...o])].map(s=>this.utils.parseCoinNameFromType(s))}};import{SUI_TYPE_ARG as xo,normalizeStructTag as cl}from"@mysten/sui.js/utils";var sa=class{params;isTestnet;_address;client;constructor(t,e){this.params=t,this.client=t.client,this._address=e}parseSymbol(t){if(ra(t)){let e=t.slice(1).toLowerCase();return t.slice(0,1).toLowerCase()+To(e)}return To(t)}parseCoinType(t){let e=ra(t)?this.parseCoinName(t):t,n=zr[e];return[L.wusdc,L.wusdt,L.weth,L.wbtc,L.wsol,L.wapt].includes(n)?`${n}::coin::COIN`:t==="vsui"?`${ho.vsui}::cert::CERT`:`${n}::${e}::${e.toUpperCase()}`}parseMarketCoinType(t){let e=this._address.get("core.object")||In,n=this.parseCoinType(t);return`${e}::reserve::MarketCoin<${n}>`}parseCoinNameFromType(t){let e=cl(t),n=/((0x[^:]+::[^:]+::[^<>]+))(?![^<>]*<)/,o=t.match(n),r=t.includes("reserve::MarketCoin");e=o?.[1]||t;let i={[`${L.wusdc}::coin::COIN`]:"wusdc",[`${L.wusdt}::coin::COIN`]:"wusdt",[`${L.weth}::coin::COIN`]:"weth",[`${L.wbtc}::coin::COIN`]:"wbtc",[`${L.wsol}::coin::COIN`]:"wsol",[`${L.wapt}::coin::COIN`]:"wapt"},s={[`${ho.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=>kn[t];getBorrowIncentiveRewardCoinName=t=>Gr[t];getCoinDecimal(t){return Kr[t]}getCoinWrappedType(t){return t==="wusdc"||t==="wusdt"||t==="weth"||t==="wbtc"||t==="wapt"||t==="wsol"?{from:"Wormhole",type:"Portal from Ethereum"}:void 0}parseSCoinType(t){return Jr[t]}parseUnderlyingSCoinType(t){let e=this.parseCoinName(t);return this.parseCoinType(e)}getSCoinTreasury(t){return this._address.get(`scoin.coins.${t}.treasury`)}async selectCoins(t,e=xo,n){let o=n,r=[],i=0,s=!0,c=null;for(;s&&i<t;){let d=await this.client.getCoins({owner:o,coinType:e,cursor:c});d.data.sort((l,u)=>parseInt(u.balance,10)-parseInt(l.balance,10));for(let l=0;l<d.data.length&&(r.push({objectId:d.data[l].coinObjectId,digest:d.data[l].digest,version:d.data[l].version,balance:d.data[l].balance}),i+=parseInt(d.data[l].balance,10),!(i>=t));l++);c=d.nextCursor,s=d.hasNextPage}if(!r.length)throw new Error("No valid coins found for the transaction.");return r}async selectCoinsMarketCoin(t=xo,e){let n=e,o=[],r=!0,i=null;for(;r;){let s=await this.client.getCoins({owner:n,coinType:t,cursor:i});s.data.sort((c,d)=>parseInt(d.balance,10)-parseInt(c.balance,10));for(let c=0;c<s.data.length&&(o.push({objectId:s.data[c].coinObjectId,digest:s.data[c].digest,version:s.data[c].version,balance:s.data[c].balance}),!(o.length>50));c++);i=s.nextCursor,r=s.hasNextPage}return o}async selectCoinIds(t,e=xo,n){return(await this.selectCoins(t,e,n)).map(r=>r.objectId)}parseAprToApy(t,e=365){return(1+t/e)**e-1}parseApyToApr(t,e=365){return((1+t)**(1/e)-1)*e}takeAmountFromCoins(t,e,n){let o=e.map(s=>t.object(s)),r=o[0];o.length>1&&t.mergeCoins(r,o.slice(1));let[i]=t.splitCoins(r,[t.pure(n)]);return[i,r]}getUnlockAt(t,e){let n=Math.floor(new Date().getTime()/1e3),o=e?Math.max(e-n,0):0,r=0;if(o===0){let i=(t??1)*86400;r=Math.min(n+i,n+126144e3)}else{let i=Math.min(t?t*86400+o:o,126144e3);r=n+i}return ui(r)}parseSCoinName(t){if(ra(t)&&J.includes(t))return t;let e=`s${t}`;if(J.includes(e))return e}};import{SUI_CLOCK_OBJECT_ID as Ot,SUI_TYPE_ARG as ll}from"@mysten/sui.js/utils";var Dt=async(...a)=>{let[t,e,n]=a;if(a.length===3&&n&&typeof n=="string"){let i=await vo(t.query,n);return i||void 0}let o=B(e),r=await gi(t.query,o);if(r.length!==0)return r[0]};var Ao=async(...a)=>{let[t,e,n,o]=a;if(a.length===4&&n&&o&&typeof n=="string"){let c=await wo(t.query,n);return{obligationId:n,obligationKey:o,obligationLocked:c}}let r=B(e),i=await xt(t.query,r);if(i.length===0)throw new Error(`No obligation found for sender ${r}`);let s=i.find(c=>c.id===n||c.keyId===o)??i[0];return{obligationId:s.id,obligationKey:s.keyId,obligationLocked:s.locked}},dl=async({builder:a,txBlock:t})=>{let e={borrowIncentivePkg:a.address.get("borrowIncentive.id"),query:a.address.get("borrowIncentive.query"),incentivePools:a.address.get("borrowIncentive.incentivePools"),incentiveAccounts:a.address.get("borrowIncentive.incentiveAccounts"),obligationAccessStore:a.address.get("core.obligationAccessStore"),config:a.address.get("borrowIncentive.config")},n={id:"0xc63072e7f5f4983a2efaf5bdba1480d5e7d74d57948e1c7cc436f8e22cbeb410",incentivePools:"0x64972b713ccec45ec3964809e477cea6f97350c0c50ca3aec85bb631639266ec",incentiveAccounts:"0x3c0b707068bdcea8bb859d751ad3e2149a9f83c13fcf4054ef91372a00bccdd3"},o={table:a.address.get("vesca.table"),treasury:a.address.get("vesca.treasury"),config:a.address.get("vesca.config")};return{stakeObligation:(r,i)=>{t.moveCall({target:`${e.borrowIncentivePkg}::user::stake`,arguments:[t.object(e.config),t.object(e.incentivePools),t.object(e.incentiveAccounts),t.object(i),t.object(r),t.object(e.obligationAccessStore),t.object(Ot)]})},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(Ot)]})},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(Ot)]})},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(Ot)],typeArguments:[ll]})},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(Ot)],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(Ot)],typeArguments:[c]})}}},N=async({builder:a,txBlock:t})=>{let e=await dl({builder:a,txBlock:t});return{normalMethod:e,stakeObligationQuick:async(n,o)=>{let{obligationId:r,obligationKey:i,obligationLocked:s}=await Ao(a,t,n,o),c=!!t.blockData.transactions.find(d=>d.kind==="MoveCall"&&(d.target===`${st}::user::unstake`||d.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 Ao(a,t,n,o);s&&e.unstakeObligation(r,i)},stakeObligationWithVeScaQuick:async(n,o,r)=>{let{obligationId:i,obligationKey:s,obligationLocked:c}=await Ao(a,t,n,o),d=!!t.blockData.transactions.find(async l=>l.kind==="MoveCall"&&(l.target===`${st}::user::unstake`||l.target===`${a.address.get("borrowIncentive.id")}::user::unstake`));if(!c||d){let l=await mi({address:a.address,client:a.client},i);if(r&&r!==l)throw new Error("Binded veScaKey is not equal to the provided veScaKey");l?e.stakeObligationWithVesca(i,s,l):e.stakeObligation(i,s)}},claimBorrowIncentiveQuick:(n,o,r)=>e.claimBorrowIncentive(o,r,n)}};import{SUI_CLOCK_OBJECT_ID as Y}from"@mysten/sui.js/utils";import{SUI_CLOCK_OBJECT_ID as da}from"@mysten/sui.js/utils";import ul from"axios";var hi={testnet:["https://hermes-beta.pyth.network"],mainnet:["https://hermes.pyth.network","https://scallop.rpc.p2p.world"]};import{bcs as Oo}from"@mysten/sui.js/bcs";import{SUI_CLOCK_OBJECT_ID as ca}from"@mysten/sui.js/utils";var Do=16*1024,la=class{provider;pythStateId;wormholeStateId;pythPackageId;wormholePackageId;priceTableInfo;priceFeedObjectIdCache=new Map;baseUpdateFee;constructor(t,e,n){this.provider=t,this.pythStateId=e,this.wormholeStateId=n,this.pythPackageId=void 0,this.wormholePackageId=void 0}async getBaseUpdateFee(){if(this.baseUpdateFee===void 0){let t=await this.provider.getObject({id:this.pythStateId,options:{showContent:!0}});if(!t.data||!t.data.content||t.data.content.dataType!=="moveObject")throw new Error("Unable to fetch pyth state object");this.baseUpdateFee=t.data.content.fields.base_update_fee}return this.baseUpdateFee}async getPackageId(t){let e=await this.provider.getObject({id:t,options:{showContent:!0}}).then(n=>{if(n.data?.content?.dataType==="moveObject")return n.data.content.fields;throw new Error(`Cannot fetch package id for object ${t}`)});if("upgrade_cap"in e)return e.upgrade_cap.fields.package;throw new Error("upgrade_cap not found")}async verifyVaas(t,e){let n=await this.getWormholePackageId(),o=[];return t.forEach(r=>{let[i]=e.moveCall({target:`${n}::vaa::parse_and_verify`,arguments:[e.object(this.wormholeStateId),e.pure(Oo.ser("vector<u8>",Array.from(r),{maxSize:Do}).toBytes()),e.object(ca)]});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(Oo.ser("vector<u8>",Array.from(e[0]),{maxSize:Do}).toBytes()),s[0],t.object(ca)]});let c=[],d=await this.getBaseUpdateFee(),l=t.splitCoins(t.gas,n.map(()=>t.pure(d))),u=0;for(let p=0;p<n.length;p++){let m=await this.getPriceFeedObjectId(n[p]);if(!m)throw new Error(`Price feed ${n[0]} not found, please create it first`);c.push(m),[r]=t.moveCall({target:`${o}::pyth::update_single_price_feed`,arguments:[t.object(this.pythStateId),r,t.object(m),l[u],t.object(ca)]}),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(Oo.ser("vector<u8>",Array.from(e[0]),{maxSize:Do}).toBytes()),r[0],t.object(ca)]})}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 pl=async(a,t)=>(await ul.get(`${a}/api/latest_vaas`,{params:{ids:t}})).data.map(o=>Buffer.from(o,"base64")),Xt=async(a,t,e)=>{let n=e??[...new Set([...z,...Tn])],o=a.isTestnet?["pyth"]:["pyth"];if(o.includes("pyth")){let i=new la(a.client,a.address.get("core.oracles.pyth.state"),a.address.get("core.oracles.pyth.wormholeState")),s=[];await Promise.all(n.map(async d=>s.push(a.address.get(`core.coins.${d}.oracle.pyth.feed`))));let c=a.params.pythEndpoints??hi[a.isTestnet?"testnet":"mainnet"];try{let d=await pl(c[0],s);await i.updatePriceFeeds(t,d,s)}catch(d){console.warn(`Failed to update price feeds with endpoint ${c[0]}: ${d}`)}}let r=[...new Set(n)];for(let i=0;i<r.length;i++)await ml(a,t,r[i],o)},ml=async(a,t,e,n)=>{let o=a.utils.parseCoinType(e);fl(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)},fl=(a,t,e,n,o,r,i,s,c,d,l,u,p,m,f)=>{let S=bl(a,e,n,f);return t.includes("pyth")&&Sl(a,o,S,i,s,r,f),t.includes("switchboard")&&yl(a,c,S,l,d,f),t.includes("supra")&&hl(a,u,S,m,p,f),gl(a,e,n,S,f),a},bl=(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})},gl=(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(da)],typeArguments:i}),a},hl=(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(da)],typeArguments:[r]})},yl=(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(da)],typeArguments:[r]})},Sl=(a,t,e,n,o,r,i)=>{let s=typeof e=="string"?a.object(e):e,c=typeof n=="string"?a.object(n):n,d=typeof o=="string"?a.object(o):o,l=typeof r=="string"?a.object(r):r;a.moveCall({target:`${t}::rule::set_price`,arguments:[s,c,d,l,a.object(da)],typeArguments:[i]})};var ut=async({builder:a,txBlock:t})=>{let e={pkgId:a.address.get("scoin.id")},n={};return await Promise.all(J.map(async o=>{let r=a.utils.getSCoinTreasury(o);n[o]=r})),{mintSCoin:(o,r)=>t.moveCall({target:`${e.pkgId}::s_coin_converter::mint_s_coin`,arguments:[t.object(n[o]),typeof r!="string"?r:t.pure(r)],typeArguments:[a.utils.parseSCoinType(o),a.utils.parseUnderlyingSCoinType(o)]}),burnSCoin:(o,r)=>t.moveCall({target:`${e.pkgId}::s_coin_converter::burn_s_coin`,arguments:[t.object(n[o]),typeof r!="string"?r:t.pure(r)],typeArguments:[a.utils.parseSCoinType(o),a.utils.parseUnderlyingSCoinType(o)]})}};var Yt=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=B(t),i=await xt(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}},wl=async({builder:a,txBlock:t})=>{let e={protocolPkg:a.address.get("core.packages.protocol.id"),market:a.address.get("core.market"),version:a.address.get("core.version"),coinDecimalsRegistry:a.address.get("core.coinDecimalsRegistry"),xOracle:a.address.get("core.oracles.xOracle")},o=`${a.address.get("referral.id")}::scallop_referral_program::REFERRAL_WITNESS`;return{openObligation:()=>t.moveCall({target:`${e.protocolPkg}::open_obligation::open_obligation`,arguments:[t.object(e.version)]}),returnObligation:(r,i)=>t.moveCall({target:`${e.protocolPkg}::open_obligation::return_obligation`,arguments:[t.object(e.version),t.object(r),t.object(i)]}),openObligationEntry:()=>t.moveCall({target:`${e.protocolPkg}::open_obligation::open_obligation_entry`,arguments:[t.object(e.version)]}),addCollateral:(r,i,s)=>{let c=a.utils.parseCoinType(s);return t.moveCall({target:`${e.protocolPkg}::deposit_collateral::deposit_collateral`,arguments:[t.object(e.version),t.object(r),t.object(e.market),typeof i!="string"?i:t.pure(i)],typeArguments:[c]})},takeCollateral:(r,i,s,c)=>{let d=a.utils.parseCoinType(c);return t.moveCall({target:`${e.protocolPkg}::withdraw_collateral::withdraw_collateral`,arguments:[t.object(e.version),t.object(r),t.object(i),t.object(e.market),t.object(e.coinDecimalsRegistry),t.pure(s),t.object(e.xOracle),t.object(Y)],typeArguments:[d]})},deposit:(r,i)=>{let s=a.utils.parseCoinType(i);return t.moveCall({target:`${e.protocolPkg}::mint::mint`,arguments:[t.object(e.version),t.object(e.market),typeof r!="string"?r:t.pure(r),t.object(Y)],typeArguments:[s]})},depositEntry:(r,i)=>{let s=a.utils.parseCoinType(i);return t.moveCall({target:`${e.protocolPkg}::mint::mint_entry`,arguments:[t.object(e.version),t.object(e.market),typeof r!="string"?r:t.pure(r),t.object(Y)],typeArguments:[s]})},withdraw:(r,i)=>{let s=a.utils.parseCoinType(i);return t.moveCall({target:`${e.protocolPkg}::redeem::redeem`,arguments:[t.object(e.version),t.object(e.market),typeof r!="string"?r:t.pure(r),t.object(Y)],typeArguments:[s]})},withdrawEntry:(r,i)=>{let s=a.utils.parseCoinType(i);return t.moveCall({target:`${e.protocolPkg}::redeem::redeem_entry`,arguments:[t.object(e.version),t.object(e.market),typeof r!="string"?r:t.pure(r),t.object(Y)],typeArguments:[s]})},borrow:(r,i,s,c)=>{let d=a.utils.parseCoinType(c);return t.moveCall({target:`${e.protocolPkg}::borrow::borrow`,arguments:[t.object(e.version),t.object(r),t.object(i),t.object(e.market),t.object(e.coinDecimalsRegistry),t.pure(s),t.object(e.xOracle),t.object(Y)],typeArguments:[d]})},borrowEntry:(r,i,s,c)=>{let d=a.utils.parseCoinType(c);return t.moveCall({target:`${e.protocolPkg}::borrow::borrow_entry`,arguments:[t.object(e.version),t.object(r),t.object(i),t.object(e.market),t.object(e.coinDecimalsRegistry),t.pure(s),t.object(e.xOracle),t.object(Y)],typeArguments:[d]})},borrowWithReferral:(r,i,s,c,d)=>{let l=a.utils.parseCoinType(d);return t.moveCall({target:`${e.protocolPkg}::borrow::borrow_with_referral`,arguments:[t.object(e.version),t.object(r),t.object(i),t.object(e.market),t.object(e.coinDecimalsRegistry),t.object(s),t.pure(c),t.object(e.xOracle),t.object(Y)],typeArguments:[l,o]})},repay:(r,i,s)=>{let c=a.utils.parseCoinType(s);return t.moveCall({target:`${e.protocolPkg}::repay::repay`,arguments:[t.object(e.version),t.object(r),t.object(e.market),typeof i!="string"?i:t.pure(i),t.object(Y)],typeArguments:[c]})},borrowFlashLoan:(r,i)=>{let s=a.utils.parseCoinType(i);return t.moveCall({target:`${e.protocolPkg}::flash_loan::borrow_flash_loan`,arguments:[t.object(e.version),t.object(e.market),t.pure(r)],typeArguments:[s]})},repayFlashLoan:(r,i,s)=>{let c=a.utils.parseCoinType(s);return t.moveCall({target:`${e.protocolPkg}::flash_loan::repay_flash_loan`,arguments:[t.object(e.version),t.object(e.market),t.pure(r),t.object(i)],typeArguments:[c]})}}},M=async({builder:a,txBlock:t})=>{let e=await wl({builder:a,txBlock:t}),n=await ut({builder:a,txBlock:t});return{normalMethod:e,addCollateralQuick:async(o,r,i)=>{let s=B(t),{obligationId:c}=await Yt(t,a,i);if(r==="sui"){let[d]=t.splitCoins(t.gas,[o]);e.addCollateral(c,d,r)}else{let{leftCoin:d,takeCoin:l}=await a.selectCoin(t,r,o,s);e.addCollateral(c,l,r),t.transferObjects([d],s)}},takeCollateralQuick:async(o,r,i,s)=>{let c=await Yt(t,a,i,s),d=await a.query.getObligationCoinNames(c.obligationId);return await Xt(a,t,d),e.takeCollateral(c.obligationId,c.obligationKey,o,r)},depositQuick:async(o,r,i)=>{if(r==="sui"){let[d]=t.splitCoins(t.gas,[o]);return e.deposit(d,r)}let{leftCoin:s,takeCoin:c}=await a.selectCoin(t,r,o,i);return t.transferObjects([s],i),e.deposit(c,r)},withdrawQuick:async(o,r)=>{let i=B(t),s=a.utils.parseMarketCoinName(r);try{let c=a.utils.parseSCoinName(r);if(!c)throw new Error(`No sCoin for ${r}`);let{leftCoin:d,takeCoin:l,totalAmount:u}=await a.selectSCoin(t,c,o,i);t.transferObjects([d],i);let p=n.burnSCoin(c,l),m=e.withdraw(p,r),f=o-u;try{if(f>0){let{leftCoin:S,takeCoin:w}=await a.selectMarketCoin(t,s,f,i);t.transferObjects([S],i),t.mergeCoins(m,[e.withdraw(w,r)])}}catch{}return m}catch{let{leftCoin:d,takeCoin:l}=await a.selectMarketCoin(t,s,o,i);return t.transferObjects([d],i),e.withdraw(l,r)}},borrowQuick:async(o,r,i,s)=>{let c=await Yt(t,a,i,s),l=[...await a.query.getObligationCoinNames(c.obligationId),r];return await Xt(a,t,l),e.borrow(c.obligationId,c.obligationKey,o,r)},borrowWithReferralQuick:async(o,r,i,s,c)=>{let d=await Yt(t,a,s,c),u=[...await a.query.getObligationCoinNames(d.obligationId),r];return await Xt(a,t,u),e.borrowWithReferral(d.obligationId,d.obligationKey,i,o,r)},repayQuick:async(o,r,i,s)=>{let c=await Yt(t,a,i);if(r==="sui"){let[u]=t.splitCoins(t.gas,[o]);return e.repay(c.obligationId,u,r)}let{leftCoin:d,takeCoin:l}=await a.selectCoin(t,r,o,s);return t.transferObjects([d],s),e.repay(c.obligationId,l,r)},updateAssetPricesQuick:async o=>Xt(a,t,o)}};import{SUI_CLOCK_OBJECT_ID as ua}from"@mysten/sui.js/utils";var pa=async({builder:a,txBlock:t})=>{let e={referralPgkId:a.address.get("referral.id"),referralBindings:a.address.get("referral.referralBindings"),referralRevenuePool:a.address.get("referral.referralRevenuePool"),authorizedWitnessList:a.address.get("referral.authorizedWitnessList"),referralTiers:a.address.get("referral.referralTiers"),version:a.address.get("referral.version")},n=a.address.get("vesca.table");return{bindToReferral:o=>t.moveCall({target:`${e.referralPgkId}::referral_bindings::bind_ve_sca_referrer`,arguments:[t.object(e.referralBindings),t.pure(o),t.object(n),t.object(ua)],typeArguments:[]}),claimReferralTicket:o=>{let r=a.utils.parseCoinType(o);return t.moveCall({target:`${e.referralPgkId}::scallop_referral_program::claim_ve_sca_referral_ticket`,arguments:[t.object(e.version),t.object(n),t.object(e.referralBindings),t.object(e.authorizedWitnessList),t.object(e.referralTiers),t.object(ua)],typeArguments:[r]})},burnReferralTicket:(o,r)=>{let i=a.utils.parseCoinType(r);return t.moveCall({target:`${e.referralPgkId}::scallop_referral_program::burn_ve_sca_referral_ticket`,arguments:[t.object(e.version),t.object(o),t.object(e.referralRevenuePool),t.object(ua)],typeArguments:[i]})},claimReferralRevenue:(o,r)=>{let i=a.utils.parseCoinType(r);return t.moveCall({target:`${e.referralPgkId}::referral_revenue_pool::claim_revenue_with_ve_sca_key`,arguments:[t.object(e.version),t.object(e.referralRevenuePool),t.object(o),t.object(ua)],typeArguments:[i]})}}},yi=async({builder:a,txBlock:t})=>{let e=await pa({builder:a,txBlock:t});return{claimReferralRevenueQuick:async(n,o,r=[...z])=>{let i=[];for(let s=0;s<r.length;s++)if(r[s]==="sui"){let c=e.claimReferralRevenue(n,r[s]);i.push(c)}else{let c=e.claimReferralRevenue(n,r[s]);try{let d=await a.utils.selectCoinIds(1/0,a.utils.parseCoinType(r[s]),o);t.mergeCoins(c,d.slice(0,500))}catch{}finally{i.push(c)}}i.length>0&&t.transferObjects(i,t.pure(o))}}};var Cl={packageId:"0x5857d185897aaff40ae37b2eecc895efc1a9dff1b210c4fb894eabbce4ac2603"},Si={check_slippage:(a,t,e,n,o)=>a.moveCall({target:`${Cl.packageId}::slippage_check::check_slippage`,arguments:[t,a.pure(e),a.pure(n)],typeArguments:[o]})};import{SUI_CLOCK_OBJECT_ID as ma}from"@mysten/sui.js/utils";var wi=async(a,t,e,n,o,r,i=!1)=>{let s=await ut({builder:a,txBlock:t}),c=await Ii({builder:a,txBlock:t});try{let{takeCoin:d,leftCoin:l,totalAmount:u}=i?await a.selectSCoin(t,n,o,r):await a.selectMarketCoin(t,n,o,r);if(i){let p=s.burnSCoin(n,d);c.stake(e,p,n)}else c.stake(e,d,n);return t.transferObjects([l],r),u}catch{return 0}},Ci=async(...a)=>{let[t,e,n,o]=a;if(a.length===4&&o)return[o];let r=B(e);return(await Jt(t.query,r))[n].map(s=>s.id)},Il=async(...a)=>{let[t,e,n,o]=a,r=B(e),i=await Jt(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]},Ii=async({builder:a,txBlock:t})=>{let e={spoolPkg:a.address.get("spool.id")},n={},o={},r={};return ct.forEach(i=>{let s=a.address.get(`spool.pools.${i}.id`),c=a.address.get(`spool.pools.${i}.rewardPoolId`),d=a.utils.parseMarketCoinType(i);n[i]=s,o[i]=c,r[i]=d}),{createStakeAccount:i=>{let s=r[i],c=n[i];return t.moveCall({target:`${e.spoolPkg}::user::new_spool_account`,arguments:[t.object(c),t.object(ma)],typeArguments:[s]})},stake:(i,s,c)=>{let d=r[c],l=n[c];t.moveCall({target:`${e.spoolPkg}::user::stake`,arguments:[t.object(l),t.object(i),typeof s=="string"?t.pure(s):s,t.object(ma)],typeArguments:[d]})},unstake:(i,s,c)=>{let d=r[c],l=n[c];return t.moveCall({target:`${e.spoolPkg}::user::unstake`,arguments:[t.object(l),t.object(i),t.pure(s),t.object(ma)],typeArguments:[d]})},claim:(i,s)=>{let c=n[s],d=o[s],l=r[s],u=kn[s],p=a.utils.parseCoinType(u);return t.moveCall({target:`${e.spoolPkg}::user::redeem_rewards`,arguments:[t.object(c),t.object(d),t.object(i),t.object(ma)],typeArguments:[l,p]})}}},Z=async({builder:a,txBlock:t})=>{let e=await Ii({builder:a,txBlock:t}),n=await ut({builder:a,txBlock:t});return{normalMethod:e,stakeQuick:async(o,r,i)=>{let s=B(t),c=await Ci(a,t,r,i),d=[];if(c.length===0){let l=e.createStakeAccount(r);d.push(l)}if(typeof o=="number"){let l=await wi(a,t,c.length>0?c[0]:d[0],r,o,s);o-=l,l||await wi(a,t,c.length>0?c[0]:d[0],r,o,s,!0)}else e.stake(c.length>0?c[0]:d[0],o,r);d.length>0&&t.transferObjects(d,s)},unstakeQuick:async(o,r,i,s)=>{let c=await Il(a,t,r,i),d=[],l=o;for(let u of c){if(u.staked===0)continue;let p=Math.min(l,u.staked),m=e.unstake(u.id,p,r);if(s){let f=n.mintSCoin(r,m);d.push(f)}else d.push(m);if(l-=p,o<=0)break}if(d.length>0){let u=d[0];return d.length>1&&t.mergeCoins(u,d.slice(1)),u}},claimQuick:async(o,r)=>{let i=await Ci(a,t,o,r),s=[];return i.forEach(c=>{let d=e.claim(c,o);s.push(d)}),s}}};import{SUI_CLOCK_OBJECT_ID as Zt}from"@mysten/sui.js/utils";var Tl=async({builder:a,txBlock:t})=>{let e={pkgId:a.address.get("vesca.id"),table:a.address.get("vesca.table"),treasury:a.address.get("vesca.treasury"),config:a.address.get("vesca.config")};return{lockSca:(n,o)=>t.moveCall({target:`${e.pkgId}::ve_sca::mint_ve_sca_key`,arguments:[t.object(e.config),t.object(e.table),t.object(e.treasury),typeof n=="string"?t.pure(n):n,t.pure(o),t.object(Zt)]}),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(Zt)]})},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(Zt)]})},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(Zt)]})},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(Zt)]}),mintEmptyVeSca:()=>t.moveCall({target:`${e.pkgId}::ve_sca::mint_ve_sca_placeholder_key`,arguments:[t.object(e.config),t.object(e.table)],typeArguments:[]})}},pt=async({builder:a,txBlock:t})=>{let e=await Tl({builder:a,txBlock:t});return{normalMethod:e,lockScaQuick:async(n,o,r=!0)=>{let i=B(t),s=await Dt(a,t),c,d=[];if(n!==void 0&&typeof n=="number"){let m=await a.utils.selectCoinIds(n,it,i),[f,S]=a.utils.takeAmountFromCoins(t,m,n);c=f,d.push(S)}else c=n;let l=a.utils.getUnlockAt(o,s?.unlockAt);r&&ri(n,o,l,s?.unlockAt),console.log(new Date(l*1e3).toLocaleString("en-CA",{hour12:!0}));let u=!s?.unlockAt,p=!u&&s.unlockAt*1e3<=new Date().getTime();if(u||p){if(c)if(u){let m=e.lockSca(c,l);d.push(m)}else{if(s.lockedScaAmount!==0){let m=e.redeemSca(s.keyId);d.push(m)}e.renewExpiredVeSca(s.keyId,c,l)}}else c&&o?(e.extendLockPeriod(s.keyId,l),e.extendLockAmount(s.keyId,c)):o?e.extendLockPeriod(s.keyId,l):c&&e.extendLockAmount(s.keyId,c);d.length>0&&t.transferObjects(d,i)},extendLockPeriodQuick:async(n,o,r=!0)=>{let i=await Dt(a,t,o),s=a.utils.getUnlockAt(n);r&&ii(n,s,i?.unlockAt),i&&e.extendLockPeriod(i.keyId,s)},extendLockAmountQuick:async(n,o,r=!0)=>{let i=B(t),s=await Dt(a,t,o);if(r&&si(n,s?.unlockAt),s){let c=await a.utils.selectCoinIds(n,it,i),[d,l]=a.utils.takeAmountFromCoins(t,c,n);e.extendLockAmount(s.keyId,d),t.transferObjects([l],i)}},renewExpiredVeScaQuick:async(n,o,r,i=!0)=>{let s=B(t),c=await Dt(a,t,r),d=a.utils.getUnlockAt(o,c?.unlockAt);if(i&&ci(n,o,c?.unlockAt),c){let l=[];if(c.lockedScaAmount!==0){let f=e.redeemSca(c.keyId);l.push(f)}let u=await a.utils.selectCoinIds(n,it,s),[p,m]=a.utils.takeAmountFromCoins(t,u,n);l.push(m),e.renewExpiredVeSca(c.keyId,p,d),t.transferObjects(l,s)}},redeemScaQuick:async n=>{let o=B(t),r=await Dt(a,t,n);if(At(r?.unlockAt),r){let i=e.redeemSca(r.keyId);t.transferObjects([i],o)}}}};import{normalizeStructTag as xl}from"@mysten/sui.js/utils";import{SUI_CLOCK_OBJECT_ID as kl}from"@mysten/sui.js/utils";var Pt={id:"0x000000000000000000000000000000000000000000000000000000000000dee9",pools:{sui2usdc:{object:{objectId:"0x4405b50d791fd3346754e8171aaab6bc2ed26c2c46efdd033c14b30ae507ac33",initialSharedVersion:"32079148",mutable:!0},lotsize:1e8},usdt2usdc:{object:{objectId:"0xd1f0a9baacc1864ab19534e2d4c5d6c14f2e071a1f075e8e7f9d51f2c17dc238",initialSharedVersion:"32079148",mutable:!0},lotsize:1e5},wusdc2usdc:{object:{objectId:"0x39f2f7c126189b9b5cda6b770ab34031dde22307d19842e95ab576873c77fa14",initialSharedVersion:"82838334",mutable:!0},lotsize:1e5}}},Ti={id:"0x000000000000000000000000000000000000000000000000000000000000dee9"},Po={id:"0x2c6c36393db063a9534885d22a47caead720272475336470736be28f119971f3"},ki={clob_v2:{swap_exact_quote_for_base:"clob_v2::swap_exact_quote_for_base",swap_exact_base_for_quote:"clob_v2::swap_exact_base_for_quote",create_account:"clob_v2::create_account"}};var vi={objectId:kl,initialSharedVersion:"1",mutable:!1},vl=(a,t)=>{if(a==="sui")switch(t){case"wusdc":return{pool:Pt.pools.sui2usdc,aToB:!0};default:throw new Error(`Invalid coin pair: ${a} and ${t}`)}else if(a==="wusdc")switch(t){case"sui":return{pool:Pt.pools.sui2usdc,aToB:!1};case"wusdt":return{pool:Pt.pools.usdt2usdc,aToB:!1};case"usdc":return{pool:Pt.pools.wusdc2usdc,aToB:!0};default:throw new Error(`Invalid coin pair: ${a} and ${t}`)}else if(a==="wusdt")switch(t){case"wusdc":return{pool:Pt.pools.usdt2usdc,aToB:!0};default:throw new Error(`Invalid coin pair: ${a} and ${t}`)}else throw new Error(`Invalid coin pair: ${a} and ${t}`)},_o={createAccount:a=>a.moveCall({target:`${Ti.id}::${ki.clob_v2.create_account}`,arguments:[],typeArguments:[]}),swap:(a,t,e,n,o,r,i)=>{let{pool:s,aToB:c}=vl(e,n),d=i.parseCoinType(e),l=i.parseCoinType(n),u=typeof r=="string"?a.object(r):"objectId"in r?a.objectRef(r):a.object(r);if(!s)throw new Error(`Deepbook: No pool found for ${e} to ${n}`);return c?a.moveCall({target:`${Po.id}::deepbook::deepbook_base_for_quote`,arguments:[a.sharedObjectRef(s.object),a.pure(o),u,a.object(t),a.sharedObjectRef(vi),a.pure(s.lotsize)],typeArguments:[d,l]}):a.moveCall({target:`${Po.id}::deepbook::deepbook_quote_for_base`,arguments:[a.sharedObjectRef(s.object),a.pure(o),u,a.sharedObjectRef(vi),a.object(t),a.pure(s.lotsize)],typeArguments:[l,d]})}};var fa=class{suiClient;scallopUtils;_clientOrderId=0;_accountCap;currentAddress;constructor({client:t,currentAddress:e,accountCap:n,scallopUtils:o}){this.currentAddress=e,this.suiClient=t,this._accountCap=n,this.scallopUtils=o}get clientOrderId(){let t=this._clientOrderId;return this._clientOrderId++,t}async accountCap(t){if(this._accountCap)return this._accountCap;try{let{data:e}=await this.suiClient.getOwnedObjects({owner:this.currentAddress,filter:{StructType:xl("0xdee9::custodian_v2::AccountCap")},limit:1});return e.length===0||!e[0].data?_o.createAccount(t):{objectId:e[0].data.objectId,version:e[0].data.version,digest:e[0].data.digest}}catch{throw new Error("Failed to create account cap")}}async swapToken({tokenObjectIn:t,baseCoinName:e,quoteCoinName:n,tx:o}){let r=await this.accountCap(o);return{swapResult:_o.swap(o,t,e,n,this.clientOrderId,r,this.scallopUtils),accountCap:r}}};var ba=class{params;client;address;builder;query;utils;walletAddress;deepbookSwap;constructor(t,e){this.params=t,this.client=t.client,this.address=e,this.utils=new sa(t,this.address),this.query=new ia(t,{address:this.address,utils:this.utils}),this.builder=new na(t,{address:this.address,query:this.query,utils:this.utils}),this.deepbookSwap=new fa({client:this.client,currentAddress:this.params.walletAddress,scallopUtils:this.utils})}async getObligations(t){let e=t||this.params.walletAddress;return this.query.getObligations(e)}async getAllStakeAccounts(t){let e=t||this.params.walletAddress;return this.query.getAllStakeAccounts(e)}async getStakeAccounts(t,e){let n=e||this.params.walletAddress;return this.query.getStakeAccounts(t,n)}async getStakePool(t){return this.query.getStakePool(t)}async getStakeRewardPool(t){return this.query.getStakeRewardPool(t)}async openObligation(t){let e=new T,n=await M({builder:this.builder,txBlock:e}),o=await N({builder:this.builder,txBlock:e}),r=t||this.params.walletAddress;e.setSender(r);let[i,s,c]=n.normalMethod.openObligation();return o.normalMethod.stakeObligation(i,s),n.normalMethod.returnObligation(i,c),e.transferObjects([s],r),e}async depositCollateral(t,e,n,o){let r=new T,i=o||this.params.walletAddress;r.setSender(i);let s=await M({builder:this.builder,txBlock:r}),c=await this.query.getObligations(i),d=n||c?.[0]?.id;if(d)await s.addCollateralQuick(e,t,d);else{let[l,u,p]=s.normalMethod.openObligation();await s.addCollateralQuick(e,t,l),s.normalMethod.returnObligation(l,p),r.transferObjects([u],i)}return r}async withdrawCollateral(t,e,n,o,r){let i=new T,s=await M({builder:this.builder,txBlock:i}),c=r||this.params.walletAddress;i.setSender(c);let d=await s.takeCollateralQuick(e,t,n,o);return i.transferObjects([d],c),i}async deposit(t,e,n){let o=new T,r=await M({builder:this.builder,txBlock:o}),i=await ut({builder:this.builder,txBlock:o}),s=n||this.params.walletAddress;o.setSender(s);let c=await r.depositQuick(e,t,n),d=this.utils.parseMarketCoinName(t);if(!J.includes(d))o.transferObjects([c],s);else{let l=i.mintSCoin(d,c);o.transferObjects([l],s)}return o}async withdraw(t,e,n){let o=new T,r=n||this.params.walletAddress,i=await M({builder:this.builder,txBlock:o});o.setSender(r);let s=await i.withdrawQuick(e,t);return o.transferObjects([s],r),o}async borrow(t,e,n,o,r){let i=new T,s=await M({builder:this.builder,txBlock:i}),c=await N({builder:this.builder,txBlock:i}),d=r||this.params.walletAddress;i.setSender(d);let l=lt.includes(t);l&&await c.unstakeObligationQuick(n,o);let u=await s.borrowQuick(e,t,n,o);return i.transferObjects([u],d),l&&await c.stakeObligationQuick(n,o),i}async borrowWithBoost(t,e,n,o,r,i){let s=new T,c=await M({builder:this.builder,txBlock:s}),d=await N({builder:this.builder,txBlock:s}),l=i||this.params.walletAddress;s.setSender(l);let u=lt.includes(t);u&&await d.unstakeObligationQuick(n,o);let p=await c.borrowQuick(e,t,n,o);return s.transferObjects([p],l),u&&await d.stakeObligationWithVeScaQuick(n,o,r),s}async borrowWithReferral(t,e,n,o,r,i){let s=new T,c=await M({builder:this.builder,txBlock:s}),d=await N({builder:this.builder,txBlock:s}),l=await pa({builder:this.builder,txBlock:s}),u=i||this.params.walletAddress;s.setSender(u);let p=lt.includes(t);p&&await d.unstakeObligationQuick(n,o);let m=l.claimReferralTicket(t),f=await c.borrowWithReferralQuick(e,t,m,n,o);return l.burnReferralTicket(m,t),s.transferObjects([f],u),p&&r?await d.stakeObligationWithVeScaQuick(n,o,r):await d.stakeObligationQuick(n,o),s}async repay(t,e,n,o,r){let i=new T,s=await M({builder:this.builder,txBlock:i}),c=await N({builder:this.builder,txBlock:i}),d=r||this.params.walletAddress;i.setSender(d);let l=lt.includes(t);return l&&await c.unstakeObligationQuick(n,o),await s.repayQuick(e,t,n,d),l&&await c.stakeObligationQuick(n,o),i}async repayWithBoost(t,e,n,o,r){let i=new T,s=await M({builder:this.builder,txBlock:i}),c=await N({builder:this.builder,txBlock:i}),d=r||this.params.walletAddress;i.setSender(d);let l=lt.includes(t);return l&&await c.unstakeObligationQuick(n,void 0),await s.repayQuick(e,t,n,d),l&&await c.stakeObligationWithVeScaQuick(n,void 0,o),i}async createStakeAccount(t,e){let n=new T,o=await Z({builder:this.builder,txBlock:n}),r=e||this.params.walletAddress;n.setSender(r);let i=o.normalMethod.createStakeAccount(t);return n.transferObjects([i],r),n}async supplyAndStake(t,e,n,o){let r=new T,i=await M({builder:this.builder,txBlock:r}),s=await Z({builder:this.builder,txBlock:r}),c=o||this.params.walletAddress;r.setSender(c);let d=await i.depositQuick(e,t,o),l=this.utils.parseMarketCoinName(t);if(!ct.find(m=>m===l))return r;let u=await this.query.getStakeAccounts(l,c),p=n||(u.length>0?u[0].id:void 0);if(p)await s.stakeQuick(d,l,p);else{let m=s.normalMethod.createStakeAccount(l);await s.stakeQuick(d,l,m),r.transferObjects([m],c)}return r}async unstakeAndWithdraw(t,e,n){let o=new T,r=await M({builder:this.builder,txBlock:o}),i=await Z({builder:this.builder,txBlock:o}),s=this.params.walletAddress,c=[];o.setSender(s);let d=this.utils.parseMarketCoinName(t);for(let l=0;l<n.length;l++){let u=n[l],[p]=await i.unstakeQuick(u.coin,d,u.id);if(p){let m=r.normalMethod.withdraw(p,t);c.push(m)}}if(e>0){let l=await r.withdrawQuick(e,t);c.push(l)}return c.length>1&&o.mergeCoins(c[0],c.slice(1)),o.transferObjects(c,s),o}async stake(t,e,n,o){let r=new T,i=await Z({builder:this.builder,txBlock:r}),s=o||this.params.walletAddress;r.setSender(s);let c=await this.query.getStakeAccounts(t,s),d=n||(c.length>0?c[0].id:void 0);if(d)await i.stakeQuick(e,t,d);else{let l=i.normalMethod.createStakeAccount(t);await i.stakeQuick(e,t,l),r.transferObjects([l],s)}return r}async unstake(t,e,n,o){let r=new T,i=await Z({builder:this.builder,txBlock:r}),s=o||this.params.walletAddress;r.setSender(s);let c=J.includes(t),d=await i.unstakeQuick(e,t,n,c);return r.transferObjects([d],r.pure(s)),r}async claim(t,e,n,o){let r=new T,i=await Z({builder:this.builder,txBlock:r}),s=await N({builder:this.builder,txBlock:r}),c=o||this.params.walletAddress;r.setSender(c);let d={sui:[],sca:[]};for(let l=0;l<t.length;l++){let{stakeMarketCoinName:u,stakeAccountId:p}=t[l],m=i.normalMethod.claim(p,u);d.sui.push(m)}for(let l=0;l<e.length;l++){let{obligationId:u,obligationKey:p,rewardCoinName:m}=e[l],f=s.normalMethod.claimBorrowIncentive(u,p,m);d[m].push(f)}for(let l=0;l<n.length;l++){let{obligationId:u,obligationKey:p,rewardCoinName:m}=n[l],f=s.normalMethod.oldClaimBorrowIncentive(u,p,m);d[m].push(f)}return d.sui.length>0&&(d.sui.length>1&&r.mergeCoins(d.sui[0],d.sui.slice(1)),r.transferObjects([d.sui[0]],r.pure(c))),d.sca.length>0&&(d.sca.length>1&&r.mergeCoins(d.sca[0],d.sca.slice(1)),r.transferObjects([d.sca[0]],r.pure(c))),r}async stakeObligation(t,e,n){let o=this.builder.createTxBlock(),r=await N({builder:this.builder,txBlock:o}),i=n||this.params.walletAddress;return o.setSender(i),await r.stakeObligationQuick(t,e),o}async unstakeObligation(t,e,n){let o=this.builder.createTxBlock(),r=await N({builder:this.builder,txBlock:o}),i=n||this.params.walletAddress;return o.setSender(i),await r.unstakeObligationQuick(t,e),o}async stakeSca(t,e=!1,n=!1,o,r,i,s,c){let d=new T,l=await pt({builder:this.builder,txBlock:d}),u=await N({builder:this.builder,txBlock:d}),p=c||this.params.walletAddress;d.setSender(p);let m=await this.builder.utils.selectCoinIds(t,it,p),[f,S]=this.builder.utils.takeAmountFromCoins(d,m,t),w;return s?l.normalMethod.extendLockAmount(s,f):w=l.normalMethod.lockSca(f,i),o&&r&&(e&&(n?u.normalMethod.oldUnstakeObligation(o,r):u.normalMethod.unstakeObligation(o,r)),u.normalMethod.stakeObligationWithVesca(o,r,s||w)),s||d.transferObjects([w,S],p),d}async stakeMoreSca(t,e,n){let o=new T,r=n||this.params.walletAddress;return o.setSender(r),o}async extendStakeScaLockPeriod(t,e,n,o,r=!1,i=!1,s){let c=new T,d=await pt({builder:this.builder,txBlock:c}),l=await N({builder:this.builder,txBlock:c}),u=s||this.params.walletAddress;return c.setSender(u),d.normalMethod.extendLockPeriod(e,t),n&&o&&(r&&(i?l.normalMethod.oldUnstakeObligation(n,o):l.normalMethod.unstakeObligation(n,o)),l.normalMethod.stakeObligationWithVesca(n,o,e)),c}async extendPeriodAndStakeMoreSca(t,e,n,o,r,i=!1,s=!1,c){let d=new T,l=await pt({builder:this.builder,txBlock:d}),u=await N({builder:this.builder,txBlock:d}),p=c||this.params.walletAddress;d.setSender(p);let m=await this.builder.utils.selectCoinIds(t,it,p),[f,S]=this.builder.utils.takeAmountFromCoins(d,m,t);return l.normalMethod.extendLockPeriod(e,n),l.normalMethod.extendLockAmount(e,f),d.transferObjects([S],p),!o||!r||(i&&(s?u.normalMethod.oldUnstakeObligation(o,r):u.normalMethod.unstakeObligation(o,r)),u.normalMethod.stakeObligationWithVesca(o,r,e)),d}async renewExpiredStakeSca(t,e,n,o=!1,r,i,s=!1,c=!1,d){let l=new T,u=await pt({builder:this.builder,txBlock:l}),p=await N({builder:this.builder,txBlock:l}),m=d||this.params.walletAddress;if(l.setSender(m),o){let v=u.normalMethod.redeemSca(n);l.transferObjects([v],m)}let f=await this.builder.utils.selectCoinIds(t,it,m),[S,w]=this.builder.utils.takeAmountFromCoins(l,f,t);return l.transferObjects([w],m),u.normalMethod.renewExpiredVeSca(n,S,e),!r||!i||(s&&(c?p.normalMethod.oldUnstakeObligation(r,i):p.normalMethod.unstakeObligation(r,i)),p.normalMethod.stakeObligationWithVesca(r,i,n)),l}async redeemSca(t){let e=new T,n=await pt({builder:this.builder,txBlock:e}),o=this.params.walletAddress;return e.setSender(o),await n.redeemScaQuick(t),e}async migrateAndClaim(t,e,n,o){let r=new T,i=await N({builder:this.builder,txBlock:r}),s=this.params.walletAddress;r.setSender(s);let c=i.normalMethod.oldClaimBorrowIncentive(e,t,n);return r.transferObjects([c],s),await i.unstakeObligationQuick(e,t),o?await i.stakeObligationWithVeScaQuick(e,t,o):await i.stakeObligationQuick(e,t),r}async withdrawUnlockedSca(t,e){let n=new T,o=await pt({builder:this.builder,txBlock:n}),r=e||this.params.walletAddress;return n.setSender(r),await o.redeemScaQuick(t),n}calculateAvailableClaimCoin(t,e){let n=new xi(t.weightedAmount),r=e.currentPointIndex?xi(e.currentPointIndex-t.index).dividedBy(1e9):1;return n.multipliedBy(r).plus(t.points).shiftedBy(-1*e.coinDecimal)}async createReferralLink(){let t=new T,e=await pt({builder:this.builder,txBlock:t}),n=this.params.walletAddress;t.setSender(n);let o=e.normalMethod.mintEmptyVeSca();return t.transferObjects([o],n),t}async claimRevenuReferral(t,e){let n=new T,o=await yi({builder:this.builder,txBlock:n}),r=this.params.walletAddress;n.setSender(r);let i=e.map(s=>this.utils.parseCoinNameFromType(s));return await o.claimReferralRevenueQuick(t,r,i),n}async bindReferral(t){let e=new T,n=await pa({builder:this.builder,txBlock:e}),o=this.params.walletAddress;return e.setSender(o),n.bindToReferral(t),e}async migrateAllMarketCoin(){let t=new T,e=await ut({builder:this.builder,txBlock:t}),n=await Z({builder:this.builder,txBlock:t});t.setSender(this.params.walletAddress);let o=[];return await Promise.all(J.map(async r=>{let i=[],s;try{let c=await this.utils.selectCoinIds(Number.MAX_SAFE_INTEGER,this.utils.parseMarketCoinType(r),this.params.walletAddress),d=c[0];c.length>1&&t.mergeCoins(d,c.slice(1)),s=d}catch(c){if(!c.toString().includes("No valid coins found for the transaction"))throw c}if(s){let c=e.mintSCoin(r,s);try{let d=await this.utils.selectCoinIds(Number.MAX_SAFE_INTEGER,this.utils.parseSCoinType(r),this.params.walletAddress);t.mergeCoins(c,d)}catch(d){console.log(d)}i.push(c)}if(ct.includes(r))try{let c=await n.unstakeQuick(Number.MAX_SAFE_INTEGER,r);c&&i.push(c)}catch(c){console.log(c)}if(i.length>0){let c=i[0];i.length>1&&t.mergeCoins(c,i.slice(1)),o.push(c)}})),o.length>0&&t.transferObjects(o,this.params.walletAddress),t}async migrateLendingWusdcToUsdcNative(t,e,n,o,r){let i=new T,s=await M({builder:this.builder,txBlock:i}),c=await Z({builder:this.builder,txBlock:i}),d=this.params.walletAddress,l=[],u=this.utils.parseMarketCoinName(t),p=this.utils.parseMarketCoinType(u),f=(await this.utils.selectCoinsMarketCoin(p,d)).map(R=>R.objectId);i.setSender(d);for(let R=0;R<r.length;R++){let U=r[R],[W]=await c.unstakeQuick(U.coin,u,U.id);if(W){f.length>0&&i.mergeCoins(W,f);let Ui=s.normalMethod.withdraw(W,t);l.push(Ui)}}if(e>0){let R=await s.withdrawQuick(e,t);l.push(R)}l.length>1&&i.mergeCoins(l[0],l.slice(1));let[S]=i.splitCoins(l[0],[i.pure(o)]);i.transferObjects([l[0]],d);let{swapResult:w,accountCap:v}=await this.deepbookSwap.swapToken({baseCoinName:"wusdc",quoteCoinName:"usdc",tokenObjectIn:S,tx:i});typeof v=="string"&&i.transferObjects([v],d),Si.check_slippage(i,w,n,o,this.query.utils.parseCoinType("usdc"));let E=s.normalMethod.deposit(w,"usdc");return await c.stakeQuick(E,"susdc"),i}};var te=class{params;client;builder;query;utils;address;constructor(t){this.params=t,this.address=t.address}async init(){this.address||(this.address=new ea({id:Vr})),await this.address.read(),this.client=new ba(this.params,this.address);let{builder:t,query:e,utils:n}=this.client;this.builder=t,this.query=e,this.utils=n}};var ga=class{application="scallop";supportSDK="@mysten/sui.js";scallop;async deserialize(t){this.scallop||(this.scallop=new te({client:t.suiClient,walletAddress:t.account.address}),await this.scallop.init());let{transactionBlock:e}=t;console.log("transactionBlock",e);let n=new vn(e,this.scallop),o=new xn(e,this.scallop),r=new An(e,this.scallop),i=n.decode()||o.decode()||r.decode();if(!i)throw new Error("Unknown transaction type");return{txType:Al.Other,txSubType:i.type,intentionData:i.intentionData}}async build(t){let{suiClient:e,account:n,network:o,txSubType:r,intentionData:i}=t;this.scallop||(this.scallop=new te({client:t.suiClient,walletAddress:t.account.address}),await this.scallop.init());let s;switch(r){case"SupplyLending":s=Un.fromData(i);break;case"WithdrawLending":s=Qn.fromData(i);break;case"Borrow":s=On.fromData(i);break;case"Repay":s=En.fromData(i);break;case"DepositCollateral":s=Rn.fromData(i);break;case"WithdrawCollateral":s=qn.fromData(i);break;case"OpenObligation":s=Mn.fromData(i);break;case"StakeSpool":s=Ln.fromData(i);break;case"UnstakeSpool":s=Fn.fromData(i);break;case"ClaimIncentiveReward":s=_n.fromData(i);break;case"BorrowWithBoost":s=Dn.fromData(i);break;case"StakeSca":s=Yn.fromData(i);break;case"ExtendStakePeriod":s=zn.fromData(i);break;case"ExtendPeriodAndStakeMore":s=Gn.fromData(i);break;case"RenewExpStakePeriod":s=Xn.fromData(i);break;case"WithdrawStakedSca":s=ta.fromData(i);break;case"SupplyAndStakeLending":s=Zn.fromData(i);break;case"WithdrawAndUnstakeLending":s=$n.fromData(i);break;case"RedeemSca":s=Jn.fromData(i);break;case"MigrateAndClaim":s=jn.fromData(i);break;case"BorrowWithReferral":s=Pn.fromData(i);break;case"CreateReferralLink":s=Kn.fromData(i);break;case"ClaimRevenueReferral":s=Hn.fromData(i);break;case"BindReferral":s=Vn.fromData(i);break;case"MigrateScoin":s=Bn.fromData(i);break;case"RepayWithBoost":s=Wn.fromData(i);break;case"MigrateWusdcToUsdc":s=Nn.fromData(i);break;default:throw new Error("not implemented")}return s.build({suiClient:e,account:n,network:o,scallop:this.scallop})}};import{TransactionType as Ll}from"@msafe/sui3-utils";import{LENDING_MARKET_ID as Ul,LENDING_MARKET_TYPE as Fl,SuilendClient as Ro}from"@suilend/sdk";import{phantom as $l}from"@suilend/sdk/_generated/_framework/reified";import{LendingMarket as ql}from"@suilend/sdk/_generated/suilend/lending-market/structs";import{TransactionType as ee}from"@msafe/sui3-utils";import{normalizeStructTag as ne}from"@mysten/sui/utils";var ha=class{constructor(t,e){this.transaction=t;this.simResult=e}decode(){if(this.isDepositTransaction())return this.decodeDeposit();if(this.isWithdrawTransaction())return this.decodeWithdraw();if(this.isBorrowTransaction())return this.decodeBorrow();if(this.isRepayTransaction())return this.decodeRepay();if(this.isClaimRewardsTransaction())return this.decodeClaimRewards();throw new Error("Unknown transaction type")}get commands(){return this.transaction.getData().commands}getMoveCallCommand(t){return this.commands.find(e=>e.$kind==="MoveCall"&&e.MoveCall.function===t)}isDepositTransaction(){return!!this.getMoveCallCommand("deposit_liquidity_and_mint_ctokens")&&!!this.getMoveCallCommand("deposit_ctokens_into_obligation")}isWithdrawTransaction(){return!!this.getMoveCallCommand("withdraw_ctokens")&&!!this.getMoveCallCommand("redeem_ctokens_and_withdraw_liquidity")}isBorrowTransaction(){return!!this.getMoveCallCommand("borrow")}isRepayTransaction(){return!!this.getMoveCallCommand("repay")}isClaimRewardsTransaction(){return!!this.getMoveCallCommand("claim_rewards")}decodeDeposit(){let t={MintEvent:this.simResult.events.find(o=>o.type.endsWith("lending_market::MintEvent"))},e=ne(t.MintEvent.parsedJson.coin_type.name),n=t.MintEvent.parsedJson.liquidity_amount;return console.log("Decoder.decodeDeposit",e,n),{txType:ee.Other,type:"deposit",intentionData:{coinType:e,value:n}}}decodeWithdraw(){let t={RedeemEvent:this.simResult.events.find(o=>o.type.endsWith("lending_market::RedeemEvent"))},e=ne(t.RedeemEvent.parsedJson.coin_type.name),n=t.RedeemEvent.parsedJson.liquidity_amount;return console.log("Decoder.decodeWithdraw",e,n),{txType:ee.Other,type:"withdraw",intentionData:{coinType:e,value:n}}}decodeBorrow(){let t={BorrowEvent:this.simResult.events.find(o=>o.type.endsWith("lending_market::BorrowEvent"))},e=ne(t.BorrowEvent.parsedJson.coin_type.name),n=`${+t.BorrowEvent.parsedJson.liquidity_amount-+t.BorrowEvent.parsedJson.origination_fee_amount}`;return console.log("Decoder.decodeBorrow",e,n),{txType:ee.Other,type:"borrow",intentionData:{coinType:e,value:n}}}decodeRepay(){let t={RepayEvent:this.simResult.events.find(o=>o.type.endsWith("lending_market::RepayEvent"))},e=ne(t.RepayEvent.parsedJson.coin_type.name),n=t.RepayEvent.parsedJson.liquidity_amount;return console.log("Decoder.decodeRepay",e,n),{txType:ee.Other,type:"repay",intentionData:{coinType:e,value:n}}}decodeClaimRewards(){let t={ClaimReward:this.simResult.events.filter(n=>n.type.endsWith("lending_market::ClaimReward"))},e={};for(let n=0;n<t.ClaimReward.length;n++){let o=t.ClaimReward[n],r=ne(o.parsedJson.coin_type.name),i=o.parsedJson.liquidity_amount;e[r]=`${+(e[r]??"0")+ +i}`}return console.log("Decoder.decodeClaimRewards",e),{txType:ee.Other,type:"claimRewards",intentionData:{value:e}}}};import{Transaction as Pl}from"@mysten/sui/transactions";import Dl from"sort-keys-recursive";var q=class{constructor(t){this.data=t}serialize(){return JSON.stringify(Dl(this.data))}};var ya=class a extends q{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o,suilendClient:r,obligationOwnerCaps:i,obligations:s}=e;console.log("BorrowIntention.build",n,o,r,i,s);let c=i[0],d=s[0];if(!c||!d)throw new Error("Obligation not found");let l=new Pl;return await r.borrowFromObligation(o.address,i[0].id,s[0].id,this.data.coinType,this.data.value,l),l}static fromData(e){return console.log("BorrowIntention.fromData",e),new a(e)}};import{Transaction as jl}from"@mysten/sui/transactions";import{normalizeStructTag as Bl}from"@mysten/sui.js/utils";import{Side as ae}from"@suilend/sdk";import Nl from"bignumber.js";import{normalizeStructTag as Ai}from"@mysten/sui.js/utils";var _l="0x34fe4f3c9e450fed4d0a3c587ed842eec5313c30c3cc3c0841247c49425e246b::suilend_point::SUILEND_POINT",Rl=Ai(_l),Oi=a=>Ai(a)===Rl;var Sa=class a extends q{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o,suilendClient:r,obligationOwnerCaps:i,obligations:s}=e;console.log("ClaimRewardsIntention.build",n,o,r,i,s);let c=i[0],d=s[0];if(!c||!d)throw new Error("Obligation not found");let l={[ae.DEPOSIT]:[],[ae.BORROW]:[]};r.lendingMarket.reserves.forEach(p=>{[ae.DEPOSIT,ae.BORROW].forEach(m=>{let f=m===ae.DEPOSIT?p.depositsPoolRewardManager:p.borrowsPoolRewardManager,S=d.userRewardManagers.find(w=>w.poolRewardManagerId===f.id);S&&(l[m]=f.poolRewards.map((w,v)=>({reserveArrayIndex:p.arrayIndex,rewardIndex:v,rewardCoinType:Bl(w.coinType.name),side:m})).filter(w=>!Oi(w.rewardCoinType)&&!!S.rewards[w.rewardIndex]&&new Nl(S.rewards[w.rewardIndex].earnedRewards.value.toString()).gt(0)))})});let u=new jl;return await r.claimRewardsToObligation(o.address,Object.values(l).flat().map(p=>({obligationOwnerCapId:c.id,reserveArrayIndex:p.reserveArrayIndex,rewardIndex:BigInt(p.rewardIndex),rewardType:p.rewardCoinType,side:p.side})),u),u}static fromData(e){return console.log("ClaimRewardsIntention.fromData",e),new a(e)}};import{Transaction as Ml}from"@mysten/sui/transactions";var wa=class a extends q{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o,suilendClient:r,obligationOwnerCaps:i}=e;console.log("DepositIntention.build",n,o,r,i);let s=new Ml;return await r.depositIntoObligation(o.address,this.data.coinType,this.data.value,s,i[0]?.id),s}static fromData(e){return console.log("DepositIntention.fromData",e),new a(e)}};import{Transaction as El}from"@mysten/sui/transactions";var Ca=class a extends q{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o,suilendClient:r,obligationOwnerCaps:i,obligations:s}=e;console.log("RepayIntention.build",n,o,r,i,s);let c=i[0],d=s[0];if(!c||!d)throw new Error("Obligation not found");let l=new El;return await r.repayIntoObligation(o.address,s[0].id,this.data.coinType,this.data.value,l),l}static fromData(e){return console.log("RepayIntention.fromData",e),new a(e)}};import{Transaction as Wl}from"@mysten/sui/transactions";var Ia=class a extends q{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o,suilendClient:r,obligationOwnerCaps:i,obligations:s}=e;console.log("WithdrawIntention.build",n,o,r,i,s);let c=i[0],d=s[0];if(!c||!d)throw new Error("Obligation not found");let l=new Wl;return await r.withdrawFromObligation(o.address,i[0].id,s[0].id,this.data.coinType,this.data.value,l),l}static fromData(e){return console.log("WithdrawIntention.fromData",e),new a(e)}};var Di=async a=>Ro.initializeWithLendingMarket(await ql.fetch(a,$l(Fl),Ul),a),Pi=async(a,t,e)=>Ro.getObligationOwnerCaps(t.address,e.lendingMarket.$typeArgs,a),_i=async(a,t,e)=>Promise.all(e.map(n=>Ro.getObligation(n.obligationId,t.lendingMarket.$typeArgs,a))),Ta=class{application="Suilend";supportSDK="@mysten/sui";suilendClient;obligationOwnerCaps;obligations;async deserialize(t){let{transaction:e,suiClient:n,account:o}=t;this.suilendClient||(this.suilendClient=await Di(n)),this.obligationOwnerCaps||(this.obligationOwnerCaps=await Pi(n,o,this.suilendClient)),this.obligations||(this.obligations=await _i(n,this.suilendClient,this.obligationOwnerCaps));let r=await n.devInspectTransactionBlock({sender:o.address,transactionBlock:e});console.log("SuilendAppHelper.deserialize",r);let s=new ha(e,r).decode();return{txType:Ll.Other,txSubType:s.type,intentionData:s.intentionData}}async build(t){let{network:e,txSubType:n,intentionData:o,suiClient:r,account:i}=t;this.suilendClient||(this.suilendClient=await Di(r)),this.obligationOwnerCaps||(this.obligationOwnerCaps=await Pi(r,i,this.suilendClient)),this.obligations||(this.obligations=await _i(r,this.suilendClient,this.obligationOwnerCaps));let s;switch(n){case"deposit":s=wa.fromData(o);break;case"withdraw":s=Ia.fromData(o);break;case"borrow":s=ya.fromData(o);break;case"repay":s=Ca.fromData(o);break;case"claimRewards":s=Sa.fromData(o);break;default:throw new Error("not implemented")}return s.build({network:e,suiClient:r,account:i,suilendClient:this.suilendClient,obligationOwnerCaps:this.obligationOwnerCaps,obligations:this.obligations})}};import{TransactionType as dd}from"@msafe/sui3-utils";import{TurbosSdk as ud}from"turbos-clmm-sdk";import{TransactionType as Q}from"@msafe/sui3-utils";import{bcs as Ri}from"@mysten/sui.js/bcs";import{normalizeStructTag as Vl,normalizeSuiAddress as oe}from"@mysten/sui.js/utils";import{BN as Hl}from"turbos-clmm-sdk";var V={PackageId:"0x02fe4933f4521250e55a15441096d1d4a38a7311195b0bca126fc0138c1f5a97",Claim:"0x0c822cec42f7ca703696b4232f1c47b348330c23580172a29aab465bc071d894",turbosCoinType:"0x5d1f47ea69bb0de31c313d7acf89b890dbb8991ea8e03c6c355171f84bb1ba4a::turbos::TURBOS"},H={PackageId:"0xdee9"};var Kl=(a,t,e,n)=>{if(a===1)switch(n.findIndex(i=>i===t)){case 0:return[!0,!0];case 1:return[!0,!1];case 2:return[!1,!0];case 3:return[!1,!1];default:throw new Error(`not target: ${t}`)}switch(e.findIndex(r=>r===t)){case 0:return[!0];case 1:return[!1];default:throw new Error(`not target: ${t}`)}},ka=class{constructor(t,e,n){this.txb=t;this.turbosSdk=e;this.config=n}get transactions(){return this.txb.blockData.transactions}get swap1Layer(){return[`${this.config.PackageId}::swap_router::swap_a_b`,`${this.config.PackageId}::swap_router::swap_b_a`]}get swap2Layer(){return[`${this.config.PackageId}::swap_router::swap_a_b_b_c`,`${this.config.PackageId}::swap_router::swap_a_b_c_b`,`${this.config.PackageId}::swap_router::swap_b_a_b_c`,`${this.config.PackageId}::swap_router::swap_b_a_c_b`]}async decode(t){if(this.isSwapTransaction())return await this.decodeSwap();if(this.isAddLiquidityTransaction())return this.decodeAddLiquidity();if(this.isIncreaseLiquidityTransaction())return this.decodeIncreaseLiquidity(t);if(this.isRemoveLiquidityTransaction())return this.decodeRemoveLiquidity(t);if(this.isDecreaseLiquidityTransaction())return this.decodeDecreaseLiquidity(t);if(this.isCollectFeeTransaction())return this.decodeCollectFee();if(this.isCollectRewardTransaction())return this.decodeCollectReward();if(this.isBurnTransaction())return this.decodeBurn();if(this.isPrixClaimTransaction())return this.decodePrixClaim();if(this.isPrixJoinTransaction())return this.decodePrixJoin();if(this.isSwapExactBaseForQuoteTransaction())return this.decodeSwapExactBaseForQuote();if(this.isSwapExactQuoteForBaseTransaction())return this.decodeSwapExactQuoteForBase();throw new Error("Unknown transaction type")}getMoveCallTransaction(t){return this.transactions.find(e=>e.kind==="MoveCall"&&e.target===t)}getMoveCallsTransaction(t){return t.every(e=>this.transactions.find(n=>n.kind==="MoveCall"&&n.target===e))}getSwapMoveCallTransaction(t){return this.transactions.find(e=>e.kind==="MoveCall"&&t.includes(e.target))}isSwapTransaction(){return!!this.getSwapMoveCallTransaction([...this.swap1Layer,...this.swap2Layer])}isAddLiquidityTransaction(){return!!this.getMoveCallTransaction(`${this.config.PackageId}::position_manager::mint`)}isIncreaseLiquidityTransaction(){return!!this.getMoveCallTransaction(`${this.config.PackageId}::position_manager::increase_liquidity`)}isDecreaseLiquidityTransaction(){return!!this.getMoveCallTransaction(`${this.config.PackageId}::position_manager::decrease_liquidity`)}isCollectFeeTransaction(){return!!this.getMoveCallTransaction(`${this.config.PackageId}::position_manager::collect`)}isCollectRewardTransaction(){return!!this.getMoveCallTransaction(`${this.config.PackageId}::position_manager::collect_reward`)}isBurnTransaction(){return!!this.getMoveCallTransaction(`${this.config.PackageId}::position_manager::burn`)}isPrixJoinTransaction(){return!!this.getMoveCallTransaction(`${V.PackageId}::claim::join`)}isPrixClaimTransaction(){return!!this.getMoveCallTransaction(`${V.PackageId}::claim::claim`)}isRemoveLiquidityTransaction(){return!!this.getMoveCallsTransaction([`${this.config.PackageId}::position_manager::decrease_liquidity`,`${this.config.PackageId}::position_manager::burn`])}isSwapExactBaseForQuoteTransaction(){return!!this.getMoveCallTransaction(`${H.PackageId}::clob_v2::swap_exact_base_for_quote`)}isSwapExactQuoteForBaseTransaction(){return!!this.getMoveCallTransaction(`${H.PackageId}::clob_v2::swap_exact_quote_for_base`)}async decodeSwap(){let t=this.transactions.find(m=>m.kind==="MoveCall"),e=0;this.swap2Layer.includes(t.target)&&(e=1);let n=Kl(e,t.target,this.swap1Layer,this.swap2Layer),o=n.map((m,f)=>{let S=this.helper.decodeSharedObjectId(f),w=this.helper.decodeInputU128(4+f+e),v=this.turbosSdk.math.sqrtPriceX64ToTickIndex(new Hl(w.toString()));return{pool:S,a2b:m,nextTickIndex:v}}),r=n[0]||e===1?t.typeArguments[0]:t.typeArguments[1],i=e===1?t.typeArguments[4]:n[0]?t.typeArguments[1]:t.typeArguments[0],s=this.helper.decodeInputAddress(6+2*e),c=this.helper.decodeInputU64(7+2*e),d=this.helper.decodeInputBool(5+2*e),l=this.helper.decodeInputU64(2+e),u=this.helper.decodeInputU64(3+e),p=await this.turbosSdk.trade.computeSwapResultV2({pools:[{pool:o[0].pool,a2b:o[0].a2b,amountSpecified:l}],address:s,amountSpecifiedIsInput:d});return{txType:Q.Other,type:"Swap",intentionData:{routes:o,coinTypeA:r,coinTypeB:i,address:s,amountA:d?l:u,amountB:d?u:l,amountSpecifiedIsInput:d,slippage:"0.1",deadline:c}}}decodeAddLiquidity(){console.log(this.helper,"decodeAddLiquidity this.helper");let t=this.helper.decodeSharedObjectId(0),e=this.helper.decodeInputAddress(12),n=this.helper.decodeInputU64(8),o=this.helper.decodeInputU64(9),r=this.helper.decodeInputU32(4),i=this.helper.decodeInputBool(5),s=this.helper.decodeInputU32(6),c=this.helper.decodeInputBool(7),d=this.helper.decodeInputU64(13);return{txType:Q.Other,type:"AddLiquidity",intentionData:{pool:t,slippage:10,address:e,amountA:n,amountB:o,tickLower:i?-r:r,tickUpper:c?-s:s,deadline:d}}}decodeIncreaseLiquidity(t){console.log(this.helper,"decodeIncreaseLiquidity this.helper");let e=this.helper.decodeSharedObjectId(0),n=this.helper.decodeSharedObjectId(4),o=this.helper.decodeInputU64(5),r=this.helper.decodeInputU64(6),i=this.helper.decodeInputU64(9);return{txType:Q.Other,type:"IncreaseLiquidity",intentionData:{pool:e,slippage:10,address:t,amountA:o,amountB:r,nft:n,deadline:i}}}decodeDecreaseLiquidity(t){console.log(this.helper,"decodeDecreaseLiquidity this.helper");let e=this.helper.decodeSharedObjectId(0),n=this.helper.decodeSharedObjectId(2),o=this.helper.decodeInputU64(3),r=this.helper.decodeInputU64(4),i=this.helper.decodeInputU64(5),s=this.helper.decodeInputU64(6);return{txType:Q.Other,type:"DecreaseLiquidity",intentionData:{pool:e,decreaseLiquidity:o,nft:n,amountA:r,amountB:i,slippage:10,address:t,deadline:s}}}decodeCollectFee(){console.log(this.helper,"decodeCollectFee this.helper");let t=this.helper.decodeSharedObjectId(0),e=this.helper.decodeSharedObjectId(2),n=this.helper.decodeInputAddress(5),o=this.helper.decodeInputU64(3),r=this.helper.decodeInputU64(4),i=this.helper.decodeInputU64(6);return{txType:Q.Other,type:"CollectFee",intentionData:{pool:t,address:n,collectAmountA:o,collectAmountB:r,nft:e,deadline:i}}}decodeCollectReward(){console.log(this.helper,"decodeCollectReward this.helper");let t=this.helper.decodeSharedObjectId(0),e=this.helper.decodeSharedObjectId(2),n=this.helper.decodeInputAddress(6),o=this.collectRewardHelper.map(i=>i.decodeInputU64(5)),r=this.helper.decodeInputU64(7);return{txType:Q.Other,type:"CollectReward",intentionData:{pool:t,address:n,rewardAmounts:o,nft:e,deadline:r}}}decodeBurn(){console.log(this.helper,"decodeBurn this.helper");let t=this.helper.decodeSharedObjectId(0),e=this.helper.decodeSharedObjectId(2);return{txType:Q.Other,type:"Burn",intentionData:{pool:t,nft:e}}}decodeRemoveLiquidity(t){console.log(this.helper,"decodeRemoveLiquidity this.helper");let e=this.decreaseLiquidityHelper.decodeSharedObjectId(0),n=this.decreaseLiquidityHelper.decodeSharedObjectId(2),o=this.decreaseLiquidityHelper.decodeInputU64(3),r=this.decreaseLiquidityHelper.decodeInputU64(4),i=this.decreaseLiquidityHelper.decodeInputU64(5),s=this.decreaseLiquidityHelper.decodeInputU64(6),c=this.collectRewardHelper.map(u=>u.decodeInputU64(5)),d=this.collectFeeHelper.decodeInputU64(3)||0,l=this.collectFeeHelper.decodeInputU64(4)||0;return{txType:Q.Other,type:"RemoveLiquidity",intentionData:{pool:e,decreaseLiquidity:o,nft:n,amountA:r,amountB:i,slippage:10,address:t,collectAmountA:d,collectAmountB:l,rewardAmounts:c,deadline:s}}}decodePrixClaim(){return{txType:Q.Other,type:"PrixClaim",intentionData:{}}}decodePrixJoin(){return{txType:Q.Other,type:"PrixJoin",intentionData:{}}}decodeSwapExactBaseForQuote(){let t=this.swapExactBaseForQuoteHelper.decodeSharedObjectId(0),e=this.swapExactBaseForQuoteHelper.decodeInputU64(3),n=this.swapExactBaseForQuoteHelper.shortTypeArg(0),o=this.swapExactBaseForQuoteHelper.shortTypeArg(1);return{txType:Q.Other,type:"SwapExactBaseForQuote",intentionData:{poolId:t,amountIn:e,token1:n,token2:o}}}decodeSwapExactQuoteForBase(){let t=this.swapExactQuoteForBaseHelper.decodeSharedObjectId(0),e=this.swapExactQuoteForBaseHelper.decodeInputU64(3),n=this.swapExactQuoteForBaseHelper.shortTypeArg(0),o=this.swapExactQuoteForBaseHelper.shortTypeArg(1);return{txType:Q.Other,type:"SwapExactQuoteForBase",intentionData:{poolId:t,amountIn:e,token1:n,token2:o}}}get helper(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target!=="0x2::coin::zero"&&e.target!=="0x0000000000000000000000000000000000000000000000000000000000000002::coin::zero");return new mt(t,this.txb)}get collectRewardHelper(){return this.transactions.filter(e=>e.kind==="MoveCall"&&e.target===`${this.config.PackageId}::position_manager::collect_reward`).map(e=>new mt(e,this.txb))}get collectFeeHelper(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target===`${this.config.PackageId}::position_manager::collect`);return new mt(t,this.txb)}get decreaseLiquidityHelper(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target===`${this.config.PackageId}::position_manager::decrease_liquidity`);return new mt(t,this.txb)}get swapExactBaseForQuoteHelper(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target===`${H.PackageId}::clob_v2::swap_exact_base_for_quote`);return new mt(t,this.txb)}get swapExactQuoteForBaseHelper(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target===`${H.PackageId}::clob_v2::swap_exact_quote_for_base`);return new mt(t,this.txb)}},mt=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 oe(e)}decodeInputString(t){return this.decodePureArg(t,"string")}decodeInputBool(t){return this.decodePureArg(t,"bool")}decodePureArg(t,e){let n=this.getInputParam(t);return 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 Ri.de(e,new Uint8Array(n))}return t.value}static getOwnedObjectId(t){if(t.type!=="object")throw new Error(`not object argument: ${JSON.stringify(t)}`);if(typeof t.value=="object"){if(!("Object"in t.value)||!("ImmOrOwned"in t.value.Object))throw new Error("not ImmOrOwned");return oe(t.value.Object.ImmOrOwned.objectId)}return oe(t.value)}static getSharedObjectId(t){if(t.type!=="object")throw new Error(`not object argument: ${JSON.stringify(t)}`);if(typeof t.value!="object")return oe(t.value);if(!("Object"in t.value)||!("Shared"in t.value.Object))throw new Error("not Shared");return oe(t.value.Object.Shared.objectId)}static getPureInput(t,e){if(t.type!=="pure")throw new Error("not pure argument");if(typeof t.value!="object")return t.value;if(!("Pure"in t.value))throw new Error("Pure not in value");let n=t.value.Pure;return Ri.de(e,new Uint8Array(n))}typeArg(t){return Vl(this.moveCall.typeArguments[t])}shortTypeArg(t){return this.moveCall.typeArguments[t]}txArg(t){return this.moveCall.arguments[t]}};import{TurbosSdk as Gl}from"turbos-clmm-sdk";var va=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new Gl(e.network.replace("sui:",""),e.suiClient),{pool:o,address:r,amountA:i,amountB:s,slippage:c,tickLower:d,tickUpper:l,deadline:u,txb:p}=this.data;return n.pool.addLiquidity({pool:o,slippage:c,address:r,amountA:i,amountB:s,tickLower:d,tickUpper:l,deadline:u,txb:p})}static fromData(e){return new a(e)}};import{TurbosSdk as zl}from"turbos-clmm-sdk";var xa=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new zl(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 Jl}from"turbos-clmm-sdk";var Aa=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new Jl(e.network.replace("sui:",""),e.suiClient),{pool:o,address:r,nft:i,collectAmountA:s,collectAmountB:c,deadline:d,txb:l}=this.data;return n.pool.collectFee({pool:o,address:r,collectAmountA:s,collectAmountB:c,nft:i,deadline:d,txb:l})}static fromData(e){return new a(e)}};import{TurbosSdk as Xl}from"turbos-clmm-sdk";var Oa=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new Xl(e.network.replace("sui:",""),e.suiClient),{pool:o,address:r,nft:i,rewardAmounts:s,deadline:c,txb:d}=this.data;return n.pool.collectReward({pool:o,address:r,rewardAmounts:s,nft:i,deadline:c,txb:d})}static fromData(e){return new a(e)}};import{TurbosSdk as Yl}from"turbos-clmm-sdk";var Da=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new Yl(e.network.replace("sui:",""),e.suiClient),{fee:o,address:r,tickLower:i,tickUpper:s,sqrtPrice:c,slippage:d,coinTypeA:l,coinTypeB:u,amountA:p,amountB:m,deadline:f,txb:S}=this.data;return n.pool.createPool({fee:o,amountA:p,amountB:m,address:r,tickLower:i,tickUpper:s,sqrtPrice:c,slippage:d,coinTypeA:l,coinTypeB:u,deadline:f,txb:S})}static fromData(e){return new a(e)}};import{TurbosSdk as Zl}from"turbos-clmm-sdk";var Pa=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new Zl(e.network.replace("sui:",""),e.suiClient),{pool:o,address:r,amountA:i,amountB:s,slippage:c,nft:d,decreaseLiquidity:l,deadline:u,txb:p}=this.data;return n.pool.decreaseLiquidity({pool:o,slippage:c,address:r,amountA:i,amountB:s,nft:d,decreaseLiquidity:l,deadline:u,txb:p})}static fromData(e){return new a(e)}};import{TurbosSdk as td}from"turbos-clmm-sdk";var _a=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new td(e.network.replace("sui:",""),e.suiClient),{pool:o,address:r,amountA:i,amountB:s,slippage:c,nft:d,deadline:l,txb:u}=this.data;return n.pool.increaseLiquidity({pool:o,slippage:c,address:r,amountA:i,amountB:s,nft:d,deadline:l,txb:u})}static fromData(e){return new a(e)}};import{TransactionBlock as ed}from"@mysten/sui.js/transactions";import{SUI_CLOCK_OBJECT_ID as nd}from"@mysten/sui.js/utils";var Ra=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new ed;return n.moveCall({target:`${V.PackageId}::claim::claim`,typeArguments:[V.turbosCoinType],arguments:[n.object(V.Claim),n.object(nd)]}),n}static fromData(e){return new a(e)}};import{TransactionBlock as ad}from"@mysten/sui.js/transactions";var ja=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new ad;return n.moveCall({target:`${V.PackageId}::claim::join`,typeArguments:[V.turbosCoinType],arguments:[n.object(V.Claim)]}),n}static fromData(e){return new a(e)}};import{TransactionBlock as od}from"@mysten/sui.js/transactions";import{TurbosSdk as rd}from"turbos-clmm-sdk";var Ba=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new rd(e.network.replace("sui:",""),e.suiClient),o=new od;return o=await n.pool.collectFee({txb:o,...this.data}),o=await n.pool.collectReward({txb:o,...this.data}),o=await n.pool.decreaseLiquidity({txb:o,...this.data}),o=await n.nft.burn({txb:o,nft:this.data.nft,pool:this.data.pool}),o}static fromData(e){return new a(e)}};import{TurbosSdk as id}from"turbos-clmm-sdk";var Na=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){console.log(this.data,"this.data");let n=new id(e.network.replace("sui:",""),e.suiClient),{routes:o,coinTypeA:r,coinTypeB:i,address:s,amountA:c,amountB:d,slippage:l,amountSpecifiedIsInput:u,deadline:p,txb:m}=this.data;return n.trade.swap({routes:o,coinTypeA:r,coinTypeB:i,address:s,amountA:c,amountB:d,amountSpecifiedIsInput:u,slippage:l,deadline:p,txb:m})}static fromData(e){return new a(e)}};import{TurbosSdk as cd}from"turbos-clmm-sdk";import{normalizeSuiObjectId as ji}from"@mysten/sui.js/utils";import{TransactionBlock as Bi}from"@mysten/sui.js/transactions";import{unstable_getObjectId as sd}from"turbos-clmm-sdk";var re=class{constructor(t){this.turbosSdk=t}async getCoinsData(t,e,n){let o=[],r;do r=await this.turbosSdk.provider.getCoins({owner:t,coinType:e,cursor:r?.nextCursor}),o.push(...r.data);while(r.hasNextPage);let i=[],s=0;return o.sort((c,d)=>Number(d.balance)-Number(c.balance)).some(c=>s>=n?!0:(s+=Number(c.balance),i.push(c),!1)),i}splitAndMergeCoin(t,e,n){if(!t||t.length<1)return[void 0,void 0];if(this.isSuiCoinAddress(t[0].coinType)){let[i]=n.splitCoins(n.gas,[n.pure(e)]);return[i,void 0]}let o=n.object(t[0].coinObjectId);t.length>1&&n.mergeCoins(o,t.slice(1).map(i=>n.object(i.coinObjectId)));let[r]=n.splitCoins(o,[n.pure(e)]);return[r,o]}isSuiCoinAddress(t){return t.toLocaleLowerCase()==="0x2::sui::sui"}async IsAccountCap(t){let e=await this.turbosSdk.provider.getOwnedObjects({owner:t,options:{showContent:!0,showType:!0,showOwner:!0},filter:{StructType:`${H.PackageId}::custodian_v2::AccountCap`}});return e.data[0]?.data?sd(e.data[0].data):void 0}createAccount(t){let[e]=t.moveCall({typeArguments:[],target:`${H.PackageId}::clob_v2::create_account`,arguments:[]});return e}zero(t,e){return e.moveCall({typeArguments:[t],target:"0x2::coin::zero",arguments:[]})}};var Ni=89,Mi=1e6,Ei=async a=>{let{token1:t,token2:e,poolId:n,amountIn:o,currentAddress:r,turbosSdk:i}=a,s=new Bi,c=new re(i),d=await c.getCoinsData(r,e,o),[l,u]=c.splitAndMergeCoin(d,o,s);if(!l)throw new Error(`Not enough balance: ${e}`);let p=await c.IsAccountCap(r),m=p?s.object(p):c.createAccount(s),[f,S,w]=s.moveCall({typeArguments:[t,e],target:`${H.PackageId}::clob_v2::swap_exact_quote_for_base`,arguments:[s.object(String(n)),s.pure(Ni),m,s.pure(o),s.object(ji("0x6")),l]});return u&&s.transferObjects([u],s.pure(r)),s.transferObjects([f],s.pure(r)),s.transferObjects([S],s.pure(r)),p||s.transferObjects([m],s.pure(r)),s.setSenderIfNotSet(r),s.setGasBudget(Mi),s},Wi=async a=>{let{token1:t,token2:e,poolId:n,amountIn:o,currentAddress:r,turbosSdk:i}=a,s=new Bi,c=new re(i),d=await c.getCoinsData(r,t,o),[l,u]=c.splitAndMergeCoin(d,o,s);if(!l)throw new Error(`Not enough balance: ${t}`);let p=await c.IsAccountCap(r),m=p?s.object(p):c.createAccount(s),f=c.zero(e,s),[S,w,v]=s.moveCall({typeArguments:[t,e],target:`${H.PackageId}::clob_v2::swap_exact_base_for_quote`,arguments:[s.object(String(n)),s.pure(Ni),m,s.pure(o),l,f,s.object(ji("0x6"))]});return u&&s.transferObjects([u],s.pure(r)),s.transferObjects([S],s.pure(r)),s.transferObjects([w],s.pure(r)),p||s.transferObjects([m],s.pure(r)),s.setSenderIfNotSet(r),s.setGasBudget(Mi),s};var Ma=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new cd(e.network.replace("sui:",""),e.suiClient);return await Wi({...this.data,turbosSdk:n,currentAddress:e.account.address})}static fromData(e){return new a(e)}};import{TurbosSdk as ld}from"turbos-clmm-sdk";var Ea=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new ld(e.network.replace("sui:",""),e.suiClient);return await Ei({...this.data,turbosSdk:n,currentAddress:e.account.address})}static fromData(e){return new a(e)}};var Wa=class{application="turbos";supportSDK="@mysten/sui.js";async deserialize(t){let e=new ud(t.network.replace("sui:",""),t.suiClient),n=await e.contract.getConfig(),{transactionBlock:o,account:r}=t;console.log(t,"input");let s=await new ka(o,e,n).decode(r.address);return{txType:dd.Other,txSubType:s.type,intentionData:s.intentionData}}async build(t){let{suiClient:e,account:n,network:o}=t,r;switch(console.log(t.intentionData,"intentionData"),t.txSubType){case"CreatePool":r=Da.fromData(t.intentionData);break;case"AddLiquidity":r=va.fromData(t.intentionData);break;case"IncreaseLiquidity":r=_a.fromData(t.intentionData);break;case"DecreaseLiquidity":r=Pa.fromData(t.intentionData);break;case"RemoveLiquidity":r=Ba.fromData(t.intentionData);break;case"CollectFee":r=Aa.fromData(t.intentionData);break;case"CollectReward":r=Oa.fromData(t.intentionData);break;case"Burn":r=xa.fromData(t.intentionData);break;case"Swap":r=Na.fromData(t.intentionData);break;case"PrixJoin":r=ja.fromData(t.intentionData);break;case"PrixClaim":r=Ra.fromData(t.intentionData);break;case"SwapExactBaseForQuote":r=Ma.fromData(t.intentionData);break;case"SwapExactQuoteForBase":r=Ea.fromData(t.intentionData);break;default:throw new Error("not implemented")}return r.build({suiClient:e,account:n,network:o})}};import{TransactionType as yd}from"@msafe/sui3-utils";import{TransactionType as jo}from"@msafe/sui3-utils";import{bcs as Li}from"@mysten/sui.js/bcs";import{normalizeStructTag as fd,normalizeSuiAddress as ie}from"@mysten/sui.js/utils";var pd={packageId:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55",poolObjectId:"0x7fa2faa111b8c65bea48a23049bfd81ca8f971a262d981dcd9a17c3825cb5baf",metadataObjectId:"0x680cd26af32b2bde8d3361e804c53ec1d1cfe24c7f039eb7f549e8dfde389a60",systemStateObjectId:"0x0000000000000000000000000000000000000000000000000000000000000005",certType:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55::cert::CERT",gasBudget:5e7},O=pd;var La=class{constructor(t){this.txb=t}decode(){if(console.log("txb",this.txb),this.isStakeTransaction())return this.decodeStake();if(this.isUnStakeTransaction())return this.decodeUnStake();if(this.isClaimTicketTransaction())return this.decodeClaimTicket();throw new Error("Unknown transaction type")}get transactions(){return this.txb.blockData.transactions}getMoveCallTransaction(t){return this.transactions.find(e=>e.kind==="MoveCall"&&e.target===t)}isStakeTransaction(){return!!this.getMoveCallTransaction(`${O.packageId}::native_pool::stake`)}isUnStakeTransaction(){return!!this.getMoveCallTransaction(`${O.packageId}::native_pool::unstake`)}isClaimTicketTransaction(){return!!this.getMoveCallTransaction(`${O.packageId}::native_pool::burn_ticket`)}decodeStake(){let t=this.transactions[0].amounts[0].value.toNumber();return{txType:jo.Other,type:"Stake",intentionData:{amount:t}}}decodeUnStake(){let e=this.transactions.find(n=>n.kind==="SplitCoins").amounts[0].value.toNumber();return{txType:jo.Other,type:"UnStake",intentionData:{amount:e}}}decodeClaimTicket(){let t=this.helper.decodeOwnedObjectId(2);return console.log(t),{txType:jo.Other,type:"ClaimTicket",intentionData:{ticketId:t}}}get helper(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(O.packageId));return new Bo(t,this.txb)}},Bo=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 ie(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 Li.de(e,new Uint8Array(n))}return t.value}static getOwnedObjectId(t){if(t.type!=="object")throw new Error(`not object argument: ${JSON.stringify(t)}`);if(typeof t.value=="object"){if(!("Object"in t.value)||!("ImmOrOwned"in t.value.Object))throw new Error("not ImmOrOwned");return ie(t.value.Object.ImmOrOwned.objectId)}return ie(t.value)}static getSharedObjectId(t){if(t.type!=="object")throw new Error(`not object argument: ${JSON.stringify(t)}`);if(typeof t.value!="object")return ie(t.value);if(!("Object"in t.value)||!("Shared"in t.value.Object))throw new Error("not Shared");return ie(t.value.Object.Shared.objectId)}static getPureInput(t,e){if(t.type!=="pure")throw new Error("not pure argument");if(typeof t.value!="object")return t.value;if(!("Pure"in t.value))throw new Error("Pure not in value");let n=t.value.Pure;return Li.de(e,new Uint8Array(n))}typeArg(t){return fd(this.moveCall.typeArguments[t])}txArg(t){return this.moveCall.arguments[t]}};import{TransactionBlock as bd}from"@mysten/sui.js/transactions";var Ua=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){console.log(e);let n=new bd,{ticketId:o}=this.data;return n.moveCall({target:`${O.packageId}::native_pool::burn_ticket`,arguments:[n.object(O.poolObjectId),n.object(O.systemStateObjectId),n.object(o)]}),n}static fromData(e){return new a(e)}};import{TransactionBlock as gd}from"@mysten/sui.js/transactions";var Fa=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){console.log(e);let n=new gd,{amount:o}=this.data,[r]=n.splitCoins(n.gas,[n.pure(o)]);return n.moveCall({target:`${O.packageId}::native_pool::stake`,arguments:[n.object(O.poolObjectId),n.object(O.metadataObjectId),n.object(O.systemStateObjectId),r]}),n}static fromData(e){return new a(e)}};import{TransactionBlock as hd}from"@mysten/sui.js/transactions";var $a=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){console.log(e);let n=new hd,{amount:o}=this.data,r=(await e.suiClient.getAllCoins({owner:e.account.address,limit:100})).data,[i,...s]=r.filter(l=>l.coinType.split("::")[0]===O.certType.split("::")[0]),c=n.object(i.coinObjectId);s.length&&n.mergeCoins(c,s.map(l=>n.object(l.coinObjectId)));let d=n.splitCoins(n.object(i.coinObjectId),[n.pure(o)]);return n.moveCall({target:`${O.packageId}::native_pool::unstake`,arguments:[n.object(O.poolObjectId),n.object(O.metadataObjectId),n.object(O.systemStateObjectId),d]}),n}static fromData(e){return new a(e)}};var qa=class{application="volo";supportSDK="@mysten/sui.js";async deserialize(t){let{transactionBlock:e}=t,o=new La(e).decode();return{txType:yd.Other,txSubType:o.type,intentionData:o.intentionData}}async build(t){let{suiClient:e,account:n}=t,o;switch(t.txSubType){case"Stake":o=Fa.fromData(t.intentionData);break;case"UnStake":o=$a.fromData(t.intentionData);break;case"ClaimTicket":o=Ua.fromData(t.intentionData);break;default:throw new Error("not implemented")}return o.build({suiClient:e,account:n})}};var GA=Cn.fromHelpers([new dn,new Sn,new rn,new wn,new je,new Wa,new ga,new qa,new ue,new Ta]);export{GA as appHelpers};
|
|
1
|
+
var Ji=Object.defineProperty;var Fo=(a,t)=>{for(var e in t)Ji(a,e,{get:t[e],enumerable:!0})};import{TransactionType as as}from"@msafe/sui3-utils";import{TransactionType as ts}from"@msafe/sui3-utils";import Xi from"sort-keys-recursive";var h=class{constructor(t){this.data=t}serialize(){return JSON.stringify(Xi(this.data))}};import{Transaction as Zi}from"@mysten/sui/transactions";import{BucketClient as Yi}from"bucket-protocol-sdk";var $o=(a,t)=>{let e=a==="sui:mainnet"?"mainnet":"testnet";return new Yi(e,t.address)};var le=async(a,t,e,n)=>{let{coinType:o,amount:r}=a,i=new Zi;return await $o(e,t).getPsmTx(i,o,r,n,t.address),i};var de=class a extends h{constructor(e){super(e);this.data=e}txType=ts.Other;txSubType="psm-in";async build(e){let{account:n,network:o}=e;return await le(this.data,n,o,!1)}static fromData(e){return new a(e)}};import{TransactionType as es}from"@msafe/sui3-utils";var ue=class a extends h{constructor(e){super(e);this.data=e}txType=es.Other;txSubType="psm-out";async build(e){let{account:n,network:o}=e;return await le(this.data,n,o,!0)}static fromData(e){return new a(e)}};import{TransactionType as qo}from"@msafe/sui3-utils";import{bcs as ns}from"@mysten/sui/bcs";var pe=class{constructor(t){this.transaction=t}decode(){if(this.isPsmInTransaction())return this.decodePsmIn();if(this.isPsmOutTransaction())return this.decodePsmOut();throw new Error("Unknown transaction type")}get commands(){return this.transaction.getData().commands}get inputs(){return this.transaction.getData().inputs}getMoveCallCommand(t){return this.commands.find(e=>e.$kind==="MoveCall"&&e.MoveCall.function===t)}getSplitCoinsCommands(){return this.commands.filter(t=>t.$kind==="SplitCoins")}getTransferCommands(){return this.commands.filter(t=>t.$kind==="TransferObjects")}isPsmInTransaction(){return!!this.getMoveCallCommand("charge_reservoir")}isPsmOutTransaction(){return!!this.getMoveCallCommand("discharge_reservoir")}decodePsmIn(){let t="0",e=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];e.$kind=="Input"&&(t=this.getPureInputU64(e.Input));let o=this.getMoveCallCommand("charge_reservoir").MoveCall.typeArguments[0];return console.log("Decoder.decodePsmIn",o,t),{txType:qo.Other,type:"psm-in",intentionData:{coinType:o,amount:t}}}decodePsmOut(){let t="0",e=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];e.$kind=="Input"&&(t=this.getPureInputU64(e.Input));let o=this.getMoveCallCommand("discharge_reservoir").MoveCall.typeArguments[0];return console.log("Decoder.decodePsmOut",o,t),{txType:qo.Other,type:"psm-out",intentionData:{coinType:o,amount:t}}}getPureInputU64(t){let e=this.inputs[t];if(e.$kind!=="Pure")throw new Error("not pure argument");return ns.U64.fromBase64(e.Pure.bytes)}};var me=class{application="bucket";supportSDK="@mysten/sui";async deserialize(t){console.log("Bucket helper deserialize input: ",t);let{transaction:e}=t,o=new pe(e).decode();return{txType:as.Other,txSubType:o.type,intentionData:o.intentionData}}async build(t){let{suiClient:e,account:n,network:o}=t,r;switch(t.txSubType){case"psm-in":r=de.fromData(t.intentionData);break;case"psm-out":r=ue.fromData(t.intentionData);break;default:throw new Error("not implemented")}return r.build({suiClient:e,account:n,network:o})}};import{TransactionType as Ls}from"@msafe/sui3-utils";import{TransactionType as fs}from"@msafe/sui3-utils";import{AggregatorClient as os,Env as rs}from"@cetusprotocol/aggregator-sdk";import{CetusPeripherySDK as is}from"@cetusprotocol/cetus-periphery-sdk";import{CetusClmmSDK as ss}from"@cetusprotocol/cetus-sui-clmm-sdk";import{SuiClient as cs}from"@mysten/sui/client";var ls={fullRpcUrl:"https://fullnode.mainnet.sui.io/",simulationAccount:{address:"0x326ce9894f08dcaa337fa232641cc34db957aec9ff6614c1186bc9a7508df0bb"},cetus_config:{package_id:"0x95b8d278b876cae22206131fb9724f701c9444515813042f54f0a426c9a3bc2f",published_at:"0x95b8d278b876cae22206131fb9724f701c9444515813042f54f0a426c9a3bc2f",config:{coin_list_id:"0x8cbc11d9e10140db3d230f50b4d30e9b721201c0083615441707ffec1ef77b23",launchpad_pools_id:"0x1098fac992eab3a0ab7acf15bb654fc1cf29b5a6142c4ef1058e6c408dd15115",clmm_pools_id:"0x15b6a27dd9ae03eb455aba03b39e29aad74abd3757b8e18c0755651b2ae5b71e",admin_cap_id:"0x39d78781750e193ce35c45ff32c6c0c3f2941fa3ddaf8595c90c555589ddb113",global_config_id:"0x0408fa4e4a4c03cc0de8f23d0c2bbfe8913d178713c9a271ed4080973fe42d8f",coin_list_handle:"0x49136005e90e28c4695419ed4194cc240603f1ea8eb84e62275eaff088a71063",launchpad_pools_handle:"0x5e194a8efcf653830daf85a85b52e3ae8f65dc39481d54b2382acda25068375c",clmm_pools_handle:"0x37f60eb2d9d227949b95da8fea810db3c32d1e1fa8ed87434fc51664f87d83cb"}},clmm_pool:{package_id:"0x1eabed72c53feb3805120a081dc15963c204dc8d091542592abaf7a35689b2fb",published_at:"0x70968826ad1b4ba895753f634b0aea68d0672908ca1075a2abdf0fc9e0b2fc6a",version:4,config:{pools_id:"0xf699e7f2276f5c9a75944b37a0c5b5d9ddfd2471bf6242483b03ab2887d198d0",global_config_id:"0xdaa46292632c3c4d8f31f23ea0f9b36a28ff3677e9684980e4438403a67a3d8f",global_vault_id:"0xce7bceef26d3ad1f6d9b6f13a953f053e6ed3ca77907516481ce99ae8e588f2b",admin_cap_id:"0x89c1a321291d15ddae5a086c9abc533dff697fde3d89e0ca836c41af73e36a75"}},integrate:{package_id:"0x996c4d9480708fb8b92aa7acf819fb0497b5ec8e65ba06601cae2fb6db3312c3",published_at:"0x8faab90228e4c4df91c41626bbaefa19fc25c514405ac64de54578dec9e6f5ee",version:6},deepbook:{package_id:"0x000000000000000000000000000000000000000000000000000000000000dee9",published_at:"0x000000000000000000000000000000000000000000000000000000000000dee9"},deepbook_endpoint_v2:{package_id:"0x92aee86c01c79146d23938a00c7fff725ee0688c389be36d1bcbe03761b466c6",published_at:"0x92aee86c01c79146d23938a00c7fff725ee0688c389be36d1bcbe03761b466c6"},aggregatorUrl:"https://api-sui.cetus.zone/router",swapCountUrl:"https://api-sui.cetus.zone/v2/sui/swap/count"},ds={launchpad:{package_id:"0x80d114c5d474eabc2eb2fcd1a0903f1eb5b5096a8dc4184d72453f7a9be728e4",published_at:"0x80d114c5d474eabc2eb2fcd1a0903f1eb5b5096a8dc4184d72453f7a9be728e4",config:{pools_id:"0xfd8d37f7a1276878972d240302c8efe32f577220c1bbc6c8984d8b60dddfcab3",admin_cap_id:"0x66c70d58c69353714cc6fe2d3a62492d605a96a9821e2bd8274de17219c69980",config_cap_id:"0x02b8d23f033687579966e182c776fe0287cacdbb18bff56c29f141e29a18a4d1"}},ido:{package_id:"0x1192c9e20b4b0a8848a73a8c711b43e38f7ea1f307b556aab6ffab4e982e9c59",published_at:"0x1192c9e20b4b0a8848a73a8c711b43e38f7ea1f307b556aab6ffab4e982e9c59",config:{pools_id:"0xefc209b47acf1f23b29d166440904600229e520ad36228aaf2329b7c16be9762",admin_cap_id:"0x281859d366951830aeeda90779aa170d8ee6845875545470d33ecb890e78c8ce",package_version_id:"0xc93dc996106770af5f4e979b6808518f8cee080f22f35b936f071f59d834bb22"}},xcetus:{package_id:"0x9e69acc50ca03bc943c4f7c5304c2a6002d507b51c11913b247159c60422c606",published_at:"0x9e69acc50ca03bc943c4f7c5304c2a6002d507b51c11913b247159c60422c606",config:{xcetus_manager_id:"0x838b3dbade12b1e602efcaf8c8b818fae643e43176462bf14fd196afa59d1d9d",lock_manager_id:"0x288b59d9dedb51d0bb6cb5e13bfb30885ecf44f8c9076b6f5221c5ef6644fd28",lock_handle_id:"0x7c534bb7b8a2cc21538d0dbedd2437cc64f47106cb4c259b9ff921b5c3cb1a49"}},xcetus_dividends:{package_id:"0x785248249ac457dfd378bdc6d2fbbfec9d1daf65e9d728b820eb4888c8da2c10",published_at:"0x5aa58e1623885bd93de2331d05c29bf4930e54e56beeabcab8fe5385de2d31dc",config:{dividend_manager_id:"0x721c990bfc031d074341c6059a113a59c1febfbd2faeb62d49dcead8408fa6b5",dividend_admin_id:"0x682ba823134f156eac2bcfb27d85a284954a0e61998dc628c40b9bcb4a46ff30",dividend_settle_id:"0xade40abe9f6dd10b83b11085be18f07b63b681cf1c169b041fa16854403388c5",venft_dividends_id:"0x9dcdb97b4307684bedaeaf803d381b12321a31ecbb9dad7df2cd5f64384f9456",venft_dividends_id_v2:"0xaa21fbc1707786d56302952f8327362f4eb9a431a5bc574834e6d46125390de3"}},cetus_faucet:{package_id:"0x6864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b",published_at:"0x6864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b"},xtoken:{package_id:"",published_at:"",config:{xtoken_manager_id:"",lock_manager_id:"",lock_handle_id:""}},xtoken_dividends:{package_id:"",published_at:"",config:{dividend_manager_id:"",dividend_admin_id:"",dividend_settle_id:""}},token_faucet:{package_id:"",published_at:""},booster:{package_id:"",published_at:"",config:{booster_config_id:"",booster_pool_handle:""}},maker_bonus:{package_id:"",published_at:"",config:{maker_config_id:"",maker_pool_handle:""}},liquidity_stratefy:{package_id:"",published_at:"",version:void 0,config:void 0},vaults:{package_id:"0xd3453d9be7e35efe222f78a810bb3af1859fd1600926afced8b4936d825c9a05",published_at:"0xabbd278f738affe762e9df4765b3409bb1e86a355a4f611ad82b278c18108918",version:1,config:{admin_cap_id:"0x78a42978709c4032fab7b33b782b5bcef64c1c6603250bf23644650b72144375",vaults_manager_id:"0x25b82dd2f5ee486ed1c8af144b89a8931cd9c29dee3a86a1bfe194fdea9d04a6",vaults_pool_handle:"0x9036bcc5aa7fd2cceec1659a6a1082871f45bc400c743f50063363457d1738bd",haedal:{package_id:"0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d",published_at:"0x1d56b8ec33c3fae897eb7bb1acb79914e8152faed614868928e684c25c8b198d",version:1,config:{staking_id:"0x47b224762220393057ebf4f70501b6e657c3e56684737568439a04f80849b2ca",coin_type:"0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d::hasui::HASUI"}},volo:{package_id:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55",published_at:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55",version:1,config:{native_pool:"0x7fa2faa111b8c65bea48a23049bfd81ca8f971a262d981dcd9a17c3825cb5baf",vsui_metadata:"0x680cd26af32b2bde8d3361e804c53ec1d1cfe24c7f039eb7f549e8dfde389a60",coin_type:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55::cert::CERT"}},aftermath:{package_id:"0x7f6ce7ade63857c4fd16ef7783fed2dfc4d7fb7e40615abdb653030b76aef0c6",published_at:"0x7f6ce7ade63857c4fd16ef7783fed2dfc4d7fb7e40615abdb653030b76aef0c6",version:1,config:{staked_sui_vault:"0x2f8f6d5da7f13ea37daa397724280483ed062769813b6f31e9788e59cc88994d",referral_vault:"0x4ce9a19b594599536c53edb25d22532f82f18038dc8ef618afd00fbbfb9845ef",safe:"0xeb685899830dd5837b47007809c76d91a098d52aabbf61e8ac467c59e5cc4610",validator_address:"0xd30018ec3f5ff1a3c75656abf927a87d7f0529e6dc89c7ddd1bd27ecb05e3db2",coin_type:"0xf325ce1300e8dac124071d3152c5c5ee6174914f8bc2161e88329cf579246efc::afsui::AFSUI"}}}},limit_order:{package_id:"",published_at:"",version:1,config:{rate_orders_indexer_id:"",rate_orders_indexer_handle:"",global_config_id:"",token_list_handle:"",user_orders_indexer_id:"",user_orders_indexer_handle:""}},frams:{package_id:"0x11ea791d82b5742cc8cab0bf7946035c97d9001d7c3803a93f119753da66f526",published_at:"0xd817d90368dafcbf3b051e96546dea6209bffad23289d66025beef80354dcd6b",version:1,config:{global_config_id:"0x21215f2f6de04b57dd87d9be7bb4e15499aec935e36078e2488f36436d64996e",rewarder_manager_id:"0xe0e155a88c77025056da08db5b1701a91b79edb6167462f768e387c3ed6614d5",rewarder_manager_handle:"0xb32e312cbb3367d6f3d2b4e57c9225e903d29b7b9f612dae2ddf75bdeb26a5aa",admin_cap_id:"0xf10fbf1fea5b7aeaa524b87769461a28c5c977613046360093673991f26d886c"}},dca:{package_id:"",published_at:"",version:0,config:{admin_cap_id:"",global_config_id:"",indexer_id:"",user_indexer_id:"",in_coin_whitelist_id:"",out_coin_whitelist_id:""}}},us={fullRpcUrl:"https://fullnode.testnet.sui.io/",simulationAccount:{address:"0xcd0247d0b67e53dde69b285e7a748e3dc390e8a5244eb9dd9c5c53d95e4cf0aa"},cetus_config:{package_id:"0xf5ff7d5ba73b581bca6b4b9fa0049cd320360abd154b809f8700a8fd3cfaf7ca",published_at:"0xf5ff7d5ba73b581bca6b4b9fa0049cd320360abd154b809f8700a8fd3cfaf7ca",config:{coin_list_id:"0x257eb2ba592a5480bba0a97d05338fab17cc3283f8df6998a0e12e4ab9b84478",launchpad_pools_id:"0xdc3a7bd66a6dcff73c77c866e87d73826e446e9171f34e1c1b656377314f94da",clmm_pools_id:"0x26c85500f5dd2983bf35123918a144de24e18936d0b234ef2b49fbb2d3d6307d",admin_cap_id:"0x1a496f6c67668eb2c27c99e07e1d61754715c1acf86dac45020c886ac601edb8",global_config_id:"0xe1f3db327e75f7ec30585fa52241edf66f7e359ef550b533f89aa1528dd1be52",coin_list_handle:"0x3204350fc603609c91675e07b8f9ac0999b9607d83845086321fca7f469de235",launchpad_pools_handle:"0xae67ff87c34aceea4d28107f9c6c62e297a111e9f8e70b9abbc2f4c9f5ec20fd",clmm_pools_handle:"0xd28736923703342b4752f5ed8c2f2a5c0cb2336c30e1fed42b387234ce8408ec"}},clmm_pool:{package_id:"0x0868b71c0cba55bf0faf6c40df8c179c67a4d0ba0e79965b68b3d72d7dfbf666",published_at:"0x1c29d658882c40eeb39a8bb8fe58f71a216a918acb3e3eb3b47d24efd07257f2",config:{pools_id:"0xc090b101978bd6370def2666b7a31d7d07704f84e833e108a969eda86150e8cf",global_config_id:"0x6f4149091a5aea0e818e7243a13adcfb403842d670b9a2089de058512620687a",global_vault_id:"0xf3114a74d54cbe56b3e68f9306661c043ede8c6615f0351b0c3a93ce895e1699",admin_cap_id:""}},integrate:{package_id:"0x8627c5cdcd8b63bc3daa09a6ab7ed81a829a90cafce6003ae13372d611fbb1a9",published_at:"0xf1a5d0c5b0593e41d13f9684ca91365bdfe54a98836c1d33c90e361a031fac74",version:6},deepbook:{package_id:"0x000000000000000000000000000000000000000000000000000000000000dee9",published_at:"0x000000000000000000000000000000000000000000000000000000000000dee9"},deepbook_endpoint_v2:{package_id:"0xa34ffca2c6540e1ca9e53963ab43e7b1eed7b82e37696c743bb7c6179c15dfa6",published_at:"0xa34ffca2c6540e1ca9e53963ab43e7b1eed7b82e37696c743bb7c6179c15dfa6"},aggregatorUrl:"https://api-sui.devcetus.com/router",swapCountUrl:"https://api-sui.devcetus.com/v2/sui/swap/count"},ps={launchpad:{package_id:"0x3beee8416089a5cbff9cfd5c0a2ce2937b0452dc7e2a3ab4dc431c7be05c2335",published_at:"0x3beee8416089a5cbff9cfd5c0a2ce2937b0452dc7e2a3ab4dc431c7be05c2335",config:{pools_id:"0xccc10403ab3da4ae943847908e0e674fe1fdab81c6383e4c6dcd0eea0edade3d",admin_cap_id:"0x8a72713049dbcfc40902ff209dc5e6066fe455d152baa235957c84d7a3b875ed",config_cap_id:"0x16492b4252b01debb60f8a825334020d7fdb9d895b52f8139c98618de30817fc"}},ido:{package_id:"0x1352bf18ef20458f7cc773852d4a90b240015a6a54479dda3a1debfc500bf044",published_at:"0xbd09a0889ea9970b821512428bab3e2fd01e16809a90a325cd3b3d3573eab6a4",config:{pools_id:"0x346bee25ab4d15bcfa9484ef5ebd4d7c94eb665ebaa745ff4094936a7f59a8b1",admin_cap_id:"0xc1bb19a24d3bb65dfd4f3835637b63347c223c67cde4b0888f1a857974f33cbb",package_version_id:"0x3ccf1b38e3259e638b980d4e6b49eac8c5aa94d3cb2ace5e75f0a551c8e67e5e"}},xcetus:{package_id:"0xdebaab6b851fd3414c0a62dbdf8eb752d6b0d31f5cfce5e38541bc6c6daa8966",published_at:"0xdebaab6b851fd3414c0a62dbdf8eb752d6b0d31f5cfce5e38541bc6c6daa8966",config:{xcetus_manager_id:"0x3be34cbad122c8b100ed7157d762b9610e68b3c65734e08bc3c3baf857da807d",lock_manager_id:"0x7c67e805182e3fecd098bd68a6b06c317f28f8c6249bd771e07904a10b424e60",lock_handle_id:"0xc5f3bbfefe9a45c13da7a34bc72cac122ee45d633690476a8ac56bd2c4e78c86"}},xcetus_dividends:{package_id:"0x20d948d640edd0c749f533d41efc5f843f212d441220324ad7959c6e1d281828",published_at:"0x20d948d640edd0c749f533d41efc5f843f212d441220324ad7959c6e1d281828",config:{dividend_manager_id:"0x13b7facb704fae1d199ff0038b8acabc253415a77d142b39189dee97d457e442",dividend_admin_id:"0x5eb78463007422d4130b21f61c180bcd190819b7792f56e00a61df3b8fb928ef",dividend_settle_id:"0x495095e13a170ff494d242ae44ac2c7453011ca6c33cff27498010105e10e4b4",venft_dividends_id:"",venft_dividends_id_v2:""}},cetus_faucet:{package_id:"0x1a69aee6be709054750949959a67aedbb4200583b39586d5e3eabe57f40012c7",published_at:"0x1a69aee6be709054750949959a67aedbb4200583b39586d5e3eabe57f40012c7"},xtoken:{package_id:"",published_at:"",config:{xtoken_manager_id:"",lock_manager_id:"",lock_handle_id:""}},xtoken_dividends:{package_id:"",published_at:"",config:{dividend_manager_id:"",dividend_admin_id:"",dividend_settle_id:""}},token_faucet:{package_id:"",published_at:""},booster:{package_id:"",published_at:"",config:{booster_config_id:"",booster_pool_handle:""}},maker_bonus:{package_id:"",published_at:"",config:{maker_config_id:"",maker_pool_handle:""}},liquidity_stratefy:{package_id:"",published_at:"",version:void 0,config:void 0},vaults:{package_id:"0x25cff94bdb454bae6a5565d09047bfe2b230025ef3bd2199622ec48d854b86b9",published_at:"0x25cff94bdb454bae6a5565d09047bfe2b230025ef3bd2199622ec48d854b86b9",config:{admin_cap_id:"0x9b2d6f5be2650d16d27cd630c4539a76d7793970343ed3cbb023e13f1637c07c",vaults_manager_id:"0xc0a1a937df08880e395d85014ff40c74f13abe7a53abdbffea36f51adaaaf79e",vaults_pool_handle:"0x3ab02203de753de9c8198cc0ce7594dc960878f2c34c5c5a4b7742082241860a"}},limit_order:{package_id:"",published_at:"",version:1,config:{rate_orders_indexer_id:"",rate_orders_indexer_handle:"",global_config_id:"",token_list_handle:"",user_orders_indexer_id:"",user_orders_indexer_handle:""}},frams:{package_id:"0xfa0d98e99c1dbdbea1b0fe089fa93ebab40a7719ae4160c42cc78ebfe029fda0",published_at:"0xfa0d98e99c1dbdbea1b0fe089fa93ebab40a7719ae4160c42cc78ebfe029fda0",config:{global_config_id:"0x5082c7a5ee9a758025d7b0a5e8aa08b56625c7cd535b8909d2b7993991e229cc",rewarder_manager_id:"0xe789e092dbd9dceadbe89350c4761a6f2e11647aab97f09746a01b151926cc0e",rewarder_manager_handle:"0x7e7dd42392b5d82564dc9ad5093a111c5f0598cc9f806cff257d7dacb71f7837",admin_cap_id:"0x4ec248bca2d1fc05f39fd7491ab490464a46d128624caa4d3c2a66d957ef40b0"}},dca:{package_id:"",published_at:"",version:0,config:{admin_cap_id:"",global_config_id:"",indexer_id:"",user_indexer_id:"",in_coin_whitelist_id:"",out_coin_whitelist_id:""}}},ft=(a,t)=>{let e=a==="sui:mainnet"?ls:us,n=new ss(e);return n.senderAddress=t.address,n},j=(a,t)=>{let e=ft(a,t),n=a==="sui:mainnet"?ds:ps;return new is(n,e)},ms="https://api-sui.cetus.zone/router_v2/find_routes",Qo=(a,t)=>{let e=new cs({url:"https://fullnode.mainnet.sui.io/"});return new os(ms,t.address,e,rs.Mainnet)};var Vo=async(a,t,e)=>await ft(e,t).Position.createAddLiquidityFixTokenPayload(a?.parameter,a?.gasEstimateArg),Ho=async(a,t,e)=>await ft(e,t).Position.createAddLiquidityFixTokenPayload(a?.parameter,a?.gasEstimateArg),Ko=async(a,t,e)=>await ft(e,t).Position.closePositionTransactionPayload(a),Go=async(a,t,e)=>await ft(e,t).Position.removeLiquidityTransactionPayload(a),zo=async(a,t,e)=>await ft(e,t).Rewarder.collectRewarderTransactionPayload(a);var fe=class a extends h{constructor(e){super(e);this.data=e}txType=fs.Other;txSubType="OpenAndAddLiquidity";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await Vo(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as bs}from"@msafe/sui3-utils";var be=class a extends h{constructor(e){super(e);this.data=e}txType=bs.Other;txSubType="ClaimFeeAndMining";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await zo(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as gs}from"@msafe/sui3-utils";var ge=class a extends h{constructor(e){super(e);this.data=e}txType=gs.Other;txSubType="DecreaseLiquidity";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await Go(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as hs}from"@msafe/sui3-utils";var Jo=async(a,t,e)=>await j(e,t).Farms.openPositionAddLiquidityStakePaylod(a),Xo=async(a,t,e)=>await j(e,t).Farms.addLiquidityFixCoinPayload(a),Yo=async(a,t,e)=>await j(e,t).Farms.removeLiquidityPayload(a),Zo=async(a,t,e)=>await j(e,t).Farms.removeLiquidityPayload(a),tr=async(a,t,e)=>await j(e,t).Farms.claimFeeAndClmmReward(a),er=async(a,t,e)=>await j(e,t).Farms.harvestPayload(a),nr=async(a,t,e)=>{let n=j(e,t),o=Object.values(a);return await n.Farms.batchHarvestPayload(o)},ar=async(a,t,e)=>await j(e,t).Farms.depositPayload(a),or=async(a,t,e)=>await j(e,t).Farms.withdrawPayload(a);var he=class a extends h{constructor(e){super(e);this.data=e}txType=hs.Other;txSubType="FarmingOpenAndAddLiquidity";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await Jo(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as ys}from"@msafe/sui3-utils";var ye=class a extends h{constructor(e){super(e);this.data=e}txType=ys.Other;txSubType="FarmingBatchHarvest";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await nr(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Ss}from"@msafe/sui3-utils";var Se=class a extends h{constructor(e){super(e);this.data=e}txType=Ss.Other;txSubType="FarmingClaimFeeAndReward";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await tr(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as ws}from"@msafe/sui3-utils";var we=class a extends h{constructor(e){super(e);this.data=e}txType=ws.Other;txSubType="FarmingDecreaseLiquidity";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await Yo(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Is}from"@msafe/sui3-utils";var Ie=class a extends h{constructor(e){super(e);this.data=e}txType=Is.Other;txSubType="FarmingHarvest";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await er(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Cs}from"@msafe/sui3-utils";var Ce=class a extends h{constructor(e){super(e);this.data=e}txType=Cs.Other;txSubType="FarmingIncreaseLiquidity";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await Xo(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Ts}from"@msafe/sui3-utils";var Te=class a extends h{constructor(e){super(e);this.data=e}txType=Ts.Other;txSubType="FarmingRemoveLiquidity";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await Zo(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as ks}from"@msafe/sui3-utils";var ke=class a extends h{constructor(e){super(e);this.data=e}txType=ks.Other;txSubType="FarmingStake";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await ar(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as vs}from"@msafe/sui3-utils";var ve=class a extends h{constructor(e){super(e);this.data=e}txType=vs.Other;txSubType="FarmingUnstake";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await or(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as xs}from"@msafe/sui3-utils";var xe=class a extends h{constructor(e){super(e);this.data=e}txType=xs.Other;txSubType="IncreaseLiquidity";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await Ho(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as As}from"@msafe/sui3-utils";var Ae=class a extends h{constructor(e){super(e);this.data=e}txType=As.Other;txSubType="RemoveLiquidity";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await Ko(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Ps}from"@msafe/sui3-utils";import{restituteMsafeFastRouterSwapParams as Ds}from"@cetusprotocol/aggregator-sdk";import{Transaction as Os}from"@mysten/sui/transactions";var rr=async(a,t,e)=>{let n=Qo(e,t),o=new Os;return await n.fastRouterSwap({...a,routers:Ds(a.routers),txb:o}),o};var De=class a extends h{constructor(e){super(e);this.data=e}txType=Ps.Other;txSubType="AggregatorSwap";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await rr(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Rs}from"@msafe/sui3-utils";import{Transaction as _s}from"@mysten/sui/transactions";var ir={package_id:"0x355714a1eeb7ab1d80902da6c92001170cda1212edf524c32aa308a3ac177c31",published_at:"0x355714a1eeb7ab1d80902da6c92001170cda1212edf524c32aa308a3ac177c31",cetus_coin_type:"0x06864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b::cetus::CETUS"},sr=async(a,t,e)=>{console.log("getVestingRedeemTxb txbParams: ",a),console.log("getVestingRedeemTxb account: ",t),console.log("getVestingRedeemTxb network: ",e);let{pool:n,nftId:o,periods:r,CLOCK_ADDRESS:i}=a,s=new _s;return r.forEach(c=>{s.moveCall({target:`${ir.published_at}::router::redeem`,typeArguments:[ir.cetus_coin_type],arguments:[s.object(n),s.object(o),s.pure(c),s.object(i)]})}),s};var Oe=class a extends h{constructor(e){super(e);this.data=e}txType=Rs.Other;txSubType="VestingRedeem";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await sr(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Bs}from"@msafe/sui3-utils";import{Transaction as js}from"@mysten/sui/transactions";var cr=async(a,t,e)=>{let n=j(e,t),o=new js;return await n.XCetusModule.convertPayload(a,o)},lr=async(a,t,e)=>await j(e,t).XCetusModule.redeemLockPayload(a),dr=async(a,t,e)=>await j(e,t).XCetusModule.redeemDividendV3Payload(a.phases,a.venft_id,a.bonus_types,a.bonus_types_v2,a.xTokenType),ur=async(a,t,e)=>await j(e,t).XCetusModule.cancelRedeemPayload(a),pr=async(a,t,e)=>await j(e,t).XCetusModule.redeemPayload(a);var Pe=class a extends h{constructor(e){super(e);this.data=e}txType=Bs.Other;txSubType="xCETUSCancelRedeem";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await ur(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Ns}from"@msafe/sui3-utils";var _e=class a extends h{constructor(e){super(e);this.data=e}txType=Ns.Other;txSubType="xCETUSClaimStakingRwewards";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await dr(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Ms}from"@msafe/sui3-utils";var Re=class a extends h{constructor(e){super(e);this.data=e}txType=Ms.Other;txSubType="xCETUSConvert";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await cr(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Es}from"@msafe/sui3-utils";var je=class a extends h{constructor(e){super(e);this.data=e}txType=Es.Other;txSubType="xCETUSRedeem";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await pr(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Ws}from"@msafe/sui3-utils";var Be=class a extends h{constructor(e){super(e);this.data=e}txType=Ws.Other;txSubType="xCETUSRedeemLock";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await lr(r,n,o)}static fromData(e){return new a(e)}};var Ne=class{application="cetus";supportSDK="@mysten/sui";async deserialize(t){console.log("Cetus helper deserialize input: ",t);let{txbParams:e,action:n}=t;return{txType:Ls.Other,txSubType:n,intentionData:{txbParams:{...e},action:n}}}async build(t){let{suiClient:e,account:n,network:o}=t,r;switch(t.txSubType){case"OpenAndAddLiquidity":r=fe.fromData(t.intentionData);break;case"IncreaseLiquidity":r=xe.fromData(t.intentionData);break;case"DecreaseLiquidity":r=ge.fromData(t.intentionData);break;case"RemoveLiquidity":r=Ae.fromData(t.intentionData);break;case"ClaimFeeAndMining":r=be.fromData(t.intentionData);break;case"FarmingOpenAndAddLiquidity":r=he.fromData(t.intentionData);break;case"FarmingIncreaseLiquidity":r=Ce.fromData(t.intentionData);break;case"FarmingDecreaseLiquidity":r=we.fromData(t.intentionData);break;case"FarmingRemoveLiquidity":r=Te.fromData(t.intentionData);break;case"FarmingClaimFeeAndReward":r=Se.fromData(t.intentionData);break;case"FarmingHarvest":r=Ie.fromData(t.intentionData);break;case"FarmingBatchHarvest":r=ye.fromData(t.intentionData);break;case"FarmingStake":r=ke.fromData(t.intentionData);break;case"FarmingUnstake":r=ve.fromData(t.intentionData);break;case"xCETUSConvert":r=Re.fromData(t.intentionData);break;case"xCETUSRedeemLock":r=Be.fromData(t.intentionData);break;case"xCETUSClaimStakingRwewards":r=_e.fromData(t.intentionData);break;case"xCETUSCancelRedeem":r=Pe.fromData(t.intentionData);break;case"xCETUSRedeem":r=je.fromData(t.intentionData);break;case"VestingRedeem":r=Oe.fromData(t.intentionData);break;case"AggregatorSwap":r=De.fromData(t.intentionData);break;default:throw new Error("not implemented")}return r.build({suiClient:e,account:n,network:o})}};import{TransactionType as Ec}from"@msafe/sui3-utils";import Us from"sort-keys-recursive";var g=class{constructor(t){this.data=t}serialize(){return JSON.stringify(Us(this.data))}};import{getFullnodeUrl as Me}from"@mysten/sui.js/client";var Xa={};Fo(Xa,{contractId:()=>qs,default:()=>Gs,feeObjId:()=>Hs,roleObjId:()=>Qs,status:()=>$s,transaction:()=>Fs,upgradeCapObjId:()=>Ks,vaultObjId:()=>Vs});var Fs="DiBZq4UmVVYiRL6ZJmFKYoHcxtxqrhsCXSkFyT7wUr3j",$s="success",qs="0x81c960dc653975fbd0072deca8afb92d322898c911622898ba1b2e3ad0c4bd8d",Qs="0xc6ec0bdee0bb59a72077e9acd2f42457043cf47080b3d3fad4d39abf28bba63a",Vs="0xbc4021387fbac149119fd24e92be9e58f745774292f3a2a12e2ac6daf5363e1d",Hs="0x4178f63970fe2daeb256dc5730ad172e82b3e8eb45f31b33e0daae72cd35e1e1",Ks="0xe1e9aa7d222d151bfe6dd83358b0d7fdcb11260f710800cfaf7ccc1b1e245115",Gs={transaction:Fs,status:$s,contractId:qs,roleObjId:Qs,vaultObjId:Vs,feeObjId:Hs,upgradeCapObjId:Ks};var Ya={};Fo(Ya,{contractId:()=>Xs,default:()=>nc,feeObjId:()=>tc,roleObjId:()=>Ys,status:()=>Js,transaction:()=>zs,upgradeCapObjId:()=>ec,vaultObjId:()=>Zs});var zs="855FNDV8o8Z3fWULPnQo9qdhLJpsg7wZrkCpNyfw9KfB",Js="success",Xs="0xc357c3985e8fb875d6b37141497af660779aa1bab0ec489b2213efd74067d1fa",Ys="0x5ab49bdf9fd1413e328ef242b3f8d83dde791b38a0b627bfc87fb25c010d34f1",Zs="0xb483558770d8eb26007f193b75db40f0a45f2e36863a687625885d4de6993378",tc="0x48453fc4d7cde3fe35aad89e5dfb496608a6a55ea529a1c0274681a808627f94",ec="0x34279779a0d0d36bd5044b04830d607fa1b0ecf316548c8ac3a44151e4f1a42a",nc={transaction:zs,status:Js,contractId:Xs,roleObjId:Ys,vaultObjId:Zs,feeObjId:tc,upgradeCapObjId:ec};var ac=Me("testnet"),oc=Me("testnet"),rc=Me("mainnet"),ic=Me("mainnet"),sc="https://bc3p6l5unl.execute-api.us-west-1.amazonaws.com/prod",cc="https://rolsbkota7.execute-api.us-west-1.amazonaws.com/prod",lc="https://6p6mkx33ne.execute-api.us-west-1.amazonaws.com/prod",dc="https://xrae3mrjv5.execute-api.us-west-1.amazonaws.com/prod",mr=Xa,fr=Ya,uc=new Map([["dev",{env:"dev",rpc:{url:ac},backend:{url:sc},contract:mr}],["stg",{env:"stg",rpc:{url:oc},backend:{url:cc},contract:mr}],["prev",{env:"prev",rpc:{url:rc},backend:{url:lc},contract:fr}],["prod",{env:"prod",rpc:{url:ic},backend:{url:dc},contract:fr}]]);function br(a,t){let e=uc.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 mc}from"@mysten/sui.js/client";var k=class extends Error{mpayErrorCode;context;constructor(t,e,n={}){let{cause:o,context:r}=n;o?super(`[MPay] ${e}: ${o}`):super(`[MPay] ${e}`),this.mpayErrorCode=t,this.context=r}};var Ee=class extends k{constructor(){super(11,"Backend is not specified")}};var We=class extends k{constructor(){super(1,"Wallet not connected")}};import yt,{AxiosError as pc}from"axios";var ht=class extends k{constructor(t,e){super(10,t,{context:e})}};var Le=class a{constructor(t){this.apiURL=t}static parseResponseData(t){if(t instanceof pc)throw new ht(t.response?.statusText);if(t.status===200){if(t.data.success)return t.data.data;throw new ht(t.data.code)}throw new ht(t.status.toString())}async getIncomingStreams(t,e){let n=await yt.post(`${this.apiURL}/stream`,{recipient:t,...e});return a.parseResponseData(n)}async getOutgoingStreams(t,e){let n=await yt.post(`${this.apiURL}/stream`,{sender:t,...e});return a.parseResponseData(n)}async getStreamHistory(t){let e=await yt.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 yt.post(`${this.apiURL}/stream-info`,{address:t});return a.parseResponseData(e)}async getAllRecipients(t,e){let n=await yt.post(`${this.apiURL}/stream-info`,{sender:t,status:e});return a.parseResponseData(n)}async getAllSenders(t,e){let n=await yt.post(`${this.apiURL}/stream-info`,{recipient:t,status:e});return a.parseResponseData(n)}};var St=class a{signer;suiClient;envConfig;_backend;constructor(t){this.envConfig=t,this.suiClient=new mc({url:t.rpc.url}),t.backend&&(this._backend=new Le(t.backend.url))}static new(t,e){let n=br(t,e);return new a(n)}get walletType(){return this.wallet?this.wallet.type:"disconnected"}get backend(){if(!this._backend)throw new Ee;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 We;return this.signer}async walletAddress(){return this.wallet.address()}};import{SUI_TYPE_ARG as Bc,normalizeStructTag as Nc,normalizeSuiAddress as Lr}from"@mysten/sui.js/utils";import{TransactionBlock as Ve}from"@mysten/sui.js/transactions";import{TransactionBlock as kr}from"@mysten/sui.js/transactions";import{SUI_TYPE_ARG as vr,normalizeStructTag as hc}from"@mysten/sui.js/utils";var Za=50n,Ue=10000n,gr=25n,to=100000000n;var K=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))})}},nt=class a{constructor(t){this.result=t;return new Proxy(this,{set(){throw new Error("The transaction result is a proxy, and does not support setting properties directly")},get(e,n){if(n in e)return Reflect.get(e,n);let o=i=>new a(e.result[i]);if(n===Symbol.iterator)return function*(){let i=0;for(;;)yield o(i),i++};if(typeof n=="symbol")return;let r=parseInt(n,10);if(!(Number.isNaN(r)||r<0))return o(r)}})}moveArg(){return this.result}};import{Buffer as hr}from"buffer";import{normalizeSuiAddress as fc}from"@mysten/sui.js/utils";var jt=class extends k{constructor(t,e){super(3,t,{context:e})}};var Fe=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 jt("Invalid contract return type.",{ctx:{expectType:"address",gotType:o}});return fc(hr.from(n).toString("hex"))}getU64(t=0,e=0){let[n,o]=this.getValue(t,e);if(o!=="u64")throw new jt("Invalid contract return type.",{ctx:{expectType:"u64",gotType:o}});return hr.from(n).readBigInt64LE()}};import{bcs as Sr}from"@mysten/sui.js/bcs";var A=class extends k{constructor(t,e,n){super(2,`Invalid input: ${t}`,{context:{fieldKey:e,fieldValue:n}})}};var wr={groupId:"string",name:"string"},bc=64;function Ir(a){return Cr(a),Sr.ser(wr,a).toString("base64")}function Bt(a){let t=Sr.de(wr,a,"base64");return Cr(t),t}function Cr(a){if(!yr(a.name))throw new A("Invalid metadata: Name contains unknown character");if(!yr(a.groupId))throw new A("Invalid metadata: Group ID contains unknown character");if(a.name.length>bc)throw new A("Invalid metadata: Name exceed max length 64")}function yr(a){return/^[\x00-\x7F]+$/.test(a)}import{normalizeStructTag as $e}from"@mysten/sui.js/utils";function qe(a,t){return $e(a)===$e(t)}function at(a,t){return $e(a)===$e(t)}var Qe="txn.gas";import{nanoid as gc}from"nanoid";function Tr(){return gc()}var bt=class a{constructor(t,e,n){this.globals=t;this.feeContract=e;this.streamContract=n}static convertCreateStreamInfoToInternal(t){return{metadata:Ir({name:t.name,groupId:Tr()}),coinType:hc(t.coinType),recipients:t.recipients.map(e=>({address:e.address,cliffAmount:e.cliffAmount,amountPerEpoch:e.amountPerStep})),epochInterval:t.interval,numberEpoch:t.steps,startTime:t.startTimeMs,cancelable:t.cancelable}}async buildCreateStreamTransactionBlock(t){let e=new kr,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 d=t.recipients[c],l=this.amountForRecipient(d,t.numberEpoch),u=this.getStreamFeeLocal(l),[p]=e.splitCoins(i,[e.pure(l+u,"u64")]),[m]=e.splitCoins(s,[e.pure(this.flatSuiFee,"u64")]);this.streamContract.createStream(e,{paymentCoin:new nt(p),flatFeeCoin:new nt(m),metadata:t.metadata,recipient:d.address,timeStart:t.startTime,cliff:d.cliffAmount,epochInterval:t.epochInterval,numEpoch:t.numberEpoch,amountPerEpoch:d.amountPerEpoch,cancelable:t.cancelable,coinType:t.coinType})}return e}calculateCreateStreamFees(t){let e=a.convertCreateStreamInfoToInternal(t);return this.calculateFeesInternal(e)}feeParams(){return{createFeePercent:{numerator:Za,denominator:Ue},claimFeePercent:{numerator:gr,denominator:Ue},flatFeePerStream:to}}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===Qe?n=t.gas:n=t.object(e.primaryCoin),n}getCreateStreamCoinRequests(t,e){let n=t.coinType;return qe(n,vr)?[{coinType:n,amount:e.totalAmount+e.streamFeeAmount+e.flatFeeAmount}]:[{coinType:n,amount:e.totalAmount+e.streamFeeAmount},{coinType:vr,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 to}getStreamFeeLocal(t){return t*Za/Ue}async getStreamFeeRemote(t){let e=this.feeContract.streamingFee(new kr,t),n=await this.globals.suiClient.devInspectTransactionBlock({sender:await this.globals.walletAddress(),transactionBlock:e});return new Fe(n).getU64()}get wallet(){return this.globals.wallet}};import{Transactions as Ar}from"@mysten/sui.js/transactions";var xr="0x0000000000000000000000000000000000000000000000000000000000000006";var wt=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(Ar.MoveCall({target:n,arguments:e.arguments.map(o=>o instanceof Rt?o.moveArgs(t):o instanceof K?o.moveArg(t):o instanceof nt?o.moveArg():t.pure(o)),typeArguments:e.typeArgs})),t}addTransactionBlock(t,e,n=[],o=[]){t.add(Ar.MoveCall({target:e,arguments:n.map(r=>r instanceof Rt?r.moveArgs(t):r instanceof K?r.moveArg(t):r instanceof nt?r.moveArg():t.pure(r)),typeArguments:o}))}makeObject(t){return typeof t=="string"?new K(t):t}vaultObject(){return new K(this.config.vaultObjId)}roleObject(){return new K(this.config.roleObjId)}feeObject(){return new K(this.config.feeObjId)}clockObject(){return new K(xr)}};var It=class a extends wt{constructor(e,n){super(a.ModuleName,e,n);this.config=e;this.globals=n}static ModuleName="fee_module";static MethodName={set_streaming_fee:"set_streaming_fee",set_claim_fee:"set_claim_fee",set_streaming_flat_fee:"set_streaming_flat_fee",streaming_flat_fee:"streaming_flat_fee",streaming_fee:"streaming_fee",claim_fee:"claim_fee",fee_denominator:"fee_denominator"};setStreamingFee(e,n){let o=this.roleObject(),r=this.feeObject();return this.addContractCall(e,{method:a.MethodName.set_streaming_fee,arguments:[o,r,n],typeArgs:[]})}setStreamingFlatFee(e,n){let o=this.roleObject(),r=this.feeObject();return this.addContractCall(e,{method:a.MethodName.set_streaming_flat_fee,arguments:[o,r,n],typeArgs:[]})}setClaimFee(e,n){let o=this.roleObject(),r=this.feeObject();return this.addContractCall(e,{method:a.MethodName.set_claim_fee,arguments:[o,r,n],typeArgs:[]})}streamingFee(e,n){let o=this.feeObject();return this.addContractCall(e,{method:a.MethodName.streaming_fee,arguments:[o,n],typeArgs:[]})}claimFee(e,n){return this.addContractCall(e,{method:a.MethodName.claim_fee,arguments:[this.feeObject(),n],typeArgs:[]})}feeDenominator(e){return this.addContractCall(e,{method:a.MethodName.fee_denominator,arguments:[this.feeObject()],typeArgs:[]})}};var G=class a extends wt{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 Ct=class{constructor(t){this.globals=t;let e=t.envConfig.contract;this.feeContract=new It(e,t),this.streamContract=new G(e,t)}feeContract;streamContract;async createStreams(t){let e=bt.convertCreateStreamInfoToInternal(t);return this.createStreamHelper().buildCreateStreamTransactionBlock(e)}createStreamHelper(){return new bt(this.globals,this.feeContract,this.streamContract)}setAutoClaim(t,e,n){let o=new Ve;return this.streamContract.setAutoClaim(o,{streamId:t,enabled:e,coinType:n})}claimStream(t,e){let n=new Ve;return this.streamContract.claimStream(n,{streamId:t,coinType:e})}claimStreamByProxy(t,e){let n=new Ve;return this.streamContract.claimStreamByProxy(n,{streamId:t,coinType:e})}cancelStream(t,e){let n=new Ve;return this.streamContract.cancelStream(n,{streamId:t,coinType:e}),n}};var O=class extends k{constructor(t,e={}){super(0,t,e)}};async function no(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 eo=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 eo(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 He=class extends k{constructor(e,n,o){super(4,`Not enough balance: ${e}`,{context:{coinType:e,requestAmount:n,gotAmount:o}});this.coinType=e;this.requestAmount=n;this.gotAmount=o}};var yc=25;async function Dr(a,t,e,n="0x2::sui::SUI",o=yc){let r=new ao(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 He(n,e,i);return s}var ao=class extends Tt{constructor(e,n,o,r){super(new oo(e,n,o,r));this.suiClient=e;this.owner=n;this.coinType=o;this.reqPageSize=r}},oo=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 Je}from"@mysten/sui.js/transactions";import{normalizeStructTag as Pr,parseStructTag as Ic}from"@mysten/sui.js/utils";import{DateTime as Cc}from"luxon";var Ke=class extends k{constructor(){super(7,"Connected wallet is not creator")}};var Nt=class extends k{constructor(){super(8,"Connected wallet is not recipient")}};var Mt=class extends k{constructor(t,e){super(6,t,{context:e})}};var Ge=class extends k{constructor(t){super(5,"Stream not found",{context:{streamId:t}})}};import{DateTime as Sc,Duration as wc}from"luxon";var Or=(1n<<64n)-1n,ze=1e3;function ro(a){let t;typeof a=="number"?t=a:typeof a=="bigint"?t=Number(a):t=a.toMillis();let e=Math.round(t/ze);return Sc.fromMillis(e*ze)}function io(a){let t;typeof a=="number"?t=a:typeof a=="bigint"?t=Number(a):t=a.toMillis();let e=Math.round(t/ze);return wc.fromMillis(e*ze)}var ot=class a{constructor(t,e,n){this.globals=t;this.streamId=e;this.rawData=n;this.streamContract=new G(t.envConfig.contract,t)}streamContract;type="Stream";static async new(t,e){let n=await a.fetchStreamData(t,e);return new a(t,e,n)}static fromObjectData(t,e,n){let o=a.parseRawStreamData(e,n);return new a(t,e,o)}get info(){return{name:this.name,creator:this.creator,coinType:this.coinType,totalAmount:this.totalAmount,start:this.timeStart,end:this.timeEnd,cancelable:this.cancelable,cliffAmount:this.cliff,duration:this.duration,interval:this.interval,steps:this.totalSteps,nextReleaseDate:this.nextReleaseDate,nextReleaseAmount:this.nextReleaseAmount,groupId:this.groupId,streamId:this.streamId,recipient:this.recipient,progress:this.progress,autoClaim:this.autoClaim}}get groupCommonInfo(){return{name:this.name,groupId:this.groupId,creator:this.creator,start:this.timeStart,interval:this.interval,steps:this.totalSteps,cancelable:this.cancelable}}async refresh(){this.rawData=await a.fetchStreamData(this.globals,this.streamId)}refreshWithData(t){if(t.data?.objectId!==this.streamId)throw new O("Object Id does not align");this.rawData=a.parseRawStreamData(this.streamId,t)}async historyEvents(t){return this.globals.backend.getStreamHistory({streamId:this.streamId,pagination:t})}async cancel(){if(await this.globals.walletAddress()!==this.creator)throw new Ke;let t=new Je;return this.streamContract.cancelStream(t,{streamId:this.streamId,coinType:this.coinType}),t}async claim(){if(await this.globals.walletAddress()!==this.recipient)throw new Nt;let t=new Je;return this.streamContract.claimStream(t,{streamId:this.streamId,coinType:this.coinType}),t}async setAutoClaim(t){if(await this.globals.walletAddress()!==this.recipient)throw new Nt;let e=new Je;return this.streamContract.setAutoClaim(e,{streamId:this.streamId,coinType:this.coinType,enabled:t}),e}async claimByProxy(){let t=new Je;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 Pr(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 io(this.rawData.config.epochInterval)}get groupId(){let{metadata:t}=this.rawData.config;return Bt(t).groupId}get name(){let{metadata:t}=this.rawData.config;return Bt(t).name}get recipient(){return this.rawData.config.recipient}get timeStart(){return ro(this.rawData.config.timeStart)}get duration(){let t=this.rawData.config,e=t.epochInterval*t.totalEpoch;return io(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:ro((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===Or?0n:this.rawData.status.epochClaimed*this.amountPerEpoch+this.cliff}get currentEpoch(){let t=Cc.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 Ge(t):new Mt(`get stream data: ${e.error.code}`,{streamId:t,...e.error});let n=e.data.content;if(n.dataType!=="moveObject")throw new Mt("Unexpected object type",{gotType:n.dataType});let{typeParams:o}=Ic(n.type),r=Pr(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 so,SUI_TYPE_ARG as Tc}from"@mysten/sui.js/utils";import{Duration as _r}from"luxon";var Xe=class extends k{constructor(t,e){super(12,`Transaction failed: ${e}`,{context:{status:t,msg:e}})}};var kc=1e3,Ye=class{constructor(t){this.globals=t;this.coinMetaHelper=new co(t.suiClient),this.createStreamHelper=new Ct(t).createStreamHelper()}coinMetaHelper;createStreamHelper;getStreamIdsFromCreateStreamResponse(t){if(t.effects?.status.status!=="success")throw new Xe(t.effects?.status.status,t.effects?.status.error);return t.objectChanges.filter(e=>e.type==="created"&&e.objectType.startsWith(`${this.globals.envConfig.contract.contractId}::stream::Stream`)).map(e=>e.objectId)}calculateCreateStreamFees(t){return this.createStreamHelper.calculateCreateStreamFees(t)}feeParams(){return this.createStreamHelper.feeParams()}calculateStreamAmount(t){if(t.steps===0n)throw new A("Invalid stream steps: 0");let e=t.cliff?t.cliff:{numerator:0n,denominator:100n},n=t.totalAmount*e.numerator/e.denominator,o=(t.totalAmount-n)/t.steps,i={realTotalAmount:o*t.steps+n,cliffAmount:n,amountPerStep:o};return this.validateStreamAmount(i,t.totalAmount),i}calculateTimelineByInterval(t){if(t.steps===0n)throw new A("Invalid stream steps: 0");let e=t.timeStart.plus(t.interval.toMillis()*Number(t.steps)),n={timeStart:t.timeStart,timeEnd:e,interval:t.interval,steps:t.steps};return this.validateTimeline(n),n}calculateTimelineByTotalDuration(t){if(t.steps===0n)throw new A("Invalid stream steps: 0");let e=BigInt(t.total.toMillis())/t.steps,n=t.timeStart.plus(_r.fromMillis(Number(e*t.steps))),o={timeStart:t.timeStart,timeEnd:n,interval:_r.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:so(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:so(o.coinType),coinMeta:n[r]}))}async getCoinMeta(t){return this.coinMetaHelper.getCoinMeta(t)}async simulateTransactionBlock(t){return this.globals.suiClient.devInspectTransactionBlock({transactionBlock:t,sender:await this.globals.wallet.address()})}validateStreamAmount(t,e){if(t.amountPerStep===0n)throw new A("Stream amount too small","totalAmount",e);if(t.cliffAmount>t.realTotalAmount)throw new A("Invalid cliff settings")}validateTimeline(t){if(t.interval.toMillis()<kc)throw new A("Interval shall be at least 1 second","interval",t.interval)}},co=class{constructor(t){this.suiClient=t;this.coinMetaReg=new Map}coinMetaReg;async getCoinMeta(t){let e=so(t||Tc);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 Rr,normalizeSuiAddress as tn}from"@mysten/sui.js/utils";import{DateTime as jr}from"luxon";var kt=class extends k{constructor(t,e){super(9,`Invalid stream group: ${t}`,{context:e})}};var vc=25;async function uo(a,t,e){let n=new Et(t),o=new Wt(a,n,e);return await no(o)}var Et=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 lo(e,n,o));this.suiClient=e;this.idIter=n;this.options=o}},lo=class{constructor(t,e,n){this.suiClient=t;this.stringIter=e;this.options=n;this.filter=n?.filter,this.pageSize=n?.pageSize||vc,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 Ze=class a{constructor(t,e){this.globals=t;this.streams=e;if(e.length===0)throw new kt("stream size 0");let n=e.map(r=>r.groupId);if(new Set(n).size!==1)throw new A("Stream does not have same group ID")}type="StreamGroup";static async new(t,e){let n=await uo(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=>{xc(n,r)||(o=!1)}),o}async refresh(){let t=await uo(this.globals.suiClient,this.streams.map(e=>e.streamId));this.streams.forEach((e,n)=>{e.refreshWithData(t[n])})}get groupId(){return this.streams[0].groupId}get creator(){return this.streams[0].creator}get info(){return{groupId:this.groupId,streamIds:this.streams.map(t=>t.streamId),progress:this.progress,name:this.streams[0].name,creator:this.creator,coinType:this.streams[0].coinType,totalAmount:this.streams.reduce((t,e)=>t+e.totalAmount,0n),start:this.streams[0].timeStart,end:this.streams[0].timeEnd,cancelable:this.streams[0].cancelable,cliffAmount:this.streams.reduce((t,e)=>t+e.cliff,0n),duration:this.streams[0].duration,interval:this.streams[0].interval,steps:this.streams[0].totalSteps,nextReleaseAmount:this.streams.reduce((t,e)=>e.nextReleaseAmount===null?t:t+e.nextReleaseAmount,0n),nextReleaseDate:this.streams[0].nextReleaseDate}}get progress(){return{total:this.streams.reduce((t,e)=>t+e.totalAmount,0n),streamed:this.streams.reduce((t,e)=>t+e.streamedAmount,0n),claimed:this.streams.reduce((t,e)=>t+e.claimedAmount,0n),claimable:this.streams.reduce((t,e)=>t+e.claimable,0n),canceled:this.streams.reduce((t,e)=>t+e.canceledAmount,0n)}}async historyEvents(t){return this.globals.backend.getStreamHistory({groupId:this.groupId,pagination:t})}static async parseGroupStreams(t,e,n){let o=n.map((r,i)=>ot.fromObjectData(t,e[i],r)).filter(r=>!!r);if(new Set(o.map(r=>r.groupId)).size!==1)throw new kt("Not same group ID");if(!this.checkStreamGroup(o))throw new kt("Not same stream settings");return o}};function xc(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 Lt=class a{constructor(t,e){this.it=t;this.pageSize=e}static async newIncoming(t){let e=await en.newIncoming(t);return new a(e,t.pageSize)}static async newOutgoing(t){let e=await en.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}},en=class a{constructor(t){this.requester=t}cachedNext;static async newIncoming(t){let e=await nn.newIncomingQuery(t);return new a(e)}static async newOutgoing(t){let e=await nn.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}},nn=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 Et(n.flat().map(i=>i.streamId));this.objectIter=new Wt(t.suiClient,r)}current=0;objectIter;static async newIncomingQuery(t){let e=_c(t.query),n=await t.globals.walletAddress(),r=(await t.globals.backend.getIncomingStreams(n,e)).filter(s=>tn(s.recipient)===tn(n)),i=Br(r);return new a(t.globals,n,i,t.query)}static async newOutgoingQuery(t){let e=Rc(t.query),n=await t.globals.walletAddress(),o=await t.globals.backend.getOutgoingStreams(n,e),r=Br(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 Oc(this.globals,t[0].streamId,this.objectIter);return this.current++,Nr(e,this.query)?e:this.doNextRequest()}if(t.length>1){let e=await Pc(this.globals,t.map(n=>n.streamId),this.objectIter);return this.current++,Dc(e,this.query)?e:this.doNextRequest()}throw new O("Stream group with no stream")}};function Br(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)=>jr.fromISO(n[0].createDate).toMillis()-jr.fromISO(e[0].createDate).toMillis())}function Nr(a,t){if(t===void 0)return!0;let e=Ac(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 Ac(a,t){return t===void 0?!0:Array.isArray(t)?t.includes(a.progress.status):a.progress.status===t}function Dc(a,t){if(!t)return!0;let e=!1;return a.streams.forEach(n=>{Nr(n,t)&&(e=!0)}),e}async function Oc(a,t,e){let n=await Mr(e,t);return ot.fromObjectData(a,t,n)}async function Pc(a,t,e){let n=[];for(;n.length<t.length;){let o=await Mr(e,t[n.length]);n.push(o)}return Ze.newFromObjectResponse(a,t,n)}async function Mr(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 _c(a){return{status:po(a?.status),coinType:Er(a?.coinType),sender:Wr(a?.sender)}}function Rc(a){return{status:po(a?.status),coinType:Er(a?.coinType),recipient:Wr(a?.recipient)}}function po(a){return a===void 0||a.length===0?"all":Array.isArray(a)?a.reduce((t,e)=>{let n=po(e);return!t||t===n?n:"all"},void 0):jc(a)}function jc(a){switch(a){case"STREAMING":case"STREAMED":case"CANCELED":return"active";case"COMPLETED":case"SETTLED":return"inactive";default:throw new A("Unknown stream filtered status")}}function Er(a){if(a)return Array.isArray(a)?a.length!==0?a.map(t=>Rr(t)):void 0:Rr(a)}function Wr(a){if(a)return Array.isArray(a)?a.length!==0?a.map(t=>tn(t)):void 0:tn(a)}var mo=class{constructor(t){this.msafe=t}get type(){return"msafe"}async address(){return this.msafe.address()}async requestCoins(t){return this.msafe.requestCoins(t)}},an=class{constructor(t){this.account=t}async address(){return this.account.address}},fo=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(qe(t.coinType,Bc))return{primaryCoin:Qe};if(t.amount<=0)throw new A("Invalid coin request","coinAmount",t.amount);let e=await Dr(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)}}},on=class{globals;helper;constructor(t,e){this.globals=St.new(t,e),this.helper=new Ye(this.globals)}connectSingleWallet(t){let e=new fo(t,this.globals.suiClient);this.globals.connectWallet(e)}connectMSafeAccount(t){let e=new mo(t);this.globals.connectWallet(e)}async createStream(t){return this.builder().createStreams(t)}async getStream(t){return ot.new(this.globals,t)}async getIncomingStreams(t,e=10){return Lt.newIncoming({globals:this.globals,query:t,pageSize:e})}async getOutgoingStreams(t,e=10){return Lt.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=>Nc(n))}async getRecipientsForStreamFilter(t){let e=await this.wallet.address();return(await this.globals.backend.getAllRecipients(e,t)).map(o=>Lr(o))}async getCreatorsForStreamFilter(t){let e=await this.wallet.address();return(await this.globals.backend.getAllSenders(e,t)).map(o=>Lr(o))}get wallet(){return this.globals.wallet}builder(){return new Ct(this.globals)}};var $=class extends g{application="mpay";getClient(t,e){let n=new on(t==="sui:mainnet"?"prod":"dev");return n.connectSingleWallet(new an(e)),n}};var Ut=class extends ${constructor(e){super(e);this.data=e}txType=Ec.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 Wc}from"@msafe/sui3-utils";var Ft=class extends ${constructor(e){super(e);this.data=e}txType=Wc.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 Lc}from"@msafe/sui3-utils";var $t=class extends ${constructor(e){super(e);this.data=e}txType=Lc.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 Uc}from"@msafe/sui3-utils";var qt=class extends ${constructor(e){super(e);this.data=e}txType=Uc.Stream;txSubType="CreateStream";async build(e){let{network:n,account:o}=e;return this.getClient(n,o).createStream(this.data)}};import{bcs as Ur}from"@mysten/sui.js/bcs";import{normalizeStructTag as Fc,normalizeSuiAddress as Qt}from"@mysten/sui.js/utils";var vt=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 Ur.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 Ur.de(e,new Uint8Array(n))}typeArg(t){return Fc(this.moveCall.typeArguments[t])}txArg(t){return this.moveCall.arguments[t]}};var rn=class{constructor(t,e){this.globals=t;this.txb=e}decode(){let t=this.decodeCreateStreamInfo(),e=this.createStreamHelper().calculateCreateStreamFees(t);return{type:"CreateStream",info:t,fees:e}}decodeCreateStreamInfo(){let e=this.createStreamTransactions().map(n=>this.getCreationInfoFromMoveCall(n));return this.aggregateGroupStreamInfo(e)}createStreamTransactions(){let t=this.transactions.filter(e=>e.kind==="MoveCall"&&at(e.target,this.contract.createStreamTarget));if(t.length===0)throw new O("No create stream transactions");return t.map(e=>new vt(e,this.txb))}getCreationInfoFromMoveCall(t){let e=t.decodeInputString(4),{name:n,groupId:o}=Bt(e),r=t.decodeInputAddress(5),i=t.decodeInputU64(6),s=t.decodeInputU64(7),c=t.decodeInputU64(8),d=t.decodeInputU64(9),l=t.decodeInputU64(10),u=t.decodeInputBool(11),p=t.typeArg(0);return{name:n,groupId:o,recipient:r,timeStart:i,cliff:s,epochInterval:c,totalEpoch:d,amountPerEpoch:l,cancelable:u,coinType:p}}aggregateGroupStreamInfo(t){if(new Set(t.map(o=>JSON.stringify({name:o.name,groupId:o.groupId,timeStart:String(o.timeStart),epochInterval:String(o.epochInterval),totalEpoch:String(o.totalEpoch),cancelable:o.cancelable,coinType:o.coinType}))).size!==1)throw new A("Stream group not have common info");let n=t.map(o=>({address:o.recipient,amountPerStep:o.amountPerEpoch,cliffAmount:o.cliff}));return{name:t[0].name,coinType:t[0].coinType,recipients:n,interval:t[0].epochInterval,steps:t[0].totalEpoch,startTimeMs:t[0].timeStart,cancelable:t[0].cancelable}}mergeCoinTransactions(){return this.transactions.filter(t=>t.kind==="MergeCoins")}get transactions(){return this.txb.blockData.transactions}get contract(){return new G(this.globals.envConfig.contract,this.globals)}get feeContract(){return new It(this.globals.envConfig.contract,this.globals)}createStreamHelper(){return new bt(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 sn=class{constructor(t,e){this.globals=t;this.txb=e;this.contract=new G(t.envConfig.contract,t)}contract;decode(){if(this.isCreateStreamTransaction())return this.decodeCreateStreamTransaction();if(this.isClaimByProxyTransaction())return this.decodeClaimByProxyTransaction();if(this.isSetAutoClaimTransaction())return this.decodeSetAutoClaimTransaction();if(this.isCancelStreamTransaction())return this.decodeCancelStreamTransaction();if(this.isClaimStreamTransaction())return this.decodeClaimTransaction();throw new Error("Unknown stream transaction type")}get transactions(){return this.txb.blockData.transactions}isCreateStreamTransaction(){return this.transactions.findIndex(e=>e.kind==="MoveCall"&&at(e.target,this.contract.createStreamTarget))!==-1}isSetAutoClaimTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&&at(this.transactions[0].target,this.contract.setAutoClaimTarget)}isCancelStreamTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&&at(this.transactions[0].target,this.contract.cancelStreamTarget)}isClaimStreamTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&&at(this.transactions[0].target,this.contract.claimStreamTarget)}isClaimByProxyTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&&at(this.transactions[0].target,this.contract.claimStreamByProxyTarget)}decodeCreateStreamTransaction(){return new rn(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 vt(t,this.txb)}};import{TransactionType as $c}from"@msafe/sui3-utils";var Vt=class extends ${constructor(e){super(e);this.data=e}txType=$c.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 cn=class{application="mpay";supportSDK="@mysten/sui.js";async deserialize(t){let{network:e,transactionBlock:n}=t,o=St.new(e==="sui:mainnet"?"prod":"dev"),i=new sn(o,n).decode(),s;switch(i.type){case"CreateStream":s=new qt(i.info);break;case"SetAutoClaim":s=new Vt({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 Ut({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 qt(e);break;case"Claim":n=new $t(e);break;case"ClaimByProxy":n=new Ft(e);break;case"SetAutoClaim":n=new Vt(e);break;case"Cancel":n=new Ut(e);break;default:throw new Error("not implemented")}return n.build({...t})}};import{TransactionDefaultApplication as Kc,TransactionSubTypes as bo}from"@msafe/sui3-utils";import{buildCoinTransferTxb as qc}from"@msafe/sui3-utils";var ln=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o}=e;return qc(n,this.data,o.address)}static fromData(e){return new a(e)}};import{buildObjectTransferTxb as Qc}from"@msafe/sui3-utils";var dn=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o}=e;return Qc(n,this.data,o.address)}static fromData(e){return new a(e)}};import{isSameAddress as Vc}from"@msafe/sui3-utils";import{TransactionBlock as Hc}from"@mysten/sui.js/transactions";var un=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{account:n}=e,o=Hc.from(this.data.content);if(!Vc(o.blockData.sender,n.address))throw new Error("Invalid sender address");return o}static fromData(e){return new a(e)}};var pn=class{application="msafe-core";supportSDK="@mysten/sui.js";constructor(){this.application=Kc}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 bo.assets.coin.send:o=ln.fromData(t.intentionData);break;case bo.assets.object.send:o=dn.fromData(t.intentionData);break;case bo.others.plain:o=un.fromData(t.intentionData);break;default:throw new Error("not implemented")}return o.build({suiClient:e,account:n})}};import{TransactionType as el}from"@msafe/sui3-utils";var Fr=!1,Ht={ProtocolPackage:"0xc6374c7da60746002bfee93014aeb607e023b2d6b25c9e55a152b826dbc8c1ce",StorageId:"0xbb4e2f4b6205c2e2a2db47aeb4f830796ec7c005f88537ee775986639bc442fe",Incentive:"0xaaf735bf83ff564e1b219a0d644de894ef5bdc4b2250b126b2a46dd002331821",IncentiveV2:"0xf87a8acb8b81d14307894d12595541a73f19933f88e1326d5be349c7a6f7559c",gasBudget:5e7,PriceOracle:"0x1568865ed9a0b5ec414220e8f79b3d04c77acc82358f6e5ae4635687392ffbef",ReserveParentId:"0xe6d4c6610b86ce7735ea754596d71d72d10c7980b5052fc3c8cdf8d09fea9b4b",pool:{sui:{name:"SUI",assetId:0,poolId:"0x96df0fce3c471489f4debaaa762cf960b3d97820bd1f3f025ff8190730e958c5",fondPoolId:"0xf975bc2d4cca10e3ace8887e20afd77b46c383b4465eac694c4688344955dea4",type:"0x2::sui::SUI",coinType:"sui",reserveObjectId:"0xab644b5fd11aa11e930d1c7bc903ef609a9feaf9ffe1b23532ad8441854fbfaf",borrowBalanceParentId:"0xe7ff0daa9d090727210abe6a8b6c0c5cd483f3692a10610386e4dc9c57871ba7",supplyBalanceParentId:"0x589c83af4b035a3bc64c40d9011397b539b97ea47edf7be8f33d643606bf96f8"},wusdc:{name:"wUSDC",assetId:1,coinType:"wusdc",poolId:"0xa02a98f9c88db51c6f5efaaf2261c81f34dd56d86073387e0ef1805ca22e39c8",type:"0x5d4b302506645c37ff133b98c4b50a5ae14841659738d6d733d59d0d217a93bf::coin::COIN",reserveObjectId:"0xeb3903f7748ace73429bd52a70fff278aac1725d3b58afa781f25ce3450ac203",borrowBalanceParentId:"0x8a3aaa817a811131c624658f6e77cba04ab5829293d2c49c1a9cce8ac9c8dec4",supplyBalanceParentId:"0x8d0a4467806458052d577c8cd2be6031e972f2b8f5f77fce98aa12cd85330da9"},usdt:{name:"USDT",coinType:"usdt",assetId:2,poolId:"0x0e060c3b5b8de00fb50511b7a45188c8e34b6995c01f69d98ea5a466fe10d103",type:"0xc060006111016b8a020ad5b33834984a437aaa7d3c74c18e09a95d48aceab08c::coin::COIN",reserveObjectId:"0xb8c5eab02a0202f638958cc79a69a2d30055565caad1684b3c8bbca3bddcb322",borrowBalanceParentId:"0xc14d8292a7d69ae31164bafab7ca8a5bfda11f998540fe976a674ed0673e448f",supplyBalanceParentId:"0x7e2a49ff9d2edd875f82b76a9b21e2a5a098e7130abfd510a203b6ea08ab9257"},weth:{name:"WETH",coinType:"weth",assetId:3,poolId:"0x71b9f6e822c48ce827bceadce82201d6a7559f7b0350ed1daa1dc2ba3ac41b56",type:"0xaf8cd5edc19c4512f4259f0bee101a40d41ebed738ade5874359610ef8eeced5::coin::COIN",reserveObjectId:"0xafecf4b57899d377cc8c9de75854c68925d9f512d0c47150ca52a0d3a442b735",borrowBalanceParentId:"0x7568d06a1b6ffc416a36c82791e3daf0e621cf19d4a2724fc6f74842661b6323",supplyBalanceParentId:"0xa668905b1ad445a3159b4d29b1181c4a62d864861b463dd9106cc0d97ffe8f7f"},cetus:{name:"CETUS",coinType:"cetus",assetId:4,poolId:"0x3c376f857ec4247b8ee456c1db19e9c74e0154d4876915e54221b5052d5b1e2e",type:"0x06864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b::cetus::CETUS",reserveObjectId:"0x66a807c06212537fe46aa6719a00e4fa1e85a932d0b53ce7c4b1041983645133",borrowBalanceParentId:"0x4c3da45ffff6432b4592a39cdb3ce12f4a28034cbcb804bb071facc81fdd923d",supplyBalanceParentId:"0x6adc72faf2a9a15a583c9fb04f457c6a5f0b456bc9b4832413a131dfd4faddae"},voloSui:{name:"VoloSui",coinType:"voloSui",assetId:5,poolId:"0x9790c2c272e15b6bf9b341eb531ef16bcc8ed2b20dfda25d060bf47f5dd88d01",fondPoolId:"0xe2b5ada45273676e0da8ae10f8fe079a7cec3d0f59187d3d20b1549c275b07ea",type:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55::cert::CERT",reserveObjectId:"0xd4fd7e094af9819b06ea3136c13a6ae8da184016b78cf19773ac26d2095793e2",borrowBalanceParentId:"0x8fa5eccbca2c4ba9aae3b87fd44aa75aa5f5b41ea2d9be4d5321379384974984",supplyBalanceParentId:"0xe6457d247b6661b1cac123351998f88f3e724ff6e9ea542127b5dcb3176b3841"},haSui:{name:"HaedalSui",coinType:"haSui",assetId:6,poolId:"0x6fd9cb6ebd76bc80340a9443d72ea0ae282ee20e2fd7544f6ffcd2c070d9557a",fondPoolId:"0xa20e18085ce04be8aa722fbe85423f1ad6b1ae3b1be81ffac00a30f1d6d6ab51",type:"0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d::hasui::HASUI",reserveObjectId:"0x0c9f7a6ca561dc566bd75744bcc71a6af1dc3caf7bd32c099cd640bb5f3bb0e3",borrowBalanceParentId:"0x01f36898e020be6c3423e5c95d9f348868813cd4d0be39b0c8df9d8de4722b00",supplyBalanceParentId:"0x278b8e3d09c3548c60c51ed2f8eed281876ea58c392f71b7ff650cc9286d095b"},navx:{name:"NAVX",coinType:"navx",assetId:7,poolId:"0xc0e02e7a245e855dd365422faf76f87d9f5b2148a26d48dda6e8253c3fe9fa60",fondPoolId:"0x9dae0cf104a193217904f88a48ce2cf0221e8cd9073878edd05101d6b771fa09",type:"0xa99b8952d4f7d947ea77fe0ecdcc9e5fc0bcab2841d6e2a5aa00c3044e5544b5::navx::NAVX",reserveObjectId:"0x2e13b2f1f714c0c5fa72264f147ef7632b48ec2501f810c07df3ccb59d6fdc81",borrowBalanceParentId:"0xa5bf13075aa400cbdd4690a617c5f008e1fae0511dcd4f7121f09817df6c8d8b",supplyBalanceParentId:"0x59dedca8dc44e8df50b190f8b5fe673098c1273ac6168c0a4addf3613afcdee5"},wbtc:{name:"WBTC",coinType:"wbtc",assetId:8,poolId:"0xd162cbe40f8829ce71c9b3d3bf3a83859689a79fa220b23d70dc0300b777ae6e",type:"0x027792d9fed7f9844eb4839566001bb6f6cb4804f66aa2da6fe1ee242d896881::coin::COIN",reserveObjectId:"0x8b4d81f004e4e9faf4540951a896b6d96e42598a270e6375f598b99742db767e",borrowBalanceParentId:"0x55e1f3c9e6e5cf9fff563bdd61db07a3826458c56ef72c455e049ab3b1b0e99c",supplyBalanceParentId:"0x821e505a0091b089edba94deaa14c2f2230d026bbaa7b85680554441aad447e0"},ausd:{name:"AUSD",coinType:"ausd",assetId:9,poolId:"0xc9208c1e75f990b2c814fa3a45f1bf0e85bb78404cfdb2ae6bb97de58bb30932",type:"0x2053d08c1e2bd02791056171aab0fd12bd7cd7efad2ab8f6b9c8902f14df2ff2::ausd::AUSD",reserveObjectId:"0x918889c6a9d9b93108531d4d59a4ebb9cc4d41689798ffc1d4aed6e1ae816ec0",borrowBalanceParentId:"0x551300b9441c9a3a16ca1d7972c1dbb4715e15004ccd5f001b2c2eee22fd92c1",supplyBalanceParentId:"0xe151af690355de8be1c0281fbd0d483c099ea51920a57c4bf8c9666fd36808fd"},nusdc:{name:"USDC",assetId:10,coinType:"nusdc",poolId:"0xa3582097b4c57630046c0c49a88bfc6b202a3ec0a9db5597c31765f7563755a8",type:"0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC",reserveObjectId:"0x4c8a2c72a22ae8da803a8519798d312c86e74a9e0d6ec0eec2bfcf7e4b3fef5e",borrowBalanceParentId:"0xb0b0c7470e96cabbb4f1e8d06bef2fbea65f4dbac52afae8635d9286b1ea9a09",supplyBalanceParentId:"0x08b5ce8574ac3bc9327e66ad5decd34d07ee798f724ad01058e8855ac9acb605"},eth:{name:"ETH",assetId:11,coinType:"eth",poolId:"0x78ba01c21d8301be15690d3c30dc9f111871e38cfb0b2dd4b70cc6052fba41bb",type:"0xd0e89b2af5e4910726fbcd8b8dd37bb79b29e5f83f7491bca830e94f7f226d29::eth::ETH",reserveObjectId:"0x376faea6dfbffab9ea808474cb751d91222b6d664f38c0f1d23de442a8edb1ce",borrowBalanceParentId:"0xf0c6ce5cfaee96073876a5fab7426043f3a798b79502c4caeb6d9772cd35af1f",supplyBalanceParentId:"0xc0a0cb43620eb8a84d5a4a50a85650e7fa7ba81e660f9cc2863404fd84591d4b"},usdy:{name:"USDY",assetId:12,coinType:"usdy",poolId:"0x4b6253a9f8cf7f5d31e6d04aed4046b9e325a1681d34e0eff11a8441525d4563",type:"0x960b531667636f39e85867775f52f6b1f220a058c4de786905bdf761e06a56bb::usdy::USDY",reserveObjectId:"",borrowBalanceParentId:"",supplyBalanceParentId:""}},borrowFee:.003,borrowFeeAddress:"0x70b9b10704263cf53392849e33b1f5fd16005869b4198ed5524836bad1234ea2"};async function go(){if(!Fr)try{let a=await fetch("https://open-api.naviprotocol.io/api/msafe").then(r=>r.json()),{packageId:t,borrowFee:e,borrowFeeAddress:n,pool:o}=a;t&&(Ht.ProtocolPackage=t),e&&(Ht.borrowFee=e),n&&(Ht.borrowFeeAddress=n),o&&(Ht.pool=o),Fr=!0}catch(a){console.error(a.message)}}var y=Ht;import{TransactionType as Kt}from"@msafe/sui3-utils";import{bcs as $r}from"@mysten/sui.js/bcs";import{normalizeStructTag as zc,normalizeSuiAddress as Gt}from"@mysten/sui.js/utils";var mn=class{constructor(t){this.txb=t}decode(){if(console.log("txb",this.txb),this.isClaimRewardTransaction())return this.decodeClaimReward();if(this.isEntryBorrowTransaction())return this.decodeEntryBorrow();if(this.isEntryBorrowWithFeeTransaction())return this.decodeEntryBorrow();if(this.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(`${y.ProtocolPackage}::incentive_v2::claim_reward`)}isEntryBorrowTransaction(){return!!this.getMoveCallTransaction(`${y.ProtocolPackage}::incentive_v2::entry_borrow`)}isEntryBorrowWithFeeTransaction(){return!!this.getMoveCallTransaction(`${y.ProtocolPackage}::incentive_v2::borrow`)}isEntryDepositTransaction(){return!!this.getMoveCallTransaction(`${y.ProtocolPackage}::incentive_v2::entry_deposit`)}isEntryRepayTransaction(){return!!this.getMoveCallTransaction(`${y.ProtocolPackage}::incentive_v2::entry_repay`)}isEntryWithdrawTransaction(){return!!this.getMoveCallTransaction(`${y.ProtocolPackage}::incentive_v2::entry_withdraw`)}findPoolByAssetId(t){let e=Object.values(y.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===`${y.ProtocolPackage}::incentive_v2::claim_reward`){let n=new fn(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:Kt.Other,type:"ClaimReward",intentionData:{claims:t}}}decodeEntryBorrow(){let t=this.helper.decodeInputU8(4),e=this.helper.decodeInputU64(5),n=this.findPoolByAssetId(t);return{txType:Kt.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:Kt.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:Kt.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:Kt.Other,type:"EntryWithdraw",intentionData:{amount:e,coinType:n.coinType}}}get helper(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(y.ProtocolPackage));return new fn(t,this.txb)}},fn=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 Gt(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 $r.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 Gt(t.value.Object.ImmOrOwned.objectId)}return Gt(t.value)}static getSharedObjectId(t){if(t.type!=="object")throw new Error(`not object argument: ${JSON.stringify(t)}`);if(typeof t.value!="object")return Gt(t.value);if(!("Object"in t.value)||!("Shared"in t.value.Object))throw new Error("not Shared");return Gt(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 $r.de(e,new Uint8Array(n))}typeArg(t){return zc(this.moveCall.typeArguments[t])}txArg(t){return this.moveCall.arguments[t]}};import{TransactionBlock as Jc}from"@mysten/sui.js/transactions";function ho(a,t,e,n){return a.moveCall({target:`${y.ProtocolPackage}::incentive_v2::entry_deposit`,arguments:[a.object("0x06"),a.object(y.StorageId),a.object(t.poolId),a.pure(t.assetId),e,a.pure(n),a.object(y.Incentive),a.object(y.IncentiveV2)],typeArguments:[t.type]}),a}function qr(a,t,e){return a.moveCall({target:`${y.ProtocolPackage}::incentive_v2::entry_withdraw`,arguments:[a.object("0x06"),a.object(y.PriceOracle),a.object(y.StorageId),a.object(t.poolId),a.pure(t.assetId),a.pure(e),a.object(y.Incentive),a.object(y.IncentiveV2)],typeArguments:[t.type]}),a}function Qr(a,t,e,n){let o=a.moveCall({target:`${y.ProtocolPackage}::incentive_v2::borrow`,arguments:[a.object("0x06"),a.object(y.PriceOracle),a.object(y.StorageId),a.object(t.poolId),a.pure(t.assetId),a.pure(e),a.object(y.IncentiveV2)],typeArguments:[t.type]}),[r]=a.moveCall({target:"0x02::coin::from_balance",typeArguments:[t.type],arguments:[o]});if(y.borrowFee>0){let[i]=a.splitCoins(r,[a.pure(Math.floor(e*y.borrowFee))]);a.transferObjects([r],a.pure(n)),a.transferObjects([i],a.pure(y.borrowFeeAddress))}else a.transferObjects([r],a.pure(n));return a}function yo(a,t,e,n){return a.moveCall({target:`${y.ProtocolPackage}::incentive_v2::entry_repay`,arguments:[a.object("0x06"),a.object(y.PriceOracle),a.object(y.StorageId),a.object(t.poolId),a.pure(t.assetId),e,a.pure(n),a.object(y.IncentiveV2)],typeArguments:[t.type]}),a}function Vr(a,t,e,n,o){return a.moveCall({target:`${y.ProtocolPackage}::incentive_v2::claim_reward`,arguments:[a.object("0x06"),a.object(y.IncentiveV2),a.object(e),a.object(y.StorageId),a.pure(t),a.pure(n)],typeArguments:o}),a}var bn=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(){let{claims:e}=this.data,n=new Jc;return e.forEach(o=>{let{assetId:r,poolId:i,option:s,typeArguments:c}=o;Vr(n,r,i,s,c)}),n}static fromData(e){return new a(e)}};import{TransactionBlock as Xc}from"@mysten/sui.js/transactions";var gn=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{coinType:n,amount:o}=this.data,r=new Xc;console.log("build",this.data);let i=y.pool[n];if(!i)throw new Error(`${n} not support, please use ${Object.keys(y.pool).join(", ")}.`);return Qr(r,i,o,e.account.address)}static fromData(e){return new a(e)}};import{TransactionBlock as Yc}from"@mysten/sui.js/transactions";async function hn(a,t,e){let n=await a.getCoins({owner:t,coinType:e});return console.log("getTokenObjs",t,n),n}var yn=class a extends g{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 Yc;if(console.log("build",this.data),r==="sui"){let[u]=s.splitCoins(s.gas,[i]);return ho(s,y.pool.sui,u,i)}let c=y.pool[r];if(!c)throw new Error(`${r} not support, please use ${Object.keys(y.pool).join(", ")}.`);let d=await hn(n,o.address,c.type);if(!d.data[0])throw new Error(`Insufficient balance for ${c.name} Token`);let l=d.data[0].coinObjectId;if(d.data.length>=2){let u=1;for(;u<d.data.length;)s.mergeCoins(l,[d.data[u].coinObjectId]),u++}return ho(s,c,s.object(l),i)}static fromData(e){return new a(e)}};import{TransactionBlock as Zc}from"@mysten/sui.js/transactions";var Sn=class a extends g{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 Zc;if(console.log("build",this.data),r==="sui"){let[u]=s.splitCoins(s.gas,[i]);return yo(s,y.pool.sui,u,i)}let c=y.pool[r];if(!c)throw new Error(`${r} not support, please use ${Object.keys(y.pool).join(", ")}.`);let d=await hn(n,o.address,c.type);if(!d.data[0])throw new Error(`Insufficient balance for ${c.name} Token`);let l=d.data[0].coinObjectId;if(d.data.length>=2){let u=1;for(;u<d.data.length;)s.mergeCoins(l,[d.data[u].coinObjectId]),u++}return yo(s,c,s.object(l),i)}static fromData(e){return new a(e)}};import{TransactionBlock as tl}from"@mysten/sui.js/transactions";var wn=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(){let{coinType:e,amount:n}=this.data,o=new tl;console.log("build",this.data);let r=y.pool[e];if(!r)throw new Error(`${e} not support, please use ${Object.keys(y.pool).join(", ")}.`);return qr(o,r,n)}static fromData(e){return new a(e)}};var In=class{application="navi";supportSDK="@mysten/sui.js";async deserialize(t){await go();let{transactionBlock:e}=t,o=new mn(e).decode();return{txType:el.Other,txSubType:o.type,intentionData:o.intentionData}}async build(t){let{suiClient:e,account:n}=t,o;switch(await go(),t.txSubType){case"EntryDeposit":o=yn.fromData(t.intentionData);break;case"EntryBorrow":o=gn.fromData(t.intentionData);break;case"EntryRepay":o=Sn.fromData(t.intentionData);break;case"EntryWithdraw":o=wn.fromData(t.intentionData);break;case"ClaimReward":o=bn.fromData(t.intentionData);break;default:throw new Error("not implemented")}return o.build({suiClient:e,account:n})}};import{TransactionSubTypes as nl,TransactionType as Hr}from"@msafe/sui3-utils";import{fromHEX as al,toHEX as ol}from"@mysten/bcs";import{Transaction as rl}from"@mysten/sui/transactions";import il from"sort-keys-recursive";var Kr="msafe-plain-tx",Gr=nl.others.plain,So=class a{constructor(t){this.data=t}application=Kr;txType=Hr.Other;txSubType=Gr;serialize(){return JSON.stringify(il(this.data))}async build(t){return rl.from(al(this.data.content))}static fromData(t){return new a(t)}},Cn=class{application;supportSDK="@mysten/sui";constructor(){this.application=Kr}async deserialize(t){let{transaction:e}=t,n=await e.build({client:t.suiClient});return{txType:Hr.Other,txSubType:Gr,intentionData:{content:ol(n)}}}async build(t){let{account:e}=t,o=await So.fromData(t.intentionData).build({suiClient:t.suiClient,network:t.network,account:t.account}),i=await t.suiClient.devInspectTransactionBlock({transactionBlock:o,sender:e.address});if(!(i.effects.status.status==="success"))throw new Error(i.effects.status.error);return o}};import{SuiClient as zr}from"@mysten/sui/client";import{Transaction as sl}from"@mysten/sui/transactions";import{SuiClient as wo}from"@mysten/sui.js/client";import{TransactionBlock as cl}from"@mysten/sui.js/transactions";var Tn=class a{apps;constructor(){this.apps=new Map}static fromHelpers(t){let e=new a;for(let n=0;n<t.length;n++){let o=t[n];switch(o.supportSDK){case"@mysten/sui.js":e.addLegacyHelper(o);break;case"@mysten/sui":e.addHelper(o);break;default:throw new Error(`${o.application}: ${o.supportSDK} SDK not supported`)}}return e}addLegacyHelper(t){this.apps.set(t.application,new Co(t))}addHelper(t){this.apps.set(t.application,new Io(t))}getAppHelper(t){let e=this.apps.get(t);if(!e)throw new Error(`${t} not registered`);return e}},Io=class{constructor(t){this.helper=t}async deserialize(t){let e=new zr({url:t.clientUrl}),n=new wo({url:t.clientUrl}),o=await t.transactionBlock.build({client:n}),r=sl.from(o);return this.helper.deserialize({...t,suiClient:e,transaction:r})}async build(t){let e=new zr({url:t.clientUrl}),n=await this.helper.build({...t,suiClient:e});n.setSender(t.account.address);let o=await n.build({client:e});return cl.from(o)}},Co=class{constructor(t){this.helper=t}async deserialize(t){let e=new wo({url:t.clientUrl});return this.helper.deserialize({...t,transactionBlock:t.transactionBlock,suiClient:e})}async build(t){let e=new wo({url:t.clientUrl});return this.helper.build({...t,suiClient:e})}};import{TransactionType as Ml}from"@msafe/sui3-utils";import{TransactionType as P}from"@msafe/sui3-utils";var rt=class{constructor(t,e){this.txb=t;this.scallop=e}scallop;get coreId(){return{protocolPkg:this.scallop.address.get("core.packages.protocol.id"),market:this.scallop.address.get("core.market"),version:this.scallop.address.get("core.version"),coinDecimalsRegistry:this.scallop.address.get("core.coinDecimalsRegistry"),xOracle:this.scallop.address.get("core.oracles.xOracle"),spoolPkg:this.scallop.address.get("spool.id"),borrowIncentivePkg:this.scallop.address.get("borrowIncentive.id"),veScaPkgId:this.scallop.address.get("vesca.id"),scoin:this.scallop.address.get("scoin.id"),referral:this.scallop.address.get("referral.id")}}get transactions(){return this.txb.blockData.transactions}get inputTransaction(){return this.txb.blockData.inputs}getMoveCallTransaction(t){return this.transactions.find(e=>e.kind==="MoveCall"&&e.target===t)}};var Jr="https://sui.apis.scallop.io";var Xr="66f8e7ed9bb9e07fdfb86bbb",kn="0xefe8b36d5b2e43728cc323298626b83177803521d195cfb11e15b910e892fddf";var it="0x7016aae72cfc67f2fadf55769c0a7dd54291a583b63051a5ed71081cce836ac6::sca::SCA",st="0xc63072e7f5f4983a2efaf5bdba1480d5e7d74d57948e1c7cc436f8e22cbeb410",z=["weth","wbtc","wusdc","wusdt","sui","wapt","wsol","cetus","afsui","hasui","vsui","sca","usdc"],vn=["weth","wbtc","wusdc","wusdt","sui","wapt","wsol","cetus","afsui","hasui","vsui","sca","usdc"],ct=["sweth","ssui","swusdc","swusdt","scetus","safsui","shasui","svsui","susdc"],J=["ssui","swusdc","swusdt","safsui","shasui","svsui","sweth","ssca","scetus","swbtc","swsol","susdc"];var Yr=["sui"],lt=["sui","wusdc","wusdt","afsui","hasui","vsui","weth","sca","wbtc","wsol","usdc"];var Zr={weth:8,wbtc:8,wusdc:6,usdc:6,wusdt:6,sui:9,wapt:8,wsol:8,sca:9,cetus:9,afsui:9,hasui:9,vsui:9,sweth:8,swbtc:8,susdc:6,swusdt:6,swusdc:6,ssui:9,swapt:8,swsol:8,scetus:9,safsui:9,shasui:9,svsui:9,ssca:9};var xn={sweth:"sui",ssui:"sui",swusdc:"sui",swusdt:"sui",scetus:"sui",safsui:"sui",shasui:"sui",svsui:"sui",susdc:"sui"},ti={sui:["sui","sca"],wusdc:["sui","sca"],wusdt:["sui","sca"],afsui:["sui","sca"],hasui:["sui","sca"],vsui:["sui","sca"],sca:["sui","sca"],weth:["sui","sca"],wbtc:["sui","sca"],wsol:["sui","sca"],usdc:["sui","sca"]},ei={sui:"0x0000000000000000000000000000000000000000000000000000000000000002",weth:"0xaf8cd5edc19c4512f4259f0bee101a40d41ebed738ade5874359610ef8eeced5",wbtc:"0x027792d9fed7f9844eb4839566001bb6f6cb4804f66aa2da6fe1ee242d896881",wusdc:"0x5d4b302506645c37ff133b98c4b50a5ae14841659738d6d733d59d0d217a93bf",wusdt:"0xc060006111016b8a020ad5b33834984a437aaa7d3c74c18e09a95d48aceab08c",wapt:"0x3a5143bb1196e3bcdfab6203d1683ae29edd26294fc8bfeafe4aaa9d2704df37",wsol:"0xb7844e289a8410e50fb3ca48d69eb9cf29e27d223ef90353fe1bd8e27ff8f3f8",cetus:"0x06864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b",afsui:"0xf325ce1300e8dac124071d3152c5c5ee6174914f8bc2161e88329cf579246efc",hasui:"0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d",vsui:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55",sca:"0x7016aae72cfc67f2fadf55769c0a7dd54291a583b63051a5ed71081cce836ac6",usdc:"0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7"},L={weth:"0xaf8cd5edc19c4512f4259f0bee101a40d41ebed738ade5874359610ef8eeced5",wbtc:"0x027792d9fed7f9844eb4839566001bb6f6cb4804f66aa2da6fe1ee242d896881",wusdc:"0x5d4b302506645c37ff133b98c4b50a5ae14841659738d6d733d59d0d217a93bf",wusdt:"0xc060006111016b8a020ad5b33834984a437aaa7d3c74c18e09a95d48aceab08c",wapt:"0x3a5143bb1196e3bcdfab6203d1683ae29edd26294fc8bfeafe4aaa9d2704df37",wsol:"0xb7844e289a8410e50fb3ca48d69eb9cf29e27d223ef90353fe1bd8e27ff8f3f8"},To={vsui:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55"},ni={ssui:"0xaafc4f740de0dd0dde642a31148fb94517087052f19afb0f7bed1dc41a50c77b::scallop_sui::SCALLOP_SUI",scetus:"0xea346ce428f91ab007210443efcea5f5cdbbb3aae7e9affc0ca93f9203c31f0c::scallop_cetus::SCALLOP_CETUS",ssca:"0x5ca17430c1d046fae9edeaa8fd76c7b4193a00d764a0ecfa9418d733ad27bc1e::scallop_sca::SCALLOP_SCA",swusdc:"0xad4d71551d31092230db1fd482008ea42867dbf27b286e9c70a79d2a6191d58d::scallop_wormhole_usdc::SCALLOP_WORMHOLE_USDC",swusdt:"0xe6e5a012ec20a49a3d1d57bd2b67140b96cd4d3400b9d79e541f7bdbab661f95::scallop_wormhole_usdt::SCALLOP_WORMHOLE_USDT",sweth:"0x67540ceb850d418679e69f1fb6b2093d6df78a2a699ffc733f7646096d552e9b::scallop_wormhole_eth::SCALLOP_WORMHOLE_ETH",safsui:"0x00671b1fa2a124f5be8bdae8b91ee711462c5d9e31bda232e70fd9607b523c88::scallop_af_sui::SCALLOP_AF_SUI",shasui:"0x9a2376943f7d22f88087c259c5889925f332ca4347e669dc37d54c2bf651af3c::scallop_ha_sui::SCALLOP_HA_SUI",svsui:"0xe1a1cc6bcf0001a015eab84bcc6713393ce20535f55b8b6f35c142e057a25fbe::scallop_v_sui::SCALLOP_V_SUI",swbtc:"0x2cf76a9cf5d3337961d1154283234f94da2dcff18544dfe5cbdef65f319591b5::scallop_wormhole_btc::SCALLOP_WORMHOLE_BTC",swsol:"0x1392650f2eca9e3f6ffae3ff89e42a3590d7102b80e2b430f674730bc30d3259::scallop_wormhole_sol::SCALLOP_WORMHOLE_SOL",susdc:"0x854950aa624b1df59fe64e630b2ba7c550642e9342267a33061d59fb31582da5::scallop_usdc::SCALLOP_USDC"};import{bcs as ai}from"@mysten/sui.js/bcs";import{normalizeStructTag as ll,normalizeSuiAddress as zt}from"@mysten/sui.js/utils";var I=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 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]}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 ai.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 ai.de(e,new Uint8Array(n))}typeArg(t){return ll(this.moveCall.typeArguments[t])}txArg(t){return this.moveCall.arguments[t]}};import{bcs as dl}from"@mysten/sui.js/bcs";var _=class{constructor(t,e){this.splitCoin=t;this.txb=e}getAmountInput(){return this.splitCoin.amounts.map(t=>{if(t.kind==="Input")return Number(I.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 dl.de(e,new Uint8Array(n))}return t.value}};var An=class extends rt{decode(){if(this.isMoveAsset())return this.decodeMoveAsset();if(this.isSupplyWithStakeSpoolTransaction())return this.decodeSupplyWithStakeSpool();if(this.isUnstakeAndWithdrawTransaction())return this.decodeUnstakeAndWithdraw();if(this.isStakeSpoolTransaction())return this.decodeStakeSpool();if(this.isDepositCollateralTransaction())return this.decodeDepositCollateral();if(this.isWithdrawCollateralTransaction())return this.decodeWithdrawCollateral();if(this.isWithdrawLendingScoinTransaction())return this.decodeWithdrawLendingScoin();if(this.isWithdrawLendingTransaction())return this.decodeWithdrawLending();if(this.isSupplyLendingTransaction())return this.decodeSupplyLending();if(this.isBorrowWithReferralTransaction())return this.decodeBorrowWithReferral();if(this.isBorrowWithBoostTransaction())return this.decodeBorrowWithBoost();if(this.isBorrowTransaction())return this.decodeBorrow();if(this.isRepayWithBoostTransaction())return this.decodeRepayWithBoost();if(this.isRepayTransaction())return this.decodeRepay();if(this.isUnstakeSpoolTransaction())return this.decodeUnstakeSpool();if(this.isClaimRewardTransaction())return this.decodeClaimReward();if(this.isOpenObligationTransaction())return this.decodeOpenObligation();if(this.isMigrateAndClaim())return this.decodeMigrateAndClaim();if(this.isMigrateScoinTransaction())return this.decodeMigrateScoin()}isMoveAsset(){return!!this.getMoveCallTransaction("0x5857d185897aaff40ae37b2eecc895efc1a9dff1b210c4fb894eabbce4ac2603::slippage_check::check_slippage")}isMigrateScoinTransaction(){return!!this.getMoveCallTransaction(`${this.coreId.scoin}::s_coin_converter::mint_s_coin`)}isSupplyLendingTransaction(){return!!this.getMoveCallTransaction(`${this.coreId.protocolPkg}::mint::mint`)}isSupplyWithStakeSpoolTransaction(){let t=this.getMoveCallTransaction(`${this.coreId.protocolPkg}::mint::mint`),e=this.getMoveCallTransaction(`${this.coreId.spoolPkg}::user::stake`);return!!t&&!!e}isUnstakeAndWithdrawTransaction(){let t=this.getMoveCallTransaction(`${this.coreId.spoolPkg}::user::unstake`),e=this.getMoveCallTransaction(`${this.coreId.protocolPkg}::redeem::redeem`);return!!t&&!!e}isStakeSpoolTransaction(){return!!this.getMoveCallTransaction(`${this.coreId.spoolPkg}::user::stake`)}isWithdrawLendingTransaction(){return!!this.getMoveCallTransaction(`${this.coreId.protocolPkg}::redeem::redeem`)}isWithdrawLendingScoinTransaction(){let t=!!this.getMoveCallTransaction(`${this.coreId.protocolPkg}::redeem::redeem`),e=!!this.getMoveCallTransaction(`${this.coreId.scoin}::s_coin_converter::burn_s_coin`);return!!t&&!!e}isDepositCollateralTransaction(){return!!this.getMoveCallTransaction(`${this.coreId.protocolPkg}::deposit_collateral::deposit_collateral`)}isWithdrawCollateralTransaction(){return!!this.getMoveCallTransaction(`${this.coreId.protocolPkg}::withdraw_collateral::withdraw_collateral`)}isBorrowTransaction(){return!!this.getMoveCallTransaction(`${this.coreId.protocolPkg}::borrow::borrow`)}isBorrowWithBoostTransaction(){let t=this.getMoveCallTransaction(`${this.coreId.protocolPkg}::borrow::borrow`),e=this.getMoveCallTransaction(`${this.coreId.borrowIncentivePkg}::user::stake_with_ve_sca`);return!!t&&!!e}isBorrowWithReferralTransaction(){return!!this.getMoveCallTransaction(`${this.coreId.protocolPkg}::borrow::borrow_with_referral`)}isRepayTransaction(){return!!this.getMoveCallTransaction(`${this.coreId.protocolPkg}::repay::repay`)}isRepayWithBoostTransaction(){let t=!!this.getMoveCallTransaction(`${this.coreId.protocolPkg}::repay::repay`),e=this.getMoveCallTransaction(`${this.coreId.borrowIncentivePkg}::user::stake_with_ve_sca`);return!!t&&!!e}isUnstakeSpoolTransaction(){return!!this.getMoveCallTransaction(`${this.coreId.spoolPkg}::user::unstake`)}isCreateStakeAccountTransaction(){return!!this.getMoveCallTransaction(`${this.coreId.spoolPkg}::user::new_spool_account`)}isClaimRewardTransaction(){let t=this.getMoveCallTransaction(`${this.coreId.spoolPkg}::user::redeem_rewards`),e=this.getMoveCallTransaction(`${this.coreId.borrowIncentivePkg}::user::redeem_rewards`);return!!t||!!e}isOpenObligationTransaction(){return!!this.getMoveCallTransaction(`${this.coreId.protocolPkg}::open_obligation::open_obligation`)}isMigrateAndClaim(){let t=this.getMoveCallTransaction(`${st}::user::redeem_rewards`),e=this.getMoveCallTransaction(`${this.coreId.borrowIncentivePkg}::user::stake_with_ve_sca`),n=this.getMoveCallTransaction(`${this.coreId.borrowIncentivePkg}::user::stake`);return!!t&&(!!e||!!n)}get helperClaimLendingReward(){return this.transactions.filter(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.spoolPkg}::user::redeem_rewards`)).map(e=>new I(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 I(e,this.txb))}get helperStakeObligationWithVeSca(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.borrowIncentivePkg}::user::stake_with_ve_sca`));return new I(t,this.txb)}get helperClaimBorrowReward(){return this.transactions.filter(e=>e.kind==="MoveCall"&&e.target.startsWith(`${st}::user::redeem_rewards`)).map(e=>new I(e,this.txb))}get helperMint(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.protocolPkg}::mint::mint`));return new I(t,this.txb)}get helperUnstakes(){return this.transactions.filter(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.spoolPkg}::user::unstake`)).map(e=>new I(e,this.txb))}get helperRedeems(){return this.transactions.filter(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.protocolPkg}::redeem::redeem`)).map(e=>new I(e,this.txb))}get helperRedeem(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.protocolPkg}::redeem::redeem`));return new I(t,this.txb)}get helperBurnScoin(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.scoin}::s_coin_converter::burn_s_coin`));return new I(t,this.txb)}get helperSlippage(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith("0x5857d185897aaff40ae37b2eecc895efc1a9dff1b210c4fb894eabbce4ac2603::slippage_check::check_slippage"));return new I(t,this.txb)}get helperStake(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.spoolPkg}::user::stake`));return new I(t,this.txb)}get helperUnstake(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.spoolPkg}::user::unstake`));return new I(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 I(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 I(t,this.txb)}get helperBorrow(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.protocolPkg}::borrow::borrow`));return new I(t,this.txb)}get helperBorrowWithReferral(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.protocolPkg}::borrow::borrow_with_referral`));return new I(t,this.txb)}get helperRepay(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.protocolPkg}::repay::repay`));return new I(t,this.txb)}decodeMigrateScoin(){return{txType:P.Other,type:"MigrateScoin",intentionData:{}}}decodeMigrateAndClaim(){let t;this.helperStakeObligationWithVeSca.moveCall&&(t=this.helperStakeObligationWithVeSca.decodeOwnedObjectId(9));let e=this.helperClaimBorrowReward[0].decodeOwnedObjectId(2),n=this.helperClaimBorrowReward[0].decodeSharedObjectId(3),o=this.scallop.utils.parseCoinNameFromType(this.helperClaimBorrowReward[0].typeArg(0));return{txType:P.Other,type:"MigrateAndClaim",intentionData:{obligationKey:e,obligationId:n,rewardCoinName:o,veScaKey:t}}}decodeOpenObligation(){return{txType:P.Other,type:"OpenObligation",intentionData:{}}}decodeSupplyLending(){let t=this.scallop.utils.parseCoinNameFromType(this.helperMint.typeArg(0)),e=this.helperMint.getNestedInputParam(2),n=new _(e,this.txb).getAmountInput().reduce((o,r)=>o+r,0);return{txType:P.Other,type:"SupplyLending",intentionData:{amount:n,coinName:t}}}decodeWithdrawLending(){let t=this.scallop.utils.parseCoinNameFromType(this.helperRedeem.typeArg(0)),e=this.helperRedeem.getNestedInputParam(2),n=new _(e,this.txb).getAmountInput().reduce((o,r)=>o+r,0);return{txType:P.Other,type:"WithdrawLending",intentionData:{amount:n,coinName:t}}}decodeWithdrawLendingScoin(){let t=this.scallop.utils.parseCoinNameFromType(this.helperRedeem.typeArg(0)),e=this.helperBurnScoin.getNestedInputParam(1),n=new _(e,this.txb).getAmountInput().reduce((o,r)=>o+r,0);return{txType:P.Other,type:"WithdrawLending",intentionData:{amount:n,coinName:t}}}decodeDepositCollateral(){let t=this.scallop.utils.parseCoinNameFromType(this.helperDepositCollateral.typeArg(0)),e=this.helperDepositCollateral.getNestedInputParam(3),n=new _(e,this.txb).getAmountInput().reduce((r,i)=>r+i,0),o=this.helperDepositCollateral.decodeSharedObjectId(1);return{txType:P.Other,type:"DepositCollateral",intentionData:{amount:n,obligationId:o,collateralCoinName:t}}}decodeWithdrawCollateral(){let t=this.scallop.utils.parseCoinNameFromType(this.helperWithdrawCollateral.typeArg(0)),e=this.helperWithdrawCollateral.decodeInputU64(5),n=this.helperWithdrawCollateral.decodeSharedObjectId(1),o=this.helperWithdrawCollateral.decodeOwnedObjectId(2);return{txType:P.Other,type:"WithdrawCollateral",intentionData:{amount:e,collateralCoinName:t,obligationKey:o,obligationId:n}}}decodeBorrow(){let t=this.scallop.utils.parseCoinNameFromType(this.helperBorrow.typeArg(0)),e=this.helperBorrow.decodeInputU64(5),n=this.helperBorrow.decodeSharedObjectId(1),o=this.helperBorrow.decodeOwnedObjectId(2);return{txType:P.Other,type:"Borrow",intentionData:{amount:e,coinName:t,obligationKey:o,obligationId:n}}}decodeBorrowWithBoost(){let t=this.scallop.utils.parseCoinNameFromType(this.helperBorrow.typeArg(0)),e=this.helperStakeObligationWithVeSca.decodeOwnedObjectId(9),n=this.helperBorrow.decodeInputU64(5),o=this.helperBorrow.decodeSharedObjectId(1),r=this.helperBorrow.decodeOwnedObjectId(2);return{txType:P.Other,type:"BorrowWithBoost",intentionData:{amount:n,coinName:t,obligationKey:r,obligationId:o,veScaKey:e}}}decodeBorrowWithReferral(){let t=this.scallop.utils.parseCoinNameFromType(this.helperBorrowWithReferral.typeArg(0)),e;this.helperStakeObligationWithVeSca.moveCall&&(e=this.helperStakeObligationWithVeSca.decodeOwnedObjectId(9));let n=this.helperBorrowWithReferral.decodeInputU64(6),o=this.helperBorrowWithReferral.decodeSharedObjectId(1),r=this.helperBorrowWithReferral.decodeOwnedObjectId(2);return{txType:P.Other,type:"BorrowWithReferral",intentionData:{amount:n,coinName:t,obligationKey:r,obligationId:o,veScaKey:e}}}decodeRepay(){let t=this.scallop.utils.parseCoinNameFromType(this.helperRepay.typeArg(0)),e=this.helperRepay.getNestedInputParam(3),n=new _(e,this.txb).getAmountInput().reduce((r,i)=>r+i,0),o=this.helperRepay.decodeSharedObjectId(1);return{txType:P.Other,type:"Repay",intentionData:{amount:n,obligationId:o,coinName:t}}}decodeRepayWithBoost(){let t=this.scallop.utils.parseCoinNameFromType(this.helperRepay.typeArg(0)),e=this.helperStakeObligationWithVeSca.decodeOwnedObjectId(9),n=this.helperRepay.getNestedInputParam(3),o=new _(n,this.txb).getAmountInput().reduce((i,s)=>i+s,0),r=this.helperRepay.decodeSharedObjectId(1);return{txType:P.Other,type:"RepayWithBoost",intentionData:{amount:o,obligationId:r,coinName:t,veScaKey:e}}}decodeStakeSpool(){let t;this.isCreateStakeAccountTransaction()||(t=this.helperStake.decodeOwnedObjectId(1));let e=0;if(this.helperBurnScoin.moveCall){let r=this.helperBurnScoin.getNestedInputParam(1);e=new _(r,this.txb).getAmountInput().reduce((i,s)=>i+s,0)}if(this.helperStake.moveCall&&e===0){let r=this.helperStake.getNestedInputParam(2);e=new _(r,this.txb).getAmountInput().reduce((i,s)=>i+s,0)}let n=this.helperStake.typeArg(0),o=this.scallop.utils.parseCoinNameFromType(n);return{txType:P.Other,type:"StakeSpool",intentionData:{amount:e,marketCoinName:o,stakeAccountId:t}}}decodeUnstakeSpool(){let t=this.helperUnstake.decodeOwnedObjectId(1),e=this.helperUnstake.decodeInputU64(2),n=this.helperUnstake.typeArg(0),o=this.scallop.utils.parseCoinNameFromType(n);return{txType:P.Other,type:"UnstakeSpool",intentionData:{amount:e,marketCoinName:o,stakeAccountId:t}}}decodeSupplyWithStakeSpool(){let t=this.scallop.utils.parseCoinNameFromType(this.helperMint.typeArg(0)),e=this.helperMint.getNestedInputParam(2),n=new _(e,this.txb).getAmountInput().reduce((r,i)=>r+i,0),o;return this.isCreateStakeAccountTransaction()||(o=this.helperStake.decodeOwnedObjectId(1)),{txType:P.Other,type:"SupplyAndStakeLending",intentionData:{amount:n,coinName:t,stakeAccountId:o}}}decodeUnstakeAndWithdraw(){let t=[];this.helperUnstakes.forEach(o=>{let r=o.decodeOwnedObjectId(1),i=o.decodeInputU64(2);t.push({id:r,coin:i})});let e=this.scallop.utils.parseCoinNameFromType(this.helperRedeems[0].typeArg(0)),n=0;if(this.helperBurnScoin.moveCall){let o=this.helperBurnScoin.getNestedInputParam(1);n=new _(o,this.txb).getAmountInput().reduce((r,i)=>r+i,0)}return{txType:P.Other,type:"WithdrawAndUnstakeLending",intentionData:{amount:n,coinName:e,stakeAccountId:t}}}decodeMoveAsset(){let t=[];this.helperUnstakes.forEach(i=>{let s=i.decodeOwnedObjectId(1),c=i.decodeInputU64(2);t.push({id:s,coin:c})});let e=this.scallop.utils.parseCoinNameFromType(this.helperRedeems[0].typeArg(0)),n=0;if(this.helperBurnScoin.moveCall){let i=this.helperBurnScoin.getNestedInputParam(1);n=new _(i,this.txb).getAmountInput().reduce((s,c)=>s+c,0)}let o=this.helperSlippage.decodePureArg(1,"u64"),r=this.helperSlippage.decodePureArg(2,"string");return{txType:P.Other,type:"MigrateWusdcToUsdc",intentionData:{amount:n,coinName:e,slippage:o,validSwapAmount:r,stakeAccountId:t}}}decodeClaimReward(){let t=[],e=[],n=[];return this.helperClaimLendingReward.forEach(o=>{let r=o.decodeOwnedObjectId(2),i=o.typeArg(0),s=this.scallop.utils.parseCoinNameFromType(i);t.push({stakeMarketCoinName:s,stakeAccountId:r})}),this.helperClaimBorrowV2Reward.forEach(o=>{let r=o.decodeSharedObjectId(3),i=o.decodeOwnedObjectId(4),s=this.scallop.utils.parseCoinNameFromType(o.typeArg(0));e.push({obligationId:i,obligationKey:r,rewardCoinName:s})}),this.helperClaimBorrowReward.forEach(o=>{let r=o.decodeSharedObjectId(2),i=o.decodeOwnedObjectId(3),s=this.scallop.utils.parseCoinNameFromType(o.typeArg(0));n.push({obligationId:i,obligationKey:r,rewardCoinName:s})}),{txType:P.Other,type:"ClaimIncentiveReward",intentionData:{lendingIncentive:t,borrowIncentiveV2:e,borrowIncentive:n}}}};import{TransactionType as vo}from"@msafe/sui3-utils";var Dn=class extends rt{decode(){if(this.isCreateReferralLink())return this.decodeCreateReferralLink();if(this.isClaimRevenueReferral())return this.decodeClaimRevenueReferral();if(this.isBindReferral())return this.decodeBindReferral()}isClaimRevenueReferral(){return!!this.getMoveCallTransaction(`${this.coreId.referral}::referral_revenue_pool::claim_revenue_with_ve_sca_key`)}isCreateReferralLink(){return!!this.getMoveCallTransaction(`${this.coreId.veScaPkgId}::ve_sca::mint_ve_sca_placeholder_key`)}isBindReferral(){return!!this.getMoveCallTransaction(`${this.coreId.referral}::referral_bindings::bind_ve_sca_referrer`)}get helperClaimRevenueReferral(){return this.transactions.filter(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.referral}::referral_revenue_pool::claim_revenue_with_ve_sca_key`)).map(e=>new I(e,this.txb))}get helperBindReferral(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.referral}::referral_bindings::bind_ve_sca_referrer`));return new I(t,this.txb)}decodeCreateReferralLink(){return{txType:vo.Other,type:"CreateReferralLink",intentionData:{}}}decodeClaimRevenueReferral(){let t=this.helperClaimRevenueReferral[0].decodeOwnedObjectId(2),e=this.helperClaimRevenueReferral.map(n=>n.typeArg(0));return{txType:vo.Other,type:"ClaimRevenueReferral",intentionData:{veScaKey:t,coins:e}}}decodeBindReferral(){let t=this.helperBindReferral.decodePureArg(1,"address");return{txType:vo.Other,type:"BindReferral",intentionData:{veScaKey:t}}}};import{TransactionType as Jt}from"@msafe/sui3-utils";var On=class extends rt{decode(){if(this.isExtendPeriodAndStakeMoreSca())return this.decodePeriodAndStakeMoreSca();if(this.isStakeScaFirsTime()||this.isStakeMoreSca())return this.decodeStakeSca();if(this.isRenewExpiredVeSca())return this.decodeRenewExpiredVeSca();if(this.isExtendPeriod())return this.decodeExtendStakePeriod();if(this.isRedeemSca())return this.decodeRedeemSca()}isStakeScaFirsTime(){return!!this.getMoveCallTransaction(`${this.coreId.veScaPkgId}::ve_sca::mint_ve_sca_key`)}isExtendPeriodAndStakeMoreSca(){let t=this.getMoveCallTransaction(`${this.coreId.veScaPkgId}::ve_sca::extend_lock_period`),e=this.getMoveCallTransaction(`${this.coreId.veScaPkgId}::ve_sca::lock_more_sca`);return!!t&&!!e}isRedeemSca(){return!!this.getMoveCallTransaction(`${this.coreId.veScaPkgId}::ve_sca::redeem`)}isStakeMoreSca(){return!!this.getMoveCallTransaction(`${this.coreId.veScaPkgId}::ve_sca::lock_more_sca`)}isExtendPeriod(){return!!this.getMoveCallTransaction(`${this.coreId.veScaPkgId}::ve_sca::extend_lock_period`)}isRenewExpiredVeSca(){return!!this.getMoveCallTransaction(`${this.coreId.veScaPkgId}::ve_sca::renew_expired_ve_sca`)}get helperStakeMoreSca(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.veScaPkgId}::ve_sca::lock_more_sca`));return new I(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 I(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 I(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 I(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 I(t,this.txb)}get helperOldUnstakeObligation(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${st}::user::unstake`));return new I(t,this.txb)}get helperUnstakeObligation(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.borrowIncentivePkg}::user::unstake`));return new I(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 I(t,this.txb)}decodeRedeemSca(){let t=this.helperRedeemSca.decodeOwnedObjectId(1);return{txType:Jt.Other,type:"RedeemSca",intentionData:{veScaKey:t}}}decodeRenewExpiredVeSca(){let t=this.helperRenewExpired.getNestedInputParam(4),e=this.helperRenewExpired.decodeInputU64(5),n=new _(t,this.txb).getAmountInput().reduce((f,S)=>f+S,0),o=this.helperRenewExpired.decodeOwnedObjectId(1),r=!!this.helperRedeemSca.moveCall,i=[],s=[],c=[];this.helperOldUnstakeObligation.moveCall&&(i=[this.helperOldUnstakeObligation.decodeSharedObjectId(2),this.helperOldUnstakeObligation.decodeSharedObjectId(3)]),this.helperUnstakeObligation.moveCall&&(s=[this.helperUnstakeObligation.decodeSharedObjectId(3),this.helperUnstakeObligation.decodeSharedObjectId(4)]),this.helperStakeObligationWithVeSca.moveCall&&(c=[this.helperStakeObligationWithVeSca.decodeSharedObjectId(3),this.helperStakeObligationWithVeSca.decodeSharedObjectId(4)]);let d=!1,l=!1,u,p,m=[{condition:i,isOld:!0},{condition:s,isOld:!1},{condition:c,isOld:!1}];for(let f=0;f<m.length;f++)m[f].condition.length>1&&([p,u]=m[f].condition,d=!0,l=m[f].isOld);return{txType:Jt.Other,type:"RenewExpStakePeriod",intentionData:{amount:n,lockPeriodInDays:e,obligationId:u,obligationKey:p,veScaKey:o,isHaveRedeem:r,isObligationLocked:d,isOldBorrowIncentive:l}}}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,d,l=[{condition:n,isOld:!0},{condition:o,isOld:!1},{condition:r,isOld:!1}];for(let u=0;u<l.length;u++)l[u].condition.length>1&&([d,c]=l[u].condition,i=!0,s=l[u].isOld);return{txType:Jt.Other,type:"ExtendStakePeriod",intentionData:{lockPeriodInDays:t,obligationId:c,obligationKey:d,veScaKey:e,isObligationLocked:i,isOldBorrowIncentive:s}}}decodePeriodAndStakeMoreSca(){let t=this.helperStakeMoreSca.getNestedInputParam(4),e=this.helperExtendStakePeriod.decodeInputU64(4),n=new _(t,this.txb).getAmountInput().reduce((m,f)=>m+f,0),o=[],r=[],i,s=[];this.helperOldUnstakeObligation.moveCall&&(o=[this.helperOldUnstakeObligation.decodeSharedObjectId(2),this.helperOldUnstakeObligation.decodeSharedObjectId(3)]),this.helperUnstakeObligation.moveCall&&(r=[this.helperUnstakeObligation.decodeSharedObjectId(3),this.helperUnstakeObligation.decodeSharedObjectId(4)]),this.helperStakeMoreSca.moveCall&&(i=this.helperStakeMoreSca.decodeOwnedObjectId(1)),this.helperStakeObligationWithVeSca.moveCall&&(s=[this.helperStakeObligationWithVeSca.decodeSharedObjectId(3),this.helperStakeObligationWithVeSca.decodeSharedObjectId(4)]);let c=!1,d=!1,l,u,p=[{condition:o,isOld:!0},{condition:r,isOld:!1},{condition:s,isOld:!1}];for(let m=0;m<p.length;m++)p[m].condition.length>1&&([u,l]=p[m].condition,c=!0,d=p[m].isOld);return{txType:Jt.Other,type:"ExtendPeriodAndStakeMore",intentionData:{amount:n,veScaKey:i,lockPeriodInDays:e,obligationId:l,obligationKey:u,isOldBorrowIncentive:d,isObligationLocked:c}}}decodeStakeSca(){let t,e;this.helperStakeSca.moveCall&&this.helperStakeMoreSca.moveCall===void 0?(t=this.helperStakeSca.getNestedInputParam(3),e=this.helperStakeSca.decodeInputU64(4)):t=this.helperStakeMoreSca.getNestedInputParam(4);let n=new _(t,this.txb).getAmountInput().reduce((m,f)=>m+f,0),o=[],r=[],i,s=[];this.helperOldUnstakeObligation.moveCall&&(o=[this.helperOldUnstakeObligation.decodeSharedObjectId(2),this.helperOldUnstakeObligation.decodeSharedObjectId(3)]),this.helperUnstakeObligation.moveCall&&(r=[this.helperUnstakeObligation.decodeSharedObjectId(3),this.helperUnstakeObligation.decodeSharedObjectId(4)]),this.helperStakeMoreSca.moveCall&&(i=this.helperStakeMoreSca.decodeOwnedObjectId(1)),this.helperStakeObligationWithVeSca.moveCall&&(s=[this.helperStakeObligationWithVeSca.decodeSharedObjectId(3),this.helperStakeObligationWithVeSca.decodeSharedObjectId(4)]);let c=!1,d=!1,l,u,p=[{condition:o,isOld:!0},{condition:r,isOld:!1},{condition:s,isOld:!1}];for(let m=0;m<p.length;m++)p[m].condition.length>1&&([u,l]=p[m].condition,c=!0,d=p[m].isOld);return{txType:Jt.Other,type:"StakeSca",intentionData:{amount:n,lockPeriodInDays:e,obligationId:l,obligationKey:u,veScaKey:i,isObligationLocked:c,isOldBorrowIncentive:d}}}};import ul from"sort-keys-recursive";var b=class{constructor(t){this.data=t}get application(){return"msafe-core"}serialize(){return JSON.stringify(ul(this.data))}};var Pn=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.borrow(this.data.coinName,Number(this.data.amount),this.data.obligationId,this.data.obligationKey,e.account.address)}static fromData(e){return new a(e)}};var _n=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.borrowWithBoost(this.data.coinName,Number(this.data.amount),this.data.obligationId,this.data.obligationKey,this.data.veScaKey,e.account.address)}static fromData(e){return new a(e)}};var Rn=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.borrowWithReferral(this.data.coinName,Number(this.data.amount),this.data.obligationId,this.data.obligationKey,this.data.veScaKey,e.account.address)}static fromData(e){return new a(e)}};var jn=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.claim(this.data.lendingIncentive,this.data.borrowIncentiveV2,this.data.borrowIncentive,e.account.address)}static fromData(e){return new a(e)}};var Bn=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.depositCollateral(this.data.collateralCoinName,Number(this.data.amount),this.data.obligationId,e.account.address)}static fromData(e){return new a(e)}};var Nn=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.migrateAndClaim(this.data.obligationKey,this.data.obligationId,this.data.rewardCoinName,this.data.veScaKey)}static fromData(e){return new a(e)}};var Mn=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.migrateAllMarketCoin()}static fromData(e){return new a(e)}};var En=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.migrateLendingWusdcToUsdcNative(this.data.coinName,Number(this.data.amount),this.data.slippage,this.data.validSwapAmount,this.data.stakeAccountId)}static fromData(e){return new a(e)}};var Wn=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.openObligation()}static fromData(e){return new a(e)}};var Ln=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.repay(this.data.coinName,Number(this.data.amount),this.data.obligationId,this.data.obligationKey,e.account.address)}static fromData(e){return new a(e)}};var Un=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.repayWithBoost(this.data.coinName,Number(this.data.amount),this.data.obligationId,this.data.veScaKey,e.account.address)}static fromData(e){return new a(e)}};var Fn=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.stake(this.data.marketCoinName,Number(this.data.amount),void 0,e.account.address)}static fromData(e){return new a(e)}};var $n=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.deposit(this.data.coinName,Number(this.data.amount),e.account.address)}static fromData(e){return new a(e)}};var qn=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.unstake(this.data.marketCoinName,Number(this.data.amount),void 0,e.account.address)}static fromData(e){return new a(e)}};var Qn=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.unstakeAndWithdraw(this.data.coinName,Number(this.data.amount),this.data.stakeAccountId)}static fromData(e){return new a(e)}};var Vn=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.withdrawCollateral(this.data.collateralCoinName,Number(this.data.amount),this.data.obligationId,this.data.obligationKey,e.account.address)}static fromData(e){return new a(e)}};var Hn=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.withdraw(this.data.coinName,Number(this.data.amount),e.account.address)}static fromData(e){return new a(e)}};var Kn=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.bindReferral(this.data.veScaKey)}static fromData(e){return new a(e)}};var Gn=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.claimRevenuReferral(this.data.veScaKey,this.data.coins)}static fromData(e){return new a(e)}};var zn=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.createReferralLink()}static fromData(e){return new a(e)}};var Jn=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.extendPeriodAndStakeMoreSca(this.data.amount,this.data.veScaKey,this.data.lockPeriodInDays,this.data.obligationId,this.data.obligationKey,this.data.isObligationLocked,this.data.isOldBorrowIncentive,e.account.address)}static fromData(e){return new a(e)}};var Xn=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.extendStakeScaLockPeriod(this.data.lockPeriodInDays,this.data.veScaKey,this.data.obligationId,this.data.obligationKey,this.data.isObligationLocked,this.data.isOldBorrowIncentive,e.account.address)}static fromData(e){return new a(e)}};var Yn=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.redeemSca(this.data.veScaKey)}static fromData(e){return new a(e)}};var Zn=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.renewExpiredStakeSca(this.data.amount,this.data.lockPeriodInDays,this.data.vescaKey,this.data.isHaveRedeem,this.data.obligation,this.data.obligationKey,this.data.isObligationLocked,this.data.isOldBorrowIncentive,e.account.address)}static fromData(e){return new a(e)}};var ta=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.stakeSca(this.data.amount,this.data.isObligationLocked,this.data.isOldBorrowIncentive,this.data.obligationId,this.data.obligationKey,this.data.lockPeriodInDays,this.data.veScaKey,e.account.address)}static fromData(e){return new a(e)}};var ea=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.supplyAndStake(this.data.coinName,Number(this.data.amount),this.data.stakeAccountId,e.account.address)}static fromData(e){return new a(e)}};var na=class a extends b{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.withdrawUnlockedSca(this.data.vescaKey,e.account.address)}static fromData(e){return new a(e)}};var aa=class{id;addresses;constructor(t){let{id:e}=t;this.id=e}getId(){return this.id}getAddresses(){return this.addresses}get(t){if(!this.addresses)throw new Error(`Failed to fetch address ${this.id}`);return t.split(".").reduce((n,o)=>typeof n=="object"?n[o]:n,this.addresses)}async read(){let t={method:"GET",headers:new Headers({"Content-Type":"application/json"})},e=await fetch(`${Jr}/addresses/${this.id}`,t);if(e.status===200){let n=await e.json();if("mainnet"in n){this.addresses=n.mainnet;return}throw new Error("Mainnet key is not in address!")}throw new Error(`Failed to fetch address with id ${this.id}`)}};import{TransactionBlock as T}from"@mysten/sui.js/transactions";import Ri from"bignumber.js";import{TransactionBlock as pl}from"@mysten/sui.js/transactions";var oa=class{params;isTestnet;address;query;utils;client;constructor(t,e){this.params=t,this.client=t.client;let{address:n,query:o,utils:r}=e;this.address=n,this.query=o,this.utils=r,this.isTestnet=t.networkType?t.networkType==="testnet":!1}createTxBlock(t){return new pl(t)}async selectCoin(t,e,n,o=this.params.walletAddress){let r=this.utils.parseCoinType(e),i=await this.utils.selectCoinIds(n,r,o),[s,c]=this.utils.takeAmountFromCoins(t,i,n);return{takeCoin:s,leftCoin:c}}async selectMarketCoin(t,e,n,o=this.params.walletAddress){let r=this.utils.parseMarketCoinType(e),i=await this.utils.selectCoins(n,r,o),s=i.reduce((u,p)=>(u+=Number(p.balance),u),0),c=i.map(u=>u.objectId),[d,l]=this.utils.takeAmountFromCoins(t,c,Math.min(n,s));return{takeCoin:d,leftCoin:l,totalAmount:s}}async selectSCoin(t,e,n,o=this.params.walletAddress){let r=this.utils.parseSCoinType(e),i=await this.utils.selectCoins(n,r,o),s=i.map(u=>u.objectId),c=i.reduce((u,p)=>u+Number(p.balance),0),[d,l]=this.utils.takeAmountFromCoins(t,s,Math.min(c,n));return{takeCoin:d,leftCoin:l,totalAmount:c}}};import{TransactionBlock as ml}from"@mysten/sui.js/transactions";import ra from"bignumber.js";var xt=async(a,t)=>{let e=t,n=a.address.get("core.object")||kn,o=[],r=!1,i=null;do{let l=await a.client.getOwnedObjects({owner:e,filter:{StructType:`${n}::obligation::ObligationKey`},cursor:i});o.push(...l.data),l.hasNextPage&&l.nextCursor?(r=!0,i=l.nextCursor):r=!1}while(r);let s=o.map(l=>l?.data?.objectId).filter(l=>l!==void 0),c=await a.client.multiGetObjects({ids:s,options:{showContent:!0,showType:!0}}),d=[];for(let l=0;l<c.length;l++){let u=c[l].data.objectId,{content:p}=c[l].data;if(p&&"fields"in p){let m=p.fields,f=String(m.ownership.fields.of),S=await xo(a,f);d.push({id:f,keyId:u,locked:S})}}return d},xo=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},oi=async(a,t,e)=>{let n=e||[...z],o=t,r=[],i=!1,s=null;do{let l=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(...l.data),l.hasNextPage&&l.nextCursor?(i=!0,s=l.nextCursor):i=!1}while(i);let c={};return r.map(l=>l.data).filter(l=>l!=null).forEach(l=>{let u=l.type;if(l.content&&"fields"in l.content){let p=l.content.fields,m=a.utils.parseCoinNameFromType(u);m&&(c[m]=ra(c[m]??0).plus(p.balance).toNumber())}}),c},ri=async(a,t,e)=>{let n=e,o=a.utils.parseCoinType(t),r=[],i=!1,s=null;do{let l=await a.client.getOwnedObjects({owner:n,filter:{StructType:`0x2::coin::Coin<${o}>`},options:{showContent:!0},cursor:s});r.push(...l.data),l.hasNextPage&&l.nextCursor?(i=!0,s=l.nextCursor):i=!1}while(i);let c=0;return r.map(l=>l.data).filter(l=>l!=null).forEach(l=>{if(l.content&&"fields"in l.content){let u=l.content.fields;c=ra(c).plus(u.balance).toNumber()}}),c},ii=async(a,t,e)=>{let n=e||[...z].map(l=>a.utils.parseMarketCoinName(l)),o=t,r=[],i=!1,s=null;do{let l=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(...l.data),l.hasNextPage&&l.nextCursor?(i=!0,s=l.nextCursor):i=!1}while(i);let c={};return r.map(l=>l.data).filter(l=>l!=null).forEach(l=>{let u=l.type;if(l.content&&"fields"in l.content){let p=l.content.fields,m=a.utils.parseCoinNameFromType(u);m&&(c[m]=ra(c[m]??0).plus(p.balance).toNumber())}}),c},si=async(a,t,e)=>{let n=e,o=a.utils.parseMarketCoinType(t),r=[],i=!1,s=null;do{let l=await a.client.getOwnedObjects({owner:n,filter:{StructType:`0x2::coin::Coin<${o}>`},options:{showContent:!0},cursor:s});r.push(...l.data),l.hasNextPage&&l.nextCursor?(i=!0,s=l.nextCursor):i=!1}while(i);let c=0;return r.map(l=>l.data).filter(l=>l!=null).forEach(l=>{if(l.content&&"fields"in l.content){let u=l.content.fields;c=ra(c).plus(u.balance).toNumber()}}),c},ci=async(a,t)=>{let n=`${a.address.get("core.packages.query.id")}::obligation_query::obligation_data`,o=new ml;return o.moveCall({target:n,arguments:[o.object(t)]}),(await a.client.devInspectTransactionBlock({transactionBlock:o,sender:a.params.walletAddress})).events[0].parsedJson};import{normalizeStructTag as C}from"@mysten/sui.js/utils";var Xt=async(a,t)=>{let e=t,n=a.address.get("spool.object"),o=`${n}::spool_account::SpoolAccount`,r=[],i=!1,s=null;do{let p=await a.client.getOwnedObjects({owner:e,filter:{StructType:o},options:{showContent:!0,showType:!0},cursor:s});r.push(...p.data),p.hasNextPage&&p.nextCursor?(i=!0,s=p.nextCursor):i=!1}while(i);let c={sweth:[],ssui:[],susdc:[],swusdc:[],swusdt:[],scetus:[],safsui:[],shasui:[],svsui:[]},d=Object.keys(c).reduce((p,m)=>{let f=a.utils.parseCoinName(m),S=a.utils.parseMarketCoinType(f),w={...p},v=`${n}::spool_account::SpoolAccount<${S}>`;return w[m]=v,w},{}),l=r.map(p=>p?.data?.objectId).filter(p=>p!==void 0);return(await a.client.multiGetObjects({ids:l,options:{showContent:!0,showType:!0}})).forEach(p=>{let m=p.data.objectId,f=p.data.type;if(p.data.content&&"fields"in p.data.content){let S=p.data.content.fields,w=String(S.spool_id),v=String(S.stake_type.fields.name),E=Number(S.stakes),R=Number(S.index),U=Number(S.points),W=Number(S.total_points);C(f)===d.sweth?c.sweth.push({id:m,type:C(f),stakePoolId:w,stakeType:C(v),staked:E,index:R,points:U,totalPoints:W}):C(f)===d.ssui?c.ssui.push({id:m,type:C(f),stakePoolId:w,stakeType:C(v),staked:E,index:R,points:U,totalPoints:W}):C(f)===d.swusdc?c.swusdc.push({id:m,type:C(f),stakePoolId:w,stakeType:C(v),staked:E,index:R,points:U,totalPoints:W}):C(f)===d.swusdt?c.swusdt.push({id:m,type:C(f),stakePoolId:w,stakeType:C(v),staked:E,index:R,points:U,totalPoints:W}):C(f)===d.scetus?c.scetus.push({id:m,type:C(f),stakePoolId:w,stakeType:C(v),staked:E,index:R,points:U,totalPoints:W}):C(f)===d.safsui?c.safsui.push({id:m,type:C(f),stakePoolId:w,stakeType:C(v),staked:E,index:R,points:U,totalPoints:W}):C(f)===d.shasui?c.shasui.push({id:m,type:C(f),stakePoolId:w,stakeType:C(v),staked:E,index:R,points:U,totalPoints:W}):C(f)===d.svsui?c.svsui.push({id:m,type:C(f),stakePoolId:w,stakeType:C(v),staked:E,index:R,points:U,totalPoints:W}):C(f)===d.susdc&&c.susdc.push({id:m,type:C(f),stakePoolId:w,stakeType:C(v),staked:E,index:R,points:U,totalPoints:W})}}),c},Ao=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,d=Number(c.max_distributed_point),l=Number(c.distributed_point),u=Number(c.distributed_point_per_period),p=Number(c.point_distribution_time),m=Number(c.max_stakes),f=String(c.stake_type.fields.name),S=Number(c.stakes),w=Number(c.index),v=Number(c.created_at),E=Number(c.last_update);n={id:i,type:C(s),maxPoint:d,distributedPoint:l,pointPerPeriod:u,period:p,maxStake:m,stakeType:C(f),totalStaked:S,index:w,createdAt:v,lastUpdate:E}}}return n},Do=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,d=String(c.spool_id),l=Number(c.exchange_rate_numerator),u=Number(c.exchange_rate_denominator),p=Number(c.rewards),m=Number(c.claimed_rewards);n={id:i,type:C(s),stakePoolId:d,ratioNumerator:l,ratioDenominator:u,rewards:p,claimedRewards:m}}}return n};import{TransactionBlock as gl}from"@mysten/sui.js/transactions";import{normalizeStructTag as jC}from"@mysten/sui.js/utils";import NC from"bignumber.js";var B=a=>{let{sender:t}=a.blockData;if(!t)throw new Error("Sender is required");return t},ui=(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(At(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)`)}},pi=(a,t,e)=>{if(At(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)`)},mi=(a,t)=>{if(At(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")},fi=(a,t,e)=>{if(At(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)`)},At=a=>{if(a===void 0)throw new Error("veSca not found")};import{normalizeStructTag as bi,parseStructTag as fl}from"@mysten/sui.js/utils";import CC from"bignumber.js";var bl=a=>({pointType:bi(a.point_type.name),weightedAmount:Number(a.weighted_amount),points:Number(a.points),totalPoints:Number(a.total_points),index:Number(a.index)}),gi=a=>({poolType:bi(a.pool_type.name),debtAmount:Number(a.debt_amount),pointList:a.points_list.reduce((t,e)=>{let n=bl(e),o=fl(n.pointType).name.toLowerCase();return t[o]=n,t},{})});var sa=a=>{let t=a.slice(1).toLowerCase();return a.charAt(0).toLowerCase()==="s"&&[...new Set([...z,...vn,...Yr])].includes(t)},Oo=a=>{switch(a){case"afsui":return"afSUI";case"hasui":return"haSUI";case"vsui":return"vSUI";default:return a.toUpperCase()}},hi=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 yi=async(a,t,e,n)=>{let o=n||[...lt],r=a.address.get("borrowIncentive.query"),i=a.address.get("borrowIncentive.incentiveAccounts"),s=`${r}::incentive_account_query::incentive_account_data`,c=new gl;c.moveCall({target:s,arguments:[c.object(i),c.object(t)]});let l=(await a.client.devInspectTransactionBlock({transactionBlock:c,sender:e})).events[0].parsedJson,u={};return l.pool_records.forEach(p=>{let m=gi(p),{poolType:f}=m,S=a.utils.parseCoinNameFromType(f);o.length>=1&&o.includes(S)&&(u[S]=m)},{}),u};var Si=async({address:a,client:t},e)=>{let n=a.get("borrowIncentive.object"),o=a.get("borrowIncentive.incentiveAccounts"),r=a.get("core.object"),i=await t.getObject({id:o,options:{showContent:!0}});if(i?.data?.content?.dataType!=="moveObject")return null;let s=i.data.content.fields.accounts.fields.id.id,c=await t.getDynamicFieldObject({parentId:s,name:{type:`${n}::typed_id::TypedID<${r}::obligation::Obligation>`,value:e}});return c?.data?.content?.dataType!=="moveObject"?null:c.data.content.fields.value.fields.binded_ve_sca_key?.fields.id??null};var wi=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),d=Number(r.price_info.fields.price_feed.fields.price.fields.price.fields.negative);return c*10**((s?-1:1)*i)*(d?-1:1)}}return 0};import Po from"bignumber.js";var Ii=async(a,t)=>{let e=t,o=`${a.address.get("vesca.id")}::ve_sca::VeScaKey`,r=[],i=!1,s=null;do{let d=await a.client.getOwnedObjects({owner:e,filter:{StructType:o},cursor:s});r.push(...d.data),d.hasNextPage&&d.nextCursor?(i=!0,s=d.nextCursor):i=!1}while(i);return r.map(d=>d.data).filter(d=>!!d)},Ci=async(a,t)=>{let n=(await Ii(a,t)).map(r=>r.objectId),o=[];for(let r=0;r<n.length;r++){let i=await _o(a,n[r]);i&&o.push(i)}return o},_o=async(a,t,e)=>{let n=a.address.get("vesca.tableId"),o=t||(await Ii(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:Po(c.locked_sca_amount).toNumber(),lockedScaCoin:Po(c.locked_sca_amount).shiftedBy(-9).toNumber(),unlockAt:Po(c.unlock_at).toNumber()}}return r};var ca=class{params;address;client;utils;constructor(t,e){this.params=t,this.client=t.client;let{address:n,utils:o}=e;this.address=n,this.utils=o}async getObligations(t=this.params.walletAddress){return xt(this,t)}async getCoinAmounts(t,e){return oi(this,t,e)}async getCoinAmount(t,e=this.params.walletAddress){return ri(this,t,e)}async getMarketCoinAmounts(t,e){return ii(this,t,e)}async getMarketCoinAmount(t,e=this.params.walletAddress){return si(this,t,e)}async getPriceFromPyth(t){return wi(this,t)}async getAllStakeAccounts(t=this.params.walletAddress){return Xt(this,t)}async getStakeAccounts(t,e=this.params.walletAddress){return(await this.getAllStakeAccounts(e))[t]??[]}async getStakePools(t=[...ct]){let e={};for(let n=0;n<t.length;n++){let o=t[n],r=await Ao(this,o);r&&(e[o]=r)}return e}async getStakePool(t){return Ao(this,t)}async getStakeRewardPools(t=[...ct]){let e={};for(let n=0;n<t.length;n++){let o=await Do(this,t[n]);o&&(e[t[n]]=o)}return e}async getStakeRewardPool(t){return Do(this,t)}async getBorrowIncentiveAccounts(t,e=this.params.walletAddress,n){return yi(this,t,e,n)}async getObligationCoinNames(t){let e=await ci(this,t),n=e.collaterals.map(s=>`0x${s.type.name}`),o=e.debts.map(s=>`0x${s.type.name}`);return[...new Set([...n,...o])].map(s=>this.utils.parseCoinNameFromType(s))}};import{SUI_TYPE_ARG as Ro,normalizeStructTag as hl}from"@mysten/sui.js/utils";var la=class{params;isTestnet;_address;client;constructor(t,e){this.params=t,this.client=t.client,this._address=e}parseSymbol(t){if(sa(t)){let e=t.slice(1).toLowerCase();return t.slice(0,1).toLowerCase()+Oo(e)}return Oo(t)}parseCoinType(t){let e=sa(t)?this.parseCoinName(t):t,n=ei[e];return[L.wusdc,L.wusdt,L.weth,L.wbtc,L.wsol,L.wapt].includes(n)?`${n}::coin::COIN`:t==="vsui"?`${To.vsui}::cert::CERT`:`${n}::${e}::${e.toUpperCase()}`}parseMarketCoinType(t){let e=this._address.get("core.object")||kn,n=this.parseCoinType(t);return`${e}::reserve::MarketCoin<${n}>`}parseCoinNameFromType(t){let e=hl(t),n=/((0x[^:]+::[^:]+::[^<>]+))(?![^<>]*<)/,o=t.match(n),r=t.includes("reserve::MarketCoin");e=o?.[1]||t;let i={[`${L.wusdc}::coin::COIN`]:"wusdc",[`${L.wusdt}::coin::COIN`]:"wusdt",[`${L.weth}::coin::COIN`]:"weth",[`${L.wbtc}::coin::COIN`]:"wbtc",[`${L.wsol}::coin::COIN`]:"wsol",[`${L.wapt}::coin::COIN`]:"wapt"},s={[`${To.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=>xn[t];getBorrowIncentiveRewardCoinName=t=>ti[t];getCoinDecimal(t){return Zr[t]}getCoinWrappedType(t){return t==="wusdc"||t==="wusdt"||t==="weth"||t==="wbtc"||t==="wapt"||t==="wsol"?{from:"Wormhole",type:"Portal from Ethereum"}:void 0}parseSCoinType(t){return ni[t]}parseUnderlyingSCoinType(t){let e=this.parseCoinName(t);return this.parseCoinType(e)}getSCoinTreasury(t){return this._address.get(`scoin.coins.${t}.treasury`)}async selectCoins(t,e=Ro,n){let o=n,r=[],i=0,s=!0,c=null;for(;s&&i<t;){let d=await this.client.getCoins({owner:o,coinType:e,cursor:c});d.data.sort((l,u)=>parseInt(u.balance,10)-parseInt(l.balance,10));for(let l=0;l<d.data.length&&(r.push({objectId:d.data[l].coinObjectId,digest:d.data[l].digest,version:d.data[l].version,balance:d.data[l].balance}),i+=parseInt(d.data[l].balance,10),!(i>=t));l++);c=d.nextCursor,s=d.hasNextPage}if(!r.length)throw new Error("No valid coins found for the transaction.");return r}async selectCoinsMarketCoin(t=Ro,e){let n=e,o=[],r=!0,i=null;for(;r;){let s=await this.client.getCoins({owner:n,coinType:t,cursor:i});s.data.sort((c,d)=>parseInt(d.balance,10)-parseInt(c.balance,10));for(let c=0;c<s.data.length&&(o.push({objectId:s.data[c].coinObjectId,digest:s.data[c].digest,version:s.data[c].version,balance:s.data[c].balance}),!(o.length>50));c++);i=s.nextCursor,r=s.hasNextPage}return o}async selectCoinIds(t,e=Ro,n){return(await this.selectCoins(t,e,n)).map(r=>r.objectId)}parseAprToApy(t,e=365){return(1+t/e)**e-1}parseApyToApr(t,e=365){return((1+t)**(1/e)-1)*e}takeAmountFromCoins(t,e,n){let o=e.map(s=>t.object(s)),r=o[0];o.length>1&&t.mergeCoins(r,o.slice(1));let[i]=t.splitCoins(r,[t.pure(n)]);return[i,r]}getUnlockAt(t,e){let n=Math.floor(new Date().getTime()/1e3),o=e?Math.max(e-n,0):0,r=0;if(o===0){let i=(t??1)*86400;r=Math.min(n+i,n+126144e3)}else{let i=Math.min(t?t*86400+o:o,126144e3);r=n+i}return hi(r)}parseSCoinName(t){if(sa(t)&&J.includes(t))return t;let e=`s${t}`;if(J.includes(e))return e}};import{SUI_CLOCK_OBJECT_ID as Dt,SUI_TYPE_ARG as yl}from"@mysten/sui.js/utils";var Ot=async(...a)=>{let[t,e,n]=a;if(a.length===3&&n&&typeof n=="string"){let i=await _o(t.query,n);return i||void 0}let o=B(e),r=await Ci(t.query,o);if(r.length!==0)return r[0]};var jo=async(...a)=>{let[t,e,n,o]=a;if(a.length===4&&n&&o&&typeof n=="string"){let c=await xo(t.query,n);return{obligationId:n,obligationKey:o,obligationLocked:c}}let r=B(e),i=await xt(t.query,r);if(i.length===0)throw new Error(`No obligation found for sender ${r}`);let s=i.find(c=>c.id===n||c.keyId===o)??i[0];return{obligationId:s.id,obligationKey:s.keyId,obligationLocked:s.locked}},Sl=async({builder:a,txBlock:t})=>{let e={borrowIncentivePkg:a.address.get("borrowIncentive.id"),query:a.address.get("borrowIncentive.query"),incentivePools:a.address.get("borrowIncentive.incentivePools"),incentiveAccounts:a.address.get("borrowIncentive.incentiveAccounts"),obligationAccessStore:a.address.get("core.obligationAccessStore"),config:a.address.get("borrowIncentive.config")},n={id:"0xc63072e7f5f4983a2efaf5bdba1480d5e7d74d57948e1c7cc436f8e22cbeb410",incentivePools:"0x64972b713ccec45ec3964809e477cea6f97350c0c50ca3aec85bb631639266ec",incentiveAccounts:"0x3c0b707068bdcea8bb859d751ad3e2149a9f83c13fcf4054ef91372a00bccdd3"},o={table:a.address.get("vesca.table"),treasury:a.address.get("vesca.treasury"),config:a.address.get("vesca.config")};return{stakeObligation:(r,i)=>{t.moveCall({target:`${e.borrowIncentivePkg}::user::stake`,arguments:[t.object(e.config),t.object(e.incentivePools),t.object(e.incentiveAccounts),t.object(i),t.object(r),t.object(e.obligationAccessStore),t.object(Dt)]})},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(Dt)]})},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(Dt)]})},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(Dt)],typeArguments:[yl]})},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(Dt)],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(Dt)],typeArguments:[c]})}}},N=async({builder:a,txBlock:t})=>{let e=await Sl({builder:a,txBlock:t});return{normalMethod:e,stakeObligationQuick:async(n,o)=>{let{obligationId:r,obligationKey:i,obligationLocked:s}=await jo(a,t,n,o),c=!!t.blockData.transactions.find(d=>d.kind==="MoveCall"&&(d.target===`${st}::user::unstake`||d.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 jo(a,t,n,o);s&&e.unstakeObligation(r,i)},stakeObligationWithVeScaQuick:async(n,o,r)=>{let{obligationId:i,obligationKey:s,obligationLocked:c}=await jo(a,t,n,o),d=!!t.blockData.transactions.find(async l=>l.kind==="MoveCall"&&(l.target===`${st}::user::unstake`||l.target===`${a.address.get("borrowIncentive.id")}::user::unstake`));if(!c||d){let l=await Si({address:a.address,client:a.client},i);if(r&&r!==l)throw new Error("Binded veScaKey is not equal to the provided veScaKey");l?e.stakeObligationWithVesca(i,s,l):e.stakeObligation(i,s)}},claimBorrowIncentiveQuick:(n,o,r)=>e.claimBorrowIncentive(o,r,n)}};import{SUI_CLOCK_OBJECT_ID as Y}from"@mysten/sui.js/utils";import{SUI_CLOCK_OBJECT_ID as pa}from"@mysten/sui.js/utils";import wl from"axios";var Ti={testnet:["https://hermes-beta.pyth.network"],mainnet:["https://hermes.pyth.network","https://scallop.rpc.p2p.world"]};import{bcs as Bo}from"@mysten/sui.js/bcs";import{SUI_CLOCK_OBJECT_ID as da}from"@mysten/sui.js/utils";var No=16*1024,ua=class{provider;pythStateId;wormholeStateId;pythPackageId;wormholePackageId;priceTableInfo;priceFeedObjectIdCache=new Map;baseUpdateFee;constructor(t,e,n){this.provider=t,this.pythStateId=e,this.wormholeStateId=n,this.pythPackageId=void 0,this.wormholePackageId=void 0}async getBaseUpdateFee(){if(this.baseUpdateFee===void 0){let t=await this.provider.getObject({id:this.pythStateId,options:{showContent:!0}});if(!t.data||!t.data.content||t.data.content.dataType!=="moveObject")throw new Error("Unable to fetch pyth state object");this.baseUpdateFee=t.data.content.fields.base_update_fee}return this.baseUpdateFee}async getPackageId(t){let e=await this.provider.getObject({id:t,options:{showContent:!0}}).then(n=>{if(n.data?.content?.dataType==="moveObject")return n.data.content.fields;throw new Error(`Cannot fetch package id for object ${t}`)});if("upgrade_cap"in e)return e.upgrade_cap.fields.package;throw new Error("upgrade_cap not found")}async verifyVaas(t,e){let n=await this.getWormholePackageId(),o=[];return t.forEach(r=>{let[i]=e.moveCall({target:`${n}::vaa::parse_and_verify`,arguments:[e.object(this.wormholeStateId),e.pure(Bo.ser("vector<u8>",Array.from(r),{maxSize:No}).toBytes()),e.object(da)]});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(Bo.ser("vector<u8>",Array.from(e[0]),{maxSize:No}).toBytes()),s[0],t.object(da)]});let c=[],d=await this.getBaseUpdateFee(),l=t.splitCoins(t.gas,n.map(()=>t.pure(d))),u=0;for(let p=0;p<n.length;p++){let m=await this.getPriceFeedObjectId(n[p]);if(!m)throw new Error(`Price feed ${n[0]} not found, please create it first`);c.push(m),[r]=t.moveCall({target:`${o}::pyth::update_single_price_feed`,arguments:[t.object(this.pythStateId),r,t.object(m),l[u],t.object(da)]}),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(Bo.ser("vector<u8>",Array.from(e[0]),{maxSize:No}).toBytes()),r[0],t.object(da)]})}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 Il=async(a,t)=>(await wl.get(`${a}/api/latest_vaas`,{params:{ids:t}})).data.map(o=>Buffer.from(o,"base64")),Yt=async(a,t,e)=>{let n=e??[...new Set([...z,...vn])],o=a.isTestnet?["pyth"]:["pyth"];if(o.includes("pyth")){let i=new ua(a.client,a.address.get("core.oracles.pyth.state"),a.address.get("core.oracles.pyth.wormholeState")),s=[];await Promise.all(n.map(async d=>s.push(a.address.get(`core.coins.${d}.oracle.pyth.feed`))));let c=a.params.pythEndpoints??Ti[a.isTestnet?"testnet":"mainnet"];try{let d=await Il(c[0],s);await i.updatePriceFeeds(t,d,s)}catch(d){console.warn(`Failed to update price feeds with endpoint ${c[0]}: ${d}`)}}let r=[...new Set(n)];for(let i=0;i<r.length;i++)await Cl(a,t,r[i],o)},Cl=async(a,t,e,n)=>{let o=a.utils.parseCoinType(e);Tl(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)},Tl=(a,t,e,n,o,r,i,s,c,d,l,u,p,m,f)=>{let S=kl(a,e,n,f);return t.includes("pyth")&&Dl(a,o,S,i,s,r,f),t.includes("switchboard")&&Al(a,c,S,l,d,f),t.includes("supra")&&xl(a,u,S,m,p,f),vl(a,e,n,S,f),a},kl=(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})},vl=(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(pa)],typeArguments:i}),a},xl=(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(pa)],typeArguments:[r]})},Al=(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(pa)],typeArguments:[r]})},Dl=(a,t,e,n,o,r,i)=>{let s=typeof e=="string"?a.object(e):e,c=typeof n=="string"?a.object(n):n,d=typeof o=="string"?a.object(o):o,l=typeof r=="string"?a.object(r):r;a.moveCall({target:`${t}::rule::set_price`,arguments:[s,c,d,l,a.object(pa)],typeArguments:[i]})};var ut=async({builder:a,txBlock:t})=>{let e={pkgId:a.address.get("scoin.id")},n={};return await Promise.all(J.map(async o=>{let r=a.utils.getSCoinTreasury(o);n[o]=r})),{mintSCoin:(o,r)=>t.moveCall({target:`${e.pkgId}::s_coin_converter::mint_s_coin`,arguments:[t.object(n[o]),typeof r!="string"?r:t.pure(r)],typeArguments:[a.utils.parseSCoinType(o),a.utils.parseUnderlyingSCoinType(o)]}),burnSCoin:(o,r)=>t.moveCall({target:`${e.pkgId}::s_coin_converter::burn_s_coin`,arguments:[t.object(n[o]),typeof r!="string"?r:t.pure(r)],typeArguments:[a.utils.parseSCoinType(o),a.utils.parseUnderlyingSCoinType(o)]})}};var Zt=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=B(t),i=await xt(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}},Ol=async({builder:a,txBlock:t})=>{let e={protocolPkg:a.address.get("core.packages.protocol.id"),market:a.address.get("core.market"),version:a.address.get("core.version"),coinDecimalsRegistry:a.address.get("core.coinDecimalsRegistry"),xOracle:a.address.get("core.oracles.xOracle")},o=`${a.address.get("referral.id")}::scallop_referral_program::REFERRAL_WITNESS`;return{openObligation:()=>t.moveCall({target:`${e.protocolPkg}::open_obligation::open_obligation`,arguments:[t.object(e.version)]}),returnObligation:(r,i)=>t.moveCall({target:`${e.protocolPkg}::open_obligation::return_obligation`,arguments:[t.object(e.version),t.object(r),t.object(i)]}),openObligationEntry:()=>t.moveCall({target:`${e.protocolPkg}::open_obligation::open_obligation_entry`,arguments:[t.object(e.version)]}),addCollateral:(r,i,s)=>{let c=a.utils.parseCoinType(s);return t.moveCall({target:`${e.protocolPkg}::deposit_collateral::deposit_collateral`,arguments:[t.object(e.version),t.object(r),t.object(e.market),typeof i!="string"?i:t.pure(i)],typeArguments:[c]})},takeCollateral:(r,i,s,c)=>{let d=a.utils.parseCoinType(c);return t.moveCall({target:`${e.protocolPkg}::withdraw_collateral::withdraw_collateral`,arguments:[t.object(e.version),t.object(r),t.object(i),t.object(e.market),t.object(e.coinDecimalsRegistry),t.pure(s),t.object(e.xOracle),t.object(Y)],typeArguments:[d]})},deposit:(r,i)=>{let s=a.utils.parseCoinType(i);return t.moveCall({target:`${e.protocolPkg}::mint::mint`,arguments:[t.object(e.version),t.object(e.market),typeof r!="string"?r:t.pure(r),t.object(Y)],typeArguments:[s]})},depositEntry:(r,i)=>{let s=a.utils.parseCoinType(i);return t.moveCall({target:`${e.protocolPkg}::mint::mint_entry`,arguments:[t.object(e.version),t.object(e.market),typeof r!="string"?r:t.pure(r),t.object(Y)],typeArguments:[s]})},withdraw:(r,i)=>{let s=a.utils.parseCoinType(i);return t.moveCall({target:`${e.protocolPkg}::redeem::redeem`,arguments:[t.object(e.version),t.object(e.market),typeof r!="string"?r:t.pure(r),t.object(Y)],typeArguments:[s]})},withdrawEntry:(r,i)=>{let s=a.utils.parseCoinType(i);return t.moveCall({target:`${e.protocolPkg}::redeem::redeem_entry`,arguments:[t.object(e.version),t.object(e.market),typeof r!="string"?r:t.pure(r),t.object(Y)],typeArguments:[s]})},borrow:(r,i,s,c)=>{let d=a.utils.parseCoinType(c);return t.moveCall({target:`${e.protocolPkg}::borrow::borrow`,arguments:[t.object(e.version),t.object(r),t.object(i),t.object(e.market),t.object(e.coinDecimalsRegistry),t.pure(s),t.object(e.xOracle),t.object(Y)],typeArguments:[d]})},borrowEntry:(r,i,s,c)=>{let d=a.utils.parseCoinType(c);return t.moveCall({target:`${e.protocolPkg}::borrow::borrow_entry`,arguments:[t.object(e.version),t.object(r),t.object(i),t.object(e.market),t.object(e.coinDecimalsRegistry),t.pure(s),t.object(e.xOracle),t.object(Y)],typeArguments:[d]})},borrowWithReferral:(r,i,s,c,d)=>{let l=a.utils.parseCoinType(d);return t.moveCall({target:`${e.protocolPkg}::borrow::borrow_with_referral`,arguments:[t.object(e.version),t.object(r),t.object(i),t.object(e.market),t.object(e.coinDecimalsRegistry),t.object(s),t.pure(c),t.object(e.xOracle),t.object(Y)],typeArguments:[l,o]})},repay:(r,i,s)=>{let c=a.utils.parseCoinType(s);return t.moveCall({target:`${e.protocolPkg}::repay::repay`,arguments:[t.object(e.version),t.object(r),t.object(e.market),typeof i!="string"?i:t.pure(i),t.object(Y)],typeArguments:[c]})},borrowFlashLoan:(r,i)=>{let s=a.utils.parseCoinType(i);return t.moveCall({target:`${e.protocolPkg}::flash_loan::borrow_flash_loan`,arguments:[t.object(e.version),t.object(e.market),t.pure(r)],typeArguments:[s]})},repayFlashLoan:(r,i,s)=>{let c=a.utils.parseCoinType(s);return t.moveCall({target:`${e.protocolPkg}::flash_loan::repay_flash_loan`,arguments:[t.object(e.version),t.object(e.market),t.pure(r),t.object(i)],typeArguments:[c]})}}},M=async({builder:a,txBlock:t})=>{let e=await Ol({builder:a,txBlock:t}),n=await ut({builder:a,txBlock:t});return{normalMethod:e,addCollateralQuick:async(o,r,i)=>{let s=B(t),{obligationId:c}=await Zt(t,a,i);if(r==="sui"){let[d]=t.splitCoins(t.gas,[o]);e.addCollateral(c,d,r)}else{let{leftCoin:d,takeCoin:l}=await a.selectCoin(t,r,o,s);e.addCollateral(c,l,r),t.transferObjects([d],s)}},takeCollateralQuick:async(o,r,i,s)=>{let c=await Zt(t,a,i,s),d=await a.query.getObligationCoinNames(c.obligationId);return await Yt(a,t,d),e.takeCollateral(c.obligationId,c.obligationKey,o,r)},depositQuick:async(o,r,i)=>{if(r==="sui"){let[d]=t.splitCoins(t.gas,[o]);return e.deposit(d,r)}let{leftCoin:s,takeCoin:c}=await a.selectCoin(t,r,o,i);return t.transferObjects([s],i),e.deposit(c,r)},withdrawQuick:async(o,r)=>{let i=B(t),s=a.utils.parseMarketCoinName(r);try{let c=a.utils.parseSCoinName(r);if(!c)throw new Error(`No sCoin for ${r}`);let{leftCoin:d,takeCoin:l,totalAmount:u}=await a.selectSCoin(t,c,o,i);t.transferObjects([d],i);let p=n.burnSCoin(c,l),m=e.withdraw(p,r),f=o-u;try{if(f>0){let{leftCoin:S,takeCoin:w}=await a.selectMarketCoin(t,s,f,i);t.transferObjects([S],i),t.mergeCoins(m,[e.withdraw(w,r)])}}catch{}return m}catch{let{leftCoin:d,takeCoin:l}=await a.selectMarketCoin(t,s,o,i);return t.transferObjects([d],i),e.withdraw(l,r)}},borrowQuick:async(o,r,i,s)=>{let c=await Zt(t,a,i,s),l=[...await a.query.getObligationCoinNames(c.obligationId),r];return await Yt(a,t,l),e.borrow(c.obligationId,c.obligationKey,o,r)},borrowWithReferralQuick:async(o,r,i,s,c)=>{let d=await Zt(t,a,s,c),u=[...await a.query.getObligationCoinNames(d.obligationId),r];return await Yt(a,t,u),e.borrowWithReferral(d.obligationId,d.obligationKey,i,o,r)},repayQuick:async(o,r,i,s)=>{let c=await Zt(t,a,i);if(r==="sui"){let[u]=t.splitCoins(t.gas,[o]);return e.repay(c.obligationId,u,r)}let{leftCoin:d,takeCoin:l}=await a.selectCoin(t,r,o,s);return t.transferObjects([d],s),e.repay(c.obligationId,l,r)},updateAssetPricesQuick:async o=>Yt(a,t,o)}};import{SUI_CLOCK_OBJECT_ID as ma}from"@mysten/sui.js/utils";var fa=async({builder:a,txBlock:t})=>{let e={referralPgkId:a.address.get("referral.id"),referralBindings:a.address.get("referral.referralBindings"),referralRevenuePool:a.address.get("referral.referralRevenuePool"),authorizedWitnessList:a.address.get("referral.authorizedWitnessList"),referralTiers:a.address.get("referral.referralTiers"),version:a.address.get("referral.version")},n=a.address.get("vesca.table");return{bindToReferral:o=>t.moveCall({target:`${e.referralPgkId}::referral_bindings::bind_ve_sca_referrer`,arguments:[t.object(e.referralBindings),t.pure(o),t.object(n),t.object(ma)],typeArguments:[]}),claimReferralTicket:o=>{let r=a.utils.parseCoinType(o);return t.moveCall({target:`${e.referralPgkId}::scallop_referral_program::claim_ve_sca_referral_ticket`,arguments:[t.object(e.version),t.object(n),t.object(e.referralBindings),t.object(e.authorizedWitnessList),t.object(e.referralTiers),t.object(ma)],typeArguments:[r]})},burnReferralTicket:(o,r)=>{let i=a.utils.parseCoinType(r);return t.moveCall({target:`${e.referralPgkId}::scallop_referral_program::burn_ve_sca_referral_ticket`,arguments:[t.object(e.version),t.object(o),t.object(e.referralRevenuePool),t.object(ma)],typeArguments:[i]})},claimReferralRevenue:(o,r)=>{let i=a.utils.parseCoinType(r);return t.moveCall({target:`${e.referralPgkId}::referral_revenue_pool::claim_revenue_with_ve_sca_key`,arguments:[t.object(e.version),t.object(e.referralRevenuePool),t.object(o),t.object(ma)],typeArguments:[i]})}}},ki=async({builder:a,txBlock:t})=>{let e=await fa({builder:a,txBlock:t});return{claimReferralRevenueQuick:async(n,o,r=[...z])=>{let i=[];for(let s=0;s<r.length;s++)if(r[s]==="sui"){let c=e.claimReferralRevenue(n,r[s]);i.push(c)}else{let c=e.claimReferralRevenue(n,r[s]);try{let d=await a.utils.selectCoinIds(1/0,a.utils.parseCoinType(r[s]),o);t.mergeCoins(c,d.slice(0,500))}catch{}finally{i.push(c)}}i.length>0&&t.transferObjects(i,t.pure(o))}}};var Pl={packageId:"0x5857d185897aaff40ae37b2eecc895efc1a9dff1b210c4fb894eabbce4ac2603"},vi={check_slippage:(a,t,e,n,o)=>a.moveCall({target:`${Pl.packageId}::slippage_check::check_slippage`,arguments:[t,a.pure(e),a.pure(n)],typeArguments:[o]})};import{SUI_CLOCK_OBJECT_ID as ba}from"@mysten/sui.js/utils";var xi=async(a,t,e,n,o,r,i=!1)=>{let s=await ut({builder:a,txBlock:t}),c=await Di({builder:a,txBlock:t});try{let{takeCoin:d,leftCoin:l,totalAmount:u}=i?await a.selectSCoin(t,n,o,r):await a.selectMarketCoin(t,n,o,r);if(i){let p=s.burnSCoin(n,d);c.stake(e,p,n)}else c.stake(e,d,n);return t.transferObjects([l],r),u}catch{return 0}},Ai=async(...a)=>{let[t,e,n,o]=a;if(a.length===4&&o)return[o];let r=B(e);return(await Xt(t.query,r))[n].map(s=>s.id)},_l=async(...a)=>{let[t,e,n,o]=a,r=B(e),i=await Xt(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]},Di=async({builder:a,txBlock:t})=>{let e={spoolPkg:a.address.get("spool.id")},n={},o={},r={};return ct.forEach(i=>{let s=a.address.get(`spool.pools.${i}.id`),c=a.address.get(`spool.pools.${i}.rewardPoolId`),d=a.utils.parseMarketCoinType(i);n[i]=s,o[i]=c,r[i]=d}),{createStakeAccount:i=>{let s=r[i],c=n[i];return t.moveCall({target:`${e.spoolPkg}::user::new_spool_account`,arguments:[t.object(c),t.object(ba)],typeArguments:[s]})},stake:(i,s,c)=>{let d=r[c],l=n[c];t.moveCall({target:`${e.spoolPkg}::user::stake`,arguments:[t.object(l),t.object(i),typeof s=="string"?t.pure(s):s,t.object(ba)],typeArguments:[d]})},unstake:(i,s,c)=>{let d=r[c],l=n[c];return t.moveCall({target:`${e.spoolPkg}::user::unstake`,arguments:[t.object(l),t.object(i),t.pure(s),t.object(ba)],typeArguments:[d]})},claim:(i,s)=>{let c=n[s],d=o[s],l=r[s],u=xn[s],p=a.utils.parseCoinType(u);return t.moveCall({target:`${e.spoolPkg}::user::redeem_rewards`,arguments:[t.object(c),t.object(d),t.object(i),t.object(ba)],typeArguments:[l,p]})}}},Z=async({builder:a,txBlock:t})=>{let e=await Di({builder:a,txBlock:t}),n=await ut({builder:a,txBlock:t});return{normalMethod:e,stakeQuick:async(o,r,i)=>{let s=B(t),c=await Ai(a,t,r,i),d=[];if(c.length===0){let l=e.createStakeAccount(r);d.push(l)}if(typeof o=="number"){let l=await xi(a,t,c.length>0?c[0]:d[0],r,o,s);o-=l,l||await xi(a,t,c.length>0?c[0]:d[0],r,o,s,!0)}else e.stake(c.length>0?c[0]:d[0],o,r);d.length>0&&t.transferObjects(d,s)},unstakeQuick:async(o,r,i,s)=>{let c=await _l(a,t,r,i),d=[],l=o;for(let u of c){if(u.staked===0)continue;let p=Math.min(l,u.staked),m=e.unstake(u.id,p,r);if(s){let f=n.mintSCoin(r,m);d.push(f)}else d.push(m);if(l-=p,o<=0)break}if(d.length>0){let u=d[0];return d.length>1&&t.mergeCoins(u,d.slice(1)),u}},claimQuick:async(o,r)=>{let i=await Ai(a,t,o,r),s=[];return i.forEach(c=>{let d=e.claim(c,o);s.push(d)}),s}}};import{SUI_CLOCK_OBJECT_ID as te}from"@mysten/sui.js/utils";var Rl=async({builder:a,txBlock:t})=>{let e={pkgId:a.address.get("vesca.id"),table:a.address.get("vesca.table"),treasury:a.address.get("vesca.treasury"),config:a.address.get("vesca.config")};return{lockSca:(n,o)=>t.moveCall({target:`${e.pkgId}::ve_sca::mint_ve_sca_key`,arguments:[t.object(e.config),t.object(e.table),t.object(e.treasury),typeof n=="string"?t.pure(n):n,t.pure(o),t.object(te)]}),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(te)]})},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(te)]})},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(te)]})},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(te)]}),mintEmptyVeSca:()=>t.moveCall({target:`${e.pkgId}::ve_sca::mint_ve_sca_placeholder_key`,arguments:[t.object(e.config),t.object(e.table)],typeArguments:[]})}},pt=async({builder:a,txBlock:t})=>{let e=await Rl({builder:a,txBlock:t});return{normalMethod:e,lockScaQuick:async(n,o,r=!0)=>{let i=B(t),s=await Ot(a,t),c,d=[];if(n!==void 0&&typeof n=="number"){let m=await a.utils.selectCoinIds(n,it,i),[f,S]=a.utils.takeAmountFromCoins(t,m,n);c=f,d.push(S)}else c=n;let l=a.utils.getUnlockAt(o,s?.unlockAt);r&&ui(n,o,l,s?.unlockAt),console.log(new Date(l*1e3).toLocaleString("en-CA",{hour12:!0}));let u=!s?.unlockAt,p=!u&&s.unlockAt*1e3<=new Date().getTime();if(u||p){if(c)if(u){let m=e.lockSca(c,l);d.push(m)}else{if(s.lockedScaAmount!==0){let m=e.redeemSca(s.keyId);d.push(m)}e.renewExpiredVeSca(s.keyId,c,l)}}else c&&o?(e.extendLockPeriod(s.keyId,l),e.extendLockAmount(s.keyId,c)):o?e.extendLockPeriod(s.keyId,l):c&&e.extendLockAmount(s.keyId,c);d.length>0&&t.transferObjects(d,i)},extendLockPeriodQuick:async(n,o,r=!0)=>{let i=await Ot(a,t,o),s=a.utils.getUnlockAt(n);r&&pi(n,s,i?.unlockAt),i&&e.extendLockPeriod(i.keyId,s)},extendLockAmountQuick:async(n,o,r=!0)=>{let i=B(t),s=await Ot(a,t,o);if(r&&mi(n,s?.unlockAt),s){let c=await a.utils.selectCoinIds(n,it,i),[d,l]=a.utils.takeAmountFromCoins(t,c,n);e.extendLockAmount(s.keyId,d),t.transferObjects([l],i)}},renewExpiredVeScaQuick:async(n,o,r,i=!0)=>{let s=B(t),c=await Ot(a,t,r),d=a.utils.getUnlockAt(o,c?.unlockAt);if(i&&fi(n,o,c?.unlockAt),c){let l=[];if(c.lockedScaAmount!==0){let f=e.redeemSca(c.keyId);l.push(f)}let u=await a.utils.selectCoinIds(n,it,s),[p,m]=a.utils.takeAmountFromCoins(t,u,n);l.push(m),e.renewExpiredVeSca(c.keyId,p,d),t.transferObjects(l,s)}},redeemScaQuick:async n=>{let o=B(t),r=await Ot(a,t,n);if(At(r?.unlockAt),r){let i=e.redeemSca(r.keyId);t.transferObjects([i],o)}}}};import{normalizeStructTag as Nl}from"@mysten/sui.js/utils";import{SUI_CLOCK_OBJECT_ID as jl}from"@mysten/sui.js/utils";var Pt={id:"0x000000000000000000000000000000000000000000000000000000000000dee9",pools:{sui2usdc:{object:{objectId:"0x4405b50d791fd3346754e8171aaab6bc2ed26c2c46efdd033c14b30ae507ac33",initialSharedVersion:"32079148",mutable:!0},lotsize:1e8},usdt2usdc:{object:{objectId:"0xd1f0a9baacc1864ab19534e2d4c5d6c14f2e071a1f075e8e7f9d51f2c17dc238",initialSharedVersion:"32079148",mutable:!0},lotsize:1e5},wusdc2usdc:{object:{objectId:"0x39f2f7c126189b9b5cda6b770ab34031dde22307d19842e95ab576873c77fa14",initialSharedVersion:"82838334",mutable:!0},lotsize:1e5}}},Oi={id:"0x000000000000000000000000000000000000000000000000000000000000dee9"},Mo={id:"0x2c6c36393db063a9534885d22a47caead720272475336470736be28f119971f3"},Pi={clob_v2:{swap_exact_quote_for_base:"clob_v2::swap_exact_quote_for_base",swap_exact_base_for_quote:"clob_v2::swap_exact_base_for_quote",create_account:"clob_v2::create_account"}};var _i={objectId:jl,initialSharedVersion:"1",mutable:!1},Bl=(a,t)=>{if(a==="sui")switch(t){case"wusdc":return{pool:Pt.pools.sui2usdc,aToB:!0};default:throw new Error(`Invalid coin pair: ${a} and ${t}`)}else if(a==="wusdc")switch(t){case"sui":return{pool:Pt.pools.sui2usdc,aToB:!1};case"wusdt":return{pool:Pt.pools.usdt2usdc,aToB:!1};case"usdc":return{pool:Pt.pools.wusdc2usdc,aToB:!0};default:throw new Error(`Invalid coin pair: ${a} and ${t}`)}else if(a==="wusdt")switch(t){case"wusdc":return{pool:Pt.pools.usdt2usdc,aToB:!0};default:throw new Error(`Invalid coin pair: ${a} and ${t}`)}else throw new Error(`Invalid coin pair: ${a} and ${t}`)},Eo={createAccount:a=>a.moveCall({target:`${Oi.id}::${Pi.clob_v2.create_account}`,arguments:[],typeArguments:[]}),swap:(a,t,e,n,o,r,i)=>{let{pool:s,aToB:c}=Bl(e,n),d=i.parseCoinType(e),l=i.parseCoinType(n),u=typeof r=="string"?a.object(r):"objectId"in r?a.objectRef(r):a.object(r);if(!s)throw new Error(`Deepbook: No pool found for ${e} to ${n}`);return c?a.moveCall({target:`${Mo.id}::deepbook::deepbook_base_for_quote`,arguments:[a.sharedObjectRef(s.object),a.pure(o),u,a.object(t),a.sharedObjectRef(_i),a.pure(s.lotsize)],typeArguments:[d,l]}):a.moveCall({target:`${Mo.id}::deepbook::deepbook_quote_for_base`,arguments:[a.sharedObjectRef(s.object),a.pure(o),u,a.sharedObjectRef(_i),a.object(t),a.pure(s.lotsize)],typeArguments:[l,d]})}};var ga=class{suiClient;scallopUtils;_clientOrderId=0;_accountCap;currentAddress;constructor({client:t,currentAddress:e,accountCap:n,scallopUtils:o}){this.currentAddress=e,this.suiClient=t,this._accountCap=n,this.scallopUtils=o}get clientOrderId(){let t=this._clientOrderId;return this._clientOrderId++,t}async accountCap(t){if(this._accountCap)return this._accountCap;try{let{data:e}=await this.suiClient.getOwnedObjects({owner:this.currentAddress,filter:{StructType:Nl("0xdee9::custodian_v2::AccountCap")},limit:1});return e.length===0||!e[0].data?Eo.createAccount(t):{objectId:e[0].data.objectId,version:e[0].data.version,digest:e[0].data.digest}}catch{throw new Error("Failed to create account cap")}}async swapToken({tokenObjectIn:t,baseCoinName:e,quoteCoinName:n,tx:o}){let r=await this.accountCap(o);return{swapResult:Eo.swap(o,t,e,n,this.clientOrderId,r,this.scallopUtils),accountCap:r}}};var ha=class{params;client;address;builder;query;utils;walletAddress;deepbookSwap;constructor(t,e){this.params=t,this.client=t.client,this.address=e,this.utils=new la(t,this.address),this.query=new ca(t,{address:this.address,utils:this.utils}),this.builder=new oa(t,{address:this.address,query:this.query,utils:this.utils}),this.deepbookSwap=new ga({client:this.client,currentAddress:this.params.walletAddress,scallopUtils:this.utils})}async getObligations(t){let e=t||this.params.walletAddress;return this.query.getObligations(e)}async getAllStakeAccounts(t){let e=t||this.params.walletAddress;return this.query.getAllStakeAccounts(e)}async getStakeAccounts(t,e){let n=e||this.params.walletAddress;return this.query.getStakeAccounts(t,n)}async getStakePool(t){return this.query.getStakePool(t)}async getStakeRewardPool(t){return this.query.getStakeRewardPool(t)}async openObligation(t){let e=new T,n=await M({builder:this.builder,txBlock:e}),o=await N({builder:this.builder,txBlock:e}),r=t||this.params.walletAddress;e.setSender(r);let[i,s,c]=n.normalMethod.openObligation();return o.normalMethod.stakeObligation(i,s),n.normalMethod.returnObligation(i,c),e.transferObjects([s],r),e}async depositCollateral(t,e,n,o){let r=new T,i=o||this.params.walletAddress;r.setSender(i);let s=await M({builder:this.builder,txBlock:r}),c=await this.query.getObligations(i),d=n||c?.[0]?.id;if(d)await s.addCollateralQuick(e,t,d);else{let[l,u,p]=s.normalMethod.openObligation();await s.addCollateralQuick(e,t,l),s.normalMethod.returnObligation(l,p),r.transferObjects([u],i)}return r}async withdrawCollateral(t,e,n,o,r){let i=new T,s=await M({builder:this.builder,txBlock:i}),c=r||this.params.walletAddress;i.setSender(c);let d=await s.takeCollateralQuick(e,t,n,o);return i.transferObjects([d],c),i}async deposit(t,e,n){let o=new T,r=await M({builder:this.builder,txBlock:o}),i=await ut({builder:this.builder,txBlock:o}),s=n||this.params.walletAddress;o.setSender(s);let c=await r.depositQuick(e,t,n),d=this.utils.parseMarketCoinName(t);if(!J.includes(d))o.transferObjects([c],s);else{let l=i.mintSCoin(d,c);o.transferObjects([l],s)}return o}async withdraw(t,e,n){let o=new T,r=n||this.params.walletAddress,i=await M({builder:this.builder,txBlock:o});o.setSender(r);let s=await i.withdrawQuick(e,t);return o.transferObjects([s],r),o}async borrow(t,e,n,o,r){let i=new T,s=await M({builder:this.builder,txBlock:i}),c=await N({builder:this.builder,txBlock:i}),d=r||this.params.walletAddress;i.setSender(d);let l=lt.includes(t);l&&await c.unstakeObligationQuick(n,o);let u=await s.borrowQuick(e,t,n,o);return i.transferObjects([u],d),l&&await c.stakeObligationQuick(n,o),i}async borrowWithBoost(t,e,n,o,r,i){let s=new T,c=await M({builder:this.builder,txBlock:s}),d=await N({builder:this.builder,txBlock:s}),l=i||this.params.walletAddress;s.setSender(l);let u=lt.includes(t);u&&await d.unstakeObligationQuick(n,o);let p=await c.borrowQuick(e,t,n,o);return s.transferObjects([p],l),u&&await d.stakeObligationWithVeScaQuick(n,o,r),s}async borrowWithReferral(t,e,n,o,r,i){let s=new T,c=await M({builder:this.builder,txBlock:s}),d=await N({builder:this.builder,txBlock:s}),l=await fa({builder:this.builder,txBlock:s}),u=i||this.params.walletAddress;s.setSender(u);let p=lt.includes(t);p&&await d.unstakeObligationQuick(n,o);let m=l.claimReferralTicket(t),f=await c.borrowWithReferralQuick(e,t,m,n,o);return l.burnReferralTicket(m,t),s.transferObjects([f],u),p&&r?await d.stakeObligationWithVeScaQuick(n,o,r):await d.stakeObligationQuick(n,o),s}async repay(t,e,n,o,r){let i=new T,s=await M({builder:this.builder,txBlock:i}),c=await N({builder:this.builder,txBlock:i}),d=r||this.params.walletAddress;i.setSender(d);let l=lt.includes(t);return l&&await c.unstakeObligationQuick(n,o),await s.repayQuick(e,t,n,d),l&&await c.stakeObligationQuick(n,o),i}async repayWithBoost(t,e,n,o,r){let i=new T,s=await M({builder:this.builder,txBlock:i}),c=await N({builder:this.builder,txBlock:i}),d=r||this.params.walletAddress;i.setSender(d);let l=lt.includes(t);return l&&await c.unstakeObligationQuick(n,void 0),await s.repayQuick(e,t,n,d),l&&await c.stakeObligationWithVeScaQuick(n,void 0,o),i}async createStakeAccount(t,e){let n=new T,o=await Z({builder:this.builder,txBlock:n}),r=e||this.params.walletAddress;n.setSender(r);let i=o.normalMethod.createStakeAccount(t);return n.transferObjects([i],r),n}async supplyAndStake(t,e,n,o){let r=new T,i=await M({builder:this.builder,txBlock:r}),s=await Z({builder:this.builder,txBlock:r}),c=o||this.params.walletAddress;r.setSender(c);let d=await i.depositQuick(e,t,o),l=this.utils.parseMarketCoinName(t);if(!ct.find(m=>m===l))return r;let u=await this.query.getStakeAccounts(l,c),p=n||(u.length>0?u[0].id:void 0);if(p)await s.stakeQuick(d,l,p);else{let m=s.normalMethod.createStakeAccount(l);await s.stakeQuick(d,l,m),r.transferObjects([m],c)}return r}async unstakeAndWithdraw(t,e,n){let o=new T,r=await M({builder:this.builder,txBlock:o}),i=await Z({builder:this.builder,txBlock:o}),s=this.params.walletAddress,c=[];o.setSender(s);let d=this.utils.parseMarketCoinName(t);for(let l=0;l<n.length;l++){let u=n[l],[p]=await i.unstakeQuick(u.coin,d,u.id);if(p){let m=r.normalMethod.withdraw(p,t);c.push(m)}}if(e>0){let l=await r.withdrawQuick(e,t);c.push(l)}return c.length>1&&o.mergeCoins(c[0],c.slice(1)),o.transferObjects(c,s),o}async stake(t,e,n,o){let r=new T,i=await Z({builder:this.builder,txBlock:r}),s=o||this.params.walletAddress;r.setSender(s);let c=await this.query.getStakeAccounts(t,s),d=n||(c.length>0?c[0].id:void 0);if(d)await i.stakeQuick(e,t,d);else{let l=i.normalMethod.createStakeAccount(t);await i.stakeQuick(e,t,l),r.transferObjects([l],s)}return r}async unstake(t,e,n,o){let r=new T,i=await Z({builder:this.builder,txBlock:r}),s=o||this.params.walletAddress;r.setSender(s);let c=J.includes(t),d=await i.unstakeQuick(e,t,n,c);return r.transferObjects([d],r.pure(s)),r}async claim(t,e,n,o){let r=new T,i=await Z({builder:this.builder,txBlock:r}),s=await N({builder:this.builder,txBlock:r}),c=o||this.params.walletAddress;r.setSender(c);let d={sui:[],sca:[]};for(let l=0;l<t.length;l++){let{stakeMarketCoinName:u,stakeAccountId:p}=t[l],m=i.normalMethod.claim(p,u);d.sui.push(m)}for(let l=0;l<e.length;l++){let{obligationId:u,obligationKey:p,rewardCoinName:m}=e[l],f=s.normalMethod.claimBorrowIncentive(u,p,m);d[m].push(f)}for(let l=0;l<n.length;l++){let{obligationId:u,obligationKey:p,rewardCoinName:m}=n[l],f=s.normalMethod.oldClaimBorrowIncentive(u,p,m);d[m].push(f)}return d.sui.length>0&&(d.sui.length>1&&r.mergeCoins(d.sui[0],d.sui.slice(1)),r.transferObjects([d.sui[0]],r.pure(c))),d.sca.length>0&&(d.sca.length>1&&r.mergeCoins(d.sca[0],d.sca.slice(1)),r.transferObjects([d.sca[0]],r.pure(c))),r}async stakeObligation(t,e,n){let o=this.builder.createTxBlock(),r=await N({builder:this.builder,txBlock:o}),i=n||this.params.walletAddress;return o.setSender(i),await r.stakeObligationQuick(t,e),o}async unstakeObligation(t,e,n){let o=this.builder.createTxBlock(),r=await N({builder:this.builder,txBlock:o}),i=n||this.params.walletAddress;return o.setSender(i),await r.unstakeObligationQuick(t,e),o}async stakeSca(t,e=!1,n=!1,o,r,i,s,c){let d=new T,l=await pt({builder:this.builder,txBlock:d}),u=await N({builder:this.builder,txBlock:d}),p=c||this.params.walletAddress;d.setSender(p);let m=await this.builder.utils.selectCoinIds(t,it,p),[f,S]=this.builder.utils.takeAmountFromCoins(d,m,t),w;return s?l.normalMethod.extendLockAmount(s,f):w=l.normalMethod.lockSca(f,i),o&&r&&(e&&(n?u.normalMethod.oldUnstakeObligation(o,r):u.normalMethod.unstakeObligation(o,r)),u.normalMethod.stakeObligationWithVesca(o,r,s||w)),s||d.transferObjects([w,S],p),d}async stakeMoreSca(t,e,n){let o=new T,r=n||this.params.walletAddress;return o.setSender(r),o}async extendStakeScaLockPeriod(t,e,n,o,r=!1,i=!1,s){let c=new T,d=await pt({builder:this.builder,txBlock:c}),l=await N({builder:this.builder,txBlock:c}),u=s||this.params.walletAddress;return c.setSender(u),d.normalMethod.extendLockPeriod(e,t),n&&o&&(r&&(i?l.normalMethod.oldUnstakeObligation(n,o):l.normalMethod.unstakeObligation(n,o)),l.normalMethod.stakeObligationWithVesca(n,o,e)),c}async extendPeriodAndStakeMoreSca(t,e,n,o,r,i=!1,s=!1,c){let d=new T,l=await pt({builder:this.builder,txBlock:d}),u=await N({builder:this.builder,txBlock:d}),p=c||this.params.walletAddress;d.setSender(p);let m=await this.builder.utils.selectCoinIds(t,it,p),[f,S]=this.builder.utils.takeAmountFromCoins(d,m,t);return l.normalMethod.extendLockPeriod(e,n),l.normalMethod.extendLockAmount(e,f),d.transferObjects([S],p),!o||!r||(i&&(s?u.normalMethod.oldUnstakeObligation(o,r):u.normalMethod.unstakeObligation(o,r)),u.normalMethod.stakeObligationWithVesca(o,r,e)),d}async renewExpiredStakeSca(t,e,n,o=!1,r,i,s=!1,c=!1,d){let l=new T,u=await pt({builder:this.builder,txBlock:l}),p=await N({builder:this.builder,txBlock:l}),m=d||this.params.walletAddress;if(l.setSender(m),o){let v=u.normalMethod.redeemSca(n);l.transferObjects([v],m)}let f=await this.builder.utils.selectCoinIds(t,it,m),[S,w]=this.builder.utils.takeAmountFromCoins(l,f,t);return l.transferObjects([w],m),u.normalMethod.renewExpiredVeSca(n,S,e),!r||!i||(s&&(c?p.normalMethod.oldUnstakeObligation(r,i):p.normalMethod.unstakeObligation(r,i)),p.normalMethod.stakeObligationWithVesca(r,i,n)),l}async redeemSca(t){let e=new T,n=await pt({builder:this.builder,txBlock:e}),o=this.params.walletAddress;return e.setSender(o),await n.redeemScaQuick(t),e}async migrateAndClaim(t,e,n,o){let r=new T,i=await N({builder:this.builder,txBlock:r}),s=this.params.walletAddress;r.setSender(s);let c=i.normalMethod.oldClaimBorrowIncentive(e,t,n);return r.transferObjects([c],s),await i.unstakeObligationQuick(e,t),o?await i.stakeObligationWithVeScaQuick(e,t,o):await i.stakeObligationQuick(e,t),r}async withdrawUnlockedSca(t,e){let n=new T,o=await pt({builder:this.builder,txBlock:n}),r=e||this.params.walletAddress;return n.setSender(r),await o.redeemScaQuick(t),n}calculateAvailableClaimCoin(t,e){let n=new Ri(t.weightedAmount),r=e.currentPointIndex?Ri(e.currentPointIndex-t.index).dividedBy(1e9):1;return n.multipliedBy(r).plus(t.points).shiftedBy(-1*e.coinDecimal)}async createReferralLink(){let t=new T,e=await pt({builder:this.builder,txBlock:t}),n=this.params.walletAddress;t.setSender(n);let o=e.normalMethod.mintEmptyVeSca();return t.transferObjects([o],n),t}async claimRevenuReferral(t,e){let n=new T,o=await ki({builder:this.builder,txBlock:n}),r=this.params.walletAddress;n.setSender(r);let i=e.map(s=>this.utils.parseCoinNameFromType(s));return await o.claimReferralRevenueQuick(t,r,i),n}async bindReferral(t){let e=new T,n=await fa({builder:this.builder,txBlock:e}),o=this.params.walletAddress;return e.setSender(o),n.bindToReferral(t),e}async migrateAllMarketCoin(){let t=new T,e=await ut({builder:this.builder,txBlock:t}),n=await Z({builder:this.builder,txBlock:t});t.setSender(this.params.walletAddress);let o=[];return await Promise.all(J.map(async r=>{let i=[],s;try{let c=await this.utils.selectCoinIds(Number.MAX_SAFE_INTEGER,this.utils.parseMarketCoinType(r),this.params.walletAddress),d=c[0];c.length>1&&t.mergeCoins(d,c.slice(1)),s=d}catch(c){if(!c.toString().includes("No valid coins found for the transaction"))throw c}if(s){let c=e.mintSCoin(r,s);try{let d=await this.utils.selectCoinIds(Number.MAX_SAFE_INTEGER,this.utils.parseSCoinType(r),this.params.walletAddress);t.mergeCoins(c,d)}catch(d){console.log(d)}i.push(c)}if(ct.includes(r))try{let c=await n.unstakeQuick(Number.MAX_SAFE_INTEGER,r);c&&i.push(c)}catch(c){console.log(c)}if(i.length>0){let c=i[0];i.length>1&&t.mergeCoins(c,i.slice(1)),o.push(c)}})),o.length>0&&t.transferObjects(o,this.params.walletAddress),t}async migrateLendingWusdcToUsdcNative(t,e,n,o,r){let i=new T,s=await M({builder:this.builder,txBlock:i}),c=await Z({builder:this.builder,txBlock:i}),d=this.params.walletAddress,l=[],u=this.utils.parseMarketCoinName(t),p=this.utils.parseMarketCoinType(u),f=(await this.utils.selectCoinsMarketCoin(p,d)).map(R=>R.objectId);i.setSender(d);for(let R=0;R<r.length;R++){let U=r[R],[W]=await c.unstakeQuick(U.coin,u,U.id);if(W){f.length>0&&i.mergeCoins(W,f);let zi=s.normalMethod.withdraw(W,t);l.push(zi)}}if(e>0){let R=await s.withdrawQuick(e,t);l.push(R)}l.length>1&&i.mergeCoins(l[0],l.slice(1));let[S]=i.splitCoins(l[0],[i.pure(o)]);i.transferObjects([l[0]],d);let{swapResult:w,accountCap:v}=await this.deepbookSwap.swapToken({baseCoinName:"wusdc",quoteCoinName:"usdc",tokenObjectIn:S,tx:i});typeof v=="string"&&i.transferObjects([v],d),vi.check_slippage(i,w,n,o,this.query.utils.parseCoinType("usdc"));let E=s.normalMethod.deposit(w,"usdc");return await c.stakeQuick(E,"susdc"),i}};var ee=class{params;client;builder;query;utils;address;constructor(t){this.params=t,this.address=t.address}async init(){this.address||(this.address=new aa({id:Xr})),await this.address.read(),this.client=new ha(this.params,this.address);let{builder:t,query:e,utils:n}=this.client;this.builder=t,this.query=e,this.utils=n}};var ya=class{application="scallop";supportSDK="@mysten/sui.js";scallop;async deserialize(t){this.scallop||(this.scallop=new ee({client:t.suiClient,walletAddress:t.account.address}),await this.scallop.init());let{transactionBlock:e}=t;console.log("transactionBlock",e);let n=new An(e,this.scallop),o=new Dn(e,this.scallop),r=new On(e,this.scallop),i=n.decode()||o.decode()||r.decode();if(!i)throw new Error("Unknown transaction type");return{txType:Ml.Other,txSubType:i.type,intentionData:i.intentionData}}async build(t){let{suiClient:e,account:n,network:o,txSubType:r,intentionData:i}=t;this.scallop||(this.scallop=new ee({client:t.suiClient,walletAddress:t.account.address}),await this.scallop.init());let s;switch(r){case"SupplyLending":s=$n.fromData(i);break;case"WithdrawLending":s=Hn.fromData(i);break;case"Borrow":s=Pn.fromData(i);break;case"Repay":s=Ln.fromData(i);break;case"DepositCollateral":s=Bn.fromData(i);break;case"WithdrawCollateral":s=Vn.fromData(i);break;case"OpenObligation":s=Wn.fromData(i);break;case"StakeSpool":s=Fn.fromData(i);break;case"UnstakeSpool":s=qn.fromData(i);break;case"ClaimIncentiveReward":s=jn.fromData(i);break;case"BorrowWithBoost":s=_n.fromData(i);break;case"StakeSca":s=ta.fromData(i);break;case"ExtendStakePeriod":s=Xn.fromData(i);break;case"ExtendPeriodAndStakeMore":s=Jn.fromData(i);break;case"RenewExpStakePeriod":s=Zn.fromData(i);break;case"WithdrawStakedSca":s=na.fromData(i);break;case"SupplyAndStakeLending":s=ea.fromData(i);break;case"WithdrawAndUnstakeLending":s=Qn.fromData(i);break;case"RedeemSca":s=Yn.fromData(i);break;case"MigrateAndClaim":s=Nn.fromData(i);break;case"BorrowWithReferral":s=Rn.fromData(i);break;case"CreateReferralLink":s=zn.fromData(i);break;case"ClaimRevenueReferral":s=Gn.fromData(i);break;case"BindReferral":s=Kn.fromData(i);break;case"MigrateScoin":s=Mn.fromData(i);break;case"RepayWithBoost":s=Un.fromData(i);break;case"MigrateWusdcToUsdc":s=En.fromData(i);break;default:throw new Error("not implemented")}return s.build({suiClient:e,account:n,network:o,scallop:this.scallop})}};import{TransactionType as ql}from"@msafe/sui3-utils";import{LstClient as Ql}from"@suilend/springsui-sdk";import{normalizeStructTag as El}from"@mysten/sui.js/utils";var ne={id:"0x15eda7330c8f99c30e430b4d82fd7ab2af3ead4ae17046fcb224aa9bad394f6b",type:"0x83556891f4a0f233ce7b05cfe7f957d4020492a34f5405b2cb9377d060bef4bf::spring_sui::SPRING_SUI",weightHookId:"0xbbafcb2d7399c0846f8185da3f273ad5b26b3b35993050affa44cfa890f1f144"},Wl=ne.type,ji=El(Wl);import{TransactionType as Bi}from"@msafe/sui3-utils";var Sa=class{constructor(t,e){this.transaction=t;this.simResult=e}decode(){if(this.isMintTransaction())return this.decodeMint();if(this.isRedeemTransaction())return this.decodeRedeem();throw new Error("Unknown transaction type")}get commands(){return this.transaction.getData().commands}getMoveCallCommand(t){return this.commands.find(e=>e.$kind==="MoveCall"&&e.MoveCall.function===t)}isMintTransaction(){return!!this.getMoveCallCommand("mint")}isRedeemTransaction(){return!!this.getMoveCallCommand("redeem")}decodeMint(){let e={MintEvent:this.simResult.events.find(n=>n.type.endsWith("liquid_staking::MintEvent"))}.MintEvent.parsedJson.sui_amount_in;return console.log("Decoder.decodeMint",e),{txType:Bi.Other,type:"mint",intentionData:{amount:e}}}decodeRedeem(){let e={RedeemEvent:this.simResult.events.find(n=>n.type.endsWith("liquid_staking::RedeemEvent"))}.RedeemEvent.parsedJson.lst_amount_in;return console.log("Decoder.decodeRedeem",e),{txType:Bi.Other,type:"redeem",intentionData:{amount:e}}}};import{Transaction as Fl}from"@mysten/sui/transactions";import Ul from"sort-keys-recursive";var _t=class{constructor(t){this.data=t}serialize(){return JSON.stringify(Ul(this.data))}};var wa=class a extends _t{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o,lstClient:r}=e;console.log("MintIntention.build",n,o,r);let i=new Fl,[s]=i.splitCoins(i.gas,[BigInt(this.data.amount)]),c=r.mint(i,s);return i.transferObjects([c],o.address),r.rebalance(i,ne.weightHookId),i}static fromData(e){return console.log("MintIntention.fromData",e),new a(e)}};import{Transaction as $l}from"@mysten/sui/transactions";var Ia=class a extends _t{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o,lstClient:r}=e;console.log("RedeemIntention.build",n,o,r);let i=new $l,s=(await n.getCoins({owner:o.address,coinType:ji})).data;s.length>1&&i.mergeCoins(i.object(s[0].coinObjectId),s.map(l=>i.object(l.coinObjectId)).slice(1));let[c]=i.splitCoins(i.object(s[0].coinObjectId),[BigInt(this.data.amount)]),d=r.redeemLst(i,c);return i.transferObjects([d],o.address),i}static fromData(e){return console.log("RedeemIntention.fromData",e),new a(e)}};var Ni=async a=>Ql.initialize(a,ne),Ca=class{application="SpringSui";supportSDK="@mysten/sui";lstClient;async deserialize(t){let{transaction:e,suiClient:n,account:o}=t;this.lstClient||(this.lstClient=await Ni(n));let r=await n.devInspectTransactionBlock({sender:o.address,transactionBlock:e});console.log("SpringSuiAppHelper.deserialize",r);let s=new Sa(e,r).decode();return{txType:ql.Other,txSubType:s.type,intentionData:s.intentionData}}async build(t){let{network:e,txSubType:n,intentionData:o,suiClient:r,account:i}=t;this.lstClient||(this.lstClient=await Ni(r));let s;switch(n){case"mint":s=wa.fromData(o);break;case"redeem":s=Ia.fromData(o);break;default:throw new Error("not implemented")}return s.build({network:e,suiClient:r,account:i,lstClient:this.lstClient})}};import{TransactionType as nd}from"@msafe/sui3-utils";import{LENDING_MARKET_ID as ad,LENDING_MARKET_TYPE as od,SuilendClient as Wo}from"@suilend/sdk";import{phantom as rd}from"@suilend/sdk/_generated/_framework/reified";import{LendingMarket as id}from"@suilend/sdk/_generated/suilend/lending-market/structs";import{TransactionType as ae}from"@msafe/sui3-utils";import{normalizeStructTag as oe}from"@mysten/sui/utils";var Ta=class{constructor(t,e){this.transaction=t;this.simResult=e}decode(){if(this.isDepositTransaction())return this.decodeDeposit();if(this.isWithdrawTransaction())return this.decodeWithdraw();if(this.isBorrowTransaction())return this.decodeBorrow();if(this.isRepayTransaction())return this.decodeRepay();if(this.isClaimRewardsTransaction())return this.decodeClaimRewards();throw new Error("Unknown transaction type")}get commands(){return this.transaction.getData().commands}getMoveCallCommand(t){return this.commands.find(e=>e.$kind==="MoveCall"&&e.MoveCall.function===t)}isDepositTransaction(){return!!this.getMoveCallCommand("deposit_liquidity_and_mint_ctokens")&&!!this.getMoveCallCommand("deposit_ctokens_into_obligation")}isWithdrawTransaction(){return!!this.getMoveCallCommand("withdraw_ctokens")&&!!this.getMoveCallCommand("redeem_ctokens_and_withdraw_liquidity")}isBorrowTransaction(){return!!this.getMoveCallCommand("borrow")}isRepayTransaction(){return!!this.getMoveCallCommand("repay")}isClaimRewardsTransaction(){return!!this.getMoveCallCommand("claim_rewards")}decodeDeposit(){let t={MintEvent:this.simResult.events.find(o=>o.type.endsWith("lending_market::MintEvent"))},e=oe(t.MintEvent.parsedJson.coin_type.name),n=t.MintEvent.parsedJson.liquidity_amount;return console.log("Decoder.decodeDeposit",e,n),{txType:ae.Other,type:"deposit",intentionData:{coinType:e,value:n}}}decodeWithdraw(){let t={RedeemEvent:this.simResult.events.find(o=>o.type.endsWith("lending_market::RedeemEvent"))},e=oe(t.RedeemEvent.parsedJson.coin_type.name),n=t.RedeemEvent.parsedJson.liquidity_amount;return console.log("Decoder.decodeWithdraw",e,n),{txType:ae.Other,type:"withdraw",intentionData:{coinType:e,value:n}}}decodeBorrow(){let t={BorrowEvent:this.simResult.events.find(o=>o.type.endsWith("lending_market::BorrowEvent"))},e=oe(t.BorrowEvent.parsedJson.coin_type.name),n=`${+t.BorrowEvent.parsedJson.liquidity_amount-+t.BorrowEvent.parsedJson.origination_fee_amount}`;return console.log("Decoder.decodeBorrow",e,n),{txType:ae.Other,type:"borrow",intentionData:{coinType:e,value:n}}}decodeRepay(){let t={RepayEvent:this.simResult.events.find(o=>o.type.endsWith("lending_market::RepayEvent"))},e=oe(t.RepayEvent.parsedJson.coin_type.name),n=t.RepayEvent.parsedJson.liquidity_amount;return console.log("Decoder.decodeRepay",e,n),{txType:ae.Other,type:"repay",intentionData:{coinType:e,value:n}}}decodeClaimRewards(){let t={ClaimReward:this.simResult.events.filter(n=>n.type.endsWith("lending_market::ClaimReward"))},e={};for(let n=0;n<t.ClaimReward.length;n++){let o=t.ClaimReward[n],r=oe(o.parsedJson.coin_type.name),i=o.parsedJson.liquidity_amount;e[r]=`${+(e[r]??"0")+ +i}`}return console.log("Decoder.decodeClaimRewards",e),{txType:ae.Other,type:"claimRewards",intentionData:{value:e}}}};import{Transaction as Kl}from"@mysten/sui/transactions";import Hl from"sort-keys-recursive";var q=class{constructor(t){this.data=t}serialize(){return JSON.stringify(Hl(this.data))}};var ka=class a extends q{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o,suilendClient:r,obligationOwnerCaps:i,obligations:s}=e;console.log("BorrowIntention.build",n,o,r,i,s);let c=i[0],d=s[0];if(!c||!d)throw new Error("Obligation not found");let l=new Kl;return await r.borrowFromObligation(o.address,i[0].id,s[0].id,this.data.coinType,this.data.value,l),l}static fromData(e){return console.log("BorrowIntention.fromData",e),new a(e)}};import{Transaction as Jl}from"@mysten/sui/transactions";import{normalizeStructTag as Xl}from"@mysten/sui.js/utils";import{Side as re}from"@suilend/sdk";import Yl from"bignumber.js";import{normalizeStructTag as Mi}from"@mysten/sui.js/utils";var Gl="0x34fe4f3c9e450fed4d0a3c587ed842eec5313c30c3cc3c0841247c49425e246b::suilend_point::SUILEND_POINT",zl=Mi(Gl),Ei=a=>Mi(a)===zl;var va=class a extends q{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o,suilendClient:r,obligationOwnerCaps:i,obligations:s}=e;console.log("ClaimRewardsIntention.build",n,o,r,i,s);let c=i[0],d=s[0];if(!c||!d)throw new Error("Obligation not found");let l={[re.DEPOSIT]:[],[re.BORROW]:[]};r.lendingMarket.reserves.forEach(p=>{[re.DEPOSIT,re.BORROW].forEach(m=>{let f=m===re.DEPOSIT?p.depositsPoolRewardManager:p.borrowsPoolRewardManager,S=d.userRewardManagers.find(w=>w.poolRewardManagerId===f.id);S&&(l[m]=f.poolRewards.map((w,v)=>({reserveArrayIndex:p.arrayIndex,rewardIndex:v,rewardCoinType:Xl(w.coinType.name),side:m})).filter(w=>!Ei(w.rewardCoinType)&&!!S.rewards[w.rewardIndex]&&new Yl(S.rewards[w.rewardIndex].earnedRewards.value.toString()).gt(0)))})});let u=new Jl;return await r.claimRewardsToObligation(o.address,Object.values(l).flat().map(p=>({obligationOwnerCapId:c.id,reserveArrayIndex:p.reserveArrayIndex,rewardIndex:BigInt(p.rewardIndex),rewardType:p.rewardCoinType,side:p.side})),u),u}static fromData(e){return console.log("ClaimRewardsIntention.fromData",e),new a(e)}};import{Transaction as Zl}from"@mysten/sui/transactions";var xa=class a extends q{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o,suilendClient:r,obligationOwnerCaps:i}=e;console.log("DepositIntention.build",n,o,r,i);let s=new Zl;return await r.depositIntoObligation(o.address,this.data.coinType,this.data.value,s,i[0]?.id),s}static fromData(e){return console.log("DepositIntention.fromData",e),new a(e)}};import{Transaction as td}from"@mysten/sui/transactions";var Aa=class a extends q{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o,suilendClient:r,obligationOwnerCaps:i,obligations:s}=e;console.log("RepayIntention.build",n,o,r,i,s);let c=i[0],d=s[0];if(!c||!d)throw new Error("Obligation not found");let l=new td;return await r.repayIntoObligation(o.address,s[0].id,this.data.coinType,this.data.value,l),l}static fromData(e){return console.log("RepayIntention.fromData",e),new a(e)}};import{Transaction as ed}from"@mysten/sui/transactions";var Da=class a extends q{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o,suilendClient:r,obligationOwnerCaps:i,obligations:s}=e;console.log("WithdrawIntention.build",n,o,r,i,s);let c=i[0],d=s[0];if(!c||!d)throw new Error("Obligation not found");let l=new ed;return await r.withdrawFromObligation(o.address,i[0].id,s[0].id,this.data.coinType,this.data.value,l),l}static fromData(e){return console.log("WithdrawIntention.fromData",e),new a(e)}};var Wi=async a=>Wo.initializeWithLendingMarket(await id.fetch(a,rd(od),ad),a),Li=async(a,t,e)=>Wo.getObligationOwnerCaps(t.address,e.lendingMarket.$typeArgs,a),Ui=async(a,t,e)=>Promise.all(e.map(n=>Wo.getObligation(n.obligationId,t.lendingMarket.$typeArgs,a))),Oa=class{application="Suilend";supportSDK="@mysten/sui";suilendClient;obligationOwnerCaps;obligations;async deserialize(t){let{transaction:e,suiClient:n,account:o}=t;this.suilendClient||(this.suilendClient=await Wi(n)),this.obligationOwnerCaps||(this.obligationOwnerCaps=await Li(n,o,this.suilendClient)),this.obligations||(this.obligations=await Ui(n,this.suilendClient,this.obligationOwnerCaps));let r=await n.devInspectTransactionBlock({sender:o.address,transactionBlock:e});console.log("SuilendAppHelper.deserialize",r);let s=new Ta(e,r).decode();return{txType:nd.Other,txSubType:s.type,intentionData:s.intentionData}}async build(t){let{network:e,txSubType:n,intentionData:o,suiClient:r,account:i}=t;this.suilendClient||(this.suilendClient=await Wi(r)),this.obligationOwnerCaps||(this.obligationOwnerCaps=await Li(r,i,this.suilendClient)),this.obligations||(this.obligations=await Ui(r,this.suilendClient,this.obligationOwnerCaps));let s;switch(n){case"deposit":s=xa.fromData(o);break;case"withdraw":s=Da.fromData(o);break;case"borrow":s=ka.fromData(o);break;case"repay":s=Aa.fromData(o);break;case"claimRewards":s=va.fromData(o);break;default:throw new Error("not implemented")}return s.build({network:e,suiClient:r,account:i,suilendClient:this.suilendClient,obligationOwnerCaps:this.obligationOwnerCaps,obligations:this.obligations})}};import{TransactionType as Ad}from"@msafe/sui3-utils";import{TurbosSdk as Dd}from"turbos-clmm-sdk";import{TransactionType as Q}from"@msafe/sui3-utils";import{bcs as Fi}from"@mysten/sui.js/bcs";import{normalizeStructTag as cd,normalizeSuiAddress as ie}from"@mysten/sui.js/utils";import{BN as ld}from"turbos-clmm-sdk";var V={PackageId:"0x02fe4933f4521250e55a15441096d1d4a38a7311195b0bca126fc0138c1f5a97",Claim:"0x0c822cec42f7ca703696b4232f1c47b348330c23580172a29aab465bc071d894",turbosCoinType:"0x5d1f47ea69bb0de31c313d7acf89b890dbb8991ea8e03c6c355171f84bb1ba4a::turbos::TURBOS"},H={PackageId:"0xdee9"};var dd=(a,t,e,n)=>{if(a===1)switch(n.findIndex(i=>i===t)){case 0:return[!0,!0];case 1:return[!0,!1];case 2:return[!1,!0];case 3:return[!1,!1];default:throw new Error(`not target: ${t}`)}switch(e.findIndex(r=>r===t)){case 0:return[!0];case 1:return[!1];default:throw new Error(`not target: ${t}`)}},Pa=class{constructor(t,e,n){this.txb=t;this.turbosSdk=e;this.config=n}get transactions(){return this.txb.blockData.transactions}get swap1Layer(){return[`${this.config.PackageId}::swap_router::swap_a_b`,`${this.config.PackageId}::swap_router::swap_b_a`]}get swap2Layer(){return[`${this.config.PackageId}::swap_router::swap_a_b_b_c`,`${this.config.PackageId}::swap_router::swap_a_b_c_b`,`${this.config.PackageId}::swap_router::swap_b_a_b_c`,`${this.config.PackageId}::swap_router::swap_b_a_c_b`]}async decode(t){if(this.isSwapTransaction())return await this.decodeSwap();if(this.isAddLiquidityTransaction())return this.decodeAddLiquidity();if(this.isIncreaseLiquidityTransaction())return this.decodeIncreaseLiquidity(t);if(this.isRemoveLiquidityTransaction())return this.decodeRemoveLiquidity(t);if(this.isDecreaseLiquidityTransaction())return this.decodeDecreaseLiquidity(t);if(this.isCollectFeeTransaction())return this.decodeCollectFee();if(this.isCollectRewardTransaction())return this.decodeCollectReward();if(this.isBurnTransaction())return this.decodeBurn();if(this.isPrixClaimTransaction())return this.decodePrixClaim();if(this.isPrixJoinTransaction())return this.decodePrixJoin();if(this.isSwapExactBaseForQuoteTransaction())return this.decodeSwapExactBaseForQuote();if(this.isSwapExactQuoteForBaseTransaction())return this.decodeSwapExactQuoteForBase();throw new Error("Unknown transaction type")}getMoveCallTransaction(t){return this.transactions.find(e=>e.kind==="MoveCall"&&e.target===t)}getMoveCallsTransaction(t){return t.every(e=>this.transactions.find(n=>n.kind==="MoveCall"&&n.target===e))}getSwapMoveCallTransaction(t){return this.transactions.find(e=>e.kind==="MoveCall"&&t.includes(e.target))}isSwapTransaction(){return!!this.getSwapMoveCallTransaction([...this.swap1Layer,...this.swap2Layer])}isAddLiquidityTransaction(){return!!this.getMoveCallTransaction(`${this.config.PackageId}::position_manager::mint`)}isIncreaseLiquidityTransaction(){return!!this.getMoveCallTransaction(`${this.config.PackageId}::position_manager::increase_liquidity`)}isDecreaseLiquidityTransaction(){return!!this.getMoveCallTransaction(`${this.config.PackageId}::position_manager::decrease_liquidity`)}isCollectFeeTransaction(){return!!this.getMoveCallTransaction(`${this.config.PackageId}::position_manager::collect`)}isCollectRewardTransaction(){return!!this.getMoveCallTransaction(`${this.config.PackageId}::position_manager::collect_reward`)}isBurnTransaction(){return!!this.getMoveCallTransaction(`${this.config.PackageId}::position_manager::burn`)}isPrixJoinTransaction(){return!!this.getMoveCallTransaction(`${V.PackageId}::claim::join`)}isPrixClaimTransaction(){return!!this.getMoveCallTransaction(`${V.PackageId}::claim::claim`)}isRemoveLiquidityTransaction(){return!!this.getMoveCallsTransaction([`${this.config.PackageId}::position_manager::decrease_liquidity`,`${this.config.PackageId}::position_manager::burn`])}isSwapExactBaseForQuoteTransaction(){return!!this.getMoveCallTransaction(`${H.PackageId}::clob_v2::swap_exact_base_for_quote`)}isSwapExactQuoteForBaseTransaction(){return!!this.getMoveCallTransaction(`${H.PackageId}::clob_v2::swap_exact_quote_for_base`)}async decodeSwap(){let t=this.transactions.find(m=>m.kind==="MoveCall"),e=0;this.swap2Layer.includes(t.target)&&(e=1);let n=dd(e,t.target,this.swap1Layer,this.swap2Layer),o=n.map((m,f)=>{let S=this.helper.decodeSharedObjectId(f),w=this.helper.decodeInputU128(4+f+e),v=this.turbosSdk.math.sqrtPriceX64ToTickIndex(new ld(w.toString()));return{pool:S,a2b:m,nextTickIndex:v}}),r=n[0]||e===1?t.typeArguments[0]:t.typeArguments[1],i=e===1?t.typeArguments[4]:n[0]?t.typeArguments[1]:t.typeArguments[0],s=this.helper.decodeInputAddress(6+2*e),c=this.helper.decodeInputU64(7+2*e),d=this.helper.decodeInputBool(5+2*e),l=this.helper.decodeInputU64(2+e),u=this.helper.decodeInputU64(3+e),p=await this.turbosSdk.trade.computeSwapResultV2({pools:[{pool:o[0].pool,a2b:o[0].a2b,amountSpecified:l}],address:s,amountSpecifiedIsInput:d});return{txType:Q.Other,type:"Swap",intentionData:{routes:o,coinTypeA:r,coinTypeB:i,address:s,amountA:d?l:u,amountB:d?u:l,amountSpecifiedIsInput:d,slippage:"0.1",deadline:c}}}decodeAddLiquidity(){console.log(this.helper,"decodeAddLiquidity this.helper");let t=this.helper.decodeSharedObjectId(0),e=this.helper.decodeInputAddress(12),n=this.helper.decodeInputU64(8),o=this.helper.decodeInputU64(9),r=this.helper.decodeInputU32(4),i=this.helper.decodeInputBool(5),s=this.helper.decodeInputU32(6),c=this.helper.decodeInputBool(7),d=this.helper.decodeInputU64(13);return{txType:Q.Other,type:"AddLiquidity",intentionData:{pool:t,slippage:10,address:e,amountA:n,amountB:o,tickLower:i?-r:r,tickUpper:c?-s:s,deadline:d}}}decodeIncreaseLiquidity(t){console.log(this.helper,"decodeIncreaseLiquidity this.helper");let e=this.helper.decodeSharedObjectId(0),n=this.helper.decodeSharedObjectId(4),o=this.helper.decodeInputU64(5),r=this.helper.decodeInputU64(6),i=this.helper.decodeInputU64(9);return{txType:Q.Other,type:"IncreaseLiquidity",intentionData:{pool:e,slippage:10,address:t,amountA:o,amountB:r,nft:n,deadline:i}}}decodeDecreaseLiquidity(t){console.log(this.helper,"decodeDecreaseLiquidity this.helper");let e=this.helper.decodeSharedObjectId(0),n=this.helper.decodeSharedObjectId(2),o=this.helper.decodeInputU64(3),r=this.helper.decodeInputU64(4),i=this.helper.decodeInputU64(5),s=this.helper.decodeInputU64(6);return{txType:Q.Other,type:"DecreaseLiquidity",intentionData:{pool:e,decreaseLiquidity:o,nft:n,amountA:r,amountB:i,slippage:10,address:t,deadline:s}}}decodeCollectFee(){console.log(this.helper,"decodeCollectFee this.helper");let t=this.helper.decodeSharedObjectId(0),e=this.helper.decodeSharedObjectId(2),n=this.helper.decodeInputAddress(5),o=this.helper.decodeInputU64(3),r=this.helper.decodeInputU64(4),i=this.helper.decodeInputU64(6);return{txType:Q.Other,type:"CollectFee",intentionData:{pool:t,address:n,collectAmountA:o,collectAmountB:r,nft:e,deadline:i}}}decodeCollectReward(){console.log(this.helper,"decodeCollectReward this.helper");let t=this.helper.decodeSharedObjectId(0),e=this.helper.decodeSharedObjectId(2),n=this.helper.decodeInputAddress(6),o=this.collectRewardHelper.map(i=>i.decodeInputU64(5)),r=this.helper.decodeInputU64(7);return{txType:Q.Other,type:"CollectReward",intentionData:{pool:t,address:n,rewardAmounts:o,nft:e,deadline:r}}}decodeBurn(){console.log(this.helper,"decodeBurn this.helper");let t=this.helper.decodeSharedObjectId(0),e=this.helper.decodeSharedObjectId(2);return{txType:Q.Other,type:"Burn",intentionData:{pool:t,nft:e}}}decodeRemoveLiquidity(t){console.log(this.helper,"decodeRemoveLiquidity this.helper");let e=this.decreaseLiquidityHelper.decodeSharedObjectId(0),n=this.decreaseLiquidityHelper.decodeSharedObjectId(2),o=this.decreaseLiquidityHelper.decodeInputU64(3),r=this.decreaseLiquidityHelper.decodeInputU64(4),i=this.decreaseLiquidityHelper.decodeInputU64(5),s=this.decreaseLiquidityHelper.decodeInputU64(6),c=this.collectRewardHelper.map(u=>u.decodeInputU64(5)),d=this.collectFeeHelper.decodeInputU64(3)||0,l=this.collectFeeHelper.decodeInputU64(4)||0;return{txType:Q.Other,type:"RemoveLiquidity",intentionData:{pool:e,decreaseLiquidity:o,nft:n,amountA:r,amountB:i,slippage:10,address:t,collectAmountA:d,collectAmountB:l,rewardAmounts:c,deadline:s}}}decodePrixClaim(){return{txType:Q.Other,type:"PrixClaim",intentionData:{}}}decodePrixJoin(){return{txType:Q.Other,type:"PrixJoin",intentionData:{}}}decodeSwapExactBaseForQuote(){let t=this.swapExactBaseForQuoteHelper.decodeSharedObjectId(0),e=this.swapExactBaseForQuoteHelper.decodeInputU64(3),n=this.swapExactBaseForQuoteHelper.shortTypeArg(0),o=this.swapExactBaseForQuoteHelper.shortTypeArg(1);return{txType:Q.Other,type:"SwapExactBaseForQuote",intentionData:{poolId:t,amountIn:e,token1:n,token2:o}}}decodeSwapExactQuoteForBase(){let t=this.swapExactQuoteForBaseHelper.decodeSharedObjectId(0),e=this.swapExactQuoteForBaseHelper.decodeInputU64(3),n=this.swapExactQuoteForBaseHelper.shortTypeArg(0),o=this.swapExactQuoteForBaseHelper.shortTypeArg(1);return{txType:Q.Other,type:"SwapExactQuoteForBase",intentionData:{poolId:t,amountIn:e,token1:n,token2:o}}}get helper(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target!=="0x2::coin::zero"&&e.target!=="0x0000000000000000000000000000000000000000000000000000000000000002::coin::zero");return new mt(t,this.txb)}get collectRewardHelper(){return this.transactions.filter(e=>e.kind==="MoveCall"&&e.target===`${this.config.PackageId}::position_manager::collect_reward`).map(e=>new mt(e,this.txb))}get collectFeeHelper(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target===`${this.config.PackageId}::position_manager::collect`);return new mt(t,this.txb)}get decreaseLiquidityHelper(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target===`${this.config.PackageId}::position_manager::decrease_liquidity`);return new mt(t,this.txb)}get swapExactBaseForQuoteHelper(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target===`${H.PackageId}::clob_v2::swap_exact_base_for_quote`);return new mt(t,this.txb)}get swapExactQuoteForBaseHelper(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target===`${H.PackageId}::clob_v2::swap_exact_quote_for_base`);return new mt(t,this.txb)}},mt=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 ie(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 Fi.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 ie(t.value.Object.ImmOrOwned.objectId)}return ie(t.value)}static getSharedObjectId(t){if(t.type!=="object")throw new Error(`not object argument: ${JSON.stringify(t)}`);if(typeof t.value!="object")return ie(t.value);if(!("Object"in t.value)||!("Shared"in t.value.Object))throw new Error("not Shared");return ie(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 Fi.de(e,new Uint8Array(n))}typeArg(t){return cd(this.moveCall.typeArguments[t])}shortTypeArg(t){return this.moveCall.typeArguments[t]}txArg(t){return this.moveCall.arguments[t]}};import{TurbosSdk as ud}from"turbos-clmm-sdk";var _a=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new ud(e.network.replace("sui:",""),e.suiClient),{pool:o,address:r,amountA:i,amountB:s,slippage:c,tickLower:d,tickUpper:l,deadline:u,txb:p}=this.data;return n.pool.addLiquidity({pool:o,slippage:c,address:r,amountA:i,amountB:s,tickLower:d,tickUpper:l,deadline:u,txb:p})}static fromData(e){return new a(e)}};import{TurbosSdk as pd}from"turbos-clmm-sdk";var Ra=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new pd(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 md}from"turbos-clmm-sdk";var ja=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new md(e.network.replace("sui:",""),e.suiClient),{pool:o,address:r,nft:i,collectAmountA:s,collectAmountB:c,deadline:d,txb:l}=this.data;return n.pool.collectFee({pool:o,address:r,collectAmountA:s,collectAmountB:c,nft:i,deadline:d,txb:l})}static fromData(e){return new a(e)}};import{TurbosSdk as fd}from"turbos-clmm-sdk";var Ba=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new fd(e.network.replace("sui:",""),e.suiClient),{pool:o,address:r,nft:i,rewardAmounts:s,deadline:c,txb:d}=this.data;return n.pool.collectReward({pool:o,address:r,rewardAmounts:s,nft:i,deadline:c,txb:d})}static fromData(e){return new a(e)}};import{TurbosSdk as bd}from"turbos-clmm-sdk";var Na=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new bd(e.network.replace("sui:",""),e.suiClient),{fee:o,address:r,tickLower:i,tickUpper:s,sqrtPrice:c,slippage:d,coinTypeA:l,coinTypeB:u,amountA:p,amountB:m,deadline:f,txb:S}=this.data;return n.pool.createPool({fee:o,amountA:p,amountB:m,address:r,tickLower:i,tickUpper:s,sqrtPrice:c,slippage:d,coinTypeA:l,coinTypeB:u,deadline:f,txb:S})}static fromData(e){return new a(e)}};import{TurbosSdk as gd}from"turbos-clmm-sdk";var Ma=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new gd(e.network.replace("sui:",""),e.suiClient),{pool:o,address:r,amountA:i,amountB:s,slippage:c,nft:d,decreaseLiquidity:l,deadline:u,txb:p}=this.data;return n.pool.decreaseLiquidity({pool:o,slippage:c,address:r,amountA:i,amountB:s,nft:d,decreaseLiquidity:l,deadline:u,txb:p})}static fromData(e){return new a(e)}};import{TurbosSdk as hd}from"turbos-clmm-sdk";var Ea=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new hd(e.network.replace("sui:",""),e.suiClient),{pool:o,address:r,amountA:i,amountB:s,slippage:c,nft:d,deadline:l,txb:u}=this.data;return n.pool.increaseLiquidity({pool:o,slippage:c,address:r,amountA:i,amountB:s,nft:d,deadline:l,txb:u})}static fromData(e){return new a(e)}};import{TransactionBlock as yd}from"@mysten/sui.js/transactions";import{SUI_CLOCK_OBJECT_ID as Sd}from"@mysten/sui.js/utils";var Wa=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new yd;return n.moveCall({target:`${V.PackageId}::claim::claim`,typeArguments:[V.turbosCoinType],arguments:[n.object(V.Claim),n.object(Sd)]}),n}static fromData(e){return new a(e)}};import{TransactionBlock as wd}from"@mysten/sui.js/transactions";var La=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new wd;return n.moveCall({target:`${V.PackageId}::claim::join`,typeArguments:[V.turbosCoinType],arguments:[n.object(V.Claim)]}),n}static fromData(e){return new a(e)}};import{TransactionBlock as Id}from"@mysten/sui.js/transactions";import{TurbosSdk as Cd}from"turbos-clmm-sdk";var Ua=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new Cd(e.network.replace("sui:",""),e.suiClient),o=new Id;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 Td}from"turbos-clmm-sdk";var Fa=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){console.log(this.data,"this.data");let n=new Td(e.network.replace("sui:",""),e.suiClient),{routes:o,coinTypeA:r,coinTypeB:i,address:s,amountA:c,amountB:d,slippage:l,amountSpecifiedIsInput:u,deadline:p,txb:m}=this.data;return n.trade.swap({routes:o,coinTypeA:r,coinTypeB:i,address:s,amountA:c,amountB:d,amountSpecifiedIsInput:u,slippage:l,deadline:p,txb:m})}static fromData(e){return new a(e)}};import{TurbosSdk as vd}from"turbos-clmm-sdk";import{normalizeSuiObjectId as $i}from"@mysten/sui.js/utils";import{TransactionBlock as qi}from"@mysten/sui.js/transactions";import{unstable_getObjectId as kd}from"turbos-clmm-sdk";var se=class{constructor(t){this.turbosSdk=t}async getCoinsData(t,e,n){let o=[],r;do r=await this.turbosSdk.provider.getCoins({owner:t,coinType:e,cursor:r?.nextCursor}),o.push(...r.data);while(r.hasNextPage);let i=[],s=0;return o.sort((c,d)=>Number(d.balance)-Number(c.balance)).some(c=>s>=n?!0:(s+=Number(c.balance),i.push(c),!1)),i}splitAndMergeCoin(t,e,n){if(!t||t.length<1)return[void 0,void 0];if(this.isSuiCoinAddress(t[0].coinType)){let[i]=n.splitCoins(n.gas,[n.pure(e)]);return[i,void 0]}let o=n.object(t[0].coinObjectId);t.length>1&&n.mergeCoins(o,t.slice(1).map(i=>n.object(i.coinObjectId)));let[r]=n.splitCoins(o,[n.pure(e)]);return[r,o]}isSuiCoinAddress(t){return t.toLocaleLowerCase()==="0x2::sui::sui"}async IsAccountCap(t){let e=await this.turbosSdk.provider.getOwnedObjects({owner:t,options:{showContent:!0,showType:!0,showOwner:!0},filter:{StructType:`${H.PackageId}::custodian_v2::AccountCap`}});return e.data[0]?.data?kd(e.data[0].data):void 0}createAccount(t){let[e]=t.moveCall({typeArguments:[],target:`${H.PackageId}::clob_v2::create_account`,arguments:[]});return e}zero(t,e){return e.moveCall({typeArguments:[t],target:"0x2::coin::zero",arguments:[]})}};var Qi=89,Vi=1e6,Hi=async a=>{let{token1:t,token2:e,poolId:n,amountIn:o,currentAddress:r,turbosSdk:i}=a,s=new qi,c=new se(i),d=await c.getCoinsData(r,e,o),[l,u]=c.splitAndMergeCoin(d,o,s);if(!l)throw new Error(`Not enough balance: ${e}`);let p=await c.IsAccountCap(r),m=p?s.object(p):c.createAccount(s),[f,S,w]=s.moveCall({typeArguments:[t,e],target:`${H.PackageId}::clob_v2::swap_exact_quote_for_base`,arguments:[s.object(String(n)),s.pure(Qi),m,s.pure(o),s.object($i("0x6")),l]});return u&&s.transferObjects([u],s.pure(r)),s.transferObjects([f],s.pure(r)),s.transferObjects([S],s.pure(r)),p||s.transferObjects([m],s.pure(r)),s.setSenderIfNotSet(r),s.setGasBudget(Vi),s},Ki=async a=>{let{token1:t,token2:e,poolId:n,amountIn:o,currentAddress:r,turbosSdk:i}=a,s=new qi,c=new se(i),d=await c.getCoinsData(r,t,o),[l,u]=c.splitAndMergeCoin(d,o,s);if(!l)throw new Error(`Not enough balance: ${t}`);let p=await c.IsAccountCap(r),m=p?s.object(p):c.createAccount(s),f=c.zero(e,s),[S,w,v]=s.moveCall({typeArguments:[t,e],target:`${H.PackageId}::clob_v2::swap_exact_base_for_quote`,arguments:[s.object(String(n)),s.pure(Qi),m,s.pure(o),l,f,s.object($i("0x6"))]});return u&&s.transferObjects([u],s.pure(r)),s.transferObjects([S],s.pure(r)),s.transferObjects([w],s.pure(r)),p||s.transferObjects([m],s.pure(r)),s.setSenderIfNotSet(r),s.setGasBudget(Vi),s};var $a=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new vd(e.network.replace("sui:",""),e.suiClient);return await Ki({...this.data,turbosSdk:n,currentAddress:e.account.address})}static fromData(e){return new a(e)}};import{TurbosSdk as xd}from"turbos-clmm-sdk";var qa=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new xd(e.network.replace("sui:",""),e.suiClient);return await Hi({...this.data,turbosSdk:n,currentAddress:e.account.address})}static fromData(e){return new a(e)}};var Qa=class{application="turbos";supportSDK="@mysten/sui.js";async deserialize(t){let e=new Dd(t.network.replace("sui:",""),t.suiClient),n=await e.contract.getConfig(),{transactionBlock:o,account:r}=t;console.log(t,"input");let s=await new Pa(o,e,n).decode(r.address);return{txType:Ad.Other,txSubType:s.type,intentionData:s.intentionData}}async build(t){let{suiClient:e,account:n,network:o}=t,r;switch(console.log(t.intentionData,"intentionData"),t.txSubType){case"CreatePool":r=Na.fromData(t.intentionData);break;case"AddLiquidity":r=_a.fromData(t.intentionData);break;case"IncreaseLiquidity":r=Ea.fromData(t.intentionData);break;case"DecreaseLiquidity":r=Ma.fromData(t.intentionData);break;case"RemoveLiquidity":r=Ua.fromData(t.intentionData);break;case"CollectFee":r=ja.fromData(t.intentionData);break;case"CollectReward":r=Ba.fromData(t.intentionData);break;case"Burn":r=Ra.fromData(t.intentionData);break;case"Swap":r=Fa.fromData(t.intentionData);break;case"PrixJoin":r=La.fromData(t.intentionData);break;case"PrixClaim":r=Wa.fromData(t.intentionData);break;case"SwapExactBaseForQuote":r=$a.fromData(t.intentionData);break;case"SwapExactQuoteForBase":r=qa.fromData(t.intentionData);break;default:throw new Error("not implemented")}return r.build({suiClient:e,account:n,network:o})}};import{TransactionType as Nd}from"@msafe/sui3-utils";import{TransactionType as Lo}from"@msafe/sui3-utils";import{bcs as Gi}from"@mysten/sui.js/bcs";import{normalizeStructTag as _d,normalizeSuiAddress as ce}from"@mysten/sui.js/utils";var Od={packageId:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55",poolObjectId:"0x7fa2faa111b8c65bea48a23049bfd81ca8f971a262d981dcd9a17c3825cb5baf",metadataObjectId:"0x680cd26af32b2bde8d3361e804c53ec1d1cfe24c7f039eb7f549e8dfde389a60",systemStateObjectId:"0x0000000000000000000000000000000000000000000000000000000000000005",certType:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55::cert::CERT",gasBudget:5e7},D=Od;var Va=class{constructor(t){this.txb=t}decode(){if(console.log("txb",this.txb),this.isStakeTransaction())return this.decodeStake();if(this.isUnStakeTransaction())return this.decodeUnStake();if(this.isClaimTicketTransaction())return this.decodeClaimTicket();throw new Error("Unknown transaction type")}get transactions(){return this.txb.blockData.transactions}getMoveCallTransaction(t){return this.transactions.find(e=>e.kind==="MoveCall"&&e.target===t)}isStakeTransaction(){return!!this.getMoveCallTransaction(`${D.packageId}::native_pool::stake`)}isUnStakeTransaction(){return!!this.getMoveCallTransaction(`${D.packageId}::native_pool::unstake`)}isClaimTicketTransaction(){return!!this.getMoveCallTransaction(`${D.packageId}::native_pool::burn_ticket`)}decodeStake(){let t=this.transactions[0].amounts[0].value.toNumber();return{txType:Lo.Other,type:"Stake",intentionData:{amount:t}}}decodeUnStake(){let e=this.transactions.find(n=>n.kind==="SplitCoins").amounts[0].value.toNumber();return{txType:Lo.Other,type:"UnStake",intentionData:{amount:e}}}decodeClaimTicket(){let t=this.helper.decodeOwnedObjectId(2);return console.log(t),{txType:Lo.Other,type:"ClaimTicket",intentionData:{ticketId:t}}}get helper(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(D.packageId));return new Uo(t,this.txb)}},Uo=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 ce(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 Gi.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 ce(t.value.Object.ImmOrOwned.objectId)}return ce(t.value)}static getSharedObjectId(t){if(t.type!=="object")throw new Error(`not object argument: ${JSON.stringify(t)}`);if(typeof t.value!="object")return ce(t.value);if(!("Object"in t.value)||!("Shared"in t.value.Object))throw new Error("not Shared");return ce(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 Gi.de(e,new Uint8Array(n))}typeArg(t){return _d(this.moveCall.typeArguments[t])}txArg(t){return this.moveCall.arguments[t]}};import{TransactionBlock as Rd}from"@mysten/sui.js/transactions";var Ha=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){console.log(e);let n=new Rd,{ticketId:o}=this.data;return n.moveCall({target:`${D.packageId}::native_pool::burn_ticket`,arguments:[n.object(D.poolObjectId),n.object(D.systemStateObjectId),n.object(o)]}),n}static fromData(e){return new a(e)}};import{TransactionBlock as jd}from"@mysten/sui.js/transactions";var Ka=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){console.log(e);let n=new jd,{amount:o}=this.data,[r]=n.splitCoins(n.gas,[n.pure(o)]);return n.moveCall({target:`${D.packageId}::native_pool::stake`,arguments:[n.object(D.poolObjectId),n.object(D.metadataObjectId),n.object(D.systemStateObjectId),r]}),n}static fromData(e){return new a(e)}};import{TransactionBlock as Bd}from"@mysten/sui.js/transactions";var Ga=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){console.log(e);let n=new Bd,{amount:o}=this.data,r=(await e.suiClient.getAllCoins({owner:e.account.address,limit:100})).data,[i,...s]=r.filter(l=>l.coinType.split("::")[0]===D.certType.split("::")[0]),c=n.object(i.coinObjectId);s.length&&n.mergeCoins(c,s.map(l=>n.object(l.coinObjectId)));let d=n.splitCoins(n.object(i.coinObjectId),[n.pure(o)]);return n.moveCall({target:`${D.packageId}::native_pool::unstake`,arguments:[n.object(D.poolObjectId),n.object(D.metadataObjectId),n.object(D.systemStateObjectId),d]}),n}static fromData(e){return new a(e)}};var za=class{application="volo";supportSDK="@mysten/sui.js";async deserialize(t){let{transactionBlock:e}=t,o=new Va(e).decode();return{txType:Nd.Other,txSubType:o.type,intentionData:o.intentionData}}async build(t){let{suiClient:e,account:n}=t,o;switch(t.txSubType){case"Stake":o=Ka.fromData(t.intentionData);break;case"UnStake":o=Ga.fromData(t.intentionData);break;case"ClaimTicket":o=Ha.fromData(t.intentionData);break;default:throw new Error("not implemented")}return o.build({suiClient:e,account:n})}};var WD=Tn.fromHelpers([new pn,new In,new cn,new Cn,new Ne,new Qa,new ya,new za,new me,new Oa,new Ca]);export{WD as appHelpers};
|
|
2
2
|
//# sourceMappingURL=index.mjs.map
|