@defisaver/positions-sdk 2.1.25 → 2.1.26-fluid-dev

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.
@@ -26,8 +26,8 @@ export declare const EMPTY_FLUID_DATA: {
26
26
  automationResubscribeRequired: boolean;
27
27
  lastUpdated: number;
28
28
  };
29
- export declare const _getFluidMarketData: (provider: PublicClient, network: NetworkNumber, market: FluidMarketInfo) => Promise<FluidMarketData>;
30
- export declare const getFluidMarketData: (provider: EthereumProvider, network: NetworkNumber, market: FluidMarketInfo) => Promise<FluidMarketData>;
29
+ export declare const _getFluidMarketData: (provider: PublicClient, network: NetworkNumber, market: FluidMarketInfo) => Promise<FluidMarketData | undefined>;
30
+ export declare const getFluidMarketData: (provider: EthereumProvider, network: NetworkNumber, market: FluidMarketInfo) => Promise<FluidMarketData | undefined>;
31
31
  export declare const _getFluidVaultIdsForUser: (provider: Client, network: NetworkNumber, user: EthAddress) => Promise<string[]>;
32
32
  export declare const getFluidVaultIdsForUser: (provider: EthereumProvider, network: NetworkNumber, user: EthAddress) => Promise<string[]>;
33
33
  export declare const _getFluidPosition: (provider: Client, network: NetworkNumber, vaultId: string, extractedState: {
@@ -41,13 +41,13 @@ export declare const getFluidPosition: (provider: EthereumProvider, network: Net
41
41
  export declare const _getFluidPositionWithMarket: (provider: PublicClient, network: NetworkNumber, vaultId: string) => Promise<{
42
42
  userData: FluidVaultData;
43
43
  marketData: FluidMarketData;
44
- }>;
44
+ } | undefined>;
45
45
  export declare const getFluidPositionWithMarket: (provider: EthereumProvider, network: NetworkNumber, vaultId: string) => Promise<{
46
46
  userData: FluidVaultData;
47
47
  marketData: FluidMarketData;
48
- }>;
49
- export declare const _getAllFluidMarketDataChunked: (network: NetworkNumber, provider: PublicClient) => Promise<FluidMarketData[]>;
50
- export declare const getAllFluidMarketDataChunked: (network: NetworkNumber, provider: EthereumProvider) => Promise<FluidMarketData[]>;
48
+ } | undefined>;
49
+ export declare const _getAllFluidMarketDataChunked: (network: NetworkNumber, provider: PublicClient) => Promise<(FluidMarketData | undefined)[]>;
50
+ export declare const getAllFluidMarketDataChunked: (network: NetworkNumber, provider: EthereumProvider) => Promise<(FluidMarketData | undefined)[]>;
51
51
  export declare const _getFluidTokenData: (provider: Client, network: NetworkNumber, token: string) => Promise<{
52
52
  fTokenAddress: any;
53
53
  fTokenSymbol: string;
@@ -117,7 +117,7 @@ export declare const getAllUserEarnPositionsWithFTokens: (provider: EthereumProv
117
117
  depositedShares: string;
118
118
  }[]>;
119
119
  export declare const _getUserPositions: (provider: PublicClient, network: NetworkNumber, user: EthAddress) => Promise<{
120
- marketData: FluidMarketData;
120
+ marketData: FluidMarketData | undefined;
121
121
  userData: {
122
122
  suppliedUsd: string;
123
123
  borrowedUsd: string;
@@ -145,10 +145,10 @@ export declare const _getUserPositions: (provider: PublicClient, network: Networ
145
145
  supplyShares?: string;
146
146
  borrowShares?: string;
147
147
  nftId: string;
148
- };
148
+ } | undefined;
149
149
  }[]>;
150
150
  export declare const getUserPositions: (provider: EthereumProvider, network: NetworkNumber, user: EthAddress) => Promise<{
151
- marketData: FluidMarketData;
151
+ marketData: FluidMarketData | undefined;
152
152
  userData: {
153
153
  suppliedUsd: string;
154
154
  borrowedUsd: string;
@@ -176,10 +176,10 @@ export declare const getUserPositions: (provider: EthereumProvider, network: Net
176
176
  supplyShares?: string;
177
177
  borrowShares?: string;
178
178
  nftId: string;
179
- };
179
+ } | undefined;
180
180
  }[]>;
181
181
  export declare const _getUserPositionsPortfolio: (provider: PublicClient, network: NetworkNumber, user: EthAddress) => Promise<{
182
- marketData: FluidMarketData;
182
+ marketData: FluidMarketData | undefined;
183
183
  userData: {
184
184
  suppliedUsd: string;
185
185
  borrowedUsd: string;
@@ -207,5 +207,5 @@ export declare const _getUserPositionsPortfolio: (provider: PublicClient, networ
207
207
  supplyShares?: string;
208
208
  borrowShares?: string;
209
209
  nftId: string;
210
- };
210
+ } | undefined;
211
211
  }[]>;
@@ -51,7 +51,7 @@ const getChainLinkPricesForTokens = (tokens, network, client) => __awaiter(void
51
51
  const ethFeedContract = (0, contracts_1.ETHPriceFeedContractViem)(client, network);
52
52
  const staticCalls = [
53
53
  {
54
- address: ethFeedContract.address,
54
+ address: ethFeedContract.address, //
55
55
  abi: ethFeedContract.abi,
56
56
  functionName: 'latestAnswer',
57
57
  args: [],
@@ -887,6 +887,10 @@ const parseT4MarketData = (provider_1, data_1, network_1, ...args_1) => __awaite
887
887
  };
888
888
  });
889
889
  const parseMarketData = (provider_1, data_1, network_1, ...args_1) => __awaiter(void 0, [provider_1, data_1, network_1, ...args_1], void 0, function* (provider, data, network, tokenPrices = null) {
890
+ const marketInfo = (0, markets_1.getFluidMarketInfoById)(+(data.vaultId.toString()), network);
891
+ if (!marketInfo) {
892
+ return; // skip unsupported market
893
+ }
890
894
  const vaultType = parseVaultType(+(data.vaultType.toString()));
891
895
  switch (vaultType) {
892
896
  case types_1.FluidVaultType.T1:
@@ -1127,6 +1131,9 @@ const _getFluidPositionWithMarket = (provider, network, vaultId) => __awaiter(vo
1127
1131
  const view = (0, contracts_1.FluidViewContractViem)(provider, network);
1128
1132
  const data = yield view.read.getPositionByNftId([BigInt(vaultId)]);
1129
1133
  const marketData = yield parseMarketData(provider, data[1], network);
1134
+ if (!marketData) {
1135
+ return;
1136
+ }
1130
1137
  const userData = parseUserData(data[0], marketData);
1131
1138
  return {
1132
1139
  userData,
@@ -1241,12 +1248,12 @@ exports.getAllUserEarnPositionsWithFTokens = getAllUserEarnPositionsWithFTokens;
1241
1248
  const _getUserPositions = (provider, network, user) => __awaiter(void 0, void 0, void 0, function* () {
1242
1249
  const view = (0, contracts_1.FluidViewContractViem)(provider, network);
1243
1250
  const data = yield view.read.getUserPositions([user]);
1244
- const parsedMarketData = yield Promise.all(data[1].map((vaultData) => __awaiter(void 0, void 0, void 0, function* () { return parseMarketData(provider, vaultData, network); })));
1245
- const userData = data[0].map((position, i) => (Object.assign({}, parseUserData(position, parsedMarketData[i]))));
1251
+ const parsedMarketData = (yield Promise.all(data[1].map((vaultData) => __awaiter(void 0, void 0, void 0, function* () { return parseMarketData(provider, vaultData, network); }))));
1252
+ const userData = data[0].map((position, i) => (parsedMarketData[i] && Object.assign({}, parseUserData(position, parsedMarketData[i]))));
1246
1253
  return parsedMarketData.map((market, i) => ({
1247
1254
  marketData: market,
1248
1255
  userData: userData[i],
1249
- }));
1256
+ })).filter(md => md.marketData !== undefined);
1250
1257
  });
1251
1258
  exports._getUserPositions = _getUserPositions;
1252
1259
  const getUserPositions = (provider, network, user) => __awaiter(void 0, void 0, void 0, function* () { return (0, exports._getUserPositions)((0, viem_1.getViemProvider)(provider, network), network, user); });
@@ -1313,13 +1320,18 @@ const getTokensPricesForPortfolio = (tokens, provider, network) => __awaiter(voi
1313
1320
  const tokensWithChainlinkPrices = tokens.filter((token) => !tokensWithoutChainlinkPrices.includes(token));
1314
1321
  const pricesFromChainlink = {};
1315
1322
  yield Promise.all(tokensWithChainlinkPrices.map((token) => __awaiter(void 0, void 0, void 0, function* () {
1316
- const price = yield getTokenPricePortfolio(token, provider, network);
1317
- if (typeof price === 'string')
1318
- pricesFromChainlink[token] = price;
1319
- else if (typeof price === 'bigint')
1320
- pricesFromChainlink[token] = new decimal_js_1.default(price).div(1e8).toString();
1321
- else
1322
- pricesFromChainlink[token] = new decimal_js_1.default(price[1].toString()).div(1e8).toString();
1323
+ try {
1324
+ const price = yield getTokenPricePortfolio(token, provider, network);
1325
+ if (typeof price === 'string')
1326
+ pricesFromChainlink[token] = price;
1327
+ else if (typeof price === 'bigint')
1328
+ pricesFromChainlink[token] = new decimal_js_1.default(price).div(1e8).toString();
1329
+ else
1330
+ pricesFromChainlink[token] = new decimal_js_1.default(price[1].toString()).div(1e8).toString();
1331
+ }
1332
+ catch (error) {
1333
+ console.error(`Error occured while fetching price for ${token}: ${error.message}`);
1334
+ }
1323
1335
  })));
1324
1336
  tokens.forEach((token) => {
1325
1337
  if (tokensWithoutChainlinkPrices.includes(token)) {
@@ -1347,11 +1359,11 @@ const _getUserPositionsPortfolio = (provider, network, user) => __awaiter(void 0
1347
1359
  if (!tokens.includes('WBTC'))
1348
1360
  tokens.push('WBTC');
1349
1361
  const tokenPrices = yield getTokensPricesForPortfolio(tokens, provider, network);
1350
- const parsedMarketData = yield Promise.all(data[1].map((vaultData) => __awaiter(void 0, void 0, void 0, function* () { return parseMarketData(provider, vaultData, network, tokenPrices); })));
1351
- const userData = data[0].map((position, i) => (Object.assign({}, parseUserData(position, parsedMarketData[i]))));
1362
+ const parsedMarketData = (yield Promise.all(data[1].map((vaultData) => __awaiter(void 0, void 0, void 0, function* () { return parseMarketData(provider, vaultData, network, tokenPrices); }))));
1363
+ const userData = data[0].map((position, i) => (parsedMarketData[i] && Object.assign({}, parseUserData(position, parsedMarketData[i]))));
1352
1364
  return parsedMarketData.map((market, i) => ({
1353
1365
  marketData: market,
1354
1366
  userData: userData[i],
1355
- }));
1367
+ })).filter(md => md.marketData !== undefined && md.userData !== undefined);
1356
1368
  });
1357
1369
  exports._getUserPositionsPortfolio = _getUserPositionsPortfolio;
@@ -196,9 +196,9 @@ function getPortfolioData(provider, network, defaultProvider, addresses, summerF
196
196
  try {
197
197
  if (!isFluidSupported)
198
198
  return; // Fluid is not available on Optimism
199
- const userPositions = yield (0, fluid_1._getUserPositionsPortfolio)(client, network, address);
199
+ const userPositions = (yield (0, fluid_1._getUserPositionsPortfolio)(client, network, address));
200
200
  for (const position of userPositions) {
201
- if (new decimal_js_1.default(position.userData.suppliedUsd).gt(0)) {
201
+ if (position.userData && new decimal_js_1.default(position.userData.suppliedUsd).gt(0)) {
202
202
  positions[address.toLowerCase()].fluid.data[position.userData.nftId] = position.userData;
203
203
  }
204
204
  }
@@ -26,8 +26,8 @@ export declare const EMPTY_FLUID_DATA: {
26
26
  automationResubscribeRequired: boolean;
27
27
  lastUpdated: number;
28
28
  };
29
- export declare const _getFluidMarketData: (provider: PublicClient, network: NetworkNumber, market: FluidMarketInfo) => Promise<FluidMarketData>;
30
- export declare const getFluidMarketData: (provider: EthereumProvider, network: NetworkNumber, market: FluidMarketInfo) => Promise<FluidMarketData>;
29
+ export declare const _getFluidMarketData: (provider: PublicClient, network: NetworkNumber, market: FluidMarketInfo) => Promise<FluidMarketData | undefined>;
30
+ export declare const getFluidMarketData: (provider: EthereumProvider, network: NetworkNumber, market: FluidMarketInfo) => Promise<FluidMarketData | undefined>;
31
31
  export declare const _getFluidVaultIdsForUser: (provider: Client, network: NetworkNumber, user: EthAddress) => Promise<string[]>;
32
32
  export declare const getFluidVaultIdsForUser: (provider: EthereumProvider, network: NetworkNumber, user: EthAddress) => Promise<string[]>;
33
33
  export declare const _getFluidPosition: (provider: Client, network: NetworkNumber, vaultId: string, extractedState: {
@@ -41,13 +41,13 @@ export declare const getFluidPosition: (provider: EthereumProvider, network: Net
41
41
  export declare const _getFluidPositionWithMarket: (provider: PublicClient, network: NetworkNumber, vaultId: string) => Promise<{
42
42
  userData: FluidVaultData;
43
43
  marketData: FluidMarketData;
44
- }>;
44
+ } | undefined>;
45
45
  export declare const getFluidPositionWithMarket: (provider: EthereumProvider, network: NetworkNumber, vaultId: string) => Promise<{
46
46
  userData: FluidVaultData;
47
47
  marketData: FluidMarketData;
48
- }>;
49
- export declare const _getAllFluidMarketDataChunked: (network: NetworkNumber, provider: PublicClient) => Promise<FluidMarketData[]>;
50
- export declare const getAllFluidMarketDataChunked: (network: NetworkNumber, provider: EthereumProvider) => Promise<FluidMarketData[]>;
48
+ } | undefined>;
49
+ export declare const _getAllFluidMarketDataChunked: (network: NetworkNumber, provider: PublicClient) => Promise<(FluidMarketData | undefined)[]>;
50
+ export declare const getAllFluidMarketDataChunked: (network: NetworkNumber, provider: EthereumProvider) => Promise<(FluidMarketData | undefined)[]>;
51
51
  export declare const _getFluidTokenData: (provider: Client, network: NetworkNumber, token: string) => Promise<{
52
52
  fTokenAddress: any;
53
53
  fTokenSymbol: string;
@@ -117,7 +117,7 @@ export declare const getAllUserEarnPositionsWithFTokens: (provider: EthereumProv
117
117
  depositedShares: string;
118
118
  }[]>;
119
119
  export declare const _getUserPositions: (provider: PublicClient, network: NetworkNumber, user: EthAddress) => Promise<{
120
- marketData: FluidMarketData;
120
+ marketData: FluidMarketData | undefined;
121
121
  userData: {
122
122
  suppliedUsd: string;
123
123
  borrowedUsd: string;
@@ -145,10 +145,10 @@ export declare const _getUserPositions: (provider: PublicClient, network: Networ
145
145
  supplyShares?: string;
146
146
  borrowShares?: string;
147
147
  nftId: string;
148
- };
148
+ } | undefined;
149
149
  }[]>;
150
150
  export declare const getUserPositions: (provider: EthereumProvider, network: NetworkNumber, user: EthAddress) => Promise<{
151
- marketData: FluidMarketData;
151
+ marketData: FluidMarketData | undefined;
152
152
  userData: {
153
153
  suppliedUsd: string;
154
154
  borrowedUsd: string;
@@ -176,10 +176,10 @@ export declare const getUserPositions: (provider: EthereumProvider, network: Net
176
176
  supplyShares?: string;
177
177
  borrowShares?: string;
178
178
  nftId: string;
179
- };
179
+ } | undefined;
180
180
  }[]>;
181
181
  export declare const _getUserPositionsPortfolio: (provider: PublicClient, network: NetworkNumber, user: EthAddress) => Promise<{
182
- marketData: FluidMarketData;
182
+ marketData: FluidMarketData | undefined;
183
183
  userData: {
184
184
  suppliedUsd: string;
185
185
  borrowedUsd: string;
@@ -207,5 +207,5 @@ export declare const _getUserPositionsPortfolio: (provider: PublicClient, networ
207
207
  supplyShares?: string;
208
208
  borrowShares?: string;
209
209
  nftId: string;
210
- };
210
+ } | undefined;
211
211
  }[]>;
@@ -45,7 +45,7 @@ const getChainLinkPricesForTokens = (tokens, network, client) => __awaiter(void
45
45
  const ethFeedContract = ETHPriceFeedContractViem(client, network);
46
46
  const staticCalls = [
47
47
  {
48
- address: ethFeedContract.address,
48
+ address: ethFeedContract.address, //
49
49
  abi: ethFeedContract.abi,
50
50
  functionName: 'latestAnswer',
51
51
  args: [],
@@ -881,6 +881,10 @@ const parseT4MarketData = (provider_1, data_1, network_1, ...args_1) => __awaite
881
881
  };
882
882
  });
883
883
  const parseMarketData = (provider_1, data_1, network_1, ...args_1) => __awaiter(void 0, [provider_1, data_1, network_1, ...args_1], void 0, function* (provider, data, network, tokenPrices = null) {
884
+ const marketInfo = getFluidMarketInfoById(+(data.vaultId.toString()), network);
885
+ if (!marketInfo) {
886
+ return; // skip unsupported market
887
+ }
884
888
  const vaultType = parseVaultType(+(data.vaultType.toString()));
885
889
  switch (vaultType) {
886
890
  case FluidVaultType.T1:
@@ -1115,6 +1119,9 @@ export const _getFluidPositionWithMarket = (provider, network, vaultId) => __awa
1115
1119
  const view = FluidViewContractViem(provider, network);
1116
1120
  const data = yield view.read.getPositionByNftId([BigInt(vaultId)]);
1117
1121
  const marketData = yield parseMarketData(provider, data[1], network);
1122
+ if (!marketData) {
1123
+ return;
1124
+ }
1118
1125
  const userData = parseUserData(data[0], marketData);
1119
1126
  return {
1120
1127
  userData,
@@ -1219,12 +1226,12 @@ export const getAllUserEarnPositionsWithFTokens = (provider, network, user) => _
1219
1226
  export const _getUserPositions = (provider, network, user) => __awaiter(void 0, void 0, void 0, function* () {
1220
1227
  const view = FluidViewContractViem(provider, network);
1221
1228
  const data = yield view.read.getUserPositions([user]);
1222
- const parsedMarketData = yield Promise.all(data[1].map((vaultData) => __awaiter(void 0, void 0, void 0, function* () { return parseMarketData(provider, vaultData, network); })));
1223
- const userData = data[0].map((position, i) => (Object.assign({}, parseUserData(position, parsedMarketData[i]))));
1229
+ const parsedMarketData = (yield Promise.all(data[1].map((vaultData) => __awaiter(void 0, void 0, void 0, function* () { return parseMarketData(provider, vaultData, network); }))));
1230
+ const userData = data[0].map((position, i) => (parsedMarketData[i] && Object.assign({}, parseUserData(position, parsedMarketData[i]))));
1224
1231
  return parsedMarketData.map((market, i) => ({
1225
1232
  marketData: market,
1226
1233
  userData: userData[i],
1227
- }));
1234
+ })).filter(md => md.marketData !== undefined);
1228
1235
  });
1229
1236
  export const getUserPositions = (provider, network, user) => __awaiter(void 0, void 0, void 0, function* () { return _getUserPositions(getViemProvider(provider, network), network, user); });
1230
1237
  const getTokenPricePortfolio = (token, provider, network) => __awaiter(void 0, void 0, void 0, function* () {
@@ -1289,13 +1296,18 @@ const getTokensPricesForPortfolio = (tokens, provider, network) => __awaiter(voi
1289
1296
  const tokensWithChainlinkPrices = tokens.filter((token) => !tokensWithoutChainlinkPrices.includes(token));
1290
1297
  const pricesFromChainlink = {};
1291
1298
  yield Promise.all(tokensWithChainlinkPrices.map((token) => __awaiter(void 0, void 0, void 0, function* () {
1292
- const price = yield getTokenPricePortfolio(token, provider, network);
1293
- if (typeof price === 'string')
1294
- pricesFromChainlink[token] = price;
1295
- else if (typeof price === 'bigint')
1296
- pricesFromChainlink[token] = new Dec(price).div(1e8).toString();
1297
- else
1298
- pricesFromChainlink[token] = new Dec(price[1].toString()).div(1e8).toString();
1299
+ try {
1300
+ const price = yield getTokenPricePortfolio(token, provider, network);
1301
+ if (typeof price === 'string')
1302
+ pricesFromChainlink[token] = price;
1303
+ else if (typeof price === 'bigint')
1304
+ pricesFromChainlink[token] = new Dec(price).div(1e8).toString();
1305
+ else
1306
+ pricesFromChainlink[token] = new Dec(price[1].toString()).div(1e8).toString();
1307
+ }
1308
+ catch (error) {
1309
+ console.error(`Error occured while fetching price for ${token}: ${error.message}`);
1310
+ }
1299
1311
  })));
1300
1312
  tokens.forEach((token) => {
1301
1313
  if (tokensWithoutChainlinkPrices.includes(token)) {
@@ -1323,10 +1335,10 @@ export const _getUserPositionsPortfolio = (provider, network, user) => __awaiter
1323
1335
  if (!tokens.includes('WBTC'))
1324
1336
  tokens.push('WBTC');
1325
1337
  const tokenPrices = yield getTokensPricesForPortfolio(tokens, provider, network);
1326
- const parsedMarketData = yield Promise.all(data[1].map((vaultData) => __awaiter(void 0, void 0, void 0, function* () { return parseMarketData(provider, vaultData, network, tokenPrices); })));
1327
- const userData = data[0].map((position, i) => (Object.assign({}, parseUserData(position, parsedMarketData[i]))));
1338
+ const parsedMarketData = (yield Promise.all(data[1].map((vaultData) => __awaiter(void 0, void 0, void 0, function* () { return parseMarketData(provider, vaultData, network, tokenPrices); }))));
1339
+ const userData = data[0].map((position, i) => (parsedMarketData[i] && Object.assign({}, parseUserData(position, parsedMarketData[i]))));
1328
1340
  return parsedMarketData.map((market, i) => ({
1329
1341
  marketData: market,
1330
1342
  userData: userData[i],
1331
- }));
1343
+ })).filter(md => md.marketData !== undefined && md.userData !== undefined);
1332
1344
  });
@@ -190,9 +190,9 @@ export function getPortfolioData(provider, network, defaultProvider, addresses,
190
190
  try {
191
191
  if (!isFluidSupported)
192
192
  return; // Fluid is not available on Optimism
193
- const userPositions = yield _getUserPositionsPortfolio(client, network, address);
193
+ const userPositions = (yield _getUserPositionsPortfolio(client, network, address));
194
194
  for (const position of userPositions) {
195
- if (new Dec(position.userData.suppliedUsd).gt(0)) {
195
+ if (position.userData && new Dec(position.userData.suppliedUsd).gt(0)) {
196
196
  positions[address.toLowerCase()].fluid.data[position.userData.nftId] = position.userData;
197
197
  }
198
198
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@defisaver/positions-sdk",
3
- "version": "2.1.25",
3
+ "version": "2.1.26-fluid-dev",
4
4
  "description": "",
5
5
  "main": "./cjs/index.js",
6
6
  "module": "./esm/index.js",
@@ -102,7 +102,7 @@ const getChainLinkPricesForTokens = async (
102
102
 
103
103
  const staticCalls = [
104
104
  {
105
- address: ethFeedContract.address,
105
+ address: ethFeedContract.address, //
106
106
  abi: ethFeedContract.abi,
107
107
  functionName: 'latestAnswer',
108
108
  args: [],
@@ -1116,6 +1116,10 @@ const parseT4MarketData = async (provider: PublicClient, data: FluidVaultDataStr
1116
1116
  };
1117
1117
 
1118
1118
  const parseMarketData = async (provider: PublicClient, data: FluidVaultDataStructOutputStruct, network: NetworkNumber, tokenPrices: Record<string, string> | null = null) => {
1119
+ const marketInfo = getFluidMarketInfoById(+(data.vaultId.toString()), network);
1120
+ if (!marketInfo) {
1121
+ return; // skip unsupported market
1122
+ }
1119
1123
  const vaultType = parseVaultType(+(data.vaultType.toString()));
1120
1124
  switch (vaultType) {
1121
1125
  case FluidVaultType.T1:
@@ -1497,6 +1501,9 @@ export const _getFluidPositionWithMarket = async (provider: PublicClient, networ
1497
1501
  const view = FluidViewContractViem(provider, network);
1498
1502
  const data = await view.read.getPositionByNftId([BigInt(vaultId)]);
1499
1503
  const marketData = await parseMarketData(provider, data[1], network);
1504
+ if (!marketData) {
1505
+ return;
1506
+ }
1500
1507
  const userData = parseUserData(data[0], marketData);
1501
1508
 
1502
1509
  return {
@@ -1646,14 +1653,14 @@ export const _getUserPositions = async (provider: PublicClient, network: Network
1646
1653
 
1647
1654
  const data = await view.read.getUserPositions([user]);
1648
1655
 
1649
- const parsedMarketData = await Promise.all(data[1].map(async (vaultData) => parseMarketData(provider, vaultData, network)));
1656
+ const parsedMarketData = (await Promise.all(data[1].map(async (vaultData) => parseMarketData(provider, vaultData, network))));
1650
1657
 
1651
- const userData = data[0].map((position, i) => ({ ...parseUserData(position, parsedMarketData[i]) }));
1658
+ const userData = data[0].map((position, i) => (parsedMarketData[i] && { ...parseUserData(position, parsedMarketData[i]) }));
1652
1659
 
1653
1660
  return parsedMarketData.map((market, i) => ({
1654
1661
  marketData: market,
1655
1662
  userData: userData[i],
1656
- }));
1663
+ })).filter(md => md.marketData !== undefined);
1657
1664
  };
1658
1665
 
1659
1666
  export const getUserPositions = async (
@@ -1732,10 +1739,14 @@ const getTokensPricesForPortfolio = async (tokens: string[], provider: PublicCli
1732
1739
  const tokensWithChainlinkPrices = tokens.filter((token) => !tokensWithoutChainlinkPrices.includes(token));
1733
1740
  const pricesFromChainlink: Record<string, string> = {};
1734
1741
  await Promise.all(tokensWithChainlinkPrices.map(async (token) => {
1735
- const price = await getTokenPricePortfolio(token, provider, network);
1736
- if (typeof price === 'string') pricesFromChainlink[token] = price;
1737
- else if (typeof price === 'bigint') pricesFromChainlink[token] = new Dec(price).div(1e8).toString();
1738
- else pricesFromChainlink[token] = new Dec(price[1]!.toString() as string).div(1e8).toString();
1742
+ try {
1743
+ const price = await getTokenPricePortfolio(token, provider, network);
1744
+ if (typeof price === 'string') pricesFromChainlink[token] = price;
1745
+ else if (typeof price === 'bigint') pricesFromChainlink[token] = new Dec(price).div(1e8).toString();
1746
+ else pricesFromChainlink[token] = new Dec(price[1]!.toString() as string).div(1e8).toString();
1747
+ } catch (error: any) {
1748
+ console.error(`Error occured while fetching price for ${token}: ${error.message}`);
1749
+ }
1739
1750
  }));
1740
1751
  tokens.forEach((token) => {
1741
1752
  if (tokensWithoutChainlinkPrices.includes(token)) {
@@ -1764,12 +1775,12 @@ export const _getUserPositionsPortfolio = async (provider: PublicClient, network
1764
1775
 
1765
1776
  const tokenPrices = await getTokensPricesForPortfolio(tokens, provider, network);
1766
1777
 
1767
- const parsedMarketData = await Promise.all(data[1].map(async (vaultData) => parseMarketData(provider, vaultData, network, tokenPrices)));
1778
+ const parsedMarketData = (await Promise.all(data[1].map(async (vaultData) => parseMarketData(provider, vaultData, network, tokenPrices))));
1768
1779
 
1769
- const userData = data[0].map((position, i) => ({ ...parseUserData(position, parsedMarketData[i]) }));
1780
+ const userData = data[0].map((position, i) => (parsedMarketData[i] && { ...parseUserData(position, parsedMarketData[i]) }));
1770
1781
 
1771
1782
  return parsedMarketData.map((market, i) => ({
1772
1783
  marketData: market,
1773
1784
  userData: userData[i],
1774
- }));
1775
- };
1785
+ })).filter(md => md.marketData !== undefined && md.userData !== undefined);
1786
+ };
@@ -218,9 +218,9 @@ export async function getPortfolioData(provider: EthereumProvider, network: Netw
218
218
  ...addresses.map(async (address) => {
219
219
  try {
220
220
  if (!isFluidSupported) return; // Fluid is not available on Optimism
221
- const userPositions = await _getUserPositionsPortfolio(client, network, address);
221
+ const userPositions = (await _getUserPositionsPortfolio(client, network, address));
222
222
  for (const position of userPositions) {
223
- if (new Dec(position.userData.suppliedUsd).gt(0)) {
223
+ if (position.userData && new Dec(position.userData.suppliedUsd).gt(0)) {
224
224
  positions[address.toLowerCase() as EthAddress].fluid.data[position.userData.nftId] = position.userData;
225
225
  }
226
226
  }