@sonarwatch/portfolio-plugins 0.8.111 → 0.8.113

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 +10 -2
  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 +8 -0
  32. package/src/plugins/port/helpers.js +27 -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 +156 -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 +82 -0
  47. package/src/plugins/port/structs.js +75 -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,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseDataflat = exports.parseApy = void 0;
4
+ const beet_1 = require("@metaplex-foundation/beet");
5
+ const structs_1 = require("./structs");
6
+ function parseApy(apy) {
7
+ if (!apy)
8
+ return 0;
9
+ return Number(apy.replace('%', '')) / 100;
10
+ }
11
+ exports.parseApy = parseApy;
12
+ const parseDataflat = (dataFlat, depositsLen, borrowsLen) => {
13
+ const obligationCollateralArray = (0, beet_1.uniformFixedSizeArray)(structs_1.obligationCollateralStruct, depositsLen);
14
+ const deposits = obligationCollateralArray.read(dataFlat, 0);
15
+ const depositsMap = new Map(deposits.map((i) => [i.depositReserve.toString(), i]));
16
+ const obligationLiquidityArray = (0, beet_1.uniformFixedSizeArray)(structs_1.obligationLiquidityStruct, borrowsLen);
17
+ const borrows = obligationLiquidityArray.read(dataFlat, obligationCollateralArray.byteSize);
18
+ const borrowsMap = new Map(borrows.map((i) => [i.borrowReserve.toString(), i]));
19
+ return {
20
+ deposits,
21
+ depositsMap,
22
+ borrows,
23
+ borrowsMap,
24
+ };
25
+ };
26
+ exports.parseDataflat = parseDataflat;
27
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/port/helpers.ts"],"names":[],"mappings":";;;AAAA,oDAAkE;AAClE,uCAGmB;AAEnB,SAAgB,QAAQ,CAAC,GAAuB;IAC9C,IAAI,CAAC,GAAG;QAAE,OAAO,CAAC,CAAC;IACnB,OAAO,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC;AAC5C,CAAC;AAHD,4BAGC;AAEM,MAAM,aAAa,GAAG,CAC3B,QAAgB,EAChB,WAAmB,EACnB,UAAkB,EAClB,EAAE;IACF,MAAM,yBAAyB,GAAG,IAAA,4BAAqB,EACrD,oCAA0B,EAC1B,WAAW,CACZ,CAAC;IACF,MAAM,QAAQ,GAAG,yBAAyB,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAC7D,MAAM,WAAW,GAAG,IAAI,GAAG,CACzB,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CACtD,CAAC;IAEF,MAAM,wBAAwB,GAAG,IAAA,4BAAqB,EACpD,mCAAyB,EACzB,UAAU,CACX,CAAC;IACF,MAAM,OAAO,GAAG,wBAAwB,CAAC,IAAI,CAC3C,QAAQ,EACR,yBAAyB,CAAC,QAAQ,CACnC,CAAC;IACF,MAAM,UAAU,GAAG,IAAI,GAAG,CACxB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CACpD,CAAC;IACF,OAAO;QACL,QAAQ;QACR,WAAW;QACX,OAAO;QACP,UAAU;KACX,CAAC;AACJ,CAAC,CAAC;AA/BW,QAAA,aAAa,iBA+BxB"}
@@ -0,0 +1,6 @@
1
+ import { Platform } from '@sonarwatch/portfolio-core';
2
+ import { Fetcher } from '../../Fetcher';
3
+ import { Job } from '../../Job';
4
+ export declare const platforms: Platform[];
5
+ export declare const jobs: Job[];
6
+ export declare const fetchers: Fetcher[];
@@ -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,156 @@
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("./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 executor = (owner, cache) => __awaiter(void 0, void 0, void 0, function* () {
27
+ const client = (0, clients_1.getClientSolana)();
28
+ const obligations = yield (0, solana_1.getParsedProgramAccounts)(client, structs_1.obligationStruct, constants_1.programId, (0, filters_1.obligationsFilter)(owner));
29
+ if (obligations.length === 0)
30
+ return [];
31
+ const reservesInfo = yield cache.getItems(obligations.map((o) => o.lendingMarket.toString()), {
32
+ prefix: constants_1.platformId,
33
+ networkId: portfolio_core_1.NetworkId.solana,
34
+ });
35
+ const allReserves = reservesInfo.flat();
36
+ const reservesByMarket = new Map();
37
+ obligations.forEach((obli, index) => {
38
+ const reserves = reservesInfo[index];
39
+ if (reserves)
40
+ reservesByMarket.set(obli.lendingMarket.toString(), reserves);
41
+ });
42
+ const reserveByAddress = new Map();
43
+ for (const market of reservesByMarket.keys()) {
44
+ const reserves = reservesByMarket.get(market);
45
+ if (!reserves)
46
+ continue;
47
+ reserves.forEach((res) => reserveByAddress.set(res.pubkey, res));
48
+ }
49
+ const tokenPriceById = yield (0, getTokensPricesMap_1.default)(allReserves
50
+ .map((reserves) => (reserves ? reserves.liquidity.mintPubkey : []))
51
+ .flat(), portfolio_core_1.NetworkId.solana, cache);
52
+ const elements = [];
53
+ for (const obligation of obligations) {
54
+ const reserves = reservesByMarket.get(obligation.lendingMarket.toString());
55
+ if (!reserves)
56
+ continue;
57
+ const { depositsMap, borrowsMap } = (0, helpers_1.parseDataflat)(obligation.dataFlat, obligation.depositsLen, obligation.borrowsLen);
58
+ if (depositsMap.size === 0 && borrowsMap.size === 0)
59
+ continue;
60
+ const borrowedAssets = [];
61
+ const borrowedYields = [];
62
+ const suppliedAssets = [];
63
+ const suppliedYields = [];
64
+ const rewardAssets = [];
65
+ for (let j = 0; j < reserves.length; j += 1) {
66
+ const { pubkey: reserveAddress } = reserves[j];
67
+ const reserve = reserveByAddress.get(reserveAddress);
68
+ if (!reserve)
69
+ continue;
70
+ const { liquidity, collateral } = reserve;
71
+ const lMint = liquidity.mintPubkey;
72
+ const lTokenPrice = tokenPriceById.get(lMint);
73
+ if (!lTokenPrice)
74
+ continue;
75
+ const decimals = liquidity.mintDecimals;
76
+ const reserveBorrowAmount = new bignumber_js_1.default(liquidity.borrowedAmountWads)
77
+ .dividedBy(Math.pow(10, (constants_2.wadsDecimal + decimals)))
78
+ .toNumber();
79
+ const reserveAvailableAmount = new bignumber_js_1.default(liquidity.availableAmount)
80
+ .dividedBy(Math.pow(10, decimals))
81
+ .toNumber();
82
+ const collateralSupply = new bignumber_js_1.default(collateral.mintTotalSupply)
83
+ .dividedBy(Math.pow(10, decimals))
84
+ .toNumber();
85
+ const reserveDepositAmount = reserveBorrowAmount + reserveAvailableAmount;
86
+ // Deposit
87
+ const deposit = depositsMap.get(reserveAddress);
88
+ if (deposit) {
89
+ if (!deposit.depositedAmount.isZero()) {
90
+ const suppliedAmount = deposit.depositedAmount
91
+ .div(Math.pow(10, decimals))
92
+ .times(reserveDepositAmount / collateralSupply)
93
+ .toNumber();
94
+ const apy = (0, helpers_1.parseApy)(reserve.depositApy);
95
+ const cSuppliedYields = [
96
+ {
97
+ apr: (0, portfolio_core_1.apyToApr)(apy),
98
+ apy,
99
+ },
100
+ ];
101
+ suppliedYields.push(cSuppliedYields);
102
+ suppliedAssets.push((0, tokenPriceToAssetToken_1.default)(lMint, suppliedAmount, portfolio_core_1.NetworkId.solana, lTokenPrice));
103
+ }
104
+ }
105
+ // Borrow
106
+ const borrow = borrowsMap.get(reserveAddress);
107
+ if (borrow) {
108
+ if (!borrow.borrowedAmountWads.isZero()) {
109
+ const borrowedAmount = borrow.borrowedAmountWads
110
+ .times(new bignumber_js_1.default(liquidity.cumulativeBorrowRateWads))
111
+ .div(borrow.cumulativeBorrowRateWads)
112
+ .dividedBy(new bignumber_js_1.default(Math.pow(10, (constants_2.wadsDecimal + decimals))))
113
+ .toNumber();
114
+ const apy = (0, helpers_1.parseApy)(reserve.borrowApy);
115
+ const cBorrowedYields = [
116
+ {
117
+ apr: (0, portfolio_core_1.apyToApr)(apy),
118
+ apy,
119
+ },
120
+ ];
121
+ borrowedYields.push(cBorrowedYields);
122
+ borrowedAssets.push((0, tokenPriceToAssetToken_1.default)(lMint, borrowedAmount, portfolio_core_1.NetworkId.solana, lTokenPrice));
123
+ }
124
+ }
125
+ }
126
+ if (suppliedAssets.length === 0 && borrowedAssets.length === 0)
127
+ continue;
128
+ const { borrowedValue, collateralRatio, suppliedValue, value } = (0, portfolio_core_1.getElementLendingValues)(suppliedAssets, borrowedAssets, rewardAssets);
129
+ elements.push({
130
+ type: portfolio_core_1.PortfolioElementType.borrowlend,
131
+ networkId: portfolio_core_1.NetworkId.solana,
132
+ platformId: constants_1.platformId,
133
+ label: 'Lending',
134
+ value,
135
+ data: {
136
+ borrowedAssets,
137
+ borrowedValue,
138
+ borrowedYields,
139
+ suppliedAssets,
140
+ suppliedValue,
141
+ suppliedYields,
142
+ collateralRatio,
143
+ rewardAssets,
144
+ value,
145
+ },
146
+ });
147
+ }
148
+ return elements;
149
+ });
150
+ const fetcher = {
151
+ id: `${constants_1.platformId}-obligations`,
152
+ networkId: portfolio_core_1.NetworkId.solana,
153
+ executor,
154
+ };
155
+ exports.default = fetcher;
156
+ //# 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,82 @@
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>>;
70
+ export type ObligationCollateral = {
71
+ depositReserve: PublicKey;
72
+ depositedAmount: BigNumber;
73
+ marketValue: BigNumber;
74
+ };
75
+ export declare const obligationCollateralStruct: BeetStruct<ObligationCollateral, Partial<ObligationCollateral>>;
76
+ export type ObligationLiquidity = {
77
+ borrowReserve: PublicKey;
78
+ cumulativeBorrowRateWads: BigNumber;
79
+ borrowedAmountWads: BigNumber;
80
+ marketValue: BigNumber;
81
+ };
82
+ export declare const obligationLiquidityStruct: BeetStruct<ObligationLiquidity, Partial<ObligationLiquidity>>;
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.obligationLiquidityStruct = exports.obligationCollateralStruct = 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
+ exports.obligationCollateralStruct = new beet_1.BeetStruct([
65
+ ['depositReserve', beet_solana_1.publicKey],
66
+ ['depositedAmount', solana_1.u64],
67
+ ['marketValue', solana_1.u128],
68
+ ], (args) => args);
69
+ exports.obligationLiquidityStruct = new beet_1.BeetStruct([
70
+ ['borrowReserve', beet_solana_1.publicKey],
71
+ ['cumulativeBorrowRateWads', solana_1.u128],
72
+ ['borrowedAmountWads', solana_1.u128],
73
+ ['marketValue', solana_1.u128],
74
+ ], (args) => args);
75
+ //# 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;