@sonarwatch/portfolio-plugins 0.8.111 → 0.8.112

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.
Files changed (63) hide show
  1. package/CHANGELOG.md +9 -5
  2. package/package.json +3 -2
  3. package/src/index.js +4 -0
  4. package/src/index.js.map +1 -1
  5. package/src/plugins/jupiter/constants.d.ts +3 -0
  6. package/src/plugins/jupiter/constants.js +4 -1
  7. package/src/plugins/jupiter/constants.js.map +1 -1
  8. package/src/plugins/jupiter/custodiesJob.d.ts +3 -0
  9. package/src/plugins/jupiter/custodiesJob.js +34 -0
  10. package/src/plugins/jupiter/custodiesJob.js.map +1 -0
  11. package/src/plugins/jupiter/filters.d.ts +2 -0
  12. package/src/plugins/jupiter/filters.js +14 -0
  13. package/src/plugins/jupiter/filters.js.map +1 -0
  14. package/src/plugins/jupiter/index.js +4 -2
  15. package/src/plugins/jupiter/index.js.map +1 -1
  16. package/src/plugins/jupiter/perpetualFetcher.d.ts +3 -0
  17. package/src/plugins/jupiter/perpetualFetcher.js +153 -0
  18. package/src/plugins/jupiter/perpetualFetcher.js.map +1 -0
  19. package/src/plugins/jupiter/structs.d.ts +24 -0
  20. package/src/plugins/jupiter/structs.js +25 -1
  21. package/src/plugins/jupiter/structs.js.map +1 -1
  22. package/src/plugins/jupiter/types.d.ts +62 -0
  23. package/src/plugins/jupiter/types.js +9 -0
  24. package/src/plugins/jupiter/types.js.map +1 -0
  25. package/src/plugins/port/constants.d.ts +6 -0
  26. package/src/plugins/port/constants.js +16 -0
  27. package/src/plugins/port/constants.js.map +1 -0
  28. package/src/plugins/port/filters.d.ts +2 -0
  29. package/src/plugins/port/filters.js +15 -0
  30. package/src/plugins/port/filters.js.map +1 -0
  31. package/src/plugins/port/helpers.d.ts +1 -0
  32. package/src/plugins/port/helpers.js +10 -0
  33. package/src/plugins/port/helpers.js.map +1 -0
  34. package/src/plugins/port/index.d.ts +6 -0
  35. package/src/plugins/port/index.js +14 -0
  36. package/src/plugins/port/index.js.map +1 -0
  37. package/src/plugins/port/obligationsFetcher.d.ts +3 -0
  38. package/src/plugins/port/obligationsFetcher.js +157 -0
  39. package/src/plugins/port/obligationsFetcher.js.map +1 -0
  40. package/src/plugins/port/pTokensJob.d.ts +3 -0
  41. package/src/plugins/port/pTokensJob.js +73 -0
  42. package/src/plugins/port/pTokensJob.js.map +1 -0
  43. package/src/plugins/port/reservesJob.d.ts +3 -0
  44. package/src/plugins/port/reservesJob.js +60 -0
  45. package/src/plugins/port/reservesJob.js.map +1 -0
  46. package/src/plugins/port/structs.d.ts +69 -0
  47. package/src/plugins/port/structs.js +64 -0
  48. package/src/plugins/port/structs.js.map +1 -0
  49. package/src/plugins/port/types.d.ts +71 -0
  50. package/src/plugins/port/types.js +3 -0
  51. package/src/plugins/port/types.js.map +1 -0
  52. package/src/plugins/solend/structs.d.ts +2 -2
  53. package/src/plugins/solend/structs.js +2 -2
  54. package/src/plugins/solend/structs.js.map +1 -1
  55. package/src/utils/solana/pyth/helpers.d.ts +13 -0
  56. package/src/utils/solana/pyth/helpers.js +239 -0
  57. package/src/utils/solana/pyth/helpers.js.map +1 -0
  58. package/src/utils/solana/pyth/readBig.d.ts +4 -0
  59. package/src/utils/solana/pyth/readBig.js +61 -0
  60. package/src/utils/solana/pyth/readBig.js.map +1 -0
  61. package/src/utils/solana/pyth/structs.d.ts +97 -0
  62. package/src/utils/solana/pyth/structs.js +35 -0
  63. package/src/utils/solana/pyth/structs.js.map +1 -0
@@ -0,0 +1,14 @@
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 = exports.platforms = void 0;
7
+ const constants_1 = require("./constants");
8
+ const pTokensJob_1 = __importDefault(require("./pTokensJob"));
9
+ const reservesJob_1 = __importDefault(require("./reservesJob"));
10
+ const obligationsFetcher_1 = __importDefault(require("./obligationsFetcher"));
11
+ exports.platforms = [constants_1.platform];
12
+ exports.jobs = [pTokensJob_1.default, reservesJob_1.default];
13
+ exports.fetchers = [obligationsFetcher_1.default];
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/port/index.ts"],"names":[],"mappings":";;;;;;AAGA,2CAAuC;AACvC,8DAAsC;AACtC,gEAAuC;AACvC,8EAAsD;AAEzC,QAAA,SAAS,GAAe,CAAC,oBAAQ,CAAC,CAAC;AACnC,QAAA,IAAI,GAAU,CAAC,oBAAU,EAAE,qBAAU,CAAC,CAAC;AACvC,QAAA,QAAQ,GAAc,CAAC,4BAAkB,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Fetcher } from '../../Fetcher';
2
+ declare const fetcher: Fetcher;
3
+ export default fetcher;
@@ -0,0 +1,157 @@
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
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const portfolio_core_1 = require("@sonarwatch/portfolio-core");
16
+ const bignumber_js_1 = __importDefault(require("bignumber.js"));
17
+ const constants_1 = require("./constants");
18
+ const solana_1 = require("../../utils/solana");
19
+ const structs_1 = require("./structs");
20
+ const clients_1 = require("../../utils/clients");
21
+ const filters_1 = require("./filters");
22
+ const helpers_1 = require("../solend/helpers");
23
+ const tokenPriceToAssetToken_1 = __importDefault(require("../../utils/misc/tokenPriceToAssetToken"));
24
+ const getTokensPricesMap_1 = __importDefault(require("../../utils/misc/getTokensPricesMap"));
25
+ const constants_2 = require("../solend/constants");
26
+ const helpers_2 = require("./helpers");
27
+ const executor = (owner, cache) => __awaiter(void 0, void 0, void 0, function* () {
28
+ const client = (0, clients_1.getClientSolana)();
29
+ const obligations = yield (0, solana_1.getParsedProgramAccounts)(client, structs_1.obligationStruct, constants_1.programId, (0, filters_1.obligationsFilter)(owner));
30
+ if (obligations.length === 0)
31
+ return [];
32
+ const reservesInfo = yield cache.getItems(obligations.map((o) => o.lendingMarket.toString()), {
33
+ prefix: constants_1.platformId,
34
+ networkId: portfolio_core_1.NetworkId.solana,
35
+ });
36
+ const allReserves = reservesInfo.flat();
37
+ const reservesByMarket = new Map();
38
+ obligations.forEach((obli, index) => {
39
+ const reserves = reservesInfo[index];
40
+ if (reserves)
41
+ reservesByMarket.set(obli.lendingMarket.toString(), reserves);
42
+ });
43
+ const reserveByAddress = new Map();
44
+ for (const market of Object.keys(reservesByMarket)) {
45
+ const reserves = reservesByMarket.get(market);
46
+ if (!reserves)
47
+ continue;
48
+ reserves.forEach((res) => reserveByAddress.set(res.pubkey, res));
49
+ }
50
+ const tokenPriceById = yield (0, getTokensPricesMap_1.default)(allReserves
51
+ .map((reserves) => (reserves ? reserves.liquidity.mintPubkey : []))
52
+ .flat(), portfolio_core_1.NetworkId.solana, cache);
53
+ const elements = [];
54
+ for (const obligation of obligations) {
55
+ const reserves = reservesByMarket.get(obligation.lendingMarket.toString());
56
+ if (!reserves)
57
+ continue;
58
+ const { depositsMap, borrowsMap } = (0, helpers_1.parseDataflat)(obligation.dataFlat, obligation.depositsLen, obligation.borrowsLen);
59
+ if (depositsMap.size === 0 && borrowsMap.size === 0)
60
+ continue;
61
+ const borrowedAssets = [];
62
+ const borrowedYields = [];
63
+ const suppliedAssets = [];
64
+ const suppliedYields = [];
65
+ const rewardAssets = [];
66
+ for (let j = 0; j < reserves.length; j += 1) {
67
+ const { pubkey: reserveAddress } = reserves[j];
68
+ const reserve = reserveByAddress.get(reserveAddress);
69
+ if (!reserve)
70
+ continue;
71
+ const { liquidity, collateral } = reserve;
72
+ const lMint = liquidity.mintPubkey;
73
+ const lTokenPrice = tokenPriceById.get(lMint);
74
+ if (!lTokenPrice)
75
+ continue;
76
+ const decimals = liquidity.mintDecimals;
77
+ const reserveBorrowAmount = new bignumber_js_1.default(liquidity.borrowedAmountWads)
78
+ .dividedBy(Math.pow(10, (constants_2.wadsDecimal + decimals)))
79
+ .toNumber();
80
+ const reserveAvailableAmount = new bignumber_js_1.default(liquidity.availableAmount)
81
+ .dividedBy(Math.pow(10, decimals))
82
+ .toNumber();
83
+ const collateralSupply = new bignumber_js_1.default(collateral.mintTotalSupply)
84
+ .dividedBy(Math.pow(10, decimals))
85
+ .toNumber();
86
+ const reserveDepositAmount = reserveBorrowAmount + reserveAvailableAmount;
87
+ // Deposit
88
+ const deposit = depositsMap.get(reserveAddress);
89
+ if (deposit) {
90
+ if (!deposit.depositedAmount.isZero()) {
91
+ const suppliedAmount = deposit.depositedAmount
92
+ .div(Math.pow(10, decimals))
93
+ .times(reserveDepositAmount / collateralSupply)
94
+ .toNumber();
95
+ const apy = (0, helpers_2.parseApy)(reserve.depositApy);
96
+ const cSuppliedYields = [
97
+ {
98
+ apr: (0, portfolio_core_1.apyToApr)(apy),
99
+ apy,
100
+ },
101
+ ];
102
+ suppliedYields.push(cSuppliedYields);
103
+ suppliedAssets.push((0, tokenPriceToAssetToken_1.default)(lMint, suppliedAmount, portfolio_core_1.NetworkId.solana, lTokenPrice));
104
+ }
105
+ }
106
+ // Borrow
107
+ const borrow = borrowsMap.get(reserveAddress);
108
+ if (borrow) {
109
+ if (!borrow.borrowedAmountWads.isZero()) {
110
+ const borrowedAmount = borrow.borrowedAmountWads
111
+ .times(new bignumber_js_1.default(liquidity.cumulativeBorrowRateWads))
112
+ .div(borrow.cumulativeBorrowRateWads)
113
+ .dividedBy(new bignumber_js_1.default(Math.pow(10, (constants_2.wadsDecimal + decimals))))
114
+ .toNumber();
115
+ const apy = (0, helpers_2.parseApy)(reserve.borrowApy);
116
+ const cBorrowedYields = [
117
+ {
118
+ apr: (0, portfolio_core_1.apyToApr)(apy),
119
+ apy,
120
+ },
121
+ ];
122
+ borrowedYields.push(cBorrowedYields);
123
+ borrowedAssets.push((0, tokenPriceToAssetToken_1.default)(lMint, borrowedAmount, portfolio_core_1.NetworkId.solana, lTokenPrice));
124
+ }
125
+ }
126
+ }
127
+ if (suppliedAssets.length === 0 && borrowedAssets.length === 0)
128
+ continue;
129
+ const { borrowedValue, collateralRatio, suppliedValue, value } = (0, portfolio_core_1.getElementLendingValues)(suppliedAssets, borrowedAssets, rewardAssets);
130
+ elements.push({
131
+ type: portfolio_core_1.PortfolioElementType.borrowlend,
132
+ networkId: portfolio_core_1.NetworkId.solana,
133
+ platformId: constants_1.platformId,
134
+ label: 'Lending',
135
+ value,
136
+ data: {
137
+ borrowedAssets,
138
+ borrowedValue,
139
+ borrowedYields,
140
+ suppliedAssets,
141
+ suppliedValue,
142
+ suppliedYields,
143
+ collateralRatio,
144
+ rewardAssets,
145
+ value,
146
+ },
147
+ });
148
+ }
149
+ return elements;
150
+ });
151
+ const fetcher = {
152
+ id: `${constants_1.platformId}-obligations`,
153
+ networkId: portfolio_core_1.NetworkId.solana,
154
+ executor,
155
+ };
156
+ exports.default = fetcher;
157
+ //# sourceMappingURL=obligationsFetcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"obligationsFetcher.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/port/obligationsFetcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Job } from '../../Job';
2
+ declare const job: Job;
3
+ export default job;
@@ -0,0 +1,73 @@
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
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const axios_1 = __importDefault(require("axios"));
16
+ const portfolio_core_1 = require("@sonarwatch/portfolio-core");
17
+ const bignumber_js_1 = __importDefault(require("bignumber.js"));
18
+ const constants_1 = require("./constants");
19
+ const getTokensPricesMap_1 = __importDefault(require("../../utils/misc/getTokensPricesMap"));
20
+ const constants_2 = require("../kamino/constants");
21
+ const executor = (cache) => __awaiter(void 0, void 0, void 0, function* () {
22
+ const reservesRes = yield axios_1.default
23
+ .get(`${constants_1.portApi}/reserves`)
24
+ .catch(() => null);
25
+ if (!reservesRes || reservesRes.data.length === 0)
26
+ return;
27
+ const reserves = reservesRes.data;
28
+ const tokenPriceById = yield (0, getTokensPricesMap_1.default)(reserves.map((r) => r.assetMintId), portfolio_core_1.NetworkId.solana, cache);
29
+ const promises = [];
30
+ for (const reserve of reserves) {
31
+ const { assetMintId } = reserve;
32
+ const tokenPrice = tokenPriceById.get(assetMintId);
33
+ if (!tokenPrice)
34
+ continue;
35
+ const exchangeRatio = new bignumber_js_1.default(reserve.exchangeRatio);
36
+ const amountPerLp = new bignumber_js_1.default(1).dividedBy(exchangeRatio).toNumber();
37
+ const price = exchangeRatio
38
+ .dividedBy(Math.pow(10, tokenPrice.decimals))
39
+ .times(tokenPrice.price)
40
+ .toNumber();
41
+ const pToken = reserve.shareMintId;
42
+ promises.push(cache.setTokenPriceSource({
43
+ address: reserve.reserveId,
44
+ decimals: tokenPrice.decimals,
45
+ id: pToken,
46
+ networkId: portfolio_core_1.NetworkId.solana,
47
+ platformId: constants_1.platformId,
48
+ price,
49
+ timestamp: Date.now(),
50
+ weight: 1,
51
+ underlyings: [
52
+ {
53
+ address: tokenPrice.address,
54
+ amountPerLp,
55
+ decimals: tokenPrice.decimals,
56
+ networkId: portfolio_core_1.NetworkId.solana,
57
+ price: tokenPrice.price,
58
+ },
59
+ ],
60
+ }));
61
+ }
62
+ promises.push(cache.setItem(constants_2.reservesKey, reserves, {
63
+ prefix: constants_1.platformId,
64
+ networkId: portfolio_core_1.NetworkId.solana,
65
+ }));
66
+ yield Promise.all(promises);
67
+ });
68
+ const job = {
69
+ id: `${constants_1.platformId}-pTokens`,
70
+ executor,
71
+ };
72
+ exports.default = job;
73
+ //# sourceMappingURL=pTokensJob.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pTokensJob.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/port/pTokensJob.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,kDAA6C;AAC7C,+DAAuD;AACvD,gEAAqC;AAGrC,2CAAkD;AAElD,6FAAoE;AACpE,mDAAkD;AAElD,MAAM,QAAQ,GAAgB,CAAO,KAAY,EAAE,EAAE;IACnD,MAAM,WAAW,GAA2C,MAAM,eAAK;SACpE,GAAG,CAAC,GAAG,mBAAO,WAAW,CAAC;SAC1B,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IACrB,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAC1D,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC;IAElC,MAAM,cAAc,GAAG,MAAM,IAAA,4BAAiB,EAC5C,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,EAClC,0BAAS,CAAC,MAAM,EAChB,KAAK,CACN,CAAC;IAEF,MAAM,QAAQ,GAAG,EAAE,CAAC;IACpB,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;QAC9B,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;QAEhC,MAAM,UAAU,GAAG,cAAc,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACnD,IAAI,CAAC,UAAU;YAAE,SAAS;QAE1B,MAAM,aAAa,GAAG,IAAI,sBAAS,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QAC3D,MAAM,WAAW,GAAG,IAAI,sBAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,QAAQ,EAAE,CAAC;QACzE,MAAM,KAAK,GAAG,aAAa;aACxB,SAAS,CAAC,SAAA,EAAE,EAAI,UAAU,CAAC,QAAQ,CAAA,CAAC;aACpC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC;aACvB,QAAQ,EAAE,CAAC;QAEd,MAAM,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;QAEnC,QAAQ,CAAC,IAAI,CACX,KAAK,CAAC,mBAAmB,CAAC;YACxB,OAAO,EAAE,OAAO,CAAC,SAAS;YAC1B,QAAQ,EAAE,UAAU,CAAC,QAAQ;YAC7B,EAAE,EAAE,MAAM;YACV,SAAS,EAAE,0BAAS,CAAC,MAAM;YAC3B,UAAU,EAAV,sBAAU;YACV,KAAK;YACL,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,MAAM,EAAE,CAAC;YACT,WAAW,EAAE;gBACX;oBACE,OAAO,EAAE,UAAU,CAAC,OAAO;oBAC3B,WAAW;oBACX,QAAQ,EAAE,UAAU,CAAC,QAAQ;oBAC7B,SAAS,EAAE,0BAAS,CAAC,MAAM;oBAC3B,KAAK,EAAE,UAAU,CAAC,KAAK;iBACxB;aACF;SACF,CAAC,CACH,CAAC;KACH;IACD,QAAQ,CAAC,IAAI,CACX,KAAK,CAAC,OAAO,CAAC,uBAAW,EAAE,QAAQ,EAAE;QACnC,MAAM,EAAE,sBAAU;QAClB,SAAS,EAAE,0BAAS,CAAC,MAAM;KAC5B,CAAC,CACH,CAAC;IACF,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC9B,CAAC,CAAA,CAAC;AAEF,MAAM,GAAG,GAAQ;IACf,EAAE,EAAE,GAAG,sBAAU,UAAU;IAC3B,QAAQ;CACT,CAAC;AACF,kBAAe,GAAG,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Job } from '../../Job';
2
+ declare const job: Job;
3
+ export default job;
@@ -0,0 +1,60 @@
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 clients_1 = require("../../utils/clients");
14
+ const solana_1 = require("../../utils/solana");
15
+ const constants_1 = require("./constants");
16
+ const structs_1 = require("./structs");
17
+ const filters_1 = require("../../utils/solana/filters");
18
+ const constants_2 = require("../kamino/constants");
19
+ const executor = (cache) => __awaiter(void 0, void 0, void 0, function* () {
20
+ const client = (0, clients_1.getClientSolana)();
21
+ const parseReserves = yield cache.getItem(constants_2.reservesKey, {
22
+ prefix: constants_1.platformId,
23
+ networkId: portfolio_core_1.NetworkId.solana,
24
+ });
25
+ const parsedReserveById = new Map();
26
+ if (parseReserves) {
27
+ parseReserves.forEach((res) => parsedReserveById.set(res.reserveId, res));
28
+ }
29
+ const reservesAccounts = yield (0, solana_1.getParsedProgramAccounts)(client, structs_1.reserveStruct, constants_1.programId, (0, filters_1.dataStructSizeFilter)(structs_1.reserveStruct));
30
+ const reservesByMarket = new Map();
31
+ reservesAccounts.forEach((res) => {
32
+ const tempReserves = reservesByMarket.get(res.lendingMarket.toString());
33
+ const apys = parsedReserveById.get(res.pubkey.toString());
34
+ if (tempReserves) {
35
+ tempReserves.push(Object.assign({ borrowApy: apys === null || apys === void 0 ? void 0 : apys.borrowApy, depositApy: apys === null || apys === void 0 ? void 0 : apys.depositApy }, res));
36
+ }
37
+ else {
38
+ reservesByMarket.set(res.lendingMarket.toString(), [
39
+ Object.assign({ borrowApy: apys === null || apys === void 0 ? void 0 : apys.borrowApy, depositApy: apys === null || apys === void 0 ? void 0 : apys.depositApy }, res),
40
+ ]);
41
+ }
42
+ });
43
+ const promises = [];
44
+ for (const key of reservesByMarket.keys()) {
45
+ const reserves = reservesByMarket.get(key);
46
+ if (!reserves)
47
+ continue;
48
+ promises.push(cache.setItem(key, reserves, {
49
+ prefix: constants_1.platformId,
50
+ networkId: portfolio_core_1.NetworkId.solana,
51
+ }));
52
+ }
53
+ yield Promise.all(promises);
54
+ });
55
+ const job = {
56
+ id: `${constants_1.platformId}-reserves`,
57
+ executor,
58
+ };
59
+ exports.default = job;
60
+ //# sourceMappingURL=reservesJob.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reservesJob.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/port/reservesJob.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,+DAAuD;AAGvD,iDAAsD;AACtD,+CAA8D;AAC9D,2CAAoD;AACpD,uCAA0C;AAC1C,wDAAkE;AAElE,mDAAkD;AAElD,MAAM,QAAQ,GAAgB,CAAO,KAAY,EAAE,EAAE;IACnD,MAAM,MAAM,GAAG,IAAA,yBAAe,GAAE,CAAC;IAEjC,MAAM,aAAa,GAAG,MAAM,KAAK,CAAC,OAAO,CAAe,uBAAW,EAAE;QACnE,MAAM,EAAE,sBAAU;QAClB,SAAS,EAAE,0BAAS,CAAC,MAAM;KAC5B,CAAC,CAAC;IAEH,MAAM,iBAAiB,GAA4B,IAAI,GAAG,EAAE,CAAC;IAC7D,IAAI,aAAa,EAAE;QACjB,aAAa,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC;KAC3E;IAED,MAAM,gBAAgB,GAAG,MAAM,IAAA,iCAAwB,EACrD,MAAM,EACN,uBAAa,EACb,qBAAS,EACT,IAAA,8BAAoB,EAAC,uBAAa,CAAC,CACpC,CAAC;IAEF,MAAM,gBAAgB,GAAmC,IAAI,GAAG,EAAE,CAAC;IACnE,gBAAgB,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;QAC/B,MAAM,YAAY,GAAG,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC,CAAC;QACxE,MAAM,IAAI,GAAG,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC1D,IAAI,YAAY,EAAE;YAChB,YAAY,CAAC,IAAI,iBACf,SAAS,EAAE,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,SAAS,EAC1B,UAAU,EAAE,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,UAAU,IACxB,GAA0B,EAC9B,CAAC;SACJ;aAAM;YACL,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC,QAAQ,EAAE,EAAE;gCAE/C,SAAS,EAAE,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,SAAS,EAC1B,UAAU,EAAE,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,UAAU,IACxB,GAA0B;aAEjC,CAAC,CAAC;SACJ;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,EAAE,CAAC;IACpB,KAAK,MAAM,GAAG,IAAI,gBAAgB,CAAC,IAAI,EAAE,EAAE;QACzC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC3C,IAAI,CAAC,QAAQ;YAAE,SAAS;QACxB,QAAQ,CAAC,IAAI,CACX,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE;YAC3B,MAAM,EAAE,sBAAU;YAClB,SAAS,EAAE,0BAAS,CAAC,MAAM;SAC5B,CAAC,CACH,CAAC;KACH;IACD,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC9B,CAAC,CAAA,CAAC;AAEF,MAAM,GAAG,GAAQ;IACf,EAAE,EAAE,GAAG,sBAAU,WAAW;IAC5B,QAAQ;CACT,CAAC;AACF,kBAAe,GAAG,CAAC"}
@@ -0,0 +1,69 @@
1
+ /// <reference types="node" />
2
+ import { BeetStruct } from '@metaplex-foundation/beet';
3
+ import { PublicKey } from '@solana/web3.js';
4
+ import BigNumber from 'bignumber.js';
5
+ export type Fees = {
6
+ borrowFeeWad: BigNumber;
7
+ flashLoanFeeWad: BigNumber;
8
+ hostFeePercentage: number;
9
+ };
10
+ export declare const feesStruct: BeetStruct<Fees, Partial<Fees>>;
11
+ export type ReserveConfig = {
12
+ optimalUtilizationRate: number;
13
+ loanToValueRatio: number;
14
+ liquidationBonus: number;
15
+ liquidationThreshold: number;
16
+ minBorrowRate: number;
17
+ optimalBorrowRate: number;
18
+ maxBorrowRate: number;
19
+ fees: Fees;
20
+ };
21
+ export declare const reserveConfigStruct: BeetStruct<ReserveConfig, Partial<ReserveConfig>>;
22
+ export type Collateral = {
23
+ mintPubkey: PublicKey;
24
+ mintTotalSupply: BigNumber;
25
+ supplyPubkey: PublicKey;
26
+ };
27
+ export declare const collateralStruct: BeetStruct<Collateral, Partial<Collateral>>;
28
+ export type Liquidity = {
29
+ mintPubkey: PublicKey;
30
+ mintDecimals: number;
31
+ supplyPubkey: PublicKey;
32
+ feeReceiver: PublicKey;
33
+ oracleOption: BigNumber;
34
+ oraclePubkey: PublicKey;
35
+ availableAmount: BigNumber;
36
+ borrowedAmountWads: BigNumber;
37
+ cumulativeBorrowRateWads: BigNumber;
38
+ marketPrice: BigNumber;
39
+ };
40
+ export declare const liquidityStruct: BeetStruct<Liquidity, Partial<Liquidity>>;
41
+ export type LastUpdate = {
42
+ slot: BigNumber;
43
+ stale: number;
44
+ };
45
+ export declare const lastUpdateStruct: BeetStruct<LastUpdate, Partial<LastUpdate>>;
46
+ export type Reserve = {
47
+ version: number;
48
+ lastUpdate: LastUpdate;
49
+ lendingMarket: PublicKey;
50
+ liquidity: Liquidity;
51
+ collateral: Collateral;
52
+ config: ReserveConfig;
53
+ padding: Buffer;
54
+ };
55
+ export declare const reserveStruct: BeetStruct<Reserve, Partial<Reserve>>;
56
+ export type Obligation = {
57
+ version: number;
58
+ lastUpdate: LastUpdate;
59
+ lendingMarket: PublicKey;
60
+ owner: PublicKey;
61
+ depositedValue: BigNumber;
62
+ borrowedValue: BigNumber;
63
+ allowedBorrowValue: BigNumber;
64
+ unhealthyBorrowValue: BigNumber;
65
+ depositsLen: number;
66
+ borrowsLen: number;
67
+ dataFlat: Buffer;
68
+ };
69
+ export declare const obligationStruct: BeetStruct<Obligation, Partial<Obligation>>;
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.obligationStruct = exports.reserveStruct = exports.lastUpdateStruct = exports.liquidityStruct = exports.collateralStruct = exports.reserveConfigStruct = exports.feesStruct = void 0;
4
+ const beet_1 = require("@metaplex-foundation/beet");
5
+ const beet_solana_1 = require("@metaplex-foundation/beet-solana");
6
+ const solana_1 = require("../../utils/solana");
7
+ exports.feesStruct = new beet_1.BeetStruct([
8
+ ['borrowFeeWad', solana_1.u64],
9
+ ['hostFeePercentage', beet_1.u8],
10
+ ], (args) => args);
11
+ exports.reserveConfigStruct = new beet_1.BeetStruct([
12
+ ['optimalUtilizationRate', beet_1.u8],
13
+ ['loanToValueRatio', beet_1.u8],
14
+ ['liquidationBonus', beet_1.u8],
15
+ ['liquidationThreshold', beet_1.u8],
16
+ ['minBorrowRate', beet_1.u8],
17
+ ['optimalBorrowRate', beet_1.u8],
18
+ ['maxBorrowRate', beet_1.u8],
19
+ ['fees', exports.feesStruct],
20
+ ], (args) => args);
21
+ exports.collateralStruct = new beet_1.BeetStruct([
22
+ ['mintPubkey', beet_solana_1.publicKey],
23
+ ['mintTotalSupply', solana_1.u64],
24
+ ['supplyPubkey', beet_solana_1.publicKey],
25
+ ], (args) => args);
26
+ exports.liquidityStruct = new beet_1.BeetStruct([
27
+ ['mintPubkey', beet_solana_1.publicKey],
28
+ ['mintDecimals', beet_1.u8],
29
+ ['supplyPubkey', beet_solana_1.publicKey],
30
+ ['feeReceiver', beet_solana_1.publicKey],
31
+ ['oracleOption', beet_1.u32],
32
+ ['oraclePubkey', beet_solana_1.publicKey],
33
+ ['availableAmount', solana_1.u64],
34
+ ['borrowedAmountWads', solana_1.u128],
35
+ ['cumulativeBorrowRateWads', solana_1.u128],
36
+ ['marketPrice', solana_1.u128],
37
+ ], (args) => args);
38
+ exports.lastUpdateStruct = new beet_1.BeetStruct([
39
+ ['slot', solana_1.u64],
40
+ ['stale', beet_1.u8],
41
+ ], (args) => args);
42
+ exports.reserveStruct = new beet_1.BeetStruct([
43
+ ['version', beet_1.u8],
44
+ ['lastUpdate', exports.lastUpdateStruct],
45
+ ['lendingMarket', beet_solana_1.publicKey],
46
+ ['liquidity', exports.liquidityStruct],
47
+ ['collateral', exports.collateralStruct],
48
+ ['config', exports.reserveConfigStruct],
49
+ ['padding', (0, solana_1.blob)(256)],
50
+ ], (args) => args);
51
+ exports.obligationStruct = new beet_1.BeetStruct([
52
+ ['version', beet_1.u8],
53
+ ['lastUpdate', exports.lastUpdateStruct],
54
+ ['lendingMarket', beet_solana_1.publicKey],
55
+ ['owner', beet_solana_1.publicKey],
56
+ ['depositedValue', solana_1.u128],
57
+ ['borrowedValue', solana_1.u128],
58
+ ['allowedBorrowValue', solana_1.u128],
59
+ ['unhealthyBorrowValue', solana_1.u128],
60
+ ['depositsLen', beet_1.u8],
61
+ ['borrowsLen', beet_1.u8],
62
+ ['dataFlat', (0, solana_1.blob)(776)],
63
+ ], (args) => args);
64
+ //# sourceMappingURL=structs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"structs.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/port/structs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,71 @@
1
+ export type ReservesResponse = ReserveApi[];
2
+ export type ReserveEnhanced = Reserve & {
3
+ depositApy?: string;
4
+ borrowApy?: string;
5
+ };
6
+ export type ReserveApi = {
7
+ reserveId: string;
8
+ assetMintId: string;
9
+ shareMintId: string;
10
+ oracleId: string;
11
+ shareBalanceId: string;
12
+ liquidityBalanceId: string;
13
+ availableLiquidity: string;
14
+ borrowedLiquidity: string;
15
+ totalLiquidity: string;
16
+ issuedShare: string;
17
+ exchangeRatio: string;
18
+ depositApy: string;
19
+ borrowApy: string;
20
+ stakingPool: string;
21
+ minBorrowRate: string;
22
+ maxBorrowRate: string;
23
+ optimalBorrowRate: string;
24
+ optimalUtilisation: string;
25
+ };
26
+ export type Fees = {
27
+ borrowFeeWad: string;
28
+ flashLoanFeeWad: string;
29
+ hostFeePercentage: number;
30
+ };
31
+ export type ReserveConfig = {
32
+ optimalUtilizationRate: number;
33
+ loanToValueRatio: number;
34
+ liquidationBonus: number;
35
+ liquidationThreshold: number;
36
+ minBorrowRate: number;
37
+ optimalBorrowRate: number;
38
+ maxBorrowRate: number;
39
+ fees: Fees;
40
+ };
41
+ export type Collateral = {
42
+ mintPubkey: string;
43
+ mintTotalSupply: string;
44
+ supplyPubkey: string;
45
+ };
46
+ export type Liquidity = {
47
+ mintPubkey: string;
48
+ mintDecimals: number;
49
+ supplyPubkey: string;
50
+ feeReceiver: string;
51
+ oracleOption: string;
52
+ oraclePubkey: string;
53
+ availableAmount: string;
54
+ borrowedAmountWads: string;
55
+ cumulativeBorrowRateWads: string;
56
+ marketPrice: string;
57
+ };
58
+ export type LastUpdate = {
59
+ slot: string;
60
+ stale: number;
61
+ };
62
+ export type Reserve = {
63
+ pubkey: string;
64
+ version: number;
65
+ lastUpdate: LastUpdate;
66
+ lendingMarket: string;
67
+ liquidity: Liquidity;
68
+ collateral: Collateral;
69
+ config: ReserveConfig;
70
+ padding: string;
71
+ };
@@ -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/port/types.ts"],"names":[],"mappings":""}
@@ -45,7 +45,7 @@ export type LastUpdate = {
45
45
  stale: number;
46
46
  };
47
47
  export declare const lastUpdateStruct: BeetStruct<LastUpdate, Partial<LastUpdate>>;
48
- export type ReserveAccount = {
48
+ export type Reserve = {
49
49
  version: number;
50
50
  lastUpdate: LastUpdate;
51
51
  lendingMarket: PublicKey;
@@ -54,7 +54,7 @@ export type ReserveAccount = {
54
54
  config: ReserveConfig;
55
55
  padding: Buffer;
56
56
  };
57
- export declare const reserveAccountStruct: BeetStruct<ReserveAccount, Partial<ReserveAccount>>;
57
+ export declare const reserveStruct: BeetStruct<Reserve, Partial<Reserve>>;
58
58
  export type Obligation = {
59
59
  version: number;
60
60
  lastUpdate: LastUpdate;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.obligationLiquidityStruct = exports.obligationCollateralStruct = exports.obligationStruct = exports.reserveAccountStruct = exports.lastUpdateStruct = exports.liquidityStruct = exports.collateralStruct = exports.reserveConfigStruct = exports.feesStruct = void 0;
3
+ exports.obligationLiquidityStruct = exports.obligationCollateralStruct = exports.obligationStruct = exports.reserveStruct = exports.lastUpdateStruct = exports.liquidityStruct = exports.collateralStruct = exports.reserveConfigStruct = exports.feesStruct = void 0;
4
4
  const beet_1 = require("@metaplex-foundation/beet");
5
5
  const beet_solana_1 = require("@metaplex-foundation/beet-solana");
6
6
  const solana_1 = require("../../utils/solana");
@@ -42,7 +42,7 @@ exports.lastUpdateStruct = new beet_1.BeetStruct([
42
42
  ['slot', solana_1.u64],
43
43
  ['stale', beet_1.u8],
44
44
  ], (args) => args);
45
- exports.reserveAccountStruct = new beet_1.BeetStruct([
45
+ exports.reserveStruct = new beet_1.BeetStruct([
46
46
  ['version', beet_1.u8],
47
47
  ['lastUpdate', exports.lastUpdateStruct],
48
48
  ['lendingMarket', beet_solana_1.publicKey],
@@ -1 +1 @@
1
- {"version":3,"file":"structs.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/solend/structs.ts"],"names":[],"mappings":";;;AAAA,oDAA2D;AAC3D,kEAA6D;AAG7D,+CAAqD;AAQxC,QAAA,UAAU,GAAG,IAAI,iBAAU,CACtC;IACE,CAAC,cAAc,EAAE,YAAG,CAAC;IACrB,CAAC,iBAAiB,EAAE,YAAG,CAAC;IACxB,CAAC,mBAAmB,EAAE,SAAE,CAAC;CAC1B,EACD,CAAC,IAAI,EAAE,EAAE,CAAC,IAAY,CACvB,CAAC;AAgBW,QAAA,mBAAmB,GAAG,IAAI,iBAAU,CAC/C;IACE,CAAC,wBAAwB,EAAE,SAAE,CAAC;IAC9B,CAAC,kBAAkB,EAAE,SAAE,CAAC;IACxB,CAAC,kBAAkB,EAAE,SAAE,CAAC;IACxB,CAAC,sBAAsB,EAAE,SAAE,CAAC;IAC5B,CAAC,eAAe,EAAE,SAAE,CAAC;IACrB,CAAC,mBAAmB,EAAE,SAAE,CAAC;IACzB,CAAC,eAAe,EAAE,SAAE,CAAC;IACrB,CAAC,MAAM,EAAE,kBAAU,CAAC;IACpB,CAAC,cAAc,EAAE,YAAG,CAAC;IACrB,CAAC,aAAa,EAAE,YAAG,CAAC;IACpB,CAAC,aAAa,EAAE,uBAAS,CAAC;CAC3B,EACD,CAAC,IAAI,EAAE,EAAE,CAAC,IAAqB,CAChC,CAAC;AAQW,QAAA,gBAAgB,GAAG,IAAI,iBAAU,CAC5C;IACE,CAAC,YAAY,EAAE,uBAAS,CAAC;IACzB,CAAC,iBAAiB,EAAE,YAAG,CAAC;IACxB,CAAC,cAAc,EAAE,uBAAS,CAAC;CAC5B,EACD,CAAC,IAAI,EAAE,EAAE,CAAC,IAAkB,CAC7B,CAAC;AAcW,QAAA,eAAe,GAAG,IAAI,iBAAU,CAC3C;IACE,CAAC,YAAY,EAAE,uBAAS,CAAC;IACzB,CAAC,cAAc,EAAE,SAAE,CAAC;IACpB,CAAC,cAAc,EAAE,uBAAS,CAAC;IAC3B,CAAC,YAAY,EAAE,uBAAS,CAAC;IACzB,CAAC,mBAAmB,EAAE,uBAAS,CAAC;IAChC,CAAC,iBAAiB,EAAE,YAAG,CAAC;IACxB,CAAC,oBAAoB,EAAE,aAAI,CAAC;IAC5B,CAAC,0BAA0B,EAAE,aAAI,CAAC;IAClC,CAAC,aAAa,EAAE,aAAI,CAAC;CACtB,EACD,CAAC,IAAI,EAAE,EAAE,CAAC,IAAiB,CAC5B,CAAC;AAOW,QAAA,gBAAgB,GAAG,IAAI,iBAAU,CAC5C;IACE,CAAC,MAAM,EAAE,YAAG,CAAC;IACb,CAAC,OAAO,EAAE,SAAE,CAAC;CACd,EACD,CAAC,IAAI,EAAE,EAAE,CAAC,IAAkB,CAC7B,CAAC;AAYW,QAAA,oBAAoB,GAAG,IAAI,iBAAU,CAChD;IACE,CAAC,SAAS,EAAE,SAAE,CAAC;IACf,CAAC,YAAY,EAAE,wBAAgB,CAAC;IAChC,CAAC,eAAe,EAAE,uBAAS,CAAC;IAC5B,CAAC,WAAW,EAAE,uBAAe,CAAC;IAC9B,CAAC,YAAY,EAAE,wBAAgB,CAAC;IAChC,CAAC,QAAQ,EAAE,2BAAmB,CAAC;IAC/B,CAAC,SAAS,EAAE,IAAA,aAAI,EAAC,GAAG,CAAC,CAAC;CACvB,EACD,CAAC,IAAI,EAAE,EAAE,CAAC,IAAsB,CACjC,CAAC;AAiBW,QAAA,gBAAgB,GAAG,IAAI,iBAAU,CAC5C;IACE,CAAC,SAAS,EAAE,SAAE,CAAC;IACf,CAAC,YAAY,EAAE,wBAAgB,CAAC;IAChC,CAAC,eAAe,EAAE,uBAAS,CAAC;IAC5B,CAAC,OAAO,EAAE,uBAAS,CAAC;IACpB,CAAC,gBAAgB,EAAE,aAAI,CAAC;IACxB,CAAC,eAAe,EAAE,aAAI,CAAC;IACvB,CAAC,oBAAoB,EAAE,aAAI,CAAC;IAC5B,CAAC,sBAAsB,EAAE,aAAI,CAAC;IAC9B,CAAC,SAAS,EAAE,IAAA,aAAI,EAAC,EAAE,CAAC,CAAC;IACrB,CAAC,aAAa,EAAE,SAAE,CAAC;IACnB,CAAC,YAAY,EAAE,SAAE,CAAC;IAClB,CAAC,UAAU,EAAE,IAAA,aAAI,EAAC,IAAI,CAAC,CAAC;CACzB,EACD,CAAC,IAAI,EAAE,EAAE,CAAC,IAAkB,CAC7B,CAAC;AASW,QAAA,0BAA0B,GAAG,IAAI,iBAAU,CACtD;IACE,CAAC,gBAAgB,EAAE,uBAAS,CAAC;IAC7B,CAAC,iBAAiB,EAAE,YAAG,CAAC;IACxB,CAAC,aAAa,EAAE,aAAI,CAAC;IACrB,CAAC,SAAS,EAAE,IAAA,aAAI,EAAC,EAAE,CAAC,CAAC;CACtB,EACD,CAAC,IAAI,EAAE,EAAE,CAAC,IAA4B,CACvC,CAAC;AAUW,QAAA,yBAAyB,GAAG,IAAI,iBAAU,CACrD;IACE,CAAC,eAAe,EAAE,uBAAS,CAAC;IAC5B,CAAC,0BAA0B,EAAE,aAAI,CAAC;IAClC,CAAC,oBAAoB,EAAE,aAAI,CAAC;IAC5B,CAAC,aAAa,EAAE,aAAI,CAAC;IACrB,CAAC,SAAS,EAAE,IAAA,aAAI,EAAC,EAAE,CAAC,CAAC;CACtB,EACD,CAAC,IAAI,EAAE,EAAE,CAAC,IAA2B,CACtC,CAAC"}
1
+ {"version":3,"file":"structs.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/solend/structs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /// <reference types="node" />
2
+ import { PublicKey, AccountInfo } from '@solana/web3.js';
3
+ import { Base, MappingData, PermissionData, PriceData } from './structs';
4
+ export declare const Magic = 2712847316;
5
+ export declare const Version2 = 2;
6
+ export declare const Version = 2;
7
+ /** Number of slots that can pass before a publisher's price is no longer included in the aggregate. */
8
+ export declare const MAX_SLOT_DIFFERENCE = 25;
9
+ export declare function parseBaseData(data: Buffer): Base | undefined;
10
+ export declare const parseMappingData: (data: Buffer) => MappingData;
11
+ export declare const parsePriceData: (data: Buffer, currentSlot?: number) => PriceData;
12
+ export declare const parsePermissionData: (data: Buffer) => PermissionData;
13
+ export declare function getPythPricesDatasMap(pubkeys: PublicKey[], accounts: (AccountInfo<Buffer> | null)[]): Map<string, PriceData>;