@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.
- package/cjs/fluid/index.d.ts +12 -12
- package/cjs/fluid/index.js +26 -13
- package/cjs/portfolio/index.js +2 -2
- package/esm/fluid/index.d.ts +12 -12
- package/esm/fluid/index.js +26 -13
- package/esm/portfolio/index.js +2 -2
- package/package.json +1 -1
- package/src/fluid/index.ts +23 -11
- package/src/portfolio/index.ts +2 -2
package/cjs/fluid/index.d.ts
CHANGED
|
@@ -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
|
}[]>;
|
package/cjs/fluid/index.js
CHANGED
|
@@ -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
|
-
|
|
1317
|
-
|
|
1318
|
-
|
|
1319
|
-
|
|
1320
|
-
|
|
1321
|
-
|
|
1322
|
-
|
|
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;
|
package/cjs/portfolio/index.js
CHANGED
|
@@ -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
|
}
|
package/esm/fluid/index.d.ts
CHANGED
|
@@ -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
|
}[]>;
|
package/esm/fluid/index.js
CHANGED
|
@@ -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
|
-
|
|
1293
|
-
|
|
1294
|
-
|
|
1295
|
-
|
|
1296
|
-
|
|
1297
|
-
|
|
1298
|
-
|
|
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
|
});
|
package/esm/portfolio/index.js
CHANGED
|
@@ -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
package/src/fluid/index.ts
CHANGED
|
@@ -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
|
-
|
|
1736
|
-
|
|
1737
|
-
|
|
1738
|
-
|
|
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
|
+
};
|
package/src/portfolio/index.ts
CHANGED
|
@@ -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
|
}
|