@naviprotocol/lending 1.4.0-emode.1 → 1.4.0-emode.10

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, Pool, Transaction as NAVITransaction, AssetIdentifier, TransactionResult, CacheOption, AccountCap, MarketOption, LendingPosition, MarketsOption, EModePool } 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,39 @@ 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 | AccountCap, options?: Partial<SuiClientOption & EnvOption & CacheOption & MarketOption>) => Promise<LendingPosition[]>;
128
+ export declare const getLendingPositions: (address: string, options?: Partial<SuiClientOption & EnvOption & CacheOption & MarketsOption>) => Promise<LendingPosition[]>;
129
+ export declare class UserPositions {
130
+ private _positions;
131
+ private _overview;
132
+ get positions(): LendingPosition[];
133
+ get overview(): {
134
+ hf: number;
135
+ netVaule: string;
136
+ netWorthApr: string;
137
+ totalSupplyValue: string;
138
+ totalBorrowValue: string;
139
+ totalsupplyApy: string;
140
+ totalBorrowApy: string;
141
+ maxLiquidationValue: string;
142
+ maxLoanToVaule: string;
143
+ };
144
+ set positions(positions: LendingPosition[]);
145
+ constructor(positions: LendingPosition[]);
146
+ deposit(pool: Pool | EModePool, amount: number): void;
147
+ withdraw(pool: Pool | EModePool, amount: number): void;
148
+ borrow(pool: Pool | EModePool, amount: number): void;
149
+ repay(pool: Pool | EModePool, amount: number): void;
150
+ findPositionsByPool(pool: Pool | EModePool, isSupply: boolean): LendingPosition[];
151
+ getPositionsOverview(positions: LendingPosition[]): {
152
+ hf: number;
153
+ netVaule: string;
154
+ netWorthApr: string;
155
+ totalSupplyValue: string;
156
+ totalBorrowValue: string;
157
+ totalsupplyApy: string;
158
+ totalBorrowApy: string;
159
+ maxLiquidationValue: string;
160
+ maxLoanToVaule: string;
161
+ };
162
+ }
129
163
  //# sourceMappingURL=account.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"account.d.ts","sourceRoot":"","sources":["../src/account.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,eAAe,EACf,SAAS,EAET,WAAW,IAAI,eAAe,EAC9B,eAAe,EACf,iBAAiB,EACjB,WAAW,EACX,UAAU,EACV,YAAY,EACZ,eAAe,EAChB,MAAM,SAAS,CAAA;AAChB,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAkBtD,OAAO,EAAE,UAAU,EAAkB,MAAM,oBAAoB,CAAA;AAC/D,OAAO,EAAqB,YAAY,EAAE,MAAM,QAAQ,CAAA;AAKxD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,aAAa,CAC3B,EAAE,EAAE,WAAW,EACf,KAAK,EAAE,CAAC;IACN,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAA;IACjC,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAA;CACjB,GAAG,UAAU,CAAC,EAAE,EACjB,OAAO,CAAC,EAAE;IACR,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB;;;;;;;;;EA+CF;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,2BAA2B,CAC/C,EAAE,EAAE,WAAW,EACf,OAAO,EAAE,MAAM,GAAG,UAAU,GAAG,iBAAiB,EAChD,UAAU,EAAE,eAAe,EAC3B,eAAe,EAAE,MAAM,GAAG,iBAAiB,EAC3C,eAAe,EAAE,MAAM,GAAG,iBAAiB,EAC3C,UAAU,EAAE,OAAO,GAAG,iBAAiB,EACvC,OAAO,CAAC,EAAE,OAAO,CAAC,SAAS,GAAG,YAAY,CAAC,GAC1C,OAAO,CAAC,iBAAiB,CAAC,CAqB5B;AAED;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CACtC,EAAE,EAAE,WAAW,EACf,OAAO,EAAE,MAAM,GAAG,UAAU,GAAG,iBAAiB,EAChD,OAAO,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,GAC3B,OAAO,CAAC,iBAAiB,CAAC,CAE5B;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,eAAe,YAEf,MAAM,GAAG,UAAU,YAClB,OAAO,CAAC,eAAe,GAAG,SAAS,GAAG,WAAW,GAAG,YAAY,CAAC,KAC1E,OAAO,CAAC,eAAe,EAAE,CA6D7B,CAAA;AAED;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,GAAG,UAAU,EAC5B,OAAO,CAAC,EAAE,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC,GAC7C,OAAO,CAAC,MAAM,CAAC,CAUjB;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,MAAM,GAAG,UAAU,EAC5B,UAAU,EAAE,eAAe,EAC3B,UAAU,EAAE;IACV,IAAI,EAAE,YAAY,CAAA;IAClB,MAAM,EAAE,MAAM,CAAA;CACf,EAAE,EACH,OAAO,CAAC,EAAE,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC,GAC7C,OAAO,CAAC,MAAM,CAAC,CA8CjB;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,eAAe,YAEf,MAAM,GAAG,UAAU,YAClB;IACR,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,KACA,OAAO,CAAC;IACT,IAAI,EAAE,eAAe,EAAE,CAAA;IACvB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,CAaF,CAAA;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,QAAQ,CAC5B,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,OAAO,CACf;IACE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,GAAG,eAAe,CACpB,GACA,OAAO,CAAC,UAAU,EAAE,CAAC,CAoCvB;AAED,eAAO,MAAM,mBAAmB,YAEnB,MAAM,GAAG,UAAU,YAClB,OAAO,CAAC,eAAe,GAAG,SAAS,GAAG,WAAW,GAAG,YAAY,CAAC,KAC1E,OAAO,CAAC,eAAe,EAAE,CAwF7B,CAAA"}
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"),l=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=l.bcs.bytes(32).transform({input:e=>l.fromHex(e),output:e=>l.toHex(e)}),me=l.bcs.struct("IncentiveAPYInfo",{asset_id:l.bcs.u8(),apy:l.bcs.u256(),coin_types:l.bcs.vector(l.bcs.string())}),W=l.bcs.struct("IncentivePoolInfo",{pool_id:D,funds:D,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()}),ge=l.bcs.struct("IncentivePoolInfoByPhase",{phase:l.bcs.u64(),pools:l.bcs.vector(W)}),fe=l.bcs.struct("OracleInfo",{oracle_id:l.bcs.u8(),price:l.bcs.u256(),decimals:l.bcs.u8(),valid:l.bcs.bool()}),be=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()}),he=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()}),z=l.bcs.struct("UserStateInfo",{asset_id:l.bcs.u8(),borrow_balance:l.bcs.u256(),supply_balance:l.bcs.u256()}),ye="1.4.0-emode.1",k={version:ye},we=k.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:a,cacheTime:s,...u}=o;t.push(u)}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(a=>(t[r]={data:a,cacheAt:Date.now()},a))}}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 p(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 E(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=F(e?.market||P),o=`https://open-api.naviprotocol.io/api/navi/pools?env=${e?.env||"prod"}&sdk=${k.version}&market=${t?.key||P}`,n=await fetch(o,{headers:I}).then(r=>r.json());return n.data.forEach(r=>{const c=n.meta.emodes.filter(a=>!!a.assets.find(s=>s.assetId===r.id)&&a.isActive);r.emodes=c,r.market=n.meta.market}),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:m});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=${k.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=${k.version}`;return await fetch(t,{headers:I}).then(n=>n.json())}));async function Q(e,t,o,n){const r=await b({...n,cacheTime:m}),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 a=typeof o=="object"&&o.$kind==="GasCoin";if(f(c.suiCoinType)===f("0x2::sui::SUI")&&a){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=p(n.amount,e.pure.u64):s=e.moveCall({target:"0x2::coin::value",arguments:[p(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),p(o,e.object),e.object(r.incentiveV2),e.object(r.incentiveV3),p(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),p(o,e.object),s,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:m}),c=await C(t,n),a=p(o,e.pure.u64);let s;if(r.version===1)if(n?.accountCap){const[i]=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),a,e.object(r.incentiveV2),e.object(r.incentiveV3),p(n.accountCap,e.object)],typeArguments:[c.suiCoinType]});s=i}else{const[i]=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),a,e.object(r.incentiveV2),e.object(r.incentiveV3)],typeArguments:[c.suiCoinType]});s=i}else if(n?.accountCap){const[i]=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),a,e.object(r.incentiveV2),e.object(r.incentiveV3),p(n.accountCap,e.object),e.object("0x05")],typeArguments:[c.suiCoinType]});s=i}else{const[i]=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),a,e.object(r.incentiveV2),e.object(r.incentiveV3),e.object("0x05")],typeArguments:[c.suiCoinType]});s=i}return e.moveCall({target:"0x2::coin::from_balance",arguments:[s],typeArguments:[c.suiCoinType]})}async function Ie(e,t,o,n){const r=await b({...n,cacheTime:m}),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 a=p(o,e.pure.u64);let s;if(r.version===1)if(n?.accountCap){const[i]=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),a,e.object(r.incentiveV2),e.object(r.incentiveV3),p(n.accountCap,e.object)],typeArguments:[c.suiCoinType]});s=i}else{const[i]=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),a,e.object(r.incentiveV2),e.object(r.incentiveV3)],typeArguments:[c.suiCoinType]});s=i}else if(n?.accountCap){const[i]=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),a,e.object(r.incentiveV2),e.object(r.incentiveV3),p(n.accountCap,e.object),e.object("0x05")],typeArguments:[c.suiCoinType]});s=i}else{const[i]=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),a,e.object(r.incentiveV2),e.object(r.incentiveV3),e.object("0x05")],typeArguments:[c.suiCoinType]});s=i}return e.moveCall({target:"0x2::coin::from_balance",arguments:[e.object(s)],typeArguments:[c.suiCoinType]})}async function Be(e,t,o,n){const r=await b({...n,cacheTime:m}),c=await C(t,n),a=typeof o=="object"&&o.$kind==="GasCoin";if(f(c.suiCoinType)===f("0x2::sui::SUI")&&a){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=p(n.amount,e.pure.u64):s=e.moveCall({target:"0x2::coin::value",arguments:[p(o,e.object)],typeArguments:[c.suiCoinType]}),n?.accountCap){const[u]=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),p(o,e.object),e.object(r.incentiveV2),e.object(r.incentiveV3),p(n.accountCap,e.object)],typeArguments:[c.suiCoinType]});return e.moveCall({target:"0x2::coin::from_balance",arguments:[u],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),p(o,e.object),s,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,a=new $.Transaction;a.moveCall({target:`${t.package}::incentive_v3::get_borrow_fee_v2`,arguments:[a.object(t.incentiveV3),a.pure.address(e.address),a.pure.u8(r.id),a.pure.u64(1e4)],typeArguments:[]});const s=await c.devInspectTransactionBlock({transactionBlock:a,sender:e.address}),u=E(s,[y.bcs.u64()]);return(Number(u[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})),P="main",X={main:{id:0,key:"main",name:"Main Market"}};class Z{constructor(t,o){this.pools=[],this.emodes=[],this.config=F(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(a=>{n[a.emodeId]||this.emodes.push(a)})})}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 F=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=F(e?.market||P),o=`https://open-api.naviprotocol.io/api/navi/config?env=${e?.env||"prod"}&sdk=${k.version}&market=${t.key}`;return(await fetch(o,{headers:I}).then(r=>r.json())).data})),m=1e3*60*5;async function ee(e,t){const o=await b({cacheTime:m,...t});return e.moveCall({target:`${o.package}::lending::create_account`,arguments:[]})}async function te(e,t,o){const n=await b({cacheTime:m,...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:m});return o?.accountCap?e.moveCall({target:`${n.package}::lending::enter_emode_with_account_cap`,arguments:[e.object(n.storage),p(t,e.pure.u64),p(o.accountCap,e.object)]}):e.moveCall({target:`${n.package}::lending::enter_emode`,arguments:[e.object(n.storage),p(t,e.pure.u64)]}),e}async function Ee(e,t){const o=await b({...t,cacheTime:m});return t?.accountCap?e.moveCall({target:`${o.package}::lending::exit_emode_with_account_cap`,arguments:[e.object(o.storage),p(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:m,...o}),r=await ee(e,o);await oe(e,t,{...o,accountCap:r});const c=await F(o?.market||P),a=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),a,p(c.id,e.pure.u64),p(t,e.pure.u64)]}),r}const ne=T(v(async(e,t)=>{const o=await b({cacheTime:m,...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 a=(await r.devInspectTransactionBlock({transactionBlock:n,sender:e})).results[0].returnValues,s=y.bcs.vector(y.bcs.u64()).parse(Uint8Array.from(a[0][0])),u=y.bcs.vector(y.bcs.u64()).parse(Uint8Array.from(a[1][0])),i=y.bcs.vector(y.bcs.Address).parse(Uint8Array.from(a[2][0]));return s.map((g,d)=>({marketId:Number(g),emodeId:Number(u[d]),accountCap:i[d].toString()}))}));function Ve(e,t,o){const n=typeof o?.balance=="number",r=n?o.balance:0;let c=0;const a=[];let s="";if(t.sort((u,i)=>Number(i.balance)-Number(u.balance)).forEach(u=>{if(!(n&&c>=r)&&Number(u.balance)!==0){if(s||(s=u.coinType),s!==u.coinType)throw new Error("All coins must be of the same type");c+=Number(u.balance),a.push(u.coinObjectId)}}),a.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(s)===f("0x2::sui::SUI")&&o?.useGasCoin?n?e.splitCoins(e.gas,[e.pure.u64(r)]):e.gas:(a.length===1?e.object(a[0]):e.mergeCoins(a[0],a.slice(1)),n?e.splitCoins(a[0],[e.pure.u64(r)]):a[0])}async function N(e,t,o,n,r,c,a){const s=await b({...a,cacheTime:m}),u=await C(o,a);return e.moveCall({target:`${s.uiGetter}::calculator_unchecked::dynamic_health_factor`,arguments:[e.object("0x06"),e.object(s.storage),e.object(s.oracle.priceOracle),Te(e,u),p(t,e.pure.address),p(u.id,e.pure.u8),p(n,e.pure.u64),p(r,e.pure.u64),p(c,e.pure.bool)],typeArguments:[u.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:m}),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 a=await r.devInspectTransactionBlock({transactionBlock:n,sender:e}),s=E(a,[y.bcs.vector(z)]);return V(s[0].filter(i=>i.supply_balance!=="0"||i.borrow_balance!=="0")).map(i=>{const g=c.find(_=>_.id===i.assetId),d=q(i.supplyBalance,g.currentSupplyIndex).toString(),w=q(i.borrowBalance,g.currentBorrowIndex).toString();return{...i,supplyBalance:d,borrowBalance:w,pool:g}}).filter(i=>!!i.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=E(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 a=0,s=0;const u=await C(t,n);if(o.forEach(w=>{w.type===B.Supply?a+=w.amount:w.type===B.Withdraw?a-=w.amount:w.type===B.Borrow?s+=w.amount:w.type===B.Repay&&(s-=w.amount)}),a*s<0)throw new Error("Invalid operations");const i=a>0||s>0;await N(c,e,u,Math.abs(a),Math.abs(s),i,n);const g=await r.devInspectTransactionBlock({transactionBlock:c,sender:e}),d=E(g,[y.bcs.u256()]);return Y(Number(d[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=${k.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)]);return n.forEach(a=>{if(h(a.supplyBalance).gt(0)){const s=h(a.supplyBalance).shiftedBy(-9).decimalPlaces(a.pool.token.decimals,h.ROUND_DOWN);o.push({id:a.pool.uid,wallet:e,protocol:"navi",type:"navi-lending-supply","navi-lending-supply":{amount:s.toString(),pool:a.pool,token:a.pool.token,valueUSD:s.multipliedBy(a.pool.oracle.price).toString()}})}if(h(a.borrowBalance).gt(0)){const s=h(a.borrowBalance).shiftedBy(-9).decimalPlaces(a.pool.token.decimals,h.ROUND_DOWN);o.push({id:a.pool.uid,wallet:e,protocol:"navi",type:"navi-lending-borrow","navi-lending-borrow":{amount:s.toString(),pool:a.pool,token:a.pool.token,valueUSD:s.multipliedBy(a.pool.oracle.price).toString()}})}}),(await Promise.all(r.map(async a=>U(a.accountCap,t)))).forEach((a,s)=>{const u=r[s];a.forEach(i=>{if(h(i.supplyBalance).gt(0)){const g=h(i.supplyBalance).shiftedBy(-9).decimalPlaces(i.pool.token.decimals,h.ROUND_DOWN);o.push({id:i.pool.uid,wallet:e,protocol:"navi",type:"navi-lending-emode-supply","navi-lending-emode-supply":{amount:g.toString(),pool:G(i.pool,u),token:i.pool.token,valueUSD:g.multipliedBy(i.pool.oracle.price).toString()}})}if(h(i.borrowBalance).gt(0)){const g=h(i.borrowBalance).shiftedBy(-9).decimalPlaces(i.pool.token.decimals,h.ROUND_DOWN);o.push({id:i.pool.uid,wallet:e,protocol:"navi",type:"navi-lending-emode-borrow","navi-lending-emode-borrow":{amount:g.toString(),pool:G(i.pool,u),token:i.pool.token,valueUSD:g.multipliedBy(i.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:m});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:m});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:m})).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=${k.version}&market=${e?.market||P}`,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:m}),c=await C(t,n);if(!(await R({...n,cacheTime:m})).some(u=>f(u.coinType)===f(c.suiCoinType)))throw new Error("Pool does not support flashloan");if(r.version===1){const[u,i]=e.moveCall({target:`${r.package}::lending::flash_loan_with_ctx`,arguments:[e.object(r.flashloanConfig),e.object(c.contract.pool),p(o,e.pure.u64)],typeArguments:[c.suiCoinType]});return[u,i]}else{const[u,i]=e.moveCall({target:`${r.package}::lending::flash_loan_with_ctx_v2`,arguments:[e.object(r.flashloanConfig),e.object(c.contract.pool),p(o,e.pure.u64),e.object("0x05")],typeArguments:[c.suiCoinType]});return[u,i]}}async function Ge(e,t,o,n,r){const c=await b({...r,cacheTime:m}),a=await C(t,r);if(!(await R({...r,cacheTime:m})).some(g=>f(g.coinType)===f(a.suiCoinType)))throw new Error("Pool does not support flashloan");const[i]=e.moveCall({target:`${c.package}::lending::flash_repay_with_ctx`,arguments:[e.object("0x06"),e.object(c.storage),e.object(a.contract.pool),p(o,e.object),p(n,e.object)],typeArguments:[a.suiCoinType]});return[i]}async function We(e,t,o,n,r,c){const a={...c,cacheTime:m},s=await b(a),u=await C(t,a),i=await C(n,a);if(s.version===1){const[g,d]=e.moveCall({target:`${s.package}::incentive_v3::liquidation`,arguments:[e.object("0x06"),e.object(s.priceOracle),e.object(s.storage),e.pure.u8(u.id),e.object(u.contract.pool),p(o,e.object),e.pure.u8(i.id),e.object(i.contract.pool),p(r,e.pure.address),e.object(s.incentiveV2),e.object(s.incentiveV3)],typeArguments:[u.suiCoinType,i.suiCoinType]});return[g,d]}else{const[g,d]=e.moveCall({target:`${s.package}::incentive_v3::liquidation_v2`,arguments:[e.object("0x06"),e.object(s.priceOracle),e.object(s.storage),e.pure.u8(u.id),e.object(u.contract.pool),p(o,e.object),e.pure.u8(i.id),e.object(i.contract.pool),p(r,e.pure.address),e.object(s.incentiveV2),e.object(s.incentiveV3),e.object("0x05")],typeArguments:[u.suiCoinType,i.suiCoinType]});return[g,d]}}async function ze(e,t){const o=await ie(t),n=await M({...t,cacheTime:m}),r=t?.client??j,c=await b({...t,cacheTime:m}),a=new $.Transaction;a.moveCall({target:`${c.uiGetter}::incentive_v3_getter::get_user_atomic_claimable_rewards`,arguments:[a.object("0x06"),a.object(c.storage),a.object(c.incentiveV3),a.pure.address(e)]});const s=await r.devInspectTransactionBlock({transactionBlock:a,sender:e}),u=E(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())]),i=[];if(u.length===5&&Array.isArray(u[0])){const g=u[0].length;for(let d=0;d<g;d++){const w=o.find(A=>f(A.coinType)===f(u[1][d])),_=n.find(A=>f(A.coinType)===f(u[0][d]));!w||!_||i.push({assetId:_.id,assetCoinType:f(u[0][d]),rewardCoinType:f(u[1][d]),option:Number(u[2][d]),userClaimableReward:Number(u[4][d])/Math.pow(10,w.priceDecimal),ruleIds:Array.isArray(u[3][d])?u[3][d]:[u[3][d]]})}}return i}function Ke(e){const t=new Map;e.forEach(n=>{const r=n.assetId,c=n.option,a=`${r}-${c}-${n.rewardCoinType}`;t.has(a)?t.get(a).total+=n.userClaimableReward:t.set(a,{assetId:r,rewardType:c,coinType:n.rewardCoinType,total:Number(n.userClaimableReward)})});const o=new Map;for(const{assetId:n,rewardType:r,coinType:c,total:a}of t.values()){const s=`${n}-${r}`;o.has(s)||o.set(s,{assetId:n,rewardType:r,rewards:new Map});const u=o.get(s);u.rewards.set(c,(u.rewards.get(c)||0)+a)}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=${k.version}&market=${t?.market||P}`;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=${k.version}&market=${t?.market||P}`,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:m}),r=await M({...o,cacheTime:m}),c=new Map;for(const s of t){const{rewardCoinType:u,ruleIds:i}=s;for(const g of i){c.has(u)||c.set(u,{assetIds:[],ruleIds:[],amount:0});const d=c.get(u);d.assetIds.push(s.assetCoinType.replace("0x","")),d.ruleIds.push(g),d.amount+=s.userClaimableReward}}const a=[];for(const[s,{assetIds:u,ruleIds:i,amount:g}]of c){const d=r.find(_=>f(_.suiCoinType)===f(s));if(!d||!d.contract.rewardFundId)throw new Error(`No matching rewardFund found for reward coin: ${s}`);const w=d.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",u),e.pure.vector("address",i),p(o.accountCap,e.object)],typeArguments:[s]}):_=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",u),e.pure.vector("address",i)],typeArguments:[s]});const[A]=e.moveCall({target:"0x2::coin::from_balance",arguments:[_],typeArguments:[s]});if(o?.customCoinReceive.type==="transfer"){if(!o.customCoinReceive.transfer)throw new Error("customCoinReceive.transfer is required");e.transferObjects([A],p(o.customCoinReceive.transfer,e.pure.address))}if(o?.customCoinReceive.type==="depositNAVI"){const ue=h(d.totalSupplyAmount).shiftedBy(-9),le=h(d.supplyCapCeiling).shiftedBy(-27);ue.plus(g).isGreaterThan(le)&&o?.customCoinReceive.depositNAVI?.fallbackReceiveAddress?e.transferObjects([A],e.pure.address(o.customCoinReceive.depositNAVI.fallbackReceiveAddress)):await Q(e,d,A,o)}else a.push({coin:A,identifier:d})}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",u),e.pure.vector("address",i)],typeArguments:[s]})}return a}exports.Address=D;exports.DEFAULT_CACHE_TIME=m;exports.DEFAULT_MARKET_IDENTITY=P;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=F;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=p;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 D=require("@mysten/sui/transactions"),l=require("@mysten/bcs"),z=require("@mysten/sui/client"),he=require("lodash.camelcase"),ke=require("@mysten/sui/utils"),q=require("@pythnetwork/pyth-sui-js"),p=require("bignumber.js"),C=require("@mysten/sui/bcs"),O=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:O,funds:O,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()}),Be=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()}),Z=l.bcs.struct("UserStateInfo",{asset_id:l.bcs.u8(),borrow_balance:l.bcs.u256(),supply_balance:l.bcs.u256()}),Ie="1.4.0-emode.10",$={version:Ie},Ae=$.version,Pe=()=>{if(typeof process<"u"&&process.versions&&process.versions.node)try{const e=require("os"),o=process.version,n=e.type(),r=e.arch();return`Node.js ${o.startsWith("v")?o.substring(1):o}; ${n}/${r}`}catch{return`Node.js ${process.version}; OS/Unknown (Error)`}return"Node/Unknown"},$e=()=>{let e="";return typeof process<"u"&&process.versions&&process.versions.node&&(e=`lending/${Ae} (${Pe()})`),e},K=$e(),P=new z.SuiClient({url:z.getFullnodeUrl("mainnet")});function x(e){const o=[];return e.forEach((n,r)=>{const t=r===e.length-1;if(typeof n=="object"&&n!==null&&t){const{client:a,disableCache:s,cacheTime:c,...u}=n;o.push(u)}else o.push(n)}),JSON.stringify(o)}function j(e){const o={};return(...n)=>{const r=x(n);return o[r]||(o[r]=e(...n).finally(()=>{delete o[r]})),o[r]}}function A(e){let o={};return(...n)=>{const r=n[n.length-1],t=x(n),a=o[t];return!r?.disableCache&&typeof a?.data<"u"&&(typeof r?.cacheTime>"u"||r.cacheTime>Date.now()-a.cacheAt)?a.data:e(...n).then(s=>(o[t]={data:s,cacheAt:Date.now()},s))}}function L(e){return Array.isArray(e)?e.map(o=>L(o)):e!=null&&typeof e=="object"?Object.keys(e).reduce((o,n)=>({...o,[he(n)]:L(e[n])}),{}):e}function y(e,o){return typeof e=="object"?e:o(e)}function Se(e,o){return typeof o=="string"?e.object(o):typeof o=="object"&&o.$kind?o:e.object(o.contract.pool)}function N(e,o,n){if(e.results&&e.results.length>0){if(e.results[0].returnValues&&e.results[0].returnValues.length>0)return e.results[0].returnValues.map((r,t)=>(o[t]||o[0]).parse(Uint8Array.from(r[0])))}else if(e.error)return console.log(`Get an error, msg: ${e.error}`),[];return[]}function w(e){return ke.normalizeStructTag(e)}function ee(e){const o=(e||0)/Math.pow(10,27);return o>Math.pow(10,5)?1/0:o}new q.SuiPriceServiceConnection("https://hermes.pyth.network",{timeout:2e4});const Ve=27,Y=(e,o)=>{if(!Number(e)||!Number(o))return new p(0);const n=new p(1).shiftedBy(1*Ve),r=n.multipliedBy(new p(.5));return new p(e).multipliedBy(new p(o)).plus(r).dividedBy(n).integerValue(p.ROUND_DOWN)},E=K?{"User-Agent":K}:{};function te(e){return e.reduce((o,n)=>(o[n.uniqueId]=n,o),{})}function J(e){return e.reduce((o,n)=>(o[n.uniqueId]=n,o),{})}function Q(e,o){const n=e.emodes.find(r=>r.emodeId===o.emodeId);if(!n)throw new Error("EMode not found in pool");return{...e,emode:n,isEMode:!0}}function oe(e){const[o,n]=e.split("-");return!o||!n?null:{marketKey:o,poolId:parseInt(n)}}function V(){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 M=(e=>(e[e.Supply=1]="Supply",e[e.Withdraw=2]="Withdraw",e[e.Borrow=3]="Borrow",e[e.Repay=4]="Repay",e))(M||{});const F=A(j(async e=>{const o=(e?.markets||[S.main]).map(t=>T(t)),n=`https://open-api.naviprotocol.io/api/navi/pools?env=${e?.env||"prod"}&sdk=${$.version}&market=${o.map(t=>t.key)}`,r=await fetch(n,{headers:E}).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(),u=p(t.borrowedAmount).shiftedBy(-9).decimalPlaces(t.token.decimals,p.ROUND_DOWN).toString(),i=p(c).multipliedBy(t.oracle.price).toString(),g=p(u).multipliedBy(t.oracle.price).toString(),m=p(t.supplyCapCeiling).shiftedBy(-27).decimalPlaces(t.token.decimals,p.ROUND_DOWN).toString(),d=p.max(p(t.borrowedAmount),p(t.validBorrowAmount)).shiftedBy(-9).decimalPlaces(t.token.decimals,p.ROUND_DOWN).toString(),v=p(m).multipliedBy(t.oracle.price).toString(),f=p(d).multipliedBy(t.oracle.price).toString();t.poolSupplyAmount=c,t.poolBorrowAmount=u,t.poolSupplyValue=i,t.poolBorrowValue=g,t.poolSupplyCapAmount=m,t.poolBorrowCapAmount=d,t.poolSupplyCapValue=v,t.poolBorrowCapValue=f}),r.data}));async function I(e,o){let n=o?.market;if(typeof e=="string"){const a=oe(e);a&&(n=a.marketKey,e=a.poolId)}const r=await F({...o,markets:[n||U],cacheTime:b});if(typeof e=="object")return e;const t=r.find(a=>typeof e=="string"?w(a.suiCoinType)===w(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 Ee=A(j(async e=>{const o=`https://open-api.naviprotocol.io/api/navi/stats?sdk=${$.version}`;return(await fetch(o,{headers:E}).then(r=>r.json())).data})),Ue=A(j(async e=>{const o=`https://open-api.naviprotocol.io/api/navi/fee?sdk=${$.version}`;return await fetch(o,{headers:E}).then(r=>r.json())}));async function ne(e,o,n,r){const t=await k({...r,cacheTime:b}),a=await I(o,r);if(a?.deprecatedAt&&Date.now()>a.deprecatedAt)throw new Error(`The lending pool for coinType ${a.suiCoinType} has been deprecated.`);const s=typeof n=="object"&&n.$kind==="GasCoin";if(w(a.suiCoinType)===w("0x2::sui::SUI")&&s){if(!r?.amount)throw new Error("Amount is required for sui coin");n=e.splitCoins(n,[r.amount])}let c;return typeof r?.amount<"u"?c=y(r.amount,e.pure.u64):c=e.moveCall({target:"0x2::coin::value",arguments:[y(n,e.object)],typeArguments:[a.suiCoinType]}),r?.accountCap?e.moveCall({target:`${t.package}::incentive_v3::deposit_with_account_cap`,arguments:[e.object("0x06"),e.object(t.storage),e.object(a.contract.pool),e.pure.u8(a.id),y(n,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(n,e.object),c,e.object(t.incentiveV2),e.object(t.incentiveV3)],typeArguments:[a.suiCoinType]}),t.version===2&&a.id===0&&e.moveCall({target:`${t.package}::pool::refresh_stake`,arguments:[e.object(a.contract.pool),e.object("0x05")]}),e}async function Me(e,o,n,r){const t=await k({...r,cacheTime:b}),a=await I(o,r),s=y(n,e.pure.u64);let c;if(t.version===1)if(r?.accountCap){const[i]=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=i}else{const[i]=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=i}else if(r?.accountCap){const[i]=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=i}else{const[i]=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=i}return e.moveCall({target:"0x2::coin::from_balance",arguments:[c],typeArguments:[a.suiCoinType]})}async function De(e,o,n,r){const t=await k({...r,cacheTime:b}),a=await I(o,r);if(a?.deprecatedAt&&Date.now()>a.deprecatedAt)throw new Error(`The lending pool for coinType ${a.suiCoinType} has been deprecated.`);const s=y(n,e.pure.u64);let c;if(t.version===1)if(r?.accountCap){const[i]=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=i}else{const[i]=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=i}else if(r?.accountCap){const[i]=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=i}else{const[i]=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=i}return e.moveCall({target:"0x2::coin::from_balance",arguments:[e.object(c)],typeArguments:[a.suiCoinType]})}async function Fe(e,o,n,r){const t=await k({...r,cacheTime:b}),a=await I(o,r),s=typeof n=="object"&&n.$kind==="GasCoin";if(w(a.suiCoinType)===w("0x2::sui::SUI")&&s){if(!r?.amount)throw new Error("Amount is required for sui coin");n=e.splitCoins(n,[r.amount])}let c;if(typeof r?.amount<"u"?c=y(r.amount,e.pure.u64):c=e.moveCall({target:"0x2::coin::value",arguments:[y(n,e.object)],typeArguments:[a.suiCoinType]}),r?.accountCap){const[u]=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(n,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:[u],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(n,e.object),c,e.object(t.incentiveV2),e.object(t.incentiveV3)],typeArguments:[a.suiCoinType]}),e}const Ne=A(j(async e=>{const o=await k({...e});if(e?.address&&typeof e?.asset<"u")try{const t=await I(e.asset,e),a=e?.client??P,s=new D.Transaction;s.moveCall({target:`${o.package}::incentive_v3::get_borrow_fee_v2`,arguments:[s.object(o.incentiveV3),s.pure.address(e.address),s.pure.u8(t.id),s.pure.u64(1e4)],typeArguments:[]});const c=await a.devInspectTransactionBlock({transactionBlock:s,sender:e.address}),u=N(c,[C.bcs.u64()]);return(Number(u[0])||0)/100}catch(t){console.error(t)}const r=(await P.getObject({id:o.incentiveV3,options:{showType:!0,showOwner:!0,showContent:!0}})).data.content.fields.borrow_fee_rate;return Number(r)/100}));async function re(e,o){const n=await k({cacheTime:b,...o});return e.moveCall({target:`${n.package}::lending::create_account`,arguments:[]})}async function ae(e,o,n){const r=await k({cacheTime:b,...n});return e.moveCall({target:`${r.package}::lending_core::account_owner`,arguments:[o]})}async function ce(e,o,n){const r=await k({...n,cacheTime:b});return n?.accountCap?e.moveCall({target:`${r.package}::lending::enter_emode_with_account_cap`,arguments:[e.object(r.storage),y(o,e.pure.u64),y(n.accountCap,e.object)]}):e.moveCall({target:`${r.package}::lending::enter_emode`,arguments:[e.object(r.storage),y(o,e.pure.u64)]}),e}async function Re(e,o){const n=await k({...o,cacheTime:b});return o?.accountCap?e.moveCall({target:`${n.package}::lending::exit_emode_with_account_cap`,arguments:[e.object(n.storage),y(o.accountCap,e.object)]}):e.moveCall({target:`${n.package}::lending::exit_emode`,arguments:[e.object(n.storage)]}),e}async function Oe(e,o,n){const r=await k({cacheTime:b,...n}),t=await re(e,n);await ce(e,o,{...n,accountCap:t});const a=await T(n?.market||U),s=await ae(e,t,n);return e.moveCall({target:`${r.emode.contract.registryPackage}::registry::register_emode_for_account_cap`,arguments:[e.object(r.emode.contract.registryObject),s,y(a.id,e.pure.u64),y(o,e.pure.u64)]}),t}const H=A(j(async(e,o)=>{const n=await k({cacheTime:b,...o}),r=new D.Transaction,t=o?.client??P;r.moveCall({target:`${n.emode.contract.registryPackage}::registry::find_user_emode_account_caps`,arguments:[r.object(n.emode.contract.registryObject),r.pure.address(e)]});const s=(await t.devInspectTransactionBlock({transactionBlock:r,sender:e})).results[0].returnValues,c=C.bcs.vector(C.bcs.u64()).parse(Uint8Array.from(s[0][0])),u=C.bcs.vector(C.bcs.u64()).parse(Uint8Array.from(s[1][0])),i=C.bcs.vector(C.bcs.Address).parse(Uint8Array.from(s[2][0]));return c.map((g,m)=>({marketId:Number(g),emodeId:Number(u[m]),accountCap:i[m].toString()}))}));function se(e){return`${T(e.marketId).key}-${e.emodeId}`}const U="main",S={main:{id:0,key:"main",name:"Main Market"}};class ie{constructor(o,n){this.pools=[],this.emodes=[],this._overview={marketTotalSupplyValue:"0",marketTotalBorrowValue:"0"},this.config=T(o),this.addPools(n)}get overview(){return this._overview}addPools(o){const n=te(this.pools),r=J(this.emodes);let t=p(0),a=p(0);o.forEach(s=>{if(!this.checkMarket(s.market)){console.warn(`Pool is not in market ${this.config.name}`,s);return}n[s.uniqueId]||this.pools.push(s),s.emodes.forEach(u=>{r[u.uniqueId]||this.emodes.push(u)}),a=a.plus(s.poolBorrowValue),t=t.plus(s.poolSupplyValue)}),this._overview={marketTotalSupplyValue:t.toString(),marketTotalBorrowValue:a.toString()}}getEMode(o){if(!this.checkMarket(o.marketId))return console.warn(`EMode market mismatch ${this.config.id} !== ${o.marketId}`,o),null;const t=J(this.emodes)[se(o)];return t||(console.warn(`EMode not found ${o.emodeId} in market ${this.config.name}`,o),null)}getEModePools(o){const n=this.getEMode(o);if(!n)return[];const r=n.assets.map(a=>a.assetId);return this.pools.filter(a=>r.includes(a.id)).map(a=>({...a,emode:n,isEMode:!0}))}checkMarket(o){let n=!1;return typeof o=="number"&&o===this.config.id&&(n=!0),typeof o=="string"&&o===this.config.key&&(n=!0),typeof o=="object"&&o.id===this.config.id&&(n=!0),n}}const T=e=>{const n=Object.values(S).find(r=>typeof e=="number"?r.id===e:typeof e=="string"?r.key===e:r.id===e.id);if(!n)throw new Error("Market not found");return n},ue=A(j(async(e,o)=>{const n=await F({cacheTime:6e4,...o,markets:e});return e.map(r=>{const t=T(r),a=n.filter(s=>s.market===t.key);return new ie(r,a)})})),Le=A(j(async(e,o)=>(await ue([e],o))[0])),k=A(j(async e=>{const o=T(e?.market||U),n=`https://open-api.naviprotocol.io/api/navi/config?env=${e?.env||"prod"}&sdk=${$.version}&market=${o.key}`;return(await fetch(n,{headers:E}).then(t=>t.json())).data})),b=1e3*60*5;function qe(e,o,n){const r=typeof n?.balance=="number",t=r?n.balance:0;let a=0;const s=[];let c="";if(o.sort((u,i)=>Number(i.balance)-Number(u.balance)).forEach(u=>{if(!(r&&a>=t)&&Number(u.balance)!==0){if(c||(c=u.coinType),c!==u.coinType)throw new Error("All coins must be of the same type");a+=Number(u.balance),s.push(u.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 w(c)===w("0x2::sui::SUI")&&n?.useGasCoin?r?e.splitCoins(e.gas,[e.pure.u64(t)]):e.gas:(s.length===1?e.object(s[0]):e.mergeCoins(s[0],s.slice(1)),r?e.splitCoins(s[0],[e.pure.u64(t)]):s[0])}async function W(e,o,n,r,t,a,s){const c=await k({...s,cacheTime:b}),u=await I(n,s);return e.moveCall({target:`${c.uiGetter}::calculator_unchecked::dynamic_health_factor`,arguments:[e.object("0x06"),e.object(c.storage),e.object(c.oracle.priceOracle),Se(e,u),y(o,e.pure.address),y(u.id,e.pure.u8),y(r,e.pure.u64),y(t,e.pure.u64),y(a,e.pure.bool)],typeArguments:[u.suiCoinType]})}async function le(e,o,n){return W(e,o,0,0,0,!1,n)}async function pe(e,o,n){const r=new D.Transaction,t=n?.client??P,a=await F({...n,markets:Object.values(S)}),s=te(a);for(let g of o){const m=await k({...n,cacheTime:b,market:g.market});r.moveCall({target:`${m.uiGetter}::getter_unchecked::get_user_state`,arguments:[r.object(m.storage),r.pure.address(g.address)]})}const u=((await t.devInspectTransactionBlock({transactionBlock:r,sender:e})).results||[]).map(g=>g.returnValues?.map(m=>C.bcs.vector(Z).parse(Uint8Array.from(m[0])))[0]||[]),i=[];return u.forEach((g,m)=>{const d=o[m],v=T(d.market);g.forEach(f=>{if(f.supply_balance==="0"&&f.borrow_balance==="0")return;const h=s[`${v.key}-${f.asset_id}`];if(!h)return;const _=Y(f.supply_balance,h.currentSupplyIndex).toString(),B=Y(f.borrow_balance,h.currentBorrowIndex).toString();i.push({supplyBalance:_,borrowBalance:B,assetId:f.asset_id,market:v.key,pool:h,emodeId:d.emodeId})})}),i}const He=A(async(e,o)=>{const r=(o?.markets||Object.keys(S)).map(t=>T(t)).map(t=>({address:e,market:t.key}));return await pe(e,r,o)});async function We(e,o){const n=o?.client??P,r=new D.Transaction;await le(r,e,o);const t=await n.devInspectTransactionBlock({transactionBlock:r,sender:e}),a=N(t,[C.bcs.u256()]);return ee(Number(a[0])||0)}async function Ge(e,o,n,r){const t=r?.client??P,a=new D.Transaction;let s=0,c=0;const u=await I(o,r);if(n.forEach(d=>{d.type===M.Supply?s+=d.amount:d.type===M.Withdraw?s-=d.amount:d.type===M.Borrow?c+=d.amount:d.type===M.Repay&&(c-=d.amount)}),s*c<0)throw new Error("Invalid operations");const i=s>0||c>0;await W(a,e,u,Math.abs(s),Math.abs(c),i,r);const g=await t.devInspectTransactionBlock({transactionBlock:a,sender:e}),m=N(g,[C.bcs.u256()]);return ee(Number(m[0])||0)}const ze=j(async(e,o)=>{const n=new URLSearchParams;o?.cursor&&n.set("cursor",o.cursor),n.set("userAddress",e);const r=`https://open-api.naviprotocol.io/api/navi/user/transactions?${n.toString()}&sdk=${$.version}`;return(await fetch(r,{headers:E}).then(a=>a.json())).data});async function Ke(e,o){let n=null;const r=[],t=o?.client??P;do{let a;if(o?.coinType?a=await t.getCoins({owner:e,coinType:o?.coinType,cursor:n,limit:100}):a=await t.getAllCoins({owner:e,cursor:n,limit:100}),!a.data||!a.data.length)break;r.push(...a.data),n=a.nextCursor}while(n);return r}const de=A(async(e,o)=>{const n=[],r=(o?.markets||Object.keys(S)).map(c=>T(c)),t=await H(e,o),a=r.map(c=>({address:e,market:c.key})).concat(t.filter(c=>!!r.find(u=>u.id===c.marketId)).map(c=>({address:e,market:T(c.marketId).key,emodeId:c.emodeId})));return(await pe(e,a,o)).forEach(c=>{const u=c.emodeId?t.find(i=>{const g=T(c.market);return i.emodeId===c.emodeId&&i.marketId===g.id}):void 0;if(u){if(p(c.supplyBalance).gt(0)){const i=p(c.supplyBalance).shiftedBy(-9).decimalPlaces(c.pool.token.decimals,p.ROUND_DOWN);n.push({id:`${c.pool.uniqueId}_${u.emodeId}_navi-lending-emode-supply`,wallet:e,protocol:"navi",market:c.market,type:"navi-lending-emode-supply","navi-lending-emode-supply":{amount:i.toString(),pool:Q(c.pool,u),token:c.pool.token,valueUSD:i.multipliedBy(c.pool.oracle.price).toString()}})}if(p(c.borrowBalance).gt(0)){const i=p(c.borrowBalance).shiftedBy(-9).decimalPlaces(c.pool.token.decimals,p.ROUND_DOWN);n.push({id:`${c.pool.uniqueId}_${u.emodeId}_navi-lending-emode-borrow`,wallet:e,protocol:"navi",market:c.market,type:"navi-lending-emode-borrow","navi-lending-emode-borrow":{amount:i.toString(),pool:Q(c.pool,u),token:c.pool.token,valueUSD:i.multipliedBy(c.pool.oracle.price).toString()}})}}else{if(p(c.supplyBalance).gt(0)){const i=p(c.supplyBalance).shiftedBy(-9).decimalPlaces(c.pool.token.decimals,p.ROUND_DOWN);n.push({id:`${c.pool.uniqueId}_navi-lending-supply`,wallet:e,protocol:"navi",type:"navi-lending-supply",market:c.market,"navi-lending-supply":{amount:i.toString(),pool:c.pool,token:c.pool.token,valueUSD:i.multipliedBy(c.pool.oracle.price).toString()}})}if(p(c.borrowBalance).gt(0)){const i=p(c.borrowBalance).shiftedBy(-9).decimalPlaces(c.pool.token.decimals,p.ROUND_DOWN);n.push({id:`${c.pool.uniqueId}_navi-lending-borrow`,wallet:e,protocol:"navi",market:c.market,type:"navi-lending-borrow","navi-lending-borrow":{amount:i.toString(),pool:c.pool,token:c.pool.token,valueUSD:i.multipliedBy(c.pool.oracle.price).toString()}})}}}),n});class Ye{constructor(o){this._positions=[],this._overview={hf:1/0,netVaule:"0",netWorthApr:"0",totalSupplyValue:"0",totalBorrowValue:"0",totalsupplyApy:"0",totalBorrowApy:"0",maxLiquidationValue:"0",maxLoanToVaule:"0"},this.positions=o}get positions(){return this._positions}get overview(){return this._overview}set positions(o){this._positions=o,this._overview=this.getPositionsOverview(o)}deposit(o,n){const r=!!o.isEMode;let t;r?t={id:V(),wallet:"",protocol:"navi",market:"",type:"navi-lending-emode-supply","navi-lending-emode-supply":{amount:n.toString(),valueUSD:p(n).multipliedBy(o.oracle.price).toString(),token:o.token,pool:o}}:t={id:V(),wallet:"",protocol:"navi",market:"",type:"navi-lending-supply","navi-lending-supply":{amount:n.toString(),valueUSD:p(n).multipliedBy(o.oracle.price).toString(),token:o.token,pool:o}},this.positions=[...this.positions,t]}withdraw(o,n){const r=!!o.isEMode;let t;r?t={id:V(),wallet:"",protocol:"navi",market:"",type:"navi-lending-emode-supply","navi-lending-emode-supply":{amount:(-n).toString(),valueUSD:p(-n).multipliedBy(o.oracle.price).toString(),token:o.token,pool:o}}:t={id:V(),wallet:"",protocol:"navi",market:"",type:"navi-lending-supply","navi-lending-supply":{amount:(-n).toString(),valueUSD:p(-n).multipliedBy(o.oracle.price).toString(),token:o.token,pool:o}},this.positions=[...this.positions,t]}borrow(o,n){const r=!!o.isEMode;let t;r?t={id:V(),wallet:"",protocol:"navi",market:"",type:"navi-lending-emode-borrow","navi-lending-emode-borrow":{amount:n.toString(),valueUSD:p(n).multipliedBy(o.oracle.price).toString(),token:o.token,pool:o}}:t={id:V(),wallet:"",protocol:"navi",market:"",type:"navi-lending-borrow","navi-lending-borrow":{amount:n.toString(),valueUSD:p(n).multipliedBy(o.oracle.price).toString(),token:o.token,pool:o}},this.positions=[...this.positions,t]}repay(o,n){const r=!!o.isEMode;let t;r?t={id:V(),wallet:"",protocol:"navi",market:"",type:"navi-lending-emode-borrow","navi-lending-emode-borrow":{amount:(-n).toString(),valueUSD:p(-n).multipliedBy(o.oracle.price).toString(),token:o.token,pool:o}}:t={id:V(),wallet:"",protocol:"navi",market:"",type:"navi-lending-borrow","navi-lending-borrow":{amount:(-n).toString(),valueUSD:p(-n).multipliedBy(o.oracle.price).toString(),token:o.token,pool:o}},this.positions=[...this.positions,t]}findPositionsByPool(o,n){const r=!!o.isEMode;return this.positions.filter(t=>r?t.type===(n?"navi-lending-emode-supply":"navi-lending-emode-borrow"):t.type===(n?"navi-lending-supply":"navi-lending-borrow"))}getPositionsOverview(o){let n=new p(0),r=new p(0),t=new p(0),a=new p(0),s=new p(0),c=new p(0);o.forEach(m=>{if(m.type==="navi-lending-supply"){const d=m["navi-lending-supply"];n=n.plus(d.valueUSD),s=s.plus(new p(d.valueUSD).multipliedBy(d.pool.liquidationFactor.threshold)),c=c.plus(new p(d.valueUSD).multipliedBy(d.pool.ltvValue))}else if(m.type==="navi-lending-borrow")r=r.plus(m["navi-lending-borrow"].valueUSD);else if(m.type==="navi-lending-emode-supply"){const d=m["navi-lending-emode-supply"];n=n.plus(d.valueUSD);const v=d.pool.emode.assets.find(f=>f.assetId===d.pool.id);s=s.plus(new p(d.valueUSD).multipliedBy(v.lt)),c=c.plus(new p(d.valueUSD).multipliedBy(v.ltv))}else m.type==="navi-lending-emode-borrow"&&(r=r.plus(m["navi-lending-emode-borrow"].valueUSD))}),o.forEach(m=>{if(m.type==="navi-lending-supply"){const d=m["navi-lending-supply"],v=d.pool.supplyIncentiveApyInfo.apy;t=t.plus(new p(d.valueUSD).dividedBy(n).multipliedBy(new p(v).dividedBy(100)))}else if(m.type==="navi-lending-borrow"){const d=m["navi-lending-borrow"],v=d.pool.borrowIncentiveApyInfo.apy;r.gt(0)&&(a=a.plus(new p(d.valueUSD).dividedBy(r).multipliedBy(new p(v).dividedBy(100))))}else if(m.type==="navi-lending-emode-supply"){const d=m["navi-lending-emode-supply"],v=d.pool.supplyIncentiveApyInfo.apy;n.gt(0)&&(t=t.plus(new p(d.valueUSD).dividedBy(n).multipliedBy(new p(v).dividedBy(100))))}else if(m.type==="navi-lending-emode-borrow"){const d=m["navi-lending-emode-borrow"],v=d.pool.borrowIncentiveApyInfo.apy;r.gt(0)&&(a=a.plus(new p(d.valueUSD).dividedBy(r).multipliedBy(new p(v).dividedBy(100))))}});const u=n.minus(r),i=n.minus(r).eq(0)?new p(0):n.multipliedBy(t).minus(r.multipliedBy(a)).div(n.minus(r));return{hf:r.toNumber()!==0?s.dividedBy(r).toNumber():1/0,netVaule:u.toString(),netWorthApr:i.toString(),totalSupplyValue:n.toString(),totalBorrowValue:r.toString(),totalsupplyApy:t.toString(),totalBorrowApy:a.toString(),maxLiquidationValue:s.toString(),maxLoanToVaule:c.toString()}}}const me=new q.SuiPriceServiceConnection("https://hermes.pyth.network",{timeout:1e4});async function ge(e){try{const o=[],n=await me.getLatestPriceFeeds(e);if(!n)return o;const r=Math.floor(new Date().valueOf()/1e3);for(const t of n){const a=t.getPriceUnchecked();if(a.publishTime>r){console.warn(`pyth price feed is invalid, id: ${t.id}, publish time: ${a.publishTime}, current timestamp: ${r}`);continue}r-t.getPriceUnchecked().publishTime>30&&(console.info(`stale price feed, id: ${t.id}, publish time: ${a.publishTime}, current timestamp: ${r}`),o.push(t.id))}return o}catch(o){throw new Error(`failed to get pyth stale price feed id, msg: ${o.message}`)}}async function ye(e,o,n){const r=n?.client??P,t=await k({...n,cacheTime:b});try{const a=await me.getPriceFeedsUpdateData(o);return await new q.SuiPythClient(r,t.oracle.pythStateId,t.oracle.wormholeStateId).updatePriceFeeds(e,a,o)}catch(a){throw new Error(`failed to update pyth price feeds, msg: ${a.message}`)}}async function fe(e,o,n){const r=await k({...n,cacheTime:b});if(n?.updatePythPriceFeeds){const t=o.filter(a=>!!a.pythPriceFeedId).map(a=>a.pythPriceFeedId);try{const a=await ge(t);a.length>0&&await ye(e,a,n)}catch{}}for(const t of o)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 G(e){return(await k({...e,cacheTime:b})).oracle.feeds}function be(e,o){return e.filter(n=>!!(o?.lendingState&&o.lendingState.find(t=>t.assetId===n.assetId)||o?.lendingPositions&&o.lendingPositions.find(t=>["navi-lending-supply","navi-lending-borrow","navi-lending-emode-supply","navi-lending-emode-borrow"].includes(t.type)?t[t.type]?.pool?.id===n.assetId:!1)||o?.pools&&o.pools.find(t=>t.id===n.assetId)))}async function Je(e,o,n,r){try{const t=await G({...r}),a=[];n.forEach(i=>{a.includes(i.market)||a.push(i.market)});const s=await de(o,{...r,markets:a}),c=be(t,{lendingPositions:s,pools:n});return await fe(e,c,{updatePythPriceFeeds:!0,...r})}catch(t){if(r?.throws)throw t;return console.error(t),e}}const R=A(j(async e=>{const o=`https://open-api.naviprotocol.io/api/navi/flashloan?env=${e?.env||"prod"}&sdk=${$.version}&market=${e?.market||U}`,n=await fetch(o,{headers:E}).then(r=>r.json());return Object.keys(n.data).map(r=>({...n.data[r],coinType:r}))}));async function Qe(e,o){return(await R(o)).find(r=>typeof e=="string"?w(r.coinType)===w(e):typeof e=="number"?r.assetId===e:r.assetId===e.id)||null}async function Xe(e,o,n,r){const t=await k({...r,cacheTime:b}),a=await I(o,r);if(!(await R({...r,cacheTime:b})).some(u=>w(u.coinType)===w(a.suiCoinType)))throw new Error("Pool does not support flashloan");if(t.version===1){const[u,i]=e.moveCall({target:`${t.package}::lending::flash_loan_with_ctx`,arguments:[e.object(t.flashloanConfig),e.object(a.contract.pool),y(n,e.pure.u64)],typeArguments:[a.suiCoinType]});return[u,i]}else{const[u,i]=e.moveCall({target:`${t.package}::lending::flash_loan_with_ctx_v2`,arguments:[e.object(t.flashloanConfig),e.object(a.contract.pool),y(n,e.pure.u64),e.object("0x05")],typeArguments:[a.suiCoinType]});return[u,i]}}async function Ze(e,o,n,r,t){const a=await k({...t,cacheTime:b}),s=await I(o,t);if(!(await R({...t,cacheTime:b})).some(g=>w(g.coinType)===w(s.suiCoinType)))throw new Error("Pool does not support flashloan");const[i]=e.moveCall({target:`${a.package}::lending::flash_repay_with_ctx`,arguments:[e.object("0x06"),e.object(a.storage),e.object(s.contract.pool),y(n,e.object),y(r,e.object)],typeArguments:[s.suiCoinType]});return[i]}async function xe(e,o,n,r,t,a){const s={...a,cacheTime:b},c=await k(s),u=await I(o,s),i=await I(r,s);if(c.version===1){const[g,m]=e.moveCall({target:`${c.package}::incentive_v3::liquidation`,arguments:[e.object("0x06"),e.object(c.priceOracle),e.object(c.storage),e.pure.u8(u.id),e.object(u.contract.pool),y(n,e.object),e.pure.u8(i.id),e.object(i.contract.pool),y(t,e.pure.address),e.object(c.incentiveV2),e.object(c.incentiveV3)],typeArguments:[u.suiCoinType,i.suiCoinType]});return[g,m]}else{const[g,m]=e.moveCall({target:`${c.package}::incentive_v3::liquidation_v2`,arguments:[e.object("0x06"),e.object(c.priceOracle),e.object(c.storage),e.pure.u8(u.id),e.object(u.contract.pool),y(n,e.object),e.pure.u8(i.id),e.object(i.contract.pool),y(t,e.pure.address),e.object(c.incentiveV2),e.object(c.incentiveV3),e.object("0x05")],typeArguments:[u.suiCoinType,i.suiCoinType]});return[g,m]}}async function et(e,o,n){const r=n?.client??P,t=new D.Transaction,a=await F({...n,markets:Object.values(S),cacheTime:b}),s=await G(n);for(let g of o){const m=await k({...n,cacheTime:b,market:g.market});t.moveCall({target:`${m.uiGetter}::incentive_v3_getter::get_user_atomic_claimable_rewards`,arguments:[t.object("0x06"),t.object(m.storage),t.object(m.incentiveV3),t.pure.address(g.address)]})}const c=await r.devInspectTransactionBlock({transactionBlock:t,sender:e}),u=[];c?.results?.forEach(g=>{u.push(N({results:[g]},[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 i=[];return u.forEach((g,m)=>{const d=o[m];if(g.length===5&&Array.isArray(g[0])){const v=g[0].length;for(let f=0;f<v;f++){const h=s.find(B=>w(B.coinType)===w(g[1][f])),_=a.find(B=>w(B.coinType)===w(g[0][f]));!h||!_||i.push({assetId:_.id,assetCoinType:w(g[0][f]),rewardCoinType:w(g[1][f]),option:Number(g[2][f]),userClaimableReward:Number(g[4][f])/Math.pow(10,h.priceDecimal),ruleIds:Array.isArray(g[3][f])?g[3][f]:[g[3][f]],market:d.market,owner:d.address,emodeId:d.emodeId})}}}),i}async function tt(e,o){const n=(o?.markets||[S.main]).map(a=>T(a)),r=await H(e,o),t=n.map(a=>({address:e,market:a.key})).concat(r.filter(a=>!!n.find(s=>s.id===a.marketId)).map(a=>{const s=T(a.marketId);return{address:e,market:s.key,emodeId:a.emodeId}}));return await et(e,t,o)}function ot(e){const o=new Map;e.forEach(r=>{const t=r.assetId,a=r.option,s=`${t}-${a}-${r.rewardCoinType}-${r.market}`;o.has(s)?o.get(s).total+=r.userClaimableReward:o.set(s,{assetId:t,rewardType:a,coinType:r.rewardCoinType,total:Number(r.userClaimableReward),market:r.market})});const n=new Map;for(const{assetId:r,rewardType:t,coinType:a,total:s,market:c}of o.values()){const u=`${r}-${t}-${c}`;n.has(u)||n.set(u,{assetId:r,rewardType:t,market:c,rewards:new Map});const i=n.get(u);i.rewards.set(a,(i.rewards.get(a)||0)+s)}return Array.from(n.values()).map(r=>({assetId:r.assetId,rewardType:r.rewardType,market:r.market,rewards:Array.from(r.rewards.entries()).map(([t,a])=>({coinType:t,available:a.toFixed(6)}))}))}const nt=j(async(e,o)=>{const n=`https://open-api.naviprotocol.io/api/navi/user/total_claimed_reward?userAddress=${e}&sdk=${$.version}&market=${o?.market||U}`;return(await fetch(n,{headers:E}).then(t=>t.json())).data}),rt=j(async(e,o)=>{const n=`https://open-api.naviprotocol.io/api/navi/user/rewards?userAddress=${e}&page=${o?.page||1}&pageSize=${o?.size||400}&sdk=${$.version}&market=${o?.market||U}`,r=await fetch(n,{headers:E}).then(t=>t.json());return L({data:r.data.rewards})});async function at(e,o,n){const r=await k({...n,cacheTime:b}),t=await F({...n,markets:Object.values(S),cacheTime:b}),a=new Map;for(const c of o){const{rewardCoinType:u,ruleIds:i,market:g,owner:m,emodeId:d}=c,v=`${u}-${g}-${m}`;for(const f of i){a.has(v)||a.set(v,{assetIds:[],ruleIds:[],amount:0,market:g,owner:m,isEMode:typeof d<"u"});const h=a.get(v);h.assetIds.push(c.assetCoinType.replace("0x","")),h.ruleIds.push(f),h.amount+=c.userClaimableReward}}const s=[];for(const[c,{assetIds:u,ruleIds:i,amount:g,market:m,owner:d,isEMode:v}]of a){const f=t.find(_=>w(_.suiCoinType)===w(c)&&_.market===m);if(!f||!f.contract.rewardFundId)throw new Error(`No matching rewardFund found for reward coin: ${c} ${m}`);const h=f.contract.rewardFundId;if(n?.accountCap&&!n.customCoinReceive)throw new Error("customCoinReceive is required when accountCap is provided");if(n?.customCoinReceive){let _;n.accountCap?_=e.moveCall({target:`${r.package}::incentive_v3::claim_reward_with_account_cap`,arguments:[e.object("0x06"),e.object(r.incentiveV3),e.object(r.storage),e.object(h),e.pure.vector("string",u),e.pure.vector("address",i),y(n.accountCap,e.object)],typeArguments:[c]}):v?_=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",u),e.pure.vector("address",i),y(d,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",u),e.pure.vector("address",i)],typeArguments:[c]});const[B]=e.moveCall({target:"0x2::coin::from_balance",arguments:[_],typeArguments:[c]});if(n?.customCoinReceive.type==="transfer"){if(!n.customCoinReceive.transfer)throw new Error("customCoinReceive.transfer is required");e.transferObjects([B],y(n.customCoinReceive.transfer,e.pure.address))}if(n?.customCoinReceive.type==="depositNAVI"){const ve=p(f.totalSupplyAmount).shiftedBy(-9),we=p(f.supplyCapCeiling).shiftedBy(-27);ve.plus(g).isGreaterThan(we)&&n?.customCoinReceive.depositNAVI?.fallbackReceiveAddress?e.transferObjects([B],e.pure.address(n.customCoinReceive.depositNAVI.fallbackReceiveAddress)):await ne(e,f,B,n)}else s.push({coin:B,identifier:f,owner:d,isEMode:v})}else if(n?.accountCap||v){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",u),e.pure.vector("address",i),y(n?.accountCap||d,e.object)],typeArguments:[c]}),[B]=e.moveCall({target:"0x2::coin::from_balance",arguments:[_],typeArguments:[c]});e.transferObjects([B],y(n?.accountCap||d,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",u),e.pure.vector("address",i)],typeArguments:[c]})}return s}exports.Address=O;exports.DEFAULT_CACHE_TIME=b;exports.DEFAULT_MARKET_IDENTITY=U;exports.FlashLoanAssetConfig=je;exports.IncentiveAPYInfo=Ce;exports.IncentivePoolInfo=X;exports.IncentivePoolInfoByPhase=_e;exports.MARKETS=S;exports.Market=ie;exports.OracleInfo=Te;exports.PoolOperator=M;exports.ReserveDataInfo=Be;exports.UserPositions=Ye;exports.UserStateInfo=Z;exports.borrowCoinPTB=De;exports.claimLendingRewardsPTB=at;exports.createAccountCapPTB=re;exports.createEModeCapPTB=Oe;exports.depositCoinPTB=ne;exports.emodeIdentityId=se;exports.enterEModePTB=ce;exports.exitEModePTB=Re;exports.filterPriceFeeds=be;exports.flashloanPTB=Xe;exports.getAccountCapOwnerPTB=ae;exports.getAllFlashLoanAssets=R;exports.getBorrowFee=Ne;exports.getCoins=Ke;exports.getConfig=k;exports.getFees=Ue;exports.getFlashLoanAsset=Qe;exports.getHealthFactor=We;exports.getHealthFactorPTB=le;exports.getLendingPositions=de;exports.getLendingState=He;exports.getMarket=Le;exports.getMarketConfig=T;exports.getMarkets=ue;exports.getPool=I;exports.getPools=F;exports.getPriceFeeds=G;exports.getPythStalePriceFeedId=ge;exports.getSimulatedHealthFactor=Ge;exports.getSimulatedHealthFactorPTB=W;exports.getStats=Ee;exports.getTransactions=ze;exports.getUserAvailableLendingRewards=tt;exports.getUserClaimedRewardHistory=rt;exports.getUserEModeCaps=H;exports.getUserTotalClaimedReward=nt;exports.liquidatePTB=xe;exports.mergeCoinsPTB=qe;exports.normalizeCoinType=w;exports.parsePoolUID=oe;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=Me;
2
2
  //# sourceMappingURL=index.cjs.js.map