@defisaver/positions-sdk 2.1.25 → 2.1.26-fluid-1-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
  }[]>;
@@ -887,6 +887,11 @@ 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
+ console.error(`Market with address ${data.vault} not supported.`);
893
+ return; // skip unsupported market
894
+ }
890
895
  const vaultType = parseVaultType(+(data.vaultType.toString()));
891
896
  switch (vaultType) {
892
897
  case types_1.FluidVaultType.T1:
@@ -1127,6 +1132,9 @@ const _getFluidPositionWithMarket = (provider, network, vaultId) => __awaiter(vo
1127
1132
  const view = (0, contracts_1.FluidViewContractViem)(provider, network);
1128
1133
  const data = yield view.read.getPositionByNftId([BigInt(vaultId)]);
1129
1134
  const marketData = yield parseMarketData(provider, data[1], network);
1135
+ if (!marketData) {
1136
+ return;
1137
+ }
1130
1138
  const userData = parseUserData(data[0], marketData);
1131
1139
  return {
1132
1140
  userData,
@@ -1241,12 +1249,12 @@ exports.getAllUserEarnPositionsWithFTokens = getAllUserEarnPositionsWithFTokens;
1241
1249
  const _getUserPositions = (provider, network, user) => __awaiter(void 0, void 0, void 0, function* () {
1242
1250
  const view = (0, contracts_1.FluidViewContractViem)(provider, network);
1243
1251
  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]))));
1252
+ const parsedMarketData = (yield Promise.all(data[1].map((vaultData) => __awaiter(void 0, void 0, void 0, function* () { return parseMarketData(provider, vaultData, network); }))));
1253
+ const userData = data[0].map((position, i) => (parsedMarketData[i] && Object.assign({}, parseUserData(position, parsedMarketData[i]))));
1246
1254
  return parsedMarketData.map((market, i) => ({
1247
1255
  marketData: market,
1248
1256
  userData: userData[i],
1249
- }));
1257
+ })).filter(md => md.marketData !== undefined);
1250
1258
  });
1251
1259
  exports._getUserPositions = _getUserPositions;
1252
1260
  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 +1321,18 @@ const getTokensPricesForPortfolio = (tokens, provider, network) => __awaiter(voi
1313
1321
  const tokensWithChainlinkPrices = tokens.filter((token) => !tokensWithoutChainlinkPrices.includes(token));
1314
1322
  const pricesFromChainlink = {};
1315
1323
  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();
1324
+ try {
1325
+ const price = yield getTokenPricePortfolio(token, provider, network);
1326
+ if (typeof price === 'string')
1327
+ pricesFromChainlink[token] = price;
1328
+ else if (typeof price === 'bigint')
1329
+ pricesFromChainlink[token] = new decimal_js_1.default(price).div(1e8).toString();
1330
+ else
1331
+ pricesFromChainlink[token] = new decimal_js_1.default(price[1].toString()).div(1e8).toString();
1332
+ }
1333
+ catch (error) {
1334
+ console.error(`Error occured while fetching price for ${token}: ${error.message}`);
1335
+ }
1323
1336
  })));
1324
1337
  tokens.forEach((token) => {
1325
1338
  if (tokensWithoutChainlinkPrices.includes(token)) {
@@ -1347,11 +1360,11 @@ const _getUserPositionsPortfolio = (provider, network, user) => __awaiter(void 0
1347
1360
  if (!tokens.includes('WBTC'))
1348
1361
  tokens.push('WBTC');
1349
1362
  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]))));
1363
+ const parsedMarketData = (yield Promise.all(data[1].map((vaultData) => __awaiter(void 0, void 0, void 0, function* () { return parseMarketData(provider, vaultData, network, tokenPrices); }))));
1364
+ const userData = data[0].map((position, i) => (parsedMarketData[i] && Object.assign({}, parseUserData(position, parsedMarketData[i]))));
1352
1365
  return parsedMarketData.map((market, i) => ({
1353
1366
  marketData: market,
1354
1367
  userData: userData[i],
1355
- }));
1368
+ })).filter(md => md.marketData !== undefined);
1356
1369
  });
1357
1370
  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
  }[]>;
@@ -881,6 +881,11 @@ 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
+ console.error(`Market with address ${data.vault} not supported.`);
887
+ return; // skip unsupported market
888
+ }
884
889
  const vaultType = parseVaultType(+(data.vaultType.toString()));
885
890
  switch (vaultType) {
886
891
  case FluidVaultType.T1:
@@ -1115,6 +1120,9 @@ export const _getFluidPositionWithMarket = (provider, network, vaultId) => __awa
1115
1120
  const view = FluidViewContractViem(provider, network);
1116
1121
  const data = yield view.read.getPositionByNftId([BigInt(vaultId)]);
1117
1122
  const marketData = yield parseMarketData(provider, data[1], network);
1123
+ if (!marketData) {
1124
+ return;
1125
+ }
1118
1126
  const userData = parseUserData(data[0], marketData);
1119
1127
  return {
1120
1128
  userData,
@@ -1219,12 +1227,12 @@ export const getAllUserEarnPositionsWithFTokens = (provider, network, user) => _
1219
1227
  export const _getUserPositions = (provider, network, user) => __awaiter(void 0, void 0, void 0, function* () {
1220
1228
  const view = FluidViewContractViem(provider, network);
1221
1229
  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]))));
1230
+ const parsedMarketData = (yield Promise.all(data[1].map((vaultData) => __awaiter(void 0, void 0, void 0, function* () { return parseMarketData(provider, vaultData, network); }))));
1231
+ const userData = data[0].map((position, i) => (parsedMarketData[i] && Object.assign({}, parseUserData(position, parsedMarketData[i]))));
1224
1232
  return parsedMarketData.map((market, i) => ({
1225
1233
  marketData: market,
1226
1234
  userData: userData[i],
1227
- }));
1235
+ })).filter(md => md.marketData !== undefined);
1228
1236
  });
1229
1237
  export const getUserPositions = (provider, network, user) => __awaiter(void 0, void 0, void 0, function* () { return _getUserPositions(getViemProvider(provider, network), network, user); });
1230
1238
  const getTokenPricePortfolio = (token, provider, network) => __awaiter(void 0, void 0, void 0, function* () {
@@ -1289,13 +1297,18 @@ const getTokensPricesForPortfolio = (tokens, provider, network) => __awaiter(voi
1289
1297
  const tokensWithChainlinkPrices = tokens.filter((token) => !tokensWithoutChainlinkPrices.includes(token));
1290
1298
  const pricesFromChainlink = {};
1291
1299
  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();
1300
+ try {
1301
+ const price = yield getTokenPricePortfolio(token, provider, network);
1302
+ if (typeof price === 'string')
1303
+ pricesFromChainlink[token] = price;
1304
+ else if (typeof price === 'bigint')
1305
+ pricesFromChainlink[token] = new Dec(price).div(1e8).toString();
1306
+ else
1307
+ pricesFromChainlink[token] = new Dec(price[1].toString()).div(1e8).toString();
1308
+ }
1309
+ catch (error) {
1310
+ console.error(`Error occured while fetching price for ${token}: ${error.message}`);
1311
+ }
1299
1312
  })));
1300
1313
  tokens.forEach((token) => {
1301
1314
  if (tokensWithoutChainlinkPrices.includes(token)) {
@@ -1323,10 +1336,10 @@ export const _getUserPositionsPortfolio = (provider, network, user) => __awaiter
1323
1336
  if (!tokens.includes('WBTC'))
1324
1337
  tokens.push('WBTC');
1325
1338
  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]))));
1339
+ const parsedMarketData = (yield Promise.all(data[1].map((vaultData) => __awaiter(void 0, void 0, void 0, function* () { return parseMarketData(provider, vaultData, network, tokenPrices); }))));
1340
+ const userData = data[0].map((position, i) => (parsedMarketData[i] && Object.assign({}, parseUserData(position, parsedMarketData[i]))));
1328
1341
  return parsedMarketData.map((market, i) => ({
1329
1342
  marketData: market,
1330
1343
  userData: userData[i],
1331
- }));
1344
+ })).filter(md => md.marketData !== undefined);
1332
1345
  });
@@ -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-1-dev",
4
4
  "description": "",
5
5
  "main": "./cjs/index.js",
6
6
  "module": "./esm/index.js",
@@ -1116,6 +1116,11 @@ 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
+ console.error(`Market with address ${data.vault} not supported.`);
1122
+ return; // skip unsupported market
1123
+ }
1119
1124
  const vaultType = parseVaultType(+(data.vaultType.toString()));
1120
1125
  switch (vaultType) {
1121
1126
  case FluidVaultType.T1:
@@ -1497,6 +1502,9 @@ export const _getFluidPositionWithMarket = async (provider: PublicClient, networ
1497
1502
  const view = FluidViewContractViem(provider, network);
1498
1503
  const data = await view.read.getPositionByNftId([BigInt(vaultId)]);
1499
1504
  const marketData = await parseMarketData(provider, data[1], network);
1505
+ if (!marketData) {
1506
+ return;
1507
+ }
1500
1508
  const userData = parseUserData(data[0], marketData);
1501
1509
 
1502
1510
  return {
@@ -1646,14 +1654,14 @@ export const _getUserPositions = async (provider: PublicClient, network: Network
1646
1654
 
1647
1655
  const data = await view.read.getUserPositions([user]);
1648
1656
 
1649
- const parsedMarketData = await Promise.all(data[1].map(async (vaultData) => parseMarketData(provider, vaultData, network)));
1657
+ const parsedMarketData = (await Promise.all(data[1].map(async (vaultData) => parseMarketData(provider, vaultData, network))));
1650
1658
 
1651
- const userData = data[0].map((position, i) => ({ ...parseUserData(position, parsedMarketData[i]) }));
1659
+ const userData = data[0].map((position, i) => (parsedMarketData[i] && { ...parseUserData(position, parsedMarketData[i]) }));
1652
1660
 
1653
1661
  return parsedMarketData.map((market, i) => ({
1654
1662
  marketData: market,
1655
1663
  userData: userData[i],
1656
- }));
1664
+ })).filter(md => md.marketData !== undefined);
1657
1665
  };
1658
1666
 
1659
1667
  export const getUserPositions = async (
@@ -1732,10 +1740,14 @@ const getTokensPricesForPortfolio = async (tokens: string[], provider: PublicCli
1732
1740
  const tokensWithChainlinkPrices = tokens.filter((token) => !tokensWithoutChainlinkPrices.includes(token));
1733
1741
  const pricesFromChainlink: Record<string, string> = {};
1734
1742
  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();
1743
+ try {
1744
+ const price = await getTokenPricePortfolio(token, provider, network);
1745
+ if (typeof price === 'string') pricesFromChainlink[token] = price;
1746
+ else if (typeof price === 'bigint') pricesFromChainlink[token] = new Dec(price).div(1e8).toString();
1747
+ else pricesFromChainlink[token] = new Dec(price[1]!.toString() as string).div(1e8).toString();
1748
+ } catch (error: any) {
1749
+ console.error(`Error occured while fetching price for ${token}: ${error.message}`);
1750
+ }
1739
1751
  }));
1740
1752
  tokens.forEach((token) => {
1741
1753
  if (tokensWithoutChainlinkPrices.includes(token)) {
@@ -1764,12 +1776,12 @@ export const _getUserPositionsPortfolio = async (provider: PublicClient, network
1764
1776
 
1765
1777
  const tokenPrices = await getTokensPricesForPortfolio(tokens, provider, network);
1766
1778
 
1767
- const parsedMarketData = await Promise.all(data[1].map(async (vaultData) => parseMarketData(provider, vaultData, network, tokenPrices)));
1779
+ const parsedMarketData = (await Promise.all(data[1].map(async (vaultData) => parseMarketData(provider, vaultData, network, tokenPrices))));
1768
1780
 
1769
- const userData = data[0].map((position, i) => ({ ...parseUserData(position, parsedMarketData[i]) }));
1781
+ const userData = data[0].map((position, i) => (parsedMarketData[i] && { ...parseUserData(position, parsedMarketData[i]) }));
1770
1782
 
1771
1783
  return parsedMarketData.map((market, i) => ({
1772
1784
  marketData: market,
1773
1785
  userData: userData[i],
1774
- }));
1775
- };
1786
+ })).filter(md => md.marketData !== undefined);
1787
+ };
@@ -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
  }