@moonwell-fi/moonwell-sdk 0.10.7 → 0.12.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.
Files changed (166) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/_cjs/actions/core/markets/common.js +26 -12
  3. package/_cjs/actions/core/markets/common.js.map +1 -1
  4. package/_cjs/actions/core/markets/getMarketSnapshots.js +173 -321
  5. package/_cjs/actions/core/markets/getMarketSnapshots.js.map +1 -1
  6. package/_cjs/actions/core/user-positions/getUserPositionSnapshots.js +31 -26
  7. package/_cjs/actions/core/user-positions/getUserPositionSnapshots.js.map +1 -1
  8. package/_cjs/actions/governance/getCirculatingSupplySnapshots.js +35 -29
  9. package/_cjs/actions/governance/getCirculatingSupplySnapshots.js.map +1 -1
  10. package/_cjs/actions/governance/getStakingSnapshots.js +16 -12
  11. package/_cjs/actions/governance/getStakingSnapshots.js.map +1 -1
  12. package/_cjs/actions/governance/proposals/common.js +247 -211
  13. package/_cjs/actions/governance/proposals/common.js.map +1 -1
  14. package/_cjs/actions/lunar-indexer-client.js +32 -0
  15. package/_cjs/actions/lunar-indexer-client.js.map +1 -1
  16. package/_cjs/actions/morpho/markets/common.js +26 -29
  17. package/_cjs/actions/morpho/markets/common.js.map +1 -1
  18. package/_cjs/actions/morpho/user-positions/getMorphoVaultUserPositionSnapshots.js +41 -56
  19. package/_cjs/actions/morpho/user-positions/getMorphoVaultUserPositionSnapshots.js.map +1 -1
  20. package/_cjs/actions/morpho/vaults/common.js +7 -4
  21. package/_cjs/actions/morpho/vaults/common.js.map +1 -1
  22. package/_cjs/actions/morpho/vaults/getMorphoVaultSnapshots.js +21 -78
  23. package/_cjs/actions/morpho/vaults/getMorphoVaultSnapshots.js.map +1 -1
  24. package/_cjs/actions/morpho/vaults/getMorphoVaultStakingSnapshots.js +13 -66
  25. package/_cjs/actions/morpho/vaults/getMorphoVaultStakingSnapshots.js.map +1 -1
  26. package/_cjs/client/createMoonwellClient.js +9 -3
  27. package/_cjs/client/createMoonwellClient.js.map +1 -1
  28. package/_cjs/environments/definitions/arbitrum/environment.js +1 -2
  29. package/_cjs/environments/definitions/arbitrum/environment.js.map +1 -1
  30. package/_cjs/environments/definitions/avalanche/environment.js +1 -2
  31. package/_cjs/environments/definitions/avalanche/environment.js.map +1 -1
  32. package/_cjs/environments/definitions/base/custom.js +0 -1
  33. package/_cjs/environments/definitions/base/custom.js.map +1 -1
  34. package/_cjs/environments/definitions/base/environment.js +1 -2
  35. package/_cjs/environments/definitions/base/environment.js.map +1 -1
  36. package/_cjs/environments/definitions/ethereum/environment.js +1 -2
  37. package/_cjs/environments/definitions/ethereum/environment.js.map +1 -1
  38. package/_cjs/environments/definitions/moonbeam/environment.js +1 -2
  39. package/_cjs/environments/definitions/moonbeam/environment.js.map +1 -1
  40. package/_cjs/environments/definitions/optimism/custom.js +0 -1
  41. package/_cjs/environments/definitions/optimism/custom.js.map +1 -1
  42. package/_cjs/environments/definitions/optimism/environment.js +1 -2
  43. package/_cjs/environments/definitions/optimism/environment.js.map +1 -1
  44. package/_cjs/environments/definitions/polygon/environment.js +1 -2
  45. package/_cjs/environments/definitions/polygon/environment.js.map +1 -1
  46. package/_cjs/environments/index.js +8 -8
  47. package/_cjs/environments/index.js.map +1 -1
  48. package/_cjs/environments/types/config.js +1 -0
  49. package/_cjs/environments/types/config.js.map +1 -1
  50. package/_cjs/errors/version.js +1 -1
  51. package/_esm/actions/core/markets/common.js +26 -13
  52. package/_esm/actions/core/markets/common.js.map +1 -1
  53. package/_esm/actions/core/markets/getMarketSnapshots.js +194 -346
  54. package/_esm/actions/core/markets/getMarketSnapshots.js.map +1 -1
  55. package/_esm/actions/core/user-positions/getUserPositionSnapshots.js +32 -29
  56. package/_esm/actions/core/user-positions/getUserPositionSnapshots.js.map +1 -1
  57. package/_esm/actions/governance/getCirculatingSupplySnapshots.js +35 -30
  58. package/_esm/actions/governance/getCirculatingSupplySnapshots.js.map +1 -1
  59. package/_esm/actions/governance/getStakingSnapshots.js +17 -13
  60. package/_esm/actions/governance/getStakingSnapshots.js.map +1 -1
  61. package/_esm/actions/governance/proposals/common.js +246 -216
  62. package/_esm/actions/governance/proposals/common.js.map +1 -1
  63. package/_esm/actions/lunar-indexer-client.js +35 -0
  64. package/_esm/actions/lunar-indexer-client.js.map +1 -1
  65. package/_esm/actions/morpho/markets/common.js +27 -34
  66. package/_esm/actions/morpho/markets/common.js.map +1 -1
  67. package/_esm/actions/morpho/user-positions/getMorphoVaultUserPositionSnapshots.js +42 -54
  68. package/_esm/actions/morpho/user-positions/getMorphoVaultUserPositionSnapshots.js.map +1 -1
  69. package/_esm/actions/morpho/vaults/common.js +7 -4
  70. package/_esm/actions/morpho/vaults/common.js.map +1 -1
  71. package/_esm/actions/morpho/vaults/getMorphoVaultSnapshots.js +24 -78
  72. package/_esm/actions/morpho/vaults/getMorphoVaultSnapshots.js.map +1 -1
  73. package/_esm/actions/morpho/vaults/getMorphoVaultStakingSnapshots.js +15 -65
  74. package/_esm/actions/morpho/vaults/getMorphoVaultStakingSnapshots.js.map +1 -1
  75. package/_esm/client/createMoonwellClient.js +9 -3
  76. package/_esm/client/createMoonwellClient.js.map +1 -1
  77. package/_esm/environments/definitions/arbitrum/environment.js +1 -2
  78. package/_esm/environments/definitions/arbitrum/environment.js.map +1 -1
  79. package/_esm/environments/definitions/avalanche/environment.js +1 -2
  80. package/_esm/environments/definitions/avalanche/environment.js.map +1 -1
  81. package/_esm/environments/definitions/base/custom.js +0 -1
  82. package/_esm/environments/definitions/base/custom.js.map +1 -1
  83. package/_esm/environments/definitions/base/environment.js +1 -2
  84. package/_esm/environments/definitions/base/environment.js.map +1 -1
  85. package/_esm/environments/definitions/ethereum/environment.js +1 -2
  86. package/_esm/environments/definitions/ethereum/environment.js.map +1 -1
  87. package/_esm/environments/definitions/moonbeam/environment.js +1 -2
  88. package/_esm/environments/definitions/moonbeam/environment.js.map +1 -1
  89. package/_esm/environments/definitions/optimism/custom.js +0 -1
  90. package/_esm/environments/definitions/optimism/custom.js.map +1 -1
  91. package/_esm/environments/definitions/optimism/environment.js +1 -2
  92. package/_esm/environments/definitions/optimism/environment.js.map +1 -1
  93. package/_esm/environments/definitions/polygon/environment.js +1 -2
  94. package/_esm/environments/definitions/polygon/environment.js.map +1 -1
  95. package/_esm/environments/index.js +8 -8
  96. package/_esm/environments/index.js.map +1 -1
  97. package/_esm/environments/types/config.js +1 -0
  98. package/_esm/environments/types/config.js.map +1 -1
  99. package/_esm/errors/version.js +1 -1
  100. package/_types/actions/core/markets/common.d.ts.map +1 -1
  101. package/_types/actions/core/markets/getMarketSnapshots.d.ts.map +1 -1
  102. package/_types/actions/core/user-positions/getUserPositionSnapshots.d.ts +0 -1
  103. package/_types/actions/core/user-positions/getUserPositionSnapshots.d.ts.map +1 -1
  104. package/_types/actions/governance/getCirculatingSupplySnapshots.d.ts.map +1 -1
  105. package/_types/actions/governance/getStakingSnapshots.d.ts.map +1 -1
  106. package/_types/actions/governance/proposals/common.d.ts +2 -8
  107. package/_types/actions/governance/proposals/common.d.ts.map +1 -1
  108. package/_types/actions/lunar-indexer-client.d.ts +26 -0
  109. package/_types/actions/lunar-indexer-client.d.ts.map +1 -1
  110. package/_types/actions/morpho/markets/common.d.ts.map +1 -1
  111. package/_types/actions/morpho/user-positions/getMorphoVaultUserPositionSnapshots.d.ts +9 -3
  112. package/_types/actions/morpho/user-positions/getMorphoVaultUserPositionSnapshots.d.ts.map +1 -1
  113. package/_types/actions/morpho/vaults/common.d.ts.map +1 -1
  114. package/_types/actions/morpho/vaults/getMorphoVaultSnapshots.d.ts.map +1 -1
  115. package/_types/actions/morpho/vaults/getMorphoVaultStakingSnapshots.d.ts.map +1 -1
  116. package/_types/client/createMoonwellClient.d.ts +4 -4
  117. package/_types/client/createMoonwellClient.d.ts.map +1 -1
  118. package/_types/environments/definitions/arbitrum/environment.d.ts +1 -1
  119. package/_types/environments/definitions/arbitrum/environment.d.ts.map +1 -1
  120. package/_types/environments/definitions/avalanche/environment.d.ts +1 -1
  121. package/_types/environments/definitions/avalanche/environment.d.ts.map +1 -1
  122. package/_types/environments/definitions/base/custom.d.ts +0 -1
  123. package/_types/environments/definitions/base/custom.d.ts.map +1 -1
  124. package/_types/environments/definitions/base/environment.d.ts +1 -1
  125. package/_types/environments/definitions/base/environment.d.ts.map +1 -1
  126. package/_types/environments/definitions/ethereum/environment.d.ts +1 -1
  127. package/_types/environments/definitions/ethereum/environment.d.ts.map +1 -1
  128. package/_types/environments/definitions/moonbeam/environment.d.ts +1 -1
  129. package/_types/environments/definitions/moonbeam/environment.d.ts.map +1 -1
  130. package/_types/environments/definitions/optimism/custom.d.ts +0 -1
  131. package/_types/environments/definitions/optimism/custom.d.ts.map +1 -1
  132. package/_types/environments/definitions/optimism/environment.d.ts +1 -2
  133. package/_types/environments/definitions/optimism/environment.d.ts.map +1 -1
  134. package/_types/environments/definitions/polygon/environment.d.ts +1 -1
  135. package/_types/environments/definitions/polygon/environment.d.ts.map +1 -1
  136. package/_types/environments/index.d.ts +0 -3
  137. package/_types/environments/index.d.ts.map +1 -1
  138. package/_types/environments/types/config.d.ts +10 -3
  139. package/_types/environments/types/config.d.ts.map +1 -1
  140. package/_types/errors/version.d.ts +1 -1
  141. package/actions/core/markets/common.ts +33 -18
  142. package/actions/core/markets/getMarketSnapshots.ts +261 -511
  143. package/actions/core/user-positions/getUserPositionSnapshots.ts +44 -46
  144. package/actions/governance/getCirculatingSupplySnapshots.ts +43 -35
  145. package/actions/governance/getStakingSnapshots.ts +32 -29
  146. package/actions/governance/proposals/common.ts +369 -330
  147. package/actions/lunar-indexer-client.ts +64 -0
  148. package/actions/morpho/markets/common.ts +32 -43
  149. package/actions/morpho/user-positions/getMorphoVaultUserPositionSnapshots.ts +76 -87
  150. package/actions/morpho/vaults/common.ts +7 -6
  151. package/actions/morpho/vaults/getMorphoVaultSnapshots.ts +36 -120
  152. package/actions/morpho/vaults/getMorphoVaultStakingSnapshots.ts +24 -111
  153. package/client/createMoonwellClient.ts +17 -5
  154. package/environments/definitions/arbitrum/environment.ts +0 -2
  155. package/environments/definitions/avalanche/environment.ts +0 -2
  156. package/environments/definitions/base/custom.ts +0 -1
  157. package/environments/definitions/base/environment.ts +0 -2
  158. package/environments/definitions/ethereum/environment.ts +0 -2
  159. package/environments/definitions/moonbeam/environment.ts +0 -2
  160. package/environments/definitions/optimism/custom.ts +0 -1
  161. package/environments/definitions/optimism/environment.ts +0 -2
  162. package/environments/definitions/polygon/environment.ts +0 -2
  163. package/environments/index.ts +6 -27
  164. package/environments/types/config.ts +11 -3
  165. package/errors/version.ts +1 -1
  166. package/package.json +1 -1
@@ -15,7 +15,6 @@ import type { UserPositionSnapshot } from "../../../types/userPosition.js";
15
15
  import {
16
16
  DEFAULT_LUNAR_TIMEOUT_MS,
17
17
  createLunarIndexerClient,
18
- shouldFallback,
19
18
  } from "../../lunar-indexer-client.js";
20
19
  import { transformPortfolioToSnapshots } from "../../lunar-indexer-transformers.js";
21
20
 
@@ -56,7 +55,6 @@ export type GetUserPositionSnapshotsReturnType = Promise<
56
55
  * - Default behavior (no time parameters): Returns 365 days of history
57
56
  * - Parameter priority: Custom timestamps > period > default (365 days)
58
57
  * - When using Lunar Indexer, custom time ranges are supported
59
- * - When falling back to Ponder, all available data is returned (client-side filtering may be needed)
60
58
  * - Snapshots are filtered to start-of-day for "1d" granularity
61
59
  */
62
60
  export async function getUserPositionSnapshots<
@@ -90,34 +88,45 @@ async function fetchUserPositionSnapshots(
90
88
  endTime?: number,
91
89
  granularity?: "6h" | "1d",
92
90
  ): Promise<UserPositionSnapshot[]> {
93
- if (environment.lunarIndexerUrl) {
91
+ if (!environment.lunarIndexerUrl) {
92
+ if (!environment.indexerUrl) return [];
94
93
  try {
95
- const result = await fetchUserPositionSnapshotsFromLunar(
94
+ return await fetchUserPositionSnapshotsFromPonder(
96
95
  userAddress,
97
96
  environment,
98
- period,
99
- startTime,
100
- endTime,
101
- granularity,
102
97
  );
103
- return result;
104
98
  } catch (error) {
105
- if (!shouldFallback(error)) {
106
- throw error;
107
- }
108
- console.debug(
109
- "[Lunar fallback] Falling back to Ponder for user snapshots:",
99
+ console.warn(
100
+ `[getUserPositionSnapshots] Ponder failed for chain ${environment.chainId}:`,
110
101
  error,
111
102
  );
103
+ environment.onError?.(error, {
104
+ source: "user-position-snapshots-ponder",
105
+ chainId: environment.chainId,
106
+ });
107
+ return [];
112
108
  }
113
109
  }
114
-
115
- // Ponder fallback returns all available data (doesn't support time filtering)
116
- const result = await fetchUserPositionSnapshotsFromPonder(
117
- userAddress,
118
- environment,
119
- );
120
- return result;
110
+ try {
111
+ return await fetchUserPositionSnapshotsFromLunar(
112
+ userAddress,
113
+ environment,
114
+ period,
115
+ startTime,
116
+ endTime,
117
+ granularity,
118
+ );
119
+ } catch (error) {
120
+ console.warn(
121
+ `[getUserPositionSnapshots] Lunar Indexer failed for chain ${environment.chainId}:`,
122
+ error,
123
+ );
124
+ environment.onError?.(error, {
125
+ source: "user-position-snapshots",
126
+ chainId: environment.chainId,
127
+ });
128
+ return [];
129
+ }
121
130
  }
122
131
 
123
132
  async function fetchUserPositionSnapshotsFromLunar(
@@ -182,9 +191,7 @@ async function fetchUserPositionSnapshotsFromPonder(
182
191
  userAddress: Address,
183
192
  environment: Environment,
184
193
  ): Promise<UserPositionSnapshot[]> {
185
- const dailyData: UserDailyData[] = [];
186
- let hasNextPage = true;
187
- let endCursor: string | undefined;
194
+ if (!environment.indexerUrl) return [];
188
195
 
189
196
  interface UserDailyData {
190
197
  totalBorrowsUSD: string;
@@ -193,15 +200,16 @@ async function fetchUserPositionSnapshotsFromPonder(
193
200
  timestamp: number;
194
201
  }
195
202
 
203
+ const dailyData: UserDailyData[] = [];
204
+ let hasNextPage = true;
205
+ let endCursor: string | undefined;
206
+
196
207
  while (hasNextPage) {
197
208
  const result = await axios.post<{
198
209
  data: {
199
210
  accountDailySnapshots: {
200
211
  items: UserDailyData[];
201
- pageInfo: {
202
- hasNextPage: boolean;
203
- endCursor: string;
204
- };
212
+ pageInfo: { hasNextPage: boolean; endCursor: string };
205
213
  };
206
214
  };
207
215
  }>(environment.indexerUrl, {
@@ -238,23 +246,13 @@ async function fetchUserPositionSnapshotsFromPonder(
238
246
  endCursor = result.data.data.accountDailySnapshots.pageInfo.endCursor;
239
247
  }
240
248
 
241
- if (dailyData.length > 0) {
242
- return dailyData.map((point: UserDailyData) => {
243
- const borrowUsd = Number(point.totalBorrowsUSD);
244
- const suppliedUsd = Number(point.totalSuppliesUSD);
245
- const collateralUsd = Number(point.totalCollateralUSD);
249
+ if (dailyData.length === 0) return [];
246
250
 
247
- const result: UserPositionSnapshot = {
248
- chainId: environment.chainId,
249
- timestamp: point.timestamp * 1000,
250
- totalSupplyUsd: suppliedUsd,
251
- totalBorrowsUsd: borrowUsd,
252
- totalCollateralUsd: collateralUsd,
253
- };
254
-
255
- return result;
256
- });
257
- } else {
258
- return [];
259
- }
251
+ return dailyData.map((point) => ({
252
+ chainId: environment.chainId,
253
+ timestamp: point.timestamp * 1000,
254
+ totalSupplyUsd: Number(point.totalSuppliesUSD),
255
+ totalBorrowsUsd: Number(point.totalBorrowsUSD),
256
+ totalCollateralUsd: Number(point.totalCollateralUSD),
257
+ }));
260
258
  }
@@ -2,9 +2,8 @@ import axios from "axios";
2
2
  import type { MoonwellClient } from "../../client/createMoonwellClient.js";
3
3
  import { getEnvironmentFromArgs } from "../../common/index.js";
4
4
  import type { OptionalNetworkParameterType } from "../../common/types.js";
5
- import type { Chain } from "../../environments/index.js";
5
+ import type { Chain, Environment } from "../../environments/index.js";
6
6
  import type { CirculatingSupplySnapshot } from "../../types/circulatingSupply.js";
7
- import { shouldFallback } from "../lunar-indexer-client.js";
8
7
 
9
8
  export type GetCirculatingSupplySnapshotsParameters<
10
9
  environments,
@@ -74,40 +73,50 @@ export async function getCirculatingSupplySnapshots<
74
73
  return [];
75
74
  }
76
75
 
77
- if (environment.lunarIndexerUrl) {
78
- try {
79
- const items = await fetchCirculatingSupplyFromLunar(
80
- environment.lunarIndexerUrl,
81
- environment.chainId,
82
- );
83
- return items.flatMap((item) => {
84
- const token = Object.values(environment.config.tokens).find(
85
- (t) => t.address.toLowerCase() === item.tokenAddress.toLowerCase(),
86
- );
87
- if (!token) return [];
88
- return [
89
- {
90
- chainId: item.chainId,
91
- token,
92
- circulatingSupply: Number.parseFloat(item.circulatingSupply),
93
- totalSupply: item.totalSupply,
94
- excludedBalance: item.excludedBalance,
95
- timestamp: item.timestamp,
96
- },
97
- ];
98
- });
99
- } catch (error) {
100
- if (!shouldFallback(error)) {
101
- throw error;
102
- }
103
- console.debug(
104
- "[Lunar fallback] Falling back for circulating supply snapshots:",
105
- error,
76
+ if (!environment.lunarIndexerUrl) {
77
+ return environment.indexerUrl
78
+ ? fetchCirculatingSupplyFromPonder(environment)
79
+ : [];
80
+ }
81
+
82
+ try {
83
+ const items = await fetchCirculatingSupplyFromLunar(
84
+ environment.lunarIndexerUrl,
85
+ environment.chainId,
86
+ );
87
+ return items.flatMap((item) => {
88
+ const token = Object.values(environment.config.tokens).find(
89
+ (t) => t.address.toLowerCase() === item.tokenAddress.toLowerCase(),
106
90
  );
107
- }
91
+ if (!token) return [];
92
+ return [
93
+ {
94
+ chainId: item.chainId,
95
+ token,
96
+ circulatingSupply: Number.parseFloat(item.circulatingSupply),
97
+ totalSupply: item.totalSupply,
98
+ excludedBalance: item.excludedBalance,
99
+ timestamp: item.timestamp,
100
+ },
101
+ ];
102
+ });
103
+ } catch (error) {
104
+ console.warn(
105
+ `[getCirculatingSupplySnapshots] Lunar Indexer failed for chain ${environment.chainId}:`,
106
+ error,
107
+ );
108
+ environment.onError?.(error, {
109
+ source: "circulating-supply",
110
+ chainId: environment.chainId,
111
+ });
112
+ return [];
108
113
  }
114
+ }
109
115
 
110
- // Legacy fallback: GraphQL POST to Ponder indexer
116
+ async function fetchCirculatingSupplyFromPonder(
117
+ environment: Environment,
118
+ ): Promise<CirculatingSupplySnapshot[]> {
119
+ if (!environment.indexerUrl) return [];
111
120
  try {
112
121
  const response = await axios.post<{
113
122
  data: {
@@ -160,9 +169,8 @@ export async function getCirculatingSupplySnapshots<
160
169
  ];
161
170
  },
162
171
  );
163
- } else {
164
- return [];
165
172
  }
173
+ return [];
166
174
  } catch (ex) {
167
175
  console.error(
168
176
  "An error occurred while fetching getCirculatingSupplySnapshots...",
@@ -13,7 +13,6 @@ import type { StakingSnapshot } from "../../types/staking.js";
13
13
  import {
14
14
  DEFAULT_LUNAR_TIMEOUT_MS,
15
15
  createLunarIndexerClient,
16
- shouldFallback,
17
16
  } from "../lunar-indexer-client.js";
18
17
  import { transformStakingSnapshots } from "../lunar-indexer-transformers.js";
19
18
 
@@ -47,36 +46,40 @@ export async function getStakingSnapshots<
47
46
  endTime: customEndTime,
48
47
  } = (args ?? {}) as GetStakingSnapshotsParameters<environments, undefined>;
49
48
 
50
- if (environment.lunarIndexerUrl) {
51
- try {
52
- return await fetchStakingSnapshotsFromLunar(
53
- environment.chainId,
54
- environment.lunarIndexerUrl,
55
- period,
56
- customStartTime,
57
- customEndTime,
58
- );
59
- } catch (error) {
60
- if (!shouldFallback(error)) {
61
- throw error;
62
- }
63
- console.debug(
64
- "[Lunar fallback] Falling back to Ponder for staking snapshots:",
65
- error,
66
- );
67
- }
49
+ if (!environment.lunarIndexerUrl) {
50
+ const { startTime } = calculateTimeRange(
51
+ period,
52
+ customStartTime,
53
+ customEndTime,
54
+ );
55
+ return environment.indexerUrl
56
+ ? fetchStakingSnapshotsFromPonder(
57
+ environment.chainId,
58
+ environment.indexerUrl,
59
+ startTime,
60
+ )
61
+ : [];
68
62
  }
69
63
 
70
- const { startTime } = calculateTimeRange(
71
- period,
72
- customStartTime,
73
- customEndTime,
74
- );
75
- return fetchStakingSnapshotsFromPonder(
76
- environment.chainId,
77
- environment.indexerUrl,
78
- startTime,
79
- );
64
+ try {
65
+ return await fetchStakingSnapshotsFromLunar(
66
+ environment.chainId,
67
+ environment.lunarIndexerUrl,
68
+ period,
69
+ customStartTime,
70
+ customEndTime,
71
+ );
72
+ } catch (error) {
73
+ console.warn(
74
+ `[getStakingSnapshots] Lunar Indexer failed for chain ${environment.chainId}:`,
75
+ error,
76
+ );
77
+ environment.onError?.(error, {
78
+ source: "staking-snapshots",
79
+ chainId: environment.chainId,
80
+ });
81
+ return [];
82
+ }
80
83
  }
81
84
 
82
85
  async function fetchStakingSnapshotsFromLunar(