@merkl/api 0.10.129 → 0.10.130

Sign up to get free protection for your applications and to get access to all the features.
Files changed (402) 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/node_modules/@elysiajs/eden/eden/LICENSE +7 -0
  25. package/dist/node_modules/@elysiajs/eden/eden/README.md +46 -0
  26. package/dist/node_modules/@elysiajs/eden/eden/bunfig.toml +2 -0
  27. package/dist/node_modules/@elysiajs/eden/eden/dist/chunk-2IHGLN7W.mjs +1 -0
  28. package/dist/node_modules/@elysiajs/eden/eden/dist/chunk-7WO4HTSU.mjs +1 -0
  29. package/dist/node_modules/@elysiajs/eden/eden/dist/chunk-XYW4OUFN.mjs +1 -0
  30. package/dist/node_modules/@elysiajs/eden/eden/dist/chunk-YAG46HFR.mjs +1 -0
  31. package/dist/node_modules/@elysiajs/eden/eden/dist/errors.d.ts +5 -0
  32. package/dist/node_modules/@elysiajs/eden/eden/dist/fetch/index.d.ts +4 -0
  33. package/dist/node_modules/@elysiajs/eden/eden/dist/fetch/types.d.ts +44 -0
  34. package/dist/node_modules/@elysiajs/eden/eden/dist/fetch.d.mts +48 -0
  35. package/dist/node_modules/@elysiajs/eden/eden/dist/fetch.d.ts +48 -0
  36. package/dist/node_modules/@elysiajs/eden/eden/dist/fetch.global.js +1 -0
  37. package/dist/node_modules/@elysiajs/eden/eden/dist/fetch.js +1 -0
  38. package/dist/node_modules/@elysiajs/eden/eden/dist/fetch.mjs +1 -0
  39. package/dist/node_modules/@elysiajs/eden/eden/dist/index.d.mts +5 -0
  40. package/dist/node_modules/@elysiajs/eden/eden/dist/index.d.ts +5 -0
  41. package/dist/node_modules/@elysiajs/eden/eden/dist/index.global.js +1 -0
  42. package/dist/node_modules/@elysiajs/eden/eden/dist/index.js +1 -0
  43. package/dist/node_modules/@elysiajs/eden/eden/dist/index.mjs +1 -0
  44. package/dist/node_modules/@elysiajs/eden/eden/dist/treaty/index.d.ts +17 -0
  45. package/dist/node_modules/@elysiajs/eden/eden/dist/treaty/types.d.ts +99 -0
  46. package/dist/node_modules/@elysiajs/eden/eden/dist/treaty/utils.d.ts +1 -0
  47. package/dist/node_modules/@elysiajs/eden/eden/dist/treaty.d.mts +114 -0
  48. package/dist/node_modules/@elysiajs/eden/eden/dist/treaty.d.ts +114 -0
  49. package/dist/node_modules/@elysiajs/eden/eden/dist/treaty.global.js +1 -0
  50. package/dist/node_modules/@elysiajs/eden/eden/dist/treaty.js +1 -0
  51. package/dist/node_modules/@elysiajs/eden/eden/dist/treaty.mjs +1 -0
  52. package/dist/node_modules/@elysiajs/eden/eden/dist/treaty2/index.d.ts +5 -0
  53. package/dist/node_modules/@elysiajs/eden/eden/dist/treaty2/types.d.ts +86 -0
  54. package/dist/node_modules/@elysiajs/eden/eden/dist/treaty2/ws.d.ts +14 -0
  55. package/dist/node_modules/@elysiajs/eden/eden/dist/treaty2.d.mts +103 -0
  56. package/dist/node_modules/@elysiajs/eden/eden/dist/treaty2.d.ts +103 -0
  57. package/dist/node_modules/@elysiajs/eden/eden/dist/treaty2.global.js +1 -0
  58. package/dist/node_modules/@elysiajs/eden/eden/dist/treaty2.js +1 -0
  59. package/dist/node_modules/@elysiajs/eden/eden/dist/treaty2.mjs +1 -0
  60. package/dist/node_modules/@elysiajs/eden/eden/dist/types-C41kuZ-K.d.mts +44 -0
  61. package/dist/node_modules/@elysiajs/eden/eden/dist/types-C41kuZ-K.d.ts +44 -0
  62. package/dist/node_modules/@elysiajs/eden/eden/dist/types.d.ts +39 -0
  63. package/dist/node_modules/@elysiajs/eden/eden/dist/utils/parsingUtils.d.ts +6 -0
  64. package/dist/node_modules/@elysiajs/eden/eden/package.json +85 -0
  65. package/dist/package.json +2 -2
  66. package/dist/src/backgroundJobs/index.js +44 -0
  67. package/dist/src/backgroundJobs/jobs/campaignsCacheUpdater.js +160 -0
  68. package/dist/src/backgroundJobs/jobs/health.js +15 -0
  69. package/dist/src/backgroundJobs/jobs/opportunityUpdater.js +63 -0
  70. package/dist/src/backgroundJobs/jobs/priceUpdater.js +16 -0
  71. package/dist/src/backgroundJobs/jobs/sync.js +33 -0
  72. package/dist/src/cache/declaration.js +146 -0
  73. package/dist/src/cache/index.js +152 -0
  74. package/dist/src/cache/redis.js +49 -0
  75. package/dist/src/constants.js +119 -0
  76. package/dist/src/entities/campaign.js +134 -0
  77. package/dist/src/entities/opportunity.js +549 -0
  78. package/dist/src/errors/BadRequest.error.js +7 -0
  79. package/dist/src/errors/Conflict.error.js +7 -0
  80. package/dist/src/errors/HttpError.js +11 -0
  81. package/dist/src/errors/NotFound.error.js +7 -0
  82. package/dist/src/errors/Opportunity.error.js +11 -0
  83. package/dist/src/errors/Unauthorized.error.js +7 -0
  84. package/dist/src/errors/index.js +5 -0
  85. package/dist/src/guards/BackOffice.guard.js +10 -0
  86. package/dist/src/guards/Engine.guard.js +10 -0
  87. package/dist/src/guards/TokenAuth.guard.js +10 -0
  88. package/dist/src/hooks/checkQueryAddressValidity.js +7 -0
  89. package/dist/src/hooks/checkQueryChainIdValidity.js +7 -0
  90. package/dist/src/index.js +79 -0
  91. package/dist/src/internal/controllers/endingCampaigns.js +41 -0
  92. package/dist/src/internal/controllers/unclaimed.js +36 -0
  93. package/dist/src/internal/index.js +30 -0
  94. package/dist/src/libs/campaigns/campaignTypes/AjnaDynamicData.js +111 -0
  95. package/dist/src/libs/campaigns/campaignTypes/BadgerDynamicData.js +93 -0
  96. package/dist/src/libs/campaigns/campaignTypes/CLAMMDynamicData.js +942 -0
  97. package/dist/src/libs/campaigns/campaignTypes/CompoundDynamicData.js +90 -0
  98. package/dist/src/libs/campaigns/campaignTypes/DolomiteDynamicData.js +60 -0
  99. package/dist/src/libs/campaigns/campaignTypes/ERC20DynamicData.js +162 -0
  100. package/dist/src/libs/campaigns/campaignTypes/ERC20DynamicDataRefacto.js +159 -0
  101. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/helpers/eulerVaultNames.js +13 -0
  102. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/helpers/factoryFinder.js +29 -0
  103. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/helpers/getBlacklistedSupply.js +22 -0
  104. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/helpers/metamorphoTvl.js +35 -0
  105. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/helpers/spliceTVL.js +21 -0
  106. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/helpers/tokenType.js +106 -0
  107. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/AaveProcessor.js +26 -0
  108. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/AssetProcessor.js +47 -0
  109. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/AuraProcessor.js +103 -0
  110. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/BalancerGaugeProcessor.js +83 -0
  111. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/BalancerPoolProcessor.js +99 -0
  112. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/BeefyProcessor.js +51 -0
  113. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/CompoundProcessor.js +36 -0
  114. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/EnzymeProcessor.js +51 -0
  115. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/EulerBorrowProcessor.js +46 -0
  116. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/EulerLendProcessor.js +47 -0
  117. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/FluidProcessor.js +36 -0
  118. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/FraxProcessor.js +41 -0
  119. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/GearboxProcessor.js +44 -0
  120. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/GenericProcessor.js +239 -0
  121. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/MetamorphoProcessor.js +43 -0
  122. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/PendleProcessor.js +31 -0
  123. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/RadiantProcessor.js +58 -0
  124. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/RfxProcessor.js +64 -0
  125. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/SpliceProcessor.js +35 -0
  126. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/SturdySiloProcessor.js +37 -0
  127. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/TemplateProcessor.js +40 -0
  128. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/TorosProcessor.js +33 -0
  129. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/UniswapProcessor.js +48 -0
  130. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/WoofiProcessor.js +40 -0
  131. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/curveProcessor.js +68 -0
  132. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/processor/processorMapping.js +77 -0
  133. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/subtypesPrices.js +583 -0
  134. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/subtypesPricesRefactoFinal.js +24 -0
  135. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/subtypesRound1.js +1209 -0
  136. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/subtypesRound1RefactoFinal.js +194 -0
  137. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/subtypesRound2.js +645 -0
  138. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/subtypesRound2RefactoFinal.js +22 -0
  139. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/subtypesRound3.js +392 -0
  140. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/subtypesRound3RefactoFinal.js +22 -0
  141. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/subtypesRound4.js +323 -0
  142. package/dist/src/libs/campaigns/campaignTypes/ERC20SubTypes/subtypesRound4RefactoFinal.js +22 -0
  143. package/dist/src/libs/campaigns/campaignTypes/ERC20_SNAPSHOTDynamicData.js +38 -0
  144. package/dist/src/libs/campaigns/campaignTypes/EulerDynamicData.js +165 -0
  145. package/dist/src/libs/campaigns/campaignTypes/JSON_AIRDROPDynamicData.js +19 -0
  146. package/dist/src/libs/campaigns/campaignTypes/MORPHODynamicData.js +120 -0
  147. package/dist/src/libs/campaigns/campaignTypes/RadiantDynamicData.js +112 -0
  148. package/dist/src/libs/campaigns/campaignTypes/SILODynamicData.js +113 -0
  149. package/dist/src/libs/campaigns/campaignsDynamicData.js +83 -0
  150. package/dist/src/libs/campaigns/campaignsDynamicDataRefacto.js +78 -0
  151. package/dist/src/libs/campaigns/getCampaigns.js +18 -0
  152. package/dist/src/libs/campaigns/utils/fetchA51Strategies.js +44 -0
  153. package/dist/src/libs/campaigns/utils/fetchClamInfo.js +27 -0
  154. package/dist/src/libs/campaigns/utils/fetchLogs.js +91 -0
  155. package/dist/src/libs/campaigns/utils/getCompV2ForksVaults.js +122 -0
  156. package/dist/src/libs/campaigns/utils/getContractCreationBlock.js +44 -0
  157. package/dist/src/libs/campaigns/utils/getDolomiteMarkets.js +50 -0
  158. package/dist/src/libs/campaigns/utils/getEulerV2Vaults.js +87 -0
  159. package/dist/src/libs/campaigns/utils/getLastEligibilityRatio.js +56 -0
  160. package/dist/src/libs/computeFee.js +34 -0
  161. package/dist/src/libs/custom/twtParticipants.js +54 -0
  162. package/dist/src/libs/deprecated-merklv3/index.js +184 -0
  163. package/dist/src/libs/getTokensList.js +37 -0
  164. package/dist/src/libs/merklChainData.js +129 -0
  165. package/dist/src/libs/parse/marketsWithCache.js +8 -0
  166. package/dist/src/libs/positions/ajna/index.js +107 -0
  167. package/dist/src/libs/positions/badger/index.js +79 -0
  168. package/dist/src/libs/positions/clamm/index.js +419 -0
  169. package/dist/src/libs/positions/clamm/thegraph/fetchAlmPositions.js +35 -0
  170. package/dist/src/libs/positions/clamm/thegraph/fetchAmmPositions.js +35 -0
  171. package/dist/src/libs/positions/clamm/thegraph/fetchFarmedPositions.js +44 -0
  172. package/dist/src/libs/positions/clamm/thegraph/index.js +162 -0
  173. package/dist/src/libs/positions/compound/index.js +93 -0
  174. package/dist/src/libs/positions/dolomite/index.js +49 -0
  175. package/dist/src/libs/positions/erc20/index.js +55 -0
  176. package/dist/src/libs/positions/euler/index.js +57 -0
  177. package/dist/src/libs/positions/index.js +48 -0
  178. package/dist/src/libs/positions/morpho/index.js +177 -0
  179. package/dist/src/libs/positions/prepareFetch.js +339 -0
  180. package/dist/src/libs/positions/silo/index.js +67 -0
  181. package/dist/src/libs/positions/types.js +1 -0
  182. package/dist/src/libs/reports/campaignReport.js +37 -0
  183. package/dist/src/libs/reports/mainParameterRewards.js +48 -0
  184. package/dist/src/libs/rewards/userRewards.js +154 -0
  185. package/dist/src/libs/staticCampaigns.js +10 -0
  186. package/dist/src/libs/tokens/balances.js +126 -0
  187. package/dist/src/libs/tokens/tokenInfo.js +22 -0
  188. package/dist/src/modules/v4/accounting/accounting.controller.js +66 -0
  189. package/dist/src/modules/v4/accounting/accounting.model.js +32 -0
  190. package/dist/src/modules/v4/accounting/accounting.repository.js +100 -0
  191. package/dist/src/modules/v4/accounting/accounting.service.js +78 -0
  192. package/dist/src/modules/v4/accounting/index.js +3 -0
  193. package/dist/src/modules/v4/apr/apr.controller.js +1 -0
  194. package/dist/src/modules/v4/apr/apr.model.js +1 -0
  195. package/dist/src/modules/v4/apr/apr.repository.js +1 -0
  196. package/dist/src/modules/v4/apr/apr.service.js +40 -0
  197. package/dist/src/modules/v4/apr/index.js +2 -0
  198. package/dist/src/modules/v4/blacklist/blacklist.controller.js +45 -0
  199. package/dist/src/modules/v4/blacklist/blacklist.model.js +13 -0
  200. package/dist/src/modules/v4/blacklist/blacklist.repository.js +56 -0
  201. package/dist/src/modules/v4/blacklist/blacklist.service.js +24 -0
  202. package/dist/src/modules/v4/blacklist/index.js +3 -0
  203. package/dist/src/modules/v4/cache/cache.model.js +14 -0
  204. package/dist/src/modules/v4/cache/cache.repository.js +10 -0
  205. package/dist/src/modules/v4/cache/cache.service.js +44 -0
  206. package/dist/src/modules/v4/cache/index.js +1 -0
  207. package/dist/src/modules/v4/campaign/campaign.controller.js +56 -0
  208. package/dist/src/modules/v4/campaign/campaign.model.js +54 -0
  209. package/dist/src/modules/v4/campaign/campaign.repository.js +346 -0
  210. package/dist/src/modules/v4/campaign/campaign.service.js +203 -0
  211. package/dist/src/modules/v4/campaign/index.js +3 -0
  212. package/dist/src/modules/v4/chain/chain.controller.js +40 -0
  213. package/dist/src/modules/v4/chain/chain.model.js +17 -0
  214. package/dist/src/modules/v4/chain/chain.repository.js +64 -0
  215. package/dist/src/modules/v4/chain/chain.service.js +42 -0
  216. package/dist/src/modules/v4/chain/index.js +3 -0
  217. package/dist/src/modules/v4/dynamicData/dynamicData.controller.js +19 -0
  218. package/dist/src/modules/v4/dynamicData/dynamicData.model.js +6 -0
  219. package/dist/src/modules/v4/dynamicData/dynamicData.repository.js +1 -0
  220. package/dist/src/modules/v4/dynamicData/dynamicData.service.js +49 -0
  221. package/dist/src/modules/v4/dynamicData/index.js +3 -0
  222. package/dist/src/modules/v4/enso/enso.model.js +108 -0
  223. package/dist/src/modules/v4/enso/enso.service.js +46 -0
  224. package/dist/src/modules/v4/explorer/explorer.model.js +2 -0
  225. package/dist/src/modules/v4/explorer/explorer.repository.js +23 -0
  226. package/dist/src/modules/v4/explorer/explorer.service.js +24 -0
  227. package/dist/src/modules/v4/explorer/index.js +1 -0
  228. package/dist/src/modules/v4/index.js +4 -0
  229. package/dist/src/modules/v4/merklRoot/index.js +3 -0
  230. package/dist/src/modules/v4/merklRoot/merklRoot.controller.js +19 -0
  231. package/dist/src/modules/v4/merklRoot/merklRoot.model.js +6 -0
  232. package/dist/src/modules/v4/merklRoot/merklRoot.repository.js +31 -0
  233. package/dist/src/modules/v4/merklRoot/merklRoot.service.js +38 -0
  234. package/dist/src/modules/v4/opportunity/index.js +3 -0
  235. package/dist/src/modules/v4/opportunity/opportunity.controller.js +69 -0
  236. package/dist/src/modules/v4/opportunity/opportunity.model.js +36 -0
  237. package/dist/src/modules/v4/opportunity/opportunity.repository.d.ts +14 -0
  238. package/dist/src/modules/v4/opportunity/opportunity.repository.js +217 -0
  239. package/dist/src/modules/v4/opportunity/opportunity.service.d.ts +0 -15
  240. package/dist/src/modules/v4/opportunity/opportunity.service.js +180 -0
  241. package/dist/src/modules/v4/opportunity/subservices/getAjnaMetadata.service.js +50 -0
  242. package/dist/src/modules/v4/opportunity/subservices/getBadgerMetadata.service.js +23 -0
  243. package/dist/src/modules/v4/opportunity/subservices/getClammMetadata.service.js +33 -0
  244. package/dist/src/modules/v4/opportunity/subservices/getCompoundMetadata.service.js +18 -0
  245. package/dist/src/modules/v4/opportunity/subservices/getDolomiteMetadata.service.js +15 -0
  246. package/dist/src/modules/v4/opportunity/subservices/getErc20Metadata.service.js +63 -0
  247. package/dist/src/modules/v4/opportunity/subservices/getErc20SnapshotMetadata.service.js +8 -0
  248. package/dist/src/modules/v4/opportunity/subservices/getEulerMetadata.service.js +30 -0
  249. package/dist/src/modules/v4/opportunity/subservices/getJsonAirDropMetadata.service.js +36 -0
  250. package/dist/src/modules/v4/opportunity/subservices/getMorphoMetadata.service.js +19 -0
  251. package/dist/src/modules/v4/opportunity/subservices/getRadiantMetadata.service.js +9 -0
  252. package/dist/src/modules/v4/opportunity/subservices/getSiloMetadata.service.js +13 -0
  253. package/dist/src/modules/v4/opportunity/transform-id.pipe.js +6 -0
  254. package/dist/src/modules/v4/opportunity/validate-id.pipe.js +12 -0
  255. package/dist/src/modules/v4/participate/participate.controller.js +66 -0
  256. package/dist/src/modules/v4/participate/participate.model.js +24 -0
  257. package/dist/src/modules/v4/participate/participate.service.js +33 -0
  258. package/dist/src/modules/v4/price/index.js +3 -0
  259. package/dist/src/modules/v4/price/price.controller.js +62 -0
  260. package/dist/src/modules/v4/price/price.model.js +12 -0
  261. package/dist/src/modules/v4/price/price.repository.js +18 -0
  262. package/dist/src/modules/v4/price/price.service.js +44 -0
  263. package/dist/src/modules/v4/prisma/index.js +1 -0
  264. package/dist/src/modules/v4/protocol/index.js +3 -0
  265. package/dist/src/modules/v4/protocol/protocol.controller.js +23 -0
  266. package/dist/src/modules/v4/protocol/protocol.model.js +68 -0
  267. package/dist/src/modules/v4/protocol/protocol.repository.js +37 -0
  268. package/dist/src/modules/v4/protocol/protocol.service.js +77 -0
  269. package/dist/src/modules/v4/reward/index.js +3 -0
  270. package/dist/src/modules/v4/reward/reward.controller.js +52 -0
  271. package/dist/src/modules/v4/reward/reward.model.js +104 -0
  272. package/dist/src/modules/v4/reward/reward.repository.js +237 -0
  273. package/dist/src/modules/v4/reward/reward.service.js +283 -0
  274. package/dist/src/modules/v4/reward/rewardConvertor.service.js +136 -0
  275. package/dist/src/modules/v4/router.js +57 -0
  276. package/dist/src/modules/v4/status/index.js +3 -0
  277. package/dist/src/modules/v4/status/status.controller.js +48 -0
  278. package/dist/src/modules/v4/status/status.model.js +24 -0
  279. package/dist/src/modules/v4/status/status.repository.js +88 -0
  280. package/dist/src/modules/v4/status/status.service.js +60 -0
  281. package/dist/src/modules/v4/token/index.js +3 -0
  282. package/dist/src/modules/v4/token/token.controller.js +32 -0
  283. package/dist/src/modules/v4/token/token.model.js +23 -0
  284. package/dist/src/modules/v4/token/token.repository.js +128 -0
  285. package/dist/src/modules/v4/token/token.service.js +268 -0
  286. package/dist/src/modules/v4/tvl/index.js +2 -0
  287. package/dist/src/modules/v4/tvl/tvl.controller.js +1 -0
  288. package/dist/src/modules/v4/tvl/tvl.model.js +1 -0
  289. package/dist/src/modules/v4/tvl/tvl.repository.js +1 -0
  290. package/dist/src/modules/v4/tvl/tvl.service.js +49 -0
  291. package/dist/src/modules/v4/uniswapV4/index.js +4 -0
  292. package/dist/src/modules/v4/uniswapV4/uniswapV4.controller.js +11 -0
  293. package/dist/src/modules/v4/uniswapV4/uniswapV4.model.js +17 -0
  294. package/dist/src/modules/v4/uniswapV4/uniswapV4.repository.js +2 -0
  295. package/dist/src/modules/v4/uniswapV4/uniswapV4.service.js +73 -0
  296. package/dist/src/modules/v4/user/index.js +3 -0
  297. package/dist/src/modules/v4/user/user.controller.js +69 -0
  298. package/dist/src/modules/v4/user/user.model.js +18 -0
  299. package/dist/src/modules/v4/user/user.repository.js +38 -0
  300. package/dist/src/modules/v4/user/user.service.js +50 -0
  301. package/dist/src/plugins/error-handling.plugin.js +28 -0
  302. package/dist/src/plugins/logger.plugin.js +22 -0
  303. package/dist/src/routes/v1/allowances.js +115 -0
  304. package/dist/src/routes/v1/balances.js +25 -0
  305. package/dist/src/routes/v1/prices.js +11 -0
  306. package/dist/src/routes/v1/tokens.js +17 -0
  307. package/dist/src/routes/v2/merkl.js +13 -0
  308. package/dist/src/routes/v3/ERC20Campaigns.js +63 -0
  309. package/dist/src/routes/v3/app.js +18 -0
  310. package/dist/src/routes/v3/blacklist.js +18 -0
  311. package/dist/src/routes/v3/campaign/delay.js +78 -0
  312. package/dist/src/routes/v3/campaignClaims.js +24 -0
  313. package/dist/src/routes/v3/campaignReport.js +22 -0
  314. package/dist/src/routes/v3/campaignUnclaimed.js +28 -0
  315. package/dist/src/routes/v3/campaigns.js +101 -0
  316. package/dist/src/routes/v3/campaignsForMainParameter.js +19 -0
  317. package/dist/src/routes/v3/campaignsInfo.js +54 -0
  318. package/dist/src/routes/v3/campaignsRewardsReport.js +47 -0
  319. package/dist/src/routes/v3/claims.js +45 -0
  320. package/dist/src/routes/v3/compoundV2.js +9 -0
  321. package/dist/src/routes/v3/createCampaign.js +66 -0
  322. package/dist/src/routes/v3/dolomite.js +9 -0
  323. package/dist/src/routes/v3/euler.js +9 -0
  324. package/dist/src/routes/v3/exports/campaigns.js +28 -0
  325. package/dist/src/routes/v3/fetch.js +27 -0
  326. package/dist/src/routes/v3/health.js +13 -0
  327. package/dist/src/routes/v3/lostyield.js +98 -0
  328. package/dist/src/routes/v3/merkl.js +119 -0
  329. package/dist/src/routes/v3/morphoMarkets.js +27 -0
  330. package/dist/src/routes/v3/morphoVaults.js +22 -0
  331. package/dist/src/routes/v3/multiChainPositions.js +69 -0
  332. package/dist/src/routes/v3/opportunity.js +63 -0
  333. package/dist/src/routes/v3/overview.js +73 -0
  334. package/dist/src/routes/v3/parse.js +23 -0
  335. package/dist/src/routes/v3/payload.js +40 -0
  336. package/dist/src/routes/v3/poolInfo.js +88 -0
  337. package/dist/src/routes/v3/positions.js +62 -0
  338. package/dist/src/routes/v3/radiant.js +26 -0
  339. package/dist/src/routes/v3/recipients.js +20 -0
  340. package/dist/src/routes/v3/rewards.js +33 -0
  341. package/dist/src/routes/v3/rewardsReport.js +51 -0
  342. package/dist/src/routes/v3/rootForTimestamp.js +47 -0
  343. package/dist/src/routes/v3/silo.js +20 -0
  344. package/dist/src/routes/v3/token.js +24 -0
  345. package/dist/src/routes/v3/tokenUnclaimed.js +24 -0
  346. package/dist/src/routes/v3/twt/participants.js +11 -0
  347. package/dist/src/routes/v3/updates.js +47 -0
  348. package/dist/src/routes/v3/userRewards.js +59 -0
  349. package/dist/src/types/index.js +6 -0
  350. package/dist/src/types/parameters/Action.js +11 -0
  351. package/dist/src/types/parameters/Chain.js +13 -0
  352. package/dist/src/types/parameters/ChainCampaignId.js +13 -0
  353. package/dist/src/types/parameters/MainParameter.js +19 -0
  354. package/dist/src/types/parameters/OpportunityId.js +14 -0
  355. package/dist/src/types/parameters/Timestamp.js +16 -0
  356. package/dist/src/types/parameters/Type.js +15 -0
  357. package/dist/src/types/parameters/index.js +17 -0
  358. package/dist/src/types/returnTypes.js +1 -0
  359. package/dist/src/types/utils.js +1 -0
  360. package/dist/src/utils/addString.js +6 -0
  361. package/dist/src/utils/bigintToString.js +20 -0
  362. package/dist/src/utils/crypto.js +4 -0
  363. package/dist/src/utils/decodeCalls.js +170 -0
  364. package/dist/src/utils/encodeCalls.js +240 -0
  365. package/dist/src/utils/error.js +90 -0
  366. package/dist/src/utils/execute.js +41 -0
  367. package/dist/src/utils/generateCardName.js +89 -0
  368. package/dist/src/utils/generic.js +117 -0
  369. package/dist/src/utils/hashArray.js +4 -0
  370. package/dist/src/utils/lastBlockBefore.js +78 -0
  371. package/dist/src/utils/logger.js +52 -0
  372. package/dist/src/utils/pricer.js +180 -0
  373. package/dist/src/utils/prices/chainlinkRead.js +8 -0
  374. package/dist/src/utils/prices/curveVirtualPrice.js +7 -0
  375. package/dist/src/utils/prices/getDQUICK.js +8 -0
  376. package/dist/src/utils/prices/priceFetcherFactory.js +29 -0
  377. package/dist/src/utils/prices/priceService.js +328 -0
  378. package/dist/src/utils/prices/services/coinGeckoService.js +53 -0
  379. package/dist/src/utils/prices/services/defillamaService.js +53 -0
  380. package/dist/src/utils/prices/services/dexScreenerService.js +62 -0
  381. package/dist/src/utils/prices/services/erc4626Service.js +30 -0
  382. package/dist/src/utils/prices/services/getERC4626.js +11 -0
  383. package/dist/src/utils/prices/services/indexCoopService.js +55 -0
  384. package/dist/src/utils/prices/services/priceFetcher.js +1 -0
  385. package/dist/src/utils/prices/uniV2Price.js +40 -0
  386. package/dist/src/utils/prisma.js +12 -0
  387. package/dist/src/utils/providers.js +30 -0
  388. package/dist/src/utils/queries/activeCampaigns.js +22 -0
  389. package/dist/src/utils/queries/allCampaigns.js +51 -0
  390. package/dist/src/utils/queries/campaignsForMainParameter.js +23 -0
  391. package/dist/src/utils/queries/claimsOverTime.js +111 -0
  392. package/dist/src/utils/queries/endingCampaigns.js +21 -0
  393. package/dist/src/utils/queries/futureCampaigns.js +19 -0
  394. package/dist/src/utils/queries/mainParameterCampaigns.js +11 -0
  395. package/dist/src/utils/queries/rewardsAmount.js +106 -0
  396. package/dist/src/utils/queries/unclaimed.js +81 -0
  397. package/dist/src/utils/rateLimit.js +13 -0
  398. package/dist/src/utils/stryke.js +4 -0
  399. package/dist/src/utils/throw.js +27 -0
  400. package/dist/src/utils/validation.js +20 -0
  401. package/dist/tsconfig.package.tsbuildinfo +1 -1
  402. package/package.json +2 -2
@@ -0,0 +1,549 @@
1
+ import { AjnaSubCampaignType, BN2Number, Campaign, ChainId, CompFork, CompoundSubCampaignType, DolomiteSubCampaignType, EAprBreakdownType, EulerSubCampaignType, MorphoSubCampaignType, almName, ammName, } from "@sdk";
2
+ import { activeCampaign, getApr, getCampaignsFor, getDailyRewards, getRewardTokenIcons, getRewardTokens, getStatus, getTags, inactiveCampaign, removeTestTokens, } from "./campaign";
3
+ export const extractOpportunities = {
4
+ [Campaign.CLAMM]: ({ chainId, amm, mainParameter, tvl, campaignParameters: params, poolBalanceToken0, poolBalanceToken1, computeChainId, }, campaigns, prices) => {
5
+ const { active, all } = campaigns;
6
+ const pair = `${params.symbolToken0}-${params.symbolToken1}`;
7
+ const tvlDetails = active.reduce((res, campaign) => {
8
+ for (const forwarder of campaign?.forwarders ?? []) {
9
+ const key = `${almName(forwarder.type)} ${forwarder.almAddress}`;
10
+ if (!res[key])
11
+ res[key] = {
12
+ value: forwarder.almTVL,
13
+ address: forwarder.almAddress,
14
+ type: EAprBreakdownType.FORWARDER,
15
+ label: forwarder.label.split(" ")[0],
16
+ };
17
+ }
18
+ return res;
19
+ }, {});
20
+ // @Hugo wip: new way to structure aprBreakdowns
21
+ const aprBreakdownByType = sumAprBreakdownsByType(campaigns.active);
22
+ const campaignApr = getCampaignsApr(active);
23
+ const aprBreakdown2 = [...aprBreakdownByType, ...campaignApr];
24
+ const aprBreakdown = active.reduce((res, campaign) => {
25
+ if (!campaign.aprs)
26
+ return res;
27
+ for (const key of Object.keys(campaign?.aprs)) {
28
+ const forwarder = campaign.forwarders?.find(f => f.label.toLocaleLowerCase() === key.toLocaleLowerCase());
29
+ if (!res[key])
30
+ res[key] = { value: 0, address: null, type: EAprBreakdownType.DETAILS, label: "" };
31
+ res[key].value += campaign.aprs[key];
32
+ res[key].address = forwarder?.almAddress ?? res[key].address; // should put token address
33
+ res[key].type =
34
+ (forwarder ? EAprBreakdownType.FORWARDER : EAprBreakdownType.DETAILS) ?? EAprBreakdownType.DETAILS;
35
+ }
36
+ return res;
37
+ }, {});
38
+ const holdings = [
39
+ { symbol: params.symbolToken0, amount: poolBalanceToken0 ?? 0 },
40
+ { symbol: params.symbolToken1, amount: poolBalanceToken1 ?? 0 },
41
+ ];
42
+ let platform = ammName(amm ?? params.amm);
43
+ if (platform === "BaseSwap" && chainId === ChainId.MODE)
44
+ platform = "SwapMode";
45
+ if (platform === "BaseSwap" && chainId === ChainId.ARBITRUM)
46
+ platform = "Arbidex";
47
+ if (platform === "BaseSwap" && chainId === ChainId.OPTIMISM)
48
+ platform = "SuperSwap";
49
+ if (platform === "Izumi") {
50
+ if (chainId === ChainId.ROOTSTOCK)
51
+ platform = "WoodSwap";
52
+ else
53
+ platform = "iZUMi";
54
+ }
55
+ const opportunity = {
56
+ id: `${Campaign.CLAMM}_${mainParameter}`,
57
+ platform: platform,
58
+ name: [platform, pair, params.poolFee && `${params.poolFee} %`].join(" "),
59
+ chainId: !computeChainId ? chainId : computeChainId,
60
+ distributionChainId: chainId,
61
+ action: "pool",
62
+ status: getStatus(all),
63
+ tvlBreakdown: {
64
+ tokens: holdings,
65
+ details: tvlDetails,
66
+ },
67
+ aprBreakdown,
68
+ aprBreakdown2,
69
+ tvl: !!tvl ? tvl : holdings.reduce((prev, curr) => (prices[curr?.symbol] ?? 0) * curr?.amount + prev, 0),
70
+ apr: getApr(active),
71
+ tags: getTags(campaigns.all),
72
+ dailyrewards: getDailyRewards(active, prices),
73
+ tokenIcons: [params.symbolToken0, params.symbolToken1],
74
+ rewardTokenIcons: getRewardTokenIcons(campaigns.active),
75
+ dailyRewardTokens: getRewardTokens(campaigns.active),
76
+ campaigns: { ...campaigns, type: Campaign.CLAMM, ids: campaigns.all.map(c => c.campaignId) },
77
+ };
78
+ return opportunity;
79
+ },
80
+ [Campaign.SILO]: ({ chainId, tvl, mainParameter, campaignSubType, campaignParameters: params, computeChainId }, campaigns, prices) => {
81
+ const { active, all } = campaigns;
82
+ let suffix = ["Deposit", "Protected Deposit", "Debt"][campaignSubType];
83
+ if (all?.[0]?.campaignParameters?.forwarders.length === 1 &&
84
+ all?.[0]?.campaignParameters?.forwarders[0].siloAssetSymbol) {
85
+ suffix += ` (${all?.[0].campaignParameters.forwarders[0].siloAssetSymbol} Market)`;
86
+ }
87
+ const aprBreakdown = active.reduce((res, campaign) => {
88
+ res[`Campaign ${campaign.campaignId.slice(0, 8)}`] = {
89
+ value: campaign.apr ?? 0,
90
+ address: campaign.campaignId,
91
+ type: EAprBreakdownType.CAMPAIGN,
92
+ };
93
+ return res;
94
+ }, {});
95
+ // @Hugo WIP todo for aprBreakdown2
96
+ const aprBreakdown2 = getCampaignsApr(active);
97
+ const opportunity = {
98
+ id: `${Campaign.SILO}_${mainParameter}`,
99
+ platform: "Silo",
100
+ name: ["Silo", params.symbolTargetToken, suffix].join(" "),
101
+ chainId: !computeChainId ? chainId : computeChainId,
102
+ distributionChainId: chainId,
103
+ tvl,
104
+ action: campaignSubType <= 1 ? "lend" : "borrow",
105
+ subtype: campaignSubType,
106
+ status: getStatus(all),
107
+ tags: getTags(campaigns.all),
108
+ dailyrewards: getDailyRewards(active, prices),
109
+ tokenIcons: [params.symbolTargetToken],
110
+ campaigns: { ...campaigns, type: Campaign.SILO, ids: campaigns.all.map(c => c.campaignId) },
111
+ rewardTokenIcons: getRewardTokenIcons(campaigns.active),
112
+ dailyRewardTokens: getRewardTokens(campaigns.active),
113
+ apr: getApr(active),
114
+ aprBreakdown,
115
+ aprBreakdown2,
116
+ };
117
+ return opportunity;
118
+ },
119
+ [Campaign.RADIANT]: (campaign, campaigns, prices) => {
120
+ const { chainId, tvl, campaignSubType, campaignParameters: params, computeChainId } = campaign;
121
+ const { active, all } = campaigns;
122
+ let icons = [params.symbolTargetToken];
123
+ if (params.symbolTargetToken?.startsWith("r"))
124
+ icons = [params.symbolTargetToken.slice("r".length)];
125
+ if (params.symbolTargetToken?.startsWith("variableDebt"))
126
+ icons = [params.symbolTargetToken.slice("variableDebt".length)];
127
+ const aprBreakdown = active.reduce((res, campaign) => {
128
+ res[`Campaign ${campaign.campaignId.slice(0, 8)}`] = {
129
+ value: campaign.apr ?? 0,
130
+ address: campaign.campaignId,
131
+ type: EAprBreakdownType.DETAILS,
132
+ };
133
+ return res;
134
+ }, {});
135
+ // @Hugo WIP todo for aprBreakdown2
136
+ const aprBreakdown2 = getCampaignsApr(active);
137
+ const opportunity = {
138
+ id: `${Campaign.RADIANT}_${campaign.mainParameter}`,
139
+ platform: "Radiant",
140
+ name: ["Radiant", params.symbolTargetToken].join(" "),
141
+ chainId: !computeChainId ? chainId : computeChainId,
142
+ distributionChainId: chainId,
143
+ tvl,
144
+ action: campaignSubType <= 1 ? "lend" : "borrow",
145
+ subtype: campaignSubType,
146
+ status: getStatus(all),
147
+ tags: getTags(campaigns.all),
148
+ dailyrewards: getDailyRewards(active, prices),
149
+ tokenIcons: icons,
150
+ campaigns: { ...campaigns, type: Campaign.RADIANT, ids: campaigns.all.map(c => c.campaignId) },
151
+ rewardTokenIcons: getRewardTokenIcons(campaigns.active),
152
+ dailyRewardTokens: getRewardTokens(campaigns.active),
153
+ apr: getApr(active),
154
+ aprBreakdown,
155
+ aprBreakdown2,
156
+ };
157
+ return opportunity;
158
+ },
159
+ [Campaign.DOLOMITE]: (campaign, campaigns, prices) => {
160
+ const { chainId, tvl, campaignSubType, campaignParameters: params, computeChainId } = campaign;
161
+ const { active, all } = campaigns;
162
+ const aprBreakdown = active.reduce((res, campaign) => {
163
+ res[`Campaign ${campaign.campaignId.slice(0, 8)}`] = {
164
+ value: campaign.apr ?? 0,
165
+ address: campaign.campaignId,
166
+ type: EAprBreakdownType.DETAILS,
167
+ };
168
+ return res;
169
+ }, {});
170
+ // @Hugo WIP todo for aprBreakdown2
171
+ const aprBreakdown2 = getCampaignsApr(active);
172
+ const opportunity = {
173
+ id: `${Campaign.DOLOMITE}_${campaign.mainParameter}`,
174
+ platform: "Dolomite",
175
+ name: ["Dolomite", params.symbolTargetToken, " - ", DolomiteSubCampaignType[campaign.campaignSubType]].join(" "),
176
+ chainId: !computeChainId ? chainId : computeChainId,
177
+ distributionChainId: chainId,
178
+ tvl,
179
+ action: campaignSubType <= 1 ? "lend" : "borrow",
180
+ subtype: campaignSubType,
181
+ status: getStatus(all),
182
+ tags: getTags(campaigns.all),
183
+ dailyrewards: getDailyRewards(active, prices),
184
+ tokenIcons: [params.symbolTargetToken],
185
+ campaigns: { ...campaigns, type: Campaign.DOLOMITE, ids: campaigns.all.map(c => c.campaignId) },
186
+ rewardTokenIcons: getRewardTokenIcons(campaigns.active),
187
+ dailyRewardTokens: getRewardTokens(campaigns.active),
188
+ apr: getApr(active),
189
+ aprBreakdown,
190
+ aprBreakdown2,
191
+ };
192
+ return opportunity;
193
+ },
194
+ [Campaign.ERC20]: (campaign, campaigns, prices) => {
195
+ const { chainId, tvl, campaignParameters: params, typeInfo, computeChainId, mainParameter } = campaign;
196
+ const { active, all } = campaigns;
197
+ const map = {
198
+ actions: {
199
+ pool: [
200
+ "uniswapv2",
201
+ "velodrome",
202
+ "aerodrome",
203
+ "balancerGauge",
204
+ "balancerPool",
205
+ "curve",
206
+ "aura",
207
+ "akron",
208
+ "beefy",
209
+ "dragonswap",
210
+ "poolside",
211
+ "koi",
212
+ ],
213
+ borrow: ["radiant_borrow", "aave_borrowing", "euler_borrow"],
214
+ lend: [
215
+ "gearbox",
216
+ "compound",
217
+ "radiant_lend",
218
+ "aave_lending",
219
+ "sturdy_aggregator",
220
+ "sturdy_silo",
221
+ "fraxlend",
222
+ "moonwell",
223
+ "ionic",
224
+ "fluid",
225
+ "silostaking",
226
+ "euler_lend",
227
+ "layerbank",
228
+ ],
229
+ },
230
+ icons: {
231
+ pool: () => {
232
+ if (["balancerGauge", "balancerPool"].includes(campaign.type ?? ""))
233
+ return Object.values(typeInfo.poolTokens ?? {})
234
+ .map(tkn => tkn?.symbol)
235
+ .filter(tkn => tkn);
236
+ if (["curve"].includes(campaign.type ?? ""))
237
+ return Object.values(typeInfo.poolTokens ?? {}).filter(tkn => tkn);
238
+ return [typeInfo.symbolToken0, typeInfo.symbolToken1];
239
+ },
240
+ lend: () => (campaign.type === "compound" ? [typeInfo.symbolBaseToken] : [typeInfo.symbolUnderlyingToken]),
241
+ borrow: () => [typeInfo.symbolUnderlyingToken],
242
+ hold: () => {
243
+ if (["toros", "enzyme"].includes(campaign.type))
244
+ return [typeInfo.symbolUnderlyingToken];
245
+ return [campaign.campaignParameters.symbolTargetToken];
246
+ },
247
+ },
248
+ };
249
+ const action = Object.entries(map.actions).find(([_action, _types]) => _types.includes(campaign.type ?? ""))?.[0] ?? "hold";
250
+ const icons = map.icons[action]();
251
+ const opportunity = {
252
+ id: `${Campaign.ERC20}_${mainParameter}`,
253
+ platform: params.symbolTargetToken,
254
+ name: typeInfo?.cardName,
255
+ chainId: !computeChainId ? chainId : computeChainId,
256
+ distributionChainId: chainId,
257
+ tvl,
258
+ action,
259
+ apr: getApr(active),
260
+ status: getStatus(all),
261
+ tags: getTags(campaigns.all),
262
+ dailyrewards: getDailyRewards(active, prices),
263
+ tokenIcons: icons,
264
+ campaigns: { ...campaigns, type: Campaign.ERC20, ids: campaigns.all.map(c => c.campaignId) },
265
+ rewardTokenIcons: getRewardTokenIcons(campaigns.active),
266
+ dailyRewardTokens: getRewardTokens(campaigns.active),
267
+ };
268
+ return opportunity;
269
+ },
270
+ [Campaign.ERC20_SNAPSHOT]: ({ chainId, tvl, mainParameter, campaignParameters: params }, campaigns) => {
271
+ const opportunity = {
272
+ id: `${Campaign.ERC20_SNAPSHOT}_${mainParameter}`,
273
+ name: ["Airdrop for", params.symbolTargetToken, "holders"].join(" "),
274
+ chainId,
275
+ tvl,
276
+ action: "drop",
277
+ tags: getTags(campaigns.all),
278
+ status: getStatus(campaigns.all),
279
+ tokenIcons: [params.symbolTargetToken],
280
+ campaigns: { ...campaigns, type: Campaign.ERC20_SNAPSHOT, ids: campaigns.all.map(c => c.campaignId) },
281
+ rewardTokenIcons: getRewardTokenIcons(campaigns.active),
282
+ dailyRewardTokens: getRewardTokens(campaigns.active),
283
+ };
284
+ return opportunity;
285
+ },
286
+ [Campaign.JSON_AIRDROP]: ({ chainId, creator, mainParameter, campaignParameters: params }, campaigns) => {
287
+ const ACI = "0xdeadD8aB03075b7FBA81864202a2f59EE25B312b".toLowerCase();
288
+ const aaveDAO = "0x5300A1a15135EA4dc7aD5a167152C01EFc9b192A".toLowerCase();
289
+ const aciPrefix = creator.toLowerCase() === ACI && "Aave Merit Rewards -";
290
+ const aavePrefix = creator.toLowerCase() === aaveDAO && "Aave - aAMPL distribution -";
291
+ const prefix = aavePrefix ? aavePrefix : aciPrefix ? aciPrefix : "Airdrop in";
292
+ const opportunity = {
293
+ id: `${Campaign.JSON_AIRDROP}_${mainParameter}`,
294
+ name: [prefix, params.symbolRewardToken].join(" "),
295
+ chainId,
296
+ action: "drop",
297
+ status: getStatus(campaigns.all),
298
+ tags: getTags(campaigns.all),
299
+ tokenIcons: [params.symbolRewardToken],
300
+ campaigns: { ...campaigns, type: Campaign.JSON_AIRDROP, ids: campaigns.all.map(c => c.campaignId) },
301
+ rewardTokenIcons: getRewardTokenIcons(campaigns.active),
302
+ dailyRewardTokens: getRewardTokens(campaigns.active),
303
+ };
304
+ return opportunity;
305
+ },
306
+ [Campaign.MORPHO]: ({ chainId, tvl, mainParameter, campaignSubType, campaignParameters: params, computeChainId }, campaigns, prices) => {
307
+ const { active, all } = campaigns;
308
+ const suffix = ["Meta", "Supply", "Borrow", "Collateral"][campaignSubType];
309
+ const opportunity = {
310
+ id: `${Campaign.MORPHO}_${mainParameter}`,
311
+ platform: "Morpho",
312
+ name: campaignSubType === MorphoSubCampaignType.META
313
+ ? ["MetaMorpho", params.nameTargetToken].join(" ")
314
+ : campaignSubType === MorphoSubCampaignType.BORROWING_BLUE ||
315
+ campaignSubType === MorphoSubCampaignType.SUPPLY_BLUE
316
+ ? [
317
+ "Morpho - ",
318
+ suffix,
319
+ `${params.symbolLoanToken} on ${params.symbolLoanToken}/${params.symbolBorrowToken}`,
320
+ `${BN2Number(params.LLTV, 16)}%`,
321
+ ].join(" ")
322
+ : [
323
+ "Morpho - ",
324
+ suffix,
325
+ `${params.symbolBorrowToken} on ${params.symbolLoanToken}/${params.symbolBorrowToken}`,
326
+ `${BN2Number(params.LLTV, 16)}%`,
327
+ ].join(" "),
328
+ chainId: !computeChainId ? chainId : computeChainId,
329
+ distributionChainId: chainId,
330
+ tvl,
331
+ action: campaignSubType !== 2 ? "lend" : "borrow",
332
+ subtype: campaignSubType,
333
+ status: getStatus(all),
334
+ tags: getTags(campaigns.all),
335
+ dailyrewards: getDailyRewards(active, prices),
336
+ tokenIcons: [params.symbolTargetToken],
337
+ campaigns: { ...campaigns, type: Campaign.MORPHO, ids: campaigns.all.map(c => c.campaignId) },
338
+ rewardTokenIcons: getRewardTokenIcons(campaigns.active),
339
+ dailyRewardTokens: getRewardTokens(campaigns.active),
340
+ apr: getApr(active),
341
+ };
342
+ return opportunity;
343
+ },
344
+ [Campaign.BADGER]: (campaign, campaigns, prices) => {
345
+ const { chainId, tvl, campaignSubType, campaignParameters: params, computeChainId } = campaign;
346
+ const { active, all } = campaigns;
347
+ const aprBreakdown = active.reduce((res, campaign) => {
348
+ res[`Campaign ${campaign.campaignId.slice(0, 8)}`] = {
349
+ value: campaign.apr ?? 0,
350
+ address: campaign.campaignId,
351
+ type: EAprBreakdownType.DETAILS,
352
+ };
353
+ return res;
354
+ }, {});
355
+ // @Hugo WIP todo for aprBreakdown2
356
+ const aprBreakdown2 = getCampaignsApr(active);
357
+ const opportunity = {
358
+ id: `${Campaign.BADGER}_${campaign.mainParameter}`,
359
+ platform: "Badger",
360
+ name: ["Badger", "Borrow", params.symbolTargetToken].join(" "),
361
+ chainId: !computeChainId ? chainId : computeChainId,
362
+ distributionChainId: chainId,
363
+ tvl,
364
+ action: "borrow",
365
+ subtype: 0,
366
+ status: getStatus(all),
367
+ tags: getTags(campaigns.all),
368
+ dailyrewards: getDailyRewards(active, prices),
369
+ tokenIcons: [params.symbolTargetToken],
370
+ campaigns: { ...campaigns, type: Campaign.BADGER, ids: campaigns.all.map(c => c.campaignId) },
371
+ rewardTokenIcons: getRewardTokenIcons(campaigns.active),
372
+ dailyRewardTokens: getRewardTokens(campaigns.active),
373
+ apr: getApr(active),
374
+ aprBreakdown,
375
+ aprBreakdown2,
376
+ };
377
+ return opportunity;
378
+ },
379
+ [Campaign.AJNA]: (campaign, campaigns, prices) => {
380
+ const { chainId, tvl, campaignSubType, campaignParameters: params, computeChainId } = campaign;
381
+ const { active, all } = campaigns;
382
+ const aprBreakdown = active.reduce((res, campaign) => {
383
+ res[`Campaign ${campaign.campaignId.slice(0, 8)}`] = {
384
+ value: campaign.apr ?? 0,
385
+ address: campaign.campaignId,
386
+ type: EAprBreakdownType.DETAILS,
387
+ };
388
+ return res;
389
+ }, {});
390
+ // @Hugo WIP todo for aprBreakdown2
391
+ const aprBreakdown2 = getCampaignsApr(active);
392
+ const opportunity = {
393
+ id: `${Campaign.AJNA}_${campaign.mainParameter}`,
394
+ platform: "Ajna",
395
+ name: [
396
+ "AJNA",
397
+ params.subCampaignType === AjnaSubCampaignType.lend
398
+ ? `Supply ${params.symbolQuoteToken} on `
399
+ : `Borrow ${params.symbolQuoteToken} on`,
400
+ params.symbolCollateralToken,
401
+ " / ",
402
+ params.symbolQuoteToken,
403
+ ].join(" "),
404
+ chainId: !computeChainId ? chainId : computeChainId,
405
+ distributionChainId: chainId,
406
+ tvl,
407
+ action: campaignSubType === AjnaSubCampaignType.lend ? "lend" : "borrow",
408
+ subtype: campaignSubType,
409
+ status: getStatus(all),
410
+ tags: getTags(campaigns.all),
411
+ dailyrewards: getDailyRewards(active, prices),
412
+ tokenIcons: [params.symbolQuoteToken, params.symbolCollateralToken],
413
+ campaigns: { ...campaigns, type: Campaign.AJNA, ids: campaigns.all.map(c => c.campaignId) },
414
+ rewardTokenIcons: getRewardTokenIcons(campaigns.active),
415
+ dailyRewardTokens: getRewardTokens(campaigns.active),
416
+ apr: getApr(active),
417
+ aprBreakdown,
418
+ aprBreakdown2,
419
+ };
420
+ return opportunity;
421
+ },
422
+ [Campaign.EULER]: (campaign, campaigns, prices) => {
423
+ const { chainId, tvl, campaignSubType, campaignParameters: params, computeChainId } = campaign;
424
+ const { active, all } = campaigns;
425
+ const aprBreakdown = active.reduce((res, campaign) => {
426
+ res[`Campaign ${campaign.campaignId.slice(0, 8)}`] = {
427
+ value: campaign.apr ?? 0,
428
+ address: campaign.campaignId,
429
+ type: EAprBreakdownType.DETAILS,
430
+ };
431
+ return res;
432
+ }, {});
433
+ // @Hugo WIP todo for aprBreakdown2
434
+ const aprBreakdown2 = getCampaignsApr(active);
435
+ const opportunity = {
436
+ id: `${Campaign.EULER}_${campaign.mainParameter}`,
437
+ platform: "Euler",
438
+ name: campaign.typeInfo.cardName,
439
+ chainId: computeChainId ?? chainId,
440
+ distributionChainId: chainId,
441
+ tvl,
442
+ action: campaignSubType === EulerSubCampaignType.LEND ? "lend" : "borrow",
443
+ subtype: campaignSubType,
444
+ status: getStatus(all),
445
+ tags: getTags(campaigns.all),
446
+ dailyrewards: getDailyRewards(active, prices),
447
+ tokenIcons: [params.symbolAsset],
448
+ campaigns: { ...campaigns, type: Campaign.EULER, ids: campaigns.all.map(c => c.campaignId) },
449
+ rewardTokenIcons: getRewardTokenIcons(campaigns.active),
450
+ dailyRewardTokens: getRewardTokens(campaigns.active),
451
+ apr: getApr(active),
452
+ aprBreakdown,
453
+ aprBreakdown2,
454
+ };
455
+ return opportunity;
456
+ },
457
+ [Campaign.COMPOUND]: (campaign, campaigns, prices) => {
458
+ const { chainId, tvl, campaignSubType, campaignParameters: params, computeChainId } = campaign;
459
+ const { active, all } = campaigns;
460
+ const aprBreakdown = active.reduce((res, campaign) => {
461
+ res[`Campaign ${campaign.campaignId.slice(0, 8)}`] = {
462
+ value: campaign.apr ?? 0,
463
+ address: campaign.campaignId,
464
+ type: EAprBreakdownType.DETAILS,
465
+ };
466
+ return res;
467
+ }, {});
468
+ // @Hugo WIP todo for aprBreakdown2
469
+ const aprBreakdown2 = getCampaignsApr(active);
470
+ const opportunity = {
471
+ id: `${Campaign.COMPOUND}_${campaign.mainParameter}`,
472
+ platform: CompFork[campaign.campaignParameters.compFork],
473
+ name: [
474
+ CompFork[campaign.campaignParameters.compFork],
475
+ params.subCampaignType === CompoundSubCampaignType.supply
476
+ ? `Supply ${params.symbolTargetToken}`
477
+ : `Borrow ${params.symbolTargetToken}`,
478
+ ].join(" "),
479
+ chainId: !computeChainId ? chainId : computeChainId,
480
+ distributionChainId: chainId,
481
+ tvl,
482
+ action: campaignSubType === CompoundSubCampaignType.supply ? "lend" : "borrow",
483
+ subtype: campaignSubType,
484
+ status: getStatus(all),
485
+ tags: getTags(campaigns.all),
486
+ dailyrewards: getDailyRewards(active, prices),
487
+ tokenIcons: [params.symbolUnderlyingToken],
488
+ campaigns: { ...campaigns, type: Campaign.COMPOUND, ids: campaigns.all.map(c => c.campaignId) },
489
+ rewardTokenIcons: getRewardTokenIcons(campaigns.active),
490
+ dailyRewardTokens: getRewardTokens(campaigns.active),
491
+ apr: getApr(active),
492
+ aprBreakdown,
493
+ aprBreakdown2,
494
+ };
495
+ return opportunity;
496
+ },
497
+ };
498
+ /**
499
+ * @returns the opportunities map with their corresponding campaign's data added
500
+ */
501
+ export async function fillCampaigns(opportunities, onlyCampaignIds, showTest) {
502
+ const [includedChainIds, includedTypes] = Object.values(opportunities).reduce(([chains, types], { chainId, campaigns: oppCampaigns }) => [
503
+ chains.add(chainId),
504
+ types.add(Number.parseInt(oppCampaigns?.type ?? "0")),
505
+ ], [new Set(), new Set()]);
506
+ const campaigns = await getCampaignsFor(Array.from(includedChainIds), {
507
+ onlyLive: false,
508
+ types: Array.from(includedTypes),
509
+ });
510
+ for (const [id, opportunity] of Object.entries(opportunities)) {
511
+ const matchingCampaigns = Object.entries(campaigns?.[opportunity.chainId] ?? {}).find(([_id]) => _id?.toLowerCase() === id?.toLowerCase());
512
+ const opportunityCampaigns = Object.values(matchingCampaigns?.[1] ?? {}).filter(campaign => {
513
+ if (!showTest)
514
+ return removeTestTokens(campaign);
515
+ return true;
516
+ });
517
+ opportunities[id].campaigns.ids = opportunityCampaigns?.map(({ campaignId }) => campaignId).filter(c => c);
518
+ opportunities[id].campaigns.active = opportunityCampaigns?.filter(activeCampaign) ?? [];
519
+ opportunities[id].campaigns.inactive = opportunityCampaigns?.filter(inactiveCampaign) ?? [];
520
+ }
521
+ return opportunities;
522
+ }
523
+ function sumAprBreakdownsByType(campaigns) {
524
+ const map = new Map();
525
+ let specificAprTypes = [];
526
+ campaigns.forEach(campaign => {
527
+ campaign.aprBreakdowns?.forEach(breakdown => {
528
+ if (breakdown.type === EAprBreakdownType.FORWARDER)
529
+ return;
530
+ const existing = map.get(breakdown.type);
531
+ if (existing)
532
+ existing.value += breakdown.value;
533
+ else {
534
+ map.set(breakdown.type, breakdown);
535
+ }
536
+ });
537
+ specificAprTypes = campaign.aprBreakdowns?.filter(breakdown => breakdown.type === EAprBreakdownType.FORWARDER);
538
+ });
539
+ // Convert the map to an array of AprBreakdown
540
+ return Array.from(map.values()).concat(specificAprTypes);
541
+ }
542
+ function getCampaignsApr(active) {
543
+ return active.map(campaign => ({
544
+ value: campaign.apr ?? 0,
545
+ address: campaign.campaignId,
546
+ type: EAprBreakdownType.CAMPAIGN,
547
+ label: `Campaign ${campaign.campaignId.slice(0, 8)}`,
548
+ }));
549
+ }
@@ -0,0 +1,7 @@
1
+ import { HttpError } from "./HttpError";
2
+ export class BadRequestError extends HttpError {
3
+ constructor(message = "Bad Request", legalValues) {
4
+ super(message, 400, { legalValues });
5
+ this.name = "BadRequestError";
6
+ }
7
+ }
@@ -0,0 +1,7 @@
1
+ import { HttpError } from "./HttpError";
2
+ export class ConflictError extends HttpError {
3
+ constructor(message = "Conflict") {
4
+ super(message, 409);
5
+ this.name = "ConflictError";
6
+ }
7
+ }
@@ -0,0 +1,11 @@
1
+ export class HttpError extends Error {
2
+ code;
3
+ httpCode;
4
+ info;
5
+ constructor(message = "Internal Server Error", httpCode = 500, info) {
6
+ super(message);
7
+ this.code = "HttpError";
8
+ this.httpCode = httpCode;
9
+ this.info = info;
10
+ }
11
+ }
@@ -0,0 +1,7 @@
1
+ import { HttpError } from "./HttpError";
2
+ export class NotFoundError extends HttpError {
3
+ constructor(message = "Not Found") {
4
+ super(message, 404);
5
+ this.name = "NotFoundError";
6
+ }
7
+ }
@@ -0,0 +1,11 @@
1
+ export class OpportunityError extends Error {
2
+ code;
3
+ httpCode;
4
+ info;
5
+ constructor(message, name, info) {
6
+ super(message);
7
+ this.code = "OpportunityError";
8
+ this.name = name;
9
+ this.info = info;
10
+ }
11
+ }
@@ -0,0 +1,7 @@
1
+ import { HttpError } from "./HttpError";
2
+ export class UnauthorizedError extends HttpError {
3
+ constructor(message = "Unauthorized") {
4
+ super(message, 401);
5
+ this.name = "UnauthorizedError";
6
+ }
7
+ }
@@ -0,0 +1,5 @@
1
+ export * from "./HttpError";
2
+ export * from "./Unauthorized.error";
3
+ export * from "./NotFound.error";
4
+ export * from "./BadRequest.error";
5
+ export * from "./Conflict.error";
@@ -0,0 +1,10 @@
1
+ import { UnauthorizedError } from "../errors";
2
+ import { t } from "elysia";
3
+ export const AuthorizationHeadersDto = t.Object({
4
+ authorization: t.String(),
5
+ });
6
+ export async function BackOfficeGuard({ headers }) {
7
+ if (headers.authorization !== `Bearer ${process.env.BACKOFFICE_SECRET}`) {
8
+ throw new UnauthorizedError();
9
+ }
10
+ }
@@ -0,0 +1,10 @@
1
+ import { UnauthorizedError } from "../errors";
2
+ import { t } from "elysia";
3
+ export const AuthorizationHeadersDto = t.Object({
4
+ authorization: t.String(),
5
+ });
6
+ export async function EngineGuard({ headers }) {
7
+ if (headers.authorization !== `Bearer ${process.env.ENGINE_SECRET}`) {
8
+ throw new UnauthorizedError();
9
+ }
10
+ }
@@ -0,0 +1,10 @@
1
+ import { UnauthorizedError } from "../errors";
2
+ import { t } from "elysia";
3
+ export const AuthorizationHeadersDto = t.Object({
4
+ authorization: t.String(),
5
+ });
6
+ export async function TokenAuthGuard({ headers }) {
7
+ if (headers.authorization !== `Bearer ${process.env.API_SECRET}`) {
8
+ throw new UnauthorizedError();
9
+ }
10
+ }
@@ -0,0 +1,7 @@
1
+ import { throwOnInvalidAddress } from "../utils/throw";
2
+ export default function checkQueryAddressValidity(queryKey = "user") {
3
+ return (app) => app.onBeforeHandle(({ query }) => {
4
+ const address = query?.[queryKey];
5
+ query[queryKey] = throwOnInvalidAddress(address ?? "");
6
+ });
7
+ }
@@ -0,0 +1,7 @@
1
+ import { throwOnUnsupportedChainId } from "../utils/throw";
2
+ export default function checkQueryChainIdValidity(queryKey = "chainId") {
3
+ return (app) => app.onBeforeHandle(({ query }) => {
4
+ const chainId = query?.[queryKey];
5
+ chainId !== undefined && throwOnUnsupportedChainId(chainId);
6
+ });
7
+ }