@1delta/margin-fetcher 0.0.25 → 0.0.26

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 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/yields/index.ts"],"names":[],"mappings":"AA4CA,UAAU,iBAAiB;IACzB,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,qBAAqB,EAAE,GAAG,CAAA;IAC1B,oBAAoB,EAAE,GAAG,CAAA;CAC1B;AAED,MAAM,WAAW,sBAAsB;IACrC,eAAe,EAAE;QAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;KAAE,CAAA;IACxD,aAAa,EAAE;QACb,CAAC,OAAO,EAAE,MAAM,GAAG;YACjB,CAAC,MAAM,EAAE,MAAM,GAAG;gBAAE,CAAC,KAAK,EAAE,MAAM,GAAG,iBAAiB,CAAA;aAAE,CAAA;SACzD,CAAA;KACF,CAAA;CACF;AAcD,eAAO,MAAM,kBAAkB,uCA+K9B,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/yields/index.ts"],"names":[],"mappings":"AAmFA,UAAU,iBAAiB;IACzB,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,qBAAqB,EAAE,GAAG,CAAA;IAC1B,oBAAoB,EAAE,GAAG,CAAA;CAC1B;AAED,MAAM,WAAW,sBAAsB;IACrC,eAAe,EAAE;QAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;KAAE,CAAA;IACxD,aAAa,EAAE;QACb,CAAC,OAAO,EAAE,MAAM,GAAG;YACjB,CAAC,MAAM,EAAE,MAAM,GAAG;gBAAE,CAAC,KAAK,EAAE,MAAM,GAAG,iBAAiB,CAAA;aAAE,CAAA;SACzD,CAAA;KACF,CAAA;CACF;AAcD,eAAO,MAAM,kBAAkB,uCA2X9B,CAAA"}
@@ -3,6 +3,30 @@ const hyUSD = 'High Yield USD Base::HYUSD';
3
3
  const bsdETH = 'Based ETH::BSDETH';
4
4
  const wstHype = 'Staked HYPE Shares::WSTHYPE';
5
5
  const kHYPE = 'Kinetiq Staked HYPE::kHYPE';
6
+ const tETH = 'Treehouse ETH::TETH';
7
+ const osETH = 'StakeWise Staked ETH::OSETH';
8
+ // const ethPlus = 'ETHPlus::ETH+'
9
+ const ethX = 'Stader ETHx::ETHx';
10
+ const pufEth = 'PUFETH';
11
+ const stUSD = 'Angle Staked USDA::STUSD';
12
+ const stEur = 'Angle Staked EURA::STEUR';
13
+ const sUsds = 'sUSDS::SUSDS';
14
+ const srUsd = 'Reservoir srUSD::SRUSD';
15
+ const yusd = 'YieldFi yUSD::yUSD';
16
+ const rlp = 'Resolv RLP::RLP';
17
+ const wstusr = 'Resolv wstUSR::WSTUSR';
18
+ const ethPlus = 'ETHPlus::ETH+';
19
+ const woEth = 'Wrapped OETH::WOETH';
20
+ const csusdl = 'Coinshift USDL Morpho Vault::CSUSDL';
21
+ const sfrxeth = 'Staked Frax Ether::sfrxETH';
22
+ const ceth = 'cETH::CETH';
23
+ const sfrax = 'Staked FRAX::SFRAX';
24
+ const sdeusd = 'Elixir Staked deUSD::SDEUSD';
25
+ const rsweth = 'Restaked Swell ETH::RSWETH';
26
+ const ynethx = 'ynETH MAX::YNETHX';
27
+ const usdZeroPlus = 'Staked USD0::USD0++';
28
+ const ethZero = 'ETH0::ETH0';
29
+ const usdThree = "Web 3 Dollar::USD3";
6
30
  const FeedData = {
7
31
  WSTETH: 'https://eth-api.lido.fi/v1/protocol/steth/apr/sma',
8
32
  STMATIC: 'https://polygon.lido.fi/api/stats',
@@ -18,6 +42,21 @@ const FeedData = {
18
42
  TRUMATIC: 'https://api.trufin.io/staker/apy?staker=MATIC',
19
43
  RTOKENS: 'https://yields.reserve.org/pools',
20
44
  HYPE: 'https://api.hyperlend.finance/data/nativeApy',
45
+ ETHX: 'https://universe.staderlabs.com/eth/apy',
46
+ OSETH: 'https://graphs.stakewise.io/mainnet-a/subgraphs/name/stakewise/prod?opName=osTokenApy',
47
+ PUFETH: 'https://api-v2.puffer.fi/backend-for-frontend/tvl/all',
48
+ ANGLE: 'https://exporter.angle.money/v2/savingsApr',
49
+ SUSDS: 'https://info-sky.blockanalitica.com/api/v1/overall/?format=json',
50
+ SRUSD: 'https://app.reservoir.xyz/api/website',
51
+ YUSD: 'https://ctrl.yield.fi/t/yusd/apy',
52
+ RLP: 'https://api.resolv.xyz/apr/rlp/7d',
53
+ WSTUSR: 'https://api.resolv.xyz/apr/staking/7d',
54
+ MORPHO_VAULTS: 'https://blue-api.morpho.org/graphql',
55
+ SDEUSD: 'https://api-deusd-prod-public.elixir.xyz/public/deusd_apy',
56
+ RSWETH: 'https://v3-lst.svc.swellnetwork.io/api/tokens/sweth/apr',
57
+ YNETHX: 'https://gateway.yieldnest.finance/api/v1/graphql',
58
+ USDZEROPLUS: 'https://app.usual.money/api/rewards/rates/USD0++',
59
+ ETHZERO: 'https://app.usual.money/api/rewards/rates/ETH0',
21
60
  };
22
61
  const LenderAPIs = {
23
62
  MERIDIAN: 'https://omnidex.bmaa3ajd1gjri.eu-west-2.cs.amazonlightsail.com/lending_yields',
@@ -57,8 +96,7 @@ export const fetchGeneralYields = async () => {
57
96
  return Number(res.rethAPR);
58
97
  });
59
98
  const weethPromise = safeFetch('WEETH', async () => {
60
- const wstethRes = await fetch(FeedData.WSTETH).then((r) => r.json());
61
- const wstethApr = Number(wstethRes.data.aprs.at(-1).apr) * 0.9;
99
+ const wstethRes = await wstethPromise;
62
100
  let aYield = 0;
63
101
  try {
64
102
  const weethRes = await fetch(FeedData.WEETH).then((r) => r.json());
@@ -67,7 +105,7 @@ export const fetchGeneralYields = async () => {
67
105
  catch (e) {
68
106
  aYield = 0.5;
69
107
  }
70
- return aYield + wstethApr;
108
+ return aYield + (wstethRes ?? 0);
71
109
  });
72
110
  const stmaticPromise = safeFetch('STMATIC', async () => {
73
111
  const res = await fetch(FeedData.STMATIC).then((r) => r.json());
@@ -102,12 +140,140 @@ export const fetchGeneralYields = async () => {
102
140
  const res = await fetch(FeedData.TRUMATIC).then((r) => r.json());
103
141
  return apyToAprPercent(res.apy);
104
142
  });
143
+ const ethxPromise = safeFetch('ETHX', async () => {
144
+ const res = await fetch(FeedData.ETHX).then((r) => r.json());
145
+ return apyToAprPercent(res.value);
146
+ });
147
+ const osEthPromise = safeFetch('OSETH', async () => {
148
+ const res = await fetch(FeedData.OSETH, {
149
+ method: 'POST',
150
+ headers: { Accept: 'application/json' },
151
+ body: JSON.stringify({
152
+ query: 'query osTokenApy { osTokens { apy feePercent }}',
153
+ operationName: 'osTokenApy',
154
+ }),
155
+ }).then((r) => r.json());
156
+ return apyToAprPercent(res.data?.osTokens?.[0]?.apy);
157
+ });
158
+ const ynethxPromise = safeFetch('YNETHX', async () => {
159
+ const res = await fetch(FeedData.YNETHX, {
160
+ method: 'POST',
161
+ headers: {
162
+ Accept: 'application/json',
163
+ 'Content-Type': 'application/json',
164
+ },
165
+ body: JSON.stringify({
166
+ operationName: 'GetTokenMetrics',
167
+ variables: {
168
+ networkType: 'mainnet',
169
+ },
170
+ query: 'query GetTokenMetrics($networkType: NetworkType!) {\n getLRTsData(networkType: $networkType) {\n summary {\n total_tvl {\n value\n value_raw\n value_usd\n __typename\n }\n __typename\n }\n tokens {\n token\n total_tvl {\n value\n value_raw\n value_usd\n __typename\n }\n price\n blockchains {\n chainId\n tvl {\n value\n value_raw\n value_usd\n __typename\n }\n apr {\n apr7d\n apr31d\n restaking7dApr\n __typename\n }\n strategyAssets {\n tokenAddress\n symbol\n apr7d\n tvl\n isBuffer\n protocols\n manager\n maturityDate\n __typename\n }\n contract_details {\n tokenAddress\n ynViewer\n referralDepositAdapter\n rateProvider\n __typename\n }\n historicalData {\n apy\n exchangeRate\n usdPrice\n baseAsset\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n}',
171
+ }),
172
+ }).then((r) => r.json());
173
+ const dat = res?.data?.getLRTsData?.tokens
174
+ .find((x) => x.token === 'ynETHx')
175
+ ?.blockchains?.find((b) => b.chainId === 1)?.apr?.apr31d;
176
+ return Number(dat ?? 0);
177
+ });
178
+ const pufEthPromise = safeFetch('PUFETH', async () => {
179
+ const res = await fetch(FeedData.PUFETH, {
180
+ method: 'GET',
181
+ headers: { Accept: 'application/json' },
182
+ }).then((r) => r.json());
183
+ return apyToAprPercent(res.apy);
184
+ });
185
+ const usdZeroPlusPromise = safeFetch('USDZEROPLUS', async () => {
186
+ const res = await fetch(FeedData.USDZEROPLUS, {
187
+ method: 'GET',
188
+ headers: { Accept: 'application/json' },
189
+ }).then((r) => r.json());
190
+ return Number(res?.rewards[0]?.apr ?? 0) * 100;
191
+ });
192
+ const ethZeroPromise = safeFetch('ETHZERO', async () => {
193
+ const res = await fetch(FeedData.ETHZERO, {
194
+ method: 'GET',
195
+ headers: { Accept: 'application/json' },
196
+ }).then((r) => r.json());
197
+ return Number(res?.rewards[0]?.apr ?? 0) * 100;
198
+ });
199
+ const susdsPromise = safeFetch('SUSDS', async () => {
200
+ const res = await fetch(FeedData.SUSDS, {
201
+ method: 'GET',
202
+ headers: { Accept: 'application/json' },
203
+ }).then((r) => r.json());
204
+ return apyToAprPercent(Number(res?.[0]?.sky_savings_rate_apy ?? 0) * 100);
205
+ });
206
+ const srusdPromise = safeFetch('SRUSD', async () => {
207
+ const res = await fetch(FeedData.SRUSD, {
208
+ method: 'GET',
209
+ headers: { Accept: 'application/json' },
210
+ }).then((r) => r.json());
211
+ return apyToAprPercent(Number(res?.srusdApy ?? 0));
212
+ });
213
+ const yusdPromise = safeFetch('YUSD', async () => {
214
+ const res = await fetch(FeedData.YUSD, {
215
+ method: 'GET',
216
+ headers: { Accept: 'application/json' },
217
+ }).then((r) => r.json());
218
+ return apyToAprPercent(Number(res?.apy ?? 0));
219
+ });
220
+ const rlpPromise = safeFetch('RLP', async () => {
221
+ const res = await fetch(FeedData.RLP, {
222
+ method: 'GET',
223
+ headers: { Accept: 'application/json' },
224
+ }).then((r) => r.json());
225
+ return Number(res?.value ?? 0) * 100;
226
+ });
227
+ const wstusrPromise = safeFetch('WSTUSR', async () => {
228
+ const res = await fetch(FeedData.WSTUSR, {
229
+ method: 'GET',
230
+ headers: { Accept: 'application/json' },
231
+ }).then((r) => r.json());
232
+ return Number(res?.value ?? 0) * 100;
233
+ });
234
+ const sdeusdPromise = safeFetch('SDEUSD', async () => {
235
+ const res = await fetch(FeedData.SDEUSD, {
236
+ method: 'GET',
237
+ headers: { Accept: 'application/json' },
238
+ }).then((r) => r.json());
239
+ return apyToAprPercent((res?.deusd_apy ?? 0) / 100) * 100;
240
+ });
241
+ const rswethPromise = safeFetch('RSWETH', async () => {
242
+ const res = await fetch(FeedData.RSWETH, {
243
+ method: 'GET',
244
+ headers: { Accept: 'application/json' },
245
+ }).then((r) => r.text());
246
+ return Number(res) ?? 0;
247
+ });
248
+ const csusdlPromise = safeFetch('CSUSDL', async () => {
249
+ const res = await fetch(FeedData.MORPHO_VAULTS, {
250
+ method: 'POST',
251
+ headers: { Accept: 'application/json' },
252
+ body: JSON.stringify({
253
+ query: 'query GetAllCurrentAPYFromVault($address: String!) {\n vaultByAddress(address: $address) {\n state {\n apy\n netApy\n }\n asset {\n yield {\n apr\n }\n }\n }\n}',
254
+ variables: {
255
+ address: '0xbEeFc011e94f43b8B7b455eBaB290C7Ab4E216f1',
256
+ },
257
+ }),
258
+ }).then((r) => r.json());
259
+ const vba = res?.data?.vaultByAddress;
260
+ return (apyToAprPercent(vba.state.apy ?? 0) * 100 +
261
+ (vba?.asset?.yield.apr ?? 0) * 100);
262
+ });
105
263
  const rtokensPromise = safeFetch('RTOKENS', async () => {
106
264
  const res = await fetch(FeedData.RTOKENS).then((r) => r.json());
107
265
  const data = res.rtokens['8453'];
266
+ const dataMainnet = res.rtokens['1'];
267
+ const dataMainnetColalterals = res.collaterals['1'];
108
268
  return {
109
269
  [bsdETH]: apyToAprPercent(data.bsdETH / 100) * 100,
110
270
  [hyUSD]: apyToAprPercent(data.hyUSD / 100) * 100,
271
+ [sfrxeth]: apyToAprPercent(dataMainnetColalterals.sfrxeth / 100) * 100,
272
+ [sfrax]: apyToAprPercent(dataMainnetColalterals.sfrax / 100) * 100,
273
+ [ceth]: apyToAprPercent(dataMainnetColalterals.ceth / 100) * 100,
274
+ [ethPlus]: apyToAprPercent(dataMainnet['ETH+'] / 100) * 100,
275
+ [usdThree]: apyToAprPercent(dataMainnet['USD3'] / 100) * 100,
276
+ [woEth]: apyToAprPercent(dataMainnetColalterals.woeth / 100) * 100,
111
277
  };
112
278
  });
113
279
  const hypePromise = safeFetch('HYPE', async () => {
@@ -117,6 +283,15 @@ export const fetchGeneralYields = async () => {
117
283
  [kHYPE]: res.kHYPE.latestApr,
118
284
  };
119
285
  });
286
+ const anglePromise = safeFetch('ANGLE', async () => {
287
+ const now = Math.floor(Date.now() / 1000);
288
+ const nowMinusWeek = now - 7 * 24 * 3600;
289
+ const res = await fetch(FeedData.ANGLE + `?from=${nowMinusWeek}&to=${now}`).then((r) => r.json());
290
+ return {
291
+ [stEur]: apyToAprPercent(res.EURA) * 100,
292
+ [stUSD]: apyToAprPercent(res.USDA) * 100,
293
+ };
294
+ });
120
295
  const cbethPromise = safeFetch('CBETH', async () => {
121
296
  try {
122
297
  const res = await fetch(FeedData.CBETH, {
@@ -142,7 +317,7 @@ export const fetchGeneralYields = async () => {
142
317
  },
143
318
  })));
144
319
  });
145
- const [wstethData, ezethData, rethData, weethData, stmaticData, methData, maticXdata, susdeData, meridianData, savaxData, cbethData, rsethData, trumaticData, rtokensData, hypeData,] = await Promise.all([
320
+ const [wstethData, ezethData, rethData, weethData, stmaticData, methData, maticXdata, susdeData, meridianData, savaxData, cbethData, rsethData, trumaticData, rtokensData, hypeData, osEthData, ethXData, pufEthData, angleData, susdsData, srUsdData, yusdData, rlpData, wstusrData, csusdlData, sdeusdData, rswethData, ynethxData, ethZeroData, usdZeroPlusData,] = await Promise.all([
146
321
  wstethPromise,
147
322
  ezethPromise,
148
323
  rethPromise,
@@ -158,6 +333,21 @@ export const fetchGeneralYields = async () => {
158
333
  trumaticPromise,
159
334
  rtokensPromise,
160
335
  hypePromise,
336
+ osEthPromise,
337
+ ethxPromise,
338
+ pufEthPromise,
339
+ anglePromise,
340
+ susdsPromise,
341
+ srusdPromise,
342
+ yusdPromise,
343
+ rlpPromise,
344
+ wstusrPromise,
345
+ csusdlPromise,
346
+ sdeusdPromise,
347
+ rswethPromise,
348
+ ynethxPromise,
349
+ ethZeroPromise,
350
+ usdZeroPlusPromise,
161
351
  ]);
162
352
  const data = {
163
353
  intrinsicYields: {
@@ -170,14 +360,29 @@ export const fetchGeneralYields = async () => {
170
360
  WEETH: weethData,
171
361
  STMATIC: stmaticData,
172
362
  USDY: 4.35,
173
- USDE: 0,
174
363
  SUSDE: susdeData,
175
364
  SAVAX: savaxData,
176
365
  CBETH: cbethData,
177
366
  RSETH: rsethData,
178
367
  TRUMATIC: trumaticData,
368
+ [sUsds]: susdsData,
369
+ [ethZero]: ethZeroData,
370
+ [usdZeroPlus]: usdZeroPlusData,
371
+ [csusdl]: csusdlData,
372
+ [srUsd]: srUsdData,
373
+ [sdeusd]: sdeusdData,
374
+ [wstusr]: wstusrData,
375
+ [yusd]: yusdData,
376
+ [rlp]: rlpData,
377
+ [rsweth]: rswethData,
378
+ [osETH]: osEthData,
379
+ [ethX]: ethXData,
380
+ [ynethx]: ynethxData,
381
+ [tETH]: wstethData,
382
+ [pufEth]: pufEthData,
179
383
  ...rtokensData,
180
384
  ...hypeData,
385
+ ...angleData,
181
386
  },
182
387
  lenderRewards: {
183
388
  '167000': {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@1delta/margin-fetcher",
3
- "version": "0.0.25",
3
+ "version": "0.0.26",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -5,7 +5,30 @@ const bsdETH = 'Based ETH::BSDETH'
5
5
 
6
6
  const wstHype = 'Staked HYPE Shares::WSTHYPE'
7
7
  const kHYPE = 'Kinetiq Staked HYPE::kHYPE'
8
-
8
+ const tETH = 'Treehouse ETH::TETH'
9
+ const osETH = 'StakeWise Staked ETH::OSETH'
10
+ // const ethPlus = 'ETHPlus::ETH+'
11
+ const ethX = 'Stader ETHx::ETHx'
12
+ const pufEth = 'PUFETH'
13
+ const stUSD = 'Angle Staked USDA::STUSD'
14
+ const stEur = 'Angle Staked EURA::STEUR'
15
+ const sUsds = 'sUSDS::SUSDS'
16
+ const srUsd = 'Reservoir srUSD::SRUSD'
17
+ const yusd = 'YieldFi yUSD::yUSD'
18
+ const rlp = 'Resolv RLP::RLP'
19
+ const wstusr = 'Resolv wstUSR::WSTUSR'
20
+ const ethPlus = 'ETHPlus::ETH+'
21
+ const woEth = 'Wrapped OETH::WOETH'
22
+ const csusdl = 'Coinshift USDL Morpho Vault::CSUSDL'
23
+ const sfrxeth = 'Staked Frax Ether::sfrxETH'
24
+ const ceth = 'cETH::CETH'
25
+ const sfrax = 'Staked FRAX::SFRAX'
26
+ const sdeusd = 'Elixir Staked deUSD::SDEUSD'
27
+ const rsweth = 'Restaked Swell ETH::RSWETH'
28
+ const ynethx = 'ynETH MAX::YNETHX'
29
+ const usdZeroPlus = 'Staked USD0::USD0++'
30
+ const ethZero = 'ETH0::ETH0'
31
+ const usdThree = "Web 3 Dollar::USD3"
9
32
  const FeedData = {
10
33
  WSTETH: 'https://eth-api.lido.fi/v1/protocol/steth/apr/sma',
11
34
  STMATIC: 'https://polygon.lido.fi/api/stats',
@@ -22,6 +45,22 @@ const FeedData = {
22
45
  TRUMATIC: 'https://api.trufin.io/staker/apy?staker=MATIC',
23
46
  RTOKENS: 'https://yields.reserve.org/pools',
24
47
  HYPE: 'https://api.hyperlend.finance/data/nativeApy',
48
+ ETHX: 'https://universe.staderlabs.com/eth/apy',
49
+ OSETH:
50
+ 'https://graphs.stakewise.io/mainnet-a/subgraphs/name/stakewise/prod?opName=osTokenApy',
51
+ PUFETH: 'https://api-v2.puffer.fi/backend-for-frontend/tvl/all',
52
+ ANGLE: 'https://exporter.angle.money/v2/savingsApr',
53
+ SUSDS: 'https://info-sky.blockanalitica.com/api/v1/overall/?format=json',
54
+ SRUSD: 'https://app.reservoir.xyz/api/website',
55
+ YUSD: 'https://ctrl.yield.fi/t/yusd/apy',
56
+ RLP: 'https://api.resolv.xyz/apr/rlp/7d',
57
+ WSTUSR: 'https://api.resolv.xyz/apr/staking/7d',
58
+ MORPHO_VAULTS: 'https://blue-api.morpho.org/graphql',
59
+ SDEUSD: 'https://api-deusd-prod-public.elixir.xyz/public/deusd_apy',
60
+ RSWETH: 'https://v3-lst.svc.swellnetwork.io/api/tokens/sweth/apr',
61
+ YNETHX: 'https://gateway.yieldnest.finance/api/v1/graphql',
62
+ USDZEROPLUS: 'https://app.usual.money/api/rewards/rates/USD0++',
63
+ ETHZERO: 'https://app.usual.money/api/rewards/rates/ETH0',
25
64
  }
26
65
 
27
66
  const LenderAPIs = {
@@ -87,8 +126,7 @@ export const fetchGeneralYields = async () => {
87
126
  })
88
127
 
89
128
  const weethPromise = safeFetch('WEETH', async () => {
90
- const wstethRes = await fetch(FeedData.WSTETH).then((r) => r.json())
91
- const wstethApr = Number(wstethRes.data.aprs.at(-1).apr) * 0.9
129
+ const wstethRes = await wstethPromise
92
130
  let aYield = 0
93
131
  try {
94
132
  const weethRes = await fetch(FeedData.WEETH).then((r) => r.json())
@@ -96,7 +134,7 @@ export const fetchGeneralYields = async () => {
96
134
  } catch (e) {
97
135
  aYield = 0.5
98
136
  }
99
- return aYield + wstethApr
137
+ return aYield + (wstethRes ?? 0)
100
138
  })
101
139
 
102
140
  const stmaticPromise = safeFetch('STMATIC', async () => {
@@ -138,12 +176,160 @@ export const fetchGeneralYields = async () => {
138
176
  return apyToAprPercent(res.apy)
139
177
  })
140
178
 
179
+ const ethxPromise = safeFetch('ETHX', async () => {
180
+ const res = await fetch(FeedData.ETHX).then((r) => r.json())
181
+ return apyToAprPercent(res.value)
182
+ })
183
+
184
+ const osEthPromise = safeFetch('OSETH', async () => {
185
+ const res = await fetch(FeedData.OSETH, {
186
+ method: 'POST',
187
+ headers: { Accept: 'application/json' },
188
+ body: JSON.stringify({
189
+ query: 'query osTokenApy { osTokens { apy feePercent }}',
190
+ operationName: 'osTokenApy',
191
+ }),
192
+ }).then((r) => r.json())
193
+ return apyToAprPercent(res.data?.osTokens?.[0]?.apy)
194
+ })
195
+
196
+ const ynethxPromise = safeFetch('YNETHX', async () => {
197
+ const res = await fetch(FeedData.YNETHX, {
198
+ method: 'POST',
199
+ headers: {
200
+ Accept: 'application/json',
201
+ 'Content-Type': 'application/json',
202
+ },
203
+ body: JSON.stringify({
204
+ operationName: 'GetTokenMetrics',
205
+ variables: {
206
+ networkType: 'mainnet',
207
+ },
208
+ query:
209
+ 'query GetTokenMetrics($networkType: NetworkType!) {\n getLRTsData(networkType: $networkType) {\n summary {\n total_tvl {\n value\n value_raw\n value_usd\n __typename\n }\n __typename\n }\n tokens {\n token\n total_tvl {\n value\n value_raw\n value_usd\n __typename\n }\n price\n blockchains {\n chainId\n tvl {\n value\n value_raw\n value_usd\n __typename\n }\n apr {\n apr7d\n apr31d\n restaking7dApr\n __typename\n }\n strategyAssets {\n tokenAddress\n symbol\n apr7d\n tvl\n isBuffer\n protocols\n manager\n maturityDate\n __typename\n }\n contract_details {\n tokenAddress\n ynViewer\n referralDepositAdapter\n rateProvider\n __typename\n }\n historicalData {\n apy\n exchangeRate\n usdPrice\n baseAsset\n __typename\n }\n __typename\n }\n __typename\n }\n __typename\n }\n}',
210
+ }),
211
+ }).then((r) => r.json())
212
+
213
+ const dat = res?.data?.getLRTsData?.tokens
214
+ .find((x: any) => x.token === 'ynETHx')
215
+ ?.blockchains?.find((b: any) => b.chainId === 1)?.apr?.apr31d
216
+
217
+ return Number(dat ?? 0)
218
+ })
219
+
220
+ const pufEthPromise = safeFetch('PUFETH', async () => {
221
+ const res = await fetch(FeedData.PUFETH, {
222
+ method: 'GET',
223
+ headers: { Accept: 'application/json' },
224
+ }).then((r) => r.json())
225
+ return apyToAprPercent(res.apy)
226
+ })
227
+
228
+ const usdZeroPlusPromise = safeFetch('USDZEROPLUS', async () => {
229
+ const res = await fetch(FeedData.USDZEROPLUS, {
230
+ method: 'GET',
231
+ headers: { Accept: 'application/json' },
232
+ }).then((r) => r.json())
233
+ return Number(res?.rewards[0]?.apr ?? 0) * 100
234
+ })
235
+
236
+ const ethZeroPromise = safeFetch('ETHZERO', async () => {
237
+ const res = await fetch(FeedData.ETHZERO, {
238
+ method: 'GET',
239
+ headers: { Accept: 'application/json' },
240
+ }).then((r) => r.json())
241
+ return Number(res?.rewards[0]?.apr ?? 0) * 100
242
+ })
243
+
244
+ const susdsPromise = safeFetch('SUSDS', async () => {
245
+ const res = await fetch(FeedData.SUSDS, {
246
+ method: 'GET',
247
+ headers: { Accept: 'application/json' },
248
+ }).then((r) => r.json())
249
+ return apyToAprPercent(Number(res?.[0]?.sky_savings_rate_apy ?? 0) * 100)
250
+ })
251
+
252
+ const srusdPromise = safeFetch('SRUSD', async () => {
253
+ const res = await fetch(FeedData.SRUSD, {
254
+ method: 'GET',
255
+ headers: { Accept: 'application/json' },
256
+ }).then((r) => r.json())
257
+ return apyToAprPercent(Number(res?.srusdApy ?? 0))
258
+ })
259
+
260
+ const yusdPromise = safeFetch('YUSD', async () => {
261
+ const res = await fetch(FeedData.YUSD, {
262
+ method: 'GET',
263
+ headers: { Accept: 'application/json' },
264
+ }).then((r) => r.json())
265
+ return apyToAprPercent(Number(res?.apy ?? 0))
266
+ })
267
+
268
+ const rlpPromise = safeFetch('RLP', async () => {
269
+ const res = await fetch(FeedData.RLP, {
270
+ method: 'GET',
271
+ headers: { Accept: 'application/json' },
272
+ }).then((r) => r.json())
273
+ return Number(res?.value ?? 0) * 100
274
+ })
275
+
276
+ const wstusrPromise = safeFetch('WSTUSR', async () => {
277
+ const res = await fetch(FeedData.WSTUSR, {
278
+ method: 'GET',
279
+ headers: { Accept: 'application/json' },
280
+ }).then((r) => r.json())
281
+ return Number(res?.value ?? 0) * 100
282
+ })
283
+
284
+ const sdeusdPromise = safeFetch('SDEUSD', async () => {
285
+ const res = await fetch(FeedData.SDEUSD, {
286
+ method: 'GET',
287
+ headers: { Accept: 'application/json' },
288
+ }).then((r) => r.json())
289
+ return apyToAprPercent((res?.deusd_apy ?? 0) / 100) * 100
290
+ })
291
+
292
+ const rswethPromise = safeFetch('RSWETH', async () => {
293
+ const res = await fetch(FeedData.RSWETH, {
294
+ method: 'GET',
295
+ headers: { Accept: 'application/json' },
296
+ }).then((r) => r.text())
297
+ return Number(res) ?? 0
298
+ })
299
+
300
+ const csusdlPromise = safeFetch('CSUSDL', async () => {
301
+ const res = await fetch(FeedData.MORPHO_VAULTS, {
302
+ method: 'POST',
303
+ headers: { Accept: 'application/json' },
304
+ body: JSON.stringify({
305
+ query:
306
+ 'query GetAllCurrentAPYFromVault($address: String!) {\n vaultByAddress(address: $address) {\n state {\n apy\n netApy\n }\n asset {\n yield {\n apr\n }\n }\n }\n}',
307
+ variables: {
308
+ address: '0xbEeFc011e94f43b8B7b455eBaB290C7Ab4E216f1',
309
+ },
310
+ }),
311
+ }).then((r) => r.json())
312
+ const vba = res?.data?.vaultByAddress
313
+ return (
314
+ apyToAprPercent(vba.state.apy ?? 0) * 100 +
315
+ (vba?.asset?.yield.apr ?? 0) * 100
316
+ )
317
+ })
318
+
141
319
  const rtokensPromise = safeFetch('RTOKENS', async () => {
142
320
  const res = await fetch(FeedData.RTOKENS).then((r) => r.json())
143
321
  const data = res.rtokens['8453']
322
+ const dataMainnet = res.rtokens['1']
323
+ const dataMainnetColalterals = res.collaterals['1']
144
324
  return {
145
325
  [bsdETH]: apyToAprPercent(data.bsdETH / 100) * 100,
146
326
  [hyUSD]: apyToAprPercent(data.hyUSD / 100) * 100,
327
+ [sfrxeth]: apyToAprPercent(dataMainnetColalterals.sfrxeth / 100) * 100,
328
+ [sfrax]: apyToAprPercent(dataMainnetColalterals.sfrax / 100) * 100,
329
+ [ceth]: apyToAprPercent(dataMainnetColalterals.ceth / 100) * 100,
330
+ [ethPlus]: apyToAprPercent(dataMainnet['ETH+'] / 100) * 100,
331
+ [usdThree]: apyToAprPercent(dataMainnet['USD3'] / 100) * 100,
332
+ [woEth]: apyToAprPercent(dataMainnetColalterals.woeth / 100) * 100,
147
333
  }
148
334
  })
149
335
 
@@ -155,6 +341,18 @@ export const fetchGeneralYields = async () => {
155
341
  }
156
342
  })
157
343
 
344
+ const anglePromise = safeFetch('ANGLE', async () => {
345
+ const now = Math.floor(Date.now() / 1000)
346
+ const nowMinusWeek = now - 7 * 24 * 3600
347
+ const res = await fetch(
348
+ FeedData.ANGLE + `?from=${nowMinusWeek}&to=${now}`,
349
+ ).then((r) => r.json())
350
+ return {
351
+ [stEur]: apyToAprPercent(res.EURA) * 100,
352
+ [stUSD]: apyToAprPercent(res.USDA) * 100,
353
+ }
354
+ })
355
+
158
356
  const cbethPromise = safeFetch('CBETH', async () => {
159
357
  try {
160
358
  const res = await fetch(FeedData.CBETH, {
@@ -200,6 +398,21 @@ export const fetchGeneralYields = async () => {
200
398
  trumaticData,
201
399
  rtokensData,
202
400
  hypeData,
401
+ osEthData,
402
+ ethXData,
403
+ pufEthData,
404
+ angleData,
405
+ susdsData,
406
+ srUsdData,
407
+ yusdData,
408
+ rlpData,
409
+ wstusrData,
410
+ csusdlData,
411
+ sdeusdData,
412
+ rswethData,
413
+ ynethxData,
414
+ ethZeroData,
415
+ usdZeroPlusData,
203
416
  ] = await Promise.all([
204
417
  wstethPromise,
205
418
  ezethPromise,
@@ -216,6 +429,21 @@ export const fetchGeneralYields = async () => {
216
429
  trumaticPromise,
217
430
  rtokensPromise,
218
431
  hypePromise,
432
+ osEthPromise,
433
+ ethxPromise,
434
+ pufEthPromise,
435
+ anglePromise,
436
+ susdsPromise,
437
+ srusdPromise,
438
+ yusdPromise,
439
+ rlpPromise,
440
+ wstusrPromise,
441
+ csusdlPromise,
442
+ sdeusdPromise,
443
+ rswethPromise,
444
+ ynethxPromise,
445
+ ethZeroPromise,
446
+ usdZeroPlusPromise,
219
447
  ])
220
448
 
221
449
  const data: YieldDataWithTimestamp = {
@@ -229,14 +457,29 @@ export const fetchGeneralYields = async () => {
229
457
  WEETH: weethData,
230
458
  STMATIC: stmaticData,
231
459
  USDY: 4.35,
232
- USDE: 0,
233
460
  SUSDE: susdeData,
234
461
  SAVAX: savaxData,
235
462
  CBETH: cbethData,
236
463
  RSETH: rsethData,
237
464
  TRUMATIC: trumaticData,
465
+ [sUsds]: susdsData,
466
+ [ethZero]: ethZeroData,
467
+ [usdZeroPlus]: usdZeroPlusData,
468
+ [csusdl]: csusdlData,
469
+ [srUsd]: srUsdData,
470
+ [sdeusd]: sdeusdData,
471
+ [wstusr]: wstusrData,
472
+ [yusd]: yusdData,
473
+ [rlp]: rlpData,
474
+ [rsweth]: rswethData,
475
+ [osETH]: osEthData,
476
+ [ethX]: ethXData,
477
+ [ynethx]: ynethxData,
478
+ [tETH]: wstethData,
479
+ [pufEth]: pufEthData,
238
480
  ...rtokensData,
239
481
  ...hypeData,
482
+ ...angleData,
240
483
  },
241
484
  lenderRewards: {
242
485
  '167000': {
@@ -16,8 +16,8 @@ describe(
16
16
  // Chain.POLYGON_MAINNET,
17
17
  // Chain.HEMI_NETWORK,
18
18
  // Chain.ARBITRUM_ONE,
19
- // Chain.HYPEREVM,
20
- Chain.ETHEREUM_MAINNET,
19
+ Chain.HYPEREVM,
20
+ // Chain.ETHEREUM_MAINNET,
21
21
  ],
22
22
  getEvmClient,
23
23
  )
@@ -10,7 +10,7 @@ describe(
10
10
  prettyPrint(yields)
11
11
  })
12
12
  },
13
- { timeout: 10000 },
13
+ { timeout: 30000 },
14
14
  )
15
15
 
16
16
  function prettyPrint(obj: any) {