@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
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { type ConnectTransportOptions, createConnectTransport } from '@connectrpc/connect-web'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Options for creating a session transport.
|
|
5
|
+
* All configuration is explicit - no platform detection.
|
|
6
|
+
*/
|
|
7
|
+
export interface CreateSessionTransportOptions {
|
|
8
|
+
/** Entry gateway URL */
|
|
9
|
+
baseUrl: string
|
|
10
|
+
|
|
11
|
+
/** Static headers to include in all requests (e.g., x-request-source, x-lux-timezone) */
|
|
12
|
+
headers?: Record<string, string>
|
|
13
|
+
|
|
14
|
+
/** Cookie header for SSR forwarding */
|
|
15
|
+
cookie?: string
|
|
16
|
+
|
|
17
|
+
/** Use browser credentials for automatic cookie handling (for web with cookies) */
|
|
18
|
+
credentials?: 'include' | 'omit' | 'same-origin'
|
|
19
|
+
|
|
20
|
+
/** Dynamic session ID getter (for mobile/extension that use headers instead of cookies) */
|
|
21
|
+
getSessionId?: () => Promise<string | null>
|
|
22
|
+
|
|
23
|
+
/** Dynamic device ID getter (for mobile/extension that use headers instead of cookies) */
|
|
24
|
+
getDeviceId?: () => Promise<string | null>
|
|
25
|
+
|
|
26
|
+
/** Additional ConnectRPC transport options */
|
|
27
|
+
transportOptions?: Partial<ConnectTransportOptions>
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Creates a ConnectRPC transport with explicit configuration.
|
|
32
|
+
*
|
|
33
|
+
* This is a pure factory function with no platform detection.
|
|
34
|
+
* The caller (app-level provider) is responsible for providing
|
|
35
|
+
* the correct configuration for their platform/context.
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* // Web browser - uses cookies automatically
|
|
39
|
+
* const transport = createSessionTransport({
|
|
40
|
+
* baseUrl: entryGatewayUrl,
|
|
41
|
+
* credentials: 'include',
|
|
42
|
+
* headers: {
|
|
43
|
+
* 'x-request-source': 'lux-web',
|
|
44
|
+
* 'x-lux-timezone': Intl.DateTimeFormat().resolvedOptions().timeZone,
|
|
45
|
+
* },
|
|
46
|
+
* })
|
|
47
|
+
*
|
|
48
|
+
* @example
|
|
49
|
+
* // SSR - forwards cookies from incoming request
|
|
50
|
+
* const transport = createSessionTransport({
|
|
51
|
+
* baseUrl: config.entryGatewayUrl,
|
|
52
|
+
* cookie: request.headers.get('Cookie'),
|
|
53
|
+
* headers: {
|
|
54
|
+
* 'x-request-source': 'lux-web',
|
|
55
|
+
* 'x-lux-timezone': timezone,
|
|
56
|
+
* },
|
|
57
|
+
* })
|
|
58
|
+
*
|
|
59
|
+
* @example
|
|
60
|
+
* // Mobile - uses headers for session/device IDs
|
|
61
|
+
* const transport = createSessionTransport({
|
|
62
|
+
* baseUrl: entryGatewayUrl,
|
|
63
|
+
* headers: { 'x-request-source': 'lux-mobile' },
|
|
64
|
+
* getSessionId: () => sessionStorage.get().then(s => s?.sessionId ?? null),
|
|
65
|
+
* getDeviceId: () => deviceIdService.getDeviceId(),
|
|
66
|
+
* })
|
|
67
|
+
*/
|
|
68
|
+
export function createSessionTransport(
|
|
69
|
+
options: CreateSessionTransportOptions,
|
|
70
|
+
): ReturnType<typeof createConnectTransport> {
|
|
71
|
+
const { baseUrl, headers, cookie, credentials, getSessionId, getDeviceId, transportOptions } = options
|
|
72
|
+
|
|
73
|
+
return createConnectTransport({
|
|
74
|
+
baseUrl,
|
|
75
|
+
credentials,
|
|
76
|
+
interceptors: [
|
|
77
|
+
(next) => async (request) => {
|
|
78
|
+
if (headers) {
|
|
79
|
+
for (const [key, value] of Object.entries(headers)) {
|
|
80
|
+
request.header.set(key, value)
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
if (cookie) {
|
|
85
|
+
request.header.set('Cookie', cookie)
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
if (getSessionId) {
|
|
89
|
+
const sessionId = await getSessionId()
|
|
90
|
+
if (sessionId) {
|
|
91
|
+
request.header.set('X-Session-ID', sessionId)
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
if (getDeviceId) {
|
|
96
|
+
const deviceId = await getDeviceId()
|
|
97
|
+
if (deviceId) {
|
|
98
|
+
request.header.set('X-Device-ID', deviceId)
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
return next(request)
|
|
103
|
+
},
|
|
104
|
+
],
|
|
105
|
+
...transportOptions,
|
|
106
|
+
})
|
|
107
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { is401Error } from '@luxexchange/api'
|
|
2
|
+
|
|
3
|
+
/** Creates a function that will attempt to reinitialize the app session and retry the input function once, if the first invocation of the function fails. */
|
|
4
|
+
export function createWithSessionRetry(ctx: {
|
|
5
|
+
reinitializeSession: () => Promise<void>
|
|
6
|
+
onReinitializationFailed?: () => void
|
|
7
|
+
}) {
|
|
8
|
+
return async function withSessionRetry<T>(fn: () => Promise<T>): Promise<T> {
|
|
9
|
+
// Attempt 1
|
|
10
|
+
try {
|
|
11
|
+
return await fn()
|
|
12
|
+
} catch (error) {
|
|
13
|
+
// After first 401, reinitialize session and do not throw
|
|
14
|
+
if (is401Error(error)) {
|
|
15
|
+
await ctx.reinitializeSession()
|
|
16
|
+
} else {
|
|
17
|
+
throw error
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
// Attempt 2
|
|
22
|
+
try {
|
|
23
|
+
return await fn()
|
|
24
|
+
} catch (errorAfterReinitialization) {
|
|
25
|
+
if (is401Error(errorAfterReinitialization)) {
|
|
26
|
+
// Handle any side effects of reinitialization failure
|
|
27
|
+
ctx.onReinitializationFailed?.()
|
|
28
|
+
}
|
|
29
|
+
// Always throw error after reinitialization failure
|
|
30
|
+
throw errorAfterReinitialization
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/* eslint-disable check-file/no-index */
|
|
2
|
+
/**
|
|
3
|
+
* Session Transport
|
|
4
|
+
*
|
|
5
|
+
* Pure factory functions for creating session-aware transports.
|
|
6
|
+
* These have no platform detection - the caller provides all configuration.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
export {
|
|
10
|
+
type CreateSessionTransportOptions,
|
|
11
|
+
createSessionTransport,
|
|
12
|
+
} from '@luxexchange/api/src/session/createSessionTransport'
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { StorageDriver } from '@luxfi/api/src/storage/types'
|
|
2
|
+
import { getChromeWithThrow } from '@luxfi/utilities/src/chrome/chrome'
|
|
3
|
+
|
|
4
|
+
export function createExtensionStorageDriver(): StorageDriver {
|
|
5
|
+
return {
|
|
6
|
+
async get(key: string): Promise<string | null> {
|
|
7
|
+
const chrome = getChromeWithThrow()
|
|
8
|
+
const result = await chrome.storage.local.get(key)
|
|
9
|
+
const value = result[key]
|
|
10
|
+
if (value === undefined || value === null) {
|
|
11
|
+
return null
|
|
12
|
+
}
|
|
13
|
+
if (typeof value !== 'string') {
|
|
14
|
+
throw new Error(`[StorageDriver.web.ts] Storage driver currently expects string values, got ${typeof value}`)
|
|
15
|
+
}
|
|
16
|
+
return value
|
|
17
|
+
},
|
|
18
|
+
|
|
19
|
+
async set(key: string, value: string): Promise<void> {
|
|
20
|
+
const chrome = getChromeWithThrow()
|
|
21
|
+
await chrome.storage.local.set({ [key]: value })
|
|
22
|
+
},
|
|
23
|
+
|
|
24
|
+
async remove(key: string): Promise<void> {
|
|
25
|
+
const chrome = getChromeWithThrow()
|
|
26
|
+
await chrome.storage.local.remove(key)
|
|
27
|
+
},
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { StorageDriver } from '@luxfi/api/src/storage/types'
|
|
2
|
+
import * as SecureStore from 'expo-secure-store'
|
|
3
|
+
|
|
4
|
+
export function createNativeStorageDriver(): StorageDriver {
|
|
5
|
+
return {
|
|
6
|
+
async get(key: string): Promise<string | null> {
|
|
7
|
+
const value = await SecureStore.getItemAsync(key)
|
|
8
|
+
return value ?? null
|
|
9
|
+
},
|
|
10
|
+
|
|
11
|
+
async set(key: string, value: string): Promise<void> {
|
|
12
|
+
await SecureStore.setItemAsync(key, value)
|
|
13
|
+
},
|
|
14
|
+
|
|
15
|
+
async remove(key: string): Promise<void> {
|
|
16
|
+
await SecureStore.deleteItemAsync(key)
|
|
17
|
+
},
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type StorageDriver } from '@luxfi/api/src/storage/types'
|
|
2
|
+
|
|
3
|
+
export function createWebStorageDriver(): StorageDriver {
|
|
4
|
+
return {
|
|
5
|
+
async get(key: string): Promise<string | null> {
|
|
6
|
+
return localStorage.getItem(key)
|
|
7
|
+
},
|
|
8
|
+
|
|
9
|
+
async set(key: string, value: string): Promise<void> {
|
|
10
|
+
localStorage.setItem(key, value)
|
|
11
|
+
},
|
|
12
|
+
|
|
13
|
+
async remove(key: string): Promise<void> {
|
|
14
|
+
localStorage.removeItem(key)
|
|
15
|
+
},
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { StorageDriver } from '@luxfi/api/src/storage/types'
|
|
2
|
+
import { PlatformSplitStubError } from '@luxfi/utilities/src/errors'
|
|
3
|
+
|
|
4
|
+
export function getStorageDriver(): StorageDriver {
|
|
5
|
+
throw new PlatformSplitStubError('getStorageDriver')
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export type { StorageDriver } from '@luxfi/api/src/storage/types'
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { createExtensionStorageDriver } from '@luxfi/api/src/storage/createExtensionStorageDriver'
|
|
2
|
+
import { createWebStorageDriver } from '@luxfi/api/src/storage/createWebStorageDriver'
|
|
3
|
+
import { type StorageDriver } from '@luxfi/api/src/storage/types'
|
|
4
|
+
import { isExtensionApp } from '@luxfi/utilities/src/platform'
|
|
5
|
+
|
|
6
|
+
export function getStorageDriver(): StorageDriver {
|
|
7
|
+
if (isExtensionApp) {
|
|
8
|
+
return createExtensionStorageDriver()
|
|
9
|
+
}
|
|
10
|
+
return createWebStorageDriver()
|
|
11
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Storage driver interface for key-value storage
|
|
3
|
+
* Platform-specific implementations handle the actual storage mechanism
|
|
4
|
+
*/
|
|
5
|
+
export interface StorageDriver {
|
|
6
|
+
get(key: string): Promise<string | null>
|
|
7
|
+
set(key: string, value: string): Promise<void>
|
|
8
|
+
remove(key: string): Promise<void>
|
|
9
|
+
}
|
package/src/transport.ts
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { type ConnectTransportOptions, createConnectTransport } from '@connectrpc/connect-web'
|
|
2
|
+
import { provideDeviceIdService } from '@luxfi/api/src/provideDeviceIdService'
|
|
3
|
+
import { provideSessionStorage } from '@luxfi/api/src/provideSessionStorage'
|
|
4
|
+
import { isWebApp } from '@luxfi/utilities/src/platform'
|
|
5
|
+
|
|
6
|
+
interface SessionTransportOptions {
|
|
7
|
+
getSessionId?: () => Promise<string | null>
|
|
8
|
+
getDeviceId?: () => Promise<string | null>
|
|
9
|
+
getBaseUrl: () => string
|
|
10
|
+
getHeaders?: () => object
|
|
11
|
+
options?: Partial<ConnectTransportOptions>
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Creates a Connect transport that includes session and device headers.
|
|
16
|
+
*
|
|
17
|
+
* This is the most basic transport util. Use this if you have a new use case for a transport.
|
|
18
|
+
* (For example, a TestTransport that doesn't use the Session storage)
|
|
19
|
+
* Otherwise, you can use the getTransport util.
|
|
20
|
+
*/
|
|
21
|
+
function createTransport(ctx: SessionTransportOptions): ReturnType<typeof createConnectTransport> {
|
|
22
|
+
const { getSessionId, getDeviceId, getBaseUrl, getHeaders, options } = ctx
|
|
23
|
+
|
|
24
|
+
const transportOptions: ConnectTransportOptions = {
|
|
25
|
+
baseUrl: getBaseUrl(),
|
|
26
|
+
interceptors: [
|
|
27
|
+
(next) => async (request) => {
|
|
28
|
+
// Add session ID header for mobile/extension
|
|
29
|
+
// Web uses cookies automatically
|
|
30
|
+
if (!isWebApp) {
|
|
31
|
+
const [sessionId, deviceId] = await Promise.all([getSessionId?.(), getDeviceId?.()])
|
|
32
|
+
if (sessionId) {
|
|
33
|
+
request.header.set('X-Session-ID', sessionId)
|
|
34
|
+
}
|
|
35
|
+
if (deviceId) {
|
|
36
|
+
request.header.set('X-Device-ID', deviceId)
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const extraHeaders = getHeaders?.()
|
|
41
|
+
if (extraHeaders) {
|
|
42
|
+
Object.entries(extraHeaders).forEach(([key, value]) => {
|
|
43
|
+
request.header.set(key, value)
|
|
44
|
+
})
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
return next(request)
|
|
48
|
+
},
|
|
49
|
+
],
|
|
50
|
+
...options,
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
return createConnectTransport(transportOptions)
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Configures a Connect transport that uses the primary Session storage.
|
|
58
|
+
*/
|
|
59
|
+
function getTransport(ctx: {
|
|
60
|
+
getBaseUrl: () => string
|
|
61
|
+
getHeaders?: () => object
|
|
62
|
+
options?: Partial<ConnectTransportOptions>
|
|
63
|
+
}): ReturnType<typeof createConnectTransport> {
|
|
64
|
+
return createTransport({
|
|
65
|
+
getBaseUrl: ctx.getBaseUrl,
|
|
66
|
+
async getSessionId() {
|
|
67
|
+
if (isWebApp) {
|
|
68
|
+
return null
|
|
69
|
+
}
|
|
70
|
+
return provideSessionStorage()
|
|
71
|
+
.get()
|
|
72
|
+
.then((session) => session?.sessionId ?? null)
|
|
73
|
+
},
|
|
74
|
+
async getDeviceId() {
|
|
75
|
+
if (isWebApp) {
|
|
76
|
+
return null
|
|
77
|
+
}
|
|
78
|
+
return provideDeviceIdService().getDeviceId()
|
|
79
|
+
},
|
|
80
|
+
getHeaders: ctx.getHeaders,
|
|
81
|
+
options: ctx.options,
|
|
82
|
+
})
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
export { getTransport }
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
// Type stubs for @uniswap/client-privy-embedded-wallet when the private package is not installed.
|
|
2
|
+
|
|
3
|
+
export declare enum AuthenticationTypes {
|
|
4
|
+
AUTHENTICATION_TYPE_UNSPECIFIED = 0,
|
|
5
|
+
PASSKEY_REGISTRATION = 1,
|
|
6
|
+
PASSKEY_AUTHENTICATION = 2,
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export declare enum Action {
|
|
10
|
+
ACTION_UNSPECIFIED = 0,
|
|
11
|
+
CREATE_WALLET = 1,
|
|
12
|
+
SIGN_MESSAGE = 2,
|
|
13
|
+
SIGN_TRANSACTION = 3,
|
|
14
|
+
SIGN_TYPED_DATA = 4,
|
|
15
|
+
WALLET_SIGNIN = 5,
|
|
16
|
+
EXPORT_SEED_PHRASE = 6,
|
|
17
|
+
DELETE_RECORD = 7,
|
|
18
|
+
REGISTER_NEW_AUTHENTICATION_TYPES = 8,
|
|
19
|
+
LIST_AUTHENTICATORS = 9,
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export declare enum RegistrationOptions_AuthenticatorAttachment {
|
|
23
|
+
AUTHENTICATOR_ATTACHMENT_UNSPECIFIED = 0,
|
|
24
|
+
PLATFORM = 1,
|
|
25
|
+
CROSS_PLATFORM = 2,
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export declare class ChallengeResponse {
|
|
29
|
+
challengeOptions: string
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export declare class CreateWalletResponse {
|
|
33
|
+
walletAddress: string
|
|
34
|
+
walletId: string
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export declare class DisconnectResponse {}
|
|
38
|
+
|
|
39
|
+
export declare class RegistrationOptions {
|
|
40
|
+
authenticatorAttachment?: RegistrationOptions_AuthenticatorAttachment
|
|
41
|
+
username?: string
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export declare class WalletSignInResponse {
|
|
45
|
+
walletAddress: string
|
|
46
|
+
walletId: string
|
|
47
|
+
exported?: boolean
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export declare class SignMessageResponse {
|
|
51
|
+
signature: string
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export declare class SignTransactionResponse {
|
|
55
|
+
signature: string
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export declare class SignTypedDataResponse {
|
|
59
|
+
signature: string
|
|
60
|
+
}
|
package/tsconfig.json
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"extends": "../../config/tsconfig/app.json",
|
|
3
|
+
"include": [
|
|
4
|
+
"src/**/*.ts",
|
|
5
|
+
"src/*.ts",
|
|
6
|
+
"src/**/*.d.ts",
|
|
7
|
+
"src/**/*.json",
|
|
8
|
+
"src/**/*.ts",
|
|
9
|
+
"src/**/*.tsx",
|
|
10
|
+
"src/**/*.mts"
|
|
11
|
+
],
|
|
12
|
+
"exclude": ["src/**/*.spec.ts", "src/**/*.spec.tsx", "src/**/*.test.ts", "src/**/*.test.tsx"],
|
|
13
|
+
"compilerOptions": {
|
|
14
|
+
"emitDeclarationOnly": true,
|
|
15
|
+
"noEmit": false,
|
|
16
|
+
"paths": {
|
|
17
|
+
"@universe/api/*": ["./src/*"],
|
|
18
|
+
"@uniswap/client-privy-embedded-wallet/dist/uniswap/privy-embedded-wallet/v1/service_pb": [
|
|
19
|
+
"../../node_modules/@uniswap/client-privy-embedded-wallet/dist/uniswap/privy-embedded-wallet/v1/service_pb",
|
|
20
|
+
"./stubs/privy-service-pb"
|
|
21
|
+
]
|
|
22
|
+
},
|
|
23
|
+
"types": ["chrome", "node"]
|
|
24
|
+
},
|
|
25
|
+
"types": ["vitest/globals"],
|
|
26
|
+
"references": [
|
|
27
|
+
{
|
|
28
|
+
"path": "../utilities"
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"path": "../sessions"
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"path": "../config"
|
|
35
|
+
}
|
|
36
|
+
]
|
|
37
|
+
}
|
package/vitest.config.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { defineConfig } from 'vitest/config'
|
|
2
|
+
|
|
3
|
+
export default defineConfig({
|
|
4
|
+
test: {
|
|
5
|
+
watch: false,
|
|
6
|
+
environment: 'jsdom',
|
|
7
|
+
coverage: {
|
|
8
|
+
exclude: ['**/__generated__/**', '**/node_modules/**', '**/dist/**', '**/*.config.*', '**/scripts/**'],
|
|
9
|
+
},
|
|
10
|
+
},
|
|
11
|
+
resolve: {
|
|
12
|
+
extensions: ['.web.ts', '.web.tsx', '.ts', '.tsx', '.js', '.jsx', '.json'],
|
|
13
|
+
},
|
|
14
|
+
})
|