@merkl/api 0.10.129 → 0.10.131
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/database/api/.generated/default.js +1 -0
- package/dist/database/api/.generated/edge.js +609 -0
- package/dist/database/api/.generated/index-browser.js +586 -0
- package/dist/database/api/.generated/index.js +638 -0
- package/dist/database/api/.generated/runtime/edge-esm.js +31 -0
- package/dist/database/api/.generated/runtime/edge.js +31 -0
- package/dist/database/api/.generated/runtime/index-browser.js +13 -0
- package/dist/database/api/.generated/runtime/library.js +143 -0
- package/dist/database/api/.generated/runtime/react-native.js +80 -0
- package/dist/database/api/.generated/runtime/wasm.js +32 -0
- package/dist/database/api/.generated/wasm.js +586 -0
- package/dist/database/api/seeder/resources/protocol.js +341 -0
- package/dist/database/engine/.generated/default.js +1 -0
- package/dist/database/engine/.generated/edge.js +438 -0
- package/dist/database/engine/.generated/index-browser.js +415 -0
- package/dist/database/engine/.generated/index.js +467 -0
- package/dist/database/engine/.generated/runtime/edge-esm.js +31 -0
- package/dist/database/engine/.generated/runtime/edge.js +31 -0
- package/dist/database/engine/.generated/runtime/index-browser.js +13 -0
- package/dist/database/engine/.generated/runtime/library.js +143 -0
- package/dist/database/engine/.generated/runtime/react-native.js +80 -0
- package/dist/database/engine/.generated/runtime/wasm.js +32 -0
- package/dist/database/engine/.generated/wasm.js +415 -0
- package/dist/src/backgroundJobs/index.js +44 -0
- package/dist/src/backgroundJobs/jobs/campaignsCacheUpdater.js +160 -0
- package/dist/src/backgroundJobs/jobs/health.js +15 -0
- package/dist/src/backgroundJobs/jobs/opportunityUpdater.js +63 -0
- package/dist/src/backgroundJobs/jobs/priceUpdater.js +16 -0
- package/dist/src/backgroundJobs/jobs/sync.js +33 -0
- package/dist/src/cache/declaration.js +146 -0
- package/dist/src/cache/index.js +152 -0
- package/dist/src/cache/redis.js +49 -0
- package/dist/src/constants.js +119 -0
- package/dist/src/entities/campaign.js +134 -0
- package/dist/src/entities/opportunity.js +549 -0
- package/dist/src/errors/BadRequest.error.js +7 -0
- package/dist/src/errors/Conflict.error.js +7 -0
- package/dist/src/errors/HttpError.js +11 -0
- package/dist/src/errors/NotFound.error.js +7 -0
- package/dist/src/errors/Opportunity.error.js +11 -0
- package/dist/src/errors/Unauthorized.error.js +7 -0
- package/dist/src/errors/index.js +5 -0
- package/dist/src/guards/BackOffice.guard.js +10 -0
- package/dist/src/guards/Engine.guard.js +10 -0
- package/dist/src/guards/TokenAuth.guard.js +10 -0
- package/dist/src/hooks/checkQueryAddressValidity.js +7 -0
- package/dist/src/hooks/checkQueryChainIdValidity.js +7 -0
- package/dist/src/index.js +79 -0
- package/dist/src/internal/controllers/endingCampaigns.js +41 -0
- package/dist/src/internal/controllers/unclaimed.js +36 -0
- package/dist/src/internal/index.js +30 -0
- package/dist/src/libs/campaigns/campaignTypes/AjnaDynamicData.js +111 -0
- package/dist/src/libs/campaigns/campaignTypes/BadgerDynamicData.js +93 -0
- package/dist/src/libs/campaigns/campaignTypes/CLAMMDynamicData.js +942 -0
- package/dist/src/libs/campaigns/campaignTypes/CompoundDynamicData.js +90 -0
- package/dist/src/libs/campaigns/campaignTypes/DolomiteDynamicData.js +60 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20DynamicData.js +162 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20DynamicDataRefacto.js +159 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/helpers/eulerVaultNames.js +13 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/helpers/factoryFinder.js +29 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/helpers/getBlacklistedSupply.js +22 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/helpers/metamorphoTvl.js +35 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/helpers/spliceTVL.js +21 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/helpers/tokenType.js +106 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/AaveProcessor.js +26 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/AssetProcessor.js +47 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/AuraProcessor.js +103 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/BalancerGaugeProcessor.js +83 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/BalancerPoolProcessor.js +99 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/BeefyProcessor.js +51 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/CompoundProcessor.js +36 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/EnzymeProcessor.js +51 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/EulerBorrowProcessor.js +46 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/EulerLendProcessor.js +47 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/FluidProcessor.js +36 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/FraxProcessor.js +41 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/GearboxProcessor.js +44 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/GenericProcessor.js +239 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/MetamorphoProcessor.js +43 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/PendleProcessor.js +31 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/RadiantProcessor.js +58 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/RfxProcessor.js +64 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/SpliceProcessor.js +35 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/SturdySiloProcessor.js +37 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/TemplateProcessor.js +40 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/TorosProcessor.js +33 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/UniswapProcessor.js +48 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/WoofiProcessor.js +40 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/curveProcessor.js +68 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/processorMapping.js +77 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/subtypesPrices.js +583 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/subtypesPricesRefactoFinal.js +24 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/subtypesRound1.js +1209 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/subtypesRound1RefactoFinal.js +194 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/subtypesRound2.js +645 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/subtypesRound2RefactoFinal.js +22 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/subtypesRound3.js +392 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/subtypesRound3RefactoFinal.js +22 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/subtypesRound4.js +323 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/subtypesRound4RefactoFinal.js +22 -0
- package/dist/src/libs/campaigns/campaignTypes/ERC20_SNAPSHOTDynamicData.js +38 -0
- package/dist/src/libs/campaigns/campaignTypes/EulerDynamicData.js +165 -0
- package/dist/src/libs/campaigns/campaignTypes/JSON_AIRDROPDynamicData.js +19 -0
- package/dist/src/libs/campaigns/campaignTypes/MORPHODynamicData.js +120 -0
- package/dist/src/libs/campaigns/campaignTypes/RadiantDynamicData.js +112 -0
- package/dist/src/libs/campaigns/campaignTypes/SILODynamicData.js +113 -0
- package/dist/src/libs/campaigns/campaignsDynamicData.js +83 -0
- package/dist/src/libs/campaigns/campaignsDynamicDataRefacto.js +78 -0
- package/dist/src/libs/campaigns/getCampaigns.js +18 -0
- package/dist/src/libs/campaigns/utils/fetchA51Strategies.js +44 -0
- package/dist/src/libs/campaigns/utils/fetchClamInfo.js +27 -0
- package/dist/src/libs/campaigns/utils/fetchLogs.js +91 -0
- package/dist/src/libs/campaigns/utils/getCompV2ForksVaults.js +122 -0
- package/dist/src/libs/campaigns/utils/getContractCreationBlock.js +44 -0
- package/dist/src/libs/campaigns/utils/getDolomiteMarkets.js +50 -0
- package/dist/src/libs/campaigns/utils/getEulerV2Vaults.js +87 -0
- package/dist/src/libs/campaigns/utils/getLastEligibilityRatio.js +56 -0
- package/dist/src/libs/computeFee.js +34 -0
- package/dist/src/libs/custom/twtParticipants.js +54 -0
- package/dist/src/libs/deprecated-merklv3/index.js +184 -0
- package/dist/src/libs/getTokensList.js +37 -0
- package/dist/src/libs/merklChainData.js +129 -0
- package/dist/src/libs/parse/marketsWithCache.js +8 -0
- package/dist/src/libs/positions/ajna/index.js +107 -0
- package/dist/src/libs/positions/badger/index.js +79 -0
- package/dist/src/libs/positions/clamm/index.js +419 -0
- package/dist/src/libs/positions/clamm/thegraph/fetchAlmPositions.js +35 -0
- package/dist/src/libs/positions/clamm/thegraph/fetchAmmPositions.js +35 -0
- package/dist/src/libs/positions/clamm/thegraph/fetchFarmedPositions.js +44 -0
- package/dist/src/libs/positions/clamm/thegraph/index.js +162 -0
- package/dist/src/libs/positions/compound/index.js +93 -0
- package/dist/src/libs/positions/dolomite/index.js +49 -0
- package/dist/src/libs/positions/erc20/index.js +55 -0
- package/dist/src/libs/positions/euler/index.js +57 -0
- package/dist/src/libs/positions/index.js +48 -0
- package/dist/src/libs/positions/morpho/index.js +177 -0
- package/dist/src/libs/positions/prepareFetch.js +339 -0
- package/dist/src/libs/positions/silo/index.js +67 -0
- package/dist/src/libs/positions/types.js +1 -0
- package/dist/src/libs/reports/campaignReport.js +37 -0
- package/dist/src/libs/reports/mainParameterRewards.js +48 -0
- package/dist/src/libs/rewards/userRewards.js +154 -0
- package/dist/src/libs/staticCampaigns.js +10 -0
- package/dist/src/libs/tokens/balances.js +126 -0
- package/dist/src/libs/tokens/tokenInfo.js +22 -0
- package/dist/src/modules/v4/accounting/accounting.controller.js +66 -0
- package/dist/src/modules/v4/accounting/accounting.model.js +32 -0
- package/dist/src/modules/v4/accounting/accounting.repository.js +100 -0
- package/dist/src/modules/v4/accounting/accounting.service.js +78 -0
- package/dist/src/modules/v4/accounting/index.js +3 -0
- package/dist/src/modules/v4/apr/apr.controller.js +1 -0
- package/dist/src/modules/v4/apr/apr.model.js +1 -0
- package/dist/src/modules/v4/apr/apr.repository.js +1 -0
- package/dist/src/modules/v4/apr/apr.service.js +40 -0
- package/dist/src/modules/v4/apr/index.js +2 -0
- package/dist/src/modules/v4/blacklist/blacklist.controller.js +45 -0
- package/dist/src/modules/v4/blacklist/blacklist.model.js +13 -0
- package/dist/src/modules/v4/blacklist/blacklist.repository.js +56 -0
- package/dist/src/modules/v4/blacklist/blacklist.service.js +24 -0
- package/dist/src/modules/v4/blacklist/index.js +3 -0
- package/dist/src/modules/v4/cache/cache.model.js +14 -0
- package/dist/src/modules/v4/cache/cache.repository.js +10 -0
- package/dist/src/modules/v4/cache/cache.service.js +44 -0
- package/dist/src/modules/v4/cache/index.js +1 -0
- package/dist/src/modules/v4/campaign/campaign.controller.js +56 -0
- package/dist/src/modules/v4/campaign/campaign.model.js +54 -0
- package/dist/src/modules/v4/campaign/campaign.repository.js +346 -0
- package/dist/src/modules/v4/campaign/campaign.service.js +203 -0
- package/dist/src/modules/v4/campaign/index.js +3 -0
- package/dist/src/modules/v4/chain/chain.controller.js +40 -0
- package/dist/src/modules/v4/chain/chain.model.js +17 -0
- package/dist/src/modules/v4/chain/chain.repository.js +64 -0
- package/dist/src/modules/v4/chain/chain.service.js +42 -0
- package/dist/src/modules/v4/chain/index.js +3 -0
- package/dist/src/modules/v4/dynamicData/dynamicData.controller.js +19 -0
- package/dist/src/modules/v4/dynamicData/dynamicData.model.js +6 -0
- package/dist/src/modules/v4/dynamicData/dynamicData.repository.js +1 -0
- package/dist/src/modules/v4/dynamicData/dynamicData.service.js +49 -0
- package/dist/src/modules/v4/dynamicData/index.js +3 -0
- package/dist/src/modules/v4/enso/enso.model.js +108 -0
- package/dist/src/modules/v4/enso/enso.service.js +46 -0
- package/dist/src/modules/v4/explorer/explorer.model.js +2 -0
- package/dist/src/modules/v4/explorer/explorer.repository.js +23 -0
- package/dist/src/modules/v4/explorer/explorer.service.js +24 -0
- package/dist/src/modules/v4/explorer/index.js +1 -0
- package/dist/src/modules/v4/index.js +4 -0
- package/dist/src/modules/v4/merklRoot/index.js +3 -0
- package/dist/src/modules/v4/merklRoot/merklRoot.controller.js +19 -0
- package/dist/src/modules/v4/merklRoot/merklRoot.model.js +6 -0
- package/dist/src/modules/v4/merklRoot/merklRoot.repository.js +31 -0
- package/dist/src/modules/v4/merklRoot/merklRoot.service.js +38 -0
- package/dist/src/modules/v4/opportunity/index.js +3 -0
- package/dist/src/modules/v4/opportunity/opportunity.controller.js +69 -0
- package/dist/src/modules/v4/opportunity/opportunity.model.js +36 -0
- package/dist/src/modules/v4/opportunity/opportunity.repository.d.ts +14 -0
- package/dist/src/modules/v4/opportunity/opportunity.repository.js +217 -0
- package/dist/src/modules/v4/opportunity/opportunity.service.d.ts +0 -15
- package/dist/src/modules/v4/opportunity/opportunity.service.js +180 -0
- package/dist/src/modules/v4/opportunity/subservices/getAjnaMetadata.service.js +50 -0
- package/dist/src/modules/v4/opportunity/subservices/getBadgerMetadata.service.js +23 -0
- package/dist/src/modules/v4/opportunity/subservices/getClammMetadata.service.js +33 -0
- package/dist/src/modules/v4/opportunity/subservices/getCompoundMetadata.service.js +18 -0
- package/dist/src/modules/v4/opportunity/subservices/getDolomiteMetadata.service.js +15 -0
- package/dist/src/modules/v4/opportunity/subservices/getErc20Metadata.service.js +63 -0
- package/dist/src/modules/v4/opportunity/subservices/getErc20SnapshotMetadata.service.js +8 -0
- package/dist/src/modules/v4/opportunity/subservices/getEulerMetadata.service.js +30 -0
- package/dist/src/modules/v4/opportunity/subservices/getJsonAirDropMetadata.service.js +36 -0
- package/dist/src/modules/v4/opportunity/subservices/getMorphoMetadata.service.js +19 -0
- package/dist/src/modules/v4/opportunity/subservices/getRadiantMetadata.service.js +9 -0
- package/dist/src/modules/v4/opportunity/subservices/getSiloMetadata.service.js +13 -0
- package/dist/src/modules/v4/opportunity/transform-id.pipe.js +6 -0
- package/dist/src/modules/v4/opportunity/validate-id.pipe.js +12 -0
- package/dist/src/modules/v4/participate/participate.controller.js +66 -0
- package/dist/src/modules/v4/participate/participate.model.js +24 -0
- package/dist/src/modules/v4/participate/participate.service.js +33 -0
- package/dist/src/modules/v4/price/index.js +3 -0
- package/dist/src/modules/v4/price/price.controller.js +62 -0
- package/dist/src/modules/v4/price/price.model.js +12 -0
- package/dist/src/modules/v4/price/price.repository.js +18 -0
- package/dist/src/modules/v4/price/price.service.js +44 -0
- package/dist/src/modules/v4/prisma/index.js +1 -0
- package/dist/src/modules/v4/protocol/index.js +3 -0
- package/dist/src/modules/v4/protocol/protocol.controller.js +23 -0
- package/dist/src/modules/v4/protocol/protocol.model.js +68 -0
- package/dist/src/modules/v4/protocol/protocol.repository.js +37 -0
- package/dist/src/modules/v4/protocol/protocol.service.js +77 -0
- package/dist/src/modules/v4/reward/index.js +3 -0
- package/dist/src/modules/v4/reward/reward.controller.js +52 -0
- package/dist/src/modules/v4/reward/reward.model.js +104 -0
- package/dist/src/modules/v4/reward/reward.repository.js +237 -0
- package/dist/src/modules/v4/reward/reward.service.js +283 -0
- package/dist/src/modules/v4/reward/rewardConvertor.service.js +136 -0
- package/dist/src/modules/v4/router.js +57 -0
- package/dist/src/modules/v4/status/index.js +3 -0
- package/dist/src/modules/v4/status/status.controller.js +48 -0
- package/dist/src/modules/v4/status/status.model.js +24 -0
- package/dist/src/modules/v4/status/status.repository.js +88 -0
- package/dist/src/modules/v4/status/status.service.js +60 -0
- package/dist/src/modules/v4/token/index.js +3 -0
- package/dist/src/modules/v4/token/token.controller.js +32 -0
- package/dist/src/modules/v4/token/token.model.js +23 -0
- package/dist/src/modules/v4/token/token.repository.js +128 -0
- package/dist/src/modules/v4/token/token.service.js +268 -0
- package/dist/src/modules/v4/tvl/index.js +2 -0
- package/dist/src/modules/v4/tvl/tvl.controller.js +1 -0
- package/dist/src/modules/v4/tvl/tvl.model.js +1 -0
- package/dist/src/modules/v4/tvl/tvl.repository.js +1 -0
- package/dist/src/modules/v4/tvl/tvl.service.js +49 -0
- package/dist/src/modules/v4/uniswapV4/index.js +4 -0
- package/dist/src/modules/v4/uniswapV4/uniswapV4.controller.js +11 -0
- package/dist/src/modules/v4/uniswapV4/uniswapV4.model.js +17 -0
- package/dist/src/modules/v4/uniswapV4/uniswapV4.repository.js +2 -0
- package/dist/src/modules/v4/uniswapV4/uniswapV4.service.js +73 -0
- package/dist/src/modules/v4/user/index.js +3 -0
- package/dist/src/modules/v4/user/user.controller.js +69 -0
- package/dist/src/modules/v4/user/user.model.js +18 -0
- package/dist/src/modules/v4/user/user.repository.js +38 -0
- package/dist/src/modules/v4/user/user.service.js +50 -0
- package/dist/src/plugins/error-handling.plugin.js +28 -0
- package/dist/src/plugins/logger.plugin.js +22 -0
- package/dist/src/routes/v1/allowances.js +115 -0
- package/dist/src/routes/v1/balances.js +25 -0
- package/dist/src/routes/v1/prices.js +11 -0
- package/dist/src/routes/v1/tokens.js +17 -0
- package/dist/src/routes/v2/merkl.js +13 -0
- package/dist/src/routes/v3/ERC20Campaigns.js +63 -0
- package/dist/src/routes/v3/app.js +18 -0
- package/dist/src/routes/v3/blacklist.js +18 -0
- package/dist/src/routes/v3/campaign/delay.js +78 -0
- package/dist/src/routes/v3/campaignClaims.js +24 -0
- package/dist/src/routes/v3/campaignReport.js +22 -0
- package/dist/src/routes/v3/campaignUnclaimed.js +28 -0
- package/dist/src/routes/v3/campaigns.js +101 -0
- package/dist/src/routes/v3/campaignsForMainParameter.js +19 -0
- package/dist/src/routes/v3/campaignsInfo.js +54 -0
- package/dist/src/routes/v3/campaignsRewardsReport.js +47 -0
- package/dist/src/routes/v3/claims.js +45 -0
- package/dist/src/routes/v3/compoundV2.js +9 -0
- package/dist/src/routes/v3/createCampaign.js +66 -0
- package/dist/src/routes/v3/dolomite.js +9 -0
- package/dist/src/routes/v3/euler.js +9 -0
- package/dist/src/routes/v3/exports/campaigns.js +28 -0
- package/dist/src/routes/v3/fetch.js +27 -0
- package/dist/src/routes/v3/health.js +13 -0
- package/dist/src/routes/v3/lostyield.js +98 -0
- package/dist/src/routes/v3/merkl.js +119 -0
- package/dist/src/routes/v3/morphoMarkets.js +27 -0
- package/dist/src/routes/v3/morphoVaults.js +22 -0
- package/dist/src/routes/v3/multiChainPositions.js +69 -0
- package/dist/src/routes/v3/opportunity.js +63 -0
- package/dist/src/routes/v3/overview.js +73 -0
- package/dist/src/routes/v3/parse.js +23 -0
- package/dist/src/routes/v3/payload.js +40 -0
- package/dist/src/routes/v3/poolInfo.js +88 -0
- package/dist/src/routes/v3/positions.js +62 -0
- package/dist/src/routes/v3/radiant.js +26 -0
- package/dist/src/routes/v3/recipients.js +20 -0
- package/dist/src/routes/v3/rewards.js +33 -0
- package/dist/src/routes/v3/rewardsReport.js +51 -0
- package/dist/src/routes/v3/rootForTimestamp.js +47 -0
- package/dist/src/routes/v3/silo.js +20 -0
- package/dist/src/routes/v3/token.js +24 -0
- package/dist/src/routes/v3/tokenUnclaimed.js +24 -0
- package/dist/src/routes/v3/twt/participants.js +11 -0
- package/dist/src/routes/v3/updates.js +47 -0
- package/dist/src/routes/v3/userRewards.js +59 -0
- package/dist/src/types/index.js +6 -0
- package/dist/src/types/parameters/Action.js +11 -0
- package/dist/src/types/parameters/Chain.js +13 -0
- package/dist/src/types/parameters/ChainCampaignId.js +13 -0
- package/dist/src/types/parameters/MainParameter.js +19 -0
- package/dist/src/types/parameters/OpportunityId.js +14 -0
- package/dist/src/types/parameters/Timestamp.js +16 -0
- package/dist/src/types/parameters/Type.js +15 -0
- package/dist/src/types/parameters/index.js +17 -0
- package/dist/src/types/returnTypes.js +1 -0
- package/dist/src/types/utils.js +1 -0
- package/dist/src/utils/addString.js +6 -0
- package/dist/src/utils/bigintToString.js +20 -0
- package/dist/src/utils/crypto.js +4 -0
- package/dist/src/utils/decodeCalls.js +170 -0
- package/dist/src/utils/encodeCalls.js +240 -0
- package/dist/src/utils/error.js +90 -0
- package/dist/src/utils/execute.js +41 -0
- package/dist/src/utils/generateCardName.js +89 -0
- package/dist/src/utils/generic.js +117 -0
- package/dist/src/utils/hashArray.js +4 -0
- package/dist/src/utils/lastBlockBefore.js +78 -0
- package/dist/src/utils/logger.js +52 -0
- package/dist/src/utils/pricer.js +180 -0
- package/dist/src/utils/prices/chainlinkRead.js +8 -0
- package/dist/src/utils/prices/curveVirtualPrice.js +7 -0
- package/dist/src/utils/prices/getDQUICK.js +8 -0
- package/dist/src/utils/prices/priceFetcherFactory.js +29 -0
- package/dist/src/utils/prices/priceService.js +328 -0
- package/dist/src/utils/prices/services/coinGeckoService.js +53 -0
- package/dist/src/utils/prices/services/defillamaService.js +53 -0
- package/dist/src/utils/prices/services/dexScreenerService.js +62 -0
- package/dist/src/utils/prices/services/erc4626Service.js +30 -0
- package/dist/src/utils/prices/services/getERC4626.js +11 -0
- package/dist/src/utils/prices/services/indexCoopService.js +55 -0
- package/dist/src/utils/prices/services/priceFetcher.js +1 -0
- package/dist/src/utils/prices/uniV2Price.js +40 -0
- package/dist/src/utils/prisma.js +12 -0
- package/dist/src/utils/providers.js +30 -0
- package/dist/src/utils/queries/activeCampaigns.js +22 -0
- package/dist/src/utils/queries/allCampaigns.js +51 -0
- package/dist/src/utils/queries/campaignsForMainParameter.js +23 -0
- package/dist/src/utils/queries/claimsOverTime.js +111 -0
- package/dist/src/utils/queries/endingCampaigns.js +21 -0
- package/dist/src/utils/queries/futureCampaigns.js +19 -0
- package/dist/src/utils/queries/mainParameterCampaigns.js +11 -0
- package/dist/src/utils/queries/rewardsAmount.js +106 -0
- package/dist/src/utils/queries/unclaimed.js +81 -0
- package/dist/src/utils/rateLimit.js +13 -0
- package/dist/src/utils/stryke.js +4 -0
- package/dist/src/utils/throw.js +27 -0
- package/dist/src/utils/validation.js +20 -0
- package/dist/tsconfig.package.tsbuildinfo +1 -1
- package/package.json +2 -2
- package/dist/package.json +0 -91
@@ -0,0 +1,415 @@
|
|
1
|
+
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
|
4
|
+
const {
|
5
|
+
Decimal,
|
6
|
+
objectEnumValues,
|
7
|
+
makeStrictEnum,
|
8
|
+
Public,
|
9
|
+
getRuntime,
|
10
|
+
skip
|
11
|
+
} = require('./runtime/index-browser.js')
|
12
|
+
|
13
|
+
|
14
|
+
const Prisma = {}
|
15
|
+
|
16
|
+
exports.Prisma = Prisma
|
17
|
+
exports.$Enums = {}
|
18
|
+
|
19
|
+
/**
|
20
|
+
* Prisma Client JS version: 6.0.1
|
21
|
+
* Query Engine version: 5dbef10bdbfb579e07d35cc85fb1518d357cb99e
|
22
|
+
*/
|
23
|
+
Prisma.prismaVersion = {
|
24
|
+
client: "6.0.1",
|
25
|
+
engine: "5dbef10bdbfb579e07d35cc85fb1518d357cb99e"
|
26
|
+
}
|
27
|
+
|
28
|
+
Prisma.PrismaClientKnownRequestError = () => {
|
29
|
+
const runtimeName = getRuntime().prettyName;
|
30
|
+
throw new Error(`PrismaClientKnownRequestError is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
|
31
|
+
In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
|
32
|
+
)};
|
33
|
+
Prisma.PrismaClientUnknownRequestError = () => {
|
34
|
+
const runtimeName = getRuntime().prettyName;
|
35
|
+
throw new Error(`PrismaClientUnknownRequestError is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
|
36
|
+
In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
|
37
|
+
)}
|
38
|
+
Prisma.PrismaClientRustPanicError = () => {
|
39
|
+
const runtimeName = getRuntime().prettyName;
|
40
|
+
throw new Error(`PrismaClientRustPanicError is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
|
41
|
+
In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
|
42
|
+
)}
|
43
|
+
Prisma.PrismaClientInitializationError = () => {
|
44
|
+
const runtimeName = getRuntime().prettyName;
|
45
|
+
throw new Error(`PrismaClientInitializationError is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
|
46
|
+
In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
|
47
|
+
)}
|
48
|
+
Prisma.PrismaClientValidationError = () => {
|
49
|
+
const runtimeName = getRuntime().prettyName;
|
50
|
+
throw new Error(`PrismaClientValidationError is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
|
51
|
+
In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
|
52
|
+
)}
|
53
|
+
Prisma.Decimal = Decimal
|
54
|
+
|
55
|
+
/**
|
56
|
+
* Re-export of sql-template-tag
|
57
|
+
*/
|
58
|
+
Prisma.sql = () => {
|
59
|
+
const runtimeName = getRuntime().prettyName;
|
60
|
+
throw new Error(`sqltag is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
|
61
|
+
In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
|
62
|
+
)}
|
63
|
+
Prisma.empty = () => {
|
64
|
+
const runtimeName = getRuntime().prettyName;
|
65
|
+
throw new Error(`empty is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
|
66
|
+
In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
|
67
|
+
)}
|
68
|
+
Prisma.join = () => {
|
69
|
+
const runtimeName = getRuntime().prettyName;
|
70
|
+
throw new Error(`join is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
|
71
|
+
In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
|
72
|
+
)}
|
73
|
+
Prisma.raw = () => {
|
74
|
+
const runtimeName = getRuntime().prettyName;
|
75
|
+
throw new Error(`raw is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
|
76
|
+
In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
|
77
|
+
)}
|
78
|
+
Prisma.validator = Public.validator
|
79
|
+
|
80
|
+
/**
|
81
|
+
* Extensions
|
82
|
+
*/
|
83
|
+
Prisma.getExtensionContext = () => {
|
84
|
+
const runtimeName = getRuntime().prettyName;
|
85
|
+
throw new Error(`Extensions.getExtensionContext is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
|
86
|
+
In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
|
87
|
+
)}
|
88
|
+
Prisma.defineExtension = () => {
|
89
|
+
const runtimeName = getRuntime().prettyName;
|
90
|
+
throw new Error(`Extensions.defineExtension is unable to run in this browser environment, or has been bundled for the browser (running in ${runtimeName}).
|
91
|
+
In case this error is unexpected for you, please report it in https://pris.ly/prisma-prisma-bug-report`,
|
92
|
+
)}
|
93
|
+
|
94
|
+
/**
|
95
|
+
* Shorthand utilities for JSON filtering
|
96
|
+
*/
|
97
|
+
Prisma.DbNull = objectEnumValues.instances.DbNull
|
98
|
+
Prisma.JsonNull = objectEnumValues.instances.JsonNull
|
99
|
+
Prisma.AnyNull = objectEnumValues.instances.AnyNull
|
100
|
+
|
101
|
+
Prisma.NullTypes = {
|
102
|
+
DbNull: objectEnumValues.classes.DbNull,
|
103
|
+
JsonNull: objectEnumValues.classes.JsonNull,
|
104
|
+
AnyNull: objectEnumValues.classes.AnyNull
|
105
|
+
}
|
106
|
+
|
107
|
+
|
108
|
+
|
109
|
+
/**
|
110
|
+
* Enums
|
111
|
+
*/
|
112
|
+
|
113
|
+
exports.Prisma.TransactionIsolationLevel = makeStrictEnum({
|
114
|
+
ReadUncommitted: 'ReadUncommitted',
|
115
|
+
ReadCommitted: 'ReadCommitted',
|
116
|
+
RepeatableRead: 'RepeatableRead',
|
117
|
+
Serializable: 'Serializable'
|
118
|
+
});
|
119
|
+
|
120
|
+
exports.Prisma.TempLeavesScalarFieldEnum = {
|
121
|
+
chainId: 'chainId',
|
122
|
+
campaignId: 'campaignId',
|
123
|
+
recipient: 'recipient',
|
124
|
+
reason: 'reason',
|
125
|
+
rewardToken: 'rewardToken',
|
126
|
+
amount: 'amount',
|
127
|
+
auxiliaryData1: 'auxiliaryData1',
|
128
|
+
auxiliaryData2: 'auxiliaryData2',
|
129
|
+
lastProcessedTimestamp: 'lastProcessedTimestamp'
|
130
|
+
};
|
131
|
+
|
132
|
+
exports.Prisma.RelationLoadStrategy = {
|
133
|
+
query: 'query',
|
134
|
+
join: 'join'
|
135
|
+
};
|
136
|
+
|
137
|
+
exports.Prisma.LeavesScalarFieldEnum = {
|
138
|
+
chainId: 'chainId',
|
139
|
+
root: 'root',
|
140
|
+
campaignId: 'campaignId',
|
141
|
+
recipient: 'recipient',
|
142
|
+
reason: 'reason',
|
143
|
+
rewardToken: 'rewardToken',
|
144
|
+
amount: 'amount',
|
145
|
+
auxiliaryData1: 'auxiliaryData1',
|
146
|
+
auxiliaryData2: 'auxiliaryData2',
|
147
|
+
lastProcessedTimestamp: 'lastProcessedTimestamp'
|
148
|
+
};
|
149
|
+
|
150
|
+
exports.Prisma.ProofsScalarFieldEnum = {
|
151
|
+
chainId: 'chainId',
|
152
|
+
root: 'root',
|
153
|
+
recipient: 'recipient',
|
154
|
+
rewardToken: 'rewardToken',
|
155
|
+
proof: 'proof'
|
156
|
+
};
|
157
|
+
|
158
|
+
exports.Prisma.MerklRootsScalarFieldEnum = {
|
159
|
+
chainId: 'chainId',
|
160
|
+
epoch: 'epoch',
|
161
|
+
timestamp: 'timestamp',
|
162
|
+
root: 'root'
|
163
|
+
};
|
164
|
+
|
165
|
+
exports.Prisma.CampaignsScalarFieldEnum = {
|
166
|
+
chainId: 'chainId',
|
167
|
+
computeChainId: 'computeChainId',
|
168
|
+
index: 'index',
|
169
|
+
campaignId: 'campaignId',
|
170
|
+
creator: 'creator',
|
171
|
+
campaignType: 'campaignType',
|
172
|
+
campaignSubType: 'campaignSubType',
|
173
|
+
rewardToken: 'rewardToken',
|
174
|
+
amount: 'amount',
|
175
|
+
startTimestamp: 'startTimestamp',
|
176
|
+
endTimestamp: 'endTimestamp',
|
177
|
+
mainParameter: 'mainParameter',
|
178
|
+
campaignParameters: 'campaignParameters'
|
179
|
+
};
|
180
|
+
|
181
|
+
exports.Prisma.CampaignsToProcessScalarFieldEnum = {
|
182
|
+
chainId: 'chainId',
|
183
|
+
computeChainId: 'computeChainId',
|
184
|
+
index: 'index',
|
185
|
+
campaignId: 'campaignId',
|
186
|
+
creator: 'creator',
|
187
|
+
campaignType: 'campaignType',
|
188
|
+
campaignSubType: 'campaignSubType',
|
189
|
+
rewardToken: 'rewardToken',
|
190
|
+
amount: 'amount',
|
191
|
+
startTimestamp: 'startTimestamp',
|
192
|
+
endTimestamp: 'endTimestamp',
|
193
|
+
mainParameter: 'mainParameter',
|
194
|
+
campaignParameters: 'campaignParameters',
|
195
|
+
lastProcessedTimestamp: 'lastProcessedTimestamp',
|
196
|
+
processUntilTimestamp: 'processUntilTimestamp',
|
197
|
+
jobIndex: 'jobIndex'
|
198
|
+
};
|
199
|
+
|
200
|
+
exports.Prisma.ClaimsScalarFieldEnum = {
|
201
|
+
chainId: 'chainId',
|
202
|
+
recipient: 'recipient',
|
203
|
+
campaignId: 'campaignId',
|
204
|
+
rewardToken: 'rewardToken',
|
205
|
+
reason: 'reason',
|
206
|
+
root: 'root',
|
207
|
+
claimed: 'claimed',
|
208
|
+
timestamp: 'timestamp'
|
209
|
+
};
|
210
|
+
|
211
|
+
exports.Prisma.ClaimsOverTimeScalarFieldEnum = {
|
212
|
+
chainId: 'chainId',
|
213
|
+
recipient: 'recipient',
|
214
|
+
campaignId: 'campaignId',
|
215
|
+
rewardToken: 'rewardToken',
|
216
|
+
reason: 'reason',
|
217
|
+
root: 'root',
|
218
|
+
claimed: 'claimed',
|
219
|
+
timestamp: 'timestamp'
|
220
|
+
};
|
221
|
+
|
222
|
+
exports.Prisma.ALMsScalarFieldEnum = {
|
223
|
+
chainId: 'chainId',
|
224
|
+
campaignId: 'campaignId',
|
225
|
+
name: 'name',
|
226
|
+
type: 'type',
|
227
|
+
address: 'address',
|
228
|
+
target: 'target',
|
229
|
+
owner: 'owner',
|
230
|
+
underlyingPool: 'underlyingPool'
|
231
|
+
};
|
232
|
+
|
233
|
+
exports.Prisma.ERC20HoldersScalarFieldEnum = {
|
234
|
+
chainId: 'chainId',
|
235
|
+
token: 'token',
|
236
|
+
holders: 'holders',
|
237
|
+
blockNumber: 'blockNumber'
|
238
|
+
};
|
239
|
+
|
240
|
+
exports.Prisma.TokensScalarFieldEnum = {
|
241
|
+
chainId: 'chainId',
|
242
|
+
address: 'address',
|
243
|
+
symbol: 'symbol',
|
244
|
+
decimals: 'decimals'
|
245
|
+
};
|
246
|
+
|
247
|
+
exports.Prisma.StateSaveScalarFieldEnum = {
|
248
|
+
id: 'id',
|
249
|
+
blockNumber: 'blockNumber',
|
250
|
+
state: 'state'
|
251
|
+
};
|
252
|
+
|
253
|
+
exports.Prisma.CampaignCreatorsScalarFieldEnum = {
|
254
|
+
address: 'address',
|
255
|
+
tags: 'tags'
|
256
|
+
};
|
257
|
+
|
258
|
+
exports.Prisma.SortOrder = {
|
259
|
+
asc: 'asc',
|
260
|
+
desc: 'desc'
|
261
|
+
};
|
262
|
+
|
263
|
+
exports.Prisma.JsonNullValueInput = {
|
264
|
+
JsonNull: Prisma.JsonNull
|
265
|
+
};
|
266
|
+
|
267
|
+
exports.Prisma.QueryMode = {
|
268
|
+
default: 'default',
|
269
|
+
insensitive: 'insensitive'
|
270
|
+
};
|
271
|
+
|
272
|
+
exports.Prisma.TempLeavesOrderByRelevanceFieldEnum = {
|
273
|
+
campaignId: 'campaignId',
|
274
|
+
recipient: 'recipient',
|
275
|
+
reason: 'reason',
|
276
|
+
rewardToken: 'rewardToken',
|
277
|
+
amount: 'amount'
|
278
|
+
};
|
279
|
+
|
280
|
+
exports.Prisma.LeavesOrderByRelevanceFieldEnum = {
|
281
|
+
root: 'root',
|
282
|
+
campaignId: 'campaignId',
|
283
|
+
recipient: 'recipient',
|
284
|
+
reason: 'reason',
|
285
|
+
rewardToken: 'rewardToken',
|
286
|
+
amount: 'amount'
|
287
|
+
};
|
288
|
+
|
289
|
+
exports.Prisma.ProofsOrderByRelevanceFieldEnum = {
|
290
|
+
root: 'root',
|
291
|
+
recipient: 'recipient',
|
292
|
+
rewardToken: 'rewardToken',
|
293
|
+
proof: 'proof'
|
294
|
+
};
|
295
|
+
|
296
|
+
exports.Prisma.MerklRootsOrderByRelevanceFieldEnum = {
|
297
|
+
root: 'root'
|
298
|
+
};
|
299
|
+
|
300
|
+
exports.Prisma.JsonNullValueFilter = {
|
301
|
+
DbNull: Prisma.DbNull,
|
302
|
+
JsonNull: Prisma.JsonNull,
|
303
|
+
AnyNull: Prisma.AnyNull
|
304
|
+
};
|
305
|
+
|
306
|
+
exports.Prisma.CampaignsOrderByRelevanceFieldEnum = {
|
307
|
+
campaignId: 'campaignId',
|
308
|
+
creator: 'creator',
|
309
|
+
rewardToken: 'rewardToken',
|
310
|
+
amount: 'amount',
|
311
|
+
mainParameter: 'mainParameter'
|
312
|
+
};
|
313
|
+
|
314
|
+
exports.Prisma.CampaignsToProcessOrderByRelevanceFieldEnum = {
|
315
|
+
campaignId: 'campaignId',
|
316
|
+
creator: 'creator',
|
317
|
+
rewardToken: 'rewardToken',
|
318
|
+
amount: 'amount',
|
319
|
+
mainParameter: 'mainParameter'
|
320
|
+
};
|
321
|
+
|
322
|
+
exports.Prisma.ClaimsOrderByRelevanceFieldEnum = {
|
323
|
+
recipient: 'recipient',
|
324
|
+
campaignId: 'campaignId',
|
325
|
+
rewardToken: 'rewardToken',
|
326
|
+
reason: 'reason',
|
327
|
+
root: 'root',
|
328
|
+
claimed: 'claimed'
|
329
|
+
};
|
330
|
+
|
331
|
+
exports.Prisma.ClaimsOverTimeOrderByRelevanceFieldEnum = {
|
332
|
+
recipient: 'recipient',
|
333
|
+
campaignId: 'campaignId',
|
334
|
+
rewardToken: 'rewardToken',
|
335
|
+
reason: 'reason',
|
336
|
+
root: 'root',
|
337
|
+
claimed: 'claimed'
|
338
|
+
};
|
339
|
+
|
340
|
+
exports.Prisma.ALMsOrderByRelevanceFieldEnum = {
|
341
|
+
campaignId: 'campaignId',
|
342
|
+
name: 'name',
|
343
|
+
type: 'type',
|
344
|
+
address: 'address',
|
345
|
+
target: 'target',
|
346
|
+
owner: 'owner',
|
347
|
+
underlyingPool: 'underlyingPool'
|
348
|
+
};
|
349
|
+
|
350
|
+
exports.Prisma.ERC20HoldersOrderByRelevanceFieldEnum = {
|
351
|
+
token: 'token',
|
352
|
+
holders: 'holders'
|
353
|
+
};
|
354
|
+
|
355
|
+
exports.Prisma.TokensOrderByRelevanceFieldEnum = {
|
356
|
+
address: 'address',
|
357
|
+
symbol: 'symbol'
|
358
|
+
};
|
359
|
+
|
360
|
+
exports.Prisma.StateSaveOrderByRelevanceFieldEnum = {
|
361
|
+
id: 'id'
|
362
|
+
};
|
363
|
+
|
364
|
+
exports.Prisma.CampaignCreatorsOrderByRelevanceFieldEnum = {
|
365
|
+
address: 'address',
|
366
|
+
tags: 'tags'
|
367
|
+
};
|
368
|
+
|
369
|
+
|
370
|
+
exports.Prisma.ModelName = {
|
371
|
+
TempLeaves: 'TempLeaves',
|
372
|
+
Leaves: 'Leaves',
|
373
|
+
Proofs: 'Proofs',
|
374
|
+
MerklRoots: 'MerklRoots',
|
375
|
+
Campaigns: 'Campaigns',
|
376
|
+
CampaignsToProcess: 'CampaignsToProcess',
|
377
|
+
Claims: 'Claims',
|
378
|
+
ClaimsOverTime: 'ClaimsOverTime',
|
379
|
+
ALMs: 'ALMs',
|
380
|
+
ERC20Holders: 'ERC20Holders',
|
381
|
+
Tokens: 'Tokens',
|
382
|
+
StateSave: 'StateSave',
|
383
|
+
CampaignCreators: 'CampaignCreators'
|
384
|
+
};
|
385
|
+
|
386
|
+
/**
|
387
|
+
* This is a stub Prisma Client that will error at runtime if called.
|
388
|
+
*/
|
389
|
+
class PrismaClient {
|
390
|
+
constructor() {
|
391
|
+
return new Proxy(this, {
|
392
|
+
get(target, prop) {
|
393
|
+
let message
|
394
|
+
const runtime = getRuntime()
|
395
|
+
if (runtime.isEdge) {
|
396
|
+
message = `PrismaClient is not configured to run in ${runtime.prettyName}. In order to run Prisma Client on edge runtime, either:
|
397
|
+
- Use Prisma Accelerate: https://pris.ly/d/accelerate
|
398
|
+
- Use Driver Adapters: https://pris.ly/d/driver-adapters
|
399
|
+
`;
|
400
|
+
} else {
|
401
|
+
message = 'PrismaClient is unable to run in this browser environment, or has been bundled for the browser (running in `' + runtime.prettyName + '`).'
|
402
|
+
}
|
403
|
+
|
404
|
+
message += `
|
405
|
+
If this is unexpected, please open an issue: https://pris.ly/prisma-prisma-bug-report`
|
406
|
+
|
407
|
+
throw new Error(message)
|
408
|
+
}
|
409
|
+
})
|
410
|
+
}
|
411
|
+
}
|
412
|
+
|
413
|
+
exports.PrismaClient = PrismaClient
|
414
|
+
|
415
|
+
Object.assign(exports, Prisma)
|
@@ -0,0 +1,44 @@
|
|
1
|
+
import { redisClient } from "../cache/redis";
|
2
|
+
import { log } from "../utils/logger";
|
3
|
+
import { engineDbClient } from "../utils/prisma";
|
4
|
+
import { swagger } from "@elysiajs/swagger";
|
5
|
+
import axios from "axios";
|
6
|
+
import { Elysia } from "elysia";
|
7
|
+
import { campaignsCacheUpdater } from "./jobs/campaignsCacheUpdater";
|
8
|
+
import { healthCheck } from "./jobs/health";
|
9
|
+
import { opportunityUpdater } from "./jobs/opportunityUpdater";
|
10
|
+
import { priceUpdater } from "./jobs/priceUpdater";
|
11
|
+
import { sync } from "./jobs/sync";
|
12
|
+
// Axios with bun workaround
|
13
|
+
axios.defaults.headers.common["Accept-Encoding"] = "gzip";
|
14
|
+
const PORT = process.env.PORT || 3000;
|
15
|
+
const app = new Elysia()
|
16
|
+
.use(swagger())
|
17
|
+
.get("/", () => "Merkl API")
|
18
|
+
.use(campaignsCacheUpdater) // /v3/update
|
19
|
+
.use(opportunityUpdater) // /v3/updateOpportunity
|
20
|
+
.use(priceUpdater) // /v3/updatePrices
|
21
|
+
.use(healthCheck) // /v3/health
|
22
|
+
.use(sync) // GET /jobs/api/sync-with-engine
|
23
|
+
.onError(ctx => {
|
24
|
+
console.error(ctx.error.message);
|
25
|
+
console.error(ctx.error.stack);
|
26
|
+
if (ctx.code === "NOT_FOUND")
|
27
|
+
return new Response(JSON.stringify({
|
28
|
+
path: ctx.path,
|
29
|
+
error: ctx.code,
|
30
|
+
message: "Path does not exist",
|
31
|
+
}), {
|
32
|
+
status: 404,
|
33
|
+
});
|
34
|
+
return (ctx.set.status = "Internal Server Error");
|
35
|
+
})
|
36
|
+
.listen(PORT, ({ hostname, port }) => {
|
37
|
+
log.info(`🔄 Background Jobs started (${hostname}:${port})`);
|
38
|
+
});
|
39
|
+
// ─── Signal Handling ─────────────────────────────────────────────────────────
|
40
|
+
process.on("SIGTERM", () => {
|
41
|
+
engineDbClient.$disconnect();
|
42
|
+
redisClient.disconnect();
|
43
|
+
process.exit();
|
44
|
+
});
|
@@ -0,0 +1,160 @@
|
|
1
|
+
import { Redis } from "../../cache";
|
2
|
+
import { campaignsToOldFormat } from "../../libs/deprecated-merklv3";
|
3
|
+
import { AprService, CampaignService, OpportunityService } from "../../modules/v4";
|
4
|
+
import { CacheService } from "../../modules/v4/cache";
|
5
|
+
import { TTLPresets } from "../../modules/v4/cache/cache.model";
|
6
|
+
import { OpportunityRepository } from "../../modules/v4/opportunity/opportunity.repository";
|
7
|
+
import { RewardService } from "../../modules/v4/reward";
|
8
|
+
import { TvlService } from "../../modules/v4/tvl";
|
9
|
+
import { engineDbClient } from "../../utils/prisma";
|
10
|
+
import { Campaign, ChainId, NETWORK_LABELS, isSupportedChain, } from "@sdk";
|
11
|
+
import { Elysia, t } from "elysia";
|
12
|
+
import moment from "moment";
|
13
|
+
import { campaignsDynamicData } from "../../libs/campaigns/campaignsDynamicData";
|
14
|
+
import { merklChainData } from "../../libs/merklChainData";
|
15
|
+
import { staticCampaignWithCache } from "../../libs/staticCampaigns";
|
16
|
+
import { InvalidParameter, UnsupportedNetwork } from "../../utils/error";
|
17
|
+
import { executeSimple } from "../../utils/execute";
|
18
|
+
import { log } from "../../utils/logger";
|
19
|
+
import { ALL_CAMPAIGNS_FOR_CHAIN_AFTER } from "../../utils/queries/allCampaigns";
|
20
|
+
const highCampaignsChains = [ChainId.ARBITRUM, ChainId.POLYGON, ChainId.BLAST, ChainId.BASE];
|
21
|
+
export const campaignsCacheUpdater = new Elysia().get("/v3/update", async ({ query, set }) => {
|
22
|
+
const rawChainId = query.chainId;
|
23
|
+
let chainId;
|
24
|
+
if (typeof rawChainId === "string") {
|
25
|
+
chainId = Number.parseInt(rawChainId);
|
26
|
+
if (!isSupportedChain(chainId, "merkl"))
|
27
|
+
throw new UnsupportedNetwork(chainId);
|
28
|
+
}
|
29
|
+
else {
|
30
|
+
throw new InvalidParameter("Invalid chainId provided");
|
31
|
+
}
|
32
|
+
let success = true;
|
33
|
+
try {
|
34
|
+
await Redis.safeSet(`MerklChainData_${chainId}`, await merklChainData(chainId));
|
35
|
+
}
|
36
|
+
catch (error) {
|
37
|
+
log.error(`❌ update merklChainData cache failed for ${NETWORK_LABELS[chainId]}`, error);
|
38
|
+
success = false;
|
39
|
+
}
|
40
|
+
log.local(`🔁 updating ${NETWORK_LABELS[chainId]} Campaigns cache`);
|
41
|
+
let campaignsAfter = moment().subtract(3, "months").unix();
|
42
|
+
if (highCampaignsChains.includes(chainId)) {
|
43
|
+
campaignsAfter = moment().subtract(1, "months").unix();
|
44
|
+
}
|
45
|
+
const TWO_WEEKS_AGO = moment().subtract(2, "weeks").unix();
|
46
|
+
try {
|
47
|
+
const dynamicData = {};
|
48
|
+
let staticData = (await engineDbClient.$queryRaw(ALL_CAMPAIGNS_FOR_CHAIN_AFTER(chainId, campaignsAfter)));
|
49
|
+
log.local(`Data length before filtering: ${staticData.length}`);
|
50
|
+
const mainParameters = {};
|
51
|
+
staticData = staticData.filter(campaign => {
|
52
|
+
if (campaign.endTimestamp < TWO_WEEKS_AGO && campaign.campaignType === Campaign.CLAMM) {
|
53
|
+
campaign.campaignParameters.forwarders = [];
|
54
|
+
}
|
55
|
+
mainParameters[campaign.mainParameter] = true;
|
56
|
+
return true;
|
57
|
+
});
|
58
|
+
log.local(`Data length after filtering: ${staticData.length}`);
|
59
|
+
if (!!staticData) {
|
60
|
+
// Build list of existing campaign types for this chain
|
61
|
+
const campaignTypes = !staticData
|
62
|
+
? []
|
63
|
+
: staticData
|
64
|
+
.map(campaign => campaign.campaignType)
|
65
|
+
.reduce((prev, campaignType) => {
|
66
|
+
if (!prev.includes(campaignType))
|
67
|
+
prev.push(campaignType);
|
68
|
+
return prev;
|
69
|
+
}, []);
|
70
|
+
// Fetch dynamic data for all these types
|
71
|
+
const promisesPerType = campaignTypes.map(async (campaignType) => {
|
72
|
+
const campaigns = staticData.filter(campaign => campaign.campaignType === campaignType);
|
73
|
+
await executeSimple(chainId, campaignsDynamicData(chainId, campaigns, campaignType)).then(r => {
|
74
|
+
for (const d of r) {
|
75
|
+
if (!!d) {
|
76
|
+
// Main Parameter OVERRIDING
|
77
|
+
if (d.campaignType === Campaign.SILO && d.campaignParameters.whitelist?.length === 1) {
|
78
|
+
d.mainParameter = `${d.mainParameter}-${d.campaignParameters.whitelist[0]}`;
|
79
|
+
}
|
80
|
+
if (!dynamicData[`${d.campaignType}_${d.mainParameter}`])
|
81
|
+
dynamicData[`${d.campaignType}_${d.mainParameter}`] = {};
|
82
|
+
dynamicData[`${d.campaignType}_${d.mainParameter}`][d.campaignId] = d;
|
83
|
+
}
|
84
|
+
}
|
85
|
+
});
|
86
|
+
});
|
87
|
+
await Promise.all(promisesPerType);
|
88
|
+
}
|
89
|
+
if (!!dynamicData && Object.keys(dynamicData).length > 0) {
|
90
|
+
await Redis.safeSet(`Campaigns_${chainId}`, dynamicData);
|
91
|
+
// Set live or future campaigns
|
92
|
+
const liveDynamicData = {};
|
93
|
+
for (const [type_mainParameter, value] of Object.entries(dynamicData)) {
|
94
|
+
for (const [campaignId, data] of Object.entries(value)) {
|
95
|
+
if (data.endTimestamp > moment().unix()) {
|
96
|
+
if (!liveDynamicData[type_mainParameter]) {
|
97
|
+
liveDynamicData[type_mainParameter] = {};
|
98
|
+
}
|
99
|
+
liveDynamicData[type_mainParameter][campaignId] = data;
|
100
|
+
}
|
101
|
+
}
|
102
|
+
}
|
103
|
+
await Redis.safeSet(`LiveCampaigns_${chainId}`, liveDynamicData);
|
104
|
+
const merklChainData = await Redis.get("MerklChainData", chainId);
|
105
|
+
await Redis.safeSet(`CampaignsOldFormat_${chainId}`, campaignsToOldFormat(dynamicData, merklChainData));
|
106
|
+
await Redis.safeSet(`LiveCampaignsOldFormat_${chainId}`, campaignsToOldFormat(liveDynamicData, merklChainData));
|
107
|
+
log.info(`✅ ${NETWORK_LABELS[chainId]} caches updated successfully`);
|
108
|
+
for (const entry of Object.entries(liveDynamicData)) {
|
109
|
+
await CampaignService.fill(Object.values(entry[1]).map(({ campaignId, chainId }) => ({
|
110
|
+
campaignId,
|
111
|
+
distributionChain: chainId,
|
112
|
+
})));
|
113
|
+
const [type, mainParameter] = entry[0].split("_");
|
114
|
+
const apr = AprService.extractFromDynamicData(+type, Object.values(entry[1]));
|
115
|
+
const tvl = TvlService.extractFromDynamicData(+type, Object.values(entry[1]));
|
116
|
+
const dailyRewards = await RewardService.extractDailyRewardsRecordFromDynamicData(+type, Object.values(entry[1]));
|
117
|
+
const opportunityId = OpportunityService.hashId({
|
118
|
+
chainId,
|
119
|
+
identifier: mainParameter,
|
120
|
+
type: CampaignService.getTypeFromV3(+type),
|
121
|
+
});
|
122
|
+
await OpportunityRepository.updateRecords(opportunityId, apr, tvl, dailyRewards);
|
123
|
+
}
|
124
|
+
await OpportunityService.updateMetadata(chainId);
|
125
|
+
// ─── Refresh Cache For GET /opportunities ────
|
126
|
+
await CacheService.set(TTLPresets.MIN_5, OpportunityService.getMany, { items: 50, page: 0 });
|
127
|
+
log.info(`✅ ${NETWORK_LABELS[chainId]} DB records updated successfully`);
|
128
|
+
}
|
129
|
+
else {
|
130
|
+
if (chainId === ChainId.CORE || chainId === ChainId.THUNDERCORE) {
|
131
|
+
log.info(`⚠️ no campaigns found for ${NETWORK_LABELS[chainId]}, setting empty cache`);
|
132
|
+
for (const key of [
|
133
|
+
"Campaigns",
|
134
|
+
"LiveCampaigns",
|
135
|
+
"CampaignsOldFormat",
|
136
|
+
"LiveCampaignsOldFormat",
|
137
|
+
]) {
|
138
|
+
await Redis.safeSet(`${key}_${chainId}`, {});
|
139
|
+
}
|
140
|
+
log.info(`✅ ${NETWORK_LABELS[chainId]} caches updated - empty cache`);
|
141
|
+
}
|
142
|
+
}
|
143
|
+
}
|
144
|
+
catch (error) {
|
145
|
+
log.error(`❌ update Campaigns cache failed for ${NETWORK_LABELS[chainId]}`, error);
|
146
|
+
success = false;
|
147
|
+
}
|
148
|
+
// This is independant of campaigns cache update, so not in the if condition
|
149
|
+
try {
|
150
|
+
await staticCampaignWithCache(chainId);
|
151
|
+
}
|
152
|
+
catch (error) {
|
153
|
+
log.error(`❌ update Campaigns cache failed for ${NETWORK_LABELS[chainId]}`, error);
|
154
|
+
}
|
155
|
+
return { success };
|
156
|
+
}, {
|
157
|
+
query: t.Object({
|
158
|
+
chainId: t.String(),
|
159
|
+
}),
|
160
|
+
});
|
@@ -0,0 +1,15 @@
|
|
1
|
+
import { Redis } from "../../cache";
|
2
|
+
import { t } from "elysia";
|
3
|
+
export const response = t.Object({ success: t.Boolean() });
|
4
|
+
export const healthCheck = (app) => {
|
5
|
+
return app.get("/v3/health", async () => {
|
6
|
+
// Check if the cache is working
|
7
|
+
await Redis.get("Prices");
|
8
|
+
return {
|
9
|
+
success: true,
|
10
|
+
};
|
11
|
+
}, {
|
12
|
+
query: t.Object({}),
|
13
|
+
tags: ["Onchain"],
|
14
|
+
});
|
15
|
+
};
|