@scallop-io/sui-scallop-sdk 2.2.3-pyth-sponsored-transaction-alpha.1 → 2.3.0-lst-x-oracle-alpha.1

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.
Files changed (71) hide show
  1. package/dist/address-Bp_gAUMw.d.ts +165 -0
  2. package/dist/chunk-4GSK5DO7.js +25 -0
  3. package/dist/chunk-B4M6FI47.mjs +5 -0
  4. package/dist/constants/index.d.mts +262 -0
  5. package/dist/constants/index.d.ts +262 -0
  6. package/dist/constants/index.js +86 -0
  7. package/dist/constants/index.mjs +5 -0
  8. package/dist/models/index.d.mts +393 -0
  9. package/dist/models/index.d.ts +393 -0
  10. package/dist/models/index.js +34 -0
  11. package/dist/models/index.mjs +16 -0
  12. package/dist/queryKeys-AaZqDYle.d.ts +43 -0
  13. package/dist/{index.d.mts → scallopUtils-Cxm9zldY.d.ts} +1748 -2586
  14. package/dist/types/index.d.mts +9 -0
  15. package/dist/types/index.d.ts +9 -0
  16. package/dist/types/index.js +2 -0
  17. package/dist/types/index.mjs +1 -0
  18. package/package.json +23 -11
  19. package/src/builders/borrowIncentiveBuilder.ts +2 -2
  20. package/src/builders/coreBuilder.ts +5 -14
  21. package/src/builders/index.ts +2 -2
  22. package/src/builders/oracles/error.ts +29 -0
  23. package/src/builders/oracles/index.ts +114 -365
  24. package/src/builders/oracles/oraclePackageRegistry.ts +323 -0
  25. package/src/builders/oracles/priceFeedUpdater.ts +112 -0
  26. package/src/builders/oracles/priceUpdateRequester.ts +50 -0
  27. package/src/builders/oracles/xOracleUpdateStrategy.ts +178 -0
  28. package/src/builders/oracles/xOracleUpdater.ts +160 -0
  29. package/src/builders/vescaBuilder.ts +2 -2
  30. package/src/constants/api.ts +2 -0
  31. package/src/constants/common.ts +0 -3
  32. package/src/constants/index.ts +2 -1
  33. package/src/constants/package.ts +14 -0
  34. package/src/constants/testAddress.ts +190 -105
  35. package/src/constants/xoracle.ts +8 -2
  36. package/src/models/scallopAddress.ts +24 -4
  37. package/src/models/scallopBuilder.ts +4 -4
  38. package/src/models/scallopClient.ts +1 -1
  39. package/src/models/scallopConstants.ts +2 -2
  40. package/src/models/scallopIndexer.ts +3 -2
  41. package/src/models/scallopQuery.ts +52 -36
  42. package/src/models/scallopQueryClient.ts +1 -1
  43. package/src/models/scallopSuiKit.ts +1 -1
  44. package/src/models/scallopUtils.ts +5 -8
  45. package/src/queries/borrowIncentiveQuery.ts +2 -3
  46. package/src/queries/coreQuery.ts +2 -3
  47. package/src/queries/index.ts +4 -3
  48. package/src/queries/loyaltyProgramQuery.ts +1 -1
  49. package/src/queries/portfolioQuery.ts +13 -13
  50. package/src/queries/sCoinQuery.ts +2 -2
  51. package/src/queries/spoolQuery.ts +8 -8
  52. package/src/queries/vescaQuery.ts +2 -2
  53. package/src/queries/xOracleQuery.ts +20 -3
  54. package/src/types/address.ts +85 -47
  55. package/src/types/builder/core.ts +2 -4
  56. package/src/types/constant/index.ts +2 -1
  57. package/src/types/constant/package.ts +3 -0
  58. package/src/types/constant/xOracle.ts +10 -7
  59. package/src/types/query/index.ts +0 -1
  60. package/src/utils/builder.ts +1 -1
  61. package/src/utils/index.ts +2 -2
  62. package/src/utils/query.ts +6 -6
  63. package/src/utils/util.ts +1 -1
  64. package/dist/index.d.ts +0 -3242
  65. package/dist/index.js +0 -49
  66. package/dist/index.mjs +0 -15
  67. package/src/builders/oracles/pyth.ts +0 -52
  68. package/src/index.ts +0 -13
  69. package/src/queries/ownerQuery.ts +0 -32
  70. package/src/types/constant/enum.ts +0 -64
  71. package/src/types/query/sCoin.ts +0 -1
@@ -0,0 +1,34 @@
1
+ 'use strict';
2
+
3
+ var chunk4GSK5DO7_js = require('../chunk-4GSK5DO7.js');
4
+ var transactions = require('@mysten/sui/transactions');
5
+ var utils = require('@mysten/sui/utils');
6
+ var suiKit = require('@scallop-io/sui-kit');
7
+ var S = require('bignumber.js');
8
+ var zod = require('zod');
9
+ var pythSuiJs = require('@pythnetwork/pyth-sui-js');
10
+ var bcs = require('@mysten/sui/bcs');
11
+ var Vs = require('assert');
12
+ var sr = require('axios');
13
+ var queryCore = require('@tanstack/query-core');
14
+ var client = require('@mysten/sui/client');
15
+
16
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
17
+
18
+ var S__default = /*#__PURE__*/_interopDefault(S);
19
+ var Vs__default = /*#__PURE__*/_interopDefault(Vs);
20
+ var sr__default = /*#__PURE__*/_interopDefault(sr);
21
+
22
+ var x=o=>{let e=o.blockData.sender;if(!e)throw new Error("Sender is required");return e},le=o=>{if(o===void 0)throw new Error("veSca not found")},We=o=>{if(o<=new Date().getTime())throw new Error("veSca is expired, use renewExpiredVeScaQuick instead")},Ge=(o,e,t)=>{le(t),We(t);let s=Math.floor(t/1e3);if(o<1)throw new Error("Minimum lock period is 1 day");let r=Math.floor((e-s)/86400);if(o>r)throw new Error(`Cannot extend lock period by ${o} days, maximum lock period is ~4 years (${1460} days), remaining lock period is ${1460-r}`)},qt=(o,e,t,s)=>{let r=s?Math.floor(s/1e3):void 0,a=!r,n=!a&&r*1e3<=new Date().getTime();if(a||n)if(o!==void 0&&e!==void 0){if(e<=0)throw new Error("Lock period must be greater than 0");if(typeof o=="number"&&o<1e10)throw new Error(`Minimum lock amount for ${n?"renewing expired veSca":"initial lock"} is 10 SCA`);if(e*86400>126144e3)throw new Error(`Maximum lock period is ~4 years (${1460} days)`)}else throw new Error(`SCA amount and lock period is required for ${n?"renewing expired veSca":"initial lock"}`);else {if(le(s),We(s),typeof o=="number"&&o<1e9)throw new Error("Minimum top up amount is 1 SCA");t&&e&&Ge(e,t,s);}},$t=(o,e)=>{if(le(e),We(e),o<1e9)throw new Error("Minimum top up amount is 1 SCA");if(!!e&&e<=new Date().getTime())throw new Error("veSca is expired, use renewExpiredVeScaQuick instead")},Qt=(o,e,t)=>{if(!t||t>new Date().getTime())throw new Error("Renew method can only be used for expired veSca");if(o<1e10)throw new Error("Minimum lock amount for renewing expired vesca 10 SCA");if(e*86400>=126057600)throw new Error(`Maximum lock period is ~4 years (${1459} days)`)};var W=o=>{if(!(o&&o.content&&"fields"in o.content))throw new Error(`Failed to parse object ${o}`);let e=o.content.fields;if(typeof e=="object"&&"value"in e){let t=e.value;return typeof t=="object"&&"fields"in t?t.fields:t}else if(typeof e=="object")return e;return e};async function is(o,e,...t){let s=t[t.length-1];if(typeof s=="object"&&s.indexer)try{return await o.apply(e,t)}catch(r){return console.warn(`Indexer requests failed: ${r.message}. Retrying without indexer..`),await o.apply(e,[...t.slice(0,-1),{...s,indexer:!1}])}return await o.apply(e,t)}function E(o){return (...e)=>is(o,this,...e)}var Xe=o=>({coinType:utils.normalizeStructTag(o.type.name),maxBorrowRate:Number(o.maxBorrowRate.value)/2**32,borrowRate:Number(o.interestRate.value)/2**32,borrowRateScale:Number(o.interestRateScale),borrowIndex:Number(o.borrowIndex),lastUpdated:Number(o.lastUpdated),cashAmount:Number(o.cash),debtAmount:Number(o.debt),marketCoinSupplyAmount:Number(o.marketCoinSupply),reserveAmount:Number(o.reserve),reserveFactor:Number(o.reserveFactor.value)/2**32,borrowWeight:Number(o.borrowWeight.value)/2**32,borrowFee:Number(o.borrowFeeRate.value)/2**32,baseBorrowRate:Number(o.baseBorrowRatePerSec.value)/2**32,borrowRateOnHighKink:Number(o.borrowRateOnHighKink.value)/2**32,borrowRateOnMidKink:Number(o.borrowRateOnMidKink.value)/2**32,highKink:Number(o.highKink.value)/2**32,midKink:Number(o.midKink.value)/2**32,minBorrowAmount:Number(o.minBorrowAmount),isIsolated:o.isIsolated,supplyLimit:Number(o.supplyLimit),borrowLimit:Number(o.borrowLimit)}),ze=(o,e)=>{let t=o.parseCoinNameFromType(e.coinType),s=o.getCoinDecimal(t);if(s===void 0)throw new Error(`Coin decimal not found for ${t}`);let r=24*365*3600,a=e.baseBorrowRate*r/e.borrowRateScale,n=e.borrowRateOnHighKink*r/e.borrowRateScale,i=e.borrowRateOnMidKink*r/e.borrowRateScale,c=e.maxBorrowRate*r/e.borrowRateScale,d=e.borrowRate*r/e.borrowRateScale,l=Math.floor(new Date().getTime()/1e3)-e.lastUpdated,u=S__default.default(e.borrowIndex).multipliedBy(S__default.default(l).multipliedBy(e.borrowRate)).dividedBy(e.borrowRateScale),p=S__default.default(e.borrowIndex).plus(u),y=S__default.default(p).dividedBy(e.borrowIndex).minus(1),g=S__default.default(e.debtAmount).multipliedBy(y),f=g.plus(e.debtAmount),m=f.shiftedBy(-1*s),b=S__default.default(e.reserveAmount).plus(g.multipliedBy(e.reserveFactor)),h=b.shiftedBy(-1*s),T=S__default.default(f).plus(Math.max(e.cashAmount-b.toNumber(),0)),P=T.shiftedBy(-1*s),D=S__default.default(f).dividedBy(T);D=D.isFinite()?D:S__default.default(0);let k=S__default.default(d).multipliedBy(D).multipliedBy(1-e.reserveFactor);k=k.isFinite()?k:S__default.default(0);let I=T.dividedBy(e.marketCoinSupplyAmount);return I=I.isFinite()&&!I.isNaN()?I:S__default.default(1),{baseBorrowApr:a,baseBorrowApy:o.parseAprToApy(a),borrowAprOnHighKink:n,borrowApyOnHighKink:o.parseAprToApy(n),borrowAprOnMidKink:i,borrowApyOnMidKink:o.parseAprToApy(i),coinDecimal:s,maxBorrowApr:c,maxBorrowApy:o.parseAprToApy(c),borrowApr:Math.min(d,c),borrowApy:Math.min(o.parseAprToApy(d),o.parseAprToApy(c)),borrowIndex:p.toNumber(),growthInterest:y.toNumber(),supplyAmount:T.toNumber(),supplyCoin:P.toNumber(),borrowAmount:f.toNumber(),borrowCoin:m.toNumber(),reserveAmount:b.toNumber(),reserveCoin:h.toNumber(),utilizationRate:D.toNumber(),supplyApr:k.toNumber(),supplyApy:o.parseAprToApy(k.toNumber()),conversionRate:I.toNumber(),isIsolated:e.isIsolated,maxSupplyCoin:S__default.default(e.supplyLimit).shiftedBy(-s).toNumber(),maxBorrowCoin:S__default.default(e.borrowLimit).shiftedBy(-s).toNumber()}},Ce=o=>({coinType:utils.normalizeStructTag(o.type.name),isIsolated:o.isIsolated,collateralFactor:Number(o.collateralFactor.value)/4294967296,liquidationFactor:Number(o.liquidationFactor.value)/4294967296,liquidationDiscount:Number(o.liquidationDiscount.value)/4294967296,liquidationPenalty:Number(o.liquidationPenalty.value)/4294967296,liquidationReserveFactor:Number(o.liquidationReserveFactor.value)/4294967296,maxCollateralAmount:Number(o.maxCollateralAmount),totalCollateralAmount:Number(o.totalCollateralAmount)}),Pe=(o,e)=>{let t=o.parseCoinNameFromType(e.coinType),s=o.getCoinDecimal(t);if(s===void 0)throw new Error(`Coin decimal not found for ${t}`);let r=S__default.default(e.maxCollateralAmount).shiftedBy(-1*s),a=S__default.default(e.totalCollateralAmount).shiftedBy(-1*s);return {coinDecimal:s,isIsolated:e.isIsolated,maxDepositAmount:e.maxCollateralAmount,maxDepositCoin:r.toNumber(),depositAmount:e.totalCollateralAmount,depositCoin:a.toNumber()}},Wt=o=>({stakeType:utils.normalizeStructTag(o.stakeType.fields.name),maxPoint:Number(o.maxDistributedPoint),distributedPoint:Number(o.distributedPoint),pointPerPeriod:Number(o.distributedPointPerPeriod),period:Number(o.pointDistributionTime),maxStake:Number(o.maxStake),staked:Number(o.stakes),index:Number(o.index),createdAt:Number(o.createdAt),lastUpdate:Number(o.lastUpdate)}),Gt=(o,e,t)=>{let r=S__default.default(o.pointPerPeriod).dividedBy(o.period),a=S__default.default(o.pointPerPeriod).dividedBy(o.period),n=a.gt(0)?S__default.default(o.maxPoint).minus(o.distributedPoint).dividedBy(a):S__default.default(0),i=o.createdAt,c=n.plus(o.lastUpdate).integerValue().toNumber(),d=S__default.default(Math.floor(new Date().getTime()/1e3)-o.lastUpdate).dividedBy(o.period).toFixed(0),l=S__default.default(o.maxPoint).minus(o.distributedPoint),u=S__default.default.minimum(S__default.default(d).multipliedBy(o.pointPerPeriod),l),p=S__default.default(o.index).plus(u.dividedBy(o.staked).isFinite()?S__default.default(1e9).multipliedBy(u).dividedBy(o.staked):0),y=S__default.default(o.distributedPoint).plus(u),g=S__default.default(o.staked),f=g.shiftedBy(-1*t),m=f.multipliedBy(e);return {distributedPointPerSec:r.toNumber(),accumulatedPoints:u.toNumber(),currentPointIndex:p.toNumber(),currentTotalDistributedPoint:y.toNumber(),startDate:new Date(i*1e3),endDate:new Date(c*1e3),stakedAmount:g.toNumber(),stakedCoin:f.toNumber(),stakedValue:m.toNumber()}},Xt=o=>({claimedRewards:Number(o.claimed_rewards),exchangeRateDenominator:Number(o.exchange_rate_denominator),exchangeRateNumerator:Number(o.exchange_rate_numerator),rewards:Number(o.rewards),spoolId:String(o.spool_id)}),zt=(o,e,t,s,r)=>{let n=S__default.default(t.distributedPointPerSec).multipliedBy(e.exchangeRateNumerator).dividedBy(e.exchangeRateDenominator),i=S__default.default(o.maxPoint).multipliedBy(e.exchangeRateNumerator).dividedBy(e.exchangeRateDenominator),c=i.shiftedBy(-1*r),d=c.multipliedBy(s),l=S__default.default(e.rewards),u=l.shiftedBy(-1*r),p=u.multipliedBy(s),y=S__default.default(e.claimedRewards),g=y.shiftedBy(-1*r),f=g.multipliedBy(s),m=S__default.default(n).shiftedBy(-1*r).multipliedBy(31536e3).multipliedBy(s),b=m.dividedBy(t.stakedValue).isFinite()?m.dividedBy(t.stakedValue).toNumber():1/0;return (o.maxPoint<=o.distributedPoint||o.pointPerPeriod===0)&&(b=1/0),{rewardApr:b,totalRewardAmount:i.toNumber(),totalRewardCoin:c.toNumber(),totalRewardValue:d.toNumber(),remaindRewardAmount:l.toNumber(),remaindRewardCoin:u.toNumber(),remaindRewardValue:p.toNumber(),claimedRewardAmount:y.toNumber(),claimedRewardCoin:g.toNumber(),claimedRewardValue:f.toNumber(),rewardPerSec:n.toNumber()}},cs=o=>({pointType:utils.normalizeStructTag(o.point_type.name),distributedPointPerPeriod:Number(o.distributed_point_per_period),period:Number(o.point_distribution_time),distributedPoint:Number(o.distributed_point),points:Number(o.points),index:Number(o.index),baseWeight:Number(o.base_weight),weightedAmount:Number(o.weighted_amount),lastUpdate:Number(o.last_update),createdAt:Number(o.created_at)}),Ht=(o,e)=>({poolType:utils.normalizeStructTag(e.pool_type.name),minStakes:Number(e.min_stakes),maxStakes:Number(e.max_stakes),staked:Number(e.stakes),poolPoints:e.points.reduce((t,s)=>{let r=cs(s),a=o.parseCoinNameFromType(r.pointType);return t[a]=r,t},{})}),Yt=(o,e,t,s,r)=>{let n=S__default.default(o.distributedPointPerPeriod).dividedBy(o.period),i=S__default.default(Math.floor(new Date().getTime()/1e3)-o.lastUpdate).dividedBy(o.period).toFixed(0),c=S__default.default.minimum(S__default.default(i).multipliedBy(o.distributedPointPerPeriod),S__default.default(o.points)),d=S__default.default(o.index).plus(c.dividedBy(o.weightedAmount).isFinite()?S__default.default(1e9).multipliedBy(c).dividedBy(o.weightedAmount):0),l=S__default.default(o.distributedPoint).plus(c),u=S__default.default(o.baseWeight),p=S__default.default(o.weightedAmount),y=p.shiftedBy(-1*r),g=y.multipliedBy(s),f=365*24*60*60,m=S__default.default(n).shiftedBy(-1*t),b=S__default.default(m).multipliedBy(f).multipliedBy(e),h=S__default.default(1e12),T=b.multipliedBy(S__default.default(o.baseWeight).dividedBy(h)).dividedBy(g).isFinite()&&o.points>0?b.multipliedBy(S__default.default(o.baseWeight).dividedBy(h)).dividedBy(g).toNumber():1/0;return {distributedPointPerSec:n.toNumber(),accumulatedPoints:c.toNumber(),currentPointIndex:d.toNumber(),currentTotalDistributedPoint:l.toNumber(),baseWeight:u.toNumber(),weightedStakedAmount:p.toNumber(),weightedStakedCoin:y.toNumber(),weightedStakedValue:g.toNumber(),rewardApr:T,rewardPerSec:m.toNumber()}},ls=o=>({pointType:utils.normalizeStructTag(o.point_type.name),weightedAmount:Number(o.weighted_amount),points:Number(o.points),totalPoints:Number(o.total_points),index:Number(o.index)}),Jt=(o,e)=>({poolType:utils.normalizeStructTag(e.pool_type.name),debtAmount:Number(e.debt_amount),pointList:e.points_list.reduce((t,s)=>{let r=ls(s),a=o.parseCoinNameFromType(r.pointType);return t[a]=r,t},{})}),de=(...o)=>S__default.default(o.reduce((e,t)=>new S__default.default(t).lt(e)?t:e));var Ae=(o,e,t)=>{let s=Math.max(1,Math.floor(Math.log10(Math.abs(o))+1)),r=Math.max(Math.floor((s-1)/e),1)+1,a=Math.pow(10,-r);return a=t==="increase"?1-a:1+a,a};var Zt=o=>{let e=new Date(o*1e3),t=new Date(o*1e3);t.setUTCHours(0,0,0,0),e.getUTCHours()>=0&&t.setUTCDate(t.getUTCDate()+1);let s=new Date().getTime();return t.getTime()-s>126144e3*1e3&&t.setUTCDate(t.getUTCDate()-1),Math.floor(t.getTime()/1e3)};var ue=o=>(o.endsWith("/")&&(o=o.slice(0,-1)),o);var ds=zod.z.object({dataType:zod.z.string(),type:zod.z.string(),hasPublicTransfer:zod.z.boolean(),fields:zod.z.object({id:zod.z.object({id:zod.z.string()}),name:zod.z.object({type:zod.z.string()}),value:zod.z.string()})}),us="0x6e641f0dca8aedab3101d047e96439178f16301bf0b57fe8745086ff1195eb3e::market_dynamic_keys::SupplyLimitKey",Oe=async(o,e)=>{try{let t=o.parseCoinType(e).slice(2),s=o.address.get("core.market");if(!s)return null;let r=await o.scallopSuiKit.queryGetDynamicFieldObject({parentId:s,name:{type:us,value:t}}),a=ds.safeParse(r?.data?.content);return a.success?a.data.fields.value:"0"}catch(t){return console.error(`Error in getSupplyLimit for ${e}: ${t.message}`),"0"}};var ps=zod.z.object({dataType:zod.z.string(),type:zod.z.string(),hasPublicTransfer:zod.z.boolean(),fields:zod.z.object({id:zod.z.object({id:zod.z.string()}),name:zod.z.object({type:zod.z.string()}),value:zod.z.boolean()})}),eo="0xe7dbb371a9595631f7964b7ece42255ad0e738cc85fe6da26c7221b220f01af6::market_dynamic_keys::IsolatedAssetKey",to=async(o,e=!1)=>{if(!e)return o.utils.getSupportedPoolAddresses().filter(t=>!!t.isolatedAssetKey).map(t=>t.coinName);try{let t=o.address.get("core.market"),s=[];if(!t)return s;let r=!1,a=null,n=i=>i.name.type===eo;do{let i=await o.scallopSuiKit.queryGetDynamicFields({parentId:t,cursor:a,limit:10});if(!i)break;let c=i.data.filter(n).map(({name:d})=>`0x${d.value.type.name}`);s.push(...c),i&&i.hasNextPage&&i.nextCursor?(r=!0,a=i.nextCursor):r=!1;}while(r);return s}catch(t){return console.error(t),[]}},se=async(o,e)=>{let t=o.constants.poolAddresses[e];if(t)return t.isIsolated;let s=o.address.get("core.market"),r=o.queryClient.getQueryData(["getDynamicFields",s]);if(r){let c=o.parseCoinType(e);return r.includes(c)}let a=o.parseCoinType(e).slice(2),n=await o.scallopSuiKit.queryGetDynamicFieldObject({parentId:s,name:{type:eo,value:a}}),i=ps.safeParse(n?.data?.content);return i.success?i.data.fields.value:!1};var ms=zod.z.object({dataType:zod.z.string(),type:zod.z.string(),hasPublicTransfer:zod.z.boolean(),fields:zod.z.object({id:zod.z.object({id:zod.z.string()}),name:zod.z.object({type:zod.z.string()}),value:zod.z.string()})}),ys="0xe7dbb371a9595631f7964b7ece42255ad0e738cc85fe6da26c7221b220f01af6::market_dynamic_keys::BorrowLimitKey",Re=async(o,e)=>{try{let t=o.parseCoinType(e).slice(2),s=o.address.get("core.market");if(!s)return null;let r=await o.scallopSuiKit.queryGetDynamicFieldObject({parentId:s,name:{type:ys,value:t}}),a=ms.safeParse(r?.data?.content);return a.success?a.data.fields.value:"0"}catch(t){return console.error(`Error in getBorrowLimit for ${e}: ${t.message}`),"0"}};var gs="0x00481a93b819d744a7d79ecdc6c62c74f2f7cb4779316c4df640415817ac61bb",oo=async({constants:o,scallopSuiKit:e},t,s)=>{let r=new Set(t),a=Object.fromEntries(Object.entries(o.coinTypeToCoinNameMap).filter(([d,l])=>r.has(l))),n=null,i=!1,c=[];do{let d=await e.queryGetDynamicFields({parentId:gs,limit:10,cursor:n});if(!d)break;let{data:l,hasNextPage:u,nextCursor:p}=d,y=l.filter(g=>{let f=`0x${g.name.value.name}`;return !!a[f]}).map(g=>g.objectId)??[];c.push(...await e.queryGetObjects(y)),i=u,n=p;}while(i);return c.reduce((d,l)=>{if(l.content?.dataType==="moveObject"){let u=`0x${l.content.fields.name.fields.name}`,p=a[u];if(!p)return d;let g=+l.content.fields.value;d[p]=g/s;}return d},{})};var ao=async({utils:o,indexer:e},t=!1,s)=>{s=s??await o.getCoinPrices()??{};let r={},a={};if(t){let p=await e.getMarket(),y=f=>{f.coinPrice=s[f.coinName]??f.coinPrice,f.coinWrappedType=o.getCoinWrappedType(f.coinName),r[f.coinName]=f;},g=f=>{f.coinPrice=s[f.coinName]??f.coinPrice,f.coinWrappedType=o.getCoinWrappedType(f.coinName),a[f.coinName]=f;};return Object.values(p.pools).filter(f=>!!f).forEach(y),Object.values(p.collaterals).filter(f=>!!f).forEach(g),{pools:r,collaterals:a}}let n=o.address.get("core.packages.query.id"),i=o.address.get("core.market"),c=`${n}::market_query::market_data`,d=[i],u=(await o.scallopSuiKit.queryInspectTxn({queryTarget:c,args:d}))?.events[0]?.parsedJson;for(let p of u?.pools??[]){let y=utils.normalizeStructTag(p.type.name),g=o.parseCoinNameFromType(y),f=s[g]??0;if(!o.constants.whitelist.lending.has(g))continue;let m=Xe({type:p.type,maxBorrowRate:p.maxBorrowRate,interestRate:p.interestRate,interestRateScale:p.interestRateScale,borrowIndex:p.borrowIndex,lastUpdated:p.lastUpdated,cash:p.cash,debt:p.debt,marketCoinSupply:p.marketCoinSupply,reserve:p.reserve,reserveFactor:p.reserveFactor,borrowWeight:p.borrowWeight,borrowFeeRate:p.borrowFeeRate,baseBorrowRatePerSec:p.baseBorrowRatePerSec,borrowRateOnHighKink:p.borrowRateOnHighKink,borrowRateOnMidKink:p.borrowRateOnMidKink,highKink:p.highKink,midKink:p.midKink,minBorrowAmount:p.minBorrowAmount,isIsolated:await se(o,g),supplyLimit:await Oe(o,g)??"0",borrowLimit:await Re(o,g)??"0"}),b=ze(o,m);r[g]={coinName:g,symbol:o.parseSymbol(g),coinType:y,marketCoinType:o.parseMarketCoinType(g),sCoinType:o.parseSCoinType(o.parseMarketCoinName(g))??"",coinWrappedType:o.getCoinWrappedType(g),coinPrice:f,highKink:m.highKink,midKink:m.midKink,reserveFactor:m.reserveFactor,borrowWeight:m.borrowWeight,borrowFee:m.borrowFee,marketCoinSupplyAmount:m.marketCoinSupplyAmount,minBorrowAmount:m.minBorrowAmount,...b};}for(let p of u?.collaterals??[]){let y=utils.normalizeStructTag(p.type.name),g=o.parseCoinNameFromType(y),f=s[g]??0;if(!o.constants.whitelist.collateral.has(g))continue;let m=Ce({type:p.type,collateralFactor:p.collateralFactor,liquidationFactor:p.liquidationFactor,liquidationDiscount:p.liquidationDiscount,liquidationPenalty:p.liquidationPanelty,liquidationReserveFactor:p.liquidationReserveFactor,maxCollateralAmount:p.maxCollateralAmount,totalCollateralAmount:p.totalCollateralAmount,isIsolated:await se(o,g)}),b=Pe(o,m);a[g]={coinName:g,symbol:o.parseSymbol(g),coinType:y,marketCoinType:o.parseMarketCoinType(g),coinWrappedType:o.getCoinWrappedType(g),coinPrice:f,collateralFactor:m.collateralFactor,liquidationFactor:m.liquidationFactor,liquidationDiscount:m.liquidationDiscount,liquidationPenalty:m.liquidationPenalty,liquidationReserveFactor:m.liquidationReserveFactor,...b};}return {pools:r,collaterals:a}},no=async({utils:o,scallopSuiKit:e},t)=>{let s={balanceSheet:[],collateralStat:[],borrowDynamic:[],interestModel:[],riskModel:[],borrowFeeKey:[],supplyLimitKey:[],borrowLimitKey:[],isolatedAssetKey:[]},r=new Map;for(let d of t){let l=o.constants.poolAddresses[d],u={balanceSheet:l?.lendingPoolAddress,collateralStat:l?.collateralPoolAddress,borrowDynamic:l?.borrowDynamic,interestModel:l?.interestModel,riskModel:l?.riskModel,borrowFeeKey:l?.borrowFeeKey,supplyLimitKey:l?.supplyLimitKey,borrowLimitKey:l?.borrowLimitKey,isolatedAssetKey:l?.isolatedAssetKey};Object.entries(u).forEach(([p,y])=>{y&&s[p].push(y);}),r.set(d,u);}let a={showContent:!0},n=await Promise.all([e.queryGetObjects(s.balanceSheet,a),e.queryGetObjects(s.collateralStat,a),e.queryGetObjects(s.borrowDynamic,a),e.queryGetObjects(s.interestModel,a),e.queryGetObjects(s.riskModel,a),e.queryGetObjects(s.borrowFeeKey,a),e.queryGetObjects(s.supplyLimitKey,a),e.queryGetObjects(s.borrowLimitKey,a)]),i={balanceSheet:new Map,collateralStat:new Map,borrowDynamic:new Map,interestModel:new Map,riskModel:new Map,borrowFeeKey:new Map,supplyLimitKey:new Map,borrowLimitKey:new Map,isolatedAssetKey:new Map,isIsolated:new Map};n.forEach((d,l)=>{let u=Object.keys(i)[l];d.forEach(p=>{i[u].set(p.objectId,p);});});let c={};for(let[d,l]of r)c[d]={balanceSheet:l.balanceSheet?i.balanceSheet.get(l.balanceSheet):void 0,collateralStat:l.collateralStat?i.collateralStat.get(l.collateralStat):void 0,borrowDynamic:l.borrowDynamic?i.borrowDynamic.get(l.borrowDynamic):void 0,interestModel:l.interestModel?i.interestModel.get(l.interestModel):void 0,riskModel:l.riskModel?i.riskModel.get(l.riskModel):void 0,borrowFeeKey:l.borrowFeeKey?i.borrowFeeKey.get(l.borrowFeeKey):void 0,supplyLimitKey:l.supplyLimitKey?i.supplyLimitKey.get(l.supplyLimitKey):void 0,borrowLimitKey:l.borrowLimitKey?i.borrowLimitKey.get(l.borrowLimitKey):void 0,isolatedAssetKey:l.isolatedAssetKey?i.isolatedAssetKey.get(l.isolatedAssetKey):void 0,isIsolated:o.constants.poolAddresses[d]?.isIsolated};return c},io=async(o,e,t=!1,s)=>{s=s??await o.utils.getCoinPrices();let r={},a={};if(t){let i=await o.indexer.getMarket(),c=l=>{l.coinPrice=s[l.coinName]??l.coinPrice,l.coinWrappedType=o.utils.getCoinWrappedType(l.coinName),r[l.coinName]=l;},d=l=>{l.coinPrice=s[l.coinName]??l.coinPrice,l.coinWrappedType=o.utils.getCoinWrappedType(l.coinName),a[l.coinName]=l;};return Object.values(i.pools).filter(l=>!!l).forEach(c),Object.values(i.collaterals).filter(l=>!!l).forEach(d),{pools:r,collaterals:a}}let n=await no(o,e);return await Promise.allSettled(e.map(async i=>{try{let c=await hs(o,i,t,s?.[i]??0,n[i]);c?.marketPool&&(r[i]=c?.marketPool),c?.collateral&&(a[i]=c.collateral);}catch(c){console.error(c);}})),{pools:r,collaterals:a}},bs=({balanceSheet:o,borrowDynamic:e,collateralStat:t,interestModel:s,riskModel:r,borrowFeeKey:a,supplyLimitKey:n,borrowLimitKey:i,isIsolated:c})=>{if(!o||!e||!s)throw new Error("Missing required market objects");let d=W(o),l=W(s),u=W(e),p=a?W(a):{value:"0"},y=n?W(n):"0",g=i?W(i):"0",f=r?W(r):void 0,m=t?W(t):void 0,b=f&&m?{type:l.type.fields,isIsolated:c,collateralFactor:f.collateral_factor.fields,liquidationFactor:f.liquidation_factor.fields,liquidationPenalty:f.liquidation_penalty.fields,liquidationDiscount:f.liquidation_discount.fields,liquidationReserveFactor:f.liquidation_revenue_factor.fields,maxCollateralAmount:f.max_collateral_amount,totalCollateralAmount:m.amount}:void 0;return {type:l.type.fields,maxBorrowRate:l.max_borrow_rate.fields,interestRate:u.interest_rate.fields,interestRateScale:u.interest_rate_scale,borrowIndex:u.borrow_index,lastUpdated:u.last_updated,cash:d.cash,debt:d.debt,marketCoinSupply:d.market_coin_supply,reserve:d.revenue,reserveFactor:l.revenue_factor.fields,borrowWeight:l.borrow_weight.fields,borrowFeeRate:p,baseBorrowRatePerSec:l.base_borrow_rate_per_sec.fields,borrowRateOnHighKink:l.borrow_rate_on_high_kink.fields,borrowRateOnMidKink:l.borrow_rate_on_mid_kink.fields,highKink:l.high_kink.fields,midKink:l.mid_kink.fields,minBorrowAmount:l.min_borrow_amount,isIsolated:c,supplyLimit:y,borrowLimit:g,parsedOriginMarketCollateral:b}},hs=async(o,e,t=!1,s,r)=>{if(s=s??(await o.utils.getCoinPrices())?.[e],t){let l=await o.indexer.getMarketPool(e);if(!l)return;l.coinPrice=s??l.coinPrice,l.coinWrappedType=o.utils.getCoinWrappedType(l.coinName);let u;return o.constants.whitelist.collateral.has(e)&&(u=await o.indexer.getMarketCollateral(e),u.coinPrice=s??u.coinPrice,u.coinWrappedType=o.utils.getCoinWrappedType(u.coinName)),{marketPool:l,collateral:u}}if(r??=(await no(o,[e]))[e],!r)throw new Error(`Failed to fetch required market objects for ${e}`);let a=bs(r),n=Xe(a),i=ze(o.utils,n),c=a.parsedOriginMarketCollateral?Ce(a.parsedOriginMarketCollateral):void 0,d=()=>({coinName:e,symbol:o.utils.parseSymbol(e),marketCoinType:o.utils.parseMarketCoinType(e),coinType:o.utils.parseCoinType(e)});return {marketPool:{...d(),sCoinType:o.utils.parseSCoinType(o.utils.parseMarketCoinName(e))??"",coinWrappedType:o.utils.getCoinWrappedType(e),coinPrice:s??0,highKink:n.highKink,midKink:n.midKink,reserveFactor:n.reserveFactor,borrowWeight:n.borrowWeight,borrowFee:n.borrowFee,marketCoinSupplyAmount:n.marketCoinSupplyAmount,minBorrowAmount:n.minBorrowAmount,...i},collateral:c?{...d(),coinWrappedType:o.utils.getCoinWrappedType(e),coinPrice:s,collateralFactor:c.collateralFactor,liquidationFactor:c.liquidationFactor,liquidationDiscount:c.liquidationDiscount,liquidationPenalty:c.liquidationPenalty,liquidationReserveFactor:c.liquidationReserveFactor,...Pe(o.utils,c)}:void 0}},co=async({utils:o,indexer:e,scallopSuiKit:t},s=[...o.constants.whitelist.collateral],r=!1)=>{let a=o.address.get("core.market"),n=await o.getCoinPrices()??{},i={};if(r){let d=await e.getMarketCollaterals(),l=u=>{s.includes(u.coinName)&&(u.coinPrice=n[u.coinName]??u.coinPrice,u.coinWrappedType=o.getCoinWrappedType(u.coinName),i[u.coinName]=u);};return Object.values(d).filter(u=>!!u).forEach(l),i}let c=await t.queryGetObject(a);return await Promise.allSettled(s.map(async d=>{let l=await He({utils:o,indexer:e,scallopSuiKit:t},d,r,c?.data,n?.[d]);l&&(i[d]=l);})),i},He=async({utils:o,indexer:e,scallopSuiKit:t},s,r=!1,a,n)=>{if(n=n??(await o.getCoinPrices())?.[s],r){let P=await e.getMarketCollateral(s);return P.coinPrice=n??P.coinPrice,P.coinWrappedType=o.getCoinWrappedType(P.coinName),P}let i=o.address.get("core.market");if(a=a||(await t.queryGetObject(i))?.data,!(a&&a.content?.dataType==="moveObject"))throw new Error("Failed to fetch marketObject");let c=a.content.fields,d=o.parseCoinType(s),l=c.risk_models.fields.table.fields.id.id,u=await t.queryGetDynamicFieldObject({parentId:l,name:{type:"0x1::type_name::TypeName",value:{name:d.substring(2)}}}),p=u?.data;if(!(p&&p.content&&"fields"in p.content))throw new Error(`Failed to fetch riskModelDynamicFieldObject for ${u?.error?.code.toString()}: `);let y=p.content.fields.value.fields,g=c.collateral_stats.fields.table.fields.id.id,f=await t.queryGetDynamicFieldObject({parentId:g,name:{type:"0x1::type_name::TypeName",value:{name:d.substring(2)}}}),m=f?.data;if(!(m&&m.content&&"fields"in m.content))throw new Error(`Failed to fetch collateralStatDynamicFieldObject for ${s}: ${f?.error?.code.toString()}`);let b=m.content.fields.value.fields,h=Ce({type:y.type.fields,collateralFactor:y.collateral_factor.fields,liquidationFactor:y.liquidation_factor.fields,liquidationDiscount:y.liquidation_discount.fields,liquidationPenalty:y.liquidation_penalty.fields,liquidationReserveFactor:y.liquidation_revenue_factor.fields,maxCollateralAmount:y.max_collateral_amount,totalCollateralAmount:b.amount,isIsolated:await se(o,s)}),T=Pe(o,h);return {coinName:s,symbol:o.parseSymbol(s),coinType:o.parseCoinType(s),marketCoinType:o.parseMarketCoinType(s),coinWrappedType:o.getCoinWrappedType(s),coinPrice:n??0,collateralFactor:h.collateralFactor,liquidationFactor:h.liquidationFactor,liquidationDiscount:h.liquidationDiscount,liquidationPenalty:h.liquidationPenalty,liquidationReserveFactor:h.liquidationReserveFactor,...T}},re=async({utils:o},e)=>{let t=e,s=o.constants.protocolObjectId,r=[],a=!1,n=null;do{let l=await o.scallopSuiKit.queryGetOwnedObjects({owner:t,filter:{StructType:`${s}::obligation::ObligationKey`},options:{showContent:!0},cursor:n,limit:10});if(!l)break;r.push(...l.data),l.hasNextPage&&l.nextCursor?(a=!0,n=l.nextCursor):a=!1;}while(a);let i=r.filter(l=>!!l.data),c=[],d=await o.scallopSuiKit.queryGetObjects(i.map(l=>l.data?.content).filter(l=>l?.dataType==="moveObject").map(l=>l.fields.ownership.fields.of));return await Promise.allSettled(i.map(async({data:l},u)=>{let p=l?.objectId,y=l?.content;if(p&&y&&"fields"in y){let g=y.fields,f=String(g.ownership.fields.of),m=await Ye(o,d[u]);c.push({id:f,keyId:p,locked:m});}})),c},Ye=async({scallopSuiKit:o},e)=>{let t=typeof e=="string"?(await o.queryGetObject(e))?.data:e,s=!1;return t&&t?.content?.dataType==="moveObject"&&"lock_key"in t.content.fields&&(s=!!t.content.fields.lock_key),s},xe=async({address:o,scallopSuiKit:e},t)=>{let s=o.get("core.packages.query.id"),r=o.get("core.version"),a=o.get("core.market"),n=`${s}::obligation_query::obligation_data`,i=[r,a,t,{objectId:utils.SUI_CLOCK_OBJECT_ID,mutable:!1,initialSharedVersion:"1"}];return (await e.queryInspectTxn({queryTarget:n,args:i}))?.events[0]?.parsedJson},lo=async({utils:o},e=[...o.constants.whitelist.lending],t)=>{let s=t??o.walletAddress,r={};return await Promise.allSettled(e.map(async a=>{let n=await Je({utils:o},a,s);r[a]=n;})),r},Je=async({utils:o},e,t)=>{let s=t??o.walletAddress,r=o.parseCoinType(e),a=await o.scallopSuiKit.queryGetCoinBalance({owner:s,coinType:r});return S__default.default(a?.totalBalance??"0").toNumber()},uo=async({utils:o},e,t)=>{e=e||[...o.constants.whitelist.lending].map(a=>o.parseMarketCoinName(a));let s=t??o.walletAddress,r={};return await Promise.allSettled(e.map(async a=>{let n=await Ze({utils:o},a,s);r[a]=n;})),r},Ze=async({utils:o},e,t)=>{let s=t??o.walletAddress,r=o.parseMarketCoinType(e),a=await o.scallopSuiKit.queryGetCoinBalance({owner:s,coinType:r});return S__default.default(a?.totalBalance??"0").toNumber()},po=async({utils:o},e,t=1e4)=>{let s=[],r={},a=e.reduce((c,d)=>{let l=o.parseCoinType(d).slice(2);return c[l]=d,c},{}),n=e.map(c=>{let d=o.constants.poolAddresses[c]?.flashloanFeeObject;return d||(s.push(c),null)}).filter(c=>!!c),i=await o.scallopSuiKit.queryGetObjects(n);if(s.length>0){let c=await oo(o,s,t);r={...r,...c};}return r={...r,...i.reduce((c,d)=>{if(d.content?.dataType==="moveObject"){let l=d.content.fields,u=d.content.fields.name.fields.name,p=+l.value;c[a[u]]=p/t;}return c},{})},r};var ae=class extends Error{constructor(e){super(`Unsupported oracle type: ${e}`),this.name="UnsupportedOracleError";}};var ne=class extends Error{constructor(e,t){super(`Unsupported LST oracle update for: ${e} with oracle: ${t}`),this.name="UnsupportedLstOracleError";}};var ie=class{constructor(e){this.registry=e;}get clockObject(){return {objectId:suiKit.SUI_CLOCK_OBJECT_ID,mutable:!1,initialSharedVersion:"1"}}get utils(){return this.registry.utils}},Ie=class extends ie{constructor(t){super(t);this.registry=t;}oracleType="pyth";updatePrice(t,s,r,a){let{pythFeedObjectId:n,pythRegistryId:i,pythStateId:c,pythPackageId:d}=this.registry.getPackages(r);t.moveCall(`${d}::rule::set_price_as_${a}`,[s,c,n,i,t.sharedObjectRef({objectId:suiKit.SUI_CLOCK_OBJECT_ID,mutable:!1,initialSharedVersion:"1"})],[this.utils.parseCoinType(r)]);}},ve=class extends ie{constructor(t){super(t);this.registry=t;}oracleType="pyth";updatePrice(t,s,r,a){let{lst:n,pythFeedObjectId:i,pythStateId:c}=this.registry.getPackages(r);if(!n[r])throw new ne(r,this.oracleType);let{id:d,configId:l,stakedSuiVaultId:u,safeId:p}=n[r];t.moveCall(`${d}::rule::set_price_as_${a}`,[s,c,i,l,u,p,t.sharedObjectRef(this.clockObject)]);}},je=class extends ie{constructor(t){super(t);this.registry=t;}oracleType="supra";updatePrice(t,s,r,a){let{supraPackageId:n,supraHolderId:i,supraRegistryId:c}=this.registry.getPackages(r);t.moveCall(`${n}::rule::set_price_as_${a}`,[s,i,c,t.sharedObjectRef(this.clockObject)],[this.utils.parseCoinType(r)]);}},Ne=class extends ie{constructor(t){super(t);this.registry=t;}oracleType="switchboard";updatePrice(t,s,r,a){let{switchboardPackageId:n,switchboardAggregatorId:i,switchboardRegistryId:c}=this.registry.getPackages(r);t.moveCall(`${n}::rule::set_price_as_${a}`,[s,i,c,t.sharedObjectRef(this.clockObject)],[this.utils.parseCoinType(r)]);}};var pe=class{constructor(e,t,s){this.tx=e;this.registry=t;this.strategies=new Map(Object.entries(s));}strategies},et=class extends pe{oracleName="pyth";SUPPORT_SUI_LST_SET=new Set(chunk4GSK5DO7_js.i);constructor(e,t){super(e,t,{default:new Ie(t),sui_lst:new ve(t)});}resolveStrategy(e){let t;this.SUPPORT_SUI_LST_SET.has(e)?t="sui_lst":t="default";let s=this.strategies.get(t);if(!s)throw new ne(e,this.oracleName);return s}updateXOracle(e,t,s){this.resolveStrategy(e).updatePrice(this.tx,s,e,t);}},tt=class extends pe{oracleName="supra";constructor(e,t){super(e,t,{default:new je(t)});}updateXOracle(e,t,s){this.strategies.get("default")?.updatePrice(this.tx,s,e,t);}},ot=class extends pe{oracleName="switchboard";constructor(e,t){super(e,t,{default:new Ne(t)});}updateXOracle(e,t,s){this.strategies.get("default")?.updatePrice(this.tx,s,e,t);}},yo=(o,e)=>{let t=e.oracleName;switch(t){case"pyth":return new et(o,e);case"supra":return new tt(o,e);case"switchboard":return new ot(o,e);default:throw new Error(`Unsupported oracle type: ${t}`)}};var _e=class{constructor(e){this.utils=e;}getAddressPath(e){return this.utils.address.get(e)}get getXOraclePackages(){return {xOraclePackageId:this.getAddressPath("core.packages.xOracle.id"),xOracleId:this.getAddressPath("core.oracles.xOracle")}}},me=class{constructor(e){this.xOraclePackageRegistry=e;}get utils(){return this.xOraclePackageRegistry.utils}get packageId(){return this.xOraclePackageRegistry.getAddressPath(`core.packages.${this.oracleName}.id`)}},st=class extends me{constructor(t){super(t);this.xOraclePackageRegistry=t;}oracleName="pyth";get getStaticPackages(){return {pythPackageId:this.packageId,pythRegistryId:this.xOraclePackageRegistry.getAddressPath("core.oracles.pyth.registry"),pythStateId:this.xOraclePackageRegistry.getAddressPath("core.oracles.pyth.state")}}getLstOracleConfigPackages(t){return this.xOraclePackageRegistry.getAddressPath(`core.oracles.pyth.lst.${t}`)}getLstPackages(t){let s=this.xOraclePackageRegistry.getAddressPath(`core.packages.pyth.lst.${t}`),r=this.getLstOracleConfigPackages(t);return {[t]:{...s,...r}}}getPackages(t){let s=this.getLstPackages(t);return {...this.getStaticPackages,pythFeedObjectId:this.xOraclePackageRegistry.getAddressPath(`core.coins.${t}.oracle.pyth.feedObject`),lst:s}}},rt=class extends me{constructor(t){super(t);this.xOraclePackageRegistry=t;}oracleName="supra";getLstPackages(t){throw new Error("Method not implemented.")}getPackages(t){return {supraPackageId:this.packageId,supraRegistryId:this.xOraclePackageRegistry.getAddressPath("core.oracles.supra.registry"),supraHolderId:this.xOraclePackageRegistry.getAddressPath("core.oracles.supra.holder")}}},at=class extends me{constructor(t){super(t);this.xOraclePackageRegistry=t;}oracleName="switchboard";getLstPackages(t){throw new Error("Method not implemented.")}get getStaticPackages(){return {switchboardPackageId:this.packageId,switchboardRegistryId:this.xOraclePackageRegistry.getAddressPath("core.oracles.switchboard.registry")}}getPackages(t){return {...this.getStaticPackages,switchboardAggregatorId:this.xOraclePackageRegistry.getAddressPath(`core.coins.${t}.oracle.switchboard`)}}};var go=(o,e)=>{switch(o){case"pyth":return new st(e);case"supra":return new rt(e);case"switchboard":return new at(e);default:throw new ae(o)}};var nt=class{constructor(e,t,s,r){this.tx=e;this.builder=t;this.coinNames=s;this.options=r;}oracleName="pyth";filterSponsoredFeeds(){let{usePythPullModel:e,pythSponsoredFeeds:t}=this.options,s=new Set(t);return this.coinNames.filter(r=>{let a=!e&&!s.has(r);return e||a})}async updatePriceFeeds(){let e=new pythSuiJs.SuiPythClient(this.builder.suiKit.client,this.builder.address.get("core.oracles.pyth.state"),this.builder.address.get("core.oracles.pyth.wormholeState")),t=this.filterSponsoredFeeds();if(t.length===0)return;let s=t.map(a=>this.builder.address.get(`core.coins.${a}.oracle.pyth.feed`)),r=this.builder.utils.pythEndpoints??[...this.builder.constants.whitelist.pythEndpoints];for(let a of r)try{let i=await new pythSuiJs.SuiPriceServiceConnection(a).getPriceFeedsUpdateData(s);await e.updatePriceFeeds(this.tx.txBlock,i,s);break}catch(n){console.warn(`Failed to update price feeds with endpoint ${a}: ${n}`);}}},fo=(o,e,t,s,r)=>{switch(o){case"pyth":return new nt(e,t,s,r);case"supra":throw new Error("Supra price feed updater is not implemented yet.");case"switchboard":throw new Error("Switchboard price feed updater is not implemented yet.");default:throw new Error(`Unsupported oracle type: ${o}`)}};var Be=class{constructor(e,t){this.txBlock=e;this.xOraclePackageRegistry=t;}get utils(){return this.xOraclePackageRegistry.utils}buildRequest(e){let{xOraclePackageId:t,xOracleId:s}=this.xOraclePackageRegistry.getXOraclePackages,r=`${t}::x_oracle::price_update_request`,a=[this.utils.parseCoinType(e)];return this.txBlock.moveCall(r,[s],a)}confirmRequest(e,t){let{xOraclePackageId:s,xOracleId:r}=this.xOraclePackageRegistry.getXOraclePackages,a=`${s}::x_oracle::confirm_price_update_request`,n=[this.utils.parseCoinType(e)];this.txBlock.moveCall(a,[r,t,this.txBlock.sharedObjectRef({objectId:suiKit.SUI_CLOCK_OBJECT_ID,mutable:!1,initialSharedVersion:"1"})],n);}};var ye=async(o,e,t=[...o.constants.whitelist.lending],s={})=>{t=[...new Set(t)];let r={usePythPullModel:o.usePythPullModel,useOnChainXOracleList:o.useOnChainXOracleList,pythSponsoredFeeds:o.pythSponsoredFeeds,...s},a=r.useOnChainXOracleList?await o.query.getAssetOracles():chunk4GSK5DO7_js.j,n=Object.entries(a).reduce((p,[y,{primary:g,secondary:f}])=>(p[y]={primary:new Set(g),secondary:new Set(f)},p),{}),i=new Set(Object.values(a).flatMap(({primary:p,secondary:y})=>[...p,...y])),c=(p,y)=>{let g=n[p];if(!g)return {isPrimary:!1,isSecondary:!1};let{primary:f,secondary:m}=g,b=f.has(y),h=m.has(y);return {isPrimary:b,isSecondary:h}},d=new _e(o.utils),l={};for(let p of i){let y=t.filter(g=>{let{isPrimary:f,isSecondary:m}=c(g,p);return !(!f&&!m)});y.length>0&&await fo(p,e,o,y,r).updatePriceFeeds(),l[p]=yo(e,go(p,d));}let u=new Be(e,d);for(let p of t){let y=a[p],g=u.buildRequest(p);Object.keys(y).forEach(f=>{y[f].forEach(b=>{let h=l[b];if(!h)throw new ae(b);h.updateXOracle(p,f,g);});}),u.confirmRequest(p,g);}};var ge=async(...o)=>{let[e,t,s,r]=o;if(o.length===3&&s)return {obligationId:s};if(o.length===4&&s&&r)return {obligationId:s,obligationKey:r};let a=x(t),n=await re(e,a);if(n.length===0)throw new Error(`No obligation found for sender ${a}`);return {obligationId:n[0].id,obligationKey:n[0].keyId}},Ps=({builder:o,txBlock:e})=>{let t={protocolPkg:o.address.get("core.packages.protocol.id"),market:o.address.get("core.market"),version:o.address.get("core.version"),coinDecimalsRegistry:o.address.get("core.coinDecimalsRegistry"),xOracle:o.address.get("core.oracles.xOracle")},r=`${o.address.get("referral.id")}::scallop_referral_program::REFERRAL_WITNESS`,a=e.sharedObjectRef({objectId:utils.SUI_CLOCK_OBJECT_ID,mutable:!1,initialSharedVersion:"1"});return {openObligation:()=>{let[n,i,c]=o.moveCall(e,`${t.protocolPkg}::open_obligation::open_obligation`,[t.version]);return [n,i,c]},returnObligation:(n,i)=>{o.moveCall(e,`${t.protocolPkg}::open_obligation::return_obligation`,[t.version,n,i]);},openObligationEntry:()=>{o.moveCall(e,`${t.protocolPkg}::open_obligation::open_obligation_entry`,[t.version]);},addCollateral:(n,i,c)=>{let d=o.utils.parseCoinType(c);o.moveCall(e,`${t.protocolPkg}::deposit_collateral::deposit_collateral`,[t.version,n,t.market,i],[d]);},takeCollateral:(n,i,c,d)=>{let l=o.utils.parseCoinType(d);return o.moveCall(e,`${t.protocolPkg}::withdraw_collateral::withdraw_collateral`,[t.version,n,i,t.market,t.coinDecimalsRegistry,e.pure.u64(c),t.xOracle,a],[l])},deposit:(n,i)=>{let c=o.utils.parseCoinType(i);return o.moveCall(e,`${t.protocolPkg}::mint::mint`,[t.version,t.market,n,a],[c])},depositEntry:(n,i)=>{let c=o.utils.parseCoinType(i);return o.moveCall(e,`${t.protocolPkg}::mint::mint_entry`,[t.version,t.market,n,a],[c])},withdraw:(n,i)=>{let c=o.utils.parseCoinType(i);return o.moveCall(e,`${t.protocolPkg}::redeem::redeem`,[t.version,t.market,n,a],[c])},withdrawEntry:(n,i)=>{let c=o.utils.parseCoinType(i);return o.moveCall(e,`${t.protocolPkg}::redeem::redeem_entry`,[t.version,t.market,n,a],[c])},borrow:(n,i,c,d)=>{let l=o.utils.parseCoinType(d);return o.moveCall(e,`${t.protocolPkg}::borrow::borrow`,[t.version,n,i,t.market,t.coinDecimalsRegistry,c,t.xOracle,a],[l])},borrowWithReferral:(n,i,c,d,l)=>{let u=o.utils.parseCoinType(l);return o.moveCall(e,`${t.protocolPkg}::borrow::borrow_with_referral`,[t.version,n,i,t.market,t.coinDecimalsRegistry,c,typeof d=="number"?e.pure.u64(d):d,t.xOracle,a],[u,r])},borrowEntry:(n,i,c,d)=>{let l=o.utils.parseCoinType(d);return o.moveCall(e,`${t.protocolPkg}::borrow::borrow_entry`,[t.version,n,i,t.market,t.coinDecimalsRegistry,e.pure.u64(c),t.xOracle,a],[l])},repay:(n,i,c)=>{let d=o.utils.parseCoinType(c);o.moveCall(e,`${t.protocolPkg}::repay::repay`,[t.version,n,t.market,i,a],[d]);},borrowFlashLoan:(n,i)=>{let c=o.utils.parseCoinType(i);return o.moveCall(e,`${t.protocolPkg}::flash_loan::borrow_flash_loan`,[t.version,t.market,n],[c])},repayFlashLoan:(n,i,c)=>{let d=o.utils.parseCoinType(c);o.moveCall(e,`${t.protocolPkg}::flash_loan::repay_flash_loan`,[t.version,t.market,n,i],[d]);}}},As=({builder:o,txBlock:e})=>({addCollateralQuick:async(t,s,r)=>{let a=x(e),{obligationId:n}=await ge(o,e,r);if(s==="sui"){let[i]=e.splitSUIFromGas([t]);e.addCollateral(n,i,s);}else {let{leftCoin:i,takeCoin:c}=await o.selectCoin(e,s,t,a);e.addCollateral(n,c,s),e.transferObjects([i],a);}},takeCollateralQuick:async(t,s,r,a)=>{let n=await ge(o,e,r,a),i=await o.utils.getObligationCoinNames(n.obligationId);return await ye(o,e,i),e.takeCollateral(n.obligationId,n.obligationKey,t,s)},depositQuick:async(t,s,r=!0)=>{let a=x(e),n;if(s==="sui"){let[i]=e.splitSUIFromGas([t]);n=e.deposit(i,s);}else {let{leftCoin:i,takeCoin:c}=await o.selectCoin(e,s,t,a);e.transferObjects([i],a),n=e.deposit(c,s);}return r?e.mintSCoin(o.utils.parseMarketCoinName(s),n):n},withdrawQuick:async(t,s)=>{let r=x(e),a=o.utils.parseSCoinName(s);if(!a)throw new Error(`No sCoin for ${s}`);let{sCoin:n,marketCoin:i}=await o.selectSCoinOrMarketCoin(e,a,t,r);if(n){let c=e.burnSCoin(a,n);i?e.mergeCoins(i,[c]):i=c;}if(!i)throw new Error(`No market coin for ${s}`);return e.withdraw(i,s)},borrowQuick:async(t,s,r,a)=>{let n=await ge(o,e,r,a),c=[...await o.utils.getObligationCoinNames(n.obligationId)??[],s];return await ye(o,e,c),e.borrow(n.obligationId,n.obligationKey,t,s)},borrowWithReferralQuick:async(t,s,r,a,n)=>{let i=await ge(o,e,a,n),d=[...await o.utils.getObligationCoinNames(i.obligationId)??[],s];return await ye(o,e,d),e.borrowWithReferral(i.obligationId,i.obligationKey,r,t,s)},repayQuick:async(t,s,r)=>{let a=x(e),n=await ge(o,e,r);if(s==="sui"){let[i]=e.splitSUIFromGas([t]);return e.repay(n.obligationId,i,s)}else {let{leftCoin:i,takeCoin:c}=await o.selectCoin(e,s,t,a);return e.transferObjects([i],a),e.repay(n.obligationId,c,s)}},updateAssetPricesQuick:async t=>await ye(o,e,t)}),ho=(o,e)=>{let t=e instanceof transactions.Transaction?new suiKit.SuiTxBlock(e):e||new suiKit.SuiTxBlock,s=Ps({builder:o,txBlock:t}),r=new Proxy(t,{get:(n,i)=>i in s?Reflect.get(s,i):Reflect.get(n,i)}),a=As({builder:o,txBlock:r});return new Proxy(r,{get:(n,i)=>i in a?Reflect.get(a,i):Reflect.get(n,i)})};var So=async(o,e)=>{let t={spool:[],spoolReward:[],sCoinTreasury:[]},s=new Map;for(let l of e){let u=o.constants.poolAddresses[l],p={spool:u?.spool,spoolReward:u?.spoolReward,sCoinTreasury:u?.sCoinTreasury};Object.entries(p).forEach(([y,g])=>{g&&t[y].push(g);}),s.set(l,p);}let[r,a,n]=await Promise.all([o.scallopSuiKit.queryGetObjects(t.spool),o.scallopSuiKit.queryGetObjects(t.spoolReward),o.scallopSuiKit.queryGetObjects(t.sCoinTreasury)]),i=l=>new Map(l.map(u=>[u.objectId,u])),c={spool:i(r),spoolReward:i(a),sCoinTreasury:i(n)},d={};for(let[l,u]of s)d[l]={spool:u.spool?c.spool.get(u.spool):void 0,spoolReward:u.spoolReward?c.spoolReward.get(u.spoolReward):void 0,sCoinTreasury:u.sCoinTreasury?c.sCoinTreasury.get(u.sCoinTreasury):void 0};return d},Os=({spool:o,spoolReward:e})=>{if(!o||!e)throw new Error("spool or spoolReward is undefined");let t=W(o),s=W(e);return {stakeType:t.stake_type,maxDistributedPoint:t.max_distributed_point,distributedPoint:t.distributed_point,distributedPointPerPeriod:t.distributed_point_per_period,pointDistributionTime:t.point_distribution_time,maxStake:t.max_stakes,stakes:t.stakes,index:t.index,createdAt:t.created_at,lastUpdate:t.last_update,...s}},wo=async(o,e=[...o.constants.whitelist.spool],t=!1,s,r)=>{let a=e.map(c=>o.utils.parseCoinName(c));if(s=s??(await o.getMarketPools(a,{indexer:t})).pools,r=r??await o.getAllCoinPrices({marketPools:s})??{},!s)throw new Error(`Fail to fetch marketPools for ${a}`);let n={};if(t){let c=await o.indexer.getSpools(),d=l=>{if(!e.includes(l.marketCoinName))return;let u=o.utils.parseCoinName(l.marketCoinName),p=o.utils.getSpoolRewardCoinName();l.coinPrice=r[u]??l.coinPrice,l.marketCoinPrice=r[l.marketCoinName]??l.marketCoinPrice,l.rewardCoinPrice=r[p]??l.rewardCoinPrice,n[l.marketCoinName]=l;};return Object.values(c).filter(l=>!!l).forEach(d),n}let i=await So(o,a);return await Promise.allSettled(e.map(async(c,d)=>{try{let l=a[d],u=await Rs(o,c,t,r,i[l]);u&&(n[c]=u);}catch(l){console.error(l);}})),n},Rs=async(o,e,t=!1,s,r)=>{let a=o.utils.parseCoinName(e);if(s=s||await o.getAllCoinPrices(),t){let m=await o.indexer.getSpool(e),b=o.utils.parseCoinName(e),h=o.utils.getSpoolRewardCoinName();return m.coinPrice=s?.[b]??m.coinPrice,m.marketCoinPrice=s?.[e]??m.marketCoinPrice,m.rewardCoinPrice=s?.[h]??m.rewardCoinPrice,m}r??=(await So(o,[a]))[a];let n=o.utils.getSpoolRewardCoinName();s=s||await o.utils.getCoinPrices();let i=Os(r),c=Wt(i),d=s?.[e]??0,l=o.utils.getCoinDecimal(e),u=Gt(c,d,l),p=Xt(i),y=s?.[n]??0,g=o.utils.getCoinDecimal(n),f=zt(c,p,u,y,g);return {marketCoinName:e,symbol:o.utils.parseSymbol(e),coinType:o.utils.parseCoinType(a),marketCoinType:o.utils.parseMarketCoinType(a),rewardCoinType:o.utils.isMarketCoin(n)?o.utils.parseMarketCoinType(n):o.utils.parseCoinType(n),sCoinType:o.utils.parseSCoinType(e)??"",coinDecimal:o.utils.getCoinDecimal(a),rewardCoinDecimal:o.utils.getCoinDecimal(n),coinPrice:s?.[a]??0,marketCoinPrice:d,rewardCoinPrice:y,maxPoint:c.maxPoint,distributedPoint:c.distributedPoint,maxStake:c.maxStake,...u,exchangeRateNumerator:p.exchangeRateNumerator,exchangeRateDenominator:p.exchangeRateDenominator,...f}},be=async({utils:o},e)=>{let t=e||o.suiKit.currentAddress,s=o.address.get("spool.object"),r=`${s}::spool_account::SpoolAccount`,a=[],n=!1,i=null;do{let u=await o.scallopSuiKit.queryGetOwnedObjects({owner:t,filter:{StructType:r},options:{showContent:!0,showType:!0},cursor:i,limit:10});u&&(a.push(...u.data),u.hasNextPage&&u.nextCursor?(n=!0,i=u.nextCursor):n=!1);}while(n);let c=[...o.constants.whitelist.spool].reduce((u,p)=>(u[p]=[],u),{}),d=Object.keys(c).reduce((u,p)=>{let y=o.parseCoinName(p),g=o.parseMarketCoinType(y);return u[p]=`${s}::spool_account::SpoolAccount<${g}>`,u},{}),l=Object.entries(d).reduce((u,[p,y])=>(u[y]=p,u),{});for(let u of a.map(p=>p.data)){let p=u?.objectId,y=u?.type;if(p&&u?.content&&"fields"in u.content){let g=u.content.fields,f=String(g.spool_id),m=String(g.stake_type.fields.name),b=Number(g.stakes),h=Number(g.index),T=Number(g.points),P=Number(g.total_points),D={sweth:c.sweth,ssui:c.ssui,swusdc:c.swusdc,swusdt:c.swusdt,scetus:c.scetus,safsui:c.safsui,shasui:c.shasui,svsui:c.svsui,susdc:c.susdc},k=utils.normalizeStructTag(y),I=D[l[k]];I&&I.push({id:p,type:k,stakePoolId:f,stakeType:utils.normalizeStructTag(m),staked:b,index:h,points:T,totalPoints:P});}}return c},it=async({utils:o},e)=>{let t=o.address.get(`spool.pools.${e}.id`),s,r=await o.scallopSuiKit.queryGetObject(t);if(r?.data){let a=r.data,n=a.objectId,i=a.type;if(a.content&&"fields"in a.content){let c=a.content.fields,d=Number(c.max_distributed_point),l=Number(c.distributed_point),u=Number(c.distributed_point_per_period),p=Number(c.point_distribution_time),y=Number(c.max_stakes),g=String(c.stake_type.fields.name),f=Number(c.stakes),m=Number(c.index),b=Number(c.created_at),h=Number(c.last_update);s={id:n,type:utils.normalizeStructTag(i),maxPoint:d,distributedPoint:l,pointPerPeriod:u,period:p,maxStake:y,stakeType:utils.normalizeStructTag(g),totalStaked:f,index:m,createdAt:b,lastUpdate:h};}}return s},ct=async({utils:o},e)=>{let t=o.address.get(`spool.pools.${e}.rewardPoolId`),s,r=await o.scallopSuiKit.queryGetObject(t);if(r?.data){let a=r.data,n=a.objectId,i=a.type;if(a.content&&"fields"in a.content){let c=a.content.fields,d=String(c.spool_id),l=Number(c.exchange_rate_numerator),u=Number(c.exchange_rate_denominator),p=Number(c.rewards),y=Number(c.claimed_rewards);s={id:n,type:utils.normalizeStructTag(i),stakePoolId:d,ratioNumerator:l,ratioDenominator:u,rewards:p,claimedRewards:y};}}return s};var To=async(...o)=>{let[e,t,s,r]=o;if(o.length===4&&r)return [r];let a=x(t),n=await be(e,a);if(n[s].length===0)throw new Error(`No stake account id found for sender ${a}`);return n[s].map(i=>i.id)},vs=async(...o)=>{let[e,t,s,r]=o,a=x(t),n=await be(e,a);if(n[s].length===0)throw new Error(`No stake account found for sender ${a}`);return r?n[s].filter(c=>c.id===r):n[s]},Co=async(o,e,t,s,r,a,n=!1)=>{try{let{takeCoin:i,leftCoin:c,totalAmount:d}=n?await o.selectSCoin(e,s,r,a):await o.selectMarketCoin(e,s,r,a);if(n){let l=e.burnSCoin(s,i);e.stake(t,l,s);}else e.stake(t,i,s);return e.transferObjects([c],a),d}catch{return 0}},js=({builder:o,txBlock:e})=>{let t={spoolPkg:o.address.get("spool.id")},s=e.sharedObjectRef({objectId:utils.SUI_CLOCK_OBJECT_ID,mutable:!1,initialSharedVersion:"1"});return {createStakeAccount:r=>{let a=o.utils.parseMarketCoinType(r),n=o.address.get(`spool.pools.${r}.id`);return o.moveCall(e,`${t.spoolPkg}::user::new_spool_account`,[n,s],[a])},stake:(r,a,n)=>{let i=o.utils.parseMarketCoinType(n),c=o.address.get(`spool.pools.${n}.id`);o.moveCall(e,`${t.spoolPkg}::user::stake`,[c,r,a,s],[i]);},unstake:(r,a,n)=>{let i=o.utils.parseMarketCoinType(n),c=o.address.get(`spool.pools.${n}.id`);return o.moveCall(e,`${t.spoolPkg}::user::unstake`,[c,r,a,s],[i])},claim:(r,a)=>{let n=o.address.get(`spool.pools.${a}.id`),i=o.address.get(`spool.pools.${a}.rewardPoolId`),c=o.utils.parseMarketCoinType(a),d=o.utils.getSpoolRewardCoinName(),l=o.utils.parseCoinType(d);return o.moveCall(e,`${t.spoolPkg}::user::redeem_rewards`,[n,i,r,s],[c,l])}}},Ns=({builder:o,txBlock:e})=>({stakeQuick:async(t,s,r)=>{let a=x(e),n=await To(o,e,s,r);if(n.length===0)throw new Error(`No stakeAccountIds found for user ${a}`);if(typeof t=="number"){let i=await Co(o,e,n[0],s,t,a);t-=i,t>0&&await Co(o,e,n[0],s,t,a,!0);}else e.stake(n[0],t,s);},unstakeQuick:async(t,s,r,a=!0)=>{let n=await vs(o,e,s,r),i=[];for(let c of n){if(c.staked===0)continue;let d=Math.min(t,c.staked),l=await e.unstake(c.id,d,s);if(a){let u=await e.mintSCoin(s,l);i.push(u);}else i.push(l);if(t-=d,t<=0)break}if(i.length>0){let c=i[0];return i.length>1&&e.mergeCoins(c,i.slice(1)),c}},claimQuick:async(t,s)=>{let r=await To(o,e,t,s),a=[];for(let n of r){let i=await e.claim(n,t);a.push(i);}return a}}),Po=(o,e)=>{let t=e instanceof transactions.Transaction?new suiKit.SuiTxBlock(e):e||new suiKit.SuiTxBlock,s=js({builder:o,txBlock:t}),r=new Proxy(t,{get:(n,i)=>i in s?Reflect.get(s,i):Reflect.get(n,i)}),a=Ns({builder:o,txBlock:r});return new Proxy(r,{get:(n,i)=>i in a?Reflect.get(a,i):Reflect.get(n,i)})};var Me=async(...o)=>{let[e,t,s,r]=o;if(o.length===4&&s&&r&&typeof s=="string"){let c=await Ye(e,s);return {obligationId:s,obligationKey:r,obligationLocked:c}}let a=x(t),n=await re(e,a);if(n.length===0)throw new Error(`No obligation found for sender ${a}`);let i=n.find(c=>c.id===s||c.keyId===r);if(!i)throw new Error(`No obligation found for sender ${a} with id ${s} or key ${r}`);return {obligationId:i.id,obligationKey:i.keyId,obligationLocked:i.locked}},Ms=({builder:o,txBlock:e})=>{let t={borrowIncentivePkg:o.address.get("borrowIncentive.id"),query:o.address.get("borrowIncentive.query"),config:o.address.get("borrowIncentive.config"),incentivePools:o.address.get("borrowIncentive.incentivePools"),incentiveAccounts:o.address.get("borrowIncentive.incentiveAccounts"),obligationAccessStore:o.address.get("core.obligationAccessStore")},s={table:o.address.get("vesca.table"),treasury:o.address.get("vesca.treasury"),config:o.address.get("vesca.config")},r=e.sharedObjectRef({objectId:suiKit.SUI_CLOCK_OBJECT_ID,mutable:!1,initialSharedVersion:"1"});return {stakeObligation:(a,n)=>{o.moveCall(e,`${t.borrowIncentivePkg}::user::stake`,[t.config,t.incentivePools,t.incentiveAccounts,n,a,t.obligationAccessStore,r]);},stakeObligationWithVesca:(a,n,i)=>{o.moveCall(e,`${t.borrowIncentivePkg}::user::stake_with_ve_sca_v2`,[t.config,t.incentivePools,t.incentiveAccounts,n,a,t.obligationAccessStore,s.config,s.treasury,s.table,i,o.address.get("vesca.subsTable"),o.address.get("vesca.subsWhitelist"),r],[]);},unstakeObligation:(a,n)=>{o.moveCall(e,`${t.borrowIncentivePkg}::user::unstake_v2`,[t.config,t.incentivePools,t.incentiveAccounts,n,a,o.address.get("vesca.subsTable"),o.address.get("vesca.subsWhitelist"),r]);},claimBorrowIncentive:(a,n,i)=>{let c=o.utils.parseCoinType(i);return o.moveCall(e,`${t.borrowIncentivePkg}::user::redeem_rewards`,[t.config,t.incentivePools,t.incentiveAccounts,n,a,r],[c])},deactivateBoost:(a,n)=>{o.moveCall(e,`${t.borrowIncentivePkg}::user::deactivate_boost_v2`,[t.config,t.incentivePools,t.incentiveAccounts,a,n,o.address.get("vesca.subsTable"),o.address.get("vesca.subsWhitelist"),r]);}}},Fs=({builder:o,txBlock:e})=>({stakeObligationQuick:async(t,s)=>{let{obligationId:r,obligationKey:a,obligationLocked:n}=await Me(o,e,t,s),i=!!e.txBlock.blockData.transactions.find(c=>c.kind==="MoveCall"&&(c.target===`${chunk4GSK5DO7_js.n}::user::unstake`||c.target===`${o.address.get("borrowIncentive.id")}::user::unstake_v2`||c.target===`${o.address.get("borrowIncentive.id")}::user::unstake`));(!n||i)&&e.stakeObligation(r,a);},stakeObligationWithVeScaQuick:async(t,s,r)=>{let{obligationId:a,obligationKey:n,obligationLocked:i}=await Me(o,e,t,s),c=!!e.txBlock.blockData.transactions.find(d=>d.kind==="MoveCall"&&(d.target===`${chunk4GSK5DO7_js.n}::user::unstake`||d.target===`${o.address.get("borrowIncentive.id")}::user::unstake_v2`||d.target===`${o.address.get("borrowIncentive.id")}::user::unstake`));if(!i||c){let l=await o.query.getBindedVeScaKey(a)??r;l?e.stakeObligationWithVesca(a,n,l):e.stakeObligation(a,n);}},unstakeObligationQuick:async(t,s)=>{let{obligationId:r,obligationKey:a,obligationLocked:n}=await Me(o,e,t,s);n&&e.unstakeObligation(r,a);},claimBorrowIncentiveQuick:async(t,s,r)=>{let{obligationId:a,obligationKey:n}=await Me(o,e,s,r);return e.claimBorrowIncentive(a,n,t)}}),Oo=(o,e)=>{let t=e instanceof transactions.Transaction?new suiKit.SuiTxBlock(e):e||new suiKit.SuiTxBlock,s=Ms({builder:o,txBlock:t}),r=new Proxy(t,{get:(n,i)=>i in s?Reflect.get(s,i):Reflect.get(n,i)}),a=Fs({builder:o,txBlock:r});return new Proxy(r,{get:(n,i)=>i in a?Reflect.get(a,i):Reflect.get(n,i)})};var Es=async(o,e)=>{let t=e||o.suiKit.currentAddress,r=`${o.address.get("vesca.object")}::ve_sca::VeScaKey`,a=[],n=!1,i=null;do{let d=await o.scallopSuiKit.queryGetOwnedObjects({owner:t,filter:{StructType:r},cursor:i,limit:10});d&&(a.push(...d.data),d&&d.hasNextPage&&d.nextCursor?(n=!0,i=d.nextCursor):n=!1);}while(n);return a.map(d=>d.data).filter(d=>!!d)},Ke=async({utils:o},e,t)=>{let s=await Es(o,e),r=Array(s.length).fill(null),a=s.map(async(i,c)=>{let d=await oe(o,i);d&&(r[c]=d);});await Promise.allSettled(a);let n=r.filter(Boolean).sort((i,c)=>c.currentVeScaBalance-i.currentVeScaBalance);return t?n.filter(i=>i.lockedScaAmount!=="0"):n},Ro=zod.z.object({objectId:zod.z.string(),digest:zod.z.string(),version:zod.z.string()}),oe=async(o,e)=>{let t=o.address.get("vesca.tableId");if(!e)return;typeof e=="object"&&(e=Ro.parse(e));let s,r=await o.scallopSuiKit.queryGetDynamicFieldObject({parentId:t,name:{type:"0x2::object::ID",value:typeof e=="string"?e:e.objectId}});if(!r)return;let a=r.data;if(a&&a.content&&a.content.dataType==="moveObject"&&"fields"in a.content){let n=a.content.fields.value.fields,i=Math.max(+n.unlock_at*1e3-Date.now(),0),c=String(n.locked_sca_amount),d=S__default.default(n.locked_sca_amount).shiftedBy(-9).toNumber(),l=d*(Math.floor(i/1e3)/126144e3);s={id:a.objectId,keyId:typeof e=="string"?e:e.objectId,keyObject:typeof e=="string"?void 0:e,object:Ro.parse(r.data),lockedScaAmount:c,lockedScaCoin:d,currentVeScaBalance:l,unlockAt:S__default.default(n.unlock_at*1e3).toNumber()};}return s},Us=async(o,e)=>{let t=o.address.get("vesca.id"),s=o.address.get("vesca.config");e=e??o.address.get("vesca.treasury");let r=new suiKit.SuiTxBlock,a=r.sharedObjectRef({objectId:suiKit.SUI_CLOCK_OBJECT_ID,mutable:!1,initialSharedVersion:"1"}),n=`${t}::treasury::refresh`,i=[s,e,a],c=`${t}::treasury::total_ve_sca_amount`,d=[e,a],l=await Promise.all(i.map(async f=>typeof f=="string"?(await o.scallopSuiKit.queryGetObject(f))?.data:f)),u=await Promise.all(d.map(async f=>typeof f=="string"?(await o.scallopSuiKit.queryGetObject(f))?.data:f));r.moveCall(n,l),r.moveCall(c,u);let p=await r.txBlock.build({client:o.suiKit.client,onlyTransactionKind:!0}),g=(await o.scallopSuiKit.queryClient.fetchQuery({queryKey:chunk4GSK5DO7_js.o.rpc.getTotalVeScaTreasuryAmount({refreshArgs:i,vescaAmountArgs:d,node:o.scallopSuiKit.currentFullNode}),queryFn:async()=>await o.suiKit.inspectTxn(p)})).results;if(g&&g[1]?.returnValues){let f=Uint8Array.from(g[1].returnValues[0][0]),m=g[1].returnValues[0][1];return Vs__default.default(m==="u64","Result type is not u64"),bcs.bcs.u64().parse(f)}return "0"},xo=async o=>{let e=o.address.get("vesca.treasury"),t=await o.scallopSuiKit.queryGetObject(e);if(!t||t.data?.content?.dataType!=="moveObject")return null;let s=t.data.content.fields,r=S__default.default(s.unlock_schedule.fields.locked_sca_amount).shiftedBy(-9).toNumber(),a=S__default.default(await Us(o,t.data)??0).shiftedBy(-9).toNumber(),n=r>0?a/r*4:0;return {totalLockedSca:r,totalVeSca:a,averageLockingPeriod:n,averageLockingPeriodUnit:"year"}};var he=async(...o)=>{let[e,t,s]=o;if(o.length===3&&s&&typeof s<"u"){let n=await oe(e.utils,s);return n||void 0}let r=x(t),a=await Ke(e,r);if(a.length!==0)return s?a.find(({keyId:n})=>(typeof s=="string"?s:s.objectId)===n):a[0]},lt=async(...o)=>{let[e,t,s]=o;try{let r=await e.scallopSuiKit.queryGetDynamicFieldObject({parentId:s,name:{type:"0x2::object::ID",value:t}});if(!r?.data)return !1;let a=r.data.content.fields.value.fields.contents;return Array.isArray(a)&&a.length>0}catch(r){return console.error(r),!1}},$s=({builder:o,txBlock:e})=>{let t={id:o.address.get("vesca.id"),table:o.address.get("vesca.table"),treasury:o.address.get("vesca.treasury"),config:o.address.get("vesca.config"),subsTable:o.address.get("vesca.subsTable")},s=e.sharedObjectRef({objectId:suiKit.SUI_CLOCK_OBJECT_ID,mutable:!1,initialSharedVersion:"1"});return {lockSca:(r,a)=>o.moveCall(e,`${t.id}::ve_sca::mint_ve_sca_key`,[t.config,t.table,t.treasury,r,a,s],[]),extendLockPeriod:(r,a)=>{o.moveCall(e,`${t.id}::ve_sca::extend_lock_period`,[t.config,r,t.table,t.treasury,a,s],[]);},extendLockAmount:(r,a)=>{o.moveCall(e,`${t.id}::ve_sca::lock_more_sca`,[t.config,r,t.table,t.treasury,a,s],[]);},renewExpiredVeSca:(r,a,n)=>{o.moveCall(e,`${t.id}::ve_sca::renew_expired_ve_sca`,[t.config,r,t.table,t.treasury,a,n,s],[]);},redeemSca:r=>o.moveCall(e,`${t.id}::ve_sca::redeem`,[t.config,r,t.table,t.treasury,s],[]),mintEmptyVeSca:()=>o.moveCall(e,`${t.id}::ve_sca::mint_ve_sca_placeholder_key`,[t.config,t.table],[]),splitVeSca:(r,a)=>o.moveCall(e,`${t.id}::ve_sca::split`,[t.config,r,t.table,t.subsTable,e.pure.u64(a)]),mergeVeSca:(r,a)=>o.moveCall(e,`${t.id}::ve_sca::merge`,[t.config,r,a,t.table,t.subsTable,e.sharedObjectRef({objectId:suiKit.SUI_CLOCK_OBJECT_ID,mutable:!1,initialSharedVersion:"1"})],[])}},Qs=({builder:o,txBlock:e})=>({lockScaQuick:async({amountOrCoin:t,lockPeriodInDays:s,autoCheck:r=!0,veScaKey:a})=>{let n=x(e),i=await he(o,e,a),c,d=[];if(t!==void 0&&typeof t=="number"){let y=await o.utils.selectCoins(t,chunk4GSK5DO7_js.m,n),[g,f]=e.takeAmountFromCoins(y,t);c=g,d.push(f);}else c=t;let l=o.utils.getUnlockAt(s,i?.unlockAt);r&&qt(t,s,l,i?.unlockAt);let u=!i,p=!u&&i.unlockAt<=new Date().getTime();if(u||p){if(c)if(u){let y=e.lockSca(c,l);d.push(y);}else {if(i.lockedScaCoin!==0){let y=e.redeemSca(i.keyId);d.push(y);}e.renewExpiredVeSca(i.keyId,c,l);}}else c&&s?(e.extendLockPeriod(i.keyId,l),e.extendLockAmount(i.keyId,c)):s?e.extendLockPeriod(i.keyId,l):c&&e.extendLockAmount(i.keyId,c);d.length>0&&e.transferObjects(d,n);},extendLockPeriodQuick:async({lockPeriodInDays:t,veScaKey:s,autoCheck:r=!0})=>{let a=await he(o,e,s),n=o.utils.getUnlockAt(t,a?.unlockAt);r&&Ge(t,n,a?.unlockAt),a&&e.extendLockPeriod(a.keyId,n);},extendLockAmountQuick:async({scaAmount:t,veScaKey:s,autoCheck:r=!0})=>{let a=x(e),n=await he(o,e,s);if(r&&$t(t,n?.unlockAt),n){let i=await o.utils.selectCoins(t,chunk4GSK5DO7_js.m,a),[c,d]=e.takeAmountFromCoins(i,t);e.extendLockAmount(n.keyId,c),e.transferObjects([d],a);}},renewExpiredVeScaQuick:async({scaAmount:t,lockPeriodInDays:s,veScaKey:r,autoCheck:a=!0})=>{let n=x(e),i=await he(o,e,r),c=o.utils.getUnlockAt(s,i?.unlockAt);if(a&&Qt(t,s,i?.unlockAt),i){let d=[];if(i.lockedScaCoin!==0){let y=e.redeemSca(i.keyId);d.push(y);}let l=await o.utils.selectCoins(t,chunk4GSK5DO7_js.m,n),[u,p]=e.takeAmountFromCoins(l,t);d.push(p),e.renewExpiredVeSca(i.keyId,u,c),e.transferObjects(d,n);}},redeemScaQuick:async({veScaKey:t,transferSca:s})=>{let r=x(e),a=await he(o,e,t);if(le(a?.unlockAt),a){let n=e.redeemSca(a.keyId);if(s){e.transferObjects([n],r);return}return n}},splitVeScaQuick:async({splitAmount:t,veScaKey:s,transferVeScaKey:r=!0})=>{let a=await lt(o,s,o.address.get("vesca.subsTable")),n=!!e.txBlock.blockData.transactions.find(c=>c.kind==="MoveCall"&&c.target===`${o.address.get("borrowIncentive.id")}::user::unstake_v2`);if(a&&!n)throw new Error("Key cannot be in the subs table, please call unsubscribe vesca or unstake obligation first");let i=e.splitVeSca(s,t);if(r){e.transferObjects([i],x(e));return}else return i},mergeVeScaQuick:async({targetVeScaKey:t,sourceVeScaKey:s})=>{let r=o.address.get("vesca.subsTableId"),[a,n]=await Promise.all([lt(o,t,r),lt(o,s,r)]),i=!!e.txBlock.blockData.transactions.find(l=>l.kind==="MoveCall"&&l.target===`${o.address.get("borrowIncentive.id")}::user::unstake_v2`);if((a||n)&&!i)throw new Error("Both target and source cannot be in the subs table. Please call unsubscribe vesca or unstake obligation first");let[c,d]=await Promise.all([oe(o.utils,s),oe(o.utils,t)]);if(!c||!d)throw new Error("Source or target veSCA not found");return c.unlockAt<d.unlockAt?e.extendLockPeriod(c.keyId,d.unlockAt/1e3):c.unlockAt>d.unlockAt&&e.extendLockPeriod(d.keyId,c.unlockAt/1e3),e.mergeVeSca(t,s)}}),jo=(o,e)=>{let t=e instanceof suiKit.Transaction?new suiKit.SuiTxBlock(e):e||new suiKit.SuiTxBlock,s=$s({builder:o,txBlock:t}),r=new Proxy(t,{get:(n,i)=>i in s?Reflect.get(s,i):Reflect.get(n,i)}),a=Qs({builder:o,txBlock:r});return new Proxy(r,{get:(n,i)=>i in a?Reflect.get(a,i):Reflect.get(n,i)})};var Xs=({builder:o,txBlock:e})=>{let t={referralPgkId:o.address.get("referral.id"),referralBindings:o.address.get("referral.referralBindings"),referralRevenuePool:o.address.get("referral.referralRevenuePool"),authorizedWitnessList:o.address.get("referral.authorizedWitnessList"),referralTiers:o.address.get("referral.referralTiers"),version:o.address.get("referral.version")},s=o.address.get("vesca.table"),r=e.sharedObjectRef({objectId:suiKit.SUI_CLOCK_OBJECT_ID,mutable:!1,initialSharedVersion:"1"});return {bindToReferral:a=>{o.moveCall(e,`${t.referralPgkId}::referral_bindings::bind_ve_sca_referrer`,[t.referralBindings,e.pure.id(a),s,r],[]);},claimReferralTicket:a=>{let n=o.utils.parseCoinType(a);return o.moveCall(e,`${t.referralPgkId}::scallop_referral_program::claim_ve_sca_referral_ticket`,[t.version,s,t.referralBindings,t.authorizedWitnessList,t.referralTiers,r],[n])},burnReferralTicket:(a,n)=>{let i=o.utils.parseCoinType(n);o.moveCall(e,`${t.referralPgkId}::scallop_referral_program::burn_ve_sca_referral_ticket`,[t.version,a,t.referralRevenuePool,r],[i]);},claimReferralRevenue:(a,n)=>{let i=o.utils.parseCoinType(n);return o.moveCall(e,`${t.referralPgkId}::referral_revenue_pool::claim_revenue_with_ve_sca_key`,[t.version,t.referralRevenuePool,a,r],[i])}}},zs=({builder:o,txBlock:e})=>({claimReferralRevenueQuick:async(t,s=[...o.constants.whitelist.lending])=>{let r=x(e),a=[];for(let n of s)if(n==="sui"){let i=await e.claimReferralRevenue(t,n);a.push(i);}else {let i=await e.claimReferralRevenue(t,n);try{let c=await o.suiKit.suiInteractor.selectCoins(r,1/0,o.utils.parseCoinType(n));e.mergeCoins(i,c.slice(0,500));}catch{}finally{a.push(i);}}a.length>0&&e.transferObjects(a,r);}}),_o=(o,e)=>{let t=e instanceof suiKit.Transaction?new suiKit.SuiTxBlock(e):e||new suiKit.SuiTxBlock,s=Xs({builder:o,txBlock:t}),r=new Proxy(t,{get:(n,i)=>i in s?Reflect.get(s,i):Reflect.get(n,i)}),a=zs({builder:o,txBlock:r});return new Proxy(r,{get:(n,i)=>i in a?Reflect.get(a,i):Reflect.get(n,i)})};var Ys=({builder:o,txBlock:e})=>{let t={pkgId:o.address.get("loyaltyProgram.id"),scaRewardPool:o.address.get("loyaltyProgram.rewardPool")},s={object:o.address.get("vesca.object"),protocolConfig:o.address.get("vesca.config"),veScaTable:o.address.get("vesca.table"),subsTable:o.address.get("vesca.subsTable")},r={pkgId:o.address.get("veScaLoyaltyProgram.id"),veScaRewardPool:o.address.get("veScaLoyaltyProgram.veScaRewardPool")};return {claimLoyaltyRevenue:a=>o.moveCall(e,`${t.pkgId}::reward_pool::redeem_reward`,[t.scaRewardPool,a]),claimVeScaLoyaltyReward:a=>o.moveCall(e,`${r.pkgId}::ve_sca_reward::redeem_reward`,[r.veScaRewardPool,a,s.protocolConfig,s.veScaTable,s.subsTable])}},Js=({builder:o,txBlock:e})=>({claimLoyaltyRevenueQuick:async t=>{t=t??(await o.query.getVeScas())[0]?.keyObject;let s=x(e);if(!t)throw new Error(`No veScaKey found for user ${s}`);let r=e.claimLoyaltyRevenue(t),a=o.constants.coinTypes.sca;if(!a)throw new Error("Coin type sca not found");await o.utils.mergeSimilarCoins(e,r,a,x(e)),e.transferObjects([r],s);},claimVeScaLoyaltyRewardQuick:async t=>{t=t??(await o.query.getVeScas())[0]?.keyObject;let s=x(e);if(!t)throw new Error(`No veScaKey found for user ${s}`);let r=e.claimVeScaLoyaltyReward(t);e.transferObjects([r],s);}}),Mo=(o,e)=>{let t=e instanceof transactions.Transaction?new suiKit.SuiTxBlock(e):e||new suiKit.SuiTxBlock,s=Ys({builder:o,txBlock:t}),r=new Proxy(t,{get:(n,i)=>i in s?Reflect.get(s,i):Reflect.get(n,i)}),a=Js({builder:o,txBlock:r});return new Proxy(r,{get:(n,i)=>i in a?Reflect.get(a,i):Reflect.get(n,i)})};var er=({builder:o,txBlock:e})=>{let t={pkgId:o.address.get("scoin.id")};return {mintSCoin:(s,r)=>{let a=o.utils.parseSCoinType(s);if(!a)throw new Error(`Invalid marketCoinName name: ${s}`);return o.moveCall(e,`${t.pkgId}::s_coin_converter::mint_s_coin`,[o.utils.getSCoinTreasury(s),r],[a,o.utils.parseUnderlyingSCoinType(s)])},burnSCoin:(s,r)=>{let a=o.utils.parseSCoinType(s);if(!a)throw new Error(`Invalid sCoin name: ${s}`);return o.moveCall(e,`${t.pkgId}::s_coin_converter::burn_s_coin`,[o.utils.getSCoinTreasury(s),r],[a,o.utils.parseUnderlyingSCoinType(s)])}}},tr=({builder:o,txBlock:e})=>({mintSCoinQuick:async(t,s)=>{let r=x(e),{leftCoin:a,takeCoin:n}=await o.selectMarketCoin(e,t,s,r);return e.transferObjects([a],r),e.mintSCoin(t,n)},burnSCoinQuick:async(t,s)=>{let r=x(e),{leftCoin:a,takeCoin:n}=await o.selectSCoin(e,t,s,r);return e.transferObjects([a],r),e.burnSCoin(t,n)}}),Do=(o,e)=>{let t=e instanceof suiKit.Transaction?new suiKit.SuiTxBlock(e):e||new suiKit.SuiTxBlock,s=er({builder:o,txBlock:t}),r=new Proxy(t,{get:(n,i)=>i in s?Reflect.get(s,i):Reflect.get(n,i)}),a=tr({builder:o,txBlock:r});return new Proxy(r,{get:(n,i)=>i in a?Reflect.get(a,i):Reflect.get(n,i)})};var Ko=(o,e)=>{let t=jo(o,e),s=Mo(o,t),r=Oo(o,s),a=_o(o,r),n=Do(o,a),i=Po(o,n),c=ho(o,i);return new Proxy(c,{get:(d,l)=>l in t?Reflect.get(t,l):l in r?Reflect.get(r,l):l in a?Reflect.get(a,l):l in i?Reflect.get(i,l):l in s?Reflect.get(s,l):l in n?Reflect.get(n,l):Reflect.get(d,l)})};var dt=class{_queryClient;constructor(e={}){this._queryClient=e.queryClient??new queryCore.QueryClient(this.defaultQueryClientConfig);}get queryClient(){return this._queryClient}set queryClient(e){this._queryClient=e;}get defaultQueryClientConfig(){return chunk4GSK5DO7_js.r}},Se=dt;var ut=class extends Se{axiosInstance;constructor(e={}){super(e),this.axiosInstance=e.axiosInstance??sr__default.default.create({baseURL:e.baseUrl,headers:{"Content-Type":"application/json",Accept:"application/json"},timeout:e.axiosTimeout??8e3});}async post(e,t,s,r){if(Array.isArray(t)){let a=t,n=s,i=r;return this.queryClient.fetchQuery({queryKey:a,queryFn:()=>this.axiosInstance.post(e,n,i).then(c=>c)})}else {let a=t,n=s;return this.axiosInstance.post(e,a,n)}}async get(e,t,s){if(Array.isArray(t)){let r=t,a=s;return this.queryClient.fetchQuery({queryKey:r,queryFn:()=>this.axiosInstance.get(e,a).then(n=>n)})}else {let r=t;return this.axiosInstance.get(e,r)}}async put(e,t,s,r){if(Array.isArray(t)){let a=t,n=s,i=r;return this.queryClient.fetchQuery({queryKey:a,queryFn:()=>this.axiosInstance.put(e,n,i).then(c=>c)})}else {let a=t,n=s;return this.axiosInstance.put(e,a,n)}}async delete(e,t,s){if(Array.isArray(t)){let r=t,a=s;return this.queryClient.fetchQuery({queryKey:r,queryFn:()=>this.axiosInstance.delete(e,a).then(n=>n)})}else {let r=t;return this.axiosInstance.delete(e,r)}}},we=ut;var pt={core:{version:"",versionCap:"",object:"",market:"",adminCap:"",coinDecimalsRegistry:"",obligationAccessStore:"",coins:{cetus:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}},wapt:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}},wsol:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}},wbtc:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}},weth:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}},wusdc:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}},wusdt:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}},sui:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}},afsui:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}},hasui:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}},vsui:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}},sca:{id:"",metaData:"",treasury:"",symbol:"",coinType:"",decimals:0,oracle:{supra:"",switchboard:"",pyth:{feed:"",feedObject:""}}}},oracles:{xOracle:"",xOracleCap:"",primaryPriceUpdatePolicyObject:"",secondaryPriceUpdatePolicyObject:"",primaryPriceUpdatePolicyVecsetId:"",secondaryPriceUpdatePolicyVecsetId:"",supra:{registry:"",registryCap:"",holder:""},switchboard:{registry:"",registryCap:"",registryTableId:"",state:""},pyth:{registry:"",registryCap:"",state:"",wormhole:"",wormholeState:"",lst:{afsui:{safeId:"",stakedSuiVaultId:"",configId:""}}}},packages:{coinDecimalsRegistry:{id:"",upgradeCap:""},math:{id:"",upgradeCap:""},whitelist:{id:"",upgradeCap:""},x:{id:"",upgradeCap:""},protocol:{id:"",upgradeCap:""},protocolWhitelist:{id:"",upgradeCap:""},query:{id:"",upgradeCap:""},supra:{id:"",upgradeCap:""},pyth:{id:"",upgradeCap:"",lst:{afsui:{id:"",object:""}}},switchboard:{id:"",upgradeCap:""},xOracle:{id:"",upgradeCap:""},testCoin:{id:"",upgradeCap:""}}},spool:{id:"",adminCap:"",object:"",pools:{sweth:{id:"",rewardPoolId:""},ssui:{id:"",rewardPoolId:""},swusdc:{id:"",rewardPoolId:""},swusdt:{id:"",rewardPoolId:""},scetus:{id:"",rewardPoolId:""},safsui:{id:"",rewardPoolId:""},shasui:{id:"",rewardPoolId:""},svsui:{id:"",rewardPoolId:""}},config:""},borrowIncentive:{id:"",adminCap:"",object:"",query:"",incentivePools:"",incentiveAccounts:"",config:""},vesca:{id:"",object:"",adminCap:"",tableId:"",table:"",treasury:"",config:"",subsTable:"",subsTableId:"",subsWhitelist:""},referral:{id:"",version:"",object:"",adminCap:"",referralBindings:"",bindingTableId:"",referralRevenuePool:"",revenueTableId:"",referralTiers:"",tiersTableId:"",authorizedWitnessList:""},loyaltyProgram:{id:"",object:"",rewardPool:"",userRewardTableId:""},veScaLoyaltyProgram:{id:"",object:"",veScaRewardPool:"",veScaRewardTableId:""},scoin:{id:"",coins:{ssui:{coinType:"",treasury:"",metaData:"",symbol:""},scetus:{coinType:"",treasury:"",metaData:"",symbol:""},ssca:{coinType:"",treasury:"",metaData:"",symbol:""},swusdc:{coinType:"",treasury:"",metaData:"",symbol:""},swusdt:{coinType:"",treasury:"",metaData:"",symbol:""},sweth:{coinType:"",treasury:"",metaData:"",symbol:""},safsui:{coinType:"",treasury:"",metaData:"",symbol:""},shasui:{coinType:"",treasury:"",metaData:"",symbol:""},svsui:{coinType:"",treasury:"",metaData:"",symbol:""}}}},mt=class{constructor(e={}){this.params=e;this.scallopAxios=new we({...this.defaultParamValues,...e}),this.network=e.network??"mainnet",this.addressId=e.addressId??this.defaultParamValues.addressId,this.auth=e.auth??"",e.forceAddressesInterface&&this.initializeForcedAddresses(e.forceAddressesInterface);}currentAddresses;addressId;network;auth;scallopAxios;addressMap=new Map;defaultParamValues={addressId:"67c44a103fe1b8c454eb9699",network:"mainnet"};initializeForcedAddresses(e){let t=["localnet","devnet","testnet","mainnet"];Object.entries(e).forEach(([s,r])=>{if(t.includes(s)){let a=s;this.addressMap.set(a,r),a===this.network&&(this.currentAddresses=r);}});}get axiosClient(){return this.scallopAxios}get queryClient(){return this.axiosClient.queryClient}get defaultValues(){return this.params.defaultValues}getId(){return this.addressId}get(e){if(this.currentAddresses)return e.split(".").reduce((s,r)=>typeof s=="object"?s[r]:s,this.currentAddresses)||void 0}set(e,t){if(this.currentAddresses){let s=e.split(".");s.reduce((r,a,n)=>{if(n===s.length-1)r[a]=t;else return r[a]},this.currentAddresses);}return this.currentAddresses}switchCurrentAddresses(e){return this.addressMap.has(e)&&(this.currentAddresses=this.addressMap.get(e),this.network=e),this.currentAddresses}getAddresses(e){return e?this.addressMap.get(e):this.currentAddresses??this.addressMap.get(this.network)}setAddresses(e,t){let s=t||this.network;s===this.network&&(this.currentAddresses=e),this.addressMap.set(s,e);}getAllAddresses(){return Object.fromEntries(this.addressMap)}async create(e){let{addresses:t,network:s,auth:r,memo:a}=e??{},n=r||this.auth||void 0,i=s||this.network,c=t||this.currentAddresses||this.addressMap.get(i)||pt;if(n!==void 0){this.addressMap.clear(),this.setAddresses(c,i);let d=await this.axiosClient.post("/addresses",JSON.stringify({...Object.fromEntries(this.addressMap),memo:a}),{headers:{"Content-Type":"application/json","api-key":r||this.auth}});if(d.status===201){for(let[l,u]of Object.entries(d.data))["localnet","devnet","testnet","mainnet"].includes(l)&&(l===this.network&&(this.currentAddresses=u),this.addressMap.set(l,u));return this.addressId=d.data.id,this.getAllAddresses()}else throw Error("Failed to create addresses.")}else throw Error("You don't have permission to access this request.")}async readApi({url:e,queryKey:t,config:s}){let r=await this.axiosClient.get(e,t,s);if(r.status===200)return r.data;throw Error(`Error: ${r.status}; Failed to read ${e} ${r.statusText}`)}async read(e){let t=e||this.addressId||void 0;if(t!==void 0){let s=await(async()=>{let a=(this.params.urls?.addresses??[chunk4GSK5DO7_js.p]).map(n=>`${ue(n)}/addresses/${t}`);for(let n of a)try{return await this.readApi({url:n,queryKey:chunk4GSK5DO7_js.o.api.getAddresses({addressId:t})})}catch(i){console.error(`${i}`);}return {id:"",mainnet:this.defaultValues?.addresses?.mainnet??pt}})(),r=a=>["localnet","devnet","testnet","mainnet"].includes(a);for(let[a,n]of Object.entries(s))r(a)&&typeof n=="object"&&(a===this.network&&(this.currentAddresses=n),this.addressMap.set(a,n));return this.addressId=s.id,this.getAllAddresses()}else throw Error("Please provide API addresses id.")}async update(e){let{id:t,addresses:s,network:r,auth:a,memo:n}=e??{},i=a||this.auth||void 0,c=t||this.addressId||void 0,d=r||this.network,l=s||this.currentAddresses||this.addressMap.get(d)||pt;if(c===void 0)throw Error("Require specific addresses id to be updated.");if(i!==void 0){t!==this.addressId&&this.addressMap.clear(),this.setAddresses(l,d);let u=await this.axiosClient.put(`/addresses/${c}`,JSON.stringify({...Object.fromEntries(this.addressMap),memo:n}),{headers:{"Content-Type":"application/json","api-key":a||this.auth}});if(u.status===200){for(let[p,y]of Object.entries(u.data))["localnet","devnet","testnet","mainnet"].includes(p)&&(p===this.network&&(this.currentAddresses=y),this.addressMap.set(p,y));return this.addressId=u.data.id,this.getAllAddresses()}else throw Error("Failed to update addresses.")}else throw Error("You don't have permission to access this request.")}async delete(e,t){let s=t||this.auth||void 0,r=e||this.addressId||void 0;if(r===void 0)throw Error("Require specific addresses id to be deleted.");if(s!==void 0)if((await this.axiosClient.delete(`/addresses/${r}`,{headers:{"Content-Type":"application/json","api-key":t||this.auth}})).status===200)this.addressId=void 0,this.currentAddresses=void 0,this.addressMap.clear();else throw Error("Failed to delete addresses.");else throw Error("You don't have permission to access this request.")}},yt=mt;var Lo=o=>Object.keys(o).length===0,gt={lending:new Set,borrowing:new Set,collateral:new Set,packages:new Set,scoin:new Set,spool:new Set,borrowIncentiveRewards:new Set,rewardsAsPoint:new Set,suiBridge:new Set,wormhole:new Set,oracles:new Set,pythEndpoints:new Set,deprecated:new Set,emerging:new Set},ar=o=>Object.entries(o).filter(([e,t])=>!!t&&(Array.isArray(t)||t instanceof Set)).reduce((e,[t,s])=>(e[t]=s instanceof Set?s:new Set(s),e),{}),ft=class extends yt{constructor(t={}){super(t);this.params=t;}_poolAddresses={};_whitelist=gt;coinDecimals={};coinNameToOldMarketCoinTypeMap={};scoinRawNameToSCoinNameMap={};scoinTypeToSCoinNameMap={};wormholeCoinTypeToCoinNameMap={};voloCoinTypeToCoinNameMap={};suiBridgeCoinTypeToCoinNameMap={};coinTypes={};sCoinTypes={};coinTypeToCoinNameMap={};supportedBorrowIncentiveRewards=new Set;get protocolObjectId(){return this.get("core.object")??"0xefe8b36d5b2e43728cc323298626b83177803521d195cfb11e15b910e892fddf"}get isInitialized(){let t=["lending","collateral","borrowing","packages","scoin","spool","oracles","pythEndpoints","emerging"];return this.isAddressInitialized()&&!Lo(this.poolAddresses)&&t.every(s=>this.whitelist[s].size>0)}get whitelist(){return new Proxy(this._whitelist,{get:(t,s)=>t[s]??gt[s]})}get poolAddresses(){return new Proxy(this._poolAddresses,{get:(t,s)=>t[s]??void 0})}get defaultValues(){return this.params.defaultValues}isAddressInitialized({networkType:t="mainnet"}={}){let s=this.getAddresses(t);return !!s&&!Lo(s)}parseToOldMarketCoin(t){return `${this.protocolObjectId}::reserve::MarketCoin<${t}>`}async init({networkType:t="mainnet",force:s=!1,addressId:r,constantsParams:a=this.params}={}){let n=this.getAddresses(t);if((!n||Object.keys(n).length===0||s)&&await this.read(r),a.forcePoolAddressInterface&&(this._poolAddresses=a.forcePoolAddressInterface),a.forceWhitelistInterface&&(this._whitelist=ar(a.forceWhitelistInterface)),this.isInitialized&&!s){this.initConstants();return}let[i,c]=await Promise.all([this.readWhiteList(),this.readPoolAddresses()]);this.params.forceWhitelistInterface||(this._whitelist=Object.keys(this._whitelist).reduce((d,l)=>{let u=l,p=i[u];return d[u]=p instanceof Set?p:Array.isArray(p)?new Set(p):new Set,d},{})),this.params.forcePoolAddressInterface||(this._poolAddresses=Object.fromEntries(Object.entries(c).filter(([d])=>Object.values(this._whitelist).some(l=>l.has(d))).map(([d,l])=>{let u=Object.fromEntries(Object.entries(l).map(([p,y])=>[p,typeof y=="boolean"?y??!1:y||void 0]));return [d,u]}))),this.initConstants();}initConstants(){this.coinDecimals=Object.fromEntries([...Object.entries(this.poolAddresses).filter(([s,r])=>!!r).map(([s,r])=>[s,r.decimals]),...Object.entries(this.poolAddresses).filter(([s,r])=>!!r?.sCoinName).map(([s,r])=>[r.sCoinName,r.decimals])]),this.coinTypes=Object.fromEntries([...Object.entries(this.poolAddresses).filter(([s,r])=>!!r).map(([s,r])=>[s,r?.coinType]),...Object.entries(this.poolAddresses).filter(([s,r])=>!!r&&r.sCoinName&&r.sCoinType).map(([s,r])=>[r.sCoinName,r.sCoinType])]),this.coinTypeToCoinNameMap=Object.fromEntries(Object.entries(this.coinTypes).map(([s,r])=>[r,s])),this.wormholeCoinTypeToCoinNameMap=Object.fromEntries(Object.entries(this.poolAddresses).filter(([s,r])=>!!r&&this.whitelist.wormhole.has(s)).map(([s,r])=>[r.coinType,r.coinName])),this.coinNameToOldMarketCoinTypeMap=Object.fromEntries(Object.entries(this.poolAddresses).filter(([s,r])=>!!r).map(([s,r])=>[r.coinName,this.parseToOldMarketCoin(r.coinType)])),this.scoinRawNameToSCoinNameMap=Object.fromEntries(Object.entries(this.poolAddresses).filter(([s,r])=>!!r&&r.sCoinType&&r.sCoinName).map(([s,r])=>[suiKit.parseStructTag(r.sCoinType).name,r.sCoinName])),this.scoinTypeToSCoinNameMap=Object.fromEntries(Object.entries(this.poolAddresses).filter(([s,r])=>!!r&&r.sCoinType&&r.sCoinName).map(([s,r])=>[r.sCoinType,r.sCoinName]));let t=this.poolAddresses.vsui?.coinType;t&&(this.voloCoinTypeToCoinNameMap={[t]:"vsui"}),this.suiBridgeCoinTypeToCoinNameMap=Object.fromEntries(Object.entries(this.poolAddresses).filter(([s,r])=>!!r&&this.whitelist.suiBridge.has(r.coinName)).map(([s,r])=>[r.coinType,r.coinName])),this.sCoinTypes=Object.fromEntries(Object.entries(this.poolAddresses).filter(([s,r])=>!!r&&r.sCoinName&&r.sCoinType).map(([s,r])=>[r.sCoinName,r.sCoinType])),this.supportedBorrowIncentiveRewards=new Set([...Object.values(this.poolAddresses).filter(s=>!!s).map(s=>s.sCoinName?[s.coinName,s.sCoinName]:[s.coinName]).flat()]);}async readWhiteList(){let t=await(async()=>{let s=(this.params.urls?.whitelist??["https://sui.apis.scallop.io/pool/whitelist"]).map(ue);for(let r of s)try{return await this.readApi({url:r,queryKey:chunk4GSK5DO7_js.o.api.getWhiteList()})}catch(a){console.error(`${a}`);}return this.defaultValues?.whitelist??gt})();return Object.fromEntries(Object.entries(t).filter(([s,r])=>Array.isArray(r)||r instanceof Set).map(([s,r])=>[s,r instanceof Set?r:new Set(r)]))}async readPoolAddresses(){let t=(this.params.urls?.poolAddresses??["https://sui.apis.scallop.io/pool/addresses"]).map(ue);for(let s of t)try{return await this.readApi({url:s,queryKey:chunk4GSK5DO7_js.o.api.getPoolAddresses()})}catch(r){console.error(`${r}`);}return this.defaultValues?.poolAddresses??{}}},bt=ft;var Vo=o=>{let e;return "suiClients"in o&&o.suiClients&&o.suiClients?.length>0?e={suiClients:o.suiClients}:e={fullnodeUrls:"fullnodeUrls"in o?o?.fullnodeUrls??chunk4GSK5DO7_js.s:chunk4GSK5DO7_js.s},new suiKit.SuiKit({...o,...e})};var lr=10,Le=(o,e)=>{let t={...o};for(let s in e)e[s]&&typeof e[s]=="object"&&!Array.isArray(e[s])?t[s]=Le(o[s]||{},e[s]):t[s]=e[s];return t},Ve=class{constructor(e=10){this.capacity=e;this.refillRate=this.capacity/1e3,this.tokens=this.capacity,this.lastRefillTime=Date.now();}tokens;lastRefillTime;refillRate;refill(){let e=Date.now(),s=(e-this.lastRefillTime)*this.refillRate;this.tokens=Math.min(this.capacity,this.tokens+s),this.lastRefillTime=e;}getTimeToNextToken(){if(this.refill(),this.tokens>=1)return 0;let e=1-this.tokens;return Math.ceil(e/this.refillRate)}async acquireToken(){for(;;){let e=this.getTimeToNextToken();if(e===0){if(this.tokens>=1){this.tokens-=1;return}continue}await new Promise(t=>setTimeout(t,e)),this.refill();}}async execute(e){return await this.acquireToken(),await e()}},ht=class extends Se{suiKit;_walletAddress;_tokensPerSecond;rateLimiter;constructor(e={}){super(e),this.suiKit=e.suiKit??Vo(e),this._tokensPerSecond=e.tokensPerSecond??lr,this.rateLimiter=new Ve(this._tokensPerSecond),this._walletAddress=e.walletAddress??this.suiKit.currentAddress;}switchFullNodes(e){this.suiKit.suiInteractor.switchFullNodes(e);}get client(){return this.suiKit.client}get walletAddress(){return this._walletAddress}set walletAddress(e){this._walletAddress=e;}get tokensPerSecond(){return this._tokensPerSecond}set tokensPerSecond(e){this._tokensPerSecond=e,this.rateLimiter=new Ve(this._tokensPerSecond);}get currentFullNode(){try{return this.suiKit.suiInteractor.currentFullNode}catch{return ""}}signAndSendTxn(e,t){return this.suiKit.signAndSendTxn(e,t)}async callWithRateLimiter(e,t){return await this.queryClient.fetchQuery({queryKey:e,queryFn:()=>this.rateLimiter.execute(t)})}async queryGetNormalizedMoveFunction(e){let{address:t,module:s,name:r}=suiKit.parseStructTag(e);return await this.callWithRateLimiter(chunk4GSK5DO7_js.o.rpc.getNormalizedMoveFunction({target:e}),()=>this.client.getNormalizedMoveFunction({package:t,module:s,function:r}))}async queryGetObject(e,t){return t={...t,showOwner:!0,showContent:!0,showType:!0},await this.callWithRateLimiter(chunk4GSK5DO7_js.o.rpc.getObject({objectId:e,options:t,node:this.currentFullNode}),()=>this.client.getObject({id:e,options:t}))}async queryGetObjects(e,t){if(e.length===0)return [];t??={showContent:!0,showOwner:!0,showType:!0};let s=await this.callWithRateLimiter(chunk4GSK5DO7_js.o.rpc.getObjects({objectIds:e,node:this.currentFullNode}),()=>this.suiKit.getObjects(e,{showOwner:t?.showOwner,showContent:t?.showContent,showType:t?.showType}));return s.forEach(r=>{let a=chunk4GSK5DO7_js.o.rpc.getObject({objectId:r.objectId,node:this.currentFullNode});this.queryClient.getQueriesData({exact:!1,queryKey:a}).forEach(([i,c])=>{c||(c={data:c}),this.queryClient.setQueryData(i,Le(c,{data:r,error:null}),{updatedAt:Date.now()});});}),s}async queryGetOwnedObjects(e){let t=await this.callWithRateLimiter(chunk4GSK5DO7_js.o.rpc.getOwnedObjects(e),()=>this.client.getOwnedObjects(e));return t&&t.data.length>0&&t.data.filter(s=>!!s.data).forEach(s=>{let r=chunk4GSK5DO7_js.o.rpc.getObject({objectId:s.data.objectId,node:this.currentFullNode});this.queryClient.getQueriesData({exact:!1,queryKey:r}).forEach(([n,i])=>{this.queryClient.setQueryData(n,Le(i,{data:s.data,error:null}),{updatedAt:Date.now()});});}),t}async queryGetDynamicFields(e){return await this.callWithRateLimiter(chunk4GSK5DO7_js.o.rpc.getDynamicFields(e),()=>this.client.getDynamicFields(e))}async queryGetDynamicFieldObject(e){let t=await this.callWithRateLimiter(chunk4GSK5DO7_js.o.rpc.getDynamicFieldObject(e),()=>this.client.getDynamicFieldObject(e));if(t?.data){let s=chunk4GSK5DO7_js.o.rpc.getObject({objectId:t.data.objectId,node:this.currentFullNode});this.queryClient.getQueriesData({exact:!1,queryKey:s}).forEach(([a,n])=>{this.queryClient.setQueryData(a,Le(n,{data:t.data,error:null}),{updatedAt:Date.now()});});}return t}async queryGetAllCoinBalances(e){return await this.callWithRateLimiter(chunk4GSK5DO7_js.o.rpc.getAllCoinBalances({activeAddress:e,node:this.currentFullNode}),async()=>{let t=await this.client.getAllBalances({owner:e});return t?t.reduce((r,a)=>(a.totalBalance!=="0"&&(r[suiKit.normalizeStructTag(a.coinType)]=a),r),{}):{}})}async queryGetCoinBalance(e){return e.coinType?(await this.queryGetAllCoinBalances(e.owner))[suiKit.normalizeStructTag(e.coinType)]??null:null}async queryInspectTxn({queryTarget:e,args:t,typeArgs:s}){let r=new suiKit.SuiTxBlock;if(!await this.queryGetNormalizedMoveFunction(e))throw new Error("Invalid query target");let n=await Promise.all((t??[]).map(async i=>{if(typeof i!="string")return i;let c=(await this.queryGetObject(i))?.data;return c||i}));return r.moveCall(e,n,s),await this.callWithRateLimiter(chunk4GSK5DO7_js.o.rpc.getInspectTxn({queryTarget:e,args:t,typeArgs:s,node:this.currentFullNode}),()=>this.suiKit.inspectTxn(r))}},St=ht;var kt=class{pythEndpoints;scallopSuiKit;constants;constructor(e={}){this.constants=e.scallopConstants??new bt(e),this.scallopSuiKit=e.scallopSuiKit??new St({queryClient:this.constants.queryClient,...e}),this.pythEndpoints=e.pythEndpoints??["https://hermes.pyth.network"];}get walletAddress(){return this.scallopSuiKit.walletAddress}get suiKit(){return this.scallopSuiKit.suiKit}get queryClient(){return this.constants.queryClient}get address(){return this.constants}isSuiBridgeAsset(e){return this.constants.whitelist.suiBridge.has(e)}isWormholeAsset(e){return this.constants.whitelist.wormhole.has(e)}isMarketCoin(e){let t=e.slice(1).toLowerCase();return e.charAt(0).toLowerCase()==="s"&&this.constants.whitelist.lending.has(t)}async init({force:e=!1}={}){await this.constants.init({force:e});}parseCoinName(e){return e.slice(1)}parseSymbol(e){return this.isMarketCoin(e)?this.constants.poolAddresses[this.parseCoinName(e)]?.sCoinSymbol??"":this.constants.poolAddresses[e]?.symbol??""}parseCoinType(e,t=!1){return t?this.constants.coinNameToOldMarketCoinTypeMap[e]??"":this.constants.coinTypes[e]??""}parseSCoinName(e){if(this.isMarketCoin(e)&&this.constants.whitelist.scoin.has(e))return e;{let t=`s${e}`;return this.constants.whitelist.scoin.has(t)?t:void 0}}parseSCoinTypeNameToMarketCoinName(e){return this.constants.scoinRawNameToSCoinNameMap[e]??e}parseSCoinType(e){return this.constants.sCoinTypes[e]??""}parseSCoinNameFromType(e){return this.constants.scoinTypeToSCoinNameMap[e]}parseUnderlyingSCoinType(e){let t=this.parseCoinName(e);return this.parseCoinType(t)}getSCoinTreasury(e){return this.address.get(`scoin.coins.${e}.treasury`)}parseMarketCoinType(e){return this.parseCoinType(this.isMarketCoin(e)?this.parseCoinName(e):e,!0)}parseMarketCoinName(e){return `s${e}`}getSpoolRewardCoinName=()=>"sui";getCoinDecimal(e){return this.constants.coinDecimals[e]??0}getCoinWrappedType(e){if(this.isSuiBridgeAsset(e))return {from:"Sui Bridge",type:"Asset from Sui Bridge"};if(this.isWormholeAsset(e))return {from:"Wormhole",type:"Portal from Ethereum"}}parseCoinNameFromType(e){e=suiKit.normalizeStructTag(e);let{address:t,module:s,name:r,typeParams:a}=suiKit.parseStructTag(e);return t===this.constants.protocolObjectId&&s==="reserve"&&r==="MarketCoin"?this.parseMarketCoinName((typeof a[0]=="string"?suiKit.parseStructTag(a[0]):a[0]).name.toLowerCase()):this.constants.coinTypeToCoinNameMap[e]||this.constants.scoinTypeToSCoinNameMap[e]||suiKit.parseStructTag(e).name.toLowerCase()}async selectCoins(e,t=suiKit.SUI_TYPE_ARG,s){return s=s??this.walletAddress,await this.suiKit.suiInteractor.selectCoins(s,e,t)}async mergeSimilarCoins(e,t,s,r=this.walletAddress){try{let a=await this.selectCoins(Number.MAX_SAFE_INTEGER,s,r);a.length>0&&e.mergeCoins(t,a.slice(0,500).map(e.objectRef));}catch{}}async getObligationCoinNames(e){let t=await xe(this,e);if(!t)return;let s=t.collaterals.map(i=>`0x${i.type.name}`),r=t.debts.map(i=>`0x${i.type.name}`);return [...new Set([...s,...r])].map(i=>this.parseCoinNameFromType(i))}parseDataFromPythPriceFeed(e){let s=[...this.constants.whitelist.lending].find(r=>this.address.get(`core.coins.${r}.oracle.pyth.feed`)===e.id);if(s){let r=e.getPriceUnchecked();return {coinName:s,price:r.getPriceAsNumberUnchecked(),publishTime:Number(r.publishTime)*10**3}}else throw new Error(`Invalid feed id: ${e.id}`)}async getPythPrice(e,t){let s=this.address.get(`core.coins.${e}.oracle.pyth.feedObject`);if(t=t||(await this.scallopSuiKit.queryGetObject(s))?.data,t){let r=t;if(r.content&&"fields"in r.content){let a=r.content.fields,n=Number(a.price_info.fields.price_feed.fields.price.fields.expo.fields.magnitude),i=Number(a.price_info.fields.price_feed.fields.price.fields.expo.fields.negative),c=Number(a.price_info.fields.price_feed.fields.price.fields.price.fields.magnitude),d=Number(a.price_info.fields.price_feed.fields.price.fields.price.fields.negative);return c*10**((i?-1:1)*n)*(d?-1:1)}}return 0}async getPythPrices(e){let t=e.reduce((a,n)=>{let i=this.address.get(`core.coins.${n}.oracle.pyth.feedObject`);return i&&(a[i]?a[i].push(n):a[i]=[n]),a},{}),r=(await this.scallopSuiKit.queryGetObjects(Object.keys(t))).reduce((a,n)=>(t[n.objectId].forEach(i=>{a[i]=n;}),a),{});return (await Promise.all(Object.entries(r).map(async([a,n])=>({coinName:a,price:await this.getPythPrice(a,n)})))).reduce((a,n)=>(a[n.coinName]=n.price,a),{})}async getCoinPrices(e=[...new Set([...this.constants.whitelist.lending,...this.constants.whitelist.collateral])]){let t={},s=this.pythEndpoints,r=new Set(e);for(let a of s){let n=Array.from(r.values()).reduce((d,l)=>{let u=this.address.get(`core.coins.${l}.oracle.pyth.feed`)??this.constants.poolAddresses[l]?.pythFeed;return d.push([l,u]),d},[]);if(n.length===0)break;let i=n.map(([d,l])=>l),c=new pythSuiJs.SuiPriceServiceConnection(a,{timeout:4e3});try{let d=await this.queryClient.fetchQuery({queryKey:chunk4GSK5DO7_js.o.oracle.getPythLatestPriceFeeds(),queryFn:async()=>await c.getLatestPriceFeeds(i),staleTime:3e4,gcTime:3e4});d&&d.forEach((l,u)=>{let p=n[u][0],y=this.parseDataFromPythPriceFeed(l);t[p]=y.price,r.delete(p);});}catch(d){console.error(d.message);}if(r.size===0)break}return r.size>0&&(t={...t,...await this.getPythPrices(Array.from(r.values()))},r.clear()),t}parseAprToApy(e,t=365){return (1+e/t)**t-1}parseApyToApr(e,t=365){return ((1+e)**(1/t)-1)*t}getUnlockAt(e,t){let s=Math.floor(new Date().getTime()/1e3),r=t?Math.max(Math.floor(t/1e3)-s,0):0,a=0;if(r===0){let n=(e??1)*86400;a=Math.min(s+n,s+126144e3);}else {let n=Math.min(e?e*86400+r:r,126144e3);a=s+n;}return Zt(a)}getSupportedPoolAddresses(){return this.constants.poolAddresses?Object.values(this.constants.poolAddresses).filter(e=>e!==void 0&&this.constants.whitelist.lending.has(e.coinName)):[]}},Tt=kt;var Ct=class extends we{constructor(e={}){e.baseUrl=e.indexerApiUrl??chunk4GSK5DO7_js.q,super(e);}async getMarket(){let e=await this.get("/api/market/migrate",chunk4GSK5DO7_js.o.api.getMarket());if(e.status===200)return {pools:e.data.pools.reduce((t,s)=>(t[s.coinName]=s,t),{}),collaterals:e.data.collaterals.reduce((t,s)=>(t[s.coinName]=s,t),{})};throw Error("Failed to getMarket.")}async getMarketPools(){return (await this.getMarket()).pools}async getMarketPool(e){return (await this.getMarketPools())[e]}async getMarketCollaterals(){return (await this.getMarket()).collaterals}async getMarketCollateral(e){return (await this.getMarketCollaterals())[e]}async getSpools(){let e=await this.get("/api/spools/migrate",chunk4GSK5DO7_js.o.api.getSpools());if(e.status===200)return e.data.spools.reduce((t,s)=>(t[s.marketCoinName]=s,t),{});throw Error("Failed to getSpools.")}async getSpool(e){return (await this.getSpools())[e]}async getBorrowIncentivePools(){let e=await this.get("/api/borrowIncentivePools/migrate",chunk4GSK5DO7_js.o.api.getBorrowIncentivePool());if(e.status===200)return e.data.borrowIncentivePools.reduce((t,s)=>(Array.isArray(s.points)&&(s.points=s.points.reduce((r,a)=>(r[a.coinName]=a,r),{})),t[s.coinName]=s,t),{});throw Error("Failed to getBorrowIncentivePools.")}async getBorrowIncentivePool(e){return (await this.getBorrowIncentivePools())[e]}async getTotalValueLocked(){let e=await this.get("/api/market/tvl",chunk4GSK5DO7_js.o.api.getTotalValueLocked());if(e.status===200)return e.data;throw Error("Failed to getTotalValueLocked.")}async getCoinPrice(e){return (await this.getMarketPool(e))?.coinPrice??0}async getCoinPrices(){let e=await this.getMarketPools();return Object.entries(e).reduce((t,[s,r])=>(r&&(t[s]=r.coinPrice),t),{})}},Pt=Ct;var gr=async({address:o,scallopSuiKit:e})=>{let t=o.get("borrowIncentive.query"),s=o.get("borrowIncentive.incentivePools"),r=`${t}::incentive_pools_query::incentive_pools_data`,a=[s];return (await e.queryInspectTxn({queryTarget:r,args:a}))?.events[0].parsedJson},Uo=async(o,e=[...o.constants.whitelist.lending],t=!1,s,r)=>{let a={};s=s??(await o.getMarketPools(void 0,{coinPrices:r,indexer:t})).pools,r=r??await o.getAllCoinPrices({marketPools:s});let n=await gr(o);for(let i of n?.incentive_pools??[]){let c={},d=Ht(o.utils,i),l=utils.normalizeStructTag(i.pool_type.name),u=o.utils.parseCoinNameFromType(l),p=r?.[u]??0,y=o.utils.getCoinDecimal(u);if(!e.includes(u))continue;for(let[b,h]of Object.entries(d.poolPoints)){if(!h)continue;let T=h.pointType,P=o.utils.parseCoinNameFromType(T),D=o.utils.getCoinDecimal(P);if(D===void 0)throw new Error(`Coin decimal not found for ${P}`);let k=r?.[P]??0,I=o.utils.parseSymbol(P),_=o.utils.getCoinDecimal(P),F=Yt(h,k,D,p,y);c[b]={symbol:I,coinName:P,coinType:T,coinDecimal:_,coinPrice:k,points:h.points,distributedPoint:h.distributedPoint,weightedAmount:h.weightedAmount,...F};}let g=S__default.default(d.staked),f=g.shiftedBy(-1*y),m=f.multipliedBy(p);a[u]={coinName:u,symbol:o.utils.parseSymbol(u),coinType:l,coinDecimal:y,coinPrice:p,stakedAmount:g.toNumber(),stakedCoin:f.toNumber(),stakedValue:m.toNumber(),points:c};}return a},qo=async({utils:o},e,t=[...o.constants.whitelist.lending])=>{let s=o.address.get("borrowIncentive.query"),r=o.address.get("borrowIncentive.incentiveAccounts"),a=`${s}::incentive_account_query::incentive_account_data`,n=[r,e],c=(await o.scallopSuiKit.queryInspectTxn({queryTarget:a,args:n}))?.events[0]?.parsedJson;return Object.values(c?.pool_records??[]).reduce((l,u)=>{let p=Jt(o,u),y=p.poolType,g=o.parseCoinNameFromType(y);return t&&t.includes(g)&&(l[g]=p),l},{})},$o=async({address:o,scallopSuiKit:e},t)=>{let s=o.get("borrowIncentive.object"),r=o.get("borrowIncentive.incentivePools"),a=o.get("vesca.object"),n=await e.queryGetObject(r);if(n?.data?.content?.dataType!=="moveObject")return null;let c=n.data.content.fields.ve_sca_bind.fields.id.id,d=`${s}::typed_id::TypedID<${a}::ve_sca::VeScaKey>`,l=await e.queryGetDynamicFieldObject({parentId:c,name:{type:d,value:t}});return l?.data?.content?.dataType!=="moveObject"?null:l.data.content.fields.value.fields.id},Qo=async({address:o,scallopSuiKit:e},t)=>{let s=o.get("borrowIncentive.object"),r=o.get("borrowIncentive.incentiveAccounts"),a=o.get("core.object"),n=await e.queryGetObject(r);if(n?.data?.content?.dataType!=="moveObject")return null;let i=n.data.content.fields.accounts.fields.id.id,c=await e.queryGetDynamicFieldObject({parentId:i,name:{type:`${s}::typed_id::TypedID<${a}::obligation::Obligation>`,value:t}});return c?.data?.content?.dataType!=="moveObject"?null:c.data.content.fields.value.fields.binded_ve_sca_key?.fields.id??null};var fr=zod.z.object({balance:zod.z.string(),enable_claim:zod.z.boolean()}).transform(o=>({totalPoolReward:S__default.default(o.balance).shiftedBy(-9).toNumber(),isClaimEnabled:o.enable_claim})),br=zod.z.object({value:zod.z.string()}).transform(o=>S__default.default(o.value).shiftedBy(-9).toNumber()),Wo=async(o,e)=>{let t=o.address.get("loyaltyProgram.rewardPool"),s=await o.scallopSuiKit.queryGetObject(t);if(s?.data?.content?.dataType!=="moveObject")return null;let r=s.data.content.fields,{isClaimEnabled:a,totalPoolReward:n}=fr.parse(r),i={pendingReward:0,totalPoolReward:n,isClaimEnabled:a};if(e=e??(await o.getVeScas())[0]?.keyObject,!e)return i;let c=o.address.get("loyaltyProgram.userRewardTableId"),d=await o.scallopSuiKit.queryGetDynamicFieldObject({parentId:c,name:{type:"0x2::object::ID",value:typeof e=="string"?e:e.objectId}});if(d?.data?.content?.dataType!=="moveObject")return i;let l=d.data.content.fields;return i.pendingReward=br.parse(l),i},hr=zod.z.object({reserve_ve_sca_key:zod.z.nullable(zod.z.object({fields:zod.z.object({id:zod.z.object({id:zod.z.string()})}),type:zod.z.string()})),enable_claim:zod.z.boolean()}).transform(o=>({reserveVeScaKey:o.reserve_ve_sca_key?.fields.id.id,isClaimEnabled:o.enable_claim})),Sr=zod.z.object({value:zod.z.string()}).transform(o=>S__default.default(o.value).shiftedBy(-9).toNumber()),Go=async(o,e)=>{let t=o.address.get("veScaLoyaltyProgram.veScaRewardPool"),s=await o.scallopSuiKit.queryGetObject(t);if(s?.data?.content?.dataType!=="moveObject")return null;let r=s.data.content.fields,{isClaimEnabled:a,reserveVeScaKey:n}=hr.parse(r),i={pendingVeScaReward:0,pendingScaReward:0,totalPoolReward:0,isClaimEnabled:a},c;if(n&&(c=await o.getVeSca(n),i.totalPoolReward=c?.currentVeScaBalance??0),e=e??(await o.getVeScas())[0]?.keyObject,!e)return i;let d=o.address.get("veScaLoyaltyProgram.veScaRewardTableId"),l=await o.scallopSuiKit.queryGetDynamicFieldObject({parentId:d,name:{type:"0x2::object::ID",value:typeof e=="string"?e:e.objectId}});if(l?.data?.content?.dataType!=="moveObject")return i;let u=l.data.content.fields;i.pendingScaReward=Sr.parse(u);let p=Math.max((c?.unlockAt??0)-Date.now(),0);return i.pendingVeScaReward=i.pendingScaReward*(Math.floor(p/1e3)/126144e3),i};var Tr=[client.getFullnodeUrl("mainnet"),"https://sui-mainnet.public.blastapi.io","https://sui-mainnet-ca-2.cosmostation.io","https://sui-mainnet-eu-4.cosmostation.io","https://sui-mainnet-endpoint.blockvision.org","https://sui-rpc.publicnode.com","https://sui-mainnet-rpc.allthatnode.com","https://mainnet.suiet.app","https://mainnet.sui.rpcpool.com","https://sui1mainnet-rpc.chainode.tech","https://fullnode.mainnet.apis.scallop.io","https://sui-mainnet-us-2.cosmostation.io"],Ee=async o=>{for(let e of Tr)try{return await o(new client.SuiClient({url:e}))}catch(t){if(t.status!==429)throw t;await new Promise(s=>setTimeout(s,500));}throw new Error("Failed to fetch data")},Cr=async(o,e,t="0x00481a93b819d744a7d79ecdc6c62c74f2f7cb4779316c4df640415817ac61bb")=>{let s=null,r=!1,a={};do{let n=await o.getDynamicFields({parentId:t,limit:10,cursor:s});if(!n)break;let{data:i,hasNextPage:c,nextCursor:d}=n;i.forEach(l=>{let u=`0x${l.name.value.name}`;e.has(u)&&(a[u]=l.objectId);}),r=c,s=d;}while(r);return a},Y=async(o,e,t,s=!0)=>{let r=(await Ee(async a=>await a.getDynamicFieldObject({parentId:o,name:{type:e,value:t}}))).data;return s?r?.objectId:r?.content},Xo=async(o,e=[])=>{let t=new Set(e),s={},a=(await fetch(`https://sui.apis.scallop.io/addresses/${o}`).then(k=>k.json())).mainnet;if(!a)throw new Error("Failed to fetch addresses");let n=Object.keys(a.core.coins);if(n.length===0)throw new Error("Pools empty");let i=n.reduce((k,I)=>{if(t.size>0&&!t.has(I))return k;let _=a.core.coins[I];return _&&_.coinType&&k.push([I,_.coinType]),k},[]);if(i.length===0)throw new Error("No coinTypesPairs");let c=a.core.market,d=(await Ee(async k=>await k.getObject({id:c,options:{showContent:!0}}))).data;if(!(d&&d.content?.dataType==="moveObject"))throw new Error("Failed to fetch marketObject");let l=d.content.fields,u=l.vault.fields.balance_sheets.fields.table.fields.id.id,p=l.collateral_stats.fields.table.fields.id.id,y=l.borrow_dynamics.fields.table.fields.id.id,g=l.interest_models.fields.table.fields.id.id,f=l.risk_models.fields.table.fields.id.id,m="0x1::type_name::TypeName",b="0xc38f849e81cfe46d4e4320f508ea7dda42934a329d5a6571bb4c3cb6ea63f5da::market_dynamic_keys::BorrowFeeKey",h="0x6e641f0dca8aedab3101d047e96439178f16301bf0b57fe8745086ff1195eb3e::market_dynamic_keys::SupplyLimitKey",T="0xe7dbb371a9595631f7964b7ece42255ad0e738cc85fe6da26c7221b220f01af6::market_dynamic_keys::BorrowLimitKey",P="0xe7dbb371a9595631f7964b7ece42255ad0e738cc85fe6da26c7221b220f01af6::market_dynamic_keys::IsolatedAssetKey",D=await Ee(async k=>await Cr(k,new Set(i.map(([,I])=>I))));return await Promise.all(i.map(async([k,I])=>{let _=I.slice(2),F=await Promise.all([Y(u,m,{name:_},!0),Y(p,m,{name:_},!0),Y(y,m,{name:_},!0),Y(g,m,{name:_},!0),Y(f,m,{name:_},!0),Y(c,b,_,!0),Y(c,h,_,!0),Y(c,T,_,!0),Y(c,P,_,!1)]),{symbol:ee,metaData:U}=a.core.coins[k],C={spool:"",spoolReward:""},A=a.spool.pools[`s${k}`];if(A){let{id:M,rewardPoolId:$}=A;C={spool:M,spoolReward:$};}let O={sCoinType:"",sCoinTreasury:"",sCoinMetadataId:"",sCoinSymbol:""},R=`s${k}`,B=a.scoin.coins[R];if(B){let{coinType:M,treasury:$,metaData:H,symbol:J}=B;O={sCoinType:M,sCoinTreasury:$,sCoinMetadataId:H,sCoinSymbol:J};}let V={pythFeed:"",pythFeedObjectId:""};if(a.core.coins[k]?.oracle.pyth){let{feed:M,feedObject:$}=a.core.coins[k].oracle.pyth;V={pythFeed:M,pythFeedObjectId:$};}a.core.coins[k].oracle.pyth;let K=(await Ee(async M=>await M.getCoinMetadata({coinType:I})))?.decimals??0,q=C?`s${k}`:void 0;s[k]={coinName:k,symbol:ee,lendingPoolAddress:F[0]??"",collateralPoolAddress:F[1]??"",borrowDynamic:F[2]??"",interestModel:F[3]??"",riskModel:F[4],borrowFeeKey:F[5]??"",supplyLimitKey:F[6]??"",borrowLimitKey:F[7]??"",isolatedAssetKey:F[8]?.fields?.id.id??"",isIsolated:F[8]?.fields?.value??!1,...C,...O,sCoinName:R,coinMetadataId:U,coinType:I,spoolName:q,decimals:K,...V,flashloanFeeObject:D[I]??""},await new Promise(M=>setTimeout(M,1e3));})),s};var zo=async(o,e=[...o.constants.whitelist.lending],t,s,r,a=!1)=>{let n=e.map(y=>o.utils.parseMarketCoinName(y)),i=n.filter(y=>o.constants.whitelist.spool.has(y));r=r??await o.utils.getCoinPrices(),s=s??(await o.getMarketPools(e,{indexer:a,coinPrices:r})).pools;let c=await o.getSpools(i,{indexer:a,marketPools:s,coinPrices:r}),[d,l,u]=await Promise.all([o.getCoinAmounts(e,t),o.getMarketCoinAmounts(n,t),o.getAllStakeAccounts(t)]),p={};return await Promise.allSettled(e.map(async y=>{let g=i.find(m=>m===o.utils.parseMarketCoinName(y)),f=o.utils.parseMarketCoinName(y);p[y]=await Ot(o,y,t,a,s?.[y],g?c[g]:void 0,g?u[g]:[],d?.[y],l?.[f],r?.[y]??0);})),p},Ot=async(o,e,t,s=!1,r,a,n,i,c,d,l)=>{let u=o.utils.parseMarketCoinName(e);if(d=d??(await o.utils.getCoinPrices())?.[e]??0,r=r??await o.getMarketPool(e,{indexer:s,coinPrice:d}),!r)throw new Error(`Failed to fetch marketPool for ${e}`);a=a??o.constants.whitelist.spool.has(u)?await o.getSpool(u,{indexer:s,marketPool:r,coinPrices:{[e]:d}}):void 0,n=n||o.constants.whitelist.spool.has(u)?await o.getStakeAccounts(u,t):[],i=i||await o.getCoinAmount(e,t),c=c||await o.getMarketCoinAmount(u,t),l=l||await o.getSCoinAmount(u,t);let p=o.utils.getCoinDecimal(e),y=S__default.default(0),g=S__default.default(0),f=S__default.default(0),m=S__default.default(0),b=S__default.default(0),h=S__default.default(0),T=S__default.default(0),P=S__default.default(0),D=S__default.default(0);if(a)for(let V of n){let v=S__default.default(V.staked),j=v.shiftedBy(-1*a.coinDecimal),K=v.multipliedBy(r?.conversionRate??1),q=K.shiftedBy(-1*a.coinDecimal),M=q.multipliedBy(a.coinPrice);y=y.plus(v),g=g.plus(j),f=f.plus(K),m=m.plus(q),b=b.plus(M),h=h.plus(v),T=h.shiftedBy(-1*a.coinDecimal);let H=a.currentPointIndex?S__default.default(a.currentPointIndex-V.index).dividedBy(1e9):1;P=P.plus(v.multipliedBy(H).plus(V.points).multipliedBy(a.exchangeRateNumerator).dividedBy(a.exchangeRateDenominator)),D=P.shiftedBy(-1*a.rewardCoinDecimal);}let k=S__default.default(c).plus(S__default.default(l)).multipliedBy(r?.conversionRate??1),I=k.shiftedBy(-1*p),_=I.multipliedBy(d??0),F=S__default.default(d??0).multipliedBy(r?.conversionRate??1),ee=S__default.default(c).plus(S__default.default(l)),U=ee.shiftedBy(-1*p),C=S__default.default(i),A=C.shiftedBy(-1*p),O=de(k,r?.supplyAmount??1/0).plus(f),R=de(I,r?.supplyCoin??1/0).plus(m);return {coinName:e,symbol:o.utils.parseSymbol(e),coinType:o.utils.parseCoinType(e),marketCoinType:o.utils.parseMarketCoinType(e),sCoinType:r?.sCoinType??"",coinDecimal:p,coinPrice:d??0,conversionRate:r?.conversionRate??1,marketCoinPrice:F.toNumber(),supplyApr:r?.supplyApr??0,supplyApy:r?.supplyApy??0,rewardApr:a?.rewardApr??0,suppliedAmount:k.plus(f).toNumber(),suppliedCoin:I.plus(m).toNumber(),suppliedValue:_.plus(b).toNumber(),stakedMarketAmount:y.toNumber(),stakedMarketCoin:g.toNumber(),stakedAmount:f.toNumber(),stakedCoin:m.toNumber(),stakedValue:b.toNumber(),unstakedMarketAmount:ee.toNumber(),unstakedMarketCoin:U.toNumber(),unstakedAmount:k.toNumber(),unstakedCoin:I.toNumber(),unstakedValue:_.toNumber(),availableSupplyAmount:C.toNumber(),availableSupplyCoin:A.toNumber(),availableWithdrawAmount:O.toNumber(),availableWithdrawCoin:R.toNumber(),availableStakeAmount:ee.toNumber(),availableStakeCoin:U.toNumber(),availableUnstakeAmount:h.toNumber(),availableUnstakeCoin:T.toNumber(),availableClaimAmount:P.toNumber(),availableClaimCoin:D.toNumber(),isIsolated:r?r.isIsolated:!1}},Ho=async(o,e,t,s,r=!1)=>{t=t??await o.getMarketPools(void 0,{indexer:r}),s=s??await o.getAllCoinPrices({marketPools:t.pools});let[a,n]=await Promise.all([o.getCoinAmounts(void 0,e),o.getObligations(e)]),i=await o.scallopSuiKit.queryGetObjects(n.map(d=>d.id)),c={};return await Promise.allSettled(n.map(async(d,l)=>{c[d.keyId]=await Or(o,i[l]??d.id,e,r,t,s,a);})),c},Or=async(o,e,t,s=!1,r,a,n)=>{r=r??await o.getMarketPools(void 0,{indexer:s}),a=a??await o.getAllCoinPrices({marketPools:r.pools}),n=n??await o.getCoinAmounts(Array.from(o.constants.whitelist.lending),t);let[i,c,d]=await Promise.all([o.queryObligation(e),o.getBorrowIncentivePools(void 0,{coinPrices:a,marketPools:r.pools}),o.getBorrowIncentiveAccounts(e)]),l={},u={},p={},y=0,g=S__default.default(0),f=S__default.default(0),m=S__default.default(0),b=0,h=0,T=S__default.default(0),P=S__default.default(0);for(let C of Array.from(o.constants.whitelist.collateral)){let A=i?.collaterals.find(v=>{let j=o.utils.parseCoinNameFromType(v.type.name);return C===j}),O=r.collaterals[C],R=o.utils.getCoinDecimal(C),B=a?.[C],V=n?.[C]??0;if(O&&B){let v=S__default.default(A?.amount??0),j=v.shiftedBy(-1*R),K=j.multipliedBy(B),q=K.multipliedBy(O.collateralFactor),M=K.multipliedBy(O.liquidationFactor),$=S__default.default(V),H=$.shiftedBy(-1*R);g=g.plus(K),f=f.plus(q),m=m.plus(M),v.isGreaterThan(0)&&y++,l[C]={coinName:C,coinType:o.utils.parseCoinType(C),symbol:o.utils.parseSymbol(C),coinDecimal:R,coinPrice:B,depositedAmount:v.toNumber(),depositedCoin:j.toNumber(),depositedValue:K.toNumber(),borrowCapacityValue:q.toNumber(),requiredCollateralValue:M.toNumber(),availableDepositAmount:$.toNumber(),availableDepositCoin:H.toNumber(),availableWithdrawAmount:0,availableWithdrawCoin:0};}}let D=[...new Set([...Object.values(r.pools).filter(C=>!!C).map(C=>C.coinName)])];for(let C of D){let A=i?.debts.find(v=>{let j=o.utils.parseCoinNameFromType(v.type.name);return C===j}),O=r.pools[C],R=o.utils.getCoinDecimal(C),B=a?.[C],V=n?.[C]??0;if(O&&B){let v=A?.borrowIndex?O.borrowIndex/Number(A.borrowIndex)-1:0,j=S__default.default(A?.amount??0).multipliedBy(v+1),K=j.shiftedBy(-1*R),q=j,M=q.shiftedBy(-1*R),$=S__default.default(V),H=$.shiftedBy(-1*R),J=M.multipliedBy(B),ke=J.multipliedBy(O.borrowWeight);T=T.plus(J),P=P.plus(ke),j.isGreaterThan(0)&&b++,u[C]={coinName:C,coinType:o.utils.parseCoinType(C),symbol:o.utils.parseSymbol(C),coinDecimal:R,coinPrice:B,borrowedAmount:j.toNumber(),borrowedCoin:K.toNumber(),borrowedValue:J.toNumber(),borrowedValueWithWeight:ke.toNumber(),borrowIndex:Number(A?.borrowIndex??0),requiredRepayAmount:q.toNumber(),requiredRepayCoin:M.toNumber(),availableBorrowAmount:0,availableBorrowCoin:0,availableRepayAmount:$.toNumber(),availableRepayCoin:H.toNumber()};}}for(let[C,A]of Object.entries(d)){if(!A)continue;let O=C,R=c[O];if(R){let B=[];Object.entries(A.pointList).forEach(([V,v])=>{let j=R.points[o.utils.parseSCoinTypeNameToMarketCoinName(V)];if(v&&j){let K=S__default.default(0),q=S__default.default(0),M=S__default.default(v.weightedAmount),H=j.currentPointIndex?Math.max(S__default.default(j.currentPointIndex-v.index).dividedBy(1e9).toNumber(),0):1;K=K.plus(M.multipliedBy(H).plus(v.points)),q=K.shiftedBy(-1*j.coinDecimal);let J=S__default.default(1e12),ke=S__default.default(v.weightedAmount).div(S__default.default(A.debtAmount).multipliedBy(j.baseWeight).dividedBy(J)).isFinite()?S__default.default(v.weightedAmount).div(S__default.default(A.debtAmount).multipliedBy(j.baseWeight).dividedBy(J)).toNumber():1;K.isGreaterThanOrEqualTo(0)&&B.push({coinName:j.coinName,coinType:j.coinType,symbol:j.symbol,coinDecimal:j.coinDecimal,coinPrice:j.coinPrice,weightedBorrowAmount:M.toNumber(),availableClaimAmount:K.toNumber(),availableClaimCoin:q.toNumber(),boostValue:ke});}}),Object.keys(R.points).some(V=>{let v=R.points[V]?.rewardApr;return v!==1/0&&typeof v=="number"&&v>0})&&A.debtAmount>0&&h++,p[O]={coinName:R.coinName,coinType:R.coinType,symbol:R.symbol,coinDecimal:R.coinDecimal,coinPrice:R.coinPrice,rewards:B};}}let k=m.isZero()?P.isGreaterThan(0)?S__default.default(100):S__default.default(0):P.dividedBy(m);k=k.isLessThan(1)?k:S__default.default(1);let I=g.minus(T).isGreaterThan(0)?g.minus(T):S__default.default(0),_=f.minus(P).isGreaterThan(0)?f.minus(P):S__default.default(0),F=P.isGreaterThan(0)?m:S__default.default(0),ee=P.minus(F).isGreaterThan(0)?P.minus(F):S__default.default(0),U={obligationId:typeof e=="string"?e:e.objectId,totalDepositedValue:g.toNumber(),totalBorrowedValue:T.toNumber(),totalBalanceValue:I.toNumber(),totalBorrowCapacityValue:f.toNumber(),totalAvailableCollateralValue:_.toNumber(),totalBorrowedValueWithWeight:P.toNumber(),totalRequiredCollateralValue:F.toNumber(),totalUnhealthyCollateralValue:ee.toNumber(),totalRiskLevel:k.toNumber(),totalDepositedPools:y,totalBorrowedPools:b,totalRewardedPools:h,collaterals:l,debts:u,borrowIncentives:p};for(let[C,A]of Object.entries(U.collaterals)){if(!A)continue;let O=r.collaterals[C];if(O){let R=S__default.default(U.totalAvailableCollateralValue).dividedBy(O.collateralFactor).dividedBy(O.coinPrice).shiftedBy(O.coinDecimal);R=U.totalBorrowedValueWithWeight===0?S__default.default(A.depositedAmount):de(R.multipliedBy(Ae(S__default.default(U.totalAvailableCollateralValue).dividedBy(O.collateralFactor).toNumber(),3,"increase")).toNumber(),A.depositedAmount,O.depositAmount),A.availableWithdrawAmount=R.toNumber(),A.availableWithdrawCoin=R.shiftedBy(-1*A.coinDecimal).toNumber();}}for(let[C,A]of Object.entries(U.debts)){if(!A)continue;let O=r.pools[C];if(O){let R=S__default.default(A.requiredRepayAmount).multipliedBy(Ae(A.borrowedValue,3,"decrease")),B=S__default.default(U.totalAvailableCollateralValue).dividedBy(O.borrowWeight).shiftedBy(O.coinDecimal).dividedBy(O.coinPrice);B=U.totalAvailableCollateralValue!==0&&S__default.default(O.maxBorrowCoin).isGreaterThan(O.borrowCoin)?de(B.multipliedBy(Ae(B.shiftedBy(-1*O.coinDecimal).multipliedBy(O.coinPrice).toNumber(),3,"increase")).toNumber(),O.supplyAmount):S__default.default(0),A.availableBorrowAmount=B.toNumber(),A.availableBorrowCoin=B.shiftedBy(-1*A.coinDecimal).toNumber(),A.requiredRepayAmount=R.toNumber(),A.requiredRepayCoin=R.shiftedBy(-1*A.coinDecimal).toNumber();}}return U},Yo=async(o,e=!1)=>{let t=await o.getMarketPools(void 0,{indexer:e}),s=S__default.default(0),r=S__default.default(0),a=S__default.default(0);if(e){let i=await o.indexer.getTotalValueLocked();return {supplyValue:i.supplyValue,supplyValueChangeRatio:i.supplyValueChangeRatio,borrowValue:i.borrowValue,borrowValueChangeRatio:i.borrowValueChangeRatio,totalValue:i.totalValue,totalValueChangeRatio:i.totalValueChangeRatio,supplyLendingValue:i.supplyLendingValue,supplyLendingValueChangeRatio:i.supplyLendingValueChangeRatio,supplyCollateralValue:i.supplyCollateralValue,supplyCollateralValueChangeRatio:i.supplyCollateralValueChangeRatio}}for(let i of Object.values(t.pools))i&&(s=s.plus(S__default.default(i.supplyCoin).multipliedBy(i.coinPrice)),a=a.plus(S__default.default(i.borrowCoin).multipliedBy(i.coinPrice)));for(let i of Object.values(t.collaterals))i&&(r=r.plus(S__default.default(i.depositCoin).multipliedBy(i.coinPrice)));return {supplyValue:s.plus(r).toNumber(),supplyLendingValue:s.toNumber(),supplyCollateralValue:r.toNumber(),borrowValue:a.toNumber(),totalValue:s.plus(r).minus(a).toNumber()}},Jo=async(o,e,t=!1)=>{let s=await o.getAllCoinPrices({indexer:t}),r=await o.getMarketPools(void 0,{indexer:t,coinPrices:s}),[a,n,i,c]=await Promise.all([o.getLendings(void 0,e,{indexer:t,marketPools:r.pools,coinPrices:s}),o.getObligationAccounts(e,{indexer:t,market:r,coinPrices:s}),o.getBorrowIncentivePools(void 0,{marketPools:r.pools,coinPrices:s}),o.getVeScas({walletAddress:e,excludeEmpty:!0})]),d=Object.values(a).filter(m=>!!m&&m.availableWithdrawCoin>0).map(m=>({suppliedCoin:m.availableWithdrawCoin,suppliedValue:m.suppliedValue,stakedCoin:m.availableUnstakeCoin,coinName:m.coinName,symbol:m.symbol,coinType:m.coinType,coinPrice:m.coinPrice,coinDecimals:m.coinDecimal,supplyApr:m.supplyApr,supplyApy:m.supplyApy,incentiveApr:isFinite(m.rewardApr)?m.rewardApr:0})),l=Object.values(n).filter(m=>!!m&&(m.totalBorrowedValueWithWeight>0||m.totalDepositedValue>0)).map(m=>({obligationId:m.obligationId,totalDebtsInUsd:m.totalBorrowedValueWithWeight,totalCollateralInUsd:m.totalDepositedValue,riskLevel:m.totalRiskLevel,availableCollateralInUsd:m.totalAvailableCollateralValue,totalUnhealthyCollateralInUsd:m.totalUnhealthyCollateralValue,collaterals:Object.values(m.collaterals).filter(b=>!!b&&b.depositedCoin>0).map(b=>({coinName:b.coinName,symbol:b.symbol,coinDecimals:b.coinDecimal,coinType:b.coinType,coinPrice:b.coinPrice,depositedCoin:b.depositedCoin,depositedValueInUsd:b.depositedValue})),borrowedPools:Object.values(m.debts).filter(b=>!!b&&b.borrowedCoin>0).map(b=>({coinName:b.coinName,symbol:b.symbol,coinDecimals:b.coinDecimal,coinType:b.coinType,coinPrice:b.coinPrice,borrowedCoin:b.borrowedCoin,borrowedValueInUsd:b.borrowedValueWithWeight,borrowApr:r.pools[b.coinName]?.borrowApr,borrowApy:r.pools[b.coinName]?.borrowApy,incentiveInfos:Object.values(i[b.coinName]?.points??{}).filter(h=>!!h&&isFinite(h.rewardApr)).map(h=>({coinName:h.coinName,symbol:h.symbol,coinType:h.coinType,incentiveApr:h.rewardApr}))}))})),u="sui",p="SUI",y=Object.values(a).reduce((m,b)=>{if(b){if(b.availableClaimCoin===0)return m;m[u]?m[u].pendingRewardInCoin+=b.availableClaimCoin:m[u]={symbol:p,coinType:suiKit.normalizeStructTag(suiKit.SUI_TYPE_ARG),coinPrice:s[u]??0,pendingRewardInCoin:b.availableClaimCoin};}return m},{}),g=Object.values(n).filter(m=>!!m).reduce((m,b)=>(Object.values(b.borrowIncentives).forEach(h=>{h?.rewards.forEach(T=>{if(T.availableClaimCoin===0)return m;m[T.coinName]?m[T.coinName].pendingRewardInCoin+=T.availableClaimCoin:m[T.coinName]={symbol:T.symbol,coinType:T.coinType,coinPrice:T.coinPrice,pendingRewardInCoin:T.availableClaimCoin};});}),m),{}),f=c.map(({keyId:m,lockedScaCoin:b,currentVeScaBalance:h,unlockAt:T})=>({veScaKey:m,coinPrice:s.sca??0,lockedScaInCoin:b,lockedScaInUsd:b*(s.sca??0),currentVeScaBalance:h,remainingLockPeriodInDays:T-Date.now()>0?(T-Date.now())/864e5:0,unlockAt:T}));return {totalSupplyValue:d.reduce((m,b)=>(m+=b.suppliedValue,m),0),...l.reduce((m,b)=>(m.totalDebtValue+=b.totalDebtsInUsd,m.totalCollateralValue+=b.totalCollateralInUsd,m),{totalDebtValue:0,totalCollateralValue:0}),totalLockedScaValue:f.reduce((m,b)=>(m+=b.lockedScaInUsd,m),0),lendings:d,borrowings:l,pendingRewards:{lendings:Object.entries(y).reduce((m,[b,h])=>(m.push({...h,coinName:"sui",pendingRewardInUsd:h.coinPrice*h.pendingRewardInCoin}),m),[]),borrowIncentives:Object.entries(g).reduce((m,[b,h])=>(m.push({coinName:b,...h,pendingRewardInUsd:h.coinPrice*h.pendingRewardInCoin}),m),[])},veScas:f}};var Rt=async({address:o,scallopSuiKit:e},t,s)=>{let r=o.get(`core.coins.${t}.oracle.pyth.feedObject`);if(s=s||(await e.queryGetObject(r))?.data,s){let a=s;if(a.content&&"fields"in a.content){let n=a.content.fields,i=Number(n.price_info.fields.price_feed.fields.price.fields.expo.fields.magnitude),c=Number(n.price_info.fields.price_feed.fields.price.fields.expo.fields.negative),d=Number(n.price_info.fields.price_feed.fields.price.fields.price.fields.magnitude),l=Number(n.price_info.fields.price_feed.fields.price.fields.price.fields.negative);return d*10**((c?-1:1)*i)*(l?-1:1)}}return 0},Zo=async({address:o,scallopSuiKit:e},t)=>{let s=t.reduce((n,i)=>{let c=o.get(`core.coins.${i}.oracle.pyth.feedObject`);return c&&(n[c]?n[c].push(i):n[c]=[i]),n},{}),a=(await e.queryGetObjects(Object.keys(s))).reduce((n,i)=>(s[i.objectId].forEach(c=>{n[c]=i;}),n),{});return (await Promise.all(Object.entries(a).map(async([n,i])=>({coinName:n,price:await Rt({address:o,scallopSuiKit:e},n,i)})))).reduce((n,i)=>(n[i.coinName]=i.price,n),{})},es=async(o,e,t,s=!1)=>{if(t=t??(s?await o.getCoinPricesByIndexer():await o.utils.getCoinPrices()),e=e??(await o.getMarketPools(void 0,{coinPrices:t,indexer:s})).pools,!e)throw new Error("Failed to fetch market pool for getAllCoinPrices");let r={};return o.constants.whitelist.scoin.forEach(a=>{let n=o.utils.parseCoinName(a);r[a]=S__default.default(t[n]??0).multipliedBy(e[n]?.conversionRate??1).toNumber();}),{...t,...r}};var ts=async({address:o,scallopSuiKit:e},t)=>{let s=o.get("referral.bindingTableId"),r=await e.queryGetDynamicFieldObject({parentId:s,name:{type:"address",value:t}});return r?.data?.content?.dataType!=="moveObject"?null:r.data.content.fields.value};var os=async({utils:o},e)=>{let t=o.address.get("scoin.id"),s=[o.getSCoinTreasury(e)],r=[o.parseSCoinType(e),o.parseUnderlyingSCoinType(e)],a=`${t}::s_coin_converter::total_supply`,i=(await o.scallopSuiKit.queryInspectTxn({queryTarget:a,args:s,typeArgs:r}))?.results;if(i&&i[0]?.returnValues){let c=Uint8Array.from(i[0].returnValues[0][0]),d=i[0].returnValues[0][1];return Vs__default.default(d==="u64","Result type is not u64"),S__default.default(bcs.bcs.u64().parse(c)).shiftedBy(o.getCoinDecimal(o.parseCoinName(e))).toNumber()}return 0},ss=async({utils:o},e=[...o.constants.whitelist.scoin],t)=>{let s=t||o.suiKit.currentAddress,r={};return await Promise.allSettled(e.map(async a=>{let n=await It({utils:o},a,s);r[a]=n;})),r},It=async({utils:o},e,t)=>{let s=t||o.suiKit.currentAddress,r=o.parseSCoinType(e),a=await o.scallopSuiKit.queryGetCoinBalance({owner:s,coinType:r});return S__default.default(a?.totalBalance??"0").toNumber()},vr=(o,e,t)=>{if(e===t)throw new Error("fromAsset and toAsset must be different");if(!o.constants.whitelist.scoin.has(e))throw new Error("fromAsset is not supported");if(!o.constants.whitelist.scoin.has(t))throw new Error("toAsset is not supported")},rs=async(o,e,t,s)=>{vr(o.utils,e,t);let r=o.utils.parseCoinName(e),a=o.utils.parseCoinName(t),n=await Promise.all([o.getMarketPool(r),o.getMarketPool(a)]);if(n.some(u=>!u))throw new Error("Failed to fetch the lendings data");if(n.some(u=>u?.conversionRate===0))throw new Error("Conversion rate cannot be zero");let i=n[0].conversionRate,c=1/n[1].conversionRate,l=await(async()=>{let u=await o.utils.getCoinPrices();if(!u[r]||!u[a])throw new Error("Failed to fetch the coin prices");if(u[a]===0)throw new Error("Price of toCoin cannot be zero");return u[r]/u[a]})();return S__default.default(i).multipliedBy(l).multipliedBy(c).toNumber()};var as=async(o,e,t=o.address.get("core.oracles.switchboard.registryTableId"))=>{let s=[],r=e.map((i,c)=>{let d=o.utils.address.get(`core.coins.${i}.oracle.switchboard`);return d||(s.push({idx:c,coinName:i}),null)});if(s.length===0)return r;let n=s.map(i=>i.coinName).map(i=>{let c=o.utils.parseCoinType(i);if(!c)throw new Error(`Invalid coin name: ${i}`);return c});return await Promise.all(n.map(async(i,c)=>{let d={type:"0x1::type_name::TypeName",value:{name:i.slice(2)}},l=await o.scallopSuiKit.queryGetDynamicFieldObject({parentId:t,name:d});if(!l?.data?.content||l.data.content.dataType!=="moveObject")throw new Error(`No on-demand aggregator found for ${i}`);let u=l.data.content;r[c]=u.fields.value;})),r};var ns=async({address:o,scallopSuiKit:e})=>{let t=`${o.get("core.packages.xOracle.object")}::price_update_policy::PriceUpdatePolicyRulesKey`,[s,r]=await Promise.all([e.queryGetDynamicFieldObject({parentId:o.get("core.oracles.primaryPriceUpdatePolicyObject"),name:{type:t,value:{dummy_field:!1}}}),e.queryGetDynamicFieldObject({parentId:o.get("core.oracles.secondaryPriceUpdatePolicyObject"),name:{type:t,value:{dummy_field:!1}}})]);return {primary:s,secondary:r}},vt=async(o,e)=>{if(e==="primary"&&!o.address.get("core.oracles.primaryPriceUpdatePolicyVecsetId"))return console.error("Primary price update policy vecset id is not set"),null;if(e==="secondary"&&!o.address.get("core.oracles.secondaryPriceUpdatePolicyVecsetId"))return console.error("Secondary price update policy vecset id is not set"),null;let t=i=>`${i}::rule::Rule`,s=Object.values(o.address.get("core.packages.pyth.lst")??{}).reduce((i,c)=>(i[t(c.object)]="pyth",i),{}),r={[t(o.address.get("core.packages.pyth.object"))]:"pyth",[t(o.address.get("core.packages.supra.object"))]:"supra",[t(o.address.get("core.packages.switchboard.object"))]:"switchboard",...s},a={},n=null;do{let i=await o.scallopSuiKit.queryGetDynamicFields({parentId:e==="primary"?o.address.get("core.oracles.primaryPriceUpdatePolicyVecsetId"):o.address.get("core.oracles.secondaryPriceUpdatePolicyVecsetId"),cursor:n,limit:10});if(!i)break;let{data:c,hasNextPage:d,nextCursor:l}=i;n=l;let u=c.map(y=>y.objectId);if((await o.scallopSuiKit.queryGetObjects(u)).forEach(y=>{if(!y.content||y.content.dataType!=="moveObject")return;let g=y.content.fields,f=g.name.fields.name,m=o.parseCoinNameFromType(`0x${f}`);if(!m)throw new Error(`Invalid asset name: ${m}`);a[m]||(a[m]=[]),g.value.fields.contents.forEach(h=>{a[m].push(r[`0x${h.fields.name}`]);});}),!d)break}while(n);return a};var jt=class{indexer;utils;constructor(e){this.utils=e.utils??new Tt(e),this.indexer=e.indexer??new Pt({queryClient:this.utils.queryClient,...e}),this.initIndexerFallback();}initIndexerFallback(){this.queryMarket=E.call(this,this.queryMarket),this.getMarketPools=E.call(this,this.getMarketPools),this.getMarketPool=E.call(this,this.getMarketPool),this.getMarketCollaterals=E.call(this,this.getMarketCollaterals),this.getMarketCollateral=E.call(this,this.getMarketCollateral),this.getSpools=E.call(this,this.getSpools),this.getSpool=E.call(this,this.getSpool),this.getBorrowIncentivePools=E.call(this,this.getBorrowIncentivePools),this.getLendings=E.call(this,this.getLendings),this.getLending=E.call(this,this.getLending),this.getObligationAccounts=E.call(this,this.getObligationAccounts),this.getObligationAccount=E.call(this,this.getObligationAccount),this.getTvl=E.call(this,this.getTvl);}async init(e=!1){await this.utils.init({force:e});}get constants(){return this.utils.constants}get walletAddress(){return this.utils.walletAddress}get scallopSuiKit(){return this.utils.scallopSuiKit}get address(){return this.utils.address}async queryMarket(e){return await ao(this,e?.indexer,e?.coinPrices)}async getMarketPools(e=[...this.constants.whitelist.lending],t){return await io(this,e,t?.indexer,t?.coinPrices)}async getMarketPool(e,t){return (await this.getMarketPools(void 0,t)).pools[e]}async getMarketCollaterals(e=[...this.constants.whitelist.collateral],t){return await co(this,e,t?.indexer)}async getMarketCollateral(e,t){return await He(this,e,t?.indexer)}async getObligations(e=this.walletAddress){return await re(this,e)}async queryObligation(e){return xe(this,e)}async getCoinAmounts(e,t=this.walletAddress){return await lo(this,e,t)}async getCoinAmount(e,t=this.walletAddress){return await Je(this,e,t)}async getMarketCoinAmounts(e,t=this.walletAddress){return await uo(this,e,t)}async getMarketCoinAmount(e,t=this.walletAddress){return await Ze(this,e,t)}async getPriceFromPyth(e){return await Rt(this,e)}async getPricesFromPyth(e){return await Zo(this,e)}async getSpools(e,t){return await wo(this,e,t?.indexer,t?.marketPools,t?.coinPrices)}async getSpool(e,t){return (await this.getSpools(void 0,t))[e]}async getAllStakeAccounts(e=this.walletAddress){return await be(this,e)}async getStakeAccounts(e,t=this.walletAddress){return (await this.getAllStakeAccounts(t))[e]??[]}async getStakePools(e=[...this.constants.whitelist.spool]){let t={};for(let s of e){let r=await it(this,s);r&&(t[s]=r);}return t}async getStakePool(e){return await it(this,e)}async getStakeRewardPools(e=[...this.constants.whitelist.spool]){let t={};return await Promise.allSettled(e.map(async s=>{let r=await ct(this,s);r&&(t[s]=r);})),t}async getStakeRewardPool(e){return await ct(this,e)}async getBorrowIncentivePools(e=[...this.constants.whitelist.lending],t){return await Uo(this,e,t?.indexer,t?.marketPools,t?.coinPrices)}async getBorrowIncentiveAccounts(e,t){return await qo(this,e,t)}async getLendings(e,t=this.walletAddress,s){return await zo(this,e,t,s?.marketPools,s?.coinPrices,s?.indexer)}async getLending(e,t=this.walletAddress,s){return await Ot(this,e,t,s?.indexer)}async getObligationAccounts(e=this.walletAddress,t){return await Ho(this,e,t?.market,t?.coinPrices,t?.indexer)}async getObligationAccount(e,t=this.walletAddress,s){let r=await this.getObligationAccounts(t,s);return Object.values(r).find(a=>a?.obligationId===e)}async getTvl(e){return await Yo(this,e?.indexer)}async getVeSca(e){return await oe(this.utils,e)}async getVeScas({walletAddress:e=this.walletAddress,excludeEmpty:t=!1}={}){return await Ke(this,e,t)}async getVeScaTreasuryInfo(){return await xo(this.utils)}async getVeScaKeyIdFromReferralBindings(e=this.walletAddress){return await ts(this,e)}async getBindedObligationId(e){return await $o(this,e)}async getBindedVeScaKey(e){return await Qo(this,e)}async getLoyaltyProgramInfos(e){return await Wo(this,e)}async getVeScaLoyaltyProgramInfos(e){return await Go(this,e)}async getSCoinTotalSupply(e){return await os(this,e)}async getSCoinAmounts(e,t=this.walletAddress){return await ss(this,e,t)}async getSCoinAmount(e,t=this.walletAddress){let s=this.utils.parseSCoinName(e);return s?await It(this,s,t):0}async getSCoinSwapRate(e,t){return await rs(this,e,t)}async getFlashLoanFees(e=[...this.constants.whitelist.lending]){return await po(this,e)}async getPoolSupplyLimit(e){return await Oe(this.utils,e)}async getPoolBorrowLimit(e){return await Re(this.utils,e)}async getIsolatedAssets(e=!1){return await to(this,e)}async isIsolatedAsset(e){return se(this.utils,e)}async getCoinPriceByIndexer(e){return this.indexer.getCoinPrice(e)}async getCoinPricesByIndexer(){return this.indexer.getCoinPrices()}async getAllCoinPrices(e){return es(this,e?.marketPools,e?.coinPrices,e?.indexer)}async getPoolAddresses(e=this.address.getId()){if(!e)throw new Error("apiAddressId is required");return Xo(e)}async getUserPortfolio(e){return Jo(this,e?.walletAddress??this.walletAddress,e?.indexer??!1)}async getPriceUpdatePolicies(){return await ns(this)}async getAssetOracles(){let[e,t]=await Promise.all([vt(this.utils,"primary"),vt(this.utils,"secondary")]);return [...this.constants.whitelist.lending].reduce((s,r)=>(s[r]={primary:e?.[r]??[],secondary:t?.[r]??[]},s),{})}async getSwitchboardOnDemandAggregatorObjectIds(e){return await as(this,e)}},Nt=jt;var _t=class{query;usePythPullModel;useOnChainXOracleList;pythSponsoredFeeds;constructor(e){this.query=e.query??new Nt(e),this.usePythPullModel=e.usePythPullModel??!0,this.useOnChainXOracleList=e.useOnChainXOracleList??!0,this.pythSponsoredFeeds=[...new Set(e.pythSponsoredFeeds??[])];}get utils(){return this.query.utils}get constants(){return this.utils.constants}get walletAddress(){return this.utils.walletAddress}get scallopSuiKit(){return this.utils.scallopSuiKit}get suiKit(){return this.scallopSuiKit.suiKit}get address(){return this.utils.address}async init(e=!1){await this.query.init(e);}createTxBlock(e){return Ko(this,e)}async selectCoin(e,t,s,r=this.walletAddress){if(t==="sui"){let[a]=e.splitSUIFromGas([s]);return {takeCoin:a}}else {let a=this.utils.parseCoinType(t),n=await this.utils.selectCoins(s,a,r),[i,c]=e.takeAmountFromCoins(n,s);return {takeCoin:i,leftCoin:c}}}async selectMarketCoin(e,t,s,r=this.walletAddress){let a=this.utils.parseMarketCoinType(t),n=await this.utils.selectCoins(s,a,r),i=n.reduce((l,u)=>(l+=Number(u.balance),l),0),[c,d]=e.takeAmountFromCoins(n,Math.min(s,i));return {takeCoin:c,leftCoin:d,totalAmount:i}}async selectSCoin(e,t,s,r=this.walletAddress){let a=this.utils.parseSCoinType(t),n=await this.utils.selectCoins(s,a,r),i=n.reduce((l,u)=>(l+=Number(u.balance),l),0),[c,d]=e.takeAmountFromCoins(n,Math.min(i,s));return {takeCoin:c,leftCoin:d,totalAmount:i}}async selectSCoinOrMarketCoin(e,t,s,r=this.walletAddress){let a=s,n={sCoins:[],marketCoins:[],leftCoins:[]};try{let{leftCoin:d,takeCoin:l,totalAmount:u}=await this.selectSCoin(e,t,a,r);if(n.leftCoins.push(d),n.sCoins.push(l),a-=u,a>0){let{leftCoin:p,takeCoin:y}=await this.selectMarketCoin(e,t,s,r);e.transferObjects([p],r),n.marketCoins.push(y);}}catch{let{takeCoin:l,leftCoin:u}=await this.selectMarketCoin(e,t,s,r);n.leftCoins.push(u),n.marketCoins.push(l);}e.transferObjects(n.leftCoins,r);let i=n.marketCoins.length>0?n.marketCoins.length>1?e.mergeCoins(n.marketCoins[0],n.marketCoins.slice(1)):n.marketCoins[0]:void 0;return {sCoin:n.sCoins.length>0?n.sCoins.length>1?e.mergeCoins(n.sCoins[0],n.sCoins.slice(1)):n.sCoins[0]:void 0,marketCoin:i}}async signAndSendTxBlock(e){return await this.scallopSuiKit.suiKit.signAndSendTxn(e)}moveCall(e,t,s,r){return e.moveCall(t,s,r)}},Bt=_t;var Mt=class{builder;networkType;constructor(e){this.builder=e.builder??new Bt(e),this.networkType=e.networkType??"mainnet";}get query(){return this.builder.query}get utils(){return this.query.utils}get constants(){return this.utils.constants}get walletAddress(){return this.utils.walletAddress}get scallopSuiKit(){return this.utils.scallopSuiKit}get address(){return this.builder.address}async init(e=!1){await this.builder.init(e);}async queryMarket(){return await this.query.queryMarket()}async getObligations(e){let t=e??this.walletAddress;return await this.query.getObligations(t)}async queryObligation(e){return await this.query.queryObligation(e)}async getAllStakeAccounts(e){let t=e??this.walletAddress;return await this.query.getAllStakeAccounts(t)}async getStakeAccounts(e,t){let s=t??this.walletAddress;return await this.query.getStakeAccounts(e,s)}async getStakePool(e){return await this.query.getStakePool(e)}async getStakeRewardPool(e){return await this.query.getStakeRewardPool(e)}async openObligation(e=!0){let t=this.builder.createTxBlock();return t.openObligationEntry(),e?await this.scallopSuiKit.signAndSendTxn(t):t.txBlock}async depositCollateral(e,t,s=!0,r,a){let n=this.builder.createTxBlock(),i=a??this.walletAddress;n.setSender(i);let c=await this.query.getObligations(i),d=r??c[0]?.id;if(d)await n.addCollateralQuick(t,e,d);else {let[l,u,p]=n.openObligation();await n.addCollateralQuick(t,e,l),n.returnObligation(l,p),n.transferObjects([u],i);}return s?await this.scallopSuiKit.signAndSendTxn(n):n.txBlock}async withdrawCollateral(e,t,s=!0,r,a,n){let i=this.builder.createTxBlock(),c=n??this.walletAddress;i.setSender(c);let d=await i.takeCollateralQuick(t,e,r,a);return i.transferObjects([d],c),s?await this.scallopSuiKit.signAndSendTxn(i):i.txBlock}async deposit(e,t,s=!0,r){let a=this.builder.createTxBlock(),n=r??this.walletAddress;a.setSender(n);let i=await a.depositQuick(t,e);return a.transferObjects([i],n),s?await this.scallopSuiKit.signAndSendTxn(a):a.txBlock}async depositAndStake(e,t,s=!0,r,a){let n=this.builder.createTxBlock(),i=a??this.walletAddress;n.setSender(i);let c=this.utils.parseMarketCoinName(e),d=await this.query.getStakeAccounts(c),l=r??d[0]?.id,u=await n.depositQuick(t,e,!1);if(l)await n.stakeQuick(u,c,l);else {let p=n.createStakeAccount(c);await n.stakeQuick(u,c,p),n.transferObjects([p],i);}return s?await this.scallopSuiKit.signAndSendTxn(n):n.txBlock}async withdraw(e,t,s=!0,r){let a=this.builder.createTxBlock(),n=r??this.walletAddress;a.setSender(n);let i=await a.withdrawQuick(t,e);return a.transferObjects([i],n),s?await this.scallopSuiKit.signAndSendTxn(a):a.txBlock}async borrow(e,t,s=!0,r,a,n){let i=this.builder.createTxBlock(),c=n??this.walletAddress;i.setSender(c);let d=this.constants.whitelist.lending.has(e);s&&d&&await i.unstakeObligationQuick(r,a);let l=await i.borrowQuick(t,e,r,a);return i.transferObjects([l],c),s&&d&&await i.stakeObligationWithVeScaQuick(r,a),s?await this.scallopSuiKit.signAndSendTxn(i):i.txBlock}async repay(e,t,s=!0,r,a,n){let i=this.builder.createTxBlock(),c=n??this.walletAddress;i.setSender(c);let d=this.constants.whitelist.lending.has(e);return s&&d&&await i.unstakeObligationQuick(r,a),await i.repayQuick(t,e,r),s&&d&&await i.stakeObligationWithVeScaQuick(r,a),s?await this.scallopSuiKit.signAndSendTxn(i):i.txBlock}async flashLoan(e,t,s,r=!0,a){let n=this.builder.createTxBlock(),i=a??this.walletAddress;n.setSender(i);let[c,d]=n.borrowFlashLoan(t,e);return n.repayFlashLoan(await s(n,c),d,e),r?await this.scallopSuiKit.signAndSendTxn(n):n.txBlock}async createStakeAccount(e,t=!0,s){let r=this.builder.createTxBlock(),a=s??this.walletAddress;r.setSender(a);let n=r.createStakeAccount(e);return r.transferObjects([n],a),t?await this.scallopSuiKit.signAndSendTxn(r):r.txBlock}async stake(e,t,s=!0,r,a){let n=this.builder.createTxBlock(),i=a??this.walletAddress;n.setSender(i);let c=await this.query.getStakeAccounts(e),d=r??c[0]?.id;if(d)await n.stakeQuick(t,e,d);else {let l=n.createStakeAccount(e);await n.stakeQuick(t,e,l),n.transferObjects([l],i);}return s?await this.scallopSuiKit.signAndSendTxn(n):n.txBlock}async unstake(e,t,s=!0,r,a){let n=this.builder.createTxBlock(),i=a??this.walletAddress;n.setSender(i);let c=await n.unstakeQuick(t,e,r);if(c){let d=this.utils.parseSCoinType(e);if(!d)throw new Error(`Invalid sCoin type: ${e}`);await this.utils.mergeSimilarCoins(n,c,d,x(n));}return n.transferObjects([c],i),s?await this.scallopSuiKit.signAndSendTxn(n):n.txBlock}async unstakeAndWithdraw(e,t,s=!0,r,a){let n=this.builder.createTxBlock(),i=a??this.walletAddress;n.setSender(i);let c=await n.unstakeQuick(t,e,r,!1),d=this.utils.parseCoinName(e);if(c){let l=n.withdraw(c,d);await this.utils.mergeSimilarCoins(n,l,this.utils.parseCoinType(d),x(n)),n.transferObjects([l],i);}else throw new Error(`No stake found for ${e}`);return s?await this.scallopSuiKit.signAndSendTxn(n):n.txBlock}async claim(e,t=!0,s,r){let a=this.builder.createTxBlock(),n=r??this.walletAddress;a.setSender(n);let i=await a.claimQuick(e,s);return a.transferObjects(i,n),t?await this.scallopSuiKit.signAndSendTxn(a):a.txBlock}async stakeObligation(e,t,s=!0,r){let a=this.builder.createTxBlock(),n=r??this.walletAddress;return a.setSender(n),await a.stakeObligationWithVeScaQuick(e,t),s?await this.scallopSuiKit.signAndSendTxn(a):a.txBlock}async unstakeObligation(e,t,s=!0,r){let a=this.builder.createTxBlock(),n=r??this.walletAddress;return a.setSender(n),await a.unstakeObligationQuick(e,t),s?await this.scallopSuiKit.signAndSendTxn(a):a.txBlock}async claimBorrowIncentive(e,t,s=!0,r){let a=this.builder.createTxBlock(),n=r??this.walletAddress;a.setSender(n);let i={},c=await this.query.getObligationAccount(e);if(!c)throw new Error("Obligation not found");let d=Object.values(c.borrowIncentives).filter(l=>!!l).flatMap(({rewards:l})=>l.filter(({availableClaimAmount:u})=>u>0)).flatMap(({coinName:l})=>l);for(let l of d){let u=await a.claimBorrowIncentiveQuick(l,e,t);i[l]?i[l].push(u):i[l]=[u];}return a.transferObjects(Object.values(i).map(l=>{let u=l[0];return l.length>1&&a.mergeCoins(u,l.slice(1)),u}),n),s?await this.scallopSuiKit.signAndSendTxn(a):a.txBlock}async migrateAllMarketCoin(e=!0,t=!0,s){let r=s??this.walletAddress,a=this.builder.createTxBlock();a.setSender(r);let n=[];for(let i of this.constants.whitelist.scoin){let c=[];try{let{takeCoin:d}=await this.builder.selectMarketCoin(a,i,Number.MAX_SAFE_INTEGER,r);if(d){let l=a.mintSCoin(i,d);c.push(l);}}catch(d){if(!d.toString().includes("No valid coins found for the transaction"))throw d}if(e&&this.constants.whitelist.spool.has(i))try{let d=await a.unstakeQuick(Number.MAX_SAFE_INTEGER,i);d&&c.push(d);}catch{}if(c.length>0){let d=c[0];c.length>1&&a.mergeCoins(d,c.slice(1));let l=this.utils.parseSCoinType(i);await this.utils.mergeSimilarCoins(a,d,l,r),n.push(d);}}return n.length>0&&a.transferObjects(n,r),t?await this.scallopSuiKit.signAndSendTxn(a):a.txBlock}async claimAllUnlockedSca(e=!0,t){let s=t??this.walletAddress,r=(await this.query.getVeScas({walletAddress:s})??[]).map(({keyObject:i})=>i);if(r.length===0)throw new Error("No veSCA found in the wallet");let a=[],n=this.builder.createTxBlock();if(n.setSender(s),await Promise.all(r.map(async i=>{try{let c=await n.redeemScaQuick({veScaKey:i,transferSca:!1});if(!c)return;a.push(c);}catch{}})),a.length===0)throw new Error("No unlocked SCA found in the veSCA accounts");return a.length>1&&n.mergeCoins(a[0],a.slice(1)),await this.utils.mergeSimilarCoins(n,a[0],"sca",s),e?await this.scallopSuiKit.signAndSendTxn(n):{tx:n.txBlock,scaCoin:a[0]}}async mintTestCoin(e,t,s=!0,r){if(!(this.networkType==="testnet"))throw new Error("Only be used on the test network.");let n=this.builder.createTxBlock(),i=r??this.walletAddress,c=this.address.get("core.packages.testCoin.id"),d=this.address.get(`core.coins.${e}.treasury`),l=`${c}::${e}::mint`,u=n.moveCall(l,[d,t]);return n.transferObjects([u],i),s?await this.scallopSuiKit.signAndSendTxn(n):n.txBlock}},Ft=Mt;var Dt=class{client;constructor(e){this.client=e.client??new Ft(e);}async init(e=!1){await this.client.init(e);}async createScallopClient(){return await this.init(),this.client}async createScallopBuilder(){return await this.init(),this.client.builder}async createScallopQuery(){return await this.init(),this.client.query}async createScallopUtils(){return await this.init(),this.client.utils}async createScallopIndexer(){return await this.init(),this.client.query.indexer}async getScallopConstants(){return await this.init(),this.client.constants}},jr=Dt;
23
+
24
+ exports.Scallop = jr;
25
+ exports.ScallopAddress = yt;
26
+ exports.ScallopAxios = we;
27
+ exports.ScallopBuilder = Bt;
28
+ exports.ScallopClient = Ft;
29
+ exports.ScallopConstants = bt;
30
+ exports.ScallopIndexer = Pt;
31
+ exports.ScallopQuery = Nt;
32
+ exports.ScallopQueryClient = Se;
33
+ exports.ScallopSuiKit = St;
34
+ exports.ScallopUtils = Tt;