@sonarwatch/portfolio-plugins 0.5.30 → 0.5.32

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/CHANGELOG.md CHANGED
@@ -2,6 +2,14 @@
2
2
 
3
3
  This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver).
4
4
 
5
+ ## [0.5.32](https://github.com/sonarwatch/portfolio/compare/plugins-0.5.31...plugins-0.5.32) (2023-08-14)
6
+
7
+
8
+
9
+ ## [0.5.31](https://github.com/sonarwatch/portfolio/compare/plugins-0.5.30...plugins-0.5.31) (2023-08-14)
10
+
11
+
12
+
5
13
  ## [0.5.30](https://github.com/sonarwatch/portfolio/compare/plugins-0.5.29...plugins-0.5.30) (2023-08-12)
6
14
 
7
15
 
package/package.json CHANGED
@@ -1,11 +1,14 @@
1
1
  {
2
2
  "name": "@sonarwatch/portfolio-plugins",
3
- "version": "0.5.30",
3
+ "version": "0.5.32",
4
4
  "type": "commonjs",
5
5
  "generators": "./generators.json",
6
6
  "dependencies": {
7
+ "@aave/contract-helpers": "^1.18.2",
8
+ "@aave/math-utils": "^1.18.2",
7
9
  "@ethersproject/address": "^5.7.0",
8
10
  "@ethersproject/bytes": "^5.7.0",
11
+ "@ethersproject/providers": "^5.7.2",
9
12
  "@metaplex-foundation/beet": "^0.7.1",
10
13
  "@metaplex-foundation/beet-solana": "^0.4.0",
11
14
  "@metaplex-foundation/js": "^0.19.4",
@@ -17,11 +20,13 @@
17
20
  "bitcoin-address-validation": "^2.2.1",
18
21
  "bn.js": "^5.2.1",
19
22
  "decimal.js": "^10.4.3",
23
+ "dsa-connect": "^0.6.47",
20
24
  "unstorage": "^1.8.0",
21
- "viem": "^1.2.9"
25
+ "viem": "^1.2.9",
26
+ "web3-v1": "npm:web3@^1.5.0"
22
27
  },
23
28
  "peerDependencies": {
24
- "@sonarwatch/portfolio-core": "0.5.30"
29
+ "@sonarwatch/portfolio-core": "0.5.34"
25
30
  },
26
31
  "main": "./src/index.js",
27
32
  "types": "./src/index.d.ts"
package/src/index.js CHANGED
@@ -41,6 +41,7 @@ const cetus_1 = require("./plugins/cetus");
41
41
  const turbos_1 = require("./plugins/turbos");
42
42
  const thala_1 = require("./plugins/thala");
43
43
  const tensor_1 = require("./plugins/tensor");
44
+ const aave_1 = require("./plugins/aave");
44
45
  const staking_aptos_1 = require("./plugins/staking-aptos");
45
46
  const drift_1 = require("./plugins/drift");
46
47
  const mango_1 = require("./plugins/mango");
@@ -72,6 +73,7 @@ exports.jobs = [
72
73
  ...liquidswap_1.jobs,
73
74
  ...auxexchange_1.jobs,
74
75
  ...saber_1.jobs,
76
+ ...aave_1.jobs,
75
77
  ];
76
78
  exports.fetchers = [
77
79
  ...tokens_1.fetchers,
@@ -88,6 +90,7 @@ exports.fetchers = [
88
90
  ...cetus_1.fetchers,
89
91
  ...turbos_1.fetchers,
90
92
  ...staking_aptos_1.fetchers,
93
+ ...aave_1.fetchers,
91
94
  ];
92
95
  exports.fetchersByAddressSystem = (0, getFetchersByAddressSystem_1.getFetchersByAddressSystem)(exports.fetchers);
93
96
  //# sourceMappingURL=index.js.map
package/src/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/plugins/src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA,0DAA4C;AAC5C,6CAG0B;AAC1B,yDAGgC;AAChC,iDAAkE;AAClE,iDAG4B;AAC5B,2CAAoD;AACpD,6CAG0B;AAC1B,+CAG2B;AAC3B,yCAA4E;AAC5E,+CAAwD;AACxD,2CAA+E;AAC/E,6CAG0B;AAC1B,2CAA+E;AAC/E,6CAA8D;AAC9D,2DAA2E;AAC3E,2CAA+E;AAC/E,2CAA+E;AAC/E,qDAA6D;AAC7D,uDAAgE;AAChE,qDAA8D;AAC9D,uDAAgE;AAChE,wFAAqF;AAErF,0CAAwB;AACxB,4CAA0B;AAC1B,wCAAsB;AAEtB,8CAA4B;AACf,QAAA,SAAS,GAAe,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;AAEpD,QAAA,IAAI,GAAU;IACzB,GAAG,aAAU;IACb,GAAG,mBAAe;IAClB,GAAG,YAAS;IACZ,GAAG,eAAY;IACf,GAAG,cAAW;IACd,GAAG,aAAU;IACb,GAAG,cAAW;IACd,GAAG,WAAQ;IACX,GAAG,YAAS;IACZ,GAAG,YAAS;IACZ,GAAG,YAAS;IACZ,GAAG,aAAU;IACb,GAAG,iBAAa;IAChB,GAAG,kBAAe;IAClB,GAAG,iBAAc;IACjB,GAAG,kBAAe;IAClB,GAAG,YAAS;CACb,CAAC;AAEW,QAAA,QAAQ,GAAc;IACjC,GAAG,iBAAc;IACjB,GAAG,uBAAmB;IACtB,GAAG,iBAAc;IACjB,GAAG,mBAAgB;IACnB,GAAG,mBAAgB;IACnB,GAAG,iBAAc;IACjB,GAAG,gBAAa;IAChB,GAAG,kBAAe;IAClB,GAAG,eAAY;IACf,GAAG,gBAAa;IAChB,GAAG,gBAAa;IAChB,GAAG,gBAAa;IAChB,GAAG,iBAAc;IACjB,GAAG,wBAAoB;CACxB,CAAC;AAEW,QAAA,uBAAuB,GAAG,IAAA,uDAA0B,EAAC,gBAAQ,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/plugins/src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGA,0DAA4C;AAC5C,6CAG0B;AAC1B,yDAGgC;AAChC,iDAAkE;AAClE,iDAG4B;AAC5B,2CAAoD;AACpD,6CAG0B;AAC1B,+CAG2B;AAC3B,yCAA4E;AAC5E,+CAAwD;AACxD,2CAA+E;AAC/E,6CAG0B;AAC1B,2CAA+E;AAC/E,6CAA8D;AAC9D,yCAA4E;AAC5E,2DAA2E;AAC3E,2CAA+E;AAC/E,2CAA+E;AAC/E,qDAA6D;AAC7D,uDAAgE;AAChE,qDAA8D;AAC9D,uDAAgE;AAChE,wFAAqF;AAErF,0CAAwB;AACxB,4CAA0B;AAC1B,wCAAsB;AAEtB,8CAA4B;AACf,QAAA,SAAS,GAAe,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;AAEpD,QAAA,IAAI,GAAU;IACzB,GAAG,aAAU;IACb,GAAG,mBAAe;IAClB,GAAG,YAAS;IACZ,GAAG,eAAY;IACf,GAAG,cAAW;IACd,GAAG,aAAU;IACb,GAAG,cAAW;IACd,GAAG,WAAQ;IACX,GAAG,YAAS;IACZ,GAAG,YAAS;IACZ,GAAG,YAAS;IACZ,GAAG,aAAU;IACb,GAAG,iBAAa;IAChB,GAAG,kBAAe;IAClB,GAAG,iBAAc;IACjB,GAAG,kBAAe;IAClB,GAAG,YAAS;IACZ,GAAG,WAAQ;CACZ,CAAC;AAEW,QAAA,QAAQ,GAAc;IACjC,GAAG,iBAAc;IACjB,GAAG,uBAAmB;IACtB,GAAG,iBAAc;IACjB,GAAG,mBAAgB;IACnB,GAAG,mBAAgB;IACnB,GAAG,iBAAc;IACjB,GAAG,gBAAa;IAChB,GAAG,kBAAe;IAClB,GAAG,eAAY;IACf,GAAG,gBAAa;IAChB,GAAG,gBAAa;IAChB,GAAG,gBAAa;IAChB,GAAG,iBAAc;IACjB,GAAG,wBAAoB;IACvB,GAAG,eAAY;CAChB,CAAC;AAEW,QAAA,uBAAuB,GAAG,IAAA,uDAA0B,EAAC,gBAAQ,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { NetworkIdType } from '@sonarwatch/portfolio-core';
2
+ import { LendingConfig } from './types';
3
+ export declare const lendingConfigs: Map<NetworkIdType, LendingConfig[]>;
4
+ export declare const platformId = "aave";
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.platformId = exports.lendingConfigs = void 0;
4
+ const portfolio_core_1 = require("@sonarwatch/portfolio-core");
5
+ exports.lendingConfigs = new Map([
6
+ [
7
+ portfolio_core_1.NetworkId.avalanche,
8
+ [
9
+ {
10
+ chainId: portfolio_core_1.networks.avalanche.chainId,
11
+ networkId: portfolio_core_1.NetworkId.avalanche,
12
+ elementName: 'Aave V2',
13
+ lendingPoolAddressProvider: '0xb6A86025F0FE1862B372cb0ca18CE3EDe02A318f',
14
+ uiIncentiveDataProviderAddress: '0x11979886A6dBAE27D7a72c49fCF3F23240D647bF',
15
+ uiPoolDataProviderAddress: '0x00e50FAB64eBB37b87df06Aa46b8B35d5f1A4e1A',
16
+ },
17
+ {
18
+ chainId: portfolio_core_1.networks.avalanche.chainId,
19
+ networkId: portfolio_core_1.NetworkId.avalanche,
20
+ elementName: 'Aave V3',
21
+ lendingPoolAddressProvider: '0xa97684ead0e402dC232d5A977953DF7ECBaB3CDb',
22
+ uiIncentiveDataProviderAddress: '0x265d414f80b0fca9505710e6F16dB4b67555D365',
23
+ uiPoolDataProviderAddress: '0xF71DBe0FAEF1473ffC607d4c555dfF0aEaDb878d',
24
+ },
25
+ ],
26
+ ],
27
+ [
28
+ portfolio_core_1.NetworkId.polygon,
29
+ [
30
+ {
31
+ chainId: portfolio_core_1.networks.polygon.chainId,
32
+ networkId: portfolio_core_1.NetworkId.polygon,
33
+ elementName: 'Aave V2',
34
+ lendingPoolAddressProvider: '0xd05e3E715d945B59290df0ae8eF85c1BdB684744',
35
+ uiIncentiveDataProviderAddress: '0x645654D59A5226CBab969b1f5431aA47CBf64ab8',
36
+ uiPoolDataProviderAddress: '0x204f2Eb81D996729829debC819f7992DCEEfE7b1',
37
+ },
38
+ {
39
+ chainId: portfolio_core_1.networks.polygon.chainId,
40
+ networkId: portfolio_core_1.NetworkId.polygon,
41
+ elementName: 'Aave V3',
42
+ lendingPoolAddressProvider: '0xa97684ead0e402dC232d5A977953DF7ECBaB3CDb',
43
+ uiIncentiveDataProviderAddress: '0x874313A46e4957D29FAAC43BF5Eb2B144894f557',
44
+ uiPoolDataProviderAddress: '0xC69728f11E9E6127733751c8410432913123acf1',
45
+ },
46
+ ],
47
+ ],
48
+ [
49
+ portfolio_core_1.NetworkId.ethereum,
50
+ [
51
+ {
52
+ chainId: portfolio_core_1.networks.ethereum.chainId,
53
+ networkId: portfolio_core_1.NetworkId.ethereum,
54
+ elementName: 'Aave V2 Main',
55
+ lendingPoolAddressProvider: '0xB53C1a33016B2DC2fF3653530bfF1848a515c8c5',
56
+ uiIncentiveDataProviderAddress: '0xD01ab9a6577E1D84F142e44D49380e23A340387d',
57
+ uiPoolDataProviderAddress: '0x00e50FAB64eBB37b87df06Aa46b8B35d5f1A4e1A',
58
+ },
59
+ {
60
+ chainId: portfolio_core_1.networks.ethereum.chainId,
61
+ networkId: portfolio_core_1.NetworkId.ethereum,
62
+ elementName: 'Aave V2 AMM',
63
+ lendingPoolAddressProvider: '0xAcc030EF66f9dFEAE9CbB0cd1B25654b82cFA8d5',
64
+ uiIncentiveDataProviderAddress: '0xD01ab9a6577E1D84F142e44D49380e23A340387d',
65
+ uiPoolDataProviderAddress: '0x00e50FAB64eBB37b87df06Aa46b8B35d5f1A4e1A',
66
+ },
67
+ {
68
+ chainId: portfolio_core_1.networks.ethereum.chainId,
69
+ networkId: portfolio_core_1.NetworkId.ethereum,
70
+ elementName: 'Aave V3 AMM',
71
+ lendingPoolAddressProvider: '0x2f39d218133AFaB8F2B819B1066c7E434Ad94E9e',
72
+ uiIncentiveDataProviderAddress: '0x162A7AC02f547ad796CA549f757e2b8d1D9b10a6',
73
+ uiPoolDataProviderAddress: '0x91c0eA31b49B69Ea18607702c5d9aC360bf3dE7d',
74
+ },
75
+ ],
76
+ ],
77
+ ]);
78
+ exports.platformId = 'aave';
79
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/aave/constants.ts"],"names":[],"mappings":";;;AAAA,+DAAgF;AAGnE,QAAA,cAAc,GAAwC,IAAI,GAAG,CAAC;IACzE;QACE,0BAAS,CAAC,SAAS;QACnB;YACE;gBACE,OAAO,EAAE,yBAAQ,CAAC,SAAS,CAAC,OAAO;gBACnC,SAAS,EAAE,0BAAS,CAAC,SAAS;gBAC9B,WAAW,EAAE,SAAS;gBACtB,0BAA0B,EACxB,4CAA4C;gBAC9C,8BAA8B,EAC5B,4CAA4C;gBAC9C,yBAAyB,EAAE,4CAA4C;aACxE;YACD;gBACE,OAAO,EAAE,yBAAQ,CAAC,SAAS,CAAC,OAAO;gBACnC,SAAS,EAAE,0BAAS,CAAC,SAAS;gBAC9B,WAAW,EAAE,SAAS;gBACtB,0BAA0B,EACxB,4CAA4C;gBAC9C,8BAA8B,EAC5B,4CAA4C;gBAC9C,yBAAyB,EAAE,4CAA4C;aACxE;SACF;KACF;IACD;QACE,0BAAS,CAAC,OAAO;QACjB;YACE;gBACE,OAAO,EAAE,yBAAQ,CAAC,OAAO,CAAC,OAAO;gBACjC,SAAS,EAAE,0BAAS,CAAC,OAAO;gBAC5B,WAAW,EAAE,SAAS;gBACtB,0BAA0B,EACxB,4CAA4C;gBAC9C,8BAA8B,EAC5B,4CAA4C;gBAC9C,yBAAyB,EAAE,4CAA4C;aACxE;YACD;gBACE,OAAO,EAAE,yBAAQ,CAAC,OAAO,CAAC,OAAO;gBACjC,SAAS,EAAE,0BAAS,CAAC,OAAO;gBAC5B,WAAW,EAAE,SAAS;gBACtB,0BAA0B,EACxB,4CAA4C;gBAC9C,8BAA8B,EAC5B,4CAA4C;gBAC9C,yBAAyB,EAAE,4CAA4C;aACxE;SACF;KACF;IACD;QACE,0BAAS,CAAC,QAAQ;QAClB;YACE;gBACE,OAAO,EAAE,yBAAQ,CAAC,QAAQ,CAAC,OAAO;gBAClC,SAAS,EAAE,0BAAS,CAAC,QAAQ;gBAC7B,WAAW,EAAE,cAAc;gBAC3B,0BAA0B,EACxB,4CAA4C;gBAC9C,8BAA8B,EAC5B,4CAA4C;gBAC9C,yBAAyB,EAAE,4CAA4C;aACxE;YACD;gBACE,OAAO,EAAE,yBAAQ,CAAC,QAAQ,CAAC,OAAO;gBAClC,SAAS,EAAE,0BAAS,CAAC,QAAQ;gBAC7B,WAAW,EAAE,aAAa;gBAC1B,0BAA0B,EACxB,4CAA4C;gBAC9C,8BAA8B,EAC5B,4CAA4C;gBAC9C,yBAAyB,EAAE,4CAA4C;aACxE;YACD;gBACE,OAAO,EAAE,yBAAQ,CAAC,QAAQ,CAAC,OAAO;gBAClC,SAAS,EAAE,0BAAS,CAAC,QAAQ;gBAC7B,WAAW,EAAE,aAAa;gBAC1B,0BAA0B,EACxB,4CAA4C;gBAC9C,8BAA8B,EAC5B,4CAA4C;gBAC9C,yBAAyB,EAAE,4CAA4C;aACxE;SACF;KACF;CACF,CAAC,CAAC;AAEU,QAAA,UAAU,GAAG,MAAM,CAAC"}
@@ -0,0 +1,55 @@
1
+ import { NetworkIdType, PortfolioAssetToken, PortfolioElement, PortfolioElementBorrowLendData, ProxyInfo, Yield } from '@sonarwatch/portfolio-core';
2
+ import { UiIncentiveDataProvider, UiPoolDataProvider } from '@aave/contract-helpers';
3
+ import { UserIncentiveDict } from '@aave/math-utils';
4
+ import { LendingConfig, LendingData } from './types';
5
+ import { Cache } from '../../Cache';
6
+ export declare const lendingPoolsPrefix = "aave-lendingPools";
7
+ export declare function fetchLendingForAddress(address: string, networkId: NetworkIdType, configs: LendingConfig[], cache: Cache, proxyInfo?: ProxyInfo): Promise<PortfolioElement[]>;
8
+ export declare function getUserSummary(user: string, lendingData: LendingData, poolDataProvider: UiPoolDataProvider, incentiveDataProvider: UiIncentiveDataProvider, lendingPoolAddressProvider: string): Promise<import("@aave/math-utils").FormatUserSummaryAndIncentivesResponse<import("@aave/math-utils").FormatReserveUSDResponse & import("@aave/math-utils").ReserveData & {
9
+ priceInMarketReferenceCurrency: string;
10
+ } & Partial<import("@aave/math-utils/dist/esm/formatters/incentive/calculate-reserve-incentives").CalculateReserveIncentivesResponse>>>;
11
+ type UserReserveData = {
12
+ underlyingAsset: string;
13
+ underlyingBalance: string;
14
+ underlyingBalanceUSD: string;
15
+ stableBorrows: string;
16
+ stableBorrowsUSD: string;
17
+ variableBorrows: string;
18
+ variableBorrowsUSD: string;
19
+ reserve: ReserveYieldInfo;
20
+ stableBorrowAPR: string;
21
+ stableBorrowAPY: string;
22
+ };
23
+ type UserSummary = {
24
+ userReservesData: UserReserveData[];
25
+ calculatedUserIncentives: UserIncentiveDict;
26
+ };
27
+ type ReserveYieldInfo = {
28
+ supplyAPY: string;
29
+ supplyAPR: string;
30
+ variableBorrowAPR: string;
31
+ variableBorrowAPY: string;
32
+ priceInUSD: string;
33
+ symbol: string;
34
+ };
35
+ export declare function getSupplyYields(reserve: ReserveYieldInfo): Yield[];
36
+ export declare function getVariableBorrowYields(reserve: ReserveYieldInfo): Yield[];
37
+ export declare function getStableBorrowedAsset(networkId: NetworkIdType, userReserveData: UserReserveData): {
38
+ stableBorrowedAsset: PortfolioAssetToken;
39
+ yields: {
40
+ apr: number;
41
+ apy: number;
42
+ }[];
43
+ };
44
+ export declare function getVarriableBorrowedAsset(networkId: NetworkIdType, userReserveData: UserReserveData): {
45
+ variableBorrowedAsset: PortfolioAssetToken;
46
+ yields: Yield[];
47
+ };
48
+ export declare function getSuppliedAsset(networkId: NetworkIdType, userReserveData: UserReserveData): {
49
+ suppliedAsset: PortfolioAssetToken;
50
+ yields: Yield[];
51
+ };
52
+ export declare function getElementLendingData(networkId: NetworkIdType, userSummary: UserSummary): PortfolioElementBorrowLendData;
53
+ export declare function getTokenAddressesFromLendingData(lendingData: LendingData): string[];
54
+ export declare function getTokenAddressesFromLendingDatas(lendingDatas: LendingData[]): Map<NetworkIdType, string[]>;
55
+ export {};
@@ -0,0 +1,263 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.getTokenAddressesFromLendingDatas = exports.getTokenAddressesFromLendingData = exports.getElementLendingData = exports.getSuppliedAsset = exports.getVarriableBorrowedAsset = exports.getStableBorrowedAsset = exports.getVariableBorrowYields = exports.getSupplyYields = exports.getUserSummary = exports.fetchLendingForAddress = exports.lendingPoolsPrefix = void 0;
13
+ const portfolio_core_1 = require("@sonarwatch/portfolio-core");
14
+ const contract_helpers_1 = require("@aave/contract-helpers");
15
+ const providers_1 = require("@ethersproject/providers");
16
+ const math_utils_1 = require("@aave/math-utils");
17
+ const constants_1 = require("../../utils/clients/constants");
18
+ const constants_2 = require("./constants");
19
+ exports.lendingPoolsPrefix = 'aave-lendingPools';
20
+ function fetchLendingForAddress(address, networkId, configs, cache, proxyInfo) {
21
+ return __awaiter(this, void 0, void 0, function* () {
22
+ const elements = [];
23
+ for (let i = 0; i < configs.length; i++) {
24
+ const config = configs[i];
25
+ if (!config)
26
+ continue;
27
+ const { lendingPoolAddressProvider, uiPoolDataProviderAddress, uiIncentiveDataProviderAddress, } = config;
28
+ const lendingData = yield cache.getItem(lendingPoolAddressProvider, {
29
+ prefix: exports.lendingPoolsPrefix,
30
+ networkId,
31
+ });
32
+ if (!lendingData)
33
+ continue;
34
+ const provider = new providers_1.StaticJsonRpcProvider({
35
+ url: (0, constants_1.getUrlEndpoint)(networkId),
36
+ }, portfolio_core_1.networks[networkId].chainId);
37
+ const poolDataProvider = new contract_helpers_1.UiPoolDataProvider({
38
+ uiPoolDataProviderAddress,
39
+ provider,
40
+ chainId: portfolio_core_1.networks[networkId].chainId,
41
+ });
42
+ const incentiveDataProvider = new contract_helpers_1.UiIncentiveDataProvider({
43
+ uiIncentiveDataProviderAddress,
44
+ provider,
45
+ chainId: portfolio_core_1.networks[networkId].chainId,
46
+ });
47
+ const userSummary = yield getUserSummary(address, lendingData, poolDataProvider, incentiveDataProvider, lendingPoolAddressProvider);
48
+ const elementData = getElementLendingData(networkId, userSummary);
49
+ if (elementData.value === 0) {
50
+ continue;
51
+ }
52
+ const element = {
53
+ type: portfolio_core_1.PortfolioElementType.borrowlend,
54
+ networkId,
55
+ platformId: constants_2.platformId,
56
+ label: 'Lending',
57
+ value: elementData.value,
58
+ data: elementData,
59
+ name: config.elementName,
60
+ proxyInfo,
61
+ };
62
+ elements.push(element);
63
+ }
64
+ return elements;
65
+ });
66
+ }
67
+ exports.fetchLendingForAddress = fetchLendingForAddress;
68
+ function getUserSummary(user, lendingData, poolDataProvider, incentiveDataProvider, lendingPoolAddressProvider) {
69
+ return __awaiter(this, void 0, void 0, function* () {
70
+ const userReserves = yield poolDataProvider.getUserReservesHumanized({
71
+ lendingPoolAddressProvider,
72
+ user,
73
+ });
74
+ const userIncentives = yield incentiveDataProvider.getUserReservesIncentivesDataHumanized({
75
+ lendingPoolAddressProvider,
76
+ user,
77
+ });
78
+ const userReservesArray = userReserves.userReserves;
79
+ const userSummary = (0, math_utils_1.formatUserSummaryAndIncentives)({
80
+ currentTimestamp: lendingData.currentTimestamp,
81
+ marketReferencePriceInUsd: lendingData.marketReferencePriceInUsd,
82
+ marketReferenceCurrencyDecimals: lendingData.marketReferenceCurrencyDecimals,
83
+ userReserves: userReservesArray,
84
+ formattedReserves: lendingData.formattedReserves,
85
+ userEmodeCategoryId: userReserves.userEmodeCategoryId,
86
+ reserveIncentives: lendingData.reserveIncentives,
87
+ userIncentives,
88
+ });
89
+ return userSummary;
90
+ });
91
+ }
92
+ exports.getUserSummary = getUserSummary;
93
+ function getSupplyYields(reserve) {
94
+ let yields = [];
95
+ if (reserve.supplyAPR !== '0') {
96
+ yields = [
97
+ {
98
+ apr: +reserve.supplyAPR,
99
+ apy: +reserve.supplyAPY,
100
+ },
101
+ ];
102
+ }
103
+ return yields;
104
+ }
105
+ exports.getSupplyYields = getSupplyYields;
106
+ function getVariableBorrowYields(reserve) {
107
+ let yields = [];
108
+ if (reserve.supplyAPR !== '0') {
109
+ yields = [
110
+ {
111
+ apr: -+reserve.variableBorrowAPR,
112
+ apy: -+reserve.variableBorrowAPY,
113
+ },
114
+ ];
115
+ }
116
+ return yields;
117
+ }
118
+ exports.getVariableBorrowYields = getVariableBorrowYields;
119
+ function getStableBorrowedAsset(networkId, userReserveData) {
120
+ const stableBorrowedAsset = {
121
+ networkId,
122
+ type: portfolio_core_1.PortfolioAssetType.token,
123
+ value: +(+userReserveData.stableBorrowsUSD).toFixed(2),
124
+ data: {
125
+ address: userReserveData.underlyingAsset,
126
+ amount: +userReserveData.stableBorrows,
127
+ price: +userReserveData.reserve.priceInUSD,
128
+ },
129
+ };
130
+ const yields = [
131
+ {
132
+ apr: -+userReserveData.stableBorrowAPR,
133
+ apy: -+userReserveData.stableBorrowAPY,
134
+ },
135
+ ];
136
+ return { stableBorrowedAsset, yields };
137
+ }
138
+ exports.getStableBorrowedAsset = getStableBorrowedAsset;
139
+ function getVarriableBorrowedAsset(networkId, userReserveData) {
140
+ const variableBorrowedAsset = {
141
+ networkId,
142
+ type: portfolio_core_1.PortfolioAssetType.token,
143
+ value: +(+userReserveData.variableBorrowsUSD).toFixed(2),
144
+ data: {
145
+ address: userReserveData.underlyingAsset,
146
+ amount: +userReserveData.variableBorrows,
147
+ price: +userReserveData.reserve.priceInUSD,
148
+ },
149
+ };
150
+ const yields = getVariableBorrowYields(userReserveData.reserve);
151
+ return { variableBorrowedAsset, yields };
152
+ }
153
+ exports.getVarriableBorrowedAsset = getVarriableBorrowedAsset;
154
+ function getSuppliedAsset(networkId, userReserveData) {
155
+ const suppliedAsset = {
156
+ networkId,
157
+ type: portfolio_core_1.PortfolioAssetType.token,
158
+ value: +(+userReserveData.underlyingBalanceUSD).toFixed(2),
159
+ data: {
160
+ address: userReserveData.underlyingAsset,
161
+ amount: +userReserveData.underlyingBalance,
162
+ price: +userReserveData.reserve.priceInUSD,
163
+ },
164
+ };
165
+ const yields = getSupplyYields(userReserveData.reserve);
166
+ return { suppliedAsset, yields };
167
+ }
168
+ exports.getSuppliedAsset = getSuppliedAsset;
169
+ function getRewardAssets(networkId, calculatedUserIncentives) {
170
+ const rewardAssets = [];
171
+ for (const rewardAddress in calculatedUserIncentives) {
172
+ if (Object.prototype.hasOwnProperty.call(calculatedUserIncentives, rewardAddress)) {
173
+ const userIncentiveData = calculatedUserIncentives[rewardAddress];
174
+ if (userIncentiveData.claimableRewards.isZero())
175
+ continue;
176
+ const amount = userIncentiveData.claimableRewards
177
+ .div(Math.pow(10, userIncentiveData.rewardTokenDecimals))
178
+ .toNumber();
179
+ const price = +userIncentiveData.rewardPriceFeed || null;
180
+ const value = price ? amount * price : null;
181
+ const rewardAsset = {
182
+ type: portfolio_core_1.PortfolioAssetType.token,
183
+ networkId,
184
+ value,
185
+ data: { address: rewardAddress, amount, price },
186
+ };
187
+ rewardAssets.push(rewardAsset);
188
+ }
189
+ }
190
+ return rewardAssets;
191
+ }
192
+ function getElementLendingData(networkId, userSummary) {
193
+ const { calculatedUserIncentives, userReservesData } = userSummary;
194
+ const suppliedAssets = [];
195
+ const suppliedYields = [];
196
+ const borrowedAssets = [];
197
+ const borrowedYields = [];
198
+ for (let i = 0; i < userReservesData.length; i++) {
199
+ const userReserveData = userReservesData[i];
200
+ // Stable borrows
201
+ if (userReserveData.stableBorrows !== '0') {
202
+ const { stableBorrowedAsset, yields } = getStableBorrowedAsset(networkId, userReserveData);
203
+ borrowedYields.push(yields);
204
+ borrowedAssets.push(stableBorrowedAsset);
205
+ }
206
+ // Variable borrows
207
+ if (userReserveData.variableBorrows !== '0') {
208
+ const { variableBorrowedAsset, yields } = getVarriableBorrowedAsset(networkId, userReserveData);
209
+ borrowedYields.push(yields);
210
+ borrowedAssets.push(variableBorrowedAsset);
211
+ }
212
+ // Deposits
213
+ if (userReserveData.underlyingBalance !== '0') {
214
+ const { suppliedAsset, yields } = getSuppliedAsset(networkId, userReserveData);
215
+ suppliedYields.push(yields);
216
+ suppliedAssets.push(suppliedAsset);
217
+ }
218
+ }
219
+ const rewardAssets = getRewardAssets(networkId, calculatedUserIncentives);
220
+ const { borrowedValue, suppliedValue, collateralRatio, value } = (0, portfolio_core_1.getElementLendingValues)(suppliedAssets, borrowedAssets, rewardAssets);
221
+ const elementData = {
222
+ rewardAssets,
223
+ borrowedAssets,
224
+ borrowedValue,
225
+ borrowedYields,
226
+ collateralRatio,
227
+ suppliedAssets,
228
+ suppliedValue,
229
+ suppliedYields,
230
+ value,
231
+ };
232
+ return elementData;
233
+ }
234
+ exports.getElementLendingData = getElementLendingData;
235
+ function getTokenAddressesFromRewards(rewards, networkId) {
236
+ return rewards.map((r) => (0, portfolio_core_1.formatTokenAddress)(r.rewardTokenAddress, networkId));
237
+ }
238
+ function getTokenAddressesFromLendingData(lendingData) {
239
+ const { networkId, reserveIncentives } = lendingData;
240
+ const rewards = reserveIncentives
241
+ .map((reserveIncentive) => [
242
+ ...reserveIncentive.aIncentiveData.rewardsTokenInformation,
243
+ ...reserveIncentive.sIncentiveData.rewardsTokenInformation,
244
+ ...reserveIncentive.vIncentiveData.rewardsTokenInformation,
245
+ ])
246
+ .flat();
247
+ return getTokenAddressesFromRewards(rewards, networkId);
248
+ }
249
+ exports.getTokenAddressesFromLendingData = getTokenAddressesFromLendingData;
250
+ function getTokenAddressesFromLendingDatas(lendingDatas) {
251
+ const tokenAddresses = {};
252
+ lendingDatas.forEach((lendingData) => {
253
+ var _a;
254
+ const { networkId } = lendingData;
255
+ const cTokenAddresses = getTokenAddressesFromLendingData(lendingData);
256
+ if (!tokenAddresses[networkId])
257
+ tokenAddresses[networkId] = [];
258
+ (_a = tokenAddresses[networkId]) === null || _a === void 0 ? void 0 : _a.push(...cTokenAddresses);
259
+ });
260
+ return new Map(Object.entries(tokenAddresses));
261
+ }
262
+ exports.getTokenAddressesFromLendingDatas = getTokenAddressesFromLendingDatas;
263
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/aave/helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { Job } from '../../Job';
2
+ import { Fetcher } from '../../Fetcher';
3
+ export declare const jobs: Job[];
4
+ export declare const fetchers: Fetcher[];
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.fetchers = exports.jobs = void 0;
7
+ const portfolio_core_1 = require("@sonarwatch/portfolio-core");
8
+ const dsa_connect_1 = __importDefault(require("dsa-connect"));
9
+ const web3_v1_1 = __importDefault(require("web3-v1"));
10
+ const contract_helpers_1 = require("@aave/contract-helpers");
11
+ const lendingPoolsJob_1 = __importDefault(require("./lendingPoolsJob"));
12
+ const lendingFetcherExecutorGenerator_1 = __importDefault(require("./lendingFetcherExecutorGenerator"));
13
+ const constants_1 = require("../../utils/clients/constants");
14
+ const constants_2 = require("./constants");
15
+ exports.jobs = [lendingPoolsJob_1.default];
16
+ exports.fetchers = [
17
+ {
18
+ id: `${constants_2.platformId}-${portfolio_core_1.NetworkId.ethereum}-lending`,
19
+ networkId: portfolio_core_1.NetworkId.ethereum,
20
+ executor: (0, lendingFetcherExecutorGenerator_1.default)(portfolio_core_1.NetworkId.ethereum, new dsa_connect_1.default({
21
+ web3: new web3_v1_1.default(new web3_v1_1.default.providers.HttpProvider((0, constants_1.getUrlEndpoint)(portfolio_core_1.NetworkId.ethereum))),
22
+ }, contract_helpers_1.ChainId.mainnet)),
23
+ },
24
+ {
25
+ id: `${constants_2.platformId}-${portfolio_core_1.NetworkId.polygon}-lending`,
26
+ networkId: portfolio_core_1.NetworkId.polygon,
27
+ executor: (0, lendingFetcherExecutorGenerator_1.default)(portfolio_core_1.NetworkId.polygon, new dsa_connect_1.default({
28
+ web3: new web3_v1_1.default(new web3_v1_1.default.providers.HttpProvider((0, constants_1.getUrlEndpoint)(portfolio_core_1.NetworkId.polygon))),
29
+ }, contract_helpers_1.ChainId.polygon)),
30
+ },
31
+ {
32
+ id: `${constants_2.platformId}-${portfolio_core_1.NetworkId.avalanche}-lending`,
33
+ networkId: portfolio_core_1.NetworkId.avalanche,
34
+ executor: (0, lendingFetcherExecutorGenerator_1.default)(portfolio_core_1.NetworkId.avalanche, new dsa_connect_1.default({
35
+ web3: new web3_v1_1.default(new web3_v1_1.default.providers.HttpProvider((0, constants_1.getUrlEndpoint)(portfolio_core_1.NetworkId.avalanche))),
36
+ }, contract_helpers_1.ChainId.avalanche)),
37
+ },
38
+ ];
39
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/aave/index.ts"],"names":[],"mappings":";;;;;;AAAA,+DAAuD;AACvD,8DAA8B;AAC9B,sDAA2B;AAC3B,6DAAiD;AAGjD,wEAAgD;AAChD,wGAA0E;AAC1E,6DAA+D;AAC/D,2CAAyC;AAE5B,QAAA,IAAI,GAAU,CAAC,yBAAe,CAAC,CAAC;AAChC,QAAA,QAAQ,GAAc;IACjC;QACE,EAAE,EAAE,GAAG,sBAAU,IAAI,0BAAS,CAAC,QAAQ,UAAU;QACjD,SAAS,EAAE,0BAAS,CAAC,QAAQ;QAC7B,QAAQ,EAAE,IAAA,yCAAyB,EACjC,0BAAS,CAAC,QAAQ,EAClB,IAAI,qBAAG,CACL;YACE,IAAI,EAAE,IAAI,iBAAI,CACZ,IAAI,iBAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAA,0BAAc,EAAC,0BAAS,CAAC,QAAQ,CAAC,CAAC,CACpE;SACF,EACD,0BAAO,CAAC,OAAO,CAChB,CACF;KACF;IACD;QACE,EAAE,EAAE,GAAG,sBAAU,IAAI,0BAAS,CAAC,OAAO,UAAU;QAChD,SAAS,EAAE,0BAAS,CAAC,OAAO;QAC5B,QAAQ,EAAE,IAAA,yCAAyB,EACjC,0BAAS,CAAC,OAAO,EACjB,IAAI,qBAAG,CACL;YACE,IAAI,EAAE,IAAI,iBAAI,CACZ,IAAI,iBAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAA,0BAAc,EAAC,0BAAS,CAAC,OAAO,CAAC,CAAC,CACnE;SACF,EACD,0BAAO,CAAC,OAAO,CAChB,CACF;KACF;IACD;QACE,EAAE,EAAE,GAAG,sBAAU,IAAI,0BAAS,CAAC,SAAS,UAAU;QAClD,SAAS,EAAE,0BAAS,CAAC,SAAS;QAC9B,QAAQ,EAAE,IAAA,yCAAyB,EACjC,0BAAS,CAAC,SAAS,EACnB,IAAI,qBAAG,CACL;YACE,IAAI,EAAE,IAAI,iBAAI,CACZ,IAAI,iBAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAA,0BAAc,EAAC,0BAAS,CAAC,SAAS,CAAC,CAAC,CACrE;SACF,EACD,0BAAO,CAAC,SAAS,CAClB,CACF;KACF;CACF,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { EvmNetworkIdType } from '@sonarwatch/portfolio-core';
2
+ import DSA from 'dsa-connect';
3
+ import { FetcherExecutor } from '../../Fetcher';
4
+ export default function getLendingFetcherExecutor(networkId: EvmNetworkIdType, instadappDSA?: DSA): FetcherExecutor;
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ const helpers_1 = require("./helpers");
13
+ const constants_1 = require("./constants");
14
+ function getLendingFetcherExecutor(networkId, instadappDSA) {
15
+ return (owner, cache) => __awaiter(this, void 0, void 0, function* () {
16
+ const addresses = [owner];
17
+ if (instadappDSA) {
18
+ const accounts = yield instadappDSA.getAccounts(owner);
19
+ const accountsAddresses = accounts.map((acc) => acc.address);
20
+ addresses.push(...accountsAddresses);
21
+ }
22
+ const configs = constants_1.lendingConfigs.get(networkId);
23
+ if (!configs)
24
+ return [];
25
+ const promises = addresses.map((address, i) => {
26
+ let proxyInfo;
27
+ if (i > 0)
28
+ proxyInfo = { address, id: 'instadapp' };
29
+ return (0, helpers_1.fetchLendingForAddress)(address, networkId, configs, cache, proxyInfo);
30
+ });
31
+ const elements = (yield Promise.all(promises)).flat(1);
32
+ return elements;
33
+ });
34
+ }
35
+ exports.default = getLendingFetcherExecutor;
36
+ //# sourceMappingURL=lendingFetcherExecutorGenerator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lendingFetcherExecutorGenerator.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/aave/lendingFetcherExecutorGenerator.ts"],"names":[],"mappings":";;;;;;;;;;;AAGA,uCAAmD;AAEnD,2CAA6C;AAE7C,SAAwB,yBAAyB,CAC/C,SAA2B,EAC3B,YAAkB;IAElB,OAAO,CAAO,KAAa,EAAE,KAAY,EAAE,EAAE;QAC3C,MAAM,SAAS,GAAG,CAAC,KAAK,CAAC,CAAC;QAE1B,IAAI,YAAY,EAAE;YAChB,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YACvD,MAAM,iBAAiB,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC7D,SAAS,CAAC,IAAI,CAAC,GAAG,iBAAiB,CAAC,CAAC;SACtC;QAED,MAAM,OAAO,GAAG,0BAAc,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC9C,IAAI,CAAC,OAAO;YAAE,OAAO,EAAE,CAAC;QAExB,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE;YAC5C,IAAI,SAAgC,CAAC;YACrC,IAAI,CAAC,GAAG,CAAC;gBAAE,SAAS,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC;YACpD,OAAO,IAAA,gCAAsB,EAC3B,OAAO,EACP,SAAS,EACT,OAAO,EACP,KAAK,EACL,SAAS,CACV,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACvD,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAA,CAAC;AACJ,CAAC;AA9BD,4CA8BC"}
@@ -0,0 +1,3 @@
1
+ import { Job } from '../../Job';
2
+ declare const job: Job;
3
+ export default job;
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ const portfolio_core_1 = require("@sonarwatch/portfolio-core");
13
+ const providers_1 = require("@ethersproject/providers");
14
+ const contract_helpers_1 = require("@aave/contract-helpers");
15
+ const math_utils_1 = require("@aave/math-utils");
16
+ const constants_1 = require("./constants");
17
+ const constants_2 = require("../../utils/clients/constants");
18
+ const helpers_1 = require("./helpers");
19
+ const executor = (cache) => __awaiter(void 0, void 0, void 0, function* () {
20
+ const lendingConfigsArray = Array.from(constants_1.lendingConfigs.values()).flat();
21
+ for (let i = 0; i < lendingConfigsArray.length; i++) {
22
+ const lendingConfig = lendingConfigsArray[i];
23
+ if (!lendingConfig)
24
+ continue;
25
+ const { uiPoolDataProviderAddress, uiIncentiveDataProviderAddress, lendingPoolAddressProvider, chainId, networkId, } = lendingConfig;
26
+ const provider = new providers_1.StaticJsonRpcProvider({
27
+ url: (0, constants_2.getUrlEndpoint)(lendingConfig.networkId),
28
+ }, portfolio_core_1.networks[lendingConfig.networkId].chainId);
29
+ if (!provider)
30
+ continue;
31
+ const poolDataProvider = new contract_helpers_1.UiPoolDataProvider({
32
+ uiPoolDataProviderAddress,
33
+ provider,
34
+ chainId: lendingConfig.chainId,
35
+ });
36
+ const incentiveDataProvider = new contract_helpers_1.UiIncentiveDataProvider({
37
+ uiIncentiveDataProviderAddress,
38
+ provider,
39
+ chainId: lendingConfig.chainId,
40
+ });
41
+ if (!poolDataProvider || !incentiveDataProvider)
42
+ continue;
43
+ // If it fails, this is probably because of a contract upgrade.
44
+ // Make sure contracts in /constants.ts are up-to-date.
45
+ const reserves = yield poolDataProvider.getReservesHumanized({
46
+ lendingPoolAddressProvider,
47
+ });
48
+ const reservesArray = reserves.reservesData;
49
+ const { baseCurrencyData } = reserves;
50
+ const { marketReferenceCurrencyDecimals } = baseCurrencyData;
51
+ const marketReferencePriceInUsd = baseCurrencyData.marketReferenceCurrencyPriceInUsd;
52
+ const currentTimestamp = Math.round(Date.now() / 1000);
53
+ const reserveIncentives = yield incentiveDataProvider.getReservesIncentivesDataHumanized({
54
+ lendingPoolAddressProvider,
55
+ });
56
+ const formattedReserves = (0, math_utils_1.formatReservesAndIncentives)({
57
+ reserves: reservesArray,
58
+ currentTimestamp,
59
+ marketReferenceCurrencyDecimals,
60
+ marketReferencePriceInUsd,
61
+ reserveIncentives,
62
+ });
63
+ const lendingData = {
64
+ lendingPoolAddressProvider,
65
+ chainId,
66
+ networkId,
67
+ currentTimestamp,
68
+ reserveIncentives,
69
+ formattedReserves,
70
+ marketReferencePriceInUsd,
71
+ marketReferenceCurrencyDecimals,
72
+ };
73
+ yield cache.setItem(lendingPoolAddressProvider, lendingData, {
74
+ prefix: helpers_1.lendingPoolsPrefix,
75
+ networkId,
76
+ });
77
+ }
78
+ });
79
+ const job = {
80
+ id: `${constants_1.platformId}-lending-pools`,
81
+ executor,
82
+ };
83
+ exports.default = job;
84
+ //# sourceMappingURL=lendingPoolsJob.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lendingPoolsJob.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/aave/lendingPoolsJob.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,+DAAsD;AACtD,wDAAiE;AACjE,6DAGgC;AAChC,iDAA+D;AAG/D,2CAAyD;AAEzD,6DAA+D;AAC/D,uCAA+C;AAE/C,MAAM,QAAQ,GAAgB,CAAO,KAAY,EAAE,EAAE;IACnD,MAAM,mBAAmB,GAAG,KAAK,CAAC,IAAI,CAAC,0BAAc,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAEvE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,mBAAmB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACnD,MAAM,aAAa,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAC;QAC7C,IAAI,CAAC,aAAa;YAAE,SAAS;QAC7B,MAAM,EACJ,yBAAyB,EACzB,8BAA8B,EAC9B,0BAA0B,EAC1B,OAAO,EACP,SAAS,GACV,GAAG,aAAa,CAAC;QAElB,MAAM,QAAQ,GAAG,IAAI,iCAAqB,CACxC;YACE,GAAG,EAAE,IAAA,0BAAc,EAAC,aAAa,CAAC,SAAS,CAAC;SAC7C,EACD,yBAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,OAAO,CAC1C,CAAC;QACF,IAAI,CAAC,QAAQ;YAAE,SAAS;QAExB,MAAM,gBAAgB,GAAG,IAAI,qCAAkB,CAAC;YAC9C,yBAAyB;YACzB,QAAQ;YACR,OAAO,EAAE,aAAa,CAAC,OAAO;SAC/B,CAAC,CAAC;QAEH,MAAM,qBAAqB,GAAG,IAAI,0CAAuB,CAAC;YACxD,8BAA8B;YAC9B,QAAQ;YACR,OAAO,EAAE,aAAa,CAAC,OAAO;SAC/B,CAAC,CAAC;QAEH,IAAI,CAAC,gBAAgB,IAAI,CAAC,qBAAqB;YAAE,SAAS;QAE1D,+DAA+D;QAC/D,uDAAuD;QACvD,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,oBAAoB,CAAC;YAC3D,0BAA0B;SAC3B,CAAC,CAAC;QAEH,MAAM,aAAa,GAAG,QAAQ,CAAC,YAAY,CAAC;QAC5C,MAAM,EAAE,gBAAgB,EAAE,GAAG,QAAQ,CAAC;QACtC,MAAM,EAAE,+BAA+B,EAAE,GAAG,gBAAgB,CAAC;QAC7D,MAAM,yBAAyB,GAC7B,gBAAgB,CAAC,iCAAiC,CAAC;QACrD,MAAM,gBAAgB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QACvD,MAAM,iBAAiB,GACrB,MAAM,qBAAqB,CAAC,kCAAkC,CAAC;YAC7D,0BAA0B;SAC3B,CAAC,CAAC;QACL,MAAM,iBAAiB,GAAG,IAAA,wCAA2B,EAAC;YACpD,QAAQ,EAAE,aAAa;YACvB,gBAAgB;YAChB,+BAA+B;YAC/B,yBAAyB;YACzB,iBAAiB;SAClB,CAAC,CAAC;QAEH,MAAM,WAAW,GAAgB;YAC/B,0BAA0B;YAC1B,OAAO;YACP,SAAS;YACT,gBAAgB;YAChB,iBAAiB;YACjB,iBAAiB;YACjB,yBAAyB;YACzB,+BAA+B;SAChC,CAAC;QACF,MAAM,KAAK,CAAC,OAAO,CAAC,0BAA0B,EAAE,WAAW,EAAE;YAC3D,MAAM,EAAE,4BAAkB;YAC1B,SAAS;SACV,CAAC,CAAC;KACJ;AACH,CAAC,CAAA,CAAC;AAEF,MAAM,GAAG,GAAQ;IACf,EAAE,EAAE,GAAG,sBAAU,gBAAgB;IACjC,QAAQ;CACT,CAAC;AACF,kBAAe,GAAG,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { ReservesIncentiveDataHumanized } from '@aave/contract-helpers';
2
+ import { formatReservesAndIncentives } from '@aave/math-utils';
3
+ import { NetworkIdType } from '@sonarwatch/portfolio-core';
4
+ type FormattedReserves = ReturnType<typeof formatReservesAndIncentives>;
5
+ export type LendingConfig = {
6
+ chainId: number;
7
+ networkId: NetworkIdType;
8
+ elementName: string;
9
+ lendingPoolAddressProvider: string;
10
+ uiIncentiveDataProviderAddress: string;
11
+ uiPoolDataProviderAddress: string;
12
+ };
13
+ export type LendingData = {
14
+ lendingPoolAddressProvider: string;
15
+ chainId: number;
16
+ networkId: NetworkIdType;
17
+ currentTimestamp: number;
18
+ marketReferencePriceInUsd: string;
19
+ marketReferenceCurrencyDecimals: number;
20
+ formattedReserves: FormattedReserves;
21
+ reserveIncentives: ReservesIncentiveDataHumanized[];
22
+ };
23
+ export {};
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/aave/types.ts"],"names":[],"mappings":""}