@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
package/src/index.ts ADDED
@@ -0,0 +1,318 @@
1
+ /** biome-ignore-all assist/source/organizeImports: we want to manually group exports by category */
2
+
3
+ /**
4
+ * @luxexchange/api - Unified data layer for Lux Universe
5
+ *
6
+ * This is the ONLY public entry point for the API package.
7
+ * All exports must be explicitly listed here.
8
+ * Deep imports are forbidden and will be blocked by ESLint.
9
+ */
10
+
11
+ // Foundations
12
+ export { createFetchClient } from '@luxexchange/api/src/clients/base/createFetchClient'
13
+ export {
14
+ FetchError,
15
+ is401Error,
16
+ is404Error,
17
+ isRateLimitFetchError,
18
+ } from '@luxexchange/api/src/clients/base/errors'
19
+ export type {
20
+ CustomOptions,
21
+ FetchClient,
22
+ StandardFetchOptions,
23
+ } from '@luxexchange/api/src/clients/base/types'
24
+ export { SharedQueryClient } from '@luxexchange/api/src/clients/base/SharedQueryClient'
25
+
26
+ // Constants and URLs
27
+ export {
28
+ createHelpArticleUrl,
29
+ DEV_ENTRY_GATEWAY_API_BASE_URL,
30
+ getCloudflareApiBaseUrl,
31
+ getCloudflarePrefix,
32
+ getServicePrefix,
33
+ helpUrl,
34
+ PROD_ENTRY_GATEWAY_API_BASE_URL,
35
+ STAGING_ENTRY_GATEWAY_API_BASE_URL,
36
+ TrafficFlows,
37
+ } from '@luxexchange/api/src/clients/base/urls'
38
+
39
+ // Auth
40
+ export type { AuthData, SignedRequestParams, SignMessageFunc } from '@luxexchange/api/src/clients/base/auth'
41
+ export { createSignedRequestBody, createSignedRequestParams } from '@luxexchange/api/src/clients/base/auth'
42
+
43
+ // GraphQL API
44
+ export * as GraphQLApi from '@luxexchange/api/src/clients/graphql/generated'
45
+ export {
46
+ useTokenBasicInfoPartsFragment,
47
+ useTokenBasicProjectPartsFragment,
48
+ useTokenMarketPartsFragment,
49
+ useTokenProjectMarketsPartsFragment,
50
+ useTokenProjectUrlsPartsFragment,
51
+ } from '@luxexchange/api/src/clients/graphql/fragments'
52
+ export { GQLQueries } from '@luxexchange/api/src/clients/graphql/queries'
53
+ export type { GqlResult } from '@luxexchange/api/src/clients/graphql/types'
54
+ export { isError, isNonPollingRequestInFlight, isWarmLoadingStatus } from '@luxexchange/api/src/clients/graphql/utils'
55
+
56
+ // Jupiter API
57
+ export {
58
+ createJupiterApiClient,
59
+ type JupiterApiClient,
60
+ } from '@luxexchange/api/src/clients/jupiter/createJupiterApiClient'
61
+ export type {
62
+ JupiterExecuteResponse,
63
+ JupiterOrderResponse,
64
+ JupiterExecuteUrlParams,
65
+ JupiterOrderUrlParams,
66
+ } from '@luxexchange/api/src/clients/jupiter/types'
67
+ export {
68
+ jupiterExecuteResponseSchema,
69
+ jupiterOrderResponseSchema,
70
+ } from '@luxexchange/api/src/clients/jupiter/types'
71
+
72
+ // Blockaid API
73
+ export {
74
+ createBlockaidApiClient,
75
+ type BlockaidApiClient,
76
+ } from '@luxexchange/api/src/clients/blockaid/createBlockaidApiClient'
77
+ export {
78
+ getBlockaidScanSiteResponseSchema,
79
+ getBlockaidScanTransactionRequestSchema,
80
+ getBlockaidScanTransactionResponseSchema,
81
+ getBlockaidScanJsonRpcRequestSchema,
82
+ DappVerificationStatus,
83
+ type BlockaidScanSiteRequest,
84
+ type BlockaidScanSiteResponse,
85
+ type BlockaidScanSiteHitResponse,
86
+ type BlockaidScanSiteMissResponse,
87
+ type BlockaidScanTransactionRequest,
88
+ type BlockaidScanTransactionResponse,
89
+ type BlockaidScanJsonRpcRequest,
90
+ type BlockaidScanJsonRpcResponse,
91
+ } from '@luxexchange/api/src/clients/blockaid/types'
92
+
93
+ // Trading API
94
+ export * as TradingApi from '@luxexchange/api/src/clients/trading/__generated__'
95
+ export {
96
+ createTradingApiClient,
97
+ type TradingApiClient,
98
+ type TradingClientContext,
99
+ } from '@luxexchange/api/src/clients/trading/createTradingApiClient'
100
+ export {
101
+ type BridgeQuoteResponse,
102
+ type ChainedQuoteResponse,
103
+ type ClassicQuoteResponse,
104
+ type DiscriminatedQuoteResponse,
105
+ type DutchQuoteResponse,
106
+ type DutchV3QuoteResponse,
107
+ type ExistingPlanRequest,
108
+ type PriorityQuoteResponse,
109
+ type SwappableTokensParams,
110
+ type UnwrapQuoteResponse,
111
+ type UpdatePlanRequestWithPlanId,
112
+ type WrapQuoteResponse,
113
+ } from '@luxexchange/api/src/clients/trading/tradeTypes'
114
+ export {
115
+ FeeType,
116
+ type FormattedDEXGasFeeInfo,
117
+ type GasEstimate,
118
+ type GasEstimateEip1559,
119
+ type GasEstimateLegacy,
120
+ type GasFeeResponse,
121
+ type GasFeeResult,
122
+ type GasFeeResultWithoutState,
123
+ type GasStrategy,
124
+ type TransactionEip1559FeeParams,
125
+ type TransactionLegacyFeeParams,
126
+ } from '@luxexchange/api/src/clients/trading/types'
127
+
128
+ // Liquidity Service API
129
+ export {
130
+ createLiquidityServiceClient,
131
+ type LiquidityServiceClient,
132
+ } from '@luxexchange/api/src/clients/liquidity/createLiquidityServiceClient'
133
+ export {
134
+ createAuctionMutationClient,
135
+ type AuctionMutationClient,
136
+ } from '@luxexchange/api/src/clients/liquidity/createAuctionMutationClient'
137
+
138
+ // Auction Service API
139
+ export {
140
+ createAuctionServiceClient,
141
+ type AuctionServiceClient,
142
+ } from '@luxexchange/api/src/clients/auctions/createAuctionServiceClient'
143
+
144
+ // Lux API
145
+ export {
146
+ createLuxApiClient,
147
+ type ScreenRequest,
148
+ type ScreenResponse,
149
+ type LuxApiClient,
150
+ type LuxApiClientContext,
151
+ } from '@luxexchange/api/src/clients/lux/createLuxApiClient'
152
+
153
+ // Unitags API
154
+ export {
155
+ type ProfileMetadata,
156
+ type UnitagAddressesRequest,
157
+ type UnitagAddressesResponse,
158
+ type UnitagAddressRequest,
159
+ type UnitagAddressResponse,
160
+ type UnitagAvatarUploadCredentials,
161
+ type UnitagChangeUsernameRequestBody,
162
+ type UnitagClaim,
163
+ type UnitagClaimContext,
164
+ type UnitagClaimEligibilityRequest,
165
+ type UnitagClaimEligibilityResponse,
166
+ type UnitagClaimSource,
167
+ type UnitagClaimUsernameRequestBody,
168
+ type UnitagDeleteUsernameRequestBody,
169
+ UnitagErrorCodes,
170
+ type UnitagGetAvatarUploadUrlResponse,
171
+ type UnitagResponse,
172
+ type UnitagUpdateMetadataRequestBody,
173
+ type UnitagUpdateMetadataResponse,
174
+ type UnitagUsernameRequest,
175
+ type UnitagUsernameResponse,
176
+ } from '@luxexchange/api/src/clients/unitags/types'
177
+ export { createUnitagsApiClient } from '@luxexchange/api/src/clients/unitags/createUnitagsApiClient'
178
+
179
+ // Data API Service (ConnectRPC - listTopTokens, listTopPools, getPortfolio, etc.)
180
+ export {
181
+ createDataApiServiceClient,
182
+ type DataApiServiceClient,
183
+ type DataApiServiceClientContext,
184
+ } from '@luxexchange/api/src/clients/dataApi/createDataApiServiceClient'
185
+ export {
186
+ getGetPortfolioQueryOptions,
187
+ type GetPortfolioQueryParams,
188
+ } from '@luxexchange/api/src/clients/dataApi/getGetPortfolioQueryOptions'
189
+ export {
190
+ TopPoolsOrderBy,
191
+ TopTokensOrderBy,
192
+ type GetPortfolioRequest,
193
+ type GetPortfolioResponse,
194
+ type ListTopPoolsResponse,
195
+ type ListTopTokensResponse,
196
+ } from '@uniswap/client-data-api/dist/data/v1/api_pb'
197
+ export { ProtocolVersion } from '@uniswap/client-data-api/dist/data/v1/poolTypes_pb'
198
+ export { type Pool as DataApiPool, type Token as DataApiToken } from '@uniswap/client-data-api/dist/data/v1/types_pb'
199
+
200
+ // Data Service API
201
+ export {
202
+ createDataServiceApiClient,
203
+ type DataServiceApiClient,
204
+ type DataServiceApiClientContext,
205
+ TokenReportEventType,
206
+ ReportAssetType,
207
+ } from '@luxexchange/api/src/clients/data/createDataServiceApiClient'
208
+
209
+ // Notifications API
210
+ export { createNotificationsApiClient } from '@luxexchange/api/src/clients/notifications/createNotificationsApiClient'
211
+ export { BackgroundType, ContentStyle, OnClickAction } from '@luxexchange/api/src/clients/notifications/types'
212
+ export type {
213
+ AckNotificationRequest,
214
+ AckNotificationResponse,
215
+ GetNotificationsRequest,
216
+ GetNotificationsResponse,
217
+ InAppNotification,
218
+ NotificationsApiClient,
219
+ NotificationsClientContext,
220
+ } from '@luxexchange/api/src/clients/notifications/types'
221
+
222
+ // FOR (Fiat On-Ramp) API
223
+ export {
224
+ createForApiClient,
225
+ type ForApiClient,
226
+ } from '@luxexchange/api/src/clients/for/createForApiClient'
227
+ export { transformPaymentMethods } from '@luxexchange/api/src/clients/for/utils'
228
+ export type {
229
+ FORCountry,
230
+ FORLogo,
231
+ FORQuote,
232
+ FORQuoteResponse,
233
+ FORServiceProvider,
234
+ FORSupportedFiatCurrency,
235
+ FORSupportedToken,
236
+ FORTransaction,
237
+ } from '@luxexchange/api/src/clients/for/types'
238
+ // Re-export FOR protobuf types for consumer packages
239
+ export {
240
+ RampDirection,
241
+ TransactionStatus as FORTransactionStatus,
242
+ GetCountryResponse,
243
+ OffRampTransferDetailsRequest,
244
+ OffRampTransferDetailsResponse,
245
+ OffRampWidgetUrlRequest,
246
+ QuoteRequest,
247
+ SupportedCountriesRequest,
248
+ SupportedCountriesResponse,
249
+ SupportedFiatCurrenciesRequest,
250
+ SupportedFiatCurrenciesResponse,
251
+ SupportedTokensRequest,
252
+ SupportedTokensResponse,
253
+ TransactionRequest,
254
+ TransactionResponse,
255
+ TransferServiceProvidersResponse,
256
+ TransferWidgetUrlRequest,
257
+ WidgetUrlRequest,
258
+ WidgetUrlResponse,
259
+ } from '@uniswap/client-for/dist/for/v1/api_pb'
260
+
261
+ // ConnectRPC API
262
+ export {
263
+ ALL_NETWORKS_ARG,
264
+ createConnectTransportWithDefaults,
265
+ type ConnectRpcContext,
266
+ } from '@luxexchange/api/src/connectRpc/base'
267
+ export {
268
+ parseProtectionInfo,
269
+ parseRestProtocolVersion,
270
+ parseSafetyLevel,
271
+ transformInput,
272
+ type WithoutWalletAccount,
273
+ } from '@luxexchange/api/src/connectRpc/utils'
274
+
275
+ // Conversion Tracking API
276
+ export * as ConversionTrackingApi from '@luxexchange/api/src/clients/conversionTracking'
277
+
278
+ // Embedded Wallet API
279
+ export {
280
+ createEmbeddedWalletApiClient,
281
+ type EmbeddedWalletApiClient,
282
+ type EmbeddedWalletClientContext,
283
+ } from '@luxexchange/api/src/clients/embeddedWallet/createEmbeddedWalletApiClient'
284
+
285
+ // Other Utilities
286
+ export {
287
+ createFetcher,
288
+ objectToQueryString,
289
+ } from '@luxexchange/api/src/clients/base/utils'
290
+
291
+ // Session API
292
+ export { ApiInit, SESSION_INIT_QUERY_KEY } from '@luxexchange/api/src/components/ApiInit'
293
+ export { provideSessionService } from '@luxexchange/api/src/provideSessionService'
294
+ export { useIsSessionInitialized } from '@luxexchange/api/src/hooks/useIsSessionInitialized'
295
+
296
+ // Session Transport (pure factory, no platform detection)
297
+ export { createSessionTransport, type CreateSessionTransportOptions } from '@luxexchange/api/src/session'
298
+
299
+ export type {
300
+ UseQueryApiHelperHookArgs,
301
+ UseQueryWithImmediateGarbageCollectionApiHelperHookArgs,
302
+ } from '@luxexchange/api/src/hooks/shared/types'
303
+ export { useQueryWithImmediateGarbageCollection } from '@luxexchange/api/src/hooks/shared/useQueryWithImmediateGarbageCollection'
304
+
305
+ // Other Types
306
+ export {
307
+ CustomRankingType,
308
+ RankingType,
309
+ SpamCode,
310
+ } from '@luxexchange/api/src/clients/content/types'
311
+
312
+ export { getTransport } from '@luxexchange/api/src/transport'
313
+
314
+ export { getEntryGatewayUrl, getMigratedForApiUrl } from '@luxexchange/api/src/getEntryGatewayUrl'
315
+
316
+ export { getWebSocketUrl } from '@luxexchange/api/src/getWebSocketUrl'
317
+
318
+ export { provideLuxIdentifierService } from '@luxexchange/api/src/provideLuxIdentifierService'
@@ -0,0 +1,25 @@
1
+ import { getStorageDriver } from '@luxfi/api/src/storage/getStorageDriver'
2
+ import { createDeviceIdService, DeviceIdService } from '@luxfi/sessions'
3
+
4
+ const DEVICE_ID_KEY = 'LUX_DEVICE_ID'
5
+
6
+ function provideDeviceIdService(): DeviceIdService {
7
+ const driver = getStorageDriver()
8
+
9
+ const service = createDeviceIdService({
10
+ getDeviceId: async () => {
11
+ const deviceId = await driver.get(DEVICE_ID_KEY)
12
+ return deviceId || ''
13
+ },
14
+ setDeviceId: async (deviceId: string) => {
15
+ await driver.set(DEVICE_ID_KEY, deviceId)
16
+ },
17
+ removeDeviceId: async () => {
18
+ await driver.remove(DEVICE_ID_KEY)
19
+ },
20
+ })
21
+
22
+ return service
23
+ }
24
+
25
+ export { provideDeviceIdService }
@@ -0,0 +1,25 @@
1
+ import { getStorageDriver } from '@luxfi/api/src/storage/getStorageDriver'
2
+ import { createLuxIdentifierService, LuxIdentifierService } from '@luxfi/sessions'
3
+
4
+ const LUX_IDENTIFIER_KEY = 'LUX_IDENTIFIER'
5
+
6
+ function provideLuxIdentifierService(): LuxIdentifierService {
7
+ const driver = getStorageDriver()
8
+
9
+ const service = createLuxIdentifierService({
10
+ getLuxIdentifier: async () => {
11
+ const identifier = await driver.get(LUX_IDENTIFIER_KEY)
12
+ return identifier || null
13
+ },
14
+ setLuxIdentifier: async (identifier: string) => {
15
+ await driver.set(LUX_IDENTIFIER_KEY, identifier)
16
+ },
17
+ removeLuxIdentifier: async () => {
18
+ await driver.remove(LUX_IDENTIFIER_KEY)
19
+ },
20
+ })
21
+
22
+ return service
23
+ }
24
+
25
+ export { provideLuxIdentifierService }
@@ -0,0 +1,46 @@
1
+ import { provideDeviceIdService } from '@luxfi/api/src/provideDeviceIdService'
2
+ import { provideSessionStorage } from '@luxfi/api/src/provideSessionStorage'
3
+ import { provideLuxIdentifierService } from '@luxfi/api/src/provideLuxIdentifierService'
4
+ import { getTransport } from '@luxfi/api/src/transport'
5
+ import {
6
+ createNoopSessionService,
7
+ createSessionClient,
8
+ createSessionRepository,
9
+ createSessionService,
10
+ type SessionService,
11
+ } from '@luxfi/sessions'
12
+ import type { Logger } from '@luxfi/utilities/src/logger/logger'
13
+ import { REQUEST_SOURCE } from '@luxfi/utilities/src/platform/requestSource'
14
+
15
+ function provideSessionService(ctx: {
16
+ getBaseUrl: () => string
17
+ getIsSessionServiceEnabled: () => boolean
18
+ getLogger?: () => Logger
19
+ }): SessionService {
20
+ if (!ctx.getIsSessionServiceEnabled()) {
21
+ return createNoopSessionService()
22
+ }
23
+ return getMobileSessionService(ctx)
24
+ }
25
+
26
+ function getMobileSessionService(ctx: { getBaseUrl: () => string; getLogger?: () => Logger }): SessionService {
27
+ const sessionClient = createSessionClient({
28
+ transport: getTransport({
29
+ getBaseUrl: ctx.getBaseUrl,
30
+ getHeaders: () => ({ 'x-request-source': REQUEST_SOURCE }),
31
+ }),
32
+ })
33
+
34
+ const sessionStorage = provideSessionStorage()
35
+ const deviceIdService = provideDeviceIdService()
36
+ const luxIdentifierService = provideLuxIdentifierService()
37
+ const sessionRepository = createSessionRepository({ client: sessionClient, getLogger: ctx.getLogger })
38
+ return createSessionService({
39
+ sessionStorage,
40
+ deviceIdService,
41
+ luxIdentifierService,
42
+ sessionRepository,
43
+ })
44
+ }
45
+
46
+ export { provideSessionService }
@@ -0,0 +1,13 @@
1
+ import type { SessionService, LuxIdentifierService } from '@luxexchange/sessions'
2
+ import { PlatformSplitStubError } from '@luxfi/utilities/src/errors'
3
+ import type { Logger } from '@luxfi/utilities/src/logger/logger'
4
+
5
+ export function provideSessionService(_ctx: {
6
+ getBaseUrl: () => string
7
+ getIsSessionServiceEnabled: () => boolean
8
+ getLogger?: () => Logger
9
+ /** Optional custom LuxIdentifierService. If not provided, uses default localStorage-based service. */
10
+ luxIdentifierService?: LuxIdentifierService
11
+ }): SessionService {
12
+ throw new PlatformSplitStubError('provideSessionService')
13
+ }
@@ -0,0 +1,87 @@
1
+ import { provideDeviceIdService } from '@luxexchange/api/src/provideDeviceIdService'
2
+ import { provideSessionStorage } from '@luxexchange/api/src/provideSessionStorage'
3
+ import { provideLuxIdentifierService } from '@luxexchange/api/src/provideLuxIdentifierService'
4
+ import { getTransport } from '@luxexchange/api/src/transport'
5
+ import {
6
+ createNoopSessionService,
7
+ createSessionClient,
8
+ createSessionRepository,
9
+ createSessionService,
10
+ type SessionService,
11
+ type LuxIdentifierService,
12
+ } from '@luxexchange/sessions'
13
+ import type { Logger } from '@luxfi/utilities/src/logger/logger'
14
+ import { isWebApp } from '@luxfi/utilities/src/platform'
15
+ import { REQUEST_SOURCE } from '@luxfi/utilities/src/platform/requestSource'
16
+
17
+ function provideSessionService(ctx: {
18
+ getBaseUrl: () => string
19
+ getIsSessionServiceEnabled: () => boolean
20
+ getLogger?: () => Logger
21
+ /** Optional custom LuxIdentifierService. If not provided, uses default localStorage-based service. */
22
+ luxIdentifierService?: LuxIdentifierService
23
+ }): SessionService {
24
+ if (!ctx.getIsSessionServiceEnabled()) {
25
+ return createNoopSessionService()
26
+ }
27
+ if (isWebApp) {
28
+ return getWebAppSessionService(ctx)
29
+ }
30
+ return getExtensionSessionService(ctx)
31
+ }
32
+
33
+ /**
34
+ * In production, web won't need an explicit session service since cookies are automatically handled by the backend+browser.
35
+ *
36
+ * For testing, we need this since SessionService is the only backend service that has CORS configured to handle the credentials header.
37
+ *
38
+ * When more services are added to the Entry Gateway, we can remove this and rely on those typical requests to instantiate the cookie.
39
+ */
40
+ function getWebAppSessionService(ctx: {
41
+ getBaseUrl: () => string
42
+ getLogger?: () => Logger
43
+ luxIdentifierService?: LuxIdentifierService
44
+ }): SessionService {
45
+ const sessionClient = createSessionClient({
46
+ transport: getTransport({
47
+ getBaseUrl: ctx.getBaseUrl,
48
+ getHeaders: () => ({ 'x-request-source': REQUEST_SOURCE }),
49
+ options: {
50
+ credentials: 'include',
51
+ },
52
+ }),
53
+ })
54
+
55
+ const sessionRepository = createSessionRepository({ client: sessionClient, getLogger: ctx.getLogger })
56
+
57
+ return createSessionService({
58
+ sessionStorage: provideSessionStorage(),
59
+ deviceIdService: provideDeviceIdService(),
60
+ luxIdentifierService: ctx.luxIdentifierService ?? provideLuxIdentifierService(),
61
+ sessionRepository,
62
+ })
63
+ }
64
+
65
+ function getExtensionSessionService(ctx: {
66
+ getBaseUrl: () => string
67
+ getLogger?: () => Logger
68
+ luxIdentifierService?: LuxIdentifierService
69
+ }): SessionService {
70
+ const sessionClient = createSessionClient({
71
+ transport: getTransport({
72
+ getBaseUrl: ctx.getBaseUrl,
73
+ getHeaders: () => ({ 'x-request-source': REQUEST_SOURCE }),
74
+ }),
75
+ })
76
+
77
+ const sessionRepository = createSessionRepository({ client: sessionClient, getLogger: ctx.getLogger })
78
+
79
+ return createSessionService({
80
+ sessionStorage: provideSessionStorage(),
81
+ deviceIdService: provideDeviceIdService(),
82
+ luxIdentifierService: ctx.luxIdentifierService ?? provideLuxIdentifierService(),
83
+ sessionRepository,
84
+ })
85
+ }
86
+
87
+ export { provideSessionService }
@@ -0,0 +1,21 @@
1
+ import { getStorageDriver } from '@luxfi/api/src/storage/getStorageDriver'
2
+ import { createSessionStorage, type SessionStorage } from '@luxfi/sessions'
3
+
4
+ const SESSION_ID_KEY = 'LUX_SESSION_ID'
5
+
6
+ function provideSessionStorage(): SessionStorage {
7
+ const driver = getStorageDriver()
8
+ return createSessionStorage({
9
+ getSessionId: async () => {
10
+ return driver.get(SESSION_ID_KEY)
11
+ },
12
+ setSessionId: async (sessionId) => {
13
+ await driver.set(SESSION_ID_KEY, sessionId)
14
+ },
15
+ clearSessionId: async () => {
16
+ await driver.remove(SESSION_ID_KEY)
17
+ },
18
+ })
19
+ }
20
+
21
+ export { provideSessionStorage }
@@ -0,0 +1,79 @@
1
+ import { createSessionTransport } from '@luxexchange/api/src/session/createSessionTransport'
2
+ import { describe, expect, it } from 'vitest'
3
+
4
+ describe('createSessionTransport', () => {
5
+ it('creates transport with baseUrl', () => {
6
+ const transport = createSessionTransport({
7
+ baseUrl: 'https://api.example.com',
8
+ })
9
+
10
+ expect(transport).toBeDefined()
11
+ })
12
+
13
+ it('includes credentials option when specified', () => {
14
+ const transport = createSessionTransport({
15
+ baseUrl: 'https://api.example.com',
16
+ credentials: 'include',
17
+ })
18
+
19
+ expect(transport).toBeDefined()
20
+ })
21
+
22
+ it('includes transportOptions when specified', () => {
23
+ const transport = createSessionTransport({
24
+ baseUrl: 'https://api.example.com',
25
+ transportOptions: {
26
+ useBinaryFormat: true,
27
+ },
28
+ })
29
+
30
+ expect(transport).toBeDefined()
31
+ })
32
+
33
+ it('creates transport with all options combined', () => {
34
+ const transport = createSessionTransport({
35
+ baseUrl: 'https://api.example.com',
36
+ headers: {
37
+ 'x-request-source': 'test',
38
+ 'x-lux-timezone': 'UTC',
39
+ },
40
+ cookie: 'session=abc123',
41
+ credentials: 'include',
42
+ getSessionId: async () => 'session-id',
43
+ getDeviceId: async () => 'device-id',
44
+ transportOptions: {
45
+ useBinaryFormat: true,
46
+ },
47
+ })
48
+
49
+ expect(transport).toBeDefined()
50
+ })
51
+
52
+ it('handles undefined getSessionId/getDeviceId', () => {
53
+ const transport = createSessionTransport({
54
+ baseUrl: 'https://api.example.com',
55
+ getSessionId: undefined,
56
+ getDeviceId: undefined,
57
+ })
58
+
59
+ expect(transport).toBeDefined()
60
+ })
61
+
62
+ it('handles empty headers object', () => {
63
+ const transport = createSessionTransport({
64
+ baseUrl: 'https://api.example.com',
65
+ headers: {},
66
+ })
67
+
68
+ expect(transport).toBeDefined()
69
+ })
70
+
71
+ it('handles undefined cookie', () => {
72
+ const transport = createSessionTransport({
73
+ baseUrl: 'https://api.example.com',
74
+ cookie: undefined,
75
+ })
76
+
77
+ expect(transport).toBeDefined()
78
+ })
79
+ })