{"version":3,"sources":["../../src/relayers/gelato/gelato-function.ts","../../src/relayers/gelato/index.ts","../../src/relayers/pimlico/index.ts","../../src/relayers/pimlico/utils.ts","../../src/common/constants.ts","../../src/common/helpers.ts"],"sourcesContent":["import {\n  GelatoRelay,\n  RelayRequestOptions,\n  SponsoredCallRequest,\n  TransactionStatusResponse,\n} from '@gelatonetwork/relay-sdk';\nimport { Chain } from '@parifi/references';\n\nexport const executeTxUsingGelato = async (\n  targetContractAddress: string,\n  chainId: Chain,\n  gelatoKey: string | undefined,\n  encodedTxData: string,\n  gelatoGasLimit?: bigint,\n): Promise<string> => {\n  const request: SponsoredCallRequest = {\n    chainId: BigInt(chainId.toString()),\n    target: targetContractAddress,\n    data: encodedTxData,\n  };\n\n  const relay = new GelatoRelay();\n  const relayOptions: RelayRequestOptions = {\n    gasLimit: gelatoGasLimit || BigInt(5000000),\n  };\n\n  const { taskId } = await relay.sponsoredCall(request, gelatoKey || '', relayOptions);\n  return taskId;\n};\n\nexport const checkGelatoTaskStatus = async (taskId: string): Promise<TransactionStatusResponse | undefined> => {\n  const relay = new GelatoRelay();\n  const txStatus = await relay.getTaskStatus(taskId);\n  return txStatus;\n};\n","import { TransactionStatusResponse } from '@gelatonetwork/relay-sdk';\nimport { RelayerConfig, RpcConfig } from '../../interfaces';\nimport { checkGelatoTaskStatus, executeTxUsingGelato } from './gelato-function';\n\nexport class Gelato {\n  constructor(\n    private gelatoConfig: RelayerConfig['gelatoConfig'],\n    private rpcConfig: RpcConfig,\n  ) {}\n\n  public async executeTxUsingGelato(\n    targetContractAddress: string,\n    encodedTxData: string,\n    gelatoGasLimit?: bigint,\n  ): Promise<string> {\n    return await executeTxUsingGelato(\n      targetContractAddress,\n      this.rpcConfig.chainId,\n      this.gelatoConfig?.apiKey,\n      encodedTxData,\n      gelatoGasLimit,\n    );\n  }\n\n  public checkGelatoTaskStatus = (taskId: string): Promise<TransactionStatusResponse | undefined> => {\n    return checkGelatoTaskStatus(taskId);\n  };\n}\n","import 'dotenv/config';\nimport { RelayerConfig, RpcConfig, SubgraphConfig } from '../../interfaces';\nimport { executeTxUsingPimlico, getPimlicoSmartAccountClient } from './utils';\nimport { SmartAccount } from 'permissionless/accounts';\nimport { Chain, Hex, Transport } from 'viem';\nimport { EntryPoint } from 'permissionless/types/entrypoint';\nimport { SmartAccountClient } from 'permissionless';\nimport { generatePrivateKey } from 'viem/accounts';\n\nexport class Pimlico {\n  /// Pimlico Class variables\n  public isInitialized: boolean;\n  private smartAccountClient: SmartAccountClient<EntryPoint, Transport, Chain, SmartAccount<EntryPoint>>;\n\n  constructor(\n    private pimlicoConfig: RelayerConfig['pimlicoConfig'],\n    private rpcConfig: RpcConfig,\n    private subgraphConfig: SubgraphConfig,\n  ) {\n    this.isInitialized = false;\n    this.smartAccountClient = {} as SmartAccountClient<EntryPoint, Transport, Chain, SmartAccount<EntryPoint>>;\n  }\n\n  ////////////////////////////////////////////////////////////////\n  //////////////////////    INITIALIZER    ///////////////////////\n  ////////////////////////////////////////////////////////////////\n  async initPimlico() {\n    if (this.isInitialized) {\n      console.log('Pimlico relayer already initialized');\n      return;\n    }\n\n    if (this.pimlicoConfig?.apiKey === undefined || this.rpcConfig.rpcEndpointUrl === undefined) {\n      console.log('Invalid config for Pimlico');\n      return;\n    }\n\n    /// Create Smart account for user address EOA\n    const privateKey =\n      ((process.env.PRIVATE_KEY as Hex) || this.pimlicoConfig.password) ??\n      (() => {\n        const pk = generatePrivateKey();\n        this.pimlicoConfig.password = pk;\n        return pk;\n      })();\n\n    this.smartAccountClient = await getPimlicoSmartAccountClient(this.pimlicoConfig, this.rpcConfig, privateKey);\n\n    // Set the Pimlico Relayer as initialized\n    this.isInitialized = true;\n  }\n\n  ////////////////////////////////////////////////////////////////\n  ////////////////////    PUBLIC FUNCTIONS    ////////////////////\n  ////////////////////////////////////////////////////////////////\n  public executeTxUsingPimlico = async (targetContractAddress: string, txData: string) => {\n    return await executeTxUsingPimlico(this.smartAccountClient, targetContractAddress, txData);\n  };\n}\n","import 'dotenv/config';\nimport { arbitrum } from 'viem/chains';\nimport { ENTRYPOINT_ADDRESS_V07, SmartAccountClient, createSmartAccountClient } from 'permissionless';\nimport { RelayerI, RpcConfig } from '../../interfaces';\nimport { SmartAccount, privateKeyToSimpleSmartAccount } from 'permissionless/accounts';\nimport { Chain, Hex, Transport, createPublicClient, http } from 'viem';\n\nimport { createPimlicoBundlerClient, createPimlicoPaymasterClient } from 'permissionless/clients/pimlico';\n\nimport { EntryPoint } from 'permissionless/types/entrypoint';\nimport { FACTORY_ADDRESS_SIMPLE_ACCOUNT } from '../../common';\n\nexport const getPimlicoSmartAccountClient = async (\n  pimlicoConfig: RelayerI,\n  rpcConfig: RpcConfig,\n  privateKey: `0x${string}`,\n): Promise<SmartAccountClient<EntryPoint, Transport, Chain, SmartAccount<EntryPoint>>> => {\n  const apiKey = pimlicoConfig.apiKey ?? '';\n  const viemChain = getViemChainById(rpcConfig.chainId as number);\n  const chainId = rpcConfig.chainId as number;\n\n  /// Create Paymaster Client\n  const paymasterUrl = `https://api.pimlico.io/v2/${chainId}/rpc?apikey=${apiKey}`;\n  const publicClient = createPublicClient({\n    transport: http(rpcConfig.rpcEndpointUrl),\n  });\n\n  const paymasterClient = createPimlicoPaymasterClient({\n    transport: http(paymasterUrl),\n    entryPoint: ENTRYPOINT_ADDRESS_V07,\n  });\n\n  const account = await privateKeyToSimpleSmartAccount(publicClient, {\n    privateKey,\n    entryPoint: ENTRYPOINT_ADDRESS_V07,\n    factoryAddress: FACTORY_ADDRESS_SIMPLE_ACCOUNT,\n  });\n\n  /// Create Bundler client\n  const bundlerUrl = `https://api.pimlico.io/v2/${chainId}/rpc?apikey=${apiKey}`;\n  const bundlerClient = createPimlicoBundlerClient({\n    transport: http(bundlerUrl),\n    entryPoint: ENTRYPOINT_ADDRESS_V07,\n  });\n\n  /// Create Smart account client\n  const smartAccountClient = createSmartAccountClient({\n    account,\n    entryPoint: ENTRYPOINT_ADDRESS_V07,\n    chain: viemChain,\n    bundlerTransport: http(bundlerUrl),\n    middleware: {\n      gasPrice: async () => {\n        return (await bundlerClient.getUserOperationGasPrice()).fast;\n      },\n      sponsorUserOperation: paymasterClient.sponsorUserOperation,\n    },\n  }) as SmartAccountClient<EntryPoint, Transport, Chain, SmartAccount<EntryPoint>>;\n\n  return smartAccountClient;\n};\n\nexport const executeTxUsingPimlico = async (\n  smartAccountClient: SmartAccountClient<EntryPoint, Transport, Chain, SmartAccount<EntryPoint>>,\n  targetContractAddress: string,\n  txData: string,\n): Promise<{ txHash: string }> => {\n  const txHash = await smartAccountClient.sendTransaction({\n    to: targetContractAddress as Hex,\n    value: 0n,\n    data: txData as Hex,\n  });\n  return { txHash };\n};\n\nexport const executeBatchTxsUsingPimlico = async (\n  smartAccountClient: SmartAccountClient<EntryPoint, Transport, Chain, SmartAccount<EntryPoint>>,\n  targetContractAddresses: string[],\n  txDatas: string[],\n): Promise<{ txHash: string }> => {\n  const batchTxDatas = [];\n\n  if (targetContractAddresses.length != txDatas.length) {\n    throw new Error('Target contract and data lengths do not match');\n  }\n\n  for (let index = 0; index < targetContractAddresses.length; index++) {\n    batchTxDatas.push({\n      to: targetContractAddresses[index] as Hex,\n      value: 0n,\n      data: txDatas[index] as Hex,\n    });\n  }\n\n  const txHash = await smartAccountClient.sendTransactions({\n    transactions: batchTxDatas,\n  });\n  return { txHash };\n};\n\n/**\n * Gets the chain object for the given chain id.\n * @param chainId - Chain id of the target EVM chain.\n * @returns Viem's chain object.\n */\nexport const getViemChainById = (chainId: number) => {\n  if (chainId === 42161) {\n    return arbitrum;\n  }\n};\n","import { Decimal } from 'decimal.js';\nimport { Address } from 'viem';\n\nexport const PRECISION_MULTIPLIER = new Decimal('10000');\nexport const DEVIATION_PRECISION_MULTIPLIER = new Decimal(10).pow(12);\nexport const SECONDS_IN_A_YEAR = new Decimal(365 * 24 * 60 * 60);\nexport const MAX_FEE = new Decimal(10000000); // 1% = 100_000\nexport const WAD = new Decimal(10).pow(18); // 10^18\nexport const EMPTY_BYTES32 = '0x0000000000000000000000000000000000000000000000000000000000000000';\n// export const PRICE_FEED_DECIMALS = 18;\n// export const PRICE_FEED_PRECISION = new Decimal(10).pow(PRICE_FEED_DECIMALS);\nexport const DECIMAL_10 = new Decimal(10);\nexport const DECIMAL_ZERO = new Decimal(0);\nexport const DEFAULT_BATCH_COUNT = 10;\nexport const BIGINT_ZERO = BigInt(0);\n\nexport const GAS_LIMIT_SETTLEMENT = 10000000; // 10M gas\nexport const GAS_LIMIT_LIQUIDATION = 15000000; // 15M gas\n\nexport const ONE_GWEI = 1000000000; // 10^9\nexport const DEFAULT_GAS_PRICE = 2 * ONE_GWEI; // 1 gwei\n\n// Constants for Pyth price ids of collaterals\nexport const PYTH_ETH_USD_PRICE_ID_BETA = '0xca80ba6dc32e08d06f1aa886011eed1d77c77be9eb761cc10d72b7d0a2fd57a6';\nexport const PYTH_ETH_USD_PRICE_ID_STABLE = '0xff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace';\n\nexport const PYTH_USDC_USD_PRICE_ID_BETA = '0x41f3625971ca2ed2263e78573fe5ce23e13d2558ed3f2e47ab0f84fb9e7ae722';\nexport const PYTH_USDC_USD_PRICE_ID_STABLE = '0xeaa020c61cc479712813461ce153894a96a6c00b21ed0cfc2798d1f9a9e9c94a';\n\n// Constants for Pimlico relayer\nexport const FACTORY_ADDRESS_SIMPLE_ACCOUNT = '0x91E60e0613810449d098b0b5Ec8b51A0FE8c8985';\n\n// Temporary constants\nexport const SUBGRAPH_HELPER_ADDRESS = '0xf012d32505df6853187170F00C7b789A8ecC41c2';\n\nexport const SYMBOL_TO_PYTH_FEED = new Map<string, string>([\n  // market\n  ['BTC', '0xc9d8b075a5c69303365ae23633d4e085199bf5c520a3b90fed1322a0342ffc33'],\n  ['SOL', '0xef0d8b6fda2ceba41da15d4095d1da392a0d2f8ed0c6c7bc0f4cfac8c280b56d'],\n  ['WIF', '0x4ca4beeca86f0d164160323817a4e42b10010a724c2217c6ee41b54cd4cc61fc'],\n  ['ETH', '0xff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace'],\n  ['AAVE', '0x2b9ab1e972a281585084148ba1389800799bd4be63b957507db1349314e47445'],\n  ['ADA', '0x2a01deaec9e51a579277b34b122399984d0bbf57e2458a7e42fecd2829867a0d'],\n  ['ARB', '0x3fa4252848f9f0a1480be62745a4629d9eb1322aebab8a791e344b3b9c1adcf5'],\n  ['AVAX', '0x93da3352f9f1d105fdfe4971cfa80e9dd777bfc5d0f683ebb6e1294b92137bb7'],\n  ['BCH', '0x3dd2b63686a450ec7290df3a1e0b583c0481f651351edfa7636f39aed55cf8a3'],\n  ['BNB', '0x2f95862b045670cd22bee3114c39763a4a08beeb663b145d283c31d7d1101c4f'],\n  ['CRV', '0xa19d04ac696c7a6616d291c7e5d1377cc8be437c327b75adb5dc1bad745fcae8'],\n  ['DOGE', '0xdcef50dd0a4cd2dcc17e45df1676dcb336a11a61c69df7a0299b0150c672d25c'],\n  ['DYDX', '0x6489800bb8974169adfe35937bf6736507097d13c190d760c557108c7e93a81b'],\n  ['GMX', '0xb962539d0fcb272a494d65ea56f94851c2bcf8823935da05bd628916e2e9edbf'],\n  ['LINK', '0x8ac0c70fff57e9aefdf5edf44b51d62c2d433653cbb2cf5cc06bb115af04d221'],\n  ['LTC', '0x6e3f3fa8253588df9326580180233eb791e03b443a3ba7a1d892e73874e19a54'],\n  ['MKR', '0x9375299e31c0deb9c6bc378e6329aab44cb48ec655552a70d4b9050346a30378'],\n  ['NEAR', '0xc415de8d2eba7db216527dff4b60e8f3a5311c740dadb233e13e12547e226750'],\n  ['OP', '0x385f64d993f7b77d8182ed5003d97c60aa3361f3cecfe711544d2d59165e9bdf'],\n  ['ORDI', '0x193c739db502aadcef37c2589738b1e37bdb257d58cf1ab3c7ebc8e6df4e3ec0'],\n  ['PEPE', '0xd69731a2e74ac1ce884fc3890f7ee324b6deb66147055249568869ed700882e4'],\n  ['POL', '0xffd11c5a1cfd42f80afb2df4d9f264c15f956d68153335374ec10722edd70472'],\n  ['PYTH', '0x0bbf28e9a841a1cc788f6a361b17ca072d0ea3098a1e5df1c3922d06719579ff'],\n  ['RUNE', '0x5fcf71143bb70d41af4fa9aa1287e2efd3c5911cee59f909f915c9f61baacb1e'],\n  ['SHIB', '0xf0d57deca57b3da2fe63a493f4c25925fdfd8edf834b20f93e1f84dbd1504d4a'],\n  ['STX', '0xec7a775f46379b5e943c3526b1c8d54cd49749176b0b98e02dde68d1bd335c17'],\n  ['TIA', '0x09f7c1d7dfbb7df2b8fe3d3d87ee94a2259d212da4f30c1f0540d066dfa44723'],\n  ['UNI', '0x78d185a741d07edb3412b09008b7c5cfb9bbbd7d568bf00ba737b456ba171501'],\n  ['XLM', '0xb7a8eba68a997cd0210c2e1e4ee811ad2d174b3611c22d9ebf16f4cb7e9ba850'],\n  ['XRP', '0xec5d399846a9209f3fe5881d70aae9268c94339ff9817e8d18ff19fa05eea1c8'],\n  // collateral\n  ['USDC', '0xeaa020c61cc479712813461ce153894a96a6c00b21ed0cfc2798d1f9a9e9c94a'],\n  ['USDE', '0x6ec879b1e9963de5ee97e9c8710b742d6228252a5e2ca12d4ae81d7fe5ee8c5d'],\n  ['DAI', '0xb0948a5e5313200c632b51bb5ca32f6de0d36e9950a942d19751e833f70dabfd'],\n]);\n\nexport const collateralMappingWithRegularSymbol = new Map<string, string>([\n  ['seth', 'eth'],\n  ['wbtc', 'btc'],\n  ['fbtc', 'btc'],\n  ['wsteth', 'eth'],\n  ['fdai', 'dai'],\n  ['susdc', 'usdc'],\n  ['susde', 'usde'],\n  ['steth', 'eth'],\n  ['fsol', 'sol'],\n  ['fusdc', 'usdc'],\n  ['fusdt', 'usdt'],\n  ['ssol', 'sol'],\n  ['sdai', 'dai'],\n  ['usdx', 'usdc'],\n  ['stbtc', 'btc'],\n]);\n// === TOKEN DISTRIBUTION ===\n\nexport enum SUPPORTED_CHAINS {\n  BASE = 8453,\n}\n\nexport const REWARD_DISTRIBUTOR_ADDRESSES: Record<number, Record<string, Address>> = {\n  [SUPPORTED_CHAINS.BASE]: {\n    esprf: '0x6511718804180CC57833fEA036389A24604Dfc69',\n    prf: '0x0000000000000000000000000000000000000000',\n    rt: '0x648d6D711860699A11aBa192E9daBAfb6408af18',\n  },\n};\n\nexport const REWARD_DISTRIBUTOR_ABI = [\n  {\n    inputs: [{ internalType: 'contract IERC20', name: '_rewardToken', type: 'address' }],\n    stateMutability: 'nonpayable',\n    type: 'constructor',\n  },\n  { inputs: [], name: 'AccessControlBadConfirmation', type: 'error' },\n  {\n    inputs: [\n      { internalType: 'address', name: 'account', type: 'address' },\n      { internalType: 'bytes32', name: 'neededRole', type: 'bytes32' },\n    ],\n    name: 'AccessControlUnauthorizedAccount',\n    type: 'error',\n  },\n  {\n    anonymous: false,\n    inputs: [\n      { indexed: true, internalType: 'address', name: 'user', type: 'address' },\n      { indexed: false, internalType: 'uint256', name: 'amount', type: 'uint256' },\n    ],\n    name: 'RewardClaimed',\n    type: 'event',\n  },\n  {\n    anonymous: false,\n    inputs: [\n      { indexed: true, internalType: 'bytes32', name: 'role', type: 'bytes32' },\n      { indexed: true, internalType: 'bytes32', name: 'previousAdminRole', type: 'bytes32' },\n      { indexed: true, internalType: 'bytes32', name: 'newAdminRole', type: 'bytes32' },\n    ],\n    name: 'RoleAdminChanged',\n    type: 'event',\n  },\n  {\n    anonymous: false,\n    inputs: [\n      { indexed: true, internalType: 'bytes32', name: 'role', type: 'bytes32' },\n      { indexed: true, internalType: 'address', name: 'account', type: 'address' },\n      { indexed: true, internalType: 'address', name: 'sender', type: 'address' },\n    ],\n    name: 'RoleGranted',\n    type: 'event',\n  },\n  {\n    anonymous: false,\n    inputs: [\n      { indexed: true, internalType: 'bytes32', name: 'role', type: 'bytes32' },\n      { indexed: true, internalType: 'address', name: 'account', type: 'address' },\n      { indexed: true, internalType: 'address', name: 'sender', type: 'address' },\n    ],\n    name: 'RoleRevoked',\n    type: 'event',\n  },\n  {\n    inputs: [],\n    name: 'DEFAULT_ADMIN_ROLE',\n    outputs: [{ internalType: 'bytes32', name: '', type: 'bytes32' }],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [],\n    name: 'actualRound',\n    outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [\n      { internalType: 'uint256', name: '_round', type: 'uint256' },\n      { internalType: 'uint256', name: 'amount', type: 'uint256' },\n      { internalType: 'bytes32[]', name: 'proof', type: 'bytes32[]' },\n    ],\n    name: 'claimReward',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      { internalType: 'uint256[]', name: '_rounds', type: 'uint256[]' },\n      { internalType: 'uint256[]', name: 'amounts', type: 'uint256[]' },\n      { internalType: 'bytes32[][]', name: 'proofs', type: 'bytes32[][]' },\n    ],\n    name: 'claimRewards',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      { internalType: 'uint256', name: '', type: 'uint256' },\n      { internalType: 'address', name: '', type: 'address' },\n    ],\n    name: 'claimed',\n    outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [{ internalType: 'bytes32', name: 'role', type: 'bytes32' }],\n    name: 'getRoleAdmin',\n    outputs: [{ internalType: 'bytes32', name: '', type: 'bytes32' }],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [\n      { internalType: 'bytes32', name: 'role', type: 'bytes32' },\n      { internalType: 'address', name: 'account', type: 'address' },\n    ],\n    name: 'grantRole',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      { internalType: 'bytes32', name: 'role', type: 'bytes32' },\n      { internalType: 'address', name: 'account', type: 'address' },\n    ],\n    name: 'hasRole',\n    outputs: [{ internalType: 'bool', name: '', type: 'bool' }],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [\n      { internalType: 'bytes32', name: 'role', type: 'bytes32' },\n      { internalType: 'address', name: 'callerConfirmation', type: 'address' },\n    ],\n    name: 'renounceRole',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      { internalType: 'bytes32', name: 'role', type: 'bytes32' },\n      { internalType: 'address', name: 'account', type: 'address' },\n    ],\n    name: 'revokeRole',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [],\n    name: 'rewardToken',\n    outputs: [{ internalType: 'contract IERC20', name: '', type: 'address' }],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [{ internalType: 'uint256', name: '_round', type: 'uint256' }],\n    name: 'setActualRound',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [\n      { internalType: 'uint256', name: '_round', type: 'uint256' },\n      { internalType: 'bytes32', name: '_root', type: 'bytes32' },\n    ],\n    name: 'setRootPerRound',\n    outputs: [],\n    stateMutability: 'nonpayable',\n    type: 'function',\n  },\n  {\n    inputs: [{ internalType: 'bytes4', name: 'interfaceId', type: 'bytes4' }],\n    name: 'supportsInterface',\n    outputs: [{ internalType: 'bool', name: '', type: 'bool' }],\n    stateMutability: 'view',\n    type: 'function',\n  },\n  {\n    inputs: [{ internalType: 'uint256', name: '', type: 'uint256' }],\n    name: 'verifiersPerRound',\n    outputs: [{ internalType: 'contract Verifier', name: '', type: 'address' }],\n    stateMutability: 'view',\n    type: 'function',\n  },\n];\n","import { Decimal } from 'decimal.js';\nimport { formatEther, parseEther } from 'viem';\n\nexport const getDiff = (a: Decimal, b: Decimal): Decimal => {\n  return a.gt(b) ? a.minus(b) : b.minus(a);\n};\n\nexport const addDelay = async (ms: number): Promise<void> => {\n  return new Promise((resolve) => setTimeout(resolve, ms));\n};\n\nexport const getCurrentTimestampInSeconds = (): number => {\n  return Math.floor(Date.now() / 1000);\n};\n\nexport const getUniqueValuesFromArray = (originalArray: string[]): string[] => {\n  const uniqueArray: string[] = [];\n  const seenValues = new Set<string>();\n\n  originalArray.forEach((item) => {\n    // Check if the value is not already seen\n    if (!seenValues.has(item)) {\n      // Add the value to the uniqueArray\n      uniqueArray.push(item);\n      // Mark the value as seen in the set\n      seenValues.add(item);\n    }\n  });\n  return uniqueArray;\n};\n\nexport function convertWeiToEther(amountInWei: string | bigint | undefined): number {\n  if (amountInWei == undefined) {\n    throw new Error('Invalid amount received during conversion: undefined');\n  }\n  if (typeof amountInWei == 'bigint') {\n    return Number(formatEther(amountInWei));\n  } else if (typeof amountInWei == 'string') {\n    return Number(formatEther(BigInt(amountInWei)));\n  } else {\n    throw new Error('Expected string or bigint for conversion');\n  }\n}\n\nexport function convertEtherToWei(amount: string | number | undefined): bigint {\n  if (amount == undefined) {\n    throw new Error('Invalid amount received during conversion: undefined');\n  }\n  if (typeof amount == 'number') {\n    return parseEther(amount.toString());\n  } else if (typeof amount == 'string') {\n    return parseEther(amount);\n  } else {\n    throw new Error('Expected string or bigint for conversion');\n  }\n}\n"],"mappings":"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","names":[]}