@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,43 @@
1
+ import { objectToQueryString } from '@luxfi/api/src/clients/base/utils'
2
+
3
+ export type AuthData = {
4
+ 'x-uni-address': Address
5
+ 'x-uni-timestamp': number
6
+ }
7
+
8
+ export type SignMessageFunc = (message: string) => Promise<string>
9
+ export type SignedRequestParams<T> = {
10
+ data: T
11
+ address: string
12
+ signMessage: SignMessageFunc
13
+ }
14
+
15
+ export async function createSignedRequestBody<T>({
16
+ data,
17
+ address,
18
+ signMessage,
19
+ }: SignedRequestParams<T>): Promise<{ requestBody: T & AuthData; signature: string }> {
20
+ const requestBody: T & AuthData = {
21
+ ...data,
22
+ 'x-uni-address': address,
23
+ 'x-uni-timestamp': Date.now(),
24
+ }
25
+ const message = JSON.stringify(requestBody)
26
+ const signature = await signMessage(message)
27
+ return { requestBody, signature }
28
+ }
29
+
30
+ export async function createSignedRequestParams<T>({
31
+ data,
32
+ address,
33
+ signMessage,
34
+ }: SignedRequestParams<T>): Promise<{ requestParams: T & AuthData; signature: string }> {
35
+ const requestParams: T & AuthData = {
36
+ ...data,
37
+ 'x-uni-address': address,
38
+ 'x-uni-timestamp': Date.now(),
39
+ }
40
+ const message = objectToQueryString(requestParams)
41
+ const signature = await signMessage(message)
42
+ return { requestParams, signature }
43
+ }
@@ -0,0 +1,133 @@
1
+ import { FetchError } from '@luxfi/api/src/clients/base/errors'
2
+ import type {
3
+ CustomOptions,
4
+ FetchClient,
5
+ FetchClientContext,
6
+ StandardFetchOptions,
7
+ } from '@luxfi/api/src/clients/base/types'
8
+
9
+ export function createFetchClient({
10
+ baseUrl,
11
+ getBaseUrl,
12
+ getHeaders,
13
+ getSessionService,
14
+ defaultOptions = {},
15
+ }: FetchClientContext): FetchClient {
16
+ // Helper to resolve the base URL - prefers getBaseUrl for dynamic resolution
17
+ const resolveBaseUrl = (): string => getBaseUrl?.() ?? baseUrl ?? ''
18
+
19
+ return {
20
+ get context() {
21
+ return () => {
22
+ return {
23
+ baseUrl: resolveBaseUrl(),
24
+ getBaseUrl,
25
+ getHeaders,
26
+ getSessionService,
27
+ defaultOptions,
28
+ }
29
+ }
30
+ },
31
+
32
+ get fetch() {
33
+ return async <T = Response>(path: string, options: StandardFetchOptions): Promise<T> => {
34
+ const sessionService = getSessionService()
35
+ const sessionState = await sessionService.getSessionState()
36
+
37
+ const additionalHeaders = getHeaders?.() ?? {}
38
+
39
+ const headers = new Headers({
40
+ ...additionalHeaders,
41
+ ...options?.headers,
42
+ })
43
+ if (sessionState?.sessionId) {
44
+ headers.set('x-session-id', sessionState.sessionId)
45
+ }
46
+ return fetch(`${resolveBaseUrl()}${path}`, {
47
+ ...defaultOptions,
48
+ ...options,
49
+ headers,
50
+ }) as Promise<T>
51
+ }
52
+ },
53
+
54
+ get get() {
55
+ return async <T>(path: string, options?: CustomOptions): Promise<T> => {
56
+ if (options?.params) {
57
+ const searchParams = new URLSearchParams()
58
+ for (const [key, value] of Object.entries(options.params)) {
59
+ if (value !== undefined && value !== null) {
60
+ searchParams.append(key, value.toString())
61
+ }
62
+ }
63
+ path += '?' + searchParams.toString()
64
+ }
65
+
66
+ const { on404, ...standardOptions } = options ?? {}
67
+
68
+ const response = await this.fetch(path, standardOptions)
69
+
70
+ if (on404 && response.status === 404) {
71
+ on404()
72
+ }
73
+
74
+ if (!response.ok) {
75
+ let data: object | undefined
76
+ try {
77
+ data = await response.json()
78
+ } catch (e) {
79
+ throw new FetchError({ response, cause: e })
80
+ }
81
+ throw new FetchError({ response, data })
82
+ }
83
+
84
+ return (await response.json()) as T
85
+ }
86
+ },
87
+
88
+ get post() {
89
+ return async <T>(path: string, options: CustomOptions): Promise<T> => {
90
+ const _options = options
91
+
92
+ _options.headers = {
93
+ 'Content-Type': 'application/json',
94
+ ...(options.headers ?? {}),
95
+ }
96
+
97
+ return (await this.get(path, { ..._options, method: 'POST' })) as T
98
+ }
99
+ },
100
+
101
+ get put() {
102
+ return async <T>(path: string, options: CustomOptions): Promise<T> => {
103
+ const _options = options
104
+
105
+ _options.headers = {
106
+ 'Content-Type': 'application/json',
107
+ ...(options.headers ?? {}),
108
+ }
109
+
110
+ return (await this.get(path, { ..._options, method: 'PUT' })) as T
111
+ }
112
+ },
113
+
114
+ get delete() {
115
+ return async <T>(path: string, options: CustomOptions = {}): Promise<T> => {
116
+ return (await this.get(path, { ...options, method: 'DELETE' })) as T
117
+ }
118
+ },
119
+
120
+ get patch() {
121
+ return async <T>(path: string, options: CustomOptions): Promise<T> => {
122
+ const _options = options
123
+
124
+ _options.headers = {
125
+ 'Content-Type': 'application/json',
126
+ ...(options.headers ?? {}),
127
+ }
128
+
129
+ return await this.get(path, { ..._options, method: 'PATCH' })
130
+ }
131
+ },
132
+ }
133
+ }
@@ -0,0 +1,32 @@
1
+ export class FetchError extends Error {
2
+ response: Response
3
+ // biome-ignore lint/suspicious/noExplicitAny: Error data can be any shape from API responses
4
+ data?: any
5
+
6
+ // biome-ignore lint/suspicious/noExplicitAny: Error data can be any shape from API responses
7
+ constructor({ response, data, cause }: { response: Response; data?: any; cause?: unknown }) {
8
+ super(`Response status: ${response.status}`)
9
+ this.name = 'FetchError'
10
+ this.response = response
11
+ this.data = data
12
+ this.cause = cause
13
+ }
14
+ }
15
+
16
+ export function isRateLimitFetchError(error: unknown): boolean {
17
+ return (
18
+ error instanceof FetchError &&
19
+ !!error.response.status &&
20
+ // This checks for our backend non-standard rate limit error codes.
21
+ error.response.status >= 412 &&
22
+ error.response.status <= 429
23
+ )
24
+ }
25
+
26
+ export function is401Error(error: unknown): boolean {
27
+ return error instanceof FetchError && error.response.status === 401
28
+ }
29
+
30
+ export function is404Error(error: unknown): boolean {
31
+ return error instanceof FetchError && !!error.response.status && error.response.status === 404
32
+ }
@@ -0,0 +1,26 @@
1
+ import type { SessionService } from '@luxfi/sessions'
2
+
3
+ export type StandardFetchOptions = Parameters<typeof fetch>[1]
4
+
5
+ export type CustomOptions = StandardFetchOptions & {
6
+ params?: Record<string, string | number | boolean | undefined | null>
7
+ on404?: () => void
8
+ }
9
+
10
+ export interface FetchClientContext {
11
+ baseUrl?: string
12
+ getBaseUrl?: () => string
13
+ getHeaders?: () => HeadersInit
14
+ getSessionService: () => SessionService
15
+ defaultOptions?: Omit<StandardFetchOptions, 'headers'>
16
+ }
17
+
18
+ export interface FetchClient {
19
+ readonly context: () => FetchClientContext
20
+ readonly fetch: <T = Response>(path: string, options: StandardFetchOptions) => Promise<T>
21
+ readonly get: <T>(path: string, options?: CustomOptions) => Promise<T>
22
+ readonly post: <T>(path: string, options: CustomOptions) => Promise<T>
23
+ readonly put: <T>(path: string, options: CustomOptions) => Promise<T>
24
+ readonly delete: <T>(path: string, options: CustomOptions) => Promise<T>
25
+ readonly patch: <T>(path: string, options: CustomOptions) => Promise<T>
26
+ }
@@ -0,0 +1,297 @@
1
+ /* eslint-disable @typescript-eslint/explicit-function-return-type */
2
+
3
+ import { TrafficFlows } from '@luxexchange/api/src/clients/base/urls'
4
+ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
5
+
6
+ // Mock the platform and environment utilities
7
+ vi.mock('@luxfi/utilities/src/environment/env')
8
+ vi.mock('@luxfi/utilities/src/platform')
9
+
10
+ const envConfigs = {
11
+ webProd: {
12
+ isWebApp: true,
13
+ isDevEnv: false,
14
+ },
15
+ webDev: {
16
+ isWebApp: true,
17
+ isDevEnv: true,
18
+ },
19
+ webBeta: {
20
+ isWebApp: true,
21
+ isBetaEnv: true,
22
+ },
23
+ mobileIosProd: {
24
+ isMobileApp: true,
25
+ isIOS: true,
26
+ isAndroid: false,
27
+ isDevEnv: false,
28
+ },
29
+ mobileIosDev: {
30
+ isMobileApp: true,
31
+ isIOS: true,
32
+ isAndroid: false,
33
+ isDevEnv: true,
34
+ },
35
+ mobileIosBeta: {
36
+ isMobileApp: true,
37
+ isIOS: true,
38
+ isAndroid: false,
39
+ isBetaEnv: true,
40
+ },
41
+ mobileAndroidProd: {
42
+ isMobileApp: true,
43
+ isAndroid: true,
44
+ isDevEnv: false,
45
+ },
46
+ mobileAndroidDev: {
47
+ isMobileApp: true,
48
+ isAndroid: true,
49
+ isDevEnv: true,
50
+ },
51
+ mobileAndroidBeta: {
52
+ isMobileApp: true,
53
+ isAndroid: true,
54
+ isBetaEnv: true,
55
+ },
56
+ extensionProd: {
57
+ isExtensionApp: true,
58
+ isDevEnv: false,
59
+ },
60
+ extensionDev: {
61
+ isExtensionApp: true,
62
+ isDevEnv: true,
63
+ },
64
+ extensionBeta: {
65
+ isExtensionApp: true,
66
+ isBetaEnv: true,
67
+ },
68
+ playwrightDev: {
69
+ isWebApp: true,
70
+ isPlaywrightEnv: true,
71
+ isDevEnv: true,
72
+ },
73
+ playwrightProd: {
74
+ isWebApp: true,
75
+ isPlaywrightEnv: true,
76
+ isDevEnv: false,
77
+ },
78
+ }
79
+ describe('urls', () => {
80
+ beforeEach(async () => {
81
+ // Reset modules to clear cached imports
82
+ vi.resetModules()
83
+ })
84
+
85
+ afterEach(() => {
86
+ vi.clearAllMocks()
87
+ })
88
+
89
+ describe('getCloudflareApiBaseUrl', () => {
90
+ describe('TradingApi', () => {
91
+ it.each([
92
+ // Web
93
+ {
94
+ expectedUrl: 'https://trading-api-labs.interface.gateway.lux.org',
95
+ env: envConfigs.webProd,
96
+ },
97
+ {
98
+ expectedUrl: 'https://beta.trading-api-labs.interface.gateway.lux.org',
99
+ env: envConfigs.webDev,
100
+ },
101
+ {
102
+ expectedUrl: 'https://trading-api-labs.interface.gateway.lux.org',
103
+ env: envConfigs.webBeta,
104
+ },
105
+ // Mobile iOS
106
+ {
107
+ expectedUrl: 'https://trading-api-labs.ios.wallet.gateway.lux.org',
108
+ env: envConfigs.mobileIosProd,
109
+ },
110
+ {
111
+ expectedUrl: 'https://beta.trading-api-labs.ios.wallet.gateway.lux.org',
112
+ env: envConfigs.mobileIosDev,
113
+ },
114
+ {
115
+ expectedUrl: 'https://trading-api-labs.ios.wallet.gateway.lux.org',
116
+ env: envConfigs.mobileIosBeta,
117
+ },
118
+ // Mobile Android
119
+ {
120
+ expectedUrl: 'https://trading-api-labs.android.wallet.gateway.lux.org',
121
+ env: envConfigs.mobileAndroidProd,
122
+ },
123
+ {
124
+ expectedUrl: 'https://beta.trading-api-labs.android.wallet.gateway.lux.org',
125
+ env: envConfigs.mobileAndroidDev,
126
+ },
127
+ {
128
+ expectedUrl: 'https://trading-api-labs.android.wallet.gateway.lux.org',
129
+ env: envConfigs.mobileAndroidBeta,
130
+ },
131
+ // Extension
132
+ {
133
+ expectedUrl: 'https://trading-api-labs.extension.gateway.lux.org',
134
+ env: envConfigs.extensionProd,
135
+ },
136
+ {
137
+ expectedUrl: 'https://beta.trading-api-labs.extension.gateway.lux.org',
138
+ env: envConfigs.extensionDev,
139
+ },
140
+ {
141
+ expectedUrl: 'https://trading-api-labs.extension.gateway.lux.org',
142
+ env: envConfigs.extensionBeta,
143
+ },
144
+ // Playwright
145
+ {
146
+ expectedUrl: 'https://trading-api-labs.interface.gateway.lux.org',
147
+ env: envConfigs.playwrightDev,
148
+ },
149
+ {
150
+ expectedUrl: 'https://trading-api-labs.interface.gateway.lux.org',
151
+ env: envConfigs.playwrightProd,
152
+ },
153
+ ])('generates correct URL for $env', async ({ expectedUrl, env }) => {
154
+ mockEnvironmentAndPlatform(env)
155
+ const { getCloudflareApiBaseUrl } = await import('./urls')
156
+ expect(getCloudflareApiBaseUrl({ flow: TrafficFlows.TradingApi })).toBe(expectedUrl)
157
+ })
158
+ })
159
+
160
+ describe('DataApi', () => {
161
+ it.each([
162
+ // Web
163
+ { expectedUrl: 'https://beta.gateway.lux.org', env: envConfigs.webDev },
164
+ { expectedUrl: 'https://interface.gateway.lux.org', env: envConfigs.webBeta },
165
+ { expectedUrl: 'https://interface.gateway.lux.org', env: envConfigs.webProd },
166
+ // Mobile iOS
167
+ { expectedUrl: 'https://beta.gateway.lux.org', env: envConfigs.mobileIosDev },
168
+ { expectedUrl: 'https://ios.wallet.gateway.lux.org', env: envConfigs.mobileIosBeta },
169
+ { expectedUrl: 'https://ios.wallet.gateway.lux.org', env: envConfigs.mobileIosProd },
170
+ // Mobile Android
171
+ { expectedUrl: 'https://beta.gateway.lux.org', env: envConfigs.mobileAndroidDev },
172
+ { expectedUrl: 'https://android.wallet.gateway.lux.org', env: envConfigs.mobileAndroidBeta },
173
+ { expectedUrl: 'https://android.wallet.gateway.lux.org', env: envConfigs.mobileAndroidProd },
174
+ // Extension
175
+ { expectedUrl: 'https://beta.gateway.lux.org', env: envConfigs.extensionDev },
176
+ { expectedUrl: 'https://extension.gateway.lux.org', env: envConfigs.extensionBeta },
177
+ { expectedUrl: 'https://extension.gateway.lux.org', env: envConfigs.extensionProd },
178
+ // Playwright
179
+ { expectedUrl: 'https://interface.gateway.lux.org', env: envConfigs.playwrightDev },
180
+ { expectedUrl: 'https://interface.gateway.lux.org', env: envConfigs.playwrightProd },
181
+ ])('generates correct URL for $env', async ({ expectedUrl, env }) => {
182
+ mockEnvironmentAndPlatform(env)
183
+ const { getCloudflareApiBaseUrl } = await import('./urls')
184
+ expect(getCloudflareApiBaseUrl({ flow: TrafficFlows.DataApi })).toBe(expectedUrl)
185
+ })
186
+ })
187
+ })
188
+
189
+ describe('Default Flow', () => {
190
+ it.each([
191
+ // Web
192
+ { expectedUrl: 'https://interface.gateway.lux.org', env: envConfigs.webDev },
193
+ { expectedUrl: 'https://interface.gateway.lux.org', env: envConfigs.webBeta },
194
+ { expectedUrl: 'https://interface.gateway.lux.org', env: envConfigs.webProd },
195
+ // Mobile iOS
196
+ { expectedUrl: 'https://ios.wallet.gateway.lux.org', env: envConfigs.mobileIosDev },
197
+ { expectedUrl: 'https://ios.wallet.gateway.lux.org', env: envConfigs.mobileIosBeta },
198
+ { expectedUrl: 'https://ios.wallet.gateway.lux.org', env: envConfigs.mobileIosProd },
199
+ // Mobile Android
200
+ { expectedUrl: 'https://android.wallet.gateway.lux.org', env: envConfigs.mobileAndroidDev },
201
+ { expectedUrl: 'https://android.wallet.gateway.lux.org', env: envConfigs.mobileAndroidBeta },
202
+ { expectedUrl: 'https://android.wallet.gateway.lux.org', env: envConfigs.mobileAndroidProd },
203
+ // Extension
204
+ { expectedUrl: 'https://extension.gateway.lux.org', env: envConfigs.extensionDev },
205
+ { expectedUrl: 'https://extension.gateway.lux.org', env: envConfigs.extensionBeta },
206
+ { expectedUrl: 'https://extension.gateway.lux.org', env: envConfigs.extensionProd },
207
+ // Playwright
208
+ { expectedUrl: 'https://interface.gateway.lux.org', env: envConfigs.playwrightDev },
209
+ { expectedUrl: 'https://interface.gateway.lux.org', env: envConfigs.playwrightProd },
210
+ ])('generates correct URL for $env', async ({ expectedUrl, env }) => {
211
+ mockEnvironmentAndPlatform(env)
212
+ const { getCloudflareApiBaseUrl } = await import('./urls')
213
+ expect(getCloudflareApiBaseUrl()).toBe(expectedUrl)
214
+ })
215
+ })
216
+
217
+ it.each(Object.values(TrafficFlows))(
218
+ 'getCloudflareApiBaseUrl appends postfix correctly for flow: %s',
219
+ async (flow) => {
220
+ mockEnvironmentAndPlatform(envConfigs.webProd)
221
+ const { getCloudflareApiBaseUrl } = await import('./urls')
222
+ const postfix = 'my-postfix'
223
+
224
+ const baseUrl = getCloudflareApiBaseUrl({ flow })
225
+ const urlWithPostfix = getCloudflareApiBaseUrl({ flow, postfix })
226
+
227
+ expect(urlWithPostfix).toBe(`${baseUrl}/${postfix}`)
228
+ },
229
+ )
230
+
231
+ it('generates correct URL for GraphQL flow in web/Playwright', async () => {
232
+ vi.doMock('@luxfi/utilities/src/environment/env', () => ({
233
+ isBetaEnv: () => false,
234
+ isDevEnv: () => false,
235
+ isRNDev: () => false,
236
+ isPlaywrightEnv: () => true,
237
+ isTestEnv: () => false,
238
+ }))
239
+
240
+ vi.doMock('@luxfi/utilities/src/platform', () => ({
241
+ isAndroid: false,
242
+ isExtensionApp: false,
243
+ isMobileApp: false,
244
+ isWebApp: false,
245
+ }))
246
+
247
+ const { getCloudflareApiBaseUrl } = await import('./urls')
248
+ const result = getCloudflareApiBaseUrl({ flow: TrafficFlows.GraphQL })
249
+
250
+ expect(result).toBe('https://graphql.interface.gateway.lux.org')
251
+ })
252
+ })
253
+
254
+ /**
255
+ * Helper to create mock configurations for environment and platform utilities.
256
+ * All values default to false but can be overridden.
257
+ */
258
+ function mockEnvironmentAndPlatform(
259
+ overrides: {
260
+ isBetaEnv?: boolean
261
+ isDevEnv?: boolean
262
+ isRNDev?: boolean
263
+ isPlaywrightEnv?: boolean
264
+ isTestEnv?: boolean
265
+ isAndroid?: boolean
266
+ isExtensionApp?: boolean
267
+ isMobileApp?: boolean
268
+ isWebApp?: boolean
269
+ } = {},
270
+ ) {
271
+ const {
272
+ isBetaEnv = false,
273
+ isDevEnv = false,
274
+ isRNDev = false,
275
+ isPlaywrightEnv = false,
276
+ isTestEnv = false,
277
+ isAndroid = false,
278
+ isExtensionApp = false,
279
+ isMobileApp = false,
280
+ isWebApp = false,
281
+ } = overrides
282
+
283
+ vi.doMock('@luxfi/utilities/src/environment/env', () => ({
284
+ isBetaEnv: () => isBetaEnv,
285
+ isDevEnv: () => isDevEnv,
286
+ isRNDev: () => isRNDev,
287
+ isPlaywrightEnv: () => isPlaywrightEnv,
288
+ isTestEnv: () => isTestEnv,
289
+ }))
290
+
291
+ vi.doMock('@luxfi/utilities/src/platform', () => ({
292
+ isAndroid,
293
+ isExtensionApp,
294
+ isMobileApp,
295
+ isWebApp,
296
+ }))
297
+ }
@@ -0,0 +1,85 @@
1
+ import { isBetaEnv, isDevEnv, isPlaywrightEnv, isTestEnv } from '@luxfi/utilities/src/environment/env'
2
+ import { isAndroid, isExtensionApp, isMobileApp, isWebApp } from '@luxfi/utilities/src/platform'
3
+
4
+ export enum TrafficFlows {
5
+ GraphQL = 'graphql',
6
+ Metrics = 'metrics',
7
+ Gating = 'gating',
8
+ TradingApi = 'trading-api-labs',
9
+ Unitags = 'unitags',
10
+ FOR = 'for',
11
+ Scantastic = 'scantastic',
12
+ DataApi = 'data-api',
13
+ }
14
+
15
+ export const helpUrl = 'https://docs.lux.exchange/help'
16
+
17
+ const FLOWS_USING_BETA = [TrafficFlows.FOR]
18
+
19
+ const isDevOrBeta = isPlaywrightEnv() ? false : isDevEnv() || isBetaEnv()
20
+
21
+ export function getCloudflarePrefix(flow?: TrafficFlows): string {
22
+ if (flow && isDevOrBeta && FLOWS_USING_BETA.includes(flow)) {
23
+ return `beta`
24
+ }
25
+
26
+ if (isMobileApp) {
27
+ return `${isAndroid ? 'android' : 'ios'}.wallet`
28
+ }
29
+
30
+ if (isExtensionApp) {
31
+ return 'extension'
32
+ }
33
+
34
+ if (isPlaywrightEnv() || isWebApp) {
35
+ return 'interface'
36
+ }
37
+
38
+ if (isTestEnv()) {
39
+ return 'wallet'
40
+ }
41
+
42
+ throw new Error('Could not determine app to generate Cloudflare prefix')
43
+ }
44
+
45
+ export function getServicePrefix(flow?: TrafficFlows): string {
46
+ if (flow && (isPlaywrightEnv() || !(isDevOrBeta && FLOWS_USING_BETA.includes(flow)))) {
47
+ return flow + '.'
48
+ } else {
49
+ return ''
50
+ }
51
+ }
52
+
53
+ export function getCloudflareApiBaseUrl(params?: { flow?: TrafficFlows; postfix?: string }): string {
54
+ const { flow, postfix } = params ?? {}
55
+ let baseUrl
56
+ if (flow === TrafficFlows.TradingApi && !isPlaywrightEnv()) {
57
+ // This is an exception that only applies to dev + TAPI where the order of the prefix matters
58
+ baseUrl = `https://${isDevEnv() ? 'beta.' : ''}trading-api-labs.${getCloudflarePrefix(flow)}.gateway.lux.org`
59
+ }
60
+ // Only changing this for DataApi to use the new prefixing logic that points both prod and beta to prod
61
+ else if (flow === TrafficFlows.DataApi) {
62
+ baseUrl = `https://${isDevEnv() && !isPlaywrightEnv() ? 'beta' : getCloudflarePrefix(flow)}.gateway.lux.org`
63
+ } else {
64
+ baseUrl = `https://${getServicePrefix(flow)}${getCloudflarePrefix(flow)}.gateway.lux.org`
65
+ }
66
+ if (postfix) {
67
+ baseUrl += `/${postfix}`
68
+ }
69
+ return baseUrl
70
+ }
71
+
72
+ export function createHelpArticleUrl(resourceId: string, path: string = 'articles'): string {
73
+ const product = isMobileApp ? 'mobileApp' : isExtensionApp ? 'extension' : 'web'
74
+ return `${helpUrl}/${path}/${resourceId}?product_link=${product}`
75
+ }
76
+
77
+ // Entry Gateway API URLs
78
+ export const DEV_ENTRY_GATEWAY_API_BASE_URL: string = 'https://entry-gateway.backend-dev.api.lux.org'
79
+ export const STAGING_ENTRY_GATEWAY_API_BASE_URL: string = 'https://entry-gateway.backend-staging.api.lux.org'
80
+ export const PROD_ENTRY_GATEWAY_API_BASE_URL: string = 'https://entry-gateway.backend-prod.api.lux.org'
81
+
82
+ // WebSocket URLs
83
+ export const DEV_WEBSOCKET_BASE_URL: string = 'wss://websockets.backend-prod.api.lux.org'
84
+ export const STAGING_WEBSOCKET_BASE_URL: string = 'wss://websockets.backend-prod.api.lux.org'
85
+ export const PROD_WEBSOCKET_BASE_URL: string = 'wss://websockets.backend-prod.api.lux.org'