@scallop-io/sui-scallop-sdk 4.1.2 → 4.2.0

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.
@@ -1,5 +1,5 @@
1
- import { S as ScallopBuilder, a as ScallopTxBlock } from './query-DkitepDi.js';
2
- export { b as ScallopBuilderConstructorParams } from './query-DkitepDi.js';
1
+ import { S as ScallopBuilder, a as ScallopTxBlock } from './query-CXvcpnYj.js';
2
+ export { b as ScallopBuilderConstructorParams } from './query-CXvcpnYj.js';
3
3
  import { Transaction } from '@mysten/sui/transactions';
4
4
  import { SuiTxBlock } from '@scallop-io/sui-kit';
5
5
  import '@tanstack/query-core';
package/dist/builder.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { S as ScallopBuilder, a as ScallopTxBlock } from './query-DkitepDi.js';
2
- export { b as ScallopBuilderConstructorParams } from './query-DkitepDi.js';
1
+ import { S as ScallopBuilder, a as ScallopTxBlock } from './query-CXvcpnYj.js';
2
+ export { b as ScallopBuilderConstructorParams } from './query-CXvcpnYj.js';
3
3
  import { Transaction } from '@mysten/sui/transactions';
4
4
  import { SuiTxBlock } from '@scallop-io/sui-kit';
5
5
  import '@tanstack/query-core';
package/dist/builder.js CHANGED
@@ -1,4 +1,4 @@
1
- export { c as ScallopBuilder, a as newScallopTxBlock } from './chunk-DIC6P5HB.js';
2
- import './chunk-33AK5RWM.js';
1
+ export { c as ScallopBuilder, a as newScallopTxBlock } from './chunk-6YLMI74S.js';
2
+ import './chunk-3T4T4AON.js';
3
3
  import './chunk-S34VOEZN.js';
4
4
  import './chunk-6UQ4NWEU.js';
@@ -0,0 +1,15 @@
1
+ import { e, f, d, b, c, a as a$1 } from './chunk-S34VOEZN.js';
2
+ import { a } from './chunk-6UQ4NWEU.js';
3
+ import { getFullnodeUrl, normalizeStructTag, parseStructTag, SUI_TYPE_ARG, SuiTxBlock } from '@scallop-io/sui-kit';
4
+ import Fn from 'axios';
5
+ import { QueryClient } from '@tanstack/query-core';
6
+ import { SuiGrpcClient } from '@mysten/sui/grpc';
7
+ import { BigNumber } from 'bignumber.js';
8
+ import { bcs } from '@mysten/sui/bcs';
9
+ import { z } from 'zod';
10
+ import { normalizeStructTag as normalizeStructTag$1 } from '@mysten/sui/utils';
11
+ import { SuiPriceServiceConnection } from '@pythnetwork/pyth-sui-js';
12
+
13
+ var je="https://sui.apis.scallop.io",ve="https://sdk.api.scallop.io";var Be={defaultOptions:{queries:{staleTime:5e3,gcTime:5e3}}};var _s="0x7016aae72cfc67f2fadf55769c0a7dd54291a583b63051a5ed71081cce836ac6::sca::SCA";var Ms=false,Ls=false,Es="0xc63072e7f5f4983a2efaf5bdba1480d5e7d74d57948e1c7cc436f8e22cbeb410";var g={api:{getAddresses:t=>["api","getAddresses",t],getWhiteList:()=>["api","getWhiteList"],getPoolAddresses:()=>["api","getPoolAddresses"],getMarkets:()=>["api","getMarkets"],getSpools:()=>["api","getSpools"],getBorrowIncentivePools:()=>["api","getBorrowIncentivePools"],getTotalValueLocked:()=>["api","getTotalValueLocked"]},rpc:{getInspectTxn:t=>["rpc","getInspectTxn",t],getObject:t=>["rpc","getObject",t],getObjects:t=>["rpc","getObjects",t],getSharedObject:t=>["rpc","getSharedObject",t],getOwnedObjects:t=>["rpc","getOwnedObjects",t],getDynamicFields:t=>["rpc","getDynamicFields",t],getDynamicFieldObject:t=>["rpc","getDynamicFieldObject",t],getTotalVeScaTreasuryAmount:t=>["rpc","getTotalVeScaTreasuryAmount",{...t,refreshArgs:t?.refreshArgs?JSON.stringify(t?.refreshArgs):void 0,veScaAmountArgs:t?.veScaAmountArgs?JSON.stringify(t?.veScaAmountArgs):void 0}],getCoinBalance:t=>["rpc","getCoinBalance",t],getAllCoinBalances:t=>["rpc","getAllCoinBalances",t],getNormalizedMoveFunction:t=>["rpc","getNormalizedMoveCall",t]},oracle:{getPythLatestPriceFeeds:(t,e)=>["oracle","getPythPriceIds",e,t],getCoinPrices:t=>["oracle","getCoinPrices",t]}};var Ws=[getFullnodeUrl("mainnet")];var Qs={core:{version:"0x72bc09c4ce413d76d07f6e712413aebbe3ce3747eadfbc2331fbdb1dbde2d43a",versionCap:"0x590a4011cb649b3878f3ea14b3a78674642a9548d79b7e091ef679574b158a07",object:"0xd971609b7feb6230585831e7aeb3c121fb21b9431337a30fc99185eb459a05ee",market:"0xed80ed898df1e0b7a14b78c92527b47ef88591d5722ded16050d7e101687bb20",adminCap:"0x09689d018e71c337d9db6d67cbca06b74ed92196103624028ccc3ecea411777c",coinDecimalsRegistry:"0x200abe9bf19751cc566ae35aa58e2b7e4ff688fc1130f8d8909ea09bc137d668",obligationAccessStore:"0x861bfea382072bdd060fa3a33f65387a71d5a75dbb0fedd92aa62f8a048b0ff9",coins:{usdc:{id:"0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7",metaData:"0x69b7a7c3c200439c1b5f3b19d7d495d5966d5f08de66c69276152f8db3992ec6",treasury:"",coinType:"0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC",symbol:"USDC",decimals:6,oracle:{supra:"",switchboard:"",pyth:{feed:"eaa020c61cc479712813461ce153894a96a6c00b21ed0cfc2798d1f9a9e9c94a",feedObject:"0x5dec622733a204ca27f5a90d8c2fad453cc6665186fd5dff13a83d0b6c9027ab"}}},sui:{id:"0x0000000000000000000000000000000000000000000000000000000000000002",metaData:"0x9258181f5ceac8dbffb7030890243caed69a9599d2886d957a9cb7656af3bdb3",treasury:"",coinType:"0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI",symbol:"SUI",decimals:9,oracle:{supra:"",switchboard:"0xaebdb50e0a95c5aa20c60bde5f574dac90aef83b508d64146cf29b5f63c35d4f ",pyth:{feed:"23d7315113f5b1d3ba7a83604c44b94d79f4fd69af77f804fc7f920a6dc65744",feedObject:"0x801dbc2f0053d34734814b2d6df491ce7807a725fe9a01ad74a07e9c51396c37"}}},sca:{id:"0x7016aae72cfc67f2fadf55769c0a7dd54291a583b63051a5ed71081cce836ac6",metaData:"0x5d26a1e9a55c88147ac870bfa31b729d7f49f8804b8b3adfdf3582d301cca844",treasury:"",coinType:"0x7016aae72cfc67f2fadf55769c0a7dd54291a583b63051a5ed71081cce836ac6::sca::SCA",symbol:"SCA",decimals:9,oracle:{supra:"",switchboard:"",pyth:{feed:"7e17f0ac105abe9214deb9944c30264f5986bf292869c6bd8e8da3ccd92d79bc",feedObject:"0xf6de1d3279a269a597d813cbaca59aa906543ab9a8c64e84a4722f1a20863985"}}},deep:{id:"0xdeeb7a4662eec9f2f3def03fb937a663dddaa2e215b8078a284d026b7946c270",metaData:"0x6e60b051a08fa836f5a7acd7c464c8d9825bc29c44657fe170fe9b8e1e4770c0",treasury:"",coinType:"0xdeeb7a4662eec9f2f3def03fb937a663dddaa2e215b8078a284d026b7946c270::deep::DEEP",symbol:"DEEP",decimals:6,oracle:{supra:"",switchboard:"",pyth:{feed:"29bdd5248234e33bd93d3b81100b5fa32eaa5997843847e2c2cb16d7c6d9f7ff",feedObject:"0x8c7f3a322b94cc69db2a2ac575cbd94bf5766113324c3a3eceac91e3e88a51ed"}}},fud:{id:"0x76cb819b01abed502bee8a702b4c2d547532c12f25001c9dea795a5e631c26f1",metaData:"0x01087411ef48aaac1eb6e24803213e3a60a03b147dac930e5e341f17a85e524e",treasury:"",coinType:"0x76cb819b01abed502bee8a702b4c2d547532c12f25001c9dea795a5e631c26f1::fud::FUD",symbol:"FUD",decimals:5,oracle:{supra:"",switchboard:"",pyth:{feed:"6a4090703da959247727f2b490eb21aea95c8684ecfac675f432008830890c75",feedObject:"0x4531c3ed0d22f21f5fce882905372006c9aafa30f01db03b789e95a6c50de7b2"}}},hasui:{id:"0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d",metaData:"0x2c5f33af93f6511df699aaaa5822d823aac6ed99d4a0de2a4a50b3afa0172e24",treasury:"",coinType:"0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d::hasui::HASUI",symbol:"haSUI",decimals:9,oracle:{supra:"",switchboard:"",pyth:{feed:"23d7315113f5b1d3ba7a83604c44b94d79f4fd69af77f804fc7f920a6dc65744",feedObject:"0x801dbc2f0053d34734814b2d6df491ce7807a725fe9a01ad74a07e9c51396c37"}}}},oracles:{xOracle:"0xb112727f380857fd711f89b450a3b22dc4cc55f82b2212b001f2461d6257b0b9",xOracleCap:"0x1edeae568fde99e090dbdec4bcdbd33a15f53a1ce1f87aeef1a560dedf4b4a90",primaryPriceUpdatePolicyObject:"0xbcd908d0ee6d63d726e61676f3feeec3d19817f4849bbecf372dd3399f247f6b",secondaryPriceUpdatePolicyObject:"0x624a6f120777bb30e718b86e836c205ef4229448052377dc3d78272a6662b2c0",primaryPriceUpdatePolicyVecsetId:"0xfb1330aa028ed6a159b742c71b5a79b3b6824cf71efa40ea82b52486ad209264",secondaryPriceUpdatePolicyVecsetId:"0x4b827acc73f3f53f808dd73a7ee0a60ae61e84322176bece72b26467030b467c",supra:{registry:"",registryCap:"",holder:""},switchboard:{registry:"0x9b1b415f384af6af0ff31c22decdc88b3b83d0188cf63ef9c58fd122bca77219",registryTableId:"0x9f75c071b0db2e80da3f5c98686ffdedf3a633684290499501595277a5350b8c",state:"",registryCap:""},pyth:{registry:"0xbc477946f0c8c9a09d7a9bab57eb01f0320c1d1f7f9aeee2503d0a71f50379c6",registryCap:"0xe4995aaca4e70d4203790fbd22332107131e88b92b81bc976e6fc3a7d5005efd",state:"0x1f9310238ee9298fb703c3419030b35b22bb1cc37113e3bb5007c99aec79e5b8",wormhole:"0x5306f64e312b581766351c07af79c72fcb1cd25147157fdc2f8ad76de9a3fb6a",wormholeState:"0xaeab97f96cf9877fee2883315d459552b2b921edc16d7ceac6eab944dd88919c"}},packages:{coinDecimalsRegistry:{id:"0xca5a5a62f01c79a104bf4d31669e29daa387f325c241de4edbe30986a9bc8b0d",upgradeCap:"0x34e76a945d29f195bc53ca704fa70877d1cf3a5d7bbfdda1b13e633fff13c0f6"},math:{id:"0xad013d5fde39e15eabda32b3dbdafd67dac32b798ce63237c27a8f73339b9b6f",upgradeCap:"0x3a329598231de02e6135c62284b66005b41cad1d9ab7ca2dc79c08293aba2ec6"},whitelist:{id:"0x1318fdc90319ec9c24df1456d960a447521b0a658316155895014a6e39b5482f",upgradeCap:"0xf5a22aea23db664f7b69855b6a546747f17c1ec4230319cfc17225e462b05761"},x:{id:"0x779b5c547976899f5474f3a5bc0db36ddf4697ad7e5a901db0415c2281d28162",upgradeCap:"0x3f203f6fff6a69d151e4f1cd931f22b68c489ef2759765662fc7baf673943c9e"},protocol:{id:"0xd971609b7feb6230585831e7aeb3c121fb21b9431337a30fc99185eb459a05ee",upgradeCap:"0x38527d154618d1fd5a644b90717fe07cf0e9f26b46b63e9568e611a3f86d5c1a"},protocolWhitelist:{id:"0x4c262d9343dac53ecb28f482a2a3f62c73d0ebac5b5f03d57383d56ff219acdf",upgradeCap:"0x4a5e88a75039b00988f633f811f58117f31b8627a46bf822aa114d9010049449"},query:{id:"0x15f353b593733a6eeb37f67a8a0f6e6b863ef5e813df39cb263f5f40c29a2195",upgradeCap:"0x14220f035f4cfc2ce442c30703fb44d24f00846eb7077907a231a56051a1d9b2"},supra:{id:"",object:"",upgradeCap:""},pyth:{id:"0xde99692957a424f4701e55b77b014cf24612ded4608225090867d1d2990eaea9",object:"0xde99692957a424f4701e55b77b014cf24612ded4608225090867d1d2990eaea9",upgradeCap:"0xb1f167889643ff766df31745b6e93b92462d8165b0a4f1b095499e15180370f7"},switchboard:{id:"0x248f5cb31c12eed6ab8fd4c6176466b982be42ce87e6bf8ff896fb8097a1660d",object:"0x248f5cb31c12eed6ab8fd4c6176466b982be42ce87e6bf8ff896fb8097a1660d",upgradeCap:""},xOracle:{id:"0xe2785270b2e6179e68204dd5901a43f9a0e1c566baf656cad705d45a419c4d3a",object:"0xe2785270b2e6179e68204dd5901a43f9a0e1c566baf656cad705d45a419c4d3a",upgradeCap:"0x0f928a6b2e26b73330fecaf9b44acfc9800a4a9794d6415c2a3153bc70e3c1f0"},testCoin:{id:"",upgradeCap:""}}},spool:{id:"0x1742655fe5872dfa6456673f9e38612a4965e6979e6cd7696a7f1225f28bae21",adminCap:"0xdd8a047cbbf802bfcde5288b8ef1910965d789cc614da11d39af05fca0bd020a",object:"0xe87f1b2d498106a2c61421cec75b7b5c5e348512b0dc263949a0e7a3c256571a",pools:{ssui:{id:"0xb9617f83c06ebdeac0a8834782b1015e1cc7ea23739e30c132c4bfb95c37a579",rewardPoolId:"0xc3206071a8d43212efb6e3b5504f2321f8df97ab122b466c0bc7cfdf398dc13a"},susdc:{id:"0x0b5f5f413bd3799e4052c37311966c77f3a4545eb125d2e93e67a68478021918",rewardPoolId:"0x85ed6ed72ea97c35dbf0cdc7ed6fbc48d8ec15de9b17c74bf4512df8a6d7f166"}},config:""},borrowIncentive:{id:"0x045811c127a4063d78683ea61fa987b9252a798b0d3ae9e927e25adcbe5549e2",config:"0xe5fec608d3a30a1f75b24d2c67d227524075aa6f5ee22e5eccedacd9145b1d9d",object:"0x045811c127a4063d78683ea61fa987b9252a798b0d3ae9e927e25adcbe5549e2",incentivePools:"0xb06657692f7f4d9eb0d7b7d6ac24db30e6fdaed64b09dee49664b496f687de46",incentiveAccounts:"0x0bf8168d983c18edcc6b2c2b2e85d2bdac84764babfecf1b567f98801fbf4942",incentiveAccountsTableId:"0x654d17f0727366911aa3c6bb9f01dca757b677471032835839d17a77b26f7a99",query:"0xdbc22fe051d384691634cd3b9fe473b09723084a1e4c128728c42e2de3b2228f",adminCap:"0xc486afa253646f4d381e81d7f1df8aa4723b845a6bb356f69bad635ffefffe2c"},vesca:{id:"0x0c7f5568dbd69488437ee95f2d9a028724e1de12432965ff8acca7c67310ba46",object:"0x0c7f5568dbd69488437ee95f2d9a028724e1de12432965ff8acca7c67310ba46",adminCap:"0x4d105b16467acca81d18c132cdd1a3cee159920a86c1ef4bdbf2e8d7878500c5",tableId:"0x5477d43c9f75faea312c0f02dd48b4e03d9cbf2b1a5436ddffb5edefbea18ff2",table:"0x06f763060ea5da3d639fb56df70674490a8354511cfe61584062aafd83b1940d",treasury:"0x934919cc31fa89b67578039bb10d5518fa23c50bc8f78500f1d1a718407a0a71",config:"0x38d3f7a1fa5071226535d4d8bfca8ccab3d24871402df1be669d7d5e9e3e9cb4",subsTable:"0x4756b716670ff62760b22bebed73c6eb2c2cb118674a2eea3a56ebea9e27ae76",subsTableId:"0x924b56d383b45445984a80002185b670aa2e72cd7df496d345f45f9407a12c07",subsWhitelist:"0xfc72adae643da4f2fe080adc1e2cca981eadcb518facb02324eeaab169752ffb"},referral:{id:"0x1bf5a8ce77050d8052549d743e16b469f15aa6b81b752b78b6ebb65179665f5a",object:"0x5658d4bf5ddcba27e4337b4262108b3ad1716643cac8c2054ac341538adc72ec",adminCap:"0xc5dc06b9074291259f2cac460c940012c781c4430e42125c541cc43101c3bcbd",referralBindings:"0xcf184487782bed962bf678001efe775d31fb94b9992333a57594cf15d79d5ced",bindingTableId:"0x41a50e258c0a266ce84e0e1a618dbf70b878cc943909e613089a50afcceb2bc0",referralRevenuePool:"0xc24e3e5e37032f29a3dd91a9a1f057af8821b7e6c148e9683900ac8b6d30f0c6",revenueTableId:"0x669dfb0f47fccbbe2ae8a0bfce2672a994ef3f1c7049621405cce2f91733bdc1",referralTiers:"0x144350f3db9b46d11b140084cd54e6de0b9c3b8d265ce8059b51d0ef58ea464b",tiersTableId:"0xad5e36fce7358a3ef94a56eb89ee7f1968100c1a9d967c1731154083e1dda1fb",authorizedWitnessList:"0xf21b0ed043c9bb70842c0129159f4943dbcc3c9ef2f2f808af65f8be25cfd20e",version:"0x3545849eb97723e676a476ec9d4fe5f2eb0eb2c6b78972851114fd4c7ed4639f"},loyaltyProgram:{id:"0xab7c4e6d53ef862a1115d0c381fd33e05f9c206b79f322a54990b1e8c2fe3446",object:"0xab7c4e6d53ef862a1115d0c381fd33e05f9c206b79f322a54990b1e8c2fe3446",rewardPool:"0x215e1022037052407e69a5c5938f888078013c924cae97132492719ac2c53ec6",userRewardTableId:"0x574a11f8a0fbaa05b8f559cb65634e8eb20f26b1ec29e7d58de9167f3cedd0f7"},veScaLoyaltyProgram:{id:"0x51bd8c455caedad9d7fd47f9ee75876668c4d6bbede95af39c0aebde46043f00",object:"0x51bd8c455caedad9d7fd47f9ee75876668c4d6bbede95af39c0aebde46043f00",adminCap:"0xb2d52e0ebb260cb42699be6a9804e12d6fa17b79ef1e43f9996df5ca71bac0ae",veScaRewardPool:"0x4fe34992bf2261c3c6c14b2dbf9606ce65a505c45ff778ac129ce7dea9b0cadf",veScaRewardTableId:"0x85d3e557d9bbed617b9cbc09982a0c9a6f6f4fc9ecce49b59124206c409c4774"},obligationNaming:{id:"0x9d16020b034d14ccb622f450bbd449dae3bf235a7fc57b21689645fc1066ab74",namingRegistry:"0xe948aeff7fa931cb94e70b1bfc15581f34e459fb3747cf927a62697f9cab3671"},scoin:{id:"0xde8fe7f73fcaff729de640b1a67afff5028019aefa67c151250a8d47db37aa1c",coins:{ssui:{coinType:"0x9d81d8a20e9ffc462839c23346edb69604f7b4deffc9253262e1caca473fd3e3::scallop_sui::SCALLOP_SUI",metaData:"0x13d07ec4114e36b6d9b69cab9e4722c4dc76d9f623db9fcb5b26a01cb0a861a4",symbol:"sSUI",treasury:"0x8d2cd566acf9f38629bab1e5aba888c85b177432e91cf7f9a204c3f730281059"},ssca:{coinType:"0x9f64a180373a6b66595025ae16a4ab701f0af1dd5c7ce1ac91dc112e52c2a3f8::scallop_sca::SCALLOP_SCA",metaData:"",symbol:"sSCA",treasury:"0x1b05d2cd8b20dba19da073a54195fc52d2f438ea19dea0713bae7a7dab308199"},susdc:{coinType:"0x55588ffc90718301696fd5497a7b6e82c0f86c15d58e41fc9750a24329ee2523::scallop_usdc::SCALLOP_USDC",treasury:"0xe028cf6c656e410502c931ed265524d48ff16e000db1f50305b54d8a6c421150",symbol:"sUSDC",metaData:"0x752b2f407601cbbc335c3d1623e0f5a2b8cb254bc35847c4586bd7cd8bcac7f8"},sdeep:{coinType:"0x34f0a2e793e1f79ceac72cfe3bb95f65541da449418289ccd12922d16140c882::scallop_deep::SCALLOP_DEEP",metaData:"",symbol:"sDEEP",treasury:"0x71d41465cf2d16fa0206126526bebdf65c8871d1fcfbd0c2237db2306afd67ba"},sfud:{coinType:"0x3b23c05f917052255a0b16a534dbd4446911aa4a30bd3497cdf5b736551e7ef8::scallop_fud::SCALLOP_FUD",metaData:"",symbol:"sFUD",treasury:"0x858c492d51425b922c040c1a389e185b3b00d565e7d72ead1a81dc733104660d"},shasui:{coinType:"0xf2f52fede69abafa2439665bb5bebc8e60fe0f8c5d9d240dd143b5f74f73c867::scallop_ha_sui::SCALLOP_HA_SUI",metaData:"0xb174a5642133c5a7409187c80e2ef090cc0169147a1dcedce8a0f208397578d3",symbol:"shaSUI",treasury:"0x33b0013a52205955a0af9ceaa4d3f4b7cf4bd8179fe14ac2de29d8f4d656eb0a"}}}},$s={lending:new Set(["usdc","sui","hasui"]),collateral:new Set(["usdc","sui","hasui"]),borrowing:new Set(["usdc","sui","hasui"]),packages:new Set(["coinDecimalsRegistry","math","whitelist","x","protocol","protocolWhitelist","query","supra","pyth","switchboard","xOracle","testCoin"]),spool:new Set(["susdc","ssui"]),scoin:new Set(["susdc","ssui","shasui"]),suiBridge:new Set(["sbeth","sbusdt","sbwbtc"]),wormhole:new Set(["wusdc","wusdt","weth","wbtc","wapt","wsol"]),oracles:new Set(["pyth","supra","switchboard"]),pythEndpoints:new Set(["https://hermes.pyth.network"]),deprecated:new Set(["wapt","wusdc","wusdt","weth","wbtc"]),borrowIncentiveRewards:new Set(["mpoints"]),rewardsAsPoint:new Set(["mpoints"]),emerging:new Set(["wal","deep","sca","cetus"])},zs={usdc:{coinName:"usdc",symbol:"USDC",lendingPoolAddress:"0x9a5bc993b18fb2a27414ae7adc43f343509fd5162f796b025d08ebeca4e02317",collateralPoolAddress:"0x35275c590b5f754b67ae0da7fbf530d40e90d66076dd7f687e13f7586effba8c",borrowDynamic:"0xe7ea2c5a01a7a286d76d135896edbb1ffb199ba100a618beb9c2180c8d547d91",interestModel:"0xcde221c16ddbf7d9ea41d6d3dcbff230fc2da9d957a563194c3d9025152ed93b",riskModel:"0xa15d4c5c56f4afcd604f6db8b1b5c104d91d3ad95a743212ae270375877baa6d",borrowFeeKey:"",supplyLimitKey:"0x4be9ae54ac4d320f4f9c14cae78cb85c8e0e67791dd9bdba6d2db20614a28a24",borrowLimitKey:"0x6b01093cba95b835181f00e3a2c31ed8dfc8d64fe3db0fb80933a09f66e1ccf1",isolatedAssetKey:"",isIsolated:false,spool:"0x0b5f5f413bd3799e4052c37311966c77f3a4545eb125d2e93e67a68478021918",spoolReward:"0x85ed6ed72ea97c35dbf0cdc7ed6fbc48d8ec15de9b17c74bf4512df8a6d7f166",sCoinType:"0x55588ffc90718301696fd5497a7b6e82c0f86c15d58e41fc9750a24329ee2523::scallop_usdc::SCALLOP_USDC",sCoinTreasury:"0xe028cf6c656e410502c931ed265524d48ff16e000db1f50305b54d8a6c421150",sCoinMetadataId:"0x763a21eba338e00bc684aaad80491c89eea5f247b59c47df45b17610c9ad58f2",sCoinSymbol:"sUSDC",sCoinName:"susdc",coinMetadataId:"0x752b2f407601cbbc335c3d1623e0f5a2b8cb254bc35847c4586bd7cd8bcac7f8",coinType:"0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC",spoolName:"susdc",decimals:6,pythFeed:"eaa020c61cc479712813461ce153894a96a6c00b21ed0cfc2798d1f9a9e9c94a",pythFeedObjectId:"0x5dec622733a204ca27f5a90d8c2fad453cc6665186fd5dff13a83d0b6c9027ab",flashloanFeeObject:"0x289c770f54b26a4175d57cc6061e3d05f96e52d352cb7c0a51e2e3bacb2aee30"},sui:{coinName:"sui",symbol:"SUI",lendingPoolAddress:"0x885330fd03acdcf7d0ba10b6722f91140bc77f6fb62a593d5d025ccd6d160c04",collateralPoolAddress:"0x1a75bdcb07a64f3a87cff0156c9d470fc9ce0be14ec8093195a27921186afbb8",borrowDynamic:"0xec6749d4fb51841a728e6f0dda1b43047ca76a89690f67c7e496f2c0b6ea67b5",interestModel:"0x769b1653eb11e85903b0834e0f83d65405e5467a60389b2d86960dc2582c6595",riskModel:"0xbaf399f7cd7c13e15cf8e5979e4b8baa13513e9068f13c0a0ccdc9e4d3739314",borrowFeeKey:"",supplyLimitKey:"0x0602418e66fb7a73fa997077bd66f248ad5b090d43344a14b9f1db598ecc1d47",borrowLimitKey:"0x2b33a7efdcf6a6df24f4d8a356dd52f58d75bc023c3f171d99502d4d008b53f0",isolatedAssetKey:"",isIsolated:false,spool:"0xb9617f83c06ebdeac0a8834782b1015e1cc7ea23739e30c132c4bfb95c37a579",spoolReward:"0xc3206071a8d43212efb6e3b5504f2321f8df97ab122b466c0bc7cfdf398dc13a",sCoinType:"0x9d81d8a20e9ffc462839c23346edb69604f7b4deffc9253262e1caca473fd3e3::scallop_sui::SCALLOP_SUI",sCoinTreasury:"0x8d2cd566acf9f38629bab1e5aba888c85b177432e91cf7f9a204c3f730281059",sCoinMetadataId:"0x13d07ec4114e36b6d9b69cab9e4722c4dc76d9f623db9fcb5b26a01cb0a861a4",sCoinSymbol:"sSUI",sCoinName:"ssui",coinMetadataId:"0x9258181f5ceac8dbffb7030890243caed69a9599d2886d957a9cb7656af3bdb3",coinType:"0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI",spoolName:"ssui",decimals:9,pythFeed:"23d7315113f5b1d3ba7a83604c44b94d79f4fd69af77f804fc7f920a6dc65744",pythFeedObjectId:"0x801dbc2f0053d34734814b2d6df491ce7807a725fe9a01ad74a07e9c51396c37",flashloanFeeObject:"0x27614284a8f0a699ffd35aae8f2572c937ec76771cb21b0d7930ec4491a76ed4"},sca:{coinName:"sca",symbol:"SCA",lendingPoolAddress:"0xd08ef85bc753616ce0f1e3ac01bbc8bd1ee53e03b1e82aaa9690db5cd285ef4c",collateralPoolAddress:"0x4f59b8ef2cdd195830890cf0c01e29c159e48a6a6c766c64fd4b26cfa9ee58c6",borrowDynamic:"0x7f6e11fbd32b5d0223f03bfda67a5b48c551a09cfff88edc187591f9a4b0ab10",interestModel:"0xcb10daf0fee6f416463444f5b47aac0f0197a889bc60be2c4f90916f6a8d2faa",riskModel:"0x043f21a35bd1e1060a7c579db46e10cfd039d0b75d6bfd758de97b60434ae708",borrowFeeKey:"",supplyLimitKey:"0x8dd938856b972a10ea27ecab2af7ed78e48fc5f6ccedaf2b2119959f747dc2e3",borrowLimitKey:"0x04c7de61c5b42972f9bf6a8b1848e5fea2d037ee8deba81741ecd4a70aa80d30",isolatedAssetKey:"",isIsolated:false,spool:"",spoolReward:"",sCoinType:"0x9f64a180373a6b66595025ae16a4ab701f0af1dd5c7ce1ac91dc112e52c2a3f8::scallop_sca::SCALLOP_SCA",sCoinTreasury:"0x1b05d2cd8b20dba19da073a54195fc52d2f438ea19dea0713bae7a7dab308199",sCoinMetadataId:"",sCoinSymbol:"sSCA",sCoinName:"ssca",coinMetadataId:"0x5d26a1e9a55c88147ac870bfa31b729d7f49f8804b8b3adfdf3582d301cca844",coinType:"0x7016aae72cfc67f2fadf55769c0a7dd54291a583b63051a5ed71081cce836ac6::sca::SCA",spoolName:"ssca",decimals:9,pythFeed:"7e17f0ac105abe9214deb9944c30264f5986bf292869c6bd8e8da3ccd92d79bc",pythFeedObjectId:"0xf6de1d3279a269a597d813cbaca59aa906543ab9a8c64e84a4722f1a20863985",flashloanFeeObject:"0xe04e46471754b6f48d81c549ecfec09de02733715a63bec02364c6ac7c4dd2dc"},fud:{coinName:"fud",symbol:"FUD",lendingPoolAddress:"0xc8a078d15ee7bbff49a14835f36951833d2d55c91ffd2972251dadbff8045ca8",collateralPoolAddress:"",borrowDynamic:"0x345a2fa0fe5d5d704fd8ad609a9b7529f22e3cda738ad26756ad2a85e5d43777",interestModel:"0xc84a22d8bca58e5f05673d1de2a7406b1b7bc9dcd15fd848ba6555c7ecab9d83",borrowFeeKey:"",supplyLimitKey:"0xf98419aecc37a3c5de716f8ec590f8991a5be34da72ce1a2da09531ff45adf7d",borrowLimitKey:"0x3d928a001c453c50004baa54e14b0a0e1b0907d9c613dfd76064fd7ed4e8beb8",isolatedAssetKey:"",isIsolated:false,spool:"",spoolReward:"",sCoinType:"0x3b23c05f917052255a0b16a534dbd4446911aa4a30bd3497cdf5b736551e7ef8::scallop_fud::SCALLOP_FUD",sCoinTreasury:"0x858c492d51425b922c040c1a389e185b3b00d565e7d72ead1a81dc733104660d",sCoinMetadataId:"",sCoinSymbol:"sFUD",sCoinName:"sfud",coinMetadataId:"0x01087411ef48aaac1eb6e24803213e3a60a03b147dac930e5e341f17a85e524e",coinType:"0x76cb819b01abed502bee8a702b4c2d547532c12f25001c9dea795a5e631c26f1::fud::FUD",spoolName:"sfud",decimals:5,pythFeed:"6a4090703da959247727f2b490eb21aea95c8684ecfac675f432008830890c75",pythFeedObjectId:"0x4531c3ed0d22f21f5fce882905372006c9aafa30f01db03b789e95a6c50de7b2",flashloanFeeObject:"0x1ddda368a5f37d7b8c53879cb333ccfd520fc4a3e2fc98b9b5fdacd1a5945d5a"},deep:{coinName:"deep",symbol:"DEEP",lendingPoolAddress:"0xfb8e4f68c9b14034da7f1f4703013dda69ebbb4578f835825bcf92ab89c3b5ae",collateralPoolAddress:"",borrowDynamic:"0xbf983b12a8707b174c0b037096ba2fbf1b30e6efb9cce14fc35207de0a696f79",interestModel:"0xb7f04cd3aaaefe671a79f9aed8646ae085a7e6812c1604044977c9355e0769c8",borrowFeeKey:"",supplyLimitKey:"0x599528fdfdc253e90dfd0acf4f4a166b391e2aac1ca6528abbff63225b548fee",borrowLimitKey:"0xf4217e8ef9d9c32e8992092e910a77535a8124c19b8a762a673f227f5f765a4e",isolatedAssetKey:"",isIsolated:false,spool:"",spoolReward:"",sCoinType:"0x34f0a2e793e1f79ceac72cfe3bb95f65541da449418289ccd12922d16140c882::scallop_deep::SCALLOP_DEEP",sCoinTreasury:"0x71d41465cf2d16fa0206126526bebdf65c8871d1fcfbd0c2237db2306afd67ba",sCoinMetadataId:"",sCoinSymbol:"sDEEP",sCoinName:"sdeep",coinMetadataId:"0x6e60b051a08fa836f5a7acd7c464c8d9825bc29c44657fe170fe9b8e1e4770c0",coinType:"0xdeeb7a4662eec9f2f3def03fb937a663dddaa2e215b8078a284d026b7946c270::deep::DEEP",spoolName:"sdeep",decimals:6,pythFeed:"29bdd5248234e33bd93d3b81100b5fa32eaa5997843847e2c2cb16d7c6d9f7ff",pythFeedObjectId:"0x8c7f3a322b94cc69db2a2ac575cbd94bf5766113324c3a3eceac91e3e88a51ed",flashloanFeeObject:"0xd54dfb677e9e011e2451375a7a2e318b4f2225c2a0b369bde0afcef8cbb1a863"},hasui:{coinName:"hasui",symbol:"haSUI",lendingPoolAddress:"0x7e9c2b3105e0999410305dfd2c649ca473a9c04be87c53ce5e4566559f6818ea",collateralPoolAddress:"0x0446c27ce7e6fac2d0b359caad042bd436727b6f498a2efc4ceaa071d9fce4b5",borrowDynamic:"0xa1ba968ebc70685fc5fbdeb5edbd346cbc13223abef556109dc08f26962d3765",interestModel:"0x8440be8ab46d572fefaf0c21a225ebb9e6fe9239112de8de0a2654e6827fd5c7",riskModel:"0xa246e59a3686b63ce4b914c2d1c784cff0ae3288e7b3db5b146925684a6380c0",borrowFeeKey:"",supplyLimitKey:"",borrowLimitKey:"",isolatedAssetKey:"",isIsolated:false,spool:"",spoolReward:"",sCoinType:"0xf2f52fede69abafa2439665bb5bebc8e60fe0f8c5d9d240dd143b5f74f73c867::scallop_ha_sui::SCALLOP_HA_SUI",sCoinTreasury:"0x33b0013a52205955a0af9ceaa4d3f4b7cf4bd8179fe14ac2de29d8f4d656eb0a",sCoinMetadataId:"0xb174a5642133c5a7409187c80e2ef090cc0169147a1dcedce8a0f208397578d3",sCoinSymbol:"sHASUI",sCoinName:"shasui",coinMetadataId:"0x2c5f33af93f6511df699aaaa5822d823aac6ed99d4a0de2a4a50b3afa0172e24",coinType:"0xbde4ba4c2e274a60ce15c1cfff9e5c42e41654ac8b6d906a57efa4bd3c29f47d::hasui::HASUI",spoolName:"shasui",decimals:9,pythFeed:"23d7315113f5b1d3ba7a83604c44b94d79f4fd69af77f804fc7f920a6dc65744",pythFeedObjectId:"0x801dbc2f0053d34734814b2d6df491ce7807a725fe9a01ad74a07e9c51396c37",flashloanFeeObject:"0xb9f505d532de1d6c9f3a8522a2d16f2958b75c0ed939d4f80b96f584a2a8ed5e"}};var le=86400,Ce=1460,Y=126144e3,it=1e10,ct=1e9;var Hs={usdc:{primary:["pyth"],secondary:[]},sbeth:{primary:["pyth"],secondary:[]},sbusdt:{primary:["pyth"],secondary:[]},sbwbtc:{primary:["pyth"],secondary:[]},weth:{primary:["pyth"],secondary:[]},wbtc:{primary:["pyth"],secondary:[]},wusdc:{primary:["pyth"],secondary:[]},wusdt:{primary:["pyth"],secondary:[]},sui:{primary:["pyth"],secondary:[]},wapt:{primary:["pyth"],secondary:[]},wsol:{primary:["pyth"],secondary:[]},cetus:{primary:["pyth"],secondary:[]},afsui:{primary:["pyth"],secondary:[]},hasui:{primary:["pyth"],secondary:[]},vsui:{primary:["pyth"],secondary:[]},sca:{primary:["pyth"],secondary:[]},fud:{primary:["pyth"],secondary:[]},deep:{primary:["pyth"],secondary:[]},fdusd:{primary:["pyth"],secondary:[]},blub:{primary:["pyth"],secondary:[]},musd:{primary:["pyth"],secondary:[]},ns:{primary:["pyth"],secondary:[]},usdy:{primary:["pyth"],secondary:[]}};var de=class{client;constructor({url:e,client:o,timeout:r=8e3}={}){this.client=o??Fn.create({baseURL:e,headers:{"Content-Type":"application/json",Accept:"application/json"},timeout:r});}async get(e){let o=await this.client.get(e);if(o.status!==200)throw new Error(`API request failed with status ${o.status}: ${o.statusText}`);return o.data}};var Et=(t,e)=>async o=>{try{return await t.fetchQuery(o)}catch(r){throw e.error("Error fetching query",{queryKey:o.queryKey}),r}};var Vt=new QueryClient(Be);var k=class{queryClient;logger;metadata;fetchWithCache;constructor({queryClient:e=Vt,logger:o=a,metadata:r}){this.queryClient=e,this.logger=o,this.metadata=r,this.fetchWithCache=Et(this.queryClient,this.logger);}get baseContext(){return {fetchWithCache:this.fetchWithCache,logger:this.logger,metadata:this.metadata}}};var qt=async(t,e)=>{let{api:o,fetchWithCache:r}=t;return r({queryKey:g.api.getAddresses({addressId:e}),queryFn:()=>o.get(`/addresses/${e}`)})};var Fe=class extends k{api;constructor({api:e,...o}){super(o),this.api=e;}get context(){return {...this.baseContext,api:this.api}}read(e){return qt(this.context,e)}};var lt=class{url;addressId;addressApiRepo;network;logger;currentAddresses;addressMap=new Map;constructor({addressId:e,url:o=je,timeout:r,client:n,network:a$1="mainnet",logger:s=a,forceAddressesInterface:c}){this.url=o,this.addressId=e,this.network=a$1,this.logger=s,this.addressApiRepo=new Fe({api:new de({url:o,timeout:r,client:n})}),c&&this.initializeForcedAddresses(c);}initializeForcedAddresses(e){let o=["localnet","devnet","testnet","mainnet"];Object.entries(e).forEach(([r,n])=>{if(!n){this.logger.warn(`No addresses provided for network: ${r}. Skipping initialization for this network.`);return}if(o.includes(r)){let a=r;this.addressMap.set(a,n),a===this.network&&(this.currentAddresses=n);}});}async read(e=this.addressId){let o=await this.addressApiRepo.read(e),r=n=>["localnet","devnet","testnet","mainnet"].includes(n);for(let[n,a]of Object.entries(o))r(n)&&typeof a=="object"&&(n===this.network&&(this.currentAddresses=a),this.addressMap.set(n,a));return this.addressId!==o.id&&this.logger.warn(`The addressId provided (${this.addressId}) does not match the id returned from the API (${o.id}).`),this.getAllAddresses()}get(e){if(this.currentAddresses)return e.split(".").reduce((r,n)=>typeof r=="object"?r[n]:r,this.currentAddresses)||void 0}set(e,o){if(this.currentAddresses){let r=e.split(".");r.reduce((n,a,s)=>{if(s===r.length-1)n[a]=o;else return n[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)}getAllAddresses(){return Object.fromEntries(this.addressMap)}},Kt=lt;var Wt=t=>({getAddresses:()=>t.getAddresses()});var Ut=t=>({getPoolAddresses:()=>t.poolAddresses});var Qt=t=>({getWhitelist:()=>t.whitelist});var Dn=["core.version","core.market","core.packages.protocol.id","core.coinDecimalsRegistry","core.oracles.xOracle"],Mn=["lending","collateral","borrowing","packages","scoin","spool","oracles","pythEndpoints"],Ln=(t,e)=>{let r=(e?.requiredPaths??Dn).filter(a=>{let s=t.get(a);return s===void 0||s===""}),n=Mn.filter(a=>{let s=t.whitelist[a];return !s||s.size===0});return {valid:r.length===0&&n.length===0,missingPaths:r,emptyWhitelistKeys:n}},$t=(t,e$1)=>{let o=Ln(t,e$1);if(!o.valid)throw new e("Scallop config snapshot is incomplete",{context:{missingPaths:o.missingPaths,emptyWhitelistKeys:o.emptyWhitelistKeys}})};var En=(t,e)=>{let o=e.split(".").reduce((r,n)=>{if(r&&typeof r=="object"&&n in r)return r[n]},t);return typeof o=="string"&&o!==""?o:void 0},Vn=["lending","borrowing","collateral","packages","spool","scoin","suiBridge","wormhole","layerZero","oracles","borrowIncentiveRewards","rewardsAsPoint","pythEndpoints","deprecated","emerging"],qn=t=>{let e=t;return Vn.reduce((o,r)=>{let n=e?.[r];return o[r]=n instanceof Set?new Set(n):new Set(Array.isArray(n)?n:[]),o},{})},zt=(t,e)=>{let o=t.addressSource.getAddresses(),r={addresses:o,poolAddresses:t.poolAddressSource.getPoolAddresses(),whitelist:qn(t.whitelistSource.getWhitelist()),get:n=>En(o,n)};return e?.validate&&$t(r,{requiredPaths:e.requiredPaths}),r};var Mi=t=>({addresses:t.getAddresses(),poolAddresses:t.poolAddresses,whitelist:t.whitelist,get:e=>{let o=t.get(e);return o===""?void 0:o}});var _e=({poolAddresses:t,whitelist:e,parseToOldMarketCoin:o})=>{let r=Object.fromEntries([...Object.entries(t).filter(([b,m])=>!!m).map(([b,m])=>[b,m.decimals]),...Object.entries(t).filter(([b,m])=>!!m?.sCoinName).map(([b,m])=>[m.sCoinName,m.decimals])]),n=Object.fromEntries([...Object.entries(t).filter(([b,m])=>!!m).map(([b,m])=>[b,m?.coinType]),...Object.entries(t).filter(([b,m])=>!!m&&m.sCoinName&&m.sCoinType).map(([b,m])=>[m.sCoinName,m.sCoinType])]),a=Object.fromEntries(Object.entries(n).map(([b,m])=>[m,b])),s=Object.fromEntries(Object.entries(t).filter(([b,m])=>!!m&&e.wormhole.has(b)).map(([b,m])=>[m.coinType,m.coinName])),c=Object.fromEntries(Object.entries(t).filter(([b,m])=>!!m).map(([b,m])=>[m.coinName,o(m.coinType)])),i=Object.fromEntries(Object.entries(t).filter(([b,m])=>!!m&&m.sCoinType&&m.sCoinName).map(([b,m])=>[parseStructTag(m.sCoinType).name,m.sCoinName])),l=Object.fromEntries(Object.entries(t).filter(([b,m])=>!!m&&m.sCoinType&&m.sCoinName).map(([b,m])=>[m.sCoinType,m.sCoinName])),d=t.vsui?.coinType,u=d?{[d]:"vsui"}:{},p=Object.fromEntries(Object.entries(t).filter(([b,m])=>!!m&&e.suiBridge.has(m.coinName)).map(([b,m])=>[m.coinType,m.coinName])),y=Object.fromEntries(Object.entries(t).filter(([b,m])=>!!m&&m.sCoinName&&m.sCoinType).map(([b,m])=>[m.sCoinName,m.sCoinType])),f=new Set([...Object.values(t).filter(b=>!!b).map(b=>b.sCoinName?[b.coinName,b.sCoinName]:[b.coinName]).flat()]);return {coinDecimals:Object.freeze(r),coinTypes:Object.freeze(n),coinTypeToCoinNameMap:Object.freeze(a),coinNameToOldMarketCoinTypeMap:Object.freeze(c),wormholeCoinTypeToCoinNameMap:Object.freeze(s),voloCoinTypeToCoinNameMap:Object.freeze(u),suiBridgeCoinTypeToCoinNameMap:Object.freeze(p),scoinRawNameToSCoinNameMap:Object.freeze(i),scoinTypeToSCoinNameMap:Object.freeze(l),sCoinTypes:Object.freeze(y),supportedBorrowIncentiveRewards:f}};var Yt={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,layerZero:new Set,oracles:new Set,pythEndpoints:new Set,deprecated:new Set,emerging:new Set};var we=()=>Object.fromEntries(Object.entries(Yt).map(([t,e])=>[t,new Set(e)])),Wn=t=>{let e=new Set(t),o=()=>{throw new TypeError("Cannot mutate readonly ScallopConstants whitelist")};return Object.defineProperties(e,{add:{value:o},clear:{value:o},delete:{value:o}}),Object.freeze(e)},Se=t=>Object.freeze(Object.fromEntries(Object.entries(t).map(([e,o])=>[e,Wn(o)]))),xe=t=>Object.freeze(Object.fromEntries(Object.entries(t).map(([e,o])=>[e,o?Object.freeze({...o}):void 0]))),De=t=>{let e=we();for(let[o,r]of Object.entries(t))r&&(Array.isArray(r)?e[o]=new Set(r):r instanceof Set&&(e[o]=new Set(r)));return Se(e)},dt=t=>Object.keys(t).length===0;var Gt=({address:t,logger:e,defaultValues:o})=>({async ensureAddresses({network:r,force:n,addressId:a}){let s=t.getAddresses(r);(!s||Object.keys(s).length===0||n)&&await t.read(a);},getAddresses(r){return t.getAddresses(r)},async fetchWhitelist(){let{api:r,fetchWithCache:n}=t.addressApiRepo.context,a=await(async()=>{try{return await n({queryKey:g.api.getWhiteList(),queryFn:()=>r.get("/pool/whitelist")})}catch(s){return e.warn("whitelist fetch failed; using default values",{message:s?.message}),o?.whitelist??we()}})();return De(a)},async fetchPoolAddresses(){let{api:r,fetchWithCache:n}=t.addressApiRepo.context;return await(async()=>{try{return await n({queryKey:g.api.getPoolAddresses(),queryFn:()=>r.get("/pool/addresses")})}catch(s){return e.warn("poolAddresses fetch failed; using default values",{message:s?.message}),o?.poolAddresses??{}}})()}});var ut=["lending","collateral","borrowing","packages","scoin","spool","oracles","pythEndpoints","emerging"],Un=(t,e)=>Object.fromEntries(Object.entries(t).filter(([o])=>Object.values(e).some(r=>r.has(o))).filter(o=>o[1]!==void 0).map(([o,r])=>{let n=Object.fromEntries(Object.entries(r).map(([a,s])=>[a,typeof s=="boolean"?s??false:s||void 0]));return [o,n]})),Qn=(t,e,o,r)=>{let n=t.getAddresses(e);return !!n&&Object.keys(n).length>0&&Object.keys(r).length>0&&ut.every(s=>o[s].size>0)},Ht=async({source:t,network:e,force:o,addressId:r,overrides:n={},current:a,parseToOldMarketCoin:s})=>{await t.ensureAddresses({network:e,force:o,addressId:r});let c=a.whitelist,i=a.poolAddresses;n.forcePoolAddressInterface&&(i=xe(n.forcePoolAddressInterface)),n.forceWhitelistInterface&&(c=De(n.forceWhitelistInterface));let l=()=>_e({poolAddresses:i,whitelist:c,parseToOldMarketCoin:s});if(Qn(t,e,c,i)&&!o)return {whitelist:c,poolAddresses:i,derived:l()};let[d,u]=await Promise.all([t.fetchWhitelist(),t.fetchPoolAddresses()]);return n.forceWhitelistInterface||(c=Se(d)),n.forcePoolAddressInterface||(i=xe(Un(u,c))),{whitelist:c,poolAddresses:i,derived:l()}};var $n=()=>{let t=Se(we()),e=xe({});return {whitelist:t,poolAddresses:e,derived:_e({poolAddresses:e,whitelist:t,parseToOldMarketCoin:()=>""})}},pt=class{address;logger;params;source;_state=$n();get coinDecimals(){return this._state.derived.coinDecimals}get coinNameToOldMarketCoinTypeMap(){return this._state.derived.coinNameToOldMarketCoinTypeMap}get scoinRawNameToSCoinNameMap(){return this._state.derived.scoinRawNameToSCoinNameMap}get scoinTypeToSCoinNameMap(){return this._state.derived.scoinTypeToSCoinNameMap}get wormholeCoinTypeToCoinNameMap(){return this._state.derived.wormholeCoinTypeToCoinNameMap}get voloCoinTypeToCoinNameMap(){return this._state.derived.voloCoinTypeToCoinNameMap}get suiBridgeCoinTypeToCoinNameMap(){return this._state.derived.suiBridgeCoinTypeToCoinNameMap}get coinTypes(){return this._state.derived.coinTypes}get sCoinTypes(){return this._state.derived.sCoinTypes}get coinTypeToCoinNameMap(){return this._state.derived.coinTypeToCoinNameMap}get supportedBorrowIncentiveRewards(){return this._state.derived.supportedBorrowIncentiveRewards}constructor(e){let{logger:o=a,scallopAddress:r,defaultValues:n,forcePoolAddressInterface:a$1,forceWhitelistInterface:s,strictInit:c,urls:i,...l}=e;this.address=r??new Kt({...l,defaultValues:n?.addresses?{addresses:n.addresses}:void 0}),this.logger=o,this.params=e,this.source=e.constantsSource??Gt({address:this.address,logger:this.logger,defaultValues:n});}get url(){return this.address.url}get protocolObjectId(){return this.address.get("core.object")??"0xefe8b36d5b2e43728cc323298626b83177803521d195cfb11e15b910e892fddf"}get isInitialized(){return this.isInitializedFor("mainnet")}get whitelist(){return this._state.whitelist}get poolAddresses(){return this._state.poolAddresses}get(e){return this.address.get(e)}set(e,o){return this.address.set(e,o)}getAddresses(e){return this.address.getAddresses(e)}getAllAddresses(){return this.address.getAllAddresses()}switchCurrentAddresses(e){return this.address.switchCurrentAddresses(e)}isAddressInitialized({network:e="mainnet"}={}){let o=this.address.getAddresses(e);return !!o&&!dt(o)}parseToOldMarketCoin(e){return `${this.protocolObjectId}::reserve::MarketCoin<${e}>`}isInitializedFor(e){return this.isAddressInitialized({network:e})&&!dt(this._state.poolAddresses)&&ut.every(o=>this._state.whitelist[o].size>0)}async init({network:e="mainnet",force:o=false,addressId:r,constantsParams:n=this.params}={}){this._state=await Ht({source:this.source,network:e,force:o,addressId:r,overrides:{forcePoolAddressInterface:n.forcePoolAddressInterface,forceWhitelistInterface:n.forceWhitelistInterface},current:{whitelist:this._state.whitelist,poolAddresses:this._state.poolAddresses},parseToOldMarketCoin:a=>this.parseToOldMarketCoin(a)}),this.maybeAssertStrictInit();}maybeAssertStrictInit(){this.params.strictInit&&zt({addressSource:Wt(this),poolAddressSource:Ut(this),whitelistSource:Qt(this)},{validate:true});}},Xt=pt;var Me=class extends de{constructor({url:e=ve,...o}){super({url:e,...o});}};var Le=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(),r=(e-this.lastRefillTime)*this.refillRate;this.tokens=Math.min(this.capacity,this.tokens+r),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(o=>setTimeout(o,e)),this.refill();}}async execute(e){return await this.acquireToken(),await e()}};var zn=["getObjects","listOwnedObjects","listCoins","listDynamicFields","getDynamicField","getBalance","listBalances","getCoinMetadata","getTransaction","getReferenceGasPrice","getCurrentSystemState","getProtocolConfig","getChainIdentifier","defaultNameServiceName","getMoveFunction","simulateTransaction"],Yn=new Set(zn),Jt=new Map;var Gn=(t,e)=>{let o=Jt.get(t)??{calls:0,waitMs:0};o.calls+=1,o.waitMs+=e,Jt.set(t,o);},Hn=(t,e)=>new Proxy(t,{get(o,r,n){let a=Reflect.get(o,r,n);if(typeof a!="function")return a;let s=a.bind(o);return typeof r=="string"&&Yn.has(r)?(...c)=>{let i=Date.now();return e.execute(()=>(Gn(r,Date.now()-i),s(...c)))}:s}}),Ee=class{client;url;constructor({client:e,url:o,tokensPerSecond:r}){this.client=Hn(e,new Le(r)),this.url=o;}async getObject(e){let{objectId:o}=e,{objects:[r]}=await this.client.getObjects({objectIds:[o],signal:e.signal,include:e.include});if(r instanceof Error)throw r;return {object:r}}};var mt=(t,e,o)=>new Ee({client:t.core,url:e,tokensPerSecond:o?.tokensPerSecond}),Zt=(t=ve)=>new Me({url:t}),eo=(t=je)=>new de({url:t});var to=t=>{let e=new Date(t*1e3),o=new Date(t*1e3);o.setUTCHours(0,0,0,0),e.getUTCHours()>=0&&o.setUTCDate(o.getUTCDate()+1);let r=new Date().getTime();return o.getTime()-r>126144e3*1e3&&o.setUTCDate(o.getUTCDate()-1),Math.floor(o.getTime()/1e3)};var oo=10,yt=class{onchain;walletAddress;constants;logger;constructor(e){if(this.constants=e.scallopConstants??new Xt(e),e.client){let{client:o,fullnodeUrl:r,tokensPerSecond:n=oo}=e;this.onchain=mt(o,r,{tokensPerSecond:n});}else {let{network:o,fullnodeUrl:r,tokensPerSecond:n=oo}=e,a=new SuiGrpcClient({baseUrl:r,network:o});this.onchain=mt(a,r,{tokensPerSecond:n});}this.walletAddress=e.walletAddress,this.logger=e.logger??a;}get address(){return this.constants.address}isSuiBridgeAsset(e){return this.constants.whitelist.suiBridge.has(e)}isWormholeAsset(e){return this.constants.whitelist.wormhole.has(e)}isLayerZeroAsset(e){return this.constants.whitelist.layerZero.has(e)}isMarketCoin(e){let o=e.slice(1).toLowerCase();return e.charAt(0).toLowerCase()==="s"&&this.constants.whitelist.lending.has(o)}async init({force:e=false}={}){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,o=false){return o?this.constants.coinNameToOldMarketCoinTypeMap[e]??"":this.constants.coinTypes[e]??""}parseSCoinName(e){if(this.isMarketCoin(e)&&this.constants.whitelist.scoin.has(e))return e;{let o=`s${e}`;return this.constants.whitelist.scoin.has(o)?o: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 o=this.parseCoinName(e);return this.parseCoinType(o)}getSCoinTreasury(e){return this.address.get(`scoin.coins.${e}.treasury`)}parseMarketCoinType(e){return this.parseCoinType(this.isMarketCoin(e)?this.parseCoinName(e):e,true)}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"};if(this.isLayerZeroAsset(e))return {from:"LayerZero",type:"Ominchain Fungible Token from LayerZero"}}parseCoinNameFromType(e){e=normalizeStructTag(e);let{address:o,module:r,name:n,typeParams:a}=parseStructTag(e);return o===this.constants.protocolObjectId&&r==="reserve"&&n==="MarketCoin"?this.parseMarketCoinName((typeof a[0]=="string"?parseStructTag(a[0]):a[0]).name.toLowerCase()):this.constants.coinTypeToCoinNameMap[e]||this.constants.scoinTypeToSCoinNameMap[e]||parseStructTag(e).name.toLowerCase()}async selectCoins({amount:e,count:o,coinType:r=SUI_TYPE_ARG,ownerAddress:n=this.walletAddress}){if(e!==void 0&&e<=0)throw new Error("selectCoins amount must be greater than 0.");if(o!==void 0&&o<=0)throw new Error("selectCoins count must be greater than 0.");let a=[],s=e===void 0?void 0:BigInt(Math.trunc(e)),c=o??0,i=0n,l=true,d=null;for(;l&&(s===void 0?a.length<c:i<s);){let{objects:u,hasNextPage:p,cursor:y}=await this.onchain.client.listCoins({owner:n,coinType:r,cursor:d});u.sort((f,b)=>Number(BigInt(b.balance)-BigInt(f.balance)));for(let f of u)if(a.push({objectId:f.objectId,digest:f.digest,version:f.version,balance:f.balance}),i+=BigInt(f.balance),s===void 0?a.length>=c:i>=s)break;d=y,l=p;}if(!a.length)throw new Error("No valid coins found for the transaction.");return a}async mergeSimilarCoins(e,o,r,n=this.walletAddress){try{let a=await this.selectCoins({amount:Number.MAX_SAFE_INTEGER,coinType:r,ownerAddress:n});a.length>0&&e.mergeCoins(o,a.slice(0,500).map(e.objectRef));}catch{}}parseAprToApy(e,o=365){return (1+e/o)**o-1}parseApyToApr(e,o=365){return ((1+e)**(1/o)-1)*o}getUnlockAt(e,o){let r=Math.floor(new Date().getTime()/1e3),n=o?Math.max(Math.floor(o/1e3)-r,0):0,a=0;if(n===0){let s=(e??1)*86400;a=Math.min(r+s,r+126144e3);}else {let s=Math.min(e?e*86400+n:n,126144e3);a=r+s;}return to(a)}getSupportedPoolAddresses(){return this.constants.poolAddresses?Object.values(this.constants.poolAddresses).filter(e=>e!==void 0&&this.constants.whitelist.lending.has(e.coinName)):[]}},ro=yt;var A=(t,e)=>{let o=e instanceof a$1?e.context:void 0;return t?.error(e.message,o),e},E=async t=>{if(t.source==="api")return t.api();if(t.source==="api-first")try{return await t.api()}catch(e){return t.logger?.warn(`[${t.label}] api failed, falling back to onchain`,{cause:e instanceof Error?e.message:String(e)}),t.onchain()}return t.onchain()},ea=async(t,e)=>t.fetchWithCache({queryKey:g.rpc.getDynamicFieldObject({...e,node:t.onchain.url}),queryFn:()=>t.onchain.client.getDynamicField(e)}),ta=new Set(["notExists","dynamicFieldNotFound","deleted"]),ft=t=>{if(!(t instanceof Error))return false;let e=t.code;return typeof e=="string"&&ta.has(e)?true:/does not exist|not exist|not found|dynamic field|deleted/i.test(t.message)},re=async(t,e)=>{try{return await ea(t,e)}catch(o){if(ft(o))return null;throw o}};var no=["supra","switchboard","pyth"];var ao=t=>({whitelist:{lending:t.constants.whitelist.lending,collateral:t.constants.whitelist.collateral},poolAddresses:t.constants.poolAddresses,parseCoinNameFromType:e=>t.parseCoinNameFromType(e),parseCoinType:e=>t.parseCoinType(e),parseSymbol:e=>t.parseSymbol(e),parseMarketCoinType:e=>t.parseMarketCoinType(e),parseMarketCoinName:e=>t.parseMarketCoinName(e),parseSCoinType:e=>t.parseSCoinType(e),getCoinWrappedType:e=>t.getCoinWrappedType(e),getCoinDecimal:e=>t.getCoinDecimal(e),parseAprToApy:e=>t.parseAprToApy(e)}),so=t=>({queryPackageId:t.address.get("core.packages.query.id"),market:t.address.get("core.market")}),io=t=>{let e$1=t.address.getAddresses();if(!e$1)throw new e("Addresses are not initialized; call init() before building repositories");return {whitelist:{lending:t.constants.whitelist.lending,scoin:t.constants.whitelist.scoin},addresses:{scoin:e$1.scoin},parseCoinType:o=>t.parseCoinType(o),parseSCoinType:o=>t.parseSCoinType(o),parseMarketCoinType:o=>t.parseMarketCoinType(o),parseSCoinNameFromType:o=>t.parseSCoinNameFromType(o),parseUnderlyingSCoinType:o=>t.parseUnderlyingSCoinType(o),getSCoinTreasury:o=>t.getSCoinTreasury(o),getCoinDecimal:o=>t.getCoinDecimal(o),parseCoinName:o=>t.parseCoinName(o)}},co=t=>{let e=Object.entries(t.constants.coinTypeToCoinNameMap).filter(o=>o[1]!==void 0);return {coinTypeToCoinNameMap:new Map(e)}},lo=t=>({addresses:{protocolObjectId:t.address.get("core.object"),queryPackageId:t.address.get("core.packages.query.id"),version:t.address.get("core.version"),market:t.address.get("core.market")}}),uo=t=>{let e$1=t.address.getAddresses();if(!e$1)throw new e("Addresses are not initialized; call init() before building repositories");return {whitelist:{lending:t.constants.whitelist.lending},addresses:{borrowIncentive:e$1.borrowIncentive,core:{object:t.address.get("core.object")},vesca:{object:t.address.get("vesca.object")}},parseCoinNameFromType:o=>t.parseCoinNameFromType(o),parseSymbol:o=>t.parseSymbol(o),getCoinDecimal:o=>t.getCoinDecimal(o)}},po=t=>({addresses:{referral:{bindingTableId:t.address.get("referral.bindingTableId")}}}),mo=t=>{let e$1=t.address.getAddresses();if(!e$1)throw new e("Addresses are not initialized; call init() before building repositories");return {addresses:{coins:Object.fromEntries(Object.entries(e$1.core.coins).filter(r=>r[1]!==void 0))}}},bo=t=>{let e$1=t.address.getAddresses();if(!e$1)throw new e("Addresses are not initialized; call init() before building repositories");return {addresses:{core:{coins:e$1.core.coins,market:e$1.core.market},spool:{pools:e$1.spool.pools},scoin:{coins:e$1.scoin.coins}}}},yo=t=>({addresses:{market:t.address.get("core.market")},poolAddresses:t.constants.poolAddresses,whitelist:{lending:t.constants.whitelist.lending}}),fo=t=>({addresses:{veSca:{id:t.address.get("vesca.id"),config:t.address.get("vesca.config"),tableId:t.address.get("vesca.tableId"),object:t.address.get("vesca.object"),treasury:t.address.get("vesca.treasury")}}}),go=t=>({addresses:{loyaltyProgram:{rewardPool:t.address.get("loyaltyProgram.rewardPool")}}}),ho=t=>{let e$1=t.address.getAddresses();if(!e$1)throw new e("Addresses are not initialized; call init() before building repositories");return {addresses:{veSca:{tableId:e$1.vesca.tableId},veScaLoyaltyProgram:{veScaRewardPool:e$1.veScaLoyaltyProgram.veScaRewardPool,veScaRewardTableId:e$1.veScaLoyaltyProgram.veScaRewardTableId}}}},Co=t=>({whitelist:{spool:t.constants.whitelist.spool},addresses:{spoolObjectId:t.address.get("spool.object"),spools:[...t.constants.whitelist.spool].reduce((e,o)=>(e[o]={id:t.address.get(`spool.pools.${o}.id`),rewardPoolId:t.address.get(`spool.pools.${o}.rewardPoolId`)},e),{})},poolAddresses:t.constants.poolAddresses,parseCoinName:e=>t.parseCoinName(e),parseSymbol:e=>t.parseSymbol(e),parseCoinType:e=>t.parseCoinType(e),parseMarketCoinType:e=>t.parseMarketCoinType(e),parseSCoinType:e=>t.parseSCoinType(e),isMarketCoin:e=>t.isMarketCoin(e),getCoinDecimal:e=>t.getCoinDecimal(e)??0,getSpoolRewardCoinName:()=>t.getSpoolRewardCoinName()}),wo=t=>({addresses:{...no.reduce((e,o)=>(e[o]={object:t.address.get(`core.packages.${o}.object`)},e),{}),xOracleObject:t.address.get("core.packages.xOracle.object"),oracles:{primaryPriceUpdatePolicyVecsetId:t.address.get("core.oracles.primaryPriceUpdatePolicyVecsetId"),secondaryPriceUpdatePolicyVecsetId:t.address.get("core.oracles.secondaryPriceUpdatePolicyVecsetId"),primaryPriceUpdatePolicyObject:t.address.get("core.oracles.primaryPriceUpdatePolicyObject"),secondaryPriceUpdatePolicyObject:t.address.get("core.oracles.secondaryPriceUpdatePolicyObject"),switchboardRegistryTableId:t.address.get("core.oracles.switchboard.registryTableId")}},whitelist:{lending:t.constants.whitelist.lending},parseCoinNameFromType:e=>t.parseCoinNameFromType(e),parseCoinType:e=>t.parseCoinType(e),getSwitchboardAggAddress:e=>t.address.get(`core.coins.${e}.oracle.switchboard`)});function W(t){let{type:e,value:o}=t;if(t.bcs instanceof Uint8Array)return {type:e,bcs:t.bcs};if(o===void 0)throw new Error(`DynamicField name must have 'value' or 'bcs' for type: ${e}`);let r;if(e==="0x2::object::ID"||e==="address"||e.includes("::typed_id::TypedID"))r=bcs.Address.serialize(o).toBytes();else if(e==="u64"||e==="u8"||e==="u128"||e==="u256")r={u64:bcs.u64(),u8:bcs.u8(),u128:bcs.u128(),u256:bcs.u256()}[e].serialize(o).toBytes();else if(e.includes("::type_name::TypeName")){let n=typeof o=="object"&&o!==null&&"name"in o?o.name:normalizeStructTag(o);r=bcs.struct("TypeName",{name:bcs.string()}).serialize({name:n}).toBytes();}else r=bcs.string().serialize(o).toBytes();return {type:e,bcs:r}}var pe=(t,e)=>{let o=[];for(let r=0;r<t.length;r+=e)o.push(t.slice(r,r+e));return o};var ra="0x0000000000000000000000000000000000000000000000000000000000000002::dynamic_field::Field",qe=t=>typeof t=="object"&&t!==null,na=t=>!qe(t)||t.$kind!=="Shared"||!("Shared"in t)||!qe(t.Shared)?false:"initialSharedVersion"in t.Shared;function aa(t){if(!t?.json)throw new Error(`Failed to parse object: ${JSON.stringify(t,null,2)}`)}var Ve=t=>{if(Array.isArray(t))return t.map(Ve);if(typeof t=="object"&&t!==null){let e=t;if("type"in e&&"fields"in e&&typeof e.type=="string")return Ve(e.fields);let o={};for(let[r,n]of Object.entries(e))o[r]=Ve(n);return o}return t},xo=t=>{aa(t);let e=t.json,o="fields"in e?e.fields:e;return Ve(o)},So=t=>na(t.owner)?{objectId:t.objectId,initialSharedVersion:String(t.owner.Shared.initialSharedVersion)}:t,sa=(t,{obj:e,mutable:o=false})=>typeof e=="object"&&"initialSharedVersion"in e?t.sharedObjectRef({objectId:e.objectId,initialSharedVersion:e.initialSharedVersion.toString(),mutable:o}):typeof e=="object"&&"objectId"in e?t.object(e.objectId):typeof e=="string"?t.object(e):e,G=async({onchain:t,fetchWithCache:e},{tx:o,objectId:r,mutable:n=false,include:a})=>{let s;if(typeof r=="string"){let c=await e({queryKey:g.rpc.getSharedObject({objectId:r,node:t.url}),queryFn:()=>t.getObject({objectId:r,include:a})});if(!c?.object)throw new Error("Failed to get object data");s=So(c.object);}else "objectId"in r&&"owner"in r&&(s=So(r));return sa(o,{obj:s??r,mutable:n})},ia=z.union([z.string(),z.object({name:z.string()}),z.object({id:z.string()}),z.object({bytes:z.string()}),z.record(z.unknown())]),ca=z.union([z.string(),z.object({id:z.string()})]),la=z.object({id:ca,name:ia,value:z.unknown().optional()}),Ao=t=>t.type.startsWith(ra),Oo=t=>{let{success:e}=la.safeParse(t);return !!e},da=t=>typeof t=="string"?t:t.id,ua=t=>{if(!Oo(t))throw new Error(`Invalid dynamic field data: ${JSON.stringify(t,null,2)}`);let{value:e}=t;return e},pa=t=>{if(typeof t=="string")return t;if(!qe(t))return;let e=t,o=e.name,r=e.id,n=e.bytes;if(typeof o=="string")return o;if(typeof r=="string")return r;if(typeof n=="string")return n},ma=t=>{if(typeof t=="string")return t.includes("::")?"type":"string";if(!qe(t))return "string";let e=t;if(typeof e.id=="string")return "id";if(typeof e.bytes=="string")return "bytes";let o=e.name;return typeof o=="string"&&o.includes("::")?"type":"string"},P=t=>{let e=xo(t);return Ao(t)&&typeof e=="object"?ua(e):e},Po=t=>{if(!Ao(t))throw new Error(`Object ${t.objectId} is not a dynamic field object`);let e=xo(t);if(Oo(e)){let o=pa(e.name);if(!o)throw new Error(`Failed to parse dynamic field name from object ${t.objectId}: ${JSON.stringify(e.name,null,2)}`);return {objectId:da(e.id),name:o,nameKind:ma(e.name)}}throw new Error(`Failed to parse dynamic field object ${t.objectId}, invalid fields: ${JSON.stringify(e,null,2)}`)};var H=t=>{if(typeof t=="string")return normalizeStructTag$1(t);if(t&&typeof t=="object"){let e=t;if(e.address&&e.module&&typeof e.name=="string"){let o=(e.typeParams??e.typeParameters??[]).map(n=>H(n)),r=o.length?`<${o.join(",")}>`:"";return normalizeStructTag$1(`${e.address}::${e.module}::${e.name}${r}`)}if(e.name)return H(e.name)}throw new d(`Invalid Move type name: ${JSON.stringify(t)}`,{context:{payload:t}})},X=(t,e)=>{try{return H(t)}catch(o){throw new d(`Failed to map Move type at ${e}`,{cause:o,context:{path:e}})}};var ko=t=>{if(t)return {...t,pools:(t.pools??[]).map((e,o)=>({...e,type:X(e.type,`market.pools[${o}].type`)})),collaterals:(t.collaterals??[]).map((e,o)=>({...e,type:X(e.type,`market.collaterals[${o}].type`)}))}};var Ro="0x6e641f0dca8aedab3101d047e96439178f16301bf0b57fe8745086ff1195eb3e::market_dynamic_keys::SupplyLimitKey",Io="0xe7dbb371a9595631f7964b7ece42255ad0e738cc85fe6da26c7221b220f01af6::market_dynamic_keys::BorrowLimitKey",No="0xe7dbb371a9595631f7964b7ece42255ad0e738cc85fe6da26c7221b220f01af6::market_dynamic_keys::IsolatedAssetKey";var gt=t=>({coinType:normalizeStructTag$1(t.type),maxBorrowRate:Number(t.maxBorrowRate.value)/2**32,borrowRate:Number(t.interestRate.value)/2**32,borrowRateScale:Number(t.interestRateScale),borrowIndex:Number(t.borrowIndex),lastUpdated:Number(t.lastUpdated),cashAmount:Number(t.cash),debtAmount:Number(t.debt),marketCoinSupplyAmount:Number(t.marketCoinSupply),reserveAmount:Number(t.reserve),reserveFactor:Number(t.reserveFactor.value)/2**32,borrowWeight:Number(t.borrowWeight.value)/2**32,borrowFee:Number(t.borrowFeeRate.value)/2**32,baseBorrowRate:Number(t.baseBorrowRatePerSec.value)/2**32,borrowRateOnHighKink:Number(t.borrowRateOnHighKink.value)/2**32,borrowRateOnMidKink:Number(t.borrowRateOnMidKink.value)/2**32,highKink:Number(t.highKink.value)/2**32,midKink:Number(t.midKink.value)/2**32,minBorrowAmount:Number(t.minBorrowAmount),isIsolated:t.isIsolated,supplyLimit:Number(t.supplyLimit),borrowLimit:Number(t.borrowLimit)}),ht=(t,e)=>{let o=t.parseCoinNameFromType(e.coinType),r=t.getCoinDecimal(o);if(r===void 0)throw new d(`Coin decimal not found for ${o}`,{context:{coinName:o}});let n=24*365*3600,a=e.baseBorrowRate*n/e.borrowRateScale,s=e.borrowRateOnHighKink*n/e.borrowRateScale,c=e.borrowRateOnMidKink*n/e.borrowRateScale,i=e.maxBorrowRate*n/e.borrowRateScale,l=e.borrowRate*n/e.borrowRateScale,d$1=Math.floor(new Date().getTime()/1e3)-e.lastUpdated,u=BigNumber(e.borrowIndex).multipliedBy(BigNumber(d$1).multipliedBy(e.borrowRate)).dividedBy(e.borrowRateScale),p=BigNumber(e.borrowIndex).plus(u),y=BigNumber(p).dividedBy(e.borrowIndex).minus(1),f=BigNumber(e.debtAmount).multipliedBy(y),b=f.plus(e.debtAmount),m=b.shiftedBy(-r),h=BigNumber(e.reserveAmount).plus(f.multipliedBy(e.reserveFactor)),w=h.shiftedBy(-r),S=BigNumber(b).plus(Math.max(e.cashAmount-h.toNumber(),0)),T=S.shiftedBy(-r),B=BigNumber(b).dividedBy(S);B=B.isFinite()?B:BigNumber(0);let N=BigNumber(l).multipliedBy(B).multipliedBy(1-e.reserveFactor);N=N.isFinite()?N:BigNumber(0);let R=S.dividedBy(e.marketCoinSupplyAmount);return R=R.isFinite()&&!R.isNaN()?R:BigNumber(1),{baseBorrowApr:a,baseBorrowApy:t.parseAprToApy(a),borrowAprOnHighKink:s,borrowApyOnHighKink:t.parseAprToApy(s),borrowAprOnMidKink:c,borrowApyOnMidKink:t.parseAprToApy(c),coinDecimal:r,maxBorrowApr:i,maxBorrowApy:t.parseAprToApy(i),borrowApr:Math.min(l,i),borrowApy:Math.min(t.parseAprToApy(l),t.parseAprToApy(i)),borrowIndex:p.toNumber(),growthInterest:y.toNumber(),supplyAmount:S.toNumber(),supplyCoin:T.toNumber(),borrowAmount:b.toNumber(),borrowCoin:m.toNumber(),reserveAmount:h.toNumber(),reserveCoin:w.toNumber(),utilizationRate:B.toNumber(),supplyApr:N.toNumber(),supplyApy:t.parseAprToApy(N.toNumber()),conversionRate:R.toNumber(),isIsolated:e.isIsolated,maxSupplyCoin:BigNumber(e.supplyLimit).shiftedBy(-r).toNumber(),maxBorrowCoin:BigNumber(e.borrowLimit).shiftedBy(-r).toNumber()}},Ct=t=>({coinType:normalizeStructTag$1(t.type),isIsolated:t.isIsolated,collateralFactor:Number(t.collateralFactor.value)/4294967296,liquidationFactor:Number(t.liquidationFactor.value)/4294967296,liquidationDiscount:Number(t.liquidationDiscount.value)/4294967296,liquidationPenalty:Number(t.liquidationPenalty.value)/4294967296,liquidationReserveFactor:Number(t.liquidationReserveFactor.value)/4294967296,maxCollateralAmount:Number(t.maxCollateralAmount),totalCollateralAmount:Number(t.totalCollateralAmount)}),wt=(t,e)=>{let o=t.parseCoinNameFromType(e.coinType),r=t.getCoinDecimal(o);if(r===void 0)throw new d(`Coin decimal not found for ${o}`,{context:{coinName:o}});let n=BigNumber(e.maxCollateralAmount).shiftedBy(-r),a=BigNumber(e.totalCollateralAmount).shiftedBy(-r);return {coinDecimal:r,isIsolated:e.isIsolated,maxDepositAmount:e.maxCollateralAmount,maxDepositCoin:n.toNumber(),depositAmount:e.totalCollateralAmount,depositCoin:a.toNumber()}},vo=t=>{let e=BigNumber(0),o=BigNumber(0),r=BigNumber(0);for(let n of Object.values(t.pools))n&&(e=e.plus(BigNumber(n.supplyCoin).multipliedBy(n.coinPrice)),r=r.plus(BigNumber(n.borrowCoin).multipliedBy(n.coinPrice)));for(let n of Object.values(t.collaterals))n&&(o=o.plus(BigNumber(n.depositCoin).multipliedBy(n.coinPrice)));return {supplyValue:e.plus(o).toNumber(),supplyLendingValue:e.toNumber(),supplyCollateralValue:o.toNumber(),borrowValue:r.toNumber(),totalValue:e.plus(o).minus(r).toNumber()}};var St=async(t,{coinPrices:e,poolCoinNames:o,collateralCoinNames:r})=>{let{indexer:n,metadata:a,fetchWithCache:s}=t,c="api/market/migrate",i=await s({queryFn:()=>n.get(c),queryKey:g.api.getMarkets()}),l={},d={},u=o?new Set(o):void 0,p=r?new Set(r):void 0,y=b=>{u&&!u.has(b.coinName)||(l[b.coinName]={...b,coinPrice:e[b.coinName]??b.coinPrice,coinWrappedType:a.getCoinWrappedType(b.coinName)});},f=b=>{p&&!p.has(b.coinName)||(d[b.coinName]={...b,coinPrice:e[b.coinName]??b.coinPrice,coinWrappedType:a.getCoinWrappedType(b.coinName)});};return Object.values(i.pools).filter(Boolean).forEach(y),Object.values(i.collaterals).filter(Boolean).forEach(f),{pools:l,collaterals:d}},xt=async(t,{coinPrices:e,poolCoinNames:o,collateralCoinNames:r})=>{let{onchain:n,addresses:a,fetchWithCache:s}=t,{queryPackageId:c,market:i}=a,l=new SuiTxBlock,d=`${c}::market_query::market_data`,p=[await G({onchain:n,fetchWithCache:s},{tx:l,mutable:true,objectId:i})];l.moveCall(d,p);let y=await s({queryKey:g.rpc.getInspectTxn({queryTarget:d,args:p.map(m=>typeof m=="object"&&"objectId"in m?m.objectId:m),typeArgs:[],node:n.url}),queryFn:()=>n.client.simulateTransaction({transaction:l.txBlock,include:{events:true}})}),f=y?.Transaction??y?.FailedTransaction;if(!f.status.success)throw A(t.logger,new b(`On-chain market query transaction failed: ${f.status.error.message}`));let b$1=ko(f?.events?.[0]?.json);return ya(t,b$1,{coinPrices:e,poolCoinNames:o,collateralCoinNames:r})},Fo=async(t,{coinPrice:e,coinName:o})=>{let r=await St(t,{coinPrices:{[o]:e}});if(!r.pools[o])throw A(t.logger,new d(`Market pool for ${o} not found in indexer data`,{context:{coinName:o}}));return {pool:r.pools[o],collateral:r.collaterals[o]}},_o=async(t,{coinPrice:e,coinName:o})=>{let{metadata:r}=t,a=(await Lo(t,[o]))[o];if(!a)throw A(t.logger,new b(`Failed to fetch required market objects for ${o}`,{context:{coinName:o}}));let s=await ha(t,a),c=gt(s),i=ht(r,c),l=s.parsedOriginMarketCollateral?Ct(s.parsedOriginMarketCollateral):void 0,d=()=>({coinName:o,symbol:r.parseSymbol(o),marketCoinType:r.parseMarketCoinType(o),coinType:r.parseCoinType(o)});return {pool:{...d(),sCoinType:r.parseSCoinType(r.parseMarketCoinName(o))??"",coinWrappedType:r.getCoinWrappedType(o),coinPrice:e??0,highKink:c.highKink,midKink:c.midKink,reserveFactor:c.reserveFactor,borrowWeight:c.borrowWeight,borrowFee:c.borrowFee,marketCoinSupplyAmount:c.marketCoinSupplyAmount,minBorrowAmount:c.minBorrowAmount,...i},collateral:l?{...d(),coinWrappedType:r.getCoinWrappedType(o),coinPrice:e,collateralFactor:l.collateralFactor,liquidationFactor:l.liquidationFactor,liquidationDiscount:l.liquidationDiscount,liquidationPenalty:l.liquidationPenalty,liquidationReserveFactor:l.liquidationReserveFactor,...wt(r,l)}:void 0}},Do=async t=>{let{indexer:e,fetchWithCache:o}=t,r="/api/market/tvl";return o({queryKey:g.api.getTotalValueLocked(),queryFn:()=>e.get(r)})},Mo=async(t,{coinPrices:e})=>{let o=await xt(t,{coinPrices:e});return vo(o)},ya=async(t,e,{coinPrices:o,poolCoinNames:r,collateralCoinNames:n})=>{let{metadata:a}=t,s={},c={},i=r?new Set(r):void 0,l=n?new Set(n):void 0,d=new Set;for(let p of e?.pools??[]){let y=a.parseCoinNameFromType(p.type);a.whitelist.lending.has(y)&&(i&&!i.has(y)||d.add(y));}for(let p of e?.collaterals??[]){let y=a.parseCoinNameFromType(p.type);a.whitelist.collateral.has(y)&&(l&&!l.has(y)||d.add(y));}let u=await Lo(t,[...d],ga);for(let p of e?.pools??[]){let y=p.type,f=a.parseCoinNameFromType(y),b=o[f]??0;if(!a.whitelist.lending.has(f)||i&&!i.has(f))continue;let{supplyLimit:m,borrowLimit:h,isIsolated:w}=Bo(u[f]??{}),S=gt({...p,type:p.type,isIsolated:w,supplyLimit:m,borrowLimit:h}),T=ht(a,S);s[f]={coinName:f,symbol:a.parseSymbol(f),marketCoinType:a.parseMarketCoinType(f),sCoinType:a.parseSCoinType(a.parseMarketCoinName(f))??"",coinWrappedType:a.getCoinWrappedType(f),coinPrice:b,...S,...T};}for(let p of e?.collaterals??[]){let y=p.type,f=a.parseCoinNameFromType(y),b=o[f]??0;if(!a.whitelist.collateral.has(f)||l&&!l.has(f))continue;let{isIsolated:m}=Bo(u[f]??{}),h=Ct({...p,type:p.type,liquidationPenalty:p.liquidationPanelty,isIsolated:m}),w=wt(a,h);c[f]={coinName:f,symbol:a.parseSymbol(f),marketCoinType:a.parseMarketCoinType(f),coinWrappedType:a.getCoinWrappedType(f),coinPrice:b,...h,...w};}return {pools:s,collaterals:c}},fa=["lendingPoolAddress","collateralPoolAddress","borrowDynamic","interestModel","riskModel","borrowFeeKey","supplyLimitKey","borrowLimitKey","isolatedAssetKey"],ga=["supplyLimitKey","borrowLimitKey","isolatedAssetKey"],Bo=t=>({supplyLimit:t.supplyLimitKey?P(t.supplyLimitKey):"0",borrowLimit:t.borrowLimitKey?P(t.borrowLimitKey):"0",isIsolated:t.isolatedAssetKey?.json?P(t.isolatedAssetKey):false}),ha=async(t,{balanceSheet:e,borrowDynamic:o,collateralStat:r,interestModel:n,riskModel:a,borrowFeeKey:s,supplyLimitKey:c,borrowLimitKey:i,isolatedAssetKey:l})=>{if(!e||!o||!n)throw A(t.logger,new b("Missing required market objects"));let d=P(e),u=P(n),p=P(o),y=s?P(s):{value:"0"},f=c?P(c):"0",b$1=i?P(i):"0",m=a?P(a):void 0,h=r?P(r):void 0,w=t.metadata.parseCoinNameFromType(`0x${u.type}`),S=l?.json?P(l):await Ca(t,w),T=m&&h?{type:u.type,collateralFactor:m.collateral_factor,liquidationFactor:m.liquidation_factor,liquidationPenalty:m.liquidation_penalty,liquidationDiscount:m.liquidation_discount,liquidationReserveFactor:m.liquidation_revenue_factor,maxCollateralAmount:m.max_collateral_amount,totalCollateralAmount:h.amount,isIsolated:S}:void 0;return {type:u.type,maxBorrowRate:u.max_borrow_rate,interestRate:p.interest_rate,interestRateScale:p.interest_rate_scale,borrowIndex:p.borrow_index,lastUpdated:p.last_updated,cash:d.cash,debt:d.debt,marketCoinSupply:d.market_coin_supply,reserve:d.revenue,reserveFactor:u.revenue_factor,borrowWeight:u.borrow_weight,borrowFeeRate:y,baseBorrowRatePerSec:u.base_borrow_rate_per_sec,borrowRateOnHighKink:u.borrow_rate_on_high_kink,borrowRateOnMidKink:u.borrow_rate_on_mid_kink,highKink:u.high_kink,midKink:u.mid_kink,minBorrowAmount:u.min_borrow_amount,supplyLimit:f,borrowLimit:b$1,isIsolated:S,parsedOriginMarketCollateral:T}},Lo=async({onchain:t,metadata:e,fetchWithCache:o},r,n=fa)=>{let a=[];for(let d of r){let u=e.poolAddresses[d];for(let p of n){let y=u?.[p];y&&a.push(y);}}let s=[],c=pe([...new Set(a)],50);for(let d of c){let u=await o({queryKey:g.rpc.getObjects({objectIds:d,node:t.url}),queryFn:()=>t.client.getObjects({objectIds:d,include:{json:true}})});s.push(...u.objects.filter(p=>!(p instanceof Error)));}let i=s.reduce((d,u)=>(d[u.objectId]=u,d),{}),l={};for(let d of r){let u=e.poolAddresses[d];l[d]={balanceSheet:i[u?.lendingPoolAddress??""],collateralStat:i[u?.collateralPoolAddress??""],borrowDynamic:i[u?.borrowDynamic??""],interestModel:i[u?.interestModel??""],riskModel:i[u?.riskModel??""],borrowFeeKey:i[u?.borrowFeeKey??""],supplyLimitKey:i[u?.supplyLimitKey??""],borrowLimitKey:i[u?.borrowLimitKey??""],isolatedAssetKey:i[u?.isolatedAssetKey??""]};}return l},Eo=(t,e)=>qo(t,Ro,e),Vo=(t,e)=>qo(t,Io,e),Ca=async(t,e)=>{let o=await Ko(t,No,e);return o?.object?.json?P(o.object):false},qo=async(t,e,o)=>{let r=await Ko(t,e,o);return r?.object?.json?P(r.object):"0"},Ko=({onchain:t,addresses:e,metadata:o,fetchWithCache:r},n,a)=>{let s=o.parseCoinType(a).slice(2),c={type:n,value:s};return r({queryKey:g.rpc.getDynamicFieldObject({parentId:e.market,name:c,node:t.url}),queryFn:async()=>{try{let{dynamicField:i}=await t.client.getDynamicField({parentId:e.market,name:W(c)});return await t.getObject({objectId:i.fieldId,include:{json:!0}})}catch(i){if(i instanceof Error&&i.message.toLowerCase().includes("not found"))return null;throw i}}})};var Ke=class extends k{indexer;addresses;onchain;constructor({indexer:e,addresses:o,onchain:r,...n}){super(n),this.indexer=e,this.addresses=o,this.onchain=r;}get context(){return {...this.baseContext,onchain:this.onchain,indexer:this.indexer,addresses:this.addresses}}getMarkets({coinPrices:e,poolCoinNames:o,collateralCoinNames:r,source:n="api-first"}){let a={coinPrices:e,poolCoinNames:o,collateralCoinNames:r};return E({source:n,label:"MarketRepository.getMarkets",logger:this.logger,api:()=>St(this.context,a),onchain:()=>xt(this.context,a)})}getMarket({coinPrice:e,coinName:o,source:r="api-first"}){return E({source:r,label:"MarketRepository.getMarketPool",logger:this.logger,api:()=>Fo(this.context,{coinPrice:e,coinName:o}),onchain:()=>_o(this.context,{coinPrice:e,coinName:o})})}getPoolSupplyLimit(e){return Eo(this.context,e)}getPoolBorrowLimit(e){return Vo(this.context,e)}getTvl({source:e="api-first",coinPrices:o}){return E({source:e,label:"MarketRepository.getTvl",logger:this.logger,api:()=>Do(this.context),onchain:()=>Mo(this.context,{coinPrices:o})})}};var At=async(t,{address:e,coinType:o})=>{let{onchain:r}=t;return (await r.client.getBalance({owner:e,coinType:o})).balance},Oa=(t,{balance:e,coinType:o,address:r,node:n})=>{let a=g.rpc.getCoinBalance({node:n,address:r,coinType:o});t.setQueryData(a,e,{updatedAt:Date.now()});},Ot=async(t,e)=>{let{onchain:o,queryClient:r}=t,n=[],a=null,s=true;for(;s;){let i=await o.client.listBalances({owner:e,cursor:a,limit:50});n.push(...i.balances??[]),s=i.hasNextPage,a=i.cursor;}return n.length?n.reduce((i,l)=>{if(l.balance!=="0"){let d=normalizeStructTag$1(l.coinType);i[d]=l,Oa(r,{balance:l,coinType:d,address:e,node:o.url});}return i},{}):{}},Wo=async(t,e)=>{let{fetchWithCache:o,onchain:r,metadata:n,queryClient:a}=t,{address:s,coinNames:c=[...n.whitelist.lending.values()]}=e,i=await o({queryKey:g.rpc.getAllCoinBalances({node:r.url,activeAddress:s}),queryFn:()=>Ot({onchain:r,queryClient:a},s)});return c.reduce((d,u)=>{let p=n.parseCoinType(u);return d[u]=p?Number(i[p]?.balance??0):0,d},{})},Uo=async(t,e)=>{let{fetchWithCache:o,onchain:r,metadata:n}=t,{address:a,coinName:s}=e,c=n.parseCoinType(s);if(!c)return 0;let i=await o({queryKey:g.rpc.getCoinBalance({node:r.url,address:a,coinType:c}),queryFn:()=>At({onchain:r},{address:a,coinType:c})});return Number(i?.balance??0)},Qo=async(t,e)=>{let{fetchWithCache:o,onchain:r,metadata:n,queryClient:a}=t,{address:s,sCoinNames:c=[...n.whitelist.scoin.values()]}=e,i=await o({queryKey:g.rpc.getAllCoinBalances({node:r.url,activeAddress:s}),queryFn:()=>Ot({onchain:r,queryClient:a},s)});return c.reduce((d,u)=>{let p=n.parseSCoinType(u);return d[u]=p?Number(i[p]?.balance??0):0,d},{})},$o=async(t,e)=>{let{fetchWithCache:o,onchain:r,metadata:n}=t,{address:a,sCoinName:s}=e,c=n.parseSCoinType(s);if(!c)return 0;let i=await o({queryKey:g.rpc.getCoinBalance({node:r.url,address:a,coinType:c}),queryFn:()=>At({onchain:r},{address:a,coinType:c})});return Number(i?.balance??0)},zo=async(t,e)=>{let{fetchWithCache:o,onchain:r,metadata:n,queryClient:a}=t,{address:s,marketCoinNames:c=[...n.whitelist.scoin.values()]}=e,i=await o({queryKey:g.rpc.getAllCoinBalances({node:r.url,activeAddress:s}),queryFn:()=>Ot({onchain:r,queryClient:a},s)});return c.reduce((d,u)=>{let p=n.parseMarketCoinType(u);return d[u]=p?Number(i[p]?.balance??0):0,d},{})},Yo=async(t,e)=>{let{fetchWithCache:o,onchain:r,metadata:n}=t,{address:a,marketCoinName:s}=e,c=n.parseMarketCoinType(s);if(!c)return 0;let i=await o({queryKey:g.rpc.getCoinBalance({node:r.url,address:a,coinType:c}),queryFn:()=>At({onchain:r},{address:a,coinType:c})});return Number(i?.balance??0)},Go=async(t,e)=>{let{onchain:o,metadata:r,fetchWithCache:n}=t,{getCoinDecimal:a,parseSCoinType:s,parseUnderlyingSCoinType:c,parseCoinName:i,addresses:{scoin:l}}=r,d$1=`${l.id}::s_coin_converter::total_supply`,u=l.coins[e]?.treasury;if(!u)throw A(t.logger,new d(`Treasury address not found for sCoin: ${e}`,{context:{sCoinName:e}}));let p=new SuiTxBlock,y=await n({queryKey:g.rpc.getSharedObject({objectId:u,node:o.url}),queryFn:()=>o.getObject({objectId:u})});if(!y.object)throw A(t.logger,new b(`Failed to fetch treasury object ${u}`,{context:{treasury:u}}));let f=[await G({onchain:o,fetchWithCache:n},{tx:p,objectId:y.object})],b$1=[s(e),c(e)].filter(S=>!!S);p.moveCall(d$1,f,b$1);let m={include:{commandResults:true}},h=await n({queryKey:g.rpc.getInspectTxn({queryTarget:d$1,args:f,typeArgs:b$1,node:o.url,...m}),queryFn:()=>o.client.simulateTransaction({...m,transaction:p.txBlock})}),w=h?.commandResults;if(!w)throw A(t.logger,new b(`Failed to query total supply for ${e}: ${h[h.$kind]?.status.error?.message}`,{context:{sCoinName:e}}));if(w&&w[0]?.returnValues&&w[0].returnValues[0]){let S=w[0].returnValues[0].bcs,T=a(i(e)??"")??0;return BigNumber(bcs.u64().parse(S)).shiftedBy(-T).toNumber()}return 0};var We=class extends k{onchain;constructor({onchain:e,...o}){super(o),this.onchain=e;}get context(){return {...this.baseContext,onchain:this.onchain,queryClient:this.queryClient}}getCoinAmounts(e){return Wo(this.context,e)}getCoinAmount(e){return Uo(this.context,e)}getSCoinAmounts(e){return Qo(this.context,e)}getSCoinAmount(e){return $o(this.context,e)}getSCoinTotalSupply(e){return Go(this.context,e)}getMarketCoinAmounts(e){return zo(this.context,e)}getMarketCoinAmount(e){return Yo(this.context,e)}};var Ho="0x00481a93b819d744a7d79ecdc6c62c74f2f7cb4779316c4df640415817ac61bb";var ka=async(t,{assetTypeMap:e})=>{let{onchain:o,fetchWithCache:r}=t,n=null,a=false,s=[];do{let l={parentId:Ho,limit:50,cursor:n},d=await r({queryKey:g.rpc.getDynamicFields(l),queryFn:()=>o.client.listDynamicFields(l)});if(!d)break;let u=d.dynamicFields.filter(p=>{let y=`0x${bcs.string().parse(p.name.bcs)}`;return !!e[y]}).map(p=>p.fieldId);s.push(...u),a=d.hasNextPage,n=d.cursor;}while(a);if(s.length===0)return [];let c={json:true},{objects:i}=await r({queryKey:g.rpc.getObjects({node:o.url,objectIds:s}),queryFn:()=>o.client.getObjects({objectIds:s,include:c})});return i},Xo=async(t,{assetNames:e})=>{let{metadata:o}=t,r=new Set(e),n=Object.fromEntries([...o.coinTypeToCoinNameMap.entries()].filter(([,s])=>r.has(s)));return (await ka(t,{assetTypeMap:n})).filter(s=>!(s instanceof Error)).reduce((s,c)=>{if(c){let{name:i}=Po(c),l=`0x${i}`,d=n[l];if(!d)return s;let u=+P(c);s[d]=u/1e4;}return s},{})};var Ue=class extends k{onchain;constructor({onchain:e,...o}){super(o),this.onchain=e;}get context(){return {...this.baseContext,onchain:this.onchain}}getFlashloanFees(e){return Xo(this.context,{assetNames:e})}};var Jo=t=>{let o=P(t).ownership?.of;if(!o)throw new d(`Failed to parse obligation key object ${t.objectId}`,{context:{objectId:t.objectId}});return o};var Zo=t=>{if(t)return {...t,collaterals:(t.collaterals??[]).map((e,o)=>({...e,type:X(e.type,`obligation.collaterals[${o}].type`)})),debts:(t.debts??[]).map((e,o)=>({...e,type:X(e.type,`obligation.debts[${o}].type`)}))}};var Ia=async(t,{address:e})=>{let{onchain:o,metadata:r,fetchWithCache:n}=t,a=`${r.addresses.protocolObjectId}::obligation::ObligationKey`,s=[],c=false,i=null;do{let l={owner:e,type:a,include:{json:true},limit:50,cursor:i},d=await n({queryKey:g.rpc.getOwnedObjects(l),queryFn:()=>o.client.listOwnedObjects(l)});s.push(...d.objects),d.hasNextPage&&d.cursor?(c=true,i=d.cursor):c=false;}while(c);return s},er=async(t,e)=>{let{onchain:o,fetchWithCache:r,metadata:n}=t,{queryPackageId:a,version:s,market:c}=n.addresses,i=`${a}::obligation_query::obligation_data`,l=new SuiTxBlock,d=m=>({objectId:m,include:{json:false,content:false}}),u=async m=>{let h=await r({queryKey:g.rpc.getObject({...d(m),node:o.url}),queryFn:()=>o.getObject(d(m))});if(!h.object)throw A(t.logger,new b(`Failed to fetch object ${m}`,{context:{objectId:m}}));return G({onchain:o,fetchWithCache:r},{tx:l,mutable:false,objectId:h.object})},p=await Promise.all([u(s),u(c),u(e)]);l.moveCall(i,[...p,l.txBlock.object.clock()]);let y=[s,c,e],f=await r({queryKey:g.rpc.getInspectTxn({queryTarget:i,args:y,node:o.url}),queryFn:()=>o.client.simulateTransaction({transaction:l.txBlock,include:{events:true}})}),b$1=f.Transaction??f.FailedTransaction;if(!b$1.status.success)throw A(t.logger,new b(`Failed to query obligation data for obligationId ${e}: ${b$1.status.error.message}`,{context:{obligationId:e}}));return Zo(b$1?.events?.[0]?.json)},tr=async(t,e)=>{let{onchain:o,fetchWithCache:r}=t,n={objectId:e,include:{json:true}},a=await r({queryKey:g.rpc.getObject(n),queryFn:()=>o.getObject(n)});return !!P(a.object)?.lock_key},or=async(t,{address:e})=>{let o=await Ia(t,{address:e}),r=o.map(Jo),n=await Pt(t,r);return o.map((a,s)=>{let c=n[s],i=c?P(c):void 0;return {id:r[s],keyId:a.objectId,locked:!!i?.lock_key}})},Pt=async(t,e)=>{if(e.length===0)return [];let{onchain:o,fetchWithCache:r}=t,n={objectIds:e,include:{json:true}},{objects:a}=await r({queryKey:g.rpc.getObjects({objectIds:e,node:o.url}),queryFn:()=>o.client.getObjects(n)});return a.map(s=>s instanceof Error?null:s)};var Qe=class extends k{onchain;constructor({onchain:e,...o}){super(o),this.onchain=e;}get context(){return {...this.baseContext,onchain:this.onchain}}getObligations(e){return or(this.context,{address:e})}getObligationData(e){return er(this.context,e)}getObligationLocked(e){return tr(this.context,e)}getObligationObjects(e){return Pt(this.context,e)}};var Na=t=>({pointType:H(t.point_type),distributedPointPerPeriod:Number(t.distributed_point_per_period),period:Number(t.point_distribution_time),distributedPoint:Number(t.distributed_point),points:Number(t.points),index:Number(t.index),baseWeight:Number(t.base_weight),weightedAmount:Number(t.weighted_amount),lastUpdate:Number(t.last_update),createdAt:Number(t.created_at)}),rr=(t,e)=>({poolType:H(e.pool_type),minStakes:Number(e.min_stakes),maxStakes:Number(e.max_stakes),staked:Number(e.stakes),poolPoints:e.points.reduce((o,r)=>{let n=Na(r),a=t(n.pointType);return o[a]=n,o},{})}),nr=(t,e,o,r,n)=>{let s=BigNumber(t.distributedPointPerPeriod).dividedBy(t.period),c=BigNumber(Math.floor(new Date().getTime()/1e3)-t.lastUpdate).dividedBy(t.period).toFixed(0),i=BigNumber.minimum(BigNumber(c).multipliedBy(t.distributedPointPerPeriod),BigNumber(t.points)),l=BigNumber(t.index).plus(i.dividedBy(t.weightedAmount).isFinite()?BigNumber(1e9).multipliedBy(i).dividedBy(t.weightedAmount):0),d=BigNumber(t.distributedPoint).plus(i),u=BigNumber(t.baseWeight),p=BigNumber(t.weightedAmount),y=p.shiftedBy(-1*n),f=y.multipliedBy(r),b=365*24*60*60,m=BigNumber(s).shiftedBy(-1*o),h=BigNumber(m).multipliedBy(b).multipliedBy(e),w=BigNumber(1e12),S=BigNumber(t.baseWeight).dividedBy(w),T=h.multipliedBy(S).dividedBy(f).isFinite()&&t.points>0?h.multipliedBy(S).dividedBy(f).toNumber():1/0;return {distributedPointPerSec:s.toNumber(),accumulatedPoints:i.toNumber(),currentPointIndex:l.toNumber(),currentTotalDistributedPoint:d.toNumber(),baseWeight:u.toNumber(),weightedStakedAmount:p.toNumber(),weightedStakedCoin:y.toNumber(),weightedStakedValue:f.toNumber(),rewardApr:T,rewardPerSec:m.toNumber()}},ja=t=>({pointType:H(t.point_type),weightedAmount:Number(t.weighted_amount),points:Number(t.points),totalPoints:Number(t.total_points),index:Number(t.index)}),ar=(t,e)=>({poolType:H(e.pool_type),debtAmount:Number(e.debt_amount),pointList:e.points_list.reduce((o,r)=>{let n=ja(r),a=t(n.pointType);return o[a]=n,o},{})}),sr=t=>{if(t)return {...t,incentive_pools:(t.incentive_pools??[]).map((e,o)=>({...e,pool_type:X(e.pool_type,`borrowIncentive.incentive_pools[${o}].pool_type`),points:(e.points??[]).map((r,n)=>({...r,point_type:X(r.point_type,`borrowIncentive.incentive_pools[${o}].points[${n}].point_type`)}))}))}},ir=t=>{if(t)return {...t,pool_records:(t.pool_records??[]).map((e,o)=>({...e,pool_type:X(e.pool_type,`borrowIncentive.pool_records[${o}].pool_type`),points_list:(e.points_list??[]).map((r,n)=>({...r,point_type:X(r.point_type,`borrowIncentive.pool_records[${o}].points_list[${n}].point_type`)}))}))}};var va=bcs.struct("TypeName",{name:bcs.string()}),Ba=bcs.struct("Table",{id:bcs.Address,size:bcs.u64()}),cr=bcs.struct("IncentiveAccount",{id:bcs.Address,pool_records:Ba,pool_types:bcs.struct("VecSet",{contents:bcs.vector(va)}),binded_ve_sca_key:bcs.option(bcs.Address)});var dr=async(t,{coinNames:e,coinPrices:o})=>{let{onchain:r,metadata:n,fetchWithCache:a}=t,{borrowIncentive:s}=n.addresses,c=new SuiTxBlock,i=`${s.query}::incentive_pools_query::incentive_pools_data`,l={objectId:s.incentivePools},d$1=await a({queryKey:g.rpc.getSharedObject({...l,node:r.url}),queryFn:()=>r.getObject(l)});if(!d$1.object)throw A(t.logger,new b(`Failed to fetch incentive pools object ${s.incentivePools}`,{context:{objectId:s.incentivePools}}));let p=[await G({onchain:r,fetchWithCache:a},{tx:c,mutable:true,objectId:d$1.object})];c.moveCall(i,p,[]);let y=await a({queryKey:g.rpc.getInspectTxn({queryTarget:i,args:[s.incentivePools],node:r.url}),queryFn:()=>r.client.simulateTransaction({transaction:c.txBlock,include:{events:true}})}),f=y?.Transaction??y?.FailedTransaction,b$1=sr(f?.events?.[0]?.json),m=e??[...n.whitelist.lending.values()],h={};for(let w of b$1?.incentive_pools??[]){let S={},T=rr(n.parseCoinNameFromType,w),B=w.pool_type,N=n.parseCoinNameFromType(B),R=o[N]??0,x=n.getCoinDecimal(N);if(x===void 0)throw A(t.logger,new d(`Coin decimal not found for ${N}`,{context:{poolCoinName:N}}));if(!m.includes(N))continue;for(let[q,Q]of Object.entries(T.poolPoints)){if(!Q)continue;let ae=Q.pointType,Z=n.parseCoinNameFromType(ae),oe=n.getCoinDecimal(Z);if(oe===void 0)throw A(t.logger,new d(`Coin decimal not found for ${Z}`,{context:{poolCoinName:Z}}));let M=o[Z]??0,ge=n.parseSymbol(Z),K=nr(Q,M,oe,R,x),z=Q.points<=K.accumulatedPoints;Q.points>K.accumulatedPoints&&(S[q]={symbol:ge,coinName:Z,coinType:ae,coinDecimal:oe,coinPrice:M,points:Q.points,distributedPoint:Q.distributedPoint,weightedAmount:Q.weightedAmount,...K,...z?{rewardApr:0}:{}});}let v=BigNumber(T.staked),j=v.shiftedBy(-x),_=j.multipliedBy(R);h[N]={coinName:N,symbol:n.parseSymbol(N),coinType:B,coinDecimal:x,coinPrice:R,stakedAmount:v.toNumber(),stakedCoin:j.toNumber(),stakedValue:_.toNumber(),points:S};}return h},ur=async(t,{coinNames:e,obligationId:o})=>{let{metadata:r,fetchWithCache:n,onchain:a}=t,{borrowIncentive:s}=r.addresses,c=new SuiTxBlock,i=`${s.query}::incentive_account_query::incentive_account_data`,l=async(h,w)=>{let S=await n({queryKey:g.rpc.getSharedObject({objectId:h,node:a.url}),queryFn:()=>a.getObject({objectId:h})});if(!S.object)throw A(t.logger,new b(`Failed to fetch object ${h}`,{context:{objectId:h}}));return G({onchain:a,fetchWithCache:n},{tx:c,mutable:w,objectId:S.object})},[d,u]=await Promise.all([l(s.incentiveAccounts,true),l(o,true)]),p=[d,u];c.moveCall(i,p,[]);let y=await n({queryKey:g.rpc.getInspectTxn({queryTarget:i,args:[s.incentiveAccounts,o],node:a.url}),queryFn:()=>a.client.simulateTransaction({transaction:c.txBlock,include:{events:true}})}),f=y?.Transaction??y?.FailedTransaction,b$1=ir(f?.events?.[0]?.json),m=e??[...r.whitelist.lending.values()];return b$1?b$1.pool_records.reduce((h,w)=>{let S=ar(r.parseCoinNameFromType,w),T=S.poolType,B=r.parseCoinNameFromType(T);return m.includes(B)&&(h[B]=S),h},{}):{}},pr=async(t,e)=>{let{onchain:o,fetchWithCache:r,metadata:{addresses:n}}=t,{borrowIncentive:a,core:s}=n,c={objectId:a.incentiveAccounts,include:{json:true}},i=await r({queryKey:g.rpc.getObject(c),queryFn:()=>o.getObject(c)});if(!i.object)throw A(t.logger,new b(`Failed to fetch incentive accounts object with id ${a.incentiveAccounts}`,{context:{objectId:a.incentiveAccounts}}));let l=P(i.object).accounts.id,d=await re(t,{parentId:l,name:W({type:`${a.object}::typed_id::TypedID<${s.object}::obligation::Obligation>`,value:e})});return d?cr.parse(d.dynamicField.value.bcs).binded_ve_sca_key:null},mr=async(t,e)=>{let{onchain:o,fetchWithCache:r,metadata:{addresses:n}}=t,{borrowIncentive:a,vesca:s}=n,c={objectId:a.incentivePools,include:{json:true}},i=await r({queryKey:g.rpc.getObject(c),queryFn:()=>o.getObject(c)});if(!i.object)throw A(t.logger,new b(`Failed to fetch incentive pool object with id ${a.incentivePools}`,{context:{objectId:a.incentivePools}}));let l=P(i.object).ve_sca_bind.id,d=`${a.object}::typed_id::TypedID<${s.object}::ve_sca::VeScaKey>`,u=await re(t,{parentId:l,name:W({type:d,value:e})});return u?bcs.Address.parse(u.dynamicField.value.bcs):null};var $e=class extends k{onchain;constructor({onchain:e,...o}){super(o),this.onchain=e;}get context(){return {...this.baseContext,onchain:this.onchain}}getBorrowIncentivePools(e){return dr(this.context,e)}getBorrowIncentiveAccounts(e){return ur(this.context,e)}getBindedVeScaKey(e){return pr(this.context,e)}getBindedObligation(e){return mr(this.context,e)}};var br="0xe7dbb371a9595631f7964b7ece42255ad0e738cc85fe6da26c7221b220f01af6::market_dynamic_keys::IsolatedAssetKey";var fr=bcs.bool(),gr=bcs.string();var Da=async t=>{let{onchain:e,fetchWithCache:o,metadata:{addresses:r}}=t,n=false,a=null,s=i=>i.name.type===br,c=[];do{let i={parentId:r.market,cursor:a,limit:50,include:{value:true}},{dynamicFields:l,hasNextPage:d,cursor:u}=await o({queryKey:g.rpc.getDynamicFields({...i,node:e.url}),queryFn:()=>e.client.listDynamicFields(i)}),p=l.filter(y=>s(y)?fr.parse(y.valueType.bcs):false).map(y=>`0x${gr.parse(y.name.bcs)}`);c.push(...p),a=u,n=d;}while(n);return c},hr=async t=>Da(t),Cr=async t=>{let{metadata:{poolAddresses:e,whitelist:o}}=t;return Object.values(e).filter(r=>r!==void 0&&o.lending.has(r.coinName)&&r.isIsolated).map(r=>r.coinType)};var ze=class extends k{onchain;constructor(e){let{onchain:o,...r}=e;super(r),this.onchain=o;}get context(){return {...this.baseContext,onchain:this.onchain}}getIsolatedAssets({source:e}){return E({source:e,label:"IsolatedAssetsRepository.getIsolatedAssets",logger:this.logger,api:()=>Cr(this.context),onchain:()=>hr(this.context)})}};var wr=bcs.struct("VeSca",{locked_amount:bcs.u64(),unlock_at:bcs.u64()});var Ea=async(t,e)=>{let{onchain:o,fetchWithCache:r,metadata:{addresses:n}}=t,a=`${n.veSca.object}::ve_sca::VeScaKey`,s=[],c=false,i=null;do{let l={owner:e,type:a,include:{json:true},cursor:i,limit:50},d=await r({queryKey:g.rpc.getOwnedObjects({...l,node:o.url}),queryFn:()=>o.client.listOwnedObjects(l)});s.push(...d.objects),d.hasNextPage&&d.cursor?(c=true,i=d.cursor):c=false;}while(c);return s},Va=async t=>{let{onchain:e,fetchWithCache:o,metadata:{addresses:r}}=t,{id:n,config:a,treasury:s}=r.veSca,c=new SuiTxBlock,i=async(w,S)=>{let T=await o({queryKey:g.rpc.getSharedObject({node:e.url,objectId:w}),queryFn:()=>e.getObject({objectId:w})});if(!T.object)throw A(t.logger,new b(`Failed to fetch object ${w}`,{context:{objectId:w}}));return G({onchain:e,fetchWithCache:o},{tx:c,mutable:S,objectId:T.object})},[l,d]=await Promise.all([i(s,true),i(a,false)]),u=`${n}::treasury::refresh`,p=[d,l,c.txBlock.object.clock()],y=`${n}::treasury::total_ve_sca_amount`,f=[l,c.txBlock.object.clock()];c.moveCall(u,p),c.moveCall(y,f);let m=(await o({queryKey:g.rpc.getTotalVeScaTreasuryAmount({refreshArgs:p,veScaAmountArgs:f,node:e.url}),queryFn:()=>e.client.simulateTransaction({transaction:c.txBlock,include:{commandResults:true}})}))?.commandResults;if(!m)throw A(t.logger,new b("Failed to fetch total veSca amount from treasury: No command results",{context:{treasury:s}}));let h=m[1]?.returnValues?.[0].bcs;if(!h)throw A(t.logger,new b("Failed to fetch result bcs from vesca treasury",{context:{treasury:s}}));return bcs.u64().parse(h)},Ae=async(t,e)=>{let{onchain:o,metadata:{addresses:r},fetchWithCache:n}=t,a={parentId:r.veSca.tableId,name:W({type:"0x2::object::ID",value:e})},{dynamicField:s}=await n({queryKey:g.rpc.getDynamicFieldObject({...a,node:o.url}),queryFn:()=>o.client.getDynamicField(a)});if(!s?.value?.bcs)return;let c=s.value.bcs,i=wr.parse(c),l=Math.max(+i.unlock_at*1e3-Date.now(),0),d=String(i.locked_amount),u=BigNumber(i.locked_amount).shiftedBy(-9).toNumber(),p=u*(Math.floor(l/1e3)/126144e3);return {id:s.fieldId,keyId:e,object:{objectId:s.fieldId,version:s.version,digest:s.digest},lockedScaAmount:d,lockedScaCoin:u,currentVeScaBalance:p,unlockAt:BigNumber(Number(i.unlock_at)*1e3).toNumber()}},Sr=async(t,{address:e,excludeEmpty:o})=>{let r=await Ea(t,e),n=(await Promise.all(r.map(a=>Ae(t,a.objectId)))).filter(a=>!!a);return n.sort((a,s)=>s.currentVeScaBalance-a.currentVeScaBalance),o?n.filter(a=>a.lockedScaAmount!=="0"):n},xr=async(t,{veScaKey:e,tableId:o})=>{let{onchain:r,fetchWithCache:n}=t,a={type:"0x2::object::ID",value:e},s=await n({queryKey:g.rpc.getDynamicFieldObject({parentId:o,name:a,node:r.url}),queryFn:async()=>{try{let{dynamicField:i}=await r.client.getDynamicField({parentId:o,name:W(a)});return await r.getObject({objectId:i.fieldId,include:{json:!0}})}catch(i){if(ft(i))return null;throw i}}});if(!s?.object)return false;let c=P(s.object);return Array.isArray(c?.contents)&&c.contents.length>0},Ar=async t=>{let{onchain:e,metadata:{addresses:o},fetchWithCache:r}=t,n={objectId:o.veSca.treasury,include:{json:true}},a=await r({queryKey:g.rpc.getObject({...n,node:e.url}),queryFn:()=>e.getObject(n)}),s=P(a.object),c=BigNumber(s.unlock_schedule.locked_sca_amount).shiftedBy(-9).toNumber(),i=BigNumber(await Va(t)).shiftedBy(-9).toNumber(),l=c>0?i/c*4:0;return {totalLockedSca:c,totalVeSca:i,averageLockingPeriod:l,averageLockingPeriodUnit:"year"}};var Ge=class extends k{onchain;constructor({onchain:e,...o}){super(o),this.onchain=e;}get context(){return {...this.baseContext,onchain:this.onchain}}getVeSca(e){return Ae(this.context,e)}getVeScasByAddress({address:e,excludeEmpty:o=true}){return Sr(this.context,{address:e,excludeEmpty:o})}getVeScaTreasuryInfo(){return Ar(this.context)}isVeScaKeyInSubsTable(e,o){return xr(this.context,{veScaKey:e,tableId:o})}};var Or=z.object({balance:z.string(),enable_claim:z.boolean(),id:z.string(),user_rewards:z.object({id:z.string(),size:z.string()})}).transform(t=>({isClaimEnabled:t.enable_claim,totalPoolReward:BigNumber(t.balance).shiftedBy(-9).toNumber(),userRewardTableId:t.user_rewards.id}));var Pr=bcs.u64();var Ua=async(t,e)=>{let{onchain:o,fetchWithCache:r}=t,n={objectId:e,include:{json:true}},{object:a}=await r({queryKey:g.rpc.getObject({...n,node:o.url}),queryFn:()=>o.getObject(n)});if(!a)throw A(t.logger,new b("Failed to fetch reward pool object",{context:{rewardPoolId:e}}));return a},Qa=async(t,{veScaKey:e,tableId:o})=>{let{onchain:r,fetchWithCache:n}=t,a={parentId:o,name:W({type:"0x2::object::ID",value:e})},{dynamicField:{value:s}}=await n({queryKey:g.rpc.getDynamicFieldObject({...a,node:r.url}),queryFn:()=>r.client.getDynamicField(a)});return BigNumber(Pr.parse(s.bcs)).shiftedBy(-9).toNumber()},Tr=async(t,e)=>{let{metadata:{addresses:o}}=t,{rewardPool:r}=o.loyaltyProgram,n=await Ua(t,r),{data:a,success:s}=Or.safeParse(n.json);return s?{pendingReward:e?await Qa(t,{veScaKey:e,tableId:a.userRewardTableId}).catch(()=>0):0,totalPoolReward:a.totalPoolReward,isClaimEnabled:a.isClaimEnabled}:{pendingReward:0,totalPoolReward:0,isClaimEnabled:false}};var He=class extends k{onchain;constructor({onchain:e,...o}){super(o),this.onchain=e;}get context(){return {...this.baseContext,onchain:this.onchain}}getLoyaltyProgramInfos(e){return Tr(this.context,e)}};var kt=t=>t.startsWith("0x")?t:`0x${t}`;var $a=bcs.struct("TypeName",{name:bcs.string()}),za=t=>bcs.struct("VecSet",{contents:bcs.vector(t)}),kr=za($a);var Ya=3,Rr=async(t,e)=>{let{onchain:o,fetchWithCache:r,metadata:n}=t,{addresses:a,parseCoinNameFromType:s}=n,c=50,i={[`${a.pyth.object}::rule::Rule`]:"pyth",[`${a.supra.object}::rule::Rule`]:"supra",[`${a.switchboard.object}::rule::Rule`]:"switchboard"},l=null,d=true,u={};do{let p={parentId:e,cursor:l,limit:c,include:{value:true}},{dynamicFields:y,cursor:f,hasNextPage:b}=await r({queryKey:g.rpc.getDynamicFields({...p,node:o.url}),queryFn:()=>o.client.listDynamicFields(p)});l=f,d=b,y.forEach(m=>{let h=kt(bcs.string().parse(m.name.bcs)),w=s(h),S=kr.parse(m.value.bcs);u[w]||(u[w]=[]),S.contents.forEach(({name:T})=>{let B=i[kt(T)];B&&u[w].push(B);});});}while(d);return u},Ir=async t=>{let{metadata:{addresses:e,whitelist:o}}=t,[r,n]=await Promise.all([Rr(t,e.oracles.primaryPriceUpdatePolicyVecsetId),Rr(t,e.oracles.secondaryPriceUpdatePolicyVecsetId)]);return [...o.lending.values()].reduce((a,s)=>(a[s]={primary:r[s]??[],secondary:n[s]??[]},a),{})},Nr=async t=>{let{addresses:e}=t.metadata,o=`${e.xOracleObject}::price_update_policy::PriceUpdatePolicyRulesKey`,r=bcs.struct("TypeName",{dummy_field:bcs.bool()}).serialize({dummy_field:false}).toBytes(),[n,a]=await Promise.all([re(t,{parentId:e.oracles.primaryPriceUpdatePolicyObject,name:{type:o,bcs:r}}),re(t,{parentId:e.oracles.secondaryPriceUpdatePolicyObject,name:{type:o,bcs:r}})]);return {primary:n,secondary:a}},jr=async(t,e)=>{let{addresses:o,parseCoinType:r,getSwitchboardAggAddress:n}=t.metadata,a=o.oracles.switchboardRegistryTableId,s=[],c=e.map((i,l)=>{let d=n(i);return d||(s.push({idx:l,coinName:i}),null)});if(s.length===0)return c;if(s.length>Ya){let i=new Map;for(let d$1 of s){let u=r(d$1.coinName);if(!u)throw A(t.logger,new d(`Invalid coin name: ${d$1.coinName}`,{context:{coinName:d$1.coinName}}));i.set(u.slice(2),d$1);}let l=await Ha(t,a,i);for(let[d,{idx:u}]of i){let p=l[d];if(!p)throw A(t.logger,new b(`No on-demand aggregator found for 0x${d}`,{context:{coinTypeKey:d}}));c[u]=p;}return c}return await Promise.all(s.map(async({idx:i,coinName:l})=>{let d$1=r(l);if(!d$1)throw A(t.logger,new d(`Invalid coin name: ${l}`,{context:{coinName:l}}));let u=await re(t,{parentId:a,name:W({type:"0x1::type_name::TypeName",value:{name:d$1.slice(2)}})});if(!u)throw A(t.logger,new b(`No on-demand aggregator found for ${d$1}`,{context:{coinType:d$1}}));c[i]=bcs.Address.parse(u.dynamicField.value.bcs);})),c},Ga=t=>{try{return bcs.struct("TypeName",{name:bcs.string()}).parse(t.name.bcs).name}catch{try{return bcs.string().parse(t.name.bcs)}catch{return}}},Ha=async(t,e,o)=>{let{onchain:r,fetchWithCache:n}=t,a={},s=null,c=false;do{let i={parentId:e,cursor:s,limit:50,include:{value:true}},l=await n({queryKey:g.rpc.getDynamicFields({...i,node:r.url}),queryFn:()=>r.client.listDynamicFields(i)});for(let d of l.dynamicFields){let u=Ga(d);if(!u||!o.has(u))continue;let p=d.value?.bcs;p&&(a[u]=bcs.Address.parse(p));}s=l.cursor,c=l.hasNextPage&&Object.keys(a).length<o.size;}while(c);return a};var Je=class extends k{onchain;constructor({onchain:e,...o}){super(o),this.onchain=e;}get context(){return {...this.baseContext,onchain:this.onchain}}getAssetOracles(){return Ir(this.context)}getPriceUpdatePolicies(){return Nr(this.context)}getOnDemandAggObjectIds(e){return jr(this.context,e)}};var vr=t=>({stakeType:normalizeStructTag$1(t.stakeType),maxPoint:Number(t.maxDistributedPoint),distributedPoint:Number(t.distributedPoint),pointPerPeriod:Number(t.distributedPointPerPeriod),period:Number(t.pointDistributionTime),maxStake:Number(t.maxStake),staked:Number(t.stakes),index:Number(t.index),createdAt:Number(t.createdAt),lastUpdate:Number(t.lastUpdate)}),Br=(t={})=>{let{spool:e,spoolReward:o}=t;if(!e||!o)throw new d("spool or spoolReward is undefined");let r=P(e),n=P(o);return {stakeType:r.stake_type,maxDistributedPoint:r.max_distributed_point,distributedPoint:r.distributed_point,distributedPointPerPeriod:r.distributed_point_per_period,pointDistributionTime:r.point_distribution_time,maxStake:r.max_stakes,stakes:r.stakes,index:r.index,createdAt:r.created_at,lastUpdate:r.last_update,...n}},Fr=(t,e,o)=>{let n=BigNumber(t.pointPerPeriod).dividedBy(t.period),a=BigNumber(t.pointPerPeriod).dividedBy(t.period),s=a.gt(0)?BigNumber(t.maxPoint).minus(t.distributedPoint).dividedBy(a):BigNumber(0),c=t.createdAt,i=s.plus(t.lastUpdate).integerValue().toNumber(),l=BigNumber(Math.floor(new Date().getTime()/1e3)-t.lastUpdate).dividedBy(t.period).toFixed(0),d=BigNumber(t.maxPoint).minus(t.distributedPoint),u=BigNumber.minimum(BigNumber(l).multipliedBy(t.pointPerPeriod),d),p=BigNumber(t.index).plus(u.dividedBy(t.staked).isFinite()?BigNumber(1e9).multipliedBy(u).dividedBy(t.staked):0),y=BigNumber(t.distributedPoint).plus(u),f=BigNumber(t.staked),b=f.shiftedBy(-o),m=b.multipliedBy(e);return {distributedPointPerSec:n.toNumber(),accumulatedPoints:u.toNumber(),currentPointIndex:p.toNumber(),currentTotalDistributedPoint:y.toNumber(),startDate:new Date(c*1e3),endDate:new Date(i*1e3),stakedAmount:f.toNumber(),stakedCoin:b.toNumber(),stakedValue:m.toNumber()}},_r=t=>({claimedRewards:Number(t.claimed_rewards),exchangeRateDenominator:Number(t.exchange_rate_denominator),exchangeRateNumerator:Number(t.exchange_rate_numerator),rewards:Number(t.rewards),spoolId:String(t.spool_id)}),Dr=(t,e,o,r,n)=>{let a=BigNumber(o.distributedPointPerSec).multipliedBy(e.exchangeRateNumerator).dividedBy(e.exchangeRateDenominator),s=BigNumber(t.maxPoint).multipliedBy(e.exchangeRateNumerator).dividedBy(e.exchangeRateDenominator),c=s.shiftedBy(-n),i=c.multipliedBy(r),l=BigNumber(e.rewards),d=l.shiftedBy(-n),u=d.multipliedBy(r),p=BigNumber(e.claimedRewards),y=p.shiftedBy(-n),f=y.multipliedBy(r),b=BigNumber(a).shiftedBy(-n).multipliedBy(31536e3).multipliedBy(r),m=b.dividedBy(o.stakedValue).isFinite()?b.dividedBy(o.stakedValue).toNumber():1/0;return (t.maxPoint<=t.distributedPoint||t.pointPerPeriod===0)&&(m=1/0),{rewardApr:m,totalRewardAmount:s.toNumber(),totalRewardCoin:c.toNumber(),totalRewardValue:i.toNumber(),remaindRewardAmount:l.toNumber(),remaindRewardCoin:d.toNumber(),remaindRewardValue:u.toNumber(),claimedRewardAmount:p.toNumber(),claimedRewardCoin:y.toNumber(),claimedRewardValue:f.toNumber(),rewardPerSec:a.toNumber()}},Mr=t=>({...t,stakeType:Za(t.stakeType)}),Za=t=>{try{return H(t)}catch(e){throw new d("Failed to map Move type at spool.stakeType",{cause:e,context:{path:"spool.stakeType"}})}};var Rt=async(t,{coinPrices:e,stakeCoinNames:o}={})=>{let{indexer:r,fetchWithCache:n,metadata:a}=t;e??={};let{spools:s}=await n({queryKey:g.api.getSpools(),queryFn:()=>r.get("/api/spools/migrate")}),c=o?new Set(o):a.whitelist.spool,i=a.getSpoolRewardCoinName();return s.reduce((l,d)=>{if(!c.has(d.marketCoinName))return l;let u=a.parseCoinName(d.marketCoinName);return l[d.marketCoinName]={...d,coinPrice:e[u]??d.coinPrice,marketCoinPrice:e[d.marketCoinName]??d.marketCoinPrice,rewardCoinPrice:e[i]??d.rewardCoinPrice},l},{})},Lr=async(t,{coinPrices:e,stakeCoinName:o})=>(await Rt(t,{coinPrices:e,stakeCoinNames:[o]}))[o]??null,Er=async(t,{coinPrices:e={},stakeCoinNames:o}={})=>{let{metadata:r}=t,n=o??[...r.whitelist.spool.values()],a=n.map(i=>r.parseCoinName(i)),s=await qr(t,a);return (await Promise.allSettled(n.map((i,l)=>It(t,{coinPrices:e,stakeCoinName:i,requiredObjects:s[a[l]]})))).reduce((i,l,d)=>(l.status==="fulfilled"&&l.value&&(i[n[d]]=l.value),i),{})},It=async(t,{coinPrices:e,stakeCoinName:o,requiredObjects:r})=>{let{metadata:n}=t,a=n.parseCoinName(o),s=n.getSpoolRewardCoinName(),c=Mr(Br(r??(await qr(t,[a]))[a])),i=vr(c),l=e[o]??0,d=Fr(i,l,n.getCoinDecimal(o)),u=_r(c),p=e[s]??0;return {marketCoinName:o,symbol:n.parseSymbol(o),coinType:n.parseCoinType(a),marketCoinType:n.parseMarketCoinType(a),rewardCoinType:n.isMarketCoin(s)?n.parseMarketCoinType(s):n.parseCoinType(s),sCoinType:n.parseSCoinType(o)??"",coinDecimal:n.getCoinDecimal(a),rewardCoinDecimal:n.getCoinDecimal(s),coinPrice:e[a]??0,marketCoinPrice:l,rewardCoinPrice:p,maxPoint:i.maxPoint,distributedPoint:i.distributedPoint,maxStake:i.maxStake,...d,exchangeRateNumerator:u.exchangeRateNumerator,exchangeRateDenominator:u.exchangeRateDenominator,...Dr(i,u,d,p,n.getCoinDecimal(s))}},Vr=async(t,{address:e,stakeCoinNames:o})=>{let{metadata:r}=t,n=`${r.addresses.spoolObjectId}::spool_account::SpoolAccount`,a=await es(t,{address:e,stakeAccountType:n}),s=(o??[...r.whitelist.spool.values()]).reduce((l,d)=>(l[d]=[],l),{}),c=Object.keys(s).reduce((l,d)=>{let u=r.parseCoinName(d),p=r.parseMarketCoinType(u);return l[d]=`${r.addresses.spoolObjectId}::spool_account::SpoolAccount<${p}>`,l},{}),i=Object.entries(c).reduce((l,[d,u])=>(l[u]=d,l),{});for(let l of a){let{objectId:d,type:u,json:p}=l;if(!d||!u||!p)continue;let y=P(l),f=normalizeStructTag$1(u),b=i[f],m=s[b];m&&m.push({id:d,type:f,stakePoolId:String(y.spool_id),stakeType:normalizeStructTag$1(String(y.stake_type)),staked:Number(y.stakes),index:Number(y.index),points:Number(y.points),totalPoints:Number(y.total_points)});}return s},Nt=async(t,{stakeCoinNames:e})=>(await Promise.allSettled(e.map(r=>ts(t,{stakeCoinName:r})))).reduce((r,n,a)=>(n.status==="fulfilled"&&(r[e[a]]=n.value),r),{}),es=async(t,{address:e,stakeAccountType:o})=>{let{onchain:r,fetchWithCache:n}=t,a=false,s=null,c=[];do{let i={owner:e,type:o,include:{json:true},cursor:s,limit:50},l=await n({queryKey:g.rpc.getOwnedObjects(i),queryFn:()=>r.client.listOwnedObjects(i)});l.objects&&c.push(...l.objects),l.hasNextPage&&l.cursor?(a=true,s=l.cursor):a=false;}while(a);return c},qr=async({onchain:t,metadata:e,fetchWithCache:o},r)=>{let n=["spool","spoolReward","sCoinTreasury"],a=r.flatMap(l=>{let d=e.poolAddresses[l];return n.flatMap(u=>{let p=d?.[u];return p?[p]:[]})}),s=[],c=pe([...new Set(a)],50);for(let l of c){let d=await o({queryKey:g.rpc.getObjects({objectIds:l,node:t.url}),queryFn:()=>t.client.getObjects({objectIds:l,include:{json:true}})});s.push(...d.objects.filter(u=>!(u instanceof Error)));}let i=s.reduce((l,d)=>(l[d.objectId]=d,l),{});return r.reduce((l,d)=>{let u=e.poolAddresses[d];return l[d]={spool:i[u?.spool??""],spoolReward:i[u?.spoolReward??""]},l},{})},ts=async(t,{stakeCoinName:e})=>{let{metadata:o,onchain:r,fetchWithCache:n}=t,a=o.addresses.spools[e]?.rewardPoolId;if(!a)return;let s={json:true},i=(await n({queryKey:g.rpc.getObject({objectId:a,node:r.url,include:s}),queryFn:()=>r.getObject({objectId:a,include:s})})).object;if(!i?.json)return;let l=P(i);return {id:i.objectId,type:normalizeStructTag$1(i.type??""),stakePoolId:String(l.spool_id),ratioNumerator:Number(l.exchange_rate_numerator),ratioDenominator:Number(l.exchange_rate_denominator),rewards:Number(l.rewards),claimedRewards:Number(l.claimed_rewards)}},Kr=async(t,e)=>{let{onchain:o,fetchWithCache:r,metadata:n}=t,a=n.addresses.spools[e]?.id;if(!a)return;let s={json:true},i=(await r({queryKey:g.rpc.getObject({objectId:a,node:o.url,include:s}),queryFn:()=>o.getObject({objectId:a,include:s})})).object;if(!i?.json)return;let l=P(i);return {id:i.objectId,type:normalizeStructTag$1(i.type??""),maxPoint:Number(l.max_distributed_point),distributedPoint:Number(l.distributed_point),pointPerPeriod:Number(l.distributed_point_per_period),period:Number(l.point_distribution_time),maxStake:Number(l.max_stakes),stakeType:normalizeStructTag$1(String(l.stake_type)),totalStaked:Number(l.stakes),index:Number(l.index),createdAt:Number(l.created_at),lastUpdate:Number(l.last_update)}};var Ze=class extends k{indexer;onchain;constructor({indexer:e,onchain:o,...r}){super(r),this.indexer=e,this.onchain=o;}get context(){return {...this.baseContext,indexer:this.indexer,onchain:this.onchain}}getSpools({stakeCoinNames:e,coinPrices:o,source:r="api-first"}){return E({source:r,label:"SpoolRepository.getSpools",logger:this.logger,api:()=>Rt(this.context,{stakeCoinNames:e,coinPrices:o}),onchain:()=>Er(this.context,{stakeCoinNames:e,coinPrices:o})})}getSpool({stakeCoinName:e,coinPrices:o,source:r="api-first"}){return E({source:r,label:"SpoolRepository.getSpool",logger:this.logger,api:()=>Lr(this.context,{stakeCoinName:e,coinPrices:o}),onchain:()=>It(this.context,{stakeCoinName:e,coinPrices:o})})}getStakeAccounts(e){return Vr(this.context,e)}async getStakeAccountsByPool(e,o){return (await this.getStakeAccounts({address:e,stakeCoinNames:[o]}))[o]||[]}getSpoolRewardPools(e){return Nt(this.context,{stakeCoinNames:e})}getSpoolRewardPool(e){return Nt(this.context,{stakeCoinNames:[e]}).then(o=>o[e])}getStakePool(e){return Kr(this.context,e)}};var Wr=z.object({reserve_ve_sca_key:z.nullable(z.object({id:z.string()})),enable_claim:z.boolean()}).transform(t=>({reserveVeScaKey:t.reserve_ve_sca_key?.id,isClaimEnabled:t.enable_claim}));var Ur=bcs.u64();var ns=async(t,e)=>{let{onchain:o,metadata:{addresses:r},fetchWithCache:n}=t,{veScaRewardTableId:a}=r.veScaLoyaltyProgram,s={parentId:a,name:W({type:"0x2::object::ID",value:e})},{dynamicField:{value:c}}=await n({queryKey:g.rpc.getDynamicFieldObject({...s,node:o.url}),queryFn:()=>o.client.getDynamicField(s)});return BigNumber(Ur.parse(c.bcs)).shiftedBy(-9).toNumber()},as=async(t,e)=>{let{onchain:o,fetchWithCache:r}=t,n={objectId:e,include:{json:true}},{object:a}=await r({queryKey:g.rpc.getObject({...n,node:o.url}),queryFn:()=>o.getObject(n)});if(!a)throw A(t.logger,new b("Failed to fetch reward pool object",{context:{rewardPoolId:e}}));return a},Qr=async(t,e)=>{let{metadata:{addresses:o}}=t,{veScaRewardPool:r}=o.veScaLoyaltyProgram,n=await as(t,r),{data:a,success:s}=Wr.safeParse(n.json);if(!s||!a.reserveVeScaKey)return {isClaimEnabled:false,totalPoolReward:0,pendingVeScaReward:0,pendingScaReward:0};let c=await Ae(t,a.reserveVeScaKey),i=e?await ns(t,e).catch(()=>0):0,l=Math.max((c?.unlockAt??0)-Date.now(),0);return {pendingScaReward:i,pendingVeScaReward:i*(Math.floor(l/1e3)/126144e3),totalPoolReward:c?.currentVeScaBalance??0,isClaimEnabled:a.isClaimEnabled}};var et=class extends k{onchain;constructor({onchain:e,...o}){super(o),this.onchain=e;}get context(){return {...this.baseContext,onchain:this.onchain}}getVeScaLoyaltyProgramInfos(e){return Qr(this.context,e)}};var $r=bcs.Address;var zr=async(t,e)=>{let{metadata:{addresses:o}}=t,r={parentId:o.referral.bindingTableId,name:W({type:"address",value:e})},n=await re(t,r);return n?$r.parse(n.dynamicField.value.bcs):null};var tt=class extends k{onchain;constructor({onchain:e,...o}){super(o),this.onchain=e;}get context(){return {...this.baseContext,onchain:this.onchain}}getVeScaKeyIdFromReferralBindings(e){return zr(this.context,e)}};var te=z.object({id:z.string(),keys:z.nullable(z.object({contents:z.array(z.string())})),table:z.object({id:z.string(),size:z.string()}),with_keys:z.boolean()}),Yr=z.object({id:z.string(),size:z.string()}),Gr=z.object({asset_active_states:z.object({base:te,collateral:te}),borrow_dynamics:te,collateral_stats:te,id:z.string(),interest_models:te,limiters:te,reward_factors:te,risk_models:te,vault:z.object({balance_sheets:te,flash_loan_fees:te,id:z.string(),market_coin_supplies:Yr,underlying_balances:Yr})});var he="0x1::type_name::TypeName",Hr="0xc38f849e81cfe46d4e4320f508ea7dda42934a329d5a6571bb4c3cb6ea63f5da::market_dynamic_keys::BorrowFeeKey",Xr="0x6e641f0dca8aedab3101d047e96439178f16301bf0b57fe8745086ff1195eb3e::market_dynamic_keys::SupplyLimitKey",Jr="0xe7dbb371a9595631f7964b7ece42255ad0e738cc85fe6da26c7221b220f01af6::market_dynamic_keys::BorrowLimitKey",Zr="0xe7dbb371a9595631f7964b7ece42255ad0e738cc85fe6da26c7221b220f01af6::market_dynamic_keys::IsolatedAssetKey";var en=async(t,{poolNames:e=[]})=>{let o=new Set(e),{fetchWithCache:r,api:n}=t,a=await r({queryKey:g.api.getPoolAddresses(),queryFn:()=>n.get("/pool/addresses")});return o.size===0?a:Object.entries(a).reduce((s,[c,i])=>(o.has(c)&&(s[c]=i),s),{})},is=t=>{try{return t.name.type.includes("::type_name::TypeName")?bcs.struct("TypeName",{name:bcs.string()}).parse(t.name.bcs).name:bcs.string().parse(t.name.bcs)}catch{return}},ne=async(t,{parentId:e,type:o,coinTypeKeys:r})=>{let{onchain:n,fetchWithCache:a}=t,s={},c=null,i=false;do{let l={parentId:e,cursor:c,limit:50},d=await a({queryKey:g.rpc.getDynamicFields({...l,node:n.url}),queryFn:()=>n.client.listDynamicFields(l)});for(let u of d.dynamicFields){if(u.name.type!==o)continue;let p=is(u);p&&r.has(p)&&(s[p]=u.fieldId);}c=d.cursor,i=d.hasNextPage;}while(i);return s},cs=async(t,e)=>{let{onchain:o,fetchWithCache:r}=t,n=[...new Set(Object.values(e).flatMap(s=>Object.values(s)))],a={};for(let s of pe(n,50)){let{objects:c}=await r({queryKey:g.rpc.getObjects({objectIds:s,node:o.url}),queryFn:()=>o.client.getObjects({objectIds:s,include:{json:true}})});for(let i of c)i instanceof Error||(a[i.objectId]=i);}return Object.entries(e).reduce((s,[c,i])=>(s[c]=Object.entries(i).reduce((l,[d,u])=>{let p=a[u];return l[d]=p?{objectId:p.objectId,json:p.json}:void 0,l},{}),s),{})},ls=async(t,e,o)=>{let{onchain:r,fetchWithCache:n}=t,a={},s=null,c=false;do{let i={parentId:o,limit:50,cursor:s},l=await n({queryKey:g.rpc.getDynamicFields({...i,node:r.url}),queryFn:()=>r.client.listDynamicFields(i)});if(!l)break;for(let d of l.dynamicFields){let p=`0x${bcs.struct("TypeName",{name:bcs.string()}).parse(d.name.bcs).name}`;e.has(p)&&(a[p]=d.fieldId);}s=l.cursor,c=l.hasNextPage;}while(c);return a},tn=async(t,{poolNames:e=[]})=>{let{onchain:o,fetchWithCache:r,metadata:{addresses:n}}=t,{core:a,spool:s,scoin:c}=n,{market:i,coins:l}=a,d$1={objectId:i,include:{json:true}},{object:u}=await r({queryKey:g.rpc.getObject({...d$1,node:o.url}),queryFn:()=>o.getObject(d$1)}),p=Gr.safeParse(u?.json);if(!p.success)throw A(t.logger,new d("Failed to parse market object from on-chain data",{context:{market:i},cause:p.error}));let y=p.data,f=y.vault.balance_sheets.table.id,b$1=y.collateral_stats.table.id,m=y.borrow_dynamics.table.id,h=y.interest_models.table.id,w=y.risk_models.table.id,S=y.vault.flash_loan_fees.table.id,T=new Set(e),B=Object.entries(l).filter(K=>{let[z,ye]=K;return ye?.coinType?T.size===0||T.has(z):false});if(B.length===0)throw A(t.logger,new b("No coins to resolve pool addresses for (empty config or filter matched nothing)",{context:{poolNames:e}}));let N=await ls(t,new Set(B.map(([,K])=>K.coinType)),S),R=new Set(B.map(([,K])=>K.coinType.slice(2))),[x,v,j,_,q,Q,ae,Z,oe]=await Promise.all([ne(t,{parentId:f,type:he,coinTypeKeys:R}),ne(t,{parentId:b$1,type:he,coinTypeKeys:R}),ne(t,{parentId:m,type:he,coinTypeKeys:R}),ne(t,{parentId:h,type:he,coinTypeKeys:R}),ne(t,{parentId:w,type:he,coinTypeKeys:R}),ne(t,{parentId:i,type:Hr,coinTypeKeys:R}),ne(t,{parentId:i,type:Xr,coinTypeKeys:R}),ne(t,{parentId:i,type:Jr,coinTypeKeys:R}),ne(t,{parentId:i,type:Zr,coinTypeKeys:R})]),M=await cs(t,{lendingPool:x,collateralPool:v,borrowDynamic:j,interestModel:_,riskModel:q,borrowFee:Q,supplyLimit:ae,borrowLimit:Z,isolatedAsset:oe}),ge={};for(let[K,z]of B){let{coinType:ye}=z,ee=ye.slice(2),st=M.lendingPool[ee],Tn=M.collateralPool[ee],kn=M.borrowDynamic[ee],Rn=M.interestModel[ee],In=M.riskModel[ee],Nn=M.borrowFee[ee],jn=M.supplyLimit[ee],vn=M.borrowLimit[ee],Ft=M.isolatedAsset[ee]?.json,Ie=`s${K}`,_t=s.pools[Ie],Ne=c.coins[Ie],Dt=z.oracle?.pyth;ge[K]={coinName:K,symbol:z.symbol,coinType:ye,coinMetadataId:z.metaData,decimals:z.decimals,lendingPoolAddress:st?.objectId??"",collateralPoolAddress:Tn?.objectId??"",borrowDynamic:kn?.objectId??"",interestModel:Rn?.objectId??"",riskModel:In?.objectId,borrowFeeKey:Nn?.objectId??"",supplyLimitKey:jn?.objectId??"",borrowLimitKey:vn?.objectId??"",isolatedAssetKey:Ft?.id??"",isIsolated:Ft?.value??false,spool:_t?.id??"",spoolReward:_t?.rewardPoolId??"",spoolName:Ie,sCoinName:Ie,sCoinType:Ne?.coinType??"",sCoinTreasury:Ne?.treasury??"",sCoinMetadataId:Ne?.metaData??"",sCoinSymbol:Ne?.symbol??"",pythFeed:Dt?.feed??"",pythFeedObjectId:Dt?.feedObject??"",flashloanFeeObject:N[ye]??""};}return ge};var ot=class extends k{api;onchain;constructor({api:e,onchain:o,...r}){super(r),this.api=e,this.onchain=o;}get context(){return {...this.baseContext,api:this.api,onchain:this.onchain}}getPoolAddresses({poolNames:e,source:o="api"}){return E({source:o,label:"PoolAddressesRepository.getPoolAddresses",logger:this.logger,api:()=>en(this.context,{poolNames:e}),onchain:()=>tn(this.context,{poolNames:e})})}};var on="https://hermes.pyth.network";var rn=z.object({id:z.string(),price_info:z.object({arrival_time:z.string(),attestation_time:z.string(),price_feed:z.object({ema_price:z.object({conf:z.string(),expo:z.object({magnitude:z.string(),negative:z.boolean()}),price:z.object({magnitude:z.string(),negative:z.boolean()}),timestamp:z.string()}),price:z.object({conf:z.string(),expo:z.object({magnitude:z.string(),negative:z.boolean()}),price:z.object({magnitude:z.string(),negative:z.boolean()}),timestamp:z.string()}),price_identifier:z.object({bytes:z.string()})})})});var an=({price:t,expo:e})=>{let o=e.negative?-1:1,r=t.negative?-1:1;return BigNumber(t.magnitude).multipliedBy(BigNumber(10).shiftedBy(o*+e.magnitude)).multipliedBy(r)};var sn=async(t,e)=>{let{fetchWithCache:o,metadata:{addresses:r},pythPriceServiceConfig:{endpoint:n,config:a}}=t,s=new Map(e.map(d=>[d,r.coins[d]?.oracle?.pyth?.feed])),c$1=Array.from(new Set(s.values())).filter(d=>!!d),l=await new SuiPriceServiceConnection(n,a).getLatestPriceFeeds(c$1);if(!l)throw A(t.logger,new c("Failed to fetch price feeds from Pyth API",{context:{endpoint:n,priceFeedIds:c$1}}));return await o({queryKey:g.oracle.getPythLatestPriceFeeds(n,c$1),queryFn:()=>{let d=new Map;for(let p of l)d.set(p.id,p.getPriceUnchecked().getPriceAsNumberUnchecked());let u={};for(let[p,y]of s)u[p]=(y!==void 0?d.get(y):void 0)??0;return u}})},cn=async(t,e)=>{let{onchain:o,fetchWithCache:r}=t,n={objectId:e,include:{json:true}},{object:a}=await r({queryKey:g.rpc.getObject({...n,node:o.url}),queryFn:()=>o.getObject(n)});return a??null},ln=async(t,e)=>{if(e.length===0)return [];let{onchain:o,fetchWithCache:r}=t,n={objectIds:e,include:{json:true}},{objects:a}=await r({queryKey:g.rpc.getObjects({...n,node:o.url}),queryFn:()=>o.client.getObjects(n)});return a.filter(s=>!(s instanceof Error))},dn=async(t,e)=>{let{onchain:o,fetchWithCache:r,metadata:{addresses:n}}=t,a=new Map(e.map(l=>[l,n.coins[l]?.oracle?.pyth?.feedObject])),s=Array.from(new Set(a.values())).filter(l=>!!l),c=new Map;for(let l of pe(s,50)){let d$1={objectIds:l,include:{json:true}},{objects:u}=await r({queryKey:g.rpc.getObjects({...d$1,node:o.url}),queryFn:()=>o.client.getObjects(d$1)});for(let p of u){if(p instanceof Error)throw A(t.logger,new b("Failed to fetch price feed object on chain",{cause:p}));let{data:y,success:f}=rn.safeParse(p.json);if(!f)throw A(t.logger,new d("Failed to parse price feed object",{context:{objectId:p.objectId,json:JSON.stringify(p.json)}}));let{price_feed:b$1}=y.price_info;c.set(p.objectId,an(b$1.price).toNumber());}}let i={};for(let[l,d]of a)i[l]=(d!==void 0?c.get(d):void 0)??0;return i},un=async(t,{coinNames:e})=>{let{indexer:o,fetchWithCache:r}=t,n="/api/market/migrate";return (await r({queryKey:g.api.getMarkets(),queryFn:()=>o.get(n)})).pools.reduce((s,c)=>(e.includes(c.coinName)&&(s[c.coinName]=c.coinPrice),s),{})};var rt=class extends k{config;indexer;onchain;constructor({pythPriceServiceConfig:e,indexer:o,onchain:r,...n}){super(n),this.config=e??{endpoint:on,config:{timeout:4e3,httpRetries:1}},this.indexer=o,this.onchain=r;}get context(){return {...this.baseContext,onchain:this.onchain,indexer:this.indexer,pythPriceServiceConfig:this.config}}getPricesFromPyth({coinNames:e,source:o="api-first"}){return E({source:o,label:"PriceRepository.getPriceFromPyth",logger:this.logger,api:()=>sn(this.context,e),onchain:()=>dn(this.context,e)})}getPythFeedObject(e){return cn(this.context,e)}getPythFeedObjects(e){return ln(this.context,e)}getPricesFromIndexer(e){return un(this.context,e)}};var pn=t=>{let{utils:e,indexerUrl:o,queryClientConfig:r=Be}=t,n=e.onchain,a=Zt(o),s=t.queryClient??new QueryClient(r),c=e.logger,i={onchain:n,queryClient:s,logger:c},l,d,u,p,y,f,b,m,h,w,S,T,B,N;return {get market(){return l??=new Ke({...i,indexer:a,addresses:so(e),metadata:ao(e)})},get coinBalance(){return d??=new We({...i,metadata:io(e)})},get flashloan(){return u??=new Ue({...i,metadata:co(e)})},get obligation(){return p??=new Qe({...i,metadata:lo(e)})},get borrowIncentive(){return y??=new $e({...i,metadata:uo(e)})},get isolatedAssets(){return f??=new ze({...i,metadata:yo(e)})},get veSca(){return b??=new Ge({...i,metadata:fo(e)})},get loyaltyProgram(){return m??=new He({...i,metadata:go(e)})},get xOracle(){return h??=new Je({...i,metadata:wo(e)})},get spool(){return w??=new Ze({...i,indexer:a,metadata:Co(e)})},get veScaLoyaltyProgram(){return S??=new et({...i,metadata:ho(e)})},get referral(){return T??=new tt({...i,metadata:po(e)})},get price(){return B??=new rt({...i,indexer:a,metadata:mo(e)})},get poolAddresses(){return N??=new ot({...i,api:eo(),metadata:bo(e)})}}};var mn=(t={})=>t.source?t.source:t.useOnChainQuery!==void 0?t.useOnChainQuery?"onchain":"api-first":t.indexer!==void 0?t.indexer?"api-first":"onchain":"api-first",ps={rpc:"onchain",indexer:"api","indexer-first":"api-first"},be=t=>t?.source?ps[t.source]:t?.indexer?"api-first":"onchain";var bn=class{constructor(e){this.ctx=e;}async depositCollateral(e,o,r=true,n,a,s){let c=this.ctx.builder.createTxBlock(),i=a??this.ctx.walletAddress;c.setSender(i);let l=n??(await this.ctx.query.getObligations(i))[0]?.id;if(l)await c.depositCollateralQuick(o,e,l,s);else {let[d,u,p]=c.openObligation();await c.depositCollateralQuick(o,e,d,s),c.returnObligation(d,p),c.transferObjects([u],i);}return r?await this.ctx.executor.signAndSendTxn(c):c.txBlock}async withdrawCollateral(e,o,r=true,n,a,s,c){let i=this.ctx.builder.createTxBlock(),l=s??this.ctx.walletAddress;i.setSender(l);let d=await i.takeCollateralQuick(o,e,n,a,{isSponsoredTx:c});return i.transferObjects([d],l),r?await this.ctx.executor.signAndSendTxn(i):i.txBlock}};var yn=class{constructor(e){this.ctx=e;}async supply(e,o,r=true,n){let a=this.ctx.builder.createTxBlock(),s=n??this.ctx.walletAddress;a.setSender(s);let c=await a.supplyQuick(o,e);return a.transferObjects([c],s),r?await this.ctx.executor.signAndSendTxn(a):a.txBlock}async withdraw(e,o,r=true,n){let a=this.ctx.builder.createTxBlock(),s=n??this.ctx.walletAddress;a.setSender(s);let c=await a.withdrawQuick(o,e);return a.transferObjects([c],s),r?await this.ctx.executor.signAndSendTxn(a):a.txBlock}async flashLoan(e,o,r,n=true,a){let s=this.ctx.builder.createTxBlock(),c=a??this.ctx.walletAddress;s.setSender(c);let[i,l]=s.borrowFlashLoan(o,e);return s.repayFlashLoan(await r(s,i),l,e),n?await this.ctx.executor.signAndSendTxn(s):s.txBlock}};var fn=class{constructor(e){this.ctx=e;}async openObligation(e=true){let o=this.ctx.builder.createTxBlock();return o.openObligationEntry(),e?await this.ctx.executor.signAndSendTxn(o):o.txBlock}async borrow(e,o,r=true,n,a,s,c){let i=this.ctx.builder.createTxBlock(),l=s??this.ctx.walletAddress;i.setSender(l);let d=this.ctx.constants.whitelist.lending.has(e);r&&d&&await i.unstakeObligationQuick(n,a);let u=await i.borrowQuick(o,e,n,a,{isSponsoredTx:c});return i.transferObjects([u],l),r&&d&&await i.stakeObligationWithVeScaQuick(n,a),r?await this.ctx.executor.signAndSendTxn(i):i.txBlock}async repay(e,o,r=true,n,a,s,c){let i=this.ctx.builder.createTxBlock(),l=s??this.ctx.walletAddress;i.setSender(l);let d=this.ctx.constants.whitelist.lending.has(e);return r&&d&&await i.unstakeObligationQuick(n,a),await i.repayQuick(o,e,n,c),r&&d&&await i.stakeObligationWithVeScaQuick(n,a),r?await this.ctx.executor.signAndSendTxn(i):i.txBlock}async supplyAndStake(e,o,r=true,n,a){let s=this.ctx.builder.createTxBlock(),c=a??this.ctx.walletAddress;s.setSender(c);let i=this.ctx.utils.parseMarketCoinName(e),l=await this.ctx.query.getStakeAccounts(i),d=n??l[0]?.id,u=await s.supplyQuick(o,e,false);if(d)await s.stakeQuick(u,i,d);else {let p=s.createStakeAccount(i);await s.stakeQuick(u,i,p),s.transferObjects([p],c);}return r?await this.ctx.executor.signAndSendTxn(s):s.txBlock}async stakeObligation(e,o,r=true,n){let a=this.ctx.builder.createTxBlock();return a.setSender(n??this.ctx.walletAddress),await a.stakeObligationWithVeScaQuick(e,o),r?await this.ctx.executor.signAndSendTxn(a):a.txBlock}async unstakeObligation(e,o,r=true,n){let a=this.ctx.builder.createTxBlock();return a.setSender(n??this.ctx.walletAddress),await a.unstakeObligationQuick(e,o),r?await this.ctx.executor.signAndSendTxn(a):a.txBlock}async claimBorrowIncentive(e,o,r=true,n){let a=this.ctx.builder.createTxBlock(),s=n??this.ctx.walletAddress;a.setSender(s);let c={},i=await this.ctx.query.getObligationAccount(e);if(!i)throw new f("Obligation not found",{context:{obligationId:e}});let l=Object.values(i.borrowIncentives).filter(d=>!!d).flatMap(({rewards:d})=>d.filter(({availableClaimAmount:u})=>u>0)).flatMap(({coinName:d})=>d);for(let d of l){let u=await a.claimBorrowIncentiveQuick(d,e,o);c[d]?c[d].push(u):c[d]=[u];}return a.transferObjects(Object.values(c).map(d=>{let u=d[0];return d.length>1&&a.mergeCoins(u,d.slice(1)),u}),s),r?await this.ctx.executor.signAndSendTxn(a):a.txBlock}};var Pm=t=>`${t.MoveCall.package}::${t.MoveCall.module}::${t.MoveCall.function}`,gn=t=>{let e=t.getData().sender;if(!e)throw new Error("Sender is required");return e},jt=t=>{if(t===void 0)throw new Error("veSca not found")},vt=t=>{if(t<=new Date().getTime())throw new Error("veSca is expired, use renewExpiredVeScaQuick instead")},ms=(t,e,o)=>{jt(o),vt(o);let r=Math.floor(o/1e3);if(t<1)throw new Error("Minimum lock period is 1 day");let n=Math.floor((e-r)/86400);if(t>n)throw new Error(`Cannot extend lock period by ${t} days, maximum lock period is ~4 years (${1460} days), remaining lock period is ${1460-n}`)},Tm=(t,e,o,r)=>{let n=r?Math.floor(r/1e3):void 0,a=!n,s=!a&&n*1e3<=new Date().getTime();if(a||s)if(t!==void 0&&e!==void 0){if(e<=0)throw new Error("Lock period must be greater than 0");if(typeof t=="number"&&t<1e10)throw new Error(`Minimum lock amount for ${s?"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 ${s?"renewing expired veSca":"initial lock"}`);else {if(jt(r),vt(r),typeof t=="number"&&t<1e9)throw new Error("Minimum top up amount is 1 SCA");o&&e&&ms(e,o,r);}},km=(t,e)=>{if(jt(e),vt(e),t<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")},Rm=(t,e,o)=>{if(!o||o>new Date().getTime())throw new Error("Renew method can only be used for expired veSca");if(t<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 hn=class{constructor(e){this.ctx=e;}async createStakeAccount(e,o=true,r){let n=this.ctx.builder.createTxBlock(),a=r??this.ctx.walletAddress;n.setSender(a);let s=n.createStakeAccount(e);return n.transferObjects([s],a),o?await this.ctx.executor.signAndSendTxn(n):n.txBlock}async stake(e,o,r=true,n,a){let s=this.ctx.builder.createTxBlock(),c=a??this.ctx.walletAddress;s.setSender(c);let i=await this.ctx.query.getStakeAccounts(e),l=n??i[0]?.id;if(l)await s.stakeQuick(o,e,l);else {let d=s.createStakeAccount(e);await s.stakeQuick(o,e,d),s.transferObjects([d],c);}return r?await this.ctx.executor.signAndSendTxn(s):s.txBlock}async unstake(e,o,r=true,n,a){let s=this.ctx.builder.createTxBlock(),c=a??this.ctx.walletAddress;s.setSender(c);let i=await s.unstakeQuick(o,e,n);if(i){let l=this.ctx.utils.parseSCoinType(e);if(!l)throw new f(`Invalid sCoin type: ${e}`,{context:{stakeMarketCoinName:e}});await this.ctx.utils.mergeSimilarCoins(s,i,l,c);}return s.transferObjects([i],c),r?await this.ctx.executor.signAndSendTxn(s):s.txBlock}async unstakeAndWithdraw(e,o,r=true,n,a){let s=this.ctx.builder.createTxBlock(),c=a??this.ctx.walletAddress;s.setSender(c);let i=await s.unstakeQuick(o,e,n,false),l=this.ctx.utils.parseCoinName(e);if(i){let d=s.withdraw(i,l);await this.ctx.utils.mergeSimilarCoins(s,d,this.ctx.utils.parseCoinType(l),gn(s)),s.transferObjects([d],c);}else throw new f(`No stake found for ${e}`,{context:{stakeMarketCoinName:e}});return r?await this.ctx.executor.signAndSendTxn(s):s.txBlock}async claim(e,o=true,r,n){let a=this.ctx.builder.createTxBlock(),s=n??this.ctx.walletAddress;a.setSender(s);let c=await a.claimQuick(e,r);return a.transferObjects(c,s),o?await this.ctx.executor.signAndSendTxn(a):a.txBlock}};var Cn=class{constructor(e){this.ctx=e;}async lockSca(e,o=true,r){let n=this.ctx.builder.createTxBlock();return n.setSender(r??this.ctx.walletAddress),await n.lockScaQuick(e),o?await this.ctx.executor.signAndSendTxn(n):n.txBlock}async extendLockPeriod(e,o=true,r){let n=this.ctx.builder.createTxBlock();return n.setSender(r??this.ctx.walletAddress),await n.extendLockPeriodQuick(e),o?await this.ctx.executor.signAndSendTxn(n):n.txBlock}async extendLockAmount(e,o=true,r){let n=this.ctx.builder.createTxBlock();return n.setSender(r??this.ctx.walletAddress),await n.extendLockAmountQuick(e),o?await this.ctx.executor.signAndSendTxn(n):n.txBlock}async claimAllUnlockedSca(e=true,o){let r=o??this.ctx.walletAddress,n=(await this.ctx.query.getVeScas({walletAddress:r})??[]).map(({keyId:c})=>c);if(n.length===0)throw new f("No veSCA found in the wallet",{context:{walletAddress:r}});let a=this.ctx.builder.createTxBlock();a.setSender(r);let s=[];if(await Promise.all(n.map(async c=>{try{let i=await a.redeemScaQuick({veScaKey:c,transferSca:!1});if(!i)return;s.push(i);}catch(i){this.ctx.utils.logger.warn("redeemScaQuick failed for veScaKey; skipping",{veScaKey:c,message:i?.message});}})),s.length===0)throw new f("No unlocked SCA found in the veSCA accounts",{context:{walletAddress:r,veScaKeyCount:n.length}});return s.length>1&&a.mergeCoins(s[0],s.slice(1)),await this.ctx.utils.mergeSimilarCoins(a,s[0],"sca",r),e?await this.ctx.executor.signAndSendTxn(a):{tx:a.txBlock,scaCoin:s[0]}}};var wn=class{constructor(e){this.ctx=e;}async bindToReferral(e,o=true,r){let n=this.ctx.builder.createTxBlock();return n.setSender(r??this.ctx.walletAddress),n.bindToReferral(e),o?await this.ctx.executor.signAndSendTxn(n):n.txBlock}async claimReferralRevenue(e,o,r=true,n){let a=this.ctx.builder.createTxBlock();a.setSender(n??this.ctx.walletAddress);let s=o??[...this.ctx.constants.whitelist.lending];return await a.claimReferralRevenueQuick(e,s),r?await this.ctx.executor.signAndSendTxn(a):a.txBlock}async burnReferralTicket(e,o,r=true,n){let a=this.ctx.builder.createTxBlock();return a.setSender(n??this.ctx.walletAddress),a.burnReferralTicket(e,o),r?await this.ctx.executor.signAndSendTxn(a):a.txBlock}};var ke=(...t)=>BigNumber(t.reduce((e,o)=>new BigNumber(o).lt(e)?o:e));var nt=(t,e,o)=>{let r=Math.max(1,Math.floor(Math.log10(Math.abs(t))+1)),n=Math.max(Math.floor((r-1)/e),1)+1,a=Math.pow(10,-n);return a=o==="increase"?1-a:1+a,a};var fs=t=>Object.values(t).filter(e=>!!e&&e.availableWithdrawCoin>0).map(e=>({suppliedCoin:e.availableWithdrawCoin,suppliedValue:e.suppliedValue,stakedCoin:e.availableUnstakeCoin,coinName:e.coinName,symbol:e.symbol,coinType:e.coinType,coinPrice:e.coinPrice,coinDecimals:e.coinDecimal,supplyApr:e.supplyApr,supplyApy:e.supplyApy,incentiveApr:isFinite(e.rewardApr)?e.rewardApr:0})),gs=(t,e)=>Object.values(t).filter(o=>!!o&&(o.totalBorrowedValueWithWeight>0||o.totalDepositedValue>0)).map(o=>({obligationId:o.obligationId,totalDebtsInUsd:o.totalBorrowedValueWithWeight,totalCollateralInUsd:o.totalDepositedValue,riskLevel:o.totalRiskLevel,availableCollateralInUsd:o.totalAvailableCollateralValue,totalUnhealthyCollateralInUsd:o.totalUnhealthyCollateralValue,collaterals:Object.values(o.collaterals).filter(r=>!!r&&r.depositedCoin>0).map(r=>({coinName:r.coinName,symbol:r.symbol,coinDecimals:r.coinDecimal,coinType:r.coinType,coinPrice:r.coinPrice,depositedCoin:r.depositedCoin,depositedValueInUsd:r.depositedValue})),borrowedPools:Object.values(o.debts).filter(r=>!!r&&r.borrowedCoin>0).map(r=>({coinName:r.coinName,symbol:r.symbol,coinDecimals:r.coinDecimal,coinType:r.coinType,coinPrice:r.coinPrice,borrowedCoin:r.borrowedCoin,borrowedValueInUsd:r.borrowedValueWithWeight,borrowApr:e[r.coinName]?.borrowApr,borrowApy:e[r.coinName]?.borrowApy,incentiveInfos:(o.borrowIncentives[r.coinName]?.rewards??[]).filter(n=>!!n&&isFinite(n.baseRewardApr)).map(n=>({coinName:n.coinName,symbol:n.symbol,coinType:n.coinType,boostValue:n.boostValue,maxBoost:n.maxBoost,incentiveApr:n.baseRewardApr,boostedIncentiveApr:n.boostedRewardApr}))}))})),Re="sui",hs="SUI",Cs=(t,e)=>Object.values(t).reduce((o,r)=>{if(r){if(r.availableClaimCoin===0)return o;o[Re]?o[Re].pendingRewardInCoin+=r.availableClaimCoin:o[Re]={symbol:hs,coinType:normalizeStructTag(SUI_TYPE_ARG),coinPrice:e[Re]??0,pendingRewardInCoin:r.availableClaimCoin};}return o},{}),ws=t=>Object.values(t).filter(e=>!!e).reduce((e,o)=>(Object.values(o.borrowIncentives).forEach(r=>{r?.rewards.forEach(n=>{if(n.availableClaimCoin===0)return e;e[n.coinName]?e[n.coinName].pendingRewardInCoin+=n.availableClaimCoin:e[n.coinName]={symbol:n.symbol,coinType:n.coinType,coinPrice:n.coinPrice,pendingRewardInCoin:n.availableClaimCoin};});}),e),{}),Ss=(t,e,o=Date.now())=>t.map(({keyId:r,lockedScaCoin:n,currentVeScaBalance:a,unlockAt:s})=>({veScaKey:r,coinPrice:e,lockedScaInCoin:n,lockedScaInUsd:n*e,currentVeScaBalance:a,remainingLockPeriodInDays:s-o>0?(s-o)/864e5:0,unlockAt:s})),xs=t=>{let e=t.parsedLendings.reduce((n,a)=>n+a.suppliedValue,0),o=t.parsedObligationAccounts.reduce((n,a)=>(n.totalDebtValue+=a.totalDebtsInUsd,n.totalCollateralValue+=a.totalCollateralInUsd,n),{totalDebtValue:0,totalCollateralValue:0}),r=t.parsedVeScas.reduce((n,a)=>n+a.lockedScaInUsd,0);return {totalSupplyValue:e,...o,totalLockedScaValue:r}},As=t=>{let e=BigNumber(t.depositedRawAmount??0),o=e.shiftedBy(-t.coinDecimal),r=o.multipliedBy(t.coinPrice),n=r.multipliedBy(t.marketCollateral.collateralFactor),a=r.multipliedBy(t.marketCollateral.liquidationFactor),s=BigNumber(t.coinAmount),c=s.shiftedBy(-t.coinDecimal);return {entry:{coinName:t.assetCoinName,coinType:t.coinType,symbol:t.symbol,coinDecimal:t.coinDecimal,coinPrice:t.coinPrice,depositedAmount:e.toNumber(),depositedCoin:o.toNumber(),depositedValue:r.toNumber(),borrowCapacityValue:n.toNumber(),requiredCollateralValue:a.toNumber(),availableDepositAmount:s.toNumber(),availableDepositCoin:c.toNumber(),availableWithdrawAmount:0,availableWithdrawCoin:0},depositedValue:r,borrowCapacityValue:n,requiredCollateralValue:a,isDeposited:e.isGreaterThan(0)}},Os=1e9,Ps=BigNumber(1e12),Ts=t=>{let e=[];Object.entries(t.borrowIncentiveAccount.pointList).forEach(([n,a])=>{let s=t.borrowIncentivePool.points[t.toMarketCoinName(n)];if(!a||!s)return;let c=BigNumber(a.weightedAmount),i=s.currentPointIndex?Math.max(BigNumber(s.currentPointIndex-a.index).dividedBy(Os).toNumber(),0):1,l=c.multipliedBy(i).plus(a.points),d=l.shiftedBy(-s.coinDecimal),u=BigNumber(s.baseWeight).dividedBy(Ps),p=BigNumber(a.weightedAmount).div(BigNumber(t.borrowIncentiveAccount.debtAmount).multipliedBy(u)),y=p.isFinite()?p.toNumber():1,f=isFinite(s.rewardApr)?s.rewardApr:0;l.isGreaterThanOrEqualTo(0)&&e.push({coinName:s.coinName,coinType:s.coinType,symbol:s.symbol,coinDecimal:s.coinDecimal,coinPrice:s.coinPrice,weightedBorrowAmount:c.toNumber(),availableClaimAmount:l.toNumber(),availableClaimCoin:d.toNumber(),baseRewardApr:f,boostedRewardApr:f*y,maxBoost:1/u.toNumber(),boostValue:y});});let r=Object.keys(t.borrowIncentivePool.points).some(n=>{let a=t.borrowIncentivePool.points[n]?.rewardApr;return a!==1/0&&typeof a=="number"&&a>0})&&t.borrowIncentiveAccount.debtAmount>0;return {rewards:e,contributesRewardedPool:r}},ks=t=>{let e=t.debt?.borrowIndex?t.marketPool.borrowIndex/Number(t.debt.borrowIndex)-1:0,o=BigNumber(t.debt?.amount??0).multipliedBy(e+1),r=o.shiftedBy(-t.coinDecimal),n=o,a=n.shiftedBy(-t.coinDecimal),s=BigNumber(t.coinAmount),c=s.shiftedBy(-t.coinDecimal),i=a.multipliedBy(t.coinPrice),l=i.multipliedBy(t.marketPool.borrowWeight);return {entry:{coinName:t.assetCoinName,coinType:t.coinType,symbol:t.symbol,coinDecimal:t.coinDecimal,coinPrice:t.coinPrice,borrowedAmount:o.toNumber(),borrowedCoin:r.toNumber(),borrowedValue:i.toNumber(),borrowedValueWithWeight:l.toNumber(),borrowIndex:Number(t.debt?.borrowIndex??0),requiredRepayAmount:n.toNumber(),requiredRepayCoin:a.toNumber(),availableBorrowAmount:0,availableBorrowCoin:0,availableRepayAmount:s.toNumber(),availableRepayCoin:c.toNumber(),rewards:(t.rewards??[]).filter(({weightedBorrowAmount:u})=>u>0)},borrowedValue:i,borrowedValueWithWeight:l,isBorrowed:o.isGreaterThan(0)}},Rs=t=>{let e=t.totalRequiredCollateralValue.isZero()?t.totalBorrowedValueWithWeight.isGreaterThan(0)?BigNumber(100):BigNumber(0):t.totalBorrowedValueWithWeight.dividedBy(t.totalRequiredCollateralValue);e=e.isLessThan(1)?e:BigNumber(1);let o=t.totalDepositedValue.minus(t.totalBorrowedValue).isGreaterThan(0)?t.totalDepositedValue.minus(t.totalBorrowedValue):BigNumber(0),r=t.totalBorrowCapacityValue.minus(t.totalBorrowedValueWithWeight).isGreaterThan(0)?t.totalBorrowCapacityValue.minus(t.totalBorrowedValueWithWeight):BigNumber(0),n=t.totalBorrowedValueWithWeight.isGreaterThan(0)?t.totalRequiredCollateralValue:BigNumber(0),a=t.totalBorrowedValueWithWeight.minus(n).isGreaterThan(0)?t.totalBorrowedValueWithWeight.minus(n):BigNumber(0);return {riskLevel:e.toNumber(),accountBalanceValue:o.toNumber(),availableCollateralValue:r.toNumber(),requiredCollateralValue:n.toNumber(),unhealthyCollateralValue:a.toNumber()}},Is=t=>{let e=BigNumber(t.totalAvailableCollateralValue).dividedBy(t.marketCollateral.collateralFactor).dividedBy(t.marketCollateral.coinPrice).shiftedBy(t.marketCollateral.coinDecimal),o=t.totalBorrowedValueWithWeight===0?BigNumber(t.obligationCollateral.depositedAmount):ke(e.multipliedBy(nt(BigNumber(t.totalAvailableCollateralValue).dividedBy(t.marketCollateral.collateralFactor).toNumber(),3,"increase")).toNumber(),t.obligationCollateral.depositedAmount,t.marketCollateral.depositAmount);return {availableWithdrawAmount:o.toNumber(),availableWithdrawCoin:o.shiftedBy(-t.obligationCollateral.coinDecimal).toNumber()}},Ns=t=>{let e=BigNumber(t.obligationDebt.requiredRepayAmount).multipliedBy(nt(t.obligationDebt.borrowedValue,3,"decrease")),o=BigNumber(t.totalAvailableCollateralValue).dividedBy(t.marketPool.borrowWeight).shiftedBy(t.marketPool.coinDecimal).dividedBy(t.marketPool.coinPrice),r=t.totalAvailableCollateralValue!==0&&BigNumber(t.marketPool.maxBorrowCoin).isGreaterThan(t.marketPool.borrowCoin)?ke(o.multipliedBy(nt(o.shiftedBy(-t.marketPool.coinDecimal).multipliedBy(t.marketPool.coinPrice).toNumber(),3,"increase")).toNumber(),t.marketPool.supplyAmount):BigNumber(0);return {availableBorrowAmount:r.toNumber(),availableBorrowCoin:r.shiftedBy(-t.obligationDebt.coinDecimal).toNumber(),requiredRepayAmount:e.toNumber(),requiredRepayCoin:e.shiftedBy(-t.obligationDebt.coinDecimal).toNumber()}},xn=t=>{let{coinName:e,symbol:o,coinType:r,marketCoinType:n,coinDecimal:a,coinPrice:s,marketPool:c,spool:i,stakeAccounts:l,coinAmount:d,marketCoinAmount:u,sCoinAmount:p}=t,y=BigNumber(0),f=BigNumber(0),b=BigNumber(0),m=BigNumber(0),h=BigNumber(0),w=BigNumber(0),S=BigNumber(0),T=BigNumber(0),B=BigNumber(0);if(i)for(let oe of l){let M=BigNumber(oe.staked),ge=M.shiftedBy(-i.coinDecimal),K=M.multipliedBy(c?.conversionRate??1),z=K.shiftedBy(-i.coinDecimal),ye=z.multipliedBy(i.coinPrice);y=y.plus(M),f=f.plus(ge),b=b.plus(K),m=m.plus(z),h=h.plus(ye),w=w.plus(M),S=w.shiftedBy(-i.coinDecimal);let st=i.currentPointIndex?BigNumber(i.currentPointIndex-oe.index).dividedBy(1e9):1;T=T.plus(M.multipliedBy(st).plus(oe.points).multipliedBy(i.exchangeRateNumerator).dividedBy(i.exchangeRateDenominator)),B=T.shiftedBy(-i.rewardCoinDecimal);}let N=BigNumber(u).plus(BigNumber(p)).multipliedBy(c?.conversionRate??1),R=N.shiftedBy(-a),x=R.multipliedBy(s??0),v=BigNumber(s??0).multipliedBy(c?.conversionRate??1),j=BigNumber(u).plus(BigNumber(p)),_=j.shiftedBy(-a),q=BigNumber(d),Q=q.shiftedBy(-a),ae=ke(N,c?.supplyAmount??1/0).plus(b),Z=ke(R,c?.supplyCoin??1/0).plus(m);return {coinName:e,symbol:o,coinType:r,marketCoinType:n,sCoinType:c?.sCoinType??"",coinDecimal:a,coinPrice:s??0,conversionRate:c?.conversionRate??1,marketCoinPrice:v.toNumber(),supplyApr:c?.supplyApr??0,supplyApy:c?.supplyApy??0,rewardApr:i?.rewardApr??0,suppliedAmount:N.plus(b).toNumber(),suppliedCoin:R.plus(m).toNumber(),suppliedValue:x.plus(h).toNumber(),stakedMarketAmount:y.toNumber(),stakedMarketCoin:f.toNumber(),stakedAmount:b.toNumber(),stakedCoin:m.toNumber(),stakedValue:h.toNumber(),unstakedMarketAmount:j.toNumber(),unstakedMarketCoin:_.toNumber(),unstakedAmount:N.toNumber(),unstakedCoin:R.toNumber(),unstakedValue:x.toNumber(),availableSupplyAmount:q.toNumber(),availableSupplyCoin:Q.toNumber(),availableWithdrawAmount:ae.toNumber(),availableWithdrawCoin:Z.toNumber(),availableStakeAmount:j.toNumber(),availableStakeCoin:_.toNumber(),availableUnstakeAmount:w.toNumber(),availableUnstakeCoin:S.toNumber(),availableClaimAmount:T.toNumber(),availableClaimCoin:B.toNumber(),isIsolated:c?c.isIsolated:false}},An=t=>{let{obligationId:e,collateralCoinNames:o,market:r,coinPrices:n,coinAmounts:a,obligationQuery:s,borrowIncentivePools:c,borrowIncentiveAccounts:i,utils:l}=t,d={},u={},p={},y=0,f=BigNumber(0),b=BigNumber(0),m=BigNumber(0),h=0,w=0,S=BigNumber(0),T=BigNumber(0);for(let x of o){let v=s?.collaterals.find(q=>l.parseCoinNameFromType(q.type)===x),j=r.collaterals[x];if(!j)continue;let _=As({assetCoinName:x,coinType:l.parseCoinType(x),symbol:l.parseSymbol(x),coinDecimal:l.getCoinDecimal(x),coinPrice:n?.[x]??0,coinAmount:a?.[x]??0,marketCollateral:j,depositedRawAmount:v?.amount});f=f.plus(_.depositedValue),b=b.plus(_.borrowCapacityValue),m=m.plus(_.requiredCollateralValue),_.isDeposited&&y++,d[x]=_.entry;}for(let[x,v]of Object.entries(i)){if(!v)continue;let j=c[x];if(!j)continue;let _=Ts({borrowIncentivePool:j,borrowIncentiveAccount:v,toMarketCoinName:q=>l.parseSCoinTypeNameToMarketCoinName(q)});_.contributesRewardedPool&&w++,p[x]={coinName:j.coinName,coinType:j.coinType,symbol:j.symbol,coinDecimal:j.coinDecimal,coinPrice:j.coinPrice,rewards:_.rewards};}let B=[...new Set(Object.values(r.pools).filter(x=>!!x).map(x=>x.coinName))];for(let x of B){let v=s?.debts.find(q=>l.parseCoinNameFromType(q.type)===x),j=r.pools[x];if(!j)continue;let _=ks({assetCoinName:x,coinType:l.parseCoinType(x),symbol:l.parseSymbol(x),coinDecimal:l.getCoinDecimal(x),coinPrice:n?.[x]??0,coinAmount:a?.[x]??0,marketPool:j,debt:v?{amount:v.amount,borrowIndex:v.borrowIndex}:void 0,rewards:p[x]?.rewards});S=S.plus(_.borrowedValue),T=T.plus(_.borrowedValueWithWeight),_.isBorrowed&&h++,u[x]=_.entry;}let N=Rs({totalDepositedValue:f,totalBorrowedValue:S,totalBorrowCapacityValue:b,totalBorrowedValueWithWeight:T,totalRequiredCollateralValue:m}),R={obligationId:e,totalDepositedValue:f.toNumber(),totalBorrowedValue:S.toNumber(),totalBalanceValue:N.accountBalanceValue,totalBorrowCapacityValue:b.toNumber(),totalAvailableCollateralValue:N.availableCollateralValue,totalBorrowedValueWithWeight:T.toNumber(),totalRequiredCollateralValue:N.requiredCollateralValue,totalUnhealthyCollateralValue:N.unhealthyCollateralValue,totalRiskLevel:N.riskLevel,totalDepositedPools:y,totalBorrowedPools:h,totalRewardedPools:w,collaterals:d,debts:u,borrowIncentives:p};for(let[x,v]of Object.entries(R.collaterals)){if(!v)continue;let j=r.collaterals[x];if(!j)continue;let{availableWithdrawAmount:_,availableWithdrawCoin:q}=Is({obligationCollateral:v,marketCollateral:j,totalAvailableCollateralValue:R.totalAvailableCollateralValue,totalBorrowedValueWithWeight:R.totalBorrowedValueWithWeight});v.availableWithdrawAmount=_,v.availableWithdrawCoin=q;}for(let[x,v]of Object.entries(R.debts)){if(!v)continue;let j=r.pools[x];if(!j)continue;let{availableBorrowAmount:_,availableBorrowCoin:q,requiredRepayAmount:Q,requiredRepayCoin:ae}=Ns({obligationDebt:v,marketPool:j,totalAvailableCollateralValue:R.totalAvailableCollateralValue});v.availableBorrowAmount=_,v.availableBorrowCoin=q,v.requiredRepayAmount=Q,v.requiredRepayCoin=ae;}return R},On=t=>{let{lendings:e,obligationAccounts:o,veScas:r,coinPrices:n,marketPools:a}=t,s=fs(e),c=gs(o,a),i=Cs(e,n),l=ws(o),d=Ss(r,n.sca??0);return {...xs({parsedLendings:s,parsedObligationAccounts:c,parsedVeScas:d}),lendings:s,borrowings:c,pendingRewards:{lendings:Object.values(i).map(p=>({...p,coinName:Re,pendingRewardInUsd:p.coinPrice*p.pendingRewardInCoin})),borrowIncentives:Object.entries(l).map(([p,y])=>({coinName:p,...y,pendingRewardInUsd:y.coinPrice*y.pendingRewardInCoin}))},veScas:d}},Pn=t=>{let{coinPrices:e,marketPools:o,sCoinNames:r,parseCoinName:n}=t,a={};for(let s of r){let c=n(s);a[s]=BigNumber(e[c]??0).multipliedBy(o[c]?.conversionRate??1).toNumber();}return {...e,...a}};var at=(t,e)=>e.reduce((o,r)=>{let n=t[r];return n!==void 0&&(o[r]=n),o},{});var Bt=class{utils;repos;constructor({utils:e,queryClient:o,queryClientConfig:r,...n}){this.utils=e??new ro(n),this.repos=pn({utils:this.utils,queryClient:o,queryClientConfig:r});}get logger(){return this.utils.logger}async init(e=false){await this.utils.init({force:e});}get constants(){return this.utils.constants}get walletAddress(){return this.utils.walletAddress}get onchain(){return this.utils.onchain}get address(){return this.utils.address}async fetchMarkets(e){let o=e?.poolCoinNames||e?.collateralCoinNames?Array.from(new Set([...e.poolCoinNames??[],...e.collateralCoinNames??[]])):void 0,r=e?.coinPrices??await this.getPythCoinPrices({coinNames:o})??{};return this.repos.market.getMarkets({coinPrices:r,poolCoinNames:e?.poolCoinNames,collateralCoinNames:e?.collateralCoinNames,source:be(e)})}async getMarketPools(e=[...this.constants.whitelist.lending],o){let{pools:r,collaterals:n}=await this.fetchMarkets({...o,poolCoinNames:e,collateralCoinNames:e});return {pools:at(r,e),collaterals:at(n,e)}}async getMarketPool(e,o){return (await this.getMarketPools(void 0,o)).pools[e]}async getMarketCollaterals(e=[...this.constants.whitelist.collateral],o){let{collaterals:r}=await this.fetchMarkets({...o,poolCoinNames:[],collateralCoinNames:e});return at(r,e)}async getMarketCollateral(e,o){return (await this.getMarketCollaterals(void 0,o))[e]}async getObligations(e=this.walletAddress){return this.repos.obligation.getObligations(e)}async queryObligation(e){let o=typeof e=="string"?e:"objectId"in e?e.objectId:void 0;if(o===void 0)throw new d("queryObligation expects an object id (string) or an object reference");return this.repos.obligation.getObligationData(o)}async getObligationLocked(e){let o=typeof e=="string"?e:"objectId"in e?e.objectId:void 0;if(o===void 0)throw new d("getObligationLocked expects an object id (string) or an object reference");return this.repos.obligation.getObligationLocked(o)}async getCoinAmounts(e,o=this.walletAddress){return await this.repos.coinBalance.getCoinAmounts({coinNames:e,address:o})}async getCoinAmount(e,o=this.walletAddress){return await this.repos.coinBalance.getCoinAmount({coinName:e,address:o})}async getMarketCoinAmounts(e,o=this.walletAddress){let r=e??[...this.constants.whitelist.lending].map(n=>this.utils.parseMarketCoinName(n));return await this.repos.coinBalance.getMarketCoinAmounts({marketCoinNames:r,address:o})}async getMarketCoinAmount(e,o=this.walletAddress){return await this.repos.coinBalance.getMarketCoinAmount({marketCoinName:e,address:o})}async getSpools(e,o){let r=o?.coinPrices??await this.getAllCoinPrices({marketPools:o?.marketPools})??{};return this.repos.spool.getSpools({stakeCoinNames:e??[...this.constants.whitelist.spool],coinPrices:r,source:be(o)})}async getSpool(e,o){let r=o?.coinPrices??await this.getAllCoinPrices()??{};return this.repos.spool.getSpool({stakeCoinName:e,coinPrices:r,source:be(o)})}async getAllStakeAccounts(e=this.walletAddress){return await this.repos.spool.getStakeAccounts({address:e})}async getStakeAccounts(e,o=this.walletAddress){return (await this.getAllStakeAccounts(o))[e]??[]}async getStakePools(e=[...this.constants.whitelist.spool]){let o={};for(let r of e){let n=await this.repos.spool.getStakePool(r);n&&(o[r]=n);}return o}async getStakePool(e){return this.repos.spool.getStakePool(e)}async getStakeRewardPools(e=[...this.constants.whitelist.spool]){return this.repos.spool.getSpoolRewardPools(e)}async getStakeRewardPool(e){return this.repos.spool.getSpoolRewardPool(e)}async getPythCoinPrices(e){let o=e?.coinNames??Array.from(new Set([...this.constants.whitelist.lending,...this.constants.whitelist.collateral]).values());return this.repos.price.getPricesFromPyth({coinNames:o,source:"api-first"})}async getPythCoinPrice(e){return (await this.getPythCoinPrices({coinNames:[e]}))[e]}async getIndexerCoinPrices(e){let o=e?.coinNames??Array.from(new Set([...this.constants.whitelist.lending,...this.constants.whitelist.collateral]).values());return this.repos.price.getPricesFromIndexer({coinNames:o})}async getIndexerCoinPrice(e){return (await this.getIndexerCoinPrices({coinNames:[e]}))[e]}async getBorrowIncentivePools(e=[...this.constants.whitelist.lending],o){let r=o?.coinPrices??await this.getAllCoinPrices({marketPools:o?.marketPools})??{};return this.repos.borrowIncentive.getBorrowIncentivePools({coinNames:e,coinPrices:r})}async getBorrowIncentiveAccounts(e,o=[...this.constants.whitelist.lending]){return await this.repos.borrowIncentive.getBorrowIncentiveAccounts({obligationId:typeof e=="string"?e:e.objectId,coinNames:o})}async getLendings(e,o=this.walletAddress,r){let n=e??[...this.constants.whitelist.lending],a=n.map(b=>this.utils.parseMarketCoinName(b)),s=a.filter(b=>this.constants.whitelist.spool.has(b)),c=r?.coinPrices??await this.getPythCoinPrices({coinNames:n})??{},i=r?.marketPools??(await this.getMarketPools(n,{...r,coinPrices:c})).pools,l=await this.getSpools(s,{...r,marketPools:i,coinPrices:c}),[d,u,p,y]=await Promise.all([this.getCoinAmounts(n,o),this.getMarketCoinAmounts(a,o),this.getSCoinAmounts(a,o),this.getAllStakeAccounts(o)]),f={};for(let b of n){let m=this.utils.parseMarketCoinName(b),h=s.includes(m);f[b]=xn({coinName:b,symbol:this.utils.parseSymbol(b),coinType:this.utils.parseCoinType(b),marketCoinType:this.utils.parseMarketCoinType(b),coinDecimal:this.utils.getCoinDecimal(b)??0,coinPrice:c[b]??0,marketPool:i?.[b],spool:h?l[m]:void 0,stakeAccounts:h?y[m]??[]:[],coinAmount:d[b]??0,marketCoinAmount:u[m]??0,sCoinAmount:p[m]??0});}return f}async getLending(e,o=this.walletAddress,r){return (await this.getLendings([e],o,r))[e]}async getObligationAccounts(e=this.walletAddress,o){return E({source:be(o),label:"ScallopQuery.getObligationAccounts",logger:this.logger,api:()=>this.assembleObligationAccountsByOwner(e,o,true),onchain:()=>this.assembleObligationAccountsByOwner(e,o,false)})}async getObligationAccountsByIds(e,o){return E({source:be(o),label:"ScallopQuery.getObligationAccountsByIds",logger:this.logger,api:()=>this.assembleObligationAccountsByIds(e,o,true),onchain:()=>this.assembleObligationAccountsByIds(e,o,false)})}async getObligationAccountById(e,o){return E({source:be(o),label:"ScallopQuery.getObligationAccountById",logger:this.logger,api:()=>this.assembleObligationAccountById(e,o,true),onchain:()=>this.assembleObligationAccountById(e,o,false)})}async resolveObligationMarketInputs(e,o){let r=e?.market??await this.getMarketPools(void 0,{indexer:o}),n=e?.coinPrices??await this.getAllCoinPrices({marketPools:r.pools});return {market:r,coinPrices:n}}async assembleObligationAccount(e,o){let{market:r,coinPrices:n,coinAmounts:a}=o,[s,c,i]=await Promise.all([this.queryObligation(e),this.getBorrowIncentivePools(void 0,{coinPrices:n,marketPools:r.pools}),this.getBorrowIncentiveAccounts(e)]);return An({obligationId:typeof e=="string"?e:e.objectId,collateralCoinNames:Array.from(this.constants.whitelist.collateral),market:r,coinPrices:n,coinAmounts:a,obligationQuery:s,borrowIncentivePools:c,borrowIncentiveAccounts:i,utils:{parseCoinNameFromType:l=>this.utils.parseCoinNameFromType(l),parseCoinType:l=>this.utils.parseCoinType(l),parseSymbol:l=>this.utils.parseSymbol(l),getCoinDecimal:l=>this.utils.getCoinDecimal(l),parseSCoinTypeNameToMarketCoinName:l=>this.utils.parseSCoinTypeNameToMarketCoinName(l)}})}async assembleObligationAccountsByOwner(e,o,r){let{market:n,coinPrices:a}=await this.resolveObligationMarketInputs(o,r),[s,c]=await Promise.all([this.getCoinAmounts(void 0,e),this.getObligations(e)]),i=await this.repos.obligation.getObligationObjects(c.map(d=>d.id)),l={};return await Promise.allSettled(c.map(async(d,u)=>{l[d.keyId]=await this.assembleObligationAccount(i[u]??d.id,{market:n,coinPrices:a,coinAmounts:s});})),l}async assembleObligationAccountsByIds(e,o,r){let{market:n,coinPrices:a}=await this.resolveObligationMarketInputs(o,r),s=[];return await Promise.allSettled(e.map(async c=>{let i=await this.assembleObligationAccount(c,{market:n,coinPrices:a,coinAmounts:{}});i&&s.push(i);})),s}async assembleObligationAccountById(e,o,r){let{market:n,coinPrices:a}=await this.resolveObligationMarketInputs(o,r);return this.assembleObligationAccount(e,{market:n,coinPrices:a,coinAmounts:{}})}async getObligationAccount(e,o=this.walletAddress,r){let n=await this.getObligationAccounts(o,r);return Object.values(n).find(a=>a?.obligationId===e)}async getTvl(e){let o=await this.getIndexerCoinPrices();return this.repos.market.getTvl({source:be(e),coinPrices:o})}async getVeSca(e){return await this.repos.veSca.getVeSca(typeof e=="string"?e:e.objectId)}async getVeScas({walletAddress:e=this.walletAddress,excludeEmpty:o=false}={}){return await this.repos.veSca.getVeScasByAddress({address:e,excludeEmpty:o})}async getVeScaTreasuryInfo(){return await this.repos.veSca.getVeScaTreasuryInfo()}async getVeScaKeyIdFromReferralBindings(e=this.walletAddress){return this.repos.referral.getVeScaKeyIdFromReferralBindings(e)}async getBindedObligation(e){return this.repos.borrowIncentive.getBindedObligation(e)}async getBindedVeScaKey(e){return this.repos.borrowIncentive.getBindedVeScaKey(e)}async getLoyaltyProgramInfos(e){let o=e??(await this.getVeScas())[0]?.keyId,r=typeof o=="string"?o:o?.objectId;return this.repos.loyaltyProgram.getLoyaltyProgramInfos(r)}async getVeScaLoyaltyProgramInfos(e){return this.repos.veScaLoyaltyProgram.getVeScaLoyaltyProgramInfos(e)}async getSCoinTotalSupply(e){return await this.repos.coinBalance.getSCoinTotalSupply(e)}async getSCoinAmounts(e,o=this.walletAddress){return await this.repos.coinBalance.getSCoinAmounts({sCoinNames:e,address:o})}async getSCoinAmount(e,o=this.walletAddress){let r=this.utils.parseSCoinName(e);return r?await this.repos.coinBalance.getSCoinAmount({sCoinName:r,address:o}):0}async getSCoinSwapRate(e,o){if(e===o)throw new d("fromAsset and toAsset must be different");if(!this.constants.whitelist.scoin.has(e))throw new d("fromAsset is not supported");if(!this.constants.whitelist.scoin.has(o))throw new d("toAsset is not supported");let r=this.utils.parseCoinName(e),n=this.utils.parseCoinName(o),[a,s]=await Promise.all([this.getMarketPool(r),this.getMarketPool(n)]);if(!a||!s)throw new d("Failed to fetch the lendings data");if(a.conversionRate===0||s.conversionRate===0)throw new d("Conversion rate cannot be zero");let c=a.conversionRate,i=1/s.conversionRate,l=await this.getPythCoinPrices();if(!l[r]||!l[n]||l[r]===0||l[n]===0){let u=await this.getIndexerCoinPrices().catch(()=>({}));l={...l,...u};}if(!l[r]||!l[n])throw new d("Failed to fetch the coin prices");let d$1=l[r]/l[n];return BigNumber(c).multipliedBy(d$1).multipliedBy(i).toNumber()}async getFlashLoanFees(e=[...this.constants.whitelist.lending]){return await this.repos.flashloan.getFlashloanFees(e)}async getPoolSupplyLimit(e){return this.repos.market.getPoolSupplyLimit(e)}async getPoolBorrowLimit(e){return this.repos.market.getPoolBorrowLimit(e)}async getIsolatedAssets(e=false){return await this.repos.isolatedAssets.getIsolatedAssets({source:mn({useOnChainQuery:e})})}async isIsolatedAsset(e,o=false){let r=this.constants.poolAddresses[e];return r&&!o?r.isIsolated:(await this.repos.isolatedAssets.getIsolatedAssets({source:"onchain"})).includes(this.utils.parseCoinType(e))}async getAllCoinPrices(e){let o=e?.indexer??false,r=e?.coinPrices??(o?await this.getIndexerCoinPrices():await this.getPythCoinPrices()),n=e?.marketPools??(await this.getMarketPools(void 0,{coinPrices:r,indexer:o})).pools;return Pn({coinPrices:r,marketPools:n,sCoinNames:[...this.constants.whitelist.scoin],parseCoinName:a=>this.utils.parseCoinName(a)})}async getPoolAddresses(e=this.address.addressId){if(!e)throw new d("apiAddressId is required");return this.repos.poolAddresses.getPoolAddresses({})}async getUserPortfolio(e){let o=e?.walletAddress??this.walletAddress,r=e?.indexer??false,n=await this.getAllCoinPrices({indexer:r}),a=await this.getMarketPools(void 0,{indexer:r,coinPrices:n}),[s,c,i]=await Promise.all([this.getLendings(void 0,o,{indexer:r,marketPools:a.pools,coinPrices:n}),this.getObligationAccounts(o,{indexer:r,market:a,coinPrices:n}),this.getVeScas({walletAddress:o,excludeEmpty:true})]);return On({lendings:s,obligationAccounts:c,veScas:i,coinPrices:n,marketPools:a.pools})}async getPriceUpdatePolicies(){return this.repos.xOracle.getPriceUpdatePolicies()}async getAssetOracles(){return this.repos.xOracle.getAssetOracles()}async getSwitchboardOnDemandAggregatorObjectIds(e){return this.repos.xOracle.getOnDemandAggObjectIds(e)}},db=Bt;
14
+
15
+ export { km as A, Rm as B, hn as C, Cn as D, wn as E, Kt as F, Wt as G, Ut as H, Qt as I, Dn as J, Mn as K, Ln as L, $t as M, zt as N, Mi as O, Xt as P, ro as Q, db as R, je as a, ve as b, Be as c, _s as d, Ms as e, Ls as f, Es as g, g as h, Ws as i, Qs as j, $s as k, zs as l, le as m, Ce as n, Y as o, it as p, ct as q, Hs as r, bn as s, yn as t, fn as u, Pm as v, gn as w, jt as x, ms as y, Tm as z };
@@ -1,5 +1,5 @@
1
- import { c } from './chunk-DIC6P5HB.js';
2
- import { s, t, u, C, D, E } from './chunk-33AK5RWM.js';
1
+ import { c } from './chunk-6YLMI74S.js';
2
+ import { s, t, u, C, D, E } from './chunk-3T4T4AON.js';
3
3
 
4
4
  var S=class{builder;collateralService;lendingService;borrowService;spoolService;veScaService;referralService;networkType;constructor({builder:e,networkType:n,...t$1}){this.builder=e??new c(t$1),this.collateralService=new s(this),this.lendingService=new t(this),this.borrowService=new u(this),this.spoolService=new C(this),this.veScaService=new D(this),this.referralService=new E(this),this.networkType=n??"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 suiKit(){return this.builder.suiKit}get onchain(){return this.utils.onchain}get executor(){return this.builder.executor}get address(){return this.builder.address}async init(e=false){await this.builder.init(e);}async openObligation(e=true){return this.borrowService.openObligation(e)}async depositCollateral(e,n,t=true,s,r,i){return this.collateralService.depositCollateral(e,n,t,s,r,i)}async withdrawCollateral(e,n,t=true,s,r,i,a){return this.collateralService.withdrawCollateral(e,n,t,s,r,i,a)}async supply(e,n,t=true,s){return this.lendingService.supply(e,n,t,s)}async supplyAndStake(e,n,t=true,s,r){return this.borrowService.supplyAndStake(e,n,t,s,r)}async withdraw(e,n,t=true,s){return this.lendingService.withdraw(e,n,t,s)}async borrow(e,n,t=true,s,r,i,a){return this.borrowService.borrow(e,n,t,s,r,i,a)}async repay(e,n,t=true,s,r,i,a){return this.borrowService.repay(e,n,t,s,r,i,a)}async flashLoan(e,n,t,s=true,r){return this.lendingService.flashLoan(e,n,t,s,r)}async createStakeAccount(e,n=true,t){return this.spoolService.createStakeAccount(e,n,t)}async stake(e,n,t=true,s,r){return this.spoolService.stake(e,n,t,s,r)}async unstake(e,n,t=true,s,r){return this.spoolService.unstake(e,n,t,s,r)}async unstakeAndWithdraw(e,n,t=true,s,r){return this.spoolService.unstakeAndWithdraw(e,n,t,s,r)}async claim(e,n=true,t,s){return this.spoolService.claim(e,n,t,s)}async stakeObligation(e,n,t=true,s){return this.borrowService.stakeObligation(e,n,t,s)}async unstakeObligation(e,n,t=true,s){return this.borrowService.unstakeObligation(e,n,t,s)}async claimBorrowIncentive(e,n,t=true,s){return this.borrowService.claimBorrowIncentive(e,n,t,s)}async migrateAllMarketCoin(e=true,n=true,t){let s=t??this.walletAddress,r=this.builder.createTxBlock();r.setSender(s);let i=[];for(let a of this.constants.whitelist.scoin){let l=[];try{let{takeCoin:o}=await this.builder.selectMarketCoin(r,a,Number.MAX_SAFE_INTEGER,s);if(o){let c=r.mintSCoin(a,o);l.push(c);}}catch(o){if(!o.toString().includes("No valid coins found for the transaction"))throw o}if(e&&this.constants.whitelist.spool.has(a))try{let o=await r.unstakeQuick(Number.MAX_SAFE_INTEGER,a);o&&l.push(o);}catch{}if(l.length>0){let o=l[0];l.length>1&&r.mergeCoins(o,l.slice(1));let c=this.utils.parseSCoinType(a);await this.utils.mergeSimilarCoins(r,o,c,s),i.push(o);}}return i.length>0&&r.transferObjects(i,s),n?await this.executor.signAndSendTxn(r):r.txBlock}async claimAllUnlockedSca(e=true,n){return this.veScaService.claimAllUnlockedSca(e,n)}async mintTestCoin(e,n,t=true,s){if(!(this.networkType==="testnet"))throw new Error("Only be used on the test network.");let i=this.builder.createTxBlock(),a=s??this.walletAddress,l=this.address.get("core.packages.testCoin.id"),o=this.address.get(`core.coins.${e}.treasury`),c=`${l}::${e}::mint`,C=i.moveCall(c,[o,n]);return i.transferObjects([C],a),t?await this.executor.signAndSendTxn(i):i.txBlock}},R=S;
5
5
 
@@ -0,0 +1,11 @@
1
+ import { R as R$1, v, w, x, B, d, A as A$1, y, z as z$1, g, r } from './chunk-3T4T4AON.js';
2
+ import { d as d$1 } from './chunk-S34VOEZN.js';
3
+ import { Transaction } from '@mysten/sui/transactions';
4
+ import { SuiKit, SuiTxBlock, Transaction as Transaction$1, SUI_CLOCK_OBJECT_ID } from '@scallop-io/sui-kit';
5
+ import { SUI_CLOCK_OBJECT_ID as SUI_CLOCK_OBJECT_ID$1 } from '@mysten/sui/utils';
6
+ import { SuiPriceServiceConnection, SuiPythClient } from '@pythnetwork/pyth-sui-js';
7
+ import { getJsonRpcFullnodeUrl, SuiJsonRpcClient } from '@mysten/sui/jsonRpc';
8
+
9
+ var $=({ctx:e,txBlock:o})=>{let t={protocolPkg:e.address.get("core.packages.protocol.id"),market:e.address.get("core.market"),version:e.address.get("core.version"),coinDecimalsRegistry:e.address.get("core.coinDecimalsRegistry"),xOracle:e.address.get("core.oracles.xOracle")},a=`${e.address.get("referral.id")}::scallop_referral_program::REFERRAL_WITNESS`,s=o.sharedObjectRef({objectId:SUI_CLOCK_OBJECT_ID$1,mutable:false,initialSharedVersion:"1"});return {openObligation:()=>{let[n,c,i]=e.moveCall(o,`${t.protocolPkg}::open_obligation::open_obligation`,[t.version]);return [n,c,i]},returnObligation:(n,c)=>{e.moveCall(o,`${t.protocolPkg}::open_obligation::return_obligation`,[t.version,n,c]);},openObligationEntry:()=>{e.moveCall(o,`${t.protocolPkg}::open_obligation::open_obligation_entry`,[t.version]);},depositCollateral:(n,c,i)=>{let l=e.utils.parseCoinType(i);e.moveCall(o,`${t.protocolPkg}::deposit_collateral::deposit_collateral`,[t.version,n,t.market,c],[l]);},takeCollateral:(n,c,i,l)=>{let u=e.utils.parseCoinType(l);return e.moveCall(o,`${t.protocolPkg}::withdraw_collateral::withdraw_collateral`,[t.version,n,c,t.market,t.coinDecimalsRegistry,o.pure.u64(i),t.xOracle,s],[u])},supply:(n,c)=>{let i=e.utils.parseCoinType(c);return e.moveCall(o,`${t.protocolPkg}::mint::mint`,[t.version,t.market,n,s],[i])},depositEntry:(n,c)=>{let i=e.utils.parseCoinType(c);return e.moveCall(o,`${t.protocolPkg}::mint::mint_entry`,[t.version,t.market,n,s],[i])},withdraw:(n,c)=>{let i=e.utils.parseCoinType(c);return e.moveCall(o,`${t.protocolPkg}::redeem::redeem`,[t.version,t.market,n,s],[i])},withdrawEntry:(n,c)=>{let i=e.utils.parseCoinType(c);return e.moveCall(o,`${t.protocolPkg}::redeem::redeem_entry`,[t.version,t.market,n,s],[i])},borrow:(n,c,i,l)=>{let u=e.utils.parseCoinType(l);return e.moveCall(o,`${t.protocolPkg}::borrow::borrow`,[t.version,n,c,t.market,t.coinDecimalsRegistry,i,t.xOracle,s],[u])},borrowWithReferral:(n,c,i,l,u)=>{let d=e.utils.parseCoinType(u);return e.moveCall(o,`${t.protocolPkg}::borrow::borrow_with_referral`,[t.version,n,c,t.market,t.coinDecimalsRegistry,i,typeof l=="number"?o.pure.u64(l):l,t.xOracle,s],[d,a])},borrowEntry:(n,c,i,l)=>{let u=e.utils.parseCoinType(l);return e.moveCall(o,`${t.protocolPkg}::borrow::borrow_entry`,[t.version,n,c,t.market,t.coinDecimalsRegistry,o.pure.u64(i),t.xOracle,s],[u])},repay:(n,c,i)=>{let l=e.utils.parseCoinType(i);e.moveCall(o,`${t.protocolPkg}::repay::repay`,[t.version,n,t.market,c,s],[l]);},borrowFlashLoan:(n,c)=>{let i=e.utils.parseCoinType(c);return e.moveCall(o,`${t.protocolPkg}::flash_loan::borrow_flash_loan`,[t.version,t.market,n],[i])},repayFlashLoan:(n,c,i)=>{let l=e.utils.parseCoinType(i);e.moveCall(o,`${t.protocolPkg}::flash_loan::repay_flash_loan`,[t.version,t.market,n,c],[l]);},liquidate:(n,c,i,l)=>{let u=e.utils.parseCoinType(i),d=e.utils.parseCoinType(l),[f,m]=e.moveCall(o,`${t.protocolPkg}::liquidate::liquidate`,[t.version,n,t.market,c,t.coinDecimalsRegistry,t.xOracle,s],[u,d]);return [f,m]}}};var k=async(...e)=>{let[o,t,r,a]=e;if(e.length===3&&r)return {obligationId:r};if(e.length===4&&r&&a)return {obligationId:r,obligationKey:a};let s=w(t),n=await o.reads.getObligations(s);if(n.length===0)throw new Error(`No obligation found for sender ${s}`);return {obligationId:n[0].id,obligationKey:n[0].keyId}},Q=({ctx:e,txBlock:o})=>({depositCollateralQuick:async(t,r,a,s=false)=>{let n=w(o),{obligationId:c}=await k(e,o,a),{takeCoin:i,leftCoin:l}=await e.coins.selectCoin(o,r,t,n,s);l&&o.transferObjects([l],n),o.depositCollateral(c,i,r);},takeCollateralQuick:async(t,r,a,s,n)=>{let c=await k(e,o,a,s),i=await e.reads.getObligationCoinNames(c.obligationId);return await e.oracles.updateOracles(o,i,n),o.takeCollateral(c.obligationId,c.obligationKey,t,r)},supplyQuick:async(t,r,a=true,s=false)=>{let n=w(o),{leftCoin:c,takeCoin:i}=await e.coins.selectCoin(o,r,t,n,s);c&&o.transferObjects([c],n);let l=o.supply(i,r);return a?o.mintSCoin(e.utils.parseMarketCoinName(r),l):l},withdrawQuick:async(t,r)=>{let a=w(o),s=e.utils.parseSCoinName(r);if(!s)throw new Error(`No sCoin for ${r}`);let{sCoin:n,marketCoin:c}=await e.coins.selectSCoinOrMarketCoin(o,s,t,a);if(n){let i=o.burnSCoin(s,n);c?o.mergeCoins(c,[i]):c=i;}if(!c)throw new Error(`No market coin for ${r}`);return o.withdraw(c,r)},borrowQuick:async(t,r,a,s,n)=>{let c=await k(e,o,a,s),l=[...await e.reads.getObligationCoinNames(c.obligationId)??[],r];return await e.oracles.updateOracles(o,l,n),o.borrow(c.obligationId,c.obligationKey,t,r)},borrowWithReferralQuick:async(t,r,a,s,n,c)=>{let i=await k(e,o,s,n),u=[...await e.reads.getObligationCoinNames(i.obligationId)??[],r];return await e.oracles.updateOracles(o,u,c),o.borrowWithReferral(i.obligationId,i.obligationKey,a,t,r)},repayQuick:async(t,r,a,s=false)=>{let n=w(o),c=await k(e,o,a),{leftCoin:i,takeCoin:l}=await e.coins.selectCoin(o,r,t,n,s);return i&&o.transferObjects([i],n),o.repay(c.obligationId,l,r)},updateAssetPricesQuick:async(t,r)=>await e.oracles.updateOracles(o,t,r),liquidateQuick:async(t,r,a,s,n)=>{let c=w(o),i=await e.reads.getObligationCoinNames(s);await e.oracles.updateOracles(o,i,n);let{takeCoin:l,leftCoin:u}=await e.coins.selectCoin(o,r,t,c,n?.isSponsoredTx??false);u&&o.transferObjects([u],c);let d=typeof s=="string"?o.object(s):s;return o.liquidate(d,l,r,a)}});var P=class extends SuiPythClient{constructor(t,r,a,s){super(t,r,a);this.params=s;}async updatePriceFeedsWithSponsoredBaseUpdateFee(t,r,a){if(!this.params)throw new Error("Please provide params");let{defaultPackageId:s,gasStationId:n}=this.params,c=await this.getPythPackageId(),i=await this.verifyVaasAndGetHotPotato(t,r,c),l=[];for(let d of a){let f=await this.getPriceFeedObjectId(d);if(!f)throw new Error(`Price feed object not found for ID: ${d}`);l.push(f);}let u=t.sharedObjectRef({objectId:SUI_CLOCK_OBJECT_ID,mutable:false,initialSharedVersion:"1"});for(let d=0;d<l.length;d++){let f=l[d];[i]=t.moveCall({target:`${s}::pyth_sponsor::update_single_price_feed_with_sponsor`,arguments:[t.object(this.pythStateId),i,t.object(f),t.object(n),u]});}t.moveCall({target:`${c}::hot_potato_vector::destroy`,arguments:[i],typeArguments:[`${c}::price_info::PriceInfo`]});}},D=async(e,o,t,r=false)=>{let a=(()=>{try{return e.suiKit.suiInteractor.currentFullNode}catch{return getJsonRpcFullnodeUrl("mainnet")}})(),s=e.suiKit.client.network,n=new SuiJsonRpcClient({url:a,network:s}),c=new P(n,e.address.get("core.oracles.pyth.state"),e.address.get("core.oracles.pyth.wormholeState"),{defaultPackageId:"0xa6f9bec2f9748656b6af8aafb5d7bc1a0d5faf25ac9645fc7f447822cd509325",gasStationId:"0xa8b8dcc9880166edb57b53e05f8df7364d31b5d9b7d107fd27f0b69cf338b687"}),i=Array.from(new Set(o.map(u=>e.address.get(`core.coins.${u}.oracle.pyth.feed`)))),l=e.pythEndpoints??[...e.constants.whitelist.pythEndpoints];for(let u of l)try{let f=await new SuiPriceServiceConnection(u,{priceFeedRequestConfig:{binary:!0}}).getPriceFeedsUpdateData(i);r?await c.updatePriceFeedsWithSponsoredBaseUpdateFee(t.txBlock,f,i):await c.updatePriceFeeds(t.txBlock,f,i);return}catch(d){e.utils.logger.warn("pyth price-feed update failed; trying next endpoint",{endpoint:u,message:d?.message});}};var q=async(e,o,t=[...e.constants.whitelist.lending],r$1)=>{let a=r$1?.usePythPullModel??e.usePythPullModel,s=r$1?.useOnChainXOracleList??e.useOnChainXOracleList,n=new Set((r$1?.sponsoredFeeds??e.sponsoredFeeds).filter(m=>e.constants.whitelist.lending.has(m)?true:(e.utils.logger.warn("sponsored feed not in lending whitelist; skipping",{feed:m}),false))),c=r$1?.isSponsoredTx??false,i=s?await e.query.getAssetOracles():r,l=new Set(Object.values(i).flatMap(({primary:m,secondary:g})=>[...m,...g])),u=(m,g)=>{let S=i[m];return S&&(S.primary.includes(g)||S.secondary.includes(g))},d=[...new Set(t)],f=d.filter(m=>u(m,"pyth"));if(l.has("pyth")){let m=[];for(let g of f){let S=!a&&!n.has(g);(a||S)&&m.push(g);}m.length>0&&await D(e,m,o,c);}for(let m of d)De(e,o,m,i[m]);},De=(e,o,t,r)=>{let a=e.utils.parseCoinType(t);qe(o,r,e.address.get("core.packages.xOracle.id"),e.address.get("core.oracles.xOracle"),e.address.get("core.packages.pyth.id"),e.address.get("core.oracles.pyth.registry"),e.address.get("core.oracles.pyth.state"),e.address.get(`core.coins.${t}.oracle.pyth.feedObject`),e.address.get("core.packages.switchboard.id"),e.address.get("core.oracles.switchboard.registry"),e.address.get(`core.coins.${t}.oracle.switchboard`),e.address.get("core.packages.supra.id"),e.address.get("core.oracles.supra.registry"),e.address.get("core.oracles.supra.holder"),a);},qe=(e,o,t,r,a,s,n,c,i,l,u,d,f,m,g)=>{let S=T=>typeof T=="string"?e.object(T):T;r=S(r),s=S(s),n=S(n),c=S(c),l=S(l),u=S(u),f=S(f),m=S(m);let h=We(e,t,r,g);return Object.entries(o).forEach(([T,I])=>{I.includes("pyth")&&He(T,e,a,h,n,c,s,g),I.includes("supra")&&Ge(T,e,d,h,m,f,g),I.includes("switchboard")&&Fe(T,e,i,h,u,l,g);}),Ue(e,t,r,h,g),e},We=(e,o,t,r)=>{let a=`${o}::x_oracle::price_update_request`,s=[r];return e.moveCall(a,[t],s)},Ue=(e,o,t,r,a)=>{let s=`${o}::x_oracle::confirm_price_update_request`,n=[a];return e.moveCall(s,[t,r,e.sharedObjectRef({objectId:SUI_CLOCK_OBJECT_ID$1,mutable:false,initialSharedVersion:"1"})],n),e},Ge=(e,o,t,r,a,s,n)=>{o.moveCall(`${t}::rule::set_price_as_${e}`,[r,a,s,o.sharedObjectRef({objectId:SUI_CLOCK_OBJECT_ID$1,initialSharedVersion:"1",mutable:false})],[n]);},Fe=(e,o,t,r,a,s,n)=>{o.moveCall(`${t}::rule::set_as_${e}_price`,[r,a,s,o.sharedObjectRef({objectId:SUI_CLOCK_OBJECT_ID$1,initialSharedVersion:"1",mutable:false})],[n]);},He=(e,o,t,r,a,s,n,c)=>{o.moveCall(`${t}::rule::set_price_as_${e}`,[r,a,s,n,o.sharedObjectRef({objectId:SUI_CLOCK_OBJECT_ID$1,initialSharedVersion:"1",mutable:false})],[c]);};var W=async(e,o)=>{let t=typeof o=="string"?o:"objectId"in o?o.objectId:void 0;if(t===void 0)throw new d$1("getObligationCoinNames expects an object id (string) or an object reference");let r=await e.query.repos.obligation.getObligationData(t);if(!r)return;let a=r.collaterals.map(i=>i.type),s=r.debts.map(i=>i.type);return [...new Set([...a,...s])].map(i=>e.utils.parseCoinNameFromType(i))};var G=(e,o)=>{let t=o instanceof Transaction?new SuiTxBlock(o):o||new SuiTxBlock,r={address:e.address,moveCall:e.moveCall.bind(e),utils:e.utils},a={reads:{getObligations:i=>e.query.getObligations(i),getObligationCoinNames:i=>W(e,i)},coins:{selectCoin:(...i)=>e.selectCoin(...i),selectSCoinOrMarketCoin:(...i)=>e.selectSCoinOrMarketCoin(...i)},oracles:{updateOracles:(i,l,u)=>q(e,i,l,u)},utils:{parseMarketCoinName:i=>e.utils.parseMarketCoinName(i),parseSCoinName:i=>e.utils.parseSCoinName(i)}},s=$({ctx:r,txBlock:t}),n=new Proxy(t,{get:(i,l)=>l in s?Reflect.get(s,l):Reflect.get(i,l)}),c=Q({ctx:a,txBlock:n});return new Proxy(n,{get:(i,l)=>l in c?Reflect.get(c,l):Reflect.get(i,l)})};var F=({ctx:e,txBlock:o})=>{let t={spoolPkg:e.address.get("spool.id")},r=o.sharedObjectRef({objectId:SUI_CLOCK_OBJECT_ID$1,mutable:false,initialSharedVersion:"1"});return {createStakeAccount:a=>{let s=e.utils.parseMarketCoinType(a),n=e.address.get(`spool.pools.${a}.id`);return e.moveCall(o,`${t.spoolPkg}::user::new_spool_account`,[n,r],[s])},stake:(a,s,n)=>{let c=e.utils.parseMarketCoinType(n),i=e.address.get(`spool.pools.${n}.id`);e.moveCall(o,`${t.spoolPkg}::user::stake`,[i,a,s,r],[c]);},unstake:(a,s,n)=>{let c=e.utils.parseMarketCoinType(n),i=e.address.get(`spool.pools.${n}.id`);return e.moveCall(o,`${t.spoolPkg}::user::unstake`,[i,a,s,r],[c])},claim:(a,s)=>{let n=e.address.get(`spool.pools.${s}.id`),c=e.address.get(`spool.pools.${s}.rewardPoolId`),i=e.utils.parseMarketCoinType(s),l=e.utils.getSpoolRewardCoinName(),u=e.utils.parseCoinType(l);return e.moveCall(o,`${t.spoolPkg}::user::redeem_rewards`,[n,c,a,r],[i,u])}}};var H=async(...e)=>{let[o,t,r,a]=e;if(e.length===4&&a)return [a];let s=w(t),n=await o.reads.getAllStakeAccounts(s);if(n[r].length===0)throw new Error(`No stake account id found for sender ${s}`);return n[r].map(c=>c.id)},Ye=async(...e)=>{let[o,t,r,a]=e,s=w(t),n=await o.reads.getAllStakeAccounts(s);if(n[r].length===0)throw new Error(`No stake account found for sender ${s}`);return a?n[r].filter(i=>i.id===a):n[r]},X=async(e,o,t,r,a,s,n=false)=>{try{let{takeCoin:c,leftCoin:i,totalAmount:l}=n?await e.coins.selectSCoin(o,r,a,s):await e.coins.selectMarketCoin(o,r,a,s);if(n){let u=o.burnSCoin(r,c);o.stake(t,u,r);}else o.stake(t,c,r);return o.transferObjects([i],s),l}catch{return 0}},J=({ctx:e,txBlock:o})=>({stakeQuick:async(t,r,a)=>{let s=w(o),n=await H(e,o,r,a);if(n.length===0)throw new Error(`No stakeAccountIds found for user ${s}`);if(typeof t=="number"){let c=await X(e,o,n[0],r,t,s);t-=c,t>0&&await X(e,o,n[0],r,t,s,true);}else o.stake(n[0],t,r);},unstakeQuick:async(t,r,a,s=true)=>{let n=await Ye(e,o,r,a),c=[];for(let i of n){if(i.staked===0)continue;let l=Math.min(t,i.staked),u=o.unstake(i.id,l,r);if(s){let d=o.mintSCoin(r,u);c.push(d);}else c.push(u);if(t-=l,t<=0)break}if(c.length>0){let i=c[0];return c.length>1&&o.mergeCoins(i,c.slice(1)),i}},claimQuick:async(t,r)=>{let a=await H(e,o,t,r),s=[];for(let n of a){let c=await o.claim(n,t);s.push(c);}return s}});var z=(e,o)=>{let t=o instanceof Transaction?new SuiTxBlock(o):o||new SuiTxBlock,r={address:e.address,moveCall:e.moveCall.bind(e),utils:e.utils},a={reads:{getAllStakeAccounts:i=>e.query.getAllStakeAccounts(i)},coins:{selectMarketCoin:(...i)=>e.selectMarketCoin(...i),selectSCoin:(...i)=>e.selectSCoin(...i)}},s=F({ctx:r,txBlock:t}),n=new Proxy(t,{get:(i,l)=>l in s?Reflect.get(s,l):Reflect.get(i,l)}),c=J({ctx:a,txBlock:n});return new Proxy(n,{get:(i,l)=>l in c?Reflect.get(c,l):Reflect.get(i,l)})};var Z=({ctx:e,txBlock:o})=>{let t={borrowIncentivePkg:e.address.get("borrowIncentive.id"),query:e.address.get("borrowIncentive.query"),config:e.address.get("borrowIncentive.config"),incentivePools:e.address.get("borrowIncentive.incentivePools"),incentiveAccounts:e.address.get("borrowIncentive.incentiveAccounts"),obligationAccessStore:e.address.get("core.obligationAccessStore")},r={table:e.address.get("vesca.table"),treasury:e.address.get("vesca.treasury"),config:e.address.get("vesca.config")},a=o.sharedObjectRef({objectId:SUI_CLOCK_OBJECT_ID,mutable:false,initialSharedVersion:"1"});return {stakeObligation:(s,n)=>{e.moveCall(o,`${t.borrowIncentivePkg}::user::stake`,[t.config,t.incentivePools,t.incentiveAccounts,n,s,t.obligationAccessStore,a]);},stakeObligationWithVesca:(s,n,c)=>{e.moveCall(o,`${t.borrowIncentivePkg}::user::stake_with_ve_sca_v2`,[t.config,t.incentivePools,t.incentiveAccounts,n,s,t.obligationAccessStore,r.config,r.treasury,r.table,c,e.address.get("vesca.subsTable"),e.address.get("vesca.subsWhitelist"),a],[]);},unstakeObligation:(s,n)=>{e.moveCall(o,`${t.borrowIncentivePkg}::user::unstake_v2`,[t.config,t.incentivePools,t.incentiveAccounts,n,s,e.address.get("vesca.subsTable"),e.address.get("vesca.subsWhitelist"),a]);},claimBorrowIncentive:(s,n,c)=>{let i=e.utils.parseCoinType(c);return e.moveCall(o,`${t.borrowIncentivePkg}::user::redeem_rewards`,[t.config,t.incentivePools,t.incentiveAccounts,n,s,a],[i])},deactivateBoost:(s,n)=>{e.moveCall(o,`${t.borrowIncentivePkg}::user::deactivate_boost_v2`,[t.config,t.incentivePools,t.incentiveAccounts,s,n,e.address.get("vesca.subsTable"),e.address.get("vesca.subsWhitelist"),a]);}}};var O=async(...e)=>{let[o,t,r,a]=e;if(e.length===4&&r&&a&&typeof r=="string"){let i=await o.reads.getObligationLocked(r);return {obligationId:r,obligationKey:a,obligationLocked:i}}let s=w(t),n=await o.reads.getObligations(s);if(n.length===0)throw new Error(`No obligation found for sender ${s}`);let c=n.find(i=>i.id===r||i.keyId===a);if(!c)throw new Error(`No obligation found for sender ${s} with id ${r} or key ${a}`);return {obligationId:c.id,obligationKey:c.keyId,obligationLocked:c.locked}},ee=({ctx:e,txBlock:o})=>({stakeObligationQuick:async(t,r)=>{let{obligationId:a,obligationKey:s,obligationLocked:n}=await O(e,o,t,r),c=!!o.txBlock.getData().commands.find(i=>i.$kind==="MoveCall"&&(v(i)===`${g}::user::unstake`||v(i)===`${e.address.get("borrowIncentive.id")}::user::unstake_v2`||v(i)===`${e.address.get("borrowIncentive.id")}::user::unstake`));(!n||c)&&o.stakeObligation(a,s);},stakeObligationWithVeScaQuick:async(t,r,a)=>{let{obligationId:s,obligationKey:n,obligationLocked:c}=await O(e,o,t,r),i=!!o.txBlock.getData().commands.find(l=>l.$kind==="MoveCall"&&(v(l)===`${g}::user::unstake`||v(l)===`${e.address.get("borrowIncentive.id")}::user::unstake_v2`||v(l)===`${e.address.get("borrowIncentive.id")}::user::unstake`));if(!c||i){let u=await e.reads.getBindedVeScaKey(s)??a;u?o.stakeObligationWithVesca(s,n,u):o.stakeObligation(s,n);}},unstakeObligationQuick:async(t,r)=>{let{obligationId:a,obligationKey:s,obligationLocked:n}=await O(e,o,t,r);n&&o.unstakeObligation(a,s);},claimBorrowIncentiveQuick:async(t,r,a)=>{let{obligationId:s,obligationKey:n}=await O(e,o,r,a);return o.claimBorrowIncentive(s,n,t)}});var oe=(e,o)=>{let t=o instanceof Transaction?new SuiTxBlock(o):o||new SuiTxBlock,r={address:e.address,moveCall:e.moveCall.bind(e),utils:e.utils},a={address:e.address,reads:{getObligations:i=>e.query.getObligations(i),getObligationLocked:i=>e.query.getObligationLocked(i),getBindedVeScaKey:i=>e.query.getBindedVeScaKey(i)}},s=Z({ctx:r,txBlock:t}),n=new Proxy(t,{get:(i,l)=>l in s?Reflect.get(s,l):Reflect.get(i,l)}),c=ee({ctx:a,txBlock:n});return new Proxy(n,{get:(i,l)=>l in c?Reflect.get(c,l):Reflect.get(i,l)})};var ne=({ctx:e,txBlock:o})=>{let t={id:e.address.get("vesca.id"),table:e.address.get("vesca.table"),treasury:e.address.get("vesca.treasury"),config:e.address.get("vesca.config"),subsTable:e.address.get("vesca.subsTable")},r=o.sharedObjectRef({objectId:SUI_CLOCK_OBJECT_ID,mutable:false,initialSharedVersion:"1"});return {lockSca:(a,s)=>e.moveCall(o,`${t.id}::ve_sca::mint_ve_sca_key`,[t.config,t.table,t.treasury,a,s,r],[]),extendLockPeriod:(a,s)=>{e.moveCall(o,`${t.id}::ve_sca::extend_lock_period`,[t.config,a,t.table,t.treasury,s,r],[]);},extendLockAmount:(a,s)=>{e.moveCall(o,`${t.id}::ve_sca::lock_more_sca`,[t.config,a,t.table,t.treasury,s,r],[]);},renewExpiredVeSca:(a,s,n)=>{e.moveCall(o,`${t.id}::ve_sca::renew_expired_ve_sca`,[t.config,a,t.table,t.treasury,s,n,r],[]);},redeemSca:a=>e.moveCall(o,`${t.id}::ve_sca::redeem`,[t.config,a,t.table,t.treasury,r],[]),mintEmptyVeSca:()=>e.moveCall(o,`${t.id}::ve_sca::mint_ve_sca_placeholder_key`,[t.config,t.table],[]),splitVeSca:(a,s)=>e.moveCall(o,`${t.id}::ve_sca::split`,[t.config,a,t.table,t.subsTable,o.pure.u64(s)]),mergeVeSca:(a,s)=>e.moveCall(o,`${t.id}::ve_sca::merge`,[t.config,a,s,t.table,t.subsTable,o.sharedObjectRef({objectId:SUI_CLOCK_OBJECT_ID,mutable:false,initialSharedVersion:"1"})],[])}};var b=async(...e)=>{let[o,t,r]=e;if(e.length===3&&r&&typeof r<"u"){let n=await o.reads.getVeSca(r);return n||void 0}let a=w(t),s=await o.reads.getVeScas({walletAddress:a});if(s.length!==0)return r?s.find(({keyId:n})=>(typeof r=="string"?r:r.objectId)===n):s[0]},M=async(...e)=>{let[o,t,r]=e;try{return await o.reads.isVeScaKeyInSubsTable(t,r)}catch(a){return o.utils.logger.error("isInSubsTable lookup failed",{veScaKey:t,tableId:r,message:a?.message}),false}},se=({ctx:e,txBlock:o})=>({lockScaQuick:async({amountOrCoin:t,lockPeriodInDays:r,autoCheck:a=true,veScaKey:s})=>{let n=w(o),c=await b(e,o,s),i=e.utils.getUnlockAt(r,c?.unlockAt);a&&z$1(t,r,i,c?.unlockAt);let l,u=[];if(t!==void 0&&typeof t=="number"){let m=await e.utils.selectCoins({amount:t,coinType:d,ownerAddress:n}),[g,S]=o.takeAmountFromCoins(m,t);l=g,u.push(S);}else l=t;let d$1=!c,f=!d$1&&c.unlockAt<=new Date().getTime();if(d$1||f){if(l)if(d$1){let m=o.lockSca(l,i);u.push(m);}else {if(c.lockedScaCoin!==0){let m=o.redeemSca(c.keyId);u.push(m);}o.renewExpiredVeSca(c.keyId,l,i);}}else l&&r?(o.extendLockPeriod(c.keyId,i),o.extendLockAmount(c.keyId,l)):r?o.extendLockPeriod(c.keyId,i):l&&o.extendLockAmount(c.keyId,l);u.length>0&&o.transferObjects(u,n);},extendLockPeriodQuick:async({lockPeriodInDays:t,veScaKey:r,autoCheck:a=true})=>{let s=await b(e,o,r),n=e.utils.getUnlockAt(t,s?.unlockAt);a&&y(t,n,s?.unlockAt),s&&o.extendLockPeriod(s.keyId,n);},extendLockAmountQuick:async({scaAmount:t,veScaKey:r,autoCheck:a=true})=>{let s=w(o),n=await b(e,o,r);if(a&&A$1(t,n?.unlockAt),n){let c=await e.utils.selectCoins({amount:t,coinType:d,ownerAddress:s}),[i,l]=o.takeAmountFromCoins(c,t);o.extendLockAmount(n.keyId,i),o.transferObjects([l],s);}},renewExpiredVeScaQuick:async({scaAmount:t,lockPeriodInDays:r,veScaKey:a,autoCheck:s=true})=>{let n=w(o),c=await b(e,o,a),i=e.utils.getUnlockAt(r,c?.unlockAt);if(s&&B(t,r,c?.unlockAt),c){let l=[];if(c.lockedScaCoin!==0){let m=o.redeemSca(c.keyId);l.push(m);}let u=await e.utils.selectCoins({amount:t,coinType:d,ownerAddress:n}),[d$1,f]=o.takeAmountFromCoins(u,t);l.push(f),o.renewExpiredVeSca(c.keyId,d$1,i),o.transferObjects(l,n);}},redeemScaQuick:async({veScaKey:t,transferSca:r})=>{let a=w(o),s=await b(e,o,t);if(x(s?.unlockAt),s){let n=o.redeemSca(s.keyId);if(r){o.transferObjects([n],a);return}return n}},splitVeScaQuick:async({splitAmount:t,veScaKey:r,transferVeScaKey:a=true})=>{let s=await M(e,r,e.address.get("vesca.subsTable")),n=!!o.txBlock.getData().commands.find(i=>i.$kind==="MoveCall"&&v(i)===`${e.address.get("borrowIncentive.id")}::user::unstake_v2`);if(s&&!n)throw new Error("Key cannot be in the subs table, please call unsubscribe vesca or unstake obligation first");let c=o.splitVeSca(r,t);if(a){o.transferObjects([c],w(o));return}else return c},mergeVeScaQuick:async({targetVeScaKey:t,sourceVeScaKey:r})=>{let a=e.address.get("vesca.subsTableId"),[s,n]=await Promise.all([M(e,t,a),M(e,r,a)]),c=!!o.txBlock.getData().commands.find(u=>u.$kind==="MoveCall"&&v(u)===`${e.address.get("borrowIncentive.id")}::user::unstake_v2`);if((s||n)&&!c)throw new Error("Both target and source cannot be in the subs table. Please call unsubscribe vesca or unstake obligation first");let[i,l]=await Promise.all([e.reads.getVeSca(r),e.reads.getVeSca(t)]);if(!i||!l)throw new Error("Source or target veSCA not found");return i.unlockAt<l.unlockAt?o.extendLockPeriod(i.keyId,l.unlockAt/1e3):i.unlockAt>l.unlockAt&&o.extendLockPeriod(l.keyId,i.unlockAt/1e3),o.mergeVeSca(t,r)}});var ae=(e,o)=>{let t=o instanceof Transaction$1?new SuiTxBlock(o):o||new SuiTxBlock,r={address:e.address,moveCall:e.moveCall.bind(e),utils:e.utils},a={address:e.address,utils:e.utils,reads:{getVeSca:i=>e.query.getVeSca(i),getVeScas:i=>e.query.getVeScas(i),isVeScaKeyInSubsTable:(i,l)=>e.query.repos.veSca.isVeScaKeyInSubsTable(i,l)}},s=ne({ctx:r,txBlock:t}),n=new Proxy(t,{get:(i,l)=>l in s?Reflect.get(s,l):Reflect.get(i,l)}),c=se({ctx:a,txBlock:n});return new Proxy(n,{get:(i,l)=>l in c?Reflect.get(c,l):Reflect.get(i,l)})};var ce=({ctx:e,txBlock:o})=>{let t={referralPgkId:e.address.get("referral.id"),referralBindings:e.address.get("referral.referralBindings"),referralRevenuePool:e.address.get("referral.referralRevenuePool"),authorizedWitnessList:e.address.get("referral.authorizedWitnessList"),referralTiers:e.address.get("referral.referralTiers"),version:e.address.get("referral.version")},r=e.address.get("vesca.table"),a=o.sharedObjectRef({objectId:SUI_CLOCK_OBJECT_ID,mutable:false,initialSharedVersion:"1"});return {bindToReferral:s=>{e.moveCall(o,`${t.referralPgkId}::referral_bindings::bind_ve_sca_referrer`,[t.referralBindings,o.pure.id(s),r,a],[]);},claimReferralTicket:s=>{let n=e.utils.parseCoinType(s);return e.moveCall(o,`${t.referralPgkId}::scallop_referral_program::claim_ve_sca_referral_ticket`,[t.version,r,t.referralBindings,t.authorizedWitnessList,t.referralTiers,a],[n])},burnReferralTicket:(s,n)=>{let c=e.utils.parseCoinType(n);e.moveCall(o,`${t.referralPgkId}::scallop_referral_program::burn_ve_sca_referral_ticket`,[t.version,s,t.referralRevenuePool,a],[c]);},claimReferralRevenue:(s,n)=>{let c=e.utils.parseCoinType(n);return e.moveCall(o,`${t.referralPgkId}::referral_revenue_pool::claim_revenue_with_ve_sca_key`,[t.version,t.referralRevenuePool,s,a],[c])},unbindReferral:()=>e.moveCall(o,`${t.referralPgkId}::referral_bindings::unbind_ve_sca_referrer`,[t.referralBindings])}};var le=({ctx:e,txBlock:o})=>({claimReferralRevenueQuick:async(t,r=[...e.constants.whitelist.lending])=>{let a=w(o),s=[];for(let n of r)if(n==="sui"){let c=o.claimReferralRevenue(t,n);s.push(c);}else {let c=o.claimReferralRevenue(t,n);try{let i=await e.utils.selectCoins({amount:1/0,coinType:e.utils.parseCoinType(n),ownerAddress:a});o.mergeCoins(c,i.slice(0,500));}catch{}finally{s.push(c);}}s.length>0&&o.transferObjects(s,a);}});var de=(e,o)=>{let t=o instanceof Transaction$1?new SuiTxBlock(o):o||new SuiTxBlock,r={address:e.address,moveCall:e.moveCall.bind(e),utils:e.utils},a={utils:e.utils,constants:{whitelist:e.constants.whitelist}},s=ce({ctx:r,txBlock:t}),n=new Proxy(t,{get:(i,l)=>l in s?Reflect.get(s,l):Reflect.get(i,l)}),c=le({ctx:a,txBlock:n});return new Proxy(n,{get:(i,l)=>l in c?Reflect.get(c,l):Reflect.get(i,l)})};var ge=({ctx:e,txBlock:o})=>{let t={pkgId:e.address.get("loyaltyProgram.id"),scaRewardPool:e.address.get("loyaltyProgram.rewardPool")},r={object:e.address.get("vesca.object"),protocolConfig:e.address.get("vesca.config"),veScaTable:e.address.get("vesca.table"),subsTable:e.address.get("vesca.subsTable")},a={pkgId:e.address.get("veScaLoyaltyProgram.id"),veScaRewardPool:e.address.get("veScaLoyaltyProgram.veScaRewardPool")};return {claimLoyaltyRevenue:s=>e.moveCall(o,`${t.pkgId}::reward_pool::redeem_reward`,[t.scaRewardPool,s]),claimVeScaLoyaltyReward:s=>e.moveCall(o,`${a.pkgId}::ve_sca_reward::redeem_reward`,[a.veScaRewardPool,s,r.protocolConfig,r.veScaTable,r.subsTable])}};var me=({ctx:e,txBlock:o})=>({claimLoyaltyRevenueQuick:async t=>{t=t??(await e.reads.getVeScas())[0]?.keyId;let r=w(o);if(!t)throw new Error(`No veScaKey found for user ${r}`);let a=o.claimLoyaltyRevenue(t),s=e.constants.coinTypes.sca;if(!s)throw new Error("Coin type sca not found");await e.utils.mergeSimilarCoins(o,a,s,w(o)),o.transferObjects([a],r);},claimVeScaLoyaltyRewardQuick:async t=>{t=t??(await e.reads.getVeScas())[0]?.keyId;let r=w(o);if(!t)throw new Error(`No veScaKey found for user ${r}`);let a=o.claimVeScaLoyaltyReward(t);o.transferObjects([a],r);}});var fe=(e,o)=>{let t=o instanceof Transaction?new SuiTxBlock(o):o||new SuiTxBlock,r={address:e.address,moveCall:e.moveCall.bind(e),utils:e.utils},a={utils:e.utils,reads:{getVeScas:(...i)=>e.query.getVeScas(...i)},constants:{coinTypes:e.constants.coinTypes}},s=ge({ctx:r,txBlock:t}),n=new Proxy(t,{get:(i,l)=>l in s?Reflect.get(s,l):Reflect.get(i,l)}),c=me({ctx:a,txBlock:n});return new Proxy(n,{get:(i,l)=>l in c?Reflect.get(c,l):Reflect.get(i,l)})};var Se=({ctx:e,txBlock:o})=>{let t={pkgId:e.address.get("scoin.id")};return {mintSCoin:(r,a)=>{let s=e.utils.parseSCoinType(r);if(!s)throw new Error(`Invalid marketCoinName name: ${r}`);return e.moveCall(o,`${t.pkgId}::s_coin_converter::mint_s_coin`,[e.utils.getSCoinTreasury(r),a],[s,e.utils.parseUnderlyingSCoinType(r)])},burnSCoin:(r,a)=>{let s=e.utils.parseSCoinType(r);if(!s)throw new Error(`Invalid sCoin name: ${r}`);return e.moveCall(o,`${t.pkgId}::s_coin_converter::burn_s_coin`,[e.utils.getSCoinTreasury(r),a],[s,e.utils.parseUnderlyingSCoinType(r)])}}};var ye=({ctx:e,txBlock:o})=>({mintSCoinQuick:async(t,r)=>{let a=w(o),{leftCoin:s,takeCoin:n}=await e.coins.selectMarketCoin(o,t,r,a);return o.transferObjects([s],a),o.mintSCoin(t,n)},burnSCoinQuick:async(t,r)=>{let a=w(o),{leftCoin:s,takeCoin:n}=await e.coins.selectSCoin(o,t,r,a);return o.transferObjects([s],a),o.burnSCoin(t,n)}});var Te=(e,o)=>{let t=o instanceof Transaction$1?new SuiTxBlock(o):o||new SuiTxBlock,r={address:e.address,moveCall:e.moveCall.bind(e),utils:e.utils},a={utils:e.utils,coins:{selectMarketCoin:(...i)=>e.selectMarketCoin(...i),selectSCoin:(...i)=>e.selectSCoin(...i)}},s=Se({ctx:r,txBlock:t}),n=new Proxy(t,{get:(i,l)=>l in s?Reflect.get(s,l):Reflect.get(i,l)}),c=ye({ctx:a,txBlock:n});return new Proxy(n,{get:(i,l)=>l in c?Reflect.get(c,l):Reflect.get(i,l)})};var ke=({ctx:e,txBlock:o})=>{let t={pkgId:e.address.get("obligationNaming.id"),namingRegistry:e.address.get("obligationNaming.namingRegistry")};return {setObligationName:(r,a)=>{e.moveCall(o,`${t.pkgId}::obligation_naming::set_name`,[t.namingRegistry,r,o.pure.string(a)],[]);},removeObligationName:r=>{e.moveCall(o,`${t.pkgId}::obligation_naming::remove_name`,[t.namingRegistry,r],[]);}}};var he=(e,o)=>{let t=o instanceof Transaction?new SuiTxBlock(o):o||new SuiTxBlock,r={address:e.address,moveCall:e.moveCall.bind(e),utils:e.utils},a=ke({ctx:r,txBlock:t});return new Proxy(t,{get:(s,n)=>n in a?Reflect.get(a,n):Reflect.get(s,n)})};var we=["openObligation","returnObligation","openObligationEntry","depositCollateral","takeCollateral","supply","depositEntry","withdraw","withdrawEntry","borrow","borrowWithReferral","borrowEntry","repay","borrowFlashLoan","repayFlashLoan","liquidate"],ve=["depositCollateralQuick","takeCollateralQuick","borrowQuick","borrowWithReferralQuick","supplyQuick","withdrawQuick","repayQuick","updateAssetPricesQuick","liquidateQuick"],Oe=["createStakeAccount","stake","unstake","claim","stakeQuick","unstakeQuick","claimQuick"],Ae=["stakeObligation","stakeObligationWithVesca","unstakeObligation","claimBorrowIncentive","deactivateBoost","stakeObligationQuick","stakeObligationWithVeScaQuick","unstakeObligationQuick","claimBorrowIncentiveQuick"],Ie=["lockSca","extendLockPeriod","extendLockAmount","renewExpiredVeSca","redeemSca","mintEmptyVeSca","splitVeSca","mergeVeSca","lockScaQuick","extendLockPeriodQuick","extendLockAmountQuick","renewExpiredVeScaQuick","redeemScaQuick","splitVeScaQuick","mergeVeScaQuick"],_e=["bindToReferral","claimReferralTicket","burnReferralTicket","claimReferralRevenue","unbindReferral","claimReferralRevenueQuick"],Pe=["claimLoyaltyRevenue","claimVeScaLoyaltyReward","claimLoyaltyRevenueQuick","claimVeScaLoyaltyRewardQuick"],Me=["mintSCoin","burnSCoin","mintSCoinQuick","burnSCoinQuick"],Re=["setObligationName","removeObligationName"];var C=(e,o)=>{let t={};for(let r of o){let a=e[r];typeof a=="function"&&(t[r]=a);}return Object.freeze(t)},je=e=>{let o=e;return Object.freeze({core:C(o,[...we,...ve]),spool:C(o,Oe),borrowIncentive:C(o,Ae),vesca:C(o,Ie),referral:C(o,_e),loyalty:C(o,Pe),sCoin:C(o,Me),obligationNaming:C(o,Re)})},Be=["core","spool","borrowIncentive","vesca","referral","loyalty","sCoin","obligationNaming"];var Ne=(e,o)=>{let t=he(e,o),r=ae(e,t),a=fe(e,r),s=oe(e,a),n=de(e,s),c=Te(e,n),i=z(e,c),l=G(e,i),u=new Proxy(l,{get:(m,g)=>g in r?Reflect.get(r,g):g in s?Reflect.get(s,g):g in n?Reflect.get(n,g):g in i?Reflect.get(i,g):g in a?Reflect.get(a,g):g in c?Reflect.get(c,g):g in t?Reflect.get(t,g):Reflect.get(m,g)}),d=je(u),f=new Set(Be);return new Proxy(u,{get:(m,g)=>typeof g=="string"&&f.has(g)?d[g]:Reflect.get(m,g),has:(m,g)=>typeof g=="string"&&f.has(g)?true:Reflect.has(m,g)})};var Le={effects:true,events:true},A=class{constructor(o){this.suiKit=o;}get client(){return this.suiKit.client.core}signTransaction(o,t){return this.suiKit.signTxn(o,t)}executeTransaction(o){return this.client.executeTransaction({include:Le,...o})}signAndExecuteTransaction({transaction:o,additionalSignatures:t,signer:r,derivePathParams:a}){return this.client.signAndExecuteTransaction({transaction:o,additionalSignatures:t,include:Le,signer:r??this.suiKit.getKeypair(a)})}signAndSendTxn(o,t){let r=o instanceof Uint8Array?o:"txBlock"in o?o.txBlock:o;return this.signAndExecuteTransaction({transaction:r,derivePathParams:t})}};var R=class{query;usePythPullModel;useOnChainXOracleList;sponsoredFeeds;suiKit;pythEndpoints;constructor({usePythPullModel:o=true,useOnChainXOracleList:t=true,sponsoredFeeds:r=[],pythEndpoints:a=[],query:s,...n}){this.suiKit=new SuiKit({...n,fullnodeUrls:[n.fullnodeUrl]}),this.query=s??new R$1({...n,walletAddress:n.walletAddress??this.suiKit.currentAddress}),this.usePythPullModel=o,this.useOnChainXOracleList=t,this.sponsoredFeeds=r,this.pythEndpoints=a;}_executor;get executor(){return this._executor??=new A(this.suiKit)}get utils(){return this.query.utils}get constants(){return this.utils.constants}get walletAddress(){return this.utils.walletAddress}get onchain(){return this.utils.onchain}get address(){return this.utils.address}async init(o=false){await this.query.init(o);}createTxBlock(o){return Ne(this,o)}async selectCoin(o,t,r,a=this.walletAddress,s=false){if(t==="sui"&&!s){let[n]=o.splitSUIFromGas([r]);return {takeCoin:n}}else {let n=this.utils.parseCoinType(t),c=await this.utils.selectCoins({amount:r,coinType:n,ownerAddress:a}),i=c.reduce((d,f)=>(d+=Number(f.balance),d),0),[l,u]=o.takeAmountFromCoins(c,r);return {takeCoin:l,leftCoin:u,totalAmount:i}}}async selectMarketCoin(o,t,r,a=this.walletAddress){let s=this.utils.parseMarketCoinType(t),n=await this.utils.selectCoins({amount:r,coinType:s,ownerAddress:a}),c=n.reduce((u,d)=>(u+=Number(d.balance),u),0),[i,l]=o.takeAmountFromCoins(n,Math.min(r,c));return {takeCoin:i,leftCoin:l,totalAmount:c}}async selectSCoin(o,t,r,a=this.walletAddress){let s=this.utils.parseSCoinType(t),n=await this.utils.selectCoins({amount:r,coinType:s,ownerAddress:a}),c=n.reduce((u,d)=>(u+=Number(d.balance),u),0),[i,l]=o.takeAmountFromCoins(n,Math.min(c,r));return {takeCoin:i,leftCoin:l,totalAmount:c}}async selectSCoinOrMarketCoin(o,t,r,a=this.walletAddress){let s=r,n={sCoins:[],marketCoins:[],leftCoins:[]};try{let{leftCoin:l,takeCoin:u,totalAmount:d}=await this.selectSCoin(o,t,s,a);if(n.leftCoins.push(l),n.sCoins.push(u),s-=d,s>0){let{leftCoin:f,takeCoin:m}=await this.selectMarketCoin(o,t,r,a);o.transferObjects([f],a),n.marketCoins.push(m);}}catch{let{takeCoin:u,leftCoin:d}=await this.selectMarketCoin(o,t,r,a);n.leftCoins.push(d),n.marketCoins.push(u);}o.transferObjects(n.leftCoins,a);let c=n.marketCoins.length>0?n.marketCoins.length>1?o.mergeCoins(n.marketCoins[0],n.marketCoins.slice(1)):n.marketCoins[0]:void 0;return {sCoin:n.sCoins.length>0?n.sCoins.length>1?o.mergeCoins(n.sCoins[0],n.sCoins.slice(1)):n.sCoins[0]:void 0,marketCoin:c}}async signAndSendTxBlock(o){return await this.executor.signAndSendTxn(o)}moveCall(o,t,r,a){return o.moveCall(t,r,a)}},er=R;
10
+
11
+ export { Ne as a, A as b, er as c };