{"version":3,"sources":["../src/index.ts","../src/config/index.ts","../src/config/chains.json","../src/config/envs.json","../src/config/schemas/index.ts","../src/config/schemas/eip712DomainSchema.ts","../src/config/schemas/pureEnvSchema.ts","../src/types.ts","../src/config/schemas/pureChainSchema.ts","../src/constants/cancelOrderTypes.ts","../src/constants/subOrderStatuses.ts","../src/constants/orderStatuses.ts","../src/constants/orderTypes.ts","../src/constants/networkCodes.ts","../src/constants/exchanges.ts","../src/constants/exchangesMap.ts","../src/constants/chains.ts","../src/constants/precisions.ts","../src/constants/gasLimits.ts","../src/constants/timings.ts","../src/constants/index.ts","../src/Unit/index.ts","../src/services/Aggregator/index.ts","../src/services/Aggregator/schemas/swapInfoSchema.ts","../src/services/Aggregator/schemas/exchangeInfoSchema.ts","../src/services/Aggregator/schemas/pairConfigSchema.ts","../src/services/Aggregator/schemas/cancelOrderSchema.ts","../src/services/Aggregator/schemas/orderBenefitsSchema.ts","../src/services/Aggregator/schemas/errorSchema.ts","../src/services/Aggregator/schemas/placeAtomicSwapSchema.ts","../src/services/Aggregator/ws/index.ts","../src/services/Aggregator/ws/MessageType.ts","../src/services/Aggregator/ws/SubscriptionType.ts","../src/services/Aggregator/ws/schemas/index.ts","../src/services/Aggregator/ws/schemas/addressUpdateSchema.ts","../src/constants/executionTypes.ts","../src/services/Aggregator/ws/schemas/balancesSchema.ts","../src/utils/index.ts","../src/utils/calculateFeeInFeeAsset.ts","../src/utils/calculateNetworkFee.ts","../src/utils/convertPrice.ts","../src/utils/calculateNetworkFeeInFeeAsset.ts","../src/utils/calculateServiceFeeInFeeAsset.ts","../src/utils/checkIsToken.ts","../src/utils/generateSecret.ts","../src/utils/denormalizeNumber.ts","../src/utils/normalizeNumber.ts","../src/utils/isNetworkCodeInEnvironment.ts","../src/utils/parseExchangeTradeTransaction.ts","../src/utils/toUpperCase.ts","../src/utils/toLowerCase.ts","../src/utils/isUppercasedNetworkCode.ts","../src/utils/getNativeCryptocurrencyName.ts","../src/utils/laconic-parse.ts","../src/utils/isValidChainId.ts","../src/utils/isKnownEnv.ts","../src/utils/removeFieldsFromObject.ts","../src/utils/typeHelpers.ts","../src/services/Aggregator/ws/schemas/baseMessageSchema.ts","../src/services/Aggregator/ws/schemas/assetPairsConfigSchema.ts","../src/services/Aggregator/ws/schemas/brokerMessageSchema.ts","../src/services/Aggregator/ws/schemas/errorSchema.ts","../src/services/Aggregator/ws/schemas/initMessageSchema.ts","../src/services/Aggregator/ws/schemas/pingPongMessageSchema.ts","../src/services/Aggregator/ws/schemas/swapInfoSchema.ts","../src/constants/factories.ts","../src/services/Aggregator/ws/schemas/orderBookSchema.ts","../src/services/Aggregator/ws/UnsubscriptionType.ts","../src/services/Aggregator/ws/schemas/unsubscriptionDoneSchema.ts","../src/services/Aggregator/ws/schemas/assetPairConfigSchema.ts","../src/utils/objectKeys.ts","../src/services/Aggregator/schemas/atomicSwapHistorySchema.ts","../src/constants/uppercasedNetworkCodes.ts","../src/services/Aggregator/schemas/redeemOrderSchema.ts","../src/services/Aggregator/schemas/index.ts","../src/services/Aggregator/schemas/orderSchema.ts","../src/services/Aggregator/schemas/aggregatedOrderbookSchema.ts","../src/utils/httpToWS.ts","../src/Unit/Pmm/schemas/order.ts","../src/services/BlockchainService/index.ts","../src/services/BlockchainService/schemas/index.ts","../src/services/BlockchainService/schemas/adminPoolSchema.ts","../src/services/BlockchainService/schemas/adminPoolsListSchema.ts","../src/services/BlockchainService/schemas/addPoolSchema.ts","../src/services/BlockchainService/schemas/atomicHistorySchema.ts","../src/utils/getValidArrayItems.ts","../src/services/BlockchainService/schemas/checkRedeemOrderSchema.ts","../src/services/BlockchainService/schemas/historySchema.ts","../src/services/BlockchainService/schemas/IDOSchema.ts","../src/services/BlockchainService/schemas/infoSchema.ts","../src/services/BlockchainService/schemas/poolsConfigSchema.ts","../src/addressSchema.ts","../src/services/BlockchainService/schemas/poolsInfoSchema.ts","../src/services/BlockchainService/schemas/atomicSummarySchema.ts","../src/services/BlockchainService/schemas/poolsLpAndStakedSchema.ts","../src/services/BlockchainService/schemas/userVotesSchema.ts","../src/services/BlockchainService/schemas/userEarnedSchema.ts","../src/services/BlockchainService/schemas/poolsV3InfoSchema.ts","../src/services/BlockchainService/schemas/pmmSchema.ts","../src/services/BlockchainService/schemas/pricesWithQuoteAssetSchema.ts","../src/services/BlockchainService/schemas/referralDataSchema.ts","../src/services/PriceFeed/index.ts","../src/services/PriceFeed/schemas/index.ts","../src/services/PriceFeed/schemas/candlesSchema.ts","../src/services/PriceFeed/schemas/statisticsSchema.ts","../src/services/PriceFeed/schemas/allTickersSchema.ts","../src/services/PriceFeed/ws/index.ts","../src/services/PriceFeed/ws/PriceFeedSubscription.ts","../src/services/PriceFeed/ws/priceFeedSubscriptions.ts","../src/services/PriceFeed/ws/schemas/index.ts","../src/services/PriceFeed/ws/schemas/tickerInfoSchema.ts","../src/services/PriceFeed/ws/schemas/candleSchema.ts","../src/services/PriceFeed/ws/schemas/priceSchema.ts","../src/services/PriceFeed/ws/schemas/allTickersSchema.ts","../src/services/PriceFeed/ws/schemas/cexPricesSchema.ts","../src/Unit/Exchange/deposit.ts","../src/utils/getBalance.ts","../src/utils/addressLikeToString.ts","../src/utils/getBalances.ts","../src/BalanceGuard.ts","../src/utils/arrayEquals.ts","../src/Unit/Exchange/getSwapInfo.ts","../src/Unit/Exchange/generateSwapCalldata.ts","../src/utils/safeGetters.ts","../src/Unit/Exchange/callGenerators/uniswapV2.ts","../src/Unit/Exchange/callGenerators/utils.ts","../src/Unit/Exchange/callGenerators/uniswapV3.ts","../src/Unit/Exchange/callGenerators/erc20.ts","../src/Unit/Exchange/callGenerators/curve.ts","../src/Unit/Exchange/callGenerators/weth.ts","../src/Unit/Exchange/callGenerators/feePayment.ts","../src/Unit/Exchange/callGenerators/aero.ts","../src/Unit/Exchange/withdraw.ts","../src/Unit/Exchange/swapLimit.ts","../src/utils/getAvailableFundsSources.ts","../src/crypt/index.ts","../src/crypt/signCancelOrder.ts","../src/config/eip712DomainData.json","../src/crypt/getDomainData.ts","../src/crypt/signOrder.ts","../src/crypt/hashOrder.ts","../src/utils/isValidFactory.ts","../src/Unit/Exchange/swapMarket.ts","../src/Unit/Exchange/index.ts","../src/services/Indexer/index.ts","../src/services/Indexer/schemas/index.ts","../src/services/Indexer/schemas/environment-response-schema.ts","../src/services/Indexer/schemas/util-schemas.ts","../src/services/Indexer/schemas/info-schema.ts","../src/services/Indexer/schemas/list-nft-order-response-schema.ts","../src/services/Indexer/schemas/pool-schema.ts","../src/services/Indexer/schemas/get-pool-response-schema.ts","../src/services/Indexer/schemas/basic-pool-info-schema.ts","../src/services/Indexer/schemas/list-pool-schema.ts","../src/services/Indexer/schemas/list-pool-v2-response-schema.ts","../src/services/Indexer/schemas/list-pool-v3-response-schema.ts","../src/services/Indexer/schemas/pool-v2-info-schema.ts","../src/services/Indexer/schemas/veORN-info-schema.ts","../src/services/Indexer/schemas/list-amount-schema.ts","../src/services/Indexer/schemas/voting-info-schema.ts","../src/services/Indexer/schemas/test-incrementor-schema.ts","../src/services/Indexer/schemas/get-points-at-schema.ts","../src/Unit/Pmm/index.ts","../src/Unit/Pmm/abi/OrionRFQ.ts","../src/Orion/index.ts","../src/services/ReferralSystem/index.ts","../src/services/ReferralSystem/schemas/index.ts","../src/services/ReferralSystem/schemas/linkSchema.ts","../src/services/ReferralSystem/schemas/distinctAnalyticsSchema.ts","../src/services/ReferralSystem/schemas/errorSchema.ts","../src/services/ReferralSystem/schemas/miniStatsSchema.ts","../src/services/ReferralSystem/schemas/rewardsMappingSchema.ts","../src/services/ReferralSystem/schemas/rewardsClaimedSchema.ts","../src/services/ReferralSystem/schemas/globalAnalyticsSchema.ts","../src/services/ReferralSystem/schemas/ratingSchema.ts","../src/services/ReferralSystem/schemas/claimInfoSchema.ts","../src/services/ReferralSystem/schemas/aggregatedHistorySchema.ts","../src/services/ReferralSystem/schemas/contractsAddressesSchema.ts","../src/services/ReferralSystem/schemas/inviteCodeLinkSchema.ts","../src/services/ReferralSystem/schemas/allTimeLeadersSchema.ts","../src/Orion/bridge/index.ts","../src/Orion/bridge/getHistory.ts","../src/Orion/bridge/swap.ts","../src/utils/invariant.ts","../src/services/Frontage/index.ts","../src/services/Frontage/schemas/index.ts","../src/services/Frontage/schemas/tickers-schema.ts","../src/services/index.ts"],"sourcesContent":["import { BigNumber } from 'bignumber.js';\nBigNumber.config({ EXPONENTIAL_AT: 1e+9 });\n\nexport * as config from './config/index.js';\nexport { default as Unit } from './Unit/index.js';\nexport { default as Orion } from './Orion/index.js';\nexport {generateSwapCalldata} from './Unit/Exchange/generateSwapCalldata.js';\nexport { default as factories} from './constants/factories.js';\nexport * as utils from './utils/index.js';\nexport * as services from './services/index.js';\nexport * as crypt from './crypt/index.js';\nexport * from './constants/index.js';\nexport * from './types.js';\n","import jsonChains from './chains.json' assert { type: 'json' };\nimport jsonEnvs from './envs.json' assert { type: 'json' };\nimport { pureEnvSchema, pureChainInfoSchema } from './schemas/index.js';\n\nconst chains = pureChainInfoSchema.parse(jsonChains);\nconst envs = pureEnvSchema.parse(jsonEnvs);\n\nexport {\n  chains,\n  envs,\n};\n\nexport * as schemas from './schemas/index.js';\n","{\n  \"1\": {\n    \"chainId\": \"1\",\n    \"explorer\": \"https://etherscan.io/\",\n    \"label\": \"Ethereum\",\n    \"shortName\": \"ETH\",\n    \"code\": \"eth\",\n    \"rpc\": \"https://trade.orion.xyz/eth-mainnet/rpc\",\n    \"baseCurrencyName\": \"ETH\",\n    \"contracts\": {\n      \"WETH\": \"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2\",\n      \"curveRegistry\": \"0x90E00ACe148ca3b23Ac1bC8C240C2a7Dd9c2d7f5\"\n    }\n  },\n  \"56\": {\n    \"chainId\": \"56\",\n    \"explorer\": \"https://bscscan.com/\",\n    \"label\": \"BNB Chain\",\n    \"shortName\": \"BSC\",\n    \"code\": \"bsc\",\n    \"rpc\": \"https://bsc-dataseed.bnbchain.org/\",\n    \"baseCurrencyName\": \"BNB\",\n    \"contracts\": {\n      \"WETH\": \"0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c\",\n      \"curveRegistry\": \"\"\n    }\n  },\n  \"97\": {\n    \"chainId\": \"97\",\n    \"explorer\": \"https://testnet.bscscan.com/\",\n    \"label\": \"BNB Chain Testnet\",\n    \"shortName\": \"BSC-Testnet\",\n    \"code\": \"bsc\",\n    \"rpc\": \"https://data-seed-prebsc-1-s1.bnbchain.org:8545/\",\n    \"baseCurrencyName\": \"BNB\",\n    \"contracts\": {\n      \"WETH\": \"0x23eE96bEaAB62abE126AA192e677c52bB7d274F0\",\n      \"curveRegistry\": \"0x93461072c00b2740c474a3d52c70be6249c802d8\"\n    }\n  },\n  \"204\": {\n    \"chainId\": \"204\",\n    \"explorer\": \"http://opbnbscan.com/\",\n    \"label\": \"opBNB Chain\",\n    \"shortName\": \"opBNB\",\n    \"code\": \"opbnb\",\n    \"rpc\": \"https://opbnb-mainnet-rpc.bnbchain.org\",\n    \"baseCurrencyName\": \"BNB\",\n    \"contracts\": {\n      \"WETH\": \"0x4200000000000000000000000000000000000006\",\n      \"curveRegistry\": \"\"\n    }\n  },\n  \"11155111\": {\n    \"chainId\": \"11155111\",\n    \"explorer\": \"https://sepolia.etherscan.io/\",\n    \"label\": \"Sepolia\",\n    \"shortName\": \"ETH-Sepolia\",\n    \"code\": \"eth\",\n    \"rpc\": \"https://gateway.tenderly.co/public/sepolia\",\n    \"baseCurrencyName\": \"ETH\",\n    \"contracts\": {\n      \"WETH\": \"\",\n      \"curveRegistry\": \"\"\n    }\n  },\n  \"123420000034\": {\n    \"chainId\": \"123420000034\",\n    \"explorer\": \"https://blockscout-123420000034.raas-testnet.gelato.digital/\",\n    \"label\": \"Event Horizon Testnet\",\n    \"shortName\": \"EH-Testnet\",\n    \"code\": \"eth\",\n    \"rpc\": \"https://rpc-123420000034.raas-testnet.gelato.digital/\",\n    \"baseCurrencyName\": \"ETH\",\n    \"contracts\": {\n      \"WETH\": \"0x4200000000000000000000000000000000000006\",\n      \"curveRegistry\": \"\"\n    }\n  },\n  \"1952959480\": {\n    \"chainId\": \"1952959480\",\n    \"explorer\": \"https://testnet-explorer.lumia.org/\",\n    \"label\": \"Lumia Testnet\",\n    \"shortName\": \"Lumia Testnet\",\n    \"code\": \"lumia\",\n    \"rpc\": \"https://testnet-rpc.lumia.org\",\n    \"baseCurrencyName\": \"LUMIA\",\n    \"contracts\": {\n      \"WETH\": \"0x1a1aF9C78704D3a0Ab9e031C92E7bd808711A582\",\n      \"curveRegistry\": \"\"\n    }\n  },\n  \"42161\": {\n    \"chainId\": \"42161\",\n    \"explorer\": \"https://arbiscan.io/\",\n    \"label\": \"Arbitrum\",\n    \"shortName\": \"Arbitrum\",\n    \"code\": \"arb\",\n    \"rpc\": \"https://arb1.arbitrum.io/rpc\",\n    \"baseCurrencyName\": \"ETH\",\n    \"contracts\": {\n      \"WETH\": \"0x82aF49447D8a07e3bd95BD0d56f35241523fBab1\",\n      \"curveRegistry\": \"0x445FE580eF8d70FF569aB36e80c647af338db351\"\n    }\n  },\n  \"250\": {\n    \"chainId\": \"250\",\n    \"explorer\": \"https://ftmscan.com/\",\n    \"label\": \"Fantom\",\n    \"shortName\": \"FTM\",\n    \"code\": \"ftm\",\n    \"rpc\": \"https://rpcapi.fantom.network/\",\n    \"baseCurrencyName\": \"FTM\",\n    \"contracts\": {\n      \"WETH\": \"0x21be370D5312f44cB42ce377BC9b8a0cEF1A4C83\",\n      \"curveRegistry\": \"0x0f854EA9F38ceA4B1c2FC79047E9D0134419D5d6\"\n    }\n  },\n  \"137\": {\n    \"chainId\": \"137\",\n    \"label\": \"Polygon\",\n    \"shortName\": \"Polygon\",\n    \"code\": \"polygon\",\n    \"baseCurrencyName\": \"MATIC\",\n    \"rpc\": \"https://polygon-rpc.com/\",\n    \"explorer\": \"https://polygonscan.com/\",\n    \"contracts\": {\n      \"WETH\": \"0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270\",\n      \"curveRegistry\": \"0x094d12e5b541784701FD8d65F11fc0598FBC6332\"\n    }\n  },\n  \"66\": {\n    \"chainId\": \"66\",\n    \"explorer\": \"https://www.oklink.com/okc/\",\n    \"label\": \"OKT Chain\",\n    \"shortName\": \"OKC\",\n    \"code\": \"okc\",\n    \"rpc\": \"https://exchainrpc.okex.org/\",\n    \"baseCurrencyName\": \"OKT\",\n    \"contracts\": {\n      \"WETH\": \"0x843340759bFCa4a3776F401cD2E03fE9bc0d838f\",\n      \"curveRegistry\": \"\"\n    }\n  },\n  \"2525\": {\n    \"chainId\": \"2525\",\n    \"label\": \"inEVM\",\n    \"shortName\": \"inEVM\",\n    \"code\": \"inevm\",\n    \"baseCurrencyName\": \"INJ\",\n    \"rpc\": \"https://inevm.calderachain.xyz/http/\",\n    \"explorer\": \"https://explorer.injective.network/\",\n    \"contracts\": {\n      \"WETH\": \"0x4C3A213bd5e8c4BD70a8396d6F3C8302571598Cd\",\n      \"curveRegistry\": \"\"\n    }\n  },\n  \"59144\": {\n    \"chainId\": \"59144\",\n    \"label\": \"Linea\",\n    \"shortName\": \"Linea\",\n    \"code\": \"linea\",\n    \"baseCurrencyName\": \"ETH\",\n    \"rpc\": \"https://rpc.linea.build/\",\n    \"explorer\": \"https://lineascan.build/\",\n    \"contracts\": {\n      \"WETH\": \"0xe5d7c2a44ffddf6b295a15c148167daaaf5cf34f\",\n      \"curveRegistry\": \"\"\n    }\n  },\n  \"43114\": {\n    \"chainId\": \"43114\",\n    \"label\": \"Avalanche Network\",\n    \"shortName\": \"Avax\",\n    \"code\": \"avax\",\n    \"baseCurrencyName\": \"AVAX\",\n    \"rpc\": \"https://api.avax.network/ext/bc/C/rpc/\",\n    \"explorer\": \"https://snowtrace.io/\",\n    \"contracts\": {\n      \"WETH\": \"0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7\",\n      \"curveRegistry\": \"\"\n    }\n  },\n  \"8453\": {\n    \"chainId\": \"8453\",\n    \"label\": \"Base\",\n    \"shortName\": \"BASE\",\n    \"code\": \"base\",\n    \"baseCurrencyName\": \"ETH\",\n    \"rpc\": \"https://mainnet.base.org/\",\n    \"explorer\": \"https://basescan.org/\",\n    \"contracts\": {\n      \"WETH\": \"0x4200000000000000000000000000000000000006\",\n      \"curveRegistry\": \"\"\n    }\n  },\n  \"994873017\": {\n    \"chainId\": \"994873017\",\n    \"explorer\": \"https://explorer.lumia.org/\",\n    \"label\": \"Lumia\",\n    \"shortName\": \"Lumia\",\n    \"code\": \"lumia\",\n    \"rpc\": \"https://mainnet-rpc.lumia.org\",\n    \"baseCurrencyName\": \"LUMIA\",\n    \"contracts\": {\n      \"WETH\": \"0x5A77f1443D16ee5761d310e38b62f77f726bC71c\",\n      \"curveRegistry\": \"\"\n    }\n  }\n}\n","{\n  \"production\": {\n    \"referralAPI\": \"https://trade.orion.xyz/referral-api\",\n    \"frontageAPI\": \"https://trade.orion.xyz/frontage\",\n    \"networks\": {\n      \"1\": {\n        \"api\": \"https://trade.orion.xyz/eth-mainnet\",\n        \"services\": {\n          \"aggregator\": {\n            \"http\": \"/backend\",\n            \"ws\": \"/v1\"\n          },\n          \"blockchain\": {\n            \"http\": \"\"\n          },\n          \"priceFeed\": {\n            \"all\": \"/price-feed\"\n          },\n          \"indexer\": {\n            \"http\": \"/orion-indexer/\"\n          }\n        },\n        \"liquidityMigratorAddress\": \"0x23a1820a47BcD022E29f6058a5FD224242F50D1A\"\n      },\n      \"56\": {\n        \"api\": \"https://trade.orion.xyz/bsc-mainnet\",\n        \"services\": {\n          \"aggregator\": {\n            \"http\": \"/backend\",\n            \"ws\": \"/v1\"\n          },\n          \"blockchain\": {\n            \"http\": \"\"\n          },\n          \"priceFeed\": {\n            \"all\": \"/price-feed\"\n          },\n          \"indexer\": {\n            \"http\": \"/orion-indexer/\"\n          }\n        }\n      },\n      \"250\": {\n        \"api\": \"https://trade.orion.xyz/ftm-mainnet\",\n        \"services\": {\n          \"aggregator\": {\n            \"http\": \"/backend\",\n            \"ws\": \"/v1\"\n          },\n          \"blockchain\": {\n            \"http\": \"\"\n          },\n          \"priceFeed\": {\n            \"all\": \"/price-feed\"\n          },\n          \"indexer\": {\n            \"http\": \"/orion-indexer/\"\n          }\n        }\n      },\n      \"137\": {\n        \"api\": \"https://trade.orion.xyz/polygon-mainnet\",\n        \"services\": {\n          \"aggregator\": {\n            \"http\": \"/backend\",\n            \"ws\": \"/v1\"\n          },\n          \"blockchain\": {\n            \"http\": \"\"\n          },\n          \"priceFeed\": {\n            \"all\": \"/price-feed\"\n          },\n          \"indexer\": {\n            \"http\": \"/orion-indexer/\"\n          }\n        }\n      },\n      \"66\": {\n        \"api\": \"https://trade.orion.xyz/okc-mainnet\",\n        \"services\": {\n          \"aggregator\": {\n            \"http\": \"/backend\",\n            \"ws\": \"/v1\"\n          },\n          \"blockchain\": {\n            \"http\": \"\"\n          },\n          \"priceFeed\": {\n            \"all\": \"/price-feed\"\n          },\n          \"indexer\": {\n            \"http\": \"/orion-indexer/\"\n          }\n        }\n      },\n      \"42161\": {\n        \"api\": \"https://trade.orion.xyz/arbitrum-one\",\n        \"services\": {\n          \"aggregator\": {\n            \"http\": \"/backend\",\n            \"ws\": \"/v1\"\n          },\n          \"blockchain\": {\n            \"http\": \"\"\n          },\n          \"priceFeed\": {\n            \"all\": \"/price-feed\"\n          },\n          \"indexer\": {\n            \"http\": \"/orion-indexer/\"\n          }\n        }\n      },\n      \"204\": {\n        \"api\": \"https://trade.orion.xyz/opbnb-mainnet\",\n        \"services\": {\n          \"aggregator\": {\n            \"http\": \"/backend\",\n            \"ws\": \"/v1\"\n          },\n          \"blockchain\": {\n            \"http\": \"\"\n          },\n          \"priceFeed\": {\n            \"all\": \"/price-feed\"\n          },\n          \"indexer\": {\n            \"http\": \"/orion-indexer/\"\n          }\n        }\n      },\n      \"2525\": {\n        \"api\": \"https://trade.orion.xyz/inevm-mainnet\",\n        \"services\": {\n          \"aggregator\": {\n            \"http\": \"/backend\",\n            \"ws\": \"/v1\"\n          },\n          \"blockchain\": {\n            \"http\": \"\"\n          },\n          \"priceFeed\": {\n            \"all\": \"/price-feed\"\n          },\n          \"indexer\": {\n            \"http\": \"/orion-indexer/\"\n          }\n        }\n      },\n      \"59144\": {\n        \"api\": \"https://trade.orion.xyz/linea-mainnet\",\n        \"services\": {\n          \"aggregator\": {\n            \"http\": \"/backend\",\n            \"ws\": \"/v1\"\n          },\n          \"blockchain\": {\n            \"http\": \"\"\n          },\n          \"priceFeed\": {\n            \"all\": \"/price-feed\"\n          },\n          \"indexer\": {\n            \"http\": \"/orion-indexer/\"\n          }\n        }\n      },\n      \"43114\": {\n        \"api\": \"https://trade.orion.xyz/avalanche-c-chain\",\n        \"services\": {\n          \"aggregator\": {\n            \"http\": \"/backend\",\n            \"ws\": \"/v1\"\n          },\n          \"blockchain\": {\n            \"http\": \"\"\n          },\n          \"priceFeed\": {\n            \"all\": \"/price-feed\"\n          },\n          \"indexer\": {\n            \"http\": \"/orion-indexer/\"\n          }\n        }\n      },\n      \"8453\": {\n        \"api\": \"https://trade.orion.xyz/base-mainnet\",\n        \"services\": {\n          \"aggregator\": {\n            \"http\": \"/backend\",\n            \"ws\": \"/v1\"\n          },\n          \"blockchain\": {\n            \"http\": \"\"\n          },\n          \"priceFeed\": {\n            \"all\": \"/price-feed\"\n          },\n          \"indexer\": {\n            \"http\": \"/orion-indexer/\"\n          }\n        }\n      },\n      \"994873017\": {\n        \"api\": \"https://trade.orion.xyz/lumia-mainnet\",\n        \"services\": {\n          \"aggregator\": {\n            \"http\": \"/backend\",\n            \"ws\": \"/v1\"\n          },\n          \"blockchain\": {\n            \"http\": \"\"\n          },\n          \"priceFeed\": {\n            \"all\": \"/price-feed\"\n          },\n          \"indexer\": {\n            \"http\": \"/orion-indexer/\"\n          }\n        }\n      }\n    }\n  },\n  \"testing\": {\n    \"referralAPI\": \"https://testing.orion.xyz/referral-api\",\n    \"frontageAPI\": \"https://testing.orion.xyz/frontage\",\n    \"networks\": {\n      \"97\": {\n        \"api\": \"https://testing.orion.xyz/bsc-testnet\",\n        \"services\": {\n          \"aggregator\": {\n            \"http\": \"/backend\",\n            \"ws\": \"/v1\"\n          },\n          \"blockchain\": {\n            \"http\": \"\"\n          },\n          \"priceFeed\": {\n            \"all\": \"/price-feed\"\n          },\n          \"indexer\": {\n            \"http\": \"/orion-indexer/\"\n          }\n        },\n        \"liquidityMigratorAddress\": \"0x01b10dds12478C88A5E18e2707E729906bC25CfF6\"\n      },\n      \"11155111\": {\n        \"api\": \"https://testing.orion.xyz/eth-sepolia\",\n        \"services\": {\n          \"aggregator\": {\n            \"http\": \"/backend\",\n            \"ws\": \"/v1\"\n          },\n          \"blockchain\": {\n            \"http\": \"\"\n          },\n          \"priceFeed\": {\n            \"all\": \"/price-feed\"\n          },\n          \"indexer\": {\n            \"http\": \"/orion-indexer/\"\n          }\n        }\n      },\n      \"123420000034\": {\n        \"api\": \"https://testing.orion.xyz/event-horizon-testnet\",\n        \"services\": {\n          \"aggregator\": {\n            \"http\": \"/backend\",\n            \"ws\": \"/v1\"\n          },\n          \"blockchain\": {\n            \"http\": \"\"\n          },\n          \"priceFeed\": {\n            \"all\": \"/price-feed\"\n          },\n          \"indexer\": {\n            \"http\": \"/orion-indexer/\"\n          }\n        }\n      },\n      \"1952959480\": {\n        \"api\": \"https://testing.orion.xyz/lumia-testnet\",\n        \"services\": {\n          \"aggregator\": {\n            \"http\": \"/backend\",\n            \"ws\": \"/v1\"\n          },\n          \"blockchain\": {\n            \"http\": \"\"\n          },\n          \"priceFeed\": {\n            \"all\": \"/price-feed\"\n          },\n          \"indexer\": {\n            \"http\": \"/orion-indexer/\"\n          }\n        }\n      }\n    }\n  },\n  \"staging\": {\n    \"referralAPI\": \"https://staging.orion.xyz/referral-api\",\n    \"frontageAPI\": \"https://staging.orion.xyz/frontage\",\n    \"networks\": {\n      \"1\": {\n        \"api\": \"https://staging.orion.xyz/eth-mainnet\",\n        \"services\": {\n          \"aggregator\": {\n            \"http\": \"/backend\",\n            \"ws\": \"/v1\"\n          },\n          \"blockchain\": {\n            \"http\": \"\"\n          },\n          \"priceFeed\": {\n            \"all\": \"/price-feed\"\n          },\n          \"indexer\": {\n            \"http\": \"/orion-indexer/\"\n          }\n        }\n      },\n      \"56\": {\n        \"api\": \"https://staging.orion.xyz/bsc-mainnet\",\n        \"services\": {\n          \"aggregator\": {\n            \"http\": \"/backend\",\n            \"ws\": \"/v1\"\n          },\n          \"blockchain\": {\n            \"http\": \"\"\n          },\n          \"priceFeed\": {\n            \"all\": \"/price-feed\"\n          },\n          \"indexer\": {\n            \"http\": \"/orion-indexer/\"\n          }\n        }\n      },\n      \"250\": {\n        \"api\": \"https://staging.orion.xyz/ftm-mainnet\",\n        \"services\": {\n          \"aggregator\": {\n            \"http\": \"/backend\",\n            \"ws\": \"/v1\"\n          },\n          \"blockchain\": {\n            \"http\": \"\"\n          },\n          \"priceFeed\": {\n            \"all\": \"/price-feed\"\n          },\n          \"indexer\": {\n            \"http\": \"/orion-indexer/\"\n          }\n        }\n      },\n      \"137\": {\n        \"api\": \"https://staging.orion.xyz/polygon-mainnet\",\n        \"services\": {\n          \"aggregator\": {\n            \"http\": \"/backend\",\n            \"ws\": \"/v1\"\n          },\n          \"blockchain\": {\n            \"http\": \"\"\n          },\n          \"priceFeed\": {\n            \"all\": \"/price-feed\"\n          },\n          \"indexer\": {\n            \"http\": \"/orion-indexer/\"\n          }\n        }\n      },\n      \"66\": {\n        \"api\": \"https://staging.orion.xyz/okc-mainnet\",\n        \"services\": {\n          \"aggregator\": {\n            \"http\": \"/backend\",\n            \"ws\": \"/v1\"\n          },\n          \"blockchain\": {\n            \"http\": \"\"\n          },\n          \"priceFeed\": {\n            \"all\": \"/price-feed\"\n          },\n          \"indexer\": {\n            \"http\": \"/orion-indexer/\"\n          }\n        }\n      },\n      \"42161\": {\n        \"api\": \"https://staging.orion.xyz/arbitrum-one\",\n        \"services\": {\n          \"aggregator\": {\n            \"http\": \"/backend\",\n            \"ws\": \"/v1\"\n          },\n          \"blockchain\": {\n            \"http\": \"\"\n          },\n          \"priceFeed\": {\n            \"all\": \"/price-feed\"\n          },\n          \"indexer\": {\n            \"http\": \"/orion-indexer/\"\n          }\n        }\n      },\n      \"204\": {\n        \"api\": \"https://staging.orion.xyz/opbnb-mainnet\",\n        \"services\": {\n          \"aggregator\": {\n            \"http\": \"/backend\",\n            \"ws\": \"/v1\"\n          },\n          \"blockchain\": {\n            \"http\": \"\"\n          },\n          \"priceFeed\": {\n            \"all\": \"/price-feed\"\n          },\n          \"indexer\": {\n            \"http\": \"/orion-indexer/\"\n          }\n        }\n      },\n      \"2525\": {\n        \"api\": \"https://staging.orion.xyz/inevm-mainnet\",\n        \"services\": {\n          \"aggregator\": {\n            \"http\": \"/backend\",\n            \"ws\": \"/v1\"\n          },\n          \"blockchain\": {\n            \"http\": \"\"\n          },\n          \"priceFeed\": {\n            \"all\": \"/price-feed\"\n          },\n          \"indexer\": {\n            \"http\": \"/orion-indexer/\"\n          }\n        }\n      },\n      \"59144\": {\n        \"api\": \"https://staging.orion.xyz/linea-mainnet\",\n        \"services\": {\n          \"aggregator\": {\n            \"http\": \"/backend\",\n            \"ws\": \"/v1\"\n          },\n          \"blockchain\": {\n            \"http\": \"\"\n          },\n          \"priceFeed\": {\n            \"all\": \"/price-feed\"\n          },\n          \"indexer\": {\n            \"http\": \"/orion-indexer/\"\n          }\n        }\n      },\n      \"43114\": {\n        \"api\": \"https://staging.orion.xyz/avalanche-c-chain\",\n        \"services\": {\n          \"aggregator\": {\n            \"http\": \"/backend\",\n            \"ws\": \"/v1\"\n          },\n          \"blockchain\": {\n            \"http\": \"\"\n          },\n          \"priceFeed\": {\n            \"all\": \"/price-feed\"\n          },\n          \"indexer\": {\n            \"http\": \"/orion-indexer/\"\n          }\n        }\n      },\n      \"8453\": {\n        \"api\": \"https://staging.orion.xyz/base-mainnet\",\n        \"services\": {\n          \"aggregator\": {\n            \"http\": \"/backend\",\n            \"ws\": \"/v1\"\n          },\n          \"blockchain\": {\n            \"http\": \"\"\n          },\n          \"priceFeed\": {\n            \"all\": \"/price-feed\"\n          },\n          \"indexer\": {\n            \"http\": \"/orion-indexer/\"\n          }\n        }\n      }\n    }\n  },\n  \"experimental\": {\n    \"referralAPI\": \"https://testing.orion.xyz/referral-api\",\n    \"frontageAPI\": \"https://testing.orion.xyz/frontage\",\n    \"networks\": {\n      \"97\": {\n        \"api\": \"https://dn-dev.orion.xyz/bsc-testnet\",\n        \"services\": {\n          \"aggregator\": {\n            \"http\": \"/backend\",\n            \"ws\": \"/v1\"\n          },\n          \"blockchain\": {\n            \"http\": \"\"\n          },\n          \"priceFeed\": {\n            \"all\": \"/price-feed\"\n          },\n          \"indexer\": {\n            \"http\": \"/orion-indexer/\"\n          }\n        }\n      }\n    }\n  },\n  \"kucoin-production\": {\n    \"referralAPI\": \"https://trade.orion.xyz/referral-api\",\n    \"frontageAPI\": \"https://trade.orion.xyz/frontage\",\n    \"networks\": {\n      \"1\": {\n        \"api\": \"https://trade.orion.xyz/eth-mainnet\",\n        \"services\": {\n          \"aggregator\": {\n            \"http\": \"/backend\",\n            \"ws\": \"/v1\"\n          },\n          \"blockchain\": {\n            \"http\": \"\"\n          },\n          \"priceFeed\": {\n            \"all\": \"/price-feed\"\n          },\n          \"indexer\": {\n            \"http\": \"/orion-indexer/\"\n          }\n        },\n        \"liquidityMigratorAddress\": \"0x23a1820a47BcD022E29f6058a5FD224242F50D1A\"\n      },\n      \"56\": {\n        \"api\": \"https://trade.orion.xyz/bsc-mainnet\",\n        \"services\": {\n          \"aggregator\": {\n            \"http\": \"/backend\",\n            \"ws\": \"/v1\"\n          },\n          \"blockchain\": {\n            \"http\": \"\"\n          },\n          \"priceFeed\": {\n            \"all\": \"/price-feed\"\n          },\n          \"indexer\": {\n            \"http\": \"/orion-indexer/\"\n          }\n        }\n      },\n      \"250\": {\n        \"api\": \"https://trade.orion.xyz/ftm-mainnet\",\n        \"services\": {\n          \"aggregator\": {\n            \"http\": \"/backend\",\n            \"ws\": \"/v1\"\n          },\n          \"blockchain\": {\n            \"http\": \"\"\n          },\n          \"priceFeed\": {\n            \"all\": \"/price-feed\"\n          },\n          \"indexer\": {\n            \"http\": \"/orion-indexer/\"\n          }\n        }\n      },\n      \"137\": {\n        \"api\": \"https://trade.orion.xyz/polygon-mainnet\",\n        \"services\": {\n          \"aggregator\": {\n            \"http\": \"/backend\",\n            \"ws\": \"/v1\"\n          },\n          \"blockchain\": {\n            \"http\": \"\"\n          },\n          \"priceFeed\": {\n            \"all\": \"/price-feed\"\n          },\n          \"indexer\": {\n            \"http\": \"/orion-indexer/\"\n          }\n        }\n      },\n      \"66\": {\n        \"api\": \"https://trade.orion.xyz/okc-mainnet\",\n        \"services\": {\n          \"aggregator\": {\n            \"http\": \"/backend\",\n            \"ws\": \"/v1\"\n          },\n          \"blockchain\": {\n            \"http\": \"\"\n          },\n          \"priceFeed\": {\n            \"all\": \"/price-feed\"\n          },\n          \"indexer\": {\n            \"http\": \"/orion-indexer/\"\n          }\n        }\n      }\n    }\n  }\n}\n","export { default as eip712DomainSchema } from './eip712DomainSchema.js';\nexport * from './pureEnvSchema.js';\nexport * from './pureChainSchema.js';\n","import { z } from 'zod';\n\nconst eip712DomainSchema = z.object({\n  name: z.string(),\n  version: z.string(),\n  chainId: z.string(),\n  verifyingContract: z.string(),\n  salt: z.string(),\n})\n  .partial()\n  .refine(\n    (data) => Object.keys(data).length > 0,\n    'At least one property should be filled in.',\n  );\n\nexport default eip712DomainSchema;\n","import { z } from 'zod';\nimport { SupportedChainId } from '../../types.js';\n\nexport const pureEnvNetworksSchema = z.object({\n  api: z.string(),\n  services: z.object({\n    blockchain: z.object({\n      http: z.string(),\n    }),\n    aggregator: z.object({\n      http: z.string(),\n      ws: z.string(),\n    }),\n    priceFeed: z.object({\n      all: z.string(),\n    }),\n    indexer: z.object({\n      http: z.string(),\n    }).optional()\n  }),\n  rpc: z.string().optional(),\n  liquidityMigratorAddress: z.string().optional(),\n});\n\nexport const pureEnvPayloadSchema = z.object({\n  analyticsAPI: z.string().url().optional(),\n  referralAPI: z.string().url(),\n  frontageAPI: z.string().url(),\n  networks: z.record(\n    z.nativeEnum(SupportedChainId),\n    pureEnvNetworksSchema\n  ),\n});\n\nexport const knownEnvs = ['production', 'staging', 'testing'] as const;\n\nexport const pureEnvSchema = z.record(\n  z.enum(knownEnvs).or(z.string()),\n  pureEnvPayloadSchema,\n);\n","/* eslint-disable @typescript-eslint/consistent-type-definitions */\nimport type factories from './constants/factories.js';\nimport type { BigNumber } from 'bignumber.js';\nimport type subOrderStatuses from './constants/subOrderStatuses.js';\nimport type positionStatuses from './constants/positionStatuses.js';\nimport type { knownEnvs } from './config/schemas';\nimport type getHistory from './Orion/bridge/getHistory.js';\nimport type { networkCodes } from './constants';\n\nexport type DeepPartial<T> = T extends object ? {\n  [P in keyof T]?: DeepPartial<T[P]>;\n} : T;\n\nexport type AssetPairUpdate = {\n  minQty: number\n  pricePrecision: number\n}\nexport type SubOrder = {\n  pair: string\n  exchange: string\n  id: number\n  amount: number\n  settledAmount: number\n  price: number\n  status: typeof subOrderStatuses[number]\n  side: 'BUY' | 'SELL'\n  subOrdQty: number\n}\n\nexport type Balance = {\n  tradable: string\n  reserved: string\n  contract: string\n  wallet: string\n  allowance: string\n}\n\nexport type PositionStatus = typeof positionStatuses[number];\n\nexport type Order = {\n  senderAddress: string // address\n  matcherAddress: string // address\n  baseAsset: string // address\n  quoteAsset: string // address\n  matcherFeeAsset: string // address\n  amount: number // uint64\n  price: number // uint64\n  matcherFee: number // uint64\n  nonce: number // uint64\n  expiration: number // uint64\n  buySide: 0 | 1 // uint8, 1=buy, 0=sell\n}\n\nexport type SignedOrder = {\n  id: string // hash of Order (it's not part of order structure in smart-contract)\n  signature: string // bytes\n  needWithdraw?: boolean // bool (not supported yet by smart-contract)\n} & Order\n\nexport type CancelOrderRequest = {\n  id: number | string\n  senderAddress: string\n}\n\nexport type SignedCancelOrderRequest = {\n  id: number | string\n  senderAddress: string\n  signature: string\n} & CancelOrderRequest\n\nexport type Pair = {\n  name: string\n  baseCurrency: string\n  quoteCurrency: string\n  lastPrice: string\n  openPrice: string\n  change24h: string\n  high: string\n  low: string\n  vol24h: string\n}\n\nexport enum SupportedChainId {\n  MAINNET = '1',\n  BSC = '56',\n  OKC = '66',\n  POLYGON = '137',\n  OPBNB = '204',\n  FANTOM_OPERA = '250',\n  INEVM = '2525',\n  BASE = '8453',\n  ARBITRUM = '42161',\n  AVAX = '43114',\n  LINEA = '59144',\n  LUMIA = '994873017',\n\n  BSC_TESTNET = '97',\n  SEPOLIA = '11155111',\n  EVENT_HORIZON_TESTNET = '123420000034',\n  LUMIA_TESTNET = '1952959480',\n\n  // For testing and debug purpose\n  // BROKEN = '0',\n}\n\nconst balanceTypes = ['exchange', 'wallet'] as const;\n\nexport type Source = typeof balanceTypes[number];\nexport type Asset = {\n  name: string\n  address: string\n}\nexport type BalanceRequirement = {\n  readonly reason: string\n  readonly asset: Asset\n  readonly amount: string\n  readonly sources: Source[]\n  readonly spenderAddress?: string | undefined\n}\n\nexport type AggregatedBalanceRequirement = {\n  readonly asset: Asset\n  readonly sources: Source[]\n  readonly spenderAddress?: string | undefined\n  items: Partial<Record<string, string>>\n}\n\nexport type ApproveFix = {\n  readonly type: 'byApprove'\n  readonly targetAmount: BigNumber.Value\n  readonly spenderAddress: string\n}\n\nexport type DepositFix = {\n  readonly type: 'byDeposit'\n  readonly amount: BigNumber.Value\n  readonly asset: string\n}\n\ntype Fix = ApproveFix | DepositFix;\n\nexport type BalanceIssue = {\n  readonly asset: Asset\n  readonly message: string\n  readonly sources: Source[]\n  readonly fixes?: Fix[]\n}\n\n// export type Exchange = typeof exchanges[number];\n\nexport type OrderbookItem = {\n  price: string\n  amount: string\n  exchanges: string[]\n  vob: Array<{\n    side: 'BUY' | 'SELL'\n    pairName: string\n  }>\n}\n\nexport type SwapInfoAlternative = {\n  exchanges: string[]\n  path: string[]\n  marketAmountOut?: number | undefined\n  marketAmountIn?: number | undefined\n  marketPrice: number\n  availableAmountIn?: number | undefined\n  availableAmountOut?: number | undefined\n}\n\nexport type Factory = typeof factories[number]\n\nexport type SingleSwap = {\n  pool: string\n  assetIn: string\n  assetOut: string\n  factory: Factory\n  assetAddressIn: string\n  assetAddressOut: string\n  fee?: number | undefined\n}\n\nexport type SwapInfoBase = {\n  swapRequestId: string\n  assetIn: string\n  assetOut: string\n  amountIn: number\n  amountOut: number\n  minAmountIn: number\n  minAmountOut: number\n\n  path: string[]\n  exchangeContractPath: SingleSwap[]\n  exchanges?: string[] | undefined\n  poolOptimal: boolean\n\n  price?: number | undefined\n  marketPrice?: number | undefined\n  orderInfo?: {\n    pair: string\n    side: 'BUY' | 'SELL'\n    amount: number\n    safePrice: number\n  } | undefined\n  alternatives: SwapInfoAlternative[]\n  assetsNameMapping?: Partial<Record<string, string>> | undefined\n  usdInfo: {\n    availableAmountIn: number | undefined\n    availableAmountOut: number | undefined\n    marketAmountOut: number | undefined\n    marketAmountIn: number | undefined\n    difference: string | undefined\n  } | undefined\n  autoSlippage: number | undefined\n}\n\nexport type SwapInfoByAmountIn = SwapInfoBase & {\n  isTradeBuy: false\n  availableAmountIn?: number | undefined\n  marketAmountOut?: number | undefined\n}\n\nexport type SwapInfoByAmountOut = SwapInfoBase & {\n  isTradeBuy: true\n  marketAmountIn?: number | undefined\n  availableAmountOut?: number | undefined\n}\n\nexport type SwapInfo = SwapInfoByAmountIn | SwapInfoByAmountOut;\n\nexport enum HistoryTransactionStatus {\n  PENDING = 'Pending',\n  DONE = 'Done',\n  APPROVING = 'Approving',\n  CANCELLED = 'Cancelled',\n}\n\nexport type BasicAuthCredentials = {\n  username: string\n  password: string\n}\n\nexport type VerboseUnitConfig = {\n  // env?: string;\n  // api: string;\n  chainId: SupportedChainId\n  nodeJsonRpc: string\n  services: {\n    blockchainService: {\n      http: string\n      // For example:\n      // http://localhost:3001/,\n      // http://10.123.34.23:3001/,\n      // https://blockchain:3001/\n    }\n    aggregator: {\n      http: string\n      ws: string\n      // For example:\n      // http://localhost:3002/,\n      // http://10.34.23.5:3002/,\n      // https://aggregator:3002/\n    }\n    priceFeed: {\n      api: string\n      // For example:\n      // http://localhost:3003/,\n      // http://10.23.5.11:3003/,\n      // https://price-feed:3003/\n    }\n    indexer?: {\n      api: string\n      // For example:\n      // http://localhost:3004/,\n      // http://\n    } | undefined\n  }\n  basicAuth?: BasicAuthCredentials\n}\n\nexport type KnownEnv = typeof knownEnvs[number];\n\nexport type Json = string | number | boolean | null | Json[] | { [key: string]: Json };\n\nexport type EnvConfig = {\n  analyticsAPI: string | undefined\n  referralAPI: string\n  frontageAPI: string\n  networks: Partial<\n        Record<\n            SupportedChainId,\n            VerboseUnitConfig\n        >\n    >\n}\nexport type AggregatedAssets = Partial<\n    Record<\n        string,\n        Partial<\n            Record<SupportedChainId, {\n              address: string\n            }>\n        >\n    >\n>;\n\nexport type RedeemOrder = {\n  sender: string\n  receiver: string\n  asset: string\n  amount: number\n  expiration: number\n  secretHash: string\n  signature: string\n  claimReceiver: string\n}\n\nexport interface AtomicSwapLocal {\n  secret: string\n  secretHash: string\n  walletAddress: string\n  env?: string | undefined\n\n  sourceChainId?: SupportedChainId | undefined\n  targetChainId?: SupportedChainId | undefined\n\n  amount?: string | undefined\n  assetName?: string | undefined\n\n  liquidityMigrationTxHash?: string | undefined\n  lockTransactionHash?: string | undefined\n  refundTransactionHash?: string | undefined\n\n  creationDate?: number | undefined\n  lockExpiration?: number | undefined\n  placingOrderError?: string | undefined\n  redeemSettlement?: {\n    type: 'own_tx'\n  } | {\n    type: 'orion_tx'\n    requestedAt?: number\n    result?: {\n      timestamp: number\n      value: 'success' | 'failed'\n    }\n  } | undefined\n}\n\nexport enum TxStatus {\n  QUEUED = 'queued',\n  SIGN_FAILED = 'sign_failed',\n  GAS_ESTIMATING = 'gas_estimating',\n  ESTIMATE_GAS_FAILED = 'estimate_gas_failed',\n  CANCELLED = 'cancelled',\n  PENDING = 'pending',\n  FAILED = 'failed',\n  SETTLED = 'settled',\n  SIGNING = 'signing',\n  UNKNOWN = 'unknown',\n}\n\nexport enum TxType {\n  SWAP_THROUGH_ORION_POOL = 'SWAP_THROUGH_ORION_POOL',\n  DEPOSIT = 'DEPOSIT',\n  WITHDRAW = 'WITHDRAW',\n  BRIDGE_LOCK = 'BRIDGE_LOCK',\n  BRIDGE_REDEEM = 'BRIDGE_REDEEM',\n  BRIDGE_REFUND = 'BRIDGE_REFUND',\n  LIQUIDITY_MIGRATION = 'LIQUIDITY_MIGRATION',\n  REDEEM_TWO_ATOMICS = 'REDEEM_TWO_ATOMICS',\n}\n\nexport type TxDepositOrWithdrawPayload = {\n  type: TxType.DEPOSIT | TxType.WITHDRAW\n  data: {\n    asset: string\n    amount: string\n  }\n};\n\nexport type TxSwapThroughOrionPoolPayload = {\n  type: TxType.SWAP_THROUGH_ORION_POOL\n  data: {\n    side: 'buy' | 'sell'\n    assetIn: string\n    assetOut: string\n    amount: string\n    price: string\n  }\n};\n\nexport type TxBridgePayload = {\n  type: TxType.BRIDGE_LOCK | TxType.BRIDGE_REDEEM | TxType.BRIDGE_REFUND\n  data: {\n    secretHash: string\n  }\n}\n\nexport type TxLiquidityMigrationPayload = {\n  type: TxType.LIQUIDITY_MIGRATION\n  data: {\n    source: SupportedChainId\n    target: SupportedChainId\n    pair: string\n    pairAddress: string\n    assetA: {\n      amount: string\n      secretHash: string\n      secret: string\n    }\n    assetB: {\n      amount: string\n      secretHash: string\n      secret: string\n    }\n    expiration: number\n    env?: string\n  }\n}\n\nexport type TxRedeemTwoAtomicsPayload = {\n  type: TxType.REDEEM_TWO_ATOMICS\n  data: {\n    secretHash1: string\n    secretHash2: string\n  }\n}\n\nexport type TransactionInfo = {\n  id?: string\n  status?: TxStatus\n  hash?: string\n  payload?: TxDepositOrWithdrawPayload\n  | TxSwapThroughOrionPoolPayload\n  | TxBridgePayload\n  | TxLiquidityMigrationPayload\n  | TxRedeemTwoAtomicsPayload\n}\n\ntype BridgeHistory = Awaited<ReturnType<typeof getHistory>>;\n\ntype BridgeHistoryItem = NonNullable<BridgeHistory[string]>;\n\nexport type AtomicSwap = Partial<\n    Omit<BridgeHistoryItem, 'creationDate' | 'expiration' | 'secret'>\n> & Partial<\n    Omit<AtomicSwapLocal, 'creationDate' | 'expiration' | 'secret'>\n> & {\n  sourceChainId: SupportedChainId\n  targetChainId: SupportedChainId\n  lockExpiration: number\n  secretHash: string\n  walletAddress: string\n  secret?: string | undefined\n\n  creationDate?: number | undefined\n  redeemExpired?: boolean | undefined\n\n  lockTx?: TransactionInfo | undefined\n  redeemTx?: TransactionInfo | undefined\n  refundTx?: TransactionInfo | undefined\n  liquidityMigrationTx?: TransactionInfo | undefined\n}\n\nexport type OrderSource = 'TERMINAL_MARKET' | 'TERMINAL_LIMIT' | 'SWAP_UI' | 'WIDGET';\n\n// Frontage\nexport type NetworkCode = typeof networkCodes[number];\n\nexport type TickersCategories = 'FAVORITES' | 'USD' | 'ORN' | 'NATIVE' | 'ALTS';\n\nexport type TickersSortBy = 'PRICE' | 'CHANGE' | 'VOLUME';\n\nexport type TickersSortType = 'ASCENDING' | 'DESCENDING';\n\nexport type TickersBaseSearchParams = {\n  currentNetwork?: NetworkCode\n  targetNetwork?: NetworkCode\n  sortBy?: TickersSortBy\n  sortType?: TickersSortType\n  offset?: number\n  limit?: number\n}\n","import { z } from 'zod';\nimport { networkCodes } from '../../constants/index.js';\nimport { SupportedChainId } from '../../types.js';\n\nexport const pureChainInfoPayloadSchema = z.object({\n  chainId: z.nativeEnum(SupportedChainId),\n  label: z.string(),\n  shortName: z.string(),\n  code: z.enum(networkCodes),\n  explorer: z.string(),\n  rpc: z.string(),\n  baseCurrencyName: z.string(),\n  contracts: z.record(z.string(), z.string())\n});\n\nexport const pureChainInfoSchema = z.record(\n  z.nativeEnum(SupportedChainId),\n  pureChainInfoPayloadSchema,\n);\n","const CANCEL_ORDER_TYPES = {\n  DeleteOrder: [\n    { name: 'senderAddress', type: 'address' },\n    { name: 'id', type: 'string' },\n  ],\n};\n\nexport default CANCEL_ORDER_TYPES;\n","const subOrderStatuses = [\n  'NEW', // created, wasn't added to IOB or wasn't accepted by the broker\n  'ACCEPTED', // added to IOB or accepted by the broker\n  'PARTIALLY_FILLED', // partially filled\n  'FILLED', // fully filled\n  'TX_PENDING', // sub order was filled and at least one of its trades is pending\n  'CANCELED', // canceled by user or by expiration\n  'REJECTED', // rejected by broker\n  'FAILED', // at least one trade failed\n  'SETTLED', // all trades successfully settled\n  'NOT_FOUND', // broker not processed sub order yet\n] as const;\n\nexport default subOrderStatuses;\n","import subOrderStatuses from './subOrderStatuses.js';\n\nconst orderStatuses = [\n  ...subOrderStatuses,\n  'ROUTING', // order got sub orders, but not all of them have status ACCEPTED\n] as const;\n\nexport default orderStatuses;\n","const ORDER_TYPES = {\n  Order: [\n    { name: 'senderAddress', type: 'address' },\n    { name: 'matcherAddress', type: 'address' },\n    { name: 'baseAsset', type: 'address' },\n    { name: 'quoteAsset', type: 'address' },\n    { name: 'matcherFeeAsset', type: 'address' },\n    { name: 'amount', type: 'uint64' },\n    { name: 'price', type: 'uint64' },\n    { name: 'matcherFee', type: 'uint64' },\n    { name: 'nonce', type: 'uint64' },\n    { name: 'expiration', type: 'uint64' },\n    { name: 'buySide', type: 'uint8' },\n  ],\n};\n\nexport default ORDER_TYPES;\n","export default ['ftm', 'bsc', 'eth', 'polygon', 'okc', 'arb', 'opbnb', 'inevm', 'linea', 'avax', 'base', 'lumia'] as const;\n","export default [\n  // CEXes\n  'ASCENDEX',\n  'OKX',\n  'BINANCE',\n  'KUCOIN',\n  'ORION', // Internal\n  'INTERNAL_ORDER_BOOK',\n\n  // DEXes\n  'SPOOKYSWAP',\n  'PANCAKESWAP',\n  'UNISWAP',\n  'QUICKSWAP',\n  'ORION_POOL',\n  'INTERNAL_POOL_V2',\n  'INTERNAL_POOL_V3',\n  'INTERNAL_POOL_V3_0_01',\n  'INTERNAL_POOL_V3_0_05',\n  'INTERNAL_POOL_V3_0_3',\n  'INTERNAL_POOL_V3_1_0',\n  'CHERRYSWAP',\n  'OKXSWAP',\n  'CURVE',\n  'CURVE_FACTORY',\n  'THENA_ALGEBRA_V1',\n] as const;\n","const mapping: Record<string, string> = {\n  // CEXes\n  ASCENDEX: 'AscendEx',\n  OKX: 'OKX',\n  BINANCE: 'Binance',\n  KUCOIN: 'KuCoin',\n  ORION: 'Orion', // Internal\n  INTERNAL_ORDER_BOOK: 'Internal',\n\n  // DEXes\n  SPOOKYSWAP: 'SpookySwap',\n  PANCAKESWAP: 'PancakeSwap',\n  UNISWAP: 'Uniswap',\n  QUICKSWAP: 'QuickSwap',\n  ORION_POOL: 'Internal Pool',\n  INTERNAL_POOL_V2: 'Internal Pool V2',\n  INTERNAL_POOL_V3: 'Internal Pool V3',\n  CHERRYSWAP: 'CherrySwap',\n  OKXSWAP: 'OKXSwap',\n  CURVE: 'Curve',\n  CURVE_FACTORY: 'Curve Factory',\n  THENA_ALGEBRA_V1: 'Thena',\n};\n\nexport default mapping;\n","import { SupportedChainId } from '../types.js';\n\nexport const developmentChains = [\n  SupportedChainId.BSC_TESTNET,\n  SupportedChainId.SEPOLIA,\n  SupportedChainId.EVENT_HORIZON_TESTNET,\n  SupportedChainId.LUMIA_TESTNET,\n];\nexport const productionChains = [\n  SupportedChainId.MAINNET,\n  SupportedChainId.BSC,\n  SupportedChainId.FANTOM_OPERA,\n  SupportedChainId.POLYGON,\n  SupportedChainId.OKC,\n  SupportedChainId.ARBITRUM,\n  SupportedChainId.OPBNB,\n  SupportedChainId.INEVM,\n  SupportedChainId.LINEA,\n  SupportedChainId.AVAX,\n  SupportedChainId.BASE,\n  SupportedChainId.LUMIA,\n];\n","export const INTERNAL_PROTOCOL_PRECISION = 8;\nexport const NATIVE_CURRENCY_PRECISION = 18;\n","export const DEPOSIT_ETH_GAS_LIMIT = 70000;\nexport const DEPOSIT_ERC20_GAS_LIMIT = 150000;\nexport const WITHDRAW_GAS_LIMIT = DEPOSIT_ERC20_GAS_LIMIT;\nexport const APPROVE_ERC20_GAS_LIMIT = 80000;\nexport const STAKE_ERC20_GAS_LIMIT = 150000;\nexport const VOTE_ERC20_GAS_LIMIT = 150000;\nexport const FILL_ORDERS_GAS_LIMIT = 220000;\nexport const SWAP_THROUGH_ORION_POOL_GAS_LIMIT = 600000;\nexport const ADD_LIQUIDITY_GAS_LIMIT = 600000;\nexport const FARMING_STAKE_GAS_LIMIT = 350000;\nexport const FARMING_CLAIM_GAS_LIMIT = 350000;\nexport const FARMING_EXIT_GAS_LIMIT = 500000;\nexport const FARMING_WITHDRAW_GAS_LIMIT = 350000;\nexport const GOVERNANCE_GET_REWARD_GAS_LIMIT = 250000;\nexport const GOVERNANCE_STAKE_GAS_LIMIT = 300000;\nexport const GOVERNANCE_UNSTAKE_GAS_LIMIT = 250000;\nexport const GOVERNANCE_VOTE_GAS_LIMIT = 200000;\nexport const MIGRATE_GAS_LIMIT = 800000;\nexport const LOCKATOMIC_GAS_LIMIT = 200000;\nexport const REDEEMATOMIC_GAS_LIMIT = 200000;\nexport const LIQUIDITY_MIGRATE_GAS_LIMIT = 600000;\n\nexport const DEFAULT_GAS_LIMIT = 700000;\n\nexport const TOKEN_EXCEPTIONS: Record<string, Record<string, number>> = {\n  CUMMIES: {\n    deposit: 300000,\n    withdraw: 300000,\n  },\n};\n","export const DAY = 86400\nexport const WEEK_DAYS = 7;\nexport const YEAR = 365 * DAY\n","export { default as cancelOrderTypes } from './cancelOrderTypes.js';\nexport { default as orderStatuses } from './orderStatuses.js';\nexport { default as orderTypes } from './orderTypes.js';\nexport { default as subOrderStatuses } from './subOrderStatuses.js';\nexport { default as networkCodes } from './networkCodes.js';\nexport { default as exchanges } from './exchanges.js';\nexport { default as exchangesMap } from './exchangesMap.js';\n\nexport * from './chains.js';\nexport * from './precisions.js';\nexport * from './gasLimits.js';\nexport * from './timings.js';\n\nexport const SERVICE_TOKEN = 'ORN';\n","import { JsonRpcProvider } from 'ethers';\nimport { Aggregator } from '../services/Aggregator';\nimport { BlockchainService } from '../services/BlockchainService';\nimport { PriceFeed } from '../services/PriceFeed';\nimport type {\n  KnownEnv,\n  SupportedChainId,\n  VerboseUnitConfig,\n} from '../types.js';\nimport Exchange from './Exchange/index.js';\nimport { chains, envs } from '../config';\nimport type { networkCodes } from '../constants/index.js';\nimport { IndexerService } from '../services/Indexer';\nimport Pmm from './Pmm';\n\ntype KnownConfig = {\n  env: KnownEnv\n  chainId: SupportedChainId\n};\n\nexport default class Unit {\n  public readonly networkCode: (typeof networkCodes)[number];\n\n  public readonly chainId: SupportedChainId;\n\n  public readonly provider: JsonRpcProvider;\n\n  public readonly blockchainService: BlockchainService;\n\n  public readonly indexer: IndexerService | undefined;\n\n  public readonly aggregator: Aggregator;\n\n  public readonly pmm: Pmm;\n\n  public readonly priceFeed: PriceFeed;\n\n  public readonly exchange: Exchange;\n\n  public readonly config: VerboseUnitConfig;\n\n  public readonly contracts: Record<string, string>;\n\n  public logger: ((message: string) => void) | undefined;\n\n  constructor(config: KnownConfig | VerboseUnitConfig, logger?: ((message: string) => void) | undefined) {\n    this.logger = logger;\n    if ('env' in config) {\n      const staticConfig = envs[config.env];\n      if (!staticConfig) {\n        throw new Error(\n          `Invalid environment: ${\n            config.env\n          }. Available environments: ${Object.keys(envs).join(', ')}`\n        );\n      }\n\n      const chainConfig = chains[config.chainId];\n      if (!chainConfig) {\n        throw new Error(\n          `Invalid chainId: ${\n            config.chainId\n          }. Available chainIds: ${Object.keys(chains).join(', ')}`\n        );\n      }\n\n      const networkConfig = staticConfig.networks[config.chainId];\n      if (!networkConfig) {\n        throw new Error(\n          `Invalid chainId: ${\n            config.chainId\n          }. Available chainIds: ${Object.keys(staticConfig.networks).join(\n            ', '\n          )}`\n        );\n      }\n      this.config = {\n        chainId: config.chainId,\n        nodeJsonRpc: networkConfig.rpc ?? chainConfig.rpc,\n        services: {\n          blockchainService: {\n            http: networkConfig.api + networkConfig.services.blockchain.http,\n          },\n          aggregator: {\n            http: networkConfig.api + networkConfig.services.aggregator.http,\n            ws: networkConfig.api + networkConfig.services.aggregator.ws,\n          },\n          priceFeed: {\n            api: networkConfig.api + networkConfig.services.priceFeed.all,\n          },\n          indexer: {\n            api: networkConfig.api + networkConfig.services.indexer?.http,\n          }\n        },\n      };\n    } else {\n      this.config = config;\n    }\n    const chainInfo = chains[config.chainId];\n    if (!chainInfo) throw new Error('Chain info is required');\n    this.chainId = config.chainId;\n    this.networkCode = chainInfo.code;\n    this.contracts = chainInfo.contracts;\n    const intNetwork = parseInt(this.chainId, 10);\n    if (Number.isNaN(intNetwork)) {\n      throw new Error('Invalid chainId (not a number)' + this.chainId);\n    }\n    this.provider = new JsonRpcProvider(this.config.nodeJsonRpc, intNetwork);\n    this.provider.pollingInterval = 1000;\n\n    this.blockchainService = new BlockchainService(\n      this.config.services.blockchainService.http,\n      this.config.basicAuth\n    );\n    this.indexer = this.config.services.indexer\n      ? new IndexerService(\n        this.config.services.indexer.api,\n        intNetwork\n      )\n      : undefined;\n    this.aggregator = new Aggregator(\n      this.config.services.aggregator.http,\n      this.config.services.aggregator.ws,\n      this.config.basicAuth,\n      logger,\n    );\n    this.priceFeed = new PriceFeed(\n      this.config.services.priceFeed.api,\n      this.config.basicAuth\n    );\n    this.exchange = new Exchange(this);\n    this.pmm = new Pmm(this);\n  }\n}\n","import type { BigNumber } from 'bignumber.js';\nimport { z } from 'zod';\nimport swapInfoSchema from './schemas/swapInfoSchema.js';\nimport exchangeInfoSchema from './schemas/exchangeInfoSchema.js';\nimport cancelOrderSchema from './schemas/cancelOrderSchema.js';\nimport orderBenefitsSchema from './schemas/orderBenefitsSchema.js';\nimport errorSchema from './schemas/errorSchema.js';\nimport placeAtomicSwapSchema from './schemas/placeAtomicSwapSchema.js';\nimport { AggregatorWS } from './ws/index.js';\nimport { atomicSwapHistorySchema } from './schemas/atomicSwapHistorySchema.js';\nimport type { BasicAuthCredentials, OrderSource, SignedCancelOrderRequest, SignedOrder } from '../../types.js';\nimport {\n  pairConfigSchema, aggregatedOrderbookSchema,\n  exchangeOrderbookSchema, poolReservesSchema,\n} from './schemas/index.js';\nimport type networkCodes from '../../constants/networkCodes.js';\nimport toUpperCase from '../../utils/toUpperCase.js';\nimport httpToWS from '../../utils/httpToWS.js';\nimport { ethers } from 'ethers';\nimport orderSchema from './schemas/orderSchema.js';\nimport { fetchWithValidation } from 'simple-typed-fetch';\nimport { pmmOrderSchema } from '../../Unit/Pmm/schemas/order';\n//  import hmacSHA256 from \"crypto-js/hmac-sha256\";\n//  import Hex from \"crypto-js/enc-hex\";\n// const crypto = require('crypto')\n\nclass Aggregator {\n  private readonly apiUrl: string;\n\n  readonly ws: AggregatorWS;\n\n  private readonly basicAuth?: BasicAuthCredentials | undefined;\n\n  get api() {\n    return this.apiUrl;\n  }\n\n  public logger: ((message: string) => void) | undefined;\n\n  constructor(\n    httpAPIUrl: string,\n    wsAPIUrl: string,\n    basicAuth?: BasicAuthCredentials,\n    logger?: ((message: string) => void) | undefined\n  ) {\n    this.logger = logger;\n\n    // const oaUrl = new URL(apiUrl);\n    // const oaWsProtocol = oaUrl.protocol === 'https:' ? 'wss' : 'ws';\n    // const aggregatorWsUrl = `${oaWsProtocol}://${oaUrl.host + (oaUrl.pathname === '/'\n    //   ? ''\n    //   : oaUrl.pathname)}/v1`;\n\n    this.apiUrl = httpAPIUrl;\n    this.ws = new AggregatorWS(httpToWS(wsAPIUrl), undefined, logger);\n    this.basicAuth = basicAuth;\n\n    this.getHistoryAtomicSwaps = this.getHistoryAtomicSwaps.bind(this);\n    this.getPairConfig = this.getPairConfig.bind(this);\n    this.getPairConfigs = this.getPairConfigs.bind(this);\n    this.getPairsList = this.getPairsList.bind(this);\n    this.getSwapInfo = this.getSwapInfo.bind(this);\n    this.getTradeProfits = this.getTradeProfits.bind(this);\n    this.getStableCoins = this.getStableCoins.bind(this);\n    this.placeAtomicSwap = this.placeAtomicSwap.bind(this);\n    this.placeOrder = this.placeOrder.bind(this);\n    this.cancelOrder = this.cancelOrder.bind(this);\n    this.checkWhitelisted = this.checkWhitelisted.bind(this);\n    this.getLockedBalance = this.getLockedBalance.bind(this);\n    this.getAggregatedOrderbook = this.getAggregatedOrderbook.bind(this);\n    this.getExchangeOrderbook = this.getExchangeOrderbook.bind(this);\n    this.getPoolReserves = this.getPoolReserves.bind(this);\n    this.getVersion = this.getVersion.bind(this);\n    this.getPrices = this.getPrices.bind(this);\n    this.getIsCexLiquidityAvailable = this.getIsCexLiquidityAvailable.bind(this);\n  }\n\n  get basicAuthHeaders() {\n    if (this.basicAuth) {\n      return {\n        Authorization: `Basic ${btoa(`${this.basicAuth.username}:${this.basicAuth.password}`)}`,\n      };\n    }\n    return {};\n  }\n\n  getOrder = (orderId: string, owner?: string) => {\n    if (!ethers.isHexString(orderId)) {\n      throw new Error(`Invalid order id: ${orderId}. Must be a hex string`);\n    }\n    const url = new URL(`${this.apiUrl}/api/v1/order`);\n    url.searchParams.append('orderId', orderId);\n    if (owner !== undefined) {\n      if (!ethers.isAddress(owner)) {\n        throw new Error(`Invalid owner address: ${owner}`);\n      }\n      url.searchParams.append('owner', owner);\n    }\n    return fetchWithValidation(\n      url.toString(),\n      orderSchema,\n      { headers: this.basicAuthHeaders },\n      errorSchema,\n    );\n  }\n\n  getPairsList = (market: 'spot') => {\n    const url = new URL(`${this.apiUrl}/api/v1/pairs/list`);\n    url.searchParams.append('market', toUpperCase(market));\n\n    return fetchWithValidation(\n      url.toString(),\n      z.array(z.string().toUpperCase()),\n      { headers: this.basicAuthHeaders },\n    );\n  };\n\n  getAggregatedOrderbook = (pair: string, depth = 20) => {\n    const url = new URL(`${this.apiUrl}/api/v1/orderbook`);\n    url.searchParams.append('pair', pair);\n    url.searchParams.append('depth', depth.toString());\n    return fetchWithValidation(\n      url.toString(),\n      aggregatedOrderbookSchema,\n      { headers: this.basicAuthHeaders },\n      errorSchema,\n    );\n  };\n\n  getAvailableExchanges = () => fetchWithValidation(\n    `${this.apiUrl}/api/v1/exchange/list`,\n    z.string().array(),\n  );\n\n  getExchangeOrderbook = (\n    pair: string,\n    exchange: string,\n    depth = 20,\n    filterByBrokerBalances: boolean | null = null,\n  ) => {\n    const url = new URL(`${this.apiUrl}/api/v1/orderbook/${exchange}/${pair}`);\n    url.searchParams.append('pair', pair);\n    url.searchParams.append('depth', depth.toString());\n    if (filterByBrokerBalances !== null) {\n      url.searchParams.append('filterByBrokerBalances', filterByBrokerBalances.toString());\n    }\n    return fetchWithValidation(\n      url.toString(),\n      exchangeOrderbookSchema,\n      { headers: this.basicAuthHeaders },\n      errorSchema,\n    );\n  };\n\n  getPairConfigs = (market: 'spot') => {\n    const url = new URL(`${this.apiUrl}/api/v1/pairs/exchangeInfo`);\n    url.searchParams.append('market', toUpperCase(market));\n\n    return fetchWithValidation(\n      url.toString(),\n      exchangeInfoSchema,\n      { headers: this.basicAuthHeaders },\n      errorSchema,\n    );\n  }\n\n  getPoolReserves = (\n    pair: string,\n    exchange: string,\n  ) => {\n    const url = new URL(`${this.apiUrl}/api/v1/pools/reserves/${exchange}/${pair}`);\n    return fetchWithValidation(\n      url.toString(),\n      poolReservesSchema,\n      { headers: this.basicAuthHeaders },\n      errorSchema,\n    );\n  };\n\n  getVersion = () => fetchWithValidation(\n    `${this.apiUrl}/api/v1/version`,\n    z.object({\n      serviceName: z.string(),\n      version: z.string(),\n      apiVersion: z.string(),\n    }),\n    { headers: this.basicAuthHeaders },\n    errorSchema,\n  );\n\n  getPairConfig = (assetPair: string) => fetchWithValidation(\n    `${this.apiUrl}/api/v1/pairs/exchangeInfo/${assetPair}`,\n    pairConfigSchema,\n    { headers: this.basicAuthHeaders },\n    errorSchema,\n  );\n\n  checkWhitelisted = (address: string) => fetchWithValidation(\n    `${this.apiUrl}/api/v1/whitelist/check?address=${address}`,\n    z.boolean(),\n    { headers: this.basicAuthHeaders },\n    errorSchema,\n  );\n\n  placeOrder = (\n    signedOrder: SignedOrder,\n    isCreateInternalOrder: boolean,\n    isReversedOrder?: boolean,\n    partnerId?: string,\n    source?: OrderSource,\n    rawExchangeRestrictions?: string | undefined,\n  ) => {\n    const headers = {\n      'Content-Type': 'application/json',\n      Accept: 'application/json',\n      ...(isReversedOrder !== undefined) && {\n        'X-Reverse-Order': isReversedOrder ? 'true' : 'false',\n      },\n      ...(partnerId !== undefined) && { 'X-Partner-Id': partnerId },\n      ...(source !== undefined) && { 'X-Source': source },\n      ...this.basicAuthHeaders,\n    };\n\n    const url = new URL(`${this.apiUrl}/api/v1/order/${isCreateInternalOrder ? 'internal' : ''}`);\n\n    return fetchWithValidation(\n      url.toString(),\n      z.object({\n        orderId: z.string(),\n        placementRequests: z.array(\n          z.object({\n            amount: z.number(),\n            brokerAddress: z.string(),\n            exchange: z.string(),\n          }),\n        ).optional(),\n      }),\n      {\n        headers,\n        method: 'POST',\n        body: JSON.stringify({ ...signedOrder, rawExchangeRestrictions }),\n      },\n      errorSchema,\n    );\n  };\n\n  cancelOrder = (signedCancelOrderRequest: SignedCancelOrderRequest) => fetchWithValidation(\n    `${this.apiUrl}/api/v1/order`,\n    cancelOrderSchema,\n    {\n      method: 'DELETE',\n      headers: {\n        'Content-Type': 'application/json',\n        Accept: 'application/json',\n        ...this.basicAuthHeaders,\n      },\n      body: JSON.stringify({\n        ...signedCancelOrderRequest,\n        sender: signedCancelOrderRequest.senderAddress,\n      }),\n    },\n    errorSchema,\n  );\n\n  getSwapInfo = (\n    assetIn: string,\n    assetOut: string,\n    amount: string,\n    instantSettlement?: boolean,\n    exchanges?: string[] | 'cex' | 'pools',\n    isTradeBuy?: boolean,\n  ) => {\n    const url = new URL(`${this.apiUrl}/api/v1/swap`);\n    url.searchParams.append('assetIn', assetIn);\n    url.searchParams.append('assetOut', assetOut);\n    if (isTradeBuy !== true) {\n      url.searchParams.append('amountIn', amount);\n    } else {\n      url.searchParams.append('amountOut', amount);\n    }\n\n    if (exchanges !== undefined) {\n      if (Array.isArray(exchanges)) {\n        exchanges.forEach((exchange) => {\n          url.searchParams.append('exchanges', exchange);\n        });\n      } else {\n        url.searchParams.append('exchanges', exchanges);\n      }\n    }\n    if (instantSettlement !== undefined && instantSettlement) {\n      url.searchParams.append('instantSettlement', 'true');\n    }\n\n    return fetchWithValidation(\n      url.toString(),\n      swapInfoSchema,\n      { headers: this.basicAuthHeaders },\n      errorSchema,\n    );\n  };\n\n  getPrices = (assetPair: string, includePools: boolean) => {\n    const url = new URL(`${this.apiUrl}/api/v1/prices/`);\n    url.searchParams.append('assetPair', assetPair);\n    url.searchParams.append('includePools', includePools.toString());\n    return fetchWithValidation(\n      url.toString(),\n      z.number(),\n      { headers: this.basicAuthHeaders },\n      errorSchema,\n    );\n  };\n\n  getLockedBalance = (address: string, currency: string) => {\n    const url = new URL(`${this.apiUrl}/api/v1/address/balance/reserved/${currency}`);\n    url.searchParams.append('address', address);\n    return fetchWithValidation(\n      url.toString(),\n      z.object({\n        [currency]: z.number(),\n      }).partial(),\n      { headers: this.basicAuthHeaders },\n      errorSchema,\n    );\n  };\n\n  getTradeProfits = (\n    symbol: string,\n    amount: BigNumber,\n    isBuy: boolean,\n  ) => {\n    const url = new URL(`${this.apiUrl}/api/v1/orderBenefits`);\n    url.searchParams.append('symbol', symbol);\n    url.searchParams.append('amount', amount.toString());\n    url.searchParams.append('side', isBuy ? 'buy' : 'sell');\n\n    return fetchWithValidation(\n      url.toString(),\n      orderBenefitsSchema,\n      { headers: this.basicAuthHeaders },\n      errorSchema,\n    );\n  };\n\n  getStableCoins = () => {\n    const url = new URL(`${this.apiUrl}/api/v1/tokens/stable/`);\n    return fetchWithValidation(\n      url.toString(),\n      z.array(z.string()),\n      { headers: this.basicAuthHeaders },\n      errorSchema,\n    );\n  };\n\n  /**\n   * Placing atomic swap. Placement must take place on the target chain.\n   * @param secretHash Secret hash\n   * @param sourceNetworkCode uppercase, e.g. BSC, ETH\n   * @returns Fetch promise\n   */\n  placeAtomicSwap = (\n    secretHash: string,\n    sourceNetworkCode: Uppercase<typeof networkCodes[number]>,\n  ) => fetchWithValidation(\n    `${this.apiUrl}/api/v1/atomic-swap`,\n    placeAtomicSwapSchema,\n    {\n      headers: {\n        'Content-Type': 'application/json',\n        Accept: 'application/json',\n        ...this.basicAuthHeaders,\n      },\n      method: 'POST',\n      body: JSON.stringify({\n        secretHash,\n        sourceNetworkCode,\n      }),\n    },\n    errorSchema,\n  );\n\n  /**\n   * Get placed atomic swaps. Each atomic swap received from this list has a target chain corresponding to this Aggregator\n   * @param sender Sender address\n   * @returns Fetch promise\n   */\n  getHistoryAtomicSwaps = (sender: string, limit = 1000) => {\n    const url = new URL(`${this.apiUrl}/api/v1/atomic-swap/history/all`);\n    url.searchParams.append('sender', sender);\n    url.searchParams.append('limit', limit.toString());\n    return fetchWithValidation(url.toString(), atomicSwapHistorySchema, { headers: this.basicAuthHeaders });\n  };\n\n  getIsCexLiquidityAvailable = (\n    assetIn: string,\n    assetOut: string,\n  ) => {\n    const url = new URL(`${this.apiUrl}/api/v1/pairs/cex/liquidity/${assetIn}/${assetOut}`);\n\n    return fetchWithValidation(\n      url.toString(),\n      z.boolean(),\n      { headers: this.basicAuthHeaders },\n      errorSchema,\n    );\n  };\n\n  // private encode_utf8(s: string) {\n  //   return unescape(encodeURIComponent(s));\n  // }\n\n  // @ts-expect-error: TODO: please remove this line!\n  private sign(message: string, key: string) {\n    // return crypto.createHmac('sha256', this.encode_utf8(key))\n    //   .update(this.encode_utf8(message))\n    //   .digest('hex');\n    return '';\n  }\n\n  private generateHeaders(body: any, method: string, path: string, timestamp: number, apiKey: string, secretKey: string) {\n    const sortedBody = Object.keys(body)\n      .sort()\n      .map((key) => (\n        `${key}=${body[key]}`\n      )).join('&');\n\n    const payload = timestamp + method.toUpperCase() + path + sortedBody;\n\n    const signature = this.sign(payload, secretKey);\n\n    const httpOptions = {\n      headers: {\n        'API-KEY': apiKey,\n        'ACCESS-TIMESTAMP': timestamp.toString(),\n        'ACCESS-SIGN': signature\n      }\n    };\n    return httpOptions;\n  }\n\n  public async RFQOrder(\n    tokenFrom: string,\n    tokenTo: string,\n    fromTokenAmount: string,\n    apiKey: string, //\n    secretKey: string,\n    wallet: string\n  ): Promise<z.infer<typeof pmmOrderSchema>> {\n    //  Making the order structure\n    const\n      path = '/rfq';\n    const url = `${this.apiUrl}/api/v1/integration/pmm` + path;\n    const headers = {\n      'Content-Type': 'application/json',\n    };\n    const data = {\n      baseToken: tokenFrom, // USDT\n      quoteToken: tokenTo, // ORN\n      amount: fromTokenAmount, // 100\n      taker: wallet,\n      feeBps: 0\n    };\n    const method = 'POST';\n    const timestamp = Date.now();\n    const signatureHeaders = this.generateHeaders(data, method, path, timestamp, apiKey, secretKey);\n    const compiledHeaders = { ...headers, ...signatureHeaders.headers, };\n    const body = JSON.stringify(data)\n    ;\n\n    const res = pmmOrderSchema.parse({});\n\n    try {\n      const result = await fetch(url, {\n        headers: compiledHeaders,\n        method,\n        body\n      });\n\n      const json = await result.json();\n      const parseResult = pmmOrderSchema.safeParse(json);\n\n      if (!parseResult.success) {\n        //  Try to parse error answer\n        const errorSchema = z.object({ error: z.object({ code: z.number(), reason: z.string() }) });\n\n        const errorParseResult = errorSchema.safeParse(json);\n\n        if (!errorParseResult.success) { throw Error(`Unrecognized answer from aggregator: ${json}`); }\n\n        throw Error(errorParseResult.data.error.reason);\n      }\n\n      res.order = parseResult.data.order;\n      res.signature = parseResult.data.signature;\n      res.error = '';\n      res.success = true;\n      //  return result;\n    } catch (err) {\n      res.error = `${err}`;\n    }\n    return res;\n  }\n}\nexport * as schemas from './schemas/index.js';\nexport * as ws from './ws/index.js';\nexport { Aggregator };\n","import { z } from 'zod';\n\nconst orderInfoSchema = z.object({\n  assetPair: z.string().toUpperCase(),\n  side: z.enum(['BUY', 'SELL']),\n  amount: z.number(),\n  safePrice: z.number(),\n}).nullable();\n\nconst exchangeContractStep = z.object({\n  pool: z.string(),\n  assetIn: z.string(),\n  assetOut: z.string(),\n  factory: z.string(),\n  assetAddressIn: z.string(),\n  assetAddressOut: z.string(),\n});\n\nconst swapInfoBase = z.object({\n  id: z.string(),\n  amountIn: z.number(),\n  amountOut: z.number(),\n  assetIn: z.string().toUpperCase(),\n  assetOut: z.string().toUpperCase(),\n  path: z.array(z.string()),\n  // isThroughPoolOptimal: z.boolean(), // deprecated\n  executionInfo: z.string(),\n  orderInfo: orderInfoSchema,\n  exchanges: z.array(z.string()),\n  price: z.number().nullable(), // spending asset price\n  minAmountOut: z.number(),\n  minAmountIn: z.number(),\n  marketPrice: z.number().nullable(), // spending asset market price\n  exchangeContractPath: z.array(exchangeContractStep),\n  alternatives: z.object({ // execution alternatives\n    exchanges: z.array(z.string()),\n    path: z.array(z.string()),\n    marketAmountOut: z.number().nullable(),\n    marketAmountIn: z.number().nullable(),\n    marketPrice: z.number(),\n    availableAmountIn: z.number().nullable(),\n    availableAmountOut: z.number().nullable(),\n    orderInfo: orderInfoSchema,\n    isThroughPoolOrCurve: z.boolean(),\n  }).array(),\n  assetNameMapping: z.record(z.string()).optional(), // address to ERC20 names\n  usd: z.object({ // USD info of this swap, nullable\n    aa: z.number().optional(), // available amount in, USD\n    aao: z.number().optional(), // available amount out, USD\n    mo: z.number().optional(), // market amount out, USD\n    mi: z.number().optional(), // market amount in, USD\n    d: z.string().optional(), // difference in available amount in/out (USD) and market amount out/in (USD) in percentage\n  }).optional(),\n  autoSlippage: z.number().optional(),\n});\n\nconst swapInfoByAmountIn = swapInfoBase.extend({\n  availableAmountOut: z.null(),\n  availableAmountIn: z.number(),\n  marketAmountOut: z.number().nullable(),\n  marketAmountIn: z.null(),\n}).transform((val) => ({\n  ...val,\n  isTradeBuy: false as const,\n}));\n\nconst swapInfoByAmountOut = swapInfoBase.extend({\n  availableAmountOut: z.number(),\n  availableAmountIn: z.null(),\n  marketAmountOut: z.null(),\n  marketAmountIn: z.number().nullable(),\n}).transform((val) => ({\n  ...val,\n  isTradeBuy: true as const,\n}));\n\nconst swapInfoSchema = swapInfoByAmountIn.or(swapInfoByAmountOut);\n\nexport default swapInfoSchema;\n","import { z } from 'zod';\nimport pairConfigSchema from './pairConfigSchema.js';\n\nconst exchangeInfoSchema = z.array(pairConfigSchema);\n\nexport default exchangeInfoSchema;\n","import { z } from 'zod';\n\nconst pairConfigSchema = z.object({\n  // baseAssetPrecision: z.number().int(), // Deprecated. DO NOT USE\n  // executableOnBrokersPriceDeviation: z.number().nullable(), // Deprecated. DO NOT USE\n  maxPrice: z.number(),\n  maxQty: z.number(),\n  minPrice: z.number(),\n  minQty: z.number(),\n  name: z.string().toUpperCase(),\n  pricePrecision: z.number().int(),\n  qtyPrecision: z.number().int(),\n  // quoteAssetPrecision: z.number().int(), // Deprecated. DO NOT USE\n});\n\nexport default pairConfigSchema;\n","import { z } from 'zod';\n\nconst cancelOrderSchema = z.object({\n  orderId: z.union([z.number(), z.string()]),\n  cancellationRequests: z.array(z.object({\n    amount: z.number(),\n    brokerAddress: z.string(),\n    exchange: z.string(),\n  })).optional(),\n  remainingAmount: z.number().optional(),\n});\n\nexport default cancelOrderSchema;\n","import { z } from 'zod';\n\nconst orderBenefitsSchema = z.record(z.object({\n  benefitBtc: z.string(),\n  benefitPct: z.string(),\n}));\n\nexport default orderBenefitsSchema;\n","import { z } from 'zod';\n\nconst errorSchema = z.object({\n  error: z.object({\n    code: z.number(),\n    reason: z.string(),\n  }),\n  timestamp: z.string(),\n});\n\nexport default errorSchema;\n","import { z } from 'zod';\n\nconst placeAtomicSwapSchema = z.object({\n  redeemOrder: z.object({\n    amount: z.number(),\n    asset: z.string().toUpperCase(),\n    expiration: z.number(),\n    receiver: z.string(),\n    secretHash: z.string(),\n    sender: z.string(),\n    signature: z.string(),\n    claimReceiver: z.string(),\n  }),\n  secretHash: z.string(),\n  sender: z.string(),\n});\n\nexport default placeAtomicSwapSchema;\n","import { z } from 'zod';\nimport WebSocket from 'isomorphic-ws';\nimport { validate as uuidValidate, v4 as uuidv4 } from 'uuid';\nimport MessageType from './MessageType.js';\nimport SubscriptionType from './SubscriptionType.js';\nimport {\n  pingPongMessageSchema, initMessageSchema,\n  errorSchema, brokerMessageSchema, orderBookSchema,\n  assetPairsConfigSchema, addressUpdateSchema, swapInfoSchema,\n} from './schemas/index.js';\nimport UnsubscriptionType from './UnsubscriptionType.js';\nimport type {\n  SwapInfoBase, AssetPairUpdate, OrderbookItem,\n  Balance, SwapInfo, Json, BasicAuthCredentials,\n} from '../../../types.js';\nimport unsubscriptionDoneSchema from './schemas/unsubscriptionDoneSchema.js';\nimport assetPairConfigSchema from './schemas/assetPairConfigSchema.js';\nimport type { fullOrderSchema, orderUpdateSchema } from './schemas/addressUpdateSchema.js';\nimport { objectKeys } from '../../../utils/objectKeys.js';\n\nconst UNSUBSCRIBE = 'u';\nconst SERVER_PING_INTERVAL = 30000;\nconst HEARBEAT_THRESHOLD = 5000;\n\nconst messageSchema = z.union([\n  initMessageSchema,\n  pingPongMessageSchema,\n  addressUpdateSchema,\n  assetPairsConfigSchema,\n  assetPairConfigSchema,\n  brokerMessageSchema,\n  orderBookSchema,\n  swapInfoSchema,\n  errorSchema,\n  unsubscriptionDoneSchema,\n]);\n\ntype SwapInfoSubscriptionPayload = {\n  // d: string, // swap request UUID, set by client side\n  i: string // asset in\n  o: string // asset out\n  a: number // amount IN/OUT\n  es?: string // exchange list of all cex or all pools (ORION_POOL, UNISWAP, PANCAKESWAP etc)\n  e?: boolean // is amount IN? Value `false` means a = amount OUT, `true` if omitted\n  is?: boolean // instant settlement\n}\n\ntype BrokerTradableAtomicSwapBalanceSubscription = {\n  callback: (balances: Partial<Record<string, number>>) => void\n}\n\ntype PairsConfigSubscription = {\n  callback: ({ kind, data }: {\n    kind: 'initial' | 'update'\n    data: Partial<Record<string, AssetPairUpdate>>\n  }) => void\n}\n\ntype PairConfigSubscription = {\n  payload: string\n  callback: ({ kind, data }: {\n    kind: 'initial' | 'update'\n    data: AssetPairUpdate\n  }) => void\n}\n\ntype AggregatedOrderbookSubscription = {\n  payload: string\n  dc?: number\n  callback: (\n    asks: OrderbookItem[],\n    bids: OrderbookItem[],\n    pair: string,\n  ) => void\n  errorCb?: (message: string) => void\n}\n\ntype SwapInfoSubscription = {\n  payload: SwapInfoSubscriptionPayload\n  callback: (swapInfo: SwapInfo) => void\n}\n\ntype AddressUpdateUpdate = {\n  kind: 'update'\n  balances: Partial<\n    Record<\n      string,\n      Balance\n    >\n  >\n  order?: z.infer<typeof orderUpdateSchema> | z.infer<typeof fullOrderSchema> | undefined\n}\n\ntype AddressUpdateInitial = {\n  kind: 'initial'\n  balances: Partial<\n    Record<\n      string,\n      Balance\n    >\n  >\n  orders?: Array<z.infer<typeof fullOrderSchema>> | undefined // The field is not defined if the user has no orders\n}\n\ntype AddressUpdateSubscription = {\n  payload: string\n  callback: (data: AddressUpdateUpdate | AddressUpdateInitial) => void\n  errorCb?: (message: string) => void\n}\n\ntype Subscription = {\n  [SubscriptionType.ADDRESS_UPDATES_SUBSCRIBE]: AddressUpdateSubscription\n  [SubscriptionType.AGGREGATED_ORDER_BOOK_UPDATES_SUBSCRIBE]: AggregatedOrderbookSubscription\n  [SubscriptionType.ASSET_PAIRS_CONFIG_UPDATES_SUBSCRIBE]: PairsConfigSubscription\n  [SubscriptionType.ASSET_PAIR_CONFIG_UPDATES_SUBSCRIBE]: PairConfigSubscription\n  [SubscriptionType.BROKER_TRADABLE_ATOMIC_SWAP_ASSETS_BALANCE_UPDATES_SUBSCRIBE]: BrokerTradableAtomicSwapBalanceSubscription\n  [SubscriptionType.SWAP_SUBSCRIBE]: SwapInfoSubscription\n}\n\nconst exclusiveSubscriptions = [\n  SubscriptionType.BROKER_TRADABLE_ATOMIC_SWAP_ASSETS_BALANCE_UPDATES_SUBSCRIBE,\n  SubscriptionType.ASSET_PAIRS_CONFIG_UPDATES_SUBSCRIBE,\n] as const;\n\ntype BufferLike =\n  | string\n  | Buffer\n  | DataView\n  | number\n  | ArrayBufferView\n  | Uint8Array\n  | ArrayBuffer\n  | SharedArrayBuffer\n  | readonly unknown[]\n  | readonly number[]\n  | { valueOf: () => ArrayBuffer }\n  | { valueOf: () => SharedArrayBuffer }\n  | { valueOf: () => Uint8Array }\n  | { valueOf: () => readonly number[] }\n  | { valueOf: () => string }\n  | { [Symbol.toPrimitive]: (hint: string) => string };\n\nconst isSubType = (subType: string): subType is keyof Subscription => Object.values(SubscriptionType).some((t) => t === subType);\n\nconst unknownMessageTypeRegex = /An unknown message type: '(.*)', json: (.*)/;\nconst nonExistentMessageRegex = /Could not cancel nonexistent subscription: (.*)/;\n\n// type Message = {\n//   message: Json\n//   resolve: () => void\n// };\n\ntype Subscriptions = Partial<{\n  [K in keyof Subscription]: Partial<Record<string, Subscription[K]>>\n}>;\n\nclass AggregatorWS {\n  private ws?: WebSocket | undefined;\n\n  // is used to make sure we do not need to renew ws subscription\n  // we can not be sure that onclose event will recieve our code when we do `ws.close(4000)`\n  // since sometimes it can be replaced with system one.\n  // https://stackoverflow.com/questions/19304157/getting-the-reason-why-websockets-closed-with-close-code-1006\n  private isClosedIntentionally = false;\n\n  readonly subscriptions: Subscriptions = {};\n\n  public onInit: (() => void) | undefined\n\n  public onWSOpen: ((event: WebSocket.Event) => void) | undefined\n\n  public onWSClose: ((event: WebSocket.CloseEvent) => void) | undefined\n\n  public onError: ((err: string) => void) | undefined\n\n  public logger: ((message: string) => void) | undefined\n\n  private subIdReplacements: Partial<Record<string, string>> = {}\n\n  private readonly wsUrl: string;\n\n  private isAlive = false;\n\n  get api() {\n    const wsUrl = new URL(this.wsUrl);\n\n    if (this.basicAuth) {\n      wsUrl.username = this.basicAuth.username;\n      wsUrl.password = this.basicAuth.password;\n    }\n\n    return wsUrl;\n  }\n\n  readonly instanceId = uuidv4();\n\n  readonly basicAuth?: BasicAuthCredentials | undefined;\n\n  constructor(wsUrl: string, basicAuth?: BasicAuthCredentials, logger?: ((message: string) => void) | undefined) {\n    this.wsUrl = wsUrl;\n    this.basicAuth = basicAuth;\n    this.logger = logger;\n  }\n\n  private messageQueue: BufferLike[] = [];\n  private sendWsMessage(message: BufferLike) {\n    if (this.ws?.readyState === WebSocket.OPEN) {\n      this.ws.send(message);\n    } else {\n      this.messageQueue.push(message);\n    }\n  }\n\n  private readonly handleWsOpen = () => {\n    for (const message of this.messageQueue) {\n      this.ws?.send(message);\n    }\n    this.messageQueue = [];\n    this.setupHeartbeat();\n  }\n\n  private sendRaw(data: BufferLike) {\n    this.sendWsMessage(data);\n  }\n\n  private send(jsonObject: Json) {\n    const jsonData = JSON.stringify(jsonObject);\n    this.sendWsMessage(jsonData);\n    this.logger?.(`Sent: ${jsonData}`);\n  }\n\n  private hearbeatIntervalId: ReturnType<typeof setInterval> | undefined;\n  private setupHeartbeat() {\n    const heartbeat = () => {\n      if (this.isAlive) {\n        this.isAlive = false;\n      } else {\n        this.logger?.('Heartbeat timeout');\n        this.isClosedIntentionally = false;\n        this.ws?.close(4000);\n      }\n    };\n\n    this.hearbeatIntervalId = setInterval(heartbeat, SERVER_PING_INTERVAL + HEARBEAT_THRESHOLD);\n  }\n\n  private clearHeartbeat() {\n    this.isAlive = false;\n    clearInterval(this.hearbeatIntervalId);\n  }\n\n  subscribe<T extends typeof SubscriptionType[keyof typeof SubscriptionType]>(\n    type: T,\n    subscription: Subscription[T],\n    prevSubscriptionId?: string\n  ) {\n    const id = type === SubscriptionType.AGGREGATED_ORDER_BOOK_UPDATES_SUBSCRIBE\n      ? ((subscription as any).payload as string) // TODO: Refactor!!!\n      : uuidv4();\n\n    const makeSubscription = () => {\n      const isExclusive = exclusiveSubscriptions.some((t) => t === type);\n      const subRequest: Json = {};\n      subRequest['T'] = type;\n      subRequest['id'] = id;\n\n      if ('dc' in subscription) {\n        if (typeof subscription.dc === 'number') {\n          subRequest['dc'] = subscription.dc;\n        }\n      }\n\n      if ('payload' in subscription) {\n        if (typeof subscription.payload === 'string') {\n          subRequest['S'] = subscription.payload;\n        } else { // SwapInfoSubscriptionPayload\n          subRequest['S'] = {\n            d: id,\n            ...subscription.payload,\n          };\n        }\n      }\n\n      const subKey = isExclusive ? 'default' : id;\n\n      if (prevSubscriptionId === undefined) { // Just subscribe\n        const subs = this.subscriptions[type];\n        if (isExclusive && subs && Object.keys(subs).length > 0) {\n          throw new Error(`Subscription '${type}' already exists. Please unsubscribe first.`);\n        }\n        this.logger?.(`Subscribing to ${type} with id ${id}. Subscription request: ${JSON.stringify(subRequest)}`);\n        this.subscriptions[type] = {\n          ...this.subscriptions[type],\n          [subKey]: subscription,\n        };\n      } else { // Replace subscription. Set new sub id, but save callback\n        this.logger?.(`Resubscribing to ${type} with id ${id}. Subscription request: ${JSON.stringify(subRequest)}`);\n        const prevSub = this.subscriptions[type]?.[prevSubscriptionId];\n        if (prevSub) {\n          this.subIdReplacements[prevSubscriptionId] = id; // Save mapping for future use (unsubscribe)\n          if (this.subscriptions[type]?.[prevSubscriptionId]) {\n            delete this.subscriptions[type]?.[prevSubscriptionId];\n          }\n          this.subscriptions[type] = {\n            ...this.subscriptions[type],\n            [subKey]: {\n              ...subscription,\n              callback: prevSub.callback,\n            }\n          };\n        }\n      }\n\n      this.send(subRequest);\n    }\n\n    // if (!this.ws) {\n    //   this.initAsync()\n    //     .then(() => {\n    //       console.log(`Aggregator WS ${this.instanceId} is initialized`);\n    //       makeSubscription();\n    //     })\n    //     .catch((err) => {\n    //       assertError(err);\n    //       this.onError?.(err.message);\n    //     });\n    // } else makeSubscription();\n\n    if (!this.ws) {\n      this.init();\n      console.log(`Aggregator WS ${this.instanceId} is initialized`);\n    }\n    makeSubscription();\n\n    return id;\n  }\n\n  /**\n   * Returns newest subscription id for given id. Subscription id can be changed during resubscription.\n   * This function ensure that old subscription id will be replaced with newest one.\n   * @param id Id of subscription\n   * @returns Newest subscription id\n   */\n  getNewestSubscriptionId(id: string): string {\n    const newId = this.subIdReplacements[id];\n    if (newId !== undefined && newId !== id) {\n      return this.getNewestSubscriptionId(newId);\n    }\n    return id;\n  }\n\n  unsubscribe(subscription: keyof typeof UnsubscriptionType | string, details?: string) {\n    const newestSubId = this.getNewestSubscriptionId(subscription);\n    this.send({\n      T: UNSUBSCRIBE,\n      S: newestSubId,\n      ...(details !== undefined) && { d: details },\n    });\n\n    const isOrderBooksSubscription = (subId: string) => {\n      const isSpotPairName = subId.includes('-') && subId.split('-').length === 2;\n      return isSpotPairName;\n    }\n\n    if (newestSubId.includes('0x')) { // is wallet address (ADDRESS_UPDATE)\n      const auSubscriptions = this.subscriptions[SubscriptionType.ADDRESS_UPDATES_SUBSCRIBE];\n      if (auSubscriptions) {\n        const targetAuSub = Object.entries(auSubscriptions).find(([, value]) => value?.payload === newestSubId);\n        if (targetAuSub) {\n          const [key] = targetAuSub;\n          delete this.subscriptions[SubscriptionType.ADDRESS_UPDATES_SUBSCRIBE]?.[key];\n        }\n      }\n    } else if (uuidValidate(newestSubId)) {\n      // is swap info subscription (contains hyphen)\n      delete this.subscriptions[SubscriptionType.SWAP_SUBSCRIBE]?.[newestSubId];\n      delete this.subscriptions[SubscriptionType.ASSET_PAIR_CONFIG_UPDATES_SUBSCRIBE]?.[newestSubId];\n      // !!! swap info subscription is uuid that contains hyphen\n    } else if (isOrderBooksSubscription(newestSubId)) { // is pair name(AGGREGATED_ORDER_BOOK_UPDATE)\n      const aobusSubscriptions = this.subscriptions[SubscriptionType.AGGREGATED_ORDER_BOOK_UPDATES_SUBSCRIBE];\n      if (aobusSubscriptions) {\n        const targetAobusSub = Object.entries(aobusSubscriptions).find(([, value]) => value?.payload === newestSubId);\n        if (targetAobusSub) {\n          const [key] = targetAobusSub;\n          delete this.subscriptions[SubscriptionType.AGGREGATED_ORDER_BOOK_UPDATES_SUBSCRIBE]?.[key];\n        }\n      }\n    } else if (newestSubId === UnsubscriptionType.ASSET_PAIRS_CONFIG_UPDATES_UNSUBSCRIBE) {\n      delete this.subscriptions[SubscriptionType.ASSET_PAIRS_CONFIG_UPDATES_SUBSCRIBE]?.['default'];\n    } else if (newestSubId === UnsubscriptionType.BROKER_TRADABLE_ATOMIC_SWAP_ASSETS_BALANCE_UPDATES_UNSUBSCRIBE) {\n      delete this.subscriptions[SubscriptionType.BROKER_TRADABLE_ATOMIC_SWAP_ASSETS_BALANCE_UPDATES_SUBSCRIBE]?.['default'];\n    }\n  }\n\n  destroy() {\n    this.isClosedIntentionally = true;\n    this.ws?.close();\n    delete this.ws;\n  }\n\n  // private initPromise: Promise<void> | null = null;\n\n  // private initAsync() {\n  //   if (!this.initPromise) {\n  //     this.initPromise = new Promise<void>((resolve, reject) => {\n  //       try {\n  //         this.init();\n  //         resolve();\n  //       } catch (err) {\n  //         reject(err);\n  //       }\n  //     });\n  //   }\n\n  //   return this.initPromise;\n  // }\n\n  private init(isReconnect = false) {\n    this.isClosedIntentionally = false;\n    this.ws = new WebSocket(this.api);\n    this.ws.onerror = (err) => {\n      this.onError?.(`AggregatorWS error: ${err.message}`);\n      this.logger?.(`AggregatorWS: ${err.message}`);\n    };\n    this.ws.onclose = (event) => {\n      this.onWSClose?.(event);\n      this.logger?.(`AggregatorWS: connection closed ${this.isClosedIntentionally ? 'intentionally' : ''}`);\n      this.clearHeartbeat();\n      if (!this.isClosedIntentionally) this.init(true);\n    };\n    this.ws.onopen = (e) => {\n      this.onWSOpen?.(e);\n      this.handleWsOpen();\n      // Re-subscribe to all subscriptions\n      if (isReconnect) {\n        Object.keys(this.subscriptions)\n          .filter(isSubType)\n          .forEach((subType) => {\n            const subscriptions = this.subscriptions[subType];\n            if (subscriptions) {\n              Object.keys(subscriptions).forEach((subId) => {\n                const subPayload = subscriptions[subId];\n                this.logger?.(`AggregatorWS: reconnecting to subscription ${subType} ${subId}. Params: ${JSON.stringify(subPayload)}`);\n                if (subPayload) this.subscribe(subType, subPayload, subId);\n              });\n            }\n          });\n      }\n      this.logger?.(`AggregatorWS: connection opened${isReconnect ? ' (reconnect)' : ''}`);\n    };\n    this.ws.onmessage = (e) => {\n      this.isAlive = true;\n      const { data } = e;\n      if (typeof data !== 'string') throw new Error('AggregatorWS: received non-string message');\n      this.logger?.(`AggregatorWS: received message: ${data}`);\n      const rawJson: unknown = JSON.parse(data);\n\n      const json = messageSchema.parse(rawJson);\n\n      switch (json.T) {\n        case MessageType.ERROR: {\n          const err = errorSchema.parse(json);\n          // Get subscription error callback\n          // 2. Find subscription by id\n          // 3. Call onError callback\n\n          const { id, m } = err;\n          if (id !== undefined) {\n            const nonExistentMessageMatch = m.match(nonExistentMessageRegex);\n            const unknownMessageMatch = m.match(unknownMessageTypeRegex);\n            if (nonExistentMessageMatch !== null) {\n              const [, subscription] = nonExistentMessageMatch;\n              if (subscription === undefined) throw new TypeError('Subscription is undefined. This should not happen.')\n              console.warn(`You tried to unsubscribe from non-existent subscription '${subscription}'. This is probably a bug in the code. Please be sure that you are unsubscribing from the subscription that you are subscribed to.`)\n            } else if (unknownMessageMatch !== null) {\n              const [, subscription, jsonPayload] = unknownMessageMatch;\n              if (subscription === undefined) throw new TypeError('Subscription is undefined. This should not happen.')\n              if (jsonPayload === undefined) throw new TypeError('JSON payload is undefined. This should not happen.')\n              console.warn(`You tried to subscribe to '${subscription}' with unknown payload '${jsonPayload}'. This is probably a bug in the code. Please be sure that you are subscribing to the existing subscription with the correct payload.`)\n            } else {\n              const subType = objectKeys(this.subscriptions).find((st) => this.subscriptions[st]?.[id]);\n              if (subType === undefined) throw new Error(`AggregatorWS: cannot find subscription type by id ${id}. Current subscriptions: ${JSON.stringify(this.subscriptions)}`);\n              const sub = this.subscriptions[subType]?.[id];\n              if (sub === undefined) throw new Error(`AggregatorWS: cannot find subscription by id ${id}. Current subscriptions: ${JSON.stringify(this.subscriptions)}`);\n              if ('errorCb' in sub) {\n                sub.errorCb(err.m);\n              }\n            }\n          }\n          this.onError?.(err.m);\n        }\n          break;\n        case MessageType.PING_PONG:\n          this.sendRaw(data);\n          break;\n        case MessageType.UNSUBSCRIPTION_DONE:\n          // const { id } = json;\n          break;\n        case MessageType.SWAP_INFO: {\n          const baseSwapInfo: SwapInfoBase = {\n            swapRequestId: json.S,\n            assetIn: json.ai,\n            assetOut: json.ao,\n            amountIn: json.a,\n            amountOut: json.o,\n            price: json.p,\n            marketPrice: json.mp,\n            minAmountOut: json.mao,\n            minAmountIn: json.ma,\n            path: json.ps,\n            exchanges: json.e,\n            exchangeContractPath: json.eps.map((path) => ({\n              pool: path.p,\n              assetIn: path.ai,\n              assetOut: path.ao,\n              factory: path.f,\n              assetAddressIn: path.aai,\n              assetAddressOut: path.aao,\n              fee: path.fee,\n            })),\n            poolOptimal: json.po,\n            ...(json.oi) && {\n              orderInfo: {\n                pair: json.oi.p,\n                side: json.oi.s,\n                amount: json.oi.a,\n                safePrice: json.oi.sp,\n              },\n            },\n            alternatives: json.as.map((item) => ({\n              exchanges: item.e,\n              path: item.ps,\n              marketAmountOut: item.mo,\n              marketAmountIn: item.mi,\n              marketPrice: item.mp,\n              availableAmountIn: item.aa,\n              availableAmountOut: item.aao,\n            })),\n            assetsNameMapping: json.anm,\n            usdInfo: json.usd && {\n              availableAmountIn: json.usd.aa,\n              availableAmountOut: json.usd.aao,\n              marketAmountOut: json.usd.mo,\n              marketAmountIn: json.usd.mi,\n              difference: json.usd.d,\n            },\n            autoSlippage: json.sl,\n          };\n\n          switch (json.tb) { // isTradeBuy\n            case false:\n              this.subscriptions[SubscriptionType.SWAP_SUBSCRIBE]?.[json.S]?.callback({\n                isTradeBuy: false,\n                marketAmountOut: json.mo,\n                availableAmountIn: json.aa,\n                ...baseSwapInfo,\n              });\n\n              break;\n            case true:\n              this.subscriptions[SubscriptionType.SWAP_SUBSCRIBE]?.[json.S]?.callback({\n                isTradeBuy: true,\n                ...baseSwapInfo,\n                marketAmountIn: json.mi,\n                availableAmountOut: json.aao,\n              });\n              break;\n            default:\n              break;\n          }\n        }\n          break;\n        case MessageType.INITIALIZATION:\n          this.onInit?.();\n          break;\n        case MessageType.AGGREGATED_ORDER_BOOK_UPDATE: {\n          const { ob, S } = json;\n          const mapOrderbookItems = (rawItems: typeof ob.a) => rawItems.reduce<OrderbookItem[]>((acc, item) => {\n            const [\n              price,\n              amount,\n              exchanges,\n              vob,\n            ] = item;\n\n            acc.push({\n              price,\n              amount,\n              exchanges,\n              vob: vob.map(([side, pairName]) => ({\n                side,\n                pairName,\n              })),\n            });\n\n            return acc;\n          }, []);\n          this.subscriptions[\n            SubscriptionType.AGGREGATED_ORDER_BOOK_UPDATES_SUBSCRIBE\n          ]?.[json.S]?.callback(\n            mapOrderbookItems(ob.a),\n            mapOrderbookItems(ob.b),\n            S,\n          );\n        }\n          break;\n        case MessageType.ASSET_PAIR_CONFIG_UPDATE: {\n          const pair = json.u;\n          const [, minQty, pricePrecision] = pair;\n\n          this.subscriptions[\n            SubscriptionType.ASSET_PAIR_CONFIG_UPDATES_SUBSCRIBE\n          ]?.[json.id]?.callback({\n            data: {\n              minQty,\n              pricePrecision,\n            },\n            kind: json.k === 'i' ? 'initial' : 'update',\n          });\n\n          break;\n        }\n        case MessageType.ASSET_PAIRS_CONFIG_UPDATE: {\n          const pairs = json;\n          const priceUpdates: Partial<Record<string, AssetPairUpdate>> = {};\n\n          pairs.u.forEach(([pairName, minQty, pricePrecision]) => {\n            priceUpdates[pairName] = {\n              minQty,\n              pricePrecision,\n            };\n          });\n\n          this.subscriptions[\n            SubscriptionType.ASSET_PAIRS_CONFIG_UPDATES_SUBSCRIBE\n          ]?.['default']?.callback({\n            kind: json.k === 'i' ? 'initial' : 'update',\n            data: priceUpdates,\n          });\n        }\n          break;\n        case MessageType.ADDRESS_UPDATE: {\n          const balances = (json.b)\n            ? Object.entries(json.b)\n              .reduce<Partial<Record<string, Balance>>>((prev, [asset, assetBalances]) => {\n                if (!assetBalances) return prev;\n                const [tradable, reserved, contract, wallet, allowance] = assetBalances;\n\n                prev[asset] = {\n                  tradable, reserved, contract, wallet, allowance,\n                };\n\n                return prev;\n              }, {})\n            : {};\n          switch (json.k) { // message kind\n            case 'i': { // initial\n              const fullOrders = json.o\n                ? json.o.reduce<Array<z.infer<typeof fullOrderSchema>>>((prev, o) => {\n                  prev.push(o);\n\n                  return prev;\n                }, [])\n                : undefined;\n\n              this.subscriptions[\n                SubscriptionType.ADDRESS_UPDATES_SUBSCRIBE\n              ]?.[json.id]?.callback({\n                kind: 'initial',\n                orders: fullOrders,\n                balances,\n              });\n            }\n              break;\n            case 'u': { // update\n              let orderUpdate: z.infer<typeof orderUpdateSchema> | z.infer<typeof fullOrderSchema> | undefined;\n              if (json.o) {\n                const firstOrder = json.o[0];\n                orderUpdate = firstOrder;\n              }\n\n              this.subscriptions[\n                SubscriptionType.ADDRESS_UPDATES_SUBSCRIBE\n              ]?.[json.id]?.callback({\n                kind: 'update',\n                order: orderUpdate,\n                balances,\n              });\n            }\n              break;\n            default:\n              break;\n          }\n        }\n          break;\n        case MessageType.BROKER_TRADABLE_ATOMIC_SWAP_ASSETS_BALANCE_UPDATE: {\n          const brokerBalances: Partial<Record<string, number>> = {};\n\n          json.bb.forEach(([asset, balance]) => {\n            brokerBalances[asset] = balance;\n          });\n\n          this.subscriptions[\n            SubscriptionType.BROKER_TRADABLE_ATOMIC_SWAP_ASSETS_BALANCE_UPDATES_SUBSCRIBE\n          ]?.['default']?.callback(brokerBalances);\n        }\n          break;\n        default:\n          break;\n      }\n    };\n  }\n}\n\nexport * as schemas from './schemas/index.js';\nexport {\n  AggregatorWS,\n  SubscriptionType,\n  UnsubscriptionType,\n  MessageType,\n};\n","const MessageType = {\n  ERROR: 'e',\n  PING_PONG: 'pp',\n  SWAP_INFO: 'si',\n  INITIALIZATION: 'i',\n  AGGREGATED_ORDER_BOOK_UPDATE: 'aobu',\n  ASSET_PAIRS_CONFIG_UPDATE: 'apcu',\n  ASSET_PAIR_CONFIG_UPDATE: 'apiu',\n  ADDRESS_UPDATE: 'au',\n  BROKER_TRADABLE_ATOMIC_SWAP_ASSETS_BALANCE_UPDATE: 'btasabu',\n  UNSUBSCRIPTION_DONE: 'ud',\n} as const;\n\nexport default MessageType;\n","const SubscriptionType = {\n  ASSET_PAIRS_CONFIG_UPDATES_SUBSCRIBE: 'apcus',\n  ASSET_PAIR_CONFIG_UPDATES_SUBSCRIBE: 'apius',\n  AGGREGATED_ORDER_BOOK_UPDATES_SUBSCRIBE: 'aobus',\n  ADDRESS_UPDATES_SUBSCRIBE: 'aus',\n  BROKER_TRADABLE_ATOMIC_SWAP_ASSETS_BALANCE_UPDATES_SUBSCRIBE: 'btasabus',\n  SWAP_SUBSCRIBE: 'ss',\n} as const;\n\nexport default SubscriptionType;\n","export { default as addressUpdateSchema } from './addressUpdateSchema.js';\nexport { default as assetPairsConfigSchema } from './assetPairsConfigSchema.js';\nexport { default as baseMessageSchema } from './baseMessageSchema.js';\nexport { default as brokerMessageSchema } from './brokerMessageSchema.js';\nexport { default as errorSchema } from './errorSchema.js';\nexport { default as initMessageSchema } from './initMessageSchema.js';\nexport { default as pingPongMessageSchema } from './pingPongMessageSchema.js';\nexport { default as swapInfoSchema } from './swapInfoSchema.js';\nexport { default as balancesSchema } from './balancesSchema.js';\n\nexport * from './orderBookSchema.js';\n","import { z } from 'zod';\nimport orderStatuses from '../../../../constants/orderStatuses.js';\nimport executionTypes from '../../../../constants/executionTypes.js';\nimport subOrderStatuses from '../../../../constants/subOrderStatuses.js';\nimport MessageType from '../MessageType.js';\nimport balancesSchema from './balancesSchema.js';\nimport baseMessageSchema from './baseMessageSchema.js';\n\nconst baseAddressUpdate = baseMessageSchema.extend({\n  id: z.string(),\n  T: z.literal(MessageType.ADDRESS_UPDATE),\n  S: z.string(), // subscription\n  uc: z.array(z.enum(['b', 'o'])), // update content\n});\n\nconst subOrderSchema = z.object({\n  i: z.number(), // id\n  I: z.string(), // parent order id\n  O: z.string(), // sender (owner)\n  P: z.string().toUpperCase(), // asset pair\n  s: z.enum(['BUY', 'SELL']), // side\n  a: z.number(), // amount\n  A: z.number(), // settled amount\n  p: z.number(), // avg weighed settlement price\n  e: z.string(), // exchange\n  es: z.string().array().optional(), // exchanges\n  b: z.string(), // broker address\n  S: z.enum(subOrderStatuses), // status\n  o: z.boolean(), // internal only\n});\n\nexport const orderUpdateSchema = z.object({\n  I: z.string(), // id\n  A: z.number(), // settled amount\n  S: z.enum(orderStatuses), // status\n  l: z.boolean().optional(), // is liquidation order\n  t: z.number(), // update time\n  C: z.string().optional(), // trigger condition\n  E: z.enum(executionTypes).optional(),\n  c: subOrderSchema.array(),\n})\n  .transform((val) => ({\n    ...val,\n    k: 'update' as const,\n  })).transform((o) => ({\n    kind: o.k,\n    id: o.I,\n    settledAmount: o.A,\n    status: o.S,\n    liquidated: o.l,\n    executionType: o.E,\n    triggerCondition: o.C,\n    subOrders: o.c.map((so) => ({\n      pair: so.P,\n      exchange: so.e,\n      exchanges: so.es,\n      id: so.i,\n      amount: so.a,\n      settledAmount: so.A,\n      price: so.p,\n      status: so.S,\n      side: so.s,\n      subOrdQty: so.A,\n    })),\n  }));\n\nexport const fullOrderSchema = z.object({\n  I: z.string(), // id\n  O: z.string(), // sender (owner)\n  P: z.string().toUpperCase(), // asset pair\n  s: z.enum(['BUY', 'SELL']), // side\n  a: z.number(), // amount\n  A: z.number(), // settled amount\n  p: z.number(), // price\n  F: z.string().toUpperCase(), // fee asset\n  f: z.number(), // fee\n  l: z.boolean().optional(), // is liquidation order\n  L: z.number().optional(), // stop limit price,\n  o: z.boolean(), // internal only\n  S: z.enum(orderStatuses), // status\n  T: z.number(), // creation time / unix timestamp\n  t: z.number(), // update time\n  c: subOrderSchema.array(),\n  E: z.enum(executionTypes).optional(),\n  C: z.string().optional(), // trigger condition\n  ro: z.boolean().optional(), // is reversed order\n}).transform((val) => ({\n  ...val,\n  k: 'full' as const,\n})).transform((o) => ({\n  kind: o.k,\n  id: o.I,\n  settledAmount: o.A,\n  feeAsset: o.F,\n  fee: o.f,\n  liquidated: o.l,\n  stopPrice: o.L,\n  status: o.S,\n  date: o.T,\n  clientOrdId: o.O,\n  type: o.s,\n  pair: o.P,\n  amount: o.a,\n  price: o.p,\n  executionType: o.E,\n  triggerCondition: o.C,\n  isReversedOrder: o.ro,\n  subOrders: o.c.map((so) => ({\n    pair: so.P,\n    exchange: so.e,\n    exchanges: so.es,\n    id: so.i,\n    amount: so.a,\n    settledAmount: so.A,\n    price: so.p,\n    status: so.S,\n    side: so.s,\n    subOrdQty: so.A,\n  })),\n}));\n\nconst updateMessageSchema = baseAddressUpdate.extend({\n  k: z.literal('u'), // kind of message: \"u\" - updates\n  uc: z.array(z.enum(['b', 'o'])), // update content: \"o\" - orders updates, \"b\" - balance updates\n  b: balancesSchema.optional(),\n  o: z.tuple([fullOrderSchema.or(orderUpdateSchema)]).optional(),\n});\n\nconst initialMessageSchema = baseAddressUpdate.extend({\n  k: z.literal('i'), // kind of message: \"i\" - initial\n  b: balancesSchema,\n  o: z.array(fullOrderSchema)\n    .optional(), // When no orders — no field\n});\n\nconst addressUpdateSchema = z.union([\n  initialMessageSchema,\n  updateMessageSchema,\n]);\n\nexport default addressUpdateSchema;\n","const executionTypes = ['LIMIT', 'STOP_LIMIT'] as const;\n\nexport default executionTypes;\n","import { z } from 'zod';\nimport { makePartial } from '../../../../utils/index.js';\n\nconst balancesSchema = z.record( // changed balances in format\n  z.string().toUpperCase(), // asset\n  z.tuple([\n    z.string(), // tradable balance\n    z.string(), // reserved balance\n    z.string(), // contract balance\n    z.string(), // wallet balance\n    z.string(), // allowance\n  ]),\n).transform(makePartial);\nexport default balancesSchema;\n","export { default as calculateFeeInFeeAsset } from './calculateFeeInFeeAsset.js';\nexport { default as calculateNetworkFee } from './calculateNetworkFee.js';\nexport { default as calculateNetworkFeeInFeeAsset } from './calculateNetworkFeeInFeeAsset.js';\nexport { default as calculateServiceFeeInFeeAsset } from './calculateServiceFeeInFeeAsset.js';\nexport { default as checkIsToken } from './checkIsToken.js';\nexport { default as generateSecret } from './generateSecret.js';\nexport { default as denormalizeNumber } from './denormalizeNumber.js';\nexport { default as normalizeNumber } from './normalizeNumber.js';\nexport { default as isNetworkCodeInEnvironment } from './isNetworkCodeInEnvironment.js';\nexport { default as parseExchangeTradeTransaction } from './parseExchangeTradeTransaction.js';\nexport { default as toUpperCase } from './toUpperCase.js';\nexport { default as toLowerCase } from './toLowerCase.js';\nexport { default as isUppercasedNetworkCode } from './isUppercasedNetworkCode.js';\nexport { default as getNativeCryptocurrencyName } from './getNativeCryptocurrencyName.js';\n\nexport { default as laconicParse } from './laconic-parse.js';\nexport { default as isValidChainId } from './isValidChainId.js';\nexport { default as isKnownEnv } from './isKnownEnv.js';\nexport { default as removeFieldsFromObject } from './removeFieldsFromObject.js';\n// export { default as HttpError } from './httpError';\n\nexport * from './typeHelpers.js';\n","import { BigNumber } from 'bignumber.js';\nimport { FILL_ORDERS_GAS_LIMIT } from '../constants/index.js';\nimport calculateNetworkFeeInFeeAsset from './calculateNetworkFeeInFeeAsset.js';\nimport calculateServiceFeeInFeeAsset from './calculateServiceFeeInFeeAsset.js';\n\nconst calculateFeeInFeeAsset = (\n  amount: BigNumber.Value,\n  gasPriceGwei: BigNumber.Value,\n  feePercent: BigNumber.Value,\n  baseAssetName: string,\n  baseCurrencyName: string,\n  feeAssetName: string,\n  prices: Partial<Record<string, string>>,\n) => {\n  const feeAssetPrice = prices[feeAssetName];\n  if (feeAssetPrice === undefined) throw Error(`Fee asset price not found. Available prices: ${Object.keys(prices).join(', ')}`);\n  const baseAssetPrice = prices[baseAssetName];\n  if (baseAssetPrice === undefined) throw Error(`Base asset price not found. Available prices: ${Object.keys(prices).join(', ')}`);\n  const baseCurrencyPrice = prices[baseCurrencyName]; // ETH, BNB, MATIC, etc.\n  if (baseCurrencyPrice === undefined) throw Error(`Base currency price not found. Available prices: ${Object.keys(prices).join(', ')}`);\n\n  const serviceFeeInFeeAsset = calculateServiceFeeInFeeAsset(\n    amount,\n    baseAssetName,\n    feeAssetName,\n    feePercent,\n    prices,\n  );\n  const networkFeeInFeeAsset = calculateNetworkFeeInFeeAsset(\n    gasPriceGwei,\n    FILL_ORDERS_GAS_LIMIT,\n    baseCurrencyName,\n    feeAssetName,\n    prices,\n  );\n\n  return {\n    serviceFeeInFeeAsset,\n    networkFeeInFeeAsset,\n    totalFeeInFeeAsset: new BigNumber(serviceFeeInFeeAsset)\n      .plus(networkFeeInFeeAsset)\n      .toString(),\n  };\n};\n\nexport default calculateFeeInFeeAsset;\n","import { BigNumber } from 'bignumber.js';\nimport { ethers } from 'ethers';\nimport { NATIVE_CURRENCY_PRECISION } from '../constants/precisions.js';\n\nexport default function calculateNetworkFee(\n  gasPriceGwei: BigNumber.Value,\n  gasLimit: BigNumber.Value,\n) {\n  const networkFeeGwei = new BigNumber(gasPriceGwei).multipliedBy(gasLimit);\n\n  const bn = new BigNumber(ethers.parseUnits(networkFeeGwei.toString(), 'gwei').toString());\n  return bn.div(new BigNumber(10).pow(NATIVE_CURRENCY_PRECISION)).toString();\n}\n","import { BigNumber } from 'bignumber.js';\n\nexport default function convertPrice(\n  amount: BigNumber.Value,\n  assetInName: string,\n  assetOutName: string,\n  prices: Partial<Record<string, string>> // quoted in quoteAsset. [name]: priceQuotedInQuoteAsset\n) {\n  const assetInPrice = prices[assetInName];\n  if (assetInPrice === undefined) throw Error(`Price conversion: AssetIn (${assetInName}) price is undefined. Available prices: ${JSON.stringify(prices)}`);\n\n  const assetOutPrice = prices[assetOutName];\n  if (assetOutPrice === undefined) throw Error(`Price conversion: AssetOut (${assetOutName}) price is undefined. Available prices: ${JSON.stringify(prices)}`);\n\n  const assetInPriceBN = new BigNumber(assetInPrice);\n  const assetOutPriceBN = new BigNumber(assetOutPrice);\n\n  const assetInAmountBN = new BigNumber(amount);\n\n  const assetInAmountInQuoteAsset = assetInAmountBN.multipliedBy(assetInPriceBN);\n  const assetInAmountInQuoteAssetBN = new BigNumber(assetInAmountInQuoteAsset);\n\n  const assetOutAmountInQuoteAsset = assetInAmountInQuoteAssetBN.dividedBy(assetOutPriceBN);\n\n  return assetOutAmountInQuoteAsset;\n}\n","import type { BigNumber } from 'bignumber.js';\nimport calculateNetworkFee from './calculateNetworkFee.js';\nimport convertPrice from './convertPrice.js';\n\nconst calculateNetworkFeeInFeeAsset = (\n  gasPriceGwei: BigNumber.Value,\n  gasLimit: BigNumber.Value,\n  baseCurrencyName: string,\n  feeAssetName: string,\n  prices: Partial<Record<string, string>>\n) => {\n  const networkFee = calculateNetworkFee(gasPriceGwei, gasLimit);\n\n  return convertPrice(\n    networkFee,\n    baseCurrencyName, // from\n    feeAssetName, // to\n    prices\n  );\n};\n\nexport default calculateNetworkFeeInFeeAsset;\n","import { BigNumber } from 'bignumber.js';\nimport convertPrice from './convertPrice.js';\n\nexport default function calculateServiceFeeInFeeAsset(\n  amount: BigNumber.Value,\n  baseAssetName: string,\n  feeAssetName: string,\n  feePercent: BigNumber.Value,\n  prices: Partial<Record<string, string>>\n) {\n  const feeAmount = new BigNumber(amount).multipliedBy(new BigNumber(feePercent).div(100));\n\n  const feeAssetAmount = convertPrice(\n    feeAmount,\n    baseAssetName,\n    feeAssetName,\n    prices\n  );\n\n  return feeAssetAmount;\n}\n","import { ERC20__factory } from '@orionprotocol/contracts/lib/ethers-v6/index.js';\nimport { ethers } from 'ethers';\nimport invariant from 'tiny-invariant';\n\nconst checkIsToken = async (address: string, provider?: ethers.Provider) => {\n  invariant(provider, 'No provider for token checking');\n  const tokenContract = ERC20__factory.connect(address, provider);\n  try {\n    const results = await Promise.all(\n      [\n        tokenContract.name(),\n        tokenContract.symbol(),\n        tokenContract.decimals(),\n        tokenContract.totalSupply(),\n        tokenContract.balanceOf(ethers.ZeroAddress),\n      ],\n    );\n\n    return Boolean(results);\n  } catch (err) {\n    return false;\n  }\n};\n\nexport default checkIsToken;\n","import { ethers } from 'ethers';\nclass XorShift128Plus {\n  private x: number;\n  private y: number;\n\n  constructor(seed: number) {\n    this.x = seed;\n    this.y = seed ^ 0x6d2b79f5; // 0x6d2b79f5 is the golden ratio\n  }\n\n  public nextInt32(): number {\n    let x = this.x;\n    const y = this.y;\n\n    this.x = y;\n    x ^= x << 23;\n    x ^= x >> 17;\n    x ^= y ^ (y >> 26);\n\n    this.y = x;\n    return x + y;\n  }\n}\n\nfunction generateSeed(): number {\n  return Math.floor(Date.now() * Math.random());\n}\n\nfunction generateRandomBytes(size: number, rng: XorShift128Plus): Uint8Array {\n  const buffer = new Uint8Array(size);\n\n  for (let i = 0; i < size; i++) {\n    buffer[i] = rng.nextInt32() & 0xff;\n  }\n\n  return buffer;\n}\n\nfunction isomorphicCryptoRandomBytes(size: number): Uint8Array {\n  const seed = generateSeed();\n  const rng = new XorShift128Plus(seed);\n  return generateRandomBytes(size, rng);\n}\n\nconst generateSecret = () => {\n  const RANDOM_BITS = 256;\n  const rand = isomorphicCryptoRandomBytes(RANDOM_BITS);\n  const secret = ethers.keccak256(rand);\n  return secret;\n};\n\nexport default generateSecret;\n","import { BigNumber } from 'bignumber.js';\n\n/**\n * Converts normalized blockchain (\"machine-readable\") number to denormalized (\"human-readable\") number.\n * @param input Any blockchain-normalized numeric value\n * @param decimals Blockchain asset precision\n * @returns BigNumber\n */\nexport default function denormalizeNumber(input: bigint, decimals: bigint) {\n  const decimalsBN = new BigNumber(decimals.toString());\n  if (!decimalsBN.isInteger()) throw new Error(`Decimals '${decimalsBN.toString()}' is not an integer`);\n  return new BigNumber(input.toString()).div(new BigNumber(10).pow(decimalsBN));\n}\n","import { BigNumber } from \"bignumber.js\";\n\n/**\n * Converts denormalized (\"human-readable\") number to normalized (\"machine-readable\") number.\n * @param input Any numeric value\n * @param decimals Blockchain asset precision\n * @param roundingMode Rounding mode\n * @returns bigint\n */\nexport default function normalizeNumber(\n  input: BigNumber.Value,\n  decimals: BigNumber.Value,\n  roundingMode: BigNumber.RoundingMode\n) {\n  const decimalsBN = new BigNumber(decimals);\n  if (!decimalsBN.isInteger())\n    throw new Error(`Decimals '${decimalsBN.toString()}' is not an integer`);\n  const inputBN = new BigNumber(input);\n  return BigInt(\n    inputBN\n      .multipliedBy(new BigNumber(10).pow(decimals))\n      .integerValue(roundingMode)\n      .toString()\n  );\n}\n","import { chains, envs } from '../config/index.js';\n\nexport default function isNetworkCodeInEnvironment(networkCode: string, env: string) {\n  if (!(env in envs)) {\n    throw new Error(`Env ${env} is not supported. Available environments is: ${Object.keys(envs).join(', ')}`);\n  }\n  const envInfo = envs[env];\n  const envNetworks = envInfo?.networks;\n  if (!envNetworks) throw new Error('Env networks is undefined (isNetworkCodeInEnvironment)');\n\n  return Object.values(chains)\n    .some((chain) => chain.code.toLowerCase() === networkCode.toLowerCase() &&\n        chain.chainId in envNetworks);\n}\n","import { Exchange__factory } from '@orionprotocol/contracts/lib/ethers-v6/index.js';\nimport { ethers } from 'ethers';\nimport { z } from 'zod';\n\nconst swapThroughOrionPoolSchema = z.object({\n  name: z.literal('swapThroughOrionPool'),\n  args: z.tuple([\n    z.bigint(), // amount_spend\n    z.bigint(), // amount_receive\n    z.string().refine(ethers.isAddress).array().nonempty(), // path\n  ]),\n}).transform((data) => ({\n  name: data.name,\n  args: {\n    amount_spend: data.args[0],\n    amount_receive: data.args[1],\n    path: data.args[2],\n  },\n}));\n\nconst buyOrderSchema = z.tuple([ // buy order\n  z.string().refine(ethers.isAddress), // senderAddress\n  z.string().refine(ethers.isAddress), // matcherAddress\n  z.string().refine(ethers.isAddress), // baseAsset\n  z.string().refine(ethers.isAddress), // quoteAsset\n  z.string().refine(ethers.isAddress), // matcherFeeAsset\n  z.bigint(), // amount\n  z.bigint(), // price\n  z.bigint(), // matcherFee\n  z.bigint(), // nonce\n  z.bigint(), // expiration\n  z.literal(1), // buySide\n  z.boolean(), // isPersonalSign\n  z.string().refine(ethers.isHexString), // signature\n]);\nconst sellOrderSchema = z.tuple([ // sell orer\n  z.string().refine(ethers.isAddress), // senderAddress\n  z.string().refine(ethers.isAddress), // matcherAddress\n  z.string().refine(ethers.isAddress), // baseAsset\n  z.string().refine(ethers.isAddress), // quoteAsset\n  z.string().refine(ethers.isAddress), // matcherFeeAsset\n  z.bigint(), // amount\n  z.bigint(), // price\n  z.bigint(), // matcherFee\n  z.bigint(), // nonce\n  z.bigint(), // expiration\n  z.literal(0), // buySide\n  z.boolean(), // isPersonalSign\n  z.string().refine(ethers.isHexString), // signature\n]);\n\nconst toOrder = <T extends z.infer<typeof buyOrderSchema> | z.infer<typeof sellOrderSchema>>(data: T) => ({\n  senderAddress: data[0],\n  matcherAddress: data[1],\n  baseAsset: data[2],\n  quoteAsset: data[3],\n  matcherFeeAsset: data[4],\n  amount: data[5],\n  price: data[6],\n  matcherFee: data[7],\n  nonce: data[8],\n  expiration: data[9],\n  buySide: data[10],\n  isPersonalSign: data[11],\n  signature: data[12],\n});\n\nconst fillThroughOrionPoolSchema = z.object({\n  name: z.literal('fillThroughOrionPool'),\n  args: z.tuple([\n    sellOrderSchema,\n    z.bigint(), // filled amount\n    z.bigint(), // blockchainFee\n    z.string().refine(ethers.isAddress).array().nonempty(), // path\n  ]),\n}).transform((data) => ({\n  name: data.name,\n  args: {\n    order: toOrder(data.args[0]),\n    filledAmount: data.args[1],\n    blockchainFee: data.args[2],\n    path: data.args[3],\n  },\n}));\n\nconst fillOrdersSchema = z.object({\n  name: z.literal('fillOrders'),\n  args: z.tuple([\n    buyOrderSchema,\n    sellOrderSchema,\n    z.bigint(), // filledPrice\n    z.bigint(), // filledAmount\n  ]),\n}).transform((data) => ({\n  name: data.name,\n  args: {\n    orders: {\n      buyOrder: toOrder(data.args[0]),\n      sellOrder: toOrder(data.args[1]),\n    },\n    filledPrice: data.args[2],\n    filledAmount: data.args[3],\n  },\n}));\n\nexport default function parseExchangeTradeTransaction(tx: { data: string, value?: ethers.BigNumberish }) {\n  const exchangeContractInterface = Exchange__factory.createInterface();\n  const txDescription = exchangeContractInterface.parseTransaction(tx);\n  const schema = z.union([\n    fillOrdersSchema,\n    swapThroughOrionPoolSchema,\n    fillThroughOrionPoolSchema,\n  ]);\n  const data = schema.parse(txDescription);\n  return data;\n}\n","export default function toUpperCase<T extends string>(str: T): Uppercase<T> {\n  // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n  return str.toUpperCase() as Uppercase<T>;\n}\n","export default function toLowerCase<T extends string>(str: T): Lowercase<T> {\n  // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n  return str.toLowerCase() as Lowercase<T>;\n}\n","import { networkCodes } from '../constants/index.js';\nimport toUpperCase from './toUpperCase.js';\n\nconst isUppercasedNetworkCode = (value: string): value is Uppercase<typeof networkCodes[number]> => networkCodes\n  .map(toUpperCase).some((networkCode) => networkCode === value);\n\nexport default isUppercasedNetworkCode;\n","import { ethers } from 'ethers';\n\nconst getNativeCryptocurrencyName = (assetToAddress: Partial<Record<string, string>>) => {\n  const addressToAssetName = Object\n    .entries(assetToAddress)\n    .reduce<Partial<Record<string, string>>>((prev, [assetName, address]) => {\n      if (address === undefined) return prev;\n      return {\n        ...prev,\n        [address]: assetName,\n      };\n    }, {});\n\n  const nativeCryptocurrencyName = addressToAssetName[ethers.ZeroAddress];\n  if (nativeCryptocurrencyName === undefined) {\n    throw new Error('Native cryptocurrency asset name is not found');\n  }\n  return nativeCryptocurrencyName;\n};\n\nexport default getNativeCryptocurrencyName;\n","import type { ZodTypeDef, Schema } from 'zod';\n\nconst laconicParse = <DataOut, DataIn>(data: DataIn, schema: Schema<DataOut, ZodTypeDef, DataIn>) => {\n  const payload = schema.safeParse(data);\n  if (!payload.success) {\n    const issuesMessages = payload.error.issues.map(issue => `[${issue.path.join('.')}]  ${issue.message}`).join(', ');\n    throw new Error(`Can't recognize payload: ${issuesMessages}`);\n  }\n  return payload.data;\n}\n\nexport default laconicParse;\n","import { z } from 'zod';\nimport { SupportedChainId } from '../types.js';\n\nconst isValidChainId = (chainId: string): chainId is SupportedChainId => {\n  const { success } = z.nativeEnum(SupportedChainId).safeParse(chainId);\n  return success;\n};\n\nexport default isValidChainId;\n","import { knownEnvs } from '../config/schemas/index.js';\nimport type { KnownEnv, } from '../types.js';\n\nconst isKnownEnv = (env: string): env is KnownEnv => {\n  return knownEnvs.some((knownEnv) => knownEnv === env);\n}\n\nexport default isKnownEnv;\n","const removeFieldsFromObject = <\n  T extends Record<string, unknown>,\n  K extends keyof T\n>(\n  obj: T,\n  fields: K[]\n): Omit<T, K> => {\n  const result = { ...obj };\n  for (const field of fields) {\n    // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n    delete result[field];\n  }\n  return result;\n};\n\nexport default removeFieldsFromObject;\n","type WithReason = {\n  reason: string\n}\n\ntype WithCodeError = Error & {\n  code: number | string\n}\n\ntype WithMessage = {\n  message: string\n}\n\ntype WithDataError = Error & {\n  data: Record<string, unknown>\n}\n\ntype WithError = {\n  error: Record<string | number | symbol, unknown>\n}\n\nexport const makePartial = <Key extends string | number | symbol, Value>(value: Record<Key, Value>): Partial<Record<Key, Value>> => value;\n\nexport function isUnknownObject(x: unknown): x is {\n  [key in PropertyKey]: unknown\n} {\n  return x !== null && typeof x === 'object';\n}\n\nexport function isKeyOfObject<T extends object>(\n  key: string | number | symbol,\n  obj: T,\n): key is keyof T {\n  return key in obj;\n}\n\nexport function hasProp<T extends Record<string, unknown>, K extends PropertyKey>(\n  obj: T,\n  key: K,\n): obj is T & Record<K, unknown> {\n  return key in obj;\n}\n\nexport function isWithCode(candidate: unknown): candidate is WithCodeError {\n  if (!isUnknownObject(candidate) || !hasProp(candidate, 'code')) return false;\n  const type = typeof candidate.code;\n  return type === 'number' || type === 'string';\n}\n\nexport function isWithReason(candidate: unknown): candidate is WithReason {\n  if (!isUnknownObject(candidate)) return false;\n  const hasReasonProperty = hasProp(candidate, 'reason') && typeof candidate.reason === 'string';\n  return hasReasonProperty;\n}\n\nexport function isWithMessage(candidate: unknown): candidate is WithMessage {\n  if (!isUnknownObject(candidate)) return false;\n  const hasMessageProperty = hasProp(candidate, 'message') && typeof candidate.message === 'string';\n  return hasMessageProperty;\n}\n\nexport function isWithError(candidate: unknown): candidate is WithError {\n  if (!isUnknownObject(candidate)) return false;\n  const hasErrorProperty = hasProp(candidate, 'error') && isUnknownObject(candidate.error);\n  return hasErrorProperty;\n}\n\nexport function isWithData(candidate: unknown): candidate is WithDataError {\n  if (!isUnknownObject(candidate)) return false;\n  const hasDataProperty = hasProp(candidate, 'data') && typeof candidate.data === 'object';\n  return hasDataProperty;\n}\n","import { z } from 'zod';\nimport MessageType from '../MessageType.js';\n\nconst baseMessageSchema = z.object({\n  T: z.nativeEnum(MessageType),\n  _: z.number(),\n});\n\nexport default baseMessageSchema;\n","import { z } from 'zod';\nimport MessageType from '../MessageType.js';\nimport baseMessageSchema from './baseMessageSchema.js';\n\nconst assetPairsConfigSchema = baseMessageSchema.extend({\n  id: z.string(),\n  T: z.literal(MessageType.ASSET_PAIRS_CONFIG_UPDATE),\n  k: z.enum(['i', 'u']),\n  u: z.array(\n    z.tuple([\n      z.string().toUpperCase(), // pairName\n      z.number(), // minQty\n      z.number().int(), // pricePrecision\n    ]),\n  ),\n});\n\nexport default assetPairsConfigSchema;\n","import { z } from 'zod';\nimport MessageType from '../MessageType.js';\nimport baseMessageSchema from './baseMessageSchema.js';\n\nconst brokerMessageSchema = baseMessageSchema.extend({\n  T: z.literal(MessageType.BROKER_TRADABLE_ATOMIC_SWAP_ASSETS_BALANCE_UPDATE),\n  bb: z.array(\n    z.tuple([\n      z.string().toUpperCase(), // Asset name\n      z.number(), // limit\n    ]),\n  ),\n});\n\nexport default brokerMessageSchema;\n","import { z } from 'zod';\nimport MessageType from '../MessageType.js';\nimport baseMessageSchema from './baseMessageSchema.js';\n\nconst errorSchema = baseMessageSchema.extend({\n  T: z.literal(MessageType.ERROR),\n  c: z.number().int(), // code\n  id: z.string().optional(), // subscription id\n  m: z.string(), // error message,\n});\n\nexport default errorSchema;\n","import { z } from 'zod';\nimport MessageType from '../MessageType.js';\nimport baseMessageSchema from './baseMessageSchema.js';\n\nconst initMessageSchema = baseMessageSchema.extend({\n  T: z.literal(MessageType.INITIALIZATION),\n  i: z.string(),\n});\n\nexport default initMessageSchema;\n","import { z } from 'zod';\nimport MessageType from '../MessageType.js';\nimport baseMessageSchema from './baseMessageSchema.js';\n\nconst pingPongMessageSchema = baseMessageSchema.extend({\n  T: z.literal(MessageType.PING_PONG),\n});\n\nexport default pingPongMessageSchema;\n","import { z } from 'zod';\nimport MessageType from '../MessageType.js';\nimport baseMessageSchema from './baseMessageSchema.js';\nimport factories from '../../../../constants/factories.js';\n\nconst alternativeSchema = z.object({ // execution alternatives\n  e: z.string().array(), // exchanges\n  ps: z.string().array(), // path\n  mo: z.number().optional(), // market amount out\n  mi: z.number().optional(), // market amount in\n  mp: z.number(), // market price\n  aa: z.number().optional(), // available amount in\n  aao: z.number().optional(), // available amount out\n});\nconst factorySchema = z.enum(factories);\nconst swapInfoSchemaBase = baseMessageSchema.extend({\n  T: z.literal(MessageType.SWAP_INFO),\n  S: z.string(), // swap request id\n  ai: z.string().toUpperCase(), // asset in,\n  ao: z.string().toUpperCase(), // asset out\n  a: z.number(), // amount in\n  o: z.number(), // amount out\n  ma: z.number(), // min amount in\n  mao: z.number(), // min amount out\n  ps: z.string().array(), // path\n  po: z.boolean(), // is swap through pool optimal\n  e: z.string().array().optional(), // Exchanges\n  p: z.number().optional(), // price\n  mp: z.number().optional(), // market price\n  oi: z.object({ //  info about order equivalent to this swap\n    p: z.string().toUpperCase(), // asset pair\n    s: z.enum(['SELL', 'BUY']), // side\n    a: z.number(), // amount\n    sp: z.number(), // safe price (with safe deviation but without slippage)\n  }).optional(),\n  as: alternativeSchema.array(),\n  anm: z.record(z.string()).optional(), // address to ERC20 names\n  eps: z.array(z.object({\n    p: z.string(), // pool address\n    ai: z.string().toUpperCase(), // asset in\n    ao: z.string().toUpperCase(), // asset out\n    f: factorySchema, // factory\n    aai: z.string(), // asset address in\n    aao: z.string(), // asset address out\n    fee: z.number().optional(), // fee\n  })),\n  usd: z.object({ // USD info of this swap, nullable\n    aa: z.number().optional(), // available amount in, USD\n    aao: z.number().optional(), // available amount out, USD\n    mo: z.number().optional(), // market amount out, USD\n    mi: z.number().optional(), // market amount in, USD\n    d: z.string().optional(), // difference in available amount in/out (USD) and market amount out/in (USD) in percentage\n  }).optional(),\n  sl: z.number().optional(),\n});\n\nconst swapInfoSchemaByAmountIn = swapInfoSchemaBase.extend({\n  mo: z.number().optional(), // market amount out\n  aa: z.number(), // available amount in\n}).transform((content) => ({\n  ...content,\n  tb: false as const, // isTradeBuy\n}));\n\nconst swapInfoSchemaByAmountOut = swapInfoSchemaBase.extend({\n  mi: z.number().optional(), // market amount in\n  aao: z.number(), // available amount out\n}).transform((content) => ({\n  ...content,\n  tb: true as const, // isTradeBuy\n}));\n\nconst swapInfoSchema = z.union([\n  swapInfoSchemaByAmountIn,\n  swapInfoSchemaByAmountOut,\n]);\n\nexport default swapInfoSchema;\n","export default [\"UniswapV2\", \"UniswapV3\", \"Curve\", \"OrionV2\", \"OrionV3\", \"Aero\"] as const\n","import { z } from 'zod';\nimport MessageType from '../MessageType.js';\nimport baseMessageSchema from './baseMessageSchema.js';\n\nexport const orderBookItemSchema = z.tuple([\n  z.string(), // price\n  z.string(), // size\n  z.array(\n    z.string(),\n  ), // exchanges\n  z.array(z.tuple([\n    z.enum(['SELL', 'BUY']), // side\n    z.string().toUpperCase(), // pairname\n  ])),\n]);\n\nexport const orderBookSchema = baseMessageSchema.extend({\n  // id: z.string(),\n  T: z.literal(MessageType.AGGREGATED_ORDER_BOOK_UPDATE),\n  S: z.string(),\n  ob: z.object({\n    a: z.array(orderBookItemSchema),\n    b: z.array(orderBookItemSchema),\n  }),\n});\n","const UnsubscriptionType = {\n  ASSET_PAIRS_CONFIG_UPDATES_UNSUBSCRIBE: 'apcu',\n  BROKER_TRADABLE_ATOMIC_SWAP_ASSETS_BALANCE_UPDATES_UNSUBSCRIBE: 'btasabu',\n} as const;\nexport default UnsubscriptionType;\n","import { z } from 'zod';\nimport MessageType from '../MessageType.js';\nimport baseMessageSchema from './baseMessageSchema.js';\n\nconst unsubscriptionDoneSchema = baseMessageSchema.extend({\n  id: z.string(),\n  T: z.literal(MessageType.UNSUBSCRIPTION_DONE),\n});\n\nexport default unsubscriptionDoneSchema;\n","import { z } from 'zod';\nimport MessageType from '../MessageType.js';\nimport baseMessageSchema from './baseMessageSchema.js';\n\nconst assetPairConfigSchema = baseMessageSchema.extend({\n  id: z.string(),\n  T: z.literal(MessageType.ASSET_PAIR_CONFIG_UPDATE),\n  k: z.enum(['i', 'u']),\n  u: z.tuple([\n    z.string().toUpperCase(), // pairName\n    z.number(), // minQty\n    z.number().int(), // pricePrecision\n  ]),\n});\n\nexport default assetPairConfigSchema;\n","export type ObjectKeys<T extends object> = `${Exclude<keyof T, symbol>}`;\n\n/**\nA strongly-typed version of `Object.keys()`.\nThis is useful since `Object.keys()` always returns an array of strings. This function returns a strongly-typed array of the keys of the given object.\n- [Explanation](https://stackoverflow.com/questions/55012174/why-doesnt-object-keys-return-a-keyof-type-in-typescript)\n- [TypeScript issues about this](https://github.com/microsoft/TypeScript/issues/45390)\n@example\n```\nconst stronglyTypedItems = objectKeys({a: 1, b: 2, c: 3}); // => Array<'a' | 'b' | 'c'>\nconst untypedItems = Object.keys(items); // => Array<string>\n```\n@category Improved builtin\n@category Type guard\n*/\n// eslint-disable-next-line @typescript-eslint/consistent-type-assertions\nexport const objectKeys = Object.keys as <Type extends object>(value: Type) => Array<ObjectKeys<Type>>;\n","import { z } from 'zod';\nimport uppercasedNetworkCodes from '../../../constants/uppercasedNetworkCodes.js';\nimport redeemOrderSchema from './redeemOrderSchema.js';\n\nexport const atomicSwapHistorySchema = z.array(z.object({\n  id: z.string(),\n  sender: z.string(),\n  lockOrder: z.object({\n    sender: z.string(),\n    asset: z.string().toUpperCase(),\n    amount: z.number(),\n    expiration: z.number(),\n    secretHash: z.string(),\n    used: z.boolean(),\n    sourceNetworkCode: z.enum(uppercasedNetworkCodes),\n  }),\n  redeemOrder: redeemOrderSchema,\n  status: z.enum(['SETTLED', 'EXPIRED', 'ACTIVE']),\n  creationTime: z.number(),\n}));\n\nexport default atomicSwapHistorySchema;\n","export default ['FTM', 'BSC', 'ETH', 'POLYGON', 'OKC', 'ARB', 'OPBNB', 'INEVM', 'LINEA', 'AVAX', 'BASE', 'LUMIA'] as const;\n","import { z } from 'zod';\n\nconst redeemOrderSchema = z.object({\n  asset: z.string().toUpperCase(),\n  amount: z.number(),\n  secretHash: z.string(),\n  sender: z.string(),\n  receiver: z.string(),\n  expiration: z.number(),\n  signature: z.string(),\n  claimReceiver: z.string(),\n});\n\nexport default redeemOrderSchema;\n","export { default as atomicSwapHistorySchema } from './atomicSwapHistorySchema.js';\nexport { default as cancelOrderSchema } from './cancelOrderSchema.js';\nexport { default as exchangeInfoSchema } from './exchangeInfoSchema.js';\nexport { default as orderBenefitsSchema } from './orderBenefitsSchema.js';\nexport { default as pairConfigSchema } from './pairConfigSchema.js';\nexport { default as placeAtomicSwapSchema } from './placeAtomicSwapSchema.js';\nexport { default as redeemOrderSchema } from './redeemOrderSchema.js';\nexport { default as swapInfoSchema } from './swapInfoSchema.js';\nexport { default as orderSchema } from './orderSchema.js';\nexport * from './aggregatedOrderbookSchema.js'\nexport { default as errorSchema } from './errorSchema.js';\n","import { ethers } from 'ethers';\nimport { z } from 'zod';\nimport { exchanges, orderStatuses, subOrderStatuses } from '../../../constants/index.js';\n\nconst blockchainOrderSchema = z.object({\n  id: z.string().refine(ethers.isHexString, (value) => ({\n    message: `blockchainOrder.id must be a hex string, got ${value}`,\n  })),\n  senderAddress: z.string().refine(ethers.isAddress, (value) => ({\n    message: `blockchainOrder.senderAddress must be an address, got ${value}`,\n  })),\n  matcherAddress: z.string().refine(ethers.isAddress, (value) => ({\n    message: `blockchainOrder.matcherAddress must be an address, got ${value}`,\n  })),\n  baseAsset: z.string().refine(ethers.isAddress, (value) => ({\n    message: `blockchainOrder.baseAsset must be an address, got ${value}`,\n  })),\n  quoteAsset: z.string().refine(ethers.isAddress, (value) => ({\n    message: `blockchainOrder.quoteAsset must be an address, got ${value}`,\n  })),\n  matcherFeeAsset: z.string().refine(ethers.isAddress, (value) => ({\n    message: `blockchainOrder.matcherFeeAsset must be an address, got ${value}`,\n  })),\n  amount: z.number().int().nonnegative(),\n  price: z.number().int().nonnegative(),\n  matcherFee: z.number().int().nonnegative(),\n  nonce: z.number(),\n  expiration: z.number(),\n  buySide: z.union([z.literal(1), z.literal(0)]),\n  signature: z.string().refine(ethers.isHexString, (value) => ({\n    message: `blockchainOrder.signature must be a hex string, got ${value}`,\n  })).nullable(),\n  isPersonalSign: z.boolean(),\n  needWithdraw: z.boolean(),\n});\n\nconst tradeInfoSchema = z.object({\n  tradeId: z.string().uuid(),\n  tradeStatus: z.enum(['NEW', 'PENDING', 'OK', 'FAIL', 'TEMP_ERROR', 'REJECTED']),\n  filledAmount: z.number().nonnegative(),\n  price: z.number().nonnegative(),\n  creationTime: z.number(),\n  updateTime: z.number(),\n  matchedBlockchainOrder: blockchainOrderSchema.optional(),\n  matchedSubOrderId: z.number().int().nonnegative().optional(),\n});\n\nconst baseOrderSchema = z.object({\n  assetPair: z.string().toUpperCase(),\n  side: z.enum(['BUY', 'SELL']),\n  amount: z.number().nonnegative(),\n  remainingAmount: z.number().nonnegative(),\n  price: z.number().nonnegative(),\n  sender: z.string().refine(ethers.isAddress, (value) => ({\n    message: `order.sender must be an address, got ${value}`,\n  })),\n  filledAmount: z.number().nonnegative(),\n  internalOnly: z.boolean(),\n})\n\nconst selfBrokers = exchanges.map((exchange) => `SELF_BROKER_${exchange}` as const);\ntype SelfBroker = typeof selfBrokers[number];\nconst isSelfBroker = (value: string): value is SelfBroker => selfBrokers.some((broker) => broker === value);\n\nconst selfBrokerSchema = z.custom<SelfBroker>((value) => {\n  if (typeof value === 'string' && isSelfBroker(value)) {\n    return true;\n  }\n  return false;\n});\n\nconst brokerAddressSchema = z.enum([\n  'INTERNAL_BROKER',\n  'ORION_BROKER',\n  'SELF_BROKER'\n])\n  .or(selfBrokerSchema)\n  .or(z.string().refine(ethers.isAddress, (value) => ({\n    message: `subOrder.subOrders.[n].brokerAddress must be an address, got ${value}`,\n  })));\nconst subOrderSchema = baseOrderSchema.extend({\n  price: z.number(),\n  id: z.number(),\n  parentOrderId: z.string().refine(ethers.isHexString, (value) => ({\n    message: `subOrder.parentOrderId must be a hex string, got ${value}`,\n  })),\n  exchange: z.string(),\n  exchanges: z.string().array().optional(),\n  brokerAddress: brokerAddressSchema,\n  tradesInfo: z.record(\n    z.string().uuid(),\n    tradeInfoSchema\n  ),\n  status: z.enum(subOrderStatuses),\n  complexSwap: z.boolean(),\n});\n\nconst orderSchema = z.object({\n  orderId: z.string().refine(ethers.isHexString, (value) => ({\n    message: `orderId must be a hex string, got ${value}`,\n  })),\n  order: baseOrderSchema.extend({\n    id: z.string().refine(ethers.isHexString, (value) => ({\n      message: `order.id must be a hex string, got ${value}`,\n    })),\n    fee: z.number().nonnegative(),\n    feeAsset: z.string().toUpperCase(),\n    creationTime: z.number(),\n    blockchainOrder: blockchainOrderSchema,\n    subOrders: z.record(subOrderSchema),\n    updateTime: z.number(),\n    status: z.enum(orderStatuses),\n    settledAmount: z.number().nonnegative(),\n  })\n});\n\nexport default orderSchema;\n","import { z } from 'zod';\n\nconst orderbookElementSchema = z.object({\n  price: z.number(),\n  amount: z.number(),\n  path: z.array(z.object({\n    assetPair: z.string().toUpperCase(),\n    action: z.enum(['BUY', 'SELL']),\n  })),\n});\n\nconst aggregatedOrderbookElementSchema = orderbookElementSchema\n  .extend({\n    exchanges: z.string().array(),\n  });\n\nexport const aggregatedOrderbookSchema = z.object({\n  asks: z.array(aggregatedOrderbookElementSchema),\n  bids: z.array(aggregatedOrderbookElementSchema),\n});\n\nexport const exchangeOrderbookSchema = z.object({\n  asks: z.array(orderbookElementSchema),\n  bids: z.array(orderbookElementSchema),\n});\n\nexport const poolReservesSchema = z.object({\n  a: z.number(), // amount asset\n  p: z.number(), // price asset\n  indicativePrice: z.number(),\n});\n","const httpToWS = (url: string) => {\n  let parsedUrl: URL;\n  try {\n    parsedUrl = new URL(url);\n  } catch (e) {\n    console.error(`httpToWS: Invalid URL ${url}`);\n    throw e;\n  }\n  if (parsedUrl.protocol === 'https:') {\n    parsedUrl.protocol = 'wss:';\n  } else if (parsedUrl.protocol === 'http:') {\n    parsedUrl.protocol = 'ws:';\n  }\n  return parsedUrl.toString();\n};\n\nexport default httpToWS;\n","import {z} from \"zod\";\n\nexport const pmmOrderQuotationSchema = z.object({\n    info: z.string().default(''),\n    makerAsset: z.string().default(''),\n    takerAsset: z.string().default(''),\n    maker: z.string().default(''),\n    allowedSender: z.string().default(''),\n    makingAmount: z.string().default(''),\n    takingAmount: z.string().default(''),\n});\n\nexport const pmmOrderSchema = z.object({\n    order: pmmOrderQuotationSchema.default({}),\n    signature: z.string().default(''),\n    success: z.boolean().default(false),\n    error: z.string().default(''),\n});","import { z } from 'zod';\nimport {\n  IDOSchema, atomicHistorySchema,\n  poolsConfigSchema, poolsInfoSchema, infoSchema, historySchema,\n  poolsV3InfoSchema,\n  type addPoolSchema, adminPoolsListSchema, adminPoolSchema,\n  atomicSummarySchema,\n  poolsLpAndStakedSchema,\n  userVotesSchema,\n  userEarnedSchema,\n  type PairStatusEnum,\n  pairStatusSchema,\n  pricesWithQuoteAssetSchema,\n  referralDataSchema,\n  pmmSchema\n} from './schemas/index.js';\nimport type redeemOrderSchema from '../Aggregator/schemas/redeemOrderSchema.js';\nimport { sourceAtomicHistorySchema, targetAtomicHistorySchema } from './schemas/atomicHistorySchema.js';\nimport { makePartial } from '../../utils';\nimport type { networkCodes } from '../../constants/index.js';\nimport { fetchWithValidation } from 'simple-typed-fetch';\nimport type { BasicAuthCredentials } from '../../types.js';\n\ntype IAdminAuthHeaders = {\n  auth: string\n  [key: string]: string\n}\n\nexport type IEditPool = {\n  tokenAIcon?: string\n  tokenBIcon?: string\n  symbol?: string\n  status: PairStatusEnum\n  minQty?: number\n  tokenASymbol?: string\n  tokenBSymbol?: string\n  tokensReversed?: boolean\n}\n\ntype AtomicSwapHistoryBaseQuery = {\n  limit?: number\n  sender?: string\n  receiver?: string\n  used?: 0 | 1\n  page?: number\n  sourceNetworkCode?: typeof networkCodes[number]\n} & Partial<Record<string, string | number>>\n\ntype AtomicSwapHistorySourceQuery = AtomicSwapHistoryBaseQuery & {\n  type?: 'source'\n  expiredLock?: 0 | 1\n  state?: 'BEFORE-LOCK' | 'LOCKED' | 'CLAIMED' | 'REFUNDED'\n\n}\ntype AtomicSwapHistoryTargetQuery = AtomicSwapHistoryBaseQuery & {\n  type?: 'target'\n  expiredRedeem?: 0 | 1\n  state?: 'REDEEMED' | 'BEFORE-REDEEM'\n}\n\ntype PlatformFees = {\n  assetIn: string\n  assetOut: string\n  walletAddress?: string | undefined\n  fromWidget?: string | undefined\n}\n\nclass BlockchainService {\n  private readonly apiUrl: string;\n\n  private readonly basicAuth?: BasicAuthCredentials | undefined;\n\n  get api() {\n    return this.apiUrl;\n  }\n\n  constructor(apiUrl: string, basicAuth?: BasicAuthCredentials) {\n    this.apiUrl = apiUrl;\n    this.basicAuth = basicAuth;\n\n    this.getAtomicSwapAssets = this.getAtomicSwapAssets.bind(this);\n    this.getAtomicSwapHistory = this.getAtomicSwapHistory.bind(this);\n    this.getAuthToken = this.getAuthToken.bind(this);\n    this.getCirculatingSupply = this.getCirculatingSupply.bind(this);\n    this.getInfo = this.getInfo.bind(this);\n    this.getPmmInfo = this.getPmmInfo.bind(this);\n    this.getPoolsConfig = this.getPoolsConfig.bind(this);\n    this.getPoolsInfo = this.getPoolsInfo.bind(this);\n    this.getPoolsLpAndStaked = this.getPoolsLpAndStaked.bind(this);\n    this.getUserVotes = this.getUserVotes.bind(this);\n    this.getUserEarned = this.getUserEarned.bind(this);\n    this.getPoolsV3Info = this.getPoolsV3Info.bind(this);\n    this.getHistory = this.getHistory.bind(this);\n    this.getPricesWithQuoteAsset = this.getPricesWithQuoteAsset.bind(this);\n    this.getTokensFee = this.getTokensFee.bind(this);\n    this.getPlatformFees = this.getPlatformFees.bind(this);\n    this.getGasPriceWei = this.getGasPriceWei.bind(this);\n    this.checkFreeRedeemAvailable = this.checkFreeRedeemAvailable.bind(this);\n    this.redeemAtomicSwap = this.redeemAtomicSwap.bind(this);\n    this.redeem2AtomicSwaps = this.redeem2AtomicSwaps.bind(this);\n    this.checkRedeem = this.checkRedeem.bind(this);\n    this.checkRedeem2Atomics = this.checkRedeem2Atomics.bind(this);\n    this.getIDOInfo = this.getIDOInfo.bind(this);\n    this.checkAuth = this.checkAuth.bind(this);\n    this.addPool = this.addPool.bind(this);\n    this.editPool = this.editPool.bind(this);\n    this.getPool = this.getPool.bind(this);\n    this.getPoolsList = this.getPoolsList.bind(this);\n    this.getSourceAtomicSwapHistory = this.getSourceAtomicSwapHistory.bind(this);\n    this.getTargetAtomicSwapHistory = this.getTargetAtomicSwapHistory.bind(this);\n    this.checkPoolInformation = this.checkPoolInformation.bind(this);\n    this.checkIfHashUsed = this.checkIfHashUsed.bind(this);\n    this.getBlockNumber = this.getBlockNumber.bind(this);\n    this.getRedeemOrderBySecretHash = this.getRedeemOrderBySecretHash.bind(this);\n    this.claimOrder = this.claimOrder.bind(this);\n    this.getGasLimits = this.getGasLimits.bind(this);\n    this.getExchangeContractWalletBalance = this.getExchangeContractWalletBalance.bind(this);\n  }\n\n  get basicAuthHeaders() {\n    if (this.basicAuth) {\n      return {\n        Authorization: `Basic ${btoa(`${this.basicAuth.username}:${this.basicAuth.password}`)}`,\n      };\n    }\n    return {};\n  }\n\n  get blockchainServiceWsUrl() {\n    return `${this.apiUrl}/`;\n  }\n\n  private readonly getSummaryRedeem = (brokerAddress: string, unshifted?: 1 | 0, sourceNetworkCode?: typeof networkCodes[number]) => {\n    const url = new URL(`${this.apiUrl}/api/atomic/summary-redeem/${brokerAddress}`);\n    if (unshifted !== undefined && unshifted === 1) {\n      url.searchParams.append('unshifted', unshifted.toString());\n    }\n    if (sourceNetworkCode !== undefined) {\n      url.searchParams.append('sourceNetworkCode', sourceNetworkCode);\n    }\n    return fetchWithValidation(\n      url.toString(),\n      atomicSummarySchema,\n      { headers: this.basicAuthHeaders }\n    );\n  };\n\n  private readonly getSummaryClaim = (brokerAddress: string) => fetchWithValidation(\n    `${this.apiUrl}/api/atomic/summary-claim/${brokerAddress}`,\n    atomicSummarySchema,\n    { headers: this.basicAuthHeaders },\n  );\n\n  private readonly getQueueLength = () => fetchWithValidation(\n    `${this.apiUrl}/api/queueLength`,\n    z.number().int(),\n    { headers: this.basicAuthHeaders },\n  );\n\n  get internal() {\n    return {\n      getSummaryRedeem: this.getSummaryRedeem.bind(this),\n      getSummaryClaim: this.getSummaryClaim.bind(this),\n      getQueueLength: this.getQueueLength.bind(this),\n    };\n  }\n\n  getAuthToken = () => fetchWithValidation(\n    `${this.apiUrl}/api/auth/token`,\n    z.object({ token: z.string() }),\n    { headers: this.basicAuthHeaders }\n  );\n\n  getCirculatingSupply = () => fetchWithValidation(\n    `${this.apiUrl}/api/circulating-supply`,\n    z.number(),\n    { headers: this.basicAuthHeaders }\n  );\n\n  getInfo = () => fetchWithValidation(`${this.apiUrl}/api/info`, infoSchema);\n\n  getPmmInfo = () => fetchWithValidation(`${this.apiUrl}/api/pmm-info`, pmmSchema);\n\n  getPoolsConfig = () => fetchWithValidation(\n    `${this.apiUrl}/api/pools/config`,\n    poolsConfigSchema,\n    { headers: this.basicAuthHeaders }\n  );\n\n  getPoolsInfo = () => fetchWithValidation(\n    `${this.apiUrl}/api/pools/info`,\n    poolsInfoSchema,\n    { headers: this.basicAuthHeaders }\n  );\n\n  getPoolsLpAndStaked = (address: string) => fetchWithValidation(\n    `${this.apiUrl}/api/pools/user-lp/${address}`,\n    poolsLpAndStakedSchema,\n    { headers: this.basicAuthHeaders }\n  );\n\n  getUserVotes = (address: string) => fetchWithValidation(\n    `${this.apiUrl}/api/pools/user-votes/${address}`,\n    userVotesSchema,\n    { headers: this.basicAuthHeaders }\n  );\n\n  getUserEarned = (address: string) => fetchWithValidation(\n    `${this.apiUrl}/api/pools/user-earned/${address}`,\n    userEarnedSchema,\n    { headers: this.basicAuthHeaders }\n  );\n\n  getPoolsV3Info = () => fetchWithValidation(\n    `${this.apiUrl}/api/pools-v3/info`,\n    poolsV3InfoSchema,\n    { headers: this.basicAuthHeaders }\n  );\n\n  getHistory = (address: string) => fetchWithValidation(\n    `${this.apiUrl}/api/history/${address}`,\n    historySchema,\n    { headers: this.basicAuthHeaders }\n  );\n\n  getPricesWithQuoteAsset = () => fetchWithValidation(\n    `${this.apiUrl}/api/quotedPrices`,\n    pricesWithQuoteAssetSchema,\n    { headers: this.basicAuthHeaders }\n  );\n\n  /**\n     * @deprecated In favor of getPlatformFees\n     */\n  getTokensFee = () => fetchWithValidation(\n    `${this.apiUrl}/api/tokensFee`,\n    z.record(z.string()).transform(makePartial),\n    { headers: this.basicAuthHeaders }\n  );\n\n  getPlatformFees = ({\n    assetIn,\n    assetOut,\n    walletAddress,\n    fromWidget\n  }: PlatformFees\n  ) => {\n    const url = new URL(`${this.apiUrl}/api/platform-fees`);\n\n    url.searchParams.append('assetIn', assetIn);\n    url.searchParams.append('assetOut', assetOut);\n\n    if (walletAddress !== undefined) {\n      url.searchParams.append('walletAddress', walletAddress);\n    }\n\n    if (fromWidget !== undefined) {\n      url.searchParams.append('fromWidget', fromWidget);\n    }\n\n    return fetchWithValidation(\n      url.toString(),\n      z.record(z.string()).transform(makePartial),\n      { headers: this.basicAuthHeaders }\n    )\n  };\n\n  getReferralData = (walletAddress: string) => fetchWithValidation(\n    `${this.apiUrl}/api/referral-data/${walletAddress}`,\n    referralDataSchema,\n    { headers: this.basicAuthHeaders }\n  );\n\n  getGasPriceWei = () => fetchWithValidation(\n    `${this.apiUrl}/api/gasPrice`,\n    z.string(),\n    { headers: this.basicAuthHeaders }\n  );\n\n  checkFreeRedeemAvailable = (walletAddress: string) => fetchWithValidation(\n    `${this.apiUrl}/api/atomic/has-free-redeem/${walletAddress}`,\n    z.boolean(),\n    { headers: this.basicAuthHeaders }\n  );\n\n  getRedeemOrderBySecretHash = (secretHash: string) => fetchWithValidation(\n    `${this.apiUrl}/api/atomic/redeem-order/${secretHash}`,\n    z.object({\n      secretHash: z.string(),\n      secret: z.string(),\n      redeemTxHash: z.string(),\n    }),\n    { headers: this.basicAuthHeaders }\n  );\n\n  claimOrder = (\n    secretHash: string,\n    targetNetwork: typeof networkCodes[number],\n    redeemTxHash?: string,\n  ) => fetchWithValidation(\n    `${this.apiUrl}/api/atomic/claim-order`,\n    z.string(),\n    {\n      method: 'POST',\n      body: JSON.stringify({\n        secretHash,\n        targetNetwork,\n        redeemTxHash,\n      }),\n      headers: {\n        'Content-Type': 'application/json',\n        ...this.basicAuthHeaders,\n      },\n    },\n  );\n\n  redeemAtomicSwap = (\n    redeemOrder: z.infer<typeof redeemOrderSchema>,\n    secret: string,\n    sourceNetwork: typeof networkCodes[number],\n  ) => fetchWithValidation(\n    `${this.apiUrl}/api/atomic/matcher-redeem`,\n    z.string(),\n    {\n      method: 'POST',\n      body: JSON.stringify({\n        order: redeemOrder,\n        secret,\n        sourceNetwork,\n      }),\n      headers: {\n        'Content-Type': 'application/json',\n        ...this.basicAuthHeaders,\n      },\n    },\n  );\n\n  redeem2AtomicSwaps = (\n    redeemOrder1: z.infer<typeof redeemOrderSchema>,\n    secret1: string,\n    redeemOrder2: z.infer<typeof redeemOrderSchema>,\n    secret2: string,\n    sourceNetwork: typeof networkCodes[number],\n  ) => fetchWithValidation(\n    `${this.apiUrl}/api/atomic/matcher-redeem2atomics`,\n    z.string(),\n    {\n      method: 'POST',\n      body: JSON.stringify({\n        order1: redeemOrder1,\n        secret1,\n        order2: redeemOrder2,\n        secret2,\n        sourceNetwork,\n      }),\n      headers: {\n        'Content-Type': 'application/json',\n        ...this.basicAuthHeaders,\n      },\n    },\n  );\n\n  checkRedeem = (secretHash: string) => fetchWithValidation(\n    `${this.apiUrl}/api/atomic/matcher-redeem/${secretHash}`,\n    z.enum(['OK', 'FAIL']).nullable(),\n    { headers: this.basicAuthHeaders }\n  );\n\n  checkRedeem2Atomics = (firstSecretHash: string, secondSecretHash: string) => fetchWithValidation(\n    `${this.apiUrl}/api/atomic/matcher-redeem/${firstSecretHash}-${secondSecretHash}`,\n    z.enum(['OK', 'FAIL']).nullable(),\n    { headers: this.basicAuthHeaders }\n  );\n\n  getBlockNumber = () => fetchWithValidation(`${this.apiUrl}/api/blocknumber`, z.number().int(), { headers: this.basicAuthHeaders });\n\n  getIDOInfo = () => fetchWithValidation(`${this.apiUrl}/api/solarflare`, IDOSchema, { headers: this.basicAuthHeaders });\n\n  checkAuth = (headers: IAdminAuthHeaders) => fetchWithValidation(`${this.apiUrl}/api/auth/check`, z.object({\n    auth: z.boolean(),\n  }), { headers: { ...headers, ...this.basicAuthHeaders } });\n\n  getPool = (address: string, headers: IAdminAuthHeaders) => fetchWithValidation(\n    `${this.apiUrl}/api/pools/${address}`,\n    adminPoolSchema,\n    { headers: { ...headers, ...this.basicAuthHeaders } },\n  );\n\n  getPoolsList = (headers: IAdminAuthHeaders) => fetchWithValidation(\n    `${this.apiUrl}/api/pools/list`,\n    adminPoolsListSchema,\n    { headers: { ...headers, ...this.basicAuthHeaders } },\n  );\n\n  editPool = (address: string, data: IEditPool, headers: IAdminAuthHeaders) => fetchWithValidation(\n    `${this.apiUrl}/api/pools/edit/${address}`,\n    pairStatusSchema,\n    {\n      method: 'POST',\n      body: JSON.stringify(data),\n      headers: {\n        'Content-Type': 'application/json',\n        ...headers,\n        ...this.basicAuthHeaders,\n      },\n    },\n  );\n\n  addPool = (data: z.infer<typeof addPoolSchema>) => fetchWithValidation(\n    `${this.apiUrl}/api/pools/add`,\n    z.number(),\n    {\n      method: 'POST',\n      body: JSON.stringify(data),\n      headers: {\n        'Content-Type': 'application/json',\n        Accept: 'application/json',\n        ...this.basicAuthHeaders,\n      },\n    },\n    z.string(),\n  );\n\n  checkPoolInformation = (poolAddress: string) => fetchWithValidation(\n    `${this.apiUrl}/api/pools/check/${poolAddress}`,\n    pairStatusSchema,\n    { headers: this.basicAuthHeaders },\n  );\n\n  getAtomicSwapAssets = () => fetchWithValidation(\n    `${this.apiUrl}/api/atomic/swap-assets`,\n    z.array(z.string()),\n    { headers: this.basicAuthHeaders },\n  );\n\n  /**\n     * Sender is user address in source BlockchainService instance \\\n     * Receiver is user address in target BlockchainService instance\n     */\n  getAtomicSwapHistory = (query: AtomicSwapHistorySourceQuery | AtomicSwapHistoryTargetQuery) => {\n    const url = new URL(`${this.apiUrl}/api/atomic/history/`);\n\n    Object.entries(query)\n      .forEach(([key, value]) => {\n        if (value === undefined) throw new Error('Value must be defined');\n        url.searchParams.append(key, value.toString());\n      });\n\n    return fetchWithValidation(url.toString(), atomicHistorySchema, { headers: this.basicAuthHeaders });\n  };\n\n  getSourceAtomicSwapHistory = (query: AtomicSwapHistorySourceQuery) => {\n    const url = new URL(`${this.apiUrl}/api/atomic/history/`);\n\n    Object.entries(query)\n      .forEach(([key, value]) => {\n        if (value === undefined) throw new Error('Value must be defined');\n        url.searchParams.append(key, value.toString());\n      });\n\n    if (query.type === undefined) url.searchParams.append('type', 'source');\n\n    return fetchWithValidation(url.toString(), sourceAtomicHistorySchema, { headers: this.basicAuthHeaders });\n  };\n\n  getTargetAtomicSwapHistory = (query: AtomicSwapHistoryTargetQuery) => {\n    const url = new URL(`${this.apiUrl}/api/atomic/history/`);\n\n    Object.entries(query)\n      .forEach(([key, value]) => {\n        if (value === undefined) throw new Error('Value must be defined');\n        url.searchParams.append(key, value.toString());\n      });\n\n    if (query.type === undefined) url.searchParams.append('type', 'target');\n\n    return fetchWithValidation(url.toString(), targetAtomicHistorySchema, { headers: this.basicAuthHeaders });\n  };\n\n  checkIfHashUsed = (secretHashes: string[]) => fetchWithValidation(\n    `${this.apiUrl}/api/atomic/is-hash-used`,\n    z.record(z.boolean()).transform(makePartial),\n    {\n      headers: {\n        'Content-Type': 'application/json',\n        Accept: 'application/json',\n        ...this.basicAuthHeaders,\n      },\n      method: 'POST',\n      body: JSON.stringify(secretHashes),\n    },\n  );\n\n  getGasLimits = () => fetchWithValidation(\n    `${this.apiUrl}/api/baseLimits`,\n    z.record(z.number()),\n    { headers: this.basicAuthHeaders }\n  );\n\n  getExchangeContractWalletBalance = (exchangeContractAddress: string) => fetchWithValidation(\n    `${this.apiUrl}/api/broker/getWalletBalance/${exchangeContractAddress}`,\n    z.record(z.string()),\n    { headers: this.basicAuthHeaders }\n  );\n}\n\nexport * as schemas from './schemas/index.js';\nexport { BlockchainService };\n","export * from './adminPoolSchema.js';\nexport { default as adminPoolsListSchema } from './adminPoolsListSchema.js';\nexport { default as addPoolSchema } from './addPoolSchema.js';\nexport { default as atomicHistorySchema } from './atomicHistorySchema.js';\nexport { default as checkRedeemOrderSchema } from './checkRedeemOrderSchema.js';\nexport { default as historySchema } from './historySchema.js';\nexport { default as IDOSchema } from './IDOSchema.js';\nexport { default as infoSchema } from './infoSchema.js';\nexport { default as poolsConfigSchema } from './poolsConfigSchema.js';\nexport { default as poolsInfoSchema } from './poolsInfoSchema.js';\nexport { default as atomicSummarySchema } from './atomicSummarySchema.js';\nexport { default as poolsLpAndStakedSchema } from './poolsLpAndStakedSchema.js';\nexport { default as userVotesSchema } from './userVotesSchema.js';\nexport { default as userEarnedSchema } from './userEarnedSchema.js';\nexport { default as poolsV3InfoSchema } from './poolsV3InfoSchema.js';\nexport { default as pmmSchema } from './pmmSchema.js';\nexport { pricesWithQuoteAssetSchema } from './pricesWithQuoteAssetSchema.js';\nexport { referralDataSchema } from './referralDataSchema.js';","import { z } from 'zod';\n\nexport enum PairStatusEnum {\n  DOESNT_EXIST = -1,\n  REVIEW = 0,\n  ACCEPTED = 1,\n  REJECTED = 2,\n}\n\nexport const pairStatusSchema = z.nativeEnum(PairStatusEnum);\n\nconst tokenSchema = z.object({\n  symbol: z.string(),\n  icon: z.string().optional(),\n  address: z.string(),\n  decimals: z.number().optional(),\n  isUser: z.boolean().optional(),\n});\n\nexport const poolOnVerificationSchema = z.object({\n  tokenA: tokenSchema,\n  tokenB: tokenSchema,\n  _id: z.string().optional(),\n  address: z.string(),\n  symbol: z.string(),\n  isUser: z.boolean(),\n  minQty: z.number().optional(),\n  tokensReversed: z.boolean(),\n  status: pairStatusSchema,\n  updatedAt: z.number(),\n  createdAt: z.number(),\n});\n\nexport type adminPoolType = z.infer<typeof poolOnVerificationSchema>;\n\nexport const adminPoolSchema = poolOnVerificationSchema;\n","import { z } from 'zod';\n\nimport { poolOnVerificationSchema } from './adminPoolSchema.js';\n\nexport default z.array(poolOnVerificationSchema);\n","import { z } from 'zod';\n\nconst addPoolSchema = z.object({\n  poolAddress: z.string(),\n  tokenAIcon: z.string().optional(),\n  tokenAName: z.string().optional(),\n  tokenBIcon: z.string().optional(),\n  tokenBName: z.string().optional(),\n});\n\nexport default addPoolSchema;\n","import { ethers } from 'ethers';\nimport { z } from 'zod';\nimport getValidArrayItemsSchema from '../../../utils/getValidArrayItems.js';\n\nconst baseAtomicHistorySchema = z.object({\n  success: z.boolean(),\n  count: z.number(),\n  total: z.number(),\n  pagination: z.object({}),\n});\n\nconst baseAtomicHistoryItem = z.object({\n  used: z.boolean(),\n  claimed: z.boolean(),\n  isAggApplied: z.boolean(),\n  _id: z.string(),\n  __v: z.number(),\n  asset: z.string(),\n  sender: z.string().refine(ethers.isAddress),\n  secretHash: z.string().refine(ethers.isHexString),\n  receiver: z.string().refine(ethers.isAddress).optional(),\n  secret: z.string().optional(),\n});\n\nconst sourceAtomicHistorySchemaItem = baseAtomicHistoryItem.extend({\n  type: z.literal('source'),\n  amountToReceive: z.number().optional(),\n  amountToSpend: z.number().optional(),\n  timestamp: z.object({\n    lock: z.number().optional(),\n    claim: z.number().optional(),\n    refund: z.number().optional(),\n  }).optional(),\n  expiration: z.object({\n    lock: z.number().optional(),\n  }).optional(),\n  state: z.enum(['BEFORE-LOCK', 'LOCKED', 'REFUNDED', 'CLAIMED']).optional(),\n  targetChainId: z.number(),\n  transactions: z.object({\n    lock: z.string().optional(),\n    claim: z.string().optional(),\n    refund: z.string().optional(),\n  }).optional(),\n});\n\nconst targetAtomicHistorySchemaItem = baseAtomicHistoryItem.extend({\n  type: z.literal('target'),\n  timestamp: z.object({\n    redeem: z.number().optional(),\n  }).optional(),\n  expiration: z.object({\n    redeem: z.number().optional(),\n  }).optional(),\n  state: z.enum(['BEFORE-REDEEM', 'REDEEMED']).optional(),\n  transactions: z.object({\n    redeem: z.string().optional(),\n  }).optional(),\n});\n\nexport const sourceAtomicHistorySchema = baseAtomicHistorySchema.extend({\n  data: z.array(sourceAtomicHistorySchemaItem),\n});\n\nexport const targetAtomicHistorySchema = baseAtomicHistorySchema.extend({\n  data: z.array(targetAtomicHistorySchemaItem),\n});\n\nconst atomicHistorySchema = baseAtomicHistorySchema.extend({\n  data: getValidArrayItemsSchema(\n    z.discriminatedUnion('type', [sourceAtomicHistorySchemaItem, targetAtomicHistorySchemaItem]),\n  ),\n});\n\nexport default atomicHistorySchema;\n","import type { Schema, ZodTypeDef } from 'zod';\nimport { z } from 'zod'\n\nexport default function getValidArrayItemsSchema<DataOut, Def extends ZodTypeDef, DataIn> (\n  elemSchema: Schema<DataOut, Def, DataIn>,\n) {\n  return z.array(z.unknown()).transform((items) => {\n    const validItems: Array<z.infer<typeof elemSchema>> = [];\n    for (let i = 0; i < items.length; i++) {\n      const item = items[i];\n      const parsedItem = elemSchema.safeParse(item);\n      if (parsedItem.success) {\n        validItems.push(parsedItem.data);\n      } else {\n        console.log(`Array item with index ${i} is invalid. Error: ${parsedItem.error.message}. Data: ${JSON.stringify(item)}.`)\n      }\n    }\n    return validItems;\n  })\n}\n","import { z } from 'zod';\n\nconst checkRedeemOrderSchema = z.object({\n  redeemTxHash: z.string(),\n  secret: z.string().nullable(),\n  secretHash: z.string(),\n});\n\nexport default checkRedeemOrderSchema;\n","import { z } from 'zod';\nimport { HistoryTransactionStatus } from '../../../types.js';\n\nconst historySchema = z.array(z.object(\n  {\n    amount: z.string(),\n    amountNumber: z.string(),\n    asset: z.string(),\n    assetAddress: z.string(),\n    contractBalance: z.string().nullable().optional(),\n    createdAt: z.number(),\n    transactionHash: z.string(),\n    type: z.enum(['deposit', 'withdrawal']),\n    user: z.string(),\n    walletBalance: z.string().nullable().optional(),\n  },\n)).transform((response) => {\n  return response.map((item) => {\n    const {\n      type, createdAt, transactionHash, user,\n    } = item;\n    return {\n      type,\n      date: createdAt * 1000,\n      token: item.asset,\n      amount: item.amountNumber,\n      status: HistoryTransactionStatus.DONE,\n      transactionHash,\n      user,\n    };\n  });\n});\n\nexport default historySchema;\n","import { z } from 'zod';\n\nconst IDOSchema = z.object({\n  amount: z.number().or(z.null()),\n  amountInWei: z.number().or(z.null()),\n  amountInUSDT: z.number().or(z.null()),\n  address: z.string(),\n});\n\nexport default IDOSchema;\n","import { z } from 'zod';\nimport { makePartial } from '../../../utils';\n\nconst internalFeeAssetSchema = z.object({\n  type: z.enum(['percent', 'plain']),\n  value: z.number(),\n  asset: z.string(),\n});\n\nconst infoSchema = z.object({\n  chainId: z.number(),\n  chainName: z.string(),\n  swapExecutorContractAddress: z.string(),\n  libValidatorContractAddress: z.string().optional(),\n  exchangeContractAddress: z.string(),\n  spvContractAddress: z.string(),\n  oracleContractAddress: z.string(),\n  matcherAddress: z.string(),\n  orderFeePercent: z.number(),\n  assetToAddress: z.record(z.string()).transform(makePartial),\n  assetToDecimals: z.record(z.number()).transform(makePartial),\n  assetToIcons: z.record(z.string()).transform(makePartial).optional(),\n  cexTokens: z.string().array(),\n  internalFeeAssets: internalFeeAssetSchema.array().optional(),\n});\n\nexport default infoSchema;\n","import { z } from 'zod';\nimport addressSchema from '../../../addressSchema.js';\nimport { makePartial } from '../../../utils/index.js';\n\nconst poolsConfigSchema = z.object({\n  WETHAddress: addressSchema.optional(),\n  factoryAddress: addressSchema,\n  governanceAddress: addressSchema.optional(),\n  routerAddress: addressSchema,\n  votingAddress: addressSchema.optional(),\n  factories: z.record(\n    z.string(),\n    addressSchema,\n  )\n    .transform(makePartial)\n    .optional(),\n  pools: z.record(\n    z.string(),\n    z.object({\n      lpTokenAddress: addressSchema,\n      minQty: z.number().optional(),\n      reverted: z.boolean().optional(),\n      rewardToken: z.string().nullable().optional(),\n      state: z.number().int().optional(),\n      rewardTokenDecimals: z.number().int().optional(),\n      stakingRewardFinish: z.number().optional(),\n      stakingRewardAddress: addressSchema,\n      vote_rewards_disabled: z.boolean().optional(),\n    }),\n  ).transform(makePartial),\n});\n\nexport default poolsConfigSchema;\n","import { ethers } from 'ethers';\nimport { z } from 'zod';\n\nconst addressSchema = z.string().refine(ethers.isAddress, (value) => ({\n  message: `Should be an address, got ${value}`,\n}));\n\nexport default addressSchema;\n","import { z } from 'zod';\n\nconst poolsInfoSchema = z.object({\n  governance: z.object({\n    apr: z.string(),\n    rewardRate: z.string(),\n    totalBalance: z.string(),\n  }),\n  totalRewardRatePerWeek: z.string(),\n  pools: z.record(\n    z.object({\n      currentAPR: z.string(),\n      isUser: z.boolean().optional(),\n      price: z.string(),\n      reserves: z.record(z.string()),\n      totalLiquidityInDollars: z.string(),\n      totalRewardRatePerWeek: z.string(),\n      totalStakedAmountInDollars: z.string(),\n      totalSupply: z.string(),\n      totalVoted: z.string(),\n      weight: z.string(),\n    }),\n  ),\n});\n\nexport default poolsInfoSchema;\n","import { z } from 'zod';\n\nexport default z.object({\n  amount: z.number(),\n  count: z.number(),\n});\n","import { z } from 'zod';\n\nconst poolsLpAndStakedSchema = z.record(\n  z.object({\n    unstakedLPBalance: z.string(),\n    stakedLPBalance: z.string(),\n  }),\n);\n\nexport default poolsLpAndStakedSchema;\n","import { z } from 'zod';\n\nconst userVotesSchema = z.record(\n  z.string(),\n);\n\nexport default userVotesSchema;\n","import { z } from 'zod';\n\nconst userEarnedSchema = z.record(\n  z.string(),\n);\n\nexport default userEarnedSchema;\n","import { z } from 'zod';\n\nconst poolsV3InfoSchema = z.object({\n  OrionV3Factory: z.string(),\n  OrionV3Pool: z.string(),\n  OrionV3NFTManager: z.string(),\n});\n\nexport default poolsV3InfoSchema;\n","import { z } from 'zod';\n\nconst pmmSchema = z.object({\n    orionPMMRouterContractAddress: z.string()\n});\n\nexport default pmmSchema","import { z } from 'zod';\nimport { makePartial } from '../../../utils/index.js';\n\nexport const pricesWithQuoteAssetSchema = z.object({\n  quoteAsset: z.string(),\n  quoteAssetAddress: z.string(),\n  prices: z.record(z.string()).transform(makePartial)\n});\n","import { z } from 'zod';\n\nexport const referralDataSchema = z.object({\n  referer: z.string().nullable(),\n  isReferral: z.boolean(),\n});\n","import { fetchWithValidation } from 'simple-typed-fetch';\nimport type { BasicAuthCredentials } from '../../types.js';\nimport { allTickersSchema, statisticsOverviewSchema, topPairsStatisticsSchema } from './schemas/index.js';\nimport candlesSchema from './schemas/candlesSchema.js';\nimport { PriceFeedWS } from './ws/index.js';\n\nclass PriceFeed {\n  private readonly apiUrl: string;\n\n  private readonly basicAuth?: BasicAuthCredentials | undefined;\n\n  readonly ws: PriceFeedWS;\n\n  get api() {\n    return this.apiUrl;\n  }\n\n  constructor(apiUrl: string, basicAuth?: BasicAuthCredentials) {\n    this.apiUrl = apiUrl;\n    this.ws = new PriceFeedWS(this.wsUrl);\n    this.basicAuth = basicAuth;\n\n    this.getCandles = this.getCandles.bind(this);\n    this.getStatisticsOverview = this.getStatisticsOverview.bind(this);\n    this.getTopPairStatistics = this.getTopPairStatistics.bind(this);\n    this.getAllTickers = this.getAllTickers.bind(this);\n  }\n\n  get basicAuthHeaders() {\n    if (this.basicAuth) {\n      return {\n        Authorization: `Basic ${btoa(`${this.basicAuth.username}:${this.basicAuth.password}`)}`,\n      };\n    }\n    return {};\n  }\n\n  getCandles = (\n    symbol: string,\n    timeStart: number,\n    timeEnd: number,\n    interval: '5m' | '30m' | '1h' | '1d',\n    exchange = 'all'\n  ) => {\n    const url = new URL(this.candlesUrl);\n    url.searchParams.append('symbol', symbol);\n    url.searchParams.append('timeStart', timeStart.toString());\n    url.searchParams.append('timeEnd', timeEnd.toString());\n    url.searchParams.append('interval', interval);\n    url.searchParams.append('exchange', exchange);\n\n    return fetchWithValidation(\n      url.toString(),\n      candlesSchema,\n      { headers: this.basicAuthHeaders }\n    );\n  };\n\n  getStatisticsOverview = (exchange: string | 'ALL' = 'ALL') => {\n    const url = new URL(`${this.statisticsUrl}/overview`);\n    url.searchParams.append('exchange', exchange);\n\n    return fetchWithValidation(\n      url.toString(),\n      statisticsOverviewSchema,\n      { headers: this.basicAuthHeaders }\n    );\n  }\n\n  getTopPairStatistics = (exchange: string | 'ALL' = 'ALL') => {\n    const url = new URL(`${this.statisticsUrl}/top-pairs`);\n    url.searchParams.append('exchange', exchange);\n\n    return fetchWithValidation(\n      url.toString(),\n      topPairsStatisticsSchema,\n      { headers: this.basicAuthHeaders }\n    );\n  }\n\n  getAllTickers = () => {\n    return fetchWithValidation(\n      `${this.tickersUrl}/all`,\n      allTickersSchema,\n      { headers: this.basicAuthHeaders }\n    );\n  }\n\n  get wsUrl() {\n    const url = new URL(this.apiUrl);\n    const wsProtocol = url.protocol === 'https:' ? 'wss' : 'ws';\n    return `${wsProtocol}://${url.host + url.pathname}/api/v1`;\n  }\n\n  get candlesUrl() {\n    return `${this.apiUrl}/api/v1/candles`;\n  }\n\n  get statisticsUrl() {\n    return `${this.apiUrl}/api/v1/statistics`;\n  }\n\n  get tickersUrl() {\n    return `${this.apiUrl}/api/v1/ticker`;\n  }\n}\n\nexport * as schemas from './schemas/index.js';\nexport * as ws from './ws/index.js';\nexport { PriceFeed };\n","export { default as candlesSchema } from './candlesSchema.js';\nexport {\n  statisticsOverviewSchema,\n  topPairsStatisticsSchema,\n} from './statisticsSchema.js';\nexport { allTickersSchema } from './allTickersSchema.js';\n","import { z } from 'zod';\n\nconst candlesSchema = z.object({\n  candles: z.array(z.object({\n    close: z.string(),\n    high: z.string(),\n    low: z.string(),\n    open: z.string(),\n    time: z.number(),\n    timeEnd: z.number(),\n    timeStart: z.number(),\n    volume: z.string(),\n  })),\n  timeStart: z.number(),\n  timeEnd: z.number(),\n});\n\nexport default candlesSchema;\n","import { z } from 'zod';\n\nconst statisticsOverview = z.object({\n  volume24h: z.number(),\n  volume7d: z.number(),\n});\n\nexport const statisticsOverviewSchema = z.object({\n  time: z.number(),\n  statisticsOverview,\n});\n\nexport const topPairsStatisticsSchema = z.object({\n  time: z.number(),\n  topPairs: z.array(\n    z.object({\n      assetPair: z.string(),\n      statisticsOverview,\n    }),\n  ),\n});\n","import { z } from 'zod'\n\nconst tickerSchema = z.object({\n  pair: z.string(),\n  volume24: z.number(),\n  change24: z.number(),\n  lastPrice: z.number(),\n});\n\nexport const allTickersSchema = tickerSchema.array();\n","import type WebSocket from 'ws';\nimport PriceFeedSubscription, { type SubscriptionType, type Subscription } from './PriceFeedSubscription.js';\nimport type { BasicAuthCredentials } from '../../../types.js';\n\nexport * as schemas from './schemas/index.js';\nexport class PriceFeedWS {\n  private subscriptions: Partial<{\n    [K in SubscriptionType]: Partial<\n      Record<\n        string,\n        PriceFeedSubscription<K>\n      >\n    >;\n  }> = {};\n\n  private readonly url: string;\n\n  readonly basicAuth?: BasicAuthCredentials | undefined;\n\n  constructor(url: string, basicAuth?: BasicAuthCredentials) {\n    this.url = url;\n    this.basicAuth = basicAuth;\n  }\n\n  get api() {\n    const url = new URL(this.url);\n\n    if (this.basicAuth) {\n      url.username = this.basicAuth.username;\n      url.password = this.basicAuth.password;\n    }\n\n    return url.toString();\n  }\n\n  subscribe<S extends SubscriptionType>(\n    type: S,\n    params: Subscription<S>,\n    onOpen?: (event: WebSocket.Event) => void,\n  ) {\n    const sub = new PriceFeedSubscription(\n      type,\n      this.api,\n      params,\n      onOpen\n    );\n    this.subscriptions = {\n      ...this.subscriptions,\n      [type]: {\n        ...this.subscriptions[type],\n        [sub.id]: sub,\n      },\n    };\n    return {\n      type: sub.type,\n      id: sub.id,\n      unsubscribe: () => { this.unsubscribe(sub.type, sub.id); },\n    };\n  }\n\n  unsubscribe(subType: SubscriptionType, subId: string) {\n    this.subscriptions[subType]?.[subId]?.kill();\n    delete this.subscriptions[subType]?.[subId];\n  }\n}\n","import WebSocket from 'isomorphic-ws';\nimport { z } from 'zod';\nimport { v4 as uuidv4 } from 'uuid';\nimport priceFeedSubscriptions from './priceFeedSubscriptions.js';\nimport { tickerInfoSchema, candleSchema, cexPricesSchema } from './schemas/index.js';\nimport priceSchema from './schemas/priceSchema.js';\nimport type { Json } from '../../../types.js';\nimport allTickersSchema from './schemas/allTickersSchema.js';\n\nexport const subscriptions = {\n  [priceFeedSubscriptions.ALL_TICKERS]: {\n    schema: allTickersSchema,\n    payload: false as const,\n  },\n  [priceFeedSubscriptions.TICKER]: {\n    schema: z.tuple([z.number(), tickerInfoSchema]).transform(([, tickerInfo]) => tickerInfo),\n    payload: true as const,\n  },\n  [priceFeedSubscriptions.LAST_PRICE]: {\n    schema: priceSchema,\n    payload: true as const,\n  },\n  [priceFeedSubscriptions.CANDLE]: {\n    schema: candleSchema,\n    payload: true as const,\n  },\n  [priceFeedSubscriptions.CEX]: {\n    schema: cexPricesSchema,\n    payload: false as const,\n  },\n};\n\nexport type SubscriptionType = keyof typeof subscriptions;\nexport type Subscription<\n  T extends SubscriptionType,\n  Schema = z.infer<typeof subscriptions[T]['schema']>\n> = typeof subscriptions[T] extends { payload: true }\n  ? {\n    callback: (data: Schema) => void\n    errorCallback?: (error: Error) => void\n    payload: string\n  } : {\n    callback: (data: Schema) => void\n    errorCallback?: (error: Error) => void\n  }\n\nexport default class PriceFeedSubscription<T extends SubscriptionType = SubscriptionType> {\n  public readonly id: string;\n\n  private readonly callback: Subscription<T>['callback'];\n\n  private readonly errorCallback?: Subscription<T>['errorCallback'];\n\n  private readonly payload?: string;\n\n  private ws?: WebSocket;\n\n  private readonly url: string;\n\n  private heartbeatInterval?: ReturnType<typeof setInterval>;\n\n  readonly type: T;\n\n  // is used to make sure we do not need to renew ws subscription\n  // we can not be sure that onclose event will recieve our code when we do `ws.close(4000)`\n  // since sometimes it can be replaced with system one.\n  // https://stackoverflow.com/questions/19304157/getting-the-reason-why-websockets-closed-with-close-code-1006\n  private isClosedIntentionally = false;\n\n  private readonly onOpen: ((event: WebSocket.Event) => void) | undefined;\n\n  constructor(\n    type: T,\n    url: string,\n    params: Subscription<T>,\n    onOpen?: (event: WebSocket.Event) => void,\n  ) {\n    this.id = uuidv4();\n    this.url = url;\n    this.type = type;\n    if ('payload' in params) {\n      this.payload = params.payload;\n    }\n    this.callback = params.callback;\n    this.errorCallback = params.errorCallback;\n    this.onOpen = onOpen;\n    this.init();\n  }\n\n  private send(jsonObject: Json) {\n    if (this.ws?.readyState === WebSocket.OPEN) {\n      const jsonData = JSON.stringify(jsonObject);\n      this.ws.send(jsonData);\n    } else {\n      setTimeout(() => {\n        this.send(jsonObject);\n      }, 50);\n    }\n  }\n\n  init() {\n    this.isClosedIntentionally = false;\n\n    const { payload, url, type } = this;\n    this.ws = new WebSocket(`${url}/${type}${payload !== undefined ? `/${payload.toString()}` : ''}`);\n\n    if (this.onOpen !== undefined) {\n      this.ws.onopen = this.onOpen;\n    }\n    this.ws.onmessage = (e) => {\n      const { data } = e;\n\n      // Convert data to string\n\n      let dataString: string;\n      if (typeof data === 'string') {\n        dataString = data;\n      } else if (Buffer.isBuffer(data)) {\n        dataString = data.toString();\n      } else if (Array.isArray(data)) {\n        dataString = Buffer.concat(data).toString();\n      } else { // ArrayBuffer\n        dataString = Buffer.from(data).toString();\n      }\n\n      if (dataString === 'pong') return;\n      const json: unknown = JSON.parse(dataString);\n      const subscription = subscriptions[type];\n      const parseResult = subscription.schema.safeParse(json);\n      if (!parseResult.success) {\n        const errorsMessage = parseResult.error.errors.map((error) => `[${error.path.join('.')}] ${error.message}`).join(', ');\n        const error = new Error(`Can't recognize PriceFeed \"${type}\" subscription message \"${dataString}\": ${errorsMessage}`);\n        if (this.errorCallback !== undefined) {\n          this.errorCallback(error);\n        } else throw error;\n      } else {\n        this.callback(parseResult.data);\n      }\n    };\n\n    this.ws.onclose = () => {\n      if (this.heartbeatInterval) clearInterval(this.heartbeatInterval);\n      if (!this.isClosedIntentionally) this.init();\n    };\n\n    this.heartbeatInterval = setInterval(() => {\n      this.send('heartbeat');\n    }, 15000);\n  }\n\n  kill() {\n    this.isClosedIntentionally = true;\n    this.ws?.close();\n  }\n}\n","const priceFeedSubscriptions = {\n  TICKER: 'ticker',\n  ALL_TICKERS: 'allTickers',\n  LAST_PRICE: 'lastPrice',\n  CANDLE: 'candle',\n  CEX: 'cexPrices'\n} as const;\n\nexport default priceFeedSubscriptions;\n","export { default as tickerInfoSchema } from './tickerInfoSchema.js';\nexport { default as candleSchema } from './candleSchema.js';\nexport { default as priceSchema } from './priceSchema.js';\nexport { default as allTickersSchema } from './allTickersSchema.js';\nexport { default as cexPricesSchema } from './cexPricesSchema.js';\n","import { z } from 'zod';\n\nconst tickerInfoSchema = z.tuple([\n  z.string(), // pair name\n  z.string(), // lastPrice\n  z.string(), // openPrice\n  z.string(), // high price\n  z.string(), // low price\n  z.string(), // volume 24h\n]).transform(([pairName, lastPrice, openPrice, highPrice, lowPrice, volume24h]) => ({\n  pairName,\n  lastPrice,\n  openPrice,\n  highPrice,\n  lowPrice,\n  volume24h,\n}));\n\nexport default tickerInfoSchema;\n","import { z } from 'zod';\n\nconst candleSchema = z\n  .tuple([\n    z.string(), // interval [FIVE, FIFTEEN, THIRTY, HOUR, HOUR4, DAY, WEEK]\n    z.string(), // pair [\"btc-usdt\"]\n    z.number(), // timeStart [timestamp]\n    z.number(), // timeEnd [timestamp]\n    z.string(), // close\n    z.string(), // open\n    z.string(), // high\n    z.string(), // low\n    z.string(), // volume\n  ])\n  .transform(\n    ([interval, pair, timeStart, timeEnd, close, open, high, low, volume]) => ({\n      interval,\n      pair,\n      timeStart,\n      timeEnd,\n      close,\n      open,\n      high,\n      low,\n      volume,\n    }),\n  );\n\nexport default candleSchema;\n","import { z } from 'zod';\n\nconst priceSchema = z.tuple([\n  z.number(), // unix timestamp\n  z.string(), // pair\n  z.number(), // price\n]).transform(([, pair, price]) => ({ pair, price }));\n\nexport default priceSchema;\n","import { z } from 'zod';\nimport tickerInfoSchema from './tickerInfoSchema.js';\n\ntype TickerInfo = z.infer<typeof tickerInfoSchema>\n\nconst allTickersSchema = z.unknown().array()\n  .transform((tickers) => {\n    const data = [...tickers];\n    data.shift();\n    const parsedData = tickerInfoSchema.array().parse(data);\n    return parsedData.reduce<\n      Partial<\n        Record<\n          string,\n          TickerInfo\n        >\n      >\n    >((prev, pairData) => ({\n      ...prev,\n      [pairData.pairName]: pairData,\n    }), {});\n  });\n\nexport default allTickersSchema;\n","import { z } from 'zod';\n\nconst cexPriceTickerInfoSchema = z.tuple([\n  z.string(), // pair name\n  z.number(), // lastPrice\n]).transform(([pairName, lastPrice]) => ({\n  pairName:pairName.toUpperCase(),\n  lastPrice,\n}));\n\ntype CEXPriceTickerInfo = z.infer<typeof cexPriceTickerInfoSchema>\n\nconst cexPricesSchema = z.unknown().array()\n.transform((tickers) => {\n  const data = [...tickers];\n  data.shift();\n  const parsedData = cexPriceTickerInfoSchema.array().parse(data);\n  return parsedData.reduce<\n    Partial<\n      Record<\n        string,\n        CEXPriceTickerInfo\n      >\n    >\n  >((prev, pairData) => ({\n    ...prev,\n    [pairData.pairName]: pairData,\n  }), {});\n});\n\nexport default cexPricesSchema;","import { BigNumber } from 'bignumber.js';\nimport { ethers } from 'ethers';\nimport { Exchange__factory } from '@orionprotocol/contracts/lib/ethers-v6/index.js';\nimport getBalances from '../../utils/getBalances.js';\nimport BalanceGuard from '../../BalanceGuard.js';\nimport type Unit from '../index.js';\nimport {\n  DEPOSIT_ERC20_GAS_LIMIT, DEPOSIT_ETH_GAS_LIMIT, INTERNAL_PROTOCOL_PRECISION, NATIVE_CURRENCY_PRECISION,\n} from '../../constants/index.js';\nimport { denormalizeNumber, normalizeNumber } from '../../utils/index.js';\nimport getNativeCryptocurrencyName from '../../utils/getNativeCryptocurrencyName.js';\nimport { simpleFetch } from 'simple-typed-fetch';\n\nexport type DepositParams = {\n  asset: string\n  amount: BigNumber.Value\n  signer: ethers.Signer\n  unit: Unit\n}\n\nexport default async function deposit({\n  asset,\n  amount,\n  signer,\n  unit,\n}: DepositParams) {\n  if (asset === '') throw new Error('Asset can not be empty');\n\n  const amountBN = new BigNumber(amount);\n  if (amountBN.isNaN()) throw new Error(`Amount '${amountBN.toString()}' is not a number`);\n  if (amountBN.lte(0)) throw new Error(`Amount '${amountBN.toString()}' should be greater than 0`);\n\n  const walletAddress = await signer.getAddress();\n\n  const {\n    blockchainService, aggregator, provider, chainId,\n  } = unit;\n  const {\n    exchangeContractAddress,\n    assetToAddress,\n  } = await simpleFetch(blockchainService.getInfo)();\n\n  const nativeCryptocurrency = getNativeCryptocurrencyName(assetToAddress);\n\n  const exchangeContract = Exchange__factory.connect(exchangeContractAddress, provider);\n  const gasPriceWei = await simpleFetch(blockchainService.getGasPriceWei)();\n\n  const assetAddress = assetToAddress[asset];\n  if (assetAddress === undefined) throw new Error(`Asset '${asset}' not found`);\n\n  const balances = await getBalances(\n    {\n      [asset]: assetAddress,\n      [nativeCryptocurrency]: ethers.ZeroAddress,\n    },\n    aggregator,\n    walletAddress,\n    exchangeContract,\n    provider,\n  );\n\n  const balanceGuard = new BalanceGuard(\n    balances,\n    {\n      name: nativeCryptocurrency,\n      address: ethers.ZeroAddress,\n    },\n    provider,\n    signer,\n  );\n\n  balanceGuard.registerRequirement({\n    reason: 'Amount',\n    asset: {\n      name: asset,\n      address: assetAddress,\n    },\n    amount: amountBN.toString(),\n    spenderAddress: exchangeContractAddress,\n    sources: ['wallet'],\n  });\n\n  let unsignedTx: ethers.TransactionLike;\n  if (asset === nativeCryptocurrency) {\n    unsignedTx = await exchangeContract.deposit.populateTransaction();\n    unsignedTx.value = normalizeNumber(amount, NATIVE_CURRENCY_PRECISION, BigNumber.ROUND_CEIL);\n    unsignedTx.gasLimit = BigInt(DEPOSIT_ETH_GAS_LIMIT);\n  } else {\n    unsignedTx = await exchangeContract.depositAsset.populateTransaction(\n      assetAddress,\n      normalizeNumber(amount, INTERNAL_PROTOCOL_PRECISION, BigNumber.ROUND_CEIL),\n    );\n    unsignedTx.gasLimit = BigInt(DEPOSIT_ERC20_GAS_LIMIT);\n  }\n\n  const transactionCost = BigInt(unsignedTx.gasLimit) * BigInt(gasPriceWei);\n  const denormalizedTransactionCost = denormalizeNumber(transactionCost, BigInt(NATIVE_CURRENCY_PRECISION));\n\n  balanceGuard.registerRequirement({\n    reason: 'Network fee',\n    asset: {\n      name: nativeCryptocurrency,\n      address: ethers.ZeroAddress,\n    },\n    amount: denormalizedTransactionCost.toString(),\n    sources: ['wallet'],\n  });\n\n  unsignedTx.chainId = parseInt(chainId, 10);\n  unsignedTx.gasPrice = BigInt(gasPriceWei);\n  unsignedTx.from = walletAddress;\n\n  await balanceGuard.check(true);\n\n  const nonce = await provider.getTransactionCount(walletAddress, 'pending');\n  unsignedTx.nonce = nonce;\n\n  const signedTx = await signer.signTransaction(unsignedTx);\n  try {\n    const txResponse = await provider.broadcastTransaction(signedTx);\n    console.log(`Deposit tx sent: ${txResponse.hash}. Waiting for confirmation...`);\n    const txReceipt = await txResponse.wait();\n    if (txReceipt?.status !== undefined) {\n      console.log('Deposit tx confirmed');\n    } else {\n      console.log('Deposit tx failed');\n    }\n  } catch (e) {\n    if (!(e instanceof Error)) throw new Error('e is not an Error');\n    console.error(`Deposit tx failed: ${e.message}`, {\n      unsignedTx,\n    });\n  }\n}\n","import { ERC20__factory, Exchange__factory, type Exchange } from \"@orionprotocol/contracts/lib/ethers-v6/index.js\";\nimport type { BigNumber } from \"bignumber.js\";\nimport { ZeroAddress, ethers } from \"ethers\";\nimport { INTERNAL_PROTOCOL_PRECISION, NATIVE_CURRENCY_PRECISION } from \"../constants/index.js\";\nimport type { Aggregator } from \"../services/Aggregator/index.js\";\nimport denormalizeNumber from \"./denormalizeNumber.js\";\nimport type { AddressLike } from \"ethers\";\nimport { addressLikeToString } from \"./addressLikeToString.js\";\n\nexport default async function getBalance(\n  aggregator: Aggregator,\n  assetName: string,\n  assetAddress: string,\n  walletAddress: string,\n  exchangeContract: Exchange,\n  provider: ethers.Provider\n) {\n  const assetIsNativeCryptocurrency = assetAddress === ethers.ZeroAddress;\n\n  let assetWalletBalance: bigint | undefined;\n\n  let denormalizedAssetInWalletBalance: BigNumber | undefined;\n\n  if (!assetIsNativeCryptocurrency) {\n    const assetContract = ERC20__factory.connect(assetAddress, provider);\n    const assetDecimals = await assetContract.decimals();\n    assetWalletBalance = await assetContract.balanceOf(walletAddress);\n\n    denormalizedAssetInWalletBalance = denormalizeNumber(assetWalletBalance, assetDecimals);\n  } else {\n    assetWalletBalance = await provider.getBalance(walletAddress);\n    denormalizedAssetInWalletBalance = denormalizeNumber(assetWalletBalance, BigInt(NATIVE_CURRENCY_PRECISION));\n  }\n  const assetContractBalance = await exchangeContract.getBalance(assetAddress, walletAddress);\n  const denormalizedAssetInContractBalance = denormalizeNumber(\n    assetContractBalance,\n    BigInt(INTERNAL_PROTOCOL_PRECISION)\n  );\n  const denormalizedAssetLockedBalanceResult = await aggregator.getLockedBalance(walletAddress, assetName);\n  if (denormalizedAssetLockedBalanceResult.isErr()) {\n    throw new Error(denormalizedAssetLockedBalanceResult.error.message);\n  }\n\n  return {\n    exchange: denormalizedAssetInContractBalance.minus(denormalizedAssetLockedBalanceResult.value.data[assetName] ?? 0),\n    wallet: denormalizedAssetInWalletBalance,\n  };\n}\n\nasync function getExchangeBalanceERC20(\n  tokenAddress: AddressLike,\n  walletAddress: AddressLike,\n  exchangeAddress: AddressLike,\n  provider: ethers.Provider,\n  convertToNativeDecimals = true\n) {\n  walletAddress = await addressLikeToString(walletAddress);\n  exchangeAddress = await addressLikeToString(exchangeAddress);\n  tokenAddress = await addressLikeToString(tokenAddress);\n\n  const exchange = <Exchange>Exchange__factory.connect(exchangeAddress, provider);\n  const exchangeBalance = await exchange.getBalance(tokenAddress, walletAddress);\n\n  if (convertToNativeDecimals) {\n    const tokenContract = ERC20__factory.connect(tokenAddress, provider);\n    const decimals = await tokenContract.decimals();\n    const convertedExchangeBalance = (exchangeBalance * BigInt(10) ** decimals) / BigInt(10) ** 8n;\n    return convertedExchangeBalance;\n  }\n\n  return exchangeBalance;\n}\n\nasync function getExchangeBalanceNative(\n  walletAddress: AddressLike,\n  exchangeAddress: AddressLike,\n  provider: ethers.Provider,\n  convertToNativeDecimals = true\n) {\n  walletAddress = await addressLikeToString(walletAddress);\n  exchangeAddress = await addressLikeToString(exchangeAddress);\n  const exchange = <Exchange>Exchange__factory.connect(exchangeAddress, provider);\n  const exchangeBalance = await exchange.getBalance(ZeroAddress, walletAddress);\n\n  if (convertToNativeDecimals) {\n    const convertedExchangeBalance = (exchangeBalance * BigInt(10) ** 18n) / BigInt(10) ** 8n;\n    return convertedExchangeBalance;\n  }\n\n  return exchangeBalance;\n}\n\nexport async function getExchangeBalance(\n  tokenAddress: AddressLike,\n  walletAddress: AddressLike,\n  exchangeAddress: AddressLike,\n  provider: ethers.Provider,\n  convertToNativeDecimals = true\n) {\n  walletAddress = await addressLikeToString(walletAddress);\n  tokenAddress = await addressLikeToString(tokenAddress);\n\n  if (typeof tokenAddress === \"string\" && tokenAddress === ZeroAddress) {\n    return getExchangeBalanceNative(walletAddress, exchangeAddress, provider, convertToNativeDecimals);\n  } else {\n    return getExchangeBalanceERC20(tokenAddress, walletAddress, exchangeAddress, provider, convertToNativeDecimals);\n  }\n}\n\nexport async function getExchangeAllowance(\n  tokenAddress: AddressLike,\n  walletAddress: AddressLike,\n  exchangeAddress: AddressLike,\n  provider: ethers.Provider\n) {\n  if (typeof tokenAddress === \"string\" && tokenAddress === ZeroAddress) {\n    return 0n;\n  } else {\n    walletAddress = await addressLikeToString(walletAddress);\n    tokenAddress = await addressLikeToString(tokenAddress);\n\n    const tokenContract = ERC20__factory.connect(tokenAddress, provider);\n    let allowance = await tokenContract.allowance(walletAddress, exchangeAddress);\n\n    return allowance;\n  }\n}\n\nasync function getWalletBalanceERC20(\n  tokenAddress: AddressLike,\n  walletAddress: AddressLike,\n  provider: ethers.Provider,\n  convertToExchangeDecimals = false\n) {\n  walletAddress = await addressLikeToString(walletAddress);\n  tokenAddress = await addressLikeToString(tokenAddress);\n\n  const tokenContract = ERC20__factory.connect(tokenAddress, provider);\n  let walletBalance = await tokenContract.balanceOf(walletAddress);\n\n  if (convertToExchangeDecimals) {\n    const tokenContract = ERC20__factory.connect(tokenAddress, provider);\n    const decimals = await tokenContract.decimals();\n    const convertedNativeBalance = (walletBalance * BigInt(10) ** 8n) / BigInt(10) ** decimals;\n    return convertedNativeBalance;\n  }\n  return walletBalance;\n}\n\nasync function getWalletBalanceNative(\n  walletAddress: AddressLike,\n  provider: ethers.Provider,\n  convertToExchangeDecimals = false\n) {\n  walletAddress = await addressLikeToString(walletAddress);\n  const nativeBalance = await provider.getBalance(walletAddress);\n\n  if (convertToExchangeDecimals) {\n    const convertedNativeBalance = (nativeBalance * BigInt(10) ** 8n) / BigInt(10) ** 18n;\n    return convertedNativeBalance;\n  }\n\n  return nativeBalance;\n}\n\nexport async function getWalletBalance(\n  tokenAddress: AddressLike,\n  walletAddress: AddressLike,\n  provider: ethers.Provider,\n  convertToExchangeDecimals = false\n) {\n  if (typeof tokenAddress === \"string\" && tokenAddress === ZeroAddress) {\n    return getWalletBalanceNative(walletAddress, provider, convertToExchangeDecimals);\n  } else {\n    return getWalletBalanceERC20(tokenAddress, walletAddress, provider, convertToExchangeDecimals);\n  }\n}\n\nexport async function getTotalBalance(\n  tokenAddress: AddressLike,\n  walletAddress: AddressLike,\n  exchangeAddress: AddressLike,\n  provider: ethers.Provider,\n  convertToNativeDecimals = true\n) {\n  const walletBalance = await getWalletBalance(tokenAddress, walletAddress, provider, !convertToNativeDecimals);\n  const exchangeBalance = await getExchangeBalance(\n    tokenAddress,\n    walletAddress,\n    exchangeAddress,\n    provider,\n    convertToNativeDecimals\n  );\n  return {\n    walletBalance,\n    exchangeBalance,\n    totalBalance: walletBalance + exchangeBalance\n  }\n}\n","import type { AddressLike } from \"ethers\";\n\nexport async function addressLikeToString(address: AddressLike): Promise<string> {\n  address = await address\n  if (typeof address !== 'string') {\n    address = await address.getAddress()\n  }\n  return address.toLowerCase()\n}","import type { Exchange } from '@orionprotocol/contracts/lib/ethers-v6/index.js';\nimport type { BigNumber } from 'bignumber.js';\nimport type { ethers } from 'ethers';\nimport type { Aggregator } from '../services/Aggregator/index.js';\nimport getBalance from './getBalance.js';\n\nexport default async (\n  balancesRequired: Partial<Record<string, string>>,\n  aggregator: Aggregator,\n  walletAddress: string,\n  exchangeContract: Exchange,\n  provider: ethers.Provider,\n) => {\n  const balances = await Promise.all(\n    Object.entries(balancesRequired)\n      .map(async ([assetName, assetAddress]) => {\n        if (assetAddress === undefined) throw new Error(`Asset address of ${assetName} not found`);\n        const balance = await getBalance(\n          aggregator,\n          assetName,\n          assetAddress,\n          walletAddress,\n          exchangeContract,\n          provider,\n        );\n        return {\n          assetName,\n          amount: balance,\n        };\n      }),\n  );\n\n  return balances.reduce<Partial<Record<string, {\n    exchange: BigNumber\n    wallet: BigNumber\n  }>>>((prev, curr) => ({\n    ...prev,\n    [curr.assetName]: curr.amount,\n  }), {});\n};\n","import { BigNumber } from 'bignumber.js';\nimport { ethers } from 'ethers';\nimport clone from 'just-clone';\nimport { ERC20__factory } from '@orionprotocol/contracts/lib/ethers-v6/index.js';\nimport { APPROVE_ERC20_GAS_LIMIT, NATIVE_CURRENCY_PRECISION } from './constants/index.js';\nimport type {\n  AggregatedBalanceRequirement, ApproveFix, Asset, BalanceIssue, BalanceRequirement, Source,\n} from './types.js';\nimport { denormalizeNumber } from './utils/index.js';\nimport arrayEquals from './utils/arrayEquals.js';\n\n// BalanceGuard helps to check if there is enough balance to perform a swap\n// Also it can fix some balance issues (e.g. approve tokens)\nexport default class BalanceGuard {\n  private readonly balances: Partial<\n    Record<\n      string,\n        Record<\n          'exchange' | 'wallet',\n          BigNumber\n        >\n    >\n  >;\n\n  public readonly requirements: BalanceRequirement[] = [];\n\n  private readonly nativeCryptocurrency: Asset;\n\n  private readonly provider: ethers.Provider;\n\n  private readonly signer: ethers.Signer;\n\n  private readonly logger?: ((message: string) => void) | undefined\n\n  constructor(\n    balances: Partial<Record<string, Record<'exchange' | 'wallet', BigNumber>>>,\n    nativeCryptocurrency: Asset,\n    provider: ethers.Provider,\n    signer: ethers.Signer,\n    logger?: (message: string) => void,\n  ) {\n    this.balances = balances;\n    this.nativeCryptocurrency = nativeCryptocurrency;\n    this.provider = provider;\n    this.signer = signer;\n    this.logger = logger;\n  }\n\n  registerRequirement(expense: BalanceRequirement) {\n    this.requirements.push(expense);\n  }\n\n  // Used for case feeAsset === assetOut\n  setExtraBalance(assetName: string, amount: BigNumber.Value, source: Source) {\n    const assetBalance = this.balances[assetName];\n    if (!assetBalance) throw Error(`Can't set extra balance. Asset ${assetName} not found`);\n    assetBalance[source] = assetBalance[source].plus(amount);\n  }\n\n  // Reset is approve some token to zero\n  // This operation may be required by some tokens, e.g. USDT\n  private async checkResetRequired(\n    assetAddress: string,\n    spenderAddress: string,\n  ) {\n    const walletAddress = await this.signer.getAddress();\n    const tokenContract = ERC20__factory\n      .connect(assetAddress, this.provider);\n    const unsignedTx = await tokenContract.approve\n      .populateTransaction(\n        spenderAddress,\n        ethers.MaxUint256,\n      );\n    unsignedTx.from = walletAddress;\n    let resetRequired = false;\n    try {\n      await this.provider.estimateGas(unsignedTx);\n    } catch {\n      resetRequired = true;\n    }\n    return resetRequired;\n  }\n\n  // By asset + sources + spender\n  static aggregateBalanceRequirements(requirements: BalanceRequirement[]) {\n    return requirements\n      .reduce<AggregatedBalanceRequirement[]>((prev, curr) => {\n        const aggregatedBalanceRequirement = prev.find(\n          (item) => item.asset.address === curr.asset.address &&\n            arrayEquals(item.sources, curr.sources) &&\n            item.spenderAddress === curr.spenderAddress,\n        );\n\n        if (aggregatedBalanceRequirement) {\n          aggregatedBalanceRequirement.items = {\n            ...aggregatedBalanceRequirement.items,\n            [curr.reason]: curr.amount,\n          };\n          return prev;\n        }\n        return [\n          ...prev,\n          {\n            asset: curr.asset,\n            sources: curr.sources,\n            spenderAddress: curr.spenderAddress,\n            items: {\n              [curr.reason]: curr.amount,\n            },\n          },\n\n        ];\n      }, []);\n  }\n\n  // This method can fix some balance issues (e.g. approve tokens)\n  private readonly fixAllAutofixableBalanceIssues = async (\n    balanceIssues: BalanceIssue[],\n  ) => {\n    const fixBalanceIssue = async (issue: BalanceIssue) => {\n      const tokenContract = ERC20__factory.connect(issue.asset.address, this.provider);\n      const approve = async ({ spenderAddress, targetAmount }: ApproveFix) => {\n        const bnTargetAmount = new BigNumber(targetAmount);\n        const unsignedApproveTx = await tokenContract\n          .approve.populateTransaction(\n            spenderAddress,\n            bnTargetAmount.isZero()\n              ? '0' // Reset\n              : ethers.MaxUint256, // Infinite approve\n          );\n\n        const walletAddress = await this.signer.getAddress();\n        const nonce = await this.provider.getTransactionCount(walletAddress, 'pending');\n        const { gasPrice, maxFeePerGas } = await this.provider.getFeeData();\n        const network = await this.provider.getNetwork();\n\n        if (gasPrice !== null && maxFeePerGas !== null) {\n          unsignedApproveTx.gasPrice = gasPrice;\n          unsignedApproveTx.maxFeePerGas = maxFeePerGas;\n        }\n        unsignedApproveTx.chainId = network.chainId;\n        unsignedApproveTx.nonce = nonce;\n        unsignedApproveTx.from = walletAddress;\n        const gasLimit = await this.provider.estimateGas(unsignedApproveTx);\n        unsignedApproveTx.gasLimit = gasLimit;\n\n        this.logger?.('Approve transaction signing...');\n        const signedTx = await this.signer.signTransaction(unsignedApproveTx);\n        const txResponse = await this.provider.broadcastTransaction(signedTx);\n        this.logger?.(`${issue.asset.name} approve transaction sent ${txResponse.hash}. Waiting for confirmation...`);\n        await txResponse.wait();\n        this.logger?.(`${issue.asset.name} approve transaction confirmed.`);\n      };\n      await issue.fixes?.reduce(async (promise, item) => {\n        await promise;\n        if (item.type === 'byApprove') { await approve(item); return; }\n        await promise;\n      }, Promise.resolve());\n    };\n\n    const autofixableBalanceIssues = balanceIssues.filter((balanceIssue) => balanceIssue.fixes);\n\n    await autofixableBalanceIssues.reduce(async (promise, item) => {\n      await promise;\n      await fixBalanceIssue(item);\n    }, Promise.resolve());\n\n    return balanceIssues.filter((item) => !autofixableBalanceIssues.includes(item));\n  };\n\n  // Check that all balance requirements are fulfilled\n  async check(fixAutofixable?: boolean) {\n    this.logger?.(`Balance requirements: ${this.requirements\n      .map((requirement) => `${requirement.amount} ${requirement.asset.name} ` +\n        `for '${requirement.reason}' ` +\n        `from [${requirement.sources.join(' + ')}]`)\n      .join(', ')}`);\n\n    const remainingBalances = clone(this.balances);\n    const aggregatedRequirements = BalanceGuard.aggregateBalanceRequirements(this.requirements);\n\n    // DO NOT IGNORE THIS COMMENT. THIS IS VERY IMPORTANT TO UNDERSTAND THIS CODE\n    // Balance absorption order is important!\n    // 1. Exchange-contract only\n    // 2. Exchange + wallet (can produce approves requirements)\n    // 3. Wallet balance (tokens) (can produce approves requirements)\n    // 4. Wallet balance: native cryptocurrency\n\n    const requiredApproves: AggregatedBalanceRequirement = {\n      asset: this.nativeCryptocurrency,\n      sources: ['wallet'],\n      items: {},\n    };\n\n    const balanceIssues: BalanceIssue[] = [];\n\n    const flattedAggregatedRequirements = Object\n      .values(aggregatedRequirements)\n      .flatMap((item) => item);\n\n    const exchangeOnlyAggregatedRequirements = aggregatedRequirements\n      .filter(({ sources }) => sources.length === 1 && sources[0] === 'exchange');\n\n    exchangeOnlyAggregatedRequirements.forEach(({ asset, items }) => {\n      const remainingBalance = remainingBalances[asset.name];\n      if (!remainingBalance) throw new Error(`No ${asset.name} balance`);\n      const itemsAmountSum = Object.values(items)\n        .reduce<BigNumber>((p, c) => (c !== undefined ? p.plus(c) : p), new BigNumber(0));\n\n      remainingBalance.exchange = remainingBalance.exchange.minus(itemsAmountSum);\n      if (remainingBalance.exchange.lt(0)) {\n        const lackAmount = remainingBalance.exchange.abs();\n        const exchangeBalance = this.balances[asset.name]?.exchange;\n\n        balanceIssues.push({\n          asset,\n          sources: ['exchange'],\n          message: `Not enough ${asset.name} on exchange balance. ` +\n            `Needed: ${itemsAmountSum.toString()}, available: ${(exchangeBalance ?? '[UNDEFINED]').toString()}. ` +\n            `You need to deposit at least ${lackAmount.toString()} ${asset.name} into exchange contract`,\n        });\n      }\n    });\n\n    const exchangePlusWalletAggregatedRequirements = aggregatedRequirements\n      .filter(({ sources }) => sources[0] === 'exchange' && sources[1] === 'wallet');\n\n    const walletAddress = await this.signer.getAddress();\n    // This requirements can be fulfilled by exchange + wallet\n    await Promise.all(exchangePlusWalletAggregatedRequirements\n      .map(async ({ asset, spenderAddress, items }) => {\n        const remainingBalance = remainingBalances[asset.name];\n        if (!remainingBalance) throw new Error(`No ${asset.name} balance`);\n        const itemsAmountSum = Object.values(items)\n          .reduce<BigNumber>((p, c) => (c !== undefined ? p.plus(c) : p), new BigNumber(0));\n\n        remainingBalance.exchange = remainingBalance.exchange.minus(itemsAmountSum);\n        if (remainingBalance.exchange.lt(0)) {\n          const lackAmount = remainingBalance.exchange.abs(); // e.g. -435.234234 to 434.234234\n\n          let denormalizedAllowance: BigNumber;\n          if (asset.address === ethers.ZeroAddress) {\n            denormalizedAllowance = remainingBalance.wallet;\n          } else {\n            if (spenderAddress === undefined) throw new Error(`Spender address is required for ${asset.name}`);\n            const tokenContract = ERC20__factory.connect(asset.address, this.provider);\n            const tokenDecimals = await tokenContract.decimals();\n            const tokenAllowance = await tokenContract.allowance(walletAddress, spenderAddress);\n            denormalizedAllowance = denormalizeNumber(tokenAllowance, tokenDecimals);\n          }\n\n          // Try to take lack amount from wallet\n          const approvedWalletBalance = BigNumber\n            .min(\n              remainingBalance.wallet,\n              denormalizedAllowance,\n            // For native cryptocurrency allowance is always just current balance\n            );\n          if (lackAmount.lte(approvedWalletBalance)) { // We can take lack amount from wallet\n            remainingBalance.wallet = remainingBalance.wallet.minus(lackAmount);\n          } else {\n          // We can't take lack amount from wallet. Is approve helpful?\n            const approveAvailable = remainingBalance.wallet.gt(approvedWalletBalance)\n              ? remainingBalance.wallet.minus(approvedWalletBalance)\n              : new BigNumber(0);\n            const approveIsHelpful = approveAvailable.gte(lackAmount);\n            const targetApprove = approvedWalletBalance.plus(lackAmount);\n\n            const exchangeBalance = this.balances[asset.name]?.exchange;\n            const available = exchangeBalance?.plus(approvedWalletBalance);\n\n            const issueMessage = `Not enough ${asset.name} on exchange + wallet balance. ` +\n                `Needed: ${itemsAmountSum.toString()}, available: ${(available ?? '[UNDEFINED]').toString()} ` +\n              `(exchange: ${(exchangeBalance ?? '[UNKNOWN]').toString()}, available (approved): ${approvedWalletBalance.toString()}).` +\n              ` ${approveIsHelpful\n                ? `You need approve at least ${lackAmount.toString()} ${asset.name}`\n                : 'Approve is not helpful'}`;\n            if (approveIsHelpful) {\n              if (spenderAddress === undefined) throw new Error(`Spender address is required for ${asset.name}`);\n              const resetRequired = await this.checkResetRequired(\n                asset.address,\n                spenderAddress,\n              );\n              const { gasPrice: gasPriceWei } = await this.provider.getFeeData();\n              const approveTransactionCost = BigInt(APPROVE_ERC20_GAS_LIMIT) * (gasPriceWei ?? 0n);\n              const denormalizedApproveTransactionCost = denormalizeNumber(\n                approveTransactionCost,\n                BigInt(NATIVE_CURRENCY_PRECISION)\n              );\n\n              requiredApproves.items = {\n                ...requiredApproves.items,\n                ...resetRequired && {\n                  [`Reset ${asset.name} from 'wallet' to ${spenderAddress}`]: denormalizedApproveTransactionCost.toString(),\n                },\n                [`Approve ${asset.name} from 'wallet' to ${spenderAddress}`]: denormalizedApproveTransactionCost.toString(),\n              };\n              balanceIssues.push({\n                asset,\n                sources: ['exchange', 'wallet'],\n                fixes: [\n                  ...resetRequired\n                    ? [{\n                      type: 'byApprove' as const,\n                      targetAmount: 0,\n                      spenderAddress,\n                    }]\n                    : [],\n                  {\n                    type: 'byApprove',\n                    targetAmount: targetApprove,\n                    spenderAddress,\n                  },\n                ],\n                message: issueMessage,\n              });\n            } else {\n              balanceIssues.push({\n                asset,\n                sources: ['exchange', 'wallet'],\n                message: issueMessage,\n              });\n            }\n          }\n        }\n      }));\n\n    const walletTokensAggregatedRequirements = flattedAggregatedRequirements\n      .filter(({ sources, asset }) => sources[0] === 'wallet' && asset.name !== this.nativeCryptocurrency.name);\n\n    // This requirements can be fulfilled by wallet\n    await Promise.all(walletTokensAggregatedRequirements\n      .map(async ({ asset, spenderAddress, items }) => {\n        const remainingBalance = remainingBalances[asset.name];\n        if (!remainingBalance) throw new Error(`No ${asset.name} balance`);\n        const itemsAmountSum = Object.values(items)\n          .reduce<BigNumber>((p, c) => (c !== undefined ? p.plus(c) : p), new BigNumber(0));\n\n        let denormalizedAllowance: BigNumber;\n        if (asset.address === ethers.ZeroAddress) {\n          denormalizedAllowance = remainingBalance.wallet;\n        } else {\n          if (spenderAddress === undefined) throw new Error(`Spender address is required for ${asset.name}`);\n          const tokenContract = ERC20__factory.connect(asset.address, this.provider);\n          const tokenDecimals = await tokenContract.decimals();\n          const tokenAllowance = await tokenContract.allowance(walletAddress, spenderAddress);\n          denormalizedAllowance = denormalizeNumber(tokenAllowance, tokenDecimals);\n        }\n\n        const approvedWalletBalance = BigNumber\n          .min(\n            remainingBalance.wallet,\n            denormalizedAllowance,\n          );\n        if (itemsAmountSum.lte(approvedWalletBalance)) { // Approved wallet balance is enough\n          remainingBalance.wallet = remainingBalance.wallet.minus(itemsAmountSum);\n        } else {\n        // We can't take lack amount from wallet. Is approve helpful?\n          const lackAmount = itemsAmountSum.minus(approvedWalletBalance).abs();\n          const approveAvailable = remainingBalance.wallet.gt(approvedWalletBalance)\n            ? remainingBalance.wallet.minus(approvedWalletBalance)\n            : new BigNumber(0);\n          const approveIsHelpful = approveAvailable.gte(lackAmount);\n          const targetApprove = approvedWalletBalance.plus(lackAmount);\n\n          const issueMessage = `Not enough ${asset.name} on wallet balance. ` +\n            `Needed: ${itemsAmountSum.toString()}, available (approved): ${approvedWalletBalance.toString()}. ${approveIsHelpful\n              ? `You need approve at least ${lackAmount.toString()} ${asset.name}`\n              : 'Approve is not helpful'}`;\n          if (approveIsHelpful) {\n            if (spenderAddress === undefined) throw new Error(`Spender address is required for ${asset.name}`);\n            const resetRequired = await this.checkResetRequired(\n              asset.address,\n              spenderAddress,\n            );\n            const { gasPrice: gasPriceWei } = await this.provider.getFeeData();\n            const approveTransactionCost = BigInt(APPROVE_ERC20_GAS_LIMIT) * (gasPriceWei ?? 0n);\n            const denormalizedApproveTransactionCost = denormalizeNumber(\n              approveTransactionCost,\n              BigInt(NATIVE_CURRENCY_PRECISION)\n            );\n\n            requiredApproves.items = {\n              ...requiredApproves.items,\n              ...resetRequired && {\n                [`Reset ${asset.name} from 'wallet' to ${spenderAddress}`]: denormalizedApproveTransactionCost.toString(),\n              },\n              [`Approve ${asset.name} from 'wallet' to ${spenderAddress}`]: denormalizedApproveTransactionCost.toString(),\n            };\n            balanceIssues.push({\n              asset,\n              sources: ['wallet'],\n              fixes: [\n                ...resetRequired\n                  ? [{\n                    type: 'byApprove' as const,\n                    targetAmount: 0,\n                    spenderAddress,\n                  }]\n                  : [],\n                {\n                  type: 'byApprove',\n                  targetAmount: targetApprove,\n                  spenderAddress,\n                },\n              ],\n              message: issueMessage,\n            });\n          } else {\n            balanceIssues.push({\n              asset,\n              sources: ['wallet'],\n              message: issueMessage,\n            });\n          }\n        }\n      }));\n\n    const walletNativeAggregatedRequirements = flattedAggregatedRequirements\n      .filter(({ sources, asset }) => sources[0] === 'wallet' && asset.name === this.nativeCryptocurrency.name);\n\n    walletNativeAggregatedRequirements.forEach(({ asset, items }) => {\n      const remainingBalance = remainingBalances[asset.name];\n      if (!remainingBalance) throw new Error(`No ${asset.name} balance`);\n\n      const itemsAmountSum = Object.values({ ...items, ...requiredApproves.items })\n        .reduce<BigNumber>((p, c) => (c !== undefined ? p.plus(c) : p), new BigNumber(0));\n\n      remainingBalance.wallet = remainingBalance.wallet.minus(itemsAmountSum);\n      if (remainingBalance.wallet.lt(0)) {\n        const lackAmount = remainingBalance.wallet.abs();\n        balanceIssues.push({\n          asset,\n          sources: ['wallet'],\n          message: `Not enough ${asset.name} on wallet balance. ` +\n            `You need to deposit at least ${lackAmount.toString()} ${asset.name} into wallet contract`,\n        });\n      }\n    });\n\n    if (fixAutofixable !== undefined && fixAutofixable) {\n      const unfixed = await this.fixAllAutofixableBalanceIssues(balanceIssues);\n      if (unfixed.length > 0) throw new Error(`Balance issues: ${unfixed.map((issue, i) => `${i + 1}. ${issue.message}`).join('\\n')}`);\n    } else if (balanceIssues.length > 0) {\n      throw new Error(\n        `Balance issues (address ${walletAddress}): ` +\n          `${balanceIssues.map((issue, i) => `${i + 1}. ${issue.message}`).join('\\n')}`\n      );\n    }\n  }\n}\n","const arrayEquals = (a: unknown[], b: unknown[]) => a.length === b.length &&\n    a.every((value, index) => value === b[index]);\n\nexport default arrayEquals;\n","import { BigNumber } from 'bignumber.js';\nimport { ethers } from 'ethers';\nimport { simpleFetch } from 'simple-typed-fetch';\nimport { NATIVE_CURRENCY_PRECISION, SWAP_THROUGH_ORION_POOL_GAS_LIMIT } from '../../constants/index.js';\nimport type { Aggregator } from '../../services/Aggregator/index.js';\nimport type { BlockchainService } from '../../services/BlockchainService/index.js';\n\nimport { calculateFeeInFeeAsset, denormalizeNumber, getNativeCryptocurrencyName } from '../../utils/index.js';\n\nexport type GetSwapInfoParams = {\n  assetIn: string\n  assetOut: string\n  amount: BigNumber.Value\n  feeAsset: string\n  blockchainService: BlockchainService\n  aggregator: Aggregator\n  options?: {\n    instantSettlement?: boolean\n    poolOnly?: boolean\n  }\n  walletAddress?: string\n  isTradeBuy?: boolean\n}\n\nexport default async function getSwapInfo({\n  assetIn,\n  assetOut,\n  amount,\n  feeAsset,\n  blockchainService,\n  aggregator,\n  options,\n  walletAddress,\n  isTradeBuy = false,\n}: GetSwapInfoParams) {\n  if (amount === '') throw new Error('Amount can not be empty');\n  if (assetIn === '') throw new Error('AssetIn can not be empty');\n  if (assetOut === '') throw new Error('AssetOut can not be empty');\n  if (feeAsset === '') throw new Error('Fee asset can not be empty');\n\n  const amountBN = new BigNumber(amount);\n  if (amountBN.isNaN()) throw new Error(`Amount '${amountBN.toString()}' is not a number`);\n  if (amountBN.lte(0)) throw new Error(`Amount '${amountBN.toString()}' should be greater than 0`);\n\n  const {\n    assetToAddress,\n  } = await simpleFetch(blockchainService.getInfo)();\n  const nativeCryptocurrencyName = getNativeCryptocurrencyName(assetToAddress);\n\n  const feeAssets = await simpleFetch(blockchainService.getPlatformFees)({ walletAddress, assetIn, assetOut });\n  const allPrices = await simpleFetch(blockchainService.getPricesWithQuoteAsset)();\n  const gasPriceWei = await simpleFetch(blockchainService.getGasPriceWei)();\n\n  const gasPriceGwei = ethers.formatUnits(gasPriceWei, 'gwei').toString();\n\n  const assetInAddress = assetToAddress[assetIn];\n  if (assetInAddress === undefined) throw new Error(`Asset '${assetIn}' not found`);\n  const feeAssetAddress = assetToAddress[feeAsset];\n  if (feeAssetAddress === undefined) {\n    throw new Error(`Fee asset '${feeAsset}' not found. Available assets: ${Object.keys(feeAssets).join(', ')}`);\n  }\n\n  const swapInfo = await simpleFetch(aggregator.getSwapInfo)(\n    assetIn,\n    assetOut,\n    amountBN.toString(),\n    options?.instantSettlement,\n    options?.poolOnly !== undefined && options.poolOnly\n      ? 'pools'\n      : undefined,\n    isTradeBuy,\n  );\n\n  const { exchanges: swapExchanges } = swapInfo;\n  const { factories } = await simpleFetch(blockchainService.getPoolsConfig)();\n  const poolExchangesList = factories !== undefined ? Object.keys(factories) : [];\n  const [firstSwapExchange] = swapExchanges;\n\n  let route: 'pool' | 'aggregator';\n  if (options?.poolOnly !== undefined && options.poolOnly) {\n    route = 'pool';\n  } else if (\n    poolExchangesList.length > 0 &&\n    swapExchanges.length === 1 &&\n    firstSwapExchange !== undefined &&\n    poolExchangesList.some((poolExchange) => poolExchange === firstSwapExchange)\n  ) {\n    route = 'pool';\n  } else {\n    route = 'aggregator';\n  }\n\n  if (route === 'pool') {\n    const transactionCost = BigInt(SWAP_THROUGH_ORION_POOL_GAS_LIMIT) * BigInt(gasPriceWei);\n    const denormalizedTransactionCost = denormalizeNumber(transactionCost, BigInt(NATIVE_CURRENCY_PRECISION));\n\n    return {\n      route,\n      swapInfo,\n      fee: {\n        assetName: nativeCryptocurrencyName,\n        assetAddress: ethers.ZeroAddress,\n        networkFeeInFeeAsset: denormalizedTransactionCost.toString(),\n        protocolFeeInFeeAsset: undefined,\n      },\n    };\n  }\n\n  if (swapInfo.orderInfo !== null) {\n    const [baseAssetName] = swapInfo.orderInfo.assetPair.split('-');\n    if (baseAssetName === undefined) throw new Error('Base asset name is undefined');\n    const baseAssetAddress = assetToAddress[baseAssetName];\n    if (baseAssetAddress === undefined) throw new Error(`No asset address for ${baseAssetName}`);\n\n    // Fee calculation\n    const feePercent = feeAssets[feeAsset];\n    if (feePercent === undefined) throw new Error(`Fee asset ${feeAsset} not available`);\n\n    const {\n      serviceFeeInFeeAsset,\n      networkFeeInFeeAsset,\n    } = calculateFeeInFeeAsset(\n      swapInfo.orderInfo.amount,\n      gasPriceGwei,\n      feePercent,\n      baseAssetAddress,\n      ethers.ZeroAddress,\n      feeAssetAddress,\n      allPrices.prices\n    );\n\n    return {\n      route,\n      swapInfo,\n      fee: {\n        assetName: feeAsset,\n        assetAddress: feeAssetAddress,\n        networkFeeInFeeAsset,\n        protocolFeeInFeeAsset: serviceFeeInFeeAsset,\n      },\n    };\n  }\n\n  return {\n    route,\n    swapInfo,\n    fee: {\n      assetName: feeAsset,\n      assetAddress: feeAssetAddress,\n      networkFeeInFeeAsset: undefined,\n      protocolFeeInFeeAsset: undefined,\n    },\n  };\n}\n","import type { LibValidator } from '@orionprotocol/contracts/lib/ethers-v6/Exchange.js';\nimport { ethers, ZeroAddress } from 'ethers';\nimport type { AddressLike, JsonRpcProvider, BigNumberish, BytesLike } from 'ethers';\nimport cloneDeep from 'lodash.clonedeep';\nimport { safeGet, SafeArray } from '../../utils/safeGetters.js';\nimport { simpleFetch } from 'simple-typed-fetch';\nimport type Unit from '../index.js';\nimport { generateUni2Calls, generateUni2Call } from './callGenerators/uniswapV2.js';\nimport {\n  generateUni3Calls,\n  generateOrion3Calls,\n  generateUni3Call,\n  generateOrion3Call,\n} from './callGenerators/uniswapV3.js';\nimport { exchangeToNativeDecimals, generateCalls, pathCallWithBalance } from './callGenerators/utils.js';\nimport { generateTransferCall } from './callGenerators/erc20.js';\nimport { generateCurveStableSwapCall } from './callGenerators/curve.js';\nimport type { SingleSwap } from '../../types.js';\nimport { addressLikeToString } from '../../utils/addressLikeToString.js';\nimport { generateUnwrapAndTransferCall, generateWrapAndTransferCall } from './callGenerators/weth.js';\nimport { getExchangeAllowance, getTotalBalance } from '../../utils/getBalance.js';\nimport { generateFeePaymentCall } from './callGenerators/feePayment.js';\nimport { generateAeroCalls } from './callGenerators/aero.js';\n\nexport type Factory = 'UniswapV2' | 'UniswapV3' | 'Curve' | 'OrionV2' | 'OrionV3' | 'Aero';\n\ntype BaseGenerateSwapCalldataParams = {\n  amount: BigNumberish\n  minReturnAmount: BigNumberish\n  initiatorAddress: string\n  receiverAddress: string\n  path: ArrayLike<SingleSwap>\n  matcher?: AddressLike\n  feeToken?: AddressLike\n  fee?: BigNumberish\n}\n\nexport type GenerateSwapCalldataWithUnitParams = BaseGenerateSwapCalldataParams & {\n  unit: Unit\n};\n\nexport type GenerateSwapCalldataParams = BaseGenerateSwapCalldataParams & {\n  exchangeContractAddress: AddressLike\n  wethAddress: AddressLike\n  curveRegistryAddress: AddressLike\n  swapExecutorContractAddress: AddressLike\n  provider: JsonRpcProvider\n  logger?: ((message: string) => void) | undefined\n};\n\nexport async function generateSwapCalldataWithUnit({\n  amount,\n  minReturnAmount,\n  initiatorAddress,\n  receiverAddress,\n  path: arrayLikePath,\n  matcher = ZeroAddress,\n  feeToken = ZeroAddress,\n  fee = 0,\n  unit,\n}: GenerateSwapCalldataWithUnitParams): Promise<{\n  calldata: string\n  swapDescription: LibValidator.SwapDescriptionStruct\n  value: bigint\n}> {\n  if (arrayLikePath == undefined || arrayLikePath.length == 0) {\n    throw new Error('Empty path');\n  }\n  const wethAddress = safeGet(unit.contracts, 'WETH');\n  const curveRegistryAddress = safeGet(unit.contracts, 'curveRegistry');\n  const { swapExecutorContractAddress, exchangeContractAddress } = await simpleFetch(\n    unit.blockchainService.getInfo\n  )();\n\n  const arrayLikePathCopy = cloneDeep(arrayLikePath);\n  let path = SafeArray.from(arrayLikePathCopy);\n\n  path = SafeArray.from(arrayLikePathCopy).map((swapInfo) => ({\n    ...swapInfo,\n    assetIn: swapInfo.assetAddressIn.toLowerCase(),\n    assetOut: swapInfo.assetAddressOut.toLowerCase(),\n  }));\n\n  return await generateSwapCalldata({\n    amount,\n    minReturnAmount,\n    receiverAddress,\n    initiatorAddress,\n    path,\n    matcher,\n    feeToken,\n    fee,\n    exchangeContractAddress,\n    wethAddress,\n    curveRegistryAddress,\n    swapExecutorContractAddress,\n    provider: unit.provider,\n    logger: unit.logger,\n  });\n}\n\nexport async function generateSwapCalldata({\n  amount,\n  minReturnAmount,\n  initiatorAddress,\n  receiverAddress,\n  path: arrayLikePath,\n  matcher: matcherAddressLike = ZeroAddress,\n  feeToken: feeTokenAddressLike = ZeroAddress,\n  fee = 0,\n  exchangeContractAddress,\n  wethAddress: wethAddressLike,\n  curveRegistryAddress: curveRegistryAddressLike,\n  swapExecutorContractAddress: swapExecutorContractAddressLike,\n  provider,\n  logger,\n}: GenerateSwapCalldataParams): Promise<{\n  calldata: string\n  swapDescription: LibValidator.SwapDescriptionStruct\n  value: bigint\n}> {\n  const wethAddress = await addressLikeToString(wethAddressLike);\n  logger?.(`wethAddress: ${wethAddress}`);\n  const curveRegistryAddress = await addressLikeToString(curveRegistryAddressLike);\n  logger?.(`curveRegistryAddress: ${curveRegistryAddress}`);\n  const swapExecutorContractAddress = await addressLikeToString(swapExecutorContractAddressLike);\n  logger?.(`swapExecutorContractAddress, ${swapExecutorContractAddress}`);\n  const feeToken = await addressLikeToString(feeTokenAddressLike);\n  logger?.(`feeToken, ${feeToken}`);\n  const matcher = await addressLikeToString(matcherAddressLike);\n  logger?.(`matcher: ${matcher}`);\n  logger?.(`arrayLikePath: ${arrayLikePath}`);\n  let path = SafeArray.from(arrayLikePath).map((swapInfo) => {\n    logger?.(`swapInfo: ${swapInfo}`);\n    swapInfo.assetIn = swapInfo.assetIn.toLowerCase()\n    swapInfo.assetOut = swapInfo.assetOut.toLowerCase()\n    return swapInfo;\n  });\n  logger?.(`path: ${path}`);\n\n  const { assetIn: srcToken } = path.first();\n  const { assetOut: dstToken } = path.last();\n\n  let swapDescription: LibValidator.SwapDescriptionStruct = {\n    srcToken,\n    dstToken,\n    srcReceiver: swapExecutorContractAddress,\n    dstReceiver: receiverAddress,\n    amount,\n    minReturnAmount,\n    flags: 0,\n  };\n  logger?.(`swapDescription: ${swapDescription}`);\n  const amountNativeDecimals = await exchangeToNativeDecimals(srcToken, amount, provider);\n  logger?.(`amountNativeDecimals: ${amountNativeDecimals}`);\n  const feeNativeDecimals = await exchangeToNativeDecimals(feeToken, fee, provider)\n  logger?.(`feeNativeDecimals: ${feeNativeDecimals}`);\n\n  path = SafeArray.from(arrayLikePath).map((singleSwap) => {\n    if (singleSwap.assetIn == ethers.ZeroAddress) singleSwap.assetIn = wethAddress;\n    if (singleSwap.assetOut == ethers.ZeroAddress) singleSwap.assetOut = wethAddress;\n    return singleSwap;\n  });\n  logger?.(`path2: ${path}`);\n\n  let calls: BytesLike[];\n  ({ swapDescription, calls } = await processSwaps(\n    swapDescription,\n    path,\n    amountNativeDecimals,\n    matcher,\n    feeToken,\n    feeNativeDecimals,\n    wethAddress,\n    swapExecutorContractAddress,\n    curveRegistryAddress,\n    provider\n  ));\n  logger?.(`swapDescription: ${swapDescription}`);\n  logger?.(`calls: ${calls}`);\n  const calldata = generateCalls(calls);\n  logger?.(`calldata: ${calldata}`);\n\n  const { useExchangeBalance, additionalTransferAmount } = await shouldUseExchangeBalance(\n    srcToken,\n    initiatorAddress,\n    exchangeContractAddress,\n    amountNativeDecimals,\n    provider,\n    logger\n  );\n  logger?.(`useExchangeBalance: ${useExchangeBalance}`);\n  logger?.(`additionalTransferAmount: ${additionalTransferAmount}`);\n  if (useExchangeBalance) {\n    swapDescription.flags = 1n << 255n;\n  }\n  const value = srcToken == ZeroAddress ? additionalTransferAmount : 0n;\n  logger?.(`value: ${value}`);\n  return { swapDescription, calldata, value };\n}\n\nasync function processSwaps(\n  swapDescription: LibValidator.SwapDescriptionStruct,\n  path: SafeArray<SingleSwap>,\n  amount: BigNumberish,\n  matcher: string,\n  feeToken: string,\n  fee: BigNumberish,\n  wethAddress: string,\n  swapExecutorContractAddress: string,\n  curveRegistryAddress: string,\n  provider: JsonRpcProvider\n) {\n  const { factory: firstSwapFactory } = path.first();\n  const isSingleFactorySwap = path.every((singleSwap) => singleSwap.factory === firstSwapFactory);\n  let calls: BytesLike[];\n  if (isSingleFactorySwap) {\n    ({ swapDescription, calls } = await processSingleFactorySwaps(\n      firstSwapFactory,\n      swapDescription,\n      path,\n      amount,\n      swapExecutorContractAddress,\n      curveRegistryAddress,\n      provider\n    ));\n  } else {\n    ({ swapDescription, calls } = await processMultiFactorySwaps(\n      swapDescription,\n      path,\n      amount,\n      swapExecutorContractAddress,\n      curveRegistryAddress,\n      provider\n    ));\n  }\n\n  ({ swapDescription, calls } = await payFeeToMatcher(matcher, feeToken, fee, calls, swapDescription));\n\n  ({ swapDescription, calls } = wrapOrUnwrapIfNeeded(\n    amount,\n    swapDescription,\n    calls,\n    swapExecutorContractAddress,\n    wethAddress\n  ));\n\n  return { swapDescription, calls };\n}\n\nasync function processSingleFactorySwaps(\n  factory: Factory,\n  swapDescription: LibValidator.SwapDescriptionStruct,\n  path: SafeArray<SingleSwap>,\n  amount: BigNumberish,\n  swapExecutorContractAddress: string,\n  curveRegistryAddress: string,\n  provider: JsonRpcProvider\n) {\n  let calls: BytesLike[] = [];\n  switch (factory) {\n    case 'OrionV2': {\n      swapDescription.srcReceiver = path.first().pool;\n      calls = await generateUni2Calls(path, swapExecutorContractAddress);\n      break;\n    }\n    case 'UniswapV2': {\n      swapDescription.srcReceiver = path.first().pool;\n      calls = await generateUni2Calls(path, swapExecutorContractAddress);\n      break;\n    }\n    case 'UniswapV3': {\n      calls = await generateUni3Calls(path, amount, swapExecutorContractAddress, provider);\n      break;\n    }\n    case 'OrionV3': {\n      calls = await generateOrion3Calls(path, amount, swapExecutorContractAddress, provider);\n      break;\n    }\n    case \"Aero\": {\n      calls = await generateAeroCalls(path, amount, swapExecutorContractAddress, provider);\n      break;\n    }\n    case 'Curve': {\n      if (path.length > 1) {\n        throw new Error('Supporting only single stable swap on curve');\n      }\n      calls = await generateCurveStableSwapCall(\n        amount,\n        swapExecutorContractAddress,\n        path.first(),\n        provider,\n        swapExecutorContractAddress,\n        curveRegistryAddress\n      );\n      break;\n    }\n    default: {\n      throw new Error(`Factory ${factory} is not supported`);\n    }\n  }\n  return { swapDescription, calls };\n}\n\nasync function processMultiFactorySwaps(\n  swapDescription: LibValidator.SwapDescriptionStruct,\n  path: SafeArray<SingleSwap>,\n  amount: BigNumberish,\n  swapExecutorContractAddress: string,\n  curveRegistryAddress: string,\n  provider: JsonRpcProvider\n) {\n  const calls: BytesLike[] = [];\n  for (const swap of path) {\n    switch (swap.factory) {\n      case 'OrionV2': {\n        let transferCall = generateTransferCall(swap.assetIn, swap.pool, 0);\n        transferCall = pathCallWithBalance(transferCall, swap.assetIn);\n        const uni2Call = generateUni2Call(swap.pool, swap.assetIn, swap.assetOut, swapExecutorContractAddress, swap.fee);\n        calls.push(transferCall, uni2Call);\n        break;\n      }\n      case 'UniswapV2': {\n        let transferCall = generateTransferCall(swap.assetIn, swap.pool, 0);\n        transferCall = pathCallWithBalance(transferCall, swap.assetIn);\n        const uni2Call = generateUni2Call(swap.pool, swap.assetIn, swap.assetOut, swapExecutorContractAddress, swap.fee);\n        calls.push(transferCall, uni2Call);\n        break;\n      }\n      case 'UniswapV3': {\n        let uni3Call = await generateUni3Call(swap, 0, swapExecutorContractAddress, provider);\n        uni3Call = pathCallWithBalance(uni3Call, swap.assetIn);\n        calls.push(uni3Call);\n        break;\n      }\n      case 'OrionV3': {\n        let orion3Call = await generateOrion3Call(swap, 0, swapExecutorContractAddress, provider);\n        orion3Call = pathCallWithBalance(orion3Call, swap.assetIn);\n        calls.push(orion3Call);\n        break;\n      }\n      case 'Curve': {\n        const curveCalls = await generateCurveStableSwapCall(\n          amount,\n          swapExecutorContractAddress,\n          swap,\n          provider,\n          swapExecutorContractAddress,\n          curveRegistryAddress,\n          true\n        );\n        calls.push(...curveCalls);\n        break;\n      }\n      default: {\n        throw new Error(`Factory ${swap.factory} is not supported`);\n      }\n    }\n  }\n  return { swapDescription, calls };\n}\n\nasync function payFeeToMatcher(\n  matcher: string,\n  feeToken: string,\n  feeAmount: BigNumberish,\n  calls: BytesLike[],\n  swapDescription: LibValidator.SwapDescriptionStruct,\n) {\n  if (BigInt(feeAmount) !== 0n && feeToken === swapDescription.dstToken) {\n    const feePaymentCall = generateFeePaymentCall(matcher, feeToken, feeAmount)\n    calls.push(feePaymentCall)\n  }\n  return { swapDescription, calls }\n}\n\nfunction wrapOrUnwrapIfNeeded(\n  amount: BigNumberish,\n  swapDescription: LibValidator.SwapDescriptionStruct,\n  calls: BytesLike[],\n  swapExecutorContractAddress: string,\n  wethAddress: string\n) {\n  const { dstReceiver, srcReceiver, srcToken, dstToken } = swapDescription;\n  if (srcToken === ZeroAddress) {\n    const wrapCall = generateWrapAndTransferCall(srcReceiver, { value: amount });\n    swapDescription.srcReceiver = swapExecutorContractAddress;\n    calls = ([wrapCall] as BytesLike[]).concat(calls);\n  }\n  if (dstToken === ZeroAddress) {\n    let unwrapCall = generateUnwrapAndTransferCall(dstReceiver, 0);\n    unwrapCall = pathCallWithBalance(unwrapCall, wethAddress);\n    calls.push(unwrapCall);\n  } else {\n    let transferCall = generateTransferCall(dstToken, dstReceiver, 0);\n    transferCall = pathCallWithBalance(transferCall, dstToken);\n    calls.push(transferCall);\n  }\n  return { swapDescription, calls };\n}\n\nasync function shouldUseExchangeBalance(\n  srcToken: AddressLike,\n  initiatorAddress: AddressLike,\n  exchangeContractAddress: AddressLike,\n  amount: bigint,\n  provider: JsonRpcProvider,\n  logger?: ((message: string) => void) | undefined\n) {\n  const { walletBalance, exchangeBalance } = await getTotalBalance(\n    srcToken,\n    initiatorAddress,\n    exchangeContractAddress,\n    provider\n  );\n\n  const exchangeAllowance = await getExchangeAllowance(srcToken, initiatorAddress, exchangeContractAddress, provider);\n  logger?.('test_123');\n\n  if (walletBalance + exchangeBalance < amount) {\n    throw new Error(\n      `Not enough balance to make swap, walletBalance: ${walletBalance} exchangeBalance: ${exchangeBalance} totalBalance - ${walletBalance + exchangeBalance} swapAmount - ${amount}`\n    );\n  }\n  let useExchangeBalance = true;\n  let additionalTransferAmount = 0n;\n\n  if (walletBalance >= amount || exchangeBalance == 0n) {\n    useExchangeBalance = false;\n    additionalTransferAmount = amount;\n  } else {\n    additionalTransferAmount = exchangeBalance >= amount ? 0n : amount - exchangeBalance;\n    if (srcToken !== ZeroAddress && additionalTransferAmount > exchangeAllowance) {\n      throw new Error(\n        `Not enough allowance to make swap, allowance - ${exchangeAllowance} needed allowance - ${additionalTransferAmount}`\n      );\n    }\n  }\n  return { useExchangeBalance, additionalTransferAmount };\n}\n","export class SafeArray<T> extends Array<T> {\n  public static override from<T>(array: ArrayLike<T>): SafeArray<T> {\n    return new SafeArray(array);\n  }\n\n  constructor(array: ArrayLike<T>) {\n    super(array.length);\n    for (const index in array) {\n      const value = array[index]\n      if (value === undefined) {\n        throw new Error('Array passed to constructor has undefined values')\n      }\n\n      this[index] = value;\n    }\n  }\n\n  public toArray(): T[] {\n    return [...this];\n  }\n\n  public override map<U>(callbackfn: (value: T, index: number, array: T[]) => U, thisArg?: unknown): SafeArray<U> {\n    return new SafeArray(super.map(callbackfn, thisArg));\n  }\n\n  public override filter(callbackfn: (value: T, index: number, array: T[]) => boolean, thisArg?: unknown): SafeArray<T> {\n    return new SafeArray(super.filter(callbackfn, thisArg));\n  }\n\n  public get<T>(this: SafeArray<T>, index: number): T {\n    const value = this.at(index);\n    if (value === undefined) {\n      throw new Error(`Element at index ${index} is undefined.`)\n    }\n    return value\n  }\n\n  public last<T>(this: SafeArray<T>): T {\n    return this.get(this.length - 1)\n  }\n\n  public first<T>(this: SafeArray<T>): T {\n    return this.get(0)\n  }\n}\n\nexport function safeGet<V>(obj: Partial<Record<string, V>>, key: string, errorMessage?: string) {\n  const value = obj[key];\n  if (value === undefined) throw new Error(`Key '${key.toString()}' not found in object. Available keys: ${Object.keys(obj).join(', ')}.${errorMessage ? ` ${errorMessage}` : ''}`);\n  return value;\n}\n\nconst prefix = 'Requirement not met';\n\nexport function must(condition: unknown, message?: string | (() => string)): asserts condition {\n  if (condition) return;\n  const provided = typeof message === 'function' ? message() : message;\n  const value = provided ? `${prefix}: ${provided}` : prefix;\n  throw new Error(value);\n}\n","import { SwapExecutor__factory } from \"@orionprotocol/contracts/lib/ethers-v6/index.js\"\nimport { SafeArray } from \"../../../utils/safeGetters.js\"\nimport { type BytesLike, type BigNumberish, concat, ethers, toBeHex } from \"ethers\"\nimport { addCallParams } from \"./utils.js\"\nimport type { SingleSwap } from \"../../../types.js\"\nimport { BigNumber } from 'bignumber.js';\n\nconst BILLION = 1000000000;\nconst TEN_THOUSANDS = 10000;\n\nfunction countScaledFee(fee: string) {\n  // The count is needed for the swapUniV2Scaled function, where the denominator is one billion\n  return new BigNumber(fee).multipliedBy(BILLION).div(TEN_THOUSANDS).toNumber();\n}\n\nexport async function generateUni2Calls(\n  path: SafeArray<SingleSwap>,\n  recipient: string\n) {\n  const executorInterface = SwapExecutor__factory.createInterface()\n  const calls: BytesLike[] = []\n  if (path.length > 1) {\n    for (let i = 0; i < path.length - 1; ++i) {\n      const currentSwap = path.get(i)\n      const nextSwap = path.get(i + 1)\n\n      const call = await generateUni2Call(\n        currentSwap.pool,\n        currentSwap.assetIn,\n        currentSwap.assetOut,\n        nextSwap.pool,\n        currentSwap.fee\n      )\n      calls.push(call)\n    }\n  }\n\n  const lastSwap = path.last();\n  const fee = lastSwap.fee ?? 30;\n  const scaledFee = countScaledFee(fee.toString());\n  const calldata = executorInterface.encodeFunctionData('swapUniV2Scaled', [\n    lastSwap.pool,\n    lastSwap.assetIn,\n    lastSwap.assetOut,\n    ethers.AbiCoder.defaultAbiCoder().encode(['uint256'], [concat([toBeHex(scaledFee), recipient])]),\n  ])\n  calls.push(addCallParams(calldata))\n\n  return calls\n}\n\nexport function generateUni2Call(\n  pool: string,\n  assetIn: string,\n  assetOut: string,\n  recipient: string,\n  fee: BigNumberish = 30,\n) {\n  const executorInterface = SwapExecutor__factory.createInterface()\n  const scaledFee = countScaledFee(fee.toString());\n  const calldata = executorInterface.encodeFunctionData('swapUniV2Scaled', [\n    pool,\n    assetIn,\n    assetOut,\n    ethers.AbiCoder.defaultAbiCoder().encode(['uint256'], [concat([toBeHex(scaledFee), recipient])]),\n  ])\n  return addCallParams(calldata)\n}\n","import { ERC20__factory, SwapExecutor__factory } from \"@orionprotocol/contracts/lib/ethers-v6/index.js\"\nimport type { AddressLike } from \"ethers\"\nimport { type BytesLike, ethers, type BigNumberish } from \"ethers\"\n\nconst EXECUTOR_SWAP_FUNCTION = 'func_70LYiww'\n\nexport type CallParams = {\n  isMandatory?: boolean,\n  target?: string,\n  gaslimit?: BigNumberish,\n  value?: BigNumberish\n}\n\nexport type PatchParams = {\n  skipOnZeroAmount?: boolean,\n  skipCallDataPatching?: boolean,\n  skipValuePatching?: boolean\n}\n\nexport function pathCallWithBalance(\n  calldata: BytesLike,\n  tokenAddress: AddressLike,\n  patchParams: PatchParams = { skipCallDataPatching: false, skipValuePatching: true }\n) {\n  const executorInterface = SwapExecutor__factory.createInterface()\n  const skipMaskAndOffset = createPatchMask(calldata, patchParams)\n  calldata = executorInterface.encodeFunctionData(\"patchCallWithTokenBalance\", [\n    calldata,\n    skipMaskAndOffset,\n    tokenAddress,\n    ethers.MaxUint256])\n  return addCallParams(calldata)\n}\n\nexport function addCallParams(\n  calldata: BytesLike,\n  callParams?: CallParams\n) {\n  let firstByte = 0\n  if (callParams) {\n    if (callParams.value !== undefined) {\n      firstByte += 16 // 00010000\n      const encodedValue = ethers.solidityPacked(['uint128'], [callParams.value])\n      calldata = ethers.hexlify(ethers.concat([encodedValue, calldata]))\n    }\n    if (callParams.target !== undefined) {\n      firstByte += 32 // 00100000\n      const encodedAddress = ethers.solidityPacked(['address'], [callParams.target])\n      calldata = ethers.hexlify(ethers.concat([encodedAddress, calldata]))\n    }\n    if (callParams.gaslimit !== undefined) {\n      firstByte += 64 // 01000000\n      const encodedGaslimit = ethers.solidityPacked(['uint32'], [callParams.gaslimit])\n      calldata = ethers.hexlify(ethers.concat([encodedGaslimit, calldata]))\n    }\n    if (callParams.isMandatory !== undefined) firstByte += 128 // 10000000\n  }\n\n  const encodedFirstByte = ethers.solidityPacked(['uint8'], [firstByte])\n  calldata = ethers.hexlify(ethers.concat([encodedFirstByte, calldata]))\n  return calldata\n}\n\nexport function createPatchMask(calldata: BytesLike, patchParams?: PatchParams) {\n  let firstByte = 0\n  let mask = ethers.solidityPacked([\"uint256\"], [(calldata.length - 4) / 2 - 32]) //finding offset of last 32 bytes slot in calldata\n  mask = ethers.dataSlice(mask, 1)\n  if (patchParams) {\n    if (patchParams.skipOnZeroAmount !== undefined && patchParams.skipOnZeroAmount === false) {\n      firstByte += 32\n    }\n    if (patchParams.skipCallDataPatching !== undefined && patchParams.skipCallDataPatching) {\n      firstByte += 64\n    }\n    if (patchParams.skipValuePatching !== undefined && patchParams.skipValuePatching) {\n      firstByte += 128\n    }\n  }\n  const encodedFirstByte = ethers.solidityPacked([\"uint8\"], [firstByte])\n  mask = ethers.hexlify(ethers.concat([encodedFirstByte, mask]))\n  return mask\n}\n\nexport function generateCalls(calls: BytesLike[]) {\n  const executorInterface = SwapExecutor__factory.createInterface()\n  return '0x' + executorInterface.encodeFunctionData(EXECUTOR_SWAP_FUNCTION, [ethers.ZeroAddress, calls]).slice(74)\n}\n\nexport async function exchangeToNativeDecimals(token: AddressLike, amount: BigNumberish, provider: ethers.JsonRpcProvider) {\n  return await toNativeDecimals(token, amount, provider) / (BigInt(10) ** 8n)\n}\n\nexport async function toNativeDecimals(token: AddressLike, amount: BigNumberish, provider: ethers.JsonRpcProvider) {\n  token = await token\n  if (typeof token !== \"string\") token = await token.getAddress()\n\n  let decimals = 18n\n  if (token !== ethers.ZeroAddress) {\n    const contract = ERC20__factory.connect(token, provider)\n    decimals = BigInt(await contract.decimals())\n  }\n  return BigInt(amount) * (BigInt(10) ** decimals)\n}","import { SwapExecutor__factory, UniswapV3Pool__factory } from \"@orionprotocol/contracts/lib/ethers-v6/index.js\"\nimport { type BigNumberish , ethers, JsonRpcProvider } from \"ethers\"\nimport { SafeArray } from \"../../../utils/safeGetters.js\"\nimport { addCallParams } from \"./utils.js\"\nimport type { SingleSwap } from \"../../../types.js\"\n\nexport async function generateUni3Call(\n  swap: SingleSwap,\n  amount: BigNumberish | undefined,\n  recipient: string,\n  provider: JsonRpcProvider\n) {\n  if (typeof amount === 'undefined') amount = 0\n\n  const encodedPool = await encodePoolV3(swap.pool, swap.assetIn, swap.assetOut, provider)\n  const executorInterface = SwapExecutor__factory.createInterface()\n  let calldata = executorInterface.encodeFunctionData('uniswapV3SingleSwapTo', [encodedPool, recipient, amount])\n\n  return addCallParams(calldata)\n}\n\nexport async function generateOrion3Call(\n  swap: SingleSwap,\n  amount: BigNumberish | undefined,\n  recipient: string,\n  provider: JsonRpcProvider\n) {\n  if (amount === undefined) amount = 0\n\n  const encodedPool = await encodePoolV3(swap.pool, swap.assetIn, swap.assetOut, provider)\n  const executorInterface = SwapExecutor__factory.createInterface()\n  const calldata = executorInterface.encodeFunctionData('orionV3SingleSwapTo', [encodedPool, recipient, amount])\n\n  return addCallParams(calldata)\n}\n\nexport async function generateUni3Calls(\n  path: SafeArray<SingleSwap>,\n  amount: BigNumberish,\n  recipient: string,\n  provider: JsonRpcProvider\n) {\n  const encodedPools: BigNumberish[] = []\n  for (const swap of path) {\n    const encodedPool = await encodePoolV3(swap.pool, swap.assetIn, swap.assetOut, provider)\n    encodedPools.push(encodedPool)\n  }\n  const executorInterface = SwapExecutor__factory.createInterface()\n  let calldata = executorInterface.encodeFunctionData('uniswapV3SwapTo', [encodedPools, recipient, amount])\n  calldata = addCallParams(calldata)\n\n  return [calldata]\n}\n\nexport async function generateOrion3Calls(\n  path: SafeArray<SingleSwap>,\n  amount: BigNumberish,\n  recipient: string,\n  provider: JsonRpcProvider\n) {\n  const encodedPools: BigNumberish[] = []\n  for (const swap of path) {\n    const encodedPool = await encodePoolV3(swap.pool, swap.assetIn, swap.assetOut, provider)\n    encodedPools.push(encodedPool)\n  }\n  const executorInterface = SwapExecutor__factory.createInterface()\n  let calldata = executorInterface.encodeFunctionData('orionV3SwapTo', [encodedPools, recipient, amount])\n  calldata = addCallParams(calldata)\n\n  return [calldata]\n}\n\nexport async function encodePoolV3(\n  poolAddress: string,\n  assetInAddress: string,\n  assetOutAddress: string,\n  provider: JsonRpcProvider\n) {\n  const pool = UniswapV3Pool__factory.connect(poolAddress, provider)\n  const token0 = await pool.token0()\n  const zeroForOne = token0.toLowerCase() === assetInAddress.toLowerCase()\n  const unwrapWETH = assetOutAddress === ethers.ZeroAddress\n\n  let encodedPool = ethers.solidityPacked(['uint256'], [await pool.getAddress()])\n  encodedPool = ethers.dataSlice(encodedPool, 1)\n  let firstByte = 0\n  if (unwrapWETH) firstByte += 32\n  if (!zeroForOne) firstByte += 128\n  const encodedFirstByte = ethers.solidityPacked(['uint8'], [firstByte])\n  encodedPool = ethers.hexlify(ethers.concat([encodedFirstByte, encodedPool]))\n  return encodedPool\n}","import { SwapExecutor__factory } from \"@orionprotocol/contracts/lib/ethers-v6/index.js\"\nimport type { BigNumberish, AddressLike } from \"ethers\"\nimport { type CallParams, addCallParams } from \"./utils.js\"\n\nexport function generateTransferCall(\n  token: AddressLike,\n  target: AddressLike,\n  amount: BigNumberish,\n  callParams?: CallParams\n) {\n\n  const executorInterface = SwapExecutor__factory.createInterface()\n  const calldata = executorInterface.encodeFunctionData('safeTransfer', [\n    token,\n    target,\n    amount\n  ])\n\n  return addCallParams(calldata, callParams)\n}\n\nexport function generateApproveCall(\n  token: AddressLike,\n  target: AddressLike,\n  amount: BigNumberish,\n  callParams?: CallParams\n) {\n  const executorInterface = SwapExecutor__factory.createInterface()\n  const calldata = executorInterface.encodeFunctionData('safeApprove', [\n    token,\n    target,\n    amount\n  ])\n\n  return addCallParams(calldata, callParams)\n}","import {\n  SwapExecutor__factory,\n  CurveRegistry__factory,\n  ERC20__factory,\n} from \"@orionprotocol/contracts/lib/ethers-v6/index.js\";\nimport { MaxUint256, type BigNumberish, type JsonRpcProvider } from \"ethers\";\nimport { addCallParams, pathCallWithBalance } from \"./utils.js\";\nimport type { SingleSwap } from \"../../../types.js\";\nimport { generateApproveCall } from \"./erc20.js\";\nimport type { BytesLike } from \"ethers\";\n\nexport async function generateCurveStableSwapCall(\n  amount: BigNumberish,\n  to: string,\n  swap: SingleSwap,\n  provider: JsonRpcProvider,\n  swapExecutorContractAddress: string,\n  curveRegistry: string,\n  pathWithBalance = false\n) {\n  const executorInterface = SwapExecutor__factory.createInterface();\n  const registry = CurveRegistry__factory.connect(curveRegistry, provider);\n  const { pool, assetIn, assetOut } = swap;\n  const firstToken = ERC20__factory.connect(assetIn, provider)\n  const executorAllowance = await firstToken.allowance(swapExecutorContractAddress, pool)\n\n  const calls: BytesLike[] = []\n  if (executorAllowance <= BigInt(amount)) {\n    const approveCall = await generateApproveCall(\n      assetIn,\n      pool,\n      MaxUint256\n    );\n    calls.push(approveCall);\n  }\n\n  const [i, j] = await registry.get_coin_indices(pool, assetIn, assetOut);\n  let calldata = executorInterface.encodeFunctionData(\n    \"curveSwapStableAmountIn\",\n    [pool, assetOut, i, j, to, amount]\n  );\n  calldata = addCallParams(calldata)\n  if (pathWithBalance) {\n      calldata = pathCallWithBalance(calldata, swap.assetIn)\n    }\n  calls.push(calldata)\n\n  return calls\n}\n","import { SwapExecutor__factory } from \"@orionprotocol/contracts/lib/ethers-v6/index.js\"\nimport type { BigNumberish } from \"ethers\"\nimport { type CallParams, addCallParams } from \"./utils.js\"\nimport type { AddressLike } from \"ethers\"\n\nexport function generateWrapAndTransferCall(\n  target: AddressLike,\n  callParams?: CallParams\n) {\n\n  const executorInterface = SwapExecutor__factory.createInterface()\n  const calldata = executorInterface.encodeFunctionData('wrapAndTransfer', [\n    target,\n  ])\n\n  return addCallParams(calldata, callParams)\n}\n\nexport function generateUnwrapAndTransferCall(\n  target: AddressLike,\n  amount: BigNumberish,\n  callParams?: CallParams\n) {\n\n  const executorInterface = SwapExecutor__factory.createInterface()\n  const calldata = executorInterface.encodeFunctionData('unwrapAndTransfer', [\n    target,\n    amount\n  ])\n\n  return addCallParams(calldata, callParams)\n}","import { SwapExecutor__factory } from \"@orionprotocol/contracts/lib/ethers-v6/index.js\"\nimport type { BigNumberish, AddressLike } from \"ethers\"\nimport { type CallParams, addCallParams } from \"./utils.js\"\n\n\nexport function generateFeePaymentCall(\n  matcher: AddressLike,\n  token: AddressLike,\n  amount: BigNumberish,\n  callParams?: CallParams\n) {\n\n  const executorInterface = SwapExecutor__factory.createInterface()\n  const calldata = executorInterface.encodeFunctionData('payFeeToMatcher', [\n    matcher,\n    token,\n    amount\n  ])\n\n  return addCallParams(calldata, callParams)\n}","import { SwapExecutor__factory, AeroPool__factory } from \"@orionprotocol/contracts/lib/ethers-v6/index.js\"\nimport { type BigNumberish, JsonRpcProvider } from \"ethers\"\nimport { SafeArray } from \"../../../utils/safeGetters.js\"\nimport { addCallParams } from \"./utils.js\"\nimport type { SingleSwap } from \"../../../types.js\"\n\nexport async function generateAeroCalls(\n  path: SafeArray<SingleSwap>,\n  amount: BigNumberish,\n  recipient: string,\n  provider: JsonRpcProvider\n) {\n  const pools: string[] = [];\n  const direct: boolean[] = [];\n  for (const swap of path) {\n    pools.push(swap.pool);\n\n    const token0 = await AeroPool__factory.connect(swap.pool, provider).token0();\n    direct.push(swap.assetIn.toLowerCase() === token0.toLowerCase());\n  }\n\n  const executorInterface = SwapExecutor__factory.createInterface()\n  let calldata = executorInterface.encodeFunctionData('swapAeroMulti', [pools, direct, amount, recipient]);\n  calldata = addCallParams(calldata)\n\n  return [calldata]\n}\n","import { BigNumber } from 'bignumber.js';\nimport { ethers } from 'ethers';\nimport { Exchange__factory } from '@orionprotocol/contracts/lib/ethers-v6/index.js';\nimport getBalances from '../../utils/getBalances.js';\nimport BalanceGuard from '../../BalanceGuard.js';\nimport type Unit from '../index.js';\nimport {\n  INTERNAL_PROTOCOL_PRECISION, NATIVE_CURRENCY_PRECISION, WITHDRAW_GAS_LIMIT,\n} from '../../constants/index.js';\nimport { denormalizeNumber, normalizeNumber } from '../../utils/index.js';\nimport getNativeCryptocurrencyName from '../../utils/getNativeCryptocurrencyName.js';\nimport { simpleFetch } from 'simple-typed-fetch';\n\nexport type WithdrawParams = {\n  asset: string\n  amount: BigNumber.Value\n  signer: ethers.Signer\n  unit: Unit\n}\n\nexport default async function withdraw({\n  asset,\n  amount,\n  signer,\n  unit,\n}: WithdrawParams) {\n  if (asset === '') throw new Error('Asset can not be empty');\n\n  const amountBN = new BigNumber(amount);\n  if (amountBN.isNaN()) throw new Error(`Amount '${amountBN.toString()}' is not a number`);\n  if (amountBN.lte(0)) throw new Error(`Amount '${amountBN.toString()}' should be greater than 0`);\n\n  const walletAddress = await signer.getAddress();\n\n  const {\n    blockchainService, aggregator, provider, chainId,\n  } = unit;\n  const {\n    exchangeContractAddress,\n    assetToAddress,\n  } = await simpleFetch(blockchainService.getInfo)();\n\n  const nativeCryptocurrency = getNativeCryptocurrencyName(assetToAddress);\n  const exchangeContract = Exchange__factory.connect(exchangeContractAddress, provider);\n  const gasPriceWei = await simpleFetch(blockchainService.getGasPriceWei)();\n\n  const assetAddress = assetToAddress[asset];\n  if (assetAddress === undefined) throw new Error(`Asset '${asset}' not found`);\n\n  const balances = await getBalances(\n    {\n      [asset]: assetAddress,\n      [nativeCryptocurrency]: ethers.ZeroAddress,\n    },\n    aggregator,\n    walletAddress,\n    exchangeContract,\n    provider,\n  );\n\n  const balanceGuard = new BalanceGuard(\n    balances,\n    {\n      name: nativeCryptocurrency,\n      address: ethers.ZeroAddress,\n    },\n    provider,\n    signer,\n  );\n\n  balanceGuard.registerRequirement({\n    reason: 'Amount',\n    asset: {\n      name: asset,\n      address: assetAddress,\n    },\n    amount: amountBN.toString(),\n    sources: ['exchange'],\n  });\n\n  const unsignedTx = await exchangeContract.withdraw.populateTransaction(\n    assetAddress,\n    normalizeNumber(amount, INTERNAL_PROTOCOL_PRECISION, BigNumber.ROUND_FLOOR).toString(),\n  );\n  unsignedTx.gasLimit = BigInt(WITHDRAW_GAS_LIMIT);\n\n  const transactionCost = BigInt(unsignedTx.gasLimit) * BigInt(gasPriceWei);\n  const denormalizedTransactionCost = denormalizeNumber(transactionCost, BigInt(NATIVE_CURRENCY_PRECISION));\n\n  balanceGuard.registerRequirement({\n    reason: 'Network fee',\n    asset: {\n      name: nativeCryptocurrency,\n      address: ethers.ZeroAddress,\n    },\n    amount: denormalizedTransactionCost.toString(),\n    sources: ['wallet'],\n  });\n\n  unsignedTx.chainId = BigInt(chainId);\n  unsignedTx.gasPrice = BigInt(gasPriceWei);\n  unsignedTx.from = walletAddress;\n\n  await balanceGuard.check(true);\n\n  const nonce = await provider.getTransactionCount(walletAddress, 'pending');\n  unsignedTx.nonce = nonce;\n\n  const signedTx = await signer.signTransaction(unsignedTx);\n  const txResponse = await provider.broadcastTransaction(signedTx);\n  console.log(`Withdraw tx sent: ${txResponse.hash}. Waiting for confirmation...`);\n  try {\n    const txReceipt = await txResponse.wait();\n    if (txReceipt?.status !== undefined) {\n      console.log('Withdraw tx confirmed');\n    } else {\n      console.log('Withdraw tx failed');\n    }\n  } catch (e) {\n    if (!(e instanceof Error)) throw new Error('e is not an Error');\n    console.error(`Deposit tx failed: ${e.message}`, {\n      unsignedTx,\n    });\n  }\n}\n","import { BigNumber } from 'bignumber.js';\nimport { ethers } from 'ethers';\nimport { Exchange__factory } from '@orionprotocol/contracts/lib/ethers-v6/index.js';\nimport getBalances from '../../utils/getBalances.js';\nimport BalanceGuard from '../../BalanceGuard.js';\nimport getAvailableSources from '../../utils/getAvailableFundsSources.js';\nimport type Unit from '../index.js';\nimport { INTERNAL_PROTOCOL_PRECISION, NATIVE_CURRENCY_PRECISION, SWAP_THROUGH_ORION_POOL_GAS_LIMIT } from '../../constants/index.js';\nimport getNativeCryptocurrencyName from '../../utils/getNativeCryptocurrencyName.js';\nimport { calculateFeeInFeeAsset, denormalizeNumber, normalizeNumber } from '../../utils/index.js';\nimport { signOrder } from '../../crypt/index.js';\nimport type orderSchema from '../../services/Aggregator/schemas/orderSchema.js';\nimport type { z } from 'zod';\nimport { simpleFetch } from 'simple-typed-fetch';\nimport { generateSwapCalldata } from './generateSwapCalldata.js';\nimport isValidFactory from '../../utils/isValidFactory.js';\nimport type { SingleSwap } from '../../types.js';\nimport { must, safeGet } from '../../utils/safeGetters.js';\n\nexport type SwapLimitParams = {\n  assetIn: string\n  assetOut: string\n  price: BigNumber.Value\n  amount: BigNumber.Value\n  feeAsset: string\n  signer: ethers.Signer\n  unit: Unit\n  options?: {\n    poolOnly?: boolean\n    instantSettlement?: boolean\n    logger?: (message: string) => void\n    autoApprove?: boolean\n    developer?: {\n      route?: 'aggregator' | 'pool'\n    }\n  }\n  isTradeBuy?: boolean\n}\n\ntype AggregatorOrder = {\n  amountOut: number\n  through: 'aggregator'\n  id: string\n  wait: () => Promise<z.infer<typeof orderSchema>>\n}\n\ntype PoolSwap = {\n  amountOut: number\n  through: 'pool'\n  txHash: string\n  wait: (confirmations?: number | undefined) => Promise<ethers.TransactionReceipt | null>\n}\n\nexport type Swap = AggregatorOrder | PoolSwap;\n\nconst isValidSingleSwap = (singleSwap: Omit<SingleSwap, 'factory'> & { factory: string }): singleSwap is SingleSwap => {\n  return isValidFactory(singleSwap.factory);\n}\n\nexport default async function swapLimit({\n  assetIn,\n  assetOut,\n  price,\n  amount,\n  feeAsset,\n  signer,\n  unit,\n  options,\n  isTradeBuy = false,\n}: SwapLimitParams): Promise<Swap> {\n  if (options?.developer) options.logger?.('YOU SPECIFIED A DEVELOPER OPTIONS. BE CAREFUL!');\n  if (amount === '') throw new Error('Amount can not be empty');\n  if (assetIn === '') throw new Error('AssetIn can not be empty');\n  if (assetOut === '') throw new Error('AssetOut can not be empty');\n  if (feeAsset === '') throw new Error('Fee asset can not be empty');\n  if (price === '') throw new Error('Price can not be empty');\n\n  const amountBN = new BigNumber(amount);\n  if (amountBN.isNaN()) throw new Error(`Amount '${amountBN.toString()}' is not a number`);\n  if (amountBN.lte(0)) throw new Error(`Amount '${amountBN.toString()}' should be greater than 0`);\n\n  const priceBN = new BigNumber(price);\n  if (priceBN.isNaN()) throw new Error(`Price '${priceBN.toString()}' is not a number`);\n  if (priceBN.lte(0)) throw new Error('Price should be greater than 0');\n\n  const walletAddress = await signer.getAddress();\n  options?.logger?.(`Wallet address is ${walletAddress}`);\n\n  const {\n    blockchainService, aggregator, provider, chainId,\n  } = unit;\n  const {\n    exchangeContractAddress,\n    matcherAddress,\n    assetToAddress,\n    swapExecutorContractAddress,\n  } = await simpleFetch(blockchainService.getInfo)();\n  const nativeCryptocurrency = getNativeCryptocurrencyName(assetToAddress);\n\n  const exchangeContract = Exchange__factory.connect(exchangeContractAddress, provider);\n  const feeAssets = await simpleFetch(blockchainService.getPlatformFees)({ walletAddress, assetIn, assetOut });\n  const allPrices = await simpleFetch(blockchainService.getPricesWithQuoteAsset)();\n  const gasPriceWei = await simpleFetch(blockchainService.getGasPriceWei)();\n  const { factories, WETHAddress } = await simpleFetch(blockchainService.getPoolsConfig)();\n  must(WETHAddress, 'WETHAddress is not defined');\n  const poolExchangesList = factories !== undefined ? Object.keys(factories) : [];\n\n  const gasPriceGwei = ethers.formatUnits(gasPriceWei, 'gwei').toString();\n\n  const assetInAddress = assetToAddress[assetIn];\n  if (assetInAddress === undefined) throw new Error(`Asset '${assetIn}' not found`);\n  const feeAssetAddress = assetToAddress[feeAsset];\n  if (feeAssetAddress === undefined) {\n    throw new Error(`Fee asset '${feeAsset}' not found. Available assets: ${Object.keys(feeAssets).join(', ')}`);\n  }\n\n  const balances = await getBalances(\n    {\n      [assetIn]: assetInAddress,\n      [feeAsset]: feeAssetAddress,\n      [nativeCryptocurrency]: ethers.ZeroAddress,\n    },\n    aggregator,\n    walletAddress,\n    exchangeContract,\n    provider,\n  );\n\n  const balanceGuard = new BalanceGuard(\n    balances,\n    {\n      name: nativeCryptocurrency,\n      address: ethers.ZeroAddress,\n    },\n    provider,\n    signer,\n    options?.logger,\n  );\n\n  const swapInfo = await simpleFetch(aggregator.getSwapInfo)(\n    assetIn,\n    assetOut,\n    amountBN.toString(),\n    options?.instantSettlement,\n    options?.poolOnly !== undefined && options.poolOnly\n      ? 'pools'\n      : undefined,\n    isTradeBuy,\n  );\n\n  const { exchanges: swapExchanges, exchangeContractPath } = swapInfo;\n\n  const [firstSwapExchange] = swapExchanges;\n\n  if (swapExchanges.length > 0) options?.logger?.(`Swap exchanges: ${swapExchanges.join(', ')}`);\n\n  if (swapInfo?.isTradeBuy && amountBN.lt(swapInfo.minAmountOut)) {\n    throw new Error(`Amount is too low. Min amountOut is ${swapInfo.minAmountOut} ${assetOut}`);\n  }\n\n  if (!(swapInfo?.isTradeBuy) && amountBN.lt(swapInfo.minAmountIn)) {\n    throw new Error(`Amount is too low. Min amountIn is ${swapInfo.minAmountIn} ${assetIn}`);\n  }\n\n  if (swapInfo.orderInfo === null) throw new Error(swapInfo.executionInfo);\n\n  const [baseAssetName, quoteAssetName] = swapInfo.orderInfo.assetPair.split('-');\n  if (baseAssetName === undefined) throw new Error('Base asset name is undefined');\n  if (quoteAssetName === undefined) throw new Error('Quote asset name is undefined');\n\n  const pairConfig = await simpleFetch(aggregator.getPairConfig)(`${baseAssetName}-${quoteAssetName}`);\n  const minQtyBN = new BigNumber(pairConfig.minQty);\n  const qtyPrecisionBN = new BigNumber(pairConfig.qtyPrecision);\n  const pricePrecisionBN = new BigNumber(pairConfig.pricePrecision);\n  const minPrice = new BigNumber(pairConfig.minPrice);\n  const maxPrice = new BigNumber(pairConfig.maxPrice);\n\n  const qtyDecimalPlaces = amountBN.dp();\n  const priceDecimalPlaces = priceBN.dp();\n\n  if (qtyDecimalPlaces === null) throw new Error('Qty decimal places is null. Likely amount is -Infinity, +Infinity or NaN');\n  if (qtyPrecisionBN.lt(qtyDecimalPlaces)) {\n    throw new Error(\n      `Actual amount decimal places (${qtyDecimalPlaces}) is greater than max allowed decimal places (${qtyPrecisionBN.toString()}) on pair ${baseAssetName}-${quoteAssetName}.`\n    );\n  }\n  if (priceDecimalPlaces === null) throw new Error('Price decimal places is null. Likely price is -Infinity, +Infinity or NaN');\n  if (pricePrecisionBN.lt(priceDecimalPlaces)) {\n    throw new Error(\n      `Actual price decimal places (${priceDecimalPlaces}) is greater than max allowed decimal places (${pricePrecisionBN.toString()}) on pair ${baseAssetName}-${quoteAssetName}.`\n    );\n  }\n\n  if (priceBN.lt(minPrice)) {\n    throw new Error(`Price is too low. Min price is ${minPrice.toString()} ${quoteAssetName}`);\n  }\n  if (priceBN.gt(maxPrice)) {\n    throw new Error(`Price is too high. Max price is ${maxPrice.toString()} ${quoteAssetName}`);\n  }\n\n  options?.logger?.(`Safe price is ${swapInfo.orderInfo.safePrice} ${quoteAssetName}`);\n  // BTEMP — better than or equal market price\n  const priceIsBTEMP = isTradeBuy\n    ? priceBN.gte(swapInfo.orderInfo.safePrice)\n    : priceBN.lte(swapInfo.orderInfo.safePrice);\n\n  options?.logger?.(`Your price ${priceBN.toString()} is ${priceIsBTEMP ? 'better than or equal' : 'worse than'} market price ${swapInfo.orderInfo.safePrice}`);\n\n  let route: 'aggregator' | 'pool';\n\n  if (options?.developer?.route !== undefined) {\n    if (options.developer.route === 'pool' && !priceIsBTEMP) {\n      throw new Error(\n        'CONFLICT: Pool execution is not available for this swap.' +\n        ' Price is worse than market price. Please unset \"route\" option or set it to \"aggregator\"'\n      );\n    }\n    route = options.developer.route;\n    options.logger?.(`Swap is through ${route} (because route forced to ${route})`);\n  } else if (options?.poolOnly !== undefined && options.poolOnly) {\n    if (!priceIsBTEMP) {\n      throw new Error(\n        'CONFLICT: Pool execution is not available for this swap.' +\n        ' Price is worse than market price. Please disable \"poolOnly\" option'\n      );\n    }\n    options.logger?.('Swap is through pool (because \"poolOnly\" option is true)');\n    route = 'pool';\n  } else if (\n    poolExchangesList.length > 0 &&\n    swapExchanges.length === 1 &&\n    firstSwapExchange !== undefined &&\n    poolExchangesList.some((poolExchange) => poolExchange === firstSwapExchange) &&\n    priceIsBTEMP\n  ) {\n    options?.logger?.(`Swap is through pool [via ${firstSwapExchange}] (detected by \"exchanges\" field)`);\n    route = 'pool';\n  } else {\n    route = 'aggregator';\n  }\n\n  if (route === 'pool') {\n    let factoryAddress: string | undefined;\n    if (factories && firstSwapExchange !== undefined) {\n      factoryAddress = factories[firstSwapExchange];\n      if (factoryAddress !== undefined) options?.logger?.(`Factory address is ${factoryAddress}. Exchange is ${firstSwapExchange}`);\n    }\n\n    const amountSpend = !(swapInfo?.isTradeBuy)\n      ? swapInfo.amountIn\n      : new BigNumber(swapInfo.orderInfo.amount).multipliedBy(swapInfo.orderInfo.safePrice)\n\n    balanceGuard.registerRequirement({\n      reason: 'Amount spend',\n      asset: {\n        name: assetIn,\n        address: assetInAddress,\n      },\n      amount: amountSpend.toString(),\n      spenderAddress: exchangeContractAddress,\n      sources: getAvailableSources('amount', assetInAddress, 'pool'),\n    });\n\n    const amountReceive = swapInfo?.isTradeBuy\n      ? swapInfo.amountOut\n      : new BigNumber(swapInfo.orderInfo.amount).multipliedBy(swapInfo.orderInfo.safePrice)\n    const amountSpendBlockchainParam = normalizeNumber(\n      amountSpend,\n      INTERNAL_PROTOCOL_PRECISION,\n      BigNumber.ROUND_CEIL,\n    );\n    const amountReceiveBlockchainParam = normalizeNumber(\n      amountReceive,\n      INTERNAL_PROTOCOL_PRECISION,\n      BigNumber.ROUND_FLOOR,\n    );\n\n    const { calldata, swapDescription, value } = await generateSwapCalldata({\n      amount: amountSpendBlockchainParam,\n      minReturnAmount: amountReceiveBlockchainParam,\n      path: exchangeContractPath.filter(isValidSingleSwap),\n      initiatorAddress: walletAddress,\n      receiverAddress: walletAddress,\n      provider,\n\n      matcher: matcherAddress,\n      feeToken: feeAssetAddress,\n      fee: 0,\n      exchangeContractAddress,\n      swapExecutorContractAddress,\n      wethAddress: WETHAddress,\n\n      curveRegistryAddress: safeGet(unit.contracts, 'curveRegistry'),\n    })\n\n    const unsignedSwapThroughPoolsTx = await exchangeContract.swap.populateTransaction(\n      swapExecutorContractAddress,\n      swapDescription,\n      new Uint8Array(0),\n      calldata,\n      {\n        value\n      }\n    );\n\n    unsignedSwapThroughPoolsTx.chainId = BigInt(parseInt(chainId, 10));\n    unsignedSwapThroughPoolsTx.gasPrice = BigInt(gasPriceWei);\n\n    unsignedSwapThroughPoolsTx.from = walletAddress;\n    const amountSpendBN = new BigNumber(amountSpend);\n\n    let txValue = new BigNumber(0);\n    const denormalizedAssetInExchangeBalance = balances[assetIn]?.exchange;\n    if (denormalizedAssetInExchangeBalance === undefined) throw new Error(`Asset '${assetIn}' exchange balance is not found`);\n    if (assetIn === nativeCryptocurrency && amountSpendBN.gt(denormalizedAssetInExchangeBalance)) {\n      txValue = amountSpendBN.minus(denormalizedAssetInExchangeBalance);\n    }\n    unsignedSwapThroughPoolsTx.value = normalizeNumber(\n      txValue.dp(INTERNAL_PROTOCOL_PRECISION, BigNumber.ROUND_CEIL),\n      NATIVE_CURRENCY_PRECISION,\n      BigNumber.ROUND_CEIL,\n    );\n    unsignedSwapThroughPoolsTx.gasLimit = BigInt(SWAP_THROUGH_ORION_POOL_GAS_LIMIT);\n\n    const transactionCost = BigInt(SWAP_THROUGH_ORION_POOL_GAS_LIMIT) * BigInt(gasPriceWei);\n    const denormalizedTransactionCost = denormalizeNumber(transactionCost, BigInt(NATIVE_CURRENCY_PRECISION));\n\n    balanceGuard.registerRequirement({\n      reason: 'Network fee',\n      asset: {\n        name: nativeCryptocurrency,\n        address: ethers.ZeroAddress,\n      },\n      amount: denormalizedTransactionCost.toString(),\n      sources: getAvailableSources('network_fee', ethers.ZeroAddress, 'pool'),\n    });\n\n    // if (value.gt(0)) {\n    //   balanceGuard.registerRequirement({\n    //     reason: 'Transaction value (extra amount)',\n    //     asset: {\n    //       name: nativeCryptocurrency,\n    //       address: ethers.ZeroAddress,\n    //     },\n    //     amount: value.toString(),\n    //     sources: getAvailableSources('amount', ethers.ZeroAddress, 'pool'),\n    //   });\n    // }\n\n    await balanceGuard.check(options?.autoApprove);\n\n    const nonce = await provider.getTransactionCount(walletAddress, 'pending');\n    unsignedSwapThroughPoolsTx.nonce = nonce;\n\n    options?.logger?.('Signing transaction...');\n    const swapThroughOrionPoolTxResponse = await signer.sendTransaction(unsignedSwapThroughPoolsTx);\n    options?.logger?.(`Transaction sent. Tx hash: ${swapThroughOrionPoolTxResponse.hash}`);\n    return {\n      amountOut: swapInfo.amountOut,\n      wait: swapThroughOrionPoolTxResponse.wait.bind(swapThroughOrionPoolTxResponse),\n      through: 'pool',\n      txHash: swapThroughOrionPoolTxResponse.hash,\n    };\n  }\n  options?.logger?.('Swap through aggregator');\n\n  if (amountBN.lt(minQtyBN)) {\n    throw new Error(`Amount is too low. Min amount is ${minQtyBN.toString()} ${baseAssetName}`);\n  }\n\n  const baseAssetAddress = assetToAddress[baseAssetName];\n  if (baseAssetAddress === undefined) throw new Error(`No asset address for ${baseAssetName}`);\n  const quoteAssetAddress = assetToAddress[quoteAssetName];\n  if (quoteAssetAddress === undefined) throw new Error(`No asset address for ${quoteAssetName}`);\n\n  const safePriceWithAppliedPrecision = priceBN\n    .decimalPlaces(\n      pairConfig.pricePrecision,\n      swapInfo.orderInfo.side === 'BUY'\n        ? BigNumber.ROUND_CEIL\n        : BigNumber.ROUND_FLOOR,\n    );\n\n  balanceGuard.registerRequirement({\n    reason: 'Amount',\n    asset: {\n      name: assetIn,\n      address: assetInAddress,\n    },\n    amount: swapInfo.orderInfo.side === 'SELL'\n      ? swapInfo.orderInfo.amount.toString()\n      : safePriceWithAppliedPrecision.multipliedBy(swapInfo.orderInfo.amount).toString(),\n    spenderAddress: exchangeContractAddress,\n    sources: getAvailableSources('amount', assetInAddress, 'aggregator'),\n  });\n\n  // Fee calculation\n  const feePercent = feeAssets[feeAsset];\n  if (feePercent === undefined) throw new Error(`Fee asset ${feeAsset} not available`);\n\n  const { serviceFeeInFeeAsset, networkFeeInFeeAsset, totalFeeInFeeAsset } = calculateFeeInFeeAsset(\n    swapInfo.orderInfo.amount,\n    gasPriceGwei,\n    feePercent,\n    baseAssetAddress,\n    ethers.ZeroAddress,\n    feeAssetAddress,\n    allPrices.prices,\n  );\n\n  if (feeAsset === assetOut) {\n    options?.logger?.('Fee asset equals received asset. The fee can be paid from the amount received');\n    options?.logger?.(`Set extra balance: + ${swapInfo.amountOut} ${assetOut} to exchange`);\n\n    balanceGuard.setExtraBalance(feeAsset, swapInfo.amountOut, 'exchange');\n  }\n\n  balanceGuard.registerRequirement({\n    reason: 'Network fee',\n    asset: {\n      name: feeAsset,\n      address: feeAssetAddress,\n    },\n    amount: networkFeeInFeeAsset.toString(),\n    spenderAddress: exchangeContractAddress,\n    sources: getAvailableSources('network_fee', feeAssetAddress, 'aggregator'),\n  });\n\n  balanceGuard.registerRequirement({\n    reason: 'Service fee',\n    asset: {\n      name: feeAsset,\n      address: feeAssetAddress,\n    },\n    amount: serviceFeeInFeeAsset.toString(),\n    spenderAddress: exchangeContractAddress,\n    sources: getAvailableSources('service_fee', feeAssetAddress, 'aggregator'),\n  });\n\n  await balanceGuard.check(options?.autoApprove);\n\n  const signedOrder = await signOrder(\n    baseAssetAddress,\n    quoteAssetAddress,\n    swapInfo.orderInfo.side,\n    safePriceWithAppliedPrecision.toString(),\n    swapInfo.orderInfo.amount,\n    totalFeeInFeeAsset,\n    walletAddress,\n    matcherAddress,\n    feeAssetAddress,\n    signer,\n    chainId,\n  );\n  const orderIsOk = await exchangeContract.validateOrder(signedOrder);\n  if (!orderIsOk) throw new Error('Order is not valid');\n\n  const { orderId } = await simpleFetch(aggregator.placeOrder)(signedOrder, false);\n  options?.logger?.(`Order placed. Order id: ${orderId}`);\n\n  return {\n    amountOut: amountBN.multipliedBy(safePriceWithAppliedPrecision).toNumber(),\n    wait: () => new Promise<z.infer<typeof orderSchema>>((resolve, reject) => {\n      const timeout = setTimeout(() => {\n        reject(new Error('Timeout'))\n      }, 60000);\n      const interval = setInterval(() => {\n        simpleFetch(aggregator.getOrder)(orderId).then((data) => {\n          if (data.order.status === 'SETTLED') {\n            options?.logger?.(`Order ${orderId} settled`);\n            clearTimeout(timeout);\n            clearInterval(interval);\n            resolve(data);\n          } else {\n            options?.logger?.(`Order ${orderId} status: ${data.order.status}`);\n          }\n        }).catch((e) => {\n          if (!(e instanceof Error)) throw new Error('Not an error');\n          options?.logger?.(`Error while getting order status: ${e.message}`);\n        });\n      }, 1000);\n    }),\n    through: 'aggregator',\n    id: orderId,\n  };\n}\n","import { ethers } from 'ethers';\nimport type { Source } from '../types.js';\n\nexport default function getAvailableFundsSources(\n  expenseType: 'amount' | 'network_fee' | 'service_fee',\n  assetAddress: string,\n  route: 'aggregator' | 'pool',\n): Source[] {\n  switch (route) {\n    case 'aggregator':\n      if (assetAddress === ethers.ZeroAddress) return ['exchange']; // We can't take native crypto from wallet\n      return ['exchange', 'wallet']; // We can take any token amount from exchange + wallet. Order is important!\n    case 'pool':\n      if (expenseType === 'network_fee') return ['wallet']; // Network fee is always taken from wallet\n      return ['exchange', 'wallet']; // We can take any token amount from exchange + wallet (specify 'value' for 'pool'). Order is important!\n    default:\n      throw new Error('Unknown route item');\n  }\n}\n","export { default as signCancelOrder } from './signCancelOrder.js';\nexport { default as signOrder } from './signOrder.js';\n","import type { TypedDataSigner } from '@ethersproject/abstract-signer';\nimport { ethers } from 'ethers';\nimport CANCEL_ORDER_TYPES from '../constants/cancelOrderTypes.js';\nimport type { CancelOrderRequest, SignedCancelOrderRequest, SupportedChainId } from '../types.js';\nimport getDomainData from './getDomainData.js';\n\ntype SignerWithTypedDataSign = ethers.Signer & TypedDataSigner;\n\nconst signCancelOrder = async (\n  senderAddress: string,\n  id: string,\n  signer: ethers.Signer,\n  chainId: SupportedChainId,\n) => {\n  const cancelOrderRequest: CancelOrderRequest = {\n    id,\n    senderAddress,\n  };\n  // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n  const typedDataSigner = signer as SignerWithTypedDataSign;\n\n  const signature = await typedDataSigner.signTypedData(\n    getDomainData(chainId),\n    CANCEL_ORDER_TYPES,\n    cancelOrderRequest,\n  );\n\n  // https://github.com/poap-xyz/poap-fun/pull/62#issue-928290265\n  // \"Signature's v was always send as 27 or 28, but from Ledger was 0 or 1\"\n  const fixedSignature = ethers.Signature.from(signature).serialized;\n\n  // if (!fixedSignature) throw new Error(\"Can't sign order cancel\");\n\n  const signedCancelOrderReqeust: SignedCancelOrderRequest = {\n    ...cancelOrderRequest,\n    signature: fixedSignature,\n  };\n  return signedCancelOrderReqeust;\n};\n\nexport default signCancelOrder;\n","{\n    \"name\": \"Orion Exchange\",\n    \"version\": \"1\",\n    \"salt\": \"0xf2d857f4a3edcb9b78b4d503bfe733db1e3f6cdc2b7971ee739626c97e86a557\"\n}","import type { SupportedChainId } from '../types.js';\nimport eip712DomainData from '../config/eip712DomainData.json' assert { type: 'json' };\nimport eip712DomainSchema from '../config/schemas/eip712DomainSchema.js';\n\nconst EIP712Domain = eip712DomainSchema.parse(eip712DomainData);\n\nfunction removeUndefined<T>(obj: Record<string, T | undefined>) {\n  const newObj: Partial<Record<string, T>> = {};\n  for (const [key, value] of Object.entries(obj)) {\n    if (value !== undefined) {\n      newObj[key] = value;\n    }\n  }\n  return newObj;\n}\n\n/**\n * See {@link https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator}\n */\nconst getDomainData = (chainId: SupportedChainId) => ({\n  ...removeUndefined(EIP712Domain),\n  chainId,\n});\n\nexport default getDomainData;\n","import type { TypedDataSigner } from '@ethersproject/abstract-signer';\nimport { BigNumber } from 'bignumber.js';\nimport { ethers } from 'ethers';\nimport { INTERNAL_PROTOCOL_PRECISION } from '../constants/index.js';\nimport ORDER_TYPES from '../constants/orderTypes.js';\nimport type { Order, SignedOrder, SupportedChainId } from '../types.js';\nimport normalizeNumber from '../utils/normalizeNumber.js';\nimport getDomainData from './getDomainData.js';\nimport hashOrder from './hashOrder.js';\n\nconst DEFAULT_EXPIRATION = 29 * 24 * 60 * 60 * 1000; // 29 days\n\ntype SignerWithTypedDataSign = ethers.Signer & TypedDataSigner;\n\nexport const signOrder = async (\n  baseAssetAddr: string,\n  quoteAssetAddr: string,\n  side: 'BUY' | 'SELL',\n  price: BigNumber.Value,\n  amount: BigNumber.Value,\n  matcherFee: BigNumber.Value,\n  senderAddress: string,\n  matcherAddress: string,\n  serviceFeeAssetAddr: string,\n  signer: ethers.Signer,\n  chainId: SupportedChainId,\n) => {\n  const nonce = Date.now();\n  const expiration = nonce + DEFAULT_EXPIRATION;\n\n  const order: Order = {\n    senderAddress,\n    matcherAddress,\n    baseAsset: baseAssetAddr,\n    quoteAsset: quoteAssetAddr,\n    matcherFeeAsset: serviceFeeAssetAddr,\n    amount: Number(normalizeNumber(\n      amount,\n      INTERNAL_PROTOCOL_PRECISION,\n      BigNumber.ROUND_FLOOR,\n    )),\n    price: Number(normalizeNumber(\n      price,\n      INTERNAL_PROTOCOL_PRECISION,\n      BigNumber.ROUND_FLOOR,\n    )),\n    matcherFee: Number(normalizeNumber(\n      matcherFee,\n      INTERNAL_PROTOCOL_PRECISION,\n      BigNumber.ROUND_CEIL, // ROUND_CEIL because we don't want get \"not enough fee\" error\n    )),\n    nonce,\n    expiration,\n    buySide: side === 'BUY' ? 1 : 0,\n  };\n\n  // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n  const typedDataSigner = signer as SignerWithTypedDataSign;\n\n  const signature = await typedDataSigner.signTypedData(\n    getDomainData(chainId),\n    ORDER_TYPES,\n    order,\n  );\n\n  // https://github.com/poap-xyz/poap-fun/pull/62#issue-928290265\n  // \"Signature's v was always send as 27 or 28, but from Ledger was 0 or 1\"\n  const fixedSignature = ethers.Signature.from(signature).serialized;\n\n  // if (!fixedSignature) throw new Error(\"Can't sign order\");\n\n  const signedOrder: SignedOrder = {\n    ...order,\n    id: hashOrder(order),\n    signature: fixedSignature,\n  };\n  return signedOrder;\n};\n\nexport default signOrder;\n","import { ethers, keccak256 } from 'ethers';\nimport type { Order } from '../types.js';\n\nconst ORDER_TYPEHASH = \"0xb5132db62dfceb466f2f8aee7a039db36a99772e5a9771d28388a5f9baad7c54\"\n\nexport default function getOrderHash(order: Order) {\n\tconst abiCoder = ethers.AbiCoder.defaultAbiCoder()\n\n\tconst { senderAddress, matcherAddress, baseAsset, quoteAsset, matcherFeeAsset, amount, price, matcherFee, nonce, expiration, buySide } = order\n\tconst orderBytes = abiCoder.encode(\n\t\t[\"bytes32\", \"address\", \"address\", \"address\", \"address\", \"address\", \"uint64\", \"uint64\", \"uint64\", \"uint64\", \"uint64\", \"uint8\"],\n\t\t[ORDER_TYPEHASH, senderAddress, matcherAddress, baseAsset, quoteAsset, matcherFeeAsset, amount, price, matcherFee, nonce, expiration, buySide]\n\t)\n\n\treturn keccak256(orderBytes)\n}","import { type Factory } from '../types.js';\nimport { factories } from '../index.js';\n\nconst isValidFactory = (factory: string): factory is Factory => {\n  return factories.some((f) => f === factory);\n};\n\nexport default isValidFactory;\n","import { BigNumber } from 'bignumber.js';\nimport { ethers } from 'ethers';\nimport { Exchange__factory } from '@orionprotocol/contracts/lib/ethers-v6/index.js';\nimport getBalances from '../../utils/getBalances.js';\nimport BalanceGuard from '../../BalanceGuard.js';\nimport getAvailableSources from '../../utils/getAvailableFundsSources.js';\nimport { INTERNAL_PROTOCOL_PRECISION, NATIVE_CURRENCY_PRECISION, SWAP_THROUGH_ORION_POOL_GAS_LIMIT } from '../../constants/index.js';\nimport getNativeCryptocurrencyName from '../../utils/getNativeCryptocurrencyName.js';\nimport { calculateFeeInFeeAsset, denormalizeNumber, normalizeNumber } from '../../utils/index.js';\nimport { signOrder } from '../../crypt/index.js';\nimport type orderSchema from '../../services/Aggregator/schemas/orderSchema.js';\nimport type { z } from 'zod';\nimport type { SwapLimitParams } from './swapLimit.js';\nimport { simpleFetch } from 'simple-typed-fetch';\nimport { generateSwapCalldata } from './generateSwapCalldata.js';\nimport isValidFactory from '../../utils/isValidFactory.js';\nimport type { SingleSwap } from '../../types.js';\nimport { must, safeGet } from '../../utils/safeGetters.js';\n\nexport type SwapMarketParams = Omit<SwapLimitParams, 'price'> & {\n  slippagePercent: BigNumber.Value\n}\n\ntype AggregatorOrder = {\n  amountOut: number\n  through: 'aggregator'\n  id: string\n  wait: () => Promise<z.infer<typeof orderSchema>>\n}\n\ntype PoolSwap = {\n  amountOut: number\n  through: 'pool'\n  txHash: string\n  wait: (confirmations?: number | undefined) => Promise<ethers.TransactionReceipt | null>\n}\n\nexport type Swap = AggregatorOrder | PoolSwap;\n\nconst isValidSingleSwap = (singleSwap: Omit<SingleSwap, 'factory'> & { factory: string }): singleSwap is SingleSwap => {\n  return isValidFactory(singleSwap.factory);\n}\n\nexport default async function swapMarket({\n  assetIn,\n  assetOut,\n  amount,\n  feeAsset,\n  slippagePercent,\n  signer,\n  unit,\n  options,\n  isTradeBuy = false,\n}: SwapMarketParams): Promise<Swap> {\n  if (options?.developer) options.logger?.('YOU SPECIFIED A DEVELOPER OPTIONS. BE CAREFUL!');\n\n  if (amount === '') throw new Error('Amount can not be empty');\n  if (assetIn === '') throw new Error('AssetIn can not be empty');\n  if (assetOut === '') throw new Error('AssetOut can not be empty');\n  if (feeAsset === '') throw new Error('Fee asset can not be empty');\n  if (slippagePercent === '') throw new Error('Slippage percent can not be empty');\n\n  const amountBN = new BigNumber(amount);\n  if (amountBN.isNaN()) throw new Error(`Amount '${amountBN.toString()}' is not a number`);\n  if (amountBN.lte(0)) throw new Error(`Amount '${amountBN.toString()}' should be greater than 0`);\n\n  const slippagePercentBN = new BigNumber(slippagePercent);\n  if (slippagePercentBN.isNaN()) throw new Error(`Slippage percent '${slippagePercentBN.toString()}' is not a number`);\n  if (slippagePercentBN.lte(0)) throw new Error('Slippage percent should be greater than 0');\n  if (slippagePercentBN.gte(50)) throw new Error('Slippage percent should be less than 50');\n\n  const walletAddress = await signer.getAddress();\n  options?.logger?.(`Wallet address is ${walletAddress}`);\n\n  const {\n    blockchainService, aggregator, provider, chainId,\n  } = unit;\n  const {\n    exchangeContractAddress,\n    matcherAddress,\n    assetToAddress,\n    swapExecutorContractAddress,\n  } = await simpleFetch(blockchainService.getInfo)();\n  const nativeCryptocurrency = getNativeCryptocurrencyName(assetToAddress);\n\n  const exchangeContract = Exchange__factory.connect(exchangeContractAddress, provider);\n  const feeAssets = await simpleFetch(blockchainService.getPlatformFees)({ walletAddress, assetIn, assetOut });\n  const allPrices = await simpleFetch(blockchainService.getPricesWithQuoteAsset)();\n  const gasPriceWei = await simpleFetch(blockchainService.getGasPriceWei)();\n  const { factories, WETHAddress } = await simpleFetch(blockchainService.getPoolsConfig)();\n  must(WETHAddress, 'WETHAddress is not defined');\n  const poolExchangesList = factories !== undefined ? Object.keys(factories) : [];\n\n  const gasPriceGwei = ethers.formatUnits(gasPriceWei, 'gwei').toString();\n\n  const assetInAddress = assetToAddress[assetIn];\n  if (assetInAddress === undefined) throw new Error(`Asset '${assetIn}' not found`);\n  const feeAssetAddress = assetToAddress[feeAsset];\n  if (feeAssetAddress === undefined) {\n    throw new Error(`Fee asset '${feeAsset}' not found. Available assets: ${Object.keys(feeAssets).join(', ')}`);\n  }\n\n  const balances = await getBalances(\n    {\n      [assetIn]: assetInAddress,\n      [feeAsset]: feeAssetAddress,\n      [nativeCryptocurrency]: ethers.ZeroAddress,\n    },\n    aggregator,\n    walletAddress,\n    exchangeContract,\n    provider,\n  );\n\n  const balanceGuard = new BalanceGuard(\n    balances,\n    {\n      name: nativeCryptocurrency,\n      address: ethers.ZeroAddress,\n    },\n    provider,\n    signer,\n    options?.logger,\n  );\n\n  const swapInfo = await simpleFetch(aggregator.getSwapInfo)(\n    assetIn,\n    assetOut,\n    amountBN.toString(),\n    options?.instantSettlement,\n    options?.poolOnly !== undefined && options.poolOnly\n      ? 'pools'\n      : undefined,\n    isTradeBuy,\n  );\n\n  const { exchanges: swapExchanges, exchangeContractPath } = swapInfo;\n\n  const [firstSwapExchange] = swapExchanges;\n\n  if (swapExchanges.length > 0) options?.logger?.(`Swap exchanges: ${swapExchanges.join(', ')}`);\n\n  if (swapInfo?.isTradeBuy && amountBN.lt(swapInfo.minAmountOut)) {\n    throw new Error(`Amount is too low. Min amountOut is ${swapInfo.minAmountOut} ${assetOut}`);\n  }\n\n  if (!(swapInfo?.isTradeBuy) && amountBN.lt(swapInfo.minAmountIn)) {\n    throw new Error(`Amount is too low. Min amountIn is ${swapInfo.minAmountIn} ${assetIn}`);\n  }\n\n  if (swapInfo.orderInfo === null) throw new Error(swapInfo.executionInfo);\n\n  const [baseAssetName, quoteAssetName] = swapInfo.orderInfo.assetPair.split('-');\n  if (baseAssetName === undefined) throw new Error('Base asset name is undefined');\n  if (quoteAssetName === undefined) throw new Error('Quote asset name is undefined');\n\n  const pairConfig = await simpleFetch(aggregator.getPairConfig)(`${baseAssetName}-${quoteAssetName}`);\n  const qtyPrecisionBN = new BigNumber(pairConfig.qtyPrecision);\n  const qtyDecimalPlaces = amountBN.dp();\n\n  if (qtyDecimalPlaces === null) throw new Error('Qty decimal places is null. Likely amount is -Infinity, +Infinity or NaN');\n\n  if (qtyPrecisionBN.lt(qtyDecimalPlaces)) {\n    throw new Error(\n      `Actual amount decimal places (${qtyDecimalPlaces}) is greater than max allowed decimal places (${qtyPrecisionBN.toString()}) on pair ${baseAssetName}-${quoteAssetName}.`\n    );\n  }\n\n  let route: 'aggregator' | 'pool';\n\n  const percent = new BigNumber(slippagePercent).div(100);\n\n  if (options?.developer?.route !== undefined) {\n    route = options.developer.route;\n    options.logger?.(`Swap is through ${route} (because route forced to ${route})`);\n  } else if (options?.poolOnly !== undefined && options.poolOnly) {\n    options.logger?.('Swap is through pool (because \"poolOnly\" option is true)');\n    route = 'pool';\n  } else if (\n    poolExchangesList.length > 0 &&\n    swapExchanges.length === 1 &&\n    firstSwapExchange !== undefined &&\n    poolExchangesList.some((poolExchange) => poolExchange === firstSwapExchange)\n  ) {\n    options?.logger?.(`Swap is through pool [via ${firstSwapExchange}] (detected by \"exchanges\" field)`);\n    route = 'pool';\n  } else {\n    route = 'aggregator';\n  }\n\n  if (route === 'pool') {\n    let factoryAddress: string | undefined;\n    if (factories && firstSwapExchange !== undefined) {\n      factoryAddress = factories[firstSwapExchange];\n      if (factoryAddress !== undefined) options?.logger?.(`Factory address is ${factoryAddress}. Exchange is ${firstSwapExchange}`);\n    }\n\n    const amountOutWithSlippage = new BigNumber(swapInfo.amountOut)\n      .multipliedBy(new BigNumber(1).minus(percent))\n      .toString();\n    const amountInWithSlippage = new BigNumber(swapInfo.amountIn)\n      .multipliedBy(new BigNumber(1).plus(percent))\n      .toString();\n\n    const amountSpend = swapInfo?.isTradeBuy ? amountInWithSlippage : swapInfo.amountIn;\n\n    balanceGuard.registerRequirement({\n      reason: 'Amount spend',\n      asset: {\n        name: assetIn,\n        address: assetInAddress,\n      },\n      amount: amountSpend.toString(),\n      spenderAddress: exchangeContractAddress,\n      sources: getAvailableSources('amount', assetInAddress, 'pool'),\n    });\n\n    const amountReceive = swapInfo?.isTradeBuy ? amountOutWithSlippage : swapInfo.amountOut;\n    const amountSpendBlockchainParam = normalizeNumber(\n      amountSpend,\n      INTERNAL_PROTOCOL_PRECISION,\n      BigNumber.ROUND_CEIL,\n    );\n    const amountReceiveBlockchainParam = normalizeNumber(\n      amountReceive,\n      INTERNAL_PROTOCOL_PRECISION,\n      BigNumber.ROUND_FLOOR,\n    );\n    const { calldata, swapDescription, value } = await generateSwapCalldata({\n      amount: amountSpendBlockchainParam,\n      minReturnAmount: amountReceiveBlockchainParam,\n      path: exchangeContractPath.filter(isValidSingleSwap),\n      initiatorAddress: walletAddress,\n      receiverAddress: walletAddress,\n      provider,\n\n      matcher: matcherAddress,\n      feeToken: feeAssetAddress,\n      fee: 0,\n      exchangeContractAddress,\n      swapExecutorContractAddress,\n      wethAddress: WETHAddress,\n\n      curveRegistryAddress: safeGet(unit.contracts, 'curveRegistry'),\n    })\n\n    const unsignedSwapThroughPoolsTx = await exchangeContract.swap.populateTransaction(\n      swapExecutorContractAddress,\n      swapDescription,\n      new Uint8Array(0),\n      calldata,\n      {\n        value\n      }\n    );\n\n    unsignedSwapThroughPoolsTx.chainId = BigInt(parseInt(chainId, 10));\n    unsignedSwapThroughPoolsTx.gasPrice = BigInt(gasPriceWei);\n\n    unsignedSwapThroughPoolsTx.from = walletAddress;\n    const amountSpendBN = new BigNumber(amountSpend);\n\n    let txValue = new BigNumber(0);\n    const denormalizedAssetInExchangeBalance = balances[assetIn]?.exchange;\n    if (denormalizedAssetInExchangeBalance === undefined) throw new Error(`Asset '${assetIn}' exchange balance is not found`);\n    if (assetIn === nativeCryptocurrency && amountSpendBN.gt(denormalizedAssetInExchangeBalance)) {\n      txValue = amountSpendBN.minus(denormalizedAssetInExchangeBalance);\n    }\n    unsignedSwapThroughPoolsTx.value = normalizeNumber(\n      txValue.dp(INTERNAL_PROTOCOL_PRECISION, BigNumber.ROUND_CEIL),\n      NATIVE_CURRENCY_PRECISION,\n      BigNumber.ROUND_CEIL,\n    );\n    unsignedSwapThroughPoolsTx.gasLimit = BigInt(SWAP_THROUGH_ORION_POOL_GAS_LIMIT);\n\n    const transactionCost = BigInt(SWAP_THROUGH_ORION_POOL_GAS_LIMIT) * BigInt(gasPriceWei);\n    const denormalizedTransactionCost = denormalizeNumber(transactionCost, BigInt(NATIVE_CURRENCY_PRECISION));\n\n    balanceGuard.registerRequirement({\n      reason: 'Network fee',\n      asset: {\n        name: nativeCryptocurrency,\n        address: ethers.ZeroAddress,\n      },\n      amount: denormalizedTransactionCost.toString(),\n      sources: getAvailableSources('network_fee', ethers.ZeroAddress, 'pool'),\n    });\n\n    // if (value.gt(0)) {\n    //   balanceGuard.registerRequirement({\n    //     reason: 'Transaction value (extra amount)',\n    //     asset: {\n    //       name: nativeCryptocurrency,\n    //       address: ethers.ZeroAddress,\n    //     },\n    //     amount: value.toString(),\n    //     sources: getAvailableSources('amount', ethers.ZeroAddress, 'pool'),\n    //   });\n    // }\n\n    await balanceGuard.check(options?.autoApprove);\n\n    const nonce = await provider.getTransactionCount(walletAddress, 'pending');\n    unsignedSwapThroughPoolsTx.nonce = nonce;\n\n    options?.logger?.('Signing transaction...');\n    const swapThroughOrionPoolTxResponse = await signer.sendTransaction(unsignedSwapThroughPoolsTx);\n    options?.logger?.(`Transaction sent. Tx hash: ${swapThroughOrionPoolTxResponse.hash}`);\n    return {\n      amountOut: swapInfo.amountOut,\n      wait: swapThroughOrionPoolTxResponse.wait.bind(swapThroughOrionPoolTxResponse),\n      through: 'pool',\n      txHash: swapThroughOrionPoolTxResponse.hash,\n    };\n  }\n  options?.logger?.('Swap through aggregator');\n\n  const slippageMultiplier = new BigNumber(1).plus(\n    swapInfo.orderInfo.side === 'SELL'\n      ? percent.negated() // e.g. -0.01\n      : percent, // e.g. 0.01\n  );\n\n  const safePriceWithDeviation = percent.isZero()\n    ? swapInfo.orderInfo.safePrice\n    : new BigNumber(swapInfo.orderInfo.safePrice)\n      .multipliedBy(slippageMultiplier)\n      .toString();\n\n  const baseAssetAddress = assetToAddress[baseAssetName];\n  if (baseAssetAddress === undefined) throw new Error(`No asset address for ${baseAssetName}`);\n  const quoteAssetAddress = assetToAddress[quoteAssetName];\n  if (quoteAssetAddress === undefined) throw new Error(`No asset address for ${quoteAssetName}`);\n\n  const safePriceWithAppliedPrecision = new BigNumber(safePriceWithDeviation)\n    .decimalPlaces(\n      pairConfig.pricePrecision,\n      swapInfo.orderInfo.side === 'BUY'\n        ? BigNumber.ROUND_CEIL\n        : BigNumber.ROUND_FLOOR,\n    );\n\n  balanceGuard.registerRequirement({\n    reason: 'Amount',\n    asset: {\n      name: assetIn,\n      address: assetInAddress,\n    },\n    amount: swapInfo.orderInfo.side === 'SELL'\n      ? swapInfo.orderInfo.amount.toString()\n      : safePriceWithAppliedPrecision.multipliedBy(swapInfo.orderInfo.amount).toString(),\n    spenderAddress: exchangeContractAddress,\n    sources: getAvailableSources('amount', assetInAddress, 'aggregator'),\n  });\n\n  // Fee calculation\n  const feePercent = feeAssets[feeAsset];\n  if (feePercent === undefined) throw new Error(`Fee asset ${feeAsset} not available`);\n\n  const { serviceFeeInFeeAsset, networkFeeInFeeAsset, totalFeeInFeeAsset } = calculateFeeInFeeAsset(\n    swapInfo.orderInfo.amount,\n    gasPriceGwei,\n    feePercent,\n    baseAssetAddress,\n    ethers.ZeroAddress,\n    feeAssetAddress,\n    allPrices.prices,\n  );\n\n  if (feeAsset === assetOut) {\n    options?.logger?.('Fee asset equals received asset. The fee can be paid from the amount received');\n    options?.logger?.(`Set extra balance: + ${swapInfo.amountOut} ${assetOut} to exchange`);\n\n    balanceGuard.setExtraBalance(feeAsset, swapInfo.amountOut, 'exchange');\n  }\n\n  balanceGuard.registerRequirement({\n    reason: 'Network fee',\n    asset: {\n      name: feeAsset,\n      address: feeAssetAddress,\n    },\n    amount: networkFeeInFeeAsset.toString(),\n    spenderAddress: exchangeContractAddress,\n    sources: getAvailableSources('network_fee', feeAssetAddress, 'aggregator'),\n  });\n\n  balanceGuard.registerRequirement({\n    reason: 'Service fee',\n    asset: {\n      name: feeAsset,\n      address: feeAssetAddress,\n    },\n    amount: serviceFeeInFeeAsset.toString(),\n    spenderAddress: exchangeContractAddress,\n    sources: getAvailableSources('service_fee', feeAssetAddress, 'aggregator'),\n  });\n\n  await balanceGuard.check(options?.autoApprove);\n\n  const signedOrder = await signOrder(\n    baseAssetAddress,\n    quoteAssetAddress,\n    swapInfo.orderInfo.side,\n    safePriceWithAppliedPrecision.toString(),\n    swapInfo.orderInfo.amount,\n    totalFeeInFeeAsset,\n    walletAddress,\n    matcherAddress,\n    feeAssetAddress,\n    signer,\n    chainId,\n  );\n  const orderIsOk = await exchangeContract.validateOrder(signedOrder);\n  if (!orderIsOk) throw new Error('Order is not valid');\n\n  const { orderId } = await simpleFetch(aggregator.placeOrder)(signedOrder, false);\n  options?.logger?.(`Order placed. Order id: ${orderId}`);\n\n  return {\n    amountOut: swapInfo.amountOut,\n    wait: () => new Promise<z.infer<typeof orderSchema>>((resolve, reject) => {\n      const timeout = setTimeout(() => {\n        reject(new Error('Timeout'))\n      }, 60000);\n      const interval = setInterval(() => {\n        simpleFetch(aggregator.getOrder)(orderId).then((data) => {\n          if (data.order.status === 'SETTLED') {\n            options?.logger?.(`Order ${orderId} settled`);\n            clearTimeout(timeout);\n            clearInterval(interval);\n            resolve(data);\n          } else {\n            options?.logger?.(`Order ${orderId} status: ${data.order.status}`);\n          }\n        }).catch((e) => {\n          if (!(e instanceof Error)) throw new Error('Not an error');\n          options?.logger?.(`Error while getting order status: ${e.message}`);\n        });\n      }, 1000);\n    }),\n    through: 'aggregator',\n    id: orderId,\n  };\n}\n","import type Unit from '../index.js';\nimport deposit, { type DepositParams } from './deposit.js';\nimport getSwapInfo, { type GetSwapInfoParams } from './getSwapInfo.js';\nimport { generateSwapCalldataWithUnit, type GenerateSwapCalldataWithUnitParams } from './generateSwapCalldata.js';\nimport withdraw, { type WithdrawParams } from './withdraw.js';\nimport type { SwapLimitParams } from './swapLimit.js';\nimport swapLimit from './swapLimit.js';\nimport swapMarket from './swapMarket.js';\nimport type { SwapMarketParams } from './swapMarket.js';\n\ntype PureDepositParams = Omit<DepositParams, 'unit'>\ntype PureWithdrawParams = Omit<WithdrawParams, 'unit'>\ntype PureGetSwapMarketInfoParams = Omit<GetSwapInfoParams, 'blockchainService' | 'aggregator'>\ntype PureGenerateSwapCalldataParams = Omit<GenerateSwapCalldataWithUnitParams, 'unit'>\ntype PureSwapLimitParams = Omit<SwapLimitParams, 'unit'>\ntype PureSwapMarketParams = Omit<SwapMarketParams, 'unit'>\n\nexport default class Exchange {\n  private readonly unit: Unit;\n\n  constructor(unit: Unit) {\n    this.unit = unit;\n  }\n\n  public getSwapInfo(params: PureGetSwapMarketInfoParams) {\n    return getSwapInfo({\n      aggregator: this.unit.aggregator,\n      blockchainService: this.unit.blockchainService,\n      ...params,\n    });\n  }\n\n  public deposit(params: PureDepositParams) {\n    return deposit({\n      ...params,\n      unit: this.unit,\n    });\n  }\n\n  public withdraw(params: PureWithdrawParams) {\n    return withdraw({\n      ...params,\n      unit: this.unit,\n    });\n  }\n\n  public generateSwapCalldata(params: PureGenerateSwapCalldataParams) {\n    return generateSwapCalldataWithUnit({\n      ...params,\n      unit: this.unit,\n    })\n  }\n\n  public swapLimit(params: PureSwapLimitParams) {\n    return swapLimit({\n      ...params,\n      unit: this.unit,\n    });\n  }\n\n  public swapMarket(params: PureSwapMarketParams) {\n    return swapMarket({\n      ...params,\n      unit: this.unit,\n    });\n  }\n}\n","import {\n  environmentResponseSchema,\n  getPointsAtResponseSchema,\n  getPoolResponseSchema,\n  listAmountResponseSchema,\n  listNFTOrderResponseSchema,\n  listPoolResponseSchema,\n  listPoolV2ResponseSchema,\n  listPoolV3ResponseSchema,\n  PoolV2InfoResponseSchema,\n  testIncrementorSchema,\n  veORNInfoResponseSchema,\n  votingInfoResponseSchema,\n} from './schemas';\nimport { fetchWithValidation } from 'simple-typed-fetch';\nimport { BigNumber } from 'bignumber.js';\nimport { WEEK_DAYS, YEAR } from '../../constants';\nimport { LOCK_START_TIME } from './constants';\n\ntype BasePayload = {\n  chainId: number\n  jsonrpc: '1.0'\n};\n\ntype GetEnvironmentPayload = BasePayload & {\n  model: 'Environment'\n  method: 'getEnvironment'\n  params: []\n};\n\ntype ListNFTOrderPayload = BasePayload & {\n  model: 'OrionV3NFTManager'\n  method: 'listNFTOrder'\n  params: [string]\n};\n\ntype GetPoolInfoPayload = BasePayload & {\n  model: 'OrionV3Factory' | 'OrionV2Factory'\n  method: 'getPoolInfo'\n  params: [string, string, string]\n};\n\ntype ListPoolPayload = BasePayload & {\n  model: 'OrionFarmV3'\n  method: 'listPool'\n  params: [string]\n};\n\ntype VeORNInfoPayload = BasePayload & {\n  model: 'veORN'\n  method: 'info'\n  params: [string]\n};\n\ntype GetPointsAtPayload = BasePayload & {\n  model: 'veORN'\n  method: 'pointsInfo'\n  params: [number, number]\n};\n\ntype ListAmountPayload = BasePayload & {\n  model: string\n  method: 'listAmount'\n  params: []\n};\n\ntype GetAmountByORNPayload = BasePayload & {\n  amountToken: number\n  timeLock: number\n};\n\ntype Payload =\n  | GetEnvironmentPayload\n  | ListNFTOrderPayload\n  | GetPoolInfoPayload\n  | ListPoolPayload\n  | VeORNInfoPayload\n  | GetPointsAtPayload\n  | ListAmountPayload\n  | GetAmountByORNPayload;\n\nclass IndexerService {\n  private readonly apiUrl: string;\n\n  private readonly chainId: number;\n\n  get api() {\n    return this.apiUrl;\n  }\n\n  constructor(apiUrl: string, chainId: number) {\n    this.apiUrl = apiUrl;\n    this.chainId = chainId;\n\n    this.getEnvironment = this.getEnvironment.bind(this);\n    this.listNFTOrder = this.listNFTOrder.bind(this);\n    this.getPoolInfo = this.getPoolInfo.bind(this);\n    this.getListPool = this.getListPool.bind(this);\n    this.listPoolV2 = this.listPoolV2.bind(this);\n    this.poolV2Info = this.poolV2Info.bind(this);\n    this.listPoolV3 = this.listPoolV3.bind(this);\n    this.veORNInfo = this.veORNInfo.bind(this);\n    this.getPointsAt = this.getPointsAt.bind(this);\n    this.listAmount = this.listAmount.bind(this);\n    this.getAmountByORN = this.getAmountByORN.bind(this);\n    this.getAmountAt = this.getAmountAt.bind(this);\n    this.getAmountAtCurrent = this.getAmountAtCurrent.bind(this);\n    this.getVotingInfo = this.getVotingInfo.bind(this);\n  }\n\n  readonly makeRPCPayload = (payload: Omit<Payload, 'chainId' | 'jsonrpc'>) => {\n    return JSON.stringify({\n      ...payload,\n      chainId: this.chainId,\n      jsonrpc: '1.0',\n    });\n  };\n\n  readonly veORNInfo = (address?: string) => {\n    return fetchWithValidation(this.apiUrl, veORNInfoResponseSchema, {\n      method: 'POST',\n      body: this.makeRPCPayload({\n        model: 'veORN',\n        method: 'info',\n        params: [address],\n      }),\n    });\n  };\n\n  /**\n   * @param {number} page - current page\n   * @param {number} [pageSize] - amount of items on one page\n   */\n  readonly getPointsAt = (page = 1, pageSize = 1000) => {\n    return fetchWithValidation(this.apiUrl, getPointsAtResponseSchema, {\n      method: 'POST',\n      body: this.makeRPCPayload({\n        model: 'veORN',\n        method: 'pointsAt',\n        params: [page, pageSize],\n      }),\n    });\n  };\n\n  /**\n   * @param {number} amount - amount\n   * @param {number} [timestamp = Date.now()] - timestamp, defaults to current time\n   */\n  readonly getAmountAt = (\n    amount: number,\n    timestamp = Date.now()\n  ): BigNumber => {\n    const finalTimestamp = timestamp / 1000;\n\n    // sqrt\n    return BigNumber(amount).dividedBy(this.getK(finalTimestamp));\n  };\n\n  /**\n   * @deprecated since version 69 in favor of getAmountAt\n   */\n  readonly getAmountAtCurrent = (amount: number): BigNumber => {\n    const timestamp = Date.now() / 1000;\n\n    // sqrt\n    return BigNumber(amount).dividedBy(this.getK(timestamp));\n  };\n\n  readonly getAmountByORN = (amountToken: string, lockingDays: number) => {\n    const alpha = 730 / (30 - Math.sqrt(730 / 7)) ** (1 / 3);\n\n    const deltaDaysBN = BigNumber(lockingDays);\n\n    if (deltaDaysBN.lte(0)) return BigNumber(0);\n\n    const multSQRT = deltaDaysBN.dividedBy(WEEK_DAYS).sqrt();\n    const multCUBE = deltaDaysBN.dividedBy(alpha).pow(3);\n\n    return BigNumber(amountToken).multipliedBy(multSQRT.plus(multCUBE));\n  };\n\n  readonly getVotingInfo = (userAddress?: string) => {\n    return fetchWithValidation(this.apiUrl, votingInfoResponseSchema, {\n      method: 'POST',\n      body: this.makeRPCPayload({\n        model: 'OrionVoting',\n        method: 'info',\n        params: [userAddress],\n      }),\n    });\n  };\n\n  readonly getEnvironment = () => {\n    return fetchWithValidation(this.apiUrl, environmentResponseSchema, {\n      method: 'POST',\n      body: this.makeRPCPayload({\n        model: 'Environment',\n        method: 'getEnvironment',\n        params: [],\n      }),\n    });\n  };\n\n  readonly listNFTOrder = (address: string) => {\n    return fetchWithValidation(this.apiUrl, listNFTOrderResponseSchema, {\n      method: 'POST',\n      body: this.makeRPCPayload({\n        model: 'OrionV3NFTManager',\n        method: 'listNFTOrder',\n        params: [address],\n      }),\n    });\n  };\n\n  readonly getListPool = (userAddress?: string) => {\n    return fetchWithValidation(this.apiUrl, listPoolResponseSchema, {\n      method: 'POST',\n      body: this.makeRPCPayload({\n        model: 'OrionVoting',\n        method: 'listPool',\n        params: [userAddress],\n      }),\n    });\n  };\n\n  readonly getPoolInfo = (\n    token0: string,\n    token1: string,\n    poolAddress?: string\n  ) => {\n    return fetchWithValidation(this.apiUrl, getPoolResponseSchema, {\n      method: 'POST',\n      body: this.makeRPCPayload({\n        model: 'OrionV3Factory',\n        method: 'getPoolInfo',\n        params: [token0, token1, poolAddress],\n      }),\n    });\n  };\n\n  readonly listPoolV2 = (address?: string) => {\n    return fetchWithValidation(this.apiUrl, listPoolV2ResponseSchema, {\n      method: 'POST',\n      body: this.makeRPCPayload({\n        model: 'OrionFarmV2',\n        method: 'listPool',\n        params: [address],\n      }),\n    });\n  };\n\n  readonly poolV2Info = (\n    token0: string,\n    token1: string,\n    address: string | undefined\n  ) => {\n    return fetchWithValidation(this.apiUrl, PoolV2InfoResponseSchema, {\n      method: 'POST',\n      body: this.makeRPCPayload({\n        model: 'OrionV2Factory',\n        method: 'getPoolInfo',\n        params: [token0, token1, address],\n      }),\n    });\n  };\n\n  readonly listPoolV3 = (address?: string) => {\n    return fetchWithValidation(this.apiUrl, listPoolV3ResponseSchema, {\n      method: 'POST',\n      body: this.makeRPCPayload({\n        model: 'OrionFarmV3',\n        method: 'listPool',\n        params: [address],\n      }),\n    });\n  };\n\n  readonly listAmount = (poolKey: string) => {\n    return fetchWithValidation(this.apiUrl, listAmountResponseSchema, {\n      method: 'POST',\n      body: this.makeRPCPayload({\n        model: poolKey,\n        method: 'listAmount',\n        params: [],\n      }),\n    });\n  };\n\n  readonly testRetrieve = () => {\n    return fetchWithValidation(this.apiUrl, testIncrementorSchema, {\n      method: 'POST',\n      body: this.makeRPCPayload({\n        model: 'Incrementer',\n        method: 'retrieve',\n        params: [],\n      }),\n    });\n  };\n\n  private readonly getK = (time: number) => {\n    const currentTime = time < LOCK_START_TIME ? LOCK_START_TIME : time;\n\n    const deltaYears = BigNumber(currentTime)\n      .minus(LOCK_START_TIME)\n      .dividedBy(YEAR);\n    return 2 ** BigNumber(deltaYears).multipliedBy(2).toNumber();\n  };\n}\n\nexport * as schemas from './schemas/index.js';\nexport { IndexerService };\n","export { default as environmentResponseSchema } from './environment-response-schema';\nexport { default as listNFTOrderResponseSchema } from './list-nft-order-response-schema';\nexport { default as getPoolResponseSchema } from './get-pool-response-schema';\nexport { default as listPoolResponseSchema } from './list-pool-schema';\nexport { default as listPoolV2ResponseSchema } from './list-pool-v2-response-schema';\nexport { default as PoolV2InfoResponseSchema } from './pool-v2-info-schema';\nexport { default as listPoolV3ResponseSchema } from './list-pool-v3-response-schema';\nexport { default as veORNInfoResponseSchema } from './veORN-info-schema';\nexport { default as listAmountResponseSchema } from './list-amount-schema';\nexport { default as votingInfoResponseSchema } from './voting-info-schema';\nexport { default as testIncrementorSchema } from './test-incrementor-schema';\nexport { default as getPointsAtResponseSchema } from './get-points-at-schema';\n","import { z } from 'zod';\nimport { evmAddressSchema } from './util-schemas.js';\nimport infoSchema from './info-schema.js';\n\nconst environmentResponseSchema = z.object({\n  result: z.object({\n    chainId: z.number().int().nonnegative(),\n    nativeToken: z.string(),\n    ORN: evmAddressSchema,\n    WETH9: evmAddressSchema,\n    OrionV3Factory: evmAddressSchema.optional(),\n    OrionV2Factory: evmAddressSchema.optional(),\n    OrionV3NFTManager: evmAddressSchema.optional(),\n    SwapRouterV3: evmAddressSchema.optional(),\n    OrionFarmV3: evmAddressSchema.optional(),\n    OrionFarmV2: evmAddressSchema.optional(),\n    OrionVoting: evmAddressSchema.optional(),\n    veORN: evmAddressSchema.optional(),\n  }),\n  info: infoSchema,\n});\n\nexport default environmentResponseSchema;\n","import { ethers } from 'ethers';\nimport { z } from 'zod';\n\nexport const evmAddressSchema = z\n  .string()\n  .refine(ethers.isAddress, (v) => ({\n    message: `${v} is not a valid address`,\n  }));\n\nexport const hexStringSchema = z\n  .string()\n  .refine(ethers.isHexString, (v) => ({\n    message: `${v} is not a valid hex string`,\n  }));\n","import { z } from 'zod';\nimport { ethers } from 'ethers';\n\nconst infoSchema = z.object({\n  blockNumber: z.number().int().nonnegative(),\n  blockHash: z.string().refine((v) => v.length === 0 || ethers.isHexString(v), {\n    message: 'blockHash must be a valid hex string or empty',\n  }),\n  timeRequest: z.number().int().nonnegative(),\n  timeAnswer: z.number().int().nonnegative(),\n  changes: z.number().int().nonnegative(),\n});\n\nexport default infoSchema;\n","import { z } from 'zod';\nimport poolSchema from './pool-schema.js';\nimport infoSchema from './info-schema.js';\n\nconst listNFTOrderResponseSchema = z.object({\n  result: z.array(poolSchema),\n  info: infoSchema,\n});\n\nexport default listNFTOrderResponseSchema;\n","import { z } from 'zod';\nimport { evmAddressSchema } from './util-schemas.js';\n\nconst poolSchema = z.object({\n  tokenId: evmAddressSchema,\n\n  token0: z.string().nonempty(),\n  token1: z.string().nonempty(),\n  token0Address: evmAddressSchema,\n  token1Address: evmAddressSchema,\n  token0Decimals: z.number().int().nonnegative().max(18),\n  token1Decimals: z.number().int().nonnegative().max(18),\n\n  amount: z.number().nonnegative(),\n  amount0: z.number().nonnegative(),\n  amount1: z.number().nonnegative(),\n  from: z.number().nonnegative(),\n  to: z.number().nonnegative(),\n  fee: z.number().nonnegative(),\n  collectFee: z.number().nonnegative(),\n  reward: z.number().nonnegative(),\n  apr: z.number().nonnegative(),\n  boost: z.number().int().nonnegative(),\n  isStaked: z.boolean(),\n  poolFee: z.number().nonnegative(),\n  poolAddress: evmAddressSchema,\n  veOrnForMaxBoost: z.number().nonnegative(),\n  veOrnMaxBoost: z.number().nonnegative(),\n  veORNCurrent: z.number().nonnegative(),\n  time: z.number().int().nonnegative(), // tim\n});\n\nexport default poolSchema;\n","import { z } from 'zod';\nimport { evmAddressSchema } from './util-schemas.js';\nimport basicPoolInfo from './basic-pool-info-schema.js';\nimport infoSchema from './info-schema.js';\n\nconst getPoolResponseSchema = z.object({\n  result: z.object({\n    token0: z.string().nonempty(),\n    token1: z.string().nonempty(),\n    token0Address: evmAddressSchema,\n    token1Address: evmAddressSchema,\n\n    totalLiquidity: z.number().nonnegative(),\n    WETH9: evmAddressSchema,\n    pools: z.record(z.number(), basicPoolInfo.nullable()),\n  }),\n  info: infoSchema,\n});\n\nexport default getPoolResponseSchema;\n","import { z } from 'zod';\nimport { evmAddressSchema } from './util-schemas.js';\n\nconst basicPoolInfo = z.object({\n  poolAddress: evmAddressSchema,\n  isInitialized: z.boolean(),\n  liquidity: z.number().nonnegative(),\n  liquidityInUSD: z.number().nonnegative(),\n  liquidityShare: z.number().nonnegative(),\n  isFarming: z.boolean(),\n  rewardsTotal: z.number().nonnegative(),\n  rewardsPerPeriod: z.number().nonnegative(),\n  rewardsShare: z.number().nonnegative(),\n  feePerPeriod: z.number().nonnegative(),\n  feeTotal: z.number().nonnegative(),\n  feeShare: z.number().nonnegative(),\n  tickMultiplier: z.number().nonnegative(),\n  MAX_TICK: z.number().nonnegative().int(),\n  minAPR: z.number().nonnegative(),\n  maxAPR: z.number().nonnegative(),\n  avgAPR: z.number().nonnegative(),\n  maxBoost: z.number().nonnegative().int(),\n  feeRate: z.array(z.number().nonnegative()),\n});\n\nexport default basicPoolInfo;\n","import { z } from 'zod';\nimport infoSchema from './info-schema';\nimport { listPoolV2Schema } from './list-pool-v2-response-schema';\nimport { listPoolV3Schema } from './list-pool-v3-response-schema';\n\nconst listPoolResponseSchema = z.object({\n  result: z.array(listPoolV2Schema.or(listPoolV3Schema)),\n  info: infoSchema,\n});\n\nexport default listPoolResponseSchema;\n","import { z } from 'zod';\nimport { evmAddressSchema } from './util-schemas.js';\nimport basicPoolInfo from './basic-pool-info-schema.js';\nimport infoSchema from './info-schema.js';\n\nexport const listPoolV2Schema = z.object({\n  pair: z.string(),\n  token0: z.string().nonempty(),\n  token1: z.string().nonempty(),\n  name: z.string(),\n  name0: z.string(),\n  name1: z.string(),\n  token0Address: evmAddressSchema,\n  token1Address: evmAddressSchema,\n  token0Decimals: z.number().int().nonnegative().max(18),\n  token1Decimals: z.number().int().nonnegative().max(18),\n  WETH9: evmAddressSchema,\n  farmAddress: z.string().optional(),\n  weight: z.number(),\n  liquidity0: z.number(),\n  liquidity1: z.number(),\n  token0Price: z.number(),\n  token1Price: z.number(),\n  totalLPSupply: z.number(),\n  totalLPStake: z.number(),\n  totalLPStakeInUSD: z.number(),\n  userLPStaked: z.number(),\n  userLPStakedInUSD: z.number(),\n  lpPriceInUSD: z.number(),\n  lpPriceInORN: z.number(),\n  userReward: z.number(),\n  weeklyReward: z.number(),\n  userAPR: z.number(),\n  lockMaxMultiplier: z.number(),\n  veornMaxMultiplier: z.number(),\n  veornBoostScaleFactor: z.number(),\n  lockTimeForMaxMultiplier: z.number(),\n  userBoost: z.number(),\n  userTimeDeposit: z.number(),\n  userLockTimeStart: z.number(),\n  userLockTimePeriod: z.number(),\n  userVeORN: z.number(),\n  userORN: z.number(),\n  userRewardToPool: z.number(),\n  boostTotalVeORN: z.number(),\n  boostCurrentPoolReward: z.number(),\n  boostTotalLiquidity: z.number(),\n  boostCurrentLiquidity: z.number(),\n  boostCurrentVeORN: z.number(),\n  boostTotalReward: z.number(),\n\n  ...basicPoolInfo.shape,\n\n  type: z.string().nonempty(),\n});\n\nconst listPoolV2ResponseSchema = z.object({\n  result: z.array(listPoolV2Schema),\n  info: infoSchema,\n});\n\nexport default listPoolV2ResponseSchema;\n","import { z } from 'zod';\nimport { evmAddressSchema } from './util-schemas.js';\nimport basicPoolInfo from './basic-pool-info-schema.js';\nimport infoSchema from './info-schema.js';\n\nexport const listPoolV3Schema = z.object({\n  token0: z.string().nonempty(),\n  token1: z.string().nonempty(),\n  name: z.string(),\n  name0: z.string(),\n  name1: z.string(),\n  token0Address: evmAddressSchema,\n  token1Address: evmAddressSchema,\n  token0Decimals: z.number().int().nonnegative().max(18),\n  token1Decimals: z.number().int().nonnegative().max(18),\n  WETH9: evmAddressSchema,\n  poolFee: z.number(),\n  weeklyReward: z.number(),\n  weight: z.number(),\n  totalLPStakeInUSD: z.number(),\n\n  ...basicPoolInfo.shape,\n\n  type: z.literal('v3'),\n});\n\nconst listPoolV3ResponseSchema = z.object({\n  result: z.array(listPoolV3Schema),\n  info: infoSchema,\n});\n\nexport default listPoolV3ResponseSchema;\n","import { z } from 'zod';\nimport { evmAddressSchema } from './util-schemas.js';\nimport basicPoolInfo from './basic-pool-info-schema';\nimport infoSchema from './info-schema.js';\n\nconst poolInfoSchema = z.object({\n  pair: z.string(),\n  name: z.string(),\n  token0: z.string(),\n  token1: z.string(),\n  name0: z.string(),\n  name1: z.string(),\n  token0Address: evmAddressSchema,\n  token1Address: evmAddressSchema,\n  token0Decimals: z.number().int().nonnegative().max(18),\n  token1Decimals: z.number().int().nonnegative().max(18),\n  WETH9: z.string(),\n  farmAddress: z.string().optional(),\n  weight: z.number(),\n  liquidity0: z.number(),\n  liquidity1: z.number(),\n  token0Price: z.number(),\n  token1Price: z.number(),\n  userLPBalance: z.number(),\n  userLPBalanceStr: z.string(),\n  totalLPSupply: z.number(),\n  totalLPStake: z.number(),\n  totalLPStakeInUSD: z.number(),\n  userLPStaked: z.number(),\n  userLPStakedInUSD: z.number(),\n  lpPriceInUSD: z.number(),\n  lpPriceInORN: z.number(),\n  userReward: z.number(),\n  userWeeklyReward: z.number(),\n  userRewardToPool: z.number(),\n  weeklyReward: z.number(),\n  userAPR: z.number(),\n  lockMaxMultiplier: z.number(),\n  veornMaxMultiplier: z.number(),\n  veornBoostScaleFactor: z.number(),\n  lockTimeForMaxMultiplier: z.number(),\n  userBoost: z.number(),\n  userTimeDeposit: z.number(),\n  userLockTimeStart: z.number(),\n  userLockTimePeriod: z.number(),\n  userVeORN: z.number(),\n  userORN: z.number(),\n  boostTotalVeORN: z.number(),\n  boostCurrentPoolReward: z.number(),\n  boostTotalLiquidity: z.number(),\n  boostCurrentLiquidity: z.number(),\n  boostCurrentVeORN: z.number(),\n  boostTotalReward: z.number(),\n  type: z.literal('v2'),\n\n  ...basicPoolInfo.shape,\n});\n\nconst PoolV2InfoResponseSchema = z.object({\n  result: poolInfoSchema,\n  info: infoSchema,\n});\n\nexport default PoolV2InfoResponseSchema;\n","import { z } from 'zod';\nimport { evmAddressSchema } from './util-schemas.js';\nimport infoSchema from './info-schema.js';\n\nconst veORNResultSchema = z.object({\n  avgAPR: z.number(),\n  minAPR: z.number(),\n  maxAPR: z.number(),\n  veTokenAddress: evmAddressSchema,\n  totalORNLocked: z.number(),\n  totalVeORN: z.number(),\n  weeklyReward: z.number(),\n  userAPR: z.number(),\n  userVeORN: z.number(),\n  userVeORNBalance: z.number(),\n  userORNLocked: z.number(),\n  userLockEndDate: z.number(),\n  userReward: z.number(),\n  userWeeklyReward: z.number(),\n  userMinLockPeriod: z.number(),\n  dropLock: z.boolean().optional(),\n  pointsReward: z.number().optional(),\n}).passthrough();\n\nconst veORNInfoSchema = z.object({\n  result: veORNResultSchema,\n  info: infoSchema,\n});\n\nexport default veORNInfoSchema;\n","import { z } from 'zod';\nimport infoSchema from './info-schema.js';\n\nconst listAmountSchema = z.object({\n  result: z.record(z.number()),\n  info: infoSchema,\n});\n\nexport default listAmountSchema;\n","import { z } from 'zod';\nimport infoSchema from './info-schema.js';\n\nconst poolSchema = z.object({\n  allVote: z.number(),\n  name: z.string(),\n  poolAddress: z.string(),\n  type: z.string(),\n  userVote: z.number(),\n  token0: z.string(), // deprecated\n  token1: z.string(), // deprecated\n  name0: z.string(),\n  name1: z.string(),\n  poolFee: z.number(),\n  userWeight: z.number(),\n  weight: z.number(),\n});\n\nconst votingResultSchema = z.object({\n  absoluteVeTokenInVoting: z.number(),\n  pools: z.array(poolSchema),\n  userVeTokenBalance: z.number(),\n  userVeTokenInVoting: z.number(),\n  veTokenAddress: z.string(),\n  votingAddress: z.string(),\n  weeklyReward: z.number(),\n});\n\nconst votingInfoSchema = z.object({\n  result: votingResultSchema,\n  info: infoSchema,\n});\n\nexport default votingInfoSchema;\n","import { z } from 'zod';\nimport infoSchema from './info-schema.js';\n\nconst testIncrementorSchema = z.object({\n  result: z.number().int(),\n  info: infoSchema,\n});\n\nexport default testIncrementorSchema;\n","import { z } from 'zod';\nimport infoSchema from './info-schema.js';\n\nconst getPointsAtResultSchema = z.object({\n  pointsObject: z.record(z.string(), z.number()),\n  currentPage: z.number(),\n  totalElements: z.number(),\n});\n\nconst getPointsAtSchema = z.object({\n  result: getPointsAtResultSchema,\n  info: infoSchema,\n}).nullable();\n\nexport default getPointsAtSchema;\n","import type Unit from '../index';\nimport { z } from 'zod';\nimport {pmmOrderSchema} from \"./schemas/order\";\nimport {simpleFetch} from \"simple-typed-fetch\";\nimport {ethers, Wallet} from \"ethers\";\nimport {BigNumber} from \"bignumber.js\";\nimport { ERC20__factory } from '@orionprotocol/contracts/lib/ethers-v6/index.js';\nimport {orionRFQContractABI} from \"./abi/OrionRFQ\";\n\nexport default class Pmm {\n    private readonly unit: Unit;\n    private readonly provider: ethers.Provider;\n    private contractAddress: string;\n\n    constructor(unit: Unit) {\n        this.unit = unit;\n        this.provider = unit.provider;\n        this.contractAddress = '';\n        //  this.contractAddress = '0x89357522c0ed6e557d39dc75290859246077bdfc';\n    }\n\n    private isInitialized() : boolean {\n        return this.contractAddress !== '';\n    }\n\n    public async init() {\n        if(this.isInitialized())\n            return;\n        const { orionPMMRouterContractAddress } = await simpleFetch(this.unit.blockchainService.getPmmInfo)();\n        this.contractAddress = orionPMMRouterContractAddress;\n    }\n\n    public async getContractAddress() {\n        await this.init();\n        return this.contractAddress;\n    }\n\n    public async setAllowance(token: string, amount: string, signer: Wallet) {\n        await this.init();\n\n        const bnTargetAmount = new BigNumber(amount);\n        const walletAddress = await signer.getAddress();\n\n        const tokenContract = ERC20__factory\n            .connect(token, this.unit.provider);\n\n        const unsignedApproveTx = await tokenContract\n            .approve.populateTransaction(\n                this.contractAddress,\n                bnTargetAmount.toString()\n            );\n        const nonce = await this.provider.getTransactionCount(walletAddress, 'pending');\n        const { gasPrice, maxFeePerGas } = await this.provider.getFeeData();\n        const network = await this.provider.getNetwork();\n\n        if (gasPrice !== null)\n            unsignedApproveTx.gasPrice = gasPrice;\n\n        if(maxFeePerGas !== null)\n            unsignedApproveTx.maxFeePerGas = maxFeePerGas;\n\n        unsignedApproveTx.chainId = network.chainId;\n        unsignedApproveTx.nonce = nonce;\n        unsignedApproveTx.from = walletAddress;\n        const gasLimit = await this.provider.estimateGas(unsignedApproveTx);\n        unsignedApproveTx.gasLimit = gasLimit;\n\n        const signedTx = await signer.signTransaction(unsignedApproveTx);\n        const txResponse = await this.provider.broadcastTransaction(signedTx);\n        await txResponse.wait();\n    }\n\n    public async fillRFQOrder(order : z.infer<typeof pmmOrderSchema>, signer: Wallet) {\n        await this.init();\n\n        if(!order.success)\n            throw Error(\"Invalid order provided\");\n\n        const contract = new ethers.Contract(this.contractAddress, orionRFQContractABI, signer);\n\n        // @ts-ignore\n        return contract.fillOrderRFQ(order.order, order.signature, BigInt(0));\n    }\n}","export const orionRFQContractABI =\n    [\n        {\n            \"inputs\": [\n                {\n                    \"components\": [\n                        {\n                            \"internalType\": \"uint256\",\n                            \"name\": \"info\",\n                            \"type\": \"uint256\"\n                        },\n                        {\n                            \"internalType\": \"address\",\n                            \"name\": \"makerAsset\",\n                            \"type\": \"address\"\n                        },\n                        {\n                            \"internalType\": \"address\",\n                            \"name\": \"takerAsset\",\n                            \"type\": \"address\"\n                        },\n                        {\n                            \"internalType\": \"address\",\n                            \"name\": \"maker\",\n                            \"type\": \"address\"\n                        },\n                        {\n                            \"internalType\": \"address\",\n                            \"name\": \"allowedSender\",\n                            \"type\": \"address\"\n                        },\n                        {\n                            \"internalType\": \"uint256\",\n                            \"name\": \"makingAmount\",\n                            \"type\": \"uint256\"\n                        },\n                        {\n                            \"internalType\": \"uint256\",\n                            \"name\": \"takingAmount\",\n                            \"type\": \"uint256\"\n                        }\n                    ],\n                    \"internalType\": \"struct OrderRFQLib.OrderRFQ\",\n                    \"name\": \"order\",\n                    \"type\": \"tuple\"\n                },\n                {\n                    \"internalType\": \"bytes\",\n                    \"name\": \"signature\",\n                    \"type\": \"bytes\"\n                },\n                {\n                    \"internalType\": \"uint256\",\n                    \"name\": \"flagsAndAmount\",\n                    \"type\": \"uint256\"\n                }\n            ],\n            \"name\": \"fillOrderRFQ\",\n            \"outputs\": [],\n            \"stateMutability\": \"nonpayable\",\n            \"type\": \"function\"\n        }\n    ];\n","import { merge } from 'merge-anything';\nimport { chains, envs } from '../config';\nimport type { networkCodes } from '../constants/index.js';\nimport Unit from '../Unit/index.js';\nimport { ReferralSystem } from '../services/ReferralSystem';\nimport type { SupportedChainId, DeepPartial, VerboseUnitConfig, KnownEnv, EnvConfig, AggregatedAssets } from '../types.js';\nimport { isValidChainId } from '../utils/index.js';\nimport { simpleFetch } from 'simple-typed-fetch';\nimport Bridge from './bridge/index.js';\nimport { Frontage } from '../services/Frontage';\n\nexport default class Orion {\n  public readonly env?: string;\n\n  public readonly units: Partial<Record<SupportedChainId, Unit>>;\n\n  public readonly referralSystem: ReferralSystem;\n\n  public readonly bridge: Bridge;\n\n  public readonly frontage: Frontage;\n\n  // TODO: get tradable assets (aggregated)\n\n  // TODO: get tradable pairs (aggregated)\n\n  public logger: ((message: string) => void) | undefined;\n\n  constructor(\n    envOrConfig: KnownEnv | EnvConfig = 'production',\n    overrides?: DeepPartial<EnvConfig>,\n    logger?: ((message: string) => void) | undefined\n  ) {\n    this.logger = logger;\n\n    let config: EnvConfig;\n    if (typeof envOrConfig === 'string') {\n      const envConfig = envs[envOrConfig];\n      if (!envConfig) {\n        throw new Error(`Invalid environment: ${envOrConfig}. Available environments: ${Object.keys(envs).join(', ')}`);\n      }\n      this.env = envOrConfig;\n      config = {\n        analyticsAPI: envConfig?.analyticsAPI,\n        referralAPI: envConfig.referralAPI,\n        frontageAPI: envConfig.frontageAPI,\n        networks: Object.entries(envConfig.networks).map(([chainId, networkConfig]) => {\n          if (!isValidChainId(chainId)) throw new Error(`Invalid chainId: ${chainId}`);\n          const chainConfig = chains[chainId];\n          if (!chainConfig) {\n            throw new Error(`Chain config not found: ${chainId}. Available chains: ${Object.keys(chains).join(', ')}`);\n          }\n\n          return {\n            env: envOrConfig,\n            chainId,\n            api: networkConfig.api,\n            nodeJsonRpc: networkConfig.rpc ?? chainConfig.rpc,\n            services: {\n              blockchainService: {\n                http: networkConfig.api + networkConfig.services.blockchain.http,\n              },\n              aggregator: {\n                http: networkConfig.api + networkConfig.services.aggregator.http,\n                ws: networkConfig.api + networkConfig.services.aggregator.ws,\n              },\n              priceFeed: {\n                api: networkConfig.api + networkConfig.services.priceFeed.all,\n              },\n              indexer: {\n                api: networkConfig.api + networkConfig.services.indexer?.http,\n              }\n            },\n          };\n        })\n          .reduce<Partial<Record<SupportedChainId, VerboseUnitConfig>>>((acc, cur) => {\n            acc[cur.chainId] = cur;\n            return acc;\n          }, {}),\n      };\n\n      if (overrides) {\n        // Recursive merge of config and overrides. Ignore undefined values.\n        config = merge(config, overrides);\n      }\n    } else {\n      config = envOrConfig;\n    }\n\n    this.referralSystem = new ReferralSystem(config.referralAPI);\n\n    this.units = Object.entries(config.networks)\n      .reduce<Partial<Record<SupportedChainId, Unit>>>((acc, [chainId, networkConfig]) => {\n        if (!isValidChainId(chainId)) throw new Error(`Invalid chainId: ${chainId}`);\n        const chainConfig = chains[chainId];\n        if (!chainConfig) throw new Error(`Chain config not found: ${chainId}`);\n\n        const unit = new Unit({\n          // env: networkConfig.env,\n          chainId,\n          // api: networkConfig.api,\n          nodeJsonRpc: networkConfig.nodeJsonRpc,\n          services: networkConfig.services,\n        }, logger);\n        return {\n          ...acc,\n          [chainId]: unit,\n        }\n      }, {});\n\n    this.bridge = new Bridge(\n      this.unitsArray,\n    );\n\n    this.frontage = new Frontage(config.frontageAPI);\n  }\n\n  get unitsArray() {\n    return Object.entries(this.units).map(([, unit]) => unit);\n  }\n\n  getUnit(networkCodeOrChainId: typeof networkCodes[number] | SupportedChainId): Unit {\n    let unit: Unit | undefined;\n    if (isValidChainId(networkCodeOrChainId)) {\n      unit = this.units[networkCodeOrChainId];\n    } else {\n      unit = this.unitsArray.find((u) => u.networkCode === networkCodeOrChainId);\n    }\n    if (!unit) {\n      throw new Error(\n        `Invalid network code: ${networkCodeOrChainId}. ` +\n        `Available network codes: ${this.unitsArray.map((u) => u.networkCode).join(', ')}`);\n    }\n    return unit;\n  }\n\n  getSiblingsOf(chainId: SupportedChainId) {\n    return this.unitsArray.filter((unit) => unit.chainId !== chainId);\n  }\n\n  async getAssets(tradableOnly = true) {\n    const aggregatedAssets: AggregatedAssets = {};\n\n    await Promise.all(this.unitsArray.map(async (unit) => {\n      const { assetToAddress } = await simpleFetch(unit.blockchainService.getInfo)();\n      Object.entries(assetToAddress).forEach(([asset, address]) => {\n        if (address === undefined) throw new Error(`Address is undefined for asset: ${asset}`);\n        aggregatedAssets[asset] = {\n          ...aggregatedAssets[asset],\n          [unit.chainId]: {\n            address,\n          },\n        }\n      });\n    }));\n\n    if (tradableOnly) {\n      const tradableAggregatedAssets: AggregatedAssets = {};\n      const aggregatedPairs = await this.getPairs('spot');\n      Object.entries(aggregatedPairs).forEach(([pair, chainIds]) => {\n        const [baseAsset, quoteAsset] = pair.split('-');\n        if (chainIds === undefined) throw new Error(`ChainIds is undefined for pair: ${pair}`);\n        if (baseAsset === undefined || quoteAsset === undefined) throw new Error(`Invalid pair: ${pair}`);\n\n        const aggregatedBaseAsset = aggregatedAssets[baseAsset];\n        if (aggregatedBaseAsset === undefined) {\n          const networks = chainIds.map((chainId) => chains[chainId]?.label).join(', ');\n          console.error(\n            `Asset found in Aggregator, but not in BlockchainService (base): ${baseAsset} (${pair}).` +\n            ` Networks: ${networks}`\n          );\n        } else {\n          tradableAggregatedAssets[baseAsset] = aggregatedBaseAsset;\n        }\n        const aggregatedQuoteAsset = aggregatedAssets[quoteAsset];\n        if (aggregatedQuoteAsset === undefined) {\n          const networks = chainIds.map((chainId) => chains[chainId]?.label).join(', ');\n          console.error(\n            `Asset found in Aggregator, but not in BlockchainService (quote): ${quoteAsset} (${pair}).` +\n            ` Networks: ${networks}`\n          );\n        } else {\n          tradableAggregatedAssets[quoteAsset] = aggregatedQuoteAsset;\n        }\n      });\n    }\n    return aggregatedAssets;\n  }\n\n  async getPairs(...params: Parameters<Unit['aggregator']['getPairsList']>) {\n    const result: Partial<\n      Record<\n        string,\n        SupportedChainId[]\n      >\n    > = {};\n\n    await Promise.all(this.unitsArray.map(async (unit) => {\n      const pairs = await simpleFetch(unit.aggregator.getPairsList)(...params);\n      pairs.forEach((pair) => {\n        result[pair] = [\n          ...(result[pair] ?? []),\n          unit.chainId,\n        ];\n      });\n    }));\n\n    return result;\n  }\n}\n","import { z } from 'zod';\nimport { fetchWithValidation } from 'simple-typed-fetch';\nimport {\n  errorSchema,\n  miniStatsSchema,\n  rewardsMappingSchema,\n  distinctAnalyticsSchema,\n  globalAnalyticsSchema,\n  rewardsClaimedSchema,\n  linkSchema,\n  ratingSchema,\n  claimInfoSchema,\n  aggregatedHistorySchema,\n  inviteCodeLinkSchema,\n  contractsAddressesSchema,\n  allTimeLeadersSchema,\n} from './schemas/index.js';\nimport type { SupportedChainId } from '../../types.js';\n\ntype CreateLinkPayloadType = {\n  referer: string\n  link_option: number\n};\n\ntype ClaimRewardsPayload = {\n  reward_recipient: string\n  chain_id: number\n};\n\ntype SubmitInviteCodekWithLinkPayload = {\n  inviteCode: string\n  referer: string\n};\n\ntype SubscribePayloadType = {\n  ref_target: string\n  referral: string\n};\n\ntype SignatureType = {\n  signature: string\n};\n\ntype submitTransactionDataForWidgetPayload = {\n  partner_domain: string\n  sender_address: string\n  tx_hash: string\n  chain_id: number\n  signature: string\n}\n\nclass ReferralSystem {\n  private readonly apiUrl: string\n\n  get api() {\n    return this.apiUrl;\n  }\n\n  constructor(apiUrl: string) {\n    this.apiUrl = apiUrl;\n\n    this.getLink = this.getLink.bind(this);\n    this.getDistinctAnalytics = this.getDistinctAnalytics.bind(this);\n    this.createReferralLink = this.createReferralLink.bind(this);\n    this.subscribeToReferral = this.subscribeToReferral.bind(this);\n    this.getMyReferral = this.getMyReferral.bind(this);\n    this.getMyInviteCodeAndLink = this.getMyInviteCodeAndLink.bind(this);\n    this.submitInviteCodeWithLink = this.submitInviteCodeWithLink.bind(this);\n    this.getGlobalAnalytics = this.getGlobalAnalytics.bind(this);\n    this.getMiniStats = this.getMiniStats.bind(this);\n    this.getRewardsMapping = this.getRewardsMapping.bind(this);\n    this.claimRewards = this.claimRewards.bind(this);\n    this.getLeaderboard = this.getLeaderboard.bind(this);\n    this.getLeaderboardSingleChain = this.getLeaderboardSingleChain.bind(this);\n    this.getAllTimeLeaders = this.getAllTimeLeaders.bind(this);\n    this.getContractsAddresses = this.getContractsAddresses.bind(this);\n    this.getClaimInfo = this.getClaimInfo.bind(this);\n    this.getAggregatedHistory = this.getAggregatedHistory.bind(this);\n    this.submitTransactionDataForWidget = this.submitTransactionDataForWidget.bind(this);\n  }\n\n  getLink = (refererAddress: string) =>\n    fetchWithValidation(`${this.apiUrl}/referer/view/link`, linkSchema, {\n      headers: {\n        'referer-address': refererAddress,\n      },\n    });\n\n  getMyReferral = (myWalletAddress: string) =>\n    fetchWithValidation(`${this.apiUrl}/referral/view/link`, linkSchema, {\n      headers: {\n        referral: myWalletAddress,\n      },\n    });\n\n  getMyInviteCodeAndLink = (refererAddress: string, suppressError = false) =>\n    fetchWithValidation(\n      `${this.apiUrl}/referer/invite/status2?suppress_error=${Number(\n        suppressError\n      )}`,\n      inviteCodeLinkSchema,\n      {\n        headers: {\n          'referer-address': refererAddress,\n        },\n      }\n    );\n\n  submitInviteCodeWithLink = ({\n    inviteCode,\n    referer,\n  }: SubmitInviteCodekWithLinkPayload) =>\n    fetchWithValidation(\n      `${this.apiUrl}/referer/invite/submit-code2`,\n      inviteCodeLinkSchema,\n      {\n        headers: {\n          'Content-type': 'application/json',\n          'invite-code': inviteCode,\n        },\n        method: 'POST',\n        body: JSON.stringify({ referer }),\n      }\n    );\n\n  getDistinctAnalytics = (refererAddress: string) =>\n    fetchWithValidation(\n      `${this.apiUrl}/referer/view/distinct-analytics`,\n      distinctAnalyticsSchema,\n      {\n        headers: {\n          'referer-address': refererAddress,\n        },\n      },\n      errorSchema\n    );\n\n  getGlobalAnalytics = () =>\n    fetchWithValidation(\n      `${this.apiUrl}/referer/view/global-analytics`,\n      globalAnalyticsSchema\n    );\n\n  /**\n   * @param refererAddress Address without 0x prefix\n   */\n  getMiniStats = (refererAddress: string) =>\n    fetchWithValidation(\n      `${this.apiUrl}/referer/view/mini-latest-stats`,\n      miniStatsSchema,\n      {\n        headers: {\n          'referer-address': refererAddress,\n        },\n      },\n      errorSchema\n    );\n\n  getRewardsMapping = (\n    referralAddress: string,\n    page = 1,\n    positionsPerPage = 10\n  ) =>\n    fetchWithValidation(\n      `${this.apiUrl}/referer/view/rewards-mapping?n_per_page=${positionsPerPage}&page=${page}`,\n      rewardsMappingSchema,\n      {\n        headers: {\n          referral: referralAddress,\n        },\n      }\n    );\n\n  claimRewards = (payload: ClaimRewardsPayload, signature: SignatureType) =>\n    fetchWithValidation(\n      `${this.apiUrl}/referer/governance/claim-rewards`,\n      rewardsClaimedSchema,\n      {\n        headers: {\n          'Content-type': 'application/json',\n        },\n        method: 'POST',\n        body: JSON.stringify({ payload, signature }),\n      }\n    );\n\n  createReferralLink = (payload: CreateLinkPayloadType) =>\n    fetchWithValidation(`${this.apiUrl}/referer/create2`, linkSchema, {\n      headers: {\n        'Content-type': 'application/json',\n      },\n      method: 'POST',\n      body: JSON.stringify(payload),\n    });\n\n  subscribeToReferral = (payload: SubscribePayloadType) =>\n    fetchWithValidation(\n      `${this.apiUrl}/referer/subscribe2`,\n      linkSchema,\n      {\n        headers: {\n          'Content-type': 'application/json',\n        },\n        method: 'POST',\n        body: JSON.stringify(payload),\n      },\n      errorSchema\n    );\n\n  getLeaderboard = (refererAddress: string | undefined) =>\n    fetchWithValidation(\n      `${this.apiUrl}/referer/ve/rating-table-leaderboard?tag=aggregated`,\n      ratingSchema,\n      {\n        headers:\n          refererAddress !== undefined\n            ? { 'referer-address': refererAddress }\n            : {},\n      },\n      errorSchema\n    );\n\n  getLeaderboardSingleChain = (refererAddress: string | undefined, chainId: SupportedChainId) =>\n    fetchWithValidation(\n      `${this.apiUrl}/referer/ve/rating-table-leaderboard?chain_id=${chainId}`,\n      ratingSchema,\n      {\n        headers:\n          refererAddress !== undefined\n            ? { 'referer-address': refererAddress }\n            : {},\n      },\n      errorSchema\n    );\n\n  getAllTimeLeaders = (refererAddress: string | undefined) =>\n    fetchWithValidation(\n      `${this.apiUrl}/referer/ve/leaderboard-lifetime`,\n      allTimeLeadersSchema,\n      {\n        headers:\n          refererAddress !== undefined\n            ? { 'referer-address': refererAddress }\n            : {},\n      },\n      errorSchema\n    );\n\n  getContractsAddresses = () =>\n    fetchWithValidation(\n      `${this.apiUrl}/referer/view/contracts`,\n      contractsAddressesSchema,\n      undefined,\n      errorSchema\n    );\n\n  getClaimInfo = (refererAddress: string) =>\n    fetchWithValidation(\n      `${this.apiUrl}/referer/view/claim-info-with-stats?&suppress_error=1`,\n      claimInfoSchema,\n      {\n        headers: {\n          'referer-address': refererAddress,\n        },\n      },\n      errorSchema\n    );\n\n  getAggregatedHistory = (\n    refererAddress: string,\n    chainId: SupportedChainId | undefined,\n    types: string[] | undefined,\n    itemPerPage: number,\n    page: number\n  ) => {\n    const queryParams: Record<string, string | number> = {\n      n_per_page: itemPerPage,\n      page,\n      suppress_error: 1,\n    };\n\n    if (chainId !== undefined) {\n      queryParams['chain_id'] = chainId;\n    }\n\n    if (types !== undefined) {\n      queryParams['history_filter'] = encodeURIComponent(types.join(','));\n    }\n\n    const queryString = Object.entries(queryParams)\n      .map(([k, v]) => `${k}=${v}`)\n      .join('&');\n\n    return fetchWithValidation(\n      `${this.apiUrl}/referer/view/aggregated-history?${queryString}`,\n      aggregatedHistorySchema,\n      {\n        headers: {\n          'referer-address': refererAddress,\n        },\n      },\n      errorSchema\n    );\n  };\n\n  submitTransactionDataForWidget = (payload: submitTransactionDataForWidgetPayload) => {\n    return fetchWithValidation(\n      `${this.apiUrl}/referer/widget/submit`,\n      z.unknown(),\n      {\n        headers: {\n          'Content-type': 'application/json',\n        },\n        method: 'POST',\n        body: JSON.stringify(payload)\n      }\n    );\n  };\n}\n\nexport * as schemas from './schemas/index.js';\nexport { ReferralSystem };\n","export { default as linkSchema } from './linkSchema.js';\nexport { default as distinctAnalyticsSchema } from './distinctAnalyticsSchema.js';\nexport { default as errorSchema } from './errorSchema.js';\nexport { default as miniStatsSchema } from './miniStatsSchema.js';\nexport { default as rewardsMappingSchema } from './rewardsMappingSchema.js';\nexport { default as rewardsClaimedSchema } from './rewardsClaimedSchema.js';\nexport { default as globalAnalyticsSchema } from './globalAnalyticsSchema.js';\nexport { default as ratingSchema } from './ratingSchema.js';\nexport { default as claimInfoSchema } from './claimInfoSchema.js';\nexport { default as aggregatedHistorySchema } from './aggregatedHistorySchema.js';\nexport { default as contractsAddressesSchema } from './contractsAddressesSchema.js';\nexport { default as inviteCodeLinkSchema } from './inviteCodeLinkSchema.js';\nexport { default as allTimeLeadersSchema } from './allTimeLeadersSchema.js';\n","import { z } from 'zod';\n\nconst linkSchema = z.object({\n  status: z.string(),\n  referer: z.string(),\n});\n\nexport default linkSchema;\n","import { z } from 'zod';\n\nconst distinctAnalyticsSchema = z.object({\n  referer: z.string(),\n  refs_info: z.record(\n    z.string(),\n    z.object({\n      referral_address: z.string(),\n      referral_earned_fees: z.number(),\n      referer_earned_fees: z.number(),\n      relative_ref_level: z.number(),\n      reward_record_hash: z.string(),\n      timestamp: z.number(),\n      latest_timestamp: z.number(),\n      latest_block: z.number(),\n    }),\n  ),\n  total_sent_to_governance: z.number(),\n  total_earned: z.number(),\n  total_volume: z.number(),\n  total_trades: z.number(),\n  all_time_earnings_boost_only: z.number(),\n  all_time_earnings_boost_only_usd: z.number(),\n  all_time_earnings: z.number(),\n  all_time_earnings_usd: z.number(),\n  all_weekly_earnings: z.number(),\n  all_weekly_earnings_usd: z.number(),\n});\n\nexport default distinctAnalyticsSchema;\n","import { z } from 'zod';\n\nconst errorSchema = z.object({\n  status: z.string(),\n  message: z.string(),\n});\n\nexport default errorSchema;\n","import { z } from 'zod';\n\nconst miniStatsSchema = z.object({\n  earned_on_referrals_token: z.number(),\n  earned_on_referrals_usd: z.number(),\n  token_usd: z.number(),\n  registered_via_link_count: z.number(),\n  earned_in_a_week_token: z.number(),\n  earned_in_a_week_usd: z.number(),\n});\n\nexport default miniStatsSchema;\n","import { z } from 'zod';\n\nconst rewardsMappingSchema = z.object({\n  data: z.array(\n    z.object({\n      distribution: z.object({\n        dist: z.object({\n          underlying_token: z.number(),\n          referers_list: z.array(z.number()),\n        }),\n        address_to_reward_mapping: z.record(z.string(), z.number()),\n        ref_offset_to_rewarded_actors: z.record(z.string(), z.string()),\n        governance_reward_only: z.number(),\n        total_reward: z.number(),\n        trade_initiator: z.string(),\n      }),\n      timestamp_ms: z.number(),\n      block_height: z.number(),\n      tx_hash: z.string(),\n      price_feed_meta_info: z\n        .record(z.string(), z.record(z.string(), z.number()))\n        .nullable(),\n    })\n  ),\n  pagination_info: z.object({\n    c_page: z.number().int().nonnegative(),\n    t_pages: z.number().int().nonnegative(),\n  }),\n});\n\nexport default rewardsMappingSchema;\n","import { z } from 'zod';\n\nconst rewardsClaimedSchema = z.object({\n  referer: z.string(),\n  amount: z.string(),\n  signature: z.string(),\n});\n\nexport default rewardsClaimedSchema;\n","import { z } from 'zod';\n\nconst globalAnalyticsSchema = z.object({\n  ref_to_rewards: z.record(z.string(), z.number()),\n  total_earned_by_refs: z.number(),\n  total_sent_to_governance: z.number(),\n  reward_dist_count_in_general: z.record(z.string(), z.number()),\n  total_ref_system_actors: z.number(),\n});\n\nexport default globalAnalyticsSchema;\n","import { z } from 'zod';\n\nconst ratingSchema = z.object({\n  info: z.object({\n    weekly_boost_budget: z.string(),\n    weekly_boost_budget_fmt: z.number(),\n    monthly_boost_budget: z.string(),\n    monthly_boost_budget_fmt: z.number(),\n    displayed_boost_budget_fmt: z.number(),\n    time_left_for_the_reward: z.number(),\n    time_left_for_the_reward_local: z.string(),\n    time_left_for_the_reward_utc: z.string(),\n    personal_info: z.object({\n      rank_id: z.number(),\n      wallet: z.string(),\n      staked_ve_token: z.string(),\n      staked_ve_token_fmt: z.number(),\n      staked_ve_token_weight: z.string(),\n      staked_ve_token_weight_fmt: z.number(),\n      weighted_volume: z.string(),\n      weighted_volume_fmt: z.number(),\n      total_weight: z.string(),\n      total_weight_fmt: z.number(),\n      reward: z.string(),\n      reward_fmt: z.number()\n    }).nullable(),\n  }),\n  list: z.array(z.object({\n    rank_id: z.number(),\n    wallet: z.string(),\n    staked_ve_token: z.string(),\n    staked_ve_token_fmt: z.number(),\n    staked_ve_token_weight: z.string(),\n    staked_ve_token_weight_fmt: z.number(),\n    weighted_volume: z.string(),\n    weighted_volume_fmt: z.number(),\n    total_weight: z.string(),\n    total_weight_fmt: z.number(),\n    total_volume_fmt: z.number(),\n    weekly_earnings_fmt: z.number(),\n    total_earnings_fmt: z.number(),\n    referrals_count_fmt: z.number(),\n    total_trades_fmt: z.number(),\n    reward: z.string(),\n    reward_fmt: z.number()\n  })),\n});\n\nexport default ratingSchema;\n","import { z } from 'zod';\n\nconst claimInfoSchema = z.object({\n  global: z.object({\n    total_non_accrued: z.number(),\n    total_non_accrued_token: z.number(),\n    total_non_accrued_usd: z.number()\n  }),\n  chain_to_reward_info: z.record(\n    z.string(),\n    z.object({\n      total_accrued: z.number(),\n      total_accrued_token: z.number(),\n      total_accrued_usd: z.number(),\n      total_non_accrued: z.number(),\n      total_non_accrued_token: z.number(),\n      total_non_accrued_usd: z.number(),\n      total_earned: z.number()\n    })\n  ),\n  mini_stats: z.object({\n    earned_on_referrals_token: z.number(),\n    earned_on_referrals_usd: z.number(),\n    token_usd: z.number(),\n    registered_via_link_count: z.number(),\n    earned_in_a_week_token: z.number(),\n    earned_in_a_week_usd: z.number()\n  }),\n});\n\nexport default claimInfoSchema;\n","import { z } from 'zod';\n\nconst aggregatedHistorySchema = z.object({\n  data: z.array(z.object({\n    history_type: z.string(),\n    chain_type: z.string(),\n    chain_comp: z.string(),\n    chain_id: z.number(),\n    date_unix: z.number(),\n    date_time_local: z.string(),\n    date_time_utc: z.string(),\n    amount_token: z.string(),\n    amount_token_fmt: z.number(),\n    amount_usd: z.string(),\n    amount_usd_fmt: z.number(),\n    token_price: z.string(),\n    token_price_fmt: z.number()\n  })),\n  pagination_info: z.object({\n    c_page: z.number(),\n    t_pages: z.number()\n  })\n})\n\nexport default aggregatedHistorySchema;\n","import { z } from 'zod';\nimport { SupportedChainId } from '../../../types.js';\nimport { ethers } from 'ethers';\n\nconst contractsAddressesSchema = z.record(\n  z.nativeEnum(SupportedChainId),\n  z.string().refine(ethers.isAddress)\n);\n\nexport default contractsAddressesSchema;\n","import { z } from 'zod';\n\nconst inviteCodeLinkSchema = z.object({\n  link: z\n    .object({\n      referer: z.string(),\n      ref_link: z.string(),\n    })\n    .nullable(),\n  invite: z\n    .object({\n      code: z.string(),\n      data: z.null(),\n      limits: z.object({\n        tag: z.string(),\n        max_invites: z.number(),\n        max_ref_depth: z.number(),\n      }),\n    })\n    .nullable(),\n});\n\nexport default inviteCodeLinkSchema;\n","import { z } from 'zod';\n\nconst allTimeLeadersSchema = z.array(z.object({\n  wallet: z.string(),\n  total_earnings_fmt: z.number(),\n  referrals_count_fmt: z.number(),\n  total_trades_fmt: z.number(),\n  weekly_earnings_fmt: z.number(),\n}));\n\nexport default allTimeLeadersSchema;\n","import { ethers } from 'ethers';\nimport type {\n  Unit, AtomicSwapLocal, SupportedChainId, TransactionInfo, AtomicSwap, RedeemOrder\n} from '../../index.js';\nimport { INTERNAL_PROTOCOL_PRECISION, TxStatus, TxType } from '../../index.js';\nimport getHistory from './getHistory.js';\nimport swapExt from './swap.js';\n\nimport { BigNumber } from 'bignumber.js';\nimport generateSecret from '../../utils/generateSecret.js';\nimport { isPresent } from 'ts-is-present';\nimport { invariant } from '../../utils/invariant.js';\nimport { simpleFetch } from 'simple-typed-fetch';\n\nexport const SECONDS_IN_DAY = 60 * 60 * 24;\nexport const EXPIRATION_DAYS = 4;\n\ntype ExternalAtomicsData = Awaited<ReturnType<typeof getHistory>>;\nexport default class Bridge {\n  readonly EXTERNAL_ATOMICS_DATA_CACHE_TIME_MS = 5 * 1000; // 5 seconds\n  private externalAtomicSwaps: Partial<Record<string, { // wallet address -> data\n    lastUpdate: number\n    data: ExternalAtomicsData\n  }>> = {};\n\n  readonly ADDRESS_TO_ASSET_CACHE_TIME_MS = 5 * 60 * 1000; // 5 minutes\n  private addressToAsset: {\n    lastUpdate: number\n    data: Partial<Record<string, Partial<Record<SupportedChainId, string>>>>\n  } = { lastUpdate: 0, data: {} };\n\n  constructor(\n    private readonly unitsArray: Unit[],\n  ) {}\n\n  registerRedeemOrder(\n    secretHash: string,\n    redeemOrder: RedeemOrder,\n  ) {\n    const senderCached = this.externalAtomicSwaps[redeemOrder.sender];\n    const receiverCached = this.externalAtomicSwaps[redeemOrder.receiver];\n    if (senderCached !== undefined) {\n      const atomic = senderCached.data[secretHash];\n      if (atomic !== undefined) {\n        atomic.redeemOrder = redeemOrder;\n      }\n    }\n    if (receiverCached !== undefined) {\n      const atomic = receiverCached.data[secretHash];\n      if (atomic !== undefined) {\n        atomic.redeemOrder = redeemOrder;\n      }\n    }\n  }\n\n  async getCombinedAddressToAsset() {\n    const { lastUpdate, data } = this.addressToAsset;\n    const cacheIsExpired = lastUpdate + this.EXTERNAL_ATOMICS_DATA_CACHE_TIME_MS < Date.now();\n    if (!cacheIsExpired) return data;\n    const addressToAssetData: Partial<Record<string, Partial<Record<SupportedChainId, string>>>> = {};\n    await Promise.all(this.unitsArray.map(async (unit) => {\n      const { blockchainService, chainId } = unit;\n      const { assetToAddress } = await simpleFetch(blockchainService.getInfo)();\n      Object.entries(assetToAddress).forEach(([asset, address]) => {\n        if (address !== undefined) {\n          const assetRecord = addressToAssetData[address];\n          if (assetRecord !== undefined) {\n            assetRecord[chainId] = asset;\n          } else {\n            addressToAssetData[address] = {\n              [chainId]: asset,\n            };\n          }\n        }\n      });\n    }));\n    this.addressToAsset = {\n      lastUpdate: Date.now(),\n      data: addressToAssetData,\n    }\n    return addressToAssetData;\n  }\n\n  async combineLocalAndExternalData(\n    walletAddress: string,\n    localAtomicSwaps: AtomicSwapLocal[],\n    transactions: TransactionInfo[],\n  ) {\n    // Prepare transactions data\n    const byTxHashMap = new Map<string, TransactionInfo>();\n    type BridgeTxs = {\n      lockTx?: TransactionInfo | undefined\n      redeemTx?: TransactionInfo | undefined\n      refundTx?: TransactionInfo | undefined\n    };\n    const bySecretHashMap = new Map<string, BridgeTxs>();\n    transactions.forEach((tx) => {\n      if (tx.hash !== undefined) byTxHashMap.set(tx.hash, tx);\n      if (tx.payload) {\n        const { type, data } = tx.payload;\n        if (type === TxType.BRIDGE_LOCK || type === TxType.BRIDGE_REDEEM || type === TxType.BRIDGE_REFUND) {\n          const item = bySecretHashMap.get(data.secretHash);\n          bySecretHashMap.set(data.secretHash, {\n            ...item,\n            lockTx: type === TxType.BRIDGE_LOCK ? tx : item?.lockTx,\n            redeemTx: type === TxType.BRIDGE_REDEEM ? tx : item?.redeemTx,\n            refundTx: type === TxType.BRIDGE_REFUND ? tx : item?.refundTx,\n          });\n        }\n      }\n    });\n\n    // Combine local data and external data\n    const bridgeHistory = await this.getHistory(walletAddress);\n    const combinedAddressToAsset = await this.getCombinedAddressToAsset();\n    const atomicSwapsMap = new Map<string, AtomicSwap>();\n    Object.values(bridgeHistory)\n      .filter(isPresent)\n      .forEach((atomicHistoryItem) => {\n        const { lock, redeem, refund } = atomicHistoryItem.transactions ?? {};\n        const lockTx = lock !== undefined\n          ? {\n            hash: lock,\n            status: TxStatus.SETTLED,\n          }\n          : undefined;\n        const redeemTx = redeem !== undefined\n          ? {\n            hash: redeem,\n            status: TxStatus.SETTLED,\n          }\n          : undefined;\n        const refundTx = refund !== undefined\n          ? {\n            hash: refund,\n            status: TxStatus.SETTLED,\n          }\n          : undefined;\n\n        let redeemExpired = false;\n\n        // If redeem order is expired\n        if (atomicHistoryItem.redeemOrder) {\n          const currentTime = Date.now();\n          if (currentTime > atomicHistoryItem.redeemOrder.expiration) redeemExpired = true;\n        }\n\n        const assetName = combinedAddressToAsset[atomicHistoryItem.asset]?.[atomicHistoryItem.sourceChainId];\n\n        const amount = atomicHistoryItem.amountToReceive ?? atomicHistoryItem.amountToSpend;\n\n        invariant(atomicHistoryItem.expiration?.lock, 'Lock expiration must be defined');\n        atomicSwapsMap.set(atomicHistoryItem.secretHash, {\n          ...atomicHistoryItem,\n          walletAddress: atomicHistoryItem.sender,\n          creationDate: atomicHistoryItem.creationDate.getTime(),\n          assetName,\n          lockTx,\n          amount: amount !== undefined ? amount.toString() : undefined,\n          redeemTx,\n          refundTx,\n          lockExpiration: atomicHistoryItem.expiration.lock,\n          redeemExpired,\n        });\n      });\n    localAtomicSwaps.forEach((atomic) => {\n      const atomicInMap = atomicSwapsMap.get(atomic.secretHash);\n\n      const { liquidityMigrationTxHash, redeemSettlement, secretHash } = atomic;\n\n      const secretHashTxs = bySecretHashMap.get(secretHash);\n      let redeemTx: TransactionInfo | undefined;\n      if (redeemSettlement) {\n        if (redeemSettlement.type === 'own_tx') {\n          redeemTx = secretHashTxs?.redeemTx;\n        } else if (redeemSettlement.result) {\n          redeemTx = {\n            status: redeemSettlement.result.value === 'success' ? TxStatus.SETTLED : TxStatus.FAILED,\n          }\n        } else if (redeemSettlement.requestedAt !== undefined) {\n          redeemTx = {\n            status: TxStatus.PENDING,\n          }\n        }\n      }\n      const liquidityMigrationTx = liquidityMigrationTxHash !== undefined ? byTxHashMap.get(liquidityMigrationTxHash) : undefined;\n      const amount = atomic.amount !== undefined\n        ? new BigNumber(atomic.amount).div(10 ** INTERNAL_PROTOCOL_PRECISION).toString()\n        : undefined;\n      if (atomicInMap) { // Merge local and backend data\n        atomicSwapsMap.set(atomic.secretHash, {\n          ...atomicInMap,\n          ...atomic,\n          lockExpiration: atomicInMap.lockExpiration,\n          targetChainId: atomicInMap.targetChainId,\n          sourceChainId: atomicInMap.sourceChainId,\n          amount: atomicInMap.amount ?? amount,\n          lockTx: atomicInMap.lockTx ?? secretHashTxs?.lockTx,\n          redeemTx: atomicInMap.redeemTx ?? redeemTx,\n          refundTx: atomicInMap.refundTx ?? secretHashTxs?.refundTx,\n          liquidityMigrationTx: atomicInMap.liquidityMigrationTx ?? liquidityMigrationTx,\n        });\n      } else {\n        invariant(atomic.targetChainId, 'Target chain id is not defined');\n        invariant(atomic.sourceChainId, 'Source chain id is not defined');\n        invariant(atomic.lockExpiration, 'Lock expiration is not defined');\n\n        atomicSwapsMap.set(atomic.secretHash, {\n          ...atomic,\n          sourceChainId: atomic.sourceChainId,\n          targetChainId: atomic.targetChainId,\n          lockExpiration: atomic.lockExpiration,\n          lockTx: secretHashTxs?.lockTx,\n          redeemTx,\n          refundTx: secretHashTxs?.refundTx,\n          liquidityMigrationTx,\n        });\n      }\n    });\n    return atomicSwapsMap;\n  }\n\n  makeAtomicSwap(\n    walletAddress: string,\n    networkFrom: SupportedChainId,\n    networkTo: SupportedChainId,\n    amount: string,\n    asset: string,\n    env?: string | undefined,\n  ) {\n    const secret = generateSecret();\n    const secretHash = ethers.keccak256(secret);\n    const lockExpiration = Date.now() + SECONDS_IN_DAY * EXPIRATION_DAYS * 1000;\n\n    return {\n      sourceChainId: networkFrom,\n      targetChainId: networkTo,\n      amount,\n      walletAddress,\n      secret,\n      secretHash,\n      assetName: asset,\n      creationDate: Date.now(),\n      lockExpiration,\n      env,\n    };\n  }\n\n  async getHistory(address: string, limit = 1000) {\n    const cachedData = this.externalAtomicSwaps[address];\n    let data: ExternalAtomicsData | undefined;\n    if (cachedData !== undefined) {\n      const cacheIsExpired = cachedData.lastUpdate + this.EXTERNAL_ATOMICS_DATA_CACHE_TIME_MS < Date.now();\n      if (!cacheIsExpired) data = cachedData.data;\n    }\n\n    if (data === undefined) {\n      data = await getHistory(this.unitsArray, address, limit);\n      this.externalAtomicSwaps[address] = {\n        lastUpdate: Date.now(),\n        data,\n      };\n    }\n    return data;\n  }\n\n  swap(\n    assetName: string,\n    amount: BigNumber.Value,\n    sourceChain: SupportedChainId,\n    targetChain: SupportedChainId,\n    signer: ethers.Signer,\n    options: {\n      autoApprove?: boolean\n      logger?: (message: string) => void\n      withdrawToWallet?: boolean\n    }\n  ) {\n    return swapExt({\n      amount,\n      assetName,\n      sourceChain,\n      targetChain,\n      signer,\n      unitsArray: this.unitsArray,\n      options,\n    })\n  }\n}\n","import { ethers } from 'ethers';\nimport type Unit from '../../Unit/index.js';\nimport type { SupportedChainId } from '../../types.js';\nimport { isValidChainId } from '../../utils/index.js';\nimport { simpleFetch } from 'simple-typed-fetch';\nimport bsonObjectId from 'bson-objectid';\n\nconst ObjectID = bsonObjectId;\n\nconst getHistory = async (units: Unit[], address: string, limit = 1000) => {\n  if (!ethers.isAddress(address)) throw new Error(`Invalid address: ${address}`);\n  const data = await Promise.all(units.map(async ({ blockchainService, aggregator, chainId }) => {\n    const sourceNetworkHistory = await simpleFetch(blockchainService.getSourceAtomicSwapHistory)({\n      limit,\n      sender: address,\n    });\n    const targetNetworkHistory = await simpleFetch(blockchainService.getTargetAtomicSwapHistory)({\n      limit,\n      receiver: address,\n    });\n    const aggregatorHistoryAtomicSwaps = await simpleFetch(aggregator.getHistoryAtomicSwaps)(\n      address,\n      limit\n    );\n\n      type SourceNetworkHistoryItem = Omit<\n        typeof sourceNetworkHistory.data[number],\n        'secretHash'\n      > & {\n        sourceChainId: SupportedChainId\n      };\n      const sourceNetworkHistoryObj = sourceNetworkHistory.data.reduce<\n        Partial<Record<string, SourceNetworkHistoryItem>>\n        >((acc, cur) => {\n          const { secretHash } = cur;\n          const lowercaseSecretHash = secretHash.toLowerCase();\n\n          acc[lowercaseSecretHash] = {\n            ...cur,\n            sourceChainId: chainId,\n          }\n          return acc;\n        }, {});\n\n      type TargetNetworkHistoryItem = Omit<\n        typeof targetNetworkHistory.data[number],\n        'secretHash'\n      > & {\n        targetChainId: SupportedChainId\n      };\n\n      const targetNetworkHistoryObj = targetNetworkHistory.data.reduce<\n        Partial<Record<string, TargetNetworkHistoryItem>>\n        >((acc, cur) => {\n          const { secretHash } = cur;\n          const lowercaseSecretHash = secretHash.toLowerCase();\n\n          acc[lowercaseSecretHash] = {\n            ...cur,\n            targetChainId: chainId,\n          }\n          return acc;\n        }, {});\n\n      type AggregatorHistoryAtomicSwapsItem = typeof aggregatorHistoryAtomicSwaps[number] & {\n        chainId: SupportedChainId\n      }\n\n      const aggregatorHistoryAtomicSwapsObj = aggregatorHistoryAtomicSwaps.reduce<\n        Partial<Record<string, AggregatorHistoryAtomicSwapsItem>>\n        >((acc, cur) => {\n          const { secretHash } = cur.lockOrder;\n          const lowercaseSecretHash = secretHash.toLowerCase();\n          acc[lowercaseSecretHash] = {\n            ...cur,\n            chainId,\n          }\n          return acc;\n        }, {});\n\n      return {\n        sourceNetworkHistory: sourceNetworkHistoryObj,\n        targetNetworkHistory: targetNetworkHistoryObj,\n        network: chainId,\n        aggregatorHistoryAtomicSwaps: aggregatorHistoryAtomicSwapsObj\n      };\n  }));\n\n    type SourceItems = typeof data[number]['sourceNetworkHistory'];\n\n    const unitedSourceItems = data.reduce<SourceItems>((acc, cur) => {\n      const { sourceNetworkHistory } = cur;\n      return {\n        ...acc,\n        ...sourceNetworkHistory,\n      }\n    }, {});\n\n    type TargetItems = typeof data[number]['targetNetworkHistory'];\n\n    const unitedTargetItems = data.reduce<TargetItems>((acc, cur) => {\n      const { targetNetworkHistory } = cur;\n      return {\n        ...acc,\n        ...targetNetworkHistory,\n      }\n    }, {});\n\n    type AggItems = typeof data[number]['aggregatorHistoryAtomicSwaps'];\n\n    const unitedAggregatorHistory = data.reduce<AggItems>((acc, cur) => {\n      const { aggregatorHistoryAtomicSwaps } = cur;\n      return {\n        ...acc,\n        ...aggregatorHistoryAtomicSwaps,\n      }\n    }, {});\n\n    type TargetItem = NonNullable<TargetItems[string]>;\n    type SourceItem = NonNullable<SourceItems[string]>;\n    type AggItem = NonNullable<AggItems[string]>;\n\n    type AggregatedItem = {\n      creationDate: Date\n      sourceChainId: SupportedChainId\n      targetChainId: SupportedChainId\n      used: boolean\n      claimed: boolean\n      isAggApplied: boolean\n      asset: string\n      sender: string\n      secretHash: string\n      receiver?: string | undefined\n      secret?: string | undefined\n      timestamp: TargetItem['timestamp'] & SourceItem['timestamp']\n      expiration: TargetItem['expiration'] & SourceItem['expiration']\n      transactions: TargetItem['transactions'] & SourceItem['transactions']\n      lockOrder?: AggItem['lockOrder'] | undefined\n      redeemOrder?: AggItem['redeemOrder'] | undefined\n      amountToReceive: SourceItem['amountToReceive']\n      amountToSpend: SourceItem['amountToSpend']\n      status: {\n        source?: SourceItem['state'] | undefined\n        target?: TargetItem['state'] | undefined\n        aggregator?: AggItem['status'] | undefined\n      }\n    }\n\n    // Aggregate data\n    const aggregatedData = Object.entries(unitedSourceItems).reduce<\n        Partial<Record<string, AggregatedItem>>\n    >((acc, [secretHash, item]) => {\n      if (item === undefined) throw new Error(`Item is undefined for secretHash: ${secretHash}`);\n\n      const targetItem = unitedTargetItems[secretHash];\n      // if (targetItem === undefined) {\n      //   console.error(`Target item is undefined for secretHash: ${secretHash}`);\n      // }\n\n      const aggItem = unitedAggregatorHistory[secretHash];\n      // if (aggItem === undefined) {\n      //   console.error(`Aggregator item is undefined for secretHash: ${secretHash}`);\n      // }\n\n      const targetChainIdFromSource = item.targetChainId.toString();\n      if (!isValidChainId(targetChainIdFromSource)) {\n        throw new Error(`Invalid targetChainId: ${targetChainIdFromSource}`);\n      }\n\n      const creationDate = ObjectID(item._id).getTimestamp();\n      const dataItem = {\n        creationDate,\n        sourceChainId: item.sourceChainId,\n        targetChainId: targetItem?.targetChainId ?? targetChainIdFromSource,\n        // Shared data\n        used: item.used,\n        claimed: item.claimed,\n        isAggApplied: item.isAggApplied,\n        asset: item.asset,\n        sender: item.sender,\n        secretHash,\n        receiver: item.receiver ?? targetItem?.receiver,\n        secret: item.secret ?? targetItem?.secret,\n\n        // Combined data\n        timestamp: {\n          ...item.timestamp,\n          ...targetItem?.timestamp,\n        },\n        expiration: {\n          ...item.expiration,\n          ...targetItem?.expiration,\n        },\n        transactions: {\n          ...item.transactions,\n          ...targetItem?.transactions,\n        },\n        amountToReceive: item.amountToReceive,\n        amountToSpend: item.amountToSpend,\n        status: {\n          source: item.state,\n          target: targetItem?.state,\n          aggregator: aggItem?.status,\n        },\n        lockOrder: aggItem?.lockOrder,\n        redeemOrder: aggItem?.redeemOrder,\n      }\n      acc[secretHash] = dataItem;\n      return acc;\n    }, {});\n    return aggregatedData;\n}\n\nexport default getHistory;\n","import { BigNumber } from 'bignumber.js';\nimport { ethers } from 'ethers';\nimport { Exchange__factory } from '@orionprotocol/contracts/lib/ethers-v6/index.js';\nimport getBalances from '../../utils/getBalances.js';\nimport BalanceGuard from '../../BalanceGuard.js';\nimport getAvailableSources from '../../utils/getAvailableFundsSources.js';\nimport {\n  INTERNAL_PROTOCOL_PRECISION,\n  NATIVE_CURRENCY_PRECISION,\n  LOCKATOMIC_GAS_LIMIT,\n  REDEEMATOMIC_GAS_LIMIT,\n  WITHDRAW_GAS_LIMIT\n} from '../../constants/index.js';\nimport getNativeCryptocurrencyName from '../../utils/getNativeCryptocurrencyName.js';\nimport { denormalizeNumber, generateSecret, normalizeNumber, toUpperCase } from '../../utils/index.js';\nimport type { SupportedChainId } from '../../types.js';\nimport type { z } from 'zod';\nimport type { placeAtomicSwapSchema } from '../../services/Aggregator/schemas/index.js';\nimport { simpleFetch } from 'simple-typed-fetch';\nimport type { Unit } from '../../index.js';\n\ntype Params = {\n  assetName: string\n  amount: BigNumber.Value\n  sourceChain: SupportedChainId\n  targetChain: SupportedChainId\n  signer: ethers.Signer\n  unitsArray: Unit[]\n  options?: {\n    withdrawToWallet?: boolean // By default, the transfer amount remains in the exchange contract\n    autoApprove?: boolean\n    logger?: (message: string) => void\n  }\n}\n\nexport default async function swap({\n  amount,\n  assetName,\n  sourceChain,\n  targetChain,\n  signer,\n  options,\n  unitsArray,\n}: Params) {\n  const startProcessingTime = Date.now();\n  if (amount === '') throw new Error('Amount can not be empty');\n  if (assetName === '') throw new Error('AssetIn can not be empty');\n\n  const amountBN = new BigNumber(amount);\n  if (amountBN.isNaN()) throw new Error(`Amount '${amountBN.toString()}' is not a number`);\n  if (amountBN.lte(0)) throw new Error(`Amount '${amountBN.toString()}' should be greater than 0`);\n\n  const sourceChainUnit = unitsArray.find(({ chainId }) => chainId === sourceChain);\n  const targetChainUnit = unitsArray.find(({ chainId }) => chainId === targetChain);\n\n  if (sourceChainUnit === undefined) throw new Error(`Source chain '${sourceChain}' not found`);\n  if (targetChainUnit === undefined) throw new Error(`Target chain '${targetChain}' not found`);\n\n  const {\n    blockchainService: sourceBlockchainService,\n    aggregator: sourceAggregator,\n    provider: sourceProvider,\n    chainId,\n  } = sourceChainUnit;\n\n  const {\n    aggregator: targetAggregator,\n    blockchainService: targetBlockchainService,\n    provider: targetProvider,\n  } = targetChainUnit;\n\n  const sourceSupportedBridgeAssets = await simpleFetch(sourceBlockchainService.getAtomicSwapAssets)();\n  const targetSupportedBridgeAssets = await simpleFetch(targetBlockchainService.getAtomicSwapAssets)();\n\n  const commonSupportedBridgeAssets = sourceSupportedBridgeAssets.filter((asset) => targetSupportedBridgeAssets.includes(asset));\n  if (!sourceSupportedBridgeAssets.includes(assetName) || !targetSupportedBridgeAssets.includes(assetName)) {\n    throw new Error(`Asset '${assetName}' not available for swap between ${sourceChain} and ${targetChain} chains. Available assets: ${commonSupportedBridgeAssets.join(', ')}`);\n  }\n\n  const brokersBalances = await new Promise<Partial<Record<string, number>>>((resolve, reject) => {\n    const timeout = setTimeout(() => {\n      reject(new Error(\"Can't get brokers balances. Timeout\"));\n    }, 10000);\n    const id = targetAggregator.ws.subscribe('btasabus', {\n      callback: (data) => {\n        targetAggregator.ws.unsubscribe(id);\n        targetAggregator.ws.destroy();\n        clearTimeout(timeout);\n        resolve(data);\n      }\n    })\n  })\n\n  const walletAddress = await signer.getAddress();\n  options?.logger?.(`Wallet address is ${walletAddress}`);\n\n  const assetBrokersBalance = brokersBalances[assetName];\n  if (assetBrokersBalance === undefined) throw new Error(`Asset '${assetName}' not found in brokers balances`);\n  if (assetBrokersBalance === 0) throw new Error(`Asset '${assetName}' is not available for swap`);\n\n  const {\n    exchangeContractAddress: sourceExchangeContractAddress,\n    assetToAddress: sourceAssetToAddress,\n  } = await simpleFetch(sourceBlockchainService.getInfo)();\n\n  const sourceChainNativeCryptocurrency = getNativeCryptocurrencyName(sourceAssetToAddress);\n  const sourceExchangeContract = Exchange__factory.connect(sourceExchangeContractAddress, sourceProvider);\n  // const sourceChainGasPriceWei = await simpleFetch(sourceBlockchainService.getGasPriceWei)();\n\n  const sourceChainAssetAddress = sourceAssetToAddress[assetName];\n  if (sourceChainAssetAddress === undefined) throw new Error(`Asset '${assetName}' not found in source chain`);\n\n  const {\n    exchangeContractAddress: targetExchangeContractAddress,\n    assetToAddress: targetAssetToAddress,\n  } = await simpleFetch(targetBlockchainService.getInfo)();\n\n  const targetChainAssetAddress = targetAssetToAddress[assetName];\n  if (targetChainAssetAddress === undefined) throw new Error(`Asset '${assetName}' not found in target chain`);\n  const targetChainNativeCryptocurrency = getNativeCryptocurrencyName(targetAssetToAddress);\n  const targetExchangeContract = Exchange__factory.connect(targetExchangeContractAddress, targetProvider);\n\n  const sourceChainBalances = await getBalances(\n    {\n      [assetName]: sourceChainAssetAddress,\n      [sourceChainNativeCryptocurrency]: ethers.ZeroAddress,\n    },\n    sourceAggregator,\n    walletAddress,\n    sourceExchangeContract,\n    sourceProvider,\n  );\n\n  const targetChainBalances = await getBalances(\n    {\n      [assetName]: targetChainAssetAddress,\n      [targetChainNativeCryptocurrency]: ethers.ZeroAddress,\n    },\n    targetAggregator,\n    walletAddress,\n    targetExchangeContract,\n    targetProvider,\n  );\n\n  const sourceChainBalanceGuard = new BalanceGuard(\n    sourceChainBalances,\n    {\n      name: sourceChainNativeCryptocurrency,\n      address: ethers.ZeroAddress,\n    },\n    sourceProvider,\n    signer,\n    options?.logger,\n  );\n\n  const targetChainBalanceGuard = new BalanceGuard(\n    targetChainBalances,\n    {\n      name: targetChainNativeCryptocurrency,\n      address: ethers.ZeroAddress,\n    },\n    targetProvider,\n    signer,\n    options?.logger,\n  );\n\n  sourceChainBalanceGuard.registerRequirement({\n    reason: 'Amount',\n    asset: {\n      name: assetName,\n      address: sourceChainAssetAddress,\n    },\n    amount: amountBN.toString(),\n    spenderAddress: sourceExchangeContractAddress,\n    sources: getAvailableSources('amount', sourceChainAssetAddress, 'pool'),\n  });\n\n  const amountBlockchainParam = normalizeNumber(\n    amount,\n    INTERNAL_PROTOCOL_PRECISION,\n    BigNumber.ROUND_FLOOR,\n  );\n  const secret = generateSecret();\n  const secretHash = ethers.keccak256(secret);\n  options?.logger?.(`Secret is ${secret}`);\n  options?.logger?.(`Secret hash is ${secretHash}`);\n\n  const secondsInDay = 60 * 60 * 24;\n  const expirationDays = 4;\n  const expirationEtherBN = BigInt(\n    Date.now() + (secondsInDay * expirationDays * 1000),\n  );\n\n  const unsignedLockAtomicTx = await sourceExchangeContract.lockAtomic.populateTransaction({\n    amount: amountBlockchainParam,\n    asset: sourceChainAssetAddress,\n    expiration: expirationEtherBN,\n    secretHash,\n    sender: walletAddress,\n    targetChainId: BigInt(targetChain),\n  });\n\n  let sourceChainGasPrice: bigint;\n  const sourceChainFeeData = await sourceChainUnit.provider.getFeeData();\n  if (sourceChainFeeData.gasPrice !== null) { //\n    unsignedLockAtomicTx.gasPrice = sourceChainFeeData.gasPrice;\n    sourceChainGasPrice = sourceChainFeeData.gasPrice;\n  } else if (\n    sourceChainFeeData.maxFeePerGas !== null &&\n    sourceChainFeeData.maxPriorityFeePerGas !== null\n  ) { // EIP-1559\n    unsignedLockAtomicTx.maxFeePerGas = sourceChainFeeData.maxFeePerGas;\n    unsignedLockAtomicTx.maxPriorityFeePerGas = sourceChainFeeData.maxPriorityFeePerGas;\n    sourceChainGasPrice = sourceChainFeeData.maxFeePerGas;\n  } else {\n    throw new Error('Can\\'t get gas price');\n  }\n\n  unsignedLockAtomicTx.chainId = BigInt(chainId);\n  unsignedLockAtomicTx.from = walletAddress;\n\n  let value = new BigNumber(0);\n  const denormalizedAssetInExchangeBalance = sourceChainBalances[assetName]?.exchange;\n  if (denormalizedAssetInExchangeBalance === undefined) throw new Error(`Asset '${assetName}' exchange balance is not found`);\n  if (assetName === sourceChainNativeCryptocurrency && amountBN.gt(denormalizedAssetInExchangeBalance)) {\n    value = amountBN.minus(denormalizedAssetInExchangeBalance);\n  }\n  unsignedLockAtomicTx.value = normalizeNumber(\n    value.dp(INTERNAL_PROTOCOL_PRECISION, BigNumber.ROUND_CEIL),\n    NATIVE_CURRENCY_PRECISION,\n    BigNumber.ROUND_CEIL,\n  );\n  unsignedLockAtomicTx.gasLimit = BigInt(LOCKATOMIC_GAS_LIMIT);\n\n  const transactionCost = BigInt(LOCKATOMIC_GAS_LIMIT) * sourceChainGasPrice;\n  const denormalizedTransactionCost = denormalizeNumber(transactionCost, BigInt(NATIVE_CURRENCY_PRECISION));\n\n  sourceChainBalanceGuard.registerRequirement({\n    reason: 'Network fee',\n    asset: {\n      name: sourceChainNativeCryptocurrency,\n      address: ethers.ZeroAddress,\n    },\n    amount: denormalizedTransactionCost.toString(),\n    sources: ['wallet']\n  });\n\n  await sourceChainBalanceGuard.check(options?.autoApprove);\n\n  const nonce = await sourceProvider.getTransactionCount(walletAddress, 'pending');\n  unsignedLockAtomicTx.nonce = nonce;\n\n  options?.logger?.('Signing lock tx transaction...');\n  const signedTransaction = await signer.signTransaction(unsignedLockAtomicTx);\n  const lockAtomicTxResponse = await sourceChainUnit.provider.broadcastTransaction(signedTransaction);\n  options?.logger?.(`Lock tx sent. Tx hash: ${lockAtomicTxResponse.hash}. Waiting for tx to be mined...`);\n  await lockAtomicTxResponse.wait();\n  options?.logger?.('Lock tx mined.');\n  options?.logger?.('Placing atomic swap...');\n\n  const atomicSwap = await new Promise<z.infer<typeof placeAtomicSwapSchema>>((resolve, reject) => {\n    const placeAtomicSwap = () => simpleFetch(targetAggregator.placeAtomicSwap)(\n      secretHash,\n      toUpperCase(sourceChainUnit.networkCode)\n    ).then((data) => {\n      clearInterval(interval);\n      clearTimeout(timeout);\n      resolve(data);\n    }).catch(console.error);\n    const interval = setInterval(() => {\n      placeAtomicSwap().catch(console.error);\n    }, 2000);\n\n    const timeout = setTimeout(() => {\n      clearInterval(interval);\n      reject(new Error('Atomic swap placing timeout'));\n    }, 1000 * 60 * 5);\n  });\n\n  options?.logger?.('Atomic swap placed.');\n\n  // const targetChainGasPriceWei = await simpleFetch(targetBlockchainService.getGasPriceWei)();\n  const unsignedRedeemAtomicTx = await targetExchangeContract.redeemAtomic.populateTransaction(\n    {\n      amount: amountBlockchainParam,\n      asset: targetChainAssetAddress,\n      claimReceiver: atomicSwap.redeemOrder.claimReceiver,\n      expiration: atomicSwap.redeemOrder.expiration,\n      receiver: atomicSwap.redeemOrder.receiver,\n      secretHash: atomicSwap.redeemOrder.secretHash,\n      sender: atomicSwap.redeemOrder.sender,\n      signature: atomicSwap.redeemOrder.signature,\n    },\n    secret\n  )\n\n  let targetChainGasPrice: bigint;\n  const targetChainFeeData = await targetChainUnit.provider.getFeeData();\n  if (targetChainFeeData.gasPrice !== null) { //\n    unsignedRedeemAtomicTx.gasPrice = targetChainFeeData.gasPrice;\n    targetChainGasPrice = targetChainFeeData.gasPrice;\n  } else if (\n    targetChainFeeData.maxFeePerGas !== null &&\n      targetChainFeeData.maxPriorityFeePerGas !== null\n  ) { // EIP-1559\n    unsignedRedeemAtomicTx.maxFeePerGas = targetChainFeeData.maxFeePerGas;\n    unsignedRedeemAtomicTx.maxPriorityFeePerGas = targetChainFeeData.maxPriorityFeePerGas;\n    targetChainGasPrice = targetChainFeeData.maxFeePerGas;\n  } else {\n    throw new Error('Can\\'t get gas price');\n  }\n\n  unsignedRedeemAtomicTx.chainId = BigInt(parseInt(targetChain, 10));\n  unsignedRedeemAtomicTx.from = walletAddress;\n  unsignedRedeemAtomicTx.gasLimit = BigInt(REDEEMATOMIC_GAS_LIMIT);\n\n  const redeemAtomicTransactionCost = BigInt(REDEEMATOMIC_GAS_LIMIT) * targetChainGasPrice;\n  const targetDenormalizedTransactionCost = denormalizeNumber(redeemAtomicTransactionCost, BigInt(NATIVE_CURRENCY_PRECISION));\n\n  targetChainBalanceGuard.registerRequirement({\n    reason: 'Network fee',\n    asset: {\n      name: targetChainNativeCryptocurrency,\n      address: ethers.ZeroAddress,\n    },\n    amount: targetDenormalizedTransactionCost.toString(),\n    sources: ['wallet']\n  });\n\n  await targetChainBalanceGuard.check(options?.autoApprove);\n\n  unsignedRedeemAtomicTx.nonce = await targetProvider.getTransactionCount(walletAddress, 'pending');\n\n  options?.logger?.('Signing redeem tx transaction...');\n\n  const targetSignedTransaction = await signer.signTransaction(unsignedRedeemAtomicTx);\n  const targetLockAtomicTxResponse = await targetChainUnit.provider.broadcastTransaction(targetSignedTransaction);\n  options?.logger?.(`Redeem tx sent. Tx hash: ${targetLockAtomicTxResponse.hash}. Waiting for tx to be mined...`);\n\n  await targetLockAtomicTxResponse.wait();\n  options?.logger?.('Redeem tx mined.');\n  options?.logger?.('Atomic swap completed.');\n\n  if (options?.withdrawToWallet !== undefined && options.withdrawToWallet) {\n    options.logger?.('Withdrawing to wallet...');\n    const unsignedWithdrawTx = await targetExchangeContract.withdraw.populateTransaction(\n      targetChainAssetAddress,\n      amountBlockchainParam,\n    );\n    if (targetChainFeeData.gasPrice !== null) { //\n      unsignedWithdrawTx.gasPrice = targetChainFeeData.gasPrice;\n      targetChainGasPrice = targetChainFeeData.gasPrice;\n    } else if (\n      targetChainFeeData.maxFeePerGas !== null &&\n      targetChainFeeData.maxPriorityFeePerGas !== null\n    ) { // EIP-1559\n      unsignedWithdrawTx.maxFeePerGas = targetChainFeeData.maxFeePerGas;\n      unsignedWithdrawTx.maxPriorityFeePerGas = targetChainFeeData.maxPriorityFeePerGas;\n      targetChainGasPrice = targetChainFeeData.maxFeePerGas;\n    } else {\n      throw new Error('Can\\'t get gas price');\n    }\n    unsignedWithdrawTx.chainId = BigInt(parseInt(targetChain, 10));\n    unsignedWithdrawTx.gasLimit = BigInt(WITHDRAW_GAS_LIMIT);\n    unsignedWithdrawTx.from = walletAddress;\n    unsignedWithdrawTx.nonce = await targetProvider.getTransactionCount(walletAddress, 'pending');\n    const signedTx = await signer.signTransaction(unsignedWithdrawTx);\n    const withdrawTx = await targetProvider.broadcastTransaction(signedTx);\n    options.logger?.(`Withdraw tx sent. Tx hash: ${withdrawTx.hash}. Waiting for tx to be mined...`);\n    await withdrawTx.wait();\n    options.logger?.('Withdraw tx mined.');\n  }\n\n  options?.logger?.(`Total processing time: ${Date.now() - startProcessingTime} ms`);\n}\n","export function invariant<T = unknown>(\n  condition: T,\n  errorMessage?: ((condition: T) => string) | string,\n): asserts condition {\n  if (condition) {\n    return;\n  }\n\n  if (typeof errorMessage === 'undefined') {\n    throw new Error('Invariant failed');\n  }\n\n  if (typeof errorMessage === 'string') {\n    throw new Error(errorMessage);\n  }\n\n  throw new Error(errorMessage(condition));\n}\n","import { fetchWithValidation } from 'simple-typed-fetch';\nimport { tickersSchema } from './schemas';\nimport type { TickersBaseSearchParams, TickersCategories } from '../../types';\n\nexport class Frontage {\n  private readonly apiUrl: string;\n\n  constructor(apiUrl: string) {\n    this.apiUrl = apiUrl;\n  }\n\n  searchTickers = ({\n    searchValue,\n    currentNetwork,\n    targetNetwork,\n    sortBy,\n    sortType,\n    offset,\n    limit,\n  }: { searchValue: string } & TickersBaseSearchParams) => {\n    const url = new URL(this.apiUrl);\n    const params = new URLSearchParams();\n\n    params.set('searchValue', encodeURIComponent(searchValue));\n    if (currentNetwork !== undefined) params.set('currentNetwork', encodeURIComponent(currentNetwork).toUpperCase());\n    if (targetNetwork !== undefined) params.set('targetNetwork', encodeURIComponent(targetNetwork).toUpperCase());\n    if (sortBy !== undefined) params.set('sortBy', encodeURIComponent(sortBy));\n    if (sortType !== undefined) params.set('sortType', encodeURIComponent(sortType));\n    if (offset !== undefined) params.set('offset', offset.toString());\n    if (limit !== undefined) params.set('limit', limit.toString());\n\n    url.pathname += '/api/v1/tickers/search';\n    url.search = params.toString();\n\n    return fetchWithValidation(\n      url.toString(),\n      tickersSchema\n    );\n  };\n\n  getTickers = ({\n    category,\n    currentNetwork,\n    targetNetwork,\n    sortBy,\n    sortType,\n    offset,\n    limit,\n    tickers,\n  }: { category: TickersCategories, tickers?: string } & TickersBaseSearchParams) => {\n    const url = new URL(this.apiUrl);\n    const params = new URLSearchParams();\n\n    if (category === 'FAVORITES' && tickers !== undefined) params.set('tickers', tickers);\n    if (category !== 'FAVORITES') params.set('category', category);\n    if (currentNetwork !== undefined) params.set('currentNetwork', encodeURIComponent(currentNetwork).toUpperCase());\n    if (targetNetwork !== undefined) params.set('targetNetwork', encodeURIComponent(targetNetwork).toUpperCase());\n    if (sortBy !== undefined) params.set('sortBy', encodeURIComponent(sortBy));\n    if (sortType !== undefined) params.set('sortType', encodeURIComponent(sortType));\n    if (offset !== undefined) params.set('offset', offset.toString());\n    if (limit !== undefined) params.set('limit', limit.toString());\n\n    if (category === 'FAVORITES' && tickers !== undefined) {\n      url.pathname += '/api/v1/tickers/get/favourites';\n    } else {\n      url.pathname += '/api/v1/tickers/get/category';\n    }\n\n    url.search = params.toString();\n\n    return fetchWithValidation(\n      url.toString(),\n      tickersSchema\n    );\n  };\n}\n\nexport * as schemas from './schemas/index.js';\n","export * from './tickers-schema';\n","import { z } from 'zod';\nimport { SupportedChainId } from '../../../types';\n\nexport const tickerSchema = z.object({\n  pair: z.string(),\n  volume24: z.number(),\n  change24: z.number(),\n  lastPrice: z.number(),\n  pricePrecision: z.number(),\n  networks: z.array(z.nativeEnum(SupportedChainId)),\n});\n\nexport const tickersSchema = z.array(tickerSchema);\n","export * as aggregator from './Aggregator/index.js';\nexport * as blockchainService from './BlockchainService/index.js';\nexport * as priceFeed from './PriceFeed/index.js';\nexport * as referralSystem from './ReferralSystem/index.js';\nexport * as indexer from './Indexer/index.js';\nexport * as frontage from './Frontage/index.js';\n"],"mappings":"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","names":["src_exports","__export","ADD_LIQUIDITY_GAS_LIMIT","APPROVE_ERC20_GAS_LIMIT","DAY","DEFAULT_GAS_LIMIT","DEPOSIT_ERC20_GAS_LIMIT","DEPOSIT_ETH_GAS_LIMIT","FARMING_CLAIM_GAS_LIMIT","FARMING_EXIT_GAS_LIMIT","FARMING_STAKE_GAS_LIMIT","FARMING_WITHDRAW_GAS_LIMIT","FILL_ORDERS_GAS_LIMIT","GOVERNANCE_GET_REWARD_GAS_LIMIT","GOVERNANCE_STAKE_GAS_LIMIT","GOVERNANCE_UNSTAKE_GAS_LIMIT","GOVERNANCE_VOTE_GAS_LIMIT","HistoryTransactionStatus","INTERNAL_PROTOCOL_PRECISION","LIQUIDITY_MIGRATE_GAS_LIMIT","LOCKATOMIC_GAS_LIMIT","MIGRATE_GAS_LIMIT","NATIVE_CURRENCY_PRECISION","Orion","REDEEMATOMIC_GAS_LIMIT","SERVICE_TOKEN","STAKE_ERC20_GAS_LIMIT","SWAP_THROUGH_ORION_POOL_GAS_LIMIT","SupportedChainId","TOKEN_EXCEPTIONS","TxStatus","TxType","Unit","VOTE_ERC20_GAS_LIMIT","WEEK_DAYS","WITHDRAW_GAS_LIMIT","YEAR","cancelOrderTypes_default","config_exports","crypt_exports","developmentChains","exchanges_default","exchangesMap_default","factories_default","generateSwapCalldata","networkCodes_default","orderStatuses_default","orderTypes_default","productionChains","services_exports","subOrderStatuses_default","utils_exports","__toCommonJS","import_bignumber","config_exports","__export","chains","envs","schemas_exports","chains_default","envs_default","schemas_exports","__export","eip712DomainSchema_default","knownEnvs","pureChainInfoPayloadSchema","pureChainInfoSchema","pureEnvNetworksSchema","pureEnvPayloadSchema","pureEnvSchema","import_zod","eip712DomainSchema","data","eip712DomainSchema_default","import_zod","SupportedChainId","HistoryTransactionStatus","TxStatus","TxType","pureEnvNetworksSchema","pureEnvPayloadSchema","SupportedChainId","knownEnvs","pureEnvSchema","import_zod","CANCEL_ORDER_TYPES","cancelOrderTypes_default","subOrderStatuses","subOrderStatuses_default","orderStatuses","subOrderStatuses_default","orderStatuses_default","ORDER_TYPES","orderTypes_default","networkCodes_default","exchanges_default","mapping","exchangesMap_default","developmentChains","productionChains","INTERNAL_PROTOCOL_PRECISION","NATIVE_CURRENCY_PRECISION","DEPOSIT_ETH_GAS_LIMIT","DEPOSIT_ERC20_GAS_LIMIT","WITHDRAW_GAS_LIMIT","APPROVE_ERC20_GAS_LIMIT","STAKE_ERC20_GAS_LIMIT","VOTE_ERC20_GAS_LIMIT","FILL_ORDERS_GAS_LIMIT","SWAP_THROUGH_ORION_POOL_GAS_LIMIT","ADD_LIQUIDITY_GAS_LIMIT","FARMING_STAKE_GAS_LIMIT","FARMING_CLAIM_GAS_LIMIT","FARMING_EXIT_GAS_LIMIT","FARMING_WITHDRAW_GAS_LIMIT","GOVERNANCE_GET_REWARD_GAS_LIMIT","GOVERNANCE_STAKE_GAS_LIMIT","GOVERNANCE_UNSTAKE_GAS_LIMIT","GOVERNANCE_VOTE_GAS_LIMIT","MIGRATE_GAS_LIMIT","LOCKATOMIC_GAS_LIMIT","REDEEMATOMIC_GAS_LIMIT","LIQUIDITY_MIGRATE_GAS_LIMIT","DEFAULT_GAS_LIMIT","TOKEN_EXCEPTIONS","DAY","WEEK_DAYS","YEAR","SERVICE_TOKEN","pureChainInfoPayloadSchema","SupportedChainId","networkCodes_default","pureChainInfoSchema","chains","pureChainInfoSchema","chains_default","envs","pureEnvSchema","envs_default","import_ethers","Aggregator_exports","__export","Aggregator","schemas_exports","ws_exports","import_zod","import_zod","orderInfoSchema","exchangeContractStep","swapInfoBase","swapInfoByAmountIn","val","swapInfoByAmountOut","swapInfoSchema","swapInfoSchema_default","import_zod","import_zod","pairConfigSchema","pairConfigSchema_default","exchangeInfoSchema","pairConfigSchema_default","exchangeInfoSchema_default","import_zod","cancelOrderSchema","cancelOrderSchema_default","import_zod","orderBenefitsSchema","orderBenefitsSchema_default","import_zod","errorSchema","errorSchema_default","import_zod","placeAtomicSwapSchema","placeAtomicSwapSchema_default","ws_exports","__export","AggregatorWS","MessageType_default","SubscriptionType_default","UnsubscriptionType_default","schemas_exports","import_zod","import_isomorphic_ws","import_uuid","MessageType","MessageType_default","SubscriptionType","SubscriptionType_default","schemas_exports","__export","addressUpdateSchema_default","assetPairsConfigSchema_default","balancesSchema_default","baseMessageSchema_default","brokerMessageSchema_default","errorSchema_default","initMessageSchema_default","orderBookItemSchema","orderBookSchema","pingPongMessageSchema_default","swapInfoSchema_default","import_zod","executionTypes","executionTypes_default","import_zod","utils_exports","__export","calculateFeeInFeeAsset_default","calculateNetworkFee","calculateNetworkFeeInFeeAsset_default","calculateServiceFeeInFeeAsset","checkIsToken_default","denormalizeNumber","generateSecret_default","getNativeCryptocurrencyName_default","hasProp","isKeyOfObject","isKnownEnv_default","isNetworkCodeInEnvironment","isUnknownObject","isUppercasedNetworkCode_default","isValidChainId_default","isWithCode","isWithData","isWithError","isWithMessage","isWithReason","laconic_parse_default","makePartial","normalizeNumber","parseExchangeTradeTransaction","removeFieldsFromObject_default","toLowerCase","toUpperCase","import_bignumber","import_bignumber","import_ethers","calculateNetworkFee","gasPriceGwei","gasLimit","networkFeeGwei","import_bignumber","convertPrice","amount","assetInName","assetOutName","prices","assetInPrice","assetOutPrice","assetInPriceBN","assetOutPriceBN","assetInAmountInQuoteAsset","calculateNetworkFeeInFeeAsset","gasPriceGwei","gasLimit","baseCurrencyName","feeAssetName","prices","networkFee","calculateNetworkFee","convertPrice","calculateNetworkFeeInFeeAsset_default","import_bignumber","calculateServiceFeeInFeeAsset","amount","baseAssetName","feeAssetName","feePercent","prices","feeAmount","convertPrice","calculateFeeInFeeAsset","amount","gasPriceGwei","feePercent","baseAssetName","baseCurrencyName","feeAssetName","prices","serviceFeeInFeeAsset","calculateServiceFeeInFeeAsset","networkFeeInFeeAsset","calculateNetworkFeeInFeeAsset_default","calculateFeeInFeeAsset_default","import_ethers_v6","import_ethers","import_tiny_invariant","checkIsToken","address","provider","invariant","tokenContract","checkIsToken_default","import_ethers","XorShift128Plus","seed","x","y","generateSeed","generateRandomBytes","size","rng","buffer","i","isomorphicCryptoRandomBytes","generateSecret","rand","generateSecret_default","import_bignumber","denormalizeNumber","input","decimals","decimalsBN","import_bignumber","normalizeNumber","input","decimals","roundingMode","decimalsBN","inputBN","isNetworkCodeInEnvironment","networkCode","env","envs","envNetworks","chains","chain","import_ethers_v6","import_ethers","import_zod","swapThroughOrionPoolSchema","data","buyOrderSchema","sellOrderSchema","toOrder","fillThroughOrionPoolSchema","fillOrdersSchema","parseExchangeTradeTransaction","tx","txDescription","toUpperCase","str","toLowerCase","str","isUppercasedNetworkCode","value","networkCodes_default","toUpperCase","networkCode","isUppercasedNetworkCode_default","import_ethers","getNativeCryptocurrencyName","assetToAddress","nativeCryptocurrencyName","prev","assetName","address","getNativeCryptocurrencyName_default","laconicParse","data","schema","payload","issuesMessages","issue","laconic_parse_default","import_zod","isValidChainId","chainId","success","SupportedChainId","isValidChainId_default","isKnownEnv","env","knownEnvs","knownEnv","isKnownEnv_default","removeFieldsFromObject","obj","fields","result","field","removeFieldsFromObject_default","makePartial","value","isUnknownObject","x","isKeyOfObject","key","obj","hasProp","isWithCode","candidate","type","isWithReason","isWithMessage","isWithError","isWithData","balancesSchema","makePartial","balancesSchema_default","import_zod","baseMessageSchema","MessageType_default","baseMessageSchema_default","baseAddressUpdate","baseMessageSchema_default","MessageType_default","subOrderSchema","subOrderStatuses_default","orderUpdateSchema","orderStatuses_default","executionTypes_default","val","o","so","fullOrderSchema","updateMessageSchema","balancesSchema_default","initialMessageSchema","addressUpdateSchema","addressUpdateSchema_default","import_zod","assetPairsConfigSchema","baseMessageSchema_default","MessageType_default","assetPairsConfigSchema_default","import_zod","brokerMessageSchema","baseMessageSchema_default","MessageType_default","brokerMessageSchema_default","import_zod","errorSchema","baseMessageSchema_default","MessageType_default","errorSchema_default","import_zod","initMessageSchema","baseMessageSchema_default","MessageType_default","initMessageSchema_default","import_zod","pingPongMessageSchema","baseMessageSchema_default","MessageType_default","pingPongMessageSchema_default","import_zod","factories_default","alternativeSchema","factorySchema","factories_default","swapInfoSchemaBase","baseMessageSchema_default","MessageType_default","swapInfoSchemaByAmountIn","content","swapInfoSchemaByAmountOut","swapInfoSchema","swapInfoSchema_default","import_zod","orderBookItemSchema","orderBookSchema","baseMessageSchema_default","MessageType_default","UnsubscriptionType","UnsubscriptionType_default","import_zod","unsubscriptionDoneSchema","baseMessageSchema_default","MessageType_default","unsubscriptionDoneSchema_default","import_zod","assetPairConfigSchema","baseMessageSchema_default","MessageType_default","assetPairConfigSchema_default","objectKeys","UNSUBSCRIBE","SERVER_PING_INTERVAL","HEARBEAT_THRESHOLD","messageSchema","initMessageSchema_default","pingPongMessageSchema_default","addressUpdateSchema_default","assetPairsConfigSchema_default","assetPairConfigSchema_default","brokerMessageSchema_default","orderBookSchema","swapInfoSchema_default","errorSchema_default","unsubscriptionDoneSchema_default","exclusiveSubscriptions","SubscriptionType_default","isSubType","subType","t","unknownMessageTypeRegex","nonExistentMessageRegex","AggregatorWS","wsUrl","uuidv4","basicAuth","logger","message","WebSocket","data","jsonObject","jsonData","heartbeat","type","subscription","prevSubscriptionId","id","makeSubscription","isExclusive","subRequest","subKey","subs","prevSub","newId","details","newestSubId","isOrderBooksSubscription","subId","auSubscriptions","targetAuSub","value","key","uuidValidate","aobusSubscriptions","targetAobusSub","UnsubscriptionType_default","isReconnect","err","event","e","subscriptions","subPayload","rawJson","json","MessageType_default","m","nonExistentMessageMatch","unknownMessageMatch","jsonPayload","objectKeys","st","sub","baseSwapInfo","path","item","ob","S","mapOrderbookItems","rawItems","acc","price","amount","exchanges","vob","side","pairName","pair","minQty","pricePrecision","pairs","priceUpdates","balances","prev","asset","assetBalances","tradable","reserved","contract","wallet","allowance","fullOrders","o","orderUpdate","brokerBalances","balance","import_zod","uppercasedNetworkCodes_default","import_zod","redeemOrderSchema","redeemOrderSchema_default","atomicSwapHistorySchema","uppercasedNetworkCodes_default","redeemOrderSchema_default","atomicSwapHistorySchema_default","schemas_exports","__export","aggregatedOrderbookSchema","atomicSwapHistorySchema_default","cancelOrderSchema_default","errorSchema_default","exchangeInfoSchema_default","exchangeOrderbookSchema","orderBenefitsSchema_default","orderSchema_default","pairConfigSchema_default","placeAtomicSwapSchema_default","poolReservesSchema","redeemOrderSchema_default","swapInfoSchema_default","import_ethers","import_zod","blockchainOrderSchema","value","tradeInfoSchema","baseOrderSchema","selfBrokers","exchanges_default","exchange","isSelfBroker","broker","selfBrokerSchema","brokerAddressSchema","subOrderSchema","subOrderStatuses_default","orderSchema","orderStatuses_default","orderSchema_default","import_zod","orderbookElementSchema","aggregatedOrderbookElementSchema","aggregatedOrderbookSchema","exchangeOrderbookSchema","poolReservesSchema","httpToWS","url","parsedUrl","e","httpToWS_default","import_ethers","import_simple_typed_fetch","import_zod","pmmOrderQuotationSchema","pmmOrderSchema","Aggregator","httpAPIUrl","wsAPIUrl","basicAuth","logger","AggregatorWS","httpToWS_default","orderId","owner","url","orderSchema_default","errorSchema_default","market","toUpperCase","pair","depth","aggregatedOrderbookSchema","exchange","filterByBrokerBalances","exchangeOrderbookSchema","exchangeInfoSchema_default","poolReservesSchema","assetPair","pairConfigSchema_default","address","signedOrder","isCreateInternalOrder","isReversedOrder","partnerId","source","rawExchangeRestrictions","headers","signedCancelOrderRequest","cancelOrderSchema_default","assetIn","assetOut","amount","instantSettlement","exchanges","isTradeBuy","swapInfoSchema_default","includePools","currency","symbol","isBuy","orderBenefitsSchema_default","secretHash","sourceNetworkCode","placeAtomicSwapSchema_default","sender","limit","atomicSwapHistorySchema","message","key","body","method","path","timestamp","apiKey","secretKey","sortedBody","payload","signature","tokenFrom","tokenTo","fromTokenAmount","wallet","data","signatureHeaders","compiledHeaders","res","pmmOrderSchema","json","parseResult","errorParseResult","err","BlockchainService_exports","__export","BlockchainService","schemas_exports","import_zod","schemas_exports","__export","IDOSchema_default","PairStatusEnum","addPoolSchema_default","adminPoolSchema","adminPoolsListSchema_default","atomicHistorySchema_default","atomicSummarySchema_default","checkRedeemOrderSchema_default","historySchema_default","infoSchema_default","pairStatusSchema","pmmSchema_default","poolOnVerificationSchema","poolsConfigSchema_default","poolsInfoSchema_default","poolsLpAndStakedSchema_default","poolsV3InfoSchema_default","pricesWithQuoteAssetSchema","referralDataSchema","userEarnedSchema_default","userVotesSchema_default","import_zod","PairStatusEnum","pairStatusSchema","tokenSchema","poolOnVerificationSchema","adminPoolSchema","import_zod","adminPoolsListSchema_default","poolOnVerificationSchema","import_zod","addPoolSchema","addPoolSchema_default","import_ethers","import_zod","import_zod","getValidArrayItemsSchema","elemSchema","items","validItems","i","item","parsedItem","baseAtomicHistorySchema","baseAtomicHistoryItem","sourceAtomicHistorySchemaItem","targetAtomicHistorySchemaItem","sourceAtomicHistorySchema","targetAtomicHistorySchema","atomicHistorySchema","getValidArrayItemsSchema","atomicHistorySchema_default","import_zod","checkRedeemOrderSchema","checkRedeemOrderSchema_default","import_zod","historySchema","response","item","type","createdAt","transactionHash","user","historySchema_default","import_zod","IDOSchema","IDOSchema_default","import_zod","internalFeeAssetSchema","infoSchema","makePartial","infoSchema_default","import_zod","import_ethers","import_zod","addressSchema","value","addressSchema_default","poolsConfigSchema","addressSchema_default","makePartial","poolsConfigSchema_default","import_zod","poolsInfoSchema","poolsInfoSchema_default","import_zod","atomicSummarySchema_default","import_zod","poolsLpAndStakedSchema","poolsLpAndStakedSchema_default","import_zod","userVotesSchema","userVotesSchema_default","import_zod","userEarnedSchema","userEarnedSchema_default","import_zod","poolsV3InfoSchema","poolsV3InfoSchema_default","import_zod","pmmSchema","pmmSchema_default","import_zod","pricesWithQuoteAssetSchema","makePartial","import_zod","referralDataSchema","import_simple_typed_fetch","BlockchainService","apiUrl","basicAuth","brokerAddress","unshifted","sourceNetworkCode","url","atomicSummarySchema_default","infoSchema_default","pmmSchema_default","poolsConfigSchema_default","poolsInfoSchema_default","address","poolsLpAndStakedSchema_default","userVotesSchema_default","userEarnedSchema_default","poolsV3InfoSchema_default","historySchema_default","pricesWithQuoteAssetSchema","makePartial","assetIn","assetOut","walletAddress","fromWidget","referralDataSchema","secretHash","targetNetwork","redeemTxHash","redeemOrder","secret","sourceNetwork","redeemOrder1","secret1","redeemOrder2","secret2","firstSecretHash","secondSecretHash","IDOSchema_default","headers","adminPoolSchema","adminPoolsListSchema_default","data","pairStatusSchema","poolAddress","query","key","value","atomicHistorySchema_default","sourceAtomicHistorySchema","targetAtomicHistorySchema","secretHashes","exchangeContractAddress","PriceFeed_exports","__export","PriceFeed","schemas_exports","ws_exports","import_simple_typed_fetch","schemas_exports","__export","allTickersSchema","candlesSchema_default","statisticsOverviewSchema","topPairsStatisticsSchema","import_zod","candlesSchema","candlesSchema_default","import_zod","statisticsOverview","statisticsOverviewSchema","topPairsStatisticsSchema","import_zod","tickerSchema","allTickersSchema","ws_exports","__export","PriceFeedWS","schemas_exports","import_isomorphic_ws","import_zod","import_uuid","priceFeedSubscriptions","priceFeedSubscriptions_default","schemas_exports","__export","allTickersSchema_default","candleSchema_default","cexPricesSchema_default","priceSchema_default","tickerInfoSchema_default","import_zod","tickerInfoSchema","pairName","lastPrice","openPrice","highPrice","lowPrice","volume24h","tickerInfoSchema_default","import_zod","candleSchema","interval","pair","timeStart","timeEnd","close","open","high","low","volume","candleSchema_default","import_zod","priceSchema","pair","price","priceSchema_default","import_zod","allTickersSchema","tickers","data","tickerInfoSchema_default","prev","pairData","allTickersSchema_default","import_zod","cexPriceTickerInfoSchema","pairName","lastPrice","cexPricesSchema","tickers","data","prev","pairData","cexPricesSchema_default","subscriptions","priceFeedSubscriptions_default","allTickersSchema_default","tickerInfoSchema_default","tickerInfo","priceSchema_default","candleSchema_default","cexPricesSchema_default","PriceFeedSubscription","type","url","params","onOpen","uuidv4","jsonObject","WebSocket","jsonData","payload","e","data","dataString","json","parseResult","errorsMessage","error","PriceFeedWS","url","basicAuth","type","params","onOpen","sub","PriceFeedSubscription","subType","subId","PriceFeed","apiUrl","basicAuth","PriceFeedWS","symbol","timeStart","timeEnd","interval","exchange","url","candlesSchema_default","statisticsOverviewSchema","topPairsStatisticsSchema","allTickersSchema","import_bignumber","import_ethers","import_ethers_v6","import_ethers_v6","import_ethers","addressLikeToString","address","getBalance","aggregator","assetName","assetAddress","walletAddress","exchangeContract","provider","assetIsNativeCryptocurrency","assetWalletBalance","denormalizedAssetInWalletBalance","denormalizeNumber","assetContract","assetDecimals","assetContractBalance","denormalizedAssetInContractBalance","denormalizedAssetLockedBalanceResult","getExchangeBalanceERC20","tokenAddress","exchangeAddress","convertToNativeDecimals","addressLikeToString","exchangeBalance","decimals","getExchangeBalanceNative","getExchangeBalance","getExchangeAllowance","getWalletBalanceERC20","convertToExchangeDecimals","walletBalance","getWalletBalanceNative","nativeBalance","getWalletBalance","getTotalBalance","getBalances_default","balancesRequired","aggregator","walletAddress","exchangeContract","provider","assetName","assetAddress","balance","getBalance","prev","curr","import_bignumber","import_ethers","import_just_clone","import_ethers_v6","arrayEquals","a","b","value","index","arrayEquals_default","BalanceGuard","_BalanceGuard","balances","nativeCryptocurrency","provider","signer","logger","expense","assetName","amount","source","assetBalance","assetAddress","spenderAddress","walletAddress","unsignedTx","resetRequired","requirements","prev","curr","aggregatedBalanceRequirement","item","arrayEquals_default","balanceIssues","fixBalanceIssue","issue","tokenContract","approve","targetAmount","bnTargetAmount","unsignedApproveTx","nonce","gasPrice","maxFeePerGas","network","gasLimit","signedTx","txResponse","promise","autofixableBalanceIssues","balanceIssue","fixAutofixable","requirement","remainingBalances","clone","aggregatedRequirements","requiredApproves","flattedAggregatedRequirements","sources","asset","items","remainingBalance","itemsAmountSum","p","c","lackAmount","exchangeBalance","exchangePlusWalletAggregatedRequirements","denormalizedAllowance","tokenDecimals","tokenAllowance","denormalizeNumber","approvedWalletBalance","approveIsHelpful","targetApprove","available","issueMessage","gasPriceWei","approveTransactionCost","denormalizedApproveTransactionCost","walletTokensAggregatedRequirements","unfixed","i","import_simple_typed_fetch","deposit","asset","amount","signer","unit","amountBN","walletAddress","blockchainService","aggregator","provider","chainId","exchangeContractAddress","assetToAddress","nativeCryptocurrency","getNativeCryptocurrencyName_default","exchangeContract","gasPriceWei","assetAddress","balances","getBalances_default","balanceGuard","BalanceGuard","unsignedTx","normalizeNumber","transactionCost","denormalizedTransactionCost","denormalizeNumber","nonce","signedTx","txResponse","e","import_bignumber","import_ethers","import_simple_typed_fetch","getSwapInfo","assetIn","assetOut","amount","feeAsset","blockchainService","aggregator","options","walletAddress","isTradeBuy","amountBN","assetToAddress","nativeCryptocurrencyName","getNativeCryptocurrencyName_default","feeAssets","allPrices","gasPriceWei","gasPriceGwei","feeAssetAddress","swapInfo","swapExchanges","factories","poolExchangesList","firstSwapExchange","route","poolExchange","transactionCost","denormalizedTransactionCost","denormalizeNumber","baseAssetName","baseAssetAddress","feePercent","serviceFeeInFeeAsset","networkFeeInFeeAsset","calculateFeeInFeeAsset_default","import_ethers","import_lodash","SafeArray","_SafeArray","array","index","value","callbackfn","thisArg","safeGet","obj","key","errorMessage","prefix","must","condition","message","provided","import_simple_typed_fetch","import_ethers_v6","import_ethers","import_ethers_v6","import_ethers","EXECUTOR_SWAP_FUNCTION","pathCallWithBalance","calldata","tokenAddress","patchParams","executorInterface","skipMaskAndOffset","createPatchMask","addCallParams","callParams","firstByte","encodedValue","encodedAddress","encodedGaslimit","encodedFirstByte","mask","generateCalls","calls","exchangeToNativeDecimals","token","amount","provider","toNativeDecimals","decimals","contract","import_bignumber","BILLION","TEN_THOUSANDS","countScaledFee","fee","generateUni2Calls","path","recipient","executorInterface","calls","i","currentSwap","nextSwap","call","generateUni2Call","lastSwap","scaledFee","calldata","addCallParams","pool","assetIn","assetOut","import_ethers_v6","import_ethers","generateUni3Call","swap","amount","recipient","provider","encodedPool","encodePoolV3","calldata","addCallParams","generateOrion3Call","generateUni3Calls","path","encodedPools","generateOrion3Calls","poolAddress","assetInAddress","assetOutAddress","pool","zeroForOne","unwrapWETH","firstByte","encodedFirstByte","import_ethers_v6","generateTransferCall","token","target","amount","callParams","calldata","addCallParams","generateApproveCall","import_ethers_v6","import_ethers","generateCurveStableSwapCall","amount","to","swap","provider","swapExecutorContractAddress","curveRegistry","pathWithBalance","executorInterface","registry","pool","assetIn","assetOut","executorAllowance","calls","approveCall","generateApproveCall","i","j","calldata","addCallParams","pathCallWithBalance","import_ethers_v6","generateWrapAndTransferCall","target","callParams","calldata","addCallParams","generateUnwrapAndTransferCall","amount","import_ethers_v6","generateFeePaymentCall","matcher","token","amount","callParams","calldata","addCallParams","import_ethers_v6","import_ethers","generateAeroCalls","path","amount","recipient","provider","pools","direct","swap","token0","calldata","addCallParams","generateSwapCalldataWithUnit","amount","minReturnAmount","initiatorAddress","receiverAddress","arrayLikePath","matcher","feeToken","fee","unit","wethAddress","safeGet","curveRegistryAddress","swapExecutorContractAddress","exchangeContractAddress","arrayLikePathCopy","cloneDeep","path","SafeArray","swapInfo","generateSwapCalldata","matcherAddressLike","feeTokenAddressLike","wethAddressLike","curveRegistryAddressLike","swapExecutorContractAddressLike","provider","logger","addressLikeToString","srcToken","dstToken","swapDescription","amountNativeDecimals","exchangeToNativeDecimals","feeNativeDecimals","singleSwap","calls","processSwaps","calldata","generateCalls","useExchangeBalance","additionalTransferAmount","shouldUseExchangeBalance","value","firstSwapFactory","isSingleFactorySwap","processSingleFactorySwaps","processMultiFactorySwaps","payFeeToMatcher","wrapOrUnwrapIfNeeded","factory","generateUni2Calls","generateUni3Calls","generateOrion3Calls","generateAeroCalls","generateCurveStableSwapCall","swap","transferCall","generateTransferCall","pathCallWithBalance","uni2Call","generateUni2Call","uni3Call","generateUni3Call","orion3Call","generateOrion3Call","curveCalls","feeAmount","feePaymentCall","generateFeePaymentCall","dstReceiver","srcReceiver","wrapCall","generateWrapAndTransferCall","unwrapCall","generateUnwrapAndTransferCall","walletBalance","exchangeBalance","getTotalBalance","exchangeAllowance","getExchangeAllowance","import_bignumber","import_ethers","import_ethers_v6","import_simple_typed_fetch","withdraw","asset","amount","signer","unit","amountBN","walletAddress","blockchainService","aggregator","provider","chainId","exchangeContractAddress","assetToAddress","nativeCryptocurrency","getNativeCryptocurrencyName_default","exchangeContract","gasPriceWei","assetAddress","balances","getBalances_default","balanceGuard","BalanceGuard","unsignedTx","normalizeNumber","transactionCost","denormalizedTransactionCost","denormalizeNumber","nonce","signedTx","txResponse","e","import_bignumber","import_ethers","import_ethers_v6","import_ethers","getAvailableFundsSources","expenseType","assetAddress","route","crypt_exports","__export","signCancelOrder_default","signOrder_default","import_ethers","eip712DomainData_default","EIP712Domain","eip712DomainSchema_default","eip712DomainData_default","removeUndefined","obj","newObj","key","value","getDomainData","chainId","getDomainData_default","signCancelOrder","senderAddress","id","signer","chainId","cancelOrderRequest","signature","getDomainData_default","cancelOrderTypes_default","fixedSignature","signCancelOrder_default","import_bignumber","import_ethers","import_ethers","ORDER_TYPEHASH","getOrderHash","order","abiCoder","senderAddress","matcherAddress","baseAsset","quoteAsset","matcherFeeAsset","amount","price","matcherFee","nonce","expiration","buySide","orderBytes","DEFAULT_EXPIRATION","signOrder","baseAssetAddr","quoteAssetAddr","side","price","amount","matcherFee","senderAddress","matcherAddress","serviceFeeAssetAddr","signer","chainId","nonce","expiration","order","normalizeNumber","signature","getDomainData_default","orderTypes_default","fixedSignature","getOrderHash","signOrder_default","import_simple_typed_fetch","isValidFactory","factory","factories_default","f","isValidFactory_default","isValidSingleSwap","singleSwap","isValidFactory_default","swapLimit","assetIn","assetOut","price","amount","feeAsset","signer","unit","options","isTradeBuy","amountBN","priceBN","walletAddress","blockchainService","aggregator","provider","chainId","exchangeContractAddress","matcherAddress","assetToAddress","swapExecutorContractAddress","nativeCryptocurrency","getNativeCryptocurrencyName_default","exchangeContract","feeAssets","allPrices","gasPriceWei","factories","WETHAddress","must","poolExchangesList","gasPriceGwei","assetInAddress","feeAssetAddress","balances","getBalances_default","balanceGuard","BalanceGuard","swapInfo","swapExchanges","exchangeContractPath","firstSwapExchange","baseAssetName","quoteAssetName","pairConfig","minQtyBN","qtyPrecisionBN","pricePrecisionBN","minPrice","maxPrice","qtyDecimalPlaces","priceDecimalPlaces","priceIsBTEMP","route","poolExchange","factoryAddress","amountSpend","getAvailableFundsSources","amountReceive","amountSpendBlockchainParam","normalizeNumber","amountReceiveBlockchainParam","calldata","swapDescription","value","generateSwapCalldata","safeGet","unsignedSwapThroughPoolsTx","amountSpendBN","txValue","denormalizedAssetInExchangeBalance","transactionCost","denormalizedTransactionCost","denormalizeNumber","nonce","swapThroughOrionPoolTxResponse","baseAssetAddress","quoteAssetAddress","safePriceWithAppliedPrecision","feePercent","serviceFeeInFeeAsset","networkFeeInFeeAsset","totalFeeInFeeAsset","calculateFeeInFeeAsset_default","signedOrder","signOrder_default","orderId","resolve","reject","timeout","interval","data","e","import_bignumber","import_ethers","import_ethers_v6","import_simple_typed_fetch","isValidSingleSwap","singleSwap","isValidFactory_default","swapMarket","assetIn","assetOut","amount","feeAsset","slippagePercent","signer","unit","options","isTradeBuy","amountBN","slippagePercentBN","walletAddress","blockchainService","aggregator","provider","chainId","exchangeContractAddress","matcherAddress","assetToAddress","swapExecutorContractAddress","nativeCryptocurrency","getNativeCryptocurrencyName_default","exchangeContract","feeAssets","allPrices","gasPriceWei","factories","WETHAddress","must","poolExchangesList","gasPriceGwei","assetInAddress","feeAssetAddress","balances","getBalances_default","balanceGuard","BalanceGuard","swapInfo","swapExchanges","exchangeContractPath","firstSwapExchange","baseAssetName","quoteAssetName","pairConfig","qtyPrecisionBN","qtyDecimalPlaces","route","percent","poolExchange","factoryAddress","amountOutWithSlippage","amountInWithSlippage","amountSpend","getAvailableFundsSources","amountReceive","amountSpendBlockchainParam","normalizeNumber","amountReceiveBlockchainParam","calldata","swapDescription","value","generateSwapCalldata","safeGet","unsignedSwapThroughPoolsTx","amountSpendBN","txValue","denormalizedAssetInExchangeBalance","transactionCost","denormalizedTransactionCost","denormalizeNumber","nonce","swapThroughOrionPoolTxResponse","slippageMultiplier","safePriceWithDeviation","baseAssetAddress","quoteAssetAddress","safePriceWithAppliedPrecision","feePercent","serviceFeeInFeeAsset","networkFeeInFeeAsset","totalFeeInFeeAsset","calculateFeeInFeeAsset_default","signedOrder","signOrder_default","orderId","resolve","reject","timeout","interval","data","e","Exchange","unit","params","getSwapInfo","deposit","withdraw","generateSwapCalldataWithUnit","swapLimit","swapMarket","Indexer_exports","__export","IndexerService","schemas_exports","schemas_exports","__export","pool_v2_info_schema_default","environment_response_schema_default","get_points_at_schema_default","get_pool_response_schema_default","list_amount_schema_default","list_nft_order_response_schema_default","list_pool_schema_default","list_pool_v2_response_schema_default","list_pool_v3_response_schema_default","test_incrementor_schema_default","veORN_info_schema_default","voting_info_schema_default","import_zod","import_ethers","import_zod","evmAddressSchema","v","hexStringSchema","import_zod","import_ethers","infoSchema","v","info_schema_default","environmentResponseSchema","evmAddressSchema","info_schema_default","environment_response_schema_default","import_zod","import_zod","poolSchema","evmAddressSchema","pool_schema_default","listNFTOrderResponseSchema","pool_schema_default","info_schema_default","list_nft_order_response_schema_default","import_zod","import_zod","basicPoolInfo","evmAddressSchema","basic_pool_info_schema_default","getPoolResponseSchema","evmAddressSchema","basic_pool_info_schema_default","info_schema_default","get_pool_response_schema_default","import_zod","import_zod","listPoolV2Schema","evmAddressSchema","basic_pool_info_schema_default","listPoolV2ResponseSchema","info_schema_default","list_pool_v2_response_schema_default","import_zod","listPoolV3Schema","evmAddressSchema","basic_pool_info_schema_default","listPoolV3ResponseSchema","info_schema_default","list_pool_v3_response_schema_default","listPoolResponseSchema","listPoolV2Schema","listPoolV3Schema","info_schema_default","list_pool_schema_default","import_zod","poolInfoSchema","evmAddressSchema","basic_pool_info_schema_default","PoolV2InfoResponseSchema","info_schema_default","pool_v2_info_schema_default","import_zod","veORNResultSchema","evmAddressSchema","veORNInfoSchema","info_schema_default","veORN_info_schema_default","import_zod","listAmountSchema","info_schema_default","list_amount_schema_default","import_zod","poolSchema","votingResultSchema","votingInfoSchema","info_schema_default","voting_info_schema_default","import_zod","testIncrementorSchema","info_schema_default","test_incrementor_schema_default","import_zod","getPointsAtResultSchema","getPointsAtSchema","info_schema_default","get_points_at_schema_default","import_simple_typed_fetch","import_bignumber","IndexerService","apiUrl","chainId","payload","address","veORN_info_schema_default","page","pageSize","get_points_at_schema_default","amount","timestamp","finalTimestamp","amountToken","lockingDays","alpha","deltaDaysBN","multSQRT","multCUBE","userAddress","voting_info_schema_default","environment_response_schema_default","list_nft_order_response_schema_default","list_pool_schema_default","token0","token1","poolAddress","get_pool_response_schema_default","list_pool_v2_response_schema_default","pool_v2_info_schema_default","list_pool_v3_response_schema_default","poolKey","list_amount_schema_default","test_incrementor_schema_default","time","currentTime","deltaYears","import_zod","import_simple_typed_fetch","import_ethers","import_bignumber","import_ethers_v6","orionRFQContractABI","Pmm","unit","orionPMMRouterContractAddress","token","amount","signer","bnTargetAmount","walletAddress","unsignedApproveTx","nonce","gasPrice","maxFeePerGas","network","gasLimit","signedTx","order","orionRFQContractABI","Unit","config","logger","staticConfig","envs","chainConfig","chains","networkConfig","chainInfo","intNetwork","BlockchainService","IndexerService","Aggregator","PriceFeed","Exchange","Pmm","import_merge_anything","ReferralSystem_exports","__export","ReferralSystem","schemas_exports","import_zod","import_simple_typed_fetch","schemas_exports","__export","aggregatedHistorySchema_default","allTimeLeadersSchema_default","claimInfoSchema_default","contractsAddressesSchema_default","distinctAnalyticsSchema_default","errorSchema_default","globalAnalyticsSchema_default","inviteCodeLinkSchema_default","linkSchema_default","miniStatsSchema_default","ratingSchema_default","rewardsClaimedSchema_default","rewardsMappingSchema_default","import_zod","linkSchema","linkSchema_default","import_zod","distinctAnalyticsSchema","distinctAnalyticsSchema_default","import_zod","errorSchema","errorSchema_default","import_zod","miniStatsSchema","miniStatsSchema_default","import_zod","rewardsMappingSchema","rewardsMappingSchema_default","import_zod","rewardsClaimedSchema","rewardsClaimedSchema_default","import_zod","globalAnalyticsSchema","globalAnalyticsSchema_default","import_zod","ratingSchema","ratingSchema_default","import_zod","claimInfoSchema","claimInfoSchema_default","import_zod","aggregatedHistorySchema","aggregatedHistorySchema_default","import_zod","import_ethers","contractsAddressesSchema","SupportedChainId","contractsAddressesSchema_default","import_zod","inviteCodeLinkSchema","inviteCodeLinkSchema_default","import_zod","allTimeLeadersSchema","allTimeLeadersSchema_default","ReferralSystem","apiUrl","refererAddress","linkSchema_default","myWalletAddress","suppressError","inviteCodeLinkSchema_default","inviteCode","referer","distinctAnalyticsSchema_default","errorSchema_default","globalAnalyticsSchema_default","miniStatsSchema_default","referralAddress","page","positionsPerPage","rewardsMappingSchema_default","payload","signature","rewardsClaimedSchema_default","ratingSchema_default","chainId","allTimeLeadersSchema_default","contractsAddressesSchema_default","claimInfoSchema_default","types","itemPerPage","queryParams","queryString","k","v","aggregatedHistorySchema_default","import_simple_typed_fetch","import_ethers","import_ethers","import_simple_typed_fetch","import_bson_objectid","ObjectID","bsonObjectId","getHistory","units","address","limit","data","blockchainService","aggregator","chainId","sourceNetworkHistory","targetNetworkHistory","aggregatorHistoryAtomicSwaps","sourceNetworkHistoryObj","acc","cur","secretHash","lowercaseSecretHash","targetNetworkHistoryObj","aggregatorHistoryAtomicSwapsObj","unitedSourceItems","unitedTargetItems","unitedAggregatorHistory","item","targetItem","aggItem","targetChainIdFromSource","isValidChainId_default","dataItem","getHistory_default","import_bignumber","import_ethers","import_ethers_v6","import_simple_typed_fetch","swap","amount","assetName","sourceChain","targetChain","signer","options","unitsArray","startProcessingTime","amountBN","sourceChainUnit","chainId","targetChainUnit","sourceBlockchainService","sourceAggregator","sourceProvider","targetAggregator","targetBlockchainService","targetProvider","sourceSupportedBridgeAssets","targetSupportedBridgeAssets","commonSupportedBridgeAssets","asset","brokersBalances","resolve","reject","timeout","id","data","walletAddress","assetBrokersBalance","sourceExchangeContractAddress","sourceAssetToAddress","sourceChainNativeCryptocurrency","getNativeCryptocurrencyName_default","sourceExchangeContract","sourceChainAssetAddress","targetExchangeContractAddress","targetAssetToAddress","targetChainAssetAddress","targetChainNativeCryptocurrency","targetExchangeContract","sourceChainBalances","getBalances_default","targetChainBalances","sourceChainBalanceGuard","BalanceGuard","targetChainBalanceGuard","getAvailableFundsSources","amountBlockchainParam","normalizeNumber","secret","generateSecret_default","secretHash","secondsInDay","expirationDays","expirationEtherBN","unsignedLockAtomicTx","sourceChainGasPrice","sourceChainFeeData","value","denormalizedAssetInExchangeBalance","transactionCost","denormalizedTransactionCost","denormalizeNumber","nonce","signedTransaction","lockAtomicTxResponse","atomicSwap","placeAtomicSwap","toUpperCase","interval","unsignedRedeemAtomicTx","targetChainGasPrice","targetChainFeeData","redeemAtomicTransactionCost","targetDenormalizedTransactionCost","targetSignedTransaction","targetLockAtomicTxResponse","unsignedWithdrawTx","signedTx","withdrawTx","import_bignumber","import_ts_is_present","invariant","condition","errorMessage","import_simple_typed_fetch","SECONDS_IN_DAY","EXPIRATION_DAYS","Bridge","unitsArray","secretHash","redeemOrder","senderCached","receiverCached","atomic","lastUpdate","data","addressToAssetData","unit","blockchainService","chainId","assetToAddress","asset","address","assetRecord","walletAddress","localAtomicSwaps","transactions","byTxHashMap","bySecretHashMap","tx","type","item","bridgeHistory","combinedAddressToAsset","atomicSwapsMap","atomicHistoryItem","lock","redeem","refund","lockTx","redeemTx","refundTx","redeemExpired","assetName","amount","invariant","atomicInMap","liquidityMigrationTxHash","redeemSettlement","secretHashTxs","liquidityMigrationTx","networkFrom","networkTo","env","secret","generateSecret_default","lockExpiration","limit","cachedData","getHistory_default","sourceChain","targetChain","signer","options","swap","Frontage_exports","__export","Frontage","schemas_exports","import_simple_typed_fetch","schemas_exports","__export","tickerSchema","tickersSchema","import_zod","tickerSchema","SupportedChainId","tickersSchema","Frontage","apiUrl","searchValue","currentNetwork","targetNetwork","sortBy","sortType","offset","limit","url","params","tickersSchema","category","tickers","Orion","envOrConfig","overrides","logger","config","envConfig","envs","chainId","networkConfig","isValidChainId_default","chainConfig","chains","acc","cur","ReferralSystem","unit","Unit","Bridge","Frontage","networkCodeOrChainId","u","tradableOnly","aggregatedAssets","assetToAddress","asset","address","tradableAggregatedAssets","aggregatedPairs","pair","chainIds","baseAsset","quoteAsset","aggregatedBaseAsset","networks","aggregatedQuoteAsset","params","result","services_exports","__export","Aggregator_exports","BlockchainService_exports","Frontage_exports","Indexer_exports","PriceFeed_exports","ReferralSystem_exports"]}