@sonarwatch/portfolio-plugins 0.1.1 → 0.2.0

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 (116) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/package.json +3 -2
  3. package/src/generators/fetcher/generator.d.ts +4 -0
  4. package/src/generators/fetcher/generator.js +31 -0
  5. package/src/generators/fetcher/generator.js.map +1 -0
  6. package/src/generators/helpers.d.ts +1 -0
  7. package/src/generators/helpers.js +13 -0
  8. package/src/generators/helpers.js.map +1 -0
  9. package/src/generators/job/generator.d.ts +4 -0
  10. package/src/generators/job/generator.js +27 -0
  11. package/src/generators/job/generator.js.map +1 -0
  12. package/src/generators/plugin/generator.js +5 -12
  13. package/src/generators/plugin/generator.js.map +1 -1
  14. package/src/index.d.ts +2 -0
  15. package/src/index.js +11 -10
  16. package/src/index.js.map +1 -1
  17. package/src/platforms.d.ts +7 -0
  18. package/src/platforms.js +34 -0
  19. package/src/platforms.js.map +1 -0
  20. package/src/plugins/foo/ammJob.d.ts +3 -0
  21. package/src/plugins/foo/ammJob.js +17 -0
  22. package/src/plugins/foo/ammJob.js.map +1 -0
  23. package/src/plugins/foo/constants.d.ts +2 -0
  24. package/src/plugins/foo/constants.js +6 -0
  25. package/src/plugins/foo/constants.js.map +1 -0
  26. package/src/plugins/foo/index.js +9 -0
  27. package/src/plugins/foo/index.js.map +1 -0
  28. package/src/plugins/foo/positionFetcher.d.ts +3 -0
  29. package/src/plugins/foo/positionFetcher.js +38 -0
  30. package/src/plugins/foo/positionFetcher.js.map +1 -0
  31. package/src/plugins/marginfi/constants.d.ts +2 -2
  32. package/src/plugins/marginfi/constants.js +4 -3
  33. package/src/plugins/marginfi/constants.js.map +1 -1
  34. package/src/plugins/marginfi/fetcherExecutor.js +6 -7
  35. package/src/plugins/marginfi/fetcherExecutor.js.map +1 -1
  36. package/src/plugins/marginfi/jobExecutor.js +3 -4
  37. package/src/plugins/marginfi/jobExecutor.js.map +1 -1
  38. package/src/plugins/marinade/constants.d.ts +1 -1
  39. package/src/plugins/marinade/constants.js +2 -1
  40. package/src/plugins/marinade/constants.js.map +1 -1
  41. package/src/plugins/marinade/index.d.ts +1 -2
  42. package/src/plugins/marinade/index.js +3 -17
  43. package/src/plugins/marinade/index.js.map +1 -1
  44. package/src/plugins/marinade/ticketsFetcher.d.ts +3 -0
  45. package/src/plugins/marinade/{fetcherExecutor.js → ticketsFetcher.js} +10 -6
  46. package/src/plugins/marinade/ticketsFetcher.js.map +1 -0
  47. package/src/plugins/tensor/constants.d.ts +4 -0
  48. package/src/plugins/tensor/constants.js +9 -0
  49. package/src/plugins/tensor/constants.js.map +1 -0
  50. package/src/plugins/tensor/fetcherExecutor.js +89 -0
  51. package/src/plugins/tensor/fetcherExecutor.js.map +1 -0
  52. package/src/plugins/tensor/filters.d.ts +2 -0
  53. package/src/plugins/tensor/filters.js +15 -0
  54. package/src/plugins/tensor/filters.js.map +1 -0
  55. package/src/plugins/tensor/index.d.ts +2 -0
  56. package/src/plugins/{raydium → tensor}/index.js +2 -9
  57. package/src/plugins/tensor/index.js.map +1 -0
  58. package/src/plugins/tensor/struct.d.ts +13 -0
  59. package/src/plugins/tensor/struct.js +15 -0
  60. package/src/plugins/tensor/struct.js.map +1 -0
  61. package/src/plugins/{wallettokens → wallet-tokens}/constants.d.ts +1 -1
  62. package/src/plugins/{wallettokens → wallet-tokens}/constants.js +1 -1
  63. package/src/plugins/wallet-tokens/constants.js.map +1 -0
  64. package/src/plugins/wallet-tokens/helpers.d.ts +4 -0
  65. package/src/plugins/{wallettokens → wallet-tokens}/helpers.js +23 -2
  66. package/src/plugins/wallet-tokens/helpers.js.map +1 -0
  67. package/src/plugins/wallet-tokens/index.d.ts +2 -0
  68. package/src/plugins/wallet-tokens/index.js +30 -0
  69. package/src/plugins/wallet-tokens/index.js.map +1 -0
  70. package/src/plugins/wallet-tokens/jobExecutorGenerator.d.ts +2 -0
  71. package/src/plugins/wallet-tokens/jobExecutorGenerator.js +24 -0
  72. package/src/plugins/wallet-tokens/jobExecutorGenerator.js.map +1 -0
  73. package/src/plugins/wallet-tokens/types.js.map +1 -0
  74. package/src/utils/misc/getImagefromUri.d.ts +6 -0
  75. package/src/utils/misc/getImagefromUri.js +88 -0
  76. package/src/utils/misc/getImagefromUri.js.map +1 -0
  77. package/src/utils/misc/getProtocolFromUrl.d.ts +1 -0
  78. package/src/utils/misc/getProtocolFromUrl.js +12 -0
  79. package/src/utils/misc/getProtocolFromUrl.js.map +1 -0
  80. package/src/utils/misc/isHttpUrl.d.ts +1 -0
  81. package/src/utils/misc/isHttpUrl.js +10 -0
  82. package/src/utils/misc/isHttpUrl.js.map +1 -0
  83. package/src/utils/misc/isIpfsUrl.d.ts +1 -0
  84. package/src/utils/misc/isIpfsUrl.js +9 -0
  85. package/src/utils/misc/isIpfsUrl.js.map +1 -0
  86. package/src/utils/misc/runInBatch.d.ts +1 -0
  87. package/src/utils/misc/runInBatch.js +17 -0
  88. package/src/utils/misc/runInBatch.js.map +1 -0
  89. package/src/plugins/marinade/fetcherExecutor.js.map +0 -1
  90. package/src/plugins/marinade/jobExecutor.d.ts +0 -3
  91. package/src/plugins/marinade/jobExecutor.js +0 -14
  92. package/src/plugins/marinade/jobExecutor.js.map +0 -1
  93. package/src/plugins/raydium/constants.d.ts +0 -2
  94. package/src/plugins/raydium/constants.js +0 -6
  95. package/src/plugins/raydium/constants.js.map +0 -1
  96. package/src/plugins/raydium/fetcherExecutor.d.ts +0 -3
  97. package/src/plugins/raydium/fetcherExecutor.js +0 -34
  98. package/src/plugins/raydium/fetcherExecutor.js.map +0 -1
  99. package/src/plugins/raydium/index.js.map +0 -1
  100. package/src/plugins/raydium/jobExecutor.d.ts +0 -3
  101. package/src/plugins/raydium/jobExecutor.js +0 -14
  102. package/src/plugins/raydium/jobExecutor.js.map +0 -1
  103. package/src/plugins/wallettokens/constants.js.map +0 -1
  104. package/src/plugins/wallettokens/helpers.d.ts +0 -3
  105. package/src/plugins/wallettokens/helpers.js.map +0 -1
  106. package/src/plugins/wallettokens/index.d.ts +0 -3
  107. package/src/plugins/wallettokens/index.js +0 -13
  108. package/src/plugins/wallettokens/index.js.map +0 -1
  109. package/src/plugins/wallettokens/jobExecutors/solana.d.ts +0 -3
  110. package/src/plugins/wallettokens/jobExecutors/solana.js +0 -36
  111. package/src/plugins/wallettokens/jobExecutors/solana.js.map +0 -1
  112. package/src/plugins/wallettokens/types.js.map +0 -1
  113. /package/src/plugins/{raydium → foo}/index.d.ts +0 -0
  114. /package/src/plugins/{marinade → tensor}/fetcherExecutor.d.ts +0 -0
  115. /package/src/plugins/{wallettokens → wallet-tokens}/types.d.ts +0 -0
  116. /package/src/plugins/{wallettokens → wallet-tokens}/types.js +0 -0
@@ -7,17 +7,16 @@ const constants_1 = require("./constants");
7
7
  const structs_1 = require("./structs");
8
8
  const filters_1 = require("./filters");
9
9
  const clients_1 = require("../../utils/clients");
10
- const fetcherExecutor = (owner, context) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
10
+ const executor = (owner, cache) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
11
11
  const connection = (0, clients_1.getClientSolana)();
12
12
  const tickets = yield (0, solana_1.getParsedProgramAccounts)(connection, structs_1.ticketStruct, constants_1.marinadeTicketProgramId, (0, filters_1.ticketFilters)(owner));
13
13
  if (tickets.length === 0)
14
14
  return [];
15
15
  const assets = [];
16
- const { tokenPriceCache } = context;
17
16
  for (let i = 0; i < tickets.length; i += 1) {
18
17
  const ticket = tickets[i];
19
18
  const amount = ticket.lamportsAmount.div(constants_1.solFactor).toNumber();
20
- const tokenPrice = yield tokenPriceCache.get(portfolio_core_1.solanaNativeAddress, portfolio_core_1.NetworkId.solana);
19
+ const tokenPrice = yield cache.getTokenPrice(portfolio_core_1.solanaNativeAddress, portfolio_core_1.NetworkId.solana);
21
20
  const price = tokenPrice ? tokenPrice.price : null;
22
21
  const value = price ? price * amount : null;
23
22
  const asset = {
@@ -39,12 +38,17 @@ const fetcherExecutor = (owner, context) => tslib_1.__awaiter(void 0, void 0, vo
39
38
  networkId: portfolio_core_1.NetworkId.solana,
40
39
  platformId: constants_1.platformId,
41
40
  label: 'Rewards',
42
- value: null,
41
+ value: (0, portfolio_core_1.getUsdValueSumStrict)(assets.map((a) => a.value)),
43
42
  data: {
44
43
  assets,
45
44
  },
46
45
  };
47
46
  return [element];
48
47
  });
49
- exports.default = fetcherExecutor;
50
- //# sourceMappingURL=fetcherExecutor.js.map
48
+ const fetcher = {
49
+ id: `${constants_1.platformId}-tickets`,
50
+ networkId: portfolio_core_1.NetworkId.solana,
51
+ executor,
52
+ };
53
+ exports.default = fetcher;
54
+ //# sourceMappingURL=ticketsFetcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ticketsFetcher.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/marinade/ticketsFetcher.ts"],"names":[],"mappings":";;;AAAA,+DAYoC;AACpC,+CAA8D;AAC9D,2CAA6E;AAC7E,uCAAyC;AACzC,uCAA0C;AAC1C,iDAAsD;AAEtD,MAAM,QAAQ,GAAoB,CAAO,KAAa,EAAE,KAAY,EAAE,EAAE;IACtE,MAAM,UAAU,GAAG,IAAA,yBAAe,GAAE,CAAC;IACrC,MAAM,OAAO,GAAG,MAAM,IAAA,iCAAwB,EAC5C,UAAU,EACV,sBAAY,EACZ,mCAAuB,EACvB,IAAA,uBAAa,EAAC,KAAK,CAAC,CACrB,CAAC;IACF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEpC,MAAM,MAAM,GAAqB,EAAE,CAAC;IACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;QAC1C,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAC1B,MAAM,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,qBAAS,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC/D,MAAM,UAAU,GAAG,MAAM,KAAK,CAAC,aAAa,CAC1C,oCAAmB,EACnB,0BAAS,CAAC,MAAM,CACjB,CAAC;QACF,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;QACnD,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;QAE5C,MAAM,KAAK,GAAwB;YACjC,IAAI,EAAE,mCAAkB,CAAC,KAAK;YAC9B,SAAS,EAAE,0BAAS,CAAC,MAAM;YAC3B,KAAK;YACL,IAAI,EAAE;gBACJ,OAAO,EAAE,oCAAmB;gBAC5B,KAAK;gBACL,MAAM;aACP;SACF,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACpB;IACD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEnC,MAAM,OAAO,GAA6B;QACxC,IAAI,EAAE,qCAAoB,CAAC,QAAQ;QACnC,SAAS,EAAE,0BAAS,CAAC,MAAM;QAC3B,UAAU,EAAV,sBAAU;QACV,KAAK,EAAE,SAAS;QAChB,KAAK,EAAE,IAAA,qCAAoB,EAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACvD,IAAI,EAAE;YACJ,MAAM;SACP;KACF,CAAC;IACF,OAAO,CAAC,OAAO,CAAC,CAAC;AACnB,CAAC,CAAA,CAAC;AAEF,MAAM,OAAO,GAAY;IACvB,EAAE,EAAE,GAAG,sBAAU,UAAU;IAC3B,SAAS,EAAE,0BAAS,CAAC,MAAM;IAC3B,QAAQ;CACT,CAAC;AAEF,kBAAe,OAAO,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { PublicKey } from '@solana/web3.js';
2
+ export declare const cachePrefix = "tensor";
3
+ export declare const platformId: string;
4
+ export declare const tensorProgram: PublicKey;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.tensorProgram = exports.platformId = exports.cachePrefix = void 0;
4
+ const web3_js_1 = require("@solana/web3.js");
5
+ const platforms_1 = require("../../platforms");
6
+ exports.cachePrefix = 'tensor';
7
+ exports.platformId = platforms_1.tensorPlatform.id;
8
+ exports.tensorProgram = new web3_js_1.PublicKey('TSWAPaqyCSx2KABk68Shruf4rp7CxcNi8hAsbdwmHbN');
9
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +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"}
@@ -0,0 +1,89 @@
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 js_1 = require("@metaplex-foundation/js");
6
+ const bignumber_js_1 = tslib_1.__importDefault(require("bignumber.js"));
7
+ const constants_1 = require("./constants");
8
+ const solana_1 = require("../../utils/solana");
9
+ const clients_1 = require("../../utils/clients");
10
+ const struct_1 = require("./struct");
11
+ const filters_1 = require("./filters");
12
+ const getImagefromUri_1 = require("../../utils/misc/getImagefromUri");
13
+ const fetcherExecutor = (owner, cache) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
14
+ const connection = (0, clients_1.getClientSolana)();
15
+ const metaplex = new js_1.Metaplex(connection);
16
+ const singleListings = yield (0, solana_1.getParsedProgramAccounts)(connection, struct_1.singleListingStruct, constants_1.tensorProgram, (0, filters_1.singleListingFilter)(owner));
17
+ if (!singleListings)
18
+ return [];
19
+ const mints = [];
20
+ singleListings.forEach((listing) => {
21
+ mints.push(listing.nftMint);
22
+ });
23
+ const nftsMetadata = yield metaplex.nfts().findAllByMintList({
24
+ mints,
25
+ });
26
+ if (!nftsMetadata)
27
+ return [];
28
+ const promises = nftsMetadata.map((nftMetadata) => {
29
+ if (!(nftMetadata === null || nftMetadata === void 0 ? void 0 : nftMetadata.uri))
30
+ return undefined;
31
+ return (0, getImagefromUri_1.getImagefromUri)(nftMetadata === null || nftMetadata === void 0 ? void 0 : nftMetadata.uri, portfolio_core_1.NetworkId.solana, cache);
32
+ });
33
+ const imageResults = yield Promise.allSettled(promises);
34
+ const assets = [];
35
+ nftsMetadata.forEach((nftMetadata, i) => {
36
+ if (!nftMetadata)
37
+ return;
38
+ const imageResult = imageResults[i];
39
+ const image = imageResult.status === 'fulfilled' ? imageResult.value : undefined;
40
+ const address = nftMetadata.model === 'metadata'
41
+ ? nftMetadata.mintAddress.toString()
42
+ : nftMetadata.mint.address.toString();
43
+ const token = (0, js_1.isNftWithToken)(nftMetadata) || (0, js_1.isSftWithToken)(nftMetadata)
44
+ ? nftMetadata.token
45
+ : null;
46
+ const amount = (token === null || token === void 0 ? void 0 : token.amount)
47
+ ? new bignumber_js_1.default(token.amount.basisPoints.toString())
48
+ .div(Math.pow(10, token.amount.currency.decimals))
49
+ .toNumber()
50
+ : 1;
51
+ const collection = nftMetadata.collection
52
+ ? {
53
+ floorPrice: null,
54
+ id: nftMetadata.collection.address.toString(),
55
+ }
56
+ : undefined;
57
+ const asset = {
58
+ type: portfolio_core_1.PortfolioAssetType.collectible,
59
+ networkId: portfolio_core_1.NetworkId.solana,
60
+ value: null,
61
+ data: {
62
+ address,
63
+ amount,
64
+ price: null,
65
+ name: nftMetadata.name,
66
+ dataUri: nftMetadata.uri,
67
+ imageUri: image,
68
+ collection,
69
+ },
70
+ };
71
+ assets.push(asset);
72
+ });
73
+ if (assets.length === 0)
74
+ return [];
75
+ const element = {
76
+ type: portfolio_core_1.PortfolioElementType.multiple,
77
+ networkId: portfolio_core_1.NetworkId.solana,
78
+ platformId: constants_1.platformId,
79
+ label: 'Wallet',
80
+ tags: ['Single listing'],
81
+ value: null,
82
+ data: {
83
+ assets,
84
+ },
85
+ };
86
+ return [element];
87
+ });
88
+ exports.default = fetcherExecutor;
89
+ //# sourceMappingURL=fetcherExecutor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetcherExecutor.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/tensor/fetcherExecutor.ts"],"names":[],"mappings":";;;AAAA,+DAQoC;AACpC,gDAMiC;AACjC,wEAAqC;AACrC,2CAAwD;AACxD,+CAA8D;AAC9D,iDAAsD;AACtD,qCAA+C;AAC/C,uCAAgD;AAChD,sEAAmE;AAEnE,MAAM,eAAe,GAAoB,CACvC,KAAa,EACb,KAAY,EACZ,EAAE;IACF,MAAM,UAAU,GAAG,IAAA,yBAAe,GAAE,CAAC;IACrC,MAAM,QAAQ,GAAG,IAAI,aAAQ,CAAC,UAAU,CAAC,CAAC;IAC1C,MAAM,cAAc,GAAG,MAAM,IAAA,iCAAwB,EACnD,UAAU,EACV,4BAAmB,EACnB,yBAAa,EACb,IAAA,6BAAmB,EAAC,KAAK,CAAC,CAC3B,CAAC;IACF,IAAI,CAAC,cAAc;QAAE,OAAO,EAAE,CAAC;IAC/B,MAAM,KAAK,GAAgB,EAAE,CAAC;IAC9B,cAAc,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QACjC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,iBAAiB,CAAC;QAC3D,KAAK;KACN,CAAC,CAAC;IACH,IAAI,CAAC,YAAY;QAAE,OAAO,EAAE,CAAC;IAE7B,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE;QAChD,IAAI,CAAC,CAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,GAAG,CAAA;YAAE,OAAO,SAAS,CAAC;QACxC,OAAO,IAAA,iCAAe,EAAC,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,GAAG,EAAE,0BAAS,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IACxD,MAAM,MAAM,GAAqB,EAAE,CAAC;IAEpC,YAAY,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,EAAE,EAAE;QACtC,IAAI,CAAC,WAAW;YAAE,OAAO;QACzB,MAAM,WAAW,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QACpC,MAAM,KAAK,GACT,WAAW,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;QAErE,MAAM,OAAO,GACX,WAAW,CAAC,KAAK,KAAK,UAAU;YAC9B,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,QAAQ,EAAE;YACpC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;QAE1C,MAAM,KAAK,GACT,IAAA,mBAAc,EAAC,WAAW,CAAC,IAAI,IAAA,mBAAc,EAAC,WAAW,CAAC;YACxD,CAAC,CAAC,WAAW,CAAC,KAAK;YACnB,CAAC,CAAC,IAAI,CAAC;QACX,MAAM,MAAM,GAAG,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM;YAC1B,CAAC,CAAC,IAAI,sBAAS,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;iBAC/C,GAAG,CAAC,SAAA,EAAE,EAAI,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAA,CAAC;iBACzC,QAAQ,EAAE;YACf,CAAC,CAAC,CAAC,CAAC;QACN,MAAM,UAAU,GAAG,WAAW,CAAC,UAAU;YACvC,CAAC,CAAC;gBACE,UAAU,EAAE,IAAI;gBAChB,EAAE,EAAE,WAAW,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,EAAE;aAC9C;YACH,CAAC,CAAC,SAAS,CAAC;QACd,MAAM,KAAK,GAAmB;YAC5B,IAAI,EAAE,mCAAkB,CAAC,WAAW;YACpC,SAAS,EAAE,0BAAS,CAAC,MAAM;YAC3B,KAAK,EAAE,IAAI;YACX,IAAI,EAAE;gBACJ,OAAO;gBACP,MAAM;gBACN,KAAK,EAAE,IAAI;gBACX,IAAI,EAAE,WAAW,CAAC,IAAI;gBACtB,OAAO,EAAE,WAAW,CAAC,GAAG;gBACxB,QAAQ,EAAE,KAAK;gBACf,UAAU;aACX;SACF,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACnC,MAAM,OAAO,GAA6B;QACxC,IAAI,EAAE,qCAAoB,CAAC,QAAQ;QACnC,SAAS,EAAE,0BAAS,CAAC,MAAM;QAC3B,UAAU,EAAV,sBAAU;QACV,KAAK,EAAE,QAAQ;QACf,IAAI,EAAE,CAAC,gBAAgB,CAAC;QACxB,KAAK,EAAE,IAAI;QACX,IAAI,EAAE;YACJ,MAAM;SACP;KACF,CAAC;IACF,OAAO,CAAC,OAAO,CAAC,CAAC;AACnB,CAAC,CAAA,CAAC;AACF,kBAAe,eAAe,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { GetProgramAccountsFilter } from '@solana/web3.js';
2
+ export declare const singleListingFilter: (owner: string) => GetProgramAccountsFilter[];
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.singleListingFilter = void 0;
4
+ const struct_1 = require("./struct");
5
+ const singleListingFilter = (owner) => [
6
+ { dataSize: struct_1.singleListingStruct.byteSize },
7
+ {
8
+ memcmp: {
9
+ bytes: owner,
10
+ offset: 8,
11
+ },
12
+ },
13
+ ];
14
+ exports.singleListingFilter = singleListingFilter;
15
+ //# sourceMappingURL=filters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filters.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/tensor/filters.ts"],"names":[],"mappings":";;;AACA,qCAA+C;AAExC,MAAM,mBAAmB,GAAG,CACjC,KAAa,EACe,EAAE,CAAC;IAC/B,EAAE,QAAQ,EAAE,4BAAmB,CAAC,QAAQ,EAAE;IAC1C;QACE,MAAM,EAAE;YACN,KAAK,EAAE,KAAK;YACZ,MAAM,EAAE,CAAC;SACV;KACF;CACF,CAAC;AAVW,QAAA,mBAAmB,uBAU9B"}
@@ -0,0 +1,2 @@
1
+ import { Fetcher } from '@sonarwatch/portfolio-core';
2
+ export declare const fetchers: Fetcher[];
@@ -1,19 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.fetchers = exports.jobs = void 0;
3
+ exports.fetchers = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const portfolio_core_1 = require("@sonarwatch/portfolio-core");
6
- const jobExecutor_1 = tslib_1.__importDefault(require("./jobExecutor"));
7
6
  const fetcherExecutor_1 = tslib_1.__importDefault(require("./fetcherExecutor"));
8
- exports.jobs = [
9
- {
10
- id: 'raydium',
11
- executor: jobExecutor_1.default,
12
- },
13
- ];
14
7
  exports.fetchers = [
15
8
  {
16
- id: 'raydium',
9
+ id: 'tensor',
17
10
  networkId: portfolio_core_1.NetworkId.solana,
18
11
  executor: fetcherExecutor_1.default,
19
12
  },
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/tensor/index.ts"],"names":[],"mappings":";;;;AAAA,+DAAgE;AAChE,gFAAgD;AAEnC,QAAA,QAAQ,GAAc;IACjC;QACE,EAAE,EAAE,QAAQ;QACZ,SAAS,EAAE,0BAAS,CAAC,MAAM;QAC3B,QAAQ,EAAE,yBAAe;KAC1B;CACF,CAAC"}
@@ -0,0 +1,13 @@
1
+ /// <reference types="node" />
2
+ import { BeetStruct } from '@metaplex-foundation/beet';
3
+ import { PublicKey } from '@solana/web3.js';
4
+ import BigNumber from 'bignumber.js';
5
+ export type SingleListing = {
6
+ padding: Buffer;
7
+ owner: PublicKey;
8
+ nftMint: PublicKey;
9
+ price: BigNumber;
10
+ bump: number[];
11
+ reserved: number[];
12
+ };
13
+ export declare const singleListingStruct: BeetStruct<SingleListing, Partial<SingleListing>>;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.singleListingStruct = void 0;
4
+ const beet_1 = require("@metaplex-foundation/beet");
5
+ const beet_solana_1 = require("@metaplex-foundation/beet-solana");
6
+ const solana_1 = require("../../utils/solana");
7
+ exports.singleListingStruct = new beet_1.BeetStruct([
8
+ ['padding', (0, solana_1.blob)(8)],
9
+ ['owner', beet_solana_1.publicKey],
10
+ ['nftMint', beet_solana_1.publicKey],
11
+ ['price', solana_1.u64],
12
+ ['bump', (0, beet_1.uniformFixedSizeArray)(beet_1.u8, 1)],
13
+ ['reserved', (0, beet_1.uniformFixedSizeArray)(beet_1.u8, 64)],
14
+ ], (args) => args);
15
+ //# sourceMappingURL=struct.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"struct.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/tensor/struct.ts"],"names":[],"mappings":";;;AAAA,oDAImC;AACnC,kEAA6D;AAG7D,+CAA+C;AAWlC,QAAA,mBAAmB,GAAG,IAAI,iBAAU,CAC/C;IACE,CAAC,SAAS,EAAE,IAAA,aAAI,EAAC,CAAC,CAAC,CAAC;IACpB,CAAC,OAAO,EAAE,uBAAS,CAAC;IACpB,CAAC,SAAS,EAAE,uBAAS,CAAC;IACtB,CAAC,OAAO,EAAE,YAAG,CAAC;IACd,CAAC,MAAM,EAAE,IAAA,4BAAqB,EAAC,SAAE,EAAE,CAAC,CAAC,CAAC;IACtC,CAAC,UAAU,EAAE,IAAA,4BAAqB,EAAC,SAAE,EAAE,EAAE,CAAC,CAAC;CAC5C,EACD,CAAC,IAAI,EAAE,EAAE,CAAC,IAAqB,CAChC,CAAC"}
@@ -1,4 +1,4 @@
1
- export declare const nIdsToFetch = 10;
1
+ export declare const nIdsToFetch = 50;
2
2
  export declare const coingeckoCoinsListUrl = "https://api.coingecko.com/api/v3/coins/list";
3
3
  export declare const coingeckoCoinsMarketsUrl = "https://api.coingecko.com/api/v3/coins/markets";
4
4
  export declare const coingeckoCoinsPriceUrl = "https://api.coingecko.com/api/v3/simple/price";
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.coingeckoCoinsPriceUrl = exports.coingeckoCoinsMarketsUrl = exports.coingeckoCoinsListUrl = exports.nIdsToFetch = void 0;
4
- exports.nIdsToFetch = 10;
4
+ exports.nIdsToFetch = 50;
5
5
  // Coingecko URLs
6
6
  exports.coingeckoCoinsListUrl = 'https://api.coingecko.com/api/v3/coins/list';
7
7
  exports.coingeckoCoinsMarketsUrl = 'https://api.coingecko.com/api/v3/coins/markets';
@@ -0,0 +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"}
@@ -0,0 +1,4 @@
1
+ import { NetworkIdType, TokenPriceSource, UniTokenList } from '@sonarwatch/portfolio-core';
2
+ import { TokenData } from './types';
3
+ export declare function getCoingeckoSources(networkId: NetworkIdType, tokensData: TokenData[]): Promise<TokenPriceSource[]>;
4
+ export declare function getTokensData(tokenList: UniTokenList): Promise<TokenData[]>;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getCoingeckoSources = void 0;
3
+ exports.getTokensData = exports.getCoingeckoSources = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const axios_1 = tslib_1.__importDefault(require("axios"));
6
6
  const constants_1 = require("./constants");
@@ -65,9 +65,30 @@ function getPricesFromCoingeckoIds(coingeckoIds) {
65
65
  continue;
66
66
  priceByCoingeckoId.set(id, usd);
67
67
  }
68
- yield (0, sleep_1.default)(5000);
68
+ yield (0, sleep_1.default)(10000);
69
69
  }
70
70
  return priceByCoingeckoId;
71
71
  });
72
72
  }
73
+ function getTokensData(tokenList) {
74
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
75
+ const tokensData = tokenList.tokens.reduce((cTokensData, ti) => {
76
+ if (!ti.extensions)
77
+ return cTokensData;
78
+ const { coingeckoId } = ti.extensions;
79
+ if (typeof coingeckoId !== 'string')
80
+ return cTokensData;
81
+ const tokenData = {
82
+ address: ti.address,
83
+ coingeckoId,
84
+ decimals: ti.decimals,
85
+ isBase: true,
86
+ };
87
+ cTokensData.push(tokenData);
88
+ return cTokensData;
89
+ }, []);
90
+ return tokensData;
91
+ });
92
+ }
93
+ exports.getTokensData = getTokensData;
73
94
  //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/wallet-tokens/helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { Job } from '@sonarwatch/portfolio-core';
2
+ export declare const jobs: Job[];
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.jobs = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const portfolio_core_1 = require("@sonarwatch/portfolio-core");
6
+ const platforms_1 = require("../../platforms");
7
+ const jobExecutorGenerator_1 = tslib_1.__importDefault(require("./jobExecutorGenerator"));
8
+ exports.jobs = [
9
+ {
10
+ id: `${platforms_1.walletTokensPlatform.id}-${portfolio_core_1.NetworkId.solana}`,
11
+ executor: (0, jobExecutorGenerator_1.default)(portfolio_core_1.NetworkId.solana),
12
+ },
13
+ {
14
+ id: `${platforms_1.walletTokensPlatform.id}-${portfolio_core_1.NetworkId.ethereum}`,
15
+ executor: (0, jobExecutorGenerator_1.default)(portfolio_core_1.NetworkId.ethereum),
16
+ },
17
+ {
18
+ id: `${platforms_1.walletTokensPlatform.id}-${portfolio_core_1.NetworkId.avalanche}`,
19
+ executor: (0, jobExecutorGenerator_1.default)(portfolio_core_1.NetworkId.avalanche),
20
+ },
21
+ {
22
+ id: `${platforms_1.walletTokensPlatform.id}-${portfolio_core_1.NetworkId.aptos}`,
23
+ executor: (0, jobExecutorGenerator_1.default)(portfolio_core_1.NetworkId.aptos),
24
+ },
25
+ {
26
+ id: `${platforms_1.walletTokensPlatform.id}-${portfolio_core_1.NetworkId.sui}`,
27
+ executor: (0, jobExecutorGenerator_1.default)(portfolio_core_1.NetworkId.sui),
28
+ },
29
+ ];
30
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/wallet-tokens/index.ts"],"names":[],"mappings":";;;;AAAA,+DAA4D;AAC5D,+CAAuD;AACvD,0FAA0D;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"}
@@ -0,0 +1,2 @@
1
+ import { JobExecutor, NetworkIdType } from '@sonarwatch/portfolio-core';
2
+ export default function jobExecutorGenerator(networkId: NetworkIdType): 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 axios_1 = tslib_1.__importDefault(require("axios"));
6
+ const helpers_1 = require("./helpers");
7
+ function jobExecutorGenerator(networkId) {
8
+ const network = portfolio_core_1.networks[networkId];
9
+ return (cache) => tslib_1.__awaiter(this, void 0, void 0, function* () {
10
+ const tokenListResponse = yield axios_1.default
11
+ .get(network.tokenListUrl)
12
+ .catch(() => null);
13
+ if (!tokenListResponse)
14
+ return;
15
+ const tokensData = yield (0, helpers_1.getTokensData)(tokenListResponse.data);
16
+ const sources = yield (0, helpers_1.getCoingeckoSources)(networkId, tokensData);
17
+ for (let i = 0; i < sources.length; i += 1) {
18
+ const source = sources[i];
19
+ yield cache.setTokenPriceSource(source);
20
+ }
21
+ });
22
+ }
23
+ exports.default = jobExecutorGenerator;
24
+ //# sourceMappingURL=jobExecutorGenerator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jobExecutorGenerator.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/wallet-tokens/jobExecutorGenerator.ts"],"names":[],"mappings":";;;AAAA,+DAMoC;AACpC,0DAA6C;AAC7C,uCAA+D;AAE/D,SAAwB,oBAAoB,CAC1C,SAAwB;IAExB,MAAM,OAAO,GAAG,yBAAQ,CAAC,SAAS,CAAC,CAAC;IACpC,OAAO,CAAO,KAAY,EAAE,EAAE;QAC5B,MAAM,iBAAiB,GAAuC,MAAM,eAAK;aACtE,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC;aACzB,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QACrB,IAAI,CAAC,iBAAiB;YAAE,OAAO;QAE/B,MAAM,UAAU,GAAG,MAAM,IAAA,uBAAa,EAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAC/D,MAAM,OAAO,GAAG,MAAM,IAAA,6BAAmB,EAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QACjE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;YAC1C,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YAC1B,MAAM,KAAK,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;SACzC;IACH,CAAC,CAAA,CAAC;AACJ,CAAC;AAjBD,uCAiBC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/wallet-tokens/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,6 @@
1
+ import { Cache, NetworkIdType } from '@sonarwatch/portfolio-core';
2
+ export declare const nftImagesUndefinedValue = "undefined";
3
+ export declare function getImagefromUri(uri: string | undefined, networkId: NetworkIdType, cache: Cache): Promise<string | undefined>;
4
+ export declare const imageExtensions: string[];
5
+ export declare function getImagefromHttpUrl(url: string): Promise<string | undefined>;
6
+ export declare function getImagefromIpfsUrl(url: string): Promise<string | undefined>;
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getImagefromIpfsUrl = exports.getImagefromHttpUrl = exports.imageExtensions = exports.getImagefromUri = exports.nftImagesUndefinedValue = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const axios_1 = tslib_1.__importDefault(require("axios"));
6
+ const isHttpUrl_1 = tslib_1.__importDefault(require("./isHttpUrl"));
7
+ const isIpfsUrl_1 = tslib_1.__importDefault(require("./isIpfsUrl"));
8
+ const nftImagesMaxLength = 2000;
9
+ const prefix = 'nftimage';
10
+ exports.nftImagesUndefinedValue = 'undefined';
11
+ function getImagefromUri(uri, networkId, cache) {
12
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
13
+ if (!uri || uri.length > nftImagesMaxLength)
14
+ return undefined;
15
+ const cachedImage = yield cache.getItem(uri, {
16
+ prefix,
17
+ networkId,
18
+ });
19
+ if (cachedImage) {
20
+ return cachedImage === exports.nftImagesUndefinedValue ? undefined : cachedImage;
21
+ }
22
+ let image;
23
+ if ((0, isHttpUrl_1.default)(uri))
24
+ image = yield getImagefromHttpUrl(uri);
25
+ if ((0, isIpfsUrl_1.default)(uri))
26
+ image = yield getImagefromIpfsUrl(uri);
27
+ if (image && image.length > nftImagesMaxLength)
28
+ image = undefined;
29
+ cache.setItem(uri, image || exports.nftImagesUndefinedValue, {
30
+ prefix,
31
+ networkId,
32
+ });
33
+ return image;
34
+ });
35
+ }
36
+ exports.getImagefromUri = getImagefromUri;
37
+ exports.imageExtensions = [
38
+ '.png',
39
+ '.jpg',
40
+ '.jpeg',
41
+ '.svg',
42
+ '.gif',
43
+ '.webp',
44
+ ];
45
+ function stringEndsWithImageExtension(string) {
46
+ const fString = string.toLocaleLowerCase();
47
+ return exports.imageExtensions.some((imageExtension) => fString.endsWith(imageExtension));
48
+ }
49
+ function getImagefromHttpUrl(url) {
50
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
51
+ const uriIsHttpUrl = (0, isHttpUrl_1.default)(url);
52
+ if (!uriIsHttpUrl)
53
+ return undefined;
54
+ if (stringEndsWithImageExtension(url))
55
+ return url;
56
+ const res = yield axios_1.default.head(url, {
57
+ timeout: 5000,
58
+ });
59
+ const contentType = res.headers['content-type'] || res.headers['Content-Type'] || undefined;
60
+ const isContentTypeImage = contentType === null || contentType === void 0 ? void 0 : contentType.startsWith('image');
61
+ if (isContentTypeImage)
62
+ return url;
63
+ const contentIsJson = (contentType === null || contentType === void 0 ? void 0 : contentType.startsWith('application/json')) ||
64
+ (contentType === null || contentType === void 0 ? void 0 : contentType.startsWith('text/plain'));
65
+ if (!contentIsJson)
66
+ return undefined;
67
+ const res2 = yield axios_1.default.get(url, {
68
+ timeout: 5000,
69
+ });
70
+ const dataImage = res2.data.image;
71
+ if (typeof dataImage === 'string')
72
+ return dataImage;
73
+ return undefined;
74
+ });
75
+ }
76
+ exports.getImagefromHttpUrl = getImagefromHttpUrl;
77
+ const ipfsProtocolLenght = 'ipfs:'.length;
78
+ function getImagefromIpfsUrl(url) {
79
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
80
+ const uriIsIpfsUrl = (0, isIpfsUrl_1.default)(url);
81
+ if (!uriIsIpfsUrl)
82
+ return undefined;
83
+ const httpUrl = `https://cf-ipfs.com/ipfs/${url.substring(ipfsProtocolLenght)}`;
84
+ return getImagefromHttpUrl(httpUrl);
85
+ });
86
+ }
87
+ exports.getImagefromIpfsUrl = getImagefromIpfsUrl;
88
+ //# sourceMappingURL=getImagefromUri.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getImagefromUri.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/utils/misc/getImagefromUri.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export default function getProtocolFromUrl(url: string): string | null;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ function getProtocolFromUrl(url) {
4
+ try {
5
+ return new URL(url).protocol;
6
+ }
7
+ catch (error) {
8
+ return null;
9
+ }
10
+ }
11
+ exports.default = getProtocolFromUrl;
12
+ //# sourceMappingURL=getProtocolFromUrl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getProtocolFromUrl.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/utils/misc/getProtocolFromUrl.ts"],"names":[],"mappings":";;AAAA,SAAwB,kBAAkB,CAAC,GAAW;IACpD,IAAI;QACF,OAAO,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;KAC9B;IAAC,OAAO,KAAK,EAAE;QACd,OAAO,IAAI,CAAC;KACb;AACH,CAAC;AAND,qCAMC"}
@@ -0,0 +1 @@
1
+ export default function isHttpUrl(url: string): boolean;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const getProtocolFromUrl_1 = tslib_1.__importDefault(require("./getProtocolFromUrl"));
5
+ function isHttpUrl(url) {
6
+ const protocol = (0, getProtocolFromUrl_1.default)(url);
7
+ return protocol === 'http:' || protocol === 'https:';
8
+ }
9
+ exports.default = isHttpUrl;
10
+ //# sourceMappingURL=isHttpUrl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isHttpUrl.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/utils/misc/isHttpUrl.ts"],"names":[],"mappings":";;;AAAA,sFAAsD;AAEtD,SAAwB,SAAS,CAAC,GAAW;IAC3C,MAAM,QAAQ,GAAG,IAAA,4BAAkB,EAAC,GAAG,CAAC,CAAC;IACzC,OAAO,QAAQ,KAAK,OAAO,IAAI,QAAQ,KAAK,QAAQ,CAAC;AACvD,CAAC;AAHD,4BAGC"}
@@ -0,0 +1 @@
1
+ export default function isIpfsUrl(url: string): boolean;
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ const getProtocolFromUrl_1 = tslib_1.__importDefault(require("./getProtocolFromUrl"));
5
+ function isIpfsUrl(url) {
6
+ return (0, getProtocolFromUrl_1.default)(url) === 'ipfs:';
7
+ }
8
+ exports.default = isIpfsUrl;
9
+ //# sourceMappingURL=isIpfsUrl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"isIpfsUrl.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/utils/misc/isIpfsUrl.ts"],"names":[],"mappings":";;;AAAA,sFAAsD;AAEtD,SAAwB,SAAS,CAAC,GAAW;IAC3C,OAAO,IAAA,4BAAkB,EAAC,GAAG,CAAC,KAAK,OAAO,CAAC;AAC7C,CAAC;AAFD,4BAEC"}
@@ -0,0 +1 @@
1
+ export default function runInBatch<T>(functionsToRun: (() => Promise<T>)[], batchSize?: number): Promise<PromiseSettledResult<T>[]>;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ function runInBatch(functionsToRun, batchSize = 100) {
5
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
6
+ const results = [];
7
+ while (functionsToRun.length !== 0) {
8
+ const currFunctionsToRun = functionsToRun.splice(0, batchSize);
9
+ const promises = currFunctionsToRun.map((fToRun) => fToRun());
10
+ const currResults = yield Promise.allSettled(promises);
11
+ results.push(...currResults);
12
+ }
13
+ return results;
14
+ });
15
+ }
16
+ exports.default = runInBatch;
17
+ //# sourceMappingURL=runInBatch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runInBatch.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/utils/misc/runInBatch.ts"],"names":[],"mappings":";;;AAAA,SAA8B,UAAU,CACtC,cAAoC,EACpC,SAAS,GAAG,GAAG;;QAEf,MAAM,OAAO,GAA8B,EAAE,CAAC;QAE9C,OAAO,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE;YAClC,MAAM,kBAAkB,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;YAC/D,MAAM,QAAQ,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;YAC9D,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YACvD,OAAO,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC;SAC9B;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;CAAA;AAdD,6BAcC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"fetcherExecutor.js","sourceRoot":"","sources":["../../../../../../packages/plugins/src/plugins/marinade/fetcherExecutor.ts"],"names":[],"mappings":";;;AAAA,+DAUoC;AACpC,+CAA8D;AAC9D,2CAA6E;AAC7E,uCAAyC;AACzC,uCAA0C;AAC1C,iDAAsD;AAEtD,MAAM,eAAe,GAAoB,CACvC,KAAa,EACb,OAAgB,EAChB,EAAE;IACF,MAAM,UAAU,GAAG,IAAA,yBAAe,GAAE,CAAC;IACrC,MAAM,OAAO,GAAG,MAAM,IAAA,iCAAwB,EAC5C,UAAU,EACV,sBAAY,EACZ,mCAAuB,EACvB,IAAA,uBAAa,EAAC,KAAK,CAAC,CACrB,CAAC;IACF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEpC,MAAM,MAAM,GAAqB,EAAE,CAAC;IACpC,MAAM,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC;IACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;QAC1C,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAC1B,MAAM,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,qBAAS,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC/D,MAAM,UAAU,GAAG,MAAM,eAAe,CAAC,GAAG,CAC1C,oCAAmB,EACnB,0BAAS,CAAC,MAAM,CACjB,CAAC;QACF,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;QACnD,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;QAE5C,MAAM,KAAK,GAAwB;YACjC,IAAI,EAAE,mCAAkB,CAAC,KAAK;YAC9B,SAAS,EAAE,0BAAS,CAAC,MAAM;YAC3B,KAAK;YACL,IAAI,EAAE;gBACJ,OAAO,EAAE,oCAAmB;gBAC5B,KAAK;gBACL,MAAM;aACP;SACF,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACpB;IACD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEnC,MAAM,OAAO,GAA6B;QACxC,IAAI,EAAE,qCAAoB,CAAC,QAAQ;QACnC,SAAS,EAAE,0BAAS,CAAC,MAAM;QAC3B,UAAU,EAAV,sBAAU;QACV,KAAK,EAAE,SAAS;QAChB,KAAK,EAAE,IAAI;QACX,IAAI,EAAE;YACJ,MAAM;SACP;KACF,CAAC;IACF,OAAO,CAAC,OAAO,CAAC,CAAC;AACnB,CAAC,CAAA,CAAC;AACF,kBAAe,eAAe,CAAC"}
@@ -1,3 +0,0 @@
1
- import { JobExecutor } from '@sonarwatch/portfolio-core';
2
- declare const jobExecutor: JobExecutor;
3
- export default jobExecutor;
@@ -1,14 +0,0 @@
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 jobExecutor = (context) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
7
- const { cache } = context;
8
- yield cache.set('abc', 'dfg', {
9
- prefix: constants_1.cachePrefix,
10
- networkId: portfolio_core_1.NetworkId.solana,
11
- });
12
- });
13
- exports.default = jobExecutor;
14
- //# sourceMappingURL=jobExecutor.js.map