@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.
- package/.depcheckrc +17 -0
- package/.eslintrc.js +30 -0
- package/README.md +5 -0
- package/package.json +74 -0
- package/project.json +94 -0
- package/scripts/fixGraphQLApiTypes.mts +91 -0
- package/scripts/modifyTradingApiTypes.mts +232 -0
- package/src/client.ts +66 -0
- package/src/clients/auctions/createAuctionServiceClient.ts +44 -0
- package/src/clients/base/SharedQueryClient.ts +25 -0
- package/src/clients/base/auth.ts +43 -0
- package/src/clients/base/createFetchClient.ts +133 -0
- package/src/clients/base/errors.ts +32 -0
- package/src/clients/base/types.ts +26 -0
- package/src/clients/base/urls.test.ts +297 -0
- package/src/clients/base/urls.ts +85 -0
- package/src/clients/base/utils.test.ts +131 -0
- package/src/clients/base/utils.ts +54 -0
- package/src/clients/blockaid/createBlockaidApiClient.ts +185 -0
- package/src/clients/blockaid/types.ts +495 -0
- package/src/clients/content/types.ts +22 -0
- package/src/clients/conversionTracking/api-ConversionProxyService_connectquery.ts +20 -0
- package/src/clients/conversionTracking/api_connect.ts +24 -0
- package/src/clients/conversionTracking/api_pb.ts +184 -0
- package/src/clients/conversionTracking/index.ts +4 -0
- package/src/clients/data/createDataServiceApiClient.ts +101 -0
- package/src/clients/dataApi/createDataApiServiceClient.ts +29 -0
- package/src/clients/dataApi/getGetPortfolioQueryOptions.test.ts +122 -0
- package/src/clients/dataApi/getGetPortfolioQueryOptions.ts +76 -0
- package/src/clients/embeddedWallet/createEmbeddedWalletApiClient.ts +325 -0
- package/src/clients/for/createForApiClient.ts +187 -0
- package/src/clients/for/types.ts +39 -0
- package/src/clients/for/utils.ts +13 -0
- package/src/clients/graphql/__generated__/operations.ts +605 -0
- package/src/clients/graphql/__generated__/react-hooks.ts +4245 -0
- package/src/clients/graphql/__generated__/resolvers.ts +1469 -0
- package/src/clients/graphql/__generated__/schema-types.ts +2099 -0
- package/src/clients/graphql/codegen.config.ts +50 -0
- package/src/clients/graphql/fragments.ts +96 -0
- package/src/clients/graphql/generated.ts +5 -0
- package/src/clients/graphql/queries.graphql +1028 -0
- package/src/clients/graphql/queries.ts +19 -0
- package/src/clients/graphql/schema.graphql +1585 -0
- package/src/clients/graphql/types.ts +9 -0
- package/src/clients/graphql/utils.ts +21 -0
- package/src/clients/graphql/web/LuxPrices.graphql +18 -0
- package/src/clients/graphql/web/RecentTokenTransfers.graphql +93 -0
- package/src/clients/graphql/web/SimpleToken.graphql +12 -0
- package/src/clients/graphql/web/TokenSpotPrice.graphql +19 -0
- package/src/clients/graphql/web/activity.graphql +272 -0
- package/src/clients/graphql/web/allV3Ticks.graphql +11 -0
- package/src/clients/graphql/web/allV4Ticks.graphql +11 -0
- package/src/clients/graphql/web/feeTierDistribution.graphql +7 -0
- package/src/clients/graphql/web/landing.graphql +38 -0
- package/src/clients/graphql/web/latestSubgraphBlock.graphql +3 -0
- package/src/clients/graphql/web/nft/CollectionSearch.graphql +34 -0
- package/src/clients/graphql/web/nft/NftBalance.graphql +109 -0
- package/src/clients/graphql/web/pool.graphql +199 -0
- package/src/clients/graphql/web/poolTransactions.graphql +84 -0
- package/src/clients/graphql/web/portfolios.graphql +68 -0
- package/src/clients/graphql/web/token.graphql +97 -0
- package/src/clients/graphql/web/tokenCharts.graphql +85 -0
- package/src/clients/graphql/web/tokenTransactions.graphql +25 -0
- package/src/clients/graphql/web/topPools.graphql +78 -0
- package/src/clients/graphql/web/transactions.graphql +56 -0
- package/src/clients/jupiter/createJupiterApiClient.ts +42 -0
- package/src/clients/jupiter/types.ts +92 -0
- package/src/clients/jupiter/utils.ts +27 -0
- package/src/clients/liquidity/createAuctionMutationClient.ts +41 -0
- package/src/clients/liquidity/createLiquidityServiceClient.ts +56 -0
- package/src/clients/lux/createLuxApiClient.ts +100 -0
- package/src/clients/notifications/createNotificationsApiClient.ts +72 -0
- package/src/clients/notifications/types.ts +102 -0
- package/src/clients/trading/__generated__/core/ApiError.ts +25 -0
- package/src/clients/trading/__generated__/core/ApiRequestOptions.ts +17 -0
- package/src/clients/trading/__generated__/core/ApiResult.ts +11 -0
- package/src/clients/trading/__generated__/core/CancelablePromise.ts +131 -0
- package/src/clients/trading/__generated__/core/OpenAPI.ts +32 -0
- package/src/clients/trading/__generated__/core/request.ts +322 -0
- package/src/clients/trading/__generated__/index.ts +221 -0
- package/src/clients/trading/__generated__/models/Address.ts +5 -0
- package/src/clients/trading/__generated__/models/AggregatedOutput.ts +20 -0
- package/src/clients/trading/__generated__/models/ApprovalRequest.ts +25 -0
- package/src/clients/trading/__generated__/models/ApprovalResponse.ts +18 -0
- package/src/clients/trading/__generated__/models/AutoSlippage.ts +14 -0
- package/src/clients/trading/__generated__/models/BridgeQuote.ts +55 -0
- package/src/clients/trading/__generated__/models/ChainDelegationMap.ts +9 -0
- package/src/clients/trading/__generated__/models/ChainId.ts +29 -0
- package/src/clients/trading/__generated__/models/ChainedQuote.ts +63 -0
- package/src/clients/trading/__generated__/models/CheckApprovalLPRequest.ts +35 -0
- package/src/clients/trading/__generated__/models/CheckApprovalLPResponse.ts +29 -0
- package/src/clients/trading/__generated__/models/ClaimLPFeesRequest.ts +20 -0
- package/src/clients/trading/__generated__/models/ClaimLPFeesResponse.ts +13 -0
- package/src/clients/trading/__generated__/models/ClaimLPRewardsRequest.ts +19 -0
- package/src/clients/trading/__generated__/models/ClaimLPRewardsResponse.ts +13 -0
- package/src/clients/trading/__generated__/models/ClassicGasUseEstimateUSD.ts +8 -0
- package/src/clients/trading/__generated__/models/ClassicInput.ts +11 -0
- package/src/clients/trading/__generated__/models/ClassicOutput.ts +13 -0
- package/src/clients/trading/__generated__/models/ClassicQuote.ts +69 -0
- package/src/clients/trading/__generated__/models/ClientContext.ts +18 -0
- package/src/clients/trading/__generated__/models/CosignerData.ts +21 -0
- package/src/clients/trading/__generated__/models/CreateLPPositionRequest.ts +40 -0
- package/src/clients/trading/__generated__/models/CreateLPPositionResponse.ts +21 -0
- package/src/clients/trading/__generated__/models/CreatePlanRequest.ts +23 -0
- package/src/clients/trading/__generated__/models/CreateSendRequest.ts +22 -0
- package/src/clients/trading/__generated__/models/CreateSendResponse.ts +18 -0
- package/src/clients/trading/__generated__/models/CreateSwap5792Request.ts +17 -0
- package/src/clients/trading/__generated__/models/CreateSwap5792Response.ts +17 -0
- package/src/clients/trading/__generated__/models/CreateSwap7702Request.ts +21 -0
- package/src/clients/trading/__generated__/models/CreateSwap7702Response.ts +13 -0
- package/src/clients/trading/__generated__/models/CreateSwapRequest.ts +42 -0
- package/src/clients/trading/__generated__/models/CreateSwapResponse.ts +16 -0
- package/src/clients/trading/__generated__/models/Curve.ts +9 -0
- package/src/clients/trading/__generated__/models/DEXOrder.ts +35 -0
- package/src/clients/trading/__generated__/models/DecreaseLPPositionRequest.ts +33 -0
- package/src/clients/trading/__generated__/models/DecreaseLPPositionResponse.ts +19 -0
- package/src/clients/trading/__generated__/models/DelegationDetails.ts +19 -0
- package/src/clients/trading/__generated__/models/Distributor.ts +10 -0
- package/src/clients/trading/__generated__/models/DutchInput.ts +13 -0
- package/src/clients/trading/__generated__/models/DutchInputV3.ts +15 -0
- package/src/clients/trading/__generated__/models/DutchOrderInfo.ts +41 -0
- package/src/clients/trading/__generated__/models/DutchOrderInfoV2.ts +27 -0
- package/src/clients/trading/__generated__/models/DutchOrderInfoV3.ts +28 -0
- package/src/clients/trading/__generated__/models/DutchOutput.ts +15 -0
- package/src/clients/trading/__generated__/models/DutchOutputV3.ts +18 -0
- package/src/clients/trading/__generated__/models/DutchQuote.ts +27 -0
- package/src/clients/trading/__generated__/models/DutchQuoteV2.ts +28 -0
- package/src/clients/trading/__generated__/models/DutchQuoteV3.ts +30 -0
- package/src/clients/trading/__generated__/models/Encode7702ResponseBody.ts +11 -0
- package/src/clients/trading/__generated__/models/Err400.ts +9 -0
- package/src/clients/trading/__generated__/models/Err401.ts +9 -0
- package/src/clients/trading/__generated__/models/Err404.ts +17 -0
- package/src/clients/trading/__generated__/models/Err422.ts +9 -0
- package/src/clients/trading/__generated__/models/Err429.ts +9 -0
- package/src/clients/trading/__generated__/models/Err500.ts +9 -0
- package/src/clients/trading/__generated__/models/Err504.ts +9 -0
- package/src/clients/trading/__generated__/models/GasStrategy.ts +46 -0
- package/src/clients/trading/__generated__/models/GetOrdersResponse.ts +12 -0
- package/src/clients/trading/__generated__/models/GetSwappableTokensResponse.ts +29 -0
- package/src/clients/trading/__generated__/models/GetSwapsResponse.ts +18 -0
- package/src/clients/trading/__generated__/models/HooksOptions.ts +12 -0
- package/src/clients/trading/__generated__/models/IncreaseLPPositionRequest.ts +39 -0
- package/src/clients/trading/__generated__/models/IncreaseLPPositionResponse.ts +21 -0
- package/src/clients/trading/__generated__/models/IndependentToken.ts +8 -0
- package/src/clients/trading/__generated__/models/IndicativeQuoteRequest.ts +18 -0
- package/src/clients/trading/__generated__/models/IndicativeQuoteResponse.ts +14 -0
- package/src/clients/trading/__generated__/models/IndicativeQuoteToken.ts +13 -0
- package/src/clients/trading/__generated__/models/LimitOrderQuoteRequest.ts +22 -0
- package/src/clients/trading/__generated__/models/LimitOrderQuoteResponse.ts +19 -0
- package/src/clients/trading/__generated__/models/MigrateLPPositionRequest.ts +41 -0
- package/src/clients/trading/__generated__/models/MigrateLPPositionResponse.ts +13 -0
- package/src/clients/trading/__generated__/models/NullablePermit.ts +13 -0
- package/src/clients/trading/__generated__/models/OrderIds.ts +5 -0
- package/src/clients/trading/__generated__/models/OrderInput.ts +13 -0
- package/src/clients/trading/__generated__/models/OrderOutput.ts +16 -0
- package/src/clients/trading/__generated__/models/OrderRequest.ts +17 -0
- package/src/clients/trading/__generated__/models/OrderResponse.ts +13 -0
- package/src/clients/trading/__generated__/models/OrderStatus.ts +23 -0
- package/src/clients/trading/__generated__/models/OrderType.ts +11 -0
- package/src/clients/trading/__generated__/models/OrderTypeQuery.ts +12 -0
- package/src/clients/trading/__generated__/models/Permit.ts +13 -0
- package/src/clients/trading/__generated__/models/PermitAmount.ts +11 -0
- package/src/clients/trading/__generated__/models/PlanResponse.ts +75 -0
- package/src/clients/trading/__generated__/models/PlanStatus.ts +14 -0
- package/src/clients/trading/__generated__/models/PlanStep.ts +59 -0
- package/src/clients/trading/__generated__/models/PlanStepMethod.ts +12 -0
- package/src/clients/trading/__generated__/models/PlanStepPayloadType.ts +12 -0
- package/src/clients/trading/__generated__/models/PlanStepProof.ts +20 -0
- package/src/clients/trading/__generated__/models/PlanStepStatus.ts +14 -0
- package/src/clients/trading/__generated__/models/PlanStepType.ts +23 -0
- package/src/clients/trading/__generated__/models/Pool.ts +15 -0
- package/src/clients/trading/__generated__/models/PoolInfoRequest.ts +20 -0
- package/src/clients/trading/__generated__/models/PoolInfoResponse.ts +16 -0
- package/src/clients/trading/__generated__/models/PoolInformation.ts +44 -0
- package/src/clients/trading/__generated__/models/PoolParameters.ts +19 -0
- package/src/clients/trading/__generated__/models/PoolReferenceByProtocol.ts +12 -0
- package/src/clients/trading/__generated__/models/Position.ts +11 -0
- package/src/clients/trading/__generated__/models/PriorityInput.ts +12 -0
- package/src/clients/trading/__generated__/models/PriorityOrderInfo.ts +29 -0
- package/src/clients/trading/__generated__/models/PriorityOutput.ts +17 -0
- package/src/clients/trading/__generated__/models/PriorityQuote.ts +31 -0
- package/src/clients/trading/__generated__/models/ProtocolItems.ts +15 -0
- package/src/clients/trading/__generated__/models/Protocols.ts +9 -0
- package/src/clients/trading/__generated__/models/Quote.ts +14 -0
- package/src/clients/trading/__generated__/models/QuoteRequest.ts +41 -0
- package/src/clients/trading/__generated__/models/QuoteResponse.ts +19 -0
- package/src/clients/trading/__generated__/models/RequestId.ts +8 -0
- package/src/clients/trading/__generated__/models/Routing.ts +20 -0
- package/src/clients/trading/__generated__/models/RoutingPreference.ts +16 -0
- package/src/clients/trading/__generated__/models/SafetyLevel.ts +10 -0
- package/src/clients/trading/__generated__/models/ScopeData.ts +28 -0
- package/src/clients/trading/__generated__/models/SettledAmount.ts +14 -0
- package/src/clients/trading/__generated__/models/SortKey.ts +7 -0
- package/src/clients/trading/__generated__/models/SpreadOptimization.ts +11 -0
- package/src/clients/trading/__generated__/models/StepUpdate.ts +25 -0
- package/src/clients/trading/__generated__/models/SwapSafetyMode.ts +10 -0
- package/src/clients/trading/__generated__/models/SwapStatus.ts +11 -0
- package/src/clients/trading/__generated__/models/TokenInRoute.ts +20 -0
- package/src/clients/trading/__generated__/models/TokenProject.ts +13 -0
- package/src/clients/trading/__generated__/models/TokenProjectLogo.ts +8 -0
- package/src/clients/trading/__generated__/models/TradeType.ts +11 -0
- package/src/clients/trading/__generated__/models/TransactionFailureReason.ts +11 -0
- package/src/clients/trading/__generated__/models/TransactionHash.ts +8 -0
- package/src/clients/trading/__generated__/models/TransactionRequest.ts +29 -0
- package/src/clients/trading/__generated__/models/TransactionRequest5792.ts +25 -0
- package/src/clients/trading/__generated__/models/TruncatedPlanStep.ts +21 -0
- package/src/clients/trading/__generated__/models/UniversalRouterVersion.ts +8 -0
- package/src/clients/trading/__generated__/models/UpdatePlanRequest.ts +12 -0
- package/src/clients/trading/__generated__/models/Urgency.ts +12 -0
- package/src/clients/trading/__generated__/models/V2PoolInRoute.ts +19 -0
- package/src/clients/trading/__generated__/models/V2Reserve.ts +16 -0
- package/src/clients/trading/__generated__/models/V3PoolInRoute.ts +24 -0
- package/src/clients/trading/__generated__/models/V4PoolInRoute.ts +30 -0
- package/src/clients/trading/__generated__/models/WalletCheckDelegationRequestBody.ts +17 -0
- package/src/clients/trading/__generated__/models/WalletCheckDelegationResponseBody.ts +14 -0
- package/src/clients/trading/__generated__/models/WalletEncode7702RequestBody.ts +21 -0
- package/src/clients/trading/__generated__/models/WalletExecutionContext.ts +17 -0
- package/src/clients/trading/__generated__/models/WalletInfo.ts +22 -0
- package/src/clients/trading/__generated__/models/WalletProperties.ts +12 -0
- package/src/clients/trading/__generated__/models/WrapUnwrapQuote.ts +31 -0
- package/src/clients/trading/__generated__/models/additionalValidationContract.ts +9 -0
- package/src/clients/trading/__generated__/models/additionalValidationData.ts +9 -0
- package/src/clients/trading/__generated__/models/bps.ts +8 -0
- package/src/clients/trading/__generated__/models/bpsFee.ts +8 -0
- package/src/clients/trading/__generated__/models/bridgeTokenInChainIdParam.ts +6 -0
- package/src/clients/trading/__generated__/models/chainIdParam.ts +6 -0
- package/src/clients/trading/__generated__/models/claimerWalletAddress.ts +8 -0
- package/src/clients/trading/__generated__/models/contractAddress.ts +8 -0
- package/src/clients/trading/__generated__/models/cosignerAddress.ts +8 -0
- package/src/clients/trading/__generated__/models/cursorParam.ts +5 -0
- package/src/clients/trading/__generated__/models/deadline.ts +8 -0
- package/src/clients/trading/__generated__/models/encodedOrder.ts +8 -0
- package/src/clients/trading/__generated__/models/endAmount.ts +8 -0
- package/src/clients/trading/__generated__/models/erc20EthEnabledHeader.ts +8 -0
- package/src/clients/trading/__generated__/models/fillerParam.ts +9 -0
- package/src/clients/trading/__generated__/models/gasFee.ts +8 -0
- package/src/clients/trading/__generated__/models/gasFeeInCurrency.ts +8 -0
- package/src/clients/trading/__generated__/models/gasFeeUSD.ts +8 -0
- package/src/clients/trading/__generated__/models/gasLimit.ts +8 -0
- package/src/clients/trading/__generated__/models/gasPrice.ts +8 -0
- package/src/clients/trading/__generated__/models/generatePermitAsTransaction.ts +8 -0
- package/src/clients/trading/__generated__/models/includeGasInfo.ts +8 -0
- package/src/clients/trading/__generated__/models/inputToken.ts +8 -0
- package/src/clients/trading/__generated__/models/isSpam.ts +8 -0
- package/src/clients/trading/__generated__/models/limitParam.ts +5 -0
- package/src/clients/trading/__generated__/models/liquidity.ts +8 -0
- package/src/clients/trading/__generated__/models/lpPoolFee.ts +8 -0
- package/src/clients/trading/__generated__/models/lpTickCurrent.ts +8 -0
- package/src/clients/trading/__generated__/models/maxFeePerGas.ts +8 -0
- package/src/clients/trading/__generated__/models/maxPriorityFeePerGas.ts +8 -0
- package/src/clients/trading/__generated__/models/minAmount.ts +8 -0
- package/src/clients/trading/__generated__/models/nonce.ts +8 -0
- package/src/clients/trading/__generated__/models/orderId.ts +8 -0
- package/src/clients/trading/__generated__/models/orderIdParam.ts +6 -0
- package/src/clients/trading/__generated__/models/orderIdsParam.ts +9 -0
- package/src/clients/trading/__generated__/models/orderStatusParam.ts +9 -0
- package/src/clients/trading/__generated__/models/orderTypeParam.ts +9 -0
- package/src/clients/trading/__generated__/models/outputToken.ts +8 -0
- package/src/clients/trading/__generated__/models/poolFee.ts +8 -0
- package/src/clients/trading/__generated__/models/portionAmount.ts +8 -0
- package/src/clients/trading/__generated__/models/portionAmountReceiverAddress.ts +8 -0
- package/src/clients/trading/__generated__/models/portionBips.ts +8 -0
- package/src/clients/trading/__generated__/models/quoteId.ts +8 -0
- package/src/clients/trading/__generated__/models/receiverWalletAddress.ts +8 -0
- package/src/clients/trading/__generated__/models/senderWalletAddress.ts +8 -0
- package/src/clients/trading/__generated__/models/slippageTolerance.ts +14 -0
- package/src/clients/trading/__generated__/models/sortKeyParam.ts +9 -0
- package/src/clients/trading/__generated__/models/sortParam.ts +8 -0
- package/src/clients/trading/__generated__/models/sqrtRatioX96.ts +8 -0
- package/src/clients/trading/__generated__/models/startAmount.ts +8 -0
- package/src/clients/trading/__generated__/models/swapperParam.ts +9 -0
- package/src/clients/trading/__generated__/models/tickCurrent.ts +8 -0
- package/src/clients/trading/__generated__/models/tickSpacing.ts +8 -0
- package/src/clients/trading/__generated__/models/tokenAmount.ts +8 -0
- package/src/clients/trading/__generated__/models/tokenInParam.ts +6 -0
- package/src/clients/trading/__generated__/models/tokenSymbol.ts +8 -0
- package/src/clients/trading/__generated__/models/transactionHashesParam.ts +9 -0
- package/src/clients/trading/__generated__/models/universalRouterVersionHeader.ts +9 -0
- package/src/clients/trading/__generated__/services/ApprovalService.ts +39 -0
- package/src/clients/trading/__generated__/services/DefaultService.ts +46 -0
- package/src/clients/trading/__generated__/services/IndicativeQuoteService.ts +39 -0
- package/src/clients/trading/__generated__/services/LimitOrderQuoteService.ts +37 -0
- package/src/clients/trading/__generated__/services/LiquidityService.ts +239 -0
- package/src/clients/trading/__generated__/services/OrderService.ts +131 -0
- package/src/clients/trading/__generated__/services/PlanService.ts +76 -0
- package/src/clients/trading/__generated__/services/QuoteService.ts +58 -0
- package/src/clients/trading/__generated__/services/SendService.ts +37 -0
- package/src/clients/trading/__generated__/services/SwapService.ts +161 -0
- package/src/clients/trading/__generated__/services/SwappableTokensService.ts +42 -0
- package/src/clients/trading/__generated__/services/WalletCheckDelegationService.ts +37 -0
- package/src/clients/trading/__generated__/services/WalletEncode7702Service.ts +37 -0
- package/src/clients/trading/api.json +1 -0
- package/src/clients/trading/createTradingApiClient.ts +328 -0
- package/src/clients/trading/tradeTypes.ts +51 -0
- package/src/clients/trading/types.ts +72 -0
- package/src/clients/unitags/createUnitagsApiClient.test.ts +438 -0
- package/src/clients/unitags/createUnitagsApiClient.ts +214 -0
- package/src/clients/unitags/types.ts +122 -0
- package/src/components/ApiInit.test.tsx +364 -0
- package/src/components/ApiInit.tsx +71 -0
- package/src/connectRpc/base.ts +33 -0
- package/src/connectRpc/utils.ts +136 -0
- package/src/getEntryGatewayUrl.ts +46 -0
- package/src/getWebSocketUrl.ts +28 -0
- package/src/global.d.ts +2 -0
- package/src/hooks/index.ts +6 -0
- package/src/hooks/shared/types.ts +10 -0
- package/src/hooks/shared/useQueryWithImmediateGarbageCollection.ts +90 -0
- package/src/hooks/use-token-list.ts +52 -0
- package/src/hooks/use-token-price.ts +82 -0
- package/src/hooks/useIsSessionInitialized.ts +17 -0
- package/src/index.ts +318 -0
- package/src/provideDeviceIdService.ts +25 -0
- package/src/provideLuxIdentifierService.ts +25 -0
- package/src/provideSessionService.native.ts +46 -0
- package/src/provideSessionService.ts +13 -0
- package/src/provideSessionService.web.ts +87 -0
- package/src/provideSessionStorage.ts +21 -0
- package/src/session/createSessionTransport.test.ts +79 -0
- package/src/session/createSessionTransport.ts +107 -0
- package/src/session/createWithSessionRetry.ts +33 -0
- package/src/session/index.ts +12 -0
- package/src/storage/createExtensionStorageDriver.ts +29 -0
- package/src/storage/createNativeStorageDriver.ts +19 -0
- package/src/storage/createWebStorageDriver.ts +17 -0
- package/src/storage/getStorageDriver.native.ts +6 -0
- package/src/storage/getStorageDriver.ts +8 -0
- package/src/storage/getStorageDriver.web.ts +11 -0
- package/src/storage/types.ts +9 -0
- package/src/transport.ts +85 -0
- package/stubs/privy-service-connect.d.ts +3 -0
- package/stubs/privy-service-pb.d.ts +60 -0
- package/tsconfig.json +37 -0
- package/tsconfig.lint.json +8 -0
- package/tsconfig.spec.json +8 -0
- 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
|
+
})
|