@polymarket/client 0.8.1 → 0.10.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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/input.ts","../src/pagination.ts","../src/response.ts","../src/rpc.ts","../src/wallet.ts","../src/actions/exchange-asset.ts","../src/actions/params.ts","../src/actions/account.ts","../src/retry.ts","../src/actions/activity.ts","../src/abis.ts","../src/types.ts","../src/workflow.ts","../src/actions/gasless.ts","../src/actions/approvals.ts","../src/actions/auth.ts","../src/actions/builders.ts","../src/actions/clob.ts","../src/actions/collateral-return.ts","../src/actions/comments.ts","../src/polymarket-url.ts","../src/actions/events.ts","../src/actions/leaderboards.ts","../src/actions/market-clarifications.ts","../src/actions/markets.ts","../src/actions/orders/restrictions.ts","../src/actions/orders/cancel.ts","../src/actions/orders/asset.ts","../src/actions/orders/estimate.ts","../src/actions/orders/post.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/rate-limit.ts","../src/ServiceClient.ts","../src/websockets/heartbeat.ts","../src/websockets/lifecycle.ts","../src/websockets/perps/actions/account.ts","../src/websockets/perps/actions/trading.ts","../src/websockets/perps/session.ts","../src/actions/perps.ts","../src/actions/portfolio.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/subscriptions.ts","../src/actions/tags.ts","../src/actions/teams.ts","../src/actions/transfers.ts"],"names":["parseUserInput","input","schema","result","UserInputError","PageSizeSchema","z","OffsetCursorStateSchema","paginate","fetchPage","initialCursor","emptyItems","createEmptyPaginator","createPaginator","cursor","unwrap","nextCursor","currentCursor","page","encodeOffsetCursor","state","toPaginationCursor","decodeOffsetCursor","pageSize","error","validateWith","response","ResultAsync","UnexpectedResponseError","payload","parseResponse","readBlob","endpoint","ok","err","JsonRpcClient","#url","url","request","#post","RequestRejectedError","isRpcHexString","requests","#ethCallBatchWithSplit","call","toRpcQuantity","expectRpcHexResult","#postEthCallBatch","midpoint","left","right","responses","#postBatch","index","responsesById","_","id","json","ky","TransportError","body","isJsonRpcResponse","value","isJsonRpcContractRevert","isJsonRpcError","message","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","toSearchParams","params","mappings","isSnakeCaseSearchParamMappings","toSnakeCaseSearchParams","searchParams","paramKey","searchParamKey","isSearchParamArray","item","toSearchParamValue","snakeCase","exceptions","toLegacyDataSearchParams","key","EpochSecondsLikeSchema","TimeWindowSchema","PositiveInt32EventIdSchema","EventIdSchema","eventId","distinctIdList","max","ids","toDataSearchParams","toSnakeCase","character","FetchClosedOnlyModeError","makeErrorGuard","RateLimitError","SigningError","fetchClosedOnlyMode","client","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","FetchTotalEarningsForUserForDayError","fetchTotalEarningsForUserForDay","TotalUserEarningsResponseSchema","ListUserEarningsAndMarketsConfigRequestSchema","ListUserEarningsAndMarketsConfigError","listUserEarningsAndMarketsConfig","UserRewardsEarningsPageSchema","FetchRewardPercentagesError","fetchRewardPercentages","RewardsPercentagesSchema","withRateLimitRetry","run","options","retries","maxDelaySeconds","sleep","delay","attempt","remaining","errAsync","delaySeconds","ListTradesRequestSchema","EvmAddressSchema","TradeFilterTypeSchema","ConditionIdSchema","OrderSideSchema","ListTradesError","listTrades","window","ListTradesResponseSchema","ListActivityRequestSchema","ActivityTypeSchema","SortDirectionSchema","ListActivityError","listActivity","ListActivityResponseSchema","ListComboActivityRequestSchema","ComboConditionIdSchema","ListComboActivityError","listComboActivity","ListComboActivityResponseSchema","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","ROUTER_SPLIT_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","RouterSplitCallError","routerSplitCall","routerAddress","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","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","RelayerExecuteParamsSchema","FetchGaslessTransactionRequestSchema","TransactionIdSchema","IsWalletDeployedRequestSchema","IsWalletDeployedError","isWalletDeployed","resolveWalletDeploymentTarget","RelayerDeployedResponseSchema","deployed","GaslessTransactionMetadataSchema","GASLESS_SUBMIT_RETRY_ATTEMPTS","DeployDepositWalletError","deployDepositWallet","executeGasless","fetchTransaction","GaslessTransactionSchema","TransactionCallSchema","isHexString","PrepareGaslessTransactionRequestSchema","val","expectNonEmptyArray","PrepareGaslessTransactionError","prepareGaslessTransaction","prepareProxyWalletGaslessTransaction","prepareDepositWalletGaslessTransaction","prepareSafeWalletGaslessTransaction","isRetryableGaslessSubmitError","buildProxyWalletExecuteRequest","metadata","executeParams","relayerFee","gasPrice","gasLimit","relayHub","relay","hash","buildProxyTransactionHash","expectEvmSignature","signGaslessMessage","extractOnChainNonceFromSubmitError","buildDepositWalletExecuteRequest","nonce","resignDepositWalletExecuteRequest","depositWalletCalls","toDepositWalletCall","deadline","signGaslessTypedData","createDepositWalletBatchTypedDataPayload","buildSafeWalletExecuteRequest","transaction","aggregateSafeTransactionCalls","safePayload","createSafeTypedDataPayload","OxTypedData","packSafeSignature","createSafeSignatureParams","RelayerExecuteRequestSchema","RelayerExecuteResponseSchema","GaslessTransactionHandle","match","submittedNonce","onChainNonce","safeMultisend","operation","from","prefixlessSignature","v","packedV","WaitForGaslessTransactionError","#client","pollCount","RelayerTransactionState","transactionHash","PrepareErc20ApprovalRequestSchema","PrepareErc20ApprovalError","prepareErc20Approval","sendErc20ApprovalTransaction","ApproveErc20Error","approveErc20","PrepareErc1155ApprovalForAllRequestSchema","PrepareErc1155ApprovalForAllError","prepareErc1155ApprovalForAll","sendErc1155ApprovalForAllTransaction","ApproveErc1155ForAllError","approveErc1155ForAll","PrepareTradingApprovalsError","FetchTradingApprovalsStateRequestSchema","FetchTradingApprovalsStateError","fetchTradingApprovalsState","user","missing","resolveMissingTradingApprovals","prepareTradingApprovals","missingApprovals","erc20ApprovalCalls","approval","erc1155ApprovalCalls","SetupTradingApprovalsError","setupTradingApprovals","requiredApprovals","getRequiredTradingApprovals","checkCalls","results","erc20Results","erc1155Results","contracts","CreateApiKeyError","createApiKey","toL1Headers","ApiKeyCredsSchema","DeriveApiKeyError","deriveApiKey","CreateOrDeriveApiKeyError","createOrDeriveApiKey","FetchApiKeysError","fetchApiKeys","ApiKeysResponseSchema","DeleteApiKeyError","deleteApiKey","CreateBuilderApiKeyError","createBuilderApiKey","BuilderApiKeyCredsSchema","FetchBuilderApiKeysError","fetchBuilderApiKeys","BuilderApiKeysResponseSchema","RevokeBuilderApiKeyError","revokeBuilderApiKey","auth","ListBuilderTradesRequestFieldsSchema","BuilderCodeSchema","ListBuilderTradesRequestSchema","ListBuilderTradesError","listBuilderTrades","PaginatedBuilderTradesSchema","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","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","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","ListCommentsRequestSchema","SeriesIdSchema","CommentParentEntityTypeSchema","FetchCommentsByIdRequestSchema","CommentIdSchema","ListCommentsByUserAddressRequestSchema","ListCommentsError","listComments","decoded","ListCommentsResponseSchema","comments","hasMore","FetchCommentsByIdError","fetchCommentsById","ListCommentsByUserAddressError","listCommentsByUserAddress","address","parsePolymarketSlugUrl","rawUrl","resource","cause","actualResource","slug","extraSegments","marketSlug","ListEventsRequestSchema","IsoDateTimeStringSchema","IsoCalendarDateStringSchema","FetchEventRequestSchema","FetchEventTagsRequestSchema","ListEventsError","listEvents","toEventsSearchParams","ListEventsKeysetResponseSchema","FetchEventError","fetchEvent","toFetchEventByIdSearchParams","EventSchema","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","ListMarketsRequestSchema","PositionIdSchema","FetchMarketByIdRequestSchema","FetchMarketBySlugRequestSchema","FetchMarketByUrlRequestSchema","FetchMarketRequestSchema","FetchMarketTagsRequestSchema","ListMarketsError","listMarkets","toMarketsSearchParams","ListMarketsKeysetResponseSchema","ListComboMarketsRequestSchema","ListComboMarketsError","listComboMarkets","toComboMarketsSearchParams","ListComboMarketsResponseSchema","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","mapTradingRestrictionError","restriction","parseTradingRestriction","CancelOrderRequestSchema","CancelOrdersRequestSchema","CancelMarketOrdersRequestFieldsSchema","CancelMarketOrdersRequestSchema","CancelOrderError","cancelOrder","cancel","CancelOrdersError","cancelOrders","CancelAllError","cancelAll","CancelMarketOrdersError","cancelMarketOrders","path","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","MAX_CLOB_ORDER_SALT","ClobOrderSaltSchema","isClobSafeSalt","PostOrderInputSchema","PostOrdersRequestSchema","PostOrderError","PostOrdersError","postOrder","order","createSendOrderPayload","OrderResponseSchema","postOrders","orders","OrderResponsesSchema","salt","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","parsed","FIXED_SCALE","MAX_PRICE_DRIFT","FIXED_DECIMALS","MAX_SCALED_AMOUNT_DRIFT","toScaledAmount","scaled","candidate","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","market","#resolveMarket","builderCode","readThrough","#fetchMarket","#assertMarketContainsAsset","resolvedEntry","assetIds","entries","ttlMs","load","cached","entry","cachesByClient","resolveOrderMarketMetadata","resolveCache","fetchCurrentOrderMarketMetadata","resolveBuilderTakerFeeRate","existing","created","MINIMUM_LIMIT_ORDER_EXPIRATION_SECONDS","BasePrepareLimitOrderParamsSchema","PrepareLimitOrderParamsSchema","minimumExpiration","prepareLimitOrderDraft","resolveLimitOrderContext","amounts","buildLimitOrderContext","currentMetadata","validateExactPriceOnTickGrid","BasePrepareMarketOrderParamsSchema","PrepareMarketBuyOrderParamsSchema","PrepareMarketSellOrderParamsSchema","PrepareMarketOrderParamsSchema","prepareMarketOrderDraft","resolveMarketOrderContext","hasProtectedPrice","resolveProtectedMarketOrderContext","resolveUnprotectedMarketOrderContext","builderTakerFeeRate","resolveFeeInputs","buildProtectedBuyMarketOrderContext","currentMarket","buildProtectedMarketOrderContext","maxSpend","resolveProtectedMarketOrderPrice","priceNumber","adjustBuyAmountForFees","feeInputs","resolvedFeeInputs","resolveUnprotectedMarketOrderAmount","validateProtectedPriceOnTickGrid","field","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","domain","protocolVersionHash","protocolVersion","createUnsignedOrder","identity","generateOrderSalt","createSignedOrder","_chainId","_exchangeAddress","_protocolVersion","signedFields","bytes","byte","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","resolveCurrentAllowance","assetType","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","parseRateLimitHeaders","headers","bucket","parseIntegerHeader","reset","tier","parseTextHeader","warning","format","ServiceClient","#headers","#resolveHeaders","#onRateLimitUpdate","root","resolveHeaders","onRateLimitUpdate","#request","#normalizePath","#toResult","#send","#createRequest","resolvedHeaders","#mergeHeaders","#serializeJson","sources","source","promise","rateLimitBucket","rateLimit","#notifyRateLimitUpdate","retryAfter","#parseRetryAfterHeader","code","retryAfterSeconds","#extractResponseError","update","contentType","text","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","now","RtdsWebSocketHeartbeat","#lastMessageAt","SportsWebSocketHeartbeat","#lastPingAt","PerpsWebSocketHeartbeat","HEARTBEAT_WATCHDOG_INTERVAL_MS","RECONNECT_BASE_DELAY_MS","RECONNECT_MAX_DELAY_MS","ReconnectScheduler","#attempt","reconnectDelay","setNonBlockingTimeout","#reconnect","WebSocketConnection","#heartbeat","#socket","#connecting","#watchdog","#clearCurrentSocket","connecting","#open","#sendRaw","socket","#takeCurrent","#stopHeartbeat","resolve","reject","createWebSocket","onOpen","onOpenError","#markOpen","#startHeartbeat","event","raw","heartbeat","exponentialDelay","ONE_DAY_MS","NINETY_DAYS_MS","TimestampInputSchema","PerpsHistoryRequestBaseSchema","PerpsIntervalHistoryRequestBaseSchema","PerpsPnlIntervalSchema","PerpsDescendingAccountHistoryKindSchema","PerpsAscendingAccountHistoryKindSchema","PerpsDescendingAccountCursorStateSchema","PerpsInstrumentIdSchema","PerpsDepositStatusSchema","PerpsWithdrawalStatusSchema","PerpsAscendingAccountCursorStateSchema","fetchPerpsBalances","api","FetchPerpsBalancesResponseSchema","fetchPerpsPortfolio","FetchPerpsPortfolioResponseSchema","fetchPerpsStats","FetchPerpsAccountStatsResponseSchema","fetchPerpsAutoCancelStatus","FetchPerpsAutoCancelStatusResponseSchema","FetchPerpsAccountConfigRequestSchema","fetchPerpsAccountConfig","toPerpsSearchParams","FetchPerpsAccountConfigResponseSchema","FetchPerpsOpenOrdersRequestSchema","fetchPerpsOpenOrders","FetchPerpsOpenOrdersResponseSchema","FetchPerpsOrdersRequestInputSchema","PerpsOrderIdSchema","PerpsClientOrderIdSchema","FetchPerpsOrdersRequestSchema","fetchPerpsOrders","FetchPerpsOrdersResponseSchema","ListPerpsFillsRequestSchema","PerpsSortDirectionSchema","listPerpsFills","ListPerpsFillsResponseSchema","last","ListPerpsFundingPaymentsInitialRequestSchema","ListPerpsFundingPaymentsCursorRequestSchema","ListPerpsFundingPaymentsRequestSchema","toPerpsHistoryParams","listPerpsFundingPayments","pageCursor","decodePerpsAccountCursor","_kind","_seenKeys","seenKeys","ListPerpsFundingPaymentsResponseSchema","items","payment","toPerpsDescendingAccountPage","ListPerpsDepositsInitialRequestSchema","ListPerpsDepositsCursorRequestSchema","ListPerpsDepositsRequestSchema","listPerpsDeposits","ListPerpsDepositsResponseSchema","deposit","latestPerpsDepositTimestamp","ListPerpsWithdrawalsInitialRequestSchema","ListPerpsWithdrawalsCursorRequestSchema","ListPerpsWithdrawalsRequestSchema","listPerpsWithdrawals","ListPerpsWithdrawalsResponseSchema","withdrawal","latestPerpsWithdrawalTimestamp","ListPerpsEquityHistoryInitialRequestSchema","ListPerpsEquityHistoryCursorRequestSchema","ListPerpsEquityHistoryRequestSchema","toPerpsIntervalHistoryParams","listPerpsEquityHistory","ListPerpsEquityHistoryResponseSchema","encodePerpsAccountCursor","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","endTimestamp","seen","PerpsOrderBaseInputSchema","PerpsDecimalInputSchema","PerpsPlaceGtcOrderRequestSchema","PerpsTimeInForce","PerpsPlaceIocOrderRequestSchema","PerpsPlaceFokOrderRequestSchema","PerpsOrderRequestSchema","PerpsTpSlTriggerSchema","PerpsPositionTpSlTriggerSchema","PerpsTpSlPairSchema","PostPerpsOrdersRequestSchema","postPerpsOrders","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","CancelPerpsOrderRequestSchema","cancelPerpsOrder","cancelPerpsOrders","CancelPerpsOrdersRequestSchema","PerpsCancelOrderResultSchema","CancelAllPerpsOrdersRequestSchema","cancelAllOrders","op","PerpsCancelAllOrdersResponseSchema","MINIMUM_AUTO_CANCEL_DELAY_MILLISECONDS","ArmPerpsAutoCancelRequestSchema","minimumCancelAt","ArmPerpsAutoCancelError","AutoCancelDailyLimitError","AUTO_CANCEL_DAILY_LIMIT_REACHED","armPerpsAutoCancel","signCommand","command","toPerpsCommandBodyOp","PerpsAutoCancelResponseSchema","DisarmPerpsAutoCancelRequestSchema","disarmPerpsAutoCancel","UpdatePerpsLeverageRequestSchema","UpdatePerpsLeverageError","updatePerpsLeverage","PerpsUpdateLeverageResultSchema","UpdatePerpsMarginRequestSchema","UpdatePerpsMarginError","updatePerpsMargin","ack","PerpsCommandAckSchema","clientOrderId","portfolio","instrumentId","sign","decimalSign","trimmed","digits","type","group","withOptionalGroup","toPerpsOrderBody","time","leverage","crossMargin","toPerpsTpSlTriggerBody","trigger","AUTH_TIMEOUT_MS","COMMAND_TIMEOUT_MS","ORDER_PLACEMENT_UPDATE_TIMEOUT_MS","PERPS_SESSION_CHANNELS","SERVER_RESYNC_CHANNELS","PerpsResponseEnvelopeSchema","PerpsSessionAckSchema","PerpsSession","#api","#chainId","#onClose","#wsUrl","#connection","#queue","pushable","#pending","#eventWaiters","#reconnectScheduler","#sequences","#nextRequestId","#closing","#authenticatedHeaders","#connect","#shutdown","expiresAt","#createSignedCommand","emitResync","#handleConnectionLost","#handleMessage","#authenticate","#subscribe","#sendRequest","responseSchema","bodyOp","predicate","waiter","#createEventWaiter","#startEventWaiterTimeout","commandResponse","#removeEventWaiter","randomUint32","timestamp","frame","timeoutMessage","createPendingResponse","timeout","#rejectPending","#rejectEventWaiters","rawMessage","#handleResponse","PerpsNotificationsResyncFrameSchema","PerpsSessionUpdateEventSchema","#pushSequenceGapIfNeeded","#emitEvent","errorAckFrom","isRejectedPerpsAck","previousSequence","#resolveEventWaiters","resolvePromise","rejectPromise","PerpsPublicReadError","FetchPerpsInstrumentsRequestSchema","PerpsInstrumentCategorySchema","FetchPerpsInstrumentsError","fetchPerpsInstruments","FetchPerpsInstrumentsResponseSchema","FetchPerpsTickerRequestSchema","FetchPerpsTickerError","fetchPerpsTicker","ticker","fetchPerpsTickers","FetchPerpsTickersRequestSchema","FetchPerpsTickersError","query","tickers","statistics","FetchPerpsTickersResponseSchema","FetchPerpsStatisticsResponseSchema","statisticsByInstrument","statistic","PerpsBookDepthSchema","FetchPerpsBookRequestSchema","FetchPerpsBookError","fetchPerpsBook","PerpsBookSchema","ListPerpsCandlesInitialRequestSchema","PerpsKlineIntervalSchema","ListPerpsCandlesCursorRequestSchema","ListPerpsCandlesRequestSchema","toPerpsCandlesParams","ListPerpsCandlesError","listPerpsCandles","createInitialPerpsCandlesCursor","decodePerpsCandlesCursor","FetchPerpsCandlesResponseSchema","encodePerpsCursor","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","decodePerpsCursor","PrivateKeySchema","isPrivateKey","PerpsCredentialsSchema","DEFAULT_PERPS_CREDENTIAL_EXPIRES_IN","CreatePerpsSessionRequestSchema","ResumePerpsSessionRequestSchema","OpenPerpsSessionRequestSchema","RevokePerpsCredentialsRequestInputSchema","RevokePerpsCredentialsRequestSchema","PerpsBaseUnitAmountSchema","DepositToPerpsRequestSchema","WithdrawFromPerpsRequestSchema","OpenPerpsSessionError","RevokePerpsCredentialsError","PreparePerpsDepositError","DepositToPerpsError","WithdrawFromPerpsError","openPerpsSession","credentials","resumePerpsCredentials","createPerpsCredentials","revokePerpsCredentials","signedOp","signPerpsOwnerOp","PerpsDeleteProxyResponseSchema","preparePerpsDeposit","sendPerpsDepositTransaction","depositToPerps","withdrawFromPerps","signPerpsWithdraw","PerpsWithdrawResponseSchema","privateKey","createPerpsProxyPrivateKey","proxy","addressFromPrivateKey","signPerpsCreateProxy","PerpsCreateProxyResponseSchema","validatePerpsCredentials","assertPerpsCredentialsKeyMatchesProxy","perpsCredentialHeaders","PerpsCredentialsResponseSchema","proxyKey","createPerpsCreateProxyTypedDataPayload","createPerpsWithdrawTypedDataPayload","expectPrivateKey","Address","privateKeyAddress","ListPositionsRequestSchema","PositionStatusSchema","PositionFilterTypeSchema","PositionSortBySchema","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","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","normalizeMarketPositionContext","isPresent","yesTokenId","noTokenId","yesPositionId","noPositionId","yesBalance","noBalance","requestedAmount","maxAmount","calculateMaxMergeAmount","yesAmount","noAmount","FetchPublicProfileRequestSchema","FetchPublicProfileError","fetchPublicProfile","PublicProfileSchema","RfqQuoteRejectedError","PolymarketError","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","whole","fraction","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","accepted","expired","toAcceptanceExpiredResult","status","takerOrderHash","RfqStatus","fetchRfqStatus","toComboAcceptFailureReason","rfqId","ComboAcceptFailureReason","generateComboAcceptanceOrderSalt","WaitForComboFillParamsSchema","WaitForComboFillError","waitForComboFill","pollingIntervalMs","RfqExecutionStatus","FetchRfqStatusParamsSchema","FetchRfqStatusError","SearchSort","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","scope","AuthorizeSessionKeyError","authorizeSessionKey","parsedRequest","signedBatch","RelayerAuthorizeSessionSignerResponseSchema","waitForAuthorizedSessionKey","RevokeSessionKeyRequestSchema","RevokeSessionKeyError","revokeSessionKey","RelayerRevokeSessionSignerResponseSchema","waitForRevokedSessionKey","sessionKey","expected","haveSameScopes","rightScopes","ListSportsError","listSports","ListSportsMetadataResponseSchema","FetchSportsMarketTypesError","fetchSportsMarketTypes","SportsMarketTypesResponseSchema","SubscribeError","CryptoPricesChainlinkTwapSubscriptionSchema","MarketSubscriptionSchema","subscribe","subscriptions","subscription","handles","spec","subscribeOne","mergedSubscription","children","closing","close","child","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","PrepareErc20TransferRequestSchema","PrepareErc20TransferError","prepareErc20Transfer","sendErc20TransferTransaction","TransferErc20Error","transferErc20"],"mappings":"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","file":"chunk-LGU5PMHE.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 {\n type PaginationCursor,\n toPaginationCursor,\n} from '@polymarket/bindings';\nimport { type ResultAsync, unwrap } from '@polymarket/types';\nimport { z } from 'zod';\nimport { UserInputError } 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 hasMore: 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 */\ntype OffsetCursorState = {\n offset: number;\n pageSize: number;\n};\n\n/** @internal */\nconst OffsetCursorStateSchema = z.object({\n offset: z.number().int().min(0),\n pageSize: PageSizeSchema,\n});\n\n/** @internal */\nexport function paginate<T, TError>(\n fetchPage: (cursor?: PaginationCursor) => ResultAsync<Page<T>, TError>,\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 firstPage() {\n return unwrap(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\n while (true) {\n const page = await unwrap(fetchPage(currentCursor));\n\n yield page;\n\n if (!page.hasMore) {\n return;\n }\n\n currentCursor = page.nextCursor;\n }\n },\n };\n }\n\n return createPaginator();\n}\n\n/** @internal */\nexport function encodeOffsetCursor(state: OffsetCursorState): PaginationCursor {\n return toPaginationCursor(\n btoa(JSON.stringify(OffsetCursorStateSchema.parse(state))),\n );\n}\n\n/** @internal */\nexport function decodeOffsetCursor(\n cursor: PaginationCursor | undefined,\n pageSize: number,\n): OffsetCursorState {\n if (cursor === undefined) {\n return {\n offset: 0,\n pageSize,\n };\n }\n\n try {\n return OffsetCursorStateSchema.parse(JSON.parse(atob(cursor)));\n } catch (error) {\n throw new UserInputError('Invalid pagination cursor', { cause: error });\n }\n}\n","import { err, ok, type Result, ResultAsync } from '@polymarket/types';\nimport type { z } from 'zod';\nimport { UnexpectedResponseError } from './errors';\n\nexport function validateWith<TReturnType>(schema: z.ZodType<TReturnType>) {\n return function validateResponse(\n response: Response,\n ): ResultAsync<TReturnType, UnexpectedResponseError> {\n return ResultAsync.fromPromise(\n response.json(),\n () =>\n new UnexpectedResponseError(\n `Received non-JSON response from ${response.url}`,\n ),\n ).andThen((payload) => parseResponse(response.url, schema, payload));\n };\n}\n\nexport function readBlob(\n response: Response,\n): ResultAsync<Blob, UnexpectedResponseError> {\n return ResultAsync.fromPromise(\n response.blob(),\n () =>\n new UnexpectedResponseError(\n `Received unreadable binary response from ${response.url}`,\n ),\n );\n}\n\nfunction parseResponse<TReturnType>(\n endpoint: string,\n schema: z.ZodType<TReturnType>,\n response: unknown,\n): Result<TReturnType, UnexpectedResponseError> {\n const result = schema.safeParse(response);\n\n if (result.success) {\n return ok(result.data);\n }\n\n return err(UnexpectedResponseError.fromZodError(result.error, { endpoint }));\n}\n","import type { EvmAddress, HexString } from '@polymarket/types';\nimport ky from 'ky';\nimport {\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n} from './errors';\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 url: string;\n};\n\n/** @internal */\nexport class JsonRpcClient {\n readonly #url: string;\n\n constructor({ url }: JsonRpcClientConfig) {\n this.#url = url;\n }\n\n async ethCall(request: EthCallRequest): Promise<HexString> {\n const response = await this.#post<HexString>({\n jsonrpc: '2.0',\n id: 1,\n method: 'eth_call',\n params: [{ to: request.to, data: request.data }, 'latest'],\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 ): Promise<HexString[]> {\n if (requests.length === 0) {\n return [];\n }\n\n return this.#ethCallBatchWithSplit(requests);\n }\n\n async ethEstimateGas(request: EthEstimateGasRequest): 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 jsonrpc: '2.0',\n id: 1,\n method: 'eth_estimateGas',\n params: [call],\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 ): Promise<HexString[]> {\n if (requests.length === 1) {\n return [await this.ethCall(requests[0] as EthCallRequest)];\n }\n\n try {\n return await this.#postEthCallBatch(requests);\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)),\n this.#ethCallBatchWithSplit(requests.slice(midpoint)),\n ]);\n\n return [...left, ...right];\n }\n }\n\n async #postEthCallBatch(\n requests: readonly EthCallRequest[],\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 );\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>(json: unknown): Promise<JsonRpcResponse<TResult>> {\n let response: Response;\n\n try {\n response = await ky.post(this.#url, {\n json,\n throwHttpErrors: false,\n });\n } catch (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 response.json();\n } catch (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 ): Promise<JsonRpcResponse<TResult>[]> {\n let response: Response;\n\n try {\n response = await ky.post(this.#url, {\n json,\n throwHttpErrors: false,\n });\n } catch (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 response.json();\n } catch (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 '@polymarket/bindings/clob';\nimport { WalletType } from '@polymarket/bindings/gamma';\nimport type { HexString } from '@polymarket/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 '@polymarket/types';\nimport { AbiParameters, Bytes, ContractAddress, Hash } from 'ox';\nimport type { EnvironmentConfig, WalletDerivationConfig } from './environments';\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 Polymarket 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 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): Promise<EvmAddress> {\n try {\n const data = await rpc.ethCall({\n to: factory,\n data: FACTORY_BEACON_SELECTOR,\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): Promise<boolean> {\n const beacon = await getDepositWalletFactoryBeacon(rpc, factory);\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): Promise<EvmAddress> {\n if (await isBeaconDepositWalletFactory(rpc, config.depositWalletFactory)) {\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 // TEMP: Default to a Deposit Wallet session key when the wallet cannot be\n // derived from the signer, to support session keys.\n return {\n signerType: SignerType.SESSION_KEY,\n walletType: WalletType.DEPOSIT_WALLET,\n };\n}\n","import type { PositionId, TokenId } from '@polymarket/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 '@polymarket/bindings';\nimport { z } from 'zod';\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 {\n PaginationCursorSchema,\n toPaginationCursor,\n} from '@polymarket/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 '@polymarket/bindings/clob';\nimport { unwrap } from '@polymarket/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 { PageSizeSchema, type Paginated, paginate } from '../pagination';\nimport { validateWith } from '../response';\nimport { toSignatureType } from '../wallet';\nimport { optionalExchangeAssetRequestSchema } from './exchange-asset';\nimport { snakeCase, toSearchParams } from './params';\n\nexport type FetchClosedOnlyModeError =\n | RateLimitError\n | RequestRejectedError\n | SigningError\n | TransportError\n | UnexpectedResponseError;\nexport const FetchClosedOnlyModeError = makeErrorGuard(\n RateLimitError,\n RequestRejectedError,\n SigningError,\n TransportError,\n UnexpectedResponseError,\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): Promise<boolean> {\n const response = await unwrap(\n client.secureClob\n .get('/auth/ban-status/closed-only')\n .andThen(validateWith(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 | RateLimitError\n | RequestRejectedError\n | SigningError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const ListOpenOrdersError = makeErrorGuard(\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): Paginated<OpenOrder[]> {\n const params = parseUserInput(request, ListOpenOrdersRequestSchema);\n const { cursor } = params;\n\n return paginate(\n (nextCursor) =>\n client.secureClob\n .get('/data/orders', {\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 .andThen(validateWith(OpenOrdersPageSchema))\n .map((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 | RateLimitError\n | RequestRejectedError\n | SigningError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchOrderError = makeErrorGuard(\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): Promise<OpenOrder> {\n const params = parseUserInput(request, FetchOrderRequestSchema);\n\n return unwrap(\n client.secureClob\n .get(`/data/order/${params.orderId}`)\n .andThen(validateWith(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 | RateLimitError\n | RequestRejectedError\n | SigningError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const ListAccountTradesError = makeErrorGuard(\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): Paginated<ClobTrade[]> {\n const params = parseUserInput(request, ListAccountTradesRequestSchema);\n const { cursor } = params;\n\n return paginate(\n (nextCursor) =>\n client.secureClob\n .get('/data/trades', {\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 .andThen(validateWith(ClobTradesPageSchema))\n .map((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 | RateLimitError\n | RequestRejectedError\n | SigningError\n | TransportError\n | UnexpectedResponseError;\nexport const FetchNotificationsError = makeErrorGuard(\n RateLimitError,\n RequestRejectedError,\n SigningError,\n TransportError,\n UnexpectedResponseError,\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): Promise<NotificationsResponse> {\n const signatureType = toSignatureType(client.account.walletType);\n\n return unwrap(\n client.secureClob\n .get('/notifications', {\n params: toSearchParams({ signatureType }, snakeCase()),\n })\n .andThen(validateWith(NotificationsResponseSchema)),\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 unwrap(\n client.secureClob.del('/notifications', {\n params: searchParams,\n }),\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 | RateLimitError\n | RequestRejectedError\n | SigningError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchBalanceAllowanceError = makeErrorGuard(\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): Promise<BalanceAllowanceResponse> {\n const params = parseUserInput(request, FetchBalanceAllowanceRequestSchema);\n const signatureType = toSignatureType(client.account.walletType);\n\n return unwrap(\n client.secureClob\n .get('/balance-allowance', {\n params: toSearchParams(\n {\n assetType: params.assetType,\n tokenId: params.assetId ?? params.tokenId,\n signatureType,\n },\n snakeCase(),\n ),\n })\n .andThen(validateWith(BalanceAllowanceResponseSchema)),\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 unwrap(\n client.secureClob.get('/balance-allowance/update', {\n params: searchParams,\n }),\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 | RateLimitError\n | RequestRejectedError\n | SigningError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchOrderScoringError = makeErrorGuard(\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): Promise<boolean> {\n const params = parseUserInput(request, FetchOrderScoringRequestSchema);\n const response = await unwrap(\n client.secureClob\n .get('/order-scoring', {\n params: toSearchParams(params, snakeCase()),\n })\n .andThen(validateWith(OrderScoringResponseSchema)),\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 | RateLimitError\n | RequestRejectedError\n | SigningError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchOrdersScoringError = makeErrorGuard(\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): Promise<OrdersScoringResponse> {\n const params = parseUserInput(request, FetchOrdersScoringRequestSchema);\n const body = params.orderIds;\n\n return unwrap(\n client.secureClob\n .post('/orders-scoring', {\n json: body,\n })\n .andThen(validateWith(OrdersScoringResponseSchema)),\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 | RateLimitError\n | RequestRejectedError\n | SigningError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const ListUserEarningsForDayError = makeErrorGuard(\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): Paginated<UserEarning[]> {\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 params: toSearchParams(\n {\n ...params,\n nextCursor,\n signatureType,\n },\n snakeCase(),\n ),\n })\n .andThen(validateWith(UserEarningsPageSchema))\n .map((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 FetchTotalEarningsForUserForDayRequest = z.input<\n typeof ListUserEarningsForDayRequestSchema\n>;\nexport type FetchTotalEarningsForUserForDayError =\n | RateLimitError\n | RequestRejectedError\n | SigningError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchTotalEarningsForUserForDayError = makeErrorGuard(\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 *\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): Promise<TotalUserEarning[]> {\n const params = parseUserInput(request, ListUserEarningsForDayRequestSchema);\n const signatureType = toSignatureType(client.account.walletType);\n\n return unwrap(\n client.secureClob\n .get('/rewards/user/total', {\n params: toSearchParams(\n {\n ...params,\n signatureType,\n },\n snakeCase(),\n ),\n })\n .andThen(validateWith(TotalUserEarningsResponseSchema)),\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 | RateLimitError\n | RequestRejectedError\n | SigningError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const ListUserEarningsAndMarketsConfigError = makeErrorGuard(\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): Paginated<UserRewardsEarning[]> {\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 params: toSearchParams(\n {\n ...params,\n nextCursor,\n signatureType,\n },\n snakeCase(),\n ),\n })\n .andThen(validateWith(UserRewardsEarningsPageSchema))\n .map((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 | RateLimitError\n | RequestRejectedError\n | SigningError\n | TransportError\n | UnexpectedResponseError;\nexport const FetchRewardPercentagesError = makeErrorGuard(\n RateLimitError,\n RequestRejectedError,\n SigningError,\n TransportError,\n UnexpectedResponseError,\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): Promise<RewardsPercentages> {\n const signatureType = toSignatureType(client.account.walletType);\n\n return unwrap(\n client.secureClob\n .get('/rewards/user/percentages', {\n params: toSearchParams({ signatureType }, snakeCase()),\n })\n .andThen(validateWith(RewardsPercentagesSchema)),\n );\n}\n","import { delay, errAsync, ResultAsync } from '@polymarket/types';\nimport { RateLimitError } from './errors';\n\ntype SleepFn = (milliseconds: number) => Promise<void>;\n\nexport type RateLimitRetryOptions = {\n /**\n * Maximum retry attempts after the initial request. Defaults to 2.\n */\n retries?: number;\n /**\n * The longest server-requested wait worth absorbing, in seconds. A rate\n * limit asking for a longer delay propagates instead of being retried —\n * retrying earlier than the server asked would burn the attempt into a\n * window the server already declared closed. Defaults to 5.\n */\n maxDelaySeconds?: number;\n /** @internal Test seam for controlled time. */\n sleep?: SleepFn;\n};\n\n/**\n * Retries a request pipeline when it is rate limited, honoring the\n * server-requested delay.\n *\n * Rate limiting is ordinary backpressure on this platform — shed load answers\n * with a retry delay rather than queueing — so idempotent reads should absorb\n * it instead of surfacing it on the first hit. Only {@link RateLimitError} is\n * retried; every other error propagates immediately. When the server supplies\n * no delay, one second is assumed. A requested delay longer than\n * `maxDelaySeconds` propagates rather than retrying early: the wait is always\n * exactly what the server asked for, or nothing.\n *\n * Apply this to idempotent requests only. Actions own that judgment: reads\n * compose it, mutations do not.\n */\nexport function withRateLimitRetry<T, E>(\n run: () => ResultAsync<T, E>,\n options: RateLimitRetryOptions = {},\n): ResultAsync<T, E> {\n const { retries = 2, maxDelaySeconds = 5, sleep = delay } = options;\n\n function attempt(remaining: number): ResultAsync<T, E> {\n return run().orElse((error) => {\n if (!(error instanceof RateLimitError) || remaining <= 0) {\n return errAsync(error);\n }\n\n const delaySeconds = error.retryAfter ?? 1;\n if (delaySeconds > maxDelaySeconds) {\n return errAsync(error);\n }\n\n // A rejecting sleep must not break fromSafePromise's never-reject\n // contract; it degrades to an immediate retry.\n return ResultAsync.fromSafePromise(\n sleep(delaySeconds * 1000).catch(() => undefined),\n ).andThen(() => attempt(remaining - 1));\n });\n }\n\n return attempt(retries);\n}\n","import {\n ComboConditionIdSchema,\n ConditionIdSchema,\n EventIdSchema,\n EvmAddressSchema,\n OrderSideSchema,\n PaginationCursorSchema,\n} from '@polymarket/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 '@polymarket/bindings/data';\nimport { z } from 'zod';\nimport type { BaseClient } from '../clients';\nimport {\n makeErrorGuard,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n} from '../errors';\nimport { parseUserInput } from '../input';\nimport { PageSizeSchema, type Paginated, paginate } from '../pagination';\nimport { validateWith } from '../response';\nimport { withRateLimitRetry } from '../retry';\nimport { distinctIdList, TimeWindowSchema, toDataSearchParams } from './params';\n\nexport {\n ComboActivityType,\n SortDirection,\n TipSide,\n TradeFilterType,\n} from '@polymarket/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 | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const ListTradesError = makeErrorGuard(\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 automatically.\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): Paginated<Trade[]> {\n const { cursor, pageSize, window, ...params } = parseUserInput(\n request,\n ListTradesRequestSchema,\n );\n\n return paginate(\n (cursor) =>\n withRateLimitRetry(() =>\n client.data.get('/v2/trades', {\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 ).andThen(validateWith(ListTradesResponseSchema)),\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 | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const ListActivityError = makeErrorGuard(\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Lists wallet activity, newest-first by default.\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 automatically.\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): Paginated<Activity[]> {\n const { cursor, pageSize, window, ...params } = parseUserInput(\n request,\n ListActivityRequestSchema,\n );\n\n return paginate(\n (cursor) =>\n withRateLimitRetry(() =>\n client.data.get('/v2/activity', {\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 ).andThen(validateWith(ListActivityResponseSchema)),\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 | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const ListComboActivityError = makeErrorGuard(\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 * automatically.\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): Paginated<ComboActivity[]> {\n const { cursor, pageSize, ...params } = parseUserInput(\n request,\n ListComboActivityRequestSchema,\n );\n\n return paginate(\n (cursor) =>\n withRateLimitRetry(() =>\n client.data.get('/v2/activity/combos', {\n params: toDataSearchParams({ ...params, limit: pageSize, cursor }),\n }),\n ).andThen(validateWith(ListComboActivityResponseSchema)),\n cursor,\n );\n}\n","import type {\n ComboConditionId,\n ConditionId,\n PositionId,\n TokenId,\n} from '@polymarket/bindings';\nimport { type EvmAddress, type HexString, invariant } from '@polymarket/types';\nimport { AbiFunction, AbiParameters } from 'ox';\nimport { makeErrorGuard, UserInputError } from './errors';\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 ROUTER_SPLIT_FUNCTION = AbiFunction.from(\n 'function split(bytes31 conditionId, 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 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 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 Conditional Tokens-compatible contracts, including the collateral adapters.\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\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 '@polymarket/bindings';\nimport {\n type EvmAddress,\n type EvmSignature,\n type HexString,\n invariant,\n type TxHash,\n} from '@polymarket/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';\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\nexport interface ApiKeyAuthorization {\n /** @internal */\n get isBuilderKey(): boolean;\n\n /** @internal */\n get supportGasless(): boolean;\n\n /** @internal */\n authorize(request: ApiKeyAuthorizationRequest): 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 Polymarket API,\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 Polymarket API,\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 '@polymarket/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 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 | 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 '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 EvmAddressSchema,\n type TransactionId,\n TransactionIdSchema,\n} from '@polymarket/bindings';\nimport { WalletType } from '@polymarket/bindings/gamma';\nimport {\n type GaslessTransaction,\n GaslessTransactionSchema,\n RelayerDeployedResponseSchema,\n type RelayerDepositWalletExecuteRequest,\n type RelayerExecuteParams,\n RelayerExecuteParamsSchema,\n type RelayerExecuteRequest,\n RelayerExecuteRequestSchema,\n RelayerExecuteResponseSchema,\n type RelayerLegacyExecuteRequest,\n RelayerTransactionState,\n RelayerTransactionType,\n} from '@polymarket/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 unwrap,\n ZERO_ADDRESS,\n} from '@polymarket/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 RequestRejectedError,\n TimeoutError,\n TransactionFailedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n} from '../errors';\nimport { parseUserInput } from '../input';\nimport { validateWith } from '../response';\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 | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchExecuteParamsError = makeErrorGuard(\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): Promise<RelayerExecuteParams> {\n const params = parseUserInput(request, FetchExecuteParamsRequestSchema);\n\n return unwrap(\n client.relayer\n .get('/v1/account/transactions/params', {\n params: toSearchParams(params, { address: 'address', type: 'type' }),\n })\n .andThen(validateWith(RelayerExecuteParamsSchema)),\n );\n}\n\nconst FetchGaslessTransactionRequestSchema = z.object({\n transactionId: TransactionIdSchema,\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 | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const IsWalletDeployedError = makeErrorGuard(\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): Promise<boolean> {\n const params = await resolveWalletDeploymentTarget(client, request);\n\n if (params.type === WalletType.EOA) {\n return false;\n }\n\n return unwrap(\n client.relayer\n .get('/deployed', {\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 })\n .andThen(validateWith(RelayerDeployedResponseSchema))\n .map(({ deployed }) => deployed),\n );\n}\n\nasync function resolveWalletDeploymentTarget(\n client: BaseClient,\n request: IsWalletDeployedRequest | undefined,\n): Promise<z.output<typeof IsWalletDeployedRequestSchema>> {\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 ),\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.supportsGasless,\n 'Deposit Wallet deployment requires a Relayer API Key or Builder API Key in the client configuration.',\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\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): Promise<GaslessTransaction> {\n const params = parseUserInput(request, FetchGaslessTransactionRequestSchema);\n\n return unwrap(\n client.relayer\n .get(`/v1/account/transactions/${params.transactionId}`)\n .andThen(validateWith(GaslessTransactionSchema)),\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.supportsGasless,\n 'Gasless transactions require a Relayer API Key or Builder API Key in the client configuration.',\n );\n invariant(\n client.account.walletType === WalletType.GNOSIS_SAFE ||\n client.account.walletType === WalletType.POLY_PROXY ||\n client.account.walletType === WalletType.DEPOSIT_WALLET,\n 'Gasless transaction preparation supports Deposit Wallet, Safe-backed, and proxy-backed accounts',\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\n const response = await unwrap(\n client.relayer\n .post('/submit', {\n json: payload,\n })\n .andThen(validateWith(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 return {\n domain: {\n chainId: request.chainId,\n name: DEPOSIT_WALLET_DOMAIN_NAME,\n verifyingContract: request.wallet,\n version: DEPOSIT_WALLET_DOMAIN_VERSION,\n },\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 },\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 '@polymarket/bindings';\nimport { WalletType } from '@polymarket/bindings/gamma';\nimport type { EvmSignature, HexString } from '@polymarket/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 RequestRejectedError,\n SigningError,\n TimeoutError,\n TransactionFailedError,\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 SendErc20ApprovalTransactionRequest,\n type SendErc1155ApprovalForAllTransactionRequest,\n signerTransactionRequest,\n} from '../workflow';\nimport {\n GaslessTransactionMetadataSchema,\n type GaslessWorkflowRequest,\n prepareGaslessTransaction,\n type WaitForGaslessTransactionError,\n} from './gasless';\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 | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchTradingApprovalsStateError = makeErrorGuard(\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 * This action only reads on-chain state. It does not require a signer or submit\n * transactions.\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): Promise<TradingApprovalsState> {\n const { user } = parseUserInput(\n request,\n FetchTradingApprovalsStateRequestSchema,\n );\n const missing = await resolveMissingTradingApprovals(client, user);\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 amount: MAX_UINT256,\n spenderAddress: contracts.collateralAdapter,\n tokenAddress: contracts.collateralToken,\n },\n {\n amount: MAX_UINT256,\n spenderAddress: contracts.negRiskCollateralAdapter,\n tokenAddress: contracts.collateralToken,\n },\n {\n amount: MAX_UINT256,\n spenderAddress: contracts.protocolV2Router,\n tokenAddress: contracts.collateralToken,\n },\n {\n amount: MAX_UINT256,\n spenderAddress: contracts.exchangeV3,\n tokenAddress: contracts.collateralToken,\n },\n {\n amount: MAX_UINT256,\n spenderAddress: contracts.perpsDepositContract,\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 operatorAddress: contracts.collateralAdapter,\n tokenAddress: contracts.conditionalTokens,\n },\n {\n operatorAddress: contracts.negRiskCollateralAdapter,\n tokenAddress: contracts.conditionalTokens,\n },\n {\n operatorAddress: contracts.autoRedeemOperator,\n tokenAddress: contracts.conditionalTokens,\n },\n {\n operatorAddress: contracts.binaryModule,\n tokenAddress: contracts.conditionalTokens,\n },\n {\n operatorAddress: contracts.negRiskModule,\n tokenAddress: contracts.conditionalTokens,\n },\n {\n operatorAddress: contracts.protocolV2Router,\n tokenAddress: contracts.positionManager,\n },\n {\n operatorAddress: contracts.exchangeV3,\n tokenAddress: contracts.positionManager,\n },\n {\n operatorAddress: contracts.autoRedeemOperator,\n tokenAddress: contracts.positionManager,\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","import type { ApiKey } from '@polymarket/bindings';\nimport {\n type ApiKeyCreds,\n ApiKeyCredsSchema,\n ApiKeysResponseSchema,\n type BuilderApiKey,\n type BuilderApiKeyCreds,\n BuilderApiKeyCredsSchema,\n BuilderApiKeysResponseSchema,\n} from '@polymarket/bindings/clob';\nimport { type EvmAddress, type EvmSignature, unwrap } from '@polymarket/types';\nimport { z } from 'zod';\nimport type { BaseClient, BaseSecureClient } from '../clients';\nimport {\n makeErrorGuard,\n RateLimitError,\n RequestRejectedError,\n SigningError,\n TransportError,\n UnexpectedResponseError,\n} from '../errors';\nimport { validateWith } from '../response';\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 unwrap(\n client.clob\n .post('/auth/api-key', {\n headers: toL1Headers(request),\n })\n .andThen(validateWith(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 unwrap(\n client.clob\n .get('/auth/derive-api-key', {\n headers: toL1Headers(request),\n })\n .andThen(validateWith(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 | RateLimitError\n | RequestRejectedError\n | SigningError\n | TransportError\n | UnexpectedResponseError;\nexport const FetchApiKeysError = makeErrorGuard(\n RateLimitError,\n RequestRejectedError,\n SigningError,\n TransportError,\n UnexpectedResponseError,\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): Promise<ApiKey[]> {\n const response = await unwrap(\n client.secureClob\n .get('/auth/api-keys')\n .andThen(validateWith(ApiKeysResponseSchema)),\n );\n\n return response.apiKeys;\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 unwrap(\n client.secureClob\n .del('/auth/api-key')\n .andThen(validateWith(z.literal('OK'))),\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);\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): Promise<BuilderApiKeyCreds> {\n return unwrap(\n client.secureClob\n .post('/auth/builder-api-key')\n .andThen(validateWith(BuilderApiKeyCredsSchema)),\n );\n}\n\nexport type FetchBuilderApiKeysError =\n | RateLimitError\n | RequestRejectedError\n | SigningError\n | TransportError\n | UnexpectedResponseError;\nexport const FetchBuilderApiKeysError = makeErrorGuard(\n RateLimitError,\n RequestRejectedError,\n SigningError,\n TransportError,\n UnexpectedResponseError,\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): Promise<BuilderApiKey[]> {\n return unwrap(\n client.secureClob\n .get('/auth/builder-api-key')\n .andThen(validateWith(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 await unwrap(\n client.clob\n .del('/auth/builder-api-key')\n .andThen(validateWith(z.literal('OK'))),\n );\n}\n\nfunction toL1Headers(auth: ApiKeyAuthRequest): HeadersInit {\n return {\n POLY_ADDRESS: auth.address,\n POLY_NONCE: `${auth.nonce}`,\n POLY_SIGNATURE: auth.signature,\n POLY_TIMESTAMP: `${auth.timestamp}`,\n };\n}\n","import {\n BuilderCodeSchema,\n PaginationCursorSchema,\n toPaginationCursor,\n} from '@polymarket/bindings';\nimport {\n type BuilderTrade,\n END_CURSOR,\n PaginatedBuilderTradesSchema,\n} from '@polymarket/bindings/clob';\nimport { z } from 'zod';\nimport type { BaseClient } from '../clients';\nimport {\n makeErrorGuard,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n} from '../errors';\nimport { parseUserInput } from '../input';\nimport { type Paginated, paginate } from '../pagination';\nimport { validateWith } from '../response';\nimport { optionalExchangeAssetRequestSchema } from './exchange-asset';\nimport { snakeCase, toSearchParams } from './params';\n\nconst ListBuilderTradesRequestFieldsSchema = z.object({\n after: z.string().optional(),\n before: z.string().optional(),\n builderCode: BuilderCodeSchema,\n cursor: PaginationCursorSchema.optional(),\n id: z.string().optional(),\n market: z.string().optional(),\n});\n\nconst ListBuilderTradesRequestSchema = optionalExchangeAssetRequestSchema(\n ListBuilderTradesRequestFieldsSchema.shape,\n);\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 | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const ListBuilderTradesError = makeErrorGuard(\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Lists builder-attributed trades.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\n *\n * @throws {@link ListBuilderTradesError}\n * Thrown on failure.\n *\n * @example\n * Fetch the first page of results:\n * ```ts\n * const result = listBuilderTrades(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: BuilderTrade[]\n * }\n * ```\n *\n * @example\n * Loop through all pages with `for await`:\n * ```ts\n * const result = listBuilderTrades(client);\n *\n * for await (const page of result) {\n * // page.items: BuilderTrade[]\n * }\n * ```\n */\nexport function listBuilderTrades(\n client: BaseClient,\n request: ListBuilderTradesRequest,\n): Paginated<BuilderTrade[]> {\n const params = parseUserInput(request, ListBuilderTradesRequestSchema);\n const { cursor } = params;\n\n return paginate(\n (nextCursor) =>\n client.clob\n .get('/builder/trades', {\n params: toSearchParams(\n {\n after: params.after,\n assetId: params.assetId ?? params.tokenId,\n before: params.before,\n builderCode: params.builderCode,\n id: params.id,\n market: params.market,\n nextCursor,\n },\n snakeCase({\n assetId: 'asset_id',\n builderCode: 'builder_code',\n }),\n ),\n })\n .andThen(validateWith(PaginatedBuilderTradesSchema))\n .map((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","import {\n BuilderCodeSchema,\n type ConditionId,\n ConditionIdSchema,\n type DecimalString,\n type OrderSide,\n OrderSideSchema,\n PaginationCursorSchema,\n type PositionId,\n type TickSizeValue,\n type TokenId,\n toPaginationCursor,\n} from '@polymarket/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 PriceSchema,\n type Prices,\n PricesSchema,\n ResolveConditionByTokenResponseSchema,\n SpreadSchema,\n type Spreads,\n SpreadsSchema,\n} from '@polymarket/bindings/clob';\nimport { unwrap } from '@polymarket/types';\nimport { z } from 'zod';\nimport type { BaseClient } from '../clients';\nimport {\n makeErrorGuard,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n} from '../errors';\nimport { parseUserInput } from '../input';\nimport { type Paginated, paginate } from '../pagination';\nimport { validateWith } from '../response';\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 | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchMidpointError = makeErrorGuard(\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): Promise<DecimalString> {\n const params = parseUserInput(request, FetchMidpointRequestSchema);\n const response = await unwrap(\n client.clob\n .get('/midpoint', {\n params: toAssetSearchParams(params),\n })\n .andThen(validateWith(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 | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchMidpointsError = makeErrorGuard(\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): Promise<Midpoints> {\n const params = parseUserInput(request, FetchMidpointsRequestSchema);\n\n return unwrap(\n client.clob\n .post('midpoints', {\n json: toTokenRequestPayload(params),\n })\n .andThen(validateWith(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 | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchTickSizeError = makeErrorGuard(\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): Promise<TickSizeValue> {\n const params = parseUserInput(request, FetchTickSizeRequestSchema);\n const response = await unwrap(\n client.clob\n .get('/tick-size', {\n params: toAssetSearchParams(params),\n })\n .andThen(validateWith(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 | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchNegRiskError = makeErrorGuard(\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): Promise<boolean> {\n const params = parseUserInput(request, FetchNegRiskRequestSchema);\n const response = await unwrap(\n client.clob\n .get('/neg-risk', {\n params: toAssetSearchParams(params),\n })\n .andThen(validateWith(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 | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const ResolveConditionByTokenError = makeErrorGuard(\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): Promise<ConditionId> {\n const params = parseUserInput(request, ResolveConditionByTokenRequestSchema);\n\n return unwrap(\n client.clob\n .get(`/markets-by-token/${params.assetId ?? params.tokenId}`)\n .andThen(validateWith(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 | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchMarketInfoError = makeErrorGuard(\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): Promise<MarketInfo> {\n const params = parseUserInput(request, FetchMarketInfoRequestSchema);\n\n return unwrap(\n client.clob\n .get(`/clob-markets/${params.conditionId}`)\n .andThen(validateWith(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 | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchBuilderFeeRatesError = makeErrorGuard(\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): Promise<BuilderFeeRates> {\n const params = parseUserInput(request, FetchBuilderFeeRatesRequestSchema);\n\n return unwrap(\n client.clob\n .get(`/fees/builder-fees/${params.builderCode}`)\n .andThen(validateWith(FetchBuilderFeeRatesResponseSchema))\n .mapErr((error) => {\n if (error instanceof RequestRejectedError && error.status === 404) {\n return new UserInputError(\n `Unknown builder code: ${params.builderCode}`,\n { cause: error },\n );\n }\n\n return error;\n }),\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 | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchPriceError = makeErrorGuard(\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): Promise<DecimalString> {\n const params = parseUserInput(request, FetchPriceRequestSchema);\n const response = await unwrap(\n client.clob\n .get('/price', {\n params: toAssetSearchParams(params),\n })\n .andThen(validateWith(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 | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchPricesError = makeErrorGuard(\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): Promise<Prices> {\n const params = parseUserInput(request, FetchPricesRequestSchema);\n\n return unwrap(\n client.clob\n .post('prices', {\n json: toTokenWithSideRequestPayload(params),\n })\n .andThen(validateWith(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 | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchOrderBookError = makeErrorGuard(\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): Promise<OrderBook> {\n const params = parseUserInput(request, FetchOrderBookRequestSchema);\n\n return unwrap(\n client.clob\n .get('/book', {\n params: toAssetSearchParams(params),\n })\n .andThen(validateWith(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 | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchOrderBooksError = makeErrorGuard(\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): Promise<OrderBook[]> {\n const params = parseUserInput(request, FetchOrderBooksRequestSchema);\n\n return unwrap(\n client.clob\n .post('books', {\n json: toTokenRequestPayload(params),\n })\n .andThen(validateWith(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 | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchSpreadError = makeErrorGuard(\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): Promise<DecimalString> {\n const params = parseUserInput(request, FetchSpreadRequestSchema);\n const response = await unwrap(\n client.clob\n .get('/spread', {\n params: toAssetSearchParams(params),\n })\n .andThen(validateWith(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 | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchSpreadsError = makeErrorGuard(\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): Promise<Spreads> {\n const params = parseUserInput(request, FetchSpreadsRequestSchema);\n\n return unwrap(\n client.clob\n .post('spreads', {\n json: toTokenRequestPayload(params),\n })\n .andThen(validateWith(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 | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchLastTradePriceError = makeErrorGuard(\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): Promise<LastTradePrice | null> {\n const params = parseUserInput(request, FetchLastTradePriceRequestSchema);\n\n return unwrap(\n client.clob\n .get('/last-trade-price', {\n params: toAssetSearchParams(params),\n })\n .andThen(validateWith(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 | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchLastTradePricesError = makeErrorGuard(\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): Promise<LastTradePriceForAsset[]> {\n const params = parseUserInput(request, FetchLastTradePricesRequestSchema);\n\n return unwrap(\n client.clob\n .post('last-trades-prices', {\n json: toTokenRequestPayload(params),\n })\n .andThen(validateWith(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 | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const ListCurrentRewardsError = makeErrorGuard(\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): Paginated<CurrentReward[]> {\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 params: toSearchParams(\n {\n ...params,\n nextCursor,\n },\n snakeCase(),\n ),\n })\n .andThen(validateWith(PaginatedCurrentRewardsSchema))\n .map((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 | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const ListMarketRewardsError = makeErrorGuard(\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): Paginated<MarketReward[]> {\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 params: toSearchParams(\n {\n nextCursor,\n sponsored: params.sponsored,\n },\n snakeCase(),\n ),\n })\n .andThen(validateWith(PaginatedMarketRewardsSchema))\n .map((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","import type { EvmAddress } from '@polymarket/bindings';\nimport {\n type CollateralReturnPlanResponse,\n CollateralReturnPlanResponseSchema,\n CollateralReturnPlanSchema,\n} from '@polymarket/bindings/combos';\nimport { WalletType } from '@polymarket/bindings/gamma';\nimport {\n type RelayerDepositWalletExecuteRequest,\n RelayerExecuteResponseSchema,\n type RelayerLegacyExecuteRequest,\n RelayerTransactionType,\n} from '@polymarket/bindings/relayer';\nimport {\n delay,\n type EvmSignature,\n type HexString,\n invariant,\n isSameEvmAddress,\n type NonEmptyArray,\n unwrap,\n} from '@polymarket/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 { validateWith } from '../response';\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 '@polymarket/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 unwrap(\n client.combos\n .post('/v1/collateral-return/plan', {\n json: { wallet: client.account.wallet },\n timeout: COLLATERAL_RETURN_REQUEST_TIMEOUT_MS,\n })\n .andThen(validateWith(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 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 assertCollateralReturnAccount(client);\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}\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 unwrap(\n client.combos\n .post('/v1/collateral-return/submit', {\n json: { envelope, plan_hash: planHash },\n timeout: COLLATERAL_RETURN_REQUEST_TIMEOUT_MS,\n })\n .andThen(validateWith(RelayerExecuteResponseSchema)),\n );\n\n return new GaslessTransactionHandle(client, response);\n}\n","import {\n CommentIdSchema,\n CommentParentEntityTypeSchema,\n EventIdSchema,\n PaginationCursorSchema,\n} from '@polymarket/bindings';\nimport {\n type Comment,\n ListCommentsResponseSchema,\n SeriesIdSchema,\n} from '@polymarket/bindings/gamma';\nimport { unwrap } from '@polymarket/types';\nimport { z } from 'zod';\nimport type { BaseClient } from '../clients';\nimport {\n makeErrorGuard,\n RateLimitError,\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 { validateWith } from '../response';\nimport { snakeCase, toSearchParams } from './params';\n\nconst ListCommentsRequestSchema = z.object({\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 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 // Matches the upstream per-request limit cap.\n pageSize: PageSizeSchema.max(100).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 | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const ListCommentsError = makeErrorGuard(\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\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 * @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): Paginated<Comment[]> {\n const { cursor, pageSize, ...params } = parseUserInput(\n request,\n ListCommentsRequestSchema,\n );\n\n return paginate((cursor) => {\n const decoded = decodeOffsetCursor(cursor, pageSize);\n\n return client.gamma\n .get('/comments', {\n params: toSearchParams(\n {\n ascending: params.ascending,\n getPositions: params.getPositions,\n holdersOnly: params.holdersOnly,\n limit: decoded.pageSize,\n offset: decoded.offset,\n order: params.order,\n parentEntityId: params.parentEntityId,\n parentEntityType: params.parentEntityType,\n },\n snakeCase(),\n ),\n })\n .andThen(validateWith(ListCommentsResponseSchema))\n .map((comments) => {\n const hasMore = comments.length >= decoded.pageSize;\n\n return {\n items: comments,\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 FetchCommentsByIdError =\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchCommentsByIdError = makeErrorGuard(\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): Promise<Comment[]> {\n const params = parseUserInput(request, FetchCommentsByIdRequestSchema);\n\n return unwrap(\n client.gamma\n .get(`comments/${params.id}`, {\n params: toSearchParams(\n {\n getPositions: params.getPositions,\n },\n snakeCase(),\n ),\n })\n .andThen(validateWith(ListCommentsResponseSchema)),\n );\n}\n\nexport type ListCommentsByUserAddressError =\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const ListCommentsByUserAddressError = makeErrorGuard(\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 * @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: 'DESC',\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: 'DESC',\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): Paginated<Comment[]> {\n const { address, cursor, pageSize, ...params } = parseUserInput(\n request,\n ListCommentsByUserAddressRequestSchema,\n );\n\n return paginate((cursor) => {\n const decoded = decodeOffsetCursor(cursor, pageSize);\n\n return client.gamma\n .get(`comments/user_address/${address}`, {\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 .andThen(validateWith(ListCommentsResponseSchema))\n .map((comments) => {\n const hasMore = comments.length >= decoded.pageSize;\n\n return {\n items: comments,\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 { UserInputError } from './errors';\n\ntype PolymarketUrlResource = 'event' | 'market';\n\nexport function parsePolymarketSlugUrl(\n rawUrl: string,\n resource: PolymarketUrlResource,\n): string {\n let url: URL;\n\n try {\n url = new URL(rawUrl);\n } catch (cause) {\n throw new UserInputError('Expected a valid Polymarket URL.', { cause });\n }\n\n if (\n url.protocol !== 'https:' ||\n (url.hostname !== 'polymarket.com' && url.hostname !== 'www.polymarket.com')\n ) {\n throw new UserInputError('Expected a valid Polymarket 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 Polymarket ${resource} URL.`);\n }\n\n return slug;\n}\n","import {\n IsoCalendarDateStringSchema,\n IsoDateTimeStringSchema,\n PaginationCursorSchema,\n QuestionIdSchema,\n} from '@polymarket/bindings';\nimport {\n CanonicalMarketConditionIdSchema,\n FetchEventLiveVolumeResponseSchema,\n FetchResolutionsResponseSchema,\n type LiveVolume,\n type Resolution,\n} from '@polymarket/bindings/data';\nimport {\n type Event,\n EventSchema,\n FetchEventTagsResponseSchema,\n ListEventsKeysetResponseSchema,\n type TagReference,\n} from '@polymarket/bindings/gamma';\nimport { unwrap } from '@polymarket/types';\nimport { z } from 'zod';\nimport type { BaseClient } from '../clients';\nimport {\n makeErrorGuard,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n} from '../errors';\nimport { parseUserInput } from '../input';\nimport { PageSizeSchema, type Paginated, paginate } from '../pagination';\nimport { parsePolymarketSlugUrl } from '../polymarket-url';\nimport { validateWith } from '../response';\nimport { withRateLimitRetry } from '../retry';\nimport {\n PositiveInt32EventIdSchema,\n snakeCase,\n toDataSearchParams,\n toSearchParams,\n} from './params';\n\nexport {\n ResolutionMarketType,\n ResolutionReporter,\n ResolutionSource,\n ResolutionStatus,\n} from '@polymarket/bindings/data';\n\nconst ListEventsRequestSchema = z.object({\n ascending: z.boolean().optional(),\n closed: z.boolean().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 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 | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const ListEventsError = makeErrorGuard(\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` to list settled events.\n *\n * @remarks\n * This is a low-level function. Most SDK consumers should prefer the client instance API.\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): Paginated<Event[]> {\n const params = parseUserInput(request, ListEventsRequestSchema);\n\n return paginate(\n (cursor) =>\n client.gamma\n .get('/events/keyset', {\n params: toEventsSearchParams({\n ...params,\n cursor: cursor ?? params.cursor,\n }),\n })\n .andThen(validateWith(ListEventsKeysetResponseSchema))\n .map((response) => ({\n items: response.items,\n hasMore: response.nextCursor !== undefined,\n nextCursor: response.nextCursor,\n })),\n params.cursor,\n );\n}\n\nexport type FetchEventError =\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchEventError = makeErrorGuard(\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://polymarket.com/event/presidential-election-2028',\n * });\n *\n * // event === Event\n * ```\n */\nexport async function fetchEvent(\n client: BaseClient,\n request: FetchEventRequest,\n): Promise<Event> {\n const params = parseUserInput(request, FetchEventRequestSchema);\n\n if ('id' in params) {\n return unwrap(\n client.gamma\n .get(`events/${params.id}`, {\n params: toFetchEventByIdSearchParams(params),\n })\n .andThen(validateWith(EventSchema)),\n );\n }\n\n const slug =\n 'url' in params ? parsePolymarketSlugUrl(params.url, 'event') : params.slug;\n\n return unwrap(\n client.gamma\n .get(`events/slug/${slug}`, {\n params: toFetchEventBySlugSearchParams(params),\n })\n .andThen(validateWith(EventSchema)),\n );\n}\n\nexport type FetchEventTagsError =\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchEventTagsError = makeErrorGuard(\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): Promise<TagReference[]> {\n const params = parseUserInput(request, FetchEventTagsRequestSchema);\n\n return unwrap(\n client.gamma\n .get(`events/${params.id}/tags`)\n .andThen(validateWith(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 | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchResolutionsError = makeErrorGuard(\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): Promise<Resolution[]> {\n const { conditionIds, eventIds, questionId } = parseUserInput(\n request,\n FetchResolutionsRequestSchema,\n );\n\n return unwrap(\n withRateLimitRetry(() =>\n client.data.get('/v2/resolutions', {\n params: toDataSearchParams({\n questionId,\n condition: conditionIds,\n eventId: eventIds,\n }),\n }),\n ).andThen(validateWith(FetchResolutionsResponseSchema)),\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 | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchEventLiveVolumeError = makeErrorGuard(\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 * automatically.\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): Promise<LiveVolume> {\n const { eventIds } = parseUserInput(\n request,\n FetchEventLiveVolumeRequestSchema,\n );\n\n return unwrap(\n withRateLimitRetry(() =>\n client.data.get('/v2/live-volume', {\n params: toDataSearchParams({ eventId: eventIds }),\n }),\n ).andThen(validateWith(FetchEventLiveVolumeResponseSchema)),\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 '@polymarket/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 '@polymarket/bindings/data';\nimport { unwrap } from '@polymarket/types';\nimport { z } from 'zod';\nimport type { BaseClient } from '../clients';\nimport {\n makeErrorGuard,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n} from '../errors';\nimport { parseUserInput } from '../input';\nimport { PageSizeSchema, type Paginated, paginate } from '../pagination';\nimport { validateWith } from '../response';\nimport { withRateLimitRetry } from '../retry';\nimport { toDataSearchParams } from './params';\n\nexport {\n BiggestWinnerKind,\n BuilderVolumeInterval,\n LeaderboardWindow,\n TraderLeaderboardSort,\n} from '@polymarket/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 | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const ListBuilderLeaderboardError = makeErrorGuard(\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 automatically.\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): Paginated<BuilderStanding[]> {\n const { cursor, pageSize, window } = parseUserInput(\n request,\n ListBuilderLeaderboardRequestSchema,\n );\n\n return paginate(\n (cursor) =>\n withRateLimitRetry(() =>\n client.data.get('/v2/builders/leaderboard', {\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 ).andThen(validateWith(ListBuilderLeaderboardResponseSchema)),\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 | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchBuilderVolumeError = makeErrorGuard(\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 automatically.\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): Promise<BuilderVolumePoint[]> {\n const { interval, bucketLimit } = parseUserInput(\n request,\n FetchBuilderVolumeRequestSchema,\n );\n\n return unwrap(\n withRateLimitRetry(() =>\n client.data.get('/v2/builders/volume', {\n params: toDataSearchParams({ interval, limit: bucketLimit }),\n }),\n ).andThen(validateWith(FetchBuilderVolumeResponseSchema)),\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 | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const ListTraderLeaderboardError = makeErrorGuard(\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): Paginated<TraderLeaderboardEntry[]> {\n const { category, cursor, pageSize, sortBy, window } = parseUserInput(\n request,\n ListTraderLeaderboardRequestSchema,\n );\n\n return paginate(\n (cursor) =>\n withRateLimitRetry(() =>\n client.data.get('/v2/leaderboard', {\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 ).andThen(validateWith(ListTraderLeaderboardResponseSchema)),\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 | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchTraderLeaderboardStandingError = makeErrorGuard(\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): Promise<TraderLeaderboardStanding | null> {\n const { category, user, window } = parseUserInput(\n request,\n FetchTraderLeaderboardStandingRequestSchema,\n );\n\n return unwrap(\n withRateLimitRetry(() =>\n client.data.get('/v2/leaderboard', {\n params: toDataSearchParams({\n category,\n timePeriod: window,\n user,\n }),\n }),\n ).andThen(validateWith(FetchTraderLeaderboardStandingResponseSchema)),\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 | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const ListBiggestWinnersError = makeErrorGuard(\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): Paginated<BiggestWinner[]> {\n const { category, cursor, pageSize, window } = parseUserInput(\n request,\n ListBiggestWinnersRequestSchema,\n );\n\n return paginate(\n (cursor) =>\n withRateLimitRetry(() =>\n client.data.get('/v2/biggest-winners', {\n params: toDataSearchParams({\n category,\n cursor,\n limit: pageSize,\n timePeriod: window,\n }),\n }),\n ).andThen(validateWith(ListBiggestWinnersResponseSchema)),\n cursor,\n );\n}\n","import { PaginationCursorSchema } from '@polymarket/bindings';\nimport {\n ListMarketClarificationsResponseSchema,\n type MarketClarification,\n MarketClarificationState,\n} from '@polymarket/bindings/gamma';\nimport { z } from 'zod';\nimport type { BaseClient } from '../clients';\nimport {\n makeErrorGuard,\n RateLimitError,\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 { validateWith } from '../response';\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 | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const ListMarketClarificationsError = makeErrorGuard(\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): Paginated<MarketClarification[]> {\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 params: toSearchParams(\n {\n ...params,\n limit: decoded.pageSize,\n offset: decoded.offset,\n },\n snakeCase(),\n ),\n })\n .andThen(validateWith(ListMarketClarificationsResponseSchema))\n .map((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 {\n ClobAssetIdSchema,\n ConditionIdSchema,\n IsoDateTimeStringSchema,\n type PaginationCursor,\n PaginationCursorSchema,\n PositionIdSchema,\n} from '@polymarket/bindings';\nimport {\n type ComboMarket,\n ListComboMarketsResponseSchema,\n} from '@polymarket/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 '@polymarket/bindings/data';\nimport {\n FetchMarketTagsResponseSchema,\n ListMarketsKeysetResponseSchema,\n type Market,\n MarketSchema,\n type TagReference,\n} from '@polymarket/bindings/gamma';\nimport { unwrap } from '@polymarket/types';\nimport { z } from 'zod';\nimport type { BaseClient } from '../clients';\nimport {\n makeErrorGuard,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n} from '../errors';\nimport { parseUserInput } from '../input';\nimport { PageSizeSchema, type Paginated, paginate } from '../pagination';\nimport { parsePolymarketSlugUrl } from '../polymarket-url';\nimport { validateWith } from '../response';\nimport { withRateLimitRetry } from '../retry';\nimport {\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.object({\n ascending: z.boolean().optional(),\n closed: z.boolean().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 positionIds: z.array(PositionIdSchema).optional(),\n questionIds: z.array(z.string()).optional(),\n relatedTags: z.boolean().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 volumeNumMax: z.number().optional(),\n volumeNumMin: z.number().optional(),\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 | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const ListMarketsError = makeErrorGuard(\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n);\n\n/**\n * Lists markets.\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 * @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): Paginated<Market[]> {\n const params = parseUserInput(request, ListMarketsRequestSchema);\n\n return paginate(\n (cursor) =>\n client.gamma\n .get('/markets/keyset', {\n params: toMarketsSearchParams({\n ...params,\n cursor: cursor ?? params.cursor,\n }),\n })\n .andThen(validateWith(ListMarketsKeysetResponseSchema))\n .map((response) => ({\n items: response.items,\n hasMore: response.nextCursor !== undefined,\n nextCursor: response.nextCursor,\n })),\n params.cursor,\n );\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 | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const ListComboMarketsError = makeErrorGuard(\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): Paginated<ComboMarket[]> {\n const params = parseUserInput(request, ListComboMarketsRequestSchema);\n\n return paginate(\n (cursor) =>\n client.rfq\n .get('/v1/rfq/combo-markets', {\n params: toComboMarketsSearchParams({\n ...params,\n cursor: cursor ?? params.cursor,\n }),\n })\n .andThen(validateWith(ListComboMarketsResponseSchema))\n .map((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 | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchMarketError = makeErrorGuard(\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://polymarket.com/event/some-market-slug',\n * });\n *\n * // market === Market\n * ```\n */\nexport async function fetchMarket(\n client: BaseClient,\n request: FetchMarketRequest,\n): Promise<Market> {\n const params = parseUserInput(request, FetchMarketRequestSchema);\n\n if ('id' in params) {\n return fetchMarketById(client, params);\n }\n\n if ('url' in params) {\n return fetchMarketBySlug(client, {\n includeTag: params.includeTag,\n locale: params.locale,\n slug: parsePolymarketSlugUrl(params.url, 'market'),\n });\n }\n\n return fetchMarketBySlug(client, params);\n}\n\nexport type FetchMarketTagsError =\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchMarketTagsError = makeErrorGuard(\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): Promise<TagReference[]> {\n const params = parseUserInput(request, FetchMarketTagsRequestSchema);\n\n return unwrap(\n client.gamma\n .get(`markets/${params.id}/tags`)\n .andThen(validateWith(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 | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const ListMarketHoldersError = makeErrorGuard(\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 automatically.\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): Paginated<MetaHolder[]> {\n const { conditionIds, cursor, includePnl, minBalance, pageSize } =\n parseUserInput(request, ListMarketHoldersRequestSchema);\n\n return paginate(\n (cursor) =>\n withRateLimitRetry(() =>\n client.data.get('/v2/holders', {\n params: toDataSearchParams({\n condition: conditionIds,\n limit: pageSize,\n cursor,\n includePnl,\n minBalance,\n }),\n }),\n ).andThen(validateWith(ListMarketHoldersResponseSchema)),\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 | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const ListPriceHistoryError = makeErrorGuard(\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 automatically.\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): Paginated<PriceHistoryPoint[]> {\n const { assetId, cursor, pageSize, ...params } = parseUserInput(\n request,\n ListPriceHistoryRequestSchema,\n );\n\n return paginate(\n (cursor) =>\n withRateLimitRetry(() =>\n client.data.get('/v2/prices-history', {\n params: toDataSearchParams({\n ...params,\n tokenId: assetId,\n limit: pageSize,\n cursor,\n }),\n }),\n ).andThen(validateWith(ListPriceHistoryResponseSchema)),\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 | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchOpenInterestError = makeErrorGuard(\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 * automatically.\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): Promise<OpenInterest[]> {\n const { conditionIds } = parseUserInput(\n request,\n FetchOpenInterestRequestSchema,\n );\n\n return unwrap(\n withRateLimitRetry(() =>\n client.data.get('/v2/oi', {\n params: toDataSearchParams({ condition: conditionIds }),\n }),\n ).andThen(validateWith(FetchOpenInterestResponseSchema)),\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): Promise<Market> {\n return unwrap(\n client.gamma\n .get(`markets/slug/${params.slug}`, {\n params: toSearchParams(\n {\n includeTag: params.includeTag,\n locale: params.locale,\n },\n snakeCase(),\n ),\n })\n .andThen(validateWith(MarketSchema)),\n );\n}\n\nasync function fetchMarketById(\n client: BaseClient,\n params: z.output<typeof FetchMarketByIdRequestSchema>,\n): Promise<Market> {\n return unwrap(\n client.gamma\n .get(`markets/${params.id}`, {\n params: toSearchParams(\n {\n includeTag: params.includeTag,\n locale: params.locale,\n },\n snakeCase(),\n ),\n })\n .andThen(validateWith(MarketSchema)),\n );\n}\n","import {\n type RateLimitError,\n RequestRejectedError,\n TradingRestriction,\n type TransportError,\n} from '../../errors';\n\nexport function mapTradingRestrictionError(\n error: RateLimitError | RequestRejectedError | TransportError,\n): RateLimitError | RequestRejectedError | 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 '@polymarket/bindings/clob';\nimport { unwrap } from '@polymarket/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 { validateWith } from '../../response';\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 unwrap(\n client.secureClob\n .del(path, {\n json: payload,\n rateLimitBucket: 'cancel',\n })\n .mapErr(mapTradingRestrictionError)\n .andThen(validateWith(CancelOrdersResponseSchema)),\n );\n}\n","import { ClobAssetIdSchema } from '@polymarket/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 '@polymarket/bindings';\nimport type { OrderBook, OrderBookLevel } from '@polymarket/bindings/clob';\nimport { invariant } from '@polymarket/types';\nimport { z } from 'zod';\nimport type { BaseClient } from '../../clients';\nimport {\n InsufficientLiquidityError,\n makeErrorGuard,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n} from '../../errors';\nimport { parseUserInput } from '../../input';\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 | InsufficientLiquidityError\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const EstimateMarketPriceError = makeErrorGuard(\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): Promise<number> {\n const params = parseUserInput(request, EstimateMarketPriceRequestSchema);\n const amount = params.side === OrderSide.BUY ? params.amount : params.shares;\n\n return resolveEstimatedMarketPrice(client, {\n amount,\n assetId: params.assetId,\n orderType: params.orderType,\n side: params.side,\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): Promise<number> {\n const orderBook = await fetchOrderBook(client, {\n assetId: params.assetId,\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 { OrderType } from '@polymarket/bindings';\nimport {\n type OrderResponse,\n OrderResponseSchema,\n type OrderResponses,\n OrderResponsesSchema,\n} from '@polymarket/bindings/clob';\nimport { invariant, unwrap } from '@polymarket/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 { validateWith } from '../../response';\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 const payload = createSendOrderPayload(client, order);\n\n return unwrap(\n client.secureClob\n .post('/order', {\n json: payload,\n rateLimitBucket: 'order',\n })\n .mapErr(mapTradingRestrictionError)\n .andThen(validateWith(OrderResponseSchema)),\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 const payload = orders.map((order) =>\n createSendOrderPayload(client, order),\n );\n\n return unwrap(\n client.secureClob\n .post('/orders', {\n json: payload,\n rateLimitBucket: 'order',\n })\n .mapErr(mapTradingRestrictionError)\n .andThen(validateWith(OrderResponsesSchema)),\n );\n };\n}\n\nfunction createSendOrderPayload(client: BaseSecureClient, order: SignedOrder) {\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 {\n type ComboConditionId,\n type ConditionId,\n type PositionId,\n type TokenId,\n toComboConditionId,\n toConditionId,\n toPositionId,\n} from '@polymarket/bindings';\nimport type { Tagged } from '@polymarket/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 '@polymarket/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 '@polymarket/bindings';\nimport type { EvmAddress } from '@polymarket/types';\nimport { invariant } from '@polymarket/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 return isV2PositionId(assetId)\n ? client.environment.contracts.exchangeV3\n : resolveExchangeAddress(client, negRisk);\n}\n","import { OrderSide, type TickSizeValue } from '@polymarket/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 '@polymarket/bindings';\nimport type { MarketFeeInfo, MarketInfo } from '@polymarket/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 '@polymarket/bindings';\nimport type { EvmAddress } from '@polymarket/types';\nimport { z } from 'zod';\nimport type { BaseSecureClient } from '../../clients';\nimport { UserInputError } from '../../errors';\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 return {\n assetId: params.assetId,\n builderCode: params.builderCode,\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 '@polymarket/bindings';\nimport { type EvmAddress, invariant } from '@polymarket/types';\nimport { z } from 'zod';\nimport type { BaseSecureClient } from '../../clients';\nimport { UnexpectedResponseError, UserInputError } from '../../errors';\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 context = await resolveMarketOrderContext(\n client,\n params,\n params.assetId,\n );\n const amounts = computeMarketOrderAmounts({\n amount: context.resolvedAmount,\n price: context.price,\n protectPrice: hasProtectedPrice(params),\n side: params.side,\n tickSize: context.tickSize,\n });\n\n return {\n assetId: params.assetId,\n builderCode: params.builderCode,\n chainId: client.environment.chainId,\n exchangeAddress: context.exchangeAddress,\n expiration: 0,\n funderAddress: context.funderAddress,\n offeredAmount: amounts.offeredAmount,\n orderType: params.orderType,\n side: params.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 '@polymarket/bindings';\nimport { SignatureType } from '@polymarket/bindings/clob';\nimport {\n type Erc1271Signature,\n type EvmAddress,\n type EvmSignature,\n expectErc1271Signature,\n expectHexString,\n type HexString,\n} from '@polymarket/types';\nimport { AbiParameters, Bytes, Hash } from 'ox';\nimport type { TypedDataField, TypedDataPayload } from './types';\n\nconst PROTOCOL_NAME = 'Polymarket 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 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 '@polymarket/types';\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 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: 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 '@polymarket/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 '@polymarket/bindings';\nimport type { OrderResponse, SignatureType } from '@polymarket/bindings/clob';\nimport type {\n Erc1271Signature,\n EvmAddress,\n EvmSignature,\n HexString,\n SessionSignerSignature,\n} from '@polymarket/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 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 '@polymarket/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 '@polymarket/bindings';\nimport type {\n AcceptedOrderResponse,\n ClobTrade,\n} from '@polymarket/bindings/clob';\nimport { delay } from '@polymarket/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 '@polymarket/bindings';\nimport { AssetType } from '@polymarket/bindings/clob';\nimport { type EvmAddress, isSameEvmAddress } from '@polymarket/types';\nimport type { BaseSecureClient } from '../../clients';\nimport { fetchBalanceAllowance } from '../account';\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 =\n params.side === OrderSide.BUY\n ? AssetType.COLLATERAL\n : AssetType.CONDITIONAL;\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 '@polymarket/bindings';\nimport type { OrderResponse } from '@polymarket/bindings/clob';\nimport { AssetType } from '@polymarket/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 { resolveCurrentAllowance } 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:\n order.side === OrderSide.BUY\n ? AssetType.COLLATERAL\n : AssetType.CONDITIONAL,\n tokenId: order.side === OrderSide.SELL ? assetId : undefined,\n });\n\n return true;\n}\n","import { encode } from '@msgpack/msgpack';\nimport type { EvmSignature, PrivateKey } from '@polymarket/types';\nimport { expectEvmSignature } from '@polymarket/types';\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 return {\n domain: {\n chainId: request.chainId,\n name: 'Polymarket',\n version: '1',\n },\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 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","/** 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 { ResultAsync } from '@polymarket/types';\nimport ky, { type KyInstance } from 'ky';\nimport { RateLimitError, RequestRejectedError, TransportError } from './errors';\nimport {\n parseRateLimitHeaders,\n type RateLimitBucket,\n type RateLimitUpdate,\n type RateLimitUpdateListener,\n} from './rate-limit';\n\nexport type ServiceRequest = {\n method: 'DELETE' | 'GET' | 'PATCH' | 'POST';\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 root: string;\n headers?: HeadersInit;\n resolveHeaders?: RequestHeadersResolver;\n onRateLimitUpdate?: RateLimitUpdateListener;\n};\n\n/**\n * Request timeout in milliseconds, or `false` to disable the timeout.\n * Defaults to the transport's standard timeout.\n */\ntype ServiceClientTimeout = number | false;\n\ntype ServiceClientRequestOptions = {\n /** Rate-limit bucket supplied by the action that owns the request. */\n rateLimitBucket?: RateLimitBucket;\n timeout?: ServiceClientTimeout;\n};\n\nexport type ServiceClientGetOptions = ServiceClientRequestOptions & {\n headers?: HeadersInit;\n params?: URLSearchParams;\n};\n\nexport type ServiceClientPostOptions = ServiceClientRequestOptions & {\n headers?: HeadersInit;\n json?: unknown;\n};\n\nexport type ServiceClientPatchOptions = ServiceClientRequestOptions & {\n headers?: HeadersInit;\n json?: unknown;\n};\n\nexport type ServiceClientDeleteOptions = ServiceClientRequestOptions & {\n headers?: HeadersInit;\n json?: unknown;\n params?: URLSearchParams;\n};\n\n/**\n * Internal wrapper around a service-scoped `ky` instance.\n */\nexport class ServiceClient {\n readonly #client: KyInstance;\n readonly #headers?: HeadersInit;\n readonly #resolveHeaders?: RequestHeadersResolver;\n readonly #onRateLimitUpdate?: RateLimitUpdateListener;\n\n constructor({\n root,\n headers,\n resolveHeaders,\n onRateLimitUpdate,\n }: ServiceClientConfig) {\n this.#client = ky.create({ prefixUrl: root, throwHttpErrors: false });\n this.#headers = headers;\n this.#resolveHeaders = resolveHeaders;\n this.#onRateLimitUpdate = onRateLimitUpdate;\n }\n\n get(\n path: string,\n options: ServiceClientGetOptions = {},\n ): ResultAsync<\n Response,\n RateLimitError | RequestRejectedError | TransportError\n > {\n return this.#request('GET', path, options);\n }\n\n post(\n path: string,\n options: ServiceClientPostOptions = {},\n ): ResultAsync<\n Response,\n RateLimitError | RequestRejectedError | TransportError\n > {\n return this.#request('POST', path, options);\n }\n\n patch(\n path: string,\n options: ServiceClientPatchOptions = {},\n ): ResultAsync<\n Response,\n RateLimitError | RequestRejectedError | TransportError\n > {\n return this.#request('PATCH', path, options);\n }\n\n del(\n path: string,\n options: ServiceClientDeleteOptions = {},\n ): ResultAsync<\n Response,\n RateLimitError | RequestRejectedError | TransportError\n > {\n return this.#request('DELETE', path, options);\n }\n\n #normalizePath(path: string) {\n return path.startsWith('/') ? path.slice(1) : path;\n }\n\n #request(\n method: ServiceRequest['method'],\n path: string,\n options:\n | ServiceClientDeleteOptions\n | ServiceClientGetOptions\n | ServiceClientPatchOptions\n | ServiceClientPostOptions,\n ): ResultAsync<\n Response,\n RateLimitError | RequestRejectedError | TransportError\n > {\n return this.#toResult(\n this.#send(method, path, options),\n options.rateLimitBucket,\n );\n }\n\n async #send(\n method: ServiceRequest['method'],\n path: string,\n options:\n | ServiceClientDeleteOptions\n | ServiceClientGetOptions\n | ServiceClientPatchOptions\n | ServiceClientPostOptions,\n ): Promise<Response> {\n const request = this.#createRequest(method, path, options);\n const resolvedHeaders = await this.#resolveHeaders?.(request);\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 this.#client(this.#normalizePath(path), {\n body: request.body,\n headers,\n method,\n searchParams: request.params,\n ...(options.timeout !== undefined && { timeout: options.timeout }),\n });\n }\n\n #createRequest(\n method: ServiceRequest['method'],\n path: string,\n options:\n | ServiceClientDeleteOptions\n | ServiceClientGetOptions\n | ServiceClientPatchOptions\n | ServiceClientPostOptions,\n ): ServiceRequest {\n return {\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 #toResult(\n promise: Promise<Response>,\n rateLimitBucket?: RateLimitBucket,\n ): ResultAsync<\n Response,\n RateLimitError | RequestRejectedError | TransportError\n > {\n return ResultAsync.fromPromise(\n promise.then(async (response) => {\n const rateLimit = parseRateLimitHeaders(\n response.headers,\n rateLimitBucket,\n );\n if (rateLimit !== undefined) {\n this.#notifyRateLimitUpdate(rateLimit);\n }\n\n if (response.ok) {\n return response;\n }\n\n const retryAfter = this.#parseRetryAfterHeader(response);\n\n if (response.status === 429) {\n throw new RateLimitError(\n `Request to ${response.url} was rate limited`,\n { rateLimit, retryAfter },\n );\n }\n\n const {\n code,\n message,\n retryAfter: retryAfterSeconds,\n } = await this.#extractResponseError(response);\n throw new RequestRejectedError(message, {\n code,\n retryAfter: retryAfter ?? retryAfterSeconds,\n status: response.status,\n });\n }),\n (error) => {\n if (\n error instanceof RateLimitError ||\n error instanceof RequestRejectedError\n ) {\n return error;\n }\n\n return TransportError.fromError(error);\n },\n );\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 || !/^\\d+$/.test(value)) {\n return undefined;\n }\n\n return Number(value);\n }\n\n async #extractResponseError(\n response: Response,\n ): Promise<{ message: string; code?: string; retryAfter?: number }> {\n const contentType = response.headers.get('content-type')?.toLowerCase();\n\n if (contentType?.includes('application/json')) {\n const {\n error,\n code,\n retry_after_seconds: retryAfterSeconds,\n } = await response\n .clone()\n .json()\n .catch(() => ({}));\n if (error) {\n return {\n message: `${String(error)} (${response.url})`,\n ...(typeof code === 'string' && code !== '' ? { code } : {}),\n ...(typeof retryAfterSeconds === 'number' &&\n Number.isFinite(retryAfterSeconds) &&\n retryAfterSeconds >= 0\n ? { retryAfter: retryAfterSeconds }\n : {}),\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 '@polymarket/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","import {\n setNonBlockingInterval,\n setNonBlockingTimeout,\n} from '@polymarket/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 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};\n\nexport class ReconnectScheduler {\n #timer: ReturnType<typeof setTimeout> | undefined;\n #attempt = 0;\n\n schedule(options: ScheduleReconnectOptions): void {\n if (this.#timer !== undefined || !options.shouldReconnect()) {\n return;\n }\n\n const delay = 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 #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 }\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 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 socket.addEventListener('close', () => resolve(), { once: true });\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\n const onOpen = () => {\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 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 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 {\n type PaginationCursor,\n PaginationCursorSchema,\n TxHashSchema,\n toPaginationCursor,\n} from '@polymarket/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 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 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 '@polymarket/bindings/perps';\nimport { invariant, unwrap } from '@polymarket/types';\nimport { z } from 'zod';\nimport { snakeCase, toSearchParams } from '../../../actions/params';\nimport { RequestRejectedError, UserInputError } from '../../../errors';\nimport { parseUserInput } from '../../../input';\nimport { type Page, type Paginated, paginate } from '../../../pagination';\nimport { validateWith } from '../../../response';\nimport type { ServiceClient } from '../../../ServiceClient';\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 unwrap(\n api\n .get('/v1/account/balances')\n .andThen(validateWith(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 unwrap(\n api\n .get('/v1/account/portfolio')\n .andThen(validateWith(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 unwrap(\n api\n .get('/v1/account/stats')\n .andThen(validateWith(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 unwrap(\n api\n .get('/v1/account/auto-cancel')\n .andThen(validateWith(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 unwrap(\n api\n .get('/v1/account/config', {\n params: toPerpsSearchParams(params),\n })\n .andThen(validateWith(FetchPerpsAccountConfigResponseSchema)),\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 unwrap(\n api\n .get('/v1/account/open-orders', {\n params: toPerpsSearchParams(params),\n })\n .andThen(validateWith(FetchPerpsOpenOrdersResponseSchema)),\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 unwrap(\n api\n .get('/v1/account/orders', {\n params: toPerpsSearchParams(params),\n })\n .andThen(validateWith(FetchPerpsOrdersResponseSchema)),\n );\n}\n\nconst ListPerpsFillsRequestSchema = z.object({\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 /** 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 * @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 params: toPerpsSearchParams({\n startTimestamp: params.start,\n endTimestamp: params.end,\n sort: params.sort,\n cursor: cursor ?? params.cursor,\n }),\n })\n .andThen(validateWith(ListPerpsFillsResponseSchema))\n .map((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 = decodePerpsAccountCursor(\n pageCursor,\n PerpsDescendingAccountCursorStateSchema,\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 params: toPerpsSearchParams(searchParams),\n })\n .andThen(validateWith(ListPerpsFundingPaymentsResponseSchema))\n .map((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 = decodePerpsAccountCursor(\n pageCursor,\n PerpsDescendingAccountCursorStateSchema,\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 params: toPerpsSearchParams(searchParams),\n })\n .andThen(validateWith(ListPerpsDepositsResponseSchema))\n .map((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 = decodePerpsAccountCursor(\n pageCursor,\n PerpsDescendingAccountCursorStateSchema,\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 params: toPerpsSearchParams(searchParams),\n })\n .andThen(validateWith(ListPerpsWithdrawalsResponseSchema))\n .map((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 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 = decodePerpsAccountCursor(\n pageCursor,\n PerpsAscendingAccountCursorStateSchema,\n );\n }\n const { kind: _kind, ...searchParams } = state;\n\n return api\n .get('/v1/account/equity', {\n params: toPerpsSearchParams(searchParams),\n })\n .andThen(validateWith(ListPerpsEquityHistoryResponseSchema))\n .map((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 ? encodePerpsAccountCursor({\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 = decodePerpsAccountCursor(\n pageCursor,\n PerpsAscendingAccountCursorStateSchema,\n );\n }\n const { kind: _kind, ...searchParams } = state;\n\n return api\n .get('/v1/account/pnl', {\n params: toPerpsSearchParams(searchParams),\n })\n .andThen(validateWith(ListPerpsPnlHistoryResponseSchema))\n .map((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 ? encodePerpsAccountCursor({\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 = decodePerpsAccountCursor(\n pageCursor,\n PerpsNotificationsCursorStateSchema,\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 params: toPerpsSearchParams({\n cursor: state?.cursor,\n limit,\n sinceSeq,\n }),\n })\n .andThen(validateWith(ListPerpsNotificationsResponseSchema))\n .map((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 ? encodePerpsAccountCursor({\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 unwrap(\n api\n .get('/v1/account/notifications', {\n params: toPerpsSearchParams({ limit: 1 }),\n })\n .andThen(validateWith(FetchPerpsUnreadNotificationsCountResponseSchema)),\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 unwrap(\n api\n .post('/v1/account/notifications/read', { json: body })\n .andThen(validateWith(MarkPerpsNotificationsReadResponseSchema)),\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 decodePerpsAccountCursor<T>(\n cursor: PaginationCursor,\n schema: z.ZodType<T>,\n): T {\n try {\n return schema.parse(JSON.parse(atob(cursor)));\n } catch (error) {\n throw new UserInputError('Invalid Perps account pagination cursor', {\n cause: error,\n });\n }\n}\n\nfunction encodePerpsAccountCursor(\n state:\n | PerpsAscendingAccountCursorState\n | PerpsDescendingAccountCursorState\n | PerpsNotificationsCursorState,\n): PaginationCursor {\n return toPaginationCursor(btoa(JSON.stringify(state)));\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: encodePerpsAccountCursor({\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 {\n OrderSide,\n OrderSideSchema,\n toDecimalString,\n} from '@polymarket/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 type PerpsOrder,\n type PerpsOrderId,\n PerpsOrderIdSchema,\n type PerpsPortfolio,\n type PerpsPostOrderAck,\n PerpsPostOrderAckSchema,\n PerpsTimeInForce,\n PerpsTpSlKind,\n PerpsTpSlScope,\n type PerpsUpdateLeverageResult,\n PerpsUpdateLeverageResultSchema,\n} from '@polymarket/bindings/perps';\nimport type {\n PerpsOrderUpdateEvent,\n PerpsSessionEvent,\n} from '@polymarket/bindings/subscriptions';\nimport { expectPresent, invariant, unwrap } from '@polymarket/types';\nimport { z } from 'zod';\nimport {\n AutoCancelDailyLimitError,\n makeErrorGuard,\n RateLimitError,\n RequestRejectedError,\n SigningError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n} from '../../../errors';\nimport { parseUserInput } from '../../../input';\nimport { validateWith } from '../../../response';\nimport type { ServiceClient } from '../../../ServiceClient';\nimport type { PerpsSignedOp } from '../signing';\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});\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 /** 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 * 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 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 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 | PerpsPlaceIocOrderRequest\n | PerpsPlaceFokOrderRequest;\n\nconst PerpsOrderRequestSchema = z.discriminatedUnion('timeInForce', [\n PerpsPlaceGtcOrderRequestSchema,\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};\n\nconst PerpsTpSlTriggerSchema = z.object({\n triggerPrice: PerpsDecimalInputSchema,\n limitPrice: PerpsDecimalInputSchema.optional(),\n}) satisfies z.ZodType<PerpsTpSlTrigger>;\n\nconst PerpsPositionTpSlTriggerSchema = z.object({\n triggerPrice: PerpsDecimalInputSchema,\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};\n\ntype PerpsTpSlPairRequest =\n | { takeProfit: PerpsTpSlTrigger; stopLoss?: PerpsTpSlTrigger }\n | { takeProfit?: PerpsTpSlTrigger; stopLoss: PerpsTpSlTrigger };\n\nconst PerpsTpSlPairSchema = z.union([\n z.object({\n takeProfit: PerpsTpSlTriggerSchema,\n stopLoss: PerpsTpSlTriggerSchema.optional(),\n }),\n z.object({\n takeProfit: PerpsTpSlTriggerSchema.optional(),\n stopLoss: PerpsTpSlTriggerSchema,\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 /** @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 return await client.executeCommand(\n {\n op: ['createOrders', params.orders.map(toRawPerpsOrder)],\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-til-cancelled execution. */\n timeInForce: PerpsTimeInForce.GTC;\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 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 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-til-cancelled execution. */\n timeInForce: PerpsTimeInForce.GTC;\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;\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 /** 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;\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 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;\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 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;\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 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;\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 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;\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 [, update] = await client.executeCommandWithEvent(\n {\n op: ['createOrders', [toRawPerpsOrder(params)]],\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 orders: RawPerpsOrderInput[] = [toRawPerpsOrder(params)];\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 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 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;\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;\n /** Optional command expiration timestamp in milliseconds. */\n expiresAt?: number;\n };\n\nconst PerpsPositionTpSlRequiredPairSchema = z.union([\n z.object({\n takeProfit: PerpsPositionTpSlTriggerSchema,\n stopLoss: PerpsPositionTpSlTriggerSchema.optional(),\n }),\n z.object({\n takeProfit: PerpsPositionTpSlTriggerSchema.optional(),\n stopLoss: PerpsPositionTpSlTriggerSchema,\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 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: '0',\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: '0',\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 CancelPerpsOrderRequestSchema = z.union([\n z.object({\n orderId: PerpsOrderIdSchema,\n clientOrderId: z.undefined().optional(),\n expiresAt: z.number().int().positive().optional(),\n }),\n z.object({\n clientOrderId: PerpsClientOrderIdSchema,\n orderId: z.undefined().optional(),\n expiresAt: z.number().int().positive().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 =\n | {\n /** Order identifier to cancel. */\n orderId: number;\n clientOrderId?: never;\n /** Optional command expiration timestamp in milliseconds. */\n expiresAt?: number;\n }\n | {\n /** Caller-supplied idempotency identifier to cancel. */\n clientOrderId: string;\n orderId?: never;\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 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 })\n : await cancelPerpsOrders(client, {\n clientOrderIds: [params.clientOrderId],\n expiresAt: params.expiresAt,\n });\n return expectPresent(result, 'Expected Perps cancel order result.');\n}\n\nconst CancelPerpsOrdersRequestSchema = z.union([\n z.object({\n orderIds: z.array(PerpsOrderIdSchema).min(1),\n clientOrderIds: z.undefined().optional(),\n expiresAt: z.number().int().positive().optional(),\n }),\n z.object({\n clientOrderIds: z.array(PerpsClientOrderIdSchema).min(1),\n orderIds: z.undefined().optional(),\n expiresAt: z.number().int().positive().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 =\n | {\n /** Order identifiers to cancel. */\n orderIds: number[];\n clientOrderIds?: never;\n /** Optional command expiration timestamp in milliseconds. */\n expiresAt?: number;\n }\n | {\n /** Caller-supplied idempotency identifiers to cancel. */\n clientOrderIds: string[];\n orderIds?: never;\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 cancelPerpsOrders(\n client: PerpsCommandExecutor,\n request: CancelPerpsOrdersRequest,\n): Promise<PerpsCancelOrderResult[]> {\n const params = parseUserInput(request, CancelPerpsOrdersRequestSchema);\n if (params.orderIds !== undefined) {\n return await client.executeCommand(\n {\n op: ['cancelOrders', params.orderIds],\n expiresAt: params.expiresAt,\n },\n z.array(PerpsCancelOrderResultSchema),\n );\n }\n return await client.executeCommand(\n {\n op: ['cancelOrdersCOID', params.clientOrderIds],\n expiresAt: params.expiresAt,\n },\n z.array(PerpsCancelOrderResultSchema),\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 unwrap(\n client\n .patch('/v1/trade/auto-cancel', {\n json: {\n ...command,\n op: toPerpsCommandBodyOp(op),\n },\n })\n .andThen(validateWith(PerpsAutoCancelResponseSchema))\n .mapErr((error) =>\n 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}\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 unwrap(\n client\n .patch('/v1/trade/auto-cancel', {\n json: {\n ...command,\n op: toPerpsCommandBodyOp(op),\n },\n })\n .andThen(validateWith(PerpsAutoCancelResponseSchema)),\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 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];\n\ntype RawPerpsTpSlTriggerInput = readonly [\n boolean | undefined,\n string,\n PerpsTpSlKind,\n];\n\nfunction toRawPerpsOrder(\n order: z.output<typeof PerpsOrderRequestSchema>,\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 ];\n}\n\nfunction toRawPerpsTpSlOrder(request: {\n buy: boolean;\n instrumentId: PerpsInstrumentId;\n kind: PerpsTpSlKind;\n quantity: string;\n trigger: z.output<typeof PerpsTpSlTriggerSchema>;\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 [\n request.trigger.limitPrice === undefined ? true : undefined,\n toDecimalString(request.trigger.triggerPrice),\n request.kind,\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 '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 return body;\n}\n\nfunction toPerpsTpSlTriggerBody(trigger: RawPerpsTpSlTriggerInput) {\n const body: Record<string, unknown> = {\n tpsl: trigger[2],\n trp: trigger[1],\n };\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 {\n type PerpsAccountConfig,\n type PerpsAccountFill,\n type PerpsAccountFundingPayment,\n type PerpsAccountStats,\n type PerpsAutoCancelStatus,\n type PerpsBalance,\n type PerpsCancelOrderResult,\n type PerpsCommandAck,\n PerpsCommandAckSchema,\n type PerpsCredentials,\n type PerpsDeposit,\n type PerpsEquityPoint,\n type PerpsNotificationEntry,\n type PerpsOrder,\n type PerpsPnlPoint,\n type PerpsPortfolio,\n type PerpsPostOrderAck,\n type PerpsUpdateLeverageResult,\n type PerpsWithdrawal,\n} from '@polymarket/bindings/perps';\nimport {\n PerpsNotificationsResyncFrameSchema,\n type PerpsSessionEvent,\n PerpsSessionUpdateEventSchema,\n} from '@polymarket/bindings/subscriptions';\nimport { invariant, setNonBlockingTimeout, unwrap } from '@polymarket/types';\nimport { type Pushable, pushable } from 'it-pushable';\nimport { z } from 'zod';\nimport {\n type RateLimitError,\n RequestRejectedError,\n SigningError,\n TimeoutError,\n TransportError,\n type UnexpectedResponseError,\n type UserInputError,\n} from '../../errors';\nimport type { Paginated } from '../../pagination';\nimport { validateWith } from '../../response';\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 ListPerpsNotificationsRequest,\n type ListPerpsPnlHistoryRequest,\n type ListPerpsWithdrawalsRequest,\n listPerpsDeposits,\n listPerpsEquityHistory,\n listPerpsFills,\n listPerpsFundingPayments,\n listPerpsNotifications,\n listPerpsPnlHistory,\n listPerpsWithdrawals,\n type MarkPerpsNotificationsReadRequest,\n markPerpsNotificationsRead,\n} from './actions/account';\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 UpdatePerpsMarginRequest,\n updatePerpsLeverage,\n updatePerpsMargin,\n} from './actions/trading';\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 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, so the server signals dropped frames with resync\n// control frames instead. Those frames are parsed and dropped without a\n// public event until DEV-428 unifies them with SDK-synthesized resyncs.\nconst SERVER_RESYNC_CHANNELS: ReadonlySet<string> = new Set(['notifications']);\n\nconst PerpsResponseEnvelopeSchema = z\n .object({\n id: z.number().int().positive().optional(),\n data: z.unknown().optional(),\n })\n .passthrough();\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\nexport type {\n PerpsAutoCancelStatus,\n PerpsCancelOrderResult,\n PerpsPostOrderAck,\n PerpsUpdateLeverageResult,\n} from '@polymarket/bindings/perps';\nexport type { PerpsSessionEvent } from '@polymarket/bindings/subscriptions';\nexport type {\n FetchPerpsAccountConfigRequest,\n FetchPerpsOpenOrdersRequest,\n FetchPerpsOrdersRequest,\n ListPerpsDepositsRequest,\n ListPerpsEquityHistoryRequest,\n ListPerpsFillsRequest,\n ListPerpsFundingPaymentsRequest,\n ListPerpsNotificationsRequest,\n ListPerpsPnlHistoryRequest,\n ListPerpsWithdrawalsRequest,\n MarkPerpsNotificationsReadRequest,\n} from './actions/account';\nexport type {\n ArmPerpsAutoCancelRequest,\n CancelAllPerpsOrdersRequest,\n CancelPerpsOrderRequest,\n CancelPerpsOrdersRequest,\n DisarmPerpsAutoCancelRequest,\n PerpsOrderRequest,\n PerpsPlacedTpSlOrder,\n PerpsPlacedTpSlOrders,\n PerpsPlaceFokOrderRequest,\n PerpsPlaceGtcOrderRequest,\n PerpsPlaceIocOrderRequest,\n PerpsPositionTpSlTrigger,\n PerpsTpSlTrigger,\n PlacePerpsOrderRequest,\n PlacePerpsOrderResult,\n PlacePerpsOrderWithTpSlRequest,\n PlacePerpsOrderWithTpSlResult,\n PlacePerpsPositionTpSlRequest,\n PlacePerpsPositionTpSlResult,\n PostPerpsOrdersRequest,\n UpdatePerpsLeverageRequest,\n UpdatePerpsMarginRequest,\n} from './actions/trading';\nexport {\n ArmPerpsAutoCancelError,\n UpdatePerpsLeverageError,\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 chainId: number;\n credentials: PerpsCredentials;\n headers?: Record<string, string>;\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 = RequestRejectedError | TransportError;\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 | 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 #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 #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.#api = new ServiceClient({\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 * @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 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 *\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 * 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 /**\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\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 *\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 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 *\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.\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 returned status reflects whether the cancel happened.\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 * Each returned status reflects whether that cancel happened.\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 * 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\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 unwrap(\n this.#api\n .del(request.path, {\n json: {\n ...command,\n op: toPerpsCommandBodyOp(request.op),\n },\n })\n .andThen(validateWith(request.responseSchema)),\n );\n }\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 // Recognized but intentionally not surfaced as a session event until\n // DEV-428 unifies server resync frames with SDK-synthesized resyncs.\n if (PerpsNotificationsResyncFrameSchema.safeParse(rawMessage).success) {\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","import {\n type PaginationCursor,\n PaginationCursorSchema,\n toPaginationCursor,\n} from '@polymarket/bindings';\nimport { WalletType } from '@polymarket/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 PerpsDeleteProxyResponseSchema,\n type PerpsFeeScheduleEntry,\n type PerpsFundingRate,\n type PerpsInstrument,\n type PerpsInstrumentCategory,\n PerpsInstrumentCategorySchema,\n PerpsInstrumentIdSchema,\n type PerpsKlineInterval,\n PerpsKlineIntervalSchema,\n type PerpsPublicTrade,\n type PerpsTicker,\n PerpsTradeIdSchema,\n type PerpsWithdrawalId,\n PerpsWithdrawResponseSchema,\n} from '@polymarket/bindings/perps';\nimport {\n type EvmAddress,\n type EvmSignature,\n expectEvmAddress,\n expectPrivateKey,\n invariant,\n isPrivateKey,\n isSameEvmAddress,\n type PrivateKey,\n unwrap,\n} from '@polymarket/types';\nimport { Address, Secp256k1 } 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 RequestRejectedError,\n SigningError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n} from '../errors';\nimport { parseUserInput } from '../input';\nimport { type Paginated, paginate } from '../pagination';\nimport { validateWith } from '../response';\nimport {\n expectTransactionHandle,\n type SignerTransactionRequest,\n type TransactionHandle,\n type TypedDataPayload,\n} from '../types';\nimport type { PerpsSession } from '../websockets/perps/session';\nimport {\n createPerpsOpTypedDataPayload,\n type PerpsSignedOp,\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\nexport type {\n ArmPerpsAutoCancelRequest,\n CancelAllPerpsOrdersRequest,\n CancelPerpsOrderRequest,\n CancelPerpsOrdersRequest,\n DisarmPerpsAutoCancelRequest,\n FetchPerpsAccountConfigRequest,\n FetchPerpsOpenOrdersRequest,\n FetchPerpsOrdersRequest,\n ListPerpsDepositsRequest,\n ListPerpsEquityHistoryRequest,\n ListPerpsFillsRequest,\n ListPerpsFundingPaymentsRequest,\n ListPerpsNotificationsRequest,\n ListPerpsPnlHistoryRequest,\n ListPerpsWithdrawalsRequest,\n MarkPerpsNotificationsReadRequest,\n PerpsAutoCancelStatus,\n PerpsCancelOrderResult,\n PerpsOrderRequest,\n PerpsPlacedTpSlOrder,\n PerpsPlacedTpSlOrders,\n PerpsPlaceFokOrderRequest,\n PerpsPlaceGtcOrderRequest,\n PerpsPlaceIocOrderRequest,\n PerpsPositionTpSlTrigger,\n PerpsPostOrderAck,\n PerpsSession,\n PerpsSessionAccountError,\n PerpsSessionEvent,\n PerpsSessionLifecycleError,\n PerpsSessionTradingError,\n PerpsTpSlTrigger,\n PerpsUpdateLeverageResult,\n PlacePerpsOrderRequest,\n PlacePerpsOrderResult,\n PlacePerpsOrderWithTpSlRequest,\n PlacePerpsOrderWithTpSlResult,\n PlacePerpsPositionTpSlRequest,\n PlacePerpsPositionTpSlResult,\n PostPerpsOrdersRequest,\n UpdatePerpsLeverageRequest,\n UpdatePerpsMarginRequest,\n} from '../websockets/perps/session';\nexport {\n ArmPerpsAutoCancelError,\n UpdatePerpsLeverageError,\n UpdatePerpsMarginError,\n} from '../websockets/perps/session';\n\nimport { snakeCase, toSearchParams } from './params';\n\ntype PerpsPublicReadError =\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\n\nconst PerpsPublicReadError = makeErrorGuard(\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): Promise<PerpsInstrument[]> {\n const params = parseUserInput(request, FetchPerpsInstrumentsRequestSchema);\n\n return unwrap(\n client.perps\n .get('/v1/info/instruments', {\n params: toSearchParams(params, snakeCase()),\n })\n .andThen(validateWith(FetchPerpsInstrumentsResponseSchema)),\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): Promise<PerpsTicker> {\n const params = parseUserInput(request, FetchPerpsTickerRequestSchema);\n const [ticker] = await fetchPerpsTickers(client, params);\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): Promise<PerpsTicker[]> {\n const params = parseUserInput(request, FetchPerpsTickersRequestSchema);\n const query = toSearchParams(params, snakeCase());\n const [tickers, statistics] = await Promise.all([\n unwrap(\n client.perps\n .get('/v1/info/tickers', { params: query })\n .andThen(validateWith(FetchPerpsTickersResponseSchema)),\n ),\n unwrap(\n client.perps\n .get('/v1/info/statistics', { params: query })\n .andThen(validateWith(FetchPerpsStatisticsResponseSchema)),\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): Promise<PerpsBook> {\n const params = parseUserInput(request, FetchPerpsBookRequestSchema);\n\n return unwrap(\n client.perps\n .get('/v1/info/book', {\n params: toSearchParams(params, snakeCase()),\n })\n .andThen(validateWith(PerpsBookSchema)),\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): Paginated<PerpsCandle[]> {\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 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 .andThen(validateWith(FetchPerpsCandlesResponseSchema))\n .map((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 ? encodePerpsCursor({\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): Paginated<PerpsFundingRate[]> {\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 params: toSearchParams(\n {\n endTimestamp: state.endTimestamp,\n instrumentId: state.instrumentId,\n startTimestamp: state.startTimestamp,\n },\n snakeCase(),\n ),\n })\n .andThen(validateWith(FetchPerpsFundingHistoryResponseSchema))\n .map((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 ? encodePerpsCursor({\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): Paginated<PerpsPublicTrade[]> {\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 params: toSearchParams(\n {\n endTimestamp: state.endTimestamp,\n instrumentId: state.instrumentId,\n startTimestamp: state.startTimestamp,\n },\n snakeCase(),\n ),\n })\n .andThen(validateWith(FetchPerpsTradesResponseSchema))\n .map((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 ? encodePerpsCursor({\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 | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError;\n/**\n * @experimental This API may change in a breaking way in any release, including patch releases.\n */\nexport const FetchPerpsFeesError = makeErrorGuard(\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\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): Promise<PerpsFeeScheduleEntry[]> {\n const response = await unwrap(\n client.perps\n .get('/v1/info/fees')\n .andThen(validateWith(FetchPerpsFeesResponseSchema)),\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 decodePerpsCursor(cursor, PerpsCandlesCursorStateSchema);\n}\n\nfunction decodePerpsFundingCursor(\n cursor: PaginationCursor,\n): PerpsFundingCursorState {\n return decodePerpsCursor(cursor, PerpsFundingCursorStateSchema);\n}\n\nfunction decodePerpsTradesCursor(\n cursor: PaginationCursor,\n): PerpsTradesCursorState {\n return decodePerpsCursor(cursor, PerpsTradesCursorStateSchema);\n}\n\nfunction decodePerpsCursor<T>(\n cursor: PaginationCursor,\n schema: z.ZodType<T>,\n): T {\n try {\n return schema.parse(JSON.parse(atob(cursor)));\n } catch (error) {\n throw new UserInputError('Invalid Perps pagination cursor', {\n cause: error,\n });\n }\n}\n\nfunction encodePerpsCursor(\n state:\n | PerpsCandlesCursorState\n | PerpsFundingCursorState\n | PerpsTradesCursorState,\n): PaginationCursor {\n return toPaginationCursor(btoa(JSON.stringify(state)));\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 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 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 /** 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 /** 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\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 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 * 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 * @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(credentials);\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 unwrap(\n client.perps\n .del('/v1/account/proxy', {\n json: {\n op,\n salt,\n sig: signature,\n ts: timestamp,\n },\n })\n .andThen(validateWith(PerpsDeleteProxyResponseSchema)),\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 unwrap(\n client.perps\n .post('/v1/account/withdraw', {\n json: {\n op,\n salt,\n sig: signature,\n ts: timestamp,\n },\n })\n .andThen(validateWith(PerpsWithdrawResponseSchema)),\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\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 unwrap(\n client.perps\n .post('/v1/account/proxy', { json: body })\n .andThen(validateWith(PerpsCreateProxyResponseSchema)),\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 unwrap(\n client.perps\n .get('/v1/account/credentials', {\n headers: perpsCredentialHeaders(credentials),\n })\n .andThen(validateWith(PerpsCredentialsResponseSchema)),\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 return {\n domain: {\n chainId: request.chainId,\n name: 'Polymarket',\n verifyingContract: request.contract,\n version: '1',\n },\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 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 return {\n domain: {\n chainId: request.chainId,\n name: 'Polymarket',\n version: '1',\n },\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 },\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 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\nfunction 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 {\n ComboConditionIdSchema,\n EventIdSchema,\n EvmAddressSchema,\n PaginationCursorSchema,\n} from '@polymarket/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 PositionStatusSchema,\n SortDirectionSchema,\n UserPnlFidelitySchema,\n UserPnlIntervalSchema,\n type UserPnlSeries,\n type UserStats,\n type UserVolume,\n} from '@polymarket/bindings/data';\nimport { unwrap } from '@polymarket/types';\nimport { z } from 'zod';\nimport type { BaseClient } from '../clients';\nimport {\n makeErrorGuard,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n} from '../errors';\nimport { parseUserInput } from '../input';\nimport { PageSizeSchema, type Paginated, paginate } from '../pagination';\nimport { readBlob, validateWith } from '../response';\nimport { withRateLimitRetry } from '../retry';\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 '@polymarket/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 /** OPEN (default, includes REDEEMABLE rows) | REDEEMABLE | CLOSED. */\n status: PositionStatusSchema.optional(),\n eventId: z.array(EventIdSchema).min(1).optional(),\n filterType: PositionFilterTypeSchema.optional(),\n filterAmount: z.number().min(0).optional(),\n includeArchived: z.boolean().optional(),\n /** Defaults by status: CURRENT_VALUE for OPEN/REDEEMABLE, REALIZED_PNL for CLOSED. */\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\nexport type ListPositionsRequest = z.input<typeof ListPositionsRequestSchema>;\n\nexport type ListPositionsError =\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const ListPositionsError = makeErrorGuard(\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, and `'CLOSED'` lists exited positions. Every row\n * carries `redeemable`/`mergeable` flags and fee-exclusive entry economics. A\n * dust floor of 0.1 shares applies on OPEN/REDEEMABLE unless\n * `filterType`/`filterAmount` say otherwise. `conditionId` accepts at most\n * 20 distinct ids (with `user`). `pageSize` defaults to 100 (max 1000).\n * Transient rate limits are retried automatically.\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): Paginated<Position[]> {\n const { cursor, pageSize, window, ...params } = parseUserInput(\n request,\n ListPositionsRequestSchema,\n );\n\n return paginate(\n (cursor) =>\n withRateLimitRetry(() =>\n client.data.get('/v2/positions', {\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 ).andThen(validateWith(ListPositionsResponseSchema)),\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 | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const ListComboPositionsError = makeErrorGuard(\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 automatically.\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): Paginated<ComboPosition[]> {\n const { cursor, pageSize, ...params } = parseUserInput(\n request,\n ListComboPositionsRequestSchemaChecked,\n );\n\n return paginate(\n (cursor) =>\n withRateLimitRetry(() =>\n client.data.get('/v2/positions/combos', {\n params: toDataSearchParams({ ...params, limit: pageSize, cursor }),\n }),\n ).andThen(validateWith(ListComboPositionsResponseSchema)),\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 | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchPortfolioValueError = makeErrorGuard(\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): Promise<PortfolioValue> {\n const { conditionIds, ...params } = parseUserInput(\n request,\n FetchPortfolioValueRequestSchema,\n );\n\n return unwrap(\n withRateLimitRetry(() =>\n client.data.get('/v2/value', {\n params: toDataSearchParams({\n ...params,\n condition: conditionIds,\n }),\n }),\n ).andThen(validateWith(FetchPortfolioValueResponseSchema)),\n );\n}\n\nconst FetchUserStatsRequestSchema = z.object({\n user: EvmAddressSchema,\n});\n\nexport type FetchUserStatsRequest = z.input<typeof FetchUserStatsRequestSchema>;\n\nexport type FetchUserStatsError =\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchUserStatsError = makeErrorGuard(\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): Promise<UserStats | null> {\n const params = parseUserInput(request, FetchUserStatsRequestSchema);\n\n return unwrap(\n withRateLimitRetry(() =>\n client.data.get('/v2/user-stats', {\n params: toDataSearchParams(params),\n }),\n ).andThen(validateWith(FetchUserStatsResponseSchema)),\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 | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchUserPnlError = makeErrorGuard(\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): Promise<UserPnlSeries> {\n const params = parseUserInput(request, FetchUserPnlRequestSchema);\n\n return unwrap(\n withRateLimitRetry(() =>\n client.data.get('/v2/user-pnl', {\n params: toDataSearchParams(params),\n }),\n ).andThen(validateWith(FetchUserPnlResponseSchema)),\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 | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchUserVolumeError = makeErrorGuard(\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): Promise<UserVolume> {\n const { window, ...params } = parseUserInput(\n request,\n FetchUserVolumeRequestSchema,\n );\n\n return unwrap(\n withRateLimitRetry(() =>\n client.data.get('/v2/user-volume', {\n params: toDataSearchParams({ ...params, ...window }),\n }),\n ).andThen(validateWith(FetchUserVolumeResponseSchema)),\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 | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const DownloadAccountingSnapshotError = makeErrorGuard(\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): Promise<Blob> {\n const params = parseUserInput(\n request,\n DownloadAccountingSnapshotRequestSchema,\n );\n\n return unwrap(\n client.data\n .get('/v1/accounting/snapshot', {\n params: toLegacyDataSearchParams(params),\n })\n .andThen(readBlob),\n );\n}\n","import type {\n ComboConditionId,\n ConditionId,\n MarketId,\n PositionId,\n TokenId,\n} from '@polymarket/bindings';\nimport {\n ConditionIdSchema,\n MarketIdSchema,\n PositionIdSchema,\n} from '@polymarket/bindings';\nimport { type Market, WalletType } from '@polymarket/bindings/gamma';\nimport {\n type EvmAddress,\n type EvmSignature,\n invariant,\n isPresent,\n} from '@polymarket/types';\nimport { z } from 'zod';\nimport {\n combinatorialPrepareConditionCall,\n ctfMergePositionsCall,\n ctfRedeemPositionsCall,\n ctfSplitPositionCall,\n decodeErc1155BalanceOfBatchResult,\n decodeErc1155BalanceOfResult,\n erc1155BalanceOfBatchCall,\n erc1155BalanceOfCall,\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';\n\nenum PositionProtocol {\n CTF = 'ctf',\n V2 = 'v2',\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 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 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 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 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 return {\n ...marketContext,\n positionErc1155Address: client.environment.contracts.positionManager,\n };\n }\n\n return {\n ...marketContext,\n adapterAddress: marketContext.negRisk\n ? client.environment.contracts.negRiskCollateralAdapter\n : client.environment.contracts.collateralAdapter,\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\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\nfunction 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 (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 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 return {\n marketId: market.id,\n conditionId: market.conditionId,\n protocol: PositionProtocol.V2,\n outcomeIds: [yesPositionId, noPositionId],\n };\n }\n\n throw new UnexpectedResponseError(\n `Missing tradeable outcome IDs for ${context}`,\n );\n}\n\nasync function prepareMarketRedemptionCalls(\n client: BaseSecureClient,\n context: MarketPositionContext,\n): Promise<TransactionCall[]> {\n if (context.protocol === PositionProtocol.CTF) {\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 {\n type PublicProfile,\n PublicProfileSchema,\n} from '@polymarket/bindings/gamma';\nimport { err, ok, unwrap } from '@polymarket/types';\nimport { z } from 'zod';\nimport type { BaseClient } from '../clients';\nimport {\n makeErrorGuard,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n UserInputError,\n} from '../errors';\nimport { parseUserInput } from '../input';\nimport { validateWith } from '../response';\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 | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchPublicProfileError = makeErrorGuard(\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): Promise<PublicProfile | null> {\n const params = parseUserInput(request, FetchPublicProfileRequestSchema);\n\n return unwrap(\n client.gamma\n .get('/public-profile', {\n params: toSearchParams(params, snakeCase()),\n })\n .andThen(validateWith(PublicProfileSchema))\n .orElse((error) => {\n if (error instanceof RequestRejectedError && error.status === 404) {\n return ok(null);\n }\n\n return err(error);\n }),\n );\n}\n","import type {\n BuilderCode,\n DecimalString,\n EpochMilliseconds,\n PositionId,\n TxHash,\n} from '@polymarket/bindings';\nimport {\n OrderSide,\n OrderSideSchema,\n toBaseUnits,\n toBuilderCode,\n toPositionId,\n toRfqId,\n toRfqQuoteId,\n} from '@polymarket/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 '@polymarket/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 '@polymarket/bindings/combos';\nimport type { EvmSignature } from '@polymarket/types';\nimport { delay, PolymarketError, unwrap } from '@polymarket/types';\nimport { z } from 'zod';\nimport type { BaseSecureClient } from '../clients';\nimport {\n CancelledSigningError,\n ConnectionLostError,\n makeErrorGuard,\n RateLimitError,\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 { validateWith } from '../response';\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 '@polymarket/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 PolymarketError {\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 PolymarketError {\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 PolymarketError {\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 PolymarketError {\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\ntype BuilderGatewayRequestError =\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError;\n\nfunction toRfqRequestRejection(\n error: BuilderGatewayRequestError,\n):\n | RateLimitError\n | RfqRequestRejectedError\n | TransportError\n | UnexpectedResponseError {\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 unwrap(\n client.builderGateway\n .post(BUILDER_RFQ_REQUESTS_PATH, {\n json: request,\n timeout: CREATE_QUOTE_TIMEOUT_MS,\n })\n .andThen(validateWith(BuilderRfqCreateResponseSchema))\n .mapErr(toRfqRequestRejection),\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\n .post(\n `${BUILDER_RFQ_REQUESTS_PATH}/${encodeURIComponent(input.rfqId)}/accept`,\n { json: request, timeout: ACCEPT_QUOTE_TIMEOUT_MS },\n )\n .andThen(validateWith(BuilderRfqStatusResponseSchema));\n }\n\n let accepted = await postAcceptance();\n\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 accepted.isErr() &&\n (accepted.error instanceof TransportError ||\n accepted.error instanceof UnexpectedResponseError)\n ) {\n accepted = await postAcceptance();\n }\n\n if (accepted.isErr()) {\n const expired = toAcceptanceExpiredResult(input.rfqId, accepted.error);\n\n if (expired !== undefined) {\n return expired;\n }\n\n throw toRfqRequestRejection(accepted.error);\n }\n\n let status = accepted.value;\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.value.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: BuilderGatewayRequestError,\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 | RateLimitError\n | RfqRequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchRfqStatusError = makeErrorGuard(\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): Promise<RfqStatusResult> {\n assertCombosSupportedForAccount(client);\n\n const input = parseUserInput(params, FetchRfqStatusParamsSchema);\n\n return unwrap(\n client.builderGateway\n .get(`${BUILDER_RFQ_REQUESTS_PATH}/${encodeURIComponent(input.rfqId)}`)\n .andThen(validateWith(BuilderRfqStatusResponseSchema))\n .mapErr(toRfqRequestRejection),\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}\n","import { PaginationCursorSchema } from '@polymarket/bindings';\nimport {\n type Event,\n type Profile,\n type PublicSearchResponse,\n PublicSearchResponseSchema,\n type SearchTag,\n} from '@polymarket/bindings/gamma';\nimport { z } from 'zod';\nimport type { BaseClient } from '../clients';\nimport {\n makeErrorGuard,\n RateLimitError,\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 { validateWith } from '../response';\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 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 | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const SearchError = makeErrorGuard(\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 * @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): Paginated<SearchResults> {\n const { cursor, pageSize, ...params } = parseUserInput(\n request,\n SearchRequestSchema,\n );\n\n return paginate(\n (cursor) => {\n const decoded = decodeOffsetCursor(cursor, pageSize);\n\n return client.gamma\n .get('/public-search', {\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 .andThen(validateWith(PublicSearchResponseSchema))\n .map((response) => ({\n items: toSearchResults(response),\n hasMore: response.pagination?.hasMore ?? false,\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 '@polymarket/bindings';\nimport {\n ListSeriesResponseSchema,\n type Series,\n SeriesSchema,\n} from '@polymarket/bindings/gamma';\nimport { unwrap } from '@polymarket/types';\nimport { z } from 'zod';\nimport type { BaseClient } from '../clients';\nimport {\n makeErrorGuard,\n RateLimitError,\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 { validateWith } from '../response';\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 | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const ListSeriesError = makeErrorGuard(\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): Paginated<Series[]> {\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 params: toSearchParams(\n {\n ...params,\n limit: decoded.pageSize,\n offset: decoded.offset,\n },\n snakeCase(),\n ),\n })\n .andThen(validateWith(ListSeriesResponseSchema))\n .map((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 | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchSeriesError = makeErrorGuard(\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): Promise<Series> {\n const params = parseUserInput(request, FetchSeriesRequestSchema);\n\n return unwrap(\n client.gamma\n .get(`series/${params.id}`, {\n params: toSearchParams(\n {\n locale: params.locale,\n },\n snakeCase(),\n ),\n })\n .andThen(validateWith(SeriesSchema)),\n );\n}\n","import {\n RelayerAuthorizeSessionSignerStatus,\n RelayerRevokeSessionSignerStatus,\n} from '@polymarket/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 '@polymarket/bindings';\nimport { ActiveSessionSignersResponseSchema } from '@polymarket/bindings/clob';\nimport { WalletType } from '@polymarket/bindings/gamma';\nimport {\n RelayerAuthorizeSessionSignerResponseSchema,\n RelayerRevokeSessionSignerResponseSchema,\n} from '@polymarket/bindings/relayer';\nimport {\n delay,\n expectEvmAddress,\n isSameEvmAddress,\n unwrap,\n ZERO_ADDRESS,\n} from '@polymarket/types';\nimport { z } from 'zod';\nimport { authorizeSessionSignerCall, revokeSessionSignerCall } 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 { validateWith } from '../response';\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 | RateLimitError\n | RequestRejectedError\n | SigningError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchSessionKeysError = makeErrorGuard(\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): Promise<SessionKey[]> {\n assertOwnerDepositWallet(client);\n\n const response = await unwrap(\n client.secureClob\n .get('/v1/user/session-signers')\n .andThen(validateWith(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 unwrap(\n client.relayer\n .post('/v1/session-signers/authorizations', {\n headers: {\n 'Idempotency-Key':\n parsedRequest.idempotencyKey ?? globalThis.crypto.randomUUID(),\n },\n json: payload,\n timeout: SESSION_KEY_RELAYER_SUBMISSION_TIMEOUT_MS,\n })\n .andThen(validateWith(RelayerAuthorizeSessionSignerResponseSchema)),\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 unwrap(\n client.relayer\n .post('/v1/session-signers/revocations', {\n headers: {\n 'Idempotency-Key':\n parsedRequest.idempotencyKey ?? globalThis.crypto.randomUUID(),\n },\n json: payload,\n timeout: SESSION_KEY_RELAYER_SUBMISSION_TIMEOUT_MS,\n })\n .andThen(validateWith(RelayerRevokeSessionSignerResponseSchema)),\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}\n","import {\n ListSportsMetadataResponseSchema,\n type SportsMarketTypesResponse,\n SportsMarketTypesResponseSchema,\n type SportsMetadata,\n} from '@polymarket/bindings/gamma';\nimport { unwrap } from '@polymarket/types';\nimport type { BaseClient } from '../clients';\nimport {\n makeErrorGuard,\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\n} from '../errors';\nimport { validateWith } from '../response';\n\nexport type ListSportsError =\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError;\nexport const ListSportsError = makeErrorGuard(\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\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): Promise<SportsMetadata[]> {\n return unwrap(\n client.gamma\n .get('/sports')\n .andThen(validateWith(ListSportsMetadataResponseSchema)),\n );\n}\n\nexport type FetchSportsMarketTypesError =\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError;\nexport const FetchSportsMarketTypesError = makeErrorGuard(\n RateLimitError,\n RequestRejectedError,\n TransportError,\n UnexpectedResponseError,\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): Promise<SportsMarketTypesResponse> {\n return unwrap(\n client.gamma\n .get('/sports/market-types')\n .andThen(validateWith(SportsMarketTypesResponseSchema)),\n );\n}\n","import type { PerpsKlineInterval } from '@polymarket/bindings/perps';\nimport type {\n CommentsEvent,\n CryptoPricesBinanceEvent,\n CryptoPricesChainlinkEvent,\n CryptoPricesChainlinkTwapEvent,\n CryptoPricesChainlinkTwapSixtyEvent,\n CryptoPricesChainlinkTwapThirtyEvent,\n CryptoPricesChainlinkTwapTopic,\n CryptoPricesChainlinkTwapWindowSeconds,\n CryptoPricesEvent,\n CryptoPricesTopic,\n CustomMarketEvent,\n EquityPricesEvent,\n EquityPricesTopic,\n MarketEvent,\n PerpsBboEvent,\n PerpsBookEvent,\n PerpsCandleEvent,\n PerpsMarketDataEvent,\n PerpsStatisticEvent,\n PerpsTickerEvent,\n PerpsTradeEvent,\n SportsEvent,\n StandardMarketEvent,\n UserEvent,\n} from '@polymarket/bindings/subscriptions';\nimport { invariant, type Prettify } from '@polymarket/types';\nimport merge from 'it-merge';\nimport { z } from 'zod';\nimport type {\n BaseClient,\n BasePublicClient,\n BaseSecureClient,\n} from '../clients';\nimport { makeErrorGuard, TransportError, UserInputError } from '../errors';\nimport { parseUserInput } from '../input';\n\n// Event types — re-exported from bindings for consumer convenience.\nexport type {\n CommentsEvent,\n CryptoPricesBinanceEvent,\n CryptoPricesChainlinkEvent,\n CryptoPricesChainlinkTwapEvent,\n CryptoPricesChainlinkTwapSixtyEvent,\n CryptoPricesChainlinkTwapThirtyEvent,\n CryptoPricesChainlinkTwapWindowSeconds,\n CryptoPricesEvent,\n CustomMarketEvent,\n EquityPricesEvent,\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\nexport type CommentsSubscription = {\n topic: 'comments';\n types?: readonly CommentsEventType[];\n parentEntityId?: number;\n parentEntityType?: 'Event' | 'Market';\n};\n\nexport type CryptoPricesSubscription = {\n topic: CryptoPricesTopic;\n symbols?: readonly string[];\n};\n\nexport type CryptoPricesChainlinkTwapSubscription = {\n topic: CryptoPricesChainlinkTwapTopic;\n /** Averaging window used to calculate each TWAP price. */\n windowSeconds: CryptoPricesChainlinkTwapWindowSeconds;\n /** Lowercase slash-delimited symbols, such as `btc/usd`. */\n symbols?: readonly string[];\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\nexport type SecureSubscriptionSpec = PublicSubscriptionSpec | UserSubscription;\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 = PublicRealtimeEvent | UserEvent;\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 user: UserEvent;\n sports: SportsEvent;\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 '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 = TransportError | UserInputError;\nexport const SubscribeError = makeErrorGuard(TransportError, UserInputError);\n\nconst CryptoPricesChainlinkTwapSubscriptionSchema = 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 * @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 for (const subscription of subscriptions) {\n switch (subscription.topic) {\n case 'market':\n parseUserInput(subscription, MarketSubscriptionSchema);\n break;\n case 'prices.crypto.chainlink.twap':\n parseUserInput(\n subscription,\n CryptoPricesChainlinkTwapSubscriptionSchema,\n );\n break;\n }\n }\n\n const handles = await Promise.all(\n subscriptions.map((spec) => subscribeOne(client, spec)),\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 '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 '@polymarket/bindings';\nimport {\n ListRelatedTagResourcesResponseSchema,\n ListRelatedTagsResponseSchema,\n ListTagsResponseSchema,\n type RelatedTag,\n type Tag,\n TagSchema,\n} from '@polymarket/bindings/gamma';\nimport { unwrap } from '@polymarket/types';\nimport { z } from 'zod';\nimport type { BaseClient } from '../clients';\nimport {\n makeErrorGuard,\n RateLimitError,\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 { validateWith } from '../response';\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 | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const ListTagsError = makeErrorGuard(\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): Paginated<Tag[]> {\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 params: toSearchParams(\n {\n ...params,\n limit: decoded.pageSize,\n offset: decoded.offset,\n },\n snakeCase(),\n ),\n })\n .andThen(validateWith(ListTagsResponseSchema))\n .map((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 | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchTagError = makeErrorGuard(\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): Promise<Tag> {\n const params = parseUserInput(request, FetchTagRequestSchema);\n\n if ('id' in params) {\n return unwrap(\n client.gamma\n .get(`tags/${params.id}`, {\n params: toSearchParams(\n {\n includeTemplate: params.includeTemplate,\n locale: params.locale,\n },\n snakeCase(),\n ),\n })\n .andThen(validateWith(TagSchema)),\n );\n }\n\n return unwrap(\n client.gamma\n .get(`tags/slug/${params.slug}`, {\n params: toSearchParams(\n {\n locale: params.locale,\n },\n snakeCase(),\n ),\n })\n .andThen(validateWith(TagSchema)),\n );\n}\n\nexport type FetchRelatedTagsError =\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchRelatedTagsError = makeErrorGuard(\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): Promise<RelatedTag[]> {\n if ('id' in request) {\n const params = parseUserInput(request, RelatedTagsByIdRequestSchema);\n\n return unwrap(\n client.gamma\n .get(`tags/${params.id}/related-tags`, {\n params: toSearchParams(\n {\n omitEmpty: params.omitEmpty,\n status: params.status,\n },\n snakeCase(),\n ),\n })\n .andThen(validateWith(ListRelatedTagsResponseSchema)),\n );\n }\n\n const params = parseUserInput(request, RelatedTagsBySlugRequestSchema);\n\n return unwrap(\n client.gamma\n .get(`tags/slug/${params.slug}/related-tags`)\n .andThen(validateWith(ListRelatedTagsResponseSchema)),\n );\n}\n\nexport type FetchRelatedTagResourcesError =\n | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const FetchRelatedTagResourcesError = makeErrorGuard(\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): Promise<Tag[]> {\n if ('id' in request) {\n const params = parseUserInput(\n request,\n RelatedTagResourcesByIdRequestSchema,\n );\n\n return unwrap(\n client.gamma\n .get(`tags/${params.id}/related-tags/tags`, {\n params: toSearchParams(\n {\n locale: params.locale,\n omitEmpty: params.omitEmpty,\n status: params.status,\n },\n snakeCase(),\n ),\n })\n .andThen(validateWith(ListRelatedTagResourcesResponseSchema)),\n );\n }\n\n const params = parseUserInput(\n request,\n RelatedTagResourcesBySlugRequestSchema,\n );\n\n return unwrap(\n client.gamma\n .get(`tags/slug/${params.slug}/related-tags/tags`, {\n params: toSearchParams(\n {\n locale: params.locale,\n omitEmpty: params.omitEmpty,\n status: params.status,\n },\n snakeCase(),\n ),\n })\n .andThen(validateWith(ListRelatedTagResourcesResponseSchema)),\n );\n}\n","import { PaginationCursorSchema } from '@polymarket/bindings';\nimport { ListTeamsResponseSchema, type Team } from '@polymarket/bindings/gamma';\nimport { z } from 'zod';\nimport type { BaseClient } from '../clients';\nimport {\n makeErrorGuard,\n RateLimitError,\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 { validateWith } from '../response';\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 | RateLimitError\n | RequestRejectedError\n | TransportError\n | UnexpectedResponseError\n | UserInputError;\nexport const ListTeamsError = makeErrorGuard(\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): Paginated<Team[]> {\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 params: toSearchParams(\n {\n ...params,\n limit: decoded.pageSize,\n offset: decoded.offset,\n },\n snakeCase({ providerId: 'provider_id' }),\n ),\n })\n .andThen(validateWith(ListTeamsResponseSchema))\n .map((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 { type EvmAddress, EvmAddressSchema } from '@polymarket/bindings';\nimport { WalletType } from '@polymarket/bindings/gamma';\nimport type { EvmSignature } from '@polymarket/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"]}