@merkl/api 0.10.129 → 0.10.131

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (361) hide show
  1. package/dist/database/api/.generated/default.js +1 -0
  2. package/dist/database/api/.generated/edge.js +609 -0
  3. package/dist/database/api/.generated/index-browser.js +586 -0
  4. package/dist/database/api/.generated/index.js +638 -0
  5. package/dist/database/api/.generated/runtime/edge-esm.js +31 -0
  6. package/dist/database/api/.generated/runtime/edge.js +31 -0
  7. package/dist/database/api/.generated/runtime/index-browser.js +13 -0
  8. package/dist/database/api/.generated/runtime/library.js +143 -0
  9. package/dist/database/api/.generated/runtime/react-native.js +80 -0
  10. package/dist/database/api/.generated/runtime/wasm.js +32 -0
  11. package/dist/database/api/.generated/wasm.js +586 -0
  12. package/dist/database/api/seeder/resources/protocol.js +341 -0
  13. package/dist/database/engine/.generated/default.js +1 -0
  14. package/dist/database/engine/.generated/edge.js +438 -0
  15. package/dist/database/engine/.generated/index-browser.js +415 -0
  16. package/dist/database/engine/.generated/index.js +467 -0
  17. package/dist/database/engine/.generated/runtime/edge-esm.js +31 -0
  18. package/dist/database/engine/.generated/runtime/edge.js +31 -0
  19. package/dist/database/engine/.generated/runtime/index-browser.js +13 -0
  20. package/dist/database/engine/.generated/runtime/library.js +143 -0
  21. package/dist/database/engine/.generated/runtime/react-native.js +80 -0
  22. package/dist/database/engine/.generated/runtime/wasm.js +32 -0
  23. package/dist/database/engine/.generated/wasm.js +415 -0
  24. package/dist/src/backgroundJobs/index.js +44 -0
  25. package/dist/src/backgroundJobs/jobs/campaignsCacheUpdater.js +160 -0
  26. package/dist/src/backgroundJobs/jobs/health.js +15 -0
  27. package/dist/src/backgroundJobs/jobs/opportunityUpdater.js +63 -0
  28. package/dist/src/backgroundJobs/jobs/priceUpdater.js +16 -0
  29. package/dist/src/backgroundJobs/jobs/sync.js +33 -0
  30. package/dist/src/cache/declaration.js +146 -0
  31. package/dist/src/cache/index.js +152 -0
  32. package/dist/src/cache/redis.js +49 -0
  33. package/dist/src/constants.js +119 -0
  34. package/dist/src/entities/campaign.js +134 -0
  35. package/dist/src/entities/opportunity.js +549 -0
  36. package/dist/src/errors/BadRequest.error.js +7 -0
  37. package/dist/src/errors/Conflict.error.js +7 -0
  38. package/dist/src/errors/HttpError.js +11 -0
  39. package/dist/src/errors/NotFound.error.js +7 -0
  40. package/dist/src/errors/Opportunity.error.js +11 -0
  41. package/dist/src/errors/Unauthorized.error.js +7 -0
  42. package/dist/src/errors/index.js +5 -0
  43. package/dist/src/guards/BackOffice.guard.js +10 -0
  44. package/dist/src/guards/Engine.guard.js +10 -0
  45. package/dist/src/guards/TokenAuth.guard.js +10 -0
  46. package/dist/src/hooks/checkQueryAddressValidity.js +7 -0
  47. package/dist/src/hooks/checkQueryChainIdValidity.js +7 -0
  48. package/dist/src/index.js +79 -0
  49. package/dist/src/internal/controllers/endingCampaigns.js +41 -0
  50. package/dist/src/internal/controllers/unclaimed.js +36 -0
  51. package/dist/src/internal/index.js +30 -0
  52. package/dist/src/libs/campaigns/campaignTypes/AjnaDynamicData.js +111 -0
  53. package/dist/src/libs/campaigns/campaignTypes/BadgerDynamicData.js +93 -0
  54. package/dist/src/libs/campaigns/campaignTypes/CLAMMDynamicData.js +942 -0
  55. package/dist/src/libs/campaigns/campaignTypes/CompoundDynamicData.js +90 -0
  56. package/dist/src/libs/campaigns/campaignTypes/DolomiteDynamicData.js +60 -0
  57. package/dist/src/libs/campaigns/campaignTypes/ERC20DynamicData.js +162 -0
  58. package/dist/src/libs/campaigns/campaignTypes/ERC20DynamicDataRefacto.js +159 -0
  59. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/helpers/eulerVaultNames.js +13 -0
  60. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/helpers/factoryFinder.js +29 -0
  61. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/helpers/getBlacklistedSupply.js +22 -0
  62. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/helpers/metamorphoTvl.js +35 -0
  63. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/helpers/spliceTVL.js +21 -0
  64. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/helpers/tokenType.js +106 -0
  65. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/AaveProcessor.js +26 -0
  66. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/AssetProcessor.js +47 -0
  67. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/AuraProcessor.js +103 -0
  68. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/BalancerGaugeProcessor.js +83 -0
  69. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/BalancerPoolProcessor.js +99 -0
  70. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/BeefyProcessor.js +51 -0
  71. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/CompoundProcessor.js +36 -0
  72. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/EnzymeProcessor.js +51 -0
  73. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/EulerBorrowProcessor.js +46 -0
  74. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/EulerLendProcessor.js +47 -0
  75. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/FluidProcessor.js +36 -0
  76. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/FraxProcessor.js +41 -0
  77. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/GearboxProcessor.js +44 -0
  78. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/GenericProcessor.js +239 -0
  79. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/MetamorphoProcessor.js +43 -0
  80. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/PendleProcessor.js +31 -0
  81. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/RadiantProcessor.js +58 -0
  82. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/RfxProcessor.js +64 -0
  83. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/SpliceProcessor.js +35 -0
  84. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/SturdySiloProcessor.js +37 -0
  85. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/TemplateProcessor.js +40 -0
  86. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/TorosProcessor.js +33 -0
  87. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/UniswapProcessor.js +48 -0
  88. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/WoofiProcessor.js +40 -0
  89. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/curveProcessor.js +68 -0
  90. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/processorMapping.js +77 -0
  91. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/subtypesPrices.js +583 -0
  92. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/subtypesPricesRefactoFinal.js +24 -0
  93. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/subtypesRound1.js +1209 -0
  94. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/subtypesRound1RefactoFinal.js +194 -0
  95. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/subtypesRound2.js +645 -0
  96. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/subtypesRound2RefactoFinal.js +22 -0
  97. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/subtypesRound3.js +392 -0
  98. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/subtypesRound3RefactoFinal.js +22 -0
  99. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/subtypesRound4.js +323 -0
  100. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/subtypesRound4RefactoFinal.js +22 -0
  101. package/dist/src/libs/campaigns/campaignTypes/ERC20_SNAPSHOTDynamicData.js +38 -0
  102. package/dist/src/libs/campaigns/campaignTypes/EulerDynamicData.js +165 -0
  103. package/dist/src/libs/campaigns/campaignTypes/JSON_AIRDROPDynamicData.js +19 -0
  104. package/dist/src/libs/campaigns/campaignTypes/MORPHODynamicData.js +120 -0
  105. package/dist/src/libs/campaigns/campaignTypes/RadiantDynamicData.js +112 -0
  106. package/dist/src/libs/campaigns/campaignTypes/SILODynamicData.js +113 -0
  107. package/dist/src/libs/campaigns/campaignsDynamicData.js +83 -0
  108. package/dist/src/libs/campaigns/campaignsDynamicDataRefacto.js +78 -0
  109. package/dist/src/libs/campaigns/getCampaigns.js +18 -0
  110. package/dist/src/libs/campaigns/utils/fetchA51Strategies.js +44 -0
  111. package/dist/src/libs/campaigns/utils/fetchClamInfo.js +27 -0
  112. package/dist/src/libs/campaigns/utils/fetchLogs.js +91 -0
  113. package/dist/src/libs/campaigns/utils/getCompV2ForksVaults.js +122 -0
  114. package/dist/src/libs/campaigns/utils/getContractCreationBlock.js +44 -0
  115. package/dist/src/libs/campaigns/utils/getDolomiteMarkets.js +50 -0
  116. package/dist/src/libs/campaigns/utils/getEulerV2Vaults.js +87 -0
  117. package/dist/src/libs/campaigns/utils/getLastEligibilityRatio.js +56 -0
  118. package/dist/src/libs/computeFee.js +34 -0
  119. package/dist/src/libs/custom/twtParticipants.js +54 -0
  120. package/dist/src/libs/deprecated-merklv3/index.js +184 -0
  121. package/dist/src/libs/getTokensList.js +37 -0
  122. package/dist/src/libs/merklChainData.js +129 -0
  123. package/dist/src/libs/parse/marketsWithCache.js +8 -0
  124. package/dist/src/libs/positions/ajna/index.js +107 -0
  125. package/dist/src/libs/positions/badger/index.js +79 -0
  126. package/dist/src/libs/positions/clamm/index.js +419 -0
  127. package/dist/src/libs/positions/clamm/thegraph/fetchAlmPositions.js +35 -0
  128. package/dist/src/libs/positions/clamm/thegraph/fetchAmmPositions.js +35 -0
  129. package/dist/src/libs/positions/clamm/thegraph/fetchFarmedPositions.js +44 -0
  130. package/dist/src/libs/positions/clamm/thegraph/index.js +162 -0
  131. package/dist/src/libs/positions/compound/index.js +93 -0
  132. package/dist/src/libs/positions/dolomite/index.js +49 -0
  133. package/dist/src/libs/positions/erc20/index.js +55 -0
  134. package/dist/src/libs/positions/euler/index.js +57 -0
  135. package/dist/src/libs/positions/index.js +48 -0
  136. package/dist/src/libs/positions/morpho/index.js +177 -0
  137. package/dist/src/libs/positions/prepareFetch.js +339 -0
  138. package/dist/src/libs/positions/silo/index.js +67 -0
  139. package/dist/src/libs/positions/types.js +1 -0
  140. package/dist/src/libs/reports/campaignReport.js +37 -0
  141. package/dist/src/libs/reports/mainParameterRewards.js +48 -0
  142. package/dist/src/libs/rewards/userRewards.js +154 -0
  143. package/dist/src/libs/staticCampaigns.js +10 -0
  144. package/dist/src/libs/tokens/balances.js +126 -0
  145. package/dist/src/libs/tokens/tokenInfo.js +22 -0
  146. package/dist/src/modules/v4/accounting/accounting.controller.js +66 -0
  147. package/dist/src/modules/v4/accounting/accounting.model.js +32 -0
  148. package/dist/src/modules/v4/accounting/accounting.repository.js +100 -0
  149. package/dist/src/modules/v4/accounting/accounting.service.js +78 -0
  150. package/dist/src/modules/v4/accounting/index.js +3 -0
  151. package/dist/src/modules/v4/apr/apr.controller.js +1 -0
  152. package/dist/src/modules/v4/apr/apr.model.js +1 -0
  153. package/dist/src/modules/v4/apr/apr.repository.js +1 -0
  154. package/dist/src/modules/v4/apr/apr.service.js +40 -0
  155. package/dist/src/modules/v4/apr/index.js +2 -0
  156. package/dist/src/modules/v4/blacklist/blacklist.controller.js +45 -0
  157. package/dist/src/modules/v4/blacklist/blacklist.model.js +13 -0
  158. package/dist/src/modules/v4/blacklist/blacklist.repository.js +56 -0
  159. package/dist/src/modules/v4/blacklist/blacklist.service.js +24 -0
  160. package/dist/src/modules/v4/blacklist/index.js +3 -0
  161. package/dist/src/modules/v4/cache/cache.model.js +14 -0
  162. package/dist/src/modules/v4/cache/cache.repository.js +10 -0
  163. package/dist/src/modules/v4/cache/cache.service.js +44 -0
  164. package/dist/src/modules/v4/cache/index.js +1 -0
  165. package/dist/src/modules/v4/campaign/campaign.controller.js +56 -0
  166. package/dist/src/modules/v4/campaign/campaign.model.js +54 -0
  167. package/dist/src/modules/v4/campaign/campaign.repository.js +346 -0
  168. package/dist/src/modules/v4/campaign/campaign.service.js +203 -0
  169. package/dist/src/modules/v4/campaign/index.js +3 -0
  170. package/dist/src/modules/v4/chain/chain.controller.js +40 -0
  171. package/dist/src/modules/v4/chain/chain.model.js +17 -0
  172. package/dist/src/modules/v4/chain/chain.repository.js +64 -0
  173. package/dist/src/modules/v4/chain/chain.service.js +42 -0
  174. package/dist/src/modules/v4/chain/index.js +3 -0
  175. package/dist/src/modules/v4/dynamicData/dynamicData.controller.js +19 -0
  176. package/dist/src/modules/v4/dynamicData/dynamicData.model.js +6 -0
  177. package/dist/src/modules/v4/dynamicData/dynamicData.repository.js +1 -0
  178. package/dist/src/modules/v4/dynamicData/dynamicData.service.js +49 -0
  179. package/dist/src/modules/v4/dynamicData/index.js +3 -0
  180. package/dist/src/modules/v4/enso/enso.model.js +108 -0
  181. package/dist/src/modules/v4/enso/enso.service.js +46 -0
  182. package/dist/src/modules/v4/explorer/explorer.model.js +2 -0
  183. package/dist/src/modules/v4/explorer/explorer.repository.js +23 -0
  184. package/dist/src/modules/v4/explorer/explorer.service.js +24 -0
  185. package/dist/src/modules/v4/explorer/index.js +1 -0
  186. package/dist/src/modules/v4/index.js +4 -0
  187. package/dist/src/modules/v4/merklRoot/index.js +3 -0
  188. package/dist/src/modules/v4/merklRoot/merklRoot.controller.js +19 -0
  189. package/dist/src/modules/v4/merklRoot/merklRoot.model.js +6 -0
  190. package/dist/src/modules/v4/merklRoot/merklRoot.repository.js +31 -0
  191. package/dist/src/modules/v4/merklRoot/merklRoot.service.js +38 -0
  192. package/dist/src/modules/v4/opportunity/index.js +3 -0
  193. package/dist/src/modules/v4/opportunity/opportunity.controller.js +69 -0
  194. package/dist/src/modules/v4/opportunity/opportunity.model.js +36 -0
  195. package/dist/src/modules/v4/opportunity/opportunity.repository.d.ts +14 -0
  196. package/dist/src/modules/v4/opportunity/opportunity.repository.js +217 -0
  197. package/dist/src/modules/v4/opportunity/opportunity.service.d.ts +0 -15
  198. package/dist/src/modules/v4/opportunity/opportunity.service.js +180 -0
  199. package/dist/src/modules/v4/opportunity/subservices/getAjnaMetadata.service.js +50 -0
  200. package/dist/src/modules/v4/opportunity/subservices/getBadgerMetadata.service.js +23 -0
  201. package/dist/src/modules/v4/opportunity/subservices/getClammMetadata.service.js +33 -0
  202. package/dist/src/modules/v4/opportunity/subservices/getCompoundMetadata.service.js +18 -0
  203. package/dist/src/modules/v4/opportunity/subservices/getDolomiteMetadata.service.js +15 -0
  204. package/dist/src/modules/v4/opportunity/subservices/getErc20Metadata.service.js +63 -0
  205. package/dist/src/modules/v4/opportunity/subservices/getErc20SnapshotMetadata.service.js +8 -0
  206. package/dist/src/modules/v4/opportunity/subservices/getEulerMetadata.service.js +30 -0
  207. package/dist/src/modules/v4/opportunity/subservices/getJsonAirDropMetadata.service.js +36 -0
  208. package/dist/src/modules/v4/opportunity/subservices/getMorphoMetadata.service.js +19 -0
  209. package/dist/src/modules/v4/opportunity/subservices/getRadiantMetadata.service.js +9 -0
  210. package/dist/src/modules/v4/opportunity/subservices/getSiloMetadata.service.js +13 -0
  211. package/dist/src/modules/v4/opportunity/transform-id.pipe.js +6 -0
  212. package/dist/src/modules/v4/opportunity/validate-id.pipe.js +12 -0
  213. package/dist/src/modules/v4/participate/participate.controller.js +66 -0
  214. package/dist/src/modules/v4/participate/participate.model.js +24 -0
  215. package/dist/src/modules/v4/participate/participate.service.js +33 -0
  216. package/dist/src/modules/v4/price/index.js +3 -0
  217. package/dist/src/modules/v4/price/price.controller.js +62 -0
  218. package/dist/src/modules/v4/price/price.model.js +12 -0
  219. package/dist/src/modules/v4/price/price.repository.js +18 -0
  220. package/dist/src/modules/v4/price/price.service.js +44 -0
  221. package/dist/src/modules/v4/prisma/index.js +1 -0
  222. package/dist/src/modules/v4/protocol/index.js +3 -0
  223. package/dist/src/modules/v4/protocol/protocol.controller.js +23 -0
  224. package/dist/src/modules/v4/protocol/protocol.model.js +68 -0
  225. package/dist/src/modules/v4/protocol/protocol.repository.js +37 -0
  226. package/dist/src/modules/v4/protocol/protocol.service.js +77 -0
  227. package/dist/src/modules/v4/reward/index.js +3 -0
  228. package/dist/src/modules/v4/reward/reward.controller.js +52 -0
  229. package/dist/src/modules/v4/reward/reward.model.js +104 -0
  230. package/dist/src/modules/v4/reward/reward.repository.js +237 -0
  231. package/dist/src/modules/v4/reward/reward.service.js +283 -0
  232. package/dist/src/modules/v4/reward/rewardConvertor.service.js +136 -0
  233. package/dist/src/modules/v4/router.js +57 -0
  234. package/dist/src/modules/v4/status/index.js +3 -0
  235. package/dist/src/modules/v4/status/status.controller.js +48 -0
  236. package/dist/src/modules/v4/status/status.model.js +24 -0
  237. package/dist/src/modules/v4/status/status.repository.js +88 -0
  238. package/dist/src/modules/v4/status/status.service.js +60 -0
  239. package/dist/src/modules/v4/token/index.js +3 -0
  240. package/dist/src/modules/v4/token/token.controller.js +32 -0
  241. package/dist/src/modules/v4/token/token.model.js +23 -0
  242. package/dist/src/modules/v4/token/token.repository.js +128 -0
  243. package/dist/src/modules/v4/token/token.service.js +268 -0
  244. package/dist/src/modules/v4/tvl/index.js +2 -0
  245. package/dist/src/modules/v4/tvl/tvl.controller.js +1 -0
  246. package/dist/src/modules/v4/tvl/tvl.model.js +1 -0
  247. package/dist/src/modules/v4/tvl/tvl.repository.js +1 -0
  248. package/dist/src/modules/v4/tvl/tvl.service.js +49 -0
  249. package/dist/src/modules/v4/uniswapV4/index.js +4 -0
  250. package/dist/src/modules/v4/uniswapV4/uniswapV4.controller.js +11 -0
  251. package/dist/src/modules/v4/uniswapV4/uniswapV4.model.js +17 -0
  252. package/dist/src/modules/v4/uniswapV4/uniswapV4.repository.js +2 -0
  253. package/dist/src/modules/v4/uniswapV4/uniswapV4.service.js +73 -0
  254. package/dist/src/modules/v4/user/index.js +3 -0
  255. package/dist/src/modules/v4/user/user.controller.js +69 -0
  256. package/dist/src/modules/v4/user/user.model.js +18 -0
  257. package/dist/src/modules/v4/user/user.repository.js +38 -0
  258. package/dist/src/modules/v4/user/user.service.js +50 -0
  259. package/dist/src/plugins/error-handling.plugin.js +28 -0
  260. package/dist/src/plugins/logger.plugin.js +22 -0
  261. package/dist/src/routes/v1/allowances.js +115 -0
  262. package/dist/src/routes/v1/balances.js +25 -0
  263. package/dist/src/routes/v1/prices.js +11 -0
  264. package/dist/src/routes/v1/tokens.js +17 -0
  265. package/dist/src/routes/v2/merkl.js +13 -0
  266. package/dist/src/routes/v3/ERC20Campaigns.js +63 -0
  267. package/dist/src/routes/v3/app.js +18 -0
  268. package/dist/src/routes/v3/blacklist.js +18 -0
  269. package/dist/src/routes/v3/campaign/delay.js +78 -0
  270. package/dist/src/routes/v3/campaignClaims.js +24 -0
  271. package/dist/src/routes/v3/campaignReport.js +22 -0
  272. package/dist/src/routes/v3/campaignUnclaimed.js +28 -0
  273. package/dist/src/routes/v3/campaigns.js +101 -0
  274. package/dist/src/routes/v3/campaignsForMainParameter.js +19 -0
  275. package/dist/src/routes/v3/campaignsInfo.js +54 -0
  276. package/dist/src/routes/v3/campaignsRewardsReport.js +47 -0
  277. package/dist/src/routes/v3/claims.js +45 -0
  278. package/dist/src/routes/v3/compoundV2.js +9 -0
  279. package/dist/src/routes/v3/createCampaign.js +66 -0
  280. package/dist/src/routes/v3/dolomite.js +9 -0
  281. package/dist/src/routes/v3/euler.js +9 -0
  282. package/dist/src/routes/v3/exports/campaigns.js +28 -0
  283. package/dist/src/routes/v3/fetch.js +27 -0
  284. package/dist/src/routes/v3/health.js +13 -0
  285. package/dist/src/routes/v3/lostyield.js +98 -0
  286. package/dist/src/routes/v3/merkl.js +119 -0
  287. package/dist/src/routes/v3/morphoMarkets.js +27 -0
  288. package/dist/src/routes/v3/morphoVaults.js +22 -0
  289. package/dist/src/routes/v3/multiChainPositions.js +69 -0
  290. package/dist/src/routes/v3/opportunity.js +63 -0
  291. package/dist/src/routes/v3/overview.js +73 -0
  292. package/dist/src/routes/v3/parse.js +23 -0
  293. package/dist/src/routes/v3/payload.js +40 -0
  294. package/dist/src/routes/v3/poolInfo.js +88 -0
  295. package/dist/src/routes/v3/positions.js +62 -0
  296. package/dist/src/routes/v3/radiant.js +26 -0
  297. package/dist/src/routes/v3/recipients.js +20 -0
  298. package/dist/src/routes/v3/rewards.js +33 -0
  299. package/dist/src/routes/v3/rewardsReport.js +51 -0
  300. package/dist/src/routes/v3/rootForTimestamp.js +47 -0
  301. package/dist/src/routes/v3/silo.js +20 -0
  302. package/dist/src/routes/v3/token.js +24 -0
  303. package/dist/src/routes/v3/tokenUnclaimed.js +24 -0
  304. package/dist/src/routes/v3/twt/participants.js +11 -0
  305. package/dist/src/routes/v3/updates.js +47 -0
  306. package/dist/src/routes/v3/userRewards.js +59 -0
  307. package/dist/src/types/index.js +6 -0
  308. package/dist/src/types/parameters/Action.js +11 -0
  309. package/dist/src/types/parameters/Chain.js +13 -0
  310. package/dist/src/types/parameters/ChainCampaignId.js +13 -0
  311. package/dist/src/types/parameters/MainParameter.js +19 -0
  312. package/dist/src/types/parameters/OpportunityId.js +14 -0
  313. package/dist/src/types/parameters/Timestamp.js +16 -0
  314. package/dist/src/types/parameters/Type.js +15 -0
  315. package/dist/src/types/parameters/index.js +17 -0
  316. package/dist/src/types/returnTypes.js +1 -0
  317. package/dist/src/types/utils.js +1 -0
  318. package/dist/src/utils/addString.js +6 -0
  319. package/dist/src/utils/bigintToString.js +20 -0
  320. package/dist/src/utils/crypto.js +4 -0
  321. package/dist/src/utils/decodeCalls.js +170 -0
  322. package/dist/src/utils/encodeCalls.js +240 -0
  323. package/dist/src/utils/error.js +90 -0
  324. package/dist/src/utils/execute.js +41 -0
  325. package/dist/src/utils/generateCardName.js +89 -0
  326. package/dist/src/utils/generic.js +117 -0
  327. package/dist/src/utils/hashArray.js +4 -0
  328. package/dist/src/utils/lastBlockBefore.js +78 -0
  329. package/dist/src/utils/logger.js +52 -0
  330. package/dist/src/utils/pricer.js +180 -0
  331. package/dist/src/utils/prices/chainlinkRead.js +8 -0
  332. package/dist/src/utils/prices/curveVirtualPrice.js +7 -0
  333. package/dist/src/utils/prices/getDQUICK.js +8 -0
  334. package/dist/src/utils/prices/priceFetcherFactory.js +29 -0
  335. package/dist/src/utils/prices/priceService.js +328 -0
  336. package/dist/src/utils/prices/services/coinGeckoService.js +53 -0
  337. package/dist/src/utils/prices/services/defillamaService.js +53 -0
  338. package/dist/src/utils/prices/services/dexScreenerService.js +62 -0
  339. package/dist/src/utils/prices/services/erc4626Service.js +30 -0
  340. package/dist/src/utils/prices/services/getERC4626.js +11 -0
  341. package/dist/src/utils/prices/services/indexCoopService.js +55 -0
  342. package/dist/src/utils/prices/services/priceFetcher.js +1 -0
  343. package/dist/src/utils/prices/uniV2Price.js +40 -0
  344. package/dist/src/utils/prisma.js +12 -0
  345. package/dist/src/utils/providers.js +30 -0
  346. package/dist/src/utils/queries/activeCampaigns.js +22 -0
  347. package/dist/src/utils/queries/allCampaigns.js +51 -0
  348. package/dist/src/utils/queries/campaignsForMainParameter.js +23 -0
  349. package/dist/src/utils/queries/claimsOverTime.js +111 -0
  350. package/dist/src/utils/queries/endingCampaigns.js +21 -0
  351. package/dist/src/utils/queries/futureCampaigns.js +19 -0
  352. package/dist/src/utils/queries/mainParameterCampaigns.js +11 -0
  353. package/dist/src/utils/queries/rewardsAmount.js +106 -0
  354. package/dist/src/utils/queries/unclaimed.js +81 -0
  355. package/dist/src/utils/rateLimit.js +13 -0
  356. package/dist/src/utils/stryke.js +4 -0
  357. package/dist/src/utils/throw.js +27 -0
  358. package/dist/src/utils/validation.js +20 -0
  359. package/dist/tsconfig.package.tsbuildinfo +1 -1
  360. package/package.json +2 -2
  361. package/dist/package.json +0 -91
@@ -0,0 +1,40 @@
1
+ import { BN2Number, Stable, UniswapV2PoolInterface } from "@sdk";
2
+ import { Contract } from "ethers";
3
+ import { multicalls, providers } from "../providers";
4
+ export async function getCurveV2Price(chainId, prices, pool, token) {
5
+ const abi = [
6
+ "function balances(uint256) external view returns(uint256)",
7
+ "function totalSupply() external view returns(uint256)",
8
+ "function token() external view returns(address)",
9
+ ];
10
+ const contract = new Contract(pool, abi, providers[chainId]);
11
+ const tokenContract = new Contract(token, abi, providers[chainId]);
12
+ return ((BN2Number(await contract.balances(0)) * prices["FRAX"] +
13
+ BN2Number(await contract.balances(1)) * prices[Stable.EUR]) /
14
+ BN2Number(await tokenContract.totalSupply()));
15
+ }
16
+ export async function getUniV2Price(chainId, priceToken0, priceToken1, poolAddress) {
17
+ const [, result] = await multicalls[chainId].callStatic.aggregate([
18
+ {
19
+ callData: UniswapV2PoolInterface.encodeFunctionData("getReserves"),
20
+ target: poolAddress,
21
+ },
22
+ {
23
+ callData: UniswapV2PoolInterface.encodeFunctionData("token0"),
24
+ target: poolAddress,
25
+ },
26
+ {
27
+ callData: UniswapV2PoolInterface.encodeFunctionData("token1"),
28
+ target: poolAddress,
29
+ },
30
+ {
31
+ callData: UniswapV2PoolInterface.encodeFunctionData("totalSupply"),
32
+ target: poolAddress,
33
+ },
34
+ ]);
35
+ const [reserve0, reserve1] = UniswapV2PoolInterface.decodeFunctionResult("getReserves", result[0]);
36
+ const _token0 = UniswapV2PoolInterface.decodeFunctionResult("token0", result[1])[0];
37
+ const _token1 = UniswapV2PoolInterface.decodeFunctionResult("token1", result[2])[0];
38
+ const totalSupply = UniswapV2PoolInterface.decodeFunctionResult("token1", result[3])[0];
39
+ return (BN2Number(reserve0) * priceToken0 + BN2Number(reserve1) * priceToken1) / BN2Number(totalSupply);
40
+ }
@@ -0,0 +1,12 @@
1
+ import { PrismaClient as ApiPrismaClient } from "../../database/api/.generated";
2
+ import { PrismaClient as EnginePrismaClient } from "../../database/engine/.generated";
3
+ export const apiDbClient = new ApiPrismaClient({
4
+ datasources: { db: { url: `${process.env.DATABASE_API_URL}&connection_limit=250&pool_timeout=15` } },
5
+ });
6
+ export const engineDbClient = new EnginePrismaClient({
7
+ datasources: {
8
+ db: {
9
+ url: `${process.env.DATABASE_ENGINE_URL}&connection_limit=20&pool_timeout=15`,
10
+ },
11
+ },
12
+ });
@@ -0,0 +1,30 @@
1
+ import { ChainId, MULTICALL_ADDRESS, Multicall__factory } from "@sdk";
2
+ import { providers as p } from "ethers";
3
+ export const providers = Object.keys(ChainId).reduce((prev, chainId) => {
4
+ const url = process.env?.[`PROVIDER_${chainId}`];
5
+ if (!!url)
6
+ prev[chainId] = new p.StaticJsonRpcProvider(url);
7
+ return prev;
8
+ }, {});
9
+ export const archiveProviders = Object.keys(ChainId).reduce((prev, chainId) => {
10
+ const url = !!process.env?.[`PROVIDER_ARCHIVE_${chainId}`]
11
+ ? process.env?.[`PROVIDER_ARCHIVE_${chainId}`]
12
+ : process.env?.[`PROVIDER_${chainId}`];
13
+ if (!!url)
14
+ prev[chainId] = new p.StaticJsonRpcProvider(url);
15
+ return prev;
16
+ }, {});
17
+ export const multicalls = Object.keys(ChainId).reduce((prev, chainId) => {
18
+ if (!!providers[chainId])
19
+ prev[chainId] = Multicall__factory.connect(MULTICALL_ADDRESS(chainId), providers[chainId]);
20
+ // else {
21
+ // if (Number.parseInt(chainId).toString() === chainId)
22
+ // log.warn(`No provider found for chain ${NETWORK_LABELS[chainId as unknown as ChainId]}`);
23
+ // }
24
+ return prev;
25
+ }, {});
26
+ export const archiveMulticalls = Object.keys(ChainId).reduce((prev, chainId) => {
27
+ if (!!archiveProviders[chainId])
28
+ prev[chainId] = Multicall__factory.connect("0xcA11bde05977b3631167028862bE2a173976CA11", archiveProviders[chainId]);
29
+ return prev;
30
+ }, {});
@@ -0,0 +1,22 @@
1
+ import { Prisma } from "../../../database/engine/.generated";
2
+ export const ACTIVE_CAMPAIGNS_FOR_CHAIN = (chainId, now) => Prisma.sql `
3
+ SELECT
4
+ *,
5
+ CAST("amount" as numeric) / (10^CAST("campaignParameters"->>'decimalsRewardToken' as numeric)) as "amountWithDecimals"
6
+ FROM "Campaigns"
7
+ WHERE
8
+ "chainId" = ${chainId} AND
9
+ "startTimestamp" <= ${now} AND
10
+ "endTimestamp" >= ${now} AND
11
+ "campaignType" != 0
12
+ `;
13
+ export const ACTIVE_CAMPAIGNS = (now) => Prisma.sql `
14
+ SELECT
15
+ *,
16
+ CAST("amount" as numeric) / (10^CAST("campaignParameters"->>'decimalsRewardToken' as numeric)) as "amountWithDecimals"
17
+ FROM "Campaigns"
18
+ WHERE
19
+ "startTimestamp" <= ${now} AND
20
+ "endTimestamp" >= ${now} AND
21
+ "campaignType" != 0
22
+ `;
@@ -0,0 +1,51 @@
1
+ import { Prisma } from "../../../database/engine/.generated";
2
+ export const ALL_CAMPAIGNS_FOR_CHAIN_AFTER = (chainId, after) => Prisma.sql `
3
+ SELECT
4
+ *
5
+ FROM "Campaigns"
6
+ WHERE
7
+ (("chainId" = ${chainId} AND "computeChainId" = 0) OR "computeChainId" = ${chainId}) AND
8
+ "campaignType" != 0 AND
9
+ "endTimestamp" >= ${after} AND
10
+ ("campaignParameters"->>'shouldIgnore' is null OR "campaignParameters"->>'shouldIgnore'='false')
11
+
12
+ `;
13
+ export const ALL_CAMPAIGNS_FOR_CHAIN_BEFORE = (chainId, before) => Prisma.sql `
14
+ SELECT
15
+ *
16
+ FROM "Campaigns"
17
+ WHERE
18
+ (("chainId" = ${chainId} AND "computeChainId" = 0) OR "computeChainId" = ${chainId}) AND
19
+ "campaignType" != 0 AND
20
+ "endTimestamp" < ${before} AND
21
+ ("campaignParameters"->>'shouldIgnore' is null OR "campaignParameters"->>'shouldIgnore'='false')
22
+ `;
23
+ export const ALL_CAMPAIGNS_FOR_CHAIN = (chainId) => Prisma.sql `
24
+ SELECT
25
+ *
26
+ FROM "Campaigns"
27
+ WHERE
28
+ (("chainId" = ${chainId} AND "computeChainId" = 0) OR "computeChainId" = ${chainId}) AND
29
+ "campaignType" != 0 AND
30
+ ("campaignParameters"->>'shouldIgnore' is null OR "campaignParameters"->>'shouldIgnore'='false')
31
+ `;
32
+ export const ALL_CAMPAIGNS = () => Prisma.sql `
33
+ SELECT
34
+ *
35
+ FROM "Campaigns"
36
+ WHERE
37
+ "campaignType" != 0 AND
38
+ ("campaignParameters"->>'shouldIgnore' is null OR "campaignParameters"->>'shouldIgnore'='false')
39
+ `;
40
+ export const ALL_CAMPAIGNS_FOR_CHAINS_AND_CREATOR_TAG = (chainIds, creatorTag) => Prisma.sql `
41
+ SELECT
42
+ "chainId", "campaignId"
43
+ FROM "Campaigns"
44
+ WHERE
45
+ "campaignType" != 0 AND
46
+ (("chainId" IN (${Prisma.join(chainIds)}) AND "computeChainId" = 0) OR "computeChainId" IN (${Prisma.join(chainIds)})) AND
47
+ creator IN (
48
+ SELECT address from "CampaignCreators" WHERE tags LIKE ${`%${creatorTag}%`}
49
+ ) AND
50
+ ("campaignParameters"->>'shouldIgnore' is null OR "campaignParameters"->>'shouldIgnore'='false')
51
+ `;
@@ -0,0 +1,23 @@
1
+ import { Prisma } from "../../../database/engine/.generated";
2
+ export const CAMPAIGNS_BY_MAIN_PARAMETER = (chainId, mainParameter) => Prisma.sql `
3
+ SELECT
4
+ campaigns."campaignId",
5
+ campaigns."campaignType",
6
+ campaigns."rewardToken",
7
+ tokens."symbol" as "rewardTokenSymbol",
8
+ CAST(campaigns."amount" as numeric) / (10^campaigns."decimalsRewardToken") as "amountDecimal",
9
+ campaigns."startTimestamp",
10
+ campaigns."endTimestamp"
11
+ FROM (
12
+ SELECT
13
+ "chainId", "campaignId", "campaignType", "rewardToken", "amount", "startTimestamp", "endTimestamp", CAST("campaignParameters"->>'decimalsRewardToken' as numeric) as "decimalsRewardToken"
14
+ FROM "Campaigns"
15
+ WHERE
16
+ "chainId" = ${chainId} AND
17
+ "campaignType" != 0 AND
18
+ LOWER("mainParameter") = LOWER(${mainParameter})
19
+ ORDER BY "endTimestamp" DESC
20
+ ) as campaigns
21
+ INNER JOIN "Tokens" as tokens
22
+ ON tokens."address"=campaigns."rewardToken" AND tokens."chainId"=campaigns."chainId"
23
+ `;
@@ -0,0 +1,111 @@
1
+ import { Prisma } from "../../../database/engine/.generated";
2
+ export const CLAIMS_OVER_TIME = (chainId, campaignId) => Prisma.sql `
3
+ SELECT timestamp, recipient, reason, claimed
4
+ FROM "ClaimsOverTime"
5
+ WHERE
6
+ "chainId"=${chainId} AND
7
+ "campaignId"=${campaignId}
8
+ ORDER BY timestamp ASC
9
+ `;
10
+ export const CLAIMS_OVER_TIME_GROUPED = (chainId, campaignId) => Prisma.sql `
11
+ SELECT timestamp, recipient, SUM(CAST(claimed as numeric)) as claimed
12
+ FROM "ClaimsOverTime"
13
+ WHERE
14
+ "chainId"=${chainId} AND
15
+ "campaignId"=${campaignId}
16
+ GROUP BY timestamp, recipient
17
+ ORDER BY timestamp ASC
18
+ `;
19
+ export const CLAIMS_OVER_TIME_V2 = (chainId, campaignId) => Prisma.sql `
20
+
21
+ SELECT cot.timestamp, cot.recipient, cot.reason, cot.claimed, COALESCE(cc.label, 'unknown') FROM (
22
+ SELECT *
23
+ FROM "ClaimsOverTime"
24
+ WHERE
25
+ "chainId"=${chainId} AND
26
+ "campaignId"=${campaignId}
27
+ ) as cot
28
+ LEFT JOIN (
29
+ SELECT "campaignId", "creator", "mainParameter"
30
+ FROM "Campaigns"
31
+ WHERE
32
+ "chainId"=${chainId} AND
33
+ "campaignId"=${campaignId}
34
+ ) as campaigns
35
+ ON cot."campaignId"=campaigns."campaignId"
36
+ LEFT JOIN
37
+ "CampaignCreators" as cc
38
+ ON campaigns.creator=cc.address
39
+ `;
40
+ export const CLAIMS_FOR_CREATOR_TAG = (chainIds, user, creatorTag) => Prisma.sql `
41
+ SELECT cc."chainId", cc.timestamp, cc.recipient, cc.reason, cc."rewardToken" as token, cc."campaignId", t.symbol, t.decimals, cc.claimed FROM (
42
+ SELECT "chainId", timestamp, recipient, reason, "campaignId", "rewardToken", CAST(claimed AS text) as claimed
43
+ FROM "ClaimsOverTime"
44
+ WHERE
45
+ "chainId" IN (${Prisma.join(chainIds)}) AND
46
+ "recipient"=${user} AND
47
+ "campaignId" IN (
48
+ SELECT
49
+ "campaignId"
50
+ FROM "Campaigns"
51
+ WHERE
52
+ "campaignType" != 0 AND
53
+ "chainId" IN (${Prisma.join(chainIds)}) AND
54
+ creator IN (
55
+ SELECT address from "CampaignCreators" WHERE tags LIKE ${`%${creatorTag}%`}
56
+ )
57
+ )
58
+ ) as cc
59
+ LEFT JOIN "Tokens" as t
60
+ ON cc."chainId"=t."chainId" AND cc."rewardToken"=t.address
61
+ ORDER BY cc.timestamp ASC
62
+ `;
63
+ export const CLAIMS_FOR_CREATOR_TAG_GROUPED = (chainIds, user, creatorTag) => Prisma.sql `
64
+ SELECT cc."chainId", cc.timestamp, cc.recipient, cc."campaignId", cc."rewardToken" as token, t.symbol, t.decimals, cc.claimed FROM (
65
+ SELECT "chainId", timestamp, recipient, "rewardToken", "campaignId", CAST(SUM(CAST(claimed AS numeric)) AS text) as claimed
66
+ FROM "ClaimsOverTime"
67
+ WHERE
68
+ "chainId" IN (${Prisma.join(chainIds)}) AND
69
+ "recipient"=${user} AND
70
+ "campaignId" IN (
71
+ SELECT
72
+ "campaignId"
73
+ FROM "Campaigns"
74
+ WHERE
75
+ "campaignType" != 0 AND
76
+ "chainId" IN (${Prisma.join(chainIds)}) AND
77
+ creator IN (
78
+ SELECT address from "CampaignCreators" WHERE tags LIKE ${`%${creatorTag}%`}
79
+ )
80
+ )
81
+ GROUP BY timestamp, recipient, "chainId", "rewardToken", "campaignId"
82
+ ) as cc
83
+ LEFT JOIN "Tokens" as t
84
+ ON cc."chainId"=t."chainId" AND cc."rewardToken"=t.address
85
+ ORDER BY cc.timestamp ASC
86
+ `;
87
+ export const CLAIMS_FOR_USER = (chainIds, user) => Prisma.sql `
88
+ SELECT cc."chainId", cc.timestamp, cc.recipient, cc.reason, cc."campaignId", cc."rewardToken" as token, t.symbol, t.decimals, cc.claimed FROM (
89
+ SELECT "chainId", timestamp, recipient, reason, "campaignId", "rewardToken", CAST(claimed AS text) as claimed
90
+ FROM "ClaimsOverTime"
91
+ WHERE
92
+ "chainId" IN (${Prisma.join(chainIds)}) AND
93
+ "recipient"=${user}
94
+ ) as cc
95
+ LEFT JOIN "Tokens" as t
96
+ ON cc."chainId"=t."chainId" AND cc."rewardToken"=t.address
97
+ ORDER BY cc.timestamp ASC
98
+ `;
99
+ export const CLAIMS_FOR_USER_GROUPED = (chainIds, user) => Prisma.sql `
100
+ SELECT cc."chainId", cc.timestamp, cc.recipient, cc."campaignId", cc."rewardToken" as token, t.symbol, t.decimals, cc.claimed FROM (
101
+ SELECT "chainId", timestamp, recipient, "campaignId", "rewardToken", CAST(SUM(CAST(claimed as numeric)) as text) as claimed
102
+ FROM "ClaimsOverTime"
103
+ WHERE
104
+ "chainId" IN (${Prisma.join(chainIds)}) AND
105
+ "recipient"=${user}
106
+ GROUP BY timestamp, recipient, "chainId", "rewardToken", "campaignId"
107
+ ) as cc
108
+ LEFT JOIN "Tokens" as t
109
+ ON cc."chainId"=t."chainId" AND cc."rewardToken"=t.address
110
+ ORDER BY cc.timestamp ASC
111
+ `;
@@ -0,0 +1,21 @@
1
+ import { Prisma } from "../../../database/engine/.generated";
2
+ export const ENDING_CAMPAIGNS = (maxEndDate, minStartDate, minEndDate) => Prisma.sql `
3
+ SELECT c."chainId", c.creator, t.symbol, CAST(c.amount as numeric) / 10^t.decimals as amount, c."endTimestamp" FROM (
4
+ SELECT * FROM "Campaigns" WHERE "endTimestamp"<=${maxEndDate}
5
+ AND "startTimestamp">=${minStartDate} AND "endTimestamp">=${minEndDate}
6
+ ) as c
7
+ INNER JOIN "Tokens" as t
8
+ ON c."chainId"=t."chainId" AND c."rewardToken"=t.address
9
+ `;
10
+ export const NON_RENEWED_CAMPAIGNS = (maxEndDate, minStartDate, minEndDate) => Prisma.sql `
11
+ SELECT c."chainId", c.creator, t.symbol, CAST(c.amount as numeric) / 10^t.decimals as amount, c."endTimestamp", c."mainParameter", cf."campaignId" FROM (
12
+ SELECT * FROM "Campaigns" WHERE "endTimestamp"<=${maxEndDate}
13
+ AND "startTimestamp">=${minStartDate} AND "endTimestamp">=${minEndDate}
14
+ ) as c
15
+ LEFT JOIN (
16
+ SELECT DISTINCT ON (c."chainId", c."mainParameter", c."rewardToken") * FROM "Campaigns" as c WHERE c."endTimestamp">${maxEndDate}
17
+ ) as cf
18
+ ON c."chainId"=cf."chainId" AND c."mainParameter"=cf."mainParameter" AND c."rewardToken"=cf."rewardToken"
19
+ INNER JOIN "Tokens" as t
20
+ ON c."chainId"=t."chainId" AND c."rewardToken"=t.address
21
+ `;
@@ -0,0 +1,19 @@
1
+ import { Prisma } from "../../../database/engine/.generated";
2
+ export const FUTURE_CAMPAIGNS_FOR_CHAIN = (chainId, now) => Prisma.sql `
3
+ SELECT
4
+ *
5
+ FROM "Campaigns"
6
+ WHERE
7
+ "chainId" = ${chainId} AND
8
+ "startTimestamp" >= ${now} AND
9
+ "campaignType" != 0
10
+
11
+ `;
12
+ export const FUTURE_CAMPAIGNS = (now) => Prisma.sql `
13
+ SELECT
14
+ *
15
+ FROM "Campaigns"
16
+ WHERE
17
+ "startTimestamp" >= ${now} AND
18
+ "campaignType" != 0
19
+ `;
@@ -0,0 +1,11 @@
1
+ import { Prisma } from "../../../database/engine/.generated";
2
+ export const CAMPAIGNS_FOR_MAIN_PARAMETER = (chainId, mainParameter) => Prisma.sql `
3
+ SELECT
4
+ "campaignId"
5
+ FROM
6
+ "Campaigns"
7
+ WHERE
8
+ "chainId" = ${chainId} AND
9
+ "mainParameter" = ${mainParameter} AND
10
+ "campaignType" != 0
11
+ `;
@@ -0,0 +1,106 @@
1
+ import { Prisma } from "../../../database/engine/.generated";
2
+ export const REWARDS_DELTA = (chainId, campaignIds, fromRoot, toRoot) => Prisma.sql `
3
+ SELECT * FROM (
4
+ SELECT
5
+ leaves_state_to.recipient,
6
+ leaves_state_to.reason,
7
+ leaves_state_to."rewardToken",
8
+ CAST(COALESCE(leaves_state_to.reward_sum - COALESCE(leaves_state_from.reward_sum, 0), 0) as text) as amount
9
+ FROM
10
+ (
11
+ SELECT
12
+ "chainId",
13
+ recipient,
14
+ reason,
15
+ "rewardToken",
16
+ SUM(CAST("amount" as numeric)) as reward_sum
17
+ FROM "Leaves"
18
+ WHERE
19
+ "chainId" = ${chainId} AND
20
+ root = ${toRoot} AND
21
+ "campaignId" IN (${Prisma.join(campaignIds)})
22
+
23
+ GROUP BY recipient, reason, "rewardToken", "chainId"
24
+ ) as leaves_state_to
25
+ LEFT JOIN
26
+ (
27
+ SELECT
28
+ "chainId",
29
+ recipient,
30
+ reason,
31
+ "rewardToken",
32
+ SUM(CAST("amount" as numeric)) as reward_sum
33
+ FROM "Leaves"
34
+ WHERE
35
+ "chainId" = ${chainId} AND
36
+ root = ${fromRoot} AND
37
+ "campaignId" IN (${Prisma.join(campaignIds)})
38
+ GROUP BY recipient, reason, "rewardToken", "chainId"
39
+ ) as leaves_state_from
40
+ ON
41
+ leaves_state_to."chainId"=leaves_state_from."chainId" AND
42
+ leaves_state_to.reason=leaves_state_from.reason AND
43
+ leaves_state_to.recipient=leaves_state_from.recipient AND
44
+ leaves_state_to."rewardToken"=leaves_state_from."rewardToken"
45
+ ) as rewards_delta
46
+ WHERE amount != '0'
47
+ `;
48
+ export const CAMPAIGN_REWARDS_DELTA = (chainId, campaignId, fromRoot, toRoot) => Prisma.sql `
49
+ SELECT * FROM (
50
+ SELECT
51
+ leaves_state_to.recipient,
52
+ leaves_state_to.reason,
53
+ leaves_state_to."rewardToken",
54
+ CAST(COALESCE(leaves_state_to.reward_sum - COALESCE(leaves_state_from.reward_sum, 0), 0) as text) as amount
55
+ FROM
56
+ (
57
+ SELECT
58
+ "chainId",
59
+ recipient,
60
+ reason,
61
+ "rewardToken",
62
+ SUM(CAST("amount" as numeric)) as reward_sum
63
+ FROM "Leaves"
64
+ WHERE
65
+ "chainId" = ${chainId} AND
66
+ root = ${toRoot} AND
67
+ "campaignId"=${campaignId}
68
+
69
+ GROUP BY recipient, reason, "rewardToken", "chainId"
70
+ ) as leaves_state_to
71
+ LEFT JOIN
72
+ (
73
+ SELECT
74
+ "chainId",
75
+ recipient,
76
+ reason,
77
+ "rewardToken",
78
+ SUM(CAST("amount" as numeric)) as reward_sum
79
+ FROM "Leaves"
80
+ WHERE
81
+ "chainId" = ${chainId} AND
82
+ root = ${fromRoot} AND
83
+ "campaignId"=${campaignId}
84
+ GROUP BY recipient, reason, "rewardToken", "chainId"
85
+ ) as leaves_state_from
86
+ ON
87
+ leaves_state_to."chainId"=leaves_state_from."chainId" AND
88
+ leaves_state_to.reason=leaves_state_from.reason AND
89
+ leaves_state_to.recipient=leaves_state_from.recipient AND
90
+ leaves_state_to."rewardToken"=leaves_state_from."rewardToken"
91
+ ) as rewards_delta
92
+ WHERE amount != '0'
93
+ `;
94
+ export const LATEST_CAMPAIGNS_REWARDS = (chainId, root, campaignIds) => Prisma.sql `
95
+ SELECT
96
+ recipient,
97
+ reason,
98
+ "rewardToken",
99
+ CAST(SUM(CAST("amount" as numeric)) as text) as amount
100
+ FROM "Leaves"
101
+ WHERE
102
+ "chainId" = ${chainId} AND
103
+ root = ${root} AND
104
+ "campaignId" IN (${Prisma.join(campaignIds)})
105
+ GROUP BY recipient, reason, "rewardToken"
106
+ `;
@@ -0,0 +1,81 @@
1
+ import { Prisma } from "../../../database/engine/.generated";
2
+ export const UNCLAIMED_BEFORE = (timestamp) => Prisma.sql `
3
+ SELECT cf."chainId", cf."rewardToken", t.symbol, cf.unclaimed / 10^t.decimals as unclaimed
4
+ FROM (
5
+ SELECT c."chainId", c."rewardToken", SUM(CAST(c.amount as numeric) - CAST(COALESCE(cl.claimed, '0') as numeric)) as unclaimed
6
+ FROM (
7
+ SELECT * FROM "Campaigns" WHERE "endTimestamp"<${timestamp}
8
+ ) as c
9
+ LEFT JOIN
10
+ (
11
+ SELECT "chainId", "campaignId", SUM(CAST(claimed as numeric)) as claimed
12
+ FROM "Claims"
13
+ GROUP BY "chainId", "campaignId"
14
+ ) as cl
15
+ ON cl."campaignId"=c."campaignId" AND cl."chainId"=c."chainId"
16
+ GROUP BY "rewardToken", c."chainId"
17
+ ) as cf
18
+ LEFT JOIN "Tokens" as t
19
+ ON cf."rewardToken"=t.address AND cf."chainId"=t."chainId"
20
+ `;
21
+ export const UNCLAIMED_BY_CAMPAIGN = (currentRoot, chainId, campaignId) => Prisma.sql `
22
+ SELECT l.recipient, l.total_amount - COALESCE(cl.claimed, 0) as unclaimed
23
+ FROM (
24
+ SELECT "recipient", SUM(CAST(amount as numeric)) as total_amount FROM "Leaves"
25
+ WHERE
26
+ root=${currentRoot} AND
27
+ "chainId"=${chainId} AND
28
+ "campaignId"=${campaignId}
29
+ GROUP BY "recipient"
30
+ ) as l
31
+ LEFT JOIN
32
+ (
33
+ SELECT "recipient", SUM(CAST(claimed as numeric)) as claimed
34
+ FROM "Claims"
35
+ WHERE
36
+ "chainId"=${chainId} AND
37
+ "campaignId"=${campaignId}
38
+ GROUP BY recipient
39
+ ) as cl
40
+ ON l."recipient"=cl."recipient"
41
+ `;
42
+ export const UNCLAIMED_FOR_CAMPAIGNS = (chainId, campaignIds) => Prisma.sql `
43
+ SELECT c."campaignId", CAST(c.total_amount - COALESCE(cl.claimed, 0) as text) as unclaimed
44
+ FROM (
45
+ SELECT "campaignId", CAST(amount as numeric) as total_amount FROM "Campaigns"
46
+ WHERE
47
+ "chainId"=${chainId} AND
48
+ "campaignId" IN (${Prisma.join(campaignIds)})
49
+ ) as c
50
+ LEFT JOIN
51
+ (
52
+ SELECT "campaignId", SUM(CAST(claimed as numeric)) as claimed
53
+ FROM "Claims"
54
+ WHERE
55
+ "chainId"=${chainId} AND
56
+ "campaignId" IN (${Prisma.join(campaignIds)})
57
+ GROUP BY "campaignId"
58
+ ) as cl
59
+ ON c."campaignId"=cl."campaignId"
60
+ `;
61
+ export const UNCLAIMED_BY_TOKEN = (currentRoot, chainId, rewardToken) => Prisma.sql `
62
+ SELECT l.recipient, l.total_amount - COALESCE(cl.claimed, 0) as unclaimed
63
+ FROM (
64
+ SELECT "recipient", SUM(CAST(amount as numeric)) as total_amount FROM "Leaves"
65
+ WHERE
66
+ root=${currentRoot} AND
67
+ "chainId"=${chainId} AND
68
+ "rewardToken"=${rewardToken}
69
+ GROUP BY "recipient"
70
+ ) as l
71
+ LEFT JOIN
72
+ (
73
+ SELECT "recipient", SUM(CAST(claimed as numeric)) as claimed
74
+ FROM "Claims"
75
+ WHERE
76
+ "chainId"=${chainId} AND
77
+ "rewardToken"=${rewardToken}
78
+ GROUP BY recipient
79
+ ) as cl
80
+ ON l."recipient"=cl."recipient"
81
+ `;
@@ -0,0 +1,13 @@
1
+ import { rateLimit } from "elysia-rate-limit";
2
+ import { app } from "..";
3
+ //returns ip from headers if server is null to make elysia-rate-limit logs stfu
4
+ const generator = req => {
5
+ return (app?.server?.requestIP?.(req)?.address ?? req.headers.get("X-Forwarded-For")?.split(",")?.[0]);
6
+ };
7
+ //use very permissive rates in local
8
+ const rate = (duration, max) => rateLimit(Bun.env.NODE_ENV !== "production" ? { duration: 1, max: 100 } : { duration, max });
9
+ export default {
10
+ permissive: rate(1000, 18),
11
+ moderate: rate(1000, 9),
12
+ strict: rate(1000, 3),
13
+ };
@@ -0,0 +1,4 @@
1
+ import { AMM } from "@sdk";
2
+ export function isStrykeCampaign(amm) {
3
+ return [AMM.Stryke, AMM.StrykePCS, AMM.StrykeSushi].includes(amm);
4
+ }
@@ -0,0 +1,27 @@
1
+ import { isSupportedChain } from "@sdk";
2
+ import { utils } from "ethers";
3
+ import { InvalidParameter, UnsupportedNetwork } from "./error";
4
+ export const throwOnInvalidRequiredAddress = (address) => {
5
+ try {
6
+ if (!address)
7
+ throw new InvalidParameter("Address is required");
8
+ return utils.getAddress(address?.toLowerCase());
9
+ }
10
+ catch (_) {
11
+ throw new InvalidParameter(`Address ${address} is invalid`);
12
+ }
13
+ };
14
+ export const throwOnInvalidAddress = (address) => {
15
+ try {
16
+ if (!address)
17
+ return;
18
+ return utils.getAddress(address?.toLowerCase());
19
+ }
20
+ catch (_) {
21
+ throw new InvalidParameter(`Address ${address} is invalid`);
22
+ }
23
+ };
24
+ export const throwOnUnsupportedChainId = (chainId) => {
25
+ if (chainId && !isSupportedChain(chainId, "merkl"))
26
+ throw new UnsupportedNetwork(chainId);
27
+ };
@@ -0,0 +1,20 @@
1
+ import chalk from "chalk";
2
+ export const soft = (p) => chalk.gray(p);
3
+ export const bold = (p) => chalk.bold.yellow(p);
4
+ export const err = (p) => chalk.red(p);
5
+ export function logValidationErrors(errors) {
6
+ if (errors.length) {
7
+ for (const error of errors.splice(0, 5)) {
8
+ const errorPath = [
9
+ error.path
10
+ .split("/")
11
+ .flatMap((path, index, all) => index === all.length - 1 ? [bold(path), `(${error.value})`] : [soft(path), soft(" -> ")])
12
+ .join(""),
13
+ ].join("");
14
+ console.log(errorPath);
15
+ console.error(chalk.gray(" ->"), err(error.message), "\n");
16
+ }
17
+ return true;
18
+ }
19
+ return errors.length !== 0;
20
+ }