@kuest/sdk 0.0.0-stage → 0.13.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/LICENSE +21 -0
- package/README.md +6 -2
- package/dist/actions/index.d.ts +180 -0
- package/dist/actions/index.js +2 -0
- package/dist/actions/index.js.map +1 -0
- package/dist/chunk-3QTVWIZS.js +3 -0
- package/dist/chunk-3QTVWIZS.js.map +1 -0
- package/dist/chunk-EH4TD6KD.js +2 -0
- package/dist/chunk-EH4TD6KD.js.map +1 -0
- package/dist/chunk-LDEY5CK7.js +6 -0
- package/dist/chunk-LDEY5CK7.js.map +1 -0
- package/dist/ethers-v5.d.ts +24 -0
- package/dist/ethers-v5.js +2 -0
- package/dist/ethers-v5.js.map +1 -0
- package/dist/index.d.ts +269 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/node.d.ts +24 -0
- package/dist/node.js +3 -0
- package/dist/node.js.map +1 -0
- package/dist/privy.d.ts +13 -0
- package/dist/privy.js +2 -0
- package/dist/privy.js.map +1 -0
- package/dist/sports-DTAVbnv-.d.ts +232 -0
- package/dist/types-BGprBegM.d.ts +12052 -0
- package/dist/types-DDzoOHmH.d.ts +66 -0
- package/dist/viem.d.ts +35 -0
- package/dist/viem.js +2 -0
- package/dist/viem.js.map +1 -0
- package/package.json +103 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/input.ts","../src/pagination.ts","../src/request-options.ts","../src/rpc.ts","../src/wallet.ts","../src/actions/exchange-asset.ts","../src/actions/params.ts","../src/actions/account.ts","../src/actions/activity.ts","../src/neg-risk-input.ts","../src/abis.ts","../src/types.ts","../src/workflow.ts","../src/actions/approvals-state.ts","../src/actions/gasless.ts","../src/actions/approvals.ts","../src/hmac.ts","../src/actions/auth.ts","../src/actions/builders.ts","../src/actions/clob.ts","../src/actions/collateral-return.ts","../src/actions/comments.ts","../src/market-url.ts","../src/actions/events.ts","../src/actions/leaderboards.ts","../src/actions/market-clarifications.ts","../src/site-scope.ts","../src/actions/markets.ts","../src/actions/neg-risk.ts","../src/actions/order-heartbeats.ts","../src/actions/orders/restrictions.ts","../src/actions/orders/cancel.ts","../src/actions/orders/asset.ts","../src/actions/orders/estimate.ts","../src/site-policy.ts","../src/actions/orders/post.ts","../src/site-config.ts","../src/protocol.ts","../src/actions/orders/fixed.ts","../src/actions/orders/context.ts","../src/actions/orders/amounts.ts","../src/actions/orders/cache.ts","../src/actions/orders/limit.ts","../src/actions/orders/market.ts","../src/exchange.ts","../src/actions/orders/orders.ts","../src/actions/orders/typed-data.ts","../src/actions/orders/types.ts","../src/actions/orders/prepare.ts","../src/actions/orders/settlement.ts","../src/actions/orders/allowance.ts","../src/actions/orders/trade.ts","../src/websockets/perps/signing.ts","../src/websockets/perps/actions/builder-terms.ts","../src/actions/perps/builders.ts","../src/actions/perps/position-snapshots.ts","../src/rate-limit.ts","../src/response.ts","../src/ServiceClient.ts","../src/websockets/heartbeat.ts","../src/websockets/lifecycle.ts","../src/websockets/perps/actions/internal-transfer-history.ts","../src/websockets/perps/actions/account.ts","../src/websockets/perps/actions/builders.ts","../src/websockets/perps/actions/chases.ts","../src/websockets/perps/actions/trading.ts","../src/websockets/perps/actions/twaps.ts","../src/websockets/perps/session.ts","../src/actions/perps/internal-transfer.ts","../src/actions/perps.ts","../src/actions/perps/registration.ts","../src/actions/portfolio.ts","../src/actions/positions-market.ts","../src/actions/positions.ts","../src/actions/profiles.ts","../src/actions/rfq.ts","../src/actions/search.ts","../src/actions/series.ts","../src/actions/session-key-status.ts","../src/actions/session-keys.ts","../src/actions/sports.ts","../src/actions/price-subscriptions.ts","../src/actions/subscriptions.ts","../src/actions/tags.ts","../src/actions/teams.ts","../src/actions/tokens.ts","../src/actions/transfers.ts"],"names":["parseUserInput","input","schema","result","UserInputError","PageSizeSchema","z","paginate","fetchPage","initialCursor","emptyItems","createEmptyPaginator","createPaginator","cursor","nextCursor","currentCursor","requested","page","UnexpectedResponseError","encodeCursorState","state","toPaginationCursor","encodeBase64","decodeCursorState","message","decodeBase64","error","readCursorPayload","text","char","OffsetCursorStateSchema","encodeOffsetCursor","decodeOffsetCursor","pageSize","limits","offsetCursorFromPayload","payload","parsed","PaginationLimitError","KeysetCursorStateSchema","encodeKeysetCursor","query","fingerprintQuery","keysetCursorFromPayload","isKeysetCursorPayload","canonicalize","value","entry","left","right","key","DEFAULT_REQUEST_TIMEOUT_MS","ReadRetryOptionsSchema","parseRequestOptions","options","assertNotAborted","retries","signal","RequestAbortedError","withAbort","promise","resolve","reject","cleanup","abort","JsonRpcClient","#fetch","#url","fetch","url","request","response","#post","RequestRejectedError","isRpcHexString","requests","#ethCallBatchWithSplit","call","toRpcQuantity","expectRpcHexResult","#postEthCallBatch","midpoint","responses","#postBatch","index","responsesById","_","id","json","ky","TransportError","body","isJsonRpcResponse","isJsonRpcContractRevert","isJsonRpcError","stringifyJsonRpcErrorData","isRecord","method","data","SignerType","BYTES32_ZERO","SESSION_SIGNER_MAGIC_BYTES","resolveAccountIdentity","environment","signer","wallet","classification","classifyAccount","toSignatureType","walletType","WalletType","SignatureType","resolveOrderIdentity","account","signatureType","wrapDepositWalletSignature","signature","createSessionSignerSignature","sessionSigner","signerId","expectHexString","AbiParameters","expectSessionSignerSignature","PROXY_BYTECODE_TEMPLATE","proxyWalletBytecodeHash","config","bytecode","Hash","deriveProxyWalletAddress","expectEvmAddress","ContractAddress","deriveSafeWalletAddress","ERC1967_CONST1","ERC1967_CONST2","ERC1967_PREFIX","deriveUupsDepositWalletAddress","walletId","args","depositWalletInitCodeHash","ERC1967_BEACON_CONST1","ERC1967_BEACON_CONST2","ERC1967_BEACON_CONST3","ERC1967_BEACON_PREFIX","FACTORY_BEACON_SELECTOR","deriveBeaconDepositWalletAddress","depositWalletBeaconInitCodeHash","implementation","argsByteLength","prefix","Bytes","beacon","getDepositWalletFactoryBeacon","rpc","factory","decodeAddressReturnData","ZERO_ADDRESS","isBeaconDepositWalletFactory","isSameEvmAddress","deriveCurrentDepositWalletAddress","ExchangeAssetIdSchema","exchangeAssetRequestSchema","shape","optionalExchangeAssetRequestSchema","ClosedFilterSchema","toSearchParams","params","mappings","isSnakeCaseSearchParamMappings","toSnakeCaseSearchParams","searchParams","paramKey","searchParamKey","isSearchParamArray","item","toSearchParamValue","snakeCase","exceptions","toLegacyDataSearchParams","EpochSecondsLikeSchema","TimeWindowSchema","PositiveInt32EventIdSchema","EventIdSchema","eventId","distinctIdList","max","ids","toDataSearchParams","toSnakeCase","character","FetchClosedOnlyModeError","makeErrorGuard","RateLimitError","SigningError","fetchClosedOnlyMode","client","requestOptions","ClosedOnlyModeSchema","ListOpenOrdersRequestFieldsSchema","PaginationCursorSchema","ListOpenOrdersRequestSchema","ListOpenOrdersError","listOpenOrders","OpenOrdersPageSchema","END_CURSOR","FetchOrderRequestSchema","FetchOrderError","fetchOrder","OpenOrderSchema","ListAccountTradesRequestFields","ListAccountTradesRequestSchema","ListAccountTradesError","listAccountTrades","ClobTradesPageSchema","FetchNotificationsError","DropNotificationsRequestSchema","fetchNotifications","NotificationsResponseSchema","DropNotificationsError","dropNotifications","BalanceAllowanceRequestFieldsSchema","AssetTypeSchema","FetchBalanceAllowanceRequestSchema","FetchBalanceAllowanceError","fetchBalanceAllowance","BalanceAllowanceResponseSchema","UpdateBalanceAllowanceRequestSchema","UpdateBalanceAllowanceError","updateBalanceAllowance","FetchOrderScoringRequestSchema","FetchOrderScoringError","fetchOrderScoring","OrderScoringResponseSchema","FetchOrdersScoringRequestSchema","FetchOrdersScoringError","fetchOrdersScoring","OrdersScoringResponseSchema","ListUserEarningsForDayRequestSchema","ListUserEarningsForDayError","listUserEarningsForDay","UserEarningsPageSchema","FetchTotalEarningsForUserForDayRequestSchema","FetchTotalEarningsForUserForDayError","fetchTotalEarningsForUserForDay","TotalUserEarningsResponseSchema","ListUserEarningsAndMarketsConfigRequestSchema","ListUserEarningsAndMarketsConfigError","listUserEarningsAndMarketsConfig","UserRewardsEarningsPageSchema","FetchRewardPercentagesError","fetchRewardPercentages","RewardsPercentagesSchema","ListTradesRequestSchema","EvmAddressSchema","TradeFilterTypeSchema","ConditionIdSchema","OrderSideSchema","ListTradesError","listTrades","window","ListTradesResponseSchema","ListActivityRequestSchema","ActivityTypeSchema","SortDirectionSchema","ListActivityError","listActivity","ListActivityResponseSchema","ListComboActivityRequestSchema","ComboConditionIdSchema","ListComboActivityError","listComboActivity","ListComboActivityResponseSchema","ExplicitAmountSchema","NegRiskConditionInputSchema","NegRiskEventIdSchema","NegRiskOperationInputSchema","HorizontalOperationInputSchema","ConvertInputSchema","protocolEventId","conditionIndex","BYTES31_HEX_LENGTH","PROTOCOL_V2_CONDITION_ID_BYTES31_PATTERN","PROTOCOL_V2_CONDITION_ID_BYTES32_PATTERN","ZERO_BYTES32","ERC20_APPROVE_FUNCTION","AbiFunction","ERC20_ALLOWANCE_FUNCTION","ERC20_TRANSFER_FUNCTION","DEPOSIT_WALLET_AUTHORIZE_SESSION_SIGNER_FUNCTION","DEPOSIT_WALLET_REVOKE_SESSION_SIGNER_FUNCTION","PERPS_DEPOSIT_FUNCTION","ERC1155_SET_APPROVAL_FOR_ALL_FUNCTION","ERC1155_IS_APPROVED_FOR_ALL_FUNCTION","ERC1155_BALANCE_OF_FUNCTION","ERC1155_BALANCE_OF_BATCH_FUNCTION","CTF_SPLIT_POSITION_FUNCTION","CTF_MERGE_POSITIONS_FUNCTION","CTF_REDEEM_POSITIONS_FUNCTION","NEG_RISK_REDEEM_POSITIONS_FUNCTION","ROUTER_SPLIT_FUNCTION","ROUTER_CONVERT_FUNCTION","ROUTER_HORIZONTAL_SPLIT_FUNCTION","ROUTER_HORIZONTAL_MERGE_FUNCTION","ROUTER_MERGE_FUNCTION","ROUTER_REDEEM_FUNCTION","COMBINATORIAL_MODULE_PREPARE_CONDITION_FUNCTION","SAFE_MULTISEND_FUNCTION","PROXY_FACTORY_FUNCTION","BINARY_OUTCOME_PARTITION","BINARY_OUTCOME_INDEX_SETS","MAX_UINT256","Erc20ApprovalCallError","erc20ApprovalCall","tokenAddress","spender","amount","encodeErc20ApproveCall","erc20AllowanceCall","owner","decodeErc20AllowanceResult","erc1155ApprovalForAllCall","operator","approved","encodeErc1155SetApprovalForAllCall","erc1155IsApprovedForAllCall","decodeErc1155IsApprovedForAllResult","erc1155BalanceOfCall","expectUint256","decodeErc1155BalanceOfResult","erc1155BalanceOfBatchCall","decodeErc1155BalanceOfBatchResult","Erc20TransferCallError","erc20TransferCall","recipient","encodeErc20TransferCall","authorizeSessionSignerCall","walletAddress","validUntil","revokeSessionSignerCall","PerpsDepositCallError","perpsDepositCall","depositContractAddress","to","CtfSplitPositionCallError","ctfSplitPositionCall","targetAddress","collateralTokenAddress","conditionId","encodeSplitPositionCall","CtfMergePositionsCallError","ctfMergePositionsCall","encodeMergePositionsCall","CtfRedeemPositionsCallError","ctfRedeemPositionsCall","conditionalTokensAddress","encodeCtfRedeemPositionsCall","negRiskRedeemPositionsCall","adapterAddress","amounts","RouterConvertCallError","routerConvertCall","routerAddress","RouterHorizontalSplitCallError","routerHorizontalSplitCall","RouterHorizontalMergeCallError","routerHorizontalMergeCall","RouterSplitCallError","routerSplitCall","normalizeProtocolV2ConditionId","RouterMergeCallError","routerMergeCall","RouterRedeemCallError","routerRedeemCall","outcomeIndex","expectProtocolV2OutcomeIndex","CombinatorialPrepareConditionCallError","combinatorialPrepareConditionCall","combinatorialModuleAddress","legs","leg","invariant","label","normalized","encodeProxyCall","calls","encodeSafeMultisendCall","encodedTransactions","encodeSafeMultisendTransaction","WaitForTransactionError","TimeoutError","TransactionFailedError","expectTransactionHandle","CancelledSigningError","authenticateWith","workflow","completeWith","requestAddress","signerTransactionRequest","chainId","resolveIndexedTradingApprovals","snapshot","required","findApproval","token","matches","row","match","approval","ApprovalStandard","EIP712_DOMAIN","SAFE_TRANSACTION","DEPOSIT_WALLET_DOMAIN_NAME","DEPOSIT_WALLET_DOMAIN_VERSION","DEPOSIT_WALLET_DEFAULT_DEADLINE_SECONDS","DEPOSIT_WALLET_CALL","DEPOSIT_WALLET_BATCH","FetchExecuteParamsRequestSchema","RelayerTransactionType","FetchExecuteParamsError","fetchExecuteParams","nonce","FetchGaslessTransactionRequestSchema","TransactionIdSchema","SDKTransactionResponseSchema","RelayerTransactionState","transaction","GaslessTransactionSchema","IsWalletDeployedRequestSchema","IsWalletDeployedError","isWalletDeployed","resolveWalletDeploymentTarget","RelayerDeployedResponseSchema","deployed","GaslessTransactionMetadataSchema","GASLESS_SUBMIT_RETRY_ATTEMPTS","DeployDepositWalletError","deployDepositWallet","executeGasless","FetchGaslessTransactionError","fetchTransaction","TransactionCallSchema","isHexString","PrepareGaslessTransactionRequestSchema","val","expectNonEmptyArray","PrepareGaslessTransactionError","prepareGaslessTransaction","attempt","prepareProxyWalletGaslessTransaction","prepareDepositWalletGaslessTransaction","prepareSafeWalletGaslessTransaction","isRetryableGaslessSubmitError","delay","buildProxyWalletExecuteRequest","metadata","executeParams","relayerFee","gasPrice","gasLimit","relayHub","relay","hash","buildProxyTransactionHash","expectEvmSignature","signGaslessMessage","extractOnChainNonceFromSubmitError","buildDepositWalletExecuteRequest","resignDepositWalletExecuteRequest","depositWalletCalls","toDepositWalletCall","deadline","signGaslessTypedData","createDepositWalletBatchTypedDataPayload","buildSafeWalletExecuteRequest","aggregateSafeTransactionCalls","safePayload","createSafeTypedDataPayload","OxTypedData","packSafeSignature","createSafeSignatureParams","RelayerExecuteRequestSchema","RelayerExecuteResponseSchema","GaslessTransactionHandle","submittedNonce","onChainNonce","domain","safeMultisend","operation","from","prefixlessSignature","v","packedV","WaitForGaslessTransactionError","#client","pollCount","transactionHash","PrepareErc20ApprovalRequestSchema","PrepareErc20ApprovalError","prepareErc20Approval","sendErc20ApprovalTransaction","ApproveErc20Error","approveErc20","PrepareErc1155ApprovalForAllRequestSchema","PrepareErc1155ApprovalForAllError","prepareErc1155ApprovalForAll","sendErc1155ApprovalForAllTransaction","ApproveErc1155ForAllError","approveErc1155ForAll","PrepareTradingApprovalsError","FetchTradingApprovalsStateRequestSchema","FetchTradingApprovalsStateError","fetchTradingApprovalsState","user","FetchApprovalsResponseSchema","missing","getRequiredTradingApprovals","prepareTradingApprovals","missingApprovals","resolveMissingTradingApprovals","erc20ApprovalCalls","erc1155ApprovalCalls","SetupTradingApprovalsError","setupTradingApprovals","requiredApprovals","checkCalls","results","erc20Results","erc1155Results","contracts","buildHmacSignature","secret","timestamp","requestPath","cryptoKey","base64ToArrayBuffer","toUrlSafeBase64","arrayBufferToBase64","base64","sanitizedBase64","binaryString","bytes","buffer","binary","byte","CreateApiKeyError","createApiKey","toL1Headers","ApiKeyCredsSchema","DeriveApiKeyError","deriveApiKey","CreateOrDeriveApiKeyError","createOrDeriveApiKey","FetchApiKeysError","fetchApiKeys","ApiKeysResponseSchema","DeleteApiKeyError","deleteApiKey","CreateBuilderApiKeyError","createBuilderApiKey","BuilderApiKeyCredsSchema","FetchBuilderApiKeysError","fetchBuilderApiKeys","toRelayerL2Headers","BuilderApiKeysResponseSchema","RevokeBuilderApiKeyError","revokeBuilderApiKey","path","auth","ListBuilderTradesError","listBuilderTrades","_client","_request","_options","FetchMidpointRequestSchema","FetchMidpointError","fetchMidpoint","toAssetSearchParams","MidpointSchema","FetchMidpointsRequestSchema","FetchMidpointsError","fetchMidpoints","toTokenRequestPayload","MidpointsSchema","FetchTickSizeRequestSchema","FetchTickSizeError","fetchTickSize","FetchTickSizeResponseSchema","FetchNegRiskRequestSchema","FetchNegRiskError","fetchNegRisk","FetchNegRiskResponseSchema","ResolveConditionByTokenRequestSchema","ResolveConditionByTokenError","resolveConditionByToken","ResolveConditionByTokenResponseSchema","FetchMarketInfoRequestSchema","FetchMarketInfoError","fetchMarketInfo","FetchMarketInfoResponseSchema","FetchBuilderFeeRatesRequestSchema","BuilderCodeSchema","FetchBuilderFeeRatesError","fetchBuilderFeeRates","FetchBuilderFeeRatesResponseSchema","FetchPriceRequestSchema","FetchPriceError","fetchPrice","PriceSchema","FetchPricesRequestSchema","FetchPricesError","fetchPrices","toTokenWithSideRequestPayload","PricesSchema","FetchOrderBookRequestSchema","FetchOrderBookError","fetchOrderBook","FetchOrderBookResponseSchema","FetchOrderBooksRequestSchema","FetchOrderBooksError","fetchOrderBooks","OrderBooksSchema","FetchSpreadRequestSchema","FetchSpreadError","fetchSpread","SpreadSchema","FetchSpreadsRequestSchema","FetchSpreadsError","fetchSpreads","SpreadsSchema","FetchLastTradePriceRequestSchema","FetchLastTradePriceError","fetchLastTradePrice","LastTradePriceSchema","FetchLastTradePricesRequestSchema","FetchLastTradePricesError","fetchLastTradePrices","LastTradePricesSchema","ListCurrentRewardsRequestSchema","ListCurrentRewardsError","listCurrentRewards","PaginatedCurrentRewardsSchema","ListMarketRewardsRequestSchema","ListMarketRewardsError","listMarketRewards","PaginatedMarketRewardsSchema","__","rest","ListRewardMarketsRequestSchema","RewardMarketSort","ListRewardMarketsError","listRewardMarkets","PaginatedRewardMarketsSchema","FetchCurrentRebatesRequestSchema","FetchCurrentRebatesError","fetchCurrentRebates","RebatedFeesResponseSchema","COLLATERAL_RETURN_REQUEST_TIMEOUT_MS","PlanCollateralReturnError","planCollateralReturn","assertCollateralReturnAccount","CollateralReturnPlanResponseSchema","ExecuteCollateralReturnPlanRequestSchema","CollateralReturnPlanSchema","COLLATERAL_RETURN_SUBMIT_RETRY_ATTEMPTS","COLLATERAL_RETURN_METADATA","PrepareCollateralReturnExecutionError","prepareCollateralReturnExecution","plan","envelope","buildCollateralReturnEnvelope","submitCollateralReturnPlan","resignedEnvelope","ExecuteCollateralReturnPlanError","executeCollateralReturnPlan","planHash","MAX_COMMENTS_PAGE_SIZE","MAX_COMMENTS_OFFSET","COMMENT_CURSOR_LIMITS","ListCommentsRequestSchema","SeriesIdSchema","CommentParentEntityTypeSchema","FetchCommentsByIdRequestSchema","CommentIdSchema","ListCommentsByUserAddressRequestSchema","ListCommentsError","KeysetCommentOrderSchema","toKeysetCommentsQuery","order","listComments","keysetQuery","fetchCommentsOffsetPage","fetchCommentsKeysetPage","afterCursor","ListCommentsResponseSchema","comments","hasMore","comment","ListCommentsKeysetResponseSchema","FetchCommentsByIdError","fetchCommentsById","ListCommentsByUserAddressError","listCommentsByUserAddress","address","decoded","parseMarketSlugUrl","rawUrl","resource","cause","actualResource","slug","extraSegments","marketSlug","ListEventsRequestSchema","IsoDateTimeStringSchema","IsoCalendarDateStringSchema","ProtocolVersion","FetchEventRequestSchema","FetchEventTagsRequestSchema","ListEventsError","listEvents","ListEventsKeysetResponseSchema","toEventsSearchParams","toEventsCursor","FetchEventError","fetchEvent","EventSchema","toFetchEventByIdSearchParams","toFetchEventBySlugSearchParams","FetchEventTagsError","fetchEventTags","FetchEventTagsResponseSchema","ResolutionConditionIdsSchema","CanonicalMarketConditionIdSchema","conditionIds","ResolutionEventIdsSchema","eventIds","FetchResolutionsRequestSchema","QuestionIdSchema","FetchResolutionsError","fetchResolutions","questionId","FetchResolutionsResponseSchema","FetchEventLiveVolumeRequestSchema","FetchEventLiveVolumeError","fetchEventLiveVolume","FetchEventLiveVolumeResponseSchema","ListBuilderLeaderboardRequestSchema","LeaderboardWindowSchema","ListBuilderLeaderboardError","listBuilderLeaderboard","ListBuilderLeaderboardResponseSchema","FetchBuilderVolumeRequestSchema","BuilderVolumeIntervalSchema","FetchBuilderVolumeError","fetchBuilderVolume","interval","bucketLimit","FetchBuilderVolumeResponseSchema","BoardCategorySchema","ListTraderLeaderboardRequestSchema","TraderLeaderboardSortSchema","ListTraderLeaderboardError","listTraderLeaderboard","category","sortBy","ListTraderLeaderboardResponseSchema","FetchTraderLeaderboardStandingRequestSchema","FetchTraderLeaderboardStandingError","fetchTraderLeaderboardStanding","FetchTraderLeaderboardStandingResponseSchema","ListBiggestWinnersRequestSchema","ListBiggestWinnersError","listBiggestWinners","ListBiggestWinnersResponseSchema","ListMarketClarificationsRequestSchema","MarketClarificationState","ListMarketClarificationsError","listMarketClarifications","ListMarketClarificationsResponseSchema","clarifications","TTL_MS","PAGE_LIMIT","MAX_PAGES","CONDITION_ID","TOKEN_ID","cache","collect","scope","child","field","candidate","siteOrigin","siteUrl","getSiteMarketScope","origin","cached","events","filterSiteMarkets","markets","market","ListMarketsRequestSchema","PositionIdSchema","MarketResolutionStatus","FetchMarketByIdRequestSchema","FetchMarketBySlugRequestSchema","FetchMarketByUrlRequestSchema","FetchMarketRequestSchema","FetchMarketTagsRequestSchema","ListMarketsError","listMarkets","next","ListMarketsKeysetResponseSchema","toMarketsSearchParams","items","ListComboMarketsRequestSchema","ListComboMarketsError","listComboMarkets","ListComboMarketsResponseSchema","toComboMarketsSearchParams","FetchMarketError","fetchMarket","fetchMarketById","fetchMarketBySlug","FetchMarketTagsError","fetchMarketTags","FetchMarketTagsResponseSchema","ListMarketHoldersRequestSchema","includePnl","context","ListMarketHoldersError","listMarketHolders","minBalance","ListMarketHoldersResponseSchema","MAX_PRICE_HISTORY_WINDOW_SECONDS","MAX_PRICE_HISTORY_TIMESTAMP_SECONDS","PriceHistoryTimestampSchema","PriceHistoryAssetIdSchema","ClobAssetIdSchema","PriceHistorySeriesRequestFields","PriceHistoryIntervalRequestSchema","PriceHistoryIntervalSchema","bucketSeconds","minimumBucketSeconds","PriceHistoryInterval","PriceHistoryRangeRequestSchema","end","start","PriceHistoryAsOfRequestSchema","ListPriceHistoryRequestSchema","ListPriceHistoryError","listPriceHistory","assetId","ListPriceHistoryResponseSchema","FetchOpenInterestRequestSchema","FetchOpenInterestError","fetchOpenInterest","FetchOpenInterestResponseSchema","MarketSchema","assertRouterUnavailable","PrepareConvertRequestSchema","PrepareConvertError","prepareConvert","ConvertError","convert","PrepareHorizontalSplitRequestSchema","PrepareHorizontalSplitError","prepareHorizontalSplit","HorizontalSplitError","horizontalSplit","PrepareHorizontalMergeRequestSchema","PrepareHorizontalMergeError","prepareHorizontalMerge","HorizontalMergeError","horizontalMerge","SendOrderHeartbeatRequestSchema","SendOrderHeartbeatError","OrderHeartbeatMismatchError","sendOrderHeartbeat","heartbeatId","OrderHeartbeatSchema","mapTradingRestrictionError","restriction","parseTradingRestriction","CancelOrderRequestSchema","CancelOrdersRequestSchema","CancelMarketOrdersRequestFieldsSchema","CancelMarketOrdersRequestSchema","CancelOrderError","cancelOrder","cancel","CancelOrdersError","cancelOrders","CancelAllError","cancelAll","CancelMarketOrdersError","cancelMarketOrders","CancelOrdersResponseSchema","AssetIdOrderAssetSchema","TokenIdOrderAssetSchema","BaseEstimateMarketPriceRequestSchema","OrderType","EstimateMarketBuyPriceRequestSchema","OrderSide","PositiveDecimalNumberSchema","EstimateMarketSellPriceRequestSchema","EstimateMarketPriceRequestSchema","tokenId","EstimateMarketPriceError","InsufficientLiquidityError","estimateMarketPrice","resolveEstimatedMarketPrice","orderBook","resolveMarketPriceFromOrderBook","price","calculateBuyMarketPrice","calculateSellMarketPrice","isValidPrice","tickSize","positions","amountToMatch","orderType","sum","position","bestPosition","GEOBLOCK_HOST","cachedStatuses","ensureSiteTradingAllowed","status","MAX_CLOB_ORDER_SALT","ClobOrderSaltSchema","isClobSafeSalt","PostOrderInputSchema","PostOrdersRequestSchema","PostOrderError","PostOrdersError","postOrder","createSendOrderPayload","OrderResponseSchema","postOrders","orders","OrderResponsesSchema","salt","BYTES32","DEFAULT_SITE_CONFIG","parseSiteConfig","record","resolveSiteOrderContext","builderCode","UINT256_BYTE_LENGTH","BINARY_MODULE_ID","NEG_RISK_MODULE_ID","COMBINATORIAL_MODULE_ID","MAX_COMBO_LEGS","UINT256_MAX","V2_RESERVED_BITS_MASK","deriveComboPositionContext","encodedLegs","baseHash","toComboConditionId","toPositionId","canonicalizeComboLegs","parsePositionId","hex","moduleId","previous","current","isV2PositionId","decodeV2OutcomePositionId","positionId","toConditionId","FIXED_SCALE","MAX_PRICE_DRIFT","FIXED_DECIMALS","MAX_SCALED_AMOUNT_DRIFT","toScaledAmount","scaled","maxDrift","toScaledPrice","canonical","fromScaledPrice","scaledQuantum","decimalPlaces","mulDiv","multiplier","denominator","rounding","numerator","quotient","quantize","quantum","resolveRoundingConfig","validatePriceOnTickGrid","scaledPrice","scaledTick","resolveExchangeAddress","negRisk","resolveOrderExchangeAddress","multiplyAmountByPrice","divideAmountByPrice","computeLimitOrderAmounts","roundConfig","size","computeMarketOrderAmounts","METADATA_TTL_MS","IMMUTABLE_TTL_MS","OrderMetadataCache","#deps","#builderTakerFeeRates","#conditions","#markets","deps","#resolveMarket","readThrough","#fetchMarket","#assertMarketContainsAsset","resolvedEntry","assetIds","entries","ttlMs","load","cachesByClient","resolveOrderMarketMetadata","resolveCache","fetchCurrentOrderMarketMetadata","resolveBuilderTakerFeeRate","existing","created","MINIMUM_LIMIT_ORDER_EXPIRATION_SECONDS","BasePrepareLimitOrderParamsSchema","PrepareLimitOrderParamsSchema","minimumExpiration","prepareLimitOrderDraft","resolveLimitOrderContext","siteOrder","buildLimitOrderContext","currentMetadata","validateExactPriceOnTickGrid","BasePrepareMarketOrderParamsSchema","PrepareMarketBuyOrderParamsSchema","PrepareMarketSellOrderParamsSchema","PrepareMarketOrderParamsSchema","prepareMarketOrderDraft","attributedParams","resolveMarketOrderContext","hasProtectedPrice","resolveProtectedMarketOrderContext","resolveUnprotectedMarketOrderContext","builderTakerFeeRate","resolveFeeInputs","buildProtectedBuyMarketOrderContext","currentMarket","buildProtectedMarketOrderContext","maxSpend","resolveProtectedMarketOrderPrice","priceNumber","adjustBuyAmountForFees","feeInputs","resolvedFeeInputs","resolveUnprotectedMarketOrderAmount","validateProtectedPriceOnTickGrid","platformFeeRate","platformFee","totalCost","PROTOCOL_NAME","ORDER_TYPE_STRING","ORDER_TYPE_HASH","DOMAIN_TYPE_HASH","PROTOCOL_NAME_HASH","ORDER_STRUCTURE","TYPED_DATA_SIGN_STRUCTURE","createExchangeOrderTypedDataPayload","orderPayload","createLegacyExchangeOrderTypedDataPayload","createExchangeOrderTypedDataDomain","createExchangeOrderSignature","contentsType","contentsTypeLength","expectErc1271Signature","createExchangeOrderDomainSeparator","createExchangeOrderContentsHash","createExchangeV3OrderDomain","calculateExchangeOrderMakerAmount","side","calculateExchangeOrderTakerAmount","createExchangeOrderMessage","encodeExchangeOrderSide","protocolVersionHash","protocolVersion","createUnsignedOrder","identity","generateOrderSalt","createSignedOrder","_chainId","_exchangeAddress","_protocolVersion","signedFields","createOrderTypedDataPayload","createOrderExchangeDomain","createOrderSignature","signOrder","PrepareMarketOrderError","prepareMarketOrder","draft","unsignedOrder","PrepareLimitOrderError","prepareLimitOrder","PrepareMarketOrderPostingError","prepareMarketOrderPosting","createOrderPostingWorkflow","PrepareLimitOrderPostingError","prepareLimitOrderPosting","workflowPromise","SETTLEMENT_POLL_INTERVAL_MS","DEFAULT_SETTLEMENT_TIMEOUT_MS","WaitForOrderFillSettlementRequestFields","WaitForOrderFillSettlementRequestSchema","WaitForOrderFillSettlementError","isTradeSettled","trade","TradeStatus","isFailedTrade","waitForOrderFillSettlement","timeoutMs","tradeIds","settled","pending","pages","unsettled","trades","TxHashSchema","resolveBalanceAllowanceAssetType","AssetType","resolveCurrentAllowance","assetType","allowances","resolveAllowanceAmount","CreateMarketOrderError","createMarketOrder","PlaceMarketOrderError","placeMarketOrder","postOrderWithAllowanceRecovery","CreateLimitOrderError","createLimitOrder","PlaceLimitOrderError","placeLimitOrder","postSignedOrder","isBalanceOrAllowanceRequestRejection","retryResponse","approveOrderAndRetry","ensureOrderApproval","exchangeAddress","requiredAllowance","signPerpsOp","TypedData","createPerpsOpTypedDataPayload","Signature","Secp256k1","encode","compactSignableValue","randomUint32","PerpsBuilderFeeRateInputSchema","PerpsBuilderTermsInputSchema","minPerpsBuilderFeeRate","builderMax","approvedMax","builderWhole","builderFraction","approvedWhole","approvedFraction","scale","builder","FetchPerpsBuilderStatusRequestSchema","FetchPerpsBuilderStatusError","fetchPerpsBuilderStatus","PerpsBuilderStatusSchema","ResolvedPerpsBuilderFeeSchema","ApprovePerpsBuilderFeeRequestSchema","ApprovePerpsBuilderFeeError","approvePerpsBuilderFee","session","approvalVersion","nextPerpsBuilderApprovalVersion","op","createPerpsBuilderFeeApprovalTypedData","PerpsBuilderApprovalSchema","createPerpsBuilderFeeApprovalBody","approvals","SelectionShape","validSelection","selection","active","history","fill","SelectionSchema","RequestSchema","FetchPerpsPositionSnapshotsError","fetchPerpsPositionSnapshots","fetchSnapshots","fetchOwnPerpsPositionSnapshots","api","PerpsCredentialsResponseSchema","PerpsPositionSnapshotsSchema","parseRateLimitHeaders","headers","bucket","remaining","parseIntegerHeader","reset","tier","parseTextHeader","warning","format","parseResponse","endpoint","ServiceClientRequestError","ServiceClientResponseControlsSchema","responseType","HTTP_DATE_MONTHS","HTTP_DATE_MONTH","HTTP_DATE_TIME","HTTP_DATE_PATTERNS","FIFTY_YEARS_MS","parseHttpDate","now","groups","pattern","month","day","hour","minute","second","yearDigits","year","time","ServiceClient","#headers","#resolveHeaders","#onRateLimitUpdate","root","resolveHeaders","onRateLimitUpdate","retryMutations","#request","#normalizePath","readOnly","#send","rateLimit","#notifyRateLimitUpdate","retryAfter","#parseRetryAfterHeader","code","retryAfterSeconds","#extractResponseError","#consumeResponse","mode","#createRequest","resolvedHeaders","#mergeHeaders","retryCount","delaySeconds","#serializeJson","sources","source","update","contentType","OrderHeartbeatMismatchResponseSchema","ErrorResponseSchema","inferredCode","CLOB_HEARTBEAT_INTERVAL_MS","CLOB_HEARTBEAT_STALE_MS","RTDS_HEARTBEAT_INTERVAL_MS","RTDS_HEARTBEAT_STALE_MS","SPORTS_HEARTBEAT_STALE_MS","PERPS_HEARTBEAT_INTERVAL_MS","PERPS_HEARTBEAT_STALE_MS","ClobWebSocketHeartbeat","#lastPongAt","#timer","send","setNonBlockingInterval","RtdsWebSocketHeartbeat","#lastMessageAt","SportsWebSocketHeartbeat","#lastPingAt","PerpsWebSocketHeartbeat","PolyboltWebSocketHeartbeat","_message","HEARTBEAT_WATCHDOG_INTERVAL_MS","RECONNECT_BASE_DELAY_MS","RECONNECT_MAX_DELAY_MS","ReconnectScheduler","#attempt","reconnectDelay","setNonBlockingTimeout","#reconnect","WebSocketConnection","#heartbeat","#connectTimeoutMs","#closeTimeoutMs","#cancelOpen","#socket","#connecting","#watchdog","#clearCurrentSocket","connecting","#open","#sendRaw","socket","#takeCurrent","#stopHeartbeat","timer","createWebSocket","onOpen","onOpenError","#markOpen","#startHeartbeat","event","raw","heartbeat","exponentialDelay","toPerpsInternalTransfersPage","transfers","readBoundary","seenKeys","transfer","last","endTimestamp","continuationTransfers","boundary","nextSeenKeys","ONE_DAY_MS","NINETY_DAYS_MS","TimestampInputSchema","PerpsHistoryRequestBaseSchema","PerpsIntervalHistoryRequestBaseSchema","PerpsPnlIntervalSchema","PerpsDescendingAccountHistoryKindSchema","PerpsAscendingAccountHistoryKindSchema","PerpsDescendingAccountCursorStateSchema","PerpsInstrumentIdSchema","PerpsDepositStatusSchema","PerpsWithdrawalStatusSchema","PerpsAscendingAccountCursorStateSchema","fetchPerpsBalances","FetchPerpsBalancesResponseSchema","fetchPerpsPortfolio","FetchPerpsPortfolioResponseSchema","fetchPerpsStats","FetchPerpsAccountStatsResponseSchema","fetchPerpsAutoCancelStatus","FetchPerpsAutoCancelStatusResponseSchema","FetchPerpsAccountConfigRequestSchema","fetchPerpsAccountConfig","FetchPerpsAccountConfigResponseSchema","toPerpsSearchParams","FetchPerpsOpenOrdersRequestSchema","fetchPerpsOpenOrders","FetchPerpsOpenOrdersResponseSchema","FetchPerpsOrdersRequestInputSchema","PerpsOrderIdSchema","PerpsClientOrderIdSchema","FetchPerpsOrdersRequestSchema","fetchPerpsOrders","FetchPerpsOrdersResponseSchema","ListPerpsFillsRequestSchema","PerpsSortDirectionSchema","listPerpsFills","ListPerpsFillsResponseSchema","ListPerpsFundingPaymentsInitialRequestSchema","ListPerpsFundingPaymentsCursorRequestSchema","ListPerpsFundingPaymentsRequestSchema","toPerpsHistoryParams","listPerpsFundingPayments","pageCursor","_kind","_seenKeys","ListPerpsFundingPaymentsResponseSchema","payment","toPerpsDescendingAccountPage","ListPerpsDepositsInitialRequestSchema","ListPerpsDepositsCursorRequestSchema","ListPerpsDepositsRequestSchema","listPerpsDeposits","ListPerpsDepositsResponseSchema","deposit","latestPerpsDepositTimestamp","ListPerpsWithdrawalsInitialRequestSchema","ListPerpsWithdrawalsCursorRequestSchema","ListPerpsWithdrawalsRequestSchema","listPerpsWithdrawals","ListPerpsWithdrawalsResponseSchema","withdrawal","latestPerpsWithdrawalTimestamp","ListPerpsInternalTransfersInitialRequestSchema","PerpsInternalTransfersCursorStateSchema","ListPerpsInternalTransfersCursorRequestSchema","ListPerpsInternalTransfersRequestSchema","listPerpsInternalTransfers","ListPerpsInternalTransfersResponseSchema","bounds","ListPerpsEquityHistoryInitialRequestSchema","ListPerpsEquityHistoryCursorRequestSchema","ListPerpsEquityHistoryRequestSchema","toPerpsIntervalHistoryParams","listPerpsEquityHistory","ListPerpsEquityHistoryResponseSchema","perpsHistoryIntervalMilliseconds","ListPerpsPnlHistoryInitialRequestSchema","ListPerpsPnlHistoryCursorRequestSchema","ListPerpsPnlHistoryRequestSchema","listPerpsPnlHistory","ListPerpsPnlHistoryResponseSchema","PerpsNotificationsCursorStateSchema","ListPerpsNotificationsInitialRequestSchema","ListPerpsNotificationsCursorRequestSchema","ListPerpsNotificationsRequestSchema","listPerpsNotifications","sinceSeq","limit","ListPerpsNotificationsResponseSchema","fetchPerpsUnreadNotificationsCount","FetchPerpsUnreadNotificationsCountResponseSchema","MarkPerpsNotificationsReadByIdsRequestSchema","MarkPerpsNotificationsReadUpToRequestSchema","MarkPerpsNotificationsReadRequestSchema","upTo","encodePerpsNotificationsReadCursor","markPerpsNotificationsRead","MarkPerpsNotificationsReadResponseSchema","defaultWindowMs","rawLast","cursorTimestamp","seen","FetchPerpsBuilderApprovalsRequestSchema","FetchPerpsBuilderApprovalsError","fetchPerpsBuilderApprovals","FetchPerpsBuilderApprovalsResponseSchema","BuilderReportingIntegerSchema","BuilderReportingRequestSchema","ListPerpsBuilderEarningsError","listPerpsBuilderEarnings","ListPerpsBuilderEarningsResponseSchema","FetchPerpsBuilderEarningsSummaryError","fetchPerpsBuilderEarningsSummary","PerpsBuilderEarningsSummarySchema","BoundedDecimalSchema","PerpsDecimalInputSchema","whole","fraction","exponent","digits","point","expanded","integer","fractional","normalizedFraction","decimalUnits","CreatePerpsChaseRequestSchema","CreatePerpsChaseError","createPerpsChase","signCommand","accepted","CreatePerpsChaseResponseSchema","FetchPerpsChasesError","fetchPerpsChases","FetchPerpsChasesResponseSchema","CancelPerpsChaseRequestSchema","PerpsChaseIdSchema","CancelPerpsChaseError","cancelPerpsChase","PerpsCommandAckSchema","PerpsOrderBaseInputSchema","PerpsPlaceGtcOrderRequestSchema","PerpsTimeInForce","PerpsPlaceGtdOrderRequestSchema","expiry","PerpsPlaceIocOrderRequestSchema","PerpsPlaceFokOrderRequestSchema","PerpsOrderRequestSchema","PerpsTpSlTriggerSchema","PerpsPositionCloseQuantitySchema","PerpsPositionTpSlTriggerSchema","PerpsTrailingStopSchema","PerpsStopLossSchema","PerpsPositionStopLossSchema","PerpsTpSlPairSchema","PostPerpsOrdersRequestSchema","postPerpsOrders","builderAttribution","toRawPerpsOrder","PerpsPostOrderAckSchema","PlacePerpsOrderWithTpSlRequestSchema","randomClientOrderId","PlacePerpsOrderRequestSchema","SuccessfulPerpsPostOrderAcksSchema","acknowledgements","acknowledgement","hasPerpsTpSl","placePerpsOrder","placePerpsOrderWithTpSl","isOrderUpdateFor","exitBuy","toRawPerpsTpSlOrder","PerpsTpSlKind","toDecimalString","PerpsTpSlScope","triggerIndex","tpSl","placedOrderFrom","expectPresent","PerpsPositionTpSlRequiredPairSchema","PlacePerpsPositionTpSlRequestSchema","placePerpsPositionTpSl","buy","positionTpSlExitBuy","DEFAULT_PERPS_CANCEL_MAX_ATTEMPTS","DEFAULT_PERPS_CANCEL_MAX_ELAPSED_MS","PERPS_CANCEL_RETRY_BASE_DELAY_MS","PERPS_CANCEL_RETRY_MAX_DELAY_MS","PerpsCancelRetryOptionsSchema","PerpsCancelOptionsSchema","CancelPerpsOrderRequestSchema","cancelPerpsOrder","cancelPerpsOrders","CancelPerpsOrdersRequestSchema","retryPerpsOrderCancellations","orderIds","PerpsCancelOrderResultSchema","clientOrderIds","identifiers","execute","maxAttempts","retryDeadline","finalResults","identifier","resultIndex","attempts","assertPerpsCancelNotAborted","remainingMs","delayMs","perpsCancelRetryDelayMs","waitForPerpsCancelRetry","attemptResults","requestRejection","perpsCancelRequestRejectionFrom","PerpsCancelRetryError","retryable","target","PerpsKnownCancelOrderErrorCode","retryNumber","maximumDelayMs","abortSignal","onAbort","OperationAbortedError","CancelAllPerpsOrdersRequestSchema","cancelAllOrders","PerpsCancelAllOrdersResponseSchema","MINIMUM_AUTO_CANCEL_DELAY_MILLISECONDS","ArmPerpsAutoCancelRequestSchema","minimumCancelAt","ArmPerpsAutoCancelError","AutoCancelDailyLimitError","AUTO_CANCEL_DAILY_LIMIT_REACHED","armPerpsAutoCancel","command","PerpsAutoCancelResponseSchema","toPerpsCommandBodyOp","DisarmPerpsAutoCancelRequestSchema","disarmPerpsAutoCancel","UpdatePerpsLeverageRequestSchema","UpdatePerpsLeverageError","updatePerpsLeverage","PerpsUpdateLeverageResultSchema","UpdatePerpsLeveragesRequestSchema","updates","instrumentIds","UpdatePerpsLeveragesError","updatePerpsLeverages","PerpsUpdateLeverageBatchResultSchema","UpdatePerpsMarginRequestSchema","UpdatePerpsMarginError","updatePerpsMargin","ack","clientOrderId","portfolio","instrumentId","sign","decimalSign","trimmed","type","group","withOptionalGroup","toPerpsOrderBody","leverage","crossMargin","toPerpsTpSlTriggerBody","trigger","CreatePerpsTwapRequestSchema","minimum","maximum","CreatePerpsTwapError","createPerpsTwap","CreatePerpsTwapResponseSchema","FetchPerpsTwapsError","fetchPerpsTwaps","FetchPerpsTwapsResponseSchema","TwapIdentityRequestSchema","PerpsTwapIdSchema","PausePerpsTwapError","pausePerpsTwap","ResumePerpsTwapError","resumePerpsTwap","CancelPerpsTwapError","cancelPerpsTwap","AUTH_TIMEOUT_MS","COMMAND_TIMEOUT_MS","ORDER_PLACEMENT_UPDATE_TIMEOUT_MS","PERPS_SESSION_CHANNELS","SERVER_RESYNC_CHANNELS","PerpsResponseEnvelopeSchema","PerpsSessionAckSchema","RevokePerpsBuilderFeeError","PerpsSession","#approveBuilderFee","#api","#chainId","#onClose","#wsUrl","#connection","#queue","pushable","#pending","#eventWaiters","#reconnectScheduler","#sequences","#builderAddress","#builderAttribution","#builderConsentChange","#includeBuilderFills","#nextRequestId","#closing","#authenticatedHeaders","feeRate","#connect","#shutdown","approvalRequest","#changeBuilderConsent","builderAddress","change","expiresAt","#createSignedCommand","emitResync","#handleConnectionLost","#handleMessage","#authenticate","#subscribe","#sendRequest","responseSchema","bodyOp","predicate","waiter","#createEventWaiter","#startEventWaiterTimeout","commandResponse","#removeEventWaiter","frame","timeoutMessage","createPendingResponse","timeout","#rejectPending","#rejectEventWaiters","rawMessage","#handleResponse","resync","PerpsNotificationsResyncFrameSchema","#emitEvent","PerpsSessionUpdateEventSchema","#pushSequenceGapIfNeeded","errorAckFrom","isRejectedPerpsAck","previousSequence","#resolveEventWaiters","resolvePromise","rejectPromise","executePerpsCollateralTransfer","executor","PerpsPublicReadError","FetchPerpsInstrumentsRequestSchema","PerpsInstrumentCategorySchema","FetchPerpsInstrumentsError","fetchPerpsInstruments","FetchPerpsInstrumentsResponseSchema","FetchPerpsTickerRequestSchema","FetchPerpsTickerError","fetchPerpsTicker","ticker","fetchPerpsTickers","FetchPerpsTickersRequestSchema","FetchPerpsTickersError","tickers","statistics","FetchPerpsTickersResponseSchema","FetchPerpsStatisticsResponseSchema","statisticsByInstrument","statistic","PerpsBookDepthSchema","FetchPerpsBookRequestSchema","FetchPerpsBookError","fetchPerpsBook","PerpsBookSchema","ListPerpsCandlesInitialRequestSchema","PerpsKlineIntervalSchema","ListPerpsCandlesCursorRequestSchema","ListPerpsCandlesRequestSchema","toPerpsCandlesParams","ListPerpsCandlesError","listPerpsCandles","createInitialPerpsCandlesCursor","decodePerpsCandlesCursor","FetchPerpsCandlesResponseSchema","perpsKlineIntervalMilliseconds","TimeRangePerpsRequestBaseSchema","ListPerpsFundingHistoryInitialRequestSchema","ListPerpsFundingHistoryCursorRequestSchema","ListPerpsFundingHistoryRequestSchema","toPerpsTimeRangeParams","ListPerpsTradesInitialRequestSchema","ListPerpsTradesCursorRequestSchema","ListPerpsFundingHistoryError","listPerpsFundingHistory","createInitialPerpsFundingCursor","decodePerpsFundingCursor","FetchPerpsFundingHistoryResponseSchema","ListPerpsTradesRequestSchema","ListPerpsTradesError","listPerpsTrades","createInitialPerpsTradesCursor","decodePerpsTradesCursor","seenTradeIds","FetchPerpsTradesResponseSchema","nextPerpsTradeCursorSeenIds","FetchPerpsFeesError","fetchPerpsFees","FetchPerpsFeesResponseSchema","PerpsCandlesCursorStateSchema","PerpsFundingCursorStateSchema","PerpsTradesCursorStateSchema","PerpsTradeIdSchema","PrivateKeySchema","isPrivateKey","PerpsCredentialsSchema","DEFAULT_PERPS_CREDENTIAL_EXPIRES_IN","CreatePerpsSessionRequestSchema","ResumePerpsSessionRequestSchema","OpenPerpsSessionRequestSchema","RevokePerpsCredentialsRequestInputSchema","RevokePerpsCredentialsRequestSchema","PerpsBaseUnitAmountSchema","DepositToPerpsRequestSchema","WithdrawFromPerpsRequestSchema","PositivePerpsDecimalInputSchema","PerpsInternalTransferLabelSchema","TransferPerpsCollateralRequestSchema","OpenPerpsSessionError","RevokePerpsCredentialsError","PreparePerpsDepositError","DepositToPerpsError","WithdrawFromPerpsError","TransferPerpsCollateralError","openPerpsSession","credentials","resumePerpsCredentials","createPerpsCredentials","revokePerpsCredentials","signedOp","signPerpsOwnerOp","PerpsDeleteProxyResponseSchema","preparePerpsDeposit","sendPerpsDepositTransaction","depositToPerps","withdrawFromPerps","signPerpsWithdraw","PerpsWithdrawResponseSchema","transferPerpsCollateral","assertPerpsOwnerSigner","PerpsInternalTransferResponseSchema","privateKey","createPerpsProxyPrivateKey","proxy","addressFromPrivateKey","signPerpsCreateProxy","PerpsCreateProxyResponseSchema","validatePerpsCredentials","assertPerpsCredentialsKeyMatchesProxy","perpsCredentialHeaders","proxyKey","createPerpsCreateProxyTypedDataPayload","createPerpsWithdrawTypedDataPayload","expectPrivateKey","Address","privateKeyAddress","FetchPerpsRegistrationRequestSchema","FetchPerpsRegistrationError","fetchPerpsRegistration","PerpsRegistrationResponseSchema","ListPositionsRequestSchema","PositionStatusSchema","PositionFilterTypeSchema","PositionSortBySchema","PositionStatus","ListPositionsError","listPositions","ListPositionsResponseSchema","ComboPositionStatusFilterSchema","ComboPositionStatusSchema","statuses","ComboPositionStatus","ListComboPositionsRequestSchema","ComboPositionSortBySchema","ListComboPositionsRequestSchemaChecked","ListComboPositionsError","listComboPositions","ListComboPositionsResponseSchema","FetchPortfolioValueRequestSchema","FetchPortfolioValueError","fetchPortfolioValue","FetchPortfolioValueResponseSchema","FetchUserStatsRequestSchema","FetchUserStatsError","fetchUserStats","FetchUserStatsResponseSchema","FetchUserPnlRequestSchema","UserPnlIntervalSchema","UserPnlFidelitySchema","FetchUserPnlError","fetchUserPnl","FetchUserPnlResponseSchema","FetchUserVolumeRequestSchema","FetchUserVolumeError","fetchUserVolume","FetchUserVolumeResponseSchema","DownloadAccountingSnapshotRequestSchema","DownloadAccountingSnapshotError","downloadAccountingSnapshot","normalizeMarketPositionContext","isPresent","yesTokenId","noTokenId","yesPositionId","noPositionId","assertProtocolV2Unavailable","PrepareSplitPositionError","PrepareSplitMarketPositionRequestSchema","PrepareSplitMarketPositionError","prepareSplitMarketPosition","resolveMarketPositionContext","sendSplitPositionTransaction","PrepareSplitComboPositionRequestSchema","PrepareSplitComboPositionError","prepareSplitComboPosition","prepareConditionCall","combo","splitCall","PrepareSplitPositionRequestSchema","prepareSplitPosition","SplitPositionError","SplitMarketPositionError","splitMarketPosition","SplitComboPositionError","splitComboPosition","splitPosition","PrepareMergePositionsError","PrepareMergeMarketPositionRequestSchema","PrepareMergeMarketPositionError","prepareMergeMarketPosition","balances","resolveMergeAmount","sendMergePositionsTransaction","PrepareMergeComboPositionRequestSchema","PrepareMergeComboPositionError","prepareMergeComboPosition","mergeCall","PrepareMergePositionsRequestSchema","prepareMergePositions","MergePositionsError","MergeMarketPositionError","mergeMarketPosition","MergeComboPositionError","mergeComboPosition","mergePositions","PrepareRedeemPositionsError","PrepareRedeemMarketPositionsByConditionIdRequestSchema","PrepareRedeemMarketPositionsByMarketIdRequestSchema","MarketIdSchema","PrepareRedeemMarketPositionsRequestSchema","PrepareRedeemMarketPositionsError","prepareRedeemMarketPositions","prepareMarketRedemptionCalls","sendRedeemPositionCalls","PrepareRedeemPositionRequestSchema","prepareRedeemPosition","balance","sendRedeemPositionsTransaction","PrepareRedeemComboPositionError","prepareRedeemComboPosition","PrepareRedeemPositionsRequestSchema","prepareRedeemPositions","RedeemPositionsError","redeemPositions","firstCall","remainingCalls","nextCall","parseMarketId","marketContext","yesBalance","noBalance","requestedAmount","maxAmount","calculateMaxMergeAmount","yesAmount","noAmount","FetchPublicProfileRequestSchema","FetchPublicProfileError","fetchPublicProfile","PublicProfileSchema","RfqQuoteRejectedError","MarketSdkError","RfqQuoteError","ConnectionLostError","RfqCancelQuoteRejectedError","RfqCancelQuoteError","RfqConfirmationRejectedError","RfqConfirmationError","OpenRfqSessionError","openRfqSession","assertCombosSupportedForAccount","BUILDER_RFQ_REQUESTS_PATH","CREATE_QUOTE_TIMEOUT_MS","ACCEPT_QUOTE_TIMEOUT_MS","ACCEPT_OUTCOME_TIMEOUT_MS","ACCEPT_OUTCOME_POLL_INTERVAL_MS","DEFAULT_FILL_TIMEOUT_MS","DEFAULT_FILL_POLL_INTERVAL_MS","RfqRequestRejectedError","toRfqRequestRejection","toRfqRejectionCode","RFQ_REJECTION_CODES","RfqRejectionCode","assertBuilderAuthorization","ComboLegPositionIdsSchema","leftPositionId","rightPositionId","ComboAmountToBaseUnitsSchema","scaledValue","scaleE6DecimalParts","RequestComboQuoteParamsSchema","RfqSide","RequestComboQuoteError","requestComboQuote","RfqDirection","RfqRequestedSizeUnit","BuilderRfqCreateResponseSchema","assertBuilderRfqResponseMatchesRequest","direction","quote","toQuoteUnavailableResult","echoed","mismatchedFields","RfqKnownErrorCode","ComboQuoteUnavailableReason","AcceptComboQuoteDirectionSchema","AcceptComboQuoteParamsSchema","toBuilderCode","toBaseUnits","toRfqQuoteId","toRfqId","AcceptComboQuoteError","acceptComboQuote","createComboAcceptanceOrder","signedOrder","signComboAcceptanceOrder","postAcceptance","BuilderRfqStatusResponseSchema","expired","toAcceptanceExpiredResult","takerOrderHash","RfqStatus","fetchRfqStatus","toComboAcceptFailureReason","rfqId","ComboAcceptFailureReason","generateComboAcceptanceOrderSalt","WaitForComboFillParamsSchema","WaitForComboFillError","waitForComboFill","pollingIntervalMs","RfqExecutionStatus","FetchRfqStatusParamsSchema","FetchRfqStatusError","SearchSort","MAX_SEARCH_PAGE","SearchRequestSchema","SearchError","search","PublicSearchResponseSchema","toSearchResults","ListSeriesRequestSchema","FetchSeriesRequestSchema","ListSeriesError","listSeries","ListSeriesResponseSchema","series","FetchSeriesError","fetchSeries","SeriesSchema","assertSessionSignerOperationAccepted","RelayerAuthorizeSessionSignerStatus","RelayerRevokeSessionSignerStatus","FetchSessionKeysError","fetchSessionKeys","assertOwnerDepositWallet","ActiveSessionSignersResponseSchema","DEFAULT_SESSION_KEY_SCOPES","SessionKeyKnownScope","SESSION_KEY_LIFETIME_SECONDS","SESSION_KEY_RELAYER_SUBMISSION_TIMEOUT_MS","AuthorizeSessionKeyRequestSchema","SessionSignerScopeSchema","AuthorizeSessionKeyError","authorizeSessionKey","parsedRequest","signedBatch","RelayerAuthorizeSessionSignerResponseSchema","waitForAuthorizedSessionKey","RevokeSessionKeyRequestSchema","RevokeSessionKeyError","revokeSessionKey","RelayerRevokeSessionSignerResponseSchema","waitForRevokedSessionKey","sessionKey","expected","haveSameScopes","rightScopes","ListSportsError","listSports","ListSportsMetadataResponseSchema","FetchSportsMarketTypesError","fetchSportsMarketTypes","SportsMarketTypesResponseSchema","SymbolSchema","CryptoSymbolSchema","PriceEventType","PriceSubscriptionSchema","PriceProvider","parsePriceSubscription","spec","SubscribeError","SubscriptionTopic","SubscriptionTopicSchema","LegacyTwapSubscriptionSchema","MarketSubscriptionSchema","subscribe","subscriptions","validatedSubscriptions","subscription","subscribeOne","handles","failure","handle","mergedSubscription","children","closing","close","iterable","merge","ListTagsRequestSchema","FetchTagRequestSchema","RelatedTagsByIdRequestSchema","RelatedTagsBySlugRequestSchema","RelatedTagResourcesByIdRequestSchema","RelatedTagResourcesBySlugRequestSchema","ListTagsError","listTags","ListTagsResponseSchema","tags","FetchTagError","fetchTag","TagSchema","FetchRelatedTagsError","fetchRelatedTags","ListRelatedTagsResponseSchema","FetchRelatedTagResourcesError","fetchRelatedTagResources","ListRelatedTagResourcesResponseSchema","ListTeamsRequestSchema","ListTeamsError","listTeams","ListTeamsResponseSchema","teams","AssetSelectorsSchema","values","ConditionSelectorsSchema","FetchTokenReferencesRequestSchema","FetchTokenReferencesError","fetchTokenReferences","FetchTokenReferencesResponseSchema","PrepareErc20TransferRequestSchema","PrepareErc20TransferError","prepareErc20Transfer","sendErc20TransferTransaction","TransferErc20Error","transferErc20"],"mappings":"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","file":"chunk-3QTVWIZS.js","sourcesContent":["import type { z } from 'zod';\nimport { UserInputError } from './errors';\n\n/**\n * Parses consumer input and throws `UserInputError` when validation fails.\n */\nexport function parseUserInput<TOutput>(\n input: unknown,\n schema: z.ZodType<TOutput>,\n): TOutput {\n const result = schema.safeParse(input);\n\n if (result.success) {\n return result.data;\n }\n\n throw UserInputError.fromZodError(result.error);\n}\n","import { type PaginationCursor, toPaginationCursor } from '@kuest/bindings';\nimport { z } from 'zod';\nimport {\n PaginationLimitError,\n UnexpectedResponseError,\n UserInputError,\n} from './errors';\n\nexport const PageSizeSchema = z.number().int().positive();\n\nexport type Page<T> = {\n items: T;\n /**\n * Whether another page may be available.\n *\n * On methods without a server-provided continuation signal, a full page\n * reports `true` and the follow-up request returns an empty final page when\n * the collection ended exactly on a page boundary.\n *\n * A depth-limited page can report `true` alongside `limitReached`.\n * Automatic iteration stops there; explicitly following its cursor throws\n * {@link PaginationLimitError} before sending a request.\n *\n * Automatic iteration throws {@link UnexpectedResponseError} if a continuing\n * page carries no cursor or repeats one already requested in that walk,\n * after yielding the pages fetched so far.\n */\n hasMore: boolean;\n /**\n * Whether the listing's supported depth prevents fetching another page.\n * Automatic iteration yields this page, then stops normally. This signals\n * that completeness cannot be established, not that more items definitely\n * exist. Absent or false when no depth limit stopped continuation.\n */\n limitReached?: boolean;\n nextCursor?: PaginationCursor;\n /** Total number of matching items across all pages. Only present when the service reports one. */\n totalCount?: number;\n};\n\nexport type Paginated<T> = AsyncIterable<Page<T>> & {\n firstPage(): Promise<Page<T>>;\n from(cursor?: PaginationCursor): Paginated<T>;\n};\n\n/** @internal */\nexport function paginate<T>(\n fetchPage: (cursor?: PaginationCursor) => Promise<Page<T>>,\n initialCursor?: PaginationCursor,\n emptyItems: T = [] as T,\n): Paginated<T> {\n function createEmptyPaginator(): Paginated<T> {\n return {\n async firstPage() {\n return {\n items: emptyItems,\n hasMore: false,\n };\n },\n from() {\n return createEmptyPaginator();\n },\n async *[Symbol.asyncIterator]() {},\n };\n }\n\n function createPaginator(cursor = initialCursor): Paginated<T> {\n return {\n async firstPage() {\n return fetchPage(cursor);\n },\n from(nextCursor) {\n if (nextCursor === undefined) {\n return createEmptyPaginator();\n }\n\n return createPaginator(nextCursor);\n },\n async *[Symbol.asyncIterator]() {\n let currentCursor = cursor;\n // Cursors requested in this walk. A continuing page without a cursor\n // would restart at the first page, and a repeated one would loop.\n const requested = new Set<PaginationCursor>(\n cursor === undefined ? [] : [cursor],\n );\n\n while (true) {\n const page = await fetchPage(currentCursor);\n\n yield page;\n\n if (!page.hasMore || page.limitReached) {\n return;\n }\n\n if (page.nextCursor === undefined) {\n throw new UnexpectedResponseError(\n 'Paginated response reported more items without a next cursor.',\n );\n }\n\n if (requested.has(page.nextCursor)) {\n throw new UnexpectedResponseError(\n 'Paginated response repeated a cursor that was already requested.',\n );\n }\n\n requested.add(page.nextCursor);\n currentCursor = page.nextCursor;\n }\n },\n };\n }\n\n return createPaginator();\n}\n\n/**\n * Encodes SDK-owned cursor state as an opaque pagination cursor.\n *\n * @internal\n */\nexport function encodeCursorState(state: unknown): PaginationCursor {\n return toPaginationCursor(encodeBase64(JSON.stringify(state)));\n}\n\n/**\n * Decodes an SDK-owned cursor and validates its state against `schema`.\n * Anything that is not such a cursor fails as user input.\n *\n * @internal\n */\nexport function decodeCursorState<T>(\n cursor: PaginationCursor,\n schema: z.ZodType<T>,\n message = 'Invalid pagination cursor',\n): T {\n try {\n return schema.parse(JSON.parse(decodeBase64(cursor)));\n } catch (error) {\n throw new UserInputError(message, { cause: error });\n }\n}\n\n/**\n * Reads the JSON state of an SDK-owned cursor, or `undefined` when the value\n * was not minted by {@link encodeCursorState}, such as a raw service token or\n * a corrupted string. Callers decide what a foreign cursor means for them.\n *\n * @internal\n */\nexport function readCursorPayload(cursor: PaginationCursor): unknown {\n try {\n return JSON.parse(decodeBase64(cursor));\n } catch {\n return undefined;\n }\n}\n\n// Cursor state may carry query text, so it is encoded as UTF-8 bytes; ASCII\n// payloads produce the same base64 as before, keeping saved cursors valid.\nfunction encodeBase64(text: string): string {\n return btoa(String.fromCharCode(...new TextEncoder().encode(text)));\n}\n\nfunction decodeBase64(cursor: string): string {\n return new TextDecoder().decode(\n Uint8Array.from(atob(cursor), (char) => char.charCodeAt(0)),\n );\n}\n\n/** @internal */\ntype OffsetCursorState = {\n offset: number;\n pageSize: number;\n};\n\n// Strict so that a cursor of another shape is never mistaken for offset state.\nconst OffsetCursorStateSchema = z.strictObject({\n offset: z.number().int().min(0),\n pageSize: PageSizeSchema,\n});\n\n/** @internal */\nexport function encodeOffsetCursor(state: OffsetCursorState): PaginationCursor {\n return encodeCursorState(OffsetCursorStateSchema.parse(state));\n}\n\n/** @internal */\nexport type OffsetCursorLimits = {\n /** Largest cursor position the service serves; a cursor past it fails before any request. */\n maxOffset?: number;\n /** Largest page size the service serves; a cursor carrying more fails before any request. */\n maxPageSize?: number;\n};\n\n/** @internal */\nexport function decodeOffsetCursor(\n cursor: PaginationCursor | undefined,\n pageSize: number,\n limits: OffsetCursorLimits = {},\n): OffsetCursorState {\n if (cursor === undefined) {\n return {\n offset: 0,\n pageSize,\n };\n }\n\n return offsetCursorFromPayload(\n decodeCursorState(cursor, z.unknown()),\n limits,\n );\n}\n\n/**\n * Validates an already-read cursor payload as offset state and applies the\n * listing's limits. Use with {@link readCursorPayload} when a listing accepts\n * more than one cursor shape, so the cursor is decoded once.\n *\n * @internal\n */\nexport function offsetCursorFromPayload(\n payload: unknown,\n limits: OffsetCursorLimits = {},\n): OffsetCursorState {\n const parsed = OffsetCursorStateSchema.safeParse(payload);\n\n if (!parsed.success) {\n throw new UserInputError('Invalid pagination cursor', {\n cause: parsed.error,\n });\n }\n\n const state = parsed.data;\n\n // A cursor carries the offset and page size it was minted with, so both are\n // re-checked here rather than trusting the request's page size alone.\n if (limits.maxPageSize !== undefined && state.pageSize > limits.maxPageSize) {\n throw new UserInputError(\n `Pagination cursor page size must be at most ${limits.maxPageSize}`,\n );\n }\n\n if (limits.maxOffset !== undefined && state.offset > limits.maxOffset) {\n throw new PaginationLimitError(\n `Pagination reached this listing's supported depth limit (${limits.maxOffset}); whether more items exist cannot be established.`,\n );\n }\n\n return state;\n}\n\n// A service's keyset token usually binds only the sort position. Replayed\n// under different filters or the opposite direction it is accepted and seeks\n// the wrong rows, so SDK cursors carry a fingerprint of the query they were\n// minted for and refuse to continue a different one.\nconst KeysetCursorStateSchema = z.object({\n kind: z.literal('keyset'),\n fingerprint: z.string(),\n cursor: z.string().min(1),\n});\n\n/**\n * Wraps a service keyset token together with the query it continues.\n *\n * @internal\n */\nexport function encodeKeysetCursor(\n cursor: PaginationCursor,\n query: object,\n): PaginationCursor {\n return encodeCursorState({\n kind: 'keyset',\n fingerprint: fingerprintQuery(query),\n cursor,\n });\n}\n\n/**\n * Returns the service token inside an SDK keyset cursor payload when it was\n * minted for `query`, or `undefined` when the payload is not a keyset cursor.\n * A keyset cursor minted for a different query fails as user input.\n *\n * @internal\n */\nexport function keysetCursorFromPayload(\n payload: unknown,\n query: object | undefined,\n): PaginationCursor | undefined {\n if (!isKeysetCursorPayload(payload)) {\n return undefined;\n }\n\n // Anything that claims to be a keyset cursor is held to its shape, so a\n // damaged envelope is never forwarded as a service token.\n const parsed = KeysetCursorStateSchema.safeParse(payload);\n\n if (!parsed.success) {\n throw new UserInputError('Invalid pagination cursor', {\n cause: parsed.error,\n });\n }\n\n if (\n query === undefined ||\n parsed.data.fingerprint !== fingerprintQuery(query)\n ) {\n throw new UserInputError(\n 'Pagination cursor was created for a different query',\n );\n }\n\n return toPaginationCursor(parsed.data.cursor);\n}\n\nfunction isKeysetCursorPayload(payload: unknown): boolean {\n return (\n typeof payload === 'object' &&\n payload !== null &&\n 'kind' in payload &&\n payload.kind === 'keyset'\n );\n}\n\nfunction fingerprintQuery(query: object): string {\n return JSON.stringify(canonicalize(query));\n}\n\n// Key order and absent fields must not change the fingerprint.\nfunction canonicalize(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.map(canonicalize);\n }\n\n if (typeof value === 'object' && value !== null) {\n return Object.fromEntries(\n Object.entries(value)\n .filter(([, entry]) => entry !== undefined)\n .sort(([left], [right]) => (left < right ? -1 : left > right ? 1 : 0))\n .map(([key, entry]) => [key, canonicalize(entry)]),\n );\n }\n\n return value;\n}\n","import { z } from 'zod';\nimport { RequestAbortedError } from './errors';\nimport { parseUserInput } from './input';\n\n/** @internal */\nexport const DEFAULT_REQUEST_TIMEOUT_MS = 30_000;\n\n/**\n * A Fetch-compatible function used for SDK HTTP requests.\n *\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type Fetch = (\n input: RequestInfo | URL,\n init?: RequestInit,\n) => Promise<Response>;\n\n/**\n * Controls one data read operation, including subsequent pages.\n *\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type RequestOptions = {\n /**\n * Cancels this operation's requests and retry waits.\n *\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\n signal?: AbortSignal;\n /**\n * Timeout in milliseconds for each individual HTTP request attempt until\n * response headers arrive, or `false` to disable it. Defaults to 30 seconds.\n * This is not a total deadline for an SDK method. Each underlying request\n * (including each page) and each permitted retry receives a fresh timeout.\n * Multiple requests, retries, and retry backoff can make the SDK operation\n * take longer than this value.\n * The SDK does not retry timeout errors, even when `retries` is greater than 0.\n * The timeout excludes header resolution, hooks, retry waits, and response\n * body download/parsing.\n *\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\n timeout?: number | false;\n /**\n * Optional retries after the first attempt. Must be an integer from 0 to 5.\n * Transport failures and rate limits share this budget for each request;\n * every pagination request gets a fresh budget. Set 0 when the caller owns retries.\n * Workflow recovery is unaffected.\n *\n * @defaultValue 2\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\n retries?: number;\n};\n\nconst ReadRetryOptionsSchema = z.object({\n retries: z.number().int().min(0).max(5).default(2),\n});\n\n/** Validates and snapshots controls at the read boundary. @internal */\nexport function parseRequestOptions(options: RequestOptions): RequestOptions {\n assertNotAborted(options.signal);\n const { retries } = parseUserInput(\n { retries: options.retries },\n ReadRetryOptionsSchema,\n );\n return { signal: options.signal, timeout: options.timeout, retries };\n}\n\n/** @internal */\nexport function assertNotAborted(signal?: AbortSignal): void {\n if (signal?.aborted) {\n throw new RequestAbortedError('Request aborted', { cause: signal.reason });\n }\n}\n\n/**\n * Stops awaiting work that may not itself support cancellation.\n * @internal\n */\nexport function withAbort<T>(\n promise: PromiseLike<T>,\n signal?: AbortSignal,\n): Promise<T> {\n if (signal === undefined) return Promise.resolve(promise);\n\n return new Promise<T>((resolve, reject) => {\n function cleanup() {\n signal?.removeEventListener('abort', abort);\n }\n function abort() {\n cleanup();\n reject(\n new RequestAbortedError('Request aborted', { cause: signal?.reason }),\n );\n }\n\n // Observe the original promise even if cancellation has already happened.\n // A late callback rejection must not become an unhandled rejection.\n Promise.resolve(promise).then(\n (value) => {\n cleanup();\n if (signal.aborted) abort();\n else resolve(value);\n },\n (error: unknown) => {\n cleanup();\n if (signal.aborted) abort();\n else reject(error);\n },\n );\n signal.addEventListener('abort', abort, { once: true });\n if (signal.aborted) abort();\n });\n}\n","import type { EvmAddress, HexString } from '@kuest/types';\nimport ky from 'ky';\nimport {\n RequestAbortedError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n} from './errors';\nimport {\n assertNotAborted,\n DEFAULT_REQUEST_TIMEOUT_MS,\n type Fetch,\n type RequestOptions,\n withAbort,\n} from './request-options';\n\nexport type EthCallRequest = {\n to: EvmAddress;\n data: HexString;\n};\n\nexport type EthEstimateGasRequest = {\n data?: HexString;\n from?: EvmAddress;\n gasPrice?: bigint;\n to: EvmAddress;\n value?: bigint;\n};\n\nexport type JsonRpcError = {\n code: number;\n message: string;\n data?: unknown;\n};\n\ntype JsonRpcSuccess<TResult> = {\n jsonrpc: '2.0';\n id: number;\n result: TResult;\n};\n\ntype JsonRpcFailure = {\n jsonrpc: '2.0';\n id: number | null;\n error: JsonRpcError;\n};\n\ntype JsonRpcResponse<TResult> = JsonRpcSuccess<TResult> | JsonRpcFailure;\n\nexport type JsonRpcClientConfig = {\n fetch?: Fetch;\n url: string;\n};\n\n/** @internal */\nexport class JsonRpcClient {\n readonly #fetch: Fetch | undefined;\n readonly #url: string;\n\n constructor({ fetch, url }: JsonRpcClientConfig) {\n this.#fetch = fetch;\n this.#url = url;\n }\n\n async ethCall(\n request: EthCallRequest,\n options?: RequestOptions,\n ): Promise<HexString> {\n const response = await this.#post<HexString>(\n {\n jsonrpc: '2.0',\n id: 1,\n method: 'eth_call',\n params: [{ to: request.to, data: request.data }, 'latest'],\n },\n options,\n );\n\n if ('error' in response) {\n throw new RequestRejectedError(\n `JSON-RPC eth_call failed: ${response.error.message}`,\n { cause: response.error, status: 200 },\n );\n }\n\n if (typeof response.result !== 'string') {\n throw new UnexpectedResponseError(\n 'Expected JSON-RPC eth_call result to be a hex string',\n );\n }\n\n if (!isRpcHexString(response.result)) {\n throw new UnexpectedResponseError(\n 'Expected JSON-RPC eth_call result to be a hex string',\n );\n }\n\n return response.result;\n }\n\n async ethCallBatch(\n requests: readonly EthCallRequest[],\n options?: RequestOptions,\n ): Promise<HexString[]> {\n if (requests.length === 0) {\n return [];\n }\n\n return this.#ethCallBatchWithSplit(requests, options);\n }\n\n async ethEstimateGas(\n request: EthEstimateGasRequest,\n options?: RequestOptions,\n ): Promise<bigint> {\n const call: Record<string, string> = { to: request.to };\n\n if (request.data !== undefined) {\n call.data = request.data;\n }\n\n if (request.from !== undefined) {\n call.from = request.from;\n }\n\n if (request.gasPrice !== undefined) {\n call.gasPrice = toRpcQuantity(request.gasPrice);\n }\n\n if (request.value !== undefined) {\n call.value = toRpcQuantity(request.value);\n }\n\n const response = await this.#post<HexString>(\n {\n jsonrpc: '2.0',\n id: 1,\n method: 'eth_estimateGas',\n params: [call],\n },\n options,\n );\n\n if ('error' in response) {\n throw new RequestRejectedError(\n `JSON-RPC eth_estimateGas failed: ${response.error.message}`,\n { cause: response.error, status: 200 },\n );\n }\n\n return BigInt(expectRpcHexResult(response.result, 'eth_estimateGas'));\n }\n\n async #ethCallBatchWithSplit(\n requests: readonly EthCallRequest[],\n options?: RequestOptions,\n ): Promise<HexString[]> {\n if (requests.length === 1) {\n return [await this.ethCall(requests[0] as EthCallRequest, options)];\n }\n\n try {\n return await this.#postEthCallBatch(requests, options);\n } catch (error) {\n if (!(error instanceof RequestRejectedError) || error.status < 500) {\n throw error;\n }\n\n const midpoint = Math.ceil(requests.length / 2);\n const [left, right] = await Promise.all([\n this.#ethCallBatchWithSplit(requests.slice(0, midpoint), options),\n this.#ethCallBatchWithSplit(requests.slice(midpoint), options),\n ]);\n\n return [...left, ...right];\n }\n }\n\n async #postEthCallBatch(\n requests: readonly EthCallRequest[],\n options?: RequestOptions,\n ): Promise<HexString[]> {\n const responses = await this.#postBatch<HexString>(\n requests.map((request, index) => ({\n jsonrpc: '2.0',\n id: index + 1,\n method: 'eth_call',\n params: [{ to: request.to, data: request.data }, 'latest'],\n })),\n options,\n );\n\n const responsesById = new Map<number, JsonRpcResponse<HexString>>();\n\n for (const response of responses) {\n if ('error' in response && response.id === null) {\n throw new RequestRejectedError(\n `JSON-RPC eth_call failed: ${response.error.message}`,\n { cause: response.error, status: 200 },\n );\n }\n\n if (response.id !== null) {\n responsesById.set(response.id, response);\n }\n }\n\n return requests.map((_, index) => {\n const id = index + 1;\n const response = responsesById.get(id);\n\n if (response === undefined) {\n throw new UnexpectedResponseError(\n 'Expected JSON-RPC batch response for every request',\n );\n }\n\n if ('error' in response) {\n throw new RequestRejectedError(\n `JSON-RPC eth_call failed: ${response.error.message}`,\n { cause: response.error, status: 200 },\n );\n }\n\n return expectRpcHexResult(response.result);\n });\n }\n\n async #post<TResult>(\n json: unknown,\n options?: RequestOptions,\n ): Promise<JsonRpcResponse<TResult>> {\n assertNotAborted(options?.signal);\n let response: Response;\n\n try {\n response = await withAbort(\n ky.post(this.#url, {\n fetch: this.#fetch,\n signal: options?.signal,\n timeout: options?.timeout ?? DEFAULT_REQUEST_TIMEOUT_MS,\n json,\n throwHttpErrors: false,\n }),\n options?.signal,\n );\n } catch (error) {\n if (error instanceof RequestAbortedError) throw error;\n throw TransportError.fromError(error);\n }\n\n if (!response.ok) {\n throw new RequestRejectedError(\n `JSON-RPC request to ${this.#url} failed with status ${response.status}`,\n { status: response.status },\n );\n }\n\n let body: unknown;\n\n try {\n body = await withAbort(response.json(), options?.signal);\n } catch (error) {\n if (error instanceof RequestAbortedError) throw error;\n throw new UnexpectedResponseError(\n 'Expected JSON-RPC response body to be JSON',\n { cause: error },\n );\n }\n\n if (!isJsonRpcResponse<TResult>(body)) {\n throw new UnexpectedResponseError('Unexpected JSON-RPC response shape');\n }\n\n return body;\n }\n\n async #postBatch<TResult>(\n json: unknown,\n options?: RequestOptions,\n ): Promise<JsonRpcResponse<TResult>[]> {\n assertNotAborted(options?.signal);\n let response: Response;\n\n try {\n response = await withAbort(\n ky.post(this.#url, {\n fetch: this.#fetch,\n signal: options?.signal,\n timeout: options?.timeout ?? DEFAULT_REQUEST_TIMEOUT_MS,\n json,\n throwHttpErrors: false,\n }),\n options?.signal,\n );\n } catch (error) {\n if (error instanceof RequestAbortedError) throw error;\n throw TransportError.fromError(error);\n }\n\n if (!response.ok) {\n throw new RequestRejectedError(\n `JSON-RPC request to ${this.#url} failed with status ${response.status}`,\n { status: response.status },\n );\n }\n\n let body: unknown;\n\n try {\n body = await withAbort(response.json(), options?.signal);\n } catch (error) {\n if (error instanceof RequestAbortedError) throw error;\n throw new UnexpectedResponseError(\n 'Expected JSON-RPC response body to be JSON',\n { cause: error },\n );\n }\n\n if (\n !Array.isArray(body) ||\n !body.every((value) => isJsonRpcResponse<TResult>(value))\n ) {\n throw new UnexpectedResponseError('Unexpected JSON-RPC response shape');\n }\n\n return body;\n }\n}\n\n/** @internal */\nexport function isJsonRpcContractRevert(error: unknown): boolean {\n if (\n !(error instanceof RequestRejectedError) ||\n !isJsonRpcError(error.cause)\n ) {\n return false;\n }\n\n const message = [\n error.cause.message,\n stringifyJsonRpcErrorData(error.cause.data),\n ]\n .join(' ')\n .toLowerCase();\n\n return (\n (error.cause.code === 3 ||\n error.cause.code === -32_000 ||\n error.cause.code === -32_003 ||\n error.cause.code === -32_015 ||\n error.cause.code === -32_603) &&\n (message.includes('execution reverted') ||\n message.includes('revert') ||\n message.includes('invalid opcode'))\n );\n}\n\nfunction isJsonRpcResponse<TResult>(\n value: unknown,\n): value is JsonRpcResponse<TResult> {\n if (!isRecord(value) || value.jsonrpc !== '2.0') {\n return false;\n }\n\n if ('error' in value) {\n return isJsonRpcError(value.error);\n }\n\n return 'result' in value;\n}\n\nfunction isJsonRpcError(value: unknown): value is JsonRpcError {\n return (\n isRecord(value) &&\n typeof value.code === 'number' &&\n typeof value.message === 'string'\n );\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null;\n}\n\nfunction isRpcHexString(value: string): value is HexString {\n return /^0x[a-fA-F0-9]*$/.test(value);\n}\n\nfunction expectRpcHexResult(value: unknown, method = 'eth_call'): HexString {\n if (typeof value !== 'string' || !isRpcHexString(value)) {\n throw new UnexpectedResponseError(\n `Expected JSON-RPC ${method} result to be a hex string`,\n );\n }\n\n return value;\n}\n\nfunction toRpcQuantity(value: bigint): HexString {\n return `0x${value.toString(16)}` as HexString;\n}\n\nfunction stringifyJsonRpcErrorData(data: unknown): string {\n if (data === undefined) {\n return '';\n }\n\n if (typeof data === 'string') {\n return data;\n }\n\n try {\n return JSON.stringify(data);\n } catch {\n return '';\n }\n}\n","import { SignatureType } from '@kuest/bindings/clob';\nimport { WalletType } from '@kuest/bindings/gamma';\nimport type { HexString } from '@kuest/types';\nimport {\n type Erc1271Signature,\n type EvmAddress,\n type EvmSignature,\n expectEvmAddress,\n expectHexString,\n expectSessionSignerSignature,\n isSameEvmAddress,\n type SessionSignerSignature,\n ZERO_ADDRESS,\n} from '@kuest/types';\nimport { AbiParameters, Bytes, ContractAddress, Hash } from 'ox';\nimport type { EnvironmentConfig, WalletDerivationConfig } from './environments';\nimport { UserInputError } from './errors';\nimport type { RequestOptions } from './request-options';\nimport type { JsonRpcClient } from './rpc';\nimport { isJsonRpcContractRevert } from './rpc';\n\n/** Relationship between the authenticated signer and the active account wallet. */\nexport enum SignerType {\n /** Signer owns or deterministically controls the active account wallet. */\n OWNER = 'OWNER',\n /** Signer uses the Deposit Wallet session-signature path. */\n SESSION_KEY = 'SESSION_KEY',\n}\n\nexport type AccountIdentity = {\n /** Authenticated EOA that signs API authentication, orders, and wallet operations. */\n signer: EvmAddress;\n /** Relationship between the authenticated signer and the active account wallet. */\n signerType: SignerType;\n /** Active account/funder wallet used for balances, positions, and execution. */\n wallet: EvmAddress;\n /** Wallet classification used for order signatures and transaction routing. */\n walletType: WalletType;\n};\n\nconst BYTES32_ZERO =\n '0x0000000000000000000000000000000000000000000000000000000000000000' satisfies HexString;\nconst SESSION_SIGNER_MAGIC_BYTES =\n '0x6492649264926492649264926492649264926492649264926492649264926492' satisfies HexString;\n\n/** @internal */\nexport function resolveAccountIdentity(\n environment: EnvironmentConfig,\n signer: EvmAddress,\n wallet: EvmAddress,\n): AccountIdentity {\n const classification = classifyAccount(environment, signer, wallet);\n\n return { signer, wallet, ...classification };\n}\n\n/** @internal */\nexport function toSignatureType(walletType: WalletType): SignatureType {\n switch (walletType) {\n case WalletType.EOA:\n return SignatureType.EOA;\n case WalletType.POLY_PROXY:\n return SignatureType.POLY_PROXY;\n case WalletType.GNOSIS_SAFE:\n return SignatureType.POLY_GNOSIS_SAFE;\n case WalletType.DEPOSIT_WALLET:\n return SignatureType.POLY_1271;\n }\n}\n\n/** @internal */\nexport type OrderIdentity = {\n maker: EvmAddress;\n signatureType: SignatureType;\n signer: EvmAddress;\n};\n\n/** @internal */\nexport function resolveOrderIdentity(account: AccountIdentity): OrderIdentity {\n if (account.walletType !== WalletType.DEPOSIT_WALLET) {\n throw new UserInputError(\n 'SDK orders require a Deposit Wallet (signature type 3).',\n );\n }\n const signatureType = toSignatureType(account.walletType);\n\n return {\n maker: account.wallet,\n signatureType,\n signer:\n signatureType === SignatureType.POLY_1271\n ? account.wallet\n : account.signer,\n };\n}\n\n/** @internal */\nexport function wrapDepositWalletSignature(\n account: AccountIdentity,\n signature: EvmSignature | Erc1271Signature,\n): EvmSignature | Erc1271Signature | SessionSignerSignature {\n return account.signerType === SignerType.OWNER\n ? signature\n : createSessionSignerSignature(account.signer, signature);\n}\n\nfunction createSessionSignerSignature(\n sessionSigner: EvmAddress,\n signature: HexString,\n): SessionSignerSignature {\n const signerId = expectHexString(\n `0x${sessionSigner.slice(2).padStart(64, '0')}`,\n );\n const payload = AbiParameters.encode(\n [{ type: 'bytes32' }, { type: 'bytes32' }, { type: 'bytes' }],\n [signerId, BYTES32_ZERO, signature],\n );\n\n return expectSessionSignerSignature(\n `${payload}${SESSION_SIGNER_MAGIC_BYTES.slice(2)}`,\n );\n}\n\nconst PROXY_BYTECODE_TEMPLATE =\n '3d3d606380380380913d393d73%s5af4602a57600080fd5b602d8060366000396000f3363d3d373d3d3d363d73%s5af43d82803e903d91602b57fd5bf352e831dd00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000';\n\nfunction proxyWalletBytecodeHash(config: WalletDerivationConfig): HexString {\n const bytecode = PROXY_BYTECODE_TEMPLATE.replace(\n '%s',\n config.proxyFactory.slice(2).toLowerCase(),\n ).replace('%s', config.proxyImplementation.slice(2).toLowerCase());\n\n return expectHexString(Hash.keccak256(`0x${bytecode}`));\n}\n\n/** @internal */\nexport function deriveProxyWalletAddress(\n signer: EvmAddress,\n config: WalletDerivationConfig,\n): EvmAddress {\n return expectEvmAddress(\n ContractAddress.fromCreate2({\n bytecodeHash: proxyWalletBytecodeHash(config),\n from: config.proxyFactory,\n salt: Hash.keccak256(AbiParameters.encodePacked(['address'], [signer])),\n }),\n );\n}\n\n/** @internal */\nexport function deriveSafeWalletAddress(\n signer: EvmAddress,\n config: WalletDerivationConfig,\n): EvmAddress {\n return expectEvmAddress(\n ContractAddress.fromCreate2({\n bytecodeHash: config.safeInitCodeHash,\n from: config.safeFactory,\n salt: Hash.keccak256(\n AbiParameters.encode([{ name: 'address', type: 'address' }], [signer]),\n ),\n }),\n );\n}\n\nconst ERC1967_CONST1 =\n '0xcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f3';\nconst ERC1967_CONST2 =\n '0x5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076';\nconst ERC1967_PREFIX = 0x61003d3d8160233d3973n;\n\n/** @internal */\nexport function deriveUupsDepositWalletAddress(\n signer: EvmAddress,\n config: WalletDerivationConfig,\n): EvmAddress {\n const walletId = expectHexString(`0x${signer.slice(2).padStart(64, '0')}`);\n const args = AbiParameters.encode(\n [{ type: 'address' }, { type: 'bytes32' }],\n [config.depositWalletFactory, walletId],\n );\n\n return expectEvmAddress(\n ContractAddress.fromCreate2({\n bytecodeHash: depositWalletInitCodeHash(\n config.depositWalletImplementation,\n args,\n ),\n from: config.depositWalletFactory,\n salt: Hash.keccak256(args),\n }),\n );\n}\n\nconst ERC1967_BEACON_CONST1 =\n '0xb3582b35133d50545afa5036515af43d6000803e604d573d6000fd5b3d6000f3';\nconst ERC1967_BEACON_CONST2 =\n '0x1b60e01b36527fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6c';\nconst ERC1967_BEACON_CONST3 =\n '0x60195155f3363d3d373d3d363d602036600436635c60da';\nconst ERC1967_BEACON_PREFIX = 0x6100523d8160233d3973n;\nconst FACTORY_BEACON_SELECTOR: HexString = '0x49493a4d';\n\n/** @internal */\nexport function deriveBeaconDepositWalletAddress(\n signer: EvmAddress,\n config: WalletDerivationConfig,\n): EvmAddress {\n const walletId = expectHexString(`0x${signer.slice(2).padStart(64, '0')}`);\n const args = AbiParameters.encode(\n [{ type: 'address' }, { type: 'bytes32' }],\n [config.depositWalletFactory, walletId],\n );\n\n return expectEvmAddress(\n ContractAddress.fromCreate2({\n bytecodeHash: depositWalletBeaconInitCodeHash(\n config.depositWalletBeacon,\n args,\n ),\n from: config.depositWalletFactory,\n salt: Hash.keccak256(args),\n }),\n );\n}\n\nfunction depositWalletInitCodeHash(\n implementation: EvmAddress,\n args: HexString,\n): HexString {\n const argsByteLength = BigInt((args.length - 2) / 2);\n const prefix = ERC1967_PREFIX + (argsByteLength << 56n);\n\n return expectHexString(\n Hash.keccak256(\n Bytes.concat(\n Bytes.fromNumber(prefix, { size: 10 }),\n Bytes.fromHex(implementation),\n Bytes.fromHex('0x6009'),\n Bytes.fromHex(ERC1967_CONST2),\n Bytes.fromHex(ERC1967_CONST1),\n Bytes.fromHex(args),\n ),\n { as: 'Hex' },\n ),\n );\n}\n\nfunction depositWalletBeaconInitCodeHash(\n beacon: EvmAddress,\n args: HexString,\n): HexString {\n const argsByteLength = BigInt((args.length - 2) / 2);\n const prefix = ERC1967_BEACON_PREFIX + (argsByteLength << 56n);\n\n return expectHexString(\n Hash.keccak256(\n Bytes.concat(\n Bytes.fromNumber(prefix, { size: 10 }),\n Bytes.fromHex(beacon),\n Bytes.fromHex(ERC1967_BEACON_CONST3),\n Bytes.fromHex(ERC1967_BEACON_CONST2),\n Bytes.fromHex(ERC1967_BEACON_CONST1),\n Bytes.fromHex(args),\n ),\n { as: 'Hex' },\n ),\n );\n}\n\n/** @internal */\nexport async function getDepositWalletFactoryBeacon(\n rpc: JsonRpcClient,\n factory: EvmAddress,\n options?: RequestOptions,\n): Promise<EvmAddress> {\n try {\n const data = await rpc.ethCall(\n {\n to: factory,\n data: FACTORY_BEACON_SELECTOR,\n },\n options,\n );\n\n return decodeAddressReturnData(data);\n } catch (error) {\n if (isJsonRpcContractRevert(error)) {\n return ZERO_ADDRESS;\n }\n\n throw error;\n }\n}\n\n/** @internal */\nexport async function isBeaconDepositWalletFactory(\n rpc: JsonRpcClient,\n factory: EvmAddress,\n options?: RequestOptions,\n): Promise<boolean> {\n const beacon = await getDepositWalletFactoryBeacon(rpc, factory, options);\n\n return !isSameEvmAddress(beacon, ZERO_ADDRESS);\n}\n\n/** @internal */\nexport async function deriveCurrentDepositWalletAddress(\n rpc: JsonRpcClient,\n signer: EvmAddress,\n config: WalletDerivationConfig,\n options?: RequestOptions,\n): Promise<EvmAddress> {\n if (\n await isBeaconDepositWalletFactory(\n rpc,\n config.depositWalletFactory,\n options,\n )\n ) {\n return deriveBeaconDepositWalletAddress(signer, config);\n }\n\n return deriveUupsDepositWalletAddress(signer, config);\n}\n\nfunction decodeAddressReturnData(data: HexString): EvmAddress {\n if (data.length < 66) {\n return ZERO_ADDRESS;\n }\n\n return expectEvmAddress(`0x${data.slice(-40)}`);\n}\n\ntype AccountClassification = {\n signerType: SignerType;\n walletType: WalletType;\n};\n\nfunction classifyAccount(\n environment: EnvironmentConfig,\n signer: EvmAddress,\n wallet: EvmAddress,\n): AccountClassification {\n if (isSameEvmAddress(wallet, signer)) {\n return {\n signerType: SignerType.OWNER,\n walletType: WalletType.EOA,\n };\n }\n\n const config = environment.walletDerivation;\n\n if (\n isSameEvmAddress(wallet, deriveBeaconDepositWalletAddress(signer, config))\n ) {\n return {\n signerType: SignerType.OWNER,\n walletType: WalletType.DEPOSIT_WALLET,\n };\n }\n\n if (\n isSameEvmAddress(wallet, deriveUupsDepositWalletAddress(signer, config))\n ) {\n return {\n signerType: SignerType.OWNER,\n walletType: WalletType.DEPOSIT_WALLET,\n };\n }\n\n if (isSameEvmAddress(wallet, deriveSafeWalletAddress(signer, config))) {\n return {\n signerType: SignerType.OWNER,\n walletType: WalletType.GNOSIS_SAFE,\n };\n }\n\n if (isSameEvmAddress(wallet, deriveProxyWalletAddress(signer, config))) {\n return {\n signerType: SignerType.OWNER,\n walletType: WalletType.POLY_PROXY,\n };\n }\n\n throw new UserInputError(\n 'Wallet is not a verified Deposit Wallet for this signer.',\n );\n}\n","import type { PositionId, TokenId } from '@kuest/bindings';\nimport { z } from 'zod';\n\nconst ExchangeAssetIdSchema = z\n .string()\n .transform((value): TokenId | PositionId => value as TokenId | PositionId);\n\nexport function exchangeAssetRequestSchema<TShape extends z.ZodRawShape>(\n shape: TShape,\n) {\n return z.union([\n z.object({\n ...shape,\n assetId: ExchangeAssetIdSchema,\n tokenId: z.never().optional(),\n }),\n z.object({\n ...shape,\n assetId: z.never().optional(),\n tokenId: z.string(),\n }),\n ]);\n}\n\nexport function optionalExchangeAssetRequestSchema<\n TShape extends z.ZodRawShape,\n>(shape: TShape) {\n return z.union([\n z.object({\n ...shape,\n assetId: ExchangeAssetIdSchema.optional(),\n tokenId: z.never().optional(),\n }),\n z.object({\n ...shape,\n assetId: z.never().optional(),\n tokenId: z.string().optional(),\n }),\n ]);\n}\n","import { EventIdSchema } from '@kuest/bindings';\nimport { z } from 'zod';\n\nexport const ClosedFilterSchema = z.union([z.boolean(), z.literal('any')]);\n\nexport type SearchParamPrimitive = boolean | number | string;\n\nexport type SearchParamValue =\n | SearchParamPrimitive\n | readonly SearchParamPrimitive[];\n\nexport type SearchParamsInput = Record<string, SearchParamValue | undefined>;\n\nexport type SearchParamMappings<TParams extends SearchParamsInput> = {\n [TKey in keyof TParams]: string;\n};\n\ntype SnakeCaseSearchParamMappings = {\n format: 'snake_case';\n exceptions: Record<string, string | undefined>;\n};\n\nexport function toSearchParams<TParams extends SearchParamsInput>(\n params: TParams,\n mappings: SearchParamMappings<TParams> | SnakeCaseSearchParamMappings,\n): URLSearchParams {\n if (isSnakeCaseSearchParamMappings(mappings)) {\n return toSnakeCaseSearchParams(params, mappings.exceptions);\n }\n\n const searchParams = new URLSearchParams();\n\n for (const [paramKey, searchParamKey] of Object.entries(mappings) as Array<\n readonly [keyof TParams, string]\n >) {\n const value = params[paramKey];\n\n if (value === undefined) {\n continue;\n }\n\n if (isSearchParamArray(value)) {\n for (const item of value) {\n searchParams.append(searchParamKey, toSearchParamValue(item));\n }\n\n continue;\n }\n\n searchParams.append(searchParamKey, toSearchParamValue(value));\n }\n\n return searchParams;\n}\n\nexport function snakeCase<TParams extends SearchParamsInput>(\n exceptions: Partial<SearchParamMappings<TParams>> = {},\n): SnakeCaseSearchParamMappings {\n return {\n format: 'snake_case',\n exceptions,\n };\n}\n\n/**\n * Legacy data endpoints use camelCase query keys and comma-separated arrays.\n * Dies with the last legacy data action; new data actions use\n * {@link toDataSearchParams}.\n */\nexport function toLegacyDataSearchParams<TParams extends SearchParamsInput>(\n params: TParams,\n): URLSearchParams {\n const searchParams = new URLSearchParams();\n\n for (const [key, value] of Object.entries(params)) {\n if (value === undefined) {\n continue;\n }\n\n if (Array.isArray(value)) {\n searchParams.append(key, value.map(toSearchParamValue).join(','));\n continue;\n }\n\n searchParams.append(key, toSearchParamValue(value as SearchParamPrimitive));\n }\n\n return searchParams;\n}\n\n/**\n * An instant accepted as epoch seconds or a `Date` (floored to seconds) —\n * the wire's time vocabulary.\n */\nexport const EpochSecondsLikeSchema = z\n .union([z.number().int().min(0), z.date()])\n .transform((value) =>\n value instanceof Date ? Math.floor(value.getTime() / 1000) : value,\n );\n\n/**\n * The time window of a history request, normalized to the wire's epoch-second\n * `start`/`end` bounds.\n *\n * `'full'` requests the complete history. An omitted window serves the\n * service's default range, and an omitted bound leaves that side open.\n * Bounds accept epoch seconds or `Date` values.\n */\nexport const TimeWindowSchema = z\n .union([\n z.literal('full'),\n z\n .object({\n start: EpochSecondsLikeSchema.optional(),\n end: EpochSecondsLikeSchema.optional(),\n })\n // A zero bound means unbounded on the wire, mirroring the service.\n .refine(\n (value) => !value.end || value.end >= (value.start ?? 0),\n 'end must not precede start',\n ),\n ])\n // `start=1` is the wire's full-history request.\n .transform((value) => (value === 'full' ? { start: 1 } : value));\n\nexport type TimeWindow = z.input<typeof TimeWindowSchema>;\n\n/** A positive event ID that fits the platform's signed 32-bit identifier. */\nexport const PositiveInt32EventIdSchema = EventIdSchema.refine(\n (eventId) => /^[1-9]\\d*$/.test(eventId) && BigInt(eventId) <= 2_147_483_647n,\n 'Expected a positive 32-bit event ID',\n);\n\n/**\n * A list of ids deduplicated case-insensitively (first-seen casing kept) and\n * capped at `max` DISTINCT entries — mirroring the service's dedupe-then-count\n * selector semantics so a duplicate-heavy list is neither rejected early nor\n * sent redundantly.\n */\nexport function distinctIdList<TId extends string>(\n item: z.ZodType<TId, string>,\n max: number,\n) {\n return z\n .array(item)\n .min(1)\n .transform((ids) => [\n ...new Map(ids.map((id) => [id.toLowerCase(), id])).values(),\n ])\n .refine((ids) => ids.length <= max, `At most ${max} distinct ids`);\n}\n\n/**\n * Data endpoints use snake_case query keys and comma-separated arrays.\n */\nexport function toDataSearchParams<TParams extends SearchParamsInput>(\n params: TParams,\n): URLSearchParams {\n const searchParams = new URLSearchParams();\n\n for (const [key, value] of Object.entries(params)) {\n if (value === undefined) {\n continue;\n }\n\n const searchParamKey = toSnakeCase(key);\n\n if (isSearchParamArray(value)) {\n searchParams.append(\n searchParamKey,\n value.map(toSearchParamValue).join(','),\n );\n continue;\n }\n\n searchParams.append(searchParamKey, toSearchParamValue(value));\n }\n\n return searchParams;\n}\n\nfunction isSnakeCaseSearchParamMappings(\n mappings:\n | SearchParamMappings<SearchParamsInput>\n | SnakeCaseSearchParamMappings,\n): mappings is SnakeCaseSearchParamMappings {\n return 'format' in mappings;\n}\n\nfunction toSnakeCaseSearchParams<TParams extends SearchParamsInput>(\n params: TParams,\n exceptions: Record<string, string | undefined>,\n): URLSearchParams {\n const searchParams = new URLSearchParams();\n\n for (const [paramKey, value] of Object.entries(params) as Array<\n readonly [string, SearchParamValue]\n >) {\n if (value === undefined) {\n continue;\n }\n\n const searchParamKey = exceptions[paramKey] ?? toSnakeCase(paramKey);\n\n if (isSearchParamArray(value)) {\n for (const item of value) {\n searchParams.append(searchParamKey, toSearchParamValue(item));\n }\n\n continue;\n }\n\n searchParams.append(searchParamKey, toSearchParamValue(value));\n }\n\n return searchParams;\n}\n\nfunction isSearchParamArray(\n value: SearchParamValue,\n): value is readonly SearchParamPrimitive[] {\n return Array.isArray(value);\n}\n\nfunction toSnakeCase(value: string): string {\n return value.replace(/[A-Z]/g, (character) => `_${character.toLowerCase()}`);\n}\n\nexport function toSearchParamValue(value: SearchParamPrimitive): string {\n return String(value);\n}\n","import { PaginationCursorSchema, toPaginationCursor } from '@kuest/bindings';\nimport {\n type AssetType,\n AssetTypeSchema,\n type BalanceAllowanceResponse,\n BalanceAllowanceResponseSchema,\n type ClobTrade,\n ClobTradesPageSchema,\n ClosedOnlyModeSchema,\n END_CURSOR,\n type NotificationsResponse,\n NotificationsResponseSchema,\n type OpenOrder,\n OpenOrderSchema,\n OpenOrdersPageSchema,\n OrderScoringResponseSchema,\n type OrdersScoringResponse,\n OrdersScoringResponseSchema,\n type RewardsPercentages,\n RewardsPercentagesSchema,\n type TotalUserEarning,\n TotalUserEarningsResponseSchema,\n type UserEarning,\n UserEarningsPageSchema,\n type UserRewardsEarning,\n UserRewardsEarningsPageSchema,\n} from '@kuest/bindings/clob';\nimport { z } from 'zod';\nimport type { BaseSecureClient } from '../clients';\nimport {\n makeErrorGuard,\n RateLimitError,\n RequestAbortedError,\n RequestRejectedError,\n SigningError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n} from '../errors';\nimport { parseUserInput } from '../input';\nimport { PageSizeSchema, type Paginated, paginate } from '../pagination';\nimport { parseRequestOptions, type RequestOptions } from '../request-options';\nimport { toSignatureType } from '../wallet';\nimport { optionalExchangeAssetRequestSchema } from './exchange-asset';\nimport { snakeCase, toSearchParams } from './params';\n\nexport type FetchClosedOnlyModeError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | SigningError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchClosedOnlyModeError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n SigningError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Fetches whether the account is restricted to closed-only trading.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link FetchClosedOnlyModeError}\n *\n * @example\n * ```ts\n * const closedOnly = await fetchClosedOnlyMode(client);\n * ```\n */\nexport async function fetchClosedOnlyMode(\n client: BaseSecureClient,\n options: RequestOptions = {},\n): Promise<boolean> {\n const requestOptions = parseRequestOptions(options);\n const response = await client.secureClob.get('/auth/ban-status/closed-only', {\n ...requestOptions,\n schema: ClosedOnlyModeSchema,\n });\n\n return response.closedOnly;\n}\n\nconst ListOpenOrdersRequestFieldsSchema = z.object({\n cursor: PaginationCursorSchema.optional(),\n id: z.string().optional(),\n market: z.string().optional(),\n});\n\nconst ListOpenOrdersRequestSchema = optionalExchangeAssetRequestSchema(\n ListOpenOrdersRequestFieldsSchema.shape,\n).default({});\n\nexport type ListOpenOrdersRequest =\n | {\n /** Identifier for a CTF token or Polymarket V2 position. */\n assetId?: string;\n tokenId?: never;\n cursor?: string;\n id?: string;\n market?: string;\n }\n | {\n assetId?: never;\n /** @deprecated Use `assetId`. */\n tokenId?: string;\n cursor?: string;\n id?: string;\n market?: string;\n };\nexport type ListOpenOrdersError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | SigningError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const ListOpenOrdersError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n SigningError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Lists open orders for the authenticated account across all pages.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link ListOpenOrdersError}\n *\n * @example\n * Fetch the first page of results:\n * ```ts\n * const result = listOpenOrders(client, {\n * market: '0x0000000000000000000000000000000000000000000000000000000000000001',\n * });\n *\n * const firstPage = await result.firstPage();\n *\n * // Optionally, fetch additional pages:\n * for await (const page of result.from(firstPage.nextCursor)) {\n * // page.items: OpenOrder[]\n * }\n * ```\n *\n * @example\n * Loop through all pages with `for await`:\n * ```ts\n * const result = listOpenOrders(client, {\n * market: '0x0000000000000000000000000000000000000000000000000000000000000001',\n * });\n *\n * for await (const page of result) {\n * // page.items: OpenOrder[]\n * }\n * ```\n */\nexport function listOpenOrders(\n client: BaseSecureClient,\n request?: ListOpenOrdersRequest,\n options: RequestOptions = {},\n): Paginated<OpenOrder[]> {\n const requestOptions = parseRequestOptions(options);\n const params = parseUserInput(request, ListOpenOrdersRequestSchema);\n const { cursor } = params;\n\n return paginate(\n (nextCursor) =>\n client.secureClob\n .get('/data/orders', {\n schema: OpenOrdersPageSchema,\n ...requestOptions,\n params: toSearchParams(\n {\n assetId: params.assetId ?? params.tokenId,\n id: params.id,\n market: params.market,\n nextCursor,\n },\n snakeCase({ assetId: 'asset_id' }),\n ),\n })\n .then((response) => ({\n items: response.data,\n hasMore: response.nextCursor !== END_CURSOR,\n nextCursor:\n response.nextCursor === END_CURSOR\n ? undefined\n : toPaginationCursor(response.nextCursor),\n })),\n cursor,\n );\n}\n\nconst FetchOrderRequestSchema = z.object({\n orderId: z.string(),\n});\n\nexport type FetchOrderRequest = z.input<typeof FetchOrderRequestSchema>;\nexport type FetchOrderError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | SigningError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchOrderError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n SigningError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Fetches a single order for the authenticated account.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link FetchOrderError}\n *\n * @example\n * ```ts\n * const order = await fetchOrder(client, {\n * orderId: '123',\n * });\n * ```\n */\nexport async function fetchOrder(\n client: BaseSecureClient,\n request: FetchOrderRequest,\n options: RequestOptions = {},\n): Promise<OpenOrder> {\n const requestOptions = parseRequestOptions(options);\n const params = parseUserInput(request, FetchOrderRequestSchema);\n\n return client.secureClob.get(`/data/order/${params.orderId}`, {\n ...requestOptions,\n schema: OpenOrderSchema,\n });\n}\n\nconst ListAccountTradesRequestFields = {\n after: z.string().optional(),\n before: z.string().optional(),\n cursor: PaginationCursorSchema.optional(),\n id: z.string().optional(),\n makerAddress: z.string().optional(),\n market: z.string().optional(),\n};\n\nconst ListAccountTradesRequestSchema = optionalExchangeAssetRequestSchema(\n ListAccountTradesRequestFields,\n).default({});\n\nexport type ListAccountTradesRequest =\n | {\n /** Identifier for a CTF token or Polymarket V2 position. */\n assetId?: string;\n tokenId?: never;\n after?: string;\n before?: string;\n cursor?: string;\n id?: string;\n makerAddress?: string;\n market?: string;\n }\n | {\n assetId?: never;\n /** @deprecated Use `assetId`. */\n tokenId?: string;\n after?: string;\n before?: string;\n cursor?: string;\n id?: string;\n makerAddress?: string;\n market?: string;\n };\nexport type ListAccountTradesError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | SigningError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const ListAccountTradesError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n SigningError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Lists trades for the authenticated account across all pages.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link ListAccountTradesError}\n *\n * @example\n * Fetch the first page of results:\n * ```ts\n * const result = listAccountTrades(client, {\n * market: '0x0000000000000000000000000000000000000000000000000000000000000001',\n * });\n *\n * const firstPage = await result.firstPage();\n *\n * // Optionally, fetch additional pages:\n * for await (const page of result.from(firstPage.nextCursor)) {\n * // page.items: ClobTrade[]\n * }\n * ```\n *\n * @example\n * Loop through all pages with `for await`:\n * ```ts\n * const result = listAccountTrades(client, {\n * market: '0x0000000000000000000000000000000000000000000000000000000000000001',\n * });\n *\n * for await (const page of result) {\n * // page.items: ClobTrade[]\n * }\n * ```\n */\nexport function listAccountTrades(\n client: BaseSecureClient,\n request?: ListAccountTradesRequest,\n options: RequestOptions = {},\n): Paginated<ClobTrade[]> {\n const requestOptions = parseRequestOptions(options);\n const params = parseUserInput(request, ListAccountTradesRequestSchema);\n const { cursor } = params;\n\n return paginate(\n (nextCursor) =>\n client.secureClob\n .get('/data/trades', {\n schema: ClobTradesPageSchema,\n ...requestOptions,\n params: toSearchParams(\n {\n after: params.after,\n assetId: params.assetId ?? params.tokenId,\n before: params.before,\n id: params.id,\n makerAddress: params.makerAddress,\n market: params.market,\n nextCursor,\n },\n snakeCase({ assetId: 'asset_id' }),\n ),\n })\n .then((response) => ({\n items: response.data,\n hasMore: response.nextCursor !== END_CURSOR,\n nextCursor:\n response.nextCursor === END_CURSOR\n ? undefined\n : toPaginationCursor(response.nextCursor),\n })),\n cursor,\n );\n}\n\nexport type FetchNotificationsError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | SigningError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchNotificationsError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n SigningError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\nconst DropNotificationsRequestSchema = z.object({\n ids: z.array(z.string()).min(1),\n});\n\nexport type DropNotificationsRequest = z.input<\n typeof DropNotificationsRequestSchema\n>;\n\n/**\n * Fetches notifications for the authenticated account.\n * Notifications of a kind this SDK version does not recognize are omitted.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link FetchNotificationsError}\n *\n * @example\n * ```ts\n * const notifications = await fetchNotifications(client);\n * ```\n */\nexport async function fetchNotifications(\n client: BaseSecureClient,\n options: RequestOptions = {},\n): Promise<NotificationsResponse> {\n const requestOptions = parseRequestOptions(options);\n const signatureType = toSignatureType(client.account.walletType);\n\n return client.secureClob.get('/notifications', {\n schema: NotificationsResponseSchema,\n ...requestOptions,\n params: toSearchParams({ signatureType }, snakeCase()),\n });\n}\n\nexport type DropNotificationsError =\n | RateLimitError\n | RequestRejectedError\n | SigningError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const DropNotificationsError = makeErrorGuard(\n RateLimitError,\n RequestRejectedError,\n SigningError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Drops notifications for the authenticated account.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link DropNotificationsError}\n * Thrown on failure.\n *\n * @example\n * ```ts\n * await dropNotifications(client, {\n * ids: ['1', '2'],\n * });\n * ```\n */\nexport async function dropNotifications(\n client: BaseSecureClient,\n request: DropNotificationsRequest,\n): Promise<void> {\n const params = parseUserInput(request, DropNotificationsRequestSchema);\n const signatureType = toSignatureType(client.account.walletType);\n const searchParams = toSearchParams(\n {\n ids: params.ids.join(','),\n signatureType,\n },\n snakeCase(),\n );\n\n await client.secureClob.del('/notifications', {\n responseType: 'empty',\n params: searchParams,\n });\n}\n\nconst BalanceAllowanceRequestFieldsSchema = z.object({\n assetType: AssetTypeSchema,\n});\n\nconst FetchBalanceAllowanceRequestSchema = optionalExchangeAssetRequestSchema(\n BalanceAllowanceRequestFieldsSchema.shape,\n);\n\nexport type FetchBalanceAllowanceRequest =\n | {\n /** Identifier for a CTF token or Polymarket V2 position. */\n assetId?: string;\n tokenId?: never;\n assetType: AssetType;\n }\n | {\n assetId?: never;\n /** @deprecated Use `assetId`. */\n tokenId?: string;\n assetType: AssetType;\n };\n\nexport type FetchBalanceAllowanceError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | SigningError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchBalanceAllowanceError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n SigningError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Fetches balance and allowance for the authenticated account.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link FetchBalanceAllowanceError}\n * Thrown on failure.\n *\n * @example\n * ```ts\n * const balanceAllowance = await fetchBalanceAllowance(client, {\n * assetType: AssetType.COLLATERAL,\n * });\n * ```\n */\nexport async function fetchBalanceAllowance(\n client: BaseSecureClient,\n request: FetchBalanceAllowanceRequest,\n options: RequestOptions = {},\n): Promise<BalanceAllowanceResponse> {\n const requestOptions = parseRequestOptions(options);\n const params = parseUserInput(request, FetchBalanceAllowanceRequestSchema);\n const signatureType = toSignatureType(client.account.walletType);\n\n return client.secureClob.get('/balance-allowance', {\n schema: BalanceAllowanceResponseSchema,\n ...requestOptions,\n params: toSearchParams(\n {\n assetType: params.assetType,\n tokenId: params.assetId ?? params.tokenId,\n signatureType,\n },\n snakeCase(),\n ),\n });\n}\n\nconst UpdateBalanceAllowanceRequestSchema = optionalExchangeAssetRequestSchema(\n BalanceAllowanceRequestFieldsSchema.shape,\n);\n\nexport type UpdateBalanceAllowanceRequest =\n | {\n /** Identifier for a CTF token or Polymarket V2 position. */\n assetId?: string;\n tokenId?: never;\n assetType: AssetType;\n }\n | {\n assetId?: never;\n /** @deprecated Use `assetId`. */\n tokenId?: string;\n assetType: AssetType;\n };\n\nexport type UpdateBalanceAllowanceError =\n | RateLimitError\n | RequestRejectedError\n | SigningError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const UpdateBalanceAllowanceError = makeErrorGuard(\n RateLimitError,\n RequestRejectedError,\n SigningError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Refreshes balance and allowance for the authenticated account.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link UpdateBalanceAllowanceError}\n * Thrown on failure.\n *\n * @example\n * ```ts\n * const balanceAllowance = await updateBalanceAllowance(client, {\n * assetType: AssetType.COLLATERAL,\n * });\n * ```\n */\nexport async function updateBalanceAllowance(\n client: BaseSecureClient,\n request: UpdateBalanceAllowanceRequest,\n): Promise<BalanceAllowanceResponse> {\n const params = parseUserInput(request, UpdateBalanceAllowanceRequestSchema);\n const signatureType = toSignatureType(client.account.walletType);\n const searchParams = toSearchParams(\n {\n assetType: params.assetType,\n tokenId: params.assetId ?? params.tokenId,\n signatureType,\n },\n snakeCase(),\n );\n\n await client.secureClob.getWorkflow('/balance-allowance/update', {\n responseType: 'empty',\n params: searchParams,\n });\n\n return fetchBalanceAllowance(client, params);\n}\n\nconst FetchOrderScoringRequestSchema = z.object({\n orderId: z.string(),\n});\n\nexport type FetchOrderScoringRequest = z.input<\n typeof FetchOrderScoringRequestSchema\n>;\nexport type FetchOrderScoringError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | SigningError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchOrderScoringError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n SigningError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Fetches whether a single order is currently scoring.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link FetchOrderScoringError}\n *\n * @example\n * ```ts\n * const scoring = await fetchOrderScoring(client, {\n * orderId: '123',\n * });\n * ```\n */\nexport async function fetchOrderScoring(\n client: BaseSecureClient,\n request: FetchOrderScoringRequest,\n options: RequestOptions = {},\n): Promise<boolean> {\n const requestOptions = parseRequestOptions(options);\n const params = parseUserInput(request, FetchOrderScoringRequestSchema);\n const response = await client.secureClob.get('/order-scoring', {\n schema: OrderScoringResponseSchema,\n ...requestOptions,\n params: toSearchParams(params, snakeCase()),\n });\n\n return response.scoring;\n}\n\nconst FetchOrdersScoringRequestSchema = z.object({\n orderIds: z.array(z.string()),\n});\n\nexport type FetchOrdersScoringRequest = z.input<\n typeof FetchOrdersScoringRequestSchema\n>;\nexport type FetchOrdersScoringError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | SigningError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchOrdersScoringError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n SigningError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Fetches scoring state for multiple orders.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link FetchOrdersScoringError}\n *\n * @example\n * ```ts\n * const scoring = await fetchOrdersScoring(client, {\n * orderIds: ['1', '2'],\n * });\n * ```\n */\nexport async function fetchOrdersScoring(\n client: BaseSecureClient,\n request: FetchOrdersScoringRequest,\n options: RequestOptions = {},\n): Promise<OrdersScoringResponse> {\n const requestOptions = parseRequestOptions(options);\n const params = parseUserInput(request, FetchOrdersScoringRequestSchema);\n const body = params.orderIds;\n\n return client.secureClob.postRead('/orders-scoring', {\n schema: OrdersScoringResponseSchema,\n ...requestOptions,\n json: body,\n });\n}\n\nconst ListUserEarningsForDayRequestSchema = z.object({\n cursor: PaginationCursorSchema.optional(),\n date: z.string(),\n});\n\nexport type ListUserEarningsForDayRequest = z.input<\n typeof ListUserEarningsForDayRequestSchema\n>;\nexport type ListUserEarningsForDayError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | SigningError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const ListUserEarningsForDayError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n SigningError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Lists per-market earnings for the authenticated account on a given day.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link ListUserEarningsForDayError}\n *\n * @example\n * Fetch the first page of results:\n * ```ts\n * const result = listUserEarningsForDay(client, {\n * date: '2026-04-16',\n * });\n *\n * const firstPage = await result.firstPage();\n *\n * // Optionally, fetch additional pages:\n * for await (const page of result.from(firstPage.nextCursor)) {\n * // page.items: UserEarning[]\n * }\n * ```\n *\n * @example\n * Loop through all pages with `for await`:\n * ```ts\n * const result = listUserEarningsForDay(client, {\n * date: '2026-04-16',\n * });\n *\n * for await (const page of result) {\n * // page.items: UserEarning[]\n * }\n * ```\n */\nexport function listUserEarningsForDay(\n client: BaseSecureClient,\n request: ListUserEarningsForDayRequest,\n options: RequestOptions = {},\n): Paginated<UserEarning[]> {\n const requestOptions = parseRequestOptions(options);\n const { cursor, ...params } = parseUserInput(\n request,\n ListUserEarningsForDayRequestSchema,\n );\n const signatureType = toSignatureType(client.account.walletType);\n\n return paginate(\n (nextCursor) =>\n client.secureClob\n .get('/rewards/user', {\n schema: UserEarningsPageSchema,\n ...requestOptions,\n params: toSearchParams(\n {\n ...params,\n nextCursor,\n signatureType,\n },\n snakeCase(),\n ),\n })\n .then((response) => ({\n items: response.data,\n hasMore: response.nextCursor !== END_CURSOR,\n nextCursor:\n response.nextCursor === END_CURSOR\n ? undefined\n : toPaginationCursor(response.nextCursor),\n })),\n cursor,\n );\n}\n\nconst FetchTotalEarningsForUserForDayRequestSchema = z.object({\n cursor: PaginationCursorSchema.optional(),\n date: z.string(),\n sponsored: z.boolean().optional(),\n});\n\nexport type FetchTotalEarningsForUserForDayRequest = z.input<\n typeof FetchTotalEarningsForUserForDayRequestSchema\n>;\nexport type FetchTotalEarningsForUserForDayError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | SigningError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchTotalEarningsForUserForDayError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n SigningError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Fetches total earnings for the authenticated account on a given day.\n * Set `sponsored: true` to include sponsored rewards and the native/sponsored\n * breakdown. Omitted or false returns native rewards only; absent breakdown\n * fields remain undefined.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link FetchTotalEarningsForUserForDayError}\n *\n * @example\n * ```ts\n * const earnings = await fetchTotalEarningsForUserForDay(client, {\n * date: '2026-04-16',\n * });\n * ```\n */\nexport async function fetchTotalEarningsForUserForDay(\n client: BaseSecureClient,\n request: FetchTotalEarningsForUserForDayRequest,\n options: RequestOptions = {},\n): Promise<TotalUserEarning[]> {\n const requestOptions = parseRequestOptions(options);\n const params = parseUserInput(\n request,\n FetchTotalEarningsForUserForDayRequestSchema,\n );\n const signatureType = toSignatureType(client.account.walletType);\n\n return client.secureClob.get('/rewards/user/total', {\n schema: TotalUserEarningsResponseSchema,\n ...requestOptions,\n params: toSearchParams(\n {\n ...params,\n signatureType,\n },\n snakeCase(),\n ),\n });\n}\n\nconst ListUserEarningsAndMarketsConfigRequestSchema = z.object({\n cursor: PaginationCursorSchema.optional(),\n date: z.string(),\n noCompetition: z.boolean().optional(),\n orderBy: z.string().optional(),\n pageSize: PageSizeSchema.max(500).default(100),\n position: z.string().optional(),\n});\n\nexport type ListUserEarningsAndMarketsConfigRequest = z.input<\n typeof ListUserEarningsAndMarketsConfigRequestSchema\n>;\nexport type ListUserEarningsAndMarketsConfigError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | SigningError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const ListUserEarningsAndMarketsConfigError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n SigningError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Lists market reward configuration and earnings for the authenticated account on a given day.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link ListUserEarningsAndMarketsConfigError}\n *\n * @example\n * Fetch the first page of results:\n * ```ts\n * const result = listUserEarningsAndMarketsConfig(client, {\n * date: '2026-04-16',\n * });\n *\n * const firstPage = await result.firstPage();\n *\n * // Optionally, fetch additional pages:\n * for await (const page of result.from(firstPage.nextCursor)) {\n * // page.items: UserRewardsEarning[]\n * }\n * ```\n *\n * @example\n * Loop through all pages with `for await`:\n * ```ts\n * const result = listUserEarningsAndMarketsConfig(client, {\n * date: '2026-04-16',\n * });\n *\n * for await (const page of result) {\n * // page.items: UserRewardsEarning[]\n * }\n * ```\n */\nexport function listUserEarningsAndMarketsConfig(\n client: BaseSecureClient,\n request: ListUserEarningsAndMarketsConfigRequest,\n options: RequestOptions = {},\n): Paginated<UserRewardsEarning[]> {\n const requestOptions = parseRequestOptions(options);\n const { cursor, ...params } = parseUserInput(\n request,\n ListUserEarningsAndMarketsConfigRequestSchema,\n );\n const signatureType = toSignatureType(client.account.walletType);\n\n return paginate(\n (nextCursor) =>\n client.secureClob\n .get('/rewards/user/markets', {\n schema: UserRewardsEarningsPageSchema,\n ...requestOptions,\n params: toSearchParams(\n {\n ...params,\n nextCursor,\n signatureType,\n },\n snakeCase(),\n ),\n })\n .then((response) => ({\n items: response.data,\n hasMore: response.nextCursor !== END_CURSOR,\n nextCursor:\n response.nextCursor === END_CURSOR\n ? undefined\n : toPaginationCursor(response.nextCursor),\n })),\n cursor,\n );\n}\n\nexport type FetchRewardPercentagesError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | SigningError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchRewardPercentagesError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n SigningError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Fetches reward percentages for the authenticated account.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link FetchRewardPercentagesError}\n *\n * @example\n * ```ts\n * const percentages = await fetchRewardPercentages(client);\n * ```\n */\nexport async function fetchRewardPercentages(\n client: BaseSecureClient,\n options: RequestOptions = {},\n): Promise<RewardsPercentages> {\n const requestOptions = parseRequestOptions(options);\n const signatureType = toSignatureType(client.account.walletType);\n\n return client.secureClob.get('/rewards/user/percentages', {\n schema: RewardsPercentagesSchema,\n ...requestOptions,\n params: toSearchParams({ signatureType }, snakeCase()),\n });\n}\n","import {\n ComboConditionIdSchema,\n ConditionIdSchema,\n EventIdSchema,\n EvmAddressSchema,\n OrderSideSchema,\n PaginationCursorSchema,\n} from '@kuest/bindings';\nimport {\n type Activity,\n ActivityTypeSchema,\n type ComboActivity,\n ListActivityResponseSchema,\n ListComboActivityResponseSchema,\n ListTradesResponseSchema,\n SortDirectionSchema,\n type Trade,\n TradeFilterTypeSchema,\n} from '@kuest/bindings/data';\nimport { z } from 'zod';\nimport type { BaseClient } from '../clients';\nimport {\n makeErrorGuard,\n RateLimitError,\n RequestAbortedError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n} from '../errors';\nimport { parseUserInput } from '../input';\nimport { PageSizeSchema, type Paginated, paginate } from '../pagination';\nimport { parseRequestOptions, type RequestOptions } from '../request-options';\nimport { distinctIdList, TimeWindowSchema, toDataSearchParams } from './params';\n\nexport {\n ComboActivityType,\n SortDirection,\n TipSide,\n TradeFilterType,\n} from '@kuest/bindings/data';\n\nconst ListTradesRequestSchema = z\n .object({\n cursor: PaginationCursorSchema.optional(),\n // The service default; anything past 1000 is rejected, not clamped.\n pageSize: PageSizeSchema.max(1000).default(100),\n // Branded input schemas double as the guard against silent widening: the\n // service reads a malformed/empty `user` as absent and keys routing on\n // `condition`/`event_id` presence, so a bad filter forwarded raw would\n // quietly serve the global feed. The empty-array min(1)s exist for the\n // same reason.\n user: EvmAddressSchema.optional(),\n takerOnly: z.boolean().optional(),\n // Unlike v1, either filter field may be sent alone (verified 200 live):\n // the service always applies the dust filter, defaulting the missing half\n // (TOKENS / 0.01) — so a both-or-neither rule here would reject requests\n // the service answers.\n filterType: TradeFilterTypeSchema.optional(),\n filterAmount: z.number().min(0).optional(),\n // Encodes to `condition_id`, an accepted alias of the canonical\n // `condition` key. The service dedupes and then caps the selector at 20\n // DISTINCT ids (DENG-588) — mirror both halves here so the cap error\n // stays typed.\n conditionId: z\n .union([ConditionIdSchema, distinctIdList(ConditionIdSchema, 20)])\n .optional(),\n eventId: z.array(EventIdSchema).min(1).optional(),\n side: OrderSideSchema.optional(),\n window: TimeWindowSchema.optional(),\n })\n .refine((value) => !(value.conditionId && value.eventId), {\n message: 'Provide conditionId or eventId, not both',\n path: ['eventId'],\n });\n\nexport type ListTradesRequest = z.input<typeof ListTradesRequestSchema>;\nexport type ListTradesError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const ListTradesError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Lists trades for a wallet, market, or event — or the global recent-trades\n * feed when no filter is given.\n *\n * Only the taker side of each match is returned by default\n * (`takerOnly: false` includes maker rows), and a dust filter of 0.01 shares\n * applies unless `filterType`/`filterAmount` say otherwise — either may be\n * sent alone. `conditionId` accepts at most 20 distinct ids. `pageSize`\n * defaults to 100 (max 1000). `window: 'full'` requests the complete\n * history; an omitted window serves the recent feed. Transient rate limits\n * are retried by default.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link ListTradesError}\n * Thrown on failure.\n *\n * @example\n * Fetch the first page of results:\n * ```ts\n * const result = listTrades(client, {\n * user: '0x7c3db723f1d4d8cb9c550095203b686cb11e5c6b',\n * pageSize: 10,\n * });\n *\n * const firstPage = await result.firstPage();\n *\n * // Optionally, fetch additional pages:\n * for await (const page of result.from(firstPage.nextCursor)) {\n * // page.items: Trade[]\n * }\n * ```\n *\n * @example\n * Loop through all pages with `for await`:\n * ```ts\n * const result = listTrades(client, {\n * user: '0x7c3db723f1d4d8cb9c550095203b686cb11e5c6b',\n * window: 'full',\n * });\n *\n * for await (const page of result) {\n * // page.items: Trade[]\n * }\n * ```\n */\nexport function listTrades(\n client: BaseClient,\n request: ListTradesRequest = {},\n options: RequestOptions = {},\n): Paginated<Trade[]> {\n const requestOptions = parseRequestOptions(options);\n const { cursor, pageSize, window, ...params } = parseUserInput(\n request,\n ListTradesRequestSchema,\n );\n\n return paginate(\n (cursor) =>\n client.data.get('/v2/trades', {\n schema: ListTradesResponseSchema,\n ...requestOptions,\n // The full original filter set rides along with every cursor: the\n // cursor binds only its paging anchor, and a filter dropped on a\n // follow-up page would silently widen the result set.\n params: toDataSearchParams({\n ...params,\n ...window,\n limit: pageSize,\n cursor,\n }),\n }),\n cursor,\n );\n}\n\nconst ListActivityRequestSchema = z\n .object({\n cursor: PaginationCursorSchema.optional(),\n // The service default; anything past 1000 is rejected, not clamped.\n pageSize: PageSizeSchema.max(1000).default(100),\n /** The feed is wallet-anchored — `user` is required. */\n user: EvmAddressSchema,\n // The service dedupes and then caps every condition selector at 20\n // DISTINCT ids (one shared parser across the surface) — mirror both\n // halves here so the cap error stays typed.\n conditionId: z\n .union([ConditionIdSchema, distinctIdList(ConditionIdSchema, 20)])\n .optional(),\n eventId: z.array(EventIdSchema).min(1).optional(),\n type: z.array(ActivityTypeSchema).min(1).optional(),\n side: OrderSideSchema.optional(),\n /** `DESC` (default) walks newest-first; `ASC` oldest-first. */\n sortDirection: SortDirectionSchema.optional(),\n window: TimeWindowSchema.optional(),\n })\n .refine((value) => !(value.conditionId && value.eventId), {\n message: 'Provide conditionId or eventId, not both',\n path: ['eventId'],\n });\n\nexport type ListActivityRequest = z.input<typeof ListActivityRequestSchema>;\n\nexport type ListActivityError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const ListActivityError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Lists wallet activity, newest-first by default.\n * Trades and redemptions expose available token outcomes. Narrow splits, merges and redemptions on\n * `isCombo` before using market-only metadata; a basket's outcome names its\n * token side, not a selected leg.\n *\n * Every activity type the service serves is included by default — deposits\n * and withdrawals are not filtered out; use the `type` filter to narrow\n * results. `window: 'full'`\n * requests the complete history (an omitted window serves the service's\n * default range — the most recent three years). `pageSize` defaults to 100\n * (max 1000). Transient rate limits are retried by default.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link ListActivityError}\n * Thrown on failure.\n *\n * @example\n * Fetch the first page of results:\n * ```ts\n * const result = listActivity(client, {\n * user: '0x7c3db723f1d4d8cb9c550095203b686cb11e5c6b',\n * pageSize: 10,\n * });\n *\n * const firstPage = await result.firstPage();\n *\n * // Optionally, fetch additional pages:\n * for await (const page of result.from(firstPage.nextCursor)) {\n * // page.items: Activity[]\n * }\n * ```\n *\n * @example\n * Loop through the complete history with `for await`:\n * ```ts\n * const result = listActivity(client, {\n * user: '0x7c3db723f1d4d8cb9c550095203b686cb11e5c6b',\n * window: 'full',\n * });\n *\n * for await (const page of result) {\n * // page.items: Activity[]\n * }\n * ```\n */\nexport function listActivity(\n client: BaseClient,\n request: ListActivityRequest,\n options: RequestOptions = {},\n): Paginated<Activity[]> {\n const requestOptions = parseRequestOptions(options);\n const { cursor, pageSize, window, ...params } = parseUserInput(\n request,\n ListActivityRequestSchema,\n );\n\n return paginate(\n (cursor) =>\n client.data.get('/v2/activity', {\n schema: ListActivityResponseSchema,\n ...requestOptions,\n params: toDataSearchParams({\n ...params,\n ...window,\n // The service defaults exclude_deposits_withdrawals=true; opt out\n // unconditionally and let the type filter decide which rows come\n // back.\n excludeDepositsWithdrawals: false,\n limit: pageSize,\n cursor,\n }),\n }),\n cursor,\n );\n}\n\nconst ListComboActivityRequestSchema = z.object({\n cursor: PaginationCursorSchema.optional(),\n // The service default; anything past 1000 is rejected, not clamped.\n pageSize: PageSizeSchema.max(1000).default(100),\n /** The feed is wallet-anchored — `user` is required. */\n user: EvmAddressSchema,\n // Same shared 20-DISTINCT service cap as the other condition selectors.\n conditionId: z\n .union([ComboConditionIdSchema, distinctIdList(ComboConditionIdSchema, 20)])\n .optional(),\n});\n\nexport type ListComboActivityRequest = z.input<\n typeof ListComboActivityRequestSchema\n>;\n\nexport type ListComboActivityError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const ListComboActivityError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Lists Combo lifecycle activity for a wallet, ordered by on-chain position.\n *\n * Every row carries the Combo position id and its legs enriched with market\n * metadata; redeem rows additionally carry payout semantics. `pageSize`\n * defaults to 100 (max 1000). Transient rate limits are retried\n * by default.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link ListComboActivityError}\n * Thrown on failure.\n *\n * @example\n * Fetch the first page of results:\n * ```ts\n * const result = listComboActivity(client, {\n * user: '0x7c3db723f1d4d8cb9c550095203b686cb11e5c6b',\n * pageSize: 10,\n * });\n *\n * const firstPage = await result.firstPage();\n *\n * // Optionally, fetch additional pages:\n * for await (const page of result.from(firstPage.nextCursor)) {\n * // page.items: ComboActivity[]\n * }\n * ```\n */\nexport function listComboActivity(\n client: BaseClient,\n request: ListComboActivityRequest,\n options: RequestOptions = {},\n): Paginated<ComboActivity[]> {\n const requestOptions = parseRequestOptions(options);\n const { cursor, pageSize, ...params } = parseUserInput(\n request,\n ListComboActivityRequestSchema,\n );\n\n return paginate(\n (cursor) =>\n client.data.get('/v2/activity/combos', {\n schema: ListComboActivityResponseSchema,\n ...requestOptions,\n params: toDataSearchParams({ ...params, limit: pageSize, cursor }),\n }),\n cursor,\n );\n}\n","import { NegRiskEventIdSchema } from '@kuest/bindings';\nimport { z } from 'zod';\n\nconst ExplicitAmountSchema = z\n .bigint()\n .positive()\n .max((1n << 256n) - 1n);\n\n// ConditionIdLib uses bytes31, with a zero outcome byte in bytes32 form.\n// Its first 29 bytes are the event ID and its final 2 bytes are the condition index.\nconst NegRiskConditionInputSchema = z\n .string()\n .regex(\n /^0x02[0-9a-fA-F]{60}(?:00)?$/,\n 'Expected a protocol V2 neg-risk condition ID (bytes31 or zero-padded bytes32)',\n )\n .refine(\n (value) => NegRiskEventIdSchema.safeParse(value.slice(0, 60)).success,\n 'Condition ID must encode a valid neg-risk event',\n )\n .refine(\n (value) =>\n Number.parseInt(value.slice(60, 64), 16) <=\n Number.parseInt(value.slice(36, 40), 16),\n 'Condition index must be at most the event arity (the Other index)',\n )\n .transform((value) => value.slice(0, 64).toLowerCase());\n\n// The high-level workflow owns condition selection; contradictory protocol\n// inputs are rejected rather than silently ignored.\nexport const NegRiskOperationInputSchema = z.strictObject({\n conditionId: NegRiskConditionInputSchema,\n amount: ExplicitAmountSchema,\n});\n\nexport const HorizontalOperationInputSchema = z.object({\n protocolEventId: NegRiskEventIdSchema,\n amount: ExplicitAmountSchema,\n});\n\nexport const ConvertInputSchema = HorizontalOperationInputSchema.extend({\n conditionIndex: z.number().int().min(0).max(65535),\n}).refine(\n ({ protocolEventId, conditionIndex }) =>\n conditionIndex <= Number.parseInt(protocolEventId.slice(36, 40), 16),\n {\n path: ['conditionIndex'],\n message:\n 'Condition index must be at most the event arity (the Other index)',\n },\n);\n","import type {\n ComboConditionId,\n ConditionId,\n PositionId,\n TokenId,\n} from '@kuest/bindings';\nimport { type EvmAddress, type HexString, invariant } from '@kuest/types';\nimport { AbiFunction, AbiParameters } from 'ox';\nimport { makeErrorGuard, UserInputError } from './errors';\nimport { parseUserInput } from './input';\nimport {\n ConvertInputSchema,\n HorizontalOperationInputSchema,\n} from './neg-risk-input';\nimport type { CanonicalComboLegs } from './protocol';\nimport type { TransactionCall } from './types';\n\nconst BYTES31_HEX_LENGTH = 64;\nconst PROTOCOL_V2_CONDITION_ID_BYTES31_PATTERN = /^0x[0-9a-fA-F]{62}$/;\nconst PROTOCOL_V2_CONDITION_ID_BYTES32_PATTERN = /^0x[0-9a-fA-F]{64}$/;\nconst ZERO_BYTES32 =\n '0x0000000000000000000000000000000000000000000000000000000000000000';\nconst ERC20_APPROVE_FUNCTION = AbiFunction.from(\n 'function approve(address spender, uint256 amount)',\n);\nconst ERC20_ALLOWANCE_FUNCTION = AbiFunction.from(\n 'function allowance(address owner, address spender) view returns (uint256)',\n);\nconst ERC20_TRANSFER_FUNCTION = AbiFunction.from(\n 'function transfer(address recipient, uint256 amount)',\n);\nconst DEPOSIT_WALLET_AUTHORIZE_SESSION_SIGNER_FUNCTION = AbiFunction.from(\n 'function authorizeSessionSigner(address sessionSigner, uint256 validUntil)',\n);\nconst DEPOSIT_WALLET_REVOKE_SESSION_SIGNER_FUNCTION = AbiFunction.from(\n 'function revokeSessionSigner(address sessionSigner)',\n);\nconst PERPS_DEPOSIT_FUNCTION = AbiFunction.from(\n 'function deposit(address token, uint256 amount, address to)',\n);\nconst ERC1155_SET_APPROVAL_FOR_ALL_FUNCTION = AbiFunction.from(\n 'function setApprovalForAll(address operator, bool approved)',\n);\nconst ERC1155_IS_APPROVED_FOR_ALL_FUNCTION = AbiFunction.from(\n 'function isApprovedForAll(address account, address operator) view returns (bool)',\n);\nconst ERC1155_BALANCE_OF_FUNCTION = AbiFunction.from(\n 'function balanceOf(address account, uint256 id) view returns (uint256)',\n);\nconst ERC1155_BALANCE_OF_BATCH_FUNCTION = AbiFunction.from(\n 'function balanceOfBatch(address[] accounts, uint256[] ids) view returns (uint256[])',\n);\nconst CTF_SPLIT_POSITION_FUNCTION = AbiFunction.from(\n 'function splitPosition(address collateralToken, bytes32 parentCollectionId, bytes32 conditionId, uint256[] partition, uint256 amount)',\n);\nconst CTF_MERGE_POSITIONS_FUNCTION = AbiFunction.from(\n 'function mergePositions(address collateralToken, bytes32 parentCollectionId, bytes32 conditionId, uint256[] partition, uint256 amount)',\n);\nconst CTF_REDEEM_POSITIONS_FUNCTION = AbiFunction.from(\n 'function redeemPositions(address collateralToken, bytes32 parentCollectionId, bytes32 conditionId, uint256[] indexSets)',\n);\nconst NEG_RISK_REDEEM_POSITIONS_FUNCTION = AbiFunction.from(\n 'function redeemPositions(bytes32 conditionId, uint256[] amounts)',\n);\nconst ROUTER_SPLIT_FUNCTION = AbiFunction.from(\n 'function split(bytes31 conditionId, uint256 amount)',\n);\nconst ROUTER_CONVERT_FUNCTION = AbiFunction.from(\n 'function convert(bytes29 eventId, uint16 conditionIndex, uint256 amount)',\n);\nconst ROUTER_HORIZONTAL_SPLIT_FUNCTION = AbiFunction.from(\n 'function horizontalSplit(bytes29 eventId, uint256 amount)',\n);\nconst ROUTER_HORIZONTAL_MERGE_FUNCTION = AbiFunction.from(\n 'function horizontalMerge(bytes29 eventId, uint256 amount)',\n);\nconst ROUTER_MERGE_FUNCTION = AbiFunction.from(\n 'function merge(bytes31 conditionId, uint256 amount)',\n);\nconst ROUTER_REDEEM_FUNCTION = AbiFunction.from(\n 'function redeem(bytes31 conditionId, uint256 outcomeIndex, uint256 amount)',\n);\nconst COMBINATORIAL_MODULE_PREPARE_CONDITION_FUNCTION = AbiFunction.from(\n 'function prepareCondition(uint256[] legs) returns (bytes31)',\n);\nconst SAFE_MULTISEND_FUNCTION = AbiFunction.from('function multiSend(bytes)');\nconst PROXY_FACTORY_FUNCTION = AbiFunction.from(\n 'function proxy((uint8 typeCode, address to, uint256 value, bytes data)[] calls) returns (bytes[])',\n);\nconst BINARY_OUTCOME_PARTITION = [1n, 2n] as const;\nconst BINARY_OUTCOME_INDEX_SETS = [1n, 2n] as const;\n\n/** @internal */\nexport const MAX_UINT256 = (1n << 256n) - 1n;\n\nexport type Erc20ApprovalCallError = UserInputError;\nexport const Erc20ApprovalCallError = makeErrorGuard(UserInputError);\n\n/**\n * Creates a transaction call for `approve(address,uint256)` on an ERC-20 token.\n *\n * @throws {@link Erc20ApprovalCallError}\n * Thrown when the approval amount is invalid.\n */\nexport function erc20ApprovalCall(\n tokenAddress: EvmAddress,\n spender: EvmAddress,\n amount: bigint,\n): TransactionCall {\n if (amount < 0n) {\n throw new UserInputError('Approval amount must be non-negative');\n }\n\n if (amount > MAX_UINT256) {\n throw new UserInputError('Approval amount exceeds uint256 range');\n }\n\n return {\n data: encodeErc20ApproveCall(spender, amount),\n to: tokenAddress,\n };\n}\n\n/** @internal */\nexport function erc20AllowanceCall(\n tokenAddress: EvmAddress,\n owner: EvmAddress,\n spender: EvmAddress,\n): TransactionCall {\n return {\n data: AbiFunction.encodeData(ERC20_ALLOWANCE_FUNCTION, [owner, spender]),\n to: tokenAddress,\n };\n}\n\n/** @internal */\nexport function decodeErc20AllowanceResult(data: HexString): bigint {\n return AbiFunction.decodeResult(ERC20_ALLOWANCE_FUNCTION, data);\n}\n\n/**\n * Creates a transaction call for `setApprovalForAll(address,bool)` on an ERC-1155 token.\n */\nexport function erc1155ApprovalForAllCall(\n tokenAddress: EvmAddress,\n operator: EvmAddress,\n approved: boolean,\n): TransactionCall {\n return {\n data: encodeErc1155SetApprovalForAllCall(operator, approved),\n to: tokenAddress,\n };\n}\n\n/** @internal */\nexport function erc1155IsApprovedForAllCall(\n tokenAddress: EvmAddress,\n owner: EvmAddress,\n operator: EvmAddress,\n): TransactionCall {\n return {\n data: AbiFunction.encodeData(ERC1155_IS_APPROVED_FOR_ALL_FUNCTION, [\n owner,\n operator,\n ]),\n to: tokenAddress,\n };\n}\n\n/** @internal */\nexport function decodeErc1155IsApprovedForAllResult(data: HexString): boolean {\n return AbiFunction.decodeResult(ERC1155_IS_APPROVED_FOR_ALL_FUNCTION, data);\n}\n\n/** @internal */\nexport function erc1155BalanceOfCall(\n tokenAddress: EvmAddress,\n owner: EvmAddress,\n id: PositionId,\n): TransactionCall {\n return {\n data: AbiFunction.encodeData(ERC1155_BALANCE_OF_FUNCTION, [\n owner,\n expectUint256(BigInt(id), 'Position ID'),\n ]),\n to: tokenAddress,\n };\n}\n\n/** @internal */\nexport function decodeErc1155BalanceOfResult(data: HexString): bigint {\n return AbiFunction.decodeResult(ERC1155_BALANCE_OF_FUNCTION, data);\n}\n\n/** @internal */\nexport function erc1155BalanceOfBatchCall(\n tokenAddress: EvmAddress,\n owner: EvmAddress,\n ids: readonly (PositionId | TokenId)[],\n): TransactionCall {\n return {\n data: AbiFunction.encodeData(ERC1155_BALANCE_OF_BATCH_FUNCTION, [\n ids.map(() => owner),\n ids.map((id) => expectUint256(BigInt(id), 'id')),\n ]),\n to: tokenAddress,\n };\n}\n\n/** @internal */\nexport function decodeErc1155BalanceOfBatchResult(\n data: HexString,\n): readonly bigint[] {\n return AbiFunction.decodeResult(ERC1155_BALANCE_OF_BATCH_FUNCTION, data);\n}\n\nexport type Erc20TransferCallError = UserInputError;\nexport const Erc20TransferCallError = makeErrorGuard(UserInputError);\n\n/**\n * Creates a transaction call for `transfer(address,uint256)` on an ERC-20 token.\n *\n * @throws {@link Erc20TransferCallError}\n * Thrown when the transfer amount is invalid.\n */\nexport function erc20TransferCall(\n tokenAddress: EvmAddress,\n recipient: EvmAddress,\n amount: bigint,\n): TransactionCall {\n if (amount < 0n) {\n throw new UserInputError('Transfer amount must be non-negative');\n }\n\n if (amount > MAX_UINT256) {\n throw new UserInputError('Transfer amount exceeds uint256 range');\n }\n\n return {\n data: encodeErc20TransferCall(recipient, amount),\n to: tokenAddress,\n };\n}\n\n/** @internal */\nexport function authorizeSessionSignerCall(\n walletAddress: EvmAddress,\n sessionSigner: EvmAddress,\n validUntil: bigint,\n): TransactionCall {\n return {\n data: AbiFunction.encodeData(\n DEPOSIT_WALLET_AUTHORIZE_SESSION_SIGNER_FUNCTION,\n [sessionSigner, expectUint256(validUntil, 'Session key expiry')],\n ),\n to: walletAddress,\n };\n}\n\n/** @internal */\nexport function revokeSessionSignerCall(\n walletAddress: EvmAddress,\n sessionSigner: EvmAddress,\n): TransactionCall {\n return {\n data: AbiFunction.encodeData(\n DEPOSIT_WALLET_REVOKE_SESSION_SIGNER_FUNCTION,\n [sessionSigner],\n ),\n to: walletAddress,\n };\n}\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type PerpsDepositCallError = UserInputError;\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport const PerpsDepositCallError = makeErrorGuard(UserInputError);\n\n/**\n * Creates a transaction call for Perps `deposit(address,uint256,address)`.\n *\n * @throws {@link PerpsDepositCallError}\n * Thrown when the deposit amount is invalid.\n *\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport function perpsDepositCall(\n depositContractAddress: EvmAddress,\n tokenAddress: EvmAddress,\n amount: bigint,\n to: EvmAddress,\n): TransactionCall {\n if (amount <= 0n) {\n throw new UserInputError('Perps deposit amount must be positive');\n }\n\n return {\n data: AbiFunction.encodeData(PERPS_DEPOSIT_FUNCTION, [\n tokenAddress,\n expectUint256(amount, 'Perps deposit amount'),\n to,\n ]),\n to: depositContractAddress,\n };\n}\n\nexport type CtfSplitPositionCallError = UserInputError;\nexport const CtfSplitPositionCallError = makeErrorGuard(UserInputError);\n\n/**\n * Creates a transaction call for `splitPosition(address,bytes32,bytes32,uint256[],uint256)`.\n * Works with Conditional Tokens and the deployed NegRisk adapter.\n *\n * @remarks\n * This is a low-level transaction builder that most SDK consumers will not need.\n *\n * @throws {@link CtfSplitPositionCallError}\n * Thrown when the amount is invalid.\n */\nexport function ctfSplitPositionCall(\n targetAddress: EvmAddress,\n collateralTokenAddress: EvmAddress,\n conditionId: ConditionId,\n amount: bigint,\n): TransactionCall {\n return {\n data: encodeSplitPositionCall(collateralTokenAddress, conditionId, amount),\n to: targetAddress,\n };\n}\n\nexport type CtfMergePositionsCallError = UserInputError;\nexport const CtfMergePositionsCallError = makeErrorGuard(UserInputError);\n\n/**\n * Creates a transaction call for `mergePositions(address,bytes32,bytes32,uint256[],uint256)`.\n * Works with both the standard and neg-risk collateral adapters.\n *\n * @remarks\n * This is a low-level transaction builder that most SDK consumers will not need.\n *\n * @throws {@link CtfMergePositionsCallError}\n * Thrown when the amount is invalid.\n */\nexport function ctfMergePositionsCall(\n targetAddress: EvmAddress,\n collateralTokenAddress: EvmAddress,\n conditionId: ConditionId,\n amount: bigint,\n): TransactionCall {\n return {\n data: encodeMergePositionsCall(collateralTokenAddress, conditionId, amount),\n to: targetAddress,\n };\n}\n\nexport type CtfRedeemPositionsCallError = UserInputError;\nexport const CtfRedeemPositionsCallError = makeErrorGuard(UserInputError);\n\n/**\n * Creates a transaction call for `redeemPositions(address,bytes32,bytes32,uint256[])`\n * on the deployed Conditional Tokens contract for a standard CTF market.\n *\n * @remarks\n * This is a low-level transaction builder that most SDK consumers will not need.\n *\n * @throws {@link CtfRedeemPositionsCallError}\n * Thrown when the condition is invalid.\n */\nexport function ctfRedeemPositionsCall(\n conditionalTokensAddress: EvmAddress,\n collateralTokenAddress: EvmAddress,\n conditionId: ConditionId,\n): TransactionCall {\n return {\n data: encodeCtfRedeemPositionsCall(collateralTokenAddress, conditionId),\n to: conditionalTokensAddress,\n };\n}\n\n/** Redeems NegRisk YES/NO CTF balances through the deployed adapter. */\nexport function negRiskRedeemPositionsCall(\n adapterAddress: EvmAddress,\n conditionId: ConditionId,\n amounts: readonly [bigint, bigint],\n): TransactionCall {\n if (amounts.some((amount) => amount < 0n)) {\n throw new UserInputError('Redemption amounts cannot be negative');\n }\n return {\n to: adapterAddress,\n data: AbiFunction.encodeData(NEG_RISK_REDEEM_POSITIONS_FUNCTION, [\n conditionId,\n [...amounts],\n ]),\n };\n}\n\nexport type RouterConvertCallError = UserInputError;\nexport const RouterConvertCallError = makeErrorGuard(UserInputError);\n\n/**\n * Encodes a Router conversion of NO into every other condition's YES.\n * Includes Other unless converting NO(Other).\n * Accepts a bytes29 or zero-padded bytes32 protocol event ID, an index from zero through\n * the event arity (Other), and a positive uint256 amount in six-decimal base units.\n * @throws {@link RouterConvertCallError} Thrown when input is invalid.\n */\nexport function routerConvertCall(\n routerAddress: EvmAddress,\n protocolEventId: string,\n conditionIndex: number,\n amount: bigint,\n): TransactionCall {\n const params = parseUserInput(\n { protocolEventId, conditionIndex, amount },\n ConvertInputSchema,\n );\n return {\n to: routerAddress,\n data: AbiFunction.encodeData(ROUTER_CONVERT_FUNCTION, [\n params.protocolEventId,\n params.conditionIndex,\n params.amount,\n ]),\n };\n}\n\nexport type RouterHorizontalSplitCallError = UserInputError;\nexport const RouterHorizontalSplitCallError = makeErrorGuard(UserInputError);\n\n/**\n * Encodes a Router split of pUSD into YES for every condition, including Other.\n * Accepts a bytes29 or zero-padded bytes32 protocol event ID and a positive uint256 amount\n * in six-decimal base units.\n * @throws {@link RouterHorizontalSplitCallError} Thrown when input is invalid.\n */\nexport function routerHorizontalSplitCall(\n routerAddress: EvmAddress,\n protocolEventId: string,\n amount: bigint,\n): TransactionCall {\n const params = parseUserInput(\n { protocolEventId, amount },\n HorizontalOperationInputSchema,\n );\n return {\n to: routerAddress,\n data: AbiFunction.encodeData(ROUTER_HORIZONTAL_SPLIT_FUNCTION, [\n params.protocolEventId,\n params.amount,\n ]),\n };\n}\n\nexport type RouterHorizontalMergeCallError = UserInputError;\nexport const RouterHorizontalMergeCallError = makeErrorGuard(UserInputError);\n\n/**\n * Encodes a Router merge of equal YES amounts from every condition, including Other, into pUSD.\n * Accepts a bytes29 or zero-padded bytes32 protocol event ID and a positive uint256 amount\n * per condition in six-decimal base units.\n * @throws {@link RouterHorizontalMergeCallError} Thrown when input is invalid.\n */\nexport function routerHorizontalMergeCall(\n routerAddress: EvmAddress,\n protocolEventId: string,\n amount: bigint,\n): TransactionCall {\n const params = parseUserInput(\n { protocolEventId, amount },\n HorizontalOperationInputSchema,\n );\n return {\n to: routerAddress,\n data: AbiFunction.encodeData(ROUTER_HORIZONTAL_MERGE_FUNCTION, [\n params.protocolEventId,\n params.amount,\n ]),\n };\n}\n\nexport type RouterSplitCallError = UserInputError;\nexport const RouterSplitCallError = makeErrorGuard(UserInputError);\n\n/**\n * Creates a transaction call for protocol v2 Router `split(bytes31,uint256)`.\n *\n * @throws {@link RouterSplitCallError}\n * Thrown when the condition ID or amount is invalid.\n */\nexport function routerSplitCall(\n routerAddress: EvmAddress,\n conditionId: ConditionId | ComboConditionId,\n amount: bigint,\n): TransactionCall {\n return {\n data: AbiFunction.encodeData(ROUTER_SPLIT_FUNCTION, [\n normalizeProtocolV2ConditionId(conditionId),\n expectUint256(amount, 'Split amount'),\n ]),\n to: routerAddress,\n };\n}\n\nexport type RouterMergeCallError = UserInputError;\nexport const RouterMergeCallError = makeErrorGuard(UserInputError);\n\n/**\n * Creates a transaction call for protocol v2 Router `merge(bytes31,uint256)`.\n *\n * @throws {@link RouterMergeCallError}\n * Thrown when the condition ID or amount is invalid.\n */\nexport function routerMergeCall(\n routerAddress: EvmAddress,\n conditionId: ConditionId | ComboConditionId,\n amount: bigint,\n): TransactionCall {\n return {\n data: AbiFunction.encodeData(ROUTER_MERGE_FUNCTION, [\n normalizeProtocolV2ConditionId(conditionId),\n expectUint256(amount, 'Merge amount'),\n ]),\n to: routerAddress,\n };\n}\n\nexport type RouterRedeemCallError = UserInputError;\nexport const RouterRedeemCallError = makeErrorGuard(UserInputError);\n\n/**\n * Creates a transaction call for protocol v2 Router `redeem(bytes31,uint256,uint256)`.\n *\n * @throws {@link RouterRedeemCallError}\n * Thrown when the condition ID, outcome index, or amount is invalid.\n */\nexport function routerRedeemCall(\n routerAddress: EvmAddress,\n conditionId: ConditionId | ComboConditionId,\n outcomeIndex: 0 | 1,\n amount: bigint,\n): TransactionCall {\n return {\n data: AbiFunction.encodeData(ROUTER_REDEEM_FUNCTION, [\n normalizeProtocolV2ConditionId(conditionId),\n BigInt(expectProtocolV2OutcomeIndex(outcomeIndex)),\n expectUint256(amount, 'Redeem amount'),\n ]),\n to: routerAddress,\n };\n}\n\nexport type CombinatorialPrepareConditionCallError = UserInputError;\nexport const CombinatorialPrepareConditionCallError =\n makeErrorGuard(UserInputError);\n\n/**\n * Creates a transaction call for CombinatorialModule `prepareCondition(uint256[])`.\n *\n * @throws {@link CombinatorialPrepareConditionCallError}\n * Thrown when any leg position ID is invalid.\n */\nexport function combinatorialPrepareConditionCall(\n combinatorialModuleAddress: EvmAddress,\n legs: CanonicalComboLegs,\n): TransactionCall {\n return {\n data: AbiFunction.encodeData(\n COMBINATORIAL_MODULE_PREPARE_CONDITION_FUNCTION,\n [legs.map((leg) => expectUint256(leg, 'Leg position ID'))],\n ),\n to: combinatorialModuleAddress,\n };\n}\n\nfunction encodeErc20ApproveCall(\n spender: EvmAddress,\n amount: bigint,\n): HexString {\n invariant(amount >= 0n, 'Approval amount must be non-negative');\n\n return AbiFunction.encodeData(ERC20_APPROVE_FUNCTION, [spender, amount]);\n}\n\nfunction encodeErc1155SetApprovalForAllCall(\n operator: EvmAddress,\n approved: boolean,\n): HexString {\n return AbiFunction.encodeData(ERC1155_SET_APPROVAL_FOR_ALL_FUNCTION, [\n operator,\n approved,\n ]);\n}\n\nfunction encodeErc20TransferCall(\n recipient: EvmAddress,\n amount: bigint,\n): HexString {\n return AbiFunction.encodeData(ERC20_TRANSFER_FUNCTION, [recipient, amount]);\n}\n\nfunction encodeSplitPositionCall(\n collateralTokenAddress: EvmAddress,\n conditionId: ConditionId,\n amount: bigint,\n): HexString {\n return AbiFunction.encodeData(CTF_SPLIT_POSITION_FUNCTION, [\n collateralTokenAddress,\n ZERO_BYTES32,\n conditionId,\n BINARY_OUTCOME_PARTITION,\n expectUint256(amount, 'Split amount'),\n ]);\n}\n\nfunction encodeMergePositionsCall(\n collateralTokenAddress: EvmAddress,\n conditionId: ConditionId,\n amount: bigint,\n): HexString {\n return AbiFunction.encodeData(CTF_MERGE_POSITIONS_FUNCTION, [\n collateralTokenAddress,\n ZERO_BYTES32,\n conditionId,\n BINARY_OUTCOME_PARTITION,\n expectUint256(amount, 'Merge amount'),\n ]);\n}\n\nfunction encodeCtfRedeemPositionsCall(\n collateralTokenAddress: EvmAddress,\n conditionId: ConditionId,\n): HexString {\n return AbiFunction.encodeData(CTF_REDEEM_POSITIONS_FUNCTION, [\n collateralTokenAddress,\n ZERO_BYTES32,\n conditionId,\n BINARY_OUTCOME_INDEX_SETS,\n ]);\n}\n\nfunction expectUint256(value: bigint, label: string): bigint {\n if (value < 0n) {\n throw new UserInputError(`${label} must be non-negative`);\n }\n\n if (value > MAX_UINT256) {\n throw new UserInputError(`${label} exceeds uint256 range`);\n }\n\n return value;\n}\n\nfunction normalizeProtocolV2ConditionId(\n conditionId: ConditionId | ComboConditionId,\n): HexString {\n if (PROTOCOL_V2_CONDITION_ID_BYTES31_PATTERN.test(conditionId)) {\n return conditionId.toLowerCase() as HexString;\n }\n\n if (PROTOCOL_V2_CONDITION_ID_BYTES32_PATTERN.test(conditionId)) {\n const normalized = conditionId.toLowerCase();\n if (normalized.endsWith('00') || normalized.endsWith('01')) {\n return normalized.slice(0, BYTES31_HEX_LENGTH) as HexString;\n }\n }\n\n throw new UserInputError(\n 'Protocol v2 condition ID must be bytes31, or bytes32 with a binary outcome byte',\n );\n}\n\nfunction expectProtocolV2OutcomeIndex(outcomeIndex: 0 | 1): 0 | 1 {\n if (outcomeIndex !== 0 && outcomeIndex !== 1) {\n throw new UserInputError('Protocol v2 outcome index must be 0 or 1');\n }\n\n return outcomeIndex;\n}\n\n/** @internal */\nexport function encodeProxyCall(calls: readonly TransactionCall[]): HexString {\n return AbiFunction.encodeData(PROXY_FACTORY_FUNCTION, [\n calls.map((call) => ({\n typeCode: 1,\n to: call.to,\n value: call.value ?? 0n,\n data: call.data,\n })),\n ]);\n}\n\n/** @internal */\nexport function encodeSafeMultisendCall(\n calls: readonly TransactionCall[],\n): HexString {\n const encodedTransactions = calls.map((call) =>\n encodeSafeMultisendTransaction(call),\n );\n\n return AbiFunction.encodeData(SAFE_MULTISEND_FUNCTION, [\n encodedTransactions.length === 0\n ? '0x'\n : AbiParameters.encodePacked(\n Array.from({ length: encodedTransactions.length }, () => 'bytes'),\n encodedTransactions,\n ),\n ]);\n}\n\nfunction encodeSafeMultisendTransaction(call: TransactionCall): HexString {\n const value = call.value ?? 0n;\n\n return AbiParameters.encodePacked(\n ['uint8', 'address', 'uint256', 'uint256', 'bytes'],\n [0, call.to, value, BigInt((call.data.length - 2) / 2), call.data],\n );\n}\n","import type { TransactionId } from '@kuest/bindings';\nimport {\n type EvmAddress,\n type EvmSignature,\n type HexString,\n invariant,\n type TxHash,\n} from '@kuest/types';\nimport type { WaitForGaslessTransactionError } from './actions';\nimport {\n makeErrorGuard,\n RateLimitError,\n RequestRejectedError,\n TimeoutError,\n TransactionFailedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n} from './errors';\nimport type { Fetch } from './request-options';\n\nexport type TypedDataField = {\n name: string;\n type: string;\n};\n\nexport type TypedData = Record<string, readonly TypedDataField[]>;\n\nexport type TypedDataDomain = {\n chainId?: number;\n name?: string;\n salt?: HexString;\n verifyingContract?: EvmAddress;\n version?: string;\n};\n\nexport type TypedDataPayload = {\n domain: TypedDataDomain;\n message: Record<string, unknown>;\n primaryType: string;\n types: TypedData;\n};\n\nexport type TransactionCall = {\n data: HexString;\n to: EvmAddress;\n value?: bigint;\n};\n\nexport type SignerTransactionRequest = {\n chainId: number;\n data?: HexString;\n to: EvmAddress;\n value?: bigint;\n};\n\n/** @internal */\nexport type ApiKeyAuthorizationRequest = {\n method: 'DELETE' | 'GET' | 'PATCH' | 'POST';\n path: string;\n body?: string;\n};\n\n/** HTTP controls supplied to API key authorization for one request. @internal */\nexport type ApiKeyAuthorizationOptions = {\n fetch?: Fetch;\n signal?: AbortSignal;\n};\n\nexport interface ApiKeyAuthorization {\n /** @internal */\n get isBuilderKey(): boolean;\n\n /** @internal */\n get supportGasless(): boolean;\n\n /** @internal */\n authorize(\n request: ApiKeyAuthorizationRequest,\n options?: ApiKeyAuthorizationOptions,\n ): Promise<HeadersInit>;\n}\n\nexport type TransactionOutcome = {\n /**\n * The hash of the settled transaction.\n */\n transactionHash: TxHash;\n /**\n * The unique identifier of the settled transaction when submitted through the SDK relayer,\n * or null if the transaction was submitted directly to the blockchain.\n */\n transactionId: TransactionId | null;\n};\n\nexport type WaitForTransactionError = WaitForGaslessTransactionError;\nexport const WaitForTransactionError = makeErrorGuard(\n RateLimitError,\n RequestRejectedError,\n TimeoutError,\n TransactionFailedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\nexport interface TransactionHandle {\n /**\n * The hash of the submitted transaction, or null if the transaction is pending submission.\n */\n readonly transactionHash: TxHash | null;\n /**\n * The unique identifier of the submitted transaction when submitted through the SDK relayer,\n * or null if the transaction was submitted directly to the blockchain.\n */\n readonly transactionId: TransactionId | null;\n /**\n * Waits for the submitted transaction to settle.\n *\n * @throws {@link WaitForTransactionError}\n * Thrown when polling times out, the transaction reaches a terminal failure state, or a later read returns an unexpected response.\n */\n wait(): Promise<TransactionOutcome>;\n}\n\nexport type Signer = {\n getAddress(): Promise<EvmAddress>;\n signTypedData(payload: TypedDataPayload): Promise<EvmSignature>;\n signMessage(message: HexString): Promise<EvmSignature>;\n sendTransaction(\n request: SignerTransactionRequest,\n ): Promise<TransactionHandle>;\n};\n\n/** @internal */\nexport function expectTransactionHandle(\n value: unknown,\n message = 'Expected a TransactionHandle',\n): TransactionHandle {\n invariant(\n typeof value === 'object' &&\n value !== null &&\n 'transactionHash' in value &&\n 'transactionId' in value &&\n 'wait' in value &&\n typeof value.wait === 'function',\n message,\n );\n return value as TransactionHandle;\n}\n","import type { EvmAddress, EvmSignature, HexString } from '@kuest/types';\nimport { CancelledSigningError, makeErrorGuard, SigningError } from './errors';\nimport type {\n Signer,\n SignerTransactionRequest,\n TransactionCall,\n TransactionHandle,\n TypedDataPayload,\n} from './types';\n\nexport type RequestAddressRequest = {\n kind: 'requestAddress';\n};\n\nexport type SignAuthMessageRequest = {\n kind: 'signAuthMessage';\n payload: TypedDataPayload;\n};\n\nexport type SendErc20ApprovalTransactionRequest = {\n kind: 'sendErc20ApprovalTransaction';\n request: SignerTransactionRequest;\n};\n\nexport type SendErc1155ApprovalForAllTransactionRequest = {\n kind: 'sendErc1155ApprovalForAllTransaction';\n request: SignerTransactionRequest;\n};\n\nexport type SendErc20TransferTransactionRequest = {\n kind: 'sendErc20TransferTransaction';\n request: SignerTransactionRequest;\n};\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type SendPerpsDepositTransactionRequest = {\n kind: 'sendPerpsDepositTransaction';\n request: SignerTransactionRequest;\n};\n\nexport type SignGaslessTypedDataRequest = {\n kind: 'signGaslessTypedData';\n payload: TypedDataPayload;\n};\n\nexport type SignGaslessMessageRequest = {\n kind: 'signGaslessMessage';\n payload: HexString;\n};\n\nexport type SendConvertTransactionRequest = {\n kind: 'sendConvertTransaction';\n request: SignerTransactionRequest;\n};\n\nexport type SendHorizontalSplitTransactionRequest = {\n kind: 'sendHorizontalSplitTransaction';\n request: SignerTransactionRequest;\n};\n\nexport type SendHorizontalMergeTransactionRequest = {\n kind: 'sendHorizontalMergeTransaction';\n request: SignerTransactionRequest;\n};\n\nexport type SendSplitPositionTransactionRequest = {\n kind: 'sendSplitPositionTransaction';\n request: SignerTransactionRequest;\n};\n\nexport type SendMergePositionsTransactionRequest = {\n kind: 'sendMergePositionsTransaction';\n request: SignerTransactionRequest;\n};\n\nexport type SendRedeemPositionsTransactionRequest = {\n kind: 'sendRedeemPositionsTransaction';\n request: SignerTransactionRequest;\n};\n\nexport type SignOrderRequest = {\n kind: 'signOrder';\n payload: TypedDataPayload;\n};\n\nexport type AuthenticationWorkflowRequest =\n | RequestAddressRequest\n | SignAuthMessageRequest;\n\nexport type AuthenticationWorkflow<TReturn> = AsyncGenerator<\n AuthenticationWorkflowRequest,\n TReturn,\n EvmAddress | EvmSignature\n>;\n\nexport type AuthenticateWith = <TReturn>(\n workflow: AuthenticationWorkflow<TReturn>,\n) => Promise<TReturn>;\n\nexport type AuthenticateWithError = CancelledSigningError | SigningError;\nexport const AuthenticateWithError = makeErrorGuard(\n CancelledSigningError,\n SigningError,\n);\nexport type CompleteWithError = CancelledSigningError | SigningError;\nexport const CompleteWithError = makeErrorGuard(\n CancelledSigningError,\n SigningError,\n);\n\nexport type CompleteWorkflowRequest =\n | RequestAddressRequest\n | SendErc20ApprovalTransactionRequest\n | SendErc1155ApprovalForAllTransactionRequest\n | SendErc20TransferTransactionRequest\n | SendPerpsDepositTransactionRequest\n | SignGaslessTypedDataRequest\n | SignGaslessMessageRequest\n | SendConvertTransactionRequest\n | SendHorizontalSplitTransactionRequest\n | SendHorizontalMergeTransactionRequest\n | SendSplitPositionTransactionRequest\n | SendMergePositionsTransactionRequest\n | SendRedeemPositionsTransactionRequest\n | SignOrderRequest;\n\nexport type CompleteWorkflowNext =\n | EvmAddress\n | EvmSignature\n | TransactionHandle;\n\nexport type CompleteWith = <TRequest extends CompleteWorkflowRequest, TReturn>(\n workflow: AsyncGenerator<TRequest, TReturn, CompleteWorkflowNext>,\n) => Promise<TReturn>;\n\n/** @internal */\nexport function authenticateWith(signer: Signer): AuthenticateWith {\n return async function authenticate(workflow) {\n let result = await workflow.next();\n\n while (!result.done) {\n try {\n switch (result.value.kind) {\n case 'requestAddress':\n result = await workflow.next(await signer.getAddress());\n break;\n case 'signAuthMessage':\n result = await workflow.next(\n await signer.signTypedData(result.value.payload),\n );\n break;\n }\n } catch (error) {\n result = await workflow.throw(error);\n }\n }\n\n return result.value;\n };\n}\n\n/** @internal */\nexport function completeWith(signer: Signer): CompleteWith {\n return async function complete(workflow) {\n let result = await workflow.next();\n\n while (!result.done) {\n try {\n switch (result.value.kind) {\n case 'requestAddress':\n result = await workflow.next(await signer.getAddress());\n break;\n\n case 'signGaslessTypedData':\n case 'signOrder':\n result = await workflow.next(\n await signer.signTypedData(result.value.payload),\n );\n break;\n\n case 'signGaslessMessage':\n result = await workflow.next(\n await signer.signMessage(result.value.payload),\n );\n break;\n\n case 'sendErc20ApprovalTransaction':\n case 'sendErc1155ApprovalForAllTransaction':\n case 'sendErc20TransferTransaction':\n case 'sendPerpsDepositTransaction':\n case 'sendMergePositionsTransaction':\n case 'sendRedeemPositionsTransaction':\n case 'sendConvertTransaction':\n case 'sendHorizontalSplitTransaction':\n case 'sendHorizontalMergeTransaction':\n case 'sendSplitPositionTransaction':\n result = await workflow.next(\n await signer.sendTransaction(result.value.request),\n );\n break;\n }\n } catch (error) {\n result = await workflow.throw(error);\n }\n }\n\n return result.value;\n };\n}\n\nexport function requestAddress(): RequestAddressRequest {\n return {\n kind: 'requestAddress',\n };\n}\n\nexport function signerTransactionRequest(\n chainId: number,\n call: TransactionCall,\n): SignerTransactionRequest {\n return {\n chainId,\n ...call,\n };\n}\n","import {\n type ApprovalContract,\n ApprovalStandard,\n type ApprovalsSnapshot,\n} from '@kuest/bindings/data';\nimport type { EvmAddress } from '@kuest/types';\nimport { UnexpectedResponseError } from '../errors';\nimport type { TradingApprovalRequirements } from './approvals';\n\n/**\n * Resolves SDK-owned requirements against an indexed approval snapshot.\n *\n * Only the rows matching a required token and spender are evaluated; every\n * other row in the snapshot is ignored so catalog growth cannot break reads.\n */\nexport function resolveIndexedTradingApprovals(\n snapshot: ApprovalsSnapshot,\n wallet: EvmAddress,\n chainId: number,\n required: TradingApprovalRequirements,\n): TradingApprovalRequirements {\n if (\n snapshot.address.toLowerCase() !== wallet.toLowerCase() ||\n snapshot.chainId !== chainId\n ) {\n throw new UnexpectedResponseError(\n 'Approval snapshot does not match the requested wallet and chain',\n );\n }\n\n function findApproval(\n token: EvmAddress,\n spender: EvmAddress,\n ): ApprovalContract {\n const matches = snapshot.contracts.filter(\n (row) =>\n row.token.toLowerCase() === token.toLowerCase() &&\n row.spender.toLowerCase() === spender.toLowerCase(),\n );\n const match = matches[0];\n\n if (matches.length !== 1 || !match) {\n throw new UnexpectedResponseError(\n 'Expected exactly one approval row for each required token and spender',\n );\n }\n\n return match;\n }\n\n return {\n erc20: required.erc20.filter((approval) => {\n const row = findApproval(approval.tokenAddress, approval.spenderAddress);\n if (row.standard !== ApprovalStandard.Erc20) {\n throw new UnexpectedResponseError('Expected an ERC-20 approval row');\n }\n\n // Persistent rows report \"max\" even when unapproved. Exact rows may\n // report a positive finite allowance as approved, below our requirement.\n return (\n !row.approved || (row.amount !== 'max' && row.amount < approval.amount)\n );\n }),\n erc1155: required.erc1155.filter((approval) => {\n const row = findApproval(approval.tokenAddress, approval.operatorAddress);\n if (row.standard !== ApprovalStandard.Erc1155) {\n throw new UnexpectedResponseError('Expected an ERC-1155 approval row');\n }\n\n return !row.approved;\n }),\n };\n}\n","import {\n EvmAddressSchema,\n type TransactionId,\n TransactionIdSchema,\n} from '@kuest/bindings';\nimport { WalletType } from '@kuest/bindings/gamma';\nimport {\n type GaslessTransaction,\n GaslessTransactionSchema,\n RelayerDeployedResponseSchema,\n type RelayerDepositWalletExecuteRequest,\n type RelayerExecuteParams,\n type RelayerExecuteRequest,\n RelayerExecuteRequestSchema,\n RelayerExecuteResponseSchema,\n type RelayerLegacyExecuteRequest,\n RelayerTransactionState,\n RelayerTransactionType,\n} from '@kuest/bindings/relayer';\nimport {\n delay,\n type EvmAddress,\n type EvmSignature,\n expectEvmAddress,\n expectEvmSignature,\n expectHexString,\n expectNonEmptyArray,\n type HexString,\n invariant,\n isHexString,\n type NonEmptyArray,\n type TxHash,\n ZERO_ADDRESS,\n} from '@kuest/types';\nimport { Bytes, Hash, TypedData as OxTypedData } from 'ox';\nimport { z } from 'zod';\nimport { encodeProxyCall, encodeSafeMultisendCall } from '../abis';\nimport type { BaseClient, BaseSecureClient } from '../clients';\nimport {\n makeErrorGuard,\n RateLimitError,\n RequestAbortedError,\n RequestRejectedError,\n TimeoutError,\n TransactionFailedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n} from '../errors';\nimport { parseUserInput } from '../input';\nimport { parseRequestOptions, type RequestOptions } from '../request-options';\nimport type {\n TransactionCall,\n TransactionHandle,\n TransactionOutcome,\n TypedDataField,\n TypedDataPayload,\n} from '../types';\nimport {\n deriveCurrentDepositWalletAddress,\n wrapDepositWalletSignature,\n} from '../wallet';\nimport {\n type RequestAddressRequest,\n requestAddress,\n type SignGaslessMessageRequest,\n type SignGaslessTypedDataRequest,\n} from '../workflow';\nimport { toSearchParams } from './params';\n\nconst EIP712_DOMAIN: readonly TypedDataField[] = [\n { name: 'chainId', type: 'uint256' },\n { name: 'verifyingContract', type: 'address' },\n];\n\nconst SAFE_TRANSACTION: readonly TypedDataField[] = [\n { name: 'to', type: 'address' },\n { name: 'value', type: 'uint256' },\n { name: 'data', type: 'bytes' },\n { name: 'operation', type: 'uint8' },\n { name: 'safeTxGas', type: 'uint256' },\n { name: 'baseGas', type: 'uint256' },\n { name: 'gasPrice', type: 'uint256' },\n { name: 'gasToken', type: 'address' },\n { name: 'refundReceiver', type: 'address' },\n { name: 'nonce', type: 'uint256' },\n];\n\nconst DEPOSIT_WALLET_DOMAIN_NAME = 'DepositWallet';\nconst DEPOSIT_WALLET_DOMAIN_VERSION = '1';\nconst DEPOSIT_WALLET_DEFAULT_DEADLINE_SECONDS = 600;\n\nconst DEPOSIT_WALLET_CALL: readonly TypedDataField[] = [\n { name: 'target', type: 'address' },\n { name: 'value', type: 'uint256' },\n { name: 'data', type: 'bytes' },\n];\n\nconst DEPOSIT_WALLET_BATCH: readonly TypedDataField[] = [\n { name: 'wallet', type: 'address' },\n { name: 'nonce', type: 'uint256' },\n { name: 'deadline', type: 'uint256' },\n { name: 'calls', type: 'Call[]' },\n];\n\nconst FetchExecuteParamsRequestSchema = z.object({\n address: z.string(),\n type: z.enum(RelayerTransactionType),\n});\n\nexport type FetchExecuteParamsRequest = z.input<\n typeof FetchExecuteParamsRequestSchema\n>;\n\nexport type FetchExecuteParamsError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchExecuteParamsError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Fetches the parameters needed to prepare a low-level transaction submission.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link FetchExecuteParamsError}\n * Thrown on failure.\n */\nexport async function fetchExecuteParams(\n client: BaseClient,\n request: FetchExecuteParamsRequest,\n options: RequestOptions = {},\n): Promise<RelayerExecuteParams> {\n const requestOptions = parseRequestOptions(options);\n const params = parseUserInput(request, FetchExecuteParamsRequestSchema);\n\n if (params.type !== RelayerTransactionType.WALLET) {\n throw new UserInputError('SDK relayer nonce requests require WALLET.');\n }\n return client.relayer.get('/nonce', {\n ...requestOptions,\n params: toSearchParams(params, { address: 'address', type: 'type' }),\n schema: z.object({ nonce: z.string().min(1) }).transform(({ nonce }) => ({\n address: expectEvmAddress(params.address),\n nonce,\n })),\n });\n}\n\nconst FetchGaslessTransactionRequestSchema = z.object({\n transactionId: TransactionIdSchema,\n});\n\nconst SDKTransactionResponseSchema = z\n .array(\n z.object({\n transactionID: TransactionIdSchema,\n transactionHash: z.string().nullish(),\n state: z.enum(RelayerTransactionState),\n failureReason: z.string().nullish(),\n }),\n )\n .min(1)\n .transform(([transaction]) => {\n if (transaction === undefined) {\n throw new UnexpectedResponseError('SDK relayer returned no transaction.');\n }\n return GaslessTransactionSchema.parse({\n transaction_id: transaction.transactionID,\n transaction_hash: transaction.transactionHash ?? '',\n state: transaction.state,\n error_msg: transaction.failureReason ?? null,\n });\n });\n\nexport type FetchGaslessTransactionRequest = z.input<\n typeof FetchGaslessTransactionRequestSchema\n>;\n\nconst IsWalletDeployedRequestSchema = z.object({\n wallet: EvmAddressSchema,\n type: z.enum(WalletType),\n});\n\nexport type IsWalletDeployedRequest = z.input<\n typeof IsWalletDeployedRequestSchema\n>;\n\nexport type IsWalletDeployedError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const IsWalletDeployedError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Checks whether a wallet is deployed for relayer-backed transactions.\n *\n * It only checks deployment status; it does not check trading approvals or complete\n * order-readiness.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link IsWalletDeployedError}\n * Thrown on failure.\n *\n * @example\n * ```ts\n * const deployed = await isWalletDeployed(client, {\n * wallet: '0x1234...',\n * });\n * ```\n */\nexport async function isWalletDeployed(\n client: BaseClient,\n request?: IsWalletDeployedRequest,\n options: RequestOptions = {},\n): Promise<boolean> {\n const requestOptions = parseRequestOptions(options);\n const params = await resolveWalletDeploymentTarget(\n client,\n request,\n requestOptions,\n );\n\n if (params.type !== WalletType.DEPOSIT_WALLET) {\n throw new UserInputError('SDK relayer supports Deposit Wallet only.');\n }\n\n return client.relayer\n .get('/deployed', {\n ...requestOptions,\n params: toSearchParams(\n {\n address: params.wallet,\n type:\n params.type === WalletType.DEPOSIT_WALLET\n ? RelayerTransactionType.WALLET\n : undefined,\n },\n { address: 'address', type: 'type' },\n ),\n schema: RelayerDeployedResponseSchema,\n })\n .then(({ deployed }) => deployed);\n}\n\nasync function resolveWalletDeploymentTarget(\n client: BaseClient,\n request: IsWalletDeployedRequest | undefined,\n options: RequestOptions = {},\n): Promise<z.output<typeof IsWalletDeployedRequestSchema>> {\n const requestOptions = parseRequestOptions(options);\n if (request !== undefined) {\n return parseUserInput(request, IsWalletDeployedRequestSchema);\n }\n\n if (!client.isSecureClient()) {\n throw new UserInputError(\n 'Gasless readiness inference requires a secure client. Pass a wallet and type when using a public client.',\n );\n }\n\n if (client.account.walletType !== WalletType.EOA) {\n return {\n wallet: client.account.wallet,\n type: client.account.walletType,\n };\n }\n\n return {\n wallet: await deriveCurrentDepositWalletAddress(\n client.rpc,\n client.account.signer,\n client.environment.walletDerivation,\n requestOptions,\n ),\n type: WalletType.DEPOSIT_WALLET,\n };\n}\n\nexport const GaslessTransactionMetadataSchema = z.string().max(500);\n\nconst GASLESS_SUBMIT_RETRY_ATTEMPTS = 10;\n\nexport type DeployDepositWalletError =\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const DeployDepositWalletError = makeErrorGuard(\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Deploys a Deposit Wallet for the authenticated signer.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link DeployDepositWalletError}\n * Thrown on failure.\n */\nexport async function deployDepositWallet(\n client: BaseSecureClient,\n): Promise<TransactionHandle> {\n invariant(\n client.hasBuilderApiKey,\n 'SDK Deposit Wallet deployment requires builder credentials.',\n );\n\n return executeGasless(client, {\n from: client.account.signer,\n metadata: 'Deploy Deposit Wallet',\n to: client.environment.walletDerivation.depositWalletFactory,\n type: RelayerTransactionType.WALLET_CREATE,\n });\n}\n\nexport type FetchGaslessTransactionError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchGaslessTransactionError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Fetches a submitted transaction.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link FetchGaslessTransactionError}\n * Thrown on failure.\n */\nexport async function fetchTransaction(\n client: BaseClient,\n request: FetchGaslessTransactionRequest,\n options: RequestOptions = {},\n): Promise<GaslessTransaction> {\n const requestOptions = parseRequestOptions(options);\n const params = parseUserInput(request, FetchGaslessTransactionRequestSchema);\n\n return client.relayer.get('/transaction', {\n ...requestOptions,\n params: new URLSearchParams({ id: params.transactionId }),\n schema: SDKTransactionResponseSchema,\n });\n}\n\nconst TransactionCallSchema = z.object({\n data: z.custom<HexString>(isHexString),\n to: EvmAddressSchema,\n value: z.bigint().optional(),\n});\n\nconst PrepareGaslessTransactionRequestSchema = z.object({\n calls: z\n .array(TransactionCallSchema)\n .min(1)\n .transform((val) => expectNonEmptyArray(val)),\n metadata: GaslessTransactionMetadataSchema,\n});\n\nexport type PrepareGaslessTransactionRequest = z.input<\n typeof PrepareGaslessTransactionRequestSchema\n>;\n\ntype PrepareGaslessTransactionParams = z.output<\n typeof PrepareGaslessTransactionRequestSchema\n>;\n\nexport type GaslessWorkflowRequest =\n | RequestAddressRequest\n | SignGaslessMessageRequest\n | SignGaslessTypedDataRequest;\n\nexport type GaslessWorkflow = AsyncGenerator<\n GaslessWorkflowRequest,\n TransactionHandle,\n EvmAddress | EvmSignature | TransactionHandle\n>;\n\nexport type PrepareGaslessTransactionError =\n | ExecuteGaslessError\n | FetchExecuteParamsError\n | UserInputError;\nexport const PrepareGaslessTransactionError = makeErrorGuard(\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Starts preparing a low-level transaction workflow from one or more calls.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link PrepareGaslessTransactionError}\n * Thrown on failure.\n */\nexport async function prepareGaslessTransaction(\n client: BaseSecureClient,\n request: PrepareGaslessTransactionRequest,\n): Promise<GaslessWorkflow> {\n const params = parseUserInput(\n request,\n PrepareGaslessTransactionRequestSchema,\n );\n\n invariant(\n client.hasBuilderApiKey,\n 'SDK gasless transactions require builder credentials.',\n );\n invariant(\n client.account.walletType === WalletType.DEPOSIT_WALLET,\n 'SDK gasless transactions require a Deposit Wallet.',\n );\n\n return async function* (): GaslessWorkflow {\n const signer = expectEvmAddress(yield requestAddress());\n\n invariant(\n signer === client.account.signer,\n 'Wallet client address does not match the authenticated signer',\n );\n\n for (\n let attempt = 0;\n attempt <= GASLESS_SUBMIT_RETRY_ATTEMPTS;\n attempt += 1\n ) {\n try {\n switch (client.account.walletType) {\n case WalletType.POLY_PROXY:\n return yield* prepareProxyWalletGaslessTransaction(client, params);\n case WalletType.DEPOSIT_WALLET:\n return yield* prepareDepositWalletGaslessTransaction(\n client,\n params,\n );\n case WalletType.GNOSIS_SAFE:\n return yield* prepareSafeWalletGaslessTransaction(client, params);\n }\n\n invariant(false, 'Unsupported wallet type for gasless transaction');\n } catch (error) {\n if (\n !isRetryableGaslessSubmitError(error) ||\n attempt === GASLESS_SUBMIT_RETRY_ATTEMPTS\n ) {\n throw error;\n }\n\n await delay(client.environment.relayerPollFrequencyMs);\n }\n }\n\n invariant(false, 'Expected gasless transaction retry loop to return');\n }.call(null);\n}\n\nasync function* prepareProxyWalletGaslessTransaction(\n client: BaseSecureClient,\n params: PrepareGaslessTransactionParams,\n): GaslessWorkflow {\n const payload = yield* buildProxyWalletExecuteRequest(\n client,\n params.calls,\n params.metadata,\n );\n\n return executeGasless(client, payload);\n}\n\n/**\n * Builds and signs a Proxy Wallet relay request without submitting it, so\n * callers can route the signed envelope to their own submission endpoint.\n *\n * @internal\n */\nexport async function* buildProxyWalletExecuteRequest(\n client: BaseSecureClient,\n calls: NonEmptyArray<TransactionCall>,\n metadata?: string,\n): AsyncGenerator<\n GaslessWorkflowRequest,\n RelayerLegacyExecuteRequest,\n EvmAddress | EvmSignature | TransactionHandle\n> {\n const executeParams = await fetchExecuteParams(client, {\n address: client.account.signer,\n type: RelayerTransactionType.PROXY,\n });\n\n const to = client.environment.walletDerivation.proxyFactory;\n const data = encodeProxyCall(calls);\n const relayerFee = '0';\n // Signed RelayHub parameter; the relayer applies its own execution gas price.\n const gasPrice = '0';\n const gasLimit = (\n await client.rpc.ethEstimateGas({\n data,\n from: client.account.signer,\n to,\n })\n ).toString();\n const relayHub = client.environment.contracts.relayHub;\n const relay = executeParams.address;\n\n const hash = buildProxyTransactionHash(\n client.account.signer,\n to,\n data,\n relayerFee,\n gasPrice,\n gasLimit,\n executeParams.nonce,\n relayHub,\n relay,\n );\n\n const signature = expectEvmSignature(yield signGaslessMessage(hash));\n\n return {\n data,\n from: client.account.signer,\n ...(metadata !== undefined && { metadata }),\n nonce: executeParams.nonce,\n proxyWallet: client.account.wallet,\n signature,\n signatureParams: {\n gasLimit,\n gasPrice,\n relay,\n relayHub,\n relayerFee,\n },\n to,\n type: RelayerTransactionType.PROXY,\n };\n}\n\n/**\n * Extracts the on-chain nonce reported by a submission rejection for a\n * Deposit Wallet batch signed with a mismatched nonce, when present.\n *\n * @internal\n */\nexport function extractOnChainNonceFromSubmitError(\n error: unknown,\n): string | undefined {\n if (!(error instanceof RequestRejectedError) || error.status !== 400) {\n return undefined;\n }\n\n const match =\n /batch nonce\\s+\\d+\\s+does not match on-chain nonce\\s+(\\d+)/i.exec(\n error.message,\n );\n\n return match?.[1];\n}\n\nasync function* prepareDepositWalletGaslessTransaction(\n client: BaseSecureClient,\n params: PrepareGaslessTransactionParams,\n): GaslessWorkflow {\n const payload = yield* buildDepositWalletExecuteRequest(\n client,\n params.calls,\n params.metadata,\n );\n\n try {\n return await executeGasless(client, payload);\n } catch (error) {\n const nonce = extractOnChainNonceFromSubmitError(error);\n if (nonce === undefined) {\n throw error;\n }\n\n const request = yield* resignDepositWalletExecuteRequest(\n client,\n payload,\n params.calls,\n nonce,\n );\n\n return executeGasless(client, request);\n }\n}\n\n/**\n * Builds and signs a Deposit Wallet batch execution request without\n * submitting it, so callers can route the signed envelope to their own\n * submission endpoint.\n *\n * @internal\n */\nexport async function* buildDepositWalletExecuteRequest(\n client: BaseSecureClient,\n calls: NonEmptyArray<TransactionCall>,\n metadata?: string,\n): AsyncGenerator<\n GaslessWorkflowRequest,\n RelayerDepositWalletExecuteRequest,\n EvmAddress | EvmSignature | TransactionHandle\n> {\n const executeParams = await fetchExecuteParams(client, {\n address: client.account.signer,\n type: RelayerTransactionType.WALLET,\n });\n const depositWalletCalls = calls.map(toDepositWalletCall);\n const deadline = `${Math.floor(Date.now() / 1000) + DEPOSIT_WALLET_DEFAULT_DEADLINE_SECONDS}`;\n\n const signature = wrapDepositWalletSignature(\n client.account,\n expectEvmSignature(\n yield signGaslessTypedData(\n createDepositWalletBatchTypedDataPayload({\n calls: depositWalletCalls,\n chainId: client.environment.chainId,\n deadline,\n nonce: executeParams.nonce,\n wallet: client.account.wallet,\n }),\n ),\n ),\n );\n\n return {\n depositWalletParams: {\n calls: depositWalletCalls,\n deadline,\n depositWallet: client.account.wallet,\n },\n from: client.account.signer,\n ...(metadata !== undefined && { metadata }),\n nonce: executeParams.nonce,\n signature,\n to: client.environment.walletDerivation.depositWalletFactory,\n type: RelayerTransactionType.WALLET,\n };\n}\n\n/**\n * Re-signs a previously built Deposit Wallet batch execution request with a\n * corrected nonce, leaving the batch otherwise unchanged.\n *\n * @internal\n */\nexport async function* resignDepositWalletExecuteRequest(\n client: BaseSecureClient,\n request: RelayerDepositWalletExecuteRequest,\n calls: NonEmptyArray<TransactionCall>,\n nonce: string,\n): AsyncGenerator<\n GaslessWorkflowRequest,\n RelayerDepositWalletExecuteRequest,\n EvmAddress | EvmSignature | TransactionHandle\n> {\n const signature = wrapDepositWalletSignature(\n client.account,\n expectEvmSignature(\n yield signGaslessTypedData(\n createDepositWalletBatchTypedDataPayload({\n calls: calls.map(toDepositWalletCall),\n chainId: client.environment.chainId,\n deadline: request.depositWalletParams.deadline,\n nonce,\n wallet: client.account.wallet,\n }),\n ),\n ),\n );\n\n return { ...request, nonce, signature };\n}\n\nasync function* prepareSafeWalletGaslessTransaction(\n client: BaseSecureClient,\n params: PrepareGaslessTransactionParams,\n): GaslessWorkflow {\n const payload = yield* buildSafeWalletExecuteRequest(\n client,\n params.calls,\n params.metadata,\n );\n\n return executeGasless(client, payload);\n}\n\n/**\n * Builds and signs a Safe transaction relay request without submitting it, so\n * callers can route the signed envelope to their own submission endpoint.\n *\n * @internal\n */\nexport async function* buildSafeWalletExecuteRequest(\n client: BaseSecureClient,\n calls: NonEmptyArray<TransactionCall>,\n metadata?: string,\n): AsyncGenerator<\n GaslessWorkflowRequest,\n RelayerLegacyExecuteRequest,\n EvmAddress | EvmSignature | TransactionHandle\n> {\n const executeParams = await fetchExecuteParams(client, {\n address: client.account.signer,\n type: RelayerTransactionType.SAFE,\n });\n const transaction = aggregateSafeTransactionCalls(\n calls,\n client.environment.contracts.safeMultisend,\n );\n\n const safePayload = createSafeTypedDataPayload({\n chainId: client.environment.chainId,\n data: transaction.data,\n nonce: executeParams.nonce,\n operation: transaction.operation,\n safeAddress: client.account.wallet,\n to: transaction.to,\n value: transaction.value,\n });\n\n const signature = expectEvmSignature(\n yield signGaslessMessage(\n expectHexString(\n OxTypedData.getSignPayload(\n safePayload as Parameters<typeof OxTypedData.getSignPayload>[0],\n ),\n ),\n ),\n );\n\n return {\n data: transaction.data,\n from: client.account.signer,\n ...(metadata !== undefined && { metadata }),\n nonce: executeParams.nonce,\n proxyWallet: client.account.wallet,\n signature: packSafeSignature(signature),\n signatureParams: createSafeSignatureParams(transaction.operation),\n to: transaction.to,\n type: RelayerTransactionType.SAFE,\n value: transaction.value > 0n ? `${transaction.value}` : undefined,\n };\n}\n\ntype ExecuteGaslessRequest = RelayerExecuteRequest;\n\ntype ExecuteGaslessError =\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\n\nasync function executeGasless(\n client: BaseClient,\n request: ExecuteGaslessRequest,\n): Promise<GaslessTransactionHandle> {\n const payload = parseUserInput(request, RelayerExecuteRequestSchema);\n if (\n payload.type !== RelayerTransactionType.WALLET &&\n payload.type !== RelayerTransactionType.WALLET_CREATE\n ) {\n throw new UserInputError(\n 'SDK relayer accepts WALLET and WALLET-CREATE only.',\n );\n }\n if (!client.hasBuilderApiKey) {\n throw new UserInputError(\n 'SDK relayer submissions require builder credentials.',\n );\n }\n\n const response = await client.relayer.post('/submit', {\n json: payload,\n schema: RelayerExecuteResponseSchema,\n });\n\n return new GaslessTransactionHandle(client, response);\n}\n\n/**\n * Detects transient relayer submission failures (rate limits, wallet-busy\n * races, stale batch nonces) that are safe to retry with a fresh signature.\n *\n * @internal\n */\nexport function isRetryableGaslessSubmitError(error: unknown): boolean {\n if (error instanceof RateLimitError) {\n return true;\n }\n\n if (!(error instanceof RequestRejectedError) || error.status !== 400) {\n return false;\n }\n\n if (\n (/wallet busy/i.test(error.message) &&\n /active action/i.test(error.message)) ||\n /wallet has in-flight action/i.test(error.message)\n ) {\n return true;\n }\n\n const match =\n /batch nonce\\s+(\\d+)\\s+does not match on-chain nonce\\s+(\\d+)/i.exec(\n error.message,\n );\n if (match === null) {\n return false;\n }\n\n const submittedNonce = match[1];\n const onChainNonce = match[2];\n if (submittedNonce === undefined || onChainNonce === undefined) {\n return false;\n }\n\n return BigInt(submittedNonce) < BigInt(onChainNonce);\n}\n\ntype DepositWalletCall = {\n data: HexString;\n target: EvmAddress;\n value: string;\n};\n\ntype CreateDepositWalletBatchTypedDataPayloadRequest = {\n calls: readonly DepositWalletCall[];\n chainId: number;\n deadline: string;\n nonce: string;\n wallet: EvmAddress;\n};\n\nfunction toDepositWalletCall(call: TransactionCall): DepositWalletCall {\n return {\n data: call.data,\n target: call.to,\n value: `${call.value ?? 0n}`,\n };\n}\n\nfunction createDepositWalletBatchTypedDataPayload(\n request: CreateDepositWalletBatchTypedDataPayloadRequest,\n): TypedDataPayload {\n const domain = {\n chainId: request.chainId,\n name: DEPOSIT_WALLET_DOMAIN_NAME,\n verifyingContract: request.wallet,\n version: DEPOSIT_WALLET_DOMAIN_VERSION,\n };\n\n return {\n domain,\n message: {\n calls: request.calls.map((call) => ({\n data: call.data,\n target: call.target,\n value: BigInt(call.value),\n })),\n deadline: BigInt(request.deadline),\n nonce: BigInt(request.nonce),\n wallet: request.wallet,\n },\n primaryType: 'Batch',\n types: {\n Batch: DEPOSIT_WALLET_BATCH,\n Call: DEPOSIT_WALLET_CALL,\n EIP712Domain: OxTypedData.extractEip712DomainTypes(domain),\n },\n };\n}\n\ntype SafeTransaction = {\n data: HexString;\n operation: 0 | 1;\n to: EvmAddress;\n value: bigint;\n};\n\ntype CreateSafeTypedDataPayloadRequest = {\n chainId: number;\n data: HexString;\n nonce: string;\n operation: 0 | 1;\n safeAddress: EvmAddress;\n to: EvmAddress;\n value: bigint;\n};\n\nfunction aggregateSafeTransactionCalls(\n calls: NonEmptyArray<TransactionCall>,\n safeMultisend: EvmAddress,\n): SafeTransaction {\n if (calls.length === 1) {\n const [call] = calls;\n\n return {\n data: call.data,\n operation: 0,\n to: call.to,\n value: call.value ?? 0n,\n };\n }\n\n return {\n data: encodeSafeMultisendCall(calls),\n operation: 1,\n to: safeMultisend,\n value: 0n,\n };\n}\n\nfunction createSafeSignatureParams(operation: 0 | 1) {\n return {\n baseGas: '0',\n gasPrice: '0',\n gasToken: ZERO_ADDRESS,\n operation: `${operation}`,\n refundReceiver: ZERO_ADDRESS,\n safeTxnGas: '0',\n };\n}\n\nfunction createSafeTypedDataPayload(\n request: CreateSafeTypedDataPayloadRequest,\n): TypedDataPayload {\n return {\n domain: {\n chainId: request.chainId,\n verifyingContract: request.safeAddress,\n },\n message: {\n baseGas: 0n,\n data: request.data,\n gasPrice: 0n,\n gasToken: ZERO_ADDRESS,\n nonce: BigInt(request.nonce),\n operation: request.operation,\n refundReceiver: ZERO_ADDRESS,\n safeTxGas: 0n,\n to: request.to,\n value: request.value,\n },\n primaryType: 'SafeTx',\n types: {\n EIP712Domain: EIP712_DOMAIN,\n SafeTx: SAFE_TRANSACTION,\n },\n };\n}\n\nfunction signGaslessMessage(payload: HexString): SignGaslessMessageRequest {\n return {\n kind: 'signGaslessMessage',\n payload,\n };\n}\n\nfunction signGaslessTypedData(\n payload: TypedDataPayload,\n): SignGaslessTypedDataRequest {\n return {\n kind: 'signGaslessTypedData',\n payload,\n };\n}\n\nfunction buildProxyTransactionHash(\n from: EvmAddress,\n to: EvmAddress,\n data: HexString,\n relayerFee: string,\n gasPrice: string,\n gasLimit: string,\n nonce: string,\n relayHub: EvmAddress,\n relay: EvmAddress,\n): HexString {\n return expectHexString(\n Hash.keccak256(\n Bytes.concat(\n Bytes.fromString('rlx:'),\n Bytes.fromHex(from),\n Bytes.fromHex(to),\n Bytes.fromHex(data),\n Bytes.fromNumber(BigInt(relayerFee), { size: 32 }),\n Bytes.fromNumber(BigInt(gasPrice), { size: 32 }),\n Bytes.fromNumber(BigInt(gasLimit), { size: 32 }),\n Bytes.fromNumber(BigInt(nonce), { size: 32 }),\n Bytes.fromHex(relayHub),\n Bytes.fromHex(relay),\n ),\n { as: 'Hex' },\n ),\n );\n}\n\nfunction packSafeSignature(signature: EvmSignature): HexString {\n const prefixlessSignature = signature.slice(2);\n const v = Number.parseInt(prefixlessSignature.slice(128, 130), 16);\n\n const packedV =\n v === 0 || v === 1 ? v + 31 : v === 27 || v === 28 ? v + 4 : v;\n\n return expectHexString(\n `0x${prefixlessSignature.slice(0, 128)}${packedV.toString(16).padStart(2, '0')}`,\n );\n}\n\nexport type WaitForGaslessTransactionError =\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError\n | TimeoutError\n | TransactionFailedError;\nexport const WaitForGaslessTransactionError = makeErrorGuard(\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n TimeoutError,\n TransactionFailedError,\n);\n\ntype SubmittedGaslessTransaction = {\n transactionHash: TxHash | null;\n transactionId: TransactionId;\n};\n\n/**\n * Transaction handle for relayer-backed submissions; polls the submitted\n * transaction until it settles.\n *\n * @internal\n */\nexport class GaslessTransactionHandle implements TransactionHandle {\n readonly #client: BaseClient;\n\n readonly transactionHash;\n readonly transactionId;\n\n constructor(client: BaseClient, response: SubmittedGaslessTransaction) {\n this.#client = client;\n this.transactionHash = response.transactionHash;\n this.transactionId = response.transactionId;\n }\n\n async wait(): Promise<TransactionOutcome> {\n let pollCount = 0;\n\n while (pollCount < this.#client.environment.relayerMaxPolls) {\n const transaction = await fetchTransaction(this.#client, {\n transactionId: this.transactionId,\n });\n\n if (transaction.state === RelayerTransactionState.STATE_CONFIRMED) {\n const transactionHash =\n transaction.transactionHash ?? this.transactionHash;\n\n if (transactionHash === null) {\n throw new UnexpectedResponseError(\n 'Expected submitted transaction to have a transaction hash once settled',\n );\n }\n\n return {\n transactionHash,\n transactionId: transaction.transactionId,\n };\n }\n\n if (\n transaction.state === RelayerTransactionState.STATE_FAILED ||\n transaction.state === RelayerTransactionState.STATE_INVALID\n ) {\n throw new TransactionFailedError(\n transaction.errorMsg ??\n `Transaction ${transaction.transactionId} reached terminal state ${transaction.state}`,\n );\n }\n\n pollCount += 1;\n await delay(this.#client.environment.relayerPollFrequencyMs);\n }\n\n throw new TimeoutError(\n `Timed out waiting for transaction ${this.transactionId} to settle`,\n );\n }\n}\n","import { type EvmAddress, EvmAddressSchema } from '@kuest/bindings';\nimport { FetchApprovalsResponseSchema } from '@kuest/bindings/data';\nimport { WalletType } from '@kuest/bindings/gamma';\nimport type { EvmSignature, HexString } from '@kuest/types';\nimport { z } from 'zod';\nimport {\n decodeErc20AllowanceResult,\n decodeErc1155IsApprovedForAllResult,\n erc20AllowanceCall,\n erc20ApprovalCall,\n erc1155ApprovalForAllCall,\n erc1155IsApprovedForAllCall,\n MAX_UINT256,\n} from '../abis';\nimport type { BaseClient, BaseSecureClient } from '../clients';\nimport {\n CancelledSigningError,\n makeErrorGuard,\n RateLimitError,\n RequestAbortedError,\n RequestRejectedError,\n SigningError,\n TimeoutError,\n TransactionFailedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n} from '../errors';\nimport { parseUserInput } from '../input';\nimport { parseRequestOptions, type RequestOptions } from '../request-options';\nimport {\n expectTransactionHandle,\n type SignerTransactionRequest,\n type TransactionHandle,\n} from '../types';\nimport {\n completeWith,\n type SendErc20ApprovalTransactionRequest,\n type SendErc1155ApprovalForAllTransactionRequest,\n signerTransactionRequest,\n} from '../workflow';\nimport { resolveIndexedTradingApprovals } from './approvals-state';\nimport {\n GaslessTransactionMetadataSchema,\n type GaslessWorkflowRequest,\n prepareGaslessTransaction,\n type WaitForGaslessTransactionError,\n} from './gasless';\nimport { toDataSearchParams } from './params';\n\nexport type Erc20ApprovalWorkflowRequest =\n | GaslessWorkflowRequest\n | SendErc20ApprovalTransactionRequest;\n\nexport type Erc20ApprovalWorkflow = AsyncGenerator<\n Erc20ApprovalWorkflowRequest,\n TransactionHandle,\n EvmAddress | EvmSignature | TransactionHandle\n>;\n\nconst PrepareErc20ApprovalRequestSchema = z.object({\n amount: z.union([z.bigint(), z.literal('max')]),\n metadata: GaslessTransactionMetadataSchema.optional(),\n spenderAddress: EvmAddressSchema,\n tokenAddress: EvmAddressSchema,\n});\n\nexport type PrepareErc20ApprovalRequest = z.input<\n typeof PrepareErc20ApprovalRequestSchema\n>;\n\nexport type PrepareErc20ApprovalError = UserInputError;\nexport const PrepareErc20ApprovalError = makeErrorGuard(UserInputError);\n\n/**\n * Starts an ERC-20 approval workflow.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @example\n * ```ts\n * const workflow = await prepareErc20Approval(client, {\n * amount: 'max',\n * spenderAddress: '0x1234…',\n * tokenAddress: '0x5678…',\n * });\n * ```\n *\n * @throws {@link PrepareErc20ApprovalError}\n * Thrown on failure.\n */\nexport async function prepareErc20Approval(\n client: BaseSecureClient,\n request: PrepareErc20ApprovalRequest,\n): Promise<Erc20ApprovalWorkflow> {\n const params = parseUserInput(request, PrepareErc20ApprovalRequestSchema);\n const amount = params.amount === 'max' ? MAX_UINT256 : params.amount;\n\n return async function* (): Erc20ApprovalWorkflow {\n if (client.account.walletType === WalletType.EOA) {\n return expectTransactionHandle(\n yield sendErc20ApprovalTransaction(\n signerTransactionRequest(\n client.environment.chainId,\n erc20ApprovalCall(\n params.tokenAddress,\n params.spenderAddress,\n amount,\n ),\n ),\n ),\n );\n }\n\n return yield* await prepareGaslessTransaction(client, {\n calls: [\n erc20ApprovalCall(params.tokenAddress, params.spenderAddress, amount),\n ],\n metadata:\n params.metadata ??\n `Approve ${params.amount} of ${params.tokenAddress} to ${params.spenderAddress}`,\n });\n }.call(null);\n}\n\nexport type ApproveErc20Error =\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError\n | CancelledSigningError\n | SigningError;\nexport const ApproveErc20Error = makeErrorGuard(\n CancelledSigningError,\n RateLimitError,\n RequestRejectedError,\n SigningError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Approves ERC-20 token spending for the authenticated account.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link ApproveErc20Error}\n * Thrown on failure.\n */\nexport function approveErc20(\n client: BaseSecureClient,\n request: PrepareErc20ApprovalRequest,\n): Promise<TransactionHandle> {\n return prepareErc20Approval(client, request).then(\n completeWith(client.signer),\n );\n}\n\nexport type Erc1155ApprovalForAllWorkflowRequest =\n | GaslessWorkflowRequest\n | SendErc1155ApprovalForAllTransactionRequest;\n\nexport type Erc1155ApprovalForAllWorkflow = AsyncGenerator<\n Erc1155ApprovalForAllWorkflowRequest,\n TransactionHandle,\n EvmAddress | EvmSignature | TransactionHandle\n>;\n\nconst PrepareErc1155ApprovalForAllRequestSchema = z.object({\n approved: z.boolean().default(true),\n metadata: GaslessTransactionMetadataSchema.optional(),\n operatorAddress: EvmAddressSchema,\n tokenAddress: EvmAddressSchema,\n});\n\nexport type PrepareErc1155ApprovalForAllRequest = z.input<\n typeof PrepareErc1155ApprovalForAllRequestSchema\n>;\n\nexport type PrepareErc1155ApprovalForAllError = UserInputError;\nexport const PrepareErc1155ApprovalForAllError = makeErrorGuard(UserInputError);\n\n/**\n * Starts an ERC-1155 approval-for-all workflow.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @example\n * ```ts\n * const workflow = await prepareErc1155ApprovalForAll(client, {\n * operatorAddress: '0x1234…',\n * tokenAddress: '0x5678…',\n * });\n * ```\n *\n * @throws {@link PrepareErc1155ApprovalForAllError}\n * Thrown on failure.\n */\nexport async function prepareErc1155ApprovalForAll(\n client: BaseSecureClient,\n request: PrepareErc1155ApprovalForAllRequest,\n): Promise<Erc1155ApprovalForAllWorkflow> {\n const params = parseUserInput(\n request,\n PrepareErc1155ApprovalForAllRequestSchema,\n );\n\n return async function* (): Erc1155ApprovalForAllWorkflow {\n if (client.account.walletType === WalletType.EOA) {\n return expectTransactionHandle(\n yield sendErc1155ApprovalForAllTransaction(\n signerTransactionRequest(\n client.environment.chainId,\n erc1155ApprovalForAllCall(\n params.tokenAddress,\n params.operatorAddress,\n params.approved,\n ),\n ),\n ),\n );\n }\n\n return yield* await prepareGaslessTransaction(client, {\n calls: [\n erc1155ApprovalForAllCall(\n params.tokenAddress,\n params.operatorAddress,\n params.approved,\n ),\n ],\n metadata:\n params.metadata ??\n `${params.approved ? 'Approve' : 'Revoke'} ${params.operatorAddress} on ${params.tokenAddress}`,\n });\n }.call(null);\n}\n\nexport type ApproveErc1155ForAllError =\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError\n | CancelledSigningError\n | SigningError;\nexport const ApproveErc1155ForAllError = makeErrorGuard(\n CancelledSigningError,\n RateLimitError,\n RequestRejectedError,\n SigningError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Approves or revokes ERC-1155 operator access for the authenticated account.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link ApproveErc1155ForAllError}\n * Thrown on failure.\n */\nexport function approveErc1155ForAll(\n client: BaseSecureClient,\n request: PrepareErc1155ApprovalForAllRequest,\n): Promise<TransactionHandle> {\n return prepareErc1155ApprovalForAll(client, request).then(\n completeWith(client.signer),\n );\n}\n\nexport type TradingApprovalsWorkflowRequest =\n | GaslessWorkflowRequest\n | SendErc20ApprovalTransactionRequest\n | SendErc1155ApprovalForAllTransactionRequest;\n\nexport type TradingApprovalsWorkflow = AsyncGenerator<\n TradingApprovalsWorkflowRequest,\n void,\n EvmAddress | EvmSignature | TransactionHandle\n>;\n\nexport type PrepareTradingApprovalsError =\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const PrepareTradingApprovalsError = makeErrorGuard(\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/** An ERC-20 allowance required for supported trading workflows. */\nexport type Erc20TradingApproval = {\n /** Required allowance target, not the difference from the current allowance. */\n amount: bigint;\n /** Address that must be allowed to spend the token. */\n spenderAddress: EvmAddress;\n /** ERC-20 token whose allowance is required. */\n tokenAddress: EvmAddress;\n};\n\n/** An ERC-1155 operator approval required for supported trading workflows. */\nexport type Erc1155TradingApproval = {\n /** Address that must be approved to operate the token. */\n operatorAddress: EvmAddress;\n /** ERC-1155 token whose operator approval is required. */\n tokenAddress: EvmAddress;\n};\n\n/** Trading approval requirements grouped by token standard. */\nexport type TradingApprovalRequirements = {\n /** Required ERC-20 allowances. */\n erc20: Erc20TradingApproval[];\n /** Required ERC-1155 operator approvals. */\n erc1155: Erc1155TradingApproval[];\n};\n\n/** Parameters for reading a wallet's trading approval state. */\nexport type FetchTradingApprovalsStateRequest = {\n /** Wallet address whose trading approval state should be inspected. */\n user: string;\n};\n\ntype ParsedFetchTradingApprovalsStateRequest = {\n user: EvmAddress;\n};\n\n// ZodType is covariant, so constrain the shape separately to reject\n// schema-only request keys.\nconst FetchTradingApprovalsStateRequestSchema = z.object({\n user: EvmAddressSchema,\n} satisfies Record<\n keyof FetchTradingApprovalsStateRequest,\n z.ZodType\n>) satisfies z.ZodType<\n ParsedFetchTradingApprovalsStateRequest,\n FetchTradingApprovalsStateRequest\n>;\n\n/** The current trading approval state for a wallet. */\nexport type TradingApprovalsState = {\n /** Whether the wallet satisfies every required trading approval. */\n isFullyApproved: boolean;\n /** Approvals the wallet must grant to become fully approved. */\n missing: TradingApprovalRequirements;\n};\n\nexport type FetchTradingApprovalsStateError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchTradingApprovalsStateError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Reads the approvals a wallet is missing for supported trading workflows.\n *\n * Reads the wallet's current approval state. Recent grants and revocations\n * may take time to appear. It does not require a signer or submit\n * transactions. Trading setup re-checks approvals before preparing them.\n *\n * @example\n * ```ts\n * const state = await fetchTradingApprovalsState(client, {\n * user: '0x1234…',\n * });\n *\n * if (!state.isFullyApproved) {\n * console.log(state.missing);\n * }\n * ```\n *\n * @throws {@link FetchTradingApprovalsStateError}\n * Thrown on failure.\n */\nexport async function fetchTradingApprovalsState(\n client: BaseClient,\n request: FetchTradingApprovalsStateRequest,\n options: RequestOptions = {},\n): Promise<TradingApprovalsState> {\n const requestOptions = parseRequestOptions(options);\n const { user } = parseUserInput(\n request,\n FetchTradingApprovalsStateRequestSchema,\n );\n const snapshot = await client.data.get('/v2/approvals', {\n ...requestOptions,\n params: toDataSearchParams({ user }),\n schema: FetchApprovalsResponseSchema,\n });\n const missing = resolveIndexedTradingApprovals(\n snapshot,\n user,\n client.environment.chainId,\n getRequiredTradingApprovals(client),\n );\n\n return {\n isFullyApproved: missing.erc20.length === 0 && missing.erc1155.length === 0,\n missing,\n };\n}\n\n/**\n * Starts a trading-setup approval workflow.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @example\n * ```ts\n * const workflow = await prepareTradingApprovals(client);\n * ```\n *\n * @throws {@link PrepareTradingApprovalsError}\n * Thrown on failure.\n */\nexport async function prepareTradingApprovals(\n client: BaseSecureClient,\n): Promise<TradingApprovalsWorkflow> {\n const missingApprovals = await resolveMissingTradingApprovals(\n client,\n client.account.wallet,\n );\n const erc20ApprovalCalls = missingApprovals.erc20.map((approval) =>\n erc20ApprovalCall(\n approval.tokenAddress,\n approval.spenderAddress,\n approval.amount,\n ),\n );\n const erc1155ApprovalCalls = missingApprovals.erc1155.map((approval) =>\n erc1155ApprovalForAllCall(\n approval.tokenAddress,\n approval.operatorAddress,\n true,\n ),\n );\n\n return async function* (): TradingApprovalsWorkflow {\n if (erc20ApprovalCalls.length === 0 && erc1155ApprovalCalls.length === 0) {\n return;\n }\n\n if (client.account.walletType === WalletType.EOA) {\n for (const call of erc20ApprovalCalls) {\n const handle = expectTransactionHandle(\n yield sendErc20ApprovalTransaction(\n signerTransactionRequest(client.environment.chainId, call),\n ),\n );\n\n await handle.wait();\n }\n\n for (const call of erc1155ApprovalCalls) {\n const handle = expectTransactionHandle(\n yield sendErc1155ApprovalForAllTransaction(\n signerTransactionRequest(client.environment.chainId, call),\n ),\n );\n\n await handle.wait();\n }\n\n return;\n }\n\n const handle = yield* await prepareGaslessTransaction(client, {\n calls: [...erc20ApprovalCalls, ...erc1155ApprovalCalls],\n metadata: 'Trading setup approvals',\n });\n\n await handle.wait();\n }.call(null);\n}\n\nexport type SetupTradingApprovalsError =\n | PrepareTradingApprovalsError\n | CancelledSigningError\n | SigningError\n | WaitForGaslessTransactionError;\nexport const SetupTradingApprovalsError = makeErrorGuard(\n CancelledSigningError,\n RateLimitError,\n RequestRejectedError,\n SigningError,\n TimeoutError,\n TransactionFailedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Sets up the approvals required for trading.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link SetupTradingApprovalsError}\n * Thrown on failure.\n */\nexport function setupTradingApprovals(client: BaseSecureClient): Promise<void> {\n return prepareTradingApprovals(client)\n .then(completeWith(client.signer))\n .then(() => undefined);\n}\n\nasync function resolveMissingTradingApprovals(\n client: BaseClient,\n wallet: EvmAddress,\n): Promise<TradingApprovalRequirements> {\n const requiredApprovals = getRequiredTradingApprovals(client);\n const checkCalls = [\n ...requiredApprovals.erc20.map((approval) =>\n erc20AllowanceCall(\n approval.tokenAddress,\n wallet,\n approval.spenderAddress,\n ),\n ),\n ...requiredApprovals.erc1155.map((approval) =>\n erc1155IsApprovedForAllCall(\n approval.tokenAddress,\n wallet,\n approval.operatorAddress,\n ),\n ),\n ];\n const results = await client.rpc.ethCallBatch(checkCalls);\n const erc20Results = results.slice(0, requiredApprovals.erc20.length);\n const erc1155Results = results.slice(requiredApprovals.erc20.length);\n\n try {\n return {\n erc20: requiredApprovals.erc20.filter((approval, index) => {\n const allowance = decodeErc20AllowanceResult(\n erc20Results[index] as HexString,\n );\n\n return allowance < approval.amount;\n }),\n erc1155: requiredApprovals.erc1155.filter((_, index) => {\n const approved = decodeErc1155IsApprovedForAllResult(\n erc1155Results[index] as HexString,\n );\n\n return !approved;\n }),\n };\n } catch (error) {\n throw new UnexpectedResponseError(\n 'Expected JSON-RPC approval checks to return ABI-encoded values',\n { cause: error },\n );\n }\n}\n\nfunction getRequiredTradingApprovals(\n client: BaseClient,\n): TradingApprovalRequirements {\n const { contracts } = client.environment;\n\n return {\n erc20: [\n {\n amount: MAX_UINT256,\n spenderAddress: contracts.standardExchange,\n tokenAddress: contracts.collateralToken,\n },\n {\n amount: MAX_UINT256,\n spenderAddress: contracts.negRiskExchange,\n tokenAddress: contracts.collateralToken,\n },\n ],\n erc1155: [\n {\n operatorAddress: contracts.standardExchange,\n tokenAddress: contracts.conditionalTokens,\n },\n {\n operatorAddress: contracts.negRiskExchange,\n tokenAddress: contracts.conditionalTokens,\n },\n ],\n };\n}\n\nfunction sendErc20ApprovalTransaction(\n request: SignerTransactionRequest,\n): SendErc20ApprovalTransactionRequest {\n return {\n kind: 'sendErc20ApprovalTransaction',\n request,\n };\n}\n\nfunction sendErc1155ApprovalForAllTransaction(\n request: SignerTransactionRequest,\n): SendErc1155ApprovalForAllTransactionRequest {\n return {\n kind: 'sendErc1155ApprovalForAllTransaction',\n request,\n };\n}\n","/**\n * Builds the canonical HMAC signature for authenticated requests.\n *\n * The signed payload is the raw string concatenation of `timestamp`, `method`,\n * `requestPath`, and, when present, the serialized request `body`, matching the\n * remote signing contract.\n *\n * The `secret` is expected to be base64-encoded and is decoded before signing.\n * The returned signature is base64url-encoded with padding preserved.\n *\n * @example\n * Server-side signing example for builder-authenticated requests:\n *\n * ```ts\n * async function handleSignRequest(request: Request): Promise<Response> {\n * const { body, method, path } = await request.json();\n *\n * const timestamp = Math.floor(Date.now() / 1000);\n * const signature = await buildHmacSignature(\n * process.env.SDK_BUILDER_SECRET!,\n * timestamp,\n * method,\n * path,\n * body,\n * );\n *\n * return Response.json({\n * KUEST_BUILDER_API_KEY: process.env.KUEST_BUILDER_API_KEY!,\n * KUEST_BUILDER_PASSPHRASE: process.env.KUEST_BUILDER_PASSPHRASE!,\n * KUEST_BUILDER_SIGNATURE: signature,\n * KUEST_BUILDER_TIMESTAMP: `${timestamp}`,\n * });\n * }\n * ```\n */\nexport async function buildHmacSignature(\n secret: string,\n timestamp: number,\n method: string,\n requestPath: string,\n body?: string,\n): Promise<string> {\n let message = `${timestamp}${method}${requestPath}`;\n\n if (body !== undefined) {\n message += body;\n }\n\n const cryptoKey = await globalThis.crypto.subtle.importKey(\n 'raw',\n base64ToArrayBuffer(secret),\n { name: 'HMAC', hash: 'SHA-256' },\n false,\n ['sign'],\n );\n const signature = await globalThis.crypto.subtle.sign(\n 'HMAC',\n cryptoKey,\n new TextEncoder().encode(message),\n );\n\n return toUrlSafeBase64(arrayBufferToBase64(signature));\n}\n\nfunction base64ToArrayBuffer(base64: string): ArrayBuffer {\n const sanitizedBase64 = base64\n .replace(/-/g, '+')\n .replace(/_/g, '/')\n .replace(/[^A-Za-z0-9+/=]/g, '');\n const binaryString = atob(sanitizedBase64);\n const bytes = new Uint8Array(binaryString.length);\n\n for (let index = 0; index < binaryString.length; index += 1) {\n bytes[index] = binaryString.charCodeAt(index);\n }\n\n return bytes.buffer;\n}\n\nfunction arrayBufferToBase64(buffer: ArrayBuffer): string {\n const bytes = new Uint8Array(buffer);\n let binary = '';\n\n for (const byte of bytes) {\n binary += String.fromCharCode(byte);\n }\n\n return btoa(binary);\n}\n\nfunction toUrlSafeBase64(value: string): string {\n return value.replace(/\\+/g, '-').replace(/\\//g, '_');\n}\n","import type { ApiKey } from '@kuest/bindings';\nimport {\n type ApiKeyCreds,\n ApiKeyCredsSchema,\n ApiKeysResponseSchema,\n type BuilderApiKey,\n type BuilderApiKeyCreds,\n BuilderApiKeyCredsSchema,\n BuilderApiKeysResponseSchema,\n} from '@kuest/bindings/clob';\nimport type { EvmAddress, EvmSignature } from '@kuest/types';\nimport { z } from 'zod';\nimport type { BaseClient, BaseSecureClient } from '../clients';\nimport {\n makeErrorGuard,\n RateLimitError,\n RequestAbortedError,\n RequestRejectedError,\n SigningError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n} from '../errors';\nimport { buildHmacSignature } from '../hmac';\nimport { parseRequestOptions, type RequestOptions } from '../request-options';\n\nexport type ApiKeyAuthRequest = {\n address: EvmAddress;\n nonce: number;\n signature: EvmSignature;\n timestamp: number;\n};\n\nexport type CreateApiKeyError =\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError;\nexport const CreateApiKeyError = makeErrorGuard(\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n);\n\n/**\n * Creates a new API key from a signed L1 auth payload.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @example\n * ```ts\n * const creds = await createApiKey(client, request);\n * ```\n *\n * @throws {@link CreateApiKeyError}\n * Thrown on failure.\n */\nexport async function createApiKey(\n client: BaseClient,\n request: ApiKeyAuthRequest,\n): Promise<ApiKeyCreds> {\n return client.clob.post('/auth/api-key', {\n headers: toL1Headers(request),\n schema: ApiKeyCredsSchema,\n });\n}\n\nexport type DeriveApiKeyError =\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError;\nexport const DeriveApiKeyError = makeErrorGuard(\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n);\n\n/**\n * Derives an existing API key from a signed L1 auth payload.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @example\n * ```ts\n * const creds = await deriveApiKey(client, request);\n * ```\n *\n * @throws {@link DeriveApiKeyError}\n * Thrown on failure.\n */\nexport async function deriveApiKey(\n client: BaseClient,\n request: ApiKeyAuthRequest,\n): Promise<ApiKeyCreds> {\n return client.clob.getWorkflow('/auth/derive-api-key', {\n headers: toL1Headers(request),\n schema: ApiKeyCredsSchema,\n });\n}\n\nexport type CreateOrDeriveApiKeyError =\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError;\nexport const CreateOrDeriveApiKeyError = makeErrorGuard(\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n);\n\n/**\n * Creates an API key and falls back to derivation when it already exists.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @example\n * ```ts\n * const creds = await createOrDeriveApiKey(client, request);\n * ```\n *\n * @throws {@link CreateOrDeriveApiKeyError}\n * Thrown on failure.\n */\nexport async function createOrDeriveApiKey(\n client: BaseClient,\n request: ApiKeyAuthRequest,\n): Promise<ApiKeyCreds> {\n try {\n return await createApiKey(client, request);\n } catch (error) {\n if (!(error instanceof RequestRejectedError) || error.status !== 400) {\n throw error;\n }\n }\n\n return deriveApiKey(client, request);\n}\n\nexport type FetchApiKeysError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | SigningError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchApiKeysError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n SigningError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Fetches all API keys associated with the authenticated client.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @example\n * ```ts\n * const apiKeys = await fetchApiKeys(client);\n * ```\n *\n * @throws {@link FetchApiKeysError}\n * Thrown on failure.\n */\nexport async function fetchApiKeys(\n client: BaseSecureClient,\n options: RequestOptions = {},\n): Promise<ApiKey[]> {\n const requestOptions = parseRequestOptions(options);\n const response = await client.secureClob.get('/auth/api-keys', {\n ...requestOptions,\n schema: ApiKeysResponseSchema,\n });\n\n return response;\n}\n\nexport type DeleteApiKeyError =\n | RateLimitError\n | RequestRejectedError\n | SigningError\n | TransportError\n | UnexpectedResponseError;\nexport const DeleteApiKeyError = makeErrorGuard(\n RateLimitError,\n RequestRejectedError,\n SigningError,\n TransportError,\n UnexpectedResponseError,\n);\n\n/**\n * Deletes the authenticated API key.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @example\n * ```ts\n * await deleteApiKey(client);\n * ```\n *\n * @throws {@link DeleteApiKeyError}\n * Thrown when request signing fails, or the request is rejected, rate limited,\n * interrupted by transport issues, or returns an unexpected response.\n */\nexport async function deleteApiKey(client: BaseSecureClient): Promise<void> {\n await client.secureClob.del('/auth/api-key', {\n schema: z.object({ revoked: z.literal(true) }),\n });\n}\n\nexport type CreateBuilderApiKeyError =\n | RateLimitError\n | RequestRejectedError\n | SigningError\n | TransportError\n | UnexpectedResponseError;\nexport const CreateBuilderApiKeyError = makeErrorGuard(\n RateLimitError,\n RequestRejectedError,\n SigningError,\n TransportError,\n UnexpectedResponseError,\n);\n\n/**\n * Creates a new builder API key for the authenticated client.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @example\n * ```ts\n * const builderApiKey = await createBuilderApiKey(client, signedL1Auth);\n * ```\n *\n * @throws {@link CreateBuilderApiKeyError}\n * Thrown when request signing fails, or the request is rejected, rate limited,\n * interrupted by transport issues, or returns an unexpected response.\n */\nexport async function createBuilderApiKey(\n client: BaseSecureClient,\n request: ApiKeyAuthRequest,\n): Promise<BuilderApiKeyCreds> {\n return client.relayer.post('/auth/builder-api-key', {\n headers: toL1Headers(request),\n schema: BuilderApiKeyCredsSchema,\n });\n}\n\nexport type FetchBuilderApiKeysError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | SigningError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchBuilderApiKeysError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n SigningError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Fetches builder API keys associated with the authenticated client.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @example\n * ```ts\n * const builderApiKeys = await fetchBuilderApiKeys(client);\n * ```\n *\n * @throws {@link FetchBuilderApiKeysError}\n * Thrown when request signing fails, or the request is rejected, rate limited,\n * interrupted by transport issues, or returns an unexpected response.\n */\nexport async function fetchBuilderApiKeys(\n client: BaseSecureClient,\n options: RequestOptions = {},\n): Promise<BuilderApiKey[]> {\n if (client.supportsGasless && !client.hasBuilderApiKey) {\n throw new UserInputError(\n 'Listing builder keys requires builder credentials or account L2 credentials without a relayer API key.',\n );\n }\n const requestOptions = parseRequestOptions(options);\n return client.relayer.get('/auth/builder-api-key', {\n ...requestOptions,\n headers: client.hasBuilderApiKey\n ? undefined\n : await toRelayerL2Headers(client, 'GET', '/auth/builder-api-key'),\n schema: BuilderApiKeysResponseSchema,\n });\n}\n\nexport type RevokeBuilderApiKeyError =\n | RateLimitError\n | RequestRejectedError\n | SigningError\n | TransportError\n | UnexpectedResponseError;\nexport const RevokeBuilderApiKeyError = makeErrorGuard(\n RateLimitError,\n RequestRejectedError,\n SigningError,\n TransportError,\n UnexpectedResponseError,\n);\n\n/**\n * Revokes a builder API key.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @example\n * ```ts\n * await revokeBuilderApiKey(client);\n * ```\n *\n * @throws {@link RevokeBuilderApiKeyError}\n * Thrown when request signing fails, or the request is rejected, rate limited,\n * interrupted by transport issues, or returns an unexpected response.\n */\nexport async function revokeBuilderApiKey(client: BaseClient): Promise<void> {\n if (!client.hasBuilderApiKey) {\n throw new UserInputError(\n 'Revoking a builder key requires builder credentials.',\n );\n }\n await client.relayer.del('/auth/builder-api-key', {\n schema: z.object({ revoked: z.literal(true) }),\n });\n}\n\nasync function toRelayerL2Headers(\n client: BaseSecureClient,\n method: string,\n path: string,\n): Promise<HeadersInit> {\n const timestamp = Math.floor(Date.now() / 1000);\n return {\n KUEST_ADDRESS: client.account.signer,\n KUEST_API_KEY: client.credentials.key,\n KUEST_PASSPHRASE: client.credentials.passphrase,\n KUEST_TIMESTAMP: `${timestamp}`,\n KUEST_SIGNATURE: await buildHmacSignature(\n client.credentials.secret,\n timestamp,\n method,\n path,\n ),\n };\n}\n\nfunction toL1Headers(auth: ApiKeyAuthRequest): HeadersInit {\n return {\n KUEST_ADDRESS: auth.address,\n KUEST_NONCE: `${auth.nonce}`,\n KUEST_SIGNATURE: auth.signature,\n KUEST_TIMESTAMP: `${auth.timestamp}`,\n };\n}\n","import type { BuilderTrade } from '@kuest/bindings/clob';\nimport type { BaseClient } from '../clients';\nimport {\n makeErrorGuard,\n RateLimitError,\n RequestAbortedError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n} from '../errors';\nimport type { Paginated } from '../pagination';\nimport type { RequestOptions } from '../request-options';\n\nexport type ListBuilderTradesRequest =\n | {\n /** Identifier for a CTF token or Polymarket V2 position. */\n assetId?: string;\n tokenId?: never;\n after?: string;\n before?: string;\n builderCode: string;\n cursor?: string;\n id?: string;\n market?: string;\n }\n | {\n assetId?: never;\n /** @deprecated Use `assetId`. */\n tokenId?: string;\n after?: string;\n before?: string;\n builderCode: string;\n cursor?: string;\n id?: string;\n market?: string;\n };\n\nexport type ListBuilderTradesError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const ListBuilderTradesError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Builder trade listing is unavailable until the CLOB can filter by builder.\n *\n * @throws {@link ListBuilderTradesError}\n * Always throws locally; the backend currently ignores `builder_code`.\n */\nexport function listBuilderTrades(\n _client: BaseClient,\n _request: ListBuilderTradesRequest,\n _options: RequestOptions = {},\n): Paginated<BuilderTrade[]> {\n throw new UserInputError(\n 'Builder trade filtering is unavailable: the CLOB /builder/trades route ignores builder_code.',\n );\n}\n","import {\n BuilderCodeSchema,\n type ConditionId,\n ConditionIdSchema,\n type DecimalString,\n EvmAddressSchema,\n type OrderSide,\n OrderSideSchema,\n PaginationCursorSchema,\n type PositionId,\n type TickSizeValue,\n type TokenId,\n toPaginationCursor,\n} from '@kuest/bindings';\nimport {\n type BuilderFeeRates,\n type CurrentReward,\n END_CURSOR,\n FetchBuilderFeeRatesResponseSchema,\n FetchMarketInfoResponseSchema,\n FetchNegRiskResponseSchema,\n FetchOrderBookResponseSchema,\n FetchTickSizeResponseSchema,\n type LastTradePrice,\n type LastTradePriceForAsset,\n LastTradePriceSchema,\n LastTradePricesSchema,\n type MarketInfo,\n type MarketReward,\n MidpointSchema,\n type Midpoints,\n MidpointsSchema,\n type OrderBook,\n OrderBooksSchema,\n PaginatedCurrentRewardsSchema,\n PaginatedMarketRewardsSchema,\n PaginatedRewardMarketsSchema,\n PriceSchema,\n type Prices,\n PricesSchema,\n type RebatedFee,\n RebatedFeesResponseSchema,\n ResolveConditionByTokenResponseSchema,\n type RewardMarket,\n RewardMarketSort,\n SpreadSchema,\n type Spreads,\n SpreadsSchema,\n} from '@kuest/bindings/clob';\nimport { SortDirectionSchema } from '@kuest/bindings/data';\nimport { z } from 'zod';\nimport type { BaseClient } from '../clients';\nimport {\n makeErrorGuard,\n RateLimitError,\n RequestAbortedError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n} from '../errors';\nimport { parseUserInput } from '../input';\nimport { type Paginated, paginate } from '../pagination';\nimport { parseRequestOptions, type RequestOptions } from '../request-options';\nimport { exchangeAssetRequestSchema } from './exchange-asset';\nimport { snakeCase, toSearchParams } from './params';\n\nconst FetchMidpointRequestSchema = exchangeAssetRequestSchema({});\n\nexport type FetchMidpointRequest =\n | {\n /** Identifier for a CTF token or Polymarket V2 position. */\n assetId: string;\n tokenId?: never;\n }\n | {\n assetId?: never;\n /** @deprecated Use `assetId`. */\n tokenId: string;\n };\n\nexport type FetchMidpointError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchMidpointError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Fetches the midpoint price for an exchange asset as a decimal string.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link FetchMidpointError}\n * Thrown on failure.\n *\n * @example\n * ```ts\n * const midpoint = await fetchMidpoint(client, {\n * assetId: '0x0122…0000',\n * });\n *\n * // midpoint === '0.53'\n * ```\n *\n */\nexport async function fetchMidpoint(\n client: BaseClient,\n request: FetchMidpointRequest,\n options: RequestOptions = {},\n): Promise<DecimalString> {\n const requestOptions = parseRequestOptions(options);\n const params = parseUserInput(request, FetchMidpointRequestSchema);\n const response = await client.clob.get('/midpoint', {\n ...requestOptions,\n params: toAssetSearchParams(params),\n schema: MidpointSchema,\n });\n\n return response.mid;\n}\n\nconst FetchMidpointsRequestSchema = z\n .array(exchangeAssetRequestSchema({}))\n .min(1);\n\nexport type FetchMidpointsRequest = Array<\n | {\n /** Identifier for a CTF token or Polymarket V2 position. */\n assetId: string;\n tokenId?: never;\n }\n | {\n assetId?: never;\n /** @deprecated Use `assetId`. */\n tokenId: string;\n }\n>;\n\nexport type FetchMidpointsError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchMidpointsError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Fetches midpoint prices for multiple exchange assets as an asset ID keyed lookup.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link FetchMidpointsError}\n * Thrown on failure.\n *\n * @example\n * ```ts\n * const midpoints = await fetchMidpoints(client, [\n * {\n * assetId: '0x0122…0000',\n * },\n * ]);\n *\n * // midpoints['0x0122…0000'] === '0.53'\n * ```\n *\n */\nexport async function fetchMidpoints(\n client: BaseClient,\n request: FetchMidpointsRequest,\n options: RequestOptions = {},\n): Promise<Midpoints> {\n const requestOptions = parseRequestOptions(options);\n const params = parseUserInput(request, FetchMidpointsRequestSchema);\n\n return client.clob.postRead('midpoints', {\n ...requestOptions,\n json: toTokenRequestPayload(params),\n schema: MidpointsSchema,\n });\n}\n\nconst FetchTickSizeRequestSchema = exchangeAssetRequestSchema({});\n\nexport type FetchTickSizeRequest =\n | {\n /** Identifier for a CTF token or Polymarket V2 position. */\n assetId: string;\n tokenId?: never;\n }\n | {\n assetId?: never;\n /** @deprecated Use `assetId`. */\n tokenId: string;\n };\n\nexport type FetchTickSizeError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchTickSizeError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Fetches the minimum price tick size for an exchange asset's order book.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link FetchTickSizeError}\n * Thrown on failure.\n *\n * @example\n * ```ts\n * const tickSize = await fetchTickSize(client, {\n * assetId: '0x0122…0000',\n * });\n *\n * // tickSize === 0.01\n * ```\n */\nexport async function fetchTickSize(\n client: BaseClient,\n request: FetchTickSizeRequest,\n options: RequestOptions = {},\n): Promise<TickSizeValue> {\n const requestOptions = parseRequestOptions(options);\n const params = parseUserInput(request, FetchTickSizeRequestSchema);\n const response = await client.clob.get('/tick-size', {\n ...requestOptions,\n params: toAssetSearchParams(params),\n schema: FetchTickSizeResponseSchema,\n });\n\n return response.minimumTickSize;\n}\n\nconst FetchNegRiskRequestSchema = exchangeAssetRequestSchema({});\n\nexport type FetchNegRiskRequest =\n | {\n /** Identifier for a CTF token or Polymarket V2 position. */\n assetId: string;\n tokenId?: never;\n }\n | {\n assetId?: never;\n /** @deprecated Use `assetId`. */\n tokenId: string;\n };\n\nexport type FetchNegRiskError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchNegRiskError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Fetches whether an exchange asset is in a negative-risk market.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link FetchNegRiskError}\n * Thrown on failure.\n *\n * @example\n * ```ts\n * const negRisk = await fetchNegRisk(client, {\n * assetId: '0x0122…0000',\n * });\n *\n * // negRisk === false\n * ```\n */\nexport async function fetchNegRisk(\n client: BaseClient,\n request: FetchNegRiskRequest,\n options: RequestOptions = {},\n): Promise<boolean> {\n const requestOptions = parseRequestOptions(options);\n const params = parseUserInput(request, FetchNegRiskRequestSchema);\n const response = await client.clob.get('/neg-risk', {\n ...requestOptions,\n params: toAssetSearchParams(params),\n schema: FetchNegRiskResponseSchema,\n });\n\n return response.negRisk;\n}\n\nconst ResolveConditionByTokenRequestSchema = exchangeAssetRequestSchema({});\n\nexport type ResolveConditionByTokenRequest =\n | {\n /** Identifier for a CTF token or Polymarket V2 position. */\n assetId: string;\n tokenId?: never;\n }\n | {\n assetId?: never;\n /** @deprecated Use `assetId`. */\n tokenId: string;\n };\n\nexport type ResolveConditionByTokenError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const ResolveConditionByTokenError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Resolves the condition ID for an exchange asset.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link ResolveConditionByTokenError}\n * Thrown on failure.\n */\nexport async function resolveConditionByToken(\n client: BaseClient,\n request: ResolveConditionByTokenRequest,\n options: RequestOptions = {},\n): Promise<ConditionId> {\n const requestOptions = parseRequestOptions(options);\n const params = parseUserInput(request, ResolveConditionByTokenRequestSchema);\n\n return client.clob.get(\n `/markets-by-token/${params.assetId ?? params.tokenId}`,\n { ...requestOptions, schema: ResolveConditionByTokenResponseSchema },\n );\n}\n\nconst FetchMarketInfoRequestSchema = z.object({\n conditionId: ConditionIdSchema,\n});\n\nexport type FetchMarketInfoRequest = z.input<\n typeof FetchMarketInfoRequestSchema\n>;\n\nexport type FetchMarketInfoError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchMarketInfoError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Fetches market-level metadata for a condition.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link FetchMarketInfoError}\n * Thrown on failure.\n */\nexport async function fetchMarketInfo(\n client: BaseClient,\n request: FetchMarketInfoRequest,\n options: RequestOptions = {},\n): Promise<MarketInfo> {\n const requestOptions = parseRequestOptions(options);\n const params = parseUserInput(request, FetchMarketInfoRequestSchema);\n\n return client.clob.get(`/clob-markets/${params.conditionId}`, {\n ...requestOptions,\n schema: FetchMarketInfoResponseSchema,\n });\n}\n\nconst FetchBuilderFeeRatesRequestSchema = z.object({\n builderCode: BuilderCodeSchema,\n});\n\nexport type FetchBuilderFeeRatesRequest = z.input<\n typeof FetchBuilderFeeRatesRequestSchema\n>;\n\nexport type FetchBuilderFeeRatesError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchBuilderFeeRatesError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Fetches builder maker and taker fee rates.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link FetchBuilderFeeRatesError}\n * Thrown on failure.\n */\nexport async function fetchBuilderFeeRates(\n client: BaseClient,\n request: FetchBuilderFeeRatesRequest,\n options: RequestOptions = {},\n): Promise<BuilderFeeRates> {\n const requestOptions = parseRequestOptions(options);\n const params = parseUserInput(request, FetchBuilderFeeRatesRequestSchema);\n\n return client.clob\n .get(`/fees/builder-fees/${params.builderCode}`, {\n ...requestOptions,\n schema: FetchBuilderFeeRatesResponseSchema,\n })\n .catch((error) => {\n if (error instanceof RequestRejectedError && error.status === 404) {\n throw new UserInputError(\n `Unknown builder code: ${params.builderCode}`,\n { cause: error },\n );\n }\n\n throw error;\n });\n}\n\nconst FetchPriceRequestSchema = exchangeAssetRequestSchema({\n side: OrderSideSchema,\n});\n\nexport type FetchPriceRequest =\n | {\n /** Identifier for a CTF token or Polymarket V2 position. */\n assetId: string;\n tokenId?: never;\n side: OrderSide;\n }\n | {\n assetId?: never;\n /** @deprecated Use `assetId`. */\n tokenId: string;\n side: OrderSide;\n };\n\nexport type FetchPriceError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchPriceError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Fetches the current quoted price for an exchange asset and side as a decimal string.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link FetchPriceError}\n * Thrown on failure.\n *\n * @example\n * ```ts\n * const price = await fetchPrice(client, {\n * assetId: '0x0122…0000',\n * side: OrderSide.BUY,\n * });\n *\n * // price === '0.52'\n * ```\n *\n */\nexport async function fetchPrice(\n client: BaseClient,\n request: FetchPriceRequest,\n options: RequestOptions = {},\n): Promise<DecimalString> {\n const requestOptions = parseRequestOptions(options);\n const params = parseUserInput(request, FetchPriceRequestSchema);\n const response = await client.clob.get('/price', {\n ...requestOptions,\n params: toAssetSearchParams(params),\n schema: PriceSchema,\n });\n\n return response.price;\n}\n\nconst FetchPricesRequestSchema = z\n .array(exchangeAssetRequestSchema({ side: OrderSideSchema }))\n .min(1);\n\nexport type FetchPricesRequest = Array<\n | {\n /** Identifier for a CTF token or Polymarket V2 position. */\n assetId: string;\n tokenId?: never;\n side: OrderSide;\n }\n | {\n assetId?: never;\n /** @deprecated Use `assetId`. */\n tokenId: string;\n side: OrderSide;\n }\n>;\n\nexport type FetchPricesError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchPricesError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Fetches quoted prices for multiple exchange assets as an asset ID keyed lookup.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link FetchPricesError}\n * Thrown on failure.\n *\n * @example\n * ```ts\n * const prices = await fetchPrices(client, [\n * {\n * assetId: '0x0122…0000',\n * side: OrderSide.BUY,\n * },\n * ]);\n *\n * // prices['0x0122…0000']?.BUY === '0.52'\n * ```\n *\n */\nexport async function fetchPrices(\n client: BaseClient,\n request: FetchPricesRequest,\n options: RequestOptions = {},\n): Promise<Prices> {\n const requestOptions = parseRequestOptions(options);\n const params = parseUserInput(request, FetchPricesRequestSchema);\n\n return client.clob.postRead('prices', {\n ...requestOptions,\n json: toTokenWithSideRequestPayload(params),\n schema: PricesSchema,\n });\n}\n\nconst FetchOrderBookRequestSchema = exchangeAssetRequestSchema({});\n\nexport type FetchOrderBookRequest =\n | {\n /** Identifier for a CTF token or Polymarket V2 position. */\n assetId: string;\n tokenId?: never;\n }\n | {\n assetId?: never;\n /** @deprecated Use `assetId`. */\n tokenId: string;\n };\n\nexport type FetchOrderBookError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchOrderBookError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Fetches the current order book for an exchange asset.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link FetchOrderBookError}\n * Thrown on failure.\n *\n * @example\n * ```ts\n * const orderBook = await fetchOrderBook(client, {\n * assetId: '0x0122…0000',\n * });\n *\n * // orderBook.bids / orderBook.asks\n * ```\n */\nexport async function fetchOrderBook(\n client: BaseClient,\n request: FetchOrderBookRequest,\n options: RequestOptions = {},\n): Promise<OrderBook> {\n const requestOptions = parseRequestOptions(options);\n const params = parseUserInput(request, FetchOrderBookRequestSchema);\n\n return client.clob.get('/book', {\n ...requestOptions,\n params: toAssetSearchParams(params),\n schema: FetchOrderBookResponseSchema,\n });\n}\n\nconst FetchOrderBooksRequestSchema = z\n .array(exchangeAssetRequestSchema({}))\n .min(1);\n\nexport type FetchOrderBooksRequest = Array<\n | {\n /** Identifier for a CTF token or Polymarket V2 position. */\n assetId: string;\n tokenId?: never;\n }\n | {\n assetId?: never;\n /** @deprecated Use `assetId`. */\n tokenId: string;\n }\n>;\n\nexport type FetchOrderBooksError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchOrderBooksError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Fetches order books for multiple exchange assets.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link FetchOrderBooksError}\n * Thrown on failure.\n *\n * @example\n * ```ts\n * const books = await fetchOrderBooks(client, [\n * {\n * assetId: '0x0122…0000',\n * },\n * ])\n *\n * // books: OrderBook[]\n * ```\n */\nexport async function fetchOrderBooks(\n client: BaseClient,\n request: FetchOrderBooksRequest,\n options: RequestOptions = {},\n): Promise<OrderBook[]> {\n const requestOptions = parseRequestOptions(options);\n const params = parseUserInput(request, FetchOrderBooksRequestSchema);\n\n return client.clob.postRead('books', {\n ...requestOptions,\n json: toTokenRequestPayload(params),\n schema: OrderBooksSchema,\n });\n}\n\nconst FetchSpreadRequestSchema = exchangeAssetRequestSchema({});\n\nexport type FetchSpreadRequest =\n | {\n /** Identifier for a CTF token or Polymarket V2 position. */\n assetId: string;\n tokenId?: never;\n }\n | {\n assetId?: never;\n /** @deprecated Use `assetId`. */\n tokenId: string;\n };\n\nexport type FetchSpreadError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchSpreadError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Fetches the spread for an exchange asset as a decimal string.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link FetchSpreadError}\n * Thrown on failure.\n *\n * @example\n * ```ts\n * const spread = await fetchSpread(client, {\n * assetId: '0x0122…0000',\n * });\n *\n * // spread === '0.02'\n * ```\n *\n */\nexport async function fetchSpread(\n client: BaseClient,\n request: FetchSpreadRequest,\n options: RequestOptions = {},\n): Promise<DecimalString> {\n const requestOptions = parseRequestOptions(options);\n const params = parseUserInput(request, FetchSpreadRequestSchema);\n const response = await client.clob.get('/spread', {\n ...requestOptions,\n params: toAssetSearchParams(params),\n schema: SpreadSchema,\n });\n\n return response.spread;\n}\n\nconst FetchSpreadsRequestSchema = z\n .array(exchangeAssetRequestSchema({}))\n .min(1);\n\nexport type FetchSpreadsRequest = Array<\n | {\n /** Identifier for a CTF token or Polymarket V2 position. */\n assetId: string;\n tokenId?: never;\n }\n | {\n assetId?: never;\n /** @deprecated Use `assetId`. */\n tokenId: string;\n }\n>;\n\nexport type FetchSpreadsError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchSpreadsError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Fetches spreads for multiple exchange assets as an asset ID keyed lookup.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link FetchSpreadsError}\n * Thrown on failure.\n *\n * @example\n * ```ts\n * const spreads = await fetchSpreads(client, [\n * {\n * assetId: '0x0122…0000',\n * },\n * ]);\n *\n * // spreads['0x0122…0000'] === '0.02'\n * ```\n *\n */\nexport async function fetchSpreads(\n client: BaseClient,\n request: FetchSpreadsRequest,\n options: RequestOptions = {},\n): Promise<Spreads> {\n const requestOptions = parseRequestOptions(options);\n const params = parseUserInput(request, FetchSpreadsRequestSchema);\n\n return client.clob.postRead('spreads', {\n ...requestOptions,\n json: toTokenRequestPayload(params),\n schema: SpreadsSchema,\n });\n}\n\nconst FetchLastTradePriceRequestSchema = exchangeAssetRequestSchema({});\n\nexport type FetchLastTradePriceRequest =\n | {\n /** Identifier for a CTF token or Polymarket V2 position. */\n assetId: string;\n tokenId?: never;\n }\n | {\n assetId?: never;\n /** @deprecated Use `assetId`. */\n tokenId: string;\n };\n\nexport type FetchLastTradePriceError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchLastTradePriceError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Fetches the last traded price for an exchange asset.\n *\n * Returns `null` when the asset has not traded.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link FetchLastTradePriceError}\n * Thrown on failure.\n *\n * @example\n * ```ts\n * const trade = await fetchLastTradePrice(client, {\n * assetId: '0x0122…0000',\n * });\n *\n * // trade === LastTradePrice | null\n * ```\n *\n */\nexport async function fetchLastTradePrice(\n client: BaseClient,\n request: FetchLastTradePriceRequest,\n options: RequestOptions = {},\n): Promise<LastTradePrice | null> {\n const requestOptions = parseRequestOptions(options);\n const params = parseUserInput(request, FetchLastTradePriceRequestSchema);\n\n return client.clob.get('/last-trade-price', {\n ...requestOptions,\n params: toAssetSearchParams(params),\n schema: LastTradePriceSchema,\n });\n}\n\nconst FetchLastTradePricesRequestSchema = z\n .array(exchangeAssetRequestSchema({}))\n .min(1);\n\nexport type FetchLastTradePricesRequest = Array<\n | {\n /** Identifier for a CTF token or Polymarket V2 position. */\n assetId: string;\n tokenId?: never;\n }\n | {\n assetId?: never;\n /** @deprecated Use `assetId`. */\n tokenId: string;\n }\n>;\n\nexport type FetchLastTradePricesError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchLastTradePricesError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Fetches last traded prices for multiple exchange assets.\n *\n * Assets without trades are omitted from the response. Match returned rows by\n * `assetId`; the array is not positionally aligned with the request.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link FetchLastTradePricesError}\n * Thrown on failure.\n *\n * @example\n * ```ts\n * const trades = await fetchLastTradePrices(client, [{ assetId: '0x0122…0000' }]);\n *\n * const trade = trades.find((candidate) => candidate.assetId === '0x0122…0000');\n * ```\n *\n */\nexport async function fetchLastTradePrices(\n client: BaseClient,\n request: FetchLastTradePricesRequest,\n options: RequestOptions = {},\n): Promise<LastTradePriceForAsset[]> {\n const requestOptions = parseRequestOptions(options);\n const params = parseUserInput(request, FetchLastTradePricesRequestSchema);\n\n return client.clob.postRead('last-trades-prices', {\n ...requestOptions,\n json: toTokenRequestPayload(params),\n schema: LastTradePricesSchema,\n });\n}\n\nconst ListCurrentRewardsRequestSchema = z\n .object({\n cursor: PaginationCursorSchema.optional(),\n sponsored: z.boolean().optional(),\n })\n .default({});\n\nexport type ListCurrentRewardsRequest = z.input<\n typeof ListCurrentRewardsRequestSchema\n>;\n\nexport type ListCurrentRewardsError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const ListCurrentRewardsError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Lists current active market rewards.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link ListCurrentRewardsError}\n * Thrown on failure.\n *\n * @example\n * Fetch the first page of results:\n * ```ts\n * const result = listCurrentRewards(client);\n *\n * const firstPage = await result.firstPage();\n *\n * // Optionally, fetch additional pages:\n * for await (const page of result.from(firstPage.nextCursor)) {\n * // page.items: CurrentReward[]\n * }\n * ```\n *\n * @example\n * Loop through all pages with `for await`:\n * ```ts\n * const result = listCurrentRewards(client);\n *\n * for await (const page of result) {\n * // page.items: CurrentReward[]\n * }\n * ```\n */\nexport function listCurrentRewards(\n client: BaseClient,\n request: ListCurrentRewardsRequest = {},\n options: RequestOptions = {},\n): Paginated<CurrentReward[]> {\n const requestOptions = parseRequestOptions(options);\n const { cursor, ...params } = parseUserInput(\n request,\n ListCurrentRewardsRequestSchema,\n );\n\n return paginate(\n (nextCursor) =>\n client.clob\n .get('/rewards/markets/current', {\n ...requestOptions,\n params: toSearchParams(\n {\n ...params,\n nextCursor,\n },\n snakeCase(),\n ),\n schema: PaginatedCurrentRewardsSchema,\n })\n .then((response) => ({\n items: response.data,\n hasMore: response.nextCursor !== END_CURSOR,\n nextCursor:\n response.nextCursor === END_CURSOR\n ? undefined\n : toPaginationCursor(response.nextCursor),\n })),\n cursor,\n );\n}\n\nconst ListMarketRewardsRequestSchema = z.object({\n conditionId: ConditionIdSchema,\n cursor: PaginationCursorSchema.optional(),\n sponsored: z.boolean().optional(),\n});\n\nexport type ListMarketRewardsRequest = z.input<\n typeof ListMarketRewardsRequestSchema\n>;\n\nexport type ListMarketRewardsError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const ListMarketRewardsError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Lists reward configurations for a market.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link ListMarketRewardsError}\n * Thrown on failure.\n *\n * @example\n * Fetch the first page of results:\n * ```ts\n * const result = listMarketRewards(client, {\n * conditionId:\n * '0xbd31dc8a20211944f6b70f31557f1001557b59905b7738480ca09bd4532f84af',\n * });\n *\n * const firstPage = await result.firstPage();\n *\n * // Optionally, fetch additional pages:\n * for await (const page of result.from(firstPage.nextCursor)) {\n * // page.items: MarketReward[]\n * }\n * ```\n *\n * @example\n * Loop through all pages with `for await`:\n * ```ts\n * const result = listMarketRewards(client, {\n * conditionId:\n * '0xbd31dc8a20211944f6b70f31557f1001557b59905b7738480ca09bd4532f84af',\n * });\n *\n * for await (const page of result) {\n * // page.items: MarketReward[]\n * }\n * ```\n */\nexport function listMarketRewards(\n client: BaseClient,\n request: ListMarketRewardsRequest,\n options: RequestOptions = {},\n): Paginated<MarketReward[]> {\n const requestOptions = parseRequestOptions(options);\n const { cursor, ...params } = parseUserInput(\n request,\n ListMarketRewardsRequestSchema,\n );\n\n return paginate(\n (nextCursor) =>\n client.clob\n .get(`rewards/markets/${params.conditionId}`, {\n ...requestOptions,\n params: toSearchParams(\n {\n nextCursor,\n sponsored: params.sponsored,\n },\n snakeCase(),\n ),\n schema: PaginatedMarketRewardsSchema,\n })\n .then((response) => ({\n items: response.data,\n hasMore: response.nextCursor !== END_CURSOR,\n nextCursor:\n response.nextCursor === END_CURSOR\n ? undefined\n : toPaginationCursor(response.nextCursor),\n })),\n cursor,\n );\n}\n\ntype ExchangeAssetParams = {\n assetId?: TokenId | PositionId;\n tokenId?: string;\n};\n\nfunction toTokenRequestPayload(params: ExchangeAssetParams[]) {\n return params.map((request) => ({\n token_id: request.assetId ?? request.tokenId,\n }));\n}\n\nfunction toTokenWithSideRequestPayload(\n params: Array<ExchangeAssetParams & { side: OrderSide }>,\n) {\n return params.map((request) => ({\n token_id: request.assetId ?? request.tokenId,\n side: request.side,\n }));\n}\n\nfunction toAssetSearchParams(\n params: ExchangeAssetParams & Record<string, unknown>,\n): URLSearchParams {\n const { assetId: _, tokenId: __, ...rest } = params;\n return toSearchParams(\n { ...rest, tokenId: params.assetId ?? params.tokenId },\n snakeCase(),\n );\n}\n\nconst ListRewardMarketsRequestSchema = z.object({\n query: z.string().optional(),\n tagSlugs: z.array(z.string().min(1)).optional(),\n marketId: z.number().int().positive().optional(),\n eventIds: z.array(z.number().int().positive()).optional(),\n eventTitle: z.string().optional(),\n orderBy: z.enum(RewardMarketSort).optional(),\n sortDirection: SortDirectionSchema.optional(),\n minVolume24hr: z.number().nonnegative().optional(),\n maxVolume24hr: z.number().nonnegative().optional(),\n minSpread: z.number().nonnegative().optional(),\n maxSpread: z.number().nonnegative().optional(),\n minPrice: z.number().nonnegative().optional(),\n maxPrice: z.number().nonnegative().optional(),\n pageSize: z.number().int().min(1).max(500).default(100),\n cursor: PaginationCursorSchema.optional(),\n});\nexport type ListRewardMarketsRequest = z.input<\n typeof ListRewardMarketsRequestSchema\n>;\nexport type ListRewardMarketsError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const ListRewardMarketsError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Lists active markets with reward configurations and discovery metadata.\n * Configurations may be empty. Positive range bounds are min-exclusive and max-inclusive; zero disables a bound.\n * Pages default to 100 items, with a maximum of 500. Without orderBy the order is unspecified; with it sortDirection defaults to ASC.\n * @throws {@link ListRewardMarketsError} Thrown on failure.\n * @example\n * ```ts\n * for await (const page of listRewardMarkets(client, { query: 'sports' })) {\n * console.log(page.items);\n * }\n * ```\n */\nexport function listRewardMarkets(\n client: BaseClient,\n request: ListRewardMarketsRequest = {},\n options: RequestOptions = {},\n): Paginated<RewardMarket[]> {\n const requestOptions = parseRequestOptions(options);\n const { cursor, ...params } = parseUserInput(\n request,\n ListRewardMarketsRequestSchema,\n );\n return paginate(\n (nextCursor) =>\n client.clob\n .get('/rewards/markets/multi', {\n schema: PaginatedRewardMarketsSchema,\n ...requestOptions,\n params: toSearchParams(\n { ...params, nextCursor },\n snakeCase({\n query: 'q',\n tagSlugs: 'tag_slug',\n minVolume24hr: 'min_volume_24hr',\n maxVolume24hr: 'max_volume_24hr',\n eventIds: 'event_id',\n sortDirection: 'position',\n }),\n ),\n })\n .then((response) => ({\n items: response.data,\n hasMore: response.nextCursor !== END_CURSOR,\n nextCursor:\n response.nextCursor === END_CURSOR\n ? undefined\n : toPaginationCursor(response.nextCursor),\n })),\n cursor,\n );\n}\n\nconst FetchCurrentRebatesRequestSchema = z.object({\n date: z.iso\n .date()\n .refine(\n (value) => !value.startsWith('0000-'),\n 'Expected a calendar date in year 1 or later',\n ),\n makerAddress: EvmAddressSchema.refine(\n (value) => !/^0x0{40}$/i.test(value),\n 'Expected a nonzero maker address',\n ),\n});\nexport type FetchCurrentRebatesRequest = z.input<\n typeof FetchCurrentRebatesRequestSchema\n>;\nexport type FetchCurrentRebatesError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchCurrentRebatesError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Fetches maker fee rebates for a calendar day as a direct collection.\n * Amounts are decimal strings in USDC units. No authentication is required.\n * Returns an empty array when the maker has no rebates for the date.\n * @throws {@link FetchCurrentRebatesError} Thrown on failure.\n * @example\n * ```ts\n * const rebates = await fetchCurrentRebates(client, { date: '2026-10-06', makerAddress });\n * ```\n */\nexport async function fetchCurrentRebates(\n client: BaseClient,\n request: FetchCurrentRebatesRequest,\n options: RequestOptions = {},\n): Promise<RebatedFee[]> {\n const requestOptions = parseRequestOptions(options);\n const params = parseUserInput(request, FetchCurrentRebatesRequestSchema);\n return client.clob.get('/rebates/current', {\n schema: RebatedFeesResponseSchema,\n ...requestOptions,\n params: toSearchParams(params, snakeCase()),\n });\n}\n","import type { EvmAddress } from '@kuest/bindings';\nimport {\n type CollateralReturnPlanResponse,\n CollateralReturnPlanResponseSchema,\n CollateralReturnPlanSchema,\n} from '@kuest/bindings/combos';\nimport { WalletType } from '@kuest/bindings/gamma';\nimport {\n type RelayerDepositWalletExecuteRequest,\n RelayerExecuteResponseSchema,\n type RelayerLegacyExecuteRequest,\n RelayerTransactionType,\n} from '@kuest/bindings/relayer';\nimport {\n delay,\n type EvmSignature,\n type HexString,\n invariant,\n isSameEvmAddress,\n type NonEmptyArray,\n} from '@kuest/types';\nimport { z } from 'zod';\nimport type { BaseSecureClient } from '../clients';\nimport {\n CancelledSigningError,\n makeErrorGuard,\n RateLimitError,\n RequestRejectedError,\n SigningError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n} from '../errors';\nimport { parseUserInput } from '../input';\nimport type { TransactionCall, TransactionHandle } from '../types';\nimport { completeWith } from '../workflow';\nimport {\n buildDepositWalletExecuteRequest,\n buildProxyWalletExecuteRequest,\n buildSafeWalletExecuteRequest,\n extractOnChainNonceFromSubmitError,\n GaslessTransactionHandle,\n type GaslessWorkflowRequest,\n isRetryableGaslessSubmitError,\n resignDepositWalletExecuteRequest,\n} from './gasless';\n\nexport {\n CollateralReturnKnownOperationKind,\n type CollateralReturnOperation,\n type CollateralReturnOperationKind,\n type CollateralReturnPlanResponse,\n type CollateralReturnPositionAmount,\n type CollateralReturnPositionSummary,\n type CollateralReturnRouterCall,\n} from '@kuest/bindings/combos';\n\n// Planning and submit re-validation both recompute wallet state server-side\n// and can take well beyond the transport's standard timeout.\nconst COLLATERAL_RETURN_REQUEST_TIMEOUT_MS = 2 * 60_000;\n\nexport type PlanCollateralReturnError =\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError;\nexport const PlanCollateralReturnError = makeErrorGuard(\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n);\n\n/**\n * Plans a collateral return for the authenticated account.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link PlanCollateralReturnError}\n * Thrown on failure.\n */\nexport async function planCollateralReturn(\n client: BaseSecureClient,\n): Promise<CollateralReturnPlanResponse> {\n assertCollateralReturnAccount(client);\n\n return client.combos.post('/v1/collateral-return/plan', {\n json: { wallet: client.account.wallet },\n timeout: COLLATERAL_RETURN_REQUEST_TIMEOUT_MS,\n schema: CollateralReturnPlanResponseSchema,\n });\n}\n\nconst ExecuteCollateralReturnPlanRequestSchema = z.object({\n plan: CollateralReturnPlanSchema,\n});\n\nexport type ExecuteCollateralReturnPlanRequest = z.infer<\n typeof ExecuteCollateralReturnPlanRequestSchema\n>;\n\nexport type CollateralReturnExecutionWorkflow = AsyncGenerator<\n GaslessWorkflowRequest,\n TransactionHandle,\n EvmAddress | EvmSignature | TransactionHandle\n>;\n\nconst COLLATERAL_RETURN_SUBMIT_RETRY_ATTEMPTS = 10;\nconst COLLATERAL_RETURN_METADATA = 'Collateral return';\n\nexport type PrepareCollateralReturnExecutionError =\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const PrepareCollateralReturnExecutionError = makeErrorGuard(\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Starts a collateral return execution workflow for a previously requested\n * plan.\n *\n * The workflow signs and submits the exact call carried by the plan.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link PrepareCollateralReturnExecutionError}\n * Thrown on failure.\n */\nexport async function prepareCollateralReturnExecution(\n client: BaseSecureClient,\n request: ExecuteCollateralReturnPlanRequest,\n): Promise<CollateralReturnExecutionWorkflow> {\n assertCollateralReturnAccount(client);\n const { plan } = parseUserInput(\n request,\n ExecuteCollateralReturnPlanRequestSchema,\n );\n\n invariant(\n client.supportsGasless,\n 'Collateral return execution requires a Relayer API Key or Builder API Key in the client configuration.',\n );\n\n if (!isSameEvmAddress(plan.wallet, client.account.wallet)) {\n throw new UserInputError(\n 'The collateral return plan was created for a different wallet than the authenticated account.',\n );\n }\n\n if (plan.chainId !== client.environment.chainId) {\n throw new UserInputError(\n `The collateral return plan was created for chain ${plan.chainId}, but the client is configured for chain ${client.environment.chainId}.`,\n );\n }\n\n return async function* (): CollateralReturnExecutionWorkflow {\n const calls: NonEmptyArray<TransactionCall> = [\n {\n data: plan.routerCall.data,\n to: plan.routerCall.to,\n value: 0n,\n },\n ];\n\n for (\n let attempt = 0;\n attempt <= COLLATERAL_RETURN_SUBMIT_RETRY_ATTEMPTS;\n attempt += 1\n ) {\n try {\n const envelope = yield* buildCollateralReturnEnvelope(client, calls);\n\n try {\n return await submitCollateralReturnPlan(\n client,\n plan.planHash,\n envelope,\n );\n } catch (error) {\n const nonce = extractOnChainNonceFromSubmitError(error);\n if (\n nonce === undefined ||\n envelope.type !== RelayerTransactionType.WALLET\n ) {\n throw error;\n }\n\n const resignedEnvelope = yield* resignDepositWalletExecuteRequest(\n client,\n envelope,\n calls,\n nonce,\n );\n\n return await submitCollateralReturnPlan(\n client,\n plan.planHash,\n resignedEnvelope,\n );\n }\n } catch (error) {\n if (\n !isRetryableGaslessSubmitError(error) ||\n attempt === COLLATERAL_RETURN_SUBMIT_RETRY_ATTEMPTS\n ) {\n throw error;\n }\n\n await delay(client.environment.relayerPollFrequencyMs);\n }\n }\n\n invariant(false, 'Expected collateral return submit retry loop to return');\n }.call(null);\n}\n\nexport type ExecuteCollateralReturnPlanError =\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError\n | CancelledSigningError\n | SigningError;\nexport const ExecuteCollateralReturnPlanError = makeErrorGuard(\n CancelledSigningError,\n RateLimitError,\n RequestRejectedError,\n SigningError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Executes a collateral return plan for the authenticated account.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link ExecuteCollateralReturnPlanError}\n * Thrown on failure.\n */\nexport function executeCollateralReturnPlan(\n client: BaseSecureClient,\n request: ExecuteCollateralReturnPlanRequest,\n): Promise<TransactionHandle> {\n return prepareCollateralReturnExecution(client, request).then(\n completeWith(client.signer),\n );\n}\n\nfunction assertCollateralReturnAccount(client: BaseSecureClient): void {\n invariant(\n client.account.walletType === WalletType.DEPOSIT_WALLET ||\n client.account.walletType === WalletType.GNOSIS_SAFE ||\n client.account.walletType === WalletType.POLY_PROXY,\n 'Collateral return supports Deposit Wallet, Safe Wallet, and Proxy Wallet accounts',\n );\n throw new UserInputError(\n 'SDK collateral return and protocol V2 router execution are not supported.',\n );\n}\n\ntype CollateralReturnEnvelope =\n | RelayerDepositWalletExecuteRequest\n | RelayerLegacyExecuteRequest;\n\nfunction buildCollateralReturnEnvelope(\n client: BaseSecureClient,\n calls: NonEmptyArray<TransactionCall>,\n): AsyncGenerator<\n GaslessWorkflowRequest,\n CollateralReturnEnvelope,\n EvmAddress | EvmSignature | TransactionHandle\n> {\n switch (client.account.walletType) {\n case WalletType.GNOSIS_SAFE:\n return buildSafeWalletExecuteRequest(\n client,\n calls,\n COLLATERAL_RETURN_METADATA,\n );\n case WalletType.POLY_PROXY:\n return buildProxyWalletExecuteRequest(\n client,\n calls,\n COLLATERAL_RETURN_METADATA,\n );\n default:\n return buildDepositWalletExecuteRequest(\n client,\n calls,\n COLLATERAL_RETURN_METADATA,\n );\n }\n}\n\nasync function submitCollateralReturnPlan(\n client: BaseSecureClient,\n planHash: HexString,\n envelope: CollateralReturnEnvelope,\n): Promise<TransactionHandle> {\n const response = await client.combos.post('/v1/collateral-return/submit', {\n json: { envelope, plan_hash: planHash },\n timeout: COLLATERAL_RETURN_REQUEST_TIMEOUT_MS,\n schema: RelayerExecuteResponseSchema,\n });\n\n return new GaslessTransactionHandle(client, response);\n}\n","import {\n CommentIdSchema,\n type CommentParentEntityType,\n CommentParentEntityTypeSchema,\n type EventId,\n EventIdSchema,\n type PaginationCursor,\n PaginationCursorSchema,\n type SeriesId,\n} from '@kuest/bindings';\nimport {\n type Comment,\n ListCommentsKeysetResponseSchema,\n ListCommentsResponseSchema,\n SeriesIdSchema,\n} from '@kuest/bindings/gamma';\nimport { z } from 'zod';\nimport type { BaseClient } from '../clients';\nimport {\n makeErrorGuard,\n PaginationLimitError,\n RateLimitError,\n RequestAbortedError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n} from '../errors';\nimport { parseUserInput } from '../input';\nimport {\n decodeOffsetCursor,\n encodeKeysetCursor,\n encodeOffsetCursor,\n keysetCursorFromPayload,\n offsetCursorFromPayload,\n type Page,\n PageSizeSchema,\n type Paginated,\n paginate,\n readCursorPayload,\n} from '../pagination';\nimport { parseRequestOptions, type RequestOptions } from '../request-options';\nimport { snakeCase, toSearchParams } from './params';\n\n// Matches the upstream per-request limit cap and offset cap on the comments\n// listings; pages starting past the offset cap are rejected upstream.\nconst MAX_COMMENTS_PAGE_SIZE = 100;\nconst MAX_COMMENTS_OFFSET = 200;\nconst COMMENT_CURSOR_LIMITS = {\n maxOffset: MAX_COMMENTS_OFFSET,\n maxPageSize: MAX_COMMENTS_PAGE_SIZE,\n};\n\nconst ListCommentsRequestSchema = z.object({\n ascending: z.boolean().optional(),\n cursor: PaginationCursorSchema.optional(),\n pageSize: PageSizeSchema.max(MAX_COMMENTS_PAGE_SIZE).default(20),\n getPositions: z.boolean().optional(),\n holdersOnly: z.boolean().optional(),\n order: z.string().optional(),\n parentEntityId: z.union([EventIdSchema, SeriesIdSchema]),\n parentEntityType: CommentParentEntityTypeSchema,\n});\n\nconst FetchCommentsByIdRequestSchema = z.object({\n getPositions: z.boolean().optional(),\n id: CommentIdSchema,\n});\n\nconst ListCommentsByUserAddressRequestSchema = z.object({\n address: z.string(),\n ascending: z.boolean().optional(),\n cursor: PaginationCursorSchema.optional(),\n order: z.string().optional(),\n pageSize: PageSizeSchema.max(MAX_COMMENTS_PAGE_SIZE).default(20),\n});\n\nexport type ListCommentsRequest = z.input<typeof ListCommentsRequestSchema>;\nexport type FetchCommentsByIdRequest = z.input<\n typeof FetchCommentsByIdRequestSchema\n>;\nexport type ListCommentsByUserAddressRequest = z.input<\n typeof ListCommentsByUserAddressRequestSchema\n>;\n\nexport type ListCommentsError =\n | RequestAbortedError\n | PaginationLimitError\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const ListCommentsError = makeErrorGuard(\n RequestAbortedError,\n PaginationLimitError,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\ntype ListCommentsParams = Omit<\n z.output<typeof ListCommentsRequestSchema>,\n 'cursor' | 'pageSize'\n>;\n\n/** The orders the cursor-paginated comments listing accepts. */\nconst KeysetCommentOrderSchema = z.enum(['id', 'createdAt']);\n\ntype KeysetCommentOrder = z.infer<typeof KeysetCommentOrderSchema>;\n\ntype KeysetCommentsQuery = {\n ascending: boolean;\n order: KeysetCommentOrder;\n parentEntityId: EventId | SeriesId;\n parentEntityType: CommentParentEntityType;\n};\n\n/**\n * Decides whether a parent-entity comments read can page by server cursor and,\n * if so, the exact query to send. Reads that filter by holders, include\n * positions or sort by anything other than `id`/`createdAt` stay on offset\n * pages, where the service still honours those options.\n *\n * Without `order` the offset listing serves newest first and ignores\n * `ascending`; the cursor listing defaults to oldest first, so the direction\n * is pinned explicitly to keep the first page identical. With `order` both\n * listings default to ascending.\n */\nfunction toKeysetCommentsQuery(\n params: ListCommentsParams,\n): KeysetCommentsQuery | undefined {\n if (params.holdersOnly === true || params.getPositions === true) {\n return undefined;\n }\n\n if (params.order === undefined) {\n return {\n ascending: false,\n order: 'createdAt',\n parentEntityId: params.parentEntityId,\n parentEntityType: params.parentEntityType,\n };\n }\n\n const order = KeysetCommentOrderSchema.safeParse(params.order);\n\n if (!order.success) {\n return undefined;\n }\n\n return {\n ascending: params.ascending ?? true,\n order: order.data,\n parentEntityId: params.parentEntityId,\n parentEntityType: params.parentEntityType,\n };\n}\n\n/**\n * Lists comments for an event or series.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * Without `order`, pages are newest first and `ascending` is ignored. With\n * `order` (`id` or `createdAt`), pages are ascending unless `ascending` is\n * `false`.\n *\n * Reads without `holdersOnly` or `getPositions` and with one of those orders\n * page through the whole thread. Their cursors continue that exact query and\n * are rejected for a different parent, order or direction.\n *\n * Reads with `holdersOnly`, `getPositions` or another order serve pages up to\n * offset 200. Automatic iteration yields the last accessible full page with\n * `limitReached: true` and stops normally; `hasMore` stays true because\n * completeness cannot be established. Explicitly following its cursor throws\n * {@link PaginationLimitError} before any request. Cursors saved from earlier\n * versions keep working with the same arguments.\n *\n * `pageSize` counts top-level comments; replies ride along in the same page.\n * A thread ending exactly on a page boundary may return one final empty page.\n *\n * @throws {@link ListCommentsError}\n * Thrown on failure.\n *\n * @example\n * Fetch the first page of results:\n * ```ts\n * const result = listComments(client, {\n * parentEntityId: '123',\n * parentEntityType: CommentParentEntityType.Event,\n * pageSize: 20,\n * });\n *\n * const firstPage = await result.firstPage();\n *\n * // Optionally, fetch additional pages:\n * for await (const page of result.from(firstPage.nextCursor)) {\n * // page.items: Comment[]\n * }\n * ```\n *\n * @example\n * Loop through all pages with `for await`:\n * ```ts\n * const result = listComments(client, {\n * parentEntityId: '123',\n * parentEntityType: CommentParentEntityType.Event,\n * pageSize: 20,\n * });\n *\n * for await (const page of result) {\n * // page.items: Comment[]\n * }\n * ```\n */\nexport function listComments(\n client: BaseClient,\n request: ListCommentsRequest,\n options: RequestOptions = {},\n): Paginated<Comment[]> {\n const requestOptions = parseRequestOptions(options);\n const { cursor, pageSize, ...params } = parseUserInput(\n request,\n ListCommentsRequestSchema,\n );\n const keysetQuery = toKeysetCommentsQuery(params);\n\n return paginate((cursor) => {\n if (cursor === undefined) {\n return keysetQuery === undefined\n ? fetchCommentsOffsetPage(\n client,\n params,\n { offset: 0, pageSize },\n requestOptions,\n )\n : fetchCommentsKeysetPage(\n client,\n keysetQuery,\n pageSize,\n undefined,\n requestOptions,\n );\n }\n\n // Cursors minted before cursor pagination carry only offset state and\n // continue on offset pages under the same limits as before.\n const payload = readCursorPayload(cursor);\n if (payload === undefined) {\n throw new UserInputError('Invalid pagination cursor');\n }\n\n const afterCursor = keysetCursorFromPayload(payload, keysetQuery);\n if (afterCursor === undefined || keysetQuery === undefined) {\n return fetchCommentsOffsetPage(\n client,\n params,\n offsetCursorFromPayload(payload, COMMENT_CURSOR_LIMITS),\n requestOptions,\n );\n }\n\n return fetchCommentsKeysetPage(\n client,\n keysetQuery,\n pageSize,\n afterCursor,\n requestOptions,\n );\n }, cursor);\n}\n\nfunction fetchCommentsOffsetPage(\n client: BaseClient,\n params: ListCommentsParams,\n page: { offset: number; pageSize: number },\n options: RequestOptions = {},\n): Promise<Page<Comment[]>> {\n const requestOptions = parseRequestOptions(options);\n return client.gamma\n .get('/comments', {\n schema: ListCommentsResponseSchema,\n ...requestOptions,\n params: toSearchParams(\n {\n ascending: params.ascending,\n getPositions: params.getPositions,\n holdersOnly: params.holdersOnly,\n limit: page.pageSize,\n offset: page.offset,\n order: params.order,\n parentEntityId: params.parentEntityId,\n parentEntityType: params.parentEntityType,\n },\n snakeCase(),\n ),\n })\n .then((comments) => {\n // The page size bounds top-level comments; their replies ride along\n // in the same array, so count the roots to judge whether the page\n // was full.\n const rootCount = comments.filter(\n (comment) => comment.parentCommentID == null,\n ).length;\n const hasMore = rootCount >= page.pageSize;\n\n return {\n items: comments,\n hasMore,\n limitReached:\n hasMore && page.offset + page.pageSize > MAX_COMMENTS_OFFSET,\n nextCursor: hasMore\n ? encodeOffsetCursor({\n offset: page.offset + page.pageSize,\n pageSize: page.pageSize,\n })\n : undefined,\n };\n });\n}\n\nfunction fetchCommentsKeysetPage(\n client: BaseClient,\n query: KeysetCommentsQuery,\n pageSize: number,\n afterCursor?: PaginationCursor,\n options: RequestOptions = {},\n): Promise<Page<Comment[]>> {\n const requestOptions = parseRequestOptions(options);\n return client.gamma\n .get('/comments/keyset', {\n schema: ListCommentsKeysetResponseSchema,\n ...requestOptions,\n params: toSearchParams(\n {\n afterCursor,\n ascending: query.ascending,\n limit: pageSize,\n order: query.order,\n parentEntityId: query.parentEntityId,\n parentEntityType: query.parentEntityType,\n },\n snakeCase(),\n ),\n })\n .then((response) => ({\n items: response.items,\n hasMore: response.nextCursor !== undefined,\n nextCursor:\n response.nextCursor === undefined\n ? undefined\n : encodeKeysetCursor(response.nextCursor, query),\n }));\n}\n\nexport type FetchCommentsByIdError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchCommentsByIdError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Fetches a comment thread by comment id.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link FetchCommentsByIdError}\n * Thrown on failure.\n *\n * @example\n * ```ts\n * const thread = await fetchCommentsById(client, {\n * id: '456',\n * getPositions: true,\n * });\n *\n * // thread: Comment[]\n * ```\n */\nexport async function fetchCommentsById(\n client: BaseClient,\n request: FetchCommentsByIdRequest,\n options: RequestOptions = {},\n): Promise<Comment[]> {\n const requestOptions = parseRequestOptions(options);\n const params = parseUserInput(request, FetchCommentsByIdRequestSchema);\n\n return client.gamma.get(`comments/${params.id}`, {\n schema: ListCommentsResponseSchema,\n ...requestOptions,\n params: toSearchParams(\n {\n getPositions: params.getPositions,\n },\n snakeCase(),\n ),\n });\n}\n\nexport type ListCommentsByUserAddressError =\n | RequestAbortedError\n | PaginationLimitError\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const ListCommentsByUserAddressError = makeErrorGuard(\n RequestAbortedError,\n PaginationLimitError,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Lists comments written by a wallet address.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * Pages starting past offset 200 are not served. Automatic iteration yields\n * the last accessible full page with `limitReached: true` and stops normally;\n * `hasMore` stays true because completeness cannot be established. Explicitly\n * following its cursor throws {@link PaginationLimitError} before any request.\n *\n * This is a hard stop for this listing: there are no range filters to retrieve\n * the remaining comments.\n *\n * @throws {@link ListCommentsByUserAddressError}\n * Thrown on failure.\n *\n * @example\n * Fetch the first page of results:\n * ```ts\n * const result = listCommentsByUserAddress(client, {\n * address: '0x1234...',\n * pageSize: 10,\n * order: 'createdAt',\n * ascending: false,\n * });\n *\n * const firstPage = await result.firstPage();\n *\n * // Optionally, fetch additional pages:\n * for await (const page of result.from(firstPage.nextCursor)) {\n * // page.items: Comment[]\n * }\n * ```\n *\n * @example\n * Loop through all pages with `for await`:\n * ```ts\n * const result = listCommentsByUserAddress(client, {\n * address: '0x1234...',\n * pageSize: 10,\n * order: 'createdAt',\n * ascending: false,\n * });\n *\n * for await (const page of result) {\n * // page.items: Comment[]\n * }\n * ```\n */\nexport function listCommentsByUserAddress(\n client: BaseClient,\n request: ListCommentsByUserAddressRequest,\n options: RequestOptions = {},\n): Paginated<Comment[]> {\n const requestOptions = parseRequestOptions(options);\n const { address, cursor, pageSize, ...params } = parseUserInput(\n request,\n ListCommentsByUserAddressRequestSchema,\n );\n\n return paginate((cursor) => {\n const decoded = decodeOffsetCursor(cursor, pageSize, COMMENT_CURSOR_LIMITS);\n\n return client.gamma\n .get(`comments/user_address/${address}`, {\n schema: ListCommentsResponseSchema,\n ...requestOptions,\n params: toSearchParams(\n {\n ascending: params.ascending,\n limit: decoded.pageSize,\n offset: decoded.offset,\n order: params.order,\n },\n snakeCase(),\n ),\n })\n .then((comments) => {\n const hasMore = comments.length >= decoded.pageSize;\n\n return {\n items: comments,\n hasMore,\n limitReached:\n hasMore && decoded.offset + decoded.pageSize > MAX_COMMENTS_OFFSET,\n nextCursor: hasMore\n ? encodeOffsetCursor({\n offset: decoded.offset + decoded.pageSize,\n pageSize: decoded.pageSize,\n })\n : undefined,\n };\n });\n }, cursor);\n}\n","import { UserInputError } from './errors';\n\ntype MarketUrlResource = 'event' | 'market';\n\nexport function parseMarketSlugUrl(\n rawUrl: string,\n resource: MarketUrlResource,\n): string {\n let url: URL;\n\n try {\n url = new URL(rawUrl);\n } catch (cause) {\n throw new UserInputError('Expected a valid HTTPS market URL.', { cause });\n }\n\n if (url.protocol !== 'https:' || !url.hostname) {\n throw new UserInputError('Expected a valid HTTPS market URL.');\n }\n\n const [actualResource, slug, ...extraSegments] = url.pathname\n .split('/')\n .filter(Boolean);\n const marketSlug = extraSegments[0];\n\n if (\n resource === 'market' &&\n actualResource === 'event' &&\n slug !== undefined &&\n extraSegments.length <= 1\n ) {\n return marketSlug ?? slug;\n }\n\n if (\n actualResource !== resource ||\n slug === undefined ||\n extraSegments.length > 0\n ) {\n throw new UserInputError(`Expected a ${resource} URL.`);\n }\n\n return slug;\n}\n","import {\n IsoCalendarDateStringSchema,\n IsoDateTimeStringSchema,\n type PaginationCursor,\n PaginationCursorSchema,\n QuestionIdSchema,\n} from '@kuest/bindings';\nimport {\n CanonicalMarketConditionIdSchema,\n FetchEventLiveVolumeResponseSchema,\n FetchResolutionsResponseSchema,\n type LiveVolume,\n type Resolution,\n} from '@kuest/bindings/data';\nimport {\n type Event,\n EventSchema,\n FetchEventTagsResponseSchema,\n ListEventsKeysetResponseSchema,\n ProtocolVersion,\n type TagReference,\n} from '@kuest/bindings/gamma';\nimport { z } from 'zod';\nimport type { BaseClient } from '../clients';\nimport {\n makeErrorGuard,\n RateLimitError,\n RequestAbortedError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n} from '../errors';\nimport { parseUserInput } from '../input';\nimport { parseMarketSlugUrl } from '../market-url';\nimport {\n encodeKeysetCursor,\n keysetCursorFromPayload,\n PageSizeSchema,\n type Paginated,\n paginate,\n readCursorPayload,\n} from '../pagination';\nimport { parseRequestOptions, type RequestOptions } from '../request-options';\nimport {\n ClosedFilterSchema,\n PositiveInt32EventIdSchema,\n snakeCase,\n toDataSearchParams,\n toSearchParams,\n} from './params';\n\nexport {\n ResolutionMarketType,\n ResolutionReporter,\n ResolutionSettlementTimeBasis,\n ResolutionSource,\n ResolutionStatus,\n} from '@kuest/bindings/data';\n\nconst ListEventsRequestSchema = z.object({\n ascending: z.boolean().optional(),\n closed: ClosedFilterSchema.default(false),\n cursor: PaginationCursorSchema.optional(),\n pageSize: PageSizeSchema.optional(),\n cyom: z.boolean().optional(),\n endDateMax: IsoDateTimeStringSchema.optional(),\n endDateMin: IsoDateTimeStringSchema.optional(),\n ended: z.boolean().optional(),\n eventDate: IsoCalendarDateStringSchema.optional(),\n eventWeek: z.number().int().optional(),\n excludeTagIds: z.array(z.number().int()).optional(),\n featured: z.boolean().optional(),\n featuredOrder: z.boolean().optional(),\n gameIds: z.array(z.number().int()).optional(),\n ids: z.array(z.number().int()).optional(),\n includeBestLines: z.boolean().optional(),\n includeChat: z.boolean().optional(),\n includeChildren: z.boolean().optional(),\n includeTemplate: z.boolean().optional(),\n liquidityMax: z.number().optional(),\n liquidityMin: z.number().optional(),\n live: z.boolean().optional(),\n locale: z.string().optional(),\n order: z.string().optional(),\n parentEventId: z.number().int().optional(),\n partnerSlug: z.string().optional(),\n recurrence: z.enum(['daily', 'weekly', 'monthly']).optional(),\n relatedTags: z.boolean().optional(),\n seriesIds: z.array(z.number().int()).optional(),\n slug: z.array(z.string()).optional(),\n startDateMax: IsoDateTimeStringSchema.optional(),\n startDateMin: IsoDateTimeStringSchema.optional(),\n startTimeMax: IsoDateTimeStringSchema.optional(),\n startTimeMin: IsoDateTimeStringSchema.optional(),\n tagIds: z.array(z.number().int()).optional(),\n tagMatch: z.enum(['any', 'all']).optional(),\n tagSlug: z.string().optional(),\n titleSearch: z.string().optional(),\n version: z\n .union([\n z.enum(ProtocolVersion),\n z.array(z.enum(ProtocolVersion)).min(1).max(2),\n ])\n .optional(),\n volumeMax: z.number().optional(),\n volumeMin: z.number().optional(),\n});\n\nexport type ListEventsRequest = z.input<typeof ListEventsRequestSchema>;\n\nconst FetchEventRequestSchema = z.union([\n z.object({\n id: z.string(),\n includeBestLines: z.boolean().optional(),\n includeChat: z.boolean().optional(),\n includeTemplate: z.boolean().optional(),\n locale: z.string().optional(),\n }),\n z.object({\n slug: z.string(),\n includeBestLines: z.boolean().optional(),\n includeChat: z.boolean().optional(),\n includeTemplate: z.boolean().optional(),\n locale: z.string().optional(),\n }),\n z.object({\n url: z.string(),\n includeBestLines: z.boolean().optional(),\n includeChat: z.boolean().optional(),\n includeTemplate: z.boolean().optional(),\n locale: z.string().optional(),\n }),\n]);\n\nexport type FetchEventRequest = z.input<typeof FetchEventRequestSchema>;\n\nconst FetchEventTagsRequestSchema = z.object({\n id: z.string(),\n});\n\nexport type FetchEventTagsRequest = z.input<typeof FetchEventTagsRequestSchema>;\n\ntype ListEventsParams = z.output<typeof ListEventsRequestSchema>;\n\nexport type ListEventsError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const ListEventsError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Lists events.\n *\n * Defaults to open events. Pass `closed: true` for closed events or\n * `closed: 'any'` for either state; no identifier filter is required.\n * Optionally filter by protocol with `version: ProtocolVersion.V1` or\n * `ProtocolVersion.V2`, or pass both in an array to include both protocols.\n * Arrays accept one or two values. Omitting `version` uses the current server\n * default of CTF events (v1).\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * Cursors continue the exact query they were minted for and are rejected for a\n * different one before any request. Cursors saved from earlier versions keep\n * working with the same arguments.\n *\n * @throws {@link ListEventsError}\n * Thrown on failure.\n *\n * @example\n * Fetch the first page of results:\n * ```ts\n * const result = listEvents(client, {\n * closed: false,\n * pageSize: 10,\n * });\n *\n * const firstPage = await result.firstPage();\n *\n * // Optionally, fetch additional pages:\n * for await (const page of result.from(firstPage.nextCursor)) {\n * // page.items: Event[]\n * }\n * ```\n *\n * @example\n * Loop through all pages with `for await`:\n * ```ts\n * const result = listEvents(client, {\n * closed: false,\n * pageSize: 10,\n * });\n *\n * for await (const page of result) {\n * // page.items: Event[]\n * }\n * ```\n */\nexport function listEvents(\n client: BaseClient,\n request: ListEventsRequest = {},\n options: RequestOptions = {},\n): Paginated<Event[]> {\n const requestOptions = parseRequestOptions(options);\n const {\n cursor: initialCursor,\n pageSize,\n ...query\n } = parseUserInput(request, ListEventsRequestSchema);\n\n return paginate(\n (cursor) =>\n client.gamma\n .get('/events/keyset', {\n schema: ListEventsKeysetResponseSchema,\n ...requestOptions,\n params: toEventsSearchParams({\n ...query,\n pageSize,\n cursor:\n cursor === undefined ? undefined : toEventsCursor(cursor, query),\n }),\n })\n .then((response) => ({\n items: response.items,\n hasMore: response.nextCursor !== undefined,\n nextCursor:\n response.nextCursor === undefined\n ? undefined\n : encodeKeysetCursor(response.nextCursor, query),\n })),\n initialCursor,\n );\n}\n\n// Cursors minted before query binding are raw service tokens; they continue\n// unchecked so saved cursors keep working.\nfunction toEventsCursor(cursor: PaginationCursor, query: object) {\n const payload = readCursorPayload(cursor);\n if (payload === undefined) {\n return cursor;\n }\n\n return keysetCursorFromPayload(payload, query) ?? cursor;\n}\n\nexport type FetchEventError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchEventError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Fetches an event.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link FetchEventError}\n * Thrown on failure.\n *\n * @example\n * ```ts\n * const event = await fetchEvent(client, {\n * id: '12345',\n * });\n *\n * const eventBySlug = await fetchEvent(client, {\n * slug: 'presidential-election-2028',\n * });\n *\n * const eventByUrl = await fetchEvent(client, {\n * url: 'https://operator.example/event/example-event',\n * });\n *\n * // event === Event\n * ```\n */\nexport async function fetchEvent(\n client: BaseClient,\n request: FetchEventRequest,\n options: RequestOptions = {},\n): Promise<Event> {\n const requestOptions = parseRequestOptions(options);\n const params = parseUserInput(request, FetchEventRequestSchema);\n\n if ('id' in params) {\n return client.gamma.get(`events/${params.id}`, {\n schema: EventSchema,\n ...requestOptions,\n params: toFetchEventByIdSearchParams(params),\n });\n }\n\n const slug =\n 'url' in params ? parseMarketSlugUrl(params.url, 'event') : params.slug;\n\n return client.gamma.get(`events/slug/${slug}`, {\n schema: EventSchema,\n ...requestOptions,\n params: toFetchEventBySlugSearchParams(params),\n });\n}\n\nexport type FetchEventTagsError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchEventTagsError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Fetches an event's tags.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link FetchEventTagsError}\n * Thrown on failure.\n *\n * @example\n * ```ts\n * const tags = await fetchEventTags(client, {\n * id: '12345',\n * });\n *\n * // tags: TagReference[]\n * ```\n */\nexport async function fetchEventTags(\n client: BaseClient,\n request: FetchEventTagsRequest,\n options: RequestOptions = {},\n): Promise<TagReference[]> {\n const requestOptions = parseRequestOptions(options);\n const params = parseUserInput(request, FetchEventTagsRequestSchema);\n\n return client.gamma.get(`events/${params.id}/tags`, {\n ...requestOptions,\n schema: FetchEventTagsResponseSchema,\n });\n}\n\nconst ResolutionConditionIdsSchema = z\n .array(CanonicalMarketConditionIdSchema)\n .min(1)\n .transform((conditionIds) => [...new Set(conditionIds)])\n .refine(\n (conditionIds) => conditionIds.length <= 20,\n 'At most 20 distinct condition ids',\n );\n\nconst ResolutionEventIdsSchema = z\n .array(PositiveInt32EventIdSchema)\n .min(1)\n .transform((eventIds) => [...new Set(eventIds)])\n .refine((eventIds) => eventIds.length <= 20, 'At most 20 distinct event ids');\n\nconst FetchResolutionsRequestSchema = z.union([\n z.object({\n questionId: QuestionIdSchema,\n conditionIds: z.never().optional(),\n eventIds: z.never().optional(),\n }),\n z.object({\n questionId: z.never().optional(),\n conditionIds: ResolutionConditionIdsSchema,\n eventIds: z.never().optional(),\n }),\n z.object({\n questionId: z.never().optional(),\n conditionIds: z.never().optional(),\n eventIds: ResolutionEventIdsSchema,\n }),\n]);\n\nexport type FetchResolutionsByQuestionRequest = {\n questionId: string;\n conditionIds?: never;\n eventIds?: never;\n};\n\nexport type FetchResolutionsByConditionRequest = {\n questionId?: never;\n conditionIds: string[];\n eventIds?: never;\n};\n\nexport type FetchResolutionsByEventRequest = {\n questionId?: never;\n conditionIds?: never;\n eventIds: Array<number | string>;\n};\n\nexport type FetchResolutionsRequest =\n | FetchResolutionsByQuestionRequest\n | FetchResolutionsByConditionRequest\n | FetchResolutionsByEventRequest;\n\nexport type FetchResolutionsError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchResolutionsError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Fetches resolution lifecycle rows by question, condition, or event.\n *\n * Provide exactly one selector. Condition and event lookups accept at most 20\n * distinct IDs and return one row per matching condition. Missing resolutions\n * return an empty array. A 31-byte protocol v2 market condition ID is\n * right-padded to its canonical 32-byte form. A 31-byte combo condition ID is\n * rejected.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link FetchResolutionsError}\n * Thrown on failure.\n *\n * @example\n * ```ts\n * const resolutions = await fetchResolutions(client, {\n * eventIds: ['903193'],\n * });\n *\n * // resolutions: Resolution[]\n * ```\n */\nexport async function fetchResolutions(\n client: BaseClient,\n request: FetchResolutionsRequest,\n options: RequestOptions = {},\n): Promise<Resolution[]> {\n const requestOptions = parseRequestOptions(options);\n const { conditionIds, eventIds, questionId } = parseUserInput(\n request,\n FetchResolutionsRequestSchema,\n );\n\n return client.data.get('/v2/resolutions', {\n schema: FetchResolutionsResponseSchema,\n ...requestOptions,\n params: toDataSearchParams({\n questionId,\n condition: conditionIds,\n eventId: eventIds,\n }),\n });\n}\n\nconst FetchEventLiveVolumeRequestSchema = z.object({\n eventIds: z\n .array(PositiveInt32EventIdSchema)\n .min(1)\n .transform((eventIds) => [...new Set(eventIds)]),\n});\n\nexport type FetchEventLiveVolumeRequest = z.input<\n typeof FetchEventLiveVolumeRequestSchema\n>;\n\nexport type FetchEventLiveVolumeError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchEventLiveVolumeError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Fetches cumulative taker volume for one or more events.\n *\n * Results contain one row per market, ordered by taker volume descending, and\n * a total across all returned markets. Volume is measured in shares. Event IDs\n * must be positive 32-bit integers. Transient rate limits are retried\n * by default.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link FetchEventLiveVolumeError}\n * Thrown on failure.\n *\n * @example\n * ```ts\n * const volume = await fetchEventLiveVolume(client, {\n * eventIds: ['160707'],\n * });\n *\n * // volume: LiveVolume\n * ```\n */\nexport async function fetchEventLiveVolume(\n client: BaseClient,\n request: FetchEventLiveVolumeRequest,\n options: RequestOptions = {},\n): Promise<LiveVolume> {\n const requestOptions = parseRequestOptions(options);\n const { eventIds } = parseUserInput(\n request,\n FetchEventLiveVolumeRequestSchema,\n );\n\n return client.data.get('/v2/live-volume', {\n schema: FetchEventLiveVolumeResponseSchema,\n ...requestOptions,\n params: toDataSearchParams({ eventId: eventIds }),\n });\n}\n\nfunction toEventsSearchParams(params: ListEventsParams): URLSearchParams {\n return toSearchParams(\n params,\n snakeCase<ListEventsParams>({\n cursor: 'after_cursor',\n excludeTagIds: 'exclude_tag_id',\n gameIds: 'game_id',\n ids: 'id',\n pageSize: 'limit',\n seriesIds: 'series_id',\n tagIds: 'tag_id',\n }),\n );\n}\n\nfunction toFetchEventByIdSearchParams(\n params: Extract<z.output<typeof FetchEventRequestSchema>, { id: string }>,\n): URLSearchParams {\n return toSearchParams(\n {\n includeBestLines: params.includeBestLines,\n includeChat: params.includeChat,\n includeTemplate: params.includeTemplate,\n locale: params.locale,\n },\n snakeCase(),\n );\n}\n\nfunction toFetchEventBySlugSearchParams(\n params: Extract<\n z.output<typeof FetchEventRequestSchema>,\n { slug: string } | { url: string }\n >,\n): URLSearchParams {\n return toSearchParams(\n {\n includeBestLines: params.includeBestLines,\n includeChat: params.includeChat,\n includeTemplate: params.includeTemplate,\n locale: params.locale,\n },\n snakeCase(),\n );\n}\n","import { EvmAddressSchema, PaginationCursorSchema } from '@kuest/bindings';\nimport {\n type BiggestWinner,\n type BuilderStanding,\n BuilderVolumeIntervalSchema,\n type BuilderVolumePoint,\n FetchBuilderVolumeResponseSchema,\n FetchTraderLeaderboardStandingResponseSchema,\n LeaderboardWindowSchema,\n ListBiggestWinnersResponseSchema,\n ListBuilderLeaderboardResponseSchema,\n ListTraderLeaderboardResponseSchema,\n type TraderLeaderboardEntry,\n TraderLeaderboardSortSchema,\n type TraderLeaderboardStanding,\n} from '@kuest/bindings/data';\nimport { z } from 'zod';\nimport type { BaseClient } from '../clients';\nimport {\n makeErrorGuard,\n RateLimitError,\n RequestAbortedError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n} from '../errors';\nimport { parseUserInput } from '../input';\nimport { PageSizeSchema, type Paginated, paginate } from '../pagination';\nimport { parseRequestOptions, type RequestOptions } from '../request-options';\nimport { toDataSearchParams } from './params';\n\nexport {\n BiggestWinnerKind,\n BuilderVolumeInterval,\n LeaderboardWindow,\n TraderLeaderboardSort,\n} from '@kuest/bindings/data';\n\nconst ListBuilderLeaderboardRequestSchema = z.object({\n cursor: PaginationCursorSchema.optional(),\n // The first-page default and cap; continuation cursors retain their page size.\n pageSize: PageSizeSchema.max(1000).default(100),\n window: LeaderboardWindowSchema.optional(),\n});\n\nexport type ListBuilderLeaderboardRequest = z.input<\n typeof ListBuilderLeaderboardRequestSchema\n>;\n\nexport type ListBuilderLeaderboardError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const ListBuilderLeaderboardError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Lists builder leaderboard rankings.\n *\n * Builders are ranked by attributed share volume within `window`, which\n * defaults to one day. `builderCode` is the stable identifier; names and\n * profile images are display metadata. `pageSize` defaults to 100 (max 1000).\n * Transient rate limits are retried by default.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link ListBuilderLeaderboardError}\n * Thrown on failure.\n *\n * @example\n * Fetch the first page of results:\n * ```ts\n * const result = listBuilderLeaderboard(client, {\n * pageSize: 10,\n * window: LeaderboardWindow.Day,\n * });\n *\n * const firstPage = await result.firstPage();\n *\n * // Optionally, fetch additional pages:\n * for await (const page of result.from(firstPage.nextCursor)) {\n * // page.items: BuilderStanding[]\n * }\n * ```\n *\n * @example\n * Loop through all pages with `for await`:\n * ```ts\n * const result = listBuilderLeaderboard(client, {\n * pageSize: 10,\n * window: LeaderboardWindow.Day,\n * });\n *\n * for await (const page of result) {\n * // page.items: BuilderStanding[]\n * }\n * ```\n */\nexport function listBuilderLeaderboard(\n client: BaseClient,\n request: ListBuilderLeaderboardRequest = {},\n options: RequestOptions = {},\n): Paginated<BuilderStanding[]> {\n const requestOptions = parseRequestOptions(options);\n const { cursor, pageSize, window } = parseUserInput(\n request,\n ListBuilderLeaderboardRequestSchema,\n );\n\n return paginate(\n (cursor) =>\n client.data.get('/v2/builders/leaderboard', {\n schema: ListBuilderLeaderboardResponseSchema,\n ...requestOptions,\n // Retain the original window across the cursor walk. The cursor pins\n // it, while the server rejects a contradictory window explicitly.\n params: toDataSearchParams({\n timePeriod: window,\n limit: pageSize,\n cursor,\n }),\n }),\n cursor,\n );\n}\n\nconst FetchBuilderVolumeRequestSchema = z.object({\n interval: BuilderVolumeIntervalSchema.optional(),\n // This bounds complete time buckets, not individual builder rows.\n bucketLimit: z.number().int().positive().max(90).optional(),\n});\n\nexport type FetchBuilderVolumeRequest = z.input<\n typeof FetchBuilderVolumeRequestSchema\n>;\n\nexport type FetchBuilderVolumeError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchBuilderVolumeError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Fetches the per-builder volume time series.\n *\n * `interval` controls bucket width and defaults to daily; use\n * {@link BuilderVolumeInterval.Year} for one bucket per calendar year.\n * `bucketLimit` returns that many complete recent buckets (default 30, max 90),\n * not that many builder rows. Results are newest bucket first, and volume is\n * measured in shares. Transient rate limits are retried by default.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link FetchBuilderVolumeError}\n * Thrown on failure.\n *\n * @example\n * ```ts\n * const volume = await fetchBuilderVolume(client, {\n * interval: BuilderVolumeInterval.Day,\n * bucketLimit: 7,\n * });\n *\n * // volume: BuilderVolumePoint[]\n * ```\n */\nexport async function fetchBuilderVolume(\n client: BaseClient,\n request: FetchBuilderVolumeRequest = {},\n options: RequestOptions = {},\n): Promise<BuilderVolumePoint[]> {\n const requestOptions = parseRequestOptions(options);\n const { interval, bucketLimit } = parseUserInput(\n request,\n FetchBuilderVolumeRequestSchema,\n );\n\n return client.data.get('/v2/builders/volume', {\n schema: FetchBuilderVolumeResponseSchema,\n ...requestOptions,\n params: toDataSearchParams({ interval, limit: bucketLimit }),\n });\n}\n\nconst BoardCategorySchema = z.string().min(1);\n\nconst ListTraderLeaderboardRequestSchema = z.object({\n category: BoardCategorySchema.optional(),\n cursor: PaginationCursorSchema.optional(),\n // The first-page default and cap; continuation cursors retain their page size.\n pageSize: PageSizeSchema.max(1000).default(100),\n sortBy: TraderLeaderboardSortSchema.optional(),\n window: LeaderboardWindowSchema.optional(),\n});\n\nexport type ListTraderLeaderboardRequest = z.input<\n typeof ListTraderLeaderboardRequestSchema\n>;\n\nexport type ListTraderLeaderboardError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const ListTraderLeaderboardError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Lists trader leaderboard rankings.\n *\n * `window` defaults to one day, `category` to overall, and `sortBy` to PnL.\n * Finite-window PnL is marked equity change net of flows, while all-time PnL\n * is realized only. Volume is measured in shares. Tied traders share a rank\n * and the next rank skips. `pageSize` defaults to 100 (max 1000).\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link ListTraderLeaderboardError}\n * Thrown on failure.\n *\n * @example\n * Fetch the first page of results:\n * ```ts\n * const result = listTraderLeaderboard(client, {\n * pageSize: 10,\n * sortBy: TraderLeaderboardSort.Pnl,\n * window: LeaderboardWindow.Week,\n * });\n *\n * const firstPage = await result.firstPage();\n *\n * // Optionally, fetch additional pages:\n * for await (const page of result.from(firstPage.nextCursor)) {\n * // page.items: TraderLeaderboardEntry[]\n * }\n * ```\n *\n * @example\n * Loop through all pages with `for await`:\n * ```ts\n * const result = listTraderLeaderboard(client, {\n * pageSize: 10,\n * sortBy: TraderLeaderboardSort.Pnl,\n * window: LeaderboardWindow.Week,\n * });\n *\n * for await (const page of result) {\n * // page.items: TraderLeaderboardEntry[]\n * }\n * ```\n */\nexport function listTraderLeaderboard(\n client: BaseClient,\n request: ListTraderLeaderboardRequest = {},\n options: RequestOptions = {},\n): Paginated<TraderLeaderboardEntry[]> {\n const requestOptions = parseRequestOptions(options);\n const { category, cursor, pageSize, sortBy, window } = parseUserInput(\n request,\n ListTraderLeaderboardRequestSchema,\n );\n\n return paginate(\n (cursor) =>\n client.data.get('/v2/leaderboard', {\n schema: ListTraderLeaderboardResponseSchema,\n ...requestOptions,\n // Retain the selected board across the cursor walk. The cursor pins\n // these values and the server rejects contradictory restatements.\n params: toDataSearchParams({\n category,\n cursor,\n limit: pageSize,\n sortBy,\n timePeriod: window,\n }),\n }),\n cursor,\n );\n}\n\nconst FetchTraderLeaderboardStandingRequestSchema = z.object({\n category: BoardCategorySchema.optional(),\n user: EvmAddressSchema,\n window: LeaderboardWindowSchema.optional(),\n});\n\nexport type FetchTraderLeaderboardStandingRequest = z.input<\n typeof FetchTraderLeaderboardStandingRequestSchema\n>;\n\nexport type FetchTraderLeaderboardStandingError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchTraderLeaderboardStandingError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Fetches one trader's standing on both the PnL and volume boards.\n *\n * `window` defaults to one day and `category` to overall. A `null` rank means\n * the trader is unranked on that board. Returns `null` for an unknown wallet.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link FetchTraderLeaderboardStandingError}\n * Thrown on failure.\n *\n * @example\n * ```ts\n * const standing = await fetchTraderLeaderboardStanding(client, {\n * user: '0xa71093cafc0c099b4ccab24c3cb8018d817923c4',\n * window: LeaderboardWindow.All,\n * });\n *\n * // standing: TraderLeaderboardStanding | null\n * ```\n */\nexport async function fetchTraderLeaderboardStanding(\n client: BaseClient,\n request: FetchTraderLeaderboardStandingRequest,\n options: RequestOptions = {},\n): Promise<TraderLeaderboardStanding | null> {\n const requestOptions = parseRequestOptions(options);\n const { category, user, window } = parseUserInput(\n request,\n FetchTraderLeaderboardStandingRequestSchema,\n );\n\n return client.data.get('/v2/leaderboard', {\n schema: FetchTraderLeaderboardStandingResponseSchema,\n ...requestOptions,\n params: toDataSearchParams({\n category,\n timePeriod: window,\n user,\n }),\n });\n}\n\nconst ListBiggestWinnersRequestSchema = z.object({\n category: BoardCategorySchema.optional(),\n cursor: PaginationCursorSchema.optional(),\n // The first-page default and cap; continuation cursors retain their page size.\n pageSize: PageSizeSchema.max(1000).default(100),\n window: LeaderboardWindowSchema.optional(),\n});\n\nexport type ListBiggestWinnersRequest = z.input<\n typeof ListBiggestWinnersRequestSchema\n>;\n\nexport type ListBiggestWinnersError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const ListBiggestWinnersError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Lists the largest individual winning positions.\n *\n * The board has one row per position, ranked by its resolution profit.\n * `window` applies to resolution time and defaults to one day; `category`\n * defaults to overall. Equal profits retain distinct row ordinals. Combo rows\n * have no parent event, so branch on `kind` before using event metadata.\n * `pageSize` defaults to 100 (max 1000).\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link ListBiggestWinnersError}\n * Thrown on failure.\n *\n * @example\n * ```ts\n * const result = listBiggestWinners(client, {\n * category: 'sports',\n * pageSize: 10,\n * window: LeaderboardWindow.Week,\n * });\n *\n * for await (const page of result) {\n * // page.items: BiggestWinner[]\n * }\n * ```\n */\nexport function listBiggestWinners(\n client: BaseClient,\n request: ListBiggestWinnersRequest = {},\n options: RequestOptions = {},\n): Paginated<BiggestWinner[]> {\n const requestOptions = parseRequestOptions(options);\n const { category, cursor, pageSize, window } = parseUserInput(\n request,\n ListBiggestWinnersRequestSchema,\n );\n\n return paginate(\n (cursor) =>\n client.data.get('/v2/biggest-winners', {\n schema: ListBiggestWinnersResponseSchema,\n ...requestOptions,\n params: toDataSearchParams({\n category,\n cursor,\n limit: pageSize,\n timePeriod: window,\n }),\n }),\n cursor,\n );\n}\n","import { PaginationCursorSchema } from '@kuest/bindings';\nimport {\n ListMarketClarificationsResponseSchema,\n type MarketClarification,\n MarketClarificationState,\n} from '@kuest/bindings/gamma';\nimport { z } from 'zod';\nimport type { BaseClient } from '../clients';\nimport {\n makeErrorGuard,\n RateLimitError,\n RequestAbortedError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n} from '../errors';\nimport { parseUserInput } from '../input';\nimport {\n decodeOffsetCursor,\n encodeOffsetCursor,\n PageSizeSchema,\n type Paginated,\n paginate,\n} from '../pagination';\nimport { parseRequestOptions, type RequestOptions } from '../request-options';\nimport { snakeCase, toSearchParams } from './params';\n\nconst ListMarketClarificationsRequestSchema = z.object({\n marketId: z.union([z.string(), z.array(z.string())]).optional(),\n eventId: z.union([z.string(), z.array(z.string())]).optional(),\n questionId: z.union([z.string(), z.array(z.string())]).optional(),\n state: z\n .union([\n z.enum(MarketClarificationState),\n z.array(z.enum(MarketClarificationState)),\n ])\n .optional(),\n showInFrontend: z.boolean().optional(),\n txHash: z.string().optional(),\n order: z.string().optional(),\n ascending: z.boolean().optional(),\n cursor: PaginationCursorSchema.optional(),\n // Matches the upstream per-request limit cap.\n pageSize: PageSizeSchema.max(100).default(20),\n});\n\nexport type ListMarketClarificationsRequest = z.input<\n typeof ListMarketClarificationsRequestSchema\n>;\n\nexport type ListMarketClarificationsError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const ListMarketClarificationsError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Lists market clarifications — official notes that resolve ambiguity in how a\n * market settles.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link ListMarketClarificationsError}\n * Thrown on failure.\n *\n * @example\n * Fetch the first page of results:\n * ```ts\n * const result = listMarketClarifications(client, {\n * marketId: '512038',\n * pageSize: 25,\n * });\n *\n * const firstPage = await result.firstPage();\n *\n * // Optionally, fetch additional pages:\n * for await (const page of result.from(firstPage.nextCursor)) {\n * // page.items: MarketClarification[]\n * }\n * ```\n *\n * @example\n * Loop through all pages with `for await`:\n * ```ts\n * const result = listMarketClarifications(client, {\n * marketId: '512038',\n * });\n *\n * for await (const page of result) {\n * // page.items: MarketClarification[]\n * }\n * ```\n */\nexport function listMarketClarifications(\n client: BaseClient,\n request: ListMarketClarificationsRequest = {},\n options: RequestOptions = {},\n): Paginated<MarketClarification[]> {\n const requestOptions = parseRequestOptions(options);\n const { cursor, pageSize, ...params } = parseUserInput(\n request,\n ListMarketClarificationsRequestSchema,\n );\n\n return paginate((cursor) => {\n const decoded = decodeOffsetCursor(cursor, pageSize);\n\n return client.gamma\n .get('/market-clarifications', {\n schema: ListMarketClarificationsResponseSchema,\n ...requestOptions,\n params: toSearchParams(\n {\n ...params,\n limit: decoded.pageSize,\n offset: decoded.offset,\n },\n snakeCase(),\n ),\n })\n .then((clarifications) => {\n const hasMore = clarifications.length >= decoded.pageSize;\n\n return {\n items: clarifications,\n hasMore,\n nextCursor: hasMore\n ? encodeOffsetCursor({\n offset: decoded.offset + decoded.pageSize,\n pageSize: decoded.pageSize,\n })\n : undefined,\n };\n });\n }, cursor);\n}\n","import type { Market } from '@kuest/bindings/gamma';\nimport { UserInputError } from './errors';\n\nconst TTL_MS = 5 * 60 * 1000;\nconst PAGE_LIMIT = 100;\nconst MAX_PAGES = 50;\nconst CONDITION_ID = /^0x[0-9a-fA-F]{64}$/;\nconst TOKEN_ID = /^(0x[0-9a-fA-F]+|\\d+)$/;\n\ntype Scope = { conditionIds: Set<string>; tokenIds: Set<string> };\nconst cache = new Map<string, { value: Scope; expiresAt: number }>();\n\nfunction collect(value: unknown, scope: Scope): void {\n if (Array.isArray(value)) {\n for (const child of value) collect(child, scope);\n return;\n }\n if (\n (typeof value === 'string' || typeof value === 'number') &&\n TOKEN_ID.test(String(value))\n ) {\n scope.tokenIds.add(String(value).toLowerCase());\n return;\n }\n if (typeof value !== 'object' || value === null) return;\n const item = value as Record<string, unknown>;\n for (const field of ['condition_id', 'conditionId', 'conditionID', 'c']) {\n const candidate = item[field];\n if (typeof candidate === 'string' && CONDITION_ID.test(candidate)) {\n scope.conditionIds.add(candidate.toLowerCase());\n }\n }\n for (const field of ['token_id', 'tokenId', 'asset_id', 'assetId', 't']) {\n const candidate = item[field];\n if (\n (typeof candidate === 'string' || typeof candidate === 'number') &&\n TOKEN_ID.test(String(candidate))\n ) {\n scope.tokenIds.add(String(candidate).toLowerCase());\n }\n }\n for (const field of [\n 'markets',\n 'outcomes',\n 'tokens',\n 'clob_token_ids',\n 'clobTokenIds',\n 'outcome_assets',\n 'outcomeAssets',\n ]) {\n collect(item[field], scope);\n }\n}\n\nfunction siteOrigin(siteUrl: string): string {\n const candidate = /^https?:\\/\\//i.test(siteUrl)\n ? siteUrl\n : `https://${siteUrl}`;\n const parsed = new URL(candidate);\n if (!['https:', 'http:'].includes(parsed.protocol) || !parsed.hostname) {\n throw new UserInputError('invalid site_url');\n }\n return parsed.origin;\n}\n\n/** Resolve the same site event scope used by the older CLOB client. */\nexport async function getSiteMarketScope(siteUrl: string): Promise<Scope> {\n const origin = siteOrigin(siteUrl);\n const cached = cache.get(origin);\n if (cached && cached.expiresAt > Date.now()) return cached.value;\n\n const scope: Scope = { conditionIds: new Set(), tokenIds: new Set() };\n for (let page = 0; page < MAX_PAGES; page++) {\n const url = new URL('/api/events', `${origin}/`);\n url.searchParams.set('status', 'active');\n url.searchParams.set('includeBookmarkState', 'false');\n url.searchParams.set('limit', String(PAGE_LIMIT));\n url.searchParams.set('offset', String(page * PAGE_LIMIT));\n const response = await fetch(url);\n if (!response.ok)\n throw new UserInputError(\n `site market scope request failed: HTTP ${response.status}`,\n );\n const events: unknown = await response.json();\n if (!Array.isArray(events))\n throw new UserInputError(\n 'site-scoped market discovery expected /api/events to return an array',\n );\n collect(events, scope);\n if (events.length < PAGE_LIMIT) break;\n }\n cache.set(origin, { value: scope, expiresAt: Date.now() + TTL_MS });\n return scope;\n}\n\nexport function filterSiteMarkets(markets: Market[], scope: Scope): Market[] {\n return markets.filter(\n (market) =>\n (market.conditionId !== null &&\n scope.conditionIds.has(market.conditionId.toLowerCase())) ||\n [market.outcomes.yes.tokenId, market.outcomes.no.tokenId].some(\n (token) =>\n token !== null && scope.tokenIds.has(String(token).toLowerCase()),\n ),\n );\n}\n","import {\n ClobAssetIdSchema,\n ConditionIdSchema,\n IsoDateTimeStringSchema,\n type PaginationCursor,\n PaginationCursorSchema,\n PositionIdSchema,\n} from '@kuest/bindings';\nimport {\n type ComboMarket,\n ListComboMarketsResponseSchema,\n} from '@kuest/bindings/combos';\nimport {\n CanonicalMarketConditionIdSchema,\n FetchOpenInterestResponseSchema,\n ListMarketHoldersResponseSchema,\n ListPriceHistoryResponseSchema,\n type MetaHolder,\n type OpenInterest,\n PriceHistoryInterval,\n PriceHistoryIntervalSchema,\n type PriceHistoryPoint,\n} from '@kuest/bindings/data';\nimport {\n FetchMarketTagsResponseSchema,\n ListMarketsKeysetResponseSchema,\n type Market,\n MarketResolutionStatus,\n MarketSchema,\n ProtocolVersion,\n type TagReference,\n} from '@kuest/bindings/gamma';\nimport { z } from 'zod';\nimport type { BaseClient } from '../clients';\nimport {\n makeErrorGuard,\n RateLimitError,\n RequestAbortedError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n} from '../errors';\nimport { parseUserInput } from '../input';\nimport { parseMarketSlugUrl } from '../market-url';\nimport { PageSizeSchema, type Paginated, paginate } from '../pagination';\nimport { parseRequestOptions, type RequestOptions } from '../request-options';\nimport { filterSiteMarkets, getSiteMarketScope } from '../site-scope';\nimport {\n ClosedFilterSchema,\n distinctIdList,\n EpochSecondsLikeSchema,\n snakeCase,\n toDataSearchParams,\n toSearchParams,\n} from './params';\n\nexport { PriceHistoryInterval };\n\n// The public markets endpoint forces active=true and archived=false server-side.\nconst ListMarketsRequestSchema = z\n .object({\n ascending: z.boolean().optional(),\n closed: ClosedFilterSchema.optional(),\n clobTokenIds: z.array(z.string()).optional(),\n cursor: PaginationCursorSchema.optional(),\n pageSize: PageSizeSchema.optional(),\n conditionIds: z.array(ConditionIdSchema).optional(),\n cyom: z.boolean().optional(),\n decimalized: z.boolean().optional(),\n endDateMax: IsoDateTimeStringSchema.optional(),\n endDateMin: IsoDateTimeStringSchema.optional(),\n gameId: z.string().optional(),\n ids: z.array(z.number().int()).optional(),\n includeTag: z.boolean().optional(),\n liquidityNumMax: z.number().optional(),\n liquidityNumMin: z.number().optional(),\n locale: z.string().optional(),\n order: z.string().optional(),\n /** Parent on-chain event IDs; at most 100 values. */\n onchainEventIds: z.array(z.string()).max(100).optional(),\n positionIds: z.array(PositionIdSchema).optional(),\n questionIds: z.array(z.string()).optional(),\n relatedTags: z.boolean().optional(),\n /** Oracle request IDs; at most 100 values. */\n requestIds: z.array(z.string()).max(100).optional(),\n resolutionStatus: z.enum(MarketResolutionStatus).optional(),\n rfqEnabled: z.boolean().optional(),\n rewardsMinSize: z.number().optional(),\n slug: z.array(z.string()).optional(),\n sportsMarketTypes: z.array(z.string()).optional(),\n startDateMax: IsoDateTimeStringSchema.optional(),\n startDateMin: IsoDateTimeStringSchema.optional(),\n tagId: z.number().int().optional(),\n tagMatch: z.enum(['any', 'all']).optional(),\n umaResolutionStatus: z.string().optional(),\n version: z\n .union([\n z.enum(ProtocolVersion),\n z.array(z.enum(ProtocolVersion)).min(1).max(2),\n ])\n .optional(),\n volumeNumMax: z.number().optional(),\n volumeNumMin: z.number().optional(),\n })\n .refine(\n (params) =>\n params.closed !== 'any' ||\n [\n params.ids,\n params.slug,\n params.clobTokenIds,\n params.positionIds,\n params.conditionIds,\n params.questionIds,\n ].some((ids) => ids !== undefined && ids.length > 0),\n {\n message: \"closed: 'any' requires at least one identifier filter\",\n path: ['closed'],\n },\n );\n\nexport type ListMarketsRequest = z.input<typeof ListMarketsRequestSchema>;\n\nconst FetchMarketByIdRequestSchema = z.object({\n id: z.string(),\n includeTag: z.boolean().optional(),\n locale: z.string().optional(),\n});\n\nconst FetchMarketBySlugRequestSchema = z.object({\n slug: z.string(),\n includeTag: z.boolean().optional(),\n locale: z.string().optional(),\n});\n\nconst FetchMarketByUrlRequestSchema = z.object({\n url: z.string(),\n includeTag: z.boolean().optional(),\n locale: z.string().optional(),\n});\n\nconst FetchMarketRequestSchema = z.union([\n FetchMarketByIdRequestSchema,\n FetchMarketBySlugRequestSchema,\n FetchMarketByUrlRequestSchema,\n]);\n\nexport type FetchMarketRequest = z.input<typeof FetchMarketRequestSchema>;\n\nconst FetchMarketTagsRequestSchema = z.object({\n id: z.string(),\n});\n\nexport type FetchMarketTagsRequest = z.input<\n typeof FetchMarketTagsRequestSchema\n>;\n\ntype ListMarketsParams = z.output<typeof ListMarketsRequestSchema>;\n\nexport type ListMarketsError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const ListMarketsError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Lists markets.\n *\n * Defaults to open markets. Pass `closed: true` for closed markets or\n * `closed: 'any'` for either state. The latter requires a non-empty `ids`,\n * `slug`, `clobTokenIds`, `positionIds`, `conditionIds`, or `questionIds` filter.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * Legacy multi-outcome markets cannot be represented by the binary\n * {@link Market} model and are omitted from results.\n *\n * Select one protocol with `version`, or pass both protocol versions in an array.\n * Arrays accept one or two values. Omitting `version` uses the current server\n * default of CTF markets (v1). Filter v2 markets by `resolutionStatus`, `requestIds`, or\n * `onchainEventIds`. Each ID filter accepts at most 100 values. V1 markets\n * use the separate `umaResolutionStatus` filter.\n *\n * @throws {@link ListMarketsError}\n * Thrown on failure.\n *\n * @example\n * Fetch the first page of results:\n * ```ts\n * const result = listMarkets(client, {\n * closed: false,\n * pageSize: 10,\n * });\n *\n * const firstPage = await result.firstPage();\n *\n * // Optionally, fetch additional pages:\n * for await (const page of result.from(firstPage.nextCursor)) {\n * // page.items: Market[]\n * }\n * ```\n *\n * @example\n * Loop through all pages with `for await`:\n * ```ts\n * const result = listMarkets(client, {\n * closed: false,\n * pageSize: 10,\n * });\n *\n * for await (const page of result) {\n * // page.items: Market[]\n * }\n * ```\n */\nexport function listMarkets(\n client: BaseClient,\n request: ListMarketsRequest = {},\n options: RequestOptions = {},\n): Paginated<Market[]> {\n const requestOptions = parseRequestOptions(options);\n const params = parseUserInput(request, ListMarketsRequestSchema);\n\n return paginate(async (cursor) => {\n let next = cursor ?? params.cursor;\n while (true) {\n const response = await client.gamma.get('/markets/keyset', {\n schema: ListMarketsKeysetResponseSchema,\n ...requestOptions,\n params: toMarketsSearchParams({\n ...params,\n cursor: next,\n }),\n });\n const siteUrl = client.siteConfig?.site_url.trim();\n const items = siteUrl\n ? filterSiteMarkets(response.items, await getSiteMarketScope(siteUrl))\n : response.items;\n if (\n items.length > 0 ||\n response.nextCursor === undefined ||\n response.nextCursor === next\n ) {\n return {\n items,\n hasMore: response.nextCursor !== undefined,\n nextCursor: response.nextCursor,\n };\n }\n next = response.nextCursor;\n }\n }, params.cursor);\n}\n\nconst ListComboMarketsRequestSchema = z.object({\n cursor: PaginationCursorSchema.optional(),\n pageSize: PageSizeSchema.max(100).optional(),\n exclude: z.array(ConditionIdSchema).optional(),\n});\n\nexport type ListComboMarketsRequest = z.input<\n typeof ListComboMarketsRequestSchema\n>;\n\nexport type ListComboMarketsError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const ListComboMarketsError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Lists markets available for Combos.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link ListComboMarketsError}\n * Thrown on failure.\n *\n * @example\n * Fetch the first page of results:\n * ```ts\n * const result = listComboMarkets(client, {\n * pageSize: 10,\n * });\n *\n * const firstPage = await result.firstPage();\n *\n * // Optionally, fetch additional pages:\n * for await (const page of result.from(firstPage.nextCursor)) {\n * // page.items: ComboMarket[]\n * }\n * ```\n *\n * @example\n * Omit markets the caller has already displayed:\n * ```ts\n * const result = listComboMarkets(client, {\n * exclude: ['0x4cd77d456c83e7d8c569a8fb8f6396c3f40154f657e6d970733e2b1b6a7110ff'],\n * pageSize: 10,\n * });\n * ```\n */\nexport function listComboMarkets(\n client: BaseClient,\n request: ListComboMarketsRequest = {},\n options: RequestOptions = {},\n): Paginated<ComboMarket[]> {\n const requestOptions = parseRequestOptions(options);\n const params = parseUserInput(request, ListComboMarketsRequestSchema);\n\n return paginate(\n (cursor) =>\n client.rfq\n .get('/v1/rfq/combo-markets', {\n schema: ListComboMarketsResponseSchema,\n ...requestOptions,\n params: toComboMarketsSearchParams({\n ...params,\n cursor: cursor ?? params.cursor,\n }),\n })\n .then((response) => ({\n items: response.markets,\n hasMore: response.nextCursor !== undefined,\n nextCursor: response.nextCursor,\n })),\n params.cursor,\n );\n}\n\nexport type FetchMarketError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchMarketError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Fetches a market.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * Legacy multi-outcome markets cannot be represented by the binary\n * {@link Market} model, so fetching one fails with an\n * {@link UnexpectedResponseError}.\n *\n * @throws {@link FetchMarketError}\n * Thrown on failure.\n *\n * @example\n * ```ts\n * const market = await fetchMarket(client, {\n * id: '12345',\n * });\n *\n * const marketBySlug = await fetchMarket(client, {\n * slug: 'some-market-slug',\n * });\n *\n * const marketByUrl = await fetchMarket(client, {\n * url: 'https://operator.example/event/example-market',\n * });\n *\n * // market === Market\n * ```\n */\nexport async function fetchMarket(\n client: BaseClient,\n request: FetchMarketRequest,\n options: RequestOptions = {},\n): Promise<Market> {\n const requestOptions = parseRequestOptions(options);\n const params = parseUserInput(request, FetchMarketRequestSchema);\n\n if ('id' in params) {\n return fetchMarketById(client, params, requestOptions);\n }\n\n if ('url' in params) {\n return fetchMarketBySlug(\n client,\n {\n includeTag: params.includeTag,\n locale: params.locale,\n slug: parseMarketSlugUrl(params.url, 'market'),\n },\n requestOptions,\n );\n }\n\n return fetchMarketBySlug(client, params, requestOptions);\n}\n\nexport type FetchMarketTagsError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchMarketTagsError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Fetches a market's tags.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link FetchMarketTagsError}\n * Thrown on failure.\n *\n * @example\n * ```ts\n * const tags = await fetchMarketTags(client, {\n * id: '12345',\n * });\n *\n * // tags: TagReference[]\n * ```\n */\nexport async function fetchMarketTags(\n client: BaseClient,\n request: FetchMarketTagsRequest,\n options: RequestOptions = {},\n): Promise<TagReference[]> {\n const requestOptions = parseRequestOptions(options);\n const params = parseUserInput(request, FetchMarketTagsRequestSchema);\n\n return client.gamma.get(`markets/${params.id}/tags`, {\n ...requestOptions,\n schema: FetchMarketTagsResponseSchema,\n });\n}\n\nconst ListMarketHoldersRequestSchema = z\n .object({\n conditionIds: distinctIdList(CanonicalMarketConditionIdSchema, 20),\n cursor: PaginationCursorSchema.optional(),\n includePnl: z.boolean().optional(),\n minBalance: z.number().nonnegative().optional(),\n pageSize: PageSizeSchema.max(1000).default(100),\n })\n .superRefine(({ conditionIds, includePnl, pageSize }, context) => {\n if (!includePnl) return;\n\n if (conditionIds.length !== 1) {\n context.addIssue({\n code: 'custom',\n message: 'includePnl requires exactly one conditionId',\n path: ['conditionIds'],\n });\n }\n\n if (pageSize > 100) {\n context.addIssue({\n code: 'custom',\n message: 'includePnl supports pageSize at most 100',\n path: ['pageSize'],\n });\n }\n });\n\nexport type ListMarketHoldersRequest = z.input<\n typeof ListMarketHoldersRequestSchema\n>;\nexport type ListMarketHoldersError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const ListMarketHoldersError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Lists top holders grouped by outcome for one or more markets.\n *\n * `conditionIds` accepts up to 20 distinct market condition IDs. `pageSize`\n * defaults to 100 (max 1000) and applies separately to each outcome. Merge\n * matching `assetId` groups across pages rather than relying on array position.\n * `minBalance` uses display shares and defaults to `0`; `1` means one share,\n * equivalent to 1,000,000 base units.\n * Amounts are net holdings by default. `includePnl` switches to per-outcome\n * gross holdings and adds position economics; it requires one condition ID and\n * a page size of at most 100. Transient rate limits are retried by default.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link ListMarketHoldersError}\n * Thrown on failure.\n *\n * @example\n * ```ts\n * const result = listMarketHolders(client, {\n * conditionIds: ['0xe546672750517f62c45a5a00067481981e62b9c20fa8220203232c9dc8fd2093'],\n * pageSize: 5,\n * });\n *\n * for await (const page of result) {\n * // page.items: MetaHolder[]\n * }\n * ```\n */\nexport function listMarketHolders(\n client: BaseClient,\n request: ListMarketHoldersRequest,\n options: RequestOptions = {},\n): Paginated<MetaHolder[]> {\n const requestOptions = parseRequestOptions(options);\n const { conditionIds, cursor, includePnl, minBalance, pageSize } =\n parseUserInput(request, ListMarketHoldersRequestSchema);\n\n return paginate(\n (cursor) =>\n client.data.get('/v2/holders', {\n schema: ListMarketHoldersResponseSchema,\n ...requestOptions,\n params: toDataSearchParams({\n condition: conditionIds,\n limit: pageSize,\n cursor,\n includePnl,\n minBalance,\n }),\n }),\n cursor,\n );\n}\n\nexport type ListPriceHistoryRequest =\n | {\n assetId: string;\n interval: PriceHistoryInterval;\n bucketSeconds?: number;\n cursor?: PaginationCursor;\n pageSize?: number;\n start?: never;\n end?: never;\n asOf?: never;\n }\n | {\n assetId: string;\n start: number | Date;\n end?: number | Date;\n bucketSeconds?: number;\n cursor?: PaginationCursor;\n pageSize?: number;\n interval?: never;\n asOf?: never;\n }\n | {\n assetId: string;\n asOf: number | Date;\n interval?: never;\n start?: never;\n end?: never;\n bucketSeconds?: never;\n cursor?: never;\n pageSize?: never;\n };\n\nconst MAX_PRICE_HISTORY_WINDOW_SECONDS = 15 * 24 * 60 * 60;\n/** Latest supported instant: 9999-12-31T23:59:59Z. */\nconst MAX_PRICE_HISTORY_TIMESTAMP_SECONDS = 253_402_300_799;\n\nconst PriceHistoryTimestampSchema = EpochSecondsLikeSchema.pipe(\n z.number().int().positive().max(MAX_PRICE_HISTORY_TIMESTAMP_SECONDS),\n);\n\nconst PriceHistoryAssetIdSchema = z.string().min(1).pipe(ClobAssetIdSchema);\n\nconst PriceHistorySeriesRequestFields = {\n assetId: PriceHistoryAssetIdSchema,\n bucketSeconds: z.number().int().min(60).max(86_400).optional(),\n cursor: PaginationCursorSchema.optional(),\n pageSize: PageSizeSchema.max(10_000).default(10_000),\n};\n\nconst PriceHistoryIntervalRequestSchema = z\n .object({\n ...PriceHistorySeriesRequestFields,\n interval: PriceHistoryIntervalSchema,\n start: z.never().optional(),\n end: z.never().optional(),\n asOf: z.never().optional(),\n })\n .superRefine(({ bucketSeconds, interval }, context) => {\n const minimumBucketSeconds =\n interval === PriceHistoryInterval.Max ||\n interval === PriceHistoryInterval.OneMonth\n ? 600\n : interval === PriceHistoryInterval.OneWeek\n ? 300\n : 60;\n\n if (bucketSeconds !== undefined && bucketSeconds < minimumBucketSeconds) {\n context.addIssue({\n code: 'custom',\n message: `bucketSeconds must be at least ${minimumBucketSeconds} for this interval`,\n path: ['bucketSeconds'],\n });\n }\n });\n\nconst PriceHistoryRangeRequestSchema = z\n .object({\n ...PriceHistorySeriesRequestFields,\n start: PriceHistoryTimestampSchema,\n end: PriceHistoryTimestampSchema.optional(),\n interval: z.never().optional(),\n asOf: z.never().optional(),\n })\n .superRefine(({ end, start }, context) => {\n if (end !== undefined && end < start) {\n context.addIssue({\n code: 'custom',\n message: 'end must not precede start',\n path: ['end'],\n });\n return;\n }\n\n const upperBound = end ?? Math.floor(Date.now() / 1_000);\n if (upperBound - start > MAX_PRICE_HISTORY_WINDOW_SECONDS) {\n context.addIssue({\n code: 'custom',\n message: 'start to end must span at most 15 days',\n path: ['end'],\n });\n }\n });\n\nconst PriceHistoryAsOfRequestSchema = z.object({\n assetId: PriceHistoryAssetIdSchema,\n asOf: PriceHistoryTimestampSchema,\n interval: z.never().optional(),\n start: z.never().optional(),\n end: z.never().optional(),\n bucketSeconds: z.never().optional(),\n cursor: z.never().optional(),\n pageSize: z.never().optional(),\n});\n\nconst ListPriceHistoryRequestSchema = z.union([\n PriceHistoryIntervalRequestSchema,\n PriceHistoryRangeRequestSchema,\n PriceHistoryAsOfRequestSchema,\n]) satisfies z.ZodType<ListPriceHistoryRequest, ListPriceHistoryRequest>;\n\nexport type ListPriceHistoryError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const ListPriceHistoryError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Lists historical price observations for an exchange asset.\n *\n * Select exactly one time form: a relative `interval`, an explicit `start`\n * with optional `end`, or the latest observation at or before an `asOf`\n * instant. Time inputs accept Unix epoch seconds or `Date` values. When\n * `bucketSeconds` is omitted, resolution is selected automatically for the\n * requested window and reported on each point as `resolutionSeconds`. An\n * explicit bucket is used exactly as requested and may produce an empty series\n * when that resolution is unavailable for the window. Prices are decimal\n * strings and returned timestamps are Unix epoch milliseconds. Series pages\n * are ordered oldest first; an `asOf` request returns at most one item. Series\n * page sizes default to and are capped at 10,000 points. Transient rate limits\n * are retried by default.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link ListPriceHistoryError}\n * Thrown on failure.\n *\n * @example\n * ```ts\n * const history = listPriceHistory(client, {\n * assetId: '17023124228269928849020611259015948850061676830917875073785033885105715180702',\n * interval: PriceHistoryInterval.OneDay,\n * bucketSeconds: 3600,\n * });\n *\n * for await (const page of history) {\n * // page.items: PriceHistoryPoint[]\n * }\n * ```\n */\nexport function listPriceHistory(\n client: BaseClient,\n request: ListPriceHistoryRequest,\n options: RequestOptions = {},\n): Paginated<PriceHistoryPoint[]> {\n const requestOptions = parseRequestOptions(options);\n const { assetId, cursor, pageSize, ...params } = parseUserInput(\n request,\n ListPriceHistoryRequestSchema,\n );\n\n return paginate(\n (cursor) =>\n client.data.get('/v2/prices-history', {\n schema: ListPriceHistoryResponseSchema,\n ...requestOptions,\n params: toDataSearchParams({\n ...params,\n tokenId: assetId,\n limit: pageSize,\n cursor,\n }),\n }),\n cursor,\n );\n}\n\nconst FetchOpenInterestRequestSchema = z.object({\n conditionIds: distinctIdList(CanonicalMarketConditionIdSchema, 20).optional(),\n});\n\nexport type FetchOpenInterestRequest = z.input<\n typeof FetchOpenInterestRequestSchema\n>;\n\nexport type FetchOpenInterestError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchOpenInterestError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Fetches priced gross open interest for selected markets or globally.\n *\n * `conditionIds` accepts up to 20 distinct market condition IDs. Omit it for\n * the global aggregate, whose `conditionId` is `null`. A requested servable\n * market with no holdings has a zero value; an absent row means the market is\n * not servable. Values are in USDC. Transient rate limits are retried\n * by default.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link FetchOpenInterestError}\n * Thrown on failure.\n *\n * @example\n * ```ts\n * const openInterest = await fetchOpenInterest(client, {\n * conditionIds: ['0xe546672750517f62c45a5a00067481981e62b9c20fa8220203232c9dc8fd2093'],\n * });\n *\n * // openInterest: OpenInterest[]\n * ```\n */\nexport async function fetchOpenInterest(\n client: BaseClient,\n request: FetchOpenInterestRequest = {},\n options: RequestOptions = {},\n): Promise<OpenInterest[]> {\n const requestOptions = parseRequestOptions(options);\n const { conditionIds } = parseUserInput(\n request,\n FetchOpenInterestRequestSchema,\n );\n\n return client.data.get('/v2/oi', {\n schema: FetchOpenInterestResponseSchema,\n ...requestOptions,\n params: toDataSearchParams({ condition: conditionIds }),\n });\n}\n\nfunction toMarketsSearchParams(params: ListMarketsParams): URLSearchParams {\n return toSearchParams(\n params,\n snakeCase<ListMarketsParams>({\n cursor: 'after_cursor',\n ids: 'id',\n pageSize: 'limit',\n }),\n );\n}\n\ntype ListComboMarketsParams = z.output<typeof ListComboMarketsRequestSchema>;\n\nfunction toComboMarketsSearchParams(\n params: ListComboMarketsParams,\n): URLSearchParams {\n return toSearchParams(\n {\n cursor: params.cursor,\n exclude: params.exclude?.join(','),\n pageSize: params.pageSize,\n },\n {\n cursor: 'cursor',\n exclude: 'exclude',\n pageSize: 'limit',\n },\n );\n}\n\nasync function fetchMarketBySlug(\n client: BaseClient,\n params: z.output<typeof FetchMarketBySlugRequestSchema>,\n options: RequestOptions = {},\n): Promise<Market> {\n const requestOptions = parseRequestOptions(options);\n return client.gamma.get(`markets/slug/${params.slug}`, {\n schema: MarketSchema,\n ...requestOptions,\n params: toSearchParams(\n {\n includeTag: params.includeTag,\n locale: params.locale,\n },\n snakeCase(),\n ),\n });\n}\n\nasync function fetchMarketById(\n client: BaseClient,\n params: z.output<typeof FetchMarketByIdRequestSchema>,\n options: RequestOptions = {},\n): Promise<Market> {\n const requestOptions = parseRequestOptions(options);\n return client.gamma.get(`markets/${params.id}`, {\n schema: MarketSchema,\n ...requestOptions,\n params: toSearchParams(\n {\n includeTag: params.includeTag,\n locale: params.locale,\n },\n snakeCase(),\n ),\n });\n}\n","import { WalletType } from '@kuest/bindings/gamma';\nimport type { EvmAddress, EvmSignature } from '@kuest/types';\nimport {\n routerConvertCall,\n routerHorizontalMergeCall,\n routerHorizontalSplitCall,\n} from '../abis';\nimport type { BaseSecureClient } from '../clients';\nimport {\n CancelledSigningError,\n makeErrorGuard,\n RateLimitError,\n RequestRejectedError,\n SigningError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n} from '../errors';\nimport { parseUserInput } from '../input';\nimport { NegRiskOperationInputSchema } from '../neg-risk-input';\nimport { expectTransactionHandle, type TransactionHandle } from '../types';\nimport {\n completeWith,\n type SendConvertTransactionRequest,\n type SendHorizontalMergeTransactionRequest,\n type SendHorizontalSplitTransactionRequest,\n signerTransactionRequest,\n} from '../workflow';\nimport {\n GaslessTransactionMetadataSchema,\n type GaslessWorkflowRequest,\n prepareGaslessTransaction,\n} from './gasless';\n\nfunction assertRouterUnavailable(): void {\n throw new UserInputError(\n 'Protocol V2 router operations are unavailable on this network.',\n );\n}\n\n/** A neg-risk operation yields an EOA transaction or the wallet's gasless signing steps. */\nexport type NegRiskWorkflow = AsyncGenerator<\n | GaslessWorkflowRequest\n | SendConvertTransactionRequest\n | SendHorizontalSplitTransactionRequest\n | SendHorizontalMergeTransactionRequest,\n TransactionHandle,\n EvmAddress | EvmSignature | TransactionHandle\n>;\n\n/** Signing steps for a neg-risk conversion. */\nexport type ConvertWorkflow = AsyncGenerator<\n GaslessWorkflowRequest | SendConvertTransactionRequest,\n TransactionHandle,\n EvmAddress | EvmSignature | TransactionHandle\n>;\n\nexport type PrepareConvertRequest = {\n /** Market's protocol V2 neg-risk condition ID: bytes31 or zero-padded bytes32. */\n conditionId: string;\n /** Positive explicit amount in six-decimal base units (1_000_000n = one unit). */\n amount: bigint;\n /** Optional transaction metadata for gasless wallets. */\n metadata?: string;\n};\n\nconst PrepareConvertRequestSchema = NegRiskOperationInputSchema.safeExtend({\n metadata: GaslessTransactionMetadataSchema.optional(),\n});\n\nexport type PrepareConvertError =\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const PrepareConvertError = makeErrorGuard(\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Prepares a workflow: Converts NO into YES for all other conditions.\n * Derives the event and NO condition index from the market's condition ID.\n * Includes Other unless converting NO(Other).\n * Requires PositionManager operator approval for the Router. No approvals are submitted automatically.\n * Preparing does not sign or submit; advance the returned workflow to execute it.\n * @throws {@link PrepareConvertError} Thrown on failure, including while advancing the workflow.\n */\nexport async function prepareConvert(\n client: BaseSecureClient,\n request: PrepareConvertRequest,\n): Promise<ConvertWorkflow> {\n assertRouterUnavailable();\n const params = parseUserInput(request, PrepareConvertRequestSchema);\n const protocolEventId = params.conditionId.slice(0, 60);\n const call = routerConvertCall(\n client.environment.contracts.protocolV2Router,\n protocolEventId,\n Number.parseInt(params.conditionId.slice(60, 64), 16),\n params.amount,\n );\n return async function* (): ConvertWorkflow {\n if (client.account.walletType === WalletType.EOA) {\n return expectTransactionHandle(\n yield {\n kind: 'sendConvertTransaction',\n request: signerTransactionRequest(client.environment.chainId, call),\n },\n );\n }\n return yield* await prepareGaslessTransaction(client, {\n calls: [call],\n metadata:\n params.metadata ??\n `Convert ${params.amount} for condition ${params.conditionId}`,\n });\n }.call(null);\n}\n\nexport type ConvertError =\n | CancelledSigningError\n | RateLimitError\n | RequestRejectedError\n | SigningError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const ConvertError = makeErrorGuard(\n CancelledSigningError,\n RateLimitError,\n RequestRejectedError,\n SigningError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Converts NO into YES for all other conditions.\n * Derives the event and NO condition index from the market's condition ID.\n * Includes Other unless converting NO(Other).\n * Requires PositionManager operator approval for the Router. No approvals are submitted automatically.\n * Signs and submits using the authenticated wallet; call the returned handle's wait() to confirm.\n * @throws {@link ConvertError} Thrown on failure.\n */\nexport function convert(\n client: BaseSecureClient,\n request: PrepareConvertRequest,\n): Promise<TransactionHandle> {\n return prepareConvert(client, request).then(completeWith(client.signer));\n}\n\n/** Signing steps for a horizontal split. */\nexport type HorizontalSplitWorkflow = AsyncGenerator<\n GaslessWorkflowRequest | SendHorizontalSplitTransactionRequest,\n TransactionHandle,\n EvmAddress | EvmSignature | TransactionHandle\n>;\n\nexport type PrepareHorizontalSplitRequest = {\n /** Any market condition in the protocol V2 neg-risk event: bytes31 or zero-padded bytes32. */\n conditionId: string;\n /** Positive explicit amount in six-decimal base units (1_000_000n = one unit). */\n amount: bigint;\n /** Optional transaction metadata for gasless wallets. */\n metadata?: string;\n};\n\nconst PrepareHorizontalSplitRequestSchema =\n NegRiskOperationInputSchema.safeExtend({\n metadata: GaslessTransactionMetadataSchema.optional(),\n });\n\nexport type PrepareHorizontalSplitError =\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const PrepareHorizontalSplitError = makeErrorGuard(\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Prepares a workflow: Splits pUSD into YES for every condition, including Other.\n * Uses the event containing the supplied market condition.\n * Requires pUSD spending approval for the Router. No approvals are submitted automatically.\n * Preparing does not sign or submit; advance the returned workflow to execute it.\n * @throws {@link PrepareHorizontalSplitError} Thrown on failure, including while advancing the workflow.\n */\nexport async function prepareHorizontalSplit(\n client: BaseSecureClient,\n request: PrepareHorizontalSplitRequest,\n): Promise<HorizontalSplitWorkflow> {\n assertRouterUnavailable();\n const params = parseUserInput(request, PrepareHorizontalSplitRequestSchema);\n const protocolEventId = params.conditionId.slice(0, 60);\n const call = routerHorizontalSplitCall(\n client.environment.contracts.protocolV2Router,\n protocolEventId,\n params.amount,\n );\n return async function* (): HorizontalSplitWorkflow {\n if (client.account.walletType === WalletType.EOA) {\n return expectTransactionHandle(\n yield {\n kind: 'sendHorizontalSplitTransaction',\n request: signerTransactionRequest(client.environment.chainId, call),\n },\n );\n }\n return yield* await prepareGaslessTransaction(client, {\n calls: [call],\n metadata:\n params.metadata ??\n `HorizontalSplit ${params.amount} for event ${protocolEventId}`,\n });\n }.call(null);\n}\n\nexport type HorizontalSplitError =\n | CancelledSigningError\n | RateLimitError\n | RequestRejectedError\n | SigningError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const HorizontalSplitError = makeErrorGuard(\n CancelledSigningError,\n RateLimitError,\n RequestRejectedError,\n SigningError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Splits pUSD into YES for every condition, including Other.\n * Uses the event containing the supplied market condition.\n * Requires pUSD spending approval for the Router. No approvals are submitted automatically.\n * Signs and submits using the authenticated wallet; call the returned handle's wait() to confirm.\n * @throws {@link HorizontalSplitError} Thrown on failure.\n */\nexport function horizontalSplit(\n client: BaseSecureClient,\n request: PrepareHorizontalSplitRequest,\n): Promise<TransactionHandle> {\n return prepareHorizontalSplit(client, request).then(\n completeWith(client.signer),\n );\n}\n\n/** Signing steps for a horizontal merge. */\nexport type HorizontalMergeWorkflow = AsyncGenerator<\n GaslessWorkflowRequest | SendHorizontalMergeTransactionRequest,\n TransactionHandle,\n EvmAddress | EvmSignature | TransactionHandle\n>;\n\nexport type PrepareHorizontalMergeRequest = {\n /** Any market condition in the protocol V2 neg-risk event: bytes31 or zero-padded bytes32. */\n conditionId: string;\n /** Positive explicit amount in six-decimal base units (1_000_000n = one unit). */\n amount: bigint;\n /** Optional transaction metadata for gasless wallets. */\n metadata?: string;\n};\n\nconst PrepareHorizontalMergeRequestSchema =\n NegRiskOperationInputSchema.safeExtend({\n metadata: GaslessTransactionMetadataSchema.optional(),\n });\n\nexport type PrepareHorizontalMergeError =\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const PrepareHorizontalMergeError = makeErrorGuard(\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Prepares a workflow: Merges equal YES amounts from every condition, including Other, into pUSD.\n * Uses the event containing the supplied market condition.\n * Requires PositionManager operator approval for the Router. No approvals are submitted automatically.\n * Preparing does not sign or submit; advance the returned workflow to execute it.\n * @throws {@link PrepareHorizontalMergeError} Thrown on failure, including while advancing the workflow.\n */\nexport async function prepareHorizontalMerge(\n client: BaseSecureClient,\n request: PrepareHorizontalMergeRequest,\n): Promise<HorizontalMergeWorkflow> {\n assertRouterUnavailable();\n const params = parseUserInput(request, PrepareHorizontalMergeRequestSchema);\n const protocolEventId = params.conditionId.slice(0, 60);\n const call = routerHorizontalMergeCall(\n client.environment.contracts.protocolV2Router,\n protocolEventId,\n params.amount,\n );\n return async function* (): HorizontalMergeWorkflow {\n if (client.account.walletType === WalletType.EOA) {\n return expectTransactionHandle(\n yield {\n kind: 'sendHorizontalMergeTransaction',\n request: signerTransactionRequest(client.environment.chainId, call),\n },\n );\n }\n return yield* await prepareGaslessTransaction(client, {\n calls: [call],\n metadata:\n params.metadata ??\n `HorizontalMerge ${params.amount} for event ${protocolEventId}`,\n });\n }.call(null);\n}\n\nexport type HorizontalMergeError =\n | CancelledSigningError\n | RateLimitError\n | RequestRejectedError\n | SigningError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const HorizontalMergeError = makeErrorGuard(\n CancelledSigningError,\n RateLimitError,\n RequestRejectedError,\n SigningError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Merges equal YES amounts from every condition, including Other, into pUSD.\n * Uses the event containing the supplied market condition.\n * Requires PositionManager operator approval for the Router. No approvals are submitted automatically.\n * Signs and submits using the authenticated wallet; call the returned handle's wait() to confirm.\n * @throws {@link HorizontalMergeError} Thrown on failure.\n */\nexport function horizontalMerge(\n client: BaseSecureClient,\n request: PrepareHorizontalMergeRequest,\n): Promise<TransactionHandle> {\n return prepareHorizontalMerge(client, request).then(\n completeWith(client.signer),\n );\n}\n","import {\n type OrderHeartbeat,\n OrderHeartbeatSchema,\n} from '@kuest/bindings/clob';\nimport { z } from 'zod';\nimport type { BaseSecureClient } from '../clients';\nimport {\n makeErrorGuard,\n OrderHeartbeatMismatchError,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n} from '../errors';\nimport { parseUserInput } from '../input';\n\nconst SendOrderHeartbeatRequestSchema = z.object({\n heartbeatId: z.string().default(''),\n});\nexport type SendOrderHeartbeatRequest = z.input<\n typeof SendOrderHeartbeatRequestSchema\n>;\nexport type SendOrderHeartbeatError =\n | OrderHeartbeatMismatchError\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const SendOrderHeartbeatError = makeErrorGuard(\n OrderHeartbeatMismatchError,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Sends one authenticated order heartbeat and returns the next heartbeat ID.\n * The first accepted send enables timeout cancellation for ALL open orders owned\n * by this API key, across markets and processes. Only start when you can keep\n * sending every five seconds. After ten seconds without an accepted send, the\n * server attempts cancel-all; cancellation timing and success are not guaranteed.\n * Start with an empty ID, serialize sends per key, and retain every returned ID.\n * No timer or automatic retry is started. A mismatch does not refresh the deadline;\n * retry explicitly with OrderHeartbeatMismatchError.heartbeatId. A lost response\n * may follow an accepted send, so failure does not prove registration is inactive.\n * There is no disarm operation. Stopping sends or closing the client leaves the\n * deadline active. On shutdown, stop placing orders and explicitly cancel/verify\n * orders you intend to remove. Expiry removes the registration; a later accepted\n * send registers again. This is separate from WebSocket connection keepalive.\n * @throws {@link SendOrderHeartbeatError} Thrown on failure.\n * @example\n * ```ts\n * const heartbeat = await sendOrderHeartbeat(client);\n * const next = await sendOrderHeartbeat(client, { heartbeatId: heartbeat.heartbeatId });\n * ```\n */\nexport async function sendOrderHeartbeat(\n client: BaseSecureClient,\n request: SendOrderHeartbeatRequest = {},\n): Promise<OrderHeartbeat> {\n const { heartbeatId } = parseUserInput(\n request,\n SendOrderHeartbeatRequestSchema,\n );\n return client.secureClob.post('/v1/heartbeats', {\n schema: OrderHeartbeatSchema,\n json: { heartbeat_id: heartbeatId },\n retry: false,\n });\n}\n","import {\n type RateLimitError,\n type RequestAbortedError,\n RequestRejectedError,\n TradingRestriction,\n type TransportError,\n} from '../../errors';\n\nexport function mapTradingRestrictionError(\n error:\n | RateLimitError\n | RequestAbortedError\n | RequestRejectedError\n | TransportError,\n):\n | RateLimitError\n | RequestAbortedError\n | RequestRejectedError\n | TransportError {\n if (!(error instanceof RequestRejectedError)) {\n return error;\n }\n\n const restriction = parseTradingRestriction(error);\n\n if (restriction === undefined) {\n return error;\n }\n\n return new RequestRejectedError(error.message, {\n cause: error,\n ...(error.code !== undefined ? { code: error.code } : {}),\n restriction,\n ...(error.retryAfter !== undefined ? { retryAfter: error.retryAfter } : {}),\n status: error.status,\n });\n}\n\nfunction parseTradingRestriction(\n error: RequestRejectedError,\n): TradingRestriction | undefined {\n if (error.status === 425) {\n return TradingRestriction.RESTARTING;\n }\n\n if (error.status === 503 && error.code === 'post_only_mode') {\n return TradingRestriction.POST_ONLY;\n }\n\n return undefined;\n}\n","import {\n type CancelOrdersResponse,\n CancelOrdersResponseSchema,\n} from '@kuest/bindings/clob';\n\nimport { z } from 'zod';\nimport type { BaseSecureClient } from '../../clients';\nimport {\n makeErrorGuard,\n RateLimitError,\n RequestRejectedError,\n SigningError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n} from '../../errors';\nimport { parseUserInput } from '../../input';\nimport { optionalExchangeAssetRequestSchema } from '../exchange-asset';\nimport { mapTradingRestrictionError } from './restrictions';\n\nconst CancelOrderRequestSchema = z.object({\n orderId: z.string(),\n});\n\nconst CancelOrdersRequestSchema = z.object({\n orderIds: z.array(z.string()).min(1).max(3000),\n});\n\nconst CancelMarketOrdersRequestFieldsSchema = z.object({\n market: z.string().optional(),\n});\n\nconst CancelMarketOrdersRequestSchema = optionalExchangeAssetRequestSchema(\n CancelMarketOrdersRequestFieldsSchema.shape,\n).refine(\n (request) =>\n request.market !== undefined ||\n request.assetId !== undefined ||\n request.tokenId !== undefined,\n {\n message: 'At least one of market or assetId is required.',\n path: ['market'],\n },\n);\n\nexport type CancelOrderRequest = z.input<typeof CancelOrderRequestSchema>;\n\nexport type CancelOrderError =\n | RequestRejectedError\n | RateLimitError\n | SigningError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const CancelOrderError = makeErrorGuard(\n RequestRejectedError,\n RateLimitError,\n SigningError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Cancels a single open order for the authenticated account.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link CancelOrderError}\n * Thrown on failure.\n *\n * @example\n * ```ts\n * const response = await cancelOrder(client, {\n * orderId: '123',\n * });\n *\n * // response.canceled: OrderId[]\n * ```\n */\nexport async function cancelOrder(\n client: BaseSecureClient,\n request: CancelOrderRequest,\n): Promise<CancelOrdersResponse> {\n const params = parseUserInput(request, CancelOrderRequestSchema);\n\n return cancel(client, '/order', {\n orderID: params.orderId,\n });\n}\n\nexport type CancelOrdersRequest = z.input<typeof CancelOrdersRequestSchema>;\nexport type CancelOrdersError =\n | RequestRejectedError\n | RateLimitError\n | SigningError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const CancelOrdersError = makeErrorGuard(\n RequestRejectedError,\n RateLimitError,\n SigningError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Cancels multiple open orders for the authenticated account.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link CancelOrdersError}\n * Thrown on failure.\n *\n * @example\n * ```ts\n * const response = await cancelOrders(client, {\n * orderIds: ['1', '2'],\n * });\n *\n * // response.canceled: OrderId[]\n * ```\n */\nexport async function cancelOrders(\n client: BaseSecureClient,\n request: CancelOrdersRequest,\n): Promise<CancelOrdersResponse> {\n const params = parseUserInput(request, CancelOrdersRequestSchema);\n\n return cancel(client, '/orders', params.orderIds);\n}\n\nexport type CancelAllError =\n | RequestRejectedError\n | RateLimitError\n | SigningError\n | TransportError\n | UnexpectedResponseError;\nexport const CancelAllError = makeErrorGuard(\n RequestRejectedError,\n RateLimitError,\n SigningError,\n TransportError,\n UnexpectedResponseError,\n);\n\n/**\n * Cancels all open orders for the authenticated account.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link CancelAllError}\n * Thrown on failure.\n *\n * @example\n * ```ts\n * const response = await cancelAll(client);\n *\n * // response.canceled: OrderId[]\n * ```\n */\nexport async function cancelAll(\n client: BaseSecureClient,\n): Promise<CancelOrdersResponse> {\n return cancel(client, '/cancel-all');\n}\n\nexport type CancelMarketOrdersRequest =\n | {\n /** Identifier for a CTF token or Polymarket V2 position. */\n assetId?: string;\n tokenId?: never;\n market?: string;\n }\n | {\n assetId?: never;\n /** @deprecated Use `assetId`. */\n tokenId?: string;\n market?: string;\n };\nexport type CancelMarketOrdersError =\n | RequestRejectedError\n | RateLimitError\n | SigningError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const CancelMarketOrdersError = makeErrorGuard(\n RequestRejectedError,\n RateLimitError,\n SigningError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Cancels all open orders for the authenticated account that match the market\n * or asset filter.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link CancelMarketOrdersError}\n * Thrown on failure.\n *\n * @example\n * ```ts\n * const response = await cancelMarketOrders(client, {\n * market: '0x0000000000000000000000000000000000000000000000000000000000000001',\n * });\n *\n * // response.canceled: OrderId[]\n * ```\n */\nexport async function cancelMarketOrders(\n client: BaseSecureClient,\n request: CancelMarketOrdersRequest,\n): Promise<CancelOrdersResponse> {\n const params = parseUserInput(request, CancelMarketOrdersRequestSchema);\n\n return cancel(client, '/cancel-market-orders', {\n asset_id: params.assetId ?? params.tokenId,\n market: params.market,\n });\n}\n\nasync function cancel(\n client: BaseSecureClient,\n path: string,\n payload?: unknown,\n): Promise<CancelOrdersResponse> {\n return client.secureClob\n .del(path, {\n json: payload,\n rateLimitBucket: 'cancel',\n schema: CancelOrdersResponseSchema,\n })\n .catch((error) => {\n throw mapTradingRestrictionError(error);\n });\n}\n","import { ClobAssetIdSchema } from '@kuest/bindings';\nimport { z } from 'zod';\n\n/** @internal */\nexport const AssetIdOrderAssetSchema = z.object({\n assetId: ClobAssetIdSchema,\n tokenId: z.never().optional(),\n});\n\n/** @internal */\nexport const TokenIdOrderAssetSchema = z.object({\n assetId: z.never().optional(),\n tokenId: ClobAssetIdSchema,\n});\n","import {\n type ClobAssetId,\n OrderSide,\n OrderType,\n PositiveDecimalNumberSchema,\n type TickSizeValue,\n} from '@kuest/bindings';\nimport type { OrderBook, OrderBookLevel } from '@kuest/bindings/clob';\nimport { invariant } from '@kuest/types';\nimport { z } from 'zod';\nimport type { BaseClient } from '../../clients';\nimport {\n InsufficientLiquidityError,\n makeErrorGuard,\n RateLimitError,\n RequestAbortedError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n} from '../../errors';\nimport { parseUserInput } from '../../input';\nimport {\n parseRequestOptions,\n type RequestOptions,\n} from '../../request-options';\nimport { fetchOrderBook } from '../clob';\nimport { AssetIdOrderAssetSchema, TokenIdOrderAssetSchema } from './asset';\n\nconst BaseEstimateMarketPriceRequestSchema = z.object({\n orderType: z\n .union([z.literal(OrderType.FAK), z.literal(OrderType.FOK)])\n .default(OrderType.FOK),\n});\n\nexport type EstimateMarketBuyPriceRequest =\n | {\n /** Identifier for a CTF token or Polymarket V2 position. */\n assetId: string;\n tokenId?: never;\n /** Buy side of the estimate. */\n side: OrderSide.BUY;\n /** Desired USD buy notional to match against current ask depth. */\n amount: number | string;\n /**\n * Market order execution type to model.\n *\n * @defaultValue OrderType.FOK\n */\n orderType?: OrderType.FAK | OrderType.FOK;\n }\n | {\n assetId?: never;\n /** @deprecated Use `assetId`. */\n tokenId: string;\n /** Buy side of the estimate. */\n side: OrderSide.BUY;\n /** Desired USD buy notional to match against current ask depth. */\n amount: number | string;\n /**\n * Market order execution type to model.\n *\n * @defaultValue OrderType.FOK\n */\n orderType?: OrderType.FAK | OrderType.FOK;\n };\n\nexport type EstimateMarketSellPriceRequest =\n | {\n /** Identifier for a CTF token or Polymarket V2 position. */\n assetId: string;\n tokenId?: never;\n /** Sell side of the estimate. */\n side: OrderSide.SELL;\n /** Number of outcome shares to match against current bid depth. */\n shares: number | string;\n /**\n * Market order execution type to model.\n *\n * @defaultValue OrderType.FOK\n */\n orderType?: OrderType.FAK | OrderType.FOK;\n }\n | {\n assetId?: never;\n /** @deprecated Use `assetId`. */\n tokenId: string;\n /** Sell side of the estimate. */\n side: OrderSide.SELL;\n /** Number of outcome shares to match against current bid depth. */\n shares: number | string;\n /**\n * Market order execution type to model.\n *\n * @defaultValue OrderType.FOK\n */\n orderType?: OrderType.FAK | OrderType.FOK;\n };\n\nexport type EstimateMarketPriceRequest =\n | EstimateMarketBuyPriceRequest\n | EstimateMarketSellPriceRequest;\n\ntype EstimateMarketPriceParams =\n | {\n assetId: ClobAssetId;\n side: OrderSide.BUY;\n amount: number;\n orderType: OrderType.FAK | OrderType.FOK;\n }\n | {\n assetId: ClobAssetId;\n side: OrderSide.SELL;\n shares: number;\n orderType: OrderType.FAK | OrderType.FOK;\n };\n\nconst EstimateMarketBuyPriceRequestSchema =\n BaseEstimateMarketPriceRequestSchema.extend({\n side: z.literal(OrderSide.BUY),\n amount: PositiveDecimalNumberSchema,\n });\n\nconst EstimateMarketSellPriceRequestSchema =\n BaseEstimateMarketPriceRequestSchema.extend({\n side: z.literal(OrderSide.SELL),\n shares: PositiveDecimalNumberSchema,\n });\n\nconst EstimateMarketPriceRequestSchema = z\n .union([\n EstimateMarketBuyPriceRequestSchema.extend(AssetIdOrderAssetSchema.shape),\n EstimateMarketBuyPriceRequestSchema.extend(TokenIdOrderAssetSchema.shape),\n EstimateMarketSellPriceRequestSchema.extend(AssetIdOrderAssetSchema.shape),\n EstimateMarketSellPriceRequestSchema.extend(TokenIdOrderAssetSchema.shape),\n ])\n .transform(({ assetId, tokenId, ...params }) => ({\n ...params,\n assetId: assetId ?? tokenId,\n })) satisfies z.ZodType<\n EstimateMarketPriceParams,\n EstimateMarketPriceRequest\n>;\n\nexport type EstimateMarketPriceError =\n | RequestAbortedError\n | InsufficientLiquidityError\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const EstimateMarketPriceError = makeErrorGuard(\n RequestAbortedError,\n InsufficientLiquidityError,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Estimates the price level a market order would cross at current book depth.\n *\n * For BUY orders, `amount` is the amount of collateral to spend. For SELL\n * orders, `shares` is the number of shares to sell.\n *\n * When `orderType` is `FOK`, this estimate requires enough resting liquidity to\n * satisfy the full requested amount and throws if the book is too thin. When\n * `orderType` is `FAK`, the estimate may fall back to the best currently\n * available price level even if the full requested amount cannot fill, so it\n * should be treated as a partial-fill execution estimate rather than a full-fill\n * guarantee.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @example\n * ```ts\n * const price = await estimateMarketPrice(client, {\n * assetId: '0x0122…0000',\n * side: OrderSide.BUY,\n * amount: 10,\n * });\n *\n * // price === 0.53\n * ```\n *\n * @throws {@link EstimateMarketPriceError}\n * Thrown on failure.\n */\nexport async function estimateMarketPrice(\n client: BaseClient,\n request: EstimateMarketPriceRequest,\n options: RequestOptions = {},\n): Promise<number> {\n const requestOptions = parseRequestOptions(options);\n const params = parseUserInput(request, EstimateMarketPriceRequestSchema);\n const amount = params.side === OrderSide.BUY ? params.amount : params.shares;\n\n return resolveEstimatedMarketPrice(\n client,\n {\n amount,\n assetId: params.assetId,\n orderType: params.orderType,\n side: params.side,\n },\n requestOptions,\n );\n}\n\n/** @internal */\nexport async function resolveEstimatedMarketPrice(\n client: BaseClient,\n params: {\n assetId: ClobAssetId;\n amount: number;\n orderType: OrderType;\n side: OrderSide;\n },\n options: RequestOptions = {},\n): Promise<number> {\n const requestOptions = parseRequestOptions(options);\n const orderBook = await fetchOrderBook(\n client,\n {\n assetId: params.assetId,\n },\n requestOptions,\n );\n\n return resolveMarketPriceFromOrderBook({\n amount: params.amount,\n orderBook,\n orderType: params.orderType,\n side: params.side,\n });\n}\n\n/** @internal */\nexport function resolveMarketPriceFromOrderBook(params: {\n amount: number;\n orderBook: OrderBook;\n orderType: OrderType;\n side: OrderSide;\n}): number {\n const { orderBook } = params;\n\n const price =\n params.side === OrderSide.BUY\n ? calculateBuyMarketPrice(orderBook.asks, params.amount, params.orderType)\n : calculateSellMarketPrice(\n orderBook.bids,\n params.amount,\n params.orderType,\n );\n\n invariant(\n isValidPrice(price, orderBook.tickSize),\n `Resolved market price fell outside the valid range for tick size ${orderBook.tickSize}.`,\n );\n\n return price;\n}\n\nfunction isValidPrice(price: number, tickSize: TickSizeValue): boolean {\n return price >= tickSize && price <= 1 - tickSize;\n}\n\nfunction calculateBuyMarketPrice(\n positions: OrderBookLevel[],\n amountToMatch: number,\n orderType: OrderType,\n): number {\n if (positions.length === 0) {\n throw new InsufficientLiquidityError('No resting liquidity.');\n }\n\n let sum = 0;\n\n for (let index = positions.length - 1; index >= 0; index -= 1) {\n const position = positions[index];\n\n if (position === undefined) {\n continue;\n }\n\n sum += Number.parseFloat(position.size) * Number.parseFloat(position.price);\n\n if (sum >= amountToMatch) {\n return Number.parseFloat(position.price);\n }\n }\n\n if (orderType === OrderType.FOK) {\n throw new InsufficientLiquidityError(\n 'Insufficient liquidity for full fill.',\n );\n }\n\n // biome-ignore lint/style/noNonNullAssertion: Checked for emptiness above.\n const bestPosition = positions[0]!;\n\n return Number.parseFloat(bestPosition.price);\n}\n\nfunction calculateSellMarketPrice(\n positions: OrderBookLevel[],\n amountToMatch: number,\n orderType: OrderType,\n): number {\n if (positions.length === 0) {\n throw new InsufficientLiquidityError('No resting liquidity.');\n }\n\n let sum = 0;\n\n for (let index = positions.length - 1; index >= 0; index -= 1) {\n const position = positions[index];\n\n if (position === undefined) {\n continue;\n }\n\n sum += Number.parseFloat(position.size);\n\n if (sum >= amountToMatch) {\n return Number.parseFloat(position.price);\n }\n }\n\n if (orderType === OrderType.FOK) {\n throw new InsufficientLiquidityError(\n 'Insufficient liquidity for full fill.',\n );\n }\n\n // biome-ignore lint/style/noNonNullAssertion: Checked for emptiness above.\n const bestPosition = positions[0]!;\n\n return Number.parseFloat(bestPosition.price);\n}\n","import { UserInputError } from './errors';\nimport type { SiteConfig } from './site-config';\n\nconst GEOBLOCK_HOST = 'https://geoblock.kuest.com';\nconst cachedStatuses = new WeakMap<\n SiteConfig,\n { blocked: boolean; country?: string; region?: string }\n>();\n\n/** Check the operator site's existing geoblock policy before transmitting an order. */\nexport async function ensureSiteTradingAllowed(\n config: SiteConfig | undefined,\n): Promise<void> {\n if (!config?.geoblock) return;\n if (!config.site_url.trim()) {\n throw new UserInputError(\n 'site_url must be configured when geoblock is enabled',\n );\n }\n\n let status = cachedStatuses.get(config);\n if (!status) {\n const response = await fetch(\n `${GEOBLOCK_HOST}/?url=${encodeURIComponent(config.site_url)}`,\n );\n if (!response.ok) {\n throw new UserInputError(\n `geoblock check failed: HTTP ${response.status}`,\n );\n }\n const payload: unknown = await response.json();\n if (\n typeof payload !== 'object' ||\n payload === null ||\n typeof (payload as { blocked?: unknown }).blocked !== 'boolean'\n ) {\n throw new UserInputError('invalid geoblock response');\n }\n status = payload as { blocked: boolean; country?: string; region?: string };\n cachedStatuses.set(config, status);\n }\n if (status.blocked) {\n throw new UserInputError(\n `trading blocked for configured site_url (${config.site_url}) in ${status.country ?? 'unknown'}, ${status.region ?? 'unknown'}`,\n );\n }\n}\n","import { OrderType } from '@kuest/bindings';\nimport {\n type OrderResponse,\n OrderResponseSchema,\n type OrderResponses,\n OrderResponsesSchema,\n SignatureType,\n} from '@kuest/bindings/clob';\nimport { invariant } from '@kuest/types';\nimport { z } from 'zod';\nimport type { BaseSecureClient } from '../../clients';\nimport {\n makeErrorGuard,\n RateLimitError,\n RequestRejectedError,\n SigningError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n} from '../../errors';\nimport { parseUserInput } from '../../input';\nimport { ensureSiteTradingAllowed } from '../../site-policy';\nimport { mapTradingRestrictionError } from './restrictions';\nimport type { SignedOrder } from './types';\n\nconst MAX_CLOB_ORDER_SALT = BigInt(Number.MAX_SAFE_INTEGER);\n\nconst ClobOrderSaltSchema = z.string().refine(isClobSafeSalt, {\n message: 'Order salt must be a non-negative JavaScript-safe integer.',\n});\nconst PostOrderInputSchema = z.looseObject({\n salt: ClobOrderSaltSchema,\n});\nconst PostOrdersRequestSchema = z.array(PostOrderInputSchema).min(1).max(15);\n\nexport type PostOrdersRequest = SignedOrder[];\n\nexport type PostOrderError =\n | RateLimitError\n | RequestRejectedError\n | SigningError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const PostOrderError = makeErrorGuard(\n RateLimitError,\n RequestRejectedError,\n SigningError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\nexport type PostOrdersError =\n | RateLimitError\n | RequestRejectedError\n | SigningError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const PostOrdersError = makeErrorGuard(\n RateLimitError,\n RequestRejectedError,\n SigningError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Posts a signed order for the authenticated account.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @example\n * ```ts\n * const order = await client.createMarketOrder({\n * assetId: '0x0122…0000',\n * amount: 10,\n * side: OrderSide.BUY,\n * });\n * const response = await postOrder(client)(order);\n * ```\n *\n * @throws {@link PostOrderError}\n * Thrown on failure.\n */\nexport function postOrder(\n client: BaseSecureClient,\n): (order: SignedOrder) => Promise<OrderResponse> {\n return async function postSignedOrder(order: SignedOrder) {\n parseUserInput(order, PostOrderInputSchema);\n await ensureSiteTradingAllowed(client.siteConfig);\n const payload = createSendOrderPayload(client, order);\n\n return client.secureClob\n .post('/order', {\n json: payload,\n rateLimitBucket: 'order',\n schema: OrderResponseSchema,\n })\n .catch((error) => {\n throw mapTradingRestrictionError(error);\n });\n };\n}\n\n/**\n * Posts multiple signed orders for the authenticated account.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * Accepts between 1 and 15 orders, matching the current service limit.\n *\n * @example\n * ```ts\n * const responses = await postOrders(client)([firstSignedOrder, secondSignedOrder]);\n * ```\n *\n * @throws {@link PostOrdersError}\n * Thrown on failure.\n */\nexport function postOrders(\n client: BaseSecureClient,\n): (orders: PostOrdersRequest) => Promise<OrderResponses>;\nexport function postOrders(\n client: BaseSecureClient,\n): (orders: PostOrdersRequest) => Promise<OrderResponses> {\n return async function postSignedOrders(orders: PostOrdersRequest) {\n parseUserInput(orders, PostOrdersRequestSchema);\n await ensureSiteTradingAllowed(client.siteConfig);\n const payload = orders.map((order) =>\n createSendOrderPayload(client, order),\n );\n\n return client.secureClob\n .post('/orders', {\n json: payload,\n rateLimitBucket: 'order',\n schema: OrderResponsesSchema,\n })\n .catch((error) => {\n throw mapTradingRestrictionError(error);\n });\n };\n}\n\nfunction createSendOrderPayload(client: BaseSecureClient, order: SignedOrder) {\n if (\n order.signatureType !== SignatureType.POLY_1271 ||\n order.maker.toLowerCase() !== order.signer.toLowerCase()\n ) {\n throw new UserInputError(\n 'SDK orders require a Deposit Wallet as maker and signer.',\n );\n }\n invariant(\n order.postOnly !== true ||\n order.orderType === OrderType.GTC ||\n order.orderType === OrderType.GTD,\n 'Post-only orders are only supported for GTC and GTD order types.',\n );\n\n return {\n deferExec: false,\n order: {\n builder: order.builder,\n expiration: `${order.expiration}`,\n maker: order.maker,\n makerAmount: order.makerAmount,\n metadata: order.metadata,\n salt: Number(BigInt(order.salt)),\n side: order.side,\n signature: order.signature,\n signatureType: order.signatureType,\n signer: order.signer,\n takerAmount: order.takerAmount,\n timestamp: order.timestamp,\n tokenId: order.tokenId,\n },\n orderType: order.orderType,\n owner: client.credentials.key,\n ...(order.postOnly === true ? { postOnly: true } : {}),\n };\n}\n\nfunction isClobSafeSalt(value: string): boolean {\n try {\n const salt = BigInt(value);\n\n return salt >= 0n && salt <= MAX_CLOB_ORDER_SALT;\n } catch {\n return false;\n }\n}\n","import type { BuilderCode } from '@kuest/bindings';\nimport type { HexString } from '@kuest/types';\n\n/** Public settings from a downloader-generated `.sdk/site-config.json`. */\nexport type SiteConfig = {\n site_url: string;\n builder_mode: boolean;\n geoblock: boolean;\n builder_code: string;\n order_metadata: string;\n};\n\nexport const ZERO_BYTES32 = `0x${'0'.repeat(64)}`;\nconst BYTES32 = /^0x[0-9a-fA-F]{64}$/;\n\nexport const DEFAULT_SITE_CONFIG: SiteConfig = {\n site_url: '',\n builder_mode: false,\n geoblock: false,\n builder_code: '',\n order_metadata: ZERO_BYTES32,\n};\n\n/** Validate the existing CLOB bundle schema without changing its field names. */\nexport function parseSiteConfig(value: unknown): SiteConfig {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) {\n throw new TypeError('.sdk/site-config.json must be an object');\n }\n const record = value as Record<string, unknown>;\n const result = { ...DEFAULT_SITE_CONFIG };\n for (const field of ['site_url', 'builder_code', 'order_metadata'] as const) {\n if (record[field] === undefined) continue;\n if (typeof record[field] !== 'string') {\n throw new TypeError(\n `.sdk/site-config.json field ${field} must be a string`,\n );\n }\n result[field] = record[field];\n }\n for (const field of ['builder_mode', 'geoblock'] as const) {\n if (record[field] === undefined) continue;\n if (typeof record[field] !== 'boolean') {\n throw new TypeError(\n `.sdk/site-config.json field ${field} must be a boolean`,\n );\n }\n result[field] = record[field];\n }\n if (result.builder_code && !BYTES32.test(result.builder_code)) {\n throw new TypeError('builder_code must be bytes32');\n }\n if (!BYTES32.test(result.order_metadata)) {\n throw new TypeError('order_metadata must be bytes32');\n }\n if (\n result.builder_mode &&\n (!result.builder_code || result.builder_code === ZERO_BYTES32)\n ) {\n throw new TypeError('builder_mode requires a non-zero builder_code');\n }\n return result;\n}\n\n/** The personalized bundle's attribution overrides a caller-supplied order code. */\nexport function resolveSiteOrderContext(\n config: SiteConfig | undefined,\n builderCode: BuilderCode | undefined,\n): { builderCode: BuilderCode | undefined; metadata: HexString | undefined } {\n return {\n builderCode: (config?.builder_code || builderCode) as\n | BuilderCode\n | undefined,\n metadata: config?.order_metadata as HexString | undefined,\n };\n}\n","import {\n type ComboConditionId,\n type ConditionId,\n type PositionId,\n type TokenId,\n toComboConditionId,\n toConditionId,\n toPositionId,\n} from '@kuest/bindings';\nimport type { Tagged } from '@kuest/types';\nimport { AbiParameters, Hash } from 'ox';\nimport { UserInputError } from './errors';\n\nconst UINT256_BYTE_LENGTH = 32;\nconst BINARY_MODULE_ID = 1n;\nconst NEG_RISK_MODULE_ID = 2n;\nconst COMBINATORIAL_MODULE_ID = 3n;\nconst MAX_COMBO_LEGS = 50;\nconst UINT256_MAX = (1n << 256n) - 1n;\nconst V2_RESERVED_BITS_MASK = ((1n << 64n) - 1n) << 40n;\n\nexport type CanonicalComboLegs = Tagged<\n readonly bigint[],\n 'CanonicalComboLegs'\n>;\n\nexport type ComboPositionContext = {\n conditionId: ComboConditionId;\n positionIds: [yes: PositionId, no: PositionId];\n};\n\n/**\n * Derives a combo condition ID and its complementary YES/NO position IDs from canonical combo legs.\n */\nexport function deriveComboPositionContext(\n legs: CanonicalComboLegs,\n): ComboPositionContext {\n const encodedLegs = AbiParameters.encode(\n [{ name: 'legs', type: 'uint256[]' }],\n [legs],\n );\n const baseHash = Hash.keccak256(\n AbiParameters.encode(\n [\n { name: 'moduleId', type: 'uint256' },\n { name: 'data', type: 'bytes' },\n ],\n [COMBINATORIAL_MODULE_ID, encodedLegs],\n ),\n );\n const conditionId = toComboConditionId(\n `0x03${baseHash.slice(34)}0000000000000000000000000000`,\n );\n\n return {\n conditionId,\n positionIds: [\n toPositionId(BigInt(`${conditionId}00`).toString()),\n toPositionId(BigInt(`${conditionId}01`).toString()),\n ],\n };\n}\n\n/**\n * Validates and canonicalizes combo leg position IDs.\n *\n * @throws {@link UserInputError}\n * Thrown when the legs do not form a valid combo condition.\n */\nexport function canonicalizeComboLegs(\n legs: readonly PositionId[],\n): CanonicalComboLegs {\n if (legs.length === 0 || legs.length > MAX_COMBO_LEGS) {\n throw new UserInputError(\n `Combo legs must include 1 to ${MAX_COMBO_LEGS} position IDs`,\n );\n }\n\n const positions = legs.map((leg) => {\n const value = parsePositionId(leg);\n const hex = value.toString(16).padStart(UINT256_BYTE_LENGTH * 2, '0');\n const moduleId = Number.parseInt(hex.slice(0, 2), 16);\n const outcomeIndex = Number.parseInt(hex.slice(-2), 16);\n\n if ((moduleId !== 1 && moduleId !== 2) || outcomeIndex > 1) {\n throw new UserInputError(\n 'Combo legs must be binary or neg-risk YES/NO position IDs',\n );\n }\n\n return {\n value,\n conditionId: hex.slice(0, -2),\n };\n });\n\n positions.sort((left, right) =>\n left.value < right.value ? -1 : left.value > right.value ? 1 : 0,\n );\n\n for (let index = 1; index < positions.length; index += 1) {\n const previous = positions[index - 1];\n const current = positions[index];\n\n if (previous === undefined || current === undefined) {\n throw new UserInputError('Invalid combo leg set');\n }\n\n if (previous.value === current.value) {\n throw new UserInputError(\n 'Combo legs must not contain duplicate position IDs',\n );\n }\n\n if (previous.conditionId === current.conditionId) {\n throw new UserInputError(\n 'Combo legs must not contain both outcomes for the same condition',\n );\n }\n }\n\n return positions.map(\n (position) => position.value,\n ) as unknown as CanonicalComboLegs;\n}\n\nexport type DecodedV2OutcomePositionId = {\n conditionId: ConditionId;\n outcomeIndex: 0 | 1;\n};\n\n/**\n * Classifies whether an identifier occupies the protocol v2 position-ID\n * namespace based on its reserved bits.\n *\n * @internal\n */\nexport function isV2PositionId(assetId: PositionId | TokenId): boolean {\n try {\n return (parsePositionId(assetId) & V2_RESERVED_BITS_MASK) === 0n;\n } catch {\n return false;\n }\n}\n\n/**\n * Decodes a protocol v2 YES/NO position ID into its condition ID and outcome index.\n *\n * @throws {@link UserInputError}\n * Thrown when the position ID is not a supported protocol v2 YES/NO position ID.\n */\nexport function decodeV2OutcomePositionId(\n positionId: PositionId,\n): DecodedV2OutcomePositionId {\n const value = parsePositionId(positionId);\n const hex = value.toString(16).padStart(UINT256_BYTE_LENGTH * 2, '0');\n const moduleId = BigInt(`0x${hex.slice(0, 2)}`);\n const outcomeIndex = Number.parseInt(hex.slice(-2), 16);\n\n if (\n moduleId !== BINARY_MODULE_ID &&\n moduleId !== NEG_RISK_MODULE_ID &&\n moduleId !== COMBINATORIAL_MODULE_ID\n ) {\n throw new UserInputError(\n 'Position ID must use a supported protocol v2 module',\n );\n }\n\n if (outcomeIndex !== 0 && outcomeIndex !== 1) {\n throw new UserInputError(\n 'Protocol v2 position ID must be a YES/NO position ID',\n );\n }\n\n return {\n conditionId: toConditionId(`0x${hex.slice(0, -2)}`),\n outcomeIndex,\n };\n}\n\nfunction parsePositionId(positionId: string): bigint {\n const value = positionId.trim();\n let parsed: bigint;\n\n if (value.length === 0) {\n throw new UserInputError('Position ID must be a uint256 value');\n }\n\n try {\n parsed = BigInt(value);\n } catch {\n throw new UserInputError('Position ID must be a uint256 value');\n }\n\n if (parsed < 0n || parsed > UINT256_MAX) {\n throw new UserInputError('Position ID must be a uint256 value');\n }\n\n return parsed;\n}\n","import { invariant, type Tagged } from '@kuest/types';\nimport { UserInputError } from '../../errors';\n\nexport const FIXED_SCALE = 1_000_000n;\nexport const MAX_PRICE_DRIFT = 8 * Number.EPSILON;\nconst FIXED_DECIMALS = 6;\nconst MAX_SCALED_AMOUNT_DRIFT = 8 * Number.EPSILON;\n\nexport type ScaledAmount = Tagged<bigint, 'ScaledAmount'>;\nexport type ScaledPrice = Tagged<bigint, 'ScaledPrice'>;\n\nexport enum Rounding {\n Down = 'down',\n Up = 'up',\n}\n\nexport function toScaledAmount(value: number): ScaledAmount {\n const scaled = value * Number(FIXED_SCALE);\n const candidate = Math.round(scaled);\n const maxDrift = MAX_SCALED_AMOUNT_DRIFT * Math.max(1, Math.abs(scaled));\n const normalized =\n Math.abs(scaled - candidate) <= maxDrift ? candidate : Math.trunc(scaled);\n\n return BigInt(normalized) as ScaledAmount;\n}\n\nexport function toScaledPrice(value: number): ScaledPrice {\n const candidate = Math.round(value * Number(FIXED_SCALE));\n const canonical = candidate / Number(FIXED_SCALE);\n\n if (\n !Number.isSafeInteger(candidate) ||\n Math.abs(value - canonical) > MAX_PRICE_DRIFT\n ) {\n throw new UserInputError('has unsupported precision.');\n }\n\n return BigInt(candidate) as ScaledPrice;\n}\n\nexport function fromScaledPrice(value: ScaledPrice): number {\n return Number(value) / Number(FIXED_SCALE);\n}\n\nexport function scaledQuantum(decimalPlaces: number): bigint {\n invariant(\n Number.isInteger(decimalPlaces) &&\n decimalPlaces >= 0 &&\n decimalPlaces <= FIXED_DECIMALS,\n `Decimal places must be an integer between 0 and ${FIXED_DECIMALS}.`,\n );\n\n return 10n ** BigInt(FIXED_DECIMALS - decimalPlaces);\n}\n\nexport function mulDiv<T extends bigint>(\n value: T,\n multiplier: bigint,\n denominator: bigint,\n rounding: Rounding,\n): T {\n invariant(value >= 0n, 'Value must be non-negative.');\n invariant(multiplier >= 0n, 'Multiplier must be non-negative.');\n invariant(denominator > 0n, 'Denominator must be positive.');\n\n const numerator = value * multiplier;\n const quotient = numerator / denominator;\n\n if (rounding === Rounding.Up && numerator % denominator !== 0n) {\n return (quotient + 1n) as T;\n }\n\n return quotient as T;\n}\n\nexport function quantize<T extends bigint>(\n value: T,\n decimalPlaces: number,\n rounding: Rounding,\n): T {\n const quantum = scaledQuantum(decimalPlaces);\n return (mulDiv(value, 1n, quantum, rounding) * quantum) as T;\n}\n","import type { ClobAssetId, TickSizeValue } from '@kuest/bindings';\nimport type { EvmAddress } from '@kuest/types';\nimport { invariant } from '@kuest/types';\nimport type { BaseSecureClient } from '../../clients';\nimport { UserInputError } from '../../errors';\nimport { isV2PositionId } from '../../protocol';\nimport { FIXED_SCALE, type ScaledPrice, toScaledPrice } from './fixed';\n\nexport type RoundingConfig = {\n amount: number;\n size: number;\n};\n\nexport function resolveRoundingConfig(tickSize: TickSizeValue): RoundingConfig {\n switch (tickSize) {\n case 0.1:\n return { amount: 3, size: 2 };\n case 0.01:\n return { amount: 4, size: 2 };\n case 0.005:\n return { amount: 5, size: 2 };\n case 0.0025:\n return { amount: 6, size: 2 };\n case 0.001:\n return { amount: 5, size: 2 };\n case 0.0001:\n return { amount: 6, size: 2 };\n }\n\n invariant(false, `Unsupported tick size: ${tickSize}`);\n}\n\n/**\n * Normalizes a user-supplied order price to six-decimal fixed point and\n * validates that it lies on the market's tick grid within\n * `[tickSize, 1 - tickSize]`.\n *\n * Grid membership is checked with integer modulo after the conversion boundary\n * has rejected unsupported precision. This mirrors the exchange's own\n * validation, which divides the price by the market's minimum tick and requires\n * an integer result.\n *\n * @internal\n */\nexport function validatePriceOnTickGrid(\n price: number,\n tickSize: TickSizeValue,\n): ScaledPrice {\n const scaledPrice = toScaledPrice(price);\n const scaledTick = toScaledPrice(tickSize);\n\n if (scaledPrice < scaledTick || scaledPrice > FIXED_SCALE - scaledTick) {\n throw new UserInputError(\n `must be between ${tickSize} and ${1 - tickSize} for tick size ${tickSize}.`,\n );\n }\n\n if (scaledPrice % scaledTick !== 0n) {\n throw new UserInputError(\n `${price} must be a multiple of tick size ${tickSize}.`,\n );\n }\n\n return scaledPrice;\n}\n\nexport function resolveExchangeAddress(\n client: BaseSecureClient,\n negRisk: boolean,\n): EvmAddress {\n return negRisk\n ? client.environment.contracts.negRiskExchange\n : client.environment.contracts.standardExchange;\n}\n\n/** @internal */\nexport function resolveOrderExchangeAddress(\n client: BaseSecureClient,\n assetId: ClobAssetId,\n negRisk: boolean,\n): EvmAddress {\n if (isV2PositionId(assetId)) {\n throw new UserInputError(\n 'Position-backed V3 orders are not supported by SDK.',\n );\n }\n return resolveExchangeAddress(client, negRisk);\n}\n","import { OrderSide, type TickSizeValue } from '@kuest/bindings';\nimport { resolveRoundingConfig } from './context';\nimport {\n FIXED_SCALE,\n mulDiv,\n quantize,\n Rounding,\n type ScaledAmount,\n type ScaledPrice,\n scaledQuantum,\n toScaledAmount,\n} from './fixed';\n\nfunction multiplyAmountByPrice(\n amount: ScaledAmount,\n price: ScaledPrice,\n decimalPlaces: number,\n rounding: Rounding,\n): bigint {\n const quantum = scaledQuantum(decimalPlaces);\n return mulDiv(amount, price, FIXED_SCALE * quantum, rounding) * quantum;\n}\n\nfunction divideAmountByPrice(\n amount: ScaledAmount,\n price: ScaledPrice,\n decimalPlaces: number,\n rounding: Rounding,\n): bigint {\n const quantum = scaledQuantum(decimalPlaces);\n return mulDiv(amount, FIXED_SCALE, price * quantum, rounding) * quantum;\n}\n\nexport function computeLimitOrderAmounts(params: {\n price: ScaledPrice;\n side: OrderSide;\n size: number;\n tickSize: TickSizeValue;\n}): {\n offeredAmount: bigint;\n requestedAmount: bigint;\n} {\n const roundConfig = resolveRoundingConfig(params.tickSize);\n const size = quantize(\n toScaledAmount(params.size),\n roundConfig.size,\n Rounding.Down,\n );\n\n if (params.side === OrderSide.BUY) {\n return {\n offeredAmount: multiplyAmountByPrice(\n size,\n params.price,\n roundConfig.amount,\n Rounding.Down,\n ),\n requestedAmount: size,\n };\n }\n\n return {\n offeredAmount: size,\n requestedAmount: multiplyAmountByPrice(\n size,\n params.price,\n roundConfig.amount,\n Rounding.Down,\n ),\n };\n}\n\nexport function computeMarketOrderAmounts(params: {\n amount: number;\n price: ScaledPrice;\n protectPrice?: boolean;\n side: OrderSide;\n tickSize: TickSizeValue;\n}): {\n offeredAmount: bigint;\n requestedAmount: bigint;\n} {\n const roundConfig = resolveRoundingConfig(params.tickSize);\n const amount = quantize(\n toScaledAmount(params.amount),\n roundConfig.size,\n Rounding.Down,\n );\n const rounding = params.protectPrice ? Rounding.Up : Rounding.Down;\n\n if (params.side === OrderSide.BUY) {\n return {\n offeredAmount: amount,\n requestedAmount: divideAmountByPrice(\n amount,\n params.price,\n roundConfig.amount,\n rounding,\n ),\n };\n }\n\n return {\n offeredAmount: amount,\n requestedAmount: multiplyAmountByPrice(\n amount,\n params.price,\n roundConfig.amount,\n rounding,\n ),\n };\n}\n","import type {\n BuilderCode,\n ClobAssetId,\n ConditionId,\n TickSizeValue,\n} from '@kuest/bindings';\nimport type { MarketFeeInfo, MarketInfo } from '@kuest/bindings/clob';\nimport type { BaseClient } from '../../clients';\nimport { UnexpectedResponseError } from '../../errors';\nimport {\n fetchBuilderFeeRates,\n fetchMarketInfo,\n resolveConditionByToken,\n} from '../clob';\n\nconst METADATA_TTL_MS = 10 * 60 * 1000;\nconst IMMUTABLE_TTL_MS = Number.POSITIVE_INFINITY;\n\n/** @internal */\nexport type OrderMarketMetadata = {\n feeInfo: MarketFeeInfo;\n negRisk: boolean;\n tickSize: TickSizeValue;\n};\n\n/** @internal */\nexport type OrderMetadataCacheDeps = {\n fetchBuilderTakerFeeRate(builderCode: BuilderCode): Promise<number>;\n fetchMarket(conditionId: ConditionId): Promise<MarketInfo>;\n resolveCondition(assetId: ClobAssetId): Promise<ConditionId>;\n};\n\ntype MarketRecord = OrderMarketMetadata & {\n assetIds: ReadonlySet<ClobAssetId>;\n};\n\ntype CacheEntry<TValue> = {\n expiresAt?: number;\n promise: Promise<TValue>;\n};\n\n/** @internal */\nexport class OrderMetadataCache {\n readonly #deps: OrderMetadataCacheDeps;\n readonly #builderTakerFeeRates = new Map<BuilderCode, CacheEntry<number>>();\n readonly #conditions = new Map<ClobAssetId, CacheEntry<ConditionId>>();\n readonly #markets = new Map<ConditionId, CacheEntry<MarketRecord>>();\n\n constructor(deps: OrderMetadataCacheDeps) {\n this.#deps = deps;\n }\n\n async resolveMarket(assetId: ClobAssetId): Promise<OrderMarketMetadata> {\n const market = await this.#resolveMarket(assetId);\n\n return {\n feeInfo: market.feeInfo,\n negRisk: market.negRisk,\n tickSize: market.tickSize,\n };\n }\n\n async resolveBuilderTakerFeeRate(\n builderCode: BuilderCode | undefined,\n ): Promise<number> {\n if (builderCode === undefined) {\n return 0;\n }\n\n return readThrough(\n this.#builderTakerFeeRates,\n builderCode,\n METADATA_TTL_MS,\n () => this.#deps.fetchBuilderTakerFeeRate(builderCode),\n );\n }\n\n async fetchCurrentMarket(assetId: ClobAssetId): Promise<OrderMarketMetadata> {\n const conditionId = await readThrough(\n this.#conditions,\n assetId,\n IMMUTABLE_TTL_MS,\n () => this.#deps.resolveCondition(assetId),\n );\n const market = await this.#fetchMarket(conditionId);\n\n this.#assertMarketContainsAsset(assetId, conditionId, market);\n this.#markets.set(conditionId, resolvedEntry(market, METADATA_TTL_MS));\n\n return {\n feeInfo: market.feeInfo,\n negRisk: market.negRisk,\n tickSize: market.tickSize,\n };\n }\n\n async #resolveMarket(assetId: ClobAssetId): Promise<MarketRecord> {\n const conditionId = await readThrough(\n this.#conditions,\n assetId,\n IMMUTABLE_TTL_MS,\n () => this.#deps.resolveCondition(assetId),\n );\n const market = await readThrough(\n this.#markets,\n conditionId,\n METADATA_TTL_MS,\n () => this.#fetchMarket(conditionId),\n );\n\n this.#assertMarketContainsAsset(assetId, conditionId, market);\n\n return market;\n }\n\n #assertMarketContainsAsset(\n assetId: ClobAssetId,\n conditionId: ConditionId,\n market: MarketRecord,\n ): void {\n if (market.assetIds.has(assetId)) {\n return;\n }\n\n this.#conditions.delete(assetId);\n this.#markets.delete(conditionId);\n throw new UnexpectedResponseError(\n `Market ${conditionId} does not include asset ${assetId}.`,\n );\n }\n\n async #fetchMarket(conditionId: ConditionId): Promise<MarketRecord> {\n const market = await this.#deps.fetchMarket(conditionId);\n const assetIds = new Set(market.tokens.map(({ assetId }) => assetId));\n\n for (const assetId of assetIds) {\n this.#conditions.set(assetId, resolvedEntry(conditionId));\n }\n\n return {\n feeInfo: market.feeInfo,\n negRisk: market.negRisk,\n tickSize: market.tickSize,\n assetIds,\n };\n }\n}\n\nfunction readThrough<TKey, TValue>(\n entries: Map<TKey, CacheEntry<TValue>>,\n key: TKey,\n ttlMs: number,\n load: () => Promise<TValue>,\n): Promise<TValue> {\n const cached = entries.get(key);\n\n if (\n cached !== undefined &&\n (cached.expiresAt === undefined || cached.expiresAt > Date.now())\n ) {\n return cached.promise;\n }\n\n const entry: CacheEntry<TValue> = { promise: load() };\n entry.promise.then(\n () => {\n entry.expiresAt = Date.now() + ttlMs;\n },\n () => {\n if (entries.get(key) === entry) {\n entries.delete(key);\n }\n },\n );\n entries.set(key, entry);\n\n return entry.promise;\n}\n\nfunction resolvedEntry<TValue>(\n value: TValue,\n ttlMs = IMMUTABLE_TTL_MS,\n): CacheEntry<TValue> {\n return {\n expiresAt: Date.now() + ttlMs,\n promise: Promise.resolve(value),\n };\n}\n\nconst cachesByClient = new WeakMap<BaseClient, OrderMetadataCache>();\n\n/** @internal */\nexport function resolveOrderMarketMetadata(\n client: BaseClient,\n assetId: ClobAssetId,\n): Promise<OrderMarketMetadata> {\n return resolveCache(client).resolveMarket(assetId);\n}\n\n/** @internal */\nexport function fetchCurrentOrderMarketMetadata(\n client: BaseClient,\n assetId: ClobAssetId,\n): Promise<OrderMarketMetadata> {\n return resolveCache(client).fetchCurrentMarket(assetId);\n}\n\n/** @internal */\nexport function resolveBuilderTakerFeeRate(\n client: BaseClient,\n builderCode: BuilderCode | undefined,\n): Promise<number> {\n return resolveCache(client).resolveBuilderTakerFeeRate(builderCode);\n}\n\nfunction resolveCache(client: BaseClient): OrderMetadataCache {\n const existing = cachesByClient.get(client);\n\n if (existing !== undefined) {\n return existing;\n }\n\n const created = new OrderMetadataCache({\n fetchBuilderTakerFeeRate: async (builderCode) =>\n (await fetchBuilderFeeRates(client, { builderCode })).taker,\n fetchMarket: (conditionId) => fetchMarketInfo(client, { conditionId }),\n resolveCondition: (assetId) => resolveConditionByToken(client, { assetId }),\n });\n cachesByClient.set(client, created);\n\n return created;\n}\n","import {\n type BuilderCode,\n BuilderCodeSchema,\n type ClobAssetId,\n type OrderSide,\n OrderSideSchema,\n OrderType,\n PositiveDecimalNumberSchema,\n type TickSizeValue,\n} from '@kuest/bindings';\nimport type { EvmAddress } from '@kuest/types';\nimport { z } from 'zod';\nimport type { BaseSecureClient } from '../../clients';\nimport { UserInputError } from '../../errors';\nimport { resolveSiteOrderContext } from '../../site-config';\nimport { computeLimitOrderAmounts } from './amounts';\nimport { AssetIdOrderAssetSchema, TokenIdOrderAssetSchema } from './asset';\nimport {\n fetchCurrentOrderMarketMetadata,\n type OrderMarketMetadata,\n resolveOrderMarketMetadata,\n} from './cache';\nimport {\n resolveOrderExchangeAddress,\n validatePriceOnTickGrid,\n} from './context';\nimport type { ScaledPrice } from './fixed';\nimport type { OrderDraft, PrepareLimitOrderRequest } from './types';\n\nconst MINIMUM_LIMIT_ORDER_EXPIRATION_SECONDS = 180;\n\nconst BasePrepareLimitOrderParamsSchema = z.strictObject({\n price: PositiveDecimalNumberSchema,\n size: PositiveDecimalNumberSchema,\n side: OrderSideSchema,\n builderCode: BuilderCodeSchema.optional(),\n postOnly: z.boolean().default(false),\n expiration: z.number().int().nonnegative().optional(),\n});\n\nexport type PrepareLimitOrderDraftParams = {\n assetId: ClobAssetId;\n builderCode?: BuilderCode;\n expiration?: number;\n postOnly: boolean;\n price: number;\n side: OrderSide;\n size: number;\n};\n\nexport const PrepareLimitOrderParamsSchema = z\n .union([\n BasePrepareLimitOrderParamsSchema.extend(AssetIdOrderAssetSchema.shape),\n BasePrepareLimitOrderParamsSchema.extend(TokenIdOrderAssetSchema.shape),\n ])\n .superRefine((params, context) => {\n if (params.expiration !== undefined) {\n const minimumExpiration =\n Math.floor(Date.now() / 1000) + MINIMUM_LIMIT_ORDER_EXPIRATION_SECONDS;\n\n if (params.expiration < minimumExpiration) {\n context.addIssue({\n code: 'custom',\n message: 'Expiration must be at least 3 minutes in the future.',\n path: ['expiration'],\n });\n }\n }\n })\n .transform(({ assetId, tokenId, ...params }) => ({\n ...params,\n assetId: assetId ?? tokenId,\n })) satisfies z.ZodType<\n PrepareLimitOrderDraftParams,\n PrepareLimitOrderRequest\n>;\n\ntype ResolveLimitOrderContextParams = {\n assetId: ClobAssetId;\n price: number;\n};\n\nexport async function prepareLimitOrderDraft(\n client: BaseSecureClient,\n params: PrepareLimitOrderDraftParams,\n): Promise<OrderDraft> {\n const context = await resolveLimitOrderContext(client, {\n assetId: params.assetId,\n price: params.price,\n });\n const amounts = computeLimitOrderAmounts({\n price: context.price,\n side: params.side,\n size: params.size,\n tickSize: context.tickSize,\n });\n\n const siteOrder = resolveSiteOrderContext(\n client.siteConfig,\n params.builderCode,\n );\n return {\n assetId: params.assetId,\n builderCode: siteOrder.builderCode,\n metadata: siteOrder.metadata,\n chainId: client.environment.chainId,\n exchangeAddress: context.exchangeAddress,\n expiration: params.expiration ?? 0,\n funderAddress: context.funderAddress,\n offeredAmount: amounts.offeredAmount,\n orderType: params.expiration === undefined ? OrderType.GTC : OrderType.GTD,\n side: params.side,\n signer: context.signerAddress,\n requestedAmount: amounts.requestedAmount,\n };\n}\n\ntype LimitOrderContext = {\n exchangeAddress: EvmAddress;\n funderAddress: EvmAddress;\n price: ScaledPrice;\n signerAddress: EvmAddress;\n tickSize: TickSizeValue;\n};\n\nasync function resolveLimitOrderContext(\n client: BaseSecureClient,\n params: ResolveLimitOrderContextParams,\n): Promise<LimitOrderContext> {\n const metadata = await resolveOrderMarketMetadata(client, params.assetId);\n\n try {\n return buildLimitOrderContext(client, params, metadata);\n } catch (error) {\n if (!(error instanceof UserInputError)) {\n throw error;\n }\n\n const currentMetadata = await fetchCurrentOrderMarketMetadata(\n client,\n params.assetId,\n );\n\n return buildLimitOrderContext(client, params, currentMetadata);\n }\n}\n\nfunction buildLimitOrderContext(\n client: BaseSecureClient,\n params: ResolveLimitOrderContextParams,\n metadata: OrderMarketMetadata,\n): LimitOrderContext {\n const price = validateExactPriceOnTickGrid(params.price, metadata.tickSize);\n\n return {\n exchangeAddress: resolveOrderExchangeAddress(\n client,\n params.assetId,\n metadata.negRisk,\n ),\n funderAddress: client.account.wallet,\n price,\n signerAddress: client.account.signer,\n tickSize: metadata.tickSize,\n };\n}\n\nfunction validateExactPriceOnTickGrid(\n price: number,\n tickSize: TickSizeValue,\n): ScaledPrice {\n try {\n return validatePriceOnTickGrid(price, tickSize);\n } catch (error) {\n if (!(error instanceof UserInputError)) {\n throw error;\n }\n\n throw new UserInputError(`Price ${error.message}`, { cause: error });\n }\n}\n","import {\n type BuilderCode,\n BuilderCodeSchema,\n type ClobAssetId,\n OrderSide,\n OrderType,\n PositiveDecimalNumberSchema,\n type TickSizeValue,\n} from '@kuest/bindings';\nimport { type EvmAddress, invariant } from '@kuest/types';\nimport { z } from 'zod';\nimport type { BaseSecureClient } from '../../clients';\nimport { UnexpectedResponseError, UserInputError } from '../../errors';\nimport { resolveSiteOrderContext } from '../../site-config';\nimport { fetchOrderBook } from '../clob';\nimport { computeMarketOrderAmounts } from './amounts';\nimport { AssetIdOrderAssetSchema, TokenIdOrderAssetSchema } from './asset';\nimport {\n fetchCurrentOrderMarketMetadata,\n type OrderMarketMetadata,\n resolveBuilderTakerFeeRate,\n resolveOrderMarketMetadata,\n} from './cache';\nimport {\n resolveOrderExchangeAddress,\n validatePriceOnTickGrid,\n} from './context';\nimport { resolveMarketPriceFromOrderBook } from './estimate';\nimport { fromScaledPrice, type ScaledPrice, toScaledPrice } from './fixed';\nimport type { OrderDraft, PrepareMarketOrderRequest } from './types';\n\nconst BasePrepareMarketOrderParamsSchema = z.object({\n builderCode: BuilderCodeSchema.optional(),\n orderType: z\n .union([z.literal(OrderType.FAK), z.literal(OrderType.FOK)])\n .default(OrderType.FAK),\n});\n\nconst PrepareMarketBuyOrderParamsSchema =\n BasePrepareMarketOrderParamsSchema.extend({\n side: z.literal(OrderSide.BUY),\n amount: PositiveDecimalNumberSchema,\n maxSpend: PositiveDecimalNumberSchema.optional(),\n maxPrice: PositiveDecimalNumberSchema.optional(),\n });\n\nconst PrepareMarketSellOrderParamsSchema =\n BasePrepareMarketOrderParamsSchema.extend({\n side: z.literal(OrderSide.SELL),\n shares: PositiveDecimalNumberSchema,\n minPrice: PositiveDecimalNumberSchema.optional(),\n });\n\nexport type PrepareMarketOrderDraftParams =\n | {\n assetId: ClobAssetId;\n amount: number;\n builderCode?: BuilderCode;\n maxPrice?: number;\n maxSpend?: number;\n orderType: OrderType.FAK | OrderType.FOK;\n side: OrderSide.BUY;\n }\n | {\n assetId: ClobAssetId;\n builderCode?: BuilderCode;\n minPrice?: number;\n orderType: OrderType.FAK | OrderType.FOK;\n shares: number;\n side: OrderSide.SELL;\n };\n\nexport const PrepareMarketOrderParamsSchema = z\n .union([\n PrepareMarketBuyOrderParamsSchema.extend(AssetIdOrderAssetSchema.shape),\n PrepareMarketBuyOrderParamsSchema.extend(TokenIdOrderAssetSchema.shape),\n PrepareMarketSellOrderParamsSchema.extend(AssetIdOrderAssetSchema.shape),\n PrepareMarketSellOrderParamsSchema.extend(TokenIdOrderAssetSchema.shape),\n ])\n .transform(({ assetId, tokenId, ...params }) => ({\n ...params,\n assetId: assetId ?? tokenId,\n })) satisfies z.ZodType<\n PrepareMarketOrderDraftParams,\n PrepareMarketOrderRequest\n>;\n\nexport async function prepareMarketOrderDraft(\n client: BaseSecureClient,\n params: PrepareMarketOrderDraftParams,\n): Promise<OrderDraft> {\n const siteOrder = resolveSiteOrderContext(\n client.siteConfig,\n params.builderCode,\n );\n const attributedParams = {\n ...params,\n builderCode: siteOrder.builderCode,\n };\n const context = await resolveMarketOrderContext(\n client,\n attributedParams,\n attributedParams.assetId,\n );\n const amounts = computeMarketOrderAmounts({\n amount: context.resolvedAmount,\n price: context.price,\n protectPrice: hasProtectedPrice(attributedParams),\n side: attributedParams.side,\n tickSize: context.tickSize,\n });\n\n return {\n assetId: attributedParams.assetId,\n builderCode: attributedParams.builderCode,\n metadata: siteOrder.metadata,\n chainId: client.environment.chainId,\n exchangeAddress: context.exchangeAddress,\n expiration: 0,\n funderAddress: context.funderAddress,\n offeredAmount: amounts.offeredAmount,\n orderType: attributedParams.orderType,\n side: attributedParams.side,\n signer: context.signerAddress,\n requestedAmount: amounts.requestedAmount,\n };\n}\n\ntype MarketOrderContext = {\n exchangeAddress: EvmAddress;\n funderAddress: EvmAddress;\n price: ScaledPrice;\n resolvedAmount: number;\n signerAddress: EvmAddress;\n tickSize: TickSizeValue;\n};\n\nasync function resolveMarketOrderContext(\n client: BaseSecureClient,\n params: PrepareMarketOrderDraftParams,\n assetId: ClobAssetId,\n): Promise<MarketOrderContext> {\n return hasProtectedPrice(params)\n ? resolveProtectedMarketOrderContext(client, params, assetId)\n : resolveUnprotectedMarketOrderContext(client, params, assetId);\n}\n\nasync function resolveProtectedMarketOrderContext(\n client: BaseSecureClient,\n params: PrepareMarketOrderDraftParams,\n assetId: ClobAssetId,\n): Promise<MarketOrderContext> {\n const amount = params.side === OrderSide.BUY ? params.amount : params.shares;\n\n if (params.side === OrderSide.BUY && params.maxSpend !== undefined) {\n const { builderTakerFeeRate, market } = await resolveFeeInputs(\n client,\n assetId,\n params.builderCode,\n );\n\n try {\n return buildProtectedBuyMarketOrderContext(\n client,\n params,\n assetId,\n amount,\n builderTakerFeeRate,\n params.maxSpend,\n market,\n );\n } catch (error) {\n if (!(error instanceof UserInputError)) {\n throw error;\n }\n\n const currentMarket = await fetchCurrentOrderMarketMetadata(\n client,\n assetId,\n );\n\n return buildProtectedBuyMarketOrderContext(\n client,\n params,\n assetId,\n amount,\n builderTakerFeeRate,\n params.maxSpend,\n currentMarket,\n );\n }\n }\n\n const metadata = await resolveOrderMarketMetadata(client, assetId);\n\n try {\n return buildProtectedMarketOrderContext(\n client,\n params,\n assetId,\n amount,\n metadata,\n );\n } catch (error) {\n if (!(error instanceof UserInputError)) {\n throw error;\n }\n\n const currentMetadata = await fetchCurrentOrderMarketMetadata(\n client,\n assetId,\n );\n\n return buildProtectedMarketOrderContext(\n client,\n params,\n assetId,\n amount,\n currentMetadata,\n );\n }\n}\n\nfunction buildProtectedBuyMarketOrderContext(\n client: BaseSecureClient,\n params: PrepareMarketOrderDraftParams,\n assetId: ClobAssetId,\n amount: number,\n builderTakerFeeRate: number,\n maxSpend: number,\n metadata: OrderMarketMetadata,\n): MarketOrderContext {\n const price = resolveProtectedMarketOrderPrice(params, metadata.tickSize);\n const priceNumber = fromScaledPrice(price);\n\n return {\n exchangeAddress: resolveOrderExchangeAddress(\n client,\n assetId,\n metadata.negRisk,\n ),\n funderAddress: client.account.wallet,\n price,\n resolvedAmount: adjustBuyAmountForFees({\n amount,\n builderTakerFeeRate,\n maxSpend,\n platformFeeExponent: metadata.feeInfo.exponent,\n platformFeeRate: metadata.feeInfo.rate,\n price: priceNumber,\n }),\n signerAddress: client.account.signer,\n tickSize: metadata.tickSize,\n };\n}\n\nfunction buildProtectedMarketOrderContext(\n client: BaseSecureClient,\n params: PrepareMarketOrderDraftParams,\n assetId: ClobAssetId,\n amount: number,\n metadata: OrderMarketMetadata,\n): MarketOrderContext {\n const price = resolveProtectedMarketOrderPrice(params, metadata.tickSize);\n\n return {\n exchangeAddress: resolveOrderExchangeAddress(\n client,\n assetId,\n metadata.negRisk,\n ),\n funderAddress: client.account.wallet,\n price,\n resolvedAmount: amount,\n signerAddress: client.account.signer,\n tickSize: metadata.tickSize,\n };\n}\n\nasync function resolveUnprotectedMarketOrderContext(\n client: BaseSecureClient,\n params: PrepareMarketOrderDraftParams,\n assetId: ClobAssetId,\n): Promise<MarketOrderContext> {\n const amount = params.side === OrderSide.BUY ? params.amount : params.shares;\n const feeInputs =\n params.side === OrderSide.BUY && params.maxSpend !== undefined\n ? resolveFeeInputs(client, assetId, params.builderCode)\n : undefined;\n const [orderBook, resolvedFeeInputs] = await Promise.all([\n fetchOrderBook(client, { assetId }),\n feeInputs,\n ]);\n\n if (orderBook.assetId !== assetId) {\n throw new UnexpectedResponseError(\n `Order book returned asset ${orderBook.assetId} for requested asset ${assetId}.`,\n );\n }\n\n const price = toScaledPrice(\n resolveMarketPriceFromOrderBook({\n amount,\n orderBook,\n orderType: params.orderType,\n side: params.side,\n }),\n );\n\n return {\n exchangeAddress: resolveOrderExchangeAddress(\n client,\n assetId,\n orderBook.negRisk,\n ),\n funderAddress: client.account.wallet,\n price,\n resolvedAmount: resolveUnprotectedMarketOrderAmount(\n params,\n amount,\n fromScaledPrice(price),\n resolvedFeeInputs,\n ),\n signerAddress: client.account.signer,\n tickSize: orderBook.tickSize,\n };\n}\n\nfunction resolveUnprotectedMarketOrderAmount(\n params: PrepareMarketOrderDraftParams,\n amount: number,\n price: number,\n feeInputs: FeeInputs | undefined,\n): number {\n if (\n params.side !== OrderSide.BUY ||\n params.maxSpend === undefined ||\n feeInputs === undefined\n ) {\n return amount;\n }\n\n return adjustBuyAmountForFees({\n amount,\n builderTakerFeeRate: feeInputs.builderTakerFeeRate,\n maxSpend: params.maxSpend,\n platformFeeExponent: feeInputs.market.feeInfo.exponent,\n platformFeeRate: feeInputs.market.feeInfo.rate,\n price,\n });\n}\n\nfunction resolveProtectedMarketOrderPrice(\n params: PrepareMarketOrderDraftParams,\n tickSize: TickSizeValue,\n): ScaledPrice {\n if (params.side === OrderSide.BUY) {\n invariant(\n params.maxPrice !== undefined,\n 'Protected BUY market order requires maxPrice.',\n );\n return validateProtectedPriceOnTickGrid(\n 'maxPrice',\n params.maxPrice,\n tickSize,\n );\n }\n\n invariant(\n params.minPrice !== undefined,\n 'Protected SELL market order requires minPrice.',\n );\n return validateProtectedPriceOnTickGrid(\n 'minPrice',\n params.minPrice,\n tickSize,\n );\n}\n\nfunction validateProtectedPriceOnTickGrid(\n field: 'maxPrice' | 'minPrice',\n price: number,\n tickSize: TickSizeValue,\n): ScaledPrice {\n try {\n return validatePriceOnTickGrid(price, tickSize);\n } catch (error) {\n if (!(error instanceof UserInputError)) {\n throw error;\n }\n\n throw new UserInputError(`${field} ${error.message}`, { cause: error });\n }\n}\n\nfunction hasProtectedPrice(params: PrepareMarketOrderDraftParams): boolean {\n return (\n (params.side === OrderSide.BUY && params.maxPrice !== undefined) ||\n (params.side === OrderSide.SELL && params.minPrice !== undefined)\n );\n}\n\ntype FeeInputs = {\n builderTakerFeeRate: number;\n market: OrderMarketMetadata;\n};\n\nasync function resolveFeeInputs(\n client: BaseSecureClient,\n assetId: ClobAssetId,\n builderCode: BuilderCode | undefined,\n): Promise<FeeInputs> {\n const [market, builderTakerFeeRate] = await Promise.all([\n resolveOrderMarketMetadata(client, assetId),\n resolveBuilderTakerFeeRate(client, builderCode),\n ]);\n\n return { builderTakerFeeRate, market };\n}\n\nexport function adjustBuyAmountForFees(params: {\n amount: number;\n price: number;\n maxSpend: number;\n platformFeeRate: number;\n platformFeeExponent: number;\n builderTakerFeeRate: number;\n}): number {\n const platformFeeRate =\n params.platformFeeRate *\n (params.price * (1 - params.price)) ** params.platformFeeExponent;\n const platformFee = (params.amount / params.price) * platformFeeRate;\n const totalCost =\n params.amount + platformFee + params.amount * params.builderTakerFeeRate;\n\n if (params.maxSpend <= totalCost) {\n return (\n params.maxSpend /\n (1 + platformFeeRate / params.price + params.builderTakerFeeRate)\n );\n }\n\n return params.amount;\n}\n","import { OrderSide, type PositionId, type TokenId } from '@kuest/bindings';\nimport { SignatureType } from '@kuest/bindings/clob';\nimport {\n type Erc1271Signature,\n type EvmAddress,\n type EvmSignature,\n expectErc1271Signature,\n expectHexString,\n type HexString,\n} from '@kuest/types';\nimport { AbiParameters, Bytes, Hash } from 'ox';\nimport type { TypedDataField, TypedDataPayload } from './types';\n\nconst PROTOCOL_NAME = 'CTF Exchange';\nconst DEPOSIT_WALLET_DOMAIN_NAME = 'DepositWallet';\nconst DEPOSIT_WALLET_DOMAIN_VERSION = '1';\nconst BYTES32_ZERO =\n '0x0000000000000000000000000000000000000000000000000000000000000000' satisfies HexString;\nconst ORDER_TYPE_STRING =\n 'Order(uint256 salt,address maker,address signer,uint256 tokenId,uint256 makerAmount,uint256 takerAmount,uint8 side,uint8 signatureType,uint256 timestamp,bytes32 metadata,bytes32 builder)';\nconst ORDER_TYPE_HASH = Hash.keccak256(Bytes.fromString(ORDER_TYPE_STRING), {\n as: 'Hex',\n});\nconst DOMAIN_TYPE_HASH = Hash.keccak256(\n Bytes.fromString(\n 'EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)',\n ),\n { as: 'Hex' },\n);\nconst PROTOCOL_NAME_HASH = Hash.keccak256(Bytes.fromString(PROTOCOL_NAME), {\n as: 'Hex',\n});\nconst EIP712_DOMAIN: readonly TypedDataField[] = [\n { name: 'name', type: 'string' },\n { name: 'version', type: 'string' },\n { name: 'chainId', type: 'uint256' },\n { name: 'verifyingContract', type: 'address' },\n];\nconst ORDER_STRUCTURE: readonly TypedDataField[] = [\n { name: 'salt', type: 'uint256' },\n { name: 'maker', type: 'address' },\n { name: 'signer', type: 'address' },\n { name: 'tokenId', type: 'uint256' },\n { name: 'makerAmount', type: 'uint256' },\n { name: 'takerAmount', type: 'uint256' },\n { name: 'side', type: 'uint8' },\n { name: 'signatureType', type: 'uint8' },\n { name: 'timestamp', type: 'uint256' },\n { name: 'metadata', type: 'bytes32' },\n { name: 'builder', type: 'bytes32' },\n];\nconst TYPED_DATA_SIGN_STRUCTURE: readonly TypedDataField[] = [\n { name: 'contents', type: 'Order' },\n { name: 'name', type: 'string' },\n { name: 'version', type: 'string' },\n { name: 'chainId', type: 'uint256' },\n { name: 'verifyingContract', type: 'address' },\n { name: 'salt', type: 'bytes32' },\n];\n\n/** @internal */\nexport enum ExchangeOrderProtocolVersion {\n V2 = '2',\n V3 = '3',\n}\n\n/** @internal */\nexport type ExchangeOrderDomain = {\n chainId: number;\n exchange: EvmAddress;\n protocolVersion: ExchangeOrderProtocolVersion;\n};\n\n/** @internal */\nexport type ExchangeOrderInput = {\n builder?: HexString;\n maker: EvmAddress;\n makerAmount: string;\n metadata?: HexString;\n salt: string;\n side: OrderSide | 0 | 1;\n signatureType: SignatureType;\n signer: EvmAddress;\n takerAmount: string;\n timestamp: string;\n tokenId: PositionId | TokenId;\n};\n\n/** @internal */\nexport type ExchangeOrderMessage = {\n builder: HexString;\n maker: EvmAddress;\n makerAmount: bigint;\n metadata: HexString;\n salt: bigint;\n side: 0 | 1;\n signatureType: SignatureType;\n signer: EvmAddress;\n takerAmount: bigint;\n timestamp: bigint;\n tokenId: bigint;\n};\n\n/** @internal */\nexport type CreateExchangeOrderTypedDataPayloadParams = {\n domain: ExchangeOrderDomain;\n order: ExchangeOrderInput;\n};\n\n/** @internal */\nexport type CreateExchangeOrderSignatureParams = {\n domain: ExchangeOrderDomain;\n order: ExchangeOrderInput;\n signature: EvmSignature;\n};\n\n/** @internal */\nexport function createExchangeOrderTypedDataPayload(\n params: CreateExchangeOrderTypedDataPayloadParams,\n): TypedDataPayload {\n const orderPayload = createLegacyExchangeOrderTypedDataPayload(\n params.domain,\n params.order,\n );\n\n if (params.order.signatureType !== SignatureType.POLY_1271) {\n return orderPayload;\n }\n\n return {\n domain: createExchangeOrderTypedDataDomain(params.domain),\n message: {\n chainId: params.domain.chainId,\n contents: orderPayload.message,\n name: DEPOSIT_WALLET_DOMAIN_NAME,\n salt: BYTES32_ZERO,\n verifyingContract: params.order.signer,\n version: DEPOSIT_WALLET_DOMAIN_VERSION,\n },\n primaryType: 'TypedDataSign',\n types: {\n EIP712Domain: EIP712_DOMAIN,\n Order: ORDER_STRUCTURE,\n TypedDataSign: TYPED_DATA_SIGN_STRUCTURE,\n },\n };\n}\n\n/** @internal */\nexport function createExchangeOrderSignature(\n params: CreateExchangeOrderSignatureParams,\n): EvmSignature | Erc1271Signature {\n if (params.order.signatureType !== SignatureType.POLY_1271) {\n return params.signature;\n }\n\n const contentsType = Bytes.toHex(Bytes.fromString(ORDER_TYPE_STRING));\n const contentsTypeLength = ORDER_TYPE_STRING.length\n .toString(16)\n .padStart(4, '0');\n\n return expectErc1271Signature(\n `0x${params.signature.slice(2)}${createExchangeOrderDomainSeparator(params.domain).slice(2)}${createExchangeOrderContentsHash(params.order).slice(2)}${contentsType.slice(2)}${contentsTypeLength}`,\n );\n}\n\n/** @internal */\nexport type CreateExchangeV3OrderDomainParams = {\n chainId: number;\n exchange: EvmAddress;\n};\n\n/** @internal */\nexport function createExchangeV3OrderDomain(\n params: CreateExchangeV3OrderDomainParams,\n): ExchangeOrderDomain {\n return {\n chainId: params.chainId,\n exchange: params.exchange,\n protocolVersion: ExchangeOrderProtocolVersion.V3,\n };\n}\n\n/**\n * Amount the order owner gives, in e6 base units: `price * size` collateral\n * rounded up for a BUY, the outcome-token `size` for a SELL. `price` and\n * `size` are both e6-scaled.\n *\n * @internal\n */\nexport function calculateExchangeOrderMakerAmount(\n side: OrderSide,\n price: bigint,\n size: bigint,\n): string {\n if (side === OrderSide.SELL) return size.toString();\n\n return ((price * size + 999_999n) / 1_000_000n).toString();\n}\n\n/**\n * Amount the order owner receives, in e6 base units: the outcome-token\n * `size` for a BUY, `price * size` collateral rounded down for a SELL.\n * Rounding always favors the counterparty. `price` and `size` are both\n * e6-scaled.\n *\n * @internal\n */\nexport function calculateExchangeOrderTakerAmount(\n side: OrderSide,\n price: bigint,\n size: bigint,\n): string {\n if (side === OrderSide.SELL) {\n return ((price * size) / 1_000_000n).toString();\n }\n\n return size.toString();\n}\n\n/** @internal */\nexport function createExchangeOrderMessage(\n order: ExchangeOrderInput,\n): ExchangeOrderMessage {\n return {\n builder: order.builder ?? BYTES32_ZERO,\n maker: order.maker,\n makerAmount: BigInt(order.makerAmount),\n metadata: order.metadata ?? BYTES32_ZERO,\n salt: BigInt(order.salt),\n side: encodeExchangeOrderSide(order.side),\n signatureType: order.signatureType,\n signer: order.signer,\n takerAmount: BigInt(order.takerAmount),\n timestamp: BigInt(order.timestamp),\n tokenId: BigInt(order.tokenId),\n };\n}\n\nfunction createLegacyExchangeOrderTypedDataPayload(\n domain: ExchangeOrderDomain,\n order: ExchangeOrderInput,\n): TypedDataPayload {\n return {\n domain: createExchangeOrderTypedDataDomain(domain),\n message: createExchangeOrderMessage(order),\n primaryType: 'Order',\n types: {\n EIP712Domain: EIP712_DOMAIN,\n Order: ORDER_STRUCTURE,\n },\n };\n}\n\nfunction createExchangeOrderTypedDataDomain(domain: ExchangeOrderDomain) {\n return {\n chainId: domain.chainId,\n name: PROTOCOL_NAME,\n verifyingContract: domain.exchange,\n version: domain.protocolVersion,\n };\n}\n\nfunction createExchangeOrderDomainSeparator(\n domain: ExchangeOrderDomain,\n): HexString {\n return expectHexString(\n Hash.keccak256(\n AbiParameters.encode(\n [\n { type: 'bytes32' },\n { type: 'bytes32' },\n { type: 'bytes32' },\n { type: 'uint256' },\n { type: 'address' },\n ],\n [\n DOMAIN_TYPE_HASH,\n PROTOCOL_NAME_HASH,\n protocolVersionHash(domain.protocolVersion),\n BigInt(domain.chainId),\n domain.exchange,\n ],\n ),\n { as: 'Hex' },\n ),\n );\n}\n\nfunction createExchangeOrderContentsHash(order: ExchangeOrderInput): HexString {\n const message = createExchangeOrderMessage(order);\n\n return expectHexString(\n Hash.keccak256(\n AbiParameters.encode(\n [\n { type: 'bytes32' },\n { type: 'uint256' },\n { type: 'address' },\n { type: 'address' },\n { type: 'uint256' },\n { type: 'uint256' },\n { type: 'uint256' },\n { type: 'uint8' },\n { type: 'uint8' },\n { type: 'uint256' },\n { type: 'bytes32' },\n { type: 'bytes32' },\n ],\n [\n ORDER_TYPE_HASH,\n message.salt,\n message.maker,\n message.signer,\n message.tokenId,\n message.makerAmount,\n message.takerAmount,\n message.side,\n message.signatureType,\n message.timestamp,\n message.metadata,\n message.builder,\n ],\n ),\n { as: 'Hex' },\n ),\n );\n}\n\nfunction protocolVersionHash(\n protocolVersion: ExchangeOrderProtocolVersion,\n): HexString {\n return expectHexString(\n Hash.keccak256(Bytes.fromString(protocolVersion), { as: 'Hex' }),\n );\n}\n\n/** @internal */\nexport function encodeExchangeOrderSide(side: OrderSide | 0 | 1): 0 | 1 {\n if (side === 0 || side === 1) return side;\n\n return side === OrderSide.BUY ? 0 : 1;\n}\n","import type { HexString } from '@kuest/types';\nimport { UserInputError } from '../../errors';\nimport { ExchangeOrderProtocolVersion } from '../../exchange';\nimport { isV2PositionId } from '../../protocol';\nimport type { AccountIdentity } from '../../wallet';\nimport { resolveOrderIdentity } from '../../wallet';\nimport type {\n OrderDraft,\n OrderSignature,\n SignedOrder,\n UnsignedOrder,\n} from './types';\n\nconst BYTES32_ZERO =\n '0x0000000000000000000000000000000000000000000000000000000000000000' satisfies HexString;\n\nexport function createUnsignedOrder(\n order: OrderDraft,\n account: AccountIdentity,\n): UnsignedOrder {\n if (isV2PositionId(order.assetId)) {\n throw new UserInputError(\n 'Position-backed V3 orders are not supported by SDK.',\n );\n }\n const identity = resolveOrderIdentity(account);\n\n return {\n builder: order.builderCode ?? BYTES32_ZERO,\n chainId: order.chainId,\n exchangeAddress: order.exchangeAddress,\n expiration: order.expiration,\n maker: identity.maker,\n makerAmount: order.offeredAmount.toString(),\n metadata: order.metadata ?? BYTES32_ZERO,\n orderType: order.orderType,\n protocolVersion: isV2PositionId(order.assetId)\n ? ExchangeOrderProtocolVersion.V3\n : ExchangeOrderProtocolVersion.V2,\n salt: generateOrderSalt().toString(),\n side: order.side,\n signatureType: identity.signatureType,\n signer: identity.signer,\n takerAmount: order.requestedAmount.toString(),\n timestamp: Date.now().toString(),\n tokenId: order.assetId,\n };\n}\n\nexport function createSignedOrder(\n order: UnsignedOrder,\n signature: OrderSignature,\n): SignedOrder {\n const {\n chainId: _chainId,\n exchangeAddress: _exchangeAddress,\n protocolVersion: _protocolVersion,\n ...signedFields\n } = order;\n\n return {\n ...signedFields,\n signature,\n };\n}\n\nfunction generateOrderSalt(): bigint {\n const bytes = new Uint8Array(8);\n\n globalThis.crypto.getRandomValues(bytes);\n\n const value = BigInt(\n `0x${Array.from(bytes, (byte) => byte.toString(16).padStart(2, '0')).join('')}`,\n );\n\n // Cap the salt to 53 bits (Number.MAX_SAFE_INTEGER == 2^53 - 1).\n //\n // The CLOB wire contract expects `salt` as a JSON number, so the post\n // pipeline coerces this string through `Number.parseInt` before sending.\n // JavaScript `number` is an IEEE-754 double and can only represent integers\n // exactly up to 2^53 - 1; anything larger is silently rounded. The signature,\n // however, is produced over the original (un-rounded) salt via `BigInt`, so\n // any rounding on the wire side causes the server to reconstruct a different\n // EIP-712 hash and reject the order with \"invalid signature\".\n //\n // 53 bits is still ~9.0e15 of collision space (vastly more than the legacy\n // `Math.random() * Date.now()` salt), and keeps the wire round-trip lossless.\n return value & ((1n << 53n) - 1n);\n}\n","import type { Erc1271Signature, EvmSignature } from '@kuest/types';\nimport {\n createExchangeOrderSignature,\n createExchangeOrderTypedDataPayload,\n} from '../../exchange';\nimport type { TypedDataPayload } from '../../types';\nimport type { UnsignedOrder } from './types';\n\nexport function createOrderTypedDataPayload(\n order: UnsignedOrder,\n): TypedDataPayload {\n return createExchangeOrderTypedDataPayload({\n domain: createOrderExchangeDomain(order),\n order,\n });\n}\n\nexport function createOrderSignature(\n order: UnsignedOrder,\n signature: EvmSignature,\n): EvmSignature | Erc1271Signature {\n return createExchangeOrderSignature({\n domain: createOrderExchangeDomain(order),\n order,\n signature,\n });\n}\n\nfunction createOrderExchangeDomain(order: UnsignedOrder) {\n return {\n chainId: order.chainId,\n exchange: order.exchangeAddress,\n protocolVersion: order.protocolVersion,\n };\n}\n","import type {\n BuilderCode,\n ClobAssetId,\n OrderSide,\n OrderType,\n PositionId,\n TokenId,\n} from '@kuest/bindings';\nimport type { OrderResponse, SignatureType } from '@kuest/bindings/clob';\nimport type {\n Erc1271Signature,\n EvmAddress,\n EvmSignature,\n HexString,\n SessionSignerSignature,\n} from '@kuest/types';\nimport type { ExchangeOrderProtocolVersion } from '../../exchange';\nimport type { TypedDataPayload } from '../../types';\nimport type { SignOrderRequest } from '../../workflow';\n\nexport type PrepareMarketBuyOrderRequest =\n | {\n /** Identifier for a CTF token or Polymarket V2 position. */\n assetId: string;\n tokenId?: never;\n /** Buy side of the order. */\n side: OrderSide.BUY;\n /**\n * Desired USD notional to buy, before market and builder taker fees.\n * Fees are paid on top unless `maxSpend` limits the all-in spend.\n */\n amount: number | string;\n /**\n * Optional estimated all-in USD spend target, including applicable fees.\n * The SDK reduces the signed buy amount when necessary to stay within it.\n */\n maxSpend?: number | string;\n /** Highest acceptable price per share; the order only fills at this price or better. */\n maxPrice?: number | string;\n /** Optional builder attribution code. */\n builderCode?: string;\n /** @defaultValue OrderType.FAK */\n orderType?: OrderType.FAK | OrderType.FOK;\n }\n | {\n assetId?: never;\n /** @deprecated Use `assetId`. */\n tokenId: string;\n /** Buy side of the order. */\n side: OrderSide.BUY;\n /**\n * Desired USD notional to buy, before market and builder taker fees.\n * Fees are paid on top unless `maxSpend` limits the all-in spend.\n */\n amount: number | string;\n /**\n * Optional estimated all-in USD spend target, including applicable fees.\n * The SDK reduces the signed buy amount when necessary to stay within it.\n */\n maxSpend?: number | string;\n /** Highest acceptable price per share; the order only fills at this price or better. */\n maxPrice?: number | string;\n /** Optional builder attribution code. */\n builderCode?: string;\n /** @defaultValue OrderType.FAK */\n orderType?: OrderType.FAK | OrderType.FOK;\n };\n\nexport type PrepareMarketSellOrderRequest =\n | {\n /** Identifier for a CTF token or Polymarket V2 position. */\n assetId: string;\n tokenId?: never;\n /** Sell side of the order. */\n side: OrderSide.SELL;\n /** Number of outcome shares to sell in human-readable units. */\n shares: number | string;\n /** Lowest acceptable price per share; the order only fills at this price or better. */\n minPrice?: number | string;\n /** Optional builder attribution code. */\n builderCode?: string;\n /** @defaultValue OrderType.FAK */\n orderType?: OrderType.FAK | OrderType.FOK;\n }\n | {\n assetId?: never;\n /** @deprecated Use `assetId`. */\n tokenId: string;\n /** Sell side of the order. */\n side: OrderSide.SELL;\n /** Number of outcome shares to sell in human-readable units. */\n shares: number | string;\n /** Lowest acceptable price per share; the order only fills at this price or better. */\n minPrice?: number | string;\n /** Optional builder attribution code. */\n builderCode?: string;\n /** @defaultValue OrderType.FAK */\n orderType?: OrderType.FAK | OrderType.FOK;\n };\n\nexport type PrepareMarketOrderRequest =\n | PrepareMarketBuyOrderRequest\n | PrepareMarketSellOrderRequest;\n\nexport type PrepareLimitOrderRequest =\n | {\n /** Identifier for a CTF token or Polymarket V2 position. */\n assetId: string;\n tokenId?: never;\n /** Price used to create the order. */\n price: number | string;\n /** Order size in outcome shares, expressed in human-readable units. */\n size: number | string;\n /** Side of the order. */\n side: OrderSide;\n /** Optional builder attribution code. */\n builderCode?: string;\n /**\n * Posts the prepared order as post-only when submitted.\n * @defaultValue false\n */\n postOnly?: boolean;\n /**\n * Unix timestamp in seconds after which the order expires. When provided,\n * it must be at least 3 minutes in the future and creates a GTD order.\n */\n expiration?: number;\n }\n | {\n assetId?: never;\n /** @deprecated Use `assetId`. */\n tokenId: string;\n /** Price used to create the order. */\n price: number | string;\n /** Order size in outcome shares, expressed in human-readable units. */\n size: number | string;\n /** Side of the order. */\n side: OrderSide;\n /** Optional builder attribution code. */\n builderCode?: string;\n /**\n * Posts the prepared order as post-only when submitted.\n * @defaultValue false\n */\n postOnly?: boolean;\n /**\n * Unix timestamp in seconds after which the order expires. When provided,\n * it must be at least 3 minutes in the future and creates a GTD order.\n */\n expiration?: number;\n };\n\ntype BaseOrderDraft = {\n builderCode?: BuilderCode;\n metadata?: HexString;\n chainId: number;\n exchangeAddress: EvmAddress;\n expiration: number;\n funderAddress: EvmAddress;\n offeredAmount: bigint;\n orderType: OrderType;\n side: OrderSide;\n signer: EvmAddress;\n requestedAmount: bigint;\n};\n\n/** @internal */\nexport type OrderDraft = BaseOrderDraft & {\n assetId: ClobAssetId;\n};\n\n/**\n * @internal\n */\nexport type UnsignedOrder = {\n chainId: number;\n builder: HexString;\n exchangeAddress: EvmAddress;\n expiration: number;\n maker: EvmAddress;\n makerAmount: string;\n metadata: HexString;\n orderType: OrderType;\n protocolVersion: ExchangeOrderProtocolVersion;\n salt: string;\n side: OrderSide;\n signatureType: SignatureType;\n signer: EvmAddress;\n takerAmount: string;\n timestamp: string;\n tokenId: PositionId | TokenId;\n};\n\nexport type OrderSignature =\n | EvmSignature\n | Erc1271Signature\n | SessionSignerSignature;\n\nexport type SignedOrder = {\n builder: HexString;\n expiration: number;\n maker: EvmAddress;\n makerAmount: string;\n metadata: HexString;\n orderType: OrderType;\n salt: string;\n side: OrderSide;\n signatureType: SignatureType;\n signer: EvmAddress;\n takerAmount: string;\n timestamp: string;\n /**\n * Asset identifier encoded in the exchange order. The protocol field is\n * named `tokenId` for both CTF token IDs and Polymarket V2 position IDs.\n */\n tokenId: PositionId | TokenId;\n signature: OrderSignature;\n postOnly?: boolean;\n};\n\nexport type OrderWorkflowRequest = SignOrderRequest;\n\nexport type OrderWorkflow = AsyncGenerator<\n OrderWorkflowRequest,\n SignedOrder,\n EvmAddress | EvmSignature\n>;\n\nexport type OrderPostingWorkflow = AsyncGenerator<\n OrderWorkflowRequest,\n OrderResponse,\n EvmAddress | EvmSignature\n>;\n\n/** @internal */\nexport function signOrder(payload: TypedDataPayload): SignOrderRequest {\n return {\n kind: 'signOrder',\n payload,\n };\n}\n","import { expectEvmSignature } from '@kuest/types';\nimport type { BaseSecureClient } from '../../clients';\nimport {\n InsufficientLiquidityError,\n makeErrorGuard,\n RateLimitError,\n RequestRejectedError,\n SigningError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n} from '../../errors';\nimport { parseUserInput } from '../../input';\nimport { wrapDepositWalletSignature } from '../../wallet';\nimport { PrepareLimitOrderParamsSchema, prepareLimitOrderDraft } from './limit';\nimport {\n PrepareMarketOrderParamsSchema,\n prepareMarketOrderDraft,\n} from './market';\nimport { createSignedOrder, createUnsignedOrder } from './orders';\nimport { postOrder } from './post';\nimport {\n createOrderSignature,\n createOrderTypedDataPayload,\n} from './typed-data';\nimport {\n type OrderPostingWorkflow,\n type OrderWorkflow,\n type PrepareLimitOrderRequest,\n type PrepareMarketOrderRequest,\n signOrder,\n} from './types';\n\nexport type PrepareMarketOrderError =\n | InsufficientLiquidityError\n | RateLimitError\n | RequestRejectedError\n | SigningError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const PrepareMarketOrderError = makeErrorGuard(\n InsufficientLiquidityError,\n RateLimitError,\n RequestRejectedError,\n SigningError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Starts the market-order workflow.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link PrepareMarketOrderError}\n * Thrown on failure.\n *\n * @example\n * ```ts\n * const workflow = await prepareMarketOrder(client, {\n * assetId: '0x0122…0000',\n * amount: 10,\n * maxPrice: '0.55',\n * side: OrderSide.BUY,\n * });\n * ```\n */\nexport async function prepareMarketOrder(\n client: BaseSecureClient,\n request: PrepareMarketOrderRequest,\n): Promise<OrderWorkflow> {\n const params = parseUserInput(request, PrepareMarketOrderParamsSchema);\n\n return async function* (): OrderWorkflow {\n const draft = await prepareMarketOrderDraft(client, params);\n\n const unsignedOrder = createUnsignedOrder(draft, client.account);\n\n const signature = expectEvmSignature(\n yield signOrder(createOrderTypedDataPayload(unsignedOrder)),\n );\n\n return createSignedOrder(\n unsignedOrder,\n wrapDepositWalletSignature(\n client.account,\n createOrderSignature(unsignedOrder, signature),\n ),\n );\n }.call(null);\n}\n\nexport type PrepareLimitOrderError =\n | RateLimitError\n | RequestRejectedError\n | SigningError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const PrepareLimitOrderError = makeErrorGuard(\n RateLimitError,\n RequestRejectedError,\n SigningError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Starts the limit-order workflow.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link PrepareLimitOrderError}\n * Thrown on failure.\n *\n * @example\n * ```ts\n * const workflow = await prepareLimitOrder(client, {\n * assetId: '0x0122…0000',\n * postOnly: true,\n * price: 0.52,\n * side: OrderSide.BUY,\n * size: 10,\n * });\n * ```\n */\nexport async function prepareLimitOrder(\n client: BaseSecureClient,\n request: PrepareLimitOrderRequest,\n): Promise<OrderWorkflow> {\n const params = parseUserInput(request, PrepareLimitOrderParamsSchema);\n\n return async function* (): OrderWorkflow {\n const draft = await prepareLimitOrderDraft(client, params);\n\n const unsignedOrder = createUnsignedOrder(draft, client.account);\n\n const signature = expectEvmSignature(\n yield signOrder(createOrderTypedDataPayload(unsignedOrder)),\n );\n\n const order = createSignedOrder(\n unsignedOrder,\n wrapDepositWalletSignature(\n client.account,\n createOrderSignature(unsignedOrder, signature),\n ),\n );\n\n return params.postOnly === true ? { ...order, postOnly: true } : order;\n }.call(null);\n}\n\nexport type PrepareMarketOrderPostingError = PrepareMarketOrderError;\nexport const PrepareMarketOrderPostingError = PrepareMarketOrderError;\n\n/**\n * Starts and posts a market-order workflow.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link PrepareMarketOrderPostingError}\n * Thrown on failure.\n *\n * @example\n * ```ts\n * const workflow = await prepareMarketOrderPosting(client, {\n * assetId: '0x0122…0000',\n * minPrice: '0.54',\n * shares: 10,\n * side: OrderSide.SELL,\n * });\n * ```\n */\nexport async function prepareMarketOrderPosting(\n client: BaseSecureClient,\n request: PrepareMarketOrderRequest,\n): Promise<OrderPostingWorkflow> {\n return createOrderPostingWorkflow(\n client,\n prepareMarketOrder(client, request),\n );\n}\n\nexport type PrepareLimitOrderPostingError = PrepareLimitOrderError;\nexport const PrepareLimitOrderPostingError = PrepareLimitOrderError;\n\n/**\n * Starts and posts a limit-order workflow.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link PrepareLimitOrderPostingError}\n * Thrown on failure.\n *\n * @example\n * ```ts\n * const workflow = await prepareLimitOrderPosting(client, {\n * assetId: '0x0122…0000',\n * postOnly: true,\n * price: 0.52,\n * side: OrderSide.BUY,\n * size: 10,\n * });\n * ```\n */\nexport async function prepareLimitOrderPosting(\n client: BaseSecureClient,\n request: PrepareLimitOrderRequest,\n): Promise<OrderPostingWorkflow> {\n return createOrderPostingWorkflow(client, prepareLimitOrder(client, request));\n}\n\nasync function createOrderPostingWorkflow(\n client: BaseSecureClient,\n workflowPromise: Promise<OrderWorkflow>,\n): Promise<OrderPostingWorkflow> {\n const workflow = await workflowPromise;\n\n return async function* (): OrderPostingWorkflow {\n const order = yield* workflow;\n\n return postOrder(client)(order);\n }.call(null);\n}\n","import { TradeStatus, type TxHash, TxHashSchema } from '@kuest/bindings';\nimport type { AcceptedOrderResponse, ClobTrade } from '@kuest/bindings/clob';\nimport { delay } from '@kuest/types';\nimport { z } from 'zod';\nimport type { BaseSecureClient } from '../../clients';\nimport {\n makeErrorGuard,\n RateLimitError,\n RequestRejectedError,\n SigningError,\n TimeoutError,\n TransactionFailedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n} from '../../errors';\nimport { parseUserInput } from '../../input';\nimport { listAccountTrades } from '../account';\n\nconst SETTLEMENT_POLL_INTERVAL_MS = 250;\nconst DEFAULT_SETTLEMENT_TIMEOUT_MS = 30_000;\n\nconst WaitForOrderFillSettlementRequestFields = {\n timeoutMs: z.number().int().positive().optional(),\n};\n\nconst WaitForOrderFillSettlementRequestSchema = z\n .object(WaitForOrderFillSettlementRequestFields)\n .default({});\n\nexport type WaitForOrderFillSettlementRequest = {\n /**\n * Maximum time to wait for the order's fills to settle, in milliseconds.\n * Defaults to 30000.\n */\n timeoutMs?: number;\n};\n\nexport type WaitForOrderFillSettlementError =\n | RateLimitError\n | RequestRejectedError\n | SigningError\n | TimeoutError\n | TransactionFailedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const WaitForOrderFillSettlementError = makeErrorGuard(\n RateLimitError,\n RequestRejectedError,\n SigningError,\n TimeoutError,\n TransactionFailedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n// A trade is settled once execution reached a terminal outcome: its\n// transaction is confirmed on-chain, or it failed and never will be.\n// Earlier statuses are not terminal: a transaction hash observed before\n// confirmation can still be replaced if the transaction is retried.\nfunction isTradeSettled(trade: ClobTrade): boolean {\n return (\n trade.status === TradeStatus.Confirmed ||\n trade.status === TradeStatus.Failed\n );\n}\n\nfunction isFailedTrade(trade: ClobTrade): boolean {\n return trade.status === TradeStatus.Failed;\n}\n\n/**\n * Waits until every fill listed in an order response reaches a terminal\n * settlement outcome and returns the settlement transaction hashes.\n *\n * @remarks\n * Settlement covers the fills listed in this order response, identified by the\n * response's `tradeIds`. These are the fills that happened immediately when\n * the order was accepted. It does not wait for later fills of any remaining\n * quantity resting on the book; subscribe to the `user` channel to follow\n * those.\n *\n * Orders without fill identifiers resolve immediately to any transaction\n * hashes carried by the order response, or an empty array. In the rare case\n * where some fills fail execution, the settled fills' hashes are still\n * returned; the failed fills simply contribute no hash.\n *\n * @example\n * ```ts\n * const response = await client.placeMarketOrder({\n * assetId: '0x0122…0000',\n * amount: 10,\n * side: OrderSide.BUY,\n * });\n *\n * if (response.ok) {\n * const hashes = await waitForOrderFillSettlement(client, response);\n * }\n * ```\n *\n * @throws {@link WaitForOrderFillSettlementError}\n * Thrown on failure.\n */\nexport async function waitForOrderFillSettlement(\n client: BaseSecureClient,\n order: AcceptedOrderResponse,\n request?: WaitForOrderFillSettlementRequest,\n): Promise<TxHash[]> {\n const { timeoutMs = DEFAULT_SETTLEMENT_TIMEOUT_MS } = parseUserInput(\n request,\n WaitForOrderFillSettlementRequestSchema,\n );\n\n const tradeIds = [...new Set(order.tradeIds)];\n\n if (tradeIds.length === 0) {\n return [...order.transactionsHashes];\n }\n\n const settled = new Map<string, ClobTrade>();\n const deadline = Date.now() + timeoutMs;\n\n while (settled.size < tradeIds.length) {\n const pending = tradeIds.filter((id) => !settled.has(id));\n const pages = await Promise.all(\n pending.map((id) => listAccountTrades(client, { id }).firstPage()),\n );\n\n for (const page of pages) {\n for (const trade of page.items) {\n if (tradeIds.includes(trade.id) && isTradeSettled(trade)) {\n settled.set(trade.id, trade);\n }\n }\n }\n\n if (settled.size === tradeIds.length) {\n break;\n }\n\n if (Date.now() >= deadline) {\n const unsettled = tradeIds.filter((id) => !settled.has(id));\n throw new TimeoutError(\n `Timed out waiting for trades to settle: ${unsettled.join(', ')}`,\n );\n }\n\n await delay(SETTLEMENT_POLL_INTERVAL_MS);\n }\n\n const trades = [...settled.values()];\n\n if (trades.every(isFailedTrade)) {\n throw new TransactionFailedError(\n `Every fill of order ${order.orderId} failed execution: ${tradeIds.join(', ')}`,\n );\n }\n\n return [\n ...new Set(\n trades\n .filter((trade) => !isFailedTrade(trade))\n .map((trade) => trade.transactionHash),\n ),\n ].map((hash) => TxHashSchema.parse(hash));\n}\n","import { type ClobAssetId, OrderSide } from '@kuest/bindings';\nimport { AssetType } from '@kuest/bindings/clob';\nimport { type EvmAddress, isSameEvmAddress } from '@kuest/types';\nimport type { BaseSecureClient } from '../../clients';\nimport { isV2PositionId } from '../../protocol';\nimport { fetchBalanceAllowance } from '../account';\n\n/** @internal */\nexport function resolveBalanceAllowanceAssetType(\n side: OrderSide,\n assetId: ClobAssetId,\n): AssetType {\n if (side === OrderSide.BUY) {\n return AssetType.COLLATERAL;\n }\n\n return isV2PositionId(assetId)\n ? AssetType.CONDITIONAL_V2\n : AssetType.CONDITIONAL;\n}\n\nexport type ResolveCurrentAllowanceParams = {\n assetId: ClobAssetId;\n spenderAddress: EvmAddress;\n side: OrderSide;\n};\n\n/* @internal */\nexport async function resolveCurrentAllowance(\n client: BaseSecureClient,\n params: ResolveCurrentAllowanceParams,\n): Promise<bigint> {\n const assetType = resolveBalanceAllowanceAssetType(\n params.side,\n params.assetId,\n );\n const { allowances } = await fetchBalanceAllowance(\n client,\n params.side === OrderSide.BUY\n ? {\n assetType,\n }\n : {\n assetType,\n assetId: params.assetId,\n },\n );\n\n return resolveAllowanceAmount(allowances, params.spenderAddress);\n}\n\nfunction resolveAllowanceAmount(\n allowances: Record<EvmAddress, bigint>,\n spender: EvmAddress,\n): bigint {\n const match = (Object.entries(allowances) as [EvmAddress, bigint][]).find(\n ([key]) => isSameEvmAddress(key, spender),\n );\n\n return match?.[1] ?? 0n;\n}\n","import { OrderSide } from '@kuest/bindings';\nimport type { OrderResponse } from '@kuest/bindings/clob';\nimport type { BaseSecureClient } from '../../clients';\nimport {\n CancelledSigningError,\n InsufficientLiquidityError,\n makeErrorGuard,\n RateLimitError,\n RequestRejectedError,\n SigningError,\n TimeoutError,\n TransactionFailedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n} from '../../errors';\nimport { isV2PositionId } from '../../protocol';\nimport { completeWith } from '../../workflow';\nimport { updateBalanceAllowance } from '../account';\nimport { approveErc20, approveErc1155ForAll } from '../approvals';\nimport {\n resolveBalanceAllowanceAssetType,\n resolveCurrentAllowance,\n} from './allowance';\nimport { resolveOrderMarketMetadata } from './cache';\nimport { resolveOrderExchangeAddress } from './context';\nimport { type PostOrderError, postOrder } from './post';\nimport {\n type PrepareLimitOrderError,\n type PrepareMarketOrderError,\n prepareLimitOrder,\n prepareMarketOrder,\n} from './prepare';\nimport type {\n PrepareLimitOrderRequest,\n PrepareMarketOrderRequest,\n SignedOrder,\n} from './types';\n\nexport type CreateMarketOrderError =\n | PrepareMarketOrderError\n | CancelledSigningError;\nexport const CreateMarketOrderError = makeErrorGuard(\n CancelledSigningError,\n InsufficientLiquidityError,\n RateLimitError,\n RequestRejectedError,\n SigningError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Creates a signed market order for the authenticated account.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link CreateMarketOrderError}\n * Thrown on failure.\n *\n * @example\n * ```ts\n * const order = await createMarketOrder(client, {\n * assetId: '0x0122…0000',\n * amount: '100',\n * maxPrice: '0.55',\n * side: OrderSide.BUY,\n * });\n * ```\n */\nexport function createMarketOrder(\n client: BaseSecureClient,\n request: PrepareMarketOrderRequest,\n): Promise<SignedOrder> {\n return prepareMarketOrder(client, request).then(completeWith(client.signer));\n}\n\nexport type PlaceMarketOrderError =\n | CreateMarketOrderError\n | PostOrderError\n | TimeoutError\n | TransactionFailedError;\nexport const PlaceMarketOrderError = makeErrorGuard(\n CancelledSigningError,\n InsufficientLiquidityError,\n RateLimitError,\n RequestRejectedError,\n SigningError,\n TimeoutError,\n TransactionFailedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Creates and posts a market order for the authenticated account.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link PlaceMarketOrderError}\n * Thrown on failure.\n *\n * @example\n * ```ts\n * const response = await placeMarketOrder(client, {\n * assetId: '0x0122…0000',\n * minPrice: '0.54',\n * shares: '180',\n * side: OrderSide.SELL,\n * });\n * ```\n */\nexport function placeMarketOrder(\n client: BaseSecureClient,\n request: PrepareMarketOrderRequest,\n): Promise<OrderResponse> {\n return createMarketOrder(client, request).then((order) =>\n postOrderWithAllowanceRecovery(client, order),\n );\n}\n\nexport type CreateLimitOrderError =\n | PrepareLimitOrderError\n | CancelledSigningError;\nexport const CreateLimitOrderError = makeErrorGuard(\n CancelledSigningError,\n RateLimitError,\n RequestRejectedError,\n SigningError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Creates a signed limit order for the authenticated account.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * GTD expirations must be at least 3 minutes in the future. Add your own\n * buffer for network latency and clock skew when deriving an expiration from\n * the current time.\n *\n * @throws {@link CreateLimitOrderError}\n * Thrown on failure.\n */\nexport function createLimitOrder(\n client: BaseSecureClient,\n request: PrepareLimitOrderRequest,\n): Promise<SignedOrder> {\n return prepareLimitOrder(client, request).then(completeWith(client.signer));\n}\n\nexport type PlaceLimitOrderError =\n | CreateLimitOrderError\n | PostOrderError\n | TimeoutError\n | TransactionFailedError;\nexport const PlaceLimitOrderError = makeErrorGuard(\n CancelledSigningError,\n RateLimitError,\n RequestRejectedError,\n SigningError,\n TimeoutError,\n TransactionFailedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Creates and posts a limit order for the authenticated account.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * GTD expirations must be at least 3 minutes in the future. Add your own\n * buffer for network latency and clock skew when deriving an expiration from\n * the current time.\n *\n * @throws {@link PlaceLimitOrderError}\n * Thrown on failure.\n */\nexport function placeLimitOrder(\n client: BaseSecureClient,\n request: PrepareLimitOrderRequest,\n): Promise<OrderResponse> {\n return createLimitOrder(client, request).then((order) =>\n postOrderWithAllowanceRecovery(client, order),\n );\n}\n\nasync function postOrderWithAllowanceRecovery(\n client: BaseSecureClient,\n order: SignedOrder,\n): Promise<OrderResponse> {\n const postSignedOrder = postOrder(client);\n\n try {\n return await postSignedOrder(order);\n } catch (error) {\n if (!isBalanceOrAllowanceRequestRejection(error)) {\n throw error;\n }\n\n const retryResponse = await approveOrderAndRetry(\n client,\n order,\n postSignedOrder,\n );\n\n if (retryResponse === undefined) {\n throw error;\n }\n\n return retryResponse;\n }\n}\n\nasync function approveOrderAndRetry(\n client: BaseSecureClient,\n order: SignedOrder,\n postSignedOrder: (order: SignedOrder) => Promise<OrderResponse>,\n): Promise<OrderResponse | undefined> {\n const approved = await ensureOrderApproval(client, order);\n\n return approved ? postSignedOrder(order) : undefined;\n}\n\nfunction isBalanceOrAllowanceRequestRejection(\n error: unknown,\n): error is RequestRejectedError {\n return (\n error instanceof RequestRejectedError &&\n error.status === 400 &&\n error.message.includes('allowance is not enough')\n );\n}\n\nasync function ensureOrderApproval(\n client: BaseSecureClient,\n order: SignedOrder,\n): Promise<boolean> {\n const assetId = order.tokenId;\n const metadata = await resolveOrderMarketMetadata(client, assetId);\n const exchangeAddress = resolveOrderExchangeAddress(\n client,\n assetId,\n metadata.negRisk,\n );\n const requiredAllowance = BigInt(order.makerAmount);\n const currentAllowance = await resolveCurrentAllowance(client, {\n assetId,\n spenderAddress: exchangeAddress,\n side: order.side,\n });\n\n if (currentAllowance >= requiredAllowance) {\n return false;\n }\n\n const handle =\n order.side === OrderSide.BUY\n ? await approveErc20(client, {\n amount: 'max',\n spenderAddress: exchangeAddress,\n tokenAddress: client.environment.contracts.collateralToken,\n })\n : await approveErc1155ForAll(client, {\n operatorAddress: exchangeAddress,\n tokenAddress: isV2PositionId(assetId)\n ? client.environment.contracts.positionManager\n : client.environment.contracts.conditionalTokens,\n });\n\n await handle.wait();\n\n await updateBalanceAllowance(client, {\n assetType: resolveBalanceAllowanceAssetType(order.side, assetId),\n tokenId: order.side === OrderSide.SELL ? assetId : undefined,\n });\n\n return true;\n}\n","import type { EvmSignature, PrivateKey } from '@kuest/types';\nimport { expectEvmSignature, invariant } from '@kuest/types';\nimport { encode } from '@msgpack/msgpack';\nimport { Hash, Secp256k1, Signature, TypedData } from 'ox';\nimport type { TypedDataPayload } from '../../types';\n\ntype MsgpackValue =\n | boolean\n | number\n | string\n | readonly MsgpackValue[]\n | { readonly [key: string]: MsgpackValue }\n | undefined;\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type PerpsSignedOp = readonly MsgpackValue[];\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type PerpsSignableValue = MsgpackValue;\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type SignPerpsOpRequest = {\n chainId: number;\n op: PerpsSignableValue;\n privateKey: PrivateKey;\n salt: number;\n timestamp: number;\n};\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type CreatePerpsOpTypedDataPayloadRequest = Omit<\n SignPerpsOpRequest,\n 'privateKey'\n>;\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport function signPerpsOp(request: SignPerpsOpRequest): EvmSignature {\n const payload = TypedData.getSignPayload(\n createPerpsOpTypedDataPayload(request),\n );\n return expectEvmSignature(\n Signature.toHex(\n Secp256k1.sign({ payload, privateKey: request.privateKey }),\n ),\n );\n}\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport function createPerpsOpTypedDataPayload(\n request: CreatePerpsOpTypedDataPayloadRequest,\n): TypedDataPayload {\n const domain = {\n chainId: request.chainId,\n name: 'Polymarket',\n version: '1',\n };\n\n return {\n domain,\n message: {\n data: Hash.keccak256(encode(compactSignableValue(request.op)), {\n as: 'Hex',\n }),\n salt: BigInt(request.salt),\n ts: BigInt(request.timestamp),\n },\n primaryType: 'Op',\n types: {\n EIP712Domain: TypedData.extractEip712DomainTypes(domain),\n Op: [\n { name: 'data', type: 'bytes32' },\n { name: 'salt', type: 'uint64' },\n { name: 'ts', type: 'uint64' },\n ],\n },\n };\n}\n\nfunction compactSignableValue(value: PerpsSignableValue): PerpsSignableValue {\n if (Array.isArray(value)) {\n return value.filter((item) => item !== undefined).map(compactSignableValue);\n }\n\n return value;\n}\n\n/** @internal */\nexport function randomUint32(): number {\n const [value] = crypto.getRandomValues(new Uint32Array(1));\n invariant(\n value !== undefined,\n 'Expected crypto.getRandomValues to return a salt.',\n );\n return value;\n}\n","import { EvmAddressSchema } from '@kuest/bindings';\nimport { z } from 'zod';\n\n/**\n * Builder account and additional fee applied to eligible order executions.\n *\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type PerpsBuilderTermsInput = {\n /** Address of the builder account receiving the fee. */\n readonly builderAddress: string;\n /** Exact non-negative decimal fraction of executed notional. */\n readonly feeRate: string;\n};\n\n/** @internal */\nexport const PerpsBuilderFeeRateInputSchema = z\n .string()\n .regex(\n /^\\d+(?:\\.\\d{1,28})?$/,\n 'Expected a non-negative fixed-point fee rate with at most 28 fractional digits.',\n );\n\n/** @internal */\nexport const PerpsBuilderTermsInputSchema = z.object({\n builderAddress: EvmAddressSchema,\n feeRate: PerpsBuilderFeeRateInputSchema,\n}) satisfies z.ZodType<PerpsBuilderTermsInput>;\n\n/** @internal Compares fixed-point rates exactly, preserving the selected string. */\nexport function minPerpsBuilderFeeRate(\n builderMax: string,\n approvedMax: string,\n): string {\n const [builderWhole, builderFraction = ''] = builderMax.split('.');\n const [approvedWhole, approvedFraction = ''] = approvedMax.split('.');\n const scale = Math.max(builderFraction.length, approvedFraction.length);\n const builder = BigInt(\n `${builderWhole}${builderFraction.padEnd(scale, '0')}`,\n );\n const approved = BigInt(\n `${approvedWhole}${approvedFraction.padEnd(scale, '0')}`,\n );\n return builder < approved ? builderMax : approvedMax;\n}\n","import { EvmAddressSchema } from '@kuest/bindings';\nimport {\n type PerpsBuilderApproval,\n PerpsBuilderApprovalSchema,\n type PerpsBuilderStatus,\n PerpsBuilderStatusSchema,\n} from '@kuest/bindings/perps';\nimport type { EvmSignature } from '@kuest/types';\nimport { z } from 'zod';\nimport type { BaseClient, BaseSecureClient } from '../../clients';\nimport {\n makeErrorGuard,\n RateLimitError,\n RequestAbortedError,\n RequestRejectedError,\n SigningError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n} from '../../errors';\nimport { parseUserInput } from '../../input';\nimport {\n parseRequestOptions,\n type RequestOptions,\n} from '../../request-options';\nimport type { TypedDataPayload } from '../../types';\nimport { PerpsBuilderFeeRateInputSchema } from '../../websockets/perps/actions/builder-terms';\nimport type { PerpsSession } from '../../websockets/perps/session';\nimport {\n createPerpsOpTypedDataPayload,\n randomUint32,\n} from '../../websockets/perps/signing';\nimport { snakeCase, toSearchParams } from '../params';\n\nconst FetchPerpsBuilderStatusRequestSchema = z.object({\n address: EvmAddressSchema,\n}) satisfies z.ZodType<FetchPerpsBuilderStatusRequest>;\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type FetchPerpsBuilderStatusRequest = {\n /** Builder account whose public availability should be checked. */\n address: string;\n};\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type FetchPerpsBuilderStatusError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport const FetchPerpsBuilderStatusError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Fetches public builder availability and the platform fee cap.\n *\n * @throws {@link FetchPerpsBuilderStatusError}\n * Thrown on failure.\n *\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport async function fetchPerpsBuilderStatus(\n client: BaseClient,\n request: FetchPerpsBuilderStatusRequest,\n options: RequestOptions = {},\n): Promise<PerpsBuilderStatus> {\n const requestOptions = parseRequestOptions(options);\n const params = parseUserInput(request, FetchPerpsBuilderStatusRequestSchema);\n return client.perps.get('/v1/info/builder', {\n schema: PerpsBuilderStatusSchema,\n ...requestOptions,\n params: toSearchParams(params, snakeCase()),\n });\n}\n\nconst ResolvedPerpsBuilderFeeSchema = z.strictObject({\n builder: EvmAddressSchema,\n maxFeeRate: PerpsBuilderFeeRateInputSchema,\n approvalVersion: z.number().int().positive().max(Number.MAX_SAFE_INTEGER),\n});\n\n/** @internal */\nexport const ApprovePerpsBuilderFeeRequestSchema = z.strictObject({\n builderAddress: EvmAddressSchema.optional(),\n maxFeeRate: PerpsBuilderFeeRateInputSchema,\n}) satisfies z.ZodType<ApprovePerpsBuilderFeeRequest>;\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type ApprovePerpsBuilderFeeRequest = {\n /** Builder account to authorize. Defaults to the session builder. */\n builderAddress?: string;\n /** Explicit maximum fee to authorize. Zero revokes permission. */\n maxFeeRate: string;\n};\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type ApprovePerpsBuilderFeeError =\n | RateLimitError\n | RequestRejectedError\n | SigningError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport const ApprovePerpsBuilderFeeError = makeErrorGuard(\n RateLimitError,\n RequestRejectedError,\n SigningError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Signs builder consent with the owner and returns the committed approval.\n *\n * @remarks\n * A zero maximum revokes permission for new orders, including zero-rate orders.\n * Reads this session's saved approval and submits its version plus one,\n * or 1 for the first approval. Consent is signed with\n * the parent client's owner signer, not the delegated session key.\n * Existing orders retain their saved terms. Conflicts and ambiguous submission\n * failures propagate without automatically signing or submitting again.\n *\n * @throws {@link ApprovePerpsBuilderFeeError}\n * Thrown on failure.\n *\n * @internal\n */\nexport async function approvePerpsBuilderFee(\n client: BaseSecureClient,\n session: PerpsSession,\n request: ApprovePerpsBuilderFeeRequest,\n): Promise<PerpsBuilderApproval> {\n const input = parseUserInput(request, ApprovePerpsBuilderFeeRequestSchema);\n if (input.builderAddress === undefined) {\n throw new UserInputError(\n 'A builder address is required when the session has no builder attribution.',\n );\n }\n const approvalVersion = nextPerpsBuilderApprovalVersion(\n await session.fetchBuilderApprovals({ builder: input.builderAddress }),\n input.builderAddress,\n );\n const params = parseUserInput(\n {\n builder: input.builderAddress,\n maxFeeRate: input.maxFeeRate,\n approvalVersion,\n },\n ResolvedPerpsBuilderFeeSchema,\n );\n const op: PerpsBuilderFeeApprovalOp = {\n ...params,\n chainId: client.environment.chainId,\n salt: randomUint32(),\n timestamp: Date.now(),\n };\n let signature: EvmSignature;\n try {\n signature = await client.signer.signTypedData(\n createPerpsBuilderFeeApprovalTypedData(op),\n );\n } catch (error) {\n throw SigningError.fromError(error, 'Could not sign builder consent');\n }\n\n return client.perps.post('/v1/account/builder-approvals', {\n schema: PerpsBuilderApprovalSchema,\n json: createPerpsBuilderFeeApprovalBody(op, signature),\n });\n}\n\n/** @internal Returns the saved version for the builder plus one, or 1. */\nexport function nextPerpsBuilderApprovalVersion(\n approvals: readonly PerpsBuilderApproval[],\n builder: string,\n): number {\n const previous = approvals.find(\n (approval) => approval.builder.toLowerCase() === builder.toLowerCase(),\n );\n return (previous?.approvalVersion ?? 0) + 1;\n}\n\n/** @internal */\nexport type PerpsBuilderFeeApprovalOp = {\n chainId: number;\n builder: string;\n maxFeeRate: string;\n approvalVersion: number;\n salt: number;\n timestamp: number;\n};\n\n/** @internal Typed data the owner signs to approve builder fees. */\nexport function createPerpsBuilderFeeApprovalTypedData(\n op: PerpsBuilderFeeApprovalOp,\n): TypedDataPayload {\n return createPerpsOpTypedDataPayload({\n chainId: op.chainId,\n op: ['approveBuilder', [op.builder, op.maxFeeRate, op.approvalVersion]],\n salt: op.salt,\n timestamp: op.timestamp,\n });\n}\n\n/** @internal Submission body carrying the signed approval values. */\nexport function createPerpsBuilderFeeApprovalBody(\n op: PerpsBuilderFeeApprovalOp,\n signature: EvmSignature,\n) {\n return {\n op: {\n type: 'approveBuilder',\n args: {\n builder: op.builder,\n max_fee_rate: op.maxFeeRate,\n approval_version: op.approvalVersion,\n },\n },\n salt: op.salt,\n sig: signature,\n ts: op.timestamp,\n };\n}\n\n/** @internal Owner-signing operation bound to the parent secure client. */\nexport type PerpsBuilderFeeApprover = (\n session: PerpsSession,\n request: ApprovePerpsBuilderFeeRequest,\n) => Promise<PerpsBuilderApproval>;\n","import { EvmAddressSchema } from '@kuest/bindings';\nimport {\n PerpsCredentialsResponseSchema,\n type PerpsPositionSnapshots,\n PerpsPositionSnapshotsSchema,\n} from '@kuest/bindings/perps';\nimport { z } from 'zod';\nimport type { BaseClient } from '../../clients';\nimport {\n makeErrorGuard,\n RateLimitError,\n RequestAbortedError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n} from '../../errors';\nimport { parseUserInput } from '../../input';\nimport {\n parseRequestOptions,\n type RequestOptions,\n} from '../../request-options';\nimport type { ServiceClient } from '../../ServiceClient';\n\n/** A historical fill key. Trade IDs remain decimal strings, including above 2^53.\n * @experimental This API may change in a breaking way in any release, including patch releases. */\nexport type PerpsPositionSnapshotFill = {\n instrumentId: number;\n tradeId: string;\n timestamp: number;\n};\n/** Select up to 20 active instruments and 4 historical fills, with at least one selection.\n * @experimental This API may change in a breaking way in any release, including patch releases. */\nexport type PerpsPositionSnapshotSelection = {\n activeInstrumentIds?: readonly number[];\n historyFills?: readonly PerpsPositionSnapshotFill[];\n};\n/** @experimental This API may change in a breaking way in any release, including patch releases. */\nexport type FetchPerpsPositionSnapshotsRequest =\n PerpsPositionSnapshotSelection & { address: string };\n\nconst SelectionShape = {\n activeInstrumentIds: z\n .array(z.number().int().min(0).max(4294967295))\n .max(20)\n .optional(),\n historyFills: z\n .array(\n z.strictObject({\n instrumentId: z.number().int().min(0).max(4294967295),\n tradeId: z\n .string()\n .regex(/^[0-9]{1,20}$/)\n .refine(\n (value) =>\n /^[0-9]{1,20}$/.test(value) &&\n BigInt(value) <= 18446744073709551615n,\n ),\n timestamp: z.number().int().min(0).max(18446744073709),\n }),\n )\n .max(4)\n .optional(),\n};\nfunction validSelection(selection: PerpsPositionSnapshotSelection): boolean {\n const active = selection.activeInstrumentIds ?? [];\n const history = selection.historyFills ?? [];\n return (\n active.length + history.length > 0 &&\n new Set(active).size === active.length &&\n history.every((fill) => /^[0-9]{1,20}$/.test(fill.tradeId)) &&\n new Set(\n history.map((fill) => `${fill.instrumentId}:${BigInt(fill.tradeId)}`),\n ).size === history.length\n );\n}\nconst SelectionSchema = z\n .strictObject(SelectionShape)\n .refine(\n validSelection,\n 'Select at least one item without duplicate instruments or fills',\n );\nconst RequestSchema = z\n .strictObject({ address: EvmAddressSchema, ...SelectionShape })\n .refine(\n validSelection,\n 'Select at least one item without duplicate instruments or fills',\n );\n\n/** @experimental This API may change in a breaking way in any release, including patch releases. */\nexport type FetchPerpsPositionSnapshotsError =\n | RateLimitError\n | RequestAbortedError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\n/** @experimental This API may change in a breaking way in any release, including patch releases. */\nexport const FetchPerpsPositionSnapshotsError = makeErrorGuard(\n RateLimitError,\n RequestAbortedError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/** Fetches ordered position snapshots anonymously, including on secure clients.\n * Use session.fetchPositionSnapshots for owner-only leverage and PnL percentage.\n * This direct batch read does not paginate or retry item statuses.\n * @throws {@link FetchPerpsPositionSnapshotsError} Thrown on failure.\n * @experimental This API may change in a breaking way in any release, including patch releases. */\nexport async function fetchPerpsPositionSnapshots(\n client: BaseClient,\n request: FetchPerpsPositionSnapshotsRequest,\n options: RequestOptions = {},\n): Promise<PerpsPositionSnapshots> {\n const requestOptions = parseRequestOptions(options);\n const parsed = parseUserInput(request, RequestSchema);\n return fetchSnapshots(client.perps, parsed, requestOptions);\n}\n\n/** @internal */\nexport async function fetchOwnPerpsPositionSnapshots(\n api: ServiceClient,\n request: PerpsPositionSnapshotSelection,\n): Promise<PerpsPositionSnapshots> {\n const selection = parseUserInput(request, SelectionSchema);\n const owner = await api.get('/v1/account/credentials', {\n schema: PerpsCredentialsResponseSchema,\n });\n return fetchSnapshots(api, { ...selection, address: owner.address });\n}\n\nasync function fetchSnapshots(\n api: ServiceClient,\n request: FetchPerpsPositionSnapshotsRequest,\n options: RequestOptions = {},\n): Promise<PerpsPositionSnapshots> {\n const requestOptions = parseRequestOptions(options);\n return api.postRead('/v1/info/position-snapshots', {\n schema: PerpsPositionSnapshotsSchema,\n ...requestOptions,\n json: {\n address: request.address,\n ...(request.activeInstrumentIds === undefined\n ? {}\n : { active_instrument_ids: request.activeInstrumentIds }),\n ...(request.historyFills === undefined\n ? {}\n : {\n history_fills: request.historyFills.map((fill) => ({\n instrument_id: fill.instrumentId,\n trade_id: fill.tradeId,\n timestamp: fill.timestamp,\n })),\n }),\n },\n });\n}\n","/** Independent rate-limit bucket affected by an order or cancellation. */\nexport type RateLimitBucket = 'order' | 'cancel';\n\n/**\n * Per-signer rate-limit state reported by order and cancellation responses.\n *\n * @remarks\n * Fields mirror the `Poly-RateLimit-*` response headers. `remaining` and\n * `reset` are normally reported together, while `tier` can be absent. These\n * fields remain optional because malformed header values are ignored;\n * `warning` is `false` whenever the response does not report warning mode.\n */\nexport type RateLimitUpdate = {\n /** Rate-limit bucket affected by the request, when that request declares one. */\n bucket?: RateLimitBucket;\n\n /**\n * Token balance remaining in the applicable rate-limit bucket after the\n * request was accounted for. Can be negative for tiers that allow a\n * negative cancellation balance. A value of `0` alone does not prove the\n * bucket is exhausted because it can also be reported when no active limit\n * applies; do not back off solely because this value is zero.\n */\n remaining?: number;\n\n /**\n * Unix timestamp, in seconds, when the current rate-limit wait period ends.\n */\n reset?: number;\n\n /** Rate-limit tier applied to the request. */\n tier?: string;\n\n /**\n * `true` when the limiter runs in warning mode and the request would have\n * been rejected under live enforcement. Monitor this to adjust request\n * patterns before enforcement begins.\n */\n warning: boolean;\n};\n\n/**\n * Listener invoked whenever a response reports per-signer rate-limit state.\n * The listener may return a promise; synchronous errors and promise rejections\n * are ignored.\n */\nexport type RateLimitUpdateListener = (update: RateLimitUpdate) => void;\n\n/**\n * Parses the `Poly-RateLimit-*` response headers, returning `undefined` when\n * the response carries none of them.\n */\nexport function parseRateLimitHeaders(\n headers: Headers,\n bucket?: RateLimitBucket,\n): RateLimitUpdate | undefined {\n const remaining = parseIntegerHeader(\n headers.get('Poly-RateLimit-Remaining'),\n /^-?\\d+$/,\n );\n const reset = parseIntegerHeader(\n headers.get('Poly-RateLimit-Reset'),\n /^\\d+$/,\n );\n const tier = parseTextHeader(headers.get('Poly-RateLimit-Tier'));\n const warning =\n headers.get('Poly-RateLimit-Warning')?.trim().toLowerCase() === 'true';\n\n if (\n remaining === undefined &&\n reset === undefined &&\n tier === undefined &&\n !warning\n ) {\n return undefined;\n }\n\n return {\n ...(bucket === undefined ? {} : { bucket }),\n remaining,\n reset,\n tier,\n warning,\n };\n}\n\nfunction parseIntegerHeader(\n value: string | null,\n format: RegExp,\n): number | undefined {\n const normalized = value?.trim();\n if (normalized === undefined || !format.test(normalized)) {\n return undefined;\n }\n\n const parsed = Number(normalized);\n return Number.isSafeInteger(parsed) ? parsed : undefined;\n}\n\nfunction parseTextHeader(value: string | null): string | undefined {\n if (value === null || value.trim() === '') {\n return undefined;\n }\n\n return value;\n}\n","import type { z } from 'zod';\nimport { UnexpectedResponseError } from './errors';\n\n/** Validates an already parsed response value. @internal */\nexport function parseResponse<T>(\n endpoint: string,\n schema: z.ZodType<T>,\n response: unknown,\n): T {\n try {\n const result = schema.safeParse(response);\n if (result.success) return result.data;\n throw UnexpectedResponseError.fromZodError(result.error, { endpoint });\n } catch (error) {\n if (error instanceof UnexpectedResponseError) throw error;\n throw new UnexpectedResponseError(\n `Could not validate response from ${endpoint}`,\n { cause: error },\n );\n }\n}\n","import { ErrorResponseSchema } from '@kuest/bindings';\nimport { OrderHeartbeatMismatchResponseSchema } from '@kuest/bindings/clob';\nimport ky, { type KyInstance } from 'ky';\nimport { z } from 'zod';\nimport {\n makeErrorGuard,\n OrderHeartbeatMismatchError,\n RateLimitError,\n RequestAbortedError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n} from './errors';\nimport { parseUserInput } from './input';\nimport {\n parseRateLimitHeaders,\n type RateLimitBucket,\n type RateLimitUpdate,\n type RateLimitUpdateListener,\n} from './rate-limit';\nimport {\n assertNotAborted,\n DEFAULT_REQUEST_TIMEOUT_MS,\n type Fetch,\n parseRequestOptions,\n type RequestOptions,\n withAbort,\n} from './request-options';\nimport { parseResponse } from './response';\n\nexport type ServiceRequestMethod = 'DELETE' | 'GET' | 'PATCH' | 'POST';\n\nexport type ServiceRequest = {\n signal?: AbortSignal;\n method: ServiceRequestMethod;\n path: string;\n body?: string;\n headers?: HeadersInit;\n json?: unknown;\n params?: URLSearchParams;\n};\n\nexport type RequestHeadersResolver = (\n request: ServiceRequest,\n) => Promise<HeadersInit>;\n\nexport type ServiceClientConfig = {\n fetch?: Fetch;\n /** Disable automatic replay of mutation requests. @internal */\n retryMutations?: false;\n /** Omit the endpoint root to create an empty client whose requests reject with UserInputError. */\n root?: string;\n headers?: HeadersInit;\n resolveHeaders?: RequestHeadersResolver;\n onRateLimitUpdate?: RateLimitUpdateListener;\n};\n\n/**\n * Timeout in milliseconds for each individual HTTP request attempt until response\n * headers arrive, or `false` to disable it. Defaults to 30 seconds.\n * This is not a total SDK method deadline: each permitted retry receives a fresh\n * timeout, so multiple requests, retries, and backoff can take longer in total.\n * Timeout errors are not retried. Excludes header resolution, hooks, retry waits,\n * and response body download/parsing.\n */\ntype ServiceClientTimeout = number | false;\n\n/** @experimental See {@link ServiceClient}. */\nexport type ServiceClientResponseType =\n | 'json'\n | 'blob'\n | 'arrayBuffer'\n | 'text'\n | 'empty'\n | 'raw';\n\n/** @experimental See {@link ServiceClient}. */\nexport type ServiceClientNonJsonResponseType = Exclude<\n ServiceClientResponseType,\n 'json'\n>;\n\n/** @experimental See {@link ServiceClient}. */\n// biome-ignore-start lint/suspicious/noConfusingVoidType: Empty mode represents Promise<void>.\nexport type ServiceClientResponse<TResponse extends ServiceClientResponseType> =\n TResponse extends 'blob'\n ? Blob\n : TResponse extends 'arrayBuffer'\n ? ArrayBuffer\n : TResponse extends 'text'\n ? string\n : TResponse extends 'empty'\n ? void\n : TResponse extends 'raw'\n ? Response\n : unknown;\n// biome-ignore-end lint/suspicious/noConfusingVoidType: Empty mode represents Promise<void>.\n\n/** @experimental See {@link ServiceClient}. */\nexport type ServiceClientJsonResponseOptions<T = unknown> = {\n responseType?: 'json';\n schema?: z.ZodType<T>;\n};\n\n/** @experimental See {@link ServiceClient}. */\nexport type ServiceClientNonJsonResponseOptions<\n TResponse extends\n ServiceClientNonJsonResponseType = ServiceClientNonJsonResponseType,\n> = {\n responseType: TResponse;\n schema?: never;\n};\n\n/** @experimental See {@link ServiceClient}. */\nexport type ServiceClientResponseOptions<T = unknown> =\n | ServiceClientJsonResponseOptions<T>\n | ServiceClientNonJsonResponseOptions;\n\n/** @experimental See {@link ServiceClient}. */\nexport type ServiceClientRequestOptions<T = unknown> =\n ServiceClientResponseOptions<T> & {\n signal?: AbortSignal;\n /** Rate-limit bucket supplied by the action that owns the request. @internal */\n rateLimitBucket?: RateLimitBucket;\n timeout?: ServiceClientTimeout;\n };\n\ntype ServiceClientMutationOptions<T = unknown> =\n ServiceClientRequestOptions<T> & {\n /** Disable transport retries for commands whose outcome may be uncertain. */\n retry?: false;\n };\n\n/** @experimental See {@link ServiceClient}. */\nexport type ServiceClientGetOptions<T = unknown> =\n ServiceClientRequestOptions<T> &\n RequestOptions & {\n headers?: HeadersInit;\n params?: URLSearchParams;\n };\n\ntype ServiceClientWorkflowGetOptions<T = unknown> =\n ServiceClientRequestOptions<T> & {\n headers?: HeadersInit;\n params?: URLSearchParams;\n };\n\n/** @experimental See {@link ServiceClient}. */\nexport type ServiceClientPostOptions<T = unknown> =\n ServiceClientMutationOptions<T> & {\n headers?: HeadersInit;\n json?: unknown;\n };\n\n/** @experimental See {@link ServiceClient}. */\nexport type ServiceClientPatchOptions<T = unknown> =\n ServiceClientMutationOptions<T> & {\n headers?: HeadersInit;\n json?: unknown;\n };\n\n/** @experimental See {@link ServiceClient}. */\nexport type ServiceClientDeleteOptions<T = unknown> =\n ServiceClientMutationOptions<T> & {\n headers?: HeadersInit;\n json?: unknown;\n params?: URLSearchParams;\n };\n\n/** @experimental See {@link ServiceClient}. */\nexport type ServiceClientRequestError =\n | RateLimitError\n | RequestAbortedError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\n/** @experimental See {@link ServiceClient}. */\nexport const ServiceClientRequestError = makeErrorGuard(\n RateLimitError,\n RequestAbortedError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\nconst ServiceClientResponseControlsSchema = z\n .object({\n responseType: z\n .enum(['json', 'blob', 'arrayBuffer', 'text', 'empty', 'raw'])\n .optional(),\n schema: z.unknown().optional(),\n })\n .refine(\n ({ responseType, schema }) =>\n schema === undefined ||\n responseType === undefined ||\n responseType === 'json',\n {\n path: ['schema'],\n message: 'Schemas are supported only with JSON responses',\n },\n );\n\nconst HTTP_DATE_MONTHS: readonly string[] = [\n 'Jan',\n 'Feb',\n 'Mar',\n 'Apr',\n 'May',\n 'Jun',\n 'Jul',\n 'Aug',\n 'Sep',\n 'Oct',\n 'Nov',\n 'Dec',\n];\nconst HTTP_DATE_MONTH = `(?<month>${HTTP_DATE_MONTHS.join('|')})`;\nconst HTTP_DATE_TIME = '(?<hour>\\\\d{2}):(?<minute>\\\\d{2}):(?<second>\\\\d{2})';\n// RFC 9110 section 5.6.7: recipients accept IMF-fixdate and the two obsolete\n// forms. The fields are read as UTC here rather than through `Date.parse`,\n// which treats the asctime form as local time and accepts strings such as\n// `120` or `10 Sep 2026` as dates.\nconst HTTP_DATE_PATTERNS = [\n new RegExp(\n `^(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun), (?<day>\\\\d{2}) ${HTTP_DATE_MONTH} (?<year>\\\\d{4}) ${HTTP_DATE_TIME} GMT$`,\n ),\n new RegExp(\n `^(?:Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), (?<day>\\\\d{2})-${HTTP_DATE_MONTH}-(?<year>\\\\d{2}) ${HTTP_DATE_TIME} GMT$`,\n ),\n new RegExp(\n `^(?:Mon|Tue|Wed|Thu|Fri|Sat|Sun) ${HTTP_DATE_MONTH} (?<day> \\\\d|\\\\d{2}) ${HTTP_DATE_TIME} (?<year>\\\\d{4})$`,\n ),\n];\nconst FIFTY_YEARS_MS = 50 * 365.25 * 24 * 60 * 60 * 1000;\n\n/**\n * Parses an RFC 9110 HTTP-date into epoch milliseconds, or undefined when the\n * value is not a well-formed date. A two-digit year more than fifty years in\n * the future is read as the most recent past year with those digits.\n */\nfunction parseHttpDate(value: string, now: number): number | undefined {\n let groups: Record<string, string | undefined> | undefined;\n for (const pattern of HTTP_DATE_PATTERNS) {\n groups = pattern.exec(value)?.groups;\n if (groups !== undefined) break;\n }\n if (groups === undefined) return undefined;\n const month = HTTP_DATE_MONTHS.indexOf(groups.month ?? '');\n if (month < 0) return undefined;\n const day = Number(groups.day);\n const hour = Number(groups.hour);\n const minute = Number(groups.minute);\n const second = Number(groups.second);\n if (hour > 23 || minute > 59 || second > 59) return undefined;\n const yearDigits = groups.year ?? '';\n let year = Number(yearDigits);\n if (yearDigits.length === 2) {\n year += Math.floor(new Date(now).getUTCFullYear() / 100) * 100;\n if (Date.UTC(year, month, day, hour, minute, second) - now > FIFTY_YEARS_MS)\n year -= 100;\n }\n const time = Date.UTC(year, month, day, hour, minute, second);\n const parsed = new Date(time);\n if (\n parsed.getUTCFullYear() !== year ||\n parsed.getUTCMonth() !== month ||\n parsed.getUTCDate() !== day\n )\n return undefined;\n return time;\n}\n\n/**\n * Sends requests and consumes and validates their responses.\n *\n * Raw mode resolves at response headers for every status, including 4xx and\n * 5xx responses, so callers can inspect error bodies. Status checks and body\n * consumption belong to the caller. The operation signal remains attached to\n * the underlying fetch.\n *\n * @experimental Upstream-only service, unconfigured for SDK. Breaking changes may occur in any release, including patch releases.\n */\nexport class ServiceClient {\n readonly #client?: KyInstance;\n readonly #headers?: HeadersInit;\n readonly #resolveHeaders?: RequestHeadersResolver;\n readonly #onRateLimitUpdate?: RateLimitUpdateListener;\n\n constructor(config: ServiceClientConfig) {\n const {\n root,\n headers,\n resolveHeaders,\n onRateLimitUpdate,\n fetch,\n retryMutations,\n } = config;\n if (root !== undefined) {\n this.#client = ky.create({\n prefixUrl: root,\n timeout: DEFAULT_REQUEST_TIMEOUT_MS,\n throwHttpErrors: false,\n ...(fetch === undefined ? {} : { fetch }),\n ...(retryMutations === false && { retry: { methods: ['get'] } }),\n });\n }\n this.#headers = headers;\n this.#resolveHeaders = resolveHeaders;\n this.#onRateLimitUpdate = onRateLimitUpdate;\n }\n\n /**\n * Sends a GET request. JSON is parsed by default; a schema validates and transforms it.\n * @throws {@link ServiceClientRequestError} Thrown on request, response or cancellation failure.\n */\n get<T = unknown>(\n path: string,\n options?: ServiceClientGetOptions<T> & ServiceClientJsonResponseOptions<T>,\n ): Promise<T>;\n get<TResponse extends ServiceClientNonJsonResponseType>(\n path: string,\n options: ServiceClientGetOptions &\n ServiceClientNonJsonResponseOptions<TResponse>,\n ): Promise<ServiceClientResponse<TResponse>>;\n get(path: string, options: ServiceClientGetOptions): Promise<unknown>;\n get(path: string, options: ServiceClientGetOptions = {}): Promise<unknown> {\n return this.#request('GET', path, options, true);\n }\n\n /**\n * Sends a workflow GET with its existing transport policy and no optional\n * data-read retries. Some command and authentication endpoints require GET.\n * @internal\n */\n getWorkflow<T = unknown>(\n path: string,\n options: ServiceClientWorkflowGetOptions<T> &\n ServiceClientJsonResponseOptions<T>,\n ): Promise<T>;\n /** @internal */\n getWorkflow<TResponse extends ServiceClientNonJsonResponseType>(\n path: string,\n options: ServiceClientWorkflowGetOptions &\n ServiceClientNonJsonResponseOptions<TResponse>,\n ): Promise<ServiceClientResponse<TResponse>>;\n /** @internal */\n getWorkflow(\n path: string,\n options: ServiceClientWorkflowGetOptions,\n ): Promise<unknown> {\n return this.#request('GET', path, options);\n }\n\n /**\n * Sends an idempotent JSON read whose endpoint requires POST.\n * Actions own the decision that replay is safe.\n * @internal\n */\n postRead<T = unknown>(\n path: string,\n options: ServiceClientPostOptions<T> &\n RequestOptions &\n ServiceClientJsonResponseOptions<T>,\n ): Promise<T>;\n postRead(\n path: string,\n options: ServiceClientPostOptions & RequestOptions,\n ): Promise<unknown> {\n return this.#request('POST', path, options, true);\n }\n\n /**\n * Sends a POST request. JSON is parsed by default; a schema validates and transforms it.\n * @throws {@link ServiceClientRequestError} Thrown on request, response or cancellation failure.\n */\n post<T = unknown>(\n path: string,\n options?: ServiceClientPostOptions<T> & ServiceClientJsonResponseOptions<T>,\n ): Promise<T>;\n post<TResponse extends ServiceClientNonJsonResponseType>(\n path: string,\n options: ServiceClientPostOptions &\n ServiceClientNonJsonResponseOptions<TResponse>,\n ): Promise<ServiceClientResponse<TResponse>>;\n post(path: string, options: ServiceClientPostOptions): Promise<unknown>;\n post(path: string, options: ServiceClientPostOptions = {}): Promise<unknown> {\n return this.#request('POST', path, options);\n }\n\n /**\n * Sends a PATCH request. JSON is parsed by default; a schema validates and transforms it.\n * @throws {@link ServiceClientRequestError} Thrown on request, response or cancellation failure.\n */\n patch<T = unknown>(\n path: string,\n options?: ServiceClientPatchOptions<T> &\n ServiceClientJsonResponseOptions<T>,\n ): Promise<T>;\n patch<TResponse extends ServiceClientNonJsonResponseType>(\n path: string,\n options: ServiceClientPatchOptions &\n ServiceClientNonJsonResponseOptions<TResponse>,\n ): Promise<ServiceClientResponse<TResponse>>;\n patch(path: string, options: ServiceClientPatchOptions): Promise<unknown>;\n patch(\n path: string,\n options: ServiceClientPatchOptions = {},\n ): Promise<unknown> {\n return this.#request('PATCH', path, options);\n }\n\n /**\n * Sends a DELETE request. JSON is parsed by default; a schema validates and transforms it.\n * @throws {@link ServiceClientRequestError} Thrown on request, response or cancellation failure.\n */\n del<T = unknown>(\n path: string,\n options?: ServiceClientDeleteOptions<T> &\n ServiceClientJsonResponseOptions<T>,\n ): Promise<T>;\n del<TResponse extends ServiceClientNonJsonResponseType>(\n path: string,\n options: ServiceClientDeleteOptions &\n ServiceClientNonJsonResponseOptions<TResponse>,\n ): Promise<ServiceClientResponse<TResponse>>;\n del(path: string, options: ServiceClientDeleteOptions): Promise<unknown>;\n del(\n path: string,\n options: ServiceClientDeleteOptions = {},\n ): Promise<unknown> {\n return this.#request('DELETE', path, options);\n }\n\n #normalizePath(path: string) {\n return path.startsWith('/') ? path.slice(1) : path;\n }\n\n async #request(\n method: ServiceRequestMethod,\n path: string,\n options: (\n | ServiceClientDeleteOptions\n | ServiceClientGetOptions\n | ServiceClientPatchOptions\n | ServiceClientPostOptions\n ) &\n RequestOptions,\n readOnly = false,\n ): Promise<unknown> {\n const signal = options.signal;\n try {\n assertNotAborted(signal);\n parseUserInput(\n { responseType: options.responseType, schema: options.schema },\n ServiceClientResponseControlsSchema,\n );\n const retries = readOnly\n ? parseRequestOptions(options).retries\n : undefined;\n const response = await this.#send(method, path, options, retries);\n assertNotAborted(signal);\n const rateLimit = parseRateLimitHeaders(\n response.headers,\n options.rateLimitBucket,\n );\n if (rateLimit !== undefined) this.#notifyRateLimitUpdate(rateLimit);\n // Raw callers inspect the status, headers and body themselves.\n if (options.responseType === 'raw') return response;\n if (!response.ok) {\n const retryAfter = this.#parseRetryAfterHeader(response);\n if (response.status === 429) {\n throw new RateLimitError(\n `Request to ${response.url} was rate limited`,\n { rateLimit, retryAfter },\n );\n }\n const {\n code,\n message,\n heartbeatId,\n retryAfter: retryAfterSeconds,\n } = await withAbort(this.#extractResponseError(response, path), signal);\n if (heartbeatId !== undefined) {\n throw new OrderHeartbeatMismatchError(heartbeatId);\n }\n throw new RequestRejectedError(message, {\n code,\n retryAfter: retryAfter ?? retryAfterSeconds,\n status: response.status,\n });\n }\n return await this.#consumeResponse(response, options);\n } catch (error) {\n assertNotAborted(signal);\n if (\n error instanceof RequestAbortedError ||\n error instanceof RateLimitError ||\n error instanceof RequestRejectedError ||\n error instanceof UnexpectedResponseError ||\n error instanceof UserInputError ||\n error instanceof TransportError\n )\n throw error;\n throw TransportError.fromError(error);\n }\n }\n\n async #consumeResponse(\n response: Response,\n options: ServiceClientRequestOptions,\n ): Promise<unknown> {\n const mode = options.responseType ?? 'json';\n assertNotAborted(options.signal);\n let value: unknown;\n try {\n switch (mode) {\n case 'blob':\n value = await withAbort(response.blob(), options.signal);\n break;\n case 'arrayBuffer':\n value = await withAbort(response.arrayBuffer(), options.signal);\n break;\n case 'text':\n value = await withAbort(response.text(), options.signal);\n break;\n case 'empty':\n await withAbort(response.arrayBuffer(), options.signal);\n value = undefined;\n break;\n case 'json':\n value = await withAbort(response.json(), options.signal);\n break;\n }\n } catch (error) {\n assertNotAborted(options.signal);\n if (error instanceof RequestAbortedError) throw error;\n const message =\n mode === 'json'\n ? `Received non-JSON response from ${response.url}`\n : `Received unreadable ${mode === 'blob' || mode === 'arrayBuffer' ? 'binary' : mode} response from ${response.url}`;\n throw new UnexpectedResponseError(message);\n }\n assertNotAborted(options.signal);\n if (mode === 'json' && options.schema !== undefined) {\n const parsed = parseResponse(response.url, options.schema, value);\n assertNotAborted(options.signal);\n return parsed;\n }\n return value;\n }\n\n async #send(\n method: ServiceRequestMethod,\n path: string,\n options:\n | ServiceClientDeleteOptions\n | ServiceClientGetOptions\n | ServiceClientPatchOptions\n | ServiceClientPostOptions,\n retries?: number,\n ): Promise<Response> {\n assertNotAborted(options.signal);\n const client = this.#client;\n if (client === undefined) {\n throw new UserInputError(\n 'This service client has no configured endpoint',\n );\n }\n const request = this.#createRequest(method, path, options);\n const resolvedHeaders = await withAbort(\n Promise.resolve(this.#resolveHeaders?.(request)),\n options.signal,\n );\n assertNotAborted(options.signal);\n const headers = this.#mergeHeaders(\n this.#headers,\n request.headers,\n resolvedHeaders,\n );\n\n if (request.body !== undefined && !headers.has('content-type')) {\n headers.set('content-type', 'application/json');\n }\n\n return withAbort(\n client(this.#normalizePath(path), {\n body: request.body,\n headers,\n method,\n searchParams: request.params,\n signal: options.signal,\n ...(options.timeout !== undefined && { timeout: options.timeout }),\n ...('retry' in options && options.retry === false && { retry: 0 }),\n ...(retries !== undefined && {\n // One transport-owned counter covers both network failures and 429s.\n // A new call (including each page) starts with a fresh counter.\n retry: { limit: retries, methods: [method.toLowerCase()] },\n hooks: {\n afterResponse: [\n (_request, _options, response, { retryCount }) => {\n if (\n options.responseType === 'raw' ||\n response.status !== 429 ||\n retryCount >= retries\n )\n return;\n const delaySeconds = this.#parseRetryAfterHeader(response) ?? 1;\n // Never retry earlier than the server asks. Leave long waits to callers.\n if (delaySeconds > 5) return;\n const rateLimit = parseRateLimitHeaders(\n response.headers,\n options.rateLimitBucket,\n );\n if (rateLimit !== undefined)\n this.#notifyRateLimitUpdate(rateLimit);\n return ky.retry({ delay: delaySeconds * 1000 });\n },\n ],\n },\n }),\n }),\n options.signal,\n );\n }\n\n #createRequest(\n method: ServiceRequestMethod,\n path: string,\n options:\n | ServiceClientDeleteOptions\n | ServiceClientGetOptions\n | ServiceClientPatchOptions\n | ServiceClientPostOptions,\n ): ServiceRequest {\n return {\n signal: options.signal,\n body: 'json' in options ? this.#serializeJson(options.json) : undefined,\n headers: options.headers,\n json: 'json' in options ? options.json : undefined,\n method,\n params: 'params' in options ? options.params : undefined,\n path,\n };\n }\n\n #serializeJson(json: unknown): string | undefined {\n if (json === undefined) {\n return undefined;\n }\n\n return JSON.stringify(json);\n }\n\n #mergeHeaders(...sources: Array<HeadersInit | undefined>): Headers {\n const headers = new Headers();\n\n for (const source of sources) {\n if (source === undefined) {\n continue;\n }\n\n for (const [key, value] of new Headers(source).entries()) {\n headers.set(key, value);\n }\n }\n\n return headers;\n }\n\n #notifyRateLimitUpdate(update: RateLimitUpdate): void {\n try {\n void Promise.resolve(this.#onRateLimitUpdate?.(update)).catch(\n () => undefined,\n );\n } catch {\n // A consumer-provided listener must never affect request handling.\n }\n }\n\n #parseRetryAfterHeader(response: Response): number | undefined {\n const value = response.headers.get('retry-after');\n\n if (value === null) {\n return undefined;\n }\n\n if (/^\\d+$/.test(value)) {\n return Number(value);\n }\n\n // RFC 9110 section 10.2.3 also allows an HTTP-date. Report whole seconds\n // from now, never rounding a future deadline down, and clamp past dates.\n const now = Date.now();\n const deadline = parseHttpDate(value, now);\n if (deadline === undefined) {\n return undefined;\n }\n\n return Math.max(0, Math.ceil((deadline - now) / 1000));\n }\n\n async #extractResponseError(\n response: Response,\n path: string,\n ): Promise<{\n message: string;\n code?: string;\n retryAfter?: number;\n heartbeatId?: string;\n }> {\n const contentType = response.headers.get('content-type')?.toLowerCase();\n\n if (contentType?.includes('application/json')) {\n const body: unknown = await response\n .clone()\n .json()\n .catch(() => undefined);\n if (\n response.status === 400 &&\n this.#normalizePath(path) === 'v1/heartbeats'\n ) {\n const parsed = OrderHeartbeatMismatchResponseSchema.safeParse(body);\n if (parsed.success) {\n return {\n message: parsed.data.error_msg,\n heartbeatId: parsed.data.heartbeat_id,\n };\n }\n }\n const parsed = ErrorResponseSchema.safeParse(body);\n if (parsed.success) {\n const { message, code, retryAfter } = parsed.data;\n const inferredCode =\n code === undefined &&\n response.status !== 400 &&\n /^[a-z][a-z0-9]*(?:_[a-z0-9]+)*$/.test(message)\n ? message\n : undefined;\n return {\n message: `${message} (${response.url})`,\n code: code ?? inferredCode,\n retryAfter,\n };\n }\n }\n\n if (contentType?.includes('text/plain')) {\n const text = await response\n .clone()\n .text()\n .then(\n (body) => body.trim(),\n () => '',\n );\n\n if (text) {\n return { message: `${text} (${response.url})` };\n }\n }\n\n const server = response.headers.get('server')?.toLowerCase();\n if (server?.includes('cloudflare')) {\n return {\n message: `Request to ${response.url} was blocked by Cloudflare with status ${response.status}`,\n };\n }\n\n if (\n contentType?.includes('text/html') ||\n contentType?.includes('application/xhtml+xml')\n ) {\n return {\n message: `Request to ${response.url} failed with status ${response.status} and an unexpected HTML response body`,\n };\n }\n\n return {\n message: `Request to ${response.url} failed with status ${response.status} and unreadable response body`,\n };\n }\n}\n","import { setNonBlockingInterval } from '@kuest/types';\nimport type { WebSocketHeartbeat } from './lifecycle';\n\nconst CLOB_HEARTBEAT_INTERVAL_MS = 10_000;\nconst CLOB_HEARTBEAT_STALE_MS = 30_000;\nconst RTDS_HEARTBEAT_INTERVAL_MS = 5_000;\nconst RTDS_HEARTBEAT_STALE_MS = 10 * 60_000;\nconst SPORTS_HEARTBEAT_STALE_MS = 30_000;\nconst PERPS_HEARTBEAT_INTERVAL_MS = 25_000;\nconst PERPS_HEARTBEAT_STALE_MS = 65_000;\n\nexport class ClobWebSocketHeartbeat implements WebSocketHeartbeat {\n #lastPongAt = 0;\n #timer: ReturnType<typeof setInterval> | undefined;\n\n start(send: (message: string) => void): void {\n this.stop();\n this.#lastPongAt = Date.now();\n this.#timer = setNonBlockingInterval(() => {\n send('PING');\n }, CLOB_HEARTBEAT_INTERVAL_MS);\n }\n\n handleMessage(message: string): boolean {\n if (message !== 'PONG') return false;\n this.#lastPongAt = Date.now();\n return true;\n }\n\n isStale(now: number): boolean {\n return now - this.#lastPongAt > CLOB_HEARTBEAT_STALE_MS;\n }\n\n stop(): void {\n if (this.#timer !== undefined) {\n clearInterval(this.#timer);\n this.#timer = undefined;\n }\n }\n}\n\nexport class RtdsWebSocketHeartbeat implements WebSocketHeartbeat {\n #lastMessageAt = 0;\n #timer: ReturnType<typeof setInterval> | undefined;\n\n start(send: (message: string) => void): void {\n this.stop();\n this.#lastMessageAt = Date.now();\n this.#timer = setNonBlockingInterval(() => {\n send('PING');\n }, RTDS_HEARTBEAT_INTERVAL_MS);\n }\n\n handleMessage(): boolean {\n this.#lastMessageAt = Date.now();\n return false;\n }\n\n isStale(now: number): boolean {\n return now - this.#lastMessageAt > RTDS_HEARTBEAT_STALE_MS;\n }\n\n stop(): void {\n if (this.#timer !== undefined) {\n clearInterval(this.#timer);\n this.#timer = undefined;\n }\n }\n}\n\nexport class SportsWebSocketHeartbeat implements WebSocketHeartbeat {\n #lastPingAt = 0;\n #send: ((message: string) => void) | undefined;\n\n start(send: (message: string) => void): void {\n this.#lastPingAt = Date.now();\n this.#send = send;\n }\n\n stop(): void {\n this.#send = undefined;\n }\n\n handleMessage(message: string): boolean {\n if (message !== 'ping') return false;\n this.#lastPingAt = Date.now();\n this.#send?.('pong');\n return true;\n }\n\n isStale(now: number): boolean {\n return now - this.#lastPingAt > SPORTS_HEARTBEAT_STALE_MS;\n }\n}\n\nexport class PerpsWebSocketHeartbeat implements WebSocketHeartbeat {\n #lastMessageAt = 0;\n #timer: ReturnType<typeof setInterval> | undefined;\n\n start(send: (message: string) => void): void {\n this.stop();\n this.#lastMessageAt = Date.now();\n this.#timer = setNonBlockingInterval(() => {\n send(JSON.stringify({ id: 0, req: 'post', op: { type: 'ping' } }));\n }, PERPS_HEARTBEAT_INTERVAL_MS);\n }\n\n handleMessage(): boolean {\n this.#lastMessageAt = Date.now();\n return false;\n }\n\n isStale(now: number): boolean {\n return now - this.#lastMessageAt > PERPS_HEARTBEAT_STALE_MS;\n }\n\n stop(): void {\n if (this.#timer !== undefined) {\n clearInterval(this.#timer);\n this.#timer = undefined;\n }\n }\n}\n\nexport class PolyboltWebSocketHeartbeat implements WebSocketHeartbeat {\n #lastMessageAt = 0;\n #timer: ReturnType<typeof setInterval> | undefined;\n start(send: (message: string) => void): void {\n this.stop();\n this.#lastMessageAt = Date.now();\n this.#timer = setNonBlockingInterval(() => send('{\"op\":\"ping\"}'), 30_000);\n }\n handleMessage(_message: string): boolean {\n this.#lastMessageAt = Date.now();\n return false;\n }\n isStale(now: number): boolean {\n return now - this.#lastMessageAt >= 90_000;\n }\n stop(): void {\n clearInterval(this.#timer);\n this.#timer = undefined;\n }\n}\n","import { setNonBlockingInterval, setNonBlockingTimeout } from '@kuest/types';\nimport {\n TransportError,\n type WebSocketCloseCode,\n WebSocketKnownCloseCode,\n} from '../errors';\n\nexport type WebSocketHeartbeat = {\n handleMessage(message: string): boolean;\n isStale(now: number): boolean;\n start(send: (message: string) => void): void;\n stop(): void;\n};\n\nconst HEARTBEAT_WATCHDOG_INTERVAL_MS = 5_000;\nconst RECONNECT_BASE_DELAY_MS = 250;\nconst RECONNECT_MAX_DELAY_MS = 30_000;\n\nexport type ScheduleReconnectOptions = {\n delayPolicy?: (attempt: number) => number;\n shouldReconnect: () => boolean;\n reconnect: () => Promise<unknown>;\n};\n\nexport type WebSocketCloseInfo = {\n code: WebSocketCloseCode;\n reason: string;\n};\n\nexport type WebSocketConnectionOptions<TContext = undefined> = {\n headers?: Record<string, string>;\n onConnectionLost: (info: WebSocketCloseInfo) => void;\n onError: () => void;\n onMessage: (message: unknown) => void;\n onOpen: (context: TContext) => void;\n prepare?: () => TContext | Promise<TContext>;\n url: string;\n};\n\nexport type WebSocketConnectionResult = {\n reusedOpenSocket: boolean;\n};\n\nexport type WebSocketConnectionConstructorOptions = {\n heartbeat?: WebSocketHeartbeat;\n connectTimeoutMs?: number;\n closeTimeoutMs?: number;\n};\n\nexport class ReconnectScheduler {\n #timer: ReturnType<typeof setTimeout> | undefined;\n #attempt = 0;\n\n get isScheduled(): boolean {\n return this.#timer !== undefined;\n }\n\n schedule(options: ScheduleReconnectOptions): void {\n if (this.#timer !== undefined || !options.shouldReconnect()) {\n return;\n }\n\n const delay =\n options.delayPolicy?.(this.#attempt) ??\n reconnectDelay(this.#attempt, {\n baseMs: RECONNECT_BASE_DELAY_MS,\n maxMs: RECONNECT_MAX_DELAY_MS,\n });\n this.#attempt += 1;\n this.#timer = setNonBlockingTimeout(() => {\n this.#timer = undefined;\n void this.#reconnect(options);\n }, delay);\n }\n\n stop(): void {\n if (this.#timer !== undefined) {\n clearTimeout(this.#timer);\n this.#timer = undefined;\n }\n }\n\n resetBackoff(): void {\n this.#attempt = 0;\n this.stop();\n }\n\n async #reconnect(options: ScheduleReconnectOptions): Promise<void> {\n if (!options.shouldReconnect()) return;\n try {\n await options.reconnect();\n } catch {\n this.schedule(options);\n }\n }\n}\n\nexport class WebSocketConnection {\n readonly #heartbeat: WebSocketHeartbeat | undefined;\n readonly #connectTimeoutMs: number | undefined;\n readonly #closeTimeoutMs: number | undefined;\n #cancelOpen: (() => void) | undefined;\n #socket: WebSocket | undefined;\n #connecting: Promise<WebSocketConnectionResult> | undefined;\n #watchdog: ReturnType<typeof setInterval> | undefined;\n\n constructor(options: WebSocketConnectionConstructorOptions = {}) {\n this.#heartbeat = options.heartbeat;\n this.#connectTimeoutMs = options.connectTimeoutMs;\n this.#closeTimeoutMs = options.closeTimeoutMs;\n }\n\n connect<TContext = undefined>(\n options: WebSocketConnectionOptions<TContext>,\n ): Promise<WebSocketConnectionResult> {\n const socket = this.#socket;\n if (socket?.readyState === WebSocket.OPEN) {\n return Promise.resolve({ reusedOpenSocket: true });\n }\n this.#clearCurrentSocket();\n if (this.#connecting !== undefined) return this.#connecting;\n\n const connecting = this.#open(options)\n .then(() => ({ reusedOpenSocket: false }))\n .catch((error: unknown) => {\n if (this.#connecting === connecting) {\n this.#connecting = undefined;\n }\n throw error;\n });\n this.#connecting = connecting;\n return connecting;\n }\n\n send(message: unknown): boolean {\n return this.#sendRaw(JSON.stringify(message));\n }\n\n #sendRaw(message: string): boolean {\n // Reconnects and shutdown can race with protocol updates; callers use the\n // boolean result only when they need to know whether the frame was sent.\n if (this.#socket?.readyState !== WebSocket.OPEN) return false;\n this.#socket.send(message);\n return true;\n }\n\n async close(): Promise<void> {\n this.#cancelOpen?.();\n const socket = await this.#takeCurrent();\n this.#stopHeartbeat();\n if (socket === undefined || socket.readyState === WebSocket.CLOSED) return;\n\n await new Promise<void>((resolve) => {\n const timer =\n this.#closeTimeoutMs === undefined\n ? undefined\n : setNonBlockingTimeout(resolve, this.#closeTimeoutMs);\n socket.addEventListener(\n 'close',\n () => {\n clearTimeout(timer);\n resolve();\n },\n { once: true },\n );\n if (socket.readyState !== WebSocket.CLOSING) {\n socket.close();\n }\n });\n }\n\n async #open<TContext>(\n options: WebSocketConnectionOptions<TContext>,\n ): Promise<WebSocket> {\n const context = await options.prepare?.();\n\n return new Promise<WebSocket>((resolve, reject) => {\n const socket = createWebSocket(options.url, options.headers);\n let timer: ReturnType<typeof setTimeout> | undefined;\n const cancel = () => {\n socket.removeEventListener('open', onOpen);\n clearTimeout(timer);\n this.#cancelOpen = undefined;\n reject(new TransportError('WebSocket connection did not open.'));\n socket.close();\n };\n\n const onOpen = () => {\n clearTimeout(timer);\n this.#cancelOpen = undefined;\n socket.removeEventListener('error', onOpenError);\n this.#markOpen(socket);\n this.#startHeartbeat();\n options.onOpen(context as TContext);\n resolve(socket);\n };\n const onOpenError = (event: Event) => {\n clearTimeout(timer);\n this.#cancelOpen = undefined;\n socket.removeEventListener('open', onOpen);\n reject(\n new TransportError(`WebSocket connection failed: ${options.url}`, {\n cause: event,\n }),\n );\n };\n\n socket.addEventListener('open', onOpen, { once: true });\n if (this.#connectTimeoutMs !== undefined) {\n this.#cancelOpen = cancel;\n timer = setNonBlockingTimeout(cancel, this.#connectTimeoutMs);\n }\n socket.addEventListener('error', onOpenError, { once: true });\n socket.addEventListener('message', (event) => {\n if (this.#socket !== socket) return;\n const message = String(event.data);\n if (this.#heartbeat?.handleMessage(message)) return;\n\n let raw: unknown;\n try {\n raw = JSON.parse(message);\n } catch {\n return;\n }\n options.onMessage(raw);\n });\n socket.addEventListener('close', (event) => {\n if (this.#socket !== socket) return;\n this.#clearCurrentSocket();\n options.onConnectionLost({\n code: event.code || WebSocketKnownCloseCode.NoStatusReceived,\n reason: event.reason ?? '',\n });\n });\n socket.addEventListener('error', () => options.onError());\n });\n }\n\n #markOpen(socket: WebSocket): void {\n this.#socket = socket;\n this.#connecting = undefined;\n }\n\n #clearCurrentSocket(): void {\n this.#stopHeartbeat();\n this.#socket = undefined;\n }\n\n #startHeartbeat(): void {\n this.#stopHeartbeat();\n const heartbeat = this.#heartbeat;\n if (heartbeat === undefined) return;\n\n heartbeat.start((message) => this.#sendRaw(message));\n this.#watchdog = setNonBlockingInterval(() => {\n if (!heartbeat.isStale(Date.now())) return;\n const socket = this.#socket;\n if (socket?.readyState === WebSocket.OPEN) {\n // Let the normal close path reconnect and resubscribe active handles.\n socket.close();\n }\n }, HEARTBEAT_WATCHDOG_INTERVAL_MS);\n }\n\n #stopHeartbeat(): void {\n if (this.#watchdog !== undefined) {\n clearInterval(this.#watchdog);\n this.#watchdog = undefined;\n }\n this.#heartbeat?.stop();\n }\n\n async #takeCurrent(): Promise<WebSocket | undefined> {\n const socket = this.#socket;\n const connecting = this.#connecting;\n\n this.#socket = undefined;\n this.#connecting = undefined;\n\n if (socket !== undefined) return socket;\n return connecting?.then(\n () => this.#socket,\n () => undefined,\n );\n }\n}\n\nfunction createWebSocket(\n url: string,\n headers: Record<string, string> | undefined,\n): WebSocket {\n if (headers === undefined) return new WebSocket(url);\n\n try {\n const socket: unknown = Reflect.construct(WebSocket, [url, { headers }]);\n if (socket instanceof WebSocket) return socket;\n } catch (cause) {\n throw new TransportError(\n 'WebSocket headers require a header-capable WebSocket implementation.',\n { cause },\n );\n }\n\n throw new TransportError(\n 'WebSocket headers require a header-capable WebSocket implementation.',\n );\n}\n\ntype ReconnectDelayOptions = {\n baseMs: number;\n maxMs: number;\n};\n\nfunction reconnectDelay(\n attempt: number,\n options: ReconnectDelayOptions,\n): number {\n const exponentialDelay = Math.min(\n options.baseMs * 2 ** attempt,\n options.maxMs,\n );\n return Math.random() * exponentialDelay;\n}\n","import { toPaginationCursor } from '@kuest/bindings';\nimport type { PerpsInternalTransfer } from '@kuest/bindings/perps';\nimport { UnexpectedResponseError } from '../../../errors';\nimport type { Page } from '../../../pagination';\n\n/** @internal */\nexport type PerpsInternalTransfersCursorState = {\n kind: 'perpsInternalTransfers';\n startTimestamp: number;\n endTimestamp: number;\n seenKeys: string[];\n};\n\n/**\n * Keeps the entire final millisecond in the next query because transfer\n * timestamps lose submillisecond precision when normalized. The overlapping\n * records are retained in the cursor for deduplication.\n *\n * @internal\n */\nexport async function toPerpsInternalTransfersPage(\n transfers: PerpsInternalTransfer[],\n hasMore: boolean,\n state: PerpsInternalTransfersCursorState,\n readBoundary: (bounds: {\n startTimestamp: number;\n endTimestamp: number;\n }) => Promise<{ transfers: PerpsInternalTransfer[]; hasMore: boolean }>,\n): Promise<Page<PerpsInternalTransfer[]>> {\n const seenKeys = new Set(state.seenKeys);\n let items = transfers.filter(\n (transfer) => !seenKeys.has(String(transfer.transferId)),\n );\n if (!hasMore) return { items, hasMore: false };\n\n const last = transfers.at(-1);\n if (last === undefined) {\n throw new UnexpectedResponseError(\n 'Perps internal-transfer history reported more records without a continuation timestamp.',\n );\n }\n let endTimestamp = Math.min(state.endTimestamp, last.createdTimestamp + 1);\n let continuationTransfers = transfers;\n if (endTimestamp === state.endTimestamp && items.length === 0) {\n // The extra row may be older than this interval. Prove that the entire\n // inclusive millisecond is complete before moving past its hidden fractions.\n const boundary = await readBoundary({\n startTimestamp: Math.max(state.startTimestamp, state.endTimestamp - 1),\n endTimestamp: state.endTimestamp,\n });\n if (boundary.hasMore) {\n throw new UnexpectedResponseError(\n 'Perps internal-transfer history cannot continue within a full millisecond without skipping records.',\n );\n }\n items = boundary.transfers.filter(\n (transfer) => !seenKeys.has(String(transfer.transferId)),\n );\n endTimestamp = state.endTimestamp - 1;\n if (endTimestamp < state.startTimestamp) return { items, hasMore: false };\n continuationTransfers = boundary.transfers;\n }\n\n // The inclusive upper bound may also repeat a record at the exact start\n // of the following millisecond. Keep that record in the overlap too.\n const nextSeenKeys = new Set(\n endTimestamp === state.endTimestamp ? state.seenKeys : [],\n );\n for (const transfer of continuationTransfers) {\n if (transfer.createdTimestamp >= endTimestamp - 1) {\n nextSeenKeys.add(String(transfer.transferId));\n }\n }\n return {\n items,\n hasMore: true,\n nextCursor: toPaginationCursor(\n btoa(\n JSON.stringify({\n ...state,\n endTimestamp,\n seenKeys: Array.from(nextSeenKeys),\n }),\n ),\n ),\n };\n}\n","import {\n type PaginationCursor,\n PaginationCursorSchema,\n TxHashSchema,\n toPaginationCursor,\n} from '@kuest/bindings';\nimport {\n FetchPerpsAccountConfigResponseSchema,\n FetchPerpsAccountStatsResponseSchema,\n FetchPerpsAutoCancelStatusResponseSchema,\n FetchPerpsBalancesResponseSchema,\n FetchPerpsOpenOrdersResponseSchema,\n FetchPerpsOrdersResponseSchema,\n FetchPerpsPortfolioResponseSchema,\n FetchPerpsUnreadNotificationsCountResponseSchema,\n ListPerpsDepositsResponseSchema,\n ListPerpsEquityHistoryResponseSchema,\n ListPerpsFillsResponseSchema,\n ListPerpsFundingPaymentsResponseSchema,\n ListPerpsInternalTransfersResponseSchema,\n ListPerpsNotificationsResponseSchema,\n ListPerpsPnlHistoryResponseSchema,\n ListPerpsWithdrawalsResponseSchema,\n MarkPerpsNotificationsReadResponseSchema,\n type PerpsAccountConfig,\n type PerpsAccountFill,\n type PerpsAccountFundingPayment,\n type PerpsAccountStats,\n type PerpsAutoCancelStatus,\n type PerpsBalance,\n PerpsClientOrderIdSchema,\n type PerpsDeposit,\n type PerpsDepositStatus,\n PerpsDepositStatusSchema,\n type PerpsEquityPoint,\n type PerpsInstrumentId,\n PerpsInstrumentIdSchema,\n type PerpsInternalTransfer,\n type PerpsNotificationEntry,\n type PerpsOrder,\n PerpsOrderIdSchema,\n type PerpsPnlInterval,\n PerpsPnlIntervalSchema,\n type PerpsPnlPoint,\n type PerpsPortfolio,\n type PerpsSortDirection,\n PerpsSortDirectionSchema,\n type PerpsWithdrawal,\n type PerpsWithdrawalStatus,\n PerpsWithdrawalStatusSchema,\n} from '@kuest/bindings/perps';\nimport { invariant } from '@kuest/types';\nimport { z } from 'zod';\nimport { snakeCase, toSearchParams } from '../../../actions/params';\nimport { RequestRejectedError } from '../../../errors';\nimport { parseUserInput } from '../../../input';\nimport {\n decodeCursorState,\n encodeCursorState,\n type Page,\n type Paginated,\n paginate,\n} from '../../../pagination';\nimport type { ServiceClient } from '../../../ServiceClient';\nimport {\n type PerpsInternalTransfersCursorState,\n toPerpsInternalTransfersPage,\n} from './internal-transfer-history';\n\nconst ONE_DAY_MS = 24 * 60 * 60 * 1000;\nconst NINETY_DAYS_MS = 90 * ONE_DAY_MS;\n\nconst TimestampInputSchema = z.number().int().nonnegative();\n\ntype PerpsHistoryParams = {\n startTimestamp: number;\n endTimestamp: number;\n instrumentId?: PerpsInstrumentId;\n depositStatus?: z.output<typeof PerpsDepositStatusSchema>;\n withdrawalStatus?: z.output<typeof PerpsWithdrawalStatusSchema>;\n hash?: z.output<typeof TxHashSchema>;\n};\n\ntype PerpsIntervalHistoryParams = PerpsHistoryParams & {\n interval: z.output<typeof PerpsPnlIntervalSchema>;\n};\n\nconst PerpsHistoryRequestBaseSchema = z.object({\n start: TimestampInputSchema.optional(),\n end: TimestampInputSchema.optional(),\n});\n\nconst PerpsIntervalHistoryRequestBaseSchema = z.object({\n interval: PerpsPnlIntervalSchema,\n start: TimestampInputSchema,\n end: TimestampInputSchema.optional(),\n});\n\nconst PerpsDescendingAccountHistoryKindSchema = z.enum([\n 'perpsFundingPayments',\n 'perpsDeposits',\n 'perpsWithdrawals',\n]);\n\nconst PerpsAscendingAccountHistoryKindSchema = z.enum([\n 'perpsEquityHistory',\n 'perpsPnlHistory',\n]);\n\nconst PerpsDescendingAccountCursorStateSchema = z.object({\n kind: PerpsDescendingAccountHistoryKindSchema,\n startTimestamp: TimestampInputSchema,\n endTimestamp: TimestampInputSchema,\n instrumentId: PerpsInstrumentIdSchema.optional(),\n depositStatus: PerpsDepositStatusSchema.optional(),\n withdrawalStatus: PerpsWithdrawalStatusSchema.optional(),\n hash: TxHashSchema.optional(),\n seenKeys: z.array(z.string()),\n});\n\nconst PerpsAscendingAccountCursorStateSchema = z.object({\n kind: PerpsAscendingAccountHistoryKindSchema,\n startTimestamp: TimestampInputSchema,\n endTimestamp: TimestampInputSchema,\n interval: PerpsPnlIntervalSchema,\n});\n\ntype PerpsDescendingAccountCursorState = z.infer<\n typeof PerpsDescendingAccountCursorStateSchema\n>;\ntype PerpsAscendingAccountCursorState = z.infer<\n typeof PerpsAscendingAccountCursorStateSchema\n>;\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport async function fetchPerpsBalances(\n api: ServiceClient,\n): Promise<PerpsBalance[]> {\n return await api.get('/v1/account/balances', {\n schema: FetchPerpsBalancesResponseSchema,\n });\n}\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport async function fetchPerpsPortfolio(\n api: ServiceClient,\n): Promise<PerpsPortfolio> {\n return await api.get('/v1/account/portfolio', {\n schema: FetchPerpsPortfolioResponseSchema,\n });\n}\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport async function fetchPerpsStats(\n api: ServiceClient,\n): Promise<PerpsAccountStats> {\n return await api.get('/v1/account/stats', {\n schema: FetchPerpsAccountStatsResponseSchema,\n });\n}\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport async function fetchPerpsAutoCancelStatus(\n api: ServiceClient,\n): Promise<PerpsAutoCancelStatus> {\n return await api.get('/v1/account/auto-cancel', {\n schema: FetchPerpsAutoCancelStatusResponseSchema,\n });\n}\n\nconst FetchPerpsAccountConfigRequestSchema = z\n .object({\n instrumentId: PerpsInstrumentIdSchema.optional(),\n })\n .default({}) satisfies z.ZodType<FetchPerpsAccountConfigRequest>;\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type FetchPerpsAccountConfigRequest = {\n /** Optional Perps instrument identifier filter. */\n instrumentId?: number;\n};\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport async function fetchPerpsAccountConfig(\n api: ServiceClient,\n request?: FetchPerpsAccountConfigRequest,\n): Promise<PerpsAccountConfig[]> {\n const params = parseUserInput(request, FetchPerpsAccountConfigRequestSchema);\n return await api.get('/v1/account/config', {\n schema: FetchPerpsAccountConfigResponseSchema,\n params: toPerpsSearchParams(params),\n });\n}\n\nconst FetchPerpsOpenOrdersRequestSchema = z\n .object({\n instrumentId: PerpsInstrumentIdSchema.optional(),\n })\n .default({}) satisfies z.ZodType<FetchPerpsOpenOrdersRequest>;\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type FetchPerpsOpenOrdersRequest = {\n /** Optional Perps instrument identifier filter. */\n instrumentId?: number;\n};\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport async function fetchPerpsOpenOrders(\n api: ServiceClient,\n request?: FetchPerpsOpenOrdersRequest,\n): Promise<PerpsOrder[]> {\n const params = parseUserInput(request, FetchPerpsOpenOrdersRequestSchema);\n return await api.get('/v1/account/open-orders', {\n schema: FetchPerpsOpenOrdersResponseSchema,\n params: toPerpsSearchParams(params),\n });\n}\n\nconst FetchPerpsOrdersRequestInputSchema = z\n .object({\n orderId: PerpsOrderIdSchema.optional(),\n clientOrderId: PerpsClientOrderIdSchema.optional(),\n instrumentId: PerpsInstrumentIdSchema.optional(),\n start: TimestampInputSchema.optional(),\n end: TimestampInputSchema.optional(),\n })\n .default({}) satisfies z.ZodType<FetchPerpsOrdersRequest>;\n\nconst FetchPerpsOrdersRequestSchema =\n FetchPerpsOrdersRequestInputSchema.transform(\n ({ end, start, ...request }) => ({\n ...request,\n endTimestamp: end,\n startTimestamp: start,\n }),\n );\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type FetchPerpsOrdersRequest = {\n /** Optional order identifier filter. */\n orderId?: number;\n /** Optional caller-supplied idempotency identifier filter. */\n clientOrderId?: string;\n /** Optional Perps instrument identifier filter. */\n instrumentId?: number;\n /** Inclusive start timestamp in milliseconds. */\n start?: number;\n /** Inclusive end timestamp in milliseconds. */\n end?: number;\n};\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport async function fetchPerpsOrders(\n api: ServiceClient,\n request?: FetchPerpsOrdersRequest,\n): Promise<PerpsOrder[]> {\n const params = parseUserInput(request, FetchPerpsOrdersRequestSchema);\n return await api.get('/v1/account/orders', {\n schema: FetchPerpsOrdersResponseSchema,\n params: toPerpsSearchParams(params),\n });\n}\n\nconst ListPerpsFillsRequestSchema = z.object({\n instrumentId: z.number().int().min(0).max(4_294_967_295).optional(),\n start: TimestampInputSchema.optional(),\n end: TimestampInputSchema.optional(),\n sort: PerpsSortDirectionSchema.optional(),\n cursor: PaginationCursorSchema.optional(),\n}) satisfies z.ZodType<ListPerpsFillsRequest>;\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type ListPerpsFillsRequest = {\n /** Only fills for this instrument; an unsigned 32-bit identifier. */\n instrumentId?: number;\n /** Inclusive start timestamp in milliseconds. */\n start?: number;\n /** Inclusive end timestamp in milliseconds. */\n end?: number;\n /** Time sort direction. Defaults to newest fills first. */\n sort?: PerpsSortDirection;\n /** Opaque cursor returned by a previous page. */\n cursor?: PaginationCursor;\n};\n\n/**\n * Lists authenticated account fills, retaining any instrument filter on each page.\n * @throws {@link PerpsSessionAccountError} Thrown on invalid input or request failure.\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport function listPerpsFills(\n api: ServiceClient,\n request: ListPerpsFillsRequest = {},\n): Paginated<PerpsAccountFill[]> {\n const params = parseUserInput(request, ListPerpsFillsRequestSchema);\n return paginate(\n (cursor) =>\n api\n .get('/v1/account/fills', {\n schema: ListPerpsFillsResponseSchema,\n params: toPerpsSearchParams({\n startTimestamp: params.start,\n endTimestamp: params.end,\n instrumentId: params.instrumentId,\n sort: params.sort,\n cursor: cursor ?? params.cursor,\n }),\n })\n .then((response): Page<PerpsAccountFill[]> => {\n const last = response.data.at(-1);\n if (!response.more || last === undefined) {\n return { items: response.data, hasMore: false };\n }\n return {\n items: response.data,\n hasMore: true,\n nextCursor: toPaginationCursor(String(last.tradeId)),\n };\n }),\n params.cursor,\n );\n}\n\nconst ListPerpsFundingPaymentsInitialRequestSchema =\n PerpsHistoryRequestBaseSchema.extend({\n cursor: PaginationCursorSchema.optional(),\n instrumentId: PerpsInstrumentIdSchema.optional(),\n }) satisfies z.ZodType<\n Exclude<ListPerpsFundingPaymentsRequest, { cursor: PaginationCursor }>\n >;\n\nconst ListPerpsFundingPaymentsCursorRequestSchema = z.object({\n cursor: PaginationCursorSchema,\n}) satisfies z.ZodType<\n Extract<ListPerpsFundingPaymentsRequest, { cursor: PaginationCursor }>\n>;\n\nconst ListPerpsFundingPaymentsRequestSchema = z.union([\n ListPerpsFundingPaymentsInitialRequestSchema.transform(\n ({ cursor, ...request }) => ({\n cursor,\n params: toPerpsHistoryParams(request, ONE_DAY_MS),\n }),\n ),\n ListPerpsFundingPaymentsCursorRequestSchema.transform(({ cursor }) => ({\n cursor,\n params: undefined,\n })),\n]);\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type ListPerpsFundingPaymentsRequest =\n | {\n /** Optional Perps instrument identifier filter. */\n instrumentId?: number;\n /** Inclusive start timestamp in milliseconds. */\n start?: number;\n /** Inclusive end timestamp in milliseconds. */\n end?: number;\n /** Opaque cursor returned by a previous page. */\n cursor?: PaginationCursor;\n }\n | {\n /** Opaque cursor returned by a previous page. */\n cursor: PaginationCursor;\n };\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport function listPerpsFundingPayments(\n api: ServiceClient,\n request: ListPerpsFundingPaymentsRequest = {},\n): Paginated<PerpsAccountFundingPayment[]> {\n const { cursor, params } = parseUserInput(\n request,\n ListPerpsFundingPaymentsRequestSchema,\n );\n return paginate((pageCursor) => {\n let state: PerpsDescendingAccountCursorState;\n if (pageCursor === undefined) {\n invariant(\n params !== undefined,\n 'Expected initial Perps funding payment params.',\n );\n state = { kind: 'perpsFundingPayments', seenKeys: [], ...params };\n } else {\n state = decodeCursorState(\n pageCursor,\n PerpsDescendingAccountCursorStateSchema,\n 'Invalid Perps account pagination cursor',\n );\n }\n const { kind: _kind, seenKeys: _seenKeys, ...searchParams } = state;\n const seenKeys = new Set(state.seenKeys);\n\n return api\n .get('/v1/account/funding', {\n schema: ListPerpsFundingPaymentsResponseSchema,\n params: toPerpsSearchParams(searchParams),\n })\n .then((response): Page<PerpsAccountFundingPayment[]> => {\n const items = response.data.filter(\n (payment) =>\n !seenKeys.has(\n `${payment.instrumentId}:${payment.timestamp}:${payment.funding}`,\n ),\n );\n return toPerpsDescendingAccountPage({\n getKey: (payment) =>\n `${payment.instrumentId}:${payment.timestamp}:${payment.funding}`,\n getTimestamp: (payment) => payment.timestamp,\n items,\n responseData: response.data,\n responseMore: response.more,\n state,\n });\n });\n }, cursor);\n}\n\nconst ListPerpsDepositsInitialRequestSchema =\n PerpsHistoryRequestBaseSchema.extend({\n cursor: PaginationCursorSchema.optional(),\n depositStatus: PerpsDepositStatusSchema.optional(),\n hash: TxHashSchema.optional(),\n }) satisfies z.ZodType<\n Exclude<ListPerpsDepositsRequest, { cursor: PaginationCursor }>\n >;\n\nconst ListPerpsDepositsCursorRequestSchema = z.object({\n cursor: PaginationCursorSchema,\n}) satisfies z.ZodType<\n Extract<ListPerpsDepositsRequest, { cursor: PaginationCursor }>\n>;\n\nconst ListPerpsDepositsRequestSchema = z.union([\n ListPerpsDepositsInitialRequestSchema.transform(({ cursor, ...request }) => ({\n cursor,\n params: toPerpsHistoryParams(request, NINETY_DAYS_MS),\n })),\n ListPerpsDepositsCursorRequestSchema.transform(({ cursor }) => ({\n cursor,\n params: undefined,\n })),\n]);\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type ListPerpsDepositsRequest =\n | {\n /** Optional deposit status filter. */\n depositStatus?: PerpsDepositStatus;\n /** Optional transaction hash filter. */\n hash?: string;\n /** Inclusive start timestamp in milliseconds. */\n start?: number;\n /** Inclusive end timestamp in milliseconds. */\n end?: number;\n /** Opaque cursor returned by a previous page. */\n cursor?: PaginationCursor;\n }\n | {\n /** Opaque cursor returned by a previous page. */\n cursor: PaginationCursor;\n };\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport function listPerpsDeposits(\n api: ServiceClient,\n request: ListPerpsDepositsRequest = {},\n): Paginated<PerpsDeposit[]> {\n const { cursor, params } = parseUserInput(\n request,\n ListPerpsDepositsRequestSchema,\n );\n return paginate((pageCursor) => {\n let state: PerpsDescendingAccountCursorState;\n if (pageCursor === undefined) {\n invariant(params !== undefined, 'Expected initial Perps deposit params.');\n state = { kind: 'perpsDeposits', seenKeys: [], ...params };\n } else {\n state = decodeCursorState(\n pageCursor,\n PerpsDescendingAccountCursorStateSchema,\n 'Invalid Perps account pagination cursor',\n );\n }\n const { kind: _kind, seenKeys: _seenKeys, ...searchParams } = state;\n const seenKeys = new Set(state.seenKeys);\n\n return api\n .get('/v1/account/deposits', {\n schema: ListPerpsDepositsResponseSchema,\n params: toPerpsSearchParams(searchParams),\n })\n .then((response): Page<PerpsDeposit[]> => {\n const items = response.data.filter(\n (deposit) => !seenKeys.has(deposit.hash),\n );\n return toPerpsDescendingAccountPage({\n getKey: (deposit) => deposit.hash,\n getTimestamp: latestPerpsDepositTimestamp,\n items,\n responseData: response.data,\n responseMore: response.more,\n state,\n });\n });\n }, cursor);\n}\n\nconst ListPerpsWithdrawalsInitialRequestSchema =\n PerpsHistoryRequestBaseSchema.extend({\n cursor: PaginationCursorSchema.optional(),\n withdrawalStatus: PerpsWithdrawalStatusSchema.optional(),\n hash: TxHashSchema.optional(),\n }) satisfies z.ZodType<\n Exclude<ListPerpsWithdrawalsRequest, { cursor: PaginationCursor }>\n >;\n\nconst ListPerpsWithdrawalsCursorRequestSchema = z.object({\n cursor: PaginationCursorSchema,\n}) satisfies z.ZodType<\n Extract<ListPerpsWithdrawalsRequest, { cursor: PaginationCursor }>\n>;\n\nconst ListPerpsWithdrawalsRequestSchema = z.union([\n ListPerpsWithdrawalsInitialRequestSchema.transform(\n ({ cursor, ...request }) => ({\n cursor,\n params: toPerpsHistoryParams(request, NINETY_DAYS_MS),\n }),\n ),\n ListPerpsWithdrawalsCursorRequestSchema.transform(({ cursor }) => ({\n cursor,\n params: undefined,\n })),\n]);\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type ListPerpsWithdrawalsRequest =\n | {\n /** Optional withdrawal status filter. */\n withdrawalStatus?: PerpsWithdrawalStatus;\n /** Optional transaction hash filter. */\n hash?: string;\n /** Inclusive start timestamp in milliseconds. */\n start?: number;\n /** Inclusive end timestamp in milliseconds. */\n end?: number;\n /** Opaque cursor returned by a previous page. */\n cursor?: PaginationCursor;\n }\n | {\n /** Opaque cursor returned by a previous page. */\n cursor: PaginationCursor;\n };\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport function listPerpsWithdrawals(\n api: ServiceClient,\n request: ListPerpsWithdrawalsRequest = {},\n): Paginated<PerpsWithdrawal[]> {\n const { cursor, params } = parseUserInput(\n request,\n ListPerpsWithdrawalsRequestSchema,\n );\n return paginate((pageCursor) => {\n let state: PerpsDescendingAccountCursorState;\n if (pageCursor === undefined) {\n invariant(\n params !== undefined,\n 'Expected initial Perps withdrawal params.',\n );\n state = { kind: 'perpsWithdrawals', seenKeys: [], ...params };\n } else {\n state = decodeCursorState(\n pageCursor,\n PerpsDescendingAccountCursorStateSchema,\n 'Invalid Perps account pagination cursor',\n );\n }\n const { kind: _kind, seenKeys: _seenKeys, ...searchParams } = state;\n const seenKeys = new Set(state.seenKeys);\n\n return api\n .get('/v1/account/withdrawals', {\n schema: ListPerpsWithdrawalsResponseSchema,\n params: toPerpsSearchParams(searchParams),\n })\n .then((response): Page<PerpsWithdrawal[]> => {\n const items = response.data.filter(\n (withdrawal) => !seenKeys.has(String(withdrawal.withdrawalId)),\n );\n return toPerpsDescendingAccountPage({\n getKey: (withdrawal) => String(withdrawal.withdrawalId),\n getTimestamp: latestPerpsWithdrawalTimestamp,\n items,\n responseData: response.data,\n responseMore: response.more,\n state,\n });\n });\n }, cursor);\n}\n\nconst ListPerpsInternalTransfersInitialRequestSchema =\n PerpsHistoryRequestBaseSchema.extend({\n cursor: PaginationCursorSchema.optional(),\n }) satisfies z.ZodType<\n Exclude<ListPerpsInternalTransfersRequest, { cursor: PaginationCursor }>\n >;\n\nconst PerpsInternalTransfersCursorStateSchema = z.object({\n kind: z.literal('perpsInternalTransfers'),\n startTimestamp: TimestampInputSchema,\n endTimestamp: TimestampInputSchema,\n seenKeys: z.array(z.string()),\n}) satisfies z.ZodType<PerpsInternalTransfersCursorState>;\n\nconst ListPerpsInternalTransfersCursorRequestSchema = z.object({\n cursor: PaginationCursorSchema,\n}) satisfies z.ZodType<\n Extract<ListPerpsInternalTransfersRequest, { cursor: PaginationCursor }>\n>;\n\nconst ListPerpsInternalTransfersRequestSchema = z.union([\n ListPerpsInternalTransfersInitialRequestSchema.transform(\n ({ cursor, ...request }) => ({\n cursor,\n params: toPerpsHistoryParams(request, NINETY_DAYS_MS),\n }),\n ),\n ListPerpsInternalTransfersCursorRequestSchema.transform(({ cursor }) => ({\n cursor,\n params: undefined,\n })),\n]);\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type ListPerpsInternalTransfersRequest =\n | {\n /** Inclusive start timestamp in milliseconds. */\n start?: number;\n /** Inclusive end timestamp in milliseconds. */\n end?: number;\n /** Opaque cursor returned by a previous page. */\n cursor?: PaginationCursor;\n }\n | {\n /** Opaque cursor returned by a previous page. */\n cursor: PaginationCursor;\n };\n\n/**\n * Lists settled internal transfers with SDK-owned pagination.\n *\n * @remarks\n * Overlapping timestamp boundaries are deduplicated. Throws\n * `UnexpectedResponseError` if a full millisecond cannot be paged without\n * risking omitted transfers.\n *\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport function listPerpsInternalTransfers(\n api: ServiceClient,\n request: ListPerpsInternalTransfersRequest = {},\n): Paginated<PerpsInternalTransfer[]> {\n const { cursor, params } = parseUserInput(\n request,\n ListPerpsInternalTransfersRequestSchema,\n );\n return paginate((pageCursor) => {\n let state: PerpsInternalTransfersCursorState;\n if (pageCursor === undefined) {\n invariant(\n params !== undefined,\n 'Expected initial Perps internal-transfer params.',\n );\n state = { kind: 'perpsInternalTransfers', seenKeys: [], ...params };\n } else {\n state = decodeCursorState(\n pageCursor,\n PerpsInternalTransfersCursorStateSchema,\n 'Invalid Perps account pagination cursor',\n );\n }\n const { kind: _kind, seenKeys: _seenKeys, ...searchParams } = state;\n\n return api\n .get('/v1/account/internal-transfers', {\n schema: ListPerpsInternalTransfersResponseSchema,\n params: toPerpsSearchParams(searchParams),\n })\n .then((response) =>\n toPerpsInternalTransfersPage(\n response.data,\n response.more,\n state,\n async (bounds) => {\n const boundary = await api.get('/v1/account/internal-transfers', {\n schema: ListPerpsInternalTransfersResponseSchema,\n params: toPerpsSearchParams(bounds),\n });\n return { transfers: boundary.data, hasMore: boundary.more };\n },\n ),\n );\n }, cursor);\n}\n\nconst ListPerpsEquityHistoryInitialRequestSchema =\n PerpsIntervalHistoryRequestBaseSchema.extend({\n cursor: PaginationCursorSchema.optional(),\n }) satisfies z.ZodType<\n Exclude<ListPerpsEquityHistoryRequest, { cursor: PaginationCursor }>\n >;\n\nconst ListPerpsEquityHistoryCursorRequestSchema = z.object({\n cursor: PaginationCursorSchema,\n}) satisfies z.ZodType<\n Extract<ListPerpsEquityHistoryRequest, { cursor: PaginationCursor }>\n>;\n\nconst ListPerpsEquityHistoryRequestSchema = z.union([\n ListPerpsEquityHistoryInitialRequestSchema.transform(\n ({ cursor, ...request }) => ({\n cursor,\n params: toPerpsIntervalHistoryParams(request),\n }),\n ),\n ListPerpsEquityHistoryCursorRequestSchema.transform(({ cursor }) => ({\n cursor,\n params: undefined,\n })),\n]);\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type ListPerpsEquityHistoryRequest =\n | {\n /** History interval. */\n interval: PerpsPnlInterval;\n /** Inclusive start timestamp in milliseconds. */\n start: number;\n /** Inclusive end timestamp in milliseconds. */\n end?: number;\n /** Opaque cursor returned by a previous page. */\n cursor?: PaginationCursor;\n }\n | {\n /** Opaque cursor returned by a previous page. */\n cursor: PaginationCursor;\n };\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport function listPerpsEquityHistory(\n api: ServiceClient,\n request: ListPerpsEquityHistoryRequest,\n): Paginated<PerpsEquityPoint[]> {\n const { cursor, params } = parseUserInput(\n request,\n ListPerpsEquityHistoryRequestSchema,\n );\n return paginate((pageCursor) => {\n let state: PerpsAscendingAccountCursorState;\n if (pageCursor === undefined) {\n invariant(\n params !== undefined,\n 'Expected initial Perps equity history params.',\n );\n state = { kind: 'perpsEquityHistory', ...params };\n } else {\n state = decodeCursorState(\n pageCursor,\n PerpsAscendingAccountCursorStateSchema,\n 'Invalid Perps account pagination cursor',\n );\n }\n const { kind: _kind, ...searchParams } = state;\n\n return api\n .get('/v1/account/equity', {\n schema: ListPerpsEquityHistoryResponseSchema,\n params: toPerpsSearchParams(searchParams),\n })\n .then((response): Page<PerpsEquityPoint[]> => {\n const last = response.data.at(-1);\n const hasMore =\n response.more &&\n last !== undefined &&\n last.timestamp < state.endTimestamp;\n\n return {\n items: response.data,\n hasMore,\n nextCursor: hasMore\n ? encodeCursorState({\n ...state,\n startTimestamp:\n last.timestamp +\n perpsHistoryIntervalMilliseconds(state.interval),\n })\n : undefined,\n };\n });\n }, cursor);\n}\n\nconst ListPerpsPnlHistoryInitialRequestSchema =\n PerpsIntervalHistoryRequestBaseSchema.extend({\n cursor: PaginationCursorSchema.optional(),\n }) satisfies z.ZodType<\n Exclude<ListPerpsPnlHistoryRequest, { cursor: PaginationCursor }>\n >;\n\nconst ListPerpsPnlHistoryCursorRequestSchema = z.object({\n cursor: PaginationCursorSchema,\n}) satisfies z.ZodType<\n Extract<ListPerpsPnlHistoryRequest, { cursor: PaginationCursor }>\n>;\n\nconst ListPerpsPnlHistoryRequestSchema = z.union([\n ListPerpsPnlHistoryInitialRequestSchema.transform(\n ({ cursor, ...request }) => ({\n cursor,\n params: toPerpsIntervalHistoryParams(request),\n }),\n ),\n ListPerpsPnlHistoryCursorRequestSchema.transform(({ cursor }) => ({\n cursor,\n params: undefined,\n })),\n]);\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type ListPerpsPnlHistoryRequest =\n | {\n /** History interval. */\n interval: PerpsPnlInterval;\n /** Inclusive start timestamp in milliseconds. */\n start: number;\n /** Inclusive end timestamp in milliseconds. */\n end?: number;\n /** Opaque cursor returned by a previous page. */\n cursor?: PaginationCursor;\n }\n | {\n /** Opaque cursor returned by a previous page. */\n cursor: PaginationCursor;\n };\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport function listPerpsPnlHistory(\n api: ServiceClient,\n request: ListPerpsPnlHistoryRequest,\n): Paginated<PerpsPnlPoint[]> {\n const { cursor, params } = parseUserInput(\n request,\n ListPerpsPnlHistoryRequestSchema,\n );\n return paginate((pageCursor) => {\n let state: PerpsAscendingAccountCursorState;\n if (pageCursor === undefined) {\n invariant(\n params !== undefined,\n 'Expected initial Perps PnL history params.',\n );\n state = { kind: 'perpsPnlHistory', ...params };\n } else {\n state = decodeCursorState(\n pageCursor,\n PerpsAscendingAccountCursorStateSchema,\n 'Invalid Perps account pagination cursor',\n );\n }\n const { kind: _kind, ...searchParams } = state;\n\n return api\n .get('/v1/account/pnl', {\n schema: ListPerpsPnlHistoryResponseSchema,\n params: toPerpsSearchParams(searchParams),\n })\n .then((response): Page<PerpsPnlPoint[]> => {\n const last = response.data.at(-1);\n const hasMore =\n response.more &&\n last !== undefined &&\n last.timestamp < state.endTimestamp;\n\n return {\n items: response.data,\n hasMore,\n nextCursor: hasMore\n ? encodeCursorState({\n ...state,\n startTimestamp:\n last.timestamp +\n perpsHistoryIntervalMilliseconds(state.interval),\n })\n : undefined,\n };\n });\n }, cursor);\n}\n\nconst PerpsNotificationsCursorStateSchema = z.object({\n kind: z.literal('perpsNotifications'),\n cursor: z.string().min(1),\n sinceSeq: z.number().int().nonnegative().optional(),\n limit: z.number().int().positive().optional(),\n});\n\ntype PerpsNotificationsCursorState = z.infer<\n typeof PerpsNotificationsCursorStateSchema\n>;\n\nconst ListPerpsNotificationsInitialRequestSchema = z.object({\n sinceSeq: z.number().int().nonnegative().optional(),\n limit: z.number().int().positive().optional(),\n cursor: PaginationCursorSchema.optional(),\n}) satisfies z.ZodType<\n Exclude<ListPerpsNotificationsRequest, { cursor: PaginationCursor }>\n>;\n\nconst ListPerpsNotificationsCursorRequestSchema = z.object({\n cursor: PaginationCursorSchema,\n}) satisfies z.ZodType<\n Extract<ListPerpsNotificationsRequest, { cursor: PaginationCursor }>\n>;\n\nconst ListPerpsNotificationsRequestSchema = z.union([\n ListPerpsNotificationsInitialRequestSchema.transform(\n ({ cursor, ...request }) => ({\n cursor,\n params: request,\n }),\n ),\n ListPerpsNotificationsCursorRequestSchema.transform(({ cursor }) => ({\n cursor,\n params: undefined,\n })),\n]);\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type ListPerpsNotificationsRequest =\n | {\n /**\n * Inclusive sequence lower bound used to backfill notifications missed\n * while disconnected. Use the `sequence` of the last notification event\n * processed before the gap. Follow-up pages keep the same bound\n * automatically. Merged results should be deduplicated by notification\n * id.\n */\n sinceSeq?: number;\n /** Maximum number of notifications per page. */\n limit?: number;\n /** Opaque cursor returned by a previous page. */\n cursor?: PaginationCursor;\n }\n | {\n /** Opaque cursor returned by a previous page. */\n cursor: PaginationCursor;\n };\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport function listPerpsNotifications(\n api: ServiceClient,\n request: ListPerpsNotificationsRequest = {},\n): Paginated<PerpsNotificationEntry[]> {\n const { cursor, params } = parseUserInput(\n request,\n ListPerpsNotificationsRequestSchema,\n );\n return paginate((pageCursor) => {\n let state: PerpsNotificationsCursorState | undefined;\n if (pageCursor === undefined) {\n invariant(\n params !== undefined,\n 'Expected initial Perps notifications params.',\n );\n } else {\n state = decodeCursorState(\n pageCursor,\n PerpsNotificationsCursorStateSchema,\n 'Invalid Perps account pagination cursor',\n );\n }\n const sinceSeq = state === undefined ? params?.sinceSeq : state.sinceSeq;\n const limit = state === undefined ? params?.limit : state.limit;\n\n return api\n .get('/v1/account/notifications', {\n schema: ListPerpsNotificationsResponseSchema,\n params: toPerpsSearchParams({\n cursor: state?.cursor,\n limit,\n sinceSeq,\n }),\n })\n .then((response): Page<PerpsNotificationEntry[]> => {\n const hasMore = response.has_more && response.next_cursor !== null;\n return {\n items: response.items,\n hasMore,\n nextCursor:\n hasMore && response.next_cursor !== null\n ? encodeCursorState({\n kind: 'perpsNotifications',\n cursor: response.next_cursor,\n limit,\n sinceSeq,\n })\n : undefined,\n };\n });\n }, cursor);\n}\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport async function fetchPerpsUnreadNotificationsCount(\n api: ServiceClient,\n): Promise<number> {\n const response = await api.get('/v1/account/notifications', {\n schema: FetchPerpsUnreadNotificationsCountResponseSchema,\n params: toPerpsSearchParams({ limit: 1 }),\n });\n return response.unread;\n}\n\nconst MarkPerpsNotificationsReadByIdsRequestSchema = z.object({\n ids: z.array(z.string().min(1)).min(1),\n}) satisfies z.ZodType<\n Extract<MarkPerpsNotificationsReadRequest, { ids: string[] }>\n>;\n\nconst MarkPerpsNotificationsReadUpToRequestSchema = z.object({\n upTo: z.object({\n id: z.string().min(1),\n timestamp: z.number().int().nonnegative(),\n }),\n}) satisfies z.ZodType<\n Exclude<MarkPerpsNotificationsReadRequest, { ids: string[] }>\n>;\n\nconst MarkPerpsNotificationsReadRequestSchema = z.union([\n MarkPerpsNotificationsReadByIdsRequestSchema.transform(({ ids }) => ({\n ids,\n })),\n MarkPerpsNotificationsReadUpToRequestSchema.transform(({ upTo }) => ({\n before: encodePerpsNotificationsReadCursor(upTo),\n })),\n]);\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type MarkPerpsNotificationsReadRequest =\n | {\n /** Notification ids to mark read. */\n ids: string[];\n }\n | {\n /**\n * Mark every notification at or before this notification read,\n * inclusive.\n */\n upTo: {\n /** Notification id. */\n id: string;\n /** Notification timestamp in milliseconds. */\n timestamp: number;\n };\n };\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport async function markPerpsNotificationsRead(\n api: ServiceClient,\n request: MarkPerpsNotificationsReadRequest,\n): Promise<void> {\n const body = parseUserInput(request, MarkPerpsNotificationsReadRequestSchema);\n const response = await api.post('/v1/account/notifications/read', {\n schema: MarkPerpsNotificationsReadResponseSchema,\n json: body,\n });\n if (response.status === 'err') {\n throw new RequestRejectedError(\n response.error ?? 'Perps notifications read request was rejected.',\n { status: 200 },\n );\n }\n}\n\n// The upstream read cursor is base64url-encoded JSON keyed as {ts, id}.\nfunction encodePerpsNotificationsReadCursor(upTo: {\n id: string;\n timestamp: number;\n}): string {\n return btoa(JSON.stringify({ ts: upTo.timestamp, id: upTo.id }))\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_')\n .replace(/=+$/, '');\n}\n\nfunction toPerpsHistoryParams<T extends Record<string, unknown>>(\n request: T & { end?: number; start?: number },\n defaultWindowMs: number,\n): Omit<T, 'end' | 'start'> & PerpsHistoryParams {\n const now = Date.now();\n const { end, start, ...rest } = request;\n return {\n ...rest,\n endTimestamp: end ?? now,\n startTimestamp: start ?? now - defaultWindowMs,\n };\n}\n\nfunction toPerpsIntervalHistoryParams(\n request: z.output<typeof PerpsIntervalHistoryRequestBaseSchema>,\n): PerpsIntervalHistoryParams {\n return {\n endTimestamp: request.end ?? Date.now(),\n interval: request.interval,\n startTimestamp: request.start,\n };\n}\n\nfunction toPerpsSearchParams(params: object): URLSearchParams {\n return toSearchParams(\n params as Record<string, string | number | boolean | undefined>,\n snakeCase(),\n );\n}\n\nfunction latestPerpsDepositTimestamp(deposit: PerpsDeposit): number {\n return deposit.confirmedTimestamp ?? deposit.createdTimestamp;\n}\n\nfunction latestPerpsWithdrawalTimestamp(withdrawal: PerpsWithdrawal): number {\n return withdrawal.confirmedTimestamp ?? withdrawal.createdTimestamp;\n}\n\nfunction toPerpsDescendingAccountPage<T>(request: {\n getKey: (item: T) => string;\n getTimestamp: (item: T) => number;\n items: T[];\n responseData: T[];\n responseMore: boolean;\n state: PerpsDescendingAccountCursorState;\n}): Page<T[]> {\n const rawLast = request.responseData.at(-1);\n const last = request.items.at(-1);\n const cursorTimestamp =\n (last === undefined ? undefined : request.getTimestamp(last)) ??\n (rawLast === undefined ? undefined : request.getTimestamp(rawLast));\n const hasMore =\n request.responseMore &&\n cursorTimestamp !== undefined &&\n cursorTimestamp > request.state.startTimestamp;\n\n if (!hasMore) return { items: request.items, hasMore };\n\n const endTimestamp =\n last === undefined ? cursorTimestamp - 1 : cursorTimestamp;\n const seen = new Set(\n request.state.endTimestamp === endTimestamp ? request.state.seenKeys : [],\n );\n for (const item of request.items) {\n if (request.getTimestamp(item) === endTimestamp) {\n seen.add(request.getKey(item));\n }\n }\n\n return {\n items: request.items,\n hasMore,\n nextCursor: encodeCursorState({\n ...request.state,\n endTimestamp,\n seenKeys: Array.from(seen),\n }),\n };\n}\n\nfunction perpsHistoryIntervalMilliseconds(\n interval: z.output<typeof PerpsPnlIntervalSchema>,\n): number {\n switch (interval) {\n case '1h':\n return 60 * 60 * 1000;\n case '4h':\n return 4 * 60 * 60 * 1000;\n case '1d':\n return ONE_DAY_MS;\n case '1w':\n return 7 * ONE_DAY_MS;\n }\n invariant(\n false,\n `Unsupported Perps account history interval: ${String(interval)}`,\n );\n}\n","import { EvmAddressSchema, toPaginationCursor } from '@kuest/bindings';\nimport {\n FetchPerpsBuilderApprovalsResponseSchema,\n ListPerpsBuilderEarningsResponseSchema,\n type PerpsBuilderApproval,\n type PerpsBuilderEarning,\n type PerpsBuilderEarningsSummary,\n PerpsBuilderEarningsSummarySchema,\n} from '@kuest/bindings/perps';\nimport { z } from 'zod';\nimport { snakeCase, toSearchParams } from '../../../actions/params';\nimport {\n makeErrorGuard,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n} from '../../../errors';\nimport { parseUserInput } from '../../../input';\nimport { type Page, type Paginated, paginate } from '../../../pagination';\nimport type { ServiceClient } from '../../../ServiceClient';\n\nconst FetchPerpsBuilderApprovalsRequestSchema = z\n .object({ builder: EvmAddressSchema.optional() })\n .default({}) satisfies z.ZodType<FetchPerpsBuilderApprovalsRequest>;\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type FetchPerpsBuilderApprovalsRequest = {\n /** Optional builder filter; approvals always belong to the authenticated trader. */\n builder?: string;\n};\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type FetchPerpsBuilderApprovalsError =\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport const FetchPerpsBuilderApprovalsError = makeErrorGuard(\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Fetches the authenticated trader's saved grants, including revoked grants.\n *\n * @throws {@link FetchPerpsBuilderApprovalsError}\n * Thrown on failure.\n *\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport async function fetchPerpsBuilderApprovals(\n api: ServiceClient,\n request?: FetchPerpsBuilderApprovalsRequest,\n): Promise<PerpsBuilderApproval[]> {\n const params = parseUserInput(\n request,\n FetchPerpsBuilderApprovalsRequestSchema,\n );\n const response = await api.get('/v1/account/builder-approvals', {\n schema: FetchPerpsBuilderApprovalsResponseSchema,\n params: toSearchParams(params, snakeCase()),\n });\n return response.data;\n}\n\nconst NINETY_DAYS_MS = 90 * 24 * 60 * 60 * 1000;\nconst BuilderReportingIntegerSchema = z\n .number()\n .int()\n .nonnegative()\n .max(Number.MAX_SAFE_INTEGER);\nconst BuilderReportingRequestSchema = z\n .object({\n start: BuilderReportingIntegerSchema.optional(),\n end: BuilderReportingIntegerSchema.optional(),\n asOfSequence: BuilderReportingIntegerSchema.optional(),\n })\n .refine(\n ({ start, end }) =>\n start === undefined || end === undefined || start <= end,\n { message: 'end must not precede start', path: ['end'] },\n )\n .refine(\n ({ start, end }) =>\n start === undefined || end === undefined || end - start <= NINETY_DAYS_MS,\n { message: 'The reporting window must not exceed 90 days', path: ['end'] },\n )\n .default({});\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type ListPerpsBuilderEarningsRequest = {\n /** Inclusive start in Unix milliseconds. Defaults to seven days before end. */\n start?: number;\n /** End in Unix milliseconds. Defaults to the server's current time. */\n end?: number;\n /** Fixed indexed sequence cutoff. Defaults to the latest fully indexed sequence. */\n asOfSequence?: number;\n};\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type ListPerpsBuilderEarningsError =\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport const ListPerpsBuilderEarningsError = makeErrorGuard(\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Lists earnings credited to the authenticated builder account.\n *\n * @remarks\n * To reconcile history against totals, call `fetchPerpsBuilderEarningsSummary`\n * first and pass its `snapshot` as this request. The snapshot pins the\n * reporting window and indexed sequence cutoff, so every page matches those\n * totals. Continuations keep the original window and cutoff even as more fills\n * are indexed. A window is at most 90 days; omitted bounds use the server's\n * seven-day default.\n *\n * @throws {@link ListPerpsBuilderEarningsError}\n * Thrown on invalid input or while fetching pages.\n *\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport function listPerpsBuilderEarnings(\n api: ServiceClient,\n request?: ListPerpsBuilderEarningsRequest,\n): Paginated<PerpsBuilderEarning[]> {\n const params = parseUserInput(request, BuilderReportingRequestSchema);\n\n return paginate((cursor) =>\n api\n .get('/v1/account/builder-earnings', {\n schema: ListPerpsBuilderEarningsResponseSchema,\n params:\n cursor === undefined\n ? toSearchParams(params, {\n start: 'start_timestamp',\n end: 'end_timestamp',\n asOfSequence: 'as_of_sequence',\n })\n : new URLSearchParams({ cursor }),\n })\n .then((response): Page<PerpsBuilderEarning[]> => {\n if (!response.more) {\n return { items: response.data, hasMore: false };\n }\n if (response.cursor === undefined || response.cursor === cursor) {\n throw new UnexpectedResponseError(\n 'Builder earnings pagination did not return a new cursor',\n );\n }\n return {\n items: response.data,\n hasMore: true,\n nextCursor: toPaginationCursor(response.cursor),\n };\n }),\n );\n}\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type FetchPerpsBuilderEarningsSummaryRequest = {\n /** Inclusive start in Unix milliseconds. Defaults to seven days before end. */\n start?: number;\n /** End in Unix milliseconds. Defaults to the server's current time. */\n end?: number;\n /** Fixed indexed sequence cutoff. Defaults to the latest fully indexed sequence. */\n asOfSequence?: number;\n};\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type FetchPerpsBuilderEarningsSummaryError =\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport const FetchPerpsBuilderEarningsSummaryError = makeErrorGuard(\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Fetches earnings totals for the authenticated builder account.\n *\n * @remarks\n * The returned `snapshot` pins the reporting window and indexed sequence\n * cutoff. Pass it to `listPerpsBuilderEarnings` to page the history behind\n * these totals. The active approval count reflects current consent\n * independently of the reporting cutoff.\n * Omitted bounds use the server's seven-day default; windows cannot exceed 90 days.\n *\n * @throws {@link FetchPerpsBuilderEarningsSummaryError}\n * Thrown on failure.\n *\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport async function fetchPerpsBuilderEarningsSummary(\n api: ServiceClient,\n request?: FetchPerpsBuilderEarningsSummaryRequest,\n): Promise<PerpsBuilderEarningsSummary> {\n const params = parseUserInput(request, BuilderReportingRequestSchema);\n return api.get('/v1/account/builder-earnings-summary', {\n schema: PerpsBuilderEarningsSummarySchema,\n params: toSearchParams(params, {\n start: 'start_timestamp',\n end: 'end_timestamp',\n asOfSequence: 'as_of_sequence',\n }),\n });\n}\n","import { OrderSide, OrderSideSchema } from '@kuest/bindings';\nimport {\n CreatePerpsChaseResponseSchema,\n FetchPerpsChasesResponseSchema,\n type PerpsChase,\n type PerpsChaseAccepted,\n PerpsChaseIdSchema,\n PerpsClientOrderIdSchema,\n PerpsCommandAckSchema,\n type PerpsDecimalInput,\n PerpsDecimalInputSchema,\n} from '@kuest/bindings/perps';\nimport { z } from 'zod';\nimport {\n makeErrorGuard,\n RateLimitError,\n RequestRejectedError,\n SigningError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n} from '../../../errors';\nimport { parseUserInput } from '../../../input';\nimport type { ServiceClient } from '../../../ServiceClient';\nimport type { PerpsSignedOp } from '../signing';\nimport type { SignPerpsRestCommand } from './trading';\n\n// Use fixed-point strings for signing and exact bounds comparison, including numeric exponent inputs.\nconst BoundedDecimalSchema = PerpsDecimalInputSchema.transform(\n (value, context) => {\n const match = /^(\\d+)(?:\\.(\\d+))?(?:[eE]([+-]?\\d+))?$/.exec(value);\n if (!match) {\n context.addIssue({\n code: 'custom',\n message: 'Expected a nonnegative decimal',\n });\n return z.NEVER;\n }\n const whole = match[1] ?? '0';\n const fraction = match[2] ?? '';\n const exponent = Number(match[3] ?? '0');\n if (!Number.isSafeInteger(exponent) || Math.abs(exponent) > 100) {\n context.addIssue({\n code: 'custom',\n message: 'Decimal exceeds supported precision',\n });\n return z.NEVER;\n }\n const digits = whole + fraction;\n const point = whole.length + exponent;\n const expanded =\n point <= 0\n ? `0.${'0'.repeat(-point)}${digits}`\n : point >= digits.length\n ? digits.padEnd(point, '0')\n : `${digits.slice(0, point)}.${digits.slice(point)}`;\n const [integer = '0', fractional = ''] = expanded.split('.');\n const normalizedFraction = fractional.replace(/0+$/, '');\n if (\n normalizedFraction.length > 28 ||\n BigInt(integer + normalizedFraction) > 79228162514264337593543950335n\n ) {\n context.addIssue({\n code: 'custom',\n message: 'Decimal exceeds supported precision',\n });\n return z.NEVER;\n }\n return normalizedFraction ? `${integer}.${normalizedFraction}` : integer;\n },\n);\nfunction decimalUnits(value: string): bigint {\n const [whole = '0', fraction = ''] = value.split('.');\n return BigInt(`${whole}${fraction.padEnd(28, '0')}`);\n}\n\nconst CreatePerpsChaseRequestSchema = z\n .object({\n instrumentId: z.number().int().min(0).max(4294967295),\n side: OrderSideSchema,\n quantity: BoundedDecimalSchema.refine(\n (value) => decimalUnits(value) > 0n,\n 'quantity must be positive',\n ),\n limitPrice: BoundedDecimalSchema.optional(),\n maxDistance: BoundedDecimalSchema.optional(),\n maxDistanceBps: z.number().int().min(1).max(1000).optional(),\n postOnly: z.boolean().default(true),\n reduceOnly: z.boolean().default(false),\n clientOrderId: PerpsClientOrderIdSchema.optional(),\n expiresAt: z\n .number()\n .int()\n .positive()\n .max(Number.MAX_SAFE_INTEGER)\n .optional(),\n })\n .superRefine((request, context) => {\n if (\n decimalUnits(request.maxDistance ?? '0') !== 0n &&\n request.maxDistanceBps !== undefined\n )\n context.addIssue({\n code: 'custom',\n path: ['maxDistanceBps'],\n message: 'Use maxDistance or maxDistanceBps, not both',\n });\n });\n/** @experimental This API may change in a breaking way in any release, including patch releases. */\nexport type CreatePerpsChaseRequest = {\n instrumentId: number;\n side: OrderSide;\n quantity: PerpsDecimalInput;\n /** Highest buy price or lowest sell price. Zero or omission disables this bound. */ limitPrice?: PerpsDecimalInput;\n /** Maximum distance from the first price at which a child rests or fills. Zero or omission disables this bound. */ maxDistance?: PerpsDecimalInput;\n /** 1 to 1000 bps. Omit to disable; cannot combine with positive maxDistance. */ maxDistanceBps?: number;\n /** Refuse children that cross. Defaults to true. */ postOnly?: boolean;\n reduceOnly?: boolean;\n /** Retain this identity when reconciling an uncertain submission. */ clientOrderId?: string;\n /** Command deadline in Unix milliseconds; does not end the chase. */ expiresAt?: number;\n};\n/** @experimental This API may change in a breaking way in any release, including patch releases. */\nexport type CreatePerpsChaseError =\n | RateLimitError\n | RequestRejectedError\n | SigningError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\n/** @experimental This API may change in a breaking way in any release, including patch releases. */\nexport const CreatePerpsChaseError = makeErrorGuard(\n RateLimitError,\n RequestRejectedError,\n SigningError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n/** Start a chase with one submission attempt. Reconcile an uncertain outcome before creating again.\n * @internal\n * @throws {@link CreatePerpsChaseError} Thrown on failure.\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport async function createPerpsChase(\n client: ServiceClient,\n signCommand: SignPerpsRestCommand,\n request: CreatePerpsChaseRequest,\n): Promise<PerpsChaseAccepted> {\n const params = parseUserInput(request, CreatePerpsChaseRequestSchema);\n const args = {\n iid: params.instrumentId,\n buy: params.side === OrderSide.BUY,\n qty: params.quantity,\n lim: params.limitPrice,\n max_dist: params.maxDistance,\n max_dist_bps: params.maxDistanceBps,\n po: params.postOnly,\n ro: params.reduceOnly,\n c: params.clientOrderId,\n };\n const op = [\n 'createChase',\n [\n args.iid,\n args.buy,\n args.qty,\n args.lim,\n args.max_dist,\n args.max_dist_bps,\n args.po,\n args.ro,\n args.c,\n ],\n ] as const satisfies PerpsSignedOp;\n const accepted = await client.post('/v1/trade/chases', {\n schema: CreatePerpsChaseResponseSchema,\n retry: false,\n json: {\n ...signCommand(op, params.expiresAt),\n op: { type: 'createChase', args },\n },\n });\n if ('status' in accepted)\n throw new RequestRejectedError(accepted.error, { status: 200 });\n return accepted;\n}\n/** @experimental This API may change in a breaking way in any release, including patch releases. */\nexport type FetchPerpsChasesError =\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError;\n/** @experimental This API may change in a breaking way in any release, including patch releases. */\nexport const FetchPerpsChasesError = makeErrorGuard(\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n);\n/** Fetch running chases in ascending identity order, without pagination. Ended chases are absent.\n * @internal\n * @throws {@link FetchPerpsChasesError} Thrown on failure.\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport async function fetchPerpsChases(\n client: ServiceClient,\n): Promise<PerpsChase[]> {\n return await client.get('/v1/account/chases', {\n schema: FetchPerpsChasesResponseSchema,\n });\n}\nconst CancelPerpsChaseRequestSchema = z.object({\n chaseId: PerpsChaseIdSchema,\n expiresAt: z\n .number()\n .int()\n .positive()\n .max(Number.MAX_SAFE_INTEGER)\n .optional(),\n});\n/** @experimental This API may change in a breaking way in any release, including patch releases. */\nexport type CancelPerpsChaseRequest = {\n chaseId: number;\n /** Command deadline in Unix milliseconds. */ expiresAt?: number;\n};\n/** @experimental This API may change in a breaking way in any release, including patch releases. */\nexport type CancelPerpsChaseError =\n | RateLimitError\n | RequestRejectedError\n | SigningError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\n/** @experimental This API may change in a breaking way in any release, including patch releases. */\nexport const CancelPerpsChaseError = makeErrorGuard(\n RateLimitError,\n RequestRejectedError,\n SigningError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n/** End a chase. The exchange cancels its resting child; completed fills remain.\n * @internal\n * @throws {@link CancelPerpsChaseError} Thrown on failure.\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport async function cancelPerpsChase(\n client: ServiceClient,\n signCommand: SignPerpsRestCommand,\n request: CancelPerpsChaseRequest,\n): Promise<void> {\n const params = parseUserInput(request, CancelPerpsChaseRequestSchema);\n const op = ['cancelChase', [params.chaseId]] as const satisfies PerpsSignedOp;\n const response = await client.del('/v1/trade/chases', {\n schema: PerpsCommandAckSchema,\n retry: false,\n json: {\n ...signCommand(op, params.expiresAt),\n op: { type: 'cancelChase', args: { chid: params.chaseId } },\n },\n });\n if (response.status === 'err')\n throw new RequestRejectedError(response.error, { status: 200 });\n}\n","import { OrderSide, OrderSideSchema, toDecimalString } from '@kuest/bindings';\nimport {\n PerpsAutoCancelResponseSchema,\n PerpsCancelAllOrdersResponseSchema,\n type PerpsCancelOrderResult,\n PerpsCancelOrderResultSchema,\n type PerpsClientOrderId,\n PerpsClientOrderIdSchema,\n PerpsCommandAckSchema,\n type PerpsDecimalInput,\n PerpsDecimalInputSchema,\n type PerpsInstrumentId,\n PerpsInstrumentIdSchema,\n PerpsKnownCancelOrderErrorCode,\n type PerpsOrder,\n type PerpsOrderId,\n PerpsOrderIdSchema,\n type PerpsPortfolio,\n type PerpsPostOrderAck,\n PerpsPostOrderAckSchema,\n PerpsTimeInForce,\n PerpsTpSlKind,\n PerpsTpSlScope,\n type PerpsUpdateLeverageBatchResult,\n PerpsUpdateLeverageBatchResultSchema,\n type PerpsUpdateLeverageResult,\n PerpsUpdateLeverageResultSchema,\n} from '@kuest/bindings/perps';\nimport type {\n PerpsOrderUpdateEvent,\n PerpsSessionEvent,\n} from '@kuest/bindings/subscriptions';\nimport { expectPresent, invariant, setNonBlockingTimeout } from '@kuest/types';\nimport { z } from 'zod';\nimport {\n AutoCancelDailyLimitError,\n makeErrorGuard,\n OperationAbortedError,\n PerpsCancelRetryError,\n RateLimitError,\n RequestRejectedError,\n SigningError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n} from '../../../errors';\nimport { parseUserInput } from '../../../input';\nimport type { ServiceClient } from '../../../ServiceClient';\nimport type { PerpsSignedOp } from '../signing';\nimport type { PerpsBuilderTermsInput } from './builder-terms';\n\nconst PerpsOrderBaseInputSchema = z.object({\n instrumentId: PerpsInstrumentIdSchema,\n side: OrderSideSchema,\n quantity: PerpsDecimalInputSchema,\n reduceOnly: z.boolean().default(false),\n clientOrderId: PerpsClientOrderIdSchema.optional(),\n gtdExpiry: z.never().optional(),\n});\n\n/**\n * Good-til-cancelled Perps order.\n *\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type PerpsPlaceGtcOrderRequest = {\n /** Perps instrument identifier to trade. */\n instrumentId: number;\n /** Trade direction. */\n side: OrderSide;\n /** Limit price. */\n price: PerpsDecimalInput;\n /** Order quantity. */\n quantity: PerpsDecimalInput;\n /** Good-til-cancelled execution. */\n timeInForce: PerpsTimeInForce.GTC;\n gtdExpiry?: never;\n /** Whether the order must rest instead of taking liquidity. */\n postOnly?: boolean;\n /** Whether the order may only reduce or close an existing position. */\n reduceOnly?: boolean;\n /** Optional caller-supplied idempotency identifier. */\n clientOrderId?: string;\n};\n\nconst PerpsPlaceGtcOrderRequestSchema = PerpsOrderBaseInputSchema.extend({\n price: PerpsDecimalInputSchema,\n timeInForce: z.literal(PerpsTimeInForce.GTC),\n postOnly: z.boolean().default(false),\n}) satisfies z.ZodType<PerpsPlaceGtcOrderRequest>;\n\n/**\n * Good-till-date Perps order.\n *\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type PerpsPlaceGtdOrderRequest = {\n /** Perps instrument identifier to trade. */\n instrumentId: number;\n /** Trade direction. */\n side: OrderSide;\n /** Limit price. */\n price: PerpsDecimalInput;\n /** Order quantity. */\n quantity: PerpsDecimalInput;\n /** Good-till-date execution. */\n timeInForce: PerpsTimeInForce.GTD;\n /** Order expiration in Unix milliseconds, strictly future and at most 18446744073709. Separate from the command deadline. */\n gtdExpiry: number;\n /** Whether the order must rest instead of taking liquidity. */\n postOnly?: boolean;\n /** Whether the order may only reduce or close an existing position. */\n reduceOnly?: boolean;\n /** Optional caller-supplied idempotency identifier. */\n clientOrderId?: string;\n};\n\nconst PerpsPlaceGtdOrderRequestSchema = PerpsOrderBaseInputSchema.extend({\n price: PerpsDecimalInputSchema,\n timeInForce: z.literal(PerpsTimeInForce.GTD),\n postOnly: z.boolean().default(false),\n gtdExpiry: z\n .number()\n .int()\n .positive()\n .max(18_446_744_073_709)\n .refine(\n (expiry) => expiry > Date.now(),\n 'Order expiration must be strictly in the future.',\n ),\n}) satisfies z.ZodType<PerpsPlaceGtdOrderRequest>;\n\n/**\n * Immediate-or-cancel Perps order.\n *\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type PerpsPlaceIocOrderRequest = {\n /** Perps instrument identifier to trade. */\n instrumentId: number;\n /** Trade direction. */\n side: OrderSide;\n /** Optional limit price. Omit for market-style execution. */\n price?: PerpsDecimalInput;\n /** Order quantity. */\n quantity: PerpsDecimalInput;\n /** Immediate-or-cancel execution. */\n timeInForce: PerpsTimeInForce.IOC;\n gtdExpiry?: never;\n postOnly?: never;\n /** Whether the order may only reduce or close an existing position. */\n reduceOnly?: boolean;\n /** Optional caller-supplied idempotency identifier. */\n clientOrderId?: string;\n};\n\nconst PerpsPlaceIocOrderRequestSchema = PerpsOrderBaseInputSchema.extend({\n price: PerpsDecimalInputSchema.optional(),\n timeInForce: z.literal(PerpsTimeInForce.IOC),\n postOnly: z.never().optional(),\n}) satisfies z.ZodType<PerpsPlaceIocOrderRequest>;\n\n/**\n * Fill-or-kill Perps order.\n *\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type PerpsPlaceFokOrderRequest = {\n /** Perps instrument identifier to trade. */\n instrumentId: number;\n /** Trade direction. */\n side: OrderSide;\n /** Optional limit price. Omit for market-style execution. */\n price?: PerpsDecimalInput;\n /** Order quantity. */\n quantity: PerpsDecimalInput;\n /** Fill-or-kill execution. */\n timeInForce: PerpsTimeInForce.FOK;\n gtdExpiry?: never;\n postOnly?: never;\n /** Whether the order may only reduce or close an existing position. */\n reduceOnly?: boolean;\n /** Optional caller-supplied idempotency identifier. */\n clientOrderId?: string;\n};\n\nconst PerpsPlaceFokOrderRequestSchema = PerpsOrderBaseInputSchema.extend({\n price: PerpsDecimalInputSchema.optional(),\n timeInForce: z.literal(PerpsTimeInForce.FOK),\n postOnly: z.never().optional(),\n}) satisfies z.ZodType<PerpsPlaceFokOrderRequest>;\n\n/**\n * Request parameters for one Perps order.\n *\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type PerpsOrderRequest =\n | PerpsPlaceGtcOrderRequest\n | PerpsPlaceGtdOrderRequest\n | PerpsPlaceIocOrderRequest\n | PerpsPlaceFokOrderRequest;\n\nconst PerpsOrderRequestSchema = z.discriminatedUnion('timeInForce', [\n PerpsPlaceGtcOrderRequestSchema,\n PerpsPlaceGtdOrderRequestSchema,\n PerpsPlaceIocOrderRequestSchema,\n PerpsPlaceFokOrderRequestSchema,\n]) satisfies z.ZodType<PerpsOrderRequest>;\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type PerpsTpSlTrigger = {\n triggerPrice: PerpsDecimalInput;\n limitPrice?: PerpsDecimalInput;\n gtdExpiry?: never;\n trailingBps?: never;\n activationPrice?: never;\n};\n\nconst PerpsTpSlTriggerSchema = z.object({\n triggerPrice: PerpsDecimalInputSchema,\n trailingBps: z.never().optional(),\n activationPrice: z.never().optional(),\n gtdExpiry: z.never().optional(),\n limitPrice: PerpsDecimalInputSchema.optional(),\n}) satisfies z.ZodType<PerpsTpSlTrigger>;\n\nconst PerpsPositionCloseQuantitySchema = PerpsDecimalInputSchema.refine(\n (value) =>\n /^\\d+(?:\\.\\d{1,28})?$/.test(value) &&\n BigInt(value.replace('.', '')) > 0n &&\n BigInt(value.replace('.', '')) <= 79_228_162_514_264_337_593_543_950_335n,\n 'Expected a positive, exactly representable decimal quantity (96-bit coefficient, at most 28 decimal places). Use a fixed-point string without exponent notation.',\n).optional();\n\nconst PerpsPositionTpSlTriggerSchema = z.object({\n triggerPrice: PerpsDecimalInputSchema,\n trailingBps: z.never().optional(),\n activationPrice: z.never().optional(),\n gtdExpiry: z.never().optional(),\n quantity: PerpsPositionCloseQuantitySchema,\n}) satisfies z.ZodType<PerpsPositionTpSlTrigger>;\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type PerpsPositionTpSlTrigger = {\n triggerPrice: PerpsDecimalInput;\n trailingBps?: never;\n activationPrice?: never;\n gtdExpiry?: never;\n /**\n * Positive fixed close quantity, clamped to the live position at trigger time.\n * Omit to close the full position. Use a fixed-point string for exact precision;\n * exponent notation, more than 28 decimal places, and coefficients exceeding\n * 96 bits are rejected before submission.\n */\n quantity?: PerpsDecimalInput;\n};\n\n/**\n * A market stop loss that follows favorable marks after activation.\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type PerpsTrailingStop = {\n /** Pullback in basis points, an integer from 10 through 2000. */\n trailingBps: number;\n /** Positive activation mark. Omit to start trailing when the leg arms. */\n activationPrice?: PerpsDecimalInput;\n triggerPrice?: never;\n limitPrice?: never;\n gtdExpiry?: never;\n};\n\n/**\n * A trailing market stop loss protecting an open position.\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type PerpsPositionTrailingStop = PerpsTrailingStop & {\n /** Positive, exactly representable close quantity. Omit to close the full position. */\n quantity?: PerpsDecimalInput;\n};\n\nconst PerpsTrailingStopSchema = z.object({\n trailingBps: z.number().int().min(10).max(2000),\n activationPrice: PerpsDecimalInputSchema.refine(\n (value) =>\n /^\\d+(?:\\.\\d{1,28})?$/.test(value) &&\n BigInt(value.replace('.', '')) > 0n &&\n BigInt(value.replace('.', '')) <= 79_228_162_514_264_337_593_543_950_335n,\n 'Expected a positive, exactly representable fixed-point activation price.',\n ).optional(),\n triggerPrice: z.never().optional(),\n limitPrice: z.never().optional(),\n gtdExpiry: z.never().optional(),\n}) satisfies z.ZodType<PerpsTrailingStop>;\n\nconst PerpsStopLossSchema = z.union([\n PerpsTpSlTriggerSchema,\n PerpsTrailingStopSchema,\n]);\nconst PerpsPositionStopLossSchema = z.union([\n PerpsPositionTpSlTriggerSchema,\n PerpsTrailingStopSchema.extend({\n quantity: PerpsPositionCloseQuantitySchema,\n }),\n]);\n\ntype PerpsTpSlPairRequest =\n | {\n takeProfit: PerpsTpSlTrigger;\n stopLoss?: PerpsTpSlTrigger | PerpsTrailingStop;\n }\n | {\n takeProfit?: PerpsTpSlTrigger;\n stopLoss: PerpsTpSlTrigger | PerpsTrailingStop;\n };\n\nconst PerpsTpSlPairSchema = z.union([\n z.object({\n takeProfit: PerpsTpSlTriggerSchema,\n stopLoss: PerpsStopLossSchema.optional(),\n }),\n z.object({\n takeProfit: PerpsTpSlTriggerSchema.optional(),\n stopLoss: PerpsStopLossSchema,\n }),\n]) satisfies z.ZodType<PerpsTpSlPairRequest>;\n\n/** @internal */\nexport type PerpsCommandRequest = {\n op: PerpsSignedOp;\n expiresAt?: number;\n};\n\n/** @internal */\nexport type PerpsCommandExecutor = {\n readonly builderAttribution?: PerpsBuilderTermsInput;\n /** @internal */\n executeCommand<T>(\n request: PerpsCommandRequest,\n responseSchema: z.ZodType<T>,\n ): Promise<T>;\n};\n\n/** @internal */\nexport type PerpsEventCommandExecutor = PerpsCommandExecutor & {\n /** @internal */\n executeCommandWithEvent<TResponse, TEvent extends PerpsSessionEvent>(\n request: PerpsCommandRequest,\n responseSchema: z.ZodType<TResponse>,\n predicate: (event: PerpsSessionEvent) => event is TEvent,\n ): Promise<readonly [TResponse, TEvent]>;\n};\n\n/** @internal */\nexport type PerpsDeleteCommandRequest<T> = PerpsCommandRequest & {\n path: string;\n responseSchema: z.ZodType<T>;\n};\n\n/** @internal */\nexport type PerpsDeleteCommandExecutor = {\n /** @internal */\n executeDeleteCommand<T>(request: PerpsDeleteCommandRequest<T>): Promise<T>;\n};\n\n/** @internal */\nexport type SignPerpsRestCommand = (\n op: PerpsSignedOp,\n expiresAt?: number,\n) => Record<string, unknown>;\n\n/**\n * Request parameters for posting one or more Perps orders.\n *\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type PostPerpsOrdersRequest = {\n /** Orders to post as one command. */\n orders: PerpsOrderRequest[];\n /** Optional command expiration timestamp in milliseconds. */\n expiresAt?: number;\n};\n\nconst PostPerpsOrdersRequestSchema = z.object({\n orders: z.array(PerpsOrderRequestSchema).min(1),\n expiresAt: z.number().int().positive().optional(),\n}) satisfies z.ZodType<PostPerpsOrdersRequest>;\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport async function postPerpsOrders(\n client: PerpsCommandExecutor,\n request: PostPerpsOrdersRequest,\n): Promise<PerpsPostOrderAck[]> {\n const params = parseUserInput(request, PostPerpsOrdersRequestSchema);\n const builderAttribution = client.builderAttribution;\n return await client.executeCommand(\n {\n op: [\n 'createOrders',\n params.orders.map((order) =>\n toRawPerpsOrder(order, builderAttribution),\n ),\n ],\n expiresAt: params.expiresAt,\n },\n z.array(PerpsPostOrderAckSchema),\n );\n}\n\nconst PlacePerpsOrderWithTpSlRequestSchema = z.intersection(\n PerpsOrderRequestSchema,\n z.intersection(\n PerpsTpSlPairSchema,\n z.object({\n clientOrderId: PerpsClientOrderIdSchema.default(randomClientOrderId),\n expiresAt: z.number().int().positive().optional(),\n }),\n ),\n) satisfies z.ZodType<PlacePerpsOrderWithTpSlRequest>;\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type PlacePerpsOrderRequest =\n | {\n /** Perps instrument identifier to trade. */\n instrumentId: number;\n /** Trade direction. */\n side: OrderSide;\n /** Limit price. */\n price: PerpsDecimalInput;\n /** Order quantity. */\n quantity: PerpsDecimalInput;\n /** Good-till-date execution. */\n timeInForce: PerpsTimeInForce.GTD;\n /** Order expiration in Unix milliseconds, strictly future and at most 18446744073709. Separate from expiresAt. */\n gtdExpiry: number;\n /** Whether the order must rest instead of taking liquidity. */\n postOnly?: boolean;\n /** Whether the order may only reduce or close an existing position. */\n reduceOnly?: boolean;\n /** Optional caller-supplied idempotency identifier. Generated when omitted. */\n clientOrderId?: string;\n /** Optional command expiration timestamp in milliseconds. */\n expiresAt?: number;\n takeProfit?: never;\n stopLoss?: never;\n }\n | {\n /** Perps instrument identifier to trade. */\n instrumentId: number;\n /** Trade direction. */\n side: OrderSide;\n /** Limit price. */\n price: PerpsDecimalInput;\n /** Order quantity. */\n quantity: PerpsDecimalInput;\n /** Good-til-cancelled execution. */\n timeInForce: PerpsTimeInForce.GTC;\n gtdExpiry?: never;\n /** Whether the order must rest instead of taking liquidity. */\n postOnly?: boolean;\n /** Whether the order may only reduce or close an existing position. */\n reduceOnly?: boolean;\n /** Optional caller-supplied idempotency identifier. Generated when omitted. */\n clientOrderId?: string;\n /** Optional command expiration timestamp in milliseconds. */\n expiresAt?: number;\n takeProfit?: never;\n stopLoss?: never;\n }\n | {\n /** Perps instrument identifier to trade. */\n instrumentId: number;\n /** Trade direction. */\n side: OrderSide;\n /** Optional limit price. Omit for market-style execution. */\n price?: PerpsDecimalInput;\n /** Order quantity. */\n quantity: PerpsDecimalInput;\n /** Immediate-or-cancel execution. */\n timeInForce: PerpsTimeInForce.IOC;\n gtdExpiry?: never;\n postOnly?: never;\n /** Whether the order may only reduce or close an existing position. */\n reduceOnly?: boolean;\n /** Optional caller-supplied idempotency identifier. Generated when omitted. */\n clientOrderId?: string;\n /** Optional command expiration timestamp in milliseconds. */\n expiresAt?: number;\n takeProfit?: never;\n stopLoss?: never;\n }\n | {\n /** Perps instrument identifier to trade. */\n instrumentId: number;\n /** Trade direction. */\n side: OrderSide;\n /** Optional limit price. Omit for market-style execution. */\n price?: PerpsDecimalInput;\n /** Order quantity. */\n quantity: PerpsDecimalInput;\n /** Fill-or-kill execution. */\n timeInForce: PerpsTimeInForce.FOK;\n gtdExpiry?: never;\n postOnly?: never;\n /** Whether the order may only reduce or close an existing position. */\n reduceOnly?: boolean;\n /** Optional caller-supplied idempotency identifier. Generated when omitted. */\n clientOrderId?: string;\n /** Optional command expiration timestamp in milliseconds. */\n expiresAt?: number;\n takeProfit?: never;\n stopLoss?: never;\n };\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type PlacePerpsOrderWithTpSlRequest =\n | {\n /** Perps instrument identifier to trade. */\n instrumentId: number;\n /** Trade direction. */\n side: OrderSide;\n /** Limit price. */\n price: PerpsDecimalInput;\n /** Order quantity. */\n quantity: PerpsDecimalInput;\n /** Good-till-date execution. */\n timeInForce: PerpsTimeInForce.GTD;\n /** Order expiration in Unix milliseconds, strictly future and at most 18446744073709. Separate from expiresAt. */\n gtdExpiry: number;\n /** Whether the order must rest instead of taking liquidity. */\n postOnly?: boolean;\n /** Whether the order may only reduce or close an existing position. */\n reduceOnly?: boolean;\n /** Optional caller-supplied idempotency identifier. Generated when omitted. */\n clientOrderId?: string;\n /** Optional command expiration timestamp in milliseconds. */\n expiresAt?: number;\n /** Optional take-profit trigger to place with the entry order. */\n takeProfit?: PerpsTpSlTrigger;\n /** Stop-loss trigger to place with the entry order. */\n stopLoss: PerpsTpSlTrigger | PerpsTrailingStop;\n }\n | {\n /** Perps instrument identifier to trade. */\n instrumentId: number;\n /** Trade direction. */\n side: OrderSide;\n /** Limit price. */\n price: PerpsDecimalInput;\n /** Order quantity. */\n quantity: PerpsDecimalInput;\n /** Good-till-date execution. */\n timeInForce: PerpsTimeInForce.GTD;\n /** Order expiration in Unix milliseconds, strictly future and at most 18446744073709. Separate from expiresAt. */\n gtdExpiry: number;\n /** Whether the order must rest instead of taking liquidity. */\n postOnly?: boolean;\n /** Whether the order may only reduce or close an existing position. */\n reduceOnly?: boolean;\n /** Optional caller-supplied idempotency identifier. Generated when omitted. */\n clientOrderId?: string;\n /** Optional command expiration timestamp in milliseconds. */\n expiresAt?: number;\n /** Take-profit trigger to place with the entry order. */\n takeProfit: PerpsTpSlTrigger;\n /** Optional stop-loss trigger to place with the entry order. */\n stopLoss?: PerpsTpSlTrigger | PerpsTrailingStop;\n }\n | {\n /** Perps instrument identifier to trade. */\n instrumentId: number;\n /** Trade direction. */\n side: OrderSide;\n /** Limit price. */\n price: PerpsDecimalInput;\n /** Order quantity. */\n quantity: PerpsDecimalInput;\n /** Good-til-cancelled execution. */\n timeInForce: PerpsTimeInForce.GTC;\n gtdExpiry?: never;\n /** Whether the order must rest instead of taking liquidity. */\n postOnly?: boolean;\n /** Whether the order may only reduce or close an existing position. */\n reduceOnly?: boolean;\n /** Optional caller-supplied idempotency identifier. Generated when omitted. */\n clientOrderId?: string;\n /** Optional command expiration timestamp in milliseconds. */\n expiresAt?: number;\n /** Take-profit trigger to place with the entry order. */\n takeProfit: PerpsTpSlTrigger;\n /** Optional stop-loss trigger to place with the entry order. */\n stopLoss?: PerpsTpSlTrigger | PerpsTrailingStop;\n }\n | {\n /** Perps instrument identifier to trade. */\n instrumentId: number;\n /** Trade direction. */\n side: OrderSide;\n /** Limit price. */\n price: PerpsDecimalInput;\n /** Order quantity. */\n quantity: PerpsDecimalInput;\n /** Good-til-cancelled execution. */\n timeInForce: PerpsTimeInForce.GTC;\n gtdExpiry?: never;\n /** Whether the order must rest instead of taking liquidity. */\n postOnly?: boolean;\n /** Whether the order may only reduce or close an existing position. */\n reduceOnly?: boolean;\n /** Optional caller-supplied idempotency identifier. Generated when omitted. */\n clientOrderId?: string;\n /** Optional command expiration timestamp in milliseconds. */\n expiresAt?: number;\n /** Optional take-profit trigger to place with the entry order. */\n takeProfit?: PerpsTpSlTrigger;\n /** Stop-loss trigger to place with the entry order. */\n stopLoss: PerpsTpSlTrigger | PerpsTrailingStop;\n }\n | {\n /** Perps instrument identifier to trade. */\n instrumentId: number;\n /** Trade direction. */\n side: OrderSide;\n /** Optional limit price. Omit for market-style execution. */\n price?: PerpsDecimalInput;\n /** Order quantity. */\n quantity: PerpsDecimalInput;\n /** Immediate-or-cancel execution. */\n timeInForce: PerpsTimeInForce.IOC;\n gtdExpiry?: never;\n postOnly?: never;\n /** Whether the order may only reduce or close an existing position. */\n reduceOnly?: boolean;\n /** Optional caller-supplied idempotency identifier. Generated when omitted. */\n clientOrderId?: string;\n /** Optional command expiration timestamp in milliseconds. */\n expiresAt?: number;\n /** Take-profit trigger to place with the entry order. */\n takeProfit: PerpsTpSlTrigger;\n /** Optional stop-loss trigger to place with the entry order. */\n stopLoss?: PerpsTpSlTrigger | PerpsTrailingStop;\n }\n | {\n /** Perps instrument identifier to trade. */\n instrumentId: number;\n /** Trade direction. */\n side: OrderSide;\n /** Optional limit price. Omit for market-style execution. */\n price?: PerpsDecimalInput;\n /** Order quantity. */\n quantity: PerpsDecimalInput;\n /** Immediate-or-cancel execution. */\n timeInForce: PerpsTimeInForce.IOC;\n gtdExpiry?: never;\n postOnly?: never;\n /** Whether the order may only reduce or close an existing position. */\n reduceOnly?: boolean;\n /** Optional caller-supplied idempotency identifier. Generated when omitted. */\n clientOrderId?: string;\n /** Optional command expiration timestamp in milliseconds. */\n expiresAt?: number;\n /** Optional take-profit trigger to place with the entry order. */\n takeProfit?: PerpsTpSlTrigger;\n /** Stop-loss trigger to place with the entry order. */\n stopLoss: PerpsTpSlTrigger | PerpsTrailingStop;\n }\n | {\n /** Perps instrument identifier to trade. */\n instrumentId: number;\n /** Trade direction. */\n side: OrderSide;\n /** Optional limit price. Omit for market-style execution. */\n price?: PerpsDecimalInput;\n /** Order quantity. */\n quantity: PerpsDecimalInput;\n /** Fill-or-kill execution. */\n timeInForce: PerpsTimeInForce.FOK;\n gtdExpiry?: never;\n postOnly?: never;\n /** Whether the order may only reduce or close an existing position. */\n reduceOnly?: boolean;\n /** Optional caller-supplied idempotency identifier. Generated when omitted. */\n clientOrderId?: string;\n /** Optional command expiration timestamp in milliseconds. */\n expiresAt?: number;\n /** Take-profit trigger to place with the entry order. */\n takeProfit: PerpsTpSlTrigger;\n /** Optional stop-loss trigger to place with the entry order. */\n stopLoss?: PerpsTpSlTrigger | PerpsTrailingStop;\n }\n | {\n /** Perps instrument identifier to trade. */\n instrumentId: number;\n /** Trade direction. */\n side: OrderSide;\n /** Optional limit price. Omit for market-style execution. */\n price?: PerpsDecimalInput;\n /** Order quantity. */\n quantity: PerpsDecimalInput;\n /** Fill-or-kill execution. */\n timeInForce: PerpsTimeInForce.FOK;\n gtdExpiry?: never;\n postOnly?: never;\n /** Whether the order may only reduce or close an existing position. */\n reduceOnly?: boolean;\n /** Optional caller-supplied idempotency identifier. Generated when omitted. */\n clientOrderId?: string;\n /** Optional command expiration timestamp in milliseconds. */\n expiresAt?: number;\n /** Optional take-profit trigger to place with the entry order. */\n takeProfit?: PerpsTpSlTrigger;\n /** Stop-loss trigger to place with the entry order. */\n stopLoss: PerpsTpSlTrigger | PerpsTrailingStop;\n };\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type PlacePerpsOrderRequestWithOptions =\n | PlacePerpsOrderRequest\n | PlacePerpsOrderWithTpSlRequest;\n\nconst PlacePerpsOrderRequestSchema = z.intersection(\n PerpsOrderRequestSchema,\n z.object({\n clientOrderId: PerpsClientOrderIdSchema.default(randomClientOrderId),\n expiresAt: z.number().int().positive().optional(),\n takeProfit: z.never().optional(),\n stopLoss: z.never().optional(),\n }),\n) satisfies z.ZodType<PlacePerpsOrderRequest>;\n\nconst SuccessfulPerpsPostOrderAcksSchema = z\n .array(PerpsPostOrderAckSchema)\n .min(1)\n .refine(\n (acknowledgements) =>\n acknowledgements.every(\n (acknowledgement) => acknowledgement.status === 'ok',\n ),\n 'Expected successful Perps order acknowledgements.',\n );\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type PerpsPlacedTpSlOrder = {\n orderId: PerpsOrderId;\n};\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type PerpsPlacedTpSlOrders = {\n takeProfit?: PerpsPlacedTpSlOrder;\n stopLoss?: PerpsPlacedTpSlOrder;\n};\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type PlacePerpsOrderResult = {\n order: PerpsOrder;\n};\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type PlacePerpsOrderWithTpSlResult = PlacePerpsOrderResult & {\n tpSl: PerpsPlacedTpSlOrders;\n};\n\nfunction hasPerpsTpSl(\n request: PlacePerpsOrderRequestWithOptions,\n): request is PlacePerpsOrderWithTpSlRequest {\n return request.takeProfit !== undefined || request.stopLoss !== undefined;\n}\n\n/**\n * Places one Perps order and resolves with the first matching orders update.\n *\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport async function placePerpsOrder(\n client: PerpsEventCommandExecutor,\n request: PlacePerpsOrderWithTpSlRequest,\n): Promise<PlacePerpsOrderWithTpSlResult>;\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport async function placePerpsOrder(\n client: PerpsEventCommandExecutor,\n request: PlacePerpsOrderRequest,\n): Promise<PlacePerpsOrderResult>;\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport async function placePerpsOrder(\n client: PerpsEventCommandExecutor,\n request: PlacePerpsOrderRequestWithOptions,\n): Promise<PlacePerpsOrderResult | PlacePerpsOrderWithTpSlResult>;\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport async function placePerpsOrder(\n client: PerpsEventCommandExecutor,\n request: PlacePerpsOrderRequestWithOptions,\n): Promise<PlacePerpsOrderResult | PlacePerpsOrderWithTpSlResult> {\n if (hasPerpsTpSl(request)) {\n return await placePerpsOrderWithTpSl(client, request);\n }\n\n const params = parseUserInput(request, PlacePerpsOrderRequestSchema);\n const builderAttribution = client.builderAttribution;\n const [, update] = await client.executeCommandWithEvent(\n {\n op: ['createOrders', [toRawPerpsOrder(params, builderAttribution)]],\n expiresAt: params.expiresAt,\n },\n SuccessfulPerpsPostOrderAcksSchema,\n isOrderUpdateFor(params.clientOrderId),\n );\n return { order: update.payload };\n}\n\nasync function placePerpsOrderWithTpSl(\n client: PerpsEventCommandExecutor,\n request: PlacePerpsOrderWithTpSlRequest,\n): Promise<PlacePerpsOrderWithTpSlResult> {\n const params = parseUserInput(request, PlacePerpsOrderWithTpSlRequestSchema);\n const builderAttribution = client.builderAttribution;\n const orders: RawPerpsOrderInput[] = [\n toRawPerpsOrder(params, builderAttribution),\n ];\n const exitBuy = params.side === OrderSide.SELL;\n\n if (params.takeProfit !== undefined) {\n orders.push(\n toRawPerpsTpSlOrder({\n buy: exitBuy,\n instrumentId: params.instrumentId,\n kind: PerpsTpSlKind.TakeProfit,\n quantity: toDecimalString(params.quantity),\n builderAttribution,\n trigger: params.takeProfit,\n }),\n );\n }\n if (params.stopLoss !== undefined) {\n orders.push(\n toRawPerpsTpSlOrder({\n buy: exitBuy,\n instrumentId: params.instrumentId,\n kind: PerpsTpSlKind.StopLoss,\n quantity: toDecimalString(params.quantity),\n builderAttribution,\n trigger: params.stopLoss,\n }),\n );\n }\n\n const [acknowledgements, update] = await client.executeCommandWithEvent(\n {\n op: ['createOrders', orders, PerpsTpSlScope.Order],\n expiresAt: params.expiresAt,\n },\n SuccessfulPerpsPostOrderAcksSchema,\n isOrderUpdateFor(params.clientOrderId),\n );\n\n let triggerIndex = 1;\n const tpSl: PerpsPlacedTpSlOrders = {};\n if (params.takeProfit !== undefined) {\n tpSl.takeProfit = placedOrderFrom(\n expectPresent(\n acknowledgements[triggerIndex++],\n 'Expected Perps take-profit acknowledgement.',\n ),\n );\n }\n if (params.stopLoss !== undefined) {\n tpSl.stopLoss = placedOrderFrom(\n expectPresent(\n acknowledgements[triggerIndex],\n 'Expected Perps stop-loss acknowledgement.',\n ),\n );\n }\n\n return { order: update.payload, tpSl };\n}\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type PlacePerpsPositionTpSlRequest =\n | {\n /** Perps instrument identifier whose current position should receive TP/SL protection. */\n instrumentId: number;\n /** Take-profit trigger to place for the current position. */\n takeProfit: PerpsPositionTpSlTrigger;\n /** Optional stop-loss trigger to place alongside the take-profit. */\n stopLoss?: PerpsPositionTpSlTrigger | PerpsPositionTrailingStop;\n /** Optional command expiration timestamp in milliseconds. */\n expiresAt?: number;\n }\n | {\n /** Perps instrument identifier whose current position should receive TP/SL protection. */\n instrumentId: number;\n /** Optional take-profit trigger to place alongside the stop-loss. */\n takeProfit?: PerpsPositionTpSlTrigger;\n /** Stop-loss trigger to place for the current position. */\n stopLoss: PerpsPositionTpSlTrigger | PerpsPositionTrailingStop;\n /** Optional command expiration timestamp in milliseconds. */\n expiresAt?: number;\n };\n\nconst PerpsPositionTpSlRequiredPairSchema = z.union([\n z.object({\n takeProfit: PerpsPositionTpSlTriggerSchema,\n stopLoss: PerpsPositionStopLossSchema.optional(),\n }),\n z.object({\n takeProfit: PerpsPositionTpSlTriggerSchema.optional(),\n stopLoss: PerpsPositionStopLossSchema,\n }),\n]);\n\nconst PlacePerpsPositionTpSlRequestSchema = z.intersection(\n PerpsPositionTpSlRequiredPairSchema,\n z.object({\n instrumentId: PerpsInstrumentIdSchema,\n expiresAt: z.number().int().positive().optional(),\n }),\n) satisfies z.ZodType<PlacePerpsPositionTpSlRequest>;\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type PlacePerpsPositionTpSlResult = {\n tpSl: PerpsPlacedTpSlOrders;\n};\n\ntype PerpsPortfolioReader = {\n fetchPortfolio(): Promise<PerpsPortfolio>;\n};\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport async function placePerpsPositionTpSl(\n client: PerpsCommandExecutor & PerpsPortfolioReader,\n request: PlacePerpsPositionTpSlRequest,\n): Promise<PlacePerpsPositionTpSlResult> {\n const params = parseUserInput(request, PlacePerpsPositionTpSlRequestSchema);\n const builderAttribution = client.builderAttribution;\n const buy = positionTpSlExitBuy(\n await client.fetchPortfolio(),\n params.instrumentId,\n );\n const orders: RawPerpsOrderInput[] = [];\n\n if (params.takeProfit !== undefined) {\n orders.push(\n toRawPerpsTpSlOrder({\n buy,\n instrumentId: params.instrumentId,\n kind: PerpsTpSlKind.TakeProfit,\n quantity: params.takeProfit.quantity ?? '0',\n builderAttribution,\n trigger: params.takeProfit,\n }),\n );\n }\n if (params.stopLoss !== undefined) {\n orders.push(\n toRawPerpsTpSlOrder({\n buy,\n instrumentId: params.instrumentId,\n kind: PerpsTpSlKind.StopLoss,\n quantity: params.stopLoss.quantity ?? '0',\n builderAttribution,\n trigger: params.stopLoss,\n }),\n );\n }\n\n const acknowledgements = await client.executeCommand(\n {\n op: ['createOrders', orders, PerpsTpSlScope.Position],\n expiresAt: params.expiresAt,\n },\n z.array(PerpsPostOrderAckSchema),\n );\n\n for (const acknowledgement of acknowledgements) {\n if (acknowledgement.status === 'err') {\n throw new RequestRejectedError(acknowledgement.error, { status: 200 });\n }\n }\n\n let triggerIndex = 0;\n const tpSl: PerpsPlacedTpSlOrders = {};\n if (params.takeProfit !== undefined) {\n tpSl.takeProfit = placedOrderFrom(\n expectPresent(\n acknowledgements[triggerIndex++],\n 'Expected Perps take-profit acknowledgement.',\n ),\n );\n }\n if (params.stopLoss !== undefined) {\n tpSl.stopLoss = placedOrderFrom(\n expectPresent(\n acknowledgements[triggerIndex],\n 'Expected Perps stop-loss acknowledgement.',\n ),\n );\n }\n\n return { tpSl };\n}\n\nconst DEFAULT_PERPS_CANCEL_MAX_ATTEMPTS = 4;\nconst DEFAULT_PERPS_CANCEL_MAX_ELAPSED_MS = 2_000;\nconst PERPS_CANCEL_RETRY_BASE_DELAY_MS = 100;\nconst PERPS_CANCEL_RETRY_MAX_DELAY_MS = 1_000;\n\nconst PerpsCancelRetryOptionsSchema = z\n .object({\n maxAttempts: z\n .number()\n .int()\n .positive()\n .default(DEFAULT_PERPS_CANCEL_MAX_ATTEMPTS),\n maxElapsedMs: z\n .number()\n .int()\n .positive()\n .default(DEFAULT_PERPS_CANCEL_MAX_ELAPSED_MS),\n })\n .default({\n maxAttempts: DEFAULT_PERPS_CANCEL_MAX_ATTEMPTS,\n maxElapsedMs: DEFAULT_PERPS_CANCEL_MAX_ELAPSED_MS,\n }) satisfies z.ZodType<PerpsCancelRetryOptions>;\n\nconst PerpsCancelOptionsSchema = z.object({\n expiresAt: z.number().int().positive().optional(),\n retry: z.union([z.literal(false), PerpsCancelRetryOptionsSchema]).default({\n maxAttempts: DEFAULT_PERPS_CANCEL_MAX_ATTEMPTS,\n maxElapsedMs: DEFAULT_PERPS_CANCEL_MAX_ELAPSED_MS,\n }),\n signal: z\n .custom<AbortSignal>(\n (value) => value instanceof AbortSignal,\n 'Expected an AbortSignal.',\n )\n .optional(),\n}) satisfies z.ZodType<PerpsCancelOptions>;\n\n/**\n * Bounds automatic retries for transient Perps cancellation rejections.\n *\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type PerpsCancelRetryOptions = {\n /** Maximum attempts per order, including the initial request. @defaultValue 4 */\n maxAttempts?: number;\n /**\n * Maximum elapsed time before starting a retry, in milliseconds. Retries\n * also stop at `expiresAt`, whichever limit is reached first.\n * @defaultValue 2_000\n */\n maxElapsedMs?: number;\n};\n\n/**\n * Shared options for Perps order cancellation.\n *\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type PerpsCancelOptions = {\n /**\n * Optional command expiration timestamp in milliseconds. Automatic retries\n * stop at this timestamp even when `maxElapsedMs` would allow more time.\n */\n expiresAt?: number;\n /** Automatic retry limits, or `false` to make only one attempt. */\n retry?: PerpsCancelRetryOptions | false;\n /**\n * Signal that prevents the first attempt when already aborted and stops\n * further retries after the current attempt settles. Does not cancel an\n * in-flight command or suppress its failure.\n */\n signal?: AbortSignal;\n};\n\nconst CancelPerpsOrderRequestSchema = z.union([\n PerpsCancelOptionsSchema.extend({\n orderId: PerpsOrderIdSchema,\n clientOrderId: z.undefined().optional(),\n }),\n PerpsCancelOptionsSchema.extend({\n clientOrderId: PerpsClientOrderIdSchema,\n orderId: z.undefined().optional(),\n }),\n]) satisfies z.ZodType<CancelPerpsOrderRequest>;\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type CancelPerpsOrderRequest = PerpsCancelOptions &\n (\n | {\n /** Order identifier to cancel. */\n orderId: number;\n clientOrderId?: never;\n }\n | {\n /** Caller-supplied idempotency identifier to cancel. */\n clientOrderId: string;\n orderId?: never;\n }\n );\n\n/**\n * @remarks\n * First-attempt failures propagate unchanged. A later attempt failure throws\n * {@link PerpsCancelRetryError} with the last received results, the original\n * request positions retried in the failed attempt, and the original cause.\n *\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport async function cancelPerpsOrder(\n client: PerpsCommandExecutor,\n request: CancelPerpsOrderRequest,\n): Promise<PerpsCancelOrderResult> {\n const params = parseUserInput(request, CancelPerpsOrderRequestSchema);\n const [result] =\n params.orderId !== undefined\n ? await cancelPerpsOrders(client, {\n orderIds: [params.orderId],\n expiresAt: params.expiresAt,\n retry: params.retry,\n signal: params.signal,\n })\n : await cancelPerpsOrders(client, {\n clientOrderIds: [params.clientOrderId],\n expiresAt: params.expiresAt,\n retry: params.retry,\n signal: params.signal,\n });\n return expectPresent(result, 'Expected Perps cancel order result.');\n}\n\nconst CancelPerpsOrdersRequestSchema = z.union([\n PerpsCancelOptionsSchema.extend({\n orderIds: z.array(PerpsOrderIdSchema).min(1),\n clientOrderIds: z.undefined().optional(),\n }),\n PerpsCancelOptionsSchema.extend({\n clientOrderIds: z.array(PerpsClientOrderIdSchema).min(1),\n orderIds: z.undefined().optional(),\n }),\n]) satisfies z.ZodType<CancelPerpsOrdersRequest>;\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type CancelPerpsOrdersRequest = PerpsCancelOptions &\n (\n | {\n /** Order identifiers to cancel. */\n orderIds: number[];\n clientOrderIds?: never;\n }\n | {\n /** Caller-supplied idempotency identifiers to cancel. */\n clientOrderIds: string[];\n orderIds?: never;\n }\n );\n\n/**\n * @remarks\n * First-attempt failures propagate unchanged. A later attempt failure throws\n * {@link PerpsCancelRetryError} with the last received results, the original\n * request positions retried in the failed attempt, and the original cause.\n *\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport async function cancelPerpsOrders(\n client: PerpsCommandExecutor,\n request: CancelPerpsOrdersRequest,\n): Promise<PerpsCancelOrderResult[]> {\n const params = parseUserInput(request, CancelPerpsOrdersRequestSchema);\n if (params.orderIds !== undefined) {\n return await retryPerpsOrderCancellations(\n params.orderIds,\n params,\n async (orderIds) =>\n await client.executeCommand(\n {\n op: ['cancelOrders', orderIds],\n expiresAt: params.expiresAt,\n },\n z.array(PerpsCancelOrderResultSchema),\n ),\n );\n }\n return await retryPerpsOrderCancellations(\n params.clientOrderIds,\n params,\n async (clientOrderIds) =>\n await client.executeCommand(\n {\n op: ['cancelOrdersCOID', clientOrderIds],\n expiresAt: params.expiresAt,\n },\n z.array(PerpsCancelOrderResultSchema),\n ),\n );\n}\n\ntype ParsedPerpsCancelOptions = z.output<typeof PerpsCancelOptionsSchema>;\n\ntype PendingPerpsCancellation<TIdentifier> = {\n identifier: TIdentifier;\n resultIndex: number;\n};\n\nasync function retryPerpsOrderCancellations<TIdentifier>(\n identifiers: TIdentifier[],\n options: ParsedPerpsCancelOptions,\n execute: (identifiers: TIdentifier[]) => Promise<PerpsCancelOrderResult[]>,\n): Promise<PerpsCancelOrderResult[]> {\n const maxAttempts = options.retry === false ? 1 : options.retry.maxAttempts;\n const retryDeadline =\n options.retry === false\n ? Number.POSITIVE_INFINITY\n : Math.min(\n Date.now() + options.retry.maxElapsedMs,\n options.expiresAt ?? Number.POSITIVE_INFINITY,\n );\n const finalResults = new Array<PerpsCancelOrderResult | undefined>(\n identifiers.length,\n );\n let pending = identifiers.map((identifier, resultIndex) => ({\n identifier,\n resultIndex,\n }));\n let attempts = 0;\n\n assertPerpsCancelNotAborted(options.signal);\n while (pending.length > 0) {\n if (attempts > 0) {\n const remainingMs = retryDeadline - Date.now();\n const delayMs = perpsCancelRetryDelayMs(attempts);\n if (remainingMs <= 0 || delayMs >= remainingMs) break;\n const retry = await waitForPerpsCancelRetry(delayMs, options.signal);\n if (!retry || options.signal?.aborted || Date.now() >= retryDeadline)\n break;\n }\n\n let attemptResults: PerpsCancelOrderResult[];\n try {\n attemptResults = await execute(\n pending.map(({ identifier }) => identifier),\n );\n const requestRejection = perpsCancelRequestRejectionFrom(attemptResults);\n if (requestRejection !== undefined) {\n throw new RequestRejectedError(requestRejection, { status: 200 });\n }\n if (attemptResults.length !== pending.length) {\n throw new UnexpectedResponseError(\n 'Perps cancel response did not include one result per requested order.',\n );\n }\n } catch (cause) {\n if (attempts === 0) throw cause;\n throw new PerpsCancelRetryError('Perps cancellation retry failed.', {\n cause,\n results: finalResults.map((result) =>\n expectPresent(result, 'Expected a previous Perps cancel result.'),\n ),\n pendingIndexes: pending.map(({ resultIndex }) => resultIndex),\n });\n }\n\n attempts += 1;\n const retryable: Array<PendingPerpsCancellation<TIdentifier>> = [];\n for (const [index, result] of attemptResults.entries()) {\n const target = expectPresent(\n pending[index],\n 'Expected a pending Perps cancellation.',\n );\n finalResults[target.resultIndex] = result;\n if (\n attempts < maxAttempts &&\n result.status === 'err' &&\n result.error === PerpsKnownCancelOrderErrorCode.OrderInFlight\n ) {\n retryable.push(target);\n }\n }\n pending = retryable;\n }\n\n return finalResults.map((result) =>\n expectPresent(result, 'Expected a final Perps cancel result.'),\n );\n}\n\nfunction perpsCancelRequestRejectionFrom(\n results: PerpsCancelOrderResult[],\n): string | undefined {\n const [result] = results;\n if (\n results.length !== 1 ||\n result?.status !== 'err' ||\n result.orderId !== undefined ||\n result.clientOrderId !== undefined\n ) {\n return undefined;\n }\n return result.error;\n}\n\nfunction perpsCancelRetryDelayMs(retryNumber: number): number {\n const maximumDelayMs = Math.min(\n PERPS_CANCEL_RETRY_BASE_DELAY_MS * 2 ** (retryNumber - 1),\n PERPS_CANCEL_RETRY_MAX_DELAY_MS,\n );\n return Math.random() * maximumDelayMs;\n}\n\nfunction waitForPerpsCancelRetry(\n delayMs: number,\n signal: AbortSignal | undefined,\n): Promise<boolean> {\n if (signal?.aborted) return Promise.resolve(false);\n if (delayMs <= 0) {\n return Promise.resolve(true);\n }\n if (signal === undefined) {\n return new Promise((resolve) =>\n setNonBlockingTimeout(() => resolve(true), delayMs),\n );\n }\n\n const abortSignal = signal;\n return new Promise((resolve) => {\n const timer = setNonBlockingTimeout(() => {\n abortSignal.removeEventListener('abort', onAbort);\n resolve(true);\n }, delayMs);\n function onAbort() {\n clearTimeout(timer);\n resolve(false);\n }\n abortSignal.addEventListener('abort', onAbort, { once: true });\n });\n}\n\nfunction assertPerpsCancelNotAborted(signal: AbortSignal | undefined): void {\n if (signal?.aborted) {\n throw OperationAbortedError.fromReason(signal.reason);\n }\n}\n\nconst CancelAllPerpsOrdersRequestSchema = z\n .object({\n instrumentId: PerpsInstrumentIdSchema.optional(),\n expiresAt: z.number().int().positive().optional(),\n })\n .default({}) satisfies z.ZodType<CancelAllPerpsOrdersRequest>;\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type CancelAllPerpsOrdersRequest = {\n /** Optional Perps instrument identifier to scope cancellation. */\n instrumentId?: number;\n /** Optional command expiration timestamp in milliseconds. */\n expiresAt?: number;\n};\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport async function cancelAllOrders(\n client: PerpsDeleteCommandExecutor,\n request?: CancelAllPerpsOrdersRequest,\n): Promise<void> {\n const params = parseUserInput(request, CancelAllPerpsOrdersRequestSchema);\n const op = [\n 'cancelAll',\n params.instrumentId === undefined ? [] : [params.instrumentId],\n ] as const satisfies PerpsSignedOp;\n await client.executeDeleteCommand({\n path: '/v1/trade/orders/all',\n op,\n responseSchema: PerpsCancelAllOrdersResponseSchema,\n expiresAt: params.expiresAt,\n });\n}\n\nconst MINIMUM_AUTO_CANCEL_DELAY_MILLISECONDS = 5_000;\n\nconst ArmPerpsAutoCancelRequestSchema = z\n .object({\n cancelAt: z.number().int().positive(),\n expiresAt: z.number().int().positive().optional(),\n })\n .superRefine((params, context) => {\n const minimumCancelAt = Date.now() + MINIMUM_AUTO_CANCEL_DELAY_MILLISECONDS;\n\n if (params.cancelAt < minimumCancelAt) {\n context.addIssue({\n code: 'custom',\n message: 'cancelAt must be at least 5 seconds in the future.',\n path: ['cancelAt'],\n });\n }\n }) satisfies z.ZodType<ArmPerpsAutoCancelRequest>;\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type ArmPerpsAutoCancelRequest = {\n /**\n * Unix timestamp in milliseconds at which all open orders are cancelled.\n * Must be at least five seconds in the future.\n */\n cancelAt: number;\n /** Optional command expiration timestamp in milliseconds. */\n expiresAt?: number;\n};\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type ArmPerpsAutoCancelError =\n | AutoCancelDailyLimitError\n | RateLimitError\n | RequestRejectedError\n | SigningError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport const ArmPerpsAutoCancelError = makeErrorGuard(\n AutoCancelDailyLimitError,\n RateLimitError,\n RequestRejectedError,\n SigningError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n// Rejection identifier reported by the API when arming exceeds the daily\n// trigger limit. The rejection message is the identifier followed by request\n// context in parentheses.\nconst AUTO_CANCEL_DAILY_LIMIT_REACHED = 'auto_cancel_daily_limit_reached';\n\n/**\n * Arms the one-shot auto-cancel switch that cancels all open Perps orders at\n * the requested time. Arming again replaces the previous schedule.\n *\n * @throws {@link ArmPerpsAutoCancelError}\n * Thrown on failure.\n *\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport async function armPerpsAutoCancel(\n client: ServiceClient,\n signCommand: SignPerpsRestCommand,\n request: ArmPerpsAutoCancelRequest,\n): Promise<void> {\n const params = parseUserInput(request, ArmPerpsAutoCancelRequestSchema);\n const op = ['autoCancel', [params.cancelAt]] as const satisfies PerpsSignedOp;\n const command = signCommand(op, params.expiresAt);\n\n await client\n .patch('/v1/trade/auto-cancel', {\n schema: PerpsAutoCancelResponseSchema,\n json: {\n ...command,\n op: toPerpsCommandBodyOp(op),\n },\n })\n .catch((error: unknown) => {\n throw error instanceof RequestRejectedError &&\n error.message.startsWith(`${AUTO_CANCEL_DAILY_LIMIT_REACHED} (`)\n ? new AutoCancelDailyLimitError(\n 'Auto-cancel daily trigger limit reached.',\n { cause: error },\n )\n : error;\n });\n}\n\nconst DisarmPerpsAutoCancelRequestSchema = z\n .object({\n expiresAt: z.number().int().positive().optional(),\n })\n .default({}) satisfies z.ZodType<DisarmPerpsAutoCancelRequest>;\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type DisarmPerpsAutoCancelRequest = {\n /** Optional command expiration timestamp in milliseconds. */\n expiresAt?: number;\n};\n\n/**\n * Disarms the auto-cancel schedule without triggering it. Disarming is\n * allowed even when the daily trigger limit has been reached.\n *\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport async function disarmPerpsAutoCancel(\n client: ServiceClient,\n signCommand: SignPerpsRestCommand,\n request?: DisarmPerpsAutoCancelRequest,\n): Promise<void> {\n const params = parseUserInput(request, DisarmPerpsAutoCancelRequestSchema);\n const op = ['autoCancel', [0]] as const satisfies PerpsSignedOp;\n const command = signCommand(op, params.expiresAt);\n\n await client.patch('/v1/trade/auto-cancel', {\n schema: PerpsAutoCancelResponseSchema,\n json: {\n ...command,\n op: toPerpsCommandBodyOp(op),\n },\n });\n}\n\nconst UpdatePerpsLeverageRequestSchema = z.object({\n instrumentId: PerpsInstrumentIdSchema,\n leverage: z.number().int().positive(),\n crossMargin: z.boolean(),\n}) satisfies z.ZodType<UpdatePerpsLeverageRequest>;\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type UpdatePerpsLeverageRequest = {\n /** Perps instrument identifier whose leverage should be updated. */\n instrumentId: number;\n /** Target leverage multiplier. */\n leverage: number;\n /** Whether the instrument should use cross margin. */\n crossMargin: boolean;\n};\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type UpdatePerpsLeverageError =\n | RequestRejectedError\n | SigningError\n | TransportError\n | UserInputError;\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport const UpdatePerpsLeverageError = makeErrorGuard(\n RequestRejectedError,\n SigningError,\n TransportError,\n UserInputError,\n);\n\n/**\n * Updates Perps leverage and margin mode for an instrument.\n *\n * @throws {@link UpdatePerpsLeverageError}\n * Thrown on failure.\n *\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport async function updatePerpsLeverage(\n client: PerpsCommandExecutor,\n request: UpdatePerpsLeverageRequest,\n): Promise<PerpsUpdateLeverageResult> {\n const params = parseUserInput(request, UpdatePerpsLeverageRequestSchema);\n return await client.executeCommand(\n {\n op: [\n 'updateLeverage',\n [params.instrumentId, params.leverage, params.crossMargin],\n ],\n },\n PerpsUpdateLeverageResultSchema,\n );\n}\n\nconst UpdatePerpsLeveragesRequestSchema = z.object({\n updates: z\n .array(\n UpdatePerpsLeverageRequestSchema.extend({\n instrumentId: z.number().int().nonnegative().max(0xffff_ffff),\n leverage: z.number().int().positive().max(0xffff_ffff),\n }),\n )\n .min(1)\n .max(100)\n .superRefine((updates, context) => {\n const instrumentIds = new Set<number>();\n for (const [index, update] of updates.entries()) {\n if (instrumentIds.has(update.instrumentId)) {\n context.addIssue({\n code: 'custom',\n message: 'Expected each instrumentId to be unique',\n path: [index, 'instrumentId'],\n });\n }\n instrumentIds.add(update.instrumentId);\n }\n }),\n}) satisfies z.ZodType<UpdatePerpsLeveragesRequest>;\n\n/**\n * Request parameters for updating leverage and margin mode for one or more\n * Perps instruments.\n *\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type UpdatePerpsLeveragesRequest = {\n /** One to 100 updates with unique instrument identifiers. */\n updates: UpdatePerpsLeverageRequest[];\n};\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type UpdatePerpsLeveragesError =\n | RequestRejectedError\n | SigningError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport const UpdatePerpsLeveragesError = makeErrorGuard(\n RequestRejectedError,\n SigningError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Updates Perps leverage and margin mode for one or more instruments.\n *\n * @remarks\n * Updates are processed sequentially and are not atomic. Results preserve\n * request order. Per-instrument rejections, including `internal_error`, are\n * returned as data; `internal_error` may represent an unknown application\n * outcome for that instrument. A whole-request `internal_error` also has an\n * unknown application outcome; reconcile account state before retrying the\n * batch.\n *\n * @throws {@link UpdatePerpsLeveragesError}\n * Thrown when the complete request is rejected, cannot be sent, or returns inconsistent results.\n *\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport async function updatePerpsLeverages(\n client: PerpsCommandExecutor,\n request: UpdatePerpsLeveragesRequest,\n): Promise<PerpsUpdateLeverageBatchResult[]> {\n const params = parseUserInput(request, UpdatePerpsLeveragesRequestSchema);\n const results = await client.executeCommand(\n {\n op: [\n 'updateLeverages',\n params.updates.map((update) => [\n update.instrumentId,\n update.leverage,\n update.crossMargin,\n ]),\n ],\n },\n z.array(PerpsUpdateLeverageBatchResultSchema),\n );\n if (\n results.length !== params.updates.length ||\n results.some(\n (result, index) =>\n result.instrumentId !== params.updates[index]?.instrumentId,\n )\n ) {\n throw new UnexpectedResponseError(\n 'Perps batch leverage results did not match the requested instruments.',\n );\n }\n return results;\n}\n\nconst UpdatePerpsMarginRequestSchema = z.object({\n instrumentId: PerpsInstrumentIdSchema,\n amount: PerpsDecimalInputSchema,\n}) satisfies z.ZodType<UpdatePerpsMarginRequest>;\n\n/**\n * Request parameters for adjusting isolated margin on a Perps position.\n *\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type UpdatePerpsMarginRequest = {\n /** Perps instrument identifier whose isolated margin should be adjusted. */\n instrumentId: number;\n /** Margin adjustment. Positive values add margin; negative values remove it. */\n amount: PerpsDecimalInput;\n};\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type UpdatePerpsMarginError =\n | RequestRejectedError\n | SigningError\n | TransportError\n | UserInputError;\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport const UpdatePerpsMarginError = makeErrorGuard(\n RequestRejectedError,\n SigningError,\n TransportError,\n UserInputError,\n);\n\n/**\n * Adjusts isolated margin for an instrument position.\n *\n * @throws {@link UpdatePerpsMarginError}\n * Thrown on failure.\n *\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport async function updatePerpsMargin(\n client: PerpsCommandExecutor,\n request: UpdatePerpsMarginRequest,\n): Promise<void> {\n const params = parseUserInput(request, UpdatePerpsMarginRequestSchema);\n const amount = toDecimalString(params.amount);\n const ack = await client.executeCommand(\n { op: ['updateMargin', [params.instrumentId, amount]] },\n PerpsCommandAckSchema,\n );\n if (ack.status === 'err') {\n throw new RequestRejectedError(ack.error, { status: 200 });\n }\n}\n\nfunction randomClientOrderId(): PerpsClientOrderId {\n const bytes = globalThis.crypto.getRandomValues(new Uint8Array(16));\n return PerpsClientOrderIdSchema.parse(\n Array.from(bytes, (byte) => byte.toString(16).padStart(2, '0')).join(''),\n );\n}\n\nfunction isOrderUpdateFor(clientOrderId: PerpsClientOrderId) {\n return (event: PerpsSessionEvent): event is PerpsOrderUpdateEvent =>\n event.type === 'order' && event.payload.clientOrderId === clientOrderId;\n}\n\nfunction placedOrderFrom(\n acknowledgement: PerpsPostOrderAck,\n): PerpsPlacedTpSlOrder {\n if (acknowledgement.status === 'err') {\n throw new RequestRejectedError(acknowledgement.error, { status: 200 });\n }\n\n return { orderId: acknowledgement.orderId };\n}\n\nfunction positionTpSlExitBuy(\n portfolio: PerpsPortfolio,\n instrumentId: PerpsInstrumentId,\n): boolean {\n const position = portfolio.positions.find(\n (item) => item.instrumentId === instrumentId,\n );\n const sign = position === undefined ? 0 : decimalSign(position.size);\n\n if (sign === 0) {\n throw new UserInputError(\n `No open Perps position for instrument ${instrumentId}.`,\n );\n }\n\n return sign < 0;\n}\n\nfunction decimalSign(value: string): -1 | 0 | 1 {\n const trimmed = value.trim();\n const digits = trimmed.replace(/^[+-]/, '').replace('.', '');\n if (/^0*$/.test(digits)) return 0;\n return trimmed.startsWith('-') ? -1 : 1;\n}\n\ntype RawPerpsOrderInput = readonly [\n PerpsInstrumentId,\n boolean,\n string | undefined,\n string,\n PerpsTimeInForce | undefined,\n boolean,\n true | undefined,\n string | undefined,\n RawPerpsTpSlTriggerInput | undefined,\n number | undefined,\n readonly [string, string] | undefined,\n];\n\ntype RawPerpsTpSlTriggerInput = readonly [\n boolean | undefined,\n string | undefined,\n PerpsTpSlKind,\n number?,\n string?,\n];\n\nfunction toRawPerpsOrder(\n order: z.output<typeof PerpsOrderRequestSchema>,\n builderAttribution: PerpsBuilderTermsInput | undefined,\n): RawPerpsOrderInput {\n return [\n order.instrumentId,\n order.side === OrderSide.BUY,\n order.price === undefined ? undefined : toDecimalString(order.price),\n toDecimalString(order.quantity),\n order.timeInForce,\n order.postOnly ?? false,\n order.reduceOnly === true ? true : undefined,\n order.clientOrderId,\n undefined,\n order.gtdExpiry,\n builderAttribution === undefined\n ? undefined\n : [builderAttribution.builderAddress, builderAttribution.feeRate],\n ];\n}\n\nfunction toRawPerpsTpSlOrder(request: {\n buy: boolean;\n instrumentId: PerpsInstrumentId;\n kind: PerpsTpSlKind;\n quantity: string;\n builderAttribution?: PerpsBuilderTermsInput;\n trigger: z.output<typeof PerpsStopLossSchema>;\n}): RawPerpsOrderInput {\n return [\n request.instrumentId,\n request.buy,\n request.trigger.limitPrice === undefined\n ? undefined\n : toDecimalString(request.trigger.limitPrice),\n request.quantity,\n undefined,\n false,\n true,\n undefined,\n request.trigger.trailingBps === undefined\n ? [\n request.trigger.limitPrice === undefined ? true : undefined,\n toDecimalString(request.trigger.triggerPrice),\n request.kind,\n ]\n : [\n true,\n undefined,\n request.kind,\n request.trigger.trailingBps,\n request.trigger.activationPrice === undefined\n ? undefined\n : toDecimalString(request.trigger.activationPrice),\n ],\n undefined,\n request.builderAttribution == null\n ? undefined\n : [\n request.builderAttribution.builderAddress,\n request.builderAttribution.feeRate,\n ],\n ];\n}\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport function toPerpsCommandBodyOp(op: PerpsSignedOp) {\n const [type, args, group] = op;\n switch (type) {\n case 'createOrders':\n return withOptionalGroup(\n {\n args: (args as RawPerpsOrderInput[]).map(toPerpsOrderBody),\n type,\n },\n group,\n );\n case 'cancelOrders':\n case 'cancelOrdersCOID':\n return { type, args };\n case 'autoCancel': {\n const [time] = args as readonly [number];\n return { type, args: { time } };\n }\n case 'cancelAll': {\n const [instrumentId] = args as readonly [PerpsInstrumentId | undefined];\n return {\n type,\n args: instrumentId === undefined ? {} : { iid: instrumentId },\n };\n }\n case 'updateLeverage': {\n const [instrumentId, leverage, crossMargin] = args as readonly [\n PerpsInstrumentId,\n number,\n boolean,\n ];\n return {\n type,\n args: {\n cross: crossMargin,\n iid: instrumentId,\n lev: leverage,\n },\n };\n }\n case 'updateLeverages': {\n const updates = args as ReadonlyArray<\n readonly [PerpsInstrumentId, number, boolean]\n >;\n return {\n type,\n args: updates.map(([instrumentId, leverage, crossMargin]) => ({\n cross: crossMargin,\n iid: instrumentId,\n lev: leverage,\n })),\n };\n }\n case 'updateMargin': {\n const [instrumentId, amount] = args as readonly [\n PerpsInstrumentId,\n string,\n ];\n return {\n type,\n args: {\n amt: amount,\n iid: instrumentId,\n },\n };\n }\n default:\n invariant(false, `Unsupported Perps command: ${String(type)}`);\n }\n}\n\nfunction toPerpsOrderBody(order: RawPerpsOrderInput) {\n const body: Record<string, unknown> = {\n iid: order[0],\n buy: order[1],\n po: order[5],\n qty: order[3],\n };\n if (order[4] !== undefined) body.tif = order[4];\n if (order[6]) body.ro = order[6];\n if (order[2] !== undefined) body.p = order[2];\n if (order[7] !== undefined) body.c = order[7];\n if (order[8] !== undefined) body.tr = toPerpsTpSlTriggerBody(order[8]);\n if (order[9] !== undefined) body.gtd_expiry = order[9];\n if (order[10] !== undefined) {\n body.builder = { address: order[10][0], fee_rate: order[10][1] };\n }\n return body;\n}\n\nfunction toPerpsTpSlTriggerBody(trigger: RawPerpsTpSlTriggerInput) {\n const body: Record<string, unknown> = {\n tpsl: trigger[2],\n };\n if (trigger[1] !== undefined) body.trp = trigger[1];\n if (trigger[3] !== undefined) body.trail_bps = trigger[3];\n if (trigger[4] !== undefined) body.act = trigger[4];\n if (trigger[0] !== undefined) body.market = trigger[0];\n return body;\n}\n\nfunction withOptionalGroup(\n body: Record<string, unknown>,\n group: unknown,\n): Record<string, unknown> {\n if (group !== undefined) body.grp = group;\n return body;\n}\n","import { OrderSide, OrderSideSchema } from '@kuest/bindings';\nimport {\n CreatePerpsTwapResponseSchema,\n FetchPerpsTwapsResponseSchema,\n PerpsClientOrderIdSchema,\n PerpsCommandAckSchema,\n type PerpsDecimalInput,\n PerpsDecimalInputSchema,\n type PerpsTwap,\n type PerpsTwapAccepted,\n PerpsTwapIdSchema,\n} from '@kuest/bindings/perps';\nimport { z } from 'zod';\nimport {\n makeErrorGuard,\n RateLimitError,\n RequestRejectedError,\n SigningError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n} from '../../../errors';\nimport { parseUserInput } from '../../../input';\nimport type { ServiceClient } from '../../../ServiceClient';\nimport type { PerpsSignedOp } from '../signing';\nimport type { SignPerpsRestCommand } from './trading';\n\n// Use fixed-point strings for signing and exact bounds comparison, including numeric exponent inputs.\nconst BoundedDecimalSchema = PerpsDecimalInputSchema.transform(\n (value, context) => {\n const match = /^(\\d+)(?:\\.(\\d+))?(?:[eE]([+-]?\\d+))?$/.exec(value);\n if (!match) {\n context.addIssue({\n code: 'custom',\n message: 'Expected a nonnegative decimal',\n });\n return z.NEVER;\n }\n const whole = match[1] ?? '0';\n const fraction = match[2] ?? '';\n const exponent = Number(match[3] ?? '0');\n if (!Number.isSafeInteger(exponent) || Math.abs(exponent) > 100) {\n context.addIssue({\n code: 'custom',\n message: 'Decimal exceeds supported precision',\n });\n return z.NEVER;\n }\n const digits = whole + fraction;\n const point = whole.length + exponent;\n const expanded =\n point <= 0\n ? `0.${'0'.repeat(-point)}${digits}`\n : point >= digits.length\n ? digits.padEnd(point, '0')\n : `${digits.slice(0, point)}.${digits.slice(point)}`;\n const [integer = '0', fractional = ''] = expanded.split('.');\n const normalizedFraction = fractional.replace(/0+$/, '');\n if (\n normalizedFraction.length > 28 ||\n BigInt(integer + normalizedFraction) > 79228162514264337593543950335n\n ) {\n context.addIssue({\n code: 'custom',\n message: 'Decimal exceeds supported precision',\n });\n return z.NEVER;\n }\n return normalizedFraction ? `${integer}.${normalizedFraction}` : integer;\n },\n);\nfunction decimalUnits(value: string): bigint {\n const [whole = '0', fraction = ''] = value.split('.');\n return BigInt(`${whole}${fraction.padEnd(28, '0')}`);\n}\nconst CreatePerpsTwapRequestSchema = z\n .object({\n instrumentId: z.number().int().min(0).max(4294967295),\n side: OrderSideSchema,\n quantity: BoundedDecimalSchema.refine(\n (value) => decimalUnits(value) > 0n,\n 'quantity must be positive',\n ),\n durationMs: z.number().int().min(300000).max(86400000),\n intervalMs: z.number().int().nonnegative().optional(),\n randomize: z.boolean().default(false),\n slippageBps: z.number().int().min(0).max(10000).default(0),\n minPrice: BoundedDecimalSchema.optional(),\n maxPrice: BoundedDecimalSchema.optional(),\n reduceOnly: z.boolean().default(false),\n clientOrderId: PerpsClientOrderIdSchema.optional(),\n expiresAt: z\n .number()\n .int()\n .positive()\n .max(Number.MAX_SAFE_INTEGER)\n .optional(),\n })\n .superRefine((request, context) => {\n const interval = request.intervalMs;\n if (\n interval !== undefined &&\n interval !== 0 &&\n (interval < 30000 ||\n interval > request.durationMs ||\n request.durationMs % interval !== 0)\n )\n context.addIssue({\n code: 'custom',\n path: ['intervalMs'],\n message:\n 'intervalMs must be at least 30000 and divide durationMs exactly',\n });\n const minimum = decimalUnits(request.minPrice ?? '0');\n const maximum = decimalUnits(request.maxPrice ?? '0');\n if (minimum !== 0n && maximum !== 0n && minimum >= maximum)\n context.addIssue({\n code: 'custom',\n path: ['maxPrice'],\n message: 'maxPrice must exceed minPrice when both bounds are set',\n });\n });\n/** @experimental This API may change in a breaking way in any release, including patch releases. */\nexport type CreatePerpsTwapRequest = {\n instrumentId: number;\n side: OrderSide;\n quantity: PerpsDecimalInput;\n /** Run duration in milliseconds, from five minutes to 24 hours. */ durationMs: number;\n /** Omit or set zero to derive cadence. Otherwise at least 30000 and an exact divisor of durationMs. */ intervalMs?: number;\n /** Jitter slice quantities by up to 20%. Defaults to false. */ randomize?: boolean;\n /** 0 uses the venue default (300 bps). Maximum 10000. */ slippageBps?: number;\n /** Zero or omission disables this lower mark-price bound. */ minPrice?: PerpsDecimalInput;\n /** Zero or omission disables this upper mark-price bound. */ maxPrice?: PerpsDecimalInput;\n reduceOnly?: boolean;\n /** Retain this identity to reconcile an uncertain create. */ clientOrderId?: string;\n /** Command deadline in Unix milliseconds, distinct from run duration. */ expiresAt?: number;\n};\n/** @experimental This API may change in a breaking way in any release, including patch releases. */\nexport type CreatePerpsTwapError =\n | RateLimitError\n | RequestRejectedError\n | SigningError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\n/** @experimental This API may change in a breaking way in any release, including patch releases. */\nexport const CreatePerpsTwapError = makeErrorGuard(\n RateLimitError,\n RequestRejectedError,\n SigningError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n/** Start a server-managed TWAP. Reconcile uncertain submissions with fetchTwaps; do not blindly resubmit.\n * @internal\n * @throws {@link CreatePerpsTwapError} Thrown on failure.\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport async function createPerpsTwap(\n client: ServiceClient,\n signCommand: SignPerpsRestCommand,\n request: CreatePerpsTwapRequest,\n): Promise<PerpsTwapAccepted> {\n const params = parseUserInput(request, CreatePerpsTwapRequestSchema);\n const args = {\n iid: params.instrumentId,\n buy: params.side === OrderSide.BUY,\n qty: params.quantity,\n dur: params.durationMs,\n ivl: params.intervalMs,\n rnd: params.randomize,\n slip_bps: params.slippageBps,\n min_px: params.minPrice,\n max_px: params.maxPrice,\n ro: params.reduceOnly,\n c: params.clientOrderId,\n };\n const op = [\n 'createTwap',\n [\n args.iid,\n args.buy,\n args.qty,\n args.dur,\n args.ivl,\n args.rnd,\n args.slip_bps,\n args.min_px,\n args.max_px,\n args.ro,\n args.c,\n ],\n ] as const satisfies PerpsSignedOp;\n const accepted = await client.post('/v1/trade/twaps', {\n schema: CreatePerpsTwapResponseSchema,\n retry: false,\n json: {\n ...signCommand(op, params.expiresAt),\n op: { type: 'createTwap', args },\n },\n });\n if ('status' in accepted)\n throw new RequestRejectedError(accepted.error, { status: 200 });\n return accepted;\n}\n/** @experimental This API may change in a breaking way in any release, including patch releases. */\nexport type FetchPerpsTwapsError =\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError;\n/** @experimental This API may change in a breaking way in any release, including patch releases. */\nexport const FetchPerpsTwapsError = makeErrorGuard(\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n);\n/** Fetch all active runs in ascending identity order. Ended runs are absent; this is not paginated.\n * @internal\n * @throws {@link FetchPerpsTwapsError} Thrown on failure.\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport async function fetchPerpsTwaps(\n client: ServiceClient,\n): Promise<PerpsTwap[]> {\n return await client.get('/v1/account/twaps', {\n schema: FetchPerpsTwapsResponseSchema,\n });\n}\n\nconst TwapIdentityRequestSchema = z.object({\n twapId: PerpsTwapIdSchema,\n expiresAt: z\n .number()\n .int()\n .positive()\n .max(Number.MAX_SAFE_INTEGER)\n .optional(),\n});\n/** @experimental This API may change in a breaking way in any release, including patch releases. */\nexport type PausePerpsTwapRequest = {\n twapId: number /** Command deadline in Unix milliseconds. */;\n expiresAt?: number;\n};\n/** @experimental This API may change in a breaking way in any release, including patch releases. */\nexport type PausePerpsTwapError =\n | RateLimitError\n | RequestRejectedError\n | SigningError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\n/** @experimental This API may change in a breaking way in any release, including patch releases. */\nexport const PausePerpsTwapError = makeErrorGuard(\n RateLimitError,\n RequestRejectedError,\n SigningError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n/** Pause an active TWAP. An in-flight slice completes independently; the original end time is unchanged.\n * @internal\n * @throws {@link PausePerpsTwapError} Thrown on failure.\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport async function pausePerpsTwap(\n client: ServiceClient,\n signCommand: SignPerpsRestCommand,\n request: PausePerpsTwapRequest,\n): Promise<void> {\n const params = parseUserInput(request, TwapIdentityRequestSchema);\n const op = [\n 'controlTwap',\n [params.twapId, 'pause'],\n ] as const satisfies PerpsSignedOp;\n const body = {\n type: 'controlTwap',\n args: { twid: params.twapId, act: 'pause' },\n };\n const response = await client.patch('/v1/trade/twaps', {\n schema: PerpsCommandAckSchema,\n retry: false,\n json: { ...signCommand(op, params.expiresAt), op: body },\n });\n if (response.status === 'err')\n throw new RequestRejectedError(response.error, { status: 200 });\n}\n/** @experimental This API may change in a breaking way in any release, including patch releases. */\nexport type ResumePerpsTwapRequest = {\n twapId: number /** Command deadline in Unix milliseconds. */;\n expiresAt?: number;\n};\n/** @experimental This API may change in a breaking way in any release, including patch releases. */\nexport type ResumePerpsTwapError =\n | RateLimitError\n | RequestRejectedError\n | SigningError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\n/** @experimental This API may change in a breaking way in any release, including patch releases. */\nexport const ResumePerpsTwapError = makeErrorGuard(\n RateLimitError,\n RequestRejectedError,\n SigningError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n/** Resume an active TWAP. An in-flight slice completes independently; the original end time is unchanged.\n * @internal\n * @throws {@link ResumePerpsTwapError} Thrown on failure.\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport async function resumePerpsTwap(\n client: ServiceClient,\n signCommand: SignPerpsRestCommand,\n request: ResumePerpsTwapRequest,\n): Promise<void> {\n const params = parseUserInput(request, TwapIdentityRequestSchema);\n const op = [\n 'controlTwap',\n [params.twapId, 'resume'],\n ] as const satisfies PerpsSignedOp;\n const body = {\n type: 'controlTwap',\n args: { twid: params.twapId, act: 'resume' },\n };\n const response = await client.patch('/v1/trade/twaps', {\n schema: PerpsCommandAckSchema,\n retry: false,\n json: { ...signCommand(op, params.expiresAt), op: body },\n });\n if (response.status === 'err')\n throw new RequestRejectedError(response.error, { status: 200 });\n}\n/** @experimental This API may change in a breaking way in any release, including patch releases. */\nexport type CancelPerpsTwapRequest = {\n twapId: number /** Command deadline in Unix milliseconds. */;\n expiresAt?: number;\n};\n/** @experimental This API may change in a breaking way in any release, including patch releases. */\nexport type CancelPerpsTwapError =\n | RateLimitError\n | RequestRejectedError\n | SigningError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\n/** @experimental This API may change in a breaking way in any release, including patch releases. */\nexport const CancelPerpsTwapError = makeErrorGuard(\n RateLimitError,\n RequestRejectedError,\n SigningError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n/** Cancel an active TWAP. An in-flight slice completes independently; the original end time is unchanged.\n * @internal\n * @throws {@link CancelPerpsTwapError} Thrown on failure.\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport async function cancelPerpsTwap(\n client: ServiceClient,\n signCommand: SignPerpsRestCommand,\n request: CancelPerpsTwapRequest,\n): Promise<void> {\n const params = parseUserInput(request, TwapIdentityRequestSchema);\n const op = ['cancelTwap', [params.twapId]] as const satisfies PerpsSignedOp;\n const body = { type: 'cancelTwap', args: { twid: params.twapId } };\n const response = await client.del('/v1/trade/twaps', {\n schema: PerpsCommandAckSchema,\n retry: false,\n json: { ...signCommand(op, params.expiresAt), op: body },\n });\n if (response.status === 'err')\n throw new RequestRejectedError(response.error, { status: 200 });\n}\n","import { EvmAddressSchema } from '@kuest/bindings';\nimport type { PerpsPositionSnapshots } from '@kuest/bindings/perps';\nimport {\n type PerpsAccountConfig,\n type PerpsAccountFill,\n type PerpsAccountFundingPayment,\n type PerpsAccountStats,\n type PerpsAutoCancelStatus,\n type PerpsBalance,\n type PerpsBuilderApproval,\n type PerpsBuilderEarning,\n type PerpsBuilderEarningsSummary,\n PerpsBuilderStatusSchema,\n type PerpsCancelOrderResult,\n type PerpsChase,\n type PerpsChaseAccepted,\n type PerpsCommandAck,\n PerpsCommandAckSchema,\n type PerpsCredentials,\n type PerpsDeposit,\n type PerpsEquityPoint,\n type PerpsInternalTransfer,\n type PerpsNotificationEntry,\n type PerpsOrder,\n type PerpsPnlPoint,\n type PerpsPortfolio,\n type PerpsPostOrderAck,\n type PerpsTwap,\n type PerpsTwapAccepted,\n type PerpsUpdateLeverageBatchResult,\n type PerpsUpdateLeverageResult,\n type PerpsWithdrawal,\n} from '@kuest/bindings/perps';\nimport {\n PerpsNotificationsResyncFrameSchema,\n type PerpsSessionEvent,\n PerpsSessionUpdateEventSchema,\n} from '@kuest/bindings/subscriptions';\nimport { invariant, setNonBlockingTimeout } from '@kuest/types';\nimport { type Pushable, pushable } from 'it-pushable';\nimport { z } from 'zod';\nimport {\n type ApprovePerpsBuilderFeeError,\n type ApprovePerpsBuilderFeeRequest,\n ApprovePerpsBuilderFeeRequestSchema,\n type PerpsBuilderFeeApprover,\n} from '../../actions/perps/builders';\nimport {\n fetchOwnPerpsPositionSnapshots,\n type PerpsPositionSnapshotSelection,\n} from '../../actions/perps/position-snapshots';\nimport {\n makeErrorGuard,\n type OperationAbortedError,\n type PerpsCancelRetryError,\n RateLimitError,\n RequestRejectedError,\n SigningError,\n TimeoutError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n} from '../../errors';\nimport { parseUserInput } from '../../input';\nimport type { Paginated } from '../../pagination';\nimport type { Fetch } from '../../request-options';\nimport { ServiceClient } from '../../ServiceClient';\nimport { PerpsWebSocketHeartbeat } from '../heartbeat';\nimport { ReconnectScheduler, WebSocketConnection } from '../lifecycle';\nimport {\n type FetchPerpsAccountConfigRequest,\n type FetchPerpsOpenOrdersRequest,\n type FetchPerpsOrdersRequest,\n fetchPerpsAccountConfig,\n fetchPerpsAutoCancelStatus,\n fetchPerpsBalances,\n fetchPerpsOpenOrders,\n fetchPerpsOrders,\n fetchPerpsPortfolio,\n fetchPerpsStats,\n fetchPerpsUnreadNotificationsCount,\n type ListPerpsDepositsRequest,\n type ListPerpsEquityHistoryRequest,\n type ListPerpsFillsRequest,\n type ListPerpsFundingPaymentsRequest,\n type ListPerpsInternalTransfersRequest,\n type ListPerpsNotificationsRequest,\n type ListPerpsPnlHistoryRequest,\n type ListPerpsWithdrawalsRequest,\n listPerpsDeposits,\n listPerpsEquityHistory,\n listPerpsFills,\n listPerpsFundingPayments,\n listPerpsInternalTransfers,\n listPerpsNotifications,\n listPerpsPnlHistory,\n listPerpsWithdrawals,\n type MarkPerpsNotificationsReadRequest,\n markPerpsNotificationsRead,\n} from './actions/account';\nimport {\n minPerpsBuilderFeeRate,\n type PerpsBuilderTermsInput,\n PerpsBuilderTermsInputSchema,\n} from './actions/builder-terms';\nimport {\n type FetchPerpsBuilderApprovalsRequest,\n type FetchPerpsBuilderEarningsSummaryRequest,\n fetchPerpsBuilderApprovals,\n fetchPerpsBuilderEarningsSummary,\n type ListPerpsBuilderEarningsRequest,\n listPerpsBuilderEarnings,\n} from './actions/builders';\nimport {\n type CancelPerpsChaseRequest,\n type CreatePerpsChaseRequest,\n cancelPerpsChase,\n createPerpsChase,\n fetchPerpsChases,\n} from './actions/chases';\nimport {\n type ArmPerpsAutoCancelRequest,\n armPerpsAutoCancel,\n type CancelAllPerpsOrdersRequest,\n type CancelPerpsOrderRequest,\n type CancelPerpsOrdersRequest,\n cancelAllOrders,\n cancelPerpsOrder,\n cancelPerpsOrders,\n type DisarmPerpsAutoCancelRequest,\n disarmPerpsAutoCancel,\n type PerpsCommandRequest,\n type PerpsDeleteCommandRequest,\n type PlacePerpsOrderRequest,\n type PlacePerpsOrderRequestWithOptions,\n type PlacePerpsOrderResult,\n type PlacePerpsOrderWithTpSlRequest,\n type PlacePerpsOrderWithTpSlResult,\n type PlacePerpsPositionTpSlRequest,\n type PlacePerpsPositionTpSlResult,\n type PostPerpsOrdersRequest,\n placePerpsOrder,\n placePerpsPositionTpSl,\n postPerpsOrders,\n toPerpsCommandBodyOp,\n type UpdatePerpsLeverageRequest,\n type UpdatePerpsLeveragesRequest,\n type UpdatePerpsMarginRequest,\n updatePerpsLeverage,\n updatePerpsLeverages,\n updatePerpsMargin,\n} from './actions/trading';\nimport {\n type CancelPerpsTwapRequest,\n type CreatePerpsTwapRequest,\n cancelPerpsTwap,\n createPerpsTwap,\n fetchPerpsTwaps,\n type PausePerpsTwapRequest,\n pausePerpsTwap,\n type ResumePerpsTwapRequest,\n resumePerpsTwap,\n} from './actions/twaps';\nimport { type PerpsSignableValue, signPerpsOp } from './signing';\n\nconst AUTH_TIMEOUT_MS = 30_000;\nconst COMMAND_TIMEOUT_MS = 30_000;\n// Purposefully generous: backend order updates are expected in the ~100ms range.\nconst ORDER_PLACEMENT_UPDATE_TIMEOUT_MS = 2000;\nconst PERPS_SESSION_CHANNELS = [\n 'balances',\n 'portfolio',\n 'orders',\n 'fills',\n 'funding',\n 'deposits',\n 'withdrawals',\n 'notifications',\n 'tpsl',\n] as const;\n\n// Notification and builder-fill frames carry the source event's engine sequence, which is not\n// dense per channel: unrelated engine events skip values and one event can\n// emit several notifications sharing one sequence. Local sequence-gap\n// detection would misfire. Notification loss is reported by server resync\n// control frames instead.\nconst SERVER_RESYNC_CHANNELS: ReadonlySet<string> = new Set([\n 'notifications',\n 'builderFills',\n]);\n\nconst PerpsResponseEnvelopeSchema = z\n .object({\n id: z.number().int().positive().optional(),\n data: z.unknown().optional(),\n })\n .passthrough();\n\n/** @experimental This API may change in a breaking way in any release, including patch releases. */\nexport type { ApprovePerpsBuilderFeeError };\n\nconst PerpsSessionAckSchema = z\n .union([PerpsCommandAckSchema, z.array(PerpsCommandAckSchema)])\n .transform((response) =>\n Array.isArray(response)\n ? (response.find((item) => item.status === 'err') ?? response[0])\n : response,\n );\n\ntype PendingResponse = {\n reject(error: Error): void;\n resolve(value: unknown): void;\n schema: z.ZodType;\n};\n\ntype EventWaiter = {\n promise: Promise<PerpsSessionEvent>;\n predicate(event: PerpsSessionEvent): boolean;\n reject(error: Error): void;\n resolve(event: PerpsSessionEvent): void;\n timeout?: ReturnType<typeof setNonBlockingTimeout>;\n};\n\n/** @experimental This API may change in a breaking way in any release, including patch releases. */\nexport type {\n PerpsAutoCancelStatus,\n PerpsCancelOrderResult,\n PerpsPostOrderAck,\n PerpsUpdateLeverageBatchResult,\n PerpsUpdateLeverageRejection,\n PerpsUpdateLeverageResult,\n} from '@kuest/bindings/perps';\n/** @experimental This API may change in a breaking way in any release, including patch releases. */\nexport type {\n PerpsBuilderFillUpdateEvent,\n PerpsSessionEvent,\n} from '@kuest/bindings/subscriptions';\nexport type {\n FetchPerpsAccountConfigRequest,\n FetchPerpsOpenOrdersRequest,\n FetchPerpsOrdersRequest,\n ListPerpsDepositsRequest,\n ListPerpsEquityHistoryRequest,\n ListPerpsFillsRequest,\n ListPerpsFundingPaymentsRequest,\n ListPerpsInternalTransfersRequest,\n ListPerpsNotificationsRequest,\n ListPerpsPnlHistoryRequest,\n ListPerpsWithdrawalsRequest,\n MarkPerpsNotificationsReadRequest,\n} from './actions/account';\n/** @experimental This API may change in a breaking way in any release, including patch releases. */\nexport type { PerpsBuilderTermsInput } from './actions/builder-terms';\n/** @experimental This API may change in a breaking way in any release, including patch releases. */\nexport type {\n FetchPerpsBuilderApprovalsRequest,\n FetchPerpsBuilderEarningsSummaryRequest,\n ListPerpsBuilderEarningsRequest,\n} from './actions/builders';\n/** @experimental This API may change in a breaking way in any release, including patch releases. */\nexport {\n FetchPerpsBuilderApprovalsError,\n FetchPerpsBuilderEarningsSummaryError,\n ListPerpsBuilderEarningsError,\n} from './actions/builders';\n/** @experimental This API may change in a breaking way in any release, including patch releases. */\nexport type {\n ArmPerpsAutoCancelRequest,\n CancelAllPerpsOrdersRequest,\n CancelPerpsOrderRequest,\n CancelPerpsOrdersRequest,\n DisarmPerpsAutoCancelRequest,\n PerpsCancelOptions,\n PerpsCancelRetryOptions,\n PerpsOrderRequest,\n PerpsPlacedTpSlOrder,\n PerpsPlacedTpSlOrders,\n PerpsPlaceFokOrderRequest,\n PerpsPlaceGtcOrderRequest,\n PerpsPlaceGtdOrderRequest,\n PerpsPlaceIocOrderRequest,\n PerpsPositionTpSlTrigger,\n PerpsPositionTrailingStop,\n PerpsTpSlTrigger,\n PerpsTrailingStop,\n PlacePerpsOrderRequest,\n PlacePerpsOrderResult,\n PlacePerpsOrderWithTpSlRequest,\n PlacePerpsOrderWithTpSlResult,\n PlacePerpsPositionTpSlRequest,\n PlacePerpsPositionTpSlResult,\n PostPerpsOrdersRequest,\n UpdatePerpsLeverageRequest,\n UpdatePerpsLeveragesRequest,\n UpdatePerpsMarginRequest,\n} from './actions/trading';\n/** @experimental This API may change in a breaking way in any release, including patch releases. */\nexport {\n ArmPerpsAutoCancelError,\n UpdatePerpsLeverageError,\n UpdatePerpsLeveragesError,\n UpdatePerpsMarginError,\n} from './actions/trading';\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type PerpsSessionOptions = {\n /** @internal Owner approval operation supplied by the parent client. */\n approveBuilderFee?: PerpsBuilderFeeApprover;\n /** Builder selector whose saved approval is restored, or previously resolved terms. */\n builderAttribution?: string | PerpsBuilderTermsInput;\n chainId: number;\n credentials: PerpsCredentials;\n /** Fetch implementation for session HTTP requests. */\n fetch?: Fetch;\n headers?: Record<string, string>;\n /**\n * Include this authenticated account's builder receipts in the session iterator.\n * Subscription is best effort and retried on reconnect; failure does not block the session.\n */\n includeBuilderFills?: boolean;\n onClose: (session: PerpsSession) => void;\n restUrl: string;\n wsUrl: string;\n};\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type PerpsSessionLifecycleError =\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\n\n/** @experimental This API may change in a breaking way in any release, including patch releases. */\nexport type RevokePerpsBuilderFeeError =\n | RateLimitError\n | RequestRejectedError\n | SigningError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\n\n/** @experimental This API may change in a breaking way in any release, including patch releases. */\nexport const RevokePerpsBuilderFeeError = makeErrorGuard(\n RateLimitError,\n RequestRejectedError,\n SigningError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type PerpsSessionAccountError =\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type PerpsSessionTradingError =\n | OperationAbortedError\n | PerpsCancelRetryError\n | RateLimitError\n | RequestRejectedError\n | SigningError\n | TimeoutError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport class PerpsSession implements AsyncIterable<PerpsSessionEvent> {\n readonly credentials: PerpsCredentials;\n readonly #approveBuilderFee: PerpsBuilderFeeApprover | undefined;\n readonly #api: ServiceClient;\n readonly #chainId: number;\n readonly #headers: Record<string, string> | undefined;\n readonly #onClose: (session: PerpsSession) => void;\n readonly #wsUrl: string;\n readonly #connection = new WebSocketConnection({\n heartbeat: new PerpsWebSocketHeartbeat(),\n });\n readonly #queue: Pushable<PerpsSessionEvent> = pushable({ objectMode: true });\n readonly #pending = new Map<number, PendingResponse>();\n readonly #eventWaiters = new Set<EventWaiter>();\n readonly #reconnectScheduler = new ReconnectScheduler();\n readonly #sequences = new Map<string, number>();\n #builderAddress: string | undefined;\n #builderAttribution: PerpsBuilderTermsInput | undefined;\n #builderConsentChange: Promise<unknown> = Promise.resolve();\n readonly #includeBuilderFills: boolean;\n #nextRequestId = 1;\n #closing: Promise<void> | undefined;\n\n /**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\n constructor(options: PerpsSessionOptions) {\n this.#approveBuilderFee = options.approveBuilderFee;\n this.#includeBuilderFills = options.includeBuilderFills ?? false;\n this.#builderAttribution =\n options.builderAttribution === undefined ||\n typeof options.builderAttribution === 'string'\n ? undefined\n : Object.freeze(\n parseUserInput(\n options.builderAttribution,\n PerpsBuilderTermsInputSchema,\n ),\n );\n this.#builderAddress =\n typeof options.builderAttribution === 'string'\n ? parseUserInput(options.builderAttribution, EvmAddressSchema)\n : this.#builderAttribution?.builderAddress;\n this.#api = new ServiceClient({\n fetch: options.fetch,\n headers: options.headers,\n resolveHeaders: async () => this.#authenticatedHeaders(),\n root: options.restUrl,\n });\n this.#chainId = options.chainId;\n this.credentials = options.credentials;\n this.#headers = options.headers;\n this.#onClose = options.onClose;\n this.#wsUrl = options.wsUrl;\n }\n\n /**\n * Most recently resolved builder terms. Resolved when opening the session or granting approval.\n * Undefined when the effective fee is zero or no builder is selected.\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\n get builderAttribution(): PerpsBuilderTermsInput | undefined {\n return this.#builderAttribution;\n }\n\n /**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\n get closed(): boolean {\n return this.#closing !== undefined;\n }\n\n /**\n * Connects and authenticates the session WebSocket.\n *\n * @throws {@link PerpsSessionLifecycleError}\n * Thrown on failure.\n *\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\n async connect(): Promise<void> {\n if (\n this.#builderAddress !== undefined &&\n this.#builderAttribution === undefined\n ) {\n const status = await this.#api.getWorkflow('/v1/info/builder', {\n schema: PerpsBuilderStatusSchema,\n params: new URLSearchParams({ address: this.#builderAddress }),\n });\n if (!status.registered || !status.enabled || !status.admissionEnabled) {\n throw new UserInputError(\n 'Builder attribution is not active for this builder address.',\n );\n }\n const approvals = await this.fetchBuilderApprovals({\n builder: this.#builderAddress,\n });\n const approval = approvals.find(\n (entry) =>\n entry.builder.toLowerCase() === this.#builderAddress?.toLowerCase(),\n );\n const feeRate = minPerpsBuilderFeeRate(\n status.maxFeeRate,\n approval?.maxFeeRate ?? '0',\n );\n this.#builderAttribution = /[1-9]/.test(feeRate)\n ? Object.freeze({ builderAddress: this.#builderAddress, feeRate })\n : undefined;\n }\n await this.#connect(false);\n }\n\n /**\n * Closes the session and releases pending requests.\n *\n * @throws {@link PerpsSessionLifecycleError}\n * Thrown on failure.\n *\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\n async close(): Promise<void> {\n if (this.#closing === undefined) {\n this.#closing = this.#shutdown();\n }\n await this.#closing;\n }\n\n /**\n * Iterates authenticated Perps account events emitted by this session.\n * With `includeBuilderFills`, also emits receipts earned by this authenticated\n * account as a builder. After resync, reconcile receipts with\n * `listBuilderEarnings` and deduplicate by `earningId`.\n *\n * @example\n * ```ts\n * for await (const event of session) {\n * if (event.type === 'order') {\n * console.log(event.payload.id);\n * }\n * }\n * ```\n *\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\n [Symbol.asyncIterator](): AsyncIterator<PerpsSessionEvent> {\n return this.#queue[Symbol.asyncIterator]();\n }\n\n /**\n * Approves and adopts builder fees with the parent client's owner signer.\n * Requires an explicit maximum fee. The builder address defaults to the selected builder.\n * Approval is needed once and remains valid until revoked or replaced.\n * The SDK increments the saved approval version automatically. Only a\n * confirmed approval refreshes the builder cap and stores the lower of that\n * cap and the approved maximum for future orders. If the cap read fails,\n * consent may already be committed; local terms stay unchanged and the error propagates.\n * A zero effective fee disables attribution while retaining the selected builder.\n *\n * @example\n * ```ts\n * await session.approveBuilderFee({ maxFeeRate: '0.0005' });\n * ```\n * @throws {@link ApprovePerpsBuilderFeeError} Thrown on failure.\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\n async approveBuilderFee(\n request: ApprovePerpsBuilderFeeRequest,\n ): Promise<PerpsBuilderApproval> {\n const approvalRequest = parseUserInput(\n request,\n ApprovePerpsBuilderFeeRequestSchema,\n );\n return this.#changeBuilderConsent(() => ({\n ...approvalRequest,\n builderAddress:\n approvalRequest.builderAddress === undefined\n ? this.#builderAddress\n : approvalRequest.builderAddress,\n }));\n }\n\n /**\n * Revokes builder consent with the parent client's owner signer.\n * The address defaults to the session's active builder. Confirmation clears\n * that builder from future orders; accepted orders retain their saved terms.\n * Revocation remains available when the builder is inactive.\n *\n * @example\n * ```ts\n * await session.revokeBuilderFee();\n * ```\n * @throws {@link RevokePerpsBuilderFeeError} Thrown on failure.\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\n async revokeBuilderFee(\n builderAddress?: string,\n ): Promise<PerpsBuilderApproval> {\n return this.#changeBuilderConsent(() => {\n const builder = builderAddress ?? this.#builderAddress;\n if (builder === undefined) {\n throw new UserInputError(\n 'A builder address is required when the session has no active builder attribution.',\n );\n }\n return { builderAddress: builder, maxFeeRate: '0' };\n });\n }\n\n #changeBuilderConsent(\n request: () => ApprovePerpsBuilderFeeRequest,\n ): Promise<PerpsBuilderApproval> {\n const change = this.#builderConsentChange\n .catch(() => undefined)\n .then(async () => {\n if (this.closed) throw new TransportError('Perps session closed.');\n if (this.#approveBuilderFee === undefined) {\n throw new UserInputError(\n 'Builder approval requires a session opened with a secure client.',\n );\n }\n const approval = await this.#approveBuilderFee(this, request());\n if (/^0+(?:\\.0+)?$/.test(approval.maxFeeRate)) {\n if (\n this.#builderAddress?.toLowerCase() ===\n approval.builder.toLowerCase()\n ) {\n this.#builderAttribution = undefined;\n this.#builderAddress = undefined;\n }\n } else {\n const status = await this.#api.getWorkflow('/v1/info/builder', {\n schema: PerpsBuilderStatusSchema,\n params: new URLSearchParams({ address: approval.builder }),\n });\n this.#builderAddress = approval.builder;\n const feeRate = minPerpsBuilderFeeRate(\n status.maxFeeRate,\n approval.maxFeeRate,\n );\n this.#builderAttribution = /[1-9]/.test(feeRate)\n ? Object.freeze({ builderAddress: approval.builder, feeRate })\n : undefined;\n }\n return approval;\n });\n this.#builderConsentChange = change;\n return change;\n }\n\n /**\n * Fetches this trader's builder grants, including revoked grants.\n * @throws {@link FetchPerpsBuilderApprovalsError} Thrown on failure.\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\n async fetchBuilderApprovals(\n request?: FetchPerpsBuilderApprovalsRequest,\n ): Promise<PerpsBuilderApproval[]> {\n return await fetchPerpsBuilderApprovals(this.#api, request);\n }\n\n /**\n * Lists fee receipts earned by this authenticated account as a builder.\n * To reconcile with totals, call `fetchBuilderEarningsSummary` first and pass\n * its `snapshot` here; the snapshot pins the window and indexed sequence cutoff.\n * Continuations keep the original window and cutoff.\n * The configured order builder does not change whose earnings are read.\n * @throws {@link ListPerpsBuilderEarningsError} Thrown on failure.\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\n listBuilderEarnings(\n request?: ListPerpsBuilderEarningsRequest,\n ): Paginated<PerpsBuilderEarning[]> {\n return listPerpsBuilderEarnings(this.#api, request);\n }\n\n /**\n * Fetches this builder account's earnings totals at a reporting cutoff.\n * Pass the returned `snapshot` to `listBuilderEarnings` to page the matching history.\n * Active approval count reflects current grants, independently of the cutoff.\n * @throws {@link FetchPerpsBuilderEarningsSummaryError} Thrown on failure.\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\n async fetchBuilderEarningsSummary(\n request?: FetchPerpsBuilderEarningsSummaryRequest,\n ): Promise<PerpsBuilderEarningsSummary> {\n return await fetchPerpsBuilderEarningsSummary(this.#api, request);\n }\n\n /**\n * Fetches current Perps balances for the authenticated account.\n *\n * @throws {@link PerpsSessionAccountError}\n * Thrown on failure.\n *\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\n async fetchBalances(): Promise<PerpsBalance[]> {\n return await fetchPerpsBalances(this.#api);\n }\n\n /**\n * Fetches the current Perps portfolio for the authenticated account.\n *\n * @throws {@link PerpsSessionAccountError}\n * Thrown on failure.\n *\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\n async fetchPortfolio(): Promise<PerpsPortfolio> {\n return await fetchPerpsPortfolio(this.#api);\n }\n\n /** Fetches snapshots for this session's authenticated account. Owner-only\n * leverage and PnL percentage remain null when historical values are unavailable.\n * This direct batch read does not paginate or retry item statuses.\n * @throws {@link FetchPerpsPositionSnapshotsError} Thrown on failure.\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\n async fetchPositionSnapshots(\n request: PerpsPositionSnapshotSelection,\n ): Promise<PerpsPositionSnapshots> {\n return fetchOwnPerpsPositionSnapshots(this.#api, request);\n }\n\n /**\n * Fetches account-level Perps statistics for the authenticated account.\n *\n * @throws {@link PerpsSessionAccountError}\n * Thrown on failure.\n *\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\n async fetchStats(): Promise<PerpsAccountStats> {\n return await fetchPerpsStats(this.#api);\n }\n\n /**\n * Fetches Perps account configuration, optionally filtered by instrument.\n *\n * @throws {@link PerpsSessionAccountError}\n * Thrown on failure.\n *\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\n async fetchAccountConfig(\n request?: FetchPerpsAccountConfigRequest,\n ): Promise<PerpsAccountConfig[]> {\n return await fetchPerpsAccountConfig(this.#api, request);\n }\n\n /**\n * Fetches the auto-cancel status for the authenticated account, including\n * the armed deadline, today's trigger count, the daily trigger limit, and\n * when the daily counter resets.\n *\n * @throws {@link PerpsSessionAccountError}\n * Thrown on failure.\n *\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\n async fetchAutoCancelStatus(): Promise<PerpsAutoCancelStatus> {\n return await fetchPerpsAutoCancelStatus(this.#api);\n }\n\n /**\n * Fetches currently open Perps orders, optionally filtered by instrument.\n *\n * @throws {@link PerpsSessionAccountError}\n * Thrown on failure.\n *\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\n async fetchOpenOrders(\n request?: FetchPerpsOpenOrdersRequest,\n ): Promise<PerpsOrder[]> {\n return await fetchPerpsOpenOrders(this.#api, request);\n }\n\n /**\n * Fetches Perps orders for the authenticated account.\n *\n * @throws {@link PerpsSessionAccountError}\n * Thrown on failure.\n *\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\n async fetchOrders(request?: FetchPerpsOrdersRequest): Promise<PerpsOrder[]> {\n return await fetchPerpsOrders(this.#api, request);\n }\n\n /**\n * Lists Perps fills for the authenticated account, optionally by instrument.\n *\n * @remarks\n * Fills are returned newest first by default; set `sort` to change the\n * time direction. Page cursors are opaque values forwarded to the API.\n * An `instrumentId` filter is retained on every page, including when resuming\n * from a cursor. Fill `adl` marks auto-deleveraging; optional\n * `liquidationDetails.mark` is separate from the accounting fill price.\n *\n * @throws {@link PerpsSessionAccountError}\n * Thrown on failure.\n *\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\n listFills(\n request: ListPerpsFillsRequest = {},\n ): Paginated<PerpsAccountFill[]> {\n return listPerpsFills(this.#api, request);\n }\n\n /**\n * Lists Perps funding payments with SDK-owned pagination.\n *\n * @throws {@link PerpsSessionAccountError}\n * Thrown on failure.\n *\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\n listFundingPayments(\n request: ListPerpsFundingPaymentsRequest = {},\n ): Paginated<PerpsAccountFundingPayment[]> {\n return listPerpsFundingPayments(this.#api, request);\n }\n\n /**\n * Lists Perps deposits with SDK-owned pagination.\n *\n * @throws {@link PerpsSessionAccountError}\n * Thrown on failure.\n *\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\n listDeposits(\n request: ListPerpsDepositsRequest = {},\n ): Paginated<PerpsDeposit[]> {\n return listPerpsDeposits(this.#api, request);\n }\n\n /**\n * Lists settled Perps internal transfers with SDK-owned pagination.\n *\n * @remarks\n * Overlapping timestamp boundaries are deduplicated. Throws\n * `UnexpectedResponseError` if a full millisecond cannot be paged without\n * risking omitted transfers.\n *\n * @throws {@link PerpsSessionAccountError}\n * Thrown on failure.\n *\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\n listInternalTransfers(\n request: ListPerpsInternalTransfersRequest = {},\n ): Paginated<PerpsInternalTransfer[]> {\n return listPerpsInternalTransfers(this.#api, request);\n }\n\n /**\n * Lists Perps withdrawals with SDK-owned pagination.\n *\n * @throws {@link PerpsSessionAccountError}\n * Thrown on failure.\n *\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\n listWithdrawals(\n request: ListPerpsWithdrawalsRequest = {},\n ): Paginated<PerpsWithdrawal[]> {\n return listPerpsWithdrawals(this.#api, request);\n }\n\n /**\n * Lists Perps equity history with SDK-owned pagination.\n *\n * @throws {@link PerpsSessionAccountError}\n * Thrown on failure.\n *\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\n listEquityHistory(\n request: ListPerpsEquityHistoryRequest,\n ): Paginated<PerpsEquityPoint[]> {\n return listPerpsEquityHistory(this.#api, request);\n }\n\n /**\n * Lists Perps PnL history with SDK-owned pagination.\n *\n * @throws {@link PerpsSessionAccountError}\n * Thrown on failure.\n *\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\n listPnlHistory(\n request: ListPerpsPnlHistoryRequest,\n ): Paginated<PerpsPnlPoint[]> {\n return listPerpsPnlHistory(this.#api, request);\n }\n\n /**\n * Lists Perps notifications, newest first, with SDK-owned pagination.\n *\n * @remarks\n * After a `resync` session event, pass `sinceSeq` to backfill missed\n * notifications: anchor it at the `sequence` of the last notification event\n * processed before the gap and deduplicate merged results by notification\n * id. Follow-up pages keep the same `sinceSeq` bound automatically.\n *\n * Notifications with types unknown to this SDK version are omitted from\n * page items, so newly introduced notification kinds never fail the read.\n *\n * @example\n * ```ts\n * const page = await session.listNotifications().firstPage();\n * console.log(page.items.length);\n * ```\n *\n * @throws {@link PerpsSessionAccountError}\n * Thrown on failure.\n *\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\n listNotifications(\n request: ListPerpsNotificationsRequest = {},\n ): Paginated<PerpsNotificationEntry[]> {\n return listPerpsNotifications(this.#api, request);\n }\n\n /**\n * Fetches the account's count of unread Perps notifications.\n *\n * @example\n * ```ts\n * const unread = await session.fetchUnreadNotificationsCount();\n * ```\n *\n * @throws {@link PerpsSessionAccountError}\n * Thrown on failure.\n *\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\n async fetchUnreadNotificationsCount(): Promise<number> {\n return await fetchPerpsUnreadNotificationsCount(this.#api);\n }\n\n /**\n * Marks Perps notifications read, either by id or up to a notification.\n *\n * @remarks\n * Read state is account-scoped: only the authenticated account's\n * notifications can be marked read.\n *\n * @example\n * ```ts\n * await session.markNotificationsRead({ ids: [notification.id] });\n * ```\n *\n * @example\n * ```ts\n * await session.markNotificationsRead({\n * upTo: { id: entry.notification.id, timestamp: entry.timestamp },\n * });\n * ```\n *\n * @throws {@link PerpsSessionAccountError}\n * Thrown on failure.\n *\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\n async markNotificationsRead(\n request: MarkPerpsNotificationsReadRequest,\n ): Promise<void> {\n await markPerpsNotificationsRead(this.#api, request);\n }\n\n /**\n * Places one Perps order and resolves with the first matching orders update.\n * GTD orders require a limit price and gtdExpiry in Unix milliseconds.\n * The order expiry is separate from the expiresAt command deadline.\n *\n * @example\n * ```ts\n * const { order } = await session.placeOrder({\n * instrumentId: 1,\n * price: '100',\n * quantity: '1',\n * side: OrderSide.BUY,\n * timeInForce: PerpsTimeInForce.GTC,\n * });\n * ```\n *\n * @example\n * ```ts\n * const { order, tpSl } = await session.placeOrder({\n * instrumentId: 1,\n * price: '100',\n * quantity: '1',\n * side: OrderSide.BUY,\n * stopLoss: { triggerPrice: '90' },\n * timeInForce: PerpsTimeInForce.GTC,\n * });\n * ```\n *\n * @throws {@link PerpsSessionTradingError}\n * Thrown on failure.\n *\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\n async placeOrder(\n request: PlacePerpsOrderWithTpSlRequest,\n ): Promise<PlacePerpsOrderWithTpSlResult>;\n /**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\n async placeOrder(\n request: PlacePerpsOrderRequest,\n ): Promise<PlacePerpsOrderResult>;\n /**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\n async placeOrder(\n request: PlacePerpsOrderRequestWithOptions,\n ): Promise<PlacePerpsOrderResult | PlacePerpsOrderWithTpSlResult> {\n return await placePerpsOrder(this, request);\n }\n\n /**\n * Posts one or more Perps orders and returns queue-entry acknowledgements.\n *\n * @remarks\n * This is a low-level method. Most SDK consumers should prefer `placeOrder`.\n *\n * @throws {@link PerpsSessionTradingError}\n * Thrown on failure.\n *\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\n async postOrders(\n request: PostPerpsOrdersRequest,\n ): Promise<PerpsPostOrderAck[]> {\n return await postPerpsOrders(this, request);\n }\n\n /**\n * Places take-profit and/or stop-loss protection for the current position.\n *\n * @remarks\n * The exit side is inferred from the current position for the requested\n * instrument. Each trigger may specify a positive `quantity` for a partial\n * close; omission closes the full position at trigger time. A partial fill\n * leaves the other trigger armed while a same-side position remains.\n *\n * @example\n * ```ts\n * const { tpSl } = await session.placePositionTpSl({\n * instrumentId: 1,\n * stopLoss: { triggerPrice: '90' },\n * });\n * ```\n *\n * @throws {@link PerpsSessionAccountError}\n * Thrown when the current position cannot be read.\n *\n * @throws {@link PerpsSessionTradingError}\n * Thrown when the TP/SL command fails.\n *\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\n async placePositionTpSl(\n request: PlacePerpsPositionTpSlRequest,\n ): Promise<PlacePerpsPositionTpSlResult> {\n return await placePerpsPositionTpSl(this, request);\n }\n\n /**\n * Cancels one Perps order and returns the cancel result.\n *\n * @remarks\n * The SDK retries only `order_in_flight` rejections with bounded exponential\n * backoff and jitter. Pass `retry: false` to make one attempt. If the retry\n * budget is exhausted, the final `order_in_flight` result is returned. A\n * rejection of the cancellation request throws; an order-specific rejection\n * is returned in the result.\n * If a later attempt fails, {@link PerpsCancelRetryError} retains the last\n * received result and the failure as `cause`. Its `pendingIndexes` contains\n * `0`; that result describes the earlier attempt, not the failed retry.\n * A lost response may hide a completed cancellation, so reconcile the order\n * before submitting another cancellation.\n *\n * @throws {@link PerpsSessionTradingError}\n * Thrown on failure.\n *\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\n async cancelOrder(\n request: CancelPerpsOrderRequest,\n ): Promise<PerpsCancelOrderResult> {\n return await cancelPerpsOrder(this, request);\n }\n\n /**\n * Cancels one or more Perps orders and returns one result per requested order.\n *\n * @remarks\n * The SDK retries only orders rejected with `order_in_flight`; terminal\n * results are retained while transient orders are retried as a smaller batch.\n * Pass `retry: false` to make one attempt. Exhausted transient results retain\n * their final `order_in_flight` rejection. A rejection of the whole\n * cancellation request throws; order-specific rejections remain in their\n * result positions.\n * If a later attempt fails, {@link PerpsCancelRetryError} retains the last\n * received `results` in the original request order and the failure as `cause`.\n * Its `pendingIndexes` identifies the original request positions included in\n * that failed attempt. Those entries are historical rejections, not outcomes\n * of the failed retry; other entries retain their confirmed outcomes. A lost\n * response may hide completed cancellations, so reconcile the pending orders\n * before submitting another cancellation.\n *\n * @throws {@link PerpsSessionTradingError}\n * Thrown on failure.\n *\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\n async cancelOrders(\n request: CancelPerpsOrdersRequest,\n ): Promise<PerpsCancelOrderResult[]> {\n return await cancelPerpsOrders(this, request);\n }\n\n /**\n * Cancels all open Perps orders for the authenticated account.\n *\n * @remarks\n * Omit `instrumentId` to cancel open orders across all instruments. The\n * endpoint returns once the cancel-all request is accepted; individual orders\n * can still race with fills or other cancels.\n *\n * @throws {@link PerpsSessionTradingError}\n * Thrown on failure.\n *\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\n async cancelAllOrders(request?: CancelAllPerpsOrdersRequest): Promise<void> {\n await cancelAllOrders(this, request);\n }\n\n /**\n * Arms the auto-cancel switch that cancels all open Perps orders for the\n * authenticated account at `cancelAt`.\n *\n * @remarks\n * The switch is one-shot: once it fires and open orders are cancelled, the\n * schedule clears itself and orders placed afterwards are unprotected.\n * Re-arm periodically to keep protection active. Arming again replaces the\n * previous schedule, and `cancelAt` must be at least five seconds in the\n * future. Accounts may only trigger auto-cancel a limited number of times\n * per UTC day; use {@link PerpsSession.fetchAutoCancelStatus} to inspect the\n * limit, today's trigger count, and when the counter resets.\n *\n * @example\n * ```ts\n * // Keep a 60-second dead man's switch alive by re-arming every 20 seconds.\n * await session.armAutoCancel({ cancelAt: Date.now() + 60_000 });\n * const rearm = setInterval(() => {\n * // A missed re-arm is fail-safe: the previously armed switch still fires.\n * session.armAutoCancel({ cancelAt: Date.now() + 60_000 }).catch(() => {});\n * }, 20_000);\n *\n * // On graceful shutdown, stop re-arming and disarm the schedule.\n * clearInterval(rearm);\n * await session.disarmAutoCancel();\n * ```\n *\n * @throws {@link ArmPerpsAutoCancelError}\n * Thrown on failure, including `AutoCancelDailyLimitError` when the daily\n * trigger limit has been reached.\n *\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\n async armAutoCancel(request: ArmPerpsAutoCancelRequest): Promise<void> {\n await armPerpsAutoCancel(\n this.#api,\n (op, expiresAt) => this.#createSignedCommand(op, expiresAt),\n request,\n );\n }\n\n /**\n * Disarms the auto-cancel schedule for the authenticated account without\n * triggering it.\n *\n * @remarks\n * Disarming is always allowed, even when the daily trigger limit has been\n * reached.\n *\n * @throws {@link PerpsSessionTradingError}\n * Thrown on failure.\n *\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\n async disarmAutoCancel(\n request?: DisarmPerpsAutoCancelRequest,\n ): Promise<void> {\n await disarmPerpsAutoCancel(\n this.#api,\n (op, expiresAt) => this.#createSignedCommand(op, expiresAt),\n request,\n );\n }\n\n /**\n * Updates Perps leverage and margin mode for an instrument.\n *\n * @example\n * ```ts\n * await session.updateLeverage({\n * crossMargin: true,\n * instrumentId: 1,\n * leverage: 2,\n * });\n * ```\n *\n * @throws {@link UpdatePerpsLeverageError}\n * Thrown on failure.\n *\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\n async updateLeverage(\n request: UpdatePerpsLeverageRequest,\n ): Promise<PerpsUpdateLeverageResult> {\n return await updatePerpsLeverage(this, request);\n }\n\n /**\n * Updates Perps leverage and margin mode for one or more instruments.\n *\n * @remarks\n * The batch must contain one to 100 unique instruments. Updates are\n * processed sequentially and are not atomic. Results preserve request\n * order. Per-instrument rejections, including `internal_error`, are returned\n * as data; `internal_error` may represent an unknown application outcome for\n * that instrument. A whole-request `internal_error` also has an unknown\n * application outcome; reconcile account state before retrying the batch.\n *\n * @example\n * ```ts\n * const results = await session.updateLeverages({\n * updates: [\n * { crossMargin: false, instrumentId: 1, leverage: 5 },\n * { crossMargin: true, instrumentId: 2, leverage: 10 },\n * ],\n * });\n * ```\n *\n * @throws {@link UpdatePerpsLeveragesError}\n * Thrown when the complete request is rejected, cannot be sent, or returns inconsistent results.\n *\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\n async updateLeverages(\n request: UpdatePerpsLeveragesRequest,\n ): Promise<PerpsUpdateLeverageBatchResult[]> {\n return await updatePerpsLeverages(this, request);\n }\n\n /**\n * Adjusts isolated margin for an instrument position.\n *\n * @remarks\n * A positive amount adds isolated margin. A negative amount removes it.\n *\n * @example\n * ```ts\n * await session.updateMargin({\n * instrumentId: 1,\n * amount: '100.25',\n * });\n * ```\n *\n * @throws {@link UpdatePerpsMarginError}\n * Thrown on failure.\n *\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\n async updateMargin(request: UpdatePerpsMarginRequest): Promise<void> {\n await updatePerpsMargin(this, request);\n }\n\n async #connect(emitResync: boolean): Promise<void> {\n await this.#connection.connect({\n onConnectionLost: () => this.#handleConnectionLost(),\n onError: () => undefined,\n onMessage: (message) => this.#handleMessage(message),\n onOpen: () => undefined,\n headers: this.#headers,\n url: this.#wsUrl,\n });\n await this.#authenticate();\n await this.#subscribe();\n\n this.#reconnectScheduler.resetBackoff();\n if (emitResync) {\n this.#sequences.clear();\n this.#queue.push({\n reason: 'reconnect',\n type: 'resync',\n });\n }\n }\n\n async #authenticate(): Promise<void> {\n await this.#sendRequest(\n {\n id: this.#nextRequestId++,\n op: {\n args: {\n proxy: this.credentials.proxy,\n secret: this.credentials.secret,\n },\n type: 'auth',\n },\n req: 'post',\n },\n PerpsSessionAckSchema,\n AUTH_TIMEOUT_MS,\n 'Perps session authentication timed out.',\n );\n }\n\n async #subscribe(): Promise<void> {\n await this.#sendRequest(\n {\n id: this.#nextRequestId++,\n req: 'sub',\n chs: PERPS_SESSION_CHANNELS,\n },\n PerpsSessionAckSchema,\n COMMAND_TIMEOUT_MS,\n 'Perps session subscription timed out.',\n );\n\n if (this.#includeBuilderFills) {\n // Optional receipts must not delay or fail core session readiness. Retry\n // on each reconnect; pending requests are cleaned up on timeout or close.\n void this.#sendRequest(\n {\n id: this.#nextRequestId++,\n req: 'sub',\n chs: ['builderFills'],\n },\n PerpsSessionAckSchema,\n COMMAND_TIMEOUT_MS,\n 'Perps builder fills subscription timed out.',\n ).catch(() => undefined);\n }\n }\n\n #authenticatedHeaders(): HeadersInit {\n return {\n 'POLYMARKET-PROXY': this.credentials.proxy,\n 'POLYMARKET-SECRET': this.credentials.secret,\n };\n }\n\n /**\n * @internal\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\n async executeCommand<T>(\n request: PerpsCommandRequest,\n responseSchema: z.ZodType<T>,\n ): Promise<T> {\n const bodyOp = toPerpsCommandBodyOp(request.op);\n const command = this.#createSignedCommand(request.op, request.expiresAt);\n return await this.#sendRequest(\n {\n ...command,\n id: this.#nextRequestId++,\n op: bodyOp,\n req: 'post',\n },\n responseSchema,\n COMMAND_TIMEOUT_MS,\n 'Perps command response timed out.',\n );\n }\n\n /**\n * @internal\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\n async executeCommandWithEvent<TResponse, TEvent extends PerpsSessionEvent>(\n request: PerpsCommandRequest,\n responseSchema: z.ZodType<TResponse>,\n predicate: (event: PerpsSessionEvent) => event is TEvent,\n ): Promise<readonly [TResponse, TEvent]> {\n const waiter = this.#createEventWaiter(predicate);\n const command = this.executeCommand(request, responseSchema);\n // The waiter is already active; its deadline begins after acknowledgement.\n void command.then(\n () =>\n this.#startEventWaiterTimeout(\n waiter,\n ORDER_PLACEMENT_UPDATE_TIMEOUT_MS,\n ),\n () => undefined,\n );\n\n try {\n const [commandResponse, event] = await Promise.all([\n command,\n waiter.promise,\n ]);\n return [commandResponse, event as TEvent];\n } finally {\n this.#removeEventWaiter(waiter);\n }\n }\n\n /**\n * @internal\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\n async executeDeleteCommand<T>(\n request: PerpsDeleteCommandRequest<T>,\n ): Promise<T> {\n const command = this.#createSignedCommand(request.op, request.expiresAt);\n return await this.#api.del(request.path, {\n schema: request.responseSchema,\n json: {\n ...command,\n op: toPerpsCommandBodyOp(request.op),\n },\n });\n }\n\n /** Create a chase using this session. Reconcile uncertain submissions before trying again.\n * @throws {@link CreatePerpsChaseError} Thrown on failure.\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\n async createChase(\n request: CreatePerpsChaseRequest,\n ): Promise<PerpsChaseAccepted> {\n return await createPerpsChase(\n this.#api,\n this.#createSignedCommand.bind(this),\n request,\n );\n }\n /** End a chase and cancel its resting child; completed fills remain.\n * @throws {@link CancelPerpsChaseError} Thrown on failure.\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\n async cancelChase(request: CancelPerpsChaseRequest): Promise<void> {\n return await cancelPerpsChase(\n this.#api,\n this.#createSignedCommand.bind(this),\n request,\n );\n }\n /** Fetch all running chases without pagination. Ended chases are absent.\n * @throws {@link FetchPerpsChasesError} Thrown on failure.\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\n async fetchChases(): Promise<PerpsChase[]> {\n return await fetchPerpsChases(this.#api);\n }\n\n /** Create a TWAP using this session's credentials.\n * @throws {@link CreatePerpsTwapError} Thrown on failure.\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\n async createTwap(\n request: CreatePerpsTwapRequest,\n ): Promise<PerpsTwapAccepted> {\n return await createPerpsTwap(\n this.#api,\n this.#createSignedCommand.bind(this),\n request,\n );\n }\n\n /** Pause a TWAP using this session's credentials.\n * @throws {@link PausePerpsTwapError} Thrown on failure.\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\n async pauseTwap(request: PausePerpsTwapRequest): Promise<void> {\n return await pausePerpsTwap(\n this.#api,\n this.#createSignedCommand.bind(this),\n request,\n );\n }\n\n /** Resume a TWAP using this session's credentials.\n * @throws {@link ResumePerpsTwapError} Thrown on failure.\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\n async resumeTwap(request: ResumePerpsTwapRequest): Promise<void> {\n return await resumePerpsTwap(\n this.#api,\n this.#createSignedCommand.bind(this),\n request,\n );\n }\n\n /** Cancel a TWAP using this session's credentials.\n * @throws {@link CancelPerpsTwapError} Thrown on failure.\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\n async cancelTwap(request: CancelPerpsTwapRequest): Promise<void> {\n return await cancelPerpsTwap(\n this.#api,\n this.#createSignedCommand.bind(this),\n request,\n );\n }\n\n /** Fetch all active TWAPs. Ended runs are absent; no pagination.\n * @throws {@link FetchPerpsTwapsError} Thrown on failure.\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\n async fetchTwaps(): Promise<PerpsTwap[]> {\n return await fetchPerpsTwaps(this.#api);\n }\n #createSignedCommand(op: PerpsSignableValue, expiresAt?: number) {\n const salt = randomUint32();\n const timestamp = Date.now();\n let signature: string;\n try {\n signature = signPerpsOp({\n chainId: this.#chainId,\n op,\n privateKey: this.credentials.privateKey,\n salt,\n timestamp,\n });\n } catch (error) {\n throw SigningError.fromError(\n error,\n 'Could not sign the Perps session command',\n );\n }\n\n const body: Record<string, unknown> = {\n salt,\n sig: signature,\n ts: timestamp,\n };\n if (expiresAt !== undefined) body.exp = expiresAt;\n return body;\n }\n\n async #sendRequest<T>(\n frame: Record<string, unknown> & { id: number },\n schema: z.ZodType<T>,\n timeoutMs: number,\n timeoutMessage: string,\n ): Promise<T> {\n const pending = createPendingResponse(schema);\n this.#pending.set(frame.id, pending);\n const timeout = setNonBlockingTimeout(() => {\n pending.reject(new TransportError(timeoutMessage));\n }, timeoutMs);\n\n try {\n if (!this.#connection.send(frame)) {\n throw new TransportError('Perps session transport is not open.');\n }\n return await pending.promise;\n } finally {\n clearTimeout(timeout);\n this.#pending.delete(frame.id);\n }\n }\n\n async #shutdown(): Promise<void> {\n this.#reconnectScheduler.stop();\n this.#rejectPending(new TransportError('Perps session closed.'));\n this.#rejectEventWaiters(new TransportError('Perps session closed.'));\n this.#queue.end();\n await this.#connection.close();\n this.#onClose(this);\n }\n\n #handleMessage(rawMessage: unknown): void {\n if (this.#handleResponse(rawMessage)) return;\n\n const resync = PerpsNotificationsResyncFrameSchema.safeParse(rawMessage);\n if (resync.success) {\n this.#emitEvent(resync.data);\n return;\n }\n\n const parsed = PerpsSessionUpdateEventSchema.safeParse(rawMessage);\n if (!parsed.success) return;\n\n const event = parsed.data;\n this.#pushSequenceGapIfNeeded(event);\n this.#emitEvent(event);\n }\n\n #handleResponse(rawMessage: unknown): boolean {\n const parsed = PerpsResponseEnvelopeSchema.safeParse(rawMessage);\n if (!parsed.success || parsed.data.id === undefined) return false;\n\n const pending = this.#pending.get(parsed.data.id);\n if (pending === undefined) return true;\n\n const data = pending.schema.safeParse(parsed.data.data);\n if (!data.success) {\n const ack = errorAckFrom(parsed.data.data ?? parsed.data);\n if (ack !== undefined) {\n pending.reject(new RequestRejectedError(ack.error, { status: 200 }));\n } else {\n pending.reject(\n new TransportError('Perps session unexpected response.'),\n );\n }\n return true;\n }\n\n if (isRejectedPerpsAck(data.data)) {\n pending.reject(\n new RequestRejectedError(data.data.error, { status: 200 }),\n );\n } else {\n pending.resolve(data.data);\n }\n return true;\n }\n\n #handleConnectionLost(): void {\n this.#rejectPending(new TransportError('Perps session connection closed.'));\n this.#rejectEventWaiters(\n new TransportError('Perps session connection closed.'),\n );\n if (this.#closing !== undefined) return;\n\n this.#reconnectScheduler.schedule({\n reconnect: () => this.#connect(true),\n shouldReconnect: () => this.#closing === undefined,\n });\n }\n\n #rejectPending(error: Error): void {\n for (const pending of this.#pending.values()) {\n pending.reject(error);\n }\n this.#pending.clear();\n }\n\n #pushSequenceGapIfNeeded(event: { channel: string; sequence: number }): void {\n if (SERVER_RESYNC_CHANNELS.has(event.channel)) return;\n\n const previousSequence = this.#sequences.get(event.channel);\n this.#sequences.set(event.channel, event.sequence);\n\n if (\n previousSequence === undefined ||\n event.sequence === previousSequence + 1\n ) {\n return;\n }\n\n this.#emitEvent({\n channel: event.channel,\n previousSequence,\n reason: 'sequence_gap',\n sequence: event.sequence,\n type: 'resync',\n });\n }\n\n #emitEvent(event: PerpsSessionEvent): void {\n this.#resolveEventWaiters(event);\n this.#queue.push(event);\n }\n\n #createEventWaiter(\n predicate: (event: PerpsSessionEvent) => boolean,\n ): EventWaiter {\n let resolve!: (event: PerpsSessionEvent) => void;\n let reject!: (error: Error) => void;\n const promise = new Promise<PerpsSessionEvent>(\n (resolvePromise, rejectPromise) => {\n resolve = resolvePromise;\n reject = rejectPromise;\n },\n );\n const waiter: EventWaiter = {\n promise,\n predicate,\n reject,\n resolve,\n };\n this.#eventWaiters.add(waiter);\n return waiter;\n }\n\n #startEventWaiterTimeout(waiter: EventWaiter, timeoutMs: number): void {\n if (!this.#eventWaiters.has(waiter)) return;\n waiter.timeout = setNonBlockingTimeout(() => {\n this.#removeEventWaiter(waiter);\n waiter.reject(new TimeoutError('Perps event wait timed out.'));\n }, timeoutMs);\n }\n\n #resolveEventWaiters(event: PerpsSessionEvent): void {\n for (const waiter of Array.from(this.#eventWaiters)) {\n if (waiter.predicate(event)) {\n this.#removeEventWaiter(waiter);\n waiter.resolve(event);\n }\n }\n }\n\n #removeEventWaiter(waiter: EventWaiter): void {\n if (!this.#eventWaiters.delete(waiter)) return;\n if (waiter.timeout !== undefined) clearTimeout(waiter.timeout);\n }\n\n #rejectEventWaiters(error: Error): void {\n for (const waiter of Array.from(this.#eventWaiters)) {\n this.#removeEventWaiter(waiter);\n waiter.reject(error);\n }\n }\n}\n\nfunction createPendingResponse<T>(\n schema: z.ZodType<T>,\n): PendingResponse & { promise: Promise<T> } {\n let resolve!: (value: T) => void;\n let reject!: (error: Error) => void;\n const promise = new Promise<T>((resolvePromise, rejectPromise) => {\n resolve = resolvePromise;\n reject = rejectPromise;\n });\n\n return { promise, reject, resolve, schema };\n}\n\nfunction isRejectedPerpsAck(\n value: unknown,\n): value is Extract<PerpsCommandAck, { status: 'err' }> {\n // Array schemas own per-item error policy; only schema failures recurse into them.\n if (Array.isArray(value)) return false;\n return errorAckFrom(value) !== undefined;\n}\n\nfunction errorAckFrom(value: unknown): { error: string } | undefined {\n if (Array.isArray(value)) {\n for (const item of value) {\n const error = errorAckFrom(item);\n if (error !== undefined) return error;\n }\n return undefined;\n }\n if (typeof value !== 'object' || value === null) {\n return undefined;\n }\n\n const ack = value as { error?: unknown; status?: unknown };\n if (ack.status !== 'err') return undefined;\n\n return {\n error: typeof ack.error === 'string' ? ack.error : 'Perps command failed.',\n };\n}\n\nfunction randomUint32(): number {\n const [value] = globalThis.crypto.getRandomValues(new Uint32Array(1));\n invariant(\n value !== undefined,\n 'Expected crypto.getRandomValues to return a salt.',\n );\n return value;\n}\n\n/** @experimental This API may change in a breaking way in any release, including patch releases. */\nexport {\n CancelPerpsChaseError,\n type CancelPerpsChaseRequest,\n CreatePerpsChaseError,\n type CreatePerpsChaseRequest,\n FetchPerpsChasesError,\n} from './actions/chases';\n\n/** @experimental This API may change in a breaking way in any release, including patch releases. */\nexport {\n CancelPerpsTwapError,\n type CancelPerpsTwapRequest,\n CreatePerpsTwapError,\n type CreatePerpsTwapRequest,\n FetchPerpsTwapsError,\n PausePerpsTwapError,\n type PausePerpsTwapRequest,\n ResumePerpsTwapError,\n type ResumePerpsTwapRequest,\n} from './actions/twaps';\n","import type { PerpsInternalTransferId } from '@kuest/bindings/perps';\nimport type { EvmAddress, EvmSignature } from '@kuest/types';\n\n/** @internal */\nexport type PerpsCollateralTransferOperation = {\n account: EvmAddress;\n token: EvmAddress;\n recipient: EvmAddress;\n amount: string;\n salt: number;\n timestamp: number;\n};\n\n/** @internal */\nexport type SignedPerpsCollateralTransfer = PerpsCollateralTransferOperation & {\n signature: EvmSignature;\n label?: string;\n};\n\n/** @internal */\nexport type PerpsCollateralTransferExecutor = {\n signTransfer(\n operation: PerpsCollateralTransferOperation,\n ): Promise<EvmSignature>;\n submitTransfer(\n transfer: SignedPerpsCollateralTransfer,\n ): Promise<PerpsInternalTransferId>;\n};\n\n/** @internal */\nexport type PerpsCollateralTransfer = PerpsCollateralTransferOperation & {\n label?: string;\n};\n\n/**\n * Signs and submits one validated transfer. The label is unsigned metadata.\n * Failures propagate without retrying: a failed submission may have completed.\n *\n * @internal\n */\nexport async function executePerpsCollateralTransfer(\n executor: PerpsCollateralTransferExecutor,\n transfer: PerpsCollateralTransfer,\n): Promise<PerpsInternalTransferId> {\n const { label, ...operation } = transfer;\n const signature = await executor.signTransfer(operation);\n return executor.submitTransfer({\n ...operation,\n signature,\n ...(label === undefined ? {} : { label }),\n });\n}\n","import {\n EvmAddressSchema,\n type PaginationCursor,\n PaginationCursorSchema,\n} from '@kuest/bindings';\nimport { WalletType } from '@kuest/bindings/gamma';\nimport {\n FetchPerpsCandlesResponseSchema,\n FetchPerpsFeesResponseSchema,\n FetchPerpsFundingHistoryResponseSchema,\n FetchPerpsInstrumentsResponseSchema,\n FetchPerpsStatisticsResponseSchema,\n FetchPerpsTickersResponseSchema,\n FetchPerpsTradesResponseSchema,\n type PerpsBook,\n PerpsBookSchema,\n type PerpsCandle,\n PerpsCreateProxyResponseSchema,\n type PerpsCredentials,\n PerpsCredentialsResponseSchema,\n type PerpsDecimalInput,\n PerpsDecimalInputSchema,\n PerpsDeleteProxyResponseSchema,\n type PerpsFeeScheduleEntry,\n type PerpsFundingRate,\n type PerpsInstrument,\n type PerpsInstrumentCategory,\n PerpsInstrumentCategorySchema,\n PerpsInstrumentIdSchema,\n type PerpsInternalTransferId,\n PerpsInternalTransferResponseSchema,\n type PerpsKlineInterval,\n PerpsKlineIntervalSchema,\n type PerpsPublicTrade,\n type PerpsTicker,\n PerpsTradeIdSchema,\n type PerpsWithdrawalId,\n PerpsWithdrawResponseSchema,\n} from '@kuest/bindings/perps';\nimport {\n type EvmAddress,\n type EvmSignature,\n expectEvmAddress,\n expectPrivateKey,\n invariant,\n isPrivateKey,\n isSameEvmAddress,\n type PrivateKey,\n} from '@kuest/types';\nimport { Address, Secp256k1, TypedData } from 'ox';\nimport { z } from 'zod';\nimport { MAX_UINT256, perpsDepositCall } from '../abis';\nimport type { BaseClient, BaseSecureClient } from '../clients';\nimport {\n CancelledSigningError,\n makeErrorGuard,\n RateLimitError,\n RequestAbortedError,\n RequestRejectedError,\n SigningError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n} from '../errors';\nimport { parseUserInput } from '../input';\nimport {\n decodeCursorState,\n encodeCursorState,\n type Paginated,\n paginate,\n} from '../pagination';\nimport { parseRequestOptions, type RequestOptions } from '../request-options';\nimport {\n expectTransactionHandle,\n type SignerTransactionRequest,\n type TransactionHandle,\n type TypedDataPayload,\n} from '../types';\nimport { SignerType } from '../wallet';\nimport type { PerpsSession } from '../websockets/perps/session';\nimport {\n createPerpsOpTypedDataPayload,\n type PerpsSignedOp,\n randomUint32,\n} from '../websockets/perps/signing';\nimport {\n completeWith,\n type SendPerpsDepositTransactionRequest,\n signerTransactionRequest,\n} from '../workflow';\nimport {\n GaslessTransactionMetadataSchema,\n type GaslessWorkflowRequest,\n prepareGaslessTransaction,\n} from './gasless';\n\n/** @experimental This API may change in a breaking way in any release, including patch releases. */\nexport type {\n ArmPerpsAutoCancelRequest,\n CancelAllPerpsOrdersRequest,\n CancelPerpsOrderRequest,\n CancelPerpsOrdersRequest,\n DisarmPerpsAutoCancelRequest,\n FetchPerpsAccountConfigRequest,\n FetchPerpsBuilderApprovalsRequest,\n FetchPerpsBuilderEarningsSummaryRequest,\n FetchPerpsOpenOrdersRequest,\n FetchPerpsOrdersRequest,\n ListPerpsBuilderEarningsRequest,\n ListPerpsDepositsRequest,\n ListPerpsEquityHistoryRequest,\n ListPerpsFillsRequest,\n ListPerpsFundingPaymentsRequest,\n ListPerpsInternalTransfersRequest,\n ListPerpsNotificationsRequest,\n ListPerpsPnlHistoryRequest,\n ListPerpsWithdrawalsRequest,\n MarkPerpsNotificationsReadRequest,\n PerpsAutoCancelStatus,\n PerpsBuilderFillUpdateEvent,\n PerpsBuilderTermsInput,\n PerpsCancelOptions,\n PerpsCancelOrderResult,\n PerpsCancelRetryOptions,\n PerpsOrderRequest,\n PerpsPlacedTpSlOrder,\n PerpsPlacedTpSlOrders,\n PerpsPlaceFokOrderRequest,\n PerpsPlaceGtcOrderRequest,\n PerpsPlaceGtdOrderRequest,\n PerpsPlaceIocOrderRequest,\n PerpsPositionTpSlTrigger,\n PerpsPositionTrailingStop,\n PerpsPostOrderAck,\n PerpsSession,\n PerpsSessionAccountError,\n PerpsSessionEvent,\n PerpsSessionLifecycleError,\n PerpsSessionTradingError,\n PerpsTpSlTrigger,\n PerpsTrailingStop,\n PerpsUpdateLeverageBatchResult,\n PerpsUpdateLeverageRejection,\n PerpsUpdateLeverageResult,\n PlacePerpsOrderRequest,\n PlacePerpsOrderResult,\n PlacePerpsOrderWithTpSlRequest,\n PlacePerpsOrderWithTpSlResult,\n PlacePerpsPositionTpSlRequest,\n PlacePerpsPositionTpSlResult,\n PostPerpsOrdersRequest,\n UpdatePerpsLeverageRequest,\n UpdatePerpsLeveragesRequest,\n UpdatePerpsMarginRequest,\n} from '../websockets/perps/session';\n/** @experimental This API may change in a breaking way in any release, including patch releases. */\nexport {\n ArmPerpsAutoCancelError,\n FetchPerpsBuilderApprovalsError,\n FetchPerpsBuilderEarningsSummaryError,\n ListPerpsBuilderEarningsError,\n RevokePerpsBuilderFeeError,\n UpdatePerpsLeverageError,\n UpdatePerpsLeveragesError,\n UpdatePerpsMarginError,\n} from '../websockets/perps/session';\n\nimport { snakeCase, toSearchParams } from './params';\nimport { approvePerpsBuilderFee } from './perps/builders';\nimport { executePerpsCollateralTransfer } from './perps/internal-transfer';\n\ntype PerpsPublicReadError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\n\nconst PerpsPublicReadError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\nconst TimestampInputSchema = z.number().int().nonnegative();\nconst ONE_DAY_MS = 24 * 60 * 60 * 1000;\n\ntype PerpsCandlesParams = {\n instrumentId: z.output<typeof PerpsInstrumentIdSchema>;\n interval: PerpsKlineInterval;\n startTimestamp: number;\n endTimestamp: number;\n};\n\ntype PerpsTimeRangeParams = {\n instrumentId: z.output<typeof PerpsInstrumentIdSchema>;\n startTimestamp: number;\n endTimestamp: number;\n};\n\nconst FetchPerpsInstrumentsRequestSchema = z\n .object({\n instrumentId: PerpsInstrumentIdSchema.optional(),\n category: PerpsInstrumentCategorySchema.optional(),\n })\n .default({}) satisfies z.ZodType<FetchPerpsInstrumentsRequest>;\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type FetchPerpsInstrumentsRequest = {\n /** Perps instrument identifier to fetch. */\n instrumentId?: number;\n /** Optional instrument category filter. */\n category?: PerpsInstrumentCategory;\n};\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type FetchPerpsInstrumentsError = PerpsPublicReadError;\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport const FetchPerpsInstrumentsError = PerpsPublicReadError;\n\n/**\n * Fetches Perps instruments.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link FetchPerpsInstrumentsError}\n * Thrown on failure.\n *\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport async function fetchPerpsInstruments(\n client: BaseClient,\n request?: FetchPerpsInstrumentsRequest,\n options: RequestOptions = {},\n): Promise<PerpsInstrument[]> {\n const requestOptions = parseRequestOptions(options);\n const params = parseUserInput(request, FetchPerpsInstrumentsRequestSchema);\n\n return client.perps.get('/v1/info/instruments', {\n schema: FetchPerpsInstrumentsResponseSchema,\n ...requestOptions,\n params: toSearchParams(params, snakeCase()),\n });\n}\n\nconst FetchPerpsTickerRequestSchema = z.object({\n instrumentId: PerpsInstrumentIdSchema,\n}) satisfies z.ZodType<FetchPerpsTickerRequest>;\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type FetchPerpsTickerRequest = {\n /** Perps instrument identifier whose ticker should be fetched. */\n instrumentId: number;\n};\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type FetchPerpsTickerError = PerpsPublicReadError;\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport const FetchPerpsTickerError = PerpsPublicReadError;\n\n/**\n * Fetches the current Perps ticker for an instrument.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link FetchPerpsTickerError}\n * Thrown on failure.\n *\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport async function fetchPerpsTicker(\n client: BaseClient,\n request: FetchPerpsTickerRequest,\n options: RequestOptions = {},\n): Promise<PerpsTicker> {\n const requestOptions = parseRequestOptions(options);\n const params = parseUserInput(request, FetchPerpsTickerRequestSchema);\n const [ticker] = await fetchPerpsTickers(client, params, requestOptions);\n\n if (ticker === undefined) {\n throw new UnexpectedResponseError(\n `Perps ticker ${params.instrumentId} was not returned by the API`,\n );\n }\n\n return ticker;\n}\n\nconst FetchPerpsTickersRequestSchema = z\n .object({\n instrumentId: PerpsInstrumentIdSchema.optional(),\n })\n .default({}) satisfies z.ZodType<FetchPerpsTickersRequest>;\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type FetchPerpsTickersRequest = {\n /** Optional Perps instrument identifier filter. */\n instrumentId?: number;\n};\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type FetchPerpsTickersError = PerpsPublicReadError;\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport const FetchPerpsTickersError = PerpsPublicReadError;\n\n/**\n * Fetches current Perps tickers.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link FetchPerpsTickersError}\n * Thrown on failure.\n *\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport async function fetchPerpsTickers(\n client: BaseClient,\n request?: FetchPerpsTickersRequest,\n options: RequestOptions = {},\n): Promise<PerpsTicker[]> {\n const requestOptions = parseRequestOptions(options);\n const params = parseUserInput(request, FetchPerpsTickersRequestSchema);\n const query = toSearchParams(params, snakeCase());\n const [tickers, statistics] = await Promise.all([\n client.perps.get('/v1/info/tickers', {\n schema: FetchPerpsTickersResponseSchema,\n ...requestOptions,\n params: query,\n }),\n client.perps.get('/v1/info/statistics', {\n schema: FetchPerpsStatisticsResponseSchema,\n ...requestOptions,\n params: query,\n }),\n ]);\n const statisticsByInstrument = new Map(\n statistics.map((statistic) => [statistic.instrumentId, statistic]),\n );\n\n return tickers.map((ticker) => {\n const statistic = statisticsByInstrument.get(ticker.instrumentId);\n\n return {\n ...ticker,\n openPrice: statistic?.openPrice,\n volume24h: statistic?.volume,\n };\n });\n}\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type PerpsBookDepth = 10 | 100 | 500 | 1000;\n\nconst PerpsBookDepthSchema: z.ZodType<PerpsBookDepth> = z.union([\n z.literal(10),\n z.literal(100),\n z.literal(500),\n z.literal(1000),\n]);\n\nconst FetchPerpsBookRequestSchema = z.object({\n instrumentId: PerpsInstrumentIdSchema,\n depth: PerpsBookDepthSchema.default(100),\n}) satisfies z.ZodType<FetchPerpsBookRequest>;\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type FetchPerpsBookRequest = {\n /** Perps instrument identifier whose order book should be fetched. */\n instrumentId: number;\n /** Number of price levels to return on each side. */\n depth?: PerpsBookDepth;\n};\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type FetchPerpsBookError = PerpsPublicReadError;\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport const FetchPerpsBookError = PerpsPublicReadError;\n\n/**\n * Fetches a Perps order book.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link FetchPerpsBookError}\n * Thrown on failure.\n *\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport async function fetchPerpsBook(\n client: BaseClient,\n request: FetchPerpsBookRequest,\n options: RequestOptions = {},\n): Promise<PerpsBook> {\n const requestOptions = parseRequestOptions(options);\n const params = parseUserInput(request, FetchPerpsBookRequestSchema);\n\n return client.perps.get('/v1/info/book', {\n schema: PerpsBookSchema,\n ...requestOptions,\n params: toSearchParams(params, snakeCase()),\n });\n}\n\nconst ListPerpsCandlesInitialRequestSchema = z.object({\n instrumentId: PerpsInstrumentIdSchema,\n interval: PerpsKlineIntervalSchema,\n start: TimestampInputSchema.optional(),\n end: TimestampInputSchema.optional(),\n cursor: PaginationCursorSchema.optional(),\n}) satisfies z.ZodType<\n Extract<ListPerpsCandlesRequest, { instrumentId: number }>\n>;\n\nconst ListPerpsCandlesCursorRequestSchema = z.object({\n cursor: PaginationCursorSchema,\n}) satisfies z.ZodType<\n Extract<ListPerpsCandlesRequest, { cursor: PaginationCursor }>\n>;\n\nconst ListPerpsCandlesRequestSchema = z.union([\n ListPerpsCandlesInitialRequestSchema.transform(({ cursor, ...request }) => ({\n cursor,\n params: toPerpsCandlesParams(request),\n })),\n ListPerpsCandlesCursorRequestSchema.transform(({ cursor }) => ({\n cursor,\n params: undefined,\n })),\n]);\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type ListPerpsCandlesRequest =\n | {\n /** Perps instrument identifier whose candles should be listed. */\n instrumentId: number;\n /** Candle interval. */\n interval: PerpsKlineInterval;\n /** Inclusive start timestamp in milliseconds. */\n start?: number;\n /** Inclusive end timestamp in milliseconds. */\n end?: number;\n /** Opaque cursor returned by a previous page. */\n cursor?: PaginationCursor;\n }\n | {\n /** Opaque cursor returned by a previous page. */\n cursor: PaginationCursor;\n };\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type ListPerpsCandlesError = PerpsPublicReadError;\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport const ListPerpsCandlesError = PerpsPublicReadError;\n\n/**\n * Lists Perps candles for an instrument with SDK-owned pagination.\n *\n * @remarks\n * Defaults to the past 24 hours when `start` is omitted.\n *\n * @throws {@link ListPerpsCandlesError}\n * Thrown on failure.\n *\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport function listPerpsCandles(\n client: BaseClient,\n request: ListPerpsCandlesRequest,\n options: RequestOptions = {},\n): Paginated<PerpsCandle[]> {\n const requestOptions = parseRequestOptions(options);\n const { cursor: initialCursor, params } = parseUserInput(\n request,\n ListPerpsCandlesRequestSchema,\n );\n\n return paginate((cursor) => {\n const state =\n cursor === undefined\n ? createInitialPerpsCandlesCursor(params)\n : decodePerpsCandlesCursor(cursor);\n\n return client.perps\n .get('/v1/info/klines', {\n schema: FetchPerpsCandlesResponseSchema,\n ...requestOptions,\n params: toSearchParams(\n {\n endTimestamp: state.endTimestamp,\n instrumentId: state.instrumentId,\n interval: state.interval,\n startTimestamp: state.startTimestamp,\n },\n snakeCase(),\n ),\n })\n .then((response) => {\n const last = response.data.at(-1);\n const hasMore = response.more && last !== undefined;\n\n return {\n items: response.data,\n hasMore,\n nextCursor: hasMore\n ? encodeCursorState({\n ...state,\n startTimestamp:\n last.timestamp +\n perpsKlineIntervalMilliseconds(state.interval),\n })\n : undefined,\n };\n });\n }, initialCursor);\n}\n\nconst TimeRangePerpsRequestBaseSchema = z.object({\n instrumentId: PerpsInstrumentIdSchema,\n start: TimestampInputSchema.optional(),\n end: TimestampInputSchema.optional(),\n});\n\nconst ListPerpsFundingHistoryInitialRequestSchema =\n TimeRangePerpsRequestBaseSchema.extend({\n cursor: PaginationCursorSchema.optional(),\n }) satisfies z.ZodType<\n Extract<ListPerpsFundingHistoryRequest, { instrumentId: number }>\n >;\n\nconst ListPerpsFundingHistoryCursorRequestSchema = z.object({\n cursor: PaginationCursorSchema,\n}) satisfies z.ZodType<\n Extract<ListPerpsFundingHistoryRequest, { cursor: PaginationCursor }>\n>;\n\nconst ListPerpsFundingHistoryRequestSchema = z.union([\n ListPerpsFundingHistoryInitialRequestSchema.transform(\n ({ cursor, ...request }) => ({\n cursor,\n params: toPerpsTimeRangeParams(request),\n }),\n ),\n ListPerpsFundingHistoryCursorRequestSchema.transform(({ cursor }) => ({\n cursor,\n params: undefined,\n })),\n]);\n\nconst ListPerpsTradesInitialRequestSchema =\n TimeRangePerpsRequestBaseSchema.extend({\n cursor: PaginationCursorSchema.optional(),\n }) satisfies z.ZodType<\n Extract<ListPerpsTradesRequest, { instrumentId: number }>\n >;\n\nconst ListPerpsTradesCursorRequestSchema = z.object({\n cursor: PaginationCursorSchema,\n}) satisfies z.ZodType<\n Extract<ListPerpsTradesRequest, { cursor: PaginationCursor }>\n>;\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type ListPerpsFundingHistoryRequest =\n | {\n /** Perps instrument identifier whose funding history should be listed. */\n instrumentId: number;\n /** Inclusive start timestamp in milliseconds. */\n start?: number;\n /** Inclusive end timestamp in milliseconds. */\n end?: number;\n /** Opaque cursor returned by a previous page. */\n cursor?: PaginationCursor;\n }\n | {\n /** Opaque cursor returned by a previous page. */\n cursor: PaginationCursor;\n };\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type ListPerpsFundingHistoryError = PerpsPublicReadError;\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport const ListPerpsFundingHistoryError = PerpsPublicReadError;\n\n/**\n * Lists Perps funding-rate history for an instrument with SDK-owned pagination.\n *\n * @remarks\n * Defaults to the past 24 hours when `start` is omitted.\n *\n * @throws {@link ListPerpsFundingHistoryError}\n * Thrown on failure.\n *\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport function listPerpsFundingHistory(\n client: BaseClient,\n request: ListPerpsFundingHistoryRequest,\n options: RequestOptions = {},\n): Paginated<PerpsFundingRate[]> {\n const requestOptions = parseRequestOptions(options);\n const { cursor: initialCursor, params } = parseUserInput(\n request,\n ListPerpsFundingHistoryRequestSchema,\n );\n\n return paginate((cursor) => {\n const state =\n cursor === undefined\n ? createInitialPerpsFundingCursor(params)\n : decodePerpsFundingCursor(cursor);\n\n return client.perps\n .get('/v1/info/funding', {\n schema: FetchPerpsFundingHistoryResponseSchema,\n ...requestOptions,\n params: toSearchParams(\n {\n endTimestamp: state.endTimestamp,\n instrumentId: state.instrumentId,\n startTimestamp: state.startTimestamp,\n },\n snakeCase(),\n ),\n })\n .then((response) => {\n const last = response.data.at(-1);\n const hasMore =\n response.more &&\n last !== undefined &&\n last.timestamp > state.startTimestamp;\n\n return {\n items: response.data,\n hasMore,\n nextCursor: hasMore\n ? encodeCursorState({\n ...state,\n endTimestamp: last.timestamp - 1,\n })\n : undefined,\n };\n });\n }, initialCursor);\n}\n\nconst ListPerpsTradesRequestSchema = z.union([\n ListPerpsTradesInitialRequestSchema.transform(({ cursor, ...request }) => ({\n cursor,\n params: toPerpsTimeRangeParams(request),\n })),\n ListPerpsTradesCursorRequestSchema.transform(({ cursor }) => ({\n cursor,\n params: undefined,\n })),\n]);\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type ListPerpsTradesRequest =\n | {\n /** Perps instrument identifier whose recent trades should be listed. */\n instrumentId: number;\n /** Inclusive start timestamp in milliseconds. */\n start?: number;\n /** Inclusive end timestamp in milliseconds. */\n end?: number;\n /** Opaque cursor returned by a previous page. */\n cursor?: PaginationCursor;\n }\n | {\n /** Opaque cursor returned by a previous page. */\n cursor: PaginationCursor;\n };\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type ListPerpsTradesError = PerpsPublicReadError;\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport const ListPerpsTradesError = PerpsPublicReadError;\n\n/**\n * Lists recent Perps trades for an instrument with SDK-owned pagination.\n *\n * @remarks\n * Defaults to the past 24 hours when `start` is omitted.\n *\n * @throws {@link ListPerpsTradesError}\n * Thrown on failure.\n *\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport function listPerpsTrades(\n client: BaseClient,\n request: ListPerpsTradesRequest,\n options: RequestOptions = {},\n): Paginated<PerpsPublicTrade[]> {\n const requestOptions = parseRequestOptions(options);\n const { cursor: initialCursor, params } = parseUserInput(\n request,\n ListPerpsTradesRequestSchema,\n );\n\n return paginate((cursor) => {\n const state =\n cursor === undefined\n ? createInitialPerpsTradesCursor(params)\n : decodePerpsTradesCursor(cursor);\n const seenTradeIds = new Set(state.seenTradeIds);\n\n return client.perps\n .get('/v1/info/trades', {\n schema: FetchPerpsTradesResponseSchema,\n ...requestOptions,\n params: toSearchParams(\n {\n endTimestamp: state.endTimestamp,\n instrumentId: state.instrumentId,\n startTimestamp: state.startTimestamp,\n },\n snakeCase(),\n ),\n })\n .then((response) => {\n const items = response.data.filter(\n (trade) => !seenTradeIds.has(trade.tradeId),\n );\n const rawLast = response.data.at(-1);\n const last = items.at(-1);\n const cursorTimestamp = last?.timestamp ?? rawLast?.timestamp;\n const hasMore =\n response.more &&\n cursorTimestamp !== undefined &&\n cursorTimestamp > state.startTimestamp;\n\n return {\n items,\n hasMore,\n nextCursor: hasMore\n ? encodeCursorState({\n ...state,\n endTimestamp:\n last === undefined ? cursorTimestamp - 1 : cursorTimestamp,\n seenTradeIds:\n last === undefined\n ? []\n : nextPerpsTradeCursorSeenIds(state, items, last),\n })\n : undefined,\n };\n });\n }, initialCursor);\n}\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type FetchPerpsFeesError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport const FetchPerpsFeesError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Fetches the Perps fee schedule.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link FetchPerpsFeesError}\n * Thrown on failure.\n *\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport async function fetchPerpsFees(\n client: BaseClient,\n options: RequestOptions = {},\n): Promise<PerpsFeeScheduleEntry[]> {\n const requestOptions = parseRequestOptions(options);\n const response = await client.perps.get('/v1/info/fees', {\n schema: FetchPerpsFeesResponseSchema,\n ...requestOptions,\n });\n\n return response.feeSchedule;\n}\n\nconst PerpsCandlesCursorStateSchema = z.object({\n kind: z.literal('perpsCandles'),\n instrumentId: PerpsInstrumentIdSchema,\n interval: PerpsKlineIntervalSchema,\n startTimestamp: TimestampInputSchema,\n endTimestamp: TimestampInputSchema,\n});\n\nconst PerpsFundingCursorStateSchema = z.object({\n kind: z.literal('perpsFundingHistory'),\n instrumentId: PerpsInstrumentIdSchema,\n startTimestamp: TimestampInputSchema,\n endTimestamp: TimestampInputSchema,\n});\n\nconst PerpsTradesCursorStateSchema = z.object({\n kind: z.literal('perpsTrades'),\n instrumentId: PerpsInstrumentIdSchema,\n startTimestamp: TimestampInputSchema,\n endTimestamp: TimestampInputSchema,\n seenTradeIds: z.array(PerpsTradeIdSchema),\n});\n\ntype PerpsCandlesCursorState = z.infer<typeof PerpsCandlesCursorStateSchema>;\ntype PerpsFundingCursorState = z.infer<typeof PerpsFundingCursorStateSchema>;\ntype PerpsTradesCursorState = z.infer<typeof PerpsTradesCursorStateSchema>;\n\nfunction toPerpsCandlesParams(\n request: Omit<\n z.output<typeof ListPerpsCandlesInitialRequestSchema>,\n 'cursor'\n >,\n): PerpsCandlesParams {\n const now = Date.now();\n return {\n endTimestamp: request.end ?? now,\n instrumentId: request.instrumentId,\n interval: request.interval,\n startTimestamp: request.start ?? now - ONE_DAY_MS,\n };\n}\n\nfunction toPerpsTimeRangeParams(\n request: z.output<typeof TimeRangePerpsRequestBaseSchema>,\n): PerpsTimeRangeParams {\n const now = Date.now();\n return {\n endTimestamp: request.end ?? now,\n instrumentId: request.instrumentId,\n startTimestamp: request.start ?? now - ONE_DAY_MS,\n };\n}\n\nfunction createInitialPerpsCandlesCursor(\n params: PerpsCandlesParams | undefined,\n): PerpsCandlesCursorState {\n invariant(params !== undefined, 'Expected initial Perps candles params.');\n return { kind: 'perpsCandles', ...params };\n}\n\nfunction createInitialPerpsFundingCursor(\n params: PerpsTimeRangeParams | undefined,\n): PerpsFundingCursorState {\n invariant(params !== undefined, 'Expected initial Perps funding params.');\n return { kind: 'perpsFundingHistory', ...params };\n}\n\nfunction createInitialPerpsTradesCursor(\n params: PerpsTimeRangeParams | undefined,\n): PerpsTradesCursorState {\n invariant(params !== undefined, 'Expected initial Perps trades params.');\n return { kind: 'perpsTrades', seenTradeIds: [], ...params };\n}\n\nfunction decodePerpsCandlesCursor(\n cursor: PaginationCursor,\n): PerpsCandlesCursorState {\n return decodeCursorState(\n cursor,\n PerpsCandlesCursorStateSchema,\n 'Invalid Perps pagination cursor',\n );\n}\n\nfunction decodePerpsFundingCursor(\n cursor: PaginationCursor,\n): PerpsFundingCursorState {\n return decodeCursorState(\n cursor,\n PerpsFundingCursorStateSchema,\n 'Invalid Perps pagination cursor',\n );\n}\n\nfunction decodePerpsTradesCursor(\n cursor: PaginationCursor,\n): PerpsTradesCursorState {\n return decodeCursorState(\n cursor,\n PerpsTradesCursorStateSchema,\n 'Invalid Perps pagination cursor',\n );\n}\n\nfunction perpsKlineIntervalMilliseconds(interval: PerpsKlineInterval): number {\n switch (interval) {\n case '1s':\n return 1000;\n case '1m':\n return 60 * 1000;\n case '5m':\n return 5 * 60 * 1000;\n case '15m':\n return 15 * 60 * 1000;\n case '1h':\n return 60 * 60 * 1000;\n case '4h':\n return 4 * 60 * 60 * 1000;\n case '1d':\n return 24 * 60 * 60 * 1000;\n case '1w':\n return 7 * 24 * 60 * 60 * 1000;\n }\n invariant(false, `Unsupported Perps kline interval: ${String(interval)}`);\n}\n\nfunction nextPerpsTradeCursorSeenIds(\n state: PerpsTradesCursorState,\n items: PerpsPublicTrade[],\n last: PerpsPublicTrade,\n) {\n const seen = new Set(\n state.endTimestamp === last.timestamp ? state.seenTradeIds : [],\n );\n for (const item of items) {\n if (item.timestamp === last.timestamp) seen.add(item.tradeId);\n }\n return Array.from(seen);\n}\n\nconst PrivateKeySchema = z.custom<PrivateKey>(\n (value) => isPrivateKey(value),\n 'Expected a hex-encoded 32-byte private key.',\n);\n\nconst PerpsCredentialsSchema = z.object({\n proxy: z.string().transform((value) => expectEvmAddress(value)),\n privateKey: PrivateKeySchema,\n secret: z.string().min(1),\n expiresAt: z.number().int().positive(),\n});\n\nconst DEFAULT_PERPS_CREDENTIAL_EXPIRES_IN = 7 * 24 * 60 * 60 * 1000;\n\nconst CreatePerpsSessionRequestSchema = z.strictObject({\n builderAttribution: EvmAddressSchema.optional(),\n includeBuilderFills: z.boolean().optional(),\n expiresIn: z\n .number()\n .int()\n .positive()\n .default(DEFAULT_PERPS_CREDENTIAL_EXPIRES_IN),\n label: z.string().min(1).optional(),\n}) satisfies z.ZodType<CreatePerpsSessionRequest>;\n\nconst ResumePerpsSessionRequestSchema = z.strictObject({\n builderAttribution: EvmAddressSchema.optional(),\n includeBuilderFills: z.boolean().optional(),\n credentials: PerpsCredentialsSchema,\n}) satisfies z.ZodType<ResumePerpsSessionRequest>;\n\nconst OpenPerpsSessionRequestSchema = z.union([\n CreatePerpsSessionRequestSchema,\n ResumePerpsSessionRequestSchema,\n]) satisfies z.ZodType<OpenPerpsSessionRequest>;\n\nconst RevokePerpsCredentialsRequestInputSchema = z.object({\n proxy: z.string(),\n}) satisfies z.ZodType<RevokePerpsCredentialsRequest>;\n\nconst RevokePerpsCredentialsRequestSchema =\n RevokePerpsCredentialsRequestInputSchema.transform((request) => ({\n proxy: expectEvmAddress(request.proxy),\n }));\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type CreatePerpsSessionRequest = {\n /** Builder address whose saved approval supplies the fee, limited by the builder cap. Zero disables attribution. */\n builderAttribution?: string;\n /** Include builder receipts for this authenticated account in the session iterator. */\n includeBuilderFills?: boolean;\n /** Delegated credential lifetime in milliseconds. */\n expiresIn?: number;\n /** Optional label for the delegated credentials. */\n label?: string;\n};\ntype ParsedCreatePerpsSessionRequest = z.output<\n typeof CreatePerpsSessionRequestSchema\n>;\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type ResumePerpsSessionRequest = {\n /** Select this builder for resumed orders. Credentials do not store attribution. */\n builderAttribution?: string;\n /** Include builder receipts for this authenticated account in the session iterator. */\n includeBuilderFills?: boolean;\n /** Existing delegated Perps credentials to validate and resume. */\n credentials: PerpsCredentials;\n};\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type OpenPerpsSessionRequest =\n | CreatePerpsSessionRequest\n | ResumePerpsSessionRequest;\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type RevokePerpsCredentialsRequest = {\n /** Proxy address whose delegated credentials should be revoked. */\n proxy: string;\n};\n\nconst PerpsBaseUnitAmountSchema = z.bigint().positive().max(MAX_UINT256);\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type PerpsDepositWorkflowRequest =\n | GaslessWorkflowRequest\n | SendPerpsDepositTransactionRequest;\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type PerpsDepositWorkflow = AsyncGenerator<\n PerpsDepositWorkflowRequest,\n TransactionHandle,\n EvmAddress | EvmSignature | TransactionHandle\n>;\n\nconst DepositToPerpsRequestSchema = z.object({\n amount: PerpsBaseUnitAmountSchema,\n metadata: GaslessTransactionMetadataSchema.optional(),\n}) satisfies z.ZodType<DepositToPerpsRequest>;\n\nconst WithdrawFromPerpsRequestSchema = z.object({\n amount: PerpsBaseUnitAmountSchema,\n}) satisfies z.ZodType<WithdrawFromPerpsRequest>;\n\nconst PositivePerpsDecimalInputSchema = PerpsDecimalInputSchema.refine(\n (value) => /^\\d+(?:\\.\\d+)?$/.test(value) && /[1-9]/.test(value),\n 'Expected a positive fixed-point decimal amount.',\n);\n\nconst PerpsInternalTransferLabelSchema = z\n .string()\n .min(1)\n .refine(\n (value) => new TextEncoder().encode(value).byteLength <= 64,\n 'Expected a label no longer than 64 UTF-8 bytes.',\n );\n\nconst TransferPerpsCollateralRequestSchema = z.object({\n recipient: EvmAddressSchema,\n amount: PositivePerpsDecimalInputSchema,\n label: PerpsInternalTransferLabelSchema.optional(),\n}) satisfies z.ZodType<TransferPerpsCollateralRequest>;\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type DepositToPerpsRequest = {\n /** Collateral amount in base units. */\n amount: bigint;\n /** Optional wallet-visible metadata for gasless deposit workflows. */\n metadata?: string;\n};\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type WithdrawFromPerpsRequest = {\n /** Collateral amount in base units. */\n amount: bigint;\n};\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type TransferPerpsCollateralRequest = {\n /** Main address of the receiving Perps account. */\n recipient: string;\n /** Positive collateral amount in decimalized token units. */\n amount: PerpsDecimalInput;\n /** Optional reconciliation label, up to 64 UTF-8 bytes. */\n label?: string;\n};\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type OpenPerpsSessionError =\n | RateLimitError\n | RequestRejectedError\n | SigningError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport const OpenPerpsSessionError = makeErrorGuard(\n RateLimitError,\n RequestRejectedError,\n SigningError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type RevokePerpsCredentialsError =\n | RateLimitError\n | RequestRejectedError\n | SigningError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport const RevokePerpsCredentialsError = makeErrorGuard(\n RateLimitError,\n RequestRejectedError,\n SigningError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type PreparePerpsDepositError = UserInputError;\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport const PreparePerpsDepositError = makeErrorGuard(UserInputError);\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type DepositToPerpsError =\n | RateLimitError\n | RequestRejectedError\n | CancelledSigningError\n | SigningError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport const DepositToPerpsError = makeErrorGuard(\n CancelledSigningError,\n RateLimitError,\n RequestRejectedError,\n SigningError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type WithdrawFromPerpsError =\n | RateLimitError\n | RequestRejectedError\n | SigningError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport const WithdrawFromPerpsError = makeErrorGuard(\n RateLimitError,\n RequestRejectedError,\n SigningError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type TransferPerpsCollateralError =\n | RateLimitError\n | RequestRejectedError\n | SigningError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport const TransferPerpsCollateralError = makeErrorGuard(\n RateLimitError,\n RequestRejectedError,\n SigningError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Opens a Perps account session.\n *\n * @remarks\n * Omit `expiresIn` to create new delegated Perps credentials that expire after\n * one week. Pass `expiresIn` as a duration in milliseconds to use a shorter or\n * longer credential lifetime, or pass existing credentials to validate and\n * resume a previous session.\n *\n * Pass `builderAttribution` to select a builder for new orders and TP/SL exits.\n * Opening or resuming checks builder availability and uses the lower of the\n * builder cap and the trader's saved approved maximum. Missing approval counts\n * as zero. A zero effective fee disables attribution without failing setup.\n * Approve a maximum explicitly with `session.approveBuilderFee({ maxFeeRate })`.\n * The builder address defaults to the session's selected builder.\n * Opening a session never grants consent. Approval remains valid until revoked\n * or replaced and does not need to be repeated for each session.\n * Set `includeBuilderFills` to receive builder receipts through the session iterator.\n *\n * @throws {@link OpenPerpsSessionError}\n * Thrown on failure.\n *\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport async function openPerpsSession(\n client: BaseSecureClient,\n request: OpenPerpsSessionRequest = {},\n): Promise<PerpsSession> {\n const params = parseUserInput(request, OpenPerpsSessionRequestSchema);\n const credentials =\n 'credentials' in params\n ? await resumePerpsCredentials(client, params.credentials)\n : await createPerpsCredentials(client, params);\n return client.webSockets.perpsSession.connect(\n credentials,\n params.builderAttribution,\n approvePerpsBuilderFee.bind(null, client),\n params.includeBuilderFills,\n );\n}\n\n/**\n * Revokes delegated Perps credentials by proxy address.\n *\n * @remarks\n * This signs the revocation with the owner account. It can revoke credentials\n * outside the currently open Perps session.\n *\n * @throws {@link RevokePerpsCredentialsError}\n * Thrown on failure.\n *\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport async function revokePerpsCredentials(\n client: BaseSecureClient,\n request: RevokePerpsCredentialsRequest,\n): Promise<void> {\n const params = parseUserInput(request, RevokePerpsCredentialsRequestSchema);\n const op = {\n type: 'deleteProxy' as const,\n args: {\n proxy: params.proxy,\n },\n };\n const signedOp = [\n 'deleteProxy',\n [params.proxy],\n ] as const satisfies PerpsSignedOp;\n const salt = randomUint32();\n const timestamp = Date.now();\n const signature = await signPerpsOwnerOp(client, {\n salt,\n signedOp,\n timestamp,\n });\n\n const response = await client.perps.del('/v1/account/proxy', {\n schema: PerpsDeleteProxyResponseSchema,\n json: {\n op,\n salt,\n sig: signature,\n ts: timestamp,\n },\n });\n\n if (response.status === 'err') {\n throw new RequestRejectedError(\n response.error ?? 'Perps credentials revocation was rejected.',\n { status: 200 },\n );\n }\n}\n\n/**\n * Starts a Perps deposit workflow.\n *\n * @remarks\n * The deposit sends approved collateral into the Perps deposit contract and\n * credits the authenticated signer account. It does not approve collateral\n * spending; call `setupTradingApprovals` first when allowance is missing.\n *\n * @throws {@link PreparePerpsDepositError}\n * Thrown on failure.\n *\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport async function preparePerpsDeposit(\n client: BaseSecureClient,\n request: DepositToPerpsRequest,\n): Promise<PerpsDepositWorkflow> {\n const params = parseUserInput(request, DepositToPerpsRequestSchema);\n const { contracts } = client.environment;\n const call = perpsDepositCall(\n contracts.perpsDepositContract,\n contracts.collateralToken,\n params.amount,\n client.account.signer,\n );\n\n return async function* (): PerpsDepositWorkflow {\n if (client.account.walletType === WalletType.EOA) {\n return expectTransactionHandle(\n yield sendPerpsDepositTransaction(\n signerTransactionRequest(client.environment.chainId, call),\n ),\n );\n }\n\n return yield* await prepareGaslessTransaction(client, {\n calls: [call],\n metadata:\n params.metadata ??\n `Deposit ${params.amount} of ${contracts.collateralToken} to Perps`,\n });\n }.call(null);\n}\n\n/**\n * Deposits collateral into Perps for the authenticated signer account.\n *\n * @throws {@link DepositToPerpsError}\n * Thrown on failure.\n *\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport function depositToPerps(\n client: BaseSecureClient,\n request: DepositToPerpsRequest,\n): Promise<TransactionHandle> {\n return preparePerpsDeposit(client, request).then(completeWith(client.signer));\n}\n\n/**\n * Requests a Perps withdrawal to the authenticated wallet.\n *\n * @remarks\n * The withdrawal is signed by the owner account and sends funds to the SDK\n * wallet address associated with the authenticated account.\n *\n * @throws {@link WithdrawFromPerpsError}\n * Thrown on failure.\n *\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport async function withdrawFromPerps(\n client: BaseSecureClient,\n request: WithdrawFromPerpsRequest,\n): Promise<PerpsWithdrawalId> {\n const params = parseUserInput(request, WithdrawFromPerpsRequestSchema);\n const timestamp = Math.floor(Date.now() / 1000);\n const salt = randomUint32();\n const op = {\n type: 'withdraw' as const,\n args: {\n account: client.account.signer,\n token: client.environment.contracts.collateralToken,\n amount: params.amount.toString(),\n to: client.account.wallet,\n },\n };\n const signature = await signPerpsWithdraw(client, {\n amount: params.amount,\n salt,\n timestamp,\n });\n\n const response = await client.perps.post('/v1/account/withdraw', {\n schema: PerpsWithdrawResponseSchema,\n json: {\n op,\n salt,\n sig: signature,\n ts: timestamp,\n },\n });\n\n if (response.status === 'err') {\n throw new RequestRejectedError(\n response.error ?? 'Perps withdrawal was rejected.',\n { status: 200 },\n );\n }\n\n if (response.withdrawalId === undefined) {\n throw new UnexpectedResponseError(\n 'Perps withdrawal response did not include a withdrawal ID.',\n );\n }\n\n return response.withdrawalId;\n}\n\n/**\n * Transfers Perps collateral to another account.\n *\n * @remarks\n * The exact decimal amount is signed by the owner account and sent unchanged.\n * The request is attempted once. A timeout or server error after submission\n * has an unknown outcome; reconcile through internal-transfer history using a\n * caller-supplied label before submitting another transfer.\n *\n * @throws {@link TransferPerpsCollateralError}\n * Thrown on failure.\n *\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport async function transferPerpsCollateral(\n client: BaseSecureClient,\n request: TransferPerpsCollateralRequest,\n): Promise<PerpsInternalTransferId> {\n assertPerpsOwnerSigner(client);\n const params = parseUserInput(request, TransferPerpsCollateralRequestSchema);\n\n if (isSameEvmAddress(params.recipient, client.account.signer)) {\n throw new UserInputError(\n 'Perps collateral cannot be transferred to the authenticated account.',\n );\n }\n\n return executePerpsCollateralTransfer(\n {\n signTransfer({ account, token, amount, recipient, salt, timestamp }) {\n return signPerpsOwnerOp(client, {\n salt,\n signedOp: ['internalTransfer', [account, token, amount, recipient]],\n timestamp,\n });\n },\n async submitTransfer(transfer) {\n const body: Record<string, unknown> = {\n op: {\n type: 'internalTransfer',\n args: {\n account: transfer.account,\n token: transfer.token,\n amount: transfer.amount,\n to: transfer.recipient,\n },\n },\n salt: transfer.salt,\n sig: transfer.signature,\n ts: transfer.timestamp,\n };\n if (transfer.label !== undefined) body.label = transfer.label;\n\n const response = await client.perps.post(\n '/v1/account/internal-transfer',\n { schema: PerpsInternalTransferResponseSchema, json: body },\n );\n return response.transferId;\n },\n },\n {\n account: client.account.signer,\n token: client.environment.contracts.collateralToken,\n amount: params.amount,\n recipient: params.recipient,\n label: params.label,\n salt: randomUint32(),\n timestamp: Date.now(),\n },\n );\n}\n\nasync function createPerpsCredentials(\n client: BaseSecureClient,\n request: ParsedCreatePerpsSessionRequest,\n): Promise<PerpsCredentials> {\n const privateKey = createPerpsProxyPrivateKey();\n const proxy = addressFromPrivateKey(privateKey);\n const owner = client.account.signer;\n const expiresAt = Date.now() + request.expiresIn;\n const timestamp = Date.now();\n const salt = randomUint32();\n const op = {\n args: {\n expiry: expiresAt,\n owner,\n proxy,\n },\n type: 'createProxy' as const,\n };\n const signature = await signPerpsCreateProxy(client, {\n expiresAt,\n proxy,\n salt,\n timestamp,\n });\n const body: Record<string, unknown> = {\n op,\n salt,\n sig: signature,\n ts: timestamp,\n };\n if (request.label !== undefined) body.label = request.label;\n\n const response = await client.perps.post('/v1/account/proxy', {\n schema: PerpsCreateProxyResponseSchema,\n json: body,\n });\n const credentials = {\n expiresAt,\n privateKey,\n proxy,\n secret: response.secret,\n };\n\n return validatePerpsCredentials(client, credentials);\n}\n\nasync function resumePerpsCredentials(\n client: BaseSecureClient,\n credentials: PerpsCredentials,\n): Promise<PerpsCredentials> {\n assertPerpsCredentialsKeyMatchesProxy(credentials);\n return validatePerpsCredentials(client, credentials);\n}\n\nasync function validatePerpsCredentials(\n client: BaseSecureClient,\n credentials: PerpsCredentials,\n): Promise<PerpsCredentials> {\n const response = await client.perps.getWorkflow('/v1/account/credentials', {\n schema: PerpsCredentialsResponseSchema,\n headers: perpsCredentialHeaders(credentials),\n });\n\n if (!isSameEvmAddress(response.address, client.account.signer)) {\n throw new UnexpectedResponseError(\n 'Perps credentials belong to a different signer account.',\n );\n }\n\n const proxyKey = response.keys.find((key) =>\n isSameEvmAddress(key.proxy, credentials.proxy),\n );\n if (proxyKey === undefined) {\n throw new UnexpectedResponseError(\n 'Perps credentials were not returned by the API.',\n );\n }\n if (proxyKey.expiresAt <= Date.now()) {\n throw new UnexpectedResponseError('Perps credentials are expired.');\n }\n\n return {\n ...credentials,\n expiresAt: proxyKey.expiresAt,\n };\n}\n\ntype PerpsCreateProxySignatureRequest = {\n expiresAt: number;\n proxy: EvmAddress;\n salt: number;\n timestamp: number;\n};\n\nasync function signPerpsCreateProxy(\n client: BaseSecureClient,\n request: PerpsCreateProxySignatureRequest,\n) {\n try {\n return await client.signer.signTypedData(\n createPerpsCreateProxyTypedDataPayload({\n chainId: client.environment.chainId,\n ...request,\n }),\n );\n } catch (error) {\n throw SigningError.fromError(\n error,\n 'Could not sign the Perps proxy credentials request',\n );\n }\n}\n\ntype PerpsOpSignatureRequest = {\n salt: number;\n signedOp: PerpsSignedOp;\n timestamp: number;\n};\n\nasync function signPerpsOwnerOp(\n client: BaseSecureClient,\n request: PerpsOpSignatureRequest,\n) {\n try {\n return await client.signer.signTypedData(\n createPerpsOpTypedDataPayload({\n chainId: client.environment.chainId,\n op: request.signedOp,\n salt: request.salt,\n timestamp: request.timestamp,\n }),\n );\n } catch (error) {\n throw SigningError.fromError(\n error,\n 'Could not sign the Perps operation request',\n );\n }\n}\n\ntype PerpsWithdrawSignatureRequest = {\n amount: bigint;\n salt: number;\n timestamp: number;\n};\n\nasync function signPerpsWithdraw(\n client: BaseSecureClient,\n request: PerpsWithdrawSignatureRequest,\n) {\n try {\n return await client.signer.signTypedData(\n createPerpsWithdrawTypedDataPayload({\n account: client.account.signer,\n chainId: client.environment.chainId,\n contract: client.environment.contracts.perpsDepositContract,\n token: client.environment.contracts.collateralToken,\n to: client.account.wallet,\n ...request,\n }),\n );\n } catch (error) {\n throw SigningError.fromError(\n error,\n 'Could not sign the Perps withdrawal request',\n );\n }\n}\n\ntype CreatePerpsWithdrawTypedDataPayloadRequest =\n PerpsWithdrawSignatureRequest & {\n account: EvmAddress;\n chainId: number;\n contract: EvmAddress;\n token: EvmAddress;\n to: EvmAddress;\n };\n\nfunction createPerpsWithdrawTypedDataPayload(\n request: CreatePerpsWithdrawTypedDataPayloadRequest,\n): TypedDataPayload {\n const domain = {\n chainId: request.chainId,\n name: 'Polymarket',\n verifyingContract: request.contract,\n version: '1',\n };\n\n return {\n domain,\n message: {\n account: request.account,\n amount: request.amount,\n fee: 0n,\n salt: request.salt,\n token: request.token,\n to: request.to,\n ts: request.timestamp,\n },\n primaryType: 'Withdraw',\n types: {\n EIP712Domain: TypedData.extractEip712DomainTypes(domain),\n Withdraw: [\n { name: 'account', type: 'address' },\n { name: 'token', type: 'address' },\n { name: 'amount', type: 'uint256' },\n { name: 'fee', type: 'uint256' },\n { name: 'to', type: 'address' },\n { name: 'salt', type: 'uint64' },\n { name: 'ts', type: 'uint64' },\n ],\n },\n };\n}\n\ntype CreatePerpsCreateProxyTypedDataPayloadRequest =\n PerpsCreateProxySignatureRequest & {\n chainId: number;\n };\n\nfunction createPerpsCreateProxyTypedDataPayload(\n request: CreatePerpsCreateProxyTypedDataPayloadRequest,\n): TypedDataPayload {\n const domain = {\n chainId: request.chainId,\n name: 'Polymarket',\n version: '1',\n };\n\n return {\n domain,\n message: {\n addr: request.proxy,\n exp: request.expiresAt,\n salt: request.salt,\n ts: request.timestamp,\n },\n primaryType: 'CreateProxy',\n types: {\n CreateProxy: [\n { name: 'addr', type: 'address' },\n { name: 'exp', type: 'uint64' },\n { name: 'salt', type: 'uint64' },\n { name: 'ts', type: 'uint64' },\n ],\n EIP712Domain: TypedData.extractEip712DomainTypes(domain),\n },\n };\n}\n\nfunction createPerpsProxyPrivateKey(): PrivateKey {\n return expectPrivateKey(\n Secp256k1.randomPrivateKey(),\n 'Generated invalid Perps proxy key.',\n );\n}\n\nfunction addressFromPrivateKey(privateKey: PrivateKey) {\n return expectEvmAddress(\n Address.fromPublicKey(Secp256k1.getPublicKey({ privateKey })),\n );\n}\n\nfunction assertPerpsCredentialsKeyMatchesProxy(\n credentials: PerpsCredentials,\n): void {\n const privateKeyAddress = addressFromPrivateKey(credentials.privateKey);\n if (!isSameEvmAddress(privateKeyAddress, credentials.proxy)) {\n throw new UserInputError(\n 'Perps credentials private key does not match the proxy address.',\n );\n }\n}\n\nfunction assertPerpsOwnerSigner(client: BaseSecureClient): void {\n if (client.account.signerType !== SignerType.OWNER) {\n throw new UserInputError(\n 'Perps collateral transfers must be signed by the account owner.',\n );\n }\n}\n\nfunction perpsCredentialHeaders(\n credentials: Pick<PerpsCredentials, 'proxy' | 'secret'>,\n): HeadersInit {\n return {\n 'POLYMARKET-PROXY': credentials.proxy,\n 'POLYMARKET-SECRET': credentials.secret,\n };\n}\n\nfunction sendPerpsDepositTransaction(\n request: SignerTransactionRequest,\n): SendPerpsDepositTransactionRequest {\n return {\n kind: 'sendPerpsDepositTransaction',\n request,\n };\n}\n\n/** @experimental This API may change in a breaking way in any release, including patch releases. */\nexport type {\n PerpsChase,\n PerpsChaseAccepted,\n PerpsChaseId,\n} from '@kuest/bindings/perps';\n/** @experimental This API may change in a breaking way in any release, including patch releases. */\nexport {\n type PerpsTwap,\n type PerpsTwapAccepted,\n type PerpsTwapId,\n PerpsTwapStatus,\n} from '@kuest/bindings/perps';\n/** @experimental This API may change in a breaking way in any release, including patch releases. */\nexport {\n CancelPerpsChaseError,\n type CancelPerpsChaseRequest,\n CreatePerpsChaseError,\n type CreatePerpsChaseRequest,\n FetchPerpsChasesError,\n} from '../websockets/perps/actions/chases';\n/** @experimental This API may change in a breaking way in any release, including patch releases. */\nexport {\n CancelPerpsTwapError,\n type CancelPerpsTwapRequest,\n CreatePerpsTwapError,\n type CreatePerpsTwapRequest,\n FetchPerpsTwapsError,\n PausePerpsTwapError,\n type PausePerpsTwapRequest,\n ResumePerpsTwapError,\n type ResumePerpsTwapRequest,\n} from '../websockets/perps/actions/twaps';\n","import { EvmAddressSchema } from '@kuest/bindings';\nimport { PerpsRegistrationResponseSchema } from '@kuest/bindings/perps';\nimport { z } from 'zod';\nimport type { BaseClient } from '../../clients';\nimport {\n makeErrorGuard,\n RateLimitError,\n RequestAbortedError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n} from '../../errors';\nimport { parseUserInput } from '../../input';\nimport {\n parseRequestOptions,\n type RequestOptions,\n} from '../../request-options';\nimport { toSearchParams } from '../params';\n\nconst FetchPerpsRegistrationRequestSchema = z.object({\n address: EvmAddressSchema,\n}) satisfies z.ZodType<FetchPerpsRegistrationRequest>;\n\n/** @experimental This API may change in a breaking way in any release, including patch releases. */\nexport type FetchPerpsRegistrationRequest = {\n /** Address whose Perps account registration should be checked. */\n address: string;\n};\n\n/** @experimental This API may change in a breaking way in any release, including patch releases. */\nexport type FetchPerpsRegistrationError =\n | RateLimitError\n | RequestAbortedError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\n\n/** @experimental This API may change in a breaking way in any release, including patch releases. */\nexport const FetchPerpsRegistrationError = makeErrorGuard(\n RateLimitError,\n RequestAbortedError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Fetches whether an address has a Perps account without authentication.\n * Registration is permanent; a false result may be cached for up to ten seconds.\n *\n * @throws {@link FetchPerpsRegistrationError} Thrown on failure.\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport async function fetchPerpsRegistration(\n client: BaseClient,\n request: FetchPerpsRegistrationRequest,\n options: RequestOptions = {},\n): Promise<boolean> {\n const requestOptions = parseRequestOptions(options);\n const params = parseUserInput(request, FetchPerpsRegistrationRequestSchema);\n return client.perps.get('/v1/info/registered', {\n schema: PerpsRegistrationResponseSchema,\n ...requestOptions,\n params: toSearchParams(params, { address: 'address' }),\n });\n}\n","import {\n ComboConditionIdSchema,\n EventIdSchema,\n EvmAddressSchema,\n PaginationCursorSchema,\n} from '@kuest/bindings';\nimport {\n CanonicalMarketConditionIdSchema,\n type ComboPosition,\n ComboPositionSortBySchema,\n ComboPositionStatus,\n ComboPositionStatusSchema,\n FetchPortfolioValueResponseSchema,\n FetchUserPnlResponseSchema,\n FetchUserStatsResponseSchema,\n FetchUserVolumeResponseSchema,\n ListComboPositionsResponseSchema,\n ListPositionsResponseSchema,\n type PortfolioValue,\n type Position,\n PositionFilterTypeSchema,\n PositionSortBySchema,\n PositionStatus,\n PositionStatusSchema,\n SortDirectionSchema,\n UserPnlFidelitySchema,\n UserPnlIntervalSchema,\n type UserPnlSeries,\n type UserStats,\n type UserVolume,\n} from '@kuest/bindings/data';\nimport { z } from 'zod';\nimport type { BaseClient } from '../clients';\nimport {\n makeErrorGuard,\n RateLimitError,\n RequestAbortedError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n} from '../errors';\nimport { parseUserInput } from '../input';\nimport { PageSizeSchema, type Paginated, paginate } from '../pagination';\nimport { parseRequestOptions, type RequestOptions } from '../request-options';\nimport {\n distinctIdList,\n EpochSecondsLikeSchema,\n TimeWindowSchema,\n toDataSearchParams,\n toLegacyDataSearchParams,\n} from './params';\n\nexport {\n ComboPositionSortBy,\n ComboPositionStatus,\n PositionFilterType,\n PositionSortBy,\n PositionStatus,\n UserPnlFidelity,\n UserPnlInterval,\n} from '@kuest/bindings/data';\n\nconst ListPositionsRequestSchema = z\n .object({\n cursor: PaginationCursorSchema.optional(),\n // The service default; anything past 1000 is rejected, not clamped.\n pageSize: PageSizeSchema.max(1000).default(100),\n /** The wallet to anchor on. At least one of `user`/`conditionId` is required. */\n user: EvmAddressSchema.optional(),\n /**\n * With `user`, narrows that user's positions (all ids honoured). Without\n * `user`, anchors on the market's holders — exactly one id there.\n */\n // The service dedupes and then caps every condition selector at 20\n // DISTINCT ids (one shared parser across the surface).\n conditionId: z\n .union([\n CanonicalMarketConditionIdSchema,\n distinctIdList(CanonicalMarketConditionIdSchema, 20),\n ])\n .optional(),\n /**\n * OPEN (default, includes REDEEMABLE rows) | REDEEMABLE |\n * REDEEMABLE_LOST | MERGEABLE | CLOSED.\n *\n * REDEEMABLE_LOST (still-held, zero-payout positions) requires `user`.\n * MERGEABLE (live complementary pairs) is user-scoped too, but a\n * `conditionId`-only request falls back to OPEN rather than failing.\n */\n status: PositionStatusSchema.optional(),\n eventId: z.array(EventIdSchema).min(1).optional(),\n /**\n * Case-insensitive title substring (max 200 Unicode characters).\n * `%` and `_` retain wildcard meaning. Blank input is ignored; other\n * patterns are preserved unchanged on every page.\n */\n title: z\n .string()\n .transform((value) =>\n /^\\p{White_Space}*$/u.test(value) ? undefined : value,\n )\n .refine((value) => value === undefined || [...value].length <= 200, {\n message: 'title must contain at most 200 characters',\n })\n .optional(),\n filterType: PositionFilterTypeSchema.optional(),\n filterAmount: z.number().min(0).optional(),\n includeArchived: z.boolean().optional(),\n /**\n * Defaults by status: CURRENT_VALUE for OPEN/REDEEMABLE/REDEEMABLE_LOST,\n * TOKENS for MERGEABLE, REALIZED_PNL for CLOSED.\n */\n sortBy: PositionSortBySchema.optional(),\n sortDirection: SortDirectionSchema.optional(),\n /** Bounds the rows' last economics event. */\n window: TimeWindowSchema.optional(),\n })\n .refine((value) => value.user !== undefined || value.conditionId, {\n message: 'Provide user or conditionId',\n path: ['user'],\n })\n // Without a user the request anchors on the market's holders, and the\n // service accepts exactly one id there — mirror it so the 400 is\n // unreachable.\n .refine(\n (value) =>\n value.user !== undefined ||\n !Array.isArray(value.conditionId) ||\n value.conditionId.length === 1,\n {\n message: 'Without user, provide exactly one conditionId',\n path: ['conditionId'],\n },\n )\n .refine((value) => !(value.conditionId && value.eventId), {\n message: 'Provide conditionId or eventId, not both',\n path: ['eventId'],\n })\n .refine((value) => value.user !== undefined || value.eventId === undefined, {\n message: 'eventId requires user',\n path: ['eventId'],\n })\n .refine((value) => !(value.includeArchived && value.status === 'CLOSED'), {\n message: 'includeArchived does not apply to CLOSED positions',\n path: ['includeArchived'],\n })\n // Lost positions are only defined relative to a wallet, so the service\n // rejects a market-anchored request outright instead of falling back the\n // way MERGEABLE does — mirror it so the 400 is unreachable.\n .refine(\n (value) =>\n value.status !== PositionStatus.RedeemableLost ||\n value.user !== undefined,\n {\n message: 'REDEEMABLE_LOST requires user',\n path: ['user'],\n },\n );\n\nexport type ListPositionsRequest = z.input<typeof ListPositionsRequestSchema>;\n\nexport type ListPositionsError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const ListPositionsError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Lists positions for a wallet, or a market's holders when anchored on a\n * single `conditionId` without a `user`.\n *\n * One method serves the whole lifecycle: `status: 'OPEN'` (the default) is\n * the superset including settled-but-unredeemed winners, `'REDEEMABLE'`\n * narrows to exactly those, `'REDEEMABLE_LOST'` lists still-held zero-payout\n * positions, `'MERGEABLE'` lists live complementary pairs, and `'CLOSED'`\n * lists exited positions. The two narrow filters are request vocabulary only:\n * a lost row still reports `status: 'REDEEMABLE'` and a mergeable one\n * `'OPEN'`. Every row carries `redeemable`/`mergeable` flags and\n * fee-exclusive entry economics. A dust floor of 0.1 shares applies on every\n * status but CLOSED unless `filterType`/`filterAmount` say otherwise.\n * `conditionId` accepts at most 20 distinct ids (with `user`). `pageSize`\n * defaults to 100 (max 1000). Transient rate limits are retried\n * by default.\n *\n * `REDEEMABLE_LOST` requires `user`. For `MERGEABLE`, provide `user` to\n * filter to mergeable positions; a `conditionId`-only request falls back\n * to the broader `OPEN` listing. `sortBy` defaults to `TOKENS` for\n * `MERGEABLE`, `REALIZED_PNL` for `CLOSED`, and `CURRENT_VALUE` otherwise.\n * For wallet-anchored `CLOSED` listings, `TOKENS`, `CURRENT_VALUE`, `PRICE`\n * and `UNREALIZED_PNL` sort by realized PnL in the requested direction.\n * Keep the original filters and requested sort when resuming a cursor. If\n * an older cursor is rejected with HTTP 400 because the ordering changed,\n * discard it and explicitly fetch a new first page; the paginator does not\n * restart the listing.\n * `title` filters by case-insensitive substring across every status and\n * anchor; the paginator retains it when advancing or resuming.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link ListPositionsError}\n * Thrown on failure.\n *\n * @example\n * Fetch the first page of results:\n * ```ts\n * const result = listPositions(client, {\n * user: '0x7c3db723f1d4d8cb9c550095203b686cb11e5c6b',\n * pageSize: 10,\n * });\n *\n * const firstPage = await result.firstPage();\n *\n * // Optionally, fetch additional pages:\n * for await (const page of result.from(firstPage.nextCursor)) {\n * // page.items: Position[]\n * }\n * ```\n *\n * @example\n * Loop through a wallet's exited positions with `for await`:\n * ```ts\n * const result = listPositions(client, {\n * user: '0x7c3db723f1d4d8cb9c550095203b686cb11e5c6b',\n * status: PositionStatus.Closed,\n * });\n *\n * for await (const page of result) {\n * // page.items: Position[]\n * }\n * ```\n */\nexport function listPositions(\n client: BaseClient,\n request: ListPositionsRequest,\n options: RequestOptions = {},\n): Paginated<Position[]> {\n const requestOptions = parseRequestOptions(options);\n const { cursor, pageSize, window, ...params } = parseUserInput(\n request,\n ListPositionsRequestSchema,\n );\n\n return paginate(\n (cursor) =>\n client.data.get('/v2/positions', {\n schema: ListPositionsResponseSchema,\n ...requestOptions,\n // The full original filter set rides along with every cursor: the\n // cursor binds only its paging anchor, and a filter dropped on a\n // follow-up page would silently widen the result set.\n params: toDataSearchParams({\n ...params,\n ...window,\n limit: pageSize,\n cursor,\n }),\n }),\n cursor,\n );\n}\n\n/**\n * One status or a non-empty ordered list of statuses. Pass multiple statuses\n * as an array rather than a comma-separated string.\n * `ComboPositionStatus.Redeemable` must be the sole value (scalar or a\n * one-element array — both serialize identically) — it narrows to rows whose\n * `redeemable` flag is set and cannot ride a multi-status list.\n */\nexport type ComboPositionStatusFilter =\n | ComboPositionStatus\n | readonly [ComboPositionStatus, ...ComboPositionStatus[]];\n\nconst ComboPositionStatusFilterSchema = z.union([\n ComboPositionStatusSchema,\n z\n .tuple([ComboPositionStatusSchema], ComboPositionStatusSchema)\n .refine(\n (statuses) =>\n statuses.length === 1 ||\n !statuses.includes(ComboPositionStatus.Redeemable),\n { message: 'REDEEMABLE must be the sole status value' },\n ),\n]) satisfies z.ZodType<ComboPositionStatusFilter>;\n\nconst ListComboPositionsRequestSchema = z.object({\n cursor: PaginationCursorSchema.optional(),\n // The service default; anything past 1000 is rejected, not clamped.\n pageSize: PageSizeSchema.max(1000).default(100),\n /** The wallet to anchor on. Required — combo positions are wallet-anchored. */\n user: EvmAddressSchema,\n // Same shared 20-DISTINCT service cap as the other condition selectors.\n conditionId: z\n .union([ComboConditionIdSchema, distinctIdList(ComboConditionIdSchema, 20)])\n .optional(),\n status: ComboPositionStatusFilterSchema.optional(),\n /**\n * FIRST_ENTRY (default; REDEEMABLE defaults to ENTRY_COST so the largest\n * claims lead) | ENTRY_COST | CURRENT_VALUE | UPDATED.\n */\n sortBy: ComboPositionSortBySchema.optional(),\n sortDirection: SortDirectionSchema.optional(),\n // A change-watermark on the row's `updatedAt`, not a history window —\n // deliberately separate from the `window` option.\n /**\n * Inclusive lower bound on the row's `updatedAt` change watermark — epoch\n * seconds or `Date`. Pairs with `sortBy: 'UPDATED'` for incremental sync.\n */\n updatedAfter: EpochSecondsLikeSchema.optional(),\n /** Inclusive upper bound on the row's `updatedAt` change watermark. */\n updatedBefore: EpochSecondsLikeSchema.optional(),\n});\n\nconst ListComboPositionsRequestSchemaChecked =\n ListComboPositionsRequestSchema.refine(\n (value) =>\n value.updatedBefore === undefined ||\n value.updatedAfter === undefined ||\n value.updatedBefore >= value.updatedAfter,\n {\n message: 'updatedBefore must not precede updatedAfter',\n path: ['updatedBefore'],\n },\n );\n\nexport type ListComboPositionsRequest = Omit<\n z.input<typeof ListComboPositionsRequestSchema>,\n 'status'\n> & {\n status?: ComboPositionStatusFilter;\n};\n\nexport type ListComboPositionsError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const ListComboPositionsError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Lists Combo positions for a wallet.\n *\n * `status: 'OPEN'` is the superset including custody-held redeemable\n * positions; `'REDEEMABLE'` (sole value) narrows to exactly the rows whose\n * `redeemable` flag is set. Every row carries its legs enriched with market\n * metadata and exact entry economics. `updatedAfter`/`updatedBefore` bound\n * the rows' change watermark for incremental sync. `pageSize` defaults to\n * 100 (max 1000). Transient rate limits are retried by default.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link ListComboPositionsError}\n * Thrown on failure.\n *\n * @example\n * Fetch the first page of results:\n * ```ts\n * const result = listComboPositions(client, {\n * user: '0x7c3db723f1d4d8cb9c550095203b686cb11e5c6b',\n * pageSize: 10,\n * });\n *\n * const firstPage = await result.firstPage();\n *\n * // Optionally, fetch additional pages:\n * for await (const page of result.from(firstPage.nextCursor)) {\n * // page.items: ComboPosition[]\n * }\n * ```\n *\n * @example\n * Filter to any of several resolved statuses. Pass multiple statuses as an\n * array rather than a comma-separated string:\n * ```ts\n * const result = listComboPositions(client, {\n * user: '0x7c3db723f1d4d8cb9c550095203b686cb11e5c6b',\n * status: [\n * ComboPositionStatus.ResolvedWin,\n * ComboPositionStatus.ResolvedPartial,\n * ComboPositionStatus.ResolvedLoss,\n * ],\n * });\n * ```\n *\n * @example\n * List redeemable Combo positions, largest claims first:\n * ```ts\n * const result = listComboPositions(client, {\n * user: '0x7c3db723f1d4d8cb9c550095203b686cb11e5c6b',\n * status: 'REDEEMABLE',\n * });\n * ```\n *\n * @example\n * Incrementally sync changed Combo positions:\n * ```ts\n * const result = listComboPositions(client, {\n * user: '0x7c3db723f1d4d8cb9c550095203b686cb11e5c6b',\n * updatedAfter: 1_797_360_000,\n * sortBy: 'UPDATED',\n * sortDirection: 'ASC',\n * });\n * ```\n */\nexport function listComboPositions(\n client: BaseClient,\n request: ListComboPositionsRequest,\n options: RequestOptions = {},\n): Paginated<ComboPosition[]> {\n const requestOptions = parseRequestOptions(options);\n const { cursor, pageSize, ...params } = parseUserInput(\n request,\n ListComboPositionsRequestSchemaChecked,\n );\n\n return paginate(\n (cursor) =>\n client.data.get('/v2/positions/combos', {\n schema: ListComboPositionsResponseSchema,\n ...requestOptions,\n params: toDataSearchParams({ ...params, limit: pageSize, cursor }),\n }),\n cursor,\n );\n}\n\nconst FetchPortfolioValueRequestSchema = z.object({\n user: EvmAddressSchema,\n conditionIds: distinctIdList(CanonicalMarketConditionIdSchema, 20).optional(),\n});\n\nexport type FetchPortfolioValueRequest = z.input<\n typeof FetchPortfolioValueRequestSchema\n>;\n\nexport type FetchPortfolioValueError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchPortfolioValueError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Fetches the total value for a wallet's positions.\n *\n * When `conditionIds` is present, only those single-market positions are\n * included; portfolio-level combo positions are excluded. Accepts at most 20\n * distinct condition IDs.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link FetchPortfolioValueError}\n * Thrown on failure.\n *\n * @example\n * ```ts\n * const value = await fetchPortfolioValue(client, {\n * user: '0x7c3db723f1d4d8cb9c550095203b686cb11e5c6b',\n * conditionIds: ['0xe546672750517f62c45a5a00067481981e62b9c20fa8220203232c9dc8fd2093'],\n * });\n *\n * // value: PortfolioValue\n * ```\n */\nexport async function fetchPortfolioValue(\n client: BaseClient,\n request: FetchPortfolioValueRequest,\n options: RequestOptions = {},\n): Promise<PortfolioValue> {\n const requestOptions = parseRequestOptions(options);\n const { conditionIds, ...params } = parseUserInput(\n request,\n FetchPortfolioValueRequestSchema,\n );\n\n return client.data.get('/v2/value', {\n schema: FetchPortfolioValueResponseSchema,\n ...requestOptions,\n params: toDataSearchParams({\n ...params,\n condition: conditionIds,\n }),\n });\n}\n\nconst FetchUserStatsRequestSchema = z.object({\n user: EvmAddressSchema,\n});\n\nexport type FetchUserStatsRequest = z.input<typeof FetchUserStatsRequestSchema>;\n\nexport type FetchUserStatsError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchUserStatsError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Fetches profile and lifetime trading statistics for a wallet.\n *\n * `tradedMarketCount` is the exact number of distinct markets traded.\n * `biggestWin` is the largest resolved position win, and `allTimePnl` is the\n * latest published cumulative PnL observation. Returns `null` when the wallet\n * is not a known user.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link FetchUserStatsError}\n * Thrown on failure.\n *\n * @example\n * ```ts\n * const stats = await fetchUserStats(client, {\n * user: '0x7c3db723f1d4d8cb9c550095203b686cb11e5c6b',\n * });\n *\n * // stats: UserStats | null\n * ```\n */\nexport async function fetchUserStats(\n client: BaseClient,\n request: FetchUserStatsRequest,\n options: RequestOptions = {},\n): Promise<UserStats | null> {\n const requestOptions = parseRequestOptions(options);\n const params = parseUserInput(request, FetchUserStatsRequestSchema);\n\n return client.data.get('/v2/user-stats', {\n schema: FetchUserStatsResponseSchema,\n ...requestOptions,\n params: toDataSearchParams(params),\n });\n}\n\nconst FetchUserPnlRequestSchema = z.object({\n user: EvmAddressSchema,\n interval: UserPnlIntervalSchema.optional(),\n fidelity: UserPnlFidelitySchema.optional(),\n});\n\nexport type FetchUserPnlRequest = z.input<typeof FetchUserPnlRequestSchema>;\n\nexport type FetchUserPnlError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchUserPnlError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Fetches a wallet's cumulative PnL series.\n *\n * `interval` defaults to one day and `fidelity` defaults to one hour. Each\n * point is cumulative through its timestamp; nullable amounts mean the source\n * was unavailable and are never coerced to zero.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link FetchUserPnlError}\n * Thrown on failure.\n *\n * @example\n * ```ts\n * const pnl = await fetchUserPnl(client, {\n * user: '0x7c3db723f1d4d8cb9c550095203b686cb11e5c6b',\n * interval: UserPnlInterval.OneWeek,\n * fidelity: UserPnlFidelity.ThreeHours,\n * });\n * ```\n */\nexport async function fetchUserPnl(\n client: BaseClient,\n request: FetchUserPnlRequest,\n options: RequestOptions = {},\n): Promise<UserPnlSeries> {\n const requestOptions = parseRequestOptions(options);\n const params = parseUserInput(request, FetchUserPnlRequestSchema);\n\n return client.data.get('/v2/user-pnl', {\n schema: FetchUserPnlResponseSchema,\n ...requestOptions,\n params: toDataSearchParams(params),\n });\n}\n\nconst FetchUserVolumeRequestSchema = z.object({\n user: EvmAddressSchema,\n window: TimeWindowSchema.optional(),\n});\n\nexport type FetchUserVolumeRequest = z.input<\n typeof FetchUserVolumeRequestSchema\n>;\n\nexport type FetchUserVolumeError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchUserVolumeError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Fetches a wallet's trading volume for a time window.\n *\n * Volume is returned in shares and USD. Window bounds accept epoch seconds or\n * `Date` values and are widened to whole UTC days.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link FetchUserVolumeError}\n * Thrown on failure.\n *\n * @example\n * ```ts\n * const volume = await fetchUserVolume(client, {\n * user: '0x7c3db723f1d4d8cb9c550095203b686cb11e5c6b',\n * window: { start: new Date('2026-08-01T00:00:00Z') },\n * });\n * ```\n */\nexport async function fetchUserVolume(\n client: BaseClient,\n request: FetchUserVolumeRequest,\n options: RequestOptions = {},\n): Promise<UserVolume> {\n const requestOptions = parseRequestOptions(options);\n const { window, ...params } = parseUserInput(\n request,\n FetchUserVolumeRequestSchema,\n );\n\n return client.data.get('/v2/user-volume', {\n schema: FetchUserVolumeResponseSchema,\n ...requestOptions,\n params: toDataSearchParams({ ...params, ...window }),\n });\n}\n\nconst DownloadAccountingSnapshotRequestSchema = z.object({\n user: z.string(),\n});\n\nexport type DownloadAccountingSnapshotRequest = z.input<\n typeof DownloadAccountingSnapshotRequestSchema\n>;\n\nexport type DownloadAccountingSnapshotError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const DownloadAccountingSnapshotError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Downloads an accounting snapshot archive for a wallet.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link DownloadAccountingSnapshotError}\n * Thrown on failure.\n *\n * @example\n * ```ts\n * const snapshot = await downloadAccountingSnapshot(client, {\n * user: '0x7c3db723f1d4d8cb9c550095203b686cb11e5c6b',\n * });\n *\n * // snapshot === Blob\n * ```\n */\nexport async function downloadAccountingSnapshot(\n client: BaseClient,\n request: DownloadAccountingSnapshotRequest,\n options: RequestOptions = {},\n): Promise<Blob> {\n const requestOptions = parseRequestOptions(options);\n const params = parseUserInput(\n request,\n DownloadAccountingSnapshotRequestSchema,\n );\n\n return client.data.get('/v1/accounting/snapshot', {\n responseType: 'blob',\n ...requestOptions,\n params: toLegacyDataSearchParams(params),\n });\n}\n","import type {\n ConditionId,\n MarketId,\n PositionId,\n TokenId,\n} from '@kuest/bindings';\nimport { type Market, ProtocolVersion } from '@kuest/bindings/gamma';\nimport { isPresent } from '@kuest/types';\nimport { UnexpectedResponseError } from '../errors';\n\nexport enum PositionProtocol {\n CTF = 'ctf',\n V2 = 'v2',\n}\n\ntype MarketPositionContextBase = {\n marketId: MarketId;\n conditionId: ConditionId;\n};\n\ntype NormalizedCtfMarketPositionContext = MarketPositionContextBase & {\n protocol: PositionProtocol.CTF;\n negRisk: boolean;\n outcomeIds: [yes: TokenId, no: TokenId];\n};\n\ntype NormalizedV2MarketPositionContext = MarketPositionContextBase & {\n protocol: PositionProtocol.V2;\n outcomeIds: [yes: PositionId, no: PositionId];\n};\n\nexport function normalizeMarketPositionContext(\n market: Market,\n context: string,\n): NormalizedCtfMarketPositionContext | NormalizedV2MarketPositionContext {\n if (!isPresent(market.conditionId)) {\n throw new UnexpectedResponseError(`Missing condition ID for ${context}`);\n }\n\n const yesTokenId = market.outcomes.yes.tokenId;\n const noTokenId = market.outcomes.no.tokenId;\n const yesPositionId = market.outcomes.yes.positionId;\n const noPositionId = market.outcomes.no.positionId;\n\n if (market.version === ProtocolVersion.V2) {\n if (isPresent(yesPositionId) !== isPresent(noPositionId)) {\n throw new UnexpectedResponseError(\n `Incomplete market position IDs for ${context}`,\n );\n }\n\n if (!isPresent(yesPositionId) || !isPresent(noPositionId)) {\n throw new UnexpectedResponseError(\n `Missing market position IDs for ${context}`,\n );\n }\n\n return {\n marketId: market.id,\n conditionId: market.conditionId,\n protocol: PositionProtocol.V2,\n outcomeIds: [yesPositionId, noPositionId],\n };\n }\n\n if (isPresent(yesTokenId) !== isPresent(noTokenId)) {\n throw new UnexpectedResponseError(\n `Incomplete market token IDs for ${context}`,\n );\n }\n\n if (isPresent(yesTokenId) && isPresent(noTokenId)) {\n if (!isPresent(market.state.negRisk)) {\n throw new UnexpectedResponseError(\n `Missing negative-risk flag for ${context}`,\n );\n }\n\n return {\n marketId: market.id,\n conditionId: market.conditionId,\n protocol: PositionProtocol.CTF,\n negRisk: market.state.negRisk,\n outcomeIds: [yesTokenId, noTokenId],\n };\n }\n\n throw new UnexpectedResponseError(`Missing market token IDs for ${context}`);\n}\n","import type {\n ComboConditionId,\n ConditionId,\n MarketId,\n PositionId,\n TokenId,\n} from '@kuest/bindings';\nimport {\n ConditionIdSchema,\n MarketIdSchema,\n PositionIdSchema,\n} from '@kuest/bindings';\nimport { WalletType } from '@kuest/bindings/gamma';\nimport { type EvmAddress, type EvmSignature, invariant } from '@kuest/types';\nimport { z } from 'zod';\nimport {\n combinatorialPrepareConditionCall,\n ctfMergePositionsCall,\n ctfRedeemPositionsCall,\n ctfSplitPositionCall,\n decodeErc1155BalanceOfBatchResult,\n decodeErc1155BalanceOfResult,\n erc1155BalanceOfBatchCall,\n erc1155BalanceOfCall,\n negRiskRedeemPositionsCall,\n routerMergeCall,\n routerRedeemCall,\n routerSplitCall,\n} from '../abis';\nimport type { BaseSecureClient } from '../clients';\nimport {\n CancelledSigningError,\n makeErrorGuard,\n RateLimitError,\n RequestRejectedError,\n SigningError,\n TimeoutError,\n TransactionFailedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n} from '../errors';\nimport { parseUserInput } from '../input';\nimport {\n canonicalizeComboLegs,\n decodeV2OutcomePositionId,\n deriveComboPositionContext,\n} from '../protocol';\nimport {\n expectTransactionHandle,\n type SignerTransactionRequest,\n type TransactionCall,\n type TransactionHandle,\n} from '../types';\nimport {\n completeWith,\n type SendMergePositionsTransactionRequest,\n type SendRedeemPositionsTransactionRequest,\n type SendSplitPositionTransactionRequest,\n signerTransactionRequest,\n} from '../workflow';\nimport {\n GaslessTransactionMetadataSchema,\n type GaslessWorkflowRequest,\n prepareGaslessTransaction,\n} from './gasless';\nimport { listMarkets } from './markets';\nimport {\n normalizeMarketPositionContext,\n PositionProtocol,\n} from './positions-market';\n\nfunction assertProtocolV2Unavailable(operation: string): void {\n throw new UserInputError(\n `${operation} requires an unavailable protocol V2 router.`,\n );\n}\n\nexport type SplitPositionWorkflowRequest =\n | GaslessWorkflowRequest\n | SendSplitPositionTransactionRequest;\n\nexport type SplitPositionWorkflow = AsyncGenerator<\n SplitPositionWorkflowRequest,\n TransactionHandle,\n EvmAddress | EvmSignature | TransactionHandle\n>;\n\nexport type PrepareSplitPositionError =\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const PrepareSplitPositionError = makeErrorGuard(\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Parameters for preparing a market position split.\n *\n * @remarks\n * The condition ID may identify either a CTF or Polymarket V2 market. The SDK\n * resolves the protocol internally.\n */\nexport type PrepareSplitMarketPositionRequest = {\n /** Amount of collateral to convert into market positions. */\n amount: bigint;\n /** Existing market condition ID that identifies the positions to mint. */\n conditionId: string | ConditionId;\n /** Optional transaction metadata for workflows that support metadata. */\n metadata?: string;\n};\n\nconst PrepareSplitMarketPositionRequestSchema = z.object({\n amount: z.bigint().min(0n),\n conditionId: ConditionIdSchema,\n metadata: GaslessTransactionMetadataSchema.optional(),\n}) satisfies z.ZodType<PrepareSplitMarketPositionRequest>;\n\n/** @deprecated Use {@link PrepareSplitPositionError}. */\nexport type PrepareSplitMarketPositionError = PrepareSplitPositionError;\n/** @deprecated Use {@link PrepareSplitPositionError}. */\nexport const PrepareSplitMarketPositionError = PrepareSplitPositionError;\n\n/**\n * Starts a split workflow for a market condition.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @example\n * ```ts\n * const workflow = await prepareSplitMarketPosition(client, {\n * amount: 1n,\n * conditionId:\n * '0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef',\n * });\n * ```\n *\n * @throws {@link PrepareSplitPositionError}\n * Thrown on failure.\n */\nexport async function prepareSplitMarketPosition(\n client: BaseSecureClient,\n request: PrepareSplitMarketPositionRequest,\n): Promise<SplitPositionWorkflow> {\n const params = parseUserInput(\n request,\n PrepareSplitMarketPositionRequestSchema,\n );\n const context = await resolveMarketPositionContext(client, {\n conditionId: params.conditionId,\n });\n const call =\n context.protocol === PositionProtocol.CTF\n ? ctfSplitPositionCall(\n context.adapterAddress,\n client.environment.contracts.collateralToken,\n context.conditionId,\n params.amount,\n )\n : routerSplitCall(\n client.environment.contracts.protocolV2Router,\n context.conditionId,\n params.amount,\n );\n\n return async function* (): SplitPositionWorkflow {\n if (client.account.walletType === WalletType.EOA) {\n return expectTransactionHandle(\n yield sendSplitPositionTransaction(\n signerTransactionRequest(client.environment.chainId, call),\n ),\n );\n }\n\n return yield* await prepareGaslessTransaction(client, {\n calls: [call],\n metadata:\n params.metadata ??\n `Split ${params.amount} positions for market ${context.marketId} (condition ${context.conditionId})`,\n });\n }.call(null);\n}\n\n/**\n * Parameters for preparing a combo position split.\n */\nexport type PrepareSplitComboPositionRequest = {\n /** Amount of collateral to convert into combo positions. */\n amount: bigint;\n /** Protocol v2 leg position IDs that define the combo condition. */\n legs: string[] | PositionId[];\n /** Optional transaction metadata for workflows that support metadata. */\n metadata?: string;\n};\n\nconst PrepareSplitComboPositionRequestSchema = z.object({\n amount: z.bigint().positive(),\n legs: z.array(PositionIdSchema).min(1).max(50),\n metadata: GaslessTransactionMetadataSchema.optional(),\n}) satisfies z.ZodType<PrepareSplitComboPositionRequest>;\n\n/** @deprecated Use {@link PrepareSplitPositionError}. */\nexport type PrepareSplitComboPositionError = PrepareSplitPositionError;\n/** @deprecated Use {@link PrepareSplitPositionError}. */\nexport const PrepareSplitComboPositionError = PrepareSplitPositionError;\n\n/**\n * Starts a split workflow for a combo position from leg position IDs.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @example\n * ```ts\n * const workflow = await prepareSplitComboPosition(client, {\n * amount: 1n,\n * legs: ['123', '456'],\n * });\n * ```\n *\n * @throws {@link PrepareSplitPositionError}\n * Thrown on failure.\n */\nexport async function prepareSplitComboPosition(\n client: BaseSecureClient,\n request: PrepareSplitComboPositionRequest,\n): Promise<SplitPositionWorkflow> {\n assertProtocolV2Unavailable('Combo positions');\n const params = parseUserInput(\n request,\n PrepareSplitComboPositionRequestSchema,\n );\n const legs = canonicalizeComboLegs(params.legs);\n const prepareConditionCall = combinatorialPrepareConditionCall(\n client.environment.contracts.combinatorialModule,\n legs,\n );\n const combo = deriveComboPositionContext(legs);\n const splitCall = routerSplitCall(\n client.environment.contracts.protocolV2Router,\n combo.conditionId,\n params.amount,\n );\n\n return async function* (): SplitPositionWorkflow {\n if (client.account.walletType === WalletType.EOA) {\n const prepareHandle = expectTransactionHandle(\n yield sendSplitPositionTransaction(\n signerTransactionRequest(\n client.environment.chainId,\n prepareConditionCall,\n ),\n ),\n );\n await prepareHandle.wait();\n\n return expectTransactionHandle(\n yield sendSplitPositionTransaction(\n signerTransactionRequest(client.environment.chainId, splitCall),\n ),\n );\n }\n\n return yield* await prepareGaslessTransaction(client, {\n calls: [prepareConditionCall, splitCall],\n metadata:\n params.metadata ??\n `Split ${params.amount} combo positions for condition ${combo.conditionId}`,\n });\n }.call(null);\n}\n\n/**\n * Parameters for preparing a position split.\n *\n * @remarks\n * Provide `conditionId` for an existing market condition or `legs` to derive a\n * Combo condition.\n */\nexport type PrepareSplitPositionRequest =\n | PrepareSplitMarketPositionRequest\n | PrepareSplitComboPositionRequest;\n\nconst PrepareSplitPositionRequestSchema = z.union([\n PrepareSplitMarketPositionRequestSchema.extend({\n legs: z.never().optional(),\n }),\n PrepareSplitComboPositionRequestSchema.extend({\n conditionId: z.never().optional(),\n }),\n]) satisfies z.ZodType<PrepareSplitPositionRequest>;\n\n/**\n * Starts a position split workflow.\n *\n * @throws {@link PrepareSplitPositionError}\n * Thrown on failure.\n */\nexport async function prepareSplitPosition(\n client: BaseSecureClient,\n request: PrepareSplitPositionRequest,\n): Promise<SplitPositionWorkflow> {\n const params = parseUserInput(request, PrepareSplitPositionRequestSchema);\n\n if (params.legs !== undefined) {\n return prepareSplitComboPosition(client, params);\n }\n\n return prepareSplitMarketPosition(client, params);\n}\n\nexport type SplitPositionError =\n | CancelledSigningError\n | RateLimitError\n | RequestRejectedError\n | SigningError\n | TimeoutError\n | TransactionFailedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const SplitPositionError = makeErrorGuard(\n CancelledSigningError,\n RateLimitError,\n RequestRejectedError,\n SigningError,\n TimeoutError,\n TransactionFailedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n/** @deprecated Use {@link SplitPositionError}. */\nexport type SplitMarketPositionError = SplitPositionError;\n/** @deprecated Use {@link SplitPositionError}. */\nexport const SplitMarketPositionError = SplitPositionError;\n\n/**\n * Splits collateral into market positions.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link SplitPositionError}\n * Thrown on failure.\n */\nexport function splitMarketPosition(\n client: BaseSecureClient,\n request: PrepareSplitMarketPositionRequest,\n): Promise<TransactionHandle> {\n return prepareSplitMarketPosition(client, request).then(\n completeWith(client.signer),\n );\n}\n\n/** @deprecated Use {@link SplitPositionError}. */\nexport type SplitComboPositionError = SplitPositionError;\n/** @deprecated Use {@link SplitPositionError}. */\nexport const SplitComboPositionError = SplitPositionError;\n\n/**\n * Splits collateral into combo positions from leg position IDs.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link SplitPositionError}\n * Thrown on failure.\n */\nexport function splitComboPosition(\n client: BaseSecureClient,\n request: PrepareSplitComboPositionRequest,\n): Promise<TransactionHandle> {\n return prepareSplitComboPosition(client, request).then(\n completeWith(client.signer),\n );\n}\n\n/**\n * Splits collateral into positions.\n *\n * @throws {@link SplitPositionError}\n * Thrown on failure.\n */\nexport function splitPosition(\n client: BaseSecureClient,\n request: PrepareSplitPositionRequest,\n): Promise<TransactionHandle> {\n return prepareSplitPosition(client, request).then(\n completeWith(client.signer),\n );\n}\n\nexport type MergePositionsWorkflowRequest =\n | GaslessWorkflowRequest\n | SendMergePositionsTransactionRequest;\n\nexport type MergePositionsWorkflow = AsyncGenerator<\n MergePositionsWorkflowRequest,\n TransactionHandle,\n EvmAddress | EvmSignature | TransactionHandle\n>;\n\nexport type PrepareMergePositionsError =\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const PrepareMergePositionsError = makeErrorGuard(\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Parameters for preparing a market position merge.\n *\n * @remarks\n * The condition ID may identify either a CTF or Polymarket V2 market. The SDK\n * resolves the protocol internally.\n */\nexport type PrepareMergeMarketPositionRequest = {\n /** Amount per complementary market position to merge. */\n amount: bigint | 'max';\n /** Existing market condition ID that identifies the positions to merge. */\n conditionId: string | ConditionId;\n /** Optional transaction metadata for workflows that support metadata. */\n metadata?: string;\n};\n\nconst PrepareMergeMarketPositionRequestSchema = z.object({\n amount: z.union([z.bigint().positive(), z.literal('max')]),\n conditionId: ConditionIdSchema,\n metadata: GaslessTransactionMetadataSchema.optional(),\n}) satisfies z.ZodType<PrepareMergeMarketPositionRequest>;\n\n/** @deprecated Use {@link PrepareMergePositionsError}. */\nexport type PrepareMergeMarketPositionError = PrepareMergePositionsError;\n/** @deprecated Use {@link PrepareMergePositionsError}. */\nexport const PrepareMergeMarketPositionError = PrepareMergePositionsError;\n\n/**\n * Starts a workflow to merge complementary positions in a market back into collateral.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @example\n * ```ts\n * const workflow = await prepareMergeMarketPosition(client, {\n * amount: 'max',\n * conditionId:\n * '0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef',\n * });\n * ```\n *\n * @throws {@link PrepareMergePositionsError}\n * Thrown on failure.\n */\nexport async function prepareMergeMarketPosition(\n client: BaseSecureClient,\n request: PrepareMergeMarketPositionRequest,\n): Promise<MergePositionsWorkflow> {\n const params = parseUserInput(\n request,\n PrepareMergeMarketPositionRequestSchema,\n );\n const context = await resolveMarketPositionContext(client, {\n conditionId: params.conditionId,\n });\n const balances = decodeErc1155BalanceOfBatchResult(\n await client.rpc.ethCall(\n erc1155BalanceOfBatchCall(\n context.positionErc1155Address,\n client.account.wallet,\n context.outcomeIds,\n ),\n ),\n );\n const amount = resolveMergeAmount(\n context.conditionId,\n balances,\n params.amount,\n );\n const call =\n context.protocol === PositionProtocol.CTF\n ? ctfMergePositionsCall(\n context.adapterAddress,\n client.environment.contracts.collateralToken,\n context.conditionId,\n amount,\n )\n : routerMergeCall(\n client.environment.contracts.protocolV2Router,\n context.conditionId,\n amount,\n );\n\n return async function* (): MergePositionsWorkflow {\n if (client.account.walletType === WalletType.EOA) {\n return expectTransactionHandle(\n yield sendMergePositionsTransaction(\n signerTransactionRequest(client.environment.chainId, call),\n ),\n );\n }\n\n return yield* await prepareGaslessTransaction(client, {\n calls: [call],\n metadata:\n params.metadata ??\n `Merge ${amount} positions for market ${context.marketId} (condition ${context.conditionId})`,\n });\n }.call(null);\n}\n\n/**\n * Parameters for preparing a combo position merge.\n */\nexport type PrepareMergeComboPositionRequest = {\n /** Amount per complementary combo position to merge. */\n amount: bigint | 'max';\n /** Protocol v2 leg position IDs that define the combo condition. */\n legs: string[] | PositionId[];\n /** Optional transaction metadata for workflows that support metadata. */\n metadata?: string;\n};\n\nconst PrepareMergeComboPositionRequestSchema = z.object({\n amount: z.union([z.bigint().positive(), z.literal('max')]),\n legs: z.array(PositionIdSchema).min(1).max(50),\n metadata: GaslessTransactionMetadataSchema.optional(),\n}) satisfies z.ZodType<PrepareMergeComboPositionRequest>;\n\n/** @deprecated Use {@link PrepareMergePositionsError}. */\nexport type PrepareMergeComboPositionError = PrepareMergePositionsError;\n/** @deprecated Use {@link PrepareMergePositionsError}. */\nexport const PrepareMergeComboPositionError = PrepareMergePositionsError;\n\n/**\n * Starts a workflow to merge complementary combo positions back into collateral.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @example\n * ```ts\n * const workflow = await prepareMergeComboPosition(client, {\n * amount: 'max',\n * legs: ['123', '456'],\n * });\n * ```\n *\n * @throws {@link PrepareMergePositionsError}\n * Thrown on failure.\n */\nexport async function prepareMergeComboPosition(\n client: BaseSecureClient,\n request: PrepareMergeComboPositionRequest,\n): Promise<MergePositionsWorkflow> {\n assertProtocolV2Unavailable('Combo positions');\n const params = parseUserInput(\n request,\n PrepareMergeComboPositionRequestSchema,\n );\n const legs = canonicalizeComboLegs(params.legs);\n const prepareConditionCall = combinatorialPrepareConditionCall(\n client.environment.contracts.combinatorialModule,\n legs,\n );\n const combo = deriveComboPositionContext(legs);\n const balances = decodeErc1155BalanceOfBatchResult(\n await client.rpc.ethCall(\n erc1155BalanceOfBatchCall(\n client.environment.contracts.positionManager,\n client.account.wallet,\n combo.positionIds,\n ),\n ),\n );\n const amount = resolveMergeAmount(combo.conditionId, balances, params.amount);\n const mergeCall = routerMergeCall(\n client.environment.contracts.protocolV2Router,\n combo.conditionId,\n amount,\n );\n\n return async function* (): MergePositionsWorkflow {\n if (client.account.walletType === WalletType.EOA) {\n const prepareHandle = expectTransactionHandle(\n yield sendMergePositionsTransaction(\n signerTransactionRequest(\n client.environment.chainId,\n prepareConditionCall,\n ),\n ),\n );\n await prepareHandle.wait();\n\n return expectTransactionHandle(\n yield sendMergePositionsTransaction(\n signerTransactionRequest(client.environment.chainId, mergeCall),\n ),\n );\n }\n\n return yield* await prepareGaslessTransaction(client, {\n calls: [prepareConditionCall, mergeCall],\n metadata:\n params.metadata ??\n `Merge ${amount} combo positions for condition ${combo.conditionId}`,\n });\n }.call(null);\n}\n\n/**\n * Parameters for preparing a position merge.\n *\n * @remarks\n * Provide `conditionId` for an existing market condition or `legs` to derive a\n * Combo condition.\n */\nexport type PrepareMergePositionsRequest =\n | PrepareMergeMarketPositionRequest\n | PrepareMergeComboPositionRequest;\n\nconst PrepareMergePositionsRequestSchema = z.union([\n PrepareMergeMarketPositionRequestSchema.extend({\n legs: z.never().optional(),\n }),\n PrepareMergeComboPositionRequestSchema.extend({\n conditionId: z.never().optional(),\n }),\n]) satisfies z.ZodType<PrepareMergePositionsRequest>;\n\n/**\n * Starts a position merge workflow.\n *\n * @throws {@link PrepareMergePositionsError}\n * Thrown on failure.\n */\nexport async function prepareMergePositions(\n client: BaseSecureClient,\n request: PrepareMergePositionsRequest,\n): Promise<MergePositionsWorkflow> {\n const params = parseUserInput(request, PrepareMergePositionsRequestSchema);\n\n if (params.legs !== undefined) {\n return prepareMergeComboPosition(client, params);\n }\n\n return prepareMergeMarketPosition(client, params);\n}\n\nexport type MergePositionsError =\n | CancelledSigningError\n | RateLimitError\n | RequestRejectedError\n | SigningError\n | TimeoutError\n | TransactionFailedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const MergePositionsError = makeErrorGuard(\n CancelledSigningError,\n RateLimitError,\n RequestRejectedError,\n SigningError,\n TimeoutError,\n TransactionFailedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n/** @deprecated Use {@link MergePositionsError}. */\nexport type MergeMarketPositionError = MergePositionsError;\n/** @deprecated Use {@link MergePositionsError}. */\nexport const MergeMarketPositionError = MergePositionsError;\n\n/**\n * Merges complementary market positions back into collateral.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link MergePositionsError}\n * Thrown on failure.\n */\nexport function mergeMarketPosition(\n client: BaseSecureClient,\n request: PrepareMergeMarketPositionRequest,\n): Promise<TransactionHandle> {\n return prepareMergeMarketPosition(client, request).then(\n completeWith(client.signer),\n );\n}\n\n/** @deprecated Use {@link MergePositionsError}. */\nexport type MergeComboPositionError = MergePositionsError;\n/** @deprecated Use {@link MergePositionsError}. */\nexport const MergeComboPositionError = MergePositionsError;\n\n/**\n * Merges complementary combo positions back into collateral.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link MergePositionsError}\n * Thrown on failure.\n */\nexport function mergeComboPosition(\n client: BaseSecureClient,\n request: PrepareMergeComboPositionRequest,\n): Promise<TransactionHandle> {\n return prepareMergeComboPosition(client, request).then(\n completeWith(client.signer),\n );\n}\n\n/**\n * Merges complementary positions back into collateral.\n *\n * @throws {@link MergePositionsError}\n * Thrown on failure.\n */\nexport function mergePositions(\n client: BaseSecureClient,\n request: PrepareMergePositionsRequest,\n): Promise<TransactionHandle> {\n return prepareMergePositions(client, request).then(\n completeWith(client.signer),\n );\n}\n\nexport type RedeemPositionsWorkflowRequest =\n | GaslessWorkflowRequest\n | SendRedeemPositionsTransactionRequest;\n\nexport type RedeemPositionsWorkflow = AsyncGenerator<\n RedeemPositionsWorkflowRequest,\n TransactionHandle,\n EvmAddress | EvmSignature | TransactionHandle\n>;\n\nexport type PrepareRedeemPositionsError =\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const PrepareRedeemPositionsError = makeErrorGuard(\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Parameters for preparing a market position redemption by condition ID.\n *\n * @remarks\n * The condition ID may identify either a CTF or Polymarket V2 market. The SDK\n * resolves the protocol internally.\n */\nexport type PrepareRedeemMarketPositionsByConditionIdRequest = {\n /** Existing market condition ID that identifies the positions to redeem. */\n conditionId: string | ConditionId;\n marketId?: never;\n amount?: never;\n positionId?: never;\n /** Optional transaction metadata for workflows that support metadata. */\n metadata?: string;\n};\n\n/**\n * Parameters for preparing a market position redemption by market ID.\n */\nexport type PrepareRedeemMarketPositionsByMarketIdRequest = {\n conditionId?: never;\n /** Existing market ID that identifies the positions to redeem. */\n marketId: string;\n amount?: never;\n positionId?: never;\n /** Optional transaction metadata for workflows that support metadata. */\n metadata?: string;\n};\n\nexport type PrepareRedeemMarketPositionsRequest =\n | PrepareRedeemMarketPositionsByConditionIdRequest\n | PrepareRedeemMarketPositionsByMarketIdRequest;\n\nconst PrepareRedeemMarketPositionsByConditionIdRequestSchema = z.object({\n conditionId: ConditionIdSchema,\n marketId: z.never().optional(),\n amount: z.never().optional(),\n positionId: z.never().optional(),\n metadata: GaslessTransactionMetadataSchema.optional(),\n}) satisfies z.ZodType<PrepareRedeemMarketPositionsByConditionIdRequest>;\n\nconst PrepareRedeemMarketPositionsByMarketIdRequestSchema = z.object({\n conditionId: z.never().optional(),\n marketId: MarketIdSchema,\n amount: z.never().optional(),\n positionId: z.never().optional(),\n metadata: GaslessTransactionMetadataSchema.optional(),\n}) satisfies z.ZodType<PrepareRedeemMarketPositionsByMarketIdRequest>;\n\nconst PrepareRedeemMarketPositionsRequestSchema = z.union([\n PrepareRedeemMarketPositionsByConditionIdRequestSchema,\n PrepareRedeemMarketPositionsByMarketIdRequestSchema,\n]) satisfies z.ZodType<PrepareRedeemMarketPositionsRequest>;\n\n/** @deprecated Use {@link PrepareRedeemPositionsError}. */\nexport type PrepareRedeemMarketPositionsError = PrepareRedeemPositionsError;\n/** @deprecated Use {@link PrepareRedeemPositionsError}. */\nexport const PrepareRedeemMarketPositionsError = PrepareRedeemPositionsError;\n\n/**\n * Starts a redemption workflow for resolved market positions.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @example\n * ```ts\n * const workflow = await prepareRedeemMarketPositions(client, {\n * conditionId:\n * '0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef',\n * });\n * ```\n *\n * @example\n * ```ts\n * const workflow = await prepareRedeemMarketPositions(client, {\n * marketId: '12345',\n * });\n * ```\n *\n * @throws {@link PrepareRedeemPositionsError}\n * Thrown on failure.\n */\nexport async function prepareRedeemMarketPositions(\n client: BaseSecureClient,\n request: PrepareRedeemMarketPositionsRequest,\n): Promise<RedeemPositionsWorkflow> {\n const params = parseUserInput(\n request,\n PrepareRedeemMarketPositionsRequestSchema,\n );\n const context = await resolveMarketPositionContext(\n client,\n params.conditionId !== undefined\n ? { conditionId: params.conditionId, closed: true }\n : { marketId: params.marketId, closed: true },\n );\n const calls = await prepareMarketRedemptionCalls(client, context);\n\n return async function* (): RedeemPositionsWorkflow {\n if (client.account.walletType === WalletType.EOA) {\n return yield* sendRedeemPositionCalls(client, calls);\n }\n\n return yield* await prepareGaslessTransaction(client, {\n calls,\n metadata:\n params.metadata ??\n `Redeem positions for market ${context.marketId} (condition ${context.conditionId})`,\n });\n }.call(null);\n}\n\n/**\n * Parameters for preparing a Polymarket V2 position redemption.\n */\nexport type PrepareRedeemPositionRequest = {\n /** Polymarket V2 YES/NO position ID to redeem. */\n positionId: string | PositionId;\n conditionId?: never;\n marketId?: never;\n /** Optional transaction metadata for workflows that support metadata. */\n metadata?: string;\n};\n\nconst PrepareRedeemPositionRequestSchema = z.object({\n positionId: PositionIdSchema,\n conditionId: z.never().optional(),\n marketId: z.never().optional(),\n metadata: GaslessTransactionMetadataSchema.optional(),\n}) satisfies z.ZodType<PrepareRedeemPositionRequest>;\n\n/**\n * Starts a redemption workflow for a resolved Polymarket V2 position.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @example\n * ```ts\n * const workflow = await prepareRedeemPosition(client, {\n * positionId: '123',\n * });\n * ```\n *\n * @throws {@link PrepareRedeemPositionsError}\n * Thrown on failure.\n */\nexport async function prepareRedeemPosition(\n client: BaseSecureClient,\n request: PrepareRedeemPositionRequest,\n): Promise<RedeemPositionsWorkflow> {\n assertProtocolV2Unavailable('Position-ID redemption');\n const params = parseUserInput(request, PrepareRedeemPositionRequestSchema);\n const decoded = decodeV2OutcomePositionId(params.positionId);\n const balance = decodeErc1155BalanceOfResult(\n await client.rpc.ethCall(\n erc1155BalanceOfCall(\n client.environment.contracts.positionManager,\n client.account.wallet,\n params.positionId,\n ),\n ),\n );\n\n if (balance === 0n) {\n throw new UserInputError('Position has no balance to redeem');\n }\n\n const call = routerRedeemCall(\n client.environment.contracts.protocolV2Router,\n decoded.conditionId,\n decoded.outcomeIndex,\n balance,\n );\n\n return async function* (): RedeemPositionsWorkflow {\n if (client.account.walletType === WalletType.EOA) {\n return expectTransactionHandle(\n yield sendRedeemPositionsTransaction(\n signerTransactionRequest(client.environment.chainId, call),\n ),\n );\n }\n\n return yield* await prepareGaslessTransaction(client, {\n calls: [call],\n metadata: params.metadata ?? `Redeem position ${params.positionId}`,\n });\n }.call(null);\n}\n\n/** @deprecated Use {@link PrepareRedeemPositionRequest}. */\nexport type PrepareRedeemComboPositionRequest = PrepareRedeemPositionRequest;\n\n/** @deprecated Use {@link PrepareRedeemPositionsError}. */\nexport type PrepareRedeemComboPositionError = PrepareRedeemPositionsError;\n/** @deprecated Use {@link PrepareRedeemPositionsError}. */\nexport const PrepareRedeemComboPositionError = PrepareRedeemPositionsError;\n\n/**\n * Starts a redemption workflow for a resolved Polymarket V2 position.\n *\n * @deprecated Use {@link prepareRedeemPosition}.\n *\n * @throws {@link PrepareRedeemPositionsError}\n * Thrown on failure.\n */\nexport function prepareRedeemComboPosition(\n client: BaseSecureClient,\n request: PrepareRedeemComboPositionRequest,\n): Promise<RedeemPositionsWorkflow> {\n return prepareRedeemPosition(client, request);\n}\n\n/**\n * Parameters for preparing position redemption for a market or a specific\n * position.\n *\n * @remarks\n * Use `marketId` or `conditionId` to redeem held positions for a market. Use\n * `positionId` to redeem a specific position.\n */\nexport type PrepareRedeemPositionsRequest =\n | PrepareRedeemMarketPositionsByConditionIdRequest\n | PrepareRedeemMarketPositionsByMarketIdRequest\n | PrepareRedeemPositionRequest;\n\nconst PrepareRedeemPositionsRequestSchema = z.union([\n PrepareRedeemMarketPositionsByConditionIdRequestSchema,\n PrepareRedeemMarketPositionsByMarketIdRequestSchema,\n PrepareRedeemPositionRequestSchema,\n]) satisfies z.ZodType<PrepareRedeemPositionsRequest>;\n\n/**\n * Starts a redemption workflow for held positions in a market or a specific\n * position by ID.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link PrepareRedeemPositionsError}\n * Thrown on failure.\n */\nexport async function prepareRedeemPositions(\n client: BaseSecureClient,\n request: PrepareRedeemPositionsRequest,\n): Promise<RedeemPositionsWorkflow> {\n const params = parseUserInput(request, PrepareRedeemPositionsRequestSchema);\n\n if (params.positionId !== undefined) {\n return prepareRedeemPosition(client, params);\n }\n\n return prepareRedeemMarketPositions(client, params);\n}\n\nexport type RedeemPositionsError =\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError\n | CancelledSigningError\n | SigningError\n | TimeoutError\n | TransactionFailedError;\nexport const RedeemPositionsError = makeErrorGuard(\n CancelledSigningError,\n RateLimitError,\n RequestRejectedError,\n SigningError,\n TimeoutError,\n TransactionFailedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Redeems held positions for a market or a specific position by ID.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link RedeemPositionsError}\n * Thrown on failure.\n */\nexport function redeemPositions(\n client: BaseSecureClient,\n request: PrepareRedeemPositionsRequest,\n): Promise<TransactionHandle> {\n return prepareRedeemPositions(client, request).then(\n completeWith(client.signer),\n );\n}\n\nfunction sendSplitPositionTransaction(\n request: SignerTransactionRequest,\n): SendSplitPositionTransactionRequest {\n return {\n kind: 'sendSplitPositionTransaction',\n request,\n };\n}\n\nfunction sendMergePositionsTransaction(\n request: SignerTransactionRequest,\n): SendMergePositionsTransactionRequest {\n return {\n kind: 'sendMergePositionsTransaction',\n request,\n };\n}\n\nfunction sendRedeemPositionsTransaction(\n request: SignerTransactionRequest,\n): SendRedeemPositionsTransactionRequest {\n return {\n kind: 'sendRedeemPositionsTransaction',\n request,\n };\n}\n\nasync function* sendRedeemPositionCalls(\n client: BaseSecureClient,\n calls: readonly TransactionCall[],\n): RedeemPositionsWorkflow {\n const [firstCall, ...remainingCalls] = calls;\n\n invariant(firstCall !== undefined, 'Expected at least one redemption call');\n\n let call = firstCall;\n\n for (const nextCall of remainingCalls) {\n const handle = expectTransactionHandle(\n yield sendRedeemPositionsTransaction(\n signerTransactionRequest(client.environment.chainId, call),\n ),\n );\n await handle.wait();\n call = nextCall;\n }\n\n return expectTransactionHandle(\n yield sendRedeemPositionsTransaction(\n signerTransactionRequest(client.environment.chainId, call),\n ),\n );\n}\n\ntype MarketPositionContextBase = {\n marketId: MarketId;\n conditionId: ConditionId;\n};\n\ntype CtfMarketPositionContext = MarketPositionContextBase & {\n protocol: PositionProtocol.CTF;\n negRisk: boolean;\n adapterAddress: EvmAddress;\n positionErc1155Address: EvmAddress;\n outcomeIds: [yes: TokenId, no: TokenId];\n};\n\ntype V2MarketPositionContext = MarketPositionContextBase & {\n protocol: PositionProtocol.V2;\n positionErc1155Address: EvmAddress;\n outcomeIds: [yes: PositionId, no: PositionId];\n};\n\ntype MarketPositionContext = CtfMarketPositionContext | V2MarketPositionContext;\n\ntype ResolveMarketPositionContextRequest =\n | { conditionId: ConditionId; marketId?: never; closed?: boolean }\n | { marketId: MarketId; conditionId?: never; closed?: boolean };\n\nasync function resolveMarketPositionContext(\n client: BaseSecureClient,\n request: ResolveMarketPositionContextRequest,\n): Promise<MarketPositionContext> {\n const context =\n request.conditionId !== undefined\n ? `condition ${request.conditionId}`\n : `market ${request.marketId}`;\n const page = await listMarkets(\n client,\n request.conditionId !== undefined\n ? {\n conditionIds: [request.conditionId],\n closed: request.closed,\n pageSize: 1,\n }\n : {\n ids: [parseMarketId(request.marketId)],\n closed: request.closed,\n pageSize: 1,\n },\n ).firstPage();\n const [market] = page.items;\n\n // CTF multi-outcome markets are omitted from market listings, so they\n // surface here as not found alongside unknown IDs.\n if (market === undefined) {\n throw new UserInputError(`No market found for ${context}`);\n }\n\n const marketContext = normalizeMarketPositionContext(market, context);\n\n if (marketContext.protocol === PositionProtocol.V2) {\n throw new UserInputError(\n 'Protocol V2 market positions are unavailable on this network.',\n );\n }\n\n return {\n ...marketContext,\n adapterAddress: marketContext.negRisk\n ? client.environment.contracts.negRiskAdapter\n : client.environment.contracts.conditionalTokens,\n positionErc1155Address: marketContext.negRisk\n ? client.environment.contracts.negRiskAdapter\n : client.environment.contracts.conditionalTokens,\n };\n}\n\nfunction parseMarketId(id: MarketId): number {\n const parsed = Number(id);\n\n if (!Number.isInteger(parsed)) {\n throw new UserInputError(`Market ID must be an integer, received ${id}`);\n }\n\n return parsed;\n}\n\nasync function prepareMarketRedemptionCalls(\n client: BaseSecureClient,\n context: MarketPositionContext,\n): Promise<TransactionCall[]> {\n if (context.protocol === PositionProtocol.CTF) {\n if (context.negRisk) {\n const balances = decodeErc1155BalanceOfBatchResult(\n await client.rpc.ethCall(\n erc1155BalanceOfBatchCall(\n context.positionErc1155Address,\n client.account.wallet,\n context.outcomeIds,\n ),\n ),\n );\n if (\n balances.length !== 2 ||\n balances[0] === undefined ||\n balances[1] === undefined\n ) {\n throw new UnexpectedResponseError('Expected two position balances');\n }\n if (balances[0] === 0n && balances[1] === 0n) {\n throw new UserInputError(\n `Market positions have no balance to redeem for condition ${context.conditionId}`,\n );\n }\n return [\n negRiskRedeemPositionsCall(\n context.adapterAddress,\n context.conditionId,\n [balances[0], balances[1]],\n ),\n ];\n }\n return [\n ctfRedeemPositionsCall(\n context.adapterAddress,\n client.environment.contracts.collateralToken,\n context.conditionId,\n ),\n ];\n }\n\n const balances = decodeErc1155BalanceOfBatchResult(\n await client.rpc.ethCall(\n erc1155BalanceOfBatchCall(\n context.positionErc1155Address,\n client.account.wallet,\n context.outcomeIds,\n ),\n ),\n );\n\n if (balances.length !== 2) {\n throw new UnexpectedResponseError('Expected two position balances');\n }\n\n const [yesBalance, noBalance] = balances;\n\n invariant(yesBalance !== undefined, 'Expected YES position balance');\n invariant(noBalance !== undefined, 'Expected NO position balance');\n\n const calls: TransactionCall[] = [];\n\n if (yesBalance > 0n) {\n calls.push(\n routerRedeemCall(\n client.environment.contracts.protocolV2Router,\n context.conditionId,\n 0,\n yesBalance,\n ),\n );\n }\n\n if (noBalance > 0n) {\n calls.push(\n routerRedeemCall(\n client.environment.contracts.protocolV2Router,\n context.conditionId,\n 1,\n noBalance,\n ),\n );\n }\n\n if (calls.length === 0) {\n throw new UserInputError(\n `Market positions have no balance to redeem for condition ${context.conditionId}`,\n );\n }\n\n return calls;\n}\n\nfunction resolveMergeAmount(\n conditionId: ConditionId | ComboConditionId,\n balances: readonly bigint[],\n requestedAmount: bigint | 'max',\n): bigint {\n const maxAmount = calculateMaxMergeAmount(balances);\n\n if (maxAmount === 0n) {\n throw new UserInputError(\n `You have no complementary positions to merge for condition ${conditionId}`,\n );\n }\n\n if (requestedAmount === 'max') {\n return maxAmount;\n }\n\n if (requestedAmount > maxAmount) {\n throw new UserInputError(\n `Requested merge amount ${requestedAmount} exceeds the maximum mergeable amount ${maxAmount} for condition ${conditionId}`,\n );\n }\n\n return requestedAmount;\n}\n\nfunction calculateMaxMergeAmount(balances: readonly bigint[]): bigint {\n if (balances.length !== 2) {\n throw new UnexpectedResponseError('Expected two position balances');\n }\n\n const [yesAmount, noAmount] = balances;\n\n invariant(yesAmount !== undefined, 'Expected YES position balance');\n invariant(noAmount !== undefined, 'Expected NO position balance');\n\n return yesAmount < noAmount ? yesAmount : noAmount;\n}\n","import { type PublicProfile, PublicProfileSchema } from '@kuest/bindings/gamma';\nimport { z } from 'zod';\nimport type { BaseClient } from '../clients';\nimport {\n makeErrorGuard,\n RateLimitError,\n RequestAbortedError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n} from '../errors';\nimport { parseUserInput } from '../input';\nimport { parseRequestOptions, type RequestOptions } from '../request-options';\nimport { snakeCase, toSearchParams } from './params';\n\nconst FetchPublicProfileRequestSchema = z.object({\n address: z.string(),\n});\n\nexport type FetchPublicProfileRequest = z.input<\n typeof FetchPublicProfileRequestSchema\n>;\n\nexport type FetchPublicProfileError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchPublicProfileError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Fetches a public profile by wallet address.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link FetchPublicProfileError}\n * Thrown on failure.\n *\n * @example\n * ```ts\n * const profile = await fetchPublicProfile(client, {\n * address: '0x7c3db723f1d4d8cb9c550095203b686cb11e5c6b',\n * });\n *\n * // profile === PublicProfile | null\n * ```\n */\nexport async function fetchPublicProfile(\n client: BaseClient,\n request: FetchPublicProfileRequest,\n options: RequestOptions = {},\n): Promise<PublicProfile | null> {\n const requestOptions = parseRequestOptions(options);\n const params = parseUserInput(request, FetchPublicProfileRequestSchema);\n\n return client.gamma\n .get('/public-profile', {\n schema: PublicProfileSchema,\n ...requestOptions,\n params: toSearchParams(params, snakeCase()),\n })\n .catch((error) => {\n if (error instanceof RequestRejectedError && error.status === 404) {\n return null;\n }\n\n throw error;\n });\n}\n","import type {\n BuilderCode,\n DecimalString,\n EpochMilliseconds,\n PositionId,\n TxHash,\n} from '@kuest/bindings';\nimport {\n OrderSide,\n OrderSideSchema,\n toBaseUnits,\n toBuilderCode,\n toPositionId,\n toRfqId,\n toRfqQuoteId,\n} from '@kuest/bindings';\nimport type {\n RfqConfirmationAck as BindingRfqConfirmationAck,\n RfqQuoteAck as BindingRfqQuoteAck,\n RfqQuoteCancelAck as BindingRfqQuoteCancelAck,\n BuilderRfqAcceptRequest,\n BuilderRfqCreateRequest,\n BuilderRfqError,\n BuilderRfqFinalStateResponse,\n BuilderRfqQuoteReadyResponse,\n BuilderRfqStatusResponse,\n RfqConfirmationRequest,\n RfqErrorCode,\n RfqExecutionUpdate,\n RfqId,\n RfqQuoteId,\n RfqQuoteRequest,\n RfqRequestedSize,\n RfqRequestorPublicId,\n RfqSignedOrder,\n} from '@kuest/bindings/combos';\nimport {\n BuilderRfqCreateResponseSchema,\n BuilderRfqStatusResponseSchema,\n ComboAcceptFailureReason,\n ComboQuoteUnavailableReason,\n RfqDirection,\n RfqExecutionStatus,\n RfqKnownErrorCode,\n RfqRejectionCode,\n RfqRequestedSizeUnit,\n RfqSide,\n RfqStatus,\n type RfqTrade,\n} from '@kuest/bindings/combos';\nimport type { EvmSignature } from '@kuest/types';\nimport { delay, MarketSdkError } from '@kuest/types';\nimport { z } from 'zod';\nimport type { BaseSecureClient } from '../clients';\nimport {\n CancelledSigningError,\n ConnectionLostError,\n makeErrorGuard,\n RateLimitError,\n RequestAbortedError,\n RequestRejectedError,\n SigningError,\n TimeoutError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n} from '../errors';\nimport type { ExchangeOrderDomain } from '../exchange';\nimport {\n createExchangeOrderSignature,\n createExchangeOrderTypedDataPayload,\n createExchangeV3OrderDomain,\n encodeExchangeOrderSide,\n} from '../exchange';\nimport { parseUserInput } from '../input';\nimport { parseRequestOptions, type RequestOptions } from '../request-options';\nimport { resolveOrderIdentity, SignerType } from '../wallet';\n\nexport {\n ComboAcceptFailureReason,\n ComboQuoteUnavailableReason,\n RfqConfirmationDecision,\n RfqDirection,\n RfqExecutionStatus,\n RfqKnownErrorCode,\n RfqRejectionCode,\n RfqRequestedSizeUnit,\n RfqSide,\n RfqStatus,\n} from '@kuest/bindings/combos';\nexport type {\n BuilderRfqError,\n RfqConfirmationRequest,\n RfqErrorCode,\n RfqExecutionUpdate,\n RfqId,\n RfqQuoteId,\n RfqQuoteRequest,\n RfqRequestedSize,\n RfqRequestorPublicId,\n RfqTrade,\n};\n\n/**\n * Plain-data reference identifying a submitted RFQ quote.\n *\n * @remarks\n * This identifies the quote; it does not imply execution or guarantee that a\n * later cancellation request can withdraw it.\n */\nexport type RfqQuoteReference = Omit<BindingRfqQuoteAck, 'type'>;\n\n/** Acknowledgement that a quote cancellation request was processed. */\nexport type RfqCancelQuoteAck = Omit<BindingRfqQuoteCancelAck, 'type'>;\nexport type RfqConfirmationAck = Omit<\n BindingRfqConfirmationAck,\n 'decision' | 'type'\n>;\n\nexport type RfqQuoteSource = 'collateral' | 'inventory';\n\nexport type RfqQuoteResponse = {\n /** Quote price in pUSD per outcome token, for example `0.45` or `\"0.45\"`. */\n price: number | string;\n\n /**\n * How the maker wants to fund the quote.\n *\n * @remarks\n * For a BUY request (BUY YES):\n * - `inventory` sells YES tokens from the maker's inventory at `price`.\n * - `collateral` buys NO tokens with collateral at `1 - price`.\n *\n * For a SELL request (SELL YES):\n * - `inventory` sells NO tokens from the maker's inventory at `1 - price`.\n * - `collateral` buys YES tokens with collateral at `price`.\n *\n * When omitted, the SDK uses `collateral`.\n *\n * @defaultValue `'collateral'`\n */\n source?: RfqQuoteSource;\n\n /**\n * Optional quote size in outcome tokens.\n *\n * This is the human-readable token amount: `1` means one full share, not one\n * 6-decimal base unit. When omitted, the quote uses the full RFQ request size.\n */\n size?: number | string;\n};\n\nexport type RfqQuoteRejectedErrorOptions = {\n /** RFQ error code for the rejected quote. */\n code?: RfqErrorCode;\n /** Error identifier for the rejected quote. */\n errorId?: string;\n /** RFQ identifier for the rejected quote. */\n rfqId: RfqId;\n};\n\n/**\n * Error thrown when the RFQ server rejects a quote response.\n */\nexport class RfqQuoteRejectedError extends MarketSdkError {\n override name = 'RfqQuoteRejectedError' as const;\n\n readonly code: RfqErrorCode | undefined;\n readonly errorId: string | undefined;\n readonly rfqId: RfqId;\n\n constructor(\n message: string,\n options: ErrorOptions & RfqQuoteRejectedErrorOptions,\n ) {\n super(message, options);\n this.code = options.code;\n this.errorId = options.errorId;\n this.rfqId = options.rfqId;\n }\n}\n\nexport type RfqQuoteError =\n | ConnectionLostError\n | RfqQuoteRejectedError\n | SigningError\n | TimeoutError\n | TransportError\n | UserInputError;\nexport const RfqQuoteError = makeErrorGuard(\n ConnectionLostError,\n RfqQuoteRejectedError,\n SigningError,\n TimeoutError,\n TransportError,\n UserInputError,\n);\n\nexport type RfqCancelQuoteRejectedErrorOptions = {\n /** RFQ error code for the rejected cancellation request. */\n code?: RfqErrorCode;\n /** Error identifier for the rejected cancellation request. */\n errorId?: string;\n /** RFQ identifier for the cancellation request. */\n rfqId: RfqId;\n /** Quote identifier for the cancellation request. */\n quoteId: RfqQuoteId;\n};\n\n/**\n * Error thrown when the RFQ server rejects a quote cancellation request.\n */\nexport class RfqCancelQuoteRejectedError extends MarketSdkError {\n override name = 'RfqCancelQuoteRejectedError' as const;\n\n readonly code: RfqErrorCode | undefined;\n readonly errorId: string | undefined;\n readonly rfqId: RfqId;\n readonly quoteId: RfqQuoteId;\n\n constructor(\n message: string,\n options: ErrorOptions & RfqCancelQuoteRejectedErrorOptions,\n ) {\n super(message, options);\n this.code = options.code;\n this.errorId = options.errorId;\n this.rfqId = options.rfqId;\n this.quoteId = options.quoteId;\n }\n}\n\nexport type RfqCancelQuoteError =\n | ConnectionLostError\n | RfqCancelQuoteRejectedError\n | TimeoutError\n | TransportError;\nexport const RfqCancelQuoteError = makeErrorGuard(\n ConnectionLostError,\n RfqCancelQuoteRejectedError,\n TimeoutError,\n TransportError,\n);\n\nexport type RfqConfirmationRejectedErrorOptions = {\n /** RFQ error code for the rejected confirmation decision. */\n code?: RfqErrorCode;\n /** Error identifier for the rejected confirmation decision. */\n errorId?: string;\n /** RFQ identifier for the rejected confirmation decision. */\n rfqId: RfqId;\n /** Quote identifier for the rejected confirmation decision. */\n quoteId: RfqQuoteId;\n};\n\n/**\n * Error thrown when the RFQ server rejects a confirmation decision.\n */\nexport class RfqConfirmationRejectedError extends MarketSdkError {\n override name = 'RfqConfirmationRejectedError' as const;\n\n readonly code: RfqErrorCode | undefined;\n readonly errorId: string | undefined;\n readonly rfqId: RfqId;\n readonly quoteId: RfqQuoteId;\n\n constructor(\n message: string,\n options: ErrorOptions & RfqConfirmationRejectedErrorOptions,\n ) {\n super(message, options);\n this.code = options.code;\n this.errorId = options.errorId;\n this.rfqId = options.rfqId;\n this.quoteId = options.quoteId;\n }\n}\n\nexport type RfqConfirmationError =\n | ConnectionLostError\n | RfqConfirmationRejectedError\n | TimeoutError\n | TransportError;\nexport const RfqConfirmationError = makeErrorGuard(\n ConnectionLostError,\n RfqConfirmationRejectedError,\n TimeoutError,\n TransportError,\n);\n\n/**\n * Server request asking the market maker to provide a quote for an RFQ.\n */\nexport interface RfqQuoteRequestEvent extends RfqQuoteRequest {\n /** Requested RFQ size and unit. Share values are human-readable outcome-token amounts. */\n requestedSize: RfqRequestedSize;\n\n /**\n * Requested RFQ position side.\n *\n * @remarks\n * The current RFQ system only supports YES-side requests, so this is always\n * {@link RfqSide.Yes}. Use {@link RfqQuoteRequestEvent.direction} to determine\n * whether the requester wants to buy or sell that YES-side position.\n */\n side: RfqSide.Yes;\n\n /**\n * Sends a quote response for this RFQ request.\n *\n * @remarks\n * If this resolves, the server accepted the quote and assigned `quoteId`.\n *\n * @throws {@link RfqQuoteError}\n * Thrown when validation fails, signing fails, the websocket fails, the quote\n * acknowledgement times out, or the server rejects the quote.\n */\n quote(response: RfqQuoteResponse): Promise<RfqQuoteReference>;\n}\n\n/**\n * Server request asking the market maker to confirm or decline a selected quote.\n */\nexport interface RfqConfirmationRequestEvent extends RfqConfirmationRequest {\n /**\n * Requested RFQ position side.\n *\n * @remarks\n * The current RFQ system only supports YES-side requests, so this is always\n * {@link RfqSide.Yes}. Use {@link RfqConfirmationRequestEvent.direction} to\n * determine whether the requester wants to buy or sell that YES-side position.\n */\n side: RfqSide.Yes;\n\n /**\n * Confirms that the maker wants to proceed with the selected quote.\n *\n * @remarks\n * If this resolves, the server accepted the confirmation decision.\n *\n * @throws {@link RfqConfirmationError}\n * Thrown when the websocket fails, the acknowledgement times out, or the\n * server rejects the confirmation decision.\n */\n confirm(): Promise<RfqConfirmationAck>;\n\n /**\n * Declines the selected quote during the confirmation window.\n *\n * @remarks\n * If this resolves, the server accepted the decline decision.\n *\n * @throws {@link RfqConfirmationError}\n * Thrown when the websocket fails, the acknowledgement times out, or the\n * server rejects the decline decision.\n */\n decline(): Promise<RfqConfirmationAck>;\n}\n\n/**\n * Execution status update for an RFQ after acceptance and handoff.\n */\nexport interface RfqExecutionUpdateEvent extends RfqExecutionUpdate {}\n\n/**\n * Confirmed combo trade broadcast visible to all authenticated quoters.\n */\nexport interface RfqTradeEvent extends RfqTrade {}\n\n/**\n * Event emitted by an RFQ session.\n */\nexport type RfqEvent =\n | RfqQuoteRequestEvent\n | RfqConfirmationRequestEvent\n | RfqExecutionUpdateEvent\n | RfqTradeEvent;\n\nexport interface RfqSession extends AsyncIterable<RfqEvent> {\n /**\n * Requests cancellation of a submitted RFQ quote.\n *\n * @remarks\n * The returned ack means the backend processed the cancellation request; it\n * does not guarantee the quote was withdrawn from an already-selected RFQ.\n *\n * @throws {@link RfqCancelQuoteError}\n * Thrown when the websocket fails, the acknowledgement times out, or the\n * server rejects the cancellation request.\n */\n cancelQuote(reference: RfqQuoteReference): Promise<RfqCancelQuoteAck>;\n\n /**\n * Closes the RFQ quoter stream.\n */\n close(): Promise<void>;\n}\n\nexport type OpenRfqSessionError =\n | ConnectionLostError\n | TransportError\n | UserInputError;\nexport const OpenRfqSessionError = makeErrorGuard(\n ConnectionLostError,\n TransportError,\n UserInputError,\n);\n\n/**\n * Opens an RFQ event session.\n *\n * @remarks\n * The returned async iterator is a stream, not a worker queue. Await inside the\n * loop to process RFQ events sequentially, or dispatch handlers without awaiting\n * them to fan out handling when quote windows are tight.\n *\n * @throws {@link OpenRfqSessionError}\n * Thrown on failure.\n */\nexport async function openRfqSession(\n client: BaseSecureClient,\n): Promise<RfqSession> {\n assertCombosSupportedForAccount(client);\n\n return client.webSockets.rfqQuoter.connect();\n}\n\nconst BUILDER_RFQ_REQUESTS_PATH = '/v1/builder/rfq/requests';\n// Quote requests are held through the quote competition and can take well\n// beyond the transport's standard timeout.\nconst CREATE_QUOTE_TIMEOUT_MS = 30_000;\n// Accept processing includes synchronous validation and reservation work before\n// the gateway briefly holds the request for a maker last-look outcome.\nconst ACCEPT_QUOTE_TIMEOUT_MS = 30_000;\nconst ACCEPT_OUTCOME_TIMEOUT_MS = 30_000;\nconst ACCEPT_OUTCOME_POLL_INTERVAL_MS = 500;\nconst DEFAULT_FILL_TIMEOUT_MS = 30_000;\nconst DEFAULT_FILL_POLL_INTERVAL_MS = 1_000;\nconst BYTES32_ZERO =\n '0x0000000000000000000000000000000000000000000000000000000000000000' as const;\n\nexport type RfqRequestRejectedErrorOptions = {\n /** HTTP status of the rejection. */\n status: number;\n /** Classified rejection reason. */\n code: RfqRejectionCode;\n};\n\n/**\n * Error thrown when an RFQ request or acceptance is rejected.\n *\n * @remarks\n * Inspect {@link RfqRequestRejectedError.code} to distinguish permanent input\n * problems (`INVALID_RFQ`, `CONTRADICTORY_LEGS`) from transient conditions\n * (`LEG_METADATA_UNAVAILABLE`) that may be retried.\n *\n * Wire codes not recognized by this SDK version map to\n * {@link RfqRejectionCode.RequestFailed}; the original error is preserved on\n * `cause`.\n */\nexport class RfqRequestRejectedError extends MarketSdkError {\n override name = 'RfqRequestRejectedError' as const;\n\n /** HTTP status of the rejection. */\n readonly status: number;\n\n /** Classified rejection reason. */\n readonly code: RfqRejectionCode;\n\n constructor(\n message: string,\n options: ErrorOptions & RfqRequestRejectedErrorOptions,\n ) {\n super(message, options);\n this.status = options.status;\n this.code = options.code;\n }\n}\n\nfunction toRfqRequestRejection(error: unknown): unknown {\n if (error instanceof RequestRejectedError) {\n return new RfqRequestRejectedError(error.message, {\n cause: error,\n code: toRfqRejectionCode(error.code),\n status: error.status,\n });\n }\n\n return error;\n}\n\nconst RFQ_REJECTION_CODES = new Set<string>(Object.values(RfqRejectionCode));\n\nfunction toRfqRejectionCode(code: string | undefined): RfqRejectionCode {\n if (code !== undefined && RFQ_REJECTION_CODES.has(code)) {\n return code as RfqRejectionCode;\n }\n\n return RfqRejectionCode.RequestFailed;\n}\n\nfunction assertBuilderAuthorization(client: BaseSecureClient): void {\n if (!client.hasBuilderApiKey) {\n throw new UserInputError(\n 'Combo RFQ requests require a Builder API Key in the client configuration, via builderApiKey(...) or remoteBuilderSigning(...).',\n );\n }\n}\n\nconst ComboLegPositionIdsSchema = z\n .array(\n z\n .string()\n .regex(/^\\d+$/, 'Leg position IDs must be numeric strings.')\n .transform((value) => toPositionId(BigInt(value).toString())),\n )\n .min(2, 'Combo requests require at least 2 legs.')\n .max(50, 'Combo requests allow at most 50 legs.')\n .refine(\n (legs) => new Set(legs).size === legs.length,\n 'Leg position IDs must not contain duplicates.',\n )\n .transform((legs) =>\n [...legs].sort((left, right) => {\n const leftPositionId = BigInt(left);\n const rightPositionId = BigInt(right);\n\n if (leftPositionId < rightPositionId) return -1;\n if (leftPositionId > rightPositionId) return 1;\n return 0;\n }),\n );\n\nconst ComboAmountToBaseUnitsSchema = z\n .union([z.number(), z.string()])\n .transform((value, context): string => {\n const match = /^(\\d+)(?:\\.(\\d*))?$/.exec(String(value));\n\n if (match === null) {\n context.addIssue({\n code: 'custom',\n message: 'Value must be a valid decimal.',\n });\n return z.NEVER;\n }\n\n const [, whole = '', fraction = ''] = match;\n\n if (fraction.length > 6) {\n context.addIssue({\n code: 'custom',\n message: 'Value must have at most 6 decimal places.',\n });\n return z.NEVER;\n }\n\n const scaledValue = scaleE6DecimalParts(whole, fraction);\n\n if (scaledValue <= 0n) {\n context.addIssue({\n code: 'custom',\n message: 'Value must be greater than 0.',\n });\n return z.NEVER;\n }\n\n return scaledValue.toString();\n });\n\nfunction scaleE6DecimalParts(whole: string, fraction: string): bigint {\n return BigInt(whole) * 1_000_000n + BigInt(fraction.padEnd(6, '0'));\n}\n\ntype ComboQuoteFields = {\n /** RFQ identifier. */\n rfqId: RfqId;\n\n /** Winning quote identifier. */\n quoteId: RfqQuoteId;\n\n /** Builder code attached to the signed acceptance order. */\n builderCode: BuilderCode;\n\n /** Combo YES position traded by the acceptance order. */\n positionId: PositionId;\n\n /** Signed-order collateral for BUY, or position shares for SELL. */\n makerAmount: DecimalString;\n\n /** Signed-order shares for BUY, or gross collateral limit for SELL. */\n takerAmount: DecimalString;\n\n /** Blended price across legs, in collateral per outcome token. */\n blendedPrice: DecimalString;\n\n /** Total collateral including fees for BUY, or position shares for SELL. */\n totalRequired: DecimalString;\n\n /** Acceptance deadline (Unix ms). */\n expiresAt: EpochMilliseconds;\n};\n\n/**\n * A self-contained winning combo quote.\n *\n * @remarks\n * The quote is plain JSON data and carries every input needed to accept it.\n * It may be persisted or routed between processes before being passed to\n * {@link acceptComboQuote}.\n */\nexport type ComboQuote = ComboQuoteFields &\n (\n | {\n /** Trade direction of the original request. */\n direction: OrderSide.BUY;\n\n /** Net proceeds apply only to SELL quotes. */\n netReceive?: undefined;\n }\n | {\n /** Trade direction of the original request. */\n direction: OrderSide.SELL;\n\n /** Exact collateral proceeds for the quoted bundle after fees. */\n netReceive: DecimalString;\n }\n );\n\nexport type RequestComboQuoteParams = {\n /** Position IDs of the combo legs. Between 2 and 50, no duplicates. */\n legPositionIds: string[];\n\n /**\n * Combinatorial position side. Only `YES` is currently supported.\n *\n * @defaultValue {@link RfqSide.Yes}\n */\n side?: RfqSide.Yes;\n} & (\n | {\n direction: OrderSide.BUY;\n\n /**\n * Collateral to spend, in USDC, including fees.\n *\n * This is the human-readable amount: `1` means one dollar, not one\n * 6-decimal base unit.\n */\n amount: number | string;\n }\n | {\n direction: OrderSide.SELL;\n\n /**\n * Size to sell, in outcome tokens.\n *\n * This is the human-readable token amount: `1` means one full share,\n * not one 6-decimal base unit.\n */\n size: number | string;\n }\n);\n\nexport type RequestComboQuoteResult =\n | {\n rfqId: RfqId;\n\n /** The winning quote. */\n quote: ComboQuote;\n }\n | {\n rfqId: RfqId;\n\n /** No usable quote was returned. */\n quote: null;\n\n reason: ComboQuoteUnavailableReason;\n };\n\nconst RequestComboQuoteParamsSchema = z.discriminatedUnion('direction', [\n z.object({\n amount: ComboAmountToBaseUnitsSchema,\n direction: z.literal(OrderSide.BUY),\n legPositionIds: ComboLegPositionIdsSchema,\n side: z.literal(RfqSide.Yes).optional(),\n }),\n z.object({\n direction: z.literal(OrderSide.SELL),\n legPositionIds: ComboLegPositionIdsSchema,\n side: z.literal(RfqSide.Yes).optional(),\n size: ComboAmountToBaseUnitsSchema,\n }),\n]);\n\nexport type RequestComboQuoteError =\n | RateLimitError\n | RfqRequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const RequestComboQuoteError = makeErrorGuard(\n RateLimitError,\n RfqRequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Requests a quote for a combo of positions.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * Resolves when the quote competition window closes. A request that attracts\n * no usable quotes is a normal outcome, returned as `quote: null` with a\n * reason rather than thrown.\n *\n * A winning quote is self-contained JSON data and may be persisted or routed\n * to another process before acceptance.\n *\n * @throws {@link RequestComboQuoteError}\n * Thrown on failure.\n *\n * @example\n * ```ts\n * const result = await requestComboQuote(client, {\n * legPositionIds: ['123', '456'],\n * direction: OrderSide.BUY,\n * amount: 100,\n * });\n *\n * if (result.quote !== null) {\n * // result.quote.blendedPrice: DecimalString\n * // result.quote.totalRequired: DecimalString\n * // SELL quotes also carry result.quote.netReceive after fees.\n * }\n * ```\n */\nexport async function requestComboQuote(\n client: BaseSecureClient,\n params: RequestComboQuoteParams,\n): Promise<RequestComboQuoteResult> {\n assertCombosSupportedForAccount(client);\n\n const input = parseUserInput(params, RequestComboQuoteParamsSchema);\n assertBuilderAuthorization(client);\n\n const identity = resolveOrderIdentity(client.account);\n const request: BuilderRfqCreateRequest = {\n direction:\n input.direction === OrderSide.BUY ? RfqDirection.Buy : RfqDirection.Sell,\n leg_position_ids: input.legPositionIds,\n maker_address: identity.maker,\n requested_size:\n input.direction === OrderSide.BUY\n ? { unit: RfqRequestedSizeUnit.Notional, value_e6: input.amount }\n : { unit: RfqRequestedSizeUnit.Shares, value_e6: input.size },\n side: RfqSide.Yes,\n signature_type: identity.signatureType,\n signer_address: identity.signer,\n };\n\n const response = await client.builderGateway\n .post(BUILDER_RFQ_REQUESTS_PATH, {\n json: request,\n timeout: CREATE_QUOTE_TIMEOUT_MS,\n schema: BuilderRfqCreateResponseSchema,\n })\n .catch((error) => {\n throw toRfqRequestRejection(error);\n });\n\n if ('quote' in response) {\n assertBuilderRfqResponseMatchesRequest(response, request);\n\n const direction =\n response.request.direction === RfqDirection.Buy\n ? OrderSide.BUY\n : OrderSide.SELL;\n const quote = {\n blendedPrice: response.quote.blendedPrice,\n builderCode: response.builderCode,\n expiresAt: response.expiresAt,\n makerAmount: response.quote.makerAmount,\n positionId: response.request.yesPositionId,\n quoteId: response.quote.quoteId,\n rfqId: response.rfqId,\n takerAmount: response.quote.takerAmount,\n totalRequired: response.quote.totalRequired,\n } satisfies ComboQuoteFields;\n\n if (direction === OrderSide.SELL) {\n if (response.quote.netReceive === undefined) {\n throw new UnexpectedResponseError(\n `SELL quote for RFQ ${response.rfqId} omitted net sell proceeds.`,\n );\n }\n\n return {\n quote: {\n ...quote,\n direction,\n netReceive: response.quote.netReceive,\n },\n rfqId: response.rfqId,\n };\n }\n\n return {\n quote: {\n ...quote,\n direction,\n },\n rfqId: response.rfqId,\n };\n }\n\n return toQuoteUnavailableResult(response);\n}\n\nfunction assertBuilderRfqResponseMatchesRequest(\n response: BuilderRfqQuoteReadyResponse,\n request: BuilderRfqCreateRequest,\n): void {\n const echoed = response.request;\n const mismatchedFields: string[] = [];\n\n if (echoed.rfqId !== response.rfqId) mismatchedFields.push('rfq_id');\n if (echoed.direction !== request.direction) {\n mismatchedFields.push('direction');\n }\n if (echoed.side !== request.side) mismatchedFields.push('side');\n if (\n echoed.legPositionIds.length !== request.leg_position_ids.length ||\n echoed.legPositionIds.some(\n (positionId, index) => positionId !== request.leg_position_ids[index],\n )\n ) {\n mismatchedFields.push('leg_position_ids');\n }\n if (\n echoed.requestedSize.unit !== request.requested_size.unit ||\n echoed.requestedSize.valueE6 !== request.requested_size.value_e6\n ) {\n mismatchedFields.push('requested_size');\n }\n\n if (mismatchedFields.length > 0) {\n throw new UnexpectedResponseError(\n `Builder RFQ response did not echo the submitted ${mismatchedFields.join(', ')}.`,\n );\n }\n}\n\nfunction toQuoteUnavailableResult(\n response: BuilderRfqFinalStateResponse,\n): RequestComboQuoteResult {\n switch (response.error?.code) {\n case RfqKnownErrorCode.NoQuotes:\n return {\n quote: null,\n reason: ComboQuoteUnavailableReason.NoQuotes,\n rfqId: response.rfqId,\n };\n case RfqKnownErrorCode.SizeTooLarge:\n return {\n quote: null,\n reason: ComboQuoteUnavailableReason.SizeTooLarge,\n rfqId: response.rfqId,\n };\n default:\n throw new RfqRequestRejectedError(\n response.error?.message ?? 'The combo quote request failed.',\n {\n code: toRfqRejectionCode(response.error?.code),\n status: 200,\n ...(response.error === undefined ? {} : { cause: response.error }),\n },\n );\n }\n}\n\nconst AcceptComboQuoteDirectionSchema: z.ZodType<OrderSide, `${OrderSide}`> =\n OrderSideSchema;\n\nconst AcceptComboQuoteParamsSchema = z.object({\n blendedPrice: z.string(),\n builderCode: z\n .string()\n .regex(/^0x[0-9a-fA-F]{64}$/, 'builderCode must be a 32-byte hex string.')\n .transform(toBuilderCode),\n direction: AcceptComboQuoteDirectionSchema,\n expiresAt: z.number().int().nonnegative(),\n makerAmount: ComboAmountToBaseUnitsSchema.transform(toBaseUnits),\n netReceive: z.string().optional(),\n positionId: z\n .string()\n .regex(/^\\d+$/, 'positionId must be a numeric string.')\n .transform(toPositionId),\n quoteId: z.string().min(1).transform(toRfqQuoteId),\n rfqId: z.string().min(1).transform(toRfqId),\n takerAmount: ComboAmountToBaseUnitsSchema.transform(toBaseUnits),\n totalRequired: z.string(),\n});\n\ntype AcceptComboQuoteParamsInput = z.input<typeof AcceptComboQuoteParamsSchema>;\n\ntype AcceptComboQuoteParamsFields = {\n /** RFQ identifier. */\n rfqId: string;\n\n /** Winning quote identifier. */\n quoteId: string;\n\n /** Builder code attached to the signed acceptance order. */\n builderCode: string;\n\n /** Trade direction of the original request. */\n direction: `${OrderSide}`;\n\n /** Combo YES position traded by the acceptance order. */\n positionId: string;\n\n /** Signed-order collateral for BUY, or position shares for SELL. */\n makerAmount: number | string;\n\n /** Signed-order shares for BUY, or gross collateral limit for SELL. */\n takerAmount: number | string;\n\n /** Exact collateral proceeds after fees for a SELL quote. */\n netReceive?: string;\n\n /** Blended price across legs, in collateral per outcome token. */\n blendedPrice: string;\n\n /** Total collateral including fees for BUY, or position shares for SELL. */\n totalRequired: string;\n\n /** Acceptance deadline (Unix ms). */\n expiresAt: number;\n};\n\ntype AcceptComboQuoteParamsSchemaMatch =\n AcceptComboQuoteParamsFields extends AcceptComboQuoteParamsInput\n ? AcceptComboQuoteParamsInput extends AcceptComboQuoteParamsFields\n ? unknown\n : never\n : never;\n\n/**\n * Plain JSON representation of a self-contained combo quote.\n *\n * @remarks\n * {@link ComboQuote} is assignable to this type, while quotes restored from a\n * typed transport or persistence boundary do not need to recreate the SDK's\n * branded return types. Its fields are checked against the runtime input\n * schema at compile time.\n */\nexport type AcceptComboQuoteParams = AcceptComboQuoteParamsInput &\n AcceptComboQuoteParamsFields &\n AcceptComboQuoteParamsSchemaMatch;\n\ntype ParsedAcceptComboQuoteParams = z.output<\n typeof AcceptComboQuoteParamsSchema\n> &\n AcceptComboQuoteParamsSchemaMatch;\n\nexport type AcceptComboQuoteResult =\n | {\n status: 'executing';\n rfqId: RfqId;\n\n /**\n * Hash of the recorded acceptance order.\n *\n * Absent when a retry attached to an acceptance recorded by an earlier\n * attempt; the retried order was not the one recorded.\n */\n takerOrderHash?: string;\n }\n | {\n status: 'failed';\n rfqId: RfqId;\n reason: ComboAcceptFailureReason;\n\n /** Raw error behind the failure, when provided. */\n error?: BuilderRfqError;\n };\n\nexport type AcceptComboQuoteError =\n | CancelledSigningError\n | RateLimitError\n | RfqRequestRejectedError\n | SigningError\n | TimeoutError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const AcceptComboQuoteError = makeErrorGuard(\n CancelledSigningError,\n RateLimitError,\n RfqRequestRejectedError,\n SigningError,\n TimeoutError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Accepts a self-contained combo quote, signing the acceptance order for the\n * authenticated account.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * Resolves at the maker last-look outcome. A maker declining or the\n * acceptance window expiring is a normal outcome, returned as\n * `status: 'failed'`. `status: 'executing'` means the trade was handed off\n * for onchain execution; follow it with {@link waitForComboFill}.\n *\n * A transport failure or unrecognized acceptance response is retried once\n * automatically; this is safe because an already-accepted RFQ reports its\n * current status instead of executing twice. After such a retry\n * `takerOrderHash` is absent because the retried order was not the one\n * recorded.\n *\n * The quote is JSON-serializable and may cross process boundaries before\n * acceptance. The accepting client must represent the same account and\n * builder identity used to request it.\n * Treat the quote as signing-sensitive data: preserve its integrity across\n * process boundaries and do not accept fields modified by an untrusted client.\n *\n * @throws {@link AcceptComboQuoteError}\n * Thrown on failure.\n *\n * @example\n * ```ts\n * const result = await requestComboQuote(client, {\n * legPositionIds: ['123', '456'],\n * direction: OrderSide.BUY,\n * amount: 100,\n * });\n *\n * if (result.quote !== null) {\n * const acceptance = await acceptComboQuote(client, result.quote);\n * }\n * ```\n */\nexport async function acceptComboQuote(\n client: BaseSecureClient,\n params: AcceptComboQuoteParams,\n): Promise<AcceptComboQuoteResult> {\n assertCombosSupportedForAccount(client);\n\n const input = parseUserInput(params, AcceptComboQuoteParamsSchema);\n assertBuilderAuthorization(client);\n\n const domain = createExchangeV3OrderDomain({\n chainId: client.environment.chainId,\n exchange: client.environment.contracts.exchangeV3,\n });\n const order = createComboAcceptanceOrder(client, input);\n const signedOrder = await signComboAcceptanceOrder(client, domain, order);\n const request: BuilderRfqAcceptRequest = {\n quote_id: input.quoteId,\n signed_order: signedOrder,\n };\n\n function postAcceptance() {\n return client.builderGateway.post(\n `${BUILDER_RFQ_REQUESTS_PATH}/${encodeURIComponent(input.rfqId)}/accept`,\n {\n json: request,\n timeout: ACCEPT_QUOTE_TIMEOUT_MS,\n schema: BuilderRfqStatusResponseSchema,\n },\n );\n }\n\n let accepted: BuilderRfqStatusResponse;\n try {\n try {\n accepted = await postAcceptance();\n } catch (error) {\n // Acceptance is idempotent server-side, so a single retry safely covers\n // both an interrupted request and a response that could not be validated.\n if (\n !(\n error instanceof TransportError ||\n error instanceof UnexpectedResponseError\n )\n ) {\n throw error;\n }\n accepted = await postAcceptance();\n }\n } catch (error) {\n const expired = toAcceptanceExpiredResult(input.rfqId, error);\n if (expired !== undefined) return expired;\n throw toRfqRequestRejection(error);\n }\n\n let status = accepted;\n // Only the accept response carries the taker order hash; status polls do\n // not, so capture it before entering the poll loop.\n const takerOrderHash = accepted.takerOrderHash;\n const deadline = Date.now() + ACCEPT_OUTCOME_TIMEOUT_MS;\n\n // The gateway holds the accept through maker last look but responds with\n // AWAITING_MAKER_CONFIRMATION when the outcome is still pending after its\n // hold window; resume over the status endpoint until the outcome lands.\n while (status.status === RfqStatus.AwaitingMakerConfirmation) {\n if (Date.now() >= deadline) {\n throw new TimeoutError(\n `Timed out waiting for the acceptance outcome of RFQ ${input.rfqId}.`,\n );\n }\n\n await delay(ACCEPT_OUTCOME_POLL_INTERVAL_MS);\n status = await fetchRfqStatus(client, { rfqId: input.rfqId });\n }\n\n if (\n status.status === RfqStatus.Failed ||\n status.status === RfqStatus.Expired ||\n status.status === RfqStatus.Canceled\n ) {\n return {\n reason: toComboAcceptFailureReason(status.status, status.error?.code),\n rfqId: status.rfqId,\n status: 'failed',\n ...(status.error === undefined ? {} : { error: status.error }),\n };\n }\n\n return {\n rfqId: status.rfqId,\n status: 'executing',\n ...(takerOrderHash === undefined ? {} : { takerOrderHash }),\n };\n}\n\nfunction toAcceptanceExpiredResult(\n rfqId: RfqId,\n error: unknown,\n): AcceptComboQuoteResult | undefined {\n if (\n error instanceof RequestRejectedError &&\n error.code === RfqKnownErrorCode.ExpiredRfq\n ) {\n return {\n error: { code: RfqKnownErrorCode.ExpiredRfq, message: error.message },\n reason: ComboAcceptFailureReason.AcceptanceWindowExpired,\n rfqId,\n status: 'failed',\n };\n }\n\n return undefined;\n}\n\nfunction toComboAcceptFailureReason(\n status: RfqStatus,\n code: RfqErrorCode | undefined,\n): ComboAcceptFailureReason {\n if (status === RfqStatus.Expired || code === RfqKnownErrorCode.ExpiredRfq) {\n return ComboAcceptFailureReason.AcceptanceWindowExpired;\n }\n\n if (code === RfqKnownErrorCode.MakerDeclined) {\n return ComboAcceptFailureReason.MakerDeclined;\n }\n\n return ComboAcceptFailureReason.ExecutionFailed;\n}\n\nfunction createComboAcceptanceOrder(\n client: BaseSecureClient,\n input: ParsedAcceptComboQuoteParams,\n): Omit<RfqSignedOrder, 'signature'> {\n const identity = resolveOrderIdentity(client.account);\n\n return {\n builder: input.builderCode,\n maker: identity.maker,\n makerAmount: input.makerAmount,\n metadata: BYTES32_ZERO,\n salt: generateComboAcceptanceOrderSalt().toString(),\n side: encodeExchangeOrderSide(input.direction),\n signatureType: identity.signatureType,\n signer: identity.signer,\n takerAmount: input.takerAmount,\n timestamp: Math.floor(Date.now() / 1000).toString(),\n tokenId: input.positionId,\n };\n}\n\nfunction generateComboAcceptanceOrderSalt(): bigint {\n const bytes = new Uint8Array(8);\n globalThis.crypto.getRandomValues(bytes);\n\n // RFQ salts stay strings on the wire, so the full 64-bit value is lossless.\n return BigInt(\n `0x${Array.from(bytes, (byte) => byte.toString(16).padStart(2, '0')).join('')}`,\n );\n}\n\nasync function signComboAcceptanceOrder(\n client: BaseSecureClient,\n domain: ExchangeOrderDomain,\n order: Omit<RfqSignedOrder, 'signature'>,\n): Promise<RfqSignedOrder> {\n let signature: EvmSignature;\n\n try {\n signature = await client.signer.signTypedData(\n createExchangeOrderTypedDataPayload({ domain, order }),\n );\n } catch (error) {\n if (error instanceof CancelledSigningError) {\n throw error;\n }\n\n throw SigningError.fromError(\n error,\n 'Could not sign the combo quote acceptance order.',\n );\n }\n\n return {\n ...order,\n signature: createExchangeOrderSignature({ domain, order, signature }),\n };\n}\n\nexport type WaitForComboFillParams = {\n /** RFQ identifier of an accepted RFQ. */\n rfqId: string;\n\n /**\n * Give up after this long.\n *\n * @defaultValue 30_000\n */\n timeoutMs?: number;\n\n /** @defaultValue 1_000 */\n pollingIntervalMs?: number;\n};\n\nexport type WaitForComboFillResult =\n | {\n status: RfqStatus.Filled;\n rfqId: RfqId;\n txHash: TxHash;\n }\n | {\n status: RfqStatus.Failed | RfqStatus.Expired | RfqStatus.Canceled;\n rfqId: RfqId;\n\n /** Raw error behind the failure, when provided. */\n error?: BuilderRfqError;\n };\n\nconst WaitForComboFillParamsSchema = z.object({\n pollingIntervalMs: z.number().int().positive().optional(),\n rfqId: z.string().min(1).transform(toRfqId),\n timeoutMs: z.number().int().positive().optional(),\n});\n\nexport type WaitForComboFillError =\n | RateLimitError\n | RfqRequestRejectedError\n | TimeoutError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const WaitForComboFillError = makeErrorGuard(\n RateLimitError,\n RfqRequestRejectedError,\n TimeoutError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Waits for an accepted RFQ to reach a terminal state.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * Polls the RFQ status until it is filled (or confirmed onchain), `FAILED`,\n * `EXPIRED`, or `CANCELED`. Terminal failure is a normal outcome and is\n * returned, not thrown. A {@link TimeoutError} does not mean the trade\n * failed; resume with {@link fetchRfqStatus}.\n *\n * @throws {@link WaitForComboFillError}\n * Thrown on failure.\n *\n * @example\n * ```ts\n * const fill = await waitForComboFill(client, { rfqId });\n *\n * if (fill.status === RfqStatus.Filled) {\n * // fill.txHash: TxHash\n * }\n * ```\n */\nexport async function waitForComboFill(\n client: BaseSecureClient,\n params: WaitForComboFillParams,\n): Promise<WaitForComboFillResult> {\n assertCombosSupportedForAccount(client);\n\n const input = parseUserInput(params, WaitForComboFillParamsSchema);\n const timeoutMs = input.timeoutMs ?? DEFAULT_FILL_TIMEOUT_MS;\n const pollingIntervalMs =\n input.pollingIntervalMs ?? DEFAULT_FILL_POLL_INTERVAL_MS;\n const deadline = Date.now() + timeoutMs;\n\n for (;;) {\n const status = await fetchRfqStatus(client, { rfqId: input.rfqId });\n\n if (\n status.status === RfqStatus.Filled ||\n status.status === RfqExecutionStatus.Confirmed\n ) {\n if (status.txHash === undefined) {\n throw new UnexpectedResponseError(\n `RFQ ${status.rfqId} reached ${status.status} without a transaction hash.`,\n );\n }\n\n return {\n rfqId: status.rfqId,\n status: RfqStatus.Filled,\n txHash: status.txHash,\n };\n }\n\n if (\n status.status === RfqStatus.Failed ||\n status.status === RfqStatus.Expired ||\n status.status === RfqStatus.Canceled\n ) {\n return {\n rfqId: status.rfqId,\n status: status.status,\n ...(status.error === undefined ? {} : { error: status.error }),\n };\n }\n\n if (Date.now() >= deadline) {\n throw new TimeoutError(\n `Timed out after ${timeoutMs}ms waiting for RFQ ${input.rfqId} to reach a terminal state.`,\n );\n }\n\n await delay(pollingIntervalMs);\n }\n}\n\nexport type FetchRfqStatusParams = {\n /** RFQ identifier of an accepted RFQ. */\n rfqId: string;\n};\n\n/**\n * Status projection for an accepted RFQ.\n *\n * @remarks\n * Onchain execution progress is merged into the top-level `status`:\n * {@link RfqExecutionStatus} values surface alongside the RFQ lifecycle.\n */\nexport type RfqStatusResult = BuilderRfqStatusResponse;\n\nconst FetchRfqStatusParamsSchema = z.object({\n rfqId: z.string().min(1).transform(toRfqId),\n});\n\nexport type FetchRfqStatusError =\n | RequestAbortedError\n | RateLimitError\n | RfqRequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchRfqStatusError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RfqRequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Fetches the status of an accepted RFQ.\n *\n * @remarks\n * Status is available once an acceptance has been recorded; earlier reads are\n * rejected.\n *\n * @throws {@link FetchRfqStatusError}\n * Thrown on failure.\n *\n * @example\n * ```ts\n * const status = await fetchRfqStatus(client, { rfqId });\n * ```\n */\nexport function fetchRfqStatus(\n client: BaseSecureClient,\n params: FetchRfqStatusParams,\n options: RequestOptions = {},\n): Promise<RfqStatusResult> {\n const requestOptions = parseRequestOptions(options);\n assertCombosSupportedForAccount(client);\n\n const input = parseUserInput(params, FetchRfqStatusParamsSchema);\n\n return client.builderGateway\n .get(`${BUILDER_RFQ_REQUESTS_PATH}/${encodeURIComponent(input.rfqId)}`, {\n ...requestOptions,\n schema: BuilderRfqStatusResponseSchema,\n })\n .catch((error) => {\n throw toRfqRequestRejection(error);\n });\n}\n\nfunction assertCombosSupportedForAccount(client: BaseSecureClient): void {\n if (client.account.signerType === SignerType.SESSION_KEY) {\n throw new UserInputError('Combos is not supported with Session Keys');\n }\n throw new UserInputError(\n 'SDK combo RFQ and position-backed V3 orders are not supported.',\n );\n}\n","import { PaginationCursorSchema } from '@kuest/bindings';\nimport {\n type Event,\n type Profile,\n type PublicSearchResponse,\n PublicSearchResponseSchema,\n type SearchTag,\n} from '@kuest/bindings/gamma';\nimport { z } from 'zod';\nimport type { BaseClient } from '../clients';\nimport {\n makeErrorGuard,\n PaginationLimitError,\n RateLimitError,\n RequestAbortedError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n} from '../errors';\nimport { parseUserInput } from '../input';\nimport {\n decodeOffsetCursor,\n encodeOffsetCursor,\n PageSizeSchema,\n type Paginated,\n paginate,\n} from '../pagination';\nimport { parseRequestOptions, type RequestOptions } from '../request-options';\nimport { snakeCase, toSearchParams } from './params';\n\nexport enum SearchSort {\n Volume = 'volume',\n Volume24Hr = 'volume_24hr',\n Liquidity = 'liquidity',\n Competitive = 'competitive',\n ClosedTime = 'closed_time',\n StartDate = 'start_date',\n EndDate = 'end_date',\n}\n\nconst MAX_SEARCH_PAGE = 100;\n\nconst SearchRequestSchema = z.object({\n q: z.string().trim().min(1),\n ascending: z.boolean().optional(),\n cache: z.boolean().optional(),\n cursor: PaginationCursorSchema.optional(),\n eventsStatus: z.string().min(1).optional(),\n eventsTag: z.array(z.string()).optional(),\n excludeTagIds: z.array(z.number().int()).optional(),\n keepClosedMarkets: z.number().int().optional(),\n optimized: z.boolean().optional(),\n pageSize: PageSizeSchema.default(10),\n presets: z.array(z.string()).optional(),\n recurrence: z.enum(['daily', 'weekly', 'monthly']).optional(),\n searchProfiles: z.boolean().optional(),\n searchTags: z.boolean().optional(),\n sort: z.enum(SearchSort).optional(),\n});\n\nexport type SearchRequest = z.input<typeof SearchRequestSchema>;\n\ntype SearchParams = z.output<typeof SearchRequestSchema>;\n\ntype PublicSearchParams = Omit<SearchParams, 'cursor' | 'pageSize'> & {\n limitPerType: number;\n page: number;\n};\n\nexport type SearchResults = {\n events: Event[];\n profiles: Profile[];\n tags: SearchTag[];\n};\n\nexport type SearchError =\n | RequestAbortedError\n | PaginationLimitError\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const SearchError = makeErrorGuard(\n RequestAbortedError,\n PaginationLimitError,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Runs a public full-text search.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n * `keepClosedMarkets` is an hour window for including recently closed markets\n * when searching active events.\n *\n * Search serves up to 100 pages. If more results may exist at that boundary,\n * automatic iteration yields the page with `limitReached: true` and stops\n * normally, keeping `hasMore` true. Explicitly following its cursor throws\n * {@link PaginationLimitError} before any request. Completeness is unknown.\n *\n * @throws {@link SearchError}\n * Thrown on failure.\n *\n * @example\n * Fetch the first page of results:\n * ```ts\n * const result = search(client, {\n * q: 'trump',\n * pageSize: 10,\n * });\n *\n * const firstPage = await result.firstPage();\n *\n * // Optionally, fetch additional pages:\n * for await (const page of result.from(firstPage.nextCursor)) {\n * // page.items.events: Event[]\n * // page.items.tags: SearchTag[]\n * // page.items.profiles: Profile[]\n * }\n * ```\n */\nexport function search(\n client: BaseClient,\n request: SearchRequest,\n options: RequestOptions = {},\n): Paginated<SearchResults> {\n const requestOptions = parseRequestOptions(options);\n const { cursor, pageSize, ...params } = parseUserInput(\n request,\n SearchRequestSchema,\n );\n\n return paginate(\n (cursor) => {\n // Search stores one-based page numbers in the offset cursor.\n const decoded = decodeOffsetCursor(cursor, pageSize, {\n maxOffset: MAX_SEARCH_PAGE,\n });\n\n return client.gamma\n .get('/public-search', {\n schema: PublicSearchResponseSchema,\n ...requestOptions,\n params: toSearchParams(\n {\n ...params,\n limitPerType: decoded.pageSize,\n page: decoded.offset,\n },\n snakeCase<PublicSearchParams>({\n excludeTagIds: 'exclude_tag_id',\n }),\n ),\n })\n .then((response) => ({\n items: toSearchResults(response),\n hasMore: response.pagination?.hasMore ?? false,\n limitReached:\n (response.pagination?.hasMore ?? false) &&\n decoded.offset + 1 > MAX_SEARCH_PAGE,\n totalCount: response.pagination?.totalResults ?? undefined,\n nextCursor: response.pagination?.hasMore\n ? encodeOffsetCursor({\n offset: decoded.offset + 1,\n pageSize: decoded.pageSize,\n })\n : undefined,\n }));\n },\n cursor ?? encodeOffsetCursor({ offset: 1, pageSize }),\n { events: [], profiles: [], tags: [] },\n );\n}\n\nfunction toSearchResults(response: PublicSearchResponse): SearchResults {\n return {\n events: response.events ?? [],\n profiles: response.profiles ?? [],\n tags: response.tags ?? [],\n };\n}\n","import { PaginationCursorSchema } from '@kuest/bindings';\nimport {\n ListSeriesResponseSchema,\n type Series,\n SeriesSchema,\n} from '@kuest/bindings/gamma';\nimport { z } from 'zod';\nimport type { BaseClient } from '../clients';\nimport {\n makeErrorGuard,\n RateLimitError,\n RequestAbortedError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n} from '../errors';\nimport { parseUserInput } from '../input';\nimport {\n decodeOffsetCursor,\n encodeOffsetCursor,\n PageSizeSchema,\n type Paginated,\n paginate,\n} from '../pagination';\nimport { parseRequestOptions, type RequestOptions } from '../request-options';\nimport { snakeCase, toSearchParams } from './params';\n\nconst ListSeriesRequestSchema = z.object({\n ascending: z.boolean().optional(),\n closed: z.boolean().optional(),\n cursor: PaginationCursorSchema.optional(),\n excludeEvents: z.boolean().optional(),\n locale: z.string().optional(),\n order: z.string().optional(),\n // Matches the upstream per-request limit cap.\n pageSize: PageSizeSchema.max(50).default(20),\n recurrence: z.enum(['daily', 'weekly', 'monthly']).optional(),\n slug: z.array(z.string()).optional(),\n});\n\nconst FetchSeriesRequestSchema = z.object({\n id: z.string(),\n locale: z.string().optional(),\n});\n\nexport type ListSeriesRequest = z.input<typeof ListSeriesRequestSchema>;\nexport type FetchSeriesRequest = z.input<typeof FetchSeriesRequestSchema>;\n\nexport type ListSeriesError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const ListSeriesError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Lists series.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link ListSeriesError}\n * Thrown on failure.\n *\n * @example\n * Fetch the first page of results:\n * ```ts\n * const result = listSeries(client, {\n * closed: false,\n * pageSize: 10,\n * });\n *\n * const firstPage = await result.firstPage();\n *\n * // Optionally, fetch additional pages:\n * for await (const page of result.from(firstPage.nextCursor)) {\n * // page.items: Series[]\n * }\n * ```\n *\n * @example\n * Loop through all pages with `for await`:\n * ```ts\n * const result = listSeries(client, {\n * closed: false,\n * pageSize: 10,\n * });\n *\n * for await (const page of result) {\n * // page.items: Series[]\n * }\n * ```\n */\nexport function listSeries(\n client: BaseClient,\n request: ListSeriesRequest = {},\n options: RequestOptions = {},\n): Paginated<Series[]> {\n const requestOptions = parseRequestOptions(options);\n const { cursor, pageSize, ...params } = parseUserInput(\n request,\n ListSeriesRequestSchema,\n );\n\n return paginate((cursor) => {\n const decoded = decodeOffsetCursor(cursor, pageSize);\n\n return client.gamma\n .get('/series', {\n schema: ListSeriesResponseSchema,\n ...requestOptions,\n params: toSearchParams(\n {\n ...params,\n limit: decoded.pageSize,\n offset: decoded.offset,\n },\n snakeCase(),\n ),\n })\n .then((series) => {\n const hasMore = series.length >= decoded.pageSize;\n\n return {\n items: series,\n hasMore,\n nextCursor: hasMore\n ? encodeOffsetCursor({\n offset: decoded.offset + decoded.pageSize,\n pageSize: decoded.pageSize,\n })\n : undefined,\n };\n });\n }, cursor);\n}\n\nexport type FetchSeriesError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchSeriesError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Fetches a series.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link FetchSeriesError}\n * Thrown on failure.\n *\n * @example\n * ```ts\n * const series = await fetchSeries(client, {\n * id: 'fed-daily-series',\n * locale: 'en',\n * });\n *\n * // series === Series\n * ```\n */\nexport async function fetchSeries(\n client: BaseClient,\n request: FetchSeriesRequest,\n options: RequestOptions = {},\n): Promise<Series> {\n const requestOptions = parseRequestOptions(options);\n const params = parseUserInput(request, FetchSeriesRequestSchema);\n\n return client.gamma.get(`series/${params.id}`, {\n schema: SeriesSchema,\n ...requestOptions,\n params: toSearchParams(\n {\n locale: params.locale,\n },\n snakeCase(),\n ),\n });\n}\n","import {\n RelayerAuthorizeSessionSignerStatus,\n RelayerRevokeSessionSignerStatus,\n} from '@kuest/bindings/relayer';\nimport { TransactionFailedError } from '../errors';\n\ntype SessionSignerOperation =\n | {\n kind: 'authorization';\n status: RelayerAuthorizeSessionSignerStatus;\n }\n | {\n kind: 'revocation';\n status: RelayerRevokeSessionSignerStatus;\n };\n\nexport function assertSessionSignerOperationAccepted(\n operation: SessionSignerOperation,\n): void {\n const failed =\n operation.kind === 'authorization'\n ? operation.status === RelayerAuthorizeSessionSignerStatus.FAILED ||\n operation.status === RelayerAuthorizeSessionSignerStatus.SUPERSEDED ||\n operation.status === RelayerAuthorizeSessionSignerStatus.REPAIR_REQUIRED\n : operation.status === RelayerRevokeSessionSignerStatus.FAILED;\n\n if (failed) {\n throw new TransactionFailedError(\n `Session-key ${operation.kind} reached terminal status ${operation.status}`,\n );\n }\n}\n","import {\n type EvmAddress,\n EvmAddressSchema,\n SessionSignerKnownScope as SessionKeyKnownScope,\n type SessionSignerScope as SessionKeyScope,\n SessionSignerScopeSchema,\n} from '@kuest/bindings';\nimport { ActiveSessionSignersResponseSchema } from '@kuest/bindings/clob';\nimport { WalletType } from '@kuest/bindings/gamma';\nimport {\n RelayerAuthorizeSessionSignerResponseSchema,\n RelayerRevokeSessionSignerResponseSchema,\n} from '@kuest/bindings/relayer';\nimport {\n delay,\n expectEvmAddress,\n isSameEvmAddress,\n ZERO_ADDRESS,\n} from '@kuest/types';\nimport { z } from 'zod';\nimport { authorizeSessionSignerCall, revokeSessionSignerCall } from '../abis';\nimport type { BaseSecureClient } from '../clients';\nimport {\n CancelledSigningError,\n makeErrorGuard,\n RateLimitError,\n RequestAbortedError,\n RequestRejectedError,\n SigningError,\n TimeoutError,\n TransactionFailedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n} from '../errors';\nimport { parseUserInput } from '../input';\nimport { parseRequestOptions, type RequestOptions } from '../request-options';\nimport type { TransactionOutcome } from '../types';\nimport { SignerType } from '../wallet';\nimport { completeWith } from '../workflow';\nimport {\n buildDepositWalletExecuteRequest,\n GaslessTransactionHandle,\n} from './gasless';\nimport { assertSessionSignerOperationAccepted } from './session-key-status';\n\nexport type { SessionKeyScope };\nexport { SessionKeyKnownScope };\n\n/**\n * A scoped session key authorized for the Deposit Wallet.\n */\nexport type SessionKey = {\n /** Public EVM address of the externally managed session signer. */\n address: EvmAddress;\n /** Venue scopes granted to the signer. */\n scopes: SessionKeyScope[];\n /** Absolute expiry as whole Unix seconds. */\n validUntil: number;\n};\n\nexport type FetchSessionKeysError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | SigningError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchSessionKeysError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n SigningError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Fetches the active session keys authorized for the Deposit Wallet.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @example\n * ```ts\n * const sessionKeys = await fetchSessionKeys(client);\n * ```\n *\n * @throws {@link FetchSessionKeysError}\n * Thrown on failure.\n */\nexport async function fetchSessionKeys(\n client: BaseSecureClient,\n options: RequestOptions = {},\n): Promise<SessionKey[]> {\n const requestOptions = parseRequestOptions(options);\n assertOwnerDepositWallet(client);\n\n const response = await client.secureClob.get('/v1/user/session-signers', {\n ...requestOptions,\n schema: ActiveSessionSignersResponseSchema,\n });\n\n if (!isSameEvmAddress(response.wallet, client.account.wallet)) {\n throw new UnexpectedResponseError(\n `Session-key response wallet ${response.wallet} does not match authenticated wallet ${client.account.wallet}`,\n );\n }\n\n return response.signers.map((sessionSigner) => ({\n address: expectEvmAddress(sessionSigner.address.toLowerCase()),\n scopes: sessionSigner.scopes,\n validUntil: sessionSigner.validUntil,\n }));\n}\n\n/** Parameters for authorizing a scoped session key. */\nexport type AuthorizeSessionKeyRequest = {\n /** Public EVM address of the externally managed session signer. */\n address: string;\n /** Stable key to reuse when retrying the same logical authorization. */\n idempotencyKey?: string;\n /** Requested scopes. Defaults to `ALL`, which must appear alone. */\n scopes?: SessionKeyScope[];\n};\n\ntype ParsedAuthorizeSessionKeyRequest = {\n address: EvmAddress;\n idempotencyKey?: string;\n scopes: SessionKeyScope[];\n};\n\nconst DEFAULT_SESSION_KEY_SCOPES = [\n SessionKeyKnownScope.ALL,\n] satisfies SessionKeyScope[];\nconst SESSION_KEY_LIFETIME_SECONDS = 4_315 * 60 * 60;\n\nconst SESSION_KEY_RELAYER_SUBMISSION_TIMEOUT_MS = 5 * 60 * 1_000;\n\nconst AuthorizeSessionKeyRequestSchema = z\n .object({\n address: EvmAddressSchema,\n idempotencyKey: z.string().trim().min(1).optional(),\n scopes: z\n .array(SessionSignerScopeSchema)\n .min(1)\n .default(DEFAULT_SESSION_KEY_SCOPES),\n })\n .superRefine((value, context) => {\n if (isSameEvmAddress(value.address, ZERO_ADDRESS)) {\n context.addIssue({\n code: 'custom',\n message: 'Session key address must not be the zero address.',\n path: ['address'],\n });\n }\n\n if (\n value.scopes.includes(SessionKeyKnownScope.ALL) &&\n value.scopes.some((scope) => scope !== SessionKeyKnownScope.ALL)\n ) {\n context.addIssue({\n code: 'custom',\n message: 'Session key scope ALL cannot be combined with another scope.',\n path: ['scopes'],\n });\n }\n })\n .transform(\n (value): ParsedAuthorizeSessionKeyRequest => ({\n ...value,\n address: expectEvmAddress(value.address.toLowerCase()),\n }),\n ) satisfies z.ZodType<\n ParsedAuthorizeSessionKeyRequest,\n AuthorizeSessionKeyRequest\n>;\n\n/** Result of a confirmed session-key authorization. */\nexport type AuthorizeSessionKeyResult = {\n /** Session-key metadata associated with the confirmed authorization. */\n sessionKey: SessionKey;\n /** Confirmed transaction that applied the authorization. */\n transaction: TransactionOutcome;\n};\n\nexport type AuthorizeSessionKeyError =\n | CancelledSigningError\n | RateLimitError\n | RequestRejectedError\n | SigningError\n | TimeoutError\n | TransactionFailedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const AuthorizeSessionKeyError = makeErrorGuard(\n CancelledSigningError,\n RateLimitError,\n RequestRejectedError,\n SigningError,\n TimeoutError,\n TransactionFailedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Authorizes an externally managed signer for selected venues.\n *\n * The SDK receives only the public address. The application remains\n * responsible for generating, storing, and protecting the private key.\n * When scopes are omitted, authorization defaults to `ALL`.\n * The authorization expires 180 days after it is created.\n * Requires builder API-key authentication.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * Resolves after the submitted transaction is confirmed and the session key\n * appears in the active session-key list.\n *\n * @example\n * ```ts\n * const authorization = await authorizeSessionKey(client, {\n * address: sessionAddress,\n * });\n * ```\n *\n * @throws {@link AuthorizeSessionKeyError}\n * Thrown on failure.\n */\nexport async function authorizeSessionKey(\n client: BaseSecureClient,\n request: AuthorizeSessionKeyRequest,\n): Promise<AuthorizeSessionKeyResult> {\n assertOwnerDepositWallet(client);\n\n if (!client.hasBuilderApiKey) {\n throw new UserInputError(\n 'Session-key authorization requires builder API-key authentication.',\n );\n }\n\n const parsedRequest = parseUserInput(\n request,\n AuthorizeSessionKeyRequestSchema,\n );\n const validUntil =\n Math.floor(Date.now() / 1_000) + SESSION_KEY_LIFETIME_SECONDS;\n const signedBatch = await completeWith(client.signer)(\n buildDepositWalletExecuteRequest(client, [\n authorizeSessionSignerCall(\n client.account.wallet,\n parsedRequest.address,\n BigInt(validUntil),\n ),\n ]),\n );\n const payload = {\n deadline: signedBatch.depositWalletParams.deadline,\n nonce: signedBatch.nonce,\n scopes: parsedRequest.scopes,\n sessionSignerAddress: parsedRequest.address,\n signature: signedBatch.signature,\n validUntil: `${validUntil}`,\n walletAddress: client.account.wallet,\n };\n const response = await client.relayer.post(\n '/v1/session-signers/authorizations',\n {\n headers: {\n 'Idempotency-Key':\n parsedRequest.idempotencyKey ?? globalThis.crypto.randomUUID(),\n },\n json: payload,\n timeout: SESSION_KEY_RELAYER_SUBMISSION_TIMEOUT_MS,\n schema: RelayerAuthorizeSessionSignerResponseSchema,\n },\n );\n assertSessionSignerOperationAccepted({\n kind: 'authorization',\n status: response.status,\n });\n\n const transaction = await new GaslessTransactionHandle(\n client,\n response,\n ).wait();\n\n const sessionKey = await waitForAuthorizedSessionKey(client, {\n address: parsedRequest.address,\n scopes: parsedRequest.scopes,\n validUntil,\n });\n\n return {\n sessionKey,\n transaction,\n };\n}\n\n/** Parameters for revoking a session key. */\nexport type RevokeSessionKeyRequest = {\n /** Public EVM address of the session signer to revoke. */\n address: string;\n /** Stable key to reuse when retrying the same signed revocation. */\n idempotencyKey?: string;\n};\n\ntype ParsedRevokeSessionKeyRequest = {\n address: EvmAddress;\n idempotencyKey?: string;\n};\n\nconst RevokeSessionKeyRequestSchema = z\n .object({\n address: EvmAddressSchema,\n idempotencyKey: z.string().trim().min(1).optional(),\n })\n .superRefine((value, context) => {\n if (isSameEvmAddress(value.address, ZERO_ADDRESS)) {\n context.addIssue({\n code: 'custom',\n message: 'Session key address must not be the zero address.',\n path: ['address'],\n });\n }\n })\n .transform(\n (value): ParsedRevokeSessionKeyRequest => ({\n ...value,\n address: expectEvmAddress(value.address.toLowerCase()),\n }),\n ) satisfies z.ZodType<ParsedRevokeSessionKeyRequest, RevokeSessionKeyRequest>;\n\nexport type RevokeSessionKeyError =\n | CancelledSigningError\n | RateLimitError\n | RequestRejectedError\n | SigningError\n | TimeoutError\n | TransactionFailedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const RevokeSessionKeyError = makeErrorGuard(\n CancelledSigningError,\n RateLimitError,\n RequestRejectedError,\n SigningError,\n TimeoutError,\n TransactionFailedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Revokes a session key authorized for the Deposit Wallet.\n *\n * Returns once the session key is removed from the active-key registry and can\n * no longer be used. The on-chain transaction may still be pending.\n * Requires API-key authentication that supports gasless transactions.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @example\n * ```ts\n * await revokeSessionKey(client, {\n * address: sessionAddress,\n * });\n * ```\n *\n * @throws {@link RevokeSessionKeyError}\n * Thrown on failure.\n */\nexport async function revokeSessionKey(\n client: BaseSecureClient,\n request: RevokeSessionKeyRequest,\n): Promise<void> {\n assertOwnerDepositWallet(client);\n\n if (!client.supportsGasless) {\n throw new UserInputError(\n 'Session-key revocation requires API-key authentication that supports gasless transactions.',\n );\n }\n\n const parsedRequest = parseUserInput(request, RevokeSessionKeyRequestSchema);\n const signedBatch = await completeWith(client.signer)(\n buildDepositWalletExecuteRequest(client, [\n revokeSessionSignerCall(client.account.wallet, parsedRequest.address),\n ]),\n );\n const payload = {\n deadline: signedBatch.depositWalletParams.deadline,\n nonce: signedBatch.nonce,\n sessionSignerAddress: parsedRequest.address,\n signature: signedBatch.signature,\n walletAddress: client.account.wallet,\n };\n const response = await client.relayer.post(\n '/v1/session-signers/revocations',\n {\n headers: {\n 'Idempotency-Key':\n parsedRequest.idempotencyKey ?? globalThis.crypto.randomUUID(),\n },\n json: payload,\n timeout: SESSION_KEY_RELAYER_SUBMISSION_TIMEOUT_MS,\n schema: RelayerRevokeSessionSignerResponseSchema,\n },\n );\n assertSessionSignerOperationAccepted({\n kind: 'revocation',\n status: response.status,\n });\n // This eager return is intentional; the backend continues the remaining\n // revocation work after the key leaves the active-key registry.\n await waitForRevokedSessionKey(client, parsedRequest.address);\n}\n\nasync function waitForRevokedSessionKey(\n client: BaseSecureClient,\n address: EvmAddress,\n): Promise<void> {\n // This revocation readiness check deliberately reuses the relayer transaction\n // polling limits instead of introducing revocation-specific configuration.\n // The defaults allow about 200 seconds (100 polls every two seconds).\n for (\n let pollCount = 0;\n pollCount < client.environment.relayerMaxPolls;\n pollCount += 1\n ) {\n const isActive = (await fetchSessionKeys(client)).some((sessionKey) =>\n isSameEvmAddress(sessionKey.address, address),\n );\n\n if (!isActive) {\n return;\n }\n\n await delay(client.environment.relayerPollFrequencyMs);\n }\n\n throw new TimeoutError(\n `Timed out waiting for session key ${address} to be revoked`,\n );\n}\n\nasync function waitForAuthorizedSessionKey(\n client: BaseSecureClient,\n expected: SessionKey,\n): Promise<SessionKey> {\n // This temporary readiness check deliberately reuses the relayer transaction\n // polling limits instead of introducing session-key-specific configuration.\n for (\n let pollCount = 0;\n pollCount < client.environment.relayerMaxPolls;\n pollCount += 1\n ) {\n const sessionKey = (await fetchSessionKeys(client)).find(\n (candidate) =>\n isSameEvmAddress(candidate.address, expected.address) &&\n candidate.validUntil === expected.validUntil &&\n haveSameScopes(candidate.scopes, expected.scopes),\n );\n\n if (sessionKey !== undefined) {\n return sessionKey;\n }\n\n await delay(client.environment.relayerPollFrequencyMs);\n }\n\n throw new TimeoutError(\n `Timed out waiting for session key ${expected.address} to become active`,\n );\n}\n\nfunction haveSameScopes(\n left: SessionKeyScope[],\n right: SessionKeyScope[],\n): boolean {\n const rightScopes = new Set(right);\n\n return (\n new Set(left).size === rightScopes.size &&\n left.every((scope) => rightScopes.has(scope))\n );\n}\n\nfunction assertOwnerDepositWallet(client: BaseSecureClient): void {\n if (client.account.walletType !== WalletType.DEPOSIT_WALLET) {\n throw new UserInputError(\n 'Session keys can only be managed for a Deposit Wallet.',\n );\n }\n\n if (client.account.signerType !== SignerType.OWNER) {\n throw new UserInputError(\n 'Session keys can only be managed by the Deposit Wallet owner.',\n );\n }\n throw new UserInputError(\n 'Session-key management is not supported by this SDK.',\n );\n}\n","import {\n ListSportsMetadataResponseSchema,\n type SportsMarketTypesResponse,\n SportsMarketTypesResponseSchema,\n type SportsMetadata,\n} from '@kuest/bindings/gamma';\nimport type { BaseClient } from '../clients';\nimport {\n makeErrorGuard,\n RateLimitError,\n RequestAbortedError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n} from '../errors';\nimport { parseRequestOptions, type RequestOptions } from '../request-options';\n\nexport type ListSportsError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const ListSportsError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Lists available sports metadata.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link ListSportsError}\n * Thrown on failure.\n *\n * @example\n * ```ts\n * const sports = await listSports(client);\n *\n * // sports: SportsMetadata[]\n * ```\n */\nexport async function listSports(\n client: BaseClient,\n options: RequestOptions = {},\n): Promise<SportsMetadata[]> {\n const requestOptions = parseRequestOptions(options);\n return client.gamma.get('/sports', {\n ...requestOptions,\n schema: ListSportsMetadataResponseSchema,\n });\n}\n\nexport type FetchSportsMarketTypesError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchSportsMarketTypesError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Fetches the available market types grouped by sport.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link FetchSportsMarketTypesError}\n * Thrown on failure.\n *\n * @example\n * ```ts\n * const marketTypes = await fetchSportsMarketTypes(client);\n *\n * // marketTypes === SportsMarketTypesResponse\n * ```\n */\nexport async function fetchSportsMarketTypes(\n client: BaseClient,\n options: RequestOptions = {},\n): Promise<SportsMarketTypesResponse> {\n const requestOptions = parseRequestOptions(options);\n return client.gamma.get('/sports/market-types', {\n ...requestOptions,\n schema: SportsMarketTypesResponseSchema,\n });\n}\n","import { PriceProvider } from '@kuest/bindings/subscriptions';\nimport { z } from 'zod';\nimport { parseUserInput } from '../input';\nimport type {\n PriceSubscription,\n PriceSubscriptionConfirmation,\n} from './subscriptions';\n\nconst SymbolSchema = z\n .string()\n .trim()\n .min(1)\n .max(64)\n .regex(/^[a-zA-Z0-9._:/-]+$/);\nconst CryptoSymbolSchema = z\n .string()\n .max(64)\n .regex(/^[a-z0-9]+usd$/, {\n error:\n 'Use a canonical lowercase USD pair such as btcusd. Slash-separated symbols and USDT pairs are not supported.',\n });\nenum PriceEventType {\n Update = 'update',\n Subscribe = 'subscribe',\n}\nconst PriceSubscriptionSchema = z.discriminatedUnion('topic', [\n z.strictObject({\n topic: z.literal('prices.crypto'),\n symbols: z.array(CryptoSymbolSchema).min(1),\n provider: z.enum(PriceProvider).optional(),\n onSubscribed: z\n .custom<\n (confirmation: PriceSubscriptionConfirmation) => void | Promise<void>\n >((value) => typeof value === 'function')\n .optional(),\n }),\n z.strictObject({\n topic: z.literal('prices.crypto.twap'),\n symbols: z.array(CryptoSymbolSchema).min(1),\n provider: z.enum(PriceProvider).optional(),\n onSubscribed: z\n .custom<\n (confirmation: PriceSubscriptionConfirmation) => void | Promise<void>\n >((value) => typeof value === 'function')\n .optional(),\n }),\n z.strictObject({\n topic: z.literal('prices.equity'),\n symbol: SymbolSchema,\n types: z.array(z.enum(PriceEventType)).optional(),\n provider: z.enum(PriceProvider).optional(),\n onSubscribed: z\n .custom<\n (confirmation: PriceSubscriptionConfirmation) => void | Promise<void>\n >((value) => typeof value === 'function')\n .optional(),\n }),\n z.strictObject({\n topic: z.literal('prices.equity.twap'),\n symbol: SymbolSchema,\n provider: z.enum(PriceProvider).optional(),\n onSubscribed: z\n .custom<\n (confirmation: PriceSubscriptionConfirmation) => void | Promise<void>\n >((value) => typeof value === 'function')\n .optional(),\n }),\n]);\n\n/** @internal Validates the complete price subscription before allocating connections. */\nexport function parsePriceSubscription(\n spec: PriceSubscription,\n): PriceSubscription {\n return parseUserInput(spec, PriceSubscriptionSchema);\n}\n","import type { PerpsKlineInterval } from '@kuest/bindings/perps';\nimport type {\n CommentsEvent,\n CryptoPriceEvent,\n CryptoPricesBinanceEvent,\n CryptoPricesChainlinkEvent,\n CryptoPricesChainlinkTwapEvent,\n CryptoPricesChainlinkTwapSixtyEvent,\n CryptoPricesChainlinkTwapThirtyEvent,\n CryptoPricesChainlinkTwapTopic,\n CryptoPricesChainlinkTwapWindowSeconds,\n CryptoPricesEvent,\n CryptoPricesTopic,\n CryptoTwapPriceEvent,\n CustomMarketEvent,\n EquityPriceEvent,\n EquityPricesEvent,\n EquityPricesTopic,\n EquityTwapPriceEvent,\n MarketEvent,\n PerpsBboEvent,\n PerpsBookEvent,\n PerpsCandleEvent,\n PerpsMarketDataEvent,\n PerpsStatisticEvent,\n PerpsTickerEvent,\n PerpsTradeEvent,\n PriceProvider,\n PriceSource,\n SportsEvent,\n StandardMarketEvent,\n UserEvent,\n} from '@kuest/bindings/subscriptions';\nimport { invariant, type Prettify } from '@kuest/types';\nimport merge from 'it-merge';\nimport { z } from 'zod';\nimport type {\n BaseClient,\n BasePublicClient,\n BaseSecureClient,\n} from '../clients';\nimport {\n ConnectionLostError,\n makeErrorGuard,\n RequestRejectedError,\n TransportError,\n UserInputError,\n} from '../errors';\nimport { parseUserInput } from '../input';\nimport { parsePriceSubscription } from './price-subscriptions';\n\nexport type {\n CommentsEvent,\n CryptoPriceEvent,\n CryptoPriceSnapshotEvent,\n CryptoPricesBinanceEvent,\n CryptoPricesChainlinkEvent,\n CryptoPricesChainlinkTwapEvent,\n CryptoPricesChainlinkTwapSixtyEvent,\n CryptoPricesChainlinkTwapThirtyEvent,\n CryptoPricesChainlinkTwapWindowSeconds,\n CryptoPricesEvent,\n CryptoTwapPriceEvent,\n CryptoTwapPriceSnapshotEvent,\n EquityPriceEvent,\n EquityPricesEvent,\n EquityTwapPriceEvent,\n EquityTwapPriceSnapshotEvent,\n PriceSource,\n} from '@kuest/bindings/subscriptions';\nexport {\n KnownPriceSource,\n PriceProvider,\n} from '@kuest/bindings/subscriptions';\n// Event types — re-exported from bindings for consumer convenience.\n/** @experimental This API may change in a breaking way in any release, including patch releases. */\nexport type {\n CustomMarketEvent,\n MarketEvent,\n PerpsBboEvent,\n PerpsBookEvent,\n PerpsCandleEvent,\n PerpsMarketDataEvent,\n PerpsStatisticEvent,\n PerpsTickerEvent,\n PerpsTradeEvent,\n SportsEvent,\n StandardMarketEvent,\n UserEvent,\n};\n\n// Event `type` discriminants derived from bindings events.\nexport type MarketEventType = MarketEvent['type'];\nexport type UserEventType = UserEvent['type'];\nexport type SportsEventType = SportsEvent['type'];\nexport type CommentsEventType = CommentsEvent['type'];\nexport type CryptoPricesEventType = CryptoPricesEvent['type'];\nexport type EquityPricesEventType = EquityPricesEvent['type'];\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type PerpsMarketDataEventType = PerpsMarketDataEvent['type'];\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type PerpsStreamingCandleInterval = Exclude<\n PerpsKlineInterval,\n PerpsKlineInterval.OneSecond\n>;\n\ntype PerpsInstrumentIdInput = number;\n\n// Subscription specs.\nexport type MarketSubscription =\n | {\n topic: 'market';\n /** Asset identifiers whose market events should be delivered. */\n assetIds: readonly string[];\n tokenIds?: never;\n\n /**\n * When `true`, the server additionally emits `MarketBestBidAskEvent`,\n * `NewMarketEvent`, and `MarketResolvedEvent`.\n */\n customFeatureEnabled?: boolean;\n }\n | {\n topic: 'market';\n assetIds?: never;\n /** @deprecated Use `assetIds`. */\n tokenIds: readonly string[];\n\n /**\n * When `true`, the server additionally emits `MarketBestBidAskEvent`,\n * `NewMarketEvent`, and `MarketResolvedEvent`.\n */\n customFeatureEnabled?: boolean;\n };\n\nexport type UserSubscription = {\n topic: 'user';\n markets?: readonly string[];\n};\n\nexport type SportsSubscription = {\n topic: 'sports';\n};\n\n/**\n * @deprecated The comments stream is being discontinued.\n * Use `client.listComments()` to retrieve comments. This method does not\n * provide live comment or reaction events.\n *\n * @example\n * ```ts\n * const pages = client.listComments({\n * parentEntityId: '123',\n * parentEntityType: CommentParentEntityType.Event,\n * pageSize: 20,\n * });\n * const page = await pages.firstPage();\n *\n * for (const comment of page.items) {\n * console.log(comment);\n * }\n * ```\n */\nexport type CommentsSubscription = {\n topic: 'comments';\n types?: readonly CommentsEventType[];\n parentEntityId?: number;\n parentEntityType?: 'Event' | 'Market';\n};\n\n/**\n * @deprecated Use `prices.crypto` with a secure client and explicit canonical\n * USD symbols. Events include history snapshots. Removal is planned one month\n * after the 0.11.0 release.\n *\n * Binance USDT prices and PolyBolt USD prices have different quote currencies\n * and feed sources; this is not a like-for-like replacement. Chainlink spot\n * consumers must also assess the change in feed source.\n *\n * @example\n * ```ts\n * // Before: Chainlink USD or Binance USDT prices.\n * const legacyPrices = await publicClient.subscribe([\n * { topic: 'prices.crypto.chainlink', symbols: ['btc/usd'] },\n * { topic: 'prices.crypto.binance', symbols: ['btcusdt'] },\n * ]);\n *\n * // After: secureClient is already authenticated; choose USD prices explicitly.\n * const prices = await secureClient.subscribe([\n * { topic: 'prices.crypto', symbols: ['btcusd'] },\n * ]);\n * for await (const event of prices) {\n * if (event.type !== 'update') continue;\n * console.log(event.payload.symbol, event.payload.value);\n * }\n * ```\n */\nexport type CryptoPricesSubscription = {\n topic: CryptoPricesTopic;\n symbols?: readonly string[];\n};\n\n/**\n * @deprecated Use `prices.crypto.twap` with a secure client and explicit\n * canonical USD symbols. The replacement provides 60-second TWAP prices and\n * history snapshots. There is no replacement for the 30-second window.\n * Removal is planned one month after the 0.11.0 release.\n *\n * @example\n * ```ts\n * // Before\n * const legacyPrices = await publicClient.subscribe([\n * {\n * topic: 'prices.crypto.chainlink.twap',\n * symbols: ['btc/usd'],\n * windowSeconds: 60,\n * },\n * ]);\n *\n * // After: secureClient is already authenticated.\n * const prices = await secureClient.subscribe([\n * { topic: 'prices.crypto.twap', symbols: ['btcusd'] },\n * ]);\n * for await (const event of prices) {\n * if (event.type !== 'update') continue;\n * console.log(event.payload.symbol, event.payload.value);\n * }\n * ```\n */\nexport type CryptoPricesChainlinkTwapSubscription = {\n topic: CryptoPricesChainlinkTwapTopic;\n windowSeconds: CryptoPricesChainlinkTwapWindowSeconds;\n symbols?: readonly string[];\n};\n\n/**\n * @deprecated Use `prices.equity` with a secure client. The existing symbol\n * and event-type filters remain available. Removal is planned one month after\n * the 0.11.0 release.\n *\n * @example\n * ```ts\n * // Before\n * const legacyPrices = await publicClient.subscribe([\n * { topic: 'prices.equity.pyth', symbol: 'aapl', types: ['update'] },\n * ]);\n *\n * // After: secureClient is already authenticated.\n * const prices = await secureClient.subscribe([\n * { topic: 'prices.equity', symbol: 'aapl', types: ['update'] },\n * ]);\n * ```\n */\nexport type EquityPricesSubscription = {\n topic: EquityPricesTopic;\n symbol: string;\n types?: readonly EquityPricesEventType[];\n};\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type PerpsTradesSubscription = {\n topic: 'perps.trades';\n instrumentId: PerpsInstrumentIdInput;\n};\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type PerpsBboSubscription = {\n topic: 'perps.bbo';\n instrumentId: PerpsInstrumentIdInput;\n};\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type PerpsBookSubscription = {\n topic: 'perps.book';\n instrumentId: PerpsInstrumentIdInput;\n};\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type PerpsCandlesSubscription = {\n topic: 'perps.candles';\n instrumentId: PerpsInstrumentIdInput;\n interval: PerpsStreamingCandleInterval;\n};\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type PerpsTickersSubscription = {\n topic: 'perps.tickers';\n instrumentId?: PerpsInstrumentIdInput;\n};\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type PerpsStatisticsSubscription = {\n topic: 'perps.statistics';\n instrumentId?: PerpsInstrumentIdInput;\n};\n\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport type PerpsMarketDataSubscription =\n | PerpsTradesSubscription\n | PerpsBboSubscription\n | PerpsBookSubscription\n | PerpsCandlesSubscription\n | PerpsTickersSubscription\n | PerpsStatisticsSubscription;\n\nexport type PublicSubscriptionSpec =\n | MarketSubscription\n | SportsSubscription\n | CommentsSubscription\n | CryptoPricesSubscription\n | CryptoPricesChainlinkTwapSubscription\n | EquityPricesSubscription\n | PerpsMarketDataSubscription;\n\n/** Confirmation of one price subscription, refreshed after every reconnect. */\nexport type PriceSubscriptionConfirmation = {\n /** Canonical lowercase symbol the confirmation is for. */\n symbol: string;\n /**\n * The provider actually served, including fallback. Undefined when the\n * server does not confirm provider selection; never inferred from the pin.\n */\n provider?: PriceSource;\n};\n\n/**\n * Symbol-filtered cryptocurrency updates and recent history. Requires a secure\n * client and canonical lowercase USD pairs such as `btcusd`.\n * Slash-separated symbols and USDT pairs are rejected.\n */\nexport type CryptoPriceSubscription = {\n topic: 'prices.crypto';\n symbols: readonly string[];\n /** Requested vendor. Omit to follow the default; an unavailable pin may fall back. */\n provider?: PriceProvider;\n /**\n * Called once per symbol on acceptance and every reconnect, or immediately\n * when joining an accepted subscription. A thrown error or rejected promise\n * ends this handle with TransportError.\n */\n onSubscribed?: (\n confirmation: PriceSubscriptionConfirmation,\n ) => void | Promise<void>;\n};\n/**\n * 60-second time-weighted prices and recent history. Requires a secure client\n * and canonical lowercase USD pairs such as `btcusd`. The window is fixed;\n * returned events include `windowSeconds: 60` as metadata.\n */\nexport type CryptoTwapPriceSubscription = {\n topic: 'prices.crypto.twap';\n symbols: readonly string[];\n /** Requested vendor. Omit to follow the default; an unavailable pin may fall back. */\n provider?: PriceProvider;\n /**\n * Called once per symbol on acceptance and every reconnect, or immediately\n * when joining an accepted subscription. A thrown error or rejected promise\n * ends this handle with TransportError.\n */\n onSubscribed?: (\n confirmation: PriceSubscriptionConfirmation,\n ) => void | Promise<void>;\n};\n/** Equity updates and recent history. Requires a secure client. */\nexport type EquityPriceSubscription = {\n topic: 'prices.equity';\n symbol: string;\n types?: readonly ('subscribe' | 'update')[];\n /** Requested vendor. Omit to follow the default; an unavailable pin may fall back. */\n provider?: PriceProvider;\n /**\n * Called once per symbol on acceptance and every reconnect, or immediately\n * when joining an accepted subscription. A thrown error or rejected promise\n * ends this handle with TransportError.\n */\n onSubscribed?: (\n confirmation: PriceSubscriptionConfirmation,\n ) => void | Promise<void>;\n};\n/**\n * 60-second time-weighted equity prices and recent history. Requires a secure\n * client. Symbols such as `eurusd` and `usdjpy` are case-insensitive; prices\n * use the symbol's quote currency. Returned events include `windowSeconds: 60`.\n */\nexport type EquityTwapPriceSubscription = {\n topic: 'prices.equity.twap';\n symbol: string;\n /** Requested vendor. Omit to follow the default; an unavailable pin may fall back. */\n provider?: PriceProvider;\n /**\n * Called once per symbol on acceptance and every reconnect, or immediately\n * when joining an accepted subscription. A thrown error or rejected promise\n * ends this handle with TransportError.\n */\n onSubscribed?: (\n confirmation: PriceSubscriptionConfirmation,\n ) => void | Promise<void>;\n};\nexport type PriceSubscription =\n | CryptoPriceSubscription\n | CryptoTwapPriceSubscription\n | EquityPriceSubscription\n | EquityTwapPriceSubscription;\nexport type SecureSubscriptionSpec =\n | PublicSubscriptionSpec\n | UserSubscription\n | PriceSubscription;\n\n// Event unions, aligned with subscription specs.\nexport type PublicRealtimeEvent =\n | MarketEvent\n | SportsEvent\n | CommentsEvent\n | CryptoPricesEvent\n | EquityPricesEvent\n | PerpsMarketDataEvent;\n\nexport type SecureRealtimeEvent =\n | PublicRealtimeEvent\n | UserEvent\n | CryptoPriceEvent\n | CryptoTwapPriceEvent\n | EquityPriceEvent\n | EquityTwapPriceEvent;\n\n// Topics derived from event unions so bindings remain the single source of\n// truth for topic literals.\nexport type PublicRealtimeTopic = Prettify<PublicRealtimeEvent['topic']>;\nexport type SecureRealtimeTopic = Prettify<SecureRealtimeEvent['topic']>;\n\n// Spec-to-event mapping keyed by the shared `topic` discriminant. Each simple\n// topic resolves to a named event type so hover shows the alias rather than an\n// expanded structural shape. Market subscriptions are handled separately\n// because `customFeatureEnabled` contributes to the event union.\n//\n// Relies on `subscribe` declaring `TSubscriptions` with the `const` modifier\n// so that literal topics survive inference from object literals.\ntype EventByTopic = {\n 'prices.crypto': CryptoPriceEvent;\n 'prices.crypto.twap': CryptoTwapPriceEvent;\n 'prices.equity': EquityPriceEvent;\n 'prices.equity.twap': EquityTwapPriceEvent;\n comments: CommentsEvent;\n 'prices.crypto.binance': CryptoPricesBinanceEvent;\n 'prices.crypto.chainlink': CryptoPricesChainlinkEvent;\n 'prices.crypto.chainlink.twap': CryptoPricesChainlinkTwapEvent;\n 'prices.equity.pyth': EquityPricesEvent;\n user: UserEvent;\n sports: SportsEvent;\n 'perps.trades': PerpsTradeEvent;\n 'perps.bbo': PerpsBboEvent;\n 'perps.book': PerpsBookEvent;\n 'perps.candles': PerpsCandleEvent;\n 'perps.tickers': PerpsTickerEvent;\n 'perps.statistics': PerpsStatisticEvent;\n};\n\ntype EventForMarketSubscription<TSpec extends MarketSubscription> =\n 'customFeatureEnabled' extends keyof TSpec\n ? true extends TSpec['customFeatureEnabled']\n ? MarketEvent\n : StandardMarketEvent\n : StandardMarketEvent;\n\ntype EventForCryptoPricesChainlinkTwapSubscription<\n TSpec extends CryptoPricesChainlinkTwapSubscription,\n> = TSpec extends { windowSeconds: 30 }\n ? CryptoPricesChainlinkTwapThirtyEvent\n : TSpec extends { windowSeconds: 60 }\n ? CryptoPricesChainlinkTwapSixtyEvent\n : CryptoPricesChainlinkTwapEvent;\n\nexport type EventForSubscriptionSpec<TSpec extends SecureSubscriptionSpec> =\n TSpec extends MarketSubscription\n ? EventForMarketSubscription<TSpec>\n : TSpec extends CryptoPricesChainlinkTwapSubscription\n ? EventForCryptoPricesChainlinkTwapSubscription<TSpec>\n : TSpec extends { topic: infer TTopic extends keyof EventByTopic }\n ? EventByTopic[TTopic]\n : never;\n\nexport type EventForSubscriptionSpecs<\n TSubscriptions extends readonly SecureSubscriptionSpec[],\n> = EventForSubscriptionSpec<TSubscriptions[number]>;\n\nexport type SubscriptionHandle<TEvent> = {\n /**\n * Closes the subscription. Idempotent: subsequent calls resolve without\n * effect. Best-effort — errors from the first call propagate, later calls\n * are no-ops.\n */\n close(): Promise<void>;\n} & AsyncIterable<TEvent>;\n\nexport type SubscribeError =\n | TransportError\n | UserInputError\n | RequestRejectedError\n | ConnectionLostError;\nexport const SubscribeError = makeErrorGuard(\n TransportError,\n UserInputError,\n RequestRejectedError,\n ConnectionLostError,\n);\n\nenum SubscriptionTopic {\n Market = 'market',\n User = 'user',\n Sports = 'sports',\n Crypto = 'prices.crypto',\n Twap = 'prices.crypto.twap',\n Equity = 'prices.equity',\n EquityTwap = 'prices.equity.twap',\n Comments = 'comments',\n LegacyBinance = 'prices.crypto.binance',\n LegacyChainlink = 'prices.crypto.chainlink',\n LegacyTwap = 'prices.crypto.chainlink.twap',\n LegacyEquity = 'prices.equity.pyth',\n PerpsTrades = 'perps.trades',\n PerpsBbo = 'perps.bbo',\n PerpsBook = 'perps.book',\n PerpsCandles = 'perps.candles',\n PerpsTickers = 'perps.tickers',\n PerpsStatistics = 'perps.statistics',\n}\nconst SubscriptionTopicSchema = z.object({ topic: z.enum(SubscriptionTopic) });\nconst LegacyTwapSubscriptionSchema = z.object({\n topic: z.literal('prices.crypto.chainlink.twap'),\n windowSeconds: z.union([z.literal(30), z.literal(60)]),\n symbols: z.array(z.string()).optional(),\n});\n\nconst MarketSubscriptionSchema = z.union([\n z.object({\n topic: z.literal('market'),\n assetIds: z.array(z.string()),\n tokenIds: z.never().optional(),\n customFeatureEnabled: z.boolean().optional(),\n }),\n z.object({\n topic: z.literal('market'),\n assetIds: z.never().optional(),\n tokenIds: z.array(z.string()),\n customFeatureEnabled: z.boolean().optional(),\n }),\n]);\n\n/**\n * Starts one or more realtime subscriptions on this client.\n *\n * The `prices.crypto`, `prices.crypto.twap`, `prices.equity`, and\n * `prices.equity.twap` topics\n * require a secure client and explicit filters, and include history snapshots\n * and live updates. Legacy source-named topics retain their existing behavior.\n * These four topics include `source`, identifying the source of the update\n * or entire history batch, including empty batches. Unknown source names remain\n * strings. Crypto sources are constant; equity sources may change across\n * reconnects. Cached history starts fresh whenever the source changes.\n * These four topics accept an optional `provider` pin. Omit it to follow the\n * default. A pin may fall back or be ignored when selection is disabled;\n * `source` always identifies the actual producer. Different provider choices,\n * including omission, use separate connections, even if they serve the same source.\n * An optional `onSubscribed` callback reports the provider the server confirms,\n * on acceptance and after every reconnect.\n * Event `seq` values are scoped to one channel on one WebSocket connection and\n * reset after reconnecting. Subscriptions with more than 64 filters use\n * multiple connections, so their sequence values may interleave.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link SubscribeError}\n * Thrown when subscription input is invalid or a realtime subscription fails.\n *\n * @example\n * ```ts\n * const handle = await client.subscribe([\n * { topic: 'market', assetIds: ['123'] },\n * ]);\n *\n * for await (const event of handle) {\n * // event: StandardMarketEvent\n * }\n * ```\n */\nexport async function subscribe<\n const TSubscriptions extends readonly PublicSubscriptionSpec[],\n>(\n client: BasePublicClient,\n subscriptions: TSubscriptions,\n): Promise<SubscriptionHandle<EventForSubscriptionSpecs<TSubscriptions>>>;\nexport async function subscribe<\n const TSubscriptions extends readonly SecureSubscriptionSpec[],\n>(\n client: BaseSecureClient,\n subscriptions: TSubscriptions,\n): Promise<SubscriptionHandle<EventForSubscriptionSpecs<TSubscriptions>>>;\nexport async function subscribe(\n client: BaseClient,\n subscriptions: readonly SecureSubscriptionSpec[],\n): Promise<SubscriptionHandle<unknown>> {\n const validatedSubscriptions = subscriptions.map((subscription) => {\n parseUserInput(subscription, SubscriptionTopicSchema);\n switch (subscription.topic) {\n case 'prices.crypto':\n case 'prices.crypto.twap':\n case 'prices.equity':\n case 'prices.equity.twap':\n if (!client.isSecureClient())\n throw new UserInputError(\n 'This subscription requires a secure client.',\n );\n return parsePriceSubscription(subscription);\n case 'prices.crypto.chainlink.twap':\n parseUserInput(subscription, LegacyTwapSubscriptionSchema);\n break;\n case 'market':\n parseUserInput(subscription, MarketSubscriptionSchema);\n break;\n }\n return subscription;\n });\n\n const results = await Promise.allSettled(\n validatedSubscriptions.map(async (spec) => subscribeOne(client, spec)),\n );\n const handles = results.flatMap((result) =>\n result.status === 'fulfilled' ? [result.value] : [],\n );\n const failure = results.find((result) => result.status === 'rejected');\n if (failure?.status === 'rejected') {\n await Promise.allSettled(handles.map((handle) => handle.close()));\n throw failure.reason;\n }\n return mergedSubscription(handles);\n}\n\nfunction subscribeOne(\n client: BaseClient,\n spec: SecureSubscriptionSpec,\n): Promise<SubscriptionHandle<unknown>> {\n switch (spec.topic) {\n case 'market':\n return client.webSockets.clobMarket.subscribe(spec);\n case 'sports':\n return client.webSockets.sports.subscribe(spec);\n case 'prices.crypto':\n case 'prices.crypto.twap':\n case 'prices.equity':\n case 'prices.equity.twap':\n if (!client.isSecureClient())\n throw new UserInputError('This subscription requires a secure client.');\n return client.webSockets.realtime.subscribe(spec);\n case 'comments':\n case 'prices.crypto.binance':\n case 'prices.crypto.chainlink':\n case 'prices.crypto.chainlink.twap':\n case 'prices.equity.pyth':\n return client.webSockets.rtds.subscribe(spec);\n case 'perps.trades':\n case 'perps.bbo':\n case 'perps.book':\n case 'perps.candles':\n case 'perps.tickers':\n case 'perps.statistics':\n return client.webSockets.perpsSubscriptions.subscribe(spec);\n case 'user':\n invariant(\n client.isSecureClient(),\n \"A 'user' subscription requires a secure client instance.\",\n );\n return client.webSockets.clobUser.subscribe(spec);\n }\n}\n\nfunction mergedSubscription<TEvent>(\n children: readonly SubscriptionHandle<TEvent>[],\n): SubscriptionHandle<TEvent> {\n // Cache the in-flight or settled close so subsequent `close()` calls are\n // idempotent: concurrent callers share the same underlying teardown, and\n // callers after settlement observe the original result (including any\n // rejection) instead of re-invoking child teardowns.\n let closing: Promise<void> | undefined;\n\n async function close(): Promise<void> {\n if (closing === undefined) {\n closing = Promise.all(children.map((child) => child.close())).then(\n () => undefined,\n );\n }\n await closing;\n }\n\n const iterable = merge(...children);\n\n return {\n close,\n [Symbol.asyncIterator]() {\n return iterable[Symbol.asyncIterator]();\n },\n };\n}\n","import { PaginationCursorSchema } from '@kuest/bindings';\nimport {\n ListRelatedTagResourcesResponseSchema,\n ListRelatedTagsResponseSchema,\n ListTagsResponseSchema,\n type RelatedTag,\n type Tag,\n TagSchema,\n} from '@kuest/bindings/gamma';\nimport { z } from 'zod';\nimport type { BaseClient } from '../clients';\nimport {\n makeErrorGuard,\n RateLimitError,\n RequestAbortedError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n} from '../errors';\nimport { parseUserInput } from '../input';\nimport {\n decodeOffsetCursor,\n encodeOffsetCursor,\n PageSizeSchema,\n type Paginated,\n paginate,\n} from '../pagination';\nimport { parseRequestOptions, type RequestOptions } from '../request-options';\nimport { snakeCase, toSearchParams } from './params';\n\nconst ListTagsRequestSchema = z.object({\n ascending: z.boolean().optional(),\n cursor: PaginationCursorSchema.optional(),\n includeTemplate: z.boolean().optional(),\n isCarousel: z.boolean().optional(),\n locale: z.string().optional(),\n order: z.string().optional(),\n // Matches the upstream per-request limit cap.\n pageSize: PageSizeSchema.max(100).default(20),\n});\n\nconst FetchTagRequestSchema = z.union([\n z.object({\n id: z.string(),\n includeTemplate: z.boolean().optional(),\n locale: z.string().optional(),\n }),\n z.object({\n slug: z.string(),\n locale: z.string().optional(),\n }),\n]);\n\nconst RelatedTagsByIdRequestSchema = z.object({\n id: z.string(),\n omitEmpty: z.boolean().optional(),\n status: z.enum(['active', 'closed', 'all']).optional(),\n});\n\nconst RelatedTagsBySlugRequestSchema = z.object({\n slug: z.string(),\n});\n\nconst RelatedTagResourcesByIdRequestSchema = z.object({\n id: z.string(),\n locale: z.string().optional(),\n omitEmpty: z.boolean().optional(),\n status: z.enum(['active', 'closed', 'all']).optional(),\n});\n\nconst RelatedTagResourcesBySlugRequestSchema = z.object({\n locale: z.string().optional(),\n slug: z.string(),\n omitEmpty: z.boolean().optional(),\n status: z.enum(['active', 'closed', 'all']).optional(),\n});\n\nexport type ListTagsRequest = z.input<typeof ListTagsRequestSchema>;\nexport type FetchTagRequest = z.input<typeof FetchTagRequestSchema>;\nexport type FetchRelatedTagsRequest =\n | z.input<typeof RelatedTagsByIdRequestSchema>\n | z.input<typeof RelatedTagsBySlugRequestSchema>;\nexport type FetchRelatedTagResourcesRequest =\n | z.input<typeof RelatedTagResourcesByIdRequestSchema>\n | z.input<typeof RelatedTagResourcesBySlugRequestSchema>;\n\nexport type ListTagsError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const ListTagsError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Lists tags.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link ListTagsError}\n * Thrown on failure.\n *\n * @example\n * Fetch the first page of results:\n * ```ts\n * const result = listTags(client, {\n * includeTemplate: true,\n * pageSize: 12,\n * });\n *\n * const firstPage = await result.firstPage();\n *\n * // Optionally, fetch additional pages:\n * for await (const page of result.from(firstPage.nextCursor)) {\n * // page.items: Tag[]\n * }\n * ```\n *\n * @example\n * Loop through all pages with `for await`:\n * ```ts\n * const result = listTags(client, {\n * includeTemplate: true,\n * pageSize: 12,\n * });\n *\n * for await (const page of result) {\n * // page.items: Tag[]\n * }\n * ```\n */\nexport function listTags(\n client: BaseClient,\n request: ListTagsRequest = {},\n options: RequestOptions = {},\n): Paginated<Tag[]> {\n const requestOptions = parseRequestOptions(options);\n const { cursor, pageSize, ...params } = parseUserInput(\n request,\n ListTagsRequestSchema,\n );\n\n return paginate((cursor) => {\n const decoded = decodeOffsetCursor(cursor, pageSize);\n\n return client.gamma\n .get('/tags', {\n schema: ListTagsResponseSchema,\n ...requestOptions,\n params: toSearchParams(\n {\n ...params,\n limit: decoded.pageSize,\n offset: decoded.offset,\n },\n snakeCase(),\n ),\n })\n .then((tags) => {\n const hasMore = tags.length >= decoded.pageSize;\n\n return {\n items: tags,\n hasMore,\n nextCursor: hasMore\n ? encodeOffsetCursor({\n offset: decoded.offset + decoded.pageSize,\n pageSize: decoded.pageSize,\n })\n : undefined,\n };\n });\n }, cursor);\n}\n\nexport type FetchTagError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchTagError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Fetches a tag by id or slug.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link FetchTagError}\n * Thrown on failure.\n *\n * @example\n * ```ts\n * const tag = await fetchTag(client, {\n * slug: 'politics',\n * locale: 'en',\n * });\n *\n * // tag === Tag\n * ```\n */\nexport async function fetchTag(\n client: BaseClient,\n request: FetchTagRequest,\n options: RequestOptions = {},\n): Promise<Tag> {\n const requestOptions = parseRequestOptions(options);\n const params = parseUserInput(request, FetchTagRequestSchema);\n\n if ('id' in params) {\n return client.gamma.get(`tags/${params.id}`, {\n schema: TagSchema,\n ...requestOptions,\n params: toSearchParams(\n {\n includeTemplate: params.includeTemplate,\n locale: params.locale,\n },\n snakeCase(),\n ),\n });\n }\n\n return client.gamma.get(`tags/slug/${params.slug}`, {\n schema: TagSchema,\n ...requestOptions,\n params: toSearchParams(\n {\n locale: params.locale,\n },\n snakeCase(),\n ),\n });\n}\n\nexport type FetchRelatedTagsError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchRelatedTagsError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Fetches related tag relationships by id or slug.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link FetchRelatedTagsError}\n * Thrown on failure.\n *\n * @example\n * ```ts\n * const relatedTags = await fetchRelatedTags(client, {\n * id: '42',\n * status: 'active',\n * omitEmpty: true,\n * });\n *\n * // relatedTags: RelatedTag[]\n * ```\n */\nexport async function fetchRelatedTags(\n client: BaseClient,\n request: FetchRelatedTagsRequest,\n options: RequestOptions = {},\n): Promise<RelatedTag[]> {\n const requestOptions = parseRequestOptions(options);\n if ('id' in request) {\n const params = parseUserInput(request, RelatedTagsByIdRequestSchema);\n\n return client.gamma.get(`tags/${params.id}/related-tags`, {\n schema: ListRelatedTagsResponseSchema,\n ...requestOptions,\n params: toSearchParams(\n {\n omitEmpty: params.omitEmpty,\n status: params.status,\n },\n snakeCase(),\n ),\n });\n }\n\n const params = parseUserInput(request, RelatedTagsBySlugRequestSchema);\n\n return client.gamma.get(`tags/slug/${params.slug}/related-tags`, {\n ...requestOptions,\n schema: ListRelatedTagsResponseSchema,\n });\n}\n\nexport type FetchRelatedTagResourcesError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchRelatedTagResourcesError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Fetches resources linked from related tag relationships by id or slug.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link FetchRelatedTagResourcesError}\n * Thrown on failure.\n *\n * @example\n * ```ts\n * const relatedResources = await fetchRelatedTagResources(client, {\n * slug: 'election',\n * status: 'active',\n * omitEmpty: true,\n * });\n *\n * // relatedResources: Tag[]\n * ```\n */\nexport async function fetchRelatedTagResources(\n client: BaseClient,\n request: FetchRelatedTagResourcesRequest,\n options: RequestOptions = {},\n): Promise<Tag[]> {\n const requestOptions = parseRequestOptions(options);\n if ('id' in request) {\n const params = parseUserInput(\n request,\n RelatedTagResourcesByIdRequestSchema,\n );\n\n return client.gamma.get(`tags/${params.id}/related-tags/tags`, {\n schema: ListRelatedTagResourcesResponseSchema,\n ...requestOptions,\n params: toSearchParams(\n {\n locale: params.locale,\n omitEmpty: params.omitEmpty,\n status: params.status,\n },\n snakeCase(),\n ),\n });\n }\n\n const params = parseUserInput(\n request,\n RelatedTagResourcesBySlugRequestSchema,\n );\n\n return client.gamma.get(`tags/slug/${params.slug}/related-tags/tags`, {\n schema: ListRelatedTagResourcesResponseSchema,\n ...requestOptions,\n params: toSearchParams(\n {\n locale: params.locale,\n omitEmpty: params.omitEmpty,\n status: params.status,\n },\n snakeCase(),\n ),\n });\n}\n","import { PaginationCursorSchema } from '@kuest/bindings';\nimport { ListTeamsResponseSchema, type Team } from '@kuest/bindings/gamma';\nimport { z } from 'zod';\nimport type { BaseClient } from '../clients';\nimport {\n makeErrorGuard,\n RateLimitError,\n RequestAbortedError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n} from '../errors';\nimport { parseUserInput } from '../input';\nimport {\n decodeOffsetCursor,\n encodeOffsetCursor,\n PageSizeSchema,\n type Paginated,\n paginate,\n} from '../pagination';\nimport { parseRequestOptions, type RequestOptions } from '../request-options';\nimport { snakeCase, toSearchParams } from './params';\n\nconst ListTeamsRequestSchema = z.object({\n abbreviation: z.array(z.string()).optional(),\n ascending: z.boolean().optional(),\n cursor: PaginationCursorSchema.optional(),\n league: z.array(z.string()).optional(),\n name: z.array(z.string()).optional(),\n order: z.string().optional(),\n // Matches the upstream per-request limit cap.\n pageSize: PageSizeSchema.max(100).default(20),\n providerId: z.array(z.number().int()).optional(),\n});\n\nexport type ListTeamsRequest = z.input<typeof ListTeamsRequestSchema>;\n\nexport type ListTeamsError =\n | RequestAbortedError\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const ListTeamsError = makeErrorGuard(\n RequestAbortedError,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Lists teams.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link ListTeamsError}\n * Thrown on failure.\n *\n * @example\n * Fetch the first page of results:\n * ```ts\n * const result = listTeams(client, {\n * league: ['NBA'],\n * pageSize: 10,\n * });\n *\n * const firstPage = await result.firstPage();\n *\n * // Optionally, fetch additional pages:\n * for await (const page of result.from(firstPage.nextCursor)) {\n * // page.items: Team[]\n * }\n * ```\n *\n * @example\n * Loop through all pages with `for await`:\n * ```ts\n * const result = listTeams(client, {\n * league: ['NBA'],\n * pageSize: 10,\n * });\n *\n * for await (const page of result) {\n * // page.items: Team[]\n * }\n * ```\n */\nexport function listTeams(\n client: BaseClient,\n request: ListTeamsRequest = {},\n options: RequestOptions = {},\n): Paginated<Team[]> {\n const requestOptions = parseRequestOptions(options);\n const { cursor, pageSize, ...params } = parseUserInput(\n request,\n ListTeamsRequestSchema,\n );\n\n return paginate((cursor) => {\n const decoded = decodeOffsetCursor(cursor, pageSize);\n\n return client.gamma\n .get('/teams', {\n schema: ListTeamsResponseSchema,\n ...requestOptions,\n params: toSearchParams(\n {\n ...params,\n limit: decoded.pageSize,\n offset: decoded.offset,\n },\n snakeCase({ providerId: 'provider_id' }),\n ),\n })\n .then((teams) => {\n const hasMore = teams.length >= decoded.pageSize;\n\n return {\n items: teams,\n hasMore,\n nextCursor: hasMore\n ? encodeOffsetCursor({\n offset: decoded.offset + decoded.pageSize,\n pageSize: decoded.pageSize,\n })\n : undefined,\n };\n });\n }, cursor);\n}\n","import {\n FetchTokenReferencesResponseSchema,\n type TokenReference,\n} from '@kuest/bindings/data';\nimport { z } from 'zod';\nimport type { BaseClient } from '../clients';\nimport {\n makeErrorGuard,\n RateLimitError,\n RequestAbortedError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n} from '../errors';\nimport { parseUserInput } from '../input';\nimport { parseRequestOptions, type RequestOptions } from '../request-options';\nimport { toDataSearchParams } from './params';\n\nconst AssetSelectorsSchema = z\n .array(z.string().trim())\n .transform((values) => values.filter((value) => value !== ''))\n .pipe(\n z.array(\n z\n .string()\n .regex(/^[0-9]+$/)\n .transform((value) => value.replace(/^0+/, '') || '0')\n .refine(\n (value) => value.length <= 78,\n 'At most 78 decimal digits after leading zeros are stripped',\n ),\n ),\n )\n .transform((values) => [...new Set(values)])\n .refine(\n (values) => values.length > 0 && values.length <= 50,\n 'Provide between 1 and 50 distinct asset IDs',\n );\n\nconst ConditionSelectorsSchema = z\n .array(z.string().trim())\n .transform((values) => values.filter((value) => value !== ''))\n .pipe(\n z.array(\n z\n .string()\n .regex(/^0x(?:[0-9a-fA-F]{62}|[0-9a-fA-F]{64})$/)\n .transform((value) => value.toLowerCase()),\n ),\n )\n .transform((values) => [...new Set(values)])\n .refine(\n (values) => values.length > 0 && values.length <= 10,\n 'Provide between 1 and 10 distinct condition IDs',\n );\n\nconst FetchTokenReferencesRequestSchema = z.union([\n z.object({\n assetIds: AssetSelectorsSchema,\n conditionIds: z.never().optional(),\n }),\n z.object({\n assetIds: z.never().optional(),\n conditionIds: ConditionSelectorsSchema,\n }),\n]);\n\n/** Select outcome assets by decimal IDs or by condition selectors. */\nexport type FetchTokenReferencesRequest =\n | { assetIds: string[]; conditionIds?: never }\n | { assetIds?: never; conditionIds: string[] };\n\nexport type FetchTokenReferencesError =\n | RateLimitError\n | RequestAbortedError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchTokenReferencesError = makeErrorGuard(\n RateLimitError,\n RequestAbortedError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Fetches reference and settlement metadata for outcome assets.\n *\n * Provide exactly one selector family: up to 50 distinct decimal `assetIds`,\n * or up to 10 distinct `conditionIds` containing 31-byte or 32-byte hex values.\n * Elements are trimmed, blanks dropped, and duplicates removed in first-seen\n * order. Decimal IDs have leading zeros stripped and at most 78 remaining\n * digits. Conditions are lowercased without changing their width.\n *\n * Returns a direct collection. Unknown selectors contribute no rows; asset\n * lookups retain request order and condition groups retain server order.\n * Overlapping condition selectors can repeat assets. Settlement metadata and\n * outcome labels can lag by up to a minute. Transient rate limits are retried\n * automatically.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link FetchTokenReferencesError}\n * Thrown on failure.\n *\n * @example\n * ```ts\n * const references = await fetchTokenReferences(client, { assetIds: ['123'] });\n * ```\n */\nexport async function fetchTokenReferences(\n client: BaseClient,\n request: FetchTokenReferencesRequest,\n options: RequestOptions = {},\n): Promise<TokenReference[]> {\n const requestOptions = parseRequestOptions(options);\n const { assetIds, conditionIds } = parseUserInput(\n request,\n FetchTokenReferencesRequestSchema,\n );\n return client.data.get('/v2/tokens', {\n schema: FetchTokenReferencesResponseSchema,\n ...requestOptions,\n params: toDataSearchParams({\n tokenId: assetIds,\n condition: conditionIds,\n }),\n });\n}\n","import { type EvmAddress, EvmAddressSchema } from '@kuest/bindings';\nimport { WalletType } from '@kuest/bindings/gamma';\nimport type { EvmSignature } from '@kuest/types';\nimport { z } from 'zod';\nimport { erc20TransferCall } from '../abis';\nimport type { BaseSecureClient } from '../clients';\nimport {\n CancelledSigningError,\n makeErrorGuard,\n RateLimitError,\n RequestRejectedError,\n SigningError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n} from '../errors';\nimport { parseUserInput } from '../input';\nimport {\n expectTransactionHandle,\n type SignerTransactionRequest,\n type TransactionHandle,\n} from '../types';\nimport {\n completeWith,\n type SendErc20TransferTransactionRequest,\n signerTransactionRequest,\n} from '../workflow';\nimport {\n GaslessTransactionMetadataSchema,\n type GaslessWorkflowRequest,\n prepareGaslessTransaction,\n} from './gasless';\n\nexport type Erc20TransferWorkflowRequest =\n | GaslessWorkflowRequest\n | SendErc20TransferTransactionRequest;\n\nexport type Erc20TransferWorkflow = AsyncGenerator<\n Erc20TransferWorkflowRequest,\n TransactionHandle,\n EvmAddress | EvmSignature | TransactionHandle\n>;\n\nconst PrepareErc20TransferRequestSchema = z.object({\n amount: z.bigint(),\n metadata: GaslessTransactionMetadataSchema.optional(),\n recipientAddress: EvmAddressSchema,\n tokenAddress: EvmAddressSchema,\n});\n\nexport type PrepareErc20TransferRequest = z.input<\n typeof PrepareErc20TransferRequestSchema\n>;\n\nexport type PrepareErc20TransferError = UserInputError;\nexport const PrepareErc20TransferError = makeErrorGuard(UserInputError);\n\n/**\n * Starts an ERC-20 transfer workflow.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @example\n * ```ts\n * const workflow = await prepareErc20Transfer(client, {\n * amount: 1n,\n * recipientAddress: client.account.signer,\n * tokenAddress: client.environment.contracts.collateralToken,\n * });\n * ```\n *\n * @throws {@link PrepareErc20TransferError}\n * Thrown on failure.\n */\nexport async function prepareErc20Transfer(\n client: BaseSecureClient,\n request: PrepareErc20TransferRequest,\n): Promise<Erc20TransferWorkflow> {\n const params = parseUserInput(request, PrepareErc20TransferRequestSchema);\n\n return async function* (): Erc20TransferWorkflow {\n if (client.account.walletType === WalletType.EOA) {\n return expectTransactionHandle(\n yield sendErc20TransferTransaction(\n signerTransactionRequest(\n client.environment.chainId,\n erc20TransferCall(\n params.tokenAddress,\n params.recipientAddress,\n params.amount,\n ),\n ),\n ),\n );\n }\n\n return yield* await prepareGaslessTransaction(client, {\n calls: [\n erc20TransferCall(\n params.tokenAddress,\n params.recipientAddress,\n params.amount,\n ),\n ],\n metadata:\n params.metadata ??\n `Transfer ${params.amount} of ${params.tokenAddress} to ${params.recipientAddress}`,\n });\n }.call(null);\n}\n\nexport type TransferErc20Error =\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError\n | CancelledSigningError\n | SigningError;\nexport const TransferErc20Error = makeErrorGuard(\n CancelledSigningError,\n RateLimitError,\n RequestRejectedError,\n SigningError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Transfers ERC-20 tokens from the authenticated account.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link TransferErc20Error}\n * Thrown on failure.\n */\nexport function transferErc20(\n client: BaseSecureClient,\n request: PrepareErc20TransferRequest,\n): Promise<TransactionHandle> {\n return prepareErc20Transfer(client, request).then(\n completeWith(client.signer),\n );\n}\n\nfunction sendErc20TransferTransaction(\n request: SignerTransactionRequest,\n): SendErc20TransferTransactionRequest {\n return {\n kind: 'sendErc20TransferTransaction',\n request,\n };\n}\n"]}
|