@naviprotocol/lending 1.4.0-emode.21 → 1.4.0-emode.23

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.cjs.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const F=require("@mysten/sui/transactions"),d=require("@mysten/bcs"),Y=require("@mysten/sui/client"),he=require("lodash.camelcase"),ke=require("@mysten/sui/utils"),W=require("@pythnetwork/pyth-sui-js"),l=require("bignumber.js"),C=require("@mysten/sui/bcs"),L=d.bcs.bytes(32).transform({input:e=>d.fromHex(e),output:e=>d.toHex(e)}),Ce=d.bcs.struct("IncentiveAPYInfo",{asset_id:d.bcs.u8(),apy:d.bcs.u256(),coin_types:d.bcs.vector(d.bcs.string())}),x=d.bcs.struct("IncentivePoolInfo",{pool_id:L,funds:L,phase:d.bcs.u64(),start_at:d.bcs.u64(),end_at:d.bcs.u64(),closed_at:d.bcs.u64(),total_supply:d.bcs.u64(),asset_id:d.bcs.u8(),option:d.bcs.u8(),factor:d.bcs.u256(),distributed:d.bcs.u64(),available:d.bcs.u256(),total:d.bcs.u256()}),_e=d.bcs.struct("IncentivePoolInfoByPhase",{phase:d.bcs.u64(),pools:d.bcs.vector(x)}),Te=d.bcs.struct("OracleInfo",{oracle_id:d.bcs.u8(),price:d.bcs.u256(),decimals:d.bcs.u8(),valid:d.bcs.bool()}),je=d.bcs.struct("FlashLoanAssetConfig",{id:d.bcs.string(),asset_id:d.bcs.u8(),coin_type:d.bcs.string(),pool_id:d.bcs.string(),rate_to_supplier:d.bcs.u64(),rate_to_treasury:d.bcs.u64(),max:d.bcs.u64(),min:d.bcs.u64()}),Ie=d.bcs.struct("ReserveDataInfo",{id:d.bcs.u8(),oracle_id:d.bcs.u8(),coin_type:d.bcs.string(),supply_cap:d.bcs.u256(),borrow_cap:d.bcs.u256(),supply_rate:d.bcs.u256(),borrow_rate:d.bcs.u256(),supply_index:d.bcs.u256(),borrow_index:d.bcs.u256(),total_supply:d.bcs.u256(),total_borrow:d.bcs.u256(),last_update_at:d.bcs.u64(),ltv:d.bcs.u256(),treasury_factor:d.bcs.u256(),treasury_balance:d.bcs.u256(),base_rate:d.bcs.u256(),multiplier:d.bcs.u256(),jump_rate_multiplier:d.bcs.u256(),reserve_factor:d.bcs.u256(),optimal_utilization:d.bcs.u256(),liquidation_ratio:d.bcs.u256(),liquidation_bonus:d.bcs.u256(),liquidation_threshold:d.bcs.u256()}),ee=d.bcs.struct("UserStateInfo",{asset_id:d.bcs.u8(),borrow_balance:d.bcs.u256(),supply_balance:d.bcs.u256()}),Be="1.4.0-emode.21",S={version:Be},Ae=S.version,Pe=()=>{if(typeof process<"u"&&process.versions&&process.versions.node)try{const e=require("os"),o=process.version,n=e.type(),r=e.arch();return`Node.js ${o.startsWith("v")?o.substring(1):o}; ${n}/${r}`}catch{return`Node.js ${process.version}; OS/Unknown (Error)`}return"Node/Unknown"},Se=()=>{let e="";return typeof process<"u"&&process.versions&&process.versions.node&&(e=`lending/${Ae} (${Pe()})`),e},J=Se(),P=new Y.SuiClient({url:Y.getFullnodeUrl("mainnet")});function te(e){const o=[];return e.forEach((n,r)=>{const t=r===e.length-1;if(typeof n=="object"&&n!==null&&t){const{client:a,disableCache:s,cacheTime:c,...i}=n;o.push(i)}else o.push(n)}),JSON.stringify(o)}function j(e){const o={};return(...n)=>{const r=te(n);return o[r]||(o[r]=e(...n).finally(()=>{delete o[r]})),o[r]}}function A(e){let o={};return(...n)=>{const r=n[n.length-1],t=te(n),a=o[t];return!r?.disableCache&&typeof a?.data<"u"&&(typeof r?.cacheTime>"u"||r.cacheTime>Date.now()-a.cacheAt)?a.data:e(...n).then(s=>(o[t]={data:s,cacheAt:Date.now()},s))}}function q(e){return Array.isArray(e)?e.map(o=>q(o)):e!=null&&typeof e=="object"?Object.keys(e).reduce((o,n)=>({...o,[he(n)]:q(e[n])}),{}):e}function g(e,o){return typeof e=="object"?e:o(e)}function $e(e,o){return typeof o=="string"?e.object(o):typeof o=="object"&&o.$kind?o:e.object(o.contract.pool)}function N(e,o,n){if(e.results&&e.results.length>0){if(e.results[0].returnValues&&e.results[0].returnValues.length>0)return e.results[0].returnValues.map((r,t)=>(o[t]||o[0]).parse(Uint8Array.from(r[0])))}else if(e.error)return console.log(`Get an error, msg: ${e.error}`),[];return[]}function h(e){return ke.normalizeStructTag(e)}function oe(e){const o=(e||0)/Math.pow(10,27);return o>Math.pow(10,5)?1/0:o}new W.SuiPriceServiceConnection("https://hermes.pyth.network",{timeout:2e4});const Ee=27,Q=(e,o)=>{if(!Number(e)||!Number(o))return new l(0);const n=new l(1).shiftedBy(1*Ee),r=n.multipliedBy(new l(.5));return new l(e).multipliedBy(new l(o)).plus(r).dividedBy(n).integerValue(l.ROUND_DOWN)},V=J?{"User-Agent":J}:{};function H(e,o="uniqueId"){return e.reduce((n,r)=>(n[r[o]]=r,n),{})}function X(e,o="uniqueId"){return e.reduce((n,r)=>(n[r[o]]=r,n),{})}function Z(e,o){const n=e.emodes.find(t=>t.emodeId===o.emodeId);if(!n)throw new Error("EMode not found in pool");const r=n.assets.find(t=>t.assetId===e.id);return{...e,emode:{...r,emodeId:n.emodeId},isEMode:!0}}function ne(e){const[o,n]=e.split("-");return!o||!n?null:{marketKey:o,poolId:parseInt(n)}}function E(){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():Math.random().toString(36).substring(2,15)+Math.random().toString(36).substring(2,15)}var D=(e=>(e[e.Supply=1]="Supply",e[e.Withdraw=2]="Withdraw",e[e.Borrow=3]="Borrow",e[e.Repay=4]="Repay",e))(D||{});const O=A(j(async e=>{const o=(e?.markets||[$.main]).map(t=>T(t)),n=`https://open-api.naviprotocol.io/api/navi/pools?env=${e?.env||"prod"}&sdk=${S.version}&market=${o.map(t=>t.key)}`,r=await fetch(n,{headers:V}).then(t=>t.json());return r.data.forEach(t=>{const s=r.meta.emodes.filter(f=>{const _=T(f.marketId);return t.market===_.key&&f.isActive}).filter(f=>!!f.assets.find(_=>_.assetId===t.id));t.emodes=s;const c=l(t.totalSupplyAmount).div(Math.pow(10,9)).decimalPlaces(t.token.decimals,l.ROUND_DOWN).toString(),i=l(t.borrowedAmount).shiftedBy(-9).decimalPlaces(t.token.decimals,l.ROUND_DOWN).toString(),u=l(c).multipliedBy(t.oracle.price).toString(),m=l(i).multipliedBy(t.oracle.price).toString(),y=l(t.supplyCapCeiling).shiftedBy(-27).decimalPlaces(t.token.decimals,l.ROUND_DOWN).toString(),w=l.max(l(t.borrowedAmount),l(t.validBorrowAmount)).shiftedBy(-9).decimalPlaces(t.token.decimals,l.ROUND_DOWN).toString(),b=l(y).multipliedBy(t.oracle.price).toString(),p=l(w).multipliedBy(t.oracle.price).toString();t.poolSupplyAmount=c,t.poolBorrowAmount=i,t.poolSupplyValue=u,t.poolBorrowValue=m,t.poolSupplyCapAmount=y,t.poolBorrowCapAmount=w,t.poolSupplyCapValue=b,t.poolBorrowCapValue=p}),r.data}));async function B(e,o){let n=o?.market;if(typeof e=="string"){const a=ne(e);a&&(n=a.marketKey,e=a.poolId)}const r=await O({...o,markets:[n||U],cacheTime:v});if(typeof e=="object")return e;const t=r.find(a=>typeof e=="string"?h(a.suiCoinType)===h(e):typeof e=="number"?a.id===e:!1);if(!t)throw new Error("Pool not found");return t.isDeprecated&&console.log(`The lending pool for coinType ${t.suiCoinType} is going to be deprecated.`),t}const Ve=A(j(async e=>{const o=`https://open-api.naviprotocol.io/api/navi/stats?sdk=${S.version}`;return(await fetch(o,{headers:V}).then(r=>r.json())).data})),Me=A(j(async e=>{const o=`https://open-api.naviprotocol.io/api/navi/fee?sdk=${S.version}`;return await fetch(o,{headers:V}).then(r=>r.json())}));async function re(e,o,n,r){const t=await k({...r,cacheTime:v}),a=await B(o,r);if(a?.deprecatedAt&&Date.now()>a.deprecatedAt)throw new Error(`The lending pool for coinType ${a.suiCoinType} has been deprecated.`);const s=typeof n=="object"&&n.$kind==="GasCoin";if(h(a.suiCoinType)===h("0x2::sui::SUI")&&s){if(!r?.amount)throw new Error("Amount is required for sui coin");n=e.splitCoins(n,[r.amount])}let c;return typeof r?.amount<"u"?c=g(r.amount,e.pure.u64):c=e.moveCall({target:"0x2::coin::value",arguments:[g(n,e.object)],typeArguments:[a.suiCoinType]}),r?.accountCap?e.moveCall({target:`${t.package}::incentive_v3::deposit_with_account_cap`,arguments:[e.object("0x06"),e.object(t.storage),e.object(a.contract.pool),e.pure.u8(a.id),g(n,e.object),e.object(t.incentiveV2),e.object(t.incentiveV3),g(r.accountCap,e.object)],typeArguments:[a.suiCoinType]}):e.moveCall({target:`${t.package}::incentive_v3::entry_deposit`,arguments:[e.object("0x06"),e.object(t.storage),e.object(a.contract.pool),e.pure.u8(a.id),g(n,e.object),c,e.object(t.incentiveV2),e.object(t.incentiveV3)],typeArguments:[a.suiCoinType]}),t.version===2&&a.id===0&&(!r?.env||r?.env==="prod")&&e.moveCall({target:`${t.package}::pool::refresh_stake`,arguments:[e.object(a.contract.pool),e.object("0x05")]}),e}async function Ue(e,o,n,r){const t=await k({...r,cacheTime:v}),a=await B(o,r),s=g(n,e.pure.u64);let c;if(t.version===1)if(r?.accountCap){const[u]=e.moveCall({target:`${t.package}::incentive_v3::withdraw_with_account_cap`,arguments:[e.object("0x06"),e.object(t.priceOracle),e.object(t.storage),e.object(a.contract.pool),e.pure.u8(a.id),s,e.object(t.incentiveV2),e.object(t.incentiveV3),g(r.accountCap,e.object)],typeArguments:[a.suiCoinType]});c=u}else{const[u]=e.moveCall({target:`${t.package}::incentive_v3::withdraw`,arguments:[e.object("0x06"),e.object(t.priceOracle),e.object(t.storage),e.object(a.contract.pool),e.pure.u8(a.id),s,e.object(t.incentiveV2),e.object(t.incentiveV3)],typeArguments:[a.suiCoinType]});c=u}else if(r?.accountCap){const[u]=e.moveCall({target:`${t.package}::incentive_v3::withdraw_with_account_cap_v2`,arguments:[e.object("0x06"),e.object(t.priceOracle),e.object(t.storage),e.object(a.contract.pool),e.pure.u8(a.id),s,e.object(t.incentiveV2),e.object(t.incentiveV3),g(r.accountCap,e.object),e.object("0x05")],typeArguments:[a.suiCoinType]});c=u}else{const[u]=e.moveCall({target:`${t.package}::incentive_v3::withdraw_v2`,arguments:[e.object("0x06"),e.object(t.priceOracle),e.object(t.storage),e.object(a.contract.pool),e.pure.u8(a.id),s,e.object(t.incentiveV2),e.object(t.incentiveV3),e.object("0x05")],typeArguments:[a.suiCoinType]});c=u}return e.moveCall({target:"0x2::coin::from_balance",arguments:[c],typeArguments:[a.suiCoinType]})}async function De(e,o,n,r){const t=await k({...r,cacheTime:v}),a=await B(o,r);if(a?.deprecatedAt&&Date.now()>a.deprecatedAt)throw new Error(`The lending pool for coinType ${a.suiCoinType} has been deprecated.`);const s=g(n,e.pure.u64);let c;if(t.version===1)if(r?.accountCap){const[u]=e.moveCall({target:`${t.package}::incentive_v3::borrow_with_account_cap`,arguments:[e.object("0x06"),e.object(t.priceOracle),e.object(t.storage),e.object(a.contract.pool),e.pure.u8(a.id),s,e.object(t.incentiveV2),e.object(t.incentiveV3),g(r.accountCap,e.object)],typeArguments:[a.suiCoinType]});c=u}else{const[u]=e.moveCall({target:`${t.package}::incentive_v3::borrow`,arguments:[e.object("0x06"),e.object(t.priceOracle),e.object(t.storage),e.object(a.contract.pool),e.pure.u8(a.id),s,e.object(t.incentiveV2),e.object(t.incentiveV3)],typeArguments:[a.suiCoinType]});c=u}else if(r?.accountCap){const[u]=e.moveCall({target:`${t.package}::incentive_v3::borrow_with_account_cap_v2`,arguments:[e.object("0x06"),e.object(t.priceOracle),e.object(t.storage),e.object(a.contract.pool),e.pure.u8(a.id),s,e.object(t.incentiveV2),e.object(t.incentiveV3),g(r.accountCap,e.object),e.object("0x05")],typeArguments:[a.suiCoinType]});c=u}else{const[u]=e.moveCall({target:`${t.package}::incentive_v3::borrow_v2`,arguments:[e.object("0x06"),e.object(t.priceOracle),e.object(t.storage),e.object(a.contract.pool),e.pure.u8(a.id),s,e.object(t.incentiveV2),e.object(t.incentiveV3),e.object("0x05")],typeArguments:[a.suiCoinType]});c=u}return e.moveCall({target:"0x2::coin::from_balance",arguments:[e.object(c)],typeArguments:[a.suiCoinType]})}async function Fe(e,o,n,r){const t=await k({...r,cacheTime:v}),a=await B(o,r),s=typeof n=="object"&&n.$kind==="GasCoin";if(h(a.suiCoinType)===h("0x2::sui::SUI")&&s){if(!r?.amount)throw new Error("Amount is required for sui coin");n=e.splitCoins(n,[r.amount])}let c;if(typeof r?.amount<"u"?c=g(r.amount,e.pure.u64):c=e.moveCall({target:"0x2::coin::value",arguments:[g(n,e.object)],typeArguments:[a.suiCoinType]}),r?.accountCap){const[i]=e.moveCall({target:`${t.package}::incentive_v3::repay_with_account_cap`,arguments:[e.object("0x06"),e.object(t.priceOracle),e.object(t.storage),e.object(a.contract.pool),e.pure.u8(a.id),g(n,e.object),e.object(t.incentiveV2),e.object(t.incentiveV3),g(r.accountCap,e.object)],typeArguments:[a.suiCoinType]});return e.moveCall({target:"0x2::coin::from_balance",arguments:[i],typeArguments:[a.suiCoinType]})}else return e.moveCall({target:`${t.package}::incentive_v3::entry_repay`,arguments:[e.object("0x06"),e.object(t.priceOracle),e.object(t.storage),e.object(a.contract.pool),e.pure.u8(a.id),g(n,e.object),c,e.object(t.incentiveV2),e.object(t.incentiveV3)],typeArguments:[a.suiCoinType]}),e}const Oe=A(j(async e=>{const o=await k({...e});if(e?.address&&typeof e?.asset<"u")try{const t=await B(e.asset,e),a=e?.client??P,s=new F.Transaction;s.moveCall({target:`${o.package}::incentive_v3::get_borrow_fee_v2`,arguments:[s.object(o.incentiveV3),s.pure.address(e.address),s.pure.u8(t.id),s.pure.u64(1e4)],typeArguments:[]});const c=await a.devInspectTransactionBlock({transactionBlock:s,sender:e.address}),i=N(c,[C.bcs.u64()]);return(Number(i[0])||0)/100}catch(t){console.error(t)}const r=(await P.getObject({id:o.incentiveV3,options:{showType:!0,showOwner:!0,showContent:!0}})).data.content.fields.borrow_fee_rate;return Number(r)/100})),U="main",$={main:{id:0,key:"main",name:"Main Market"}};class ae{constructor(o,n){this.poolMap={},this.emodeMap={},this.pools=[],this.emodes=[],this.emodePools=[],this.emodeBorrowablePools=[],this.emodeSupplyablePools=[],this._overview={marketTotalSupplyValue:"0",marketTotalBorrowValue:"0"},this.config=T(o),this.addPools(n)}get overview(){return this._overview}addPools(o){const n=H(this.pools),r=X(this.emodes),t=new Set,a=new Set;let s=l(0),c=l(0);o.forEach(i=>{if(!this.checkMarket(i.market)){console.warn(`Pool is not in market ${this.config.name}`,i);return}n[i.uniqueId]||this.pools.push(i),i?.emodes?.forEach(m=>{r[m.uniqueId]||this.emodes.push(m),m.assets.forEach(y=>{y.isDebt&&t.add(i.uniqueId),y.isCollateral&&a.add(i.uniqueId)})}),c=c.plus(i.poolBorrowValue),s=s.plus(i.poolSupplyValue)}),this.poolMap=H(this.pools,"id"),this.emodeMap=X(this.emodes,"emodeId"),this.emodes.forEach(i=>{const u=this.getEModePools(i.emodeId);this.emodePools.push(...u)}),this._overview={marketTotalSupplyValue:s.toString(),marketTotalBorrowValue:c.toString()},this.emodeBorrowablePools=this.pools.filter(i=>t.has(i.uniqueId)),this.emodeSupplyablePools=this.pools.filter(i=>a.has(i.uniqueId))}getEMode(o){return this.emodeMap[o]||null}getEModeRelatePools(o,n){const{collateral:r,debt:t,emodeId:a}=n||{},s=[];return o.emodes.forEach(c=>{typeof a=="number"&&a!==c.emodeId||c.assets.forEach(i=>{typeof r=="boolean"&&r&&i.isCollateral&&i.assetId===o.id&&s.push(this.poolMap[i.assetId]),typeof t=="boolean"&&t&&i.isDebt&&i.assetId===o.id&&s.push(this.poolMap[i.assetId])})}),s}getEModePools(o){const n=this.getEMode(o);return n?n.assets.map(t=>t.assetId).map(t=>this.poolMap[t]).filter(t=>!!t).map(t=>{const a=n.assets.find(s=>s.assetId===t.id);return{...t,emode:{...a,emodeId:n.emodeId},isEMode:!0}}):[]}checkMarket(o){let n=!1;return typeof o=="number"&&o===this.config.id&&(n=!0),typeof o=="string"&&o===this.config.key&&(n=!0),typeof o=="object"&&o.id===this.config.id&&(n=!0),n}}const T=e=>{const n=Object.values($).find(r=>typeof e=="number"?r.id===e:typeof e=="string"?r.key===e:r.id===e.id);if(!n)throw new Error("Market not found");return n},ce=A(j(async(e,o)=>{const n=await O({cacheTime:6e4,...o,markets:e});return e.map(r=>{const t=T(r),a=n.filter(s=>s.market===t.key);return new ae(r,a)})})),Ne=A(j(async(e,o)=>(await ce([e],o))[0])),k=A(j(async e=>{const o=T(e?.market||U),n=`https://open-api.naviprotocol.io/api/navi/config?env=${e?.env||"prod"}&sdk=${S.version}&market=${o.key}`;return(await fetch(n,{headers:V}).then(t=>t.json())).data})),v=1e3*60*5;async function se(e,o){const n=await k({cacheTime:v,...o});return e.moveCall({target:`${n.package}::lending::create_account`,arguments:[]})}async function ie(e,o,n){const r=await k({cacheTime:v,...n});return e.moveCall({target:`${r.package}::account::account_owner`,arguments:[o]})}async function ue(e,o,n){const r=await k({...n,cacheTime:v});return n?.accountCap?e.moveCall({target:`${r.package}::lending::enter_emode_with_account_cap`,arguments:[e.object(r.storage),g(o,e.pure.u64),g(n.accountCap,e.object)]}):e.moveCall({target:`${r.package}::lending::enter_emode`,arguments:[e.object(r.storage),g(o,e.pure.u64)]}),e}async function Re(e,o){const n=await k({...o,cacheTime:v});return o?.accountCap?e.moveCall({target:`${n.package}::lending::exit_emode_with_account_cap`,arguments:[e.object(n.storage),g(o.accountCap,e.object)]}):e.moveCall({target:`${n.package}::lending::exit_emode`,arguments:[e.object(n.storage)]}),e}async function Le(e,o,n){const r=await k({cacheTime:v,...n}),t=await se(e,n);await ue(e,o,{...n,accountCap:t});const a=await T(n?.market||U),s=await ie(e,t,n);return e.moveCall({target:`${r.emode.contract.registryPackage}::registry::register_emode_for_account_cap`,arguments:[e.object(r.emode.contract.registryObject),s,g(a.id,e.pure.u64),g(o,e.pure.u64)]}),t}const G=A(j(async(e,o)=>{const n=await k({cacheTime:v,...o}),r=new F.Transaction,t=o?.client??P;r.moveCall({target:`${n.emode.contract.registryPackage}::registry::find_user_emode_account_caps`,arguments:[r.object(n.emode.contract.registryObject),r.pure.address(e)]});const s=(await t.devInspectTransactionBlock({transactionBlock:r,sender:e})).results[0].returnValues,c=C.bcs.vector(C.bcs.u64()).parse(Uint8Array.from(s[0][0])),i=C.bcs.vector(C.bcs.u64()).parse(Uint8Array.from(s[1][0])),u=C.bcs.vector(C.bcs.Address).parse(Uint8Array.from(s[2][0]));return c.map((m,y)=>({marketId:Number(m),emodeId:Number(i[y]),accountCap:u[y].toString()}))}));function qe(e){return`${T(e.marketId).key}-${e.emodeId}`}function He(e,o,n){const r=typeof n?.balance=="number",t=r?n.balance:0;let a=0;const s=[];let c="";if(o.sort((i,u)=>Number(u.balance)-Number(i.balance)).forEach(i=>{if(!(r&&a>=t)&&Number(i.balance)!==0){if(c||(c=i.coinType),c!==i.coinType)throw new Error("All coins must be of the same type");a+=Number(i.balance),s.push(i.coinObjectId)}}),s.length===0)throw new Error("No coins to merge");if(r&&a<t)throw new Error(`Balance is less than the specified balance: ${a} < ${t}`);return h(c)===h("0x2::sui::SUI")&&n?.useGasCoin?r?e.splitCoins(e.gas,[e.pure.u64(t)]):e.gas:(s.length===1?e.object(s[0]):e.mergeCoins(s[0],s.slice(1)),r?e.splitCoins(s[0],[e.pure.u64(t)]):s[0])}async function z(e,o,n,r,t,a,s){const c=await k({...s,cacheTime:v}),i=await B(n,s);return e.moveCall({target:`${c.uiGetter}::calculator_unchecked::dynamic_health_factor`,arguments:[e.object("0x06"),e.object(c.storage),e.object(c.oracle.priceOracle),$e(e,i),g(o,e.pure.address),g(i.id,e.pure.u8),g(r,e.pure.u64),g(t,e.pure.u64),g(a,e.pure.bool)],typeArguments:[i.suiCoinType]})}async function le(e,o,n){return z(e,o,0,0,0,!1,n)}async function pe(e,o,n){const r=new F.Transaction,t=n?.client??P,a=await O({...n,markets:Object.values($)}),s=H(a);for(let m of o){const y=await k({...n,cacheTime:v,market:m.market});r.moveCall({target:`${y.uiGetter}::getter_unchecked::get_user_state`,arguments:[r.object(y.storage),r.pure.address(m.address)]})}const i=((await t.devInspectTransactionBlock({transactionBlock:r,sender:e})).results||[]).map(m=>m.returnValues?.map(y=>C.bcs.vector(ee).parse(Uint8Array.from(y[0])))[0]||[]),u=[];return i.forEach((m,y)=>{const w=o[y],b=T(w.market);m.forEach(p=>{if(p.supply_balance==="0"&&p.borrow_balance==="0")return;const f=s[`${b.key}-${p.asset_id}`];if(!f)return;const _=Q(p.supply_balance,f.currentSupplyIndex).toString(),I=Q(p.borrow_balance,f.currentBorrowIndex).toString();u.push({supplyBalance:_,borrowBalance:I,assetId:p.asset_id,market:b.key,pool:f,emodeId:w.emodeId})})}),u}const We=A(async(e,o)=>{const r=(o?.markets||Object.keys($)).map(t=>T(t)).map(t=>({address:e,market:t.key}));return await pe(e,r,o)});async function Ge(e,o){const n=o?.client??P,r=new F.Transaction;await le(r,e,o);const t=await n.devInspectTransactionBlock({transactionBlock:r,sender:e}),a=N(t,[C.bcs.u256()]);return oe(Number(a[0])||0)}async function ze(e,o,n,r){const t=r?.client??P,a=new F.Transaction;let s=0,c=0;const i=await B(o,r);if(n.forEach(w=>{w.type===D.Supply?s+=w.amount:w.type===D.Withdraw?s-=w.amount:w.type===D.Borrow?c+=w.amount:w.type===D.Repay&&(c-=w.amount)}),s*c<0)throw new Error("Invalid operations");const u=s>0||c>0;await z(a,e,i,Math.abs(s),Math.abs(c),u,r);const m=await t.devInspectTransactionBlock({transactionBlock:a,sender:e}),y=N(m,[C.bcs.u256()]);return oe(Number(y[0])||0)}const Ke=j(async(e,o)=>{const n=new URLSearchParams;o?.cursor&&n.set("cursor",o.cursor),n.set("userAddress",e);const r=`https://open-api.naviprotocol.io/api/navi/user/transactions?${n.toString()}&sdk=${S.version}`;return(await fetch(r,{headers:V}).then(a=>a.json())).data});async function Ye(e,o){let n=null;const r=[],t=o?.client??P;do{let a;if(o?.coinType?a=await t.getCoins({owner:e,coinType:o?.coinType,cursor:n,limit:100}):a=await t.getAllCoins({owner:e,cursor:n,limit:100}),!a.data||!a.data.length)break;r.push(...a.data),n=a.nextCursor}while(n);return r}const de=A(async(e,o)=>{const n=[],r=(o?.markets||Object.keys($)).map(c=>T(c));let t=[];try{t=await G(e,o)}catch(c){console.error(c)}const a=r.map(c=>({address:e,market:c.key})).concat(t.filter(c=>!!r.find(i=>i.id===c.marketId)).map(c=>({address:c.accountCap,market:T(c.marketId).key,emodeId:c.emodeId})));return(await pe(e,a,o)).forEach(c=>{const i=c.emodeId?t.find(u=>{const m=T(c.market);return u.emodeId===c.emodeId&&u.marketId===m.id}):void 0;if(i){if(l(c.supplyBalance).gt(0)){const u=l(c.supplyBalance).shiftedBy(-9).decimalPlaces(c.pool.token.decimals,l.ROUND_DOWN);n.push({id:`${e}_${c.pool.uniqueId}_${i.emodeId}_navi-lending-emode-supply`,wallet:e,protocol:"navi",market:c.market,type:"navi-lending-emode-supply","navi-lending-emode-supply":{amount:u.toString(),pool:Z(c.pool,i),token:c.pool.token,valueUSD:u.multipliedBy(c.pool.oracle.price).toString(),emodeCap:i}})}if(l(c.borrowBalance).gt(0)){const u=l(c.borrowBalance).shiftedBy(-9).decimalPlaces(c.pool.token.decimals,l.ROUND_DOWN);n.push({id:`${c.pool.uniqueId}_${i.emodeId}_navi-lending-emode-borrow`,wallet:e,protocol:"navi",market:c.market,type:"navi-lending-emode-borrow","navi-lending-emode-borrow":{amount:u.toString(),pool:Z(c.pool,i),token:c.pool.token,valueUSD:u.multipliedBy(c.pool.oracle.price).toString(),emodeCap:i}})}}else{if(l(c.supplyBalance).gt(0)){const u=l(c.supplyBalance).shiftedBy(-9).decimalPlaces(c.pool.token.decimals,l.ROUND_DOWN);n.push({id:`${e}_${c.pool.uniqueId}_navi-lending-supply`,wallet:e,protocol:"navi",type:"navi-lending-supply",market:c.market,"navi-lending-supply":{amount:u.toString(),pool:c.pool,token:c.pool.token,valueUSD:u.multipliedBy(c.pool.oracle.price).toString()}})}if(l(c.borrowBalance).gt(0)){const u=l(c.borrowBalance).shiftedBy(-9).decimalPlaces(c.pool.token.decimals,l.ROUND_DOWN);n.push({id:`${c.pool.uniqueId}_navi-lending-borrow`,wallet:e,protocol:"navi",market:c.market,type:"navi-lending-borrow","navi-lending-borrow":{amount:u.toString(),pool:c.pool,token:c.pool.token,valueUSD:u.multipliedBy(c.pool.oracle.price).toString()}})}}}),n});class M{constructor(o){this._positions=[],this._overview={hf:1/0,netVaule:"0",netWorthApr:"0",totalSupplyValue:"0",totalBorrowValue:"0",totalsupplyApy:"0",totalBorrowApy:"0",maxLiquidationValue:"0",maxLoanToVaule:"0",supply:{},borrow:{}},this.positions=o}get positions(){return this._positions}get overview(){return this._overview}set positions(o){this._positions=o,this._overview=this.getPositionsOverview(o)}filterPositionsByPool(o){const r=!!o.isEMode?["navi-lending-emode-supply","navi-lending-emode-borrow"]:["navi-lending-supply","navi-lending-borrow"];return new M(this.positions.filter(t=>{const a=t[t.type];return r.includes(t.type)&&a.pool.uniqueId===o.uniqueId}))}deposit(o,n){const r=!!o.isEMode;let t;return r?t={id:E(),wallet:"",protocol:"navi",market:"",type:"navi-lending-emode-supply","navi-lending-emode-supply":{amount:n.toString(),valueUSD:l(n).multipliedBy(o.oracle.price).toString(),token:o.token,pool:o,emodeCap:{}}}:t={id:E(),wallet:"",protocol:"navi",market:"",type:"navi-lending-supply","navi-lending-supply":{amount:n.toString(),valueUSD:l(n).multipliedBy(o.oracle.price).toString(),token:o.token,pool:o}},new M([...this.positions,t])}withdraw(o,n){const r=!!o.isEMode;let t;return r?t={id:E(),wallet:"",protocol:"navi",market:"",type:"navi-lending-emode-supply","navi-lending-emode-supply":{amount:(-n).toString(),valueUSD:l(-n).multipliedBy(o.oracle.price).toString(),token:o.token,pool:o,emodeCap:{}}}:t={id:E(),wallet:"",protocol:"navi",market:"",type:"navi-lending-supply","navi-lending-supply":{amount:(-n).toString(),valueUSD:l(-n).multipliedBy(o.oracle.price).toString(),token:o.token,pool:o}},new M([...this.positions,t])}borrow(o,n){const r=!!o.isEMode;let t;return r?t={id:E(),wallet:"",protocol:"navi",market:"",type:"navi-lending-emode-borrow","navi-lending-emode-borrow":{amount:n.toString(),valueUSD:l(n).multipliedBy(o.oracle.price).toString(),token:o.token,pool:o,emodeCap:{}}}:t={id:E(),wallet:"",protocol:"navi",market:"",type:"navi-lending-borrow","navi-lending-borrow":{amount:n.toString(),valueUSD:l(n).multipliedBy(o.oracle.price).toString(),token:o.token,pool:o}},new M([...this.positions,t])}repay(o,n){const r=!!o.isEMode;let t;return r?t={id:E(),wallet:"",protocol:"navi",market:"",type:"navi-lending-emode-borrow","navi-lending-emode-borrow":{amount:(-n).toString(),valueUSD:l(-n).multipliedBy(o.oracle.price).toString(),token:o.token,pool:o,emodeCap:{}}}:t={id:E(),wallet:"",protocol:"navi",market:"",type:"navi-lending-borrow","navi-lending-borrow":{amount:(-n).toString(),valueUSD:l(-n).multipliedBy(o.oracle.price).toString(),token:o.token,pool:o}},new M([...this.positions,t])}getPositionsOverview(o){const n={},r={};let t=new l(0),a=new l(0),s=new l(0),c=new l(0),i=new l(0),u=new l(0);o.forEach(b=>{if(b.type==="navi-lending-supply"){const p=b["navi-lending-supply"];t=t.plus(p.valueUSD),i=i.plus(new l(p.valueUSD).multipliedBy(p.pool.liquidationFactor.threshold)),u=u.plus(new l(p.valueUSD).multipliedBy(p.pool.ltvValue))}else if(b.type==="navi-lending-borrow")a=a.plus(b["navi-lending-borrow"].valueUSD);else if(b.type==="navi-lending-emode-supply"){const p=b["navi-lending-emode-supply"];t=t.plus(p.valueUSD);const f=p.pool.emode;i=i.plus(new l(p.valueUSD).multipliedBy(f.lt)),u=u.plus(new l(p.valueUSD).multipliedBy(f.ltv))}else b.type==="navi-lending-emode-borrow"&&(a=a.plus(b["navi-lending-emode-borrow"].valueUSD))}),o.forEach(b=>{if(b.type==="navi-lending-supply"){const p=b["navi-lending-supply"],f=p.pool.supplyIncentiveApyInfo.apy;s=s.plus(new l(p.valueUSD).dividedBy(t).multipliedBy(new l(f).dividedBy(100))),n[p.pool.suiCoinType]=l(n[p.pool.suiCoinType]||0).plus(p.amount).toString()}else if(b.type==="navi-lending-borrow"){const p=b["navi-lending-borrow"],f=p.pool.borrowIncentiveApyInfo.apy;a.gt(0)&&(c=c.plus(new l(p.valueUSD).dividedBy(a).multipliedBy(new l(f).dividedBy(100)))),r[p.pool.suiCoinType]=l(r[p.pool.suiCoinType]||0).plus(p.amount).toString()}else if(b.type==="navi-lending-emode-supply"){const p=b["navi-lending-emode-supply"],f=p.pool.supplyIncentiveApyInfo.apy;t.gt(0)&&(s=s.plus(new l(p.valueUSD).dividedBy(t).multipliedBy(new l(f).dividedBy(100)))),n[p.pool.suiCoinType]=l(n[p.pool.suiCoinType]||0).plus(p.amount).toString()}else if(b.type==="navi-lending-emode-borrow"){const p=b["navi-lending-emode-borrow"],f=p.pool.borrowIncentiveApyInfo.apy;a.gt(0)&&(c=c.plus(new l(p.valueUSD).dividedBy(a).multipliedBy(new l(f).dividedBy(100)))),r[p.pool.suiCoinType]=l(r[p.pool.suiCoinType]||0).plus(p.amount).toString()}});const m=t.minus(a),y=t.minus(a).eq(0)?new l(0):t.multipliedBy(s).minus(a.multipliedBy(c)).div(t.minus(a));return{hf:a.toNumber()!==0?i.dividedBy(a).toNumber():1/0,netVaule:m.toString(),netWorthApr:y.toString(),totalSupplyValue:t.toString(),totalBorrowValue:a.toString(),totalsupplyApy:s.toString(),totalBorrowApy:c.toString(),maxLiquidationValue:i.toString(),maxLoanToVaule:u.toString(),supply:n,borrow:r}}}const me=new W.SuiPriceServiceConnection("https://hermes.pyth.network",{timeout:1e4});async function ge(e){try{const o=[],n=await me.getLatestPriceFeeds(e);if(!n)return o;const r=Math.floor(new Date().valueOf()/1e3);for(const t of n){const a=t.getPriceUnchecked();if(a.publishTime>r){console.warn(`pyth price feed is invalid, id: ${t.id}, publish time: ${a.publishTime}, current timestamp: ${r}`);continue}r-t.getPriceUnchecked().publishTime>30&&(console.info(`stale price feed, id: ${t.id}, publish time: ${a.publishTime}, current timestamp: ${r}`),o.push(t.id))}return o}catch(o){throw new Error(`failed to get pyth stale price feed id, msg: ${o.message}`)}}async function ye(e,o,n){const r=n?.client??P,t=await k({...n,cacheTime:v});try{const a=await me.getPriceFeedsUpdateData(o);return await new W.SuiPythClient(r,t.oracle.pythStateId,t.oracle.wormholeStateId).updatePriceFeeds(e,a,o)}catch(a){throw new Error(`failed to update pyth price feeds, msg: ${a.message}`)}}async function fe(e,o,n){const r=await k({...n,cacheTime:v});if(n?.updatePythPriceFeeds){const t=o.filter(a=>!!a.pythPriceFeedId).map(a=>a.pythPriceFeedId);try{const a=await ge(t);a.length>0&&await ye(e,a,n)}catch{}}for(const t of o)n?.env==="dev"?e.moveCall({target:`${r.oracle.packageId}::oracle_pro::update_single_price`,arguments:[e.object("0x6"),e.object(r.oracle.oracleConfig),e.object(r.oracle.priceOracle),e.object(r.oracle.supraOracleHolder),e.object(t.pythPriceInfoObject),e.pure.address(t.feedId)]}):e.moveCall({target:`${r.oracle.packageId}::oracle_pro::update_single_price_v2`,arguments:[e.object("0x6"),e.object(r.oracle.oracleConfig),e.object(r.oracle.priceOracle),e.object(r.oracle.supraOracleHolder),e.object(t.pythPriceInfoObject),e.object(r.oracle.switchboardAggregator),e.pure.address(t.feedId)]});return e}async function K(e){return(await k({...e,cacheTime:v})).oracle.feeds}function be(e,o){return e.filter(n=>!!(o?.lendingState&&o.lendingState.find(t=>t.assetId===n.assetId)||o?.lendingPositions&&o.lendingPositions.find(t=>["navi-lending-supply","navi-lending-borrow","navi-lending-emode-supply","navi-lending-emode-borrow"].includes(t.type)?t[t.type]?.pool?.id===n.assetId:!1)||o?.pools&&o.pools.find(t=>t.id===n.assetId)))}async function Je(e,o,n,r){try{const t=await K({...r}),a=[];n.forEach(u=>{a.includes(u.market)||a.push(u.market)});const s=await de(o,{...r,markets:a}),c=be(t,{lendingPositions:s,pools:n});return await fe(e,c,{updatePythPriceFeeds:!0,...r})}catch(t){if(r?.throws)throw t;return console.error(t),e}}const R=A(j(async e=>{const o=`https://open-api.naviprotocol.io/api/navi/flashloan?env=${e?.env||"prod"}&sdk=${S.version}&market=${e?.market||U}`,n=await fetch(o,{headers:V}).then(r=>r.json());return Object.keys(n.data).map(r=>({...n.data[r],coinType:r}))}));async function Qe(e,o){return(await R(o)).find(r=>typeof e=="string"?h(r.coinType)===h(e):typeof e=="number"?r.assetId===e:r.assetId===e.id)||null}async function Xe(e,o,n,r){const t=await k({...r,cacheTime:v}),a=await B(o,r);if(!(await R({...r,cacheTime:v})).some(i=>h(i.coinType)===h(a.suiCoinType)))throw new Error("Pool does not support flashloan");if(t.version===1){const[i,u]=e.moveCall({target:`${t.package}::lending::flash_loan_with_ctx`,arguments:[e.object(t.flashloanConfig),e.object(a.contract.pool),g(n,e.pure.u64)],typeArguments:[a.suiCoinType]});return[i,u]}else{const[i,u]=e.moveCall({target:`${t.package}::lending::flash_loan_with_ctx_v2`,arguments:[e.object(t.flashloanConfig),e.object(a.contract.pool),g(n,e.pure.u64),e.object("0x05")],typeArguments:[a.suiCoinType]});return[i,u]}}async function Ze(e,o,n,r,t){const a=await k({...t,cacheTime:v}),s=await B(o,t);if(!(await R({...t,cacheTime:v})).some(m=>h(m.coinType)===h(s.suiCoinType)))throw new Error("Pool does not support flashloan");const[u]=e.moveCall({target:`${a.package}::lending::flash_repay_with_ctx`,arguments:[e.object("0x06"),e.object(a.storage),e.object(s.contract.pool),g(n,e.object),g(r,e.object)],typeArguments:[s.suiCoinType]});return[u]}async function xe(e,o,n,r,t,a){const s={...a,cacheTime:v},c=await k(s),i=await B(o,s),u=await B(r,s);if(c.version===1){const[m,y]=e.moveCall({target:`${c.package}::incentive_v3::liquidation`,arguments:[e.object("0x06"),e.object(c.priceOracle),e.object(c.storage),e.pure.u8(i.id),e.object(i.contract.pool),g(n,e.object),e.pure.u8(u.id),e.object(u.contract.pool),g(t,e.pure.address),e.object(c.incentiveV2),e.object(c.incentiveV3)],typeArguments:[i.suiCoinType,u.suiCoinType]});return[m,y]}else{const[m,y]=e.moveCall({target:`${c.package}::incentive_v3::liquidation_v2`,arguments:[e.object("0x06"),e.object(c.priceOracle),e.object(c.storage),e.pure.u8(i.id),e.object(i.contract.pool),g(n,e.object),e.pure.u8(u.id),e.object(u.contract.pool),g(t,e.pure.address),e.object(c.incentiveV2),e.object(c.incentiveV3),e.object("0x05")],typeArguments:[i.suiCoinType,u.suiCoinType]});return[m,y]}}async function et(e,o,n){const r=n?.client??P,t=new F.Transaction,a=await O({...n,markets:Object.values($),cacheTime:v}),s=await K(n);for(let m of o){const y=await k({...n,cacheTime:v,market:m.market});t.moveCall({target:`${y.uiGetter}::incentive_v3_getter::get_user_atomic_claimable_rewards`,arguments:[t.object("0x06"),t.object(y.storage),t.object(y.incentiveV3),t.pure.address(m.address)]})}const c=await r.devInspectTransactionBlock({transactionBlock:t,sender:e}),i=[];c?.results?.forEach(m=>{i.push(N({results:[m]},[C.bcs.vector(C.bcs.string()),C.bcs.vector(C.bcs.string()),C.bcs.vector(C.bcs.u8()),C.bcs.vector(C.bcs.Address),C.bcs.vector(C.bcs.u256())]))});const u=[];return i.forEach((m,y)=>{const w=o[y];if(m.length===5&&Array.isArray(m[0])){const b=m[0].length;for(let p=0;p<b;p++){const f=s.find(I=>h(I.coinType)===h(m[1][p])),_=a.find(I=>h(I.coinType)===h(m[0][p]));!f||!_||u.push({assetId:_.id,assetCoinType:h(m[0][p]),rewardCoinType:h(m[1][p]),option:Number(m[2][p]),userClaimableReward:Number(m[4][p])/Math.pow(10,f.priceDecimal),ruleIds:Array.isArray(m[3][p])?m[3][p]:[m[3][p]],market:w.market,owner:w.address,emodeId:w.emodeId})}}}),u}async function tt(e,o){const n=(o?.markets||[$.main]).map(a=>T(a)),r=await G(e,o),t=n.map(a=>({address:e,market:a.key})).concat(r.filter(a=>!!n.find(s=>s.id===a.marketId)).map(a=>{const s=T(a.marketId);return{address:e,market:s.key,emodeId:a.emodeId}}));return await et(e,t,o)}function ot(e){const o=new Map;e.forEach(r=>{const t=r.assetId,a=r.option,s=`${t}-${a}-${r.rewardCoinType}-${r.market}`;o.has(s)?o.get(s).total+=r.userClaimableReward:o.set(s,{assetId:t,rewardType:a,coinType:r.rewardCoinType,total:Number(r.userClaimableReward),market:r.market})});const n=new Map;for(const{assetId:r,rewardType:t,coinType:a,total:s,market:c}of o.values()){const i=`${r}-${t}-${c}`;n.has(i)||n.set(i,{assetId:r,rewardType:t,market:c,rewards:new Map});const u=n.get(i);u.rewards.set(a,(u.rewards.get(a)||0)+s)}return Array.from(n.values()).map(r=>({assetId:r.assetId,rewardType:r.rewardType,market:r.market,rewards:Array.from(r.rewards.entries()).map(([t,a])=>({coinType:t,available:a.toFixed(6)}))}))}const nt=j(async(e,o)=>{const n=`https://open-api.naviprotocol.io/api/navi/user/total_claimed_reward?userAddress=${e}&sdk=${S.version}&market=${o?.market||U}`;return(await fetch(n,{headers:V}).then(t=>t.json())).data}),rt=j(async(e,o)=>{const n=`https://open-api.naviprotocol.io/api/navi/user/rewards?userAddress=${e}&page=${o?.page||1}&pageSize=${o?.size||400}&sdk=${S.version}&market=${o?.market||U}`,r=await fetch(n,{headers:V}).then(t=>t.json());return q({data:r.data.rewards})});async function at(e,o,n){const r=await k({...n,cacheTime:v}),t=await O({...n,markets:Object.values($),cacheTime:v}),a=new Map;for(const c of o){const{rewardCoinType:i,ruleIds:u,market:m,owner:y,emodeId:w}=c,b=`${i}-${m}-${y}`;for(const p of u){a.has(b)||a.set(b,{assetIds:[],ruleIds:[],amount:0,market:m,owner:y,isEMode:typeof w<"u"});const f=a.get(b);f.assetIds.push(c.assetCoinType.replace("0x","")),f.ruleIds.push(p),f.amount+=c.userClaimableReward}}const s=[];for(const[c,{assetIds:i,ruleIds:u,amount:m,market:y,owner:w,isEMode:b}]of a){const p=t.find(_=>h(_.suiCoinType)===h(c)&&_.market===y);if(!p||!p.contract.rewardFundId)throw new Error(`No matching rewardFund found for reward coin: ${c} ${y}`);const f=p.contract.rewardFundId;if(n?.accountCap&&!n.customCoinReceive)throw new Error("customCoinReceive is required when accountCap is provided");if(n?.customCoinReceive){let _;n.accountCap?_=e.moveCall({target:`${r.package}::incentive_v3::claim_reward_with_account_cap`,arguments:[e.object("0x06"),e.object(r.incentiveV3),e.object(r.storage),e.object(f),e.pure.vector("string",i),e.pure.vector("address",u),g(n.accountCap,e.object)],typeArguments:[c]}):b?_=e.moveCall({target:`${r.package}::incentive_v3::claim_reward_with_account_cap`,arguments:[e.object("0x06"),e.object(r.incentiveV3),e.object(r.storage),e.object(f),e.pure.vector("string",i),e.pure.vector("address",u),g(w,e.object)],typeArguments:[c]}):_=e.moveCall({target:`${r.package}::incentive_v3::claim_reward`,arguments:[e.object("0x06"),e.object(r.incentiveV3),e.object(r.storage),e.object(f),e.pure.vector("string",i),e.pure.vector("address",u)],typeArguments:[c]});const[I]=e.moveCall({target:"0x2::coin::from_balance",arguments:[_],typeArguments:[c]});if(n?.customCoinReceive.type==="transfer"){if(!n.customCoinReceive.transfer)throw new Error("customCoinReceive.transfer is required");e.transferObjects([I],g(n.customCoinReceive.transfer,e.pure.address))}if(n?.customCoinReceive.type==="depositNAVI"){const we=l(p.totalSupplyAmount).shiftedBy(-9),ve=l(p.supplyCapCeiling).shiftedBy(-27);we.plus(m).isGreaterThan(ve)&&n?.customCoinReceive.depositNAVI?.fallbackReceiveAddress?e.transferObjects([I],e.pure.address(n.customCoinReceive.depositNAVI.fallbackReceiveAddress)):await re(e,p,I,n)}else s.push({coin:I,identifier:p,owner:w,isEMode:b})}else if(n?.accountCap||b){const _=e.moveCall({target:`${r.package}::incentive_v3::claim_reward_with_account_cap`,arguments:[e.object("0x06"),e.object(r.incentiveV3),e.object(r.storage),e.object(f),e.pure.vector("string",i),e.pure.vector("address",u),g(n?.accountCap||w,e.object)],typeArguments:[c]}),[I]=e.moveCall({target:"0x2::coin::from_balance",arguments:[_],typeArguments:[c]});e.transferObjects([I],g(n?.accountCap||w,e.pure.address))}else e.moveCall({target:`${r.package}::incentive_v3::claim_reward_entry`,arguments:[e.object("0x06"),e.object(r.incentiveV3),e.object(r.storage),e.object(f),e.pure.vector("string",i),e.pure.vector("address",u)],typeArguments:[c]})}return s}exports.Address=L;exports.DEFAULT_CACHE_TIME=v;exports.DEFAULT_MARKET_IDENTITY=U;exports.FlashLoanAssetConfig=je;exports.IncentiveAPYInfo=Ce;exports.IncentivePoolInfo=x;exports.IncentivePoolInfoByPhase=_e;exports.MARKETS=$;exports.Market=ae;exports.OracleInfo=Te;exports.PoolOperator=D;exports.ReserveDataInfo=Ie;exports.UserPositions=M;exports.UserStateInfo=ee;exports.borrowCoinPTB=De;exports.claimLendingRewardsPTB=at;exports.createAccountCapPTB=se;exports.createEModeCapPTB=Le;exports.depositCoinPTB=re;exports.emodeIdentityId=qe;exports.enterEModePTB=ue;exports.exitEModePTB=Re;exports.filterPriceFeeds=be;exports.flashloanPTB=Xe;exports.getAccountCapOwnerPTB=ie;exports.getAllFlashLoanAssets=R;exports.getBorrowFee=Oe;exports.getCoins=Ye;exports.getConfig=k;exports.getFees=Me;exports.getFlashLoanAsset=Qe;exports.getHealthFactor=Ge;exports.getHealthFactorPTB=le;exports.getLendingPositions=de;exports.getLendingState=We;exports.getMarket=Ne;exports.getMarketConfig=T;exports.getMarkets=ce;exports.getPool=B;exports.getPools=O;exports.getPriceFeeds=K;exports.getPythStalePriceFeedId=ge;exports.getSimulatedHealthFactor=ze;exports.getSimulatedHealthFactorPTB=z;exports.getStats=Ve;exports.getTransactions=Ke;exports.getUserAvailableLendingRewards=tt;exports.getUserClaimedRewardHistory=rt;exports.getUserEModeCaps=G;exports.getUserTotalClaimedReward=nt;exports.liquidatePTB=xe;exports.mergeCoinsPTB=He;exports.normalizeCoinType=h;exports.parsePoolUID=ne;exports.parseTxValue=g;exports.repayCoinPTB=Fe;exports.repayFlashLoanPTB=Ze;exports.summaryLendingRewards=ot;exports.updateOraclePriceBeforeUserOperationPTB=Je;exports.updateOraclePricesPTB=fe;exports.updatePythPriceFeeds=ye;exports.withCache=A;exports.withSingleton=j;exports.withdrawCoinPTB=Ue;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const O=require("@mysten/sui/transactions"),d=require("@mysten/bcs"),J=require("@mysten/sui/client"),ke=require("lodash.camelcase"),Ce=require("@mysten/sui/utils"),G=require("@pythnetwork/pyth-sui-js"),p=require("bignumber.js"),C=require("@mysten/sui/bcs"),q=d.bcs.bytes(32).transform({input:e=>d.fromHex(e),output:e=>d.toHex(e)}),_e=d.bcs.struct("IncentiveAPYInfo",{asset_id:d.bcs.u8(),apy:d.bcs.u256(),coin_types:d.bcs.vector(d.bcs.string())}),ee=d.bcs.struct("IncentivePoolInfo",{pool_id:q,funds:q,phase:d.bcs.u64(),start_at:d.bcs.u64(),end_at:d.bcs.u64(),closed_at:d.bcs.u64(),total_supply:d.bcs.u64(),asset_id:d.bcs.u8(),option:d.bcs.u8(),factor:d.bcs.u256(),distributed:d.bcs.u64(),available:d.bcs.u256(),total:d.bcs.u256()}),Te=d.bcs.struct("IncentivePoolInfoByPhase",{phase:d.bcs.u64(),pools:d.bcs.vector(ee)}),je=d.bcs.struct("OracleInfo",{oracle_id:d.bcs.u8(),price:d.bcs.u256(),decimals:d.bcs.u8(),valid:d.bcs.bool()}),Ie=d.bcs.struct("FlashLoanAssetConfig",{id:d.bcs.string(),asset_id:d.bcs.u8(),coin_type:d.bcs.string(),pool_id:d.bcs.string(),rate_to_supplier:d.bcs.u64(),rate_to_treasury:d.bcs.u64(),max:d.bcs.u64(),min:d.bcs.u64()}),Be=d.bcs.struct("ReserveDataInfo",{id:d.bcs.u8(),oracle_id:d.bcs.u8(),coin_type:d.bcs.string(),supply_cap:d.bcs.u256(),borrow_cap:d.bcs.u256(),supply_rate:d.bcs.u256(),borrow_rate:d.bcs.u256(),supply_index:d.bcs.u256(),borrow_index:d.bcs.u256(),total_supply:d.bcs.u256(),total_borrow:d.bcs.u256(),last_update_at:d.bcs.u64(),ltv:d.bcs.u256(),treasury_factor:d.bcs.u256(),treasury_balance:d.bcs.u256(),base_rate:d.bcs.u256(),multiplier:d.bcs.u256(),jump_rate_multiplier:d.bcs.u256(),reserve_factor:d.bcs.u256(),optimal_utilization:d.bcs.u256(),liquidation_ratio:d.bcs.u256(),liquidation_bonus:d.bcs.u256(),liquidation_threshold:d.bcs.u256()}),te=d.bcs.struct("UserStateInfo",{asset_id:d.bcs.u8(),borrow_balance:d.bcs.u256(),supply_balance:d.bcs.u256()}),Ae="1.4.0-emode.23",S={version:Ae},Pe=S.version,Se=()=>{if(typeof process<"u"&&process.versions&&process.versions.node)try{const e=require("os"),o=process.version,n=e.type(),r=e.arch();return`Node.js ${o.startsWith("v")?o.substring(1):o}; ${n}/${r}`}catch{return`Node.js ${process.version}; OS/Unknown (Error)`}return"Node/Unknown"},$e=()=>{let e="";return typeof process<"u"&&process.versions&&process.versions.node&&(e=`lending/${Pe} (${Se()})`),e},Q=$e(),P=new J.SuiClient({url:J.getFullnodeUrl("mainnet")});function oe(e){const o=[];return e.forEach((n,r)=>{const t=r===e.length-1;if(typeof n=="object"&&n!==null&&t){const{client:a,disableCache:s,cacheTime:c,...i}=n;o.push(i)}else o.push(n)}),JSON.stringify(o)}function I(e){const o={};return(...n)=>{const r=oe(n);return o[r]||(o[r]=e(...n).finally(()=>{delete o[r]})),o[r]}}function A(e){let o={};return(...n)=>{const r=n[n.length-1],t=oe(n),a=o[t];return!r?.disableCache&&typeof a?.data<"u"&&(typeof r?.cacheTime>"u"||r.cacheTime>Date.now()-a.cacheAt)?a.data:e(...n).then(s=>(o[t]={data:s,cacheAt:Date.now()},s))}}function H(e){return Array.isArray(e)?e.map(o=>H(o)):e!=null&&typeof e=="object"?Object.keys(e).reduce((o,n)=>({...o,[ke(n)]:H(e[n])}),{}):e}function g(e,o){return typeof e=="object"?e:o(e)}function Ee(e,o){return typeof o=="string"?e.object(o):typeof o=="object"&&o.$kind?o:e.object(o.contract.pool)}function R(e,o,n){if(e.results&&e.results.length>0){if(e.results[0].returnValues&&e.results[0].returnValues.length>0)return e.results[0].returnValues.map((r,t)=>(o[t]||o[0]).parse(Uint8Array.from(r[0])))}else if(e.error)return console.log(`Get an error, msg: ${e.error}`),[];return[]}function h(e){return Ce.normalizeStructTag(e)}function ne(e){const o=(e||0)/Math.pow(10,27);return o>Math.pow(10,5)?1/0:o}new G.SuiPriceServiceConnection("https://hermes.pyth.network",{timeout:2e4});const Ve=27,X=(e,o)=>{if(!Number(e)||!Number(o))return new p(0);const n=new p(1).shiftedBy(1*Ve),r=n.multipliedBy(new p(.5));return new p(e).multipliedBy(new p(o)).plus(r).dividedBy(n).integerValue(p.ROUND_DOWN)},V=Q?{"User-Agent":Q}:{};function W(e,o="uniqueId"){return e.reduce((n,r)=>(n[r[o]]=r,n),{})}function Z(e,o="uniqueId"){return e.reduce((n,r)=>(n[r[o]]=r,n),{})}function x(e,o){const n=e.emodes.find(t=>t.emodeId===o.emodeId);if(!n)throw new Error("EMode not found in pool");const r=n.assets.find(t=>t.assetId===e.id);return{...e,emode:{...r,emodeId:n.emodeId},isEMode:!0}}function re(e){const[o,n]=e.split("-");return!o||!n?null:{marketKey:o,poolId:parseInt(n)}}function E(){return typeof crypto<"u"&&typeof crypto.randomUUID=="function"?crypto.randomUUID():Math.random().toString(36).substring(2,15)+Math.random().toString(36).substring(2,15)}var F=(e=>(e[e.Supply=1]="Supply",e[e.Withdraw=2]="Withdraw",e[e.Borrow=3]="Borrow",e[e.Repay=4]="Repay",e))(F||{});const N=A(I(async e=>{const o=(e?.markets||[$.main]).map(t=>T(t)),n=`https://open-api.naviprotocol.io/api/navi/pools?env=${e?.env||"prod"}&sdk=${S.version}&market=${o.map(t=>t.key)}`,r=await fetch(n,{headers:V}).then(t=>t.json());return r.data.forEach(t=>{const s=r.meta.emodes.filter(f=>{const j=T(f.marketId);return t.market===j.key&&f.isActive}).filter(f=>!!f.assets.find(j=>j.assetId===t.id));t.emodes=s;const c=p(t.totalSupplyAmount).div(Math.pow(10,9)).decimalPlaces(t.token.decimals,p.ROUND_DOWN).toString(),i=p(t.borrowedAmount).shiftedBy(-9).decimalPlaces(t.token.decimals,p.ROUND_DOWN).toString(),u=p(c).multipliedBy(t.oracle.price).toString(),m=p(i).multipliedBy(t.oracle.price).toString(),y=p(t.supplyCapCeiling).shiftedBy(-27).decimalPlaces(t.token.decimals,p.ROUND_DOWN).toString(),w=p.max(p(t.borrowedAmount),p(t.validBorrowAmount)).shiftedBy(-9).decimalPlaces(t.token.decimals,p.ROUND_DOWN).toString(),b=p(y).multipliedBy(t.oracle.price).toString(),l=p(w).multipliedBy(t.oracle.price).toString();t.poolSupplyAmount=c,t.poolBorrowAmount=i,t.poolSupplyValue=u,t.poolBorrowValue=m,t.poolSupplyCapAmount=y,t.poolBorrowCapAmount=w,t.poolSupplyCapValue=b,t.poolBorrowCapValue=l}),r.data}));async function B(e,o){let n=o?.market;if(typeof e=="string"){const a=re(e);a&&(n=a.marketKey,e=a.poolId)}const r=await N({...o,markets:[n||U],cacheTime:v});if(typeof e=="object")return e;const t=r.find(a=>typeof e=="string"?h(a.suiCoinType)===h(e):typeof e=="number"?a.id===e:!1);if(!t)throw new Error("Pool not found");return t.isDeprecated&&console.log(`The lending pool for coinType ${t.suiCoinType} is going to be deprecated.`),t}const Me=A(I(async e=>{const o=`https://open-api.naviprotocol.io/api/navi/stats?sdk=${S.version}`;return(await fetch(o,{headers:V}).then(r=>r.json())).data})),Ue=A(I(async e=>{const o=`https://open-api.naviprotocol.io/api/navi/fee?sdk=${S.version}`;return await fetch(o,{headers:V}).then(r=>r.json())}));async function ae(e,o,n,r){const t=await k({...r,cacheTime:v}),a=await B(o,r);if(a?.deprecatedAt&&Date.now()>a.deprecatedAt)throw new Error(`The lending pool for coinType ${a.suiCoinType} has been deprecated.`);const s=typeof n=="object"&&n.$kind==="GasCoin";if(h(a.suiCoinType)===h("0x2::sui::SUI")&&s){if(!r?.amount)throw new Error("Amount is required for sui coin");n=e.splitCoins(n,[r.amount])}let c;return typeof r?.amount<"u"?c=g(r.amount,e.pure.u64):c=e.moveCall({target:"0x2::coin::value",arguments:[g(n,e.object)],typeArguments:[a.suiCoinType]}),r?.accountCap?e.moveCall({target:`${t.package}::incentive_v3::deposit_with_account_cap`,arguments:[e.object("0x06"),e.object(t.storage),e.object(a.contract.pool),e.pure.u8(a.id),g(n,e.object),e.object(t.incentiveV2),e.object(t.incentiveV3),g(r.accountCap,e.object)],typeArguments:[a.suiCoinType]}):e.moveCall({target:`${t.package}::incentive_v3::entry_deposit`,arguments:[e.object("0x06"),e.object(t.storage),e.object(a.contract.pool),e.pure.u8(a.id),g(n,e.object),c,e.object(t.incentiveV2),e.object(t.incentiveV3)],typeArguments:[a.suiCoinType]}),t.version===2&&a.id===0&&(!r?.env||r?.env==="prod")&&e.moveCall({target:`${t.package}::pool::refresh_stake`,arguments:[e.object(a.contract.pool),e.object("0x05")]}),e}async function De(e,o,n,r){const t=await k({...r,cacheTime:v}),a=await B(o,r),s=g(n,e.pure.u64);let c;if(t.version===1)if(r?.accountCap){const[u]=e.moveCall({target:`${t.package}::incentive_v3::withdraw_with_account_cap`,arguments:[e.object("0x06"),e.object(t.priceOracle),e.object(t.storage),e.object(a.contract.pool),e.pure.u8(a.id),s,e.object(t.incentiveV2),e.object(t.incentiveV3),g(r.accountCap,e.object)],typeArguments:[a.suiCoinType]});c=u}else{const[u]=e.moveCall({target:`${t.package}::incentive_v3::withdraw`,arguments:[e.object("0x06"),e.object(t.priceOracle),e.object(t.storage),e.object(a.contract.pool),e.pure.u8(a.id),s,e.object(t.incentiveV2),e.object(t.incentiveV3)],typeArguments:[a.suiCoinType]});c=u}else if(r?.accountCap){const[u]=e.moveCall({target:`${t.package}::incentive_v3::withdraw_with_account_cap_v2`,arguments:[e.object("0x06"),e.object(t.priceOracle),e.object(t.storage),e.object(a.contract.pool),e.pure.u8(a.id),s,e.object(t.incentiveV2),e.object(t.incentiveV3),g(r.accountCap,e.object),e.object("0x05")],typeArguments:[a.suiCoinType]});c=u}else{const[u]=e.moveCall({target:`${t.package}::incentive_v3::withdraw_v2`,arguments:[e.object("0x06"),e.object(t.priceOracle),e.object(t.storage),e.object(a.contract.pool),e.pure.u8(a.id),s,e.object(t.incentiveV2),e.object(t.incentiveV3),e.object("0x05")],typeArguments:[a.suiCoinType]});c=u}return e.moveCall({target:"0x2::coin::from_balance",arguments:[c],typeArguments:[a.suiCoinType]})}async function Fe(e,o,n,r){const t=await k({...r,cacheTime:v}),a=await B(o,r);if(a?.deprecatedAt&&Date.now()>a.deprecatedAt)throw new Error(`The lending pool for coinType ${a.suiCoinType} has been deprecated.`);const s=g(n,e.pure.u64);let c;if(t.version===1)if(r?.accountCap){const[u]=e.moveCall({target:`${t.package}::incentive_v3::borrow_with_account_cap`,arguments:[e.object("0x06"),e.object(t.priceOracle),e.object(t.storage),e.object(a.contract.pool),e.pure.u8(a.id),s,e.object(t.incentiveV2),e.object(t.incentiveV3),g(r.accountCap,e.object)],typeArguments:[a.suiCoinType]});c=u}else{const[u]=e.moveCall({target:`${t.package}::incentive_v3::borrow`,arguments:[e.object("0x06"),e.object(t.priceOracle),e.object(t.storage),e.object(a.contract.pool),e.pure.u8(a.id),s,e.object(t.incentiveV2),e.object(t.incentiveV3)],typeArguments:[a.suiCoinType]});c=u}else if(r?.accountCap){const[u]=e.moveCall({target:`${t.package}::incentive_v3::borrow_with_account_cap_v2`,arguments:[e.object("0x06"),e.object(t.priceOracle),e.object(t.storage),e.object(a.contract.pool),e.pure.u8(a.id),s,e.object(t.incentiveV2),e.object(t.incentiveV3),g(r.accountCap,e.object),e.object("0x05")],typeArguments:[a.suiCoinType]});c=u}else{const[u]=e.moveCall({target:`${t.package}::incentive_v3::borrow_v2`,arguments:[e.object("0x06"),e.object(t.priceOracle),e.object(t.storage),e.object(a.contract.pool),e.pure.u8(a.id),s,e.object(t.incentiveV2),e.object(t.incentiveV3),e.object("0x05")],typeArguments:[a.suiCoinType]});c=u}return e.moveCall({target:"0x2::coin::from_balance",arguments:[e.object(c)],typeArguments:[a.suiCoinType]})}async function Oe(e,o,n,r){const t=await k({...r,cacheTime:v}),a=await B(o,r),s=typeof n=="object"&&n.$kind==="GasCoin";if(h(a.suiCoinType)===h("0x2::sui::SUI")&&s){if(!r?.amount)throw new Error("Amount is required for sui coin");n=e.splitCoins(n,[r.amount])}let c;if(typeof r?.amount<"u"?c=g(r.amount,e.pure.u64):c=e.moveCall({target:"0x2::coin::value",arguments:[g(n,e.object)],typeArguments:[a.suiCoinType]}),r?.accountCap){const[i]=e.moveCall({target:`${t.package}::incentive_v3::repay_with_account_cap`,arguments:[e.object("0x06"),e.object(t.priceOracle),e.object(t.storage),e.object(a.contract.pool),e.pure.u8(a.id),g(n,e.object),e.object(t.incentiveV2),e.object(t.incentiveV3),g(r.accountCap,e.object)],typeArguments:[a.suiCoinType]});return e.moveCall({target:"0x2::coin::from_balance",arguments:[i],typeArguments:[a.suiCoinType]})}else return e.moveCall({target:`${t.package}::incentive_v3::entry_repay`,arguments:[e.object("0x06"),e.object(t.priceOracle),e.object(t.storage),e.object(a.contract.pool),e.pure.u8(a.id),g(n,e.object),c,e.object(t.incentiveV2),e.object(t.incentiveV3)],typeArguments:[a.suiCoinType]}),e}const Ne=A(I(async e=>{const o=await k({...e});if(e?.address&&typeof e?.asset<"u")try{const t=await B(e.asset,e),a=e?.client??P,s=new O.Transaction;s.moveCall({target:`${o.package}::incentive_v3::get_borrow_fee_v2`,arguments:[s.object(o.incentiveV3),s.pure.address(e.address),s.pure.u8(t.id),s.pure.u64(1e4)],typeArguments:[]});const c=await a.devInspectTransactionBlock({transactionBlock:s,sender:e.address}),i=R(c,[C.bcs.u64()]);return(Number(i[0])||0)/100}catch(t){console.error(t)}const r=(await P.getObject({id:o.incentiveV3,options:{showType:!0,showOwner:!0,showContent:!0}})).data.content.fields.borrow_fee_rate;return Number(r)/100})),U="main",$={main:{id:0,key:"main",name:"Main Market"}};class ce{constructor(o,n){this.poolMap={},this.emodeMap={},this.pools=[],this.emodes=[],this.emodePools=[],this.emodeBorrowablePools=[],this.emodeSupplyablePools=[],this._overview={marketTotalSupplyValue:"0",marketTotalBorrowValue:"0"},this.config=T(o),this.addPools(n)}get overview(){return this._overview}addPools(o){const n=W(this.pools),r=Z(this.emodes),t=new Set,a=new Set;let s=p(0),c=p(0);o.forEach(i=>{if(!this.checkMarket(i.market)){console.warn(`Pool is not in market ${this.config.name}`,i);return}n[i.uniqueId]||this.pools.push(i),i?.emodes?.forEach(m=>{r[m.uniqueId]||this.emodes.push(m),m.assets.forEach(y=>{y.isDebt&&t.add(i.uniqueId),y.isCollateral&&a.add(i.uniqueId)})}),c=c.plus(i.poolBorrowValue),s=s.plus(i.poolSupplyValue)}),this.poolMap=W(this.pools,"id"),this.emodeMap=Z(this.emodes,"emodeId"),this.emodes.forEach(i=>{const u=this.getEModePools(i.emodeId);this.emodePools.push(...u)}),this._overview={marketTotalSupplyValue:s.toString(),marketTotalBorrowValue:c.toString()},this.emodeBorrowablePools=this.pools.filter(i=>t.has(i.uniqueId)),this.emodeSupplyablePools=this.pools.filter(i=>a.has(i.uniqueId))}getEMode(o){return this.emodeMap[o]||null}getEModeRelatePools(o,n){const{collateral:r,debt:t,emodeId:a}=n||{},s=[];return o.emodes.forEach(c=>{typeof a=="number"&&a!==c.emodeId||c.assets.forEach(i=>{typeof r=="boolean"&&r&&i.isCollateral&&i.assetId===o.id&&s.push(this.poolMap[i.assetId]),typeof t=="boolean"&&t&&i.isDebt&&i.assetId===o.id&&s.push(this.poolMap[i.assetId])})}),s}getEModePools(o){const n=this.getEMode(o);return n?n.assets.map(t=>t.assetId).map(t=>this.poolMap[t]).filter(t=>!!t).map(t=>{const a=n.assets.find(s=>s.assetId===t.id);return{...t,emode:{...a,emodeId:n.emodeId},isEMode:!0}}):[]}checkMarket(o){let n=!1;return typeof o=="number"&&o===this.config.id&&(n=!0),typeof o=="string"&&o===this.config.key&&(n=!0),typeof o=="object"&&o.id===this.config.id&&(n=!0),n}}const T=e=>{const n=Object.values($).find(r=>typeof e=="number"?r.id===e:typeof e=="string"?r.key===e:r.id===e.id);if(!n)throw new Error("Market not found");return n},se=A(I(async(e,o)=>{const n=await N({cacheTime:6e4,...o,markets:e});return e.map(r=>{const t=T(r),a=n.filter(s=>s.market===t.key);return new ce(r,a)})})),Re=A(I(async(e,o)=>(await se([e],o))[0])),k=A(I(async e=>{const o=T(e?.market||U),n=`https://open-api.naviprotocol.io/api/navi/config?env=${e?.env||"prod"}&sdk=${S.version}&market=${o.key}`;return(await fetch(n,{headers:V}).then(t=>t.json())).data})),v=1e3*60*5;async function ie(e,o){const n=await k({cacheTime:v,...o});return e.moveCall({target:`${n.package}::lending::create_account`,arguments:[]})}async function ue(e,o,n){const r=await k({cacheTime:v,...n});return e.moveCall({target:`${r.package}::account::account_owner`,arguments:[o]})}async function le(e,o,n){const r=await k({...n,cacheTime:v});return n?.accountCap?e.moveCall({target:`${r.package}::lending::enter_emode_with_account_cap`,arguments:[e.object(r.storage),g(o,e.pure.u64),g(n.accountCap,e.object)]}):e.moveCall({target:`${r.package}::lending::enter_emode`,arguments:[e.object(r.storage),g(o,e.pure.u64)]}),e}async function Le(e,o){const n=await k({...o,cacheTime:v});return o?.accountCap?e.moveCall({target:`${n.package}::lending::exit_emode_with_account_cap`,arguments:[e.object(n.storage),g(o.accountCap,e.object)]}):e.moveCall({target:`${n.package}::lending::exit_emode`,arguments:[e.object(n.storage)]}),e}async function qe(e,o,n){const r=await k({cacheTime:v,...n}),t=await ie(e,n);await le(e,o,{...n,accountCap:t});const a=await T(n?.market||U),s=await ue(e,t,n);return e.moveCall({target:`${r.emode.contract.registryPackage}::registry::register_emode_for_account_cap`,arguments:[e.object(r.emode.contract.registryObject),s,g(a.id,e.pure.u64),g(o,e.pure.u64)]}),t}const z=A(I(async(e,o)=>{const n=await k({cacheTime:v,...o}),r=new O.Transaction,t=o?.client??P;r.moveCall({target:`${n.emode.contract.registryPackage}::registry::find_user_emode_account_caps`,arguments:[r.object(n.emode.contract.registryObject),r.pure.address(e)]});const s=(await t.devInspectTransactionBlock({transactionBlock:r,sender:e})).results[0].returnValues,c=C.bcs.vector(C.bcs.u64()).parse(Uint8Array.from(s[0][0])),i=C.bcs.vector(C.bcs.u64()).parse(Uint8Array.from(s[1][0])),u=C.bcs.vector(C.bcs.Address).parse(Uint8Array.from(s[2][0]));return c.map((m,y)=>({marketId:Number(m),emodeId:Number(i[y]),accountCap:u[y].toString()}))}));function He(e){return`${T(e.marketId).key}-${e.emodeId}`}function We(e,o,n){const r=typeof n?.balance=="number",t=r?n.balance:0;let a=0;const s=[];let c="";if(o.sort((i,u)=>Number(u.balance)-Number(i.balance)).forEach(i=>{if(!(r&&a>=t)&&Number(i.balance)!==0){if(c||(c=i.coinType),c!==i.coinType)throw new Error("All coins must be of the same type");a+=Number(i.balance),s.push(i.coinObjectId)}}),s.length===0)throw new Error("No coins to merge");if(r&&a<t)throw new Error(`Balance is less than the specified balance: ${a} < ${t}`);return h(c)===h("0x2::sui::SUI")&&n?.useGasCoin?r?e.splitCoins(e.gas,[e.pure.u64(t)]):e.gas:(s.length===1?e.object(s[0]):e.mergeCoins(s[0],s.slice(1)),r?e.splitCoins(s[0],[e.pure.u64(t)]):s[0])}async function K(e,o,n,r,t,a,s){const c=await k({...s,cacheTime:v}),i=await B(n,s);return e.moveCall({target:`${c.uiGetter}::calculator_unchecked::dynamic_health_factor`,arguments:[e.object("0x06"),e.object(c.storage),e.object(c.oracle.priceOracle),Ee(e,i),g(o,e.pure.address),g(i.id,e.pure.u8),g(r,e.pure.u64),g(t,e.pure.u64),g(a,e.pure.bool)],typeArguments:[i.suiCoinType]})}async function pe(e,o,n){return K(e,o,0,0,0,!1,n)}async function de(e,o,n){const r=new O.Transaction,t=n?.client??P,a=await N({...n,markets:Object.values($)}),s=W(a);for(let m of o){const y=await k({...n,cacheTime:v,market:m.market});r.moveCall({target:`${y.uiGetter}::getter_unchecked::get_user_state`,arguments:[r.object(y.storage),r.pure.address(m.address)]})}const i=((await t.devInspectTransactionBlock({transactionBlock:r,sender:e})).results||[]).map(m=>m.returnValues?.map(y=>C.bcs.vector(te).parse(Uint8Array.from(y[0])))[0]||[]),u=[];return i.forEach((m,y)=>{const w=o[y],b=T(w.market);m.forEach(l=>{if(l.supply_balance==="0"&&l.borrow_balance==="0")return;const f=s[`${b.key}-${l.asset_id}`];if(!f)return;const j=X(l.supply_balance,f.currentSupplyIndex).toString(),_=X(l.borrow_balance,f.currentBorrowIndex).toString();u.push({supplyBalance:j,borrowBalance:_,assetId:l.asset_id,market:b.key,pool:f,emodeId:w.emodeId})})}),u}const Ge=A(async(e,o)=>{const r=(o?.markets||Object.keys($)).map(t=>T(t)).map(t=>({address:e,market:t.key}));return await de(e,r,o)});async function ze(e,o){const n=o?.client??P,r=new O.Transaction;await pe(r,e,o);const t=await n.devInspectTransactionBlock({transactionBlock:r,sender:e}),a=R(t,[C.bcs.u256()]);return ne(Number(a[0])||0)}async function Ke(e,o,n,r){const t=r?.client??P,a=new O.Transaction;let s=0,c=0;const i=await B(o,r);if(n.forEach(w=>{w.type===F.Supply?s+=w.amount:w.type===F.Withdraw?s-=w.amount:w.type===F.Borrow?c+=w.amount:w.type===F.Repay&&(c-=w.amount)}),s*c<0)throw new Error("Invalid operations");const u=s>0||c>0;await K(a,e,i,Math.abs(s),Math.abs(c),u,r);const m=await t.devInspectTransactionBlock({transactionBlock:a,sender:e}),y=R(m,[C.bcs.u256()]);return ne(Number(y[0])||0)}const Ye=I(async(e,o)=>{const n=new URLSearchParams;o?.cursor&&n.set("cursor",o.cursor),n.set("userAddress",e);const r=`https://open-api.naviprotocol.io/api/navi/user/transactions?${n.toString()}&sdk=${S.version}`;return(await fetch(r,{headers:V}).then(a=>a.json())).data});async function Je(e,o){let n=null;const r=[],t=o?.client??P;do{let a;if(o?.coinType?a=await t.getCoins({owner:e,coinType:o?.coinType,cursor:n,limit:100}):a=await t.getAllCoins({owner:e,cursor:n,limit:100}),!a.data||!a.data.length)break;r.push(...a.data),n=a.nextCursor}while(n);return r}const me=A(async(e,o)=>{const n=[],r=(o?.markets||Object.keys($)).map(c=>T(c));let t=[];try{t=await z(e,o)}catch(c){console.error(c)}const a=r.map(c=>({address:e,market:c.key})).concat(t.filter(c=>!!r.find(i=>i.id===c.marketId)).map(c=>({address:c.accountCap,market:T(c.marketId).key,emodeId:c.emodeId})));return(await de(e,a,o)).forEach(c=>{const i=typeof c.emodeId=="number"?t.find(u=>{const m=T(c.market);return u.emodeId===c.emodeId&&u.marketId===m.id}):void 0;if(i){if(p(c.supplyBalance).gt(0)){const u=p(c.supplyBalance).shiftedBy(-9).decimalPlaces(c.pool.token.decimals,p.ROUND_DOWN);n.push({id:`${e}_${c.pool.uniqueId}_${i.emodeId}_navi-lending-emode-supply`,wallet:e,protocol:"navi",market:c.market,type:"navi-lending-emode-supply","navi-lending-emode-supply":{amount:u.toString(),pool:x(c.pool,i),token:c.pool.token,valueUSD:u.multipliedBy(c.pool.oracle.price).toString(),emodeCap:i}})}if(p(c.borrowBalance).gt(0)){const u=p(c.borrowBalance).shiftedBy(-9).decimalPlaces(c.pool.token.decimals,p.ROUND_DOWN);n.push({id:`${c.pool.uniqueId}_${i.emodeId}_navi-lending-emode-borrow`,wallet:e,protocol:"navi",market:c.market,type:"navi-lending-emode-borrow","navi-lending-emode-borrow":{amount:u.toString(),pool:x(c.pool,i),token:c.pool.token,valueUSD:u.multipliedBy(c.pool.oracle.price).toString(),emodeCap:i}})}}else{if(p(c.supplyBalance).gt(0)){const u=p(c.supplyBalance).shiftedBy(-9).decimalPlaces(c.pool.token.decimals,p.ROUND_DOWN);n.push({id:`${e}_${c.pool.uniqueId}_navi-lending-supply`,wallet:e,protocol:"navi",type:"navi-lending-supply",market:c.market,"navi-lending-supply":{amount:u.toString(),pool:c.pool,token:c.pool.token,valueUSD:u.multipliedBy(c.pool.oracle.price).toString()}})}if(p(c.borrowBalance).gt(0)){const u=p(c.borrowBalance).shiftedBy(-9).decimalPlaces(c.pool.token.decimals,p.ROUND_DOWN);n.push({id:`${c.pool.uniqueId}_navi-lending-borrow`,wallet:e,protocol:"navi",market:c.market,type:"navi-lending-borrow","navi-lending-borrow":{amount:u.toString(),pool:c.pool,token:c.pool.token,valueUSD:u.multipliedBy(c.pool.oracle.price).toString()}})}}}),n});class M{constructor(o){this._positions=[],this._overview={hf:1/0,netVaule:"0",netWorthApr:"0",totalSupplyValue:"0",totalBorrowValue:"0",totalsupplyApy:"0",totalBorrowApy:"0",maxLiquidationValue:"0",maxLoanToVaule:"0",supply:{},borrow:{}},this.positions=o}get positions(){return this._positions}get overview(){return this._overview}set positions(o){this._positions=o,this._overview=this.getPositionsOverview(o)}filterPositionsByPool(o){const r=!!o.isEMode?["navi-lending-emode-supply","navi-lending-emode-borrow"]:["navi-lending-supply","navi-lending-borrow"];return new M(this.positions.filter(t=>{const a=t[t.type];return r.includes(t.type)&&a.pool.uniqueId===o.uniqueId}))}deposit(o,n){const r=!!o.isEMode;let t;return r?t={id:E(),wallet:"",protocol:"navi",market:"",type:"navi-lending-emode-supply","navi-lending-emode-supply":{amount:n.toString(),valueUSD:p(n).multipliedBy(o.oracle.price).toString(),token:o.token,pool:o,emodeCap:{}}}:t={id:E(),wallet:"",protocol:"navi",market:"",type:"navi-lending-supply","navi-lending-supply":{amount:n.toString(),valueUSD:p(n).multipliedBy(o.oracle.price).toString(),token:o.token,pool:o}},new M([...this.positions,t])}withdraw(o,n){const r=!!o.isEMode;let t;return r?t={id:E(),wallet:"",protocol:"navi",market:"",type:"navi-lending-emode-supply","navi-lending-emode-supply":{amount:(-n).toString(),valueUSD:p(-n).multipliedBy(o.oracle.price).toString(),token:o.token,pool:o,emodeCap:{}}}:t={id:E(),wallet:"",protocol:"navi",market:"",type:"navi-lending-supply","navi-lending-supply":{amount:(-n).toString(),valueUSD:p(-n).multipliedBy(o.oracle.price).toString(),token:o.token,pool:o}},new M([...this.positions,t])}borrow(o,n){const r=!!o.isEMode;let t;return r?t={id:E(),wallet:"",protocol:"navi",market:"",type:"navi-lending-emode-borrow","navi-lending-emode-borrow":{amount:n.toString(),valueUSD:p(n).multipliedBy(o.oracle.price).toString(),token:o.token,pool:o,emodeCap:{}}}:t={id:E(),wallet:"",protocol:"navi",market:"",type:"navi-lending-borrow","navi-lending-borrow":{amount:n.toString(),valueUSD:p(n).multipliedBy(o.oracle.price).toString(),token:o.token,pool:o}},new M([...this.positions,t])}repay(o,n){const r=!!o.isEMode;let t;return r?t={id:E(),wallet:"",protocol:"navi",market:"",type:"navi-lending-emode-borrow","navi-lending-emode-borrow":{amount:(-n).toString(),valueUSD:p(-n).multipliedBy(o.oracle.price).toString(),token:o.token,pool:o,emodeCap:{}}}:t={id:E(),wallet:"",protocol:"navi",market:"",type:"navi-lending-borrow","navi-lending-borrow":{amount:(-n).toString(),valueUSD:p(-n).multipliedBy(o.oracle.price).toString(),token:o.token,pool:o}},new M([...this.positions,t])}getPositionsOverview(o){const n={},r={};let t=new p(0),a=new p(0),s=new p(0),c=new p(0),i=new p(0),u=new p(0);o.forEach(b=>{if(b.type==="navi-lending-supply"){const l=b["navi-lending-supply"];t=t.plus(l.valueUSD),i=i.plus(new p(l.valueUSD).multipliedBy(l.pool.liquidationFactor.threshold)),u=u.plus(new p(l.valueUSD).multipliedBy(l.pool.ltvValue))}else if(b.type==="navi-lending-borrow")a=a.plus(b["navi-lending-borrow"].valueUSD);else if(b.type==="navi-lending-emode-supply"){const l=b["navi-lending-emode-supply"];t=t.plus(l.valueUSD);const f=l.pool.emode;i=i.plus(new p(l.valueUSD).multipliedBy(f.lt)),u=u.plus(new p(l.valueUSD).multipliedBy(f.ltv))}else b.type==="navi-lending-emode-borrow"&&(a=a.plus(b["navi-lending-emode-borrow"].valueUSD))}),o.forEach(b=>{if(b.type==="navi-lending-supply"){const l=b["navi-lending-supply"],f=l.pool.supplyIncentiveApyInfo.apy;s=s.plus(new p(l.valueUSD).dividedBy(t).multipliedBy(new p(f).dividedBy(100))),n[l.pool.suiCoinType]=p(n[l.pool.suiCoinType]||0).plus(l.amount).toString()}else if(b.type==="navi-lending-borrow"){const l=b["navi-lending-borrow"],f=l.pool.borrowIncentiveApyInfo.apy;a.gt(0)&&(c=c.plus(new p(l.valueUSD).dividedBy(a).multipliedBy(new p(f).dividedBy(100)))),r[l.pool.suiCoinType]=p(r[l.pool.suiCoinType]||0).plus(l.amount).toString()}else if(b.type==="navi-lending-emode-supply"){const l=b["navi-lending-emode-supply"],f=l.pool.supplyIncentiveApyInfo.apy;t.gt(0)&&(s=s.plus(new p(l.valueUSD).dividedBy(t).multipliedBy(new p(f).dividedBy(100)))),n[l.pool.suiCoinType]=p(n[l.pool.suiCoinType]||0).plus(l.amount).toString()}else if(b.type==="navi-lending-emode-borrow"){const l=b["navi-lending-emode-borrow"],f=l.pool.borrowIncentiveApyInfo.apy;a.gt(0)&&(c=c.plus(new p(l.valueUSD).dividedBy(a).multipliedBy(new p(f).dividedBy(100)))),r[l.pool.suiCoinType]=p(r[l.pool.suiCoinType]||0).plus(l.amount).toString()}});const m=t.minus(a),y=t.minus(a).eq(0)?new p(0):t.multipliedBy(s).minus(a.multipliedBy(c)).div(t.minus(a));return{hf:a.toNumber()!==0?i.dividedBy(a).toNumber():1/0,netVaule:m.toString(),netWorthApr:y.toString(),totalSupplyValue:t.toString(),totalBorrowValue:a.toString(),totalsupplyApy:s.toString(),totalBorrowApy:c.toString(),maxLiquidationValue:i.toString(),maxLoanToVaule:u.toString(),supply:n,borrow:r}}}const ge=new G.SuiPriceServiceConnection("https://hermes.pyth.network",{timeout:1e4});async function ye(e){try{const o=[],n=await ge.getLatestPriceFeeds(e);if(!n)return o;const r=Math.floor(new Date().valueOf()/1e3);for(const t of n){const a=t.getPriceUnchecked();if(a.publishTime>r){console.warn(`pyth price feed is invalid, id: ${t.id}, publish time: ${a.publishTime}, current timestamp: ${r}`);continue}r-t.getPriceUnchecked().publishTime>30&&(console.info(`stale price feed, id: ${t.id}, publish time: ${a.publishTime}, current timestamp: ${r}`),o.push(t.id))}return o}catch(o){throw new Error(`failed to get pyth stale price feed id, msg: ${o.message}`)}}async function fe(e,o,n){const r=n?.client??P,t=await k({...n,cacheTime:v});try{const a=await ge.getPriceFeedsUpdateData(o);return await new G.SuiPythClient(r,t.oracle.pythStateId,t.oracle.wormholeStateId).updatePriceFeeds(e,a,o)}catch(a){throw new Error(`failed to update pyth price feeds, msg: ${a.message}`)}}async function be(e,o,n){const r=await k({...n,cacheTime:v});if(n?.updatePythPriceFeeds){const t=o.filter(a=>!!a.pythPriceFeedId).map(a=>a.pythPriceFeedId);try{const a=await ye(t);a.length>0&&await fe(e,a,n)}catch{}}for(const t of o)n?.env==="dev"?e.moveCall({target:`${r.oracle.packageId}::oracle_pro::update_single_price`,arguments:[e.object("0x6"),e.object(r.oracle.oracleConfig),e.object(r.oracle.priceOracle),e.object(r.oracle.supraOracleHolder),e.object(t.pythPriceInfoObject),e.pure.address(t.feedId)]}):e.moveCall({target:`${r.oracle.packageId}::oracle_pro::update_single_price_v2`,arguments:[e.object("0x6"),e.object(r.oracle.oracleConfig),e.object(r.oracle.priceOracle),e.object(r.oracle.supraOracleHolder),e.object(t.pythPriceInfoObject),e.object(r.oracle.switchboardAggregator),e.pure.address(t.feedId)]});return e}async function Y(e){return(await k({...e,cacheTime:v})).oracle.feeds}function we(e,o){return e.filter(n=>!!(o?.lendingState&&o.lendingState.find(t=>t.assetId===n.assetId)||o?.lendingPositions&&o.lendingPositions.find(t=>["navi-lending-supply","navi-lending-borrow","navi-lending-emode-supply","navi-lending-emode-borrow"].includes(t.type)?t[t.type]?.pool?.id===n.assetId:!1)||o?.pools&&o.pools.find(t=>t.id===n.assetId)))}async function Qe(e,o,n,r){try{const t=await Y({...r}),a=[];n.forEach(u=>{a.includes(u.market)||a.push(u.market)});const s=await me(o,{...r,markets:a}),c=we(t,{lendingPositions:s,pools:n});return await be(e,c,{updatePythPriceFeeds:!0,...r})}catch(t){if(r?.throws)throw t;return console.error(t),e}}const L=A(I(async e=>{const o=`https://open-api.naviprotocol.io/api/navi/flashloan?env=${e?.env||"prod"}&sdk=${S.version}&market=${e?.market||U}`,n=await fetch(o,{headers:V}).then(r=>r.json());return Object.keys(n.data).map(r=>({...n.data[r],coinType:r}))}));async function Xe(e,o){return(await L(o)).find(r=>typeof e=="string"?h(r.coinType)===h(e):typeof e=="number"?r.assetId===e:r.assetId===e.id)||null}async function Ze(e,o,n,r){const t=await k({...r,cacheTime:v}),a=await B(o,r);if(!(await L({...r,cacheTime:v})).some(i=>h(i.coinType)===h(a.suiCoinType)))throw new Error("Pool does not support flashloan");if(t.version===1){const[i,u]=e.moveCall({target:`${t.package}::lending::flash_loan_with_ctx`,arguments:[e.object(t.flashloanConfig),e.object(a.contract.pool),g(n,e.pure.u64)],typeArguments:[a.suiCoinType]});return[i,u]}else{const[i,u]=e.moveCall({target:`${t.package}::lending::flash_loan_with_ctx_v2`,arguments:[e.object(t.flashloanConfig),e.object(a.contract.pool),g(n,e.pure.u64),e.object("0x05")],typeArguments:[a.suiCoinType]});return[i,u]}}async function xe(e,o,n,r,t){const a=await k({...t,cacheTime:v}),s=await B(o,t);if(!(await L({...t,cacheTime:v})).some(m=>h(m.coinType)===h(s.suiCoinType)))throw new Error("Pool does not support flashloan");const[u]=e.moveCall({target:`${a.package}::lending::flash_repay_with_ctx`,arguments:[e.object("0x06"),e.object(a.storage),e.object(s.contract.pool),g(n,e.object),g(r,e.object)],typeArguments:[s.suiCoinType]});return[u]}async function et(e,o,n,r,t,a){const s={...a,cacheTime:v},c=await k(s),i=await B(o,s),u=await B(r,s);if(c.version===1){const[m,y]=e.moveCall({target:`${c.package}::incentive_v3::liquidation`,arguments:[e.object("0x06"),e.object(c.priceOracle),e.object(c.storage),e.pure.u8(i.id),e.object(i.contract.pool),g(n,e.object),e.pure.u8(u.id),e.object(u.contract.pool),g(t,e.pure.address),e.object(c.incentiveV2),e.object(c.incentiveV3)],typeArguments:[i.suiCoinType,u.suiCoinType]});return[m,y]}else{const[m,y]=e.moveCall({target:`${c.package}::incentive_v3::liquidation_v2`,arguments:[e.object("0x06"),e.object(c.priceOracle),e.object(c.storage),e.pure.u8(i.id),e.object(i.contract.pool),g(n,e.object),e.pure.u8(u.id),e.object(u.contract.pool),g(t,e.pure.address),e.object(c.incentiveV2),e.object(c.incentiveV3),e.object("0x05")],typeArguments:[i.suiCoinType,u.suiCoinType]});return[m,y]}}async function tt(e,o,n){const r=n?.client??P,t=new O.Transaction,a=await N({...n,markets:Object.values($),cacheTime:v}),s=await Y(n);for(let m of o){const y=await k({...n,cacheTime:v,market:m.market});t.moveCall({target:`${y.uiGetter}::incentive_v3_getter::get_user_atomic_claimable_rewards`,arguments:[t.object("0x06"),t.object(y.storage),t.object(y.incentiveV3),t.pure.address(m.address)]})}const c=await r.devInspectTransactionBlock({transactionBlock:t,sender:e}),i=[];c?.results?.forEach(m=>{i.push(R({results:[m]},[C.bcs.vector(C.bcs.string()),C.bcs.vector(C.bcs.string()),C.bcs.vector(C.bcs.u8()),C.bcs.vector(C.bcs.Address),C.bcs.vector(C.bcs.u256())]))});const u=[];return i.forEach((m,y)=>{const w=o[y];if(m.length===5&&Array.isArray(m[0])){const b=m[0].length;for(let l=0;l<b;l++){const f=s.find(_=>h(_.coinType)===h(m[1][l])),j=a.find(_=>h(_.coinType)===h(m[0][l]));!f||!j||u.push({assetId:j.id,assetCoinType:h(m[0][l]),rewardCoinType:h(m[1][l]),option:Number(m[2][l]),userClaimableReward:Number(m[4][l])/Math.pow(10,f.priceDecimal),ruleIds:Array.isArray(m[3][l])?m[3][l]:[m[3][l]],market:w.market,owner:w.address,emodeId:w.emodeId})}}}),u}async function ot(e,o){const n=(o?.markets||[$.main]).map(a=>T(a)),r=await z(e,o),t=n.map(a=>({address:e,market:a.key})).concat(r.filter(a=>!!n.find(s=>s.id===a.marketId)).map(a=>{const s=T(a.marketId);return{address:e,market:s.key,emodeId:a.emodeId}}));return await tt(e,t,o)}function nt(e){const o=new Map;e.forEach(r=>{const t=r.assetId,a=r.option,s=`${t}-${a}-${r.rewardCoinType}-${r.market}`;o.has(s)?o.get(s).total+=r.userClaimableReward:o.set(s,{assetId:t,rewardType:a,coinType:r.rewardCoinType,total:Number(r.userClaimableReward),market:r.market})});const n=new Map;for(const{assetId:r,rewardType:t,coinType:a,total:s,market:c}of o.values()){const i=`${r}-${t}-${c}`;n.has(i)||n.set(i,{assetId:r,rewardType:t,market:c,rewards:new Map});const u=n.get(i);u.rewards.set(a,(u.rewards.get(a)||0)+s)}return Array.from(n.values()).map(r=>({assetId:r.assetId,rewardType:r.rewardType,market:r.market,rewards:Array.from(r.rewards.entries()).map(([t,a])=>({coinType:t,available:a.toFixed(6)}))}))}const rt=I(async(e,o)=>{const n=`https://open-api.naviprotocol.io/api/navi/user/total_claimed_reward?userAddress=${e}&sdk=${S.version}&market=${o?.market||U}`;return(await fetch(n,{headers:V}).then(t=>t.json())).data}),at=I(async(e,o)=>{const n=`https://open-api.naviprotocol.io/api/navi/user/rewards?userAddress=${e}&page=${o?.page||1}&pageSize=${o?.size||400}&sdk=${S.version}&market=${o?.market||U}`,r=await fetch(n,{headers:V}).then(t=>t.json());return H({data:r.data.rewards})});async function ct(e,o,n){const r=await k({...n,cacheTime:v}),t=await N({...n,markets:Object.values($),cacheTime:v}),a=new Map;for(const c of o){const{rewardCoinType:i,ruleIds:u,market:m,owner:y,emodeId:w}=c,b=`${i}___${y}`;for(const l of u){a.has(b)||a.set(b,{assetIds:[],ruleIds:[],amount:0,market:m,owner:y,isEMode:typeof w<"u"});const f=a.get(b);f.assetIds.push(c.assetCoinType.replace("0x","")),f.ruleIds.push(l),f.amount+=c.userClaimableReward}}const s=[];for(const[c,{assetIds:i,ruleIds:u,amount:m,market:y,owner:w,isEMode:b}]of a){const l=c.split("___")[0],f=t.find(_=>h(_.suiCoinType)===h(l)&&_.market===y);if(!f||!f.contract.rewardFundId)throw new Error(`No matching rewardFund found for reward coin: ${l} ${y}`);const j=f.contract.rewardFundId;if(n?.accountCap&&!n.customCoinReceive)throw new Error("customCoinReceive is required when accountCap is provided");if(n?.customCoinReceive){let _;n.accountCap?_=e.moveCall({target:`${r.package}::incentive_v3::claim_reward_with_account_cap`,arguments:[e.object("0x06"),e.object(r.incentiveV3),e.object(r.storage),e.object(j),e.pure.vector("string",i),e.pure.vector("address",u),g(n.accountCap,e.object)],typeArguments:[l]}):b?_=e.moveCall({target:`${r.package}::incentive_v3::claim_reward_with_account_cap`,arguments:[e.object("0x06"),e.object(r.incentiveV3),e.object(r.storage),e.object(j),e.pure.vector("string",i),e.pure.vector("address",u),g(w,e.object)],typeArguments:[l]}):_=e.moveCall({target:`${r.package}::incentive_v3::claim_reward`,arguments:[e.object("0x06"),e.object(r.incentiveV3),e.object(r.storage),e.object(j),e.pure.vector("string",i),e.pure.vector("address",u)],typeArguments:[l]});const[D]=e.moveCall({target:"0x2::coin::from_balance",arguments:[_],typeArguments:[l]});if(n?.customCoinReceive.type==="transfer"){if(!n.customCoinReceive.transfer)throw new Error("customCoinReceive.transfer is required");e.transferObjects([D],g(n.customCoinReceive.transfer,e.pure.address))}if(n?.customCoinReceive.type==="depositNAVI"){const ve=p(f.totalSupplyAmount).shiftedBy(-9),he=p(f.supplyCapCeiling).shiftedBy(-27);ve.plus(m).isGreaterThan(he)&&n?.customCoinReceive.depositNAVI?.fallbackReceiveAddress?e.transferObjects([D],e.pure.address(n.customCoinReceive.depositNAVI.fallbackReceiveAddress)):await ae(e,f,D,n)}else s.push({coin:D,identifier:f,owner:w,isEMode:b})}else if(n?.accountCap||b){const _=e.moveCall({target:`${r.package}::incentive_v3::claim_reward_with_account_cap`,arguments:[e.object("0x06"),e.object(r.incentiveV3),e.object(r.storage),e.object(j),e.pure.vector("string",i),e.pure.vector("address",u),g(n?.accountCap||w,e.object)],typeArguments:[l]}),[D]=e.moveCall({target:"0x2::coin::from_balance",arguments:[_],typeArguments:[l]});e.transferObjects([D],g(n?.accountCap||w,e.pure.address))}else e.moveCall({target:`${r.package}::incentive_v3::claim_reward_entry`,arguments:[e.object("0x06"),e.object(r.incentiveV3),e.object(r.storage),e.object(j),e.pure.vector("string",i),e.pure.vector("address",u)],typeArguments:[l]})}return s}exports.Address=q;exports.DEFAULT_CACHE_TIME=v;exports.DEFAULT_MARKET_IDENTITY=U;exports.FlashLoanAssetConfig=Ie;exports.IncentiveAPYInfo=_e;exports.IncentivePoolInfo=ee;exports.IncentivePoolInfoByPhase=Te;exports.MARKETS=$;exports.Market=ce;exports.OracleInfo=je;exports.PoolOperator=F;exports.ReserveDataInfo=Be;exports.UserPositions=M;exports.UserStateInfo=te;exports.borrowCoinPTB=Fe;exports.claimLendingRewardsPTB=ct;exports.createAccountCapPTB=ie;exports.createEModeCapPTB=qe;exports.depositCoinPTB=ae;exports.emodeIdentityId=He;exports.enterEModePTB=le;exports.exitEModePTB=Le;exports.filterPriceFeeds=we;exports.flashloanPTB=Ze;exports.getAccountCapOwnerPTB=ue;exports.getAllFlashLoanAssets=L;exports.getBorrowFee=Ne;exports.getCoins=Je;exports.getConfig=k;exports.getFees=Ue;exports.getFlashLoanAsset=Xe;exports.getHealthFactor=ze;exports.getHealthFactorPTB=pe;exports.getLendingPositions=me;exports.getLendingState=Ge;exports.getMarket=Re;exports.getMarketConfig=T;exports.getMarkets=se;exports.getPool=B;exports.getPools=N;exports.getPriceFeeds=Y;exports.getPythStalePriceFeedId=ye;exports.getSimulatedHealthFactor=Ke;exports.getSimulatedHealthFactorPTB=K;exports.getStats=Me;exports.getTransactions=Ye;exports.getUserAvailableLendingRewards=ot;exports.getUserClaimedRewardHistory=at;exports.getUserEModeCaps=z;exports.getUserTotalClaimedReward=rt;exports.liquidatePTB=et;exports.mergeCoinsPTB=We;exports.normalizeCoinType=h;exports.parsePoolUID=re;exports.parseTxValue=g;exports.repayCoinPTB=Oe;exports.repayFlashLoanPTB=xe;exports.summaryLendingRewards=nt;exports.updateOraclePriceBeforeUserOperationPTB=Qe;exports.updateOraclePricesPTB=be;exports.updatePythPriceFeeds=fe;exports.withCache=A;exports.withSingleton=I;exports.withdrawCoinPTB=De;
2
2
  //# sourceMappingURL=index.cjs.js.map