@gearbox-protocol/sdk 14.6.0-next.3 → 14.6.0-next.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 (60) hide show
  1. package/dist/cjs/common-utils/utils/strategies/credit-managers/get-strategy-credit-managers-list-core.js +66 -0
  2. package/dist/cjs/common-utils/utils/strategies/credit-managers/get-strategy-credit-managers-list.js +7 -18
  3. package/dist/cjs/common-utils/utils/strategies/credit-managers/get-strategy-credit-managers.js +20 -19
  4. package/dist/cjs/common-utils/utils/strategies/credit-managers/index.js +2 -0
  5. package/dist/cjs/common-utils/utils/strategies/lists/get-released-strategies-list-core.js +61 -0
  6. package/dist/cjs/common-utils/utils/strategies/lists/get-released-strategies-list.js +9 -31
  7. package/dist/cjs/common-utils/utils/strategies/lists/index.js +3 -1
  8. package/dist/cjs/common-utils/utils/strategies/strategy-info/get-strategy-info-core.js +104 -0
  9. package/dist/cjs/common-utils/utils/strategies/strategy-info/get-strategy-info.js +35 -59
  10. package/dist/cjs/common-utils/utils/strategies/strategy-info/index.js +2 -0
  11. package/dist/cjs/common-utils/utils/strategies/strategy-state/is-strategy-disabled.js +3 -1
  12. package/dist/cjs/common-utils/utils/strategies/types/index.js +4 -0
  13. package/dist/cjs/common-utils/utils/strategies/types/legacy-strategy-data-source.js +62 -0
  14. package/dist/cjs/common-utils/utils/strategies/types/strategy-data-source.js +16 -0
  15. package/dist/cjs/plugins/apy/ApyPlugin.js +65 -0
  16. package/dist/cjs/plugins/apy/strategy-data-source.js +176 -0
  17. package/dist/esm/common-utils/utils/strategies/credit-managers/get-strategy-credit-managers-list-core.js +42 -0
  18. package/dist/esm/common-utils/utils/strategies/credit-managers/get-strategy-credit-managers-list.js +7 -18
  19. package/dist/esm/common-utils/utils/strategies/credit-managers/get-strategy-credit-managers.js +20 -19
  20. package/dist/esm/common-utils/utils/strategies/credit-managers/index.js +1 -0
  21. package/dist/esm/common-utils/utils/strategies/lists/get-released-strategies-list-core.js +37 -0
  22. package/dist/esm/common-utils/utils/strategies/lists/get-released-strategies-list.js +9 -31
  23. package/dist/esm/common-utils/utils/strategies/lists/index.js +1 -0
  24. package/dist/esm/common-utils/utils/strategies/strategy-info/get-strategy-info-core.js +80 -0
  25. package/dist/esm/common-utils/utils/strategies/strategy-info/get-strategy-info.js +35 -59
  26. package/dist/esm/common-utils/utils/strategies/strategy-info/index.js +1 -0
  27. package/dist/esm/common-utils/utils/strategies/strategy-state/is-strategy-disabled.js +3 -1
  28. package/dist/esm/common-utils/utils/strategies/types/index.js +2 -0
  29. package/dist/esm/common-utils/utils/strategies/types/legacy-strategy-data-source.js +38 -0
  30. package/dist/esm/common-utils/utils/strategies/types/strategy-data-source.js +0 -0
  31. package/dist/esm/plugins/apy/ApyPlugin.js +70 -0
  32. package/dist/esm/plugins/apy/strategy-data-source.js +159 -0
  33. package/dist/types/common-utils/utils/strategies/credit-managers/get-strategy-credit-managers-list-core.d.ts +7 -0
  34. package/dist/types/common-utils/utils/strategies/credit-managers/get-strategy-credit-managers-list.d.ts +2 -2
  35. package/dist/types/common-utils/utils/strategies/credit-managers/get-strategy-credit-managers.d.ts +4 -4
  36. package/dist/types/common-utils/utils/strategies/credit-managers/index.d.ts +1 -0
  37. package/dist/types/common-utils/utils/strategies/credit-managers/is-credit-manager-usable.d.ts +2 -2
  38. package/dist/types/common-utils/utils/strategies/eligibility/is-strategy-eligible.d.ts +2 -2
  39. package/dist/types/common-utils/utils/strategies/lists/get-available-and-disabled-strategies.d.ts +2 -2
  40. package/dist/types/common-utils/utils/strategies/lists/get-available-strategies.d.ts +2 -2
  41. package/dist/types/common-utils/utils/strategies/lists/get-disabled-strategies.d.ts +2 -2
  42. package/dist/types/common-utils/utils/strategies/lists/get-released-strategies-list-core.d.ts +9 -0
  43. package/dist/types/common-utils/utils/strategies/lists/get-released-strategies-list.d.ts +2 -2
  44. package/dist/types/common-utils/utils/strategies/lists/index.d.ts +1 -0
  45. package/dist/types/common-utils/utils/strategies/strategy-info/get-strategy-info-core.d.ts +12 -0
  46. package/dist/types/common-utils/utils/strategies/strategy-info/index.d.ts +1 -0
  47. package/dist/types/common-utils/utils/strategies/strategy-state/is-strategy-disabled.d.ts +2 -2
  48. package/dist/types/common-utils/utils/strategies/tokens/is-activated-token.d.ts +2 -2
  49. package/dist/types/common-utils/utils/strategies/tokens/is-forbidden-token.d.ts +2 -2
  50. package/dist/types/common-utils/utils/strategies/types/credit-manager-data-legacy.d.ts +3 -7
  51. package/dist/types/common-utils/utils/strategies/types/index.d.ts +2 -0
  52. package/dist/types/common-utils/utils/strategies/types/legacy-strategy-data-source.d.ts +4 -0
  53. package/dist/types/common-utils/utils/strategies/types/sdk-state.d.ts +6 -5
  54. package/dist/types/common-utils/utils/strategies/types/strategies-cm-list.d.ts +2 -2
  55. package/dist/types/common-utils/utils/strategies/types/strategy-data-source.d.ts +19 -0
  56. package/dist/types/common-utils/utils/strategies/types/targetable.d.ts +2 -2
  57. package/dist/types/plugins/apy/ApyPlugin.d.ts +8 -1
  58. package/dist/types/plugins/apy/strategy-data-source.d.ts +16 -0
  59. package/dist/types/plugins/apy/types.d.ts +18 -1
  60. package/package.json +1 -1
@@ -1,8 +1,10 @@
1
1
  import { isStrategyCMDisabled } from "../strategy-info/is-strategy-cm-disabled.js";
2
+ const lc = (address) => address.toLowerCase();
2
3
  function isStrategyDisabled(tokenOutAddress, cms) {
3
4
  if (cms.length === 0) return true;
5
+ const targetToken = lc(tokenOutAddress);
4
6
  const allCmsUnavailable = cms.every((cm) => {
5
- const quota = cm.quotas[tokenOutAddress];
7
+ const quota = cm.quotas[targetToken];
6
8
  return isStrategyCMDisabled(cm, quota);
7
9
  });
8
10
  return allCmsUnavailable;
@@ -2,7 +2,9 @@ export * from "./chains.js";
2
2
  export * from "./constants.js";
3
3
  export * from "./credit-manager-data-legacy.js";
4
4
  export * from "./curator-filter.js";
5
+ export * from "./legacy-strategy-data-source.js";
5
6
  export * from "./sdk-state.js";
6
7
  export * from "./strategies-cm-list.js";
7
8
  export * from "./strategy.js";
9
+ export * from "./strategy-data-source.js";
8
10
  export * from "./targetable.js";
@@ -0,0 +1,38 @@
1
+ const lc = (address) => address.toLowerCase();
2
+ function getByAddress(record, address) {
3
+ return record?.[address] ?? record?.[lc(address)];
4
+ }
5
+ function createLegacyStrategyDataSource(sdkStateByChain, pricesByChain) {
6
+ return {
7
+ hasToken(chainId, token) {
8
+ return !!getByAddress(
9
+ sdkStateByChain?.[chainId]?.tokens?.tokenDataList,
10
+ token
11
+ );
12
+ },
13
+ getToken(chainId, token) {
14
+ return getByAddress(
15
+ sdkStateByChain?.[chainId]?.tokens?.tokenDataList,
16
+ token
17
+ );
18
+ },
19
+ getPool(chainId, pool) {
20
+ return getByAddress(sdkStateByChain?.[chainId]?.pools, pool);
21
+ },
22
+ getCreditManager(chainId, creditManager) {
23
+ return getByAddress(
24
+ sdkStateByChain?.[chainId]?.creditManagers,
25
+ creditManager
26
+ );
27
+ },
28
+ getMarketPrices(chainId, pool) {
29
+ return getByAddress(pricesByChain?.[chainId]?.prices, pool) ?? {};
30
+ },
31
+ getLastSyncTimestamp(chainId) {
32
+ return sdkStateByChain?.[chainId]?.lastSyncBlock?.blockTimestamp_js;
33
+ }
34
+ };
35
+ }
36
+ export {
37
+ createLegacyStrategyDataSource
38
+ };
@@ -1,4 +1,10 @@
1
1
  import { marketCompressorAbi } from "../../abi/compressors/marketCompressor.js";
2
+ import {
3
+ getAvailableAndDisabledStrategies,
4
+ getReleasedStrategiesListCore,
5
+ getStrategyCreditManagersListCore,
6
+ getStrategyInfoCore
7
+ } from "../../common-utils/utils/strategies/index.js";
2
8
  import { PoolPointsAPI } from "../../rewards/rewards/extra-apy.js";
3
9
  import {
4
10
  AddressMap,
@@ -20,6 +26,7 @@ import {
20
26
  calculateSupplyApy7d,
21
27
  getPoolExtraAPY
22
28
  } from "./pool-apy-utils.js";
29
+ import { OnchainSdkStrategyDataSource } from "./strategy-data-source.js";
23
30
  const MAP_LABEL = "pools7DAgo";
24
31
  class ApyPlugin extends BasePlugin {
25
32
  #apyUrl;
@@ -171,6 +178,69 @@ class ApyPlugin extends BasePlugin {
171
178
  }
172
179
  return { data, data7DAgo, pointsBase: poolPointsBase, points };
173
180
  }
181
+ /**
182
+ * Computes a strategy-info snapshot from the current SDK and APY state.
183
+ *
184
+ * @throws if plugin is not loaded
185
+ */
186
+ getStrategyInfoSnapshot({
187
+ slippage,
188
+ quotaReserve,
189
+ curatorFilter,
190
+ strategyPayloadsList,
191
+ showHiddenStrategies
192
+ }) {
193
+ if (!this.loaded) {
194
+ throw new Error("apy plugin not loaded");
195
+ }
196
+ const chainId = this.sdk.chainId;
197
+ const network = this.sdk.networkType;
198
+ const allowedChains = { [chainId]: network };
199
+ const source = new OnchainSdkStrategyDataSource(this.sdk);
200
+ const releasedStrategies = getReleasedStrategiesListCore({
201
+ strategyPayloadsList,
202
+ allowedChains,
203
+ source,
204
+ curatorFilter,
205
+ showHiddenStrategies
206
+ });
207
+ const cmsOfStrategiesByChain = getStrategyCreditManagersListCore({
208
+ strategies: releasedStrategies,
209
+ source,
210
+ curatorFilter
211
+ });
212
+ const { available, disabled, availableList, disabledList } = getAvailableAndDisabledStrategies(
213
+ releasedStrategies,
214
+ cmsOfStrategiesByChain,
215
+ curatorFilter
216
+ );
217
+ const apyListByNetwork = {
218
+ [chainId]: this.apySnapshot.apy
219
+ };
220
+ const strategiesInfo = releasedStrategies?.reduce((acc, strategy) => {
221
+ const info = getStrategyInfoCore({
222
+ strategy,
223
+ creditManagers: cmsOfStrategiesByChain?.[strategy.chainId]?.[strategy.id],
224
+ source,
225
+ apyListByNetwork,
226
+ quotaReserve,
227
+ slippage
228
+ });
229
+ if (info) {
230
+ acc[strategy.chainId] ??= {};
231
+ acc[strategy.chainId][strategy.id] = info;
232
+ }
233
+ return acc;
234
+ }, {}) ?? {};
235
+ return {
236
+ availableStrategies: available,
237
+ disabledStrategies: disabled,
238
+ availableList,
239
+ disabledList,
240
+ cmsOfStrategiesByChain,
241
+ strategiesInfo
242
+ };
243
+ }
174
244
  // ---------------------------------------------------------------------------
175
245
  // Plugin lifecycle
176
246
  // ---------------------------------------------------------------------------
@@ -0,0 +1,159 @@
1
+ import {
2
+ ADDRESS_0X0,
3
+ AP_WETH_TOKEN,
4
+ NATIVE_ADDRESS,
5
+ PERCENTAGE_DECIMALS,
6
+ PERCENTAGE_FACTOR,
7
+ RAY
8
+ } from "../../sdk/index.js";
9
+ const lc = (address) => address.toLowerCase();
10
+ class OnchainSdkStrategyDataSource {
11
+ constructor(sdk) {
12
+ this.sdk = sdk;
13
+ }
14
+ sdk;
15
+ hasToken(chainId, token) {
16
+ return !!this.getToken(chainId, token);
17
+ }
18
+ getToken(chainId, token) {
19
+ if (chainId !== this.sdk.chainId) return void 0;
20
+ const meta = this.sdk.tokensMeta.get(token);
21
+ if (!meta) return void 0;
22
+ const address = lc(token);
23
+ return { address, decimals: meta.decimals };
24
+ }
25
+ getPool(chainId, pool) {
26
+ if (chainId !== this.sdk.chainId) return void 0;
27
+ const market = this.sdk.marketRegister.markets.find(
28
+ (m) => lc(m.pool.pool.address) === lc(pool)
29
+ );
30
+ if (!market) return void 0;
31
+ return {
32
+ address: lc(market.pool.pool.address),
33
+ totalDebtLimit: market.pool.pool.totalDebtLimit,
34
+ totalBorrowed: market.pool.pool.totalBorrowed
35
+ };
36
+ }
37
+ getCreditManager(chainId, creditManager) {
38
+ if (chainId !== this.sdk.chainId) return void 0;
39
+ try {
40
+ const found = this.findCreditManager(creditManager);
41
+ if (!found) return void 0;
42
+ return this.toCreditManagerView(found.creditSuite, found.market.pool);
43
+ } catch {
44
+ return void 0;
45
+ }
46
+ }
47
+ getMarketPrices(chainId, pool) {
48
+ if (chainId !== this.sdk.chainId) return {};
49
+ const market = this.sdk.marketRegister.markets.find(
50
+ (m) => lc(m.pool.pool.address) === lc(pool)
51
+ );
52
+ if (!market) return {};
53
+ const marketPrices = Object.fromEntries(
54
+ market.priceOracle.mainPrices.entries().map(([token, mainPrice]) => {
55
+ const tokenLc = lc(token);
56
+ const reservePrice = market.priceOracle.reservePrices?.get(token);
57
+ return [tokenLc, mainPrice?.price || reservePrice?.price || 0n];
58
+ })
59
+ );
60
+ const wrappedNativeToken = this.getWrappedNativeToken();
61
+ const wrappedNativePrice = marketPrices[wrappedNativeToken || ADDRESS_0X0];
62
+ if (wrappedNativePrice !== void 0) {
63
+ marketPrices[lc(NATIVE_ADDRESS)] = wrappedNativePrice;
64
+ }
65
+ return marketPrices;
66
+ }
67
+ getLastSyncTimestamp(chainId) {
68
+ return chainId === this.sdk.chainId ? Number(this.sdk.timestamp) : void 0;
69
+ }
70
+ toCreditManagerView(cs, pool) {
71
+ const cm = cs.creditManager;
72
+ const facade = cs.creditFacade;
73
+ const debtParams = pool.pool.creditManagerDebtParams.get(cm.address);
74
+ const liquidationThresholds = {};
75
+ const supportedTokens = {};
76
+ const forbiddenTokens = {};
77
+ const quotas = {};
78
+ for (const [token, q] of pool.pqk.quotas.entries()) {
79
+ const tokenLc = lc(token);
80
+ quotas[tokenLc] = {
81
+ token: tokenLc,
82
+ rate: BigInt(q.rate) * PERCENTAGE_DECIMALS,
83
+ quotaIncreaseFee: BigInt(q.quotaIncreaseFee),
84
+ totalQuoted: q.totalQuoted,
85
+ limit: q.limit,
86
+ isActive: q.isActive
87
+ };
88
+ }
89
+ for (const token of cm.collateralTokens) {
90
+ const tokenLc = lc(token);
91
+ const lt = cm.liquidationThresholds.get(token);
92
+ if (lt !== void 0) {
93
+ liquidationThresholds[tokenLc] = BigInt(lt);
94
+ }
95
+ supportedTokens[tokenLc] = true;
96
+ }
97
+ const forbiddenMask = facade.forbiddenTokensMask;
98
+ for (let i = 0; i < cm.collateralTokens.length; i++) {
99
+ const tokenLc = lc(cm.collateralTokens[i]);
100
+ if ((forbiddenMask & 1n << BigInt(i)) !== 0n) {
101
+ forbiddenTokens[tokenLc] = true;
102
+ }
103
+ }
104
+ const baseBorrowRate = debtParams ? Number(
105
+ pool.pool.baseInterestRate * (BigInt(cm.feeInterest) + PERCENTAGE_FACTOR) * PERCENTAGE_DECIMALS / RAY
106
+ ) : 0;
107
+ return {
108
+ address: lc(cm.address),
109
+ underlyingToken: lc(cm.underlying),
110
+ pool: lc(cm.pool),
111
+ chainId: this.sdk.chainId,
112
+ baseBorrowRate,
113
+ feeInterest: cm.feeInterest,
114
+ availableToBorrow: debtParams?.available ?? 0n,
115
+ minDebt: facade.minDebt,
116
+ maxDebt: facade.maxDebt,
117
+ totalDebt: debtParams?.borrowed ?? 0n,
118
+ totalDebtLimit: debtParams?.limit ?? 0n,
119
+ isDegenMode: lc(facade.degenNFT) !== ADDRESS_0X0,
120
+ degenNFT: lc(facade.degenNFT),
121
+ liquidationThresholds,
122
+ quotas,
123
+ collateralTokens: cm.collateralTokens.map(lc),
124
+ version: Number(facade.version),
125
+ isBorrowingForbidden: facade.maxDebtPerBlockMultiplier === 0,
126
+ marketConfigurator: lc(cs.marketConfigurator),
127
+ supportedTokens,
128
+ forbiddenTokens
129
+ };
130
+ }
131
+ findCreditManager(creditManager) {
132
+ const marketRegister = this.sdk.marketRegister;
133
+ if (marketRegister.findCreditManager && marketRegister.findByCreditManager) {
134
+ const creditSuite = marketRegister.findCreditManager(creditManager);
135
+ const market = marketRegister.findByCreditManager(
136
+ creditSuite.creditManager.address
137
+ );
138
+ return { creditSuite, market };
139
+ }
140
+ const cmLc = lc(creditManager);
141
+ for (const market of marketRegister.markets) {
142
+ const creditSuite = market.creditManagers.find(
143
+ (cs) => lc(cs.creditManager.address) === cmLc
144
+ );
145
+ if (creditSuite) return { creditSuite, market };
146
+ }
147
+ return void 0;
148
+ }
149
+ getWrappedNativeToken() {
150
+ try {
151
+ return this.sdk.addressProvider.getAddress(AP_WETH_TOKEN, 0)?.toLowerCase();
152
+ } catch {
153
+ return void 0;
154
+ }
155
+ }
156
+ }
157
+ export {
158
+ OnchainSdkStrategyDataSource
159
+ };
@@ -0,0 +1,7 @@
1
+ import type { CuratorFilter, StrategiesCMListByChain, Strategy, StrategyCreditManagerView, StrategyDataSource } from "../types.js";
2
+ export interface GetStrategyCreditManagersListCoreArgs<CM extends StrategyCreditManagerView> {
3
+ strategies: Array<Strategy> | undefined;
4
+ source: StrategyDataSource<CM>;
5
+ curatorFilter: CuratorFilter;
6
+ }
7
+ export declare function getStrategyCreditManagersListCore<CM extends StrategyCreditManagerView>({ strategies, source, curatorFilter, }: GetStrategyCreditManagersListCoreArgs<CM>): StrategiesCMListByChain<CM> | undefined;
@@ -1,2 +1,2 @@
1
- import type { CuratorFilter, GearboxSDKFullStateByChain, StrategiesCMListByChain, Strategy } from "../types.js";
2
- export declare function getStrategyCreditManagersList(strategies: Array<Strategy> | undefined, sdkStateByChain: GearboxSDKFullStateByChain | undefined, curatorFilter: CuratorFilter): StrategiesCMListByChain | undefined;
1
+ import type { CuratorFilter, GearboxSDKFullStateByChain, Strategy, StrategyCreditManagerView } from "../types.js";
2
+ export declare function getStrategyCreditManagersList<CM extends StrategyCreditManagerView>(strategies: Array<Strategy> | undefined, sdkStateByChain: GearboxSDKFullStateByChain<CM> | undefined, curatorFilter: CuratorFilter): import("../types.js").StrategiesCMListByChain<CM> | undefined;
@@ -1,8 +1,8 @@
1
1
  import type { Address } from "viem";
2
- import type { CreditManagerData_Legacy, Strategy } from "../types.js";
3
- interface GetStrategyCreditManagersProps {
2
+ import type { Strategy, StrategyCreditManagerView } from "../types.js";
3
+ interface GetStrategyCreditManagersProps<CM extends StrategyCreditManagerView> {
4
4
  strategy: Pick<Strategy, "tokenOutAddress" | "creditManagers">;
5
- allCreditManagers: Record<Address, CreditManagerData_Legacy>;
5
+ allCreditManagers: Record<Address, CM>;
6
6
  }
7
- export declare function getStrategyCreditManagers({ strategy, allCreditManagers, }: GetStrategyCreditManagersProps): Record<`0x${string}`, CreditManagerData_Legacy>;
7
+ export declare function getStrategyCreditManagers<CM extends StrategyCreditManagerView>({ strategy, allCreditManagers }: GetStrategyCreditManagersProps<CM>): Record<`0x${string}`, CM>;
8
8
  export {};
@@ -1,3 +1,4 @@
1
1
  export * from "./get-strategy-credit-managers.js";
2
2
  export * from "./get-strategy-credit-managers-list.js";
3
+ export * from "./get-strategy-credit-managers-list-core.js";
3
4
  export * from "./is-credit-manager-usable.js";
@@ -1,2 +1,2 @@
1
- import type { CreditManagerData_Legacy } from "../types.js";
2
- export declare function isCreditManagerUsable(cm: Pick<CreditManagerData_Legacy, "isBorrowingForbidden" | "version">): boolean;
1
+ import type { StrategyCreditManagerView } from "../types.js";
2
+ export declare function isCreditManagerUsable(cm: Pick<StrategyCreditManagerView, "isBorrowingForbidden" | "version">): boolean;
@@ -1,5 +1,5 @@
1
- import type { AppChains, CuratorFilter, GearboxSDKFullState, NotValidatedStrategy } from "../types.js";
2
- export declare function isStrategyEligible(s: Pick<NotValidatedStrategy, "chainId" | "network" | "hideInProd" | "tokenOutAddress" | "showInMainApp">, allowedChains: AppChains, showHiddenStrategies: boolean, sdkStateByChain: Record<number, Pick<GearboxSDKFullState, "tokens"> | undefined> | undefined, curatorFilter: CuratorFilter): {
1
+ import type { AppChains, CuratorFilter, GearboxSDKFullState, NotValidatedStrategy, StrategyCreditManagerView } from "../types.js";
2
+ export declare function isStrategyEligible<CM extends StrategyCreditManagerView>(s: Pick<NotValidatedStrategy, "chainId" | "network" | "hideInProd" | "tokenOutAddress" | "showInMainApp">, allowedChains: AppChains, showHiddenStrategies: boolean, sdkStateByChain: Record<number, Pick<GearboxSDKFullState<CM>, "tokens"> | undefined> | undefined, curatorFilter: CuratorFilter): {
3
3
  readonly isEligible: true;
4
4
  readonly network: "Mainnet" | "Arbitrum" | "Optimism" | "Base" | "Sonic" | "MegaETH" | "Monad" | "Berachain" | "Avalanche" | "BNB" | "WorldChain" | "Etherlink" | "Hemi" | "Lisk" | "Plasma" | "Somnia";
5
5
  } | {
@@ -1,5 +1,5 @@
1
- import type { CuratorFilter, StrategiesCMListByChain, Strategy } from "../types.js";
2
- export declare function getAvailableAndDisabledStrategies(list: Strategy[] | undefined | undefined, listCMs: StrategiesCMListByChain | undefined, curatorFilter: CuratorFilter | undefined): {
1
+ import type { CuratorFilter, StrategiesCMListByChain, Strategy, StrategyCreditManagerView } from "../types.js";
2
+ export declare function getAvailableAndDisabledStrategies<CM extends StrategyCreditManagerView>(list: Strategy[] | undefined | undefined, listCMs: StrategiesCMListByChain<CM> | undefined, curatorFilter: CuratorFilter | undefined): {
3
3
  available: Error | import("../types.js").StrategyRecord | null;
4
4
  disabled: import("../types.js").StrategyRecord;
5
5
  availableList: Error | Strategy[] | null;
@@ -1,5 +1,5 @@
1
- import type { StrategiesCMListByChain, Strategy, StrategyRecord } from "../types.js";
2
- export declare function getAvailableStrategies(list: Strategy[] | undefined | undefined, listCMs: StrategiesCMListByChain | undefined): {
1
+ import type { StrategiesCMListByChain, Strategy, StrategyCreditManagerView, StrategyRecord } from "../types.js";
2
+ export declare function getAvailableStrategies<CM extends StrategyCreditManagerView>(list: Strategy[] | undefined | undefined, listCMs: StrategiesCMListByChain<CM> | undefined): {
3
3
  record: StrategyRecord | null | Error;
4
4
  list: Array<Strategy> | null | Error;
5
5
  };
@@ -1,5 +1,5 @@
1
- import type { CuratorFilter, StrategiesCMListByChain, Strategy, StrategyRecord } from "../types.js";
2
- export declare function getDisabledStrategies(list: Strategy[] | undefined | undefined, listCMs: StrategiesCMListByChain | undefined, curatorFilter: CuratorFilter | undefined): {
1
+ import type { CuratorFilter, StrategiesCMListByChain, Strategy, StrategyCreditManagerView, StrategyRecord } from "../types.js";
2
+ export declare function getDisabledStrategies<CM extends StrategyCreditManagerView>(list: Strategy[] | undefined | undefined, listCMs: StrategiesCMListByChain<CM> | undefined, curatorFilter: CuratorFilter | undefined): {
3
3
  record: StrategyRecord;
4
4
  list: Array<Strategy>;
5
5
  };
@@ -0,0 +1,9 @@
1
+ import type { AppChains, CuratorFilter, NotValidatedStrategy, Strategy, StrategyDataSource } from "../types.js";
2
+ export interface GetReleasedStrategiesListCoreArgs {
3
+ strategyPayloadsList: NotValidatedStrategy[] | undefined;
4
+ allowedChains: AppChains | undefined;
5
+ source: StrategyDataSource;
6
+ curatorFilter: CuratorFilter;
7
+ showHiddenStrategies: boolean;
8
+ }
9
+ export declare function getReleasedStrategiesListCore({ strategyPayloadsList, allowedChains, source, curatorFilter, showHiddenStrategies, }: GetReleasedStrategiesListCoreArgs): Strategy[] | undefined;
@@ -1,2 +1,2 @@
1
- import type { AppChains, CuratorFilter, GearboxSDKFullStateByChain, NotValidatedStrategy, Strategy } from "../types.js";
2
- export declare function getReleasedStrategiesList(strategyPayloadsList: NotValidatedStrategy[] | undefined, allowedChains: AppChains | undefined, sdkStateByChain: GearboxSDKFullStateByChain | undefined, curatorFilter: CuratorFilter, showHiddenStrategies: boolean): Strategy[] | undefined;
1
+ import type { AppChains, CuratorFilter, GearboxSDKFullStateByChain, NotValidatedStrategy, StrategyCreditManagerView } from "../types.js";
2
+ export declare function getReleasedStrategiesList<CM extends StrategyCreditManagerView>(strategyPayloadsList: NotValidatedStrategy[] | undefined, allowedChains: AppChains | undefined, sdkStateByChain: GearboxSDKFullStateByChain<CM> | undefined, curatorFilter: CuratorFilter, showHiddenStrategies: boolean): import("../types.js").Strategy[] | undefined;
@@ -1,2 +1,3 @@
1
1
  export * from "./get-available-and-disabled-strategies.js";
2
2
  export * from "./get-released-strategies-list.js";
3
+ export * from "./get-released-strategies-list-core.js";
@@ -0,0 +1,12 @@
1
+ import type { Address } from "viem";
2
+ import type { StrategyDataSource } from "../types/index.js";
3
+ import type { APYListSlice, CreditManagerSlice, StrategyInfoResult, StrategySlice } from "./types.js";
4
+ export interface GetStrategyInfoCoreArgs<ID extends string | number, CM extends CreditManagerSlice> {
5
+ strategy: StrategySlice<ID>;
6
+ creditManagers: Record<Address, CM> | undefined;
7
+ source: StrategyDataSource;
8
+ apyListByNetwork: Record<number, APYListSlice | undefined> | undefined;
9
+ quotaReserve: number;
10
+ slippage: number;
11
+ }
12
+ export declare function getStrategyInfoCore<ID extends string | number, CM extends CreditManagerSlice>({ strategy, creditManagers, source, apyListByNetwork, quotaReserve, slippage, }: GetStrategyInfoCoreArgs<ID, CM>): StrategyInfoResult<CM> | undefined;
@@ -1,5 +1,6 @@
1
1
  export * from "./cm-availability-condition.js";
2
2
  export * from "./get-strategy-info.js";
3
+ export * from "./get-strategy-info-core.js";
3
4
  export * from "./get-strategy-max-apy.js";
4
5
  export * from "./is-strategy-cm-disabled.js";
5
6
  export * from "./types.js";
@@ -1,3 +1,3 @@
1
1
  import type { Address } from "viem";
2
- import type { CreditManagerData_Legacy } from "../types.js";
3
- export declare function isStrategyDisabled(tokenOutAddress: Address, cms: Array<Pick<CreditManagerData_Legacy, "quotas" | "availableToBorrow" | "minDebt">>): boolean;
2
+ import type { StrategyCreditManagerView } from "../types.js";
3
+ export declare function isStrategyDisabled(tokenOutAddress: Address, cms: Array<Pick<StrategyCreditManagerView, "quotas" | "availableToBorrow" | "minDebt">>): boolean;
@@ -1,6 +1,6 @@
1
1
  import type { Address } from "viem";
2
- import type { CreditManagerData_Legacy } from "../types.js";
2
+ import type { StrategyCreditManagerView } from "../types.js";
3
3
  export declare function isActivatedToken({ address, creditManager, }: {
4
4
  address: Address;
5
- creditManager: Pick<CreditManagerData_Legacy, "liquidationThresholds" | "quotas" | "supportedTokens">;
5
+ creditManager: Pick<StrategyCreditManagerView, "liquidationThresholds" | "quotas" | "supportedTokens">;
6
6
  }): boolean;
@@ -1,6 +1,6 @@
1
1
  import type { Address } from "viem";
2
- import type { CreditManagerData_Legacy } from "../types.js";
2
+ import type { StrategyCreditManagerView } from "../types.js";
3
3
  export declare function isForbiddenToken({ address, creditManager, }: {
4
4
  address: Address;
5
- creditManager: Pick<CreditManagerData_Legacy, "forbiddenTokens">;
5
+ creditManager: Pick<StrategyCreditManagerView, "forbiddenTokens">;
6
6
  }): boolean;
@@ -1,6 +1,7 @@
1
1
  import type { Address } from "viem";
2
2
  import type { NetworkType } from "../../../../sdk/index.js";
3
- import type { CreditManagerSlice, QuotaSlice } from "../strategy-info/types.js";
3
+ import type { QuotaSlice } from "../strategy-info/types.js";
4
+ import type { StrategyCreditManagerView } from "./strategy-data-source.js";
4
5
  interface AdapterContract {
5
6
  address: Address;
6
7
  contractType: string;
@@ -8,24 +9,19 @@ interface AdapterContract {
8
9
  name: string;
9
10
  targetContract: Address;
10
11
  }
11
- export type CreditManagerData_Legacy = CreditManagerSlice & {
12
+ export type CreditManagerDataSlice = StrategyCreditManagerView & {
12
13
  readonly network: NetworkType;
13
14
  readonly creditFacade: Address;
14
15
  readonly creditConfigurator: Address;
15
- readonly version: number;
16
16
  readonly isPaused: boolean;
17
17
  readonly forbiddenTokenMask: bigint;
18
- readonly isBorrowingForbidden: boolean;
19
18
  readonly maxEnabledTokensLength: number;
20
19
  readonly name: string;
21
- readonly marketConfigurator: Address;
22
20
  readonly feeLiquidation: number;
23
21
  readonly liquidationDiscount: number;
24
22
  readonly feeLiquidationExpired: number;
25
23
  readonly liquidationDiscountExpired: number;
26
- readonly supportedTokens: Record<Address, true>;
27
24
  readonly usableTokens: Record<Address, true>;
28
- readonly forbiddenTokens: Record<Address, true>;
29
25
  readonly adapters: Record<Address, AdapterContract>;
30
26
  readonly contractsByAdapter: Record<Address, Address>;
31
27
  readonly quotas: Record<Address, QuotaSlice>;
@@ -3,7 +3,9 @@ export * from "./chains.js";
3
3
  export * from "./constants.js";
4
4
  export * from "./credit-manager-data-legacy.js";
5
5
  export * from "./curator-filter.js";
6
+ export * from "./legacy-strategy-data-source.js";
6
7
  export * from "./sdk-state.js";
7
8
  export * from "./strategies-cm-list.js";
8
9
  export * from "./strategy.js";
10
+ export * from "./strategy-data-source.js";
9
11
  export * from "./targetable.js";
@@ -0,0 +1,4 @@
1
+ import type { PricesByChainSlice } from "../strategy-info/types.js";
2
+ import type { GearboxSDKFullStateByChain } from "./sdk-state.js";
3
+ import type { StrategyCreditManagerView, StrategyDataSource } from "./strategy-data-source.js";
4
+ export declare function createLegacyStrategyDataSource<CM extends StrategyCreditManagerView>(sdkStateByChain: GearboxSDKFullStateByChain<CM> | undefined, pricesByChain?: PricesByChainSlice): StrategyDataSource<CM>;
@@ -1,13 +1,14 @@
1
1
  import type { Address } from "viem";
2
- import type { TokenSlice } from "../strategy-info/types.js";
3
- import type { CreditManagerData_Legacy } from "./credit-manager-data-legacy.js";
4
- export interface GearboxSDKFullState {
2
+ import type { PoolSlice, TokenSlice } from "../strategy-info/types.js";
3
+ import type { StrategyCreditManagerView } from "./strategy-data-source.js";
4
+ export interface GearboxSDKFullState<CM extends StrategyCreditManagerView> {
5
5
  lastSyncBlock?: {
6
6
  blockTimestamp_js: number;
7
7
  };
8
8
  tokens?: {
9
9
  tokenDataList?: Record<Address, TokenSlice>;
10
10
  };
11
- creditManagers?: Record<Address, CreditManagerData_Legacy>;
11
+ creditManagers?: Record<Address, CM>;
12
+ pools?: Record<Address, PoolSlice>;
12
13
  }
13
- export type GearboxSDKFullStateByChain = Record<number, GearboxSDKFullState | undefined>;
14
+ export type GearboxSDKFullStateByChain<CM extends StrategyCreditManagerView> = Record<number, GearboxSDKFullState<CM> | undefined>;
@@ -1,5 +1,5 @@
1
1
  import type { Address } from "viem";
2
2
  import type { PartialRecord } from "../../../../sdk/index.js";
3
- import type { CreditManagerData_Legacy } from "./credit-manager-data-legacy.js";
4
3
  import type { Strategy } from "./strategy.js";
5
- export type StrategiesCMListByChain = Record<number, PartialRecord<Strategy["id"], Record<Address, CreditManagerData_Legacy>>>;
4
+ import type { StrategyCreditManagerView } from "./strategy-data-source.js";
5
+ export type StrategiesCMListByChain<CM extends StrategyCreditManagerView> = Record<number, PartialRecord<Strategy["id"], Record<Address, CM>>>;
@@ -0,0 +1,19 @@
1
+ import type { Address } from "viem";
2
+ import type { CreditManagerSlice, PoolSlice, TokenSlice } from "../strategy-info/types.js";
3
+ export interface StrategyCreditManagerView extends CreditManagerSlice {
4
+ readonly version: number;
5
+ readonly isBorrowingForbidden: boolean;
6
+ readonly marketConfigurator: Address;
7
+ readonly supportedTokens: Record<Address, true>;
8
+ readonly forbiddenTokens: Record<Address, true>;
9
+ }
10
+ export type StrategyPoolView = PoolSlice;
11
+ export type StrategyTokenView = TokenSlice;
12
+ export interface StrategyDataSource<CM extends StrategyCreditManagerView = StrategyCreditManagerView> {
13
+ hasToken(chainId: number, token: Address): boolean;
14
+ getToken(chainId: number, token: Address): StrategyTokenView | undefined;
15
+ getPool(chainId: number, pool: Address): StrategyPoolView | undefined;
16
+ getCreditManager(chainId: number, creditManager: Address): CM | undefined;
17
+ getMarketPrices(chainId: number, pool: Address): Record<Address, bigint>;
18
+ getLastSyncTimestamp(chainId: number): number | undefined;
19
+ }
@@ -1,6 +1,6 @@
1
1
  import type { Address } from "viem";
2
- import type { CreditManagerData_Legacy } from "./credit-manager-data-legacy.js";
2
+ import type { StrategyCreditManagerView } from "./strategy-data-source.js";
3
3
  export type IsTargetableProps = {
4
4
  address: Address;
5
- creditManager: Pick<CreditManagerData_Legacy, "forbiddenTokens" | "liquidationThresholds" | "quotas" | "supportedTokens">;
5
+ creditManager: Pick<StrategyCreditManagerView, "forbiddenTokens" | "liquidationThresholds" | "quotas" | "supportedTokens">;
6
6
  };
@@ -1,8 +1,9 @@
1
1
  import type { Address } from "viem";
2
+ import type { StrategyCreditManagerView } from "../../common-utils/utils/strategies/types.js";
2
3
  import type { IOnchainSDKPlugin } from "../../sdk/index.js";
3
4
  import { AddressMap, BasePlugin } from "../../sdk/index.js";
4
5
  import type { GetPoolsAPYResult } from "./pool-apy-types.js";
5
- import type { ApySnapshotState, Pool7DAgoState, Pools7DAgoStateHuman } from "./types.js";
6
+ import type { ApySnapshotState, GetStrategyInfoSnapshotArgs, Pool7DAgoState, Pools7DAgoStateHuman, StrategyInfoSnapshot } from "./types.js";
6
7
  export interface ApyPluginState {
7
8
  pools7DAgo: Record<Address, Pool7DAgoState>;
8
9
  apySnapshot: ApySnapshotState;
@@ -39,6 +40,12 @@ export declare class ApyPlugin extends BasePlugin<ApyPluginState> implements IOn
39
40
  * @throws if plugin is not loaded
40
41
  */
41
42
  getPoolsAPY(): GetPoolsAPYResult;
43
+ /**
44
+ * Computes a strategy-info snapshot from the current SDK and APY state.
45
+ *
46
+ * @throws if plugin is not loaded
47
+ */
48
+ getStrategyInfoSnapshot({ slippage, quotaReserve, curatorFilter, strategyPayloadsList, showHiddenStrategies, }: GetStrategyInfoSnapshotArgs): StrategyInfoSnapshot<StrategyCreditManagerView>;
42
49
  syncState(): Promise<void>;
43
50
  stateHuman(_?: boolean): Pools7DAgoStateHuman[];
44
51
  get state(): ApyPluginState;
@@ -0,0 +1,16 @@
1
+ import type { Address } from "viem";
2
+ import type { StrategyCreditManagerView, StrategyDataSource, StrategyPoolView, StrategyTokenView } from "../../common-utils/utils/strategies/types.js";
3
+ import { type OnchainSDK } from "../../sdk/index.js";
4
+ export declare class OnchainSdkStrategyDataSource implements StrategyDataSource<StrategyCreditManagerView> {
5
+ private readonly sdk;
6
+ constructor(sdk: OnchainSDK);
7
+ hasToken(chainId: number, token: Address): boolean;
8
+ getToken(chainId: number, token: Address): StrategyTokenView | undefined;
9
+ getPool(chainId: number, pool: Address): StrategyPoolView | undefined;
10
+ getCreditManager(chainId: number, creditManager: Address): StrategyCreditManagerView | undefined;
11
+ getMarketPrices(chainId: number, pool: Address): Record<Address, bigint>;
12
+ getLastSyncTimestamp(chainId: number): number | undefined;
13
+ private toCreditManagerView;
14
+ private findCreditManager;
15
+ private getWrappedNativeToken;
16
+ }