@naviprotocol/lending 1.4.0-emode.13 → 1.4.0-emode.14
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 +1 -1
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.esm.js +3 -3
- package/dist/index.esm.js.map +1 -1
- package/dist/utils.d.ts +2 -2
- package/dist/utils.d.ts.map +1 -1
- package/package.json +1 -1
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"),l=require("@mysten/bcs"),Y=require("@mysten/sui/client"),he=require("lodash.camelcase"),ke=require("@mysten/sui/utils"),W=require("@pythnetwork/pyth-sui-js"),p=require("bignumber.js"),C=require("@mysten/sui/bcs"),L=l.bcs.bytes(32).transform({input:e=>l.fromHex(e),output:e=>l.toHex(e)}),Ce=l.bcs.struct("IncentiveAPYInfo",{asset_id:l.bcs.u8(),apy:l.bcs.u256(),coin_types:l.bcs.vector(l.bcs.string())}),x=l.bcs.struct("IncentivePoolInfo",{pool_id:L,funds:L,phase:l.bcs.u64(),start_at:l.bcs.u64(),end_at:l.bcs.u64(),closed_at:l.bcs.u64(),total_supply:l.bcs.u64(),asset_id:l.bcs.u8(),option:l.bcs.u8(),factor:l.bcs.u256(),distributed:l.bcs.u64(),available:l.bcs.u256(),total:l.bcs.u256()}),_e=l.bcs.struct("IncentivePoolInfoByPhase",{phase:l.bcs.u64(),pools:l.bcs.vector(x)}),Te=l.bcs.struct("OracleInfo",{oracle_id:l.bcs.u8(),price:l.bcs.u256(),decimals:l.bcs.u8(),valid:l.bcs.bool()}),je=l.bcs.struct("FlashLoanAssetConfig",{id:l.bcs.string(),asset_id:l.bcs.u8(),coin_type:l.bcs.string(),pool_id:l.bcs.string(),rate_to_supplier:l.bcs.u64(),rate_to_treasury:l.bcs.u64(),max:l.bcs.u64(),min:l.bcs.u64()}),Ie=l.bcs.struct("ReserveDataInfo",{id:l.bcs.u8(),oracle_id:l.bcs.u8(),coin_type:l.bcs.string(),supply_cap:l.bcs.u256(),borrow_cap:l.bcs.u256(),supply_rate:l.bcs.u256(),borrow_rate:l.bcs.u256(),supply_index:l.bcs.u256(),borrow_index:l.bcs.u256(),total_supply:l.bcs.u256(),total_borrow:l.bcs.u256(),last_update_at:l.bcs.u64(),ltv:l.bcs.u256(),treasury_factor:l.bcs.u256(),treasury_balance:l.bcs.u256(),base_rate:l.bcs.u256(),multiplier:l.bcs.u256(),jump_rate_multiplier:l.bcs.u256(),reserve_factor:l.bcs.u256(),optimal_utilization:l.bcs.u256(),liquidation_ratio:l.bcs.u256(),liquidation_bonus:l.bcs.u256(),liquidation_threshold:l.bcs.u256()}),ee=l.bcs.struct("UserStateInfo",{asset_id:l.bcs.u8(),borrow_balance:l.bcs.u256(),supply_balance:l.bcs.u256()}),Be="1.4.0-emode.13",S={version:Be},Ae=S.version,Pe=()=>{if(typeof process<"u"&&process.versions&&process.versions.node)try{const e=require("os"),n=process.version,o=e.type(),r=e.arch();return`Node.js ${n.startsWith("v")?n.substring(1):n}; ${o}/${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 n=[];return e.forEach((o,r)=>{const t=r===e.length-1;if(typeof o=="object"&&o!==null&&t){const{client:a,disableCache:s,cacheTime:c,...i}=o;n.push(i)}else n.push(o)}),JSON.stringify(n)}function j(e){const n={};return(...o)=>{const r=te(o);return n[r]||(n[r]=e(...o).finally(()=>{delete n[r]})),n[r]}}function A(e){let n={};return(...o)=>{const r=o[o.length-1],t=te(o),a=n[t];return!r?.disableCache&&typeof a?.data<"u"&&(typeof r?.cacheTime>"u"||r.cacheTime>Date.now()-a.cacheAt)?a.data:e(...o).then(s=>(n[t]={data:s,cacheAt:Date.now()},s))}}function q(e){return Array.isArray(e)?e.map(n=>q(n)):e!=null&&typeof e=="object"?Object.keys(e).reduce((n,o)=>({...n,[he(o)]:q(e[o])}),{}):e}function y(e,n){return typeof e=="object"?e:n(e)}function $e(e,n){return typeof n=="string"?e.object(n):typeof n=="object"&&n.$kind?n:e.object(n.contract.pool)}function R(e,n,o){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)=>(n[t]||n[0]).parse(Uint8Array.from(r[0])))}else if(e.error)return console.log(`Get an error, msg: ${e.error}`),[];return[]}function v(e){return ke.normalizeStructTag(e)}function oe(e){const n=(e||0)/Math.pow(10,27);return n>Math.pow(10,5)?1/0:n}new W.SuiPriceServiceConnection("https://hermes.pyth.network",{timeout:2e4});const Ee=27,Q=(e,n)=>{if(!Number(e)||!Number(n))return new p(0);const o=new p(1).shiftedBy(1*Ee),r=o.multipliedBy(new p(.5));return new p(e).multipliedBy(new p(n)).plus(r).dividedBy(o).integerValue(p.ROUND_DOWN)},V=J?{"User-Agent":J}:{};function H(e,n="uniqueId"){return e.reduce((o,r)=>(o[n]=r,o),{})}function X(e,n="uniqueId"){return e.reduce((o,r)=>(o[n]=r,o),{})}function Z(e,n){const o=e.emodes.find(t=>t.emodeId===n.emodeId);if(!o)throw new Error("EMode not found in pool");const r=o.assets.find(t=>t.assetId===e.id);return{...e,emode:{...r,emodeId:o.emodeId},isEMode:!0}}function ne(e){const[n,o]=e.split("-");return!n||!o?null:{marketKey:n,poolId:parseInt(o)}}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 N=A(j(async e=>{const n=(e?.markets||[$.main]).map(t=>T(t)),o=`https://open-api.naviprotocol.io/api/navi/pools?env=${e?.env||"prod"}&sdk=${S.version}&market=${n.map(t=>t.key)}`,r=await fetch(o,{headers:V}).then(t=>t.json());return r.data.forEach(t=>{const s=r.meta.emodes.filter(h=>{const _=T(h.marketId);return t.market===_.key&&h.isActive}).filter(h=>!!h.assets.find(_=>_.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(),d=p(t.supplyCapCeiling).shiftedBy(-27).decimalPlaces(t.token.decimals,p.ROUND_DOWN).toString(),g=p.max(p(t.borrowedAmount),p(t.validBorrowAmount)).shiftedBy(-9).decimalPlaces(t.token.decimals,p.ROUND_DOWN).toString(),w=p(d).multipliedBy(t.oracle.price).toString(),f=p(g).multipliedBy(t.oracle.price).toString();t.poolSupplyAmount=c,t.poolBorrowAmount=i,t.poolSupplyValue=u,t.poolBorrowValue=m,t.poolSupplyCapAmount=d,t.poolBorrowCapAmount=g,t.poolSupplyCapValue=w,t.poolBorrowCapValue=f}),r.data}));async function B(e,n){let o=n?.market;if(typeof e=="string"){const a=ne(e);a&&(o=a.marketKey,e=a.poolId)}const r=await N({...n,markets:[o||U],cacheTime:b});if(typeof e=="object")return e;const t=r.find(a=>typeof e=="string"?v(a.suiCoinType)===v(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 n=`https://open-api.naviprotocol.io/api/navi/stats?sdk=${S.version}`;return(await fetch(n,{headers:V}).then(r=>r.json())).data})),Me=A(j(async e=>{const n=`https://open-api.naviprotocol.io/api/navi/fee?sdk=${S.version}`;return await fetch(n,{headers:V}).then(r=>r.json())}));async function re(e,n,o,r){const t=await k({...r,cacheTime:b}),a=await B(n,r);if(a?.deprecatedAt&&Date.now()>a.deprecatedAt)throw new Error(`The lending pool for coinType ${a.suiCoinType} has been deprecated.`);const s=typeof o=="object"&&o.$kind==="GasCoin";if(v(a.suiCoinType)===v("0x2::sui::SUI")&&s){if(!r?.amount)throw new Error("Amount is required for sui coin");o=e.splitCoins(o,[r.amount])}let c;return typeof r?.amount<"u"?c=y(r.amount,e.pure.u64):c=e.moveCall({target:"0x2::coin::value",arguments:[y(o,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),y(o,e.object),e.object(t.incentiveV2),e.object(t.incentiveV3),y(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),y(o,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,n,o,r){const t=await k({...r,cacheTime:b}),a=await B(n,r),s=y(o,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),y(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),y(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,n,o,r){const t=await k({...r,cacheTime:b}),a=await B(n,r);if(a?.deprecatedAt&&Date.now()>a.deprecatedAt)throw new Error(`The lending pool for coinType ${a.suiCoinType} has been deprecated.`);const s=y(o,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),y(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),y(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,n,o,r){const t=await k({...r,cacheTime:b}),a=await B(n,r),s=typeof o=="object"&&o.$kind==="GasCoin";if(v(a.suiCoinType)===v("0x2::sui::SUI")&&s){if(!r?.amount)throw new Error("Amount is required for sui coin");o=e.splitCoins(o,[r.amount])}let c;if(typeof r?.amount<"u"?c=y(r.amount,e.pure.u64):c=e.moveCall({target:"0x2::coin::value",arguments:[y(o,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),y(o,e.object),e.object(t.incentiveV2),e.object(t.incentiveV3),y(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),y(o,e.object),c,e.object(t.incentiveV2),e.object(t.incentiveV3)],typeArguments:[a.suiCoinType]}),e}const Ne=A(j(async e=>{const n=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:`${n.package}::incentive_v3::get_borrow_fee_v2`,arguments:[s.object(n.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:n.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(n,o){this.poolMap={},this.emodeMap={},this.pools=[],this.emodes=[],this.emodePools=[],this.emodeBorrowablePools=[],this.emodeSupplyablePools=[],this._overview={marketTotalSupplyValue:"0",marketTotalBorrowValue:"0"},this.config=T(n),this.addPools(o)}get overview(){return this._overview}addPools(n){const o=H(this.pools),r=X(this.emodes),t=new Set,a=new Set;let s=p(0),c=p(0);n.forEach(i=>{if(!this.checkMarket(i.market)){console.warn(`Pool is not in market ${this.config.name}`,i);return}o[i.uniqueId]||this.pools.push(i),i.emodes.forEach(m=>{r[m.uniqueId]||this.emodes.push(m),m.assets.forEach(d=>{d.isDebt&&t.add(i.uniqueId),d.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(n){return this.emodeMap[n]||null}getEModeRelatePools(n,o){const{collateral:r,debt:t,emodeId:a}=o||{},s=[];return n.emodes.forEach(c=>{typeof a=="number"&&a!==c.emodeId||c.assets.forEach(i=>{typeof r=="boolean"&&r&&i.isCollateral&&i.assetId===n.id&&s.push(this.poolMap[i.assetId]),typeof t=="boolean"&&t&&i.isDebt&&i.assetId===n.id&&s.push(this.poolMap[i.assetId])})}),s}getEModePools(n){const o=this.getEMode(n);return o?o.assets.map(t=>t.assetId).map(t=>this.poolMap[t]).filter(t=>!!t).map(t=>{const a=o.assets.find(s=>s.assetId===t.id);return{...t,emode:{...a,emodeId:o.emodeId},isEMode:!0}}):[]}checkMarket(n){let o=!1;return typeof n=="number"&&n===this.config.id&&(o=!0),typeof n=="string"&&n===this.config.key&&(o=!0),typeof n=="object"&&n.id===this.config.id&&(o=!0),o}}const T=e=>{const o=Object.values($).find(r=>typeof e=="number"?r.id===e:typeof e=="string"?r.key===e:r.id===e.id);if(!o)throw new Error("Market not found");return o},ce=A(j(async(e,n)=>{const o=await N({cacheTime:6e4,...n,markets:e});return e.map(r=>{const t=T(r),a=o.filter(s=>s.market===t.key);return new ae(r,a)})})),Re=A(j(async(e,n)=>(await ce([e],n))[0])),k=A(j(async e=>{const n=T(e?.market||U),o=`https://open-api.naviprotocol.io/api/navi/config?env=${e?.env||"prod"}&sdk=${S.version}&market=${n.key}`;return(await fetch(o,{headers:V}).then(t=>t.json())).data})),b=1e3*60*5;async function se(e,n){const o=await k({cacheTime:b,...n});return e.moveCall({target:`${o.package}::lending::create_account`,arguments:[]})}async function ie(e,n,o){const r=await k({cacheTime:b,...o});return e.moveCall({target:`${r.package}::lending_core::account_owner`,arguments:[n]})}async function ue(e,n,o){const r=await k({...o,cacheTime:b});return o?.accountCap?e.moveCall({target:`${r.package}::lending::enter_emode_with_account_cap`,arguments:[e.object(r.storage),y(n,e.pure.u64),y(o.accountCap,e.object)]}):e.moveCall({target:`${r.package}::lending::enter_emode`,arguments:[e.object(r.storage),y(n,e.pure.u64)]}),e}async function Oe(e,n){const o=await k({...n,cacheTime:b});return n?.accountCap?e.moveCall({target:`${o.package}::lending::exit_emode_with_account_cap`,arguments:[e.object(o.storage),y(n.accountCap,e.object)]}):e.moveCall({target:`${o.package}::lending::exit_emode`,arguments:[e.object(o.storage)]}),e}async function Le(e,n,o){const r=await k({cacheTime:b,...o}),t=await se(e,o);await ue(e,n,{...o,accountCap:t});const a=await T(o?.market||U),s=await ie(e,t,o);return e.moveCall({target:`${r.emode.contract.registryPackage}::registry::register_emode_for_account_cap`,arguments:[e.object(r.emode.contract.registryObject),s,y(a.id,e.pure.u64),y(n,e.pure.u64)]}),t}const G=A(j(async(e,n)=>{const o=await k({cacheTime:b,...n}),r=new F.Transaction,t=n?.client??P;r.moveCall({target:`${o.emode.contract.registryPackage}::registry::find_user_emode_account_caps`,arguments:[r.object(o.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,d)=>({marketId:Number(m),emodeId:Number(i[d]),accountCap:u[d].toString()}))}));function qe(e){return`${T(e.marketId).key}-${e.emodeId}`}function He(e,n,o){const r=typeof o?.balance=="number",t=r?o.balance:0;let a=0;const s=[];let c="";if(n.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 v(c)===v("0x2::sui::SUI")&&o?.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,n,o,r,t,a,s){const c=await k({...s,cacheTime:b}),i=await B(o,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),y(n,e.pure.address),y(i.id,e.pure.u8),y(r,e.pure.u64),y(t,e.pure.u64),y(a,e.pure.bool)],typeArguments:[i.suiCoinType]})}async function le(e,n,o){return z(e,n,0,0,0,!1,o)}async function pe(e,n,o){const r=new F.Transaction,t=o?.client??P,a=await N({...o,markets:Object.values($)}),s=H(a);for(let m of n){const d=await k({...o,cacheTime:b,market:m.market});r.moveCall({target:`${d.uiGetter}::getter_unchecked::get_user_state`,arguments:[r.object(d.storage),r.pure.address(m.address)]})}const i=((await t.devInspectTransactionBlock({transactionBlock:r,sender:e})).results||[]).map(m=>m.returnValues?.map(d=>C.bcs.vector(ee).parse(Uint8Array.from(d[0])))[0]||[]),u=[];return i.forEach((m,d)=>{const g=n[d],w=T(g.market);m.forEach(f=>{if(f.supply_balance==="0"&&f.borrow_balance==="0")return;const h=s[`${w.key}-${f.asset_id}`];if(!h)return;const _=Q(f.supply_balance,h.currentSupplyIndex).toString(),I=Q(f.borrow_balance,h.currentBorrowIndex).toString();u.push({supplyBalance:_,borrowBalance:I,assetId:f.asset_id,market:w.key,pool:h,emodeId:g.emodeId})})}),u}const We=A(async(e,n)=>{const r=(n?.markets||Object.keys($)).map(t=>T(t)).map(t=>({address:e,market:t.key}));return await pe(e,r,n)});async function Ge(e,n){const o=n?.client??P,r=new F.Transaction;await le(r,e,n);const t=await o.devInspectTransactionBlock({transactionBlock:r,sender:e}),a=R(t,[C.bcs.u256()]);return oe(Number(a[0])||0)}async function ze(e,n,o,r){const t=r?.client??P,a=new F.Transaction;let s=0,c=0;const i=await B(n,r);if(o.forEach(g=>{g.type===D.Supply?s+=g.amount:g.type===D.Withdraw?s-=g.amount:g.type===D.Borrow?c+=g.amount:g.type===D.Repay&&(c-=g.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}),d=R(m,[C.bcs.u256()]);return oe(Number(d[0])||0)}const Ke=j(async(e,n)=>{const o=new URLSearchParams;n?.cursor&&o.set("cursor",n.cursor),o.set("userAddress",e);const r=`https://open-api.naviprotocol.io/api/navi/user/transactions?${o.toString()}&sdk=${S.version}`;return(await fetch(r,{headers:V}).then(a=>a.json())).data});async function Ye(e,n){let o=null;const r=[],t=n?.client??P;do{let a;if(n?.coinType?a=await t.getCoins({owner:e,coinType:n?.coinType,cursor:o,limit:100}):a=await t.getAllCoins({owner:e,cursor:o,limit:100}),!a.data||!a.data.length)break;r.push(...a.data),o=a.nextCursor}while(o);return r}const de=A(async(e,n)=>{const o=[],r=(n?.markets||Object.keys($)).map(c=>T(c)),t=await G(e,n),a=r.map(c=>({address:e,market:c.key})).concat(t.filter(c=>!!r.find(i=>i.id===c.marketId)).map(c=>({address:e,market:T(c.marketId).key,emodeId:c.emodeId})));return(await pe(e,a,n)).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(p(c.supplyBalance).gt(0)){const u=p(c.supplyBalance).shiftedBy(-9).decimalPlaces(c.pool.token.decimals,p.ROUND_DOWN);o.push({id:`${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(p(c.borrowBalance).gt(0)){const u=p(c.borrowBalance).shiftedBy(-9).decimalPlaces(c.pool.token.decimals,p.ROUND_DOWN);o.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(p(c.supplyBalance).gt(0)){const u=p(c.supplyBalance).shiftedBy(-9).decimalPlaces(c.pool.token.decimals,p.ROUND_DOWN);o.push({id:`${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);o.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()}})}}}),o});class M{constructor(n){this._positions=[],this._overview={hf:1/0,netVaule:"0",netWorthApr:"0",totalSupplyValue:"0",totalBorrowValue:"0",totalsupplyApy:"0",totalBorrowApy:"0",maxLiquidationValue:"0",maxLoanToVaule:"0"},this.positions=n}get positions(){return this._positions}get overview(){return this._overview}set positions(n){this._positions=n,this._overview=this.getPositionsOverview(n)}filterPositionsByPool(n){const r=!!n.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===n.uniqueId}))}deposit(n,o){const r=!!n.isEMode;let t;return r?t={id:E(),wallet:"",protocol:"navi",market:"",type:"navi-lending-emode-supply","navi-lending-emode-supply":{amount:o.toString(),valueUSD:p(o).multipliedBy(n.oracle.price).toString(),token:n.token,pool:n,emodeCap:{}}}:t={id:E(),wallet:"",protocol:"navi",market:"",type:"navi-lending-supply","navi-lending-supply":{amount:o.toString(),valueUSD:p(o).multipliedBy(n.oracle.price).toString(),token:n.token,pool:n}},new M([...this.positions,t])}withdraw(n,o){const r=!!n.isEMode;let t;return r?t={id:E(),wallet:"",protocol:"navi",market:"",type:"navi-lending-emode-supply","navi-lending-emode-supply":{amount:(-o).toString(),valueUSD:p(-o).multipliedBy(n.oracle.price).toString(),token:n.token,pool:n,emodeCap:{}}}:t={id:E(),wallet:"",protocol:"navi",market:"",type:"navi-lending-supply","navi-lending-supply":{amount:(-o).toString(),valueUSD:p(-o).multipliedBy(n.oracle.price).toString(),token:n.token,pool:n}},new M([...this.positions,t])}borrow(n,o){const r=!!n.isEMode;let t;return r?t={id:E(),wallet:"",protocol:"navi",market:"",type:"navi-lending-emode-borrow","navi-lending-emode-borrow":{amount:o.toString(),valueUSD:p(o).multipliedBy(n.oracle.price).toString(),token:n.token,pool:n,emodeCap:{}}}:t={id:E(),wallet:"",protocol:"navi",market:"",type:"navi-lending-borrow","navi-lending-borrow":{amount:o.toString(),valueUSD:p(o).multipliedBy(n.oracle.price).toString(),token:n.token,pool:n}},new M([...this.positions,t])}repay(n,o){const r=!!n.isEMode;let t;return r?t={id:E(),wallet:"",protocol:"navi",market:"",type:"navi-lending-emode-borrow","navi-lending-emode-borrow":{amount:(-o).toString(),valueUSD:p(-o).multipliedBy(n.oracle.price).toString(),token:n.token,pool:n,emodeCap:{}}}:t={id:E(),wallet:"",protocol:"navi",market:"",type:"navi-lending-borrow","navi-lending-borrow":{amount:(-o).toString(),valueUSD:p(-o).multipliedBy(n.oracle.price).toString(),token:n.token,pool:n}},new M([...this.positions,t])}getPositionsOverview(n){let o=new p(0),r=new p(0),t=new p(0),a=new p(0),s=new p(0),c=new p(0);n.forEach(d=>{if(d.type==="navi-lending-supply"){const g=d["navi-lending-supply"];o=o.plus(g.valueUSD),s=s.plus(new p(g.valueUSD).multipliedBy(g.pool.liquidationFactor.threshold)),c=c.plus(new p(g.valueUSD).multipliedBy(g.pool.ltvValue))}else if(d.type==="navi-lending-borrow")r=r.plus(d["navi-lending-borrow"].valueUSD);else if(d.type==="navi-lending-emode-supply"){const g=d["navi-lending-emode-supply"];o=o.plus(g.valueUSD);const w=g.pool.emode;s=s.plus(new p(g.valueUSD).multipliedBy(w.lt)),c=c.plus(new p(g.valueUSD).multipliedBy(w.ltv))}else d.type==="navi-lending-emode-borrow"&&(r=r.plus(d["navi-lending-emode-borrow"].valueUSD))}),n.forEach(d=>{if(d.type==="navi-lending-supply"){const g=d["navi-lending-supply"],w=g.pool.supplyIncentiveApyInfo.apy;t=t.plus(new p(g.valueUSD).dividedBy(o).multipliedBy(new p(w).dividedBy(100)))}else if(d.type==="navi-lending-borrow"){const g=d["navi-lending-borrow"],w=g.pool.borrowIncentiveApyInfo.apy;r.gt(0)&&(a=a.plus(new p(g.valueUSD).dividedBy(r).multipliedBy(new p(w).dividedBy(100))))}else if(d.type==="navi-lending-emode-supply"){const g=d["navi-lending-emode-supply"],w=g.pool.supplyIncentiveApyInfo.apy;o.gt(0)&&(t=t.plus(new p(g.valueUSD).dividedBy(o).multipliedBy(new p(w).dividedBy(100))))}else if(d.type==="navi-lending-emode-borrow"){const g=d["navi-lending-emode-borrow"],w=g.pool.borrowIncentiveApyInfo.apy;r.gt(0)&&(a=a.plus(new p(g.valueUSD).dividedBy(r).multipliedBy(new p(w).dividedBy(100))))}});const i=o.minus(r),u=o.minus(r).eq(0)?new p(0):o.multipliedBy(t).minus(r.multipliedBy(a)).div(o.minus(r));return{hf:r.toNumber()!==0?s.dividedBy(r).toNumber():1/0,netVaule:i.toString(),netWorthApr:u.toString(),totalSupplyValue:o.toString(),totalBorrowValue:r.toString(),totalsupplyApy:t.toString(),totalBorrowApy:a.toString(),maxLiquidationValue:s.toString(),maxLoanToVaule:c.toString()}}}const me=new W.SuiPriceServiceConnection("https://hermes.pyth.network",{timeout:1e4});async function ge(e){try{const n=[],o=await me.getLatestPriceFeeds(e);if(!o)return n;const r=Math.floor(new Date().valueOf()/1e3);for(const t of o){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}`),n.push(t.id))}return n}catch(n){throw new Error(`failed to get pyth stale price feed id, msg: ${n.message}`)}}async function ye(e,n,o){const r=o?.client??P,t=await k({...o,cacheTime:b});try{const a=await me.getPriceFeedsUpdateData(n);return await new W.SuiPythClient(r,t.oracle.pythStateId,t.oracle.wormholeStateId).updatePriceFeeds(e,a,n)}catch(a){throw new Error(`failed to update pyth price feeds, msg: ${a.message}`)}}async function fe(e,n,o){const r=await k({...o,cacheTime:b});if(o?.updatePythPriceFeeds){const t=n.filter(a=>!!a.pythPriceFeedId).map(a=>a.pythPriceFeedId);try{const a=await ge(t);a.length>0&&await ye(e,a,o)}catch{}}for(const t of n)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)]});return e}async function K(e){return(await k({...e,cacheTime:b})).oracle.feeds}function be(e,n){return e.filter(o=>!!(n?.lendingState&&n.lendingState.find(t=>t.assetId===o.assetId)||n?.lendingPositions&&n.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===o.assetId:!1)||n?.pools&&n.pools.find(t=>t.id===o.assetId)))}async function Je(e,n,o,r){try{const t=await K({...r}),a=[];o.forEach(u=>{a.includes(u.market)||a.push(u.market)});const s=await de(n,{...r,markets:a}),c=be(t,{lendingPositions:s,pools:o});return await fe(e,c,{updatePythPriceFeeds:!0,...r})}catch(t){if(r?.throws)throw t;return console.error(t),e}}const O=A(j(async e=>{const n=`https://open-api.naviprotocol.io/api/navi/flashloan?env=${e?.env||"prod"}&sdk=${S.version}&market=${e?.market||U}`,o=await fetch(n,{headers:V}).then(r=>r.json());return Object.keys(o.data).map(r=>({...o.data[r],coinType:r}))}));async function Qe(e,n){return(await O(n)).find(r=>typeof e=="string"?v(r.coinType)===v(e):typeof e=="number"?r.assetId===e:r.assetId===e.id)||null}async function Xe(e,n,o,r){const t=await k({...r,cacheTime:b}),a=await B(n,r);if(!(await O({...r,cacheTime:b})).some(i=>v(i.coinType)===v(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),y(o,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),y(o,e.pure.u64),e.object("0x05")],typeArguments:[a.suiCoinType]});return[i,u]}}async function Ze(e,n,o,r,t){const a=await k({...t,cacheTime:b}),s=await B(n,t);if(!(await O({...t,cacheTime:b})).some(m=>v(m.coinType)===v(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),y(o,e.object),y(r,e.object)],typeArguments:[s.suiCoinType]});return[u]}async function xe(e,n,o,r,t,a){const s={...a,cacheTime:b},c=await k(s),i=await B(n,s),u=await B(r,s);if(c.version===1){const[m,d]=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),y(o,e.object),e.pure.u8(u.id),e.object(u.contract.pool),y(t,e.pure.address),e.object(c.incentiveV2),e.object(c.incentiveV3)],typeArguments:[i.suiCoinType,u.suiCoinType]});return[m,d]}else{const[m,d]=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),y(o,e.object),e.pure.u8(u.id),e.object(u.contract.pool),y(t,e.pure.address),e.object(c.incentiveV2),e.object(c.incentiveV3),e.object("0x05")],typeArguments:[i.suiCoinType,u.suiCoinType]});return[m,d]}}async function et(e,n,o){const r=o?.client??P,t=new F.Transaction,a=await N({...o,markets:Object.values($),cacheTime:b}),s=await K(o);for(let m of n){const d=await k({...o,cacheTime:b,market:m.market});t.moveCall({target:`${d.uiGetter}::incentive_v3_getter::get_user_atomic_claimable_rewards`,arguments:[t.object("0x06"),t.object(d.storage),t.object(d.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,d)=>{const g=n[d];if(m.length===5&&Array.isArray(m[0])){const w=m[0].length;for(let f=0;f<w;f++){const h=s.find(I=>v(I.coinType)===v(m[1][f])),_=a.find(I=>v(I.coinType)===v(m[0][f]));!h||!_||u.push({assetId:_.id,assetCoinType:v(m[0][f]),rewardCoinType:v(m[1][f]),option:Number(m[2][f]),userClaimableReward:Number(m[4][f])/Math.pow(10,h.priceDecimal),ruleIds:Array.isArray(m[3][f])?m[3][f]:[m[3][f]],market:g.market,owner:g.address,emodeId:g.emodeId})}}}),u}async function tt(e,n){const o=(n?.markets||[$.main]).map(a=>T(a)),r=await G(e,n),t=o.map(a=>({address:e,market:a.key})).concat(r.filter(a=>!!o.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,n)}function ot(e){const n=new Map;e.forEach(r=>{const t=r.assetId,a=r.option,s=`${t}-${a}-${r.rewardCoinType}-${r.market}`;n.has(s)?n.get(s).total+=r.userClaimableReward:n.set(s,{assetId:t,rewardType:a,coinType:r.rewardCoinType,total:Number(r.userClaimableReward),market:r.market})});const o=new Map;for(const{assetId:r,rewardType:t,coinType:a,total:s,market:c}of n.values()){const i=`${r}-${t}-${c}`;o.has(i)||o.set(i,{assetId:r,rewardType:t,market:c,rewards:new Map});const u=o.get(i);u.rewards.set(a,(u.rewards.get(a)||0)+s)}return Array.from(o.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,n)=>{const o=`https://open-api.naviprotocol.io/api/navi/user/total_claimed_reward?userAddress=${e}&sdk=${S.version}&market=${n?.market||U}`;return(await fetch(o,{headers:V}).then(t=>t.json())).data}),rt=j(async(e,n)=>{const o=`https://open-api.naviprotocol.io/api/navi/user/rewards?userAddress=${e}&page=${n?.page||1}&pageSize=${n?.size||400}&sdk=${S.version}&market=${n?.market||U}`,r=await fetch(o,{headers:V}).then(t=>t.json());return q({data:r.data.rewards})});async function at(e,n,o){const r=await k({...o,cacheTime:b}),t=await N({...o,markets:Object.values($),cacheTime:b}),a=new Map;for(const c of n){const{rewardCoinType:i,ruleIds:u,market:m,owner:d,emodeId:g}=c,w=`${i}-${m}-${d}`;for(const f of u){a.has(w)||a.set(w,{assetIds:[],ruleIds:[],amount:0,market:m,owner:d,isEMode:typeof g<"u"});const h=a.get(w);h.assetIds.push(c.assetCoinType.replace("0x","")),h.ruleIds.push(f),h.amount+=c.userClaimableReward}}const s=[];for(const[c,{assetIds:i,ruleIds:u,amount:m,market:d,owner:g,isEMode:w}]of a){const f=t.find(_=>v(_.suiCoinType)===v(c)&&_.market===d);if(!f||!f.contract.rewardFundId)throw new Error(`No matching rewardFund found for reward coin: ${c} ${d}`);const h=f.contract.rewardFundId;if(o?.accountCap&&!o.customCoinReceive)throw new Error("customCoinReceive is required when accountCap is provided");if(o?.customCoinReceive){let _;o.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(h),e.pure.vector("string",i),e.pure.vector("address",u),y(o.accountCap,e.object)],typeArguments:[c]}):w?_=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(h),e.pure.vector("string",i),e.pure.vector("address",u),y(g,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(h),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(o?.customCoinReceive.type==="transfer"){if(!o.customCoinReceive.transfer)throw new Error("customCoinReceive.transfer is required");e.transferObjects([I],y(o.customCoinReceive.transfer,e.pure.address))}if(o?.customCoinReceive.type==="depositNAVI"){const we=p(f.totalSupplyAmount).shiftedBy(-9),ve=p(f.supplyCapCeiling).shiftedBy(-27);we.plus(m).isGreaterThan(ve)&&o?.customCoinReceive.depositNAVI?.fallbackReceiveAddress?e.transferObjects([I],e.pure.address(o.customCoinReceive.depositNAVI.fallbackReceiveAddress)):await re(e,f,I,o)}else s.push({coin:I,identifier:f,owner:g,isEMode:w})}else if(o?.accountCap||w){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(h),e.pure.vector("string",i),e.pure.vector("address",u),y(o?.accountCap||g,e.object)],typeArguments:[c]}),[I]=e.moveCall({target:"0x2::coin::from_balance",arguments:[_],typeArguments:[c]});e.transferObjects([I],y(o?.accountCap||g,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(h),e.pure.vector("string",i),e.pure.vector("address",u)],typeArguments:[c]})}return s}exports.Address=L;exports.DEFAULT_CACHE_TIME=b;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=Oe;exports.filterPriceFeeds=be;exports.flashloanPTB=Xe;exports.getAccountCapOwnerPTB=ie;exports.getAllFlashLoanAssets=O;exports.getBorrowFee=Ne;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=Re;exports.getMarketConfig=T;exports.getMarkets=ce;exports.getPool=B;exports.getPools=N;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=v;exports.parsePoolUID=ne;exports.parseTxValue=y;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 F=require("@mysten/sui/transactions"),l=require("@mysten/bcs"),Y=require("@mysten/sui/client"),he=require("lodash.camelcase"),ke=require("@mysten/sui/utils"),W=require("@pythnetwork/pyth-sui-js"),p=require("bignumber.js"),C=require("@mysten/sui/bcs"),L=l.bcs.bytes(32).transform({input:e=>l.fromHex(e),output:e=>l.toHex(e)}),Ce=l.bcs.struct("IncentiveAPYInfo",{asset_id:l.bcs.u8(),apy:l.bcs.u256(),coin_types:l.bcs.vector(l.bcs.string())}),x=l.bcs.struct("IncentivePoolInfo",{pool_id:L,funds:L,phase:l.bcs.u64(),start_at:l.bcs.u64(),end_at:l.bcs.u64(),closed_at:l.bcs.u64(),total_supply:l.bcs.u64(),asset_id:l.bcs.u8(),option:l.bcs.u8(),factor:l.bcs.u256(),distributed:l.bcs.u64(),available:l.bcs.u256(),total:l.bcs.u256()}),_e=l.bcs.struct("IncentivePoolInfoByPhase",{phase:l.bcs.u64(),pools:l.bcs.vector(x)}),Te=l.bcs.struct("OracleInfo",{oracle_id:l.bcs.u8(),price:l.bcs.u256(),decimals:l.bcs.u8(),valid:l.bcs.bool()}),je=l.bcs.struct("FlashLoanAssetConfig",{id:l.bcs.string(),asset_id:l.bcs.u8(),coin_type:l.bcs.string(),pool_id:l.bcs.string(),rate_to_supplier:l.bcs.u64(),rate_to_treasury:l.bcs.u64(),max:l.bcs.u64(),min:l.bcs.u64()}),Ie=l.bcs.struct("ReserveDataInfo",{id:l.bcs.u8(),oracle_id:l.bcs.u8(),coin_type:l.bcs.string(),supply_cap:l.bcs.u256(),borrow_cap:l.bcs.u256(),supply_rate:l.bcs.u256(),borrow_rate:l.bcs.u256(),supply_index:l.bcs.u256(),borrow_index:l.bcs.u256(),total_supply:l.bcs.u256(),total_borrow:l.bcs.u256(),last_update_at:l.bcs.u64(),ltv:l.bcs.u256(),treasury_factor:l.bcs.u256(),treasury_balance:l.bcs.u256(),base_rate:l.bcs.u256(),multiplier:l.bcs.u256(),jump_rate_multiplier:l.bcs.u256(),reserve_factor:l.bcs.u256(),optimal_utilization:l.bcs.u256(),liquidation_ratio:l.bcs.u256(),liquidation_bonus:l.bcs.u256(),liquidation_threshold:l.bcs.u256()}),ee=l.bcs.struct("UserStateInfo",{asset_id:l.bcs.u8(),borrow_balance:l.bcs.u256(),supply_balance:l.bcs.u256()}),Be="1.4.0-emode.14",S={version:Be},Ae=S.version,Pe=()=>{if(typeof process<"u"&&process.versions&&process.versions.node)try{const e=require("os"),n=process.version,o=e.type(),r=e.arch();return`Node.js ${n.startsWith("v")?n.substring(1):n}; ${o}/${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 n=[];return e.forEach((o,r)=>{const t=r===e.length-1;if(typeof o=="object"&&o!==null&&t){const{client:a,disableCache:s,cacheTime:c,...i}=o;n.push(i)}else n.push(o)}),JSON.stringify(n)}function j(e){const n={};return(...o)=>{const r=te(o);return n[r]||(n[r]=e(...o).finally(()=>{delete n[r]})),n[r]}}function A(e){let n={};return(...o)=>{const r=o[o.length-1],t=te(o),a=n[t];return!r?.disableCache&&typeof a?.data<"u"&&(typeof r?.cacheTime>"u"||r.cacheTime>Date.now()-a.cacheAt)?a.data:e(...o).then(s=>(n[t]={data:s,cacheAt:Date.now()},s))}}function q(e){return Array.isArray(e)?e.map(n=>q(n)):e!=null&&typeof e=="object"?Object.keys(e).reduce((n,o)=>({...n,[he(o)]:q(e[o])}),{}):e}function y(e,n){return typeof e=="object"?e:n(e)}function $e(e,n){return typeof n=="string"?e.object(n):typeof n=="object"&&n.$kind?n:e.object(n.contract.pool)}function R(e,n,o){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)=>(n[t]||n[0]).parse(Uint8Array.from(r[0])))}else if(e.error)return console.log(`Get an error, msg: ${e.error}`),[];return[]}function v(e){return ke.normalizeStructTag(e)}function oe(e){const n=(e||0)/Math.pow(10,27);return n>Math.pow(10,5)?1/0:n}new W.SuiPriceServiceConnection("https://hermes.pyth.network",{timeout:2e4});const Ee=27,Q=(e,n)=>{if(!Number(e)||!Number(n))return new p(0);const o=new p(1).shiftedBy(1*Ee),r=o.multipliedBy(new p(.5));return new p(e).multipliedBy(new p(n)).plus(r).dividedBy(o).integerValue(p.ROUND_DOWN)},V=J?{"User-Agent":J}:{};function H(e,n="uniqueId"){return e.reduce((o,r)=>(o[r[n]]=r,o),{})}function X(e,n="uniqueId"){return e.reduce((o,r)=>(o[r[n]]=r,o),{})}function Z(e,n){const o=e.emodes.find(t=>t.emodeId===n.emodeId);if(!o)throw new Error("EMode not found in pool");const r=o.assets.find(t=>t.assetId===e.id);return{...e,emode:{...r,emodeId:o.emodeId},isEMode:!0}}function ne(e){const[n,o]=e.split("-");return!n||!o?null:{marketKey:n,poolId:parseInt(o)}}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 N=A(j(async e=>{const n=(e?.markets||[$.main]).map(t=>T(t)),o=`https://open-api.naviprotocol.io/api/navi/pools?env=${e?.env||"prod"}&sdk=${S.version}&market=${n.map(t=>t.key)}`,r=await fetch(o,{headers:V}).then(t=>t.json());return r.data.forEach(t=>{const s=r.meta.emodes.filter(h=>{const _=T(h.marketId);return t.market===_.key&&h.isActive}).filter(h=>!!h.assets.find(_=>_.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(),d=p(t.supplyCapCeiling).shiftedBy(-27).decimalPlaces(t.token.decimals,p.ROUND_DOWN).toString(),g=p.max(p(t.borrowedAmount),p(t.validBorrowAmount)).shiftedBy(-9).decimalPlaces(t.token.decimals,p.ROUND_DOWN).toString(),w=p(d).multipliedBy(t.oracle.price).toString(),f=p(g).multipliedBy(t.oracle.price).toString();t.poolSupplyAmount=c,t.poolBorrowAmount=i,t.poolSupplyValue=u,t.poolBorrowValue=m,t.poolSupplyCapAmount=d,t.poolBorrowCapAmount=g,t.poolSupplyCapValue=w,t.poolBorrowCapValue=f}),r.data}));async function B(e,n){let o=n?.market;if(typeof e=="string"){const a=ne(e);a&&(o=a.marketKey,e=a.poolId)}const r=await N({...n,markets:[o||U],cacheTime:b});if(typeof e=="object")return e;const t=r.find(a=>typeof e=="string"?v(a.suiCoinType)===v(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 n=`https://open-api.naviprotocol.io/api/navi/stats?sdk=${S.version}`;return(await fetch(n,{headers:V}).then(r=>r.json())).data})),Me=A(j(async e=>{const n=`https://open-api.naviprotocol.io/api/navi/fee?sdk=${S.version}`;return await fetch(n,{headers:V}).then(r=>r.json())}));async function re(e,n,o,r){const t=await k({...r,cacheTime:b}),a=await B(n,r);if(a?.deprecatedAt&&Date.now()>a.deprecatedAt)throw new Error(`The lending pool for coinType ${a.suiCoinType} has been deprecated.`);const s=typeof o=="object"&&o.$kind==="GasCoin";if(v(a.suiCoinType)===v("0x2::sui::SUI")&&s){if(!r?.amount)throw new Error("Amount is required for sui coin");o=e.splitCoins(o,[r.amount])}let c;return typeof r?.amount<"u"?c=y(r.amount,e.pure.u64):c=e.moveCall({target:"0x2::coin::value",arguments:[y(o,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),y(o,e.object),e.object(t.incentiveV2),e.object(t.incentiveV3),y(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),y(o,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,n,o,r){const t=await k({...r,cacheTime:b}),a=await B(n,r),s=y(o,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),y(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),y(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,n,o,r){const t=await k({...r,cacheTime:b}),a=await B(n,r);if(a?.deprecatedAt&&Date.now()>a.deprecatedAt)throw new Error(`The lending pool for coinType ${a.suiCoinType} has been deprecated.`);const s=y(o,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),y(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),y(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,n,o,r){const t=await k({...r,cacheTime:b}),a=await B(n,r),s=typeof o=="object"&&o.$kind==="GasCoin";if(v(a.suiCoinType)===v("0x2::sui::SUI")&&s){if(!r?.amount)throw new Error("Amount is required for sui coin");o=e.splitCoins(o,[r.amount])}let c;if(typeof r?.amount<"u"?c=y(r.amount,e.pure.u64):c=e.moveCall({target:"0x2::coin::value",arguments:[y(o,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),y(o,e.object),e.object(t.incentiveV2),e.object(t.incentiveV3),y(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),y(o,e.object),c,e.object(t.incentiveV2),e.object(t.incentiveV3)],typeArguments:[a.suiCoinType]}),e}const Ne=A(j(async e=>{const n=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:`${n.package}::incentive_v3::get_borrow_fee_v2`,arguments:[s.object(n.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:n.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(n,o){this.poolMap={},this.emodeMap={},this.pools=[],this.emodes=[],this.emodePools=[],this.emodeBorrowablePools=[],this.emodeSupplyablePools=[],this._overview={marketTotalSupplyValue:"0",marketTotalBorrowValue:"0"},this.config=T(n),this.addPools(o)}get overview(){return this._overview}addPools(n){const o=H(this.pools),r=X(this.emodes),t=new Set,a=new Set;let s=p(0),c=p(0);n.forEach(i=>{if(!this.checkMarket(i.market)){console.warn(`Pool is not in market ${this.config.name}`,i);return}o[i.uniqueId]||this.pools.push(i),i.emodes.forEach(m=>{r[m.uniqueId]||this.emodes.push(m),m.assets.forEach(d=>{d.isDebt&&t.add(i.uniqueId),d.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(n){return this.emodeMap[n]||null}getEModeRelatePools(n,o){const{collateral:r,debt:t,emodeId:a}=o||{},s=[];return n.emodes.forEach(c=>{typeof a=="number"&&a!==c.emodeId||c.assets.forEach(i=>{typeof r=="boolean"&&r&&i.isCollateral&&i.assetId===n.id&&s.push(this.poolMap[i.assetId]),typeof t=="boolean"&&t&&i.isDebt&&i.assetId===n.id&&s.push(this.poolMap[i.assetId])})}),s}getEModePools(n){const o=this.getEMode(n);return o?o.assets.map(t=>t.assetId).map(t=>this.poolMap[t]).filter(t=>!!t).map(t=>{const a=o.assets.find(s=>s.assetId===t.id);return{...t,emode:{...a,emodeId:o.emodeId},isEMode:!0}}):[]}checkMarket(n){let o=!1;return typeof n=="number"&&n===this.config.id&&(o=!0),typeof n=="string"&&n===this.config.key&&(o=!0),typeof n=="object"&&n.id===this.config.id&&(o=!0),o}}const T=e=>{const o=Object.values($).find(r=>typeof e=="number"?r.id===e:typeof e=="string"?r.key===e:r.id===e.id);if(!o)throw new Error("Market not found");return o},ce=A(j(async(e,n)=>{const o=await N({cacheTime:6e4,...n,markets:e});return e.map(r=>{const t=T(r),a=o.filter(s=>s.market===t.key);return new ae(r,a)})})),Re=A(j(async(e,n)=>(await ce([e],n))[0])),k=A(j(async e=>{const n=T(e?.market||U),o=`https://open-api.naviprotocol.io/api/navi/config?env=${e?.env||"prod"}&sdk=${S.version}&market=${n.key}`;return(await fetch(o,{headers:V}).then(t=>t.json())).data})),b=1e3*60*5;async function se(e,n){const o=await k({cacheTime:b,...n});return e.moveCall({target:`${o.package}::lending::create_account`,arguments:[]})}async function ie(e,n,o){const r=await k({cacheTime:b,...o});return e.moveCall({target:`${r.package}::lending_core::account_owner`,arguments:[n]})}async function ue(e,n,o){const r=await k({...o,cacheTime:b});return o?.accountCap?e.moveCall({target:`${r.package}::lending::enter_emode_with_account_cap`,arguments:[e.object(r.storage),y(n,e.pure.u64),y(o.accountCap,e.object)]}):e.moveCall({target:`${r.package}::lending::enter_emode`,arguments:[e.object(r.storage),y(n,e.pure.u64)]}),e}async function Oe(e,n){const o=await k({...n,cacheTime:b});return n?.accountCap?e.moveCall({target:`${o.package}::lending::exit_emode_with_account_cap`,arguments:[e.object(o.storage),y(n.accountCap,e.object)]}):e.moveCall({target:`${o.package}::lending::exit_emode`,arguments:[e.object(o.storage)]}),e}async function Le(e,n,o){const r=await k({cacheTime:b,...o}),t=await se(e,o);await ue(e,n,{...o,accountCap:t});const a=await T(o?.market||U),s=await ie(e,t,o);return e.moveCall({target:`${r.emode.contract.registryPackage}::registry::register_emode_for_account_cap`,arguments:[e.object(r.emode.contract.registryObject),s,y(a.id,e.pure.u64),y(n,e.pure.u64)]}),t}const G=A(j(async(e,n)=>{const o=await k({cacheTime:b,...n}),r=new F.Transaction,t=n?.client??P;r.moveCall({target:`${o.emode.contract.registryPackage}::registry::find_user_emode_account_caps`,arguments:[r.object(o.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,d)=>({marketId:Number(m),emodeId:Number(i[d]),accountCap:u[d].toString()}))}));function qe(e){return`${T(e.marketId).key}-${e.emodeId}`}function He(e,n,o){const r=typeof o?.balance=="number",t=r?o.balance:0;let a=0;const s=[];let c="";if(n.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 v(c)===v("0x2::sui::SUI")&&o?.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,n,o,r,t,a,s){const c=await k({...s,cacheTime:b}),i=await B(o,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),y(n,e.pure.address),y(i.id,e.pure.u8),y(r,e.pure.u64),y(t,e.pure.u64),y(a,e.pure.bool)],typeArguments:[i.suiCoinType]})}async function le(e,n,o){return z(e,n,0,0,0,!1,o)}async function pe(e,n,o){const r=new F.Transaction,t=o?.client??P,a=await N({...o,markets:Object.values($)}),s=H(a);for(let m of n){const d=await k({...o,cacheTime:b,market:m.market});r.moveCall({target:`${d.uiGetter}::getter_unchecked::get_user_state`,arguments:[r.object(d.storage),r.pure.address(m.address)]})}const i=((await t.devInspectTransactionBlock({transactionBlock:r,sender:e})).results||[]).map(m=>m.returnValues?.map(d=>C.bcs.vector(ee).parse(Uint8Array.from(d[0])))[0]||[]),u=[];return i.forEach((m,d)=>{const g=n[d],w=T(g.market);m.forEach(f=>{if(f.supply_balance==="0"&&f.borrow_balance==="0")return;const h=s[`${w.key}-${f.asset_id}`];if(!h)return;const _=Q(f.supply_balance,h.currentSupplyIndex).toString(),I=Q(f.borrow_balance,h.currentBorrowIndex).toString();u.push({supplyBalance:_,borrowBalance:I,assetId:f.asset_id,market:w.key,pool:h,emodeId:g.emodeId})})}),u}const We=A(async(e,n)=>{const r=(n?.markets||Object.keys($)).map(t=>T(t)).map(t=>({address:e,market:t.key}));return await pe(e,r,n)});async function Ge(e,n){const o=n?.client??P,r=new F.Transaction;await le(r,e,n);const t=await o.devInspectTransactionBlock({transactionBlock:r,sender:e}),a=R(t,[C.bcs.u256()]);return oe(Number(a[0])||0)}async function ze(e,n,o,r){const t=r?.client??P,a=new F.Transaction;let s=0,c=0;const i=await B(n,r);if(o.forEach(g=>{g.type===D.Supply?s+=g.amount:g.type===D.Withdraw?s-=g.amount:g.type===D.Borrow?c+=g.amount:g.type===D.Repay&&(c-=g.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}),d=R(m,[C.bcs.u256()]);return oe(Number(d[0])||0)}const Ke=j(async(e,n)=>{const o=new URLSearchParams;n?.cursor&&o.set("cursor",n.cursor),o.set("userAddress",e);const r=`https://open-api.naviprotocol.io/api/navi/user/transactions?${o.toString()}&sdk=${S.version}`;return(await fetch(r,{headers:V}).then(a=>a.json())).data});async function Ye(e,n){let o=null;const r=[],t=n?.client??P;do{let a;if(n?.coinType?a=await t.getCoins({owner:e,coinType:n?.coinType,cursor:o,limit:100}):a=await t.getAllCoins({owner:e,cursor:o,limit:100}),!a.data||!a.data.length)break;r.push(...a.data),o=a.nextCursor}while(o);return r}const de=A(async(e,n)=>{const o=[],r=(n?.markets||Object.keys($)).map(c=>T(c)),t=await G(e,n),a=r.map(c=>({address:e,market:c.key})).concat(t.filter(c=>!!r.find(i=>i.id===c.marketId)).map(c=>({address:e,market:T(c.marketId).key,emodeId:c.emodeId})));return(await pe(e,a,n)).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(p(c.supplyBalance).gt(0)){const u=p(c.supplyBalance).shiftedBy(-9).decimalPlaces(c.pool.token.decimals,p.ROUND_DOWN);o.push({id:`${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(p(c.borrowBalance).gt(0)){const u=p(c.borrowBalance).shiftedBy(-9).decimalPlaces(c.pool.token.decimals,p.ROUND_DOWN);o.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(p(c.supplyBalance).gt(0)){const u=p(c.supplyBalance).shiftedBy(-9).decimalPlaces(c.pool.token.decimals,p.ROUND_DOWN);o.push({id:`${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);o.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()}})}}}),o});class M{constructor(n){this._positions=[],this._overview={hf:1/0,netVaule:"0",netWorthApr:"0",totalSupplyValue:"0",totalBorrowValue:"0",totalsupplyApy:"0",totalBorrowApy:"0",maxLiquidationValue:"0",maxLoanToVaule:"0"},this.positions=n}get positions(){return this._positions}get overview(){return this._overview}set positions(n){this._positions=n,this._overview=this.getPositionsOverview(n)}filterPositionsByPool(n){const r=!!n.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===n.uniqueId}))}deposit(n,o){const r=!!n.isEMode;let t;return r?t={id:E(),wallet:"",protocol:"navi",market:"",type:"navi-lending-emode-supply","navi-lending-emode-supply":{amount:o.toString(),valueUSD:p(o).multipliedBy(n.oracle.price).toString(),token:n.token,pool:n,emodeCap:{}}}:t={id:E(),wallet:"",protocol:"navi",market:"",type:"navi-lending-supply","navi-lending-supply":{amount:o.toString(),valueUSD:p(o).multipliedBy(n.oracle.price).toString(),token:n.token,pool:n}},new M([...this.positions,t])}withdraw(n,o){const r=!!n.isEMode;let t;return r?t={id:E(),wallet:"",protocol:"navi",market:"",type:"navi-lending-emode-supply","navi-lending-emode-supply":{amount:(-o).toString(),valueUSD:p(-o).multipliedBy(n.oracle.price).toString(),token:n.token,pool:n,emodeCap:{}}}:t={id:E(),wallet:"",protocol:"navi",market:"",type:"navi-lending-supply","navi-lending-supply":{amount:(-o).toString(),valueUSD:p(-o).multipliedBy(n.oracle.price).toString(),token:n.token,pool:n}},new M([...this.positions,t])}borrow(n,o){const r=!!n.isEMode;let t;return r?t={id:E(),wallet:"",protocol:"navi",market:"",type:"navi-lending-emode-borrow","navi-lending-emode-borrow":{amount:o.toString(),valueUSD:p(o).multipliedBy(n.oracle.price).toString(),token:n.token,pool:n,emodeCap:{}}}:t={id:E(),wallet:"",protocol:"navi",market:"",type:"navi-lending-borrow","navi-lending-borrow":{amount:o.toString(),valueUSD:p(o).multipliedBy(n.oracle.price).toString(),token:n.token,pool:n}},new M([...this.positions,t])}repay(n,o){const r=!!n.isEMode;let t;return r?t={id:E(),wallet:"",protocol:"navi",market:"",type:"navi-lending-emode-borrow","navi-lending-emode-borrow":{amount:(-o).toString(),valueUSD:p(-o).multipliedBy(n.oracle.price).toString(),token:n.token,pool:n,emodeCap:{}}}:t={id:E(),wallet:"",protocol:"navi",market:"",type:"navi-lending-borrow","navi-lending-borrow":{amount:(-o).toString(),valueUSD:p(-o).multipliedBy(n.oracle.price).toString(),token:n.token,pool:n}},new M([...this.positions,t])}getPositionsOverview(n){let o=new p(0),r=new p(0),t=new p(0),a=new p(0),s=new p(0),c=new p(0);n.forEach(d=>{if(d.type==="navi-lending-supply"){const g=d["navi-lending-supply"];o=o.plus(g.valueUSD),s=s.plus(new p(g.valueUSD).multipliedBy(g.pool.liquidationFactor.threshold)),c=c.plus(new p(g.valueUSD).multipliedBy(g.pool.ltvValue))}else if(d.type==="navi-lending-borrow")r=r.plus(d["navi-lending-borrow"].valueUSD);else if(d.type==="navi-lending-emode-supply"){const g=d["navi-lending-emode-supply"];o=o.plus(g.valueUSD);const w=g.pool.emode;s=s.plus(new p(g.valueUSD).multipliedBy(w.lt)),c=c.plus(new p(g.valueUSD).multipliedBy(w.ltv))}else d.type==="navi-lending-emode-borrow"&&(r=r.plus(d["navi-lending-emode-borrow"].valueUSD))}),n.forEach(d=>{if(d.type==="navi-lending-supply"){const g=d["navi-lending-supply"],w=g.pool.supplyIncentiveApyInfo.apy;t=t.plus(new p(g.valueUSD).dividedBy(o).multipliedBy(new p(w).dividedBy(100)))}else if(d.type==="navi-lending-borrow"){const g=d["navi-lending-borrow"],w=g.pool.borrowIncentiveApyInfo.apy;r.gt(0)&&(a=a.plus(new p(g.valueUSD).dividedBy(r).multipliedBy(new p(w).dividedBy(100))))}else if(d.type==="navi-lending-emode-supply"){const g=d["navi-lending-emode-supply"],w=g.pool.supplyIncentiveApyInfo.apy;o.gt(0)&&(t=t.plus(new p(g.valueUSD).dividedBy(o).multipliedBy(new p(w).dividedBy(100))))}else if(d.type==="navi-lending-emode-borrow"){const g=d["navi-lending-emode-borrow"],w=g.pool.borrowIncentiveApyInfo.apy;r.gt(0)&&(a=a.plus(new p(g.valueUSD).dividedBy(r).multipliedBy(new p(w).dividedBy(100))))}});const i=o.minus(r),u=o.minus(r).eq(0)?new p(0):o.multipliedBy(t).minus(r.multipliedBy(a)).div(o.minus(r));return{hf:r.toNumber()!==0?s.dividedBy(r).toNumber():1/0,netVaule:i.toString(),netWorthApr:u.toString(),totalSupplyValue:o.toString(),totalBorrowValue:r.toString(),totalsupplyApy:t.toString(),totalBorrowApy:a.toString(),maxLiquidationValue:s.toString(),maxLoanToVaule:c.toString()}}}const me=new W.SuiPriceServiceConnection("https://hermes.pyth.network",{timeout:1e4});async function ge(e){try{const n=[],o=await me.getLatestPriceFeeds(e);if(!o)return n;const r=Math.floor(new Date().valueOf()/1e3);for(const t of o){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}`),n.push(t.id))}return n}catch(n){throw new Error(`failed to get pyth stale price feed id, msg: ${n.message}`)}}async function ye(e,n,o){const r=o?.client??P,t=await k({...o,cacheTime:b});try{const a=await me.getPriceFeedsUpdateData(n);return await new W.SuiPythClient(r,t.oracle.pythStateId,t.oracle.wormholeStateId).updatePriceFeeds(e,a,n)}catch(a){throw new Error(`failed to update pyth price feeds, msg: ${a.message}`)}}async function fe(e,n,o){const r=await k({...o,cacheTime:b});if(o?.updatePythPriceFeeds){const t=n.filter(a=>!!a.pythPriceFeedId).map(a=>a.pythPriceFeedId);try{const a=await ge(t);a.length>0&&await ye(e,a,o)}catch{}}for(const t of n)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)]});return e}async function K(e){return(await k({...e,cacheTime:b})).oracle.feeds}function be(e,n){return e.filter(o=>!!(n?.lendingState&&n.lendingState.find(t=>t.assetId===o.assetId)||n?.lendingPositions&&n.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===o.assetId:!1)||n?.pools&&n.pools.find(t=>t.id===o.assetId)))}async function Je(e,n,o,r){try{const t=await K({...r}),a=[];o.forEach(u=>{a.includes(u.market)||a.push(u.market)});const s=await de(n,{...r,markets:a}),c=be(t,{lendingPositions:s,pools:o});return await fe(e,c,{updatePythPriceFeeds:!0,...r})}catch(t){if(r?.throws)throw t;return console.error(t),e}}const O=A(j(async e=>{const n=`https://open-api.naviprotocol.io/api/navi/flashloan?env=${e?.env||"prod"}&sdk=${S.version}&market=${e?.market||U}`,o=await fetch(n,{headers:V}).then(r=>r.json());return Object.keys(o.data).map(r=>({...o.data[r],coinType:r}))}));async function Qe(e,n){return(await O(n)).find(r=>typeof e=="string"?v(r.coinType)===v(e):typeof e=="number"?r.assetId===e:r.assetId===e.id)||null}async function Xe(e,n,o,r){const t=await k({...r,cacheTime:b}),a=await B(n,r);if(!(await O({...r,cacheTime:b})).some(i=>v(i.coinType)===v(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),y(o,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),y(o,e.pure.u64),e.object("0x05")],typeArguments:[a.suiCoinType]});return[i,u]}}async function Ze(e,n,o,r,t){const a=await k({...t,cacheTime:b}),s=await B(n,t);if(!(await O({...t,cacheTime:b})).some(m=>v(m.coinType)===v(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),y(o,e.object),y(r,e.object)],typeArguments:[s.suiCoinType]});return[u]}async function xe(e,n,o,r,t,a){const s={...a,cacheTime:b},c=await k(s),i=await B(n,s),u=await B(r,s);if(c.version===1){const[m,d]=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),y(o,e.object),e.pure.u8(u.id),e.object(u.contract.pool),y(t,e.pure.address),e.object(c.incentiveV2),e.object(c.incentiveV3)],typeArguments:[i.suiCoinType,u.suiCoinType]});return[m,d]}else{const[m,d]=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),y(o,e.object),e.pure.u8(u.id),e.object(u.contract.pool),y(t,e.pure.address),e.object(c.incentiveV2),e.object(c.incentiveV3),e.object("0x05")],typeArguments:[i.suiCoinType,u.suiCoinType]});return[m,d]}}async function et(e,n,o){const r=o?.client??P,t=new F.Transaction,a=await N({...o,markets:Object.values($),cacheTime:b}),s=await K(o);for(let m of n){const d=await k({...o,cacheTime:b,market:m.market});t.moveCall({target:`${d.uiGetter}::incentive_v3_getter::get_user_atomic_claimable_rewards`,arguments:[t.object("0x06"),t.object(d.storage),t.object(d.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,d)=>{const g=n[d];if(m.length===5&&Array.isArray(m[0])){const w=m[0].length;for(let f=0;f<w;f++){const h=s.find(I=>v(I.coinType)===v(m[1][f])),_=a.find(I=>v(I.coinType)===v(m[0][f]));!h||!_||u.push({assetId:_.id,assetCoinType:v(m[0][f]),rewardCoinType:v(m[1][f]),option:Number(m[2][f]),userClaimableReward:Number(m[4][f])/Math.pow(10,h.priceDecimal),ruleIds:Array.isArray(m[3][f])?m[3][f]:[m[3][f]],market:g.market,owner:g.address,emodeId:g.emodeId})}}}),u}async function tt(e,n){const o=(n?.markets||[$.main]).map(a=>T(a)),r=await G(e,n),t=o.map(a=>({address:e,market:a.key})).concat(r.filter(a=>!!o.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,n)}function ot(e){const n=new Map;e.forEach(r=>{const t=r.assetId,a=r.option,s=`${t}-${a}-${r.rewardCoinType}-${r.market}`;n.has(s)?n.get(s).total+=r.userClaimableReward:n.set(s,{assetId:t,rewardType:a,coinType:r.rewardCoinType,total:Number(r.userClaimableReward),market:r.market})});const o=new Map;for(const{assetId:r,rewardType:t,coinType:a,total:s,market:c}of n.values()){const i=`${r}-${t}-${c}`;o.has(i)||o.set(i,{assetId:r,rewardType:t,market:c,rewards:new Map});const u=o.get(i);u.rewards.set(a,(u.rewards.get(a)||0)+s)}return Array.from(o.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,n)=>{const o=`https://open-api.naviprotocol.io/api/navi/user/total_claimed_reward?userAddress=${e}&sdk=${S.version}&market=${n?.market||U}`;return(await fetch(o,{headers:V}).then(t=>t.json())).data}),rt=j(async(e,n)=>{const o=`https://open-api.naviprotocol.io/api/navi/user/rewards?userAddress=${e}&page=${n?.page||1}&pageSize=${n?.size||400}&sdk=${S.version}&market=${n?.market||U}`,r=await fetch(o,{headers:V}).then(t=>t.json());return q({data:r.data.rewards})});async function at(e,n,o){const r=await k({...o,cacheTime:b}),t=await N({...o,markets:Object.values($),cacheTime:b}),a=new Map;for(const c of n){const{rewardCoinType:i,ruleIds:u,market:m,owner:d,emodeId:g}=c,w=`${i}-${m}-${d}`;for(const f of u){a.has(w)||a.set(w,{assetIds:[],ruleIds:[],amount:0,market:m,owner:d,isEMode:typeof g<"u"});const h=a.get(w);h.assetIds.push(c.assetCoinType.replace("0x","")),h.ruleIds.push(f),h.amount+=c.userClaimableReward}}const s=[];for(const[c,{assetIds:i,ruleIds:u,amount:m,market:d,owner:g,isEMode:w}]of a){const f=t.find(_=>v(_.suiCoinType)===v(c)&&_.market===d);if(!f||!f.contract.rewardFundId)throw new Error(`No matching rewardFund found for reward coin: ${c} ${d}`);const h=f.contract.rewardFundId;if(o?.accountCap&&!o.customCoinReceive)throw new Error("customCoinReceive is required when accountCap is provided");if(o?.customCoinReceive){let _;o.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(h),e.pure.vector("string",i),e.pure.vector("address",u),y(o.accountCap,e.object)],typeArguments:[c]}):w?_=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(h),e.pure.vector("string",i),e.pure.vector("address",u),y(g,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(h),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(o?.customCoinReceive.type==="transfer"){if(!o.customCoinReceive.transfer)throw new Error("customCoinReceive.transfer is required");e.transferObjects([I],y(o.customCoinReceive.transfer,e.pure.address))}if(o?.customCoinReceive.type==="depositNAVI"){const we=p(f.totalSupplyAmount).shiftedBy(-9),ve=p(f.supplyCapCeiling).shiftedBy(-27);we.plus(m).isGreaterThan(ve)&&o?.customCoinReceive.depositNAVI?.fallbackReceiveAddress?e.transferObjects([I],e.pure.address(o.customCoinReceive.depositNAVI.fallbackReceiveAddress)):await re(e,f,I,o)}else s.push({coin:I,identifier:f,owner:g,isEMode:w})}else if(o?.accountCap||w){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(h),e.pure.vector("string",i),e.pure.vector("address",u),y(o?.accountCap||g,e.object)],typeArguments:[c]}),[I]=e.moveCall({target:"0x2::coin::from_balance",arguments:[_],typeArguments:[c]});e.transferObjects([I],y(o?.accountCap||g,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(h),e.pure.vector("string",i),e.pure.vector("address",u)],typeArguments:[c]})}return s}exports.Address=L;exports.DEFAULT_CACHE_TIME=b;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=Oe;exports.filterPriceFeeds=be;exports.flashloanPTB=Xe;exports.getAccountCapOwnerPTB=ie;exports.getAllFlashLoanAssets=O;exports.getBorrowFee=Ne;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=Re;exports.getMarketConfig=T;exports.getMarkets=ce;exports.getPool=B;exports.getPools=N;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=v;exports.parsePoolUID=ne;exports.parseTxValue=y;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;
|
|
2
2
|
//# sourceMappingURL=index.cjs.js.map
|