@sabaaa1/common 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (445) hide show
  1. package/.env.example +5 -0
  2. package/.eslintrc.json +18 -0
  3. package/README.md +164 -0
  4. package/copyPackageJson.js +81 -0
  5. package/handleCDNWorkers.js +92 -0
  6. package/jest.config.ts +10 -0
  7. package/package.json +101 -0
  8. package/polyfillWorker.ts +15 -0
  9. package/project.json +32 -0
  10. package/src/API/API.ts +203 -0
  11. package/src/API/admin-calls.ts +8 -0
  12. package/src/API/ai-calls.ts +48 -0
  13. package/src/API/brotherhoodCalls.ts +184 -0
  14. package/src/API/callLifiAPI.ts +41 -0
  15. package/src/API/callMonitor.ts +9 -0
  16. package/src/API/callOdosAPI.ts +89 -0
  17. package/src/API/callOneInchAPI.ts +47 -0
  18. package/src/API/callRelayer.ts +23 -0
  19. package/src/API/checkRisk.ts +7 -0
  20. package/src/API/duneAPI.ts +26 -0
  21. package/src/API/enclaveCalls.ts +23 -0
  22. package/src/API/fetchCommitmentsCache.ts +63 -0
  23. package/src/API/generate-trading-points.ts +77 -0
  24. package/src/API/get-token-data.ts +12 -0
  25. package/src/API/getBridgeProtocols.ts +16 -0
  26. package/src/API/getCoingeckoPrice.ts +59 -0
  27. package/src/API/getGasEstimates.ts +30 -0
  28. package/src/API/getLifiStatus.ts +35 -0
  29. package/src/API/getRelayerURL.ts +27 -0
  30. package/src/API/getServerURL.ts +116 -0
  31. package/src/API/getTokenPrice.ts +39 -0
  32. package/src/API/getWebsiteURL.ts +58 -0
  33. package/src/API/index.ts +19 -0
  34. package/src/API/is-tx-stateless.ts +32 -0
  35. package/src/API/kycCalls.ts +81 -0
  36. package/src/API/leaderboardCalls.ts +32 -0
  37. package/src/API/mysteryBoxesCalls.ts +141 -0
  38. package/src/API/passwordCalls.ts +34 -0
  39. package/src/API/proxyAccountsCalls.ts +40 -0
  40. package/src/API/referralsCalls.ts +52 -0
  41. package/src/API/relayCalls.ts +14 -0
  42. package/src/API/restoreSnapshots.ts +7 -0
  43. package/src/API/rewardsUserCalls.ts +124 -0
  44. package/src/API/send-telegram-callback.ts +17 -0
  45. package/src/API/simulate-batch-tx.ts +19 -0
  46. package/src/API/tenderly.api.ts +96 -0
  47. package/src/API/token-calls.ts +19 -0
  48. package/src/API/weeklyAnalyticCalls.ts +43 -0
  49. package/src/constants/activity.constants.ts +10 -0
  50. package/src/constants/addresses.constants.ts +74 -0
  51. package/src/constants/assets.constants.ts +15 -0
  52. package/src/constants/backend.constants.ts +16 -0
  53. package/src/constants/balance.constants.ts +1 -0
  54. package/src/constants/bridging.constants.ts +5 -0
  55. package/src/constants/chains.constants.ts +194 -0
  56. package/src/constants/coingecko.constants.ts +67 -0
  57. package/src/constants/contracts.constants.ts +106 -0
  58. package/src/constants/conversion.constants.ts +1 -0
  59. package/src/constants/deploy-data/deploy-data-arbMainnet.json +5685 -0
  60. package/src/constants/deploy-data/deploy-data-arcTestnet.json +6157 -0
  61. package/src/constants/deploy-data/deploy-data-avalanche.json +5921 -0
  62. package/src/constants/deploy-data/deploy-data-base.json +5695 -0
  63. package/src/constants/deploy-data/deploy-data-bnbMainnet.json +5921 -0
  64. package/src/constants/deploy-data/deploy-data-ethMainnet.json +5922 -0
  65. package/src/constants/deploy-data/deploy-data-localhost.json +5921 -0
  66. package/src/constants/deploy-data/deploy-data-optimism.json +5687 -0
  67. package/src/constants/deploy-data/deploy-data-polygon.json +5695 -0
  68. package/src/constants/deploy-data/index.ts +21 -0
  69. package/src/constants/events.constants.ts +10 -0
  70. package/src/constants/fees.constants.ts +4 -0
  71. package/src/constants/function-signatures.constants.ts +6 -0
  72. package/src/constants/index.ts +30 -0
  73. package/src/constants/kyc.constants.ts +202 -0
  74. package/src/constants/lifi.constants.ts +1 -0
  75. package/src/constants/mediaUrls.constants.ts +25 -0
  76. package/src/constants/mystery-boxes.constants.ts +402 -0
  77. package/src/constants/oauthUrls.constants.ts +7 -0
  78. package/src/constants/permit2.constants.ts +28 -0
  79. package/src/constants/presale.constants.ts +503 -0
  80. package/src/constants/protocol.constants.ts +65 -0
  81. package/src/constants/reorg-depths.constants.ts +13 -0
  82. package/src/constants/rewards.constants.ts +27 -0
  83. package/src/constants/save-depths.ts +13 -0
  84. package/src/constants/server.constants.ts +233 -0
  85. package/src/constants/tasks.constants.ts +205 -0
  86. package/src/constants/token-data/ERC20Registry.ts +90 -0
  87. package/src/constants/token-data/arbMainnetRegistry.json +1841 -0
  88. package/src/constants/token-data/arbMainnetRegistryFixed.json +1841 -0
  89. package/src/constants/token-data/arcTestnetRegistry.json +436 -0
  90. package/src/constants/token-data/avalancheRegistry.json +729 -0
  91. package/src/constants/token-data/avalancheRegistryFixed.json +729 -0
  92. package/src/constants/token-data/baseRegistry.json +1134 -0
  93. package/src/constants/token-data/baseRegistryFixed.json +1134 -0
  94. package/src/constants/token-data/bnbMainnetRegistry.json +900 -0
  95. package/src/constants/token-data/bnbMainnetRegistryFixed.json +900 -0
  96. package/src/constants/token-data/ethMainnetRegistry.json +4298 -0
  97. package/src/constants/token-data/ethMainnetRegistryFixed.json +4298 -0
  98. package/src/constants/token-data/index.ts +60 -0
  99. package/src/constants/token-data/localhostRegistry.json +2784 -0
  100. package/src/constants/token-data/optimismRegistry.json +701 -0
  101. package/src/constants/token-data/optimismRegistryFixed.json +701 -0
  102. package/src/constants/token-data/polygonRegistry.json +2309 -0
  103. package/src/constants/token-data/polygonRegistryFixed.json +2309 -0
  104. package/src/constants/token-data/popularTokens.constants.ts +11 -0
  105. package/src/constants/token-data/tokenPricing.consts.ts +2 -0
  106. package/src/constants/token.limits.constants.ts +31 -0
  107. package/src/constants/vite.constants.ts +74 -0
  108. package/src/constants/wallet.constants.ts +9 -0
  109. package/src/crypto/babyJub.ts +31 -0
  110. package/src/crypto/index.ts +3 -0
  111. package/src/crypto/poseidon.ts +36 -0
  112. package/src/crypto/preProcessing.ts +20 -0
  113. package/src/data-structures/ApprovalDBs/EventsPublicApprovalsDB.ts +288 -0
  114. package/src/data-structures/ApprovalDBs/index.ts +1 -0
  115. package/src/data-structures/Hinkal/Hinkal.ts +746 -0
  116. package/src/data-structures/Hinkal/IHinkal.ts +315 -0
  117. package/src/data-structures/Hinkal/handleAutoDepositBack.ts +138 -0
  118. package/src/data-structures/Hinkal/hinkalActionFundApproveAndTransact.ts +64 -0
  119. package/src/data-structures/Hinkal/hinkalActionReceive.ts +65 -0
  120. package/src/data-structures/Hinkal/hinkalActionStake.ts +152 -0
  121. package/src/data-structures/Hinkal/hinkalApprove.ts +170 -0
  122. package/src/data-structures/Hinkal/hinkalCheckTokenRegistry.ts +26 -0
  123. package/src/data-structures/Hinkal/hinkalDeposit.ts +199 -0
  124. package/src/data-structures/Hinkal/hinkalGetRecipientInfo.ts +12 -0
  125. package/src/data-structures/Hinkal/hinkalGetZkMeProvider.ts +31 -0
  126. package/src/data-structures/Hinkal/hinkalInsideTransact.ts +190 -0
  127. package/src/data-structures/Hinkal/hinkalMultiSend.ts +26 -0
  128. package/src/data-structures/Hinkal/hinkalPrivateWallet.ts +198 -0
  129. package/src/data-structures/Hinkal/hinkalProoflessDeposit.ts +91 -0
  130. package/src/data-structures/Hinkal/hinkalProxySwap.ts +91 -0
  131. package/src/data-structures/Hinkal/hinkalSignSubAccount.ts +28 -0
  132. package/src/data-structures/Hinkal/hinkalSwap.ts +157 -0
  133. package/src/data-structures/Hinkal/hinkalTransfer.ts +171 -0
  134. package/src/data-structures/Hinkal/hinkalWithdraw.ts +161 -0
  135. package/src/data-structures/Hinkal/index.ts +9 -0
  136. package/src/data-structures/Hinkal/resetMerkleTrees.ts +64 -0
  137. package/src/data-structures/IndexedDB/activity-db.ts +204 -0
  138. package/src/data-structures/IndexedDB/balances-db.ts +97 -0
  139. package/src/data-structures/IndexedDB/contact-db.ts +81 -0
  140. package/src/data-structures/IndexedDB/index.ts +6 -0
  141. package/src/data-structures/IndexedDB/prices-db.ts +89 -0
  142. package/src/data-structures/IndexedDB/private-balances-db.ts +31 -0
  143. package/src/data-structures/IndexedDB/signatures-db.ts +62 -0
  144. package/src/data-structures/MultiThreadedUtxoUtils/MultiThreadedUtxoUtils.ts +152 -0
  145. package/src/data-structures/TokenDBs/AlchemyPublicTokensDB.ts +224 -0
  146. package/src/data-structures/TokenDBs/ArcPublicTokensDB.ts +198 -0
  147. package/src/data-structures/TokenDBs/EventsPublicTokensDB.ts +216 -0
  148. package/src/data-structures/TokenDBs/IPublicTokensDB.ts +7 -0
  149. package/src/data-structures/TokenDBs/PrivateTokensDB.ts +96 -0
  150. package/src/data-structures/TokenDBs/PublicTokensDB.ts +49 -0
  151. package/src/data-structures/TokenDBs/index.ts +4 -0
  152. package/src/data-structures/TokenDBs/token-visibility-db.ts +154 -0
  153. package/src/data-structures/ValueCache/ValueCache.ts +29 -0
  154. package/src/data-structures/ValueCache/index.ts +1 -0
  155. package/src/data-structures/cacheDevices/AttachableMemoryCacheDevice.ts +33 -0
  156. package/src/data-structures/cacheDevices/BaseCacheDevice.ts +30 -0
  157. package/src/data-structures/cacheDevices/FileCacheDevice.ts +59 -0
  158. package/src/data-structures/cacheDevices/LocalStorageCacheDevice.ts +36 -0
  159. package/src/data-structures/cacheDevices/index.ts +2 -0
  160. package/src/data-structures/crypto-keys/decodeUTXO.ts +60 -0
  161. package/src/data-structures/crypto-keys/encryptDecryptUtxo.ts +74 -0
  162. package/src/data-structures/crypto-keys/index.ts +4 -0
  163. package/src/data-structures/crypto-keys/keyUtils.ts +8 -0
  164. package/src/data-structures/crypto-keys/keys.ts +203 -0
  165. package/src/data-structures/custom-token-registry/CustomTokenRegistry.ts +49 -0
  166. package/src/data-structures/event-service/AbstractAccessTokenSnapshotService.ts +142 -0
  167. package/src/data-structures/event-service/AbstractApprovalsSnapshotService.ts +152 -0
  168. package/src/data-structures/event-service/AbstractCommitmentsSnapshotService.ts +116 -0
  169. package/src/data-structures/event-service/AbstractEventService.ts +44 -0
  170. package/src/data-structures/event-service/AbstractNullifierSnapshotService.ts +76 -0
  171. package/src/data-structures/event-service/AbstractSnapshotService.ts +63 -0
  172. package/src/data-structures/event-service/BlockchainEventEmitter.ts +132 -0
  173. package/src/data-structures/event-service/index.ts +7 -0
  174. package/src/data-structures/index.ts +18 -0
  175. package/src/data-structures/merkle-tree/MerkleTree.test.ts +77 -0
  176. package/src/data-structures/merkle-tree/MerkleTree.ts +253 -0
  177. package/src/data-structures/merkle-tree/MerkleTreeIncompleteError.ts +6 -0
  178. package/src/data-structures/merkle-tree/getPatchedAccessTokenMerkleTree.ts +24 -0
  179. package/src/data-structures/merkle-tree/index.ts +3 -0
  180. package/src/data-structures/presale/PresaleContractWrapper.ts +80 -0
  181. package/src/data-structures/presale/index.ts +1 -0
  182. package/src/data-structures/provider-adapter/IProviderAdapter.ts +43 -0
  183. package/src/data-structures/snapshot/ClientAccessTokenSnapshotService.ts +41 -0
  184. package/src/data-structures/snapshot/ClientApprovalsSnapshotService.ts +36 -0
  185. package/src/data-structures/snapshot/ClientCommitmentsSnapshotService.ts +30 -0
  186. package/src/data-structures/snapshot/ClientNullifierSnapshotService.ts +28 -0
  187. package/src/data-structures/snapshot/SnapshotFetcherService.ts +68 -0
  188. package/src/data-structures/snapshot/index.ts +1 -0
  189. package/src/data-structures/token-price-fetcher/TokenChecker.ts +45 -0
  190. package/src/data-structures/token-price-fetcher/index.ts +1 -0
  191. package/src/data-structures/tor/HttpClient.ts +118 -0
  192. package/src/data-structures/tor/TorAdapter.ts +94 -0
  193. package/src/data-structures/tor/TorClient.ts +283 -0
  194. package/src/data-structures/tor/WebSocketDuplex.ts +32 -0
  195. package/src/data-structures/tor/index.ts +3 -0
  196. package/src/data-structures/transactions-manager/history/history.types.ts +14 -0
  197. package/src/data-structures/transactions-manager/index.ts +1 -0
  198. package/src/data-structures/utxo/Utxo.ts +189 -0
  199. package/src/error-handling/customErrors/ErrorWithAmount.ts +8 -0
  200. package/src/error-handling/customErrors/ErrorWithTx.ts +10 -0
  201. package/src/error-handling/customErrors/FeeOverTransactionValueError.ts +16 -0
  202. package/src/error-handling/customErrors/SimulationFailureError.ts +9 -0
  203. package/src/error-handling/customErrors/customErrors.helpers.ts +39 -0
  204. package/src/error-handling/customErrors/index.ts +5 -0
  205. package/src/error-handling/error-codes.constants.ts +214 -0
  206. package/src/error-handling/get-error.message.ts +149 -0
  207. package/src/error-handling/handleErrorRestore.ts +25 -0
  208. package/src/error-handling/index.ts +7 -0
  209. package/src/error-handling/logError.ts +8 -0
  210. package/src/error-handling/logger.ts +21 -0
  211. package/src/error-handling/types.ts +10 -0
  212. package/src/externalABIs/BUSD.ts +516 -0
  213. package/src/externalABIs/BabPassport.json +24 -0
  214. package/src/externalABIs/DAI.ts +331 -0
  215. package/src/externalABIs/ERC1155.json +316 -0
  216. package/src/externalABIs/ERC20.json +297 -0
  217. package/src/externalABIs/ERC20.ts +1 -0
  218. package/src/externalABIs/ERC721.json +205 -0
  219. package/src/externalABIs/GalxePassport.json +23 -0
  220. package/src/externalABIs/IQuoterV2.json +211 -0
  221. package/src/externalABIs/ISwapRouter.json +568 -0
  222. package/src/externalABIs/IUniswapV3Factory.json +207 -0
  223. package/src/externalABIs/IUniswapV3Pool.json +999 -0
  224. package/src/externalABIs/NodeInterfaceABI.json +1 -0
  225. package/src/externalABIs/OptimismGasPriceOracle.json +1 -0
  226. package/src/externalABIs/PoLidoNftAbi.json +307 -0
  227. package/src/externalABIs/SanctionsList.ts +86 -0
  228. package/src/externalABIs/USDC.ts +718 -0
  229. package/src/externalABIs/USDR.ts +343 -0
  230. package/src/externalABIs/USDR3CRV.ts +539 -0
  231. package/src/externalABIs/USDT.ts +390 -0
  232. package/src/externalABIs/UniswapV2PoolAbi.json +66 -0
  233. package/src/externalABIs/WETH.ts +153 -0
  234. package/src/externalABIs/amToken.ts +347 -0
  235. package/src/externalABIs/index.ts +53 -0
  236. package/src/externalABIs/swapAbi.ts +442 -0
  237. package/src/externalABIs/transactionsProver.json +45 -0
  238. package/src/functions/index.ts +16 -0
  239. package/src/functions/kyc/aiPriseHelper.ts +0 -0
  240. package/src/functions/kyc/authentoHelper.ts +44 -0
  241. package/src/functions/kyc/index.ts +3 -0
  242. package/src/functions/kyc/openDefaultPassportWindow.ts +9 -0
  243. package/src/functions/kyc/passportHelper.ts +13 -0
  244. package/src/functions/kyc/zkMeHelper.ts +69 -0
  245. package/src/functions/pre-transaction/constructAdminData.ts +21 -0
  246. package/src/functions/pre-transaction/getExternalSwapAddress.ts +30 -0
  247. package/src/functions/pre-transaction/getFeeStructure.ts +44 -0
  248. package/src/functions/pre-transaction/getFlatFees.ts +88 -0
  249. package/src/functions/pre-transaction/getSignatureDataForTransact.ts +16 -0
  250. package/src/functions/pre-transaction/getVolatileTransferAmount.ts +56 -0
  251. package/src/functions/pre-transaction/index.ts +7 -0
  252. package/src/functions/pre-transaction/interaction-to-action.ts +17 -0
  253. package/src/functions/pre-transaction/merge-with-fee-structure-emporium.ts +50 -0
  254. package/src/functions/pre-transaction/merge-with-fee-structure.ts +35 -0
  255. package/src/functions/pre-transaction/outputApprovalDataProcessing.ts +95 -0
  256. package/src/functions/pre-transaction/outputUtxoProcessing.ts +52 -0
  257. package/src/functions/pre-transaction/process-gas-estimates.ts +36 -0
  258. package/src/functions/pre-transaction/shouldPatchAccessTokenMerkleTree.ts +15 -0
  259. package/src/functions/private-wallet/emporium.helpers.ts +296 -0
  260. package/src/functions/private-wallet/emporium.swap.helpers.ts +284 -0
  261. package/src/functions/private-wallet/index.ts +3 -0
  262. package/src/functions/private-wallet/opProducer.ts +33 -0
  263. package/src/functions/snarkjs/common.snarkjs.ts +377 -0
  264. package/src/functions/snarkjs/constant.ts +490 -0
  265. package/src/functions/snarkjs/constructEmporiumProof.ts +301 -0
  266. package/src/functions/snarkjs/constructGeneralZkProof.ts +281 -0
  267. package/src/functions/snarkjs/generateCircomData.ts +81 -0
  268. package/src/functions/snarkjs/generateZkProof.ts +21 -0
  269. package/src/functions/snarkjs/generateZkProofEnclave.ts +45 -0
  270. package/src/functions/snarkjs/generateZkProofSelf.ts +29 -0
  271. package/src/functions/snarkjs/getOriginalSender.ts +4 -0
  272. package/src/functions/snarkjs/getZKFiles.ts +29 -0
  273. package/src/functions/snarkjs/index.ts +4 -0
  274. package/src/functions/staking/index.ts +78 -0
  275. package/src/functions/utils/addresses.ts +37 -0
  276. package/src/functions/utils/amounts.utils.test.ts +91 -0
  277. package/src/functions/utils/amounts.utils.ts +119 -0
  278. package/src/functions/utils/arraysMatch.ts +4 -0
  279. package/src/functions/utils/cacheDevice.utils.ts +21 -0
  280. package/src/functions/utils/cacheFunctions.ts +154 -0
  281. package/src/functions/utils/caseInsensitive.utils.ts +10 -0
  282. package/src/functions/utils/convertEmporiumOpToCallInfo.ts +19 -0
  283. package/src/functions/utils/convertIntegrationProviderToExternalActionId.ts +14 -0
  284. package/src/functions/utils/create-provider.ts +11 -0
  285. package/src/functions/utils/encodeTokenWithId.ts +4 -0
  286. package/src/functions/utils/encryptInputForEnclave.ts +119 -0
  287. package/src/functions/utils/enum.utils.ts +30 -0
  288. package/src/functions/utils/erc20tokenFunctions.ts +110 -0
  289. package/src/functions/utils/ethers-formatter.utils.ts +32 -0
  290. package/src/functions/utils/evmNetworkFunctions.ts +9 -0
  291. package/src/functions/utils/external-action.utils.ts +15 -0
  292. package/src/functions/utils/fees.utils.ts +26 -0
  293. package/src/functions/utils/get-hinkal-approvals.ts +36 -0
  294. package/src/functions/utils/get-signature-header.ts +5 -0
  295. package/src/functions/utils/getBlockExplorerUrl.ts +14 -0
  296. package/src/functions/utils/getDataFromTransaction.ts +79 -0
  297. package/src/functions/utils/getRecipientInfoFromUserKeys.ts +28 -0
  298. package/src/functions/utils/inLogicMetadata.ts +9 -0
  299. package/src/functions/utils/index.ts +43 -0
  300. package/src/functions/utils/involves-permit2-op.ts +17 -0
  301. package/src/functions/utils/ipfs.ts +74 -0
  302. package/src/functions/utils/is-valid-url.ts +5 -0
  303. package/src/functions/utils/lifi.utils.ts +3 -0
  304. package/src/functions/utils/memoize.utils.ts +23 -0
  305. package/src/functions/utils/merkleTree.utils.ts +27 -0
  306. package/src/functions/utils/mutexes.utils.ts +3 -0
  307. package/src/functions/utils/mystery-box-auction.utils.ts +61 -0
  308. package/src/functions/utils/networks.utils.ts +6 -0
  309. package/src/functions/utils/nftTokenFunctions.ts +25 -0
  310. package/src/functions/utils/nickname.utils.ts +4 -0
  311. package/src/functions/utils/postToOffscreen.ts +6 -0
  312. package/src/functions/utils/prepareHinkal.ts +78 -0
  313. package/src/functions/utils/process.utils.ts +23 -0
  314. package/src/functions/utils/processUseApprovalUtxoData.ts +26 -0
  315. package/src/functions/utils/publicBalance.utils.ts +131 -0
  316. package/src/functions/utils/reloadPage.ts +1 -0
  317. package/src/functions/utils/replaceAddressInCalldata.ts +6 -0
  318. package/src/functions/utils/requireEnv.ts +10 -0
  319. package/src/functions/utils/resolve-sync.utils.ts +40 -0
  320. package/src/functions/utils/rpc-int-encode.ts +7 -0
  321. package/src/functions/utils/serialize.utils.ts +12 -0
  322. package/src/functions/utils/string.utils.ts +92 -0
  323. package/src/functions/utils/time.utils.ts +80 -0
  324. package/src/functions/utils/token-check.utils.ts +12 -0
  325. package/src/functions/utils/trimFieldValues.ts +24 -0
  326. package/src/functions/utils/upToDateState.ts +12 -0
  327. package/src/functions/utils/userAgent.ts +26 -0
  328. package/src/functions/utils/walletBalances.utils.ts +117 -0
  329. package/src/functions/web3/EIP-712.test.ts +302 -0
  330. package/src/functions/web3/EIP-712.ts +243 -0
  331. package/src/functions/web3/etherFunctions.test.ts +129 -0
  332. package/src/functions/web3/etherFunctions.ts +84 -0
  333. package/src/functions/web3/events/balanceChangedCustomHandler.ts +13 -0
  334. package/src/functions/web3/events/balanceChangedHandler.ts +10 -0
  335. package/src/functions/web3/events/getApprovedBalance.ts +154 -0
  336. package/src/functions/web3/events/getInputUtxoAndBalance.ts +305 -0
  337. package/src/functions/web3/events/getInputUtxosEnclave.ts +40 -0
  338. package/src/functions/web3/events/getShieldedBalance.ts +163 -0
  339. package/src/functions/web3/events/getTransactionLogEvents.ts +55 -0
  340. package/src/functions/web3/events/index.ts +7 -0
  341. package/src/functions/web3/events/web3RetrieveEvents.ts +33 -0
  342. package/src/functions/web3/functionCalls/accessTokenCalls.ts +27 -0
  343. package/src/functions/web3/functionCalls/approveToken.ts +180 -0
  344. package/src/functions/web3/functionCalls/approveTokensToHinkal.ts +21 -0
  345. package/src/functions/web3/functionCalls/estimateGasRelayer.ts +40 -0
  346. package/src/functions/web3/functionCalls/getRootHash.ts +7 -0
  347. package/src/functions/web3/functionCalls/inHinkalApprovalCalls.ts +60 -0
  348. package/src/functions/web3/functionCalls/relayFunctions.ts +12 -0
  349. package/src/functions/web3/functionCalls/transactCallDirect.ts +71 -0
  350. package/src/functions/web3/functionCalls/transactCallRelayer.ts +57 -0
  351. package/src/functions/web3/getContractMetadata.ts +43 -0
  352. package/src/functions/web3/getPublicAddressBalance.ts +17 -0
  353. package/src/functions/web3/getTokenHolder.ts +53 -0
  354. package/src/functions/web3/index.ts +9 -0
  355. package/src/functions/web3/lifiAPI.ts +41 -0
  356. package/src/functions/web3/odosAPI.ts +50 -0
  357. package/src/functions/web3/oneInchAPI.ts +47 -0
  358. package/src/functions/web3/runContractFunction.ts +116 -0
  359. package/src/functions/web3/uniswapAPI.ts +156 -0
  360. package/src/index.ts +9 -0
  361. package/src/mutexes/index.ts +1 -0
  362. package/src/mutexes/mutex.ts +3 -0
  363. package/src/providers/EthersProviderAdapter.ts +230 -0
  364. package/src/providers/TorExternalProvider.ts +36 -0
  365. package/src/providers/WagmiProviderAdapter.ts +311 -0
  366. package/src/providers/exportProviers.ts +11 -0
  367. package/src/providers/prepareEthersHinkal.ts +18 -0
  368. package/src/providers/prepareWagmiHinkal.ts +16 -0
  369. package/src/types/API.types.ts +23 -0
  370. package/src/types/ICacheDevice.ts +5 -0
  371. package/src/types/IMultiThreadedUtxoUtils.ts +16 -0
  372. package/src/types/RewardUserEnums.ts +12 -0
  373. package/src/types/TransactionSimulator.types.ts +30 -0
  374. package/src/types/WeeklyAnalytics.types.ts +44 -0
  375. package/src/types/activities.types.ts +90 -0
  376. package/src/types/admin.types.ts +30 -0
  377. package/src/types/all-points.types.ts +8 -0
  378. package/src/types/approvals.types.ts +45 -0
  379. package/src/types/balances.types.ts +20 -0
  380. package/src/types/big-intable.types.ts +3 -0
  381. package/src/types/bridging.types.ts +30 -0
  382. package/src/types/brotherhood-user.types.ts +13 -0
  383. package/src/types/cache.types.ts +42 -0
  384. package/src/types/circom-data.types.ts +120 -0
  385. package/src/types/coingecko.types.ts +216 -0
  386. package/src/types/commitments.types.ts +39 -0
  387. package/src/types/confirmation-request.types.ts +10 -0
  388. package/src/types/contacts.types.ts +6 -0
  389. package/src/types/crypto.types.ts +8 -0
  390. package/src/types/duneAPI.types.ts +9 -0
  391. package/src/types/eip5792.types.ts +31 -0
  392. package/src/types/ethereum-network.types.ts +70 -0
  393. package/src/types/external-action.types.ts +19 -0
  394. package/src/types/fee.types.ts +11 -0
  395. package/src/types/generatePoints.ts +14 -0
  396. package/src/types/hinkal.stake.types.ts +12 -0
  397. package/src/types/hinkal.types.ts +150 -0
  398. package/src/types/index.ts +50 -0
  399. package/src/types/kyc.types.ts +49 -0
  400. package/src/types/merch-order.types.ts +18 -0
  401. package/src/types/message.types.ts +6 -0
  402. package/src/types/mystery-boxes.types.ts +50 -0
  403. package/src/types/new-rewards.type.ts +181 -0
  404. package/src/types/offscreen.types.ts +8 -0
  405. package/src/types/presaleReferral.types.ts +4 -0
  406. package/src/types/proxy.types.ts +11 -0
  407. package/src/types/referral.types.ts +13 -0
  408. package/src/types/relayer.types.ts +16 -0
  409. package/src/types/remote-proof.types.ts +18 -0
  410. package/src/types/rewards.types.ts +53 -0
  411. package/src/types/routing.types.ts +7 -0
  412. package/src/types/sandbox.types.ts +246 -0
  413. package/src/types/session.types.ts +12 -0
  414. package/src/types/signature.types.ts +11 -0
  415. package/src/types/slippage.types.ts +3 -0
  416. package/src/types/snark.types.ts +43 -0
  417. package/src/types/tenderly.api.types.ts +200 -0
  418. package/src/types/token-prices.types.ts +8 -0
  419. package/src/types/token-with-id.types.ts +4 -0
  420. package/src/types/token.types.ts +86 -0
  421. package/src/types/transactions.types.ts +120 -0
  422. package/src/types/wc.types.ts +83 -0
  423. package/src/types/with-id.types.ts +1 -0
  424. package/src/webworker/performTaskWithWorker.ts +50 -0
  425. package/src/webworker/snarkjsWorker/snarkjs.d.ts +2 -0
  426. package/src/webworker/snarkjsWorker/snarkjsWorker.types.ts +18 -0
  427. package/src/webworker/snarkjsWorker/snarkjsWorkerLauncher.ts +19 -0
  428. package/src/webworker/snarkjsWorker/snarkjsWorkerLogic.ts +90 -0
  429. package/src/webworker/utxoWorker/utxoWorker.types.ts +41 -0
  430. package/src/webworker/utxoWorker/utxoWorkerLauncher.ts +19 -0
  431. package/src/webworker/utxoWorker/utxoWorkerLogic.ts +107 -0
  432. package/src/webworker/viteWorkerURL.constant.ts +25 -0
  433. package/src/webworker/worker.registry.ts +11 -0
  434. package/src/webworker/worker.types.ts +35 -0
  435. package/src/webworker/workerErrorHandler.ts +10 -0
  436. package/src/webworker/workerFactory.ts +47 -0
  437. package/src/webworker/workerProxy.ts +88 -0
  438. package/src/webworker/zkProofWorker/zkProofWorker.types.ts +52 -0
  439. package/src/webworker/zkProofWorker/zkProofWorkerLauncher.ts +19 -0
  440. package/src/webworker/zkProofWorker/zkProofWorkerLogic.ts +84 -0
  441. package/tsconfig.json +23 -0
  442. package/tsconfig.lib.json +10 -0
  443. package/tsconfig.spec.json +15 -0
  444. package/vite.config.ts +97 -0
  445. package/vite.config.workers.ts +51 -0
@@ -0,0 +1,204 @@
1
+ import { get, set } from 'idb-keyval';
2
+ import { BigNumber } from 'ethers';
3
+ import { Activity, ActivityAddRequest, ActivityStatus, SandboxResponse, StorageKeys } from '../../types';
4
+ import { zeroAddress } from '../../constants';
5
+ import { fixDecimalsAmount, getAmountInToken, getERC20Token } from '../../functions';
6
+ import { getTokenPrice } from '../../API';
7
+ import { Logger } from '../../error-handling';
8
+
9
+ type TransactionRecord = Record<string, Activity>;
10
+
11
+ class ActivityStorage {
12
+ private generateTxId(): string {
13
+ const timestamp = new Date().getTime();
14
+ const random = Math.random().toString(36).substring(2, 15);
15
+ return `tx_${timestamp}_${random}`;
16
+ }
17
+
18
+ private async getTransactionRecord(): Promise<TransactionRecord> {
19
+ const record = await get<TransactionRecord>(StorageKeys.TX_ACTIVITY);
20
+ return record || {};
21
+ }
22
+
23
+ private async saveTransactionRecord(record: TransactionRecord): Promise<void> {
24
+ await set(StorageKeys.TX_ACTIVITY, record);
25
+ }
26
+
27
+ public async saveTxRequest(txRequest: ActivityAddRequest) {
28
+ const {
29
+ from,
30
+ to,
31
+ gas,
32
+ gasPrice,
33
+ value,
34
+ chainId,
35
+ status,
36
+ txHash,
37
+ activityType,
38
+ tokensReceive,
39
+ tokensSpend,
40
+ tokensApprove,
41
+ ownerPublicAddress,
42
+ activityIcon,
43
+ dappUrl,
44
+ dappName,
45
+ integrationProvider,
46
+ } = txRequest;
47
+ const id = this.generateTxId();
48
+ const record = await this.getTransactionRecord();
49
+ const gasInDollar = await this.getGasInDollar(gas, gasPrice, chainId);
50
+
51
+ const transaction = {
52
+ id,
53
+ from,
54
+ to,
55
+ gas,
56
+ gasPrice,
57
+ gasInDollar: gasInDollar?.toString(),
58
+ value,
59
+ chainId,
60
+ txHash,
61
+ activityType,
62
+ status: status ?? ActivityStatus.PENDING,
63
+ timestamp: new Date(),
64
+ tokensReceive,
65
+ tokensSpend,
66
+ tokensApprove,
67
+ ownerPublicAddress,
68
+ activityIcon,
69
+ dappUrl,
70
+ dappName,
71
+ integrationProvider,
72
+ };
73
+
74
+ record[id] = transaction;
75
+
76
+ await this.saveTransactionRecord(record);
77
+ return id;
78
+ }
79
+
80
+ public async getTxRequest(id: string) {
81
+ const record = await this.getTransactionRecord();
82
+ return record[id] || null;
83
+ }
84
+
85
+ public async getAllTxRequests(chainId: number) {
86
+ const record = await this.getTransactionRecord();
87
+ return Object.values(record)
88
+ .filter((activity) => activity.chainId === chainId)
89
+ .sort((a, b) => new Date(b.timestamp).getTime() - new Date(a.timestamp).getTime());
90
+ }
91
+
92
+ private async updateTxStatusAndHash(
93
+ id: string,
94
+ status: ActivityStatus,
95
+ txHash?: string,
96
+ value?: string,
97
+ from?: string,
98
+ to?: string,
99
+ gas?: BigNumber,
100
+ gasPrice?: BigNumber,
101
+ ): Promise<Activity> {
102
+ const transaction = await this.getTxRequest(id);
103
+ if (!transaction) {
104
+ throw new Error('Transaction not found');
105
+ }
106
+
107
+ const record = await this.getTransactionRecord();
108
+ const gasInDollar = await this.getGasInDollar(gas, gasPrice, transaction.chainId);
109
+ const updatedTx = {
110
+ ...transaction,
111
+ status,
112
+ txHash,
113
+ value: transaction.value ?? value,
114
+ from: transaction.from ?? from,
115
+ to: transaction.to ?? to,
116
+ gas,
117
+ gasPrice,
118
+ gasInDollar: gasInDollar?.toString(),
119
+ timestamp: new Date(),
120
+ };
121
+
122
+ record[id] = updatedTx;
123
+ await this.saveTransactionRecord(record);
124
+ return updatedTx;
125
+ }
126
+
127
+ private async updateActivity(
128
+ id: string,
129
+ status: ActivityStatus,
130
+ txHash?: string,
131
+ value?: string,
132
+ from?: string,
133
+ to?: string,
134
+ gas?: BigNumber,
135
+ gasPrice?: BigNumber,
136
+ ) {
137
+ try {
138
+ await this.updateTxStatusAndHash(id, status, txHash, value, from, to, gas, gasPrice);
139
+ } catch (err) {
140
+ console.log('error in updating tx request', err);
141
+ }
142
+ }
143
+
144
+ public async removePendingTransactions(pendingActivityId: string) {
145
+ try {
146
+ const record = await this.getTransactionRecord();
147
+ delete record[pendingActivityId];
148
+ await this.saveTransactionRecord(record);
149
+ } catch (err) {
150
+ console.log('error in deleting tx requests', err);
151
+ }
152
+ }
153
+
154
+ public async updatePendingTransactions(transactionResponse: SandboxResponse, pendingActivityId: string) {
155
+ try {
156
+ if (!transactionResponse.success) {
157
+ await this.updateActivity(
158
+ pendingActivityId,
159
+ ActivityStatus.FAILED,
160
+ 'erroredTx' in transactionResponse ? transactionResponse.erroredTx?.transactionHash : undefined,
161
+ );
162
+ return;
163
+ }
164
+
165
+ if ('tx' in transactionResponse) {
166
+ const { tx } = transactionResponse;
167
+ await this.updateActivity(
168
+ pendingActivityId,
169
+ ActivityStatus.SUCCESSFUL,
170
+ tx.hash,
171
+ BigNumber.from(tx.value ?? 0n).toHexString(),
172
+ tx.from,
173
+ tx.to,
174
+ BigNumber.from(tx.gas ?? 0n),
175
+ BigNumber.from(tx.gasPrice ?? 0n),
176
+ );
177
+ }
178
+ } catch (err) {
179
+ console.log('error in updating pending transactions', err);
180
+ }
181
+ }
182
+
183
+ private getGasInDollar = async (gas: BigNumber | undefined, gasPrice: BigNumber | undefined, chainId: number) => {
184
+ if (!gas || !gasPrice) return undefined;
185
+
186
+ try {
187
+ const nativeToken = getERC20Token(zeroAddress, chainId);
188
+ if (!nativeToken) return undefined;
189
+
190
+ const tokenPriceDollar = (await getTokenPrice(chainId, nativeToken.erc20TokenAddress)).price;
191
+ if (!tokenPriceDollar) return undefined;
192
+
193
+ const gasPriceInDollar = tokenPriceDollar * Number(getAmountInToken(nativeToken, gasPrice.toBigInt()));
194
+ const totalGasInDollar = gasPriceInDollar * Number(gas.toBigInt());
195
+
196
+ return fixDecimalsAmount(totalGasInDollar);
197
+ } catch (error) {
198
+ Logger.error('Failed to calculate gas cost in dollars:', { chainId, error });
199
+ return undefined;
200
+ }
201
+ };
202
+ }
203
+
204
+ export const activityStorage = new ActivityStorage();
@@ -0,0 +1,97 @@
1
+ import { get, update } from 'idb-keyval';
2
+ import { ERC20Token, TokenBalance } from '../../types';
3
+ import { getStateKey } from '../../functions/utils';
4
+ import { Logger } from '../../error-handling/logger';
5
+
6
+ interface WalletBalances {
7
+ [key: string]: TokenBalance[];
8
+ }
9
+
10
+ class PublicBalancesStorage {
11
+ readonly balancesRecordLabel = 'walletsBalances';
12
+
13
+ async getBalances(): Promise<WalletBalances | undefined> {
14
+ const walletBalances = await get<WalletBalances>(this.balancesRecordLabel);
15
+ return walletBalances;
16
+ }
17
+
18
+ async getBalancesByWallet(address: string, chainId: number): Promise<TokenBalance[] | undefined> {
19
+ const walletBalances = await this.getBalances();
20
+ if (!walletBalances) return undefined;
21
+ const key = getStateKey(address, chainId);
22
+ return walletBalances[key];
23
+ }
24
+
25
+ async setBalances(
26
+ chainId: number,
27
+ ethereumAddress: string,
28
+ balances: TokenBalance[],
29
+ concreteTokensList: ERC20Token[] | undefined,
30
+ ): Promise<TokenBalance[]> {
31
+ let updatedBalances: TokenBalance[] = [];
32
+
33
+ if (!concreteTokensList) {
34
+ // If no concrete token list is provided, it means "balances" already contains all tokens the user holds in their wallet.
35
+ await update(this.balancesRecordLabel, (oldWalletBalances: WalletBalances = {}) => {
36
+ const key = getStateKey(ethereumAddress, chainId);
37
+ return {
38
+ ...oldWalletBalances,
39
+ [key]: balances,
40
+ };
41
+ });
42
+ return balances;
43
+ }
44
+
45
+ // If the concrete token list is empty, just return the balances stored in the database.
46
+ if (concreteTokensList.length === 0) {
47
+ return (await this.getBalancesByWallet(ethereumAddress, chainId)) ?? [];
48
+ }
49
+
50
+ try {
51
+ // If a concrete token list is provided, "balances" only includes the tokens from that list.
52
+ // The user may still hold other tokens, so we must update balances for tokens in the list
53
+ // while preserving any other existing balances.
54
+ await update(this.balancesRecordLabel, (oldWalletBalances: WalletBalances = {}) => {
55
+ const key = getStateKey(ethereumAddress, chainId);
56
+
57
+ const existingBalances = this.createBalanceLookup(oldWalletBalances[key]);
58
+ const newBalances = this.createBalanceLookup(balances);
59
+
60
+ // Update or remove balances only for tokens in the concrete token list.
61
+ concreteTokensList.forEach(({ erc20TokenAddress }) => {
62
+ const tokenAddress = erc20TokenAddress.toLowerCase();
63
+
64
+ if (tokenAddress in newBalances) {
65
+ existingBalances[tokenAddress] = newBalances[tokenAddress];
66
+ } else {
67
+ delete existingBalances[tokenAddress];
68
+ }
69
+ });
70
+
71
+ // Convert back to array format for storage
72
+ updatedBalances = Object.values(existingBalances);
73
+
74
+ return {
75
+ ...oldWalletBalances,
76
+ [key]: updatedBalances,
77
+ };
78
+ });
79
+ } catch (error) {
80
+ Logger.error('Failed to update wallet balances:', error);
81
+ }
82
+
83
+ return updatedBalances;
84
+ }
85
+
86
+ private createBalanceLookup(balances: TokenBalance[] = []): Record<string, TokenBalance> {
87
+ return balances.reduce(
88
+ (acc, balance) => ({
89
+ ...acc,
90
+ [balance.token.erc20TokenAddress.toLowerCase()]: balance,
91
+ }),
92
+ {},
93
+ );
94
+ }
95
+ }
96
+
97
+ export const publicBalancesStorage = new PublicBalancesStorage();
@@ -0,0 +1,81 @@
1
+ import { get, update } from 'idb-keyval';
2
+ import { Contact } from '../../types/contacts.types';
3
+ import { Logger } from '../../error-handling/logger';
4
+ import { caseInsensitiveEqual } from '../../functions';
5
+
6
+ type ContactStorageType = Record<string, Contact[]>;
7
+
8
+ class ContactStorage {
9
+ private readonly STORAGE_KEY = 'contacts';
10
+
11
+ private checkForDuplicate(currentContacts: Contact[], newContact: Contact, oldContactAddress?: string) {
12
+ const contactWithSameNicknameOrAddress = currentContacts.find(
13
+ ({ ethereumAddress, nickname }) =>
14
+ (ethereumAddress === newContact.ethereumAddress || nickname === newContact.nickname) &&
15
+ ethereumAddress !== oldContactAddress,
16
+ );
17
+ if (contactWithSameNicknameOrAddress !== undefined) throw new Error('Duplicate Contact attribute');
18
+ }
19
+
20
+ async createContact(walletAddress: string, newContact: Contact) {
21
+ const walletAddressFormatted = walletAddress.toLowerCase();
22
+ await update<ContactStorageType>(this.STORAGE_KEY, (currentContacts) => {
23
+ const contacts = currentContacts ?? {};
24
+ const walletContacts = contacts[walletAddressFormatted] ?? [];
25
+ this.checkForDuplicate(walletContacts, newContact);
26
+
27
+ walletContacts.push(newContact);
28
+ contacts[walletAddressFormatted] = walletContacts;
29
+ return contacts;
30
+ });
31
+ }
32
+
33
+ async getContacts(walletAddress: string) {
34
+ try {
35
+ const walletAddressFormatted = walletAddress.toLowerCase();
36
+ const contacts = await get<ContactStorageType>(this.STORAGE_KEY);
37
+
38
+ if (!contacts || !contacts[walletAddressFormatted]) return [];
39
+ return contacts[walletAddressFormatted];
40
+ } catch (err) {
41
+ Logger.error('Error while getting contacts:', err);
42
+ return [];
43
+ }
44
+ }
45
+
46
+ async editContact(walletAddress: string, oldContactAddress: string, editedContact: Contact) {
47
+ const walletAddressFormatted = walletAddress.toLowerCase();
48
+ await update<ContactStorageType>(this.STORAGE_KEY, (currentContacts) => {
49
+ const contacts = currentContacts ?? {};
50
+ const walletContacts = contacts[walletAddressFormatted];
51
+ if (!contacts || !walletContacts) throw new Error('Contacts could not be fetched');
52
+ this.checkForDuplicate(walletContacts, editedContact, oldContactAddress);
53
+ const contactToEditIndex = walletContacts.findIndex(({ ethereumAddress }) =>
54
+ caseInsensitiveEqual(ethereumAddress, oldContactAddress),
55
+ );
56
+ if (contactToEditIndex === -1) throw new Error('Contact to be edited was not found');
57
+
58
+ walletContacts[contactToEditIndex] = editedContact;
59
+ contacts[walletAddressFormatted] = walletContacts;
60
+ return contacts;
61
+ });
62
+ }
63
+
64
+ async deleteContact(walletAddress: string, contactAddressToDelete: string) {
65
+ const walletAddressFormatted = walletAddress.toLowerCase();
66
+ await update<ContactStorageType>(this.STORAGE_KEY, (currentContacts) => {
67
+ const contacts = currentContacts ?? {};
68
+ const walletContacts = contacts[walletAddressFormatted];
69
+ if (!contacts || !walletContacts) throw new Error('Contacts could not be fetched');
70
+
71
+ const updatedContacts = walletContacts.filter(
72
+ ({ ethereumAddress }) => ethereumAddress !== contactAddressToDelete,
73
+ );
74
+
75
+ contacts[walletAddressFormatted] = updatedContacts;
76
+ return contacts;
77
+ });
78
+ }
79
+ }
80
+
81
+ export const contactStorage = new ContactStorage();
@@ -0,0 +1,6 @@
1
+ export * from './activity-db';
2
+ export * from './balances-db';
3
+ export * from './private-balances-db';
4
+ export * from './prices-db';
5
+ export * from './contact-db';
6
+ export * from './signatures-db';
@@ -0,0 +1,89 @@
1
+ import { get, update } from 'idb-keyval';
2
+ import { API } from '../../API/API';
3
+ import { getStateKey } from '../../functions/utils/string.utils';
4
+
5
+ class PricesStorage {
6
+ readonly tokenPricesRecordLabel = 'tokenPrices';
7
+
8
+ async getPrices() {
9
+ const prices = await get<Record<string, number>>(this.tokenPricesRecordLabel);
10
+ return prices;
11
+ }
12
+
13
+ async updatePrices(chainId: number, erc20Addresses: string[]) {
14
+ if (!erc20Addresses.length) return [];
15
+
16
+ const { prices: newPrices } = await API.getTokenPrices(chainId, erc20Addresses);
17
+
18
+ await update(this.tokenPricesRecordLabel, (prevPrices: Record<string, number> = {}) => {
19
+ const clonedPrices = { ...prevPrices };
20
+ newPrices.forEach((price, index) => {
21
+ clonedPrices[getStateKey(erc20Addresses[index], chainId)] = price;
22
+ });
23
+ return clonedPrices;
24
+ });
25
+ return newPrices;
26
+ }
27
+
28
+ // Fetches token prices and updates missing prices as needed.
29
+ async getAndUpdatePrices(currentChainId: number, erc20Addresses: string[]) {
30
+ const cachedTokenPrices = await this.getPrices();
31
+ let prices: number[] = new Array(erc20Addresses.length).fill(0);
32
+
33
+ if (!cachedTokenPrices) {
34
+ prices = await this.updatePrices(currentChainId, erc20Addresses);
35
+ } else {
36
+ const dontHavePrices: string[] = [];
37
+ const dontHavePricesIndexes: number[] = [];
38
+
39
+ erc20Addresses.forEach((tokenAddress, index) => {
40
+ const tokenStateKey = getStateKey(tokenAddress, currentChainId);
41
+ if (cachedTokenPrices[tokenStateKey]) {
42
+ prices[index] = cachedTokenPrices[tokenStateKey];
43
+ } else {
44
+ dontHavePrices.push(tokenAddress);
45
+ dontHavePricesIndexes.push(index);
46
+ }
47
+ });
48
+
49
+ const restPrices = await this.updatePrices(currentChainId, dontHavePrices);
50
+ dontHavePricesIndexes.forEach((index, i) => {
51
+ prices[index] = restPrices[i];
52
+ });
53
+ }
54
+
55
+ return prices;
56
+ }
57
+
58
+ async updateCachedPricesByChain(chainId: number) {
59
+ const cachedPrices = await this.getPrices();
60
+
61
+ if (!cachedPrices || Object.keys(cachedPrices).length === 0) {
62
+ return;
63
+ }
64
+
65
+ const chainTokens = Object.entries(cachedPrices)
66
+ .filter(([key]) => {
67
+ const [, chainIdStr] = key.split('-');
68
+ return parseInt(chainIdStr, 10) === chainId;
69
+ })
70
+ .map(([key]) => key.split('-')[0]);
71
+
72
+ if (chainTokens.length === 0) {
73
+ return;
74
+ }
75
+
76
+ const { prices: updatedPrices } = await API.getTokenPrices(chainId, chainTokens);
77
+
78
+ await update(this.tokenPricesRecordLabel, (prevPrices: Record<string, number> = {}) => {
79
+ const clonedPrices = { ...prevPrices };
80
+ updatedPrices.forEach((price, index) => {
81
+ const stateKey = getStateKey(chainTokens[index], chainId);
82
+ clonedPrices[stateKey] = price;
83
+ });
84
+ return clonedPrices;
85
+ });
86
+ }
87
+ }
88
+
89
+ export const pricesStorage = new PricesStorage();
@@ -0,0 +1,31 @@
1
+ import { get, update } from 'idb-keyval';
2
+ import { TokenBalance } from '../../types/token.types';
3
+ import { getStateKey } from '../../functions/utils/string.utils';
4
+
5
+ class PrivateBalancesStorage {
6
+ readonly balancesRecordLabel = 'privateWalletsBalances';
7
+
8
+ async getBalances() {
9
+ const walletBalances = await get<Record<string, TokenBalance[]>>(this.balancesRecordLabel);
10
+ return walletBalances;
11
+ }
12
+
13
+ async getBalancesByWallet(address: string, chainId: number) {
14
+ const walletBalances = await this.getBalances();
15
+ if (!walletBalances) return undefined;
16
+ const key = getStateKey(address, chainId, true);
17
+ return walletBalances[key];
18
+ }
19
+
20
+ async setBalances(address: string, chainId: number, newBalances: TokenBalance[]) {
21
+ await update(this.balancesRecordLabel, (walletBalances: Record<string, TokenBalance[]> = {}) => {
22
+ const key = getStateKey(address, chainId, true);
23
+ return {
24
+ ...walletBalances,
25
+ [key]: newBalances,
26
+ };
27
+ });
28
+ }
29
+ }
30
+
31
+ export const privateBalancesStorage = new PrivateBalancesStorage();
@@ -0,0 +1,62 @@
1
+ import { get, set } from 'idb-keyval';
2
+ import { Logger } from '../../error-handling';
3
+ import { ConfirmationRequestType } from '../../types/confirmation-request.types';
4
+ import { AppMetaData } from '../../types/wc.types';
5
+ import { SignedMessage, StorageKeys } from '../../types';
6
+
7
+ type SignedMessageRecord = Record<string, SignedMessage>;
8
+
9
+ class SignedMessagesStorage {
10
+ private generateMessageId(): string {
11
+ const timestamp = new Date().getTime();
12
+ const random = Math.random().toString(36).substring(2, 15);
13
+ return `msg_${timestamp}_${random}`;
14
+ }
15
+
16
+ public async saveSignedMessage(
17
+ chainId: number,
18
+ messageText: string,
19
+ messageType: ConfirmationRequestType.PERSONAL_SIGN | ConfirmationRequestType.SIGN_TYPE_V4,
20
+ subAccountAddress: string,
21
+ signature: string,
22
+ appMetaData: AppMetaData,
23
+ ): Promise<void> {
24
+ try {
25
+ const id = this.generateMessageId();
26
+ const record = (await get<SignedMessageRecord>(StorageKeys.SIGNED_MESSAGES)) || {};
27
+
28
+ const messageData = {
29
+ chainId,
30
+ messageText,
31
+ messageType,
32
+ subAccountAddress,
33
+ signature,
34
+ appMetaData,
35
+ };
36
+
37
+ record[id] = {
38
+ timestamp: new Date().toISOString(),
39
+ ...messageData,
40
+ };
41
+
42
+ await set(StorageKeys.SIGNED_MESSAGES, record);
43
+ } catch (error) {
44
+ Logger.error('Failed to save signed message:', error, {
45
+ chainId,
46
+ messageType,
47
+ });
48
+ }
49
+ }
50
+
51
+ public async getAllSignedMessages(): Promise<SignedMessage[]> {
52
+ try {
53
+ const record = (await get<SignedMessageRecord>(StorageKeys.SIGNED_MESSAGES)) || {};
54
+ return Object.values(record).sort((a, b) => new Date(b.timestamp).getTime() - new Date(a.timestamp).getTime());
55
+ } catch (error) {
56
+ Logger.error('Failed to retrieve signed messages:', error);
57
+ return [];
58
+ }
59
+ }
60
+ }
61
+
62
+ export const signedMessagesStorage = new SignedMessagesStorage();