@sonarwatch/portfolio-plugins 0.0.1

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 (150) hide show
  1. package/CHANGELOG.md +5 -0
  2. package/README.md +11 -0
  3. package/package.json +28 -0
  4. package/src/generators/plugin/generator.d.ts +4 -0
  5. package/src/generators/plugin/generator.js +46 -0
  6. package/src/generators/plugin/generator.js.map +1 -0
  7. package/src/index.d.ts +3 -0
  8. package/src/index.js +19 -0
  9. package/src/index.js.map +1 -0
  10. package/src/plugins/marginfi/constants.d.ts +7 -0
  11. package/src/plugins/marginfi/constants.js +13 -0
  12. package/src/plugins/marginfi/constants.js.map +1 -0
  13. package/src/plugins/marginfi/fetcherExecutor.d.ts +3 -0
  14. package/src/plugins/marginfi/fetcherExecutor.js +90 -0
  15. package/src/plugins/marginfi/fetcherExecutor.js.map +1 -0
  16. package/src/plugins/marginfi/filters.d.ts +3 -0
  17. package/src/plugins/marginfi/filters.js +41 -0
  18. package/src/plugins/marginfi/filters.js.map +1 -0
  19. package/src/plugins/marginfi/helpers.d.ts +9 -0
  20. package/src/plugins/marginfi/helpers.js +49 -0
  21. package/src/plugins/marginfi/helpers.js.map +1 -0
  22. package/src/plugins/marginfi/index.d.ts +3 -0
  23. package/src/plugins/marginfi/index.js +21 -0
  24. package/src/plugins/marginfi/index.js.map +1 -0
  25. package/src/plugins/marginfi/jobExecutor.d.ts +3 -0
  26. package/src/plugins/marginfi/jobExecutor.js +24 -0
  27. package/src/plugins/marginfi/jobExecutor.js.map +1 -0
  28. package/src/plugins/marginfi/structs/Bank.d.ts +72 -0
  29. package/src/plugins/marginfi/structs/Bank.js +74 -0
  30. package/src/plugins/marginfi/structs/Bank.js.map +1 -0
  31. package/src/plugins/marginfi/structs/MarginfiAccount.d.ts +26 -0
  32. package/src/plugins/marginfi/structs/MarginfiAccount.js +27 -0
  33. package/src/plugins/marginfi/structs/MarginfiAccount.js.map +1 -0
  34. package/src/plugins/marginfi/structs/common.d.ts +6 -0
  35. package/src/plugins/marginfi/structs/common.js +7 -0
  36. package/src/plugins/marginfi/structs/common.js.map +1 -0
  37. package/src/plugins/marginfi/types.d.ts +6 -0
  38. package/src/plugins/marginfi/types.js +3 -0
  39. package/src/plugins/marginfi/types.js.map +1 -0
  40. package/src/plugins/marinade/constants.d.ts +6 -0
  41. package/src/plugins/marinade/constants.js +12 -0
  42. package/src/plugins/marinade/constants.js.map +1 -0
  43. package/src/plugins/marinade/fetcherExecutor.d.ts +3 -0
  44. package/src/plugins/marinade/fetcherExecutor.js +50 -0
  45. package/src/plugins/marinade/fetcherExecutor.js.map +1 -0
  46. package/src/plugins/marinade/filters.d.ts +2 -0
  47. package/src/plugins/marinade/filters.js +15 -0
  48. package/src/plugins/marinade/filters.js.map +1 -0
  49. package/src/plugins/marinade/index.d.ts +3 -0
  50. package/src/plugins/marinade/index.js +21 -0
  51. package/src/plugins/marinade/index.js.map +1 -0
  52. package/src/plugins/marinade/jobExecutor.d.ts +3 -0
  53. package/src/plugins/marinade/jobExecutor.js +14 -0
  54. package/src/plugins/marinade/jobExecutor.js.map +1 -0
  55. package/src/plugins/marinade/structs.d.ts +12 -0
  56. package/src/plugins/marinade/structs.js +14 -0
  57. package/src/plugins/marinade/structs.js.map +1 -0
  58. package/src/plugins/raydium/constants.d.ts +2 -0
  59. package/src/plugins/raydium/constants.js +6 -0
  60. package/src/plugins/raydium/constants.js.map +1 -0
  61. package/src/plugins/raydium/fetcherExecutor.d.ts +3 -0
  62. package/src/plugins/raydium/fetcherExecutor.js +34 -0
  63. package/src/plugins/raydium/fetcherExecutor.js.map +1 -0
  64. package/src/plugins/raydium/index.d.ts +3 -0
  65. package/src/plugins/raydium/index.js +21 -0
  66. package/src/plugins/raydium/index.js.map +1 -0
  67. package/src/plugins/raydium/jobExecutor.d.ts +3 -0
  68. package/src/plugins/raydium/jobExecutor.js +14 -0
  69. package/src/plugins/raydium/jobExecutor.js.map +1 -0
  70. package/src/plugins/wallettokens/constants.d.ts +4 -0
  71. package/src/plugins/wallettokens/constants.js +9 -0
  72. package/src/plugins/wallettokens/constants.js.map +1 -0
  73. package/src/plugins/wallettokens/helpers.d.ts +3 -0
  74. package/src/plugins/wallettokens/helpers.js +73 -0
  75. package/src/plugins/wallettokens/helpers.js.map +1 -0
  76. package/src/plugins/wallettokens/index.d.ts +3 -0
  77. package/src/plugins/wallettokens/index.js +13 -0
  78. package/src/plugins/wallettokens/index.js.map +1 -0
  79. package/src/plugins/wallettokens/jobExecutors/solana.d.ts +3 -0
  80. package/src/plugins/wallettokens/jobExecutors/solana.js +36 -0
  81. package/src/plugins/wallettokens/jobExecutors/solana.js.map +1 -0
  82. package/src/plugins/wallettokens/types.d.ts +9 -0
  83. package/src/plugins/wallettokens/types.js +3 -0
  84. package/src/plugins/wallettokens/types.js.map +1 -0
  85. package/src/utils/clients/constants.d.ts +4 -0
  86. package/src/utils/clients/constants.js +23 -0
  87. package/src/utils/clients/constants.js.map +1 -0
  88. package/src/utils/clients/getClientAptos.d.ts +2 -0
  89. package/src/utils/clients/getClientAptos.js +15 -0
  90. package/src/utils/clients/getClientAptos.js.map +1 -0
  91. package/src/utils/clients/getClientSolana.d.ts +2 -0
  92. package/src/utils/clients/getClientSolana.js +17 -0
  93. package/src/utils/clients/getClientSolana.js.map +1 -0
  94. package/src/utils/clients/getClientSui.d.ts +2 -0
  95. package/src/utils/clients/getClientSui.js +17 -0
  96. package/src/utils/clients/getClientSui.js.map +1 -0
  97. package/src/utils/clients/getEvmClient.d.ts +3 -0
  98. package/src/utils/clients/getEvmClient.js +21 -0
  99. package/src/utils/clients/getEvmClient.js.map +1 -0
  100. package/src/utils/clients/getEvmClients.d.ts +3 -0
  101. package/src/utils/clients/getEvmClients.js +13 -0
  102. package/src/utils/clients/getEvmClients.js.map +1 -0
  103. package/src/utils/clients/index.d.ts +6 -0
  104. package/src/utils/clients/index.js +19 -0
  105. package/src/utils/clients/index.js.map +1 -0
  106. package/src/utils/clients/urlToRpcEndpoint.d.ts +2 -0
  107. package/src/utils/clients/urlToRpcEndpoint.js +19 -0
  108. package/src/utils/clients/urlToRpcEndpoint.js.map +1 -0
  109. package/src/utils/misc/getBasicAuthHeaders.d.ts +3 -0
  110. package/src/utils/misc/getBasicAuthHeaders.js +13 -0
  111. package/src/utils/misc/getBasicAuthHeaders.js.map +1 -0
  112. package/src/utils/misc/shuffleArray.d.ts +1 -0
  113. package/src/utils/misc/shuffleArray.js +16 -0
  114. package/src/utils/misc/shuffleArray.js.map +1 -0
  115. package/src/utils/misc/sleep.d.ts +1 -0
  116. package/src/utils/misc/sleep.js +12 -0
  117. package/src/utils/misc/sleep.js.map +1 -0
  118. package/src/utils/misc/tokenPriceToAssetToken.d.ts +2 -0
  119. package/src/utils/misc/tokenPriceToAssetToken.js +18 -0
  120. package/src/utils/misc/tokenPriceToAssetToken.js.map +1 -0
  121. package/src/utils/solana/beets/buffers.d.ts +13 -0
  122. package/src/utils/solana/beets/buffers.js +28 -0
  123. package/src/utils/solana/beets/buffers.js.map +1 -0
  124. package/src/utils/solana/beets/helpers.d.ts +1 -0
  125. package/src/utils/solana/beets/helpers.js +5 -0
  126. package/src/utils/solana/beets/helpers.js.map +1 -0
  127. package/src/utils/solana/beets/numbers.d.ts +16 -0
  128. package/src/utils/solana/beets/numbers.js +62 -0
  129. package/src/utils/solana/beets/numbers.js.map +1 -0
  130. package/src/utils/solana/constants.d.ts +2 -0
  131. package/src/utils/solana/constants.js +6 -0
  132. package/src/utils/solana/constants.js.map +1 -0
  133. package/src/utils/solana/getParsedProgramAccounts.d.ts +3 -0
  134. package/src/utils/solana/getParsedProgramAccounts.js +13 -0
  135. package/src/utils/solana/getParsedProgramAccounts.js.map +1 -0
  136. package/src/utils/solana/getProgramAccountsSafe.d.ts +2 -0
  137. package/src/utils/solana/getProgramAccountsSafe.js +21 -0
  138. package/src/utils/solana/getProgramAccountsSafe.js.map +1 -0
  139. package/src/utils/solana/getTokenAccountsByOwner.d.ts +2 -0
  140. package/src/utils/solana/getTokenAccountsByOwner.js +22 -0
  141. package/src/utils/solana/getTokenAccountsByOwner.js.map +1 -0
  142. package/src/utils/solana/index.d.ts +8 -0
  143. package/src/utils/solana/index.js +12 -0
  144. package/src/utils/solana/index.js.map +1 -0
  145. package/src/utils/solana/structs.d.ts +32 -0
  146. package/src/utils/solana/structs.js +35 -0
  147. package/src/utils/solana/structs.js.map +1 -0
  148. package/src/utils/solana/types.d.ts +7 -0
  149. package/src/utils/solana/types.js +3 -0
  150. package/src/utils/solana/types.js.map +1 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,5 @@
1
+ # Changelog
2
+
3
+ This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver).
4
+
5
+ ## 0.0.1 (2023-07-04)
package/README.md ADDED
@@ -0,0 +1,11 @@
1
+ # plugins
2
+
3
+ This library was generated with [Nx](https://nx.dev).
4
+
5
+ ## Building
6
+
7
+ Run `nx build plugins` to build the library.
8
+
9
+ ## Running unit tests
10
+
11
+ Run `nx test plugins` to execute the unit tests via [Jest](https://jestjs.io).
package/package.json ADDED
@@ -0,0 +1,28 @@
1
+ {
2
+ "name": "@sonarwatch/portfolio-plugins",
3
+ "version": "0.0.1",
4
+ "type": "commonjs",
5
+ "generators": "./generators.json",
6
+ "dependencies": {
7
+ "@ethersproject/address": "^5.7.0",
8
+ "@ethersproject/bytes": "^5.7.0",
9
+ "@metaplex-foundation/beet": "^0.7.1",
10
+ "@metaplex-foundation/beet-solana": "^0.4.0",
11
+ "@mysten/sui.js": "^0.37.1",
12
+ "@solana/web3.js": "^1.77.3",
13
+ "aptos": "^1.12.0",
14
+ "axios": "^1.4.0",
15
+ "bignumber.js": "^9.1.1",
16
+ "bitcoin-address-validation": "^2.2.1",
17
+ "bn.js": "^5.2.1",
18
+ "decimal.js": "^10.4.3",
19
+ "unstorage": "^1.7.0",
20
+ "viem": "^1.2.9"
21
+ },
22
+ "peerDependencies": {
23
+ "@sonarwatch/portfolio-core": "0.0.3",
24
+ "tslib": "2.5.0"
25
+ },
26
+ "main": "./src/index.js",
27
+ "types": "./src/index.d.ts"
28
+ }
@@ -0,0 +1,4 @@
1
+ import { Tree } from '@nx/devkit';
2
+ import { PluginGeneratorSchema } from './schema.d';
3
+ export declare function pluginGenerator(tree: Tree, options: PluginGeneratorSchema): Promise<void>;
4
+ export default pluginGenerator;
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.pluginGenerator = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const devkit_1 = require("@nx/devkit");
6
+ const path = tslib_1.__importStar(require("path"));
7
+ const toKebabCaseRegexp = /[A-Z]{2,}(?=[A-Z][a-z]+[0-9]*|\b)|[A-Z]?[a-z]+[0-9]*|[A-Z]|[0-9]+/g;
8
+ function toKebabCase(str) {
9
+ var _a;
10
+ if (!str)
11
+ return '';
12
+ return (((_a = str
13
+ .match(toKebabCaseRegexp)) === null || _a === void 0 ? void 0 : _a.map((x) => x.toLowerCase()).join('-')) || '');
14
+ }
15
+ function trimAndUpper(text) {
16
+ return text.replace(/-/, '').toUpperCase();
17
+ }
18
+ function spaceAndUpper(text) {
19
+ return text.replace(/-/, ' ').toUpperCase();
20
+ }
21
+ function lowerFirstLetter(string) {
22
+ return string.charAt(0).toLocaleLowerCase() + string.slice(1);
23
+ }
24
+ function idToPascalCase(id) {
25
+ return id.replace(/(^\w|-\w)/g, trimAndUpper);
26
+ }
27
+ function idToSpacedPascalCase(id) {
28
+ return id.replace(/(^\w|-\w)/g, spaceAndUpper);
29
+ }
30
+ function pluginGenerator(tree, options) {
31
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
32
+ const id = toKebabCase(options.id);
33
+ const libraryRoot = (0, devkit_1.readProjectConfiguration)(tree, 'plugins').root;
34
+ (0, devkit_1.generateFiles)(tree, path.join(__dirname, 'files'), libraryRoot, {
35
+ id,
36
+ networkIds: options.networkIds,
37
+ pascalCaseId: idToPascalCase(id),
38
+ spacedPascalCaseId: idToSpacedPascalCase(id),
39
+ loweredPascalCaseId: lowerFirstLetter(idToPascalCase(id)),
40
+ });
41
+ yield (0, devkit_1.formatFiles)(tree);
42
+ });
43
+ }
44
+ exports.pluginGenerator = pluginGenerator;
45
+ exports.default = pluginGenerator;
46
+ //# sourceMappingURL=generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/generators/plugin/generator.ts"],"names":[],"mappings":";;;;AAAA,uCAKoB;AACpB,mDAA6B;AAG7B,MAAM,iBAAiB,GACrB,oEAAoE,CAAC;AAEvE,SAAS,WAAW,CAAC,GAAW;;IAC9B,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IACpB,OAAO,CACL,CAAA,MAAA,GAAG;SACA,KAAK,CAAC,iBAAiB,CAAC,0CACvB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,EAC3B,IAAI,CAAC,GAAG,CAAC,KAAI,EAAE,CACnB,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,IAAY;IAChC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;AAC7C,CAAC;AACD,SAAS,aAAa,CAAC,IAAY;IACjC,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;AAC9C,CAAC;AACD,SAAS,gBAAgB,CAAC,MAAc;IACtC,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,iBAAiB,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAChE,CAAC;AAED,SAAS,cAAc,CAAC,EAAU;IAChC,OAAO,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;AAChD,CAAC;AAED,SAAS,oBAAoB,CAAC,EAAU;IACtC,OAAO,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;AACjD,CAAC;AAED,SAAsB,eAAe,CACnC,IAAU,EACV,OAA8B;;QAE9B,MAAM,EAAE,GAAG,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACnC,MAAM,WAAW,GAAG,IAAA,iCAAwB,EAAC,IAAI,EAAE,SAAS,CAAC,CAAC,IAAI,CAAC;QACnE,IAAA,sBAAa,EAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,WAAW,EAAE;YAC9D,EAAE;YACF,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,YAAY,EAAE,cAAc,CAAC,EAAE,CAAC;YAChC,kBAAkB,EAAE,oBAAoB,CAAC,EAAE,CAAC;YAC5C,mBAAmB,EAAE,gBAAgB,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;SAC1D,CAAC,CAAC;QACH,MAAM,IAAA,oBAAW,EAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;CAAA;AAdD,0CAcC;AAED,kBAAe,eAAe,CAAC"}
package/src/index.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ import { Fetcher, Job } from '@sonarwatch/portfolio-core';
2
+ export declare const jobs: Job[];
3
+ export declare const fetchers: Fetcher[];
package/src/index.js ADDED
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.fetchers = exports.jobs = void 0;
4
+ const wallettokens_1 = require("./plugins/wallettokens");
5
+ const marinade_1 = require("./plugins/marinade");
6
+ const raydium_1 = require("./plugins/raydium");
7
+ const marginfi_1 = require("./plugins/marginfi");
8
+ exports.jobs = [
9
+ ...marginfi_1.jobs,
10
+ ...marinade_1.jobs,
11
+ ...raydium_1.jobs,
12
+ ...wallettokens_1.jobs,
13
+ ];
14
+ exports.fetchers = [
15
+ ...marginfi_1.fetchers,
16
+ ...marinade_1.fetchers,
17
+ ...raydium_1.fetchers,
18
+ ];
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/plugins/src/index.ts"],"names":[],"mappings":";;;AACA,yDAAkE;AAClE,iDAG4B;AAC5B,+CAG2B;AAC3B,iDAG4B;AAEf,QAAA,IAAI,GAAU;IACzB,GAAG,eAAY;IACf,GAAG,eAAY;IACf,GAAG,cAAW;IACd,GAAG,mBAAgB;CACpB,CAAC;AACW,QAAA,QAAQ,GAAc;IACjC,GAAG,mBAAgB;IACnB,GAAG,mBAAgB;IACnB,GAAG,kBAAe;CACnB,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { PublicKey } from '@solana/web3.js';
2
+ import BigNumber from 'bignumber.js';
3
+ export declare const cachePrefix = "marginfi";
4
+ export declare const platformId = "marginfi";
5
+ export declare const MarginfiProgram: PublicKey;
6
+ export declare const MarginfiAccountAddress = "4qp6Fx6tnZkY5Wropq9wUYgtFxXKwE6viZxFHg3rdAG8";
7
+ export declare const solFactor: BigNumber;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.solFactor = exports.MarginfiAccountAddress = exports.MarginfiProgram = exports.platformId = exports.cachePrefix = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const web3_js_1 = require("@solana/web3.js");
6
+ const portfolio_core_1 = require("@sonarwatch/portfolio-core");
7
+ const bignumber_js_1 = tslib_1.__importDefault(require("bignumber.js"));
8
+ exports.cachePrefix = 'marginfi';
9
+ exports.platformId = 'marginfi';
10
+ exports.MarginfiProgram = new web3_js_1.PublicKey('MFv2hWf31Z9kbCa1snEPYctwafyhdvnV7FZnsebVacA');
11
+ exports.MarginfiAccountAddress = '4qp6Fx6tnZkY5Wropq9wUYgtFxXKwE6viZxFHg3rdAG8';
12
+ exports.solFactor = new bignumber_js_1.default(Math.pow(10, portfolio_core_1.solanaNetwork.native.decimals));
13
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/marginfi/constants.ts"],"names":[],"mappings":";;;;AAAA,6CAA4C;AAC5C,+DAA2D;AAC3D,wEAAqC;AAExB,QAAA,WAAW,GAAG,UAAU,CAAC;AACzB,QAAA,UAAU,GAAG,UAAU,CAAC;AAExB,QAAA,eAAe,GAAG,IAAI,mBAAS,CAC1C,6CAA6C,CAC9C,CAAC;AAEW,QAAA,sBAAsB,GACjC,8CAA8C,CAAC;AAEpC,QAAA,SAAS,GAAG,IAAI,sBAAS,CAAC,SAAA,EAAE,EAAI,8BAAa,CAAC,MAAM,CAAC,QAAQ,CAAA,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { FetcherExecutor } from '@sonarwatch/portfolio-core';
2
+ declare const fetcherExecutor: FetcherExecutor;
3
+ export default fetcherExecutor;
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const portfolio_core_1 = require("@sonarwatch/portfolio-core");
5
+ const constants_1 = require("./constants");
6
+ const MarginfiAccount_1 = require("./structs/MarginfiAccount");
7
+ const helpers_1 = require("./helpers");
8
+ const filters_1 = require("./filters");
9
+ const solana_1 = require("../../utils/solana");
10
+ const clients_1 = require("../../utils/clients");
11
+ const tokenPriceToAssetToken_1 = require("../../utils/misc/tokenPriceToAssetToken");
12
+ const fetcherExecutor = (owner, context) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
13
+ var _a;
14
+ const { tokenPriceCache } = context;
15
+ const connection = (0, clients_1.getClientSolana)();
16
+ const accounts = yield (0, solana_1.getParsedProgramAccounts)(connection, MarginfiAccount_1.marginfiAccountStruct, constants_1.MarginfiProgram, (0, filters_1.accountsFilter)(owner));
17
+ if (accounts.length === 0)
18
+ return [];
19
+ const lendingAccountBalances = (_a = accounts.at(0)) === null || _a === void 0 ? void 0 : _a.lendingAccount.balances;
20
+ const borrowedAssets = [];
21
+ const borrowedYields = [];
22
+ const suppliedAssets = [];
23
+ const suppliedYields = [];
24
+ const rewardAssets = [];
25
+ if (lendingAccountBalances) {
26
+ for (let index = 0; index < lendingAccountBalances.length; index += 1) {
27
+ const accountBalanceInfo = lendingAccountBalances[index];
28
+ const bankInfo = yield (context === null || context === void 0 ? void 0 : context.cache.get(accountBalanceInfo.bankPk.toString(), {
29
+ prefix: 'marginfi',
30
+ networkId: portfolio_core_1.NetworkId.solana,
31
+ }));
32
+ if (!bankInfo)
33
+ continue;
34
+ const { lendingApr, borrowingApr } = (0, helpers_1.getInterestRates)(bankInfo);
35
+ const tokenPrice = yield tokenPriceCache.get(bankInfo.mint.toString(), portfolio_core_1.NetworkId.solana);
36
+ if (!accountBalanceInfo.assetShares.value.isZero()) {
37
+ const suppliedQuantity = (0, helpers_1.wrappedI80F48toBigNumber)(accountBalanceInfo.assetShares)
38
+ .times(bankInfo.dividedAssetShareValue)
39
+ .toNumber();
40
+ suppliedAssets.push((0, tokenPriceToAssetToken_1.tokenPriceToAssetToken)(bankInfo.mint.toString(), suppliedQuantity, portfolio_core_1.NetworkId.solana, tokenPrice));
41
+ }
42
+ if (!accountBalanceInfo.liabilityShares.value.isZero()) {
43
+ const borrowedQuantity = (0, helpers_1.wrappedI80F48toBigNumber)(accountBalanceInfo.liabilityShares)
44
+ .times(bankInfo.dividedLiabilityShareValue)
45
+ .toNumber();
46
+ borrowedAssets.push((0, tokenPriceToAssetToken_1.tokenPriceToAssetToken)(bankInfo.mint.toString(), borrowedQuantity, portfolio_core_1.NetworkId.solana, tokenPrice));
47
+ }
48
+ const bankLendingYields = [
49
+ {
50
+ apr: lendingApr,
51
+ apy: (0, portfolio_core_1.aprToApy)(lendingApr),
52
+ },
53
+ ];
54
+ const bankBorrowedYields = [
55
+ {
56
+ apr: borrowingApr,
57
+ apy: (0, portfolio_core_1.aprToApy)(borrowingApr),
58
+ },
59
+ ];
60
+ suppliedYields.push(bankLendingYields);
61
+ borrowedYields.push(bankBorrowedYields);
62
+ }
63
+ }
64
+ const { borrowedValue, collateralRatio, suppliedValue, value } = (0, portfolio_core_1.getElementLendingValues)(suppliedAssets, borrowedAssets, rewardAssets);
65
+ if (borrowedAssets.length === 0 &&
66
+ suppliedAssets.length === 0 &&
67
+ rewardAssets.length === 0)
68
+ return [];
69
+ const element = {
70
+ type: portfolio_core_1.PortfolioElementType.borrowlend,
71
+ networkId: portfolio_core_1.NetworkId.solana,
72
+ platformId: 'marginfi',
73
+ label: 'Lending',
74
+ value,
75
+ data: {
76
+ borrowedAssets,
77
+ borrowedValue,
78
+ borrowedYields,
79
+ suppliedAssets,
80
+ suppliedValue,
81
+ suppliedYields,
82
+ collateralRatio,
83
+ rewardAssets,
84
+ value,
85
+ },
86
+ };
87
+ return [element];
88
+ });
89
+ exports.default = fetcherExecutor;
90
+ //# sourceMappingURL=fetcherExecutor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetcherExecutor.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/marginfi/fetcherExecutor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { GetProgramAccountsFilter } from '@solana/web3.js';
2
+ export declare const accountsFilter: (owner: string) => GetProgramAccountsFilter[];
3
+ export declare const banksFilters: () => GetProgramAccountsFilter[];
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.banksFilters = exports.accountsFilter = void 0;
4
+ const constants_1 = require("./constants");
5
+ const accountsFilter = (owner) => [
6
+ {
7
+ memcmp: {
8
+ bytes: 'CKkRR4La3xu',
9
+ offset: 0,
10
+ },
11
+ },
12
+ {
13
+ memcmp: {
14
+ bytes: constants_1.MarginfiAccountAddress,
15
+ offset: 8,
16
+ },
17
+ },
18
+ {
19
+ memcmp: {
20
+ bytes: owner,
21
+ offset: 40,
22
+ },
23
+ },
24
+ ];
25
+ exports.accountsFilter = accountsFilter;
26
+ const banksFilters = () => [
27
+ {
28
+ memcmp: {
29
+ bytes: 'QnTef4UXSzF',
30
+ offset: 0,
31
+ },
32
+ },
33
+ {
34
+ memcmp: {
35
+ bytes: constants_1.MarginfiAccountAddress,
36
+ offset: 41,
37
+ },
38
+ },
39
+ ];
40
+ exports.banksFilters = banksFilters;
41
+ //# sourceMappingURL=filters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filters.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/marginfi/filters.ts"],"names":[],"mappings":";;;AACA,2CAAqD;AAE9C,MAAM,cAAc,GAAG,CAAC,KAAa,EAA8B,EAAE,CAAC;IAC3E;QACE,MAAM,EAAE;YACN,KAAK,EAAE,aAAa;YACpB,MAAM,EAAE,CAAC;SACV;KACF;IACD;QACE,MAAM,EAAE;YACN,KAAK,EAAE,kCAAsB;YAC7B,MAAM,EAAE,CAAC;SACV;KACF;IACD;QACE,MAAM,EAAE;YACN,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,EAAE;SACX;KACF;CACF,CAAC;AAnBW,QAAA,cAAc,kBAmBzB;AAEK,MAAM,YAAY,GAAG,GAA+B,EAAE,CAAC;IAC5D;QACE,MAAM,EAAE;YACN,KAAK,EAAE,aAAa;YACpB,MAAM,EAAE,CAAC;SACV;KACF;IACD;QACE,MAAM,EAAE;YACN,KAAK,EAAE,kCAAsB;YAC7B,MAAM,EAAE,EAAE;SACX;KACF;CACF,CAAC;AAbW,QAAA,YAAY,gBAavB"}
@@ -0,0 +1,9 @@
1
+ import BigNumber from 'bignumber.js';
2
+ import { BankInfo } from './types';
3
+ export declare function wrappedI80F48toBigNumber({ value }: {
4
+ value: BigNumber;
5
+ }, scaleDecimal?: number): BigNumber;
6
+ export declare function getInterestRates(bank: BankInfo): {
7
+ lendingApr: number;
8
+ borrowingApr: number;
9
+ };
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getInterestRates = exports.wrappedI80F48toBigNumber = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const bignumber_js_1 = tslib_1.__importDefault(require("bignumber.js"));
6
+ const decimal_js_1 = tslib_1.__importDefault(require("decimal.js"));
7
+ function wrappedI80F48toBigNumber({ value }, scaleDecimal = 0) {
8
+ if (!value)
9
+ return new bignumber_js_1.default(0);
10
+ const newValue = new bignumber_js_1.default(value);
11
+ const numbers = new decimal_js_1.default(`${newValue.isNegative() ? '-' : ''}0b${newValue.abs().toString(2)}p-48`).dividedBy(Math.pow(10, scaleDecimal));
12
+ return new bignumber_js_1.default(numbers.toString());
13
+ }
14
+ exports.wrappedI80F48toBigNumber = wrappedI80F48toBigNumber;
15
+ // AMELIORER LE PRINCIPE DENVOYER A CHAQUE FOIS LA BANK AUX FONCTIONS
16
+ // AMELIORER LE PRINCIPE DE UNWRAP LES I80F48 A CHAQUE FOIS
17
+ function getInterestRates(bank) {
18
+ const { insuranceFeeFixedApr, insuranceIrFee, protocolFixedFeeApr, protocolIrFee, } = bank.config.interestRateConfig;
19
+ const rateFee = wrappedI80F48toBigNumber(insuranceFeeFixedApr).plus(wrappedI80F48toBigNumber(protocolFixedFeeApr));
20
+ const fixedFee = wrappedI80F48toBigNumber(insuranceIrFee).plus(wrappedI80F48toBigNumber(protocolIrFee));
21
+ const interestRate = interestRateCurve(bank);
22
+ const utilizationRate = wrappedI80F48toBigNumber(bank.liabilityShareValue)
23
+ .times(wrappedI80F48toBigNumber(bank.totalLiabilityShares))
24
+ .div(wrappedI80F48toBigNumber(bank.assetShareValue).times(wrappedI80F48toBigNumber(bank.totalAssetShares)));
25
+ const lendingApy = interestRate.times(utilizationRate).toNumber();
26
+ const borrowingApy = interestRate
27
+ .times(new bignumber_js_1.default(1).plus(rateFee))
28
+ .plus(fixedFee)
29
+ .toNumber();
30
+ return { lendingApr: lendingApy, borrowingApr: borrowingApy };
31
+ }
32
+ exports.getInterestRates = getInterestRates;
33
+ function interestRateCurve(bank) {
34
+ const { optimalUtilizationRate, plateauInterestRate, maxInterestRate } = bank.config.interestRateConfig;
35
+ const utilizationRate = wrappedI80F48toBigNumber(bank.liabilityShareValue)
36
+ .times(wrappedI80F48toBigNumber(bank.totalLiabilityShares))
37
+ .div(wrappedI80F48toBigNumber(bank.assetShareValue).times(wrappedI80F48toBigNumber(bank.totalAssetShares)));
38
+ if (utilizationRate.lte(wrappedI80F48toBigNumber(optimalUtilizationRate))) {
39
+ return utilizationRate
40
+ .times(wrappedI80F48toBigNumber(plateauInterestRate))
41
+ .div(wrappedI80F48toBigNumber(optimalUtilizationRate));
42
+ }
43
+ return utilizationRate
44
+ .minus(wrappedI80F48toBigNumber(optimalUtilizationRate))
45
+ .div(new bignumber_js_1.default(1).minus(wrappedI80F48toBigNumber(optimalUtilizationRate)))
46
+ .times(wrappedI80F48toBigNumber(maxInterestRate).minus(wrappedI80F48toBigNumber(plateauInterestRate)))
47
+ .plus(wrappedI80F48toBigNumber(plateauInterestRate));
48
+ }
49
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/marginfi/helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Fetcher, Job } from '@sonarwatch/portfolio-core';
2
+ export declare const jobs: Job[];
3
+ export declare const fetchers: Fetcher[];
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.fetchers = exports.jobs = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const portfolio_core_1 = require("@sonarwatch/portfolio-core");
6
+ const jobExecutor_1 = tslib_1.__importDefault(require("./jobExecutor"));
7
+ const fetcherExecutor_1 = tslib_1.__importDefault(require("./fetcherExecutor"));
8
+ exports.jobs = [
9
+ {
10
+ id: 'marginfi',
11
+ executor: jobExecutor_1.default,
12
+ },
13
+ ];
14
+ exports.fetchers = [
15
+ {
16
+ id: 'marginfi',
17
+ networkId: portfolio_core_1.NetworkId.solana,
18
+ executor: fetcherExecutor_1.default,
19
+ },
20
+ ];
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/marginfi/index.ts"],"names":[],"mappings":";;;;AAAA,+DAAqE;AACrE,wEAAwC;AACxC,gFAAgD;AAEnC,QAAA,IAAI,GAAU;IACzB;QACE,EAAE,EAAE,UAAU;QACd,QAAQ,EAAE,qBAAW;KACtB;CACF,CAAC;AAEW,QAAA,QAAQ,GAAc;IACjC;QACE,EAAE,EAAE,UAAU;QACd,SAAS,EAAE,0BAAS,CAAC,MAAM;QAC3B,QAAQ,EAAE,yBAAe;KAC1B;CACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { JobExecutor } from '@sonarwatch/portfolio-core';
2
+ declare const jobExecutor: JobExecutor;
3
+ export default jobExecutor;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const portfolio_core_1 = require("@sonarwatch/portfolio-core");
5
+ const constants_1 = require("./constants");
6
+ const Bank_1 = require("./structs/Bank");
7
+ const filters_1 = require("./filters");
8
+ const helpers_1 = require("./helpers");
9
+ const solana_1 = require("../../utils/solana");
10
+ const clients_1 = require("../../utils/clients");
11
+ const jobExecutor = (context) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
12
+ const { cache } = context;
13
+ const connection = (0, clients_1.getClientSolana)();
14
+ const banksRawData = yield (0, solana_1.getParsedProgramAccounts)(connection, Bank_1.bankStruct, constants_1.MarginfiProgram, (0, filters_1.banksFilters)());
15
+ for (let index = 0; index < banksRawData.length; index += 1) {
16
+ const bank = banksRawData[index];
17
+ yield cache.set(bank.pubkey.toString(), Object.assign(Object.assign({}, bank), { dividedAssetShareValue: (0, helpers_1.wrappedI80F48toBigNumber)(bank.assetShareValue).div(Math.pow(10, bank.mintDecimals)), dividedLiabilityShareValue: (0, helpers_1.wrappedI80F48toBigNumber)(bank.liabilityShareValue).div(Math.pow(10, bank.mintDecimals)) }), {
18
+ prefix: 'marginfi',
19
+ networkId: portfolio_core_1.NetworkId.solana,
20
+ });
21
+ }
22
+ });
23
+ exports.default = jobExecutor;
24
+ //# sourceMappingURL=jobExecutor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jobExecutor.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/marginfi/jobExecutor.ts"],"names":[],"mappings":";;;AAAA,+DAA6E;AAC7E,2CAA8C;AAC9C,yCAA4C;AAC5C,uCAAyC;AACzC,uCAAqD;AACrD,+CAA8D;AAC9D,iDAAsD;AAEtD,MAAM,WAAW,GAAgB,CAAO,OAAgB,EAAE,EAAE;IAC1D,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;IAC1B,MAAM,UAAU,GAAG,IAAA,yBAAe,GAAE,CAAC;IAErC,MAAM,YAAY,GAAG,MAAM,IAAA,iCAAwB,EACjD,UAAU,EACV,iBAAU,EACV,2BAAe,EACf,IAAA,sBAAY,GAAE,CACf,CAAC;IAEF,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,YAAY,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE;QAC3D,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;QACjC,MAAM,KAAK,CAAC,GAAG,CACb,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,kCAEjB,IAAI,KACP,sBAAsB,EAAE,IAAA,kCAAwB,EAC9C,IAAI,CAAC,eAAe,CACrB,CAAC,GAAG,CAAC,SAAA,EAAE,EAAI,IAAI,CAAC,YAAY,CAAA,CAAC,EAC9B,0BAA0B,EAAE,IAAA,kCAAwB,EAClD,IAAI,CAAC,mBAAmB,CACzB,CAAC,GAAG,CAAC,SAAA,EAAE,EAAI,IAAI,CAAC,YAAY,CAAA,CAAC,KAEhC;YACE,MAAM,EAAE,UAAU;YAClB,SAAS,EAAE,0BAAS,CAAC,MAAM;SAC5B,CACF,CAAC;KACH;AACH,CAAC,CAAA,CAAC;AACF,kBAAe,WAAW,CAAC"}
@@ -0,0 +1,72 @@
1
+ /// <reference types="node" />
2
+ import { FixableBeetStruct } from '@metaplex-foundation/beet';
3
+ import { PublicKey } from '@solana/web3.js';
4
+ import BigNumber from 'bignumber.js';
5
+ import { WrappedI80F48 } from './common';
6
+ export declare enum BankOperationalState {
7
+ Paused = 0,
8
+ Operational = 1,
9
+ ReduceOnly = 2
10
+ }
11
+ export declare enum RiskTier {
12
+ Collateral = 0,
13
+ Isolated = 1
14
+ }
15
+ export type InterestRateConfig = {
16
+ optimalUtilizationRate: WrappedI80F48;
17
+ plateauInterestRate: WrappedI80F48;
18
+ maxInterestRate: WrappedI80F48;
19
+ insuranceFeeFixedApr: WrappedI80F48;
20
+ insuranceIrFee: WrappedI80F48;
21
+ protocolFixedFeeApr: WrappedI80F48;
22
+ protocolIrFee: WrappedI80F48;
23
+ padding: BigNumber[];
24
+ };
25
+ export declare const interestRateConfigStruct: FixableBeetStruct<InterestRateConfig, Partial<InterestRateConfig>>;
26
+ export type BankConfig = {
27
+ assetWeightInit: WrappedI80F48;
28
+ assetWeightMaint: WrappedI80F48;
29
+ liabilityWeightInit: WrappedI80F48;
30
+ liabilityWeightMaint: WrappedI80F48;
31
+ depositLimit: number;
32
+ interestRateConfig: InterestRateConfig;
33
+ operationalState: BankOperationalState;
34
+ oracleSetup: BigNumber;
35
+ oracleKeys: PublicKey[];
36
+ borrowLimit: number;
37
+ riskTier: RiskTier;
38
+ padding: BigNumber[];
39
+ };
40
+ export declare const bankConfigStruct: FixableBeetStruct<BankConfig, Partial<BankConfig>>;
41
+ export type Bank = {
42
+ padding: Buffer;
43
+ mint: PublicKey;
44
+ mintDecimals: number;
45
+ group: PublicKey;
46
+ ignore1: number[];
47
+ assetShareValue: WrappedI80F48;
48
+ liabilityShareValue: WrappedI80F48;
49
+ liquidityVault: PublicKey;
50
+ blob: Buffer;
51
+ insuranceVault: PublicKey;
52
+ insuranceVaultBump: number;
53
+ insuranceVaultAuthorityBump: PublicKey;
54
+ ignore3: PublicKey;
55
+ collectedInsuranceFeesOutstanding: WrappedI80F48;
56
+ feeVault: PublicKey;
57
+ feeVaultBump: number;
58
+ feeVaultAuthorityBump: number;
59
+ ignore4: number[];
60
+ collectedGroupFeesOutstanding: WrappedI80F48;
61
+ totalLiabilityShares: WrappedI80F48;
62
+ totalAssetShares: WrappedI80F48;
63
+ lastUpdate: BigNumber;
64
+ config: BankConfig;
65
+ emissionsFlags: number;
66
+ emissionsRate: number;
67
+ emissionsMint: PublicKey;
68
+ emissionsRemaining: WrappedI80F48;
69
+ padding0: BigNumber[];
70
+ padding1: BigNumber[];
71
+ };
72
+ export declare const bankStruct: FixableBeetStruct<Bank, Partial<Bank>>;
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.bankStruct = exports.bankConfigStruct = exports.interestRateConfigStruct = exports.RiskTier = exports.BankOperationalState = void 0;
4
+ const beet_1 = require("@metaplex-foundation/beet");
5
+ const beet_solana_1 = require("@metaplex-foundation/beet-solana");
6
+ const common_1 = require("./common");
7
+ const solana_1 = require("../../../utils/solana");
8
+ var BankOperationalState;
9
+ (function (BankOperationalState) {
10
+ BankOperationalState[BankOperationalState["Paused"] = 0] = "Paused";
11
+ BankOperationalState[BankOperationalState["Operational"] = 1] = "Operational";
12
+ BankOperationalState[BankOperationalState["ReduceOnly"] = 2] = "ReduceOnly";
13
+ })(BankOperationalState || (exports.BankOperationalState = BankOperationalState = {}));
14
+ var RiskTier;
15
+ (function (RiskTier) {
16
+ RiskTier[RiskTier["Collateral"] = 0] = "Collateral";
17
+ RiskTier[RiskTier["Isolated"] = 1] = "Isolated";
18
+ })(RiskTier || (exports.RiskTier = RiskTier = {}));
19
+ exports.interestRateConfigStruct = new beet_1.FixableBeetStruct([
20
+ ['optimalUtilizationRate', common_1.wrappedI80F48Struct],
21
+ ['plateauInterestRate', common_1.wrappedI80F48Struct],
22
+ ['maxInterestRate', common_1.wrappedI80F48Struct],
23
+ ['insuranceFeeFixedApr', common_1.wrappedI80F48Struct],
24
+ ['insuranceIrFee', common_1.wrappedI80F48Struct],
25
+ ['protocolFixedFeeApr', common_1.wrappedI80F48Struct],
26
+ ['protocolIrFee', common_1.wrappedI80F48Struct],
27
+ ['padding', (0, beet_1.uniformFixedSizeArray)(solana_1.u128, 8)],
28
+ ], (args) => args);
29
+ exports.bankConfigStruct = new beet_1.FixableBeetStruct([
30
+ ['assetWeightInit', common_1.wrappedI80F48Struct],
31
+ ['assetWeightMaint', common_1.wrappedI80F48Struct],
32
+ ['liabilityWeightInit', common_1.wrappedI80F48Struct],
33
+ ['liabilityWeightMaint', common_1.wrappedI80F48Struct],
34
+ ['depositLimit', solana_1.u64],
35
+ ['interestRateConfig', exports.interestRateConfigStruct],
36
+ ['operationalState', beet_1.u8],
37
+ ['oracleSetup', beet_1.u8],
38
+ ['oracleKeys', (0, beet_1.uniformFixedSizeArray)(beet_solana_1.publicKey, 5)],
39
+ ['borrowLimit', solana_1.u64],
40
+ ['riskTier', beet_1.u8],
41
+ ['padding', (0, beet_1.uniformFixedSizeArray)(solana_1.u64, 6)],
42
+ ], (args) => args);
43
+ exports.bankStruct = new beet_1.FixableBeetStruct([
44
+ ['padding', (0, solana_1.blob)(8)],
45
+ ['mint', beet_solana_1.publicKey],
46
+ ['mintDecimals', beet_1.u8],
47
+ ['group', beet_solana_1.publicKey],
48
+ ['ignore1', (0, beet_1.uniformFixedSizeArray)(beet_1.u8, 7)],
49
+ ['assetShareValue', common_1.wrappedI80F48Struct],
50
+ ['liabilityShareValue', common_1.wrappedI80F48Struct],
51
+ ['liquidityVault', beet_solana_1.publicKey],
52
+ ['blob', (0, solana_1.blob)(2)],
53
+ ['insuranceVault', beet_solana_1.publicKey],
54
+ ['insuranceVaultBump', beet_1.u8],
55
+ ['insuranceVaultAuthorityBump', beet_1.u8],
56
+ ['ignore3', (0, beet_1.uniformFixedSizeArray)(beet_1.u8, 4)],
57
+ ['collectedInsuranceFeesOutstanding', common_1.wrappedI80F48Struct],
58
+ ['feeVault', beet_solana_1.publicKey],
59
+ ['feeVaultBump', beet_1.u8],
60
+ ['feeVaultAuthorityBump', beet_1.u8],
61
+ ['ignore4', (0, beet_1.uniformFixedSizeArray)(beet_1.u8, 6)],
62
+ ['collectedGroupFeesOutstanding', common_1.wrappedI80F48Struct],
63
+ ['totalLiabilityShares', common_1.wrappedI80F48Struct],
64
+ ['totalAssetShares', common_1.wrappedI80F48Struct],
65
+ ['lastUpdate', solana_1.i64],
66
+ ['config', exports.bankConfigStruct],
67
+ ['emissionsFlags', solana_1.u64],
68
+ ['emissionsRate', solana_1.u64],
69
+ ['emissionsMint', beet_solana_1.publicKey],
70
+ ['emissionsRemaining', common_1.wrappedI80F48Struct],
71
+ ['padding0', (0, beet_1.uniformFixedSizeArray)(solana_1.u128, 28)],
72
+ ['padding1', (0, beet_1.uniformFixedSizeArray)(solana_1.u128, 32)],
73
+ ], (args) => args);
74
+ //# sourceMappingURL=Bank.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Bank.js","sourceRoot":"","sources":["../../../../../../../packages/plugins/src/plugins/marginfi/structs/Bank.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /// <reference types="node" />
2
+ import { BeetStruct, FixableBeetStruct } from '@metaplex-foundation/beet';
3
+ import { PublicKey } from '@solana/web3.js';
4
+ import { WrappedI80F48 } from './common';
5
+ export type Balance = {
6
+ active: number;
7
+ bankPk: PublicKey;
8
+ ignore: number[];
9
+ assetShares: WrappedI80F48;
10
+ liabilityShares: WrappedI80F48;
11
+ padding: Buffer[];
12
+ };
13
+ export declare const balanceStruct: BeetStruct<Balance, Partial<Balance>>;
14
+ export type LendingAccount = {
15
+ balances: Balance[];
16
+ padding: Buffer[];
17
+ };
18
+ export declare const lendingAccountStruct: FixableBeetStruct<LendingAccount, Partial<LendingAccount>>;
19
+ export type MarginfiAccount = {
20
+ padding1: Buffer;
21
+ group: PublicKey;
22
+ authority: PublicKey;
23
+ lendingAccount: LendingAccount;
24
+ padding: Buffer[];
25
+ };
26
+ export declare const marginfiAccountStruct: FixableBeetStruct<MarginfiAccount, Partial<MarginfiAccount>>;