@luxexchange/api 1.0.0

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 (336) hide show
  1. package/.depcheckrc +17 -0
  2. package/.eslintrc.js +30 -0
  3. package/README.md +5 -0
  4. package/package.json +74 -0
  5. package/project.json +94 -0
  6. package/scripts/fixGraphQLApiTypes.mts +91 -0
  7. package/scripts/modifyTradingApiTypes.mts +232 -0
  8. package/src/client.ts +66 -0
  9. package/src/clients/auctions/createAuctionServiceClient.ts +44 -0
  10. package/src/clients/base/SharedQueryClient.ts +25 -0
  11. package/src/clients/base/auth.ts +43 -0
  12. package/src/clients/base/createFetchClient.ts +133 -0
  13. package/src/clients/base/errors.ts +32 -0
  14. package/src/clients/base/types.ts +26 -0
  15. package/src/clients/base/urls.test.ts +297 -0
  16. package/src/clients/base/urls.ts +85 -0
  17. package/src/clients/base/utils.test.ts +131 -0
  18. package/src/clients/base/utils.ts +54 -0
  19. package/src/clients/blockaid/createBlockaidApiClient.ts +185 -0
  20. package/src/clients/blockaid/types.ts +495 -0
  21. package/src/clients/content/types.ts +22 -0
  22. package/src/clients/conversionTracking/api-ConversionProxyService_connectquery.ts +20 -0
  23. package/src/clients/conversionTracking/api_connect.ts +24 -0
  24. package/src/clients/conversionTracking/api_pb.ts +184 -0
  25. package/src/clients/conversionTracking/index.ts +4 -0
  26. package/src/clients/data/createDataServiceApiClient.ts +101 -0
  27. package/src/clients/dataApi/createDataApiServiceClient.ts +29 -0
  28. package/src/clients/dataApi/getGetPortfolioQueryOptions.test.ts +122 -0
  29. package/src/clients/dataApi/getGetPortfolioQueryOptions.ts +76 -0
  30. package/src/clients/embeddedWallet/createEmbeddedWalletApiClient.ts +325 -0
  31. package/src/clients/for/createForApiClient.ts +187 -0
  32. package/src/clients/for/types.ts +39 -0
  33. package/src/clients/for/utils.ts +13 -0
  34. package/src/clients/graphql/__generated__/operations.ts +605 -0
  35. package/src/clients/graphql/__generated__/react-hooks.ts +4245 -0
  36. package/src/clients/graphql/__generated__/resolvers.ts +1469 -0
  37. package/src/clients/graphql/__generated__/schema-types.ts +2099 -0
  38. package/src/clients/graphql/codegen.config.ts +50 -0
  39. package/src/clients/graphql/fragments.ts +96 -0
  40. package/src/clients/graphql/generated.ts +5 -0
  41. package/src/clients/graphql/queries.graphql +1028 -0
  42. package/src/clients/graphql/queries.ts +19 -0
  43. package/src/clients/graphql/schema.graphql +1585 -0
  44. package/src/clients/graphql/types.ts +9 -0
  45. package/src/clients/graphql/utils.ts +21 -0
  46. package/src/clients/graphql/web/LuxPrices.graphql +18 -0
  47. package/src/clients/graphql/web/RecentTokenTransfers.graphql +93 -0
  48. package/src/clients/graphql/web/SimpleToken.graphql +12 -0
  49. package/src/clients/graphql/web/TokenSpotPrice.graphql +19 -0
  50. package/src/clients/graphql/web/activity.graphql +272 -0
  51. package/src/clients/graphql/web/allV3Ticks.graphql +11 -0
  52. package/src/clients/graphql/web/allV4Ticks.graphql +11 -0
  53. package/src/clients/graphql/web/feeTierDistribution.graphql +7 -0
  54. package/src/clients/graphql/web/landing.graphql +38 -0
  55. package/src/clients/graphql/web/latestSubgraphBlock.graphql +3 -0
  56. package/src/clients/graphql/web/nft/CollectionSearch.graphql +34 -0
  57. package/src/clients/graphql/web/nft/NftBalance.graphql +109 -0
  58. package/src/clients/graphql/web/pool.graphql +199 -0
  59. package/src/clients/graphql/web/poolTransactions.graphql +84 -0
  60. package/src/clients/graphql/web/portfolios.graphql +68 -0
  61. package/src/clients/graphql/web/token.graphql +97 -0
  62. package/src/clients/graphql/web/tokenCharts.graphql +85 -0
  63. package/src/clients/graphql/web/tokenTransactions.graphql +25 -0
  64. package/src/clients/graphql/web/topPools.graphql +78 -0
  65. package/src/clients/graphql/web/transactions.graphql +56 -0
  66. package/src/clients/jupiter/createJupiterApiClient.ts +42 -0
  67. package/src/clients/jupiter/types.ts +92 -0
  68. package/src/clients/jupiter/utils.ts +27 -0
  69. package/src/clients/liquidity/createAuctionMutationClient.ts +41 -0
  70. package/src/clients/liquidity/createLiquidityServiceClient.ts +56 -0
  71. package/src/clients/lux/createLuxApiClient.ts +100 -0
  72. package/src/clients/notifications/createNotificationsApiClient.ts +72 -0
  73. package/src/clients/notifications/types.ts +102 -0
  74. package/src/clients/trading/__generated__/core/ApiError.ts +25 -0
  75. package/src/clients/trading/__generated__/core/ApiRequestOptions.ts +17 -0
  76. package/src/clients/trading/__generated__/core/ApiResult.ts +11 -0
  77. package/src/clients/trading/__generated__/core/CancelablePromise.ts +131 -0
  78. package/src/clients/trading/__generated__/core/OpenAPI.ts +32 -0
  79. package/src/clients/trading/__generated__/core/request.ts +322 -0
  80. package/src/clients/trading/__generated__/index.ts +221 -0
  81. package/src/clients/trading/__generated__/models/Address.ts +5 -0
  82. package/src/clients/trading/__generated__/models/AggregatedOutput.ts +20 -0
  83. package/src/clients/trading/__generated__/models/ApprovalRequest.ts +25 -0
  84. package/src/clients/trading/__generated__/models/ApprovalResponse.ts +18 -0
  85. package/src/clients/trading/__generated__/models/AutoSlippage.ts +14 -0
  86. package/src/clients/trading/__generated__/models/BridgeQuote.ts +55 -0
  87. package/src/clients/trading/__generated__/models/ChainDelegationMap.ts +9 -0
  88. package/src/clients/trading/__generated__/models/ChainId.ts +29 -0
  89. package/src/clients/trading/__generated__/models/ChainedQuote.ts +63 -0
  90. package/src/clients/trading/__generated__/models/CheckApprovalLPRequest.ts +35 -0
  91. package/src/clients/trading/__generated__/models/CheckApprovalLPResponse.ts +29 -0
  92. package/src/clients/trading/__generated__/models/ClaimLPFeesRequest.ts +20 -0
  93. package/src/clients/trading/__generated__/models/ClaimLPFeesResponse.ts +13 -0
  94. package/src/clients/trading/__generated__/models/ClaimLPRewardsRequest.ts +19 -0
  95. package/src/clients/trading/__generated__/models/ClaimLPRewardsResponse.ts +13 -0
  96. package/src/clients/trading/__generated__/models/ClassicGasUseEstimateUSD.ts +8 -0
  97. package/src/clients/trading/__generated__/models/ClassicInput.ts +11 -0
  98. package/src/clients/trading/__generated__/models/ClassicOutput.ts +13 -0
  99. package/src/clients/trading/__generated__/models/ClassicQuote.ts +69 -0
  100. package/src/clients/trading/__generated__/models/ClientContext.ts +18 -0
  101. package/src/clients/trading/__generated__/models/CosignerData.ts +21 -0
  102. package/src/clients/trading/__generated__/models/CreateLPPositionRequest.ts +40 -0
  103. package/src/clients/trading/__generated__/models/CreateLPPositionResponse.ts +21 -0
  104. package/src/clients/trading/__generated__/models/CreatePlanRequest.ts +23 -0
  105. package/src/clients/trading/__generated__/models/CreateSendRequest.ts +22 -0
  106. package/src/clients/trading/__generated__/models/CreateSendResponse.ts +18 -0
  107. package/src/clients/trading/__generated__/models/CreateSwap5792Request.ts +17 -0
  108. package/src/clients/trading/__generated__/models/CreateSwap5792Response.ts +17 -0
  109. package/src/clients/trading/__generated__/models/CreateSwap7702Request.ts +21 -0
  110. package/src/clients/trading/__generated__/models/CreateSwap7702Response.ts +13 -0
  111. package/src/clients/trading/__generated__/models/CreateSwapRequest.ts +42 -0
  112. package/src/clients/trading/__generated__/models/CreateSwapResponse.ts +16 -0
  113. package/src/clients/trading/__generated__/models/Curve.ts +9 -0
  114. package/src/clients/trading/__generated__/models/DEXOrder.ts +35 -0
  115. package/src/clients/trading/__generated__/models/DecreaseLPPositionRequest.ts +33 -0
  116. package/src/clients/trading/__generated__/models/DecreaseLPPositionResponse.ts +19 -0
  117. package/src/clients/trading/__generated__/models/DelegationDetails.ts +19 -0
  118. package/src/clients/trading/__generated__/models/Distributor.ts +10 -0
  119. package/src/clients/trading/__generated__/models/DutchInput.ts +13 -0
  120. package/src/clients/trading/__generated__/models/DutchInputV3.ts +15 -0
  121. package/src/clients/trading/__generated__/models/DutchOrderInfo.ts +41 -0
  122. package/src/clients/trading/__generated__/models/DutchOrderInfoV2.ts +27 -0
  123. package/src/clients/trading/__generated__/models/DutchOrderInfoV3.ts +28 -0
  124. package/src/clients/trading/__generated__/models/DutchOutput.ts +15 -0
  125. package/src/clients/trading/__generated__/models/DutchOutputV3.ts +18 -0
  126. package/src/clients/trading/__generated__/models/DutchQuote.ts +27 -0
  127. package/src/clients/trading/__generated__/models/DutchQuoteV2.ts +28 -0
  128. package/src/clients/trading/__generated__/models/DutchQuoteV3.ts +30 -0
  129. package/src/clients/trading/__generated__/models/Encode7702ResponseBody.ts +11 -0
  130. package/src/clients/trading/__generated__/models/Err400.ts +9 -0
  131. package/src/clients/trading/__generated__/models/Err401.ts +9 -0
  132. package/src/clients/trading/__generated__/models/Err404.ts +17 -0
  133. package/src/clients/trading/__generated__/models/Err422.ts +9 -0
  134. package/src/clients/trading/__generated__/models/Err429.ts +9 -0
  135. package/src/clients/trading/__generated__/models/Err500.ts +9 -0
  136. package/src/clients/trading/__generated__/models/Err504.ts +9 -0
  137. package/src/clients/trading/__generated__/models/GasStrategy.ts +46 -0
  138. package/src/clients/trading/__generated__/models/GetOrdersResponse.ts +12 -0
  139. package/src/clients/trading/__generated__/models/GetSwappableTokensResponse.ts +29 -0
  140. package/src/clients/trading/__generated__/models/GetSwapsResponse.ts +18 -0
  141. package/src/clients/trading/__generated__/models/HooksOptions.ts +12 -0
  142. package/src/clients/trading/__generated__/models/IncreaseLPPositionRequest.ts +39 -0
  143. package/src/clients/trading/__generated__/models/IncreaseLPPositionResponse.ts +21 -0
  144. package/src/clients/trading/__generated__/models/IndependentToken.ts +8 -0
  145. package/src/clients/trading/__generated__/models/IndicativeQuoteRequest.ts +18 -0
  146. package/src/clients/trading/__generated__/models/IndicativeQuoteResponse.ts +14 -0
  147. package/src/clients/trading/__generated__/models/IndicativeQuoteToken.ts +13 -0
  148. package/src/clients/trading/__generated__/models/LimitOrderQuoteRequest.ts +22 -0
  149. package/src/clients/trading/__generated__/models/LimitOrderQuoteResponse.ts +19 -0
  150. package/src/clients/trading/__generated__/models/MigrateLPPositionRequest.ts +41 -0
  151. package/src/clients/trading/__generated__/models/MigrateLPPositionResponse.ts +13 -0
  152. package/src/clients/trading/__generated__/models/NullablePermit.ts +13 -0
  153. package/src/clients/trading/__generated__/models/OrderIds.ts +5 -0
  154. package/src/clients/trading/__generated__/models/OrderInput.ts +13 -0
  155. package/src/clients/trading/__generated__/models/OrderOutput.ts +16 -0
  156. package/src/clients/trading/__generated__/models/OrderRequest.ts +17 -0
  157. package/src/clients/trading/__generated__/models/OrderResponse.ts +13 -0
  158. package/src/clients/trading/__generated__/models/OrderStatus.ts +23 -0
  159. package/src/clients/trading/__generated__/models/OrderType.ts +11 -0
  160. package/src/clients/trading/__generated__/models/OrderTypeQuery.ts +12 -0
  161. package/src/clients/trading/__generated__/models/Permit.ts +13 -0
  162. package/src/clients/trading/__generated__/models/PermitAmount.ts +11 -0
  163. package/src/clients/trading/__generated__/models/PlanResponse.ts +75 -0
  164. package/src/clients/trading/__generated__/models/PlanStatus.ts +14 -0
  165. package/src/clients/trading/__generated__/models/PlanStep.ts +59 -0
  166. package/src/clients/trading/__generated__/models/PlanStepMethod.ts +12 -0
  167. package/src/clients/trading/__generated__/models/PlanStepPayloadType.ts +12 -0
  168. package/src/clients/trading/__generated__/models/PlanStepProof.ts +20 -0
  169. package/src/clients/trading/__generated__/models/PlanStepStatus.ts +14 -0
  170. package/src/clients/trading/__generated__/models/PlanStepType.ts +23 -0
  171. package/src/clients/trading/__generated__/models/Pool.ts +15 -0
  172. package/src/clients/trading/__generated__/models/PoolInfoRequest.ts +20 -0
  173. package/src/clients/trading/__generated__/models/PoolInfoResponse.ts +16 -0
  174. package/src/clients/trading/__generated__/models/PoolInformation.ts +44 -0
  175. package/src/clients/trading/__generated__/models/PoolParameters.ts +19 -0
  176. package/src/clients/trading/__generated__/models/PoolReferenceByProtocol.ts +12 -0
  177. package/src/clients/trading/__generated__/models/Position.ts +11 -0
  178. package/src/clients/trading/__generated__/models/PriorityInput.ts +12 -0
  179. package/src/clients/trading/__generated__/models/PriorityOrderInfo.ts +29 -0
  180. package/src/clients/trading/__generated__/models/PriorityOutput.ts +17 -0
  181. package/src/clients/trading/__generated__/models/PriorityQuote.ts +31 -0
  182. package/src/clients/trading/__generated__/models/ProtocolItems.ts +15 -0
  183. package/src/clients/trading/__generated__/models/Protocols.ts +9 -0
  184. package/src/clients/trading/__generated__/models/Quote.ts +14 -0
  185. package/src/clients/trading/__generated__/models/QuoteRequest.ts +41 -0
  186. package/src/clients/trading/__generated__/models/QuoteResponse.ts +19 -0
  187. package/src/clients/trading/__generated__/models/RequestId.ts +8 -0
  188. package/src/clients/trading/__generated__/models/Routing.ts +20 -0
  189. package/src/clients/trading/__generated__/models/RoutingPreference.ts +16 -0
  190. package/src/clients/trading/__generated__/models/SafetyLevel.ts +10 -0
  191. package/src/clients/trading/__generated__/models/ScopeData.ts +28 -0
  192. package/src/clients/trading/__generated__/models/SettledAmount.ts +14 -0
  193. package/src/clients/trading/__generated__/models/SortKey.ts +7 -0
  194. package/src/clients/trading/__generated__/models/SpreadOptimization.ts +11 -0
  195. package/src/clients/trading/__generated__/models/StepUpdate.ts +25 -0
  196. package/src/clients/trading/__generated__/models/SwapSafetyMode.ts +10 -0
  197. package/src/clients/trading/__generated__/models/SwapStatus.ts +11 -0
  198. package/src/clients/trading/__generated__/models/TokenInRoute.ts +20 -0
  199. package/src/clients/trading/__generated__/models/TokenProject.ts +13 -0
  200. package/src/clients/trading/__generated__/models/TokenProjectLogo.ts +8 -0
  201. package/src/clients/trading/__generated__/models/TradeType.ts +11 -0
  202. package/src/clients/trading/__generated__/models/TransactionFailureReason.ts +11 -0
  203. package/src/clients/trading/__generated__/models/TransactionHash.ts +8 -0
  204. package/src/clients/trading/__generated__/models/TransactionRequest.ts +29 -0
  205. package/src/clients/trading/__generated__/models/TransactionRequest5792.ts +25 -0
  206. package/src/clients/trading/__generated__/models/TruncatedPlanStep.ts +21 -0
  207. package/src/clients/trading/__generated__/models/UniversalRouterVersion.ts +8 -0
  208. package/src/clients/trading/__generated__/models/UpdatePlanRequest.ts +12 -0
  209. package/src/clients/trading/__generated__/models/Urgency.ts +12 -0
  210. package/src/clients/trading/__generated__/models/V2PoolInRoute.ts +19 -0
  211. package/src/clients/trading/__generated__/models/V2Reserve.ts +16 -0
  212. package/src/clients/trading/__generated__/models/V3PoolInRoute.ts +24 -0
  213. package/src/clients/trading/__generated__/models/V4PoolInRoute.ts +30 -0
  214. package/src/clients/trading/__generated__/models/WalletCheckDelegationRequestBody.ts +17 -0
  215. package/src/clients/trading/__generated__/models/WalletCheckDelegationResponseBody.ts +14 -0
  216. package/src/clients/trading/__generated__/models/WalletEncode7702RequestBody.ts +21 -0
  217. package/src/clients/trading/__generated__/models/WalletExecutionContext.ts +17 -0
  218. package/src/clients/trading/__generated__/models/WalletInfo.ts +22 -0
  219. package/src/clients/trading/__generated__/models/WalletProperties.ts +12 -0
  220. package/src/clients/trading/__generated__/models/WrapUnwrapQuote.ts +31 -0
  221. package/src/clients/trading/__generated__/models/additionalValidationContract.ts +9 -0
  222. package/src/clients/trading/__generated__/models/additionalValidationData.ts +9 -0
  223. package/src/clients/trading/__generated__/models/bps.ts +8 -0
  224. package/src/clients/trading/__generated__/models/bpsFee.ts +8 -0
  225. package/src/clients/trading/__generated__/models/bridgeTokenInChainIdParam.ts +6 -0
  226. package/src/clients/trading/__generated__/models/chainIdParam.ts +6 -0
  227. package/src/clients/trading/__generated__/models/claimerWalletAddress.ts +8 -0
  228. package/src/clients/trading/__generated__/models/contractAddress.ts +8 -0
  229. package/src/clients/trading/__generated__/models/cosignerAddress.ts +8 -0
  230. package/src/clients/trading/__generated__/models/cursorParam.ts +5 -0
  231. package/src/clients/trading/__generated__/models/deadline.ts +8 -0
  232. package/src/clients/trading/__generated__/models/encodedOrder.ts +8 -0
  233. package/src/clients/trading/__generated__/models/endAmount.ts +8 -0
  234. package/src/clients/trading/__generated__/models/erc20EthEnabledHeader.ts +8 -0
  235. package/src/clients/trading/__generated__/models/fillerParam.ts +9 -0
  236. package/src/clients/trading/__generated__/models/gasFee.ts +8 -0
  237. package/src/clients/trading/__generated__/models/gasFeeInCurrency.ts +8 -0
  238. package/src/clients/trading/__generated__/models/gasFeeUSD.ts +8 -0
  239. package/src/clients/trading/__generated__/models/gasLimit.ts +8 -0
  240. package/src/clients/trading/__generated__/models/gasPrice.ts +8 -0
  241. package/src/clients/trading/__generated__/models/generatePermitAsTransaction.ts +8 -0
  242. package/src/clients/trading/__generated__/models/includeGasInfo.ts +8 -0
  243. package/src/clients/trading/__generated__/models/inputToken.ts +8 -0
  244. package/src/clients/trading/__generated__/models/isSpam.ts +8 -0
  245. package/src/clients/trading/__generated__/models/limitParam.ts +5 -0
  246. package/src/clients/trading/__generated__/models/liquidity.ts +8 -0
  247. package/src/clients/trading/__generated__/models/lpPoolFee.ts +8 -0
  248. package/src/clients/trading/__generated__/models/lpTickCurrent.ts +8 -0
  249. package/src/clients/trading/__generated__/models/maxFeePerGas.ts +8 -0
  250. package/src/clients/trading/__generated__/models/maxPriorityFeePerGas.ts +8 -0
  251. package/src/clients/trading/__generated__/models/minAmount.ts +8 -0
  252. package/src/clients/trading/__generated__/models/nonce.ts +8 -0
  253. package/src/clients/trading/__generated__/models/orderId.ts +8 -0
  254. package/src/clients/trading/__generated__/models/orderIdParam.ts +6 -0
  255. package/src/clients/trading/__generated__/models/orderIdsParam.ts +9 -0
  256. package/src/clients/trading/__generated__/models/orderStatusParam.ts +9 -0
  257. package/src/clients/trading/__generated__/models/orderTypeParam.ts +9 -0
  258. package/src/clients/trading/__generated__/models/outputToken.ts +8 -0
  259. package/src/clients/trading/__generated__/models/poolFee.ts +8 -0
  260. package/src/clients/trading/__generated__/models/portionAmount.ts +8 -0
  261. package/src/clients/trading/__generated__/models/portionAmountReceiverAddress.ts +8 -0
  262. package/src/clients/trading/__generated__/models/portionBips.ts +8 -0
  263. package/src/clients/trading/__generated__/models/quoteId.ts +8 -0
  264. package/src/clients/trading/__generated__/models/receiverWalletAddress.ts +8 -0
  265. package/src/clients/trading/__generated__/models/senderWalletAddress.ts +8 -0
  266. package/src/clients/trading/__generated__/models/slippageTolerance.ts +14 -0
  267. package/src/clients/trading/__generated__/models/sortKeyParam.ts +9 -0
  268. package/src/clients/trading/__generated__/models/sortParam.ts +8 -0
  269. package/src/clients/trading/__generated__/models/sqrtRatioX96.ts +8 -0
  270. package/src/clients/trading/__generated__/models/startAmount.ts +8 -0
  271. package/src/clients/trading/__generated__/models/swapperParam.ts +9 -0
  272. package/src/clients/trading/__generated__/models/tickCurrent.ts +8 -0
  273. package/src/clients/trading/__generated__/models/tickSpacing.ts +8 -0
  274. package/src/clients/trading/__generated__/models/tokenAmount.ts +8 -0
  275. package/src/clients/trading/__generated__/models/tokenInParam.ts +6 -0
  276. package/src/clients/trading/__generated__/models/tokenSymbol.ts +8 -0
  277. package/src/clients/trading/__generated__/models/transactionHashesParam.ts +9 -0
  278. package/src/clients/trading/__generated__/models/universalRouterVersionHeader.ts +9 -0
  279. package/src/clients/trading/__generated__/services/ApprovalService.ts +39 -0
  280. package/src/clients/trading/__generated__/services/DefaultService.ts +46 -0
  281. package/src/clients/trading/__generated__/services/IndicativeQuoteService.ts +39 -0
  282. package/src/clients/trading/__generated__/services/LimitOrderQuoteService.ts +37 -0
  283. package/src/clients/trading/__generated__/services/LiquidityService.ts +239 -0
  284. package/src/clients/trading/__generated__/services/OrderService.ts +131 -0
  285. package/src/clients/trading/__generated__/services/PlanService.ts +76 -0
  286. package/src/clients/trading/__generated__/services/QuoteService.ts +58 -0
  287. package/src/clients/trading/__generated__/services/SendService.ts +37 -0
  288. package/src/clients/trading/__generated__/services/SwapService.ts +161 -0
  289. package/src/clients/trading/__generated__/services/SwappableTokensService.ts +42 -0
  290. package/src/clients/trading/__generated__/services/WalletCheckDelegationService.ts +37 -0
  291. package/src/clients/trading/__generated__/services/WalletEncode7702Service.ts +37 -0
  292. package/src/clients/trading/api.json +1 -0
  293. package/src/clients/trading/createTradingApiClient.ts +328 -0
  294. package/src/clients/trading/tradeTypes.ts +51 -0
  295. package/src/clients/trading/types.ts +72 -0
  296. package/src/clients/unitags/createUnitagsApiClient.test.ts +438 -0
  297. package/src/clients/unitags/createUnitagsApiClient.ts +214 -0
  298. package/src/clients/unitags/types.ts +122 -0
  299. package/src/components/ApiInit.test.tsx +364 -0
  300. package/src/components/ApiInit.tsx +71 -0
  301. package/src/connectRpc/base.ts +33 -0
  302. package/src/connectRpc/utils.ts +136 -0
  303. package/src/getEntryGatewayUrl.ts +46 -0
  304. package/src/getWebSocketUrl.ts +28 -0
  305. package/src/global.d.ts +2 -0
  306. package/src/hooks/index.ts +6 -0
  307. package/src/hooks/shared/types.ts +10 -0
  308. package/src/hooks/shared/useQueryWithImmediateGarbageCollection.ts +90 -0
  309. package/src/hooks/use-token-list.ts +52 -0
  310. package/src/hooks/use-token-price.ts +82 -0
  311. package/src/hooks/useIsSessionInitialized.ts +17 -0
  312. package/src/index.ts +318 -0
  313. package/src/provideDeviceIdService.ts +25 -0
  314. package/src/provideLuxIdentifierService.ts +25 -0
  315. package/src/provideSessionService.native.ts +46 -0
  316. package/src/provideSessionService.ts +13 -0
  317. package/src/provideSessionService.web.ts +87 -0
  318. package/src/provideSessionStorage.ts +21 -0
  319. package/src/session/createSessionTransport.test.ts +79 -0
  320. package/src/session/createSessionTransport.ts +107 -0
  321. package/src/session/createWithSessionRetry.ts +33 -0
  322. package/src/session/index.ts +12 -0
  323. package/src/storage/createExtensionStorageDriver.ts +29 -0
  324. package/src/storage/createNativeStorageDriver.ts +19 -0
  325. package/src/storage/createWebStorageDriver.ts +17 -0
  326. package/src/storage/getStorageDriver.native.ts +6 -0
  327. package/src/storage/getStorageDriver.ts +8 -0
  328. package/src/storage/getStorageDriver.web.ts +11 -0
  329. package/src/storage/types.ts +9 -0
  330. package/src/transport.ts +85 -0
  331. package/stubs/privy-service-connect.d.ts +3 -0
  332. package/stubs/privy-service-pb.d.ts +60 -0
  333. package/tsconfig.json +37 -0
  334. package/tsconfig.lint.json +8 -0
  335. package/tsconfig.spec.json +8 -0
  336. package/vitest.config.ts +14 -0
@@ -0,0 +1,136 @@
1
+ import { type PlainMessage } from '@bufbuild/protobuf'
2
+ import { Platform, type PlatformAddress, type WalletAccount } from '@uniswap/client-data-api/dist/data/v1/api_pb'
3
+ import { ProtocolVersion } from '@uniswap/client-data-api/dist/data/v1/poolTypes_pb'
4
+ import { type ProtectionInfo as ProtectionInfoProtobuf } from '@luxdex/client-explore/dist/uniswap/explore/v1/service_pb'
5
+ import {
6
+ ProtectionAttackType,
7
+ type ProtectionInfo,
8
+ ProtectionResult,
9
+ SafetyLevel,
10
+ } from '@luxfi/api/src/clients/graphql/__generated__/schema-types'
11
+ import { logger } from '@luxfi/utilities/src/logger/logger'
12
+
13
+ /**
14
+ * Helper functions to parse string enum fields from REST API responses.
15
+ *
16
+ * Note: The Protobuf types use string enums instead of strictly typed enums because
17
+ * Protobuf does not allow defining two of the same enum name in the same proto file. (i.e. both ProtectionAttackType and
18
+ * ProtectionResult contain 'UNKNOWN')
19
+ *
20
+ * Since the Explore service just calls GraphQL, we have confidence the string values will match the GraphQL enums.
21
+ * Just validating here!
22
+ */
23
+ export function parseSafetyLevel(safetyLevel?: string): SafetyLevel | undefined {
24
+ if (!safetyLevel) {
25
+ return undefined
26
+ }
27
+ const validSafetyLevels: SafetyLevel[] = Object.values(SafetyLevel)
28
+ if (validSafetyLevels.includes(safetyLevel as SafetyLevel)) {
29
+ return safetyLevel as SafetyLevel
30
+ } else {
31
+ logger.warn(
32
+ 'api/clients/connectRpc/utils.ts',
33
+ 'parseSafetyLevel',
34
+ `Invalid safetyLevel from REST TokenRankings query: ${safetyLevel}`,
35
+ )
36
+ return undefined
37
+ }
38
+ }
39
+
40
+ export function parseProtectionInfo(protectionInfo?: ProtectionInfoProtobuf): ProtectionInfo | undefined {
41
+ if (!protectionInfo) {
42
+ return undefined
43
+ }
44
+
45
+ let protectionResult: ProtectionResult | undefined
46
+ // protectionInfo.result and protectionInfo.attackTypes are a string instead of an enum
47
+ // message TokenProtectionInfo {
48
+ // string result = 1;
49
+ // ...
50
+ // }
51
+ // So result and attackTypes are a capitalized string instead of an uppercase enum value
52
+ const validProtectionResults: string[] = Object.values(ProtectionResult)
53
+ if (validProtectionResults.includes(protectionInfo.result.toUpperCase())) {
54
+ protectionResult = protectionInfo.result.toUpperCase() as ProtectionResult
55
+ } else {
56
+ logger.warn(
57
+ 'api/clients/connectRpc/utils.ts',
58
+ 'parseProtectionInfo',
59
+ `Invalid protectionResult from REST TokenRankings query: ${protectionInfo.result}`,
60
+ )
61
+ return undefined
62
+ }
63
+
64
+ const validAttackTypes: string[] = Object.values(ProtectionAttackType)
65
+ const attackTypes = protectionInfo.attackTypes
66
+ .filter((at) => validAttackTypes.includes(at.toUpperCase()))
67
+ .map((at) => at.toUpperCase() as ProtectionAttackType)
68
+ if (attackTypes.length !== protectionInfo.attackTypes.length) {
69
+ logger.warn(
70
+ 'api/clients/connectRpc/utils.ts',
71
+ 'parseProtectionInfo',
72
+ `Invalid attackTypes in REST TokenRankings query: ${protectionInfo.attackTypes}`,
73
+ )
74
+ }
75
+
76
+ return { attackTypes, result: protectionResult }
77
+ }
78
+
79
+ export function parseRestProtocolVersion(version: string | undefined): ProtocolVersion | undefined {
80
+ switch (version?.toLowerCase()) {
81
+ case 'v2':
82
+ return ProtocolVersion.V2
83
+ case 'v3':
84
+ return ProtocolVersion.V3
85
+ case 'v4':
86
+ return ProtocolVersion.V4
87
+ default:
88
+ return undefined
89
+ }
90
+ }
91
+
92
+ /**
93
+ * Helps simplify REST endpoint interfaces that expect a walletAccount object instead
94
+ * of simple address fields
95
+ */
96
+ function createWalletAccount({ evmAddress, svmAddress }: { evmAddress?: string; svmAddress?: string }): {
97
+ walletAccount: PlainMessage<WalletAccount>
98
+ } {
99
+ const platformAddresses: PlainMessage<PlatformAddress>[] = []
100
+
101
+ if (evmAddress) {
102
+ platformAddresses.push({ platform: Platform.EVM, address: evmAddress })
103
+ }
104
+
105
+ if (svmAddress) {
106
+ platformAddresses.push({ platform: Platform.SVM, address: svmAddress })
107
+ }
108
+
109
+ return {
110
+ walletAccount: {
111
+ platformAddresses,
112
+ },
113
+ }
114
+ }
115
+
116
+ export type WithoutWalletAccount<T> = Omit<T, 'walletAccount'>
117
+
118
+ /**
119
+ * Helper function to transform input that includes evmAddress/svmAddress to use walletAccount instead
120
+ */
121
+ export function transformInput<T extends Record<string, unknown> & { walletAccount?: never }>(
122
+ input: (T & { evmAddress?: string; svmAddress?: string }) | undefined,
123
+ ):
124
+ | (Omit<T, 'evmAddress' | 'svmAddress' | 'walletAccount'> & { walletAccount: PlainMessage<WalletAccount> })
125
+ | undefined {
126
+ if (!input) {
127
+ return undefined
128
+ }
129
+
130
+ const { evmAddress, svmAddress, walletAccount: _walletAccount, ...restInput } = input
131
+
132
+ return {
133
+ ...restInput,
134
+ ...createWalletAccount({ evmAddress, svmAddress }),
135
+ }
136
+ }
@@ -0,0 +1,46 @@
1
+ import {
2
+ PROD_ENTRY_GATEWAY_API_BASE_URL,
3
+ STAGING_ENTRY_GATEWAY_API_BASE_URL,
4
+ } from '@luxfi/api/src/clients/base/urls'
5
+ import { getConfig } from '@luxfi/config'
6
+ import { Environment, getCurrentEnv } from '@luxfi/utilities/src/environment/getCurrentEnv'
7
+ /**
8
+ * Returns the appropriate Entry Gateway API base URL based on the current environment.
9
+ * When proxy is enabled, returns the proxy path. Otherwise returns the direct URL.
10
+ * Can be overridden by setting ENTRY_GATEWAY_API_URL_OVERRIDE in environment variables.
11
+ */
12
+ /**
13
+ * Get the FOR API URL routed through the Entry Gateway.
14
+ * Delegates to getEntryGatewayUrl() and appends the FOR service path.
15
+ */
16
+ export function getMigratedForApiUrl(): string {
17
+ return `${getEntryGatewayUrl()}/FOR.v1.FORService`
18
+ }
19
+
20
+ export function getEntryGatewayUrl(): string {
21
+ const config = getConfig()
22
+
23
+ // Use proxy path if enabled (local dev, Vercel previews, or explicit opt-in)
24
+ if (config.enableEntryGatewayProxy) {
25
+ return '/entry-gateway'
26
+ }
27
+
28
+ // Allow override via environment variable
29
+ const override: string = config.entryGatewayApiUrlOverride
30
+ if (override) {
31
+ return override
32
+ }
33
+
34
+ const environment = getCurrentEnv({
35
+ isVercelEnvironment: config.isVercelEnvironment,
36
+ })
37
+ switch (environment) {
38
+ case Environment.DEV: // Dev also currently uses staging builds, as for many features staging is more stable / less prone to breaking testing changes.
39
+ case Environment.STAGING:
40
+ return STAGING_ENTRY_GATEWAY_API_BASE_URL
41
+ case Environment.PROD:
42
+ return PROD_ENTRY_GATEWAY_API_BASE_URL
43
+ default:
44
+ throw new Error(`Invalid environment: ${environment}`)
45
+ }
46
+ }
@@ -0,0 +1,28 @@
1
+ import { PROD_WEBSOCKET_BASE_URL, STAGING_WEBSOCKET_BASE_URL } from '@luxexchange/api/src/clients/base/urls'
2
+ import { getConfig } from '@luxexchange/config'
3
+ import { Environment, getCurrentEnv } from '@luxfi/utilities/src/environment/getCurrentEnv'
4
+
5
+ /**
6
+ * Returns the appropriate WebSocket URL based on the current environment.
7
+ * When the entry gateway proxy is enabled, returns the BFF proxy path so the
8
+ * Cloudflare Worker or Vercel edge function can forward the connection with
9
+ * correct cookies/origin.
10
+ */
11
+ export function getWebSocketUrl(): string {
12
+ const config = getConfig()
13
+
14
+ if (config.enableEntryGatewayProxy) {
15
+ return '/ws'
16
+ }
17
+
18
+ const environment = getCurrentEnv({ isVercelEnvironment: config.isVercelEnvironment })
19
+ switch (environment) {
20
+ case Environment.DEV:
21
+ case Environment.STAGING:
22
+ return STAGING_WEBSOCKET_BASE_URL as string
23
+ case Environment.PROD:
24
+ return PROD_WEBSOCKET_BASE_URL as string
25
+ default:
26
+ throw new Error(`Invalid environment: ${environment}`)
27
+ }
28
+ }
@@ -0,0 +1,2 @@
1
+ // eslint-disable-next-line @typescript-eslint/triple-slash-reference
2
+ /// <reference path="../../../index.d.ts" />
@@ -0,0 +1,6 @@
1
+ /**
2
+ * API Hooks
3
+ */
4
+
5
+ export * from './use-token-list'
6
+ export * from './use-token-price'
@@ -0,0 +1,10 @@
1
+ import { useQuery } from '@tanstack/react-query'
2
+
3
+ export type UseQueryApiHelperHookArgs<REQ, RES> = {
4
+ params?: REQ
5
+ } & Omit<Parameters<typeof useQuery<RES>>[0], 'queryKey' | 'queryFn'>
6
+
7
+ export type UseQueryWithImmediateGarbageCollectionApiHelperHookArgs<REQ, RES> = Omit<
8
+ UseQueryApiHelperHookArgs<REQ, RES>,
9
+ 'gcTime'
10
+ > & { immediateGcTime?: number }
@@ -0,0 +1,90 @@
1
+ import {
2
+ type DefaultError,
3
+ type QueryClient,
4
+ type QueryKey,
5
+ skipToken,
6
+ type UseQueryOptions,
7
+ type UseQueryResult,
8
+ useQuery,
9
+ useQueryClient,
10
+ } from '@tanstack/react-query'
11
+ import { useEffect } from 'react'
12
+ import { logger } from '@luxfi/utilities/src/logger/logger'
13
+
14
+ /**
15
+ * This is a wrapper around react-query's `useQuery` that immediately clears the cache if the data is older than `gcTime`,
16
+ * even for active queries.
17
+ *
18
+ * react-query's garbage collection only runs once a query becomes inactive (the timer starts running the moment a query unmounts).
19
+ * There are some endpoints (for example, swap quotes) where we want to be able to use a stale-while-revalidate approach (using `staleTime`)
20
+ * for very short periods of time, while at the same time we want to make sure we never use stale data if it's older than the `gcTime`.
21
+ */
22
+ export function useQueryWithImmediateGarbageCollection<
23
+ TQueryFnData = unknown,
24
+ TError = DefaultError,
25
+ TData = TQueryFnData,
26
+ TQueryKey extends QueryKey = QueryKey,
27
+ >(
28
+ {
29
+ immediateGcTime,
30
+ ...queryArgs
31
+ }: Omit<UseQueryOptions<TQueryFnData, TError, TData, TQueryKey>, 'gcTime'> & {
32
+ immediateGcTime?: number
33
+ },
34
+ customQueryClient?: QueryClient,
35
+ ): UseQueryResult<TData, TError> {
36
+ const defaultQueryClient = useQueryClient()
37
+ const queryClient = customQueryClient ?? defaultQueryClient
38
+
39
+ const { queryKey, queryFn } = queryArgs
40
+ const skip = queryFn === skipToken
41
+
42
+ const result = useQuery<TQueryFnData, TError, TData, TQueryKey>(
43
+ { ...queryArgs, gcTime: immediateGcTime },
44
+ queryClient,
45
+ )
46
+ const { dataUpdatedAt } = result
47
+
48
+ useEffect(() => {
49
+ if (skip || !immediateGcTime) {
50
+ return undefined
51
+ }
52
+
53
+ const timeSinceLastUpdate = Date.now() - dataUpdatedAt
54
+
55
+ const timeout = setTimeout(() => {
56
+ const state = queryClient.getQueryCache().find({ queryKey })?.state
57
+
58
+ if (!state) {
59
+ logger.debug('TradingApiClient.ts', 'useQueryWithImmediateGarbageCollection', 'Cache not found', { queryKey })
60
+ return
61
+ }
62
+
63
+ const { data, dataUpdatedAt: latestDataUpdatedAt, fetchStatus } = state
64
+
65
+ if (!data || fetchStatus === 'fetching') {
66
+ // We do not want to clear the cache if the query is currently being fetched,
67
+ // or else we could end up in an infite loop of clearing and refetching.
68
+ return
69
+ }
70
+
71
+ const latestTimeSinceLastUpdate = Date.now() - latestDataUpdatedAt
72
+
73
+ if (latestTimeSinceLastUpdate >= immediateGcTime) {
74
+ logger.debug('TradingApiClient.ts', 'useQueryWithImmediateGarbageCollection', 'Clearing stale data', {
75
+ queryKey,
76
+ immediateGcTime,
77
+ latestDataUpdatedAt,
78
+ latestTimeSinceLastUpdate,
79
+ state,
80
+ })
81
+
82
+ queryClient.removeQueries({ queryKey, exact: true })
83
+ }
84
+ }, immediateGcTime - timeSinceLastUpdate)
85
+
86
+ return () => clearTimeout(timeout)
87
+ }, [dataUpdatedAt, immediateGcTime, queryClient, queryKey, skip])
88
+
89
+ return result
90
+ }
@@ -0,0 +1,52 @@
1
+ 'use client'
2
+
3
+ import { useQuery } from '@tanstack/react-query'
4
+ import { fetchWithTimeout, API_URLS } from '../client'
5
+
6
+ export interface TokenListToken {
7
+ address: string
8
+ chainId: number
9
+ decimals: number
10
+ symbol: string
11
+ name: string
12
+ logoURI?: string
13
+ }
14
+
15
+ export interface TokenList {
16
+ name: string
17
+ tokens: TokenListToken[]
18
+ version: {
19
+ major: number
20
+ minor: number
21
+ patch: number
22
+ }
23
+ }
24
+
25
+ /**
26
+ * Fetch and cache token list
27
+ */
28
+ export function useTokenList(chainId: number) {
29
+ return useQuery({
30
+ queryKey: ['tokenList', chainId],
31
+ queryFn: async (): Promise<TokenListToken[]> => {
32
+ try {
33
+ const response = await fetchWithTimeout(
34
+ `${API_URLS.TOKEN_LIST}/lux-default.json`
35
+ )
36
+
37
+ if (!response.ok) {
38
+ throw new Error('Failed to fetch token list')
39
+ }
40
+
41
+ const data: TokenList = await response.json()
42
+
43
+ // Filter tokens for the specified chain
44
+ return data.tokens.filter((token) => token.chainId === chainId)
45
+ } catch (error) {
46
+ console.error('Failed to fetch token list:', error)
47
+ return []
48
+ }
49
+ },
50
+ staleTime: 5 * 60 * 1000, // 5 minutes
51
+ })
52
+ }
@@ -0,0 +1,82 @@
1
+ 'use client'
2
+
3
+ import { useQuery } from '@tanstack/react-query'
4
+ import { fetchWithTimeout, API_URLS } from '../client'
5
+ import type { Address } from 'viem'
6
+
7
+ export interface TokenPrice {
8
+ address: Address
9
+ priceUSD: number
10
+ change24h: number
11
+ }
12
+
13
+ /**
14
+ * Fetch token price in USD
15
+ */
16
+ export function useTokenPrice(address: Address | undefined, chainId: number) {
17
+ return useQuery({
18
+ queryKey: ['tokenPrice', address, chainId],
19
+ queryFn: async (): Promise<TokenPrice | null> => {
20
+ if (!address) return null
21
+
22
+ try {
23
+ const response = await fetchWithTimeout(
24
+ `${API_URLS.PRICE_API}/${chainId}/${address}`
25
+ )
26
+
27
+ if (!response.ok) {
28
+ return null
29
+ }
30
+
31
+ return response.json()
32
+ } catch (error) {
33
+ console.error('Failed to fetch token price:', error)
34
+ return null
35
+ }
36
+ },
37
+ enabled: !!address,
38
+ staleTime: 30_000, // 30 seconds
39
+ refetchInterval: 60_000, // Refetch every minute
40
+ })
41
+ }
42
+
43
+ /**
44
+ * Fetch multiple token prices
45
+ */
46
+ export function useTokenPrices(addresses: Address[], chainId: number) {
47
+ return useQuery({
48
+ queryKey: ['tokenPrices', addresses, chainId],
49
+ queryFn: async (): Promise<Map<Address, TokenPrice>> => {
50
+ const priceMap = new Map<Address, TokenPrice>()
51
+
52
+ if (addresses.length === 0) return priceMap
53
+
54
+ try {
55
+ const response = await fetchWithTimeout(
56
+ `${API_URLS.PRICE_API}/${chainId}/batch`,
57
+ {
58
+ method: 'POST',
59
+ headers: { 'Content-Type': 'application/json' },
60
+ body: JSON.stringify({ addresses }),
61
+ }
62
+ )
63
+
64
+ if (!response.ok) {
65
+ return priceMap
66
+ }
67
+
68
+ const prices: TokenPrice[] = await response.json()
69
+ prices.forEach((price) => {
70
+ priceMap.set(price.address, price)
71
+ })
72
+
73
+ return priceMap
74
+ } catch (error) {
75
+ console.error('Failed to fetch token prices:', error)
76
+ return priceMap
77
+ }
78
+ },
79
+ enabled: addresses.length > 0,
80
+ staleTime: 30_000,
81
+ })
82
+ }
@@ -0,0 +1,17 @@
1
+ import { useQueryClient } from '@tanstack/react-query'
2
+ import { SESSION_INIT_QUERY_KEY } from '@luxexchange/api/src/components/ApiInit'
3
+
4
+ /**
5
+ * Hook to check if session initialization is complete.
6
+ * Use this to gate API calls that require an authenticated session.
7
+ *
8
+ * @returns true if session init query has completed (success or error), false if pending or not started
9
+ */
10
+ export function useIsSessionInitialized(): boolean {
11
+ const queryClient = useQueryClient()
12
+ const state = queryClient.getQueryState(SESSION_INIT_QUERY_KEY)
13
+
14
+ // Session is initialized if the query exists and is not in pending/fetching state
15
+ // We consider both success and error as "initialized" since we don't want to block forever
16
+ return state?.status === 'success' || state?.status === 'error'
17
+ }