@msafe/sui-app-store 0.0.189 → 0.0.191

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -1,2 +1,2 @@
1
- var gc=Object.defineProperty;var Qr=(a,t)=>{for(var e in t)gc(a,e,{get:t[e],enumerable:!0})};import{TransactionType as vc}from"@msafe/sui3-utils";import hc from"sort-keys-recursive";var f=class{constructor(t){this.data=t}serialize(){return JSON.stringify(hc(this.data))}};import{depositDoubleAssetTxb as yc}from"@alphafi/alphafi-sdk";var ke=class a extends f{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{account:n}=e,{poolName:o,amount:r,isAmountA:i}=this.data;return await yc(o,n.address,r,i)}static fromData(e){return console.log("DepositDoubleAssetIntention.fromData",e),new a(e)}};import{depositSingleAssetTxb as Sc}from"@alphafi/alphafi-sdk";var De=class a extends f{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{account:n}=e,{poolName:o,amount:r}=this.data;return await Sc(o,n.address,r)}static fromData(e){return console.log("DepositSingleAssetIntention.fromData",e),new a(e)}};import{withdrawAlphaTxb as wc}from"@alphafi/alphafi-sdk";var xe=class a extends f{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{account:n}=e,{withdrawFromLocked:o,xTokensAmount:r}=this.data;return await wc(r,o,n.address)}static fromData(e){return console.log("WithdrawAlphaIntention.fromData",e),new a(e)}};import{withdrawTxb as Cc}from"@alphafi/alphafi-sdk";var ve=class a extends f{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{account:n}=e,{poolName:o,xTokensAmount:r}=this.data;return await Cc(r,o,n.address)}static fromData(e){return console.log("WithdrawIntention.fromData",e),new a(e)}};import{claimRewardTxb as Tc}from"@alphafi/alphafi-sdk";var Ae=class a extends f{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{account:n}=e;return await Tc(n.address)}static fromData(e){return new a(e)}};import{TransactionType as Qt}from"@msafe/sui3-utils";import{coinsList as kc,poolIdPoolNameMap as Dc,poolInfo as Hr,singleAssetPoolCoinMap as xc}from"@alphafi/alphafi-sdk";import{bcs as Oe,fromB64 as Pe}from"@mysten/bcs";var Re=class{constructor(t,e){this.transaction=t;this.simResult=e}decode(){if(this.isClaimRewardTransaction())return this.decodeClaimReward();let t=this.getLiquidityChangeEvent();if(!t)throw new Error("No liquidity change event found. Unable to decode transaction.");let e=t.parsedJson,n=e.pool_id,o=Dc[n];if(console.log("Decoder event data - ",e),console.log("Decoder poolName - ",o),this.isWithdrawAlphaEvent(t))return this.decodeWithdrawAlpha(e);if(this.isWithdrawEvent(e))return this.decodeWithdraw(o);if(this.isDoubleAssetDepositEvent(e,o))return this.decodeDoubleAssetDeposit(o,e);if(this.isSingleAssetDepositEvent(e,o))return this.decodeSingleAssetDeposit(o,e);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)}getLiquidityChangeEvent(){return this.simResult.events.find(t=>this.isLiquidityChangeEventType(t.type))}isClaimRewardTransaction(){return!!this.getMoveCallCommand("get_user_rewards_all")}isLiquidityChangeEventType(t){return t.includes("LiquidityChangeEvent")||t.includes("LiquidityChangeNewNewEvent")||t.includes("WithdrawEventV2")}isWithdrawAlphaEvent(t){return t.type.includes("WithdrawEventV2")}isWithdrawEvent(t){return t.event_type===1}isDoubleAssetDepositEvent(t,e){return t.event_type===0&&Hr[e].assetTypes.length===2}isSingleAssetDepositEvent(t,e){return t.event_type===0&&Hr[e].assetTypes.length===1}extractXTokensAmount(){let t=this.inputs.find(o=>o.Pure!==void 0);if(!t||!t.Pure?.bytes)throw new Error("Unable to extract xTokensAmount from inputs");let e=t.Pure.bytes,n;return e.length===12?n=Oe.u64().parse(Pe(e)):e.length===24?n=Oe.u128().parse(Pe(e)):e.length===44?n=Oe.u256().parse(Pe(e)):n=n=Oe.u64().parse(Pe(e)),n}decodeDoubleAssetDeposit(t,e){let{amount_a:n,amount_b:o}=e,r=Number(n)>0;return console.log("Decoder.decodeDoubleAssetDeposit",n,o,r),{txType:Qt.Other,type:"depositDoubleAsset",intentionData:{poolName:t,amount:r?n:o,isAmountA:r}}}decodeSingleAssetDeposit(t,e){let{amount:n}=e;if(console.log("Decoder.decodeSingleAssetDeposit",n),this.getLiquidityChangeEvent().type.includes(":alphafi_navi_pool:")){let r=xc[t].coin,i=kc[r].expo;n=Math.floor(Number(n)/10**(9-i)).toString()}return{txType:Qt.Other,type:"depositSingleAsset",intentionData:{poolName:t,amount:n}}}decodeWithdraw(t){let e=this.extractXTokensAmount();return console.log("Decoder.decodeWithdraw",e),{txType:Qt.Other,type:"withdraw",intentionData:{poolName:t,xTokensAmount:e}}}decodeWithdrawAlpha(t){let e=this.extractXTokensAmount(),{amount_withdrawn_from_locked:n}=t;return console.log("Decoder.decodeWithdrawAlpha",e,n),{txType:Qt.Other,type:"withdrawAlpha",intentionData:{withdrawFromLocked:Number(n)>0,xTokensAmount:e}}}decodeClaimReward(){return{txType:Qt.Other,type:"claimReward",intentionData:{}}}};var _e=class{application="alphafi";supportSDK="@mysten/sui";async deserialize(t){let{transaction:e,suiClient:n,account:o}=t,r=await n.devInspectTransactionBlock({sender:e.getData().sender,transactionBlock:e});console.log("AlphaFiHelper Sim result - ",r);let s=new Re(e,r).decode();return{txType:vc.Other,txSubType:s.type,intentionData:s.intentionData}}async build(t){let{account:e}=t;console.log("AlphaFi build transaction type",t.txSubType);let n;switch(t.txSubType){case"depositSingleAsset":n=De.fromData(t.intentionData);break;case"depositDoubleAsset":n=ke.fromData(t.intentionData);break;case"withdraw":n=ve.fromData(t.intentionData);break;case"withdrawAlpha":n=xe.fromData(t.intentionData);break;case"claimReward":n=Ae.fromData(t.intentionData);break;default:throw new Error("not implemented")}return n.build({account:e})}};import{TransactionType as Jc}from"@msafe/sui3-utils";import{TransactionType as q}from"@msafe/sui3-utils";import{SBUCK_FOUNTAIN_PACKAGE_ID as Ja}from"bucket-protocol-sdk";import{bcs as Xa}from"@mysten/sui/bcs";var Be=class{constructor(t){this.transaction=t}decode(){if(this.isSBUCKDepositTransaction())return this.decodeSBUCKDeposit();if(this.isSBUCKUnstakeTransaction())return this.decodeSBUCKUnstake();if(this.isSBUCKWithdrawTransaction())return this.decodeSBUCKWithdraw();if(this.isSBUCKClaimTransaction())return this.decodeSBUCKClaim();if(this.isLockedClaimTransaction())return this.decodeLockedClaim();if(this.isBorrowTransaction())return this.decodeBorrow();if(this.isRepayTransaction())return this.decodeRepay();if(this.isWithdrawTransaction())return this.decodeWithdraw();if(this.isCloseTransaction())return this.decodeClose();if(this.isTankDepositTransaction())return this.decodeTankDeposit();if(this.isTankWithdrawTransaction())return this.decodeTankWithdraw();if(this.isTankClaimTransaction())return this.decodeTankClaim();if(this.isPsmTransaction())return this.decodePsm();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)}getMoveCallModuleCommand(t,e){return this.commands.find(n=>n.$kind==="MoveCall"&&n.MoveCall.module===t&&n.MoveCall.function===e)}getMoveCallPackageModuleCommand(t,e,n){return this.commands.find(o=>o.$kind==="MoveCall"&&o.MoveCall.package===t&&o.MoveCall.module===e&&o.MoveCall.function===n)}getMoveCallModuleCommands(t,e){return this.commands.filter(n=>n.$kind==="MoveCall"&&n.MoveCall.module===t&&n.MoveCall.function===e)}getSplitCoinsCommands(){return this.commands.filter(t=>t.$kind==="SplitCoins")}getTransferCommands(){return this.commands.filter(t=>t.$kind==="TransferObjects")}isPsmTransaction(){return!!this.getMoveCallCommand("charge_reservoir")||!!this.getMoveCallCommand("discharge_reservoir")}isStrapNewTransaction(){return!!this.getMoveCallModuleCommand("strap","new")}isBorrowTransaction(){return!!this.getMoveCallModuleCommand("bucket_operations","high_top_up")||!!this.getMoveCallModuleCommand("bucket_operations","high_borrow")||!!this.getMoveCallModuleCommand("bucket_operations","high_borrow_with_strap")}isRepayTransaction(){return!!this.getMoveCallModuleCommand("bucket_operations","fully_repay")||!!this.getMoveCallModuleCommand("bucket_operations","fully_repay_with_strap")||!!this.getMoveCallModuleCommand("bucket_operations","repay_and_withdraw")||!!this.getMoveCallModuleCommand("bucket_operations","repay_and_withdraw_with_strap")}isWithdrawTransaction(){return!!this.getMoveCallModuleCommand("buck","withdraw")||!!this.getMoveCallModuleCommand("buck","withdraw_with_strap")}isCloseTransaction(){return!!this.getMoveCallModuleCommand("bucket_operations","destroy_empty_strap")}isTankDepositTransaction(){return!!this.getMoveCallModuleCommand("tank_operations","deposit")}isTankWithdrawTransaction(){return!!this.getMoveCallModuleCommand("tank_operations","withdraw")}isTankClaimTransaction(){return!!this.getMoveCallModuleCommand("tank_operations","claim")}isSBUCKDepositTransaction(){return!!this.getMoveCallModuleCommand("buck","buck_to_sbuck")}isSBUCKWithdrawTransaction(){return!!this.getMoveCallModuleCommand("buck","sbuck_to_buck")}isSBUCKStakeTransaction(){return!!this.getMoveCallPackageModuleCommand(Ja,"fountain_core","stake")}isSBUCKUnstakeTransaction(){return!!this.getMoveCallPackageModuleCommand(Ja,"fountain_core","force_unstake")}isSBUCKClaimTransaction(){return!!this.getMoveCallPackageModuleCommand(Ja,"fountain_core","claim")}isLockedClaimTransaction(){return!!this.getMoveCallModuleCommand("proof_rule","claim")||!!this.getMoveCallModuleCommand("lst_proof_rule","claim")}isLstUnlockTransaction(){return!!this.getMoveCallModuleCommand("lst_proof_rule","unlock")}decodePsm(){let t,e,n="0",o=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];return o.$kind=="Input"&&(n=this.getPureInputU64(o.Input)),this.getMoveCallCommand("charge_reservoir")?(t=this.getMoveCallCommand("charge_reservoir").MoveCall.typeArguments[0],e=!1):(t=this.getMoveCallCommand("discharge_reservoir").MoveCall.typeArguments[0],e=!0),console.log("Decoder.decodePsm",t,n,e),{txType:q.Other,type:"psm",intentionData:{coinType:t,amount:n,buckToCoin:e}}}decodeBorrow(){let t="",e="0",n,o=this.getStrapId(),r="0",i=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];if(i.$kind=="Input"&&(r=this.getPureInputU64(i.Input)),this.getMoveCallCommand("high_top_up")){let s=this.getMoveCallCommand("high_top_up").MoveCall;t=s.typeArguments[0];let c=s.arguments[1];c.$kind=="Input"&&(e=this.getPureInputU64(c.Input));let l=s.arguments[3];if(l.$kind=="Input"){let d=this.getPureAddresses(l.Input);d.length==1&&(n=d[0])}}else if(this.getMoveCallCommand("high_borrow")){let s=this.getMoveCallCommand("high_borrow").MoveCall;t=s.typeArguments[0];let c=s.arguments[4];c.$kind=="Input"&&(e=this.getPureInputU64(c.Input));let l=s.arguments[5];if(l.$kind=="Input"){let d=this.getPureAddresses(l.Input);d.length==1&&(n=d[0])}}else if(this.getMoveCallCommand("high_borrow_with_strap")){let s=this.getMoveCallCommand("high_borrow_with_strap").MoveCall;t=s.typeArguments[0];let c=s.arguments[5];c.$kind=="Input"&&(e=this.getPureInputU64(c.Input));let l=s.arguments[6];if(l.$kind=="Input"){let d=this.getPureAddresses(l.Input);d.length==1&&(n=d[0])}}return{txType:q.Other,type:"borrow",intentionData:{collateralType:t,collateralAmount:r,borrowAmount:e,insertionPlace:n,strapId:o}}}decodeRepay(){let t="",e="0",n="0",o=!1,r,i=this.getStrapId();if(this.getMoveCallCommand("fully_repay"))t=this.getMoveCallCommand("fully_repay").MoveCall.typeArguments[0];else if(this.getMoveCallCommand("fully_repay_with_strap"))t=this.getMoveCallCommand("fully_repay_with_strap").MoveCall.typeArguments[0];else if(this.getMoveCallCommand("repay_and_withdraw")){let s=this.getMoveCallCommand("repay_and_withdraw").MoveCall;t=s.typeArguments[0];let c=s.arguments[4];c.$kind=="Input"&&(n=this.getPureInputU64(c.Input));let l=s.arguments[5];if(l.$kind=="Input"){let u=this.getPureAddresses(l.Input);u.length==1&&(r=u[0])}let d=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];d.$kind=="Input"&&(e=this.getPureInputU64(d.Input))}else if(this.getMoveCallCommand("repay_and_withdraw_with_strap")){let s=this.getMoveCallCommand("repay_and_withdraw_with_strap").MoveCall;t=s.typeArguments[0];let c=s.arguments[5];c.$kind=="Input"&&(n=this.getPureInputU64(c.Input));let l=s.arguments[6];if(l.$kind=="Input"){let u=this.getPureAddresses(l.Input);u.length==1&&(r=u[0])}let d=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];d.$kind=="Input"&&(e=this.getPureInputU64(d.Input))}return{txType:q.Other,type:"repay",intentionData:{collateralType:t,repayAmount:e,withdrawAmount:n,isSurplus:o,insertionPlace:r,strapId:i}}}decodeWithdraw(){let t="",e="0",n,o=this.getStrapId();if(this.getMoveCallCommand("withdraw_with_strap")){let r=this.getMoveCallCommand("withdraw_with_strap").MoveCall;t=r.typeArguments[0];let i=r.arguments[4];i.$kind=="Input"&&(e=this.getPureInputU64(i.Input));let s=r.arguments[5];if(s.$kind=="Input"){let c=this.getPureAddresses(s.Input);c.length==1&&(n=c[0])}}else if(this.getMoveCallCommand("withdraw")){let r=this.getMoveCallCommand("withdraw").MoveCall;t=r.typeArguments[0];let i=r.arguments[3];i.$kind=="Input"&&(e=this.getPureInputU64(i.Input));let s=r.arguments[4];if(s.$kind=="Input"){let c=this.getPureAddresses(s.Input);c.length==1&&(n=c[0])}}return{txType:q.Other,type:"withdraw",intentionData:{collateralType:t,withdrawAmount:e,insertionPlace:n,strapId:o}}}decodeClose(){let t="",e=this.getStrapId();return this.getMoveCallCommand("destroy_empty_strap")&&(t=this.getMoveCallCommand("destroy_empty_strap").MoveCall.typeArguments[0]),{txType:q.Other,type:"close",intentionData:{collateralType:t,strapId:e}}}decodeSBUCKDeposit(){let e=this.getMoveCallCommand("into_balance").MoveCall.typeArguments[0],n="0",r=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];r.$kind=="Input"&&(n=this.getPureInputU64(r.Input));let i=this.isSBUCKStakeTransaction();return console.log("Decoder.decodeSBUCKDeposit",e,n,i),{txType:q.Other,type:"sbuck-deposit",intentionData:{coinType:e,amount:n,isStake:i}}}decodeSBUCKUnstake(){let t="0",e=this.isSBUCKStakeTransaction();if(e){let c=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];c.$kind=="Input"&&(t=this.getPureInputU64(c.Input))}let n=[],o=this.getMoveCallModuleCommands("proof_rule","unlock");if(o.length>0)for(let s of o)n.push("");else{let s=this.getMoveCallModuleCommands("fountain_core","force_unstake");for(let c of s){let l=c.MoveCall.arguments[2];if(l.$kind=="Input"){let d=this.inputs[l.Input].UnresolvedObject.objectId;n.push(d)}}}let r=this.isSBUCKWithdrawTransaction(),i={stakeProofs:n,amount:t,isStake:e,toBuck:r};return console.log("Decoder.decodeSBUCKUnstake",i),{txType:q.Other,type:"sbuck-unstake",intentionData:i}}decodeSBUCKWithdraw(){let t="0",n=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];return n.$kind=="Input"&&(t=this.getPureInputU64(n.Input)),console.log("Decoder.SBUCKWithdraw",t),{txType:q.Other,type:"sbuck-withdraw",intentionData:{amount:t}}}decodeSBUCKClaim(){let t=[],e=this.getMoveCallModuleCommands("fountain_core","claim");for(let n of e){let o=n.MoveCall.arguments[2];if(o.$kind=="Input"){let r=this.inputs[o.Input].UnresolvedObject.objectId;t.push(r)}}return console.log("Decoder.decodeSBUCKClaim",t),{txType:q.Other,type:"sbuck-claim",intentionData:{stakeProofs:t}}}decodeTankDeposit(){let t="0",n=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];n.$kind=="Input"&&(t=this.getPureInputU64(n.Input));let r=this.getMoveCallModuleCommand("tank_operations","deposit").MoveCall.typeArguments[0];return console.log("Decoder.decodeTankDeposit",r,t),{txType:q.Other,type:"tank-deposit",intentionData:{coinType:r,amount:t}}}decodeTankWithdraw(){let t=this.getMoveCallModuleCommand("tank_operations","withdraw").MoveCall,e=t.typeArguments[0],n="0",o=t.arguments[5];return o.$kind=="Input"&&(n=this.getPureInputU64(o.Input)),console.log("Decoder.decodeTankWithdraw",e,n),{txType:q.Other,type:"tank-withdraw",intentionData:{coinType:e,amount:n}}}decodeTankClaim(){let e=this.getMoveCallModuleCommand("tank_operations","claim").MoveCall.typeArguments[0];return console.log("Decoder.decodeTankClaim",e),{txType:q.Other,type:"tank-claim",intentionData:{coinType:e}}}decodeLockedClaim(){let t="",e=0,n=this.getMoveCallModuleCommands("proof_rule","claim");for(let r of n)t=r.MoveCall.typeArguments[0],e++;let o=this.getMoveCallModuleCommands("lst_proof_rule","claim");for(let r of o)t=r.MoveCall.typeArguments[0],e++;return console.log("Decoder.decodeLockedClaim",t,e),{txType:q.Other,type:"lock-claim",intentionData:{coinType:t,proofCount:e}}}getCoinInput(t){if(this.inputs[t].$kind!=="Object")throw new Error("not Object argument")}getStrapId(){let t;if(this.isStrapNewTransaction()?t="new":this.isLstUnlockTransaction()&&(t="locked"),!t){let e=this.getMoveCallModuleCommand("fountain","unstake");if(e){let n=e.MoveCall.arguments[2];n.$kind=="Input"&&(t=this.inputs[n.Input].UnresolvedObject.objectId)}}return t}getPureInputU64(t){let e=this.inputs[t];if(e.$kind!=="Pure")throw new Error("not pure argument");return Xa.U64.fromBase64(e.Pure.bytes)}getPureAddresses(t){let e=this.inputs[t];if(e.$kind!=="Pure")throw new Error("not pure argument");return Xa.vector(Xa.Address).fromBase64(e.Pure.bytes)}};import{TransactionType as Rc}from"@msafe/sui3-utils";import{Transaction as Oc}from"@mysten/sui/transactions";import{buildPsmTx as Pc}from"bucket-protocol-sdk";import{BucketClient as Ac}from"bucket-protocol-sdk";var R=(a,t)=>{let e=a==="sui:mainnet"?"mainnet":"testnet";return new Ac(e,t.address)};var Gr=async(a,t,e)=>{let{coinType:n,amount:o,buckToCoin:r}=a,i=new Oc,s=R(e,t);return await Pc(s,i,n,o,r,t.address),i};var Me=class a extends f{constructor(e){super(e);this.data=e}txType=Rc.Other;txSubType="psm";async build(e){let{account:n,network:o}=e;return await Gr(this.data,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Nc}from"@msafe/sui3-utils";import{Transaction as je}from"@mysten/sui/transactions";import{buildBorrowTx as _c,buildCloseTx as Bc,buildRepayTx as Mc,buildWithdrawTx as jc}from"bucket-protocol-sdk";var zr=async(a,t,e)=>{let{collateralType:n,collateralAmount:o,borrowAmount:r,insertionPlace:i,strapId:s}=a,c=new je,l=R(e,t);return await _c(l,c,n,o,r,t.address,i,s),c},Jr=async(a,t,e)=>{let{collateralType:n,withdrawAmount:o,insertionPlace:r,strapId:i}=a,s=new je,c=R(e,t);return await jc(c,s,n,o,t.address,r,i),s},Xr=async(a,t,e)=>{let{collateralType:n,repayAmount:o,withdrawAmount:r,isSurplus:i,insertionPlace:s,strapId:c}=a,l=new je,d=R(e,t);return await Mc(d,l,n,o,r,t.address,i,s,c),l},Yr=async(a,t,e)=>{let{collateralType:n,recipient:o,strapId:r}=a,i=new je,s=R(e,t);return await Bc(s,i,n,o,r),i};var Ne=class a extends f{constructor(e){super(e);this.data=e}txType=Nc.Other;txSubType="borrow";async build(e){let{account:n,network:o}=e;return await zr(this.data,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Ec}from"@msafe/sui3-utils";var Ee=class a extends f{constructor(e){super(e);this.data=e}txType=Ec.Other;txSubType="repay";async build(e){let{account:n,network:o}=e;return await Xr(this.data,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Wc}from"@msafe/sui3-utils";var We=class a extends f{constructor(e){super(e);this.data=e}txType=Wc.Other;txSubType="withdraw";async build(e){let{account:n,network:o}=e;return await Jr(this.data,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Lc}from"@msafe/sui3-utils";var Le=class a extends f{constructor(e){super(e);this.data=e}txType=Lc.Other;txSubType="close";async build(e){let{account:n,network:o}=e;return await Yr(this.data,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Ve}from"@msafe/sui3-utils";import{Transaction as Ue}from"@mysten/sui/transactions";import{buildSBUCKClaimTx as Uc,buildSBUCKDepositTx as Fc,buildSBUCKUnstakeTx as qc,buildSBUCKWithdrawTx as $c}from"bucket-protocol-sdk";var Zr=async(a,t,e)=>{let{coinType:n,amount:o,isStake:r}=a,i=new Ue,s=R(e,t);return await Fc(s,i,n,o,t.address,r),i},ti=async(a,t,e)=>{let{stakeProofs:n,amount:o,isStake:r,toBuck:i}=a,s=new Ue,c=R(e,t);return await qc(c,s,n,o,t.address,r,i),s},ei=async(a,t,e)=>{let{amount:n}=a,o=new Ue,r=R(e,t);return await $c(r,o,n,t.address),o},ni=async(a,t,e)=>{let{stakeProofs:n}=a,o=new Ue,r=R(e,t);return await Uc(r,o,n,t.address),o};var Fe=class a extends f{constructor(e){super(e);this.data=e}txType=Ve.Other;txSubType="sbuck-deposit";async build(e){let{account:n,network:o}=e;return await Zr(this.data,n,o)}static fromData(e){return new a(e)}},qe=class a extends f{constructor(e){super(e);this.data=e}txType=Ve.Other;txSubType="sbuck-unstake";async build(e){let{account:n,network:o}=e;return await ti(this.data,n,o)}static fromData(e){return new a(e)}},$e=class a extends f{constructor(e){super(e);this.data=e}txType=Ve.Other;txSubType="sbuck-withdraw";async build(e){let{account:n,network:o}=e;return await ei(this.data,n,o)}static fromData(e){return new a(e)}},Ke=class a extends f{constructor(e){super(e);this.data=e}txType=Ve.Other;txSubType="sbuck-claim";async build(e){let{account:n,network:o}=e;return await ni(this.data,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Za}from"@msafe/sui3-utils";import{Transaction as Ya}from"@mysten/sui/transactions";import{buildTankClaimTx as Kc,buildTankDepositTx as Vc,buildTankWithdrawTx as Qc}from"bucket-protocol-sdk";var oi=async(a,t,e)=>{let{coinType:n,amount:o}=a,r=new Ya,i=R(e,t);return await Vc(i,r,n,o,t.address),r},ai=async(a,t,e)=>{let{coinType:n,amount:o}=a,r=new Ya,i=R(e,t);return await Qc(i,r,n,o,t.address),r},ri=async(a,t,e)=>{let{coinType:n}=a,o=new Ya,r=R(e,t);return await Kc(r,o,n,t.address),o};import{Transaction as Hc}from"@mysten/sui/transactions";import{buildLockedClaimTx as Gc}from"bucket-protocol-sdk";var ii=async(a,t,e)=>{let{coinType:n,proofCount:o}=a,r=new Hc,i=R(e,t);return await Gc(i,r,n,o,t.address),r};var Qe=class a extends f{constructor(e){super(e);this.data=e}txType=Za.Other;txSubType="tank-deposit";async build(e){let{account:n,network:o}=e;return await oi(this.data,n,o)}static fromData(e){return new a(e)}},He=class a extends f{constructor(e){super(e);this.data=e}txType=Za.Other;txSubType="tank-withdraw";async build(e){let{account:n,network:o}=e;return await ai(this.data,n,o)}static fromData(e){return new a(e)}},Ge=class a extends f{constructor(e){super(e);this.data=e}txType=Za.Other;txSubType="tank-claim";async build(e){let{account:n,network:o}=e;return await ri(this.data,n,o)}static fromData(e){return new a(e)}};import{TransactionType as zc}from"@msafe/sui3-utils";var ze=class a extends f{constructor(e){super(e);this.data=e}txType=zc.Other;txSubType="lock-claim";async build(e){let{account:n,network:o}=e;return await ii(this.data,n,o)}static fromData(e){return new a(e)}};var Je=class{application="bucket";supportSDK="@mysten/sui";async deserialize(t){console.log("Bucket helper deserialize input: ",t);let{transaction:e}=t,o=new Be(e).decode();return{txType:Jc.Other,txSubType:o.type,intentionData:o.intentionData}}async build(t){let{suiClient:e,account:n,network:o}=t,r;switch(t.txSubType){case"psm":r=Me.fromData(t.intentionData);break;case"borrow":r=Ne.fromData(t.intentionData);break;case"withdraw":r=We.fromData(t.intentionData);break;case"repay":r=Ee.fromData(t.intentionData);break;case"close":r=Le.fromData(t.intentionData);break;case"tank-deposit":r=Qe.fromData(t.intentionData);break;case"tank-withdraw":r=He.fromData(t.intentionData);break;case"tank-claim":r=Ge.fromData(t.intentionData);break;case"sbuck-deposit":r=Fe.fromData(t.intentionData);break;case"sbuck-unstake":r=qe.fromData(t.intentionData);break;case"sbuck-withdraw":r=$e.fromData(t.intentionData);break;case"sbuck-claim":r=Ke.fromData(t.intentionData);break;case"lock-claim":r=ze.fromData(t.intentionData);break;default:throw new Error("not implemented")}return r.build({suiClient:e,account:n,network:o})}};import{TransactionType as Bl}from"@msafe/sui3-utils";import{TransactionType as il}from"@msafe/sui3-utils";import{AggregatorClient as Xc,Env as si}from"@cetusprotocol/aggregator-sdk";import{CetusPeripherySDK as Yc}from"@cetusprotocol/cetus-periphery-sdk";import{CetusClmmSDK as Zc}from"@cetusprotocol/cetus-sui-clmm-sdk";import tl from"@cetusprotocol/vaults-sdk";import{SuiClient as el}from"@mysten/sui/client";var nl={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:"0xdc67d6de3f00051c505da10d8f6fbab3b3ec21ec65f0dc22a2f36c13fc102110",version:4,config:{pools_id:"0xf699e7f2276f5c9a75944b37a0c5b5d9ddfd2471bf6242483b03ab2887d198d0",global_config_id:"0xdaa46292632c3c4d8f31f23ea0f9b36a28ff3677e9684980e4438403a67a3d8f",global_vault_id:"0xce7bceef26d3ad1f6d9b6f13a953f053e6ed3ca77907516481ce99ae8e588f2b",admin_cap_id:""}},integrate:{package_id:"0x996c4d9480708fb8b92aa7acf819fb0497b5ec8e65ba06601cae2fb6db3312c3",published_at:"0x3a5aa90ffa33d09100d7b6941ea1c0ffe6ab66e77062ddd26320c1b073aabb10",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"},ol={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:"0x58e5de6e425397eeaf952d55c0f94637bee91b25d6138ce222f89cda0aefec03",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:"0x7e4ca066f06a1132ab0499c8c0b87f847a0d90684afa902e52501a44dbd81992",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:""}}},Tt=(a,t)=>{let e=nl,n=new Zc(e);return n.senderAddress=t.address,n},j=(a,t)=>{let e=Tt(a,t),n=ol;return new Yc(n,e)},al="https://api-sui.cetus.zone/router_v2/find_routes",ci=(a,t)=>{let e=new el({url:"https://fullnode.mainnet.sui.io/"});return new Xc(al,t.address,e,si.Mainnet)},rl={fullRpcUrl:"https://fullnode.mainnet.sui.io/",simulationAccount:{address:"0x326ce9894f08dcaa337fa232641cc34db957aec9ff6614c1186bc9a7508df0bb"},clmm_pool:{package_id:"0x1eabed72c53feb3805120a081dc15963c204dc8d091542592abaf7a35689b2fb",published_at:"0xdc67d6de3f00051c505da10d8f6fbab3b3ec21ec65f0dc22a2f36c13fc102110",config:{pools_id:"0xf699e7f2276f5c9a75944b37a0c5b5d9ddfd2471bf6242483b03ab2887d198d0",global_config_id:"0xdaa46292632c3c4d8f31f23ea0f9b36a28ff3677e9684980e4438403a67a3d8f",global_vault_id:"0xce7bceef26d3ad1f6d9b6f13a953f053e6ed3ca77907516481ce99ae8e588f2b",admin_cap_id:""}},integrate:{package_id:"0x996c4d9480708fb8b92aa7acf819fb0497b5ec8e65ba06601cae2fb6db3312c3",published_at:"0x3a5aa90ffa33d09100d7b6941ea1c0ffe6ab66e77062ddd26320c1b073aabb10"},frams:{package_id:"0x11ea791d82b5742cc8cab0bf7946035c97d9001d7c3803a93f119753da66f526",published_at:"0x7e4ca066f06a1132ab0499c8c0b87f847a0d90684afa902e52501a44dbd81992",config:{global_config_id:"0x21215f2f6de04b57dd87d9be7bb4e15499aec935e36078e2488f36436d64996e",rewarder_manager_id:"0xe0e155a88c77025056da08db5b1701a91b79edb6167462f768e387c3ed6614d5",rewarder_manager_handle:"0xb32e312cbb3367d6f3d2b4e57c9225e903d29b7b9f612dae2ddf75bdeb26a5aa",admin_cap_id:"0xf10fbf1fea5b7aeaa524b87769461a28c5c977613046360093673991f26d886c"}},vaults:{package_id:"0xd3453d9be7e35efe222f78a810bb3af1859fd1600926afced8b4936d825c9a05",published_at:"0x58e5de6e425397eeaf952d55c0f94637bee91b25d6138ce222f89cda0aefec03",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"}}}},aggregator:{endPoint:"https://api-sui.cetus.zone/router_v2/find_routes",fullNodeurl:"https://fullnode.mainnet.sui.io/",walletAddress:"0x326ce9894f08dcaa337fa232641cc34db957aec9ff6614c1186bc9a7508df0bb",env:si.Mainnet,providers:["CETUS","DEEPBOOK","KRIYA","KRIYAV3","FLOWX","FLOWXV3","AFTERMATH","TURBOS","HAEDAL","VOLO","AFSUI"]}},tr=(a,t)=>{let e=new tl(rl);return e.senderAddress=t.address,e};var li=async(a,t,e)=>await Tt(e,t).Position.createAddLiquidityFixTokenPayload(a?.parameter,a?.gasEstimateArg),di=async(a,t,e)=>await Tt(e,t).Position.createAddLiquidityFixTokenPayload(a?.parameter,a?.gasEstimateArg),ui=async(a,t,e)=>await Tt(e,t).Position.closePositionTransactionPayload(a),pi=async(a,t,e)=>await Tt(e,t).Position.removeLiquidityTransactionPayload(a),mi=async(a,t,e)=>await Tt(e,t).Rewarder.collectRewarderTransactionPayload(a);var Xe=class a extends f{constructor(e){super(e);this.data=e}txType=il.Other;txSubType="OpenAndAddLiquidity";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await li(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as sl}from"@msafe/sui3-utils";var Ye=class a extends f{constructor(e){super(e);this.data=e}txType=sl.Other;txSubType="ClaimFeeAndMining";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await mi(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as cl}from"@msafe/sui3-utils";var Ze=class a extends f{constructor(e){super(e);this.data=e}txType=cl.Other;txSubType="DecreaseLiquidity";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await pi(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as ll}from"@msafe/sui3-utils";var fi=async(a,t,e)=>await j(e,t).Farms.openPositionAddLiquidityStakePaylod(a),bi=async(a,t,e)=>await j(e,t).Farms.addLiquidityFixCoinPayload(a),gi=async(a,t,e)=>await j(e,t).Farms.removeLiquidityPayload(a),hi=async(a,t,e)=>await j(e,t).Farms.removeLiquidityPayload(a),yi=async(a,t,e)=>await j(e,t).Farms.claimFeeAndClmmReward(a),Si=async(a,t,e)=>await j(e,t).Farms.harvestPayload(a),wi=async(a,t,e)=>{let n=j(e,t),o=Object.values(a);return await n.Farms.batchHarvestPayload(o)},Ci=async(a,t,e)=>await j(e,t).Farms.depositPayload(a),Ti=async(a,t,e)=>await j(e,t).Farms.withdrawPayload(a);var tn=class a extends f{constructor(e){super(e);this.data=e}txType=ll.Other;txSubType="FarmingOpenAndAddLiquidity";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await fi(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as dl}from"@msafe/sui3-utils";var en=class a extends f{constructor(e){super(e);this.data=e}txType=dl.Other;txSubType="FarmingBatchHarvest";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await wi(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as ul}from"@msafe/sui3-utils";var nn=class a extends f{constructor(e){super(e);this.data=e}txType=ul.Other;txSubType="FarmingClaimFeeAndReward";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await yi(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as pl}from"@msafe/sui3-utils";var on=class a extends f{constructor(e){super(e);this.data=e}txType=pl.Other;txSubType="FarmingDecreaseLiquidity";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await gi(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as ml}from"@msafe/sui3-utils";var an=class a extends f{constructor(e){super(e);this.data=e}txType=ml.Other;txSubType="FarmingHarvest";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await Si(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as fl}from"@msafe/sui3-utils";var rn=class a extends f{constructor(e){super(e);this.data=e}txType=fl.Other;txSubType="FarmingIncreaseLiquidity";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await bi(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as bl}from"@msafe/sui3-utils";var sn=class a extends f{constructor(e){super(e);this.data=e}txType=bl.Other;txSubType="FarmingRemoveLiquidity";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await hi(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as gl}from"@msafe/sui3-utils";var cn=class a extends f{constructor(e){super(e);this.data=e}txType=gl.Other;txSubType="FarmingStake";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await Ci(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as hl}from"@msafe/sui3-utils";var ln=class a extends f{constructor(e){super(e);this.data=e}txType=hl.Other;txSubType="FarmingUnstake";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await Ti(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as yl}from"@msafe/sui3-utils";var dn=class a extends f{constructor(e){super(e);this.data=e}txType=yl.Other;txSubType="IncreaseLiquidity";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await di(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Sl}from"@msafe/sui3-utils";var un=class a extends f{constructor(e){super(e);this.data=e}txType=Sl.Other;txSubType="RemoveLiquidity";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await ui(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Tl}from"@msafe/sui3-utils";import{restituteMsafeFastRouterSwapParams as wl}from"@cetusprotocol/aggregator-sdk";import{Transaction as Cl}from"@mysten/sui/transactions";var Ii=async(a,t,e)=>{let n=ci(e,t),o=new Cl;return await n.fastRouterSwap({...a,routers:wl(a.routers),txb:o}),o};var pn=class a extends f{constructor(e){super(e);this.data=e}txType=Tl.Other;txSubType="AggregatorSwap";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await Ii(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Il}from"@msafe/sui3-utils";var ki=async(a,t,e)=>await tr(e,t).Vaults.deposit(a),Di=async(a,t,e)=>await tr(e,t).Vaults.withdraw(a);var mn=class a extends f{constructor(e){super(e);this.data=e}txType=Il.Other;txSubType="AddVaultsPosition";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await ki(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as kl}from"@msafe/sui3-utils";var fn=class a extends f{constructor(e){super(e);this.data=e}txType=kl.Other;txSubType="RemoveVaultsPosition";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await Di(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as xl}from"@msafe/sui3-utils";import{Transaction as Dl}from"@mysten/sui/transactions";var xi={package_id:"0x355714a1eeb7ab1d80902da6c92001170cda1212edf524c32aa308a3ac177c31",published_at:"0x355714a1eeb7ab1d80902da6c92001170cda1212edf524c32aa308a3ac177c31",cetus_coin_type:"0x06864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b::cetus::CETUS"},vi=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 Dl;return r.forEach(c=>{s.moveCall({target:`${xi.published_at}::router::redeem`,typeArguments:[xi.cetus_coin_type],arguments:[s.object(n),s.object(o),s.pure(c),s.object(i)]})}),s};var bn=class a extends f{constructor(e){super(e);this.data=e}txType=xl.Other;txSubType="VestingRedeem";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await vi(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Al}from"@msafe/sui3-utils";import{Transaction as vl}from"@mysten/sui/transactions";var Ai=async(a,t,e)=>{let n=j(e,t),o=new vl;return await n.XCetusModule.convertPayload(a,o)},Oi=async(a,t,e)=>await j(e,t).XCetusModule.redeemLockPayload(a),Pi=async(a,t,e)=>await j(e,t).XCetusModule.redeemDividendV3Payload(a.phases,a.venft_id,a.bonus_types,a.bonus_types_v2,a.xTokenType),Ri=async(a,t,e)=>await j(e,t).XCetusModule.cancelRedeemPayload(a),_i=async(a,t,e)=>await j(e,t).XCetusModule.redeemPayload(a);var gn=class a extends f{constructor(e){super(e);this.data=e}txType=Al.Other;txSubType="xCETUSCancelRedeem";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await Ri(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Ol}from"@msafe/sui3-utils";var hn=class a extends f{constructor(e){super(e);this.data=e}txType=Ol.Other;txSubType="xCETUSClaimStakingRwewards";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await Pi(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Pl}from"@msafe/sui3-utils";var yn=class a extends f{constructor(e){super(e);this.data=e}txType=Pl.Other;txSubType="xCETUSConvert";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await Ai(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Rl}from"@msafe/sui3-utils";var Sn=class a extends f{constructor(e){super(e);this.data=e}txType=Rl.Other;txSubType="xCETUSRedeem";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await _i(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as _l}from"@msafe/sui3-utils";var wn=class a extends f{constructor(e){super(e);this.data=e}txType=_l.Other;txSubType="xCETUSRedeemLock";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await Oi(r,n,o)}static fromData(e){return new a(e)}};var Cn=class{application="cetus";supportSDK="@mysten/sui";async deserialize(t){console.log("Cetus helper deserialize input: ",t);let{txbParams:e,action:n}=t;return{txType:Bl.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=Xe.fromData(t.intentionData);break;case"IncreaseLiquidity":r=dn.fromData(t.intentionData);break;case"DecreaseLiquidity":r=Ze.fromData(t.intentionData);break;case"RemoveLiquidity":r=un.fromData(t.intentionData);break;case"ClaimFeeAndMining":r=Ye.fromData(t.intentionData);break;case"FarmingOpenAndAddLiquidity":r=tn.fromData(t.intentionData);break;case"FarmingIncreaseLiquidity":r=rn.fromData(t.intentionData);break;case"FarmingDecreaseLiquidity":r=on.fromData(t.intentionData);break;case"FarmingRemoveLiquidity":r=sn.fromData(t.intentionData);break;case"FarmingClaimFeeAndReward":r=nn.fromData(t.intentionData);break;case"FarmingHarvest":r=an.fromData(t.intentionData);break;case"FarmingBatchHarvest":r=en.fromData(t.intentionData);break;case"FarmingStake":r=cn.fromData(t.intentionData);break;case"FarmingUnstake":r=ln.fromData(t.intentionData);break;case"xCETUSConvert":r=yn.fromData(t.intentionData);break;case"xCETUSRedeemLock":r=wn.fromData(t.intentionData);break;case"xCETUSClaimStakingRwewards":r=hn.fromData(t.intentionData);break;case"xCETUSCancelRedeem":r=gn.fromData(t.intentionData);break;case"xCETUSRedeem":r=Sn.fromData(t.intentionData);break;case"VestingRedeem":r=bn.fromData(t.intentionData);break;case"AggregatorSwap":r=pn.fromData(t.intentionData);break;case"AddVaultsPosition":r=mn.fromData(t.intentionData);break;case"RemoveVaultsPosition":r=fn.fromData(t.intentionData);break;default:throw new Error("not implemented")}return r.build({suiClient:e,account:n,network:o})}};import{TransactionType as Rd}from"@msafe/sui3-utils";import Ml from"sort-keys-recursive";var y=class{constructor(t){this.data=t}serialize(){return JSON.stringify(Ml(this.data))}};import{getFullnodeUrl as Tn}from"@mysten/sui.js/client";var er={};Qr(er,{contractId:()=>El,default:()=>ql,feeObjId:()=>Ul,roleObjId:()=>Wl,status:()=>Nl,transaction:()=>jl,upgradeCapObjId:()=>Fl,vaultObjId:()=>Ll});var jl="DiBZq4UmVVYiRL6ZJmFKYoHcxtxqrhsCXSkFyT7wUr3j",Nl="success",El="0x81c960dc653975fbd0072deca8afb92d322898c911622898ba1b2e3ad0c4bd8d",Wl="0xc6ec0bdee0bb59a72077e9acd2f42457043cf47080b3d3fad4d39abf28bba63a",Ll="0xbc4021387fbac149119fd24e92be9e58f745774292f3a2a12e2ac6daf5363e1d",Ul="0x4178f63970fe2daeb256dc5730ad172e82b3e8eb45f31b33e0daae72cd35e1e1",Fl="0xe1e9aa7d222d151bfe6dd83358b0d7fdcb11260f710800cfaf7ccc1b1e245115",ql={transaction:jl,status:Nl,contractId:El,roleObjId:Wl,vaultObjId:Ll,feeObjId:Ul,upgradeCapObjId:Fl};var nr={};Qr(nr,{contractId:()=>Vl,default:()=>Jl,feeObjId:()=>Gl,roleObjId:()=>Ql,status:()=>Kl,transaction:()=>$l,upgradeCapObjId:()=>zl,vaultObjId:()=>Hl});var $l="855FNDV8o8Z3fWULPnQo9qdhLJpsg7wZrkCpNyfw9KfB",Kl="success",Vl="0xc357c3985e8fb875d6b37141497af660779aa1bab0ec489b2213efd74067d1fa",Ql="0x5ab49bdf9fd1413e328ef242b3f8d83dde791b38a0b627bfc87fb25c010d34f1",Hl="0xb483558770d8eb26007f193b75db40f0a45f2e36863a687625885d4de6993378",Gl="0x48453fc4d7cde3fe35aad89e5dfb496608a6a55ea529a1c0274681a808627f94",zl="0x34279779a0d0d36bd5044b04830d607fa1b0ecf316548c8ac3a44151e4f1a42a",Jl={transaction:$l,status:Kl,contractId:Vl,roleObjId:Ql,vaultObjId:Hl,feeObjId:Gl,upgradeCapObjId:zl};var Xl=Tn("testnet"),Yl=Tn("testnet"),Zl=Tn("mainnet"),td=Tn("mainnet"),ed="https://bc3p6l5unl.execute-api.us-west-1.amazonaws.com/prod",nd="https://rolsbkota7.execute-api.us-west-1.amazonaws.com/prod",od="https://6p6mkx33ne.execute-api.us-west-1.amazonaws.com/prod",ad="https://xrae3mrjv5.execute-api.us-west-1.amazonaws.com/prod",Bi=er,Mi=nr,rd=new Map([["dev",{env:"dev",rpc:{url:Xl},backend:{url:ed},contract:Bi}],["stg",{env:"stg",rpc:{url:Yl},backend:{url:nd},contract:Bi}],["prev",{env:"prev",rpc:{url:Zl},backend:{url:od},contract:Mi}],["prod",{env:"prod",rpc:{url:td},backend:{url:ad},contract:Mi}]]);function ji(a,t){let e=rd.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 sd}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 In=class extends k{constructor(){super(11,"Backend is not specified")}};var kn=class extends k{constructor(){super(1,"Wallet not connected")}};import At,{AxiosError as id}from"axios";var vt=class extends k{constructor(t,e){super(10,t,{context:e})}};var Dn=class a{constructor(t){this.apiURL=t}static parseResponseData(t){if(t instanceof id)throw new vt(t.response?.statusText);if(t.status===200){if(t.data.success)return t.data.data;throw new vt(t.data.code)}throw new vt(t.status.toString())}async getIncomingStreams(t,e){let n=await At.post(`${this.apiURL}/stream`,{recipient:t,...e});return a.parseResponseData(n)}async getOutgoingStreams(t,e){let n=await At.post(`${this.apiURL}/stream`,{sender:t,...e});return a.parseResponseData(n)}async getStreamHistory(t){let e=await At.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 At.post(`${this.apiURL}/stream-info`,{address:t});return a.parseResponseData(e)}async getAllRecipients(t,e){let n=await At.post(`${this.apiURL}/stream-info`,{sender:t,status:e});return a.parseResponseData(n)}async getAllSenders(t,e){let n=await At.post(`${this.apiURL}/stream-info`,{recipient:t,status:e});return a.parseResponseData(n)}};var Ot=class a{signer;suiClient;envConfig;_backend;constructor(t){this.envConfig=t,this.suiClient=new sd({url:t.rpc.url}),t.backend&&(this._backend=new Dn(t.backend.url))}static new(t,e){let n=ji(t,e);return new a(n)}get walletType(){return this.wallet?this.wallet.type:"disconnected"}get backend(){if(!this._backend)throw new In;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 kn;return this.signer}async walletAddress(){return this.wallet.address()}};import{SUI_TYPE_ARG as Ad,normalizeStructTag as Od,normalizeSuiAddress as rs}from"@mysten/sui.js/utils";import{TransactionBlock as Rn}from"@mysten/sui.js/transactions";import{TransactionBlock as Ki}from"@mysten/sui.js/transactions";import{SUI_TYPE_ARG as Vi,normalizeStructTag as ud}from"@mysten/sui.js/utils";var or=50n,xn=10000n,Ni=25n,ar=100000000n;var J=class{constructor(t){this.object=t}moveArg(t){return t.object(this.object)}},Ht=class{constructor(t){this.objects=t}moveArgs(t){return t.makeMoveVec({objects:this.objects.map(e=>t.object(e))})}},it=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 Ei}from"buffer";import{normalizeSuiAddress as cd}from"@mysten/sui.js/utils";var Gt=class extends k{constructor(t,e){super(3,t,{context:e})}};var vn=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 Gt("Invalid contract return type.",{ctx:{expectType:"address",gotType:o}});return cd(Ei.from(n).toString("hex"))}getU64(t=0,e=0){let[n,o]=this.getValue(t,e);if(o!=="u64")throw new Gt("Invalid contract return type.",{ctx:{expectType:"u64",gotType:o}});return Ei.from(n).readBigInt64LE()}};import{bcs as Li}from"@mysten/sui.js/bcs";var v=class extends k{constructor(t,e,n){super(2,`Invalid input: ${t}`,{context:{fieldKey:e,fieldValue:n}})}};var Ui={groupId:"string",name:"string"},ld=64;function Fi(a){return qi(a),Li.ser(Ui,a).toString("base64")}function zt(a){let t=Li.de(Ui,a,"base64");return qi(t),t}function qi(a){if(!Wi(a.name))throw new v("Invalid metadata: Name contains unknown character");if(!Wi(a.groupId))throw new v("Invalid metadata: Group ID contains unknown character");if(a.name.length>ld)throw new v("Invalid metadata: Name exceed max length 64")}function Wi(a){return/^[\x00-\x7F]+$/.test(a)}import{normalizeStructTag as An}from"@mysten/sui.js/utils";function On(a,t){return An(a)===An(t)}function st(a,t){return An(a)===An(t)}var Pn="txn.gas";import{nanoid as dd}from"nanoid";function $i(){return dd()}var It=class a{constructor(t,e,n){this.globals=t;this.feeContract=e;this.streamContract=n}static convertCreateStreamInfoToInternal(t){return{metadata:Fi({name:t.name,groupId:$i()}),coinType:ud(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 Ki,n=this.calculateFeesInternal(t),o=this.getCreateStreamCoinRequests(t,n),r=await this.wallet.requestCoins(o),i=await this.addMergeCoins(e,r[0]),s;o.length>1?s=await this.addMergeCoins(e,r[1]):s=i;for(let c=0;c<t.recipients.length;c++){let l=t.recipients[c],d=this.amountForRecipient(l,t.numberEpoch),u=this.getStreamFeeLocal(d),[p]=e.splitCoins(i,[e.pure(d+u,"u64")]),[m]=e.splitCoins(s,[e.pure(this.flatSuiFee,"u64")]);this.streamContract.createStream(e,{paymentCoin:new it(p),flatFeeCoin:new it(m),metadata:t.metadata,recipient:l.address,timeStart:t.startTime,cliff:l.cliffAmount,epochInterval:t.epochInterval,numEpoch:t.numberEpoch,amountPerEpoch:l.amountPerEpoch,cancelable:t.cancelable,coinType:t.coinType})}return e}calculateCreateStreamFees(t){let e=a.convertCreateStreamInfoToInternal(t);return this.calculateFeesInternal(e)}feeParams(){return{createFeePercent:{numerator:or,denominator:xn},claimFeePercent:{numerator:Ni,denominator:xn},flatFeePerStream:ar}}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===Pn?n=t.gas:n=t.object(e.primaryCoin),n}getCreateStreamCoinRequests(t,e){let n=t.coinType;return On(n,Vi)?[{coinType:n,amount:e.totalAmount+e.streamFeeAmount+e.flatFeeAmount}]:[{coinType:n,amount:e.totalAmount+e.streamFeeAmount},{coinType:Vi,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 ar}getStreamFeeLocal(t){return t*or/xn}async getStreamFeeRemote(t){let e=this.feeContract.streamingFee(new Ki,t),n=await this.globals.suiClient.devInspectTransactionBlock({sender:await this.globals.walletAddress(),transactionBlock:e});return new vn(n).getU64()}get wallet(){return this.globals.wallet}};import{Transactions as Hi}from"@mysten/sui.js/transactions";var Qi="0x0000000000000000000000000000000000000000000000000000000000000006";var Pt=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(Hi.MoveCall({target:n,arguments:e.arguments.map(o=>o instanceof Ht?o.moveArgs(t):o instanceof J?o.moveArg(t):o instanceof it?o.moveArg():t.pure(o)),typeArguments:e.typeArgs})),t}addTransactionBlock(t,e,n=[],o=[]){t.add(Hi.MoveCall({target:e,arguments:n.map(r=>r instanceof Ht?r.moveArgs(t):r instanceof J?r.moveArg(t):r instanceof it?r.moveArg():t.pure(r)),typeArguments:o}))}makeObject(t){return typeof t=="string"?new J(t):t}vaultObject(){return new J(this.config.vaultObjId)}roleObject(){return new J(this.config.roleObjId)}feeObject(){return new J(this.config.feeObjId)}clockObject(){return new J(Qi)}};var Rt=class a extends Pt{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 X=class a extends Pt{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 _t=class{constructor(t){this.globals=t;let e=t.envConfig.contract;this.feeContract=new Rt(e,t),this.streamContract=new X(e,t)}feeContract;streamContract;async createStreams(t){let e=It.convertCreateStreamInfoToInternal(t);return this.createStreamHelper().buildCreateStreamTransactionBlock(e)}createStreamHelper(){return new It(this.globals,this.feeContract,this.streamContract)}setAutoClaim(t,e,n){let o=new Rn;return this.streamContract.setAutoClaim(o,{streamId:t,enabled:e,coinType:n})}claimStream(t,e){let n=new Rn;return this.streamContract.claimStream(n,{streamId:t,coinType:e})}claimStreamByProxy(t,e){let n=new Rn;return this.streamContract.claimStreamByProxy(n,{streamId:t,coinType:e})}cancelStream(t,e){let n=new Rn;return this.streamContract.cancelStream(n,{streamId:t,coinType:e}),n}};var O=class extends k{constructor(t,e={}){super(0,t,e)}};async function ir(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 rr=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)}},Bt=class{constructor(t){this.requester=t;this.pager=new rr(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 _n=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 pd=25;async function Gi(a,t,e,n="0x2::sui::SUI",o=pd){let r=new sr(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 _n(n,e,i);return s}var sr=class extends Bt{constructor(e,n,o,r){super(new cr(e,n,o,r));this.suiClient=e;this.owner=n;this.coinType=o;this.reqPageSize=r}},cr=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 Nn}from"@mysten/sui.js/transactions";import{normalizeStructTag as Ji,parseStructTag as bd}from"@mysten/sui.js/utils";import{DateTime as gd}from"luxon";var Bn=class extends k{constructor(){super(7,"Connected wallet is not creator")}};var Jt=class extends k{constructor(){super(8,"Connected wallet is not recipient")}};var Xt=class extends k{constructor(t,e){super(6,t,{context:e})}};var Mn=class extends k{constructor(t){super(5,"Stream not found",{context:{streamId:t}})}};import{DateTime as md,Duration as fd}from"luxon";var zi=(1n<<64n)-1n,jn=1e3;function lr(a){let t;typeof a=="number"?t=a:typeof a=="bigint"?t=Number(a):t=a.toMillis();let e=Math.round(t/jn);return md.fromMillis(e*jn)}function dr(a){let t;typeof a=="number"?t=a:typeof a=="bigint"?t=Number(a):t=a.toMillis();let e=Math.round(t/jn);return fd.fromMillis(e*jn)}var ct=class a{constructor(t,e,n){this.globals=t;this.streamId=e;this.rawData=n;this.streamContract=new X(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 Bn;let t=new Nn;return this.streamContract.cancelStream(t,{streamId:this.streamId,coinType:this.coinType}),t}async claim(){if(await this.globals.walletAddress()!==this.recipient)throw new Jt;let t=new Nn;return this.streamContract.claimStream(t,{streamId:this.streamId,coinType:this.coinType}),t}async setAutoClaim(t){if(await this.globals.walletAddress()!==this.recipient)throw new Jt;let e=new Nn;return this.streamContract.setAutoClaim(e,{streamId:this.streamId,coinType:this.coinType,enabled:t}),e}async claimByProxy(){let t=new Nn;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 Ji(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 dr(this.rawData.config.epochInterval)}get groupId(){let{metadata:t}=this.rawData.config;return zt(t).groupId}get name(){let{metadata:t}=this.rawData.config;return zt(t).name}get recipient(){return this.rawData.config.recipient}get timeStart(){return lr(this.rawData.config.timeStart)}get duration(){let t=this.rawData.config,e=t.epochInterval*t.totalEpoch;return dr(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:lr((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===zi?0n:this.rawData.status.epochClaimed*this.amountPerEpoch+this.cliff}get currentEpoch(){let t=gd.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 Mn(t):new Xt(`get stream data: ${e.error.code}`,{streamId:t,...e.error});let n=e.data.content;if(n.dataType!=="moveObject")throw new Xt("Unexpected object type",{gotType:n.dataType});let{typeParams:o}=bd(n.type),r=Ji(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 ur,SUI_TYPE_ARG as hd}from"@mysten/sui.js/utils";import{Duration as Xi}from"luxon";var En=class extends k{constructor(t,e){super(12,`Transaction failed: ${e}`,{context:{status:t,msg:e}})}};var yd=1e3,Wn=class{constructor(t){this.globals=t;this.coinMetaHelper=new pr(t.suiClient),this.createStreamHelper=new _t(t).createStreamHelper()}coinMetaHelper;createStreamHelper;getStreamIdsFromCreateStreamResponse(t){if(t.effects?.status.status!=="success")throw new En(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 v("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 v("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 v("Invalid stream steps: 0");let e=BigInt(t.total.toMillis())/t.steps,n=t.timeStart.plus(Xi.fromMillis(Number(e*t.steps))),o={timeStart:t.timeStart,timeEnd:n,interval:Xi.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:ur(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:ur(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 v("Stream amount too small","totalAmount",e);if(t.cliffAmount>t.realTotalAmount)throw new v("Invalid cliff settings")}validateTimeline(t){if(t.interval.toMillis()<yd)throw new v("Interval shall be at least 1 second","interval",t.interval)}},pr=class{constructor(t){this.suiClient=t;this.coinMetaReg=new Map}coinMetaReg;async getCoinMeta(t){let e=ur(t||hd);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 Yi,normalizeSuiAddress as Un}from"@mysten/sui.js/utils";import{DateTime as Zi}from"luxon";var Mt=class extends k{constructor(t,e){super(9,`Invalid stream group: ${t}`,{context:e})}};var Sd=25;async function fr(a,t,e){let n=new Yt(t),o=new Zt(a,n,e);return await ir(o)}var Yt=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]}},Zt=class extends Bt{constructor(e,n,o){super(new mr(e,n,o));this.suiClient=e;this.idIter=n;this.options=o}},mr=class{constructor(t,e,n){this.suiClient=t;this.stringIter=e;this.options=n;this.filter=n?.filter,this.pageSize=n?.pageSize||Sd,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 Ln=class a{constructor(t,e){this.globals=t;this.streams=e;if(e.length===0)throw new Mt("stream size 0");let n=e.map(r=>r.groupId);if(new Set(n).size!==1)throw new v("Stream does not have same group ID")}type="StreamGroup";static async new(t,e){let n=await fr(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=>{wd(n,r)||(o=!1)}),o}async refresh(){let t=await fr(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)=>ct.fromObjectData(t,e[i],r)).filter(r=>!!r);if(new Set(o.map(r=>r.groupId)).size!==1)throw new Mt("Not same group ID");if(!this.checkStreamGroup(o))throw new Mt("Not same stream settings");return o}};function wd(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 te=class a{constructor(t,e){this.it=t;this.pageSize=e}static async newIncoming(t){let e=await Fn.newIncoming(t);return new a(e,t.pageSize)}static async newOutgoing(t){let e=await Fn.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}},Fn=class a{constructor(t){this.requester=t}cachedNext;static async newIncoming(t){let e=await qn.newIncomingQuery(t);return new a(e)}static async newOutgoing(t){let e=await qn.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}},qn=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 Yt(n.flat().map(i=>i.streamId));this.objectIter=new Zt(t.suiClient,r)}current=0;objectIter;static async newIncomingQuery(t){let e=Dd(t.query),n=await t.globals.walletAddress(),r=(await t.globals.backend.getIncomingStreams(n,e)).filter(s=>Un(s.recipient)===Un(n)),i=ts(r);return new a(t.globals,n,i,t.query)}static async newOutgoingQuery(t){let e=xd(t.query),n=await t.globals.walletAddress(),o=await t.globals.backend.getOutgoingStreams(n,e),r=ts(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 Id(this.globals,t[0].streamId,this.objectIter);return this.current++,es(e,this.query)?e:this.doNextRequest()}if(t.length>1){let e=await kd(this.globals,t.map(n=>n.streamId),this.objectIter);return this.current++,Td(e,this.query)?e:this.doNextRequest()}throw new O("Stream group with no stream")}};function ts(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)=>Zi.fromISO(n[0].createDate).toMillis()-Zi.fromISO(e[0].createDate).toMillis())}function es(a,t){if(t===void 0)return!0;let e=Cd(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 Cd(a,t){return t===void 0?!0:Array.isArray(t)?t.includes(a.progress.status):a.progress.status===t}function Td(a,t){if(!t)return!0;let e=!1;return a.streams.forEach(n=>{es(n,t)&&(e=!0)}),e}async function Id(a,t,e){let n=await ns(e,t);return ct.fromObjectData(a,t,n)}async function kd(a,t,e){let n=[];for(;n.length<t.length;){let o=await ns(e,t[n.length]);n.push(o)}return Ln.newFromObjectResponse(a,t,n)}async function ns(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 Dd(a){return{status:br(a?.status),coinType:os(a?.coinType),sender:as(a?.sender)}}function xd(a){return{status:br(a?.status),coinType:os(a?.coinType),recipient:as(a?.recipient)}}function br(a){return a===void 0||a.length===0?"all":Array.isArray(a)?a.reduce((t,e)=>{let n=br(e);return!t||t===n?n:"all"},void 0):vd(a)}function vd(a){switch(a){case"STREAMING":case"STREAMED":case"CANCELED":return"active";case"COMPLETED":case"SETTLED":return"inactive";default:throw new v("Unknown stream filtered status")}}function os(a){if(a)return Array.isArray(a)?a.length!==0?a.map(t=>Yi(t)):void 0:Yi(a)}function as(a){if(a)return Array.isArray(a)?a.length!==0?a.map(t=>Un(t)):void 0:Un(a)}var gr=class{constructor(t){this.msafe=t}get type(){return"msafe"}async address(){return this.msafe.address()}async requestCoins(t){return this.msafe.requestCoins(t)}},$n=class{constructor(t){this.account=t}async address(){return this.account.address}},hr=class{constructor(t,e){this.singleWallet=t;this.suiClient=e}get type(){return"single"}async address(){return this.singleWallet.address()}async requestCoins(t){return Promise.all(t.map(e=>this.requestCoin(e)))}async requestCoin(t){if(On(t.coinType,Ad))return{primaryCoin:Pn};if(t.amount<=0)throw new v("Invalid coin request","coinAmount",t.amount);let e=await Gi(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)}}},Kn=class{globals;helper;constructor(t,e){this.globals=Ot.new(t,e),this.helper=new Wn(this.globals)}connectSingleWallet(t){let e=new hr(t,this.globals.suiClient);this.globals.connectWallet(e)}connectMSafeAccount(t){let e=new gr(t);this.globals.connectWallet(e)}async createStream(t){return this.builder().createStreams(t)}async getStream(t){return ct.new(this.globals,t)}async getIncomingStreams(t,e=10){return te.newIncoming({globals:this.globals,query:t,pageSize:e})}async getOutgoingStreams(t,e=10){return te.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=>Od(n))}async getRecipientsForStreamFilter(t){let e=await this.wallet.address();return(await this.globals.backend.getAllRecipients(e,t)).map(o=>rs(o))}async getCreatorsForStreamFilter(t){let e=await this.wallet.address();return(await this.globals.backend.getAllSenders(e,t)).map(o=>rs(o))}get wallet(){return this.globals.wallet}builder(){return new _t(this.globals)}};var Q=class extends y{application="mpay";getClient(t,e){let n=new Kn(t==="sui:mainnet"?"prod":"dev");return n.connectSingleWallet(new $n(e)),n}};var ee=class extends Q{constructor(e){super(e);this.data=e}txType=Rd.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 _d}from"@msafe/sui3-utils";var ne=class extends Q{constructor(e){super(e);this.data=e}txType=_d.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 Bd}from"@msafe/sui3-utils";var oe=class extends Q{constructor(e){super(e);this.data=e}txType=Bd.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 Md}from"@msafe/sui3-utils";var ae=class extends Q{constructor(e){super(e);this.data=e}txType=Md.Stream;txSubType="CreateStream";async build(e){let{network:n,account:o}=e;return this.getClient(n,o).createStream(this.data)}};import{bcs as is}from"@mysten/sui.js/bcs";import{normalizeStructTag as jd,normalizeSuiAddress as re}from"@mysten/sui.js/utils";var jt=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 re(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 is.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 re(t.value.Object.ImmOrOwned.objectId)}return re(t.value)}static getSharedObjectId(t){if(t.type!=="object")throw new Error(`not object argument: ${JSON.stringify(t)}`);if(typeof t.value!="object")return re(t.value);if(!("Object"in t.value)||!("Shared"in t.value.Object))throw new Error("not Shared");return re(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 is.de(e,new Uint8Array(n))}typeArg(t){return jd(this.moveCall.typeArguments[t])}txArg(t){return this.moveCall.arguments[t]}};var Vn=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"&&st(e.target,this.contract.createStreamTarget));if(t.length===0)throw new O("No create stream transactions");return t.map(e=>new jt(e,this.txb))}getCreationInfoFromMoveCall(t){let e=t.decodeInputString(4),{name:n,groupId:o}=zt(e),r=t.decodeInputAddress(5),i=t.decodeInputU64(6),s=t.decodeInputU64(7),c=t.decodeInputU64(8),l=t.decodeInputU64(9),d=t.decodeInputU64(10),u=t.decodeInputBool(11),p=t.typeArg(0);return{name:n,groupId:o,recipient:r,timeStart:i,cliff:s,epochInterval:c,totalEpoch:l,amountPerEpoch:d,cancelable:u,coinType:p}}aggregateGroupStreamInfo(t){if(new Set(t.map(o=>JSON.stringify({name:o.name,groupId:o.groupId,timeStart:String(o.timeStart),epochInterval:String(o.epochInterval),totalEpoch:String(o.totalEpoch),cancelable:o.cancelable,coinType:o.coinType}))).size!==1)throw new v("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 X(this.globals.envConfig.contract,this.globals)}get feeContract(){return new Rt(this.globals.envConfig.contract,this.globals)}createStreamHelper(){return new It(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 Qn=class{constructor(t,e){this.globals=t;this.txb=e;this.contract=new X(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"&&st(e.target,this.contract.createStreamTarget))!==-1}isSetAutoClaimTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&&st(this.transactions[0].target,this.contract.setAutoClaimTarget)}isCancelStreamTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&&st(this.transactions[0].target,this.contract.cancelStreamTarget)}isClaimStreamTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&&st(this.transactions[0].target,this.contract.claimStreamTarget)}isClaimByProxyTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&&st(this.transactions[0].target,this.contract.claimStreamByProxyTarget)}decodeCreateStreamTransaction(){return new Vn(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 jt(t,this.txb)}};import{TransactionType as Nd}from"@msafe/sui3-utils";var ie=class extends Q{constructor(e){super(e);this.data=e}txType=Nd.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 Hn=class{application="mpay";supportSDK="@mysten/sui.js";async deserialize(t){let{network:e,transactionBlock:n}=t,o=Ot.new(e==="sui:mainnet"?"prod":"dev"),i=new Qn(o,n).decode(),s;switch(i.type){case"CreateStream":s=new ae(i.info);break;case"SetAutoClaim":s=new ie({streamId:i.streamId,enabled:i.enabled});break;case"Claim":s=new oe({streamId:i.streamId});break;case"ClaimByProxy":s=new ne({streamId:i.streamId});break;case"Cancel":s=new ee({streamId:i.streamId});break;default:throw new Error(`Unknown transaction type: ${i}`)}return{txType:s.txType,txSubType:s.txSubType,intentionData:s.data}}async build(t){let{intentionData:e}=t,n;switch(t.txSubType){case"CreateStream":n=new ae(e);break;case"Claim":n=new oe(e);break;case"ClaimByProxy":n=new ne(e);break;case"SetAutoClaim":n=new ie(e);break;case"Cancel":n=new ee(e);break;default:throw new Error("not implemented")}return n.build({...t})}};import{TransactionDefaultApplication as Fd,TransactionSubTypes as yr}from"@msafe/sui3-utils";import{buildCoinTransferTxb as Ed}from"@msafe/sui3-utils";var Gn=class a extends y{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o}=e;return Ed(n,this.data,o.address)}static fromData(e){return new a(e)}};import{buildObjectTransferTxb as Wd}from"@msafe/sui3-utils";var zn=class a extends y{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o}=e;return Wd(n,this.data,o.address)}static fromData(e){return new a(e)}};import{isSameAddress as Ld}from"@msafe/sui3-utils";import{TransactionBlock as Ud}from"@mysten/sui.js/transactions";var Jn=class a extends y{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{account:n}=e,o=Ud.from(this.data.content);if(!Ld(o.blockData.sender,n.address))throw new Error("Invalid sender address");return o}static fromData(e){return new a(e)}};var Xn=class{application="msafe-core";supportSDK="@mysten/sui.js";constructor(){this.application=Fd}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 yr.assets.coin.send:o=Gn.fromData(t.intentionData);break;case yr.assets.object.send:o=zn.fromData(t.intentionData);break;case yr.others.plain:o=Jn.fromData(t.intentionData);break;default:throw new Error("not implemented")}return o.build({suiClient:e,account:n})}};import{TransactionType as Jd}from"@msafe/sui3-utils";var ss=!1,se={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 Sr(){if(!ss)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&&(se.ProtocolPackage=t),e&&(se.borrowFee=e),n&&(se.borrowFeeAddress=n),o&&(se.pool=o),ss=!0}catch(a){console.error(a.message)}}var h=se;import{TransactionType as Nt}from"@msafe/sui3-utils";import{bcs as cs}from"@mysten/sui.js/bcs";import{normalizeStructTag as $d,normalizeSuiAddress as ce}from"@mysten/sui.js/utils";var Yn=class{constructor(t){this.txb=t}decode(){if(console.log("txb",this.txb),this.isClaimRewardTransaction())return this.decodeClaimReward();if(this.isEntryBorrowTransaction())return this.decodeEntryBorrow();if(this.isEntryBorrowWithFeeTransaction())return this.decodeEntryBorrow();if(this.isEntryMultiDepositTransaction())return this.decodeEntryMultiDeposit();if(this.isEntryDepositTransaction())return this.decodeEntryDeposit();if(this.isEntryRepayTransaction())return this.decodeEntryRepay();if(this.isEntryWithdrawTransaction())return this.decodeEntryWithdraw();throw new Error("Unknown transaction type")}get transactions(){return this.txb.blockData.transactions}getMoveCallTransaction(t){return this.transactions.find(e=>e.kind==="MoveCall"&&e.target===t)}isClaimRewardTransaction(){return!!this.getMoveCallTransaction(`${h.ProtocolPackage}::incentive_v2::claim_reward`)}isEntryBorrowTransaction(){return!!this.getMoveCallTransaction(`${h.ProtocolPackage}::incentive_v2::entry_borrow`)}isEntryBorrowWithFeeTransaction(){return!!this.getMoveCallTransaction(`${h.ProtocolPackage}::incentive_v2::borrow`)}isEntryMultiDepositTransaction(){let t=`${h.ProtocolPackage}::incentive_v2::entry_deposit`,e=this.transactions.filter(o=>o.kind==="MoveCall"&&o.target===t);return this.transactions.find(o=>o.kind==="MoveCall"&&o.target===`${h.ProtocolPackage}::incentive_v2::claim_reward_non_entry`)?!1:e.length>1}isEntryDepositTransaction(){return!!this.getMoveCallTransaction(`${h.ProtocolPackage}::incentive_v2::entry_deposit`)}isEntryRepayTransaction(){return!!this.getMoveCallTransaction(`${h.ProtocolPackage}::incentive_v2::entry_repay`)}isEntryWithdrawTransaction(){return!!this.getMoveCallTransaction(`${h.ProtocolPackage}::incentive_v2::entry_withdraw`)}findPoolByAssetId(t){let e=Object.values(h.pool).find(n=>n.assetId===t);if(!e)throw new Error("Pool not found");return e}decodeClaimReward(){let t=[];return this.transactions.forEach(e=>{if(e.kind==="MoveCall"&&e.target===`${h.ProtocolPackage}::incentive_v2::claim_reward`){let n=new le(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:Nt.Other,type:"ClaimReward",intentionData:{claims:t}}}decodeEntryBorrow(){let t=this.helper.decodeInputU8(4),e=this.helper.decodeInputU64(5),n=this.findPoolByAssetId(t);return{txType:Nt.Other,type:"EntryBorrow",intentionData:{amount:e,coinType:n.coinType}}}decodeEntryMultiDeposit(){let t=[],e=`${h.ProtocolPackage}::incentive_v2::entry_deposit`;return this.transactions.forEach(n=>{if(n.kind==="MoveCall"&&n.target===e){let o=new le(n,this.txb),r=o.decodeInputU8(3),i=o.decodeInputU64(5),s=this.findPoolByAssetId(r);t.push({coinType:s.coinType,amount:i})}}),{txType:Nt.Other,type:"EntryMultiDeposit",intentionData:{list:t}}}decodeEntryDeposit(){let t=this.helper.decodeInputU8(3),e=this.helper.decodeInputU64(5),n=this.findPoolByAssetId(t);return{txType:Nt.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:Nt.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:Nt.Other,type:"EntryWithdraw",intentionData:{amount:e,coinType:n.coinType}}}get helper(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(h.ProtocolPackage));return new le(t,this.txb)}},le=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 cs.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 cs.de(e,new Uint8Array(n))}typeArg(t){return $d(this.moveCall.typeArguments[t])}txArg(t){return this.moveCall.arguments[t]}};import{TransactionBlock as Kd}from"@mysten/sui.js/transactions";function Et(a,t,e,n){return a.moveCall({target:`${h.ProtocolPackage}::incentive_v2::entry_deposit`,arguments:[a.object("0x06"),a.object(h.StorageId),a.object(t.poolId),a.pure(t.assetId),e,a.pure(n),a.object(h.Incentive),a.object(h.IncentiveV2)],typeArguments:[t.type]}),a}function ls(a,t,e){return a.moveCall({target:`${h.ProtocolPackage}::incentive_v2::entry_withdraw`,arguments:[a.object("0x06"),a.object(h.PriceOracle),a.object(h.StorageId),a.object(t.poolId),a.pure(t.assetId),a.pure(e),a.object(h.Incentive),a.object(h.IncentiveV2)],typeArguments:[t.type]}),a}function ds(a,t,e,n){let o=a.moveCall({target:`${h.ProtocolPackage}::incentive_v2::borrow`,arguments:[a.object("0x06"),a.object(h.PriceOracle),a.object(h.StorageId),a.object(t.poolId),a.pure(t.assetId),a.pure(e),a.object(h.IncentiveV2)],typeArguments:[t.type]}),[r]=a.moveCall({target:"0x02::coin::from_balance",typeArguments:[t.type],arguments:[o]});if(h.borrowFee>0){let[i]=a.splitCoins(r,[a.pure(Math.floor(e*h.borrowFee))]);a.transferObjects([r],a.pure(n)),a.transferObjects([i],a.pure(h.borrowFeeAddress))}else a.transferObjects([r],a.pure(n));return a}function wr(a,t,e,n){return a.moveCall({target:`${h.ProtocolPackage}::incentive_v2::entry_repay`,arguments:[a.object("0x06"),a.object(h.PriceOracle),a.object(h.StorageId),a.object(t.poolId),a.pure(t.assetId),e,a.pure(n),a.object(h.IncentiveV2)],typeArguments:[t.type]}),a}function us(a,t,e,n,o){return a.moveCall({target:`${h.ProtocolPackage}::incentive_v2::claim_reward`,arguments:[a.object("0x06"),a.object(h.IncentiveV2),a.object(e),a.object(h.StorageId),a.pure(t),a.pure(n)],typeArguments:o}),a}var Zn=class a extends y{constructor(e){super(e);this.data=e}txType;txSubType;async build(){let{claims:e}=this.data,n=new Kd;return e.forEach(o=>{let{assetId:r,poolId:i,option:s,typeArguments:c}=o;us(n,r,i,s,c)}),n}static fromData(e){return new a(e)}};import{TransactionBlock as Vd}from"@mysten/sui.js/transactions";var to=class a extends y{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{coinType:n,amount:o}=this.data,r=new Vd;console.log("build",this.data);let i=h.pool[n];if(!i)throw new Error(`${n} not support, please use ${Object.keys(h.pool).join(", ")}.`);return ds(r,i,o,e.account.address)}static fromData(e){return new a(e)}};import{TransactionBlock as Qd}from"@mysten/sui.js/transactions";async function Wt(a,t,e){let n=await a.getCoins({owner:t,coinType:e});return console.log("getTokenObjs",t,n),n}var eo=class a extends y{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 Qd;if(console.log("build",this.data),r==="sui"){let[u]=s.splitCoins(s.gas,[i]);return Et(s,h.pool.sui,u,i)}let c=h.pool[r];if(!c)throw new Error(`${r} not support, please use ${Object.keys(h.pool).join(", ")}.`);let l=await Wt(n,o.address,c.type);if(!l.data[0])throw new Error(`Insufficient balance for ${c.name} Token`);let d=l.data[0].coinObjectId;if(l.data.length>=2){let u=1;for(;u<l.data.length;)s.mergeCoins(d,[l.data[u].coinObjectId]),u++}return Et(s,c,s.object(d),i)}static fromData(e){return new a(e)}};import{TransactionBlock as Hd}from"@mysten/sui.js/transactions";var no=class a extends y{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 Hd;if(console.log("build",this.data),r==="sui"){let[u]=s.splitCoins(s.gas,[i]);return wr(s,h.pool.sui,u,i)}let c=h.pool[r];if(!c)throw new Error(`${r} not support, please use ${Object.keys(h.pool).join(", ")}.`);let l=await Wt(n,o.address,c.type);if(!l.data[0])throw new Error(`Insufficient balance for ${c.name} Token`);let d=l.data[0].coinObjectId;if(l.data.length>=2){let u=1;for(;u<l.data.length;)s.mergeCoins(d,[l.data[u].coinObjectId]),u++}return wr(s,c,s.object(d),i)}static fromData(e){return new a(e)}};import{TransactionBlock as Gd}from"@mysten/sui.js/transactions";var oo=class a extends y{constructor(e){super(e);this.data=e}txType;txSubType;async build(){let{coinType:e,amount:n}=this.data,o=new Gd;console.log("build",this.data);let r=h.pool[e];if(!r)throw new Error(`${e} not support, please use ${Object.keys(h.pool).join(", ")}.`);return ls(o,r,n)}static fromData(e){return new a(e)}};import{TransactionBlock as zd}from"@mysten/sui.js/transactions";var ao=class a extends y{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o}=e,{list:r}=this.data,i=new zd;console.log("build",this.data);for(let s=0;s<r.length;s++){let{coinType:c,amount:l}=r[s];if(c==="sui"){let[m]=i.splitCoins(i.gas,[l]);Et(i,h.pool.sui,m,l);continue}let d=h.pool[c];if(!d)throw new Error(`${c} not support, please use ${Object.keys(h.pool).join(", ")}.`);let u=await Wt(n,o.address,d.type);if(!u.data[0])throw new Error(`Insufficient balance for ${d.name} Token`);let p=u.data[0].coinObjectId;if(u.data.length>=2){let m=1;for(;m<u.data.length;)i.mergeCoins(p,[u.data[s].coinObjectId]),m++}Et(i,d,i.object(p),l)}return i}static fromData(e){return new a(e)}};var ro=class{application="navi";supportSDK="@mysten/sui.js";async deserialize(t){await Sr();let{transactionBlock:e}=t,o=new Yn(e).decode();return{txType:Jd.Other,txSubType:o.type,intentionData:o.intentionData}}async build(t){let{suiClient:e,account:n}=t,o;switch(await Sr(),t.txSubType){case"EntryDeposit":o=eo.fromData(t.intentionData);break;case"EntryBorrow":o=to.fromData(t.intentionData);break;case"EntryRepay":o=no.fromData(t.intentionData);break;case"EntryWithdraw":o=oo.fromData(t.intentionData);break;case"EntryMultiDeposit":o=ao.fromData(t.intentionData);break;case"ClaimReward":o=Zn.fromData(t.intentionData);break;default:throw new Error("not implemented")}return o.build({suiClient:e,account:n})}};import{TransactionSubTypes as Xd,TransactionType as ps}from"@msafe/sui3-utils";import{fromHEX as Yd,toHEX as Zd}from"@mysten/bcs";import{Transaction as tu}from"@mysten/sui/transactions";import eu from"sort-keys-recursive";var ms="msafe-plain-tx",fs=Xd.others.plain,Cr=class a{constructor(t){this.data=t}application=ms;txType=ps.Other;txSubType=fs;serialize(){return JSON.stringify(eu(this.data))}async build(t){return tu.from(Yd(this.data.content))}static fromData(t){return new a(t)}},io=class{application;supportSDK="@mysten/sui";constructor(){this.application=ms}async deserialize(t){let{transaction:e}=t,n=await e.build({client:t.suiClient});return{txType:ps.Other,txSubType:fs,intentionData:{content:Zd(n)}}}async build(t){let{account:e}=t,o=await Cr.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 bs}from"@mysten/sui/client";import{Transaction as cu}from"@mysten/sui/transactions";import{SuiClient as kr}from"@mysten/sui.js/client";import{TransactionBlock as lu}from"@mysten/sui.js/transactions";import{RequestManager as ru,HTTPTransport as iu,Client as su}from"@open-rpc/client-js";var nu={"-32700":"ParseError","-32600":"InvalidRequest","-32601":"MethodNotFound","-32602":"InvalidParams","-32603":"InternalError"},Tr=class extends Error{},so=class extends Tr{code;type;constructor(t,e){super(t),this.code=e,this.type=nu[e]??"ServerError"}};function ou(a){let t=new URL(a);return t.protocol=t.protocol.replace("http","ws"),t.toString()}var au={WebSocketConstructor:typeof WebSocket<"u"?WebSocket:void 0,callTimeout:3e4,reconnectTimeout:3e3,maxReconnects:5},co=class{endpoint;options;#n=0;#a=0;#t=null;#e=null;#r=new Set;#o=new Map;constructor(t,e={}){this.endpoint=t,this.options={...au,...e},this.endpoint.startsWith("http")&&(this.endpoint=ou(this.endpoint))}async makeRequest(t,e){let n=await this.#i();return new Promise((o,r)=>{this.#n+=1,this.#o.set(this.#n,{resolve:o,reject:r,timeout:setTimeout(()=>{this.#o.delete(this.#n),r(new Error(`Request timeout: ${t}`))},this.options.callTimeout)}),n.send(JSON.stringify({jsonrpc:"2.0",id:this.#n,method:t,params:e}))}).then(({error:o,result:r})=>{if(o)throw new so(o.message,o.code);return r})}#i(){return this.#e?this.#e:(this.#e=new Promise(t=>{this.#t?.close(),this.#t=new this.options.WebSocketConstructor(this.endpoint),this.#t.addEventListener("open",()=>{this.#a=0,t(this.#t)}),this.#t.addEventListener("close",()=>{this.#a++,this.#a<=this.options.maxReconnects&&setTimeout(()=>{this.#s()},this.options.reconnectTimeout)}),this.#t.addEventListener("message",({data:e})=>{let n;try{n=JSON.parse(e)}catch(o){console.error(new Error(`Failed to parse RPC message: ${e}`,{cause:o}));return}if("id"in n&&n.id!=null&&this.#o.has(n.id)){let{resolve:o,timeout:r}=this.#o.get(n.id);clearTimeout(r),o(n)}else if("params"in n){let{params:o}=n;this.#r.forEach(r=>{r.subscriptionId===o.subscription&&o.subscription===r.subscriptionId&&r.onMessage(o.result)})}})}),this.#e)}async#s(){return this.#t?.close(),this.#e=null,Promise.allSettled([...this.#r].map(t=>t.subscribe(this)))}async subscribe(t){let e=new Ir(t);return this.#r.add(e),await e.subscribe(this),()=>e.unsubscribe(this)}},Ir=class{subscriptionId=null;input;subscribed=!1;constructor(t){this.input=t}onMessage(t){this.subscribed&&this.input.onMessage(t)}async unsubscribe(t){let{subscriptionId:e}=this;return this.subscribed=!1,e==null?!1:(this.subscriptionId=null,t.makeRequest(this.input.unsubscribe,[e]))}async subscribe(t){this.subscriptionId=null,this.subscribed=!0;let e=await t.makeRequest(this.input.method,this.input.params);this.subscribed&&(this.subscriptionId=e)}};var lt=class{rpcClient;websocketClient;constructor({url:t,websocket:{url:e,...n}={},rpc:o}){let r=new iu(o?.url??t,{headers:{"Content-Type":"application/json",...o?.headers}});this.rpcClient=new su(new ru([r])),this.websocketClient=new co(e??t,n)}async request(t){return await this.rpcClient.request(t)}async subscribe(t){let e=await this.websocketClient.subscribe(t);return async()=>!!await e()}};var lo=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 xr(t))}addHelper(t){this.apps.set(t.application,new Dr(t))}getAppHelper(t){let e=this.apps.get(t);if(!e)throw new Error(`${t} not registered`);return e}},Dr=class{constructor(t){this.helper=t}async deserialize(t){let e=new bs({transport:new lt({url:t.clientUrl,rpc:{url:t.clientUrl}})}),n=new kr({transport:new lt({url:t.clientUrl,rpc:{url:t.clientUrl}})}),o=await t.transactionBlock.build({client:n}),r=cu.from(o);return this.helper.deserialize({...t,suiClient:e,transaction:r})}async build(t){let e=new bs({transport:new lt({url:t.clientUrl,rpc:{url:t.clientUrl}})}),n=await e.getBalance({owner:t.account.address});if(Number(n.totalBalance)<1e8)throw new Error("Insufficient gas fee");let o=await this.helper.build({...t,suiClient:e});o.setSender(t.account.address);let r=await o.build({client:e});return lu.from(r)}},xr=class{constructor(t){this.helper=t}async deserialize(t){let e=new kr({transport:new lt({url:t.clientUrl,rpc:{url:t.clientUrl}})});return this.helper.deserialize({...t,transactionBlock:t.transactionBlock,suiClient:e})}async build(t){let e=new kr({transport:new lt({url:t.clientUrl,rpc:{url:t.clientUrl}})}),n=await e.getBalance({owner:t.account.address});if(Number(n.totalBalance)<1e8)throw new Error("Insufficient gas fee");return this.helper.build({...t,suiClient:e})}};import{TransactionType as Eu}from"@msafe/sui3-utils";import{TransactionType as P}from"@msafe/sui3-utils";var dt=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 gs="https://sui.apis.scallop.io";var hs="66f8e7ed9bb9e07fdfb86bbb",uo="0xefe8b36d5b2e43728cc323298626b83177803521d195cfb11e15b910e892fddf";var ut="0x7016aae72cfc67f2fadf55769c0a7dd54291a583b63051a5ed71081cce836ac6::sca::SCA",pt="0xc63072e7f5f4983a2efaf5bdba1480d5e7d74d57948e1c7cc436f8e22cbeb410",Z=["weth","wbtc","wusdc","wusdt","sui","wapt","wsol","cetus","afsui","hasui","vsui","sca","usdc"],po=["weth","wbtc","wusdc","wusdt","sui","wapt","wsol","cetus","afsui","hasui","vsui","sca","usdc"],mt=["sweth","ssui","swusdc","swusdt","scetus","safsui","shasui","svsui","susdc"],tt=["ssui","swusdc","swusdt","safsui","shasui","svsui","sweth","ssca","scetus","swbtc","swsol","susdc"];var ys=["sui"],ft=["sui","wusdc","wusdt","afsui","hasui","vsui","weth","sca","wbtc","wsol","usdc"];var Ss={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 mo={sweth:"sui",ssui:"sui",swusdc:"sui",swusdt:"sui",scetus:"sui",safsui:"sui",shasui:"sui",svsui:"sui",susdc:"sui"},ws={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"]},Cs={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"},$={weth:"0xaf8cd5edc19c4512f4259f0bee101a40d41ebed738ade5874359610ef8eeced5",wbtc:"0x027792d9fed7f9844eb4839566001bb6f6cb4804f66aa2da6fe1ee242d896881",wusdc:"0x5d4b302506645c37ff133b98c4b50a5ae14841659738d6d733d59d0d217a93bf",wusdt:"0xc060006111016b8a020ad5b33834984a437aaa7d3c74c18e09a95d48aceab08c",wapt:"0x3a5143bb1196e3bcdfab6203d1683ae29edd26294fc8bfeafe4aaa9d2704df37",wsol:"0xb7844e289a8410e50fb3ca48d69eb9cf29e27d223ef90353fe1bd8e27ff8f3f8"},vr={vsui:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55"},Ts={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 Is}from"@mysten/sui.js/bcs";import{normalizeStructTag as du,normalizeSuiAddress as de}from"@mysten/sui.js/utils";var w=class a{constructor(t,e){this.moveCall=t;this.txb=e}decodeSharedObjectId(t){let e=this.getInputParam(t);return a.getSharedObjectId(e)}decodeOwnedObjectId(t){let e=this.getInputParam(t);return a.getOwnedObjectId(e)}decodeInputU64(t){let e=this.decodePureArg(t,"u64");return Number(e)}decodeInputU8(t){let e=this.decodePureArg(t,"u8");return Number(e)}decodeInputAddress(t){let e=this.decodePureArg(t,"address");return de(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 Is.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 de(t.value.Object.ImmOrOwned.objectId)}return de(t.value)}static getSharedObjectId(t){if(t.type!=="object")throw new Error(`not object argument: ${JSON.stringify(t)}`);if(typeof t.value!="object")return de(t.value);if(!("Object"in t.value)||!("Shared"in t.value.Object))throw new Error("not Shared");return de(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 Is.de(e,new Uint8Array(n))}typeArg(t){return du(this.moveCall.typeArguments[t])}txArg(t){return this.moveCall.arguments[t]}};import{bcs as uu}from"@mysten/sui.js/bcs";var _=class{constructor(t,e){this.splitCoin=t;this.txb=e}getAmountInput(){return this.splitCoin.amounts.map(t=>{if(t.kind==="Input")return Number(w.getPureInputValue(t,"u64"))}).filter(t=>t!==void 0)}static getPureInputValue(t,e){if(t.type!=="pure")throw new Error("not pure argument");if(typeof t.value=="object"&&"Pure"in t.value){let n=t.value.Pure;return uu.de(e,new Uint8Array(n))}return t.value}};var fo=class extends dt{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(`${pt}::user::redeem_rewards`),e=this.getMoveCallTransaction(`${this.coreId.borrowIncentivePkg}::user::stake_with_ve_sca`),n=this.getMoveCallTransaction(`${this.coreId.borrowIncentivePkg}::user::stake`);return!!t&&(!!e||!!n)}get helperClaimLendingReward(){return this.transactions.filter(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.spoolPkg}::user::redeem_rewards`)).map(e=>new w(e,this.txb))}get helperClaimBorrowV2Reward(){return this.transactions.filter(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.borrowIncentivePkg}::user::redeem_rewards`)).map(e=>new w(e,this.txb))}get helperStakeObligationWithVeSca(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.borrowIncentivePkg}::user::stake_with_ve_sca`));return new w(t,this.txb)}get helperClaimBorrowReward(){return this.transactions.filter(e=>e.kind==="MoveCall"&&e.target.startsWith(`${pt}::user::redeem_rewards`)).map(e=>new w(e,this.txb))}get helperMint(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.protocolPkg}::mint::mint`));return new w(t,this.txb)}get helperUnstakes(){return this.transactions.filter(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.spoolPkg}::user::unstake`)).map(e=>new w(e,this.txb))}get helperRedeems(){return this.transactions.filter(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.protocolPkg}::redeem::redeem`)).map(e=>new w(e,this.txb))}get helperRedeem(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.protocolPkg}::redeem::redeem`));return new w(t,this.txb)}get helperBurnScoin(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.scoin}::s_coin_converter::burn_s_coin`));return new w(t,this.txb)}get helperSlippage(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith("0x5857d185897aaff40ae37b2eecc895efc1a9dff1b210c4fb894eabbce4ac2603::slippage_check::check_slippage"));return new w(t,this.txb)}get helperStake(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.spoolPkg}::user::stake`));return new w(t,this.txb)}get helperUnstake(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.spoolPkg}::user::unstake`));return new w(t,this.txb)}get helperDepositCollateral(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.protocolPkg}::deposit_collateral::deposit_collateral`));return new w(t,this.txb)}get helperWithdrawCollateral(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.protocolPkg}::withdraw_collateral::withdraw_collateral`));return new w(t,this.txb)}get helperBorrow(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.protocolPkg}::borrow::borrow`));return new w(t,this.txb)}get helperBorrowWithReferral(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.protocolPkg}::borrow::borrow_with_referral`));return new w(t,this.txb)}get helperRepay(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.protocolPkg}::repay::repay`));return new w(t,this.txb)}decodeMigrateScoin(){return{txType:P.Other,type:"MigrateScoin",intentionData:{}}}decodeMigrateAndClaim(){let t;this.helperStakeObligationWithVeSca.moveCall&&(t=this.helperStakeObligationWithVeSca.decodeOwnedObjectId(9));let e=this.helperClaimBorrowReward[0].decodeOwnedObjectId(2),n=this.helperClaimBorrowReward[0].decodeSharedObjectId(3),o=this.scallop.utils.parseCoinNameFromType(this.helperClaimBorrowReward[0].typeArg(0));return{txType:P.Other,type:"MigrateAndClaim",intentionData:{obligationKey:e,obligationId:n,rewardCoinName:o,veScaKey:t}}}decodeOpenObligation(){return{txType:P.Other,type:"OpenObligation",intentionData:{}}}decodeSupplyLending(){let t=this.scallop.utils.parseCoinNameFromType(this.helperMint.typeArg(0)),e=this.helperMint.getNestedInputParam(2),n=new _(e,this.txb).getAmountInput().reduce((o,r)=>o+r,0);return{txType:P.Other,type:"SupplyLending",intentionData:{amount:n,coinName:t}}}decodeWithdrawLending(){let t=this.scallop.utils.parseCoinNameFromType(this.helperRedeem.typeArg(0)),e=this.helperRedeem.getNestedInputParam(2),n=new _(e,this.txb).getAmountInput().reduce((o,r)=>o+r,0);return{txType:P.Other,type:"WithdrawLending",intentionData:{amount:n,coinName:t}}}decodeWithdrawLendingScoin(){let t=this.scallop.utils.parseCoinNameFromType(this.helperRedeem.typeArg(0)),e=this.helperBurnScoin.getNestedInputParam(1),n=new _(e,this.txb).getAmountInput().reduce((o,r)=>o+r,0);return{txType:P.Other,type:"WithdrawLending",intentionData:{amount:n,coinName:t}}}decodeDepositCollateral(){let t=this.scallop.utils.parseCoinNameFromType(this.helperDepositCollateral.typeArg(0)),e=this.helperDepositCollateral.getNestedInputParam(3),n=new _(e,this.txb).getAmountInput().reduce((r,i)=>r+i,0),o=this.helperDepositCollateral.decodeSharedObjectId(1);return{txType:P.Other,type:"DepositCollateral",intentionData:{amount:n,obligationId:o,collateralCoinName:t}}}decodeWithdrawCollateral(){let t=this.scallop.utils.parseCoinNameFromType(this.helperWithdrawCollateral.typeArg(0)),e=this.helperWithdrawCollateral.decodeInputU64(5),n=this.helperWithdrawCollateral.decodeSharedObjectId(1),o=this.helperWithdrawCollateral.decodeOwnedObjectId(2);return{txType:P.Other,type:"WithdrawCollateral",intentionData:{amount:e,collateralCoinName:t,obligationKey:o,obligationId:n}}}decodeBorrow(){let t=this.scallop.utils.parseCoinNameFromType(this.helperBorrow.typeArg(0)),e=this.helperBorrow.decodeInputU64(5),n=this.helperBorrow.decodeSharedObjectId(1),o=this.helperBorrow.decodeOwnedObjectId(2);return{txType:P.Other,type:"Borrow",intentionData:{amount:e,coinName:t,obligationKey:o,obligationId:n}}}decodeBorrowWithBoost(){let t=this.scallop.utils.parseCoinNameFromType(this.helperBorrow.typeArg(0)),e=this.helperStakeObligationWithVeSca.decodeOwnedObjectId(9),n=this.helperBorrow.decodeInputU64(5),o=this.helperBorrow.decodeSharedObjectId(1),r=this.helperBorrow.decodeOwnedObjectId(2);return{txType:P.Other,type:"BorrowWithBoost",intentionData:{amount:n,coinName:t,obligationKey:r,obligationId:o,veScaKey:e}}}decodeBorrowWithReferral(){let t=this.scallop.utils.parseCoinNameFromType(this.helperBorrowWithReferral.typeArg(0)),e;this.helperStakeObligationWithVeSca.moveCall&&(e=this.helperStakeObligationWithVeSca.decodeOwnedObjectId(9));let n=this.helperBorrowWithReferral.decodeInputU64(6),o=this.helperBorrowWithReferral.decodeSharedObjectId(1),r=this.helperBorrowWithReferral.decodeOwnedObjectId(2);return{txType:P.Other,type:"BorrowWithReferral",intentionData:{amount:n,coinName:t,obligationKey:r,obligationId:o,veScaKey:e}}}decodeRepay(){let t=this.scallop.utils.parseCoinNameFromType(this.helperRepay.typeArg(0)),e=this.helperRepay.getNestedInputParam(3),n=new _(e,this.txb).getAmountInput().reduce((r,i)=>r+i,0),o=this.helperRepay.decodeSharedObjectId(1);return{txType:P.Other,type:"Repay",intentionData:{amount:n,obligationId:o,coinName:t}}}decodeRepayWithBoost(){let t=this.scallop.utils.parseCoinNameFromType(this.helperRepay.typeArg(0)),e=this.helperStakeObligationWithVeSca.decodeOwnedObjectId(9),n=this.helperRepay.getNestedInputParam(3),o=new _(n,this.txb).getAmountInput().reduce((i,s)=>i+s,0),r=this.helperRepay.decodeSharedObjectId(1);return{txType:P.Other,type:"RepayWithBoost",intentionData:{amount:o,obligationId:r,coinName:t,veScaKey:e}}}decodeStakeSpool(){let t;this.isCreateStakeAccountTransaction()||(t=this.helperStake.decodeOwnedObjectId(1));let e=0;if(this.helperBurnScoin.moveCall){let r=this.helperBurnScoin.getNestedInputParam(1);e=new _(r,this.txb).getAmountInput().reduce((i,s)=>i+s,0)}if(this.helperStake.moveCall&&e===0){let r=this.helperStake.getNestedInputParam(2);e=new _(r,this.txb).getAmountInput().reduce((i,s)=>i+s,0)}let n=this.helperStake.typeArg(0),o=this.scallop.utils.parseCoinNameFromType(n);return{txType:P.Other,type:"StakeSpool",intentionData:{amount:e,marketCoinName:o,stakeAccountId:t}}}decodeUnstakeSpool(){let t=this.helperUnstake.decodeOwnedObjectId(1),e=this.helperUnstake.decodeInputU64(2),n=this.helperUnstake.typeArg(0),o=this.scallop.utils.parseCoinNameFromType(n);return{txType:P.Other,type:"UnstakeSpool",intentionData:{amount:e,marketCoinName:o,stakeAccountId:t}}}decodeSupplyWithStakeSpool(){let t=this.scallop.utils.parseCoinNameFromType(this.helperMint.typeArg(0)),e=this.helperMint.getNestedInputParam(2),n=new _(e,this.txb).getAmountInput().reduce((r,i)=>r+i,0),o;return this.isCreateStakeAccountTransaction()||(o=this.helperStake.decodeOwnedObjectId(1)),{txType:P.Other,type:"SupplyAndStakeLending",intentionData:{amount:n,coinName:t,stakeAccountId:o}}}decodeUnstakeAndWithdraw(){let t=[];this.helperUnstakes.forEach(o=>{let r=o.decodeOwnedObjectId(1),i=o.decodeInputU64(2);t.push({id:r,coin:i})});let e=this.scallop.utils.parseCoinNameFromType(this.helperRedeems[0].typeArg(0)),n=0;if(this.helperBurnScoin.moveCall){let o=this.helperBurnScoin.getNestedInputParam(1);n=new _(o,this.txb).getAmountInput().reduce((r,i)=>r+i,0)}return{txType:P.Other,type:"WithdrawAndUnstakeLending",intentionData:{amount:n,coinName:e,stakeAccountId:t}}}decodeMoveAsset(){let t=[];this.helperUnstakes.forEach(i=>{let s=i.decodeOwnedObjectId(1),c=i.decodeInputU64(2);t.push({id:s,coin:c})});let e=this.scallop.utils.parseCoinNameFromType(this.helperRedeems[0].typeArg(0)),n=0;if(this.helperBurnScoin.moveCall){let i=this.helperBurnScoin.getNestedInputParam(1);n=new _(i,this.txb).getAmountInput().reduce((s,c)=>s+c,0)}let o=this.helperSlippage.decodePureArg(1,"u64"),r=this.helperSlippage.decodePureArg(2,"string");return{txType:P.Other,type:"MigrateWusdcToUsdc",intentionData:{amount:n,coinName:e,slippage:o,validSwapAmount:r,stakeAccountId:t}}}decodeClaimReward(){let t=[],e=[],n=[];return this.helperClaimLendingReward.forEach(o=>{let r=o.decodeOwnedObjectId(2),i=o.typeArg(0),s=this.scallop.utils.parseCoinNameFromType(i);t.push({stakeMarketCoinName:s,stakeAccountId:r})}),this.helperClaimBorrowV2Reward.forEach(o=>{let r=o.decodeSharedObjectId(3),i=o.decodeOwnedObjectId(4),s=this.scallop.utils.parseCoinNameFromType(o.typeArg(0));e.push({obligationId:i,obligationKey:r,rewardCoinName:s})}),this.helperClaimBorrowReward.forEach(o=>{let r=o.decodeSharedObjectId(2),i=o.decodeOwnedObjectId(3),s=this.scallop.utils.parseCoinNameFromType(o.typeArg(0));n.push({obligationId:i,obligationKey:r,rewardCoinName:s})}),{txType:P.Other,type:"ClaimIncentiveReward",intentionData:{lendingIncentive:t,borrowIncentiveV2:e,borrowIncentive:n}}}};import{TransactionType as Or}from"@msafe/sui3-utils";var bo=class extends dt{decode(){if(this.isCreateReferralLink())return this.decodeCreateReferralLink();if(this.isClaimRevenueReferral())return this.decodeClaimRevenueReferral();if(this.isBindReferral())return this.decodeBindReferral()}isClaimRevenueReferral(){return!!this.getMoveCallTransaction(`${this.coreId.referral}::referral_revenue_pool::claim_revenue_with_ve_sca_key`)}isCreateReferralLink(){return!!this.getMoveCallTransaction(`${this.coreId.veScaPkgId}::ve_sca::mint_ve_sca_placeholder_key`)}isBindReferral(){return!!this.getMoveCallTransaction(`${this.coreId.referral}::referral_bindings::bind_ve_sca_referrer`)}get helperClaimRevenueReferral(){return this.transactions.filter(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.referral}::referral_revenue_pool::claim_revenue_with_ve_sca_key`)).map(e=>new w(e,this.txb))}get helperBindReferral(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.referral}::referral_bindings::bind_ve_sca_referrer`));return new w(t,this.txb)}decodeCreateReferralLink(){return{txType:Or.Other,type:"CreateReferralLink",intentionData:{}}}decodeClaimRevenueReferral(){let t=this.helperClaimRevenueReferral[0].decodeOwnedObjectId(2),e=this.helperClaimRevenueReferral.map(n=>n.typeArg(0));return{txType:Or.Other,type:"ClaimRevenueReferral",intentionData:{veScaKey:t,coins:e}}}decodeBindReferral(){let t=this.helperBindReferral.decodePureArg(1,"address");return{txType:Or.Other,type:"BindReferral",intentionData:{veScaKey:t}}}};import{TransactionType as ue}from"@msafe/sui3-utils";var go=class extends dt{decode(){if(this.isExtendPeriodAndStakeMoreSca())return this.decodePeriodAndStakeMoreSca();if(this.isStakeScaFirsTime()||this.isStakeMoreSca())return this.decodeStakeSca();if(this.isRenewExpiredVeSca())return this.decodeRenewExpiredVeSca();if(this.isExtendPeriod())return this.decodeExtendStakePeriod();if(this.isRedeemSca())return this.decodeRedeemSca()}isStakeScaFirsTime(){return!!this.getMoveCallTransaction(`${this.coreId.veScaPkgId}::ve_sca::mint_ve_sca_key`)}isExtendPeriodAndStakeMoreSca(){let t=this.getMoveCallTransaction(`${this.coreId.veScaPkgId}::ve_sca::extend_lock_period`),e=this.getMoveCallTransaction(`${this.coreId.veScaPkgId}::ve_sca::lock_more_sca`);return!!t&&!!e}isRedeemSca(){return!!this.getMoveCallTransaction(`${this.coreId.veScaPkgId}::ve_sca::redeem`)}isStakeMoreSca(){return!!this.getMoveCallTransaction(`${this.coreId.veScaPkgId}::ve_sca::lock_more_sca`)}isExtendPeriod(){return!!this.getMoveCallTransaction(`${this.coreId.veScaPkgId}::ve_sca::extend_lock_period`)}isRenewExpiredVeSca(){return!!this.getMoveCallTransaction(`${this.coreId.veScaPkgId}::ve_sca::renew_expired_ve_sca`)}get helperStakeMoreSca(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.veScaPkgId}::ve_sca::lock_more_sca`));return new w(t,this.txb)}get helperStakeSca(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.veScaPkgId}::ve_sca::mint_ve_sca_key`));return new w(t,this.txb)}get helperExtendStakePeriod(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.veScaPkgId}::ve_sca::extend_lock_period`));return new w(t,this.txb)}get helperRedeemSca(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.veScaPkgId}::ve_sca::redeem`));return new w(t,this.txb)}get helperRenewExpired(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.veScaPkgId}::ve_sca::renew_expired_ve_sca`));return new w(t,this.txb)}get helperOldUnstakeObligation(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${pt}::user::unstake`));return new w(t,this.txb)}get helperUnstakeObligation(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.borrowIncentivePkg}::user::unstake`));return new w(t,this.txb)}get helperStakeObligationWithVeSca(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.borrowIncentivePkg}::user::stake_with_ve_sca`));return new w(t,this.txb)}decodeRedeemSca(){let t=this.helperRedeemSca.decodeOwnedObjectId(1);return{txType:ue.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((b,S)=>b+S,0),o=this.helperRenewExpired.decodeOwnedObjectId(1),r=!!this.helperRedeemSca.moveCall,i=[],s=[],c=[];this.helperOldUnstakeObligation.moveCall&&(i=[this.helperOldUnstakeObligation.decodeSharedObjectId(2),this.helperOldUnstakeObligation.decodeSharedObjectId(3)]),this.helperUnstakeObligation.moveCall&&(s=[this.helperUnstakeObligation.decodeSharedObjectId(3),this.helperUnstakeObligation.decodeSharedObjectId(4)]),this.helperStakeObligationWithVeSca.moveCall&&(c=[this.helperStakeObligationWithVeSca.decodeSharedObjectId(3),this.helperStakeObligationWithVeSca.decodeSharedObjectId(4)]);let l=!1,d=!1,u,p,m=[{condition:i,isOld:!0},{condition:s,isOld:!1},{condition:c,isOld:!1}];for(let b=0;b<m.length;b++)m[b].condition.length>1&&([p,u]=m[b].condition,l=!0,d=m[b].isOld);return{txType:ue.Other,type:"RenewExpStakePeriod",intentionData:{amount:n,lockPeriodInDays:e,obligationId:u,obligationKey:p,veScaKey:o,isHaveRedeem:r,isObligationLocked:l,isOldBorrowIncentive:d}}}decodeExtendStakePeriod(){let t=this.helperExtendStakePeriod.decodeInputU64(4),e=this.helperExtendStakePeriod.decodeOwnedObjectId(1),n=[],o=[],r=[];this.helperOldUnstakeObligation.moveCall&&(n=[this.helperOldUnstakeObligation.decodeSharedObjectId(2),this.helperOldUnstakeObligation.decodeSharedObjectId(3)]),this.helperUnstakeObligation.moveCall&&(o=[this.helperUnstakeObligation.decodeSharedObjectId(3),this.helperUnstakeObligation.decodeSharedObjectId(4)]),this.helperStakeObligationWithVeSca.moveCall&&(r=[this.helperStakeObligationWithVeSca.decodeSharedObjectId(3),this.helperStakeObligationWithVeSca.decodeSharedObjectId(4)]);let i=!1,s=!1,c,l,d=[{condition:n,isOld:!0},{condition:o,isOld:!1},{condition:r,isOld:!1}];for(let u=0;u<d.length;u++)d[u].condition.length>1&&([l,c]=d[u].condition,i=!0,s=d[u].isOld);return{txType:ue.Other,type:"ExtendStakePeriod",intentionData:{lockPeriodInDays:t,obligationId:c,obligationKey:l,veScaKey:e,isObligationLocked:i,isOldBorrowIncentive:s}}}decodePeriodAndStakeMoreSca(){let t=this.helperStakeMoreSca.getNestedInputParam(4),e=this.helperExtendStakePeriod.decodeInputU64(4),n=new _(t,this.txb).getAmountInput().reduce((m,b)=>m+b,0),o=[],r=[],i,s=[];this.helperOldUnstakeObligation.moveCall&&(o=[this.helperOldUnstakeObligation.decodeSharedObjectId(2),this.helperOldUnstakeObligation.decodeSharedObjectId(3)]),this.helperUnstakeObligation.moveCall&&(r=[this.helperUnstakeObligation.decodeSharedObjectId(3),this.helperUnstakeObligation.decodeSharedObjectId(4)]),this.helperStakeMoreSca.moveCall&&(i=this.helperStakeMoreSca.decodeOwnedObjectId(1)),this.helperStakeObligationWithVeSca.moveCall&&(s=[this.helperStakeObligationWithVeSca.decodeSharedObjectId(3),this.helperStakeObligationWithVeSca.decodeSharedObjectId(4)]);let c=!1,l=!1,d,u,p=[{condition:o,isOld:!0},{condition:r,isOld:!1},{condition:s,isOld:!1}];for(let m=0;m<p.length;m++)p[m].condition.length>1&&([u,d]=p[m].condition,c=!0,l=p[m].isOld);return{txType:ue.Other,type:"ExtendPeriodAndStakeMore",intentionData:{amount:n,veScaKey:i,lockPeriodInDays:e,obligationId:d,obligationKey:u,isOldBorrowIncentive:l,isObligationLocked:c}}}decodeStakeSca(){let t,e;this.helperStakeSca.moveCall&&this.helperStakeMoreSca.moveCall===void 0?(t=this.helperStakeSca.getNestedInputParam(3),e=this.helperStakeSca.decodeInputU64(4)):t=this.helperStakeMoreSca.getNestedInputParam(4);let n=new _(t,this.txb).getAmountInput().reduce((m,b)=>m+b,0),o=[],r=[],i,s=[];this.helperOldUnstakeObligation.moveCall&&(o=[this.helperOldUnstakeObligation.decodeSharedObjectId(2),this.helperOldUnstakeObligation.decodeSharedObjectId(3)]),this.helperUnstakeObligation.moveCall&&(r=[this.helperUnstakeObligation.decodeSharedObjectId(3),this.helperUnstakeObligation.decodeSharedObjectId(4)]),this.helperStakeMoreSca.moveCall&&(i=this.helperStakeMoreSca.decodeOwnedObjectId(1)),this.helperStakeObligationWithVeSca.moveCall&&(s=[this.helperStakeObligationWithVeSca.decodeSharedObjectId(3),this.helperStakeObligationWithVeSca.decodeSharedObjectId(4)]);let c=!1,l=!1,d,u,p=[{condition:o,isOld:!0},{condition:r,isOld:!1},{condition:s,isOld:!1}];for(let m=0;m<p.length;m++)p[m].condition.length>1&&([u,d]=p[m].condition,c=!0,l=p[m].isOld);return{txType:ue.Other,type:"StakeSca",intentionData:{amount:n,lockPeriodInDays:e,obligationId:d,obligationKey:u,veScaKey:i,isObligationLocked:c,isOldBorrowIncentive:l}}}};import pu from"sort-keys-recursive";var g=class{constructor(t){this.data=t}get application(){return"msafe-core"}serialize(){return JSON.stringify(pu(this.data))}};var ho=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.borrow(this.data.coinName,Number(this.data.amount),this.data.obligationId,this.data.obligationKey,e.account.address)}static fromData(e){return new a(e)}};var yo=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.borrowWithBoost(this.data.coinName,Number(this.data.amount),this.data.obligationId,this.data.obligationKey,this.data.veScaKey,e.account.address)}static fromData(e){return new a(e)}};var So=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.borrowWithReferral(this.data.coinName,Number(this.data.amount),this.data.obligationId,this.data.obligationKey,this.data.veScaKey,e.account.address)}static fromData(e){return new a(e)}};var wo=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.claim(this.data.lendingIncentive,this.data.borrowIncentiveV2,this.data.borrowIncentive,e.account.address)}static fromData(e){return new a(e)}};var Co=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.depositCollateral(this.data.collateralCoinName,Number(this.data.amount),this.data.obligationId,e.account.address)}static fromData(e){return new a(e)}};var To=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.migrateAndClaim(this.data.obligationKey,this.data.obligationId,this.data.rewardCoinName,this.data.veScaKey)}static fromData(e){return new a(e)}};var Io=class a extends g{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 ko=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.migrateLendingWusdcToUsdcNative(this.data.coinName,Number(this.data.amount),this.data.slippage,this.data.validSwapAmount,this.data.stakeAccountId)}static fromData(e){return new a(e)}};var Do=class a extends g{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 xo=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.repay(this.data.coinName,Number(this.data.amount),this.data.obligationId,this.data.obligationKey,e.account.address)}static fromData(e){return new a(e)}};var vo=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.repayWithBoost(this.data.coinName,Number(this.data.amount),this.data.obligationId,this.data.veScaKey,e.account.address)}static fromData(e){return new a(e)}};var Ao=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.stake(this.data.marketCoinName,Number(this.data.amount),void 0,e.account.address)}static fromData(e){return new a(e)}};var Oo=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.deposit(this.data.coinName,Number(this.data.amount),e.account.address)}static fromData(e){return new a(e)}};var Po=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.unstake(this.data.marketCoinName,Number(this.data.amount),void 0,e.account.address)}static fromData(e){return new a(e)}};var Ro=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.unstakeAndWithdraw(this.data.coinName,Number(this.data.amount),this.data.stakeAccountId)}static fromData(e){return new a(e)}};var _o=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.withdrawCollateral(this.data.collateralCoinName,Number(this.data.amount),this.data.obligationId,this.data.obligationKey,e.account.address)}static fromData(e){return new a(e)}};var Bo=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.withdraw(this.data.coinName,Number(this.data.amount),e.account.address)}static fromData(e){return new a(e)}};var Mo=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.bindReferral(this.data.veScaKey)}static fromData(e){return new a(e)}};var jo=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.claimRevenuReferral(this.data.veScaKey,this.data.coins)}static fromData(e){return new a(e)}};var No=class a extends g{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 Eo=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.extendPeriodAndStakeMoreSca(this.data.amount,this.data.veScaKey,this.data.lockPeriodInDays,this.data.obligationId,this.data.obligationKey,this.data.isObligationLocked,this.data.isOldBorrowIncentive,e.account.address)}static fromData(e){return new a(e)}};var Wo=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.extendStakeScaLockPeriod(this.data.lockPeriodInDays,this.data.veScaKey,this.data.obligationId,this.data.obligationKey,this.data.isObligationLocked,this.data.isOldBorrowIncentive,e.account.address)}static fromData(e){return new a(e)}};var Lo=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.redeemSca(this.data.veScaKey)}static fromData(e){return new a(e)}};var Uo=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.renewExpiredStakeSca(this.data.amount,this.data.lockPeriodInDays,this.data.vescaKey,this.data.isHaveRedeem,this.data.obligation,this.data.obligationKey,this.data.isObligationLocked,this.data.isOldBorrowIncentive,e.account.address)}static fromData(e){return new a(e)}};var Fo=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.stakeSca(this.data.amount,this.data.isObligationLocked,this.data.isOldBorrowIncentive,this.data.obligationId,this.data.obligationKey,this.data.lockPeriodInDays,this.data.veScaKey,e.account.address)}static fromData(e){return new a(e)}};var qo=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.supplyAndStake(this.data.coinName,Number(this.data.amount),this.data.stakeAccountId,e.account.address)}static fromData(e){return new a(e)}};var $o=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.withdrawUnlockedSca(this.data.vescaKey,e.account.address)}static fromData(e){return new a(e)}};var Ko=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(`${gs}/addresses/${this.id}`,t);if(e.status===200){let n=await e.json();if("mainnet"in n){this.addresses=n.mainnet;return}throw new Error("Mainnet key is not in address!")}throw new Error(`Failed to fetch address with id ${this.id}`)}};import{TransactionBlock as I}from"@mysten/sui.js/transactions";import Ys from"bignumber.js";import{TransactionBlock as mu}from"@mysten/sui.js/transactions";var Vo=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 mu(t)}async selectCoin(t,e,n,o=this.params.walletAddress){let r=this.utils.parseCoinType(e),i=await this.utils.selectCoinIds(n,r,o),[s,c]=this.utils.takeAmountFromCoins(t,i,n);return{takeCoin:s,leftCoin:c}}async selectMarketCoin(t,e,n,o=this.params.walletAddress){let r=this.utils.parseMarketCoinType(e),i=await this.utils.selectCoins(n,r,o),s=i.reduce((u,p)=>(u+=Number(p.balance),u),0),c=i.map(u=>u.objectId),[l,d]=this.utils.takeAmountFromCoins(t,c,Math.min(n,s));return{takeCoin:l,leftCoin:d,totalAmount:s}}async selectSCoin(t,e,n,o=this.params.walletAddress){let r=this.utils.parseSCoinType(e),i=await this.utils.selectCoins(n,r,o),s=i.map(u=>u.objectId),c=i.reduce((u,p)=>u+Number(p.balance),0),[l,d]=this.utils.takeAmountFromCoins(t,s,Math.min(c,n));return{takeCoin:l,leftCoin:d,totalAmount:c}}};import{TransactionBlock as fu}from"@mysten/sui.js/transactions";import Qo from"bignumber.js";var Lt=async(a,t)=>{let e=t,n=a.address.get("core.object")||uo,o=[],r=!1,i=null;do{let d=await a.client.getOwnedObjects({owner:e,filter:{StructType:`${n}::obligation::ObligationKey`},cursor:i});o.push(...d.data),d.hasNextPage&&d.nextCursor?(r=!0,i=d.nextCursor):r=!1}while(r);let s=o.map(d=>d?.data?.objectId).filter(d=>d!==void 0),c=await a.client.multiGetObjects({ids:s,options:{showContent:!0,showType:!0}}),l=[];for(let d=0;d<c.length;d++){let u=c[d].data.objectId,{content:p}=c[d].data;if(p&&"fields"in p){let m=p.fields,b=String(m.ownership.fields.of),S=await Pr(a,b);l.push({id:b,keyId:u,locked:S})}}return l},Pr=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},ks=async(a,t,e)=>{let n=e||[...Z],o=t,r=[],i=!1,s=null;do{let d=await a.client.getOwnedObjects({owner:o,filter:{MatchAny:n.map(u=>({StructType:`0x2::coin::Coin<${a.utils.parseCoinType(u)}>`}))},options:{showType:!0,showContent:!0},cursor:s});r.push(...d.data),d.hasNextPage&&d.nextCursor?(i=!0,s=d.nextCursor):i=!1}while(i);let c={};return r.map(d=>d.data).filter(d=>d!=null).forEach(d=>{let u=d.type;if(d.content&&"fields"in d.content){let p=d.content.fields,m=a.utils.parseCoinNameFromType(u);m&&(c[m]=Qo(c[m]??0).plus(p.balance).toNumber())}}),c},Ds=async(a,t,e)=>{let n=e,o=a.utils.parseCoinType(t),r=[],i=!1,s=null;do{let d=await a.client.getOwnedObjects({owner:n,filter:{StructType:`0x2::coin::Coin<${o}>`},options:{showContent:!0},cursor:s});r.push(...d.data),d.hasNextPage&&d.nextCursor?(i=!0,s=d.nextCursor):i=!1}while(i);let c=0;return r.map(d=>d.data).filter(d=>d!=null).forEach(d=>{if(d.content&&"fields"in d.content){let u=d.content.fields;c=Qo(c).plus(u.balance).toNumber()}}),c},xs=async(a,t,e)=>{let n=e||[...Z].map(d=>a.utils.parseMarketCoinName(d)),o=t,r=[],i=!1,s=null;do{let d=await a.client.getOwnedObjects({owner:o,filter:{MatchAny:n.map(u=>({StructType:`0x2::coin::Coin<${a.utils.parseMarketCoinType(u)}>`}))},options:{showType:!0,showContent:!0},cursor:s});r.push(...d.data),d.hasNextPage&&d.nextCursor?(i=!0,s=d.nextCursor):i=!1}while(i);let c={};return r.map(d=>d.data).filter(d=>d!=null).forEach(d=>{let u=d.type;if(d.content&&"fields"in d.content){let p=d.content.fields,m=a.utils.parseCoinNameFromType(u);m&&(c[m]=Qo(c[m]??0).plus(p.balance).toNumber())}}),c},vs=async(a,t,e)=>{let n=e,o=a.utils.parseMarketCoinType(t),r=[],i=!1,s=null;do{let d=await a.client.getOwnedObjects({owner:n,filter:{StructType:`0x2::coin::Coin<${o}>`},options:{showContent:!0},cursor:s});r.push(...d.data),d.hasNextPage&&d.nextCursor?(i=!0,s=d.nextCursor):i=!1}while(i);let c=0;return r.map(d=>d.data).filter(d=>d!=null).forEach(d=>{if(d.content&&"fields"in d.content){let u=d.content.fields;c=Qo(c).plus(u.balance).toNumber()}}),c},As=async(a,t)=>{let n=`${a.address.get("core.packages.query.id")}::obligation_query::obligation_data`,o=new fu;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 T}from"@mysten/sui.js/utils";var pe=async(a,t)=>{let e=t,n=a.address.get("spool.object"),o=`${n}::spool_account::SpoolAccount`,r=[],i=!1,s=null;do{let p=await a.client.getOwnedObjects({owner:e,filter:{StructType:o},options:{showContent:!0,showType:!0},cursor:s});r.push(...p.data),p.hasNextPage&&p.nextCursor?(i=!0,s=p.nextCursor):i=!1}while(i);let c={sweth:[],ssui:[],susdc:[],swusdc:[],swusdt:[],scetus:[],safsui:[],shasui:[],svsui:[]},l=Object.keys(c).reduce((p,m)=>{let b=a.utils.parseCoinName(m),S=a.utils.parseMarketCoinType(b),C={...p},x=`${n}::spool_account::SpoolAccount<${S}>`;return C[m]=x,C},{}),d=r.map(p=>p?.data?.objectId).filter(p=>p!==void 0);return(await a.client.multiGetObjects({ids:d,options:{showContent:!0,showType:!0}})).forEach(p=>{let m=p.data.objectId,b=p.data.type;if(p.data.content&&"fields"in p.data.content){let S=p.data.content.fields,C=String(S.spool_id),x=String(S.stake_type.fields.name),U=Number(S.stakes),B=Number(S.index),K=Number(S.points),F=Number(S.total_points);T(b)===l.sweth?c.sweth.push({id:m,type:T(b),stakePoolId:C,stakeType:T(x),staked:U,index:B,points:K,totalPoints:F}):T(b)===l.ssui?c.ssui.push({id:m,type:T(b),stakePoolId:C,stakeType:T(x),staked:U,index:B,points:K,totalPoints:F}):T(b)===l.swusdc?c.swusdc.push({id:m,type:T(b),stakePoolId:C,stakeType:T(x),staked:U,index:B,points:K,totalPoints:F}):T(b)===l.swusdt?c.swusdt.push({id:m,type:T(b),stakePoolId:C,stakeType:T(x),staked:U,index:B,points:K,totalPoints:F}):T(b)===l.scetus?c.scetus.push({id:m,type:T(b),stakePoolId:C,stakeType:T(x),staked:U,index:B,points:K,totalPoints:F}):T(b)===l.safsui?c.safsui.push({id:m,type:T(b),stakePoolId:C,stakeType:T(x),staked:U,index:B,points:K,totalPoints:F}):T(b)===l.shasui?c.shasui.push({id:m,type:T(b),stakePoolId:C,stakeType:T(x),staked:U,index:B,points:K,totalPoints:F}):T(b)===l.svsui?c.svsui.push({id:m,type:T(b),stakePoolId:C,stakeType:T(x),staked:U,index:B,points:K,totalPoints:F}):T(b)===l.susdc&&c.susdc.push({id:m,type:T(b),stakePoolId:C,stakeType:T(x),staked:U,index:B,points:K,totalPoints:F})}}),c},Rr=async(a,t)=>{let e=a.address.get(`spool.pools.${t}.id`),n,o=await a.client.getObject({id:e,options:{showContent:!0,showType:!0}});if(o.data){let r=o.data,i=r.objectId,s=r.type;if(r.content&&"fields"in r.content){let c=r.content.fields,l=Number(c.max_distributed_point),d=Number(c.distributed_point),u=Number(c.distributed_point_per_period),p=Number(c.point_distribution_time),m=Number(c.max_stakes),b=String(c.stake_type.fields.name),S=Number(c.stakes),C=Number(c.index),x=Number(c.created_at),U=Number(c.last_update);n={id:i,type:T(s),maxPoint:l,distributedPoint:d,pointPerPeriod:u,period:p,maxStake:m,stakeType:T(b),totalStaked:S,index:C,createdAt:x,lastUpdate:U}}}return n},_r=async(a,t)=>{let e=a.address.get(`spool.pools.${t}.rewardPoolId`),n,o=await a.client.getObject({id:e,options:{showContent:!0,showType:!0}});if(o.data){let r=o.data,i=r.objectId,s=r.type;if(r.content&&"fields"in r.content){let c=r.content.fields,l=String(c.spool_id),d=Number(c.exchange_rate_numerator),u=Number(c.exchange_rate_denominator),p=Number(c.rewards),m=Number(c.claimed_rewards);n={id:i,type:T(s),stakePoolId:l,ratioNumerator:d,ratioDenominator:u,rewards:p,claimedRewards:m}}}return n};import{TransactionBlock as hu}from"@mysten/sui.js/transactions";import{normalizeStructTag as Bx}from"@mysten/sui.js/utils";import jx from"bignumber.js";var N=a=>{let{sender:t}=a.blockData;if(!t)throw new Error("Sender is required");return t},Rs=(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(Ut(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)`)}},_s=(a,t,e)=>{if(Ut(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)`)},Bs=(a,t)=>{if(Ut(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")},Ms=(a,t,e)=>{if(Ut(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)`)},Ut=a=>{if(a===void 0)throw new Error("veSca not found")};import{normalizeStructTag as js,parseStructTag as bu}from"@mysten/sui.js/utils";import Tx from"bignumber.js";var gu=a=>({pointType:js(a.point_type.name),weightedAmount:Number(a.weighted_amount),points:Number(a.points),totalPoints:Number(a.total_points),index:Number(a.index)}),Ns=a=>({poolType:js(a.pool_type.name),debtAmount:Number(a.debt_amount),pointList:a.points_list.reduce((t,e)=>{let n=gu(e),o=bu(n.pointType).name.toLowerCase();return t[o]=n,t},{})});var Go=a=>{let t=a.slice(1).toLowerCase();return a.charAt(0).toLowerCase()==="s"&&[...new Set([...Z,...po,...ys])].includes(t)},Br=a=>{switch(a){case"afsui":return"afSUI";case"hasui":return"haSUI";case"vsui":return"vSUI";default:return a.toUpperCase()}},Es=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 Ws=async(a,t,e,n)=>{let o=n||[...ft],r=a.address.get("borrowIncentive.query"),i=a.address.get("borrowIncentive.incentiveAccounts"),s=`${r}::incentive_account_query::incentive_account_data`,c=new hu;c.moveCall({target:s,arguments:[c.object(i),c.object(t)]});let d=(await a.client.devInspectTransactionBlock({transactionBlock:c,sender:e})).events[0].parsedJson,u={};return d.pool_records.forEach(p=>{let m=Ns(p),{poolType:b}=m,S=a.utils.parseCoinNameFromType(b);o.length>=1&&o.includes(S)&&(u[S]=m)},{}),u};var Ls=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 Us=async(a,t)=>{let e=a.address.get(`core.coins.${t}.oracle.pyth.feedObject`),n=await a.client.getObject({id:e,options:{showContent:!0}});if(n.data){let o=n.data;if(o.content&&"fields"in o.content){let r=o.content.fields,i=Number(r.price_info.fields.price_feed.fields.price.fields.expo.fields.magnitude),s=Number(r.price_info.fields.price_feed.fields.price.fields.expo.fields.negative),c=Number(r.price_info.fields.price_feed.fields.price.fields.price.fields.magnitude),l=Number(r.price_info.fields.price_feed.fields.price.fields.price.fields.negative);return c*10**((s?-1:1)*i)*(l?-1:1)}}return 0};import Mr from"bignumber.js";var Fs=async(a,t)=>{let e=t,o=`${a.address.get("vesca.id")}::ve_sca::VeScaKey`,r=[],i=!1,s=null;do{let l=await a.client.getOwnedObjects({owner:e,filter:{StructType:o},cursor:s});r.push(...l.data),l.hasNextPage&&l.nextCursor?(i=!0,s=l.nextCursor):i=!1}while(i);return r.map(l=>l.data).filter(l=>!!l)},qs=async(a,t)=>{let n=(await Fs(a,t)).map(r=>r.objectId),o=[];for(let r=0;r<n.length;r++){let i=await jr(a,n[r]);i&&o.push(i)}return o},jr=async(a,t,e)=>{let n=a.address.get("vesca.tableId"),o=t||(await Fs(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:Mr(c.locked_sca_amount).toNumber(),lockedScaCoin:Mr(c.locked_sca_amount).shiftedBy(-9).toNumber(),unlockAt:Mr(c.unlock_at).toNumber()}}return r};var zo=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 Lt(this,t)}async getCoinAmounts(t,e){return ks(this,t,e)}async getCoinAmount(t,e=this.params.walletAddress){return Ds(this,t,e)}async getMarketCoinAmounts(t,e){return xs(this,t,e)}async getMarketCoinAmount(t,e=this.params.walletAddress){return vs(this,t,e)}async getPriceFromPyth(t){return Us(this,t)}async getAllStakeAccounts(t=this.params.walletAddress){return pe(this,t)}async getStakeAccounts(t,e=this.params.walletAddress){return(await this.getAllStakeAccounts(e))[t]??[]}async getStakePools(t=[...mt]){let e={};for(let n=0;n<t.length;n++){let o=t[n],r=await Rr(this,o);r&&(e[o]=r)}return e}async getStakePool(t){return Rr(this,t)}async getStakeRewardPools(t=[...mt]){let e={};for(let n=0;n<t.length;n++){let o=await _r(this,t[n]);o&&(e[t[n]]=o)}return e}async getStakeRewardPool(t){return _r(this,t)}async getBorrowIncentiveAccounts(t,e=this.params.walletAddress,n){return Ws(this,t,e,n)}async getObligationCoinNames(t){let e=await As(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 Nr,normalizeStructTag as yu}from"@mysten/sui.js/utils";var Jo=class{params;isTestnet;_address;client;constructor(t,e){this.params=t,this.client=t.client,this._address=e}parseSymbol(t){if(Go(t)){let e=t.slice(1).toLowerCase();return t.slice(0,1).toLowerCase()+Br(e)}return Br(t)}parseCoinType(t){let e=Go(t)?this.parseCoinName(t):t,n=Cs[e];return[$.wusdc,$.wusdt,$.weth,$.wbtc,$.wsol,$.wapt].includes(n)?`${n}::coin::COIN`:t==="vsui"?`${vr.vsui}::cert::CERT`:`${n}::${e}::${e.toUpperCase()}`}parseMarketCoinType(t){let e=this._address.get("core.object")||uo,n=this.parseCoinType(t);return`${e}::reserve::MarketCoin<${n}>`}parseCoinNameFromType(t){let e=yu(t),n=/((0x[^:]+::[^:]+::[^<>]+))(?![^<>]*<)/,o=t.match(n),r=t.includes("reserve::MarketCoin");e=o?.[1]||t;let i={[`${$.wusdc}::coin::COIN`]:"wusdc",[`${$.wusdt}::coin::COIN`]:"wusdt",[`${$.weth}::coin::COIN`]:"weth",[`${$.wbtc}::coin::COIN`]:"wbtc",[`${$.wsol}::coin::COIN`]:"wsol",[`${$.wapt}::coin::COIN`]:"wapt"},s={[`${vr.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=>mo[t];getBorrowIncentiveRewardCoinName=t=>ws[t];getCoinDecimal(t){return Ss[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 Ts[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=Nr,n){let o=n,r=[],i=0,s=!0,c=null;for(;s&&i<t;){let l=await this.client.getCoins({owner:o,coinType:e,cursor:c});l.data.sort((d,u)=>parseInt(u.balance,10)-parseInt(d.balance,10));for(let d=0;d<l.data.length&&(r.push({objectId:l.data[d].coinObjectId,digest:l.data[d].digest,version:l.data[d].version,balance:l.data[d].balance}),i+=parseInt(l.data[d].balance,10),!(i>=t));d++);c=l.nextCursor,s=l.hasNextPage}if(!r.length)throw new Error("No valid coins found for the transaction.");return r}async selectCoinsMarketCoin(t=Nr,e){let n=e,o=[],r=!0,i=null;for(;r;){let s=await this.client.getCoins({owner:n,coinType:t,cursor:i});s.data.sort((c,l)=>parseInt(l.balance,10)-parseInt(c.balance,10));for(let c=0;c<s.data.length&&(o.push({objectId:s.data[c].coinObjectId,digest:s.data[c].digest,version:s.data[c].version,balance:s.data[c].balance}),!(o.length>50));c++);i=s.nextCursor,r=s.hasNextPage}return o}async selectCoinIds(t,e=Nr,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 Es(r)}parseSCoinName(t){if(Go(t)&&tt.includes(t))return t;let e=`s${t}`;if(tt.includes(e))return e}};import{SUI_CLOCK_OBJECT_ID as Ft,SUI_TYPE_ARG as Su}from"@mysten/sui.js/utils";var qt=async(...a)=>{let[t,e,n]=a;if(a.length===3&&n&&typeof n=="string"){let i=await jr(t.query,n);return i||void 0}let o=N(e),r=await qs(t.query,o);if(r.length!==0)return r[0]};var Er=async(...a)=>{let[t,e,n,o]=a;if(a.length===4&&n&&o&&typeof n=="string"){let c=await Pr(t.query,n);return{obligationId:n,obligationKey:o,obligationLocked:c}}let r=N(e),i=await Lt(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}},wu=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(Ft)]})},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(Ft)]})},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(Ft)]})},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(Ft)],typeArguments:[Su]})},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(Ft)],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(Ft)],typeArguments:[c]})}}},E=async({builder:a,txBlock:t})=>{let e=await wu({builder:a,txBlock:t});return{normalMethod:e,stakeObligationQuick:async(n,o)=>{let{obligationId:r,obligationKey:i,obligationLocked:s}=await Er(a,t,n,o),c=!!t.blockData.transactions.find(l=>l.kind==="MoveCall"&&(l.target===`${pt}::user::unstake`||l.target===`${a.address.get("borrowIncentive.id")}::user::unstake`));(!s||c)&&e.stakeObligation(r,i)},unstakeObligationQuick:async(n,o)=>{let{obligationId:r,obligationKey:i,obligationLocked:s}=await Er(a,t,n,o);s&&e.unstakeObligation(r,i)},stakeObligationWithVeScaQuick:async(n,o,r)=>{let{obligationId:i,obligationKey:s,obligationLocked:c}=await Er(a,t,n,o),l=!!t.blockData.transactions.find(async d=>d.kind==="MoveCall"&&(d.target===`${pt}::user::unstake`||d.target===`${a.address.get("borrowIncentive.id")}::user::unstake`));if(!c||l){let d=await Ls({address:a.address,client:a.client},i);if(r&&r!==d)throw new Error("Binded veScaKey is not equal to the provided veScaKey");d?e.stakeObligationWithVesca(i,s,d):e.stakeObligation(i,s)}},claimBorrowIncentiveQuick:(n,o,r)=>e.claimBorrowIncentive(o,r,n)}};import{SUI_CLOCK_OBJECT_ID as nt}from"@mysten/sui.js/utils";import{SUI_CLOCK_OBJECT_ID as Zo}from"@mysten/sui.js/utils";import Cu from"axios";var $s={testnet:["https://hermes-beta.pyth.network"],mainnet:["https://hermes.pyth.network","https://scallop.rpc.p2p.world"]};import{bcs as Wr}from"@mysten/sui.js/bcs";import{SUI_CLOCK_OBJECT_ID as Xo}from"@mysten/sui.js/utils";var Lr=16*1024,Yo=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(Wr.ser("vector<u8>",Array.from(r),{maxSize:Lr}).toBytes()),e.object(Xo)]});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(Wr.ser("vector<u8>",Array.from(e[0]),{maxSize:Lr}).toBytes()),s[0],t.object(Xo)]});let c=[],l=await this.getBaseUpdateFee(),d=t.splitCoins(t.gas,n.map(()=>t.pure(l))),u=0;for(let p=0;p<n.length;p++){let m=await this.getPriceFeedObjectId(n[p]);if(!m)throw new Error(`Price feed ${n[0]} not found, please create it first`);c.push(m),[r]=t.moveCall({target:`${o}::pyth::update_single_price_feed`,arguments:[t.object(this.pythStateId),r,t.object(m),d[u],t.object(Xo)]}),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(Wr.ser("vector<u8>",Array.from(e[0]),{maxSize:Lr}).toBytes()),r[0],t.object(Xo)]})}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 Tu=async(a,t)=>(await Cu.get(`${a}/api/latest_vaas`,{params:{ids:t}})).data.map(o=>Buffer.from(o,"base64")),me=async(a,t,e)=>{let n=e??[...new Set([...Z,...po])],o=a.isTestnet?["pyth"]:["pyth"];if(o.includes("pyth")){let i=new Yo(a.client,a.address.get("core.oracles.pyth.state"),a.address.get("core.oracles.pyth.wormholeState")),s=[];await Promise.all(n.map(async l=>s.push(a.address.get(`core.coins.${l}.oracle.pyth.feed`))));let c=a.params.pythEndpoints??$s[a.isTestnet?"testnet":"mainnet"];try{let l=await Tu(c[0],s);await i.updatePriceFeeds(t,l,s)}catch(l){console.warn(`Failed to update price feeds with endpoint ${c[0]}: ${l}`)}}let r=[...new Set(n)];for(let i=0;i<r.length;i++)await Iu(a,t,r[i],o)},Iu=async(a,t,e,n)=>{let o=a.utils.parseCoinType(e);ku(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)},ku=(a,t,e,n,o,r,i,s,c,l,d,u,p,m,b)=>{let S=Du(a,e,n,b);return t.includes("pyth")&&Ou(a,o,S,i,s,r,b),t.includes("switchboard")&&Au(a,c,S,d,l,b),t.includes("supra")&&vu(a,u,S,m,p,b),xu(a,e,n,S,b),a},Du=(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})},xu=(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(Zo)],typeArguments:i}),a},vu=(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(Zo)],typeArguments:[r]})},Au=(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(Zo)],typeArguments:[r]})},Ou=(a,t,e,n,o,r,i)=>{let s=typeof e=="string"?a.object(e):e,c=typeof n=="string"?a.object(n):n,l=typeof o=="string"?a.object(o):o,d=typeof r=="string"?a.object(r):r;a.moveCall({target:`${t}::rule::set_price`,arguments:[s,c,l,d,a.object(Zo)],typeArguments:[i]})};var gt=async({builder:a,txBlock:t})=>{let e={pkgId:a.address.get("scoin.id")},n={};return await Promise.all(tt.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 fe=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=N(t),i=await Lt(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}},Pu=async({builder:a,txBlock:t})=>{let e={protocolPkg:a.address.get("core.packages.protocol.id"),market:a.address.get("core.market"),version:a.address.get("core.version"),coinDecimalsRegistry:a.address.get("core.coinDecimalsRegistry"),xOracle:a.address.get("core.oracles.xOracle")},o=`${a.address.get("referral.id")}::scallop_referral_program::REFERRAL_WITNESS`;return{openObligation:()=>t.moveCall({target:`${e.protocolPkg}::open_obligation::open_obligation`,arguments:[t.object(e.version)]}),returnObligation:(r,i)=>t.moveCall({target:`${e.protocolPkg}::open_obligation::return_obligation`,arguments:[t.object(e.version),t.object(r),t.object(i)]}),openObligationEntry:()=>t.moveCall({target:`${e.protocolPkg}::open_obligation::open_obligation_entry`,arguments:[t.object(e.version)]}),addCollateral:(r,i,s)=>{let c=a.utils.parseCoinType(s);return t.moveCall({target:`${e.protocolPkg}::deposit_collateral::deposit_collateral`,arguments:[t.object(e.version),t.object(r),t.object(e.market),typeof i!="string"?i:t.pure(i)],typeArguments:[c]})},takeCollateral:(r,i,s,c)=>{let l=a.utils.parseCoinType(c);return t.moveCall({target:`${e.protocolPkg}::withdraw_collateral::withdraw_collateral`,arguments:[t.object(e.version),t.object(r),t.object(i),t.object(e.market),t.object(e.coinDecimalsRegistry),t.pure(s),t.object(e.xOracle),t.object(nt)],typeArguments:[l]})},deposit:(r,i)=>{let s=a.utils.parseCoinType(i);return t.moveCall({target:`${e.protocolPkg}::mint::mint`,arguments:[t.object(e.version),t.object(e.market),typeof r!="string"?r:t.pure(r),t.object(nt)],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(nt)],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(nt)],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(nt)],typeArguments:[s]})},borrow:(r,i,s,c)=>{let l=a.utils.parseCoinType(c);return t.moveCall({target:`${e.protocolPkg}::borrow::borrow`,arguments:[t.object(e.version),t.object(r),t.object(i),t.object(e.market),t.object(e.coinDecimalsRegistry),t.pure(s),t.object(e.xOracle),t.object(nt)],typeArguments:[l]})},borrowEntry:(r,i,s,c)=>{let l=a.utils.parseCoinType(c);return t.moveCall({target:`${e.protocolPkg}::borrow::borrow_entry`,arguments:[t.object(e.version),t.object(r),t.object(i),t.object(e.market),t.object(e.coinDecimalsRegistry),t.pure(s),t.object(e.xOracle),t.object(nt)],typeArguments:[l]})},borrowWithReferral:(r,i,s,c,l)=>{let d=a.utils.parseCoinType(l);return t.moveCall({target:`${e.protocolPkg}::borrow::borrow_with_referral`,arguments:[t.object(e.version),t.object(r),t.object(i),t.object(e.market),t.object(e.coinDecimalsRegistry),t.object(s),t.pure(c),t.object(e.xOracle),t.object(nt)],typeArguments:[d,o]})},repay:(r,i,s)=>{let c=a.utils.parseCoinType(s);return t.moveCall({target:`${e.protocolPkg}::repay::repay`,arguments:[t.object(e.version),t.object(r),t.object(e.market),typeof i!="string"?i:t.pure(i),t.object(nt)],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]})}}},W=async({builder:a,txBlock:t})=>{let e=await Pu({builder:a,txBlock:t}),n=await gt({builder:a,txBlock:t});return{normalMethod:e,addCollateralQuick:async(o,r,i)=>{let s=N(t),{obligationId:c}=await fe(t,a,i);if(r==="sui"){let[l]=t.splitCoins(t.gas,[o]);e.addCollateral(c,l,r)}else{let{leftCoin:l,takeCoin:d}=await a.selectCoin(t,r,o,s);e.addCollateral(c,d,r),t.transferObjects([l],s)}},takeCollateralQuick:async(o,r,i,s)=>{let c=await fe(t,a,i,s),l=await a.query.getObligationCoinNames(c.obligationId);return await me(a,t,l),e.takeCollateral(c.obligationId,c.obligationKey,o,r)},depositQuick:async(o,r,i)=>{if(r==="sui"){let[l]=t.splitCoins(t.gas,[o]);return e.deposit(l,r)}let{leftCoin:s,takeCoin:c}=await a.selectCoin(t,r,o,i);return t.transferObjects([s],i),e.deposit(c,r)},withdrawQuick:async(o,r)=>{let i=N(t),s=a.utils.parseMarketCoinName(r);try{let c=a.utils.parseSCoinName(r);if(!c)throw new Error(`No sCoin for ${r}`);let{leftCoin:l,takeCoin:d,totalAmount:u}=await a.selectSCoin(t,c,o,i);t.transferObjects([l],i);let p=n.burnSCoin(c,d),m=e.withdraw(p,r),b=o-u;try{if(b>0){let{leftCoin:S,takeCoin:C}=await a.selectMarketCoin(t,s,b,i);t.transferObjects([S],i),t.mergeCoins(m,[e.withdraw(C,r)])}}catch{}return m}catch{let{leftCoin:l,takeCoin:d}=await a.selectMarketCoin(t,s,o,i);return t.transferObjects([l],i),e.withdraw(d,r)}},borrowQuick:async(o,r,i,s)=>{let c=await fe(t,a,i,s),d=[...await a.query.getObligationCoinNames(c.obligationId),r];return await me(a,t,d),e.borrow(c.obligationId,c.obligationKey,o,r)},borrowWithReferralQuick:async(o,r,i,s,c)=>{let l=await fe(t,a,s,c),u=[...await a.query.getObligationCoinNames(l.obligationId),r];return await me(a,t,u),e.borrowWithReferral(l.obligationId,l.obligationKey,i,o,r)},repayQuick:async(o,r,i,s)=>{let c=await fe(t,a,i);if(r==="sui"){let[u]=t.splitCoins(t.gas,[o]);return e.repay(c.obligationId,u,r)}let{leftCoin:l,takeCoin:d}=await a.selectCoin(t,r,o,s);return t.transferObjects([l],s),e.repay(c.obligationId,d,r)},updateAssetPricesQuick:async o=>me(a,t,o)}};import{SUI_CLOCK_OBJECT_ID as ta}from"@mysten/sui.js/utils";var ea=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(ta)],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(ta)],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(ta)],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(ta)],typeArguments:[i]})}}},Ks=async({builder:a,txBlock:t})=>{let e=await ea({builder:a,txBlock:t});return{claimReferralRevenueQuick:async(n,o,r=[...Z])=>{let i=[];for(let s=0;s<r.length;s++)if(r[s]==="sui"){let c=e.claimReferralRevenue(n,r[s]);i.push(c)}else{let c=e.claimReferralRevenue(n,r[s]);try{let l=await a.utils.selectCoinIds(1/0,a.utils.parseCoinType(r[s]),o);t.mergeCoins(c,l.slice(0,500))}catch{}finally{i.push(c)}}i.length>0&&t.transferObjects(i,t.pure(o))}}};var Ru={packageId:"0x5857d185897aaff40ae37b2eecc895efc1a9dff1b210c4fb894eabbce4ac2603"},Vs={check_slippage:(a,t,e,n,o)=>a.moveCall({target:`${Ru.packageId}::slippage_check::check_slippage`,arguments:[t,a.pure(e),a.pure(n)],typeArguments:[o]})};import{SUI_CLOCK_OBJECT_ID as na}from"@mysten/sui.js/utils";var Qs=async(a,t,e,n,o,r,i=!1)=>{let s=await gt({builder:a,txBlock:t}),c=await Gs({builder:a,txBlock:t});try{let{takeCoin:l,leftCoin:d,totalAmount:u}=i?await a.selectSCoin(t,n,o,r):await a.selectMarketCoin(t,n,o,r);if(i){let p=s.burnSCoin(n,l);c.stake(e,p,n)}else c.stake(e,l,n);return t.transferObjects([d],r),u}catch{return 0}},Hs=async(...a)=>{let[t,e,n,o]=a;if(a.length===4&&o)return[o];let r=N(e);return(await pe(t.query,r))[n].map(s=>s.id)},_u=async(...a)=>{let[t,e,n,o]=a,r=N(e),i=await pe(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]},Gs=async({builder:a,txBlock:t})=>{let e={spoolPkg:a.address.get("spool.id")},n={},o={},r={};return mt.forEach(i=>{let s=a.address.get(`spool.pools.${i}.id`),c=a.address.get(`spool.pools.${i}.rewardPoolId`),l=a.utils.parseMarketCoinType(i);n[i]=s,o[i]=c,r[i]=l}),{createStakeAccount:i=>{let s=r[i],c=n[i];return t.moveCall({target:`${e.spoolPkg}::user::new_spool_account`,arguments:[t.object(c),t.object(na)],typeArguments:[s]})},stake:(i,s,c)=>{let l=r[c],d=n[c];t.moveCall({target:`${e.spoolPkg}::user::stake`,arguments:[t.object(d),t.object(i),typeof s=="string"?t.pure(s):s,t.object(na)],typeArguments:[l]})},unstake:(i,s,c)=>{let l=r[c],d=n[c];return t.moveCall({target:`${e.spoolPkg}::user::unstake`,arguments:[t.object(d),t.object(i),t.pure(s),t.object(na)],typeArguments:[l]})},claim:(i,s)=>{let c=n[s],l=o[s],d=r[s],u=mo[s],p=a.utils.parseCoinType(u);return t.moveCall({target:`${e.spoolPkg}::user::redeem_rewards`,arguments:[t.object(c),t.object(l),t.object(i),t.object(na)],typeArguments:[d,p]})}}},ot=async({builder:a,txBlock:t})=>{let e=await Gs({builder:a,txBlock:t}),n=await gt({builder:a,txBlock:t});return{normalMethod:e,stakeQuick:async(o,r,i)=>{let s=N(t),c=await Hs(a,t,r,i),l=[];if(c.length===0){let d=e.createStakeAccount(r);l.push(d)}if(typeof o=="number"){let d=await Qs(a,t,c.length>0?c[0]:l[0],r,o,s);o-=d,d||await Qs(a,t,c.length>0?c[0]:l[0],r,o,s,!0)}else e.stake(c.length>0?c[0]:l[0],o,r);l.length>0&&t.transferObjects(l,s)},unstakeQuick:async(o,r,i,s)=>{let c=await _u(a,t,r,i),l=[],d=o;for(let u of c){if(u.staked===0)continue;let p=Math.min(d,u.staked),m=e.unstake(u.id,p,r);if(s){let b=n.mintSCoin(r,m);l.push(b)}else l.push(m);if(d-=p,o<=0)break}if(l.length>0){let u=l[0];return l.length>1&&t.mergeCoins(u,l.slice(1)),u}},claimQuick:async(o,r)=>{let i=await Hs(a,t,o,r),s=[];return i.forEach(c=>{let l=e.claim(c,o);s.push(l)}),s}}};import{SUI_CLOCK_OBJECT_ID as be}from"@mysten/sui.js/utils";var Bu=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(be)]}),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(be)]})},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(be)]})},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(be)]})},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(be)]}),mintEmptyVeSca:()=>t.moveCall({target:`${e.pkgId}::ve_sca::mint_ve_sca_placeholder_key`,arguments:[t.object(e.config),t.object(e.table)],typeArguments:[]})}},ht=async({builder:a,txBlock:t})=>{let e=await Bu({builder:a,txBlock:t});return{normalMethod:e,lockScaQuick:async(n,o,r=!0)=>{let i=N(t),s=await qt(a,t),c,l=[];if(n!==void 0&&typeof n=="number"){let m=await a.utils.selectCoinIds(n,ut,i),[b,S]=a.utils.takeAmountFromCoins(t,m,n);c=b,l.push(S)}else c=n;let d=a.utils.getUnlockAt(o,s?.unlockAt);r&&Rs(n,o,d,s?.unlockAt),console.log(new Date(d*1e3).toLocaleString("en-CA",{hour12:!0}));let u=!s?.unlockAt,p=!u&&s.unlockAt*1e3<=new Date().getTime();if(u||p){if(c)if(u){let m=e.lockSca(c,d);l.push(m)}else{if(s.lockedScaAmount!==0){let m=e.redeemSca(s.keyId);l.push(m)}e.renewExpiredVeSca(s.keyId,c,d)}}else c&&o?(e.extendLockPeriod(s.keyId,d),e.extendLockAmount(s.keyId,c)):o?e.extendLockPeriod(s.keyId,d):c&&e.extendLockAmount(s.keyId,c);l.length>0&&t.transferObjects(l,i)},extendLockPeriodQuick:async(n,o,r=!0)=>{let i=await qt(a,t,o),s=a.utils.getUnlockAt(n);r&&_s(n,s,i?.unlockAt),i&&e.extendLockPeriod(i.keyId,s)},extendLockAmountQuick:async(n,o,r=!0)=>{let i=N(t),s=await qt(a,t,o);if(r&&Bs(n,s?.unlockAt),s){let c=await a.utils.selectCoinIds(n,ut,i),[l,d]=a.utils.takeAmountFromCoins(t,c,n);e.extendLockAmount(s.keyId,l),t.transferObjects([d],i)}},renewExpiredVeScaQuick:async(n,o,r,i=!0)=>{let s=N(t),c=await qt(a,t,r),l=a.utils.getUnlockAt(o,c?.unlockAt);if(i&&Ms(n,o,c?.unlockAt),c){let d=[];if(c.lockedScaAmount!==0){let b=e.redeemSca(c.keyId);d.push(b)}let u=await a.utils.selectCoinIds(n,ut,s),[p,m]=a.utils.takeAmountFromCoins(t,u,n);d.push(m),e.renewExpiredVeSca(c.keyId,p,l),t.transferObjects(d,s)}},redeemScaQuick:async n=>{let o=N(t),r=await qt(a,t,n);if(Ut(r?.unlockAt),r){let i=e.redeemSca(r.keyId);t.transferObjects([i],o)}}}};import{normalizeStructTag as Nu}from"@mysten/sui.js/utils";import{SUI_CLOCK_OBJECT_ID as Mu}from"@mysten/sui.js/utils";var $t={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}}},zs={id:"0x000000000000000000000000000000000000000000000000000000000000dee9"},Ur={id:"0x2c6c36393db063a9534885d22a47caead720272475336470736be28f119971f3"},Js={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 Xs={objectId:Mu,initialSharedVersion:"1",mutable:!1},ju=(a,t)=>{if(a==="sui")switch(t){case"wusdc":return{pool:$t.pools.sui2usdc,aToB:!0};default:throw new Error(`Invalid coin pair: ${a} and ${t}`)}else if(a==="wusdc")switch(t){case"sui":return{pool:$t.pools.sui2usdc,aToB:!1};case"wusdt":return{pool:$t.pools.usdt2usdc,aToB:!1};case"usdc":return{pool:$t.pools.wusdc2usdc,aToB:!0};default:throw new Error(`Invalid coin pair: ${a} and ${t}`)}else if(a==="wusdt")switch(t){case"wusdc":return{pool:$t.pools.usdt2usdc,aToB:!0};default:throw new Error(`Invalid coin pair: ${a} and ${t}`)}else throw new Error(`Invalid coin pair: ${a} and ${t}`)},Fr={createAccount:a=>a.moveCall({target:`${zs.id}::${Js.clob_v2.create_account}`,arguments:[],typeArguments:[]}),swap:(a,t,e,n,o,r,i)=>{let{pool:s,aToB:c}=ju(e,n),l=i.parseCoinType(e),d=i.parseCoinType(n),u=typeof r=="string"?a.object(r):"objectId"in r?a.objectRef(r):a.object(r);if(!s)throw new Error(`Deepbook: No pool found for ${e} to ${n}`);return c?a.moveCall({target:`${Ur.id}::deepbook::deepbook_base_for_quote`,arguments:[a.sharedObjectRef(s.object),a.pure(o),u,a.object(t),a.sharedObjectRef(Xs),a.pure(s.lotsize)],typeArguments:[l,d]}):a.moveCall({target:`${Ur.id}::deepbook::deepbook_quote_for_base`,arguments:[a.sharedObjectRef(s.object),a.pure(o),u,a.sharedObjectRef(Xs),a.object(t),a.pure(s.lotsize)],typeArguments:[d,l]})}};var oa=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:Nu("0xdee9::custodian_v2::AccountCap")},limit:1});return e.length===0||!e[0].data?Fr.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:Fr.swap(o,t,e,n,this.clientOrderId,r,this.scallopUtils),accountCap:r}}};var aa=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 Jo(t,this.address),this.query=new zo(t,{address:this.address,utils:this.utils}),this.builder=new Vo(t,{address:this.address,query:this.query,utils:this.utils}),this.deepbookSwap=new oa({client:this.client,currentAddress:this.params.walletAddress,scallopUtils:this.utils})}async getObligations(t){let e=t||this.params.walletAddress;return this.query.getObligations(e)}async getAllStakeAccounts(t){let e=t||this.params.walletAddress;return this.query.getAllStakeAccounts(e)}async getStakeAccounts(t,e){let n=e||this.params.walletAddress;return this.query.getStakeAccounts(t,n)}async getStakePool(t){return this.query.getStakePool(t)}async getStakeRewardPool(t){return this.query.getStakeRewardPool(t)}async openObligation(t){let e=new I,n=await W({builder:this.builder,txBlock:e}),o=await E({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 I,i=o||this.params.walletAddress;r.setSender(i);let s=await W({builder:this.builder,txBlock:r}),c=await this.query.getObligations(i),l=n||c?.[0]?.id;if(l)await s.addCollateralQuick(e,t,l);else{let[d,u,p]=s.normalMethod.openObligation();await s.addCollateralQuick(e,t,d),s.normalMethod.returnObligation(d,p),r.transferObjects([u],i)}return r}async withdrawCollateral(t,e,n,o,r){let i=new I,s=await W({builder:this.builder,txBlock:i}),c=r||this.params.walletAddress;i.setSender(c);let l=await s.takeCollateralQuick(e,t,n,o);return i.transferObjects([l],c),i}async deposit(t,e,n){let o=new I,r=await W({builder:this.builder,txBlock:o}),i=await gt({builder:this.builder,txBlock:o}),s=n||this.params.walletAddress;o.setSender(s);let c=await r.depositQuick(e,t,n),l=this.utils.parseMarketCoinName(t);if(!tt.includes(l))o.transferObjects([c],s);else{let d=i.mintSCoin(l,c);o.transferObjects([d],s)}return o}async withdraw(t,e,n){let o=new I,r=n||this.params.walletAddress,i=await W({builder:this.builder,txBlock:o});o.setSender(r);let s=await i.withdrawQuick(e,t);return o.transferObjects([s],r),o}async borrow(t,e,n,o,r){let i=new I,s=await W({builder:this.builder,txBlock:i}),c=await E({builder:this.builder,txBlock:i}),l=r||this.params.walletAddress;i.setSender(l);let d=ft.includes(t);d&&await c.unstakeObligationQuick(n,o);let u=await s.borrowQuick(e,t,n,o);return i.transferObjects([u],l),d&&await c.stakeObligationQuick(n,o),i}async borrowWithBoost(t,e,n,o,r,i){let s=new I,c=await W({builder:this.builder,txBlock:s}),l=await E({builder:this.builder,txBlock:s}),d=i||this.params.walletAddress;s.setSender(d);let u=ft.includes(t);u&&await l.unstakeObligationQuick(n,o);let p=await c.borrowQuick(e,t,n,o);return s.transferObjects([p],d),u&&await l.stakeObligationWithVeScaQuick(n,o,r),s}async borrowWithReferral(t,e,n,o,r,i){let s=new I,c=await W({builder:this.builder,txBlock:s}),l=await E({builder:this.builder,txBlock:s}),d=await ea({builder:this.builder,txBlock:s}),u=i||this.params.walletAddress;s.setSender(u);let p=ft.includes(t);p&&await l.unstakeObligationQuick(n,o);let m=d.claimReferralTicket(t),b=await c.borrowWithReferralQuick(e,t,m,n,o);return d.burnReferralTicket(m,t),s.transferObjects([b],u),p&&r?await l.stakeObligationWithVeScaQuick(n,o,r):await l.stakeObligationQuick(n,o),s}async repay(t,e,n,o,r){let i=new I,s=await W({builder:this.builder,txBlock:i}),c=await E({builder:this.builder,txBlock:i}),l=r||this.params.walletAddress;i.setSender(l);let d=ft.includes(t);return d&&await c.unstakeObligationQuick(n,o),await s.repayQuick(e,t,n,l),d&&await c.stakeObligationQuick(n,o),i}async repayWithBoost(t,e,n,o,r){let i=new I,s=await W({builder:this.builder,txBlock:i}),c=await E({builder:this.builder,txBlock:i}),l=r||this.params.walletAddress;i.setSender(l);let d=ft.includes(t);return d&&await c.unstakeObligationQuick(n,void 0),await s.repayQuick(e,t,n,l),d&&await c.stakeObligationWithVeScaQuick(n,void 0,o),i}async createStakeAccount(t,e){let n=new I,o=await ot({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 I,i=await W({builder:this.builder,txBlock:r}),s=await ot({builder:this.builder,txBlock:r}),c=o||this.params.walletAddress;r.setSender(c);let l=await i.depositQuick(e,t,o),d=this.utils.parseMarketCoinName(t);if(!mt.find(m=>m===d))return r;let u=await this.query.getStakeAccounts(d,c),p=n||(u.length>0?u[0].id:void 0);if(p)await s.stakeQuick(l,d,p);else{let m=s.normalMethod.createStakeAccount(d);await s.stakeQuick(l,d,m),r.transferObjects([m],c)}return r}async unstakeAndWithdraw(t,e,n){let o=new I,r=await W({builder:this.builder,txBlock:o}),i=await ot({builder:this.builder,txBlock:o}),s=this.params.walletAddress,c=[];o.setSender(s);let l=this.utils.parseMarketCoinName(t);for(let d=0;d<n.length;d++){let u=n[d],[p]=await i.unstakeQuick(u.coin,l,u.id);if(p){let m=r.normalMethod.withdraw(p,t);c.push(m)}}if(e>0){let d=await r.withdrawQuick(e,t);c.push(d)}return c.length>1&&o.mergeCoins(c[0],c.slice(1)),o.transferObjects(c,s),o}async stake(t,e,n,o){let r=new I,i=await ot({builder:this.builder,txBlock:r}),s=o||this.params.walletAddress;r.setSender(s);let c=await this.query.getStakeAccounts(t,s),l=n||(c.length>0?c[0].id:void 0);if(l)await i.stakeQuick(e,t,l);else{let d=i.normalMethod.createStakeAccount(t);await i.stakeQuick(e,t,d),r.transferObjects([d],s)}return r}async unstake(t,e,n,o){let r=new I,i=await ot({builder:this.builder,txBlock:r}),s=o||this.params.walletAddress;r.setSender(s);let c=tt.includes(t),l=await i.unstakeQuick(e,t,n,c);return r.transferObjects([l],r.pure(s)),r}async claim(t,e,n,o){let r=new I,i=await ot({builder:this.builder,txBlock:r}),s=await E({builder:this.builder,txBlock:r}),c=o||this.params.walletAddress;r.setSender(c);let l={sui:[],sca:[]};for(let d=0;d<t.length;d++){let{stakeMarketCoinName:u,stakeAccountId:p}=t[d],m=i.normalMethod.claim(p,u);l.sui.push(m)}for(let d=0;d<e.length;d++){let{obligationId:u,obligationKey:p,rewardCoinName:m}=e[d],b=s.normalMethod.claimBorrowIncentive(u,p,m);l[m].push(b)}for(let d=0;d<n.length;d++){let{obligationId:u,obligationKey:p,rewardCoinName:m}=n[d],b=s.normalMethod.oldClaimBorrowIncentive(u,p,m);l[m].push(b)}return l.sui.length>0&&(l.sui.length>1&&r.mergeCoins(l.sui[0],l.sui.slice(1)),r.transferObjects([l.sui[0]],r.pure(c))),l.sca.length>0&&(l.sca.length>1&&r.mergeCoins(l.sca[0],l.sca.slice(1)),r.transferObjects([l.sca[0]],r.pure(c))),r}async stakeObligation(t,e,n){let o=this.builder.createTxBlock(),r=await E({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 E({builder:this.builder,txBlock:o}),i=n||this.params.walletAddress;return o.setSender(i),await r.unstakeObligationQuick(t,e),o}async stakeSca(t,e=!1,n=!1,o,r,i,s,c){let l=new I,d=await ht({builder:this.builder,txBlock:l}),u=await E({builder:this.builder,txBlock:l}),p=c||this.params.walletAddress;l.setSender(p);let m=await this.builder.utils.selectCoinIds(t,ut,p),[b,S]=this.builder.utils.takeAmountFromCoins(l,m,t),C;return s?d.normalMethod.extendLockAmount(s,b):C=d.normalMethod.lockSca(b,i),o&&r&&(e&&(n?u.normalMethod.oldUnstakeObligation(o,r):u.normalMethod.unstakeObligation(o,r)),u.normalMethod.stakeObligationWithVesca(o,r,s||C)),s||l.transferObjects([C,S],p),l}async stakeMoreSca(t,e,n){let o=new I,r=n||this.params.walletAddress;return o.setSender(r),o}async extendStakeScaLockPeriod(t,e,n,o,r=!1,i=!1,s){let c=new I,l=await ht({builder:this.builder,txBlock:c}),d=await E({builder:this.builder,txBlock:c}),u=s||this.params.walletAddress;return c.setSender(u),l.normalMethod.extendLockPeriod(e,t),n&&o&&(r&&(i?d.normalMethod.oldUnstakeObligation(n,o):d.normalMethod.unstakeObligation(n,o)),d.normalMethod.stakeObligationWithVesca(n,o,e)),c}async extendPeriodAndStakeMoreSca(t,e,n,o,r,i=!1,s=!1,c){let l=new I,d=await ht({builder:this.builder,txBlock:l}),u=await E({builder:this.builder,txBlock:l}),p=c||this.params.walletAddress;l.setSender(p);let m=await this.builder.utils.selectCoinIds(t,ut,p),[b,S]=this.builder.utils.takeAmountFromCoins(l,m,t);return d.normalMethod.extendLockPeriod(e,n),d.normalMethod.extendLockAmount(e,b),l.transferObjects([S],p),!o||!r||(i&&(s?u.normalMethod.oldUnstakeObligation(o,r):u.normalMethod.unstakeObligation(o,r)),u.normalMethod.stakeObligationWithVesca(o,r,e)),l}async renewExpiredStakeSca(t,e,n,o=!1,r,i,s=!1,c=!1,l){let d=new I,u=await ht({builder:this.builder,txBlock:d}),p=await E({builder:this.builder,txBlock:d}),m=l||this.params.walletAddress;if(d.setSender(m),o){let x=u.normalMethod.redeemSca(n);d.transferObjects([x],m)}let b=await this.builder.utils.selectCoinIds(t,ut,m),[S,C]=this.builder.utils.takeAmountFromCoins(d,b,t);return d.transferObjects([C],m),u.normalMethod.renewExpiredVeSca(n,S,e),!r||!i||(s&&(c?p.normalMethod.oldUnstakeObligation(r,i):p.normalMethod.unstakeObligation(r,i)),p.normalMethod.stakeObligationWithVesca(r,i,n)),d}async redeemSca(t){let e=new I,n=await ht({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 I,i=await E({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 I,o=await ht({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 Ys(t.weightedAmount),r=e.currentPointIndex?Ys(e.currentPointIndex-t.index).dividedBy(1e9):1;return n.multipliedBy(r).plus(t.points).shiftedBy(-1*e.coinDecimal)}async createReferralLink(){let t=new I,e=await ht({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 I,o=await Ks({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 I,n=await ea({builder:this.builder,txBlock:e}),o=this.params.walletAddress;return e.setSender(o),n.bindToReferral(t),e}async migrateAllMarketCoin(){let t=new I,e=await gt({builder:this.builder,txBlock:t}),n=await ot({builder:this.builder,txBlock:t});t.setSender(this.params.walletAddress);let o=[];return await Promise.all(tt.map(async r=>{let i=[],s;try{let c=await this.utils.selectCoinIds(Number.MAX_SAFE_INTEGER,this.utils.parseMarketCoinType(r),this.params.walletAddress),l=c[0];c.length>1&&t.mergeCoins(l,c.slice(1)),s=l}catch(c){if(!c.toString().includes("No valid coins found for the transaction"))throw c}if(s){let c=e.mintSCoin(r,s);try{let l=await this.utils.selectCoinIds(Number.MAX_SAFE_INTEGER,this.utils.parseSCoinType(r),this.params.walletAddress);t.mergeCoins(c,l)}catch(l){console.log(l)}i.push(c)}if(mt.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 I,s=await W({builder:this.builder,txBlock:i}),c=await ot({builder:this.builder,txBlock:i}),l=this.params.walletAddress,d=[],u=this.utils.parseMarketCoinName(t),p=this.utils.parseMarketCoinType(u),b=(await this.utils.selectCoinsMarketCoin(p,l)).map(B=>B.objectId);i.setSender(l);for(let B=0;B<r.length;B++){let K=r[B],[F]=await c.unstakeQuick(K.coin,u,K.id);if(F){b.length>0&&i.mergeCoins(F,b);let bc=s.normalMethod.withdraw(F,t);d.push(bc)}}if(e>0){let B=await s.withdrawQuick(e,t);d.push(B)}d.length>1&&i.mergeCoins(d[0],d.slice(1));let[S]=i.splitCoins(d[0],[i.pure(o)]);i.transferObjects([d[0]],l);let{swapResult:C,accountCap:x}=await this.deepbookSwap.swapToken({baseCoinName:"wusdc",quoteCoinName:"usdc",tokenObjectIn:S,tx:i});typeof x=="string"&&i.transferObjects([x],l),Vs.check_slippage(i,C,n,o,this.query.utils.parseCoinType("usdc"));let U=s.normalMethod.deposit(C,"usdc");return await c.stakeQuick(U,"susdc"),i}};var ge=class{params;client;builder;query;utils;address;constructor(t){this.params=t,this.address=t.address}async init(){this.address||(this.address=new Ko({id:hs})),await this.address.read(),this.client=new aa(this.params,this.address);let{builder:t,query:e,utils:n}=this.client;this.builder=t,this.query=e,this.utils=n}};var ra=class{application="scallop";supportSDK="@mysten/sui.js";scallop;async deserialize(t){this.scallop||(this.scallop=new ge({client:t.suiClient,walletAddress:t.account.address}),await this.scallop.init());let{transactionBlock:e}=t;console.log("transactionBlock",e);let n=new fo(e,this.scallop),o=new bo(e,this.scallop),r=new go(e,this.scallop),i=n.decode()||o.decode()||r.decode();if(!i)throw new Error("Unknown transaction type");return{txType:Eu.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 ge({client:t.suiClient,walletAddress:t.account.address}),await this.scallop.init());let s;switch(r){case"SupplyLending":s=Oo.fromData(i);break;case"WithdrawLending":s=Bo.fromData(i);break;case"Borrow":s=ho.fromData(i);break;case"Repay":s=xo.fromData(i);break;case"DepositCollateral":s=Co.fromData(i);break;case"WithdrawCollateral":s=_o.fromData(i);break;case"OpenObligation":s=Do.fromData(i);break;case"StakeSpool":s=Ao.fromData(i);break;case"UnstakeSpool":s=Po.fromData(i);break;case"ClaimIncentiveReward":s=wo.fromData(i);break;case"BorrowWithBoost":s=yo.fromData(i);break;case"StakeSca":s=Fo.fromData(i);break;case"ExtendStakePeriod":s=Wo.fromData(i);break;case"ExtendPeriodAndStakeMore":s=Eo.fromData(i);break;case"RenewExpStakePeriod":s=Uo.fromData(i);break;case"WithdrawStakedSca":s=$o.fromData(i);break;case"SupplyAndStakeLending":s=qo.fromData(i);break;case"WithdrawAndUnstakeLending":s=Ro.fromData(i);break;case"RedeemSca":s=Lo.fromData(i);break;case"MigrateAndClaim":s=To.fromData(i);break;case"BorrowWithReferral":s=So.fromData(i);break;case"CreateReferralLink":s=No.fromData(i);break;case"ClaimRevenueReferral":s=jo.fromData(i);break;case"BindReferral":s=Mo.fromData(i);break;case"MigrateScoin":s=Io.fromData(i);break;case"RepayWithBoost":s=vo.fromData(i);break;case"MigrateWusdcToUsdc":s=ko.fromData(i);break;default:throw new Error("not implemented")}return s.build({suiClient:e,account:n,network:o,scallop:this.scallop})}};import{TransactionType as sp}from"@msafe/sui3-utils";import{LIQUID_STAKING_INFO_MAP as cp,LstId as lp}from"@suilend/frontend-sui";import{LstClient as dp}from"@suilend/springsui-sdk";import{TransactionType as qr}from"@msafe/sui3-utils";var ia=class{constructor(t,e){this.transaction=t;this.simResult=e}decode(){if(this.isMintTransaction())return this.decodeMint();if(this.isMintAndDepositTransaction())return this.decodeMintAndDeposit();if(this.isRedeemTransaction())return this.decodeRedeem();throw new Error("Unknown transaction type")}get commands(){return this.transaction.getData().commands}getMoveCallCommand(t){return this.commands.find(e=>e.$kind==="MoveCall"&&e.MoveCall.function===t)}hasSuilendDepositTransactionMoveCallCommands(){return!!this.getMoveCallCommand("deposit_liquidity_and_mint_ctokens")&&!!this.getMoveCallCommand("deposit_ctokens_into_obligation")}hasMintTransactionMoveCallCommands(){return!!this.getMoveCallCommand("mint")}isMintTransaction(){return this.hasMintTransactionMoveCallCommands()&&!this.hasSuilendDepositTransactionMoveCallCommands()}isMintAndDepositTransaction(){return this.hasMintTransactionMoveCallCommands()&&this.hasSuilendDepositTransactionMoveCallCommands()}isRedeemTransaction(){return!!this.getMoveCallCommand("redeem")}decodeMint(){let e={MintEvent:this.simResult.events.find(n=>n.type.includes("liquid_staking::MintEvent"))}.MintEvent.parsedJson.event.sui_amount_in;return console.log("Decoder.decodeMint",e),{txType:qr.Other,type:"mint",intentionData:{amount:e}}}decodeMintAndDeposit(){return{txType:qr.Other,type:"mintAndDeposit",intentionData:this.decodeMint().intentionData}}decodeRedeem(){let e={RedeemEvent:this.simResult.events.find(n=>n.type.includes("liquid_staking::RedeemEvent"))}.RedeemEvent.parsedJson.event.lst_amount_in;return console.log("Decoder.decodeRedeem",e),{txType:qr.Other,type:"redeem",intentionData:{amount:e}}}};import{Transaction as Uu}from"@mysten/sui/transactions";import Lu from"sort-keys-recursive";var yt=class{constructor(t){this.data=t}serialize(){return JSON.stringify(Lu(this.data))}};var sa=class a extends yt{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o,lstClient:r,suilendClient:i,obligationOwnerCap:s,obligation:c}=e;console.log("MintIntention.build",n,o,r,i,s,c);let l=new Uu;return r.mintAndRebalanceAndSendToUser(l,o.address,this.data.amount),l}static fromData(e){return console.log("MintIntention.fromData",e),new a(e)}};import{Transaction as Fu}from"@mysten/sui/transactions";var ca=class a extends yt{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o,lstClient:r,suilendClient:i,obligationOwnerCap:s,obligation:c}=e;console.log("MintAndDepositIntention.build",n,o,r,i,s,c);let l=new Fu;return i.depositCoin(o.address,r.mintAndRebalance(l,this.data.amount),r.liquidStakingObject.type,l,s?.id),l}static fromData(e){return console.log("MintAndDepositIntention.fromData",e),new a(e)}};import{Transaction as qu}from"@mysten/sui/transactions";var la=class a extends yt{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o,lstClient:r,suilendClient:i,obligationOwnerCap:s,obligation:c}=e;console.log("RedeemIntention.build",n,o,r,i,s,c);let l=new qu;return await r.redeemAndSendToUser(l,o.address,this.data.amount),l}static fromData(e){return console.log("RedeemIntention.fromData",e),new a(e)}};import{TransactionType as np}from"@msafe/sui3-utils";import{LENDING_MARKET_ID as op,LENDING_MARKET_TYPE as ap,SuilendClient as $r}from"@suilend/sdk";import{phantom as rp}from"@suilend/sdk/_generated/_framework/reified";import{LendingMarket as ip}from"@suilend/sdk/_generated/suilend/lending-market/structs";import{TransactionType as Kt}from"@msafe/sui3-utils";import{fromB64 as Zs,toHEX as tc}from"@mysten/bcs";import{normalizeStructTag as he}from"@mysten/sui/utils";import{maxU64 as Vt}from"@suilend/sdk";import ec from"bignumber.js";var da=class{constructor(t,e){this.transaction=t;this.simResult=e}decode(){if(this.isDepositTransaction())return this.decodeDeposit();if(this.isWithdrawTransaction())return this.decodeWithdraw();if(this.isBorrowTransaction())return this.decodeBorrow();if(this.isRepayTransaction())return this.decodeRepay();if(this.isClaimTransaction())return this.decodeClaim();if(this.isClaimAndDepositTransaction())return this.decodeClaimAndDeposit();throw new Error("Unknown transaction type")}get inputs(){return console.log("XXX this.transaction.getData().inputs",this.transaction.getData().inputs),this.transaction.getData().inputs}get commands(){return console.log("XXX this.transaction.getData().commands",this.transaction.getData().commands),this.transaction.getData().commands}getMoveCallCommand(t){return this.commands.find(e=>e.$kind==="MoveCall"&&e.MoveCall.function===t)}hasDepositTransactionMoveCallCommands(){return!!this.getMoveCallCommand("deposit_liquidity_and_mint_ctokens")&&!!this.getMoveCallCommand("deposit_ctokens_into_obligation")}hasClaimTransactionMoveCallCommands(){return!!this.getMoveCallCommand("claim_rewards")}isDepositTransaction(){return!this.hasClaimTransactionMoveCallCommands()&&this.hasDepositTransactionMoveCallCommands()}isWithdrawTransaction(){return!!this.getMoveCallCommand("withdraw_ctokens")&&!!this.getMoveCallCommand("redeem_ctokens_and_withdraw_liquidity_request")}isBorrowTransaction(){return!!this.getMoveCallCommand("borrow_request")}isRepayTransaction(){return!!this.getMoveCallCommand("repay")}isClaimTransaction(){return this.hasClaimTransactionMoveCallCommands()&&!this.hasDepositTransactionMoveCallCommands()}isClaimAndDepositTransaction(){return this.hasClaimTransactionMoveCallCommands()&&this.hasDepositTransactionMoveCallCommands()}decodeDeposit(){let t={MintEvent:this.simResult.events.find(o=>o.type.includes("lending_market::MintEvent"))},e=he(t.MintEvent.parsedJson.coin_type.name),n=t.MintEvent.parsedJson.liquidity_amount;return console.log("Decoder.decodeDeposit",e,n),{txType:Kt.Other,type:"deposit",intentionData:{coinType:e,value:n}}}decodeWithdraw(){let t={withdraw_ctokens:this.getMoveCallCommand("withdraw_ctokens")},e={RedeemEvent:this.simResult.events.find(c=>c.type.includes("lending_market::RedeemEvent"))},n=he(e.RedeemEvent.parsedJson.coin_type.name),o=e.RedeemEvent.parsedJson.liquidity_amount;console.log("Decoder.decodeWithdraw",n,o);let r=t.withdraw_ctokens.MoveCall.arguments[4].Input,i=new ec(tc(Zs(this.inputs[r].Pure.bytes)),16).toString(),s=i===Vt.toString();return console.log("XXX decodeWithdraw - isMax:",s,"inputIndex:",r,"inputValue:",i,"maxU64.toString():",Vt.toString()),s&&(o=Vt.toString()),{txType:Kt.Other,type:"withdraw",intentionData:{coinType:n,value:o}}}decodeBorrow(){let t={borrow_request:this.getMoveCallCommand("borrow_request")},e={BorrowEvent:this.simResult.events.find(c=>c.type.includes("lending_market::BorrowEvent"))},n=he(e.BorrowEvent.parsedJson.coin_type.name),o=`${+e.BorrowEvent.parsedJson.liquidity_amount-+e.BorrowEvent.parsedJson.origination_fee_amount}`;console.log("Decoder.decodeBorrow",n,o);let r=t.borrow_request.MoveCall.arguments[4].Input,i=new ec(tc(Zs(this.inputs[r].Pure.bytes)),16).toString(),s=i===Vt.toString();return console.log("XXX decodeBorrow - isMax:",s,"inputIndex:",r,"inputValue:",i,"maxU64.toString():",Vt.toString()),s&&(o=Vt.toString()),{txType:Kt.Other,type:"borrow",intentionData:{coinType:n,value:o}}}decodeRepay(){let t={RepayEvent:this.simResult.events.find(o=>o.type.includes("lending_market::RepayEvent"))},e=he(t.RepayEvent.parsedJson.coin_type.name),n=t.RepayEvent.parsedJson.liquidity_amount;return console.log("Decoder.decodeRepay",e,n),{txType:Kt.Other,type:"repay",intentionData:{coinType:e,value:n}}}decodeClaim(){let t={ClaimReward:this.simResult.events.filter(n=>n.type.includes("lending_market::ClaimReward"))},e={};for(let n=0;n<t.ClaimReward.length;n++){let o=t.ClaimReward[n],r=he(o.parsedJson.coin_type.name),i=o.parsedJson.liquidity_amount;e[r]=`${+(e[r]??"0")+ +i}`}return console.log("Decoder.decodeClaimRewards",e),{txType:Kt.Other,type:"claim",intentionData:{value:e}}}decodeClaimAndDeposit(){return{txType:Kt.Other,type:"claimAndDeposit",intentionData:this.decodeClaim().intentionData}}};import{Transaction as Vu}from"@mysten/sui/transactions";import Ku from"sort-keys-recursive";var L=class{constructor(t){this.data=t}serialize(){return JSON.stringify(Ku(this.data))}};var ua=class a extends L{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o,suilendClient:r,obligationOwnerCap:i,obligation:s}=e;if(console.log("BorrowIntention.build",n,o,r,i,s),!i||!s)throw new Error("Obligation not found");let c=new Vu;return await r.borrowAndSendToUser(o.address,i.id,s.id,this.data.coinType,this.data.value,c),c}static fromData(e){return console.log("BorrowIntention.fromData",e),new a(e)}};import{Transaction as Xu}from"@mysten/sui/transactions";import{normalizeStructTag as Gu}from"@mysten/sui/utils";import{Side as ye}from"@suilend/sdk";import zu from"bignumber.js";import{normalizeStructTag as nc}from"@mysten/sui/utils";var Qu="0x34fe4f3c9e450fed4d0a3c587ed842eec5313c30c3cc3c0841247c49425e246b::suilend_point::SUILEND_POINT",Hu=nc(Qu),oc=a=>nc(a)===Hu;var Ju=(a,t)=>{let e={[ye.DEPOSIT]:[],[ye.BORROW]:[]};return a.lendingMarket.reserves.forEach(n=>{[ye.DEPOSIT,ye.BORROW].forEach(o=>{let r=o===ye.DEPOSIT?n.depositsPoolRewardManager:n.borrowsPoolRewardManager,i=t.userRewardManagers.find(s=>s.poolRewardManagerId===r.id);i&&(e[o]=r.poolRewards.map((s,c)=>({reserveArrayIndex:n.arrayIndex,rewardIndex:BigInt(c),rewardCoinType:Gu(s.coinType.name),side:o})).filter(s=>!oc(s.rewardCoinType)&&!!i.rewards[Number(s.rewardIndex)]&&new zu(i.rewards[Number(s.rewardIndex)].earnedRewards.value.toString()).gt(0)))})}),Object.values(e).flat()},pa=Ju;var ma=class a extends L{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o,suilendClient:r,obligationOwnerCap:i,obligation:s}=e;if(console.log("ClaimIntention.build",n,o,r,i,s),!i||!s)throw new Error("Obligation not found");let c=new Xu;return r.claimRewardsAndSendToUser(o.address,i.id,pa(r,s),c),c}static fromData(e){return console.log("ClaimIntention.fromData",e),new a(e)}};import{Transaction as Yu}from"@mysten/sui/transactions";var fa=class a extends L{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o,suilendClient:r,obligationOwnerCap:i,obligation:s}=e;if(console.log("ClaimAndDepositIntention.build",n,o,r,i,s),!i||!s)throw new Error("Obligation not found");let c=new Yu;return r.claimRewardsAndDeposit(o.address,i.id,pa(r,s),c),c}static fromData(e){return console.log("ClaimAndDepositIntention.fromData",e),new a(e)}};import{Transaction as Zu}from"@mysten/sui/transactions";var ba=class a extends L{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o,suilendClient:r,obligationOwnerCap:i,obligation:s}=e;console.log("DepositIntention.build",n,o,r,i,s);let c=new Zu;return await r.depositIntoObligation(o.address,this.data.coinType,this.data.value,c,i?.id),c}static fromData(e){return console.log("DepositIntention.fromData",e),new a(e)}};import{Transaction as tp}from"@mysten/sui/transactions";var ga=class a extends L{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o,suilendClient:r,obligationOwnerCap:i,obligation:s}=e;if(console.log("RepayIntention.build",n,o,r,i,s),!i||!s)throw new Error("Obligation not found");let c=new tp;return await r.repayIntoObligation(o.address,s.id,this.data.coinType,this.data.value,c),c}static fromData(e){return console.log("RepayIntention.fromData",e),new a(e)}};import{Transaction as ep}from"@mysten/sui/transactions";var ha=class a extends L{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o,suilendClient:r,obligationOwnerCap:i,obligation:s}=e;if(console.log("WithdrawIntention.build",n,o,r,i,s),!i||!s)throw new Error("Obligation not found");let c=new ep;return await r.withdrawAndSendToUser(o.address,i.id,s.id,this.data.coinType,this.data.value,c),c}static fromData(e){return console.log("WithdrawIntention.fromData",e),new a(e)}};var ya=async(a,t)=>{let e=await $r.initializeWithLendingMarket(await ip.fetch(a,rp(ap),op),a),n=await $r.getObligationOwnerCaps(t.address,e.lendingMarket.$typeArgs,a),o=await Promise.all(n.map(r=>$r.getObligation(r.obligationId,e.lendingMarket.$typeArgs,a)));return{suilendClient:e,obligationOwnerCaps:n,obligations:o}},Sa=class{application="Suilend";supportSDK="@mysten/sui";utils;async deserialize(t){let{transaction:e,suiClient:n,account:o}=t;this.utils||(this.utils=await ya(n,o));let r=await n.devInspectTransactionBlock({sender:o.address,transactionBlock:e});console.log("SuilendAppHelper.deserialize",r);let s=new da(e,r).decode();return{txType:np.Other,txSubType:s.type,intentionData:s.intentionData}}async build(t){let{network:e,txSubType:n,intentionData:o,suiClient:r,account:i}=t;this.utils||(this.utils=await ya(r,i));let s;switch(n){case"deposit":s=ba.fromData(o);break;case"withdraw":s=ha.fromData(o);break;case"borrow":s=ua.fromData(o);break;case"repay":s=ga.fromData(o);break;case"claim":s=ma.fromData(o);break;case"claimAndDeposit":s=fa.fromData(o);break;default:throw new Error("not implemented")}let c=window.localStorage.getItem("obligationId"),l=this.utils.obligations?.find(u=>u.id===c)??this.utils.obligations?.[0],d=this.utils.obligationOwnerCaps?.find(u=>u.obligationId===l?.id);return console.log("XXX obligationId:",c,"obligations:",this.utils.obligations,"obligationOwnerCaps:",this.utils.obligationOwnerCaps),s.build({network:e,suiClient:r,account:i,suilendClient:this.utils.suilendClient,obligationOwnerCap:d,obligation:l})}};var ac=async(a,t)=>{let e=await dp.initialize(a,cp[lp.sSUI]),n=await ya(a,t);return{lstClient:e,...n}},wa=class{application="SpringSui";supportSDK="@mysten/sui";utils;async deserialize(t){let{transaction:e,suiClient:n,account:o}=t;this.utils||(this.utils=await ac(n,o));let r=await n.devInspectTransactionBlock({sender:o.address,transactionBlock:e});console.log("SpringSuiAppHelper.deserialize",r);let s=new ia(e,r).decode();return{txType:sp.Other,txSubType:s.type,intentionData:s.intentionData}}async build(t){let{network:e,txSubType:n,intentionData:o,suiClient:r,account:i}=t;this.utils||(this.utils=await ac(r,i));let s;switch(n){case"mint":s=sa.fromData(o);break;case"mintAndDeposit":s=ca.fromData(o);break;case"redeem":s=la.fromData(o);break;default:throw new Error("not implemented")}return s.build({network:e,suiClient:r,account:i,lstClient:this.utils.lstClient,suilendClient:this.utils.suilendClient,obligationOwnerCap:this.utils.obligationOwnerCaps?.[0],obligation:this.utils.obligations?.[0]})}};import{TransactionType as Rp}from"@msafe/sui3-utils";import{TurbosSdk as _p}from"turbos-clmm-sdk";import{TransactionType as H}from"@msafe/sui3-utils";import{bcs as rc}from"@mysten/sui.js/bcs";import{normalizeStructTag as pp,normalizeSuiAddress as Se}from"@mysten/sui.js/utils";import{BN as mp}from"turbos-clmm-sdk";var G={PackageId:"0x02fe4933f4521250e55a15441096d1d4a38a7311195b0bca126fc0138c1f5a97",Claim:"0x0c822cec42f7ca703696b4232f1c47b348330c23580172a29aab465bc071d894",turbosCoinType:"0x5d1f47ea69bb0de31c313d7acf89b890dbb8991ea8e03c6c355171f84bb1ba4a::turbos::TURBOS"},z={PackageId:"0xdee9"};var fp=(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}`)}},Ca=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(`${G.PackageId}::claim::join`)}isPrixClaimTransaction(){return!!this.getMoveCallTransaction(`${G.PackageId}::claim::claim`)}isRemoveLiquidityTransaction(){return!!this.getMoveCallsTransaction([`${this.config.PackageId}::position_manager::decrease_liquidity`,`${this.config.PackageId}::position_manager::burn`])}isSwapExactBaseForQuoteTransaction(){return!!this.getMoveCallTransaction(`${z.PackageId}::clob_v2::swap_exact_base_for_quote`)}isSwapExactQuoteForBaseTransaction(){return!!this.getMoveCallTransaction(`${z.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=fp(e,t.target,this.swap1Layer,this.swap2Layer),o=n.map((m,b)=>{let S=this.helper.decodeSharedObjectId(b),C=this.helper.decodeInputU128(4+b+e),x=this.turbosSdk.math.sqrtPriceX64ToTickIndex(new mp(C.toString()));return{pool:S,a2b:m,nextTickIndex:x}}),r=n[0]||e===1?t.typeArguments[0]:t.typeArguments[1],i=e===1?t.typeArguments[4]:n[0]?t.typeArguments[1]:t.typeArguments[0],s=this.helper.decodeInputAddress(6+2*e),c=this.helper.decodeInputU64(7+2*e),l=this.helper.decodeInputBool(5+2*e),d=this.helper.decodeInputU64(2+e),u=this.helper.decodeInputU64(3+e),p=await this.turbosSdk.trade.computeSwapResultV2({pools:[{pool:o[0].pool,a2b:o[0].a2b,amountSpecified:d}],address:s,amountSpecifiedIsInput:l});return{txType:H.Other,type:"Swap",intentionData:{routes:o,coinTypeA:r,coinTypeB:i,address:s,amountA:l?d:u,amountB:l?u:d,amountSpecifiedIsInput:l,slippage:"0.1",deadline:c}}}decodeAddLiquidity(){console.log(this.helper,"decodeAddLiquidity this.helper");let t=this.helper.decodeSharedObjectId(0),e=this.helper.decodeInputAddress(12),n=this.helper.decodeInputU64(8),o=this.helper.decodeInputU64(9),r=this.helper.decodeInputU32(4),i=this.helper.decodeInputBool(5),s=this.helper.decodeInputU32(6),c=this.helper.decodeInputBool(7),l=this.helper.decodeInputU64(13);return{txType:H.Other,type:"AddLiquidity",intentionData:{pool:t,slippage:10,address:e,amountA:n,amountB:o,tickLower:i?-r:r,tickUpper:c?-s:s,deadline:l}}}decodeIncreaseLiquidity(t){console.log(this.helper,"decodeIncreaseLiquidity this.helper");let e=this.helper.decodeSharedObjectId(0),n=this.helper.decodeSharedObjectId(4),o=this.helper.decodeInputU64(5),r=this.helper.decodeInputU64(6),i=this.helper.decodeInputU64(9);return{txType:H.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:H.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:H.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:H.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:H.Other,type:"Burn",intentionData:{pool:t,nft:e}}}decodeRemoveLiquidity(t){console.log(this.helper,"decodeRemoveLiquidity this.helper");let e=this.decreaseLiquidityHelper.decodeSharedObjectId(0),n=this.decreaseLiquidityHelper.decodeSharedObjectId(2),o=this.decreaseLiquidityHelper.decodeInputU64(3),r=this.decreaseLiquidityHelper.decodeInputU64(4),i=this.decreaseLiquidityHelper.decodeInputU64(5),s=this.decreaseLiquidityHelper.decodeInputU64(6),c=this.collectRewardHelper.map(u=>u.decodeInputU64(5)),l=this.collectFeeHelper.decodeInputU64(3)||0,d=this.collectFeeHelper.decodeInputU64(4)||0;return{txType:H.Other,type:"RemoveLiquidity",intentionData:{pool:e,decreaseLiquidity:o,nft:n,amountA:r,amountB:i,slippage:10,address:t,collectAmountA:l,collectAmountB:d,rewardAmounts:c,deadline:s}}}decodePrixClaim(){return{txType:H.Other,type:"PrixClaim",intentionData:{}}}decodePrixJoin(){return{txType:H.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:H.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:H.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 St(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 St(e,this.txb))}get collectFeeHelper(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target===`${this.config.PackageId}::position_manager::collect`);return new St(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 St(t,this.txb)}get swapExactBaseForQuoteHelper(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target===`${z.PackageId}::clob_v2::swap_exact_base_for_quote`);return new St(t,this.txb)}get swapExactQuoteForBaseHelper(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target===`${z.PackageId}::clob_v2::swap_exact_quote_for_base`);return new St(t,this.txb)}},St=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 Se(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 rc.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 Se(t.value.Object.ImmOrOwned.objectId)}return Se(t.value)}static getSharedObjectId(t){if(t.type!=="object")throw new Error(`not object argument: ${JSON.stringify(t)}`);if(typeof t.value!="object")return Se(t.value);if(!("Object"in t.value)||!("Shared"in t.value.Object))throw new Error("not Shared");return Se(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 rc.de(e,new Uint8Array(n))}typeArg(t){return pp(this.moveCall.typeArguments[t])}shortTypeArg(t){return this.moveCall.typeArguments[t]}txArg(t){return this.moveCall.arguments[t]}};import{TurbosSdk as bp}from"turbos-clmm-sdk";var Ta=class a extends y{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new bp(e.network.replace("sui:",""),e.suiClient),{pool:o,address:r,amountA:i,amountB:s,slippage:c,tickLower:l,tickUpper:d,deadline:u,txb:p}=this.data;return n.pool.addLiquidity({pool:o,slippage:c,address:r,amountA:i,amountB:s,tickLower:l,tickUpper:d,deadline:u,txb:p})}static fromData(e){return new a(e)}};import{TurbosSdk as gp}from"turbos-clmm-sdk";var Ia=class a extends y{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new gp(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 hp}from"turbos-clmm-sdk";var ka=class a extends y{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new hp(e.network.replace("sui:",""),e.suiClient),{pool:o,address:r,nft:i,collectAmountA:s,collectAmountB:c,deadline:l,txb:d}=this.data;return n.pool.collectFee({pool:o,address:r,collectAmountA:s,collectAmountB:c,nft:i,deadline:l,txb:d})}static fromData(e){return new a(e)}};import{TurbosSdk as yp}from"turbos-clmm-sdk";var Da=class a extends y{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new yp(e.network.replace("sui:",""),e.suiClient),{pool:o,address:r,nft:i,rewardAmounts:s,deadline:c,txb:l}=this.data;return n.pool.collectReward({pool:o,address:r,rewardAmounts:s,nft:i,deadline:c,txb:l})}static fromData(e){return new a(e)}};import{TurbosSdk as Sp}from"turbos-clmm-sdk";var xa=class a extends y{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new Sp(e.network.replace("sui:",""),e.suiClient),{fee:o,address:r,tickLower:i,tickUpper:s,sqrtPrice:c,slippage:l,coinTypeA:d,coinTypeB:u,amountA:p,amountB:m,deadline:b,txb:S}=this.data;return n.pool.createPool({fee:o,amountA:p,amountB:m,address:r,tickLower:i,tickUpper:s,sqrtPrice:c,slippage:l,coinTypeA:d,coinTypeB:u,deadline:b,txb:S})}static fromData(e){return new a(e)}};import{TurbosSdk as wp}from"turbos-clmm-sdk";var va=class a extends y{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new wp(e.network.replace("sui:",""),e.suiClient),{pool:o,address:r,amountA:i,amountB:s,slippage:c,nft:l,decreaseLiquidity:d,deadline:u,txb:p}=this.data;return n.pool.decreaseLiquidity({pool:o,slippage:c,address:r,amountA:i,amountB:s,nft:l,decreaseLiquidity:d,deadline:u,txb:p})}static fromData(e){return new a(e)}};import{TurbosSdk as Cp}from"turbos-clmm-sdk";var Aa=class a extends y{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new Cp(e.network.replace("sui:",""),e.suiClient),{pool:o,address:r,amountA:i,amountB:s,slippage:c,nft:l,deadline:d,txb:u}=this.data;return n.pool.increaseLiquidity({pool:o,slippage:c,address:r,amountA:i,amountB:s,nft:l,deadline:d,txb:u})}static fromData(e){return new a(e)}};import{TransactionBlock as Tp}from"@mysten/sui.js/transactions";import{SUI_CLOCK_OBJECT_ID as Ip}from"@mysten/sui.js/utils";var Oa=class a extends y{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new Tp;return n.moveCall({target:`${G.PackageId}::claim::claim`,typeArguments:[G.turbosCoinType],arguments:[n.object(G.Claim),n.object(Ip)]}),n}static fromData(e){return new a(e)}};import{TransactionBlock as kp}from"@mysten/sui.js/transactions";var Pa=class a extends y{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new kp;return n.moveCall({target:`${G.PackageId}::claim::join`,typeArguments:[G.turbosCoinType],arguments:[n.object(G.Claim)]}),n}static fromData(e){return new a(e)}};import{TransactionBlock as Dp}from"@mysten/sui.js/transactions";import{TurbosSdk as xp}from"turbos-clmm-sdk";var Ra=class a extends y{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new xp(e.network.replace("sui:",""),e.suiClient),o=new Dp;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 vp}from"turbos-clmm-sdk";var _a=class a extends y{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){console.log(this.data,"this.data");let n=new vp(e.network.replace("sui:",""),e.suiClient),{routes:o,coinTypeA:r,coinTypeB:i,address:s,amountA:c,amountB:l,slippage:d,amountSpecifiedIsInput:u,deadline:p,txb:m}=this.data;return n.trade.swap({routes:o,coinTypeA:r,coinTypeB:i,address:s,amountA:c,amountB:l,amountSpecifiedIsInput:u,slippage:d,deadline:p,txb:m})}static fromData(e){return new a(e)}};import{TurbosSdk as Op}from"turbos-clmm-sdk";import{normalizeSuiObjectId as ic}from"@mysten/sui.js/utils";import{TransactionBlock as sc}from"@mysten/sui.js/transactions";import{unstable_getObjectId as Ap}from"turbos-clmm-sdk";var we=class{constructor(t){this.turbosSdk=t}async getCoinsData(t,e,n){let o=[],r;do r=await this.turbosSdk.provider.getCoins({owner:t,coinType:e,cursor:r?.nextCursor}),o.push(...r.data);while(r.hasNextPage);let i=[],s=0;return o.sort((c,l)=>Number(l.balance)-Number(c.balance)).some(c=>s>=n?!0:(s+=Number(c.balance),i.push(c),!1)),i}splitAndMergeCoin(t,e,n){if(!t||t.length<1)return[void 0,void 0];if(this.isSuiCoinAddress(t[0].coinType)){let[i]=n.splitCoins(n.gas,[n.pure(e)]);return[i,void 0]}let o=n.object(t[0].coinObjectId);t.length>1&&n.mergeCoins(o,t.slice(1).map(i=>n.object(i.coinObjectId)));let[r]=n.splitCoins(o,[n.pure(e)]);return[r,o]}isSuiCoinAddress(t){return t.toLocaleLowerCase()==="0x2::sui::sui"}async IsAccountCap(t){let e=await this.turbosSdk.provider.getOwnedObjects({owner:t,options:{showContent:!0,showType:!0,showOwner:!0},filter:{StructType:`${z.PackageId}::custodian_v2::AccountCap`}});return e.data[0]?.data?Ap(e.data[0].data):void 0}createAccount(t){let[e]=t.moveCall({typeArguments:[],target:`${z.PackageId}::clob_v2::create_account`,arguments:[]});return e}zero(t,e){return e.moveCall({typeArguments:[t],target:"0x2::coin::zero",arguments:[]})}};var cc=89,lc=1e6,dc=async a=>{let{token1:t,token2:e,poolId:n,amountIn:o,currentAddress:r,turbosSdk:i}=a,s=new sc,c=new we(i),l=await c.getCoinsData(r,e,o),[d,u]=c.splitAndMergeCoin(l,o,s);if(!d)throw new Error(`Not enough balance: ${e}`);let p=await c.IsAccountCap(r),m=p?s.object(p):c.createAccount(s),[b,S,C]=s.moveCall({typeArguments:[t,e],target:`${z.PackageId}::clob_v2::swap_exact_quote_for_base`,arguments:[s.object(String(n)),s.pure(cc),m,s.pure(o),s.object(ic("0x6")),d]});return u&&s.transferObjects([u],s.pure(r)),s.transferObjects([b],s.pure(r)),s.transferObjects([S],s.pure(r)),p||s.transferObjects([m],s.pure(r)),s.setSenderIfNotSet(r),s.setGasBudget(lc),s},uc=async a=>{let{token1:t,token2:e,poolId:n,amountIn:o,currentAddress:r,turbosSdk:i}=a,s=new sc,c=new we(i),l=await c.getCoinsData(r,t,o),[d,u]=c.splitAndMergeCoin(l,o,s);if(!d)throw new Error(`Not enough balance: ${t}`);let p=await c.IsAccountCap(r),m=p?s.object(p):c.createAccount(s),b=c.zero(e,s),[S,C,x]=s.moveCall({typeArguments:[t,e],target:`${z.PackageId}::clob_v2::swap_exact_base_for_quote`,arguments:[s.object(String(n)),s.pure(cc),m,s.pure(o),d,b,s.object(ic("0x6"))]});return u&&s.transferObjects([u],s.pure(r)),s.transferObjects([S],s.pure(r)),s.transferObjects([C],s.pure(r)),p||s.transferObjects([m],s.pure(r)),s.setSenderIfNotSet(r),s.setGasBudget(lc),s};var Ba=class a extends y{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new Op(e.network.replace("sui:",""),e.suiClient);return await uc({...this.data,turbosSdk:n,currentAddress:e.account.address})}static fromData(e){return new a(e)}};import{TurbosSdk as Pp}from"turbos-clmm-sdk";var Ma=class a extends y{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new Pp(e.network.replace("sui:",""),e.suiClient);return await dc({...this.data,turbosSdk:n,currentAddress:e.account.address})}static fromData(e){return new a(e)}};var ja=class{application="turbos";supportSDK="@mysten/sui.js";async deserialize(t){let e=new _p(t.network.replace("sui:",""),t.suiClient),n=await e.contract.getConfig(),{transactionBlock:o,account:r}=t;console.log(t,"input");let s=await new Ca(o,e,n).decode(r.address);return{txType:Rp.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=xa.fromData(t.intentionData);break;case"AddLiquidity":r=Ta.fromData(t.intentionData);break;case"IncreaseLiquidity":r=Aa.fromData(t.intentionData);break;case"DecreaseLiquidity":r=va.fromData(t.intentionData);break;case"RemoveLiquidity":r=Ra.fromData(t.intentionData);break;case"CollectFee":r=ka.fromData(t.intentionData);break;case"CollectReward":r=Da.fromData(t.intentionData);break;case"Burn":r=Ia.fromData(t.intentionData);break;case"Swap":r=_a.fromData(t.intentionData);break;case"PrixJoin":r=Pa.fromData(t.intentionData);break;case"PrixClaim":r=Oa.fromData(t.intentionData);break;case"SwapExactBaseForQuote":r=Ba.fromData(t.intentionData);break;case"SwapExactQuoteForBase":r=Ma.fromData(t.intentionData);break;default:throw new Error("not implemented")}return r.build({suiClient:e,account:n,network:o})}};import{TransactionType as Lp}from"@msafe/sui3-utils";import{TransactionType as Kr}from"@msafe/sui3-utils";import{bcs as pc}from"@mysten/sui.js/bcs";import{normalizeStructTag as jp,normalizeSuiAddress as Ce}from"@mysten/sui.js/utils";var Bp={packageId:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55",poolObjectId:"0x7fa2faa111b8c65bea48a23049bfd81ca8f971a262d981dcd9a17c3825cb5baf",metadataObjectId:"0x680cd26af32b2bde8d3361e804c53ec1d1cfe24c7f039eb7f549e8dfde389a60",systemStateObjectId:"0x0000000000000000000000000000000000000000000000000000000000000005",certType:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55::cert::CERT",gasBudget:5e7},A=Bp;var Na=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(`${A.packageId}::native_pool::stake`)}isUnStakeTransaction(){return!!this.getMoveCallTransaction(`${A.packageId}::native_pool::unstake`)}isClaimTicketTransaction(){return!!this.getMoveCallTransaction(`${A.packageId}::native_pool::burn_ticket`)}decodeStake(){let t=this.transactions[0].amounts[0].value.toNumber();return{txType:Kr.Other,type:"Stake",intentionData:{amount:t}}}decodeUnStake(){let e=this.transactions.find(n=>n.kind==="SplitCoins").amounts[0].value.toNumber();return{txType:Kr.Other,type:"UnStake",intentionData:{amount:e}}}decodeClaimTicket(){let t=this.helper.decodeOwnedObjectId(2);return console.log(t),{txType:Kr.Other,type:"ClaimTicket",intentionData:{ticketId:t}}}get helper(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(A.packageId));return new Vr(t,this.txb)}},Vr=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 pc.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 pc.de(e,new Uint8Array(n))}typeArg(t){return jp(this.moveCall.typeArguments[t])}txArg(t){return this.moveCall.arguments[t]}};import{TransactionBlock as Np}from"@mysten/sui.js/transactions";var Ea=class a extends y{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){console.log(e);let n=new Np,{ticketId:o}=this.data;return n.moveCall({target:`${A.packageId}::native_pool::burn_ticket`,arguments:[n.object(A.poolObjectId),n.object(A.systemStateObjectId),n.object(o)]}),n}static fromData(e){return new a(e)}};import{TransactionBlock as Ep}from"@mysten/sui.js/transactions";var Wa=class a extends y{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){console.log(e);let n=new Ep,{amount:o}=this.data,[r]=n.splitCoins(n.gas,[n.pure(o)]);return n.moveCall({target:`${A.packageId}::native_pool::stake`,arguments:[n.object(A.poolObjectId),n.object(A.metadataObjectId),n.object(A.systemStateObjectId),r]}),n}static fromData(e){return new a(e)}};import{TransactionBlock as Wp}from"@mysten/sui.js/transactions";var La=class a extends y{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){console.log(e);let n=new Wp,{amount:o}=this.data,r=(await e.suiClient.getAllCoins({owner:e.account.address,limit:100})).data,[i,...s]=r.filter(d=>d.coinType.split("::")[0]===A.certType.split("::")[0]),c=n.object(i.coinObjectId);s.length&&n.mergeCoins(c,s.map(d=>n.object(d.coinObjectId)));let l=n.splitCoins(n.object(i.coinObjectId),[n.pure(o)]);return n.moveCall({target:`${A.packageId}::native_pool::unstake`,arguments:[n.object(A.poolObjectId),n.object(A.metadataObjectId),n.object(A.systemStateObjectId),l]}),n}static fromData(e){return new a(e)}};var Ua=class{application="volo";supportSDK="@mysten/sui.js";async deserialize(t){let{transactionBlock:e}=t,o=new Na(e).decode();return{txType:Lp.Other,txSubType:o.type,intentionData:o.intentionData}}async build(t){let{suiClient:e,account:n}=t,o;switch(t.txSubType){case"Stake":o=Wa.fromData(t.intentionData);break;case"UnStake":o=La.fromData(t.intentionData);break;case"ClaimTicket":o=Ea.fromData(t.intentionData);break;default:throw new Error("not implemented")}return o.build({suiClient:e,account:n})}};import{TransactionType as Jp}from"@msafe/sui3-utils";import{asIntN as mc}from"@cetusprotocol/cetus-sui-clmm-sdk";import{TransactionType as Dt}from"@msafe/sui3-utils";import{fromB64 as Te}from"@mysten/bcs";import{bcs as Ie}from"@mysten/sui/bcs";var Fa=class{constructor(t){this.transaction=t}decode(){if(this.isOpenPositionTx())return this.decodeOpenPositionTx();if(this.isClosePositionTx())return this.decodeClosePositionTx();if(this.isProvideLiquidityTx())return this.decodeProvideLiquidityTx();if(this.isRemoveLiquidityTx())return this.decodeRemoveLiquidityTx();if(this.isCollectRewardsAndFeeTx())return this.decodeCollectRewardsAndFeeTx();if(this.isCollectRewardsTx())return this.decodeCollectRewardsTx();if(this.isCollectFeeTx())return this.decodeCollectFeeTx();throw new Error("Unknown transaction type")}decodeOpenPositionTx(){let t=this.getMoveCallCommand("open_position"),e=this.getMoveCallCommand("provide_liquidity_with_fixed_amount");return{txType:Dt.Other,type:"OpenPosition",intentionData:{pool:this.getSharedObjectID(this.getInputIndex(t,1)),lowerTick:Number(mc(BigInt(this.getU32(this.getInputIndex(t,2)))).toString()),upperTick:Number(mc(BigInt(this.getU32(this.getInputIndex(t,3)))).toString()),tokenAmount:this.getU64(this.getInputIndex(e,6)),maxAmountTokenA:this.getU64(this.getInputIndex(e,7)),maxAmountTokenB:this.getU64(this.getInputIndex(e,8)),isTokenAFixed:this.getBoolean(this.getInputIndex(e,9))}}}decodeClosePositionTx(){let t=this.getMoveCallCommand("close_position"),e=this.getCollectRewardCallData();return{txType:Dt.Other,type:"ClosePosition",intentionData:{pool:this.getSharedObjectID(this.getInputIndex(t,2)),position:this.getOwnedObjectID(this.getInputIndex(t,3)),transferTokensTo:this.getAddress(this.getInputIndex(t,4)),collectRewardTokens:e.map(n=>n.rewardCoinType),collectFeeTokens:this.getTypeArguments(t)}}}decodeProvideLiquidityTx(){let t=this.getMoveCallCommand("provide_liquidity_with_fixed_amount");return{txType:Dt.Other,type:"ProvideLiquidity",intentionData:{pool:this.getSharedObjectID(this.getInputIndex(t,2)),position:this.getOwnedObjectID(this.getInputIndex(t,3)),tokenAmount:this.getU64(this.getInputIndex(t,6)),maxAmountTokenA:this.getU64(this.getInputIndex(t,7)),maxAmountTokenB:this.getU64(this.getInputIndex(t,8)),isTokenAFixed:this.getBoolean(this.getInputIndex(t,9))}}}decodeRemoveLiquidityTx(){let t=this.getMoveCallCommand("remove_liquidity");return{txType:Dt.Other,type:"RemoveLiquidity",intentionData:{pool:this.getSharedObjectID(this.getInputIndex(t,2)),position:this.getOwnedObjectID(this.getInputIndex(t,3)),liquidity:this.getU128(this.getInputIndex(t,4)),maxAmountTokenA:this.getU64(this.getInputIndex(t,5)),maxAmountTokenB:this.getU64(this.getInputIndex(t,6)),transferTokensTo:this.getAddress(this.getInputIndex(t,7)),...this.collectTokens()}}}decodeCollectRewardsTx(){let t=this.getCollectRewardCallData();return{txType:Dt.Other,type:"CollectRewards",intentionData:{pool:t[0].pool,position:t[0].position,collectRewardTokens:t.map(e=>e.rewardCoinType)}}}decodeCollectFeeTx(){return{txType:Dt.Other,type:"CollectFee",intentionData:this.getFeeCallData()}}decodeCollectRewardsAndFeeTx(){let t=this.getFeeCallData();return{txType:Dt.Other,type:"CollectRewardsAndFee",intentionData:{pool:t.pool,position:t.position,...this.collectTokens()}}}getFeeCallData(){let t=this.getMoveCallCommand("collect_fee");return{pool:this.getSharedObjectID(this.getInputIndex(t,2)),position:this.getOwnedObjectID(this.getInputIndex(t,3)),collectFeeTokens:this.getTypeArguments(t)}}getCollectRewardCallData(){let t=[];return this.commands.forEach(e=>{e.$kind==="MoveCall"&&e.MoveCall.function==="collect_reward"&&t.push({pool:this.getSharedObjectID(this.getInputIndex(e,2)),position:this.getOwnedObjectID(this.getInputIndex(e,3)),rewardCoinType:this.getTypeArguments(e)[2]})}),t}collectTokens(){let t=this.getFeeCallData(),e=this.getCollectRewardCallData();return{collectFeeTokens:t.collectFeeTokens,collectRewardTokens:e.map(n=>n.rewardCoinType)}}get commands(){return this.transaction.getData().commands}get inputs(){return this.transaction.getData().inputs}isOpenPositionTx(){return!!this.getMoveCallCommand("open_position")}isProvideLiquidityTx(){return!!this.getMoveCallCommand("provide_liquidity_with_fixed_amount")}isRemoveLiquidityTx(){return!!this.getMoveCallCommand("remove_liquidity")}isCollectRewardsTx(){return!!this.getMoveCallCommand("collect_reward")}isCollectFeeTx(){return!!this.getMoveCallCommand("collect_fee")}isCollectRewardsAndFeeTx(){return this.isCollectRewardsTx()&&this.isCollectFeeTx()}isClosePositionTx(){return!!this.getMoveCallCommand("close_position")}getMoveCallCommand(t){return this.commands.find(e=>e.$kind==="MoveCall"&&e.MoveCall.function===t)}getSharedObjectID(t){return this.inputs[t].Object.SharedObject.objectId}getOwnedObjectID(t){return this.inputs[t].Object.ImmOrOwnedObject.objectId}getU32(t){return String(Ie.u32().parse(Uint8Array.from(Te(this.inputs[t].Pure.bytes))))}getU64(t){return Ie.u64().parse(Uint8Array.from(Te(this.inputs[t].Pure.bytes)))}getU128(t){return Ie.u128().parse(Uint8Array.from(Te(this.inputs[t].Pure.bytes)))}getBoolean(t){return Ie.bool().parse(Uint8Array.from(Te(this.inputs[t].Pure.bytes)))}getAddress(t){return Ie.Address.parse(Uint8Array.from(Te(this.inputs[t].Pure.bytes)))}getTypeArguments(t){return t.MoveCall.typeArguments||[]}getInputIndex(t,e){return t.MoveCall.arguments[e].Input}};import{TransactionType as $p}from"@msafe/sui3-utils";import{BN as xt,ClmmPoolUtil as qp}from"@firefly-exchange/library-sui";import{SuiClient as Up}from"@firefly-exchange/library-sui";import{OnChainCalls as Fp}from"@firefly-exchange/library-sui/dist/src/spot";var fc={rpc:"https://fullnode.mainnet.sui.io/",objects:{GlobalConfig:"0x03db251ba509a8d5d8777b6338836082335d93eecbdd09a11e190a1cff51c352",BasePackage:"0x3492c874c1e3b3e2984e8c41b589e642d4d0a5d6459e5a9cfc2d52fd7c89c267",CurrentPackage:"0x702301e7c6ca527a6f6a83f12c5edf2dcd6ec7a23fb5318ec86d88282eab7057"}},Ct=(a,t)=>{if(a!=="sui:mainnet")throw new Error("Bluefin spot protocol is only available on sui::mainnet");let e=new Up({url:fc.rpc});return new Fp(e,fc.objects,{address:t.address,isUIWallet:!1})};var M=class{static async OpenPosition(t,e,n){let o=Ct(n,e),r=await o.queryChain.getPool(t.pool),i=this.prototype.buildLiqInput(r,{...t,slippage:0});return await o.openPositionWithFixedAmount(r,t.lowerTick,t.upperTick,i,{returnTx:!0,sender:e.address})}static async provideLiquidity(t,e,n){let o=Ct(n,e),r=await o.queryChain.getPool(t.pool),i=this.prototype.buildLiqInput(r,t);return await o.provideLiquidityWithFixedAmount(r,t.position,i,{returnTx:!0,sender:e.address})}static async removeLiquidity(t,e,n){let o=Ct(n,e),r=await o.queryChain.getPool(t.pool);return await o.removeLiquidity(r,t.position,{liquidityAmount:new xt(t.liquidity),tokenMaxA:new xt(t.maxAmountTokenA),tokenMaxB:new xt(t.maxAmountTokenB)},{returnTx:!0,sender:e.address})}static async closePosition(t,e,n){let o=Ct(n,e),r=await o.queryChain.getPool(t.pool);return await o.closePosition(r,t.position,{returnTx:!0,sender:e.address})}static async collectRewards(t,e,n){let o=Ct(n,e),r=await o.queryChain.getPool(t.pool);return await o.collectRewards(r,t.position,{rewardCoinsType:t.collectRewardTokens,returnTx:!0,sender:e.address})}static async collectFee(t,e,n){let o=Ct(n,e),r=await o.queryChain.getPool(t.pool);return await o.collectFee(r,t.position,{returnTx:!0,sender:e.address})}static async collectRewardsAndFee(t,e,n){let o=Ct(n,e),r=await o.queryChain.getPool(t.pool);return console.log(t.position),await o.collectFeeAndRewards(r,t.position,{returnTx:!0,sender:e.address})}buildLiqInput(t,e){return{...qp.estLiquidityAndCoinAmountFromOneAmounts(e.lowerTick,e.upperTick,new xt(e.tokenAmount),e.isTokenAFixed,!0,0,new xt(t.current_sqrt_price)),tokenMaxA:new xt(e.maxAmountTokenA),tokenMaxB:new xt(e.maxAmountTokenB)}}};var qa=class a extends f{constructor(e){super(e);this.data=e}txType=$p.Other;txSubType="ClosePosition";async build(e){let{account:n,network:o}=e;return console.log(this.data),M.closePosition(this.data,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Kp}from"@msafe/sui3-utils";var $a=class a extends f{constructor(e){super(e);this.data=e}txType=Kp.Other;txSubType="CollectFee";async build(e){let{account:n,network:o}=e;return console.log(this.data),M.collectFee(this.data,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Vp}from"@msafe/sui3-utils";var Ka=class a extends f{constructor(e){super(e);this.data=e}txType=Vp.Other;txSubType="CollectRewards";async build(e){let{account:n,network:o}=e;return console.log(this.data),M.collectRewards(this.data,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Qp}from"@msafe/sui3-utils";var Va=class a extends f{constructor(e){super(e);this.data=e}txType=Qp.Other;txSubType="CollectRewardsAndFee";async build(e){let{account:n,network:o}=e;return console.log(this.data),M.collectRewardsAndFee(this.data,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Hp}from"@msafe/sui3-utils";var Qa=class a extends f{constructor(e){super(e);this.data=e}txType=Hp.Other;txSubType="OpenPosition";async build(e){let{account:n,network:o}=e;return console.log(this.data),M.OpenPosition(this.data,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Gp}from"@msafe/sui3-utils";var Ha=class a extends f{constructor(e){super(e);this.data=e}txType=Gp.Other;txSubType="ProvideLiquidity";async build(e){let{account:n,network:o}=e;return console.log(this.data),M.provideLiquidity(this.data,n,o)}static fromData(e){return new a(e)}};import{TransactionType as zp}from"@msafe/sui3-utils";var Ga=class a extends f{constructor(e){super(e);this.data=e}txType=zp.Other;txSubType="RemoveLiquidity";async build(e){let{account:n,network:o}=e;return console.log(this.data),M.removeLiquidity(this.data,n,o)}static fromData(e){return new a(e)}};var za=class{application="bluefin";supportSDK="@mysten/sui";async deserialize(t){console.log("Bluefin helper deserialize input: ",t);let{transaction:e}=t,o=new Fa(e).decode();return{txType:Jp.Other,txSubType:o.type,intentionData:o.intentionData}}async build(t){let{suiClient:e,account:n,network:o}=t;console.log(t.txSubType);let r;switch(t.txSubType){case"OpenPosition":r=Qa.fromData(t.intentionData);break;case"ProvideLiquidity":r=Ha.fromData(t.intentionData);break;case"RemoveLiquidity":r=Ga.fromData(t.intentionData);break;case"ClosePosition":r=qa.fromData(t.intentionData);break;case"CollectFee":r=$a.fromData(t.intentionData);break;case"CollectRewards":r=Ka.fromData(t.intentionData);break;case"CollectRewardsAndFee":r=Va.fromData(t.intentionData);break;default:throw new Error("not implemented")}return r.build({suiClient:e,account:n,network:o})}};var K4=lo.fromHelpers([new Xn,new ro,new Hn,new io,new Cn,new ja,new ra,new Ua,new Je,new Sa,new wa,new _e,new za]);export{K4 as appHelpers};
1
+ var Tc=Object.defineProperty;var Jr=(a,t)=>{for(var e in t)Tc(a,e,{get:t[e],enumerable:!0})};import{TransactionType as _c}from"@msafe/sui3-utils";import Cc from"sort-keys-recursive";var f=class{constructor(t){this.data=t}serialize(){return JSON.stringify(Cc(this.data))}};import{depositDoubleAssetTxb as Ic}from"@alphafi/alphafi-sdk";var ke=class a extends f{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{account:n}=e,{poolName:o,amount:r,isAmountA:i}=this.data;return await Ic(o,n.address,r,i)}static fromData(e){return console.log("DepositDoubleAssetIntention.fromData",e),new a(e)}};import{depositSingleAssetTxb as kc}from"@alphafi/alphafi-sdk";var De=class a extends f{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{account:n}=e,{poolName:o,amount:r}=this.data;return await kc(o,n.address,r)}static fromData(e){return console.log("DepositSingleAssetIntention.fromData",e),new a(e)}};import{withdrawAlphaTxb as Dc}from"@alphafi/alphafi-sdk";var xe=class a extends f{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{account:n}=e,{withdrawFromLocked:o,xTokensAmount:r}=this.data;return await Dc(r,o,n.address)}static fromData(e){return console.log("WithdrawAlphaIntention.fromData",e),new a(e)}};import{withdrawTxb as xc}from"@alphafi/alphafi-sdk";var ve=class a extends f{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{account:n}=e,{poolName:o,xTokensAmount:r}=this.data;return await xc(r,o,n.address)}static fromData(e){return console.log("WithdrawIntention.fromData",e),new a(e)}};import{claimRewardTxb as vc}from"@alphafi/alphafi-sdk";var Ae=class a extends f{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{account:n}=e;return await vc(n.address)}static fromData(e){return new a(e)}};import{TransactionType as Qt}from"@msafe/sui3-utils";import{coinsList as Pc,poolIdPoolNameMap as Oc,poolInfo as Xr,singleAssetPoolCoinMap as Rc}from"@alphafi/alphafi-sdk";import{bcs as Pe,fromB64 as Oe}from"@mysten/bcs";var Re=class{constructor(t,e){this.transaction=t;this.simResult=e}decode(){if(this.isClaimRewardTransaction())return this.decodeClaimReward();let t=this.getLiquidityChangeEvent();if(!t)throw new Error("No liquidity change event found. Unable to decode transaction.");let e=t.parsedJson,n=e.pool_id,o=Oc[n];if(console.log("Decoder event data - ",e),console.log("Decoder poolName - ",o),this.isWithdrawAlphaEvent(t))return this.decodeWithdrawAlpha(e);if(this.isWithdrawEvent(e))return this.decodeWithdraw(o);if(this.isDoubleAssetDepositEvent(e,o))return this.decodeDoubleAssetDeposit(o,e);if(this.isSingleAssetDepositEvent(e,o))return this.decodeSingleAssetDeposit(o,e);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)}getLiquidityChangeEvent(){return this.simResult.events.find(t=>this.isLiquidityChangeEventType(t.type))}isClaimRewardTransaction(){return!!this.getMoveCallCommand("get_user_rewards_all")}isLiquidityChangeEventType(t){return t.includes("LiquidityChangeEvent")||t.includes("LiquidityChangeNewNewEvent")||t.includes("WithdrawEventV2")}isWithdrawAlphaEvent(t){return t.type.includes("WithdrawEventV2")}isWithdrawEvent(t){return t.event_type===1}isDoubleAssetDepositEvent(t,e){return t.event_type===0&&Xr[e].assetTypes.length===2}isSingleAssetDepositEvent(t,e){return t.event_type===0&&Xr[e].assetTypes.length===1}extractXTokensAmount(){let t=this.inputs.find(o=>o.Pure!==void 0);if(!t||!t.Pure?.bytes)throw new Error("Unable to extract xTokensAmount from inputs");let e=t.Pure.bytes,n;return e.length===12?n=Pe.u64().parse(Oe(e)):e.length===24?n=Pe.u128().parse(Oe(e)):e.length===44?n=Pe.u256().parse(Oe(e)):n=n=Pe.u64().parse(Oe(e)),n}decodeDoubleAssetDeposit(t,e){let{amount_a:n,amount_b:o}=e,r=Number(n)>0;return console.log("Decoder.decodeDoubleAssetDeposit",n,o,r),{txType:Qt.Other,type:"depositDoubleAsset",intentionData:{poolName:t,amount:r?n:o,isAmountA:r}}}decodeSingleAssetDeposit(t,e){let{amount:n}=e;if(console.log("Decoder.decodeSingleAssetDeposit",n),this.getLiquidityChangeEvent().type.includes(":alphafi_navi_pool:")){let r=Rc[t].coin,i=Pc[r].expo;n=Math.floor(Number(n)/10**(9-i)).toString()}return{txType:Qt.Other,type:"depositSingleAsset",intentionData:{poolName:t,amount:n}}}decodeWithdraw(t){let e=this.extractXTokensAmount();return console.log("Decoder.decodeWithdraw",e),{txType:Qt.Other,type:"withdraw",intentionData:{poolName:t,xTokensAmount:e}}}decodeWithdrawAlpha(t){let e=this.extractXTokensAmount(),{amount_withdrawn_from_locked:n}=t;return console.log("Decoder.decodeWithdrawAlpha",e,n),{txType:Qt.Other,type:"withdrawAlpha",intentionData:{withdrawFromLocked:Number(n)>0,xTokensAmount:e}}}decodeClaimReward(){return{txType:Qt.Other,type:"claimReward",intentionData:{}}}};var _e=class{application="alphafi";supportSDK="@mysten/sui";async deserialize(t){let{transaction:e,suiClient:n,account:o}=t,r=await n.devInspectTransactionBlock({sender:e.getData().sender,transactionBlock:e});console.log("AlphaFiHelper Sim result - ",r);let s=new Re(e,r).decode();return{txType:_c.Other,txSubType:s.type,intentionData:s.intentionData}}async build(t){let{account:e}=t;console.log("AlphaFi build transaction type",t.txSubType);let n;switch(t.txSubType){case"depositSingleAsset":n=De.fromData(t.intentionData);break;case"depositDoubleAsset":n=ke.fromData(t.intentionData);break;case"withdraw":n=ve.fromData(t.intentionData);break;case"withdrawAlpha":n=xe.fromData(t.intentionData);break;case"claimReward":n=Ae.fromData(t.intentionData);break;default:throw new Error("not implemented")}return n.build({account:e})}};import{TransactionType as el}from"@msafe/sui3-utils";import{TransactionType as q}from"@msafe/sui3-utils";import{SBUCK_FOUNTAIN_PACKAGE_ID as tr}from"bucket-protocol-sdk";import{bcs as er}from"@mysten/sui/bcs";var Be=class{constructor(t){this.transaction=t}decode(){if(this.isSBUCKDepositTransaction())return this.decodeSBUCKDeposit();if(this.isSBUCKUnstakeTransaction())return this.decodeSBUCKUnstake();if(this.isSBUCKWithdrawTransaction())return this.decodeSBUCKWithdraw();if(this.isSBUCKClaimTransaction())return this.decodeSBUCKClaim();if(this.isLockedClaimTransaction())return this.decodeLockedClaim();if(this.isBorrowTransaction())return this.decodeBorrow();if(this.isRepayTransaction())return this.decodeRepay();if(this.isWithdrawTransaction())return this.decodeWithdraw();if(this.isCloseTransaction())return this.decodeClose();if(this.isTankDepositTransaction())return this.decodeTankDeposit();if(this.isTankWithdrawTransaction())return this.decodeTankWithdraw();if(this.isTankClaimTransaction())return this.decodeTankClaim();if(this.isPsmTransaction())return this.decodePsm();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)}getMoveCallModuleCommand(t,e){return this.commands.find(n=>n.$kind==="MoveCall"&&n.MoveCall.module===t&&n.MoveCall.function===e)}getMoveCallPackageModuleCommand(t,e,n){return this.commands.find(o=>o.$kind==="MoveCall"&&o.MoveCall.package===t&&o.MoveCall.module===e&&o.MoveCall.function===n)}getMoveCallModuleCommands(t,e){return this.commands.filter(n=>n.$kind==="MoveCall"&&n.MoveCall.module===t&&n.MoveCall.function===e)}getSplitCoinsCommands(){return this.commands.filter(t=>t.$kind==="SplitCoins")}getTransferCommands(){return this.commands.filter(t=>t.$kind==="TransferObjects")}isPsmTransaction(){return!!this.getMoveCallCommand("charge_reservoir")||!!this.getMoveCallCommand("discharge_reservoir")}isStrapNewTransaction(){return!!this.getMoveCallModuleCommand("strap","new")}isBorrowTransaction(){return!!this.getMoveCallModuleCommand("bucket_operations","high_top_up")||!!this.getMoveCallModuleCommand("bucket_operations","high_borrow")||!!this.getMoveCallModuleCommand("bucket_operations","high_borrow_with_strap")}isRepayTransaction(){return!!this.getMoveCallModuleCommand("bucket_operations","fully_repay")||!!this.getMoveCallModuleCommand("bucket_operations","fully_repay_with_strap")||!!this.getMoveCallModuleCommand("bucket_operations","repay_and_withdraw")||!!this.getMoveCallModuleCommand("bucket_operations","repay_and_withdraw_with_strap")}isWithdrawTransaction(){return!!this.getMoveCallModuleCommand("buck","withdraw")||!!this.getMoveCallModuleCommand("buck","withdraw_with_strap")}isCloseTransaction(){return!!this.getMoveCallModuleCommand("bucket_operations","destroy_empty_strap")}isTankDepositTransaction(){return!!this.getMoveCallModuleCommand("tank_operations","deposit")}isTankWithdrawTransaction(){return!!this.getMoveCallModuleCommand("tank_operations","withdraw")}isTankClaimTransaction(){return!!this.getMoveCallModuleCommand("tank_operations","claim")}isSBUCKDepositTransaction(){return!!this.getMoveCallModuleCommand("buck","buck_to_sbuck")}isSBUCKWithdrawTransaction(){return!!this.getMoveCallModuleCommand("buck","sbuck_to_buck")}isSBUCKStakeTransaction(){return!!this.getMoveCallPackageModuleCommand(tr,"fountain_core","stake")}isSBUCKUnstakeTransaction(){return!!this.getMoveCallPackageModuleCommand(tr,"fountain_core","force_unstake")}isSBUCKClaimTransaction(){return!!this.getMoveCallPackageModuleCommand(tr,"fountain_core","claim")}isLockedClaimTransaction(){return!!this.getMoveCallModuleCommand("proof_rule","claim")||!!this.getMoveCallModuleCommand("lst_proof_rule","claim")}isLstUnlockTransaction(){return!!this.getMoveCallModuleCommand("lst_proof_rule","unlock")}decodePsm(){let t,e,n="0",o=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];return o.$kind=="Input"&&(n=this.getPureInputU64(o.Input)),this.getMoveCallCommand("charge_reservoir")?(t=this.getMoveCallCommand("charge_reservoir").MoveCall.typeArguments[0],e=!1):(t=this.getMoveCallCommand("discharge_reservoir").MoveCall.typeArguments[0],e=!0),console.log("Decoder.decodePsm",t,n,e),{txType:q.Other,type:"psm",intentionData:{coinType:t,amount:n,buckToCoin:e}}}decodeBorrow(){let t="",e="0",n,o=this.getStrapId(),r="0",i=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];if(i.$kind=="Input"&&(r=this.getPureInputU64(i.Input)),this.getMoveCallCommand("high_top_up")){let s=this.getMoveCallCommand("high_top_up").MoveCall;t=s.typeArguments[0];let c=s.arguments[1];c.$kind=="Input"&&(e=this.getPureInputU64(c.Input));let l=s.arguments[3];if(l.$kind=="Input"){let d=this.getPureAddresses(l.Input);d.length==1&&(n=d[0])}}else if(this.getMoveCallCommand("high_borrow")){let s=this.getMoveCallCommand("high_borrow").MoveCall;t=s.typeArguments[0];let c=s.arguments[4];c.$kind=="Input"&&(e=this.getPureInputU64(c.Input));let l=s.arguments[5];if(l.$kind=="Input"){let d=this.getPureAddresses(l.Input);d.length==1&&(n=d[0])}}else if(this.getMoveCallCommand("high_borrow_with_strap")){let s=this.getMoveCallCommand("high_borrow_with_strap").MoveCall;t=s.typeArguments[0];let c=s.arguments[5];c.$kind=="Input"&&(e=this.getPureInputU64(c.Input));let l=s.arguments[6];if(l.$kind=="Input"){let d=this.getPureAddresses(l.Input);d.length==1&&(n=d[0])}}return{txType:q.Other,type:"borrow",intentionData:{collateralType:t,collateralAmount:r,borrowAmount:e,insertionPlace:n,strapId:o}}}decodeRepay(){let t="",e="0",n="0",o=!1,r,i=this.getStrapId();if(this.getMoveCallCommand("fully_repay"))t=this.getMoveCallCommand("fully_repay").MoveCall.typeArguments[0];else if(this.getMoveCallCommand("fully_repay_with_strap"))t=this.getMoveCallCommand("fully_repay_with_strap").MoveCall.typeArguments[0];else if(this.getMoveCallCommand("repay_and_withdraw")){let s=this.getMoveCallCommand("repay_and_withdraw").MoveCall;t=s.typeArguments[0];let c=s.arguments[4];c.$kind=="Input"&&(n=this.getPureInputU64(c.Input));let l=s.arguments[5];if(l.$kind=="Input"){let u=this.getPureAddresses(l.Input);u.length==1&&(r=u[0])}let d=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];d.$kind=="Input"&&(e=this.getPureInputU64(d.Input))}else if(this.getMoveCallCommand("repay_and_withdraw_with_strap")){let s=this.getMoveCallCommand("repay_and_withdraw_with_strap").MoveCall;t=s.typeArguments[0];let c=s.arguments[5];c.$kind=="Input"&&(n=this.getPureInputU64(c.Input));let l=s.arguments[6];if(l.$kind=="Input"){let u=this.getPureAddresses(l.Input);u.length==1&&(r=u[0])}let d=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];d.$kind=="Input"&&(e=this.getPureInputU64(d.Input))}return{txType:q.Other,type:"repay",intentionData:{collateralType:t,repayAmount:e,withdrawAmount:n,isSurplus:o,insertionPlace:r,strapId:i}}}decodeWithdraw(){let t="",e="0",n,o=this.getStrapId();if(this.getMoveCallCommand("withdraw_with_strap")){let r=this.getMoveCallCommand("withdraw_with_strap").MoveCall;t=r.typeArguments[0];let i=r.arguments[4];i.$kind=="Input"&&(e=this.getPureInputU64(i.Input));let s=r.arguments[5];if(s.$kind=="Input"){let c=this.getPureAddresses(s.Input);c.length==1&&(n=c[0])}}else if(this.getMoveCallCommand("withdraw")){let r=this.getMoveCallCommand("withdraw").MoveCall;t=r.typeArguments[0];let i=r.arguments[3];i.$kind=="Input"&&(e=this.getPureInputU64(i.Input));let s=r.arguments[4];if(s.$kind=="Input"){let c=this.getPureAddresses(s.Input);c.length==1&&(n=c[0])}}return{txType:q.Other,type:"withdraw",intentionData:{collateralType:t,withdrawAmount:e,insertionPlace:n,strapId:o}}}decodeClose(){let t="",e=this.getStrapId();return this.getMoveCallCommand("destroy_empty_strap")&&(t=this.getMoveCallCommand("destroy_empty_strap").MoveCall.typeArguments[0]),{txType:q.Other,type:"close",intentionData:{collateralType:t,strapId:e}}}decodeSBUCKDeposit(){let e=this.getMoveCallCommand("into_balance").MoveCall.typeArguments[0],n="0",r=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];r.$kind=="Input"&&(n=this.getPureInputU64(r.Input));let i=this.isSBUCKStakeTransaction();return console.log("Decoder.decodeSBUCKDeposit",e,n,i),{txType:q.Other,type:"sbuck-deposit",intentionData:{coinType:e,amount:n,isStake:i}}}decodeSBUCKUnstake(){let t="0",e=this.isSBUCKStakeTransaction();if(e){let c=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];c.$kind=="Input"&&(t=this.getPureInputU64(c.Input))}let n=[],o=this.getMoveCallModuleCommands("proof_rule","unlock");if(o.length>0)for(let s of o)n.push("");else{let s=this.getMoveCallModuleCommands("fountain_core","force_unstake");for(let c of s){let l=c.MoveCall.arguments[2];if(l.$kind=="Input"){let d=this.inputs[l.Input].UnresolvedObject.objectId;n.push(d)}}}let r=this.isSBUCKWithdrawTransaction(),i={stakeProofs:n,amount:t,isStake:e,toBuck:r};return console.log("Decoder.decodeSBUCKUnstake",i),{txType:q.Other,type:"sbuck-unstake",intentionData:i}}decodeSBUCKWithdraw(){let t="0",n=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];return n.$kind=="Input"&&(t=this.getPureInputU64(n.Input)),console.log("Decoder.SBUCKWithdraw",t),{txType:q.Other,type:"sbuck-withdraw",intentionData:{amount:t}}}decodeSBUCKClaim(){let t=[],e=this.getMoveCallModuleCommands("fountain_core","claim");for(let n of e){let o=n.MoveCall.arguments[2];if(o.$kind=="Input"){let r=this.inputs[o.Input].UnresolvedObject.objectId;t.push(r)}}return console.log("Decoder.decodeSBUCKClaim",t),{txType:q.Other,type:"sbuck-claim",intentionData:{stakeProofs:t}}}decodeTankDeposit(){let t="0",n=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];n.$kind=="Input"&&(t=this.getPureInputU64(n.Input));let r=this.getMoveCallModuleCommand("tank_operations","deposit").MoveCall.typeArguments[0];return console.log("Decoder.decodeTankDeposit",r,t),{txType:q.Other,type:"tank-deposit",intentionData:{coinType:r,amount:t}}}decodeTankWithdraw(){let t=this.getMoveCallModuleCommand("tank_operations","withdraw").MoveCall,e=t.typeArguments[0],n="0",o=t.arguments[5];return o.$kind=="Input"&&(n=this.getPureInputU64(o.Input)),console.log("Decoder.decodeTankWithdraw",e,n),{txType:q.Other,type:"tank-withdraw",intentionData:{coinType:e,amount:n}}}decodeTankClaim(){let e=this.getMoveCallModuleCommand("tank_operations","claim").MoveCall.typeArguments[0];return console.log("Decoder.decodeTankClaim",e),{txType:q.Other,type:"tank-claim",intentionData:{coinType:e}}}decodeLockedClaim(){let t="",e=0,n=this.getMoveCallModuleCommands("proof_rule","claim");for(let r of n)t=r.MoveCall.typeArguments[0],e++;let o=this.getMoveCallModuleCommands("lst_proof_rule","claim");for(let r of o)t=r.MoveCall.typeArguments[0],e++;return console.log("Decoder.decodeLockedClaim",t,e),{txType:q.Other,type:"lock-claim",intentionData:{coinType:t,proofCount:e}}}getCoinInput(t){if(this.inputs[t].$kind!=="Object")throw new Error("not Object argument")}getStrapId(){let t;if(this.isStrapNewTransaction()?t="new":this.isLstUnlockTransaction()&&(t="locked"),!t){let e=this.getMoveCallModuleCommand("fountain","unstake");if(e){let n=e.MoveCall.arguments[2];n.$kind=="Input"&&(t=this.inputs[n.Input].UnresolvedObject.objectId)}}return t}getPureInputU64(t){let e=this.inputs[t];if(e.$kind!=="Pure")throw new Error("not pure argument");return er.U64.fromBase64(e.Pure.bytes)}getPureAddresses(t){let e=this.inputs[t];if(e.$kind!=="Pure")throw new Error("not pure argument");return er.vector(er.Address).fromBase64(e.Pure.bytes)}};import{TransactionType as Nc}from"@msafe/sui3-utils";import{Transaction as Mc}from"@mysten/sui/transactions";import{buildPsmTx as jc}from"bucket-protocol-sdk";import{BucketClient as Bc}from"bucket-protocol-sdk";var R=(a,t)=>{let e=a==="sui:mainnet"?"mainnet":"testnet";return new Bc(e,t.address)};var Yr=async(a,t,e)=>{let{coinType:n,amount:o,buckToCoin:r}=a,i=new Mc,s=R(e,t);return await jc(s,i,n,o,r,t.address),i};var Me=class a extends f{constructor(e){super(e);this.data=e}txType=Nc.Other;txSubType="psm";async build(e){let{account:n,network:o}=e;return await Yr(this.data,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Fc}from"@msafe/sui3-utils";import{Transaction as je}from"@mysten/sui/transactions";import{buildBorrowTx as Ec,buildCloseTx as Wc,buildRepayTx as Lc,buildWithdrawTx as Uc}from"bucket-protocol-sdk";var Zr=async(a,t,e)=>{let{collateralType:n,collateralAmount:o,borrowAmount:r,insertionPlace:i,strapId:s}=a,c=new je,l=R(e,t);return await Ec(l,c,n,o,r,t.address,i,s),c},ti=async(a,t,e)=>{let{collateralType:n,withdrawAmount:o,insertionPlace:r,strapId:i}=a,s=new je,c=R(e,t);return await Uc(c,s,n,o,t.address,r,i),s},ei=async(a,t,e)=>{let{collateralType:n,repayAmount:o,withdrawAmount:r,isSurplus:i,insertionPlace:s,strapId:c}=a,l=new je,d=R(e,t);return await Lc(d,l,n,o,r,t.address,i,s,c),l},ni=async(a,t,e)=>{let{collateralType:n,recipient:o,strapId:r}=a,i=new je,s=R(e,t);return await Wc(s,i,n,o,r),i};var Ne=class a extends f{constructor(e){super(e);this.data=e}txType=Fc.Other;txSubType="borrow";async build(e){let{account:n,network:o}=e;return await Zr(this.data,n,o)}static fromData(e){return new a(e)}};import{TransactionType as qc}from"@msafe/sui3-utils";var Ee=class a extends f{constructor(e){super(e);this.data=e}txType=qc.Other;txSubType="repay";async build(e){let{account:n,network:o}=e;return await ei(this.data,n,o)}static fromData(e){return new a(e)}};import{TransactionType as $c}from"@msafe/sui3-utils";var We=class a extends f{constructor(e){super(e);this.data=e}txType=$c.Other;txSubType="withdraw";async build(e){let{account:n,network:o}=e;return await ti(this.data,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Kc}from"@msafe/sui3-utils";var Le=class a extends f{constructor(e){super(e);this.data=e}txType=Kc.Other;txSubType="close";async build(e){let{account:n,network:o}=e;return await ni(this.data,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Ve}from"@msafe/sui3-utils";import{Transaction as Ue}from"@mysten/sui/transactions";import{buildSBUCKClaimTx as Vc,buildSBUCKDepositTx as Qc,buildSBUCKUnstakeTx as Hc,buildSBUCKWithdrawTx as Gc}from"bucket-protocol-sdk";var oi=async(a,t,e)=>{let{coinType:n,amount:o,isStake:r}=a,i=new Ue,s=R(e,t);return await Qc(s,i,n,o,t.address,r),i},ai=async(a,t,e)=>{let{stakeProofs:n,amount:o,isStake:r,toBuck:i}=a,s=new Ue,c=R(e,t);return await Hc(c,s,n,o,t.address,r,i),s},ri=async(a,t,e)=>{let{amount:n}=a,o=new Ue,r=R(e,t);return await Gc(r,o,n,t.address),o},ii=async(a,t,e)=>{let{stakeProofs:n}=a,o=new Ue,r=R(e,t);return await Vc(r,o,n,t.address),o};var Fe=class a extends f{constructor(e){super(e);this.data=e}txType=Ve.Other;txSubType="sbuck-deposit";async build(e){let{account:n,network:o}=e;return await oi(this.data,n,o)}static fromData(e){return new a(e)}},qe=class a extends f{constructor(e){super(e);this.data=e}txType=Ve.Other;txSubType="sbuck-unstake";async build(e){let{account:n,network:o}=e;return await ai(this.data,n,o)}static fromData(e){return new a(e)}},$e=class a extends f{constructor(e){super(e);this.data=e}txType=Ve.Other;txSubType="sbuck-withdraw";async build(e){let{account:n,network:o}=e;return await ri(this.data,n,o)}static fromData(e){return new a(e)}},Ke=class a extends f{constructor(e){super(e);this.data=e}txType=Ve.Other;txSubType="sbuck-claim";async build(e){let{account:n,network:o}=e;return await ii(this.data,n,o)}static fromData(e){return new a(e)}};import{TransactionType as or}from"@msafe/sui3-utils";import{Transaction as nr}from"@mysten/sui/transactions";import{buildTankClaimTx as zc,buildTankDepositTx as Jc,buildTankWithdrawTx as Xc}from"bucket-protocol-sdk";var si=async(a,t,e)=>{let{coinType:n,amount:o}=a,r=new nr,i=R(e,t);return await Jc(i,r,n,o,t.address),r},ci=async(a,t,e)=>{let{coinType:n,amount:o}=a,r=new nr,i=R(e,t);return await Xc(i,r,n,o,t.address),r},li=async(a,t,e)=>{let{coinType:n}=a,o=new nr,r=R(e,t);return await zc(r,o,n,t.address),o};import{Transaction as Yc}from"@mysten/sui/transactions";import{buildLockedClaimTx as Zc}from"bucket-protocol-sdk";var di=async(a,t,e)=>{let{coinType:n,proofCount:o}=a,r=new Yc,i=R(e,t);return await Zc(i,r,n,o,t.address),r};var Qe=class a extends f{constructor(e){super(e);this.data=e}txType=or.Other;txSubType="tank-deposit";async build(e){let{account:n,network:o}=e;return await si(this.data,n,o)}static fromData(e){return new a(e)}},He=class a extends f{constructor(e){super(e);this.data=e}txType=or.Other;txSubType="tank-withdraw";async build(e){let{account:n,network:o}=e;return await ci(this.data,n,o)}static fromData(e){return new a(e)}},Ge=class a extends f{constructor(e){super(e);this.data=e}txType=or.Other;txSubType="tank-claim";async build(e){let{account:n,network:o}=e;return await li(this.data,n,o)}static fromData(e){return new a(e)}};import{TransactionType as tl}from"@msafe/sui3-utils";var ze=class a extends f{constructor(e){super(e);this.data=e}txType=tl.Other;txSubType="lock-claim";async build(e){let{account:n,network:o}=e;return await di(this.data,n,o)}static fromData(e){return new a(e)}};var Je=class{application="bucket";supportSDK="@mysten/sui";async deserialize(t){console.log("Bucket helper deserialize input: ",t);let{transaction:e}=t,o=new Be(e).decode();return{txType:el.Other,txSubType:o.type,intentionData:o.intentionData}}async build(t){let{suiClient:e,account:n,network:o}=t,r;switch(t.txSubType){case"psm":r=Me.fromData(t.intentionData);break;case"borrow":r=Ne.fromData(t.intentionData);break;case"withdraw":r=We.fromData(t.intentionData);break;case"repay":r=Ee.fromData(t.intentionData);break;case"close":r=Le.fromData(t.intentionData);break;case"tank-deposit":r=Qe.fromData(t.intentionData);break;case"tank-withdraw":r=He.fromData(t.intentionData);break;case"tank-claim":r=Ge.fromData(t.intentionData);break;case"sbuck-deposit":r=Fe.fromData(t.intentionData);break;case"sbuck-unstake":r=qe.fromData(t.intentionData);break;case"sbuck-withdraw":r=$e.fromData(t.intentionData);break;case"sbuck-claim":r=Ke.fromData(t.intentionData);break;case"lock-claim":r=ze.fromData(t.intentionData);break;default:throw new Error("not implemented")}return r.build({suiClient:e,account:n,network:o})}};import{TransactionType as Wl}from"@msafe/sui3-utils";import{TransactionType as ul}from"@msafe/sui3-utils";import{AggregatorClient as nl,Env as ui}from"@cetusprotocol/aggregator-sdk";import{CetusPeripherySDK as ol}from"@cetusprotocol/cetus-periphery-sdk";import{CetusClmmSDK as al}from"@cetusprotocol/cetus-sui-clmm-sdk";import rl from"@cetusprotocol/vaults-sdk";import{SuiClient as il}from"@mysten/sui/client";var sl={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:"0xdc67d6de3f00051c505da10d8f6fbab3b3ec21ec65f0dc22a2f36c13fc102110",version:4,config:{pools_id:"0xf699e7f2276f5c9a75944b37a0c5b5d9ddfd2471bf6242483b03ab2887d198d0",global_config_id:"0xdaa46292632c3c4d8f31f23ea0f9b36a28ff3677e9684980e4438403a67a3d8f",global_vault_id:"0xce7bceef26d3ad1f6d9b6f13a953f053e6ed3ca77907516481ce99ae8e588f2b",admin_cap_id:""}},integrate:{package_id:"0x996c4d9480708fb8b92aa7acf819fb0497b5ec8e65ba06601cae2fb6db3312c3",published_at:"0x3a5aa90ffa33d09100d7b6941ea1c0ffe6ab66e77062ddd26320c1b073aabb10",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"},cl={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:"0x58e5de6e425397eeaf952d55c0f94637bee91b25d6138ce222f89cda0aefec03",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:"0x7e4ca066f06a1132ab0499c8c0b87f847a0d90684afa902e52501a44dbd81992",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:""}}},Ct=(a,t)=>{let e=sl,n=new al(e);return n.senderAddress=t.address,n},j=(a,t)=>{let e=Ct(a,t),n=cl;return new ol(n,e)},ll="https://api-sui.cetus.zone/router_v2/find_routes",pi=(a,t)=>{let e=new il({url:"https://fullnode.mainnet.sui.io/"});return new nl(ll,t.address,e,ui.Mainnet)},dl={fullRpcUrl:"https://fullnode.mainnet.sui.io/",simulationAccount:{address:"0x326ce9894f08dcaa337fa232641cc34db957aec9ff6614c1186bc9a7508df0bb"},clmm_pool:{package_id:"0x1eabed72c53feb3805120a081dc15963c204dc8d091542592abaf7a35689b2fb",published_at:"0xdc67d6de3f00051c505da10d8f6fbab3b3ec21ec65f0dc22a2f36c13fc102110",config:{pools_id:"0xf699e7f2276f5c9a75944b37a0c5b5d9ddfd2471bf6242483b03ab2887d198d0",global_config_id:"0xdaa46292632c3c4d8f31f23ea0f9b36a28ff3677e9684980e4438403a67a3d8f",global_vault_id:"0xce7bceef26d3ad1f6d9b6f13a953f053e6ed3ca77907516481ce99ae8e588f2b",admin_cap_id:""}},integrate:{package_id:"0x996c4d9480708fb8b92aa7acf819fb0497b5ec8e65ba06601cae2fb6db3312c3",published_at:"0x3a5aa90ffa33d09100d7b6941ea1c0ffe6ab66e77062ddd26320c1b073aabb10"},frams:{package_id:"0x11ea791d82b5742cc8cab0bf7946035c97d9001d7c3803a93f119753da66f526",published_at:"0x7e4ca066f06a1132ab0499c8c0b87f847a0d90684afa902e52501a44dbd81992",config:{global_config_id:"0x21215f2f6de04b57dd87d9be7bb4e15499aec935e36078e2488f36436d64996e",rewarder_manager_id:"0xe0e155a88c77025056da08db5b1701a91b79edb6167462f768e387c3ed6614d5",rewarder_manager_handle:"0xb32e312cbb3367d6f3d2b4e57c9225e903d29b7b9f612dae2ddf75bdeb26a5aa",admin_cap_id:"0xf10fbf1fea5b7aeaa524b87769461a28c5c977613046360093673991f26d886c"}},vaults:{package_id:"0xd3453d9be7e35efe222f78a810bb3af1859fd1600926afced8b4936d825c9a05",published_at:"0x58e5de6e425397eeaf952d55c0f94637bee91b25d6138ce222f89cda0aefec03",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"}}}},aggregator:{endPoint:"https://api-sui.cetus.zone/router_v2/find_routes",fullNodeurl:"https://fullnode.mainnet.sui.io/",walletAddress:"0x326ce9894f08dcaa337fa232641cc34db957aec9ff6614c1186bc9a7508df0bb",env:ui.Mainnet,providers:["CETUS","DEEPBOOK","KRIYA","KRIYAV3","FLOWX","FLOWXV3","AFTERMATH","TURBOS","HAEDAL","VOLO","AFSUI"]}},ar=(a,t)=>{let e=new rl(dl);return e.senderAddress=t.address,e};var mi=async(a,t,e)=>await Ct(e,t).Position.createAddLiquidityFixTokenPayload(a?.parameter,a?.gasEstimateArg),fi=async(a,t,e)=>await Ct(e,t).Position.createAddLiquidityFixTokenPayload(a?.parameter,a?.gasEstimateArg),bi=async(a,t,e)=>await Ct(e,t).Position.closePositionTransactionPayload(a),gi=async(a,t,e)=>await Ct(e,t).Position.removeLiquidityTransactionPayload(a),hi=async(a,t,e)=>await Ct(e,t).Rewarder.collectRewarderTransactionPayload(a);var Xe=class a extends f{constructor(e){super(e);this.data=e}txType=ul.Other;txSubType="OpenAndAddLiquidity";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await mi(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as pl}from"@msafe/sui3-utils";var Ye=class a extends f{constructor(e){super(e);this.data=e}txType=pl.Other;txSubType="ClaimFeeAndMining";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await hi(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as ml}from"@msafe/sui3-utils";var Ze=class a extends f{constructor(e){super(e);this.data=e}txType=ml.Other;txSubType="DecreaseLiquidity";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await gi(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as fl}from"@msafe/sui3-utils";var yi=async(a,t,e)=>await j(e,t).Farms.openPositionAddLiquidityStakePaylod(a),Si=async(a,t,e)=>await j(e,t).Farms.addLiquidityFixCoinPayload(a),wi=async(a,t,e)=>await j(e,t).Farms.removeLiquidityPayload(a),Ti=async(a,t,e)=>await j(e,t).Farms.removeLiquidityPayload(a),Ci=async(a,t,e)=>await j(e,t).Farms.claimFeeAndClmmReward(a),Ii=async(a,t,e)=>await j(e,t).Farms.harvestPayload(a),ki=async(a,t,e)=>{let n=j(e,t),o=Object.values(a);return await n.Farms.batchHarvestPayload(o)},Di=async(a,t,e)=>await j(e,t).Farms.depositPayload(a),xi=async(a,t,e)=>await j(e,t).Farms.withdrawPayload(a);var tn=class a extends f{constructor(e){super(e);this.data=e}txType=fl.Other;txSubType="FarmingOpenAndAddLiquidity";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await yi(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as bl}from"@msafe/sui3-utils";var en=class a extends f{constructor(e){super(e);this.data=e}txType=bl.Other;txSubType="FarmingBatchHarvest";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await ki(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as gl}from"@msafe/sui3-utils";var nn=class a extends f{constructor(e){super(e);this.data=e}txType=gl.Other;txSubType="FarmingClaimFeeAndReward";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await Ci(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as hl}from"@msafe/sui3-utils";var on=class a extends f{constructor(e){super(e);this.data=e}txType=hl.Other;txSubType="FarmingDecreaseLiquidity";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await wi(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as yl}from"@msafe/sui3-utils";var an=class a extends f{constructor(e){super(e);this.data=e}txType=yl.Other;txSubType="FarmingHarvest";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await Ii(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Sl}from"@msafe/sui3-utils";var rn=class a extends f{constructor(e){super(e);this.data=e}txType=Sl.Other;txSubType="FarmingIncreaseLiquidity";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await Si(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as wl}from"@msafe/sui3-utils";var sn=class a extends f{constructor(e){super(e);this.data=e}txType=wl.Other;txSubType="FarmingRemoveLiquidity";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await Ti(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Tl}from"@msafe/sui3-utils";var cn=class a extends f{constructor(e){super(e);this.data=e}txType=Tl.Other;txSubType="FarmingStake";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await Di(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Cl}from"@msafe/sui3-utils";var ln=class a extends f{constructor(e){super(e);this.data=e}txType=Cl.Other;txSubType="FarmingUnstake";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await xi(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Il}from"@msafe/sui3-utils";var dn=class a extends f{constructor(e){super(e);this.data=e}txType=Il.Other;txSubType="IncreaseLiquidity";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await fi(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as kl}from"@msafe/sui3-utils";var un=class a extends f{constructor(e){super(e);this.data=e}txType=kl.Other;txSubType="RemoveLiquidity";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await bi(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as vl}from"@msafe/sui3-utils";import{restituteMsafeFastRouterSwapParams as Dl}from"@cetusprotocol/aggregator-sdk";import{Transaction as xl}from"@mysten/sui/transactions";var vi=async(a,t,e)=>{let n=pi(e,t),o=new xl;return await n.fastRouterSwap({...a,routers:Dl(a.routers),txb:o}),o};var pn=class a extends f{constructor(e){super(e);this.data=e}txType=vl.Other;txSubType="AggregatorSwap";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await vi(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Al}from"@msafe/sui3-utils";var Ai=async(a,t,e)=>await ar(e,t).Vaults.deposit(a),Pi=async(a,t,e)=>await ar(e,t).Vaults.withdraw(a);var mn=class a extends f{constructor(e){super(e);this.data=e}txType=Al.Other;txSubType="AddVaultsPosition";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await Ai(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Pl}from"@msafe/sui3-utils";var fn=class a extends f{constructor(e){super(e);this.data=e}txType=Pl.Other;txSubType="RemoveVaultsPosition";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await Pi(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Rl}from"@msafe/sui3-utils";import{Transaction as Ol}from"@mysten/sui/transactions";var Oi={package_id:"0x355714a1eeb7ab1d80902da6c92001170cda1212edf524c32aa308a3ac177c31",published_at:"0x355714a1eeb7ab1d80902da6c92001170cda1212edf524c32aa308a3ac177c31",cetus_coin_type:"0x06864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b::cetus::CETUS"},Ri=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 Ol;return r.forEach(c=>{s.moveCall({target:`${Oi.published_at}::router::redeem`,typeArguments:[Oi.cetus_coin_type],arguments:[s.object(n),s.object(o),s.pure(c),s.object(i)]})}),s};var bn=class a extends f{constructor(e){super(e);this.data=e}txType=Rl.Other;txSubType="VestingRedeem";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await Ri(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Bl}from"@msafe/sui3-utils";import{Transaction as _l}from"@mysten/sui/transactions";var _i=async(a,t,e)=>{let n=j(e,t),o=new _l;return await n.XCetusModule.convertPayload(a,o)},Bi=async(a,t,e)=>await j(e,t).XCetusModule.redeemLockPayload(a),Mi=async(a,t,e)=>await j(e,t).XCetusModule.redeemDividendV3Payload(a.phases,a.venft_id,a.bonus_types,a.bonus_types_v2,a.xTokenType),ji=async(a,t,e)=>await j(e,t).XCetusModule.cancelRedeemPayload(a),Ni=async(a,t,e)=>await j(e,t).XCetusModule.redeemPayload(a);var gn=class a extends f{constructor(e){super(e);this.data=e}txType=Bl.Other;txSubType="xCETUSCancelRedeem";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await ji(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Ml}from"@msafe/sui3-utils";var hn=class a extends f{constructor(e){super(e);this.data=e}txType=Ml.Other;txSubType="xCETUSClaimStakingRwewards";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await Mi(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as jl}from"@msafe/sui3-utils";var yn=class a extends f{constructor(e){super(e);this.data=e}txType=jl.Other;txSubType="xCETUSConvert";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await _i(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Nl}from"@msafe/sui3-utils";var Sn=class a extends f{constructor(e){super(e);this.data=e}txType=Nl.Other;txSubType="xCETUSRedeem";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await Ni(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as El}from"@msafe/sui3-utils";var wn=class a extends f{constructor(e){super(e);this.data=e}txType=El.Other;txSubType="xCETUSRedeemLock";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await Bi(r,n,o)}static fromData(e){return new a(e)}};var Tn=class{application="cetus";supportSDK="@mysten/sui";async deserialize(t){console.log("Cetus helper deserialize input: ",t);let{txbParams:e,action:n}=t;return{txType:Wl.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=Xe.fromData(t.intentionData);break;case"IncreaseLiquidity":r=dn.fromData(t.intentionData);break;case"DecreaseLiquidity":r=Ze.fromData(t.intentionData);break;case"RemoveLiquidity":r=un.fromData(t.intentionData);break;case"ClaimFeeAndMining":r=Ye.fromData(t.intentionData);break;case"FarmingOpenAndAddLiquidity":r=tn.fromData(t.intentionData);break;case"FarmingIncreaseLiquidity":r=rn.fromData(t.intentionData);break;case"FarmingDecreaseLiquidity":r=on.fromData(t.intentionData);break;case"FarmingRemoveLiquidity":r=sn.fromData(t.intentionData);break;case"FarmingClaimFeeAndReward":r=nn.fromData(t.intentionData);break;case"FarmingHarvest":r=an.fromData(t.intentionData);break;case"FarmingBatchHarvest":r=en.fromData(t.intentionData);break;case"FarmingStake":r=cn.fromData(t.intentionData);break;case"FarmingUnstake":r=ln.fromData(t.intentionData);break;case"xCETUSConvert":r=yn.fromData(t.intentionData);break;case"xCETUSRedeemLock":r=wn.fromData(t.intentionData);break;case"xCETUSClaimStakingRwewards":r=hn.fromData(t.intentionData);break;case"xCETUSCancelRedeem":r=gn.fromData(t.intentionData);break;case"xCETUSRedeem":r=Sn.fromData(t.intentionData);break;case"VestingRedeem":r=bn.fromData(t.intentionData);break;case"AggregatorSwap":r=pn.fromData(t.intentionData);break;case"AddVaultsPosition":r=mn.fromData(t.intentionData);break;case"RemoveVaultsPosition":r=fn.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 Ll from"sort-keys-recursive";var y=class{constructor(t){this.data=t}serialize(){return JSON.stringify(Ll(this.data))}};import{getFullnodeUrl as Cn}from"@mysten/sui.js/client";var rr={};Jr(rr,{contractId:()=>ql,default:()=>Hl,feeObjId:()=>Vl,roleObjId:()=>$l,status:()=>Fl,transaction:()=>Ul,upgradeCapObjId:()=>Ql,vaultObjId:()=>Kl});var Ul="DiBZq4UmVVYiRL6ZJmFKYoHcxtxqrhsCXSkFyT7wUr3j",Fl="success",ql="0x81c960dc653975fbd0072deca8afb92d322898c911622898ba1b2e3ad0c4bd8d",$l="0xc6ec0bdee0bb59a72077e9acd2f42457043cf47080b3d3fad4d39abf28bba63a",Kl="0xbc4021387fbac149119fd24e92be9e58f745774292f3a2a12e2ac6daf5363e1d",Vl="0x4178f63970fe2daeb256dc5730ad172e82b3e8eb45f31b33e0daae72cd35e1e1",Ql="0xe1e9aa7d222d151bfe6dd83358b0d7fdcb11260f710800cfaf7ccc1b1e245115",Hl={transaction:Ul,status:Fl,contractId:ql,roleObjId:$l,vaultObjId:Kl,feeObjId:Vl,upgradeCapObjId:Ql};var ir={};Jr(ir,{contractId:()=>Jl,default:()=>ed,feeObjId:()=>Zl,roleObjId:()=>Xl,status:()=>zl,transaction:()=>Gl,upgradeCapObjId:()=>td,vaultObjId:()=>Yl});var Gl="855FNDV8o8Z3fWULPnQo9qdhLJpsg7wZrkCpNyfw9KfB",zl="success",Jl="0xc357c3985e8fb875d6b37141497af660779aa1bab0ec489b2213efd74067d1fa",Xl="0x5ab49bdf9fd1413e328ef242b3f8d83dde791b38a0b627bfc87fb25c010d34f1",Yl="0xb483558770d8eb26007f193b75db40f0a45f2e36863a687625885d4de6993378",Zl="0x48453fc4d7cde3fe35aad89e5dfb496608a6a55ea529a1c0274681a808627f94",td="0x34279779a0d0d36bd5044b04830d607fa1b0ecf316548c8ac3a44151e4f1a42a",ed={transaction:Gl,status:zl,contractId:Jl,roleObjId:Xl,vaultObjId:Yl,feeObjId:Zl,upgradeCapObjId:td};var nd=Cn("testnet"),od=Cn("testnet"),ad=Cn("mainnet"),rd=Cn("mainnet"),id="https://bc3p6l5unl.execute-api.us-west-1.amazonaws.com/prod",sd="https://rolsbkota7.execute-api.us-west-1.amazonaws.com/prod",cd="https://6p6mkx33ne.execute-api.us-west-1.amazonaws.com/prod",ld="https://xrae3mrjv5.execute-api.us-west-1.amazonaws.com/prod",Ei=rr,Wi=ir,dd=new Map([["dev",{env:"dev",rpc:{url:nd},backend:{url:id},contract:Ei}],["stg",{env:"stg",rpc:{url:od},backend:{url:sd},contract:Ei}],["prev",{env:"prev",rpc:{url:ad},backend:{url:cd},contract:Wi}],["prod",{env:"prod",rpc:{url:rd},backend:{url:ld},contract:Wi}]]);function Li(a,t){let e=dd.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 pd}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 In=class extends k{constructor(){super(11,"Backend is not specified")}};var kn=class extends k{constructor(){super(1,"Wallet not connected")}};import At,{AxiosError as ud}from"axios";var vt=class extends k{constructor(t,e){super(10,t,{context:e})}};var Dn=class a{constructor(t){this.apiURL=t}static parseResponseData(t){if(t instanceof ud)throw new vt(t.response?.statusText);if(t.status===200){if(t.data.success)return t.data.data;throw new vt(t.data.code)}throw new vt(t.status.toString())}async getIncomingStreams(t,e){let n=await At.post(`${this.apiURL}/stream`,{recipient:t,...e});return a.parseResponseData(n)}async getOutgoingStreams(t,e){let n=await At.post(`${this.apiURL}/stream`,{sender:t,...e});return a.parseResponseData(n)}async getStreamHistory(t){let e=await At.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 At.post(`${this.apiURL}/stream-info`,{address:t});return a.parseResponseData(e)}async getAllRecipients(t,e){let n=await At.post(`${this.apiURL}/stream-info`,{sender:t,status:e});return a.parseResponseData(n)}async getAllSenders(t,e){let n=await At.post(`${this.apiURL}/stream-info`,{recipient:t,status:e});return a.parseResponseData(n)}};var Pt=class a{signer;suiClient;envConfig;_backend;constructor(t){this.envConfig=t,this.suiClient=new pd({url:t.rpc.url}),t.backend&&(this._backend=new Dn(t.backend.url))}static new(t,e){let n=Li(t,e);return new a(n)}get walletType(){return this.wallet?this.wallet.type:"disconnected"}get backend(){if(!this._backend)throw new In;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 kn;return this.signer}async walletAddress(){return this.wallet.address()}};import{SUI_TYPE_ARG as Bd,normalizeStructTag as Md,normalizeSuiAddress as ls}from"@mysten/sui.js/utils";import{TransactionBlock as Rn}from"@mysten/sui.js/transactions";import{TransactionBlock as Gi}from"@mysten/sui.js/transactions";import{SUI_TYPE_ARG as zi,normalizeStructTag as gd}from"@mysten/sui.js/utils";var sr=50n,xn=10000n,Ui=25n,cr=100000000n;var J=class{constructor(t){this.object=t}moveArg(t){return t.object(this.object)}},Ht=class{constructor(t){this.objects=t}moveArgs(t){return t.makeMoveVec({objects:this.objects.map(e=>t.object(e))})}},it=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 Fi}from"buffer";import{normalizeSuiAddress as md}from"@mysten/sui.js/utils";var Gt=class extends k{constructor(t,e){super(3,t,{context:e})}};var vn=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 Gt("Invalid contract return type.",{ctx:{expectType:"address",gotType:o}});return md(Fi.from(n).toString("hex"))}getU64(t=0,e=0){let[n,o]=this.getValue(t,e);if(o!=="u64")throw new Gt("Invalid contract return type.",{ctx:{expectType:"u64",gotType:o}});return Fi.from(n).readBigInt64LE()}};import{bcs as $i}from"@mysten/sui.js/bcs";var v=class extends k{constructor(t,e,n){super(2,`Invalid input: ${t}`,{context:{fieldKey:e,fieldValue:n}})}};var Ki={groupId:"string",name:"string"},fd=64;function Vi(a){return Qi(a),$i.ser(Ki,a).toString("base64")}function zt(a){let t=$i.de(Ki,a,"base64");return Qi(t),t}function Qi(a){if(!qi(a.name))throw new v("Invalid metadata: Name contains unknown character");if(!qi(a.groupId))throw new v("Invalid metadata: Group ID contains unknown character");if(a.name.length>fd)throw new v("Invalid metadata: Name exceed max length 64")}function qi(a){return/^[\x00-\x7F]+$/.test(a)}import{normalizeStructTag as An}from"@mysten/sui.js/utils";function Pn(a,t){return An(a)===An(t)}function st(a,t){return An(a)===An(t)}var On="txn.gas";import{nanoid as bd}from"nanoid";function Hi(){return bd()}var It=class a{constructor(t,e,n){this.globals=t;this.feeContract=e;this.streamContract=n}static convertCreateStreamInfoToInternal(t){return{metadata:Vi({name:t.name,groupId:Hi()}),coinType:gd(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 Gi,n=this.calculateFeesInternal(t),o=this.getCreateStreamCoinRequests(t,n),r=await this.wallet.requestCoins(o),i=await this.addMergeCoins(e,r[0]),s;o.length>1?s=await this.addMergeCoins(e,r[1]):s=i;for(let c=0;c<t.recipients.length;c++){let l=t.recipients[c],d=this.amountForRecipient(l,t.numberEpoch),u=this.getStreamFeeLocal(d),[p]=e.splitCoins(i,[e.pure(d+u,"u64")]),[m]=e.splitCoins(s,[e.pure(this.flatSuiFee,"u64")]);this.streamContract.createStream(e,{paymentCoin:new it(p),flatFeeCoin:new it(m),metadata:t.metadata,recipient:l.address,timeStart:t.startTime,cliff:l.cliffAmount,epochInterval:t.epochInterval,numEpoch:t.numberEpoch,amountPerEpoch:l.amountPerEpoch,cancelable:t.cancelable,coinType:t.coinType})}return e}calculateCreateStreamFees(t){let e=a.convertCreateStreamInfoToInternal(t);return this.calculateFeesInternal(e)}feeParams(){return{createFeePercent:{numerator:sr,denominator:xn},claimFeePercent:{numerator:Ui,denominator:xn},flatFeePerStream:cr}}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===On?n=t.gas:n=t.object(e.primaryCoin),n}getCreateStreamCoinRequests(t,e){let n=t.coinType;return Pn(n,zi)?[{coinType:n,amount:e.totalAmount+e.streamFeeAmount+e.flatFeeAmount}]:[{coinType:n,amount:e.totalAmount+e.streamFeeAmount},{coinType:zi,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 cr}getStreamFeeLocal(t){return t*sr/xn}async getStreamFeeRemote(t){let e=this.feeContract.streamingFee(new Gi,t),n=await this.globals.suiClient.devInspectTransactionBlock({sender:await this.globals.walletAddress(),transactionBlock:e});return new vn(n).getU64()}get wallet(){return this.globals.wallet}};import{Transactions as Xi}from"@mysten/sui.js/transactions";var Ji="0x0000000000000000000000000000000000000000000000000000000000000006";var Ot=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(Xi.MoveCall({target:n,arguments:e.arguments.map(o=>o instanceof Ht?o.moveArgs(t):o instanceof J?o.moveArg(t):o instanceof it?o.moveArg():t.pure(o)),typeArguments:e.typeArgs})),t}addTransactionBlock(t,e,n=[],o=[]){t.add(Xi.MoveCall({target:e,arguments:n.map(r=>r instanceof Ht?r.moveArgs(t):r instanceof J?r.moveArg(t):r instanceof it?r.moveArg():t.pure(r)),typeArguments:o}))}makeObject(t){return typeof t=="string"?new J(t):t}vaultObject(){return new J(this.config.vaultObjId)}roleObject(){return new J(this.config.roleObjId)}feeObject(){return new J(this.config.feeObjId)}clockObject(){return new J(Ji)}};var Rt=class a extends Ot{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 X=class a extends Ot{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 _t=class{constructor(t){this.globals=t;let e=t.envConfig.contract;this.feeContract=new Rt(e,t),this.streamContract=new X(e,t)}feeContract;streamContract;async createStreams(t){let e=It.convertCreateStreamInfoToInternal(t);return this.createStreamHelper().buildCreateStreamTransactionBlock(e)}createStreamHelper(){return new It(this.globals,this.feeContract,this.streamContract)}setAutoClaim(t,e,n){let o=new Rn;return this.streamContract.setAutoClaim(o,{streamId:t,enabled:e,coinType:n})}claimStream(t,e){let n=new Rn;return this.streamContract.claimStream(n,{streamId:t,coinType:e})}claimStreamByProxy(t,e){let n=new Rn;return this.streamContract.claimStreamByProxy(n,{streamId:t,coinType:e})}cancelStream(t,e){let n=new Rn;return this.streamContract.cancelStream(n,{streamId:t,coinType:e}),n}};var P=class extends k{constructor(t,e={}){super(0,t,e)}};async function dr(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 lr=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)}},Bt=class{constructor(t){this.requester=t;this.pager=new lr(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 _n=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 hd=25;async function Yi(a,t,e,n="0x2::sui::SUI",o=hd){let r=new ur(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 _n(n,e,i);return s}var ur=class extends Bt{constructor(e,n,o,r){super(new pr(e,n,o,r));this.suiClient=e;this.owner=n;this.coinType=o;this.reqPageSize=r}},pr=class{constructor(t,e,n,o){this.suiClient=t;this.owner=e;this.coinType=n;this.reqPageSize=o;if(o<=0)throw new P("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 Nn}from"@mysten/sui.js/transactions";import{normalizeStructTag as ts,parseStructTag as wd}from"@mysten/sui.js/utils";import{DateTime as Td}from"luxon";var Bn=class extends k{constructor(){super(7,"Connected wallet is not creator")}};var Jt=class extends k{constructor(){super(8,"Connected wallet is not recipient")}};var Xt=class extends k{constructor(t,e){super(6,t,{context:e})}};var Mn=class extends k{constructor(t){super(5,"Stream not found",{context:{streamId:t}})}};import{DateTime as yd,Duration as Sd}from"luxon";var Zi=(1n<<64n)-1n,jn=1e3;function mr(a){let t;typeof a=="number"?t=a:typeof a=="bigint"?t=Number(a):t=a.toMillis();let e=Math.round(t/jn);return yd.fromMillis(e*jn)}function fr(a){let t;typeof a=="number"?t=a:typeof a=="bigint"?t=Number(a):t=a.toMillis();let e=Math.round(t/jn);return Sd.fromMillis(e*jn)}var ct=class a{constructor(t,e,n){this.globals=t;this.streamId=e;this.rawData=n;this.streamContract=new X(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 P("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 Bn;let t=new Nn;return this.streamContract.cancelStream(t,{streamId:this.streamId,coinType:this.coinType}),t}async claim(){if(await this.globals.walletAddress()!==this.recipient)throw new Jt;let t=new Nn;return this.streamContract.claimStream(t,{streamId:this.streamId,coinType:this.coinType}),t}async setAutoClaim(t){if(await this.globals.walletAddress()!==this.recipient)throw new Jt;let e=new Nn;return this.streamContract.setAutoClaim(e,{streamId:this.streamId,coinType:this.coinType,enabled:t}),e}async claimByProxy(){let t=new Nn;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 ts(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 fr(this.rawData.config.epochInterval)}get groupId(){let{metadata:t}=this.rawData.config;return zt(t).groupId}get name(){let{metadata:t}=this.rawData.config;return zt(t).name}get recipient(){return this.rawData.config.recipient}get timeStart(){return mr(this.rawData.config.timeStart)}get duration(){let t=this.rawData.config,e=t.epochInterval*t.totalEpoch;return fr(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:mr((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===Zi?0n:this.rawData.status.epochClaimed*this.amountPerEpoch+this.cliff}get currentEpoch(){let t=Td.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 Mn(t):new Xt(`get stream data: ${e.error.code}`,{streamId:t,...e.error});let n=e.data.content;if(n.dataType!=="moveObject")throw new Xt("Unexpected object type",{gotType:n.dataType});let{typeParams:o}=wd(n.type),r=ts(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 br,SUI_TYPE_ARG as Cd}from"@mysten/sui.js/utils";import{Duration as es}from"luxon";var En=class extends k{constructor(t,e){super(12,`Transaction failed: ${e}`,{context:{status:t,msg:e}})}};var Id=1e3,Wn=class{constructor(t){this.globals=t;this.coinMetaHelper=new gr(t.suiClient),this.createStreamHelper=new _t(t).createStreamHelper()}coinMetaHelper;createStreamHelper;getStreamIdsFromCreateStreamResponse(t){if(t.effects?.status.status!=="success")throw new En(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 v("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 v("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 v("Invalid stream steps: 0");let e=BigInt(t.total.toMillis())/t.steps,n=t.timeStart.plus(es.fromMillis(Number(e*t.steps))),o={timeStart:t.timeStart,timeEnd:n,interval:es.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:br(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:br(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 v("Stream amount too small","totalAmount",e);if(t.cliffAmount>t.realTotalAmount)throw new v("Invalid cliff settings")}validateTimeline(t){if(t.interval.toMillis()<Id)throw new v("Interval shall be at least 1 second","interval",t.interval)}},gr=class{constructor(t){this.suiClient=t;this.coinMetaReg=new Map}coinMetaReg;async getCoinMeta(t){let e=br(t||Cd);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 ns,normalizeSuiAddress as Un}from"@mysten/sui.js/utils";import{DateTime as os}from"luxon";var Mt=class extends k{constructor(t,e){super(9,`Invalid stream group: ${t}`,{context:e})}};var kd=25;async function yr(a,t,e){let n=new Yt(t),o=new Zt(a,n,e);return await dr(o)}var Yt=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]}},Zt=class extends Bt{constructor(e,n,o){super(new hr(e,n,o));this.suiClient=e;this.idIter=n;this.options=o}},hr=class{constructor(t,e,n){this.suiClient=t;this.stringIter=e;this.options=n;this.filter=n?.filter,this.pageSize=n?.pageSize||kd,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 Ln=class a{constructor(t,e){this.globals=t;this.streams=e;if(e.length===0)throw new Mt("stream size 0");let n=e.map(r=>r.groupId);if(new Set(n).size!==1)throw new v("Stream does not have same group ID")}type="StreamGroup";static async new(t,e){let n=await yr(t.suiClient,e);return n.forEach(o=>{if(!o)throw new P("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=>{Dd(n,r)||(o=!1)}),o}async refresh(){let t=await yr(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)=>ct.fromObjectData(t,e[i],r)).filter(r=>!!r);if(new Set(o.map(r=>r.groupId)).size!==1)throw new Mt("Not same group ID");if(!this.checkStreamGroup(o))throw new Mt("Not same stream settings");return o}};function Dd(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 te=class a{constructor(t,e){this.it=t;this.pageSize=e}static async newIncoming(t){let e=await Fn.newIncoming(t);return new a(e,t.pageSize)}static async newOutgoing(t){let e=await Fn.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}},Fn=class a{constructor(t){this.requester=t}cachedNext;static async newIncoming(t){let e=await qn.newIncomingQuery(t);return new a(e)}static async newOutgoing(t){let e=await qn.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 P("No more results");return e}let t=this.cachedNext;if(this.cachedNext=void 0,t===null)throw new P("No more results");return t}},qn=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 Yt(n.flat().map(i=>i.streamId));this.objectIter=new Zt(t.suiClient,r)}current=0;objectIter;static async newIncomingQuery(t){let e=Od(t.query),n=await t.globals.walletAddress(),r=(await t.globals.backend.getIncomingStreams(n,e)).filter(s=>Un(s.recipient)===Un(n)),i=as(r);return new a(t.globals,n,i,t.query)}static async newOutgoingQuery(t){let e=Rd(t.query),n=await t.globals.walletAddress(),o=await t.globals.backend.getOutgoingStreams(n,e),r=as(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 Ad(this.globals,t[0].streamId,this.objectIter);return this.current++,rs(e,this.query)?e:this.doNextRequest()}if(t.length>1){let e=await Pd(this.globals,t.map(n=>n.streamId),this.objectIter);return this.current++,vd(e,this.query)?e:this.doNextRequest()}throw new P("Stream group with no stream")}};function as(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)=>os.fromISO(n[0].createDate).toMillis()-os.fromISO(e[0].createDate).toMillis())}function rs(a,t){if(t===void 0)return!0;let e=xd(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 xd(a,t){return t===void 0?!0:Array.isArray(t)?t.includes(a.progress.status):a.progress.status===t}function vd(a,t){if(!t)return!0;let e=!1;return a.streams.forEach(n=>{rs(n,t)&&(e=!0)}),e}async function Ad(a,t,e){let n=await is(e,t);return ct.fromObjectData(a,t,n)}async function Pd(a,t,e){let n=[];for(;n.length<t.length;){let o=await is(e,t[n.length]);n.push(o)}return Ln.newFromObjectResponse(a,t,n)}async function is(a,t){if(!await a.hasNext())throw new P("object iterator has been consumed");let e=await a.next();if(!e||e.error||e.data===void 0||e.data===null)throw new P("object iterator undefined response",{cause:e?.error});if(e?.data?.objectId!==t)throw new P("stream id not aligned");return e}function Od(a){return{status:Sr(a?.status),coinType:ss(a?.coinType),sender:cs(a?.sender)}}function Rd(a){return{status:Sr(a?.status),coinType:ss(a?.coinType),recipient:cs(a?.recipient)}}function Sr(a){return a===void 0||a.length===0?"all":Array.isArray(a)?a.reduce((t,e)=>{let n=Sr(e);return!t||t===n?n:"all"},void 0):_d(a)}function _d(a){switch(a){case"STREAMING":case"STREAMED":case"CANCELED":return"active";case"COMPLETED":case"SETTLED":return"inactive";default:throw new v("Unknown stream filtered status")}}function ss(a){if(a)return Array.isArray(a)?a.length!==0?a.map(t=>ns(t)):void 0:ns(a)}function cs(a){if(a)return Array.isArray(a)?a.length!==0?a.map(t=>Un(t)):void 0:Un(a)}var wr=class{constructor(t){this.msafe=t}get type(){return"msafe"}async address(){return this.msafe.address()}async requestCoins(t){return this.msafe.requestCoins(t)}},$n=class{constructor(t){this.account=t}async address(){return this.account.address}},Tr=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(Pn(t.coinType,Bd))return{primaryCoin:On};if(t.amount<=0)throw new v("Invalid coin request","coinAmount",t.amount);let e=await Yi(this.suiClient,await this.address(),t.amount,t.coinType);if(e.length===0)throw new P("no coins available");return{primaryCoin:e[0].coinObjectId,mergedCoins:e.slice(1).map(n=>n.coinObjectId)}}},Kn=class{globals;helper;constructor(t,e){this.globals=Pt.new(t,e),this.helper=new Wn(this.globals)}connectSingleWallet(t){let e=new Tr(t,this.globals.suiClient);this.globals.connectWallet(e)}connectMSafeAccount(t){let e=new wr(t);this.globals.connectWallet(e)}async createStream(t){return this.builder().createStreams(t)}async getStream(t){return ct.new(this.globals,t)}async getIncomingStreams(t,e=10){return te.newIncoming({globals:this.globals,query:t,pageSize:e})}async getOutgoingStreams(t,e=10){return te.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=>Md(n))}async getRecipientsForStreamFilter(t){let e=await this.wallet.address();return(await this.globals.backend.getAllRecipients(e,t)).map(o=>ls(o))}async getCreatorsForStreamFilter(t){let e=await this.wallet.address();return(await this.globals.backend.getAllSenders(e,t)).map(o=>ls(o))}get wallet(){return this.globals.wallet}builder(){return new _t(this.globals)}};var Q=class extends y{application="mpay";getClient(t,e){let n=new Kn(t==="sui:mainnet"?"prod":"dev");return n.connectSingleWallet(new $n(e)),n}};var ee=class extends Q{constructor(e){super(e);this.data=e}txType=Nd.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 Ed}from"@msafe/sui3-utils";var ne=class extends Q{constructor(e){super(e);this.data=e}txType=Ed.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 Wd}from"@msafe/sui3-utils";var oe=class extends Q{constructor(e){super(e);this.data=e}txType=Wd.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 Ld}from"@msafe/sui3-utils";var ae=class extends Q{constructor(e){super(e);this.data=e}txType=Ld.Stream;txSubType="CreateStream";async build(e){let{network:n,account:o}=e;return this.getClient(n,o).createStream(this.data)}};import{bcs as ds}from"@mysten/sui.js/bcs";import{normalizeStructTag as Ud,normalizeSuiAddress as re}from"@mysten/sui.js/utils";var jt=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 re(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 ds.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 re(t.value.Object.ImmOrOwned.objectId)}return re(t.value)}static getSharedObjectId(t){if(t.type!=="object")throw new Error(`not object argument: ${JSON.stringify(t)}`);if(typeof t.value!="object")return re(t.value);if(!("Object"in t.value)||!("Shared"in t.value.Object))throw new Error("not Shared");return re(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 ds.de(e,new Uint8Array(n))}typeArg(t){return Ud(this.moveCall.typeArguments[t])}txArg(t){return this.moveCall.arguments[t]}};var Vn=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"&&st(e.target,this.contract.createStreamTarget));if(t.length===0)throw new P("No create stream transactions");return t.map(e=>new jt(e,this.txb))}getCreationInfoFromMoveCall(t){let e=t.decodeInputString(4),{name:n,groupId:o}=zt(e),r=t.decodeInputAddress(5),i=t.decodeInputU64(6),s=t.decodeInputU64(7),c=t.decodeInputU64(8),l=t.decodeInputU64(9),d=t.decodeInputU64(10),u=t.decodeInputBool(11),p=t.typeArg(0);return{name:n,groupId:o,recipient:r,timeStart:i,cliff:s,epochInterval:c,totalEpoch:l,amountPerEpoch:d,cancelable:u,coinType:p}}aggregateGroupStreamInfo(t){if(new Set(t.map(o=>JSON.stringify({name:o.name,groupId:o.groupId,timeStart:String(o.timeStart),epochInterval:String(o.epochInterval),totalEpoch:String(o.totalEpoch),cancelable:o.cancelable,coinType:o.coinType}))).size!==1)throw new v("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 X(this.globals.envConfig.contract,this.globals)}get feeContract(){return new Rt(this.globals.envConfig.contract,this.globals)}createStreamHelper(){return new It(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 Qn=class{constructor(t,e){this.globals=t;this.txb=e;this.contract=new X(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"&&st(e.target,this.contract.createStreamTarget))!==-1}isSetAutoClaimTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&&st(this.transactions[0].target,this.contract.setAutoClaimTarget)}isCancelStreamTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&&st(this.transactions[0].target,this.contract.cancelStreamTarget)}isClaimStreamTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&&st(this.transactions[0].target,this.contract.claimStreamTarget)}isClaimByProxyTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&&st(this.transactions[0].target,this.contract.claimStreamByProxyTarget)}decodeCreateStreamTransaction(){return new Vn(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 jt(t,this.txb)}};import{TransactionType as Fd}from"@msafe/sui3-utils";var ie=class extends Q{constructor(e){super(e);this.data=e}txType=Fd.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 Hn=class{application="mpay";supportSDK="@mysten/sui.js";async deserialize(t){let{network:e,transactionBlock:n}=t,o=Pt.new(e==="sui:mainnet"?"prod":"dev"),i=new Qn(o,n).decode(),s;switch(i.type){case"CreateStream":s=new ae(i.info);break;case"SetAutoClaim":s=new ie({streamId:i.streamId,enabled:i.enabled});break;case"Claim":s=new oe({streamId:i.streamId});break;case"ClaimByProxy":s=new ne({streamId:i.streamId});break;case"Cancel":s=new ee({streamId:i.streamId});break;default:throw new Error(`Unknown transaction type: ${i}`)}return{txType:s.txType,txSubType:s.txSubType,intentionData:s.data}}async build(t){let{intentionData:e}=t,n;switch(t.txSubType){case"CreateStream":n=new ae(e);break;case"Claim":n=new oe(e);break;case"ClaimByProxy":n=new ne(e);break;case"SetAutoClaim":n=new ie(e);break;case"Cancel":n=new ee(e);break;default:throw new Error("not implemented")}return n.build({...t})}};import{TransactionDefaultApplication as Qd,TransactionSubTypes as Cr}from"@msafe/sui3-utils";import{buildCoinTransferTxb as qd}from"@msafe/sui3-utils";var Gn=class a extends y{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o}=e;return qd(n,this.data,o.address)}static fromData(e){return new a(e)}};import{buildObjectTransferTxb as $d}from"@msafe/sui3-utils";var zn=class a extends y{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o}=e;return $d(n,this.data,o.address)}static fromData(e){return new a(e)}};import{isSameAddress as Kd}from"@msafe/sui3-utils";import{TransactionBlock as Vd}from"@mysten/sui.js/transactions";var Jn=class a extends y{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{account:n}=e,o=Vd.from(this.data.content);if(!Kd(o.blockData.sender,n.address))throw new Error("Invalid sender address");return o}static fromData(e){return new a(e)}};var Xn=class{application="msafe-core";supportSDK="@mysten/sui.js";constructor(){this.application=Qd}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 Cr.assets.coin.send:o=Gn.fromData(t.intentionData);break;case Cr.assets.object.send:o=zn.fromData(t.intentionData);break;case Cr.others.plain:o=Jn.fromData(t.intentionData);break;default:throw new Error("not implemented")}return o.build({suiClient:e,account:n})}};import{TransactionType as eu}from"@msafe/sui3-utils";var us=!1,se={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 Ir(){if(!us)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&&(se.ProtocolPackage=t),e&&(se.borrowFee=e),n&&(se.borrowFeeAddress=n),o&&(se.pool=o),us=!0}catch(a){console.error(a.message)}}var h=se;import{TransactionType as Nt}from"@msafe/sui3-utils";import{bcs as ps}from"@mysten/sui.js/bcs";import{normalizeStructTag as Gd,normalizeSuiAddress as ce}from"@mysten/sui.js/utils";var Yn=class{constructor(t){this.txb=t}decode(){if(console.log("txb",this.txb),this.isClaimRewardTransaction())return this.decodeClaimReward();if(this.isEntryBorrowTransaction())return this.decodeEntryBorrow();if(this.isEntryBorrowWithFeeTransaction())return this.decodeEntryBorrow();if(this.isEntryMultiDepositTransaction())return this.decodeEntryMultiDeposit();if(this.isEntryDepositTransaction())return this.decodeEntryDeposit();if(this.isEntryRepayTransaction())return this.decodeEntryRepay();if(this.isEntryWithdrawTransaction())return this.decodeEntryWithdraw();throw new Error("Unknown transaction type")}get transactions(){return this.txb.blockData.transactions}getMoveCallTransaction(t){return this.transactions.find(e=>e.kind==="MoveCall"&&e.target===t)}isClaimRewardTransaction(){return!!this.getMoveCallTransaction(`${h.ProtocolPackage}::incentive_v2::claim_reward`)}isEntryBorrowTransaction(){return!!this.getMoveCallTransaction(`${h.ProtocolPackage}::incentive_v2::entry_borrow`)}isEntryBorrowWithFeeTransaction(){return!!this.getMoveCallTransaction(`${h.ProtocolPackage}::incentive_v2::borrow`)}isEntryMultiDepositTransaction(){let t=`${h.ProtocolPackage}::incentive_v2::entry_deposit`,e=this.transactions.filter(o=>o.kind==="MoveCall"&&o.target===t);return this.transactions.find(o=>o.kind==="MoveCall"&&o.target===`${h.ProtocolPackage}::incentive_v2::claim_reward_non_entry`)?!1:e.length>1}isEntryDepositTransaction(){return!!this.getMoveCallTransaction(`${h.ProtocolPackage}::incentive_v2::entry_deposit`)}isEntryRepayTransaction(){return!!this.getMoveCallTransaction(`${h.ProtocolPackage}::incentive_v2::entry_repay`)}isEntryWithdrawTransaction(){return!!this.getMoveCallTransaction(`${h.ProtocolPackage}::incentive_v2::entry_withdraw`)}findPoolByAssetId(t){let e=Object.values(h.pool).find(n=>n.assetId===t);if(!e)throw new Error("Pool not found");return e}decodeClaimReward(){let t=[];return this.transactions.forEach(e=>{if(e.kind==="MoveCall"&&e.target===`${h.ProtocolPackage}::incentive_v2::claim_reward`){let n=new le(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:Nt.Other,type:"ClaimReward",intentionData:{claims:t}}}decodeEntryBorrow(){let t=this.helper.decodeInputU8(4),e=this.helper.decodeInputU64(5),n=this.findPoolByAssetId(t);return{txType:Nt.Other,type:"EntryBorrow",intentionData:{amount:e,coinType:n.coinType}}}decodeEntryMultiDeposit(){let t=[],e=`${h.ProtocolPackage}::incentive_v2::entry_deposit`;return this.transactions.forEach(n=>{if(n.kind==="MoveCall"&&n.target===e){let o=new le(n,this.txb),r=o.decodeInputU8(3),i=o.decodeInputU64(5),s=this.findPoolByAssetId(r);t.push({coinType:s.coinType,amount:i})}}),{txType:Nt.Other,type:"EntryMultiDeposit",intentionData:{list:t}}}decodeEntryDeposit(){let t=this.helper.decodeInputU8(3),e=this.helper.decodeInputU64(5),n=this.findPoolByAssetId(t);return{txType:Nt.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:Nt.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:Nt.Other,type:"EntryWithdraw",intentionData:{amount:e,coinType:n.coinType}}}get helper(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(h.ProtocolPackage));return new le(t,this.txb)}},le=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 ps.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 ps.de(e,new Uint8Array(n))}typeArg(t){return Gd(this.moveCall.typeArguments[t])}txArg(t){return this.moveCall.arguments[t]}};import{TransactionBlock as zd}from"@mysten/sui.js/transactions";function Et(a,t,e,n){return a.moveCall({target:`${h.ProtocolPackage}::incentive_v2::entry_deposit`,arguments:[a.object("0x06"),a.object(h.StorageId),a.object(t.poolId),a.pure(t.assetId),e,a.pure(n),a.object(h.Incentive),a.object(h.IncentiveV2)],typeArguments:[t.type]}),a}function ms(a,t,e){return a.moveCall({target:`${h.ProtocolPackage}::incentive_v2::entry_withdraw`,arguments:[a.object("0x06"),a.object(h.PriceOracle),a.object(h.StorageId),a.object(t.poolId),a.pure(t.assetId),a.pure(e),a.object(h.Incentive),a.object(h.IncentiveV2)],typeArguments:[t.type]}),a}function fs(a,t,e,n){let o=a.moveCall({target:`${h.ProtocolPackage}::incentive_v2::borrow`,arguments:[a.object("0x06"),a.object(h.PriceOracle),a.object(h.StorageId),a.object(t.poolId),a.pure(t.assetId),a.pure(e),a.object(h.IncentiveV2)],typeArguments:[t.type]}),[r]=a.moveCall({target:"0x02::coin::from_balance",typeArguments:[t.type],arguments:[o]});if(h.borrowFee>0){let[i]=a.splitCoins(r,[a.pure(Math.floor(e*h.borrowFee))]);a.transferObjects([r],a.pure(n)),a.transferObjects([i],a.pure(h.borrowFeeAddress))}else a.transferObjects([r],a.pure(n));return a}function kr(a,t,e,n){return a.moveCall({target:`${h.ProtocolPackage}::incentive_v2::entry_repay`,arguments:[a.object("0x06"),a.object(h.PriceOracle),a.object(h.StorageId),a.object(t.poolId),a.pure(t.assetId),e,a.pure(n),a.object(h.IncentiveV2)],typeArguments:[t.type]}),a}function bs(a,t,e,n,o){return a.moveCall({target:`${h.ProtocolPackage}::incentive_v2::claim_reward`,arguments:[a.object("0x06"),a.object(h.IncentiveV2),a.object(e),a.object(h.StorageId),a.pure(t),a.pure(n)],typeArguments:o}),a}var Zn=class a extends y{constructor(e){super(e);this.data=e}txType;txSubType;async build(){let{claims:e}=this.data,n=new zd;return e.forEach(o=>{let{assetId:r,poolId:i,option:s,typeArguments:c}=o;bs(n,r,i,s,c)}),n}static fromData(e){return new a(e)}};import{TransactionBlock as Jd}from"@mysten/sui.js/transactions";var to=class a extends y{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{coinType:n,amount:o}=this.data,r=new Jd;console.log("build",this.data);let i=h.pool[n];if(!i)throw new Error(`${n} not support, please use ${Object.keys(h.pool).join(", ")}.`);return fs(r,i,o,e.account.address)}static fromData(e){return new a(e)}};import{TransactionBlock as Xd}from"@mysten/sui.js/transactions";async function Wt(a,t,e){let n=await a.getCoins({owner:t,coinType:e});return console.log("getTokenObjs",t,n),n}var eo=class a extends y{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 Xd;if(console.log("build",this.data),r==="sui"){let[u]=s.splitCoins(s.gas,[i]);return Et(s,h.pool.sui,u,i)}let c=h.pool[r];if(!c)throw new Error(`${r} not support, please use ${Object.keys(h.pool).join(", ")}.`);let l=await Wt(n,o.address,c.type);if(!l.data[0])throw new Error(`Insufficient balance for ${c.name} Token`);let d=l.data[0].coinObjectId;if(l.data.length>=2){let u=1;for(;u<l.data.length;)s.mergeCoins(d,[l.data[u].coinObjectId]),u++}return Et(s,c,s.object(d),i)}static fromData(e){return new a(e)}};import{TransactionBlock as Yd}from"@mysten/sui.js/transactions";var no=class a extends y{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 Yd;if(console.log("build",this.data),r==="sui"){let[u]=s.splitCoins(s.gas,[i]);return kr(s,h.pool.sui,u,i)}let c=h.pool[r];if(!c)throw new Error(`${r} not support, please use ${Object.keys(h.pool).join(", ")}.`);let l=await Wt(n,o.address,c.type);if(!l.data[0])throw new Error(`Insufficient balance for ${c.name} Token`);let d=l.data[0].coinObjectId;if(l.data.length>=2){let u=1;for(;u<l.data.length;)s.mergeCoins(d,[l.data[u].coinObjectId]),u++}return kr(s,c,s.object(d),i)}static fromData(e){return new a(e)}};import{TransactionBlock as Zd}from"@mysten/sui.js/transactions";var oo=class a extends y{constructor(e){super(e);this.data=e}txType;txSubType;async build(){let{coinType:e,amount:n}=this.data,o=new Zd;console.log("build",this.data);let r=h.pool[e];if(!r)throw new Error(`${e} not support, please use ${Object.keys(h.pool).join(", ")}.`);return ms(o,r,n)}static fromData(e){return new a(e)}};import{TransactionBlock as tu}from"@mysten/sui.js/transactions";var ao=class a extends y{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o}=e,{list:r}=this.data,i=new tu;console.log("build",this.data);for(let s=0;s<r.length;s++){let{coinType:c,amount:l}=r[s];if(c==="sui"){let[m]=i.splitCoins(i.gas,[l]);Et(i,h.pool.sui,m,l);continue}let d=h.pool[c];if(!d)throw new Error(`${c} not support, please use ${Object.keys(h.pool).join(", ")}.`);let u=await Wt(n,o.address,d.type);if(!u.data[0])throw new Error(`Insufficient balance for ${d.name} Token`);let p=u.data[0].coinObjectId;if(u.data.length>=2){let m=1;for(;m<u.data.length;)i.mergeCoins(p,[u.data[s].coinObjectId]),m++}Et(i,d,i.object(p),l)}return i}static fromData(e){return new a(e)}};var ro=class{application="navi";supportSDK="@mysten/sui.js";async deserialize(t){await Ir();let{transactionBlock:e}=t,o=new Yn(e).decode();return{txType:eu.Other,txSubType:o.type,intentionData:o.intentionData}}async build(t){let{suiClient:e,account:n}=t,o;switch(await Ir(),t.txSubType){case"EntryDeposit":o=eo.fromData(t.intentionData);break;case"EntryBorrow":o=to.fromData(t.intentionData);break;case"EntryRepay":o=no.fromData(t.intentionData);break;case"EntryWithdraw":o=oo.fromData(t.intentionData);break;case"EntryMultiDeposit":o=ao.fromData(t.intentionData);break;case"ClaimReward":o=Zn.fromData(t.intentionData);break;default:throw new Error("not implemented")}return o.build({suiClient:e,account:n})}};import{TransactionSubTypes as nu,TransactionType as gs}from"@msafe/sui3-utils";import{fromHEX as ou,toHEX as au}from"@mysten/bcs";import{Transaction as ru}from"@mysten/sui/transactions";import iu from"sort-keys-recursive";var hs="msafe-plain-tx",ys=nu.others.plain,Dr=class a{constructor(t){this.data=t}application=hs;txType=gs.Other;txSubType=ys;serialize(){return JSON.stringify(iu(this.data))}async build(t){return ru.from(ou(this.data.content))}static fromData(t){return new a(t)}},io=class{application;supportSDK="@mysten/sui";constructor(){this.application=hs}async deserialize(t){let{transaction:e}=t,n=await e.build({client:t.suiClient});return{txType:gs.Other,txSubType:ys,intentionData:{content:au(n)}}}async build(t){let{account:e}=t,o=await Dr.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 Ss}from"@mysten/sui/client";import{Transaction as mu}from"@mysten/sui/transactions";import{SuiClient as Ar}from"@mysten/sui.js/client";import{TransactionBlock as fu}from"@mysten/sui.js/transactions";import{RequestManager as du,HTTPTransport as uu,Client as pu}from"@open-rpc/client-js";var su={"-32700":"ParseError","-32600":"InvalidRequest","-32601":"MethodNotFound","-32602":"InvalidParams","-32603":"InternalError"},xr=class extends Error{},so=class extends xr{code;type;constructor(t,e){super(t),this.code=e,this.type=su[e]??"ServerError"}};function cu(a){let t=new URL(a);return t.protocol=t.protocol.replace("http","ws"),t.toString()}var lu={WebSocketConstructor:typeof WebSocket<"u"?WebSocket:void 0,callTimeout:3e4,reconnectTimeout:3e3,maxReconnects:5},co=class{endpoint;options;#n=0;#a=0;#t=null;#e=null;#r=new Set;#o=new Map;constructor(t,e={}){this.endpoint=t,this.options={...lu,...e},this.endpoint.startsWith("http")&&(this.endpoint=cu(this.endpoint))}async makeRequest(t,e){let n=await this.#i();return new Promise((o,r)=>{this.#n+=1,this.#o.set(this.#n,{resolve:o,reject:r,timeout:setTimeout(()=>{this.#o.delete(this.#n),r(new Error(`Request timeout: ${t}`))},this.options.callTimeout)}),n.send(JSON.stringify({jsonrpc:"2.0",id:this.#n,method:t,params:e}))}).then(({error:o,result:r})=>{if(o)throw new so(o.message,o.code);return r})}#i(){return this.#e?this.#e:(this.#e=new Promise(t=>{this.#t?.close(),this.#t=new this.options.WebSocketConstructor(this.endpoint),this.#t.addEventListener("open",()=>{this.#a=0,t(this.#t)}),this.#t.addEventListener("close",()=>{this.#a++,this.#a<=this.options.maxReconnects&&setTimeout(()=>{this.#s()},this.options.reconnectTimeout)}),this.#t.addEventListener("message",({data:e})=>{let n;try{n=JSON.parse(e)}catch(o){console.error(new Error(`Failed to parse RPC message: ${e}`,{cause:o}));return}if("id"in n&&n.id!=null&&this.#o.has(n.id)){let{resolve:o,timeout:r}=this.#o.get(n.id);clearTimeout(r),o(n)}else if("params"in n){let{params:o}=n;this.#r.forEach(r=>{r.subscriptionId===o.subscription&&o.subscription===r.subscriptionId&&r.onMessage(o.result)})}})}),this.#e)}async#s(){return this.#t?.close(),this.#e=null,Promise.allSettled([...this.#r].map(t=>t.subscribe(this)))}async subscribe(t){let e=new vr(t);return this.#r.add(e),await e.subscribe(this),()=>e.unsubscribe(this)}},vr=class{subscriptionId=null;input;subscribed=!1;constructor(t){this.input=t}onMessage(t){this.subscribed&&this.input.onMessage(t)}async unsubscribe(t){let{subscriptionId:e}=this;return this.subscribed=!1,e==null?!1:(this.subscriptionId=null,t.makeRequest(this.input.unsubscribe,[e]))}async subscribe(t){this.subscriptionId=null,this.subscribed=!0;let e=await t.makeRequest(this.input.method,this.input.params);this.subscribed&&(this.subscriptionId=e)}};var lt=class{rpcClient;websocketClient;constructor({url:t,websocket:{url:e,...n}={},rpc:o}){let r=new uu(o?.url??t,{headers:{"Content-Type":"application/json",...o?.headers}});this.rpcClient=new pu(new du([r])),this.websocketClient=new co(e??t,n)}async request(t){return await this.rpcClient.request(t)}async subscribe(t){let e=await this.websocketClient.subscribe(t);return async()=>!!await e()}};var lo=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 Or(t))}addHelper(t){this.apps.set(t.application,new Pr(t))}getAppHelper(t){let e=this.apps.get(t);if(!e)throw new Error(`${t} not registered`);return e}},Pr=class{constructor(t){this.helper=t}async deserialize(t){let e=new Ss({transport:new lt({url:t.clientUrl,rpc:{url:t.clientUrl}})}),n=new Ar({transport:new lt({url:t.clientUrl,rpc:{url:t.clientUrl}})}),o=await t.transactionBlock.build({client:n}),r=mu.from(o);return this.helper.deserialize({...t,suiClient:e,transaction:r})}async build(t){let e=new Ss({transport:new lt({url:t.clientUrl,rpc:{url:t.clientUrl}})}),n=await e.getBalance({owner:t.account.address});if(Number(n.totalBalance)<1e8)throw new Error("Insufficient gas fee");let o=await this.helper.build({...t,suiClient:e});o.setSender(t.account.address);let r=await o.build({client:e});return fu.from(r)}},Or=class{constructor(t){this.helper=t}async deserialize(t){let e=new Ar({transport:new lt({url:t.clientUrl,rpc:{url:t.clientUrl}})});return this.helper.deserialize({...t,transactionBlock:t.transactionBlock,suiClient:e})}async build(t){let e=new Ar({transport:new lt({url:t.clientUrl,rpc:{url:t.clientUrl}})}),n=await e.getBalance({owner:t.account.address});if(Number(n.totalBalance)<1e8)throw new Error("Insufficient gas fee");return this.helper.build({...t,suiClient:e})}};import{TransactionType as qu}from"@msafe/sui3-utils";import{TransactionType as O}from"@msafe/sui3-utils";var dt=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 ws="https://sui.apis.scallop.io";var Ts="675c65cd301dd817ea262e76",uo="0xefe8b36d5b2e43728cc323298626b83177803521d195cfb11e15b910e892fddf";var ut="0x7016aae72cfc67f2fadf55769c0a7dd54291a583b63051a5ed71081cce836ac6::sca::SCA",pt="0xc63072e7f5f4983a2efaf5bdba1480d5e7d74d57948e1c7cc436f8e22cbeb410",Z=["weth","wbtc","wusdc","wusdt","sui","wapt","wsol","cetus","afsui","hasui","vsui","sca","usdc","fdusd","deep","fud"],po=["weth","wbtc","wusdc","wusdt","sui","wapt","wsol","cetus","afsui","hasui","vsui","sca","usdc","fdusd"],mt=["sweth","ssui","swusdc","swusdt","scetus","safsui","shasui","svsui","susdc"],tt=["ssui","swusdc","swusdt","safsui","shasui","svsui","sweth","ssca","scetus","swbtc","swsol","susdc","sfdusd","sdeep","sfud"];var Cs=["sui"],ft=["sui","wusdc","wusdt","afsui","hasui","vsui","weth","sca","wbtc","wsol","usdc","fdusd","deep","fud"];var Is={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,fud:5,deep:6,fdusd:6,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,sdeep:6,sfud:5,sfdusd:6,scallop_deep:6,scallop_fud:5,scallop_sca:9,scallop_sui:9};var mo={sweth:"sui",ssui:"sui",swusdc:"sui",swusdt:"sui",scetus:"sui",safsui:"sui",shasui:"sui",svsui:"sui",susdc:"sui"},ks={sui:["sui","sca","scallop_sca","scallop_sui"],wusdc:["sui","sca","scallop_sca","scallop_sui"],wusdt:["sui","sca","scallop_sca","scallop_sui"],afsui:["sui","sca","scallop_sca","scallop_sui"],hasui:["sui","sca","scallop_sca","scallop_sui"],vsui:["sui","sca","scallop_sca","scallop_sui"],sca:["sui","sca","scallop_sca","scallop_sui"],weth:["sui","sca","scallop_sca","scallop_sui"],wbtc:["sui","sca","scallop_sca","scallop_sui"],wsol:["sui","sca","scallop_sca","scallop_sui"],usdc:["sui","sca","scallop_sca","scallop_sui"],fud:["sui","sca","scallop_fud","scallop_sui","scallop_sca"],deep:["sui","sca","scallop_deep","scallop_sui","scallop_sca"],fdusd:["sui","sca","scallop_sca","scallop_sui"]},Ds={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",fud:"0x76cb819b01abed502bee8a702b4c2d547532c12f25001c9dea795a5e631c26f1",deep:"0xdeeb7a4662eec9f2f3def03fb937a663dddaa2e215b8078a284d026b7946c270",fdusd:"0xf16e6b723f242ec745dfd7634ad072c42d5c1d9ac9d62a39c381303eaa57693a",scallop_deep:"0xeb7a05a3224837c5e5503575aed0be73c091d1ce5e43aa3c3e716e0ae614608f",scallop_fud:"0xe56d5167f427cbe597da9e8150ef5c337839aaf46891d62468dcf80bdd8e10d1",scallop_sca:"0x5ca17430c1d046fae9edeaa8fd76c7b4193a00d764a0ecfa9418d733ad27bc1e",scallop_sui:"0xaafc4f740de0dd0dde642a31148fb94517087052f19afb0f7bed1dc41a50c77b"},$={weth:"0xaf8cd5edc19c4512f4259f0bee101a40d41ebed738ade5874359610ef8eeced5",wbtc:"0x027792d9fed7f9844eb4839566001bb6f6cb4804f66aa2da6fe1ee242d896881",wusdc:"0x5d4b302506645c37ff133b98c4b50a5ae14841659738d6d733d59d0d217a93bf",wusdt:"0xc060006111016b8a020ad5b33834984a437aaa7d3c74c18e09a95d48aceab08c",wapt:"0x3a5143bb1196e3bcdfab6203d1683ae29edd26294fc8bfeafe4aaa9d2704df37",wsol:"0xb7844e289a8410e50fb3ca48d69eb9cf29e27d223ef90353fe1bd8e27ff8f3f8"},Rr={vsui:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55"},xs={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",sfdusd:"0x6711551c1e7652a270d9fbf0eee25d99594c157cde3cb5fbb49035eb59b1b001::scallop_fdusd::SCALLOP_FDUSD",sdeep:"0xeb7a05a3224837c5e5503575aed0be73c091d1ce5e43aa3c3e716e0ae614608f::scallop_deep::SCALLOP_DEEP",sfud:"0xe56d5167f427cbe597da9e8150ef5c337839aaf46891d62468dcf80bdd8e10d1::scallop_fud::SCALLOP_FUD"};import{bcs as vs}from"@mysten/sui.js/bcs";import{normalizeStructTag as bu,normalizeSuiAddress as de}from"@mysten/sui.js/utils";var w=class a{constructor(t,e){this.moveCall=t;this.txb=e}decodeSharedObjectId(t){let e=this.getInputParam(t);return a.getSharedObjectId(e)}decodeOwnedObjectId(t){let e=this.getInputParam(t);return a.getOwnedObjectId(e)}decodeInputU64(t){let e=this.decodePureArg(t,"u64");return Number(e)}decodeInputU8(t){let e=this.decodePureArg(t,"u8");return Number(e)}decodeInputAddress(t){let e=this.decodePureArg(t,"address");return de(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 vs.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 de(t.value.Object.ImmOrOwned.objectId)}return de(t.value)}static getSharedObjectId(t){if(t.type!=="object")throw new Error(`not object argument: ${JSON.stringify(t)}`);if(typeof t.value!="object")return de(t.value);if(!("Object"in t.value)||!("Shared"in t.value.Object))throw new Error("not Shared");return de(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 vs.de(e,new Uint8Array(n))}typeArg(t){return bu(this.moveCall.typeArguments[t])}txArg(t){return this.moveCall.arguments[t]}};import{bcs as gu}from"@mysten/sui.js/bcs";var _=class{constructor(t,e){this.splitCoin=t;this.txb=e}getAmountInput(){return this.splitCoin.amounts.map(t=>{if(t.kind==="Input")return Number(w.getPureInputValue(t,"u64"))}).filter(t=>t!==void 0)}static getPureInputValue(t,e){if(t.type!=="pure")throw new Error("not pure argument");if(typeof t.value=="object"&&"Pure"in t.value){let n=t.value.Pure;return gu.de(e,new Uint8Array(n))}return t.value}};var fo=class extends dt{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(`${pt}::user::redeem_rewards`),e=this.getMoveCallTransaction(`${this.coreId.borrowIncentivePkg}::user::stake_with_ve_sca`),n=this.getMoveCallTransaction(`${this.coreId.borrowIncentivePkg}::user::stake`);return!!t&&(!!e||!!n)}get helperClaimLendingReward(){return this.transactions.filter(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.spoolPkg}::user::redeem_rewards`)).map(e=>new w(e,this.txb))}get helperClaimBorrowV2Reward(){return this.transactions.filter(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.borrowIncentivePkg}::user::redeem_rewards`)).map(e=>new w(e,this.txb))}get helperStakeObligationWithVeSca(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.borrowIncentivePkg}::user::stake_with_ve_sca`));return new w(t,this.txb)}get helperClaimBorrowReward(){return this.transactions.filter(e=>e.kind==="MoveCall"&&e.target.startsWith(`${pt}::user::redeem_rewards`)).map(e=>new w(e,this.txb))}get helperMint(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.protocolPkg}::mint::mint`));return new w(t,this.txb)}get helperUnstakes(){return this.transactions.filter(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.spoolPkg}::user::unstake`)).map(e=>new w(e,this.txb))}get helperRedeems(){return this.transactions.filter(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.protocolPkg}::redeem::redeem`)).map(e=>new w(e,this.txb))}get helperRedeem(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.protocolPkg}::redeem::redeem`));return new w(t,this.txb)}get helperBurnScoin(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.scoin}::s_coin_converter::burn_s_coin`));return new w(t,this.txb)}get helperSlippage(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith("0x5857d185897aaff40ae37b2eecc895efc1a9dff1b210c4fb894eabbce4ac2603::slippage_check::check_slippage"));return new w(t,this.txb)}get helperStake(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.spoolPkg}::user::stake`));return new w(t,this.txb)}get helperUnstake(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.spoolPkg}::user::unstake`));return new w(t,this.txb)}get helperDepositCollateral(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.protocolPkg}::deposit_collateral::deposit_collateral`));return new w(t,this.txb)}get helperWithdrawCollateral(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.protocolPkg}::withdraw_collateral::withdraw_collateral`));return new w(t,this.txb)}get helperBorrow(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.protocolPkg}::borrow::borrow`));return new w(t,this.txb)}get helperBorrowWithReferral(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.protocolPkg}::borrow::borrow_with_referral`));return new w(t,this.txb)}get helperRepay(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.protocolPkg}::repay::repay`));return new w(t,this.txb)}decodeMigrateScoin(){return{txType:O.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:O.Other,type:"MigrateAndClaim",intentionData:{obligationKey:e,obligationId:n,rewardCoinName:o,veScaKey:t}}}decodeOpenObligation(){return{txType:O.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:O.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:O.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:O.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:O.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:O.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:O.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:O.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:O.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:O.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:O.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:O.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:O.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:O.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:O.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:O.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:O.Other,type:"ClaimIncentiveReward",intentionData:{lendingIncentive:t,borrowIncentiveV2:e,borrowIncentive:n}}}};import{TransactionType as Br}from"@msafe/sui3-utils";var bo=class extends dt{decode(){if(this.isCreateReferralLink())return this.decodeCreateReferralLink();if(this.isClaimRevenueReferral())return this.decodeClaimRevenueReferral();if(this.isBindReferral())return this.decodeBindReferral()}isClaimRevenueReferral(){return!!this.getMoveCallTransaction(`${this.coreId.referral}::referral_revenue_pool::claim_revenue_with_ve_sca_key`)}isCreateReferralLink(){return!!this.getMoveCallTransaction(`${this.coreId.veScaPkgId}::ve_sca::mint_ve_sca_placeholder_key`)}isBindReferral(){return!!this.getMoveCallTransaction(`${this.coreId.referral}::referral_bindings::bind_ve_sca_referrer`)}get helperClaimRevenueReferral(){return this.transactions.filter(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.referral}::referral_revenue_pool::claim_revenue_with_ve_sca_key`)).map(e=>new w(e,this.txb))}get helperBindReferral(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.referral}::referral_bindings::bind_ve_sca_referrer`));return new w(t,this.txb)}decodeCreateReferralLink(){return{txType:Br.Other,type:"CreateReferralLink",intentionData:{}}}decodeClaimRevenueReferral(){let t=this.helperClaimRevenueReferral[0].decodeOwnedObjectId(2),e=this.helperClaimRevenueReferral.map(n=>n.typeArg(0));return{txType:Br.Other,type:"ClaimRevenueReferral",intentionData:{veScaKey:t,coins:e}}}decodeBindReferral(){let t=this.helperBindReferral.decodePureArg(1,"address");return{txType:Br.Other,type:"BindReferral",intentionData:{veScaKey:t}}}};import{TransactionType as ue}from"@msafe/sui3-utils";var go=class extends dt{decode(){if(this.isExtendPeriodAndStakeMoreSca())return this.decodePeriodAndStakeMoreSca();if(this.isStakeScaFirsTime()||this.isStakeMoreSca())return this.decodeStakeSca();if(this.isRenewExpiredVeSca())return this.decodeRenewExpiredVeSca();if(this.isExtendPeriod())return this.decodeExtendStakePeriod();if(this.isRedeemSca())return this.decodeRedeemSca()}isStakeScaFirsTime(){return!!this.getMoveCallTransaction(`${this.coreId.veScaPkgId}::ve_sca::mint_ve_sca_key`)}isExtendPeriodAndStakeMoreSca(){let t=this.getMoveCallTransaction(`${this.coreId.veScaPkgId}::ve_sca::extend_lock_period`),e=this.getMoveCallTransaction(`${this.coreId.veScaPkgId}::ve_sca::lock_more_sca`);return!!t&&!!e}isRedeemSca(){return!!this.getMoveCallTransaction(`${this.coreId.veScaPkgId}::ve_sca::redeem`)}isStakeMoreSca(){return!!this.getMoveCallTransaction(`${this.coreId.veScaPkgId}::ve_sca::lock_more_sca`)}isExtendPeriod(){return!!this.getMoveCallTransaction(`${this.coreId.veScaPkgId}::ve_sca::extend_lock_period`)}isRenewExpiredVeSca(){return!!this.getMoveCallTransaction(`${this.coreId.veScaPkgId}::ve_sca::renew_expired_ve_sca`)}get helperStakeMoreSca(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.veScaPkgId}::ve_sca::lock_more_sca`));return new w(t,this.txb)}get helperStakeSca(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.veScaPkgId}::ve_sca::mint_ve_sca_key`));return new w(t,this.txb)}get helperExtendStakePeriod(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.veScaPkgId}::ve_sca::extend_lock_period`));return new w(t,this.txb)}get helperRedeemSca(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.veScaPkgId}::ve_sca::redeem`));return new w(t,this.txb)}get helperRenewExpired(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.veScaPkgId}::ve_sca::renew_expired_ve_sca`));return new w(t,this.txb)}get helperOldUnstakeObligation(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${pt}::user::unstake`));return new w(t,this.txb)}get helperUnstakeObligation(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.borrowIncentivePkg}::user::unstake`));return new w(t,this.txb)}get helperStakeObligationWithVeSca(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.borrowIncentivePkg}::user::stake_with_ve_sca`));return new w(t,this.txb)}decodeRedeemSca(){let t=this.helperRedeemSca.decodeOwnedObjectId(1);return{txType:ue.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((b,S)=>b+S,0),o=this.helperRenewExpired.decodeOwnedObjectId(1),r=!!this.helperRedeemSca.moveCall,i=[],s=[],c=[];this.helperOldUnstakeObligation.moveCall&&(i=[this.helperOldUnstakeObligation.decodeSharedObjectId(2),this.helperOldUnstakeObligation.decodeSharedObjectId(3)]),this.helperUnstakeObligation.moveCall&&(s=[this.helperUnstakeObligation.decodeSharedObjectId(3),this.helperUnstakeObligation.decodeSharedObjectId(4)]),this.helperStakeObligationWithVeSca.moveCall&&(c=[this.helperStakeObligationWithVeSca.decodeSharedObjectId(3),this.helperStakeObligationWithVeSca.decodeSharedObjectId(4)]);let l=!1,d=!1,u,p,m=[{condition:i,isOld:!0},{condition:s,isOld:!1},{condition:c,isOld:!1}];for(let b=0;b<m.length;b++)m[b].condition.length>1&&([p,u]=m[b].condition,l=!0,d=m[b].isOld);return{txType:ue.Other,type:"RenewExpStakePeriod",intentionData:{amount:n,lockPeriodInDays:e,obligationId:u,obligationKey:p,veScaKey:o,isHaveRedeem:r,isObligationLocked:l,isOldBorrowIncentive:d}}}decodeExtendStakePeriod(){let t=this.helperExtendStakePeriod.decodeInputU64(4),e=this.helperExtendStakePeriod.decodeOwnedObjectId(1),n=[],o=[],r=[];this.helperOldUnstakeObligation.moveCall&&(n=[this.helperOldUnstakeObligation.decodeSharedObjectId(2),this.helperOldUnstakeObligation.decodeSharedObjectId(3)]),this.helperUnstakeObligation.moveCall&&(o=[this.helperUnstakeObligation.decodeSharedObjectId(3),this.helperUnstakeObligation.decodeSharedObjectId(4)]),this.helperStakeObligationWithVeSca.moveCall&&(r=[this.helperStakeObligationWithVeSca.decodeSharedObjectId(3),this.helperStakeObligationWithVeSca.decodeSharedObjectId(4)]);let i=!1,s=!1,c,l,d=[{condition:n,isOld:!0},{condition:o,isOld:!1},{condition:r,isOld:!1}];for(let u=0;u<d.length;u++)d[u].condition.length>1&&([l,c]=d[u].condition,i=!0,s=d[u].isOld);return{txType:ue.Other,type:"ExtendStakePeriod",intentionData:{lockPeriodInDays:t,obligationId:c,obligationKey:l,veScaKey:e,isObligationLocked:i,isOldBorrowIncentive:s}}}decodePeriodAndStakeMoreSca(){let t=this.helperStakeMoreSca.getNestedInputParam(4),e=this.helperExtendStakePeriod.decodeInputU64(4),n=new _(t,this.txb).getAmountInput().reduce((m,b)=>m+b,0),o=[],r=[],i,s=[];this.helperOldUnstakeObligation.moveCall&&(o=[this.helperOldUnstakeObligation.decodeSharedObjectId(2),this.helperOldUnstakeObligation.decodeSharedObjectId(3)]),this.helperUnstakeObligation.moveCall&&(r=[this.helperUnstakeObligation.decodeSharedObjectId(3),this.helperUnstakeObligation.decodeSharedObjectId(4)]),this.helperStakeMoreSca.moveCall&&(i=this.helperStakeMoreSca.decodeOwnedObjectId(1)),this.helperStakeObligationWithVeSca.moveCall&&(s=[this.helperStakeObligationWithVeSca.decodeSharedObjectId(3),this.helperStakeObligationWithVeSca.decodeSharedObjectId(4)]);let c=!1,l=!1,d,u,p=[{condition:o,isOld:!0},{condition:r,isOld:!1},{condition:s,isOld:!1}];for(let m=0;m<p.length;m++)p[m].condition.length>1&&([u,d]=p[m].condition,c=!0,l=p[m].isOld);return{txType:ue.Other,type:"ExtendPeriodAndStakeMore",intentionData:{amount:n,veScaKey:i,lockPeriodInDays:e,obligationId:d,obligationKey:u,isOldBorrowIncentive:l,isObligationLocked:c}}}decodeStakeSca(){let t,e;this.helperStakeSca.moveCall&&this.helperStakeMoreSca.moveCall===void 0?(t=this.helperStakeSca.getNestedInputParam(3),e=this.helperStakeSca.decodeInputU64(4)):t=this.helperStakeMoreSca.getNestedInputParam(4);let n=new _(t,this.txb).getAmountInput().reduce((m,b)=>m+b,0),o=[],r=[],i,s=[];this.helperOldUnstakeObligation.moveCall&&(o=[this.helperOldUnstakeObligation.decodeSharedObjectId(2),this.helperOldUnstakeObligation.decodeSharedObjectId(3)]),this.helperUnstakeObligation.moveCall&&(r=[this.helperUnstakeObligation.decodeSharedObjectId(3),this.helperUnstakeObligation.decodeSharedObjectId(4)]),this.helperStakeMoreSca.moveCall&&(i=this.helperStakeMoreSca.decodeOwnedObjectId(1)),this.helperStakeObligationWithVeSca.moveCall&&(s=[this.helperStakeObligationWithVeSca.decodeSharedObjectId(3),this.helperStakeObligationWithVeSca.decodeSharedObjectId(4)]);let c=!1,l=!1,d,u,p=[{condition:o,isOld:!0},{condition:r,isOld:!1},{condition:s,isOld:!1}];for(let m=0;m<p.length;m++)p[m].condition.length>1&&([u,d]=p[m].condition,c=!0,l=p[m].isOld);return{txType:ue.Other,type:"StakeSca",intentionData:{amount:n,lockPeriodInDays:e,obligationId:d,obligationKey:u,veScaKey:i,isObligationLocked:c,isOldBorrowIncentive:l}}}};import hu from"sort-keys-recursive";var g=class{constructor(t){this.data=t}get application(){return"msafe-core"}serialize(){return JSON.stringify(hu(this.data))}};var ho=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.borrow(this.data.coinName,Number(this.data.amount),this.data.obligationId,this.data.obligationKey,e.account.address)}static fromData(e){return new a(e)}};var yo=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.borrowWithBoost(this.data.coinName,Number(this.data.amount),this.data.obligationId,this.data.obligationKey,this.data.veScaKey,e.account.address)}static fromData(e){return new a(e)}};var So=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.borrowWithReferral(this.data.coinName,Number(this.data.amount),this.data.obligationId,this.data.obligationKey,this.data.veScaKey,e.account.address)}static fromData(e){return new a(e)}};var wo=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.claim(this.data.lendingIncentive,this.data.borrowIncentiveV2,this.data.borrowIncentive,e.account.address)}static fromData(e){return new a(e)}};var To=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.depositCollateral(this.data.collateralCoinName,Number(this.data.amount),this.data.obligationId,e.account.address)}static fromData(e){return new a(e)}};var Co=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.migrateAndClaim(this.data.obligationKey,this.data.obligationId,this.data.rewardCoinName,this.data.veScaKey)}static fromData(e){return new a(e)}};var Io=class a extends g{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 ko=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.migrateLendingWusdcToUsdcNative(this.data.coinName,Number(this.data.amount),this.data.slippage,this.data.validSwapAmount,this.data.stakeAccountId)}static fromData(e){return new a(e)}};var Do=class a extends g{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 xo=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.repay(this.data.coinName,Number(this.data.amount),this.data.obligationId,this.data.obligationKey,e.account.address)}static fromData(e){return new a(e)}};var vo=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.repayWithBoost(this.data.coinName,Number(this.data.amount),this.data.obligationId,this.data.veScaKey,e.account.address)}static fromData(e){return new a(e)}};var Ao=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.stake(this.data.marketCoinName,Number(this.data.amount),void 0,e.account.address)}static fromData(e){return new a(e)}};var Po=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.deposit(this.data.coinName,Number(this.data.amount),e.account.address)}static fromData(e){return new a(e)}};var Oo=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.unstake(this.data.marketCoinName,Number(this.data.amount),void 0,e.account.address)}static fromData(e){return new a(e)}};var Ro=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.unstakeAndWithdraw(this.data.coinName,Number(this.data.amount),this.data.stakeAccountId)}static fromData(e){return new a(e)}};var _o=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.withdrawCollateral(this.data.collateralCoinName,Number(this.data.amount),this.data.obligationId,this.data.obligationKey,e.account.address)}static fromData(e){return new a(e)}};var Bo=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.withdraw(this.data.coinName,Number(this.data.amount),e.account.address)}static fromData(e){return new a(e)}};var Mo=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.bindReferral(this.data.veScaKey)}static fromData(e){return new a(e)}};var jo=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.claimRevenuReferral(this.data.veScaKey,this.data.coins)}static fromData(e){return new a(e)}};var No=class a extends g{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 Eo=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.extendPeriodAndStakeMoreSca(this.data.amount,this.data.veScaKey,this.data.lockPeriodInDays,this.data.obligationId,this.data.obligationKey,this.data.isObligationLocked,this.data.isOldBorrowIncentive,e.account.address)}static fromData(e){return new a(e)}};var Wo=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.extendStakeScaLockPeriod(this.data.lockPeriodInDays,this.data.veScaKey,this.data.obligationId,this.data.obligationKey,this.data.isObligationLocked,this.data.isOldBorrowIncentive,e.account.address)}static fromData(e){return new a(e)}};var Lo=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.redeemSca(this.data.veScaKey)}static fromData(e){return new a(e)}};var Uo=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.renewExpiredStakeSca(this.data.amount,this.data.lockPeriodInDays,this.data.vescaKey,this.data.isHaveRedeem,this.data.obligation,this.data.obligationKey,this.data.isObligationLocked,this.data.isOldBorrowIncentive,e.account.address)}static fromData(e){return new a(e)}};var Fo=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.stakeSca(this.data.amount,this.data.isObligationLocked,this.data.isOldBorrowIncentive,this.data.obligationId,this.data.obligationKey,this.data.lockPeriodInDays,this.data.veScaKey,e.account.address)}static fromData(e){return new a(e)}};var qo=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.supplyAndStake(this.data.coinName,Number(this.data.amount),this.data.stakeAccountId,e.account.address)}static fromData(e){return new a(e)}};var $o=class a extends g{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){return e.scallop.client.withdrawUnlockedSca(this.data.vescaKey,e.account.address)}static fromData(e){return new a(e)}};var Ko=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(`${ws}/addresses/${this.id}`,t);if(e.status===200){let n=await e.json();if("mainnet"in n){this.addresses=n.mainnet;return}throw new Error("Mainnet key is not in address!")}throw new Error(`Failed to fetch address with id ${this.id}`)}};import{TransactionBlock as I}from"@mysten/sui.js/transactions";import nc from"bignumber.js";import{TransactionBlock as yu}from"@mysten/sui.js/transactions";var Vo=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 yu(t)}async selectCoin(t,e,n,o=this.params.walletAddress){let r=this.utils.parseCoinType(e),i=await this.utils.selectCoinIds(n,r,o),[s,c]=this.utils.takeAmountFromCoins(t,i,n);return{takeCoin:s,leftCoin:c}}async selectMarketCoin(t,e,n,o=this.params.walletAddress){let r=this.utils.parseMarketCoinType(e),i=await this.utils.selectCoins(n,r,o),s=i.reduce((u,p)=>(u+=Number(p.balance),u),0),c=i.map(u=>u.objectId),[l,d]=this.utils.takeAmountFromCoins(t,c,Math.min(n,s));return{takeCoin:l,leftCoin:d,totalAmount:s}}async selectSCoin(t,e,n,o=this.params.walletAddress){let r=this.utils.parseSCoinType(e),i=await this.utils.selectCoins(n,r,o),s=i.map(u=>u.objectId),c=i.reduce((u,p)=>u+Number(p.balance),0),[l,d]=this.utils.takeAmountFromCoins(t,s,Math.min(c,n));return{takeCoin:l,leftCoin:d,totalAmount:c}}};import{TransactionBlock as Su}from"@mysten/sui.js/transactions";import Qo from"bignumber.js";var Lt=async(a,t)=>{let e=t,n=a.address.get("core.object")||uo,o=[],r=!1,i=null;do{let d=await a.client.getOwnedObjects({owner:e,filter:{StructType:`${n}::obligation::ObligationKey`},cursor:i});o.push(...d.data),d.hasNextPage&&d.nextCursor?(r=!0,i=d.nextCursor):r=!1}while(r);let s=o.map(d=>d?.data?.objectId).filter(d=>d!==void 0),c=await a.client.multiGetObjects({ids:s,options:{showContent:!0,showType:!0}}),l=[];for(let d=0;d<c.length;d++){let u=c[d].data.objectId,{content:p}=c[d].data;if(p&&"fields"in p){let m=p.fields,b=String(m.ownership.fields.of),S=await Mr(a,b);l.push({id:b,keyId:u,locked:S})}}return l},Mr=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},As=async(a,t,e)=>{let n=e||[...Z],o=t,r=[],i=!1,s=null;do{let d=await a.client.getOwnedObjects({owner:o,filter:{MatchAny:n.map(u=>({StructType:`0x2::coin::Coin<${a.utils.parseCoinType(u)}>`}))},options:{showType:!0,showContent:!0},cursor:s});r.push(...d.data),d.hasNextPage&&d.nextCursor?(i=!0,s=d.nextCursor):i=!1}while(i);let c={};return r.map(d=>d.data).filter(d=>d!=null).forEach(d=>{let u=d.type;if(d.content&&"fields"in d.content){let p=d.content.fields,m=a.utils.parseCoinNameFromType(u);m&&(c[m]=Qo(c[m]??0).plus(p.balance).toNumber())}}),c},Ps=async(a,t,e)=>{let n=e,o=a.utils.parseCoinType(t),r=[],i=!1,s=null;do{let d=await a.client.getOwnedObjects({owner:n,filter:{StructType:`0x2::coin::Coin<${o}>`},options:{showContent:!0},cursor:s});r.push(...d.data),d.hasNextPage&&d.nextCursor?(i=!0,s=d.nextCursor):i=!1}while(i);let c=0;return r.map(d=>d.data).filter(d=>d!=null).forEach(d=>{if(d.content&&"fields"in d.content){let u=d.content.fields;c=Qo(c).plus(u.balance).toNumber()}}),c},Os=async(a,t,e)=>{let n=e||[...Z].map(d=>a.utils.parseMarketCoinName(d)),o=t,r=[],i=!1,s=null;do{let d=await a.client.getOwnedObjects({owner:o,filter:{MatchAny:n.map(u=>({StructType:`0x2::coin::Coin<${a.utils.parseMarketCoinType(u)}>`}))},options:{showType:!0,showContent:!0},cursor:s});r.push(...d.data),d.hasNextPage&&d.nextCursor?(i=!0,s=d.nextCursor):i=!1}while(i);let c={};return r.map(d=>d.data).filter(d=>d!=null).forEach(d=>{let u=d.type;if(d.content&&"fields"in d.content){let p=d.content.fields,m=a.utils.parseCoinNameFromType(u);m&&(c[m]=Qo(c[m]??0).plus(p.balance).toNumber())}}),c},Rs=async(a,t,e)=>{let n=e,o=a.utils.parseMarketCoinType(t),r=[],i=!1,s=null;do{let d=await a.client.getOwnedObjects({owner:n,filter:{StructType:`0x2::coin::Coin<${o}>`},options:{showContent:!0},cursor:s});r.push(...d.data),d.hasNextPage&&d.nextCursor?(i=!0,s=d.nextCursor):i=!1}while(i);let c=0;return r.map(d=>d.data).filter(d=>d!=null).forEach(d=>{if(d.content&&"fields"in d.content){let u=d.content.fields;c=Qo(c).plus(u.balance).toNumber()}}),c},_s=async(a,t)=>{let n=`${a.address.get("core.packages.query.id")}::obligation_query::obligation_data`,o=new Su;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 pe=async(a,t)=>{let e=t,n=a.address.get("spool.object"),o=`${n}::spool_account::SpoolAccount`,r=[],i=!1,s=null;do{let p=await a.client.getOwnedObjects({owner:e,filter:{StructType:o},options:{showContent:!0,showType:!0},cursor:s});r.push(...p.data),p.hasNextPage&&p.nextCursor?(i=!0,s=p.nextCursor):i=!1}while(i);let c={sweth:[],ssui:[],susdc:[],swusdc:[],swusdt:[],scetus:[],safsui:[],shasui:[],svsui:[]},l=Object.keys(c).reduce((p,m)=>{let b=a.utils.parseCoinName(m),S=a.utils.parseMarketCoinType(b),T={...p},x=`${n}::spool_account::SpoolAccount<${S}>`;return T[m]=x,T},{}),d=r.map(p=>p?.data?.objectId).filter(p=>p!==void 0);return(await a.client.multiGetObjects({ids:d,options:{showContent:!0,showType:!0}})).forEach(p=>{let m=p.data.objectId,b=p.data.type;if(p.data.content&&"fields"in p.data.content){let S=p.data.content.fields,T=String(S.spool_id),x=String(S.stake_type.fields.name),U=Number(S.stakes),B=Number(S.index),K=Number(S.points),F=Number(S.total_points);C(b)===l.sweth?c.sweth.push({id:m,type:C(b),stakePoolId:T,stakeType:C(x),staked:U,index:B,points:K,totalPoints:F}):C(b)===l.ssui?c.ssui.push({id:m,type:C(b),stakePoolId:T,stakeType:C(x),staked:U,index:B,points:K,totalPoints:F}):C(b)===l.swusdc?c.swusdc.push({id:m,type:C(b),stakePoolId:T,stakeType:C(x),staked:U,index:B,points:K,totalPoints:F}):C(b)===l.swusdt?c.swusdt.push({id:m,type:C(b),stakePoolId:T,stakeType:C(x),staked:U,index:B,points:K,totalPoints:F}):C(b)===l.scetus?c.scetus.push({id:m,type:C(b),stakePoolId:T,stakeType:C(x),staked:U,index:B,points:K,totalPoints:F}):C(b)===l.safsui?c.safsui.push({id:m,type:C(b),stakePoolId:T,stakeType:C(x),staked:U,index:B,points:K,totalPoints:F}):C(b)===l.shasui?c.shasui.push({id:m,type:C(b),stakePoolId:T,stakeType:C(x),staked:U,index:B,points:K,totalPoints:F}):C(b)===l.svsui?c.svsui.push({id:m,type:C(b),stakePoolId:T,stakeType:C(x),staked:U,index:B,points:K,totalPoints:F}):C(b)===l.susdc&&c.susdc.push({id:m,type:C(b),stakePoolId:T,stakeType:C(x),staked:U,index:B,points:K,totalPoints:F})}}),c},jr=async(a,t)=>{let e=a.address.get(`spool.pools.${t}.id`),n,o=await a.client.getObject({id:e,options:{showContent:!0,showType:!0}});if(o.data){let r=o.data,i=r.objectId,s=r.type;if(r.content&&"fields"in r.content){let c=r.content.fields,l=Number(c.max_distributed_point),d=Number(c.distributed_point),u=Number(c.distributed_point_per_period),p=Number(c.point_distribution_time),m=Number(c.max_stakes),b=String(c.stake_type.fields.name),S=Number(c.stakes),T=Number(c.index),x=Number(c.created_at),U=Number(c.last_update);n={id:i,type:C(s),maxPoint:l,distributedPoint:d,pointPerPeriod:u,period:p,maxStake:m,stakeType:C(b),totalStaked:S,index:T,createdAt:x,lastUpdate:U}}}return n},Nr=async(a,t)=>{let e=a.address.get(`spool.pools.${t}.rewardPoolId`),n,o=await a.client.getObject({id:e,options:{showContent:!0,showType:!0}});if(o.data){let r=o.data,i=r.objectId,s=r.type;if(r.content&&"fields"in r.content){let c=r.content.fields,l=String(c.spool_id),d=Number(c.exchange_rate_numerator),u=Number(c.exchange_rate_denominator),p=Number(c.rewards),m=Number(c.claimed_rewards);n={id:i,type:C(s),stakePoolId:l,ratioNumerator:d,ratioDenominator:u,rewards:p,claimedRewards:m}}}return n};import{TransactionBlock as Cu}from"@mysten/sui.js/transactions";import{normalizeStructTag as qx}from"@mysten/sui.js/utils";import Kx from"bignumber.js";var N=a=>{let{sender:t}=a.blockData;if(!t)throw new Error("Sender is required");return t},js=(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(Ut(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)`)}},Ns=(a,t,e)=>{if(Ut(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)`)},Es=(a,t)=>{if(Ut(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")},Ws=(a,t,e)=>{if(Ut(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)`)},Ut=a=>{if(a===void 0)throw new Error("veSca not found")};import{normalizeStructTag as Ls,parseStructTag as wu}from"@mysten/sui.js/utils";import Rx from"bignumber.js";var Tu=a=>({pointType:Ls(a.point_type.name),weightedAmount:Number(a.weighted_amount),points:Number(a.points),totalPoints:Number(a.total_points),index:Number(a.index)}),Us=a=>({poolType:Ls(a.pool_type.name),debtAmount:Number(a.debt_amount),pointList:a.points_list.reduce((t,e)=>{let n=Tu(e),o=wu(n.pointType).name.toLowerCase();return t[o]=n,t},{})});var Go=a=>{let t=a.slice(1).toLowerCase();return a.charAt(0).toLowerCase()==="s"&&[...new Set([...Z,...po,...Cs])].includes(t)},Er=a=>{switch(a){case"afsui":return"afSUI";case"hasui":return"haSUI";case"vsui":return"vSUI";default:return a.toUpperCase()}},Fs=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 qs=async(a,t,e,n)=>{let o=n||[...ft],r=a.address.get("borrowIncentive.query"),i=a.address.get("borrowIncentive.incentiveAccounts"),s=`${r}::incentive_account_query::incentive_account_data`,c=new Cu;c.moveCall({target:s,arguments:[c.object(i),c.object(t)]});let d=(await a.client.devInspectTransactionBlock({transactionBlock:c,sender:e})).events[0].parsedJson,u={};return d.pool_records.forEach(p=>{let m=Us(p),{poolType:b}=m,S=a.utils.parseCoinNameFromType(b);o.length>=1&&o.includes(S)&&(u[S]=m)},{}),u};var $s=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 Ks=async(a,t)=>{let e=a.address.get(`core.coins.${t}.oracle.pyth.feedObject`),n=await a.client.getObject({id:e,options:{showContent:!0}});if(n.data){let o=n.data;if(o.content&&"fields"in o.content){let r=o.content.fields,i=Number(r.price_info.fields.price_feed.fields.price.fields.expo.fields.magnitude),s=Number(r.price_info.fields.price_feed.fields.price.fields.expo.fields.negative),c=Number(r.price_info.fields.price_feed.fields.price.fields.price.fields.magnitude),l=Number(r.price_info.fields.price_feed.fields.price.fields.price.fields.negative);return c*10**((s?-1:1)*i)*(l?-1:1)}}return 0};import Wr from"bignumber.js";var Vs=async(a,t)=>{let e=t,o=`${a.address.get("vesca.id")}::ve_sca::VeScaKey`,r=[],i=!1,s=null;do{let l=await a.client.getOwnedObjects({owner:e,filter:{StructType:o},cursor:s});r.push(...l.data),l.hasNextPage&&l.nextCursor?(i=!0,s=l.nextCursor):i=!1}while(i);return r.map(l=>l.data).filter(l=>!!l)},Qs=async(a,t)=>{let n=(await Vs(a,t)).map(r=>r.objectId),o=[];for(let r=0;r<n.length;r++){let i=await Lr(a,n[r]);i&&o.push(i)}return o},Lr=async(a,t,e)=>{let n=a.address.get("vesca.tableId"),o=t||(await Vs(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:Wr(c.locked_sca_amount).toNumber(),lockedScaCoin:Wr(c.locked_sca_amount).shiftedBy(-9).toNumber(),unlockAt:Wr(c.unlock_at).toNumber()}}return r};var zo=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 Lt(this,t)}async getCoinAmounts(t,e){return As(this,t,e)}async getCoinAmount(t,e=this.params.walletAddress){return Ps(this,t,e)}async getMarketCoinAmounts(t,e){return Os(this,t,e)}async getMarketCoinAmount(t,e=this.params.walletAddress){return Rs(this,t,e)}async getPriceFromPyth(t){return Ks(this,t)}async getAllStakeAccounts(t=this.params.walletAddress){return pe(this,t)}async getStakeAccounts(t,e=this.params.walletAddress){return(await this.getAllStakeAccounts(e))[t]??[]}async getStakePools(t=[...mt]){let e={};for(let n=0;n<t.length;n++){let o=t[n],r=await jr(this,o);r&&(e[o]=r)}return e}async getStakePool(t){return jr(this,t)}async getStakeRewardPools(t=[...mt]){let e={};for(let n=0;n<t.length;n++){let o=await Nr(this,t[n]);o&&(e[t[n]]=o)}return e}async getStakeRewardPool(t){return Nr(this,t)}async getBorrowIncentiveAccounts(t,e=this.params.walletAddress,n){return qs(this,t,e,n)}async getObligationCoinNames(t){let e=await _s(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 Ur,normalizeStructTag as Iu}from"@mysten/sui.js/utils";var Jo=class{params;isTestnet;_address;client;constructor(t,e){this.params=t,this.client=t.client,this._address=e}parseSymbol(t){if(Go(t)){let e=t.slice(1).toLowerCase();return t.slice(0,1).toLowerCase()+Er(e)}return Er(t)}parseCoinType(t){let e=Go(t)?this.parseCoinName(t):t,n=Ds[e];return[$.wusdc,$.wusdt,$.weth,$.wbtc,$.wsol,$.wapt].includes(n)?`${n}::coin::COIN`:t==="vsui"?`${Rr.vsui}::cert::CERT`:`${n}::${e}::${e.toUpperCase()}`}parseMarketCoinType(t){let e=this._address.get("core.object")||uo,n=this.parseCoinType(t);return`${e}::reserve::MarketCoin<${n}>`}parseCoinNameFromType(t){let e=Iu(t),n=/((0x[^:]+::[^:]+::[^<>]+))(?![^<>]*<)/,o=t.match(n),r=t.includes("reserve::MarketCoin");e=o?.[1]||t;let i={[`${$.wusdc}::coin::COIN`]:"wusdc",[`${$.wusdt}::coin::COIN`]:"wusdt",[`${$.weth}::coin::COIN`]:"weth",[`${$.wbtc}::coin::COIN`]:"wbtc",[`${$.wsol}::coin::COIN`]:"wsol",[`${$.wapt}::coin::COIN`]:"wapt"},s={[`${Rr.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=>mo[t];getBorrowIncentiveRewardCoinName=t=>ks[t];getCoinDecimal(t){return Is[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 xs[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=Ur,n){let o=n,r=[],i=0,s=!0,c=null;for(;s&&i<t;){let l=await this.client.getCoins({owner:o,coinType:e,cursor:c});l.data.sort((d,u)=>parseInt(u.balance,10)-parseInt(d.balance,10));for(let d=0;d<l.data.length&&(r.push({objectId:l.data[d].coinObjectId,digest:l.data[d].digest,version:l.data[d].version,balance:l.data[d].balance}),i+=parseInt(l.data[d].balance,10),!(i>=t));d++);c=l.nextCursor,s=l.hasNextPage}if(!r.length)throw new Error("No valid coins found for the transaction.");return r}async selectCoinsMarketCoin(t=Ur,e){let n=e,o=[],r=!0,i=null;for(;r;){let s=await this.client.getCoins({owner:n,coinType:t,cursor:i});s.data.sort((c,l)=>parseInt(l.balance,10)-parseInt(c.balance,10));for(let c=0;c<s.data.length&&(o.push({objectId:s.data[c].coinObjectId,digest:s.data[c].digest,version:s.data[c].version,balance:s.data[c].balance}),!(o.length>50));c++);i=s.nextCursor,r=s.hasNextPage}return o}async selectCoinIds(t,e=Ur,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 Fs(r)}parseSCoinName(t){if(Go(t)&&tt.includes(t))return t;let e=`s${t}`;if(tt.includes(e))return e}};import{SUI_CLOCK_OBJECT_ID as Ft,SUI_TYPE_ARG as ku}from"@mysten/sui.js/utils";var qt=async(...a)=>{let[t,e,n]=a;if(a.length===3&&n&&typeof n=="string"){let i=await Lr(t.query,n);return i||void 0}let o=N(e),r=await Qs(t.query,o);if(r.length!==0)return r[0]};var Fr=async(...a)=>{let[t,e,n,o]=a;if(a.length===4&&n&&o&&typeof n=="string"){let c=await Mr(t.query,n);return{obligationId:n,obligationKey:o,obligationLocked:c}}let r=N(e),i=await Lt(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}},Du=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(Ft)]})},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(Ft)]})},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(Ft)]})},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(Ft)],typeArguments:[ku]})},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(Ft)],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(Ft)],typeArguments:[c]})}}},E=async({builder:a,txBlock:t})=>{let e=await Du({builder:a,txBlock:t});return{normalMethod:e,stakeObligationQuick:async(n,o)=>{let{obligationId:r,obligationKey:i,obligationLocked:s}=await Fr(a,t,n,o),c=!!t.blockData.transactions.find(l=>l.kind==="MoveCall"&&(l.target===`${pt}::user::unstake`||l.target===`${a.address.get("borrowIncentive.id")}::user::unstake`));(!s||c)&&e.stakeObligation(r,i)},unstakeObligationQuick:async(n,o)=>{let{obligationId:r,obligationKey:i,obligationLocked:s}=await Fr(a,t,n,o);s&&e.unstakeObligation(r,i)},stakeObligationWithVeScaQuick:async(n,o,r)=>{let{obligationId:i,obligationKey:s,obligationLocked:c}=await Fr(a,t,n,o),l=!!t.blockData.transactions.find(async d=>d.kind==="MoveCall"&&(d.target===`${pt}::user::unstake`||d.target===`${a.address.get("borrowIncentive.id")}::user::unstake`));if(!c||l){let d=await $s({address:a.address,client:a.client},i);if(r&&r!==d)throw new Error("Binded veScaKey is not equal to the provided veScaKey");d?e.stakeObligationWithVesca(i,s,d):e.stakeObligation(i,s)}},claimBorrowIncentiveQuick:(n,o,r)=>e.claimBorrowIncentive(o,r,n)}};import{SUI_CLOCK_OBJECT_ID as nt}from"@mysten/sui.js/utils";import{SUI_CLOCK_OBJECT_ID as Zo}from"@mysten/sui.js/utils";import xu from"axios";var Hs={testnet:["https://hermes-beta.pyth.network"],mainnet:["https://hermes.pyth.network","https://scallop.rpc.p2p.world"]};import{bcs as qr}from"@mysten/sui.js/bcs";import{SUI_CLOCK_OBJECT_ID as Xo}from"@mysten/sui.js/utils";var $r=16*1024,Yo=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(qr.ser("vector<u8>",Array.from(r),{maxSize:$r}).toBytes()),e.object(Xo)]});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(qr.ser("vector<u8>",Array.from(e[0]),{maxSize:$r}).toBytes()),s[0],t.object(Xo)]});let c=[],l=await this.getBaseUpdateFee(),d=t.splitCoins(t.gas,n.map(()=>t.pure(l))),u=0;for(let p=0;p<n.length;p++){let m=await this.getPriceFeedObjectId(n[p]);if(!m)throw new Error(`Price feed ${n[0]} not found, please create it first`);c.push(m),[r]=t.moveCall({target:`${o}::pyth::update_single_price_feed`,arguments:[t.object(this.pythStateId),r,t.object(m),d[u],t.object(Xo)]}),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(qr.ser("vector<u8>",Array.from(e[0]),{maxSize:$r}).toBytes()),r[0],t.object(Xo)]})}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 vu=async(a,t)=>(await xu.get(`${a}/api/latest_vaas`,{params:{ids:t}})).data.map(o=>Buffer.from(o,"base64")),me=async(a,t,e)=>{let n=e??[...new Set([...Z,...po])],o=a.isTestnet?["pyth"]:["pyth"];if(o.includes("pyth")){let i=new Yo(a.client,a.address.get("core.oracles.pyth.state"),a.address.get("core.oracles.pyth.wormholeState")),s=[];await Promise.all(n.map(async l=>s.push(a.address.get(`core.coins.${l}.oracle.pyth.feed`))));let c=a.params.pythEndpoints??Hs[a.isTestnet?"testnet":"mainnet"];try{let l=await vu(c[0],s);await i.updatePriceFeeds(t,l,s)}catch(l){console.warn(`Failed to update price feeds with endpoint ${c[0]}: ${l}`)}}let r=[...new Set(n)];for(let i=0;i<r.length;i++)await Au(a,t,r[i],o)},Au=async(a,t,e,n)=>{let o=a.utils.parseCoinType(e);Pu(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)},Pu=(a,t,e,n,o,r,i,s,c,l,d,u,p,m,b)=>{let S=Ou(a,e,n,b);return t.includes("pyth")&&Mu(a,o,S,i,s,r,b),t.includes("switchboard")&&Bu(a,c,S,d,l,b),t.includes("supra")&&_u(a,u,S,m,p,b),Ru(a,e,n,S,b),a},Ou=(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})},Ru=(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(Zo)],typeArguments:i}),a},_u=(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(Zo)],typeArguments:[r]})},Bu=(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(Zo)],typeArguments:[r]})},Mu=(a,t,e,n,o,r,i)=>{let s=typeof e=="string"?a.object(e):e,c=typeof n=="string"?a.object(n):n,l=typeof o=="string"?a.object(o):o,d=typeof r=="string"?a.object(r):r;a.moveCall({target:`${t}::rule::set_price`,arguments:[s,c,l,d,a.object(Zo)],typeArguments:[i]})};var gt=async({builder:a,txBlock:t})=>{let e={pkgId:a.address.get("scoin.id")},n={};return await Promise.all(tt.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 fe=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=N(t),i=await Lt(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}},ju=async({builder:a,txBlock:t})=>{let e={protocolPkg:a.address.get("core.packages.protocol.id"),market:a.address.get("core.market"),version:a.address.get("core.version"),coinDecimalsRegistry:a.address.get("core.coinDecimalsRegistry"),xOracle:a.address.get("core.oracles.xOracle")},o=`${a.address.get("referral.id")}::scallop_referral_program::REFERRAL_WITNESS`;return{openObligation:()=>t.moveCall({target:`${e.protocolPkg}::open_obligation::open_obligation`,arguments:[t.object(e.version)]}),returnObligation:(r,i)=>t.moveCall({target:`${e.protocolPkg}::open_obligation::return_obligation`,arguments:[t.object(e.version),t.object(r),t.object(i)]}),openObligationEntry:()=>t.moveCall({target:`${e.protocolPkg}::open_obligation::open_obligation_entry`,arguments:[t.object(e.version)]}),addCollateral:(r,i,s)=>{let c=a.utils.parseCoinType(s);return t.moveCall({target:`${e.protocolPkg}::deposit_collateral::deposit_collateral`,arguments:[t.object(e.version),t.object(r),t.object(e.market),typeof i!="string"?i:t.pure(i)],typeArguments:[c]})},takeCollateral:(r,i,s,c)=>{let l=a.utils.parseCoinType(c);return t.moveCall({target:`${e.protocolPkg}::withdraw_collateral::withdraw_collateral`,arguments:[t.object(e.version),t.object(r),t.object(i),t.object(e.market),t.object(e.coinDecimalsRegistry),t.pure(s),t.object(e.xOracle),t.object(nt)],typeArguments:[l]})},deposit:(r,i)=>{let s=a.utils.parseCoinType(i);return t.moveCall({target:`${e.protocolPkg}::mint::mint`,arguments:[t.object(e.version),t.object(e.market),typeof r!="string"?r:t.pure(r),t.object(nt)],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(nt)],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(nt)],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(nt)],typeArguments:[s]})},borrow:(r,i,s,c)=>{let l=a.utils.parseCoinType(c);return t.moveCall({target:`${e.protocolPkg}::borrow::borrow`,arguments:[t.object(e.version),t.object(r),t.object(i),t.object(e.market),t.object(e.coinDecimalsRegistry),t.pure(s),t.object(e.xOracle),t.object(nt)],typeArguments:[l]})},borrowEntry:(r,i,s,c)=>{let l=a.utils.parseCoinType(c);return t.moveCall({target:`${e.protocolPkg}::borrow::borrow_entry`,arguments:[t.object(e.version),t.object(r),t.object(i),t.object(e.market),t.object(e.coinDecimalsRegistry),t.pure(s),t.object(e.xOracle),t.object(nt)],typeArguments:[l]})},borrowWithReferral:(r,i,s,c,l)=>{let d=a.utils.parseCoinType(l);return t.moveCall({target:`${e.protocolPkg}::borrow::borrow_with_referral`,arguments:[t.object(e.version),t.object(r),t.object(i),t.object(e.market),t.object(e.coinDecimalsRegistry),t.object(s),t.pure(c),t.object(e.xOracle),t.object(nt)],typeArguments:[d,o]})},repay:(r,i,s)=>{let c=a.utils.parseCoinType(s);return t.moveCall({target:`${e.protocolPkg}::repay::repay`,arguments:[t.object(e.version),t.object(r),t.object(e.market),typeof i!="string"?i:t.pure(i),t.object(nt)],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]})}}},W=async({builder:a,txBlock:t})=>{let e=await ju({builder:a,txBlock:t}),n=await gt({builder:a,txBlock:t});return{normalMethod:e,addCollateralQuick:async(o,r,i)=>{let s=N(t),{obligationId:c}=await fe(t,a,i);if(r==="sui"){let[l]=t.splitCoins(t.gas,[o]);e.addCollateral(c,l,r)}else{let{leftCoin:l,takeCoin:d}=await a.selectCoin(t,r,o,s);e.addCollateral(c,d,r),t.transferObjects([l],s)}},takeCollateralQuick:async(o,r,i,s)=>{let c=await fe(t,a,i,s),l=await a.query.getObligationCoinNames(c.obligationId);return await me(a,t,l),e.takeCollateral(c.obligationId,c.obligationKey,o,r)},depositQuick:async(o,r,i)=>{if(r==="sui"){let[l]=t.splitCoins(t.gas,[o]);return e.deposit(l,r)}let{leftCoin:s,takeCoin:c}=await a.selectCoin(t,r,o,i);return t.transferObjects([s],i),e.deposit(c,r)},withdrawQuick:async(o,r)=>{let i=N(t),s=a.utils.parseMarketCoinName(r);try{let c=a.utils.parseSCoinName(r);if(!c)throw new Error(`No sCoin for ${r}`);let{leftCoin:l,takeCoin:d,totalAmount:u}=await a.selectSCoin(t,c,o,i);t.transferObjects([l],i);let p=n.burnSCoin(c,d),m=e.withdraw(p,r),b=o-u;try{if(b>0){let{leftCoin:S,takeCoin:T}=await a.selectMarketCoin(t,s,b,i);t.transferObjects([S],i),t.mergeCoins(m,[e.withdraw(T,r)])}}catch{}return m}catch{let{leftCoin:l,takeCoin:d}=await a.selectMarketCoin(t,s,o,i);return t.transferObjects([l],i),e.withdraw(d,r)}},borrowQuick:async(o,r,i,s)=>{let c=await fe(t,a,i,s),d=[...await a.query.getObligationCoinNames(c.obligationId),r];return await me(a,t,d),e.borrow(c.obligationId,c.obligationKey,o,r)},borrowWithReferralQuick:async(o,r,i,s,c)=>{let l=await fe(t,a,s,c),u=[...await a.query.getObligationCoinNames(l.obligationId),r];return await me(a,t,u),e.borrowWithReferral(l.obligationId,l.obligationKey,i,o,r)},repayQuick:async(o,r,i,s)=>{let c=await fe(t,a,i);if(r==="sui"){let[u]=t.splitCoins(t.gas,[o]);return e.repay(c.obligationId,u,r)}let{leftCoin:l,takeCoin:d}=await a.selectCoin(t,r,o,s);return t.transferObjects([l],s),e.repay(c.obligationId,d,r)},updateAssetPricesQuick:async o=>me(a,t,o)}};import{SUI_CLOCK_OBJECT_ID as ta}from"@mysten/sui.js/utils";var ea=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(ta)],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(ta)],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(ta)],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(ta)],typeArguments:[i]})}}},Gs=async({builder:a,txBlock:t})=>{let e=await ea({builder:a,txBlock:t});return{claimReferralRevenueQuick:async(n,o,r=[...Z])=>{let i=[];for(let s=0;s<r.length;s++)if(r[s]==="sui"){let c=e.claimReferralRevenue(n,r[s]);i.push(c)}else{let c=e.claimReferralRevenue(n,r[s]);try{let l=await a.utils.selectCoinIds(1/0,a.utils.parseCoinType(r[s]),o);t.mergeCoins(c,l.slice(0,500))}catch{}finally{i.push(c)}}i.length>0&&t.transferObjects(i,t.pure(o))}}};var Nu={packageId:"0x5857d185897aaff40ae37b2eecc895efc1a9dff1b210c4fb894eabbce4ac2603"},zs={check_slippage:(a,t,e,n,o)=>a.moveCall({target:`${Nu.packageId}::slippage_check::check_slippage`,arguments:[t,a.pure(e),a.pure(n)],typeArguments:[o]})};import{SUI_CLOCK_OBJECT_ID as na}from"@mysten/sui.js/utils";var Js=async(a,t,e,n,o,r,i=!1)=>{let s=await gt({builder:a,txBlock:t}),c=await Ys({builder:a,txBlock:t});try{let{takeCoin:l,leftCoin:d,totalAmount:u}=i?await a.selectSCoin(t,n,o,r):await a.selectMarketCoin(t,n,o,r);if(i){let p=s.burnSCoin(n,l);c.stake(e,p,n)}else c.stake(e,l,n);return t.transferObjects([d],r),u}catch{return 0}},Xs=async(...a)=>{let[t,e,n,o]=a;if(a.length===4&&o)return[o];let r=N(e);return(await pe(t.query,r))[n].map(s=>s.id)},Eu=async(...a)=>{let[t,e,n,o]=a,r=N(e),i=await pe(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]},Ys=async({builder:a,txBlock:t})=>{let e={spoolPkg:a.address.get("spool.id")},n={},o={},r={};return mt.forEach(i=>{let s=a.address.get(`spool.pools.${i}.id`),c=a.address.get(`spool.pools.${i}.rewardPoolId`),l=a.utils.parseMarketCoinType(i);n[i]=s,o[i]=c,r[i]=l}),{createStakeAccount:i=>{let s=r[i],c=n[i];return t.moveCall({target:`${e.spoolPkg}::user::new_spool_account`,arguments:[t.object(c),t.object(na)],typeArguments:[s]})},stake:(i,s,c)=>{let l=r[c],d=n[c];t.moveCall({target:`${e.spoolPkg}::user::stake`,arguments:[t.object(d),t.object(i),typeof s=="string"?t.pure(s):s,t.object(na)],typeArguments:[l]})},unstake:(i,s,c)=>{let l=r[c],d=n[c];return t.moveCall({target:`${e.spoolPkg}::user::unstake`,arguments:[t.object(d),t.object(i),t.pure(s),t.object(na)],typeArguments:[l]})},claim:(i,s)=>{let c=n[s],l=o[s],d=r[s],u=mo[s],p=a.utils.parseCoinType(u);return t.moveCall({target:`${e.spoolPkg}::user::redeem_rewards`,arguments:[t.object(c),t.object(l),t.object(i),t.object(na)],typeArguments:[d,p]})}}},ot=async({builder:a,txBlock:t})=>{let e=await Ys({builder:a,txBlock:t}),n=await gt({builder:a,txBlock:t});return{normalMethod:e,stakeQuick:async(o,r,i)=>{let s=N(t),c=await Xs(a,t,r,i),l=[];if(c.length===0){let d=e.createStakeAccount(r);l.push(d)}if(typeof o=="number"){let d=await Js(a,t,c.length>0?c[0]:l[0],r,o,s);o-=d,d||await Js(a,t,c.length>0?c[0]:l[0],r,o,s,!0)}else e.stake(c.length>0?c[0]:l[0],o,r);l.length>0&&t.transferObjects(l,s)},unstakeQuick:async(o,r,i,s)=>{let c=await Eu(a,t,r,i),l=[],d=o;for(let u of c){if(u.staked===0)continue;let p=Math.min(d,u.staked),m=e.unstake(u.id,p,r);if(s){let b=n.mintSCoin(r,m);l.push(b)}else l.push(m);if(d-=p,o<=0)break}if(l.length>0){let u=l[0];return l.length>1&&t.mergeCoins(u,l.slice(1)),u}},claimQuick:async(o,r)=>{let i=await Xs(a,t,o,r),s=[];return i.forEach(c=>{let l=e.claim(c,o);s.push(l)}),s}}};import{SUI_CLOCK_OBJECT_ID as be}from"@mysten/sui.js/utils";var Wu=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(be)]}),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(be)]})},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(be)]})},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(be)]})},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(be)]}),mintEmptyVeSca:()=>t.moveCall({target:`${e.pkgId}::ve_sca::mint_ve_sca_placeholder_key`,arguments:[t.object(e.config),t.object(e.table)],typeArguments:[]})}},ht=async({builder:a,txBlock:t})=>{let e=await Wu({builder:a,txBlock:t});return{normalMethod:e,lockScaQuick:async(n,o,r=!0)=>{let i=N(t),s=await qt(a,t),c,l=[];if(n!==void 0&&typeof n=="number"){let m=await a.utils.selectCoinIds(n,ut,i),[b,S]=a.utils.takeAmountFromCoins(t,m,n);c=b,l.push(S)}else c=n;let d=a.utils.getUnlockAt(o,s?.unlockAt);r&&js(n,o,d,s?.unlockAt),console.log(new Date(d*1e3).toLocaleString("en-CA",{hour12:!0}));let u=!s?.unlockAt,p=!u&&s.unlockAt*1e3<=new Date().getTime();if(u||p){if(c)if(u){let m=e.lockSca(c,d);l.push(m)}else{if(s.lockedScaAmount!==0){let m=e.redeemSca(s.keyId);l.push(m)}e.renewExpiredVeSca(s.keyId,c,d)}}else c&&o?(e.extendLockPeriod(s.keyId,d),e.extendLockAmount(s.keyId,c)):o?e.extendLockPeriod(s.keyId,d):c&&e.extendLockAmount(s.keyId,c);l.length>0&&t.transferObjects(l,i)},extendLockPeriodQuick:async(n,o,r=!0)=>{let i=await qt(a,t,o),s=a.utils.getUnlockAt(n);r&&Ns(n,s,i?.unlockAt),i&&e.extendLockPeriod(i.keyId,s)},extendLockAmountQuick:async(n,o,r=!0)=>{let i=N(t),s=await qt(a,t,o);if(r&&Es(n,s?.unlockAt),s){let c=await a.utils.selectCoinIds(n,ut,i),[l,d]=a.utils.takeAmountFromCoins(t,c,n);e.extendLockAmount(s.keyId,l),t.transferObjects([d],i)}},renewExpiredVeScaQuick:async(n,o,r,i=!0)=>{let s=N(t),c=await qt(a,t,r),l=a.utils.getUnlockAt(o,c?.unlockAt);if(i&&Ws(n,o,c?.unlockAt),c){let d=[];if(c.lockedScaAmount!==0){let b=e.redeemSca(c.keyId);d.push(b)}let u=await a.utils.selectCoinIds(n,ut,s),[p,m]=a.utils.takeAmountFromCoins(t,u,n);d.push(m),e.renewExpiredVeSca(c.keyId,p,l),t.transferObjects(d,s)}},redeemScaQuick:async n=>{let o=N(t),r=await qt(a,t,n);if(Ut(r?.unlockAt),r){let i=e.redeemSca(r.keyId);t.transferObjects([i],o)}}}};import{normalizeStructTag as Fu}from"@mysten/sui.js/utils";import{SUI_CLOCK_OBJECT_ID as Lu}from"@mysten/sui.js/utils";var $t={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}}},Zs={id:"0x000000000000000000000000000000000000000000000000000000000000dee9"},Kr={id:"0x2c6c36393db063a9534885d22a47caead720272475336470736be28f119971f3"},tc={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 ec={objectId:Lu,initialSharedVersion:"1",mutable:!1},Uu=(a,t)=>{if(a==="sui")switch(t){case"wusdc":return{pool:$t.pools.sui2usdc,aToB:!0};default:throw new Error(`Invalid coin pair: ${a} and ${t}`)}else if(a==="wusdc")switch(t){case"sui":return{pool:$t.pools.sui2usdc,aToB:!1};case"wusdt":return{pool:$t.pools.usdt2usdc,aToB:!1};case"usdc":return{pool:$t.pools.wusdc2usdc,aToB:!0};default:throw new Error(`Invalid coin pair: ${a} and ${t}`)}else if(a==="wusdt")switch(t){case"wusdc":return{pool:$t.pools.usdt2usdc,aToB:!0};default:throw new Error(`Invalid coin pair: ${a} and ${t}`)}else throw new Error(`Invalid coin pair: ${a} and ${t}`)},Vr={createAccount:a=>a.moveCall({target:`${Zs.id}::${tc.clob_v2.create_account}`,arguments:[],typeArguments:[]}),swap:(a,t,e,n,o,r,i)=>{let{pool:s,aToB:c}=Uu(e,n),l=i.parseCoinType(e),d=i.parseCoinType(n),u=typeof r=="string"?a.object(r):"objectId"in r?a.objectRef(r):a.object(r);if(!s)throw new Error(`Deepbook: No pool found for ${e} to ${n}`);return c?a.moveCall({target:`${Kr.id}::deepbook::deepbook_base_for_quote`,arguments:[a.sharedObjectRef(s.object),a.pure(o),u,a.object(t),a.sharedObjectRef(ec),a.pure(s.lotsize)],typeArguments:[l,d]}):a.moveCall({target:`${Kr.id}::deepbook::deepbook_quote_for_base`,arguments:[a.sharedObjectRef(s.object),a.pure(o),u,a.sharedObjectRef(ec),a.object(t),a.pure(s.lotsize)],typeArguments:[d,l]})}};var oa=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:Fu("0xdee9::custodian_v2::AccountCap")},limit:1});return e.length===0||!e[0].data?Vr.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:Vr.swap(o,t,e,n,this.clientOrderId,r,this.scallopUtils),accountCap:r}}};var aa=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 Jo(t,this.address),this.query=new zo(t,{address:this.address,utils:this.utils}),this.builder=new Vo(t,{address:this.address,query:this.query,utils:this.utils}),this.deepbookSwap=new oa({client:this.client,currentAddress:this.params.walletAddress,scallopUtils:this.utils})}async getObligations(t){let e=t||this.params.walletAddress;return this.query.getObligations(e)}async getAllStakeAccounts(t){let e=t||this.params.walletAddress;return this.query.getAllStakeAccounts(e)}async getStakeAccounts(t,e){let n=e||this.params.walletAddress;return this.query.getStakeAccounts(t,n)}async getStakePool(t){return this.query.getStakePool(t)}async getStakeRewardPool(t){return this.query.getStakeRewardPool(t)}async openObligation(t){let e=new I,n=await W({builder:this.builder,txBlock:e}),o=await E({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 I,i=o||this.params.walletAddress;r.setSender(i);let s=await W({builder:this.builder,txBlock:r}),c=await this.query.getObligations(i),l=n||c?.[0]?.id;if(l)await s.addCollateralQuick(e,t,l);else{let[d,u,p]=s.normalMethod.openObligation();await s.addCollateralQuick(e,t,d),s.normalMethod.returnObligation(d,p),r.transferObjects([u],i)}return r}async withdrawCollateral(t,e,n,o,r){let i=new I,s=await W({builder:this.builder,txBlock:i}),c=r||this.params.walletAddress;i.setSender(c);let l=await s.takeCollateralQuick(e,t,n,o);return i.transferObjects([l],c),i}async deposit(t,e,n){let o=new I,r=await W({builder:this.builder,txBlock:o}),i=await gt({builder:this.builder,txBlock:o}),s=n||this.params.walletAddress;o.setSender(s);let c=await r.depositQuick(e,t,n),l=this.utils.parseMarketCoinName(t);if(!tt.includes(l))o.transferObjects([c],s);else{let d=i.mintSCoin(l,c);o.transferObjects([d],s)}return o}async withdraw(t,e,n){let o=new I,r=n||this.params.walletAddress,i=await W({builder:this.builder,txBlock:o});o.setSender(r);let s=await i.withdrawQuick(e,t);return o.transferObjects([s],r),o}async borrow(t,e,n,o,r){let i=new I,s=await W({builder:this.builder,txBlock:i}),c=await E({builder:this.builder,txBlock:i}),l=r||this.params.walletAddress;i.setSender(l);let d=ft.includes(t);d&&await c.unstakeObligationQuick(n,o);let u=await s.borrowQuick(e,t,n,o);return i.transferObjects([u],l),d&&await c.stakeObligationQuick(n,o),i}async borrowWithBoost(t,e,n,o,r,i){let s=new I,c=await W({builder:this.builder,txBlock:s}),l=await E({builder:this.builder,txBlock:s}),d=i||this.params.walletAddress;s.setSender(d);let u=ft.includes(t);u&&await l.unstakeObligationQuick(n,o);let p=await c.borrowQuick(e,t,n,o);return s.transferObjects([p],d),u&&await l.stakeObligationWithVeScaQuick(n,o,r),s}async borrowWithReferral(t,e,n,o,r,i){let s=new I,c=await W({builder:this.builder,txBlock:s}),l=await E({builder:this.builder,txBlock:s}),d=await ea({builder:this.builder,txBlock:s}),u=i||this.params.walletAddress;s.setSender(u);let p=ft.includes(t);p&&await l.unstakeObligationQuick(n,o);let m=d.claimReferralTicket(t),b=await c.borrowWithReferralQuick(e,t,m,n,o);return d.burnReferralTicket(m,t),s.transferObjects([b],u),p&&r?await l.stakeObligationWithVeScaQuick(n,o,r):await l.stakeObligationQuick(n,o),s}async repay(t,e,n,o,r){let i=new I,s=await W({builder:this.builder,txBlock:i}),c=await E({builder:this.builder,txBlock:i}),l=r||this.params.walletAddress;i.setSender(l);let d=ft.includes(t);return d&&await c.unstakeObligationQuick(n,o),await s.repayQuick(e,t,n,l),d&&await c.stakeObligationQuick(n,o),i}async repayWithBoost(t,e,n,o,r){let i=new I,s=await W({builder:this.builder,txBlock:i}),c=await E({builder:this.builder,txBlock:i}),l=r||this.params.walletAddress;i.setSender(l);let d=ft.includes(t);return d&&await c.unstakeObligationQuick(n,void 0),await s.repayQuick(e,t,n,l),d&&await c.stakeObligationWithVeScaQuick(n,void 0,o),i}async createStakeAccount(t,e){let n=new I,o=await ot({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 I,i=await W({builder:this.builder,txBlock:r}),s=await ot({builder:this.builder,txBlock:r}),c=o||this.params.walletAddress;r.setSender(c);let l=await i.depositQuick(e,t,o),d=this.utils.parseMarketCoinName(t);if(!mt.find(m=>m===d))return r;let u=await this.query.getStakeAccounts(d,c),p=n||(u.length>0?u[0].id:void 0);if(p)await s.stakeQuick(l,d,p);else{let m=s.normalMethod.createStakeAccount(d);await s.stakeQuick(l,d,m),r.transferObjects([m],c)}return r}async unstakeAndWithdraw(t,e,n){let o=new I,r=await W({builder:this.builder,txBlock:o}),i=await ot({builder:this.builder,txBlock:o}),s=this.params.walletAddress,c=[];o.setSender(s);let l=this.utils.parseMarketCoinName(t);for(let d=0;d<n.length;d++){let u=n[d],[p]=await i.unstakeQuick(u.coin,l,u.id);if(p){let m=r.normalMethod.withdraw(p,t);c.push(m)}}if(e>0){let d=await r.withdrawQuick(e,t);c.push(d)}return c.length>1&&o.mergeCoins(c[0],c.slice(1)),o.transferObjects(c,s),o}async stake(t,e,n,o){let r=new I,i=await ot({builder:this.builder,txBlock:r}),s=o||this.params.walletAddress;r.setSender(s);let c=await this.query.getStakeAccounts(t,s),l=n||(c.length>0?c[0].id:void 0);if(l)await i.stakeQuick(e,t,l);else{let d=i.normalMethod.createStakeAccount(t);await i.stakeQuick(e,t,d),r.transferObjects([d],s)}return r}async unstake(t,e,n,o){let r=new I,i=await ot({builder:this.builder,txBlock:r}),s=o||this.params.walletAddress;r.setSender(s);let c=tt.includes(t),l=await i.unstakeQuick(e,t,n,c);return r.transferObjects([l],r.pure(s)),r}async claim(t,e,n,o){let r=new I,i=await ot({builder:this.builder,txBlock:r}),s=await E({builder:this.builder,txBlock:r}),c=o||this.params.walletAddress;r.setSender(c);let l={sui:[],sca:[],scallop_sui:[],scallop_sca:[],scallop_deep:[],scallop_fud:[]};for(let d=0;d<t.length;d++){let{stakeMarketCoinName:u,stakeAccountId:p}=t[d],m=i.normalMethod.claim(p,u);l.sui.push(m)}for(let d=0;d<e.length;d++){let{obligationId:u,obligationKey:p,rewardCoinName:m}=e[d],b=s.normalMethod.claimBorrowIncentive(u,p,m);l[m].push(b)}for(let d=0;d<n.length;d++){let{obligationId:u,obligationKey:p,rewardCoinName:m}=n[d],b=s.normalMethod.oldClaimBorrowIncentive(u,p,m);l[m].push(b)}for(let d in l)l[d].length>0&&(l[d].length>1&&r.mergeCoins(l[d][0],l[d].slice(1)),r.transferObjects([l[d][0]],r.pure(c)));return r}async stakeObligation(t,e,n){let o=this.builder.createTxBlock(),r=await E({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 E({builder:this.builder,txBlock:o}),i=n||this.params.walletAddress;return o.setSender(i),await r.unstakeObligationQuick(t,e),o}async stakeSca(t,e=!1,n=!1,o,r,i,s,c){let l=new I,d=await ht({builder:this.builder,txBlock:l}),u=await E({builder:this.builder,txBlock:l}),p=c||this.params.walletAddress;l.setSender(p);let m=await this.builder.utils.selectCoinIds(t,ut,p),[b,S]=this.builder.utils.takeAmountFromCoins(l,m,t),T;return s?d.normalMethod.extendLockAmount(s,b):T=d.normalMethod.lockSca(b,i),o&&r&&(e&&(n?u.normalMethod.oldUnstakeObligation(o,r):u.normalMethod.unstakeObligation(o,r)),u.normalMethod.stakeObligationWithVesca(o,r,s||T)),s||l.transferObjects([T,S],p),l}async stakeMoreSca(t,e,n){let o=new I,r=n||this.params.walletAddress;return o.setSender(r),o}async extendStakeScaLockPeriod(t,e,n,o,r=!1,i=!1,s){let c=new I,l=await ht({builder:this.builder,txBlock:c}),d=await E({builder:this.builder,txBlock:c}),u=s||this.params.walletAddress;return c.setSender(u),l.normalMethod.extendLockPeriod(e,t),n&&o&&(r&&(i?d.normalMethod.oldUnstakeObligation(n,o):d.normalMethod.unstakeObligation(n,o)),d.normalMethod.stakeObligationWithVesca(n,o,e)),c}async extendPeriodAndStakeMoreSca(t,e,n,o,r,i=!1,s=!1,c){let l=new I,d=await ht({builder:this.builder,txBlock:l}),u=await E({builder:this.builder,txBlock:l}),p=c||this.params.walletAddress;l.setSender(p);let m=await this.builder.utils.selectCoinIds(t,ut,p),[b,S]=this.builder.utils.takeAmountFromCoins(l,m,t);return d.normalMethod.extendLockPeriod(e,n),d.normalMethod.extendLockAmount(e,b),l.transferObjects([S],p),!o||!r||(i&&(s?u.normalMethod.oldUnstakeObligation(o,r):u.normalMethod.unstakeObligation(o,r)),u.normalMethod.stakeObligationWithVesca(o,r,e)),l}async renewExpiredStakeSca(t,e,n,o=!1,r,i,s=!1,c=!1,l){let d=new I,u=await ht({builder:this.builder,txBlock:d}),p=await E({builder:this.builder,txBlock:d}),m=l||this.params.walletAddress;if(d.setSender(m),o){let x=u.normalMethod.redeemSca(n);d.transferObjects([x],m)}let b=await this.builder.utils.selectCoinIds(t,ut,m),[S,T]=this.builder.utils.takeAmountFromCoins(d,b,t);return d.transferObjects([T],m),u.normalMethod.renewExpiredVeSca(n,S,e),!r||!i||(s&&(c?p.normalMethod.oldUnstakeObligation(r,i):p.normalMethod.unstakeObligation(r,i)),p.normalMethod.stakeObligationWithVesca(r,i,n)),d}async redeemSca(t){let e=new I,n=await ht({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 I,i=await E({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 I,o=await ht({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 nc(t.weightedAmount),r=e.currentPointIndex?nc(e.currentPointIndex-t.index).dividedBy(1e9):1;return n.multipliedBy(r).plus(t.points).shiftedBy(-1*e.coinDecimal)}async createReferralLink(){let t=new I,e=await ht({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 I,o=await Gs({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 I,n=await ea({builder:this.builder,txBlock:e}),o=this.params.walletAddress;return e.setSender(o),n.bindToReferral(t),e}async migrateAllMarketCoin(){let t=new I,e=await gt({builder:this.builder,txBlock:t}),n=await ot({builder:this.builder,txBlock:t});t.setSender(this.params.walletAddress);let o=[];return await Promise.all(tt.map(async r=>{let i=[],s;try{let c=await this.utils.selectCoinIds(Number.MAX_SAFE_INTEGER,this.utils.parseMarketCoinType(r),this.params.walletAddress),l=c[0];c.length>1&&t.mergeCoins(l,c.slice(1)),s=l}catch(c){if(!c.toString().includes("No valid coins found for the transaction"))throw c}if(s){let c=e.mintSCoin(r,s);try{let l=await this.utils.selectCoinIds(Number.MAX_SAFE_INTEGER,this.utils.parseSCoinType(r),this.params.walletAddress);t.mergeCoins(c,l)}catch(l){console.log(l)}i.push(c)}if(mt.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 I,s=await W({builder:this.builder,txBlock:i}),c=await ot({builder:this.builder,txBlock:i}),l=this.params.walletAddress,d=[],u=this.utils.parseMarketCoinName(t),p=this.utils.parseMarketCoinType(u),b=(await this.utils.selectCoinsMarketCoin(p,l)).map(B=>B.objectId);i.setSender(l);for(let B=0;B<r.length;B++){let K=r[B],[F]=await c.unstakeQuick(K.coin,u,K.id);if(F){b.length>0&&i.mergeCoins(F,b);let wc=s.normalMethod.withdraw(F,t);d.push(wc)}}if(e>0){let B=await s.withdrawQuick(e,t);d.push(B)}d.length>1&&i.mergeCoins(d[0],d.slice(1));let[S]=i.splitCoins(d[0],[i.pure(o)]);i.transferObjects([d[0]],l);let{swapResult:T,accountCap:x}=await this.deepbookSwap.swapToken({baseCoinName:"wusdc",quoteCoinName:"usdc",tokenObjectIn:S,tx:i});typeof x=="string"&&i.transferObjects([x],l),zs.check_slippage(i,T,n,o,this.query.utils.parseCoinType("usdc"));let U=s.normalMethod.deposit(T,"usdc");return await c.stakeQuick(U,"susdc"),i}};var ge=class{params;client;builder;query;utils;address;constructor(t){this.params=t,this.address=t.address}async init(){this.address||(this.address=new Ko({id:Ts})),await this.address.read(),this.client=new aa(this.params,this.address);let{builder:t,query:e,utils:n}=this.client;this.builder=t,this.query=e,this.utils=n}};var ra=class{application="scallop";supportSDK="@mysten/sui.js";scallop;async deserialize(t){this.scallop||(this.scallop=new ge({client:t.suiClient,walletAddress:t.account.address}),await this.scallop.init());let{transactionBlock:e}=t;console.log("transactionBlock",e);let n=new fo(e,this.scallop),o=new bo(e,this.scallop),r=new go(e,this.scallop),i=n.decode()||o.decode()||r.decode();if(!i)throw new Error("Unknown transaction type");return{txType:qu.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 ge({client:t.suiClient,walletAddress:t.account.address}),await this.scallop.init());let s;switch(r){case"SupplyLending":s=Po.fromData(i);break;case"WithdrawLending":s=Bo.fromData(i);break;case"Borrow":s=ho.fromData(i);break;case"Repay":s=xo.fromData(i);break;case"DepositCollateral":s=To.fromData(i);break;case"WithdrawCollateral":s=_o.fromData(i);break;case"OpenObligation":s=Do.fromData(i);break;case"StakeSpool":s=Ao.fromData(i);break;case"UnstakeSpool":s=Oo.fromData(i);break;case"ClaimIncentiveReward":s=wo.fromData(i);break;case"BorrowWithBoost":s=yo.fromData(i);break;case"StakeSca":s=Fo.fromData(i);break;case"ExtendStakePeriod":s=Wo.fromData(i);break;case"ExtendPeriodAndStakeMore":s=Eo.fromData(i);break;case"RenewExpStakePeriod":s=Uo.fromData(i);break;case"WithdrawStakedSca":s=$o.fromData(i);break;case"SupplyAndStakeLending":s=qo.fromData(i);break;case"WithdrawAndUnstakeLending":s=Ro.fromData(i);break;case"RedeemSca":s=Lo.fromData(i);break;case"MigrateAndClaim":s=Co.fromData(i);break;case"BorrowWithReferral":s=So.fromData(i);break;case"CreateReferralLink":s=No.fromData(i);break;case"ClaimRevenueReferral":s=jo.fromData(i);break;case"BindReferral":s=Mo.fromData(i);break;case"MigrateScoin":s=Io.fromData(i);break;case"RepayWithBoost":s=vo.fromData(i);break;case"MigrateWusdcToUsdc":s=ko.fromData(i);break;default:throw new Error("not implemented")}return s.build({suiClient:e,account:n,network:o,scallop:this.scallop})}};import{TransactionType as pp}from"@msafe/sui3-utils";import{LIQUID_STAKING_INFO_MAP as mp,LstId as fp}from"@suilend/frontend-sui";import{LstClient as bp}from"@suilend/springsui-sdk";import{TransactionType as Qr}from"@msafe/sui3-utils";var ia=class{constructor(t,e){this.transaction=t;this.simResult=e}decode(){if(this.isMintTransaction())return this.decodeMint();if(this.isMintAndDepositTransaction())return this.decodeMintAndDeposit();if(this.isRedeemTransaction())return this.decodeRedeem();throw new Error("Unknown transaction type")}get commands(){return this.transaction.getData().commands}getMoveCallCommand(t){return this.commands.find(e=>e.$kind==="MoveCall"&&e.MoveCall.function===t)}hasSuilendDepositTransactionMoveCallCommands(){return!!this.getMoveCallCommand("deposit_liquidity_and_mint_ctokens")&&!!this.getMoveCallCommand("deposit_ctokens_into_obligation")}hasMintTransactionMoveCallCommands(){return!!this.getMoveCallCommand("mint")}isMintTransaction(){return this.hasMintTransactionMoveCallCommands()&&!this.hasSuilendDepositTransactionMoveCallCommands()}isMintAndDepositTransaction(){return this.hasMintTransactionMoveCallCommands()&&this.hasSuilendDepositTransactionMoveCallCommands()}isRedeemTransaction(){return!!this.getMoveCallCommand("redeem")}decodeMint(){let e={MintEvent:this.simResult.events.find(n=>n.type.includes("liquid_staking::MintEvent"))}.MintEvent.parsedJson.event.sui_amount_in;return console.log("Decoder.decodeMint",e),{txType:Qr.Other,type:"mint",intentionData:{amount:e}}}decodeMintAndDeposit(){return{txType:Qr.Other,type:"mintAndDeposit",intentionData:this.decodeMint().intentionData}}decodeRedeem(){let e={RedeemEvent:this.simResult.events.find(n=>n.type.includes("liquid_staking::RedeemEvent"))}.RedeemEvent.parsedJson.event.lst_amount_in;return console.log("Decoder.decodeRedeem",e),{txType:Qr.Other,type:"redeem",intentionData:{amount:e}}}};import{Transaction as Vu}from"@mysten/sui/transactions";import Ku from"sort-keys-recursive";var yt=class{constructor(t){this.data=t}serialize(){return JSON.stringify(Ku(this.data))}};var sa=class a extends yt{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o,lstClient:r,suilendClient:i,obligationOwnerCap:s,obligation:c}=e;console.log("MintIntention.build",n,o,r,i,s,c);let l=new Vu;return r.mintAndRebalanceAndSendToUser(l,o.address,this.data.amount),l}static fromData(e){return console.log("MintIntention.fromData",e),new a(e)}};import{Transaction as Qu}from"@mysten/sui/transactions";var ca=class a extends yt{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o,lstClient:r,suilendClient:i,obligationOwnerCap:s,obligation:c}=e;console.log("MintAndDepositIntention.build",n,o,r,i,s,c);let l=new Qu;return i.depositCoin(o.address,r.mintAndRebalance(l,this.data.amount),r.liquidStakingObject.type,l,s?.id),l}static fromData(e){return console.log("MintAndDepositIntention.fromData",e),new a(e)}};import{Transaction as Hu}from"@mysten/sui/transactions";var la=class a extends yt{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o,lstClient:r,suilendClient:i,obligationOwnerCap:s,obligation:c}=e;console.log("RedeemIntention.build",n,o,r,i,s,c);let l=new Hu;return await r.redeemAndSendToUser(l,o.address,this.data.amount),l}static fromData(e){return console.log("RedeemIntention.fromData",e),new a(e)}};import{TransactionType as sp}from"@msafe/sui3-utils";import{LENDING_MARKET_ID as cp,LENDING_MARKET_TYPE as lp,SuilendClient as Hr}from"@suilend/sdk";import{phantom as dp}from"@suilend/sdk/_generated/_framework/reified";import{LendingMarket as up}from"@suilend/sdk/_generated/suilend/lending-market/structs";import{TransactionType as Kt}from"@msafe/sui3-utils";import{fromB64 as oc,toHEX as ac}from"@mysten/bcs";import{normalizeStructTag as he}from"@mysten/sui/utils";import{maxU64 as Vt}from"@suilend/sdk";import rc from"bignumber.js";var da=class{constructor(t,e){this.transaction=t;this.simResult=e}decode(){if(this.isDepositTransaction())return this.decodeDeposit();if(this.isWithdrawTransaction())return this.decodeWithdraw();if(this.isBorrowTransaction())return this.decodeBorrow();if(this.isRepayTransaction())return this.decodeRepay();if(this.isClaimTransaction())return this.decodeClaim();if(this.isClaimAndDepositTransaction())return this.decodeClaimAndDeposit();throw new Error("Unknown transaction type")}get inputs(){return console.log("XXX this.transaction.getData().inputs",this.transaction.getData().inputs),this.transaction.getData().inputs}get commands(){return console.log("XXX this.transaction.getData().commands",this.transaction.getData().commands),this.transaction.getData().commands}getMoveCallCommand(t){return this.commands.find(e=>e.$kind==="MoveCall"&&e.MoveCall.function===t)}hasDepositTransactionMoveCallCommands(){return!!this.getMoveCallCommand("deposit_liquidity_and_mint_ctokens")&&!!this.getMoveCallCommand("deposit_ctokens_into_obligation")}hasClaimTransactionMoveCallCommands(){return!!this.getMoveCallCommand("claim_rewards")}isDepositTransaction(){return!this.hasClaimTransactionMoveCallCommands()&&this.hasDepositTransactionMoveCallCommands()}isWithdrawTransaction(){return!!this.getMoveCallCommand("withdraw_ctokens")&&!!this.getMoveCallCommand("redeem_ctokens_and_withdraw_liquidity_request")}isBorrowTransaction(){return!!this.getMoveCallCommand("borrow_request")}isRepayTransaction(){return!!this.getMoveCallCommand("repay")}isClaimTransaction(){return this.hasClaimTransactionMoveCallCommands()&&!this.hasDepositTransactionMoveCallCommands()}isClaimAndDepositTransaction(){return this.hasClaimTransactionMoveCallCommands()&&this.hasDepositTransactionMoveCallCommands()}decodeDeposit(){let t={MintEvent:this.simResult.events.find(o=>o.type.includes("lending_market::MintEvent"))},e=he(t.MintEvent.parsedJson.coin_type.name),n=t.MintEvent.parsedJson.liquidity_amount;return console.log("Decoder.decodeDeposit",e,n),{txType:Kt.Other,type:"deposit",intentionData:{coinType:e,value:n}}}decodeWithdraw(){let t={withdraw_ctokens:this.getMoveCallCommand("withdraw_ctokens")},e={RedeemEvent:this.simResult.events.find(c=>c.type.includes("lending_market::RedeemEvent"))},n=he(e.RedeemEvent.parsedJson.coin_type.name),o=e.RedeemEvent.parsedJson.liquidity_amount;console.log("Decoder.decodeWithdraw",n,o);let r=t.withdraw_ctokens.MoveCall.arguments[4].Input,i=new rc(ac(oc(this.inputs[r].Pure.bytes)),16).toString(),s=i===Vt.toString();return console.log("XXX decodeWithdraw - isMax:",s,"inputIndex:",r,"inputValue:",i,"maxU64.toString():",Vt.toString()),s&&(o=Vt.toString()),{txType:Kt.Other,type:"withdraw",intentionData:{coinType:n,value:o}}}decodeBorrow(){let t={borrow_request:this.getMoveCallCommand("borrow_request")},e={BorrowEvent:this.simResult.events.find(c=>c.type.includes("lending_market::BorrowEvent"))},n=he(e.BorrowEvent.parsedJson.coin_type.name),o=`${+e.BorrowEvent.parsedJson.liquidity_amount-+e.BorrowEvent.parsedJson.origination_fee_amount}`;console.log("Decoder.decodeBorrow",n,o);let r=t.borrow_request.MoveCall.arguments[4].Input,i=new rc(ac(oc(this.inputs[r].Pure.bytes)),16).toString(),s=i===Vt.toString();return console.log("XXX decodeBorrow - isMax:",s,"inputIndex:",r,"inputValue:",i,"maxU64.toString():",Vt.toString()),s&&(o=Vt.toString()),{txType:Kt.Other,type:"borrow",intentionData:{coinType:n,value:o}}}decodeRepay(){let t={RepayEvent:this.simResult.events.find(o=>o.type.includes("lending_market::RepayEvent"))},e=he(t.RepayEvent.parsedJson.coin_type.name),n=t.RepayEvent.parsedJson.liquidity_amount;return console.log("Decoder.decodeRepay",e,n),{txType:Kt.Other,type:"repay",intentionData:{coinType:e,value:n}}}decodeClaim(){let t={ClaimReward:this.simResult.events.filter(n=>n.type.includes("lending_market::ClaimReward"))},e={};for(let n=0;n<t.ClaimReward.length;n++){let o=t.ClaimReward[n],r=he(o.parsedJson.coin_type.name),i=o.parsedJson.liquidity_amount;e[r]=`${+(e[r]??"0")+ +i}`}return console.log("Decoder.decodeClaimRewards",e),{txType:Kt.Other,type:"claim",intentionData:{value:e}}}decodeClaimAndDeposit(){return{txType:Kt.Other,type:"claimAndDeposit",intentionData:this.decodeClaim().intentionData}}};import{Transaction as Ju}from"@mysten/sui/transactions";import zu from"sort-keys-recursive";var L=class{constructor(t){this.data=t}serialize(){return JSON.stringify(zu(this.data))}};var ua=class a extends L{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o,suilendClient:r,obligationOwnerCap:i,obligation:s}=e;if(console.log("BorrowIntention.build",n,o,r,i,s),!i||!s)throw new Error("Obligation not found");let c=new Ju;return await r.borrowAndSendToUser(o.address,i.id,s.id,this.data.coinType,this.data.value,c),c}static fromData(e){return console.log("BorrowIntention.fromData",e),new a(e)}};import{Transaction as np}from"@mysten/sui/transactions";import{normalizeStructTag as Zu}from"@mysten/sui/utils";import{Side as ye}from"@suilend/sdk";import tp from"bignumber.js";import{normalizeStructTag as ic}from"@mysten/sui/utils";var Xu="0x34fe4f3c9e450fed4d0a3c587ed842eec5313c30c3cc3c0841247c49425e246b::suilend_point::SUILEND_POINT",Yu=ic(Xu),sc=a=>ic(a)===Yu;var ep=(a,t)=>{let e={[ye.DEPOSIT]:[],[ye.BORROW]:[]};return a.lendingMarket.reserves.forEach(n=>{[ye.DEPOSIT,ye.BORROW].forEach(o=>{let r=o===ye.DEPOSIT?n.depositsPoolRewardManager:n.borrowsPoolRewardManager,i=t.userRewardManagers.find(s=>s.poolRewardManagerId===r.id);i&&(e[o]=r.poolRewards.map((s,c)=>({reserveArrayIndex:n.arrayIndex,rewardIndex:BigInt(c),rewardCoinType:Zu(s.coinType.name),side:o})).filter(s=>!sc(s.rewardCoinType)&&!!i.rewards[Number(s.rewardIndex)]&&new tp(i.rewards[Number(s.rewardIndex)].earnedRewards.value.toString()).gt(0)))})}),Object.values(e).flat()},pa=ep;var ma=class a extends L{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o,suilendClient:r,obligationOwnerCap:i,obligation:s}=e;if(console.log("ClaimIntention.build",n,o,r,i,s),!i||!s)throw new Error("Obligation not found");let c=new np;return r.claimRewardsAndSendToUser(o.address,i.id,pa(r,s),c),c}static fromData(e){return console.log("ClaimIntention.fromData",e),new a(e)}};import{Transaction as op}from"@mysten/sui/transactions";var fa=class a extends L{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o,suilendClient:r,obligationOwnerCap:i,obligation:s}=e;if(console.log("ClaimAndDepositIntention.build",n,o,r,i,s),!i||!s)throw new Error("Obligation not found");let c=new op;return r.claimRewardsAndDeposit(o.address,i.id,pa(r,s),c),c}static fromData(e){return console.log("ClaimAndDepositIntention.fromData",e),new a(e)}};import{Transaction as ap}from"@mysten/sui/transactions";var ba=class a extends L{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o,suilendClient:r,obligationOwnerCap:i,obligation:s}=e;console.log("DepositIntention.build",n,o,r,i,s);let c=new ap;return await r.depositIntoObligation(o.address,this.data.coinType,this.data.value,c,i?.id),c}static fromData(e){return console.log("DepositIntention.fromData",e),new a(e)}};import{Transaction as rp}from"@mysten/sui/transactions";var ga=class a extends L{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o,suilendClient:r,obligationOwnerCap:i,obligation:s}=e;if(console.log("RepayIntention.build",n,o,r,i,s),!i||!s)throw new Error("Obligation not found");let c=new rp;return await r.repayIntoObligation(o.address,s.id,this.data.coinType,this.data.value,c),c}static fromData(e){return console.log("RepayIntention.fromData",e),new a(e)}};import{Transaction as ip}from"@mysten/sui/transactions";var ha=class a extends L{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o,suilendClient:r,obligationOwnerCap:i,obligation:s}=e;if(console.log("WithdrawIntention.build",n,o,r,i,s),!i||!s)throw new Error("Obligation not found");let c=new ip;return await r.withdrawAndSendToUser(o.address,i.id,s.id,this.data.coinType,this.data.value,c),c}static fromData(e){return console.log("WithdrawIntention.fromData",e),new a(e)}};var ya=async(a,t)=>{let e=await Hr.initializeWithLendingMarket(await up.fetch(a,dp(lp),cp),a),n=await Hr.getObligationOwnerCaps(t.address,e.lendingMarket.$typeArgs,a),o=await Promise.all(n.map(r=>Hr.getObligation(r.obligationId,e.lendingMarket.$typeArgs,a)));return{suilendClient:e,obligationOwnerCaps:n,obligations:o}},Sa=class{application="Suilend";supportSDK="@mysten/sui";utils;async deserialize(t){let{transaction:e,suiClient:n,account:o}=t;this.utils||(this.utils=await ya(n,o));let r=await n.devInspectTransactionBlock({sender:o.address,transactionBlock:e});console.log("SuilendAppHelper.deserialize",r);let s=new da(e,r).decode();return{txType:sp.Other,txSubType:s.type,intentionData:s.intentionData}}async build(t){let{network:e,txSubType:n,intentionData:o,suiClient:r,account:i}=t;this.utils||(this.utils=await ya(r,i));let s;switch(n){case"deposit":s=ba.fromData(o);break;case"withdraw":s=ha.fromData(o);break;case"borrow":s=ua.fromData(o);break;case"repay":s=ga.fromData(o);break;case"claim":s=ma.fromData(o);break;case"claimAndDeposit":s=fa.fromData(o);break;default:throw new Error("not implemented")}let c=window.localStorage.getItem("obligationId"),l=this.utils.obligations?.find(u=>u.id===c)??this.utils.obligations?.[0],d=this.utils.obligationOwnerCaps?.find(u=>u.obligationId===l?.id);return console.log("XXX obligationId:",c,"obligations:",this.utils.obligations,"obligationOwnerCaps:",this.utils.obligationOwnerCaps),s.build({network:e,suiClient:r,account:i,suilendClient:this.utils.suilendClient,obligationOwnerCap:d,obligation:l})}};var cc=async(a,t)=>{let e=await bp.initialize(a,mp[fp.sSUI]),n=await ya(a,t);return{lstClient:e,...n}},wa=class{application="SpringSui";supportSDK="@mysten/sui";utils;async deserialize(t){let{transaction:e,suiClient:n,account:o}=t;this.utils||(this.utils=await cc(n,o));let r=await n.devInspectTransactionBlock({sender:o.address,transactionBlock:e});console.log("SpringSuiAppHelper.deserialize",r);let s=new ia(e,r).decode();return{txType:pp.Other,txSubType:s.type,intentionData:s.intentionData}}async build(t){let{network:e,txSubType:n,intentionData:o,suiClient:r,account:i}=t;this.utils||(this.utils=await cc(r,i));let s;switch(n){case"mint":s=sa.fromData(o);break;case"mintAndDeposit":s=ca.fromData(o);break;case"redeem":s=la.fromData(o);break;default:throw new Error("not implemented")}return s.build({network:e,suiClient:r,account:i,lstClient:this.utils.lstClient,suilendClient:this.utils.suilendClient,obligationOwnerCap:this.utils.obligationOwnerCaps?.[0],obligation:this.utils.obligations?.[0]})}};import{TransactionType as Sp}from"@msafe/sui3-utils";import{TransactionType as lc}from"@msafe/sui3-utils";var Ta=class{constructor(t,e){this.transaction=t;this.simResult=e}decode(){if(this.isMintTransaction()){let t=this.getLiquidityChangeEvent("MintEvent");if(!t)throw new Error("No liquidity change event found. Unable to decode transaction.");let e=t.parsedJson;return console.log("Decoder event data - ",e),this.decodeMint(e)}if(this.isRedeemTransaction()){let t=this.getLiquidityChangeEvent("RedeemEvent");if(!t)throw new Error("No liquidity change event found. Unable to decode transaction.");let e=t.parsedJson;return console.log("Decoder event data - ",e),this.decodeRedeem(e)}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)}getLiquidityChangeEvent(t){return this.simResult.events.find(e=>this.isLiquidityChangeEventType(e.type,t))}isLiquidityChangeEventType(t,e){return t.includes(e)}isMintTransaction(){return!!this.getMoveCallCommand("mint")}isRedeemTransaction(){return!!this.getMoveCallCommand("redeem")}decodeMint(t){let{event:{sui_amount_in:e}}=t;return console.log("Decoder.decodeMint",e),{txType:lc.Other,type:"mint",intentionData:{amount:e}}}decodeRedeem(t){let{event:{lst_amount_in:e}}=t;return console.log("Decoder.decodeRedeem",e),{txType:lc.Other,type:"redeem",intentionData:{amount:e}}}};import{mint as hp}from"@alphafi/stsui-sdk";var Ca=class a extends f{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{account:n}=e,{amount:o}=this.data;return await hp(o,{address:n.address})}static fromData(e){return console.log("MintIntention.fromData",e),new a(e)}};import{redeem as yp}from"@alphafi/stsui-sdk";var Ia=class a extends f{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{account:n}=e,{amount:o}=this.data;return await yp(o,{address:n.address})}static fromData(e){return console.log("RedeemIntention.fromData",e),new a(e)}};var ka=class{application="stsui";supportSDK="@mysten/sui";async deserialize(t){let{transaction:e,suiClient:n}=t,o=await n.devInspectTransactionBlock({sender:e.getData().sender,transactionBlock:e});console.log("StSuiHelper Sim result - ",o);let i=new Ta(e,o).decode();return{txType:Sp.Other,txSubType:i.type,intentionData:i.intentionData}}async build(t){let{account:e}=t;console.log("StSui build transaction type",t.txSubType);let n;switch(t.txSubType){case"mint":n=Ca.fromData(t.intentionData);break;case"redeem":n=Ia.fromData(t.intentionData);break;default:throw new Error("build not implemented")}return n.build({account:e})}};import{TransactionType as Up}from"@msafe/sui3-utils";import{TurbosSdk as Fp}from"turbos-clmm-sdk";import{TransactionType as H}from"@msafe/sui3-utils";import{bcs as dc}from"@mysten/sui.js/bcs";import{normalizeStructTag as Tp,normalizeSuiAddress as Se}from"@mysten/sui.js/utils";import{BN as Cp}from"turbos-clmm-sdk";var G={PackageId:"0x02fe4933f4521250e55a15441096d1d4a38a7311195b0bca126fc0138c1f5a97",Claim:"0x0c822cec42f7ca703696b4232f1c47b348330c23580172a29aab465bc071d894",turbosCoinType:"0x5d1f47ea69bb0de31c313d7acf89b890dbb8991ea8e03c6c355171f84bb1ba4a::turbos::TURBOS"},z={PackageId:"0xdee9"};var Ip=(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}`)}},Da=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(`${G.PackageId}::claim::join`)}isPrixClaimTransaction(){return!!this.getMoveCallTransaction(`${G.PackageId}::claim::claim`)}isRemoveLiquidityTransaction(){return!!this.getMoveCallsTransaction([`${this.config.PackageId}::position_manager::decrease_liquidity`,`${this.config.PackageId}::position_manager::burn`])}isSwapExactBaseForQuoteTransaction(){return!!this.getMoveCallTransaction(`${z.PackageId}::clob_v2::swap_exact_base_for_quote`)}isSwapExactQuoteForBaseTransaction(){return!!this.getMoveCallTransaction(`${z.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=Ip(e,t.target,this.swap1Layer,this.swap2Layer),o=n.map((m,b)=>{let S=this.helper.decodeSharedObjectId(b),T=this.helper.decodeInputU128(4+b+e),x=this.turbosSdk.math.sqrtPriceX64ToTickIndex(new Cp(T.toString()));return{pool:S,a2b:m,nextTickIndex:x}}),r=n[0]||e===1?t.typeArguments[0]:t.typeArguments[1],i=e===1?t.typeArguments[4]:n[0]?t.typeArguments[1]:t.typeArguments[0],s=this.helper.decodeInputAddress(6+2*e),c=this.helper.decodeInputU64(7+2*e),l=this.helper.decodeInputBool(5+2*e),d=this.helper.decodeInputU64(2+e),u=this.helper.decodeInputU64(3+e),p=await this.turbosSdk.trade.computeSwapResultV2({pools:[{pool:o[0].pool,a2b:o[0].a2b,amountSpecified:d}],address:s,amountSpecifiedIsInput:l});return{txType:H.Other,type:"Swap",intentionData:{routes:o,coinTypeA:r,coinTypeB:i,address:s,amountA:l?d:u,amountB:l?u:d,amountSpecifiedIsInput:l,slippage:"0.1",deadline:c}}}decodeAddLiquidity(){console.log(this.helper,"decodeAddLiquidity this.helper");let t=this.helper.decodeSharedObjectId(0),e=this.helper.decodeInputAddress(12),n=this.helper.decodeInputU64(8),o=this.helper.decodeInputU64(9),r=this.helper.decodeInputU32(4),i=this.helper.decodeInputBool(5),s=this.helper.decodeInputU32(6),c=this.helper.decodeInputBool(7),l=this.helper.decodeInputU64(13);return{txType:H.Other,type:"AddLiquidity",intentionData:{pool:t,slippage:10,address:e,amountA:n,amountB:o,tickLower:i?-r:r,tickUpper:c?-s:s,deadline:l}}}decodeIncreaseLiquidity(t){console.log(this.helper,"decodeIncreaseLiquidity this.helper");let e=this.helper.decodeSharedObjectId(0),n=this.helper.decodeSharedObjectId(4),o=this.helper.decodeInputU64(5),r=this.helper.decodeInputU64(6),i=this.helper.decodeInputU64(9);return{txType:H.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:H.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:H.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:H.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:H.Other,type:"Burn",intentionData:{pool:t,nft:e}}}decodeRemoveLiquidity(t){console.log(this.helper,"decodeRemoveLiquidity this.helper");let e=this.decreaseLiquidityHelper.decodeSharedObjectId(0),n=this.decreaseLiquidityHelper.decodeSharedObjectId(2),o=this.decreaseLiquidityHelper.decodeInputU64(3),r=this.decreaseLiquidityHelper.decodeInputU64(4),i=this.decreaseLiquidityHelper.decodeInputU64(5),s=this.decreaseLiquidityHelper.decodeInputU64(6),c=this.collectRewardHelper.map(u=>u.decodeInputU64(5)),l=this.collectFeeHelper.decodeInputU64(3)||0,d=this.collectFeeHelper.decodeInputU64(4)||0;return{txType:H.Other,type:"RemoveLiquidity",intentionData:{pool:e,decreaseLiquidity:o,nft:n,amountA:r,amountB:i,slippage:10,address:t,collectAmountA:l,collectAmountB:d,rewardAmounts:c,deadline:s}}}decodePrixClaim(){return{txType:H.Other,type:"PrixClaim",intentionData:{}}}decodePrixJoin(){return{txType:H.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:H.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:H.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 St(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 St(e,this.txb))}get collectFeeHelper(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target===`${this.config.PackageId}::position_manager::collect`);return new St(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 St(t,this.txb)}get swapExactBaseForQuoteHelper(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target===`${z.PackageId}::clob_v2::swap_exact_base_for_quote`);return new St(t,this.txb)}get swapExactQuoteForBaseHelper(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target===`${z.PackageId}::clob_v2::swap_exact_quote_for_base`);return new St(t,this.txb)}},St=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 Se(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 dc.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 Se(t.value.Object.ImmOrOwned.objectId)}return Se(t.value)}static getSharedObjectId(t){if(t.type!=="object")throw new Error(`not object argument: ${JSON.stringify(t)}`);if(typeof t.value!="object")return Se(t.value);if(!("Object"in t.value)||!("Shared"in t.value.Object))throw new Error("not Shared");return Se(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 dc.de(e,new Uint8Array(n))}typeArg(t){return Tp(this.moveCall.typeArguments[t])}shortTypeArg(t){return this.moveCall.typeArguments[t]}txArg(t){return this.moveCall.arguments[t]}};import{TurbosSdk as kp}from"turbos-clmm-sdk";var xa=class a extends y{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new kp(e.network.replace("sui:",""),e.suiClient),{pool:o,address:r,amountA:i,amountB:s,slippage:c,tickLower:l,tickUpper:d,deadline:u,txb:p}=this.data;return n.pool.addLiquidity({pool:o,slippage:c,address:r,amountA:i,amountB:s,tickLower:l,tickUpper:d,deadline:u,txb:p})}static fromData(e){return new a(e)}};import{TurbosSdk as Dp}from"turbos-clmm-sdk";var va=class a extends y{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new Dp(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 xp}from"turbos-clmm-sdk";var Aa=class a extends y{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new xp(e.network.replace("sui:",""),e.suiClient),{pool:o,address:r,nft:i,collectAmountA:s,collectAmountB:c,deadline:l,txb:d}=this.data;return n.pool.collectFee({pool:o,address:r,collectAmountA:s,collectAmountB:c,nft:i,deadline:l,txb:d})}static fromData(e){return new a(e)}};import{TurbosSdk as vp}from"turbos-clmm-sdk";var Pa=class a extends y{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new vp(e.network.replace("sui:",""),e.suiClient),{pool:o,address:r,nft:i,rewardAmounts:s,deadline:c,txb:l}=this.data;return n.pool.collectReward({pool:o,address:r,rewardAmounts:s,nft:i,deadline:c,txb:l})}static fromData(e){return new a(e)}};import{TurbosSdk as Ap}from"turbos-clmm-sdk";var Oa=class a extends y{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new Ap(e.network.replace("sui:",""),e.suiClient),{fee:o,address:r,tickLower:i,tickUpper:s,sqrtPrice:c,slippage:l,coinTypeA:d,coinTypeB:u,amountA:p,amountB:m,deadline:b,txb:S}=this.data;return n.pool.createPool({fee:o,amountA:p,amountB:m,address:r,tickLower:i,tickUpper:s,sqrtPrice:c,slippage:l,coinTypeA:d,coinTypeB:u,deadline:b,txb:S})}static fromData(e){return new a(e)}};import{TurbosSdk as Pp}from"turbos-clmm-sdk";var Ra=class a extends y{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new Pp(e.network.replace("sui:",""),e.suiClient),{pool:o,address:r,amountA:i,amountB:s,slippage:c,nft:l,decreaseLiquidity:d,deadline:u,txb:p}=this.data;return n.pool.decreaseLiquidity({pool:o,slippage:c,address:r,amountA:i,amountB:s,nft:l,decreaseLiquidity:d,deadline:u,txb:p})}static fromData(e){return new a(e)}};import{TurbosSdk as Op}from"turbos-clmm-sdk";var _a=class a extends y{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new Op(e.network.replace("sui:",""),e.suiClient),{pool:o,address:r,amountA:i,amountB:s,slippage:c,nft:l,deadline:d,txb:u}=this.data;return n.pool.increaseLiquidity({pool:o,slippage:c,address:r,amountA:i,amountB:s,nft:l,deadline:d,txb:u})}static fromData(e){return new a(e)}};import{TransactionBlock as Rp}from"@mysten/sui.js/transactions";import{SUI_CLOCK_OBJECT_ID as _p}from"@mysten/sui.js/utils";var Ba=class a extends y{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new Rp;return n.moveCall({target:`${G.PackageId}::claim::claim`,typeArguments:[G.turbosCoinType],arguments:[n.object(G.Claim),n.object(_p)]}),n}static fromData(e){return new a(e)}};import{TransactionBlock as Bp}from"@mysten/sui.js/transactions";var Ma=class a extends y{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new Bp;return n.moveCall({target:`${G.PackageId}::claim::join`,typeArguments:[G.turbosCoinType],arguments:[n.object(G.Claim)]}),n}static fromData(e){return new a(e)}};import{TransactionBlock as Mp}from"@mysten/sui.js/transactions";import{TurbosSdk as jp}from"turbos-clmm-sdk";var ja=class a extends y{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new jp(e.network.replace("sui:",""),e.suiClient),o=new Mp;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 Np}from"turbos-clmm-sdk";var Na=class a extends y{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){console.log(this.data,"this.data");let n=new Np(e.network.replace("sui:",""),e.suiClient),{routes:o,coinTypeA:r,coinTypeB:i,address:s,amountA:c,amountB:l,slippage:d,amountSpecifiedIsInput:u,deadline:p,txb:m}=this.data;return n.trade.swap({routes:o,coinTypeA:r,coinTypeB:i,address:s,amountA:c,amountB:l,amountSpecifiedIsInput:u,slippage:d,deadline:p,txb:m})}static fromData(e){return new a(e)}};import{TurbosSdk as Wp}from"turbos-clmm-sdk";import{normalizeSuiObjectId as uc}from"@mysten/sui.js/utils";import{TransactionBlock as pc}from"@mysten/sui.js/transactions";import{unstable_getObjectId as Ep}from"turbos-clmm-sdk";var we=class{constructor(t){this.turbosSdk=t}async getCoinsData(t,e,n){let o=[],r;do r=await this.turbosSdk.provider.getCoins({owner:t,coinType:e,cursor:r?.nextCursor}),o.push(...r.data);while(r.hasNextPage);let i=[],s=0;return o.sort((c,l)=>Number(l.balance)-Number(c.balance)).some(c=>s>=n?!0:(s+=Number(c.balance),i.push(c),!1)),i}splitAndMergeCoin(t,e,n){if(!t||t.length<1)return[void 0,void 0];if(this.isSuiCoinAddress(t[0].coinType)){let[i]=n.splitCoins(n.gas,[n.pure(e)]);return[i,void 0]}let o=n.object(t[0].coinObjectId);t.length>1&&n.mergeCoins(o,t.slice(1).map(i=>n.object(i.coinObjectId)));let[r]=n.splitCoins(o,[n.pure(e)]);return[r,o]}isSuiCoinAddress(t){return t.toLocaleLowerCase()==="0x2::sui::sui"}async IsAccountCap(t){let e=await this.turbosSdk.provider.getOwnedObjects({owner:t,options:{showContent:!0,showType:!0,showOwner:!0},filter:{StructType:`${z.PackageId}::custodian_v2::AccountCap`}});return e.data[0]?.data?Ep(e.data[0].data):void 0}createAccount(t){let[e]=t.moveCall({typeArguments:[],target:`${z.PackageId}::clob_v2::create_account`,arguments:[]});return e}zero(t,e){return e.moveCall({typeArguments:[t],target:"0x2::coin::zero",arguments:[]})}};var mc=89,fc=1e6,bc=async a=>{let{token1:t,token2:e,poolId:n,amountIn:o,currentAddress:r,turbosSdk:i}=a,s=new pc,c=new we(i),l=await c.getCoinsData(r,e,o),[d,u]=c.splitAndMergeCoin(l,o,s);if(!d)throw new Error(`Not enough balance: ${e}`);let p=await c.IsAccountCap(r),m=p?s.object(p):c.createAccount(s),[b,S,T]=s.moveCall({typeArguments:[t,e],target:`${z.PackageId}::clob_v2::swap_exact_quote_for_base`,arguments:[s.object(String(n)),s.pure(mc),m,s.pure(o),s.object(uc("0x6")),d]});return u&&s.transferObjects([u],s.pure(r)),s.transferObjects([b],s.pure(r)),s.transferObjects([S],s.pure(r)),p||s.transferObjects([m],s.pure(r)),s.setSenderIfNotSet(r),s.setGasBudget(fc),s},gc=async a=>{let{token1:t,token2:e,poolId:n,amountIn:o,currentAddress:r,turbosSdk:i}=a,s=new pc,c=new we(i),l=await c.getCoinsData(r,t,o),[d,u]=c.splitAndMergeCoin(l,o,s);if(!d)throw new Error(`Not enough balance: ${t}`);let p=await c.IsAccountCap(r),m=p?s.object(p):c.createAccount(s),b=c.zero(e,s),[S,T,x]=s.moveCall({typeArguments:[t,e],target:`${z.PackageId}::clob_v2::swap_exact_base_for_quote`,arguments:[s.object(String(n)),s.pure(mc),m,s.pure(o),d,b,s.object(uc("0x6"))]});return u&&s.transferObjects([u],s.pure(r)),s.transferObjects([S],s.pure(r)),s.transferObjects([T],s.pure(r)),p||s.transferObjects([m],s.pure(r)),s.setSenderIfNotSet(r),s.setGasBudget(fc),s};var Ea=class a extends y{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new Wp(e.network.replace("sui:",""),e.suiClient);return await gc({...this.data,turbosSdk:n,currentAddress:e.account.address})}static fromData(e){return new a(e)}};import{TurbosSdk as Lp}from"turbos-clmm-sdk";var Wa=class a extends y{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new Lp(e.network.replace("sui:",""),e.suiClient);return await bc({...this.data,turbosSdk:n,currentAddress:e.account.address})}static fromData(e){return new a(e)}};var La=class{application="turbos";supportSDK="@mysten/sui.js";async deserialize(t){let e=new Fp(t.network.replace("sui:",""),t.suiClient),n=await e.contract.getConfig(),{transactionBlock:o,account:r}=t;console.log(t,"input");let s=await new Da(o,e,n).decode(r.address);return{txType:Up.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=Oa.fromData(t.intentionData);break;case"AddLiquidity":r=xa.fromData(t.intentionData);break;case"IncreaseLiquidity":r=_a.fromData(t.intentionData);break;case"DecreaseLiquidity":r=Ra.fromData(t.intentionData);break;case"RemoveLiquidity":r=ja.fromData(t.intentionData);break;case"CollectFee":r=Aa.fromData(t.intentionData);break;case"CollectReward":r=Pa.fromData(t.intentionData);break;case"Burn":r=va.fromData(t.intentionData);break;case"Swap":r=Na.fromData(t.intentionData);break;case"PrixJoin":r=Ma.fromData(t.intentionData);break;case"PrixClaim":r=Ba.fromData(t.intentionData);break;case"SwapExactBaseForQuote":r=Ea.fromData(t.intentionData);break;case"SwapExactQuoteForBase":r=Wa.fromData(t.intentionData);break;default:throw new Error("not implemented")}return r.build({suiClient:e,account:n,network:o})}};import{TransactionType as Gp}from"@msafe/sui3-utils";import{TransactionType as Gr}from"@msafe/sui3-utils";import{bcs as hc}from"@mysten/sui.js/bcs";import{normalizeStructTag as Kp,normalizeSuiAddress as Te}from"@mysten/sui.js/utils";var qp={packageId:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55",poolObjectId:"0x7fa2faa111b8c65bea48a23049bfd81ca8f971a262d981dcd9a17c3825cb5baf",metadataObjectId:"0x680cd26af32b2bde8d3361e804c53ec1d1cfe24c7f039eb7f549e8dfde389a60",systemStateObjectId:"0x0000000000000000000000000000000000000000000000000000000000000005",certType:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55::cert::CERT",gasBudget:5e7},A=qp;var Ua=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(`${A.packageId}::native_pool::stake`)}isUnStakeTransaction(){return!!this.getMoveCallTransaction(`${A.packageId}::native_pool::unstake`)}isClaimTicketTransaction(){return!!this.getMoveCallTransaction(`${A.packageId}::native_pool::burn_ticket`)}decodeStake(){let t=this.transactions[0].amounts[0].value.toNumber();return{txType:Gr.Other,type:"Stake",intentionData:{amount:t}}}decodeUnStake(){let e=this.transactions.find(n=>n.kind==="SplitCoins").amounts[0].value.toNumber();return{txType:Gr.Other,type:"UnStake",intentionData:{amount:e}}}decodeClaimTicket(){let t=this.helper.decodeOwnedObjectId(2);return console.log(t),{txType:Gr.Other,type:"ClaimTicket",intentionData:{ticketId:t}}}get helper(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(A.packageId));return new zr(t,this.txb)}},zr=class a{constructor(t,e){this.moveCall=t;this.txb=e}decodeSharedObjectId(t){let e=this.getInputParam(t);return a.getSharedObjectId(e)}decodeOwnedObjectId(t){let e=this.getInputParam(t);return a.getOwnedObjectId(e)}decodeInputU64(t){let e=this.decodePureArg(t,"u64");return Number(e)}decodeInputU8(t){let e=this.decodePureArg(t,"u8");return Number(e)}decodeInputAddress(t){let e=this.decodePureArg(t,"address");return Te(e)}decodeInputString(t){return this.decodePureArg(t,"string")}decodeInputBool(t){return this.decodePureArg(t,"bool")}decodePureArg(t,e){let n=this.getInputParam(t);return a.getPureInputValue(n,e)}getInputParam(t){let e=this.moveCall.arguments[t];if(e.kind!=="Input")throw new Error("not input type");return this.txb.blockData.inputs[e.index]}static getPureInputValue(t,e){if(t.type!=="pure")throw new Error("not pure argument");if(typeof t.value=="object"&&"Pure"in t.value){let n=t.value.Pure;return hc.de(e,new Uint8Array(n))}return t.value}static getOwnedObjectId(t){if(t.type!=="object")throw new Error(`not object argument: ${JSON.stringify(t)}`);if(typeof t.value=="object"){if(!("Object"in t.value)||!("ImmOrOwned"in t.value.Object))throw new Error("not ImmOrOwned");return Te(t.value.Object.ImmOrOwned.objectId)}return Te(t.value)}static getSharedObjectId(t){if(t.type!=="object")throw new Error(`not object argument: ${JSON.stringify(t)}`);if(typeof t.value!="object")return Te(t.value);if(!("Object"in t.value)||!("Shared"in t.value.Object))throw new Error("not Shared");return Te(t.value.Object.Shared.objectId)}static getPureInput(t,e){if(t.type!=="pure")throw new Error("not pure argument");if(typeof t.value!="object")return t.value;if(!("Pure"in t.value))throw new Error("Pure not in value");let n=t.value.Pure;return hc.de(e,new Uint8Array(n))}typeArg(t){return Kp(this.moveCall.typeArguments[t])}txArg(t){return this.moveCall.arguments[t]}};import{TransactionBlock as Vp}from"@mysten/sui.js/transactions";var Fa=class a extends y{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){console.log(e);let n=new Vp,{ticketId:o}=this.data;return n.moveCall({target:`${A.packageId}::native_pool::burn_ticket`,arguments:[n.object(A.poolObjectId),n.object(A.systemStateObjectId),n.object(o)]}),n}static fromData(e){return new a(e)}};import{TransactionBlock as Qp}from"@mysten/sui.js/transactions";var qa=class a extends y{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){console.log(e);let n=new Qp,{amount:o}=this.data,[r]=n.splitCoins(n.gas,[n.pure(o)]);return n.moveCall({target:`${A.packageId}::native_pool::stake`,arguments:[n.object(A.poolObjectId),n.object(A.metadataObjectId),n.object(A.systemStateObjectId),r]}),n}static fromData(e){return new a(e)}};import{TransactionBlock as Hp}from"@mysten/sui.js/transactions";var $a=class a extends y{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){console.log(e);let n=new Hp,{amount:o}=this.data,r=(await e.suiClient.getAllCoins({owner:e.account.address,limit:100})).data,[i,...s]=r.filter(d=>d.coinType.split("::")[0]===A.certType.split("::")[0]),c=n.object(i.coinObjectId);s.length&&n.mergeCoins(c,s.map(d=>n.object(d.coinObjectId)));let l=n.splitCoins(n.object(i.coinObjectId),[n.pure(o)]);return n.moveCall({target:`${A.packageId}::native_pool::unstake`,arguments:[n.object(A.poolObjectId),n.object(A.metadataObjectId),n.object(A.systemStateObjectId),l]}),n}static fromData(e){return new a(e)}};var Ka=class{application="volo";supportSDK="@mysten/sui.js";async deserialize(t){let{transactionBlock:e}=t,o=new Ua(e).decode();return{txType:Gp.Other,txSubType:o.type,intentionData:o.intentionData}}async build(t){let{suiClient:e,account:n}=t,o;switch(t.txSubType){case"Stake":o=qa.fromData(t.intentionData);break;case"UnStake":o=$a.fromData(t.intentionData);break;case"ClaimTicket":o=Fa.fromData(t.intentionData);break;default:throw new Error("not implemented")}return o.build({suiClient:e,account:n})}};import{TransactionType as rm}from"@msafe/sui3-utils";import{asIntN as yc}from"@cetusprotocol/cetus-sui-clmm-sdk";import{TransactionType as Dt}from"@msafe/sui3-utils";import{fromB64 as Ce}from"@mysten/bcs";import{bcs as Ie}from"@mysten/sui/bcs";var Va=class{constructor(t){this.transaction=t}decode(){if(this.isOpenPositionTx())return this.decodeOpenPositionTx();if(this.isClosePositionTx())return this.decodeClosePositionTx();if(this.isProvideLiquidityTx())return this.decodeProvideLiquidityTx();if(this.isRemoveLiquidityTx())return this.decodeRemoveLiquidityTx();if(this.isCollectRewardsAndFeeTx())return this.decodeCollectRewardsAndFeeTx();if(this.isCollectRewardsTx())return this.decodeCollectRewardsTx();if(this.isCollectFeeTx())return this.decodeCollectFeeTx();throw new Error("Unknown transaction type")}decodeOpenPositionTx(){let t=this.getMoveCallCommand("open_position"),e=this.getMoveCallCommand("provide_liquidity_with_fixed_amount");return{txType:Dt.Other,type:"OpenPosition",intentionData:{pool:this.getSharedObjectID(this.getInputIndex(t,1)),lowerTick:Number(yc(BigInt(this.getU32(this.getInputIndex(t,2)))).toString()),upperTick:Number(yc(BigInt(this.getU32(this.getInputIndex(t,3)))).toString()),tokenAmount:this.getU64(this.getInputIndex(e,6)),maxAmountTokenA:this.getU64(this.getInputIndex(e,7)),maxAmountTokenB:this.getU64(this.getInputIndex(e,8)),isTokenAFixed:this.getBoolean(this.getInputIndex(e,9))}}}decodeClosePositionTx(){let t=this.getMoveCallCommand("close_position"),e=this.getCollectRewardCallData();return{txType:Dt.Other,type:"ClosePosition",intentionData:{pool:this.getSharedObjectID(this.getInputIndex(t,2)),position:this.getOwnedObjectID(this.getInputIndex(t,3)),transferTokensTo:this.getAddress(this.getInputIndex(t,4)),collectRewardTokens:e.map(n=>n.rewardCoinType),collectFeeTokens:this.getTypeArguments(t)}}}decodeProvideLiquidityTx(){let t=this.getMoveCallCommand("provide_liquidity_with_fixed_amount");return{txType:Dt.Other,type:"ProvideLiquidity",intentionData:{pool:this.getSharedObjectID(this.getInputIndex(t,2)),position:this.getOwnedObjectID(this.getInputIndex(t,3)),tokenAmount:this.getU64(this.getInputIndex(t,6)),maxAmountTokenA:this.getU64(this.getInputIndex(t,7)),maxAmountTokenB:this.getU64(this.getInputIndex(t,8)),isTokenAFixed:this.getBoolean(this.getInputIndex(t,9))}}}decodeRemoveLiquidityTx(){let t=this.getMoveCallCommand("remove_liquidity");return{txType:Dt.Other,type:"RemoveLiquidity",intentionData:{pool:this.getSharedObjectID(this.getInputIndex(t,2)),position:this.getOwnedObjectID(this.getInputIndex(t,3)),liquidity:this.getU128(this.getInputIndex(t,4)),maxAmountTokenA:this.getU64(this.getInputIndex(t,5)),maxAmountTokenB:this.getU64(this.getInputIndex(t,6)),transferTokensTo:this.getAddress(this.getInputIndex(t,7)),...this.collectTokens()}}}decodeCollectRewardsTx(){let t=this.getCollectRewardCallData();return{txType:Dt.Other,type:"CollectRewards",intentionData:{pool:t[0].pool,position:t[0].position,collectRewardTokens:t.map(e=>e.rewardCoinType)}}}decodeCollectFeeTx(){return{txType:Dt.Other,type:"CollectFee",intentionData:this.getFeeCallData()}}decodeCollectRewardsAndFeeTx(){let t=this.getFeeCallData();return{txType:Dt.Other,type:"CollectRewardsAndFee",intentionData:{pool:t.pool,position:t.position,...this.collectTokens()}}}getFeeCallData(){let t=this.getMoveCallCommand("collect_fee");return{pool:this.getSharedObjectID(this.getInputIndex(t,2)),position:this.getOwnedObjectID(this.getInputIndex(t,3)),collectFeeTokens:this.getTypeArguments(t)}}getCollectRewardCallData(){let t=[];return this.commands.forEach(e=>{e.$kind==="MoveCall"&&e.MoveCall.function==="collect_reward"&&t.push({pool:this.getSharedObjectID(this.getInputIndex(e,2)),position:this.getOwnedObjectID(this.getInputIndex(e,3)),rewardCoinType:this.getTypeArguments(e)[2]})}),t}collectTokens(){let t=this.getFeeCallData(),e=this.getCollectRewardCallData();return{collectFeeTokens:t.collectFeeTokens,collectRewardTokens:e.map(n=>n.rewardCoinType)}}get commands(){return this.transaction.getData().commands}get inputs(){return this.transaction.getData().inputs}isOpenPositionTx(){return!!this.getMoveCallCommand("open_position")}isProvideLiquidityTx(){return!!this.getMoveCallCommand("provide_liquidity_with_fixed_amount")}isRemoveLiquidityTx(){return!!this.getMoveCallCommand("remove_liquidity")}isCollectRewardsTx(){return!!this.getMoveCallCommand("collect_reward")}isCollectFeeTx(){return!!this.getMoveCallCommand("collect_fee")}isCollectRewardsAndFeeTx(){return this.isCollectRewardsTx()&&this.isCollectFeeTx()}isClosePositionTx(){return!!this.getMoveCallCommand("close_position")}getMoveCallCommand(t){return this.commands.find(e=>e.$kind==="MoveCall"&&e.MoveCall.function===t)}getSharedObjectID(t){return this.inputs[t].Object.SharedObject.objectId}getOwnedObjectID(t){return this.inputs[t].Object.ImmOrOwnedObject.objectId}getU32(t){return String(Ie.u32().parse(Uint8Array.from(Ce(this.inputs[t].Pure.bytes))))}getU64(t){return Ie.u64().parse(Uint8Array.from(Ce(this.inputs[t].Pure.bytes)))}getU128(t){return Ie.u128().parse(Uint8Array.from(Ce(this.inputs[t].Pure.bytes)))}getBoolean(t){return Ie.bool().parse(Uint8Array.from(Ce(this.inputs[t].Pure.bytes)))}getAddress(t){return Ie.Address.parse(Uint8Array.from(Ce(this.inputs[t].Pure.bytes)))}getTypeArguments(t){return t.MoveCall.typeArguments||[]}getInputIndex(t,e){return t.MoveCall.arguments[e].Input}};import{TransactionType as Yp}from"@msafe/sui3-utils";import{BN as xt,ClmmPoolUtil as Xp}from"@firefly-exchange/library-sui";import{SuiClient as zp}from"@firefly-exchange/library-sui";import{OnChainCalls as Jp}from"@firefly-exchange/library-sui/dist/src/spot";var Sc={rpc:"https://fullnode.mainnet.sui.io/",objects:{GlobalConfig:"0x03db251ba509a8d5d8777b6338836082335d93eecbdd09a11e190a1cff51c352",BasePackage:"0x3492c874c1e3b3e2984e8c41b589e642d4d0a5d6459e5a9cfc2d52fd7c89c267",CurrentPackage:"0x702301e7c6ca527a6f6a83f12c5edf2dcd6ec7a23fb5318ec86d88282eab7057"}},Tt=(a,t)=>{if(a!=="sui:mainnet")throw new Error("Bluefin spot protocol is only available on sui::mainnet");let e=new zp({url:Sc.rpc});return new Jp(e,Sc.objects,{address:t.address,isUIWallet:!1})};var M=class{static async OpenPosition(t,e,n){let o=Tt(n,e),r=await o.queryChain.getPool(t.pool),i=this.prototype.buildLiqInput(r,{...t,slippage:0});return await o.openPositionWithFixedAmount(r,t.lowerTick,t.upperTick,i,{returnTx:!0,sender:e.address})}static async provideLiquidity(t,e,n){let o=Tt(n,e),r=await o.queryChain.getPool(t.pool),i=this.prototype.buildLiqInput(r,t);return await o.provideLiquidityWithFixedAmount(r,t.position,i,{returnTx:!0,sender:e.address})}static async removeLiquidity(t,e,n){let o=Tt(n,e),r=await o.queryChain.getPool(t.pool);return await o.removeLiquidity(r,t.position,{liquidityAmount:new xt(t.liquidity),tokenMaxA:new xt(t.maxAmountTokenA),tokenMaxB:new xt(t.maxAmountTokenB)},{returnTx:!0,sender:e.address})}static async closePosition(t,e,n){let o=Tt(n,e),r=await o.queryChain.getPool(t.pool);return await o.closePosition(r,t.position,{returnTx:!0,sender:e.address})}static async collectRewards(t,e,n){let o=Tt(n,e),r=await o.queryChain.getPool(t.pool);return await o.collectRewards(r,t.position,{rewardCoinsType:t.collectRewardTokens,returnTx:!0,sender:e.address})}static async collectFee(t,e,n){let o=Tt(n,e),r=await o.queryChain.getPool(t.pool);return await o.collectFee(r,t.position,{returnTx:!0,sender:e.address})}static async collectRewardsAndFee(t,e,n){let o=Tt(n,e),r=await o.queryChain.getPool(t.pool);return console.log(t.position),await o.collectFeeAndRewards(r,t.position,{returnTx:!0,sender:e.address})}buildLiqInput(t,e){return{...Xp.estLiquidityAndCoinAmountFromOneAmounts(e.lowerTick,e.upperTick,new xt(e.tokenAmount),e.isTokenAFixed,!0,0,new xt(t.current_sqrt_price)),tokenMaxA:new xt(e.maxAmountTokenA),tokenMaxB:new xt(e.maxAmountTokenB)}}};var Qa=class a extends f{constructor(e){super(e);this.data=e}txType=Yp.Other;txSubType="ClosePosition";async build(e){let{account:n,network:o}=e;return console.log(this.data),M.closePosition(this.data,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Zp}from"@msafe/sui3-utils";var Ha=class a extends f{constructor(e){super(e);this.data=e}txType=Zp.Other;txSubType="CollectFee";async build(e){let{account:n,network:o}=e;return console.log(this.data),M.collectFee(this.data,n,o)}static fromData(e){return new a(e)}};import{TransactionType as tm}from"@msafe/sui3-utils";var Ga=class a extends f{constructor(e){super(e);this.data=e}txType=tm.Other;txSubType="CollectRewards";async build(e){let{account:n,network:o}=e;return console.log(this.data),M.collectRewards(this.data,n,o)}static fromData(e){return new a(e)}};import{TransactionType as em}from"@msafe/sui3-utils";var za=class a extends f{constructor(e){super(e);this.data=e}txType=em.Other;txSubType="CollectRewardsAndFee";async build(e){let{account:n,network:o}=e;return console.log(this.data),M.collectRewardsAndFee(this.data,n,o)}static fromData(e){return new a(e)}};import{TransactionType as nm}from"@msafe/sui3-utils";var Ja=class a extends f{constructor(e){super(e);this.data=e}txType=nm.Other;txSubType="OpenPosition";async build(e){let{account:n,network:o}=e;return console.log(this.data),M.OpenPosition(this.data,n,o)}static fromData(e){return new a(e)}};import{TransactionType as om}from"@msafe/sui3-utils";var Xa=class a extends f{constructor(e){super(e);this.data=e}txType=om.Other;txSubType="ProvideLiquidity";async build(e){let{account:n,network:o}=e;return console.log(this.data),M.provideLiquidity(this.data,n,o)}static fromData(e){return new a(e)}};import{TransactionType as am}from"@msafe/sui3-utils";var Ya=class a extends f{constructor(e){super(e);this.data=e}txType=am.Other;txSubType="RemoveLiquidity";async build(e){let{account:n,network:o}=e;return console.log(this.data),M.removeLiquidity(this.data,n,o)}static fromData(e){return new a(e)}};var Za=class{application="bluefin";supportSDK="@mysten/sui";async deserialize(t){console.log("Bluefin helper deserialize input: ",t);let{transaction:e}=t,o=new Va(e).decode();return{txType:rm.Other,txSubType:o.type,intentionData:o.intentionData}}async build(t){let{suiClient:e,account:n,network:o}=t;console.log(t.txSubType);let r;switch(t.txSubType){case"OpenPosition":r=Ja.fromData(t.intentionData);break;case"ProvideLiquidity":r=Xa.fromData(t.intentionData);break;case"RemoveLiquidity":r=Ya.fromData(t.intentionData);break;case"ClosePosition":r=Qa.fromData(t.intentionData);break;case"CollectFee":r=Ha.fromData(t.intentionData);break;case"CollectRewards":r=Ga.fromData(t.intentionData);break;case"CollectRewardsAndFee":r=za.fromData(t.intentionData);break;default:throw new Error("not implemented")}return r.build({suiClient:e,account:n,network:o})}};var y6=lo.fromHelpers([new Xn,new ro,new Hn,new io,new Tn,new La,new ra,new Ka,new Je,new Sa,new wa,new _e,new Za,new ka]);export{y6 as appHelpers};
2
2
  //# sourceMappingURL=index.mjs.map