@gurge/sdk-react-native 0.3.69 → 0.3.74

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 (83) hide show
  1. package/_virtual/_rolldown/runtime.mjs +11 -2
  2. package/common/src/constants/vite.constants.cjs +1 -1
  3. package/common/src/constants/vite.constants.mjs +1 -1
  4. package/common/src/crypto/babyJub.cjs +1 -1
  5. package/common/src/crypto/babyJub.mjs +7 -6
  6. package/common/src/crypto/eddsa.cjs +1 -1
  7. package/common/src/crypto/eddsa.mjs +7 -6
  8. package/common/src/crypto/poseidon.cjs +1 -1
  9. package/common/src/crypto/poseidon.mjs +13 -13
  10. package/common/src/data-structures/IndexedDB/activity-db.cjs +1 -1
  11. package/common/src/data-structures/IndexedDB/activity-db.mjs +38 -38
  12. package/common/src/data-structures/IndexedDB/balances-db.cjs +1 -1
  13. package/common/src/data-structures/IndexedDB/balances-db.mjs +18 -16
  14. package/common/src/data-structures/IndexedDB/contact-db.cjs +1 -1
  15. package/common/src/data-structures/IndexedDB/contact-db.mjs +16 -14
  16. package/common/src/data-structures/IndexedDB/key-val-store.cjs +1 -1
  17. package/common/src/data-structures/IndexedDB/key-val-store.mjs +12 -12
  18. package/common/src/data-structures/IndexedDB/pay-activity-db.cjs +1 -1
  19. package/common/src/data-structures/IndexedDB/pay-activity-db.mjs +10 -8
  20. package/common/src/data-structures/IndexedDB/signatures-db.cjs +1 -1
  21. package/common/src/data-structures/IndexedDB/signatures-db.mjs +23 -21
  22. package/common/src/data-structures/TokenDBs/AlchemyPublicTokensDB.cjs +1 -1
  23. package/common/src/data-structures/TokenDBs/AlchemyPublicTokensDB.mjs +32 -31
  24. package/common/src/data-structures/TokenDBs/ArcPublicTokensDB.cjs +1 -1
  25. package/common/src/data-structures/TokenDBs/ArcPublicTokensDB.mjs +25 -25
  26. package/common/src/data-structures/TokenDBs/EventsPublicTokensDB.cjs +1 -1
  27. package/common/src/data-structures/TokenDBs/EventsPublicTokensDB.mjs +47 -46
  28. package/common/src/data-structures/TokenDBs/PrivateTokensDB.cjs +1 -1
  29. package/common/src/data-structures/TokenDBs/PrivateTokensDB.mjs +20 -20
  30. package/common/src/data-structures/TokenDBs/TempoPublicTokensDB.cjs +1 -1
  31. package/common/src/data-structures/TokenDBs/TempoPublicTokensDB.mjs +19 -19
  32. package/common/src/data-structures/TokenDBs/TronPublicTokensDB.cjs +1 -1
  33. package/common/src/data-structures/TokenDBs/TronPublicTokensDB.mjs +19 -19
  34. package/common/src/data-structures/TokenDBs/token-visibility-db.cjs +1 -1
  35. package/common/src/data-structures/TokenDBs/token-visibility-db.mjs +45 -44
  36. package/common/src/data-structures/cacheDevices/FileCacheDevice.cjs +1 -1
  37. package/common/src/data-structures/cacheDevices/FileCacheDevice.mjs +1 -1
  38. package/common/src/functions/snarkjs/verifyCommitmentValidationData.cjs +1 -1
  39. package/common/src/functions/snarkjs/verifyCommitmentValidationData.mjs +4 -1
  40. package/common/src/functions/utils/cacheDevice.utils.cjs +1 -1
  41. package/common/src/functions/utils/cacheDevice.utils.mjs +1 -1
  42. package/common/src/functions/utils/cacheFunctions.cjs +1 -1
  43. package/common/src/functions/utils/cacheFunctions.mjs +13 -13
  44. package/common/src/functions/utils/ipfs.cjs +1 -1
  45. package/common/src/functions/utils/ipfs.mjs +3 -1
  46. package/common/src/webworker/viteWorkerURL.constant.mjs +3 -3
  47. package/common/src/webworker/workerFactory.cjs +1 -1
  48. package/common/src/webworker/workerFactory.mjs +3 -3
  49. package/package.json +1 -1
  50. package/shims/circomlibjs-hinkal-fork.cjs +14 -0
  51. package/shims/circomlibjs-hinkal-fork.mjs +3 -0
  52. package/shims/circomlibjs.cjs +15 -0
  53. package/shims/circomlibjs.mjs +3 -0
  54. package/shims/constants.cjs +7 -0
  55. package/shims/constants.mjs +3 -0
  56. package/shims/crypto.cjs +102 -0
  57. package/shims/crypto.mjs +3 -0
  58. package/shims/dotenv.cjs +3 -0
  59. package/shims/dotenv.mjs +3 -0
  60. package/shims/ffjavascript.cjs +5 -0
  61. package/shims/ffjavascript.mjs +3 -0
  62. package/shims/fs.cjs +5 -0
  63. package/shims/fs.mjs +3 -0
  64. package/shims/globals.cjs +15 -0
  65. package/shims/globals.mjs +3 -0
  66. package/shims/idb-keyval.cjs +75 -0
  67. package/shims/idb-keyval.mjs +3 -0
  68. package/shims/multiformats.cjs +1 -0
  69. package/shims/multiformats.mjs +3 -0
  70. package/shims/os.cjs +7 -0
  71. package/shims/os.mjs +3 -0
  72. package/shims/path.cjs +11 -0
  73. package/shims/path.mjs +3 -0
  74. package/shims/readline.cjs +6 -0
  75. package/shims/readline.mjs +3 -0
  76. package/shims/snarkjs.cjs +21 -0
  77. package/shims/snarkjs.mjs +3 -0
  78. package/shims/url.cjs +5 -0
  79. package/shims/url.mjs +3 -0
  80. package/shims/web-worker.cjs +7 -0
  81. package/shims/web-worker.mjs +3 -0
  82. package/shims/worker_threads.cjs +6 -0
  83. package/shims/worker_threads.mjs +3 -0
@@ -1,39 +1,41 @@
1
- import { StorageKeys as e } from "../../types/cache.types.mjs";
1
+ import { require_idb_keyval as e } from "../../../../shims/idb-keyval.mjs";
2
+ import { StorageKeys as t } from "../../types/cache.types.mjs";
2
3
  import "../../types/index.mjs";
3
- import { Logger as t } from "../../error-handling/logger.mjs";
4
+ import { Logger as n } from "../../error-handling/logger.mjs";
4
5
  import "../../error-handling/index.mjs";
5
- import { get as n, set as r } from "idb-keyval";
6
+ //#region common/src/data-structures/IndexedDB/signatures-db.ts
7
+ var r = e();
6
8
  new class {
7
9
  generateMessageId() {
8
10
  return `msg_${(/* @__PURE__ */ new Date()).getTime()}_${Math.random().toString(36).substring(2, 15)}`;
9
11
  }
10
- async saveSignedMessage(i, a, o, s, c, l) {
12
+ async saveSignedMessage(e, i, a, o, s, c) {
11
13
  try {
12
- let t = this.generateMessageId(), u = await n(e.SIGNED_MESSAGES) || {}, d = {
13
- chainId: i,
14
- messageText: a,
15
- messageType: o,
16
- subAccountAddress: s,
17
- signature: c,
18
- appMetaData: l
14
+ let n = this.generateMessageId(), l = await (0, r.get)(t.SIGNED_MESSAGES) || {}, u = {
15
+ chainId: e,
16
+ messageText: i,
17
+ messageType: a,
18
+ subAccountAddress: o,
19
+ signature: s,
20
+ appMetaData: c
19
21
  };
20
- u[t] = {
22
+ l[n] = {
21
23
  timestamp: (/* @__PURE__ */ new Date()).toISOString(),
22
- ...d
23
- }, await r(e.SIGNED_MESSAGES, u);
24
- } catch (e) {
25
- t.error("Failed to save signed message:", e, {
26
- chainId: i,
27
- messageType: o
24
+ ...u
25
+ }, await (0, r.set)(t.SIGNED_MESSAGES, l);
26
+ } catch (t) {
27
+ n.error("Failed to save signed message:", t, {
28
+ chainId: e,
29
+ messageType: a
28
30
  });
29
31
  }
30
32
  }
31
33
  async getAllSignedMessages() {
32
34
  try {
33
- let t = await n(e.SIGNED_MESSAGES) || {};
34
- return Object.values(t).sort((e, t) => new Date(t.timestamp).getTime() - new Date(e.timestamp).getTime());
35
+ let e = await (0, r.get)(t.SIGNED_MESSAGES) || {};
36
+ return Object.values(e).sort((e, t) => new Date(t.timestamp).getTime() - new Date(e.timestamp).getTime());
35
37
  } catch (e) {
36
- return t.error("Failed to retrieve signed messages:", e), [];
38
+ return n.error("Failed to retrieve signed messages:", e), [];
37
39
  }
38
40
  }
39
41
  }();
@@ -1 +1 @@
1
- require(`../../../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../constants/chains.constants.cjs`),t=require(`../../constants/protocol.constants.cjs`),n=require(`../../functions/utils/caseInsensitive.utils.cjs`),r=require(`../../types/cache.types.cjs`),i=require(`../http/HttpClient.cjs`);require(`../http/index.cjs`);const a=require(`../../error-handling/logger.cjs`),o=require(`../../API/API.cjs`),s=require(`../../functions/utils/string.utils.cjs`),c=require(`./token-visibility-db.cjs`),l=require(`../../functions/utils/erc20tokenFunctions.cjs`),u=require(`../../functions/utils/create-provider.cjs`),d=require(`../../functions/utils/publicBalance.utils.cjs`);let f=require(`@solana/web3.js`),p=require(`idb-keyval`),m=require(`@solana/spl-token`);var h=new class{fetchedTokens={};ALCHEMY_URLS={[e.chainIds.ethMainnet]:`eth-mainnet`,[e.chainIds.polygon]:`polygon-mainnet`,[e.chainIds.arbMainnet]:`arb-mainnet`,[e.chainIds.optimism]:`opt-mainnet`,[e.chainIds.optimismTest]:`opt-mainnet`,[e.chainIds.base]:`base-mainnet`,[e.chainIds.solanaMainnet]:`solana-mainnet`,[e.chainIds.sepoliaTestnet]:`eth-sepolia`};KNOWN_GOOD_NFTS={[e.chainIds.base]:[`0x20bc8d248fe9c18a947406cea50d716828ab821f`],[e.chainIds.optimism]:[`0x3c3e0e73b53a19bcaf4178b8f9c9428fd2a2775e`]};isWhitelistedNFT(e,t){return this.KNOWN_GOOD_NFTS[t]?this.KNOWN_GOOD_NFTS[t].some(t=>n.caseInsensitiveEqual(e,t)):!1}async getPublicTokens(e,t){let n=s.getStateKey(t,e);return l.overlayTokensWithRegistryData((await(0,p.get)(r.StorageKeys.ALCHEMY_PUBLIC_TOKENS))?.[n]||[],e)}async getFetchedTokens(e,t){let n=s.getStateKey(t,e);return l.overlayTokensWithRegistryData(this.fetchedTokens[n]||[],e)}fetchAndUpdatePublicTokens(t,n){return e.isSolanaLike(n)?this.fetchAndUpdateSolanaTokens(t,n):this.fetchAndUpdateEVMTokens(t,n)}async fetchAndUpdateSolanaTokens(e,t){let i=s.getStateKey(e,t),[a,l]=await Promise.all([this.getSolanaTokenAddresses(t,e),this.getNFTAddresses(t,e)]),u=Array.from(new Set([...a,...l]));if(!u.length)return;let d=(await o.API.tokensInfoCall(t,u)).filter(e=>!!e),f=await c.tokenVisibilityStorage.hideSpamsAndFetchHiddenTokensAddresses(t,d),m=d.filter(e=>!n.lowerCaseIncludes(f,e.erc20TokenAddress));await(0,p.update)(r.StorageKeys.ALCHEMY_PUBLIC_TOKENS,(e={})=>{let t={...e,[i]:m};return this.fetchedTokens=t,t})}async getWalletTokenAddresses(t,n){return e.isSolanaLike(t)?this.getSolanaTokenAddresses(t,n):this.getEVMTokenAddresses(t,n)}async fetchAndUpdateEVMTokens(e,i){let a=s.getStateKey(e,i),l=await this.getEVMTokenAddresses(i,e),u=await this.getNFTTokens(i,e),d=u.map(e=>e.contractAddress),f=[...l,...d];if(!f.length)return;let m=(await o.API.tokensInfoCall(i,f)).map((e,r)=>{if(e)return e;let a=f[r],o=u.find(e=>n.caseInsensitiveEqual(e.contractAddress,a));return o&&o.tokenIds&&o.tokenIds.length>0&&this.isWhitelistedNFT(a,i)?{chainId:i,name:`Unknown NFT`,symbol:`NFT`,erc20TokenAddress:a,decimals:0,nftTokenType:t.TokenType.ERC721,tokenIds:o.tokenIds}:null}).filter(e=>!!e),h=await c.tokenVisibilityStorage.hideSpamsAndFetchHiddenTokensAddresses(i,m),g=m.filter(e=>!n.lowerCaseIncludes(h,e.erc20TokenAddress)).map(e=>({...e,tokenIds:u.find(t=>n.caseInsensitiveEqual(t.contractAddress,e.erc20TokenAddress))?.tokenIds}));await(0,p.update)(r.StorageKeys.ALCHEMY_PUBLIC_TOKENS,(e={})=>{let t={...e,[a]:g};return this.fetchedTokens=t,t})}async getSolanaTokenAddresses(n,r){let{fetchRpcUrl:i}=e.networkRegistry[n];if(!i)throw Error(`RPC URL not found for the specified chain ID`);let a=u.createCustomSolanaConnection(i),o=await a.getBalance(new f.PublicKey(r)),[s,c]=await Promise.all([a.getParsedTokenAccountsByOwner(new f.PublicKey(r),{programId:m.TOKEN_PROGRAM_ID}),a.getParsedTokenAccountsByOwner(new f.PublicKey(r),{programId:m.TOKEN_2022_PROGRAM_ID})]),l=[...s.value,...c.value].filter(e=>{let{amount:t}=e.account.data.parsed.info.tokenAmount;return BigInt(t)>0n}).map(e=>e.account.data.parsed.info.mint);return o>0&&l.unshift(t.solanaNativeAddress),Array.from(new Set(l))}async getNFTAddresses(n,r){let{fetchRpcUrl:o}=e.networkRegistry[n];if(!o)throw Error(`RPC URL not found for the specified chain ID`);try{let e=[],n=1;do{let{items:a=[],page:s}=(await i.httpClient.post(o,{jsonrpc:`2.0`,id:1,method:`getAssetsByOwner`,params:{ownerAddress:r,page:n,limit:1e3,displayOptions:{showFungible:!1,showCollectionMetadata:!0}}})).result||{},c=a.filter(e=>e.interface&&t.SOLANA_NFT_INTERFACES.includes(e.interface)).map(e=>e.id);e.push(...c),n=s&&s>n?s:0}while(n>0);return e}catch(e){return a.Logger.error(`Failed to fetch NFTs from DAS API`,e),[]}}async getEVMTokenAddresses(n,r){let a=await d.getPublicBalanceByTokenAddress(n,r,t.zeroAddress),o=this.ALCHEMY_URLS[n];if(!o)throw Error(`Alchemy URL not found for the specified chain ID: ${n}`);let s=`https://${o}.g.alchemy.com/v2/${e.ALCHEMY_API_KEY}`,c=[],l;do{let e=[r,`erc20`];l&&e.push({pageKey:l});let{result:t}=await i.httpClient.post(s,{jsonrpc:`2.0`,id:1,method:`alchemy_getTokenBalances`,params:e});c.push(...t?.tokenBalances??[]),l=t?.pageKey}while(l);a&&a>0n&&c.push({contractAddress:t.zeroAddress,tokenBalance:a.toString()});let u={};return c.forEach(e=>{(!u[e.contractAddress]||BigInt(e.tokenBalance)>0n)&&(u[e.contractAddress]=e)}),Object.keys(u)}async getNFTTokens(t,n){let r=`https://${this.ALCHEMY_URLS[t]}.g.alchemy.com/nft/v3/${e.ALCHEMY_API_KEY}/getNFTsForOwner`,a=[],o;do{let e=new URLSearchParams({owner:n,withMetadata:`false`,pageSize:`100`});o&&e.append(`pageKey`,o);let{ownedNfts:t=[],pageKey:s}=await i.httpClient.get(`${r}?${e.toString()}`);a.push(...t),o=s}while(o);let s=a.filter(({contractAddress:e,tokenId:t})=>e&&t).reduce((e,{contractAddress:t,tokenId:n})=>{let r=t.toLowerCase();return e.has(r)||e.set(r,[]),e.get(r)?.push(n),e},new Map);return Array.from(s.entries()).map(([e,t])=>({contractAddress:e,tokenIds:t}))}};exports.alchemyPublicTokensDB=h;
1
+ require(`../../../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../constants/chains.constants.cjs`),t=require(`../../constants/protocol.constants.cjs`),n=require(`../../functions/utils/caseInsensitive.utils.cjs`),r=require(`../../../../shims/idb-keyval.cjs`),i=require(`../../types/cache.types.cjs`),a=require(`../http/HttpClient.cjs`);require(`../http/index.cjs`);const o=require(`../../error-handling/logger.cjs`),s=require(`../../API/API.cjs`),c=require(`../../functions/utils/string.utils.cjs`),l=require(`./token-visibility-db.cjs`),u=require(`../../functions/utils/erc20tokenFunctions.cjs`),d=require(`../../functions/utils/create-provider.cjs`),f=require(`../../functions/utils/publicBalance.utils.cjs`);let p=require(`@solana/web3.js`),m=require(`@solana/spl-token`);var h=r.default,g=new class{fetchedTokens={};ALCHEMY_URLS={[e.chainIds.ethMainnet]:`eth-mainnet`,[e.chainIds.polygon]:`polygon-mainnet`,[e.chainIds.arbMainnet]:`arb-mainnet`,[e.chainIds.optimism]:`opt-mainnet`,[e.chainIds.optimismTest]:`opt-mainnet`,[e.chainIds.base]:`base-mainnet`,[e.chainIds.solanaMainnet]:`solana-mainnet`,[e.chainIds.sepoliaTestnet]:`eth-sepolia`};KNOWN_GOOD_NFTS={[e.chainIds.base]:[`0x20bc8d248fe9c18a947406cea50d716828ab821f`],[e.chainIds.optimism]:[`0x3c3e0e73b53a19bcaf4178b8f9c9428fd2a2775e`]};isWhitelistedNFT(e,t){return this.KNOWN_GOOD_NFTS[t]?this.KNOWN_GOOD_NFTS[t].some(t=>n.caseInsensitiveEqual(e,t)):!1}async getPublicTokens(e,t){let n=c.getStateKey(t,e);return u.overlayTokensWithRegistryData((await(0,h.get)(i.StorageKeys.ALCHEMY_PUBLIC_TOKENS))?.[n]||[],e)}async getFetchedTokens(e,t){let n=c.getStateKey(t,e);return u.overlayTokensWithRegistryData(this.fetchedTokens[n]||[],e)}fetchAndUpdatePublicTokens(t,n){return e.isSolanaLike(n)?this.fetchAndUpdateSolanaTokens(t,n):this.fetchAndUpdateEVMTokens(t,n)}async fetchAndUpdateSolanaTokens(e,t){let r=c.getStateKey(e,t),[a,o]=await Promise.all([this.getSolanaTokenAddresses(t,e),this.getNFTAddresses(t,e)]),u=Array.from(new Set([...a,...o]));if(!u.length)return;let d=(await s.API.tokensInfoCall(t,u)).filter(e=>!!e),f=await l.tokenVisibilityStorage.hideSpamsAndFetchHiddenTokensAddresses(t,d),p=d.filter(e=>!n.lowerCaseIncludes(f,e.erc20TokenAddress));await(0,h.update)(i.StorageKeys.ALCHEMY_PUBLIC_TOKENS,(e={})=>{let t={...e,[r]:p};return this.fetchedTokens=t,t})}async getWalletTokenAddresses(t,n){return e.isSolanaLike(t)?this.getSolanaTokenAddresses(t,n):this.getEVMTokenAddresses(t,n)}async fetchAndUpdateEVMTokens(e,r){let a=c.getStateKey(e,r),o=await this.getEVMTokenAddresses(r,e),u=await this.getNFTTokens(r,e),d=u.map(e=>e.contractAddress),f=[...o,...d];if(!f.length)return;let p=(await s.API.tokensInfoCall(r,f)).map((e,i)=>{if(e)return e;let a=f[i],o=u.find(e=>n.caseInsensitiveEqual(e.contractAddress,a));return o&&o.tokenIds&&o.tokenIds.length>0&&this.isWhitelistedNFT(a,r)?{chainId:r,name:`Unknown NFT`,symbol:`NFT`,erc20TokenAddress:a,decimals:0,nftTokenType:t.TokenType.ERC721,tokenIds:o.tokenIds}:null}).filter(e=>!!e),m=await l.tokenVisibilityStorage.hideSpamsAndFetchHiddenTokensAddresses(r,p),g=p.filter(e=>!n.lowerCaseIncludes(m,e.erc20TokenAddress)).map(e=>({...e,tokenIds:u.find(t=>n.caseInsensitiveEqual(t.contractAddress,e.erc20TokenAddress))?.tokenIds}));await(0,h.update)(i.StorageKeys.ALCHEMY_PUBLIC_TOKENS,(e={})=>{let t={...e,[a]:g};return this.fetchedTokens=t,t})}async getSolanaTokenAddresses(n,r){let{fetchRpcUrl:i}=e.networkRegistry[n];if(!i)throw Error(`RPC URL not found for the specified chain ID`);let a=d.createCustomSolanaConnection(i),o=await a.getBalance(new p.PublicKey(r)),[s,c]=await Promise.all([a.getParsedTokenAccountsByOwner(new p.PublicKey(r),{programId:m.TOKEN_PROGRAM_ID}),a.getParsedTokenAccountsByOwner(new p.PublicKey(r),{programId:m.TOKEN_2022_PROGRAM_ID})]),l=[...s.value,...c.value].filter(e=>{let{amount:t}=e.account.data.parsed.info.tokenAmount;return BigInt(t)>0n}).map(e=>e.account.data.parsed.info.mint);return o>0&&l.unshift(t.solanaNativeAddress),Array.from(new Set(l))}async getNFTAddresses(n,r){let{fetchRpcUrl:i}=e.networkRegistry[n];if(!i)throw Error(`RPC URL not found for the specified chain ID`);try{let e=[],n=1;do{let{items:o=[],page:s}=(await a.httpClient.post(i,{jsonrpc:`2.0`,id:1,method:`getAssetsByOwner`,params:{ownerAddress:r,page:n,limit:1e3,displayOptions:{showFungible:!1,showCollectionMetadata:!0}}})).result||{},c=o.filter(e=>e.interface&&t.SOLANA_NFT_INTERFACES.includes(e.interface)).map(e=>e.id);e.push(...c),n=s&&s>n?s:0}while(n>0);return e}catch(e){return o.Logger.error(`Failed to fetch NFTs from DAS API`,e),[]}}async getEVMTokenAddresses(n,r){let i=await f.getPublicBalanceByTokenAddress(n,r,t.zeroAddress),o=this.ALCHEMY_URLS[n];if(!o)throw Error(`Alchemy URL not found for the specified chain ID: ${n}`);let s=`https://${o}.g.alchemy.com/v2/${e.ALCHEMY_API_KEY}`,c=[],l;do{let e=[r,`erc20`];l&&e.push({pageKey:l});let{result:t}=await a.httpClient.post(s,{jsonrpc:`2.0`,id:1,method:`alchemy_getTokenBalances`,params:e});c.push(...t?.tokenBalances??[]),l=t?.pageKey}while(l);i&&i>0n&&c.push({contractAddress:t.zeroAddress,tokenBalance:i.toString()});let u={};return c.forEach(e=>{(!u[e.contractAddress]||BigInt(e.tokenBalance)>0n)&&(u[e.contractAddress]=e)}),Object.keys(u)}async getNFTTokens(t,n){let r=`https://${this.ALCHEMY_URLS[t]}.g.alchemy.com/nft/v3/${e.ALCHEMY_API_KEY}/getNFTsForOwner`,i=[],o;do{let e=new URLSearchParams({owner:n,withMetadata:`false`,pageSize:`100`});o&&e.append(`pageKey`,o);let{ownedNfts:t=[],pageKey:s}=await a.httpClient.get(`${r}?${e.toString()}`);i.push(...t),o=s}while(o);let s=i.filter(({contractAddress:e,tokenId:t})=>e&&t).reduce((e,{contractAddress:t,tokenId:n})=>{let r=t.toLowerCase();return e.has(r)||e.set(r,[]),e.get(r)?.push(n),e},new Map);return Array.from(s.entries()).map(([e,t])=>({contractAddress:e,tokenIds:t}))}};exports.alchemyPublicTokensDB=g;
@@ -1,20 +1,21 @@
1
1
  import { ALCHEMY_API_KEY as e, chainIds as t, isSolanaLike as n, networkRegistry as r } from "../../constants/chains.constants.mjs";
2
2
  import { SOLANA_NFT_INTERFACES as i, TokenType as a, solanaNativeAddress as o, zeroAddress as s } from "../../constants/protocol.constants.mjs";
3
3
  import { caseInsensitiveEqual as c, lowerCaseIncludes as l } from "../../functions/utils/caseInsensitive.utils.mjs";
4
- import { StorageKeys as u } from "../../types/cache.types.mjs";
5
- import { httpClient as d } from "../http/HttpClient.mjs";
4
+ import { require_idb_keyval as u } from "../../../../shims/idb-keyval.mjs";
5
+ import { StorageKeys as d } from "../../types/cache.types.mjs";
6
+ import { httpClient as f } from "../http/HttpClient.mjs";
6
7
  import "../http/index.mjs";
7
- import { Logger as f } from "../../error-handling/logger.mjs";
8
- import { API as p } from "../../API/API.mjs";
9
- import { getStateKey as m } from "../../functions/utils/string.utils.mjs";
10
- import { tokenVisibilityStorage as h } from "./token-visibility-db.mjs";
11
- import { overlayTokensWithRegistryData as g } from "../../functions/utils/erc20tokenFunctions.mjs";
12
- import { createCustomSolanaConnection as _ } from "../../functions/utils/create-provider.mjs";
13
- import { getPublicBalanceByTokenAddress as v } from "../../functions/utils/publicBalance.utils.mjs";
14
- import { PublicKey as y } from "@solana/web3.js";
15
- import { get as b, update as x } from "idb-keyval";
16
- import { TOKEN_2022_PROGRAM_ID as S, TOKEN_PROGRAM_ID as C } from "@solana/spl-token";
17
- var w = new class {
8
+ import { Logger as p } from "../../error-handling/logger.mjs";
9
+ import { API as m } from "../../API/API.mjs";
10
+ import { getStateKey as h } from "../../functions/utils/string.utils.mjs";
11
+ import { tokenVisibilityStorage as g } from "./token-visibility-db.mjs";
12
+ import { overlayTokensWithRegistryData as _ } from "../../functions/utils/erc20tokenFunctions.mjs";
13
+ import { createCustomSolanaConnection as v } from "../../functions/utils/create-provider.mjs";
14
+ import { getPublicBalanceByTokenAddress as y } from "../../functions/utils/publicBalance.utils.mjs";
15
+ import { PublicKey as b } from "@solana/web3.js";
16
+ import { TOKEN_2022_PROGRAM_ID as x, TOKEN_PROGRAM_ID as S } from "@solana/spl-token";
17
+ //#region common/src/data-structures/TokenDBs/AlchemyPublicTokensDB.ts
18
+ var C = u(), w = new class {
18
19
  fetchedTokens = {};
19
20
  ALCHEMY_URLS = {
20
21
  [t.ethMainnet]: "eth-mainnet",
@@ -34,21 +35,21 @@ var w = new class {
34
35
  return this.KNOWN_GOOD_NFTS[t] ? this.KNOWN_GOOD_NFTS[t].some((t) => c(e, t)) : !1;
35
36
  }
36
37
  async getPublicTokens(e, t) {
37
- let n = m(t, e);
38
- return g((await b(u.ALCHEMY_PUBLIC_TOKENS))?.[n] || [], e);
38
+ let n = h(t, e);
39
+ return _((await (0, C.get)(d.ALCHEMY_PUBLIC_TOKENS))?.[n] || [], e);
39
40
  }
40
41
  async getFetchedTokens(e, t) {
41
- let n = m(t, e);
42
- return g(this.fetchedTokens[n] || [], e);
42
+ let n = h(t, e);
43
+ return _(this.fetchedTokens[n] || [], e);
43
44
  }
44
45
  fetchAndUpdatePublicTokens(e, t) {
45
46
  return n(t) ? this.fetchAndUpdateSolanaTokens(e, t) : this.fetchAndUpdateEVMTokens(e, t);
46
47
  }
47
48
  async fetchAndUpdateSolanaTokens(e, t) {
48
- let n = m(e, t), [r, i] = await Promise.all([this.getSolanaTokenAddresses(t, e), this.getNFTAddresses(t, e)]), a = Array.from(new Set([...r, ...i]));
49
+ let n = h(e, t), [r, i] = await Promise.all([this.getSolanaTokenAddresses(t, e), this.getNFTAddresses(t, e)]), a = Array.from(new Set([...r, ...i]));
49
50
  if (!a.length) return;
50
- let o = (await p.tokensInfoCall(t, a)).filter((e) => !!e), s = await h.hideSpamsAndFetchHiddenTokensAddresses(t, o), c = o.filter((e) => !l(s, e.erc20TokenAddress));
51
- await x(u.ALCHEMY_PUBLIC_TOKENS, (e = {}) => {
51
+ let o = (await m.tokensInfoCall(t, a)).filter((e) => !!e), s = await g.hideSpamsAndFetchHiddenTokensAddresses(t, o), c = o.filter((e) => !l(s, e.erc20TokenAddress));
52
+ await (0, C.update)(d.ALCHEMY_PUBLIC_TOKENS, (e = {}) => {
52
53
  let t = {
53
54
  ...e,
54
55
  [n]: c
@@ -60,9 +61,9 @@ var w = new class {
60
61
  return n(e) ? this.getSolanaTokenAddresses(e, t) : this.getEVMTokenAddresses(e, t);
61
62
  }
62
63
  async fetchAndUpdateEVMTokens(e, t) {
63
- let n = m(e, t), r = await this.getEVMTokenAddresses(t, e), i = await this.getNFTTokens(t, e), o = i.map((e) => e.contractAddress), s = [...r, ...o];
64
+ let n = h(e, t), r = await this.getEVMTokenAddresses(t, e), i = await this.getNFTTokens(t, e), o = i.map((e) => e.contractAddress), s = [...r, ...o];
64
65
  if (!s.length) return;
65
- let d = (await p.tokensInfoCall(t, s)).map((e, n) => {
66
+ let u = (await m.tokensInfoCall(t, s)).map((e, n) => {
66
67
  if (e) return e;
67
68
  let r = s[n], o = i.find((e) => c(e.contractAddress, r));
68
69
  return o && o.tokenIds && o.tokenIds.length > 0 && this.isWhitelistedNFT(r, t) ? {
@@ -74,14 +75,14 @@ var w = new class {
74
75
  nftTokenType: a.ERC721,
75
76
  tokenIds: o.tokenIds
76
77
  } : null;
77
- }).filter((e) => !!e), f = await h.hideSpamsAndFetchHiddenTokensAddresses(t, d), g = d.filter((e) => !l(f, e.erc20TokenAddress)).map((e) => ({
78
+ }).filter((e) => !!e), f = await g.hideSpamsAndFetchHiddenTokensAddresses(t, u), p = u.filter((e) => !l(f, e.erc20TokenAddress)).map((e) => ({
78
79
  ...e,
79
80
  tokenIds: i.find((t) => c(t.contractAddress, e.erc20TokenAddress))?.tokenIds
80
81
  }));
81
- await x(u.ALCHEMY_PUBLIC_TOKENS, (e = {}) => {
82
+ await (0, C.update)(d.ALCHEMY_PUBLIC_TOKENS, (e = {}) => {
82
83
  let t = {
83
84
  ...e,
84
- [n]: g
85
+ [n]: p
85
86
  };
86
87
  return this.fetchedTokens = t, t;
87
88
  });
@@ -89,7 +90,7 @@ var w = new class {
89
90
  async getSolanaTokenAddresses(e, t) {
90
91
  let { fetchRpcUrl: n } = r[e];
91
92
  if (!n) throw Error("RPC URL not found for the specified chain ID");
92
- let i = _(n), a = await i.getBalance(new y(t)), [s, c] = await Promise.all([i.getParsedTokenAccountsByOwner(new y(t), { programId: C }), i.getParsedTokenAccountsByOwner(new y(t), { programId: S })]), l = [...s.value, ...c.value].filter((e) => {
93
+ let i = v(n), a = await i.getBalance(new b(t)), [s, c] = await Promise.all([i.getParsedTokenAccountsByOwner(new b(t), { programId: S }), i.getParsedTokenAccountsByOwner(new b(t), { programId: x })]), l = [...s.value, ...c.value].filter((e) => {
93
94
  let { amount: t } = e.account.data.parsed.info.tokenAmount;
94
95
  return BigInt(t) > 0n;
95
96
  }).map((e) => e.account.data.parsed.info.mint);
@@ -101,7 +102,7 @@ var w = new class {
101
102
  try {
102
103
  let e = [], r = 1;
103
104
  do {
104
- let { items: a = [], page: o } = (await d.post(n, {
105
+ let { items: a = [], page: o } = (await f.post(n, {
105
106
  jsonrpc: "2.0",
106
107
  id: 1,
107
108
  method: "getAssetsByOwner",
@@ -119,17 +120,17 @@ var w = new class {
119
120
  } while (r > 0);
120
121
  return e;
121
122
  } catch (e) {
122
- return f.error("Failed to fetch NFTs from DAS API", e), [];
123
+ return p.error("Failed to fetch NFTs from DAS API", e), [];
123
124
  }
124
125
  }
125
126
  async getEVMTokenAddresses(t, n) {
126
- let r = await v(t, n, s), i = this.ALCHEMY_URLS[t];
127
+ let r = await y(t, n, s), i = this.ALCHEMY_URLS[t];
127
128
  if (!i) throw Error(`Alchemy URL not found for the specified chain ID: ${t}`);
128
129
  let a = `https://${i}.g.alchemy.com/v2/${e}`, o = [], c;
129
130
  do {
130
131
  let e = [n, "erc20"];
131
132
  c && e.push({ pageKey: c });
132
- let { result: t } = await d.post(a, {
133
+ let { result: t } = await f.post(a, {
133
134
  jsonrpc: "2.0",
134
135
  id: 1,
135
136
  method: "alchemy_getTokenBalances",
@@ -155,7 +156,7 @@ var w = new class {
155
156
  pageSize: "100"
156
157
  });
157
158
  a && e.append("pageKey", a);
158
- let { ownedNfts: t = [], pageKey: o } = await d.get(`${r}?${e.toString()}`);
159
+ let { ownedNfts: t = [], pageKey: o } = await f.get(`${r}?${e.toString()}`);
159
160
  i.push(...t), a = o;
160
161
  } while (a);
161
162
  let o = i.filter(({ contractAddress: e, tokenId: t }) => e && t).reduce((e, { contractAddress: t, tokenId: n }) => {
@@ -1 +1 @@
1
- const e=require(`../../../../../../_virtual/_rolldown/runtime.cjs`),t=require(`../../constants/chains.constants.cjs`),n=require(`../../constants/protocol.constants.cjs`),r=require(`../../functions/utils/caseInsensitive.utils.cjs`),i=require(`../../types/ethereum-network.types.cjs`),a=require(`../../types/cache.types.cjs`),o=require(`../../error-handling/logger.cjs`),s=require(`../../API/API.cjs`),c=require(`../../functions/utils/string.utils.cjs`),l=require(`./token-visibility-db.cjs`),u=require(`../../functions/web3/getContractMetadata.cjs`);let d=require(`idb-keyval`),f=require(`axios`);f=e.__toESM(f);var p=class{API_BASE=`https://testnet.arcscan.app/api`;fetchedTokens={};async getPublicTokens(e){let n=c.getStateKey(e,t.chainIds.arcTestnet);return(await(0,d.get)(a.StorageKeys.ARC_PUBLIC_TOKENS))?.[n]||[]}getFetchedTokens(e){let n=c.getStateKey(e,t.chainIds.arcTestnet);return this.fetchedTokens[n]||[]}async fetchAndUpdatePublicTokens(e){let i=c.getStateKey(e,t.chainIds.arcTestnet),o=await this.getERC20TokenAddresses(e),u=await this.getNFTTokens(e),f=u.map(e=>e.contractAddress),p=[...o,...f];if(!p.length)return;let m=(await s.API.tokensInfoCall(t.chainIds.arcTestnet,p)).map((e,i)=>{if(e)return e;let a=p[i],o=u.find(e=>r.caseInsensitiveEqual(e.contractAddress,a));return o&&o.tokenIds&&o.tokenIds.length>0?{chainId:t.chainIds.arcTestnet,name:`Unknown NFT`,symbol:`NFT`,erc20TokenAddress:a,decimals:0,nftTokenType:n.TokenType.ERC721,tokenIds:o.tokenIds}:null}).filter(e=>!!e),h=await l.tokenVisibilityStorage.hideSpamsAndFetchHiddenTokensAddresses(t.chainIds.arcTestnet,m),g=m.filter(e=>!r.lowerCaseIncludes(h,e.erc20TokenAddress)).map(e=>({...e,tokenIds:u.find(t=>r.caseInsensitiveEqual(t.contractAddress,e.erc20TokenAddress))?.tokenIds}));await(0,d.update)(a.StorageKeys.ARC_PUBLIC_TOKENS,(e={})=>{let t={...e,[i]:g};return this.fetchedTokens=t,t})}async getERC20TokenAddresses(e){let n=[];try{let r=(await f.default.post(`${this.API_BASE}?module=account&action=tokentx&address=${e}`)).data;if(r.status===`1`&&r.result){let a=[...new Set(r.result.map(({contractAddress:e})=>e))];for(let r of a)try{let a=u.getContractWithFetcherByChainId(t.chainIds.arcTestnet,i.ContractType.ERC20Contract,r),o=BigInt(await a.balanceOf(e));o>0n&&n.push({contractAddress:r,tokenBalance:o.toString()})}catch(e){o.Logger.error(`Error fetching ARC testnet token balance:`,e)}}}catch(e){o.Logger.error(`Error fetching ARC testnet token transactions:`,e)}return n.filter(({tokenBalance:e})=>Number(e)!==0).map(({contractAddress:e})=>e)}async getNFTTokens(e){let t=`${this.API_BASE}/v2/addresses/${e}/nft?type=ERC-721,ERC-1155`,n=[],r;do{let e=r?`&${new URLSearchParams(r)}`:``,{data:i}=await f.default.get(`${t}${e}`),{items:a=[],next_page_params:o}=i;n.push(...a),r=o?{token_contract_address_hash:o.token_contract_address_hash,token_id:o.token_id,token_type:o.token_type}:void 0}while(r);let i=n.reduce((e,t)=>{let n=t.token.address_hash.toLowerCase(),r=t.id;return e.has(n)||e.set(n,[]),e.get(n)?.push(r),e},new Map);return Array.from(i.entries()).map(([e,t])=>({contractAddress:e,tokenIds:t}))}},m=new p;exports.ArcPublicTokensDB=p,exports.arcPublicTokensDB=m;
1
+ const e=require(`../../../../../../_virtual/_rolldown/runtime.cjs`),t=require(`../../constants/chains.constants.cjs`),n=require(`../../constants/protocol.constants.cjs`),r=require(`../../functions/utils/caseInsensitive.utils.cjs`),i=require(`../../../../shims/idb-keyval.cjs`),a=require(`../../types/ethereum-network.types.cjs`),o=require(`../../types/cache.types.cjs`),s=require(`../../error-handling/logger.cjs`),c=require(`../../API/API.cjs`),l=require(`../../functions/utils/string.utils.cjs`),u=require(`./token-visibility-db.cjs`),d=require(`../../functions/web3/getContractMetadata.cjs`);let f=require(`axios`);f=e.__toESM(f);var p=i.default,m=class{API_BASE=`https://testnet.arcscan.app/api`;fetchedTokens={};async getPublicTokens(e){let n=l.getStateKey(e,t.chainIds.arcTestnet);return(await(0,p.get)(o.StorageKeys.ARC_PUBLIC_TOKENS))?.[n]||[]}getFetchedTokens(e){let n=l.getStateKey(e,t.chainIds.arcTestnet);return this.fetchedTokens[n]||[]}async fetchAndUpdatePublicTokens(e){let i=l.getStateKey(e,t.chainIds.arcTestnet),a=await this.getERC20TokenAddresses(e),s=await this.getNFTTokens(e),d=s.map(e=>e.contractAddress),f=[...a,...d];if(!f.length)return;let m=(await c.API.tokensInfoCall(t.chainIds.arcTestnet,f)).map((e,i)=>{if(e)return e;let a=f[i],o=s.find(e=>r.caseInsensitiveEqual(e.contractAddress,a));return o&&o.tokenIds&&o.tokenIds.length>0?{chainId:t.chainIds.arcTestnet,name:`Unknown NFT`,symbol:`NFT`,erc20TokenAddress:a,decimals:0,nftTokenType:n.TokenType.ERC721,tokenIds:o.tokenIds}:null}).filter(e=>!!e),h=await u.tokenVisibilityStorage.hideSpamsAndFetchHiddenTokensAddresses(t.chainIds.arcTestnet,m),g=m.filter(e=>!r.lowerCaseIncludes(h,e.erc20TokenAddress)).map(e=>({...e,tokenIds:s.find(t=>r.caseInsensitiveEqual(t.contractAddress,e.erc20TokenAddress))?.tokenIds}));await(0,p.update)(o.StorageKeys.ARC_PUBLIC_TOKENS,(e={})=>{let t={...e,[i]:g};return this.fetchedTokens=t,t})}async getERC20TokenAddresses(e){let n=[];try{let r=(await f.default.post(`${this.API_BASE}?module=account&action=tokentx&address=${e}`)).data;if(r.status===`1`&&r.result){let i=[...new Set(r.result.map(({contractAddress:e})=>e))];for(let r of i)try{let i=d.getContractWithFetcherByChainId(t.chainIds.arcTestnet,a.ContractType.ERC20Contract,r),o=BigInt(await i.balanceOf(e));o>0n&&n.push({contractAddress:r,tokenBalance:o.toString()})}catch(e){s.Logger.error(`Error fetching ARC testnet token balance:`,e)}}}catch(e){s.Logger.error(`Error fetching ARC testnet token transactions:`,e)}return n.filter(({tokenBalance:e})=>Number(e)!==0).map(({contractAddress:e})=>e)}async getNFTTokens(e){let t=`${this.API_BASE}/v2/addresses/${e}/nft?type=ERC-721,ERC-1155`,n=[],r;do{let e=r?`&${new URLSearchParams(r)}`:``,{data:i}=await f.default.get(`${t}${e}`),{items:a=[],next_page_params:o}=i;n.push(...a),r=o?{token_contract_address_hash:o.token_contract_address_hash,token_id:o.token_id,token_type:o.token_type}:void 0}while(r);let i=n.reduce((e,t)=>{let n=t.token.address_hash.toLowerCase(),r=t.id;return e.has(n)||e.set(n,[]),e.get(n)?.push(r),e},new Map);return Array.from(i.entries()).map(([e,t])=>({contractAddress:e,tokenIds:t}))}},h=new m;exports.ArcPublicTokensDB=m,exports.arcPublicTokensDB=h;
@@ -1,31 +1,31 @@
1
1
  import { chainIds as e } from "../../constants/chains.constants.mjs";
2
2
  import { TokenType as t } from "../../constants/protocol.constants.mjs";
3
3
  import { caseInsensitiveEqual as n, lowerCaseIncludes as r } from "../../functions/utils/caseInsensitive.utils.mjs";
4
- import { ContractType as i } from "../../types/ethereum-network.types.mjs";
5
- import { StorageKeys as a } from "../../types/cache.types.mjs";
6
- import { Logger as o } from "../../error-handling/logger.mjs";
7
- import { API as s } from "../../API/API.mjs";
8
- import { getStateKey as c } from "../../functions/utils/string.utils.mjs";
9
- import { tokenVisibilityStorage as l } from "./token-visibility-db.mjs";
10
- import { getContractWithFetcherByChainId as u } from "../../functions/web3/getContractMetadata.mjs";
11
- import { get as d, update as f } from "idb-keyval";
12
- import p from "axios";
4
+ import { require_idb_keyval as i } from "../../../../shims/idb-keyval.mjs";
5
+ import { ContractType as a } from "../../types/ethereum-network.types.mjs";
6
+ import { StorageKeys as o } from "../../types/cache.types.mjs";
7
+ import { Logger as s } from "../../error-handling/logger.mjs";
8
+ import { API as c } from "../../API/API.mjs";
9
+ import { getStateKey as l } from "../../functions/utils/string.utils.mjs";
10
+ import { tokenVisibilityStorage as u } from "./token-visibility-db.mjs";
11
+ import { getContractWithFetcherByChainId as d } from "../../functions/web3/getContractMetadata.mjs";
12
+ import f from "axios";
13
13
  //#region common/src/data-structures/TokenDBs/ArcPublicTokensDB.ts
14
- var m = class {
14
+ var p = i(), m = class {
15
15
  API_BASE = "https://testnet.arcscan.app/api";
16
16
  fetchedTokens = {};
17
17
  async getPublicTokens(t) {
18
- let n = c(t, e.arcTestnet);
19
- return (await d(a.ARC_PUBLIC_TOKENS))?.[n] || [];
18
+ let n = l(t, e.arcTestnet);
19
+ return (await (0, p.get)(o.ARC_PUBLIC_TOKENS))?.[n] || [];
20
20
  }
21
21
  getFetchedTokens(t) {
22
- let n = c(t, e.arcTestnet);
22
+ let n = l(t, e.arcTestnet);
23
23
  return this.fetchedTokens[n] || [];
24
24
  }
25
25
  async fetchAndUpdatePublicTokens(i) {
26
- let o = c(i, e.arcTestnet), u = await this.getERC20TokenAddresses(i), d = await this.getNFTTokens(i), p = d.map((e) => e.contractAddress), m = [...u, ...p];
26
+ let a = l(i, e.arcTestnet), s = await this.getERC20TokenAddresses(i), d = await this.getNFTTokens(i), f = d.map((e) => e.contractAddress), m = [...s, ...f];
27
27
  if (!m.length) return;
28
- let h = (await s.tokensInfoCall(e.arcTestnet, m)).map((r, i) => {
28
+ let h = (await c.tokensInfoCall(e.arcTestnet, m)).map((r, i) => {
29
29
  if (r) return r;
30
30
  let a = m[i], o = d.find((e) => n(e.contractAddress, a));
31
31
  return o && o.tokenIds && o.tokenIds.length > 0 ? {
@@ -37,14 +37,14 @@ var m = class {
37
37
  nftTokenType: t.ERC721,
38
38
  tokenIds: o.tokenIds
39
39
  } : null;
40
- }).filter((e) => !!e), g = await l.hideSpamsAndFetchHiddenTokensAddresses(e.arcTestnet, h), _ = h.filter((e) => !r(g, e.erc20TokenAddress)).map((e) => ({
40
+ }).filter((e) => !!e), g = await u.hideSpamsAndFetchHiddenTokensAddresses(e.arcTestnet, h), _ = h.filter((e) => !r(g, e.erc20TokenAddress)).map((e) => ({
41
41
  ...e,
42
42
  tokenIds: d.find((t) => n(t.contractAddress, e.erc20TokenAddress))?.tokenIds
43
43
  }));
44
- await f(a.ARC_PUBLIC_TOKENS, (e = {}) => {
44
+ await (0, p.update)(o.ARC_PUBLIC_TOKENS, (e = {}) => {
45
45
  let t = {
46
46
  ...e,
47
- [o]: _
47
+ [a]: _
48
48
  };
49
49
  return this.fetchedTokens = t, t;
50
50
  });
@@ -52,28 +52,28 @@ var m = class {
52
52
  async getERC20TokenAddresses(t) {
53
53
  let n = [];
54
54
  try {
55
- let r = (await p.post(`${this.API_BASE}?module=account&action=tokentx&address=${t}`)).data;
55
+ let r = (await f.post(`${this.API_BASE}?module=account&action=tokentx&address=${t}`)).data;
56
56
  if (r.status === "1" && r.result) {
57
- let a = [...new Set(r.result.map(({ contractAddress: e }) => e))];
58
- for (let r of a) try {
59
- let a = u(e.arcTestnet, i.ERC20Contract, r), o = BigInt(await a.balanceOf(t));
57
+ let i = [...new Set(r.result.map(({ contractAddress: e }) => e))];
58
+ for (let r of i) try {
59
+ let i = d(e.arcTestnet, a.ERC20Contract, r), o = BigInt(await i.balanceOf(t));
60
60
  o > 0n && n.push({
61
61
  contractAddress: r,
62
62
  tokenBalance: o.toString()
63
63
  });
64
64
  } catch (e) {
65
- o.error("Error fetching ARC testnet token balance:", e);
65
+ s.error("Error fetching ARC testnet token balance:", e);
66
66
  }
67
67
  }
68
68
  } catch (e) {
69
- o.error("Error fetching ARC testnet token transactions:", e);
69
+ s.error("Error fetching ARC testnet token transactions:", e);
70
70
  }
71
71
  return n.filter(({ tokenBalance: e }) => Number(e) !== 0).map(({ contractAddress: e }) => e);
72
72
  }
73
73
  async getNFTTokens(e) {
74
74
  let t = `${this.API_BASE}/v2/addresses/${e}/nft?type=ERC-721,ERC-1155`, n = [], r;
75
75
  do {
76
- let e = r ? `&${new URLSearchParams(r)}` : "", { data: i } = await p.get(`${t}${e}`), { items: a = [], next_page_params: o } = i;
76
+ let e = r ? `&${new URLSearchParams(r)}` : "", { data: i } = await f.get(`${t}${e}`), { items: a = [], next_page_params: o } = i;
77
77
  n.push(...a), r = o ? {
78
78
  token_contract_address_hash: o.token_contract_address_hash,
79
79
  token_id: o.token_id,
@@ -1 +1 @@
1
- require(`../../../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../constants/protocol.constants.cjs`),t=require(`../../functions/utils/caseInsensitive.utils.cjs`),n=require(`../../types/cache.types.cjs`),r=require(`../../error-handling/logger.cjs`),i=require(`../../functions/utils/tron.utils.cjs`),a=require(`../../API/API.cjs`),o=require(`../../functions/utils/string.utils.cjs`),s=require(`./token-visibility-db.cjs`),c=require(`../../functions/utils/erc20tokenFunctions.cjs`),l=require(`../../functions/utils/create-provider.cjs`),u=require(`../../constants/events.constants.cjs`);require(`../../functions/index.cjs`);let d=require(`ethers`),f=require(`idb-keyval`),p=require(`async-mutex`);var m=new class{fetchedTokens={};updateMutexes={};transferEventTopic=d.ethers.id(`Transfer(address,address,uint256)`);chunkSize=2e3;getMutex(e){return this.updateMutexes[e]||(this.updateMutexes[e]=new p.Mutex),this.updateMutexes[e]}async getPublicTokens(e,t){let r=o.getStateKey(t,e);return c.overlayTokensWithRegistryData((await(0,f.get)(n.StorageKeys.EVENTS_PUBLIC_TOKENS))?.[r]||[],e)}async getFetchedTokens(e,t){let n=o.getStateKey(t,e);return c.overlayTokensWithRegistryData(this.fetchedTokens[n]||[],e)}async fetchAndUpdatePublicTokens(e,i){let a=o.getStateKey(e,i);await this.getMutex(a).runExclusive(async()=>{try{let r=(await this.getPublicTokens(i,e)).map(e=>e.erc20TokenAddress),{toEvents:o,fromEvents:c,latestBlock:l}=await this.getEvents(e,i),u=[...o,...c],{erc20Tokens:d}=await this.fetchPublicTokens(u,i,r),p=await s.tokenVisibilityStorage.hideSpamsAndFetchHiddenTokensAddresses(i,d),m=d.filter(e=>!t.lowerCaseIncludes(p,e.erc20TokenAddress));await(0,f.update)(n.StorageKeys.EVENTS_PUBLIC_TOKENS,(e={})=>{let n=e[a]||[],r=n.map(e=>e.erc20TokenAddress),i=m.filter(e=>!t.lowerCaseIncludes(r,e.erc20TokenAddress));n.push(...i);let s=this.updateTokenIds(c,o,n),l={...e,[a]:s};return this.fetchedTokens=l,l}),l&&await this.updateLastProcessedBlock(i,e,l)}catch(e){r.Logger.error(`public tokens db error`,e)}})}async getLastProcessedBlock(e,t){return(await(0,f.get)(n.StorageKeys.PUBLIC_TOKENS_LAST_PROCESSED_BLOCKS)||{})[o.getStateKey(t,e)]||u.EVENTS_INITIAL_BLOCKS[e]}async updateLastProcessedBlock(e,t,r){await(0,f.update)(n.StorageKeys.PUBLIC_TOKENS_LAST_PROCESSED_BLOCKS,(n={})=>{let i=o.getStateKey(t,e);return{...n,[i]:r}})}async getEvents(e,t){try{let n=l.createJsonRpcProvider(t),r=await this.getLastProcessedBlock(t,e)+1,a=await n.getBlockNumber(),o=i.addressToHexFormat(e),s=d.ethers.zeroPadValue(o,32),c=[],u=[];for(let e=r;e<=a;e+=this.chunkSize){let t=Math.min(e+this.chunkSize-1,a),r={topics:[this.transferEventTopic,null,s],fromBlock:e,toBlock:t},i={topics:[this.transferEventTopic,s,null],fromBlock:e,toBlock:t},[o,l]=await Promise.all([n.getLogs(r),n.getLogs(i)]);c.push(...o),u.push(...l)}return{toEvents:c,fromEvents:u,latestBlock:a}}catch(n){return r.Logger.error(`Error fetching events:`,n,`chainId`,t,`walletAddress`,e),{toEvents:[],fromEvents:[],latestBlock:void 0}}}updateTokenIds(e,t,n){let r=new Map;return n.forEach(e=>{if(c.isNFTToken(e)&&e.tokenIds){let t=e.erc20TokenAddress.toLowerCase();r.set(t,[...e.tokenIds])}}),t.forEach(e=>{if(e.topics.length<=3)return;let t=e.address.toLowerCase(),n=BigInt(e.topics[3]).toString();r.has(t)||r.set(t,[]),r.get(t)?.push(n)}),e.forEach(e=>{if(e.topics.length<=3)return;let t=e.address.toLowerCase(),n=r.get(t);if(n?.length){let t=BigInt(e.topics[3]).toString(),r=n.indexOf(t);r!==-1&&n.splice(r,1)}}),n.forEach(e=>{if(c.isNFTToken(e)){let t=e.erc20TokenAddress.toLowerCase(),n=r.get(t);e.tokenIds=n?.length&&n.length>0?n:void 0}}),n}async fetchPublicTokens(n,i,o){try{let r=[e.zeroAddress,...new Set(n.map(e=>e.address))].filter(e=>e&&!t.lowerCaseIncludes(o,e));return r.length?{erc20Tokens:(await a.API.tokensInfoCall(i,r)).filter(e=>!!e)}:{erc20Tokens:[]}}catch(e){return r.Logger.error(`Error fetching public tokens:`,e),{erc20Tokens:[]}}}};exports.eventsPublicTokensDB=m;
1
+ require(`../../../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../constants/protocol.constants.cjs`),t=require(`../../functions/utils/caseInsensitive.utils.cjs`),n=require(`../../../../shims/idb-keyval.cjs`),r=require(`../../types/cache.types.cjs`),i=require(`../../error-handling/logger.cjs`),a=require(`../../functions/utils/tron.utils.cjs`),o=require(`../../API/API.cjs`),s=require(`../../functions/utils/string.utils.cjs`),c=require(`./token-visibility-db.cjs`),l=require(`../../functions/utils/erc20tokenFunctions.cjs`),u=require(`../../functions/utils/create-provider.cjs`),d=require(`../../constants/events.constants.cjs`);require(`../../functions/index.cjs`);let f=require(`ethers`),p=require(`async-mutex`);var m=n.default,h=new class{fetchedTokens={};updateMutexes={};transferEventTopic=f.ethers.id(`Transfer(address,address,uint256)`);chunkSize=2e3;getMutex(e){return this.updateMutexes[e]||(this.updateMutexes[e]=new p.Mutex),this.updateMutexes[e]}async getPublicTokens(e,t){let n=s.getStateKey(t,e);return l.overlayTokensWithRegistryData((await(0,m.get)(r.StorageKeys.EVENTS_PUBLIC_TOKENS))?.[n]||[],e)}async getFetchedTokens(e,t){let n=s.getStateKey(t,e);return l.overlayTokensWithRegistryData(this.fetchedTokens[n]||[],e)}async fetchAndUpdatePublicTokens(e,n){let a=s.getStateKey(e,n);await this.getMutex(a).runExclusive(async()=>{try{let i=(await this.getPublicTokens(n,e)).map(e=>e.erc20TokenAddress),{toEvents:o,fromEvents:s,latestBlock:l}=await this.getEvents(e,n),u=[...o,...s],{erc20Tokens:d}=await this.fetchPublicTokens(u,n,i),f=await c.tokenVisibilityStorage.hideSpamsAndFetchHiddenTokensAddresses(n,d),p=d.filter(e=>!t.lowerCaseIncludes(f,e.erc20TokenAddress));await(0,m.update)(r.StorageKeys.EVENTS_PUBLIC_TOKENS,(e={})=>{let n=e[a]||[],r=n.map(e=>e.erc20TokenAddress),i=p.filter(e=>!t.lowerCaseIncludes(r,e.erc20TokenAddress));n.push(...i);let c=this.updateTokenIds(s,o,n),l={...e,[a]:c};return this.fetchedTokens=l,l}),l&&await this.updateLastProcessedBlock(n,e,l)}catch(e){i.Logger.error(`public tokens db error`,e)}})}async getLastProcessedBlock(e,t){return(await(0,m.get)(r.StorageKeys.PUBLIC_TOKENS_LAST_PROCESSED_BLOCKS)||{})[s.getStateKey(t,e)]||d.EVENTS_INITIAL_BLOCKS[e]}async updateLastProcessedBlock(e,t,n){await(0,m.update)(r.StorageKeys.PUBLIC_TOKENS_LAST_PROCESSED_BLOCKS,(r={})=>{let i=s.getStateKey(t,e);return{...r,[i]:n}})}async getEvents(e,t){try{let n=u.createJsonRpcProvider(t),r=await this.getLastProcessedBlock(t,e)+1,i=await n.getBlockNumber(),o=a.addressToHexFormat(e),s=f.ethers.zeroPadValue(o,32),c=[],l=[];for(let e=r;e<=i;e+=this.chunkSize){let t=Math.min(e+this.chunkSize-1,i),r={topics:[this.transferEventTopic,null,s],fromBlock:e,toBlock:t},a={topics:[this.transferEventTopic,s,null],fromBlock:e,toBlock:t},[o,u]=await Promise.all([n.getLogs(r),n.getLogs(a)]);c.push(...o),l.push(...u)}return{toEvents:c,fromEvents:l,latestBlock:i}}catch(n){return i.Logger.error(`Error fetching events:`,n,`chainId`,t,`walletAddress`,e),{toEvents:[],fromEvents:[],latestBlock:void 0}}}updateTokenIds(e,t,n){let r=new Map;return n.forEach(e=>{if(l.isNFTToken(e)&&e.tokenIds){let t=e.erc20TokenAddress.toLowerCase();r.set(t,[...e.tokenIds])}}),t.forEach(e=>{if(e.topics.length<=3)return;let t=e.address.toLowerCase(),n=BigInt(e.topics[3]).toString();r.has(t)||r.set(t,[]),r.get(t)?.push(n)}),e.forEach(e=>{if(e.topics.length<=3)return;let t=e.address.toLowerCase(),n=r.get(t);if(n?.length){let t=BigInt(e.topics[3]).toString(),r=n.indexOf(t);r!==-1&&n.splice(r,1)}}),n.forEach(e=>{if(l.isNFTToken(e)){let t=e.erc20TokenAddress.toLowerCase(),n=r.get(t);e.tokenIds=n?.length&&n.length>0?n:void 0}}),n}async fetchPublicTokens(n,r,a){try{let i=[e.zeroAddress,...new Set(n.map(e=>e.address))].filter(e=>e&&!t.lowerCaseIncludes(a,e));return i.length?{erc20Tokens:(await o.API.tokensInfoCall(r,i)).filter(e=>!!e)}:{erc20Tokens:[]}}catch(e){return i.Logger.error(`Error fetching public tokens:`,e),{erc20Tokens:[]}}}};exports.eventsPublicTokensDB=h;
@@ -1,70 +1,71 @@
1
1
  import { zeroAddress as e } from "../../constants/protocol.constants.mjs";
2
2
  import { lowerCaseIncludes as t } from "../../functions/utils/caseInsensitive.utils.mjs";
3
- import { StorageKeys as n } from "../../types/cache.types.mjs";
4
- import { Logger as r } from "../../error-handling/logger.mjs";
5
- import { addressToHexFormat as i } from "../../functions/utils/tron.utils.mjs";
6
- import { API as a } from "../../API/API.mjs";
7
- import { getStateKey as o } from "../../functions/utils/string.utils.mjs";
8
- import { tokenVisibilityStorage as s } from "./token-visibility-db.mjs";
9
- import { isNFTToken as c, overlayTokensWithRegistryData as l } from "../../functions/utils/erc20tokenFunctions.mjs";
10
- import { createJsonRpcProvider as u } from "../../functions/utils/create-provider.mjs";
11
- import { EVENTS_INITIAL_BLOCKS as d } from "../../constants/events.constants.mjs";
3
+ import { require_idb_keyval as n } from "../../../../shims/idb-keyval.mjs";
4
+ import { StorageKeys as r } from "../../types/cache.types.mjs";
5
+ import { Logger as i } from "../../error-handling/logger.mjs";
6
+ import { addressToHexFormat as a } from "../../functions/utils/tron.utils.mjs";
7
+ import { API as o } from "../../API/API.mjs";
8
+ import { getStateKey as s } from "../../functions/utils/string.utils.mjs";
9
+ import { tokenVisibilityStorage as c } from "./token-visibility-db.mjs";
10
+ import { isNFTToken as l, overlayTokensWithRegistryData as u } from "../../functions/utils/erc20tokenFunctions.mjs";
11
+ import { createJsonRpcProvider as d } from "../../functions/utils/create-provider.mjs";
12
+ import { EVENTS_INITIAL_BLOCKS as f } from "../../constants/events.constants.mjs";
12
13
  import "../../functions/index.mjs";
13
- import { ethers as f } from "ethers";
14
- import { get as p, update as m } from "idb-keyval";
15
- import { Mutex as h } from "async-mutex";
16
- var g = new class {
14
+ import { ethers as p } from "ethers";
15
+ import { Mutex as m } from "async-mutex";
16
+ //#region common/src/data-structures/TokenDBs/EventsPublicTokensDB.ts
17
+ var h = n(), g = new class {
17
18
  fetchedTokens = {};
18
19
  updateMutexes = {};
19
- transferEventTopic = f.id("Transfer(address,address,uint256)");
20
+ transferEventTopic = p.id("Transfer(address,address,uint256)");
20
21
  chunkSize = 2e3;
21
22
  getMutex(e) {
22
- return this.updateMutexes[e] || (this.updateMutexes[e] = new h()), this.updateMutexes[e];
23
+ return this.updateMutexes[e] || (this.updateMutexes[e] = new m()), this.updateMutexes[e];
23
24
  }
24
25
  async getPublicTokens(e, t) {
25
- let r = o(t, e);
26
- return l((await p(n.EVENTS_PUBLIC_TOKENS))?.[r] || [], e);
26
+ let n = s(t, e);
27
+ return u((await (0, h.get)(r.EVENTS_PUBLIC_TOKENS))?.[n] || [], e);
27
28
  }
28
29
  async getFetchedTokens(e, t) {
29
- let n = o(t, e);
30
- return l(this.fetchedTokens[n] || [], e);
30
+ let n = s(t, e);
31
+ return u(this.fetchedTokens[n] || [], e);
31
32
  }
32
- async fetchAndUpdatePublicTokens(e, i) {
33
- let a = o(e, i);
33
+ async fetchAndUpdatePublicTokens(e, n) {
34
+ let a = s(e, n);
34
35
  await this.getMutex(a).runExclusive(async () => {
35
36
  try {
36
- let r = (await this.getPublicTokens(i, e)).map((e) => e.erc20TokenAddress), { toEvents: o, fromEvents: c, latestBlock: l } = await this.getEvents(e, i), u = [...o, ...c], { erc20Tokens: d } = await this.fetchPublicTokens(u, i, r), f = await s.hideSpamsAndFetchHiddenTokensAddresses(i, d), p = d.filter((e) => !t(f, e.erc20TokenAddress));
37
- await m(n.EVENTS_PUBLIC_TOKENS, (e = {}) => {
37
+ let i = (await this.getPublicTokens(n, e)).map((e) => e.erc20TokenAddress), { toEvents: o, fromEvents: s, latestBlock: l } = await this.getEvents(e, n), u = [...o, ...s], { erc20Tokens: d } = await this.fetchPublicTokens(u, n, i), f = await c.hideSpamsAndFetchHiddenTokensAddresses(n, d), p = d.filter((e) => !t(f, e.erc20TokenAddress));
38
+ await (0, h.update)(r.EVENTS_PUBLIC_TOKENS, (e = {}) => {
38
39
  let n = e[a] || [], r = n.map((e) => e.erc20TokenAddress), i = p.filter((e) => !t(r, e.erc20TokenAddress));
39
40
  n.push(...i);
40
- let s = this.updateTokenIds(c, o, n), l = {
41
+ let c = this.updateTokenIds(s, o, n), l = {
41
42
  ...e,
42
- [a]: s
43
+ [a]: c
43
44
  };
44
45
  return this.fetchedTokens = l, l;
45
- }), l && await this.updateLastProcessedBlock(i, e, l);
46
+ }), l && await this.updateLastProcessedBlock(n, e, l);
46
47
  } catch (e) {
47
- r.error("public tokens db error", e);
48
+ i.error("public tokens db error", e);
48
49
  }
49
50
  });
50
51
  }
51
52
  async getLastProcessedBlock(e, t) {
52
- return (await p(n.PUBLIC_TOKENS_LAST_PROCESSED_BLOCKS) || {})[o(t, e)] || d[e];
53
+ return (await (0, h.get)(r.PUBLIC_TOKENS_LAST_PROCESSED_BLOCKS) || {})[s(t, e)] || f[e];
53
54
  }
54
- async updateLastProcessedBlock(e, t, r) {
55
- await m(n.PUBLIC_TOKENS_LAST_PROCESSED_BLOCKS, (n = {}) => {
56
- let i = o(t, e);
55
+ async updateLastProcessedBlock(e, t, n) {
56
+ await (0, h.update)(r.PUBLIC_TOKENS_LAST_PROCESSED_BLOCKS, (r = {}) => {
57
+ let i = s(t, e);
57
58
  return {
58
- ...n,
59
- [i]: r
59
+ ...r,
60
+ [i]: n
60
61
  };
61
62
  });
62
63
  }
63
64
  async getEvents(e, t) {
64
65
  try {
65
- let n = u(t), r = await this.getLastProcessedBlock(t, e) + 1, a = await n.getBlockNumber(), o = i(e), s = f.zeroPadValue(o, 32), c = [], l = [];
66
- for (let e = r; e <= a; e += this.chunkSize) {
67
- let t = Math.min(e + this.chunkSize - 1, a), r = {
66
+ let n = d(t), r = await this.getLastProcessedBlock(t, e) + 1, i = await n.getBlockNumber(), o = a(e), s = p.zeroPadValue(o, 32), c = [], l = [];
67
+ for (let e = r; e <= i; e += this.chunkSize) {
68
+ let t = Math.min(e + this.chunkSize - 1, i), r = {
68
69
  topics: [
69
70
  this.transferEventTopic,
70
71
  null,
@@ -72,7 +73,7 @@ var g = new class {
72
73
  ],
73
74
  fromBlock: e,
74
75
  toBlock: t
75
- }, i = {
76
+ }, a = {
76
77
  topics: [
77
78
  this.transferEventTopic,
78
79
  s,
@@ -80,16 +81,16 @@ var g = new class {
80
81
  ],
81
82
  fromBlock: e,
82
83
  toBlock: t
83
- }, [o, u] = await Promise.all([n.getLogs(r), n.getLogs(i)]);
84
+ }, [o, u] = await Promise.all([n.getLogs(r), n.getLogs(a)]);
84
85
  c.push(...o), l.push(...u);
85
86
  }
86
87
  return {
87
88
  toEvents: c,
88
89
  fromEvents: l,
89
- latestBlock: a
90
+ latestBlock: i
90
91
  };
91
92
  } catch (n) {
92
- return r.error("Error fetching events:", n, "chainId", t, "walletAddress", e), {
93
+ return i.error("Error fetching events:", n, "chainId", t, "walletAddress", e), {
93
94
  toEvents: [],
94
95
  fromEvents: [],
95
96
  latestBlock: void 0
@@ -99,7 +100,7 @@ var g = new class {
99
100
  updateTokenIds(e, t, n) {
100
101
  let r = /* @__PURE__ */ new Map();
101
102
  return n.forEach((e) => {
102
- if (c(e) && e.tokenIds) {
103
+ if (l(e) && e.tokenIds) {
103
104
  let t = e.erc20TokenAddress.toLowerCase();
104
105
  r.set(t, [...e.tokenIds]);
105
106
  }
@@ -115,18 +116,18 @@ var g = new class {
115
116
  r !== -1 && n.splice(r, 1);
116
117
  }
117
118
  }), n.forEach((e) => {
118
- if (c(e)) {
119
+ if (l(e)) {
119
120
  let t = e.erc20TokenAddress.toLowerCase(), n = r.get(t);
120
121
  e.tokenIds = n?.length && n.length > 0 ? n : void 0;
121
122
  }
122
123
  }), n;
123
124
  }
124
- async fetchPublicTokens(n, i, o) {
125
+ async fetchPublicTokens(n, r, a) {
125
126
  try {
126
- let r = [e, ...new Set(n.map((e) => e.address))].filter((e) => e && !t(o, e));
127
- return r.length ? { erc20Tokens: (await a.tokensInfoCall(i, r)).filter((e) => !!e) } : { erc20Tokens: [] };
127
+ let i = [e, ...new Set(n.map((e) => e.address))].filter((e) => e && !t(a, e));
128
+ return i.length ? { erc20Tokens: (await o.tokensInfoCall(r, i)).filter((e) => !!e) } : { erc20Tokens: [] };
128
129
  } catch (e) {
129
- return r.error("Error fetching public tokens:", e), { erc20Tokens: [] };
130
+ return i.error("Error fetching public tokens:", e), { erc20Tokens: [] };
130
131
  }
131
132
  }
132
133
  }();
@@ -1 +1 @@
1
- require(`../../../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../functions/utils/caseInsensitive.utils.cjs`),t=require(`../../types/cache.types.cjs`),n=require(`../../error-handling/logger.cjs`),r=require(`../../API/API.cjs`),i=require(`../../functions/utils/string.utils.cjs`),a=require(`./token-visibility-db.cjs`);let o=require(`idb-keyval`);var s=class{fetchedTokens={};initalFetched=!1;async updateFetchedTokens(){let e=await(0,o.get)(t.StorageKeys.PRIVATE_TOKENS);this.fetchedTokens=e??{},this.initalFetched=!0}async getPrivateTokens(e,n){let r=i.getStateKey(n,e);return(await(0,o.get)(t.StorageKeys.PRIVATE_TOKENS))?.[r]||[]}async fetchPrivateTokens(t,i,a){try{let n=[...new Set(i)].filter(t=>t&&!e.lowerCaseIncludes(a,t));if(!n.length)return[];let o=(await r.API.tokensInfoCall(t,n)).filter(e=>!!e),s=new Map;return o.forEach(e=>{s.set(e.erc20TokenAddress.toLowerCase(),e)}),Array.from(s.values())}catch(e){return n.Logger.error(`Error fetching private tokens:`,e),[]}}async fetchAndUpdatePrivateTokens(n,r,s,c){let l=(await this.getPrivateTokens(r,s)).map(e=>e.erc20TokenAddress),u=c??await this.fetchPrivateTokens(r,n,l),d=await a.tokenVisibilityStorage.hideSpamsAndFetchHiddenTokensAddresses(r,u),f=i.getStateKey(s,r);await(0,o.update)(t.StorageKeys.PRIVATE_TOKENS,(t={})=>{let n=t?.[f]||[],r=n.map(e=>e.erc20TokenAddress),i=u.filter(t=>!e.lowerCaseIncludes(r,t.erc20TokenAddress));n.push(...i);let a=n.filter(t=>!e.lowerCaseIncludes(d,t.erc20TokenAddress)),o={...t,[f]:a};return this.fetchedTokens=o,o})}getFetchedTokens(e,t){let n=i.getStateKey(t,e);return this.fetchedTokens[n]||[]}},c=new s;exports.PrivateTokensDB=s,exports.privateTokensDB=c;
1
+ const e=require(`../../functions/utils/caseInsensitive.utils.cjs`),t=require(`../../../../shims/idb-keyval.cjs`),n=require(`../../types/cache.types.cjs`),r=require(`../../error-handling/logger.cjs`),i=require(`../../API/API.cjs`),a=require(`../../functions/utils/string.utils.cjs`),o=require(`./token-visibility-db.cjs`);var s=t.default,c=class{fetchedTokens={};initalFetched=!1;async updateFetchedTokens(){let e=await(0,s.get)(n.StorageKeys.PRIVATE_TOKENS);this.fetchedTokens=e??{},this.initalFetched=!0}async getPrivateTokens(e,t){let r=a.getStateKey(t,e);return(await(0,s.get)(n.StorageKeys.PRIVATE_TOKENS))?.[r]||[]}async fetchPrivateTokens(t,n,a){try{let r=[...new Set(n)].filter(t=>t&&!e.lowerCaseIncludes(a,t));if(!r.length)return[];let o=(await i.API.tokensInfoCall(t,r)).filter(e=>!!e),s=new Map;return o.forEach(e=>{s.set(e.erc20TokenAddress.toLowerCase(),e)}),Array.from(s.values())}catch(e){return r.Logger.error(`Error fetching private tokens:`,e),[]}}async fetchAndUpdatePrivateTokens(t,r,i,c){let l=(await this.getPrivateTokens(r,i)).map(e=>e.erc20TokenAddress),u=c??await this.fetchPrivateTokens(r,t,l),d=await o.tokenVisibilityStorage.hideSpamsAndFetchHiddenTokensAddresses(r,u),f=a.getStateKey(i,r);await(0,s.update)(n.StorageKeys.PRIVATE_TOKENS,(t={})=>{let n=t?.[f]||[],r=n.map(e=>e.erc20TokenAddress),i=u.filter(t=>!e.lowerCaseIncludes(r,t.erc20TokenAddress));n.push(...i);let a=n.filter(t=>!e.lowerCaseIncludes(d,t.erc20TokenAddress)),o={...t,[f]:a};return this.fetchedTokens=o,o})}getFetchedTokens(e,t){let n=a.getStateKey(t,e);return this.fetchedTokens[n]||[]}},l=new c;exports.PrivateTokensDB=c,exports.privateTokensDB=l;