@levrbet/shared 0.0.1

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 (488) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +92 -0
  3. package/bin/setup-prisma.js +44 -0
  4. package/dist/core/config/dotenv.d.ts +16 -0
  5. package/dist/core/config/dotenv.js +77 -0
  6. package/dist/core/config/dotenv.js.map +1 -0
  7. package/dist/core/config/index.d.ts +2 -0
  8. package/dist/core/config/index.js +19 -0
  9. package/dist/core/config/index.js.map +1 -0
  10. package/dist/core/config/urls.d.ts +55 -0
  11. package/dist/core/config/urls.js +61 -0
  12. package/dist/core/config/urls.js.map +1 -0
  13. package/dist/core/contracts/abis/LevrBaseMarket.d.ts +1009 -0
  14. package/dist/core/contracts/abis/LevrBaseMarket.js +976 -0
  15. package/dist/core/contracts/abis/LevrBaseMarket.js.map +1 -0
  16. package/dist/core/contracts/abis/LevrConfigProvider.d.ts +2671 -0
  17. package/dist/core/contracts/abis/LevrConfigProvider.js +2551 -0
  18. package/dist/core/contracts/abis/LevrConfigProvider.js.map +1 -0
  19. package/dist/core/contracts/abis/LevrFeeCollector.d.ts +259 -0
  20. package/dist/core/contracts/abis/LevrFeeCollector.js +143 -0
  21. package/dist/core/contracts/abis/LevrFeeCollector.js.map +1 -0
  22. package/dist/core/contracts/abis/LevrFulltimeMarket.d.ts +1050 -0
  23. package/dist/core/contracts/abis/LevrFulltimeMarket.js +462 -0
  24. package/dist/core/contracts/abis/LevrFulltimeMarket.js.map +1 -0
  25. package/dist/core/contracts/abis/LevrFundManager.d.ts +51 -0
  26. package/dist/core/contracts/abis/LevrFundManager.js +4 -0
  27. package/dist/core/contracts/abis/LevrFundManager.js.map +1 -0
  28. package/dist/core/contracts/abis/LevrLiquidationEngine.d.ts +244 -0
  29. package/dist/core/contracts/abis/LevrLiquidationEngine.js +231 -0
  30. package/dist/core/contracts/abis/LevrLiquidationEngine.js.map +1 -0
  31. package/dist/core/contracts/abis/LevrManager.d.ts +1281 -0
  32. package/dist/core/contracts/abis/LevrManager.js +1090 -0
  33. package/dist/core/contracts/abis/LevrManager.js.map +1 -0
  34. package/dist/core/contracts/abis/LevrMarketFeed.d.ts +902 -0
  35. package/dist/core/contracts/abis/LevrMarketFeed.js +775 -0
  36. package/dist/core/contracts/abis/LevrMarketFeed.js.map +1 -0
  37. package/dist/core/contracts/abis/LevrMarketMaker.d.ts +175 -0
  38. package/dist/core/contracts/abis/LevrMarketMaker.js +108 -0
  39. package/dist/core/contracts/abis/LevrMarketMaker.js.map +1 -0
  40. package/dist/core/contracts/abis/LevrMarketRiskSentinel.d.ts +682 -0
  41. package/dist/core/contracts/abis/LevrMarketRiskSentinel.js +323 -0
  42. package/dist/core/contracts/abis/LevrMarketRiskSentinel.js.map +1 -0
  43. package/dist/core/contracts/abis/LevrMarketRouter.d.ts +281 -0
  44. package/dist/core/contracts/abis/LevrMarketRouter.js +262 -0
  45. package/dist/core/contracts/abis/LevrMarketRouter.js.map +1 -0
  46. package/dist/core/contracts/abis/LevrMvpDepository.d.ts +766 -0
  47. package/dist/core/contracts/abis/LevrMvpDepository.js +396 -0
  48. package/dist/core/contracts/abis/LevrMvpDepository.js.map +1 -0
  49. package/dist/core/contracts/abis/LevrMvpRouter.d.ts +305 -0
  50. package/dist/core/contracts/abis/LevrMvpRouter.js +291 -0
  51. package/dist/core/contracts/abis/LevrMvpRouter.js.map +1 -0
  52. package/dist/core/contracts/abis/LevrMvpStaker.d.ts +746 -0
  53. package/dist/core/contracts/abis/LevrMvpStaker.js +386 -0
  54. package/dist/core/contracts/abis/LevrMvpStaker.js.map +1 -0
  55. package/dist/core/contracts/abis/LevrMvpToken.d.ts +341 -0
  56. package/dist/core/contracts/abis/LevrMvpToken.js +183 -0
  57. package/dist/core/contracts/abis/LevrMvpToken.js.map +1 -0
  58. package/dist/core/contracts/abis/LevrOrderbook.d.ts +471 -0
  59. package/dist/core/contracts/abis/LevrOrderbook.js +486 -0
  60. package/dist/core/contracts/abis/LevrOrderbook.js.map +1 -0
  61. package/dist/core/contracts/abis/LevrOrderbookLens.d.ts +167 -0
  62. package/dist/core/contracts/abis/LevrOrderbookLens.js +103 -0
  63. package/dist/core/contracts/abis/LevrOrderbookLens.js.map +1 -0
  64. package/dist/core/contracts/abis/LevrOverUnderMarket.d.ts +1054 -0
  65. package/dist/core/contracts/abis/LevrOverUnderMarket.js +463 -0
  66. package/dist/core/contracts/abis/LevrOverUnderMarket.js.map +1 -0
  67. package/dist/core/contracts/abis/LevrPythFeed.d.ts +225 -0
  68. package/dist/core/contracts/abis/LevrPythFeed.js +131 -0
  69. package/dist/core/contracts/abis/LevrPythFeed.js.map +1 -0
  70. package/dist/core/contracts/abis/LevrUtil.d.ts +485 -0
  71. package/dist/core/contracts/abis/LevrUtil.js +226 -0
  72. package/dist/core/contracts/abis/LevrUtil.js.map +1 -0
  73. package/dist/core/contracts/abis/Storage.d.ts +34 -0
  74. package/dist/core/contracts/abis/Storage.js +47 -0
  75. package/dist/core/contracts/abis/Storage.js.map +1 -0
  76. package/dist/core/contracts/abis/index.d.ts +12174 -0
  77. package/dist/core/contracts/abis/index.js +51 -0
  78. package/dist/core/contracts/abis/index.js.map +1 -0
  79. package/dist/core/contracts/addresses.d.ts +154 -0
  80. package/dist/core/contracts/addresses.js +160 -0
  81. package/dist/core/contracts/addresses.js.map +1 -0
  82. package/dist/core/contracts/chains.d.ts +4 -0
  83. package/dist/core/contracts/chains.js +14 -0
  84. package/dist/core/contracts/chains.js.map +1 -0
  85. package/dist/core/contracts/clients/index.d.ts +1 -0
  86. package/dist/core/contracts/clients/index.js +18 -0
  87. package/dist/core/contracts/clients/index.js.map +1 -0
  88. package/dist/core/contracts/clients/publicClients.d.ts +24 -0
  89. package/dist/core/contracts/clients/publicClients.js +123 -0
  90. package/dist/core/contracts/clients/publicClients.js.map +1 -0
  91. package/dist/core/contracts/constants.d.ts +15 -0
  92. package/dist/core/contracts/constants.js +30 -0
  93. package/dist/core/contracts/constants.js.map +1 -0
  94. package/dist/core/contracts/index.d.ts +6 -0
  95. package/dist/core/contracts/index.js +23 -0
  96. package/dist/core/contracts/index.js.map +1 -0
  97. package/dist/core/contracts/instances.d.ts +48 -0
  98. package/dist/core/contracts/instances.js +101 -0
  99. package/dist/core/contracts/instances.js.map +1 -0
  100. package/dist/core/index.d.ts +9 -0
  101. package/dist/core/index.js +26 -0
  102. package/dist/core/index.js.map +1 -0
  103. package/dist/core/indexers/envio.test.query.d.ts +5 -0
  104. package/dist/core/indexers/envio.test.query.js +32 -0
  105. package/dist/core/indexers/envio.test.query.js.map +1 -0
  106. package/dist/core/indexers/index.d.ts +1 -0
  107. package/dist/core/indexers/index.js +18 -0
  108. package/dist/core/indexers/index.js.map +1 -0
  109. package/dist/core/indexers/indexers.service.d.ts +19 -0
  110. package/dist/core/indexers/indexers.service.js +104 -0
  111. package/dist/core/indexers/indexers.service.js.map +1 -0
  112. package/dist/core/indexers/subsquid.test.query.d.ts +4 -0
  113. package/dist/core/indexers/subsquid.test.query.js +42 -0
  114. package/dist/core/indexers/subsquid.test.query.js.map +1 -0
  115. package/dist/core/prisma/index.d.ts +1 -0
  116. package/dist/core/prisma/index.js +21 -0
  117. package/dist/core/prisma/index.js.map +1 -0
  118. package/dist/core/prisma/schema.prisma +360 -0
  119. package/dist/core/privy/constants.d.ts +19 -0
  120. package/dist/core/privy/constants.js +28 -0
  121. package/dist/core/privy/constants.js.map +1 -0
  122. package/dist/core/privy/index.d.ts +1 -0
  123. package/dist/core/privy/index.js +18 -0
  124. package/dist/core/privy/index.js.map +1 -0
  125. package/dist/core/socket.io/events.d.ts +20 -0
  126. package/dist/core/socket.io/events.js +20 -0
  127. package/dist/core/socket.io/events.js.map +1 -0
  128. package/dist/core/socket.io/index.d.ts +2 -0
  129. package/dist/core/socket.io/index.js +19 -0
  130. package/dist/core/socket.io/index.js.map +1 -0
  131. package/dist/core/socket.io/rooms.d.ts +6 -0
  132. package/dist/core/socket.io/rooms.js +10 -0
  133. package/dist/core/socket.io/rooms.js.map +1 -0
  134. package/dist/core/types/auth/auth.types.d.ts +31 -0
  135. package/dist/core/types/auth/auth.types.js +15 -0
  136. package/dist/core/types/auth/auth.types.js.map +1 -0
  137. package/dist/core/types/auth/index.d.ts +2 -0
  138. package/dist/core/types/auth/index.js +19 -0
  139. package/dist/core/types/auth/index.js.map +1 -0
  140. package/dist/core/types/auth/request.types.d.ts +19 -0
  141. package/dist/core/types/auth/request.types.js +15 -0
  142. package/dist/core/types/auth/request.types.js.map +1 -0
  143. package/dist/core/types/blockchain/chains.types.d.ts +3 -0
  144. package/dist/core/types/blockchain/chains.types.js +8 -0
  145. package/dist/core/types/blockchain/chains.types.js.map +1 -0
  146. package/dist/core/types/blockchain/contract.types.d.ts +8 -0
  147. package/dist/core/types/blockchain/contract.types.js +13 -0
  148. package/dist/core/types/blockchain/contract.types.js.map +1 -0
  149. package/dist/core/types/blockchain/index.d.ts +3 -0
  150. package/dist/core/types/blockchain/index.js +20 -0
  151. package/dist/core/types/blockchain/index.js.map +1 -0
  152. package/dist/core/types/blockchain/oz.relayer.types.d.ts +7 -0
  153. package/dist/core/types/blockchain/oz.relayer.types.js +13 -0
  154. package/dist/core/types/blockchain/oz.relayer.types.js.map +1 -0
  155. package/dist/core/types/index.d.ts +6 -0
  156. package/dist/core/types/index.js +23 -0
  157. package/dist/core/types/index.js.map +1 -0
  158. package/dist/core/types/indexers.types.d.ts +4 -0
  159. package/dist/core/types/indexers.types.js +9 -0
  160. package/dist/core/types/indexers.types.js.map +1 -0
  161. package/dist/core/types/misc.types.d.ts +6 -0
  162. package/dist/core/types/misc.types.js +11 -0
  163. package/dist/core/types/misc.types.js.map +1 -0
  164. package/dist/core/types/oracle/fixture.types.d.ts +75 -0
  165. package/dist/core/types/oracle/fixture.types.js +4 -0
  166. package/dist/core/types/oracle/fixture.types.js.map +1 -0
  167. package/dist/core/types/oracle/game/game.types.d.ts +108 -0
  168. package/dist/core/types/oracle/game/game.types.js +64 -0
  169. package/dist/core/types/oracle/game/game.types.js.map +1 -0
  170. package/dist/core/types/oracle/game/index.d.ts +2 -0
  171. package/dist/core/types/oracle/game/index.js +19 -0
  172. package/dist/core/types/oracle/game/index.js.map +1 -0
  173. package/dist/core/types/oracle/game/zod.game.types.d.ts +31 -0
  174. package/dist/core/types/oracle/game/zod.game.types.js +22 -0
  175. package/dist/core/types/oracle/game/zod.game.types.js.map +1 -0
  176. package/dist/core/types/oracle/index.d.ts +4 -0
  177. package/dist/core/types/oracle/index.js +21 -0
  178. package/dist/core/types/oracle/index.js.map +1 -0
  179. package/dist/core/types/oracle/market/index.d.ts +3 -0
  180. package/dist/core/types/oracle/market/index.js +20 -0
  181. package/dist/core/types/oracle/market/index.js.map +1 -0
  182. package/dist/core/types/oracle/market/markets.types.d.ts +95 -0
  183. package/dist/core/types/oracle/market/markets.types.js +35 -0
  184. package/dist/core/types/oracle/market/markets.types.js.map +1 -0
  185. package/dist/core/types/oracle/market/odds.types.d.ts +14 -0
  186. package/dist/core/types/oracle/market/odds.types.js +3 -0
  187. package/dist/core/types/oracle/market/odds.types.js.map +1 -0
  188. package/dist/core/types/oracle/market/positions.types.d.ts +57 -0
  189. package/dist/core/types/oracle/market/positions.types.js +3 -0
  190. package/dist/core/types/oracle/market/positions.types.js.map +1 -0
  191. package/dist/core/types/oracle/requests/game.request.types.d.ts +170 -0
  192. package/dist/core/types/oracle/requests/game.request.types.js +126 -0
  193. package/dist/core/types/oracle/requests/game.request.types.js.map +1 -0
  194. package/dist/core/types/oracle/requests/game.response.types.d.ts +8 -0
  195. package/dist/core/types/oracle/requests/game.response.types.js +3 -0
  196. package/dist/core/types/oracle/requests/game.response.types.js.map +1 -0
  197. package/dist/core/types/oracle/requests/index.d.ts +5 -0
  198. package/dist/core/types/oracle/requests/index.js +22 -0
  199. package/dist/core/types/oracle/requests/index.js.map +1 -0
  200. package/dist/core/types/oracle/requests/market.request.types.d.ts +63 -0
  201. package/dist/core/types/oracle/requests/market.request.types.js +41 -0
  202. package/dist/core/types/oracle/requests/market.request.types.js.map +1 -0
  203. package/dist/core/types/oracle/requests/odds.response.types.d.ts +2 -0
  204. package/dist/core/types/oracle/requests/odds.response.types.js +3 -0
  205. package/dist/core/types/oracle/requests/odds.response.types.js.map +1 -0
  206. package/dist/core/types/oracle/requests/user.request.type.d.ts +4 -0
  207. package/dist/core/types/oracle/requests/user.request.type.js +3 -0
  208. package/dist/core/types/oracle/requests/user.request.type.js.map +1 -0
  209. package/dist/core/types/privy.types.d.ts +4 -0
  210. package/dist/core/types/privy.types.js +9 -0
  211. package/dist/core/types/privy.types.js.map +1 -0
  212. package/dist/core/utils/converters.utils.d.ts +29 -0
  213. package/dist/core/utils/converters.utils.js +97 -0
  214. package/dist/core/utils/converters.utils.js.map +1 -0
  215. package/dist/core/utils/game.utils.d.ts +4 -0
  216. package/dist/core/utils/game.utils.js +79 -0
  217. package/dist/core/utils/game.utils.js.map +1 -0
  218. package/dist/core/utils/index.d.ts +4 -0
  219. package/dist/core/utils/index.js +21 -0
  220. package/dist/core/utils/index.js.map +1 -0
  221. package/dist/core/utils/misc.utils.d.ts +14 -0
  222. package/dist/core/utils/misc.utils.js +33 -0
  223. package/dist/core/utils/misc.utils.js.map +1 -0
  224. package/dist/core/utils/position.utils.d.ts +18 -0
  225. package/dist/core/utils/position.utils.js +68 -0
  226. package/dist/core/utils/position.utils.js.map +1 -0
  227. package/dist/core/validators/bytes.validators.d.ts +32 -0
  228. package/dist/core/validators/bytes.validators.js +47 -0
  229. package/dist/core/validators/bytes.validators.js.map +1 -0
  230. package/dist/core/validators/index.d.ts +2 -0
  231. package/dist/core/validators/index.js +19 -0
  232. package/dist/core/validators/index.js.map +1 -0
  233. package/dist/core/validators/mongo.validators.d.ts +2 -0
  234. package/dist/core/validators/mongo.validators.js +10 -0
  235. package/dist/core/validators/mongo.validators.js.map +1 -0
  236. package/dist/index.d.ts +1 -0
  237. package/dist/index.js +23 -0
  238. package/dist/index.js.map +1 -0
  239. package/dist/react/hooks/auth/index.d.ts +1 -0
  240. package/dist/react/hooks/auth/index.js +18 -0
  241. package/dist/react/hooks/auth/index.js.map +1 -0
  242. package/dist/react/hooks/auth/useAuthHeaders.d.ts +45 -0
  243. package/dist/react/hooks/auth/useAuthHeaders.js +58 -0
  244. package/dist/react/hooks/auth/useAuthHeaders.js.map +1 -0
  245. package/dist/react/hooks/contracts/erc20/index.d.ts +6 -0
  246. package/dist/react/hooks/contracts/erc20/index.js +23 -0
  247. package/dist/react/hooks/contracts/erc20/index.js.map +1 -0
  248. package/dist/react/hooks/contracts/erc20/useApproveErc20.d.ts +13 -0
  249. package/dist/react/hooks/contracts/erc20/useApproveErc20.js +28 -0
  250. package/dist/react/hooks/contracts/erc20/useApproveErc20.js.map +1 -0
  251. package/dist/react/hooks/contracts/erc20/useErc20Allowance.d.ts +10 -0
  252. package/dist/react/hooks/contracts/erc20/useErc20Allowance.js +34 -0
  253. package/dist/react/hooks/contracts/erc20/useErc20Allowance.js.map +1 -0
  254. package/dist/react/hooks/contracts/erc20/useErc20Balance.d.ts +22 -0
  255. package/dist/react/hooks/contracts/erc20/useErc20Balance.js +95 -0
  256. package/dist/react/hooks/contracts/erc20/useErc20Balance.js.map +1 -0
  257. package/dist/react/hooks/contracts/erc20/useErc20Decimals.d.ts +8 -0
  258. package/dist/react/hooks/contracts/erc20/useErc20Decimals.js +28 -0
  259. package/dist/react/hooks/contracts/erc20/useErc20Decimals.js.map +1 -0
  260. package/dist/react/hooks/contracts/erc20/useErc20Symbol.d.ts +8 -0
  261. package/dist/react/hooks/contracts/erc20/useErc20Symbol.js +28 -0
  262. package/dist/react/hooks/contracts/erc20/useErc20Symbol.js.map +1 -0
  263. package/dist/react/hooks/contracts/erc20/useTransferErc20.d.ts +13 -0
  264. package/dist/react/hooks/contracts/erc20/useTransferErc20.js +31 -0
  265. package/dist/react/hooks/contracts/erc20/useTransferErc20.js.map +1 -0
  266. package/dist/react/hooks/contracts/index.d.ts +3 -0
  267. package/dist/react/hooks/contracts/index.js +20 -0
  268. package/dist/react/hooks/contracts/index.js.map +1 -0
  269. package/dist/react/hooks/contracts/useContracts.d.ts +120 -0
  270. package/dist/react/hooks/contracts/useContracts.js +81 -0
  271. package/dist/react/hooks/contracts/useContracts.js.map +1 -0
  272. package/dist/react/hooks/contracts/useLevrMarketContractAddresses.d.ts +3 -0
  273. package/dist/react/hooks/contracts/useLevrMarketContractAddresses.js +27 -0
  274. package/dist/react/hooks/contracts/useLevrMarketContractAddresses.js.map +1 -0
  275. package/dist/react/hooks/index.d.ts +2 -0
  276. package/dist/react/hooks/index.js +19 -0
  277. package/dist/react/hooks/index.js.map +1 -0
  278. package/dist/react/index.d.ts +6 -0
  279. package/dist/react/index.js +23 -0
  280. package/dist/react/index.js.map +1 -0
  281. package/dist/react/injectedDependencies.d.ts +78 -0
  282. package/dist/react/injectedDependencies.js +94 -0
  283. package/dist/react/injectedDependencies.js.map +1 -0
  284. package/dist/react/queryClient.d.ts +9 -0
  285. package/dist/react/queryClient.js +13 -0
  286. package/dist/react/queryClient.js.map +1 -0
  287. package/dist/react/queryKeys.d.ts +17 -0
  288. package/dist/react/queryKeys.js +23 -0
  289. package/dist/react/queryKeys.js.map +1 -0
  290. package/dist/react/types/contracts.types.d.ts +4 -0
  291. package/dist/react/types/contracts.types.js +3 -0
  292. package/dist/react/types/contracts.types.js.map +1 -0
  293. package/dist/react/types/index.d.ts +1 -0
  294. package/dist/react/types/index.js +18 -0
  295. package/dist/react/types/index.js.map +1 -0
  296. package/dist/server/config/cloudflare.d.ts +30 -0
  297. package/dist/server/config/cloudflare.js +45 -0
  298. package/dist/server/config/cloudflare.js.map +1 -0
  299. package/dist/server/config/constants.d.ts +1 -0
  300. package/dist/server/config/constants.js +7 -0
  301. package/dist/server/config/constants.js.map +1 -0
  302. package/dist/server/config/dotenv.d.ts +35 -0
  303. package/dist/server/config/dotenv.js +42 -0
  304. package/dist/server/config/dotenv.js.map +1 -0
  305. package/dist/server/config/index.d.ts +9 -0
  306. package/dist/server/config/index.js +31 -0
  307. package/dist/server/config/index.js.map +1 -0
  308. package/dist/server/config/kms.d.ts +22 -0
  309. package/dist/server/config/kms.js +54 -0
  310. package/dist/server/config/kms.js.map +1 -0
  311. package/dist/server/config/prisma.d.ts +20 -0
  312. package/dist/server/config/prisma.js +40 -0
  313. package/dist/server/config/prisma.js.map +1 -0
  314. package/dist/server/config/redis.d.ts +57 -0
  315. package/dist/server/config/redis.js +121 -0
  316. package/dist/server/config/redis.js.map +1 -0
  317. package/dist/server/config/urls.d.ts +49 -0
  318. package/dist/server/config/urls.js +7 -0
  319. package/dist/server/config/urls.js.map +1 -0
  320. package/dist/server/config/winston.d.ts +3 -0
  321. package/dist/server/config/winston.js +14 -0
  322. package/dist/server/config/winston.js.map +1 -0
  323. package/dist/server/contracts/clients/index.d.ts +1 -0
  324. package/dist/server/contracts/clients/index.js +18 -0
  325. package/dist/server/contracts/clients/index.js.map +1 -0
  326. package/dist/server/contracts/clients/ozRelayerService.d.ts +18 -0
  327. package/dist/server/contracts/clients/ozRelayerService.js +167 -0
  328. package/dist/server/contracts/clients/ozRelayerService.js.map +1 -0
  329. package/dist/server/contracts/index.d.ts +2 -0
  330. package/dist/server/contracts/index.js +19 -0
  331. package/dist/server/contracts/index.js.map +1 -0
  332. package/dist/server/contracts/instances.d.ts +20 -0
  333. package/dist/server/contracts/instances.js +28 -0
  334. package/dist/server/contracts/instances.js.map +1 -0
  335. package/dist/server/index.d.ts +11 -0
  336. package/dist/server/index.js +36 -0
  337. package/dist/server/index.js.map +1 -0
  338. package/dist/server/instrumentation.d.ts +9 -0
  339. package/dist/server/instrumentation.js +37 -0
  340. package/dist/server/instrumentation.js.map +1 -0
  341. package/dist/server/liquidation-engine/index.d.ts +3 -0
  342. package/dist/server/liquidation-engine/index.js +20 -0
  343. package/dist/server/liquidation-engine/index.js.map +1 -0
  344. package/dist/server/liquidation-engine/redis.cache.manager/cache.keys.util.d.ts +10 -0
  345. package/dist/server/liquidation-engine/redis.cache.manager/cache.keys.util.js +15 -0
  346. package/dist/server/liquidation-engine/redis.cache.manager/cache.keys.util.js.map +1 -0
  347. package/dist/server/liquidation-engine/redis.cache.manager/prices.set.manager.d.ts +124 -0
  348. package/dist/server/liquidation-engine/redis.cache.manager/prices.set.manager.js +242 -0
  349. package/dist/server/liquidation-engine/redis.cache.manager/prices.set.manager.js.map +1 -0
  350. package/dist/server/liquidation-engine/redis.cache.manager/prices.set.manager.test.d.ts +1 -0
  351. package/dist/server/liquidation-engine/redis.cache.manager/prices.set.manager.test.js +115 -0
  352. package/dist/server/liquidation-engine/redis.cache.manager/prices.set.manager.test.js.map +1 -0
  353. package/dist/server/liquidation-engine/types/index.d.ts +1 -0
  354. package/dist/server/liquidation-engine/types/index.js +3 -0
  355. package/dist/server/liquidation-engine/types/index.js.map +1 -0
  356. package/dist/server/middleware/auth/cloudflare.handler.d.ts +6 -0
  357. package/dist/server/middleware/auth/cloudflare.handler.js +37 -0
  358. package/dist/server/middleware/auth/cloudflare.handler.js.map +1 -0
  359. package/dist/server/middleware/auth/hmac.handler.d.ts +11 -0
  360. package/dist/server/middleware/auth/hmac.handler.js +157 -0
  361. package/dist/server/middleware/auth/hmac.handler.js.map +1 -0
  362. package/dist/server/middleware/auth/index.d.ts +3 -0
  363. package/dist/server/middleware/auth/index.js +20 -0
  364. package/dist/server/middleware/auth/index.js.map +1 -0
  365. package/dist/server/middleware/auth/privy.handler.d.ts +7 -0
  366. package/dist/server/middleware/auth/privy.handler.js +31 -0
  367. package/dist/server/middleware/auth/privy.handler.js.map +1 -0
  368. package/dist/server/middleware/index.d.ts +2 -0
  369. package/dist/server/middleware/index.js +19 -0
  370. package/dist/server/middleware/index.js.map +1 -0
  371. package/dist/server/middleware/multiAuth.examples.d.ts +46 -0
  372. package/dist/server/middleware/multiAuth.examples.js +123 -0
  373. package/dist/server/middleware/multiAuth.examples.js.map +1 -0
  374. package/dist/server/middleware/multiAuth.middleware.d.ts +30 -0
  375. package/dist/server/middleware/multiAuth.middleware.js +90 -0
  376. package/dist/server/middleware/multiAuth.middleware.js.map +1 -0
  377. package/dist/server/middleware/rateLimit.middleware.d.ts +1 -0
  378. package/dist/server/middleware/rateLimit.middleware.js +19 -0
  379. package/dist/server/middleware/rateLimit.middleware.js.map +1 -0
  380. package/dist/server/oracle/index.d.ts +3 -0
  381. package/dist/server/oracle/index.js +20 -0
  382. package/dist/server/oracle/index.js.map +1 -0
  383. package/dist/server/oracle/redis-cache-manager/cache.keys.utils.d.ts +90 -0
  384. package/dist/server/oracle/redis-cache-manager/cache.keys.utils.js +147 -0
  385. package/dist/server/oracle/redis-cache-manager/cache.keys.utils.js.map +1 -0
  386. package/dist/server/oracle/redis-cache-manager/channels.d.ts +2 -0
  387. package/dist/server/oracle/redis-cache-manager/channels.js +11 -0
  388. package/dist/server/oracle/redis-cache-manager/channels.js.map +1 -0
  389. package/dist/server/oracle/redis-cache-manager/game.cache.service.d.ts +184 -0
  390. package/dist/server/oracle/redis-cache-manager/game.cache.service.js +698 -0
  391. package/dist/server/oracle/redis-cache-manager/game.cache.service.js.map +1 -0
  392. package/dist/server/oracle/redis-cache-manager/index.d.ts +4 -0
  393. package/dist/server/oracle/redis-cache-manager/index.js +21 -0
  394. package/dist/server/oracle/redis-cache-manager/index.js.map +1 -0
  395. package/dist/server/oracle/redis-cache-manager/market.cache.service.d.ts +115 -0
  396. package/dist/server/oracle/redis-cache-manager/market.cache.service.js +279 -0
  397. package/dist/server/oracle/redis-cache-manager/market.cache.service.js.map +1 -0
  398. package/dist/server/oracle/rmq-manager/base.queue.manager.d.ts +21 -0
  399. package/dist/server/oracle/rmq-manager/base.queue.manager.js +128 -0
  400. package/dist/server/oracle/rmq-manager/base.queue.manager.js.map +1 -0
  401. package/dist/server/oracle/rmq-manager/index.d.ts +2 -0
  402. package/dist/server/oracle/rmq-manager/index.js +19 -0
  403. package/dist/server/oracle/rmq-manager/index.js.map +1 -0
  404. package/dist/server/oracle/rmq-manager/queue.configs.d.ts +5 -0
  405. package/dist/server/oracle/rmq-manager/queue.configs.js +38 -0
  406. package/dist/server/oracle/rmq-manager/queue.configs.js.map +1 -0
  407. package/dist/server/oracle/types/index.d.ts +2 -0
  408. package/dist/server/oracle/types/index.js +19 -0
  409. package/dist/server/oracle/types/index.js.map +1 -0
  410. package/dist/server/oracle/types/providers/index.d.ts +4 -0
  411. package/dist/server/oracle/types/providers/index.js +21 -0
  412. package/dist/server/oracle/types/providers/index.js.map +1 -0
  413. package/dist/server/oracle/types/providers/lsports.types.d.ts +148 -0
  414. package/dist/server/oracle/types/providers/lsports.types.js +13 -0
  415. package/dist/server/oracle/types/providers/lsports.types.js.map +1 -0
  416. package/dist/server/oracle/types/providers/optic.odds.types.d.ts +293 -0
  417. package/dist/server/oracle/types/providers/optic.odds.types.js +140 -0
  418. package/dist/server/oracle/types/providers/optic.odds.types.js.map +1 -0
  419. package/dist/server/oracle/types/providers/providers.types.d.ts +5 -0
  420. package/dist/server/oracle/types/providers/providers.types.js +10 -0
  421. package/dist/server/oracle/types/providers/providers.types.js.map +1 -0
  422. package/dist/server/oracle/types/providers/rundown.types.d.ts +194 -0
  423. package/dist/server/oracle/types/providers/rundown.types.js +22 -0
  424. package/dist/server/oracle/types/providers/rundown.types.js.map +1 -0
  425. package/dist/server/oracle/types/queue/index.d.ts +2 -0
  426. package/dist/server/oracle/types/queue/index.js +19 -0
  427. package/dist/server/oracle/types/queue/index.js.map +1 -0
  428. package/dist/server/oracle/types/queue/queue.constant.d.ts +10 -0
  429. package/dist/server/oracle/types/queue/queue.constant.js +14 -0
  430. package/dist/server/oracle/types/queue/queue.constant.js.map +1 -0
  431. package/dist/server/oracle/types/queue/queue.types.d.ts +5 -0
  432. package/dist/server/oracle/types/queue/queue.types.js +3 -0
  433. package/dist/server/oracle/types/queue/queue.types.js.map +1 -0
  434. package/dist/server/prisma/index.d.ts +2 -0
  435. package/dist/server/prisma/index.js +24 -0
  436. package/dist/server/prisma/index.js.map +1 -0
  437. package/dist/server/repositories/apiKey.repository.d.ts +7 -0
  438. package/dist/server/repositories/apiKey.repository.js +19 -0
  439. package/dist/server/repositories/apiKey.repository.js.map +1 -0
  440. package/dist/server/repositories/index.d.ts +1 -0
  441. package/dist/server/repositories/index.js +18 -0
  442. package/dist/server/repositories/index.js.map +1 -0
  443. package/dist/server/services/cloudflare.service.d.ts +12 -0
  444. package/dist/server/services/cloudflare.service.js +24 -0
  445. package/dist/server/services/cloudflare.service.js.map +1 -0
  446. package/dist/server/services/crypto.service.d.ts +17 -0
  447. package/dist/server/services/crypto.service.js +50 -0
  448. package/dist/server/services/crypto.service.js.map +1 -0
  449. package/dist/server/services/hmac.service.d.ts +52 -0
  450. package/dist/server/services/hmac.service.js +115 -0
  451. package/dist/server/services/hmac.service.js.map +1 -0
  452. package/dist/server/services/index.d.ts +5 -0
  453. package/dist/server/services/index.js +22 -0
  454. package/dist/server/services/index.js.map +1 -0
  455. package/dist/server/services/presigned.urls.d.ts +11 -0
  456. package/dist/server/services/presigned.urls.js +41 -0
  457. package/dist/server/services/presigned.urls.js.map +1 -0
  458. package/dist/server/services/privy.service.d.ts +30 -0
  459. package/dist/server/services/privy.service.js +122 -0
  460. package/dist/server/services/privy.service.js.map +1 -0
  461. package/dist/server/test-relayers.d.ts +1 -0
  462. package/dist/server/test-relayers.js +17 -0
  463. package/dist/server/test-relayers.js.map +1 -0
  464. package/dist/server/types/auth.types.d.ts +8 -0
  465. package/dist/server/types/auth.types.js +3 -0
  466. package/dist/server/types/auth.types.js.map +1 -0
  467. package/dist/server/types/global.types.d.ts +35 -0
  468. package/dist/server/types/global.types.js +4 -0
  469. package/dist/server/types/global.types.js.map +1 -0
  470. package/dist/server/types/index.d.ts +2 -0
  471. package/dist/server/types/index.js +19 -0
  472. package/dist/server/types/index.js.map +1 -0
  473. package/dist/server/utils/express.utils.d.ts +24 -0
  474. package/dist/server/utils/express.utils.js +36 -0
  475. package/dist/server/utils/express.utils.js.map +1 -0
  476. package/dist/server/utils/index.d.ts +2 -0
  477. package/dist/server/utils/index.js +19 -0
  478. package/dist/server/utils/index.js.map +1 -0
  479. package/dist/server/utils/tracing/index.d.ts +2 -0
  480. package/dist/server/utils/tracing/index.js +19 -0
  481. package/dist/server/utils/tracing/index.js.map +1 -0
  482. package/dist/server/utils/tracing/trace.d.ts +12 -0
  483. package/dist/server/utils/tracing/trace.js +50 -0
  484. package/dist/server/utils/tracing/trace.js.map +1 -0
  485. package/dist/server/utils/tracing/wrap.module.with.tracing.d.ts +126 -0
  486. package/dist/server/utils/tracing/wrap.module.with.tracing.js +202 -0
  487. package/dist/server/utils/tracing/wrap.module.with.tracing.js.map +1 -0
  488. package/package.json +126 -0
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.cryptoService = void 0;
7
+ const client_kms_1 = require("@aws-sdk/client-kms");
8
+ const crypto_1 = __importDefault(require("crypto"));
9
+ const lodash_1 = __importDefault(require("lodash"));
10
+ const config_1 = require("../config");
11
+ const CACHE_TTL = 5 * 60; // 5 minutes in seconds
12
+ exports.cryptoService = {
13
+ async generateDataKey() {
14
+ const { client, KeyId } = config_1.kmsClientManager;
15
+ const gdk = await client.send(new client_kms_1.GenerateDataKeyCommand({ KeyId, KeySpec: "AES_256" }));
16
+ if (lodash_1.default.isNil(gdk.Plaintext) || lodash_1.default.isNil(gdk.CiphertextBlob))
17
+ throw new Error("Failed to generate data key");
18
+ const secretKey = Buffer.from(gdk.Plaintext).toString("base64");
19
+ const ciphertext = Buffer.from(gdk.CiphertextBlob).toString("base64");
20
+ return { ciphertext, secretKey };
21
+ },
22
+ signRequest({ method, path, ts, body, nonce, secretKey }) {
23
+ const bodyString = body && Object.keys((body ?? {})).length > 0 ? JSON.stringify(body) : "";
24
+ const bodyHash = crypto_1.default.createHash("sha256").update(bodyString).digest("hex");
25
+ const toSign = `${method}\n${path ?? ""}\n${ts.toString()}\n${bodyHash}\n${nonce}`;
26
+ const h = crypto_1.default.createHmac("sha256", secretKey);
27
+ h.update(toSign);
28
+ return h.digest("base64");
29
+ },
30
+ async getSecretKey(apiKeyId, ciphertextBase64) {
31
+ const cacheKey = `api_key_secret:${apiKeyId}`;
32
+ try {
33
+ const cached = await config_1.redisClientManager.primaryClient.get(cacheKey);
34
+ if (cached)
35
+ return cached;
36
+ const ciphertext = Buffer.from(ciphertextBase64, "base64");
37
+ const resp = await config_1.kmsClientManager.client.send(new client_kms_1.DecryptCommand({ CiphertextBlob: ciphertext }));
38
+ if (!resp.Plaintext)
39
+ throw new Error("KMS Decrypt failed: No plaintext returned");
40
+ const secretKey = Buffer.from(resp.Plaintext).toString("base64");
41
+ await config_1.redisClientManager.primaryClient.setex(cacheKey, CACHE_TTL, secretKey);
42
+ return secretKey;
43
+ }
44
+ catch (err) {
45
+ config_1.logger.error("Failed to get secret key:", err);
46
+ throw err;
47
+ }
48
+ },
49
+ };
50
+ //# sourceMappingURL=crypto.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crypto.service.js","sourceRoot":"","sources":["../../../src/server/services/crypto.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ import type { AxiosInstance } from "axios";
2
+ interface GenerateAuthHeadersParams {
3
+ apiKeyId: string;
4
+ secretKey: string;
5
+ method: string;
6
+ path: string;
7
+ body?: any;
8
+ nonce?: string;
9
+ isService?: boolean;
10
+ }
11
+ interface HmacAuthHeaders {
12
+ "x-levr-auth-type": string;
13
+ Authorization: string;
14
+ "x-request-timestamp": string;
15
+ "x-request-nonce": string;
16
+ }
17
+ /**
18
+ * Handles HMAC signing and optional Axios integration
19
+ */
20
+ declare class HmacService {
21
+ private initialized;
22
+ private serviceApiKeyId?;
23
+ private serviceSecretKey?;
24
+ init(): void;
25
+ generateAuthHeaders({ apiKeyId, secretKey, method, path, body, nonce, isService, }: GenerateAuthHeadersParams): HmacAuthHeaders;
26
+ generateServiceAuthHeaders(params: Omit<GenerateAuthHeadersParams, "isService" | "apiKeyId" | "secretKey"> & Partial<Pick<GenerateAuthHeadersParams, "apiKeyId" | "secretKey">>): HmacAuthHeaders;
27
+ /**
28
+ * Attaches an Axios request interceptor that signs requests when config.sign === true
29
+ *
30
+ * Usage example:
31
+ *
32
+ * import axios from "axios"
33
+ * import { hmacService } from "@levr/shared/src/server/services/hmac.service"
34
+ *
35
+ * // On startup (loads SERVICE_API_KEY_ID and SERVICE_API_KEY_SECRET from env)
36
+ * hmacService.init()
37
+ *
38
+ * // Create axios client and attach the interceptor
39
+ * const client = axios.create({ baseURL: "https://api.my-service.com" })
40
+ * hmacService.attachInterceptor(client)
41
+ *
42
+ * // Make a signed request by setting `sign: true`
43
+ * await client.post(
44
+ * "/v1/some/endpoint",
45
+ * { foo: "bar" },
46
+ * { sign: true }
47
+ * )
48
+ */
49
+ attachInterceptor(client: AxiosInstance): void;
50
+ }
51
+ export declare const hmacService: HmacService;
52
+ export {};
@@ -0,0 +1,115 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.hmacService = void 0;
7
+ const crypto_1 = __importDefault(require("crypto"));
8
+ const core_1 = require("../../core");
9
+ const dotenv_1 = require("../config/dotenv");
10
+ const crypto_service_1 = require("./crypto.service");
11
+ /**
12
+ * Handles HMAC signing and optional Axios integration
13
+ */
14
+ class HmacService {
15
+ constructor() {
16
+ this.initialized = false;
17
+ }
18
+ init() {
19
+ if (this.initialized)
20
+ return;
21
+ this.initialized = true;
22
+ const { SERVICE_API_KEY_ID, SERVICE_API_KEY_SECRET } = core_1.Config.init(dotenv_1.serviceHmacSchema);
23
+ this.serviceApiKeyId = SERVICE_API_KEY_ID;
24
+ this.serviceSecretKey = SERVICE_API_KEY_SECRET;
25
+ }
26
+ generateAuthHeaders({ apiKeyId, secretKey, method, path, body, nonce, isService = false, }) {
27
+ const ts = Date.now();
28
+ const actualNonce = nonce || crypto_1.default.randomBytes(16).toString("hex");
29
+ const signature = crypto_service_1.cryptoService.signRequest({
30
+ method: method.toUpperCase(),
31
+ path,
32
+ ts,
33
+ body,
34
+ nonce: actualNonce,
35
+ secretKey,
36
+ });
37
+ return {
38
+ "x-levr-auth-type": isService ? core_1.LevrAuth.SERVICE_HMAC : core_1.LevrAuth.HMAC,
39
+ Authorization: `HMAC ${apiKeyId}:${signature}`,
40
+ "x-request-timestamp": ts.toString(),
41
+ "x-request-nonce": actualNonce,
42
+ };
43
+ }
44
+ generateServiceAuthHeaders(params) {
45
+ const apiKeyId = params.apiKeyId ?? this.serviceApiKeyId;
46
+ const secretKey = params.secretKey ?? this.serviceSecretKey;
47
+ if (!apiKeyId || !secretKey) {
48
+ throw new Error("Service keys not initialized. Call hmacService.init() or pass apiKeyId and secretKey in params.");
49
+ }
50
+ return this.generateAuthHeaders({ ...params, apiKeyId, secretKey, isService: true });
51
+ }
52
+ /**
53
+ * Attaches an Axios request interceptor that signs requests when config.sign === true
54
+ *
55
+ * Usage example:
56
+ *
57
+ * import axios from "axios"
58
+ * import { hmacService } from "@levr/shared/src/server/services/hmac.service"
59
+ *
60
+ * // On startup (loads SERVICE_API_KEY_ID and SERVICE_API_KEY_SECRET from env)
61
+ * hmacService.init()
62
+ *
63
+ * // Create axios client and attach the interceptor
64
+ * const client = axios.create({ baseURL: "https://api.my-service.com" })
65
+ * hmacService.attachInterceptor(client)
66
+ *
67
+ * // Make a signed request by setting `sign: true`
68
+ * await client.post(
69
+ * "/v1/some/endpoint",
70
+ * { foo: "bar" },
71
+ * { sign: true }
72
+ * )
73
+ */
74
+ attachInterceptor(client) {
75
+ client.interceptors.request.use((config) => {
76
+ if (!config.sign)
77
+ return config; // skip if not explicitly signed
78
+ // Determine the pathname to sign (server expects path without query string)
79
+ // Support both absolute URLs and relative paths.
80
+ const rawUrl = config.url || "/";
81
+ let pathname;
82
+ if (rawUrl.startsWith("http://") || rawUrl.startsWith("https://")) {
83
+ try {
84
+ pathname = new URL(rawUrl).pathname;
85
+ }
86
+ catch {
87
+ // Fallback to splitting if URL parsing fails
88
+ pathname = rawUrl.split("?", 2)[0] || "/";
89
+ }
90
+ }
91
+ else {
92
+ pathname = rawUrl.split("?", 2)[0] || "/";
93
+ if (!pathname.startsWith("/"))
94
+ pathname = `/${pathname}`;
95
+ }
96
+ const headers = this.generateServiceAuthHeaders({
97
+ method: config.method?.toUpperCase() || "GET",
98
+ path: pathname,
99
+ body: config.data || {},
100
+ });
101
+ // Merge headers safely for both AxiosHeaders and plain object
102
+ const target = config.headers;
103
+ if (target && typeof target.set === "function") {
104
+ for (const [k, v] of Object.entries(headers))
105
+ target.set(k, v);
106
+ }
107
+ else {
108
+ config.headers = { ...config.headers, ...headers };
109
+ }
110
+ return config;
111
+ });
112
+ }
113
+ }
114
+ exports.hmacService = new HmacService();
115
+ //# sourceMappingURL=hmac.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hmac.service.js","sourceRoot":"","sources":["../../../src/server/services/hmac.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export * from "./cloudflare.service";
2
+ export * from "./crypto.service";
3
+ export * from "./hmac.service";
4
+ export * from "./privy.service";
5
+ export * from "./presigned.urls";
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./cloudflare.service"), exports);
18
+ __exportStar(require("./crypto.service"), exports);
19
+ __exportStar(require("./hmac.service"), exports);
20
+ __exportStar(require("./privy.service"), exports);
21
+ __exportStar(require("./presigned.urls"), exports);
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/server/services/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,uDAAoC;AACpC,mDAAgC;AAChC,iDAA8B;AAC9B,kDAA+B;AAC/B,mDAAgC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Handles AWS S3 presigned URL generation
3
+ */
4
+ declare class PresignedUrlService {
5
+ private initialized;
6
+ private s3?;
7
+ init(): void;
8
+ generatePresignedImageUrl(keyId: string): Promise<string>;
9
+ }
10
+ export declare const presignedUrlService: PresignedUrlService;
11
+ export {};
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.presignedUrlService = void 0;
4
+ const client_s3_1 = require("@aws-sdk/client-s3");
5
+ const s3_request_presigner_1 = require("@aws-sdk/s3-request-presigner");
6
+ const core_1 = require("../../core");
7
+ const config_1 = require("../config");
8
+ /**
9
+ * Handles AWS S3 presigned URL generation
10
+ */
11
+ class PresignedUrlService {
12
+ constructor() {
13
+ this.initialized = false;
14
+ }
15
+ init() {
16
+ if (this.initialized)
17
+ return;
18
+ this.initialized = true;
19
+ const { AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY } = core_1.Config.init(config_1.awsCredsSchema);
20
+ this.s3 = new client_s3_1.S3Client({
21
+ region: "ap-south-1",
22
+ credentials: {
23
+ accessKeyId: AWS_ACCESS_KEY_ID,
24
+ secretAccessKey: AWS_SECRET_ACCESS_KEY,
25
+ },
26
+ });
27
+ }
28
+ async generatePresignedImageUrl(keyId) {
29
+ if (!this.s3) {
30
+ throw new Error("S3 client not initialized. Call presignedUrlService.init().");
31
+ }
32
+ const command = new client_s3_1.GetObjectCommand({
33
+ Bucket: "levr-v1-assets-dev",
34
+ Key: keyId,
35
+ });
36
+ const imageUrl = await (0, s3_request_presigner_1.getSignedUrl)(this.s3, command, { expiresIn: 172800 }); // 48 hour expiry
37
+ return imageUrl;
38
+ }
39
+ }
40
+ exports.presignedUrlService = new PresignedUrlService();
41
+ //# sourceMappingURL=presigned.urls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presigned.urls.js","sourceRoot":"","sources":["../../../src/server/services/presigned.urls.ts"],"names":[],"mappings":";;;AAAA,kDAA+D;AAC/D,wEAA4D;AAC5D,qCAAmC;AACnC,sCAA0C;AAE1C;;GAEG;AACH,MAAM,mBAAmB;IAAzB;QACY,gBAAW,GAAG,KAAK,CAAA;IA8B/B,CAAC;IA3BG,IAAI;QACA,IAAI,IAAI,CAAC,WAAW;YAAE,OAAM;QAC5B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAA;QAEvB,MAAM,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,GAAG,aAAM,CAAC,IAAI,CAAC,uBAAc,CAAC,CAAA;QAChF,IAAI,CAAC,EAAE,GAAG,IAAI,oBAAQ,CAAC;YACnB,MAAM,EAAE,YAAY;YACpB,WAAW,EAAE;gBACT,WAAW,EAAE,iBAAiB;gBAC9B,eAAe,EAAE,qBAAqB;aACzC;SACJ,CAAC,CAAA;IACN,CAAC;IAED,KAAK,CAAC,yBAAyB,CAAC,KAAa;QACzC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAA;QAClF,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,4BAAgB,CAAC;YACjC,MAAM,EAAE,oBAAoB;YAC5B,GAAG,EAAE,KAAK;SACb,CAAC,CAAA;QAEF,MAAM,QAAQ,GAAG,MAAM,IAAA,mCAAY,EAAC,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAA,CAAC,iBAAiB;QAC9F,OAAO,QAAQ,CAAA;IACnB,CAAC;CACJ;AAEY,QAAA,mBAAmB,GAAG,IAAI,mBAAmB,EAAE,CAAA"}
@@ -0,0 +1,30 @@
1
+ import { User as PrivyUser } from "@privy-io/node";
2
+ import { Address } from "viem";
3
+ import { PrivyRole } from "../../core";
4
+ interface AuthRequest {
5
+ privyToken?: string;
6
+ privyIdToken?: string;
7
+ ethAddress?: string;
8
+ role: PrivyRole;
9
+ }
10
+ declare class PrivyService {
11
+ authenticate({ privyToken, privyIdToken, ethAddress, role }: AuthRequest): Promise<PrivyUser | undefined>;
12
+ /**
13
+ * Fetch a Privy user by id. We don't always know whether the user was created
14
+ * under the regular "User" app or the Admin app, so try the User client first
15
+ * and fall back to the Admin client if not found.
16
+ */
17
+ getUserById(userId: string): Promise<PrivyUser | undefined>;
18
+ /**
19
+ * Gets the user's Ethereum wallet address, prioritizing external wallets over Privy wallets.
20
+ * Returns the first external wallet found, or falls back to a Privy wallet if none exist.
21
+ */
22
+ getUserEthAddress: (user: PrivyUser) => Address | undefined;
23
+ /**
24
+ * Verifies that an Ethereum address belongs to a user by checking their linked accounts.
25
+ */
26
+ private verifyUserOwnsAddress;
27
+ private getPrivyClients;
28
+ }
29
+ export declare const privyService: PrivyService;
30
+ export {};
@@ -0,0 +1,122 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __importDefault = (this && this.__importDefault) || function (mod) {
9
+ return (mod && mod.__esModule) ? mod : { "default": mod };
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.privyService = void 0;
13
+ const node_1 = require("@privy-io/node");
14
+ const ms_1 = __importDefault(require("ms"));
15
+ const typescript_memoize_1 = require("typescript-memoize");
16
+ const viem_1 = require("viem");
17
+ const zod_1 = __importDefault(require("zod"));
18
+ const core_1 = require("../../core");
19
+ const constants_1 = require("../../core/privy/constants");
20
+ const config_1 = require("../config");
21
+ class PrivyService {
22
+ constructor() {
23
+ /**
24
+ * Gets the user's Ethereum wallet address, prioritizing external wallets over Privy wallets.
25
+ * Returns the first external wallet found, or falls back to a Privy wallet if none exist.
26
+ */
27
+ this.getUserEthAddress = (user) => {
28
+ let address = undefined;
29
+ for (const account of user.linked_accounts) {
30
+ if (account.type !== "wallet" || account.chain_type !== "ethereum")
31
+ continue;
32
+ address = account.address;
33
+ if (account.wallet_client_type !== "privy")
34
+ break;
35
+ }
36
+ return address ? (0, viem_1.getAddress)(address) : undefined;
37
+ };
38
+ /**
39
+ * Verifies that an Ethereum address belongs to a user by checking their linked accounts.
40
+ */
41
+ this.verifyUserOwnsAddress = (user, addressToVerify) => {
42
+ return user.linked_accounts.some((account) => account.type === "wallet" &&
43
+ account.chain_type === "ethereum" &&
44
+ account.address?.toLowerCase() === addressToVerify.toLowerCase());
45
+ };
46
+ }
47
+ async authenticate({ privyToken, privyIdToken, ethAddress, role }) {
48
+ if (!privyToken || !privyIdToken)
49
+ return undefined;
50
+ const privyClient = this.getPrivyClients()[role];
51
+ try {
52
+ await privyClient.utils().auth().verifyAuthToken(privyToken);
53
+ const user = await privyClient.users().get({ id_token: privyIdToken });
54
+ if (ethAddress && !this.verifyUserOwnsAddress(user, ethAddress)) {
55
+ config_1.logger.warn(`User ${user.id} attempted to authenticate with an unlinked address ${ethAddress}.`);
56
+ return undefined;
57
+ }
58
+ return user;
59
+ }
60
+ catch (error) {
61
+ config_1.logger.warn(`Privy authentication failed with error ${error.message}.`);
62
+ config_1.logger.error(error);
63
+ }
64
+ }
65
+ /**
66
+ * Fetch a Privy user by id. We don't always know whether the user was created
67
+ * under the regular "User" app or the Admin app, so try the User client first
68
+ * and fall back to the Admin client if not found.
69
+ */
70
+ async getUserById(userId) {
71
+ const clients = this.getPrivyClients();
72
+ // Try regular user client first
73
+ try {
74
+ const user = await clients[core_1.PrivyRole.User].users()._get(userId);
75
+ if (user)
76
+ return user;
77
+ }
78
+ catch (err) {
79
+ // Not fatal — fall through to admin client
80
+ config_1.logger.debug(`Privy user client lookup failed for id=${userId}: ${err?.message ?? err}`);
81
+ }
82
+ // Try admin client as a fallback
83
+ try {
84
+ const adminUser = await clients[core_1.PrivyRole.Admin].users()._get(userId);
85
+ if (adminUser)
86
+ return adminUser;
87
+ }
88
+ catch (err) {
89
+ config_1.logger.debug(`Privy admin client lookup failed for id=${userId}: ${err?.message ?? err}`);
90
+ }
91
+ return undefined;
92
+ }
93
+ getPrivyClients() {
94
+ const schema = zod_1.default.object({
95
+ PRIVY_APP_SECRET: zod_1.default.string().min(1),
96
+ PRIVY_ADMIN_APP_SECRET: zod_1.default.string().min(1),
97
+ });
98
+ const { PRIVY_APP_SECRET, PRIVY_ADMIN_APP_SECRET } = core_1.Config.init(schema);
99
+ const privyClient = new node_1.PrivyClient({
100
+ appId: constants_1.PRIVY_APP_ID,
101
+ appSecret: PRIVY_APP_SECRET,
102
+ jwtVerificationKey: constants_1.PRIVY_VERIFICATION_KEY,
103
+ });
104
+ const privyAdminClient = new node_1.PrivyClient({
105
+ appId: constants_1.PRIVY_ADMIN_APP_ID,
106
+ appSecret: PRIVY_ADMIN_APP_SECRET,
107
+ jwtVerificationKey: constants_1.PRIVY_ADMIN_VERIFICATION_KEY,
108
+ });
109
+ return {
110
+ [core_1.PrivyRole.User]: privyClient,
111
+ [core_1.PrivyRole.Admin]: privyAdminClient,
112
+ };
113
+ }
114
+ }
115
+ __decorate([
116
+ (0, typescript_memoize_1.MemoizeExpiring)((0, ms_1.default)("10m")) // TODO: cache with redis
117
+ ], PrivyService.prototype, "getUserById", null);
118
+ __decorate([
119
+ (0, typescript_memoize_1.Memoize)()
120
+ ], PrivyService.prototype, "getPrivyClients", null);
121
+ exports.privyService = new PrivyService();
122
+ //# sourceMappingURL=privy.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"privy.service.js","sourceRoot":"","sources":["../../../src/server/services/privy.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const index_1 = require("./index");
4
+ index_1.redisClientManager.init({ db: index_1.RedisDb.AUTH });
5
+ const test = async () => {
6
+ const storage = await (0, index_1.getLevrContractWithRelayer)("storage", index_1.LevrChain.MONAD_TESTNET, { relayer: index_1.LevrRelayerGroup.GAME_ADMIN });
7
+ const value = BigInt(Date.now());
8
+ console.log(`Storing value: ${value.toString()}`);
9
+ const hash = await storage.write.store([value, false]);
10
+ console.log("Transaction hash:", hash);
11
+ const result = await storage.read.retrieve();
12
+ console.log("Stored value:", result.toString());
13
+ };
14
+ Promise.all([test(), test() /*test(), test(), test(), test(), test(), test(), test(), test()*/])
15
+ .catch(console.error)
16
+ .finally(() => process.exit(0));
17
+ //# sourceMappingURL=test-relayers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-relayers.js","sourceRoot":"","sources":["../../src/server/test-relayers.ts"],"names":[],"mappings":";;AAAA,mCAA8G;AAE9G,0BAAkB,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,eAAO,CAAC,IAAI,EAAE,CAAC,CAAA;AAE7C,MAAM,IAAI,GAAG,KAAK,IAAmB,EAAE;IACnC,MAAM,OAAO,GAAG,MAAM,IAAA,kCAA0B,EAAC,SAAS,EAAE,iBAAS,CAAC,aAAa,EAAE,EAAE,OAAO,EAAE,wBAAgB,CAAC,UAAU,EAAE,CAAC,CAAA;IAC9H,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAA;IAChC,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;IACjD,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAA;IACtD,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,IAAI,CAAC,CAAA;IACtC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAA;IAC5C,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAA;AACnD,CAAC,CAAA;AAED,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,kEAAkE,CAAC,CAAC;KAC3F,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;KACpB,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Authentication result from individual auth handlers
3
+ */
4
+ export interface AuthResult {
5
+ success: boolean;
6
+ error?: string;
7
+ statusCode?: number;
8
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=auth.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.types.js","sourceRoot":"","sources":["../../../src/server/types/auth.types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,35 @@
1
+ import type { User as PrivyUser } from "@privy-io/node";
2
+ import "axios";
3
+ import type { Address } from "viem";
4
+ import type { LevrService } from "../../core";
5
+ declare module "axios" {
6
+ interface AxiosRequestConfig {
7
+ sign?: boolean;
8
+ }
9
+ interface InternalAxiosRequestConfig {
10
+ sign?: boolean;
11
+ }
12
+ }
13
+ declare module "express-serve-static-core" {
14
+ interface Request {
15
+ /**
16
+ * Authenticated Privy user (set by PRIVY_USER or PRIVY_ADMIN auth)
17
+ */
18
+ privyUser?: PrivyUser;
19
+ /**
20
+ * Authenticated API key user (set by HMAC or SERVICE_HMAC auth)
21
+ */
22
+ apiUser?: {
23
+ id: string;
24
+ service?: LevrService | null;
25
+ };
26
+ /**
27
+ * Ethereum address associated with the authenticated user
28
+ */
29
+ ethAddress?: Address | null;
30
+ /**
31
+ * The authentication method used for this request
32
+ */
33
+ authMethod?: string;
34
+ }
35
+ }
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ require("axios");
4
+ //# sourceMappingURL=global.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"global.types.js","sourceRoot":"","sources":["../../../src/server/types/global.types.ts"],"names":[],"mappings":";;AACA,iBAAc"}
@@ -0,0 +1,2 @@
1
+ export * from "./auth.types";
2
+ export * from "./global.types";
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./auth.types"), exports);
18
+ __exportStar(require("./global.types"), exports);
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/server/types/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+CAA4B;AAC5B,iDAA8B"}
@@ -0,0 +1,24 @@
1
+ import type { Request, Response } from "express";
2
+ import type { ZodType } from "zod";
3
+ /**
4
+ * Validates a part of an Express request using a Zod schema and returns the validated data.
5
+ *
6
+ * @param schema - The Zod schema to validate against
7
+ * @param req - The Express request object
8
+ * @param part - The part of the request to validate ("body", "query", "params", etc.)
9
+ * @param res - The Express response object
10
+ * @returns The validated data if successful, undefined if validation fails (and sends 400 response)
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * const bodySchema = z.object({ name: z.string() });
15
+ *
16
+ * app.post("/api", (req, res) => {
17
+ * const body = validateRequest(bodySchema, req, "body", res);
18
+ * if (!body) return;
19
+ * // body is now typed as { name: string }
20
+ * console.log(body.name);
21
+ * });
22
+ * ```
23
+ */
24
+ export declare function validateRequest<T>(schema: ZodType<T>, req: Request, part: keyof Request, res: Response): T | undefined;