@sonarwatch/portfolio-plugins 0.4.2 → 0.4.3

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 (51) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/package.json +3 -2
  3. package/src/index.js +9 -1
  4. package/src/index.js.map +1 -1
  5. package/src/platforms.d.ts +2 -1
  6. package/src/platforms.js +9 -4
  7. package/src/platforms.js.map +1 -1
  8. package/src/plugins/tensor/constants.d.ts +1 -1
  9. package/src/plugins/tensor/constants.js +2 -2
  10. package/src/plugins/tensor/constants.js.map +1 -1
  11. package/src/plugins/thala/constants.d.ts +24 -0
  12. package/src/plugins/thala/constants.js +37 -0
  13. package/src/plugins/thala/constants.js.map +1 -0
  14. package/src/plugins/thala/helpers.d.ts +2 -0
  15. package/src/plugins/thala/helpers.js +39 -0
  16. package/src/plugins/thala/helpers.js.map +1 -0
  17. package/src/plugins/thala/index.d.ts +3 -0
  18. package/src/plugins/thala/index.js +14 -0
  19. package/src/plugins/thala/index.js.map +1 -0
  20. package/src/plugins/thala/lpTokensJob.d.ts +3 -0
  21. package/src/plugins/thala/lpTokensJob.js +126 -0
  22. package/src/plugins/thala/lpTokensJob.js.map +1 -0
  23. package/src/plugins/thala/stabilityPoolFetcher.d.ts +3 -0
  24. package/src/plugins/thala/stabilityPoolFetcher.js +81 -0
  25. package/src/plugins/thala/stabilityPoolFetcher.js.map +1 -0
  26. package/src/plugins/thala/stakingAprJob.d.ts +3 -0
  27. package/src/plugins/thala/stakingAprJob.js +35 -0
  28. package/src/plugins/thala/stakingAprJob.js.map +1 -0
  29. package/src/plugins/thala/types.d.ts +78 -0
  30. package/src/plugins/thala/types.js +9 -0
  31. package/src/plugins/thala/types.js.map +1 -0
  32. package/src/plugins/thala/vaultsFetcher.d.ts +3 -0
  33. package/src/plugins/thala/vaultsFetcher.js +86 -0
  34. package/src/plugins/thala/vaultsFetcher.js.map +1 -0
  35. package/src/plugins/thala/vaultsRatesJob.d.ts +3 -0
  36. package/src/plugins/thala/vaultsRatesJob.js +39 -0
  37. package/src/plugins/thala/vaultsRatesJob.js.map +1 -0
  38. package/src/plugins/wallet-tokens/constants.d.ts +1 -0
  39. package/src/plugins/wallet-tokens/constants.js +3 -1
  40. package/src/plugins/wallet-tokens/constants.js.map +1 -1
  41. package/src/plugins/wallet-tokens/fetchers/aptos.d.ts +3 -0
  42. package/src/plugins/wallet-tokens/fetchers/aptos.js +81 -0
  43. package/src/plugins/wallet-tokens/fetchers/aptos.js.map +1 -0
  44. package/src/plugins/wallet-tokens/helpers.js +2 -2
  45. package/src/plugins/wallet-tokens/helpers.js.map +1 -1
  46. package/src/plugins/wallet-tokens/index.d.ts +2 -1
  47. package/src/plugins/wallet-tokens/index.js +7 -5
  48. package/src/plugins/wallet-tokens/index.js.map +1 -1
  49. package/src/plugins/wallet-tokens/types.d.ts +1 -1
  50. package/src/utils/aptos/parseTypeString.js +7 -2
  51. package/src/utils/aptos/parseTypeString.js.map +1 -1
package/CHANGELOG.md CHANGED
@@ -2,6 +2,10 @@
2
2
 
3
3
  This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver).
4
4
 
5
+ ## [0.4.3](https://github.com/sonarwatch/portfolio/compare/plugins-0.4.2...plugins-0.4.3) (2023-07-08)
6
+
7
+
8
+
5
9
  ## [0.4.2](https://github.com/sonarwatch/portfolio/compare/plugins-0.4.1...plugins-0.4.2) (2023-07-07)
6
10
 
7
11
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sonarwatch/portfolio-plugins",
3
- "version": "0.4.2",
3
+ "version": "0.4.3",
4
4
  "type": "commonjs",
5
5
  "generators": "./generators.json",
6
6
  "dependencies": {
@@ -17,11 +17,12 @@
17
17
  "bitcoin-address-validation": "^2.2.1",
18
18
  "bn.js": "^5.2.1",
19
19
  "decimal.js": "^10.4.3",
20
+ "listhen": "^1.0.4",
20
21
  "unstorage": "^1.7.0",
21
22
  "viem": "^1.2.9"
22
23
  },
23
24
  "peerDependencies": {
24
- "@sonarwatch/portfolio-core": "0.4.2"
25
+ "@sonarwatch/portfolio-core": "0.4.3"
25
26
  },
26
27
  "main": "./src/index.js",
27
28
  "types": "./src/index.d.ts"
package/src/index.js CHANGED
@@ -31,15 +31,23 @@ const platformsObj = __importStar(require("./platforms"));
31
31
  const wallet_tokens_1 = require("./plugins/wallet-tokens");
32
32
  const marinade_1 = require("./plugins/marinade");
33
33
  const marginfi_1 = require("./plugins/marginfi");
34
+ const thala_1 = require("./plugins/thala");
34
35
  const tensor_1 = require("./plugins/tensor");
35
36
  const foo_1 = require("./plugins/foo");
36
37
  __exportStar(require("./platforms"), exports);
37
38
  exports.platforms = Object.values(platformsObj);
38
- exports.jobs = [...foo_1.jobs, ...marginfi_1.jobs, ...wallet_tokens_1.jobs];
39
+ exports.jobs = [
40
+ ...foo_1.jobs,
41
+ ...marginfi_1.jobs,
42
+ ...wallet_tokens_1.jobs,
43
+ ...thala_1.jobs,
44
+ ];
39
45
  exports.fetchers = [
40
46
  ...foo_1.fetchers,
41
47
  ...tensor_1.fetchers,
42
48
  ...marginfi_1.fetchers,
43
49
  ...marinade_1.fetchers,
50
+ ...thala_1.fetchers,
51
+ ...wallet_tokens_1.fetchers,
44
52
  ];
45
53
  //# sourceMappingURL=index.js.map
package/src/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/plugins/src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,0DAA4C;AAC5C,2DAAmE;AACnE,iDAAkE;AAClE,iDAG4B;AAC5B,6CAA8D;AAC9D,uCAAyE;AAEzE,8CAA4B;AACf,QAAA,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;AAExC,QAAA,IAAI,GAAU,CAAC,GAAG,UAAO,EAAE,GAAG,eAAY,EAAE,GAAG,oBAAgB,CAAC,CAAC;AAEjE,QAAA,QAAQ,GAAc;IACjC,GAAG,cAAW;IACd,GAAG,iBAAc;IACjB,GAAG,mBAAgB;IACnB,GAAG,mBAAgB;CACpB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/plugins/src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,0DAA4C;AAC5C,2DAGiC;AACjC,iDAAkE;AAClE,iDAG4B;AAC5B,2CAA+E;AAC/E,6CAA8D;AAC9D,uCAAyE;AAEzE,8CAA4B;AACf,QAAA,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;AAExC,QAAA,IAAI,GAAU;IACzB,GAAG,UAAO;IACV,GAAG,eAAY;IACf,GAAG,oBAAgB;IACnB,GAAG,YAAS;CACb,CAAC;AAEW,QAAA,QAAQ,GAAc;IACjC,GAAG,cAAW;IACd,GAAG,iBAAc;IACjB,GAAG,mBAAgB;IACnB,GAAG,mBAAgB;IACnB,GAAG,gBAAa;IAChB,GAAG,wBAAoB;CACxB,CAAC"}
@@ -1,7 +1,8 @@
1
1
  import { Platform } from '@sonarwatch/portfolio-core';
2
2
  export declare const marinadePlatform: Platform;
3
3
  export declare const aavePlatform: Platform;
4
- export declare const walletnftsPlatform: Platform;
4
+ export declare const walletNftsPlatform: Platform;
5
5
  export declare const walletTokensPlatform: Platform;
6
6
  export declare const marginfiPlatform: Platform;
7
7
  export declare const tensorPlatform: Platform;
8
+ export declare const thalaPlatform: Platform;
package/src/platforms.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.tensorPlatform = exports.marginfiPlatform = exports.walletTokensPlatform = exports.walletnftsPlatform = exports.aavePlatform = exports.marinadePlatform = void 0;
3
+ exports.thalaPlatform = exports.tensorPlatform = exports.marginfiPlatform = exports.walletTokensPlatform = exports.walletNftsPlatform = exports.aavePlatform = exports.marinadePlatform = void 0;
4
4
  exports.marinadePlatform = {
5
5
  id: 'marinade',
6
6
  name: 'Marinade',
@@ -11,10 +11,10 @@ exports.aavePlatform = {
11
11
  name: 'AAVE',
12
12
  image: 'https://beta.sonar.watch/img/platforms/aave.png',
13
13
  };
14
- exports.walletnftsPlatform = {
15
- id: 'walletnfts',
14
+ exports.walletNftsPlatform = {
15
+ id: 'wallet-nfts',
16
16
  name: 'NFTs',
17
- image: 'https://beta.sonar.watch/img/platforms/walletnfts.png',
17
+ image: 'https://beta.sonar.watch/img/platforms/wallet-nfts.png',
18
18
  };
19
19
  exports.walletTokensPlatform = {
20
20
  id: 'wallet-tokens',
@@ -31,4 +31,9 @@ exports.tensorPlatform = {
31
31
  name: 'Tensor',
32
32
  image: 'https://beta.sonar.watch/img/platforms/tensor.png',
33
33
  };
34
+ exports.thalaPlatform = {
35
+ id: 'thala',
36
+ name: 'Thala',
37
+ image: 'https://beta.sonar.watch/img/platforms/thala.png',
38
+ };
34
39
  //# sourceMappingURL=platforms.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"platforms.js","sourceRoot":"","sources":["../../../../packages/plugins/src/platforms.ts"],"names":[],"mappings":";;;AAEa,QAAA,gBAAgB,GAAa;IACxC,EAAE,EAAE,UAAU;IACd,IAAI,EAAE,UAAU;IAChB,KAAK,EAAE,qDAAqD;CAC7D,CAAC;AACW,QAAA,YAAY,GAAa;IACpC,EAAE,EAAE,MAAM;IACV,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,iDAAiD;CACzD,CAAC;AACW,QAAA,kBAAkB,GAAa;IAC1C,EAAE,EAAE,YAAY;IAChB,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,uDAAuD;CAC/D,CAAC;AACW,QAAA,oBAAoB,GAAa;IAC5C,EAAE,EAAE,eAAe;IACnB,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,0DAA0D;CAClE,CAAC;AACW,QAAA,gBAAgB,GAAa;IACxC,EAAE,EAAE,UAAU;IACd,IAAI,EAAE,UAAU;IAChB,KAAK,EAAE,qDAAqD;CAC7D,CAAC;AACW,QAAA,cAAc,GAAa;IACtC,EAAE,EAAE,QAAQ;IACZ,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,mDAAmD;CAC3D,CAAC"}
1
+ {"version":3,"file":"platforms.js","sourceRoot":"","sources":["../../../../packages/plugins/src/platforms.ts"],"names":[],"mappings":";;;AAEa,QAAA,gBAAgB,GAAa;IACxC,EAAE,EAAE,UAAU;IACd,IAAI,EAAE,UAAU;IAChB,KAAK,EAAE,qDAAqD;CAC7D,CAAC;AACW,QAAA,YAAY,GAAa;IACpC,EAAE,EAAE,MAAM;IACV,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,iDAAiD;CACzD,CAAC;AACW,QAAA,kBAAkB,GAAa;IAC1C,EAAE,EAAE,aAAa;IACjB,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,wDAAwD;CAChE,CAAC;AACW,QAAA,oBAAoB,GAAa;IAC5C,EAAE,EAAE,eAAe;IACnB,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,0DAA0D;CAClE,CAAC;AACW,QAAA,gBAAgB,GAAa;IACxC,EAAE,EAAE,UAAU;IACd,IAAI,EAAE,UAAU;IAChB,KAAK,EAAE,qDAAqD;CAC7D,CAAC;AACW,QAAA,cAAc,GAAa;IACtC,EAAE,EAAE,QAAQ;IACZ,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,mDAAmD;CAC3D,CAAC;AACW,QAAA,aAAa,GAAa;IACrC,EAAE,EAAE,OAAO;IACX,IAAI,EAAE,OAAO;IACb,KAAK,EAAE,kDAAkD;CAC1D,CAAC"}
@@ -1,4 +1,4 @@
1
1
  import { PublicKey } from '@solana/web3.js';
2
- export declare const cachePrefix = "tensor";
3
2
  export declare const platformId: string;
3
+ export declare const cachePrefix = "tensor";
4
4
  export declare const tensorProgram: PublicKey;
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.tensorProgram = exports.platformId = exports.cachePrefix = void 0;
3
+ exports.tensorProgram = exports.cachePrefix = exports.platformId = void 0;
4
4
  const web3_js_1 = require("@solana/web3.js");
5
5
  const platforms_1 = require("../../platforms");
6
- exports.cachePrefix = 'tensor';
7
6
  exports.platformId = platforms_1.tensorPlatform.id;
7
+ exports.cachePrefix = 'tensor';
8
8
  exports.tensorProgram = new web3_js_1.PublicKey('TSWAPaqyCSx2KABk68Shruf4rp7CxcNi8hAsbdwmHbN');
9
9
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/tensor/constants.ts"],"names":[],"mappings":";;;AAAA,6CAA4C;AAC5C,+CAAiD;AAEpC,QAAA,WAAW,GAAG,QAAQ,CAAC;AACvB,QAAA,UAAU,GAAG,0BAAc,CAAC,EAAE,CAAC;AAE/B,QAAA,aAAa,GAAG,IAAI,mBAAS,CACxC,6CAA6C,CAC9C,CAAC"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/tensor/constants.ts"],"names":[],"mappings":";;;AAAA,6CAA4C;AAC5C,+CAAiD;AAEpC,QAAA,UAAU,GAAG,0BAAc,CAAC,EAAE,CAAC;AAC/B,QAAA,WAAW,GAAG,QAAQ,CAAC;AAEvB,QAAA,aAAa,GAAG,IAAI,mBAAS,CACxC,6CAA6C,CAC9C,CAAC"}
@@ -0,0 +1,24 @@
1
+ export declare const platformId: string;
2
+ export declare const programAdressThala = "0x6f986d146e4a90b828d8c12c14b6f4e003fdff11a8eecceceb63744363eaac01";
3
+ export declare const vaultFilter: string;
4
+ export declare const vaultCollateralParamsFilter: string;
5
+ export declare const thlCoin = "0x7fd500c11216f0fe3095d0c4b8aa4d64a4e2e04f83758462f2b127255643615::thl_coin::THL";
6
+ export declare const modCoin: string;
7
+ export declare const stabilityEndpoint = "https://app.thala.fi/api/total-stability";
8
+ export declare const programAddressLP = "0x48271d39d0b05bd6efca2278f22277d6fcc375504f9839fd73f74ace240861af";
9
+ export declare const lpStableTypeTokenPrefix: string;
10
+ export declare const lpWeightedTypeTokenPrefix: string;
11
+ export declare const lpStableTypePrefix: string;
12
+ export declare const lpWeightedTypePrefix: string;
13
+ export declare const lpStableCoinInfoTypePrefix: string;
14
+ export declare const lpWeightedCoinInfoTypePrefix: string;
15
+ export declare const stabilityDepositPayload: (owner: string) => {
16
+ function: string;
17
+ type_arguments: string[];
18
+ arguments: string[];
19
+ };
20
+ export declare const stabilityClaimablePayload: (owner: string) => {
21
+ function: string;
22
+ type_arguments: never[];
23
+ arguments: string[];
24
+ };
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.stabilityClaimablePayload = exports.stabilityDepositPayload = exports.lpWeightedCoinInfoTypePrefix = exports.lpStableCoinInfoTypePrefix = exports.lpWeightedTypePrefix = exports.lpStableTypePrefix = exports.lpWeightedTypeTokenPrefix = exports.lpStableTypeTokenPrefix = exports.programAddressLP = exports.stabilityEndpoint = exports.modCoin = exports.thlCoin = exports.vaultCollateralParamsFilter = exports.vaultFilter = exports.programAdressThala = exports.platformId = void 0;
4
+ const platforms_1 = require("../../platforms");
5
+ const aptos_1 = require("../../utils/aptos");
6
+ exports.platformId = platforms_1.thalaPlatform.id;
7
+ exports.programAdressThala = '0x6f986d146e4a90b828d8c12c14b6f4e003fdff11a8eecceceb63744363eaac01';
8
+ const stabilityModule = 'stability_pool';
9
+ const vaultModule = 'vault';
10
+ const liquidityDeposit = `${exports.programAdressThala}::${stabilityModule}::account_deposit`;
11
+ const liquidityClaimable = `${exports.programAdressThala}::${stabilityModule}::claimable_thl`;
12
+ const cryptoType = `${exports.programAdressThala}::${stabilityModule}::Crypto`;
13
+ exports.vaultFilter = `${exports.programAdressThala}::${vaultModule}::Vault<`;
14
+ exports.vaultCollateralParamsFilter = `${exports.programAdressThala}::${vaultModule}::VaultCollateralParams<`;
15
+ exports.thlCoin = `0x7fd500c11216f0fe3095d0c4b8aa4d64a4e2e04f83758462f2b127255643615::thl_coin::THL`;
16
+ exports.modCoin = `${exports.programAdressThala}::mod_coin::MOD`;
17
+ exports.stabilityEndpoint = 'https://app.thala.fi/api/total-stability';
18
+ exports.programAddressLP = '0x48271d39d0b05bd6efca2278f22277d6fcc375504f9839fd73f74ace240861af';
19
+ exports.lpStableTypeTokenPrefix = `${exports.programAddressLP}::stable_pool::StablePoolToken`;
20
+ exports.lpWeightedTypeTokenPrefix = `${exports.programAddressLP}::weighted_pool::WeightedPoolToken`;
21
+ exports.lpStableTypePrefix = `${exports.programAddressLP}::stable_pool::StablePool`;
22
+ exports.lpWeightedTypePrefix = `${exports.programAddressLP}::weighted_pool::WeightedPool`;
23
+ exports.lpStableCoinInfoTypePrefix = `${aptos_1.coinInfo}<${exports.lpStableTypeTokenPrefix}`;
24
+ exports.lpWeightedCoinInfoTypePrefix = `${aptos_1.coinInfo}<${exports.lpWeightedTypeTokenPrefix}`;
25
+ const stabilityDepositPayload = (owner) => ({
26
+ function: liquidityDeposit,
27
+ type_arguments: [cryptoType],
28
+ arguments: [owner],
29
+ });
30
+ exports.stabilityDepositPayload = stabilityDepositPayload;
31
+ const stabilityClaimablePayload = (owner) => ({
32
+ function: liquidityClaimable,
33
+ type_arguments: [],
34
+ arguments: [owner],
35
+ });
36
+ exports.stabilityClaimablePayload = stabilityClaimablePayload;
37
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/thala/constants.ts"],"names":[],"mappings":";;;AAAA,+CAAgD;AAChD,6CAA6C;AAEhC,QAAA,UAAU,GAAG,yBAAa,CAAC,EAAE,CAAC;AAC9B,QAAA,kBAAkB,GAC7B,oEAAoE,CAAC;AAEvE,MAAM,eAAe,GAAG,gBAAgB,CAAC;AACzC,MAAM,WAAW,GAAG,OAAO,CAAC;AAE5B,MAAM,gBAAgB,GAAG,GAAG,0BAAkB,KAAK,eAAe,mBAAmB,CAAC;AACtF,MAAM,kBAAkB,GAAG,GAAG,0BAAkB,KAAK,eAAe,iBAAiB,CAAC;AAEtF,MAAM,UAAU,GAAG,GAAG,0BAAkB,KAAK,eAAe,UAAU,CAAC;AAC1D,QAAA,WAAW,GAAG,GAAG,0BAAkB,KAAK,WAAW,UAAU,CAAC;AAC9D,QAAA,2BAA2B,GAAG,GAAG,0BAAkB,KAAK,WAAW,0BAA0B,CAAC;AAE9F,QAAA,OAAO,GAAG,kFAAkF,CAAC;AAC7F,QAAA,OAAO,GAAG,GAAG,0BAAkB,iBAAiB,CAAC;AAEjD,QAAA,iBAAiB,GAAG,0CAA0C,CAAC;AAE/D,QAAA,gBAAgB,GAC3B,oEAAoE,CAAC;AAC1D,QAAA,uBAAuB,GAAG,GAAG,wBAAgB,gCAAgC,CAAC;AAC9E,QAAA,yBAAyB,GAAG,GAAG,wBAAgB,oCAAoC,CAAC;AACpF,QAAA,kBAAkB,GAAG,GAAG,wBAAgB,2BAA2B,CAAC;AACpE,QAAA,oBAAoB,GAAG,GAAG,wBAAgB,+BAA+B,CAAC;AAC1E,QAAA,0BAA0B,GAAG,GAAG,gBAAQ,IAAI,+BAAuB,EAAE,CAAC;AACtE,QAAA,4BAA4B,GAAG,GAAG,gBAAQ,IAAI,iCAAyB,EAAE,CAAC;AAEhF,MAAM,uBAAuB,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,CAAC;IACzD,QAAQ,EAAE,gBAAgB;IAC1B,cAAc,EAAE,CAAC,UAAU,CAAC;IAC5B,SAAS,EAAE,CAAC,KAAK,CAAC;CACnB,CAAC,CAAC;AAJU,QAAA,uBAAuB,2BAIjC;AAEI,MAAM,yBAAyB,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,CAAC;IAC3D,QAAQ,EAAE,kBAAkB;IAC5B,cAAc,EAAE,EAAE;IAClB,SAAS,EAAE,CAAC,KAAK,CAAC;CACnB,CAAC,CAAC;AAJU,QAAA,yBAAyB,6BAInC"}
@@ -0,0 +1,2 @@
1
+ export declare function fp64ToFloat(a: bigint): number;
2
+ export declare function tokenToLpType(tokenType: string): string;
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.tokenToLpType = exports.fp64ToFloat = void 0;
4
+ /* eslint-disable no-bitwise */
5
+ function fp64ToFloat(a) {
6
+ // avoid large number
7
+ let mask = BigInt('0xffffffff000000000000000000000000');
8
+ if ((a & mask) !== BigInt(0)) {
9
+ throw new Error('too large');
10
+ }
11
+ // integer part
12
+ mask = BigInt('0x10000000000000000');
13
+ let base = 1;
14
+ let result = 0;
15
+ for (let i = 0; i < 32; ++i) {
16
+ if ((a & mask) !== BigInt(0)) {
17
+ result += base;
18
+ }
19
+ base *= 2;
20
+ mask <<= BigInt(1);
21
+ }
22
+ // fractional part
23
+ mask = BigInt('0x8000000000000000');
24
+ base = 0.5;
25
+ for (let i = 0; i < 32; ++i) {
26
+ if ((a & mask) !== BigInt(0)) {
27
+ result += base;
28
+ }
29
+ base /= 2;
30
+ mask >>= BigInt(1);
31
+ }
32
+ return result;
33
+ }
34
+ exports.fp64ToFloat = fp64ToFloat;
35
+ function tokenToLpType(tokenType) {
36
+ return tokenType.replace('PoolToken', 'Pool');
37
+ }
38
+ exports.tokenToLpType = tokenToLpType;
39
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/thala/helpers.ts"],"names":[],"mappings":";;;AAAA,+BAA+B;AAC/B,SAAgB,WAAW,CAAC,CAAS;IACnC,qBAAqB;IACrB,IAAI,IAAI,GAAG,MAAM,CAAC,oCAAoC,CAAC,CAAC;IACxD,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE;QAC5B,MAAM,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC;KAC9B;IAED,eAAe;IACf,IAAI,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAC;IACrC,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE;QAC3B,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE;YAC5B,MAAM,IAAI,IAAI,CAAC;SAChB;QACD,IAAI,IAAI,CAAC,CAAC;QACV,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC;KACpB;IAED,kBAAkB;IAClB,IAAI,GAAG,MAAM,CAAC,oBAAoB,CAAC,CAAC;IACpC,IAAI,GAAG,GAAG,CAAC;IACX,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE;QAC3B,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE;YAC5B,MAAM,IAAI,IAAI,CAAC;SAChB;QACD,IAAI,IAAI,CAAC,CAAC;QACV,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC;KACpB;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AA9BD,kCA8BC;AAED,SAAgB,aAAa,CAAC,SAAiB;IAC7C,OAAO,SAAS,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;AAChD,CAAC;AAFD,sCAEC"}
@@ -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,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 = void 0;
7
+ const vaultsRatesJob_1 = __importDefault(require("./vaultsRatesJob"));
8
+ const lpTokensJob_1 = __importDefault(require("./lpTokensJob"));
9
+ const stakingAprJob_1 = __importDefault(require("./stakingAprJob"));
10
+ const vaultsFetcher_1 = __importDefault(require("./vaultsFetcher"));
11
+ const stabilityPoolFetcher_1 = __importDefault(require("./stabilityPoolFetcher"));
12
+ exports.jobs = [vaultsRatesJob_1.default, lpTokensJob_1.default, stakingAprJob_1.default];
13
+ exports.fetchers = [vaultsFetcher_1.default, stabilityPoolFetcher_1.default];
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/thala/index.ts"],"names":[],"mappings":";;;;;;AACA,sEAA4C;AAC5C,gEAAuC;AACvC,oEAA4C;AAC5C,oEAA4C;AAC5C,kFAAiD;AAEpC,QAAA,IAAI,GAAU,CAAC,wBAAY,EAAE,qBAAU,EAAE,uBAAa,CAAC,CAAC;AACxD,QAAA,QAAQ,GAAc,CAAC,uBAAa,EAAE,8BAAW,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Job } from '@sonarwatch/portfolio-core';
2
+ declare const job: Job;
3
+ export default job;
@@ -0,0 +1,126 @@
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 aptos_1 = require("../../utils/aptos");
19
+ const clients_1 = require("../../utils/clients");
20
+ const helpers_1 = require("./helpers");
21
+ const executor = (cache) => __awaiter(void 0, void 0, void 0, function* () {
22
+ var _a, _b, _c, _d;
23
+ const connection = (0, clients_1.getClientAptos)();
24
+ const resources = yield (0, aptos_1.getAccountResources)(connection, constants_1.programAddressLP);
25
+ if (!resources)
26
+ return;
27
+ const tokenResourcesByType = new Map();
28
+ resources.forEach((resource) => {
29
+ if (resource.type.includes(constants_1.lpStableTypePrefix) ||
30
+ resource.type.includes(constants_1.lpWeightedTypePrefix))
31
+ tokenResourcesByType.set(resource.type, resource);
32
+ });
33
+ for (let i = 0; i < resources.length; i++) {
34
+ const resource = resources[i];
35
+ const parseLpInfo = (0, aptos_1.parseTypeString)(resource.type);
36
+ if (parseLpInfo.root !== aptos_1.coinInfo)
37
+ continue;
38
+ if (!parseLpInfo.keys)
39
+ continue;
40
+ const poolInfo = (_a = parseLpInfo.keys) === null || _a === void 0 ? void 0 : _a.at(0);
41
+ if (poolInfo === undefined)
42
+ continue;
43
+ if (poolInfo.root !== constants_1.lpStableTypeTokenPrefix &&
44
+ poolInfo.root !== constants_1.lpWeightedTypeTokenPrefix) {
45
+ continue;
46
+ }
47
+ const lpInfoData = resource.data;
48
+ const lpSupplyString = (_d = (_c = (_b = lpInfoData.supply) === null || _b === void 0 ? void 0 : _b.vec[0]) === null || _c === void 0 ? void 0 : _c.integer.vec[0]) === null || _d === void 0 ? void 0 : _d.value;
49
+ if (!lpSupplyString)
50
+ continue;
51
+ const lpDecimals = lpInfoData.decimals;
52
+ const lpSupply = new bignumber_js_1.default(lpSupplyString)
53
+ .div(Math.pow(10, lpDecimals))
54
+ .toNumber();
55
+ if (lpSupply === 0)
56
+ continue;
57
+ const lpType = poolInfo.type;
58
+ const lpTokenComposition = poolInfo.keys;
59
+ if (!lpTokenComposition)
60
+ continue;
61
+ const tokenPairResource = tokenResourcesByType.get((0, helpers_1.tokenToLpType)(lpType));
62
+ if (!tokenPairResource)
63
+ continue;
64
+ const tokensValues = getTokensValuesArray(tokenPairResource.data);
65
+ const underlyings = [];
66
+ let totalReserveValue = 0;
67
+ for (let index = 0; index < lpTokenComposition.length; index++) {
68
+ const token = lpTokenComposition.at(index);
69
+ if (!token)
70
+ continue;
71
+ if (token.struct === 'Null')
72
+ break;
73
+ const tokenAddress = token.type;
74
+ if (!tokenAddress)
75
+ continue;
76
+ const tokenAmount = tokensValues[index];
77
+ if (!tokenAmount)
78
+ continue;
79
+ if (tokenAmount.isZero())
80
+ continue;
81
+ const tokenPrice = yield cache.getTokenPrice(tokenAddress, portfolio_core_1.NetworkId.aptos);
82
+ if (!tokenPrice || tokenPrice === undefined)
83
+ continue;
84
+ const reserveAmount = new bignumber_js_1.default(tokenAmount)
85
+ .div(Math.pow(10, tokenPrice.decimals))
86
+ .toNumber();
87
+ const reserveValue = reserveAmount * tokenPrice.price;
88
+ totalReserveValue += reserveValue;
89
+ underlyings.push({
90
+ networkId: portfolio_core_1.NetworkId.aptos,
91
+ address: tokenPrice.address,
92
+ decimals: tokenPrice.decimals,
93
+ price: tokenPrice.price,
94
+ amountPerLp: reserveAmount / lpSupply,
95
+ });
96
+ }
97
+ if (totalReserveValue === 0)
98
+ continue;
99
+ const price = totalReserveValue / lpSupply;
100
+ yield cache.setTokenPriceSource({
101
+ id: constants_1.platformId,
102
+ weight: 1,
103
+ address: lpType.substring(0, lpType.length - 1),
104
+ networkId: portfolio_core_1.NetworkId.aptos,
105
+ platformId: constants_1.platformId,
106
+ decimals: lpDecimals,
107
+ price,
108
+ underlyings,
109
+ timestamp: Date.now(),
110
+ });
111
+ }
112
+ });
113
+ function getTokensValuesArray(tokenPairMetadataData) {
114
+ return [
115
+ new bignumber_js_1.default(tokenPairMetadataData.asset_0.value),
116
+ new bignumber_js_1.default(tokenPairMetadataData.asset_1.value),
117
+ new bignumber_js_1.default(tokenPairMetadataData.asset_2.value),
118
+ new bignumber_js_1.default(tokenPairMetadataData.asset_3.value),
119
+ ];
120
+ }
121
+ const job = {
122
+ id: `${constants_1.platformId}-lp-tokens`,
123
+ executor,
124
+ };
125
+ exports.default = job;
126
+ //# sourceMappingURL=lpTokensJob.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lpTokensJob.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/thala/lpTokensJob.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Fetcher } from '@sonarwatch/portfolio-core';
2
+ declare const fetcher: Fetcher;
3
+ export default fetcher;
@@ -0,0 +1,81 @@
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 constants_1 = require("./constants");
14
+ const aptos_1 = require("../../utils/aptos");
15
+ const clients_1 = require("../../utils/clients");
16
+ const tokenPriceToAssetToken_1 = require("../../utils/misc/tokenPriceToAssetToken");
17
+ const executor = (owner, cache) => __awaiter(void 0, void 0, void 0, function* () {
18
+ const connection = (0, clients_1.getClientAptos)();
19
+ const stabilityPoolDepositView = yield (0, aptos_1.getView)(connection, (0, constants_1.stabilityDepositPayload)(owner));
20
+ if (!stabilityPoolDepositView || stabilityPoolDepositView.length === 0)
21
+ return [];
22
+ const claimableView = yield (0, aptos_1.getView)(connection, (0, constants_1.stabilityClaimablePayload)(owner));
23
+ const depositAmountString = stabilityPoolDepositView.at(0);
24
+ if (!depositAmountString)
25
+ return [];
26
+ const depositAmount = +depositAmountString / Math.pow(10, portfolio_core_1.aptosNetwork.native.decimals);
27
+ if (depositAmount === 0)
28
+ return [];
29
+ const depositTokenPrice = yield cache.getTokenPrice(constants_1.modCoin.toString(), portfolio_core_1.NetworkId.aptos);
30
+ const assets = (0, tokenPriceToAssetToken_1.tokenPriceToAssetToken)(constants_1.modCoin.toString(), depositAmount, portfolio_core_1.NetworkId.aptos, depositTokenPrice);
31
+ const assetsValue = !depositTokenPrice
32
+ ? null
33
+ : depositTokenPrice.price * depositAmount;
34
+ if (!claimableView || claimableView.length === 0)
35
+ return [];
36
+ const rewardsAmountString = claimableView.at(0);
37
+ if (!rewardsAmountString)
38
+ return [];
39
+ const rewardsAmount = +rewardsAmountString / Math.pow(10, portfolio_core_1.aptosNetwork.native.decimals);
40
+ const rewardsTokenPrice = yield cache.getTokenPrice(constants_1.thlCoin.toString(), portfolio_core_1.NetworkId.aptos);
41
+ const rewardAssets = (0, tokenPriceToAssetToken_1.tokenPriceToAssetToken)(constants_1.thlCoin.toString(), rewardsAmount, portfolio_core_1.NetworkId.aptos, rewardsTokenPrice);
42
+ const rewardAssetsValue = !rewardsTokenPrice
43
+ ? null
44
+ : rewardsTokenPrice.price * rewardsAmount;
45
+ const value = !rewardAssetsValue || !assetsValue ? null : rewardAssetsValue + assetsValue;
46
+ const yields = [];
47
+ const apr = yield cache.getItem('apr', { prefix: constants_1.platformId });
48
+ if (apr) {
49
+ yields.push({
50
+ apr,
51
+ apy: (0, portfolio_core_1.aprToApy)(apr),
52
+ });
53
+ }
54
+ const liquidity = {
55
+ value,
56
+ assets: [assets],
57
+ assetsValue,
58
+ rewardAssets: [rewardAssets],
59
+ rewardAssetsValue,
60
+ yields,
61
+ };
62
+ const liquidities = [liquidity];
63
+ const elementMultiple = {
64
+ networkId: portfolio_core_1.NetworkId.aptos,
65
+ platformId: 'thala',
66
+ type: portfolio_core_1.PortfolioElementType.liquidity,
67
+ label: 'Lending',
68
+ value,
69
+ data: {
70
+ liquidities,
71
+ },
72
+ };
73
+ return [elementMultiple];
74
+ });
75
+ const fetcher = {
76
+ id: `${constants_1.platformId}-stability-pool`,
77
+ networkId: portfolio_core_1.NetworkId.aptos,
78
+ executor,
79
+ };
80
+ exports.default = fetcher;
81
+ //# sourceMappingURL=stabilityPoolFetcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stabilityPoolFetcher.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/thala/stabilityPoolFetcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Job } from '@sonarwatch/portfolio-core';
2
+ declare const job: Job;
3
+ export default job;
@@ -0,0 +1,35 @@
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 constants_1 = require("./constants");
17
+ const executor = (cache) => __awaiter(void 0, void 0, void 0, function* () {
18
+ const marketsInfoRes = yield axios_1.default
19
+ .get(constants_1.stabilityEndpoint)
20
+ .catch(() => null);
21
+ if (marketsInfoRes !== null &&
22
+ marketsInfoRes.data &&
23
+ marketsInfoRes.data.data &&
24
+ marketsInfoRes.data.data.apy &&
25
+ typeof marketsInfoRes.data.data.apy === 'number')
26
+ cache.setItem('mod-apr', marketsInfoRes.data.data.apy, {
27
+ prefix: `${constants_1.platformId}-stabilityPool`,
28
+ });
29
+ });
30
+ const job = {
31
+ id: `${constants_1.platformId}-staking-apr`,
32
+ executor,
33
+ };
34
+ exports.default = job;
35
+ //# sourceMappingURL=stakingAprJob.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stakingAprJob.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/thala/stakingAprJob.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AACA,kDAA6C;AAC7C,2CAA4D;AAG5D,MAAM,QAAQ,GAAgB,CAAO,KAAY,EAAE,EAAE;IACnD,MAAM,cAAc,GAAwC,MAAM,eAAK;SACpE,GAAG,CAAC,6BAAiB,CAAC;SACtB,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IACrB,IACE,cAAc,KAAK,IAAI;QACvB,cAAc,CAAC,IAAI;QACnB,cAAc,CAAC,IAAI,CAAC,IAAI;QACxB,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;QAC5B,OAAO,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,QAAQ;QAEhD,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;YACrD,MAAM,EAAE,GAAG,sBAAU,gBAAgB;SACtC,CAAC,CAAC;AACP,CAAC,CAAA,CAAC;AAEF,MAAM,GAAG,GAAQ;IACf,EAAE,EAAE,GAAG,sBAAU,cAAc;IAC/B,QAAQ;CACT,CAAC;AACF,kBAAe,GAAG,CAAC"}
@@ -0,0 +1,78 @@
1
+ export type LiquidityInfo = {
2
+ data: {
3
+ totalStability: number;
4
+ emissionPerDay: number;
5
+ apy: number;
6
+ };
7
+ };
8
+ export type Guid = {
9
+ id: {
10
+ addr: string;
11
+ creation_num: string;
12
+ };
13
+ };
14
+ export type Event = {
15
+ counter: string;
16
+ guid: Guid;
17
+ };
18
+ export type VaultRessource = {
19
+ account_address: string;
20
+ collateral: {
21
+ value: number;
22
+ };
23
+ debt: number;
24
+ events: {
25
+ borrow_events: Event[];
26
+ deposit_events: Event[];
27
+ liquidation_events: Event[];
28
+ redemption_events: Event[];
29
+ repay_events: Event[];
30
+ withdraw_events: Event[];
31
+ };
32
+ interest: string;
33
+ last_interest_rate_index_ratio: VFloat;
34
+ };
35
+ export type VFloat = {
36
+ v: string;
37
+ };
38
+ export type VaultCollateralParamsRessource = {
39
+ collateral_frozen: boolean;
40
+ interest_annual_rate_ratio: VFloat;
41
+ interest_last_update_seconds: string;
42
+ interest_rate_index_ratio: VFloat;
43
+ liquidations_frozen: boolean;
44
+ mcr_penalty_multiplier: number;
45
+ mcr_ratio: VFloat;
46
+ mint_cap: string;
47
+ param_change_event: Event;
48
+ redemption_fee_ratio: VFloat;
49
+ redemption_mode_enabled: boolean;
50
+ };
51
+ export type LiquidswapLiquidityPoolData = {
52
+ coin_x_reserve: {
53
+ value: string;
54
+ };
55
+ coin_y_reserve: {
56
+ value: string;
57
+ };
58
+ x_scale: string;
59
+ y_scale: string;
60
+ };
61
+ export type ThalaTokenPairMetadataData = {
62
+ asset_0: {
63
+ value: string;
64
+ };
65
+ asset_1: {
66
+ value: string;
67
+ };
68
+ asset_2: {
69
+ value: string;
70
+ };
71
+ asset_3: {
72
+ value: string;
73
+ };
74
+ };
75
+ export declare enum PoolType {
76
+ WEIGHTED = 0,
77
+ STABLE = 1
78
+ }
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PoolType = void 0;
4
+ var PoolType;
5
+ (function (PoolType) {
6
+ PoolType[PoolType["WEIGHTED"] = 0] = "WEIGHTED";
7
+ PoolType[PoolType["STABLE"] = 1] = "STABLE";
8
+ })(PoolType || (exports.PoolType = PoolType = {}));
9
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/thala/types.ts"],"names":[],"mappings":";;;AAsEA,IAAY,QAGX;AAHD,WAAY,QAAQ;IAClB,+CAAQ,CAAA;IACR,2CAAM,CAAA;AACR,CAAC,EAHW,QAAQ,wBAAR,QAAQ,QAGnB"}
@@ -0,0 +1,3 @@
1
+ import { Fetcher } from '@sonarwatch/portfolio-core';
2
+ declare const fetcher: Fetcher;
3
+ export default fetcher;
@@ -0,0 +1,86 @@
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 constants_1 = require("./constants");
14
+ const clients_1 = require("../../utils/clients");
15
+ const aptos_1 = require("../../utils/aptos");
16
+ const tokenPriceToAssetToken_1 = require("../../utils/misc/tokenPriceToAssetToken");
17
+ const executor = (owner, cache) => __awaiter(void 0, void 0, void 0, function* () {
18
+ const connection = (0, clients_1.getClientAptos)();
19
+ const resources = yield (0, aptos_1.getAccountResources)(connection, owner);
20
+ if (!resources)
21
+ return [];
22
+ const borrowedAsset = constants_1.modCoin;
23
+ const borrowedTokenPrice = yield cache.getTokenPrice(borrowedAsset, portfolio_core_1.NetworkId.aptos);
24
+ if (!borrowedTokenPrice)
25
+ return [];
26
+ const elements = [];
27
+ for (let index = 0; index < resources.length; index++) {
28
+ const borrowedAssets = [];
29
+ const borrowedYields = [];
30
+ const suppliedAssets = [];
31
+ const suppliedYields = [];
32
+ const rewardAssets = [];
33
+ const resource = resources[index];
34
+ if (!resource.type.startsWith(constants_1.vaultFilter))
35
+ continue;
36
+ const vaultData = resource.data;
37
+ const vaultType = resource.type;
38
+ const suppliedAsset = (0, aptos_1.getNestedType)(vaultType);
39
+ const suppliedTokenPrice = yield cache.getTokenPrice(suppliedAsset, portfolio_core_1.NetworkId.aptos);
40
+ if (!suppliedTokenPrice || !suppliedTokenPrice.decimals)
41
+ continue;
42
+ const suppliedAmount = vaultData.collateral.value / Math.pow(10, suppliedTokenPrice.decimals);
43
+ suppliedAssets.push((0, tokenPriceToAssetToken_1.tokenPriceToAssetToken)(suppliedAsset, suppliedAmount, portfolio_core_1.NetworkId.aptos, suppliedTokenPrice));
44
+ const borrowedAmount = vaultData.debt / Math.pow(10, borrowedTokenPrice.decimals);
45
+ borrowedAssets.push((0, tokenPriceToAssetToken_1.tokenPriceToAssetToken)(borrowedAsset, borrowedAmount, portfolio_core_1.NetworkId.aptos, borrowedTokenPrice));
46
+ const { borrowedValue, collateralRatio, suppliedValue, value } = (0, portfolio_core_1.getElementLendingValues)(suppliedAssets, borrowedAssets, rewardAssets);
47
+ elements.push({
48
+ type: portfolio_core_1.PortfolioElementType.borrowlend,
49
+ networkId: portfolio_core_1.NetworkId.aptos,
50
+ platformId: constants_1.platformId,
51
+ label: 'Lending',
52
+ value,
53
+ data: {
54
+ borrowedAssets,
55
+ borrowedValue,
56
+ borrowedYields,
57
+ suppliedAssets,
58
+ suppliedValue,
59
+ suppliedYields,
60
+ collateralRatio,
61
+ rewardAssets,
62
+ value,
63
+ },
64
+ });
65
+ const borrowedAssetRate = yield cache.getItem(suppliedAsset, {
66
+ prefix: constants_1.platformId,
67
+ });
68
+ if (!borrowedAssetRate && borrowedAssetRate !== 0)
69
+ continue;
70
+ const stableBorrowedYields = [
71
+ {
72
+ apr: (0, portfolio_core_1.apyToApr)(borrowedAssetRate),
73
+ apy: borrowedAssetRate,
74
+ },
75
+ ];
76
+ borrowedYields.push(stableBorrowedYields);
77
+ }
78
+ return elements;
79
+ });
80
+ const fetcher = {
81
+ id: `${constants_1.platformId}-vaults`,
82
+ networkId: portfolio_core_1.NetworkId.aptos,
83
+ executor,
84
+ };
85
+ exports.default = fetcher;
86
+ //# sourceMappingURL=vaultsFetcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vaultsFetcher.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/thala/vaultsFetcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Job } from '@sonarwatch/portfolio-core';
2
+ declare const job: Job;
3
+ export default job;
@@ -0,0 +1,39 @@
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 constants_1 = require("./constants");
13
+ const clients_1 = require("../../utils/clients");
14
+ const helpers_1 = require("./helpers");
15
+ const aptos_1 = require("../../utils/aptos");
16
+ const executor = (cache) => __awaiter(void 0, void 0, void 0, function* () {
17
+ const connection = (0, clients_1.getClientAptos)();
18
+ const vaultsRate = yield (0, aptos_1.getAccountResources)(connection, constants_1.programAdressThala);
19
+ if (!vaultsRate)
20
+ return;
21
+ vaultsRate.forEach((resource) => {
22
+ if (!resource.type.startsWith(constants_1.vaultCollateralParamsFilter))
23
+ return;
24
+ if (!resource.data)
25
+ return;
26
+ const vaultData = resource.data;
27
+ if (!vaultData)
28
+ return;
29
+ cache.setItem((0, aptos_1.getNestedType)(resource.type), (0, helpers_1.fp64ToFloat)(BigInt(vaultData.interest_annual_rate_ratio.v)), {
30
+ prefix: `${constants_1.platformId}-vaultsRates`,
31
+ });
32
+ });
33
+ });
34
+ const job = {
35
+ id: `${constants_1.platformId}-vaults-rates`,
36
+ executor,
37
+ };
38
+ exports.default = job;
39
+ //# sourceMappingURL=vaultsRatesJob.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vaultsRatesJob.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/thala/vaultsRatesJob.ts"],"names":[],"mappings":";;;;;;;;;;;AACA,2CAIqB;AACrB,iDAAqD;AAErD,uCAAwC;AACxC,6CAAuE;AAEvE,MAAM,QAAQ,GAAgB,CAAO,KAAY,EAAE,EAAE;IACnD,MAAM,UAAU,GAAG,IAAA,wBAAc,GAAE,CAAC;IACpC,MAAM,UAAU,GAAG,MAAM,IAAA,2BAAmB,EAAC,UAAU,EAAE,8BAAkB,CAAC,CAAC;IAC7E,IAAI,CAAC,UAAU;QAAE,OAAO;IAExB,UAAU,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;QAC9B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,uCAA2B,CAAC;YAAE,OAAO;QACnE,IAAI,CAAC,QAAQ,CAAC,IAAI;YAAE,OAAO;QAC3B,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAsC,CAAC;QAClE,IAAI,CAAC,SAAS;YAAE,OAAO;QACvB,KAAK,CAAC,OAAO,CACX,IAAA,qBAAa,EAAC,QAAQ,CAAC,IAAI,CAAC,EAC5B,IAAA,qBAAW,EAAC,MAAM,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC,EAC3D;YACE,MAAM,EAAE,GAAG,sBAAU,cAAc;SACpC,CACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAA,CAAC;AAEF,MAAM,GAAG,GAAQ;IACf,EAAE,EAAE,GAAG,sBAAU,eAAe;IAChC,QAAQ;CACT,CAAC;AACF,kBAAe,GAAG,CAAC"}
@@ -1,4 +1,5 @@
1
1
  export declare const nIdsToFetch = 50;
2
+ export declare const platformId: string;
2
3
  export declare const coingeckoCoinsListUrl = "https://api.coingecko.com/api/v3/coins/list";
3
4
  export declare const coingeckoCoinsMarketsUrl = "https://api.coingecko.com/api/v3/coins/markets";
4
5
  export declare const coingeckoCoinsPriceUrl = "https://api.coingecko.com/api/v3/simple/price";
@@ -1,7 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.coingeckoCoinsPriceUrl = exports.coingeckoCoinsMarketsUrl = exports.coingeckoCoinsListUrl = exports.nIdsToFetch = void 0;
3
+ exports.coingeckoCoinsPriceUrl = exports.coingeckoCoinsMarketsUrl = exports.coingeckoCoinsListUrl = exports.platformId = exports.nIdsToFetch = void 0;
4
+ const platforms_1 = require("../../platforms");
4
5
  exports.nIdsToFetch = 50;
6
+ exports.platformId = platforms_1.walletTokensPlatform.id;
5
7
  // Coingecko URLs
6
8
  exports.coingeckoCoinsListUrl = 'https://api.coingecko.com/api/v3/coins/list';
7
9
  exports.coingeckoCoinsMarketsUrl = 'https://api.coingecko.com/api/v3/coins/markets';
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/wallet-tokens/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,WAAW,GAAG,EAAE,CAAC;AAE9B,iBAAiB;AACJ,QAAA,qBAAqB,GAChC,6CAA6C,CAAC;AACnC,QAAA,wBAAwB,GACnC,gDAAgD,CAAC;AACtC,QAAA,sBAAsB,GACjC,+CAA+C,CAAC"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/wallet-tokens/constants.ts"],"names":[],"mappings":";;;AAAA,+CAAuD;AAE1C,QAAA,WAAW,GAAG,EAAE,CAAC;AAEjB,QAAA,UAAU,GAAG,gCAAoB,CAAC,EAAE,CAAC;AAClD,iBAAiB;AACJ,QAAA,qBAAqB,GAChC,6CAA6C,CAAC;AACnC,QAAA,wBAAwB,GACnC,gDAAgD,CAAC;AACtC,QAAA,sBAAsB,GACjC,+CAA+C,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Fetcher } from '@sonarwatch/portfolio-core';
2
+ declare const fetcher: Fetcher;
3
+ export default fetcher;
@@ -0,0 +1,81 @@
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 clients_1 = require("../../../utils/clients");
19
+ const aptos_1 = require("../../../utils/aptos");
20
+ const executor = (owner, cache) => __awaiter(void 0, void 0, void 0, function* () {
21
+ var _a;
22
+ const client = (0, clients_1.getClientAptos)();
23
+ const resources = yield (0, aptos_1.getAccountResources)(client, owner);
24
+ if (!resources)
25
+ return [];
26
+ const assets = [];
27
+ for (let i = 0; i < resources.length; i++) {
28
+ const resource = resources[i];
29
+ const resourceType = resource.type;
30
+ if (!(0, aptos_1.isCoinStoreRessourceType)(resourceType))
31
+ continue;
32
+ const parseCoinType = (0, aptos_1.parseTypeString)(resource.type);
33
+ if (parseCoinType.root !== aptos_1.coinStore)
34
+ continue;
35
+ if (!parseCoinType.keys)
36
+ continue;
37
+ const coinType = (_a = parseCoinType.keys.at(0)) === null || _a === void 0 ? void 0 : _a.type;
38
+ if (coinType === undefined)
39
+ continue;
40
+ const tokenPrice = yield cache.getTokenPrice(coinType, portfolio_core_1.NetworkId.aptos);
41
+ if (!tokenPrice)
42
+ continue;
43
+ if (tokenPrice.platformId !== constants_1.platformId)
44
+ continue;
45
+ const coinStoreData = resource.data;
46
+ const amount = new bignumber_js_1.default(coinStoreData.coin.value)
47
+ .div(Math.pow(10, tokenPrice.decimals))
48
+ .toNumber();
49
+ if (amount === 0)
50
+ continue;
51
+ const price = (tokenPrice === null || tokenPrice === void 0 ? void 0 : tokenPrice.price) || null;
52
+ const value = price ? amount * price : null;
53
+ const asset = {
54
+ networkId: portfolio_core_1.NetworkId.aptos,
55
+ type: portfolio_core_1.PortfolioAssetType.token,
56
+ value,
57
+ data: { address: coinType, price, amount },
58
+ };
59
+ assets.push(asset);
60
+ }
61
+ if (assets.length === 0)
62
+ return [];
63
+ const element = {
64
+ type: portfolio_core_1.PortfolioElementType.multiple,
65
+ networkId: portfolio_core_1.NetworkId.aptos,
66
+ platformId: constants_1.platformId,
67
+ label: 'Wallet',
68
+ value: (0, portfolio_core_1.getUsdValueSum)(assets.map((a) => a.value)),
69
+ data: {
70
+ assets,
71
+ },
72
+ };
73
+ return [element];
74
+ });
75
+ const fetcher = {
76
+ id: `${constants_1.platformId}-aptos`,
77
+ networkId: portfolio_core_1.NetworkId.aptos,
78
+ executor,
79
+ };
80
+ exports.default = fetcher;
81
+ //# sourceMappingURL=aptos.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aptos.js","sourceRoot":"","sources":["../../../../../../../packages/plugins/src/plugins/wallet-tokens/fetchers/aptos.ts"],"names":[],"mappings":"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"}
@@ -37,7 +37,7 @@ function getCoingeckoSources(networkId, tokensData) {
37
37
  const source = {
38
38
  address: td.address,
39
39
  networkId,
40
- isBase: td.isBase,
40
+ platformId: td.platformId,
41
41
  decimals: td.decimals,
42
42
  price,
43
43
  timestamp: Date.now(),
@@ -93,7 +93,7 @@ function getTokensData(tokenList) {
93
93
  address: ti.address,
94
94
  coingeckoId,
95
95
  decimals: ti.decimals,
96
- isBase: true,
96
+ platformId: constants_1.platformId,
97
97
  };
98
98
  cTokensData.push(tokenData);
99
99
  return cTokensData;
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/wallet-tokens/helpers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/wallet-tokens/helpers.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,3 @@
1
- import { Job } from '@sonarwatch/portfolio-core';
1
+ import { Fetcher, Job } from '@sonarwatch/portfolio-core';
2
2
  export declare const jobs: Job[];
3
+ export declare const fetchers: Fetcher[];
@@ -3,11 +3,16 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.jobs = void 0;
6
+ exports.fetchers = exports.jobs = void 0;
7
7
  const portfolio_core_1 = require("@sonarwatch/portfolio-core");
8
8
  const platforms_1 = require("../../platforms");
9
9
  const jobExecutorGenerator_1 = __importDefault(require("./jobExecutorGenerator"));
10
+ const aptos_1 = __importDefault(require("./fetchers/aptos"));
10
11
  exports.jobs = [
12
+ {
13
+ id: `${platforms_1.walletTokensPlatform.id}-${portfolio_core_1.NetworkId.aptos}`,
14
+ executor: (0, jobExecutorGenerator_1.default)(portfolio_core_1.NetworkId.aptos),
15
+ },
11
16
  {
12
17
  id: `${platforms_1.walletTokensPlatform.id}-${portfolio_core_1.NetworkId.solana}`,
13
18
  executor: (0, jobExecutorGenerator_1.default)(portfolio_core_1.NetworkId.solana),
@@ -20,13 +25,10 @@ exports.jobs = [
20
25
  id: `${platforms_1.walletTokensPlatform.id}-${portfolio_core_1.NetworkId.avalanche}`,
21
26
  executor: (0, jobExecutorGenerator_1.default)(portfolio_core_1.NetworkId.avalanche),
22
27
  },
23
- {
24
- id: `${platforms_1.walletTokensPlatform.id}-${portfolio_core_1.NetworkId.aptos}`,
25
- executor: (0, jobExecutorGenerator_1.default)(portfolio_core_1.NetworkId.aptos),
26
- },
27
28
  {
28
29
  id: `${platforms_1.walletTokensPlatform.id}-${portfolio_core_1.NetworkId.sui}`,
29
30
  executor: (0, jobExecutorGenerator_1.default)(portfolio_core_1.NetworkId.sui),
30
31
  },
31
32
  ];
33
+ exports.fetchers = [aptos_1.default];
32
34
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/wallet-tokens/index.ts"],"names":[],"mappings":";;;;;;AAAA,+DAA4D;AAC5D,+CAAuD;AACvD,kFAA0D;AAE7C,QAAA,IAAI,GAAU;IACzB;QACE,EAAE,EAAE,GAAG,gCAAoB,CAAC,EAAE,IAAI,0BAAS,CAAC,MAAM,EAAE;QACpD,QAAQ,EAAE,IAAA,8BAAoB,EAAC,0BAAS,CAAC,MAAM,CAAC;KACjD;IACD;QACE,EAAE,EAAE,GAAG,gCAAoB,CAAC,EAAE,IAAI,0BAAS,CAAC,QAAQ,EAAE;QACtD,QAAQ,EAAE,IAAA,8BAAoB,EAAC,0BAAS,CAAC,QAAQ,CAAC;KACnD;IACD;QACE,EAAE,EAAE,GAAG,gCAAoB,CAAC,EAAE,IAAI,0BAAS,CAAC,SAAS,EAAE;QACvD,QAAQ,EAAE,IAAA,8BAAoB,EAAC,0BAAS,CAAC,SAAS,CAAC;KACpD;IACD;QACE,EAAE,EAAE,GAAG,gCAAoB,CAAC,EAAE,IAAI,0BAAS,CAAC,KAAK,EAAE;QACnD,QAAQ,EAAE,IAAA,8BAAoB,EAAC,0BAAS,CAAC,KAAK,CAAC;KAChD;IACD;QACE,EAAE,EAAE,GAAG,gCAAoB,CAAC,EAAE,IAAI,0BAAS,CAAC,GAAG,EAAE;QACjD,QAAQ,EAAE,IAAA,8BAAoB,EAAC,0BAAS,CAAC,GAAG,CAAC;KAC9C;CACF,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/wallet-tokens/index.ts"],"names":[],"mappings":";;;;;;AAAA,+DAAqE;AACrE,+CAAuD;AACvD,kFAA0D;AAC1D,6DAA4C;AAE/B,QAAA,IAAI,GAAU;IACzB;QACE,EAAE,EAAE,GAAG,gCAAoB,CAAC,EAAE,IAAI,0BAAS,CAAC,KAAK,EAAE;QACnD,QAAQ,EAAE,IAAA,8BAAoB,EAAC,0BAAS,CAAC,KAAK,CAAC;KAChD;IACD;QACE,EAAE,EAAE,GAAG,gCAAoB,CAAC,EAAE,IAAI,0BAAS,CAAC,MAAM,EAAE;QACpD,QAAQ,EAAE,IAAA,8BAAoB,EAAC,0BAAS,CAAC,MAAM,CAAC;KACjD;IACD;QACE,EAAE,EAAE,GAAG,gCAAoB,CAAC,EAAE,IAAI,0BAAS,CAAC,QAAQ,EAAE;QACtD,QAAQ,EAAE,IAAA,8BAAoB,EAAC,0BAAS,CAAC,QAAQ,CAAC;KACnD;IACD;QACE,EAAE,EAAE,GAAG,gCAAoB,CAAC,EAAE,IAAI,0BAAS,CAAC,SAAS,EAAE;QACvD,QAAQ,EAAE,IAAA,8BAAoB,EAAC,0BAAS,CAAC,SAAS,CAAC;KACpD;IACD;QACE,EAAE,EAAE,GAAG,gCAAoB,CAAC,EAAE,IAAI,0BAAS,CAAC,GAAG,EAAE;QACjD,QAAQ,EAAE,IAAA,8BAAoB,EAAC,0BAAS,CAAC,GAAG,CAAC;KAC9C;CACF,CAAC;AAEW,QAAA,QAAQ,GAAc,CAAC,eAAY,CAAC,CAAC"}
@@ -1,7 +1,7 @@
1
1
  export type TokenData = {
2
2
  address: string;
3
3
  decimals: number;
4
- isBase: boolean;
4
+ platformId: string;
5
5
  coingeckoId: string;
6
6
  };
7
7
  export type CoingeckoSimpleRes = Record<string, {
@@ -38,15 +38,20 @@ function splitKeysString(keysString) {
38
38
  if (depth === 0 && char === ',' && nextChar === ' ')
39
39
  indexes.push(i);
40
40
  }
41
+ if (indexes.length === 0)
42
+ return [keysString];
41
43
  const typeStrings = [];
42
- let cKeysString = `${keysString}`;
44
+ let cKeysString = keysString;
45
+ let sum = 0;
43
46
  for (let i = 0; i < indexes.length; i++) {
44
- const index = indexes[i];
47
+ let index = indexes[i];
48
+ index -= sum;
45
49
  typeStrings.push(cKeysString.slice(0, index));
46
50
  cKeysString = cKeysString.slice(index + 2);
47
51
  if (i === indexes.length - 1) {
48
52
  typeStrings.push(cKeysString);
49
53
  }
54
+ sum += index + 2;
50
55
  }
51
56
  return typeStrings;
52
57
  }
@@ -1 +1 @@
1
- {"version":3,"file":"parseTypeString.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/utils/aptos/parseTypeString.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parseTypeString.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/utils/aptos/parseTypeString.ts"],"names":[],"mappings":";;;AAEA,SAAS,eAAe,CAAC,UAAkB;IAIzC,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,IAAI,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACpE,MAAM,IAAI,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACxE,OAAO;QACL,IAAI;QACJ,IAAI;KACL,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,IAAY;IACnC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,IAAI,EAAE,CAAC,CAAC;IAC5E,MAAM,OAAO,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7B,MAAM,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5B,MAAM,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5B,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,IAAI,EAAE,CAAC,CAAC;IACnE,OAAO;QACL,OAAO;QACP,MAAM;QACN,MAAM;KACP,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,UAAkB;IACzC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,MAAM,OAAO,GAAG,EAAE,CAAC;IACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAC1C,MAAM,IAAI,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC9B,MAAM,QAAQ,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACtC,IAAI,IAAI,KAAK,GAAG;YAAE,KAAK,IAAI,CAAC,CAAC;QAC7B,IAAI,IAAI,KAAK,GAAG;YAAE,KAAK,IAAI,CAAC,CAAC;QAC7B,IAAI,KAAK,KAAK,CAAC,IAAI,IAAI,KAAK,GAAG,IAAI,QAAQ,KAAK,GAAG;YAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACtE;IACD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IAC9C,MAAM,WAAW,GAAG,EAAE,CAAC;IACvB,IAAI,WAAW,GAAG,UAAU,CAAC;IAC7B,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACvC,IAAI,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACvB,KAAK,IAAI,GAAG,CAAC;QACb,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;QAC9C,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QAC3C,IAAI,CAAC,KAAK,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;YAC5B,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;SAC/B;QACD,GAAG,IAAI,KAAK,GAAG,CAAC,CAAC;KAClB;IACD,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,SAAgB,eAAe,CAAC,UAAkB;IAChD,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;IAC/D,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IAE1D,IAAI,IAA4B,CAAC;IACjC,IAAI,UAAU,EAAE;QACd,MAAM,YAAY,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;QACjD,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC;KACxE;IAED,OAAO;QACL,IAAI,EAAE,UAAU;QAChB,IAAI;QACJ,OAAO;QACP,MAAM;QACN,MAAM;QACN,IAAI;KACL,CAAC;AACJ,CAAC;AAlBD,0CAkBC"}