@gearbox-protocol/sdk 13.3.3 → 13.3.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/dist/cjs/sdk/GearboxSDK.js +135 -20
  2. package/dist/cjs/sdk/accounts/AbstractCreditAccountsService.js +78 -157
  3. package/dist/cjs/sdk/accounts/CreditAccountsServiceV310.js +5 -5
  4. package/dist/cjs/sdk/base/BaseContract.js +26 -6
  5. package/dist/cjs/sdk/base/ChainContractsRegister.js +39 -2
  6. package/dist/cjs/sdk/base/Construct.js +15 -3
  7. package/dist/cjs/sdk/base/TokensMeta.js +23 -0
  8. package/dist/cjs/sdk/constants/address-provider.js +0 -22
  9. package/dist/cjs/sdk/core/AbstractAddressProviderContract.js +15 -0
  10. package/dist/cjs/sdk/market/MarketRegister.js +74 -3
  11. package/dist/cjs/sdk/market/oracle/PriceOracleBaseContract.js +31 -50
  12. package/dist/cjs/sdk/market/pricefeeds/PriceFeedRef.js +16 -0
  13. package/dist/cjs/sdk/market/pricefeeds/PriceFeedsRegister.js +55 -12
  14. package/dist/cjs/sdk/options.js +30 -24
  15. package/dist/cjs/sdk/plugins/BasePlugin.js +24 -0
  16. package/dist/cjs/sdk/pools/AbstractPoolService.js +6 -0
  17. package/dist/cjs/sdk/router/AbstractRouterContract.js +4 -1
  18. package/dist/cjs/sdk/router/RouterV310Contract.js +20 -15
  19. package/dist/cjs/sdk/utils/AddressMap.js +53 -17
  20. package/dist/cjs/sdk/utils/AddressSet.js +9 -0
  21. package/dist/cjs/sdk/utils/viem/sendRawTx.js +16 -0
  22. package/dist/esm/sdk/GearboxSDK.js +135 -20
  23. package/dist/esm/sdk/accounts/AbstractCreditAccountsService.js +78 -157
  24. package/dist/esm/sdk/accounts/CreditAccountsServiceV310.js +5 -5
  25. package/dist/esm/sdk/base/BaseContract.js +26 -6
  26. package/dist/esm/sdk/base/ChainContractsRegister.js +39 -2
  27. package/dist/esm/sdk/base/Construct.js +15 -3
  28. package/dist/esm/sdk/base/TokensMeta.js +23 -0
  29. package/dist/esm/sdk/constants/address-provider.js +0 -21
  30. package/dist/esm/sdk/core/AbstractAddressProviderContract.js +15 -0
  31. package/dist/esm/sdk/market/MarketRegister.js +74 -3
  32. package/dist/esm/sdk/market/oracle/PriceOracleBaseContract.js +31 -50
  33. package/dist/esm/sdk/market/pricefeeds/PriceFeedRef.js +16 -0
  34. package/dist/esm/sdk/market/pricefeeds/PriceFeedsRegister.js +55 -12
  35. package/dist/esm/sdk/options.js +30 -24
  36. package/dist/esm/sdk/plugins/BasePlugin.js +24 -0
  37. package/dist/esm/sdk/pools/AbstractPoolService.js +6 -0
  38. package/dist/esm/sdk/router/AbstractRouterContract.js +4 -1
  39. package/dist/esm/sdk/router/RouterV310Contract.js +20 -15
  40. package/dist/esm/sdk/utils/AddressMap.js +53 -17
  41. package/dist/esm/sdk/utils/AddressSet.js +9 -0
  42. package/dist/esm/sdk/utils/viem/sendRawTx.js +19 -1
  43. package/dist/types/sdk/GearboxSDK.d.ts +236 -34
  44. package/dist/types/sdk/accounts/AbstractCreditAccountsService.d.ts +56 -142
  45. package/dist/types/sdk/accounts/CreditAccountsServiceV310.d.ts +14 -5
  46. package/dist/types/sdk/accounts/types.d.ts +230 -18
  47. package/dist/types/sdk/base/BaseContract.d.ts +67 -6
  48. package/dist/types/sdk/base/ChainContractsRegister.d.ts +51 -2
  49. package/dist/types/sdk/base/Construct.d.ts +31 -0
  50. package/dist/types/sdk/base/PlaceholderContract.d.ts +3 -0
  51. package/dist/types/sdk/base/SDKConstruct.d.ts +10 -0
  52. package/dist/types/sdk/base/TokensMeta.d.ts +59 -2
  53. package/dist/types/sdk/base/types.d.ts +185 -25
  54. package/dist/types/sdk/chain/chains.d.ts +78 -18
  55. package/dist/types/sdk/chain/detectNetwork.d.ts +7 -0
  56. package/dist/types/sdk/constants/address-provider.d.ts +4 -3
  57. package/dist/types/sdk/core/AbstractAddressProviderContract.d.ts +23 -0
  58. package/dist/types/sdk/core/types.d.ts +46 -0
  59. package/dist/types/sdk/market/MarketRegister.d.ts +81 -0
  60. package/dist/types/sdk/market/adapters/PlaceholderAdapterContracts.d.ts +3 -0
  61. package/dist/types/sdk/market/oracle/PriceOracleBaseContract.d.ts +40 -50
  62. package/dist/types/sdk/market/oracle/types.d.ts +76 -57
  63. package/dist/types/sdk/market/pricefeeds/AbstractLPPriceFeed.d.ts +3 -0
  64. package/dist/types/sdk/market/pricefeeds/AbstractPriceFeed.d.ts +3 -0
  65. package/dist/types/sdk/market/pricefeeds/PriceFeedRef.d.ts +22 -2
  66. package/dist/types/sdk/market/pricefeeds/PriceFeedsRegister.d.ts +77 -13
  67. package/dist/types/sdk/market/pricefeeds/types.d.ts +70 -10
  68. package/dist/types/sdk/options.d.ts +13 -4
  69. package/dist/types/sdk/plugins/BasePlugin.d.ts +39 -0
  70. package/dist/types/sdk/plugins/types.d.ts +73 -43
  71. package/dist/types/sdk/pools/AbstractPoolService.d.ts +12 -0
  72. package/dist/types/sdk/pools/types.d.ts +75 -6
  73. package/dist/types/sdk/router/AbstractRouterContract.d.ts +21 -2
  74. package/dist/types/sdk/router/RouterV310Contract.d.ts +27 -15
  75. package/dist/types/sdk/router/types.d.ts +51 -69
  76. package/dist/types/sdk/types/state.d.ts +32 -3
  77. package/dist/types/sdk/utils/AddressMap.d.ts +61 -17
  78. package/dist/types/sdk/utils/AddressSet.d.ts +15 -0
  79. package/dist/types/sdk/utils/viem/sendRawTx.d.ts +5 -1
  80. package/package.json +4 -2
@@ -27,7 +27,7 @@ var import_math = require("../constants/math.js");
27
27
  var import_AbstractCreditAccountsService = require("./AbstractCreditAccountsService.js");
28
28
  class CreditAccountServiceV310 extends import_AbstractCreditAccountsService.AbstractCreditAccountService {
29
29
  /**
30
- * Implements {@link ICreditAccountsService.setBot}
30
+ * {@inheritDoc ICreditAccountsService.setBot}
31
31
  */
32
32
  async setBot({
33
33
  botAddress,
@@ -69,7 +69,7 @@ class CreditAccountServiceV310 extends import_AbstractCreditAccountsService.Abst
69
69
  return { tx, calls, creditFacade: cm.creditFacade };
70
70
  }
71
71
  /**
72
- * Implements {@link ICreditAccountsService.withdrawCollateral}
72
+ * {@inheritDoc ICreditAccountsService.withdrawCollateral}
73
73
  */
74
74
  async withdrawCollateral({
75
75
  creditAccount,
@@ -104,7 +104,7 @@ class CreditAccountServiceV310 extends import_AbstractCreditAccountsService.Abst
104
104
  return { tx, calls, creditFacade: cm.creditFacade };
105
105
  }
106
106
  /**
107
- * Implements {@link ICreditAccountsService.repayCreditAccount}
107
+ * {@inheritDoc ICreditAccountsService.repayCreditAccount}
108
108
  */
109
109
  async repayCreditAccount({
110
110
  operation,
@@ -140,7 +140,7 @@ class CreditAccountServiceV310 extends import_AbstractCreditAccountsService.Abst
140
140
  return { tx, calls, creditFacade: cm.creditFacade };
141
141
  }
142
142
  /**
143
- * Implements {@link ICreditAccountsService.repayAndLiquidateCreditAccount}
143
+ * {@inheritDoc ICreditAccountsService.repayAndLiquidateCreditAccount}
144
144
  */
145
145
  async repayAndLiquidateCreditAccount({
146
146
  collateralAssets,
@@ -177,7 +177,7 @@ class CreditAccountServiceV310 extends import_AbstractCreditAccountsService.Abst
177
177
  return { tx, calls, creditFacade: cm.creditFacade };
178
178
  }
179
179
  /**
180
- * Implements {@link ICreditAccountsService.claimFarmRewards}
180
+ * {@inheritDoc ICreditAccountsService.claimFarmRewards}
181
181
  */
182
182
  async claimFarmRewards({
183
183
  calls: externalCalls,
@@ -45,11 +45,30 @@ class ContractParseError extends import_viem.BaseError {
45
45
  }
46
46
  }
47
47
  class BaseContract extends import_Construct.Construct {
48
+ /**
49
+ * Viem contract instance for direct read calls
50
+ **/
48
51
  contract;
52
+ /**
53
+ * Contract ABI
54
+ **/
49
55
  abi;
56
+ /**
57
+ * Gearbox contract type identifier (e.g. `"CREDIT_MANAGER"`), or empty string if unknown.
58
+ **/
50
59
  contractType;
60
+ /**
61
+ * Contract version number.
62
+ * @default 0
63
+ **/
51
64
  version;
65
+ /**
66
+ * On-chain address of the contract.
67
+ **/
52
68
  address;
69
+ /**
70
+ * Display name for the contract.
71
+ **/
53
72
  name;
54
73
  constructor(options, args) {
55
74
  super(options);
@@ -73,6 +92,7 @@ class BaseContract extends import_Construct.Construct {
73
92
  register.setAddressLabel(this.address, this.name);
74
93
  }
75
94
  }
95
+ /** {@inheritDoc IBaseContract.stateHuman} */
76
96
  stateHuman(_ = true) {
77
97
  return {
78
98
  address: this.labelAddress(this.address),
@@ -81,9 +101,10 @@ class BaseContract extends import_Construct.Construct {
81
101
  };
82
102
  }
83
103
  /**
84
- * Updates (or not) contract's internal state from event
85
- * @param _log
86
- */
104
+ * Applies an on-chain event to update this contract's local state.
105
+ *
106
+ * @param _log - Decoded event log emitted by this contract.
107
+ **/
87
108
  processLog(_log) {
88
109
  }
89
110
  /**
@@ -158,9 +179,8 @@ class BaseContract extends import_Construct.Construct {
158
179
  }
159
180
  }
160
181
  /**
161
- * Same as {@link stingifyFunctionData}, but throws if error occurs
162
- * @param calldata
163
- * @returns
182
+ * Same as {@link stringifyFunctionData}, but throws if error occurs.
183
+ * @param calldata - Raw ABI-encoded calldata.
164
184
  */
165
185
  mustStringifyFunctionData(calldata) {
166
186
  const decoded = (0, import_viem.decodeFunctionData)({
@@ -32,8 +32,8 @@ class ChainContractsRegister {
32
32
  labels = new import_AddressMap.AddressMap([], "labels");
33
33
  client;
34
34
  /**
35
- * Token metadata such as symbol and decimals
36
- */
35
+ * Shared token metadata (symbol, decimals) for all tokens known on this chain.
36
+ **/
37
37
  tokensMeta;
38
38
  logger;
39
39
  constructor(client, logger) {
@@ -41,6 +41,9 @@ class ChainContractsRegister {
41
41
  this.tokensMeta = new import_TokensMeta.TokensMeta(client);
42
42
  this.logger = logger;
43
43
  }
44
+ /**
45
+ * Clears all registered contracts, address labels, and token metadata.
46
+ **/
44
47
  resetContracts() {
45
48
  this.logger?.debug(
46
49
  `resetting contacts register with ${this.contracts.size} contracts`
@@ -49,9 +52,19 @@ class ChainContractsRegister {
49
52
  this.contracts.clear();
50
53
  this.tokensMeta.reset();
51
54
  }
55
+ /**
56
+ * Looks up a contract by address.
57
+ * @param address - On-chain address.
58
+ * @returns The contract wrapper, or `undefined` if not registered.
59
+ */
52
60
  getContract(address) {
53
61
  return this.contracts.get(address);
54
62
  }
63
+ /**
64
+ * Looks up a contract by address, throwing if not found.
65
+ * @param address - On-chain address.
66
+ * @throws If no contract is registered at this address.
67
+ */
55
68
  mustGetContract(address) {
56
69
  const contract = this.contracts.mustGet(address);
57
70
  if (!contract) {
@@ -59,9 +72,21 @@ class ChainContractsRegister {
59
72
  }
60
73
  return contract;
61
74
  }
75
+ /**
76
+ * Registers (or replaces) a contract at the given address.
77
+ * @param address - On-chain address.
78
+ * @param contract - Contract wrapper instance.
79
+ */
62
80
  setContract(address, contract) {
63
81
  this.contracts.upsert(address, contract);
64
82
  }
83
+ /**
84
+ * Assigns a human-readable label to an address for use in logging and
85
+ * parsed call output.
86
+ * @param address - On-chain address.
87
+ * @param label - Static label string, or a function that receives the
88
+ * current label and returns a new one.
89
+ */
65
90
  setAddressLabel(address, label) {
66
91
  if (address === import_addresses.NOT_DEPLOYED) {
67
92
  return;
@@ -72,13 +97,25 @@ class ChainContractsRegister {
72
97
  this.labels.upsert(address, label(this.labels.get(address)));
73
98
  }
74
99
  }
100
+ /**
101
+ * Returns a display string for an address, incorporating its label if one exists.
102
+ * @param address - On-chain address.
103
+ * @param omitAddress - When `true`, returns only the label (no address prefix).
104
+ * Falls back to the raw address when no label is set.
105
+ */
75
106
  labelAddress(address, omitAddress) {
76
107
  const label = this.labels.get(address);
77
108
  return label ? omitAddress ? label : `${address} [${label}]` : address;
78
109
  }
110
+ /**
111
+ * The viem {@link Chain} object for this register's connected client.
112
+ **/
79
113
  get chain() {
80
114
  return this.client.chain;
81
115
  }
116
+ /**
117
+ * Numeric chain ID (e.g. `1` for Ethereum mainnet).
118
+ **/
82
119
  get chainId() {
83
120
  return this.client.chain.id;
84
121
  }
@@ -27,9 +27,6 @@ class Construct {
27
27
  logger;
28
28
  client;
29
29
  #register;
30
- /**
31
- * Indicates that contract state needs to be updated
32
- */
33
30
  #dirty = false;
34
31
  constructor(options) {
35
32
  if (options instanceof import_ChainContractsRegister.ChainContractsRegister) {
@@ -61,12 +58,22 @@ class Construct {
61
58
  safeGetRegister() {
62
59
  return this.#register;
63
60
  }
61
+ /**
62
+ * The viem {@link Chain} object associated with the connected client.
63
+ **/
64
64
  get chain() {
65
65
  return this.client.chain;
66
66
  }
67
+ /**
68
+ * Numeric chain ID (e.g. `1` for Ethereum mainnet).
69
+ **/
67
70
  get chainId() {
68
71
  return this.client.chain.id;
69
72
  }
73
+ /**
74
+ * Gearbox network type for this chain (e.g. `"Mainnet"`, `"Arbitrum"`).
75
+ * @throws If the chain was not created by the Gearbox SDK.
76
+ */
70
77
  get networkType() {
71
78
  if ("network" in this.chain) {
72
79
  return this.chain.network;
@@ -74,6 +81,7 @@ class Construct {
74
81
  throw new Error(`chain ${this.chain.id} is not a Gearbox SDK chain`);
75
82
  }
76
83
  /**
84
+ * @internal
77
85
  * Indicates that contract state diverged from onchain state and needs to be updated
78
86
  */
79
87
  get dirty() {
@@ -82,6 +90,9 @@ class Construct {
82
90
  set dirty(value) {
83
91
  this.#dirty = value;
84
92
  }
93
+ /**
94
+ * Information about tokens known on this chain
95
+ */
85
96
  get tokensMeta() {
86
97
  return this.register.tokensMeta;
87
98
  }
@@ -89,6 +100,7 @@ class Construct {
89
100
  return this.#register?.labelAddress(address, omitAddress) ?? address;
90
101
  }
91
102
  /**
103
+ * @internal
92
104
  * Returns list of addresses that should be watched for events to sync state
93
105
  */
94
106
  get watchAddresses() {
@@ -30,13 +30,26 @@ class TokensMeta extends import_utils.AddressMap {
30
30
  super(void 0, "tokensMeta");
31
31
  this.#client = client;
32
32
  }
33
+ /**
34
+ * Clears all token metadata
35
+ **/
33
36
  reset() {
34
37
  this.clear();
35
38
  this.#phantomTokensLoaded = void 0;
36
39
  }
40
+ /**
41
+ * Returns the symbol string for a token.
42
+ * @param token - Token address.
43
+ * @throws If the token is not in the registry.
44
+ */
37
45
  symbol(token) {
38
46
  return this.mustGet(token).symbol;
39
47
  }
48
+ /**
49
+ * Returns the decimal count for a token.
50
+ * @param token - Token address.
51
+ * @throws If the token is not in the registry.
52
+ */
40
53
  decimals(token) {
41
54
  return this.mustGet(token).decimals;
42
55
  }
@@ -71,9 +84,19 @@ class TokensMeta extends import_utils.AddressMap {
71
84
  const asStr = (0, import_utils.formatBN)(amount, this.decimals(token), precision);
72
85
  return symbol ? `${asStr} ${this.symbol(token)}` : asStr;
73
86
  }
87
+ /**
88
+ * Finds a token by its symbol (e.g. `"USDC"`).
89
+ * @param symbol - Case-sensitive ticker symbol.
90
+ * @returns The matching metadata, or `undefined` if no token has this symbol.
91
+ */
74
92
  findBySymbol(symbol) {
75
93
  return this.values().find((v) => v.symbol === symbol);
76
94
  }
95
+ /**
96
+ * Finds a token by its symbol, throwing if not found.
97
+ * @param symbol - Case-sensitive ticker symbol.
98
+ * @throws If no token matches the symbol.
99
+ */
77
100
  mustFindBySymbol(symbol) {
78
101
  const meta = this.findBySymbol(symbol);
79
102
  if (!meta) {
@@ -18,7 +18,6 @@ var __copyProps = (to, from, except, desc) => {
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
19
  var address_provider_exports = {};
20
20
  __export(address_provider_exports, {
21
- ADDRESS_PROVIDER: () => ADDRESS_PROVIDER,
22
21
  ADDRESS_PROVIDER_V310: () => ADDRESS_PROVIDER_V310,
23
22
  AP_ACCOUNT_FACTORY: () => AP_ACCOUNT_FACTORY,
24
23
  AP_ACL: () => AP_ACL,
@@ -55,7 +54,6 @@ __export(address_provider_exports, {
55
54
  NO_VERSION: () => NO_VERSION
56
55
  });
57
56
  module.exports = __toCommonJS(address_provider_exports);
58
- var import_addresses = require("./addresses.js");
59
57
  const NO_VERSION = 0;
60
58
  const AP_ACCOUNT_FACTORY = "ACCOUNT_FACTORY";
61
59
  const AP_ACL = "ACL";
@@ -89,29 +87,9 @@ const AP_WETH_GATEWAY = "WETH_GATEWAY";
89
87
  const AP_WETH_TOKEN = "WETH_TOKEN";
90
88
  const AP_ZAPPER_REGISTER = "ZAPPER_REGISTER";
91
89
  const AP_ZERO_PRICE_FEED = "ZERO_PRICE_FEED";
92
- const ADDRESS_PROVIDER = {
93
- Mainnet: "0x9ea7b04Da02a5373317D745c1571c84aaD03321D",
94
- Arbitrum: "0x7d04eCdb892Ae074f03B5D0aBA03796F90F3F2af",
95
- Optimism: "0x3761ca4BFAcFCFFc1B8034e69F19116dD6756726",
96
- Base: import_addresses.NOT_DEPLOYED,
97
- Sonic: "0x4b27b296273B72d7c7bfee1ACE93DC081467C41B",
98
- // New networks
99
- MegaETH: import_addresses.NOT_DEPLOYED,
100
- Monad: import_addresses.NOT_DEPLOYED,
101
- Berachain: import_addresses.NOT_DEPLOYED,
102
- Avalanche: import_addresses.NOT_DEPLOYED,
103
- BNB: import_addresses.NOT_DEPLOYED,
104
- WorldChain: import_addresses.NOT_DEPLOYED,
105
- Etherlink: import_addresses.NOT_DEPLOYED,
106
- Hemi: import_addresses.NOT_DEPLOYED,
107
- Lisk: import_addresses.NOT_DEPLOYED,
108
- Plasma: import_addresses.NOT_DEPLOYED,
109
- Somnia: import_addresses.NOT_DEPLOYED
110
- };
111
90
  const ADDRESS_PROVIDER_V310 = "0xF7f0a609BfAb9a0A98786951ef10e5FE26cC1E38";
112
91
  // Annotate the CommonJS export names for ESM import in node:
113
92
  0 && (module.exports = {
114
- ADDRESS_PROVIDER,
115
93
  ADDRESS_PROVIDER_V310,
116
94
  AP_ACCOUNT_FACTORY,
117
95
  AP_ACL,
@@ -56,6 +56,9 @@ class AbstractAddressProviderContract extends import_base.BaseContract {
56
56
  this.#addresses[k][version] = overriden;
57
57
  }
58
58
  }
59
+ /**
60
+ * {@inheritDoc IAddressProviderContract.getAddress}
61
+ **/
59
62
  getAddress(contract, version = import_constants.NO_VERSION) {
60
63
  if (!this.#addresses[contract]) {
61
64
  throw new Error(`Address ${contract}, version: ${version} not found`);
@@ -66,6 +69,9 @@ class AbstractAddressProviderContract extends import_base.BaseContract {
66
69
  }
67
70
  return result;
68
71
  }
72
+ /**
73
+ * {@inheritDoc IAddressProviderContract.getLatest}
74
+ **/
69
75
  getLatest(contract, range) {
70
76
  const allVersions = this.#addresses[contract];
71
77
  if (!allVersions) {
@@ -85,6 +91,9 @@ class AbstractAddressProviderContract extends import_base.BaseContract {
85
91
  }
86
92
  return [address, version];
87
93
  }
94
+ /**
95
+ * {@inheritDoc IAddressProviderContract.mustGetLatest}
96
+ **/
88
97
  mustGetLatest(contract, range) {
89
98
  const result = this.getLatest(contract, range);
90
99
  if (!result) {
@@ -92,6 +101,9 @@ class AbstractAddressProviderContract extends import_base.BaseContract {
92
101
  }
93
102
  return result;
94
103
  }
104
+ /**
105
+ * {@inheritDoc IAddressProviderContract.state}
106
+ **/
95
107
  get state() {
96
108
  return {
97
109
  baseParams: {
@@ -103,6 +115,9 @@ class AbstractAddressProviderContract extends import_base.BaseContract {
103
115
  addresses: this.#addresses
104
116
  };
105
117
  }
118
+ /**
119
+ * {@inheritDoc IAddressProviderContract.stateHuman}
120
+ **/
106
121
  stateHuman(raw = true) {
107
122
  return {
108
123
  ...super.stateHuman(raw),
@@ -29,9 +29,6 @@ var import_viem = require("../utils/viem/index.js");
29
29
  var import_MarketConfiguratorContract = require("./MarketConfiguratorContract.js");
30
30
  var import_MarketSuite = require("./MarketSuite.js");
31
31
  class MarketRegister extends import_base.SDKConstruct {
32
- /**
33
- * Mapping pool.address -> MarketSuite
34
- */
35
32
  #markets = new import_utils.AddressMap(void 0, "markets");
36
33
  #marketFilter;
37
34
  #marketConfigurators = new import_utils.AddressMap(
@@ -39,12 +36,21 @@ class MarketRegister extends import_base.SDKConstruct {
39
36
  "marketConfigurators"
40
37
  );
41
38
  #ignoreMarkets;
39
+ /**
40
+ * @param sdk - Top-level SDK instance.
41
+ * @param ignoreMarkets - Pool addresses of markets to exclude from loading.
42
+ **/
42
43
  constructor(sdk, ignoreMarkets = []) {
43
44
  super(sdk);
44
45
  this.#ignoreMarkets = new Set(
45
46
  ignoreMarkets.map((m) => m.toLowerCase())
46
47
  );
47
48
  }
49
+ /**
50
+ * Restores market state from a previously serialized snapshot,
51
+ * bypassing on-chain reads.
52
+ * @param state - Array of market data snapshots.
53
+ **/
48
54
  hydrate(state) {
49
55
  this.#markets.clear();
50
56
  const configurators = new Set(state.map((m) => m.configurator));
@@ -63,6 +69,13 @@ class MarketRegister extends import_base.SDKConstruct {
63
69
  );
64
70
  }
65
71
  }
72
+ /**
73
+ * Fetches all markets from the on-chain for the given market configurators.
74
+ *
75
+ * @param marketConfigurators - Addresses of market configurator contracts to query.
76
+ * @param ignoreUpdateablePrices - When `true`, skips generating off-chain
77
+ * price updates before loading
78
+ **/
66
79
  async loadMarkets(marketConfigurators, ignoreUpdateablePrices) {
67
80
  if (!marketConfigurators.length) {
68
81
  this.logger?.warn(
@@ -85,6 +98,10 @@ class MarketRegister extends import_base.SDKConstruct {
85
98
  underlying: import_constants.ADDRESS_0X0
86
99
  };
87
100
  }
101
+ /**
102
+ * The active filter used to scope market compressor queries.
103
+ * @throws If the register has not been hydrated or attached yet.
104
+ **/
88
105
  get marketFilter() {
89
106
  if (!this.#marketFilter) {
90
107
  throw new Error(
@@ -93,6 +110,15 @@ class MarketRegister extends import_base.SDKConstruct {
93
110
  }
94
111
  return this.#marketFilter;
95
112
  }
113
+ /**
114
+ * Re-synchronizes market state with the chain. If during sdk synchronization
115
+ * we detected that some markets or market configurators were changed,
116
+ * we reload everything.
117
+ *
118
+ * Otherwise only prices are refreshed.
119
+ *
120
+ * @param ignoreUpdateablePrices - When `true`, skips off-chain price updates.
121
+ **/
96
122
  async syncState(ignoreUpdateablePrices) {
97
123
  const dirty = this.markets.some((m) => m.dirty) || this.marketConfigurators.some((c) => c.dirty);
98
124
  if (dirty) {
@@ -203,26 +229,50 @@ class MarketRegister extends import_base.SDKConstruct {
203
229
  ...this.marketFilter.configurators
204
230
  ]);
205
231
  }
232
+ /**
233
+ * Serializable snapshot of all loaded markets, suitable for hydration.
234
+ **/
206
235
  get state() {
207
236
  return this.markets.map((market) => market.state);
208
237
  }
238
+ /**
239
+ * Returns a human-readable snapshot of all markets.
240
+ * @param raw - When `true`, includes raw/unformatted values.
241
+ **/
209
242
  stateHuman(raw = true) {
210
243
  return {
211
244
  markets: this.markets.map((market) => market.stateHuman(raw))
212
245
  };
213
246
  }
247
+ /**
248
+ * All pool suites across loaded markets.
249
+ **/
214
250
  get pools() {
215
251
  return this.markets.map((market) => market.pool);
216
252
  }
253
+ /**
254
+ * All price oracles across loaded markets.
255
+ **/
217
256
  get priceOracles() {
218
257
  return this.markets.map((market) => market.priceOracle);
219
258
  }
259
+ /**
260
+ * All credit manager suites across loaded markets.
261
+ **/
220
262
  get creditManagers() {
221
263
  return this.markets.flatMap((market) => market.creditManagers);
222
264
  }
265
+ /**
266
+ * All known market configurator contracts.
267
+ **/
223
268
  get marketConfigurators() {
224
269
  return this.#marketConfigurators.values();
225
270
  }
271
+ /**
272
+ * Finds a credit manager suite by its on-chain address.
273
+ * @param creditManager - Credit manager contract address.
274
+ * @throws If no loaded market contains the given credit manager.
275
+ **/
226
276
  findCreditManager(creditManager) {
227
277
  const addr = creditManager.toLowerCase();
228
278
  for (const market of this.markets) {
@@ -234,6 +284,11 @@ class MarketRegister extends import_base.SDKConstruct {
234
284
  }
235
285
  throw new Error(`cannot find credit manager ${creditManager}`);
236
286
  }
287
+ /**
288
+ * Finds the market that contains the given credit manager.
289
+ * @param creditManager - Credit manager contract address.
290
+ * @throws If no loaded market contains the given credit manager.
291
+ **/
237
292
  findByCreditManager(creditManager) {
238
293
  const addr = creditManager.toLowerCase();
239
294
  const market = this.markets.find(
@@ -246,6 +301,11 @@ class MarketRegister extends import_base.SDKConstruct {
246
301
  }
247
302
  return market;
248
303
  }
304
+ /**
305
+ * Finds the market that uses the given price oracle.
306
+ * @param address - Price oracle contract address.
307
+ * @throws If no loaded market uses the given oracle.
308
+ **/
249
309
  findByPriceOracle(address) {
250
310
  const addr = address.toLowerCase();
251
311
  for (const market of this.markets) {
@@ -255,6 +315,11 @@ class MarketRegister extends import_base.SDKConstruct {
255
315
  }
256
316
  throw new Error(`cannot find market for price oracle ${address}`);
257
317
  }
318
+ /**
319
+ * Finds the market associated with the given pool.
320
+ * @param address - Pool contract address.
321
+ * @throws If no loaded market uses the given pool.
322
+ **/
258
323
  findByPool(address) {
259
324
  const addr = address.toLowerCase();
260
325
  for (const market of this.markets) {
@@ -264,9 +329,15 @@ class MarketRegister extends import_base.SDKConstruct {
264
329
  }
265
330
  throw new Error(`cannot find market for pool ${address}`);
266
331
  }
332
+ /**
333
+ * Underlying address map of pool address to market suite
334
+ **/
267
335
  get marketsMap() {
268
336
  return this.#markets;
269
337
  }
338
+ /**
339
+ * All loaded market suites.
340
+ **/
270
341
  get markets() {
271
342
  return this.#markets.values();
272
343
  }