@naviprotocol/lending 1.4.0-emode.4 → 1.4.0-emode.5

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/account.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { UserLendingInfo, SuiClientOption, EnvOption, Transaction as NAVITransaction, AssetIdentifier, TransactionResult, CacheOption, AccountCap, MarketOption, LendingPosition } from './types';
1
+ import { UserLendingInfo, SuiClientOption, EnvOption, Transaction as NAVITransaction, AssetIdentifier, TransactionResult, CacheOption, AccountCap, MarketOption, LendingPosition, MarketsOption } from './types';
2
2
  import { Transaction } from '@mysten/sui/transactions';
3
3
  import { CoinStruct } from '@mysten/sui/client';
4
4
  import { PoolOperator } from './pool';
@@ -69,7 +69,7 @@ export declare function getHealthFactorPTB(tx: Transaction, address: string | Ac
69
69
  * @param options - Options for client, environment, and caching
70
70
  * @returns Promise<UserLendingInfo[]> - Array of user lending positions
71
71
  */
72
- export declare const getLendingState: (address: string | AccountCap, options?: Partial<SuiClientOption & EnvOption & CacheOption & MarketOption>) => Promise<UserLendingInfo[]>;
72
+ export declare const getLendingState: (address: string | AccountCap, options?: Partial<SuiClientOption & EnvOption & CacheOption & MarketsOption>) => Promise<UserLendingInfo[]>;
73
73
  /**
74
74
  * Calculates the current health factor for a user
75
75
  *
@@ -125,5 +125,5 @@ export declare const getTransactions: (address: string | AccountCap, options?: {
125
125
  export declare function getCoins(address: string, options?: Partial<{
126
126
  coinType?: string;
127
127
  } & SuiClientOption>): Promise<CoinStruct[]>;
128
- export declare const getLendingPositions: (address: string, options?: Partial<SuiClientOption & EnvOption & CacheOption & MarketOption>) => Promise<LendingPosition[]>;
128
+ export declare const getLendingPositions: (address: string, options?: Partial<SuiClientOption & EnvOption & CacheOption & MarketsOption>) => Promise<LendingPosition[]>;
129
129
  //# sourceMappingURL=account.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"account.d.ts","sourceRoot":"","sources":["../src/account.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"account.d.ts","sourceRoot":"","sources":["../src/account.ts"],"names":[],"mappings":"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"}
package/dist/emode.d.ts CHANGED
@@ -1,8 +1,9 @@
1
- import { CacheOption, EnvOption, EModeCap, AccountCapOption, MarketOption, TransactionResult, SuiClientOption } from './types';
1
+ import { CacheOption, EnvOption, EModeCap, AccountCapOption, MarketOption, TransactionResult, SuiClientOption, EModeIdentity } from './types';
2
2
  import { Transaction } from '@mysten/sui/transactions';
3
3
 
4
4
  export declare function enterEModePTB(tx: Transaction, emodeId: number | TransactionResult, options?: Partial<EnvOption & AccountCapOption & MarketOption>): Promise<Transaction>;
5
5
  export declare function exitEModePTB(tx: Transaction, options?: Partial<EnvOption & AccountCapOption & MarketOption>): Promise<Transaction>;
6
6
  export declare function createEModeCapPTB(tx: Transaction, emodeId: number | TransactionResult, options?: Partial<EnvOption & MarketOption>): Promise<import('@mysten/sui/dist/cjs/transactions').TransactionResult>;
7
7
  export declare const getUserEModeCaps: (address: string, options?: Partial<SuiClientOption & EnvOption & CacheOption>) => Promise<EModeCap[]>;
8
+ export declare function emodeIdentityId(identifier: EModeIdentity): string;
8
9
  //# sourceMappingURL=emode.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"emode.d.ts","sourceRoot":"","sources":["../src/emode.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,SAAS,EACT,QAAQ,EACR,gBAAgB,EAChB,YAAY,EACZ,iBAAiB,EACjB,eAAe,EAChB,MAAM,SAAS,CAAA;AAIhB,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAItD,wBAAsB,aAAa,CACjC,EAAE,EAAE,WAAW,EACf,OAAO,EAAE,MAAM,GAAG,iBAAiB,EACnC,OAAO,CAAC,EAAE,OAAO,CAAC,SAAS,GAAG,gBAAgB,GAAG,YAAY,CAAC,GAC7D,OAAO,CAAC,WAAW,CAAC,CAsBtB;AAED,wBAAsB,YAAY,CAChC,EAAE,EAAE,WAAW,EACf,OAAO,CAAC,EAAE,OAAO,CAAC,SAAS,GAAG,gBAAgB,GAAG,YAAY,CAAC,GAC7D,OAAO,CAAC,WAAW,CAAC,CAiBtB;AAED,wBAAsB,iBAAiB,CACrC,EAAE,EAAE,WAAW,EACf,OAAO,EAAE,MAAM,GAAG,iBAAiB,EACnC,OAAO,CAAC,EAAE,OAAO,CAAC,SAAS,GAAG,YAAY,CAAC,0EAuB5C;AAED,eAAO,MAAM,gBAAgB,YAGd,MAAM,YACL,OAAO,CAAC,eAAe,GAAG,SAAS,GAAG,WAAW,CAAC,KAC3D,OAAO,CAAC,QAAQ,EAAE,CA+BxB,CAAA"}
1
+ {"version":3,"file":"emode.d.ts","sourceRoot":"","sources":["../src/emode.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,SAAS,EACT,QAAQ,EACR,gBAAgB,EAChB,YAAY,EACZ,iBAAiB,EACjB,eAAe,EACf,aAAa,EACd,MAAM,SAAS,CAAA;AAIhB,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAItD,wBAAsB,aAAa,CACjC,EAAE,EAAE,WAAW,EACf,OAAO,EAAE,MAAM,GAAG,iBAAiB,EACnC,OAAO,CAAC,EAAE,OAAO,CAAC,SAAS,GAAG,gBAAgB,GAAG,YAAY,CAAC,GAC7D,OAAO,CAAC,WAAW,CAAC,CAsBtB;AAED,wBAAsB,YAAY,CAChC,EAAE,EAAE,WAAW,EACf,OAAO,CAAC,EAAE,OAAO,CAAC,SAAS,GAAG,gBAAgB,GAAG,YAAY,CAAC,GAC7D,OAAO,CAAC,WAAW,CAAC,CAiBtB;AAED,wBAAsB,iBAAiB,CACrC,EAAE,EAAE,WAAW,EACf,OAAO,EAAE,MAAM,GAAG,iBAAiB,EACnC,OAAO,CAAC,EAAE,OAAO,CAAC,SAAS,GAAG,YAAY,CAAC,0EAuB5C;AAED,eAAO,MAAM,gBAAgB,YAGd,MAAM,YACL,OAAO,CAAC,eAAe,GAAG,SAAS,GAAG,WAAW,CAAC,KAC3D,OAAO,CAAC,QAAQ,EAAE,CA+BxB,CAAA;AAED,wBAAgB,eAAe,CAAC,UAAU,EAAE,aAAa,UAGxD"}
package/dist/index.cjs.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const $=require("@mysten/sui/transactions"),u=require("@mysten/bcs"),L=require("@mysten/sui/client"),pe=require("lodash.camelcase"),de=require("@mysten/sui/utils"),S=require("@pythnetwork/pyth-sui-js"),h=require("bignumber.js"),y=require("@mysten/sui/bcs"),D=u.bcs.bytes(32).transform({input:e=>u.fromHex(e),output:e=>u.toHex(e)}),me=u.bcs.struct("IncentiveAPYInfo",{asset_id:u.bcs.u8(),apy:u.bcs.u256(),coin_types:u.bcs.vector(u.bcs.string())}),W=u.bcs.struct("IncentivePoolInfo",{pool_id:D,funds:D,phase:u.bcs.u64(),start_at:u.bcs.u64(),end_at:u.bcs.u64(),closed_at:u.bcs.u64(),total_supply:u.bcs.u64(),asset_id:u.bcs.u8(),option:u.bcs.u8(),factor:u.bcs.u256(),distributed:u.bcs.u64(),available:u.bcs.u256(),total:u.bcs.u256()}),ge=u.bcs.struct("IncentivePoolInfoByPhase",{phase:u.bcs.u64(),pools:u.bcs.vector(W)}),fe=u.bcs.struct("OracleInfo",{oracle_id:u.bcs.u8(),price:u.bcs.u256(),decimals:u.bcs.u8(),valid:u.bcs.bool()}),be=u.bcs.struct("FlashLoanAssetConfig",{id:u.bcs.string(),asset_id:u.bcs.u8(),coin_type:u.bcs.string(),pool_id:u.bcs.string(),rate_to_supplier:u.bcs.u64(),rate_to_treasury:u.bcs.u64(),max:u.bcs.u64(),min:u.bcs.u64()}),he=u.bcs.struct("ReserveDataInfo",{id:u.bcs.u8(),oracle_id:u.bcs.u8(),coin_type:u.bcs.string(),supply_cap:u.bcs.u256(),borrow_cap:u.bcs.u256(),supply_rate:u.bcs.u256(),borrow_rate:u.bcs.u256(),supply_index:u.bcs.u256(),borrow_index:u.bcs.u256(),total_supply:u.bcs.u256(),total_borrow:u.bcs.u256(),last_update_at:u.bcs.u64(),ltv:u.bcs.u256(),treasury_factor:u.bcs.u256(),treasury_balance:u.bcs.u256(),base_rate:u.bcs.u256(),multiplier:u.bcs.u256(),jump_rate_multiplier:u.bcs.u256(),reserve_factor:u.bcs.u256(),optimal_utilization:u.bcs.u256(),liquidation_ratio:u.bcs.u256(),liquidation_bonus:u.bcs.u256(),liquidation_threshold:u.bcs.u256()}),z=u.bcs.struct("UserStateInfo",{asset_id:u.bcs.u8(),borrow_balance:u.bcs.u256(),supply_balance:u.bcs.u256()}),ye="1.4.0-emode.4",A={version:ye},we=A.version,ve=()=>{if(typeof process<"u"&&process.versions&&process.versions.node)try{const e=require("os"),t=process.version,o=e.type(),n=e.arch();return`Node.js ${t.startsWith("v")?t.substring(1):t}; ${o}/${n}`}catch{return`Node.js ${process.version}; OS/Unknown (Error)`}return"Node/Unknown"},Ce=()=>{let e="";return typeof process<"u"&&process.versions&&process.versions.node&&(e=`lending/${we} (${ve()})`),e},O=Ce(),j=new L.SuiClient({url:L.getFullnodeUrl("mainnet")});function K(e){const t=[];return e.forEach((o,n)=>{const r=n===e.length-1;if(typeof o=="object"&&o!==null&&r){const{client:c,disableCache:s,cacheTime:a,...i}=o;t.push(i)}else t.push(o)}),JSON.stringify(t)}function v(e){const t={};return(...o)=>{const n=K(o);return t[n]||(t[n]=e(...o).finally(()=>{delete t[n]})),t[n]}}function T(e){let t={};return(...o)=>{const n=o[o.length-1],r=K(o),c=t[r];return!n?.disableCache&&typeof c?.data<"u"&&(typeof n?.cacheTime>"u"||n.cacheTime>Date.now()-c.cacheAt)?c.data:e(...o).then(s=>(t[r]={data:s,cacheAt:Date.now()},s))}}function V(e){return Array.isArray(e)?e.map(t=>V(t)):e!=null&&typeof e=="object"?Object.keys(e).reduce((t,o)=>({...t,[pe(o)]:V(e[o])}),{}):e}function d(e,t){return typeof e=="object"?e:t(e)}function Te(e,t){return typeof t=="string"?e.object(t):typeof t=="object"&&t.$kind?t:e.object(t.contract.pool)}function F(e,t,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((n,r)=>(t[r]||t[0]).parse(Uint8Array.from(n[0])))}else if(e.error)return console.log(`Get an error, msg: ${e.error}`),[];return[]}function f(e){return de.normalizeStructTag(e)}function Y(e){const t=(e||0)/Math.pow(10,27);return t>Math.pow(10,5)?1/0:t}new S.SuiPriceServiceConnection("https://hermes.pyth.network",{timeout:2e4});const _e=27,q=(e,t)=>{if(!Number(e)||!Number(t))return new h(0);const o=new h(1).shiftedBy(1*_e),n=o.multipliedBy(new h(.5));return new h(e).multipliedBy(new h(t)).plus(n).dividedBy(o).integerValue(h.ROUND_DOWN)},I=O?{"User-Agent":O}:{};function je(e){return e.reduce((t,o)=>(t[o.id]=o,t),{})}function H(e){return e.reduce((t,o)=>(t[o.emodeId]=o,t),{})}function G(e,t){const o=e.emodes.find(n=>n.emodeId===t.emodeId);if(!o)throw new Error("EMode not found in pool");return{...e,emode:o,isEMode:!0}}function J(e){const[t,o]=e.split("-");return!t||!o?null:{marketKey:t,poolId:parseInt(o)}}var B=(e=>(e[e.Supply=1]="Supply",e[e.Withdraw=2]="Withdraw",e[e.Borrow=3]="Borrow",e[e.Repay=4]="Repay",e))(B||{});const M=T(v(async e=>{const t=E(e?.market||k),o=`https://open-api.naviprotocol.io/api/navi/pools?env=${e?.env||"prod"}&sdk=${A.version}&market=${t?.key||k}`,n=await fetch(o,{headers:I}).then(r=>r.json());return n.data.forEach(r=>{const c=n.meta.emodes.filter(s=>!!s.assets.find(a=>a.assetId===r.id)&&s.isActive);r.emodes=c}),n.data}));async function C(e,t){let o=t?.market;if(typeof e=="string"){const c=J(e);c&&(o=c.marketKey,e=c.poolId)}const n=await M({...t,market:o,cacheTime:g});if(typeof e=="object")return e;const r=n.find(c=>typeof e=="string"?f(c.suiCoinType)===f(e):typeof e=="number"?c.id===e:!1);if(!r)throw new Error("Pool not found");return r.isDeprecated&&console.log(`The lending pool for coinType ${r.suiCoinType} is going to be deprecated.`),r}const ke=T(v(async e=>{const t=`https://open-api.naviprotocol.io/api/navi/stats?sdk=${A.version}`;return(await fetch(t,{headers:I}).then(n=>n.json())).data})),Ae=T(v(async e=>{const t=`https://open-api.naviprotocol.io/api/navi/fee?sdk=${A.version}`;return await fetch(t,{headers:I}).then(n=>n.json())}));async function Q(e,t,o,n){const r=await b({...n,cacheTime:g}),c=await C(t,n);if(c?.deprecatedAt&&Date.now()>c.deprecatedAt)throw new Error(`The lending pool for coinType ${c.suiCoinType} has been deprecated.`);const s=typeof o=="object"&&o.$kind==="GasCoin";if(f(c.suiCoinType)===f("0x2::sui::SUI")&&s){if(!n?.amount)throw new Error("Amount is required for sui coin");o=e.splitCoins(o,[n.amount])}let a;return typeof n?.amount<"u"?a=d(n.amount,e.pure.u64):a=e.moveCall({target:"0x2::coin::value",arguments:[d(o,e.object)],typeArguments:[c.suiCoinType]}),n?.accountCap?e.moveCall({target:`${r.package}::incentive_v3::deposit_with_account_cap`,arguments:[e.object("0x06"),e.object(r.storage),e.object(c.contract.pool),e.pure.u8(c.id),d(o,e.object),e.object(r.incentiveV2),e.object(r.incentiveV3),d(n.accountCap,e.object)],typeArguments:[c.suiCoinType]}):e.moveCall({target:`${r.package}::incentive_v3::entry_deposit`,arguments:[e.object("0x06"),e.object(r.storage),e.object(c.contract.pool),e.pure.u8(c.id),d(o,e.object),a,e.object(r.incentiveV2),e.object(r.incentiveV3)],typeArguments:[c.suiCoinType]}),r.version===2&&c.id===0&&e.moveCall({target:`${r.package}::pool::refresh_stake`,arguments:[e.object(c.contract.pool),e.object("0x05")]}),e}async function Pe(e,t,o,n){const r=await b({...n,cacheTime:g}),c=await C(t,n),s=d(o,e.pure.u64);let a;if(r.version===1)if(n?.accountCap){const[l]=e.moveCall({target:`${r.package}::incentive_v3::withdraw_with_account_cap`,arguments:[e.object("0x06"),e.object(r.priceOracle),e.object(r.storage),e.object(c.contract.pool),e.pure.u8(c.id),s,e.object(r.incentiveV2),e.object(r.incentiveV3),d(n.accountCap,e.object)],typeArguments:[c.suiCoinType]});a=l}else{const[l]=e.moveCall({target:`${r.package}::incentive_v3::withdraw`,arguments:[e.object("0x06"),e.object(r.priceOracle),e.object(r.storage),e.object(c.contract.pool),e.pure.u8(c.id),s,e.object(r.incentiveV2),e.object(r.incentiveV3)],typeArguments:[c.suiCoinType]});a=l}else if(n?.accountCap){const[l]=e.moveCall({target:`${r.package}::incentive_v3::withdraw_with_account_cap_v2`,arguments:[e.object("0x06"),e.object(r.priceOracle),e.object(r.storage),e.object(c.contract.pool),e.pure.u8(c.id),s,e.object(r.incentiveV2),e.object(r.incentiveV3),d(n.accountCap,e.object),e.object("0x05")],typeArguments:[c.suiCoinType]});a=l}else{const[l]=e.moveCall({target:`${r.package}::incentive_v3::withdraw_v2`,arguments:[e.object("0x06"),e.object(r.priceOracle),e.object(r.storage),e.object(c.contract.pool),e.pure.u8(c.id),s,e.object(r.incentiveV2),e.object(r.incentiveV3),e.object("0x05")],typeArguments:[c.suiCoinType]});a=l}return e.moveCall({target:"0x2::coin::from_balance",arguments:[a],typeArguments:[c.suiCoinType]})}async function Ie(e,t,o,n){const r=await b({...n,cacheTime:g}),c=await C(t,n);if(c?.deprecatedAt&&Date.now()>c.deprecatedAt)throw new Error(`The lending pool for coinType ${c.suiCoinType} has been deprecated.`);const s=d(o,e.pure.u64);let a;if(r.version===1)if(n?.accountCap){const[l]=e.moveCall({target:`${r.package}::incentive_v3::borrow_with_account_cap`,arguments:[e.object("0x06"),e.object(r.priceOracle),e.object(r.storage),e.object(c.contract.pool),e.pure.u8(c.id),s,e.object(r.incentiveV2),e.object(r.incentiveV3),d(n.accountCap,e.object)],typeArguments:[c.suiCoinType]});a=l}else{const[l]=e.moveCall({target:`${r.package}::incentive_v3::borrow`,arguments:[e.object("0x06"),e.object(r.priceOracle),e.object(r.storage),e.object(c.contract.pool),e.pure.u8(c.id),s,e.object(r.incentiveV2),e.object(r.incentiveV3)],typeArguments:[c.suiCoinType]});a=l}else if(n?.accountCap){const[l]=e.moveCall({target:`${r.package}::incentive_v3::borrow_with_account_cap_v2`,arguments:[e.object("0x06"),e.object(r.priceOracle),e.object(r.storage),e.object(c.contract.pool),e.pure.u8(c.id),s,e.object(r.incentiveV2),e.object(r.incentiveV3),d(n.accountCap,e.object),e.object("0x05")],typeArguments:[c.suiCoinType]});a=l}else{const[l]=e.moveCall({target:`${r.package}::incentive_v3::borrow_v2`,arguments:[e.object("0x06"),e.object(r.priceOracle),e.object(r.storage),e.object(c.contract.pool),e.pure.u8(c.id),s,e.object(r.incentiveV2),e.object(r.incentiveV3),e.object("0x05")],typeArguments:[c.suiCoinType]});a=l}return e.moveCall({target:"0x2::coin::from_balance",arguments:[e.object(a)],typeArguments:[c.suiCoinType]})}async function Be(e,t,o,n){const r=await b({...n,cacheTime:g}),c=await C(t,n),s=typeof o=="object"&&o.$kind==="GasCoin";if(f(c.suiCoinType)===f("0x2::sui::SUI")&&s){if(!n?.amount)throw new Error("Amount is required for sui coin");o=e.splitCoins(o,[n.amount])}let a;if(typeof n?.amount<"u"?a=d(n.amount,e.pure.u64):a=e.moveCall({target:"0x2::coin::value",arguments:[d(o,e.object)],typeArguments:[c.suiCoinType]}),n?.accountCap){const[i]=e.moveCall({target:`${r.package}::incentive_v3::repay_with_account_cap`,arguments:[e.object("0x06"),e.object(r.priceOracle),e.object(r.storage),e.object(c.contract.pool),e.pure.u8(c.id),d(o,e.object),e.object(r.incentiveV2),e.object(r.incentiveV3),d(n.accountCap,e.object)],typeArguments:[c.suiCoinType]});return e.moveCall({target:"0x2::coin::from_balance",arguments:[i],typeArguments:[c.suiCoinType]})}else return e.moveCall({target:`${r.package}::incentive_v3::entry_repay`,arguments:[e.object("0x06"),e.object(r.priceOracle),e.object(r.storage),e.object(c.contract.pool),e.pure.u8(c.id),d(o,e.object),a,e.object(r.incentiveV2),e.object(r.incentiveV3)],typeArguments:[c.suiCoinType]}),e}const $e=T(v(async e=>{const t=await b({...e});if(e?.address&&typeof e?.asset<"u")try{const r=await C(e.asset,e),c=e?.client??j,s=new $.Transaction;s.moveCall({target:`${t.package}::incentive_v3::get_borrow_fee_v2`,arguments:[s.object(t.incentiveV3),s.pure.address(e.address),s.pure.u8(r.id),s.pure.u64(1e4)],typeArguments:[]});const a=await c.devInspectTransactionBlock({transactionBlock:s,sender:e.address}),i=F(a,[y.bcs.u64()]);return(Number(i[0])||0)/100}catch(r){console.error(r)}const n=(await j.getObject({id:t.incentiveV3,options:{showType:!0,showOwner:!0,showContent:!0}})).data.content.fields.borrow_fee_rate;return Number(n)/100})),k="main",X={main:{id:0,key:"main",name:"Main Market"}};class Z{constructor(t,o){this.pools=[],this.emodes=[],this.config=E(t),this.addPools(o)}addPools(t){const o=je(this.pools),n=H(this.emodes);t.forEach(r=>{if(!this.checkMarket(r.market)){console.warn(`Pool is not in market ${this.config.name}`,r);return}o[r.id]||this.pools.push(r),r.emodes.forEach(s=>{n[s.emodeId]||this.emodes.push(s)})})}getEMode(t){if(!this.checkMarket(t.marketId))return console.warn(`EMode market mismatch ${this.config.id} !== ${t.marketId}`,t),null;const r=H(this.emodes)[t.emodeId];return r||(console.warn(`EMode not found ${t.emodeId} in market ${this.config.name}`,t),null)}getEModePools(t){const o=this.getEMode(t);if(!o)return[];const n=o.assets.map(c=>c.assetId);return this.pools.filter(c=>n.includes(c.id)).map(c=>({...c,emode:o,isEMode:!0}))}checkMarket(t){let o=!1;return typeof t=="number"&&t===this.config.id&&(o=!0),typeof t=="string"&&t===this.config.key&&(o=!0),typeof t=="object"&&t.id===this.config.id&&(o=!0),o}}const E=e=>{const o=Object.values(X).find(n=>typeof e=="number"?n.id===e:typeof e=="string"?n.key===e:n.id===e.id);if(!o)throw new Error("Market not found");return o},x=T(v(async(e,t)=>(await Promise.all(e.map(n=>M({cacheTime:6e4,...t,market:n})))).map(n=>{const r=n[0].market;return new Z(r,n)}))),Me=T(v(async(e,t)=>(await x([e],t))[0])),b=T(v(async e=>{const t=E(e?.market||k),o=`https://open-api.naviprotocol.io/api/navi/config?env=${e?.env||"prod"}&sdk=${A.version}&market=${t.key}`;return(await fetch(o,{headers:I}).then(r=>r.json())).data})),g=1e3*60*5;async function ee(e,t){const o=await b({cacheTime:g,...t});return e.moveCall({target:`${o.package}::lending::create_account`,arguments:[]})}async function te(e,t,o){const n=await b({cacheTime:g,...o});return e.moveCall({target:`${n.package}::lending_core::account_owner`,arguments:[t]})}async function oe(e,t,o){const n=await b({...o,cacheTime:g});return o?.accountCap?e.moveCall({target:`${n.package}::lending::enter_emode_with_account_cap`,arguments:[e.object(n.storage),d(t,e.pure.u64),d(o.accountCap,e.object)]}):e.moveCall({target:`${n.package}::lending::enter_emode`,arguments:[e.object(n.storage),d(t,e.pure.u64)]}),e}async function Ee(e,t){const o=await b({...t,cacheTime:g});return t?.accountCap?e.moveCall({target:`${o.package}::lending::exit_emode_with_account_cap`,arguments:[e.object(o.storage),d(t.accountCap,e.object)]}):e.moveCall({target:`${o.package}::lending::exit_emode`,arguments:[e.object(o.storage)]}),e}async function Fe(e,t,o){const n=await b({cacheTime:g,...o}),r=await ee(e,o);await oe(e,t,{...o,accountCap:r});const c=await E(o?.market||k),s=await te(e,r,o);return e.moveCall({target:`${n.emode.contract.registryPackage}::registry::register_emode_for_account_cap`,arguments:[e.object(n.emode.contract.registryObject),s,d(c.id,e.pure.u64),d(t,e.pure.u64)]}),r}const ne=T(v(async(e,t)=>{const o=await b({cacheTime:g,...t}),n=new $.Transaction,r=t?.client??j;n.moveCall({target:`${o.emode.contract.registryPackage}::registry::find_user_emode_account_caps`,arguments:[n.object(o.emode.contract.registryObject),n.pure.address(e)]});const s=(await r.devInspectTransactionBlock({transactionBlock:n,sender:e})).results[0].returnValues,a=y.bcs.vector(y.bcs.u64()).parse(Uint8Array.from(s[0][0])),i=y.bcs.vector(y.bcs.u64()).parse(Uint8Array.from(s[1][0])),l=y.bcs.vector(y.bcs.Address).parse(Uint8Array.from(s[2][0]));return a.map((m,p)=>({marketId:Number(m),emodeId:Number(i[p]),accountCap:l[p].toString()}))}));function Ve(e,t,o){const n=typeof o?.balance=="number",r=n?o.balance:0;let c=0;const s=[];let a="";if(t.sort((i,l)=>Number(l.balance)-Number(i.balance)).forEach(i=>{if(!(n&&c>=r)&&Number(i.balance)!==0){if(a||(a=i.coinType),a!==i.coinType)throw new Error("All coins must be of the same type");c+=Number(i.balance),s.push(i.coinObjectId)}}),s.length===0)throw new Error("No coins to merge");if(n&&c<r)throw new Error(`Balance is less than the specified balance: ${c} < ${r}`);return f(a)===f("0x2::sui::SUI")&&o?.useGasCoin?n?e.splitCoins(e.gas,[e.pure.u64(r)]):e.gas:(s.length===1?e.object(s[0]):e.mergeCoins(s[0],s.slice(1)),n?e.splitCoins(s[0],[e.pure.u64(r)]):s[0])}async function N(e,t,o,n,r,c,s){const a=await b({...s,cacheTime:g}),i=await C(o,s);return e.moveCall({target:`${a.uiGetter}::calculator_unchecked::dynamic_health_factor`,arguments:[e.object("0x06"),e.object(a.storage),e.object(a.oracle.priceOracle),Te(e,i),d(t,e.pure.address),d(i.id,e.pure.u8),d(n,e.pure.u64),d(r,e.pure.u64),d(c,e.pure.bool)],typeArguments:[i.suiCoinType]})}async function re(e,t,o){return N(e,t,0,0,0,!1,o)}const U=T(async(e,t)=>{const o=await b({...t,cacheTime:g}),n=new $.Transaction,r=t?.client??j,c=await M(t);n.moveCall({target:`${o.uiGetter}::getter_unchecked::get_user_state`,arguments:[n.object(o.storage),n.pure.address(e)]});const s=await r.devInspectTransactionBlock({transactionBlock:n,sender:e}),a=F(s,[y.bcs.vector(z)]);return V(a[0].filter(l=>l.supply_balance!=="0"||l.borrow_balance!=="0")).map(l=>{const m=c.find(_=>_.id===l.assetId),p=q(l.supplyBalance,m.currentSupplyIndex).toString(),w=q(l.borrowBalance,m.currentBorrowIndex).toString();return{...l,supplyBalance:p,borrowBalance:w,pool:m}}).filter(l=>!!l.pool)});async function Re(e,t){const o=t?.client??j,n=new $.Transaction;await re(n,e,t);const r=await o.devInspectTransactionBlock({transactionBlock:n,sender:e}),c=F(r,[y.bcs.u256()]);return Y(Number(c[0])||0)}async function De(e,t,o,n){const r=n?.client??j,c=new $.Transaction;let s=0,a=0;const i=await C(t,n);if(o.forEach(w=>{w.type===B.Supply?s+=w.amount:w.type===B.Withdraw?s-=w.amount:w.type===B.Borrow?a+=w.amount:w.type===B.Repay&&(a-=w.amount)}),s*a<0)throw new Error("Invalid operations");const l=s>0||a>0;await N(c,e,i,Math.abs(s),Math.abs(a),l,n);const m=await r.devInspectTransactionBlock({transactionBlock:c,sender:e}),p=F(m,[y.bcs.u256()]);return Y(Number(p[0])||0)}const Ue=v(async(e,t)=>{const o=new URLSearchParams;t?.cursor&&o.set("cursor",t.cursor),o.set("userAddress",e);const n=`https://open-api.naviprotocol.io/api/navi/user/transactions?${o.toString()}&sdk=${A.version}`;return(await fetch(n,{headers:I}).then(c=>c.json())).data});async function Se(e,t){let o=null;const n=[],r=t?.client??j;do{let c;if(t?.coinType?c=await r.getCoins({owner:e,coinType:t?.coinType,cursor:o,limit:100}):c=await r.getAllCoins({owner:e,cursor:o,limit:100}),!c.data||!c.data.length)break;n.push(...c.data),o=c.nextCursor}while(o);return n}const Ne=T(async(e,t)=>{const o=[],[n,r]=await Promise.all([U(e,t),ne(e,t)]),c=E(t?.market||k);return n.forEach(a=>{if(h(a.supplyBalance).gt(0)){const i=h(a.supplyBalance).shiftedBy(-9).decimalPlaces(a.pool.token.decimals,h.ROUND_DOWN);o.push({id:a.pool.uniqueId,wallet:e,protocol:"navi",type:"navi-lending-supply",market:c.key,"navi-lending-supply":{amount:i.toString(),pool:a.pool,token:a.pool.token,valueUSD:i.multipliedBy(a.pool.oracle.price).toString()}})}if(h(a.borrowBalance).gt(0)){const i=h(a.borrowBalance).shiftedBy(-9).decimalPlaces(a.pool.token.decimals,h.ROUND_DOWN);o.push({id:a.pool.uniqueId,wallet:e,protocol:"navi",market:c.key,type:"navi-lending-borrow","navi-lending-borrow":{amount:i.toString(),pool:a.pool,token:a.pool.token,valueUSD:i.multipliedBy(a.pool.oracle.price).toString()}})}}),(await Promise.all(r.map(async a=>U(a.accountCap,t)))).forEach((a,i)=>{const l=r[i];a.forEach(m=>{if(h(m.supplyBalance).gt(0)){const p=h(m.supplyBalance).shiftedBy(-9).decimalPlaces(m.pool.token.decimals,h.ROUND_DOWN);o.push({id:m.pool.uniqueId,wallet:e,protocol:"navi",market:c.key,type:"navi-lending-emode-supply","navi-lending-emode-supply":{amount:p.toString(),pool:G(m.pool,l),token:m.pool.token,valueUSD:p.multipliedBy(m.pool.oracle.price).toString()}})}if(h(m.borrowBalance).gt(0)){const p=h(m.borrowBalance).shiftedBy(-9).decimalPlaces(m.pool.token.decimals,h.ROUND_DOWN);o.push({id:m.pool.uniqueId,wallet:e,protocol:"navi",market:c.key,type:"navi-lending-emode-borrow","navi-lending-emode-borrow":{amount:p.toString(),pool:G(m.pool,l),token:m.pool.token,valueUSD:p.multipliedBy(m.pool.oracle.price).toString()}})}})}),o}),ce=new S.SuiPriceServiceConnection("https://hermes.pyth.network",{timeout:1e4});async function ae(e){try{const t=[],o=await ce.getLatestPriceFeeds(e);if(!o)return t;const n=Math.floor(new Date().valueOf()/1e3);for(const r of o){const c=r.getPriceUnchecked();if(c.publishTime>n){console.warn(`pyth price feed is invalid, id: ${r.id}, publish time: ${c.publishTime}, current timestamp: ${n}`);continue}n-r.getPriceUnchecked().publishTime>30&&(console.info(`stale price feed, id: ${r.id}, publish time: ${c.publishTime}, current timestamp: ${n}`),t.push(r.id))}return t}catch(t){throw new Error(`failed to get pyth stale price feed id, msg: ${t.message}`)}}async function se(e,t,o){const n=o?.client??j,r=await b({...o,cacheTime:g});try{const c=await ce.getPriceFeedsUpdateData(t);return await new S.SuiPythClient(n,r.oracle.pythStateId,r.oracle.wormholeStateId).updatePriceFeeds(e,c,t)}catch(c){throw new Error(`failed to update pyth price feeds, msg: ${c.message}`)}}async function Le(e,t,o){const n=await b({...o,cacheTime:g});if(o?.updatePythPriceFeeds){const r=t.filter(c=>!!c.pythPriceFeedId).map(c=>c.pythPriceFeedId);try{const c=await ae(r);c.length>0&&await se(e,c,o)}catch{}}for(const r of t)e.moveCall({target:`${n.oracle.packageId}::oracle_pro::update_single_price`,arguments:[e.object("0x6"),e.object(n.oracle.oracleConfig),e.object(n.oracle.priceOracle),e.object(n.oracle.supraOracleHolder),e.object(r.pythPriceInfoObject),e.pure.address(r.feedId)]});return e}async function ie(e){return(await b({...e,cacheTime:g})).oracle.feeds}function Oe(e,t){return e.filter(o=>!!(t?.lendingState&&t.lendingState.find(r=>r.assetId===o.assetId)||t?.pools&&t.pools.find(r=>r.id===o.assetId)))}const R=T(v(async e=>{const t=`https://open-api.naviprotocol.io/api/navi/flashloan?env=${e?.env||"prod"}&sdk=${A.version}&market=${e?.market||k}`,o=await fetch(t,{headers:I}).then(n=>n.json());return Object.keys(o.data).map(n=>({...o.data[n],coinType:n}))}));async function qe(e,t){return(await R(t)).find(n=>typeof e=="string"?f(n.coinType)===f(e):typeof e=="number"?n.assetId===e:n.assetId===e.id)||null}async function He(e,t,o,n){const r=await b({...n,cacheTime:g}),c=await C(t,n);if(!(await R({...n,cacheTime:g})).some(i=>f(i.coinType)===f(c.suiCoinType)))throw new Error("Pool does not support flashloan");if(r.version===1){const[i,l]=e.moveCall({target:`${r.package}::lending::flash_loan_with_ctx`,arguments:[e.object(r.flashloanConfig),e.object(c.contract.pool),d(o,e.pure.u64)],typeArguments:[c.suiCoinType]});return[i,l]}else{const[i,l]=e.moveCall({target:`${r.package}::lending::flash_loan_with_ctx_v2`,arguments:[e.object(r.flashloanConfig),e.object(c.contract.pool),d(o,e.pure.u64),e.object("0x05")],typeArguments:[c.suiCoinType]});return[i,l]}}async function Ge(e,t,o,n,r){const c=await b({...r,cacheTime:g}),s=await C(t,r);if(!(await R({...r,cacheTime:g})).some(m=>f(m.coinType)===f(s.suiCoinType)))throw new Error("Pool does not support flashloan");const[l]=e.moveCall({target:`${c.package}::lending::flash_repay_with_ctx`,arguments:[e.object("0x06"),e.object(c.storage),e.object(s.contract.pool),d(o,e.object),d(n,e.object)],typeArguments:[s.suiCoinType]});return[l]}async function We(e,t,o,n,r,c){const s={...c,cacheTime:g},a=await b(s),i=await C(t,s),l=await C(n,s);if(a.version===1){const[m,p]=e.moveCall({target:`${a.package}::incentive_v3::liquidation`,arguments:[e.object("0x06"),e.object(a.priceOracle),e.object(a.storage),e.pure.u8(i.id),e.object(i.contract.pool),d(o,e.object),e.pure.u8(l.id),e.object(l.contract.pool),d(r,e.pure.address),e.object(a.incentiveV2),e.object(a.incentiveV3)],typeArguments:[i.suiCoinType,l.suiCoinType]});return[m,p]}else{const[m,p]=e.moveCall({target:`${a.package}::incentive_v3::liquidation_v2`,arguments:[e.object("0x06"),e.object(a.priceOracle),e.object(a.storage),e.pure.u8(i.id),e.object(i.contract.pool),d(o,e.object),e.pure.u8(l.id),e.object(l.contract.pool),d(r,e.pure.address),e.object(a.incentiveV2),e.object(a.incentiveV3),e.object("0x05")],typeArguments:[i.suiCoinType,l.suiCoinType]});return[m,p]}}async function ze(e,t){const o=await ie(t),n=await M({...t,cacheTime:g}),r=t?.client??j,c=await b({...t,cacheTime:g}),s=new $.Transaction;s.moveCall({target:`${c.uiGetter}::incentive_v3_getter::get_user_atomic_claimable_rewards`,arguments:[s.object("0x06"),s.object(c.storage),s.object(c.incentiveV3),s.pure.address(e)]});const a=await r.devInspectTransactionBlock({transactionBlock:s,sender:e}),i=F(a,[y.bcs.vector(y.bcs.string()),y.bcs.vector(y.bcs.string()),y.bcs.vector(y.bcs.u8()),y.bcs.vector(y.bcs.Address),y.bcs.vector(y.bcs.u256())]),l=[];if(i.length===5&&Array.isArray(i[0])){const m=i[0].length;for(let p=0;p<m;p++){const w=o.find(P=>f(P.coinType)===f(i[1][p])),_=n.find(P=>f(P.coinType)===f(i[0][p]));!w||!_||l.push({assetId:_.id,assetCoinType:f(i[0][p]),rewardCoinType:f(i[1][p]),option:Number(i[2][p]),userClaimableReward:Number(i[4][p])/Math.pow(10,w.priceDecimal),ruleIds:Array.isArray(i[3][p])?i[3][p]:[i[3][p]]})}}return l}function Ke(e){const t=new Map;e.forEach(n=>{const r=n.assetId,c=n.option,s=`${r}-${c}-${n.rewardCoinType}`;t.has(s)?t.get(s).total+=n.userClaimableReward:t.set(s,{assetId:r,rewardType:c,coinType:n.rewardCoinType,total:Number(n.userClaimableReward)})});const o=new Map;for(const{assetId:n,rewardType:r,coinType:c,total:s}of t.values()){const a=`${n}-${r}`;o.has(a)||o.set(a,{assetId:n,rewardType:r,rewards:new Map});const i=o.get(a);i.rewards.set(c,(i.rewards.get(c)||0)+s)}return Array.from(o.values()).map(n=>({assetId:n.assetId,rewardType:n.rewardType,rewards:Array.from(n.rewards.entries()).map(([r,c])=>({coinType:r,available:c.toFixed(6)}))}))}const Ye=v(async(e,t)=>{const o=`https://open-api.naviprotocol.io/api/navi/user/total_claimed_reward?userAddress=${e}&sdk=${A.version}&market=${t?.market||k}`;return(await fetch(o,{headers:I}).then(r=>r.json())).data}),Je=v(async(e,t)=>{const o=`https://open-api.naviprotocol.io/api/navi/user/rewards?userAddress=${e}&page=${t?.page||1}&pageSize=${t?.size||400}&sdk=${A.version}&market=${t?.market||k}`,n=await fetch(o,{headers:I}).then(r=>r.json());return V({data:n.data.rewards})});async function Qe(e,t,o){const n=await b({...o,cacheTime:g}),r=await M({...o,cacheTime:g}),c=new Map;for(const a of t){const{rewardCoinType:i,ruleIds:l}=a;for(const m of l){c.has(i)||c.set(i,{assetIds:[],ruleIds:[],amount:0});const p=c.get(i);p.assetIds.push(a.assetCoinType.replace("0x","")),p.ruleIds.push(m),p.amount+=a.userClaimableReward}}const s=[];for(const[a,{assetIds:i,ruleIds:l,amount:m}]of c){const p=r.find(_=>f(_.suiCoinType)===f(a));if(!p||!p.contract.rewardFundId)throw new Error(`No matching rewardFund found for reward coin: ${a}`);const w=p.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:`${n.package}::incentive_v3::claim_reward_with_account_cap`,arguments:[e.object("0x06"),e.object(n.incentiveV3),e.object(n.storage),e.object(w),e.pure.vector("string",i),e.pure.vector("address",l),d(o.accountCap,e.object)],typeArguments:[a]}):_=e.moveCall({target:`${n.package}::incentive_v3::claim_reward`,arguments:[e.object("0x06"),e.object(n.incentiveV3),e.object(n.storage),e.object(w),e.pure.vector("string",i),e.pure.vector("address",l)],typeArguments:[a]});const[P]=e.moveCall({target:"0x2::coin::from_balance",arguments:[_],typeArguments:[a]});if(o?.customCoinReceive.type==="transfer"){if(!o.customCoinReceive.transfer)throw new Error("customCoinReceive.transfer is required");e.transferObjects([P],d(o.customCoinReceive.transfer,e.pure.address))}if(o?.customCoinReceive.type==="depositNAVI"){const ue=h(p.totalSupplyAmount).shiftedBy(-9),le=h(p.supplyCapCeiling).shiftedBy(-27);ue.plus(m).isGreaterThan(le)&&o?.customCoinReceive.depositNAVI?.fallbackReceiveAddress?e.transferObjects([P],e.pure.address(o.customCoinReceive.depositNAVI.fallbackReceiveAddress)):await Q(e,p,P,o)}else s.push({coin:P,identifier:p})}else e.moveCall({target:`${n.package}::incentive_v3::claim_reward_entry`,arguments:[e.object("0x06"),e.object(n.incentiveV3),e.object(n.storage),e.object(w),e.pure.vector("string",i),e.pure.vector("address",l)],typeArguments:[a]})}return s}exports.Address=D;exports.DEFAULT_CACHE_TIME=g;exports.DEFAULT_MARKET_IDENTITY=k;exports.FlashLoanAssetConfig=be;exports.IncentiveAPYInfo=me;exports.IncentivePoolInfo=W;exports.IncentivePoolInfoByPhase=ge;exports.MARKETS=X;exports.Market=Z;exports.OracleInfo=fe;exports.PoolOperator=B;exports.ReserveDataInfo=he;exports.UserStateInfo=z;exports.borrowCoinPTB=Ie;exports.claimLendingRewardsPTB=Qe;exports.createAccountCapPTB=ee;exports.createEModeCapPTB=Fe;exports.depositCoinPTB=Q;exports.enterEModePTB=oe;exports.exitEModePTB=Ee;exports.filterPriceFeeds=Oe;exports.flashloanPTB=He;exports.getAccountCapOwnerPTB=te;exports.getAllFlashLoanAssets=R;exports.getBorrowFee=$e;exports.getCoins=Se;exports.getConfig=b;exports.getFees=Ae;exports.getFlashLoanAsset=qe;exports.getHealthFactor=Re;exports.getHealthFactorPTB=re;exports.getLendingPositions=Ne;exports.getLendingState=U;exports.getMarket=Me;exports.getMarketConfig=E;exports.getMarkets=x;exports.getPool=C;exports.getPools=M;exports.getPriceFeeds=ie;exports.getPythStalePriceFeedId=ae;exports.getSimulatedHealthFactor=De;exports.getSimulatedHealthFactorPTB=N;exports.getStats=ke;exports.getTransactions=Ue;exports.getUserAvailableLendingRewards=ze;exports.getUserClaimedRewardHistory=Je;exports.getUserEModeCaps=ne;exports.getUserTotalClaimedReward=Ye;exports.liquidatePTB=We;exports.mergeCoinsPTB=Ve;exports.normalizeCoinType=f;exports.parsePoolUID=J;exports.parseTxValue=d;exports.repayCoinPTB=Be;exports.repayFlashLoanPTB=Ge;exports.summaryLendingRewards=Ke;exports.updateOraclePricesPTB=Le;exports.updatePythPriceFeeds=se;exports.withCache=T;exports.withSingleton=v;exports.withdrawCoinPTB=Pe;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const M=require("@mysten/sui/transactions"),u=require("@mysten/bcs"),H=require("@mysten/sui/client"),me=require("lodash.camelcase"),ge=require("@mysten/sui/utils"),O=require("@pythnetwork/pyth-sui-js"),h=require("bignumber.js"),y=require("@mysten/sui/bcs"),N=u.bcs.bytes(32).transform({input:e=>u.fromHex(e),output:e=>u.toHex(e)}),fe=u.bcs.struct("IncentiveAPYInfo",{asset_id:u.bcs.u8(),apy:u.bcs.u256(),coin_types:u.bcs.vector(u.bcs.string())}),Y=u.bcs.struct("IncentivePoolInfo",{pool_id:N,funds:N,phase:u.bcs.u64(),start_at:u.bcs.u64(),end_at:u.bcs.u64(),closed_at:u.bcs.u64(),total_supply:u.bcs.u64(),asset_id:u.bcs.u8(),option:u.bcs.u8(),factor:u.bcs.u256(),distributed:u.bcs.u64(),available:u.bcs.u256(),total:u.bcs.u256()}),be=u.bcs.struct("IncentivePoolInfoByPhase",{phase:u.bcs.u64(),pools:u.bcs.vector(Y)}),he=u.bcs.struct("OracleInfo",{oracle_id:u.bcs.u8(),price:u.bcs.u256(),decimals:u.bcs.u8(),valid:u.bcs.bool()}),ye=u.bcs.struct("FlashLoanAssetConfig",{id:u.bcs.string(),asset_id:u.bcs.u8(),coin_type:u.bcs.string(),pool_id:u.bcs.string(),rate_to_supplier:u.bcs.u64(),rate_to_treasury:u.bcs.u64(),max:u.bcs.u64(),min:u.bcs.u64()}),we=u.bcs.struct("ReserveDataInfo",{id:u.bcs.u8(),oracle_id:u.bcs.u8(),coin_type:u.bcs.string(),supply_cap:u.bcs.u256(),borrow_cap:u.bcs.u256(),supply_rate:u.bcs.u256(),borrow_rate:u.bcs.u256(),supply_index:u.bcs.u256(),borrow_index:u.bcs.u256(),total_supply:u.bcs.u256(),total_borrow:u.bcs.u256(),last_update_at:u.bcs.u64(),ltv:u.bcs.u256(),treasury_factor:u.bcs.u256(),treasury_balance:u.bcs.u256(),base_rate:u.bcs.u256(),multiplier:u.bcs.u256(),jump_rate_multiplier:u.bcs.u256(),reserve_factor:u.bcs.u256(),optimal_utilization:u.bcs.u256(),liquidation_ratio:u.bcs.u256(),liquidation_bonus:u.bcs.u256(),liquidation_threshold:u.bcs.u256()}),J=u.bcs.struct("UserStateInfo",{asset_id:u.bcs.u8(),borrow_balance:u.bcs.u256(),supply_balance:u.bcs.u256()}),ve="1.4.0-emode.5",I={version:ve},Ce=I.version,Te=()=>{if(typeof process<"u"&&process.versions&&process.versions.node)try{const e=require("os"),t=process.version,o=e.type(),n=e.arch();return`Node.js ${t.startsWith("v")?t.substring(1):t}; ${o}/${n}`}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/${Ce} (${Te()})`),e},G=_e(),k=new H.SuiClient({url:H.getFullnodeUrl("mainnet")});function Q(e){const t=[];return e.forEach((o,n)=>{const r=n===e.length-1;if(typeof o=="object"&&o!==null&&r){const{client:a,disableCache:c,cacheTime:s,...i}=o;t.push(i)}else t.push(o)}),JSON.stringify(t)}function T(e){const t={};return(...o)=>{const n=Q(o);return t[n]||(t[n]=e(...o).finally(()=>{delete t[n]})),t[n]}}function j(e){let t={};return(...o)=>{const n=o[o.length-1],r=Q(o),a=t[r];return!n?.disableCache&&typeof a?.data<"u"&&(typeof n?.cacheTime>"u"||n.cacheTime>Date.now()-a.cacheAt)?a.data:e(...o).then(c=>(t[r]={data:c,cacheAt:Date.now()},c))}}function S(e){return Array.isArray(e)?e.map(t=>S(t)):e!=null&&typeof e=="object"?Object.keys(e).reduce((t,o)=>({...t,[me(o)]:S(e[o])}),{}):e}function d(e,t){return typeof e=="object"?e:t(e)}function je(e,t){return typeof t=="string"?e.object(t):typeof t=="object"&&t.$kind?t:e.object(t.contract.pool)}function F(e,t,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((n,r)=>(t[r]||t[0]).parse(Uint8Array.from(n[0])))}else if(e.error)return console.log(`Get an error, msg: ${e.error}`),[];return[]}function f(e){return ge.normalizeStructTag(e)}function X(e){const t=(e||0)/Math.pow(10,27);return t>Math.pow(10,5)?1/0:t}new O.SuiPriceServiceConnection("https://hermes.pyth.network",{timeout:2e4});const ke=27,W=(e,t)=>{if(!Number(e)||!Number(t))return new h(0);const o=new h(1).shiftedBy(1*ke),n=o.multipliedBy(new h(.5));return new h(e).multipliedBy(new h(t)).plus(n).dividedBy(o).integerValue(h.ROUND_DOWN)},P=G?{"User-Agent":G}:{};function Z(e){return e.reduce((t,o)=>(t[o.uniqueId]=o,t),{})}function z(e){return e.reduce((t,o)=>(t[o.uniqueId]=o,t),{})}function K(e,t){const o=e.emodes.find(n=>n.emodeId===t.emodeId);if(!o)throw new Error("EMode not found in pool");return{...e,emode:o,isEMode:!0}}function x(e){const[t,o]=e.split("-");return!t||!o?null:{marketKey:t,poolId:parseInt(o)}}var B=(e=>(e[e.Supply=1]="Supply",e[e.Withdraw=2]="Withdraw",e[e.Borrow=3]="Borrow",e[e.Repay=4]="Repay",e))(B||{});const E=j(T(async e=>{const t=(e?.markets||Object.keys(V)).map(r=>A(r)),o=`https://open-api.naviprotocol.io/api/navi/pools?env=${e?.env||"prod"}&sdk=${I.version}&market=${t.map(r=>r.key)}`,n=await fetch(o,{headers:P}).then(r=>r.json());return n.data.forEach(r=>{const c=n.meta.emodes.filter(s=>{const i=A(s.marketId);return r.market===i.key&&s.isActive}).filter(s=>!!s.assets.find(i=>i.assetId===r.id));r.emodes=c}),n.data}));async function _(e,t){let o=t?.market;if(typeof e=="string"){const a=x(e);a&&(o=a.marketKey,e=a.poolId)}const n=await E({...t,markets:[o||$],cacheTime:g});if(typeof e=="object")return e;const r=n.find(a=>typeof e=="string"?f(a.suiCoinType)===f(e):typeof e=="number"?a.id===e:!1);if(!r)throw new Error("Pool not found");return r.isDeprecated&&console.log(`The lending pool for coinType ${r.suiCoinType} is going to be deprecated.`),r}const Ae=j(T(async e=>{const t=`https://open-api.naviprotocol.io/api/navi/stats?sdk=${I.version}`;return(await fetch(t,{headers:P}).then(n=>n.json())).data})),Ie=j(T(async e=>{const t=`https://open-api.naviprotocol.io/api/navi/fee?sdk=${I.version}`;return await fetch(t,{headers:P}).then(n=>n.json())}));async function ee(e,t,o,n){const r=await b({...n,cacheTime:g}),a=await _(t,n);if(a?.deprecatedAt&&Date.now()>a.deprecatedAt)throw new Error(`The lending pool for coinType ${a.suiCoinType} has been deprecated.`);const c=typeof o=="object"&&o.$kind==="GasCoin";if(f(a.suiCoinType)===f("0x2::sui::SUI")&&c){if(!n?.amount)throw new Error("Amount is required for sui coin");o=e.splitCoins(o,[n.amount])}let s;return typeof n?.amount<"u"?s=d(n.amount,e.pure.u64):s=e.moveCall({target:"0x2::coin::value",arguments:[d(o,e.object)],typeArguments:[a.suiCoinType]}),n?.accountCap?e.moveCall({target:`${r.package}::incentive_v3::deposit_with_account_cap`,arguments:[e.object("0x06"),e.object(r.storage),e.object(a.contract.pool),e.pure.u8(a.id),d(o,e.object),e.object(r.incentiveV2),e.object(r.incentiveV3),d(n.accountCap,e.object)],typeArguments:[a.suiCoinType]}):e.moveCall({target:`${r.package}::incentive_v3::entry_deposit`,arguments:[e.object("0x06"),e.object(r.storage),e.object(a.contract.pool),e.pure.u8(a.id),d(o,e.object),s,e.object(r.incentiveV2),e.object(r.incentiveV3)],typeArguments:[a.suiCoinType]}),r.version===2&&a.id===0&&e.moveCall({target:`${r.package}::pool::refresh_stake`,arguments:[e.object(a.contract.pool),e.object("0x05")]}),e}async function Pe(e,t,o,n){const r=await b({...n,cacheTime:g}),a=await _(t,n),c=d(o,e.pure.u64);let s;if(r.version===1)if(n?.accountCap){const[l]=e.moveCall({target:`${r.package}::incentive_v3::withdraw_with_account_cap`,arguments:[e.object("0x06"),e.object(r.priceOracle),e.object(r.storage),e.object(a.contract.pool),e.pure.u8(a.id),c,e.object(r.incentiveV2),e.object(r.incentiveV3),d(n.accountCap,e.object)],typeArguments:[a.suiCoinType]});s=l}else{const[l]=e.moveCall({target:`${r.package}::incentive_v3::withdraw`,arguments:[e.object("0x06"),e.object(r.priceOracle),e.object(r.storage),e.object(a.contract.pool),e.pure.u8(a.id),c,e.object(r.incentiveV2),e.object(r.incentiveV3)],typeArguments:[a.suiCoinType]});s=l}else if(n?.accountCap){const[l]=e.moveCall({target:`${r.package}::incentive_v3::withdraw_with_account_cap_v2`,arguments:[e.object("0x06"),e.object(r.priceOracle),e.object(r.storage),e.object(a.contract.pool),e.pure.u8(a.id),c,e.object(r.incentiveV2),e.object(r.incentiveV3),d(n.accountCap,e.object),e.object("0x05")],typeArguments:[a.suiCoinType]});s=l}else{const[l]=e.moveCall({target:`${r.package}::incentive_v3::withdraw_v2`,arguments:[e.object("0x06"),e.object(r.priceOracle),e.object(r.storage),e.object(a.contract.pool),e.pure.u8(a.id),c,e.object(r.incentiveV2),e.object(r.incentiveV3),e.object("0x05")],typeArguments:[a.suiCoinType]});s=l}return e.moveCall({target:"0x2::coin::from_balance",arguments:[s],typeArguments:[a.suiCoinType]})}async function $e(e,t,o,n){const r=await b({...n,cacheTime:g}),a=await _(t,n);if(a?.deprecatedAt&&Date.now()>a.deprecatedAt)throw new Error(`The lending pool for coinType ${a.suiCoinType} has been deprecated.`);const c=d(o,e.pure.u64);let s;if(r.version===1)if(n?.accountCap){const[l]=e.moveCall({target:`${r.package}::incentive_v3::borrow_with_account_cap`,arguments:[e.object("0x06"),e.object(r.priceOracle),e.object(r.storage),e.object(a.contract.pool),e.pure.u8(a.id),c,e.object(r.incentiveV2),e.object(r.incentiveV3),d(n.accountCap,e.object)],typeArguments:[a.suiCoinType]});s=l}else{const[l]=e.moveCall({target:`${r.package}::incentive_v3::borrow`,arguments:[e.object("0x06"),e.object(r.priceOracle),e.object(r.storage),e.object(a.contract.pool),e.pure.u8(a.id),c,e.object(r.incentiveV2),e.object(r.incentiveV3)],typeArguments:[a.suiCoinType]});s=l}else if(n?.accountCap){const[l]=e.moveCall({target:`${r.package}::incentive_v3::borrow_with_account_cap_v2`,arguments:[e.object("0x06"),e.object(r.priceOracle),e.object(r.storage),e.object(a.contract.pool),e.pure.u8(a.id),c,e.object(r.incentiveV2),e.object(r.incentiveV3),d(n.accountCap,e.object),e.object("0x05")],typeArguments:[a.suiCoinType]});s=l}else{const[l]=e.moveCall({target:`${r.package}::incentive_v3::borrow_v2`,arguments:[e.object("0x06"),e.object(r.priceOracle),e.object(r.storage),e.object(a.contract.pool),e.pure.u8(a.id),c,e.object(r.incentiveV2),e.object(r.incentiveV3),e.object("0x05")],typeArguments:[a.suiCoinType]});s=l}return e.moveCall({target:"0x2::coin::from_balance",arguments:[e.object(s)],typeArguments:[a.suiCoinType]})}async function Be(e,t,o,n){const r=await b({...n,cacheTime:g}),a=await _(t,n),c=typeof o=="object"&&o.$kind==="GasCoin";if(f(a.suiCoinType)===f("0x2::sui::SUI")&&c){if(!n?.amount)throw new Error("Amount is required for sui coin");o=e.splitCoins(o,[n.amount])}let s;if(typeof n?.amount<"u"?s=d(n.amount,e.pure.u64):s=e.moveCall({target:"0x2::coin::value",arguments:[d(o,e.object)],typeArguments:[a.suiCoinType]}),n?.accountCap){const[i]=e.moveCall({target:`${r.package}::incentive_v3::repay_with_account_cap`,arguments:[e.object("0x06"),e.object(r.priceOracle),e.object(r.storage),e.object(a.contract.pool),e.pure.u8(a.id),d(o,e.object),e.object(r.incentiveV2),e.object(r.incentiveV3),d(n.accountCap,e.object)],typeArguments:[a.suiCoinType]});return e.moveCall({target:"0x2::coin::from_balance",arguments:[i],typeArguments:[a.suiCoinType]})}else return e.moveCall({target:`${r.package}::incentive_v3::entry_repay`,arguments:[e.object("0x06"),e.object(r.priceOracle),e.object(r.storage),e.object(a.contract.pool),e.pure.u8(a.id),d(o,e.object),s,e.object(r.incentiveV2),e.object(r.incentiveV3)],typeArguments:[a.suiCoinType]}),e}const Me=j(T(async e=>{const t=await b({...e});if(e?.address&&typeof e?.asset<"u")try{const r=await _(e.asset,e),a=e?.client??k,c=new M.Transaction;c.moveCall({target:`${t.package}::incentive_v3::get_borrow_fee_v2`,arguments:[c.object(t.incentiveV3),c.pure.address(e.address),c.pure.u8(r.id),c.pure.u64(1e4)],typeArguments:[]});const s=await a.devInspectTransactionBlock({transactionBlock:c,sender:e.address}),i=F(s,[y.bcs.u64()]);return(Number(i[0])||0)/100}catch(r){console.error(r)}const n=(await k.getObject({id:t.incentiveV3,options:{showType:!0,showOwner:!0,showContent:!0}})).data.content.fields.borrow_fee_rate;return Number(n)/100}));async function te(e,t){const o=await b({cacheTime:g,...t});return e.moveCall({target:`${o.package}::lending::create_account`,arguments:[]})}async function oe(e,t,o){const n=await b({cacheTime:g,...o});return e.moveCall({target:`${n.package}::lending_core::account_owner`,arguments:[t]})}async function re(e,t,o){const n=await b({...o,cacheTime:g});return o?.accountCap?e.moveCall({target:`${n.package}::lending::enter_emode_with_account_cap`,arguments:[e.object(n.storage),d(t,e.pure.u64),d(o.accountCap,e.object)]}):e.moveCall({target:`${n.package}::lending::enter_emode`,arguments:[e.object(n.storage),d(t,e.pure.u64)]}),e}async function Ee(e,t){const o=await b({...t,cacheTime:g});return t?.accountCap?e.moveCall({target:`${o.package}::lending::exit_emode_with_account_cap`,arguments:[e.object(o.storage),d(t.accountCap,e.object)]}):e.moveCall({target:`${o.package}::lending::exit_emode`,arguments:[e.object(o.storage)]}),e}async function Fe(e,t,o){const n=await b({cacheTime:g,...o}),r=await te(e,o);await re(e,t,{...o,accountCap:r});const a=await A(o?.market||$),c=await oe(e,r,o);return e.moveCall({target:`${n.emode.contract.registryPackage}::registry::register_emode_for_account_cap`,arguments:[e.object(n.emode.contract.registryObject),c,d(a.id,e.pure.u64),d(t,e.pure.u64)]}),r}const ne=j(T(async(e,t)=>{const o=await b({cacheTime:g,...t}),n=new M.Transaction,r=t?.client??k;n.moveCall({target:`${o.emode.contract.registryPackage}::registry::find_user_emode_account_caps`,arguments:[n.object(o.emode.contract.registryObject),n.pure.address(e)]});const c=(await r.devInspectTransactionBlock({transactionBlock:n,sender:e})).results[0].returnValues,s=y.bcs.vector(y.bcs.u64()).parse(Uint8Array.from(c[0][0])),i=y.bcs.vector(y.bcs.u64()).parse(Uint8Array.from(c[1][0])),l=y.bcs.vector(y.bcs.Address).parse(Uint8Array.from(c[2][0]));return s.map((m,p)=>({marketId:Number(m),emodeId:Number(i[p]),accountCap:l[p].toString()}))}));function ae(e){return`${A(e.marketId).key}-${e.emodeId}`}const $="main",V={main:{id:0,key:"main",name:"Main Market"}};class ce{constructor(t,o){this.pools=[],this.emodes=[],this.config=A(t),this.addPools(o)}addPools(t){const o=Z(this.pools),n=z(this.emodes);t.forEach(r=>{if(!this.checkMarket(r.market)){console.warn(`Pool is not in market ${this.config.name}`,r);return}o[r.uniqueId]||this.pools.push(r),r.emodes.forEach(c=>{n[c.uniqueId]||this.emodes.push(c)})})}getEMode(t){if(!this.checkMarket(t.marketId))return console.warn(`EMode market mismatch ${this.config.id} !== ${t.marketId}`,t),null;const r=z(this.emodes)[ae(t)];return r||(console.warn(`EMode not found ${t.emodeId} in market ${this.config.name}`,t),null)}getEModePools(t){const o=this.getEMode(t);if(!o)return[];const n=o.assets.map(a=>a.assetId);return this.pools.filter(a=>n.includes(a.id)).map(a=>({...a,emode:o,isEMode:!0}))}checkMarket(t){let o=!1;return typeof t=="number"&&t===this.config.id&&(o=!0),typeof t=="string"&&t===this.config.key&&(o=!0),typeof t=="object"&&t.id===this.config.id&&(o=!0),o}}const A=e=>{const o=Object.values(V).find(n=>typeof e=="number"?n.id===e:typeof e=="string"?n.key===e:n.id===e.id);if(!o)throw new Error("Market not found");return o},se=j(T(async(e,t)=>{const o=await E({cacheTime:6e4,...t,markets:e});return e.map(n=>{const r=A(n),a=o.filter(c=>c.market===r.key);return new ce(n,a)})})),Ve=j(T(async(e,t)=>(await se([e],t))[0])),b=j(T(async e=>{const t=A(e?.market||$),o=`https://open-api.naviprotocol.io/api/navi/config?env=${e?.env||"prod"}&sdk=${I.version}&market=${t.key}`;return(await fetch(o,{headers:P}).then(r=>r.json())).data})),g=1e3*60*5;function Re(e,t,o){const n=typeof o?.balance=="number",r=n?o.balance:0;let a=0;const c=[];let s="";if(t.sort((i,l)=>Number(l.balance)-Number(i.balance)).forEach(i=>{if(!(n&&a>=r)&&Number(i.balance)!==0){if(s||(s=i.coinType),s!==i.coinType)throw new Error("All coins must be of the same type");a+=Number(i.balance),c.push(i.coinObjectId)}}),c.length===0)throw new Error("No coins to merge");if(n&&a<r)throw new Error(`Balance is less than the specified balance: ${a} < ${r}`);return f(s)===f("0x2::sui::SUI")&&o?.useGasCoin?n?e.splitCoins(e.gas,[e.pure.u64(r)]):e.gas:(c.length===1?e.object(c[0]):e.mergeCoins(c[0],c.slice(1)),n?e.splitCoins(c[0],[e.pure.u64(r)]):c[0])}async function q(e,t,o,n,r,a,c){const s=await b({...c,cacheTime:g}),i=await _(o,c);return e.moveCall({target:`${s.uiGetter}::calculator_unchecked::dynamic_health_factor`,arguments:[e.object("0x06"),e.object(s.storage),e.object(s.oracle.priceOracle),je(e,i),d(t,e.pure.address),d(i.id,e.pure.u8),d(n,e.pure.u64),d(r,e.pure.u64),d(a,e.pure.bool)],typeArguments:[i.suiCoinType]})}async function ie(e,t,o){return q(e,t,0,0,0,!1,o)}const L=j(async(e,t)=>{const o=(t?.markets||Object.keys(V)).map(m=>A(m)),n=new M.Transaction,r=t?.client??k,a=await E(t),c=Z(a);for(let m of o){const p=await b({...t,cacheTime:g,market:m});n.moveCall({target:`${p.uiGetter}::getter_unchecked::get_user_state`,arguments:[n.object(p.storage),n.pure.address(e)]})}const i=((await r.devInspectTransactionBlock({transactionBlock:n,sender:e})).results||[]).map(m=>m.returnValues?.map(p=>y.bcs.vector(J).parse(Uint8Array.from(p[0])))[0]||[]),l=[];return i.forEach((m,p)=>{const w=o[p];m.forEach(v=>{if(v.supply_balance==="0"&&v.borrow_balance==="0")return;const C=c[`${w.key}-${v.asset_id}`];if(!C)return;const D=W(v.supply_balance,C.currentSupplyIndex).toString(),U=W(v.borrow_balance,C.currentBorrowIndex).toString();l.push({supplyBalance:D,borrowBalance:U,assetId:v.asset_id,market:w.key,pool:C})})}),l});async function De(e,t){const o=t?.client??k,n=new M.Transaction;await ie(n,e,t);const r=await o.devInspectTransactionBlock({transactionBlock:n,sender:e}),a=F(r,[y.bcs.u256()]);return X(Number(a[0])||0)}async function Ue(e,t,o,n){const r=n?.client??k,a=new M.Transaction;let c=0,s=0;const i=await _(t,n);if(o.forEach(w=>{w.type===B.Supply?c+=w.amount:w.type===B.Withdraw?c-=w.amount:w.type===B.Borrow?s+=w.amount:w.type===B.Repay&&(s-=w.amount)}),c*s<0)throw new Error("Invalid operations");const l=c>0||s>0;await q(a,e,i,Math.abs(c),Math.abs(s),l,n);const m=await r.devInspectTransactionBlock({transactionBlock:a,sender:e}),p=F(m,[y.bcs.u256()]);return X(Number(p[0])||0)}const Ne=T(async(e,t)=>{const o=new URLSearchParams;t?.cursor&&o.set("cursor",t.cursor),o.set("userAddress",e);const n=`https://open-api.naviprotocol.io/api/navi/user/transactions?${o.toString()}&sdk=${I.version}`;return(await fetch(n,{headers:P}).then(a=>a.json())).data});async function Se(e,t){let o=null;const n=[],r=t?.client??k;do{let a;if(t?.coinType?a=await r.getCoins({owner:e,coinType:t?.coinType,cursor:o,limit:100}):a=await r.getAllCoins({owner:e,cursor:o,limit:100}),!a.data||!a.data.length)break;n.push(...a.data),o=a.nextCursor}while(o);return n}const Le=j(async(e,t)=>{const o=[],[n,r]=await Promise.all([L(e,t),ne(e,t)]);return n.forEach(c=>{if(h(c.supplyBalance).gt(0)){const s=h(c.supplyBalance).shiftedBy(-9).decimalPlaces(c.pool.token.decimals,h.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:s.toString(),pool:c.pool,token:c.pool.token,valueUSD:s.multipliedBy(c.pool.oracle.price).toString()}})}if(h(c.borrowBalance).gt(0)){const s=h(c.borrowBalance).shiftedBy(-9).decimalPlaces(c.pool.token.decimals,h.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:s.toString(),pool:c.pool,token:c.pool.token,valueUSD:s.multipliedBy(c.pool.oracle.price).toString()}})}}),(await Promise.all(r.map(async c=>L(c.accountCap,{...t,markets:[c.marketId]})))).forEach((c,s)=>{const i=r[s];c.forEach(l=>{if(h(l.supplyBalance).gt(0)){const m=h(l.supplyBalance).shiftedBy(-9).decimalPlaces(l.pool.token.decimals,h.ROUND_DOWN);o.push({id:`${l.pool.uniqueId}_navi-lending-emode-supply`,wallet:e,protocol:"navi",market:l.market,type:"navi-lending-emode-supply","navi-lending-emode-supply":{amount:m.toString(),pool:K(l.pool,i),token:l.pool.token,valueUSD:m.multipliedBy(l.pool.oracle.price).toString()}})}if(h(l.borrowBalance).gt(0)){const m=h(l.borrowBalance).shiftedBy(-9).decimalPlaces(l.pool.token.decimals,h.ROUND_DOWN);o.push({id:`${l.pool.uniqueId}_navi-lending-emode-borrow`,wallet:e,protocol:"navi",market:l.market,type:"navi-lending-emode-borrow","navi-lending-emode-borrow":{amount:m.toString(),pool:K(l.pool,i),token:l.pool.token,valueUSD:m.multipliedBy(l.pool.oracle.price).toString()}})}})}),o}),ue=new O.SuiPriceServiceConnection("https://hermes.pyth.network",{timeout:1e4});async function le(e){try{const t=[],o=await ue.getLatestPriceFeeds(e);if(!o)return t;const n=Math.floor(new Date().valueOf()/1e3);for(const r of o){const a=r.getPriceUnchecked();if(a.publishTime>n){console.warn(`pyth price feed is invalid, id: ${r.id}, publish time: ${a.publishTime}, current timestamp: ${n}`);continue}n-r.getPriceUnchecked().publishTime>30&&(console.info(`stale price feed, id: ${r.id}, publish time: ${a.publishTime}, current timestamp: ${n}`),t.push(r.id))}return t}catch(t){throw new Error(`failed to get pyth stale price feed id, msg: ${t.message}`)}}async function pe(e,t,o){const n=o?.client??k,r=await b({...o,cacheTime:g});try{const a=await ue.getPriceFeedsUpdateData(t);return await new O.SuiPythClient(n,r.oracle.pythStateId,r.oracle.wormholeStateId).updatePriceFeeds(e,a,t)}catch(a){throw new Error(`failed to update pyth price feeds, msg: ${a.message}`)}}async function Oe(e,t,o){const n=await b({...o,cacheTime:g});if(o?.updatePythPriceFeeds){const r=t.filter(a=>!!a.pythPriceFeedId).map(a=>a.pythPriceFeedId);try{const a=await le(r);a.length>0&&await pe(e,a,o)}catch{}}for(const r of t)e.moveCall({target:`${n.oracle.packageId}::oracle_pro::update_single_price`,arguments:[e.object("0x6"),e.object(n.oracle.oracleConfig),e.object(n.oracle.priceOracle),e.object(n.oracle.supraOracleHolder),e.object(r.pythPriceInfoObject),e.pure.address(r.feedId)]});return e}async function de(e){return(await b({...e,cacheTime:g})).oracle.feeds}function qe(e,t){return e.filter(o=>!!(t?.lendingState&&t.lendingState.find(r=>r.assetId===o.assetId)||t?.pools&&t.pools.find(r=>r.id===o.assetId)))}const R=j(T(async e=>{const t=`https://open-api.naviprotocol.io/api/navi/flashloan?env=${e?.env||"prod"}&sdk=${I.version}&market=${e?.market||$}`,o=await fetch(t,{headers:P}).then(n=>n.json());return Object.keys(o.data).map(n=>({...o.data[n],coinType:n}))}));async function He(e,t){return(await R(t)).find(n=>typeof e=="string"?f(n.coinType)===f(e):typeof e=="number"?n.assetId===e:n.assetId===e.id)||null}async function Ge(e,t,o,n){const r=await b({...n,cacheTime:g}),a=await _(t,n);if(!(await R({...n,cacheTime:g})).some(i=>f(i.coinType)===f(a.suiCoinType)))throw new Error("Pool does not support flashloan");if(r.version===1){const[i,l]=e.moveCall({target:`${r.package}::lending::flash_loan_with_ctx`,arguments:[e.object(r.flashloanConfig),e.object(a.contract.pool),d(o,e.pure.u64)],typeArguments:[a.suiCoinType]});return[i,l]}else{const[i,l]=e.moveCall({target:`${r.package}::lending::flash_loan_with_ctx_v2`,arguments:[e.object(r.flashloanConfig),e.object(a.contract.pool),d(o,e.pure.u64),e.object("0x05")],typeArguments:[a.suiCoinType]});return[i,l]}}async function We(e,t,o,n,r){const a=await b({...r,cacheTime:g}),c=await _(t,r);if(!(await R({...r,cacheTime:g})).some(m=>f(m.coinType)===f(c.suiCoinType)))throw new Error("Pool does not support flashloan");const[l]=e.moveCall({target:`${a.package}::lending::flash_repay_with_ctx`,arguments:[e.object("0x06"),e.object(a.storage),e.object(c.contract.pool),d(o,e.object),d(n,e.object)],typeArguments:[c.suiCoinType]});return[l]}async function ze(e,t,o,n,r,a){const c={...a,cacheTime:g},s=await b(c),i=await _(t,c),l=await _(n,c);if(s.version===1){const[m,p]=e.moveCall({target:`${s.package}::incentive_v3::liquidation`,arguments:[e.object("0x06"),e.object(s.priceOracle),e.object(s.storage),e.pure.u8(i.id),e.object(i.contract.pool),d(o,e.object),e.pure.u8(l.id),e.object(l.contract.pool),d(r,e.pure.address),e.object(s.incentiveV2),e.object(s.incentiveV3)],typeArguments:[i.suiCoinType,l.suiCoinType]});return[m,p]}else{const[m,p]=e.moveCall({target:`${s.package}::incentive_v3::liquidation_v2`,arguments:[e.object("0x06"),e.object(s.priceOracle),e.object(s.storage),e.pure.u8(i.id),e.object(i.contract.pool),d(o,e.object),e.pure.u8(l.id),e.object(l.contract.pool),d(r,e.pure.address),e.object(s.incentiveV2),e.object(s.incentiveV3),e.object("0x05")],typeArguments:[i.suiCoinType,l.suiCoinType]});return[m,p]}}async function Ke(e,t){const o=await de(t),n=await E({...t,cacheTime:g}),r=t?.client??k,a=await b({...t,cacheTime:g}),c=new M.Transaction;c.moveCall({target:`${a.uiGetter}::incentive_v3_getter::get_user_atomic_claimable_rewards`,arguments:[c.object("0x06"),c.object(a.storage),c.object(a.incentiveV3),c.pure.address(e)]});const s=await r.devInspectTransactionBlock({transactionBlock:c,sender:e}),i=F(s,[y.bcs.vector(y.bcs.string()),y.bcs.vector(y.bcs.string()),y.bcs.vector(y.bcs.u8()),y.bcs.vector(y.bcs.Address),y.bcs.vector(y.bcs.u256())]),l=[];if(i.length===5&&Array.isArray(i[0])){const m=i[0].length;for(let p=0;p<m;p++){const w=o.find(C=>f(C.coinType)===f(i[1][p])),v=n.find(C=>f(C.coinType)===f(i[0][p]));!w||!v||l.push({assetId:v.id,assetCoinType:f(i[0][p]),rewardCoinType:f(i[1][p]),option:Number(i[2][p]),userClaimableReward:Number(i[4][p])/Math.pow(10,w.priceDecimal),ruleIds:Array.isArray(i[3][p])?i[3][p]:[i[3][p]]})}}return l}function Ye(e){const t=new Map;e.forEach(n=>{const r=n.assetId,a=n.option,c=`${r}-${a}-${n.rewardCoinType}`;t.has(c)?t.get(c).total+=n.userClaimableReward:t.set(c,{assetId:r,rewardType:a,coinType:n.rewardCoinType,total:Number(n.userClaimableReward)})});const o=new Map;for(const{assetId:n,rewardType:r,coinType:a,total:c}of t.values()){const s=`${n}-${r}`;o.has(s)||o.set(s,{assetId:n,rewardType:r,rewards:new Map});const i=o.get(s);i.rewards.set(a,(i.rewards.get(a)||0)+c)}return Array.from(o.values()).map(n=>({assetId:n.assetId,rewardType:n.rewardType,rewards:Array.from(n.rewards.entries()).map(([r,a])=>({coinType:r,available:a.toFixed(6)}))}))}const Je=T(async(e,t)=>{const o=`https://open-api.naviprotocol.io/api/navi/user/total_claimed_reward?userAddress=${e}&sdk=${I.version}&market=${t?.market||$}`;return(await fetch(o,{headers:P}).then(r=>r.json())).data}),Qe=T(async(e,t)=>{const o=`https://open-api.naviprotocol.io/api/navi/user/rewards?userAddress=${e}&page=${t?.page||1}&pageSize=${t?.size||400}&sdk=${I.version}&market=${t?.market||$}`,n=await fetch(o,{headers:P}).then(r=>r.json());return S({data:n.data.rewards})});async function Xe(e,t,o){const n=await b({...o,cacheTime:g}),r=await E({...o,cacheTime:g}),a=new Map;for(const s of t){const{rewardCoinType:i,ruleIds:l}=s;for(const m of l){a.has(i)||a.set(i,{assetIds:[],ruleIds:[],amount:0});const p=a.get(i);p.assetIds.push(s.assetCoinType.replace("0x","")),p.ruleIds.push(m),p.amount+=s.userClaimableReward}}const c=[];for(const[s,{assetIds:i,ruleIds:l,amount:m}]of a){const p=r.find(v=>f(v.suiCoinType)===f(s));if(!p||!p.contract.rewardFundId)throw new Error(`No matching rewardFund found for reward coin: ${s}`);const w=p.contract.rewardFundId;if(o?.accountCap&&!o.customCoinReceive)throw new Error("customCoinReceive is required when accountCap is provided");if(o?.customCoinReceive){let v;o.accountCap?v=e.moveCall({target:`${n.package}::incentive_v3::claim_reward_with_account_cap`,arguments:[e.object("0x06"),e.object(n.incentiveV3),e.object(n.storage),e.object(w),e.pure.vector("string",i),e.pure.vector("address",l),d(o.accountCap,e.object)],typeArguments:[s]}):v=e.moveCall({target:`${n.package}::incentive_v3::claim_reward`,arguments:[e.object("0x06"),e.object(n.incentiveV3),e.object(n.storage),e.object(w),e.pure.vector("string",i),e.pure.vector("address",l)],typeArguments:[s]});const[C]=e.moveCall({target:"0x2::coin::from_balance",arguments:[v],typeArguments:[s]});if(o?.customCoinReceive.type==="transfer"){if(!o.customCoinReceive.transfer)throw new Error("customCoinReceive.transfer is required");e.transferObjects([C],d(o.customCoinReceive.transfer,e.pure.address))}if(o?.customCoinReceive.type==="depositNAVI"){const D=h(p.totalSupplyAmount).shiftedBy(-9),U=h(p.supplyCapCeiling).shiftedBy(-27);D.plus(m).isGreaterThan(U)&&o?.customCoinReceive.depositNAVI?.fallbackReceiveAddress?e.transferObjects([C],e.pure.address(o.customCoinReceive.depositNAVI.fallbackReceiveAddress)):await ee(e,p,C,o)}else c.push({coin:C,identifier:p})}else e.moveCall({target:`${n.package}::incentive_v3::claim_reward_entry`,arguments:[e.object("0x06"),e.object(n.incentiveV3),e.object(n.storage),e.object(w),e.pure.vector("string",i),e.pure.vector("address",l)],typeArguments:[s]})}return c}exports.Address=N;exports.DEFAULT_CACHE_TIME=g;exports.DEFAULT_MARKET_IDENTITY=$;exports.FlashLoanAssetConfig=ye;exports.IncentiveAPYInfo=fe;exports.IncentivePoolInfo=Y;exports.IncentivePoolInfoByPhase=be;exports.MARKETS=V;exports.Market=ce;exports.OracleInfo=he;exports.PoolOperator=B;exports.ReserveDataInfo=we;exports.UserStateInfo=J;exports.borrowCoinPTB=$e;exports.claimLendingRewardsPTB=Xe;exports.createAccountCapPTB=te;exports.createEModeCapPTB=Fe;exports.depositCoinPTB=ee;exports.emodeIdentityId=ae;exports.enterEModePTB=re;exports.exitEModePTB=Ee;exports.filterPriceFeeds=qe;exports.flashloanPTB=Ge;exports.getAccountCapOwnerPTB=oe;exports.getAllFlashLoanAssets=R;exports.getBorrowFee=Me;exports.getCoins=Se;exports.getConfig=b;exports.getFees=Ie;exports.getFlashLoanAsset=He;exports.getHealthFactor=De;exports.getHealthFactorPTB=ie;exports.getLendingPositions=Le;exports.getLendingState=L;exports.getMarket=Ve;exports.getMarketConfig=A;exports.getMarkets=se;exports.getPool=_;exports.getPools=E;exports.getPriceFeeds=de;exports.getPythStalePriceFeedId=le;exports.getSimulatedHealthFactor=Ue;exports.getSimulatedHealthFactorPTB=q;exports.getStats=Ae;exports.getTransactions=Ne;exports.getUserAvailableLendingRewards=Ke;exports.getUserClaimedRewardHistory=Qe;exports.getUserEModeCaps=ne;exports.getUserTotalClaimedReward=Je;exports.liquidatePTB=ze;exports.mergeCoinsPTB=Re;exports.normalizeCoinType=f;exports.parsePoolUID=x;exports.parseTxValue=d;exports.repayCoinPTB=Be;exports.repayFlashLoanPTB=We;exports.summaryLendingRewards=Ye;exports.updateOraclePricesPTB=Oe;exports.updatePythPriceFeeds=pe;exports.withCache=j;exports.withSingleton=T;exports.withdrawCoinPTB=Pe;
2
2
  //# sourceMappingURL=index.cjs.js.map