@msafe/sui-app-store 0.0.210 → 0.0.211
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var jc=Object.defineProperty;var di=(a,t)=>{for(var e in t)jc(a,e,{get:t[e],enumerable:!0})};import{TransactionType as Gc}from"@msafe/sui3-utils";import{coinsList as Lc,poolIdPoolNameMap as Uc,poolInfo as ui,singleAssetPoolCoinMap as Fc}from"@alphafi/alphafi-sdk";import{TransactionType as Gt}from"@msafe/sui3-utils";import{bcs as xe,fromB64 as ve}from"@mysten/bcs";var Ae=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=Uc[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&&ui[e].assetTypes.length===2}isSingleAssetDepositEvent(t,e){return t.event_type===0&&ui[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{bytes:e}=t.Pure,n;return e.length===12?n=xe.u64().parse(ve(e)):e.length===24?n=xe.u128().parse(ve(e)):e.length===44?n=xe.u256().parse(ve(e)):n=xe.u64().parse(ve(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:Gt.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{coin:r}=Fc[t],{expo:i}=Lc[r];n=Math.floor(Number(n)/10**(9-i)).toString()}return{txType:Gt.Other,type:"depositSingleAsset",intentionData:{poolName:t,amount:n}}}decodeWithdraw(t){let e=this.extractXTokensAmount();return console.log("Decoder.decodeWithdraw",e),{txType:Gt.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:Gt.Other,type:"withdrawAlpha",intentionData:{withdrawFromLocked:Number(n)>0,xTokensAmount:e}}}decodeClaimReward(){return{txType:Gt.Other,type:"claimReward",intentionData:{}}}};import{claimRewardTxb as $c}from"@alphafi/alphafi-sdk";import qc from"sort-keys-recursive";var f=class{constructor(t){this.data=t}serialize(){return JSON.stringify(qc(this.data))}};var Oe=class a extends f{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{account:n}=e;return await $c(n.address)}static fromData(e){return new a(e)}};import{depositDoubleAssetTxb as Kc}from"@alphafi/alphafi-sdk";var Pe=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 Kc(o,n.address,r,i)}static fromData(e){return console.log("DepositDoubleAssetIntention.fromData",e),new a(e)}};import{depositSingleAssetTxb as Vc}from"@alphafi/alphafi-sdk";var Re=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 Vc(o,n.address,r)}static fromData(e){return console.log("DepositSingleAssetIntention.fromData",e),new a(e)}};import{withdrawTxb as Qc}from"@alphafi/alphafi-sdk";var _e=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 Qc(r,o,n.address)}static fromData(e){return console.log("WithdrawIntention.fromData",e),new a(e)}};import{withdrawAlphaTxb as Hc}from"@alphafi/alphafi-sdk";var Be=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 Hc(r,o,n.address)}static fromData(e){return console.log("WithdrawAlphaIntention.fromData",e),new a(e)}};var Me=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 Ae(e,r).decode();return{txType:Gc.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=Re.fromData(t.intentionData);break;case"depositDoubleAsset":n=Pe.fromData(t.intentionData);break;case"withdraw":n=_e.fromData(t.intentionData);break;case"withdrawAlpha":n=Be.fromData(t.intentionData);break;case"claimReward":n=Oe.fromData(t.intentionData);break;default:throw new Error("not implemented")}return n.build({account:e})}};import{TransactionType as hl}from"@msafe/sui3-utils";import{TransactionType as F}from"@msafe/sui3-utils";import{bcs as br}from"@mysten/sui/bcs";import{SBUCK_FOUNTAIN_PACKAGE_ID as gr}from"bucket-protocol-sdk";var Ee=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(gr,"fountain_core","stake")}isSBUCKUnstakeTransaction(){return!!this.getMoveCallPackageModuleCommand(gr,"fountain_core","force_unstake")}isSBUCKClaimTransaction(){return!!this.getMoveCallPackageModuleCommand(gr,"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,e=!1):([t]=this.getMoveCallCommand("discharge_reservoir").MoveCall.typeArguments,e=!0),console.log("Decoder.decodePsm",t,n,e),{txType:F.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;let c=s.arguments[1];c.$kind==="Input"&&(e=this.getPureInputU64(c.Input));let d=s.arguments[3];if(d.$kind==="Input"){let l=this.getPureAddresses(d.Input);l.length===1&&([n]=l)}}else if(this.getMoveCallCommand("high_borrow")){let s=this.getMoveCallCommand("high_borrow").MoveCall;[t]=s.typeArguments;let c=s.arguments[4];c.$kind==="Input"&&(e=this.getPureInputU64(c.Input));let d=s.arguments[5];if(d.$kind==="Input"){let l=this.getPureAddresses(d.Input);l.length===1&&([n]=l)}}else if(this.getMoveCallCommand("high_borrow_with_strap")){let s=this.getMoveCallCommand("high_borrow_with_strap").MoveCall;[t]=s.typeArguments;let c=s.arguments[5];c.$kind==="Input"&&(e=this.getPureInputU64(c.Input));let d=s.arguments[6];if(d.$kind==="Input"){let l=this.getPureAddresses(d.Input);l.length===1&&([n]=l)}}return{txType:F.Other,type:"borrow",intentionData:{collateralType:t,collateralAmount:r,borrowAmount:e,insertionPlace:n,strapId:o}}}decodeRepay(){let t="",e="0",n="0",r,i=this.getStrapId();if(this.getMoveCallCommand("fully_repay"))[t]=this.getMoveCallCommand("fully_repay").MoveCall.typeArguments;else if(this.getMoveCallCommand("fully_repay_with_strap"))[t]=this.getMoveCallCommand("fully_repay_with_strap").MoveCall.typeArguments;else if(this.getMoveCallCommand("repay_and_withdraw")){let s=this.getMoveCallCommand("repay_and_withdraw").MoveCall;[t]=s.typeArguments;let c=s.arguments[4];c.$kind==="Input"&&(n=this.getPureInputU64(c.Input));let d=s.arguments[5];if(d.$kind==="Input"){let u=this.getPureAddresses(d.Input);u.length===1&&([r]=u)}let l=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];l.$kind==="Input"&&(e=this.getPureInputU64(l.Input))}else if(this.getMoveCallCommand("repay_and_withdraw_with_strap")){let s=this.getMoveCallCommand("repay_and_withdraw_with_strap").MoveCall;[t]=s.typeArguments;let c=s.arguments[5];c.$kind==="Input"&&(n=this.getPureInputU64(c.Input));let d=s.arguments[6];if(d.$kind==="Input"){let u=this.getPureAddresses(d.Input);u.length===1&&([r]=u)}let l=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];l.$kind==="Input"&&(e=this.getPureInputU64(l.Input))}return{txType:F.Other,type:"repay",intentionData:{collateralType:t,repayAmount:e,withdrawAmount:n,isSurplus:!1,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;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)}}else if(this.getMoveCallCommand("withdraw")){let r=this.getMoveCallCommand("withdraw").MoveCall;[t]=r.typeArguments;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)}}return{txType:F.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),{txType:F.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:F.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=0;s<o.length;s++){let c=o[s];n.push("")}else{let s=this.getMoveCallModuleCommands("fountain_core","force_unstake");for(let c=0;c<s.length;c++){let l=s[c].MoveCall.arguments[2];if(l.$kind==="Input"){let{objectId:u}=this.inputs[l.Input].UnresolvedObject;n.push(u)}}}let r=this.isSBUCKWithdrawTransaction(),i={stakeProofs:n,amount:t,isStake:e,toBuck:r};return console.log("Decoder.decodeSBUCKUnstake",i),{txType:F.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:F.Other,type:"sbuck-withdraw",intentionData:{amount:t}}}decodeSBUCKClaim(){let t=[],e=this.getMoveCallModuleCommands("fountain_core","claim");for(let n=0;n<e.length;n++){let r=e[n].MoveCall.arguments[2];if(r.$kind==="Input"){let{objectId:i}=this.inputs[r.Input].UnresolvedObject;t.push(i)}}return console.log("Decoder.decodeSBUCKClaim",t),{txType:F.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:F.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:F.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:F.Other,type:"tank-claim",intentionData:{coinType:e}}}decodeLockedClaim(){let t="",e=0,n=this.getMoveCallModuleCommands("proof_rule","claim");for(let r=0;r<n.length;r++)[t]=n[r].MoveCall.typeArguments,e++;let o=this.getMoveCallModuleCommands("lst_proof_rule","claim");for(let r=0;r<o.length;r++)[t]=o[r].MoveCall.typeArguments,e++;return console.log("Decoder.decodeLockedClaim",t,e),{txType:F.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 br.U64.fromBase64(e.Pure.bytes)}getPureAddresses(t){let e=this.inputs[t];if(e.$kind!=="Pure")throw new Error("not pure argument");return br.vector(br.Address).fromBase64(e.Pure.bytes)}};import{TransactionType as Xc}from"@msafe/sui3-utils";import{Transaction as Jc}from"@mysten/sui/transactions";import{buildPsmTx as Yc}from"bucket-protocol-sdk";import{BucketClient as zc}from"bucket-protocol-sdk";var P=(a,t)=>{let e=a==="sui:mainnet"?"mainnet":"testnet";return new zc(e,t.address)};var pi=async(a,t,e)=>{let{coinType:n,amount:o,buckToCoin:r}=a,i=new Jc,s=P(e,t);return await Yc(s,i,n,o,r,t.address),i};var Ne=class a extends f{constructor(e){super(e);this.data=e}txType=Xc.Other;txSubType="psm";async build(e){let{account:n,network:o}=e;return await pi(this.data,n,o)}static fromData(e){return new a(e)}};import{TransactionType as ol}from"@msafe/sui3-utils";import{Transaction as je}from"@mysten/sui/transactions";import{buildBorrowTx as Zc,buildCloseTx as tl,buildRepayTx as el,buildWithdrawTx as nl}from"bucket-protocol-sdk";var mi=async(a,t,e)=>{let{collateralType:n,collateralAmount:o,borrowAmount:r,insertionPlace:i,strapId:s}=a,c=new je,d=P(e,t);return await Zc(d,c,n,o,r,t.address,i,s),c},fi=async(a,t,e)=>{let{collateralType:n,withdrawAmount:o,insertionPlace:r,strapId:i}=a,s=new je,c=P(e,t);return await nl(c,s,n,o,t.address,r,i),s},bi=async(a,t,e)=>{let{collateralType:n,repayAmount:o,withdrawAmount:r,isSurplus:i,insertionPlace:s,strapId:c}=a,d=new je,l=P(e,t);return await el(l,d,n,o,r,t.address,i,s,c),d},gi=async(a,t,e)=>{let{collateralType:n,recipient:o,strapId:r}=a,i=new je,s=P(e,t);return await tl(s,i,n,o,r),i};var We=class a extends f{constructor(e){super(e);this.data=e}txType=ol.Other;txSubType="borrow";async build(e){let{account:n,network:o}=e;return await mi(this.data,n,o)}static fromData(e){return new a(e)}};import{TransactionType as al}from"@msafe/sui3-utils";var Le=class a extends f{constructor(e){super(e);this.data=e}txType=al.Other;txSubType="repay";async build(e){let{account:n,network:o}=e;return await bi(this.data,n,o)}static fromData(e){return new a(e)}};import{TransactionType as rl}from"@msafe/sui3-utils";var Ue=class a extends f{constructor(e){super(e);this.data=e}txType=rl.Other;txSubType="withdraw";async build(e){let{account:n,network:o}=e;return await fi(this.data,n,o)}static fromData(e){return new a(e)}};import{TransactionType as il}from"@msafe/sui3-utils";var Fe=class a extends f{constructor(e){super(e);this.data=e}txType=il.Other;txSubType="close";async build(e){let{account:n,network:o}=e;return await gi(this.data,n,o)}static fromData(e){return new a(e)}};import{TransactionType as He}from"@msafe/sui3-utils";import{Transaction as qe}from"@mysten/sui/transactions";import{buildSBUCKClaimTx as sl,buildSBUCKDepositTx as cl,buildSBUCKUnstakeTx as ll,buildSBUCKWithdrawTx as dl}from"bucket-protocol-sdk";var hi=async(a,t,e)=>{let{coinType:n,amount:o,isStake:r}=a,i=new qe,s=P(e,t);return await cl(s,i,n,o,t.address,r),i},yi=async(a,t,e)=>{let{stakeProofs:n,amount:o,isStake:r,toBuck:i}=a,s=new qe,c=P(e,t);return await ll(c,s,n,o,t.address,r,i),s},Si=async(a,t,e)=>{let{amount:n}=a,o=new qe,r=P(e,t);return await dl(r,o,n,t.address),o},wi=async(a,t,e)=>{let{stakeProofs:n}=a,o=new qe,r=P(e,t);return await sl(r,o,n,t.address),o};var $e=class a extends f{constructor(e){super(e);this.data=e}txType=He.Other;txSubType="sbuck-deposit";async build(e){let{account:n,network:o}=e;return await hi(this.data,n,o)}static fromData(e){return new a(e)}},Ke=class a extends f{constructor(e){super(e);this.data=e}txType=He.Other;txSubType="sbuck-unstake";async build(e){let{account:n,network:o}=e;return await yi(this.data,n,o)}static fromData(e){return new a(e)}},Ve=class a extends f{constructor(e){super(e);this.data=e}txType=He.Other;txSubType="sbuck-withdraw";async build(e){let{account:n,network:o}=e;return await Si(this.data,n,o)}static fromData(e){return new a(e)}},Qe=class a extends f{constructor(e){super(e);this.data=e}txType=He.Other;txSubType="sbuck-claim";async build(e){let{account:n,network:o}=e;return await wi(this.data,n,o)}static fromData(e){return new a(e)}};import{TransactionType as yr}from"@msafe/sui3-utils";import{Transaction as hr}from"@mysten/sui/transactions";import{buildTankClaimTx as ul,buildTankDepositTx as pl,buildTankWithdrawTx as ml}from"bucket-protocol-sdk";var Ti=async(a,t,e)=>{let{coinType:n,amount:o}=a,r=new hr,i=P(e,t);return await pl(i,r,n,o,t.address),r},Ci=async(a,t,e)=>{let{coinType:n,amount:o}=a,r=new hr,i=P(e,t);return await ml(i,r,n,o,t.address),r},Ii=async(a,t,e)=>{let{coinType:n}=a,o=new hr,r=P(e,t);return await ul(r,o,n,t.address),o};import{Transaction as fl}from"@mysten/sui/transactions";import{buildLockedClaimTx as bl}from"bucket-protocol-sdk";var ki=async(a,t,e)=>{let{coinType:n,proofCount:o}=a,r=new fl,i=P(e,t);return await bl(i,r,n,o,t.address),r};var Ge=class a extends f{constructor(e){super(e);this.data=e}txType=yr.Other;txSubType="tank-deposit";async build(e){let{account:n,network:o}=e;return await Ti(this.data,n,o)}static fromData(e){return new a(e)}},ze=class a extends f{constructor(e){super(e);this.data=e}txType=yr.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)}},Je=class a extends f{constructor(e){super(e);this.data=e}txType=yr.Other;txSubType="tank-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 gl}from"@msafe/sui3-utils";var Ye=class a extends f{constructor(e){super(e);this.data=e}txType=gl.Other;txSubType="lock-claim";async build(e){let{account:n,network:o}=e;return await ki(this.data,n,o)}static fromData(e){return new a(e)}};var Xe=class{application="bucket";supportSDK="@mysten/sui";async deserialize(t){console.log("Bucket helper deserialize input: ",t);let{transaction:e}=t,o=new Ee(e).decode();return{txType:hl.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=Ne.fromData(t.intentionData);break;case"borrow":r=We.fromData(t.intentionData);break;case"withdraw":r=Ue.fromData(t.intentionData);break;case"repay":r=Le.fromData(t.intentionData);break;case"close":r=Fe.fromData(t.intentionData);break;case"tank-deposit":r=Ge.fromData(t.intentionData);break;case"tank-withdraw":r=ze.fromData(t.intentionData);break;case"tank-claim":r=Je.fromData(t.intentionData);break;case"sbuck-deposit":r=$e.fromData(t.intentionData);break;case"sbuck-unstake":r=Ke.fromData(t.intentionData);break;case"sbuck-withdraw":r=Ve.fromData(t.intentionData);break;case"sbuck-claim":r=Qe.fromData(t.intentionData);break;case"lock-claim":r=Ye.fromData(t.intentionData);break;default:throw new Error("not implemented")}return r.build({suiClient:e,account:n,network:o})}};import{TransactionType as td}from"@msafe/sui3-utils";import{TransactionType as vl}from"@msafe/sui3-utils";import{AggregatorClient as yl,Env as Di}from"@cetusprotocol/aggregator-sdk";import{CetusPeripherySDK as Sl}from"@cetusprotocol/cetus-periphery-sdk";import{CetusClmmSDK as wl}from"@cetusprotocol/cetus-sui-clmm-sdk";import Tl from"@cetusprotocol/vaults-sdk";import{SuiClient as Cl}from"@mysten/sui/client";var Il={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"},kl={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:"0xaabf0856070391df81fad9240049d69c5a51c3d376cc0885eeedd516526cc79b",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:""}}},It=(a,t)=>{let e=Il,n=new wl(e);return n.senderAddress=t.address,n},M=(a,t)=>{let e=It(a,t),n=kl;return new Sl(n,e)},Dl="https://api-sui.cetus.zone/router_v2/find_routes",xi=(a,t)=>{let e=new Cl({url:"https://fullnode.mainnet.sui.io/"});return new yl(Dl,t.address,e,Di.Mainnet)},xl={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:Di.Mainnet,providers:["CETUS","DEEPBOOK","KRIYA","KRIYAV3","FLOWX","FLOWXV3","AFTERMATH","TURBOS","HAEDAL","VOLO","AFSUI"]}},Sr=(a,t)=>{let e=new Tl(xl);return e.senderAddress=t.address,e};var vi=async(a,t,e)=>await It(e,t).Position.createAddLiquidityFixTokenPayload(a?.parameter,a?.gasEstimateArg),Ai=async(a,t,e)=>await It(e,t).Position.createAddLiquidityFixTokenPayload(a?.parameter,a?.gasEstimateArg),Oi=async(a,t,e)=>await It(e,t).Position.closePositionTransactionPayload(a),Pi=async(a,t,e)=>await It(e,t).Position.removeLiquidityTransactionPayload(a),Ri=async(a,t,e)=>await It(e,t).Rewarder.collectRewarderTransactionPayload(a);var Ze=class a extends f{constructor(e){super(e);this.data=e}txType=vl.Other;txSubType="OpenAndAddLiquidity";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 tn=class a extends f{constructor(e){super(e);this.data=e}txType=Al.Other;txSubType="ClaimFeeAndMining";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 en=class a extends f{constructor(e){super(e);this.data=e}txType=Ol.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 Pl}from"@msafe/sui3-utils";var _i=async(a,t,e)=>await M(e,t).Farms.openPositionAddLiquidityStakePaylod(a),Bi=async(a,t,e)=>await M(e,t).Farms.addLiquidityFixCoinPayload(a),Mi=async(a,t,e)=>await M(e,t).Farms.removeLiquidityPayload(a),Ei=async(a,t,e)=>await M(e,t).Farms.removeLiquidityPayload(a),Ni=async(a,t,e)=>await M(e,t).Farms.claimFeeAndClmmReward(a),ji=async(a,t,e)=>await M(e,t).Farms.harvestPayload(a),Wi=async(a,t,e)=>{let n=M(e,t),o=Object.values(a);return await n.Farms.batchHarvestPayload(o)},Li=async(a,t,e)=>await M(e,t).Farms.depositPayload(a),Ui=async(a,t,e)=>await M(e,t).Farms.withdrawPayload(a);var nn=class a extends f{constructor(e){super(e);this.data=e}txType=Pl.Other;txSubType="FarmingOpenAndAddLiquidity";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 Rl}from"@msafe/sui3-utils";var on=class a extends f{constructor(e){super(e);this.data=e}txType=Rl.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 _l}from"@msafe/sui3-utils";var an=class a extends f{constructor(e){super(e);this.data=e}txType=_l.Other;txSubType="FarmingClaimFeeAndReward";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 Bl}from"@msafe/sui3-utils";var rn=class a extends f{constructor(e){super(e);this.data=e}txType=Bl.Other;txSubType="FarmingDecreaseLiquidity";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 Ml}from"@msafe/sui3-utils";var sn=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 ji(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as El}from"@msafe/sui3-utils";var cn=class a extends f{constructor(e){super(e);this.data=e}txType=El.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 Nl}from"@msafe/sui3-utils";var ln=class a extends f{constructor(e){super(e);this.data=e}txType=Nl.Other;txSubType="FarmingRemoveLiquidity";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await Ei(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as jl}from"@msafe/sui3-utils";var dn=class a extends f{constructor(e){super(e);this.data=e}txType=jl.Other;txSubType="FarmingStake";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 Wl}from"@msafe/sui3-utils";var un=class a extends f{constructor(e){super(e);this.data=e}txType=Wl.Other;txSubType="FarmingUnstake";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 Ll}from"@msafe/sui3-utils";var pn=class a extends f{constructor(e){super(e);this.data=e}txType=Ll.Other;txSubType="IncreaseLiquidity";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 Ul}from"@msafe/sui3-utils";var mn=class a extends f{constructor(e){super(e);this.data=e}txType=Ul.Other;txSubType="RemoveLiquidity";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)}};import{TransactionType as $l}from"@msafe/sui3-utils";import{restituteMsafeFastRouterSwapParams as Fl}from"@cetusprotocol/aggregator-sdk";import{Transaction as ql}from"@mysten/sui/transactions";var Fi=async(a,t,e)=>{let n=xi(e,t),o=new ql;return await n.fastRouterSwap({...a,routers:Fl(a.routers),txb:o}),o};var fn=class a extends f{constructor(e){super(e);this.data=e}txType=$l.Other;txSubType="AggregatorSwap";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 qi=async(a,t,e)=>await Sr(e,t).Vaults.deposit(a),$i=async(a,t,e)=>await Sr(e,t).Vaults.withdraw(a);var bn=class a extends f{constructor(e){super(e);this.data=e}txType=Kl.Other;txSubType="AddVaultsPosition";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await qi(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Vl}from"@msafe/sui3-utils";var gn=class a extends f{constructor(e){super(e);this.data=e}txType=Vl.Other;txSubType="RemoveVaultsPosition";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 Hl}from"@msafe/sui3-utils";import{Transaction as Ql}from"@mysten/sui/transactions";var Ki={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 Ql;return r.forEach(c=>{s.moveCall({target:`${Ki.published_at}::router::redeem`,typeArguments:[Ki.cetus_coin_type],arguments:[s.object(n),s.object(o),s.pure(c),s.object(i)]})}),s};var hn=class a extends f{constructor(e){super(e);this.data=e}txType=Hl.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 zl}from"@msafe/sui3-utils";import{Transaction as Gl}from"@mysten/sui/transactions";var Qi=async(a,t,e)=>{let n=M(e,t),o=new Gl;return await n.XCetusModule.convertPayload(a,o)},Hi=async(a,t,e)=>await M(e,t).XCetusModule.redeemLockPayload(a),Gi=async(a,t,e)=>await M(e,t).XCetusModule.redeemDividendV3Payload(a.phases,a.venft_id,a.bonus_types,a.bonus_types_v2,a.xTokenType),zi=async(a,t,e)=>await M(e,t).XCetusModule.cancelRedeemPayload(a),Ji=async(a,t,e)=>await M(e,t).XCetusModule.redeemPayload(a);var yn=class a extends f{constructor(e){super(e);this.data=e}txType=zl.Other;txSubType="xCETUSCancelRedeem";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await zi(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Jl}from"@msafe/sui3-utils";var Sn=class a extends f{constructor(e){super(e);this.data=e}txType=Jl.Other;txSubType="xCETUSClaimStakingRwewards";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 Yl}from"@msafe/sui3-utils";var wn=class a extends f{constructor(e){super(e);this.data=e}txType=Yl.Other;txSubType="xCETUSConvert";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await Qi(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Xl}from"@msafe/sui3-utils";var Tn=class a extends f{constructor(e){super(e);this.data=e}txType=Xl.Other;txSubType="xCETUSRedeem";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 Zl}from"@msafe/sui3-utils";var Cn=class a extends f{constructor(e){super(e);this.data=e}txType=Zl.Other;txSubType="xCETUSRedeemLock";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)}};var In=class{application="cetus";supportSDK="@mysten/sui";async deserialize(t){console.log("Cetus helper deserialize input: ",t);let{txbParams:e,action:n}=t;return{txType:td.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=Ze.fromData(t.intentionData);break;case"IncreaseLiquidity":r=pn.fromData(t.intentionData);break;case"DecreaseLiquidity":r=en.fromData(t.intentionData);break;case"RemoveLiquidity":r=mn.fromData(t.intentionData);break;case"ClaimFeeAndMining":r=tn.fromData(t.intentionData);break;case"FarmingOpenAndAddLiquidity":r=nn.fromData(t.intentionData);break;case"FarmingIncreaseLiquidity":r=cn.fromData(t.intentionData);break;case"FarmingDecreaseLiquidity":r=rn.fromData(t.intentionData);break;case"FarmingRemoveLiquidity":r=ln.fromData(t.intentionData);break;case"FarmingClaimFeeAndReward":r=an.fromData(t.intentionData);break;case"FarmingHarvest":r=sn.fromData(t.intentionData);break;case"FarmingBatchHarvest":r=on.fromData(t.intentionData);break;case"FarmingStake":r=dn.fromData(t.intentionData);break;case"FarmingUnstake":r=un.fromData(t.intentionData);break;case"xCETUSConvert":r=wn.fromData(t.intentionData);break;case"xCETUSRedeemLock":r=Cn.fromData(t.intentionData);break;case"xCETUSClaimStakingRwewards":r=Sn.fromData(t.intentionData);break;case"xCETUSCancelRedeem":r=yn.fromData(t.intentionData);break;case"xCETUSRedeem":r=Tn.fromData(t.intentionData);break;case"VestingRedeem":r=hn.fromData(t.intentionData);break;case"AggregatorSwap":r=fn.fromData(t.intentionData);break;case"AddVaultsPosition":r=bn.fromData(t.intentionData);break;case"RemoveVaultsPosition":r=gn.fromData(t.intentionData);break;default:throw new Error("not implemented")}return r.build({suiClient:e,account:n,network:o})}};import{TransactionType as Xd}from"@msafe/sui3-utils";import ed from"sort-keys-recursive";var h=class{constructor(t){this.data=t}serialize(){return JSON.stringify(ed(this.data))}};import{getFullnodeUrl as kn}from"@mysten/sui.js/client";var wr={};di(wr,{contractId:()=>ad,default:()=>ld,feeObjId:()=>sd,roleObjId:()=>rd,status:()=>od,transaction:()=>nd,upgradeCapObjId:()=>cd,vaultObjId:()=>id});var nd="DiBZq4UmVVYiRL6ZJmFKYoHcxtxqrhsCXSkFyT7wUr3j",od="success",ad="0x81c960dc653975fbd0072deca8afb92d322898c911622898ba1b2e3ad0c4bd8d",rd="0xc6ec0bdee0bb59a72077e9acd2f42457043cf47080b3d3fad4d39abf28bba63a",id="0xbc4021387fbac149119fd24e92be9e58f745774292f3a2a12e2ac6daf5363e1d",sd="0x4178f63970fe2daeb256dc5730ad172e82b3e8eb45f31b33e0daae72cd35e1e1",cd="0xe1e9aa7d222d151bfe6dd83358b0d7fdcb11260f710800cfaf7ccc1b1e245115",ld={transaction:nd,status:od,contractId:ad,roleObjId:rd,vaultObjId:id,feeObjId:sd,upgradeCapObjId:cd};var Tr={};di(Tr,{contractId:()=>pd,default:()=>hd,feeObjId:()=>bd,roleObjId:()=>md,status:()=>ud,transaction:()=>dd,upgradeCapObjId:()=>gd,vaultObjId:()=>fd});var dd="855FNDV8o8Z3fWULPnQo9qdhLJpsg7wZrkCpNyfw9KfB",ud="success",pd="0xc357c3985e8fb875d6b37141497af660779aa1bab0ec489b2213efd74067d1fa",md="0x5ab49bdf9fd1413e328ef242b3f8d83dde791b38a0b627bfc87fb25c010d34f1",fd="0xb483558770d8eb26007f193b75db40f0a45f2e36863a687625885d4de6993378",bd="0x48453fc4d7cde3fe35aad89e5dfb496608a6a55ea529a1c0274681a808627f94",gd="0x34279779a0d0d36bd5044b04830d607fa1b0ecf316548c8ac3a44151e4f1a42a",hd={transaction:dd,status:ud,contractId:pd,roleObjId:md,vaultObjId:fd,feeObjId:bd,upgradeCapObjId:gd};var yd=kn("testnet"),Sd=kn("testnet"),wd=kn("mainnet"),Td=kn("mainnet"),Cd="https://bc3p6l5unl.execute-api.us-west-1.amazonaws.com/prod",Id="https://rolsbkota7.execute-api.us-west-1.amazonaws.com/prod",kd="https://6p6mkx33ne.execute-api.us-west-1.amazonaws.com/prod",Dd="https://xrae3mrjv5.execute-api.us-west-1.amazonaws.com/prod",Yi=wr,Xi=Tr,xd=new Map([["dev",{env:"dev",rpc:{url:yd},backend:{url:Cd},contract:Yi}],["stg",{env:"stg",rpc:{url:Sd},backend:{url:Id},contract:Yi}],["prev",{env:"prev",rpc:{url:wd},backend:{url:kd},contract:Xi}],["prod",{env:"prod",rpc:{url:Td},backend:{url:Dd},contract:Xi}]]);function Zi(a,t){let e=xd.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 Ad}from"@mysten/sui.js/client";var I=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 Dn=class extends I{constructor(){super(11,"Backend is not specified")}};var xn=class extends I{constructor(){super(1,"Wallet not connected")}};import Rt,{AxiosError as vd}from"axios";var Pt=class extends I{constructor(t,e){super(10,t,{context:e})}};var vn=class a{constructor(t){this.apiURL=t}static parseResponseData(t){if(t instanceof vd)throw new Pt(t.response?.statusText);if(t.status===200){if(t.data.success)return t.data.data;throw new Pt(t.data.code)}throw new Pt(t.status.toString())}async getIncomingStreams(t,e){let n=await Rt.post(`${this.apiURL}/stream`,{recipient:t,...e});return a.parseResponseData(n)}async getOutgoingStreams(t,e){let n=await Rt.post(`${this.apiURL}/stream`,{sender:t,...e});return a.parseResponseData(n)}async getStreamHistory(t){let e=await Rt.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 Rt.post(`${this.apiURL}/stream-info`,{address:t});return a.parseResponseData(e)}async getAllRecipients(t,e){let n=await Rt.post(`${this.apiURL}/stream-info`,{sender:t,status:e});return a.parseResponseData(n)}async getAllSenders(t,e){let n=await Rt.post(`${this.apiURL}/stream-info`,{recipient:t,status:e});return a.parseResponseData(n)}};var _t=class a{signer;suiClient;envConfig;_backend;constructor(t){this.envConfig=t,this.suiClient=new Ad({url:t.rpc.url}),t.backend&&(this._backend=new vn(t.backend.url))}static new(t,e){let n=Zi(t,e);return new a(n)}get walletType(){return this.wallet?this.wallet.type:"disconnected"}get backend(){if(!this._backend)throw new Dn;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 xn;return this.signer}async walletAddress(){return this.wallet.address()}};import{SUI_TYPE_ARG as zd,normalizeStructTag as Jd,normalizeSuiAddress as Is}from"@mysten/sui.js/utils";import{TransactionBlock as Bn}from"@mysten/sui.js/transactions";import{TransactionBlock as cs}from"@mysten/sui.js/transactions";import{SUI_TYPE_ARG as ls,normalizeStructTag as _d}from"@mysten/sui.js/utils";var Cr=50n,An=10000n,ts=25n,Ir=100000000n;var Y=class{constructor(t){this.object=t}moveArg(t){return t.object(this.object)}},zt=class{constructor(t){this.objects=t}moveArgs(t){return t.makeMoveVec({objects:this.objects.map(e=>t.object(e))})}},ct=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 es}from"buffer";import{normalizeSuiAddress as Od}from"@mysten/sui.js/utils";var Jt=class extends I{constructor(t,e){super(3,t,{context:e})}};var On=class{constructor(t){this.results=t}callResult(t){return this.results.results[t]}returnValue(t,e){return t.returnValues[e]}getValue(t=0,e=0){let n=this.callResult(t);return this.returnValue(n,e)}getAddress(t=0,e=0){let[n,o]=this.getValue(t,e);if(o!=="address")throw new Jt("Invalid contract return type.",{ctx:{expectType:"address",gotType:o}});return Od(es.from(n).toString("hex"))}getU64(t=0,e=0){let[n,o]=this.getValue(t,e);if(o!=="u64")throw new Jt("Invalid contract return type.",{ctx:{expectType:"u64",gotType:o}});return es.from(n).readBigInt64LE()}};import{bcs as os}from"@mysten/sui.js/bcs";var x=class extends I{constructor(t,e,n){super(2,`Invalid input: ${t}`,{context:{fieldKey:e,fieldValue:n}})}};var as={groupId:"string",name:"string"},Pd=64;function rs(a){return is(a),os.ser(as,a).toString("base64")}function Yt(a){let t=os.de(as,a,"base64");return is(t),t}function is(a){if(!ns(a.name))throw new x("Invalid metadata: Name contains unknown character");if(!ns(a.groupId))throw new x("Invalid metadata: Group ID contains unknown character");if(a.name.length>Pd)throw new x("Invalid metadata: Name exceed max length 64")}function ns(a){return/^[\x00-\x7F]+$/.test(a)}import{normalizeStructTag as Pn}from"@mysten/sui.js/utils";function Rn(a,t){return Pn(a)===Pn(t)}function lt(a,t){return Pn(a)===Pn(t)}var _n="txn.gas";import{nanoid as Rd}from"nanoid";function ss(){return Rd()}var kt=class a{constructor(t,e,n){this.globals=t;this.feeContract=e;this.streamContract=n}static convertCreateStreamInfoToInternal(t){return{metadata:rs({name:t.name,groupId:ss()}),coinType:_d(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 cs,n=this.calculateFeesInternal(t),o=this.getCreateStreamCoinRequests(t,n),r=await this.wallet.requestCoins(o),i=await this.addMergeCoins(e,r[0]),s;o.length>1?s=await this.addMergeCoins(e,r[1]):s=i;for(let c=0;c<t.recipients.length;c++){let d=t.recipients[c],l=this.amountForRecipient(d,t.numberEpoch),u=this.getStreamFeeLocal(l),[p]=e.splitCoins(i,[e.pure(l+u,"u64")]),[m]=e.splitCoins(s,[e.pure(this.flatSuiFee,"u64")]);this.streamContract.createStream(e,{paymentCoin:new ct(p),flatFeeCoin:new ct(m),metadata:t.metadata,recipient:d.address,timeStart:t.startTime,cliff:d.cliffAmount,epochInterval:t.epochInterval,numEpoch:t.numberEpoch,amountPerEpoch:d.amountPerEpoch,cancelable:t.cancelable,coinType:t.coinType})}return e}calculateCreateStreamFees(t){let e=a.convertCreateStreamInfoToInternal(t);return this.calculateFeesInternal(e)}feeParams(){return{createFeePercent:{numerator:Cr,denominator:An},claimFeePercent:{numerator:ts,denominator:An},flatFeePerStream:Ir}}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===_n?n=t.gas:n=t.object(e.primaryCoin),n}getCreateStreamCoinRequests(t,e){let n=t.coinType;return Rn(n,ls)?[{coinType:n,amount:e.totalAmount+e.streamFeeAmount+e.flatFeeAmount}]:[{coinType:n,amount:e.totalAmount+e.streamFeeAmount},{coinType:ls,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 Ir}getStreamFeeLocal(t){return t*Cr/An}async getStreamFeeRemote(t){let e=this.feeContract.streamingFee(new cs,t),n=await this.globals.suiClient.devInspectTransactionBlock({sender:await this.globals.walletAddress(),transactionBlock:e});return new On(n).getU64()}get wallet(){return this.globals.wallet}};import{Transactions as us}from"@mysten/sui.js/transactions";var ds="0x0000000000000000000000000000000000000000000000000000000000000006";var Bt=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(us.MoveCall({target:n,arguments:e.arguments.map(o=>o instanceof zt?o.moveArgs(t):o instanceof Y?o.moveArg(t):o instanceof ct?o.moveArg():t.pure(o)),typeArguments:e.typeArgs})),t}addTransactionBlock(t,e,n=[],o=[]){t.add(us.MoveCall({target:e,arguments:n.map(r=>r instanceof zt?r.moveArgs(t):r instanceof Y?r.moveArg(t):r instanceof ct?r.moveArg():t.pure(r)),typeArguments:o}))}makeObject(t){return typeof t=="string"?new Y(t):t}vaultObject(){return new Y(this.config.vaultObjId)}roleObject(){return new Y(this.config.roleObjId)}feeObject(){return new Y(this.config.feeObjId)}clockObject(){return new Y(ds)}};var Mt=class a extends Bt{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 Bt{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 Et=class{constructor(t){this.globals=t;let e=t.envConfig.contract;this.feeContract=new Mt(e,t),this.streamContract=new X(e,t)}feeContract;streamContract;async createStreams(t){let e=kt.convertCreateStreamInfoToInternal(t);return this.createStreamHelper().buildCreateStreamTransactionBlock(e)}createStreamHelper(){return new kt(this.globals,this.feeContract,this.streamContract)}setAutoClaim(t,e,n){let o=new Bn;return this.streamContract.setAutoClaim(o,{streamId:t,enabled:e,coinType:n})}claimStream(t,e){let n=new Bn;return this.streamContract.claimStream(n,{streamId:t,coinType:e})}claimStreamByProxy(t,e){let n=new Bn;return this.streamContract.claimStreamByProxy(n,{streamId:t,coinType:e})}cancelStream(t,e){let n=new Bn;return this.streamContract.cancelStream(n,{streamId:t,coinType:e}),n}};import{normalizeStructTag as kr,SUI_TYPE_ARG as Bd}from"@mysten/sui.js/utils";import{Duration as ps}from"luxon";var Mn=class extends I{constructor(t,e){super(12,`Transaction failed: ${e}`,{context:{status:t,msg:e}})}};var Md=1e3,En=class{constructor(t){this.globals=t;this.coinMetaHelper=new Dr(t.suiClient),this.createStreamHelper=new Et(t).createStreamHelper()}coinMetaHelper;createStreamHelper;getStreamIdsFromCreateStreamResponse(t){if(t.effects?.status.status!=="success")throw new Mn(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 x("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 x("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 x("Invalid stream steps: 0");let e=BigInt(t.total.toMillis())/t.steps,n=t.timeStart.plus(ps.fromMillis(Number(e*t.steps))),o={timeStart:t.timeStart,timeEnd:n,interval:ps.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:kr(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:kr(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 x("Stream amount too small","totalAmount",e);if(t.cliffAmount>t.realTotalAmount)throw new x("Invalid cliff settings")}validateTimeline(t){if(t.interval.toMillis()<Md)throw new x("Interval shall be at least 1 second","interval",t.interval)}},Dr=class{constructor(t){this.suiClient=t;this.coinMetaReg=new Map}coinMetaReg;async getCoinMeta(t){let e=kr(t||Bd);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 bs,normalizeSuiAddress as Fn}from"@mysten/sui.js/utils";import{DateTime as gs}from"luxon";import{TransactionBlock as Ln}from"@mysten/sui.js/transactions";import{normalizeStructTag as fs,parseStructTag as jd}from"@mysten/sui.js/utils";import{DateTime as Wd}from"luxon";var Nn=class extends I{constructor(){super(7,"Connected wallet is not creator")}};var Xt=class extends I{constructor(){super(8,"Connected wallet is not recipient")}};var Zt=class extends I{constructor(t,e){super(6,t,{context:e})}};var A=class extends I{constructor(t,e={}){super(0,t,e)}};var jn=class extends I{constructor(t){super(5,"Stream not found",{context:{streamId:t}})}};import{DateTime as Ed,Duration as Nd}from"luxon";var ms=(1n<<64n)-1n,Wn=1e3;function xr(a){let t;typeof a=="number"?t=a:typeof a=="bigint"?t=Number(a):t=a.toMillis();let e=Math.round(t/Wn);return Ed.fromMillis(e*Wn)}function vr(a){let t;typeof a=="number"?t=a:typeof a=="bigint"?t=Number(a):t=a.toMillis();let e=Math.round(t/Wn);return Nd.fromMillis(e*Wn)}var dt=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 A("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 Nn;let t=new Ln;return this.streamContract.cancelStream(t,{streamId:this.streamId,coinType:this.coinType}),t}async claim(){if(await this.globals.walletAddress()!==this.recipient)throw new Xt;let t=new Ln;return this.streamContract.claimStream(t,{streamId:this.streamId,coinType:this.coinType}),t}async setAutoClaim(t){if(await this.globals.walletAddress()!==this.recipient)throw new Xt;let e=new Ln;return this.streamContract.setAutoClaim(e,{streamId:this.streamId,coinType:this.coinType,enabled:t}),e}async claimByProxy(){let t=new Ln;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 fs(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 vr(this.rawData.config.epochInterval)}get groupId(){let{metadata:t}=this.rawData.config;return Yt(t).groupId}get name(){let{metadata:t}=this.rawData.config;return Yt(t).name}get recipient(){return this.rawData.config.recipient}get timeStart(){return xr(this.rawData.config.timeStart)}get duration(){let t=this.rawData.config,e=t.epochInterval*t.totalEpoch;return vr(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:xr((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===ms?0n:this.rawData.status.epochClaimed*this.amountPerEpoch+this.cliff}get currentEpoch(){let t=Wd.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 jn(t):new Zt(`get stream data: ${e.error.code}`,{streamId:t,...e.error});let n=e.data.content;if(n.dataType!=="moveObject")throw new Zt("Unexpected object type",{gotType:n.dataType});let{typeParams:o}=jd(n.type),r=fs(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)}}}};var Nt=class extends I{constructor(t,e){super(9,`Invalid stream group: ${t}`,{context:e})}};async function Or(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 Ar=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)}},jt=class{constructor(t){this.requester=t;this.pager=new Ar(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 Ld=25;async function Rr(a,t,e){let n=new te(t),o=new ee(a,n,e);return await Or(o)}var te=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]}},ee=class extends jt{constructor(e,n,o){super(new Pr(e,n,o));this.suiClient=e;this.idIter=n;this.options=o}},Pr=class{constructor(t,e,n){this.suiClient=t;this.stringIter=e;this.options=n;this.filter=n?.filter,this.pageSize=n?.pageSize||Ld,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 Un=class a{constructor(t,e){this.globals=t;this.streams=e;if(e.length===0)throw new Nt("stream size 0");let n=e.map(r=>r.groupId);if(new Set(n).size!==1)throw new x("Stream does not have same group ID")}type="StreamGroup";static async new(t,e){let n=await Rr(t.suiClient,e);return n.forEach(o=>{if(!o)throw new A("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=>{Ud(n,r)||(o=!1)}),o}async refresh(){let t=await Rr(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)=>dt.fromObjectData(t,e[i],r)).filter(r=>!!r);if(new Set(o.map(r=>r.groupId)).size!==1)throw new Nt("Not same group ID");if(!this.checkStreamGroup(o))throw new Nt("Not same stream settings");return o}};function Ud(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 ne=class a{constructor(t,e){this.it=t;this.pageSize=e}static async newIncoming(t){let e=await qn.newIncoming(t);return new a(e,t.pageSize)}static async newOutgoing(t){let e=await qn.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}},qn=class a{constructor(t){this.requester=t}cachedNext;static async newIncoming(t){let e=await $n.newIncomingQuery(t);return new a(e)}static async newOutgoing(t){let e=await $n.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 A("No more results");return e}let t=this.cachedNext;if(this.cachedNext=void 0,t===null)throw new A("No more results");return t}},$n=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 te(n.flat().map(i=>i.streamId));this.objectIter=new ee(t.suiClient,r)}current=0;objectIter;static async newIncomingQuery(t){let e=Vd(t.query),n=await t.globals.walletAddress(),r=(await t.globals.backend.getIncomingStreams(n,e)).filter(s=>Fn(s.recipient)===Fn(n)),i=hs(r);return new a(t.globals,n,i,t.query)}static async newOutgoingQuery(t){let e=Qd(t.query),n=await t.globals.walletAddress(),o=await t.globals.backend.getOutgoingStreams(n,e),r=hs(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 $d(this.globals,t[0].streamId,this.objectIter);return this.current++,ys(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++,qd(e,this.query)?e:this.doNextRequest()}throw new A("Stream group with no stream")}};function hs(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)=>gs.fromISO(n[0].createDate).toMillis()-gs.fromISO(e[0].createDate).toMillis())}function ys(a,t){if(t===void 0)return!0;let e=Fd(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 Fd(a,t){return t===void 0?!0:Array.isArray(t)?t.includes(a.progress.status):a.progress.status===t}function qd(a,t){if(!t)return!0;let e=!1;return a.streams.forEach(n=>{ys(n,t)&&(e=!0)}),e}async function $d(a,t,e){let n=await Ss(e,t);return dt.fromObjectData(a,t,n)}async function Kd(a,t,e){let n=[];for(;n.length<t.length;){let o=await Ss(e,t[n.length]);n.push(o)}return Un.newFromObjectResponse(a,t,n)}async function Ss(a,t){if(!await a.hasNext())throw new A("object iterator has been consumed");let e=await a.next();if(!e||e.error||e.data===void 0||e.data===null)throw new A("object iterator undefined response",{cause:e?.error});if(e?.data?.objectId!==t)throw new A("stream id not aligned");return e}function Vd(a){return{status:_r(a?.status),coinType:ws(a?.coinType),sender:Ts(a?.sender)}}function Qd(a){return{status:_r(a?.status),coinType:ws(a?.coinType),recipient:Ts(a?.recipient)}}function _r(a){return a===void 0||a.length===0?"all":Array.isArray(a)?a.reduce((t,e)=>{let n=_r(e);return!t||t===n?n:"all"},void 0):Hd(a)}function Hd(a){switch(a){case"STREAMING":case"STREAMED":case"CANCELED":return"active";case"COMPLETED":case"SETTLED":return"inactive";default:throw new x("Unknown stream filtered status")}}function ws(a){if(a)return Array.isArray(a)?a.length!==0?a.map(t=>bs(t)):void 0:bs(a)}function Ts(a){if(a)return Array.isArray(a)?a.length!==0?a.map(t=>Fn(t)):void 0:Fn(a)}var Kn=class extends I{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 Gd=25;async function Cs(a,t,e,n="0x2::sui::SUI",o=Gd){let r=new Br(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 Kn(n,e,i);return s}var Br=class extends jt{constructor(e,n,o,r){super(new Mr(e,n,o,r));this.suiClient=e;this.owner=n;this.coinType=o;this.reqPageSize=r}},Mr=class{constructor(t,e,n,o){this.suiClient=t;this.owner=e;this.coinType=n;this.reqPageSize=o;if(o<=0)throw new A("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}}};var Er=class{constructor(t){this.msafe=t}get type(){return"msafe"}async address(){return this.msafe.address()}async requestCoins(t){return this.msafe.requestCoins(t)}},Vn=class{constructor(t){this.account=t}async address(){return this.account.address}},Nr=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(Rn(t.coinType,zd))return{primaryCoin:_n};if(t.amount<=0)throw new x("Invalid coin request","coinAmount",t.amount);let e=await Cs(this.suiClient,await this.address(),t.amount,t.coinType);if(e.length===0)throw new A("no coins available");return{primaryCoin:e[0].coinObjectId,mergedCoins:e.slice(1).map(n=>n.coinObjectId)}}},Qn=class{globals;helper;constructor(t,e){this.globals=_t.new(t,e),this.helper=new En(this.globals)}connectSingleWallet(t){let e=new Nr(t,this.globals.suiClient);this.globals.connectWallet(e)}connectMSafeAccount(t){let e=new Er(t);this.globals.connectWallet(e)}async createStream(t){return this.builder().createStreams(t)}async getStream(t){return dt.new(this.globals,t)}async getIncomingStreams(t,e=10){return ne.newIncoming({globals:this.globals,query:t,pageSize:e})}async getOutgoingStreams(t,e=10){return ne.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=>Jd(n))}async getRecipientsForStreamFilter(t){let e=await this.wallet.address();return(await this.globals.backend.getAllRecipients(e,t)).map(o=>Is(o))}async getCreatorsForStreamFilter(t){let e=await this.wallet.address();return(await this.globals.backend.getAllSenders(e,t)).map(o=>Is(o))}get wallet(){return this.globals.wallet}builder(){return new Et(this.globals)}};var V=class extends h{application="mpay";getClient(t,e){let n=new Qn(t==="sui:mainnet"?"prod":"dev");return n.connectSingleWallet(new Vn(e)),n}};var oe=class extends V{constructor(e){super(e);this.data=e}txType=Xd.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 Zd}from"@msafe/sui3-utils";var ae=class extends V{constructor(e){super(e);this.data=e}txType=Zd.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 tu}from"@msafe/sui3-utils";var re=class extends V{constructor(e){super(e);this.data=e}txType=tu.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 eu}from"@msafe/sui3-utils";var ie=class extends V{constructor(e){super(e);this.data=e}txType=eu.Stream;txSubType="CreateStream";async build(e){let{network:n,account:o}=e;return this.getClient(n,o).createStream(this.data)}};import{bcs as ks}from"@mysten/sui.js/bcs";import{normalizeStructTag as nu,normalizeSuiAddress as se}from"@mysten/sui.js/utils";var Wt=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 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 ks.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 ks.de(e,new Uint8Array(n))}typeArg(t){return nu(this.moveCall.typeArguments[t])}txArg(t){return this.moveCall.arguments[t]}};var Hn=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"&<(e.target,this.contract.createStreamTarget));if(t.length===0)throw new A("No create stream transactions");return t.map(e=>new Wt(e,this.txb))}getCreationInfoFromMoveCall(t){let e=t.decodeInputString(4),{name:n,groupId:o}=Yt(e),r=t.decodeInputAddress(5),i=t.decodeInputU64(6),s=t.decodeInputU64(7),c=t.decodeInputU64(8),d=t.decodeInputU64(9),l=t.decodeInputU64(10),u=t.decodeInputBool(11),p=t.typeArg(0);return{name:n,groupId:o,recipient:r,timeStart:i,cliff:s,epochInterval:c,totalEpoch:d,amountPerEpoch:l,cancelable:u,coinType:p}}aggregateGroupStreamInfo(t){if(new Set(t.map(o=>JSON.stringify({name:o.name,groupId:o.groupId,timeStart:String(o.timeStart),epochInterval:String(o.epochInterval),totalEpoch:String(o.totalEpoch),cancelable:o.cancelable,coinType:o.coinType}))).size!==1)throw new x("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 Mt(this.globals.envConfig.contract,this.globals)}createStreamHelper(){return new kt(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 Gn=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"&<(e.target,this.contract.createStreamTarget))!==-1}isSetAutoClaimTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&<(this.transactions[0].target,this.contract.setAutoClaimTarget)}isCancelStreamTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&<(this.transactions[0].target,this.contract.cancelStreamTarget)}isClaimStreamTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&<(this.transactions[0].target,this.contract.claimStreamTarget)}isClaimByProxyTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&<(this.transactions[0].target,this.contract.claimStreamByProxyTarget)}decodeCreateStreamTransaction(){return new Hn(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 Wt(t,this.txb)}};import{TransactionType as ou}from"@msafe/sui3-utils";var ce=class extends V{constructor(e){super(e);this.data=e}txType=ou.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 zn=class{application="mpay";supportSDK="@mysten/sui.js";async deserialize(t){let{network:e,transactionBlock:n}=t,o=_t.new(e==="sui:mainnet"?"prod":"dev"),i=new Gn(o,n).decode(),s;switch(i.type){case"CreateStream":s=new ie(i.info);break;case"SetAutoClaim":s=new ce({streamId:i.streamId,enabled:i.enabled});break;case"Claim":s=new re({streamId:i.streamId});break;case"ClaimByProxy":s=new ae({streamId:i.streamId});break;case"Cancel":s=new oe({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 ie(e);break;case"Claim":n=new re(e);break;case"ClaimByProxy":n=new ae(e);break;case"SetAutoClaim":n=new ce(e);break;case"Cancel":n=new oe(e);break;default:throw new Error("not implemented")}return n.build({...t})}};import{TransactionDefaultApplication as iu,TransactionSubTypes as Ds}from"@msafe/sui3-utils";import{buildCoinTransferTxb as au}from"@msafe/sui3-utils";var Jn=class a extends h{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o}=e;return au(n,this.data,o.address)}static fromData(e){return new a(e)}};import{buildObjectTransferTxb as ru}from"@msafe/sui3-utils";var Yn=class a extends h{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o}=e;return ru(n,this.data,o.address)}static fromData(e){return new a(e)}};var Xn=class{application="msafe-core";supportSDK="@mysten/sui.js";constructor(){this.application=iu}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 Ds.assets.coin.send:o=Jn.fromData(t.intentionData);break;case Ds.assets.object.send:o=Yn.fromData(t.intentionData);break;default:throw new Error("not implemented")}return o.build({suiClient:e,account:n})}};import{TransactionType as Tu}from"@msafe/sui3-utils";var xs=!1,le={ProtocolPackage:"0x81c408448d0d57b3e371ea94de1d40bf852784d3e225de1e74acab3e8395c18f",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 jr(){if(!xs)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&&(le.ProtocolPackage=t),e&&(le.borrowFee=e),n&&(le.borrowFeeAddress=n),o&&(le.pool=o),xs=!0}catch(a){console.error(a.message)}}var G=le;import{TransactionType as xt}from"@msafe/sui3-utils";import{bcs as vs}from"@mysten/sui.js/bcs";import{normalizeStructTag as cu,normalizeSuiAddress as de}from"@mysten/sui.js/utils";var Zn=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();if(this.isEntryClaimAndDepositTransaction())return this.decodeEntryClaimAndDeposit();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.transactions.find(e=>!!(e.kind==="MoveCall"&&e.target.includes("claim_reward")))}isEntryBorrowTransaction(){return!!this.getMoveCallTransaction(`${G.ProtocolPackage}::incentive_v3::entry_borrow`)}isEntryBorrowWithFeeTransaction(){return!!this.getMoveCallTransaction(`${G.ProtocolPackage}::incentive_v3::borrow`)}isEntryMultiDepositTransaction(){let t=`${G.ProtocolPackage}::incentive_v3::entry_deposit`,e=this.transactions.filter(o=>o.kind==="MoveCall"&&o.target===t);return this.transactions.find(o=>o.kind==="MoveCall"&&o.target.includes("claim_reward"))?!1:e.length>1}isEntryClaimAndDepositTransaction(){let t=`${G.ProtocolPackage}::incentive_v3::entry_deposit`,e=this.transactions.filter(o=>o.kind==="MoveCall"&&o.target===t);return!!(this.transactions.find(o=>o.kind==="MoveCall"&&o.target.includes("claim_reward"))&&e.length>0)}isEntryDepositTransaction(){return!!this.getMoveCallTransaction(`${G.ProtocolPackage}::incentive_v3::entry_deposit`)}isEntryRepayTransaction(){return!!this.getMoveCallTransaction(`${G.ProtocolPackage}::incentive_v3::entry_repay`)}isEntryWithdrawTransaction(){return!!this.getMoveCallTransaction(`${G.ProtocolPackage}::incentive_v3::withdraw`)}findPoolByAssetId(t){let e=Object.values(G.pool).find(n=>n.assetId===t);if(!e)throw new Error("Pool not found");return e}decodeEntryClaimAndDeposit(){return{txType:xt.Other,type:"EntryClaimAndDeposit",intentionData:{type:"entry_claim_and_deposit"}}}decodeClaimReward(){return console.log("decode claims"),{txType:xt.Other,type:"ClaimReward",intentionData:{type:"claim_reward"}}}decodeEntryBorrow(){let t=this.helper.decodeInputU8(4),e=this.helper.decodeInputU64(5);return{txType:xt.Other,type:"EntryBorrow",intentionData:{amount:e,assetId:t}}}decodeEntryMultiDeposit(){let t=[],e=`${G.ProtocolPackage}::incentive_v3::entry_deposit`;return this.transactions.forEach(n=>{if(n.kind==="MoveCall"&&n.target===e){let o=new to(n,this.txb),r=o.decodeInputU8(3),i=o.decodeInputU64(5);t.push({assetId:r,amount:i})}}),{txType:xt.Other,type:"EntryMultiDeposit",intentionData:{list:t}}}decodeEntryDeposit(){let t=this.helper.decodeInputU8(3),e=this.helper.decodeInputU64(5);return{txType:xt.Other,type:"EntryDeposit",intentionData:{amount:e,assetId:t}}}decodeEntryRepay(){let t=this.helper.decodeInputU8(4),e=this.helper.decodeInputU64(6);return{txType:xt.Other,type:"EntryRepay",intentionData:{amount:e,assetId:t}}}decodeEntryWithdraw(){let t=this.helper.decodeInputU8(4),e=this.helper.decodeInputU64(5);return{txType:xt.Other,type:"EntryWithdraw",intentionData:{amount:e,assetId:t}}}get helper(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(G.ProtocolPackage));return new to(t,this.txb)}},to=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]}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 cu(this.moveCall.typeArguments[t])}txArg(t){return this.moveCall.arguments[t]}};import{depositCoin as lu,withdrawCoin as du,repayDebt as uu,borrowCoin as pu,claimAllRewardsPTB as mu,claimAllRewardsResupplyPTB as fu}from"navi-sdk";async function Lt(a,t,e,n){return await lu(a,t,e,n),a}async function As(a,t,e,n){let[o]=await du(a,t,e);return a.transferObjects([o],a.pure(n)),a}async function Os(a,t,e,n){let[o]=await pu(a,t,e);return a.transferObjects([o],a.pure.address(n)),a}async function Wr(a,t,e,n){return await uu(a,t,e,n),a}async function Ps(a,t){return await mu(a,t)}async function Rs(a,t){return await fu(a,t)}var eo=class a extends h{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{type:n}=this.data;return console.log("claim reward",n),await Ps(e.suiClient,e.account.address)}static fromData(e){return new a(e)}};var no=class a extends h{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{type:n}=this.data;return console.log("claim reward and supply",n),await Rs(e.suiClient,e.account.address)}static fromData(e){return new a(e)}};import{TransactionBlock as gu}from"@mysten/sui.js/transactions";import{pool as bu}from"navi-sdk";function Z(a){return Object.values(bu).find(t=>String(t.assetId)===String(a))}var oo=class a extends h{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{assetId:n,amount:o}=this.data,r=new gu;console.log("build",this.data);let i=Z(n);return await Os(r,i,o,e.account.address)}static fromData(e){return new a(e)}};import{TransactionBlock as hu}from"@mysten/sui.js/transactions";async function Ut(a,t,e){let n=await a.getCoins({owner:t,coinType:e});return console.log("getTokenObjs",t,n),n}var ao=class a extends h{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o}=e,{assetId:r,amount:i}=this.data,s=new hu;console.log("build",this.data);let c=Z(r);if(r===0){let[p]=s.splitCoins(s.gas,[i]);return await Lt(s,c,p,i)}let d=await Ut(n,o.address,c.type);if(!d.data[0])throw new Error(`Insufficient balance for ${c.name} Token`);let l=d.data[0].coinObjectId;if(d.data.length>=2){let p=1;for(;p<d.data.length;)s.mergeCoins(l,[d.data[p].coinObjectId]),p++}return await Lt(s,c,s.object(l),i)}static fromData(e){return new a(e)}};import{TransactionBlock as yu}from"@mysten/sui.js/transactions";var ro=class a extends h{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o}=e,{assetId:r,amount:i}=this.data,s=new yu;console.log("build",this.data);let c=Z(r);if(r===0){let[u]=s.splitCoins(s.gas,[i]);return Wr(s,c,u,i)}let d=await Ut(n,o.address,c.type);if(!d.data[0])throw new Error(`Insufficient balance for ${c.name} Token`);let l=d.data[0].coinObjectId;if(d.data.length>=2){let u=1;for(;u<d.data.length;)s.mergeCoins(l,[d.data[u].coinObjectId]),u++}return Wr(s,c,s.object(l),i)}static fromData(e){return new a(e)}};import{TransactionBlock as Su}from"@mysten/sui.js/transactions";var io=class a extends h{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{assetId:n,amount:o}=this.data,r=new Su;console.log("build",this.data);let i=Z(n);return await As(r,i,o,e.account.address)}static fromData(e){return new a(e)}};import{TransactionBlock as wu}from"@mysten/sui.js/transactions";var so=class a extends h{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o}=e,{list:r}=this.data,i=new wu;console.log("build",this.data);for(let s=0;s<r.length;s++){let{assetId:c,amount:d}=r[s],l=Z(c);if(c===0){let[m]=i.splitCoins(i.gas,[d]);await Lt(i,l,m,d);continue}let u=await Ut(n,o.address,l.type);if(!u.data[0])throw new Error(`Insufficient balance for ${l.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++}await Lt(i,l,i.object(p),d)}return i}static fromData(e){return new a(e)}};var co=class{application="navi";supportSDK="@mysten/sui.js";async deserialize(t){await jr();let{transactionBlock:e}=t,o=new Zn(e).decode();return{txType:Tu.Other,txSubType:o.type,intentionData:o.intentionData}}async build(t){let{suiClient:e,account:n}=t,o;switch(await jr(),t.txSubType){case"EntryDeposit":o=ao.fromData(t.intentionData);break;case"EntryBorrow":o=oo.fromData(t.intentionData);break;case"EntryRepay":o=ro.fromData(t.intentionData);break;case"EntryWithdraw":o=io.fromData(t.intentionData);break;case"EntryMultiDeposit":o=so.fromData(t.intentionData);break;case"ClaimReward":o=eo.fromData(t.intentionData);break;case"EntryClaimAndDeposit":o=no.fromData(t.intentionData);break;default:throw new Error("not implemented")}return o.build({suiClient:e,account:n})}};import{TransactionSubTypes as Cu,TransactionType as _s}from"@msafe/sui3-utils";import{fromHEX as Iu}from"@mysten/bcs";import{Transaction as ku}from"@mysten/sui/transactions";import Du from"sort-keys-recursive";var Bs="msafe-plain-tx",Ms=Cu.others.plain,Lr=class a{constructor(t){this.data=t}application=Bs;txType=_s.Other;txSubType=Ms;serialize(){return JSON.stringify(Du(this.data))}async build(t){return ku.from(Iu(this.data.content))}static fromData(t){return new a(t)}},lo=class{application;supportSDK="@mysten/sui";constructor(){this.application=Bs}async deserialize(t){let{content:e}=t.appContext;return{txType:_s.Other,txSubType:Ms,intentionData:{content:e}}}async build(t){let{suiClient:e,network:n,account:o}=t;return Lr.fromData(t.intentionData).build({suiClient:e,network:n,account:o})}};import{SuiClient as Es}from"@mysten/sui/client";import{Transaction as _u}from"@mysten/sui/transactions";import{SuiClient as qr}from"@mysten/sui.js/client";import{TransactionBlock as Bu}from"@mysten/sui.js/transactions";import{RequestManager as Ou,HTTPTransport as Pu,Client as Ru}from"@open-rpc/client-js";var xu={"-32700":"ParseError","-32600":"InvalidRequest","-32601":"MethodNotFound","-32602":"InvalidParams","-32603":"InternalError"},Ur=class extends Error{},uo=class extends Ur{code;type;constructor(t,e){super(t),this.code=e,this.type=xu[e]??"ServerError"}};function vu(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},po=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&&this.endpoint.startsWith("http")&&(this.endpoint=vu(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 uo(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 Fr(t);return this.#r.add(e),await e.subscribe(this),()=>e.unsubscribe(this)}},Fr=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 ut=class{rpcClient;websocketClient;constructor({url:t,websocket:{url:e,...n}={},rpc:o}){let r=new Pu(o?.url??t,{headers:{"Content-Type":"application/json",...o?.headers}});this.rpcClient=new Ru(new Ou([r])),this.websocketClient=new po(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 mo=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 Kr(t))}addHelper(t){this.apps.set(t.application,new $r(t))}getAppHelper(t){let e=this.apps.get(t);if(!e)throw new Error(`${t} not registered`);return e}},$r=class{constructor(t){this.helper=t}async deserialize(t){let e=new Es({transport:new ut({url:t.clientUrl,rpc:{url:t.clientUrl}})}),n=new qr({transport:new ut({url:t.clientUrl,rpc:{url:t.clientUrl}})}),o=await t.transactionBlock.build({client:n}),r=_u.from(o);return this.helper.deserialize({...t,suiClient:e,transaction:r})}async build(t){let e=new Es({transport:new ut({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 Bu.from(r)}},Kr=class{constructor(t){this.helper=t}async deserialize(t){let e=new qr({transport:new ut({url:t.clientUrl,rpc:{url:t.clientUrl}})});return this.helper.deserialize({...t,transactionBlock:t.transactionBlock,suiClient:e})}async build(t){let e=new qr({transport:new ut({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 sp}from"@msafe/sui3-utils";import{TransactionType as O}from"@msafe/sui3-utils";var pt=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 Ns="https://sui.apis.scallop.io";var js="675c65cd301dd817ea262e76",fo="0xefe8b36d5b2e43728cc323298626b83177803521d195cfb11e15b910e892fddf";var mt="0x7016aae72cfc67f2fadf55769c0a7dd54291a583b63051a5ed71081cce836ac6::sca::SCA",ft="0xc63072e7f5f4983a2efaf5bdba1480d5e7d74d57948e1c7cc436f8e22cbeb410",et=["weth","wbtc","wusdc","wusdt","sui","wapt","wsol","cetus","afsui","hasui","vsui","sca","usdc","fdusd","deep","fud"],bo=["weth","wbtc","wusdc","wusdt","sui","wapt","wsol","cetus","afsui","hasui","vsui","sca","usdc","fdusd"],bt=["sweth","ssui","swusdc","swusdt","scetus","safsui","shasui","svsui","susdc"],nt=["ssui","swusdc","swusdt","safsui","shasui","svsui","sweth","ssca","scetus","swbtc","swsol","susdc","sfdusd","sdeep","sfud"];var Ws=["sui"],gt=["sui","wusdc","wusdt","afsui","hasui","vsui","weth","sca","wbtc","wsol","usdc","fdusd","deep","fud"];var Ls={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 go={sweth:"sui",ssui:"sui",swusdc:"sui",swusdt:"sui",scetus:"sui",safsui:"sui",shasui:"sui",svsui:"sui",susdc:"sui"},Us={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"]},Fs={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"},q={weth:"0xaf8cd5edc19c4512f4259f0bee101a40d41ebed738ade5874359610ef8eeced5",wbtc:"0x027792d9fed7f9844eb4839566001bb6f6cb4804f66aa2da6fe1ee242d896881",wusdc:"0x5d4b302506645c37ff133b98c4b50a5ae14841659738d6d733d59d0d217a93bf",wusdt:"0xc060006111016b8a020ad5b33834984a437aaa7d3c74c18e09a95d48aceab08c",wapt:"0x3a5143bb1196e3bcdfab6203d1683ae29edd26294fc8bfeafe4aaa9d2704df37",wsol:"0xb7844e289a8410e50fb3ca48d69eb9cf29e27d223ef90353fe1bd8e27ff8f3f8"},Vr={vsui:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55"},qs={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 $s}from"@mysten/sui.js/bcs";import{normalizeStructTag as Mu,normalizeSuiAddress as ue}from"@mysten/sui.js/utils";var S=class a{constructor(t,e){this.moveCall=t;this.txb=e}decodeSharedObjectId(t){let e=this.getInputParam(t);return a.getSharedObjectId(e)}decodeOwnedObjectId(t){let e=this.getInputParam(t);return a.getOwnedObjectId(e)}decodeInputU64(t){let e=this.decodePureArg(t,"u64");return Number(e)}decodeInputU8(t){let e=this.decodePureArg(t,"u8");return Number(e)}decodeInputAddress(t){let e=this.decodePureArg(t,"address");return ue(e)}decodeInputString(t){return this.decodePureArg(t,"string")}decodeInputBool(t){return this.decodePureArg(t,"bool")}decodePureArg(t,e){let n=this.getInputParam(t);return a.getPureInputValue(n,e)}getInputParam(t){let e=this.moveCall.arguments[t];if(e.kind!=="Input")throw new Error("not input type");return this.txb.blockData.inputs[e.index]}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 $s.de(e,new Uint8Array(n))}return t.value}static getOwnedObjectId(t){if(t.type!=="object")throw new Error(`not object argument: ${JSON.stringify(t)}`);if(typeof t.value=="object"){if(!("Object"in t.value)||!("ImmOrOwned"in t.value.Object))throw new Error("not ImmOrOwned");return ue(t.value.Object.ImmOrOwned.objectId)}return ue(t.value)}static getSharedObjectId(t){if(t.type!=="object")throw new Error(`not object argument: ${JSON.stringify(t)}`);if(typeof t.value!="object")return ue(t.value);if(!("Object"in t.value)||!("Shared"in t.value.Object))throw new Error("not Shared");return ue(t.value.Object.Shared.objectId)}static getPureInput(t,e){if(t.type!=="pure")throw new Error("not pure argument");if(typeof t.value!="object")return t.value;if(!("Pure"in t.value))throw new Error("Pure not in value");let n=t.value.Pure;return $s.de(e,new Uint8Array(n))}typeArg(t){return Mu(this.moveCall.typeArguments[t])}txArg(t){return this.moveCall.arguments[t]}};import{bcs as Eu}from"@mysten/sui.js/bcs";var R=class{constructor(t,e){this.splitCoin=t;this.txb=e}getAmountInput(){return this.splitCoin.amounts.map(t=>{if(t.kind==="Input")return Number(S.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 Eu.de(e,new Uint8Array(n))}return t.value}};var ho=class extends pt{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(`${ft}::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 S(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 S(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 S(t,this.txb)}get helperClaimBorrowReward(){return this.transactions.filter(e=>e.kind==="MoveCall"&&e.target.startsWith(`${ft}::user::redeem_rewards`)).map(e=>new S(e,this.txb))}get helperMint(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.protocolPkg}::mint::mint`));return new S(t,this.txb)}get helperUnstakes(){return this.transactions.filter(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.spoolPkg}::user::unstake`)).map(e=>new S(e,this.txb))}get helperRedeems(){return this.transactions.filter(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.protocolPkg}::redeem::redeem`)).map(e=>new S(e,this.txb))}get helperRedeem(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.protocolPkg}::redeem::redeem`));return new S(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 S(t,this.txb)}get helperSlippage(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith("0x5857d185897aaff40ae37b2eecc895efc1a9dff1b210c4fb894eabbce4ac2603::slippage_check::check_slippage"));return new S(t,this.txb)}get helperStake(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.spoolPkg}::user::stake`));return new S(t,this.txb)}get helperUnstake(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.spoolPkg}::user::unstake`));return new S(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 S(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 S(t,this.txb)}get helperBorrow(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.protocolPkg}::borrow::borrow`));return new S(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 S(t,this.txb)}get helperRepay(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.protocolPkg}::repay::repay`));return new S(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 R(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 R(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 R(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 R(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 R(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 R(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(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(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 R(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 R(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 R(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 Hr}from"@msafe/sui3-utils";var yo=class extends pt{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 S(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 S(t,this.txb)}decodeCreateReferralLink(){return{txType:Hr.Other,type:"CreateReferralLink",intentionData:{}}}decodeClaimRevenueReferral(){let t=this.helperClaimRevenueReferral[0].decodeOwnedObjectId(2),e=this.helperClaimRevenueReferral.map(n=>n.typeArg(0));return{txType:Hr.Other,type:"ClaimRevenueReferral",intentionData:{veScaKey:t,coins:e}}}decodeBindReferral(){let t=this.helperBindReferral.decodePureArg(1,"address");return{txType:Hr.Other,type:"BindReferral",intentionData:{veScaKey:t}}}};import{TransactionType as pe}from"@msafe/sui3-utils";var So=class extends pt{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 S(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 S(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 S(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 S(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 S(t,this.txb)}get helperOldUnstakeObligation(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${ft}::user::unstake`));return new S(t,this.txb)}get helperUnstakeObligation(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.borrowIncentivePkg}::user::unstake`));return new S(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 S(t,this.txb)}decodeRedeemSca(){let t=this.helperRedeemSca.decodeOwnedObjectId(1);return{txType:pe.Other,type:"RedeemSca",intentionData:{veScaKey:t}}}decodeRenewExpiredVeSca(){let t=this.helperRenewExpired.getNestedInputParam(4),e=this.helperRenewExpired.decodeInputU64(5),n=new R(t,this.txb).getAmountInput().reduce((b,y)=>b+y,0),o=this.helperRenewExpired.decodeOwnedObjectId(1),r=!!this.helperRedeemSca.moveCall,i=[],s=[],c=[];this.helperOldUnstakeObligation.moveCall&&(i=[this.helperOldUnstakeObligation.decodeSharedObjectId(2),this.helperOldUnstakeObligation.decodeSharedObjectId(3)]),this.helperUnstakeObligation.moveCall&&(s=[this.helperUnstakeObligation.decodeSharedObjectId(3),this.helperUnstakeObligation.decodeSharedObjectId(4)]),this.helperStakeObligationWithVeSca.moveCall&&(c=[this.helperStakeObligationWithVeSca.decodeSharedObjectId(3),this.helperStakeObligationWithVeSca.decodeSharedObjectId(4)]);let d=!1,l=!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,d=!0,l=m[b].isOld);return{txType:pe.Other,type:"RenewExpStakePeriod",intentionData:{amount:n,lockPeriodInDays:e,obligationId:u,obligationKey:p,veScaKey:o,isHaveRedeem:r,isObligationLocked:d,isOldBorrowIncentive:l}}}decodeExtendStakePeriod(){let t=this.helperExtendStakePeriod.decodeInputU64(4),e=this.helperExtendStakePeriod.decodeOwnedObjectId(1),n=[],o=[],r=[];this.helperOldUnstakeObligation.moveCall&&(n=[this.helperOldUnstakeObligation.decodeSharedObjectId(2),this.helperOldUnstakeObligation.decodeSharedObjectId(3)]),this.helperUnstakeObligation.moveCall&&(o=[this.helperUnstakeObligation.decodeSharedObjectId(3),this.helperUnstakeObligation.decodeSharedObjectId(4)]),this.helperStakeObligationWithVeSca.moveCall&&(r=[this.helperStakeObligationWithVeSca.decodeSharedObjectId(3),this.helperStakeObligationWithVeSca.decodeSharedObjectId(4)]);let i=!1,s=!1,c,d,l=[{condition:n,isOld:!0},{condition:o,isOld:!1},{condition:r,isOld:!1}];for(let u=0;u<l.length;u++)l[u].condition.length>1&&([d,c]=l[u].condition,i=!0,s=l[u].isOld);return{txType:pe.Other,type:"ExtendStakePeriod",intentionData:{lockPeriodInDays:t,obligationId:c,obligationKey:d,veScaKey:e,isObligationLocked:i,isOldBorrowIncentive:s}}}decodePeriodAndStakeMoreSca(){let t=this.helperStakeMoreSca.getNestedInputParam(4),e=this.helperExtendStakePeriod.decodeInputU64(4),n=new R(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,d=!1,l,u,p=[{condition:o,isOld:!0},{condition:r,isOld:!1},{condition:s,isOld:!1}];for(let m=0;m<p.length;m++)p[m].condition.length>1&&([u,l]=p[m].condition,c=!0,d=p[m].isOld);return{txType:pe.Other,type:"ExtendPeriodAndStakeMore",intentionData:{amount:n,veScaKey:i,lockPeriodInDays:e,obligationId:l,obligationKey:u,isOldBorrowIncentive:d,isObligationLocked:c}}}decodeStakeSca(){let t,e;this.helperStakeSca.moveCall&&this.helperStakeMoreSca.moveCall===void 0?(t=this.helperStakeSca.getNestedInputParam(3),e=this.helperStakeSca.decodeInputU64(4)):t=this.helperStakeMoreSca.getNestedInputParam(4);let n=new R(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,d=!1,l,u,p=[{condition:o,isOld:!0},{condition:r,isOld:!1},{condition:s,isOld:!1}];for(let m=0;m<p.length;m++)p[m].condition.length>1&&([u,l]=p[m].condition,c=!0,d=p[m].isOld);return{txType:pe.Other,type:"StakeSca",intentionData:{amount:n,lockPeriodInDays:e,obligationId:l,obligationKey:u,veScaKey:i,isObligationLocked:c,isOldBorrowIncentive:d}}}};import Nu from"sort-keys-recursive";var g=class{constructor(t){this.data=t}get application(){return"msafe-core"}serialize(){return JSON.stringify(Nu(this.data))}};var wo=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 To=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 Co=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 Io=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 ko=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 Do=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 xo=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 vo=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 Ao=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 Oo=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 Po=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 Ro=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 _o=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 Bo=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 Mo=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 Eo=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 No=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 jo=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 Wo=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 Lo=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 Uo=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 Fo=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 qo=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 $o=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 Ko=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 Vo=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 Qo=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 Ho=class{id;addresses;constructor(t){let{id:e}=t;this.id=e}getId(){return this.id}getAddresses(){return this.addresses}get(t){if(!this.addresses)throw new Error(`Failed to fetch address ${this.id}`);return t.split(".").reduce((n,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(`${Ns}/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 C}from"@mysten/sui.js/transactions";import yc from"bignumber.js";import{TransactionBlock as ju}from"@mysten/sui.js/transactions";var Go=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 ju(t)}async selectCoin(t,e,n,o=this.params.walletAddress){let r=this.utils.parseCoinType(e),i=await this.utils.selectCoinIds(n,r,o),[s,c]=this.utils.takeAmountFromCoins(t,i,n);return{takeCoin:s,leftCoin:c}}async selectMarketCoin(t,e,n,o=this.params.walletAddress){let r=this.utils.parseMarketCoinType(e),i=await this.utils.selectCoins(n,r,o),s=i.reduce((u,p)=>(u+=Number(p.balance),u),0),c=i.map(u=>u.objectId),[d,l]=this.utils.takeAmountFromCoins(t,c,Math.min(n,s));return{takeCoin:d,leftCoin:l,totalAmount:s}}async selectSCoin(t,e,n,o=this.params.walletAddress){let r=this.utils.parseSCoinType(e),i=await this.utils.selectCoins(n,r,o),s=i.map(u=>u.objectId),c=i.reduce((u,p)=>u+Number(p.balance),0),[d,l]=this.utils.takeAmountFromCoins(t,s,Math.min(c,n));return{takeCoin:d,leftCoin:l,totalAmount:c}}};import{TransactionBlock as Wu}from"@mysten/sui.js/transactions";import zo from"bignumber.js";var Ft=async(a,t)=>{let e=t,n=a.address.get("core.object")||fo,o=[],r=!1,i=null;do{let l=await a.client.getOwnedObjects({owner:e,filter:{StructType:`${n}::obligation::ObligationKey`},cursor:i});o.push(...l.data),l.hasNextPage&&l.nextCursor?(r=!0,i=l.nextCursor):r=!1}while(r);let s=o.map(l=>l?.data?.objectId).filter(l=>l!==void 0),c=await a.client.multiGetObjects({ids:s,options:{showContent:!0,showType:!0}}),d=[];for(let l=0;l<c.length;l++){let u=c[l].data.objectId,{content:p}=c[l].data;if(p&&"fields"in p){let m=p.fields,b=String(m.ownership.fields.of),y=await Gr(a,b);d.push({id:b,keyId:u,locked:y})}}return d},Gr=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||[...et],o=t,r=[],i=!1,s=null;do{let l=await a.client.getOwnedObjects({owner:o,filter:{MatchAny:n.map(u=>({StructType:`0x2::coin::Coin<${a.utils.parseCoinType(u)}>`}))},options:{showType:!0,showContent:!0},cursor:s});r.push(...l.data),l.hasNextPage&&l.nextCursor?(i=!0,s=l.nextCursor):i=!1}while(i);let c={};return r.map(l=>l.data).filter(l=>l!=null).forEach(l=>{let u=l.type;if(l.content&&"fields"in l.content){let p=l.content.fields,m=a.utils.parseCoinNameFromType(u);m&&(c[m]=zo(c[m]??0).plus(p.balance).toNumber())}}),c},Vs=async(a,t,e)=>{let n=e,o=a.utils.parseCoinType(t),r=[],i=!1,s=null;do{let l=await a.client.getOwnedObjects({owner:n,filter:{StructType:`0x2::coin::Coin<${o}>`},options:{showContent:!0},cursor:s});r.push(...l.data),l.hasNextPage&&l.nextCursor?(i=!0,s=l.nextCursor):i=!1}while(i);let c=0;return r.map(l=>l.data).filter(l=>l!=null).forEach(l=>{if(l.content&&"fields"in l.content){let u=l.content.fields;c=zo(c).plus(u.balance).toNumber()}}),c},Qs=async(a,t,e)=>{let n=e||[...et].map(l=>a.utils.parseMarketCoinName(l)),o=t,r=[],i=!1,s=null;do{let l=await a.client.getOwnedObjects({owner:o,filter:{MatchAny:n.map(u=>({StructType:`0x2::coin::Coin<${a.utils.parseMarketCoinType(u)}>`}))},options:{showType:!0,showContent:!0},cursor:s});r.push(...l.data),l.hasNextPage&&l.nextCursor?(i=!0,s=l.nextCursor):i=!1}while(i);let c={};return r.map(l=>l.data).filter(l=>l!=null).forEach(l=>{let u=l.type;if(l.content&&"fields"in l.content){let p=l.content.fields,m=a.utils.parseCoinNameFromType(u);m&&(c[m]=zo(c[m]??0).plus(p.balance).toNumber())}}),c},Hs=async(a,t,e)=>{let n=e,o=a.utils.parseMarketCoinType(t),r=[],i=!1,s=null;do{let l=await a.client.getOwnedObjects({owner:n,filter:{StructType:`0x2::coin::Coin<${o}>`},options:{showContent:!0},cursor:s});r.push(...l.data),l.hasNextPage&&l.nextCursor?(i=!0,s=l.nextCursor):i=!1}while(i);let c=0;return r.map(l=>l.data).filter(l=>l!=null).forEach(l=>{if(l.content&&"fields"in l.content){let u=l.content.fields;c=zo(c).plus(u.balance).toNumber()}}),c},Gs=async(a,t)=>{let n=`${a.address.get("core.packages.query.id")}::obligation_query::obligation_data`,o=new Wu;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 me=async(a,t)=>{let e=t,n=a.address.get("spool.object"),o=`${n}::spool_account::SpoolAccount`,r=[],i=!1,s=null;do{let p=await a.client.getOwnedObjects({owner:e,filter:{StructType:o},options:{showContent:!0,showType:!0},cursor:s});r.push(...p.data),p.hasNextPage&&p.nextCursor?(i=!0,s=p.nextCursor):i=!1}while(i);let c={sweth:[],ssui:[],susdc:[],swusdc:[],swusdt:[],scetus:[],safsui:[],shasui:[],svsui:[]},d=Object.keys(c).reduce((p,m)=>{let b=a.utils.parseCoinName(m),y=a.utils.parseMarketCoinType(b),w={...p},D=`${n}::spool_account::SpoolAccount<${y}>`;return w[m]=D,w},{}),l=r.map(p=>p?.data?.objectId).filter(p=>p!==void 0);return(await a.client.multiGetObjects({ids:l,options:{showContent:!0,showType:!0}})).forEach(p=>{let m=p.data.objectId,b=p.data.type;if(p.data.content&&"fields"in p.data.content){let y=p.data.content.fields,w=String(y.spool_id),D=String(y.stake_type.fields.name),L=Number(y.stakes),_=Number(y.index),$=Number(y.points),U=Number(y.total_points);T(b)===d.sweth?c.sweth.push({id:m,type:T(b),stakePoolId:w,stakeType:T(D),staked:L,index:_,points:$,totalPoints:U}):T(b)===d.ssui?c.ssui.push({id:m,type:T(b),stakePoolId:w,stakeType:T(D),staked:L,index:_,points:$,totalPoints:U}):T(b)===d.swusdc?c.swusdc.push({id:m,type:T(b),stakePoolId:w,stakeType:T(D),staked:L,index:_,points:$,totalPoints:U}):T(b)===d.swusdt?c.swusdt.push({id:m,type:T(b),stakePoolId:w,stakeType:T(D),staked:L,index:_,points:$,totalPoints:U}):T(b)===d.scetus?c.scetus.push({id:m,type:T(b),stakePoolId:w,stakeType:T(D),staked:L,index:_,points:$,totalPoints:U}):T(b)===d.safsui?c.safsui.push({id:m,type:T(b),stakePoolId:w,stakeType:T(D),staked:L,index:_,points:$,totalPoints:U}):T(b)===d.shasui?c.shasui.push({id:m,type:T(b),stakePoolId:w,stakeType:T(D),staked:L,index:_,points:$,totalPoints:U}):T(b)===d.svsui?c.svsui.push({id:m,type:T(b),stakePoolId:w,stakeType:T(D),staked:L,index:_,points:$,totalPoints:U}):T(b)===d.susdc&&c.susdc.push({id:m,type:T(b),stakePoolId:w,stakeType:T(D),staked:L,index:_,points:$,totalPoints:U})}}),c},zr=async(a,t)=>{let e=a.address.get(`spool.pools.${t}.id`),n,o=await a.client.getObject({id:e,options:{showContent:!0,showType:!0}});if(o.data){let r=o.data,i=r.objectId,s=r.type;if(r.content&&"fields"in r.content){let c=r.content.fields,d=Number(c.max_distributed_point),l=Number(c.distributed_point),u=Number(c.distributed_point_per_period),p=Number(c.point_distribution_time),m=Number(c.max_stakes),b=String(c.stake_type.fields.name),y=Number(c.stakes),w=Number(c.index),D=Number(c.created_at),L=Number(c.last_update);n={id:i,type:T(s),maxPoint:d,distributedPoint:l,pointPerPeriod:u,period:p,maxStake:m,stakeType:T(b),totalStaked:y,index:w,createdAt:D,lastUpdate:L}}}return n},Jr=async(a,t)=>{let e=a.address.get(`spool.pools.${t}.rewardPoolId`),n,o=await a.client.getObject({id:e,options:{showContent:!0,showType:!0}});if(o.data){let r=o.data,i=r.objectId,s=r.type;if(r.content&&"fields"in r.content){let c=r.content.fields,d=String(c.spool_id),l=Number(c.exchange_rate_numerator),u=Number(c.exchange_rate_denominator),p=Number(c.rewards),m=Number(c.claimed_rewards);n={id:i,type:T(s),stakePoolId:d,ratioNumerator:l,ratioDenominator:u,rewards:p,claimedRewards:m}}}return n};import{TransactionBlock as Fu}from"@mysten/sui.js/transactions";import{normalizeStructTag as gv}from"@mysten/sui.js/utils";import yv from"bignumber.js";var E=a=>{let{sender:t}=a.blockData;if(!t)throw new Error("Sender is required");return t},Ys=(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(qt(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)`)}},Xs=(a,t,e)=>{if(qt(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)`)},Zs=(a,t)=>{if(qt(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")},tc=(a,t,e)=>{if(qt(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)`)},qt=a=>{if(a===void 0)throw new Error("veSca not found")};import{normalizeStructTag as ec,parseStructTag as Lu}from"@mysten/sui.js/utils";import rv from"bignumber.js";var Uu=a=>({pointType:ec(a.point_type.name),weightedAmount:Number(a.weighted_amount),points:Number(a.points),totalPoints:Number(a.total_points),index:Number(a.index)}),nc=a=>({poolType:ec(a.pool_type.name),debtAmount:Number(a.debt_amount),pointList:a.points_list.reduce((t,e)=>{let n=Uu(e),o=Lu(n.pointType).name.toLowerCase();return t[o]=n,t},{})});var Yo=a=>{let t=a.slice(1).toLowerCase();return a.charAt(0).toLowerCase()==="s"&&[...new Set([...et,...bo,...Ws])].includes(t)},Yr=a=>{switch(a){case"afsui":return"afSUI";case"hasui":return"haSUI";case"vsui":return"vSUI";default:return a.toUpperCase()}},oc=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 ac=async(a,t,e,n)=>{let o=n||[...gt],r=a.address.get("borrowIncentive.query"),i=a.address.get("borrowIncentive.incentiveAccounts"),s=`${r}::incentive_account_query::incentive_account_data`,c=new Fu;c.moveCall({target:s,arguments:[c.object(i),c.object(t)]});let l=(await a.client.devInspectTransactionBlock({transactionBlock:c,sender:e})).events[0].parsedJson,u={};return l.pool_records.forEach(p=>{let m=nc(p),{poolType:b}=m,y=a.utils.parseCoinNameFromType(b);o.length>=1&&o.includes(y)&&(u[y]=m)},{}),u};var rc=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 ic=async(a,t)=>{let e=a.address.get(`core.coins.${t}.oracle.pyth.feedObject`),n=await a.client.getObject({id:e,options:{showContent:!0}});if(n.data){let o=n.data;if(o.content&&"fields"in o.content){let r=o.content.fields,i=Number(r.price_info.fields.price_feed.fields.price.fields.expo.fields.magnitude),s=Number(r.price_info.fields.price_feed.fields.price.fields.expo.fields.negative),c=Number(r.price_info.fields.price_feed.fields.price.fields.price.fields.magnitude),d=Number(r.price_info.fields.price_feed.fields.price.fields.price.fields.negative);return c*10**((s?-1:1)*i)*(d?-1:1)}}return 0};import Xr from"bignumber.js";var sc=async(a,t)=>{let e=t,o=`${a.address.get("vesca.id")}::ve_sca::VeScaKey`,r=[],i=!1,s=null;do{let d=await a.client.getOwnedObjects({owner:e,filter:{StructType:o},cursor:s});r.push(...d.data),d.hasNextPage&&d.nextCursor?(i=!0,s=d.nextCursor):i=!1}while(i);return r.map(d=>d.data).filter(d=>!!d)},cc=async(a,t)=>{let n=(await sc(a,t)).map(r=>r.objectId),o=[];for(let r=0;r<n.length;r++){let i=await Zr(a,n[r]);i&&o.push(i)}return o},Zr=async(a,t,e)=>{let n=a.address.get("vesca.tableId"),o=t||(await sc(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:Xr(c.locked_sca_amount).toNumber(),lockedScaCoin:Xr(c.locked_sca_amount).shiftedBy(-9).toNumber(),unlockAt:Xr(c.unlock_at).toNumber()}}return r};var Xo=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 Ft(this,t)}async getCoinAmounts(t,e){return Ks(this,t,e)}async getCoinAmount(t,e=this.params.walletAddress){return Vs(this,t,e)}async getMarketCoinAmounts(t,e){return Qs(this,t,e)}async getMarketCoinAmount(t,e=this.params.walletAddress){return Hs(this,t,e)}async getPriceFromPyth(t){return ic(this,t)}async getAllStakeAccounts(t=this.params.walletAddress){return me(this,t)}async getStakeAccounts(t,e=this.params.walletAddress){return(await this.getAllStakeAccounts(e))[t]??[]}async getStakePools(t=[...bt]){let e={};for(let n=0;n<t.length;n++){let o=t[n],r=await zr(this,o);r&&(e[o]=r)}return e}async getStakePool(t){return zr(this,t)}async getStakeRewardPools(t=[...bt]){let e={};for(let n=0;n<t.length;n++){let o=await Jr(this,t[n]);o&&(e[t[n]]=o)}return e}async getStakeRewardPool(t){return Jr(this,t)}async getBorrowIncentiveAccounts(t,e=this.params.walletAddress,n){return ac(this,t,e,n)}async getObligationCoinNames(t){let e=await Gs(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 ti,normalizeStructTag as qu}from"@mysten/sui.js/utils";var Zo=class{params;isTestnet;_address;client;constructor(t,e){this.params=t,this.client=t.client,this._address=e}parseSymbol(t){if(Yo(t)){let e=t.slice(1).toLowerCase();return t.slice(0,1).toLowerCase()+Yr(e)}return Yr(t)}parseCoinType(t){let e=Yo(t)?this.parseCoinName(t):t,n=Fs[e];return[q.wusdc,q.wusdt,q.weth,q.wbtc,q.wsol,q.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")||fo,n=this.parseCoinType(t);return`${e}::reserve::MarketCoin<${n}>`}parseCoinNameFromType(t){let e=qu(t),n=/((0x[^:]+::[^:]+::[^<>]+))(?![^<>]*<)/,o=t.match(n),r=t.includes("reserve::MarketCoin");e=o?.[1]||t;let i={[`${q.wusdc}::coin::COIN`]:"wusdc",[`${q.wusdt}::coin::COIN`]:"wusdt",[`${q.weth}::coin::COIN`]:"weth",[`${q.wbtc}::coin::COIN`]:"wbtc",[`${q.wsol}::coin::COIN`]:"wsol",[`${q.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=>go[t];getBorrowIncentiveRewardCoinName=t=>Us[t];getCoinDecimal(t){return Ls[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 qs[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=ti,n){let o=n,r=[],i=0,s=!0,c=null;for(;s&&i<t;){let d=await this.client.getCoins({owner:o,coinType:e,cursor:c});d.data.sort((l,u)=>parseInt(u.balance,10)-parseInt(l.balance,10));for(let l=0;l<d.data.length&&(r.push({objectId:d.data[l].coinObjectId,digest:d.data[l].digest,version:d.data[l].version,balance:d.data[l].balance}),i+=parseInt(d.data[l].balance,10),!(i>=t));l++);c=d.nextCursor,s=d.hasNextPage}if(!r.length)throw new Error("No valid coins found for the transaction.");return r}async selectCoinsMarketCoin(t=ti,e){let n=e,o=[],r=!0,i=null;for(;r;){let s=await this.client.getCoins({owner:n,coinType:t,cursor:i});s.data.sort((c,d)=>parseInt(d.balance,10)-parseInt(c.balance,10));for(let c=0;c<s.data.length&&(o.push({objectId:s.data[c].coinObjectId,digest:s.data[c].digest,version:s.data[c].version,balance:s.data[c].balance}),!(o.length>50));c++);i=s.nextCursor,r=s.hasNextPage}return o}async selectCoinIds(t,e=ti,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 oc(r)}parseSCoinName(t){if(Yo(t)&&nt.includes(t))return t;let e=`s${t}`;if(nt.includes(e))return e}};import{SUI_CLOCK_OBJECT_ID as $t,SUI_TYPE_ARG as $u}from"@mysten/sui.js/utils";var Kt=async(...a)=>{let[t,e,n]=a;if(a.length===3&&n&&typeof n=="string"){let i=await Zr(t.query,n);return i||void 0}let o=E(e),r=await cc(t.query,o);if(r.length!==0)return r[0]};var ei=async(...a)=>{let[t,e,n,o]=a;if(a.length===4&&n&&o&&typeof n=="string"){let c=await Gr(t.query,n);return{obligationId:n,obligationKey:o,obligationLocked:c}}let r=E(e),i=await Ft(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}},Ku=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($t)]})},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($t)]})},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($t)]})},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($t)],typeArguments:[$u]})},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($t)],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($t)],typeArguments:[c]})}}},N=async({builder:a,txBlock:t})=>{let e=await Ku({builder:a,txBlock:t});return{normalMethod:e,stakeObligationQuick:async(n,o)=>{let{obligationId:r,obligationKey:i,obligationLocked:s}=await ei(a,t,n,o),c=!!t.blockData.transactions.find(d=>d.kind==="MoveCall"&&(d.target===`${ft}::user::unstake`||d.target===`${a.address.get("borrowIncentive.id")}::user::unstake`));(!s||c)&&e.stakeObligation(r,i)},unstakeObligationQuick:async(n,o)=>{let{obligationId:r,obligationKey:i,obligationLocked:s}=await ei(a,t,n,o);s&&e.unstakeObligation(r,i)},stakeObligationWithVeScaQuick:async(n,o,r)=>{let{obligationId:i,obligationKey:s,obligationLocked:c}=await ei(a,t,n,o),d=!!t.blockData.transactions.find(async l=>l.kind==="MoveCall"&&(l.target===`${ft}::user::unstake`||l.target===`${a.address.get("borrowIncentive.id")}::user::unstake`));if(!c||d){let l=await rc({address:a.address,client:a.client},i);if(r&&r!==l)throw new Error("Binded veScaKey is not equal to the provided veScaKey");l?e.stakeObligationWithVesca(i,s,l):e.stakeObligation(i,s)}},claimBorrowIncentiveQuick:(n,o,r)=>e.claimBorrowIncentive(o,r,n)}};import{SUI_CLOCK_OBJECT_ID as at}from"@mysten/sui.js/utils";import{SUI_CLOCK_OBJECT_ID as na}from"@mysten/sui.js/utils";import Vu from"axios";var lc={testnet:["https://hermes-beta.pyth.network"],mainnet:["https://hermes.pyth.network","https://scallop.rpc.p2p.world"]};import{bcs as ni}from"@mysten/sui.js/bcs";import{SUI_CLOCK_OBJECT_ID as ta}from"@mysten/sui.js/utils";var oi=16*1024,ea=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(ni.ser("vector<u8>",Array.from(r),{maxSize:oi}).toBytes()),e.object(ta)]});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(ni.ser("vector<u8>",Array.from(e[0]),{maxSize:oi}).toBytes()),s[0],t.object(ta)]});let c=[],d=await this.getBaseUpdateFee(),l=t.splitCoins(t.gas,n.map(()=>t.pure(d))),u=0;for(let p=0;p<n.length;p++){let m=await this.getPriceFeedObjectId(n[p]);if(!m)throw new Error(`Price feed ${n[0]} not found, please create it first`);c.push(m),[r]=t.moveCall({target:`${o}::pyth::update_single_price_feed`,arguments:[t.object(this.pythStateId),r,t.object(m),l[u],t.object(ta)]}),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(ni.ser("vector<u8>",Array.from(e[0]),{maxSize:oi}).toBytes()),r[0],t.object(ta)]})}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 Qu=async(a,t)=>(await Vu.get(`${a}/api/latest_vaas`,{params:{ids:t}})).data.map(o=>Buffer.from(o,"base64")),fe=async(a,t,e)=>{let n=e??[...new Set([...et,...bo])],o=a.isTestnet?["pyth"]:["pyth"];if(o.includes("pyth")){let i=new ea(a.client,a.address.get("core.oracles.pyth.state"),a.address.get("core.oracles.pyth.wormholeState")),s=[];await Promise.all(n.map(async d=>s.push(a.address.get(`core.coins.${d}.oracle.pyth.feed`))));let c=a.params.pythEndpoints??lc[a.isTestnet?"testnet":"mainnet"];try{let d=await Qu(c[0],s);await i.updatePriceFeeds(t,d,s)}catch(d){console.warn(`Failed to update price feeds with endpoint ${c[0]}: ${d}`)}}let r=[...new Set(n)];for(let i=0;i<r.length;i++)await Hu(a,t,r[i],o)},Hu=async(a,t,e,n)=>{let o=a.utils.parseCoinType(e);Gu(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)},Gu=(a,t,e,n,o,r,i,s,c,d,l,u,p,m,b)=>{let y=zu(a,e,n,b);return t.includes("pyth")&&Zu(a,o,y,i,s,r,b),t.includes("switchboard")&&Xu(a,c,y,l,d,b),t.includes("supra")&&Yu(a,u,y,m,p,b),Ju(a,e,n,y,b),a},zu=(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})},Ju=(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(na)],typeArguments:i}),a},Yu=(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(na)],typeArguments:[r]})},Xu=(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(na)],typeArguments:[r]})},Zu=(a,t,e,n,o,r,i)=>{let s=typeof e=="string"?a.object(e):e,c=typeof n=="string"?a.object(n):n,d=typeof o=="string"?a.object(o):o,l=typeof r=="string"?a.object(r):r;a.moveCall({target:`${t}::rule::set_price`,arguments:[s,c,d,l,a.object(na)],typeArguments:[i]})};var yt=async({builder:a,txBlock:t})=>{let e={pkgId:a.address.get("scoin.id")},n={};return await Promise.all(nt.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 be=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=E(t),i=await Ft(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}},tp=async({builder:a,txBlock:t})=>{let e={protocolPkg:a.address.get("core.packages.protocol.id"),market:a.address.get("core.market"),version:a.address.get("core.version"),coinDecimalsRegistry:a.address.get("core.coinDecimalsRegistry"),xOracle:a.address.get("core.oracles.xOracle")},o=`${a.address.get("referral.id")}::scallop_referral_program::REFERRAL_WITNESS`;return{openObligation:()=>t.moveCall({target:`${e.protocolPkg}::open_obligation::open_obligation`,arguments:[t.object(e.version)]}),returnObligation:(r,i)=>t.moveCall({target:`${e.protocolPkg}::open_obligation::return_obligation`,arguments:[t.object(e.version),t.object(r),t.object(i)]}),openObligationEntry:()=>t.moveCall({target:`${e.protocolPkg}::open_obligation::open_obligation_entry`,arguments:[t.object(e.version)]}),addCollateral:(r,i,s)=>{let c=a.utils.parseCoinType(s);return t.moveCall({target:`${e.protocolPkg}::deposit_collateral::deposit_collateral`,arguments:[t.object(e.version),t.object(r),t.object(e.market),typeof i!="string"?i:t.pure(i)],typeArguments:[c]})},takeCollateral:(r,i,s,c)=>{let d=a.utils.parseCoinType(c);return t.moveCall({target:`${e.protocolPkg}::withdraw_collateral::withdraw_collateral`,arguments:[t.object(e.version),t.object(r),t.object(i),t.object(e.market),t.object(e.coinDecimalsRegistry),t.pure(s),t.object(e.xOracle),t.object(at)],typeArguments:[d]})},deposit:(r,i)=>{let s=a.utils.parseCoinType(i);return t.moveCall({target:`${e.protocolPkg}::mint::mint`,arguments:[t.object(e.version),t.object(e.market),typeof r!="string"?r:t.pure(r),t.object(at)],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(at)],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(at)],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(at)],typeArguments:[s]})},borrow:(r,i,s,c)=>{let d=a.utils.parseCoinType(c);return t.moveCall({target:`${e.protocolPkg}::borrow::borrow`,arguments:[t.object(e.version),t.object(r),t.object(i),t.object(e.market),t.object(e.coinDecimalsRegistry),t.pure(s),t.object(e.xOracle),t.object(at)],typeArguments:[d]})},borrowEntry:(r,i,s,c)=>{let d=a.utils.parseCoinType(c);return t.moveCall({target:`${e.protocolPkg}::borrow::borrow_entry`,arguments:[t.object(e.version),t.object(r),t.object(i),t.object(e.market),t.object(e.coinDecimalsRegistry),t.pure(s),t.object(e.xOracle),t.object(at)],typeArguments:[d]})},borrowWithReferral:(r,i,s,c,d)=>{let l=a.utils.parseCoinType(d);return t.moveCall({target:`${e.protocolPkg}::borrow::borrow_with_referral`,arguments:[t.object(e.version),t.object(r),t.object(i),t.object(e.market),t.object(e.coinDecimalsRegistry),t.object(s),t.pure(c),t.object(e.xOracle),t.object(at)],typeArguments:[l,o]})},repay:(r,i,s)=>{let c=a.utils.parseCoinType(s);return t.moveCall({target:`${e.protocolPkg}::repay::repay`,arguments:[t.object(e.version),t.object(r),t.object(e.market),typeof i!="string"?i:t.pure(i),t.object(at)],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]})}}},j=async({builder:a,txBlock:t})=>{let e=await tp({builder:a,txBlock:t}),n=await yt({builder:a,txBlock:t});return{normalMethod:e,addCollateralQuick:async(o,r,i)=>{let s=E(t),{obligationId:c}=await be(t,a,i);if(r==="sui"){let[d]=t.splitCoins(t.gas,[o]);e.addCollateral(c,d,r)}else{let{leftCoin:d,takeCoin:l}=await a.selectCoin(t,r,o,s);e.addCollateral(c,l,r),t.transferObjects([d],s)}},takeCollateralQuick:async(o,r,i,s)=>{let c=await be(t,a,i,s),d=await a.query.getObligationCoinNames(c.obligationId);return await fe(a,t,d),e.takeCollateral(c.obligationId,c.obligationKey,o,r)},depositQuick:async(o,r,i)=>{if(r==="sui"){let[d]=t.splitCoins(t.gas,[o]);return e.deposit(d,r)}let{leftCoin:s,takeCoin:c}=await a.selectCoin(t,r,o,i);return t.transferObjects([s],i),e.deposit(c,r)},withdrawQuick:async(o,r)=>{let i=E(t),s=a.utils.parseMarketCoinName(r);try{let c=a.utils.parseSCoinName(r);if(!c)throw new Error(`No sCoin for ${r}`);let{leftCoin:d,takeCoin:l,totalAmount:u}=await a.selectSCoin(t,c,o,i);t.transferObjects([d],i);let p=n.burnSCoin(c,l),m=e.withdraw(p,r),b=o-u;try{if(b>0){let{leftCoin:y,takeCoin:w}=await a.selectMarketCoin(t,s,b,i);t.transferObjects([y],i),t.mergeCoins(m,[e.withdraw(w,r)])}}catch{}return m}catch{let{leftCoin:d,takeCoin:l}=await a.selectMarketCoin(t,s,o,i);return t.transferObjects([d],i),e.withdraw(l,r)}},borrowQuick:async(o,r,i,s)=>{let c=await be(t,a,i,s),l=[...await a.query.getObligationCoinNames(c.obligationId),r];return await fe(a,t,l),e.borrow(c.obligationId,c.obligationKey,o,r)},borrowWithReferralQuick:async(o,r,i,s,c)=>{let d=await be(t,a,s,c),u=[...await a.query.getObligationCoinNames(d.obligationId),r];return await fe(a,t,u),e.borrowWithReferral(d.obligationId,d.obligationKey,i,o,r)},repayQuick:async(o,r,i,s)=>{let c=await be(t,a,i);if(r==="sui"){let[u]=t.splitCoins(t.gas,[o]);return e.repay(c.obligationId,u,r)}let{leftCoin:d,takeCoin:l}=await a.selectCoin(t,r,o,s);return t.transferObjects([d],s),e.repay(c.obligationId,l,r)},updateAssetPricesQuick:async o=>fe(a,t,o)}};import{SUI_CLOCK_OBJECT_ID as oa}from"@mysten/sui.js/utils";var aa=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(oa)],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(oa)],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(oa)],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(oa)],typeArguments:[i]})}}},dc=async({builder:a,txBlock:t})=>{let e=await aa({builder:a,txBlock:t});return{claimReferralRevenueQuick:async(n,o,r=[...et])=>{let i=[];for(let s=0;s<r.length;s++)if(r[s]==="sui"){let c=e.claimReferralRevenue(n,r[s]);i.push(c)}else{let c=e.claimReferralRevenue(n,r[s]);try{let d=await a.utils.selectCoinIds(1/0,a.utils.parseCoinType(r[s]),o);t.mergeCoins(c,d.slice(0,500))}catch{}finally{i.push(c)}}i.length>0&&t.transferObjects(i,t.pure(o))}}};var ep={packageId:"0x5857d185897aaff40ae37b2eecc895efc1a9dff1b210c4fb894eabbce4ac2603"},uc={check_slippage:(a,t,e,n,o)=>a.moveCall({target:`${ep.packageId}::slippage_check::check_slippage`,arguments:[t,a.pure(e),a.pure(n)],typeArguments:[o]})};import{SUI_CLOCK_OBJECT_ID as ra}from"@mysten/sui.js/utils";var pc=async(a,t,e,n,o,r,i=!1)=>{let s=await yt({builder:a,txBlock:t}),c=await fc({builder:a,txBlock:t});try{let{takeCoin:d,leftCoin:l,totalAmount:u}=i?await a.selectSCoin(t,n,o,r):await a.selectMarketCoin(t,n,o,r);if(i){let p=s.burnSCoin(n,d);c.stake(e,p,n)}else c.stake(e,d,n);return t.transferObjects([l],r),u}catch{return 0}},mc=async(...a)=>{let[t,e,n,o]=a;if(a.length===4&&o)return[o];let r=E(e);return(await me(t.query,r))[n].map(s=>s.id)},np=async(...a)=>{let[t,e,n,o]=a,r=E(e),i=await me(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]},fc=async({builder:a,txBlock:t})=>{let e={spoolPkg:a.address.get("spool.id")},n={},o={},r={};return bt.forEach(i=>{let s=a.address.get(`spool.pools.${i}.id`),c=a.address.get(`spool.pools.${i}.rewardPoolId`),d=a.utils.parseMarketCoinType(i);n[i]=s,o[i]=c,r[i]=d}),{createStakeAccount:i=>{let s=r[i],c=n[i];return t.moveCall({target:`${e.spoolPkg}::user::new_spool_account`,arguments:[t.object(c),t.object(ra)],typeArguments:[s]})},stake:(i,s,c)=>{let d=r[c],l=n[c];t.moveCall({target:`${e.spoolPkg}::user::stake`,arguments:[t.object(l),t.object(i),typeof s=="string"?t.pure(s):s,t.object(ra)],typeArguments:[d]})},unstake:(i,s,c)=>{let d=r[c],l=n[c];return t.moveCall({target:`${e.spoolPkg}::user::unstake`,arguments:[t.object(l),t.object(i),t.pure(s),t.object(ra)],typeArguments:[d]})},claim:(i,s)=>{let c=n[s],d=o[s],l=r[s],u=go[s],p=a.utils.parseCoinType(u);return t.moveCall({target:`${e.spoolPkg}::user::redeem_rewards`,arguments:[t.object(c),t.object(d),t.object(i),t.object(ra)],typeArguments:[l,p]})}}},rt=async({builder:a,txBlock:t})=>{let e=await fc({builder:a,txBlock:t}),n=await yt({builder:a,txBlock:t});return{normalMethod:e,stakeQuick:async(o,r,i)=>{let s=E(t),c=await mc(a,t,r,i),d=[];if(c.length===0){let l=e.createStakeAccount(r);d.push(l)}if(typeof o=="number"){let l=await pc(a,t,c.length>0?c[0]:d[0],r,o,s);o-=l,l||await pc(a,t,c.length>0?c[0]:d[0],r,o,s,!0)}else e.stake(c.length>0?c[0]:d[0],o,r);d.length>0&&t.transferObjects(d,s)},unstakeQuick:async(o,r,i,s)=>{let c=await np(a,t,r,i),d=[],l=o;for(let u of c){if(u.staked===0)continue;let p=Math.min(l,u.staked),m=e.unstake(u.id,p,r);if(s){let b=n.mintSCoin(r,m);d.push(b)}else d.push(m);if(l-=p,o<=0)break}if(d.length>0){let u=d[0];return d.length>1&&t.mergeCoins(u,d.slice(1)),u}},claimQuick:async(o,r)=>{let i=await mc(a,t,o,r),s=[];return i.forEach(c=>{let d=e.claim(c,o);s.push(d)}),s}}};import{SUI_CLOCK_OBJECT_ID as ge}from"@mysten/sui.js/utils";var op=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(ge)]}),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(ge)]})},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(ge)]})},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(ge)]})},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(ge)]}),mintEmptyVeSca:()=>t.moveCall({target:`${e.pkgId}::ve_sca::mint_ve_sca_placeholder_key`,arguments:[t.object(e.config),t.object(e.table)],typeArguments:[]})}},St=async({builder:a,txBlock:t})=>{let e=await op({builder:a,txBlock:t});return{normalMethod:e,lockScaQuick:async(n,o,r=!0)=>{let i=E(t),s=await Kt(a,t),c,d=[];if(n!==void 0&&typeof n=="number"){let m=await a.utils.selectCoinIds(n,mt,i),[b,y]=a.utils.takeAmountFromCoins(t,m,n);c=b,d.push(y)}else c=n;let l=a.utils.getUnlockAt(o,s?.unlockAt);r&&Ys(n,o,l,s?.unlockAt),console.log(new Date(l*1e3).toLocaleString("en-CA",{hour12:!0}));let u=!s?.unlockAt,p=!u&&s.unlockAt*1e3<=new Date().getTime();if(u||p){if(c)if(u){let m=e.lockSca(c,l);d.push(m)}else{if(s.lockedScaAmount!==0){let m=e.redeemSca(s.keyId);d.push(m)}e.renewExpiredVeSca(s.keyId,c,l)}}else c&&o?(e.extendLockPeriod(s.keyId,l),e.extendLockAmount(s.keyId,c)):o?e.extendLockPeriod(s.keyId,l):c&&e.extendLockAmount(s.keyId,c);d.length>0&&t.transferObjects(d,i)},extendLockPeriodQuick:async(n,o,r=!0)=>{let i=await Kt(a,t,o),s=a.utils.getUnlockAt(n);r&&Xs(n,s,i?.unlockAt),i&&e.extendLockPeriod(i.keyId,s)},extendLockAmountQuick:async(n,o,r=!0)=>{let i=E(t),s=await Kt(a,t,o);if(r&&Zs(n,s?.unlockAt),s){let c=await a.utils.selectCoinIds(n,mt,i),[d,l]=a.utils.takeAmountFromCoins(t,c,n);e.extendLockAmount(s.keyId,d),t.transferObjects([l],i)}},renewExpiredVeScaQuick:async(n,o,r,i=!0)=>{let s=E(t),c=await Kt(a,t,r),d=a.utils.getUnlockAt(o,c?.unlockAt);if(i&&tc(n,o,c?.unlockAt),c){let l=[];if(c.lockedScaAmount!==0){let b=e.redeemSca(c.keyId);l.push(b)}let u=await a.utils.selectCoinIds(n,mt,s),[p,m]=a.utils.takeAmountFromCoins(t,u,n);l.push(m),e.renewExpiredVeSca(c.keyId,p,d),t.transferObjects(l,s)}},redeemScaQuick:async n=>{let o=E(t),r=await Kt(a,t,n);if(qt(r?.unlockAt),r){let i=e.redeemSca(r.keyId);t.transferObjects([i],o)}}}};import{normalizeStructTag as ip}from"@mysten/sui.js/utils";import{SUI_CLOCK_OBJECT_ID as ap}from"@mysten/sui.js/utils";var Vt={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}}},bc={id:"0x000000000000000000000000000000000000000000000000000000000000dee9"},ai={id:"0x2c6c36393db063a9534885d22a47caead720272475336470736be28f119971f3"},gc={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 hc={objectId:ap,initialSharedVersion:"1",mutable:!1},rp=(a,t)=>{if(a==="sui")switch(t){case"wusdc":return{pool:Vt.pools.sui2usdc,aToB:!0};default:throw new Error(`Invalid coin pair: ${a} and ${t}`)}else if(a==="wusdc")switch(t){case"sui":return{pool:Vt.pools.sui2usdc,aToB:!1};case"wusdt":return{pool:Vt.pools.usdt2usdc,aToB:!1};case"usdc":return{pool:Vt.pools.wusdc2usdc,aToB:!0};default:throw new Error(`Invalid coin pair: ${a} and ${t}`)}else if(a==="wusdt")switch(t){case"wusdc":return{pool:Vt.pools.usdt2usdc,aToB:!0};default:throw new Error(`Invalid coin pair: ${a} and ${t}`)}else throw new Error(`Invalid coin pair: ${a} and ${t}`)},ri={createAccount:a=>a.moveCall({target:`${bc.id}::${gc.clob_v2.create_account}`,arguments:[],typeArguments:[]}),swap:(a,t,e,n,o,r,i)=>{let{pool:s,aToB:c}=rp(e,n),d=i.parseCoinType(e),l=i.parseCoinType(n),u=typeof r=="string"?a.object(r):"objectId"in r?a.objectRef(r):a.object(r);if(!s)throw new Error(`Deepbook: No pool found for ${e} to ${n}`);return c?a.moveCall({target:`${ai.id}::deepbook::deepbook_base_for_quote`,arguments:[a.sharedObjectRef(s.object),a.pure(o),u,a.object(t),a.sharedObjectRef(hc),a.pure(s.lotsize)],typeArguments:[d,l]}):a.moveCall({target:`${ai.id}::deepbook::deepbook_quote_for_base`,arguments:[a.sharedObjectRef(s.object),a.pure(o),u,a.sharedObjectRef(hc),a.object(t),a.pure(s.lotsize)],typeArguments:[l,d]})}};var ia=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:ip("0xdee9::custodian_v2::AccountCap")},limit:1});return e.length===0||!e[0].data?ri.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:ri.swap(o,t,e,n,this.clientOrderId,r,this.scallopUtils),accountCap:r}}};var sa=class{params;client;address;builder;query;utils;walletAddress;deepbookSwap;constructor(t,e){this.params=t,this.client=t.client,this.address=e,this.utils=new Zo(t,this.address),this.query=new Xo(t,{address:this.address,utils:this.utils}),this.builder=new Go(t,{address:this.address,query:this.query,utils:this.utils}),this.deepbookSwap=new ia({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 C,n=await j({builder:this.builder,txBlock:e}),o=await N({builder:this.builder,txBlock:e}),r=t||this.params.walletAddress;e.setSender(r);let[i,s,c]=n.normalMethod.openObligation();return o.normalMethod.stakeObligation(i,s),n.normalMethod.returnObligation(i,c),e.transferObjects([s],r),e}async depositCollateral(t,e,n,o){let r=new C,i=o||this.params.walletAddress;r.setSender(i);let s=await j({builder:this.builder,txBlock:r}),c=await this.query.getObligations(i),d=n||c?.[0]?.id;if(d)await s.addCollateralQuick(e,t,d);else{let[l,u,p]=s.normalMethod.openObligation();await s.addCollateralQuick(e,t,l),s.normalMethod.returnObligation(l,p),r.transferObjects([u],i)}return r}async withdrawCollateral(t,e,n,o,r){let i=new C,s=await j({builder:this.builder,txBlock:i}),c=r||this.params.walletAddress;i.setSender(c);let d=await s.takeCollateralQuick(e,t,n,o);return i.transferObjects([d],c),i}async deposit(t,e,n){let o=new C,r=await j({builder:this.builder,txBlock:o}),i=await yt({builder:this.builder,txBlock:o}),s=n||this.params.walletAddress;o.setSender(s);let c=await r.depositQuick(e,t,n),d=this.utils.parseMarketCoinName(t);if(!nt.includes(d))o.transferObjects([c],s);else{let l=i.mintSCoin(d,c);o.transferObjects([l],s)}return o}async withdraw(t,e,n){let o=new C,r=n||this.params.walletAddress,i=await j({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 C,s=await j({builder:this.builder,txBlock:i}),c=await N({builder:this.builder,txBlock:i}),d=r||this.params.walletAddress;i.setSender(d);let l=gt.includes(t);l&&await c.unstakeObligationQuick(n,o);let u=await s.borrowQuick(e,t,n,o);return i.transferObjects([u],d),l&&await c.stakeObligationQuick(n,o),i}async borrowWithBoost(t,e,n,o,r,i){let s=new C,c=await j({builder:this.builder,txBlock:s}),d=await N({builder:this.builder,txBlock:s}),l=i||this.params.walletAddress;s.setSender(l);let u=gt.includes(t);u&&await d.unstakeObligationQuick(n,o);let p=await c.borrowQuick(e,t,n,o);return s.transferObjects([p],l),u&&await d.stakeObligationWithVeScaQuick(n,o,r),s}async borrowWithReferral(t,e,n,o,r,i){let s=new C,c=await j({builder:this.builder,txBlock:s}),d=await N({builder:this.builder,txBlock:s}),l=await aa({builder:this.builder,txBlock:s}),u=i||this.params.walletAddress;s.setSender(u);let p=gt.includes(t);p&&await d.unstakeObligationQuick(n,o);let m=l.claimReferralTicket(t),b=await c.borrowWithReferralQuick(e,t,m,n,o);return l.burnReferralTicket(m,t),s.transferObjects([b],u),p&&r?await d.stakeObligationWithVeScaQuick(n,o,r):await d.stakeObligationQuick(n,o),s}async repay(t,e,n,o,r){let i=new C,s=await j({builder:this.builder,txBlock:i}),c=await N({builder:this.builder,txBlock:i}),d=r||this.params.walletAddress;i.setSender(d);let l=gt.includes(t);return l&&await c.unstakeObligationQuick(n,o),await s.repayQuick(e,t,n,d),l&&await c.stakeObligationQuick(n,o),i}async repayWithBoost(t,e,n,o,r){let i=new C,s=await j({builder:this.builder,txBlock:i}),c=await N({builder:this.builder,txBlock:i}),d=r||this.params.walletAddress;i.setSender(d);let l=gt.includes(t);return l&&await c.unstakeObligationQuick(n,void 0),await s.repayQuick(e,t,n,d),l&&await c.stakeObligationWithVeScaQuick(n,void 0,o),i}async createStakeAccount(t,e){let n=new C,o=await rt({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 C,i=await j({builder:this.builder,txBlock:r}),s=await rt({builder:this.builder,txBlock:r}),c=o||this.params.walletAddress;r.setSender(c);let d=await i.depositQuick(e,t,o),l=this.utils.parseMarketCoinName(t);if(!bt.find(m=>m===l))return r;let u=await this.query.getStakeAccounts(l,c),p=n||(u.length>0?u[0].id:void 0);if(p)await s.stakeQuick(d,l,p);else{let m=s.normalMethod.createStakeAccount(l);await s.stakeQuick(d,l,m),r.transferObjects([m],c)}return r}async unstakeAndWithdraw(t,e,n){let o=new C,r=await j({builder:this.builder,txBlock:o}),i=await rt({builder:this.builder,txBlock:o}),s=this.params.walletAddress,c=[];o.setSender(s);let d=this.utils.parseMarketCoinName(t);for(let l=0;l<n.length;l++){let u=n[l],[p]=await i.unstakeQuick(u.coin,d,u.id);if(p){let m=r.normalMethod.withdraw(p,t);c.push(m)}}if(e>0){let l=await r.withdrawQuick(e,t);c.push(l)}return c.length>1&&o.mergeCoins(c[0],c.slice(1)),o.transferObjects(c,s),o}async stake(t,e,n,o){let r=new C,i=await rt({builder:this.builder,txBlock:r}),s=o||this.params.walletAddress;r.setSender(s);let c=await this.query.getStakeAccounts(t,s),d=n||(c.length>0?c[0].id:void 0);if(d)await i.stakeQuick(e,t,d);else{let l=i.normalMethod.createStakeAccount(t);await i.stakeQuick(e,t,l),r.transferObjects([l],s)}return r}async unstake(t,e,n,o){let r=new C,i=await rt({builder:this.builder,txBlock:r}),s=o||this.params.walletAddress;r.setSender(s);let c=nt.includes(t),d=await i.unstakeQuick(e,t,n,c);return r.transferObjects([d],r.pure(s)),r}async claim(t,e,n,o){let r=new C,i=await rt({builder:this.builder,txBlock:r}),s=await N({builder:this.builder,txBlock:r}),c=o||this.params.walletAddress;r.setSender(c);let d={sui:[],sca:[],scallop_sui:[],scallop_sca:[],scallop_deep:[],scallop_fud:[]};for(let l=0;l<t.length;l++){let{stakeMarketCoinName:u,stakeAccountId:p}=t[l],m=i.normalMethod.claim(p,u);d.sui.push(m)}for(let l=0;l<e.length;l++){let{obligationId:u,obligationKey:p,rewardCoinName:m}=e[l],b=s.normalMethod.claimBorrowIncentive(u,p,m);d[m].push(b)}for(let l=0;l<n.length;l++){let{obligationId:u,obligationKey:p,rewardCoinName:m}=n[l],b=s.normalMethod.oldClaimBorrowIncentive(u,p,m);d[m].push(b)}for(let l in d)d[l].length>0&&(d[l].length>1&&r.mergeCoins(d[l][0],d[l].slice(1)),r.transferObjects([d[l][0]],r.pure(c)));return r}async stakeObligation(t,e,n){let o=this.builder.createTxBlock(),r=await N({builder:this.builder,txBlock:o}),i=n||this.params.walletAddress;return o.setSender(i),await r.stakeObligationQuick(t,e),o}async unstakeObligation(t,e,n){let o=this.builder.createTxBlock(),r=await N({builder:this.builder,txBlock:o}),i=n||this.params.walletAddress;return o.setSender(i),await r.unstakeObligationQuick(t,e),o}async stakeSca(t,e=!1,n=!1,o,r,i,s,c){let d=new C,l=await St({builder:this.builder,txBlock:d}),u=await N({builder:this.builder,txBlock:d}),p=c||this.params.walletAddress;d.setSender(p);let m=await this.builder.utils.selectCoinIds(t,mt,p),[b,y]=this.builder.utils.takeAmountFromCoins(d,m,t),w;return s?l.normalMethod.extendLockAmount(s,b):w=l.normalMethod.lockSca(b,i),o&&r&&(e&&(n?u.normalMethod.oldUnstakeObligation(o,r):u.normalMethod.unstakeObligation(o,r)),u.normalMethod.stakeObligationWithVesca(o,r,s||w)),s||d.transferObjects([w,y],p),d}async stakeMoreSca(t,e,n){let o=new C,r=n||this.params.walletAddress;return o.setSender(r),o}async extendStakeScaLockPeriod(t,e,n,o,r=!1,i=!1,s){let c=new C,d=await St({builder:this.builder,txBlock:c}),l=await N({builder:this.builder,txBlock:c}),u=s||this.params.walletAddress;return c.setSender(u),d.normalMethod.extendLockPeriod(e,t),n&&o&&(r&&(i?l.normalMethod.oldUnstakeObligation(n,o):l.normalMethod.unstakeObligation(n,o)),l.normalMethod.stakeObligationWithVesca(n,o,e)),c}async extendPeriodAndStakeMoreSca(t,e,n,o,r,i=!1,s=!1,c){let d=new C,l=await St({builder:this.builder,txBlock:d}),u=await N({builder:this.builder,txBlock:d}),p=c||this.params.walletAddress;d.setSender(p);let m=await this.builder.utils.selectCoinIds(t,mt,p),[b,y]=this.builder.utils.takeAmountFromCoins(d,m,t);return l.normalMethod.extendLockPeriod(e,n),l.normalMethod.extendLockAmount(e,b),d.transferObjects([y],p),!o||!r||(i&&(s?u.normalMethod.oldUnstakeObligation(o,r):u.normalMethod.unstakeObligation(o,r)),u.normalMethod.stakeObligationWithVesca(o,r,e)),d}async renewExpiredStakeSca(t,e,n,o=!1,r,i,s=!1,c=!1,d){let l=new C,u=await St({builder:this.builder,txBlock:l}),p=await N({builder:this.builder,txBlock:l}),m=d||this.params.walletAddress;if(l.setSender(m),o){let D=u.normalMethod.redeemSca(n);l.transferObjects([D],m)}let b=await this.builder.utils.selectCoinIds(t,mt,m),[y,w]=this.builder.utils.takeAmountFromCoins(l,b,t);return l.transferObjects([w],m),u.normalMethod.renewExpiredVeSca(n,y,e),!r||!i||(s&&(c?p.normalMethod.oldUnstakeObligation(r,i):p.normalMethod.unstakeObligation(r,i)),p.normalMethod.stakeObligationWithVesca(r,i,n)),l}async redeemSca(t){let e=new C,n=await St({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 C,i=await N({builder:this.builder,txBlock:r}),s=this.params.walletAddress;r.setSender(s);let c=i.normalMethod.oldClaimBorrowIncentive(e,t,n);return r.transferObjects([c],s),await i.unstakeObligationQuick(e,t),o?await i.stakeObligationWithVeScaQuick(e,t,o):await i.stakeObligationQuick(e,t),r}async withdrawUnlockedSca(t,e){let n=new C,o=await St({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 yc(t.weightedAmount),r=e.currentPointIndex?yc(e.currentPointIndex-t.index).dividedBy(1e9):1;return n.multipliedBy(r).plus(t.points).shiftedBy(-1*e.coinDecimal)}async createReferralLink(){let t=new C,e=await St({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 C,o=await dc({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 C,n=await aa({builder:this.builder,txBlock:e}),o=this.params.walletAddress;return e.setSender(o),n.bindToReferral(t),e}async migrateAllMarketCoin(){let t=new C,e=await yt({builder:this.builder,txBlock:t}),n=await rt({builder:this.builder,txBlock:t});t.setSender(this.params.walletAddress);let o=[];return await Promise.all(nt.map(async r=>{let i=[],s;try{let c=await this.utils.selectCoinIds(Number.MAX_SAFE_INTEGER,this.utils.parseMarketCoinType(r),this.params.walletAddress),d=c[0];c.length>1&&t.mergeCoins(d,c.slice(1)),s=d}catch(c){if(!c.toString().includes("No valid coins found for the transaction"))throw c}if(s){let c=e.mintSCoin(r,s);try{let d=await this.utils.selectCoinIds(Number.MAX_SAFE_INTEGER,this.utils.parseSCoinType(r),this.params.walletAddress);t.mergeCoins(c,d)}catch(d){console.log(d)}i.push(c)}if(bt.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 C,s=await j({builder:this.builder,txBlock:i}),c=await rt({builder:this.builder,txBlock:i}),d=this.params.walletAddress,l=[],u=this.utils.parseMarketCoinName(t),p=this.utils.parseMarketCoinType(u),b=(await this.utils.selectCoinsMarketCoin(p,d)).map(_=>_.objectId);i.setSender(d);for(let _=0;_<r.length;_++){let $=r[_],[U]=await c.unstakeQuick($.coin,u,$.id);if(U){b.length>0&&i.mergeCoins(U,b);let Nc=s.normalMethod.withdraw(U,t);l.push(Nc)}}if(e>0){let _=await s.withdrawQuick(e,t);l.push(_)}l.length>1&&i.mergeCoins(l[0],l.slice(1));let[y]=i.splitCoins(l[0],[i.pure(o)]);i.transferObjects([l[0]],d);let{swapResult:w,accountCap:D}=await this.deepbookSwap.swapToken({baseCoinName:"wusdc",quoteCoinName:"usdc",tokenObjectIn:y,tx:i});typeof D=="string"&&i.transferObjects([D],d),uc.check_slippage(i,w,n,o,this.query.utils.parseCoinType("usdc"));let L=s.normalMethod.deposit(w,"usdc");return await c.stakeQuick(L,"susdc"),i}};var he=class{params;client;builder;query;utils;address;constructor(t){this.params=t,this.address=t.address}async init(){this.address||(this.address=new Ho({id:js})),await this.address.read(),this.client=new sa(this.params,this.address);let{builder:t,query:e,utils:n}=this.client;this.builder=t,this.query=e,this.utils=n}};var ca=class{application="scallop";supportSDK="@mysten/sui.js";scallop;async deserialize(t){this.scallop||(this.scallop=new he({client:t.suiClient,walletAddress:t.account.address}),await this.scallop.init());let{transactionBlock:e}=t;console.log("transactionBlock",e);let n=new ho(e,this.scallop),o=new yo(e,this.scallop),r=new So(e,this.scallop),i=n.decode()||o.decode()||r.decode();if(!i)throw new Error("Unknown transaction type");return{txType:sp.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 he({client:t.suiClient,walletAddress:t.account.address}),await this.scallop.init());let s;switch(r){case"SupplyLending":s=_o.fromData(i);break;case"WithdrawLending":s=No.fromData(i);break;case"Borrow":s=wo.fromData(i);break;case"Repay":s=Oo.fromData(i);break;case"DepositCollateral":s=ko.fromData(i);break;case"WithdrawCollateral":s=Eo.fromData(i);break;case"OpenObligation":s=Ao.fromData(i);break;case"StakeSpool":s=Ro.fromData(i);break;case"UnstakeSpool":s=Bo.fromData(i);break;case"ClaimIncentiveReward":s=Io.fromData(i);break;case"BorrowWithBoost":s=To.fromData(i);break;case"StakeSca":s=Ko.fromData(i);break;case"ExtendStakePeriod":s=Fo.fromData(i);break;case"ExtendPeriodAndStakeMore":s=Uo.fromData(i);break;case"RenewExpStakePeriod":s=$o.fromData(i);break;case"WithdrawStakedSca":s=Qo.fromData(i);break;case"SupplyAndStakeLending":s=Vo.fromData(i);break;case"WithdrawAndUnstakeLending":s=Mo.fromData(i);break;case"RedeemSca":s=qo.fromData(i);break;case"MigrateAndClaim":s=Do.fromData(i);break;case"BorrowWithReferral":s=Co.fromData(i);break;case"CreateReferralLink":s=Lo.fromData(i);break;case"ClaimRevenueReferral":s=Wo.fromData(i);break;case"BindReferral":s=jo.fromData(i);break;case"MigrateScoin":s=xo.fromData(i);break;case"RepayWithBoost":s=Po.fromData(i);break;case"MigrateWusdcToUsdc":s=vo.fromData(i);break;default:throw new Error("not implemented")}return s.build({suiClient:e,account:n,network:o,scallop:this.scallop})}};import{TransactionType as Lp}from"@msafe/sui3-utils";import{TransactionType as we}from"@msafe/sui3-utils";import{normalizeStructTag as vt}from"@mysten/sui/utils";var Sc="https://suilend-assets.s3.us-east-2.amazonaws.com/springsui";import{TransactionType as wp}from"@msafe/sui3-utils";import{LENDING_MARKET_ID as Tp,LENDING_MARKET_TYPE as Cp,SuilendClient as ii}from"@suilend/sdk";import{TransactionType as Qt}from"@msafe/sui3-utils";import{fromB64 as wc,toHEX as Tc}from"@mysten/bcs";import{normalizeStructTag as ye}from"@mysten/sui/utils";import{MAX_U64 as Ht}from"@suilend/frontend-sui";import Cc from"bignumber.js";var la=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("this.transaction.getData().inputs",this.transaction.getData().inputs),this.transaction.getData().inputs}get commands(){return console.log("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=ye(t.MintEvent.parsedJson.coin_type.name),n=t.MintEvent.parsedJson.liquidity_amount;return console.log("Decoder.decodeDeposit",e,n),{txType:Qt.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=ye(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 Cc(Tc(wc(this.inputs[r].Pure.bytes)),16).toString(),s=i===Ht.toString();return console.log("decodeWithdraw - isMax:",s,"inputIndex:",r,"inputValue:",i,"MAX_U64.toString():",Ht.toString()),s&&(o=Ht.toString()),{txType:Qt.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=ye(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 Cc(Tc(wc(this.inputs[r].Pure.bytes)),16).toString(),s=i===Ht.toString();return console.log("decodeBorrow - isMax:",s,"inputIndex:",r,"inputValue:",i,"MAX_U64.toString():",Ht.toString()),s&&(o=Ht.toString()),{txType:Qt.Other,type:"borrow",intentionData:{coinType:n,value:o}}}decodeRepay(){let t={RepayEvent:this.simResult.events.find(o=>o.type.includes("lending_market::RepayEvent"))},e=ye(t.RepayEvent.parsedJson.coin_type.name),n=t.RepayEvent.parsedJson.liquidity_amount;return console.log("Decoder.decodeRepay",e,n),{txType:Qt.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=ye(o.parsedJson.coin_type.name),i=o.parsedJson.liquidity_amount;e[r]=`${+(e[r]??"0")+ +i}`}return console.log("Decoder.decodeClaimRewards",e),{txType:Qt.Other,type:"claim",intentionData:{value:e}}}decodeClaimAndDeposit(){return{txType:Qt.Other,type:"claimAndDeposit",intentionData:this.decodeClaim().intentionData}}};import{Transaction as dp}from"@mysten/sui/transactions";import lp from"sort-keys-recursive";var W=class{constructor(t){this.data=t}serialize(){return JSON.stringify(lp(this.data))}};var da=class a extends W{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 dp;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 bp}from"@mysten/sui/transactions";import{normalizeStructTag as up}from"@mysten/sui/utils";import{isSendPoints as pp}from"@suilend/frontend-sui";import{Side as Se}from"@suilend/sdk";import mp from"bignumber.js";var fp=(a,t)=>{let e={[Se.DEPOSIT]:[],[Se.BORROW]:[]};return a.lendingMarket.reserves.forEach(n=>{[Se.DEPOSIT,Se.BORROW].forEach(o=>{let r=o===Se.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:up(s.coinType.name),side:o})).filter(s=>!pp(s.rewardCoinType)&&!!i.rewards[Number(s.rewardIndex)]&&new mp(i.rewards[Number(s.rewardIndex)].earnedRewards.value.toString()).gt(0)))})}),Object.values(e).flat()},ua=fp;var pa=class a extends W{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 bp;return r.claimRewardsAndSendToUser(o.address,i.id,ua(r,s),c),c}static fromData(e){return console.log("ClaimIntention.fromData",e),new a(e)}};import{Transaction as gp}from"@mysten/sui/transactions";var ma=class a extends W{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 gp;return r.claimRewardsAndDeposit(o.address,i.id,ua(r,s),c),c}static fromData(e){return console.log("ClaimAndDepositIntention.fromData",e),new a(e)}};import{Transaction as hp}from"@mysten/sui/transactions";var fa=class a extends W{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 hp;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 yp}from"@mysten/sui/transactions";var ba=class a extends W{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 yp;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 Sp}from"@mysten/sui/transactions";var ga=class a extends W{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 Sp;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 ha=async(a,t)=>{let e=await ii.initialize(Tp,Cp,a),n=await ii.getObligationOwnerCaps(t.address,e.lendingMarket.$typeArgs,a),o=await Promise.all(n.map(r=>ii.getObligation(r.obligationId,e.lendingMarket.$typeArgs,a)));return{suilendClient:e,obligationOwnerCaps:n,obligations:o}},ya=class{application="Suilend";supportSDK="@mysten/sui";utils;async deserialize(t){let{transaction:e,suiClient:n,account:o}=t;this.utils||(this.utils=await ha(n,o));let r=await n.devInspectTransactionBlock({sender:o.address,transactionBlock:e});console.log("SuilendAppHelper.deserialize",r);let s=new la(e,r).decode();return{txType:wp.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 ha(r,i));let s;switch(n){case"deposit":s=fa.fromData(o);break;case"withdraw":s=ga.fromData(o);break;case"borrow":s=da.fromData(o);break;case"repay":s=ba.fromData(o);break;case"claim":s=pa.fromData(o);break;case"claimAndDeposit":s=ma.fromData(o);break;default:throw new Error("not implemented")}let c=window.localStorage.getItem("obligationId"),d=this.utils.obligations?.find(u=>u.id===c)??this.utils.obligations?.[0],l=this.utils.obligationOwnerCaps?.find(u=>u.obligationId===d?.id);return s.build({network:e,suiClient:r,account:i,suilendClient:this.utils.suilendClient,obligationOwnerCap:l,obligation:d})}};var si=async(a,t)=>{let e=await ha(a,t),n=await(await fetch(`${Sc}/liquid-staking-info-map.json`)).json();return{...e,LIQUID_STAKING_INFO_MAP:n}};var Sa=class{constructor(t,e){this.transaction=t;this.simResult=e}decode(){if(this.isStakeTransaction())return this.decodeStake();if(this.isStakeAndDepositTransaction())return this.decodeStakeAndDeposit();if(this.isConvertTransaction())return this.decodeConvert();if(this.isConvertAndDepositTransaction())return this.decodeConvertAndDeposit();if(this.isUnstakeTransaction())return this.decodeUnstake();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")}hasMintMoveCallCommands(){return!!this.getMoveCallCommand("mint")}hasRedeemMoveCallCommands(){return!!this.getMoveCallCommand("redeem")}isStakeTransaction(){return this.hasMintMoveCallCommands()&&!this.hasRedeemMoveCallCommands()&&!this.hasSuilendDepositTransactionMoveCallCommands()}isStakeAndDepositTransaction(){return this.hasMintMoveCallCommands()&&!this.hasRedeemMoveCallCommands()&&this.hasSuilendDepositTransactionMoveCallCommands()}isConvertTransaction(){return this.hasMintMoveCallCommands()&&this.hasRedeemMoveCallCommands()&&!this.hasSuilendDepositTransactionMoveCallCommands()}isConvertAndDepositTransaction(){return this.hasMintMoveCallCommands()&&this.hasRedeemMoveCallCommands()&&this.hasSuilendDepositTransactionMoveCallCommands()}isUnstakeTransaction(){return!this.hasMintMoveCallCommands()&&this.hasRedeemMoveCallCommands()&&!this.hasSuilendDepositTransactionMoveCallCommands()}decodeStake(){let t={MintEvent:this.simResult.events.find(o=>o.type.includes("liquid_staking::MintEvent"))},e=vt(t.MintEvent.parsedJson.event.typename.name),n=t.MintEvent.parsedJson.event.sui_amount_in;return console.log("Decoder.decodeStake",n),{txType:we.Other,type:"stake",intentionData:{amount:n,outCoinType:e}}}decodeStakeAndDeposit(){let t={MintEvent:this.simResult.events.find(o=>o.type.includes("liquid_staking::MintEvent"))},e=vt(t.MintEvent.parsedJson.event.typename.name),n=t.MintEvent.parsedJson.event.sui_amount_in;return console.log("Decoder.decodeStakeAndDeposit",n),{txType:we.Other,type:"stakeAndDeposit",intentionData:{amount:n,outCoinType:e}}}decodeConvert(){let t={RedeemEvent:this.simResult.events.find(r=>r.type.includes("liquid_staking::RedeemEvent")),MintEvent:this.simResult.events.find(r=>r.type.includes("liquid_staking::MintEvent"))},e=vt(t.RedeemEvent.parsedJson.event.typename.name),n=vt(t.MintEvent.parsedJson.event.typename.name),o=t.RedeemEvent.parsedJson.event.lst_amount_in;return console.log("Decoder.decodeConvert",o),{txType:we.Other,type:"convert",intentionData:{amount:o,inCoinType:e,outCoinType:n}}}decodeConvertAndDeposit(){let t={RedeemEvent:this.simResult.events.find(r=>r.type.includes("liquid_staking::RedeemEvent")),MintEvent:this.simResult.events.find(r=>r.type.includes("liquid_staking::MintEvent"))},e=vt(t.RedeemEvent.parsedJson.event.typename.name),n=vt(t.MintEvent.parsedJson.event.typename.name),o=t.RedeemEvent.parsedJson.event.lst_amount_in;return console.log("Decoder.decodeConvertAndDeposit",o),{txType:we.Other,type:"convertAndDeposit",intentionData:{amount:o,inCoinType:e,outCoinType:n}}}decodeUnstake(){let t={RedeemEvent:this.simResult.events.find(o=>o.type.includes("liquid_staking::RedeemEvent"))},e=vt(t.RedeemEvent.parsedJson.event.typename.name),n=t.RedeemEvent.parsedJson.event.lst_amount_in;return console.log("Decoder.decodeUnstake",n),{txType:we.Other,type:"unstake",intentionData:{amount:n,inCoinType:e}}}};import{Transaction as Dp}from"@mysten/sui/transactions";import{convertLstsAndSendToUser as xp,LstClient as Ic}from"@suilend/springsui-sdk";import kp from"sort-keys-recursive";var Q=class{constructor(t){this.data=t}serialize(){return JSON.stringify(kp(this.data))}};var wa=class a extends Q{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o,suilendClient:r,LIQUID_STAKING_INFO_MAP:i,obligationOwnerCap:s,obligation:c}=e;console.log("ConvertIntention.build",n,o,r,i,s,c);let d=await Ic.initialize(n,Object.values(i).find(p=>p.type===this.data.inCoinType)),l=await Ic.initialize(n,Object.values(i).find(p=>p.type===this.data.outCoinType)),u=new Dp;return xp(d,l,u,o.address,this.data.amount),u}static fromData(e){return console.log("ConvertIntention.fromData",e),new a(e)}};import{Transaction as vp}from"@mysten/sui/transactions";import{createObligationIfNoneExists as Ap,sendObligationToUser as Op}from"@suilend/sdk";import{convertLsts as Pp,LstClient as kc}from"@suilend/springsui-sdk";var Ta=class a extends Q{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o,suilendClient:r,LIQUID_STAKING_INFO_MAP:i,obligationOwnerCap:s,obligation:c}=e;console.log("ConvertAndDepositIntention.build",n,o,r,i,s,c);let d=await kc.initialize(n,Object.values(i).find(y=>y.type===this.data.inCoinType)),l=await kc.initialize(n,Object.values(i).find(y=>y.type===this.data.outCoinType)),u=new vp,{obligationOwnerCapId:p,didCreate:m}=Ap(r,u,s),b=Pp(d,l,u,o.address,this.data.amount);return r.deposit(b,this.data.outCoinType,p,u),m&&Op(p,o.address,u),u}static fromData(e){return console.log("ConvertAndDepositIntention.fromData",e),new a(e)}};import{Transaction as Rp}from"@mysten/sui/transactions";import{LstClient as _p}from"@suilend/springsui-sdk";var Ca=class a extends Q{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o,suilendClient:r,LIQUID_STAKING_INFO_MAP:i,obligationOwnerCap:s,obligation:c}=e;console.log("StakeIntention.build",n,o,r,i,s,c);let d=await _p.initialize(n,Object.values(i).find(u=>u.type===this.data.outCoinType)),l=new Rp;return d.mintAmountAndRebalanceAndSendToUser(l,o.address,this.data.amount),l}static fromData(e){return console.log("StakeIntention.fromData",e),new a(e)}};import{Transaction as Bp}from"@mysten/sui/transactions";import{createObligationIfNoneExists as Mp,sendObligationToUser as Ep}from"@suilend/sdk";import{LstClient as Np}from"@suilend/springsui-sdk";var Ia=class a extends Q{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o,suilendClient:r,LIQUID_STAKING_INFO_MAP:i,obligationOwnerCap:s,obligation:c}=e;console.log("StakeAndDepositIntention.build",n,o,r,i,s,c);let d=await Np.initialize(n,Object.values(i).find(b=>b.type===this.data.outCoinType)),l=new Bp,{obligationOwnerCapId:u,didCreate:p}=Mp(r,l,s),m=d.mintAmountAndRebalance(l,o.address,this.data.amount);return r.deposit(m,this.data.outCoinType,u,l),p&&Ep(u,o.address,l),l}static fromData(e){return console.log("StakeAndDepositIntention.fromData",e),new a(e)}};import{Transaction as jp}from"@mysten/sui/transactions";import{LstClient as Wp}from"@suilend/springsui-sdk";var ka=class a extends Q{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o,suilendClient:r,LIQUID_STAKING_INFO_MAP:i,obligationOwnerCap:s,obligation:c}=e;console.log("UnstakeIntention.build",n,o,r,i,s,c);let d=await Wp.initialize(n,Object.values(i).find(u=>u.type===this.data.inCoinType)),l=new jp;return d.redeemAmountAndSendToUser(l,o.address,this.data.amount),l}static fromData(e){return console.log("UnstakeIntention.fromData",e),new a(e)}};var Da=class{application="SpringSui";supportSDK="@mysten/sui";utils;async deserialize(t){let{transaction:e,suiClient:n,account:o}=t;this.utils||(this.utils=await si(n,o));let r=await n.devInspectTransactionBlock({sender:o.address,transactionBlock:e});console.log("SpringSuiAppHelper.deserialize",r);let s=new Sa(e,r).decode();return{txType:Lp.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 si(r,i));let s;switch(n){case"stake":s=Ca.fromData(o);break;case"stakeAndDeposit":s=Ia.fromData(o);break;case"convert":s=wa.fromData(o);break;case"convertAndDeposit":s=Ta.fromData(o);break;case"unstake":s=ka.fromData(o);break;default:throw new Error("not implemented")}return s.build({network:e,suiClient:r,account:i,suilendClient:this.utils.suilendClient,LIQUID_STAKING_INFO_MAP:this.utils.LIQUID_STAKING_INFO_MAP,obligationOwnerCap:this.utils.obligationOwnerCaps?.[0],obligation:this.utils.obligations?.[0]})}};import{TransactionType as $p}from"@msafe/sui3-utils";import{TransactionType as Dc}from"@msafe/sui3-utils";var xa=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:Dc.Other,type:"mint",intentionData:{amount:e}}}decodeRedeem(t){let{event:{lst_amount_in:e}}=t;return console.log("Decoder.decodeRedeem",e),{txType:Dc.Other,type:"redeem",intentionData:{amount:e}}}};import{mint as Fp}from"@alphafi/stsui-sdk";var va=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 Fp(o,{address:n.address})}static fromData(e){return console.log("MintIntention.fromData",e),new a(e)}};import{redeem as qp}from"@alphafi/stsui-sdk";var Aa=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 qp(o,{address:n.address})}static fromData(e){return console.log("RedeemIntention.fromData",e),new a(e)}};var Oa=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 xa(e,o).decode();return{txType:$p.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=va.fromData(t.intentionData);break;case"redeem":n=Aa.fromData(t.intentionData);break;default:throw new Error("build not implemented")}return n.build({account:e})}};import{TransactionType as dm}from"@msafe/sui3-utils";import{TurbosSdk as um}from"turbos-clmm-sdk";import{TransactionType as H}from"@msafe/sui3-utils";import{bcs as xc}from"@mysten/sui.js/bcs";import{normalizeStructTag as Vp,normalizeSuiAddress as Te}from"@mysten/sui.js/utils";import{BN as Qp}from"turbos-clmm-sdk";var z={PackageId:"0x02fe4933f4521250e55a15441096d1d4a38a7311195b0bca126fc0138c1f5a97",Claim:"0x0c822cec42f7ca703696b4232f1c47b348330c23580172a29aab465bc071d894",turbosCoinType:"0x5d1f47ea69bb0de31c313d7acf89b890dbb8991ea8e03c6c355171f84bb1ba4a::turbos::TURBOS"},J={PackageId:"0xdee9"};var Hp=(a,t,e,n)=>{if(a===1)switch(n.findIndex(i=>i===t)){case 0:return[!0,!0];case 1:return[!0,!1];case 2:return[!1,!0];case 3:return[!1,!1];default:throw new Error(`not target: ${t}`)}switch(e.findIndex(r=>r===t)){case 0:return[!0];case 1:return[!1];default:throw new Error(`not target: ${t}`)}},Pa=class{constructor(t,e,n){this.txb=t;this.turbosSdk=e;this.config=n}get transactions(){return this.txb.blockData.transactions}get swap1Layer(){return[`${this.config.PackageId}::swap_router::swap_a_b`,`${this.config.PackageId}::swap_router::swap_b_a`]}get swap2Layer(){return[`${this.config.PackageId}::swap_router::swap_a_b_b_c`,`${this.config.PackageId}::swap_router::swap_a_b_c_b`,`${this.config.PackageId}::swap_router::swap_b_a_b_c`,`${this.config.PackageId}::swap_router::swap_b_a_c_b`]}async decode(t){if(this.isSwapTransaction())return 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(`${z.PackageId}::claim::join`)}isPrixClaimTransaction(){return!!this.getMoveCallTransaction(`${z.PackageId}::claim::claim`)}isRemoveLiquidityTransaction(){return!!this.getMoveCallsTransaction([`${this.config.PackageId}::position_manager::decrease_liquidity`,`${this.config.PackageId}::position_manager::burn`])}isSwapExactBaseForQuoteTransaction(){return!!this.getMoveCallTransaction(`${J.PackageId}::clob_v2::swap_exact_base_for_quote`)}isSwapExactQuoteForBaseTransaction(){return!!this.getMoveCallTransaction(`${J.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=Hp(e,t.target,this.swap1Layer,this.swap2Layer),o=n.map((m,b)=>{let y=this.helper.decodeSharedObjectId(b),w=this.helper.decodeInputU128(4+b+e),D=this.turbosSdk.math.sqrtPriceX64ToTickIndex(new Qp(w.toString()));return{pool:y,a2b:m,nextTickIndex:D}}),r=n[0]||e===1?t.typeArguments[0]:t.typeArguments[1],i=e===1?t.typeArguments[4]:n[0]?t.typeArguments[1]:t.typeArguments[0],s=this.helper.decodeInputAddress(6+2*e),c=this.helper.decodeInputU64(7+2*e),d=this.helper.decodeInputBool(5+2*e),l=this.helper.decodeInputU64(2+e),u=this.helper.decodeInputU64(3+e),p=await this.turbosSdk.trade.computeSwapResultV2({pools:[{pool:o[0].pool,a2b:o[0].a2b,amountSpecified:l}],address:s,amountSpecifiedIsInput:d});return{txType:H.Other,type:"Swap",intentionData:{routes:o,coinTypeA:r,coinTypeB:i,address:s,amountA:d?l:u,amountB:d?u:l,amountSpecifiedIsInput:d,slippage:"0.1",deadline:c}}}decodeAddLiquidity(){console.log(this.helper,"decodeAddLiquidity this.helper");let t=this.helper.decodeSharedObjectId(0),e=this.helper.decodeInputAddress(12),n=this.helper.decodeInputU64(8),o=this.helper.decodeInputU64(9),r=this.helper.decodeInputU32(4),i=this.helper.decodeInputBool(5),s=this.helper.decodeInputU32(6),c=this.helper.decodeInputBool(7),d=this.helper.decodeInputU64(13);return{txType:H.Other,type:"AddLiquidity",intentionData:{pool:t,slippage:10,address:e,amountA:n,amountB:o,tickLower:i?-r:r,tickUpper:c?-s:s,deadline:d}}}decodeIncreaseLiquidity(t){console.log(this.helper,"decodeIncreaseLiquidity this.helper");let e=this.helper.decodeSharedObjectId(0),n=this.helper.decodeSharedObjectId(4),o=this.helper.decodeInputU64(5),r=this.helper.decodeInputU64(6),i=this.helper.decodeInputU64(9);return{txType: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)),d=this.collectFeeHelper.decodeInputU64(3)||0,l=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:d,collectAmountB:l,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 wt(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 wt(e,this.txb))}get collectFeeHelper(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target===`${this.config.PackageId}::position_manager::collect`);return new wt(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 wt(t,this.txb)}get swapExactBaseForQuoteHelper(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target===`${J.PackageId}::clob_v2::swap_exact_base_for_quote`);return new wt(t,this.txb)}get swapExactQuoteForBaseHelper(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target===`${J.PackageId}::clob_v2::swap_exact_quote_for_base`);return new wt(t,this.txb)}},wt=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 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 xc.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 xc.de(e,new Uint8Array(n))}typeArg(t){return Vp(this.moveCall.typeArguments[t])}shortTypeArg(t){return this.moveCall.typeArguments[t]}txArg(t){return this.moveCall.arguments[t]}};import{TurbosSdk as Gp}from"turbos-clmm-sdk";var Ra=class a extends h{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new Gp(e.network.replace("sui:",""),e.suiClient),{pool:o,address:r,amountA:i,amountB:s,slippage:c,tickLower:d,tickUpper:l,deadline:u,txb:p}=this.data;return n.pool.addLiquidity({pool:o,slippage:c,address:r,amountA:i,amountB:s,tickLower:d,tickUpper:l,deadline:u,txb:p})}static fromData(e){return new a(e)}};import{TurbosSdk as zp}from"turbos-clmm-sdk";var _a=class a extends h{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new zp(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 Jp}from"turbos-clmm-sdk";var Ba=class a extends h{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new Jp(e.network.replace("sui:",""),e.suiClient),{pool:o,address:r,nft:i,collectAmountA:s,collectAmountB:c,deadline:d,txb:l}=this.data;return n.pool.collectFee({pool:o,address:r,collectAmountA:s,collectAmountB:c,nft:i,deadline:d,txb:l})}static fromData(e){return new a(e)}};import{TurbosSdk as Yp}from"turbos-clmm-sdk";var Ma=class a extends h{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:d}=this.data;return n.pool.collectReward({pool:o,address:r,rewardAmounts:s,nft:i,deadline:c,txb:d})}static fromData(e){return new a(e)}};import{TurbosSdk as Xp}from"turbos-clmm-sdk";var Ea=class a extends h{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new Xp(e.network.replace("sui:",""),e.suiClient),{fee:o,address:r,tickLower:i,tickUpper:s,sqrtPrice:c,slippage:d,coinTypeA:l,coinTypeB:u,amountA:p,amountB:m,deadline:b,txb:y}=this.data;return n.pool.createPool({fee:o,amountA:p,amountB:m,address:r,tickLower:i,tickUpper:s,sqrtPrice:c,slippage:d,coinTypeA:l,coinTypeB:u,deadline:b,txb:y})}static fromData(e){return new a(e)}};import{TurbosSdk as Zp}from"turbos-clmm-sdk";var Na=class a extends h{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new Zp(e.network.replace("sui:",""),e.suiClient),{pool:o,address:r,amountA:i,amountB:s,slippage:c,nft:d,decreaseLiquidity:l,deadline:u,txb:p}=this.data;return n.pool.decreaseLiquidity({pool:o,slippage:c,address:r,amountA:i,amountB:s,nft:d,decreaseLiquidity:l,deadline:u,txb:p})}static fromData(e){return new a(e)}};import{TurbosSdk as tm}from"turbos-clmm-sdk";var ja=class a extends h{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new tm(e.network.replace("sui:",""),e.suiClient),{pool:o,address:r,amountA:i,amountB:s,slippage:c,nft:d,deadline:l,txb:u}=this.data;return n.pool.increaseLiquidity({pool:o,slippage:c,address:r,amountA:i,amountB:s,nft:d,deadline:l,txb:u})}static fromData(e){return new a(e)}};import{TransactionBlock as em}from"@mysten/sui.js/transactions";import{SUI_CLOCK_OBJECT_ID as nm}from"@mysten/sui.js/utils";var Wa=class a extends h{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new em;return n.moveCall({target:`${z.PackageId}::claim::claim`,typeArguments:[z.turbosCoinType],arguments:[n.object(z.Claim),n.object(nm)]}),n}static fromData(e){return new a(e)}};import{TransactionBlock as om}from"@mysten/sui.js/transactions";var La=class a extends h{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new om;return n.moveCall({target:`${z.PackageId}::claim::join`,typeArguments:[z.turbosCoinType],arguments:[n.object(z.Claim)]}),n}static fromData(e){return new a(e)}};import{TransactionBlock as am}from"@mysten/sui.js/transactions";import{TurbosSdk as rm}from"turbos-clmm-sdk";var Ua=class a extends h{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new rm(e.network.replace("sui:",""),e.suiClient),o=new am;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 im}from"turbos-clmm-sdk";var Fa=class a extends h{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){console.log(this.data,"this.data");let n=new im(e.network.replace("sui:",""),e.suiClient),{routes:o,coinTypeA:r,coinTypeB:i,address:s,amountA:c,amountB:d,slippage:l,amountSpecifiedIsInput:u,deadline:p,txb:m}=this.data;return n.trade.swap({routes:o,coinTypeA:r,coinTypeB:i,address:s,amountA:c,amountB:d,amountSpecifiedIsInput:u,slippage:l,deadline:p,txb:m})}static fromData(e){return new a(e)}};import{TurbosSdk as cm}from"turbos-clmm-sdk";import{TransactionBlock as vc}from"@mysten/sui.js/transactions";import{normalizeSuiObjectId as Ac}from"@mysten/sui.js/utils";import{unstable_getObjectId as sm}from"turbos-clmm-sdk";var Ce=class{constructor(t){this.turbosSdk=t}async getCoinsData(t,e,n){let o=[],r;do r=await this.turbosSdk.provider.getCoins({owner:t,coinType:e,cursor:r?.nextCursor}),o.push(...r.data);while(r.hasNextPage);let i=[],s=0;return o.sort((c,d)=>Number(d.balance)-Number(c.balance)).some(c=>s>=n?!0:(s+=Number(c.balance),i.push(c),!1)),i}splitAndMergeCoin(t,e,n){if(!t||t.length<1)return[void 0,void 0];if(this.isSuiCoinAddress(t[0].coinType)){let[i]=n.splitCoins(n.gas,[n.pure(e)]);return[i,void 0]}let o=n.object(t[0].coinObjectId);t.length>1&&n.mergeCoins(o,t.slice(1).map(i=>n.object(i.coinObjectId)));let[r]=n.splitCoins(o,[n.pure(e)]);return[r,o]}isSuiCoinAddress(t){return t.toLocaleLowerCase()==="0x2::sui::sui"}async IsAccountCap(t){let e=await this.turbosSdk.provider.getOwnedObjects({owner:t,options:{showContent:!0,showType:!0,showOwner:!0},filter:{StructType:`${J.PackageId}::custodian_v2::AccountCap`}});return e.data[0]?.data?sm(e.data[0].data):void 0}createAccount(t){let[e]=t.moveCall({typeArguments:[],target:`${J.PackageId}::clob_v2::create_account`,arguments:[]});return e}zero(t,e){return e.moveCall({typeArguments:[t],target:"0x2::coin::zero",arguments:[]})}};var Oc=89,Pc=1e6,Rc=async a=>{let{token1:t,token2:e,poolId:n,amountIn:o,currentAddress:r,turbosSdk:i}=a,s=new vc,c=new Ce(i),d=await c.getCoinsData(r,e,o),[l,u]=c.splitAndMergeCoin(d,o,s);if(!l)throw new Error(`Not enough balance: ${e}`);let p=await c.IsAccountCap(r),m=p?s.object(p):c.createAccount(s),[b,y,w]=s.moveCall({typeArguments:[t,e],target:`${J.PackageId}::clob_v2::swap_exact_quote_for_base`,arguments:[s.object(String(n)),s.pure(Oc),m,s.pure(o),s.object(Ac("0x6")),l]});return u&&s.transferObjects([u],s.pure(r)),s.transferObjects([b],s.pure(r)),s.transferObjects([y],s.pure(r)),p||s.transferObjects([m],s.pure(r)),s.setSenderIfNotSet(r),s.setGasBudget(Pc),s},_c=async a=>{let{token1:t,token2:e,poolId:n,amountIn:o,currentAddress:r,turbosSdk:i}=a,s=new vc,c=new Ce(i),d=await c.getCoinsData(r,t,o),[l,u]=c.splitAndMergeCoin(d,o,s);if(!l)throw new Error(`Not enough balance: ${t}`);let p=await c.IsAccountCap(r),m=p?s.object(p):c.createAccount(s),b=c.zero(e,s),[y,w,D]=s.moveCall({typeArguments:[t,e],target:`${J.PackageId}::clob_v2::swap_exact_base_for_quote`,arguments:[s.object(String(n)),s.pure(Oc),m,s.pure(o),l,b,s.object(Ac("0x6"))]});return u&&s.transferObjects([u],s.pure(r)),s.transferObjects([y],s.pure(r)),s.transferObjects([w],s.pure(r)),p||s.transferObjects([m],s.pure(r)),s.setSenderIfNotSet(r),s.setGasBudget(Pc),s};var qa=class a extends h{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new cm(e.network.replace("sui:",""),e.suiClient);return await _c({...this.data,turbosSdk:n,currentAddress:e.account.address})}static fromData(e){return new a(e)}};import{TurbosSdk as lm}from"turbos-clmm-sdk";var $a=class a extends h{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new lm(e.network.replace("sui:",""),e.suiClient);return await Rc({...this.data,turbosSdk:n,currentAddress:e.account.address})}static fromData(e){return new a(e)}};var Ka=class{application="turbos";supportSDK="@mysten/sui.js";async deserialize(t){let e=new um(t.network.replace("sui:",""),t.suiClient),n=await e.contract.getConfig(),{transactionBlock:o,account:r}=t;console.log(t,"input");let s=await new Pa(o,e,n).decode(r.address);return{txType:dm.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=Ea.fromData(t.intentionData);break;case"AddLiquidity":r=Ra.fromData(t.intentionData);break;case"IncreaseLiquidity":r=ja.fromData(t.intentionData);break;case"DecreaseLiquidity":r=Na.fromData(t.intentionData);break;case"RemoveLiquidity":r=Ua.fromData(t.intentionData);break;case"CollectFee":r=Ba.fromData(t.intentionData);break;case"CollectReward":r=Ma.fromData(t.intentionData);break;case"Burn":r=_a.fromData(t.intentionData);break;case"Swap":r=Fa.fromData(t.intentionData);break;case"PrixJoin":r=La.fromData(t.intentionData);break;case"PrixClaim":r=Wa.fromData(t.intentionData);break;case"SwapExactBaseForQuote":r=qa.fromData(t.intentionData);break;case"SwapExactQuoteForBase":r=$a.fromData(t.intentionData);break;default:throw new Error("not implemented")}return r.build({suiClient:e,account:n,network:o})}};import{TransactionType as ym}from"@msafe/sui3-utils";import{TransactionType as ci}from"@msafe/sui3-utils";import{bcs as Bc}from"@mysten/sui.js/bcs";import{normalizeStructTag as fm,normalizeSuiAddress as Ie}from"@mysten/sui.js/utils";var pm={packageId:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55",poolObjectId:"0x7fa2faa111b8c65bea48a23049bfd81ca8f971a262d981dcd9a17c3825cb5baf",metadataObjectId:"0x680cd26af32b2bde8d3361e804c53ec1d1cfe24c7f039eb7f549e8dfde389a60",systemStateObjectId:"0x0000000000000000000000000000000000000000000000000000000000000005",certType:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55::cert::CERT",gasBudget:5e7},v=pm;var Va=class{constructor(t){this.txb=t}decode(){if(console.log("txb",this.txb),this.isStakeTransaction())return this.decodeStake();if(this.isUnStakeTransaction())return this.decodeUnStake();if(this.isClaimTicketTransaction())return this.decodeClaimTicket();throw new Error("Unknown transaction type")}get transactions(){return this.txb.blockData.transactions}getMoveCallTransaction(t){return this.transactions.find(e=>e.kind==="MoveCall"&&e.target===t)}isStakeTransaction(){return!!this.getMoveCallTransaction(`${v.packageId}::native_pool::stake`)}isUnStakeTransaction(){return!!this.getMoveCallTransaction(`${v.packageId}::native_pool::unstake`)}isClaimTicketTransaction(){return!!this.getMoveCallTransaction(`${v.packageId}::native_pool::burn_ticket`)}decodeStake(){let t=this.transactions[0].amounts[0].value.toNumber();return{txType:ci.Other,type:"Stake",intentionData:{amount:t}}}decodeUnStake(){let e=this.transactions.find(n=>n.kind==="SplitCoins").amounts[0].value.toNumber();return{txType:ci.Other,type:"UnStake",intentionData:{amount:e}}}decodeClaimTicket(){let t=this.helper.decodeOwnedObjectId(2);return console.log(t),{txType:ci.Other,type:"ClaimTicket",intentionData:{ticketId:t}}}get helper(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(v.packageId));return new li(t,this.txb)}},li=class a{constructor(t,e){this.moveCall=t;this.txb=e}decodeSharedObjectId(t){let e=this.getInputParam(t);return a.getSharedObjectId(e)}decodeOwnedObjectId(t){let e=this.getInputParam(t);return a.getOwnedObjectId(e)}decodeInputU64(t){let e=this.decodePureArg(t,"u64");return Number(e)}decodeInputU8(t){let e=this.decodePureArg(t,"u8");return Number(e)}decodeInputAddress(t){let e=this.decodePureArg(t,"address");return Ie(e)}decodeInputString(t){return this.decodePureArg(t,"string")}decodeInputBool(t){return this.decodePureArg(t,"bool")}decodePureArg(t,e){let n=this.getInputParam(t);return a.getPureInputValue(n,e)}getInputParam(t){let e=this.moveCall.arguments[t];if(e.kind!=="Input")throw new Error("not input type");return this.txb.blockData.inputs[e.index]}static getPureInputValue(t,e){if(t.type!=="pure")throw new Error("not pure argument");if(typeof t.value=="object"&&"Pure"in t.value){let n=t.value.Pure;return Bc.de(e,new Uint8Array(n))}return t.value}static getOwnedObjectId(t){if(t.type!=="object")throw new Error(`not object argument: ${JSON.stringify(t)}`);if(typeof t.value=="object"){if(!("Object"in t.value)||!("ImmOrOwned"in t.value.Object))throw new Error("not ImmOrOwned");return Ie(t.value.Object.ImmOrOwned.objectId)}return Ie(t.value)}static getSharedObjectId(t){if(t.type!=="object")throw new Error(`not object argument: ${JSON.stringify(t)}`);if(typeof t.value!="object")return Ie(t.value);if(!("Object"in t.value)||!("Shared"in t.value.Object))throw new Error("not Shared");return Ie(t.value.Object.Shared.objectId)}static getPureInput(t,e){if(t.type!=="pure")throw new Error("not pure argument");if(typeof t.value!="object")return t.value;if(!("Pure"in t.value))throw new Error("Pure not in value");let n=t.value.Pure;return Bc.de(e,new Uint8Array(n))}typeArg(t){return fm(this.moveCall.typeArguments[t])}txArg(t){return this.moveCall.arguments[t]}};import{TransactionBlock as bm}from"@mysten/sui.js/transactions";var Qa=class a extends h{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){console.log(e);let n=new bm,{ticketId:o}=this.data;return n.moveCall({target:`${v.packageId}::native_pool::burn_ticket`,arguments:[n.object(v.poolObjectId),n.object(v.systemStateObjectId),n.object(o)]}),n}static fromData(e){return new a(e)}};import{TransactionBlock as gm}from"@mysten/sui.js/transactions";var Ha=class a extends h{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){console.log(e);let n=new gm,{amount:o}=this.data,[r]=n.splitCoins(n.gas,[n.pure(o)]);return n.moveCall({target:`${v.packageId}::native_pool::stake`,arguments:[n.object(v.poolObjectId),n.object(v.metadataObjectId),n.object(v.systemStateObjectId),r]}),n}static fromData(e){return new a(e)}};import{TransactionBlock as hm}from"@mysten/sui.js/transactions";var Ga=class a extends h{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){console.log(e);let n=new hm,{amount:o}=this.data,r=(await e.suiClient.getAllCoins({owner:e.account.address,limit:100})).data,[i,...s]=r.filter(l=>l.coinType.split("::")[0]===v.certType.split("::")[0]),c=n.object(i.coinObjectId);s.length&&n.mergeCoins(c,s.map(l=>n.object(l.coinObjectId)));let d=n.splitCoins(n.object(i.coinObjectId),[n.pure(o)]);return n.moveCall({target:`${v.packageId}::native_pool::unstake`,arguments:[n.object(v.poolObjectId),n.object(v.metadataObjectId),n.object(v.systemStateObjectId),d]}),n}static fromData(e){return new a(e)}};var za=class{application="volo";supportSDK="@mysten/sui.js";async deserialize(t){let{transactionBlock:e}=t,o=new Va(e).decode();return{txType:ym.Other,txSubType:o.type,intentionData:o.intentionData}}async build(t){let{suiClient:e,account:n}=t,o;switch(t.txSubType){case"Stake":o=Ha.fromData(t.intentionData);break;case"UnStake":o=Ga.fromData(t.intentionData);break;case"ClaimTicket":o=Qa.fromData(t.intentionData);break;default:throw new Error("not implemented")}return o.build({suiClient:e,account:n})}};import{TransactionType as Om}from"@msafe/sui3-utils";import{asIntN as Mc}from"@cetusprotocol/cetus-sui-clmm-sdk";import{TransactionType as At}from"@msafe/sui3-utils";import{fromB64 as ke}from"@mysten/bcs";import{bcs as De}from"@mysten/sui/bcs";var Ja=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:At.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:At.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:At.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:At.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:At.Other,type:"CollectRewards",intentionData:{pool:t[0].pool,position:t[0].position,collectRewardTokens:t.map(e=>e.rewardCoinType)}}}decodeCollectFeeTx(){return{txType:At.Other,type:"CollectFee",intentionData:this.getFeeCallData()}}decodeCollectRewardsAndFeeTx(){let t=this.getFeeCallData();return{txType:At.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(De.u32().parse(Uint8Array.from(ke(this.inputs[t].Pure.bytes))))}getU64(t){return De.u64().parse(Uint8Array.from(ke(this.inputs[t].Pure.bytes)))}getU128(t){return De.u128().parse(Uint8Array.from(ke(this.inputs[t].Pure.bytes)))}getBoolean(t){return De.bool().parse(Uint8Array.from(ke(this.inputs[t].Pure.bytes)))}getAddress(t){return De.Address.parse(Uint8Array.from(ke(this.inputs[t].Pure.bytes)))}getTypeArguments(t){return t.MoveCall.typeArguments||[]}getInputIndex(t,e){return t.MoveCall.arguments[e].Input}};import{TransactionType as Cm}from"@msafe/sui3-utils";import{BN as Ot,ClmmPoolUtil as Tm}from"@firefly-exchange/library-sui";import{SuiClient as Sm}from"@firefly-exchange/library-sui";import{OnChainCalls as wm}from"@firefly-exchange/library-sui/dist/src/spot";var Ec={rpc:"https://fullnode.mainnet.sui.io/",objects:{GlobalConfig:"0x03db251ba509a8d5d8777b6338836082335d93eecbdd09a11e190a1cff51c352",BasePackage:"0x3492c874c1e3b3e2984e8c41b589e642d4d0a5d6459e5a9cfc2d52fd7c89c267",CurrentPackage:"0x6c796c3ab3421a68158e0df18e4657b2827b1f8fed5ed4b82dba9c935988711b"}},Ct=(a,t)=>{if(a!=="sui:mainnet")throw new Error("Bluefin spot protocol is only available on sui::mainnet");let e=new Sm({url:Ec.rpc});return new wm(e,Ec.objects,{address:t.address,isUIWallet:!1})};var B=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 Ot(t.liquidity),tokenMaxA:new Ot(t.maxAmountTokenA),tokenMaxB:new Ot(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{...Tm.estLiquidityAndCoinAmountFromOneAmounts(e.lowerTick,e.upperTick,new Ot(e.tokenAmount),e.isTokenAFixed,!0,0,new Ot(t.current_sqrt_price)),tokenMaxA:new Ot(e.maxAmountTokenA),tokenMaxB:new Ot(e.maxAmountTokenB)}}};var Ya=class a extends f{constructor(e){super(e);this.data=e}txType=Cm.Other;txSubType="ClosePosition";async build(e){let{account:n,network:o}=e;return console.log(this.data),B.closePosition(this.data,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Im}from"@msafe/sui3-utils";var Xa=class a extends f{constructor(e){super(e);this.data=e}txType=Im.Other;txSubType="CollectFee";async build(e){let{account:n,network:o}=e;return console.log(this.data),B.collectFee(this.data,n,o)}static fromData(e){return new a(e)}};import{TransactionType as km}from"@msafe/sui3-utils";var Za=class a extends f{constructor(e){super(e);this.data=e}txType=km.Other;txSubType="CollectRewards";async build(e){let{account:n,network:o}=e;return console.log(this.data),B.collectRewards(this.data,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Dm}from"@msafe/sui3-utils";var tr=class a extends f{constructor(e){super(e);this.data=e}txType=Dm.Other;txSubType="CollectRewardsAndFee";async build(e){let{account:n,network:o}=e;return console.log(this.data),B.collectRewardsAndFee(this.data,n,o)}static fromData(e){return new a(e)}};import{TransactionType as xm}from"@msafe/sui3-utils";var er=class a extends f{constructor(e){super(e);this.data=e}txType=xm.Other;txSubType="OpenPosition";async build(e){let{account:n,network:o}=e;return console.log(this.data),B.OpenPosition(this.data,n,o)}static fromData(e){return new a(e)}};import{TransactionType as vm}from"@msafe/sui3-utils";var nr=class a extends f{constructor(e){super(e);this.data=e}txType=vm.Other;txSubType="ProvideLiquidity";async build(e){let{account:n,network:o}=e;return console.log(this.data),B.provideLiquidity(this.data,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Am}from"@msafe/sui3-utils";var or=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),B.removeLiquidity(this.data,n,o)}static fromData(e){return new a(e)}};var ar=class{application="bluefin";supportSDK="@mysten/sui";async deserialize(t){console.log("Bluefin helper deserialize input: ",t);let{transaction:e}=t,o=new Ja(e).decode();return{txType:Om.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=er.fromData(t.intentionData);break;case"ProvideLiquidity":r=nr.fromData(t.intentionData);break;case"RemoveLiquidity":r=or.fromData(t.intentionData);break;case"ClosePosition":r=Ya.fromData(t.intentionData);break;case"CollectFee":r=Xa.fromData(t.intentionData);break;case"CollectRewards":r=Za.fromData(t.intentionData);break;case"CollectRewardsAndFee":r=tr.fromData(t.intentionData);break;default:throw new Error("not implemented")}return r.build({suiClient:e,account:n,network:o})}};import{TransactionType as Lm}from"@msafe/sui3-utils";import{KriyaSDK as Pm}from"kriya-dev-sdk";var rr=class a extends f{constructor(e){super(e);this.data=e}txType;txSubType;async build(){let e=new Pm,{params:n}=this.data;return e.Amm.getTxbAddLiquidity(n)}static fromData(e){return new a(e)}};import{KriyaSDK as Rm}from"kriya-dev-sdk";var ir=class a extends f{constructor(e){super(e);this.data=e}txType;txSubType;async build(){let e=new Rm,{params:n}=this.data;return e.Amm.getTxbAddLiquiditySingleSided(n)}static fromData(e){return new a(e)}};import{KriyaSDK as _m}from"kriya-dev-sdk";var sr=class a extends f{constructor(e){super(e);this.data=e}txType;txSubType;async build(){let e=new _m,{params:n}=this.data;return e.Amm.getTxbClaimRewards(n)}static fromData(e){return new a(e)}};import{KriyaSDK as Bm}from"kriya-dev-sdk";var cr=class a extends f{constructor(e){super(e);this.data=e}txType;txSubType;async build(){let e=new Bm,{params:n}=this.data;return e.Amm.getTxbRemoveLiquidity(n)}static fromData(e){return new a(e)}};import{KriyaSDK as Mm}from"kriya-dev-sdk";var lr=class a extends f{constructor(e){super(e);this.data=e}txType;txSubType;async build(){let e=new Mm,{params:n}=this.data;return e.Clmm.getTxbAddLiquiditySingleSided(n)}static fromData(e){return new a(e)}};import{KriyaSDK as Em}from"kriya-dev-sdk";var dr=class a extends f{constructor(e){super(e);this.data=e}txType;txSubType;async build(){let e=new Em,{params:n}=this.data;return e.Clmm.getTxbAddLiquidity(n)}static fromData(e){return new a(e)}};import{KriyaSDK as Nm}from"kriya-dev-sdk";var ur=class a extends f{constructor(e){super(e);this.data=e}txType;txSubType;async build(){let e=new Nm,{params:n}=this.data;return e.Clmm.getTxbClaimMayaRewards(n)}static fromData(e){return new a(e)}};import{KriyaSDK as jm}from"kriya-dev-sdk";var pr=class a extends f{constructor(e){super(e);this.data=e}txType;txSubType;async build(){let e=new jm,{params:n}=this.data;return e.Clmm.getTxbClaimRewards(n)}static fromData(e){return new a(e)}};import{KriyaSDK as Wm}from"kriya-dev-sdk";var mr=class a extends f{constructor(e){super(e);this.data=e}txType;txSubType;async build(){let e=new Wm,{params:n}=this.data;return e.Clmm.getTxbRemoveLiquidity(n)}static fromData(e){return new a(e)}};var fr=class{application="kriya";supportSDK="@mysten/sui";async deserialize(t){let{appContext:e}=t;return{txType:Lm.Other,txSubType:e.action,intentionData:e}}async build(t){let e;switch(t.txSubType){case"AddLiquidity":e=rr.fromData(t.intentionData);break;case"AddLiquiditySingleSided":e=ir.fromData(t.intentionData);break;case"RemoveLiquidity":e=cr.fromData(t.intentionData);break;case"ClaimRewards":e=sr.fromData(t.intentionData);break;case"ClaimRewardsV3":e=pr.fromData(t.intentionData);break;case"ClaimV3MayaRewards":e=ur.fromData(t.intentionData);break;case"AddLiquidityV3":e=dr.fromData(t.intentionData);break;case"AddLiquiditySingleSideV3":e=lr.fromData(t.intentionData);break;case"RemoveLiquidityV3":e=mr.fromData(t.intentionData);break;default:throw new Error("not implemented")}return e.build()}};var NB=mo.fromHelpers([new Xn,new co,new zn,new lo,new In,new Ka,new fr,new ca,new za,new Xe,new ya,new Da,new Me,new ar,new Oa]);export{NB as appHelpers};
|
|
1
|
+
var al=Object.defineProperty;var wi=(a,t)=>{for(var e in t)al(a,e,{get:t[e],enumerable:!0})};import{TransactionType as bl}from"@msafe/sui3-utils";import{coinsList as il,poolIdPoolNameMap as sl,poolInfo as Ci,singleAssetPoolCoinMap as cl}from"@alphafi/alphafi-sdk";import{TransactionType as Jt}from"@msafe/sui3-utils";import{bcs as Ae,fromB64 as Pe}from"@mysten/bcs";var Oe=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=sl[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&&Ci[e].assetTypes.length===2}isSingleAssetDepositEvent(t,e){return t.event_type===0&&Ci[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{bytes:e}=t.Pure,n;return e.length===12?n=Ae.u64().parse(Pe(e)):e.length===24?n=Ae.u128().parse(Pe(e)):e.length===44?n=Ae.u256().parse(Pe(e)):n=Ae.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:Jt.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{coin:r}=cl[t],{expo:i}=il[r];n=Math.floor(Number(n)/10**(9-i)).toString()}return{txType:Jt.Other,type:"depositSingleAsset",intentionData:{poolName:t,amount:n}}}decodeWithdraw(t){let e=this.extractXTokensAmount();return console.log("Decoder.decodeWithdraw",e),{txType:Jt.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:Jt.Other,type:"withdrawAlpha",intentionData:{withdrawFromLocked:Number(n)>0,xTokensAmount:e}}}decodeClaimReward(){return{txType:Jt.Other,type:"claimReward",intentionData:{}}}};import{claimRewardTxb as dl}from"@alphafi/alphafi-sdk";import ll from"sort-keys-recursive";var m=class{constructor(t){this.data=t}serialize(){return JSON.stringify(ll(this.data))}};var Re=class a extends m{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{account:n}=e;return await dl(n.address)}static fromData(e){return new a(e)}};import{depositDoubleAssetTxb as ul}from"@alphafi/alphafi-sdk";var _e=class a extends m{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 ul(o,n.address,r,i)}static fromData(e){return console.log("DepositDoubleAssetIntention.fromData",e),new a(e)}};import{depositSingleAssetTxb as pl}from"@alphafi/alphafi-sdk";var Be=class a extends m{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{account:n}=e,{poolName:o,amount:r}=this.data;return await pl(o,n.address,r)}static fromData(e){return console.log("DepositSingleAssetIntention.fromData",e),new a(e)}};import{withdrawTxb as ml}from"@alphafi/alphafi-sdk";var Me=class a extends m{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{account:n}=e,{poolName:o,xTokensAmount:r}=this.data;return await ml(r,o,n.address)}static fromData(e){return console.log("WithdrawIntention.fromData",e),new a(e)}};import{withdrawAlphaTxb as fl}from"@alphafi/alphafi-sdk";var Ee=class a extends m{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{account:n}=e,{withdrawFromLocked:o,xTokensAmount:r}=this.data;return await fl(r,o,n.address)}static fromData(e){return console.log("WithdrawAlphaIntention.fromData",e),new a(e)}};var Ne=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 Oe(e,r).decode();return{txType:bl.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=Be.fromData(t.intentionData);break;case"depositDoubleAsset":n=_e.fromData(t.intentionData);break;case"withdraw":n=Me.fromData(t.intentionData);break;case"withdrawAlpha":n=Ee.fromData(t.intentionData);break;case"claimReward":n=Re.fromData(t.intentionData);break;default:throw new Error("not implemented")}return n.build({account:e})}};import{TransactionType as Wl}from"@msafe/sui3-utils";import{TransactionType as F}from"@msafe/sui3-utils";import{bcs as xr}from"@mysten/sui/bcs";import{SBUCK_FOUNTAIN_PACKAGE_ID as vr}from"bucket-protocol-sdk";var je=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(vr,"fountain_core","stake")}isSBUCKUnstakeTransaction(){return!!this.getMoveCallPackageModuleCommand(vr,"fountain_core","force_unstake")}isSBUCKClaimTransaction(){return!!this.getMoveCallPackageModuleCommand(vr,"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,e=!1):([t]=this.getMoveCallCommand("discharge_reservoir").MoveCall.typeArguments,e=!0),console.log("Decoder.decodePsm",t,n,e),{txType:F.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;let c=s.arguments[1];c.$kind==="Input"&&(e=this.getPureInputU64(c.Input));let d=s.arguments[3];if(d.$kind==="Input"){let l=this.getPureAddresses(d.Input);l.length===1&&([n]=l)}}else if(this.getMoveCallCommand("high_borrow")){let s=this.getMoveCallCommand("high_borrow").MoveCall;[t]=s.typeArguments;let c=s.arguments[4];c.$kind==="Input"&&(e=this.getPureInputU64(c.Input));let d=s.arguments[5];if(d.$kind==="Input"){let l=this.getPureAddresses(d.Input);l.length===1&&([n]=l)}}else if(this.getMoveCallCommand("high_borrow_with_strap")){let s=this.getMoveCallCommand("high_borrow_with_strap").MoveCall;[t]=s.typeArguments;let c=s.arguments[5];c.$kind==="Input"&&(e=this.getPureInputU64(c.Input));let d=s.arguments[6];if(d.$kind==="Input"){let l=this.getPureAddresses(d.Input);l.length===1&&([n]=l)}}return{txType:F.Other,type:"borrow",intentionData:{collateralType:t,collateralAmount:r,borrowAmount:e,insertionPlace:n,strapId:o}}}decodeRepay(){let t="",e="0",n="0",r,i=this.getStrapId();if(this.getMoveCallCommand("fully_repay"))[t]=this.getMoveCallCommand("fully_repay").MoveCall.typeArguments;else if(this.getMoveCallCommand("fully_repay_with_strap"))[t]=this.getMoveCallCommand("fully_repay_with_strap").MoveCall.typeArguments;else if(this.getMoveCallCommand("repay_and_withdraw")){let s=this.getMoveCallCommand("repay_and_withdraw").MoveCall;[t]=s.typeArguments;let c=s.arguments[4];c.$kind==="Input"&&(n=this.getPureInputU64(c.Input));let d=s.arguments[5];if(d.$kind==="Input"){let u=this.getPureAddresses(d.Input);u.length===1&&([r]=u)}let l=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];l.$kind==="Input"&&(e=this.getPureInputU64(l.Input))}else if(this.getMoveCallCommand("repay_and_withdraw_with_strap")){let s=this.getMoveCallCommand("repay_and_withdraw_with_strap").MoveCall;[t]=s.typeArguments;let c=s.arguments[5];c.$kind==="Input"&&(n=this.getPureInputU64(c.Input));let d=s.arguments[6];if(d.$kind==="Input"){let u=this.getPureAddresses(d.Input);u.length===1&&([r]=u)}let l=this.getSplitCoinsCommands()[0].SplitCoins.amounts[0];l.$kind==="Input"&&(e=this.getPureInputU64(l.Input))}return{txType:F.Other,type:"repay",intentionData:{collateralType:t,repayAmount:e,withdrawAmount:n,isSurplus:!1,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;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)}}else if(this.getMoveCallCommand("withdraw")){let r=this.getMoveCallCommand("withdraw").MoveCall;[t]=r.typeArguments;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)}}return{txType:F.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),{txType:F.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:F.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=0;s<o.length;s++){let c=o[s];n.push("")}else{let s=this.getMoveCallModuleCommands("fountain_core","force_unstake");for(let c=0;c<s.length;c++){let l=s[c].MoveCall.arguments[2];if(l.$kind==="Input"){let{objectId:u}=this.inputs[l.Input].UnresolvedObject;n.push(u)}}}let r=this.isSBUCKWithdrawTransaction(),i={stakeProofs:n,amount:t,isStake:e,toBuck:r};return console.log("Decoder.decodeSBUCKUnstake",i),{txType:F.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:F.Other,type:"sbuck-withdraw",intentionData:{amount:t}}}decodeSBUCKClaim(){let t=[],e=this.getMoveCallModuleCommands("fountain_core","claim");for(let n=0;n<e.length;n++){let r=e[n].MoveCall.arguments[2];if(r.$kind==="Input"){let{objectId:i}=this.inputs[r.Input].UnresolvedObject;t.push(i)}}return console.log("Decoder.decodeSBUCKClaim",t),{txType:F.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:F.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:F.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:F.Other,type:"tank-claim",intentionData:{coinType:e}}}decodeLockedClaim(){let t="",e=0,n=this.getMoveCallModuleCommands("proof_rule","claim");for(let r=0;r<n.length;r++)[t]=n[r].MoveCall.typeArguments,e++;let o=this.getMoveCallModuleCommands("lst_proof_rule","claim");for(let r=0;r<o.length;r++)[t]=o[r].MoveCall.typeArguments,e++;return console.log("Decoder.decodeLockedClaim",t,e),{txType:F.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 xr.U64.fromBase64(e.Pure.bytes)}getPureAddresses(t){let e=this.inputs[t];if(e.$kind!=="Pure")throw new Error("not pure argument");return xr.vector(xr.Address).fromBase64(e.Pure.bytes)}};import{TransactionType as Sl}from"@msafe/sui3-utils";import{Transaction as hl}from"@mysten/sui/transactions";import{buildPsmTx as yl}from"bucket-protocol-sdk";import{BucketClient as gl}from"bucket-protocol-sdk";var O=(a,t)=>{let e=a==="sui:mainnet"?"mainnet":"testnet";return new gl(e,t.address)};var Ii=async(a,t,e)=>{let{coinType:n,amount:o,buckToCoin:r}=a,i=new hl,s=O(e,t);return await yl(s,i,n,o,r,t.address),i};var We=class a extends m{constructor(e){super(e);this.data=e}txType=Sl.Other;txSubType="psm";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 kl}from"@msafe/sui3-utils";import{Transaction as Le}from"@mysten/sui/transactions";import{buildBorrowTx as Tl,buildCloseTx as wl,buildRepayTx as Cl,buildWithdrawTx as Il}from"bucket-protocol-sdk";var ki=async(a,t,e)=>{let{collateralType:n,collateralAmount:o,borrowAmount:r,insertionPlace:i,strapId:s}=a,c=new Le,d=O(e,t);return await Tl(d,c,n,o,r,t.address,i,s),c},Di=async(a,t,e)=>{let{collateralType:n,withdrawAmount:o,insertionPlace:r,strapId:i}=a,s=new Le,c=O(e,t);return await Il(c,s,n,o,t.address,r,i),s},xi=async(a,t,e)=>{let{collateralType:n,repayAmount:o,withdrawAmount:r,isSurplus:i,insertionPlace:s,strapId:c}=a,d=new Le,l=O(e,t);return await Cl(l,d,n,o,r,t.address,i,s,c),d},vi=async(a,t,e)=>{let{collateralType:n,recipient:o,strapId:r}=a,i=new Le,s=O(e,t);return await wl(s,i,n,o,r),i};var Ue=class a extends m{constructor(e){super(e);this.data=e}txType=kl.Other;txSubType="borrow";async build(e){let{account:n,network:o}=e;return await ki(this.data,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Dl}from"@msafe/sui3-utils";var Fe=class a extends m{constructor(e){super(e);this.data=e}txType=Dl.Other;txSubType="repay";async build(e){let{account:n,network:o}=e;return await xi(this.data,n,o)}static fromData(e){return new a(e)}};import{TransactionType as xl}from"@msafe/sui3-utils";var qe=class a extends m{constructor(e){super(e);this.data=e}txType=xl.Other;txSubType="withdraw";async build(e){let{account:n,network:o}=e;return await Di(this.data,n,o)}static fromData(e){return new a(e)}};import{TransactionType as vl}from"@msafe/sui3-utils";var $e=class a extends m{constructor(e){super(e);this.data=e}txType=vl.Other;txSubType="close";async build(e){let{account:n,network:o}=e;return await vi(this.data,n,o)}static fromData(e){return new a(e)}};import{TransactionType as ze}from"@msafe/sui3-utils";import{Transaction as Ke}from"@mysten/sui/transactions";import{buildSBUCKClaimTx as Al,buildSBUCKDepositTx as Pl,buildSBUCKUnstakeTx as Ol,buildSBUCKWithdrawTx as Rl}from"bucket-protocol-sdk";var Ai=async(a,t,e)=>{let{coinType:n,amount:o,isStake:r}=a,i=new Ke,s=O(e,t);return await Pl(s,i,n,o,t.address,r),i},Pi=async(a,t,e)=>{let{stakeProofs:n,amount:o,isStake:r,toBuck:i}=a,s=new Ke,c=O(e,t);return await Ol(c,s,n,o,t.address,r,i),s},Oi=async(a,t,e)=>{let{amount:n}=a,o=new Ke,r=O(e,t);return await Rl(r,o,n,t.address),o},Ri=async(a,t,e)=>{let{stakeProofs:n}=a,o=new Ke,r=O(e,t);return await Al(r,o,n,t.address),o};var Ve=class a extends m{constructor(e){super(e);this.data=e}txType=ze.Other;txSubType="sbuck-deposit";async build(e){let{account:n,network:o}=e;return await Ai(this.data,n,o)}static fromData(e){return new a(e)}},Qe=class a extends m{constructor(e){super(e);this.data=e}txType=ze.Other;txSubType="sbuck-unstake";async build(e){let{account:n,network:o}=e;return await Pi(this.data,n,o)}static fromData(e){return new a(e)}},He=class a extends m{constructor(e){super(e);this.data=e}txType=ze.Other;txSubType="sbuck-withdraw";async build(e){let{account:n,network:o}=e;return await Oi(this.data,n,o)}static fromData(e){return new a(e)}},Ge=class a extends m{constructor(e){super(e);this.data=e}txType=ze.Other;txSubType="sbuck-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 Pr}from"@msafe/sui3-utils";import{Transaction as Ar}from"@mysten/sui/transactions";import{buildTankClaimTx as _l,buildTankDepositTx as Bl,buildTankWithdrawTx as Ml}from"bucket-protocol-sdk";var _i=async(a,t,e)=>{let{coinType:n,amount:o}=a,r=new Ar,i=O(e,t);return await Bl(i,r,n,o,t.address),r},Bi=async(a,t,e)=>{let{coinType:n,amount:o}=a,r=new Ar,i=O(e,t);return await Ml(i,r,n,o,t.address),r},Mi=async(a,t,e)=>{let{coinType:n}=a,o=new Ar,r=O(e,t);return await _l(r,o,n,t.address),o};import{Transaction as El}from"@mysten/sui/transactions";import{buildLockedClaimTx as Nl}from"bucket-protocol-sdk";var Ei=async(a,t,e)=>{let{coinType:n,proofCount:o}=a,r=new El,i=O(e,t);return await Nl(i,r,n,o,t.address),r};var Je=class a extends m{constructor(e){super(e);this.data=e}txType=Pr.Other;txSubType="tank-deposit";async build(e){let{account:n,network:o}=e;return await _i(this.data,n,o)}static fromData(e){return new a(e)}},Ye=class a extends m{constructor(e){super(e);this.data=e}txType=Pr.Other;txSubType="tank-withdraw";async build(e){let{account:n,network:o}=e;return await Bi(this.data,n,o)}static fromData(e){return new a(e)}},Xe=class a extends m{constructor(e){super(e);this.data=e}txType=Pr.Other;txSubType="tank-claim";async build(e){let{account:n,network:o}=e;return await Mi(this.data,n,o)}static fromData(e){return new a(e)}};import{TransactionType as jl}from"@msafe/sui3-utils";var Ze=class a extends m{constructor(e){super(e);this.data=e}txType=jl.Other;txSubType="lock-claim";async build(e){let{account:n,network:o}=e;return await Ei(this.data,n,o)}static fromData(e){return new a(e)}};var tn=class{application="bucket";supportSDK="@mysten/sui";async deserialize(t){console.log("Bucket helper deserialize input: ",t);let{transaction:e}=t,o=new je(e).decode();return{txType:Wl.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=We.fromData(t.intentionData);break;case"borrow":r=Ue.fromData(t.intentionData);break;case"withdraw":r=qe.fromData(t.intentionData);break;case"repay":r=Fe.fromData(t.intentionData);break;case"close":r=$e.fromData(t.intentionData);break;case"tank-deposit":r=Je.fromData(t.intentionData);break;case"tank-withdraw":r=Ye.fromData(t.intentionData);break;case"tank-claim":r=Xe.fromData(t.intentionData);break;case"sbuck-deposit":r=Ve.fromData(t.intentionData);break;case"sbuck-unstake":r=Qe.fromData(t.intentionData);break;case"sbuck-withdraw":r=He.fromData(t.intentionData);break;case"sbuck-claim":r=Ge.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 wd}from"@msafe/sui3-utils";import{TransactionType as Gl}from"@msafe/sui3-utils";import{AggregatorClient as Ll,Env as Ni}from"@cetusprotocol/aggregator-sdk";import{CetusPeripherySDK as Ul}from"@cetusprotocol/cetus-periphery-sdk";import{CetusClmmSDK as Fl}from"@cetusprotocol/cetus-sui-clmm-sdk";import ql from"@cetusprotocol/vaults-sdk";import{SuiClient as $l}from"@mysten/sui/client";var Kl={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"},Vl={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:"0xaabf0856070391df81fad9240049d69c5a51c3d376cc0885eeedd516526cc79b",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:""}}},kt=(a,t)=>{let e=Kl,n=new Fl(e);return n.senderAddress=t.address,n},M=(a,t)=>{let e=kt(a,t),n=Vl;return new Ul(n,e)},Ql="https://api-sui.cetus.zone/router_v2/find_routes",ji=(a,t)=>{let e=new $l({url:"https://fullnode.mainnet.sui.io/"});return new Ll(Ql,t.address,e,Ni.Mainnet)},Hl={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:Ni.Mainnet,providers:["CETUS","DEEPBOOK","KRIYA","KRIYAV3","FLOWX","FLOWXV3","AFTERMATH","TURBOS","HAEDAL","VOLO","AFSUI"]}},Or=(a,t)=>{let e=new ql(Hl);return e.senderAddress=t.address,e};var Wi=async(a,t,e)=>await kt(e,t).Position.createAddLiquidityFixTokenPayload(a?.parameter,a?.gasEstimateArg),Li=async(a,t,e)=>await kt(e,t).Position.createAddLiquidityFixTokenPayload(a?.parameter,a?.gasEstimateArg),Ui=async(a,t,e)=>await kt(e,t).Position.closePositionTransactionPayload(a),Fi=async(a,t,e)=>await kt(e,t).Position.removeLiquidityTransactionPayload(a),qi=async(a,t,e)=>await kt(e,t).Rewarder.collectRewarderTransactionPayload(a);var en=class a extends m{constructor(e){super(e);this.data=e}txType=Gl.Other;txSubType="OpenAndAddLiquidity";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 zl}from"@msafe/sui3-utils";var nn=class a extends m{constructor(e){super(e);this.data=e}txType=zl.Other;txSubType="ClaimFeeAndMining";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await qi(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Jl}from"@msafe/sui3-utils";var on=class a extends m{constructor(e){super(e);this.data=e}txType=Jl.Other;txSubType="DecreaseLiquidity";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 Yl}from"@msafe/sui3-utils";var $i=async(a,t,e)=>await M(e,t).Farms.openPositionAddLiquidityStakePaylod(a),Ki=async(a,t,e)=>await M(e,t).Farms.addLiquidityFixCoinPayload(a),Vi=async(a,t,e)=>await M(e,t).Farms.removeLiquidityPayload(a),Qi=async(a,t,e)=>await M(e,t).Farms.removeLiquidityPayload(a),Hi=async(a,t,e)=>await M(e,t).Farms.claimFeeAndClmmReward(a),Gi=async(a,t,e)=>await M(e,t).Farms.harvestPayload(a),zi=async(a,t,e)=>{let n=M(e,t),o=Object.values(a);return await n.Farms.batchHarvestPayload(o)},Ji=async(a,t,e)=>await M(e,t).Farms.depositPayload(a),Yi=async(a,t,e)=>await M(e,t).Farms.withdrawPayload(a);var an=class a extends m{constructor(e){super(e);this.data=e}txType=Yl.Other;txSubType="FarmingOpenAndAddLiquidity";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 Xl}from"@msafe/sui3-utils";var rn=class a extends m{constructor(e){super(e);this.data=e}txType=Xl.Other;txSubType="FarmingBatchHarvest";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await zi(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Zl}from"@msafe/sui3-utils";var sn=class a extends m{constructor(e){super(e);this.data=e}txType=Zl.Other;txSubType="FarmingClaimFeeAndReward";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 td}from"@msafe/sui3-utils";var cn=class a extends m{constructor(e){super(e);this.data=e}txType=td.Other;txSubType="FarmingDecreaseLiquidity";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 ed}from"@msafe/sui3-utils";var ln=class a extends m{constructor(e){super(e);this.data=e}txType=ed.Other;txSubType="FarmingHarvest";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 nd}from"@msafe/sui3-utils";var dn=class a extends m{constructor(e){super(e);this.data=e}txType=nd.Other;txSubType="FarmingIncreaseLiquidity";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 od}from"@msafe/sui3-utils";var un=class a extends m{constructor(e){super(e);this.data=e}txType=od.Other;txSubType="FarmingRemoveLiquidity";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await Qi(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as ad}from"@msafe/sui3-utils";var pn=class a extends m{constructor(e){super(e);this.data=e}txType=ad.Other;txSubType="FarmingStake";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 rd}from"@msafe/sui3-utils";var mn=class a extends m{constructor(e){super(e);this.data=e}txType=rd.Other;txSubType="FarmingUnstake";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 id}from"@msafe/sui3-utils";var fn=class a extends m{constructor(e){super(e);this.data=e}txType=id.Other;txSubType="IncreaseLiquidity";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 sd}from"@msafe/sui3-utils";var bn=class a extends m{constructor(e){super(e);this.data=e}txType=sd.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 dd}from"@msafe/sui3-utils";import{restituteMsafeFastRouterSwapParams as cd}from"@cetusprotocol/aggregator-sdk";import{Transaction as ld}from"@mysten/sui/transactions";var Xi=async(a,t,e)=>{let n=ji(e,t),o=new ld;return await n.fastRouterSwap({...a,routers:cd(a.routers),txb:o}),o};var gn=class a extends m{constructor(e){super(e);this.data=e}txType=dd.Other;txSubType="AggregatorSwap";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 ud}from"@msafe/sui3-utils";var Zi=async(a,t,e)=>await Or(e,t).Vaults.deposit(a),ts=async(a,t,e)=>await Or(e,t).Vaults.withdraw(a);var hn=class a extends m{constructor(e){super(e);this.data=e}txType=ud.Other;txSubType="AddVaultsPosition";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await Zi(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as pd}from"@msafe/sui3-utils";var yn=class a extends m{constructor(e){super(e);this.data=e}txType=pd.Other;txSubType="RemoveVaultsPosition";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await ts(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as fd}from"@msafe/sui3-utils";import{Transaction as md}from"@mysten/sui/transactions";var es={package_id:"0x355714a1eeb7ab1d80902da6c92001170cda1212edf524c32aa308a3ac177c31",published_at:"0x355714a1eeb7ab1d80902da6c92001170cda1212edf524c32aa308a3ac177c31",cetus_coin_type:"0x06864a6f921804860930db6ddbe2e16acdf8504495ea7481637a1c8b9a8fe54b::cetus::CETUS"},ns=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 md;return r.forEach(c=>{s.moveCall({target:`${es.published_at}::router::redeem`,typeArguments:[es.cetus_coin_type],arguments:[s.object(n),s.object(o),s.pure(c),s.object(i)]})}),s};var Sn=class a extends m{constructor(e){super(e);this.data=e}txType=fd.Other;txSubType="VestingRedeem";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await ns(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as gd}from"@msafe/sui3-utils";import{Transaction as bd}from"@mysten/sui/transactions";var os=async(a,t,e)=>{let n=M(e,t),o=new bd;return await n.XCetusModule.convertPayload(a,o)},as=async(a,t,e)=>await M(e,t).XCetusModule.redeemLockPayload(a),rs=async(a,t,e)=>await M(e,t).XCetusModule.redeemDividendV3Payload(a.phases,a.venft_id,a.bonus_types,a.bonus_types_v2,a.xTokenType),is=async(a,t,e)=>await M(e,t).XCetusModule.cancelRedeemPayload(a),ss=async(a,t,e)=>await M(e,t).XCetusModule.redeemPayload(a);var Tn=class a extends m{constructor(e){super(e);this.data=e}txType=gd.Other;txSubType="xCETUSCancelRedeem";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await is(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as hd}from"@msafe/sui3-utils";var wn=class a extends m{constructor(e){super(e);this.data=e}txType=hd.Other;txSubType="xCETUSClaimStakingRwewards";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await rs(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as yd}from"@msafe/sui3-utils";var Cn=class a extends m{constructor(e){super(e);this.data=e}txType=yd.Other;txSubType="xCETUSConvert";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await os(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Sd}from"@msafe/sui3-utils";var In=class a extends m{constructor(e){super(e);this.data=e}txType=Sd.Other;txSubType="xCETUSRedeem";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await ss(r,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Td}from"@msafe/sui3-utils";var kn=class a extends m{constructor(e){super(e);this.data=e}txType=Td.Other;txSubType="xCETUSRedeemLock";async build(e){let{account:n,network:o}=e,{txbParams:r}=this.data;return await as(r,n,o)}static fromData(e){return new a(e)}};var Dn=class{application="cetus";supportSDK="@mysten/sui";async deserialize(t){console.log("Cetus helper deserialize input: ",t);let{txbParams:e,action:n}=t;return{txType:wd.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=en.fromData(t.intentionData);break;case"IncreaseLiquidity":r=fn.fromData(t.intentionData);break;case"DecreaseLiquidity":r=on.fromData(t.intentionData);break;case"RemoveLiquidity":r=bn.fromData(t.intentionData);break;case"ClaimFeeAndMining":r=nn.fromData(t.intentionData);break;case"FarmingOpenAndAddLiquidity":r=an.fromData(t.intentionData);break;case"FarmingIncreaseLiquidity":r=dn.fromData(t.intentionData);break;case"FarmingDecreaseLiquidity":r=cn.fromData(t.intentionData);break;case"FarmingRemoveLiquidity":r=un.fromData(t.intentionData);break;case"FarmingClaimFeeAndReward":r=sn.fromData(t.intentionData);break;case"FarmingHarvest":r=ln.fromData(t.intentionData);break;case"FarmingBatchHarvest":r=rn.fromData(t.intentionData);break;case"FarmingStake":r=pn.fromData(t.intentionData);break;case"FarmingUnstake":r=mn.fromData(t.intentionData);break;case"xCETUSConvert":r=Cn.fromData(t.intentionData);break;case"xCETUSRedeemLock":r=kn.fromData(t.intentionData);break;case"xCETUSClaimStakingRwewards":r=wn.fromData(t.intentionData);break;case"xCETUSCancelRedeem":r=Tn.fromData(t.intentionData);break;case"xCETUSRedeem":r=In.fromData(t.intentionData);break;case"VestingRedeem":r=Sn.fromData(t.intentionData);break;case"AggregatorSwap":r=gn.fromData(t.intentionData);break;case"AddVaultsPosition":r=hn.fromData(t.intentionData);break;case"RemoveVaultsPosition":r=yn.fromData(t.intentionData);break;default:throw new Error("not implemented")}return r.build({suiClient:e,account:n,network:o})}};import{TransactionType as Su}from"@msafe/sui3-utils";import Cd from"sort-keys-recursive";var h=class{constructor(t){this.data=t}serialize(){return JSON.stringify(Cd(this.data))}};import{getFullnodeUrl as xn}from"@mysten/sui.js/client";var Rr={};wi(Rr,{contractId:()=>Dd,default:()=>Od,feeObjId:()=>Ad,roleObjId:()=>xd,status:()=>kd,transaction:()=>Id,upgradeCapObjId:()=>Pd,vaultObjId:()=>vd});var Id="DiBZq4UmVVYiRL6ZJmFKYoHcxtxqrhsCXSkFyT7wUr3j",kd="success",Dd="0x81c960dc653975fbd0072deca8afb92d322898c911622898ba1b2e3ad0c4bd8d",xd="0xc6ec0bdee0bb59a72077e9acd2f42457043cf47080b3d3fad4d39abf28bba63a",vd="0xbc4021387fbac149119fd24e92be9e58f745774292f3a2a12e2ac6daf5363e1d",Ad="0x4178f63970fe2daeb256dc5730ad172e82b3e8eb45f31b33e0daae72cd35e1e1",Pd="0xe1e9aa7d222d151bfe6dd83358b0d7fdcb11260f710800cfaf7ccc1b1e245115",Od={transaction:Id,status:kd,contractId:Dd,roleObjId:xd,vaultObjId:vd,feeObjId:Ad,upgradeCapObjId:Pd};var _r={};wi(_r,{contractId:()=>Bd,default:()=>Wd,feeObjId:()=>Nd,roleObjId:()=>Md,status:()=>_d,transaction:()=>Rd,upgradeCapObjId:()=>jd,vaultObjId:()=>Ed});var Rd="855FNDV8o8Z3fWULPnQo9qdhLJpsg7wZrkCpNyfw9KfB",_d="success",Bd="0xc357c3985e8fb875d6b37141497af660779aa1bab0ec489b2213efd74067d1fa",Md="0x5ab49bdf9fd1413e328ef242b3f8d83dde791b38a0b627bfc87fb25c010d34f1",Ed="0xb483558770d8eb26007f193b75db40f0a45f2e36863a687625885d4de6993378",Nd="0x48453fc4d7cde3fe35aad89e5dfb496608a6a55ea529a1c0274681a808627f94",jd="0x34279779a0d0d36bd5044b04830d607fa1b0ecf316548c8ac3a44151e4f1a42a",Wd={transaction:Rd,status:_d,contractId:Bd,roleObjId:Md,vaultObjId:Ed,feeObjId:Nd,upgradeCapObjId:jd};var Ld=xn("testnet"),Ud=xn("testnet"),Fd=xn("mainnet"),qd=xn("mainnet"),$d="https://bc3p6l5unl.execute-api.us-west-1.amazonaws.com/prod",Kd="https://rolsbkota7.execute-api.us-west-1.amazonaws.com/prod",Vd="https://6p6mkx33ne.execute-api.us-west-1.amazonaws.com/prod",Qd="https://xrae3mrjv5.execute-api.us-west-1.amazonaws.com/prod",cs=Rr,ls=_r,Hd=new Map([["dev",{env:"dev",rpc:{url:Ld},backend:{url:$d},contract:cs}],["stg",{env:"stg",rpc:{url:Ud},backend:{url:Kd},contract:cs}],["prev",{env:"prev",rpc:{url:Fd},backend:{url:Vd},contract:ls}],["prod",{env:"prod",rpc:{url:qd},backend:{url:Qd},contract:ls}]]);function ds(a,t){let e=Hd.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 zd}from"@mysten/sui.js/client";var I=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 vn=class extends I{constructor(){super(11,"Backend is not specified")}};var An=class extends I{constructor(){super(1,"Wallet not connected")}};import Bt,{AxiosError as Gd}from"axios";var _t=class extends I{constructor(t,e){super(10,t,{context:e})}};var Pn=class a{constructor(t){this.apiURL=t}static parseResponseData(t){if(t instanceof Gd)throw new _t(t.response?.statusText);if(t.status===200){if(t.data.success)return t.data.data;throw new _t(t.data.code)}throw new _t(t.status.toString())}async getIncomingStreams(t,e){let n=await Bt.post(`${this.apiURL}/stream`,{recipient:t,...e});return a.parseResponseData(n)}async getOutgoingStreams(t,e){let n=await Bt.post(`${this.apiURL}/stream`,{sender:t,...e});return a.parseResponseData(n)}async getStreamHistory(t){let e=await Bt.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 Bt.post(`${this.apiURL}/stream-info`,{address:t});return a.parseResponseData(e)}async getAllRecipients(t,e){let n=await Bt.post(`${this.apiURL}/stream-info`,{sender:t,status:e});return a.parseResponseData(n)}async getAllSenders(t,e){let n=await Bt.post(`${this.apiURL}/stream-info`,{recipient:t,status:e});return a.parseResponseData(n)}};var Mt=class a{signer;suiClient;envConfig;_backend;constructor(t){this.envConfig=t,this.suiClient=new zd({url:t.rpc.url}),t.backend&&(this._backend=new Pn(t.backend.url))}static new(t,e){let n=ds(t,e);return new a(n)}get walletType(){return this.wallet?this.wallet.type:"disconnected"}get backend(){if(!this._backend)throw new vn;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 An;return this.signer}async walletAddress(){return this.wallet.address()}};import{SUI_TYPE_ARG as gu,normalizeStructTag as hu,normalizeSuiAddress as Ms}from"@mysten/sui.js/utils";import{TransactionBlock as En}from"@mysten/sui.js/transactions";import{TransactionBlock as Ss}from"@mysten/sui.js/transactions";import{SUI_TYPE_ARG as Ts,normalizeStructTag as Zd}from"@mysten/sui.js/utils";var Br=50n,On=10000n,us=25n,Mr=100000000n;var Y=class{constructor(t){this.object=t}moveArg(t){return t.object(this.object)}},Yt=class{constructor(t){this.objects=t}moveArgs(t){return t.makeMoveVec({objects:this.objects.map(e=>t.object(e))})}},lt=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 ps}from"buffer";import{normalizeSuiAddress as Jd}from"@mysten/sui.js/utils";var Xt=class extends I{constructor(t,e){super(3,t,{context:e})}};var Rn=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 Xt("Invalid contract return type.",{ctx:{expectType:"address",gotType:o}});return Jd(ps.from(n).toString("hex"))}getU64(t=0,e=0){let[n,o]=this.getValue(t,e);if(o!=="u64")throw new Xt("Invalid contract return type.",{ctx:{expectType:"u64",gotType:o}});return ps.from(n).readBigInt64LE()}};import{bcs as fs}from"@mysten/sui.js/bcs";var x=class extends I{constructor(t,e,n){super(2,`Invalid input: ${t}`,{context:{fieldKey:e,fieldValue:n}})}};var bs={groupId:"string",name:"string"},Yd=64;function gs(a){return hs(a),fs.ser(bs,a).toString("base64")}function Zt(a){let t=fs.de(bs,a,"base64");return hs(t),t}function hs(a){if(!ms(a.name))throw new x("Invalid metadata: Name contains unknown character");if(!ms(a.groupId))throw new x("Invalid metadata: Group ID contains unknown character");if(a.name.length>Yd)throw new x("Invalid metadata: Name exceed max length 64")}function ms(a){return/^[\x00-\x7F]+$/.test(a)}import{normalizeStructTag as _n}from"@mysten/sui.js/utils";function Bn(a,t){return _n(a)===_n(t)}function dt(a,t){return _n(a)===_n(t)}var Mn="txn.gas";import{nanoid as Xd}from"nanoid";function ys(){return Xd()}var Dt=class a{constructor(t,e,n){this.globals=t;this.feeContract=e;this.streamContract=n}static convertCreateStreamInfoToInternal(t){return{metadata:gs({name:t.name,groupId:ys()}),coinType:Zd(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 Ss,n=this.calculateFeesInternal(t),o=this.getCreateStreamCoinRequests(t,n),r=await this.wallet.requestCoins(o),i=await this.addMergeCoins(e,r[0]),s;o.length>1?s=await this.addMergeCoins(e,r[1]):s=i;for(let c=0;c<t.recipients.length;c++){let d=t.recipients[c],l=this.amountForRecipient(d,t.numberEpoch),u=this.getStreamFeeLocal(l),[p]=e.splitCoins(i,[e.pure(l+u,"u64")]),[f]=e.splitCoins(s,[e.pure(this.flatSuiFee,"u64")]);this.streamContract.createStream(e,{paymentCoin:new lt(p),flatFeeCoin:new lt(f),metadata:t.metadata,recipient:d.address,timeStart:t.startTime,cliff:d.cliffAmount,epochInterval:t.epochInterval,numEpoch:t.numberEpoch,amountPerEpoch:d.amountPerEpoch,cancelable:t.cancelable,coinType:t.coinType})}return e}calculateCreateStreamFees(t){let e=a.convertCreateStreamInfoToInternal(t);return this.calculateFeesInternal(e)}feeParams(){return{createFeePercent:{numerator:Br,denominator:On},claimFeePercent:{numerator:us,denominator:On},flatFeePerStream:Mr}}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===Mn?n=t.gas:n=t.object(e.primaryCoin),n}getCreateStreamCoinRequests(t,e){let n=t.coinType;return Bn(n,Ts)?[{coinType:n,amount:e.totalAmount+e.streamFeeAmount+e.flatFeeAmount}]:[{coinType:n,amount:e.totalAmount+e.streamFeeAmount},{coinType:Ts,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 Mr}getStreamFeeLocal(t){return t*Br/On}async getStreamFeeRemote(t){let e=this.feeContract.streamingFee(new Ss,t),n=await this.globals.suiClient.devInspectTransactionBlock({sender:await this.globals.walletAddress(),transactionBlock:e});return new Rn(n).getU64()}get wallet(){return this.globals.wallet}};import{Transactions as Cs}from"@mysten/sui.js/transactions";var ws="0x0000000000000000000000000000000000000000000000000000000000000006";var Et=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(Cs.MoveCall({target:n,arguments:e.arguments.map(o=>o instanceof Yt?o.moveArgs(t):o instanceof Y?o.moveArg(t):o instanceof lt?o.moveArg():t.pure(o)),typeArguments:e.typeArgs})),t}addTransactionBlock(t,e,n=[],o=[]){t.add(Cs.MoveCall({target:e,arguments:n.map(r=>r instanceof Yt?r.moveArgs(t):r instanceof Y?r.moveArg(t):r instanceof lt?r.moveArg():t.pure(r)),typeArguments:o}))}makeObject(t){return typeof t=="string"?new Y(t):t}vaultObject(){return new Y(this.config.vaultObjId)}roleObject(){return new Y(this.config.roleObjId)}feeObject(){return new Y(this.config.feeObjId)}clockObject(){return new Y(ws)}};var Nt=class a extends Et{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 Et{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 jt=class{constructor(t){this.globals=t;let e=t.envConfig.contract;this.feeContract=new Nt(e,t),this.streamContract=new X(e,t)}feeContract;streamContract;async createStreams(t){let e=Dt.convertCreateStreamInfoToInternal(t);return this.createStreamHelper().buildCreateStreamTransactionBlock(e)}createStreamHelper(){return new Dt(this.globals,this.feeContract,this.streamContract)}setAutoClaim(t,e,n){let o=new En;return this.streamContract.setAutoClaim(o,{streamId:t,enabled:e,coinType:n})}claimStream(t,e){let n=new En;return this.streamContract.claimStream(n,{streamId:t,coinType:e})}claimStreamByProxy(t,e){let n=new En;return this.streamContract.claimStreamByProxy(n,{streamId:t,coinType:e})}cancelStream(t,e){let n=new En;return this.streamContract.cancelStream(n,{streamId:t,coinType:e}),n}};import{normalizeStructTag as Er,SUI_TYPE_ARG as tu}from"@mysten/sui.js/utils";import{Duration as Is}from"luxon";var Nn=class extends I{constructor(t,e){super(12,`Transaction failed: ${e}`,{context:{status:t,msg:e}})}};var eu=1e3,jn=class{constructor(t){this.globals=t;this.coinMetaHelper=new Nr(t.suiClient),this.createStreamHelper=new jt(t).createStreamHelper()}coinMetaHelper;createStreamHelper;getStreamIdsFromCreateStreamResponse(t){if(t.effects?.status.status!=="success")throw new Nn(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 x("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 x("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 x("Invalid stream steps: 0");let e=BigInt(t.total.toMillis())/t.steps,n=t.timeStart.plus(Is.fromMillis(Number(e*t.steps))),o={timeStart:t.timeStart,timeEnd:n,interval:Is.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:Er(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:Er(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 x("Stream amount too small","totalAmount",e);if(t.cliffAmount>t.realTotalAmount)throw new x("Invalid cliff settings")}validateTimeline(t){if(t.interval.toMillis()<eu)throw new x("Interval shall be at least 1 second","interval",t.interval)}},Nr=class{constructor(t){this.suiClient=t;this.coinMetaReg=new Map}coinMetaReg;async getCoinMeta(t){let e=Er(t||tu);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 xs,normalizeSuiAddress as $n}from"@mysten/sui.js/utils";import{DateTime as vs}from"luxon";import{TransactionBlock as Fn}from"@mysten/sui.js/transactions";import{normalizeStructTag as Ds,parseStructTag as au}from"@mysten/sui.js/utils";import{DateTime as ru}from"luxon";var Wn=class extends I{constructor(){super(7,"Connected wallet is not creator")}};var te=class extends I{constructor(){super(8,"Connected wallet is not recipient")}};var ee=class extends I{constructor(t,e){super(6,t,{context:e})}};var A=class extends I{constructor(t,e={}){super(0,t,e)}};var Ln=class extends I{constructor(t){super(5,"Stream not found",{context:{streamId:t}})}};import{DateTime as nu,Duration as ou}from"luxon";var ks=(1n<<64n)-1n,Un=1e3;function jr(a){let t;typeof a=="number"?t=a:typeof a=="bigint"?t=Number(a):t=a.toMillis();let e=Math.round(t/Un);return nu.fromMillis(e*Un)}function Wr(a){let t;typeof a=="number"?t=a:typeof a=="bigint"?t=Number(a):t=a.toMillis();let e=Math.round(t/Un);return ou.fromMillis(e*Un)}var ut=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 A("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 Wn;let t=new Fn;return this.streamContract.cancelStream(t,{streamId:this.streamId,coinType:this.coinType}),t}async claim(){if(await this.globals.walletAddress()!==this.recipient)throw new te;let t=new Fn;return this.streamContract.claimStream(t,{streamId:this.streamId,coinType:this.coinType}),t}async setAutoClaim(t){if(await this.globals.walletAddress()!==this.recipient)throw new te;let e=new Fn;return this.streamContract.setAutoClaim(e,{streamId:this.streamId,coinType:this.coinType,enabled:t}),e}async claimByProxy(){let t=new Fn;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 Ds(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 Wr(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 jr(this.rawData.config.timeStart)}get duration(){let t=this.rawData.config,e=t.epochInterval*t.totalEpoch;return Wr(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:jr((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===ks?0n:this.rawData.status.epochClaimed*this.amountPerEpoch+this.cliff}get currentEpoch(){let t=ru.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 Ln(t):new ee(`get stream data: ${e.error.code}`,{streamId:t,...e.error});let n=e.data.content;if(n.dataType!=="moveObject")throw new ee("Unexpected object type",{gotType:n.dataType});let{typeParams:o}=au(n.type),r=Ds(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)}}}};var Wt=class extends I{constructor(t,e){super(9,`Invalid stream group: ${t}`,{context:e})}};async function Ur(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)}},Lt=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 iu=25;async function qr(a,t,e){let n=new ne(t),o=new oe(a,n,e);return await Ur(o)}var ne=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]}},oe=class extends Lt{constructor(e,n,o){super(new Fr(e,n,o));this.suiClient=e;this.idIter=n;this.options=o}},Fr=class{constructor(t,e,n){this.suiClient=t;this.stringIter=e;this.options=n;this.filter=n?.filter,this.pageSize=n?.pageSize||iu,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 qn=class a{constructor(t,e){this.globals=t;this.streams=e;if(e.length===0)throw new Wt("stream size 0");let n=e.map(r=>r.groupId);if(new Set(n).size!==1)throw new x("Stream does not have same group ID")}type="StreamGroup";static async new(t,e){let n=await qr(t.suiClient,e);return n.forEach(o=>{if(!o)throw new A("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=>{su(n,r)||(o=!1)}),o}async refresh(){let t=await qr(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)=>ut.fromObjectData(t,e[i],r)).filter(r=>!!r);if(new Set(o.map(r=>r.groupId)).size!==1)throw new Wt("Not same group ID");if(!this.checkStreamGroup(o))throw new Wt("Not same stream settings");return o}};function su(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 ae=class a{constructor(t,e){this.it=t;this.pageSize=e}static async newIncoming(t){let e=await Kn.newIncoming(t);return new a(e,t.pageSize)}static async newOutgoing(t){let e=await Kn.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}},Kn=class a{constructor(t){this.requester=t}cachedNext;static async newIncoming(t){let e=await Vn.newIncomingQuery(t);return new a(e)}static async newOutgoing(t){let e=await Vn.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 A("No more results");return e}let t=this.cachedNext;if(this.cachedNext=void 0,t===null)throw new A("No more results");return t}},Vn=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 ne(n.flat().map(i=>i.streamId));this.objectIter=new oe(t.suiClient,r)}current=0;objectIter;static async newIncomingQuery(t){let e=pu(t.query),n=await t.globals.walletAddress(),r=(await t.globals.backend.getIncomingStreams(n,e)).filter(s=>$n(s.recipient)===$n(n)),i=As(r);return new a(t.globals,n,i,t.query)}static async newOutgoingQuery(t){let e=mu(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 du(this.globals,t[0].streamId,this.objectIter);return this.current++,Ps(e,this.query)?e:this.doNextRequest()}if(t.length>1){let e=await uu(this.globals,t.map(n=>n.streamId),this.objectIter);return this.current++,lu(e,this.query)?e:this.doNextRequest()}throw new A("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)=>vs.fromISO(n[0].createDate).toMillis()-vs.fromISO(e[0].createDate).toMillis())}function Ps(a,t){if(t===void 0)return!0;let e=cu(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 cu(a,t){return t===void 0?!0:Array.isArray(t)?t.includes(a.progress.status):a.progress.status===t}function lu(a,t){if(!t)return!0;let e=!1;return a.streams.forEach(n=>{Ps(n,t)&&(e=!0)}),e}async function du(a,t,e){let n=await Os(e,t);return ut.fromObjectData(a,t,n)}async function uu(a,t,e){let n=[];for(;n.length<t.length;){let o=await Os(e,t[n.length]);n.push(o)}return qn.newFromObjectResponse(a,t,n)}async function Os(a,t){if(!await a.hasNext())throw new A("object iterator has been consumed");let e=await a.next();if(!e||e.error||e.data===void 0||e.data===null)throw new A("object iterator undefined response",{cause:e?.error});if(e?.data?.objectId!==t)throw new A("stream id not aligned");return e}function pu(a){return{status:$r(a?.status),coinType:Rs(a?.coinType),sender:_s(a?.sender)}}function mu(a){return{status:$r(a?.status),coinType:Rs(a?.coinType),recipient:_s(a?.recipient)}}function $r(a){return a===void 0||a.length===0?"all":Array.isArray(a)?a.reduce((t,e)=>{let n=$r(e);return!t||t===n?n:"all"},void 0):fu(a)}function fu(a){switch(a){case"STREAMING":case"STREAMED":case"CANCELED":return"active";case"COMPLETED":case"SETTLED":return"inactive";default:throw new x("Unknown stream filtered status")}}function Rs(a){if(a)return Array.isArray(a)?a.length!==0?a.map(t=>xs(t)):void 0:xs(a)}function _s(a){if(a)return Array.isArray(a)?a.length!==0?a.map(t=>$n(t)):void 0:$n(a)}var Qn=class extends I{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 bu=25;async function Bs(a,t,e,n="0x2::sui::SUI",o=bu){let r=new Kr(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 Qn(n,e,i);return s}var Kr=class extends Lt{constructor(e,n,o,r){super(new Vr(e,n,o,r));this.suiClient=e;this.owner=n;this.coinType=o;this.reqPageSize=r}},Vr=class{constructor(t,e,n,o){this.suiClient=t;this.owner=e;this.coinType=n;this.reqPageSize=o;if(o<=0)throw new A("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}}};var Qr=class{constructor(t){this.msafe=t}get type(){return"msafe"}async address(){return this.msafe.address()}async requestCoins(t){return this.msafe.requestCoins(t)}},Hn=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(Bn(t.coinType,gu))return{primaryCoin:Mn};if(t.amount<=0)throw new x("Invalid coin request","coinAmount",t.amount);let e=await Bs(this.suiClient,await this.address(),t.amount,t.coinType);if(e.length===0)throw new A("no coins available");return{primaryCoin:e[0].coinObjectId,mergedCoins:e.slice(1).map(n=>n.coinObjectId)}}},Gn=class{globals;helper;constructor(t,e){this.globals=Mt.new(t,e),this.helper=new jn(this.globals)}connectSingleWallet(t){let e=new Hr(t,this.globals.suiClient);this.globals.connectWallet(e)}connectMSafeAccount(t){let e=new Qr(t);this.globals.connectWallet(e)}async createStream(t){return this.builder().createStreams(t)}async getStream(t){return ut.new(this.globals,t)}async getIncomingStreams(t,e=10){return ae.newIncoming({globals:this.globals,query:t,pageSize:e})}async getOutgoingStreams(t,e=10){return ae.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=>hu(n))}async getRecipientsForStreamFilter(t){let e=await this.wallet.address();return(await this.globals.backend.getAllRecipients(e,t)).map(o=>Ms(o))}async getCreatorsForStreamFilter(t){let e=await this.wallet.address();return(await this.globals.backend.getAllSenders(e,t)).map(o=>Ms(o))}get wallet(){return this.globals.wallet}builder(){return new jt(this.globals)}};var V=class extends h{application="mpay";getClient(t,e){let n=new Gn(t==="sui:mainnet"?"prod":"dev");return n.connectSingleWallet(new Hn(e)),n}};var re=class extends V{constructor(e){super(e);this.data=e}txType=Su.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 Tu}from"@msafe/sui3-utils";var ie=class extends V{constructor(e){super(e);this.data=e}txType=Tu.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 wu}from"@msafe/sui3-utils";var se=class extends V{constructor(e){super(e);this.data=e}txType=wu.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 Cu}from"@msafe/sui3-utils";var ce=class extends V{constructor(e){super(e);this.data=e}txType=Cu.Stream;txSubType="CreateStream";async build(e){let{network:n,account:o}=e;return this.getClient(n,o).createStream(this.data)}};import{bcs as Es}from"@mysten/sui.js/bcs";import{normalizeStructTag as Iu,normalizeSuiAddress as le}from"@mysten/sui.js/utils";var Ut=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 le(e)}decodeInputString(t){return this.decodePureArg(t,"string")}decodeInputBool(t){return this.decodePureArg(t,"bool")}decodePureArg(t,e){let n=this.getInputParam(t);return a.getPureInputValue(n,e)}getInputParam(t){let e=this.moveCall.arguments[t];if(e.kind!=="Input")throw new Error("not input type");return this.txb.blockData.inputs[e.index]}static getPureInputValue(t,e){if(t.type!=="pure")throw new Error("not pure argument");if(typeof t.value=="object"&&"Pure"in t.value){let n=t.value.Pure;return Es.de(e,new Uint8Array(n))}return t.value}static getOwnedObjectId(t){if(t.type!=="object")throw new Error(`not object argument: ${JSON.stringify(t)}`);if(typeof t.value=="object"){if(!("Object"in t.value)||!("ImmOrOwned"in t.value.Object))throw new Error("not ImmOrOwned");return le(t.value.Object.ImmOrOwned.objectId)}return le(t.value)}static getSharedObjectId(t){if(t.type!=="object")throw new Error(`not object argument: ${JSON.stringify(t)}`);if(typeof t.value!="object")return le(t.value);if(!("Object"in t.value)||!("Shared"in t.value.Object))throw new Error("not Shared");return le(t.value.Object.Shared.objectId)}static getPureInput(t,e){if(t.type!=="pure")throw new Error("not pure argument");if(typeof t.value!="object")return t.value;if(!("Pure"in t.value))throw new Error("Pure not in value");let n=t.value.Pure;return Es.de(e,new Uint8Array(n))}typeArg(t){return Iu(this.moveCall.typeArguments[t])}txArg(t){return this.moveCall.arguments[t]}};var zn=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"&&dt(e.target,this.contract.createStreamTarget));if(t.length===0)throw new A("No create stream transactions");return t.map(e=>new Ut(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),d=t.decodeInputU64(9),l=t.decodeInputU64(10),u=t.decodeInputBool(11),p=t.typeArg(0);return{name:n,groupId:o,recipient:r,timeStart:i,cliff:s,epochInterval:c,totalEpoch:d,amountPerEpoch:l,cancelable:u,coinType:p}}aggregateGroupStreamInfo(t){if(new Set(t.map(o=>JSON.stringify({name:o.name,groupId:o.groupId,timeStart:String(o.timeStart),epochInterval:String(o.epochInterval),totalEpoch:String(o.totalEpoch),cancelable:o.cancelable,coinType:o.coinType}))).size!==1)throw new x("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 Nt(this.globals.envConfig.contract,this.globals)}createStreamHelper(){return new Dt(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 Jn=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"&&dt(e.target,this.contract.createStreamTarget))!==-1}isSetAutoClaimTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&&dt(this.transactions[0].target,this.contract.setAutoClaimTarget)}isCancelStreamTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&&dt(this.transactions[0].target,this.contract.cancelStreamTarget)}isClaimStreamTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&&dt(this.transactions[0].target,this.contract.claimStreamTarget)}isClaimByProxyTransaction(){return this.transactions.length===1&&this.transactions[0].kind==="MoveCall"&&dt(this.transactions[0].target,this.contract.claimStreamByProxyTarget)}decodeCreateStreamTransaction(){return new zn(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 Ut(t,this.txb)}};import{TransactionType as ku}from"@msafe/sui3-utils";var de=class extends V{constructor(e){super(e);this.data=e}txType=ku.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 Yn=class{application="mpay";supportSDK="@mysten/sui.js";async deserialize(t){let{network:e,transactionBlock:n}=t,o=Mt.new(e==="sui:mainnet"?"prod":"dev"),i=new Jn(o,n).decode(),s;switch(i.type){case"CreateStream":s=new ce(i.info);break;case"SetAutoClaim":s=new de({streamId:i.streamId,enabled:i.enabled});break;case"Claim":s=new se({streamId:i.streamId});break;case"ClaimByProxy":s=new ie({streamId:i.streamId});break;case"Cancel":s=new re({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 ce(e);break;case"Claim":n=new se(e);break;case"ClaimByProxy":n=new ie(e);break;case"SetAutoClaim":n=new de(e);break;case"Cancel":n=new re(e);break;default:throw new Error("not implemented")}return n.build({...t})}};import{TransactionDefaultApplication as vu,TransactionSubTypes as Ns}from"@msafe/sui3-utils";import{buildCoinTransferTxb as Du}from"@msafe/sui3-utils";var Xn=class a extends h{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o}=e;return Du(n,this.data,o.address)}static fromData(e){return new a(e)}};import{buildObjectTransferTxb as xu}from"@msafe/sui3-utils";var Zn=class a extends h{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o}=e;return xu(n,this.data,o.address)}static fromData(e){return new a(e)}};var to=class{application="msafe-core";supportSDK="@mysten/sui.js";constructor(){this.application=vu}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 Ns.assets.coin.send:o=Xn.fromData(t.intentionData);break;case Ns.assets.object.send:o=Zn.fromData(t.intentionData);break;default:throw new Error("not implemented")}return o.build({suiClient:e,account:n})}};import{TransactionType as qu}from"@msafe/sui3-utils";var js=!1,ue={ProtocolPackage:"0x81c408448d0d57b3e371ea94de1d40bf852784d3e225de1e74acab3e8395c18f",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 Gr(){if(!js)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&&(ue.ProtocolPackage=t),e&&(ue.borrowFee=e),n&&(ue.borrowFeeAddress=n),o&&(ue.pool=o),js=!0}catch(a){console.error(a.message)}}var G=ue;import{TransactionType as vt}from"@msafe/sui3-utils";import{bcs as Ws}from"@mysten/sui.js/bcs";import{normalizeStructTag as Pu,normalizeSuiAddress as pe}from"@mysten/sui.js/utils";var eo=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();if(this.isEntryClaimAndDepositTransaction())return this.decodeEntryClaimAndDeposit();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.transactions.find(e=>!!(e.kind==="MoveCall"&&e.target.includes("claim_reward")))}isEntryBorrowTransaction(){return!!this.getMoveCallTransaction(`${G.ProtocolPackage}::incentive_v3::entry_borrow`)}isEntryBorrowWithFeeTransaction(){return!!this.getMoveCallTransaction(`${G.ProtocolPackage}::incentive_v3::borrow`)}isEntryMultiDepositTransaction(){let t=`${G.ProtocolPackage}::incentive_v3::entry_deposit`,e=this.transactions.filter(o=>o.kind==="MoveCall"&&o.target===t);return this.transactions.find(o=>o.kind==="MoveCall"&&o.target.includes("claim_reward"))?!1:e.length>1}isEntryClaimAndDepositTransaction(){let t=`${G.ProtocolPackage}::incentive_v3::entry_deposit`,e=this.transactions.filter(o=>o.kind==="MoveCall"&&o.target===t);return!!(this.transactions.find(o=>o.kind==="MoveCall"&&o.target.includes("claim_reward"))&&e.length>0)}isEntryDepositTransaction(){return!!this.getMoveCallTransaction(`${G.ProtocolPackage}::incentive_v3::entry_deposit`)}isEntryRepayTransaction(){return!!this.getMoveCallTransaction(`${G.ProtocolPackage}::incentive_v3::entry_repay`)}isEntryWithdrawTransaction(){return!!this.getMoveCallTransaction(`${G.ProtocolPackage}::incentive_v3::withdraw`)}findPoolByAssetId(t){let e=Object.values(G.pool).find(n=>n.assetId===t);if(!e)throw new Error("Pool not found");return e}decodeEntryClaimAndDeposit(){return{txType:vt.Other,type:"EntryClaimAndDeposit",intentionData:{type:"entry_claim_and_deposit"}}}decodeClaimReward(){return console.log("decode claims"),{txType:vt.Other,type:"ClaimReward",intentionData:{type:"claim_reward"}}}decodeEntryBorrow(){let t=this.helper.decodeInputU8(4),e=this.helper.decodeInputU64(5);return{txType:vt.Other,type:"EntryBorrow",intentionData:{amount:e,assetId:t}}}decodeEntryMultiDeposit(){let t=[],e=`${G.ProtocolPackage}::incentive_v3::entry_deposit`;return this.transactions.forEach(n=>{if(n.kind==="MoveCall"&&n.target===e){let o=new no(n,this.txb),r=o.decodeInputU8(3),i=o.decodeInputU64(5);t.push({assetId:r,amount:i})}}),{txType:vt.Other,type:"EntryMultiDeposit",intentionData:{list:t}}}decodeEntryDeposit(){let t=this.helper.decodeInputU8(3),e=this.helper.decodeInputU64(5);return{txType:vt.Other,type:"EntryDeposit",intentionData:{amount:e,assetId:t}}}decodeEntryRepay(){let t=this.helper.decodeInputU8(4),e=this.helper.decodeInputU64(6);return{txType:vt.Other,type:"EntryRepay",intentionData:{amount:e,assetId:t}}}decodeEntryWithdraw(){let t=this.helper.decodeInputU8(4),e=this.helper.decodeInputU64(5);return{txType:vt.Other,type:"EntryWithdraw",intentionData:{amount:e,assetId:t}}}get helper(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(G.ProtocolPackage));return new no(t,this.txb)}},no=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 pe(e)}decodeInputString(t){return this.decodePureArg(t,"string")}decodeInputBool(t){return this.decodePureArg(t,"bool")}decodePureArg(t,e){let n=this.getInputParam(t);return 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 Ws.de(e,new Uint8Array(n))}return t.value}static getOwnedObjectId(t){if(t.type!=="object")throw new Error(`not object argument: ${JSON.stringify(t)}`);if(typeof t.value=="object"){if(!("Object"in t.value)||!("ImmOrOwned"in t.value.Object))throw new Error("not ImmOrOwned");return pe(t.value.Object.ImmOrOwned.objectId)}return pe(t.value)}static getSharedObjectId(t){if(t.type!=="object")throw new Error(`not object argument: ${JSON.stringify(t)}`);if(typeof t.value!="object")return pe(t.value);if(!("Object"in t.value)||!("Shared"in t.value.Object))throw new Error("not Shared");return pe(t.value.Object.Shared.objectId)}static getPureInput(t,e){if(t.type!=="pure")throw new Error("not pure argument");if(typeof t.value!="object")return t.value;if(!("Pure"in t.value))throw new Error("Pure not in value");let n=t.value.Pure;return Ws.de(e,new Uint8Array(n))}typeArg(t){return Pu(this.moveCall.typeArguments[t])}txArg(t){return this.moveCall.arguments[t]}};import{depositCoin as Ou,withdrawCoin as Ru,repayDebt as _u,borrowCoin as Bu,claimAllRewardsPTB as Mu,claimAllRewardsResupplyPTB as Eu}from"navi-sdk";async function Ft(a,t,e,n){return await Ou(a,t,e,n),a}async function Ls(a,t,e,n){let[o]=await Ru(a,t,e);return a.transferObjects([o],a.pure(n)),a}async function Us(a,t,e,n){let[o]=await Bu(a,t,e);return a.transferObjects([o],a.pure.address(n)),a}async function zr(a,t,e,n){return await _u(a,t,e,n),a}async function Fs(a,t){return await Mu(a,t)}async function qs(a,t){return await Eu(a,t)}var oo=class a extends h{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{type:n}=this.data;return console.log("claim reward",n),await Fs(e.suiClient,e.account.address)}static fromData(e){return new a(e)}};var ao=class a extends h{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{type:n}=this.data;return console.log("claim reward and supply",n),await qs(e.suiClient,e.account.address)}static fromData(e){return new a(e)}};import{TransactionBlock as ju}from"@mysten/sui.js/transactions";import{pool as Nu}from"navi-sdk";function Z(a){return Object.values(Nu).find(t=>String(t.assetId)===String(a))}var ro=class a extends h{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{assetId:n,amount:o}=this.data,r=new ju;console.log("build",this.data);let i=Z(n);return await Us(r,i,o,e.account.address)}static fromData(e){return new a(e)}};import{TransactionBlock as Wu}from"@mysten/sui.js/transactions";async function qt(a,t,e){let n=await a.getCoins({owner:t,coinType:e});return console.log("getTokenObjs",t,n),n}var io=class a extends h{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o}=e,{assetId:r,amount:i}=this.data,s=new Wu;console.log("build",this.data);let c=Z(r);if(r===0){let[p]=s.splitCoins(s.gas,[i]);return await Ft(s,c,p,i)}let d=await qt(n,o.address,c.type);if(!d.data[0])throw new Error(`Insufficient balance for ${c.name} Token`);let l=d.data[0].coinObjectId;if(d.data.length>=2){let p=1;for(;p<d.data.length;)s.mergeCoins(l,[d.data[p].coinObjectId]),p++}return await Ft(s,c,s.object(l),i)}static fromData(e){return new a(e)}};import{TransactionBlock as Lu}from"@mysten/sui.js/transactions";var so=class a extends h{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o}=e,{assetId:r,amount:i}=this.data,s=new Lu;console.log("build",this.data);let c=Z(r);if(r===0){let[u]=s.splitCoins(s.gas,[i]);return zr(s,c,u,i)}let d=await qt(n,o.address,c.type);if(!d.data[0])throw new Error(`Insufficient balance for ${c.name} Token`);let l=d.data[0].coinObjectId;if(d.data.length>=2){let u=1;for(;u<d.data.length;)s.mergeCoins(l,[d.data[u].coinObjectId]),u++}return zr(s,c,s.object(l),i)}static fromData(e){return new a(e)}};import{TransactionBlock as Uu}from"@mysten/sui.js/transactions";var co=class a extends h{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{assetId:n,amount:o}=this.data,r=new Uu;console.log("build",this.data);let i=Z(n);return await Ls(r,i,o,e.account.address)}static fromData(e){return new a(e)}};import{TransactionBlock as Fu}from"@mysten/sui.js/transactions";var lo=class a extends h{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o}=e,{list:r}=this.data,i=new Fu;console.log("build",this.data);for(let s=0;s<r.length;s++){let{assetId:c,amount:d}=r[s],l=Z(c);if(c===0){let[f]=i.splitCoins(i.gas,[d]);await Ft(i,l,f,d);continue}let u=await qt(n,o.address,l.type);if(!u.data[0])throw new Error(`Insufficient balance for ${l.name} Token`);let p=u.data[0].coinObjectId;if(u.data.length>=2){let f=1;for(;f<u.data.length;)i.mergeCoins(p,[u.data[s].coinObjectId]),f++}await Ft(i,l,i.object(p),d)}return i}static fromData(e){return new a(e)}};var uo=class{application="navi";supportSDK="@mysten/sui.js";async deserialize(t){await Gr();let{transactionBlock:e}=t,o=new eo(e).decode();return{txType:qu.Other,txSubType:o.type,intentionData:o.intentionData}}async build(t){let{suiClient:e,account:n}=t,o;switch(await Gr(),t.txSubType){case"EntryDeposit":o=io.fromData(t.intentionData);break;case"EntryBorrow":o=ro.fromData(t.intentionData);break;case"EntryRepay":o=so.fromData(t.intentionData);break;case"EntryWithdraw":o=co.fromData(t.intentionData);break;case"EntryMultiDeposit":o=lo.fromData(t.intentionData);break;case"ClaimReward":o=oo.fromData(t.intentionData);break;case"EntryClaimAndDeposit":o=ao.fromData(t.intentionData);break;default:throw new Error("not implemented")}return o.build({suiClient:e,account:n})}};import{TransactionSubTypes as $u,TransactionType as $s}from"@msafe/sui3-utils";import{fromHEX as Ku}from"@mysten/bcs";import{Transaction as Vu}from"@mysten/sui/transactions";import Qu from"sort-keys-recursive";var Ks="msafe-plain-tx",Vs=$u.others.plain,Jr=class a{constructor(t){this.data=t}application=Ks;txType=$s.Other;txSubType=Vs;serialize(){return JSON.stringify(Qu(this.data))}async build(t){return Vu.from(Ku(this.data.content))}static fromData(t){return new a(t)}},po=class{application;supportSDK="@mysten/sui";constructor(){this.application=Ks}async deserialize(t){let{content:e}=t.appContext;return{txType:$s.Other,txSubType:Vs,intentionData:{content:e}}}async build(t){let{suiClient:e,network:n,account:o}=t;return Jr.fromData(t.intentionData).build({suiClient:e,network:n,account:o})}};import{SuiClient as Qs}from"@mysten/sui/client";import{Transaction as Zu}from"@mysten/sui/transactions";import{SuiClient as Zr}from"@mysten/sui.js/client";import{TransactionBlock as tp}from"@mysten/sui.js/transactions";import{RequestManager as Ju,HTTPTransport as Yu,Client as Xu}from"@open-rpc/client-js";var Hu={"-32700":"ParseError","-32600":"InvalidRequest","-32601":"MethodNotFound","-32602":"InvalidParams","-32603":"InternalError"},Yr=class extends Error{},mo=class extends Yr{code;type;constructor(t,e){super(t),this.code=e,this.type=Hu[e]??"ServerError"}};function Gu(a){let t=new URL(a);return t.protocol=t.protocol.replace("http","ws"),t.toString()}var zu={WebSocketConstructor:typeof WebSocket<"u"?WebSocket:void 0,callTimeout:3e4,reconnectTimeout:3e3,maxReconnects:5},fo=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={...zu,...e},this.endpoint&&this.endpoint.startsWith("http")&&(this.endpoint=Gu(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 mo(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 Xr(t);return this.#r.add(e),await e.subscribe(this),()=>e.unsubscribe(this)}},Xr=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 pt=class{rpcClient;websocketClient;constructor({url:t,websocket:{url:e,...n}={},rpc:o}){let r=new Yu(o?.url??t,{headers:{"Content-Type":"application/json",...o?.headers}});this.rpcClient=new Xu(new Ju([r])),this.websocketClient=new fo(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 bo=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 ei(t))}addHelper(t){this.apps.set(t.application,new ti(t))}getAppHelper(t){let e=this.apps.get(t);if(!e)throw new Error(`${t} not registered`);return e}},ti=class{constructor(t){this.helper=t}async deserialize(t){let e=new Qs({transport:new pt({url:t.clientUrl,rpc:{url:t.clientUrl}})}),n=new Zr({transport:new pt({url:t.clientUrl,rpc:{url:t.clientUrl}})}),o=await t.transactionBlock.build({client:n}),r=Zu.from(o);return this.helper.deserialize({...t,suiClient:e,transaction:r})}async build(t){let e=new Qs({transport:new pt({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 tp.from(r)}},ei=class{constructor(t){this.helper=t}async deserialize(t){let e=new Zr({transport:new pt({url:t.clientUrl,rpc:{url:t.clientUrl}})});return this.helper.deserialize({...t,transactionBlock:t.transactionBlock,suiClient:e})}async build(t){let e=new Zr({transport:new pt({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 Ap}from"@msafe/sui3-utils";import{TransactionType as P}from"@msafe/sui3-utils";var mt=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 Hs="https://sui.apis.scallop.io";var Gs="675c65cd301dd817ea262e76",go="0xefe8b36d5b2e43728cc323298626b83177803521d195cfb11e15b910e892fddf";var ft="0x7016aae72cfc67f2fadf55769c0a7dd54291a583b63051a5ed71081cce836ac6::sca::SCA",bt="0xc63072e7f5f4983a2efaf5bdba1480d5e7d74d57948e1c7cc436f8e22cbeb410",nt=["weth","wbtc","wusdc","wusdt","sui","wapt","wsol","cetus","afsui","hasui","vsui","sca","usdc","fdusd","deep","fud"],ho=["weth","wbtc","wusdc","wusdt","sui","wapt","wsol","cetus","afsui","hasui","vsui","sca","usdc","fdusd"],gt=["sweth","ssui","swusdc","swusdt","scetus","safsui","shasui","svsui","susdc"],ot=["ssui","swusdc","swusdt","safsui","shasui","svsui","sweth","ssca","scetus","swbtc","swsol","susdc","sfdusd","sdeep","sfud"];var zs=["sui"],ht=["sui","wusdc","wusdt","afsui","hasui","vsui","weth","sca","wbtc","wsol","usdc","fdusd","deep","fud"];var Js={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 yo={sweth:"sui",ssui:"sui",swusdc:"sui",swusdt:"sui",scetus:"sui",safsui:"sui",shasui:"sui",svsui:"sui",susdc:"sui"},Ys={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"]},Xs={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"},q={weth:"0xaf8cd5edc19c4512f4259f0bee101a40d41ebed738ade5874359610ef8eeced5",wbtc:"0x027792d9fed7f9844eb4839566001bb6f6cb4804f66aa2da6fe1ee242d896881",wusdc:"0x5d4b302506645c37ff133b98c4b50a5ae14841659738d6d733d59d0d217a93bf",wusdt:"0xc060006111016b8a020ad5b33834984a437aaa7d3c74c18e09a95d48aceab08c",wapt:"0x3a5143bb1196e3bcdfab6203d1683ae29edd26294fc8bfeafe4aaa9d2704df37",wsol:"0xb7844e289a8410e50fb3ca48d69eb9cf29e27d223ef90353fe1bd8e27ff8f3f8"},ni={vsui:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55"},Zs={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 tc}from"@mysten/sui.js/bcs";import{normalizeStructTag as ep,normalizeSuiAddress as me}from"@mysten/sui.js/utils";var S=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 me(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 tc.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 me(t.value.Object.ImmOrOwned.objectId)}return me(t.value)}static getSharedObjectId(t){if(t.type!=="object")throw new Error(`not object argument: ${JSON.stringify(t)}`);if(typeof t.value!="object")return me(t.value);if(!("Object"in t.value)||!("Shared"in t.value.Object))throw new Error("not Shared");return me(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 tc.de(e,new Uint8Array(n))}typeArg(t){return ep(this.moveCall.typeArguments[t])}txArg(t){return this.moveCall.arguments[t]}};import{bcs as np}from"@mysten/sui.js/bcs";var R=class{constructor(t,e){this.splitCoin=t;this.txb=e}getAmountInput(){return this.splitCoin.amounts.map(t=>{if(t.kind==="Input")return Number(S.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 np.de(e,new Uint8Array(n))}return t.value}};var So=class extends mt{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(`${bt}::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 S(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 S(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 S(t,this.txb)}get helperClaimBorrowReward(){return this.transactions.filter(e=>e.kind==="MoveCall"&&e.target.startsWith(`${bt}::user::redeem_rewards`)).map(e=>new S(e,this.txb))}get helperMint(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.protocolPkg}::mint::mint`));return new S(t,this.txb)}get helperUnstakes(){return this.transactions.filter(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.spoolPkg}::user::unstake`)).map(e=>new S(e,this.txb))}get helperRedeems(){return this.transactions.filter(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.protocolPkg}::redeem::redeem`)).map(e=>new S(e,this.txb))}get helperRedeem(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.protocolPkg}::redeem::redeem`));return new S(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 S(t,this.txb)}get helperSlippage(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith("0x5857d185897aaff40ae37b2eecc895efc1a9dff1b210c4fb894eabbce4ac2603::slippage_check::check_slippage"));return new S(t,this.txb)}get helperStake(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.spoolPkg}::user::stake`));return new S(t,this.txb)}get helperUnstake(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.spoolPkg}::user::unstake`));return new S(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 S(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 S(t,this.txb)}get helperBorrow(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.protocolPkg}::borrow::borrow`));return new S(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 S(t,this.txb)}get helperRepay(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.protocolPkg}::repay::repay`));return new S(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 R(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 R(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 R(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 R(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 R(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 R(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(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(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 R(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 R(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 R(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 ai}from"@msafe/sui3-utils";var To=class extends mt{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 S(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 S(t,this.txb)}decodeCreateReferralLink(){return{txType:ai.Other,type:"CreateReferralLink",intentionData:{}}}decodeClaimRevenueReferral(){let t=this.helperClaimRevenueReferral[0].decodeOwnedObjectId(2),e=this.helperClaimRevenueReferral.map(n=>n.typeArg(0));return{txType:ai.Other,type:"ClaimRevenueReferral",intentionData:{veScaKey:t,coins:e}}}decodeBindReferral(){let t=this.helperBindReferral.decodePureArg(1,"address");return{txType:ai.Other,type:"BindReferral",intentionData:{veScaKey:t}}}};import{TransactionType as fe}from"@msafe/sui3-utils";var wo=class extends mt{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 S(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 S(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 S(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 S(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 S(t,this.txb)}get helperOldUnstakeObligation(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${bt}::user::unstake`));return new S(t,this.txb)}get helperUnstakeObligation(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(`${this.coreId.borrowIncentivePkg}::user::unstake`));return new S(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 S(t,this.txb)}decodeRedeemSca(){let t=this.helperRedeemSca.decodeOwnedObjectId(1);return{txType:fe.Other,type:"RedeemSca",intentionData:{veScaKey:t}}}decodeRenewExpiredVeSca(){let t=this.helperRenewExpired.getNestedInputParam(4),e=this.helperRenewExpired.decodeInputU64(5),n=new R(t,this.txb).getAmountInput().reduce((b,y)=>b+y,0),o=this.helperRenewExpired.decodeOwnedObjectId(1),r=!!this.helperRedeemSca.moveCall,i=[],s=[],c=[];this.helperOldUnstakeObligation.moveCall&&(i=[this.helperOldUnstakeObligation.decodeSharedObjectId(2),this.helperOldUnstakeObligation.decodeSharedObjectId(3)]),this.helperUnstakeObligation.moveCall&&(s=[this.helperUnstakeObligation.decodeSharedObjectId(3),this.helperUnstakeObligation.decodeSharedObjectId(4)]),this.helperStakeObligationWithVeSca.moveCall&&(c=[this.helperStakeObligationWithVeSca.decodeSharedObjectId(3),this.helperStakeObligationWithVeSca.decodeSharedObjectId(4)]);let d=!1,l=!1,u,p,f=[{condition:i,isOld:!0},{condition:s,isOld:!1},{condition:c,isOld:!1}];for(let b=0;b<f.length;b++)f[b].condition.length>1&&([p,u]=f[b].condition,d=!0,l=f[b].isOld);return{txType:fe.Other,type:"RenewExpStakePeriod",intentionData:{amount:n,lockPeriodInDays:e,obligationId:u,obligationKey:p,veScaKey:o,isHaveRedeem:r,isObligationLocked:d,isOldBorrowIncentive:l}}}decodeExtendStakePeriod(){let t=this.helperExtendStakePeriod.decodeInputU64(4),e=this.helperExtendStakePeriod.decodeOwnedObjectId(1),n=[],o=[],r=[];this.helperOldUnstakeObligation.moveCall&&(n=[this.helperOldUnstakeObligation.decodeSharedObjectId(2),this.helperOldUnstakeObligation.decodeSharedObjectId(3)]),this.helperUnstakeObligation.moveCall&&(o=[this.helperUnstakeObligation.decodeSharedObjectId(3),this.helperUnstakeObligation.decodeSharedObjectId(4)]),this.helperStakeObligationWithVeSca.moveCall&&(r=[this.helperStakeObligationWithVeSca.decodeSharedObjectId(3),this.helperStakeObligationWithVeSca.decodeSharedObjectId(4)]);let i=!1,s=!1,c,d,l=[{condition:n,isOld:!0},{condition:o,isOld:!1},{condition:r,isOld:!1}];for(let u=0;u<l.length;u++)l[u].condition.length>1&&([d,c]=l[u].condition,i=!0,s=l[u].isOld);return{txType:fe.Other,type:"ExtendStakePeriod",intentionData:{lockPeriodInDays:t,obligationId:c,obligationKey:d,veScaKey:e,isObligationLocked:i,isOldBorrowIncentive:s}}}decodePeriodAndStakeMoreSca(){let t=this.helperStakeMoreSca.getNestedInputParam(4),e=this.helperExtendStakePeriod.decodeInputU64(4),n=new R(t,this.txb).getAmountInput().reduce((f,b)=>f+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,d=!1,l,u,p=[{condition:o,isOld:!0},{condition:r,isOld:!1},{condition:s,isOld:!1}];for(let f=0;f<p.length;f++)p[f].condition.length>1&&([u,l]=p[f].condition,c=!0,d=p[f].isOld);return{txType:fe.Other,type:"ExtendPeriodAndStakeMore",intentionData:{amount:n,veScaKey:i,lockPeriodInDays:e,obligationId:l,obligationKey:u,isOldBorrowIncentive:d,isObligationLocked:c}}}decodeStakeSca(){let t,e;this.helperStakeSca.moveCall&&this.helperStakeMoreSca.moveCall===void 0?(t=this.helperStakeSca.getNestedInputParam(3),e=this.helperStakeSca.decodeInputU64(4)):t=this.helperStakeMoreSca.getNestedInputParam(4);let n=new R(t,this.txb).getAmountInput().reduce((f,b)=>f+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,d=!1,l,u,p=[{condition:o,isOld:!0},{condition:r,isOld:!1},{condition:s,isOld:!1}];for(let f=0;f<p.length;f++)p[f].condition.length>1&&([u,l]=p[f].condition,c=!0,d=p[f].isOld);return{txType:fe.Other,type:"StakeSca",intentionData:{amount:n,lockPeriodInDays:e,obligationId:l,obligationKey:u,veScaKey:i,isObligationLocked:c,isOldBorrowIncentive:d}}}};import op from"sort-keys-recursive";var g=class{constructor(t){this.data=t}get application(){return"msafe-core"}serialize(){return JSON.stringify(op(this.data))}};var Co=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 Io=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 ko=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 Do=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 xo=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 vo=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 Ao=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 Po=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 Oo=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 Ro=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 _o=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 Bo=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 Mo=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 Eo=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 No=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 jo=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 Wo=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 Lo=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 Uo=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 Fo=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 qo=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 $o=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 Ko=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 Vo=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 Qo=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 Ho=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 Go=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 zo=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(`${Hs}/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 C}from"@mysten/sui.js/transactions";import Pc from"bignumber.js";import{TransactionBlock as ap}from"@mysten/sui.js/transactions";var Jo=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 ap(t)}async selectCoin(t,e,n,o=this.params.walletAddress){let r=this.utils.parseCoinType(e),i=await this.utils.selectCoinIds(n,r,o),[s,c]=this.utils.takeAmountFromCoins(t,i,n);return{takeCoin:s,leftCoin:c}}async selectMarketCoin(t,e,n,o=this.params.walletAddress){let r=this.utils.parseMarketCoinType(e),i=await this.utils.selectCoins(n,r,o),s=i.reduce((u,p)=>(u+=Number(p.balance),u),0),c=i.map(u=>u.objectId),[d,l]=this.utils.takeAmountFromCoins(t,c,Math.min(n,s));return{takeCoin:d,leftCoin:l,totalAmount:s}}async selectSCoin(t,e,n,o=this.params.walletAddress){let r=this.utils.parseSCoinType(e),i=await this.utils.selectCoins(n,r,o),s=i.map(u=>u.objectId),c=i.reduce((u,p)=>u+Number(p.balance),0),[d,l]=this.utils.takeAmountFromCoins(t,s,Math.min(c,n));return{takeCoin:d,leftCoin:l,totalAmount:c}}};import{TransactionBlock as rp}from"@mysten/sui.js/transactions";import Yo from"bignumber.js";var $t=async(a,t)=>{let e=t,n=a.address.get("core.object")||go,o=[],r=!1,i=null;do{let l=await a.client.getOwnedObjects({owner:e,filter:{StructType:`${n}::obligation::ObligationKey`},cursor:i});o.push(...l.data),l.hasNextPage&&l.nextCursor?(r=!0,i=l.nextCursor):r=!1}while(r);let s=o.map(l=>l?.data?.objectId).filter(l=>l!==void 0),c=await a.client.multiGetObjects({ids:s,options:{showContent:!0,showType:!0}}),d=[];for(let l=0;l<c.length;l++){let u=c[l].data.objectId,{content:p}=c[l].data;if(p&&"fields"in p){let f=p.fields,b=String(f.ownership.fields.of),y=await ri(a,b);d.push({id:b,keyId:u,locked:y})}}return d},ri=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},ec=async(a,t,e)=>{let n=e||[...nt],o=t,r=[],i=!1,s=null;do{let l=await a.client.getOwnedObjects({owner:o,filter:{MatchAny:n.map(u=>({StructType:`0x2::coin::Coin<${a.utils.parseCoinType(u)}>`}))},options:{showType:!0,showContent:!0},cursor:s});r.push(...l.data),l.hasNextPage&&l.nextCursor?(i=!0,s=l.nextCursor):i=!1}while(i);let c={};return r.map(l=>l.data).filter(l=>l!=null).forEach(l=>{let u=l.type;if(l.content&&"fields"in l.content){let p=l.content.fields,f=a.utils.parseCoinNameFromType(u);f&&(c[f]=Yo(c[f]??0).plus(p.balance).toNumber())}}),c},nc=async(a,t,e)=>{let n=e,o=a.utils.parseCoinType(t),r=[],i=!1,s=null;do{let l=await a.client.getOwnedObjects({owner:n,filter:{StructType:`0x2::coin::Coin<${o}>`},options:{showContent:!0},cursor:s});r.push(...l.data),l.hasNextPage&&l.nextCursor?(i=!0,s=l.nextCursor):i=!1}while(i);let c=0;return r.map(l=>l.data).filter(l=>l!=null).forEach(l=>{if(l.content&&"fields"in l.content){let u=l.content.fields;c=Yo(c).plus(u.balance).toNumber()}}),c},oc=async(a,t,e)=>{let n=e||[...nt].map(l=>a.utils.parseMarketCoinName(l)),o=t,r=[],i=!1,s=null;do{let l=await a.client.getOwnedObjects({owner:o,filter:{MatchAny:n.map(u=>({StructType:`0x2::coin::Coin<${a.utils.parseMarketCoinType(u)}>`}))},options:{showType:!0,showContent:!0},cursor:s});r.push(...l.data),l.hasNextPage&&l.nextCursor?(i=!0,s=l.nextCursor):i=!1}while(i);let c={};return r.map(l=>l.data).filter(l=>l!=null).forEach(l=>{let u=l.type;if(l.content&&"fields"in l.content){let p=l.content.fields,f=a.utils.parseCoinNameFromType(u);f&&(c[f]=Yo(c[f]??0).plus(p.balance).toNumber())}}),c},ac=async(a,t,e)=>{let n=e,o=a.utils.parseMarketCoinType(t),r=[],i=!1,s=null;do{let l=await a.client.getOwnedObjects({owner:n,filter:{StructType:`0x2::coin::Coin<${o}>`},options:{showContent:!0},cursor:s});r.push(...l.data),l.hasNextPage&&l.nextCursor?(i=!0,s=l.nextCursor):i=!1}while(i);let c=0;return r.map(l=>l.data).filter(l=>l!=null).forEach(l=>{if(l.content&&"fields"in l.content){let u=l.content.fields;c=Yo(c).plus(u.balance).toNumber()}}),c},rc=async(a,t)=>{let n=`${a.address.get("core.packages.query.id")}::obligation_query::obligation_data`,o=new rp;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 w}from"@mysten/sui.js/utils";var be=async(a,t)=>{let e=t,n=a.address.get("spool.object"),o=`${n}::spool_account::SpoolAccount`,r=[],i=!1,s=null;do{let p=await a.client.getOwnedObjects({owner:e,filter:{StructType:o},options:{showContent:!0,showType:!0},cursor:s});r.push(...p.data),p.hasNextPage&&p.nextCursor?(i=!0,s=p.nextCursor):i=!1}while(i);let c={sweth:[],ssui:[],susdc:[],swusdc:[],swusdt:[],scetus:[],safsui:[],shasui:[],svsui:[]},d=Object.keys(c).reduce((p,f)=>{let b=a.utils.parseCoinName(f),y=a.utils.parseMarketCoinType(b),T={...p},D=`${n}::spool_account::SpoolAccount<${y}>`;return T[f]=D,T},{}),l=r.map(p=>p?.data?.objectId).filter(p=>p!==void 0);return(await a.client.multiGetObjects({ids:l,options:{showContent:!0,showType:!0}})).forEach(p=>{let f=p.data.objectId,b=p.data.type;if(p.data.content&&"fields"in p.data.content){let y=p.data.content.fields,T=String(y.spool_id),D=String(y.stake_type.fields.name),L=Number(y.stakes),_=Number(y.index),$=Number(y.points),U=Number(y.total_points);w(b)===d.sweth?c.sweth.push({id:f,type:w(b),stakePoolId:T,stakeType:w(D),staked:L,index:_,points:$,totalPoints:U}):w(b)===d.ssui?c.ssui.push({id:f,type:w(b),stakePoolId:T,stakeType:w(D),staked:L,index:_,points:$,totalPoints:U}):w(b)===d.swusdc?c.swusdc.push({id:f,type:w(b),stakePoolId:T,stakeType:w(D),staked:L,index:_,points:$,totalPoints:U}):w(b)===d.swusdt?c.swusdt.push({id:f,type:w(b),stakePoolId:T,stakeType:w(D),staked:L,index:_,points:$,totalPoints:U}):w(b)===d.scetus?c.scetus.push({id:f,type:w(b),stakePoolId:T,stakeType:w(D),staked:L,index:_,points:$,totalPoints:U}):w(b)===d.safsui?c.safsui.push({id:f,type:w(b),stakePoolId:T,stakeType:w(D),staked:L,index:_,points:$,totalPoints:U}):w(b)===d.shasui?c.shasui.push({id:f,type:w(b),stakePoolId:T,stakeType:w(D),staked:L,index:_,points:$,totalPoints:U}):w(b)===d.svsui?c.svsui.push({id:f,type:w(b),stakePoolId:T,stakeType:w(D),staked:L,index:_,points:$,totalPoints:U}):w(b)===d.susdc&&c.susdc.push({id:f,type:w(b),stakePoolId:T,stakeType:w(D),staked:L,index:_,points:$,totalPoints:U})}}),c},ii=async(a,t)=>{let e=a.address.get(`spool.pools.${t}.id`),n,o=await a.client.getObject({id:e,options:{showContent:!0,showType:!0}});if(o.data){let r=o.data,i=r.objectId,s=r.type;if(r.content&&"fields"in r.content){let c=r.content.fields,d=Number(c.max_distributed_point),l=Number(c.distributed_point),u=Number(c.distributed_point_per_period),p=Number(c.point_distribution_time),f=Number(c.max_stakes),b=String(c.stake_type.fields.name),y=Number(c.stakes),T=Number(c.index),D=Number(c.created_at),L=Number(c.last_update);n={id:i,type:w(s),maxPoint:d,distributedPoint:l,pointPerPeriod:u,period:p,maxStake:f,stakeType:w(b),totalStaked:y,index:T,createdAt:D,lastUpdate:L}}}return n},si=async(a,t)=>{let e=a.address.get(`spool.pools.${t}.rewardPoolId`),n,o=await a.client.getObject({id:e,options:{showContent:!0,showType:!0}});if(o.data){let r=o.data,i=r.objectId,s=r.type;if(r.content&&"fields"in r.content){let c=r.content.fields,d=String(c.spool_id),l=Number(c.exchange_rate_numerator),u=Number(c.exchange_rate_denominator),p=Number(c.rewards),f=Number(c.claimed_rewards);n={id:i,type:w(s),stakePoolId:d,ratioNumerator:l,ratioDenominator:u,rewards:p,claimedRewards:f}}}return n};import{TransactionBlock as cp}from"@mysten/sui.js/transactions";import{normalizeStructTag as Xv}from"@mysten/sui.js/utils";import tA from"bignumber.js";var E=a=>{let{sender:t}=a.blockData;if(!t)throw new Error("Sender is required");return t},cc=(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(Kt(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)`)}},lc=(a,t,e)=>{if(Kt(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)`)},dc=(a,t)=>{if(Kt(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")},uc=(a,t,e)=>{if(Kt(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)`)},Kt=a=>{if(a===void 0)throw new Error("veSca not found")};import{normalizeStructTag as pc,parseStructTag as ip}from"@mysten/sui.js/utils";import Fv from"bignumber.js";var sp=a=>({pointType:pc(a.point_type.name),weightedAmount:Number(a.weighted_amount),points:Number(a.points),totalPoints:Number(a.total_points),index:Number(a.index)}),mc=a=>({poolType:pc(a.pool_type.name),debtAmount:Number(a.debt_amount),pointList:a.points_list.reduce((t,e)=>{let n=sp(e),o=ip(n.pointType).name.toLowerCase();return t[o]=n,t},{})});var Zo=a=>{let t=a.slice(1).toLowerCase();return a.charAt(0).toLowerCase()==="s"&&[...new Set([...nt,...ho,...zs])].includes(t)},ci=a=>{switch(a){case"afsui":return"afSUI";case"hasui":return"haSUI";case"vsui":return"vSUI";default:return a.toUpperCase()}},fc=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 bc=async(a,t,e,n)=>{let o=n||[...ht],r=a.address.get("borrowIncentive.query"),i=a.address.get("borrowIncentive.incentiveAccounts"),s=`${r}::incentive_account_query::incentive_account_data`,c=new cp;c.moveCall({target:s,arguments:[c.object(i),c.object(t)]});let l=(await a.client.devInspectTransactionBlock({transactionBlock:c,sender:e})).events[0].parsedJson,u={};return l.pool_records.forEach(p=>{let f=mc(p),{poolType:b}=f,y=a.utils.parseCoinNameFromType(b);o.length>=1&&o.includes(y)&&(u[y]=f)},{}),u};var gc=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 hc=async(a,t)=>{let e=a.address.get(`core.coins.${t}.oracle.pyth.feedObject`),n=await a.client.getObject({id:e,options:{showContent:!0}});if(n.data){let o=n.data;if(o.content&&"fields"in o.content){let r=o.content.fields,i=Number(r.price_info.fields.price_feed.fields.price.fields.expo.fields.magnitude),s=Number(r.price_info.fields.price_feed.fields.price.fields.expo.fields.negative),c=Number(r.price_info.fields.price_feed.fields.price.fields.price.fields.magnitude),d=Number(r.price_info.fields.price_feed.fields.price.fields.price.fields.negative);return c*10**((s?-1:1)*i)*(d?-1:1)}}return 0};import li from"bignumber.js";var yc=async(a,t)=>{let e=t,o=`${a.address.get("vesca.id")}::ve_sca::VeScaKey`,r=[],i=!1,s=null;do{let d=await a.client.getOwnedObjects({owner:e,filter:{StructType:o},cursor:s});r.push(...d.data),d.hasNextPage&&d.nextCursor?(i=!0,s=d.nextCursor):i=!1}while(i);return r.map(d=>d.data).filter(d=>!!d)},Sc=async(a,t)=>{let n=(await yc(a,t)).map(r=>r.objectId),o=[];for(let r=0;r<n.length;r++){let i=await di(a,n[r]);i&&o.push(i)}return o},di=async(a,t,e)=>{let n=a.address.get("vesca.tableId"),o=t||(await yc(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:li(c.locked_sca_amount).toNumber(),lockedScaCoin:li(c.locked_sca_amount).shiftedBy(-9).toNumber(),unlockAt:li(c.unlock_at).toNumber()}}return r};var ta=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 $t(this,t)}async getCoinAmounts(t,e){return ec(this,t,e)}async getCoinAmount(t,e=this.params.walletAddress){return nc(this,t,e)}async getMarketCoinAmounts(t,e){return oc(this,t,e)}async getMarketCoinAmount(t,e=this.params.walletAddress){return ac(this,t,e)}async getPriceFromPyth(t){return hc(this,t)}async getAllStakeAccounts(t=this.params.walletAddress){return be(this,t)}async getStakeAccounts(t,e=this.params.walletAddress){return(await this.getAllStakeAccounts(e))[t]??[]}async getStakePools(t=[...gt]){let e={};for(let n=0;n<t.length;n++){let o=t[n],r=await ii(this,o);r&&(e[o]=r)}return e}async getStakePool(t){return ii(this,t)}async getStakeRewardPools(t=[...gt]){let e={};for(let n=0;n<t.length;n++){let o=await si(this,t[n]);o&&(e[t[n]]=o)}return e}async getStakeRewardPool(t){return si(this,t)}async getBorrowIncentiveAccounts(t,e=this.params.walletAddress,n){return bc(this,t,e,n)}async getObligationCoinNames(t){let e=await rc(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 ui,normalizeStructTag as lp}from"@mysten/sui.js/utils";var ea=class{params;isTestnet;_address;client;constructor(t,e){this.params=t,this.client=t.client,this._address=e}parseSymbol(t){if(Zo(t)){let e=t.slice(1).toLowerCase();return t.slice(0,1).toLowerCase()+ci(e)}return ci(t)}parseCoinType(t){let e=Zo(t)?this.parseCoinName(t):t,n=Xs[e];return[q.wusdc,q.wusdt,q.weth,q.wbtc,q.wsol,q.wapt].includes(n)?`${n}::coin::COIN`:t==="vsui"?`${ni.vsui}::cert::CERT`:`${n}::${e}::${e.toUpperCase()}`}parseMarketCoinType(t){let e=this._address.get("core.object")||go,n=this.parseCoinType(t);return`${e}::reserve::MarketCoin<${n}>`}parseCoinNameFromType(t){let e=lp(t),n=/((0x[^:]+::[^:]+::[^<>]+))(?![^<>]*<)/,o=t.match(n),r=t.includes("reserve::MarketCoin");e=o?.[1]||t;let i={[`${q.wusdc}::coin::COIN`]:"wusdc",[`${q.wusdt}::coin::COIN`]:"wusdt",[`${q.weth}::coin::COIN`]:"weth",[`${q.wbtc}::coin::COIN`]:"wbtc",[`${q.wsol}::coin::COIN`]:"wsol",[`${q.wapt}::coin::COIN`]:"wapt"},s={[`${ni.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=>yo[t];getBorrowIncentiveRewardCoinName=t=>Ys[t];getCoinDecimal(t){return Js[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 Zs[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=ui,n){let o=n,r=[],i=0,s=!0,c=null;for(;s&&i<t;){let d=await this.client.getCoins({owner:o,coinType:e,cursor:c});d.data.sort((l,u)=>parseInt(u.balance,10)-parseInt(l.balance,10));for(let l=0;l<d.data.length&&(r.push({objectId:d.data[l].coinObjectId,digest:d.data[l].digest,version:d.data[l].version,balance:d.data[l].balance}),i+=parseInt(d.data[l].balance,10),!(i>=t));l++);c=d.nextCursor,s=d.hasNextPage}if(!r.length)throw new Error("No valid coins found for the transaction.");return r}async selectCoinsMarketCoin(t=ui,e){let n=e,o=[],r=!0,i=null;for(;r;){let s=await this.client.getCoins({owner:n,coinType:t,cursor:i});s.data.sort((c,d)=>parseInt(d.balance,10)-parseInt(c.balance,10));for(let c=0;c<s.data.length&&(o.push({objectId:s.data[c].coinObjectId,digest:s.data[c].digest,version:s.data[c].version,balance:s.data[c].balance}),!(o.length>50));c++);i=s.nextCursor,r=s.hasNextPage}return o}async selectCoinIds(t,e=ui,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 fc(r)}parseSCoinName(t){if(Zo(t)&&ot.includes(t))return t;let e=`s${t}`;if(ot.includes(e))return e}};import{SUI_CLOCK_OBJECT_ID as Vt,SUI_TYPE_ARG as dp}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 di(t.query,n);return i||void 0}let o=E(e),r=await Sc(t.query,o);if(r.length!==0)return r[0]};var pi=async(...a)=>{let[t,e,n,o]=a;if(a.length===4&&n&&o&&typeof n=="string"){let c=await ri(t.query,n);return{obligationId:n,obligationKey:o,obligationLocked:c}}let r=E(e),i=await $t(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}},up=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(Vt)]})},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(Vt)]})},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(Vt)]})},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(Vt)],typeArguments:[dp]})},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(Vt)],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(Vt)],typeArguments:[c]})}}},N=async({builder:a,txBlock:t})=>{let e=await up({builder:a,txBlock:t});return{normalMethod:e,stakeObligationQuick:async(n,o)=>{let{obligationId:r,obligationKey:i,obligationLocked:s}=await pi(a,t,n,o),c=!!t.blockData.transactions.find(d=>d.kind==="MoveCall"&&(d.target===`${bt}::user::unstake`||d.target===`${a.address.get("borrowIncentive.id")}::user::unstake`));(!s||c)&&e.stakeObligation(r,i)},unstakeObligationQuick:async(n,o)=>{let{obligationId:r,obligationKey:i,obligationLocked:s}=await pi(a,t,n,o);s&&e.unstakeObligation(r,i)},stakeObligationWithVeScaQuick:async(n,o,r)=>{let{obligationId:i,obligationKey:s,obligationLocked:c}=await pi(a,t,n,o),d=!!t.blockData.transactions.find(async l=>l.kind==="MoveCall"&&(l.target===`${bt}::user::unstake`||l.target===`${a.address.get("borrowIncentive.id")}::user::unstake`));if(!c||d){let l=await gc({address:a.address,client:a.client},i);if(r&&r!==l)throw new Error("Binded veScaKey is not equal to the provided veScaKey");l?e.stakeObligationWithVesca(i,s,l):e.stakeObligation(i,s)}},claimBorrowIncentiveQuick:(n,o,r)=>e.claimBorrowIncentive(o,r,n)}};import{SUI_CLOCK_OBJECT_ID as rt}from"@mysten/sui.js/utils";import{SUI_CLOCK_OBJECT_ID as aa}from"@mysten/sui.js/utils";import pp from"axios";var Tc={testnet:["https://hermes-beta.pyth.network"],mainnet:["https://hermes.pyth.network","https://scallop.rpc.p2p.world"]};import{bcs as mi}from"@mysten/sui.js/bcs";import{SUI_CLOCK_OBJECT_ID as na}from"@mysten/sui.js/utils";var fi=16*1024,oa=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(mi.ser("vector<u8>",Array.from(r),{maxSize:fi}).toBytes()),e.object(na)]});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(mi.ser("vector<u8>",Array.from(e[0]),{maxSize:fi}).toBytes()),s[0],t.object(na)]});let c=[],d=await this.getBaseUpdateFee(),l=t.splitCoins(t.gas,n.map(()=>t.pure(d))),u=0;for(let p=0;p<n.length;p++){let f=await this.getPriceFeedObjectId(n[p]);if(!f)throw new Error(`Price feed ${n[0]} not found, please create it first`);c.push(f),[r]=t.moveCall({target:`${o}::pyth::update_single_price_feed`,arguments:[t.object(this.pythStateId),r,t.object(f),l[u],t.object(na)]}),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(mi.ser("vector<u8>",Array.from(e[0]),{maxSize:fi}).toBytes()),r[0],t.object(na)]})}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 mp=async(a,t)=>(await pp.get(`${a}/api/latest_vaas`,{params:{ids:t}})).data.map(o=>Buffer.from(o,"base64")),ge=async(a,t,e)=>{let n=e??[...new Set([...nt,...ho])],o=a.isTestnet?["pyth"]:["pyth"];if(o.includes("pyth")){let i=new oa(a.client,a.address.get("core.oracles.pyth.state"),a.address.get("core.oracles.pyth.wormholeState")),s=[];await Promise.all(n.map(async d=>s.push(a.address.get(`core.coins.${d}.oracle.pyth.feed`))));let c=a.params.pythEndpoints??Tc[a.isTestnet?"testnet":"mainnet"];try{let d=await mp(c[0],s);await i.updatePriceFeeds(t,d,s)}catch(d){console.warn(`Failed to update price feeds with endpoint ${c[0]}: ${d}`)}}let r=[...new Set(n)];for(let i=0;i<r.length;i++)await fp(a,t,r[i],o)},fp=async(a,t,e,n)=>{let o=a.utils.parseCoinType(e);bp(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)},bp=(a,t,e,n,o,r,i,s,c,d,l,u,p,f,b)=>{let y=gp(a,e,n,b);return t.includes("pyth")&&Tp(a,o,y,i,s,r,b),t.includes("switchboard")&&Sp(a,c,y,l,d,b),t.includes("supra")&&yp(a,u,y,f,p,b),hp(a,e,n,y,b),a},gp=(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})},hp=(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(aa)],typeArguments:i}),a},yp=(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(aa)],typeArguments:[r]})},Sp=(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(aa)],typeArguments:[r]})},Tp=(a,t,e,n,o,r,i)=>{let s=typeof e=="string"?a.object(e):e,c=typeof n=="string"?a.object(n):n,d=typeof o=="string"?a.object(o):o,l=typeof r=="string"?a.object(r):r;a.moveCall({target:`${t}::rule::set_price`,arguments:[s,c,d,l,a.object(aa)],typeArguments:[i]})};var St=async({builder:a,txBlock:t})=>{let e={pkgId:a.address.get("scoin.id")},n={};return await Promise.all(ot.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 he=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=E(t),i=await $t(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}},wp=async({builder:a,txBlock:t})=>{let e={protocolPkg:a.address.get("core.packages.protocol.id"),market:a.address.get("core.market"),version:a.address.get("core.version"),coinDecimalsRegistry:a.address.get("core.coinDecimalsRegistry"),xOracle:a.address.get("core.oracles.xOracle")},o=`${a.address.get("referral.id")}::scallop_referral_program::REFERRAL_WITNESS`;return{openObligation:()=>t.moveCall({target:`${e.protocolPkg}::open_obligation::open_obligation`,arguments:[t.object(e.version)]}),returnObligation:(r,i)=>t.moveCall({target:`${e.protocolPkg}::open_obligation::return_obligation`,arguments:[t.object(e.version),t.object(r),t.object(i)]}),openObligationEntry:()=>t.moveCall({target:`${e.protocolPkg}::open_obligation::open_obligation_entry`,arguments:[t.object(e.version)]}),addCollateral:(r,i,s)=>{let c=a.utils.parseCoinType(s);return t.moveCall({target:`${e.protocolPkg}::deposit_collateral::deposit_collateral`,arguments:[t.object(e.version),t.object(r),t.object(e.market),typeof i!="string"?i:t.pure(i)],typeArguments:[c]})},takeCollateral:(r,i,s,c)=>{let d=a.utils.parseCoinType(c);return t.moveCall({target:`${e.protocolPkg}::withdraw_collateral::withdraw_collateral`,arguments:[t.object(e.version),t.object(r),t.object(i),t.object(e.market),t.object(e.coinDecimalsRegistry),t.pure(s),t.object(e.xOracle),t.object(rt)],typeArguments:[d]})},deposit:(r,i)=>{let s=a.utils.parseCoinType(i);return t.moveCall({target:`${e.protocolPkg}::mint::mint`,arguments:[t.object(e.version),t.object(e.market),typeof r!="string"?r:t.pure(r),t.object(rt)],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(rt)],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(rt)],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(rt)],typeArguments:[s]})},borrow:(r,i,s,c)=>{let d=a.utils.parseCoinType(c);return t.moveCall({target:`${e.protocolPkg}::borrow::borrow`,arguments:[t.object(e.version),t.object(r),t.object(i),t.object(e.market),t.object(e.coinDecimalsRegistry),t.pure(s),t.object(e.xOracle),t.object(rt)],typeArguments:[d]})},borrowEntry:(r,i,s,c)=>{let d=a.utils.parseCoinType(c);return t.moveCall({target:`${e.protocolPkg}::borrow::borrow_entry`,arguments:[t.object(e.version),t.object(r),t.object(i),t.object(e.market),t.object(e.coinDecimalsRegistry),t.pure(s),t.object(e.xOracle),t.object(rt)],typeArguments:[d]})},borrowWithReferral:(r,i,s,c,d)=>{let l=a.utils.parseCoinType(d);return t.moveCall({target:`${e.protocolPkg}::borrow::borrow_with_referral`,arguments:[t.object(e.version),t.object(r),t.object(i),t.object(e.market),t.object(e.coinDecimalsRegistry),t.object(s),t.pure(c),t.object(e.xOracle),t.object(rt)],typeArguments:[l,o]})},repay:(r,i,s)=>{let c=a.utils.parseCoinType(s);return t.moveCall({target:`${e.protocolPkg}::repay::repay`,arguments:[t.object(e.version),t.object(r),t.object(e.market),typeof i!="string"?i:t.pure(i),t.object(rt)],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]})}}},j=async({builder:a,txBlock:t})=>{let e=await wp({builder:a,txBlock:t}),n=await St({builder:a,txBlock:t});return{normalMethod:e,addCollateralQuick:async(o,r,i)=>{let s=E(t),{obligationId:c}=await he(t,a,i);if(r==="sui"){let[d]=t.splitCoins(t.gas,[o]);e.addCollateral(c,d,r)}else{let{leftCoin:d,takeCoin:l}=await a.selectCoin(t,r,o,s);e.addCollateral(c,l,r),t.transferObjects([d],s)}},takeCollateralQuick:async(o,r,i,s)=>{let c=await he(t,a,i,s),d=await a.query.getObligationCoinNames(c.obligationId);return await ge(a,t,d),e.takeCollateral(c.obligationId,c.obligationKey,o,r)},depositQuick:async(o,r,i)=>{if(r==="sui"){let[d]=t.splitCoins(t.gas,[o]);return e.deposit(d,r)}let{leftCoin:s,takeCoin:c}=await a.selectCoin(t,r,o,i);return t.transferObjects([s],i),e.deposit(c,r)},withdrawQuick:async(o,r)=>{let i=E(t),s=a.utils.parseMarketCoinName(r);try{let c=a.utils.parseSCoinName(r);if(!c)throw new Error(`No sCoin for ${r}`);let{leftCoin:d,takeCoin:l,totalAmount:u}=await a.selectSCoin(t,c,o,i);t.transferObjects([d],i);let p=n.burnSCoin(c,l),f=e.withdraw(p,r),b=o-u;try{if(b>0){let{leftCoin:y,takeCoin:T}=await a.selectMarketCoin(t,s,b,i);t.transferObjects([y],i),t.mergeCoins(f,[e.withdraw(T,r)])}}catch{}return f}catch{let{leftCoin:d,takeCoin:l}=await a.selectMarketCoin(t,s,o,i);return t.transferObjects([d],i),e.withdraw(l,r)}},borrowQuick:async(o,r,i,s)=>{let c=await he(t,a,i,s),l=[...await a.query.getObligationCoinNames(c.obligationId),r];return await ge(a,t,l),e.borrow(c.obligationId,c.obligationKey,o,r)},borrowWithReferralQuick:async(o,r,i,s,c)=>{let d=await he(t,a,s,c),u=[...await a.query.getObligationCoinNames(d.obligationId),r];return await ge(a,t,u),e.borrowWithReferral(d.obligationId,d.obligationKey,i,o,r)},repayQuick:async(o,r,i,s)=>{let c=await he(t,a,i);if(r==="sui"){let[u]=t.splitCoins(t.gas,[o]);return e.repay(c.obligationId,u,r)}let{leftCoin:d,takeCoin:l}=await a.selectCoin(t,r,o,s);return t.transferObjects([d],s),e.repay(c.obligationId,l,r)},updateAssetPricesQuick:async o=>ge(a,t,o)}};import{SUI_CLOCK_OBJECT_ID as ra}from"@mysten/sui.js/utils";var ia=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(ra)],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(ra)],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(ra)],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(ra)],typeArguments:[i]})}}},wc=async({builder:a,txBlock:t})=>{let e=await ia({builder:a,txBlock:t});return{claimReferralRevenueQuick:async(n,o,r=[...nt])=>{let i=[];for(let s=0;s<r.length;s++)if(r[s]==="sui"){let c=e.claimReferralRevenue(n,r[s]);i.push(c)}else{let c=e.claimReferralRevenue(n,r[s]);try{let d=await a.utils.selectCoinIds(1/0,a.utils.parseCoinType(r[s]),o);t.mergeCoins(c,d.slice(0,500))}catch{}finally{i.push(c)}}i.length>0&&t.transferObjects(i,t.pure(o))}}};var Cp={packageId:"0x5857d185897aaff40ae37b2eecc895efc1a9dff1b210c4fb894eabbce4ac2603"},Cc={check_slippage:(a,t,e,n,o)=>a.moveCall({target:`${Cp.packageId}::slippage_check::check_slippage`,arguments:[t,a.pure(e),a.pure(n)],typeArguments:[o]})};import{SUI_CLOCK_OBJECT_ID as sa}from"@mysten/sui.js/utils";var Ic=async(a,t,e,n,o,r,i=!1)=>{let s=await St({builder:a,txBlock:t}),c=await Dc({builder:a,txBlock:t});try{let{takeCoin:d,leftCoin:l,totalAmount:u}=i?await a.selectSCoin(t,n,o,r):await a.selectMarketCoin(t,n,o,r);if(i){let p=s.burnSCoin(n,d);c.stake(e,p,n)}else c.stake(e,d,n);return t.transferObjects([l],r),u}catch{return 0}},kc=async(...a)=>{let[t,e,n,o]=a;if(a.length===4&&o)return[o];let r=E(e);return(await be(t.query,r))[n].map(s=>s.id)},Ip=async(...a)=>{let[t,e,n,o]=a,r=E(e),i=await be(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]},Dc=async({builder:a,txBlock:t})=>{let e={spoolPkg:a.address.get("spool.id")},n={},o={},r={};return gt.forEach(i=>{let s=a.address.get(`spool.pools.${i}.id`),c=a.address.get(`spool.pools.${i}.rewardPoolId`),d=a.utils.parseMarketCoinType(i);n[i]=s,o[i]=c,r[i]=d}),{createStakeAccount:i=>{let s=r[i],c=n[i];return t.moveCall({target:`${e.spoolPkg}::user::new_spool_account`,arguments:[t.object(c),t.object(sa)],typeArguments:[s]})},stake:(i,s,c)=>{let d=r[c],l=n[c];t.moveCall({target:`${e.spoolPkg}::user::stake`,arguments:[t.object(l),t.object(i),typeof s=="string"?t.pure(s):s,t.object(sa)],typeArguments:[d]})},unstake:(i,s,c)=>{let d=r[c],l=n[c];return t.moveCall({target:`${e.spoolPkg}::user::unstake`,arguments:[t.object(l),t.object(i),t.pure(s),t.object(sa)],typeArguments:[d]})},claim:(i,s)=>{let c=n[s],d=o[s],l=r[s],u=yo[s],p=a.utils.parseCoinType(u);return t.moveCall({target:`${e.spoolPkg}::user::redeem_rewards`,arguments:[t.object(c),t.object(d),t.object(i),t.object(sa)],typeArguments:[l,p]})}}},it=async({builder:a,txBlock:t})=>{let e=await Dc({builder:a,txBlock:t}),n=await St({builder:a,txBlock:t});return{normalMethod:e,stakeQuick:async(o,r,i)=>{let s=E(t),c=await kc(a,t,r,i),d=[];if(c.length===0){let l=e.createStakeAccount(r);d.push(l)}if(typeof o=="number"){let l=await Ic(a,t,c.length>0?c[0]:d[0],r,o,s);o-=l,l||await Ic(a,t,c.length>0?c[0]:d[0],r,o,s,!0)}else e.stake(c.length>0?c[0]:d[0],o,r);d.length>0&&t.transferObjects(d,s)},unstakeQuick:async(o,r,i,s)=>{let c=await Ip(a,t,r,i),d=[],l=o;for(let u of c){if(u.staked===0)continue;let p=Math.min(l,u.staked),f=e.unstake(u.id,p,r);if(s){let b=n.mintSCoin(r,f);d.push(b)}else d.push(f);if(l-=p,o<=0)break}if(d.length>0){let u=d[0];return d.length>1&&t.mergeCoins(u,d.slice(1)),u}},claimQuick:async(o,r)=>{let i=await kc(a,t,o,r),s=[];return i.forEach(c=>{let d=e.claim(c,o);s.push(d)}),s}}};import{SUI_CLOCK_OBJECT_ID as ye}from"@mysten/sui.js/utils";var kp=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(ye)]}),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(ye)]})},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(ye)]})},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(ye)]})},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(ye)]}),mintEmptyVeSca:()=>t.moveCall({target:`${e.pkgId}::ve_sca::mint_ve_sca_placeholder_key`,arguments:[t.object(e.config),t.object(e.table)],typeArguments:[]})}},Tt=async({builder:a,txBlock:t})=>{let e=await kp({builder:a,txBlock:t});return{normalMethod:e,lockScaQuick:async(n,o,r=!0)=>{let i=E(t),s=await Qt(a,t),c,d=[];if(n!==void 0&&typeof n=="number"){let f=await a.utils.selectCoinIds(n,ft,i),[b,y]=a.utils.takeAmountFromCoins(t,f,n);c=b,d.push(y)}else c=n;let l=a.utils.getUnlockAt(o,s?.unlockAt);r&&cc(n,o,l,s?.unlockAt),console.log(new Date(l*1e3).toLocaleString("en-CA",{hour12:!0}));let u=!s?.unlockAt,p=!u&&s.unlockAt*1e3<=new Date().getTime();if(u||p){if(c)if(u){let f=e.lockSca(c,l);d.push(f)}else{if(s.lockedScaAmount!==0){let f=e.redeemSca(s.keyId);d.push(f)}e.renewExpiredVeSca(s.keyId,c,l)}}else c&&o?(e.extendLockPeriod(s.keyId,l),e.extendLockAmount(s.keyId,c)):o?e.extendLockPeriod(s.keyId,l):c&&e.extendLockAmount(s.keyId,c);d.length>0&&t.transferObjects(d,i)},extendLockPeriodQuick:async(n,o,r=!0)=>{let i=await Qt(a,t,o),s=a.utils.getUnlockAt(n);r&&lc(n,s,i?.unlockAt),i&&e.extendLockPeriod(i.keyId,s)},extendLockAmountQuick:async(n,o,r=!0)=>{let i=E(t),s=await Qt(a,t,o);if(r&&dc(n,s?.unlockAt),s){let c=await a.utils.selectCoinIds(n,ft,i),[d,l]=a.utils.takeAmountFromCoins(t,c,n);e.extendLockAmount(s.keyId,d),t.transferObjects([l],i)}},renewExpiredVeScaQuick:async(n,o,r,i=!0)=>{let s=E(t),c=await Qt(a,t,r),d=a.utils.getUnlockAt(o,c?.unlockAt);if(i&&uc(n,o,c?.unlockAt),c){let l=[];if(c.lockedScaAmount!==0){let b=e.redeemSca(c.keyId);l.push(b)}let u=await a.utils.selectCoinIds(n,ft,s),[p,f]=a.utils.takeAmountFromCoins(t,u,n);l.push(f),e.renewExpiredVeSca(c.keyId,p,d),t.transferObjects(l,s)}},redeemScaQuick:async n=>{let o=E(t),r=await Qt(a,t,n);if(Kt(r?.unlockAt),r){let i=e.redeemSca(r.keyId);t.transferObjects([i],o)}}}};import{normalizeStructTag as vp}from"@mysten/sui.js/utils";import{SUI_CLOCK_OBJECT_ID as Dp}from"@mysten/sui.js/utils";var Ht={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}}},xc={id:"0x000000000000000000000000000000000000000000000000000000000000dee9"},bi={id:"0x2c6c36393db063a9534885d22a47caead720272475336470736be28f119971f3"},vc={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 Ac={objectId:Dp,initialSharedVersion:"1",mutable:!1},xp=(a,t)=>{if(a==="sui")switch(t){case"wusdc":return{pool:Ht.pools.sui2usdc,aToB:!0};default:throw new Error(`Invalid coin pair: ${a} and ${t}`)}else if(a==="wusdc")switch(t){case"sui":return{pool:Ht.pools.sui2usdc,aToB:!1};case"wusdt":return{pool:Ht.pools.usdt2usdc,aToB:!1};case"usdc":return{pool:Ht.pools.wusdc2usdc,aToB:!0};default:throw new Error(`Invalid coin pair: ${a} and ${t}`)}else if(a==="wusdt")switch(t){case"wusdc":return{pool:Ht.pools.usdt2usdc,aToB:!0};default:throw new Error(`Invalid coin pair: ${a} and ${t}`)}else throw new Error(`Invalid coin pair: ${a} and ${t}`)},gi={createAccount:a=>a.moveCall({target:`${xc.id}::${vc.clob_v2.create_account}`,arguments:[],typeArguments:[]}),swap:(a,t,e,n,o,r,i)=>{let{pool:s,aToB:c}=xp(e,n),d=i.parseCoinType(e),l=i.parseCoinType(n),u=typeof r=="string"?a.object(r):"objectId"in r?a.objectRef(r):a.object(r);if(!s)throw new Error(`Deepbook: No pool found for ${e} to ${n}`);return c?a.moveCall({target:`${bi.id}::deepbook::deepbook_base_for_quote`,arguments:[a.sharedObjectRef(s.object),a.pure(o),u,a.object(t),a.sharedObjectRef(Ac),a.pure(s.lotsize)],typeArguments:[d,l]}):a.moveCall({target:`${bi.id}::deepbook::deepbook_quote_for_base`,arguments:[a.sharedObjectRef(s.object),a.pure(o),u,a.sharedObjectRef(Ac),a.object(t),a.pure(s.lotsize)],typeArguments:[l,d]})}};var ca=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:vp("0xdee9::custodian_v2::AccountCap")},limit:1});return e.length===0||!e[0].data?gi.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:gi.swap(o,t,e,n,this.clientOrderId,r,this.scallopUtils),accountCap:r}}};var la=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 ea(t,this.address),this.query=new ta(t,{address:this.address,utils:this.utils}),this.builder=new Jo(t,{address:this.address,query:this.query,utils:this.utils}),this.deepbookSwap=new ca({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 C,n=await j({builder:this.builder,txBlock:e}),o=await N({builder:this.builder,txBlock:e}),r=t||this.params.walletAddress;e.setSender(r);let[i,s,c]=n.normalMethod.openObligation();return o.normalMethod.stakeObligation(i,s),n.normalMethod.returnObligation(i,c),e.transferObjects([s],r),e}async depositCollateral(t,e,n,o){let r=new C,i=o||this.params.walletAddress;r.setSender(i);let s=await j({builder:this.builder,txBlock:r}),c=await this.query.getObligations(i),d=n||c?.[0]?.id;if(d)await s.addCollateralQuick(e,t,d);else{let[l,u,p]=s.normalMethod.openObligation();await s.addCollateralQuick(e,t,l),s.normalMethod.returnObligation(l,p),r.transferObjects([u],i)}return r}async withdrawCollateral(t,e,n,o,r){let i=new C,s=await j({builder:this.builder,txBlock:i}),c=r||this.params.walletAddress;i.setSender(c);let d=await s.takeCollateralQuick(e,t,n,o);return i.transferObjects([d],c),i}async deposit(t,e,n){let o=new C,r=await j({builder:this.builder,txBlock:o}),i=await St({builder:this.builder,txBlock:o}),s=n||this.params.walletAddress;o.setSender(s);let c=await r.depositQuick(e,t,n),d=this.utils.parseMarketCoinName(t);if(!ot.includes(d))o.transferObjects([c],s);else{let l=i.mintSCoin(d,c);o.transferObjects([l],s)}return o}async withdraw(t,e,n){let o=new C,r=n||this.params.walletAddress,i=await j({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 C,s=await j({builder:this.builder,txBlock:i}),c=await N({builder:this.builder,txBlock:i}),d=r||this.params.walletAddress;i.setSender(d);let l=ht.includes(t);l&&await c.unstakeObligationQuick(n,o);let u=await s.borrowQuick(e,t,n,o);return i.transferObjects([u],d),l&&await c.stakeObligationQuick(n,o),i}async borrowWithBoost(t,e,n,o,r,i){let s=new C,c=await j({builder:this.builder,txBlock:s}),d=await N({builder:this.builder,txBlock:s}),l=i||this.params.walletAddress;s.setSender(l);let u=ht.includes(t);u&&await d.unstakeObligationQuick(n,o);let p=await c.borrowQuick(e,t,n,o);return s.transferObjects([p],l),u&&await d.stakeObligationWithVeScaQuick(n,o,r),s}async borrowWithReferral(t,e,n,o,r,i){let s=new C,c=await j({builder:this.builder,txBlock:s}),d=await N({builder:this.builder,txBlock:s}),l=await ia({builder:this.builder,txBlock:s}),u=i||this.params.walletAddress;s.setSender(u);let p=ht.includes(t);p&&await d.unstakeObligationQuick(n,o);let f=l.claimReferralTicket(t),b=await c.borrowWithReferralQuick(e,t,f,n,o);return l.burnReferralTicket(f,t),s.transferObjects([b],u),p&&r?await d.stakeObligationWithVeScaQuick(n,o,r):await d.stakeObligationQuick(n,o),s}async repay(t,e,n,o,r){let i=new C,s=await j({builder:this.builder,txBlock:i}),c=await N({builder:this.builder,txBlock:i}),d=r||this.params.walletAddress;i.setSender(d);let l=ht.includes(t);return l&&await c.unstakeObligationQuick(n,o),await s.repayQuick(e,t,n,d),l&&await c.stakeObligationQuick(n,o),i}async repayWithBoost(t,e,n,o,r){let i=new C,s=await j({builder:this.builder,txBlock:i}),c=await N({builder:this.builder,txBlock:i}),d=r||this.params.walletAddress;i.setSender(d);let l=ht.includes(t);return l&&await c.unstakeObligationQuick(n,void 0),await s.repayQuick(e,t,n,d),l&&await c.stakeObligationWithVeScaQuick(n,void 0,o),i}async createStakeAccount(t,e){let n=new C,o=await it({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 C,i=await j({builder:this.builder,txBlock:r}),s=await it({builder:this.builder,txBlock:r}),c=o||this.params.walletAddress;r.setSender(c);let d=await i.depositQuick(e,t,o),l=this.utils.parseMarketCoinName(t);if(!gt.find(f=>f===l))return r;let u=await this.query.getStakeAccounts(l,c),p=n||(u.length>0?u[0].id:void 0);if(p)await s.stakeQuick(d,l,p);else{let f=s.normalMethod.createStakeAccount(l);await s.stakeQuick(d,l,f),r.transferObjects([f],c)}return r}async unstakeAndWithdraw(t,e,n){let o=new C,r=await j({builder:this.builder,txBlock:o}),i=await it({builder:this.builder,txBlock:o}),s=this.params.walletAddress,c=[];o.setSender(s);let d=this.utils.parseMarketCoinName(t);for(let l=0;l<n.length;l++){let u=n[l],[p]=await i.unstakeQuick(u.coin,d,u.id);if(p){let f=r.normalMethod.withdraw(p,t);c.push(f)}}if(e>0){let l=await r.withdrawQuick(e,t);c.push(l)}return c.length>1&&o.mergeCoins(c[0],c.slice(1)),o.transferObjects(c,s),o}async stake(t,e,n,o){let r=new C,i=await it({builder:this.builder,txBlock:r}),s=o||this.params.walletAddress;r.setSender(s);let c=await this.query.getStakeAccounts(t,s),d=n||(c.length>0?c[0].id:void 0);if(d)await i.stakeQuick(e,t,d);else{let l=i.normalMethod.createStakeAccount(t);await i.stakeQuick(e,t,l),r.transferObjects([l],s)}return r}async unstake(t,e,n,o){let r=new C,i=await it({builder:this.builder,txBlock:r}),s=o||this.params.walletAddress;r.setSender(s);let c=ot.includes(t),d=await i.unstakeQuick(e,t,n,c);return r.transferObjects([d],r.pure(s)),r}async claim(t,e,n,o){let r=new C,i=await it({builder:this.builder,txBlock:r}),s=await N({builder:this.builder,txBlock:r}),c=o||this.params.walletAddress;r.setSender(c);let d={sui:[],sca:[],scallop_sui:[],scallop_sca:[],scallop_deep:[],scallop_fud:[]};for(let l=0;l<t.length;l++){let{stakeMarketCoinName:u,stakeAccountId:p}=t[l],f=i.normalMethod.claim(p,u);d.sui.push(f)}for(let l=0;l<e.length;l++){let{obligationId:u,obligationKey:p,rewardCoinName:f}=e[l],b=s.normalMethod.claimBorrowIncentive(u,p,f);d[f].push(b)}for(let l=0;l<n.length;l++){let{obligationId:u,obligationKey:p,rewardCoinName:f}=n[l],b=s.normalMethod.oldClaimBorrowIncentive(u,p,f);d[f].push(b)}for(let l in d)d[l].length>0&&(d[l].length>1&&r.mergeCoins(d[l][0],d[l].slice(1)),r.transferObjects([d[l][0]],r.pure(c)));return r}async stakeObligation(t,e,n){let o=this.builder.createTxBlock(),r=await N({builder:this.builder,txBlock:o}),i=n||this.params.walletAddress;return o.setSender(i),await r.stakeObligationQuick(t,e),o}async unstakeObligation(t,e,n){let o=this.builder.createTxBlock(),r=await N({builder:this.builder,txBlock:o}),i=n||this.params.walletAddress;return o.setSender(i),await r.unstakeObligationQuick(t,e),o}async stakeSca(t,e=!1,n=!1,o,r,i,s,c){let d=new C,l=await Tt({builder:this.builder,txBlock:d}),u=await N({builder:this.builder,txBlock:d}),p=c||this.params.walletAddress;d.setSender(p);let f=await this.builder.utils.selectCoinIds(t,ft,p),[b,y]=this.builder.utils.takeAmountFromCoins(d,f,t),T;return s?l.normalMethod.extendLockAmount(s,b):T=l.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||d.transferObjects([T,y],p),d}async stakeMoreSca(t,e,n){let o=new C,r=n||this.params.walletAddress;return o.setSender(r),o}async extendStakeScaLockPeriod(t,e,n,o,r=!1,i=!1,s){let c=new C,d=await Tt({builder:this.builder,txBlock:c}),l=await N({builder:this.builder,txBlock:c}),u=s||this.params.walletAddress;return c.setSender(u),d.normalMethod.extendLockPeriod(e,t),n&&o&&(r&&(i?l.normalMethod.oldUnstakeObligation(n,o):l.normalMethod.unstakeObligation(n,o)),l.normalMethod.stakeObligationWithVesca(n,o,e)),c}async extendPeriodAndStakeMoreSca(t,e,n,o,r,i=!1,s=!1,c){let d=new C,l=await Tt({builder:this.builder,txBlock:d}),u=await N({builder:this.builder,txBlock:d}),p=c||this.params.walletAddress;d.setSender(p);let f=await this.builder.utils.selectCoinIds(t,ft,p),[b,y]=this.builder.utils.takeAmountFromCoins(d,f,t);return l.normalMethod.extendLockPeriod(e,n),l.normalMethod.extendLockAmount(e,b),d.transferObjects([y],p),!o||!r||(i&&(s?u.normalMethod.oldUnstakeObligation(o,r):u.normalMethod.unstakeObligation(o,r)),u.normalMethod.stakeObligationWithVesca(o,r,e)),d}async renewExpiredStakeSca(t,e,n,o=!1,r,i,s=!1,c=!1,d){let l=new C,u=await Tt({builder:this.builder,txBlock:l}),p=await N({builder:this.builder,txBlock:l}),f=d||this.params.walletAddress;if(l.setSender(f),o){let D=u.normalMethod.redeemSca(n);l.transferObjects([D],f)}let b=await this.builder.utils.selectCoinIds(t,ft,f),[y,T]=this.builder.utils.takeAmountFromCoins(l,b,t);return l.transferObjects([T],f),u.normalMethod.renewExpiredVeSca(n,y,e),!r||!i||(s&&(c?p.normalMethod.oldUnstakeObligation(r,i):p.normalMethod.unstakeObligation(r,i)),p.normalMethod.stakeObligationWithVesca(r,i,n)),l}async redeemSca(t){let e=new C,n=await Tt({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 C,i=await N({builder:this.builder,txBlock:r}),s=this.params.walletAddress;r.setSender(s);let c=i.normalMethod.oldClaimBorrowIncentive(e,t,n);return r.transferObjects([c],s),await i.unstakeObligationQuick(e,t),o?await i.stakeObligationWithVeScaQuick(e,t,o):await i.stakeObligationQuick(e,t),r}async withdrawUnlockedSca(t,e){let n=new C,o=await Tt({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 Pc(t.weightedAmount),r=e.currentPointIndex?Pc(e.currentPointIndex-t.index).dividedBy(1e9):1;return n.multipliedBy(r).plus(t.points).shiftedBy(-1*e.coinDecimal)}async createReferralLink(){let t=new C,e=await Tt({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 C,o=await wc({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 C,n=await ia({builder:this.builder,txBlock:e}),o=this.params.walletAddress;return e.setSender(o),n.bindToReferral(t),e}async migrateAllMarketCoin(){let t=new C,e=await St({builder:this.builder,txBlock:t}),n=await it({builder:this.builder,txBlock:t});t.setSender(this.params.walletAddress);let o=[];return await Promise.all(ot.map(async r=>{let i=[],s;try{let c=await this.utils.selectCoinIds(Number.MAX_SAFE_INTEGER,this.utils.parseMarketCoinType(r),this.params.walletAddress),d=c[0];c.length>1&&t.mergeCoins(d,c.slice(1)),s=d}catch(c){if(!c.toString().includes("No valid coins found for the transaction"))throw c}if(s){let c=e.mintSCoin(r,s);try{let d=await this.utils.selectCoinIds(Number.MAX_SAFE_INTEGER,this.utils.parseSCoinType(r),this.params.walletAddress);t.mergeCoins(c,d)}catch(d){console.log(d)}i.push(c)}if(gt.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 C,s=await j({builder:this.builder,txBlock:i}),c=await it({builder:this.builder,txBlock:i}),d=this.params.walletAddress,l=[],u=this.utils.parseMarketCoinName(t),p=this.utils.parseMarketCoinType(u),b=(await this.utils.selectCoinsMarketCoin(p,d)).map(_=>_.objectId);i.setSender(d);for(let _=0;_<r.length;_++){let $=r[_],[U]=await c.unstakeQuick($.coin,u,$.id);if(U){b.length>0&&i.mergeCoins(U,b);let ol=s.normalMethod.withdraw(U,t);l.push(ol)}}if(e>0){let _=await s.withdrawQuick(e,t);l.push(_)}l.length>1&&i.mergeCoins(l[0],l.slice(1));let[y]=i.splitCoins(l[0],[i.pure(o)]);i.transferObjects([l[0]],d);let{swapResult:T,accountCap:D}=await this.deepbookSwap.swapToken({baseCoinName:"wusdc",quoteCoinName:"usdc",tokenObjectIn:y,tx:i});typeof D=="string"&&i.transferObjects([D],d),Cc.check_slippage(i,T,n,o,this.query.utils.parseCoinType("usdc"));let L=s.normalMethod.deposit(T,"usdc");return await c.stakeQuick(L,"susdc"),i}};var Se=class{params;client;builder;query;utils;address;constructor(t){this.params=t,this.address=t.address}async init(){this.address||(this.address=new zo({id:Gs})),await this.address.read(),this.client=new la(this.params,this.address);let{builder:t,query:e,utils:n}=this.client;this.builder=t,this.query=e,this.utils=n}};var da=class{application="scallop";supportSDK="@mysten/sui.js";scallop;async deserialize(t){this.scallop||(this.scallop=new Se({client:t.suiClient,walletAddress:t.account.address}),await this.scallop.init());let{transactionBlock:e}=t;console.log("transactionBlock",e);let n=new So(e,this.scallop),o=new To(e,this.scallop),r=new wo(e,this.scallop),i=n.decode()||o.decode()||r.decode();if(!i)throw new Error("Unknown transaction type");return{txType:Ap.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 Se({client:t.suiClient,walletAddress:t.account.address}),await this.scallop.init());let s;switch(r){case"SupplyLending":s=Mo.fromData(i);break;case"WithdrawLending":s=Wo.fromData(i);break;case"Borrow":s=Co.fromData(i);break;case"Repay":s=Ro.fromData(i);break;case"DepositCollateral":s=xo.fromData(i);break;case"WithdrawCollateral":s=jo.fromData(i);break;case"OpenObligation":s=Oo.fromData(i);break;case"StakeSpool":s=Bo.fromData(i);break;case"UnstakeSpool":s=Eo.fromData(i);break;case"ClaimIncentiveReward":s=Do.fromData(i);break;case"BorrowWithBoost":s=Io.fromData(i);break;case"StakeSca":s=Qo.fromData(i);break;case"ExtendStakePeriod":s=$o.fromData(i);break;case"ExtendPeriodAndStakeMore":s=qo.fromData(i);break;case"RenewExpStakePeriod":s=Vo.fromData(i);break;case"WithdrawStakedSca":s=Go.fromData(i);break;case"SupplyAndStakeLending":s=Ho.fromData(i);break;case"WithdrawAndUnstakeLending":s=No.fromData(i);break;case"RedeemSca":s=Ko.fromData(i);break;case"MigrateAndClaim":s=vo.fromData(i);break;case"BorrowWithReferral":s=ko.fromData(i);break;case"CreateReferralLink":s=Fo.fromData(i);break;case"ClaimRevenueReferral":s=Uo.fromData(i);break;case"BindReferral":s=Lo.fromData(i);break;case"MigrateScoin":s=Ao.fromData(i);break;case"RepayWithBoost":s=_o.fromData(i);break;case"MigrateWusdcToUsdc":s=Po.fromData(i);break;default:throw new Error("not implemented")}return s.build({suiClient:e,account:n,network:o,scallop:this.scallop})}};import{TransactionType as im}from"@msafe/sui3-utils";import{TransactionType as Ce}from"@msafe/sui3-utils";import{normalizeStructTag as At}from"@mysten/sui/utils";var Oc="https://suilend-assets.s3.us-east-2.amazonaws.com/springsui";import{TransactionType as Fp}from"@msafe/sui3-utils";import{LENDING_MARKET_ID as qp,LENDING_MARKET_TYPE as $p,SuilendClient as hi}from"@suilend/sdk";import{TransactionType as Gt}from"@msafe/sui3-utils";import{fromB64 as Rc,toHEX as _c}from"@mysten/bcs";import{normalizeStructTag as Te}from"@mysten/sui/utils";import{MAX_U64 as zt}from"@suilend/frontend-sui";import Bc from"bignumber.js";var ua=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("this.transaction.getData().inputs",this.transaction.getData().inputs),this.transaction.getData().inputs}get commands(){return console.log("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=Te(t.MintEvent.parsedJson.coin_type.name),n=t.MintEvent.parsedJson.liquidity_amount;return console.log("Decoder.decodeDeposit",e,n),{txType:Gt.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=Te(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 Bc(_c(Rc(this.inputs[r].Pure.bytes)),16).toString(),s=i===zt.toString();return console.log("decodeWithdraw - isMax:",s,"inputIndex:",r,"inputValue:",i,"MAX_U64.toString():",zt.toString()),s&&(o=zt.toString()),{txType:Gt.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=Te(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 Bc(_c(Rc(this.inputs[r].Pure.bytes)),16).toString(),s=i===zt.toString();return console.log("decodeBorrow - isMax:",s,"inputIndex:",r,"inputValue:",i,"MAX_U64.toString():",zt.toString()),s&&(o=zt.toString()),{txType:Gt.Other,type:"borrow",intentionData:{coinType:n,value:o}}}decodeRepay(){let t={RepayEvent:this.simResult.events.find(o=>o.type.includes("lending_market::RepayEvent"))},e=Te(t.RepayEvent.parsedJson.coin_type.name),n=t.RepayEvent.parsedJson.liquidity_amount;return console.log("Decoder.decodeRepay",e,n),{txType:Gt.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=Te(o.parsedJson.coin_type.name),i=o.parsedJson.liquidity_amount;e[r]=`${+(e[r]??"0")+ +i}`}return console.log("Decoder.decodeClaimRewards",e),{txType:Gt.Other,type:"claim",intentionData:{value:e}}}decodeClaimAndDeposit(){return{txType:Gt.Other,type:"claimAndDeposit",intentionData:this.decodeClaim().intentionData}}};import{Transaction as Rp}from"@mysten/sui/transactions";import Op from"sort-keys-recursive";var W=class{constructor(t){this.data=t}serialize(){return JSON.stringify(Op(this.data))}};var pa=class a extends W{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 Rp;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 _p}from"@mysten/sui/utils";import{isSendPoints as Bp}from"@suilend/frontend-sui";import{Side as we}from"@suilend/sdk";import Mp from"bignumber.js";var Ep=(a,t)=>{let e={[we.DEPOSIT]:[],[we.BORROW]:[]};return a.lendingMarket.reserves.forEach(n=>{[we.DEPOSIT,we.BORROW].forEach(o=>{let r=o===we.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:_p(s.coinType.name),side:o})).filter(s=>!Bp(s.rewardCoinType)&&!!i.rewards[Number(s.rewardIndex)]&&new Mp(i.rewards[Number(s.rewardIndex)].earnedRewards.value.toString()).gt(0)))})}),Object.values(e).flat()},ma=Ep;var fa=class a extends W{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,ma(r,s),c),c}static fromData(e){return console.log("ClaimIntention.fromData",e),new a(e)}};import{Transaction as jp}from"@mysten/sui/transactions";var ba=class a extends W{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 jp;return r.claimRewardsAndDeposit(o.address,i.id,ma(r,s),c),c}static fromData(e){return console.log("ClaimAndDepositIntention.fromData",e),new a(e)}};import{Transaction as Wp}from"@mysten/sui/transactions";var ga=class a extends W{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 Wp;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 Lp}from"@mysten/sui/transactions";var ha=class a extends W{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 Lp;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 Up}from"@mysten/sui/transactions";var ya=class a extends W{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 Up;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 Sa=async(a,t)=>{let e=await hi.initialize(qp,$p,a),n=await hi.getObligationOwnerCaps(t.address,e.lendingMarket.$typeArgs,a),o=await Promise.all(n.map(r=>hi.getObligation(r.obligationId,e.lendingMarket.$typeArgs,a)));return{suilendClient:e,obligationOwnerCaps:n,obligations:o}},Ta=class{application="Suilend";supportSDK="@mysten/sui";utils;async deserialize(t){let{transaction:e,suiClient:n,account:o}=t;this.utils||(this.utils=await Sa(n,o));let r=await n.devInspectTransactionBlock({sender:o.address,transactionBlock:e});console.log("SuilendAppHelper.deserialize",r);let s=new ua(e,r).decode();return{txType:Fp.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 Sa(r,i));let s;switch(n){case"deposit":s=ga.fromData(o);break;case"withdraw":s=ya.fromData(o);break;case"borrow":s=pa.fromData(o);break;case"repay":s=ha.fromData(o);break;case"claim":s=fa.fromData(o);break;case"claimAndDeposit":s=ba.fromData(o);break;default:throw new Error("not implemented")}let c=window.localStorage.getItem("obligationId"),d=this.utils.obligations?.find(u=>u.id===c)??this.utils.obligations?.[0],l=this.utils.obligationOwnerCaps?.find(u=>u.obligationId===d?.id);return s.build({network:e,suiClient:r,account:i,suilendClient:this.utils.suilendClient,obligationOwnerCap:l,obligation:d})}};var yi=async(a,t)=>{let e=await Sa(a,t),n=await(await fetch(`${Oc}/liquid-staking-info-map.json`)).json();return{...e,LIQUID_STAKING_INFO_MAP:n}};var wa=class{constructor(t,e){this.transaction=t;this.simResult=e}decode(){if(this.isStakeTransaction())return this.decodeStake();if(this.isStakeAndDepositTransaction())return this.decodeStakeAndDeposit();if(this.isConvertTransaction())return this.decodeConvert();if(this.isConvertAndDepositTransaction())return this.decodeConvertAndDeposit();if(this.isUnstakeTransaction())return this.decodeUnstake();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")}hasMintMoveCallCommands(){return!!this.getMoveCallCommand("mint")}hasRedeemMoveCallCommands(){return!!this.getMoveCallCommand("redeem")}isStakeTransaction(){return this.hasMintMoveCallCommands()&&!this.hasRedeemMoveCallCommands()&&!this.hasSuilendDepositTransactionMoveCallCommands()}isStakeAndDepositTransaction(){return this.hasMintMoveCallCommands()&&!this.hasRedeemMoveCallCommands()&&this.hasSuilendDepositTransactionMoveCallCommands()}isConvertTransaction(){return this.hasMintMoveCallCommands()&&this.hasRedeemMoveCallCommands()&&!this.hasSuilendDepositTransactionMoveCallCommands()}isConvertAndDepositTransaction(){return this.hasMintMoveCallCommands()&&this.hasRedeemMoveCallCommands()&&this.hasSuilendDepositTransactionMoveCallCommands()}isUnstakeTransaction(){return!this.hasMintMoveCallCommands()&&this.hasRedeemMoveCallCommands()&&!this.hasSuilendDepositTransactionMoveCallCommands()}decodeStake(){let t={MintEvent:this.simResult.events.find(o=>o.type.includes("liquid_staking::MintEvent"))},e=At(t.MintEvent.parsedJson.event.typename.name),n=t.MintEvent.parsedJson.event.sui_amount_in;return console.log("Decoder.decodeStake",n),{txType:Ce.Other,type:"stake",intentionData:{amount:n,outCoinType:e}}}decodeStakeAndDeposit(){let t={MintEvent:this.simResult.events.find(o=>o.type.includes("liquid_staking::MintEvent"))},e=At(t.MintEvent.parsedJson.event.typename.name),n=t.MintEvent.parsedJson.event.sui_amount_in;return console.log("Decoder.decodeStakeAndDeposit",n),{txType:Ce.Other,type:"stakeAndDeposit",intentionData:{amount:n,outCoinType:e}}}decodeConvert(){let t={RedeemEvent:this.simResult.events.find(r=>r.type.includes("liquid_staking::RedeemEvent")),MintEvent:this.simResult.events.find(r=>r.type.includes("liquid_staking::MintEvent"))},e=At(t.RedeemEvent.parsedJson.event.typename.name),n=At(t.MintEvent.parsedJson.event.typename.name),o=t.RedeemEvent.parsedJson.event.lst_amount_in;return console.log("Decoder.decodeConvert",o),{txType:Ce.Other,type:"convert",intentionData:{amount:o,inCoinType:e,outCoinType:n}}}decodeConvertAndDeposit(){let t={RedeemEvent:this.simResult.events.find(r=>r.type.includes("liquid_staking::RedeemEvent")),MintEvent:this.simResult.events.find(r=>r.type.includes("liquid_staking::MintEvent"))},e=At(t.RedeemEvent.parsedJson.event.typename.name),n=At(t.MintEvent.parsedJson.event.typename.name),o=t.RedeemEvent.parsedJson.event.lst_amount_in;return console.log("Decoder.decodeConvertAndDeposit",o),{txType:Ce.Other,type:"convertAndDeposit",intentionData:{amount:o,inCoinType:e,outCoinType:n}}}decodeUnstake(){let t={RedeemEvent:this.simResult.events.find(o=>o.type.includes("liquid_staking::RedeemEvent"))},e=At(t.RedeemEvent.parsedJson.event.typename.name),n=t.RedeemEvent.parsedJson.event.lst_amount_in;return console.log("Decoder.decodeUnstake",n),{txType:Ce.Other,type:"unstake",intentionData:{amount:n,inCoinType:e}}}};import{Transaction as Qp}from"@mysten/sui/transactions";import{convertLstsAndSendToUser as Hp,LstClient as Mc}from"@suilend/springsui-sdk";import Vp from"sort-keys-recursive";var Q=class{constructor(t){this.data=t}serialize(){return JSON.stringify(Vp(this.data))}};var Ca=class a extends Q{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o,suilendClient:r,LIQUID_STAKING_INFO_MAP:i,obligationOwnerCap:s,obligation:c}=e;console.log("ConvertIntention.build",n,o,r,i,s,c);let d=await Mc.initialize(n,Object.values(i).find(p=>p.type===this.data.inCoinType)),l=await Mc.initialize(n,Object.values(i).find(p=>p.type===this.data.outCoinType)),u=new Qp;return Hp(d,l,u,o.address,this.data.amount),u}static fromData(e){return console.log("ConvertIntention.fromData",e),new a(e)}};import{Transaction as Gp}from"@mysten/sui/transactions";import{createObligationIfNoneExists as zp,sendObligationToUser as Jp}from"@suilend/sdk";import{convertLsts as Yp,LstClient as Ec}from"@suilend/springsui-sdk";var Ia=class a extends Q{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o,suilendClient:r,LIQUID_STAKING_INFO_MAP:i,obligationOwnerCap:s,obligation:c}=e;console.log("ConvertAndDepositIntention.build",n,o,r,i,s,c);let d=await Ec.initialize(n,Object.values(i).find(y=>y.type===this.data.inCoinType)),l=await Ec.initialize(n,Object.values(i).find(y=>y.type===this.data.outCoinType)),u=new Gp,{obligationOwnerCapId:p,didCreate:f}=zp(r,u,s),b=Yp(d,l,u,o.address,this.data.amount);return r.deposit(b,this.data.outCoinType,p,u),f&&Jp(p,o.address,u),u}static fromData(e){return console.log("ConvertAndDepositIntention.fromData",e),new a(e)}};import{Transaction as Xp}from"@mysten/sui/transactions";import{LstClient as Zp}from"@suilend/springsui-sdk";var ka=class a extends Q{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o,suilendClient:r,LIQUID_STAKING_INFO_MAP:i,obligationOwnerCap:s,obligation:c}=e;console.log("StakeIntention.build",n,o,r,i,s,c);let d=await Zp.initialize(n,Object.values(i).find(u=>u.type===this.data.outCoinType)),l=new Xp;return d.mintAmountAndRebalanceAndSendToUser(l,o.address,this.data.amount),l}static fromData(e){return console.log("StakeIntention.fromData",e),new a(e)}};import{Transaction as tm}from"@mysten/sui/transactions";import{createObligationIfNoneExists as em,sendObligationToUser as nm}from"@suilend/sdk";import{LstClient as om}from"@suilend/springsui-sdk";var Da=class a extends Q{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o,suilendClient:r,LIQUID_STAKING_INFO_MAP:i,obligationOwnerCap:s,obligation:c}=e;console.log("StakeAndDepositIntention.build",n,o,r,i,s,c);let d=await om.initialize(n,Object.values(i).find(b=>b.type===this.data.outCoinType)),l=new tm,{obligationOwnerCapId:u,didCreate:p}=em(r,l,s),f=d.mintAmountAndRebalance(l,o.address,this.data.amount);return r.deposit(f,this.data.outCoinType,u,l),p&&nm(u,o.address,l),l}static fromData(e){return console.log("StakeAndDepositIntention.fromData",e),new a(e)}};import{Transaction as am}from"@mysten/sui/transactions";import{LstClient as rm}from"@suilend/springsui-sdk";var xa=class a extends Q{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{suiClient:n,account:o,suilendClient:r,LIQUID_STAKING_INFO_MAP:i,obligationOwnerCap:s,obligation:c}=e;console.log("UnstakeIntention.build",n,o,r,i,s,c);let d=await rm.initialize(n,Object.values(i).find(u=>u.type===this.data.inCoinType)),l=new am;return d.redeemAmountAndSendToUser(l,o.address,this.data.amount),l}static fromData(e){return console.log("UnstakeIntention.fromData",e),new a(e)}};var va=class{application="SpringSui";supportSDK="@mysten/sui";utils;async deserialize(t){let{transaction:e,suiClient:n,account:o}=t;this.utils||(this.utils=await yi(n,o));let r=await n.devInspectTransactionBlock({sender:o.address,transactionBlock:e});console.log("SpringSuiAppHelper.deserialize",r);let s=new wa(e,r).decode();return{txType:im.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 yi(r,i));let s;switch(n){case"stake":s=ka.fromData(o);break;case"stakeAndDeposit":s=Da.fromData(o);break;case"convert":s=Ca.fromData(o);break;case"convertAndDeposit":s=Ia.fromData(o);break;case"unstake":s=xa.fromData(o);break;default:throw new Error("not implemented")}return s.build({network:e,suiClient:r,account:i,suilendClient:this.utils.suilendClient,LIQUID_STAKING_INFO_MAP:this.utils.LIQUID_STAKING_INFO_MAP,obligationOwnerCap:this.utils.obligationOwnerCaps?.[0],obligation:this.utils.obligations?.[0]})}};import{TransactionType as dm}from"@msafe/sui3-utils";import{TransactionType as Nc}from"@msafe/sui3-utils";var Aa=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:Nc.Other,type:"mint",intentionData:{amount:e}}}decodeRedeem(t){let{event:{lst_amount_in:e}}=t;return console.log("Decoder.decodeRedeem",e),{txType:Nc.Other,type:"redeem",intentionData:{amount:e}}}};import{mint as cm}from"@alphafi/stsui-sdk";var Pa=class a extends m{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{account:n}=e,{amount:o}=this.data;return await cm(o,{address:n.address})}static fromData(e){return console.log("MintIntention.fromData",e),new a(e)}};import{redeem as lm}from"@alphafi/stsui-sdk";var Oa=class a extends m{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let{account:n}=e,{amount:o}=this.data;return await lm(o,{address:n.address})}static fromData(e){return console.log("RedeemIntention.fromData",e),new a(e)}};var Ra=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 Aa(e,o).decode();return{txType:dm.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=Pa.fromData(t.intentionData);break;case"redeem":n=Oa.fromData(t.intentionData);break;default:throw new Error("build not implemented")}return n.build({account:e})}};import{TransactionType as Rm}from"@msafe/sui3-utils";import{TurbosSdk as _m}from"turbos-clmm-sdk";import{TransactionType as H}from"@msafe/sui3-utils";import{bcs as jc}from"@mysten/sui.js/bcs";import{normalizeStructTag as pm,normalizeSuiAddress as Ie}from"@mysten/sui.js/utils";import{BN as mm}from"turbos-clmm-sdk";var z={PackageId:"0x02fe4933f4521250e55a15441096d1d4a38a7311195b0bca126fc0138c1f5a97",Claim:"0x0c822cec42f7ca703696b4232f1c47b348330c23580172a29aab465bc071d894",turbosCoinType:"0x5d1f47ea69bb0de31c313d7acf89b890dbb8991ea8e03c6c355171f84bb1ba4a::turbos::TURBOS"},J={PackageId:"0xdee9"};var fm=(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}`)}},_a=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 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(`${z.PackageId}::claim::join`)}isPrixClaimTransaction(){return!!this.getMoveCallTransaction(`${z.PackageId}::claim::claim`)}isRemoveLiquidityTransaction(){return!!this.getMoveCallsTransaction([`${this.config.PackageId}::position_manager::decrease_liquidity`,`${this.config.PackageId}::position_manager::burn`])}isSwapExactBaseForQuoteTransaction(){return!!this.getMoveCallTransaction(`${J.PackageId}::clob_v2::swap_exact_base_for_quote`)}isSwapExactQuoteForBaseTransaction(){return!!this.getMoveCallTransaction(`${J.PackageId}::clob_v2::swap_exact_quote_for_base`)}async decodeSwap(){let t=this.transactions.find(f=>f.kind==="MoveCall"),e=0;this.swap2Layer.includes(t.target)&&(e=1);let n=fm(e,t.target,this.swap1Layer,this.swap2Layer),o=n.map((f,b)=>{let y=this.helper.decodeSharedObjectId(b),T=this.helper.decodeInputU128(4+b+e),D=this.turbosSdk.math.sqrtPriceX64ToTickIndex(new mm(T.toString()));return{pool:y,a2b:f,nextTickIndex:D}}),r=n[0]||e===1?t.typeArguments[0]:t.typeArguments[1],i=e===1?t.typeArguments[4]:n[0]?t.typeArguments[1]:t.typeArguments[0],s=this.helper.decodeInputAddress(6+2*e),c=this.helper.decodeInputU64(7+2*e),d=this.helper.decodeInputBool(5+2*e),l=this.helper.decodeInputU64(2+e),u=this.helper.decodeInputU64(3+e),p=await this.turbosSdk.trade.computeSwapResultV2({pools:[{pool:o[0].pool,a2b:o[0].a2b,amountSpecified:l}],address:s,amountSpecifiedIsInput:d});return{txType:H.Other,type:"Swap",intentionData:{routes:o,coinTypeA:r,coinTypeB:i,address:s,amountA:d?l:u,amountB:d?u:l,amountSpecifiedIsInput:d,slippage:"0.1",deadline:c}}}decodeAddLiquidity(){console.log(this.helper,"decodeAddLiquidity this.helper");let t=this.helper.decodeSharedObjectId(0),e=this.helper.decodeInputAddress(12),n=this.helper.decodeInputU64(8),o=this.helper.decodeInputU64(9),r=this.helper.decodeInputU32(4),i=this.helper.decodeInputBool(5),s=this.helper.decodeInputU32(6),c=this.helper.decodeInputBool(7),d=this.helper.decodeInputU64(13);return{txType:H.Other,type:"AddLiquidity",intentionData:{pool:t,slippage:10,address:e,amountA:n,amountB:o,tickLower:i?-r:r,tickUpper:c?-s:s,deadline:d}}}decodeIncreaseLiquidity(t){console.log(this.helper,"decodeIncreaseLiquidity this.helper");let e=this.helper.decodeSharedObjectId(0),n=this.helper.decodeSharedObjectId(4),o=this.helper.decodeInputU64(5),r=this.helper.decodeInputU64(6),i=this.helper.decodeInputU64(9);return{txType: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)),d=this.collectFeeHelper.decodeInputU64(3)||0,l=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:d,collectAmountB:l,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 wt(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 wt(e,this.txb))}get collectFeeHelper(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target===`${this.config.PackageId}::position_manager::collect`);return new wt(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 wt(t,this.txb)}get swapExactBaseForQuoteHelper(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target===`${J.PackageId}::clob_v2::swap_exact_base_for_quote`);return new wt(t,this.txb)}get swapExactQuoteForBaseHelper(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target===`${J.PackageId}::clob_v2::swap_exact_quote_for_base`);return new wt(t,this.txb)}},wt=class a{constructor(t,e){this.moveCall=t;this.txb=e}decodeSharedObjectId(t){let e=this.getInputParam(t);return a.getSharedObjectId(e)}decodeOwnedObjectId(t){let e=this.getInputParam(t);return a.getOwnedObjectId(e)}decodeInputU128(t){let e=this.decodePureArg(t,"u128");return Number(e)}decodeInputU64(t){let e=this.decodePureArg(t,"u64");return Number(e)}decodeInputU32(t){let e=this.decodePureArg(t,"u32");return Number(e)}decodeInputU8(t){let e=this.decodePureArg(t,"u8");return Number(e)}decodeInputAddress(t){let e=this.decodePureArg(t,"address");return Ie(e)}decodeInputString(t){return this.decodePureArg(t,"string")}decodeInputBool(t){return this.decodePureArg(t,"bool")}decodePureArg(t,e){let n=this.getInputParam(t);return a.getPureInputValue(n,e)}getInputParam(t){let e=this.moveCall.arguments[t];if(e.kind!=="Input")throw new Error("not input type");return this.txb.blockData.inputs[e.index]}static getPureInputValue(t,e){if(t.type!=="pure")throw new Error("not pure argument");if(typeof t.value=="object"&&"Pure"in t.value){let n=t.value.Pure;return jc.de(e,new Uint8Array(n))}return t.value}static getOwnedObjectId(t){if(t.type!=="object")throw new Error(`not object argument: ${JSON.stringify(t)}`);if(typeof t.value=="object"){if(!("Object"in t.value)||!("ImmOrOwned"in t.value.Object))throw new Error("not ImmOrOwned");return Ie(t.value.Object.ImmOrOwned.objectId)}return Ie(t.value)}static getSharedObjectId(t){if(t.type!=="object")throw new Error(`not object argument: ${JSON.stringify(t)}`);if(typeof t.value!="object")return Ie(t.value);if(!("Object"in t.value)||!("Shared"in t.value.Object))throw new Error("not Shared");return Ie(t.value.Object.Shared.objectId)}static getPureInput(t,e){if(t.type!=="pure")throw new Error("not pure argument");if(typeof t.value!="object")return t.value;if(!("Pure"in t.value))throw new Error("Pure not in value");let n=t.value.Pure;return jc.de(e,new Uint8Array(n))}typeArg(t){return pm(this.moveCall.typeArguments[t])}shortTypeArg(t){return this.moveCall.typeArguments[t]}txArg(t){return this.moveCall.arguments[t]}};import{TurbosSdk as bm}from"turbos-clmm-sdk";var Ba=class a extends h{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new bm(e.network.replace("sui:",""),e.suiClient),{pool:o,address:r,amountA:i,amountB:s,slippage:c,tickLower:d,tickUpper:l,deadline:u,txb:p}=this.data;return n.pool.addLiquidity({pool:o,slippage:c,address:r,amountA:i,amountB:s,tickLower:d,tickUpper:l,deadline:u,txb:p})}static fromData(e){return new a(e)}};import{TurbosSdk as gm}from"turbos-clmm-sdk";var Ma=class a extends h{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new gm(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 hm}from"turbos-clmm-sdk";var Ea=class a extends h{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new hm(e.network.replace("sui:",""),e.suiClient),{pool:o,address:r,nft:i,collectAmountA:s,collectAmountB:c,deadline:d,txb:l}=this.data;return n.pool.collectFee({pool:o,address:r,collectAmountA:s,collectAmountB:c,nft:i,deadline:d,txb:l})}static fromData(e){return new a(e)}};import{TurbosSdk as ym}from"turbos-clmm-sdk";var Na=class a extends h{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new ym(e.network.replace("sui:",""),e.suiClient),{pool:o,address:r,nft:i,rewardAmounts:s,deadline:c,txb:d}=this.data;return n.pool.collectReward({pool:o,address:r,rewardAmounts:s,nft:i,deadline:c,txb:d})}static fromData(e){return new a(e)}};import{TurbosSdk as Sm}from"turbos-clmm-sdk";var ja=class a extends h{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new Sm(e.network.replace("sui:",""),e.suiClient),{fee:o,address:r,tickLower:i,tickUpper:s,sqrtPrice:c,slippage:d,coinTypeA:l,coinTypeB:u,amountA:p,amountB:f,deadline:b,txb:y}=this.data;return n.pool.createPool({fee:o,amountA:p,amountB:f,address:r,tickLower:i,tickUpper:s,sqrtPrice:c,slippage:d,coinTypeA:l,coinTypeB:u,deadline:b,txb:y})}static fromData(e){return new a(e)}};import{TurbosSdk as Tm}from"turbos-clmm-sdk";var Wa=class a extends h{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new Tm(e.network.replace("sui:",""),e.suiClient),{pool:o,address:r,amountA:i,amountB:s,slippage:c,nft:d,decreaseLiquidity:l,deadline:u,txb:p}=this.data;return n.pool.decreaseLiquidity({pool:o,slippage:c,address:r,amountA:i,amountB:s,nft:d,decreaseLiquidity:l,deadline:u,txb:p})}static fromData(e){return new a(e)}};import{TurbosSdk as wm}from"turbos-clmm-sdk";var La=class a extends h{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new wm(e.network.replace("sui:",""),e.suiClient),{pool:o,address:r,amountA:i,amountB:s,slippage:c,nft:d,deadline:l,txb:u}=this.data;return n.pool.increaseLiquidity({pool:o,slippage:c,address:r,amountA:i,amountB:s,nft:d,deadline:l,txb:u})}static fromData(e){return new a(e)}};import{TransactionBlock as Cm}from"@mysten/sui.js/transactions";import{SUI_CLOCK_OBJECT_ID as Im}from"@mysten/sui.js/utils";var Ua=class a extends h{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new Cm;return n.moveCall({target:`${z.PackageId}::claim::claim`,typeArguments:[z.turbosCoinType],arguments:[n.object(z.Claim),n.object(Im)]}),n}static fromData(e){return new a(e)}};import{TransactionBlock as km}from"@mysten/sui.js/transactions";var Fa=class a extends h{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new km;return n.moveCall({target:`${z.PackageId}::claim::join`,typeArguments:[z.turbosCoinType],arguments:[n.object(z.Claim)]}),n}static fromData(e){return new a(e)}};import{TransactionBlock as Dm}from"@mysten/sui.js/transactions";import{TurbosSdk as xm}from"turbos-clmm-sdk";var qa=class a extends h{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new xm(e.network.replace("sui:",""),e.suiClient),o=new Dm;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 vm}from"turbos-clmm-sdk";var $a=class a extends h{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){console.log(this.data,"this.data");let n=new vm(e.network.replace("sui:",""),e.suiClient),{routes:o,coinTypeA:r,coinTypeB:i,address:s,amountA:c,amountB:d,slippage:l,amountSpecifiedIsInput:u,deadline:p,txb:f}=this.data;return n.trade.swap({routes:o,coinTypeA:r,coinTypeB:i,address:s,amountA:c,amountB:d,amountSpecifiedIsInput:u,slippage:l,deadline:p,txb:f})}static fromData(e){return new a(e)}};import{TurbosSdk as Pm}from"turbos-clmm-sdk";import{TransactionBlock as Wc}from"@mysten/sui.js/transactions";import{normalizeSuiObjectId as Lc}from"@mysten/sui.js/utils";import{unstable_getObjectId as Am}from"turbos-clmm-sdk";var ke=class{constructor(t){this.turbosSdk=t}async getCoinsData(t,e,n){let o=[],r;do r=await this.turbosSdk.provider.getCoins({owner:t,coinType:e,cursor:r?.nextCursor}),o.push(...r.data);while(r.hasNextPage);let i=[],s=0;return o.sort((c,d)=>Number(d.balance)-Number(c.balance)).some(c=>s>=n?!0:(s+=Number(c.balance),i.push(c),!1)),i}splitAndMergeCoin(t,e,n){if(!t||t.length<1)return[void 0,void 0];if(this.isSuiCoinAddress(t[0].coinType)){let[i]=n.splitCoins(n.gas,[n.pure(e)]);return[i,void 0]}let o=n.object(t[0].coinObjectId);t.length>1&&n.mergeCoins(o,t.slice(1).map(i=>n.object(i.coinObjectId)));let[r]=n.splitCoins(o,[n.pure(e)]);return[r,o]}isSuiCoinAddress(t){return t.toLocaleLowerCase()==="0x2::sui::sui"}async IsAccountCap(t){let e=await this.turbosSdk.provider.getOwnedObjects({owner:t,options:{showContent:!0,showType:!0,showOwner:!0},filter:{StructType:`${J.PackageId}::custodian_v2::AccountCap`}});return e.data[0]?.data?Am(e.data[0].data):void 0}createAccount(t){let[e]=t.moveCall({typeArguments:[],target:`${J.PackageId}::clob_v2::create_account`,arguments:[]});return e}zero(t,e){return e.moveCall({typeArguments:[t],target:"0x2::coin::zero",arguments:[]})}};var Uc=89,Fc=1e6,qc=async a=>{let{token1:t,token2:e,poolId:n,amountIn:o,currentAddress:r,turbosSdk:i}=a,s=new Wc,c=new ke(i),d=await c.getCoinsData(r,e,o),[l,u]=c.splitAndMergeCoin(d,o,s);if(!l)throw new Error(`Not enough balance: ${e}`);let p=await c.IsAccountCap(r),f=p?s.object(p):c.createAccount(s),[b,y,T]=s.moveCall({typeArguments:[t,e],target:`${J.PackageId}::clob_v2::swap_exact_quote_for_base`,arguments:[s.object(String(n)),s.pure(Uc),f,s.pure(o),s.object(Lc("0x6")),l]});return u&&s.transferObjects([u],s.pure(r)),s.transferObjects([b],s.pure(r)),s.transferObjects([y],s.pure(r)),p||s.transferObjects([f],s.pure(r)),s.setSenderIfNotSet(r),s.setGasBudget(Fc),s},$c=async a=>{let{token1:t,token2:e,poolId:n,amountIn:o,currentAddress:r,turbosSdk:i}=a,s=new Wc,c=new ke(i),d=await c.getCoinsData(r,t,o),[l,u]=c.splitAndMergeCoin(d,o,s);if(!l)throw new Error(`Not enough balance: ${t}`);let p=await c.IsAccountCap(r),f=p?s.object(p):c.createAccount(s),b=c.zero(e,s),[y,T,D]=s.moveCall({typeArguments:[t,e],target:`${J.PackageId}::clob_v2::swap_exact_base_for_quote`,arguments:[s.object(String(n)),s.pure(Uc),f,s.pure(o),l,b,s.object(Lc("0x6"))]});return u&&s.transferObjects([u],s.pure(r)),s.transferObjects([y],s.pure(r)),s.transferObjects([T],s.pure(r)),p||s.transferObjects([f],s.pure(r)),s.setSenderIfNotSet(r),s.setGasBudget(Fc),s};var Ka=class a extends h{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new Pm(e.network.replace("sui:",""),e.suiClient);return await $c({...this.data,turbosSdk:n,currentAddress:e.account.address})}static fromData(e){return new a(e)}};import{TurbosSdk as Om}from"turbos-clmm-sdk";var Va=class a extends h{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){let n=new Om(e.network.replace("sui:",""),e.suiClient);return await qc({...this.data,turbosSdk:n,currentAddress:e.account.address})}static fromData(e){return new a(e)}};var Qa=class{application="turbos";supportSDK="@mysten/sui.js";async deserialize(t){let e=new _m(t.network.replace("sui:",""),t.suiClient),n=await e.contract.getConfig(),{transactionBlock:o,account:r}=t;console.log(t,"input");let s=await new _a(o,e,n).decode(r.address);return{txType:Rm.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=ja.fromData(t.intentionData);break;case"AddLiquidity":r=Ba.fromData(t.intentionData);break;case"IncreaseLiquidity":r=La.fromData(t.intentionData);break;case"DecreaseLiquidity":r=Wa.fromData(t.intentionData);break;case"RemoveLiquidity":r=qa.fromData(t.intentionData);break;case"CollectFee":r=Ea.fromData(t.intentionData);break;case"CollectReward":r=Na.fromData(t.intentionData);break;case"Burn":r=Ma.fromData(t.intentionData);break;case"Swap":r=$a.fromData(t.intentionData);break;case"PrixJoin":r=Fa.fromData(t.intentionData);break;case"PrixClaim":r=Ua.fromData(t.intentionData);break;case"SwapExactBaseForQuote":r=Ka.fromData(t.intentionData);break;case"SwapExactQuoteForBase":r=Va.fromData(t.intentionData);break;default:throw new Error("not implemented")}return r.build({suiClient:e,account:n,network:o})}};import{TransactionType as Lm}from"@msafe/sui3-utils";import{TransactionType as Si}from"@msafe/sui3-utils";import{bcs as Kc}from"@mysten/sui.js/bcs";import{normalizeStructTag as Em,normalizeSuiAddress as De}from"@mysten/sui.js/utils";var Bm={packageId:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55",poolObjectId:"0x7fa2faa111b8c65bea48a23049bfd81ca8f971a262d981dcd9a17c3825cb5baf",metadataObjectId:"0x680cd26af32b2bde8d3361e804c53ec1d1cfe24c7f039eb7f549e8dfde389a60",systemStateObjectId:"0x0000000000000000000000000000000000000000000000000000000000000005",certType:"0x549e8b69270defbfafd4f94e17ec44cdbdd99820b33bda2278dea3b9a32d3f55::cert::CERT",gasBudget:5e7},v=Bm;var Ha=class{constructor(t){this.txb=t}decode(){if(console.log("txb",this.txb),this.isStakeTransaction())return this.decodeStake();if(this.isUnStakeTransaction())return this.decodeUnStake();if(this.isClaimTicketTransaction())return this.decodeClaimTicket();throw new Error("Unknown transaction type")}get transactions(){return this.txb.blockData.transactions}getMoveCallTransaction(t){return this.transactions.find(e=>e.kind==="MoveCall"&&e.target===t)}isStakeTransaction(){return!!this.getMoveCallTransaction(`${v.packageId}::native_pool::stake`)}isUnStakeTransaction(){return!!this.getMoveCallTransaction(`${v.packageId}::native_pool::unstake`)}isClaimTicketTransaction(){return!!this.getMoveCallTransaction(`${v.packageId}::native_pool::burn_ticket`)}decodeStake(){let t=this.transactions[0].amounts[0].value.toNumber();return{txType:Si.Other,type:"Stake",intentionData:{amount:t}}}decodeUnStake(){let e=this.transactions.find(n=>n.kind==="SplitCoins").amounts[0].value.toNumber();return{txType:Si.Other,type:"UnStake",intentionData:{amount:e}}}decodeClaimTicket(){let t=this.helper.decodeOwnedObjectId(2);return console.log(t),{txType:Si.Other,type:"ClaimTicket",intentionData:{ticketId:t}}}get helper(){let t=this.transactions.find(e=>e.kind==="MoveCall"&&e.target.startsWith(v.packageId));return new Ti(t,this.txb)}},Ti=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]}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 Kc.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 Kc.de(e,new Uint8Array(n))}typeArg(t){return Em(this.moveCall.typeArguments[t])}txArg(t){return this.moveCall.arguments[t]}};import{TransactionBlock as Nm}from"@mysten/sui.js/transactions";var Ga=class a extends h{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){console.log(e);let n=new Nm,{ticketId:o}=this.data;return n.moveCall({target:`${v.packageId}::native_pool::burn_ticket`,arguments:[n.object(v.poolObjectId),n.object(v.systemStateObjectId),n.object(o)]}),n}static fromData(e){return new a(e)}};import{TransactionBlock as jm}from"@mysten/sui.js/transactions";var za=class a extends h{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){console.log(e);let n=new jm,{amount:o}=this.data,[r]=n.splitCoins(n.gas,[n.pure(o)]);return n.moveCall({target:`${v.packageId}::native_pool::stake`,arguments:[n.object(v.poolObjectId),n.object(v.metadataObjectId),n.object(v.systemStateObjectId),r]}),n}static fromData(e){return new a(e)}};import{TransactionBlock as Wm}from"@mysten/sui.js/transactions";var Ja=class a extends h{constructor(e){super(e);this.data=e}txType;txSubType;async build(e){console.log(e);let n=new Wm,{amount:o}=this.data,r=(await e.suiClient.getAllCoins({owner:e.account.address,limit:100})).data,[i,...s]=r.filter(l=>l.coinType.split("::")[0]===v.certType.split("::")[0]),c=n.object(i.coinObjectId);s.length&&n.mergeCoins(c,s.map(l=>n.object(l.coinObjectId)));let d=n.splitCoins(n.object(i.coinObjectId),[n.pure(o)]);return n.moveCall({target:`${v.packageId}::native_pool::unstake`,arguments:[n.object(v.poolObjectId),n.object(v.metadataObjectId),n.object(v.systemStateObjectId),d]}),n}static fromData(e){return new a(e)}};var Ya=class{application="volo";supportSDK="@mysten/sui.js";async deserialize(t){let{transactionBlock:e}=t,o=new Ha(e).decode();return{txType:Lm.Other,txSubType:o.type,intentionData:o.intentionData}}async build(t){let{suiClient:e,account:n}=t,o;switch(t.txSubType){case"Stake":o=za.fromData(t.intentionData);break;case"UnStake":o=Ja.fromData(t.intentionData);break;case"ClaimTicket":o=Ga.fromData(t.intentionData);break;default:throw new Error("not implemented")}return o.build({suiClient:e,account:n})}};import{TransactionType as Jm}from"@msafe/sui3-utils";import{asIntN as Vc}from"@cetusprotocol/cetus-sui-clmm-sdk";import{TransactionType as Pt}from"@msafe/sui3-utils";import{fromB64 as xe}from"@mysten/bcs";import{bcs as ve}from"@mysten/sui/bcs";var Xa=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:Pt.Other,type:"OpenPosition",intentionData:{pool:this.getSharedObjectID(this.getInputIndex(t,1)),lowerTick:Number(Vc(BigInt(this.getU32(this.getInputIndex(t,2)))).toString()),upperTick:Number(Vc(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:Pt.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:Pt.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:Pt.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:Pt.Other,type:"CollectRewards",intentionData:{pool:t[0].pool,position:t[0].position,collectRewardTokens:t.map(e=>e.rewardCoinType)}}}decodeCollectFeeTx(){return{txType:Pt.Other,type:"CollectFee",intentionData:this.getFeeCallData()}}decodeCollectRewardsAndFeeTx(){let t=this.getFeeCallData();return{txType:Pt.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(ve.u32().parse(Uint8Array.from(xe(this.inputs[t].Pure.bytes))))}getU64(t){return ve.u64().parse(Uint8Array.from(xe(this.inputs[t].Pure.bytes)))}getU128(t){return ve.u128().parse(Uint8Array.from(xe(this.inputs[t].Pure.bytes)))}getBoolean(t){return ve.bool().parse(Uint8Array.from(xe(this.inputs[t].Pure.bytes)))}getAddress(t){return ve.Address.parse(Uint8Array.from(xe(this.inputs[t].Pure.bytes)))}getTypeArguments(t){return t.MoveCall.typeArguments||[]}getInputIndex(t,e){return t.MoveCall.arguments[e].Input}};import{TransactionType as $m}from"@msafe/sui3-utils";import{BN as Ot,ClmmPoolUtil as qm}from"@firefly-exchange/library-sui";import{SuiClient as Um}from"@firefly-exchange/library-sui";import{OnChainCalls as Fm}from"@firefly-exchange/library-sui/dist/src/spot";var Qc={rpc:"https://fullnode.mainnet.sui.io/",objects:{GlobalConfig:"0x03db251ba509a8d5d8777b6338836082335d93eecbdd09a11e190a1cff51c352",BasePackage:"0x3492c874c1e3b3e2984e8c41b589e642d4d0a5d6459e5a9cfc2d52fd7c89c267",CurrentPackage:"0x6c796c3ab3421a68158e0df18e4657b2827b1f8fed5ed4b82dba9c935988711b"}},It=(a,t)=>{if(a!=="sui:mainnet")throw new Error("Bluefin spot protocol is only available on sui::mainnet");let e=new Um({url:Qc.rpc});return new Fm(e,Qc.objects,{address:t.address,isUIWallet:!1})};var B=class{static async OpenPosition(t,e,n){let o=It(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=It(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=It(n,e),r=await o.queryChain.getPool(t.pool);return await o.removeLiquidity(r,t.position,{liquidityAmount:new Ot(t.liquidity),tokenMaxA:new Ot(t.maxAmountTokenA),tokenMaxB:new Ot(t.maxAmountTokenB)},{returnTx:!0,sender:e.address})}static async closePosition(t,e,n){let o=It(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=It(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=It(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=It(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{...qm.estLiquidityAndCoinAmountFromOneAmounts(e.lowerTick,e.upperTick,new Ot(e.tokenAmount),e.isTokenAFixed,!0,0,new Ot(t.current_sqrt_price)),tokenMaxA:new Ot(e.maxAmountTokenA),tokenMaxB:new Ot(e.maxAmountTokenB)}}};var Za=class a extends m{constructor(e){super(e);this.data=e}txType=$m.Other;txSubType="ClosePosition";async build(e){let{account:n,network:o}=e;return console.log(this.data),B.closePosition(this.data,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Km}from"@msafe/sui3-utils";var tr=class a extends m{constructor(e){super(e);this.data=e}txType=Km.Other;txSubType="CollectFee";async build(e){let{account:n,network:o}=e;return console.log(this.data),B.collectFee(this.data,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Vm}from"@msafe/sui3-utils";var er=class a extends m{constructor(e){super(e);this.data=e}txType=Vm.Other;txSubType="CollectRewards";async build(e){let{account:n,network:o}=e;return console.log(this.data),B.collectRewards(this.data,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Qm}from"@msafe/sui3-utils";var nr=class a extends m{constructor(e){super(e);this.data=e}txType=Qm.Other;txSubType="CollectRewardsAndFee";async build(e){let{account:n,network:o}=e;return console.log(this.data),B.collectRewardsAndFee(this.data,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Hm}from"@msafe/sui3-utils";var or=class a extends m{constructor(e){super(e);this.data=e}txType=Hm.Other;txSubType="OpenPosition";async build(e){let{account:n,network:o}=e;return console.log(this.data),B.OpenPosition(this.data,n,o)}static fromData(e){return new a(e)}};import{TransactionType as Gm}from"@msafe/sui3-utils";var ar=class a extends m{constructor(e){super(e);this.data=e}txType=Gm.Other;txSubType="ProvideLiquidity";async build(e){let{account:n,network:o}=e;return console.log(this.data),B.provideLiquidity(this.data,n,o)}static fromData(e){return new a(e)}};import{TransactionType as zm}from"@msafe/sui3-utils";var rr=class a extends m{constructor(e){super(e);this.data=e}txType=zm.Other;txSubType="RemoveLiquidity";async build(e){let{account:n,network:o}=e;return console.log(this.data),B.removeLiquidity(this.data,n,o)}static fromData(e){return new a(e)}};var ir=class{application="bluefin";supportSDK="@mysten/sui";async deserialize(t){console.log("Bluefin helper deserialize input: ",t);let{transaction:e}=t,o=new Xa(e).decode();return{txType:Jm.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=or.fromData(t.intentionData);break;case"ProvideLiquidity":r=ar.fromData(t.intentionData);break;case"RemoveLiquidity":r=rr.fromData(t.intentionData);break;case"ClosePosition":r=Za.fromData(t.intentionData);break;case"CollectFee":r=tr.fromData(t.intentionData);break;case"CollectRewards":r=er.fromData(t.intentionData);break;case"CollectRewardsAndFee":r=nr.fromData(t.intentionData);break;default:throw new Error("not implemented")}return r.build({suiClient:e,account:n,network:o})}};import{TransactionType as sf}from"@msafe/sui3-utils";import{KriyaSDK as Ym}from"kriya-dev-sdk";var sr=class a extends m{constructor(e){super(e);this.data=e}txType;txSubType;async build(){let e=new Ym,{params:n}=this.data;return e.Amm.getTxbAddLiquidity(n)}static fromData(e){return new a(e)}};import{KriyaSDK as Xm}from"kriya-dev-sdk";var cr=class a extends m{constructor(e){super(e);this.data=e}txType;txSubType;async build(){let e=new Xm,{params:n}=this.data;return e.Amm.getTxbAddLiquiditySingleSided(n)}static fromData(e){return new a(e)}};import{KriyaSDK as Zm}from"kriya-dev-sdk";var lr=class a extends m{constructor(e){super(e);this.data=e}txType;txSubType;async build(){let e=new Zm,{params:n}=this.data;return e.Amm.getTxbClaimRewards(n)}static fromData(e){return new a(e)}};import{KriyaSDK as tf}from"kriya-dev-sdk";var dr=class a extends m{constructor(e){super(e);this.data=e}txType;txSubType;async build(){let e=new tf,{params:n}=this.data;return e.Amm.getTxbRemoveLiquidity(n)}static fromData(e){return new a(e)}};import{KriyaSDK as ef}from"kriya-dev-sdk";var ur=class a extends m{constructor(e){super(e);this.data=e}txType;txSubType;async build(){let e=new ef,{params:n}=this.data;return e.Clmm.getTxbAddLiquiditySingleSided(n)}static fromData(e){return new a(e)}};import{KriyaSDK as nf}from"kriya-dev-sdk";var pr=class a extends m{constructor(e){super(e);this.data=e}txType;txSubType;async build(){let e=new nf,{params:n}=this.data;return e.Clmm.getTxbAddLiquidity(n)}static fromData(e){return new a(e)}};import{KriyaSDK as of}from"kriya-dev-sdk";var mr=class a extends m{constructor(e){super(e);this.data=e}txType;txSubType;async build(){let e=new of,{params:n}=this.data;return e.Clmm.getTxbClaimMayaRewards(n)}static fromData(e){return new a(e)}};import{KriyaSDK as af}from"kriya-dev-sdk";var fr=class a extends m{constructor(e){super(e);this.data=e}txType;txSubType;async build(){let e=new af,{params:n}=this.data;return e.Clmm.getTxbClaimRewards(n)}static fromData(e){return new a(e)}};import{KriyaSDK as rf}from"kriya-dev-sdk";var br=class a extends m{constructor(e){super(e);this.data=e}txType;txSubType;async build(){let e=new rf,{params:n}=this.data;return e.Clmm.getTxbRemoveLiquidity(n)}static fromData(e){return new a(e)}};var gr=class{application="kriya";supportSDK="@mysten/sui";async deserialize(t){let{appContext:e}=t;return{txType:sf.Other,txSubType:e.action,intentionData:e}}async build(t){let e;switch(t.txSubType){case"AddLiquidity":e=sr.fromData(t.intentionData);break;case"AddLiquiditySingleSided":e=cr.fromData(t.intentionData);break;case"RemoveLiquidity":e=dr.fromData(t.intentionData);break;case"ClaimRewards":e=lr.fromData(t.intentionData);break;case"ClaimRewardsV3":e=fr.fromData(t.intentionData);break;case"ClaimV3MayaRewards":e=mr.fromData(t.intentionData);break;case"AddLiquidityV3":e=pr.fromData(t.intentionData);break;case"AddLiquiditySingleSideV3":e=ur.fromData(t.intentionData);break;case"RemoveLiquidityV3":e=br.fromData(t.intentionData);break;default:throw new Error("not implemented")}return e.build()}};import{TransactionType as Cf}from"@msafe/sui3-utils";import{TransactionType as Xc}from"@msafe/sui3-utils";import{AggregatorClient as cf,Env as lf}from"@magmaprotocol/aggregator-sdk";import{MagmaClmmSDK as df,clmmMainnet as uf}from"@magmaprotocol/magma-clmm-sdk";import{SuiClient as pf}from"@mysten/sui/client";var tt=a=>{let t=uf,e=new df(t);return e.senderAddress=a.address,e},mf="https://app.magmafinance.io/api/router/find_routes",Hc=a=>{let t=new pf({url:"https://fullnode.mainnet.sui.io/"});return new cf(mf,a.address,t,lf.Mainnet)};var Gc=async(a,t)=>await tt(t).Position.closePositionTransactionPayload(a),zc=async(a,t)=>await tt(t).Position.createAddLiquidityFixTokenPayload(a?.parameter,a?.gasEstimateArg),Jc=async(a,t)=>await tt(t).Position.createAddLiquidityFixTokenWithProtectionPayload(a?.parameter),Yc=async(a,t)=>await tt(t).Position.removeLiquidityTransactionPayload(a);var hr=class a extends m{constructor(e){super(e);this.data=e}txType=Xc.Other;txSubType="OpenAndAddLiquidity";async build(e){let{account:n}=e,{txbParams:o}=this.data;return await zc(o,n)}static fromData(e){return new a(e)}},yr=class a extends m{constructor(e){super(e);this.data=e}txType=Xc.Other;txSubType="AddLiquidityWithProtection";async build(e){let{account:n}=e,{txbParams:o}=this.data;return await Jc(o,n)}static fromData(e){return new a(e)}};import{TransactionType as ff}from"@msafe/sui3-utils";var Zc=async(a,t)=>await tt(t).Rewarder.collectRewarderTransactionPayload(a?.parameter),tl=async(a,t)=>await tt(t).Rewarder.batchCollectRewardePayload(a?.parameter);var Sr=class a extends m{constructor(e){super(e);this.data=e}txType=ff.Other;txSubType="BatchCollectRewarder";async build(e){let{account:n}=e,{txbParams:o}=this.data;return await tl(o,n)}static fromData(e){return new a(e)}};import{TransactionType as bf}from"@msafe/sui3-utils";var Tr=class a extends m{constructor(e){super(e);this.data=e}txType=bf.Other;txSubType="ClosePosition";async build(e){let{account:n}=e,{txbParams:o}=this.data;return await Gc(o,n)}static fromData(e){return new a(e)}};import{TransactionType as gf}from"@msafe/sui3-utils";var wr=class a extends m{constructor(e){super(e);this.data=e}txType=gf.Other;txSubType="CollectRewarder";async build(e){let{account:n}=e,{txbParams:o}=this.data;return await Zc(o,n)}static fromData(e){return new a(e)}};import{TransactionType as hf}from"@msafe/sui3-utils";var el=async(a,t)=>await tt(t).Pool.createPoolTransactionPayload(a?.parameter);var Cr=class a extends m{constructor(e){super(e);this.data=e}txType=hf.Other;txSubType="CreatePool";async build(e){let{account:n}=e,{txbParams:o}=this.data;return await el(o,n)}static fromData(e){return new a(e)}};import{TransactionType as Tf}from"@msafe/sui3-utils";import{restituteMsafeFastRouterSwapParams as yf}from"@magmaprotocol/aggregator-sdk";import{Transaction as Sf}from"@mysten/sui/transactions";var nl=async(a,t)=>{let e=Hc(t),n=new Sf;return await e.fastRouterSwap({...a,routers:yf(a.routers),txb:n}),n};var Ir=class a extends m{constructor(e){super(e);this.data=e}txType=Tf.Other;txSubType="FastRouterSwap";async build(e){let{account:n}=e,{txbParams:o}=this.data;return await nl(o,n)}static fromData(e){return new a(e)}};import{TransactionType as wf}from"@msafe/sui3-utils";var kr=class a extends m{constructor(e){super(e);this.data=e}txType=wf.Other;txSubType="RemoveLiquidity";async build(e){let{account:n}=e,{txbParams:o}=this.data;return await Yc(o,n)}static fromData(e){return new a(e)}};var Dr=class{application="magma";supportSDK="@mysten/sui";async deserialize(t){console.log("Magma helper deserialize input: ",t);let{txbParams:e,action:n}=t;return{txType:Cf.Other,txSubType:n,intentionData:{txbParams:{...e},action:n}}}async build(t){let{account:e}=t,n;switch(t.txSubType){case"BatchCollectRewarder":n=Sr.fromData(t.intentionData);break;case"ClosePosition":n=Tr.fromData(t.intentionData);break;case"CollectRewarder":n=wr.fromData(t.intentionData);break;case"CreatePool":n=Cr.fromData(t.intentionData);break;case"FastRouterSwap":n=Ir.fromData(t.intentionData);break;case"OpenAndAddLiquidity":n=hr.fromData(t.intentionData);break;case"AddLiquidityWithProtection":n=yr.fromData(t.intentionData);break;case"RemoveLiquidity":n=kr.fromData(t.intentionData);break;default:throw new Error("not implemented")}return n.build({account:e})}};var j6=bo.fromHelpers([new to,new uo,new Yn,new po,new Dn,new Qa,new gr,new da,new Ya,new tn,new Ta,new va,new Ne,new ir,new Ra,new Dr]);export{j6 as appHelpers};
|
|
2
2
|
//# sourceMappingURL=index.mjs.map
|