@polymarket/clob-client-v2 1.0.7-canary.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/client.cjs CHANGED
@@ -17,6 +17,11 @@ const require_roundingConfig = require('./order-builder/helpers/roundingConfig.c
17
17
  const require_orderBuilder = require('./order-builder/orderBuilder.cjs');
18
18
 
19
19
  //#region src/client.ts
20
+ const RESOLVE_TRADES_TIMEOUT_MS = 3e4;
21
+ const RESOLVE_TRADES_POLL_INTERVAL_MS = 250;
22
+ const FAILED_TRADE_STATUS = "FAILED";
23
+ const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
24
+ const isTradeResolved = (trade) => trade.status.toUpperCase() === FAILED_TRADE_STATUS || Boolean(trade.transaction_hash && trade.transaction_hash.length > 0);
20
25
  var ClobClient = class {
21
26
  host;
22
27
  chainId;
@@ -532,6 +537,14 @@ var ClobClient = class {
532
537
  }
533
538
  return results;
534
539
  }
540
+ /**
541
+ * Posts an order to the CLOB.
542
+ *
543
+ * When the order matches, the response carries the settlement transaction
544
+ * hashes of its fills in `transactionsHashes`, resolved on a best-effort
545
+ * basis. If a hash is not available yet, the fill's trade can be followed
546
+ * via `tradeIDs`.
547
+ */
535
548
  async postOrder(order, orderType = require_clob.OrderType.GTC, postOnly = false, deferExec = false) {
536
549
  this.canL2Auth();
537
550
  if (postOnly && (orderType === require_clob.OrderType.FOK || orderType === require_clob.OrderType.FAK)) throw new Error("postOnly is not supported for FOK/FAK orders");
@@ -548,7 +561,9 @@ var ClobClient = class {
548
561
  data: orderPayload
549
562
  }, true);
550
563
  if (this._isOrderVersionMismatch(res)) await this.resolveVersion(true);
551
- return this.throwIfError(res);
564
+ const response = this.throwIfError(res);
565
+ if (deferExec) return response;
566
+ return this.resolveTransactionsHashes(response);
552
567
  }
553
568
  async postOrders(args, postOnly = false, deferExec = false) {
554
569
  this.canL2Auth();
@@ -571,7 +586,34 @@ var ClobClient = class {
571
586
  data: ordersPayload
572
587
  }, true);
573
588
  if (this._isOrderVersionMismatch(res)) await this.resolveVersion(true);
574
- return this.throwIfError(res);
589
+ const responses = this.throwIfError(res);
590
+ if (deferExec || !Array.isArray(responses)) return responses;
591
+ return Promise.all(responses.map((response) => this.resolveTransactionsHashes(response)));
592
+ }
593
+ async waitForResolvedTrades(tradeIDs) {
594
+ const ids = [...new Set(tradeIDs.filter((id) => id.length > 0))];
595
+ if (ids.length === 0) return [];
596
+ const resolved = /* @__PURE__ */ new Map();
597
+ const requestedIDs = new Set(ids);
598
+ const deadline = Date.now() + RESOLVE_TRADES_TIMEOUT_MS;
599
+ for (;;) {
600
+ const pending = ids.filter((id) => !resolved.has(id));
601
+ const pages = await Promise.all(pending.map((id) => this.getTrades({ id }, true).catch(() => [])));
602
+ for (const trades of pages) for (const trade of trades) if (isTradeResolved(trade) && requestedIDs.has(trade.id)) resolved.set(trade.id, trade);
603
+ if (ids.every((id) => resolved.has(id)) || Date.now() >= deadline) return ids.map((id) => resolved.get(id)).filter((trade) => trade !== void 0);
604
+ await sleep(RESOLVE_TRADES_POLL_INTERVAL_MS);
605
+ }
606
+ }
607
+ async resolveTransactionsHashes(response) {
608
+ if (response.transactionsHashes && response.transactionsHashes.length > 0) return response;
609
+ const tradeIDs = response.tradeIDs ?? [];
610
+ if (tradeIDs.length === 0) return response;
611
+ const transactionsHashes = (await this.waitForResolvedTrades(tradeIDs)).filter((trade) => trade.status.toUpperCase() !== FAILED_TRADE_STATUS).map((trade) => trade.transaction_hash).filter((hash) => Boolean(hash));
612
+ if (transactionsHashes.length === 0) return response;
613
+ return {
614
+ ...response,
615
+ transactionsHashes
616
+ };
575
617
  }
576
618
  async cancelOrder(payload) {
577
619
  this.canL2Auth();
@@ -1 +1 @@
1
- {"version":3,"file":"client.cjs","names":["OrderBuilder","SignatureTypeV2","OK","createL2Headers","POST","HEARTBEAT","TIME","INITIAL_CURSOR","GET_SAMPLING_SIMPLIFIED_MARKETS","GET_SAMPLING_MARKETS","GET_SIMPLIFIED_MARKETS","GET_MARKETS","GET_MARKET","result: MarketDetails","GET_CLOB_MARKET","GET_ORDER_BOOK","GET_ORDER_BOOKS","GET_TICK_SIZE","GET_NEG_RISK","GET_FEE_RATE","generateOrderBookSummaryHash","GET_MIDPOINT","GET_MIDPOINTS","GET_PRICE","GET_PRICES","GET_SPREAD","GET_SPREADS","GET_LAST_TRADE_PRICE","GET_LAST_TRADES_PRICES","GET_PRICES_HISTORY","CREATE_API_KEY","createL1Headers","DERIVE_API_KEY","GET_API_KEYS","GET","CLOSED_ONLY","DELETE_API_KEY","DELETE","CREATE_READONLY_API_KEY","GET_READONLY_API_KEYS","DELETE_READONLY_API_KEY","GET_ORDER","GET_TRADES","results: Trade[]","END_CURSOR","_params: any","bytes32Zero","GET_BUILDER_TRADES","GET_NOTIFICATIONS","DROP_NOTIFICATIONS","parseDropNotificationParams","GET_BALANCE_ALLOWANCE","UPDATE_BALANCE_ALLOWANCE","priceValid","roundNormal","ROUNDING_CONFIG","Side","OrderType","postOrderResponse: any","postOrderMarketResponse: any","GET_OPEN_ORDERS","results: OpenOrder[]","GET_PRE_MIGRATION_ORDERS","results: PreMigrationOrder[]","POST_ORDER","isV2Order","orderToJsonV2","orderToJsonV1","POST_ORDERS","ordersPayload: (NewOrderV2<any> | NewOrderV1<any>)[]","CANCEL_ORDER","CANCEL_ORDERS","CANCEL_ALL","CANCEL_MARKET_ORDERS","IS_ORDER_SCORING","ARE_ORDERS_SCORING","GET_EARNINGS_FOR_USER_FOR_DAY","results: UserEarning[]","GET_TOTAL_EARNINGS_FOR_USER_FOR_DAY","GET_REWARDS_EARNINGS_PERCENTAGES","results: UserRewardsEarning[]","GET_LIQUIDITY_REWARD_PERCENTAGES","results: MarketReward[]","GET_REWARDS_MARKETS_CURRENT","GET_REWARDS_MARKETS","calculateBuyMarketPrice","calculateSellMarketPrice","CREATE_BUILDER_API_KEY","GET_BUILDER_API_KEYS","REVOKE_BUILDER_API_KEY","GET_MARKET_TRADES_EVENTS","L1_AUTH_UNAVAILABLE_ERROR","L2_AUTH_NOT_AVAILABLE","adjustBuyAmountForFees","GET_MARKET_BY_TOKEN","GET_BUILDER_FEES","BUILDER_FEES_BPS","isTickSizeSmaller","ORDER_VERSION_MISMATCH_ERROR","ApiError","get","post","del"],"sources":["../src/client.ts"],"sourcesContent":["import {\n\tBUILDER_FEES_BPS,\n\tbytes32Zero,\n\tEND_CURSOR,\n\tINITIAL_CURSOR,\n\tORDER_VERSION_MISMATCH_ERROR,\n} from \"./constants.js\";\nimport {\n\tARE_ORDERS_SCORING,\n\tCANCEL_ALL,\n\tCANCEL_MARKET_ORDERS,\n\tCANCEL_ORDER,\n\tCANCEL_ORDERS,\n\tCLOSED_ONLY,\n\tCREATE_API_KEY,\n\tCREATE_BUILDER_API_KEY,\n\tCREATE_READONLY_API_KEY,\n\tDELETE_API_KEY,\n\tDELETE_READONLY_API_KEY,\n\tDERIVE_API_KEY,\n\tDROP_NOTIFICATIONS,\n\tGET_API_KEYS,\n\tGET_BALANCE_ALLOWANCE,\n\tGET_BUILDER_API_KEYS,\n\tGET_BUILDER_FEES,\n\tGET_BUILDER_TRADES,\n\tGET_CLOB_MARKET,\n\tGET_EARNINGS_FOR_USER_FOR_DAY,\n\tGET_FEE_RATE,\n\tGET_LAST_TRADE_PRICE,\n\tGET_LAST_TRADES_PRICES,\n\tGET_LIQUIDITY_REWARD_PERCENTAGES,\n\tGET_MARKET,\n\tGET_MARKET_BY_TOKEN,\n\tGET_MARKET_TRADES_EVENTS,\n\tGET_MARKETS,\n\tGET_MIDPOINT,\n\tGET_MIDPOINTS,\n\tGET_NEG_RISK,\n\tGET_NOTIFICATIONS,\n\tGET_OPEN_ORDERS,\n\tGET_ORDER,\n\tGET_ORDER_BOOK,\n\tGET_ORDER_BOOKS,\n\tGET_PRE_MIGRATION_ORDERS,\n\tGET_PRICE,\n\tGET_PRICES,\n\tGET_PRICES_HISTORY,\n\tGET_READONLY_API_KEYS,\n\tGET_REWARDS_EARNINGS_PERCENTAGES,\n\tGET_REWARDS_MARKETS,\n\tGET_REWARDS_MARKETS_CURRENT,\n\tGET_SAMPLING_MARKETS,\n\tGET_SAMPLING_SIMPLIFIED_MARKETS,\n\tGET_SIMPLIFIED_MARKETS,\n\tGET_SPREAD,\n\tGET_SPREADS,\n\tGET_TICK_SIZE,\n\tGET_TOTAL_EARNINGS_FOR_USER_FOR_DAY,\n\tGET_TRADES,\n\tHEARTBEAT,\n\tIS_ORDER_SCORING,\n\tOK,\n\tPOST_ORDER,\n\tPOST_ORDERS,\n\tREVOKE_BUILDER_API_KEY,\n\tTIME,\n\tUPDATE_BALANCE_ALLOWANCE,\n} from \"./endpoints.js\";\nimport { ApiError, L1_AUTH_UNAVAILABLE_ERROR, L2_AUTH_NOT_AVAILABLE } from \"./errors.js\";\nimport { adjustBuyAmountForFees, validateFeeSlippage } from \"./fees/index.js\";\nimport { createL1Headers, createL2Headers } from \"./headers/index.js\";\nimport {\n\tDELETE,\n\tdel,\n\tGET,\n\tget,\n\tPOST,\n\tparseDropNotificationParams,\n\tpost,\n\ttype RequestOptions,\n} from \"./http-helpers/index.js\";\nimport {\n\tcalculateBuyMarketPrice,\n\tcalculateSellMarketPrice,\n\tROUNDING_CONFIG,\n} from \"./order-builder/helpers/index.js\";\nimport { OrderBuilder } from \"./order-builder/index.js\";\nimport { SignatureTypeV2 } from \"./order-utils/model/signatureTypeV2.js\";\nimport type { ClobSigner } from \"./signing/signer.js\";\nimport type {\n\tApiKeyCreds,\n\tApiKeyRaw,\n\tApiKeysResponse,\n\tBalanceAllowanceParams,\n\tBalanceAllowanceResponse,\n\tBanStatus,\n\tBookParams,\n\tBuilderApiKey,\n\tBuilderApiKeyResponse,\n\tBuilderConfig,\n\tBuilderFeeRates,\n\tBuilderTrade,\n\tBuilderTradeParams,\n\tBuilderTradesResponse,\n\tChain,\n\tClobErrorResponseBody,\n\tCreateOrderOptions,\n\tDropNotificationParams,\n\tExchangeV3OrderAmounts,\n\tFeeInfos,\n\tFeeRates,\n\tMarketDetails,\n\tMarketPrice,\n\tMarketReward,\n\tMarketTradeEvent,\n\tNegRisk,\n\tNewOrderV1,\n\tNewOrderV2,\n\tNotification,\n\tOpenOrder,\n\tOpenOrderParams,\n\tOpenOrdersResponse,\n\tOrderBookSummary,\n\tOrderMarketCancelParams,\n\tOrderPayload,\n\tOrderScoring,\n\tOrderScoringParams,\n\tOrdersScoring,\n\tOrdersScoringParams,\n\tPaginationPayload,\n\tPostOrdersArgs,\n\tPreMigrationOrder,\n\tPreMigrationOrdersResponse,\n\tPriceHistoryFilterParams,\n\tReadonlyApiKeyResponse,\n\tRewardsPercentages,\n\tTickSize,\n\tTickSizes,\n\tTokenConditionMap,\n\tTotalUserEarning,\n\tTrade,\n\tTradeParams,\n\tTradesPaginatedResponse,\n\tUserEarning,\n\tUserMarketOrderV1,\n\tUserMarketOrderV2,\n\tUserOrderV1,\n\tUserOrderV2,\n\tUserRewardsEarning,\n} from \"./types/index.js\";\nimport { OrderType, orderToJsonV1, orderToJsonV2, Side } from \"./types/index.js\";\nimport { isV2Order, type SignedOrder } from \"./types/unifiedOrder.js\";\nimport {\n\tgenerateOrderBookSummaryHash,\n\tisTickSizeSmaller,\n\tpriceValid,\n\troundNormal,\n} from \"./utilities.js\";\n\nexport { adjustBuyAmountForFees } from \"./fees/index.js\";\n\nexport interface ClobClientOptions {\n\thost: string;\n\tchain: Chain;\n\tsigner?: ClobSigner;\n\tcreds?: ApiKeyCreds;\n\tsignatureType?: SignatureTypeV2;\n\tfunderAddress?: string;\n\tuseServerTime?: boolean;\n\tbuilderConfig?: BuilderConfig;\n\tgetSigner?: () => Promise<ClobSigner> | ClobSigner;\n\tretryOnError?: boolean;\n\tthrowOnError?: boolean;\n\tfeeSlippage?: number;\n}\n\nexport class ClobClient {\n\treadonly host: string;\n\n\treadonly chainId: Chain;\n\n\t// Used to perform Level 1 authentication and sign orders\n\treadonly signer?: ClobSigner;\n\n\t// Used to perform Level 2 authentication\n\treadonly creds?: ApiKeyCreds;\n\n\treadonly orderBuilder: OrderBuilder;\n\n\treadonly tickSizes: TickSizes;\n\n\treadonly negRisk: NegRisk;\n\n\treadonly feeInfos: FeeInfos;\n\n\t// Fee rate bps data for CLOB V1\n\treadonly feeRates: FeeRates;\n\n\treadonly builderFeeRates: BuilderFeeRates;\n\n\tprivate readonly tokenConditionMap: TokenConditionMap;\n\n\treadonly useServerTime?: boolean;\n\n\treadonly builderConfig?: BuilderConfig;\n\n\treadonly signatureType: SignatureTypeV2;\n\n\treadonly funderAddress?: string;\n\n\tprivate cachedVersion?: number;\n\n\treadonly retryOnError?: boolean;\n\n\treadonly throwOnError?: boolean;\n\n\treadonly feeSlippage: number;\n\n\tconstructor({\n\t\thost,\n\t\tchain,\n\t\tsigner,\n\t\tcreds,\n\t\tsignatureType,\n\t\tfunderAddress,\n\t\tuseServerTime,\n\t\tbuilderConfig,\n\t\tgetSigner,\n\t\tretryOnError,\n\t\tthrowOnError,\n\t\tfeeSlippage,\n\t}: ClobClientOptions) {\n\t\tthis.host = host.endsWith(\"/\") ? host.slice(0, -1) : host;\n\t\tthis.chainId = chain;\n\n\t\tif (signer !== undefined) {\n\t\t\tthis.signer = signer;\n\t\t}\n\t\tif (creds !== undefined) {\n\t\t\tthis.creds = creds;\n\t\t}\n\t\tthis.orderBuilder = new OrderBuilder(\n\t\t\tsigner as ClobSigner,\n\t\t\tchain,\n\t\t\tsignatureType,\n\t\t\tfunderAddress,\n\t\t\tgetSigner,\n\t\t);\n\t\tthis.signatureType = signatureType ?? SignatureTypeV2.EOA;\n\t\tthis.funderAddress = funderAddress;\n\t\tthis.tickSizes = {};\n\t\tthis.negRisk = {};\n\t\tthis.feeRates = {};\n\t\tthis.feeInfos = {};\n\t\tthis.builderFeeRates = {};\n\t\tthis.tokenConditionMap = {};\n\t\tthis.retryOnError = retryOnError;\n\t\tthis.throwOnError = throwOnError;\n\t\tthis.feeSlippage = feeSlippage ?? 0;\n\t\tvalidateFeeSlippage(this.feeSlippage);\n\t\tthis.useServerTime = useServerTime;\n\t\tif (builderConfig !== undefined) {\n\t\t\tthis.builderConfig = builderConfig;\n\t\t}\n\t}\n\n\t// Public endpoints\n\tpublic async getOk(): Promise<any> {\n\t\treturn this.get(`${this.host}${OK}`);\n\t}\n\n\tpublic async postHeartbeat(\n\t\theartbeatId = \"\",\n\t): Promise<{ heartbeat_id: string; error_msg?: string }> {\n\t\tthis.canL2Auth();\n\t\tconst body = JSON.stringify({ heartbeat_id: heartbeatId });\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\t{ method: POST, requestPath: HEARTBEAT, body },\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\t\treturn this.post(`${this.host}${HEARTBEAT}`, {\n\t\t\theaders,\n\t\t\tdata: { heartbeat_id: heartbeatId },\n\t\t});\n\t}\n\n\tpublic async getVersion(): Promise<number> {\n\t\tconst response = await this.get(`${this.host}/version`);\n\t\t// default to v2\n\t\treturn response?.version ?? 2;\n\t}\n\n\tpublic async getServerTime(): Promise<number> {\n\t\treturn this.get(`${this.host}${TIME}`);\n\t}\n\n\tpublic async getSamplingSimplifiedMarkets(\n\t\tnext_cursor = INITIAL_CURSOR,\n\t): Promise<PaginationPayload> {\n\t\treturn this.get(`${this.host}${GET_SAMPLING_SIMPLIFIED_MARKETS}`, {\n\t\t\tparams: { next_cursor },\n\t\t});\n\t}\n\n\tpublic async getSamplingMarkets(next_cursor = INITIAL_CURSOR): Promise<PaginationPayload> {\n\t\treturn this.get(`${this.host}${GET_SAMPLING_MARKETS}`, {\n\t\t\tparams: { next_cursor },\n\t\t});\n\t}\n\n\tpublic async getSimplifiedMarkets(next_cursor = INITIAL_CURSOR): Promise<PaginationPayload> {\n\t\treturn this.get(`${this.host}${GET_SIMPLIFIED_MARKETS}`, {\n\t\t\tparams: { next_cursor },\n\t\t});\n\t}\n\n\tpublic async getMarkets(next_cursor = INITIAL_CURSOR): Promise<PaginationPayload> {\n\t\treturn this.get(`${this.host}${GET_MARKETS}`, {\n\t\t\tparams: { next_cursor },\n\t\t});\n\t}\n\n\tpublic async getMarket(conditionID: string): Promise<any> {\n\t\treturn this.get(`${this.host}${GET_MARKET}${conditionID}`);\n\t}\n\n\tpublic async getClobMarketInfo(conditionID: string): Promise<MarketDetails> {\n\t\tconst result: MarketDetails = await this.get(\n\t\t\t`${this.host}${GET_CLOB_MARKET}${conditionID}`,\n\t\t);\n\n\t\tif (!result?.t) {\n\t\t\tthrow new Error(`failed to fetch market info for condition id ${conditionID}`);\n\t\t}\n\n\t\tfor (const token of result.t) {\n\t\t\tif (!token) continue;\n\t\t\tconst tokenId = token.t;\n\n\t\t\tthis.tokenConditionMap[tokenId] = conditionID;\n\t\t\tthis.tickSizes[tokenId] = result.mts.toString() as TickSize;\n\t\t\tthis.negRisk[tokenId] = result.nr ?? false;\n\n\t\t\tthis.feeInfos[tokenId] = {\n\t\t\t\trate: result.fd?.r ?? 0,\n\t\t\t\texponent: result.fd?.e ?? 0,\n\t\t\t};\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tpublic async getOrderBook(tokenID: string): Promise<OrderBookSummary> {\n\t\treturn this.get(`${this.host}${GET_ORDER_BOOK}`, {\n\t\t\tparams: { token_id: tokenID },\n\t\t});\n\t}\n\n\tpublic async getOrderBooks(params: BookParams[]): Promise<OrderBookSummary[]> {\n\t\treturn this.post(`${this.host}${GET_ORDER_BOOKS}`, {\n\t\t\tdata: params,\n\t\t});\n\t}\n\n\tpublic async getTickSize(tokenID: string): Promise<TickSize> {\n\t\tif (tokenID in this.tickSizes) {\n\t\t\treturn this.tickSizes[tokenID];\n\t\t}\n\n\t\tif (tokenID in this.tokenConditionMap) {\n\t\t\tawait this.getClobMarketInfo(this.tokenConditionMap[tokenID]);\n\t\t\treturn this.tickSizes[tokenID];\n\t\t}\n\n\t\tconst result = await this.get(`${this.host}${GET_TICK_SIZE}`, {\n\t\t\tparams: { token_id: tokenID },\n\t\t});\n\t\tthis.tickSizes[tokenID] = result.minimum_tick_size.toString() as TickSize;\n\n\t\treturn this.tickSizes[tokenID];\n\t}\n\n\tpublic async getNegRisk(tokenID: string): Promise<boolean> {\n\t\tif (tokenID in this.negRisk) {\n\t\t\treturn this.negRisk[tokenID];\n\t\t}\n\n\t\tif (tokenID in this.tokenConditionMap) {\n\t\t\tawait this.getClobMarketInfo(this.tokenConditionMap[tokenID]);\n\t\t\treturn this.negRisk[tokenID];\n\t\t}\n\n\t\tconst result = await this.get(`${this.host}${GET_NEG_RISK}`, {\n\t\t\tparams: { token_id: tokenID },\n\t\t});\n\t\tthis.negRisk[tokenID] = result.neg_risk as boolean;\n\n\t\treturn this.negRisk[tokenID];\n\t}\n\n\tpublic async getFeeRateBps(tokenID: string): Promise<number> {\n\t\tif (tokenID in this.feeRates) {\n\t\t\treturn this.feeRates[tokenID];\n\t\t}\n\n\t\tconst result = await this.get(`${this.host}${GET_FEE_RATE}`, {\n\t\t\tparams: { token_id: tokenID },\n\t\t});\n\t\tthis.feeRates[tokenID] = result.base_fee as number;\n\n\t\treturn this.feeRates[tokenID];\n\t}\n\n\tpublic async getFeeExponent(tokenID: string): Promise<number> {\n\t\tif (tokenID in this.feeInfos) {\n\t\t\treturn this.feeInfos[tokenID].exponent;\n\t\t}\n\n\t\tawait this._ensureMarketInfoCached(tokenID);\n\t\treturn this.feeInfos[tokenID].exponent;\n\t}\n\n\t/**\n\t * Calculates the hash for the given orderbook\n\t * @param orderbook\n\t * @returns\n\t */\n\tpublic async getOrderBookHash(orderbook: OrderBookSummary): Promise<string> {\n\t\treturn generateOrderBookSummaryHash(orderbook);\n\t}\n\n\tpublic async getMidpoint(tokenID: string): Promise<any> {\n\t\treturn this.get(`${this.host}${GET_MIDPOINT}`, {\n\t\t\tparams: { token_id: tokenID },\n\t\t});\n\t}\n\n\tpublic async getMidpoints(params: BookParams[]): Promise<any> {\n\t\treturn this.post(`${this.host}${GET_MIDPOINTS}`, {\n\t\t\tdata: params,\n\t\t});\n\t}\n\n\tpublic async getPrice(tokenID: string, side: string): Promise<any> {\n\t\treturn this.get(`${this.host}${GET_PRICE}`, {\n\t\t\tparams: { token_id: tokenID, side: side },\n\t\t});\n\t}\n\n\tpublic async getPrices(params: BookParams[]): Promise<any> {\n\t\treturn this.post(`${this.host}${GET_PRICES}`, {\n\t\t\tdata: params,\n\t\t});\n\t}\n\n\tpublic async getSpread(tokenID: string): Promise<any> {\n\t\treturn this.get(`${this.host}${GET_SPREAD}`, {\n\t\t\tparams: { token_id: tokenID },\n\t\t});\n\t}\n\n\tpublic async getSpreads(params: BookParams[]): Promise<any> {\n\t\treturn this.post(`${this.host}${GET_SPREADS}`, {\n\t\t\tdata: params,\n\t\t});\n\t}\n\n\tpublic async getLastTradePrice(tokenID: string): Promise<any> {\n\t\treturn this.get(`${this.host}${GET_LAST_TRADE_PRICE}`, {\n\t\t\tparams: { token_id: tokenID },\n\t\t});\n\t}\n\n\tpublic async getLastTradesPrices(params: BookParams[]): Promise<any> {\n\t\treturn this.post(`${this.host}${GET_LAST_TRADES_PRICES}`, {\n\t\t\tdata: params,\n\t\t});\n\t}\n\n\tpublic async getPricesHistory(params: PriceHistoryFilterParams): Promise<MarketPrice[]> {\n\t\tif (!params.interval && (params.startTs === undefined || params.endTs === undefined)) {\n\t\t\tthrow new Error(\"getPricesHistory requires either interval or both startTs and endTs\");\n\t\t}\n\t\treturn this.get(`${this.host}${GET_PRICES_HISTORY}`, {\n\t\t\tparams,\n\t\t});\n\t}\n\n\t// L1 Authed\n\n\t/**\n\t * Creates a new API key for a user\n\t * @param nonce\n\t * @returns ApiKeyCreds\n\t */\n\tpublic async createApiKey(nonce?: number): Promise<ApiKeyCreds> {\n\t\tthis.canL1Auth();\n\n\t\tconst endpoint = `${this.host}${CREATE_API_KEY}`;\n\t\tconst headers = await createL1Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.chainId,\n\t\t\tnonce,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\treturn await this.post(endpoint, { headers }).then((apiKeyRaw: ApiKeyRaw) => {\n\t\t\tconst apiKey: ApiKeyCreds = {\n\t\t\t\tkey: apiKeyRaw.apiKey,\n\t\t\t\tsecret: apiKeyRaw.secret,\n\t\t\t\tpassphrase: apiKeyRaw.passphrase,\n\t\t\t};\n\t\t\treturn apiKey;\n\t\t});\n\t}\n\n\t/**\n\t * Derives an existing API key for a user\n\t * @param nonce\n\t * @returns ApiKeyCreds\n\t */\n\tpublic async deriveApiKey(nonce?: number): Promise<ApiKeyCreds> {\n\t\tthis.canL1Auth();\n\n\t\tconst endpoint = `${this.host}${DERIVE_API_KEY}`;\n\t\tconst headers = await createL1Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.chainId,\n\t\t\tnonce,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\treturn await this.get(endpoint, { headers }).then((apiKeyRaw: ApiKeyRaw) => {\n\t\t\tconst apiKey: ApiKeyCreds = {\n\t\t\t\tkey: apiKeyRaw.apiKey,\n\t\t\t\tsecret: apiKeyRaw.secret,\n\t\t\t\tpassphrase: apiKeyRaw.passphrase,\n\t\t\t};\n\t\t\treturn apiKey;\n\t\t});\n\t}\n\n\tpublic async createOrDeriveApiKey(nonce?: number): Promise<ApiKeyCreds> {\n\t\treturn this.createApiKey(nonce).then(response => {\n\t\t\tif (!response.key) {\n\t\t\t\treturn this.deriveApiKey(nonce);\n\t\t\t}\n\t\t\treturn response;\n\t\t});\n\t}\n\n\tpublic async getApiKeys(): Promise<ApiKeysResponse> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = GET_API_KEYS;\n\t\tconst headerArgs = {\n\t\t\tmethod: GET,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\treturn this.get(`${this.host}${endpoint}`, { headers });\n\t}\n\n\tpublic async getClosedOnlyMode(): Promise<BanStatus> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = CLOSED_ONLY;\n\t\tconst headerArgs = {\n\t\t\tmethod: GET,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\treturn this.get(`${this.host}${endpoint}`, { headers });\n\t}\n\n\tpublic async deleteApiKey(): Promise<any> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = DELETE_API_KEY;\n\t\tconst headerArgs = {\n\t\t\tmethod: DELETE,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\treturn this.del(`${this.host}${endpoint}`, { headers });\n\t}\n\n\tpublic async createReadonlyApiKey(): Promise<ReadonlyApiKeyResponse> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = CREATE_READONLY_API_KEY;\n\t\tconst headerArgs = {\n\t\t\tmethod: POST,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\treturn this.post(`${this.host}${endpoint}`, { headers });\n\t}\n\n\tpublic async getReadonlyApiKeys(): Promise<string[]> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = GET_READONLY_API_KEYS;\n\t\tconst headerArgs = {\n\t\t\tmethod: GET,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\treturn this.get(`${this.host}${endpoint}`, { headers });\n\t}\n\n\tpublic async deleteReadonlyApiKey(key: string): Promise<boolean> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = DELETE_READONLY_API_KEY;\n\t\tconst payload = { key };\n\t\tconst headerArgs = {\n\t\t\tmethod: DELETE,\n\t\t\trequestPath: endpoint,\n\t\t\tbody: JSON.stringify(payload),\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\treturn this.del(`${this.host}${endpoint}`, { headers, data: payload });\n\t}\n\n\tpublic async getOrder(orderID: string): Promise<OpenOrder> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = `${GET_ORDER}${orderID}`;\n\t\tconst headerArgs = {\n\t\t\tmethod: GET,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\treturn this.get(`${this.host}${endpoint}`, { headers });\n\t}\n\n\tpublic async getTrades(\n\t\tparams?: TradeParams,\n\t\tonly_first_page = false,\n\t\tnext_cursor?: string,\n\t): Promise<Trade[]> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = GET_TRADES;\n\t\tconst headerArgs = {\n\t\t\tmethod: GET,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\tlet results: Trade[] = [];\n\t\tnext_cursor = next_cursor || INITIAL_CURSOR;\n\t\twhile (next_cursor !== END_CURSOR && (next_cursor === INITIAL_CURSOR || !only_first_page)) {\n\t\t\tconst _params: any = {\n\t\t\t\t...params,\n\t\t\t\tnext_cursor,\n\t\t\t};\n\t\t\tconst response = await this.get(`${this.host}${endpoint}`, {\n\t\t\t\theaders,\n\t\t\t\tparams: _params,\n\t\t\t});\n\t\t\tnext_cursor = response.next_cursor;\n\t\t\tresults = [...results, ...response.data];\n\t\t}\n\t\treturn results;\n\t}\n\n\tpublic async getTradesPaginated(\n\t\tparams?: TradeParams,\n\t\tnext_cursor?: string,\n\t): Promise<TradesPaginatedResponse> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = GET_TRADES;\n\t\tconst headerArgs = {\n\t\t\tmethod: GET,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\tnext_cursor = next_cursor || INITIAL_CURSOR;\n\n\t\tconst _params: any = { ...params, next_cursor };\n\n\t\tconst {\n\t\t\tdata,\n\t\t\t...rest\n\t\t}: { data: Trade[]; next_cursor: string; limit: number; count: number } = await this.get(\n\t\t\t`${this.host}${endpoint}`,\n\t\t\t{ headers, params: _params },\n\t\t);\n\n\t\treturn { trades: Array.isArray(data) ? [...data] : [], ...rest };\n\t}\n\n\tpublic async getBuilderTrades(\n\t\tparams: BuilderTradeParams,\n\t\tnext_cursor?: string,\n\t): Promise<BuilderTradesResponse> {\n\t\tif (!params.builder_code || params.builder_code === bytes32Zero) {\n\t\t\tthrow new Error(\"builderCode is required and cannot be zero\");\n\t\t}\n\n\t\tconst _params: any = { ...params, next_cursor: next_cursor || INITIAL_CURSOR };\n\n\t\tconst {\n\t\t\tdata,\n\t\t\t...rest\n\t\t}: { data: BuilderTrade[]; next_cursor: string; limit: number; count: number } =\n\t\t\tawait this.get(`${this.host}${GET_BUILDER_TRADES}`, { params: _params });\n\n\t\treturn { trades: Array.isArray(data) ? [...data] : [], ...rest };\n\t}\n\n\tpublic async getNotifications(): Promise<Notification[]> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = GET_NOTIFICATIONS;\n\t\tconst headerArgs = {\n\t\t\tmethod: GET,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\treturn this.get(`${this.host}${endpoint}`, {\n\t\t\theaders,\n\t\t\tparams: { signature_type: this.orderBuilder.signatureType },\n\t\t});\n\t}\n\n\tpublic async dropNotifications(params?: DropNotificationParams): Promise<void> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = DROP_NOTIFICATIONS;\n\t\tconst l2HeaderArgs = {\n\t\t\tmethod: DELETE,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\tl2HeaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\treturn this.del(`${this.host}${endpoint}`, {\n\t\t\theaders,\n\t\t\tparams: parseDropNotificationParams(params),\n\t\t});\n\t}\n\n\tpublic async getBalanceAllowance(\n\t\tparams?: BalanceAllowanceParams,\n\t): Promise<BalanceAllowanceResponse> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = GET_BALANCE_ALLOWANCE;\n\t\tconst headerArgs = {\n\t\t\tmethod: GET,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\tconst _params = {\n\t\t\t...params,\n\t\t\tsignature_type: this.orderBuilder.signatureType,\n\t\t};\n\n\t\treturn this.get(`${this.host}${endpoint}`, { headers, params: _params });\n\t}\n\n\tpublic async updateBalanceAllowance(params?: BalanceAllowanceParams): Promise<void> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = UPDATE_BALANCE_ALLOWANCE;\n\t\tconst headerArgs = {\n\t\t\tmethod: GET,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\tconst _params = {\n\t\t\t...params,\n\t\t\tsignature_type: this.orderBuilder.signatureType,\n\t\t};\n\n\t\treturn this.get(`${this.host}${endpoint}`, { headers, params: _params });\n\t}\n\n\tpublic async createOrder(\n\t\tuserOrder: UserOrderV1 | UserOrderV2,\n\t\toptions?: Partial<CreateOrderOptions>,\n\t): Promise<SignedOrder> {\n\t\tthis.canL1Auth();\n\n\t\tconst orderToSign = { ...userOrder };\n\n\t\tif (this.builderConfig?.builderCode && !orderToSign.builderCode) {\n\t\t\torderToSign.builderCode = this.builderConfig.builderCode;\n\t\t}\n\n\t\tconst { tokenID } = orderToSign;\n\n\t\tconst tickSize = await this._resolveTickSize(tokenID, options?.tickSize);\n\n\t\tif (!priceValid(orderToSign.price, tickSize)) {\n\t\t\tthrow new Error(\n\t\t\t\t`invalid price (${orderToSign.price}), min: ${parseFloat(tickSize)} - max: ${\n\t\t\t\t\t1 - parseFloat(tickSize)\n\t\t\t\t}`,\n\t\t\t);\n\t\t}\n\t\torderToSign.price = roundNormal(orderToSign.price, ROUNDING_CONFIG[tickSize].price);\n\n\t\tconst version = options?.version ?? (await this.resolveVersion());\n\n\t\tif (\n\t\t\tversion !== 1 &&\n\t\t\torderToSign.side === Side.BUY &&\n\t\t\t\"userUSDCBalance\" in orderToSign &&\n\t\t\torderToSign.userUSDCBalance !== undefined\n\t\t) {\n\t\t\tconst adjustedAmount = await this.adjustBuyAmountForBalance(\n\t\t\t\ttokenID,\n\t\t\t\torderToSign.size * orderToSign.price,\n\t\t\t\torderToSign.price,\n\t\t\t\torderToSign.userUSDCBalance,\n\t\t\t\torderToSign.builderCode,\n\t\t\t);\n\t\t\torderToSign.size = adjustedAmount / orderToSign.price;\n\t\t}\n\n\t\tconst negRisk = options?.negRisk ?? (await this.getNegRisk(tokenID));\n\n\t\tif (version === 1) {\n\t\t\tconst userFeeRateBps =\n\t\t\t\t\"feeRateBps\" in orderToSign ? (orderToSign as UserOrderV1).feeRateBps : undefined;\n\t\t\tconst feeRateBps = await this._resolveFeeRateBps(tokenID, userFeeRateBps);\n\t\t\t(orderToSign as UserOrderV1).feeRateBps = feeRateBps;\n\t\t}\n\n\t\treturn this.orderBuilder.buildOrder(\n\t\t\torderToSign,\n\t\t\t{\n\t\t\t\ttickSize,\n\t\t\t\tnegRisk,\n\t\t\t},\n\t\t\tversion,\n\t\t);\n\t}\n\n\tpublic async createMarketOrder(\n\t\tuserMarketOrder: UserMarketOrderV1 | UserMarketOrderV2,\n\t\toptions?: Partial<CreateOrderOptions>,\n\t): Promise<SignedOrder> {\n\t\tthis.canL1Auth();\n\n\t\tconst { tokenID } = userMarketOrder;\n\n\t\tawait this._ensureMarketInfoCached(tokenID);\n\n\t\tconst tickSize = await this._resolveTickSize(tokenID, options?.tickSize);\n\n\t\tif (!userMarketOrder.price) {\n\t\t\tuserMarketOrder.price = await this.calculateMarketPrice(\n\t\t\t\ttokenID,\n\t\t\t\tuserMarketOrder.side,\n\t\t\t\tuserMarketOrder.amount,\n\t\t\t\tuserMarketOrder.orderType,\n\t\t\t);\n\t\t}\n\n\t\tif (!priceValid(userMarketOrder.price, tickSize)) {\n\t\t\tthrow new Error(\n\t\t\t\t`invalid price (${userMarketOrder.price}), min: ${parseFloat(tickSize)} - max: ${\n\t\t\t\t\t1 - parseFloat(tickSize)\n\t\t\t\t}`,\n\t\t\t);\n\t\t}\n\n\t\tconst orderToSign = { ...userMarketOrder };\n\n\t\tif (this.builderConfig?.builderCode && !orderToSign.builderCode) {\n\t\t\torderToSign.builderCode = this.builderConfig.builderCode;\n\t\t}\n\n\t\tawait this.ensureBuilderFeeRateCached(orderToSign.builderCode);\n\n\t\tif (\n\t\t\torderToSign.side === Side.BUY &&\n\t\t\t\"userUSDCBalance\" in orderToSign &&\n\t\t\torderToSign.userUSDCBalance !== undefined\n\t\t) {\n\t\t\t// biome-ignore lint/style/noNonNullAssertion: price is validated above\n\t\t\tconst price = orderToSign.price!;\n\t\t\torderToSign.amount = await this.adjustBuyAmountForBalance(\n\t\t\t\ttokenID,\n\t\t\t\torderToSign.amount,\n\t\t\t\tprice,\n\t\t\t\torderToSign.userUSDCBalance,\n\t\t\t\torderToSign.builderCode,\n\t\t\t);\n\t\t}\n\n\t\tconst negRisk = options?.negRisk ?? (await this.getNegRisk(tokenID));\n\t\tconst version = options?.version ?? (await this.resolveVersion());\n\n\t\tif (version === 1) {\n\t\t\tconst userFeeRateBps =\n\t\t\t\t\"feeRateBps\" in orderToSign\n\t\t\t\t\t? (orderToSign as UserMarketOrderV1).feeRateBps\n\t\t\t\t\t: undefined;\n\t\t\tconst feeRateBps = await this._resolveFeeRateBps(tokenID, userFeeRateBps);\n\t\t\t(orderToSign as UserMarketOrderV1).feeRateBps = feeRateBps;\n\t\t}\n\n\t\treturn this.orderBuilder.buildMarketOrder(\n\t\t\torderToSign,\n\t\t\t{\n\t\t\t\ttickSize,\n\t\t\t\tnegRisk,\n\t\t\t},\n\t\t\tversion,\n\t\t);\n\t}\n\n\tpublic async createExchangeV3OrderFromAmounts(\n\t\tuserOrder: ExchangeV3OrderAmounts,\n\t): Promise<SignedOrder> {\n\t\tthis.canL1Auth();\n\n\t\tconst orderToSign = { ...userOrder };\n\t\tif (this.builderConfig?.builderCode && !orderToSign.builderCode) {\n\t\t\torderToSign.builderCode = this.builderConfig.builderCode;\n\t\t}\n\n\t\treturn this.orderBuilder.buildExchangeV3OrderFromAmounts(orderToSign);\n\t}\n\n\tpublic async createAndPostOrder<T extends OrderType.GTC | OrderType.GTD = OrderType.GTC>(\n\t\tuserOrder: UserOrderV1 | UserOrderV2,\n\t\toptions?: Partial<CreateOrderOptions>,\n\t\torderType: T = OrderType.GTC as T,\n\t\tpostOnly = false,\n\t\tdeferExec = false,\n\t): Promise<any> {\n\t\tlet postOrderResponse: any;\n\n\t\tawait this._retryOnVersionUpdate(async () => {\n\t\t\tconst order = await this.createOrder(userOrder, options);\n\t\t\tpostOrderResponse = await this.postOrder(order, orderType, postOnly, deferExec);\n\t\t});\n\n\t\treturn postOrderResponse;\n\t}\n\n\tpublic async createAndPostMarketOrder<T extends OrderType.FOK | OrderType.FAK = OrderType.FOK>(\n\t\tuserMarketOrder: UserMarketOrderV1 | UserMarketOrderV2,\n\t\toptions?: Partial<CreateOrderOptions>,\n\t\torderType: T = OrderType.FOK as T,\n\t\tdeferExec = false,\n\t): Promise<any> {\n\t\tlet postOrderMarketResponse: any;\n\n\t\tawait this._retryOnVersionUpdate(async () => {\n\t\t\tconst order = await this.createMarketOrder(userMarketOrder, options);\n\t\t\tpostOrderMarketResponse = await this.postOrder(order, orderType, false, deferExec);\n\t\t});\n\n\t\treturn postOrderMarketResponse;\n\t}\n\n\tpublic async getOpenOrders(\n\t\tparams?: OpenOrderParams,\n\t\tonly_first_page = false,\n\t\tnext_cursor?: string,\n\t): Promise<OpenOrdersResponse> {\n\t\tthis.canL2Auth();\n\t\tconst endpoint = GET_OPEN_ORDERS;\n\t\tconst l2HeaderArgs = {\n\t\t\tmethod: GET,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\tl2HeaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\tlet results: OpenOrder[] = [];\n\t\tnext_cursor = next_cursor || INITIAL_CURSOR;\n\t\twhile (next_cursor !== END_CURSOR && (next_cursor === INITIAL_CURSOR || !only_first_page)) {\n\t\t\tconst _params: any = {\n\t\t\t\t...params,\n\t\t\t\tnext_cursor,\n\t\t\t};\n\t\t\tconst response = await this.get(`${this.host}${endpoint}`, {\n\t\t\t\theaders,\n\t\t\t\tparams: _params,\n\t\t\t});\n\t\t\tnext_cursor = response.next_cursor;\n\t\t\tresults = [...results, ...response.data];\n\t\t}\n\t\treturn results;\n\t}\n\n\tpublic async getPreMigrationOrders(\n\t\tonly_first_page = false,\n\t\tnext_cursor?: string,\n\t): Promise<PreMigrationOrdersResponse> {\n\t\tthis.canL2Auth();\n\t\tconst endpoint = GET_PRE_MIGRATION_ORDERS;\n\t\tconst l2HeaderArgs = {\n\t\t\tmethod: GET,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\tl2HeaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\tlet results: PreMigrationOrder[] = [];\n\t\tnext_cursor = next_cursor || INITIAL_CURSOR;\n\t\twhile (next_cursor !== END_CURSOR && (next_cursor === INITIAL_CURSOR || !only_first_page)) {\n\t\t\tconst _params: any = { next_cursor };\n\t\t\tconst response = await this.get(`${this.host}${endpoint}`, {\n\t\t\t\theaders,\n\t\t\t\tparams: _params,\n\t\t\t});\n\t\t\tnext_cursor = response.next_cursor;\n\t\t\tresults = [...results, ...response.data];\n\t\t}\n\t\treturn results;\n\t}\n\n\tpublic async postOrder<T extends OrderType = OrderType.GTC>(\n\t\torder: SignedOrder,\n\t\torderType: T = OrderType.GTC as T,\n\t\tpostOnly = false,\n\t\tdeferExec = false,\n\t): Promise<any> {\n\t\tthis.canL2Auth();\n\t\tif (postOnly && (orderType === OrderType.FOK || orderType === OrderType.FAK)) {\n\t\t\tthrow new Error(\"postOnly is not supported for FOK/FAK orders\");\n\t\t}\n\t\tconst endpoint = POST_ORDER;\n\n\t\tconst orderPayload = isV2Order(order)\n\t\t\t? orderToJsonV2(order, this.creds?.key || \"\", orderType, postOnly, deferExec)\n\t\t\t: orderToJsonV1(order, this.creds?.key || \"\", orderType, postOnly, deferExec);\n\n\t\tconst l2HeaderArgs = {\n\t\t\tmethod: POST,\n\t\t\trequestPath: endpoint,\n\t\t\tbody: JSON.stringify(orderPayload),\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\tl2HeaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\tconst res = await this.post(\n\t\t\t`${this.host}${endpoint}`,\n\t\t\t{\n\t\t\t\theaders,\n\t\t\t\tdata: orderPayload,\n\t\t\t},\n\t\t\ttrue,\n\t\t);\n\n\t\tif (this._isOrderVersionMismatch(res)) await this.resolveVersion(true);\n\n\t\treturn this.throwIfError(res);\n\t}\n\n\tpublic async postOrders(\n\t\targs: PostOrdersArgs[],\n\t\tpostOnly = false,\n\t\tdeferExec = false,\n\t): Promise<any> {\n\t\tthis.canL2Auth();\n\t\tif (\n\t\t\tpostOnly &&\n\t\t\targs.some(({ orderType }) => orderType === OrderType.FOK || orderType === OrderType.FAK)\n\t\t) {\n\t\t\tthrow new Error(\"postOnly is not supported for FOK/FAK orders\");\n\t\t}\n\t\tconst endpoint = POST_ORDERS;\n\t\tconst ordersPayload: (NewOrderV2<any> | NewOrderV1<any>)[] = [];\n\t\tfor (const arg of args) {\n\t\t\tconst { order, orderType } = arg;\n\t\t\t// Version-aware dispatch\n\t\t\tconst orderPayload = isV2Order(order)\n\t\t\t\t? orderToJsonV2(order, this.creds?.key || \"\", orderType, postOnly, deferExec)\n\t\t\t\t: orderToJsonV1(order, this.creds?.key || \"\", orderType, postOnly, deferExec);\n\t\t\tordersPayload.push(orderPayload);\n\t\t}\n\n\t\tconst l2HeaderArgs = {\n\t\t\tmethod: POST,\n\t\t\trequestPath: endpoint,\n\t\t\tbody: JSON.stringify(ordersPayload),\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\tl2HeaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\tconst res = await this.post(\n\t\t\t`${this.host}${endpoint}`,\n\t\t\t{\n\t\t\t\theaders,\n\t\t\t\tdata: ordersPayload,\n\t\t\t},\n\t\t\ttrue,\n\t\t);\n\n\t\tif (this._isOrderVersionMismatch(res)) await this.resolveVersion(true);\n\n\t\treturn this.throwIfError(res);\n\t}\n\n\tpublic async cancelOrder(payload: OrderPayload): Promise<any> {\n\t\tthis.canL2Auth();\n\t\tconst endpoint = CANCEL_ORDER;\n\t\tconst l2HeaderArgs = {\n\t\t\tmethod: DELETE,\n\t\t\trequestPath: endpoint,\n\t\t\tbody: JSON.stringify(payload),\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\tl2HeaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\t\treturn this.del(`${this.host}${endpoint}`, { headers, data: payload });\n\t}\n\n\tpublic async cancelOrders(ordersHashes: string[]): Promise<any> {\n\t\tthis.canL2Auth();\n\t\tconst endpoint = CANCEL_ORDERS;\n\t\tconst l2HeaderArgs = {\n\t\t\tmethod: DELETE,\n\t\t\trequestPath: endpoint,\n\t\t\tbody: JSON.stringify(ordersHashes),\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\tl2HeaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\t\treturn this.del(`${this.host}${endpoint}`, { headers, data: ordersHashes });\n\t}\n\n\tpublic async cancelAll(): Promise<any> {\n\t\tthis.canL2Auth();\n\t\tconst endpoint = CANCEL_ALL;\n\t\tconst l2HeaderArgs = {\n\t\t\tmethod: DELETE,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\tl2HeaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\t\treturn this.del(`${this.host}${endpoint}`, { headers });\n\t}\n\n\tpublic async cancelMarketOrders(payload: OrderMarketCancelParams): Promise<any> {\n\t\tthis.canL2Auth();\n\t\tconst endpoint = CANCEL_MARKET_ORDERS;\n\t\tconst l2HeaderArgs = {\n\t\t\tmethod: DELETE,\n\t\t\trequestPath: endpoint,\n\t\t\tbody: JSON.stringify(payload),\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\tl2HeaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\t\treturn this.del(`${this.host}${endpoint}`, { headers, data: payload });\n\t}\n\n\tpublic async isOrderScoring(params?: OrderScoringParams): Promise<OrderScoring> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = IS_ORDER_SCORING;\n\t\tconst headerArgs = {\n\t\t\tmethod: GET,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\treturn this.get(`${this.host}${endpoint}`, { headers, params });\n\t}\n\n\tpublic async areOrdersScoring(params?: OrdersScoringParams): Promise<OrdersScoring> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = ARE_ORDERS_SCORING;\n\t\tconst payload = JSON.stringify(params?.orderIds);\n\t\tconst headerArgs = {\n\t\t\tmethod: POST,\n\t\t\trequestPath: endpoint,\n\t\t\tbody: payload,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\treturn this.post(`${this.host}${endpoint}`, {\n\t\t\theaders,\n\t\t\tdata: payload,\n\t\t});\n\t}\n\n\t// Rewards\n\tpublic async getEarningsForUserForDay(date: string): Promise<UserEarning[]> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = GET_EARNINGS_FOR_USER_FOR_DAY;\n\t\tconst headerArgs = {\n\t\t\tmethod: GET,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\tlet results: UserEarning[] = [];\n\t\tlet next_cursor = INITIAL_CURSOR;\n\t\twhile (next_cursor !== END_CURSOR) {\n\t\t\tconst params = {\n\t\t\t\tdate,\n\t\t\t\tsignature_type: this.orderBuilder.signatureType,\n\t\t\t\tnext_cursor,\n\t\t\t};\n\n\t\t\tconst response = await this.get(`${this.host}${endpoint}`, {\n\t\t\t\theaders,\n\t\t\t\tparams,\n\t\t\t});\n\t\t\tnext_cursor = response.next_cursor;\n\t\t\tresults = [...results, ...response.data];\n\t\t}\n\t\treturn results;\n\t}\n\n\tpublic async getTotalEarningsForUserForDay(date: string): Promise<TotalUserEarning[]> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = GET_TOTAL_EARNINGS_FOR_USER_FOR_DAY;\n\t\tconst headerArgs = {\n\t\t\tmethod: GET,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\tconst params = {\n\t\t\tdate,\n\t\t\tsignature_type: this.orderBuilder.signatureType,\n\t\t};\n\n\t\treturn await this.get(`${this.host}${endpoint}`, {\n\t\t\theaders,\n\t\t\tparams,\n\t\t});\n\t}\n\n\tpublic async getUserEarningsAndMarketsConfig(\n\t\tdate: string,\n\t\torder_by = \"\",\n\t\tposition = \"\",\n\t\tno_competition = false,\n\t): Promise<UserRewardsEarning[]> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = GET_REWARDS_EARNINGS_PERCENTAGES;\n\t\tconst headerArgs = {\n\t\t\tmethod: GET,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\tlet results: UserRewardsEarning[] = [];\n\t\tlet next_cursor = INITIAL_CURSOR;\n\t\twhile (next_cursor !== END_CURSOR) {\n\t\t\tconst params = {\n\t\t\t\tdate,\n\t\t\t\tsignature_type: this.orderBuilder.signatureType,\n\t\t\t\tnext_cursor,\n\t\t\t\torder_by,\n\t\t\t\tposition,\n\t\t\t\tno_competition,\n\t\t\t};\n\n\t\t\tconst response = await this.get(`${this.host}${endpoint}`, {\n\t\t\t\theaders,\n\t\t\t\tparams,\n\t\t\t});\n\t\t\tnext_cursor = response.next_cursor;\n\t\t\tresults = [...results, ...response.data];\n\t\t}\n\t\treturn results;\n\t}\n\n\tpublic async getRewardPercentages(): Promise<RewardsPercentages> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = GET_LIQUIDITY_REWARD_PERCENTAGES;\n\t\tconst headerArgs = {\n\t\t\tmethod: GET,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\tconst _params = {\n\t\t\tsignature_type: this.orderBuilder.signatureType,\n\t\t};\n\n\t\treturn this.get(`${this.host}${endpoint}`, { headers, params: _params });\n\t}\n\n\tpublic async getCurrentRewards(): Promise<MarketReward[]> {\n\t\tlet results: MarketReward[] = [];\n\t\tlet next_cursor = INITIAL_CURSOR;\n\t\twhile (next_cursor !== END_CURSOR) {\n\t\t\tconst response = await this.get(`${this.host}${GET_REWARDS_MARKETS_CURRENT}`, {\n\t\t\t\tparams: { next_cursor },\n\t\t\t});\n\t\t\tnext_cursor = response.next_cursor;\n\t\t\tresults = [...results, ...response.data];\n\t\t}\n\t\treturn results;\n\t}\n\n\tpublic async getRawRewardsForMarket(conditionId: string): Promise<MarketReward[]> {\n\t\tlet results: MarketReward[] = [];\n\t\tlet next_cursor = INITIAL_CURSOR;\n\t\twhile (next_cursor !== END_CURSOR) {\n\t\t\tconst response = await this.get(`${this.host}${GET_REWARDS_MARKETS}${conditionId}`, {\n\t\t\t\tparams: { next_cursor },\n\t\t\t});\n\t\t\tnext_cursor = response.next_cursor;\n\t\t\tresults = [...results, ...response.data];\n\t\t}\n\t\treturn results;\n\t}\n\n\tpublic async calculateMarketPrice(\n\t\ttokenID: string,\n\t\tside: Side,\n\t\tamount: number,\n\t\torderType: OrderType = OrderType.FOK,\n\t): Promise<number> {\n\t\tconst book = await this.getOrderBook(tokenID);\n\t\tif (!book) {\n\t\t\tthrow new Error(\"no orderbook\");\n\t\t}\n\t\tif (side === Side.BUY) {\n\t\t\tif (!book.asks) {\n\t\t\t\tthrow new Error(\"no match\");\n\t\t\t}\n\t\t\treturn calculateBuyMarketPrice(book.asks, amount, orderType);\n\t\t} else {\n\t\t\tif (!book.bids) {\n\t\t\t\tthrow new Error(\"no match\");\n\t\t\t}\n\t\t\treturn calculateSellMarketPrice(book.bids, amount, orderType);\n\t\t}\n\t}\n\n\tpublic async createBuilderApiKey(): Promise<BuilderApiKey> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = CREATE_BUILDER_API_KEY;\n\t\tconst headerArgs = {\n\t\t\tmethod: POST,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\treturn this.post(`${this.host}${endpoint}`, { headers });\n\t}\n\n\tpublic async getBuilderApiKeys(): Promise<BuilderApiKeyResponse[]> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = GET_BUILDER_API_KEYS;\n\t\tconst headerArgs = {\n\t\t\tmethod: GET,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\treturn this.get(`${this.host}${endpoint}`, { headers });\n\t}\n\n\tpublic async revokeBuilderApiKey(): Promise<any> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = REVOKE_BUILDER_API_KEY;\n\t\tconst headerArgs = {\n\t\t\tmethod: DELETE,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\treturn this.del(`${this.host}${endpoint}`, { headers });\n\t}\n\n\tpublic async getMarketTradesEvents(conditionID: string): Promise<MarketTradeEvent[]> {\n\t\treturn this.get(`${this.host}${GET_MARKET_TRADES_EVENTS}${conditionID}`);\n\t}\n\n\tprivate canL1Auth(): void {\n\t\tif (this.signer === undefined) {\n\t\t\tthrow L1_AUTH_UNAVAILABLE_ERROR;\n\t\t}\n\t}\n\n\tprivate canL2Auth(): void {\n\t\tif (this.signer === undefined) {\n\t\t\tthrow L1_AUTH_UNAVAILABLE_ERROR;\n\t\t}\n\n\t\tif (this.creds === undefined) {\n\t\t\tthrow L2_AUTH_NOT_AVAILABLE;\n\t\t}\n\t}\n\n\tprivate isBuilderOrder(builderCode?: string): boolean {\n\t\treturn builderCode !== undefined && builderCode !== bytes32Zero;\n\t}\n\n\tprivate async getBuilderTakerFeeRate(builderCode?: string): Promise<number> {\n\t\tif (!this.isBuilderOrder(builderCode)) return 0;\n\n\t\tawait this.ensureBuilderFeeRateCached(builderCode);\n\t\treturn this.builderFeeRates[builderCode ?? \"\"]?.taker ?? 0;\n\t}\n\n\tprivate async adjustBuyAmountForBalance(\n\t\ttokenID: string,\n\t\tamount: number,\n\t\tprice: number,\n\t\tuserUSDCBalance: number,\n\t\tbuilderCode?: string,\n\t): Promise<number> {\n\t\tawait this._ensureMarketInfoCached(tokenID);\n\t\tconst builderTakerFeeRate = await this.getBuilderTakerFeeRate(builderCode);\n\n\t\treturn adjustBuyAmountForFees(\n\t\t\tamount,\n\t\t\tprice,\n\t\t\tuserUSDCBalance,\n\t\t\tthis.feeInfos[tokenID].rate,\n\t\t\tthis.feeInfos[tokenID].exponent,\n\t\t\tbuilderTakerFeeRate,\n\t\t\tthis.feeSlippage,\n\t\t);\n\t}\n\n\tprivate async _ensureMarketInfoCached(tokenID: string): Promise<void> {\n\t\tif (tokenID in this.feeInfos) return;\n\n\t\tif (!(tokenID in this.tokenConditionMap)) {\n\t\t\tconst result = await this.get(`${this.host}${GET_MARKET_BY_TOKEN}${tokenID}`);\n\t\t\tif (!result?.condition_id) {\n\t\t\t\tthrow new Error(`failed to resolve condition id for token ${tokenID}`);\n\t\t\t}\n\t\t\tthis.tokenConditionMap[tokenID] = result.condition_id as string;\n\t\t}\n\n\t\tawait this.getClobMarketInfo(this.tokenConditionMap[tokenID]);\n\t}\n\n\tprivate async ensureBuilderFeeRateCached(builderCode?: string): Promise<void> {\n\t\tif (!builderCode || builderCode === bytes32Zero) return;\n\t\tif (builderCode in this.builderFeeRates) return;\n\n\t\tconst result = await this.get(`${this.host}${GET_BUILDER_FEES}${builderCode}`);\n\t\tthis.builderFeeRates[builderCode] = {\n\t\t\tmaker: result.builder_maker_fee_rate_bps / BUILDER_FEES_BPS,\n\t\t\ttaker: result.builder_taker_fee_rate_bps / BUILDER_FEES_BPS,\n\t\t};\n\t}\n\n\tprivate async _resolveTickSize(tokenID: string, tickSize?: TickSize): Promise<TickSize> {\n\t\tconst minTickSize = await this.getTickSize(tokenID);\n\t\tif (tickSize) {\n\t\t\tif (isTickSizeSmaller(tickSize, minTickSize)) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`invalid tick size (${tickSize}), minimum for the market is ${minTickSize}`,\n\t\t\t\t);\n\t\t\t}\n\t\t} else {\n\t\t\ttickSize = minTickSize;\n\t\t}\n\t\treturn tickSize;\n\t}\n\n\tprivate async _resolveFeeRateBps(tokenID: string, userFeeRateBps?: number): Promise<number> {\n\t\tconst marketFeeRateBps = await this.getFeeRateBps(tokenID);\n\t\tif (\n\t\t\tmarketFeeRateBps > 0 &&\n\t\t\tuserFeeRateBps !== undefined &&\n\t\t\tuserFeeRateBps !== marketFeeRateBps\n\t\t) {\n\t\t\tthrow new Error(\n\t\t\t\t`invalid user provided fee rate: ${userFeeRateBps}, fee rate for the market must be ${marketFeeRateBps}`,\n\t\t\t);\n\t\t}\n\t\treturn marketFeeRateBps;\n\t}\n\n\tprivate async resolveVersion(forceUpdate: boolean = false): Promise<number> {\n\t\t// Use cached version if given\n\t\tif (!forceUpdate && this.cachedVersion !== undefined) {\n\t\t\treturn this.cachedVersion;\n\t\t}\n\n\t\t// Query API and cache the result\n\t\tconst apiVersion = await this.getVersion();\n\t\tthis.cachedVersion = apiVersion;\n\n\t\treturn apiVersion;\n\t}\n\n\tprivate async _retryOnVersionUpdate(retryFunc: () => Promise<unknown>) {\n\t\tconst version = await this.resolveVersion();\n\n\t\tfor (let attempt = 0; attempt < 2; attempt++) {\n\t\t\tawait retryFunc();\n\n\t\t\t// no need to retry if version is unchanged\n\t\t\tif (version === (await this.resolveVersion())) break;\n\t\t}\n\t}\n\n\tprivate _isOrderVersionMismatch(resp: ClobErrorResponseBody) {\n\t\tconst error = resp?.error;\n\t\tif (!error) return false;\n\t\tconst message = typeof error === \"string\" ? error : JSON.stringify(error);\n\t\treturn message.includes(ORDER_VERSION_MISMATCH_ERROR);\n\t}\n\n\tprivate throwIfError(result: any): any {\n\t\tif (this.throwOnError && result && typeof result === \"object\" && \"error\" in result) {\n\t\t\tconst msg =\n\t\t\t\ttypeof result.error === \"string\" ? result.error : JSON.stringify(result.error);\n\t\t\tthrow new ApiError(msg, result.status, result);\n\t\t}\n\t\treturn result;\n\t}\n\n\t// http methods\n\tprivate async get(endpoint: string, options?: RequestOptions, skipThrow = false) {\n\t\tconst result = await get(endpoint, options);\n\t\treturn skipThrow ? result : this.throwIfError(result);\n\t}\n\n\tprivate async post(endpoint: string, options?: RequestOptions, skipThrow = false) {\n\t\tconst result = await post(endpoint, options, this.retryOnError);\n\t\treturn skipThrow ? result : this.throwIfError(result);\n\t}\n\n\tprivate async del(endpoint: string, options?: RequestOptions, skipThrow = false) {\n\t\tconst result = await del(endpoint, options);\n\t\treturn skipThrow ? result : this.throwIfError(result);\n\t}\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"client.cjs","names":["OrderBuilder","SignatureTypeV2","OK","createL2Headers","POST","HEARTBEAT","TIME","INITIAL_CURSOR","GET_SAMPLING_SIMPLIFIED_MARKETS","GET_SAMPLING_MARKETS","GET_SIMPLIFIED_MARKETS","GET_MARKETS","GET_MARKET","result: MarketDetails","GET_CLOB_MARKET","GET_ORDER_BOOK","GET_ORDER_BOOKS","GET_TICK_SIZE","GET_NEG_RISK","GET_FEE_RATE","generateOrderBookSummaryHash","GET_MIDPOINT","GET_MIDPOINTS","GET_PRICE","GET_PRICES","GET_SPREAD","GET_SPREADS","GET_LAST_TRADE_PRICE","GET_LAST_TRADES_PRICES","GET_PRICES_HISTORY","CREATE_API_KEY","createL1Headers","DERIVE_API_KEY","GET_API_KEYS","GET","CLOSED_ONLY","DELETE_API_KEY","DELETE","CREATE_READONLY_API_KEY","GET_READONLY_API_KEYS","DELETE_READONLY_API_KEY","GET_ORDER","GET_TRADES","results: Trade[]","END_CURSOR","_params: any","bytes32Zero","GET_BUILDER_TRADES","GET_NOTIFICATIONS","DROP_NOTIFICATIONS","parseDropNotificationParams","GET_BALANCE_ALLOWANCE","UPDATE_BALANCE_ALLOWANCE","priceValid","roundNormal","ROUNDING_CONFIG","Side","OrderType","postOrderResponse: OrderResponse | undefined","postOrderMarketResponse: OrderResponse | undefined","GET_OPEN_ORDERS","results: OpenOrder[]","GET_PRE_MIGRATION_ORDERS","results: PreMigrationOrder[]","POST_ORDER","isV2Order","orderToJsonV2","orderToJsonV1","response: OrderResponse","POST_ORDERS","ordersPayload: (NewOrderV2<any> | NewOrderV1<any>)[]","responses: OrderResponse[]","CANCEL_ORDER","CANCEL_ORDERS","CANCEL_ALL","CANCEL_MARKET_ORDERS","IS_ORDER_SCORING","ARE_ORDERS_SCORING","GET_EARNINGS_FOR_USER_FOR_DAY","results: UserEarning[]","GET_TOTAL_EARNINGS_FOR_USER_FOR_DAY","GET_REWARDS_EARNINGS_PERCENTAGES","results: UserRewardsEarning[]","GET_LIQUIDITY_REWARD_PERCENTAGES","results: MarketReward[]","GET_REWARDS_MARKETS_CURRENT","GET_REWARDS_MARKETS","calculateBuyMarketPrice","calculateSellMarketPrice","CREATE_BUILDER_API_KEY","GET_BUILDER_API_KEYS","REVOKE_BUILDER_API_KEY","GET_MARKET_TRADES_EVENTS","L1_AUTH_UNAVAILABLE_ERROR","L2_AUTH_NOT_AVAILABLE","adjustBuyAmountForFees","GET_MARKET_BY_TOKEN","GET_BUILDER_FEES","BUILDER_FEES_BPS","isTickSizeSmaller","ORDER_VERSION_MISMATCH_ERROR","ApiError","get","post","del"],"sources":["../src/client.ts"],"sourcesContent":["import {\n\tBUILDER_FEES_BPS,\n\tbytes32Zero,\n\tEND_CURSOR,\n\tINITIAL_CURSOR,\n\tORDER_VERSION_MISMATCH_ERROR,\n} from \"./constants.js\";\nimport {\n\tARE_ORDERS_SCORING,\n\tCANCEL_ALL,\n\tCANCEL_MARKET_ORDERS,\n\tCANCEL_ORDER,\n\tCANCEL_ORDERS,\n\tCLOSED_ONLY,\n\tCREATE_API_KEY,\n\tCREATE_BUILDER_API_KEY,\n\tCREATE_READONLY_API_KEY,\n\tDELETE_API_KEY,\n\tDELETE_READONLY_API_KEY,\n\tDERIVE_API_KEY,\n\tDROP_NOTIFICATIONS,\n\tGET_API_KEYS,\n\tGET_BALANCE_ALLOWANCE,\n\tGET_BUILDER_API_KEYS,\n\tGET_BUILDER_FEES,\n\tGET_BUILDER_TRADES,\n\tGET_CLOB_MARKET,\n\tGET_EARNINGS_FOR_USER_FOR_DAY,\n\tGET_FEE_RATE,\n\tGET_LAST_TRADE_PRICE,\n\tGET_LAST_TRADES_PRICES,\n\tGET_LIQUIDITY_REWARD_PERCENTAGES,\n\tGET_MARKET,\n\tGET_MARKET_BY_TOKEN,\n\tGET_MARKET_TRADES_EVENTS,\n\tGET_MARKETS,\n\tGET_MIDPOINT,\n\tGET_MIDPOINTS,\n\tGET_NEG_RISK,\n\tGET_NOTIFICATIONS,\n\tGET_OPEN_ORDERS,\n\tGET_ORDER,\n\tGET_ORDER_BOOK,\n\tGET_ORDER_BOOKS,\n\tGET_PRE_MIGRATION_ORDERS,\n\tGET_PRICE,\n\tGET_PRICES,\n\tGET_PRICES_HISTORY,\n\tGET_READONLY_API_KEYS,\n\tGET_REWARDS_EARNINGS_PERCENTAGES,\n\tGET_REWARDS_MARKETS,\n\tGET_REWARDS_MARKETS_CURRENT,\n\tGET_SAMPLING_MARKETS,\n\tGET_SAMPLING_SIMPLIFIED_MARKETS,\n\tGET_SIMPLIFIED_MARKETS,\n\tGET_SPREAD,\n\tGET_SPREADS,\n\tGET_TICK_SIZE,\n\tGET_TOTAL_EARNINGS_FOR_USER_FOR_DAY,\n\tGET_TRADES,\n\tHEARTBEAT,\n\tIS_ORDER_SCORING,\n\tOK,\n\tPOST_ORDER,\n\tPOST_ORDERS,\n\tREVOKE_BUILDER_API_KEY,\n\tTIME,\n\tUPDATE_BALANCE_ALLOWANCE,\n} from \"./endpoints.js\";\nimport { ApiError, L1_AUTH_UNAVAILABLE_ERROR, L2_AUTH_NOT_AVAILABLE } from \"./errors.js\";\nimport { adjustBuyAmountForFees, validateFeeSlippage } from \"./fees/index.js\";\nimport { createL1Headers, createL2Headers } from \"./headers/index.js\";\nimport {\n\tDELETE,\n\tdel,\n\tGET,\n\tget,\n\tPOST,\n\tparseDropNotificationParams,\n\tpost,\n\ttype RequestOptions,\n} from \"./http-helpers/index.js\";\nimport {\n\tcalculateBuyMarketPrice,\n\tcalculateSellMarketPrice,\n\tROUNDING_CONFIG,\n} from \"./order-builder/helpers/index.js\";\nimport { OrderBuilder } from \"./order-builder/index.js\";\nimport { SignatureTypeV2 } from \"./order-utils/model/signatureTypeV2.js\";\nimport type { ClobSigner } from \"./signing/signer.js\";\nimport type {\n\tApiKeyCreds,\n\tApiKeyRaw,\n\tApiKeysResponse,\n\tBalanceAllowanceParams,\n\tBalanceAllowanceResponse,\n\tBanStatus,\n\tBookParams,\n\tBuilderApiKey,\n\tBuilderApiKeyResponse,\n\tBuilderConfig,\n\tBuilderFeeRates,\n\tBuilderTrade,\n\tBuilderTradeParams,\n\tBuilderTradesResponse,\n\tChain,\n\tClobErrorResponseBody,\n\tCreateOrderOptions,\n\tDropNotificationParams,\n\tExchangeV3OrderAmounts,\n\tFeeInfos,\n\tFeeRates,\n\tMarketDetails,\n\tMarketPrice,\n\tMarketReward,\n\tMarketTradeEvent,\n\tNegRisk,\n\tNewOrderV1,\n\tNewOrderV2,\n\tNotification,\n\tOpenOrder,\n\tOpenOrderParams,\n\tOpenOrdersResponse,\n\tOrderBookSummary,\n\tOrderMarketCancelParams,\n\tOrderPayload,\n\tOrderResponse,\n\tOrderScoring,\n\tOrderScoringParams,\n\tOrdersScoring,\n\tOrdersScoringParams,\n\tPaginationPayload,\n\tPostOrdersArgs,\n\tPreMigrationOrder,\n\tPreMigrationOrdersResponse,\n\tPriceHistoryFilterParams,\n\tReadonlyApiKeyResponse,\n\tRewardsPercentages,\n\tTickSize,\n\tTickSizes,\n\tTokenConditionMap,\n\tTotalUserEarning,\n\tTrade,\n\tTradeParams,\n\tTradesPaginatedResponse,\n\tUserEarning,\n\tUserMarketOrderV1,\n\tUserMarketOrderV2,\n\tUserOrderV1,\n\tUserOrderV2,\n\tUserRewardsEarning,\n} from \"./types/index.js\";\nimport { OrderType, orderToJsonV1, orderToJsonV2, Side } from \"./types/index.js\";\nimport { isV2Order, type SignedOrder } from \"./types/unifiedOrder.js\";\nimport {\n\tgenerateOrderBookSummaryHash,\n\tisTickSizeSmaller,\n\tpriceValid,\n\troundNormal,\n} from \"./utilities.js\";\n\nexport { adjustBuyAmountForFees } from \"./fees/index.js\";\n\nconst RESOLVE_TRADES_TIMEOUT_MS = 30_000;\nconst RESOLVE_TRADES_POLL_INTERVAL_MS = 250;\nconst FAILED_TRADE_STATUS = \"FAILED\";\n\nconst sleep = (ms: number) => new Promise(resolve => setTimeout(resolve, ms));\n\n// A trade is resolved once execution reached a terminal outcome: it either\n// carries a settlement transaction hash or it failed and never will.\nconst isTradeResolved = (trade: Trade): boolean =>\n\ttrade.status.toUpperCase() === FAILED_TRADE_STATUS ||\n\tBoolean(trade.transaction_hash && trade.transaction_hash.length > 0);\n\nexport interface ClobClientOptions {\n\thost: string;\n\tchain: Chain;\n\tsigner?: ClobSigner;\n\tcreds?: ApiKeyCreds;\n\tsignatureType?: SignatureTypeV2;\n\tfunderAddress?: string;\n\tuseServerTime?: boolean;\n\tbuilderConfig?: BuilderConfig;\n\tgetSigner?: () => Promise<ClobSigner> | ClobSigner;\n\tretryOnError?: boolean;\n\tthrowOnError?: boolean;\n\tfeeSlippage?: number;\n}\n\nexport class ClobClient {\n\treadonly host: string;\n\n\treadonly chainId: Chain;\n\n\t// Used to perform Level 1 authentication and sign orders\n\treadonly signer?: ClobSigner;\n\n\t// Used to perform Level 2 authentication\n\treadonly creds?: ApiKeyCreds;\n\n\treadonly orderBuilder: OrderBuilder;\n\n\treadonly tickSizes: TickSizes;\n\n\treadonly negRisk: NegRisk;\n\n\treadonly feeInfos: FeeInfos;\n\n\t// Fee rate bps data for CLOB V1\n\treadonly feeRates: FeeRates;\n\n\treadonly builderFeeRates: BuilderFeeRates;\n\n\tprivate readonly tokenConditionMap: TokenConditionMap;\n\n\treadonly useServerTime?: boolean;\n\n\treadonly builderConfig?: BuilderConfig;\n\n\treadonly signatureType: SignatureTypeV2;\n\n\treadonly funderAddress?: string;\n\n\tprivate cachedVersion?: number;\n\n\treadonly retryOnError?: boolean;\n\n\treadonly throwOnError?: boolean;\n\n\treadonly feeSlippage: number;\n\n\tconstructor({\n\t\thost,\n\t\tchain,\n\t\tsigner,\n\t\tcreds,\n\t\tsignatureType,\n\t\tfunderAddress,\n\t\tuseServerTime,\n\t\tbuilderConfig,\n\t\tgetSigner,\n\t\tretryOnError,\n\t\tthrowOnError,\n\t\tfeeSlippage,\n\t}: ClobClientOptions) {\n\t\tthis.host = host.endsWith(\"/\") ? host.slice(0, -1) : host;\n\t\tthis.chainId = chain;\n\n\t\tif (signer !== undefined) {\n\t\t\tthis.signer = signer;\n\t\t}\n\t\tif (creds !== undefined) {\n\t\t\tthis.creds = creds;\n\t\t}\n\t\tthis.orderBuilder = new OrderBuilder(\n\t\t\tsigner as ClobSigner,\n\t\t\tchain,\n\t\t\tsignatureType,\n\t\t\tfunderAddress,\n\t\t\tgetSigner,\n\t\t);\n\t\tthis.signatureType = signatureType ?? SignatureTypeV2.EOA;\n\t\tthis.funderAddress = funderAddress;\n\t\tthis.tickSizes = {};\n\t\tthis.negRisk = {};\n\t\tthis.feeRates = {};\n\t\tthis.feeInfos = {};\n\t\tthis.builderFeeRates = {};\n\t\tthis.tokenConditionMap = {};\n\t\tthis.retryOnError = retryOnError;\n\t\tthis.throwOnError = throwOnError;\n\t\tthis.feeSlippage = feeSlippage ?? 0;\n\t\tvalidateFeeSlippage(this.feeSlippage);\n\t\tthis.useServerTime = useServerTime;\n\t\tif (builderConfig !== undefined) {\n\t\t\tthis.builderConfig = builderConfig;\n\t\t}\n\t}\n\n\t// Public endpoints\n\tpublic async getOk(): Promise<any> {\n\t\treturn this.get(`${this.host}${OK}`);\n\t}\n\n\tpublic async postHeartbeat(\n\t\theartbeatId = \"\",\n\t): Promise<{ heartbeat_id: string; error_msg?: string }> {\n\t\tthis.canL2Auth();\n\t\tconst body = JSON.stringify({ heartbeat_id: heartbeatId });\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\t{ method: POST, requestPath: HEARTBEAT, body },\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\t\treturn this.post(`${this.host}${HEARTBEAT}`, {\n\t\t\theaders,\n\t\t\tdata: { heartbeat_id: heartbeatId },\n\t\t});\n\t}\n\n\tpublic async getVersion(): Promise<number> {\n\t\tconst response = await this.get(`${this.host}/version`);\n\t\t// default to v2\n\t\treturn response?.version ?? 2;\n\t}\n\n\tpublic async getServerTime(): Promise<number> {\n\t\treturn this.get(`${this.host}${TIME}`);\n\t}\n\n\tpublic async getSamplingSimplifiedMarkets(\n\t\tnext_cursor = INITIAL_CURSOR,\n\t): Promise<PaginationPayload> {\n\t\treturn this.get(`${this.host}${GET_SAMPLING_SIMPLIFIED_MARKETS}`, {\n\t\t\tparams: { next_cursor },\n\t\t});\n\t}\n\n\tpublic async getSamplingMarkets(next_cursor = INITIAL_CURSOR): Promise<PaginationPayload> {\n\t\treturn this.get(`${this.host}${GET_SAMPLING_MARKETS}`, {\n\t\t\tparams: { next_cursor },\n\t\t});\n\t}\n\n\tpublic async getSimplifiedMarkets(next_cursor = INITIAL_CURSOR): Promise<PaginationPayload> {\n\t\treturn this.get(`${this.host}${GET_SIMPLIFIED_MARKETS}`, {\n\t\t\tparams: { next_cursor },\n\t\t});\n\t}\n\n\tpublic async getMarkets(next_cursor = INITIAL_CURSOR): Promise<PaginationPayload> {\n\t\treturn this.get(`${this.host}${GET_MARKETS}`, {\n\t\t\tparams: { next_cursor },\n\t\t});\n\t}\n\n\tpublic async getMarket(conditionID: string): Promise<any> {\n\t\treturn this.get(`${this.host}${GET_MARKET}${conditionID}`);\n\t}\n\n\tpublic async getClobMarketInfo(conditionID: string): Promise<MarketDetails> {\n\t\tconst result: MarketDetails = await this.get(\n\t\t\t`${this.host}${GET_CLOB_MARKET}${conditionID}`,\n\t\t);\n\n\t\tif (!result?.t) {\n\t\t\tthrow new Error(`failed to fetch market info for condition id ${conditionID}`);\n\t\t}\n\n\t\tfor (const token of result.t) {\n\t\t\tif (!token) continue;\n\t\t\tconst tokenId = token.t;\n\n\t\t\tthis.tokenConditionMap[tokenId] = conditionID;\n\t\t\tthis.tickSizes[tokenId] = result.mts.toString() as TickSize;\n\t\t\tthis.negRisk[tokenId] = result.nr ?? false;\n\n\t\t\tthis.feeInfos[tokenId] = {\n\t\t\t\trate: result.fd?.r ?? 0,\n\t\t\t\texponent: result.fd?.e ?? 0,\n\t\t\t};\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tpublic async getOrderBook(tokenID: string): Promise<OrderBookSummary> {\n\t\treturn this.get(`${this.host}${GET_ORDER_BOOK}`, {\n\t\t\tparams: { token_id: tokenID },\n\t\t});\n\t}\n\n\tpublic async getOrderBooks(params: BookParams[]): Promise<OrderBookSummary[]> {\n\t\treturn this.post(`${this.host}${GET_ORDER_BOOKS}`, {\n\t\t\tdata: params,\n\t\t});\n\t}\n\n\tpublic async getTickSize(tokenID: string): Promise<TickSize> {\n\t\tif (tokenID in this.tickSizes) {\n\t\t\treturn this.tickSizes[tokenID];\n\t\t}\n\n\t\tif (tokenID in this.tokenConditionMap) {\n\t\t\tawait this.getClobMarketInfo(this.tokenConditionMap[tokenID]);\n\t\t\treturn this.tickSizes[tokenID];\n\t\t}\n\n\t\tconst result = await this.get(`${this.host}${GET_TICK_SIZE}`, {\n\t\t\tparams: { token_id: tokenID },\n\t\t});\n\t\tthis.tickSizes[tokenID] = result.minimum_tick_size.toString() as TickSize;\n\n\t\treturn this.tickSizes[tokenID];\n\t}\n\n\tpublic async getNegRisk(tokenID: string): Promise<boolean> {\n\t\tif (tokenID in this.negRisk) {\n\t\t\treturn this.negRisk[tokenID];\n\t\t}\n\n\t\tif (tokenID in this.tokenConditionMap) {\n\t\t\tawait this.getClobMarketInfo(this.tokenConditionMap[tokenID]);\n\t\t\treturn this.negRisk[tokenID];\n\t\t}\n\n\t\tconst result = await this.get(`${this.host}${GET_NEG_RISK}`, {\n\t\t\tparams: { token_id: tokenID },\n\t\t});\n\t\tthis.negRisk[tokenID] = result.neg_risk as boolean;\n\n\t\treturn this.negRisk[tokenID];\n\t}\n\n\tpublic async getFeeRateBps(tokenID: string): Promise<number> {\n\t\tif (tokenID in this.feeRates) {\n\t\t\treturn this.feeRates[tokenID];\n\t\t}\n\n\t\tconst result = await this.get(`${this.host}${GET_FEE_RATE}`, {\n\t\t\tparams: { token_id: tokenID },\n\t\t});\n\t\tthis.feeRates[tokenID] = result.base_fee as number;\n\n\t\treturn this.feeRates[tokenID];\n\t}\n\n\tpublic async getFeeExponent(tokenID: string): Promise<number> {\n\t\tif (tokenID in this.feeInfos) {\n\t\t\treturn this.feeInfos[tokenID].exponent;\n\t\t}\n\n\t\tawait this._ensureMarketInfoCached(tokenID);\n\t\treturn this.feeInfos[tokenID].exponent;\n\t}\n\n\t/**\n\t * Calculates the hash for the given orderbook\n\t * @param orderbook\n\t * @returns\n\t */\n\tpublic async getOrderBookHash(orderbook: OrderBookSummary): Promise<string> {\n\t\treturn generateOrderBookSummaryHash(orderbook);\n\t}\n\n\tpublic async getMidpoint(tokenID: string): Promise<any> {\n\t\treturn this.get(`${this.host}${GET_MIDPOINT}`, {\n\t\t\tparams: { token_id: tokenID },\n\t\t});\n\t}\n\n\tpublic async getMidpoints(params: BookParams[]): Promise<any> {\n\t\treturn this.post(`${this.host}${GET_MIDPOINTS}`, {\n\t\t\tdata: params,\n\t\t});\n\t}\n\n\tpublic async getPrice(tokenID: string, side: string): Promise<any> {\n\t\treturn this.get(`${this.host}${GET_PRICE}`, {\n\t\t\tparams: { token_id: tokenID, side: side },\n\t\t});\n\t}\n\n\tpublic async getPrices(params: BookParams[]): Promise<any> {\n\t\treturn this.post(`${this.host}${GET_PRICES}`, {\n\t\t\tdata: params,\n\t\t});\n\t}\n\n\tpublic async getSpread(tokenID: string): Promise<any> {\n\t\treturn this.get(`${this.host}${GET_SPREAD}`, {\n\t\t\tparams: { token_id: tokenID },\n\t\t});\n\t}\n\n\tpublic async getSpreads(params: BookParams[]): Promise<any> {\n\t\treturn this.post(`${this.host}${GET_SPREADS}`, {\n\t\t\tdata: params,\n\t\t});\n\t}\n\n\tpublic async getLastTradePrice(tokenID: string): Promise<any> {\n\t\treturn this.get(`${this.host}${GET_LAST_TRADE_PRICE}`, {\n\t\t\tparams: { token_id: tokenID },\n\t\t});\n\t}\n\n\tpublic async getLastTradesPrices(params: BookParams[]): Promise<any> {\n\t\treturn this.post(`${this.host}${GET_LAST_TRADES_PRICES}`, {\n\t\t\tdata: params,\n\t\t});\n\t}\n\n\tpublic async getPricesHistory(params: PriceHistoryFilterParams): Promise<MarketPrice[]> {\n\t\tif (!params.interval && (params.startTs === undefined || params.endTs === undefined)) {\n\t\t\tthrow new Error(\"getPricesHistory requires either interval or both startTs and endTs\");\n\t\t}\n\t\treturn this.get(`${this.host}${GET_PRICES_HISTORY}`, {\n\t\t\tparams,\n\t\t});\n\t}\n\n\t// L1 Authed\n\n\t/**\n\t * Creates a new API key for a user\n\t * @param nonce\n\t * @returns ApiKeyCreds\n\t */\n\tpublic async createApiKey(nonce?: number): Promise<ApiKeyCreds> {\n\t\tthis.canL1Auth();\n\n\t\tconst endpoint = `${this.host}${CREATE_API_KEY}`;\n\t\tconst headers = await createL1Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.chainId,\n\t\t\tnonce,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\treturn await this.post(endpoint, { headers }).then((apiKeyRaw: ApiKeyRaw) => {\n\t\t\tconst apiKey: ApiKeyCreds = {\n\t\t\t\tkey: apiKeyRaw.apiKey,\n\t\t\t\tsecret: apiKeyRaw.secret,\n\t\t\t\tpassphrase: apiKeyRaw.passphrase,\n\t\t\t};\n\t\t\treturn apiKey;\n\t\t});\n\t}\n\n\t/**\n\t * Derives an existing API key for a user\n\t * @param nonce\n\t * @returns ApiKeyCreds\n\t */\n\tpublic async deriveApiKey(nonce?: number): Promise<ApiKeyCreds> {\n\t\tthis.canL1Auth();\n\n\t\tconst endpoint = `${this.host}${DERIVE_API_KEY}`;\n\t\tconst headers = await createL1Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.chainId,\n\t\t\tnonce,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\treturn await this.get(endpoint, { headers }).then((apiKeyRaw: ApiKeyRaw) => {\n\t\t\tconst apiKey: ApiKeyCreds = {\n\t\t\t\tkey: apiKeyRaw.apiKey,\n\t\t\t\tsecret: apiKeyRaw.secret,\n\t\t\t\tpassphrase: apiKeyRaw.passphrase,\n\t\t\t};\n\t\t\treturn apiKey;\n\t\t});\n\t}\n\n\tpublic async createOrDeriveApiKey(nonce?: number): Promise<ApiKeyCreds> {\n\t\treturn this.createApiKey(nonce).then(response => {\n\t\t\tif (!response.key) {\n\t\t\t\treturn this.deriveApiKey(nonce);\n\t\t\t}\n\t\t\treturn response;\n\t\t});\n\t}\n\n\tpublic async getApiKeys(): Promise<ApiKeysResponse> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = GET_API_KEYS;\n\t\tconst headerArgs = {\n\t\t\tmethod: GET,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\treturn this.get(`${this.host}${endpoint}`, { headers });\n\t}\n\n\tpublic async getClosedOnlyMode(): Promise<BanStatus> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = CLOSED_ONLY;\n\t\tconst headerArgs = {\n\t\t\tmethod: GET,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\treturn this.get(`${this.host}${endpoint}`, { headers });\n\t}\n\n\tpublic async deleteApiKey(): Promise<any> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = DELETE_API_KEY;\n\t\tconst headerArgs = {\n\t\t\tmethod: DELETE,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\treturn this.del(`${this.host}${endpoint}`, { headers });\n\t}\n\n\tpublic async createReadonlyApiKey(): Promise<ReadonlyApiKeyResponse> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = CREATE_READONLY_API_KEY;\n\t\tconst headerArgs = {\n\t\t\tmethod: POST,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\treturn this.post(`${this.host}${endpoint}`, { headers });\n\t}\n\n\tpublic async getReadonlyApiKeys(): Promise<string[]> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = GET_READONLY_API_KEYS;\n\t\tconst headerArgs = {\n\t\t\tmethod: GET,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\treturn this.get(`${this.host}${endpoint}`, { headers });\n\t}\n\n\tpublic async deleteReadonlyApiKey(key: string): Promise<boolean> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = DELETE_READONLY_API_KEY;\n\t\tconst payload = { key };\n\t\tconst headerArgs = {\n\t\t\tmethod: DELETE,\n\t\t\trequestPath: endpoint,\n\t\t\tbody: JSON.stringify(payload),\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\treturn this.del(`${this.host}${endpoint}`, { headers, data: payload });\n\t}\n\n\tpublic async getOrder(orderID: string): Promise<OpenOrder> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = `${GET_ORDER}${orderID}`;\n\t\tconst headerArgs = {\n\t\t\tmethod: GET,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\treturn this.get(`${this.host}${endpoint}`, { headers });\n\t}\n\n\tpublic async getTrades(\n\t\tparams?: TradeParams,\n\t\tonly_first_page = false,\n\t\tnext_cursor?: string,\n\t): Promise<Trade[]> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = GET_TRADES;\n\t\tconst headerArgs = {\n\t\t\tmethod: GET,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\tlet results: Trade[] = [];\n\t\tnext_cursor = next_cursor || INITIAL_CURSOR;\n\t\twhile (next_cursor !== END_CURSOR && (next_cursor === INITIAL_CURSOR || !only_first_page)) {\n\t\t\tconst _params: any = {\n\t\t\t\t...params,\n\t\t\t\tnext_cursor,\n\t\t\t};\n\t\t\tconst response = await this.get(`${this.host}${endpoint}`, {\n\t\t\t\theaders,\n\t\t\t\tparams: _params,\n\t\t\t});\n\t\t\tnext_cursor = response.next_cursor;\n\t\t\tresults = [...results, ...response.data];\n\t\t}\n\t\treturn results;\n\t}\n\n\tpublic async getTradesPaginated(\n\t\tparams?: TradeParams,\n\t\tnext_cursor?: string,\n\t): Promise<TradesPaginatedResponse> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = GET_TRADES;\n\t\tconst headerArgs = {\n\t\t\tmethod: GET,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\tnext_cursor = next_cursor || INITIAL_CURSOR;\n\n\t\tconst _params: any = { ...params, next_cursor };\n\n\t\tconst {\n\t\t\tdata,\n\t\t\t...rest\n\t\t}: { data: Trade[]; next_cursor: string; limit: number; count: number } = await this.get(\n\t\t\t`${this.host}${endpoint}`,\n\t\t\t{ headers, params: _params },\n\t\t);\n\n\t\treturn { trades: Array.isArray(data) ? [...data] : [], ...rest };\n\t}\n\n\tpublic async getBuilderTrades(\n\t\tparams: BuilderTradeParams,\n\t\tnext_cursor?: string,\n\t): Promise<BuilderTradesResponse> {\n\t\tif (!params.builder_code || params.builder_code === bytes32Zero) {\n\t\t\tthrow new Error(\"builderCode is required and cannot be zero\");\n\t\t}\n\n\t\tconst _params: any = { ...params, next_cursor: next_cursor || INITIAL_CURSOR };\n\n\t\tconst {\n\t\t\tdata,\n\t\t\t...rest\n\t\t}: { data: BuilderTrade[]; next_cursor: string; limit: number; count: number } =\n\t\t\tawait this.get(`${this.host}${GET_BUILDER_TRADES}`, { params: _params });\n\n\t\treturn { trades: Array.isArray(data) ? [...data] : [], ...rest };\n\t}\n\n\tpublic async getNotifications(): Promise<Notification[]> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = GET_NOTIFICATIONS;\n\t\tconst headerArgs = {\n\t\t\tmethod: GET,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\treturn this.get(`${this.host}${endpoint}`, {\n\t\t\theaders,\n\t\t\tparams: { signature_type: this.orderBuilder.signatureType },\n\t\t});\n\t}\n\n\tpublic async dropNotifications(params?: DropNotificationParams): Promise<void> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = DROP_NOTIFICATIONS;\n\t\tconst l2HeaderArgs = {\n\t\t\tmethod: DELETE,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\tl2HeaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\treturn this.del(`${this.host}${endpoint}`, {\n\t\t\theaders,\n\t\t\tparams: parseDropNotificationParams(params),\n\t\t});\n\t}\n\n\tpublic async getBalanceAllowance(\n\t\tparams?: BalanceAllowanceParams,\n\t): Promise<BalanceAllowanceResponse> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = GET_BALANCE_ALLOWANCE;\n\t\tconst headerArgs = {\n\t\t\tmethod: GET,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\tconst _params = {\n\t\t\t...params,\n\t\t\tsignature_type: this.orderBuilder.signatureType,\n\t\t};\n\n\t\treturn this.get(`${this.host}${endpoint}`, { headers, params: _params });\n\t}\n\n\tpublic async updateBalanceAllowance(params?: BalanceAllowanceParams): Promise<void> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = UPDATE_BALANCE_ALLOWANCE;\n\t\tconst headerArgs = {\n\t\t\tmethod: GET,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\tconst _params = {\n\t\t\t...params,\n\t\t\tsignature_type: this.orderBuilder.signatureType,\n\t\t};\n\n\t\treturn this.get(`${this.host}${endpoint}`, { headers, params: _params });\n\t}\n\n\tpublic async createOrder(\n\t\tuserOrder: UserOrderV1 | UserOrderV2,\n\t\toptions?: Partial<CreateOrderOptions>,\n\t): Promise<SignedOrder> {\n\t\tthis.canL1Auth();\n\n\t\tconst orderToSign = { ...userOrder };\n\n\t\tif (this.builderConfig?.builderCode && !orderToSign.builderCode) {\n\t\t\torderToSign.builderCode = this.builderConfig.builderCode;\n\t\t}\n\n\t\tconst { tokenID } = orderToSign;\n\n\t\tconst tickSize = await this._resolveTickSize(tokenID, options?.tickSize);\n\n\t\tif (!priceValid(orderToSign.price, tickSize)) {\n\t\t\tthrow new Error(\n\t\t\t\t`invalid price (${orderToSign.price}), min: ${parseFloat(tickSize)} - max: ${\n\t\t\t\t\t1 - parseFloat(tickSize)\n\t\t\t\t}`,\n\t\t\t);\n\t\t}\n\t\torderToSign.price = roundNormal(orderToSign.price, ROUNDING_CONFIG[tickSize].price);\n\n\t\tconst version = options?.version ?? (await this.resolveVersion());\n\n\t\tif (\n\t\t\tversion !== 1 &&\n\t\t\torderToSign.side === Side.BUY &&\n\t\t\t\"userUSDCBalance\" in orderToSign &&\n\t\t\torderToSign.userUSDCBalance !== undefined\n\t\t) {\n\t\t\tconst adjustedAmount = await this.adjustBuyAmountForBalance(\n\t\t\t\ttokenID,\n\t\t\t\torderToSign.size * orderToSign.price,\n\t\t\t\torderToSign.price,\n\t\t\t\torderToSign.userUSDCBalance,\n\t\t\t\torderToSign.builderCode,\n\t\t\t);\n\t\t\torderToSign.size = adjustedAmount / orderToSign.price;\n\t\t}\n\n\t\tconst negRisk = options?.negRisk ?? (await this.getNegRisk(tokenID));\n\n\t\tif (version === 1) {\n\t\t\tconst userFeeRateBps =\n\t\t\t\t\"feeRateBps\" in orderToSign ? (orderToSign as UserOrderV1).feeRateBps : undefined;\n\t\t\tconst feeRateBps = await this._resolveFeeRateBps(tokenID, userFeeRateBps);\n\t\t\t(orderToSign as UserOrderV1).feeRateBps = feeRateBps;\n\t\t}\n\n\t\treturn this.orderBuilder.buildOrder(\n\t\t\torderToSign,\n\t\t\t{\n\t\t\t\ttickSize,\n\t\t\t\tnegRisk,\n\t\t\t},\n\t\t\tversion,\n\t\t);\n\t}\n\n\tpublic async createMarketOrder(\n\t\tuserMarketOrder: UserMarketOrderV1 | UserMarketOrderV2,\n\t\toptions?: Partial<CreateOrderOptions>,\n\t): Promise<SignedOrder> {\n\t\tthis.canL1Auth();\n\n\t\tconst { tokenID } = userMarketOrder;\n\n\t\tawait this._ensureMarketInfoCached(tokenID);\n\n\t\tconst tickSize = await this._resolveTickSize(tokenID, options?.tickSize);\n\n\t\tif (!userMarketOrder.price) {\n\t\t\tuserMarketOrder.price = await this.calculateMarketPrice(\n\t\t\t\ttokenID,\n\t\t\t\tuserMarketOrder.side,\n\t\t\t\tuserMarketOrder.amount,\n\t\t\t\tuserMarketOrder.orderType,\n\t\t\t);\n\t\t}\n\n\t\tif (!priceValid(userMarketOrder.price, tickSize)) {\n\t\t\tthrow new Error(\n\t\t\t\t`invalid price (${userMarketOrder.price}), min: ${parseFloat(tickSize)} - max: ${\n\t\t\t\t\t1 - parseFloat(tickSize)\n\t\t\t\t}`,\n\t\t\t);\n\t\t}\n\n\t\tconst orderToSign = { ...userMarketOrder };\n\n\t\tif (this.builderConfig?.builderCode && !orderToSign.builderCode) {\n\t\t\torderToSign.builderCode = this.builderConfig.builderCode;\n\t\t}\n\n\t\tawait this.ensureBuilderFeeRateCached(orderToSign.builderCode);\n\n\t\tif (\n\t\t\torderToSign.side === Side.BUY &&\n\t\t\t\"userUSDCBalance\" in orderToSign &&\n\t\t\torderToSign.userUSDCBalance !== undefined\n\t\t) {\n\t\t\t// biome-ignore lint/style/noNonNullAssertion: price is validated above\n\t\t\tconst price = orderToSign.price!;\n\t\t\torderToSign.amount = await this.adjustBuyAmountForBalance(\n\t\t\t\ttokenID,\n\t\t\t\torderToSign.amount,\n\t\t\t\tprice,\n\t\t\t\torderToSign.userUSDCBalance,\n\t\t\t\torderToSign.builderCode,\n\t\t\t);\n\t\t}\n\n\t\tconst negRisk = options?.negRisk ?? (await this.getNegRisk(tokenID));\n\t\tconst version = options?.version ?? (await this.resolveVersion());\n\n\t\tif (version === 1) {\n\t\t\tconst userFeeRateBps =\n\t\t\t\t\"feeRateBps\" in orderToSign\n\t\t\t\t\t? (orderToSign as UserMarketOrderV1).feeRateBps\n\t\t\t\t\t: undefined;\n\t\t\tconst feeRateBps = await this._resolveFeeRateBps(tokenID, userFeeRateBps);\n\t\t\t(orderToSign as UserMarketOrderV1).feeRateBps = feeRateBps;\n\t\t}\n\n\t\treturn this.orderBuilder.buildMarketOrder(\n\t\t\torderToSign,\n\t\t\t{\n\t\t\t\ttickSize,\n\t\t\t\tnegRisk,\n\t\t\t},\n\t\t\tversion,\n\t\t);\n\t}\n\n\tpublic async createExchangeV3OrderFromAmounts(\n\t\tuserOrder: ExchangeV3OrderAmounts,\n\t): Promise<SignedOrder> {\n\t\tthis.canL1Auth();\n\n\t\tconst orderToSign = { ...userOrder };\n\t\tif (this.builderConfig?.builderCode && !orderToSign.builderCode) {\n\t\t\torderToSign.builderCode = this.builderConfig.builderCode;\n\t\t}\n\n\t\treturn this.orderBuilder.buildExchangeV3OrderFromAmounts(orderToSign);\n\t}\n\n\tpublic async createAndPostOrder<T extends OrderType.GTC | OrderType.GTD = OrderType.GTC>(\n\t\tuserOrder: UserOrderV1 | UserOrderV2,\n\t\toptions?: Partial<CreateOrderOptions>,\n\t\torderType: T = OrderType.GTC as T,\n\t\tpostOnly = false,\n\t\tdeferExec = false,\n\t): Promise<OrderResponse> {\n\t\tlet postOrderResponse: OrderResponse | undefined;\n\n\t\tawait this._retryOnVersionUpdate(async () => {\n\t\t\tconst order = await this.createOrder(userOrder, options);\n\t\t\tpostOrderResponse = await this.postOrder(order, orderType, postOnly, deferExec);\n\t\t});\n\n\t\treturn postOrderResponse as OrderResponse;\n\t}\n\n\tpublic async createAndPostMarketOrder<T extends OrderType.FOK | OrderType.FAK = OrderType.FOK>(\n\t\tuserMarketOrder: UserMarketOrderV1 | UserMarketOrderV2,\n\t\toptions?: Partial<CreateOrderOptions>,\n\t\torderType: T = OrderType.FOK as T,\n\t\tdeferExec = false,\n\t): Promise<OrderResponse> {\n\t\tlet postOrderMarketResponse: OrderResponse | undefined;\n\n\t\tawait this._retryOnVersionUpdate(async () => {\n\t\t\tconst order = await this.createMarketOrder(userMarketOrder, options);\n\t\t\tpostOrderMarketResponse = await this.postOrder(order, orderType, false, deferExec);\n\t\t});\n\n\t\treturn postOrderMarketResponse as OrderResponse;\n\t}\n\n\tpublic async getOpenOrders(\n\t\tparams?: OpenOrderParams,\n\t\tonly_first_page = false,\n\t\tnext_cursor?: string,\n\t): Promise<OpenOrdersResponse> {\n\t\tthis.canL2Auth();\n\t\tconst endpoint = GET_OPEN_ORDERS;\n\t\tconst l2HeaderArgs = {\n\t\t\tmethod: GET,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\tl2HeaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\tlet results: OpenOrder[] = [];\n\t\tnext_cursor = next_cursor || INITIAL_CURSOR;\n\t\twhile (next_cursor !== END_CURSOR && (next_cursor === INITIAL_CURSOR || !only_first_page)) {\n\t\t\tconst _params: any = {\n\t\t\t\t...params,\n\t\t\t\tnext_cursor,\n\t\t\t};\n\t\t\tconst response = await this.get(`${this.host}${endpoint}`, {\n\t\t\t\theaders,\n\t\t\t\tparams: _params,\n\t\t\t});\n\t\t\tnext_cursor = response.next_cursor;\n\t\t\tresults = [...results, ...response.data];\n\t\t}\n\t\treturn results;\n\t}\n\n\tpublic async getPreMigrationOrders(\n\t\tonly_first_page = false,\n\t\tnext_cursor?: string,\n\t): Promise<PreMigrationOrdersResponse> {\n\t\tthis.canL2Auth();\n\t\tconst endpoint = GET_PRE_MIGRATION_ORDERS;\n\t\tconst l2HeaderArgs = {\n\t\t\tmethod: GET,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\tl2HeaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\tlet results: PreMigrationOrder[] = [];\n\t\tnext_cursor = next_cursor || INITIAL_CURSOR;\n\t\twhile (next_cursor !== END_CURSOR && (next_cursor === INITIAL_CURSOR || !only_first_page)) {\n\t\t\tconst _params: any = { next_cursor };\n\t\t\tconst response = await this.get(`${this.host}${endpoint}`, {\n\t\t\t\theaders,\n\t\t\t\tparams: _params,\n\t\t\t});\n\t\t\tnext_cursor = response.next_cursor;\n\t\t\tresults = [...results, ...response.data];\n\t\t}\n\t\treturn results;\n\t}\n\n\t/**\n\t * Posts an order to the CLOB.\n\t *\n\t * When the order matches, the response carries the settlement transaction\n\t * hashes of its fills in `transactionsHashes`, resolved on a best-effort\n\t * basis. If a hash is not available yet, the fill's trade can be followed\n\t * via `tradeIDs`.\n\t */\n\tpublic async postOrder<T extends OrderType = OrderType.GTC>(\n\t\torder: SignedOrder,\n\t\torderType: T = OrderType.GTC as T,\n\t\tpostOnly = false,\n\t\tdeferExec = false,\n\t): Promise<OrderResponse> {\n\t\tthis.canL2Auth();\n\t\tif (postOnly && (orderType === OrderType.FOK || orderType === OrderType.FAK)) {\n\t\t\tthrow new Error(\"postOnly is not supported for FOK/FAK orders\");\n\t\t}\n\t\tconst endpoint = POST_ORDER;\n\n\t\tconst orderPayload = isV2Order(order)\n\t\t\t? orderToJsonV2(order, this.creds?.key || \"\", orderType, postOnly, deferExec)\n\t\t\t: orderToJsonV1(order, this.creds?.key || \"\", orderType, postOnly, deferExec);\n\n\t\tconst l2HeaderArgs = {\n\t\t\tmethod: POST,\n\t\t\trequestPath: endpoint,\n\t\t\tbody: JSON.stringify(orderPayload),\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\tl2HeaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\tconst res = await this.post(\n\t\t\t`${this.host}${endpoint}`,\n\t\t\t{\n\t\t\t\theaders,\n\t\t\t\tdata: orderPayload,\n\t\t\t},\n\t\t\ttrue,\n\t\t);\n\n\t\tif (this._isOrderVersionMismatch(res)) await this.resolveVersion(true);\n\n\t\tconst response: OrderResponse = this.throwIfError(res);\n\t\tif (deferExec) {\n\t\t\treturn response;\n\t\t}\n\t\treturn this.resolveTransactionsHashes(response);\n\t}\n\n\tpublic async postOrders(\n\t\targs: PostOrdersArgs[],\n\t\tpostOnly = false,\n\t\tdeferExec = false,\n\t): Promise<OrderResponse[]> {\n\t\tthis.canL2Auth();\n\t\tif (\n\t\t\tpostOnly &&\n\t\t\targs.some(({ orderType }) => orderType === OrderType.FOK || orderType === OrderType.FAK)\n\t\t) {\n\t\t\tthrow new Error(\"postOnly is not supported for FOK/FAK orders\");\n\t\t}\n\t\tconst endpoint = POST_ORDERS;\n\t\tconst ordersPayload: (NewOrderV2<any> | NewOrderV1<any>)[] = [];\n\t\tfor (const arg of args) {\n\t\t\tconst { order, orderType } = arg;\n\t\t\t// Version-aware dispatch\n\t\t\tconst orderPayload = isV2Order(order)\n\t\t\t\t? orderToJsonV2(order, this.creds?.key || \"\", orderType, postOnly, deferExec)\n\t\t\t\t: orderToJsonV1(order, this.creds?.key || \"\", orderType, postOnly, deferExec);\n\t\t\tordersPayload.push(orderPayload);\n\t\t}\n\n\t\tconst l2HeaderArgs = {\n\t\t\tmethod: POST,\n\t\t\trequestPath: endpoint,\n\t\t\tbody: JSON.stringify(ordersPayload),\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\tl2HeaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\tconst res = await this.post(\n\t\t\t`${this.host}${endpoint}`,\n\t\t\t{\n\t\t\t\theaders,\n\t\t\t\tdata: ordersPayload,\n\t\t\t},\n\t\t\ttrue,\n\t\t);\n\n\t\tif (this._isOrderVersionMismatch(res)) await this.resolveVersion(true);\n\n\t\tconst responses: OrderResponse[] = this.throwIfError(res);\n\t\tif (deferExec || !Array.isArray(responses)) {\n\t\t\treturn responses;\n\t\t}\n\t\treturn Promise.all(responses.map(response => this.resolveTransactionsHashes(response)));\n\t}\n\n\t// Polls the given trades until every one reaches a terminal execution\n\t// outcome (it carries a settlement transaction hash or its status is\n\t// FAILED) or the polling window elapses. Best-effort: returns whatever\n\t// trades resolved in time and never throws.\n\tprivate async waitForResolvedTrades(tradeIDs: string[]): Promise<Trade[]> {\n\t\tconst ids = [...new Set(tradeIDs.filter(id => id.length > 0))];\n\t\tif (ids.length === 0) return [];\n\n\t\tconst resolved = new Map<string, Trade>();\n\t\tconst requestedIDs = new Set(ids);\n\t\tconst deadline = Date.now() + RESOLVE_TRADES_TIMEOUT_MS;\n\n\t\tfor (;;) {\n\t\t\tconst pending = ids.filter(id => !resolved.has(id));\n\t\t\t// A failed poll must never reject a successfully posted order;\n\t\t\t// treat it as \"not resolved yet\" and let the loop retry.\n\t\t\tconst pages = await Promise.all(\n\t\t\t\tpending.map(id => this.getTrades({ id }, true).catch(() => [] as Trade[])),\n\t\t\t);\n\t\t\tfor (const trades of pages) {\n\t\t\t\tfor (const trade of trades) {\n\t\t\t\t\tif (isTradeResolved(trade) && requestedIDs.has(trade.id)) {\n\t\t\t\t\t\tresolved.set(trade.id, trade);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (ids.every(id => resolved.has(id)) || Date.now() >= deadline) {\n\t\t\t\treturn ids\n\t\t\t\t\t.map(id => resolved.get(id))\n\t\t\t\t\t.filter((trade): trade is Trade => trade !== undefined);\n\t\t\t}\n\t\t\tawait sleep(RESOLVE_TRADES_POLL_INTERVAL_MS);\n\t\t}\n\t}\n\n\t// Fills `transactionsHashes` on an order response whose trades executed\n\t// asynchronously (the server returned `tradeIDs` without hashes), by\n\t// polling the trades until they resolve. Best-effort: on timeout the\n\t// response is returned with whatever hashes resolved, which may be none.\n\t// Trades that failed execution never contribute a hash.\n\tprivate async resolveTransactionsHashes(response: OrderResponse): Promise<OrderResponse> {\n\t\tif (response.transactionsHashes && response.transactionsHashes.length > 0) {\n\t\t\treturn response;\n\t\t}\n\n\t\tconst tradeIDs = response.tradeIDs ?? [];\n\t\tif (tradeIDs.length === 0) {\n\t\t\treturn response;\n\t\t}\n\n\t\tconst resolvedTrades = await this.waitForResolvedTrades(tradeIDs);\n\t\tconst transactionsHashes = resolvedTrades\n\t\t\t.filter(trade => trade.status.toUpperCase() !== FAILED_TRADE_STATUS)\n\t\t\t.map(trade => trade.transaction_hash)\n\t\t\t.filter((hash): hash is string => Boolean(hash));\n\n\t\tif (transactionsHashes.length === 0) {\n\t\t\treturn response;\n\t\t}\n\t\treturn { ...response, transactionsHashes };\n\t}\n\n\tpublic async cancelOrder(payload: OrderPayload): Promise<any> {\n\t\tthis.canL2Auth();\n\t\tconst endpoint = CANCEL_ORDER;\n\t\tconst l2HeaderArgs = {\n\t\t\tmethod: DELETE,\n\t\t\trequestPath: endpoint,\n\t\t\tbody: JSON.stringify(payload),\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\tl2HeaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\t\treturn this.del(`${this.host}${endpoint}`, { headers, data: payload });\n\t}\n\n\tpublic async cancelOrders(ordersHashes: string[]): Promise<any> {\n\t\tthis.canL2Auth();\n\t\tconst endpoint = CANCEL_ORDERS;\n\t\tconst l2HeaderArgs = {\n\t\t\tmethod: DELETE,\n\t\t\trequestPath: endpoint,\n\t\t\tbody: JSON.stringify(ordersHashes),\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\tl2HeaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\t\treturn this.del(`${this.host}${endpoint}`, { headers, data: ordersHashes });\n\t}\n\n\tpublic async cancelAll(): Promise<any> {\n\t\tthis.canL2Auth();\n\t\tconst endpoint = CANCEL_ALL;\n\t\tconst l2HeaderArgs = {\n\t\t\tmethod: DELETE,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\tl2HeaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\t\treturn this.del(`${this.host}${endpoint}`, { headers });\n\t}\n\n\tpublic async cancelMarketOrders(payload: OrderMarketCancelParams): Promise<any> {\n\t\tthis.canL2Auth();\n\t\tconst endpoint = CANCEL_MARKET_ORDERS;\n\t\tconst l2HeaderArgs = {\n\t\t\tmethod: DELETE,\n\t\t\trequestPath: endpoint,\n\t\t\tbody: JSON.stringify(payload),\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\tl2HeaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\t\treturn this.del(`${this.host}${endpoint}`, { headers, data: payload });\n\t}\n\n\tpublic async isOrderScoring(params?: OrderScoringParams): Promise<OrderScoring> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = IS_ORDER_SCORING;\n\t\tconst headerArgs = {\n\t\t\tmethod: GET,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\treturn this.get(`${this.host}${endpoint}`, { headers, params });\n\t}\n\n\tpublic async areOrdersScoring(params?: OrdersScoringParams): Promise<OrdersScoring> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = ARE_ORDERS_SCORING;\n\t\tconst payload = JSON.stringify(params?.orderIds);\n\t\tconst headerArgs = {\n\t\t\tmethod: POST,\n\t\t\trequestPath: endpoint,\n\t\t\tbody: payload,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\treturn this.post(`${this.host}${endpoint}`, {\n\t\t\theaders,\n\t\t\tdata: payload,\n\t\t});\n\t}\n\n\t// Rewards\n\tpublic async getEarningsForUserForDay(date: string): Promise<UserEarning[]> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = GET_EARNINGS_FOR_USER_FOR_DAY;\n\t\tconst headerArgs = {\n\t\t\tmethod: GET,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\tlet results: UserEarning[] = [];\n\t\tlet next_cursor = INITIAL_CURSOR;\n\t\twhile (next_cursor !== END_CURSOR) {\n\t\t\tconst params = {\n\t\t\t\tdate,\n\t\t\t\tsignature_type: this.orderBuilder.signatureType,\n\t\t\t\tnext_cursor,\n\t\t\t};\n\n\t\t\tconst response = await this.get(`${this.host}${endpoint}`, {\n\t\t\t\theaders,\n\t\t\t\tparams,\n\t\t\t});\n\t\t\tnext_cursor = response.next_cursor;\n\t\t\tresults = [...results, ...response.data];\n\t\t}\n\t\treturn results;\n\t}\n\n\tpublic async getTotalEarningsForUserForDay(date: string): Promise<TotalUserEarning[]> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = GET_TOTAL_EARNINGS_FOR_USER_FOR_DAY;\n\t\tconst headerArgs = {\n\t\t\tmethod: GET,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\tconst params = {\n\t\t\tdate,\n\t\t\tsignature_type: this.orderBuilder.signatureType,\n\t\t};\n\n\t\treturn await this.get(`${this.host}${endpoint}`, {\n\t\t\theaders,\n\t\t\tparams,\n\t\t});\n\t}\n\n\tpublic async getUserEarningsAndMarketsConfig(\n\t\tdate: string,\n\t\torder_by = \"\",\n\t\tposition = \"\",\n\t\tno_competition = false,\n\t): Promise<UserRewardsEarning[]> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = GET_REWARDS_EARNINGS_PERCENTAGES;\n\t\tconst headerArgs = {\n\t\t\tmethod: GET,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\tlet results: UserRewardsEarning[] = [];\n\t\tlet next_cursor = INITIAL_CURSOR;\n\t\twhile (next_cursor !== END_CURSOR) {\n\t\t\tconst params = {\n\t\t\t\tdate,\n\t\t\t\tsignature_type: this.orderBuilder.signatureType,\n\t\t\t\tnext_cursor,\n\t\t\t\torder_by,\n\t\t\t\tposition,\n\t\t\t\tno_competition,\n\t\t\t};\n\n\t\t\tconst response = await this.get(`${this.host}${endpoint}`, {\n\t\t\t\theaders,\n\t\t\t\tparams,\n\t\t\t});\n\t\t\tnext_cursor = response.next_cursor;\n\t\t\tresults = [...results, ...response.data];\n\t\t}\n\t\treturn results;\n\t}\n\n\tpublic async getRewardPercentages(): Promise<RewardsPercentages> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = GET_LIQUIDITY_REWARD_PERCENTAGES;\n\t\tconst headerArgs = {\n\t\t\tmethod: GET,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\tconst _params = {\n\t\t\tsignature_type: this.orderBuilder.signatureType,\n\t\t};\n\n\t\treturn this.get(`${this.host}${endpoint}`, { headers, params: _params });\n\t}\n\n\tpublic async getCurrentRewards(): Promise<MarketReward[]> {\n\t\tlet results: MarketReward[] = [];\n\t\tlet next_cursor = INITIAL_CURSOR;\n\t\twhile (next_cursor !== END_CURSOR) {\n\t\t\tconst response = await this.get(`${this.host}${GET_REWARDS_MARKETS_CURRENT}`, {\n\t\t\t\tparams: { next_cursor },\n\t\t\t});\n\t\t\tnext_cursor = response.next_cursor;\n\t\t\tresults = [...results, ...response.data];\n\t\t}\n\t\treturn results;\n\t}\n\n\tpublic async getRawRewardsForMarket(conditionId: string): Promise<MarketReward[]> {\n\t\tlet results: MarketReward[] = [];\n\t\tlet next_cursor = INITIAL_CURSOR;\n\t\twhile (next_cursor !== END_CURSOR) {\n\t\t\tconst response = await this.get(`${this.host}${GET_REWARDS_MARKETS}${conditionId}`, {\n\t\t\t\tparams: { next_cursor },\n\t\t\t});\n\t\t\tnext_cursor = response.next_cursor;\n\t\t\tresults = [...results, ...response.data];\n\t\t}\n\t\treturn results;\n\t}\n\n\tpublic async calculateMarketPrice(\n\t\ttokenID: string,\n\t\tside: Side,\n\t\tamount: number,\n\t\torderType: OrderType = OrderType.FOK,\n\t): Promise<number> {\n\t\tconst book = await this.getOrderBook(tokenID);\n\t\tif (!book) {\n\t\t\tthrow new Error(\"no orderbook\");\n\t\t}\n\t\tif (side === Side.BUY) {\n\t\t\tif (!book.asks) {\n\t\t\t\tthrow new Error(\"no match\");\n\t\t\t}\n\t\t\treturn calculateBuyMarketPrice(book.asks, amount, orderType);\n\t\t} else {\n\t\t\tif (!book.bids) {\n\t\t\t\tthrow new Error(\"no match\");\n\t\t\t}\n\t\t\treturn calculateSellMarketPrice(book.bids, amount, orderType);\n\t\t}\n\t}\n\n\tpublic async createBuilderApiKey(): Promise<BuilderApiKey> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = CREATE_BUILDER_API_KEY;\n\t\tconst headerArgs = {\n\t\t\tmethod: POST,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\treturn this.post(`${this.host}${endpoint}`, { headers });\n\t}\n\n\tpublic async getBuilderApiKeys(): Promise<BuilderApiKeyResponse[]> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = GET_BUILDER_API_KEYS;\n\t\tconst headerArgs = {\n\t\t\tmethod: GET,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\treturn this.get(`${this.host}${endpoint}`, { headers });\n\t}\n\n\tpublic async revokeBuilderApiKey(): Promise<any> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = REVOKE_BUILDER_API_KEY;\n\t\tconst headerArgs = {\n\t\t\tmethod: DELETE,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\treturn this.del(`${this.host}${endpoint}`, { headers });\n\t}\n\n\tpublic async getMarketTradesEvents(conditionID: string): Promise<MarketTradeEvent[]> {\n\t\treturn this.get(`${this.host}${GET_MARKET_TRADES_EVENTS}${conditionID}`);\n\t}\n\n\tprivate canL1Auth(): void {\n\t\tif (this.signer === undefined) {\n\t\t\tthrow L1_AUTH_UNAVAILABLE_ERROR;\n\t\t}\n\t}\n\n\tprivate canL2Auth(): void {\n\t\tif (this.signer === undefined) {\n\t\t\tthrow L1_AUTH_UNAVAILABLE_ERROR;\n\t\t}\n\n\t\tif (this.creds === undefined) {\n\t\t\tthrow L2_AUTH_NOT_AVAILABLE;\n\t\t}\n\t}\n\n\tprivate isBuilderOrder(builderCode?: string): boolean {\n\t\treturn builderCode !== undefined && builderCode !== bytes32Zero;\n\t}\n\n\tprivate async getBuilderTakerFeeRate(builderCode?: string): Promise<number> {\n\t\tif (!this.isBuilderOrder(builderCode)) return 0;\n\n\t\tawait this.ensureBuilderFeeRateCached(builderCode);\n\t\treturn this.builderFeeRates[builderCode ?? \"\"]?.taker ?? 0;\n\t}\n\n\tprivate async adjustBuyAmountForBalance(\n\t\ttokenID: string,\n\t\tamount: number,\n\t\tprice: number,\n\t\tuserUSDCBalance: number,\n\t\tbuilderCode?: string,\n\t): Promise<number> {\n\t\tawait this._ensureMarketInfoCached(tokenID);\n\t\tconst builderTakerFeeRate = await this.getBuilderTakerFeeRate(builderCode);\n\n\t\treturn adjustBuyAmountForFees(\n\t\t\tamount,\n\t\t\tprice,\n\t\t\tuserUSDCBalance,\n\t\t\tthis.feeInfos[tokenID].rate,\n\t\t\tthis.feeInfos[tokenID].exponent,\n\t\t\tbuilderTakerFeeRate,\n\t\t\tthis.feeSlippage,\n\t\t);\n\t}\n\n\tprivate async _ensureMarketInfoCached(tokenID: string): Promise<void> {\n\t\tif (tokenID in this.feeInfos) return;\n\n\t\tif (!(tokenID in this.tokenConditionMap)) {\n\t\t\tconst result = await this.get(`${this.host}${GET_MARKET_BY_TOKEN}${tokenID}`);\n\t\t\tif (!result?.condition_id) {\n\t\t\t\tthrow new Error(`failed to resolve condition id for token ${tokenID}`);\n\t\t\t}\n\t\t\tthis.tokenConditionMap[tokenID] = result.condition_id as string;\n\t\t}\n\n\t\tawait this.getClobMarketInfo(this.tokenConditionMap[tokenID]);\n\t}\n\n\tprivate async ensureBuilderFeeRateCached(builderCode?: string): Promise<void> {\n\t\tif (!builderCode || builderCode === bytes32Zero) return;\n\t\tif (builderCode in this.builderFeeRates) return;\n\n\t\tconst result = await this.get(`${this.host}${GET_BUILDER_FEES}${builderCode}`);\n\t\tthis.builderFeeRates[builderCode] = {\n\t\t\tmaker: result.builder_maker_fee_rate_bps / BUILDER_FEES_BPS,\n\t\t\ttaker: result.builder_taker_fee_rate_bps / BUILDER_FEES_BPS,\n\t\t};\n\t}\n\n\tprivate async _resolveTickSize(tokenID: string, tickSize?: TickSize): Promise<TickSize> {\n\t\tconst minTickSize = await this.getTickSize(tokenID);\n\t\tif (tickSize) {\n\t\t\tif (isTickSizeSmaller(tickSize, minTickSize)) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`invalid tick size (${tickSize}), minimum for the market is ${minTickSize}`,\n\t\t\t\t);\n\t\t\t}\n\t\t} else {\n\t\t\ttickSize = minTickSize;\n\t\t}\n\t\treturn tickSize;\n\t}\n\n\tprivate async _resolveFeeRateBps(tokenID: string, userFeeRateBps?: number): Promise<number> {\n\t\tconst marketFeeRateBps = await this.getFeeRateBps(tokenID);\n\t\tif (\n\t\t\tmarketFeeRateBps > 0 &&\n\t\t\tuserFeeRateBps !== undefined &&\n\t\t\tuserFeeRateBps !== marketFeeRateBps\n\t\t) {\n\t\t\tthrow new Error(\n\t\t\t\t`invalid user provided fee rate: ${userFeeRateBps}, fee rate for the market must be ${marketFeeRateBps}`,\n\t\t\t);\n\t\t}\n\t\treturn marketFeeRateBps;\n\t}\n\n\tprivate async resolveVersion(forceUpdate: boolean = false): Promise<number> {\n\t\t// Use cached version if given\n\t\tif (!forceUpdate && this.cachedVersion !== undefined) {\n\t\t\treturn this.cachedVersion;\n\t\t}\n\n\t\t// Query API and cache the result\n\t\tconst apiVersion = await this.getVersion();\n\t\tthis.cachedVersion = apiVersion;\n\n\t\treturn apiVersion;\n\t}\n\n\tprivate async _retryOnVersionUpdate(retryFunc: () => Promise<unknown>) {\n\t\tconst version = await this.resolveVersion();\n\n\t\tfor (let attempt = 0; attempt < 2; attempt++) {\n\t\t\tawait retryFunc();\n\n\t\t\t// no need to retry if version is unchanged\n\t\t\tif (version === (await this.resolveVersion())) break;\n\t\t}\n\t}\n\n\tprivate _isOrderVersionMismatch(resp: ClobErrorResponseBody) {\n\t\tconst error = resp?.error;\n\t\tif (!error) return false;\n\t\tconst message = typeof error === \"string\" ? error : JSON.stringify(error);\n\t\treturn message.includes(ORDER_VERSION_MISMATCH_ERROR);\n\t}\n\n\tprivate throwIfError(result: any): any {\n\t\tif (this.throwOnError && result && typeof result === \"object\" && \"error\" in result) {\n\t\t\tconst msg =\n\t\t\t\ttypeof result.error === \"string\" ? result.error : JSON.stringify(result.error);\n\t\t\tthrow new ApiError(msg, result.status, result);\n\t\t}\n\t\treturn result;\n\t}\n\n\t// http methods\n\tprivate async get(endpoint: string, options?: RequestOptions, skipThrow = false) {\n\t\tconst result = await get(endpoint, options);\n\t\treturn skipThrow ? result : this.throwIfError(result);\n\t}\n\n\tprivate async post(endpoint: string, options?: RequestOptions, skipThrow = false) {\n\t\tconst result = await post(endpoint, options, this.retryOnError);\n\t\treturn skipThrow ? result : this.throwIfError(result);\n\t}\n\n\tprivate async del(endpoint: string, options?: RequestOptions, skipThrow = false) {\n\t\tconst result = await del(endpoint, options);\n\t\treturn skipThrow ? result : this.throwIfError(result);\n\t}\n}\n"],"mappings":"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"}
package/dist/client.d.cts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { ClobSigner } from "./signing/signer.cjs";
2
2
  import { Side } from "./order-utils/model/side.cjs";
3
- import { ApiKeyCreds, ApiKeysResponse, BalanceAllowanceParams, BalanceAllowanceResponse, BanStatus, BookParams, BuilderApiKey, BuilderApiKeyResponse, BuilderConfig, BuilderFeeRates, BuilderTradeParams, BuilderTradesResponse, Chain, CreateOrderOptions, DropNotificationParams, FeeInfos, FeeRates, MarketDetails, MarketPrice, MarketReward, MarketTradeEvent, NegRisk, Notification, OpenOrder, OpenOrderParams, OpenOrdersResponse, OrderBookSummary, OrderMarketCancelParams, OrderPayload, OrderScoring, OrderScoringParams, OrderType, OrdersScoring, OrdersScoringParams, PaginationPayload, PreMigrationOrdersResponse, PriceHistoryFilterParams, ReadonlyApiKeyResponse, RewardsPercentages, TickSize, TickSizes, TotalUserEarning, Trade, TradeParams, TradesPaginatedResponse, UserEarning, UserRewardsEarning } from "./types/clob.cjs";
3
+ import { ApiKeyCreds, ApiKeysResponse, BalanceAllowanceParams, BalanceAllowanceResponse, BanStatus, BookParams, BuilderApiKey, BuilderApiKeyResponse, BuilderConfig, BuilderFeeRates, BuilderTradeParams, BuilderTradesResponse, Chain, CreateOrderOptions, DropNotificationParams, FeeInfos, FeeRates, MarketDetails, MarketPrice, MarketReward, MarketTradeEvent, NegRisk, Notification, OpenOrder, OpenOrderParams, OpenOrdersResponse, OrderBookSummary, OrderMarketCancelParams, OrderPayload, OrderResponse, OrderScoring, OrderScoringParams, OrderType, OrdersScoring, OrdersScoringParams, PaginationPayload, PreMigrationOrdersResponse, PriceHistoryFilterParams, ReadonlyApiKeyResponse, RewardsPercentages, TickSize, TickSizes, TotalUserEarning, Trade, TradeParams, TradesPaginatedResponse, UserEarning, UserRewardsEarning } from "./types/clob.cjs";
4
4
  import { UserMarketOrderV1, UserOrderV1 } from "./types/ordersV1.cjs";
5
5
  import { UserMarketOrderV2, UserOrderV2 } from "./types/ordersV2.cjs";
6
6
  import { ExchangeV3OrderAmounts } from "./types/ordersV3.cjs";
@@ -122,12 +122,22 @@ declare class ClobClient {
122
122
  createOrder(userOrder: UserOrderV1 | UserOrderV2, options?: Partial<CreateOrderOptions>): Promise<SignedOrder>;
123
123
  createMarketOrder(userMarketOrder: UserMarketOrderV1 | UserMarketOrderV2, options?: Partial<CreateOrderOptions>): Promise<SignedOrder>;
124
124
  createExchangeV3OrderFromAmounts(userOrder: ExchangeV3OrderAmounts): Promise<SignedOrder>;
125
- createAndPostOrder<T extends OrderType.GTC | OrderType.GTD = OrderType.GTC>(userOrder: UserOrderV1 | UserOrderV2, options?: Partial<CreateOrderOptions>, orderType?: T, postOnly?: boolean, deferExec?: boolean): Promise<any>;
126
- createAndPostMarketOrder<T extends OrderType.FOK | OrderType.FAK = OrderType.FOK>(userMarketOrder: UserMarketOrderV1 | UserMarketOrderV2, options?: Partial<CreateOrderOptions>, orderType?: T, deferExec?: boolean): Promise<any>;
125
+ createAndPostOrder<T extends OrderType.GTC | OrderType.GTD = OrderType.GTC>(userOrder: UserOrderV1 | UserOrderV2, options?: Partial<CreateOrderOptions>, orderType?: T, postOnly?: boolean, deferExec?: boolean): Promise<OrderResponse>;
126
+ createAndPostMarketOrder<T extends OrderType.FOK | OrderType.FAK = OrderType.FOK>(userMarketOrder: UserMarketOrderV1 | UserMarketOrderV2, options?: Partial<CreateOrderOptions>, orderType?: T, deferExec?: boolean): Promise<OrderResponse>;
127
127
  getOpenOrders(params?: OpenOrderParams, only_first_page?: boolean, next_cursor?: string): Promise<OpenOrdersResponse>;
128
128
  getPreMigrationOrders(only_first_page?: boolean, next_cursor?: string): Promise<PreMigrationOrdersResponse>;
129
- postOrder<T extends OrderType = OrderType.GTC>(order: SignedOrder, orderType?: T, postOnly?: boolean, deferExec?: boolean): Promise<any>;
130
- postOrders(args: PostOrdersArgs[], postOnly?: boolean, deferExec?: boolean): Promise<any>;
129
+ /**
130
+ * Posts an order to the CLOB.
131
+ *
132
+ * When the order matches, the response carries the settlement transaction
133
+ * hashes of its fills in `transactionsHashes`, resolved on a best-effort
134
+ * basis. If a hash is not available yet, the fill's trade can be followed
135
+ * via `tradeIDs`.
136
+ */
137
+ postOrder<T extends OrderType = OrderType.GTC>(order: SignedOrder, orderType?: T, postOnly?: boolean, deferExec?: boolean): Promise<OrderResponse>;
138
+ postOrders(args: PostOrdersArgs[], postOnly?: boolean, deferExec?: boolean): Promise<OrderResponse[]>;
139
+ private waitForResolvedTrades;
140
+ private resolveTransactionsHashes;
131
141
  cancelOrder(payload: OrderPayload): Promise<any>;
132
142
  cancelOrders(ordersHashes: string[]): Promise<any>;
133
143
  cancelAll(): Promise<any>;
package/dist/client.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { ClobSigner } from "./signing/signer.js";
2
2
  import { Side } from "./order-utils/model/side.js";
3
- import { ApiKeyCreds, ApiKeysResponse, BalanceAllowanceParams, BalanceAllowanceResponse, BanStatus, BookParams, BuilderApiKey, BuilderApiKeyResponse, BuilderConfig, BuilderFeeRates, BuilderTradeParams, BuilderTradesResponse, Chain, CreateOrderOptions, DropNotificationParams, FeeInfos, FeeRates, MarketDetails, MarketPrice, MarketReward, MarketTradeEvent, NegRisk, Notification, OpenOrder, OpenOrderParams, OpenOrdersResponse, OrderBookSummary, OrderMarketCancelParams, OrderPayload, OrderScoring, OrderScoringParams, OrderType, OrdersScoring, OrdersScoringParams, PaginationPayload, PreMigrationOrdersResponse, PriceHistoryFilterParams, ReadonlyApiKeyResponse, RewardsPercentages, TickSize, TickSizes, TotalUserEarning, Trade, TradeParams, TradesPaginatedResponse, UserEarning, UserRewardsEarning } from "./types/clob.js";
3
+ import { ApiKeyCreds, ApiKeysResponse, BalanceAllowanceParams, BalanceAllowanceResponse, BanStatus, BookParams, BuilderApiKey, BuilderApiKeyResponse, BuilderConfig, BuilderFeeRates, BuilderTradeParams, BuilderTradesResponse, Chain, CreateOrderOptions, DropNotificationParams, FeeInfos, FeeRates, MarketDetails, MarketPrice, MarketReward, MarketTradeEvent, NegRisk, Notification, OpenOrder, OpenOrderParams, OpenOrdersResponse, OrderBookSummary, OrderMarketCancelParams, OrderPayload, OrderResponse, OrderScoring, OrderScoringParams, OrderType, OrdersScoring, OrdersScoringParams, PaginationPayload, PreMigrationOrdersResponse, PriceHistoryFilterParams, ReadonlyApiKeyResponse, RewardsPercentages, TickSize, TickSizes, TotalUserEarning, Trade, TradeParams, TradesPaginatedResponse, UserEarning, UserRewardsEarning } from "./types/clob.js";
4
4
  import { UserMarketOrderV1, UserOrderV1 } from "./types/ordersV1.js";
5
5
  import { UserMarketOrderV2, UserOrderV2 } from "./types/ordersV2.js";
6
6
  import { ExchangeV3OrderAmounts } from "./types/ordersV3.js";
@@ -124,12 +124,22 @@ declare class ClobClient {
124
124
  createOrder(userOrder: UserOrderV1 | UserOrderV2, options?: Partial<CreateOrderOptions>): Promise<SignedOrder>;
125
125
  createMarketOrder(userMarketOrder: UserMarketOrderV1 | UserMarketOrderV2, options?: Partial<CreateOrderOptions>): Promise<SignedOrder>;
126
126
  createExchangeV3OrderFromAmounts(userOrder: ExchangeV3OrderAmounts): Promise<SignedOrder>;
127
- createAndPostOrder<T extends OrderType.GTC | OrderType.GTD = OrderType.GTC>(userOrder: UserOrderV1 | UserOrderV2, options?: Partial<CreateOrderOptions>, orderType?: T, postOnly?: boolean, deferExec?: boolean): Promise<any>;
128
- createAndPostMarketOrder<T extends OrderType.FOK | OrderType.FAK = OrderType.FOK>(userMarketOrder: UserMarketOrderV1 | UserMarketOrderV2, options?: Partial<CreateOrderOptions>, orderType?: T, deferExec?: boolean): Promise<any>;
127
+ createAndPostOrder<T extends OrderType.GTC | OrderType.GTD = OrderType.GTC>(userOrder: UserOrderV1 | UserOrderV2, options?: Partial<CreateOrderOptions>, orderType?: T, postOnly?: boolean, deferExec?: boolean): Promise<OrderResponse>;
128
+ createAndPostMarketOrder<T extends OrderType.FOK | OrderType.FAK = OrderType.FOK>(userMarketOrder: UserMarketOrderV1 | UserMarketOrderV2, options?: Partial<CreateOrderOptions>, orderType?: T, deferExec?: boolean): Promise<OrderResponse>;
129
129
  getOpenOrders(params?: OpenOrderParams, only_first_page?: boolean, next_cursor?: string): Promise<OpenOrdersResponse>;
130
130
  getPreMigrationOrders(only_first_page?: boolean, next_cursor?: string): Promise<PreMigrationOrdersResponse>;
131
- postOrder<T extends OrderType = OrderType.GTC>(order: SignedOrder, orderType?: T, postOnly?: boolean, deferExec?: boolean): Promise<any>;
132
- postOrders(args: PostOrdersArgs[], postOnly?: boolean, deferExec?: boolean): Promise<any>;
131
+ /**
132
+ * Posts an order to the CLOB.
133
+ *
134
+ * When the order matches, the response carries the settlement transaction
135
+ * hashes of its fills in `transactionsHashes`, resolved on a best-effort
136
+ * basis. If a hash is not available yet, the fill's trade can be followed
137
+ * via `tradeIDs`.
138
+ */
139
+ postOrder<T extends OrderType = OrderType.GTC>(order: SignedOrder, orderType?: T, postOnly?: boolean, deferExec?: boolean): Promise<OrderResponse>;
140
+ postOrders(args: PostOrdersArgs[], postOnly?: boolean, deferExec?: boolean): Promise<OrderResponse[]>;
141
+ private waitForResolvedTrades;
142
+ private resolveTransactionsHashes;
133
143
  cancelOrder(payload: OrderPayload): Promise<any>;
134
144
  cancelOrders(ordersHashes: string[]): Promise<any>;
135
145
  cancelAll(): Promise<any>;
package/dist/client.js CHANGED
@@ -17,6 +17,11 @@ import { ROUNDING_CONFIG } from "./order-builder/helpers/roundingConfig.js";
17
17
  import { OrderBuilder } from "./order-builder/orderBuilder.js";
18
18
 
19
19
  //#region src/client.ts
20
+ const RESOLVE_TRADES_TIMEOUT_MS = 3e4;
21
+ const RESOLVE_TRADES_POLL_INTERVAL_MS = 250;
22
+ const FAILED_TRADE_STATUS = "FAILED";
23
+ const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
24
+ const isTradeResolved = (trade) => trade.status.toUpperCase() === FAILED_TRADE_STATUS || Boolean(trade.transaction_hash && trade.transaction_hash.length > 0);
20
25
  var ClobClient = class {
21
26
  host;
22
27
  chainId;
@@ -532,6 +537,14 @@ var ClobClient = class {
532
537
  }
533
538
  return results;
534
539
  }
540
+ /**
541
+ * Posts an order to the CLOB.
542
+ *
543
+ * When the order matches, the response carries the settlement transaction
544
+ * hashes of its fills in `transactionsHashes`, resolved on a best-effort
545
+ * basis. If a hash is not available yet, the fill's trade can be followed
546
+ * via `tradeIDs`.
547
+ */
535
548
  async postOrder(order, orderType = OrderType.GTC, postOnly = false, deferExec = false) {
536
549
  this.canL2Auth();
537
550
  if (postOnly && (orderType === OrderType.FOK || orderType === OrderType.FAK)) throw new Error("postOnly is not supported for FOK/FAK orders");
@@ -548,7 +561,9 @@ var ClobClient = class {
548
561
  data: orderPayload
549
562
  }, true);
550
563
  if (this._isOrderVersionMismatch(res)) await this.resolveVersion(true);
551
- return this.throwIfError(res);
564
+ const response = this.throwIfError(res);
565
+ if (deferExec) return response;
566
+ return this.resolveTransactionsHashes(response);
552
567
  }
553
568
  async postOrders(args, postOnly = false, deferExec = false) {
554
569
  this.canL2Auth();
@@ -571,7 +586,34 @@ var ClobClient = class {
571
586
  data: ordersPayload
572
587
  }, true);
573
588
  if (this._isOrderVersionMismatch(res)) await this.resolveVersion(true);
574
- return this.throwIfError(res);
589
+ const responses = this.throwIfError(res);
590
+ if (deferExec || !Array.isArray(responses)) return responses;
591
+ return Promise.all(responses.map((response) => this.resolveTransactionsHashes(response)));
592
+ }
593
+ async waitForResolvedTrades(tradeIDs) {
594
+ const ids = [...new Set(tradeIDs.filter((id) => id.length > 0))];
595
+ if (ids.length === 0) return [];
596
+ const resolved = /* @__PURE__ */ new Map();
597
+ const requestedIDs = new Set(ids);
598
+ const deadline = Date.now() + RESOLVE_TRADES_TIMEOUT_MS;
599
+ for (;;) {
600
+ const pending = ids.filter((id) => !resolved.has(id));
601
+ const pages = await Promise.all(pending.map((id) => this.getTrades({ id }, true).catch(() => [])));
602
+ for (const trades of pages) for (const trade of trades) if (isTradeResolved(trade) && requestedIDs.has(trade.id)) resolved.set(trade.id, trade);
603
+ if (ids.every((id) => resolved.has(id)) || Date.now() >= deadline) return ids.map((id) => resolved.get(id)).filter((trade) => trade !== void 0);
604
+ await sleep(RESOLVE_TRADES_POLL_INTERVAL_MS);
605
+ }
606
+ }
607
+ async resolveTransactionsHashes(response) {
608
+ if (response.transactionsHashes && response.transactionsHashes.length > 0) return response;
609
+ const tradeIDs = response.tradeIDs ?? [];
610
+ if (tradeIDs.length === 0) return response;
611
+ const transactionsHashes = (await this.waitForResolvedTrades(tradeIDs)).filter((trade) => trade.status.toUpperCase() !== FAILED_TRADE_STATUS).map((trade) => trade.transaction_hash).filter((hash) => Boolean(hash));
612
+ if (transactionsHashes.length === 0) return response;
613
+ return {
614
+ ...response,
615
+ transactionsHashes
616
+ };
575
617
  }
576
618
  async cancelOrder(payload) {
577
619
  this.canL2Auth();
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","names":["result: MarketDetails","results: Trade[]","_params: any","postOrderResponse: any","postOrderMarketResponse: any","results: OpenOrder[]","results: PreMigrationOrder[]","ordersPayload: (NewOrderV2<any> | NewOrderV1<any>)[]","results: UserEarning[]","results: UserRewardsEarning[]","results: MarketReward[]"],"sources":["../src/client.ts"],"sourcesContent":["import {\n\tBUILDER_FEES_BPS,\n\tbytes32Zero,\n\tEND_CURSOR,\n\tINITIAL_CURSOR,\n\tORDER_VERSION_MISMATCH_ERROR,\n} from \"./constants.js\";\nimport {\n\tARE_ORDERS_SCORING,\n\tCANCEL_ALL,\n\tCANCEL_MARKET_ORDERS,\n\tCANCEL_ORDER,\n\tCANCEL_ORDERS,\n\tCLOSED_ONLY,\n\tCREATE_API_KEY,\n\tCREATE_BUILDER_API_KEY,\n\tCREATE_READONLY_API_KEY,\n\tDELETE_API_KEY,\n\tDELETE_READONLY_API_KEY,\n\tDERIVE_API_KEY,\n\tDROP_NOTIFICATIONS,\n\tGET_API_KEYS,\n\tGET_BALANCE_ALLOWANCE,\n\tGET_BUILDER_API_KEYS,\n\tGET_BUILDER_FEES,\n\tGET_BUILDER_TRADES,\n\tGET_CLOB_MARKET,\n\tGET_EARNINGS_FOR_USER_FOR_DAY,\n\tGET_FEE_RATE,\n\tGET_LAST_TRADE_PRICE,\n\tGET_LAST_TRADES_PRICES,\n\tGET_LIQUIDITY_REWARD_PERCENTAGES,\n\tGET_MARKET,\n\tGET_MARKET_BY_TOKEN,\n\tGET_MARKET_TRADES_EVENTS,\n\tGET_MARKETS,\n\tGET_MIDPOINT,\n\tGET_MIDPOINTS,\n\tGET_NEG_RISK,\n\tGET_NOTIFICATIONS,\n\tGET_OPEN_ORDERS,\n\tGET_ORDER,\n\tGET_ORDER_BOOK,\n\tGET_ORDER_BOOKS,\n\tGET_PRE_MIGRATION_ORDERS,\n\tGET_PRICE,\n\tGET_PRICES,\n\tGET_PRICES_HISTORY,\n\tGET_READONLY_API_KEYS,\n\tGET_REWARDS_EARNINGS_PERCENTAGES,\n\tGET_REWARDS_MARKETS,\n\tGET_REWARDS_MARKETS_CURRENT,\n\tGET_SAMPLING_MARKETS,\n\tGET_SAMPLING_SIMPLIFIED_MARKETS,\n\tGET_SIMPLIFIED_MARKETS,\n\tGET_SPREAD,\n\tGET_SPREADS,\n\tGET_TICK_SIZE,\n\tGET_TOTAL_EARNINGS_FOR_USER_FOR_DAY,\n\tGET_TRADES,\n\tHEARTBEAT,\n\tIS_ORDER_SCORING,\n\tOK,\n\tPOST_ORDER,\n\tPOST_ORDERS,\n\tREVOKE_BUILDER_API_KEY,\n\tTIME,\n\tUPDATE_BALANCE_ALLOWANCE,\n} from \"./endpoints.js\";\nimport { ApiError, L1_AUTH_UNAVAILABLE_ERROR, L2_AUTH_NOT_AVAILABLE } from \"./errors.js\";\nimport { adjustBuyAmountForFees, validateFeeSlippage } from \"./fees/index.js\";\nimport { createL1Headers, createL2Headers } from \"./headers/index.js\";\nimport {\n\tDELETE,\n\tdel,\n\tGET,\n\tget,\n\tPOST,\n\tparseDropNotificationParams,\n\tpost,\n\ttype RequestOptions,\n} from \"./http-helpers/index.js\";\nimport {\n\tcalculateBuyMarketPrice,\n\tcalculateSellMarketPrice,\n\tROUNDING_CONFIG,\n} from \"./order-builder/helpers/index.js\";\nimport { OrderBuilder } from \"./order-builder/index.js\";\nimport { SignatureTypeV2 } from \"./order-utils/model/signatureTypeV2.js\";\nimport type { ClobSigner } from \"./signing/signer.js\";\nimport type {\n\tApiKeyCreds,\n\tApiKeyRaw,\n\tApiKeysResponse,\n\tBalanceAllowanceParams,\n\tBalanceAllowanceResponse,\n\tBanStatus,\n\tBookParams,\n\tBuilderApiKey,\n\tBuilderApiKeyResponse,\n\tBuilderConfig,\n\tBuilderFeeRates,\n\tBuilderTrade,\n\tBuilderTradeParams,\n\tBuilderTradesResponse,\n\tChain,\n\tClobErrorResponseBody,\n\tCreateOrderOptions,\n\tDropNotificationParams,\n\tExchangeV3OrderAmounts,\n\tFeeInfos,\n\tFeeRates,\n\tMarketDetails,\n\tMarketPrice,\n\tMarketReward,\n\tMarketTradeEvent,\n\tNegRisk,\n\tNewOrderV1,\n\tNewOrderV2,\n\tNotification,\n\tOpenOrder,\n\tOpenOrderParams,\n\tOpenOrdersResponse,\n\tOrderBookSummary,\n\tOrderMarketCancelParams,\n\tOrderPayload,\n\tOrderScoring,\n\tOrderScoringParams,\n\tOrdersScoring,\n\tOrdersScoringParams,\n\tPaginationPayload,\n\tPostOrdersArgs,\n\tPreMigrationOrder,\n\tPreMigrationOrdersResponse,\n\tPriceHistoryFilterParams,\n\tReadonlyApiKeyResponse,\n\tRewardsPercentages,\n\tTickSize,\n\tTickSizes,\n\tTokenConditionMap,\n\tTotalUserEarning,\n\tTrade,\n\tTradeParams,\n\tTradesPaginatedResponse,\n\tUserEarning,\n\tUserMarketOrderV1,\n\tUserMarketOrderV2,\n\tUserOrderV1,\n\tUserOrderV2,\n\tUserRewardsEarning,\n} from \"./types/index.js\";\nimport { OrderType, orderToJsonV1, orderToJsonV2, Side } from \"./types/index.js\";\nimport { isV2Order, type SignedOrder } from \"./types/unifiedOrder.js\";\nimport {\n\tgenerateOrderBookSummaryHash,\n\tisTickSizeSmaller,\n\tpriceValid,\n\troundNormal,\n} from \"./utilities.js\";\n\nexport { adjustBuyAmountForFees } from \"./fees/index.js\";\n\nexport interface ClobClientOptions {\n\thost: string;\n\tchain: Chain;\n\tsigner?: ClobSigner;\n\tcreds?: ApiKeyCreds;\n\tsignatureType?: SignatureTypeV2;\n\tfunderAddress?: string;\n\tuseServerTime?: boolean;\n\tbuilderConfig?: BuilderConfig;\n\tgetSigner?: () => Promise<ClobSigner> | ClobSigner;\n\tretryOnError?: boolean;\n\tthrowOnError?: boolean;\n\tfeeSlippage?: number;\n}\n\nexport class ClobClient {\n\treadonly host: string;\n\n\treadonly chainId: Chain;\n\n\t// Used to perform Level 1 authentication and sign orders\n\treadonly signer?: ClobSigner;\n\n\t// Used to perform Level 2 authentication\n\treadonly creds?: ApiKeyCreds;\n\n\treadonly orderBuilder: OrderBuilder;\n\n\treadonly tickSizes: TickSizes;\n\n\treadonly negRisk: NegRisk;\n\n\treadonly feeInfos: FeeInfos;\n\n\t// Fee rate bps data for CLOB V1\n\treadonly feeRates: FeeRates;\n\n\treadonly builderFeeRates: BuilderFeeRates;\n\n\tprivate readonly tokenConditionMap: TokenConditionMap;\n\n\treadonly useServerTime?: boolean;\n\n\treadonly builderConfig?: BuilderConfig;\n\n\treadonly signatureType: SignatureTypeV2;\n\n\treadonly funderAddress?: string;\n\n\tprivate cachedVersion?: number;\n\n\treadonly retryOnError?: boolean;\n\n\treadonly throwOnError?: boolean;\n\n\treadonly feeSlippage: number;\n\n\tconstructor({\n\t\thost,\n\t\tchain,\n\t\tsigner,\n\t\tcreds,\n\t\tsignatureType,\n\t\tfunderAddress,\n\t\tuseServerTime,\n\t\tbuilderConfig,\n\t\tgetSigner,\n\t\tretryOnError,\n\t\tthrowOnError,\n\t\tfeeSlippage,\n\t}: ClobClientOptions) {\n\t\tthis.host = host.endsWith(\"/\") ? host.slice(0, -1) : host;\n\t\tthis.chainId = chain;\n\n\t\tif (signer !== undefined) {\n\t\t\tthis.signer = signer;\n\t\t}\n\t\tif (creds !== undefined) {\n\t\t\tthis.creds = creds;\n\t\t}\n\t\tthis.orderBuilder = new OrderBuilder(\n\t\t\tsigner as ClobSigner,\n\t\t\tchain,\n\t\t\tsignatureType,\n\t\t\tfunderAddress,\n\t\t\tgetSigner,\n\t\t);\n\t\tthis.signatureType = signatureType ?? SignatureTypeV2.EOA;\n\t\tthis.funderAddress = funderAddress;\n\t\tthis.tickSizes = {};\n\t\tthis.negRisk = {};\n\t\tthis.feeRates = {};\n\t\tthis.feeInfos = {};\n\t\tthis.builderFeeRates = {};\n\t\tthis.tokenConditionMap = {};\n\t\tthis.retryOnError = retryOnError;\n\t\tthis.throwOnError = throwOnError;\n\t\tthis.feeSlippage = feeSlippage ?? 0;\n\t\tvalidateFeeSlippage(this.feeSlippage);\n\t\tthis.useServerTime = useServerTime;\n\t\tif (builderConfig !== undefined) {\n\t\t\tthis.builderConfig = builderConfig;\n\t\t}\n\t}\n\n\t// Public endpoints\n\tpublic async getOk(): Promise<any> {\n\t\treturn this.get(`${this.host}${OK}`);\n\t}\n\n\tpublic async postHeartbeat(\n\t\theartbeatId = \"\",\n\t): Promise<{ heartbeat_id: string; error_msg?: string }> {\n\t\tthis.canL2Auth();\n\t\tconst body = JSON.stringify({ heartbeat_id: heartbeatId });\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\t{ method: POST, requestPath: HEARTBEAT, body },\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\t\treturn this.post(`${this.host}${HEARTBEAT}`, {\n\t\t\theaders,\n\t\t\tdata: { heartbeat_id: heartbeatId },\n\t\t});\n\t}\n\n\tpublic async getVersion(): Promise<number> {\n\t\tconst response = await this.get(`${this.host}/version`);\n\t\t// default to v2\n\t\treturn response?.version ?? 2;\n\t}\n\n\tpublic async getServerTime(): Promise<number> {\n\t\treturn this.get(`${this.host}${TIME}`);\n\t}\n\n\tpublic async getSamplingSimplifiedMarkets(\n\t\tnext_cursor = INITIAL_CURSOR,\n\t): Promise<PaginationPayload> {\n\t\treturn this.get(`${this.host}${GET_SAMPLING_SIMPLIFIED_MARKETS}`, {\n\t\t\tparams: { next_cursor },\n\t\t});\n\t}\n\n\tpublic async getSamplingMarkets(next_cursor = INITIAL_CURSOR): Promise<PaginationPayload> {\n\t\treturn this.get(`${this.host}${GET_SAMPLING_MARKETS}`, {\n\t\t\tparams: { next_cursor },\n\t\t});\n\t}\n\n\tpublic async getSimplifiedMarkets(next_cursor = INITIAL_CURSOR): Promise<PaginationPayload> {\n\t\treturn this.get(`${this.host}${GET_SIMPLIFIED_MARKETS}`, {\n\t\t\tparams: { next_cursor },\n\t\t});\n\t}\n\n\tpublic async getMarkets(next_cursor = INITIAL_CURSOR): Promise<PaginationPayload> {\n\t\treturn this.get(`${this.host}${GET_MARKETS}`, {\n\t\t\tparams: { next_cursor },\n\t\t});\n\t}\n\n\tpublic async getMarket(conditionID: string): Promise<any> {\n\t\treturn this.get(`${this.host}${GET_MARKET}${conditionID}`);\n\t}\n\n\tpublic async getClobMarketInfo(conditionID: string): Promise<MarketDetails> {\n\t\tconst result: MarketDetails = await this.get(\n\t\t\t`${this.host}${GET_CLOB_MARKET}${conditionID}`,\n\t\t);\n\n\t\tif (!result?.t) {\n\t\t\tthrow new Error(`failed to fetch market info for condition id ${conditionID}`);\n\t\t}\n\n\t\tfor (const token of result.t) {\n\t\t\tif (!token) continue;\n\t\t\tconst tokenId = token.t;\n\n\t\t\tthis.tokenConditionMap[tokenId] = conditionID;\n\t\t\tthis.tickSizes[tokenId] = result.mts.toString() as TickSize;\n\t\t\tthis.negRisk[tokenId] = result.nr ?? false;\n\n\t\t\tthis.feeInfos[tokenId] = {\n\t\t\t\trate: result.fd?.r ?? 0,\n\t\t\t\texponent: result.fd?.e ?? 0,\n\t\t\t};\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tpublic async getOrderBook(tokenID: string): Promise<OrderBookSummary> {\n\t\treturn this.get(`${this.host}${GET_ORDER_BOOK}`, {\n\t\t\tparams: { token_id: tokenID },\n\t\t});\n\t}\n\n\tpublic async getOrderBooks(params: BookParams[]): Promise<OrderBookSummary[]> {\n\t\treturn this.post(`${this.host}${GET_ORDER_BOOKS}`, {\n\t\t\tdata: params,\n\t\t});\n\t}\n\n\tpublic async getTickSize(tokenID: string): Promise<TickSize> {\n\t\tif (tokenID in this.tickSizes) {\n\t\t\treturn this.tickSizes[tokenID];\n\t\t}\n\n\t\tif (tokenID in this.tokenConditionMap) {\n\t\t\tawait this.getClobMarketInfo(this.tokenConditionMap[tokenID]);\n\t\t\treturn this.tickSizes[tokenID];\n\t\t}\n\n\t\tconst result = await this.get(`${this.host}${GET_TICK_SIZE}`, {\n\t\t\tparams: { token_id: tokenID },\n\t\t});\n\t\tthis.tickSizes[tokenID] = result.minimum_tick_size.toString() as TickSize;\n\n\t\treturn this.tickSizes[tokenID];\n\t}\n\n\tpublic async getNegRisk(tokenID: string): Promise<boolean> {\n\t\tif (tokenID in this.negRisk) {\n\t\t\treturn this.negRisk[tokenID];\n\t\t}\n\n\t\tif (tokenID in this.tokenConditionMap) {\n\t\t\tawait this.getClobMarketInfo(this.tokenConditionMap[tokenID]);\n\t\t\treturn this.negRisk[tokenID];\n\t\t}\n\n\t\tconst result = await this.get(`${this.host}${GET_NEG_RISK}`, {\n\t\t\tparams: { token_id: tokenID },\n\t\t});\n\t\tthis.negRisk[tokenID] = result.neg_risk as boolean;\n\n\t\treturn this.negRisk[tokenID];\n\t}\n\n\tpublic async getFeeRateBps(tokenID: string): Promise<number> {\n\t\tif (tokenID in this.feeRates) {\n\t\t\treturn this.feeRates[tokenID];\n\t\t}\n\n\t\tconst result = await this.get(`${this.host}${GET_FEE_RATE}`, {\n\t\t\tparams: { token_id: tokenID },\n\t\t});\n\t\tthis.feeRates[tokenID] = result.base_fee as number;\n\n\t\treturn this.feeRates[tokenID];\n\t}\n\n\tpublic async getFeeExponent(tokenID: string): Promise<number> {\n\t\tif (tokenID in this.feeInfos) {\n\t\t\treturn this.feeInfos[tokenID].exponent;\n\t\t}\n\n\t\tawait this._ensureMarketInfoCached(tokenID);\n\t\treturn this.feeInfos[tokenID].exponent;\n\t}\n\n\t/**\n\t * Calculates the hash for the given orderbook\n\t * @param orderbook\n\t * @returns\n\t */\n\tpublic async getOrderBookHash(orderbook: OrderBookSummary): Promise<string> {\n\t\treturn generateOrderBookSummaryHash(orderbook);\n\t}\n\n\tpublic async getMidpoint(tokenID: string): Promise<any> {\n\t\treturn this.get(`${this.host}${GET_MIDPOINT}`, {\n\t\t\tparams: { token_id: tokenID },\n\t\t});\n\t}\n\n\tpublic async getMidpoints(params: BookParams[]): Promise<any> {\n\t\treturn this.post(`${this.host}${GET_MIDPOINTS}`, {\n\t\t\tdata: params,\n\t\t});\n\t}\n\n\tpublic async getPrice(tokenID: string, side: string): Promise<any> {\n\t\treturn this.get(`${this.host}${GET_PRICE}`, {\n\t\t\tparams: { token_id: tokenID, side: side },\n\t\t});\n\t}\n\n\tpublic async getPrices(params: BookParams[]): Promise<any> {\n\t\treturn this.post(`${this.host}${GET_PRICES}`, {\n\t\t\tdata: params,\n\t\t});\n\t}\n\n\tpublic async getSpread(tokenID: string): Promise<any> {\n\t\treturn this.get(`${this.host}${GET_SPREAD}`, {\n\t\t\tparams: { token_id: tokenID },\n\t\t});\n\t}\n\n\tpublic async getSpreads(params: BookParams[]): Promise<any> {\n\t\treturn this.post(`${this.host}${GET_SPREADS}`, {\n\t\t\tdata: params,\n\t\t});\n\t}\n\n\tpublic async getLastTradePrice(tokenID: string): Promise<any> {\n\t\treturn this.get(`${this.host}${GET_LAST_TRADE_PRICE}`, {\n\t\t\tparams: { token_id: tokenID },\n\t\t});\n\t}\n\n\tpublic async getLastTradesPrices(params: BookParams[]): Promise<any> {\n\t\treturn this.post(`${this.host}${GET_LAST_TRADES_PRICES}`, {\n\t\t\tdata: params,\n\t\t});\n\t}\n\n\tpublic async getPricesHistory(params: PriceHistoryFilterParams): Promise<MarketPrice[]> {\n\t\tif (!params.interval && (params.startTs === undefined || params.endTs === undefined)) {\n\t\t\tthrow new Error(\"getPricesHistory requires either interval or both startTs and endTs\");\n\t\t}\n\t\treturn this.get(`${this.host}${GET_PRICES_HISTORY}`, {\n\t\t\tparams,\n\t\t});\n\t}\n\n\t// L1 Authed\n\n\t/**\n\t * Creates a new API key for a user\n\t * @param nonce\n\t * @returns ApiKeyCreds\n\t */\n\tpublic async createApiKey(nonce?: number): Promise<ApiKeyCreds> {\n\t\tthis.canL1Auth();\n\n\t\tconst endpoint = `${this.host}${CREATE_API_KEY}`;\n\t\tconst headers = await createL1Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.chainId,\n\t\t\tnonce,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\treturn await this.post(endpoint, { headers }).then((apiKeyRaw: ApiKeyRaw) => {\n\t\t\tconst apiKey: ApiKeyCreds = {\n\t\t\t\tkey: apiKeyRaw.apiKey,\n\t\t\t\tsecret: apiKeyRaw.secret,\n\t\t\t\tpassphrase: apiKeyRaw.passphrase,\n\t\t\t};\n\t\t\treturn apiKey;\n\t\t});\n\t}\n\n\t/**\n\t * Derives an existing API key for a user\n\t * @param nonce\n\t * @returns ApiKeyCreds\n\t */\n\tpublic async deriveApiKey(nonce?: number): Promise<ApiKeyCreds> {\n\t\tthis.canL1Auth();\n\n\t\tconst endpoint = `${this.host}${DERIVE_API_KEY}`;\n\t\tconst headers = await createL1Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.chainId,\n\t\t\tnonce,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\treturn await this.get(endpoint, { headers }).then((apiKeyRaw: ApiKeyRaw) => {\n\t\t\tconst apiKey: ApiKeyCreds = {\n\t\t\t\tkey: apiKeyRaw.apiKey,\n\t\t\t\tsecret: apiKeyRaw.secret,\n\t\t\t\tpassphrase: apiKeyRaw.passphrase,\n\t\t\t};\n\t\t\treturn apiKey;\n\t\t});\n\t}\n\n\tpublic async createOrDeriveApiKey(nonce?: number): Promise<ApiKeyCreds> {\n\t\treturn this.createApiKey(nonce).then(response => {\n\t\t\tif (!response.key) {\n\t\t\t\treturn this.deriveApiKey(nonce);\n\t\t\t}\n\t\t\treturn response;\n\t\t});\n\t}\n\n\tpublic async getApiKeys(): Promise<ApiKeysResponse> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = GET_API_KEYS;\n\t\tconst headerArgs = {\n\t\t\tmethod: GET,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\treturn this.get(`${this.host}${endpoint}`, { headers });\n\t}\n\n\tpublic async getClosedOnlyMode(): Promise<BanStatus> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = CLOSED_ONLY;\n\t\tconst headerArgs = {\n\t\t\tmethod: GET,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\treturn this.get(`${this.host}${endpoint}`, { headers });\n\t}\n\n\tpublic async deleteApiKey(): Promise<any> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = DELETE_API_KEY;\n\t\tconst headerArgs = {\n\t\t\tmethod: DELETE,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\treturn this.del(`${this.host}${endpoint}`, { headers });\n\t}\n\n\tpublic async createReadonlyApiKey(): Promise<ReadonlyApiKeyResponse> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = CREATE_READONLY_API_KEY;\n\t\tconst headerArgs = {\n\t\t\tmethod: POST,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\treturn this.post(`${this.host}${endpoint}`, { headers });\n\t}\n\n\tpublic async getReadonlyApiKeys(): Promise<string[]> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = GET_READONLY_API_KEYS;\n\t\tconst headerArgs = {\n\t\t\tmethod: GET,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\treturn this.get(`${this.host}${endpoint}`, { headers });\n\t}\n\n\tpublic async deleteReadonlyApiKey(key: string): Promise<boolean> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = DELETE_READONLY_API_KEY;\n\t\tconst payload = { key };\n\t\tconst headerArgs = {\n\t\t\tmethod: DELETE,\n\t\t\trequestPath: endpoint,\n\t\t\tbody: JSON.stringify(payload),\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\treturn this.del(`${this.host}${endpoint}`, { headers, data: payload });\n\t}\n\n\tpublic async getOrder(orderID: string): Promise<OpenOrder> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = `${GET_ORDER}${orderID}`;\n\t\tconst headerArgs = {\n\t\t\tmethod: GET,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\treturn this.get(`${this.host}${endpoint}`, { headers });\n\t}\n\n\tpublic async getTrades(\n\t\tparams?: TradeParams,\n\t\tonly_first_page = false,\n\t\tnext_cursor?: string,\n\t): Promise<Trade[]> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = GET_TRADES;\n\t\tconst headerArgs = {\n\t\t\tmethod: GET,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\tlet results: Trade[] = [];\n\t\tnext_cursor = next_cursor || INITIAL_CURSOR;\n\t\twhile (next_cursor !== END_CURSOR && (next_cursor === INITIAL_CURSOR || !only_first_page)) {\n\t\t\tconst _params: any = {\n\t\t\t\t...params,\n\t\t\t\tnext_cursor,\n\t\t\t};\n\t\t\tconst response = await this.get(`${this.host}${endpoint}`, {\n\t\t\t\theaders,\n\t\t\t\tparams: _params,\n\t\t\t});\n\t\t\tnext_cursor = response.next_cursor;\n\t\t\tresults = [...results, ...response.data];\n\t\t}\n\t\treturn results;\n\t}\n\n\tpublic async getTradesPaginated(\n\t\tparams?: TradeParams,\n\t\tnext_cursor?: string,\n\t): Promise<TradesPaginatedResponse> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = GET_TRADES;\n\t\tconst headerArgs = {\n\t\t\tmethod: GET,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\tnext_cursor = next_cursor || INITIAL_CURSOR;\n\n\t\tconst _params: any = { ...params, next_cursor };\n\n\t\tconst {\n\t\t\tdata,\n\t\t\t...rest\n\t\t}: { data: Trade[]; next_cursor: string; limit: number; count: number } = await this.get(\n\t\t\t`${this.host}${endpoint}`,\n\t\t\t{ headers, params: _params },\n\t\t);\n\n\t\treturn { trades: Array.isArray(data) ? [...data] : [], ...rest };\n\t}\n\n\tpublic async getBuilderTrades(\n\t\tparams: BuilderTradeParams,\n\t\tnext_cursor?: string,\n\t): Promise<BuilderTradesResponse> {\n\t\tif (!params.builder_code || params.builder_code === bytes32Zero) {\n\t\t\tthrow new Error(\"builderCode is required and cannot be zero\");\n\t\t}\n\n\t\tconst _params: any = { ...params, next_cursor: next_cursor || INITIAL_CURSOR };\n\n\t\tconst {\n\t\t\tdata,\n\t\t\t...rest\n\t\t}: { data: BuilderTrade[]; next_cursor: string; limit: number; count: number } =\n\t\t\tawait this.get(`${this.host}${GET_BUILDER_TRADES}`, { params: _params });\n\n\t\treturn { trades: Array.isArray(data) ? [...data] : [], ...rest };\n\t}\n\n\tpublic async getNotifications(): Promise<Notification[]> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = GET_NOTIFICATIONS;\n\t\tconst headerArgs = {\n\t\t\tmethod: GET,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\treturn this.get(`${this.host}${endpoint}`, {\n\t\t\theaders,\n\t\t\tparams: { signature_type: this.orderBuilder.signatureType },\n\t\t});\n\t}\n\n\tpublic async dropNotifications(params?: DropNotificationParams): Promise<void> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = DROP_NOTIFICATIONS;\n\t\tconst l2HeaderArgs = {\n\t\t\tmethod: DELETE,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\tl2HeaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\treturn this.del(`${this.host}${endpoint}`, {\n\t\t\theaders,\n\t\t\tparams: parseDropNotificationParams(params),\n\t\t});\n\t}\n\n\tpublic async getBalanceAllowance(\n\t\tparams?: BalanceAllowanceParams,\n\t): Promise<BalanceAllowanceResponse> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = GET_BALANCE_ALLOWANCE;\n\t\tconst headerArgs = {\n\t\t\tmethod: GET,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\tconst _params = {\n\t\t\t...params,\n\t\t\tsignature_type: this.orderBuilder.signatureType,\n\t\t};\n\n\t\treturn this.get(`${this.host}${endpoint}`, { headers, params: _params });\n\t}\n\n\tpublic async updateBalanceAllowance(params?: BalanceAllowanceParams): Promise<void> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = UPDATE_BALANCE_ALLOWANCE;\n\t\tconst headerArgs = {\n\t\t\tmethod: GET,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\tconst _params = {\n\t\t\t...params,\n\t\t\tsignature_type: this.orderBuilder.signatureType,\n\t\t};\n\n\t\treturn this.get(`${this.host}${endpoint}`, { headers, params: _params });\n\t}\n\n\tpublic async createOrder(\n\t\tuserOrder: UserOrderV1 | UserOrderV2,\n\t\toptions?: Partial<CreateOrderOptions>,\n\t): Promise<SignedOrder> {\n\t\tthis.canL1Auth();\n\n\t\tconst orderToSign = { ...userOrder };\n\n\t\tif (this.builderConfig?.builderCode && !orderToSign.builderCode) {\n\t\t\torderToSign.builderCode = this.builderConfig.builderCode;\n\t\t}\n\n\t\tconst { tokenID } = orderToSign;\n\n\t\tconst tickSize = await this._resolveTickSize(tokenID, options?.tickSize);\n\n\t\tif (!priceValid(orderToSign.price, tickSize)) {\n\t\t\tthrow new Error(\n\t\t\t\t`invalid price (${orderToSign.price}), min: ${parseFloat(tickSize)} - max: ${\n\t\t\t\t\t1 - parseFloat(tickSize)\n\t\t\t\t}`,\n\t\t\t);\n\t\t}\n\t\torderToSign.price = roundNormal(orderToSign.price, ROUNDING_CONFIG[tickSize].price);\n\n\t\tconst version = options?.version ?? (await this.resolveVersion());\n\n\t\tif (\n\t\t\tversion !== 1 &&\n\t\t\torderToSign.side === Side.BUY &&\n\t\t\t\"userUSDCBalance\" in orderToSign &&\n\t\t\torderToSign.userUSDCBalance !== undefined\n\t\t) {\n\t\t\tconst adjustedAmount = await this.adjustBuyAmountForBalance(\n\t\t\t\ttokenID,\n\t\t\t\torderToSign.size * orderToSign.price,\n\t\t\t\torderToSign.price,\n\t\t\t\torderToSign.userUSDCBalance,\n\t\t\t\torderToSign.builderCode,\n\t\t\t);\n\t\t\torderToSign.size = adjustedAmount / orderToSign.price;\n\t\t}\n\n\t\tconst negRisk = options?.negRisk ?? (await this.getNegRisk(tokenID));\n\n\t\tif (version === 1) {\n\t\t\tconst userFeeRateBps =\n\t\t\t\t\"feeRateBps\" in orderToSign ? (orderToSign as UserOrderV1).feeRateBps : undefined;\n\t\t\tconst feeRateBps = await this._resolveFeeRateBps(tokenID, userFeeRateBps);\n\t\t\t(orderToSign as UserOrderV1).feeRateBps = feeRateBps;\n\t\t}\n\n\t\treturn this.orderBuilder.buildOrder(\n\t\t\torderToSign,\n\t\t\t{\n\t\t\t\ttickSize,\n\t\t\t\tnegRisk,\n\t\t\t},\n\t\t\tversion,\n\t\t);\n\t}\n\n\tpublic async createMarketOrder(\n\t\tuserMarketOrder: UserMarketOrderV1 | UserMarketOrderV2,\n\t\toptions?: Partial<CreateOrderOptions>,\n\t): Promise<SignedOrder> {\n\t\tthis.canL1Auth();\n\n\t\tconst { tokenID } = userMarketOrder;\n\n\t\tawait this._ensureMarketInfoCached(tokenID);\n\n\t\tconst tickSize = await this._resolveTickSize(tokenID, options?.tickSize);\n\n\t\tif (!userMarketOrder.price) {\n\t\t\tuserMarketOrder.price = await this.calculateMarketPrice(\n\t\t\t\ttokenID,\n\t\t\t\tuserMarketOrder.side,\n\t\t\t\tuserMarketOrder.amount,\n\t\t\t\tuserMarketOrder.orderType,\n\t\t\t);\n\t\t}\n\n\t\tif (!priceValid(userMarketOrder.price, tickSize)) {\n\t\t\tthrow new Error(\n\t\t\t\t`invalid price (${userMarketOrder.price}), min: ${parseFloat(tickSize)} - max: ${\n\t\t\t\t\t1 - parseFloat(tickSize)\n\t\t\t\t}`,\n\t\t\t);\n\t\t}\n\n\t\tconst orderToSign = { ...userMarketOrder };\n\n\t\tif (this.builderConfig?.builderCode && !orderToSign.builderCode) {\n\t\t\torderToSign.builderCode = this.builderConfig.builderCode;\n\t\t}\n\n\t\tawait this.ensureBuilderFeeRateCached(orderToSign.builderCode);\n\n\t\tif (\n\t\t\torderToSign.side === Side.BUY &&\n\t\t\t\"userUSDCBalance\" in orderToSign &&\n\t\t\torderToSign.userUSDCBalance !== undefined\n\t\t) {\n\t\t\t// biome-ignore lint/style/noNonNullAssertion: price is validated above\n\t\t\tconst price = orderToSign.price!;\n\t\t\torderToSign.amount = await this.adjustBuyAmountForBalance(\n\t\t\t\ttokenID,\n\t\t\t\torderToSign.amount,\n\t\t\t\tprice,\n\t\t\t\torderToSign.userUSDCBalance,\n\t\t\t\torderToSign.builderCode,\n\t\t\t);\n\t\t}\n\n\t\tconst negRisk = options?.negRisk ?? (await this.getNegRisk(tokenID));\n\t\tconst version = options?.version ?? (await this.resolveVersion());\n\n\t\tif (version === 1) {\n\t\t\tconst userFeeRateBps =\n\t\t\t\t\"feeRateBps\" in orderToSign\n\t\t\t\t\t? (orderToSign as UserMarketOrderV1).feeRateBps\n\t\t\t\t\t: undefined;\n\t\t\tconst feeRateBps = await this._resolveFeeRateBps(tokenID, userFeeRateBps);\n\t\t\t(orderToSign as UserMarketOrderV1).feeRateBps = feeRateBps;\n\t\t}\n\n\t\treturn this.orderBuilder.buildMarketOrder(\n\t\t\torderToSign,\n\t\t\t{\n\t\t\t\ttickSize,\n\t\t\t\tnegRisk,\n\t\t\t},\n\t\t\tversion,\n\t\t);\n\t}\n\n\tpublic async createExchangeV3OrderFromAmounts(\n\t\tuserOrder: ExchangeV3OrderAmounts,\n\t): Promise<SignedOrder> {\n\t\tthis.canL1Auth();\n\n\t\tconst orderToSign = { ...userOrder };\n\t\tif (this.builderConfig?.builderCode && !orderToSign.builderCode) {\n\t\t\torderToSign.builderCode = this.builderConfig.builderCode;\n\t\t}\n\n\t\treturn this.orderBuilder.buildExchangeV3OrderFromAmounts(orderToSign);\n\t}\n\n\tpublic async createAndPostOrder<T extends OrderType.GTC | OrderType.GTD = OrderType.GTC>(\n\t\tuserOrder: UserOrderV1 | UserOrderV2,\n\t\toptions?: Partial<CreateOrderOptions>,\n\t\torderType: T = OrderType.GTC as T,\n\t\tpostOnly = false,\n\t\tdeferExec = false,\n\t): Promise<any> {\n\t\tlet postOrderResponse: any;\n\n\t\tawait this._retryOnVersionUpdate(async () => {\n\t\t\tconst order = await this.createOrder(userOrder, options);\n\t\t\tpostOrderResponse = await this.postOrder(order, orderType, postOnly, deferExec);\n\t\t});\n\n\t\treturn postOrderResponse;\n\t}\n\n\tpublic async createAndPostMarketOrder<T extends OrderType.FOK | OrderType.FAK = OrderType.FOK>(\n\t\tuserMarketOrder: UserMarketOrderV1 | UserMarketOrderV2,\n\t\toptions?: Partial<CreateOrderOptions>,\n\t\torderType: T = OrderType.FOK as T,\n\t\tdeferExec = false,\n\t): Promise<any> {\n\t\tlet postOrderMarketResponse: any;\n\n\t\tawait this._retryOnVersionUpdate(async () => {\n\t\t\tconst order = await this.createMarketOrder(userMarketOrder, options);\n\t\t\tpostOrderMarketResponse = await this.postOrder(order, orderType, false, deferExec);\n\t\t});\n\n\t\treturn postOrderMarketResponse;\n\t}\n\n\tpublic async getOpenOrders(\n\t\tparams?: OpenOrderParams,\n\t\tonly_first_page = false,\n\t\tnext_cursor?: string,\n\t): Promise<OpenOrdersResponse> {\n\t\tthis.canL2Auth();\n\t\tconst endpoint = GET_OPEN_ORDERS;\n\t\tconst l2HeaderArgs = {\n\t\t\tmethod: GET,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\tl2HeaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\tlet results: OpenOrder[] = [];\n\t\tnext_cursor = next_cursor || INITIAL_CURSOR;\n\t\twhile (next_cursor !== END_CURSOR && (next_cursor === INITIAL_CURSOR || !only_first_page)) {\n\t\t\tconst _params: any = {\n\t\t\t\t...params,\n\t\t\t\tnext_cursor,\n\t\t\t};\n\t\t\tconst response = await this.get(`${this.host}${endpoint}`, {\n\t\t\t\theaders,\n\t\t\t\tparams: _params,\n\t\t\t});\n\t\t\tnext_cursor = response.next_cursor;\n\t\t\tresults = [...results, ...response.data];\n\t\t}\n\t\treturn results;\n\t}\n\n\tpublic async getPreMigrationOrders(\n\t\tonly_first_page = false,\n\t\tnext_cursor?: string,\n\t): Promise<PreMigrationOrdersResponse> {\n\t\tthis.canL2Auth();\n\t\tconst endpoint = GET_PRE_MIGRATION_ORDERS;\n\t\tconst l2HeaderArgs = {\n\t\t\tmethod: GET,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\tl2HeaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\tlet results: PreMigrationOrder[] = [];\n\t\tnext_cursor = next_cursor || INITIAL_CURSOR;\n\t\twhile (next_cursor !== END_CURSOR && (next_cursor === INITIAL_CURSOR || !only_first_page)) {\n\t\t\tconst _params: any = { next_cursor };\n\t\t\tconst response = await this.get(`${this.host}${endpoint}`, {\n\t\t\t\theaders,\n\t\t\t\tparams: _params,\n\t\t\t});\n\t\t\tnext_cursor = response.next_cursor;\n\t\t\tresults = [...results, ...response.data];\n\t\t}\n\t\treturn results;\n\t}\n\n\tpublic async postOrder<T extends OrderType = OrderType.GTC>(\n\t\torder: SignedOrder,\n\t\torderType: T = OrderType.GTC as T,\n\t\tpostOnly = false,\n\t\tdeferExec = false,\n\t): Promise<any> {\n\t\tthis.canL2Auth();\n\t\tif (postOnly && (orderType === OrderType.FOK || orderType === OrderType.FAK)) {\n\t\t\tthrow new Error(\"postOnly is not supported for FOK/FAK orders\");\n\t\t}\n\t\tconst endpoint = POST_ORDER;\n\n\t\tconst orderPayload = isV2Order(order)\n\t\t\t? orderToJsonV2(order, this.creds?.key || \"\", orderType, postOnly, deferExec)\n\t\t\t: orderToJsonV1(order, this.creds?.key || \"\", orderType, postOnly, deferExec);\n\n\t\tconst l2HeaderArgs = {\n\t\t\tmethod: POST,\n\t\t\trequestPath: endpoint,\n\t\t\tbody: JSON.stringify(orderPayload),\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\tl2HeaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\tconst res = await this.post(\n\t\t\t`${this.host}${endpoint}`,\n\t\t\t{\n\t\t\t\theaders,\n\t\t\t\tdata: orderPayload,\n\t\t\t},\n\t\t\ttrue,\n\t\t);\n\n\t\tif (this._isOrderVersionMismatch(res)) await this.resolveVersion(true);\n\n\t\treturn this.throwIfError(res);\n\t}\n\n\tpublic async postOrders(\n\t\targs: PostOrdersArgs[],\n\t\tpostOnly = false,\n\t\tdeferExec = false,\n\t): Promise<any> {\n\t\tthis.canL2Auth();\n\t\tif (\n\t\t\tpostOnly &&\n\t\t\targs.some(({ orderType }) => orderType === OrderType.FOK || orderType === OrderType.FAK)\n\t\t) {\n\t\t\tthrow new Error(\"postOnly is not supported for FOK/FAK orders\");\n\t\t}\n\t\tconst endpoint = POST_ORDERS;\n\t\tconst ordersPayload: (NewOrderV2<any> | NewOrderV1<any>)[] = [];\n\t\tfor (const arg of args) {\n\t\t\tconst { order, orderType } = arg;\n\t\t\t// Version-aware dispatch\n\t\t\tconst orderPayload = isV2Order(order)\n\t\t\t\t? orderToJsonV2(order, this.creds?.key || \"\", orderType, postOnly, deferExec)\n\t\t\t\t: orderToJsonV1(order, this.creds?.key || \"\", orderType, postOnly, deferExec);\n\t\t\tordersPayload.push(orderPayload);\n\t\t}\n\n\t\tconst l2HeaderArgs = {\n\t\t\tmethod: POST,\n\t\t\trequestPath: endpoint,\n\t\t\tbody: JSON.stringify(ordersPayload),\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\tl2HeaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\tconst res = await this.post(\n\t\t\t`${this.host}${endpoint}`,\n\t\t\t{\n\t\t\t\theaders,\n\t\t\t\tdata: ordersPayload,\n\t\t\t},\n\t\t\ttrue,\n\t\t);\n\n\t\tif (this._isOrderVersionMismatch(res)) await this.resolveVersion(true);\n\n\t\treturn this.throwIfError(res);\n\t}\n\n\tpublic async cancelOrder(payload: OrderPayload): Promise<any> {\n\t\tthis.canL2Auth();\n\t\tconst endpoint = CANCEL_ORDER;\n\t\tconst l2HeaderArgs = {\n\t\t\tmethod: DELETE,\n\t\t\trequestPath: endpoint,\n\t\t\tbody: JSON.stringify(payload),\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\tl2HeaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\t\treturn this.del(`${this.host}${endpoint}`, { headers, data: payload });\n\t}\n\n\tpublic async cancelOrders(ordersHashes: string[]): Promise<any> {\n\t\tthis.canL2Auth();\n\t\tconst endpoint = CANCEL_ORDERS;\n\t\tconst l2HeaderArgs = {\n\t\t\tmethod: DELETE,\n\t\t\trequestPath: endpoint,\n\t\t\tbody: JSON.stringify(ordersHashes),\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\tl2HeaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\t\treturn this.del(`${this.host}${endpoint}`, { headers, data: ordersHashes });\n\t}\n\n\tpublic async cancelAll(): Promise<any> {\n\t\tthis.canL2Auth();\n\t\tconst endpoint = CANCEL_ALL;\n\t\tconst l2HeaderArgs = {\n\t\t\tmethod: DELETE,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\tl2HeaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\t\treturn this.del(`${this.host}${endpoint}`, { headers });\n\t}\n\n\tpublic async cancelMarketOrders(payload: OrderMarketCancelParams): Promise<any> {\n\t\tthis.canL2Auth();\n\t\tconst endpoint = CANCEL_MARKET_ORDERS;\n\t\tconst l2HeaderArgs = {\n\t\t\tmethod: DELETE,\n\t\t\trequestPath: endpoint,\n\t\t\tbody: JSON.stringify(payload),\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\tl2HeaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\t\treturn this.del(`${this.host}${endpoint}`, { headers, data: payload });\n\t}\n\n\tpublic async isOrderScoring(params?: OrderScoringParams): Promise<OrderScoring> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = IS_ORDER_SCORING;\n\t\tconst headerArgs = {\n\t\t\tmethod: GET,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\treturn this.get(`${this.host}${endpoint}`, { headers, params });\n\t}\n\n\tpublic async areOrdersScoring(params?: OrdersScoringParams): Promise<OrdersScoring> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = ARE_ORDERS_SCORING;\n\t\tconst payload = JSON.stringify(params?.orderIds);\n\t\tconst headerArgs = {\n\t\t\tmethod: POST,\n\t\t\trequestPath: endpoint,\n\t\t\tbody: payload,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\treturn this.post(`${this.host}${endpoint}`, {\n\t\t\theaders,\n\t\t\tdata: payload,\n\t\t});\n\t}\n\n\t// Rewards\n\tpublic async getEarningsForUserForDay(date: string): Promise<UserEarning[]> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = GET_EARNINGS_FOR_USER_FOR_DAY;\n\t\tconst headerArgs = {\n\t\t\tmethod: GET,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\tlet results: UserEarning[] = [];\n\t\tlet next_cursor = INITIAL_CURSOR;\n\t\twhile (next_cursor !== END_CURSOR) {\n\t\t\tconst params = {\n\t\t\t\tdate,\n\t\t\t\tsignature_type: this.orderBuilder.signatureType,\n\t\t\t\tnext_cursor,\n\t\t\t};\n\n\t\t\tconst response = await this.get(`${this.host}${endpoint}`, {\n\t\t\t\theaders,\n\t\t\t\tparams,\n\t\t\t});\n\t\t\tnext_cursor = response.next_cursor;\n\t\t\tresults = [...results, ...response.data];\n\t\t}\n\t\treturn results;\n\t}\n\n\tpublic async getTotalEarningsForUserForDay(date: string): Promise<TotalUserEarning[]> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = GET_TOTAL_EARNINGS_FOR_USER_FOR_DAY;\n\t\tconst headerArgs = {\n\t\t\tmethod: GET,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\tconst params = {\n\t\t\tdate,\n\t\t\tsignature_type: this.orderBuilder.signatureType,\n\t\t};\n\n\t\treturn await this.get(`${this.host}${endpoint}`, {\n\t\t\theaders,\n\t\t\tparams,\n\t\t});\n\t}\n\n\tpublic async getUserEarningsAndMarketsConfig(\n\t\tdate: string,\n\t\torder_by = \"\",\n\t\tposition = \"\",\n\t\tno_competition = false,\n\t): Promise<UserRewardsEarning[]> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = GET_REWARDS_EARNINGS_PERCENTAGES;\n\t\tconst headerArgs = {\n\t\t\tmethod: GET,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\tlet results: UserRewardsEarning[] = [];\n\t\tlet next_cursor = INITIAL_CURSOR;\n\t\twhile (next_cursor !== END_CURSOR) {\n\t\t\tconst params = {\n\t\t\t\tdate,\n\t\t\t\tsignature_type: this.orderBuilder.signatureType,\n\t\t\t\tnext_cursor,\n\t\t\t\torder_by,\n\t\t\t\tposition,\n\t\t\t\tno_competition,\n\t\t\t};\n\n\t\t\tconst response = await this.get(`${this.host}${endpoint}`, {\n\t\t\t\theaders,\n\t\t\t\tparams,\n\t\t\t});\n\t\t\tnext_cursor = response.next_cursor;\n\t\t\tresults = [...results, ...response.data];\n\t\t}\n\t\treturn results;\n\t}\n\n\tpublic async getRewardPercentages(): Promise<RewardsPercentages> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = GET_LIQUIDITY_REWARD_PERCENTAGES;\n\t\tconst headerArgs = {\n\t\t\tmethod: GET,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\tconst _params = {\n\t\t\tsignature_type: this.orderBuilder.signatureType,\n\t\t};\n\n\t\treturn this.get(`${this.host}${endpoint}`, { headers, params: _params });\n\t}\n\n\tpublic async getCurrentRewards(): Promise<MarketReward[]> {\n\t\tlet results: MarketReward[] = [];\n\t\tlet next_cursor = INITIAL_CURSOR;\n\t\twhile (next_cursor !== END_CURSOR) {\n\t\t\tconst response = await this.get(`${this.host}${GET_REWARDS_MARKETS_CURRENT}`, {\n\t\t\t\tparams: { next_cursor },\n\t\t\t});\n\t\t\tnext_cursor = response.next_cursor;\n\t\t\tresults = [...results, ...response.data];\n\t\t}\n\t\treturn results;\n\t}\n\n\tpublic async getRawRewardsForMarket(conditionId: string): Promise<MarketReward[]> {\n\t\tlet results: MarketReward[] = [];\n\t\tlet next_cursor = INITIAL_CURSOR;\n\t\twhile (next_cursor !== END_CURSOR) {\n\t\t\tconst response = await this.get(`${this.host}${GET_REWARDS_MARKETS}${conditionId}`, {\n\t\t\t\tparams: { next_cursor },\n\t\t\t});\n\t\t\tnext_cursor = response.next_cursor;\n\t\t\tresults = [...results, ...response.data];\n\t\t}\n\t\treturn results;\n\t}\n\n\tpublic async calculateMarketPrice(\n\t\ttokenID: string,\n\t\tside: Side,\n\t\tamount: number,\n\t\torderType: OrderType = OrderType.FOK,\n\t): Promise<number> {\n\t\tconst book = await this.getOrderBook(tokenID);\n\t\tif (!book) {\n\t\t\tthrow new Error(\"no orderbook\");\n\t\t}\n\t\tif (side === Side.BUY) {\n\t\t\tif (!book.asks) {\n\t\t\t\tthrow new Error(\"no match\");\n\t\t\t}\n\t\t\treturn calculateBuyMarketPrice(book.asks, amount, orderType);\n\t\t} else {\n\t\t\tif (!book.bids) {\n\t\t\t\tthrow new Error(\"no match\");\n\t\t\t}\n\t\t\treturn calculateSellMarketPrice(book.bids, amount, orderType);\n\t\t}\n\t}\n\n\tpublic async createBuilderApiKey(): Promise<BuilderApiKey> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = CREATE_BUILDER_API_KEY;\n\t\tconst headerArgs = {\n\t\t\tmethod: POST,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\treturn this.post(`${this.host}${endpoint}`, { headers });\n\t}\n\n\tpublic async getBuilderApiKeys(): Promise<BuilderApiKeyResponse[]> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = GET_BUILDER_API_KEYS;\n\t\tconst headerArgs = {\n\t\t\tmethod: GET,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\treturn this.get(`${this.host}${endpoint}`, { headers });\n\t}\n\n\tpublic async revokeBuilderApiKey(): Promise<any> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = REVOKE_BUILDER_API_KEY;\n\t\tconst headerArgs = {\n\t\t\tmethod: DELETE,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\treturn this.del(`${this.host}${endpoint}`, { headers });\n\t}\n\n\tpublic async getMarketTradesEvents(conditionID: string): Promise<MarketTradeEvent[]> {\n\t\treturn this.get(`${this.host}${GET_MARKET_TRADES_EVENTS}${conditionID}`);\n\t}\n\n\tprivate canL1Auth(): void {\n\t\tif (this.signer === undefined) {\n\t\t\tthrow L1_AUTH_UNAVAILABLE_ERROR;\n\t\t}\n\t}\n\n\tprivate canL2Auth(): void {\n\t\tif (this.signer === undefined) {\n\t\t\tthrow L1_AUTH_UNAVAILABLE_ERROR;\n\t\t}\n\n\t\tif (this.creds === undefined) {\n\t\t\tthrow L2_AUTH_NOT_AVAILABLE;\n\t\t}\n\t}\n\n\tprivate isBuilderOrder(builderCode?: string): boolean {\n\t\treturn builderCode !== undefined && builderCode !== bytes32Zero;\n\t}\n\n\tprivate async getBuilderTakerFeeRate(builderCode?: string): Promise<number> {\n\t\tif (!this.isBuilderOrder(builderCode)) return 0;\n\n\t\tawait this.ensureBuilderFeeRateCached(builderCode);\n\t\treturn this.builderFeeRates[builderCode ?? \"\"]?.taker ?? 0;\n\t}\n\n\tprivate async adjustBuyAmountForBalance(\n\t\ttokenID: string,\n\t\tamount: number,\n\t\tprice: number,\n\t\tuserUSDCBalance: number,\n\t\tbuilderCode?: string,\n\t): Promise<number> {\n\t\tawait this._ensureMarketInfoCached(tokenID);\n\t\tconst builderTakerFeeRate = await this.getBuilderTakerFeeRate(builderCode);\n\n\t\treturn adjustBuyAmountForFees(\n\t\t\tamount,\n\t\t\tprice,\n\t\t\tuserUSDCBalance,\n\t\t\tthis.feeInfos[tokenID].rate,\n\t\t\tthis.feeInfos[tokenID].exponent,\n\t\t\tbuilderTakerFeeRate,\n\t\t\tthis.feeSlippage,\n\t\t);\n\t}\n\n\tprivate async _ensureMarketInfoCached(tokenID: string): Promise<void> {\n\t\tif (tokenID in this.feeInfos) return;\n\n\t\tif (!(tokenID in this.tokenConditionMap)) {\n\t\t\tconst result = await this.get(`${this.host}${GET_MARKET_BY_TOKEN}${tokenID}`);\n\t\t\tif (!result?.condition_id) {\n\t\t\t\tthrow new Error(`failed to resolve condition id for token ${tokenID}`);\n\t\t\t}\n\t\t\tthis.tokenConditionMap[tokenID] = result.condition_id as string;\n\t\t}\n\n\t\tawait this.getClobMarketInfo(this.tokenConditionMap[tokenID]);\n\t}\n\n\tprivate async ensureBuilderFeeRateCached(builderCode?: string): Promise<void> {\n\t\tif (!builderCode || builderCode === bytes32Zero) return;\n\t\tif (builderCode in this.builderFeeRates) return;\n\n\t\tconst result = await this.get(`${this.host}${GET_BUILDER_FEES}${builderCode}`);\n\t\tthis.builderFeeRates[builderCode] = {\n\t\t\tmaker: result.builder_maker_fee_rate_bps / BUILDER_FEES_BPS,\n\t\t\ttaker: result.builder_taker_fee_rate_bps / BUILDER_FEES_BPS,\n\t\t};\n\t}\n\n\tprivate async _resolveTickSize(tokenID: string, tickSize?: TickSize): Promise<TickSize> {\n\t\tconst minTickSize = await this.getTickSize(tokenID);\n\t\tif (tickSize) {\n\t\t\tif (isTickSizeSmaller(tickSize, minTickSize)) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`invalid tick size (${tickSize}), minimum for the market is ${minTickSize}`,\n\t\t\t\t);\n\t\t\t}\n\t\t} else {\n\t\t\ttickSize = minTickSize;\n\t\t}\n\t\treturn tickSize;\n\t}\n\n\tprivate async _resolveFeeRateBps(tokenID: string, userFeeRateBps?: number): Promise<number> {\n\t\tconst marketFeeRateBps = await this.getFeeRateBps(tokenID);\n\t\tif (\n\t\t\tmarketFeeRateBps > 0 &&\n\t\t\tuserFeeRateBps !== undefined &&\n\t\t\tuserFeeRateBps !== marketFeeRateBps\n\t\t) {\n\t\t\tthrow new Error(\n\t\t\t\t`invalid user provided fee rate: ${userFeeRateBps}, fee rate for the market must be ${marketFeeRateBps}`,\n\t\t\t);\n\t\t}\n\t\treturn marketFeeRateBps;\n\t}\n\n\tprivate async resolveVersion(forceUpdate: boolean = false): Promise<number> {\n\t\t// Use cached version if given\n\t\tif (!forceUpdate && this.cachedVersion !== undefined) {\n\t\t\treturn this.cachedVersion;\n\t\t}\n\n\t\t// Query API and cache the result\n\t\tconst apiVersion = await this.getVersion();\n\t\tthis.cachedVersion = apiVersion;\n\n\t\treturn apiVersion;\n\t}\n\n\tprivate async _retryOnVersionUpdate(retryFunc: () => Promise<unknown>) {\n\t\tconst version = await this.resolveVersion();\n\n\t\tfor (let attempt = 0; attempt < 2; attempt++) {\n\t\t\tawait retryFunc();\n\n\t\t\t// no need to retry if version is unchanged\n\t\t\tif (version === (await this.resolveVersion())) break;\n\t\t}\n\t}\n\n\tprivate _isOrderVersionMismatch(resp: ClobErrorResponseBody) {\n\t\tconst error = resp?.error;\n\t\tif (!error) return false;\n\t\tconst message = typeof error === \"string\" ? error : JSON.stringify(error);\n\t\treturn message.includes(ORDER_VERSION_MISMATCH_ERROR);\n\t}\n\n\tprivate throwIfError(result: any): any {\n\t\tif (this.throwOnError && result && typeof result === \"object\" && \"error\" in result) {\n\t\t\tconst msg =\n\t\t\t\ttypeof result.error === \"string\" ? result.error : JSON.stringify(result.error);\n\t\t\tthrow new ApiError(msg, result.status, result);\n\t\t}\n\t\treturn result;\n\t}\n\n\t// http methods\n\tprivate async get(endpoint: string, options?: RequestOptions, skipThrow = false) {\n\t\tconst result = await get(endpoint, options);\n\t\treturn skipThrow ? result : this.throwIfError(result);\n\t}\n\n\tprivate async post(endpoint: string, options?: RequestOptions, skipThrow = false) {\n\t\tconst result = await post(endpoint, options, this.retryOnError);\n\t\treturn skipThrow ? result : this.throwIfError(result);\n\t}\n\n\tprivate async del(endpoint: string, options?: RequestOptions, skipThrow = false) {\n\t\tconst result = await del(endpoint, options);\n\t\treturn skipThrow ? result : this.throwIfError(result);\n\t}\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"client.js","names":["result: MarketDetails","results: Trade[]","_params: any","postOrderResponse: OrderResponse | undefined","postOrderMarketResponse: OrderResponse | undefined","results: OpenOrder[]","results: PreMigrationOrder[]","response: OrderResponse","ordersPayload: (NewOrderV2<any> | NewOrderV1<any>)[]","responses: OrderResponse[]","results: UserEarning[]","results: UserRewardsEarning[]","results: MarketReward[]"],"sources":["../src/client.ts"],"sourcesContent":["import {\n\tBUILDER_FEES_BPS,\n\tbytes32Zero,\n\tEND_CURSOR,\n\tINITIAL_CURSOR,\n\tORDER_VERSION_MISMATCH_ERROR,\n} from \"./constants.js\";\nimport {\n\tARE_ORDERS_SCORING,\n\tCANCEL_ALL,\n\tCANCEL_MARKET_ORDERS,\n\tCANCEL_ORDER,\n\tCANCEL_ORDERS,\n\tCLOSED_ONLY,\n\tCREATE_API_KEY,\n\tCREATE_BUILDER_API_KEY,\n\tCREATE_READONLY_API_KEY,\n\tDELETE_API_KEY,\n\tDELETE_READONLY_API_KEY,\n\tDERIVE_API_KEY,\n\tDROP_NOTIFICATIONS,\n\tGET_API_KEYS,\n\tGET_BALANCE_ALLOWANCE,\n\tGET_BUILDER_API_KEYS,\n\tGET_BUILDER_FEES,\n\tGET_BUILDER_TRADES,\n\tGET_CLOB_MARKET,\n\tGET_EARNINGS_FOR_USER_FOR_DAY,\n\tGET_FEE_RATE,\n\tGET_LAST_TRADE_PRICE,\n\tGET_LAST_TRADES_PRICES,\n\tGET_LIQUIDITY_REWARD_PERCENTAGES,\n\tGET_MARKET,\n\tGET_MARKET_BY_TOKEN,\n\tGET_MARKET_TRADES_EVENTS,\n\tGET_MARKETS,\n\tGET_MIDPOINT,\n\tGET_MIDPOINTS,\n\tGET_NEG_RISK,\n\tGET_NOTIFICATIONS,\n\tGET_OPEN_ORDERS,\n\tGET_ORDER,\n\tGET_ORDER_BOOK,\n\tGET_ORDER_BOOKS,\n\tGET_PRE_MIGRATION_ORDERS,\n\tGET_PRICE,\n\tGET_PRICES,\n\tGET_PRICES_HISTORY,\n\tGET_READONLY_API_KEYS,\n\tGET_REWARDS_EARNINGS_PERCENTAGES,\n\tGET_REWARDS_MARKETS,\n\tGET_REWARDS_MARKETS_CURRENT,\n\tGET_SAMPLING_MARKETS,\n\tGET_SAMPLING_SIMPLIFIED_MARKETS,\n\tGET_SIMPLIFIED_MARKETS,\n\tGET_SPREAD,\n\tGET_SPREADS,\n\tGET_TICK_SIZE,\n\tGET_TOTAL_EARNINGS_FOR_USER_FOR_DAY,\n\tGET_TRADES,\n\tHEARTBEAT,\n\tIS_ORDER_SCORING,\n\tOK,\n\tPOST_ORDER,\n\tPOST_ORDERS,\n\tREVOKE_BUILDER_API_KEY,\n\tTIME,\n\tUPDATE_BALANCE_ALLOWANCE,\n} from \"./endpoints.js\";\nimport { ApiError, L1_AUTH_UNAVAILABLE_ERROR, L2_AUTH_NOT_AVAILABLE } from \"./errors.js\";\nimport { adjustBuyAmountForFees, validateFeeSlippage } from \"./fees/index.js\";\nimport { createL1Headers, createL2Headers } from \"./headers/index.js\";\nimport {\n\tDELETE,\n\tdel,\n\tGET,\n\tget,\n\tPOST,\n\tparseDropNotificationParams,\n\tpost,\n\ttype RequestOptions,\n} from \"./http-helpers/index.js\";\nimport {\n\tcalculateBuyMarketPrice,\n\tcalculateSellMarketPrice,\n\tROUNDING_CONFIG,\n} from \"./order-builder/helpers/index.js\";\nimport { OrderBuilder } from \"./order-builder/index.js\";\nimport { SignatureTypeV2 } from \"./order-utils/model/signatureTypeV2.js\";\nimport type { ClobSigner } from \"./signing/signer.js\";\nimport type {\n\tApiKeyCreds,\n\tApiKeyRaw,\n\tApiKeysResponse,\n\tBalanceAllowanceParams,\n\tBalanceAllowanceResponse,\n\tBanStatus,\n\tBookParams,\n\tBuilderApiKey,\n\tBuilderApiKeyResponse,\n\tBuilderConfig,\n\tBuilderFeeRates,\n\tBuilderTrade,\n\tBuilderTradeParams,\n\tBuilderTradesResponse,\n\tChain,\n\tClobErrorResponseBody,\n\tCreateOrderOptions,\n\tDropNotificationParams,\n\tExchangeV3OrderAmounts,\n\tFeeInfos,\n\tFeeRates,\n\tMarketDetails,\n\tMarketPrice,\n\tMarketReward,\n\tMarketTradeEvent,\n\tNegRisk,\n\tNewOrderV1,\n\tNewOrderV2,\n\tNotification,\n\tOpenOrder,\n\tOpenOrderParams,\n\tOpenOrdersResponse,\n\tOrderBookSummary,\n\tOrderMarketCancelParams,\n\tOrderPayload,\n\tOrderResponse,\n\tOrderScoring,\n\tOrderScoringParams,\n\tOrdersScoring,\n\tOrdersScoringParams,\n\tPaginationPayload,\n\tPostOrdersArgs,\n\tPreMigrationOrder,\n\tPreMigrationOrdersResponse,\n\tPriceHistoryFilterParams,\n\tReadonlyApiKeyResponse,\n\tRewardsPercentages,\n\tTickSize,\n\tTickSizes,\n\tTokenConditionMap,\n\tTotalUserEarning,\n\tTrade,\n\tTradeParams,\n\tTradesPaginatedResponse,\n\tUserEarning,\n\tUserMarketOrderV1,\n\tUserMarketOrderV2,\n\tUserOrderV1,\n\tUserOrderV2,\n\tUserRewardsEarning,\n} from \"./types/index.js\";\nimport { OrderType, orderToJsonV1, orderToJsonV2, Side } from \"./types/index.js\";\nimport { isV2Order, type SignedOrder } from \"./types/unifiedOrder.js\";\nimport {\n\tgenerateOrderBookSummaryHash,\n\tisTickSizeSmaller,\n\tpriceValid,\n\troundNormal,\n} from \"./utilities.js\";\n\nexport { adjustBuyAmountForFees } from \"./fees/index.js\";\n\nconst RESOLVE_TRADES_TIMEOUT_MS = 30_000;\nconst RESOLVE_TRADES_POLL_INTERVAL_MS = 250;\nconst FAILED_TRADE_STATUS = \"FAILED\";\n\nconst sleep = (ms: number) => new Promise(resolve => setTimeout(resolve, ms));\n\n// A trade is resolved once execution reached a terminal outcome: it either\n// carries a settlement transaction hash or it failed and never will.\nconst isTradeResolved = (trade: Trade): boolean =>\n\ttrade.status.toUpperCase() === FAILED_TRADE_STATUS ||\n\tBoolean(trade.transaction_hash && trade.transaction_hash.length > 0);\n\nexport interface ClobClientOptions {\n\thost: string;\n\tchain: Chain;\n\tsigner?: ClobSigner;\n\tcreds?: ApiKeyCreds;\n\tsignatureType?: SignatureTypeV2;\n\tfunderAddress?: string;\n\tuseServerTime?: boolean;\n\tbuilderConfig?: BuilderConfig;\n\tgetSigner?: () => Promise<ClobSigner> | ClobSigner;\n\tretryOnError?: boolean;\n\tthrowOnError?: boolean;\n\tfeeSlippage?: number;\n}\n\nexport class ClobClient {\n\treadonly host: string;\n\n\treadonly chainId: Chain;\n\n\t// Used to perform Level 1 authentication and sign orders\n\treadonly signer?: ClobSigner;\n\n\t// Used to perform Level 2 authentication\n\treadonly creds?: ApiKeyCreds;\n\n\treadonly orderBuilder: OrderBuilder;\n\n\treadonly tickSizes: TickSizes;\n\n\treadonly negRisk: NegRisk;\n\n\treadonly feeInfos: FeeInfos;\n\n\t// Fee rate bps data for CLOB V1\n\treadonly feeRates: FeeRates;\n\n\treadonly builderFeeRates: BuilderFeeRates;\n\n\tprivate readonly tokenConditionMap: TokenConditionMap;\n\n\treadonly useServerTime?: boolean;\n\n\treadonly builderConfig?: BuilderConfig;\n\n\treadonly signatureType: SignatureTypeV2;\n\n\treadonly funderAddress?: string;\n\n\tprivate cachedVersion?: number;\n\n\treadonly retryOnError?: boolean;\n\n\treadonly throwOnError?: boolean;\n\n\treadonly feeSlippage: number;\n\n\tconstructor({\n\t\thost,\n\t\tchain,\n\t\tsigner,\n\t\tcreds,\n\t\tsignatureType,\n\t\tfunderAddress,\n\t\tuseServerTime,\n\t\tbuilderConfig,\n\t\tgetSigner,\n\t\tretryOnError,\n\t\tthrowOnError,\n\t\tfeeSlippage,\n\t}: ClobClientOptions) {\n\t\tthis.host = host.endsWith(\"/\") ? host.slice(0, -1) : host;\n\t\tthis.chainId = chain;\n\n\t\tif (signer !== undefined) {\n\t\t\tthis.signer = signer;\n\t\t}\n\t\tif (creds !== undefined) {\n\t\t\tthis.creds = creds;\n\t\t}\n\t\tthis.orderBuilder = new OrderBuilder(\n\t\t\tsigner as ClobSigner,\n\t\t\tchain,\n\t\t\tsignatureType,\n\t\t\tfunderAddress,\n\t\t\tgetSigner,\n\t\t);\n\t\tthis.signatureType = signatureType ?? SignatureTypeV2.EOA;\n\t\tthis.funderAddress = funderAddress;\n\t\tthis.tickSizes = {};\n\t\tthis.negRisk = {};\n\t\tthis.feeRates = {};\n\t\tthis.feeInfos = {};\n\t\tthis.builderFeeRates = {};\n\t\tthis.tokenConditionMap = {};\n\t\tthis.retryOnError = retryOnError;\n\t\tthis.throwOnError = throwOnError;\n\t\tthis.feeSlippage = feeSlippage ?? 0;\n\t\tvalidateFeeSlippage(this.feeSlippage);\n\t\tthis.useServerTime = useServerTime;\n\t\tif (builderConfig !== undefined) {\n\t\t\tthis.builderConfig = builderConfig;\n\t\t}\n\t}\n\n\t// Public endpoints\n\tpublic async getOk(): Promise<any> {\n\t\treturn this.get(`${this.host}${OK}`);\n\t}\n\n\tpublic async postHeartbeat(\n\t\theartbeatId = \"\",\n\t): Promise<{ heartbeat_id: string; error_msg?: string }> {\n\t\tthis.canL2Auth();\n\t\tconst body = JSON.stringify({ heartbeat_id: heartbeatId });\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\t{ method: POST, requestPath: HEARTBEAT, body },\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\t\treturn this.post(`${this.host}${HEARTBEAT}`, {\n\t\t\theaders,\n\t\t\tdata: { heartbeat_id: heartbeatId },\n\t\t});\n\t}\n\n\tpublic async getVersion(): Promise<number> {\n\t\tconst response = await this.get(`${this.host}/version`);\n\t\t// default to v2\n\t\treturn response?.version ?? 2;\n\t}\n\n\tpublic async getServerTime(): Promise<number> {\n\t\treturn this.get(`${this.host}${TIME}`);\n\t}\n\n\tpublic async getSamplingSimplifiedMarkets(\n\t\tnext_cursor = INITIAL_CURSOR,\n\t): Promise<PaginationPayload> {\n\t\treturn this.get(`${this.host}${GET_SAMPLING_SIMPLIFIED_MARKETS}`, {\n\t\t\tparams: { next_cursor },\n\t\t});\n\t}\n\n\tpublic async getSamplingMarkets(next_cursor = INITIAL_CURSOR): Promise<PaginationPayload> {\n\t\treturn this.get(`${this.host}${GET_SAMPLING_MARKETS}`, {\n\t\t\tparams: { next_cursor },\n\t\t});\n\t}\n\n\tpublic async getSimplifiedMarkets(next_cursor = INITIAL_CURSOR): Promise<PaginationPayload> {\n\t\treturn this.get(`${this.host}${GET_SIMPLIFIED_MARKETS}`, {\n\t\t\tparams: { next_cursor },\n\t\t});\n\t}\n\n\tpublic async getMarkets(next_cursor = INITIAL_CURSOR): Promise<PaginationPayload> {\n\t\treturn this.get(`${this.host}${GET_MARKETS}`, {\n\t\t\tparams: { next_cursor },\n\t\t});\n\t}\n\n\tpublic async getMarket(conditionID: string): Promise<any> {\n\t\treturn this.get(`${this.host}${GET_MARKET}${conditionID}`);\n\t}\n\n\tpublic async getClobMarketInfo(conditionID: string): Promise<MarketDetails> {\n\t\tconst result: MarketDetails = await this.get(\n\t\t\t`${this.host}${GET_CLOB_MARKET}${conditionID}`,\n\t\t);\n\n\t\tif (!result?.t) {\n\t\t\tthrow new Error(`failed to fetch market info for condition id ${conditionID}`);\n\t\t}\n\n\t\tfor (const token of result.t) {\n\t\t\tif (!token) continue;\n\t\t\tconst tokenId = token.t;\n\n\t\t\tthis.tokenConditionMap[tokenId] = conditionID;\n\t\t\tthis.tickSizes[tokenId] = result.mts.toString() as TickSize;\n\t\t\tthis.negRisk[tokenId] = result.nr ?? false;\n\n\t\t\tthis.feeInfos[tokenId] = {\n\t\t\t\trate: result.fd?.r ?? 0,\n\t\t\t\texponent: result.fd?.e ?? 0,\n\t\t\t};\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tpublic async getOrderBook(tokenID: string): Promise<OrderBookSummary> {\n\t\treturn this.get(`${this.host}${GET_ORDER_BOOK}`, {\n\t\t\tparams: { token_id: tokenID },\n\t\t});\n\t}\n\n\tpublic async getOrderBooks(params: BookParams[]): Promise<OrderBookSummary[]> {\n\t\treturn this.post(`${this.host}${GET_ORDER_BOOKS}`, {\n\t\t\tdata: params,\n\t\t});\n\t}\n\n\tpublic async getTickSize(tokenID: string): Promise<TickSize> {\n\t\tif (tokenID in this.tickSizes) {\n\t\t\treturn this.tickSizes[tokenID];\n\t\t}\n\n\t\tif (tokenID in this.tokenConditionMap) {\n\t\t\tawait this.getClobMarketInfo(this.tokenConditionMap[tokenID]);\n\t\t\treturn this.tickSizes[tokenID];\n\t\t}\n\n\t\tconst result = await this.get(`${this.host}${GET_TICK_SIZE}`, {\n\t\t\tparams: { token_id: tokenID },\n\t\t});\n\t\tthis.tickSizes[tokenID] = result.minimum_tick_size.toString() as TickSize;\n\n\t\treturn this.tickSizes[tokenID];\n\t}\n\n\tpublic async getNegRisk(tokenID: string): Promise<boolean> {\n\t\tif (tokenID in this.negRisk) {\n\t\t\treturn this.negRisk[tokenID];\n\t\t}\n\n\t\tif (tokenID in this.tokenConditionMap) {\n\t\t\tawait this.getClobMarketInfo(this.tokenConditionMap[tokenID]);\n\t\t\treturn this.negRisk[tokenID];\n\t\t}\n\n\t\tconst result = await this.get(`${this.host}${GET_NEG_RISK}`, {\n\t\t\tparams: { token_id: tokenID },\n\t\t});\n\t\tthis.negRisk[tokenID] = result.neg_risk as boolean;\n\n\t\treturn this.negRisk[tokenID];\n\t}\n\n\tpublic async getFeeRateBps(tokenID: string): Promise<number> {\n\t\tif (tokenID in this.feeRates) {\n\t\t\treturn this.feeRates[tokenID];\n\t\t}\n\n\t\tconst result = await this.get(`${this.host}${GET_FEE_RATE}`, {\n\t\t\tparams: { token_id: tokenID },\n\t\t});\n\t\tthis.feeRates[tokenID] = result.base_fee as number;\n\n\t\treturn this.feeRates[tokenID];\n\t}\n\n\tpublic async getFeeExponent(tokenID: string): Promise<number> {\n\t\tif (tokenID in this.feeInfos) {\n\t\t\treturn this.feeInfos[tokenID].exponent;\n\t\t}\n\n\t\tawait this._ensureMarketInfoCached(tokenID);\n\t\treturn this.feeInfos[tokenID].exponent;\n\t}\n\n\t/**\n\t * Calculates the hash for the given orderbook\n\t * @param orderbook\n\t * @returns\n\t */\n\tpublic async getOrderBookHash(orderbook: OrderBookSummary): Promise<string> {\n\t\treturn generateOrderBookSummaryHash(orderbook);\n\t}\n\n\tpublic async getMidpoint(tokenID: string): Promise<any> {\n\t\treturn this.get(`${this.host}${GET_MIDPOINT}`, {\n\t\t\tparams: { token_id: tokenID },\n\t\t});\n\t}\n\n\tpublic async getMidpoints(params: BookParams[]): Promise<any> {\n\t\treturn this.post(`${this.host}${GET_MIDPOINTS}`, {\n\t\t\tdata: params,\n\t\t});\n\t}\n\n\tpublic async getPrice(tokenID: string, side: string): Promise<any> {\n\t\treturn this.get(`${this.host}${GET_PRICE}`, {\n\t\t\tparams: { token_id: tokenID, side: side },\n\t\t});\n\t}\n\n\tpublic async getPrices(params: BookParams[]): Promise<any> {\n\t\treturn this.post(`${this.host}${GET_PRICES}`, {\n\t\t\tdata: params,\n\t\t});\n\t}\n\n\tpublic async getSpread(tokenID: string): Promise<any> {\n\t\treturn this.get(`${this.host}${GET_SPREAD}`, {\n\t\t\tparams: { token_id: tokenID },\n\t\t});\n\t}\n\n\tpublic async getSpreads(params: BookParams[]): Promise<any> {\n\t\treturn this.post(`${this.host}${GET_SPREADS}`, {\n\t\t\tdata: params,\n\t\t});\n\t}\n\n\tpublic async getLastTradePrice(tokenID: string): Promise<any> {\n\t\treturn this.get(`${this.host}${GET_LAST_TRADE_PRICE}`, {\n\t\t\tparams: { token_id: tokenID },\n\t\t});\n\t}\n\n\tpublic async getLastTradesPrices(params: BookParams[]): Promise<any> {\n\t\treturn this.post(`${this.host}${GET_LAST_TRADES_PRICES}`, {\n\t\t\tdata: params,\n\t\t});\n\t}\n\n\tpublic async getPricesHistory(params: PriceHistoryFilterParams): Promise<MarketPrice[]> {\n\t\tif (!params.interval && (params.startTs === undefined || params.endTs === undefined)) {\n\t\t\tthrow new Error(\"getPricesHistory requires either interval or both startTs and endTs\");\n\t\t}\n\t\treturn this.get(`${this.host}${GET_PRICES_HISTORY}`, {\n\t\t\tparams,\n\t\t});\n\t}\n\n\t// L1 Authed\n\n\t/**\n\t * Creates a new API key for a user\n\t * @param nonce\n\t * @returns ApiKeyCreds\n\t */\n\tpublic async createApiKey(nonce?: number): Promise<ApiKeyCreds> {\n\t\tthis.canL1Auth();\n\n\t\tconst endpoint = `${this.host}${CREATE_API_KEY}`;\n\t\tconst headers = await createL1Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.chainId,\n\t\t\tnonce,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\treturn await this.post(endpoint, { headers }).then((apiKeyRaw: ApiKeyRaw) => {\n\t\t\tconst apiKey: ApiKeyCreds = {\n\t\t\t\tkey: apiKeyRaw.apiKey,\n\t\t\t\tsecret: apiKeyRaw.secret,\n\t\t\t\tpassphrase: apiKeyRaw.passphrase,\n\t\t\t};\n\t\t\treturn apiKey;\n\t\t});\n\t}\n\n\t/**\n\t * Derives an existing API key for a user\n\t * @param nonce\n\t * @returns ApiKeyCreds\n\t */\n\tpublic async deriveApiKey(nonce?: number): Promise<ApiKeyCreds> {\n\t\tthis.canL1Auth();\n\n\t\tconst endpoint = `${this.host}${DERIVE_API_KEY}`;\n\t\tconst headers = await createL1Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.chainId,\n\t\t\tnonce,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\treturn await this.get(endpoint, { headers }).then((apiKeyRaw: ApiKeyRaw) => {\n\t\t\tconst apiKey: ApiKeyCreds = {\n\t\t\t\tkey: apiKeyRaw.apiKey,\n\t\t\t\tsecret: apiKeyRaw.secret,\n\t\t\t\tpassphrase: apiKeyRaw.passphrase,\n\t\t\t};\n\t\t\treturn apiKey;\n\t\t});\n\t}\n\n\tpublic async createOrDeriveApiKey(nonce?: number): Promise<ApiKeyCreds> {\n\t\treturn this.createApiKey(nonce).then(response => {\n\t\t\tif (!response.key) {\n\t\t\t\treturn this.deriveApiKey(nonce);\n\t\t\t}\n\t\t\treturn response;\n\t\t});\n\t}\n\n\tpublic async getApiKeys(): Promise<ApiKeysResponse> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = GET_API_KEYS;\n\t\tconst headerArgs = {\n\t\t\tmethod: GET,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\treturn this.get(`${this.host}${endpoint}`, { headers });\n\t}\n\n\tpublic async getClosedOnlyMode(): Promise<BanStatus> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = CLOSED_ONLY;\n\t\tconst headerArgs = {\n\t\t\tmethod: GET,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\treturn this.get(`${this.host}${endpoint}`, { headers });\n\t}\n\n\tpublic async deleteApiKey(): Promise<any> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = DELETE_API_KEY;\n\t\tconst headerArgs = {\n\t\t\tmethod: DELETE,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\treturn this.del(`${this.host}${endpoint}`, { headers });\n\t}\n\n\tpublic async createReadonlyApiKey(): Promise<ReadonlyApiKeyResponse> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = CREATE_READONLY_API_KEY;\n\t\tconst headerArgs = {\n\t\t\tmethod: POST,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\treturn this.post(`${this.host}${endpoint}`, { headers });\n\t}\n\n\tpublic async getReadonlyApiKeys(): Promise<string[]> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = GET_READONLY_API_KEYS;\n\t\tconst headerArgs = {\n\t\t\tmethod: GET,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\treturn this.get(`${this.host}${endpoint}`, { headers });\n\t}\n\n\tpublic async deleteReadonlyApiKey(key: string): Promise<boolean> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = DELETE_READONLY_API_KEY;\n\t\tconst payload = { key };\n\t\tconst headerArgs = {\n\t\t\tmethod: DELETE,\n\t\t\trequestPath: endpoint,\n\t\t\tbody: JSON.stringify(payload),\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\treturn this.del(`${this.host}${endpoint}`, { headers, data: payload });\n\t}\n\n\tpublic async getOrder(orderID: string): Promise<OpenOrder> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = `${GET_ORDER}${orderID}`;\n\t\tconst headerArgs = {\n\t\t\tmethod: GET,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\treturn this.get(`${this.host}${endpoint}`, { headers });\n\t}\n\n\tpublic async getTrades(\n\t\tparams?: TradeParams,\n\t\tonly_first_page = false,\n\t\tnext_cursor?: string,\n\t): Promise<Trade[]> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = GET_TRADES;\n\t\tconst headerArgs = {\n\t\t\tmethod: GET,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\tlet results: Trade[] = [];\n\t\tnext_cursor = next_cursor || INITIAL_CURSOR;\n\t\twhile (next_cursor !== END_CURSOR && (next_cursor === INITIAL_CURSOR || !only_first_page)) {\n\t\t\tconst _params: any = {\n\t\t\t\t...params,\n\t\t\t\tnext_cursor,\n\t\t\t};\n\t\t\tconst response = await this.get(`${this.host}${endpoint}`, {\n\t\t\t\theaders,\n\t\t\t\tparams: _params,\n\t\t\t});\n\t\t\tnext_cursor = response.next_cursor;\n\t\t\tresults = [...results, ...response.data];\n\t\t}\n\t\treturn results;\n\t}\n\n\tpublic async getTradesPaginated(\n\t\tparams?: TradeParams,\n\t\tnext_cursor?: string,\n\t): Promise<TradesPaginatedResponse> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = GET_TRADES;\n\t\tconst headerArgs = {\n\t\t\tmethod: GET,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\tnext_cursor = next_cursor || INITIAL_CURSOR;\n\n\t\tconst _params: any = { ...params, next_cursor };\n\n\t\tconst {\n\t\t\tdata,\n\t\t\t...rest\n\t\t}: { data: Trade[]; next_cursor: string; limit: number; count: number } = await this.get(\n\t\t\t`${this.host}${endpoint}`,\n\t\t\t{ headers, params: _params },\n\t\t);\n\n\t\treturn { trades: Array.isArray(data) ? [...data] : [], ...rest };\n\t}\n\n\tpublic async getBuilderTrades(\n\t\tparams: BuilderTradeParams,\n\t\tnext_cursor?: string,\n\t): Promise<BuilderTradesResponse> {\n\t\tif (!params.builder_code || params.builder_code === bytes32Zero) {\n\t\t\tthrow new Error(\"builderCode is required and cannot be zero\");\n\t\t}\n\n\t\tconst _params: any = { ...params, next_cursor: next_cursor || INITIAL_CURSOR };\n\n\t\tconst {\n\t\t\tdata,\n\t\t\t...rest\n\t\t}: { data: BuilderTrade[]; next_cursor: string; limit: number; count: number } =\n\t\t\tawait this.get(`${this.host}${GET_BUILDER_TRADES}`, { params: _params });\n\n\t\treturn { trades: Array.isArray(data) ? [...data] : [], ...rest };\n\t}\n\n\tpublic async getNotifications(): Promise<Notification[]> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = GET_NOTIFICATIONS;\n\t\tconst headerArgs = {\n\t\t\tmethod: GET,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\treturn this.get(`${this.host}${endpoint}`, {\n\t\t\theaders,\n\t\t\tparams: { signature_type: this.orderBuilder.signatureType },\n\t\t});\n\t}\n\n\tpublic async dropNotifications(params?: DropNotificationParams): Promise<void> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = DROP_NOTIFICATIONS;\n\t\tconst l2HeaderArgs = {\n\t\t\tmethod: DELETE,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\tl2HeaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\treturn this.del(`${this.host}${endpoint}`, {\n\t\t\theaders,\n\t\t\tparams: parseDropNotificationParams(params),\n\t\t});\n\t}\n\n\tpublic async getBalanceAllowance(\n\t\tparams?: BalanceAllowanceParams,\n\t): Promise<BalanceAllowanceResponse> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = GET_BALANCE_ALLOWANCE;\n\t\tconst headerArgs = {\n\t\t\tmethod: GET,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\tconst _params = {\n\t\t\t...params,\n\t\t\tsignature_type: this.orderBuilder.signatureType,\n\t\t};\n\n\t\treturn this.get(`${this.host}${endpoint}`, { headers, params: _params });\n\t}\n\n\tpublic async updateBalanceAllowance(params?: BalanceAllowanceParams): Promise<void> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = UPDATE_BALANCE_ALLOWANCE;\n\t\tconst headerArgs = {\n\t\t\tmethod: GET,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\tconst _params = {\n\t\t\t...params,\n\t\t\tsignature_type: this.orderBuilder.signatureType,\n\t\t};\n\n\t\treturn this.get(`${this.host}${endpoint}`, { headers, params: _params });\n\t}\n\n\tpublic async createOrder(\n\t\tuserOrder: UserOrderV1 | UserOrderV2,\n\t\toptions?: Partial<CreateOrderOptions>,\n\t): Promise<SignedOrder> {\n\t\tthis.canL1Auth();\n\n\t\tconst orderToSign = { ...userOrder };\n\n\t\tif (this.builderConfig?.builderCode && !orderToSign.builderCode) {\n\t\t\torderToSign.builderCode = this.builderConfig.builderCode;\n\t\t}\n\n\t\tconst { tokenID } = orderToSign;\n\n\t\tconst tickSize = await this._resolveTickSize(tokenID, options?.tickSize);\n\n\t\tif (!priceValid(orderToSign.price, tickSize)) {\n\t\t\tthrow new Error(\n\t\t\t\t`invalid price (${orderToSign.price}), min: ${parseFloat(tickSize)} - max: ${\n\t\t\t\t\t1 - parseFloat(tickSize)\n\t\t\t\t}`,\n\t\t\t);\n\t\t}\n\t\torderToSign.price = roundNormal(orderToSign.price, ROUNDING_CONFIG[tickSize].price);\n\n\t\tconst version = options?.version ?? (await this.resolveVersion());\n\n\t\tif (\n\t\t\tversion !== 1 &&\n\t\t\torderToSign.side === Side.BUY &&\n\t\t\t\"userUSDCBalance\" in orderToSign &&\n\t\t\torderToSign.userUSDCBalance !== undefined\n\t\t) {\n\t\t\tconst adjustedAmount = await this.adjustBuyAmountForBalance(\n\t\t\t\ttokenID,\n\t\t\t\torderToSign.size * orderToSign.price,\n\t\t\t\torderToSign.price,\n\t\t\t\torderToSign.userUSDCBalance,\n\t\t\t\torderToSign.builderCode,\n\t\t\t);\n\t\t\torderToSign.size = adjustedAmount / orderToSign.price;\n\t\t}\n\n\t\tconst negRisk = options?.negRisk ?? (await this.getNegRisk(tokenID));\n\n\t\tif (version === 1) {\n\t\t\tconst userFeeRateBps =\n\t\t\t\t\"feeRateBps\" in orderToSign ? (orderToSign as UserOrderV1).feeRateBps : undefined;\n\t\t\tconst feeRateBps = await this._resolveFeeRateBps(tokenID, userFeeRateBps);\n\t\t\t(orderToSign as UserOrderV1).feeRateBps = feeRateBps;\n\t\t}\n\n\t\treturn this.orderBuilder.buildOrder(\n\t\t\torderToSign,\n\t\t\t{\n\t\t\t\ttickSize,\n\t\t\t\tnegRisk,\n\t\t\t},\n\t\t\tversion,\n\t\t);\n\t}\n\n\tpublic async createMarketOrder(\n\t\tuserMarketOrder: UserMarketOrderV1 | UserMarketOrderV2,\n\t\toptions?: Partial<CreateOrderOptions>,\n\t): Promise<SignedOrder> {\n\t\tthis.canL1Auth();\n\n\t\tconst { tokenID } = userMarketOrder;\n\n\t\tawait this._ensureMarketInfoCached(tokenID);\n\n\t\tconst tickSize = await this._resolveTickSize(tokenID, options?.tickSize);\n\n\t\tif (!userMarketOrder.price) {\n\t\t\tuserMarketOrder.price = await this.calculateMarketPrice(\n\t\t\t\ttokenID,\n\t\t\t\tuserMarketOrder.side,\n\t\t\t\tuserMarketOrder.amount,\n\t\t\t\tuserMarketOrder.orderType,\n\t\t\t);\n\t\t}\n\n\t\tif (!priceValid(userMarketOrder.price, tickSize)) {\n\t\t\tthrow new Error(\n\t\t\t\t`invalid price (${userMarketOrder.price}), min: ${parseFloat(tickSize)} - max: ${\n\t\t\t\t\t1 - parseFloat(tickSize)\n\t\t\t\t}`,\n\t\t\t);\n\t\t}\n\n\t\tconst orderToSign = { ...userMarketOrder };\n\n\t\tif (this.builderConfig?.builderCode && !orderToSign.builderCode) {\n\t\t\torderToSign.builderCode = this.builderConfig.builderCode;\n\t\t}\n\n\t\tawait this.ensureBuilderFeeRateCached(orderToSign.builderCode);\n\n\t\tif (\n\t\t\torderToSign.side === Side.BUY &&\n\t\t\t\"userUSDCBalance\" in orderToSign &&\n\t\t\torderToSign.userUSDCBalance !== undefined\n\t\t) {\n\t\t\t// biome-ignore lint/style/noNonNullAssertion: price is validated above\n\t\t\tconst price = orderToSign.price!;\n\t\t\torderToSign.amount = await this.adjustBuyAmountForBalance(\n\t\t\t\ttokenID,\n\t\t\t\torderToSign.amount,\n\t\t\t\tprice,\n\t\t\t\torderToSign.userUSDCBalance,\n\t\t\t\torderToSign.builderCode,\n\t\t\t);\n\t\t}\n\n\t\tconst negRisk = options?.negRisk ?? (await this.getNegRisk(tokenID));\n\t\tconst version = options?.version ?? (await this.resolveVersion());\n\n\t\tif (version === 1) {\n\t\t\tconst userFeeRateBps =\n\t\t\t\t\"feeRateBps\" in orderToSign\n\t\t\t\t\t? (orderToSign as UserMarketOrderV1).feeRateBps\n\t\t\t\t\t: undefined;\n\t\t\tconst feeRateBps = await this._resolveFeeRateBps(tokenID, userFeeRateBps);\n\t\t\t(orderToSign as UserMarketOrderV1).feeRateBps = feeRateBps;\n\t\t}\n\n\t\treturn this.orderBuilder.buildMarketOrder(\n\t\t\torderToSign,\n\t\t\t{\n\t\t\t\ttickSize,\n\t\t\t\tnegRisk,\n\t\t\t},\n\t\t\tversion,\n\t\t);\n\t}\n\n\tpublic async createExchangeV3OrderFromAmounts(\n\t\tuserOrder: ExchangeV3OrderAmounts,\n\t): Promise<SignedOrder> {\n\t\tthis.canL1Auth();\n\n\t\tconst orderToSign = { ...userOrder };\n\t\tif (this.builderConfig?.builderCode && !orderToSign.builderCode) {\n\t\t\torderToSign.builderCode = this.builderConfig.builderCode;\n\t\t}\n\n\t\treturn this.orderBuilder.buildExchangeV3OrderFromAmounts(orderToSign);\n\t}\n\n\tpublic async createAndPostOrder<T extends OrderType.GTC | OrderType.GTD = OrderType.GTC>(\n\t\tuserOrder: UserOrderV1 | UserOrderV2,\n\t\toptions?: Partial<CreateOrderOptions>,\n\t\torderType: T = OrderType.GTC as T,\n\t\tpostOnly = false,\n\t\tdeferExec = false,\n\t): Promise<OrderResponse> {\n\t\tlet postOrderResponse: OrderResponse | undefined;\n\n\t\tawait this._retryOnVersionUpdate(async () => {\n\t\t\tconst order = await this.createOrder(userOrder, options);\n\t\t\tpostOrderResponse = await this.postOrder(order, orderType, postOnly, deferExec);\n\t\t});\n\n\t\treturn postOrderResponse as OrderResponse;\n\t}\n\n\tpublic async createAndPostMarketOrder<T extends OrderType.FOK | OrderType.FAK = OrderType.FOK>(\n\t\tuserMarketOrder: UserMarketOrderV1 | UserMarketOrderV2,\n\t\toptions?: Partial<CreateOrderOptions>,\n\t\torderType: T = OrderType.FOK as T,\n\t\tdeferExec = false,\n\t): Promise<OrderResponse> {\n\t\tlet postOrderMarketResponse: OrderResponse | undefined;\n\n\t\tawait this._retryOnVersionUpdate(async () => {\n\t\t\tconst order = await this.createMarketOrder(userMarketOrder, options);\n\t\t\tpostOrderMarketResponse = await this.postOrder(order, orderType, false, deferExec);\n\t\t});\n\n\t\treturn postOrderMarketResponse as OrderResponse;\n\t}\n\n\tpublic async getOpenOrders(\n\t\tparams?: OpenOrderParams,\n\t\tonly_first_page = false,\n\t\tnext_cursor?: string,\n\t): Promise<OpenOrdersResponse> {\n\t\tthis.canL2Auth();\n\t\tconst endpoint = GET_OPEN_ORDERS;\n\t\tconst l2HeaderArgs = {\n\t\t\tmethod: GET,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\tl2HeaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\tlet results: OpenOrder[] = [];\n\t\tnext_cursor = next_cursor || INITIAL_CURSOR;\n\t\twhile (next_cursor !== END_CURSOR && (next_cursor === INITIAL_CURSOR || !only_first_page)) {\n\t\t\tconst _params: any = {\n\t\t\t\t...params,\n\t\t\t\tnext_cursor,\n\t\t\t};\n\t\t\tconst response = await this.get(`${this.host}${endpoint}`, {\n\t\t\t\theaders,\n\t\t\t\tparams: _params,\n\t\t\t});\n\t\t\tnext_cursor = response.next_cursor;\n\t\t\tresults = [...results, ...response.data];\n\t\t}\n\t\treturn results;\n\t}\n\n\tpublic async getPreMigrationOrders(\n\t\tonly_first_page = false,\n\t\tnext_cursor?: string,\n\t): Promise<PreMigrationOrdersResponse> {\n\t\tthis.canL2Auth();\n\t\tconst endpoint = GET_PRE_MIGRATION_ORDERS;\n\t\tconst l2HeaderArgs = {\n\t\t\tmethod: GET,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\tl2HeaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\tlet results: PreMigrationOrder[] = [];\n\t\tnext_cursor = next_cursor || INITIAL_CURSOR;\n\t\twhile (next_cursor !== END_CURSOR && (next_cursor === INITIAL_CURSOR || !only_first_page)) {\n\t\t\tconst _params: any = { next_cursor };\n\t\t\tconst response = await this.get(`${this.host}${endpoint}`, {\n\t\t\t\theaders,\n\t\t\t\tparams: _params,\n\t\t\t});\n\t\t\tnext_cursor = response.next_cursor;\n\t\t\tresults = [...results, ...response.data];\n\t\t}\n\t\treturn results;\n\t}\n\n\t/**\n\t * Posts an order to the CLOB.\n\t *\n\t * When the order matches, the response carries the settlement transaction\n\t * hashes of its fills in `transactionsHashes`, resolved on a best-effort\n\t * basis. If a hash is not available yet, the fill's trade can be followed\n\t * via `tradeIDs`.\n\t */\n\tpublic async postOrder<T extends OrderType = OrderType.GTC>(\n\t\torder: SignedOrder,\n\t\torderType: T = OrderType.GTC as T,\n\t\tpostOnly = false,\n\t\tdeferExec = false,\n\t): Promise<OrderResponse> {\n\t\tthis.canL2Auth();\n\t\tif (postOnly && (orderType === OrderType.FOK || orderType === OrderType.FAK)) {\n\t\t\tthrow new Error(\"postOnly is not supported for FOK/FAK orders\");\n\t\t}\n\t\tconst endpoint = POST_ORDER;\n\n\t\tconst orderPayload = isV2Order(order)\n\t\t\t? orderToJsonV2(order, this.creds?.key || \"\", orderType, postOnly, deferExec)\n\t\t\t: orderToJsonV1(order, this.creds?.key || \"\", orderType, postOnly, deferExec);\n\n\t\tconst l2HeaderArgs = {\n\t\t\tmethod: POST,\n\t\t\trequestPath: endpoint,\n\t\t\tbody: JSON.stringify(orderPayload),\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\tl2HeaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\tconst res = await this.post(\n\t\t\t`${this.host}${endpoint}`,\n\t\t\t{\n\t\t\t\theaders,\n\t\t\t\tdata: orderPayload,\n\t\t\t},\n\t\t\ttrue,\n\t\t);\n\n\t\tif (this._isOrderVersionMismatch(res)) await this.resolveVersion(true);\n\n\t\tconst response: OrderResponse = this.throwIfError(res);\n\t\tif (deferExec) {\n\t\t\treturn response;\n\t\t}\n\t\treturn this.resolveTransactionsHashes(response);\n\t}\n\n\tpublic async postOrders(\n\t\targs: PostOrdersArgs[],\n\t\tpostOnly = false,\n\t\tdeferExec = false,\n\t): Promise<OrderResponse[]> {\n\t\tthis.canL2Auth();\n\t\tif (\n\t\t\tpostOnly &&\n\t\t\targs.some(({ orderType }) => orderType === OrderType.FOK || orderType === OrderType.FAK)\n\t\t) {\n\t\t\tthrow new Error(\"postOnly is not supported for FOK/FAK orders\");\n\t\t}\n\t\tconst endpoint = POST_ORDERS;\n\t\tconst ordersPayload: (NewOrderV2<any> | NewOrderV1<any>)[] = [];\n\t\tfor (const arg of args) {\n\t\t\tconst { order, orderType } = arg;\n\t\t\t// Version-aware dispatch\n\t\t\tconst orderPayload = isV2Order(order)\n\t\t\t\t? orderToJsonV2(order, this.creds?.key || \"\", orderType, postOnly, deferExec)\n\t\t\t\t: orderToJsonV1(order, this.creds?.key || \"\", orderType, postOnly, deferExec);\n\t\t\tordersPayload.push(orderPayload);\n\t\t}\n\n\t\tconst l2HeaderArgs = {\n\t\t\tmethod: POST,\n\t\t\trequestPath: endpoint,\n\t\t\tbody: JSON.stringify(ordersPayload),\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\tl2HeaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\tconst res = await this.post(\n\t\t\t`${this.host}${endpoint}`,\n\t\t\t{\n\t\t\t\theaders,\n\t\t\t\tdata: ordersPayload,\n\t\t\t},\n\t\t\ttrue,\n\t\t);\n\n\t\tif (this._isOrderVersionMismatch(res)) await this.resolveVersion(true);\n\n\t\tconst responses: OrderResponse[] = this.throwIfError(res);\n\t\tif (deferExec || !Array.isArray(responses)) {\n\t\t\treturn responses;\n\t\t}\n\t\treturn Promise.all(responses.map(response => this.resolveTransactionsHashes(response)));\n\t}\n\n\t// Polls the given trades until every one reaches a terminal execution\n\t// outcome (it carries a settlement transaction hash or its status is\n\t// FAILED) or the polling window elapses. Best-effort: returns whatever\n\t// trades resolved in time and never throws.\n\tprivate async waitForResolvedTrades(tradeIDs: string[]): Promise<Trade[]> {\n\t\tconst ids = [...new Set(tradeIDs.filter(id => id.length > 0))];\n\t\tif (ids.length === 0) return [];\n\n\t\tconst resolved = new Map<string, Trade>();\n\t\tconst requestedIDs = new Set(ids);\n\t\tconst deadline = Date.now() + RESOLVE_TRADES_TIMEOUT_MS;\n\n\t\tfor (;;) {\n\t\t\tconst pending = ids.filter(id => !resolved.has(id));\n\t\t\t// A failed poll must never reject a successfully posted order;\n\t\t\t// treat it as \"not resolved yet\" and let the loop retry.\n\t\t\tconst pages = await Promise.all(\n\t\t\t\tpending.map(id => this.getTrades({ id }, true).catch(() => [] as Trade[])),\n\t\t\t);\n\t\t\tfor (const trades of pages) {\n\t\t\t\tfor (const trade of trades) {\n\t\t\t\t\tif (isTradeResolved(trade) && requestedIDs.has(trade.id)) {\n\t\t\t\t\t\tresolved.set(trade.id, trade);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (ids.every(id => resolved.has(id)) || Date.now() >= deadline) {\n\t\t\t\treturn ids\n\t\t\t\t\t.map(id => resolved.get(id))\n\t\t\t\t\t.filter((trade): trade is Trade => trade !== undefined);\n\t\t\t}\n\t\t\tawait sleep(RESOLVE_TRADES_POLL_INTERVAL_MS);\n\t\t}\n\t}\n\n\t// Fills `transactionsHashes` on an order response whose trades executed\n\t// asynchronously (the server returned `tradeIDs` without hashes), by\n\t// polling the trades until they resolve. Best-effort: on timeout the\n\t// response is returned with whatever hashes resolved, which may be none.\n\t// Trades that failed execution never contribute a hash.\n\tprivate async resolveTransactionsHashes(response: OrderResponse): Promise<OrderResponse> {\n\t\tif (response.transactionsHashes && response.transactionsHashes.length > 0) {\n\t\t\treturn response;\n\t\t}\n\n\t\tconst tradeIDs = response.tradeIDs ?? [];\n\t\tif (tradeIDs.length === 0) {\n\t\t\treturn response;\n\t\t}\n\n\t\tconst resolvedTrades = await this.waitForResolvedTrades(tradeIDs);\n\t\tconst transactionsHashes = resolvedTrades\n\t\t\t.filter(trade => trade.status.toUpperCase() !== FAILED_TRADE_STATUS)\n\t\t\t.map(trade => trade.transaction_hash)\n\t\t\t.filter((hash): hash is string => Boolean(hash));\n\n\t\tif (transactionsHashes.length === 0) {\n\t\t\treturn response;\n\t\t}\n\t\treturn { ...response, transactionsHashes };\n\t}\n\n\tpublic async cancelOrder(payload: OrderPayload): Promise<any> {\n\t\tthis.canL2Auth();\n\t\tconst endpoint = CANCEL_ORDER;\n\t\tconst l2HeaderArgs = {\n\t\t\tmethod: DELETE,\n\t\t\trequestPath: endpoint,\n\t\t\tbody: JSON.stringify(payload),\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\tl2HeaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\t\treturn this.del(`${this.host}${endpoint}`, { headers, data: payload });\n\t}\n\n\tpublic async cancelOrders(ordersHashes: string[]): Promise<any> {\n\t\tthis.canL2Auth();\n\t\tconst endpoint = CANCEL_ORDERS;\n\t\tconst l2HeaderArgs = {\n\t\t\tmethod: DELETE,\n\t\t\trequestPath: endpoint,\n\t\t\tbody: JSON.stringify(ordersHashes),\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\tl2HeaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\t\treturn this.del(`${this.host}${endpoint}`, { headers, data: ordersHashes });\n\t}\n\n\tpublic async cancelAll(): Promise<any> {\n\t\tthis.canL2Auth();\n\t\tconst endpoint = CANCEL_ALL;\n\t\tconst l2HeaderArgs = {\n\t\t\tmethod: DELETE,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\tl2HeaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\t\treturn this.del(`${this.host}${endpoint}`, { headers });\n\t}\n\n\tpublic async cancelMarketOrders(payload: OrderMarketCancelParams): Promise<any> {\n\t\tthis.canL2Auth();\n\t\tconst endpoint = CANCEL_MARKET_ORDERS;\n\t\tconst l2HeaderArgs = {\n\t\t\tmethod: DELETE,\n\t\t\trequestPath: endpoint,\n\t\t\tbody: JSON.stringify(payload),\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\tl2HeaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\t\treturn this.del(`${this.host}${endpoint}`, { headers, data: payload });\n\t}\n\n\tpublic async isOrderScoring(params?: OrderScoringParams): Promise<OrderScoring> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = IS_ORDER_SCORING;\n\t\tconst headerArgs = {\n\t\t\tmethod: GET,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\treturn this.get(`${this.host}${endpoint}`, { headers, params });\n\t}\n\n\tpublic async areOrdersScoring(params?: OrdersScoringParams): Promise<OrdersScoring> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = ARE_ORDERS_SCORING;\n\t\tconst payload = JSON.stringify(params?.orderIds);\n\t\tconst headerArgs = {\n\t\t\tmethod: POST,\n\t\t\trequestPath: endpoint,\n\t\t\tbody: payload,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\treturn this.post(`${this.host}${endpoint}`, {\n\t\t\theaders,\n\t\t\tdata: payload,\n\t\t});\n\t}\n\n\t// Rewards\n\tpublic async getEarningsForUserForDay(date: string): Promise<UserEarning[]> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = GET_EARNINGS_FOR_USER_FOR_DAY;\n\t\tconst headerArgs = {\n\t\t\tmethod: GET,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\tlet results: UserEarning[] = [];\n\t\tlet next_cursor = INITIAL_CURSOR;\n\t\twhile (next_cursor !== END_CURSOR) {\n\t\t\tconst params = {\n\t\t\t\tdate,\n\t\t\t\tsignature_type: this.orderBuilder.signatureType,\n\t\t\t\tnext_cursor,\n\t\t\t};\n\n\t\t\tconst response = await this.get(`${this.host}${endpoint}`, {\n\t\t\t\theaders,\n\t\t\t\tparams,\n\t\t\t});\n\t\t\tnext_cursor = response.next_cursor;\n\t\t\tresults = [...results, ...response.data];\n\t\t}\n\t\treturn results;\n\t}\n\n\tpublic async getTotalEarningsForUserForDay(date: string): Promise<TotalUserEarning[]> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = GET_TOTAL_EARNINGS_FOR_USER_FOR_DAY;\n\t\tconst headerArgs = {\n\t\t\tmethod: GET,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\tconst params = {\n\t\t\tdate,\n\t\t\tsignature_type: this.orderBuilder.signatureType,\n\t\t};\n\n\t\treturn await this.get(`${this.host}${endpoint}`, {\n\t\t\theaders,\n\t\t\tparams,\n\t\t});\n\t}\n\n\tpublic async getUserEarningsAndMarketsConfig(\n\t\tdate: string,\n\t\torder_by = \"\",\n\t\tposition = \"\",\n\t\tno_competition = false,\n\t): Promise<UserRewardsEarning[]> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = GET_REWARDS_EARNINGS_PERCENTAGES;\n\t\tconst headerArgs = {\n\t\t\tmethod: GET,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\tlet results: UserRewardsEarning[] = [];\n\t\tlet next_cursor = INITIAL_CURSOR;\n\t\twhile (next_cursor !== END_CURSOR) {\n\t\t\tconst params = {\n\t\t\t\tdate,\n\t\t\t\tsignature_type: this.orderBuilder.signatureType,\n\t\t\t\tnext_cursor,\n\t\t\t\torder_by,\n\t\t\t\tposition,\n\t\t\t\tno_competition,\n\t\t\t};\n\n\t\t\tconst response = await this.get(`${this.host}${endpoint}`, {\n\t\t\t\theaders,\n\t\t\t\tparams,\n\t\t\t});\n\t\t\tnext_cursor = response.next_cursor;\n\t\t\tresults = [...results, ...response.data];\n\t\t}\n\t\treturn results;\n\t}\n\n\tpublic async getRewardPercentages(): Promise<RewardsPercentages> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = GET_LIQUIDITY_REWARD_PERCENTAGES;\n\t\tconst headerArgs = {\n\t\t\tmethod: GET,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\tconst _params = {\n\t\t\tsignature_type: this.orderBuilder.signatureType,\n\t\t};\n\n\t\treturn this.get(`${this.host}${endpoint}`, { headers, params: _params });\n\t}\n\n\tpublic async getCurrentRewards(): Promise<MarketReward[]> {\n\t\tlet results: MarketReward[] = [];\n\t\tlet next_cursor = INITIAL_CURSOR;\n\t\twhile (next_cursor !== END_CURSOR) {\n\t\t\tconst response = await this.get(`${this.host}${GET_REWARDS_MARKETS_CURRENT}`, {\n\t\t\t\tparams: { next_cursor },\n\t\t\t});\n\t\t\tnext_cursor = response.next_cursor;\n\t\t\tresults = [...results, ...response.data];\n\t\t}\n\t\treturn results;\n\t}\n\n\tpublic async getRawRewardsForMarket(conditionId: string): Promise<MarketReward[]> {\n\t\tlet results: MarketReward[] = [];\n\t\tlet next_cursor = INITIAL_CURSOR;\n\t\twhile (next_cursor !== END_CURSOR) {\n\t\t\tconst response = await this.get(`${this.host}${GET_REWARDS_MARKETS}${conditionId}`, {\n\t\t\t\tparams: { next_cursor },\n\t\t\t});\n\t\t\tnext_cursor = response.next_cursor;\n\t\t\tresults = [...results, ...response.data];\n\t\t}\n\t\treturn results;\n\t}\n\n\tpublic async calculateMarketPrice(\n\t\ttokenID: string,\n\t\tside: Side,\n\t\tamount: number,\n\t\torderType: OrderType = OrderType.FOK,\n\t): Promise<number> {\n\t\tconst book = await this.getOrderBook(tokenID);\n\t\tif (!book) {\n\t\t\tthrow new Error(\"no orderbook\");\n\t\t}\n\t\tif (side === Side.BUY) {\n\t\t\tif (!book.asks) {\n\t\t\t\tthrow new Error(\"no match\");\n\t\t\t}\n\t\t\treturn calculateBuyMarketPrice(book.asks, amount, orderType);\n\t\t} else {\n\t\t\tif (!book.bids) {\n\t\t\t\tthrow new Error(\"no match\");\n\t\t\t}\n\t\t\treturn calculateSellMarketPrice(book.bids, amount, orderType);\n\t\t}\n\t}\n\n\tpublic async createBuilderApiKey(): Promise<BuilderApiKey> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = CREATE_BUILDER_API_KEY;\n\t\tconst headerArgs = {\n\t\t\tmethod: POST,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\treturn this.post(`${this.host}${endpoint}`, { headers });\n\t}\n\n\tpublic async getBuilderApiKeys(): Promise<BuilderApiKeyResponse[]> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = GET_BUILDER_API_KEYS;\n\t\tconst headerArgs = {\n\t\t\tmethod: GET,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\treturn this.get(`${this.host}${endpoint}`, { headers });\n\t}\n\n\tpublic async revokeBuilderApiKey(): Promise<any> {\n\t\tthis.canL2Auth();\n\n\t\tconst endpoint = REVOKE_BUILDER_API_KEY;\n\t\tconst headerArgs = {\n\t\t\tmethod: DELETE,\n\t\t\trequestPath: endpoint,\n\t\t};\n\n\t\tconst headers = await createL2Headers(\n\t\t\tthis.signer as ClobSigner,\n\t\t\tthis.creds as ApiKeyCreds,\n\t\t\theaderArgs,\n\t\t\tthis.useServerTime ? await this.getServerTime() : undefined,\n\t\t);\n\n\t\treturn this.del(`${this.host}${endpoint}`, { headers });\n\t}\n\n\tpublic async getMarketTradesEvents(conditionID: string): Promise<MarketTradeEvent[]> {\n\t\treturn this.get(`${this.host}${GET_MARKET_TRADES_EVENTS}${conditionID}`);\n\t}\n\n\tprivate canL1Auth(): void {\n\t\tif (this.signer === undefined) {\n\t\t\tthrow L1_AUTH_UNAVAILABLE_ERROR;\n\t\t}\n\t}\n\n\tprivate canL2Auth(): void {\n\t\tif (this.signer === undefined) {\n\t\t\tthrow L1_AUTH_UNAVAILABLE_ERROR;\n\t\t}\n\n\t\tif (this.creds === undefined) {\n\t\t\tthrow L2_AUTH_NOT_AVAILABLE;\n\t\t}\n\t}\n\n\tprivate isBuilderOrder(builderCode?: string): boolean {\n\t\treturn builderCode !== undefined && builderCode !== bytes32Zero;\n\t}\n\n\tprivate async getBuilderTakerFeeRate(builderCode?: string): Promise<number> {\n\t\tif (!this.isBuilderOrder(builderCode)) return 0;\n\n\t\tawait this.ensureBuilderFeeRateCached(builderCode);\n\t\treturn this.builderFeeRates[builderCode ?? \"\"]?.taker ?? 0;\n\t}\n\n\tprivate async adjustBuyAmountForBalance(\n\t\ttokenID: string,\n\t\tamount: number,\n\t\tprice: number,\n\t\tuserUSDCBalance: number,\n\t\tbuilderCode?: string,\n\t): Promise<number> {\n\t\tawait this._ensureMarketInfoCached(tokenID);\n\t\tconst builderTakerFeeRate = await this.getBuilderTakerFeeRate(builderCode);\n\n\t\treturn adjustBuyAmountForFees(\n\t\t\tamount,\n\t\t\tprice,\n\t\t\tuserUSDCBalance,\n\t\t\tthis.feeInfos[tokenID].rate,\n\t\t\tthis.feeInfos[tokenID].exponent,\n\t\t\tbuilderTakerFeeRate,\n\t\t\tthis.feeSlippage,\n\t\t);\n\t}\n\n\tprivate async _ensureMarketInfoCached(tokenID: string): Promise<void> {\n\t\tif (tokenID in this.feeInfos) return;\n\n\t\tif (!(tokenID in this.tokenConditionMap)) {\n\t\t\tconst result = await this.get(`${this.host}${GET_MARKET_BY_TOKEN}${tokenID}`);\n\t\t\tif (!result?.condition_id) {\n\t\t\t\tthrow new Error(`failed to resolve condition id for token ${tokenID}`);\n\t\t\t}\n\t\t\tthis.tokenConditionMap[tokenID] = result.condition_id as string;\n\t\t}\n\n\t\tawait this.getClobMarketInfo(this.tokenConditionMap[tokenID]);\n\t}\n\n\tprivate async ensureBuilderFeeRateCached(builderCode?: string): Promise<void> {\n\t\tif (!builderCode || builderCode === bytes32Zero) return;\n\t\tif (builderCode in this.builderFeeRates) return;\n\n\t\tconst result = await this.get(`${this.host}${GET_BUILDER_FEES}${builderCode}`);\n\t\tthis.builderFeeRates[builderCode] = {\n\t\t\tmaker: result.builder_maker_fee_rate_bps / BUILDER_FEES_BPS,\n\t\t\ttaker: result.builder_taker_fee_rate_bps / BUILDER_FEES_BPS,\n\t\t};\n\t}\n\n\tprivate async _resolveTickSize(tokenID: string, tickSize?: TickSize): Promise<TickSize> {\n\t\tconst minTickSize = await this.getTickSize(tokenID);\n\t\tif (tickSize) {\n\t\t\tif (isTickSizeSmaller(tickSize, minTickSize)) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t`invalid tick size (${tickSize}), minimum for the market is ${minTickSize}`,\n\t\t\t\t);\n\t\t\t}\n\t\t} else {\n\t\t\ttickSize = minTickSize;\n\t\t}\n\t\treturn tickSize;\n\t}\n\n\tprivate async _resolveFeeRateBps(tokenID: string, userFeeRateBps?: number): Promise<number> {\n\t\tconst marketFeeRateBps = await this.getFeeRateBps(tokenID);\n\t\tif (\n\t\t\tmarketFeeRateBps > 0 &&\n\t\t\tuserFeeRateBps !== undefined &&\n\t\t\tuserFeeRateBps !== marketFeeRateBps\n\t\t) {\n\t\t\tthrow new Error(\n\t\t\t\t`invalid user provided fee rate: ${userFeeRateBps}, fee rate for the market must be ${marketFeeRateBps}`,\n\t\t\t);\n\t\t}\n\t\treturn marketFeeRateBps;\n\t}\n\n\tprivate async resolveVersion(forceUpdate: boolean = false): Promise<number> {\n\t\t// Use cached version if given\n\t\tif (!forceUpdate && this.cachedVersion !== undefined) {\n\t\t\treturn this.cachedVersion;\n\t\t}\n\n\t\t// Query API and cache the result\n\t\tconst apiVersion = await this.getVersion();\n\t\tthis.cachedVersion = apiVersion;\n\n\t\treturn apiVersion;\n\t}\n\n\tprivate async _retryOnVersionUpdate(retryFunc: () => Promise<unknown>) {\n\t\tconst version = await this.resolveVersion();\n\n\t\tfor (let attempt = 0; attempt < 2; attempt++) {\n\t\t\tawait retryFunc();\n\n\t\t\t// no need to retry if version is unchanged\n\t\t\tif (version === (await this.resolveVersion())) break;\n\t\t}\n\t}\n\n\tprivate _isOrderVersionMismatch(resp: ClobErrorResponseBody) {\n\t\tconst error = resp?.error;\n\t\tif (!error) return false;\n\t\tconst message = typeof error === \"string\" ? error : JSON.stringify(error);\n\t\treturn message.includes(ORDER_VERSION_MISMATCH_ERROR);\n\t}\n\n\tprivate throwIfError(result: any): any {\n\t\tif (this.throwOnError && result && typeof result === \"object\" && \"error\" in result) {\n\t\t\tconst msg =\n\t\t\t\ttypeof result.error === \"string\" ? result.error : JSON.stringify(result.error);\n\t\t\tthrow new ApiError(msg, result.status, result);\n\t\t}\n\t\treturn result;\n\t}\n\n\t// http methods\n\tprivate async get(endpoint: string, options?: RequestOptions, skipThrow = false) {\n\t\tconst result = await get(endpoint, options);\n\t\treturn skipThrow ? result : this.throwIfError(result);\n\t}\n\n\tprivate async post(endpoint: string, options?: RequestOptions, skipThrow = false) {\n\t\tconst result = await post(endpoint, options, this.retryOnError);\n\t\treturn skipThrow ? result : this.throwIfError(result);\n\t}\n\n\tprivate async del(endpoint: string, options?: RequestOptions, skipThrow = false) {\n\t\tconst result = await del(endpoint, options);\n\t\treturn skipThrow ? result : this.throwIfError(result);\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAmKA,MAAM,4BAA4B;AAClC,MAAM,kCAAkC;AACxC,MAAM,sBAAsB;AAE5B,MAAM,SAAS,OAAe,IAAI,SAAQ,YAAW,WAAW,SAAS,GAAG,CAAC;AAI7E,MAAM,mBAAmB,UACxB,MAAM,OAAO,aAAa,KAAK,uBAC/B,QAAQ,MAAM,oBAAoB,MAAM,iBAAiB,SAAS,EAAE;AAiBrE,IAAa,aAAb,MAAwB;CACvB,AAAS;CAET,AAAS;CAGT,AAAS;CAGT,AAAS;CAET,AAAS;CAET,AAAS;CAET,AAAS;CAET,AAAS;CAGT,AAAS;CAET,AAAS;CAET,AAAiB;CAEjB,AAAS;CAET,AAAS;CAET,AAAS;CAET,AAAS;CAET,AAAQ;CAER,AAAS;CAET,AAAS;CAET,AAAS;CAET,YAAY,EACX,MACA,OACA,QACA,OACA,eACA,eACA,eACA,eACA,WACA,cACA,cACA,eACqB;AACrB,OAAK,OAAO,KAAK,SAAS,IAAI,GAAG,KAAK,MAAM,GAAG,GAAG,GAAG;AACrD,OAAK,UAAU;AAEf,MAAI,WAAW,OACd,MAAK,SAAS;AAEf,MAAI,UAAU,OACb,MAAK,QAAQ;AAEd,OAAK,eAAe,IAAI,aACvB,QACA,OACA,eACA,eACA,UACA;AACD,OAAK,gBAAgB,iBAAiB,gBAAgB;AACtD,OAAK,gBAAgB;AACrB,OAAK,YAAY,EAAE;AACnB,OAAK,UAAU,EAAE;AACjB,OAAK,WAAW,EAAE;AAClB,OAAK,WAAW,EAAE;AAClB,OAAK,kBAAkB,EAAE;AACzB,OAAK,oBAAoB,EAAE;AAC3B,OAAK,eAAe;AACpB,OAAK,eAAe;AACpB,OAAK,cAAc,eAAe;AAClC,sBAAoB,KAAK,YAAY;AACrC,OAAK,gBAAgB;AACrB,MAAI,kBAAkB,OACrB,MAAK,gBAAgB;;CAKvB,MAAa,QAAsB;AAClC,SAAO,KAAK,IAAI,GAAG,KAAK,OAAO,KAAK;;CAGrC,MAAa,cACZ,cAAc,IAC0C;AACxD,OAAK,WAAW;EAChB,MAAM,OAAO,KAAK,UAAU,EAAE,cAAc,aAAa,CAAC;EAC1D,MAAM,UAAU,MAAM,gBACrB,KAAK,QACL,KAAK,OACL;GAAE,QAAQ;GAAM,aAAa;GAAW;GAAM,EAC9C,KAAK,gBAAgB,MAAM,KAAK,eAAe,GAAG,OAClD;AACD,SAAO,KAAK,KAAK,GAAG,KAAK,OAAO,aAAa;GAC5C;GACA,MAAM,EAAE,cAAc,aAAa;GACnC,CAAC;;CAGH,MAAa,aAA8B;AAG1C,UAFiB,MAAM,KAAK,IAAI,GAAG,KAAK,KAAK,UAAU,GAEtC,WAAW;;CAG7B,MAAa,gBAAiC;AAC7C,SAAO,KAAK,IAAI,GAAG,KAAK,OAAO,OAAO;;CAGvC,MAAa,6BACZ,cAAc,gBACe;AAC7B,SAAO,KAAK,IAAI,GAAG,KAAK,OAAO,mCAAmC,EACjE,QAAQ,EAAE,aAAa,EACvB,CAAC;;CAGH,MAAa,mBAAmB,cAAc,gBAA4C;AACzF,SAAO,KAAK,IAAI,GAAG,KAAK,OAAO,wBAAwB,EACtD,QAAQ,EAAE,aAAa,EACvB,CAAC;;CAGH,MAAa,qBAAqB,cAAc,gBAA4C;AAC3F,SAAO,KAAK,IAAI,GAAG,KAAK,OAAO,0BAA0B,EACxD,QAAQ,EAAE,aAAa,EACvB,CAAC;;CAGH,MAAa,WAAW,cAAc,gBAA4C;AACjF,SAAO,KAAK,IAAI,GAAG,KAAK,OAAO,eAAe,EAC7C,QAAQ,EAAE,aAAa,EACvB,CAAC;;CAGH,MAAa,UAAU,aAAmC;AACzD,SAAO,KAAK,IAAI,GAAG,KAAK,OAAO,aAAa,cAAc;;CAG3D,MAAa,kBAAkB,aAA6C;EAC3E,MAAMA,SAAwB,MAAM,KAAK,IACxC,GAAG,KAAK,OAAO,kBAAkB,cACjC;AAED,MAAI,CAAC,QAAQ,EACZ,OAAM,IAAI,MAAM,gDAAgD,cAAc;AAG/E,OAAK,MAAM,SAAS,OAAO,GAAG;AAC7B,OAAI,CAAC,MAAO;GACZ,MAAM,UAAU,MAAM;AAEtB,QAAK,kBAAkB,WAAW;AAClC,QAAK,UAAU,WAAW,OAAO,IAAI,UAAU;AAC/C,QAAK,QAAQ,WAAW,OAAO,MAAM;AAErC,QAAK,SAAS,WAAW;IACxB,MAAM,OAAO,IAAI,KAAK;IACtB,UAAU,OAAO,IAAI,KAAK;IAC1B;;AAGF,SAAO;;CAGR,MAAa,aAAa,SAA4C;AACrE,SAAO,KAAK,IAAI,GAAG,KAAK,OAAO,kBAAkB,EAChD,QAAQ,EAAE,UAAU,SAAS,EAC7B,CAAC;;CAGH,MAAa,cAAc,QAAmD;AAC7E,SAAO,KAAK,KAAK,GAAG,KAAK,OAAO,mBAAmB,EAClD,MAAM,QACN,CAAC;;CAGH,MAAa,YAAY,SAAoC;AAC5D,MAAI,WAAW,KAAK,UACnB,QAAO,KAAK,UAAU;AAGvB,MAAI,WAAW,KAAK,mBAAmB;AACtC,SAAM,KAAK,kBAAkB,KAAK,kBAAkB,SAAS;AAC7D,UAAO,KAAK,UAAU;;EAGvB,MAAM,SAAS,MAAM,KAAK,IAAI,GAAG,KAAK,OAAO,iBAAiB,EAC7D,QAAQ,EAAE,UAAU,SAAS,EAC7B,CAAC;AACF,OAAK,UAAU,WAAW,OAAO,kBAAkB,UAAU;AAE7D,SAAO,KAAK,UAAU;;CAGvB,MAAa,WAAW,SAAmC;AAC1D,MAAI,WAAW,KAAK,QACnB,QAAO,KAAK,QAAQ;AAGrB,MAAI,WAAW,KAAK,mBAAmB;AACtC,SAAM,KAAK,kBAAkB,KAAK,kBAAkB,SAAS;AAC7D,UAAO,KAAK,QAAQ;;EAGrB,MAAM,SAAS,MAAM,KAAK,IAAI,GAAG,KAAK,OAAO,gBAAgB,EAC5D,QAAQ,EAAE,UAAU,SAAS,EAC7B,CAAC;AACF,OAAK,QAAQ,WAAW,OAAO;AAE/B,SAAO,KAAK,QAAQ;;CAGrB,MAAa,cAAc,SAAkC;AAC5D,MAAI,WAAW,KAAK,SACnB,QAAO,KAAK,SAAS;EAGtB,MAAM,SAAS,MAAM,KAAK,IAAI,GAAG,KAAK,OAAO,gBAAgB,EAC5D,QAAQ,EAAE,UAAU,SAAS,EAC7B,CAAC;AACF,OAAK,SAAS,WAAW,OAAO;AAEhC,SAAO,KAAK,SAAS;;CAGtB,MAAa,eAAe,SAAkC;AAC7D,MAAI,WAAW,KAAK,SACnB,QAAO,KAAK,SAAS,SAAS;AAG/B,QAAM,KAAK,wBAAwB,QAAQ;AAC3C,SAAO,KAAK,SAAS,SAAS;;;;;;;CAQ/B,MAAa,iBAAiB,WAA8C;AAC3E,SAAO,6BAA6B,UAAU;;CAG/C,MAAa,YAAY,SAA+B;AACvD,SAAO,KAAK,IAAI,GAAG,KAAK,OAAO,gBAAgB,EAC9C,QAAQ,EAAE,UAAU,SAAS,EAC7B,CAAC;;CAGH,MAAa,aAAa,QAAoC;AAC7D,SAAO,KAAK,KAAK,GAAG,KAAK,OAAO,iBAAiB,EAChD,MAAM,QACN,CAAC;;CAGH,MAAa,SAAS,SAAiB,MAA4B;AAClE,SAAO,KAAK,IAAI,GAAG,KAAK,OAAO,aAAa,EAC3C,QAAQ;GAAE,UAAU;GAAe;GAAM,EACzC,CAAC;;CAGH,MAAa,UAAU,QAAoC;AAC1D,SAAO,KAAK,KAAK,GAAG,KAAK,OAAO,cAAc,EAC7C,MAAM,QACN,CAAC;;CAGH,MAAa,UAAU,SAA+B;AACrD,SAAO,KAAK,IAAI,GAAG,KAAK,OAAO,cAAc,EAC5C,QAAQ,EAAE,UAAU,SAAS,EAC7B,CAAC;;CAGH,MAAa,WAAW,QAAoC;AAC3D,SAAO,KAAK,KAAK,GAAG,KAAK,OAAO,eAAe,EAC9C,MAAM,QACN,CAAC;;CAGH,MAAa,kBAAkB,SAA+B;AAC7D,SAAO,KAAK,IAAI,GAAG,KAAK,OAAO,wBAAwB,EACtD,QAAQ,EAAE,UAAU,SAAS,EAC7B,CAAC;;CAGH,MAAa,oBAAoB,QAAoC;AACpE,SAAO,KAAK,KAAK,GAAG,KAAK,OAAO,0BAA0B,EACzD,MAAM,QACN,CAAC;;CAGH,MAAa,iBAAiB,QAA0D;AACvF,MAAI,CAAC,OAAO,aAAa,OAAO,YAAY,UAAa,OAAO,UAAU,QACzE,OAAM,IAAI,MAAM,sEAAsE;AAEvF,SAAO,KAAK,IAAI,GAAG,KAAK,OAAO,sBAAsB,EACpD,QACA,CAAC;;;;;;;CAUH,MAAa,aAAa,OAAsC;AAC/D,OAAK,WAAW;EAEhB,MAAM,WAAW,GAAG,KAAK,OAAO;EAChC,MAAM,UAAU,MAAM,gBACrB,KAAK,QACL,KAAK,SACL,OACA,KAAK,gBAAgB,MAAM,KAAK,eAAe,GAAG,OAClD;AAED,SAAO,MAAM,KAAK,KAAK,UAAU,EAAE,SAAS,CAAC,CAAC,MAAM,cAAyB;AAM5E,UAL4B;IAC3B,KAAK,UAAU;IACf,QAAQ,UAAU;IAClB,YAAY,UAAU;IACtB;IAEA;;;;;;;CAQH,MAAa,aAAa,OAAsC;AAC/D,OAAK,WAAW;EAEhB,MAAM,WAAW,GAAG,KAAK,OAAO;EAChC,MAAM,UAAU,MAAM,gBACrB,KAAK,QACL,KAAK,SACL,OACA,KAAK,gBAAgB,MAAM,KAAK,eAAe,GAAG,OAClD;AAED,SAAO,MAAM,KAAK,IAAI,UAAU,EAAE,SAAS,CAAC,CAAC,MAAM,cAAyB;AAM3E,UAL4B;IAC3B,KAAK,UAAU;IACf,QAAQ,UAAU;IAClB,YAAY,UAAU;IACtB;IAEA;;CAGH,MAAa,qBAAqB,OAAsC;AACvE,SAAO,KAAK,aAAa,MAAM,CAAC,MAAK,aAAY;AAChD,OAAI,CAAC,SAAS,IACb,QAAO,KAAK,aAAa,MAAM;AAEhC,UAAO;IACN;;CAGH,MAAa,aAAuC;AACnD,OAAK,WAAW;EAEhB,MAAM,WAAW;EACjB,MAAM,aAAa;GAClB,QAAQ;GACR,aAAa;GACb;EAED,MAAM,UAAU,MAAM,gBACrB,KAAK,QACL,KAAK,OACL,YACA,KAAK,gBAAgB,MAAM,KAAK,eAAe,GAAG,OAClD;AAED,SAAO,KAAK,IAAI,GAAG,KAAK,OAAO,YAAY,EAAE,SAAS,CAAC;;CAGxD,MAAa,oBAAwC;AACpD,OAAK,WAAW;EAEhB,MAAM,WAAW;EACjB,MAAM,aAAa;GAClB,QAAQ;GACR,aAAa;GACb;EAED,MAAM,UAAU,MAAM,gBACrB,KAAK,QACL,KAAK,OACL,YACA,KAAK,gBAAgB,MAAM,KAAK,eAAe,GAAG,OAClD;AAED,SAAO,KAAK,IAAI,GAAG,KAAK,OAAO,YAAY,EAAE,SAAS,CAAC;;CAGxD,MAAa,eAA6B;AACzC,OAAK,WAAW;EAEhB,MAAM,WAAW;EACjB,MAAM,aAAa;GAClB,QAAQ;GACR,aAAa;GACb;EAED,MAAM,UAAU,MAAM,gBACrB,KAAK,QACL,KAAK,OACL,YACA,KAAK,gBAAgB,MAAM,KAAK,eAAe,GAAG,OAClD;AAED,SAAO,KAAK,IAAI,GAAG,KAAK,OAAO,YAAY,EAAE,SAAS,CAAC;;CAGxD,MAAa,uBAAwD;AACpE,OAAK,WAAW;EAEhB,MAAM,WAAW;EACjB,MAAM,aAAa;GAClB,QAAQ;GACR,aAAa;GACb;EAED,MAAM,UAAU,MAAM,gBACrB,KAAK,QACL,KAAK,OACL,YACA,KAAK,gBAAgB,MAAM,KAAK,eAAe,GAAG,OAClD;AAED,SAAO,KAAK,KAAK,GAAG,KAAK,OAAO,YAAY,EAAE,SAAS,CAAC;;CAGzD,MAAa,qBAAwC;AACpD,OAAK,WAAW;EAEhB,MAAM,WAAW;EACjB,MAAM,aAAa;GAClB,QAAQ;GACR,aAAa;GACb;EAED,MAAM,UAAU,MAAM,gBACrB,KAAK,QACL,KAAK,OACL,YACA,KAAK,gBAAgB,MAAM,KAAK,eAAe,GAAG,OAClD;AAED,SAAO,KAAK,IAAI,GAAG,KAAK,OAAO,YAAY,EAAE,SAAS,CAAC;;CAGxD,MAAa,qBAAqB,KAA+B;AAChE,OAAK,WAAW;EAEhB,MAAM,WAAW;EACjB,MAAM,UAAU,EAAE,KAAK;EACvB,MAAM,aAAa;GAClB,QAAQ;GACR,aAAa;GACb,MAAM,KAAK,UAAU,QAAQ;GAC7B;EAED,MAAM,UAAU,MAAM,gBACrB,KAAK,QACL,KAAK,OACL,YACA,KAAK,gBAAgB,MAAM,KAAK,eAAe,GAAG,OAClD;AAED,SAAO,KAAK,IAAI,GAAG,KAAK,OAAO,YAAY;GAAE;GAAS,MAAM;GAAS,CAAC;;CAGvE,MAAa,SAAS,SAAqC;AAC1D,OAAK,WAAW;EAEhB,MAAM,WAAW,GAAG,YAAY;EAChC,MAAM,aAAa;GAClB,QAAQ;GACR,aAAa;GACb;EAED,MAAM,UAAU,MAAM,gBACrB,KAAK,QACL,KAAK,OACL,YACA,KAAK,gBAAgB,MAAM,KAAK,eAAe,GAAG,OAClD;AAED,SAAO,KAAK,IAAI,GAAG,KAAK,OAAO,YAAY,EAAE,SAAS,CAAC;;CAGxD,MAAa,UACZ,QACA,kBAAkB,OAClB,aACmB;AACnB,OAAK,WAAW;EAEhB,MAAM,WAAW;EACjB,MAAM,aAAa;GAClB,QAAQ;GACR,aAAa;GACb;EAED,MAAM,UAAU,MAAM,gBACrB,KAAK,QACL,KAAK,OACL,YACA,KAAK,gBAAgB,MAAM,KAAK,eAAe,GAAG,OAClD;EAED,IAAIC,UAAmB,EAAE;AACzB,gBAAc,eAAe;AAC7B,SAAO,gBAAgB,eAAe,gBAAgB,kBAAkB,CAAC,kBAAkB;GAC1F,MAAMC,UAAe;IACpB,GAAG;IACH;IACA;GACD,MAAM,WAAW,MAAM,KAAK,IAAI,GAAG,KAAK,OAAO,YAAY;IAC1D;IACA,QAAQ;IACR,CAAC;AACF,iBAAc,SAAS;AACvB,aAAU,CAAC,GAAG,SAAS,GAAG,SAAS,KAAK;;AAEzC,SAAO;;CAGR,MAAa,mBACZ,QACA,aACmC;AACnC,OAAK,WAAW;EAEhB,MAAM,WAAW;EACjB,MAAM,aAAa;GAClB,QAAQ;GACR,aAAa;GACb;EAED,MAAM,UAAU,MAAM,gBACrB,KAAK,QACL,KAAK,OACL,YACA,KAAK,gBAAgB,MAAM,KAAK,eAAe,GAAG,OAClD;AAED,gBAAc,eAAe;EAE7B,MAAMA,UAAe;GAAE,GAAG;GAAQ;GAAa;EAE/C,MAAM,EACL,MACA,GAAG,SACsE,MAAM,KAAK,IACpF,GAAG,KAAK,OAAO,YACf;GAAE;GAAS,QAAQ;GAAS,CAC5B;AAED,SAAO;GAAE,QAAQ,MAAM,QAAQ,KAAK,GAAG,CAAC,GAAG,KAAK,GAAG,EAAE;GAAE,GAAG;GAAM;;CAGjE,MAAa,iBACZ,QACA,aACiC;AACjC,MAAI,CAAC,OAAO,gBAAgB,OAAO,iBAAiB,YACnD,OAAM,IAAI,MAAM,6CAA6C;EAG9D,MAAMA,UAAe;GAAE,GAAG;GAAQ,aAAa,eAAe;GAAgB;EAE9E,MAAM,EACL,MACA,GAAG,SAEH,MAAM,KAAK,IAAI,GAAG,KAAK,OAAO,sBAAsB,EAAE,QAAQ,SAAS,CAAC;AAEzE,SAAO;GAAE,QAAQ,MAAM,QAAQ,KAAK,GAAG,CAAC,GAAG,KAAK,GAAG,EAAE;GAAE,GAAG;GAAM;;CAGjE,MAAa,mBAA4C;AACxD,OAAK,WAAW;EAEhB,MAAM,WAAW;EACjB,MAAM,aAAa;GAClB,QAAQ;GACR,aAAa;GACb;EAED,MAAM,UAAU,MAAM,gBACrB,KAAK,QACL,KAAK,OACL,YACA,KAAK,gBAAgB,MAAM,KAAK,eAAe,GAAG,OAClD;AAED,SAAO,KAAK,IAAI,GAAG,KAAK,OAAO,YAAY;GAC1C;GACA,QAAQ,EAAE,gBAAgB,KAAK,aAAa,eAAe;GAC3D,CAAC;;CAGH,MAAa,kBAAkB,QAAgD;AAC9E,OAAK,WAAW;EAEhB,MAAM,WAAW;EACjB,MAAM,eAAe;GACpB,QAAQ;GACR,aAAa;GACb;EAED,MAAM,UAAU,MAAM,gBACrB,KAAK,QACL,KAAK,OACL,cACA,KAAK,gBAAgB,MAAM,KAAK,eAAe,GAAG,OAClD;AAED,SAAO,KAAK,IAAI,GAAG,KAAK,OAAO,YAAY;GAC1C;GACA,QAAQ,4BAA4B,OAAO;GAC3C,CAAC;;CAGH,MAAa,oBACZ,QACoC;AACpC,OAAK,WAAW;EAEhB,MAAM,WAAW;EACjB,MAAM,aAAa;GAClB,QAAQ;GACR,aAAa;GACb;EAED,MAAM,UAAU,MAAM,gBACrB,KAAK,QACL,KAAK,OACL,YACA,KAAK,gBAAgB,MAAM,KAAK,eAAe,GAAG,OAClD;EAED,MAAM,UAAU;GACf,GAAG;GACH,gBAAgB,KAAK,aAAa;GAClC;AAED,SAAO,KAAK,IAAI,GAAG,KAAK,OAAO,YAAY;GAAE;GAAS,QAAQ;GAAS,CAAC;;CAGzE,MAAa,uBAAuB,QAAgD;AACnF,OAAK,WAAW;EAEhB,MAAM,WAAW;EACjB,MAAM,aAAa;GAClB,QAAQ;GACR,aAAa;GACb;EAED,MAAM,UAAU,MAAM,gBACrB,KAAK,QACL,KAAK,OACL,YACA,KAAK,gBAAgB,MAAM,KAAK,eAAe,GAAG,OAClD;EAED,MAAM,UAAU;GACf,GAAG;GACH,gBAAgB,KAAK,aAAa;GAClC;AAED,SAAO,KAAK,IAAI,GAAG,KAAK,OAAO,YAAY;GAAE;GAAS,QAAQ;GAAS,CAAC;;CAGzE,MAAa,YACZ,WACA,SACuB;AACvB,OAAK,WAAW;EAEhB,MAAM,cAAc,EAAE,GAAG,WAAW;AAEpC,MAAI,KAAK,eAAe,eAAe,CAAC,YAAY,YACnD,aAAY,cAAc,KAAK,cAAc;EAG9C,MAAM,EAAE,YAAY;EAEpB,MAAM,WAAW,MAAM,KAAK,iBAAiB,SAAS,SAAS,SAAS;AAExE,MAAI,CAAC,WAAW,YAAY,OAAO,SAAS,CAC3C,OAAM,IAAI,MACT,kBAAkB,YAAY,MAAM,UAAU,WAAW,SAAS,CAAC,UAClE,IAAI,WAAW,SAAS,GAEzB;AAEF,cAAY,QAAQ,YAAY,YAAY,OAAO,gBAAgB,UAAU,MAAM;EAEnF,MAAM,UAAU,SAAS,WAAY,MAAM,KAAK,gBAAgB;AAEhE,MACC,YAAY,KACZ,YAAY,SAAS,KAAK,OAC1B,qBAAqB,eACrB,YAAY,oBAAoB,OAShC,aAAY,OAPW,MAAM,KAAK,0BACjC,SACA,YAAY,OAAO,YAAY,OAC/B,YAAY,OACZ,YAAY,iBACZ,YAAY,YACZ,GACmC,YAAY;EAGjD,MAAM,UAAU,SAAS,WAAY,MAAM,KAAK,WAAW,QAAQ;AAEnE,MAAI,YAAY,GAAG;GAClB,MAAM,iBACL,gBAAgB,cAAe,YAA4B,aAAa;AAEzE,GAAC,YAA4B,aADV,MAAM,KAAK,mBAAmB,SAAS,eAAe;;AAI1E,SAAO,KAAK,aAAa,WACxB,aACA;GACC;GACA;GACA,EACD,QACA;;CAGF,MAAa,kBACZ,iBACA,SACuB;AACvB,OAAK,WAAW;EAEhB,MAAM,EAAE,YAAY;AAEpB,QAAM,KAAK,wBAAwB,QAAQ;EAE3C,MAAM,WAAW,MAAM,KAAK,iBAAiB,SAAS,SAAS,SAAS;AAExE,MAAI,CAAC,gBAAgB,MACpB,iBAAgB,QAAQ,MAAM,KAAK,qBAClC,SACA,gBAAgB,MAChB,gBAAgB,QAChB,gBAAgB,UAChB;AAGF,MAAI,CAAC,WAAW,gBAAgB,OAAO,SAAS,CAC/C,OAAM,IAAI,MACT,kBAAkB,gBAAgB,MAAM,UAAU,WAAW,SAAS,CAAC,UACtE,IAAI,WAAW,SAAS,GAEzB;EAGF,MAAM,cAAc,EAAE,GAAG,iBAAiB;AAE1C,MAAI,KAAK,eAAe,eAAe,CAAC,YAAY,YACnD,aAAY,cAAc,KAAK,cAAc;AAG9C,QAAM,KAAK,2BAA2B,YAAY,YAAY;AAE9D,MACC,YAAY,SAAS,KAAK,OAC1B,qBAAqB,eACrB,YAAY,oBAAoB,QAC/B;GAED,MAAM,QAAQ,YAAY;AAC1B,eAAY,SAAS,MAAM,KAAK,0BAC/B,SACA,YAAY,QACZ,OACA,YAAY,iBACZ,YAAY,YACZ;;EAGF,MAAM,UAAU,SAAS,WAAY,MAAM,KAAK,WAAW,QAAQ;EACnE,MAAM,UAAU,SAAS,WAAY,MAAM,KAAK,gBAAgB;AAEhE,MAAI,YAAY,GAAG;GAClB,MAAM,iBACL,gBAAgB,cACZ,YAAkC,aACnC;AAEJ,GAAC,YAAkC,aADhB,MAAM,KAAK,mBAAmB,SAAS,eAAe;;AAI1E,SAAO,KAAK,aAAa,iBACxB,aACA;GACC;GACA;GACA,EACD,QACA;;CAGF,MAAa,iCACZ,WACuB;AACvB,OAAK,WAAW;EAEhB,MAAM,cAAc,EAAE,GAAG,WAAW;AACpC,MAAI,KAAK,eAAe,eAAe,CAAC,YAAY,YACnD,aAAY,cAAc,KAAK,cAAc;AAG9C,SAAO,KAAK,aAAa,gCAAgC,YAAY;;CAGtE,MAAa,mBACZ,WACA,SACA,YAAe,UAAU,KACzB,WAAW,OACX,YAAY,OACa;EACzB,IAAIC;AAEJ,QAAM,KAAK,sBAAsB,YAAY;GAC5C,MAAM,QAAQ,MAAM,KAAK,YAAY,WAAW,QAAQ;AACxD,uBAAoB,MAAM,KAAK,UAAU,OAAO,WAAW,UAAU,UAAU;IAC9E;AAEF,SAAO;;CAGR,MAAa,yBACZ,iBACA,SACA,YAAe,UAAU,KACzB,YAAY,OACa;EACzB,IAAIC;AAEJ,QAAM,KAAK,sBAAsB,YAAY;GAC5C,MAAM,QAAQ,MAAM,KAAK,kBAAkB,iBAAiB,QAAQ;AACpE,6BAA0B,MAAM,KAAK,UAAU,OAAO,WAAW,OAAO,UAAU;IACjF;AAEF,SAAO;;CAGR,MAAa,cACZ,QACA,kBAAkB,OAClB,aAC8B;AAC9B,OAAK,WAAW;EAChB,MAAM,WAAW;EACjB,MAAM,eAAe;GACpB,QAAQ;GACR,aAAa;GACb;EAED,MAAM,UAAU,MAAM,gBACrB,KAAK,QACL,KAAK,OACL,cACA,KAAK,gBAAgB,MAAM,KAAK,eAAe,GAAG,OAClD;EAED,IAAIC,UAAuB,EAAE;AAC7B,gBAAc,eAAe;AAC7B,SAAO,gBAAgB,eAAe,gBAAgB,kBAAkB,CAAC,kBAAkB;GAC1F,MAAMH,UAAe;IACpB,GAAG;IACH;IACA;GACD,MAAM,WAAW,MAAM,KAAK,IAAI,GAAG,KAAK,OAAO,YAAY;IAC1D;IACA,QAAQ;IACR,CAAC;AACF,iBAAc,SAAS;AACvB,aAAU,CAAC,GAAG,SAAS,GAAG,SAAS,KAAK;;AAEzC,SAAO;;CAGR,MAAa,sBACZ,kBAAkB,OAClB,aACsC;AACtC,OAAK,WAAW;EAChB,MAAM,WAAW;EACjB,MAAM,eAAe;GACpB,QAAQ;GACR,aAAa;GACb;EAED,MAAM,UAAU,MAAM,gBACrB,KAAK,QACL,KAAK,OACL,cACA,KAAK,gBAAgB,MAAM,KAAK,eAAe,GAAG,OAClD;EAED,IAAII,UAA+B,EAAE;AACrC,gBAAc,eAAe;AAC7B,SAAO,gBAAgB,eAAe,gBAAgB,kBAAkB,CAAC,kBAAkB;GAC1F,MAAMJ,UAAe,EAAE,aAAa;GACpC,MAAM,WAAW,MAAM,KAAK,IAAI,GAAG,KAAK,OAAO,YAAY;IAC1D;IACA,QAAQ;IACR,CAAC;AACF,iBAAc,SAAS;AACvB,aAAU,CAAC,GAAG,SAAS,GAAG,SAAS,KAAK;;AAEzC,SAAO;;;;;;;;;;CAWR,MAAa,UACZ,OACA,YAAe,UAAU,KACzB,WAAW,OACX,YAAY,OACa;AACzB,OAAK,WAAW;AAChB,MAAI,aAAa,cAAc,UAAU,OAAO,cAAc,UAAU,KACvE,OAAM,IAAI,MAAM,+CAA+C;EAEhE,MAAM,WAAW;EAEjB,MAAM,eAAe,UAAU,MAAM,GAClC,cAAc,OAAO,KAAK,OAAO,OAAO,IAAI,WAAW,UAAU,UAAU,GAC3E,cAAc,OAAO,KAAK,OAAO,OAAO,IAAI,WAAW,UAAU,UAAU;EAE9E,MAAM,eAAe;GACpB,QAAQ;GACR,aAAa;GACb,MAAM,KAAK,UAAU,aAAa;GAClC;EAED,MAAM,UAAU,MAAM,gBACrB,KAAK,QACL,KAAK,OACL,cACA,KAAK,gBAAgB,MAAM,KAAK,eAAe,GAAG,OAClD;EAED,MAAM,MAAM,MAAM,KAAK,KACtB,GAAG,KAAK,OAAO,YACf;GACC;GACA,MAAM;GACN,EACD,KACA;AAED,MAAI,KAAK,wBAAwB,IAAI,CAAE,OAAM,KAAK,eAAe,KAAK;EAEtE,MAAMK,WAA0B,KAAK,aAAa,IAAI;AACtD,MAAI,UACH,QAAO;AAER,SAAO,KAAK,0BAA0B,SAAS;;CAGhD,MAAa,WACZ,MACA,WAAW,OACX,YAAY,OACe;AAC3B,OAAK,WAAW;AAChB,MACC,YACA,KAAK,MAAM,EAAE,gBAAgB,cAAc,UAAU,OAAO,cAAc,UAAU,IAAI,CAExF,OAAM,IAAI,MAAM,+CAA+C;EAEhE,MAAM,WAAW;EACjB,MAAMC,gBAAuD,EAAE;AAC/D,OAAK,MAAM,OAAO,MAAM;GACvB,MAAM,EAAE,OAAO,cAAc;GAE7B,MAAM,eAAe,UAAU,MAAM,GAClC,cAAc,OAAO,KAAK,OAAO,OAAO,IAAI,WAAW,UAAU,UAAU,GAC3E,cAAc,OAAO,KAAK,OAAO,OAAO,IAAI,WAAW,UAAU,UAAU;AAC9E,iBAAc,KAAK,aAAa;;EAGjC,MAAM,eAAe;GACpB,QAAQ;GACR,aAAa;GACb,MAAM,KAAK,UAAU,cAAc;GACnC;EAED,MAAM,UAAU,MAAM,gBACrB,KAAK,QACL,KAAK,OACL,cACA,KAAK,gBAAgB,MAAM,KAAK,eAAe,GAAG,OAClD;EAED,MAAM,MAAM,MAAM,KAAK,KACtB,GAAG,KAAK,OAAO,YACf;GACC;GACA,MAAM;GACN,EACD,KACA;AAED,MAAI,KAAK,wBAAwB,IAAI,CAAE,OAAM,KAAK,eAAe,KAAK;EAEtE,MAAMC,YAA6B,KAAK,aAAa,IAAI;AACzD,MAAI,aAAa,CAAC,MAAM,QAAQ,UAAU,CACzC,QAAO;AAER,SAAO,QAAQ,IAAI,UAAU,KAAI,aAAY,KAAK,0BAA0B,SAAS,CAAC,CAAC;;CAOxF,MAAc,sBAAsB,UAAsC;EACzE,MAAM,MAAM,CAAC,GAAG,IAAI,IAAI,SAAS,QAAO,OAAM,GAAG,SAAS,EAAE,CAAC,CAAC;AAC9D,MAAI,IAAI,WAAW,EAAG,QAAO,EAAE;EAE/B,MAAM,2BAAW,IAAI,KAAoB;EACzC,MAAM,eAAe,IAAI,IAAI,IAAI;EACjC,MAAM,WAAW,KAAK,KAAK,GAAG;AAE9B,WAAS;GACR,MAAM,UAAU,IAAI,QAAO,OAAM,CAAC,SAAS,IAAI,GAAG,CAAC;GAGnD,MAAM,QAAQ,MAAM,QAAQ,IAC3B,QAAQ,KAAI,OAAM,KAAK,UAAU,EAAE,IAAI,EAAE,KAAK,CAAC,YAAY,EAAE,CAAY,CAAC,CAC1E;AACD,QAAK,MAAM,UAAU,MACpB,MAAK,MAAM,SAAS,OACnB,KAAI,gBAAgB,MAAM,IAAI,aAAa,IAAI,MAAM,GAAG,CACvD,UAAS,IAAI,MAAM,IAAI,MAAM;AAKhC,OAAI,IAAI,OAAM,OAAM,SAAS,IAAI,GAAG,CAAC,IAAI,KAAK,KAAK,IAAI,SACtD,QAAO,IACL,KAAI,OAAM,SAAS,IAAI,GAAG,CAAC,CAC3B,QAAQ,UAA0B,UAAU,OAAU;AAEzD,SAAM,MAAM,gCAAgC;;;CAS9C,MAAc,0BAA0B,UAAiD;AACxF,MAAI,SAAS,sBAAsB,SAAS,mBAAmB,SAAS,EACvE,QAAO;EAGR,MAAM,WAAW,SAAS,YAAY,EAAE;AACxC,MAAI,SAAS,WAAW,EACvB,QAAO;EAIR,MAAM,sBADiB,MAAM,KAAK,sBAAsB,SAAS,EAE/D,QAAO,UAAS,MAAM,OAAO,aAAa,KAAK,oBAAoB,CACnE,KAAI,UAAS,MAAM,iBAAiB,CACpC,QAAQ,SAAyB,QAAQ,KAAK,CAAC;AAEjD,MAAI,mBAAmB,WAAW,EACjC,QAAO;AAER,SAAO;GAAE,GAAG;GAAU;GAAoB;;CAG3C,MAAa,YAAY,SAAqC;AAC7D,OAAK,WAAW;EAChB,MAAM,WAAW;EACjB,MAAM,eAAe;GACpB,QAAQ;GACR,aAAa;GACb,MAAM,KAAK,UAAU,QAAQ;GAC7B;EAED,MAAM,UAAU,MAAM,gBACrB,KAAK,QACL,KAAK,OACL,cACA,KAAK,gBAAgB,MAAM,KAAK,eAAe,GAAG,OAClD;AACD,SAAO,KAAK,IAAI,GAAG,KAAK,OAAO,YAAY;GAAE;GAAS,MAAM;GAAS,CAAC;;CAGvE,MAAa,aAAa,cAAsC;AAC/D,OAAK,WAAW;EAChB,MAAM,WAAW;EACjB,MAAM,eAAe;GACpB,QAAQ;GACR,aAAa;GACb,MAAM,KAAK,UAAU,aAAa;GAClC;EAED,MAAM,UAAU,MAAM,gBACrB,KAAK,QACL,KAAK,OACL,cACA,KAAK,gBAAgB,MAAM,KAAK,eAAe,GAAG,OAClD;AACD,SAAO,KAAK,IAAI,GAAG,KAAK,OAAO,YAAY;GAAE;GAAS,MAAM;GAAc,CAAC;;CAG5E,MAAa,YAA0B;AACtC,OAAK,WAAW;EAChB,MAAM,WAAW;EACjB,MAAM,eAAe;GACpB,QAAQ;GACR,aAAa;GACb;EAED,MAAM,UAAU,MAAM,gBACrB,KAAK,QACL,KAAK,OACL,cACA,KAAK,gBAAgB,MAAM,KAAK,eAAe,GAAG,OAClD;AACD,SAAO,KAAK,IAAI,GAAG,KAAK,OAAO,YAAY,EAAE,SAAS,CAAC;;CAGxD,MAAa,mBAAmB,SAAgD;AAC/E,OAAK,WAAW;EAChB,MAAM,WAAW;EACjB,MAAM,eAAe;GACpB,QAAQ;GACR,aAAa;GACb,MAAM,KAAK,UAAU,QAAQ;GAC7B;EAED,MAAM,UAAU,MAAM,gBACrB,KAAK,QACL,KAAK,OACL,cACA,KAAK,gBAAgB,MAAM,KAAK,eAAe,GAAG,OAClD;AACD,SAAO,KAAK,IAAI,GAAG,KAAK,OAAO,YAAY;GAAE;GAAS,MAAM;GAAS,CAAC;;CAGvE,MAAa,eAAe,QAAoD;AAC/E,OAAK,WAAW;EAEhB,MAAM,WAAW;EACjB,MAAM,aAAa;GAClB,QAAQ;GACR,aAAa;GACb;EAED,MAAM,UAAU,MAAM,gBACrB,KAAK,QACL,KAAK,OACL,YACA,KAAK,gBAAgB,MAAM,KAAK,eAAe,GAAG,OAClD;AAED,SAAO,KAAK,IAAI,GAAG,KAAK,OAAO,YAAY;GAAE;GAAS;GAAQ,CAAC;;CAGhE,MAAa,iBAAiB,QAAsD;AACnF,OAAK,WAAW;EAEhB,MAAM,WAAW;EACjB,MAAM,UAAU,KAAK,UAAU,QAAQ,SAAS;EAChD,MAAM,aAAa;GAClB,QAAQ;GACR,aAAa;GACb,MAAM;GACN;EAED,MAAM,UAAU,MAAM,gBACrB,KAAK,QACL,KAAK,OACL,YACA,KAAK,gBAAgB,MAAM,KAAK,eAAe,GAAG,OAClD;AAED,SAAO,KAAK,KAAK,GAAG,KAAK,OAAO,YAAY;GAC3C;GACA,MAAM;GACN,CAAC;;CAIH,MAAa,yBAAyB,MAAsC;AAC3E,OAAK,WAAW;EAEhB,MAAM,WAAW;EACjB,MAAM,aAAa;GAClB,QAAQ;GACR,aAAa;GACb;EAED,MAAM,UAAU,MAAM,gBACrB,KAAK,QACL,KAAK,OACL,YACA,KAAK,gBAAgB,MAAM,KAAK,eAAe,GAAG,OAClD;EAED,IAAIC,UAAyB,EAAE;EAC/B,IAAI,cAAc;AAClB,SAAO,gBAAgB,YAAY;GAClC,MAAM,SAAS;IACd;IACA,gBAAgB,KAAK,aAAa;IAClC;IACA;GAED,MAAM,WAAW,MAAM,KAAK,IAAI,GAAG,KAAK,OAAO,YAAY;IAC1D;IACA;IACA,CAAC;AACF,iBAAc,SAAS;AACvB,aAAU,CAAC,GAAG,SAAS,GAAG,SAAS,KAAK;;AAEzC,SAAO;;CAGR,MAAa,8BAA8B,MAA2C;AACrF,OAAK,WAAW;EAEhB,MAAM,WAAW;EACjB,MAAM,aAAa;GAClB,QAAQ;GACR,aAAa;GACb;EAED,MAAM,UAAU,MAAM,gBACrB,KAAK,QACL,KAAK,OACL,YACA,KAAK,gBAAgB,MAAM,KAAK,eAAe,GAAG,OAClD;EAED,MAAM,SAAS;GACd;GACA,gBAAgB,KAAK,aAAa;GAClC;AAED,SAAO,MAAM,KAAK,IAAI,GAAG,KAAK,OAAO,YAAY;GAChD;GACA;GACA,CAAC;;CAGH,MAAa,gCACZ,MACA,WAAW,IACX,WAAW,IACX,iBAAiB,OACe;AAChC,OAAK,WAAW;EAEhB,MAAM,WAAW;EACjB,MAAM,aAAa;GAClB,QAAQ;GACR,aAAa;GACb;EAED,MAAM,UAAU,MAAM,gBACrB,KAAK,QACL,KAAK,OACL,YACA,KAAK,gBAAgB,MAAM,KAAK,eAAe,GAAG,OAClD;EAED,IAAIC,UAAgC,EAAE;EACtC,IAAI,cAAc;AAClB,SAAO,gBAAgB,YAAY;GAClC,MAAM,SAAS;IACd;IACA,gBAAgB,KAAK,aAAa;IAClC;IACA;IACA;IACA;IACA;GAED,MAAM,WAAW,MAAM,KAAK,IAAI,GAAG,KAAK,OAAO,YAAY;IAC1D;IACA;IACA,CAAC;AACF,iBAAc,SAAS;AACvB,aAAU,CAAC,GAAG,SAAS,GAAG,SAAS,KAAK;;AAEzC,SAAO;;CAGR,MAAa,uBAAoD;AAChE,OAAK,WAAW;EAEhB,MAAM,WAAW;EACjB,MAAM,aAAa;GAClB,QAAQ;GACR,aAAa;GACb;EAED,MAAM,UAAU,MAAM,gBACrB,KAAK,QACL,KAAK,OACL,YACA,KAAK,gBAAgB,MAAM,KAAK,eAAe,GAAG,OAClD;EAED,MAAM,UAAU,EACf,gBAAgB,KAAK,aAAa,eAClC;AAED,SAAO,KAAK,IAAI,GAAG,KAAK,OAAO,YAAY;GAAE;GAAS,QAAQ;GAAS,CAAC;;CAGzE,MAAa,oBAA6C;EACzD,IAAIC,UAA0B,EAAE;EAChC,IAAI,cAAc;AAClB,SAAO,gBAAgB,YAAY;GAClC,MAAM,WAAW,MAAM,KAAK,IAAI,GAAG,KAAK,OAAO,+BAA+B,EAC7E,QAAQ,EAAE,aAAa,EACvB,CAAC;AACF,iBAAc,SAAS;AACvB,aAAU,CAAC,GAAG,SAAS,GAAG,SAAS,KAAK;;AAEzC,SAAO;;CAGR,MAAa,uBAAuB,aAA8C;EACjF,IAAIA,UAA0B,EAAE;EAChC,IAAI,cAAc;AAClB,SAAO,gBAAgB,YAAY;GAClC,MAAM,WAAW,MAAM,KAAK,IAAI,GAAG,KAAK,OAAO,sBAAsB,eAAe,EACnF,QAAQ,EAAE,aAAa,EACvB,CAAC;AACF,iBAAc,SAAS;AACvB,aAAU,CAAC,GAAG,SAAS,GAAG,SAAS,KAAK;;AAEzC,SAAO;;CAGR,MAAa,qBACZ,SACA,MACA,QACA,YAAuB,UAAU,KACf;EAClB,MAAM,OAAO,MAAM,KAAK,aAAa,QAAQ;AAC7C,MAAI,CAAC,KACJ,OAAM,IAAI,MAAM,eAAe;AAEhC,MAAI,SAAS,KAAK,KAAK;AACtB,OAAI,CAAC,KAAK,KACT,OAAM,IAAI,MAAM,WAAW;AAE5B,UAAO,wBAAwB,KAAK,MAAM,QAAQ,UAAU;SACtD;AACN,OAAI,CAAC,KAAK,KACT,OAAM,IAAI,MAAM,WAAW;AAE5B,UAAO,yBAAyB,KAAK,MAAM,QAAQ,UAAU;;;CAI/D,MAAa,sBAA8C;AAC1D,OAAK,WAAW;EAEhB,MAAM,WAAW;EACjB,MAAM,aAAa;GAClB,QAAQ;GACR,aAAa;GACb;EAED,MAAM,UAAU,MAAM,gBACrB,KAAK,QACL,KAAK,OACL,YACA,KAAK,gBAAgB,MAAM,KAAK,eAAe,GAAG,OAClD;AAED,SAAO,KAAK,KAAK,GAAG,KAAK,OAAO,YAAY,EAAE,SAAS,CAAC;;CAGzD,MAAa,oBAAsD;AAClE,OAAK,WAAW;EAEhB,MAAM,WAAW;EACjB,MAAM,aAAa;GAClB,QAAQ;GACR,aAAa;GACb;EAED,MAAM,UAAU,MAAM,gBACrB,KAAK,QACL,KAAK,OACL,YACA,KAAK,gBAAgB,MAAM,KAAK,eAAe,GAAG,OAClD;AAED,SAAO,KAAK,IAAI,GAAG,KAAK,OAAO,YAAY,EAAE,SAAS,CAAC;;CAGxD,MAAa,sBAAoC;AAChD,OAAK,WAAW;EAEhB,MAAM,WAAW;EACjB,MAAM,aAAa;GAClB,QAAQ;GACR,aAAa;GACb;EAED,MAAM,UAAU,MAAM,gBACrB,KAAK,QACL,KAAK,OACL,YACA,KAAK,gBAAgB,MAAM,KAAK,eAAe,GAAG,OAClD;AAED,SAAO,KAAK,IAAI,GAAG,KAAK,OAAO,YAAY,EAAE,SAAS,CAAC;;CAGxD,MAAa,sBAAsB,aAAkD;AACpF,SAAO,KAAK,IAAI,GAAG,KAAK,OAAO,2BAA2B,cAAc;;CAGzE,AAAQ,YAAkB;AACzB,MAAI,KAAK,WAAW,OACnB,OAAM;;CAIR,AAAQ,YAAkB;AACzB,MAAI,KAAK,WAAW,OACnB,OAAM;AAGP,MAAI,KAAK,UAAU,OAClB,OAAM;;CAIR,AAAQ,eAAe,aAA+B;AACrD,SAAO,gBAAgB,UAAa,gBAAgB;;CAGrD,MAAc,uBAAuB,aAAuC;AAC3E,MAAI,CAAC,KAAK,eAAe,YAAY,CAAE,QAAO;AAE9C,QAAM,KAAK,2BAA2B,YAAY;AAClD,SAAO,KAAK,gBAAgB,eAAe,KAAK,SAAS;;CAG1D,MAAc,0BACb,SACA,QACA,OACA,iBACA,aACkB;AAClB,QAAM,KAAK,wBAAwB,QAAQ;EAC3C,MAAM,sBAAsB,MAAM,KAAK,uBAAuB,YAAY;AAE1E,SAAO,uBACN,QACA,OACA,iBACA,KAAK,SAAS,SAAS,MACvB,KAAK,SAAS,SAAS,UACvB,qBACA,KAAK,YACL;;CAGF,MAAc,wBAAwB,SAAgC;AACrE,MAAI,WAAW,KAAK,SAAU;AAE9B,MAAI,EAAE,WAAW,KAAK,oBAAoB;GACzC,MAAM,SAAS,MAAM,KAAK,IAAI,GAAG,KAAK,OAAO,sBAAsB,UAAU;AAC7E,OAAI,CAAC,QAAQ,aACZ,OAAM,IAAI,MAAM,4CAA4C,UAAU;AAEvE,QAAK,kBAAkB,WAAW,OAAO;;AAG1C,QAAM,KAAK,kBAAkB,KAAK,kBAAkB,SAAS;;CAG9D,MAAc,2BAA2B,aAAqC;AAC7E,MAAI,CAAC,eAAe,gBAAgB,YAAa;AACjD,MAAI,eAAe,KAAK,gBAAiB;EAEzC,MAAM,SAAS,MAAM,KAAK,IAAI,GAAG,KAAK,OAAO,mBAAmB,cAAc;AAC9E,OAAK,gBAAgB,eAAe;GACnC,OAAO,OAAO,6BAA6B;GAC3C,OAAO,OAAO,6BAA6B;GAC3C;;CAGF,MAAc,iBAAiB,SAAiB,UAAwC;EACvF,MAAM,cAAc,MAAM,KAAK,YAAY,QAAQ;AACnD,MAAI,UACH;OAAI,kBAAkB,UAAU,YAAY,CAC3C,OAAM,IAAI,MACT,sBAAsB,SAAS,+BAA+B,cAC9D;QAGF,YAAW;AAEZ,SAAO;;CAGR,MAAc,mBAAmB,SAAiB,gBAA0C;EAC3F,MAAM,mBAAmB,MAAM,KAAK,cAAc,QAAQ;AAC1D,MACC,mBAAmB,KACnB,mBAAmB,UACnB,mBAAmB,iBAEnB,OAAM,IAAI,MACT,mCAAmC,eAAe,oCAAoC,mBACtF;AAEF,SAAO;;CAGR,MAAc,eAAe,cAAuB,OAAwB;AAE3E,MAAI,CAAC,eAAe,KAAK,kBAAkB,OAC1C,QAAO,KAAK;EAIb,MAAM,aAAa,MAAM,KAAK,YAAY;AAC1C,OAAK,gBAAgB;AAErB,SAAO;;CAGR,MAAc,sBAAsB,WAAmC;EACtE,MAAM,UAAU,MAAM,KAAK,gBAAgB;AAE3C,OAAK,IAAI,UAAU,GAAG,UAAU,GAAG,WAAW;AAC7C,SAAM,WAAW;AAGjB,OAAI,YAAa,MAAM,KAAK,gBAAgB,CAAG;;;CAIjD,AAAQ,wBAAwB,MAA6B;EAC5D,MAAM,QAAQ,MAAM;AACpB,MAAI,CAAC,MAAO,QAAO;AAEnB,UADgB,OAAO,UAAU,WAAW,QAAQ,KAAK,UAAU,MAAM,EAC1D,SAAS,6BAA6B;;CAGtD,AAAQ,aAAa,QAAkB;AACtC,MAAI,KAAK,gBAAgB,UAAU,OAAO,WAAW,YAAY,WAAW,OAG3E,OAAM,IAAI,SADT,OAAO,OAAO,UAAU,WAAW,OAAO,QAAQ,KAAK,UAAU,OAAO,MAAM,EACvD,OAAO,QAAQ,OAAO;AAE/C,SAAO;;CAIR,MAAc,IAAI,UAAkB,SAA0B,YAAY,OAAO;EAChF,MAAM,SAAS,MAAM,IAAI,UAAU,QAAQ;AAC3C,SAAO,YAAY,SAAS,KAAK,aAAa,OAAO;;CAGtD,MAAc,KAAK,UAAkB,SAA0B,YAAY,OAAO;EACjF,MAAM,SAAS,MAAM,KAAK,UAAU,SAAS,KAAK,aAAa;AAC/D,SAAO,YAAY,SAAS,KAAK,aAAa,OAAO;;CAGtD,MAAc,IAAI,UAAkB,SAA0B,YAAY,OAAO;EAChF,MAAM,SAAS,MAAM,IAAI,UAAU,QAAQ;AAC3C,SAAO,YAAY,SAAS,KAAK,aAAa,OAAO"}
@@ -1 +1 @@
1
- {"version":3,"file":"clob.cjs","names":[],"sources":["../../src/types/clob.ts"],"sourcesContent":["import { Side } from \"../order-utils/model/side.js\";\n\nexport { Side };\n\nexport interface ApiKeyCreds {\n\tkey: string;\n\tsecret: string;\n\tpassphrase: string;\n}\n\nexport interface BuilderConfig {\n\tbuilderCode: string;\n}\n\nexport interface ApiKeyRaw {\n\tapiKey: string;\n\tsecret: string;\n\tpassphrase: string;\n}\n\nexport interface L2HeaderArgs {\n\tmethod: string;\n\trequestPath: string;\n\tbody?: string;\n}\n\nexport type SimpleHeaders = Record<string, string | number | boolean>;\n\n// EIP712 sig verification\nexport interface L1PolyHeader extends SimpleHeaders {\n\tPOLY_ADDRESS: string;\n\tPOLY_SIGNATURE: string;\n\tPOLY_TIMESTAMP: string;\n\tPOLY_NONCE: string;\n}\n\n// API key verification\nexport interface L2PolyHeader extends SimpleHeaders {\n\tPOLY_ADDRESS: string;\n\tPOLY_SIGNATURE: string;\n\tPOLY_TIMESTAMP: string;\n\tPOLY_API_KEY: string;\n\tPOLY_PASSPHRASE: string;\n}\n\nexport enum OrderType {\n\tGTC = \"GTC\",\n\tFOK = \"FOK\",\n\tGTD = \"GTD\",\n\tFAK = \"FAK\",\n}\n\nexport interface OrderPayload {\n\torderID: string;\n}\n\nexport interface OrderResponse {\n\tsuccess: boolean;\n\terrorMsg: string;\n\torderID: string;\n\ttransactionsHashes?: string[];\n\ttradeIDs?: string[];\n\tstatus: string;\n\ttakingAmount: string;\n\tmakingAmount: string;\n}\n\nexport interface OpenOrder {\n\tid: string;\n\tstatus: string;\n\towner: string;\n\tmaker_address: string;\n\tmarket: string;\n\tasset_id: string;\n\tside: string;\n\toriginal_size: string;\n\tsize_matched: string;\n\tprice: string;\n\tassociate_trades: string[];\n\toutcome: string;\n\tcreated_at: number;\n\texpiration: string;\n\torder_type: string;\n}\n\nexport type OpenOrdersResponse = OpenOrder[];\n\nexport type PreMigrationOrder = OpenOrder;\n\nexport type PreMigrationOrdersResponse = PreMigrationOrder[];\n\nexport interface MakerOrder {\n\torder_id: string;\n\towner: string;\n\tmaker_address: string;\n\tmatched_amount: string;\n\tprice: string;\n\tfee_rate_bps: string;\n\tasset_id: string;\n\toutcome: string;\n\tside?: Side;\n\tbuilder_fee?: string;\n\tbuilder_code?: string;\n}\n\nexport interface Trade {\n\tid: string;\n\ttaker_order_id: string;\n\tmarket: string;\n\tasset_id: string;\n\tside: Side;\n\tsize: string;\n\tfee_rate_bps: string;\n\tprice: string;\n\tstatus: string;\n\tmatch_time: string;\n\tmatch_time_nano?: string;\n\tlast_update: string;\n\toutcome: string;\n\tbucket_index: number;\n\towner: string;\n\tmaker_address: string;\n\tmaker_orders: MakerOrder[];\n\ttransaction_hash?: string;\n\terr_msg?: string | null;\n\ttrader_side: \"TAKER\" | \"MAKER\";\n}\n\nexport interface ApiKeysResponse {\n\tapiKeys: ApiKeyCreds[];\n}\n\nexport interface BanStatus {\n\tclosed_only: boolean;\n}\n\nexport interface TradeParams {\n\tid?: string;\n\tmaker_address?: string;\n\tmarket?: string;\n\tasset_id?: string;\n\tbefore?: string;\n\tafter?: string;\n}\n\nexport interface BuilderTradeParams extends TradeParams {\n\tbuilder_code: string;\n}\n\nexport interface OpenOrderParams {\n\tid?: string;\n\tmarket?: string;\n\tasset_id?: string;\n}\n\nexport enum Chain {\n\tPOLYGON = 137,\n\tAMOY = 80002,\n}\n\nexport interface MarketPrice {\n\tt: number; // timestamp\n\tp: number; // price\n}\n\nexport interface PriceHistoryFilterParams {\n\tmarket?: string;\n\tstartTs?: number;\n\tendTs?: number;\n\tfidelity?: number;\n\tinterval?: PriceHistoryInterval;\n}\n\nexport enum PriceHistoryInterval {\n\tMAX = \"max\",\n\tONE_WEEK = \"1w\",\n\tONE_DAY = \"1d\",\n\tSIX_HOURS = \"6h\",\n\tONE_HOUR = \"1h\",\n}\n\nexport interface DropNotificationParams {\n\tids: string[];\n}\n\nexport interface Notification {\n\ttype: number;\n\towner: string;\n\n\tpayload: any;\n}\n\nexport interface OrderMarketCancelParams {\n\tmarket?: string;\n\tasset_id?: string;\n}\n\nexport interface OrderBookSummary {\n\tmarket: string;\n\tasset_id: string;\n\ttimestamp: string;\n\tbids: OrderSummary[];\n\tasks: OrderSummary[];\n\tmin_order_size: string;\n\ttick_size: string;\n\tneg_risk: boolean;\n\thash: string;\n\tlast_trade_price: string;\n}\n\nexport interface OrderSummary {\n\tprice: string;\n\tsize: string;\n}\n\nexport enum AssetType {\n\tCOLLATERAL = \"COLLATERAL\",\n\tCONDITIONAL = \"CONDITIONAL\",\n}\n\nexport interface BalanceAllowanceParams {\n\tasset_type: AssetType;\n\ttoken_id?: string;\n}\n\nexport interface BalanceAllowanceResponse {\n\tbalance: string;\n\tallowances: Record<string, string>;\n}\n\nexport interface OrderScoringParams {\n\torder_id: string;\n}\n\nexport interface OrderScoring {\n\tscoring: boolean;\n}\n\nexport interface OrdersScoringParams {\n\torderIds: string[];\n}\n\nexport type OrdersScoring = { [orderId in string]: boolean };\n\nexport type OrderVersion = 1 | 2 | 3;\n\nexport type CreateOrderOptions = {\n\ttickSize: TickSize;\n\tnegRisk?: boolean;\n\tversion?: OrderVersion;\n};\n\nexport type TickSize = \"0.1\" | \"0.01\" | \"0.005\" | \"0.0025\" | \"0.001\" | \"0.0001\";\n\nexport interface RoundConfig {\n\treadonly price: number;\n\treadonly size: number;\n\treadonly amount: number;\n}\n\nexport interface TickSizes {\n\t[tokenId: string]: TickSize;\n}\n\nexport interface FeeRates {\n\t[tokenId: string]: number;\n}\n\nexport interface NegRisk {\n\t[tokenId: string]: boolean;\n}\n\nexport interface FeeInfo {\n\trate: number;\n\texponent: number;\n}\n\nexport interface FeeInfos {\n\t[tokenId: string]: FeeInfo;\n}\n\nexport interface BuilderFeeRates {\n\t[builderCode: string]: { maker: number; taker: number };\n}\n\nexport type TokenConditionMap = Record<string, string>;\n\nexport interface FeeDetails {\n\tr?: number; // fee rate\n\te?: number; // fee exponent\n\tto?: boolean; // taker only (omitted when false)\n}\n\nexport interface ClobRewards {\n\tmi?: number; // min size\n\tma?: number; // max spread\n\te?: boolean; // enabled\n\tsmoa?: boolean; // skip min order age\n\tmoas?: number; // min order age seconds\n}\n\nexport interface ClobToken {\n\tt: string; // token ID\n\to: string; // outcome\n}\n\nexport interface MarketDetails {\n\tc: string; // condition ID\n\tt: [ClobToken, ClobToken]; // YES and NO tokens\n\tmts: number; // min tick size\n\tnr?: boolean; // neg risk (omitted when false)\n\tfd?: FeeDetails; // platform fee details\n\tmbf?: number; // maker base fee\n\ttbf?: number; // taker base fee\n\tr: ClobRewards | null; // rewards config (always present, null if unset)\n\tao?: boolean; // accepting orders\n\tmos?: number; // min order size\n\tsd?: number; // seconds delay\n\tgst?: string; // game start time (ISO 8601)\n\tcbos?: boolean; // clear book on start\n\taot?: string; // accepting orders timestamp (ISO 8601)\n\trfqe?: boolean; // RFQ enabled\n\titode?: boolean; // taker order delay enabled\n\tibce?: boolean; // blockaid check enabled\n}\n\nexport interface PaginationPayload {\n\treadonly limit: number;\n\treadonly count: number;\n\treadonly next_cursor: string;\n\treadonly data: any[];\n}\n\nexport interface BookParams {\n\ttoken_id: string;\n\tside: Side;\n}\n\nexport interface UserEarning {\n\tdate: string;\n\tcondition_id: string;\n\tasset_address: string;\n\tmaker_address: string;\n\tearnings: number;\n\tasset_rate: number;\n}\n\nexport interface TotalUserEarning {\n\tdate: string;\n\tasset_address: string;\n\tmaker_address: string;\n\tearnings: number;\n\tasset_rate: number;\n}\n\nexport interface RewardsPercentages {\n\t[market: string]: number;\n}\n\nexport interface Token {\n\ttoken_id: string;\n\toutcome: string;\n\tprice: number;\n}\n\nexport interface RewardsConfig {\n\tasset_address: string;\n\tstart_date: string;\n\tend_date: string;\n\trate_per_day: number;\n\ttotal_rewards: number;\n}\n\nexport interface MarketReward {\n\tcondition_id: string;\n\tquestion: string;\n\tmarket_slug: string;\n\tevent_slug: string;\n\timage: string;\n\trewards_max_spread: number;\n\trewards_min_size: number;\n\ttokens: Token[];\n\trewards_config: RewardsConfig[];\n}\n\nexport interface Earning {\n\tasset_address: string;\n\tearnings: number;\n\tasset_rate: number;\n}\n\nexport interface UserRewardsEarning {\n\tcondition_id: string;\n\tquestion: string;\n\tmarket_slug: string;\n\tevent_slug: string;\n\timage: string;\n\trewards_max_spread: number;\n\trewards_min_size: number;\n\tmarket_competitiveness: number;\n\ttokens: Token[];\n\trewards_config: RewardsConfig[];\n\tmaker_address: string;\n\tearning_percentage: number;\n\tearnings: Earning[];\n}\n\nexport interface BuilderTrade {\n\tid: string;\n\ttradeType: string;\n\ttakerOrderHash: string;\n\tbuilder: string;\n\tmarket: string;\n\tassetId: string;\n\tside: string;\n\tsize: string;\n\tsizeUsdc: string;\n\tprice: string;\n\tstatus: string;\n\toutcome: string;\n\toutcomeIndex: number;\n\towner: string;\n\tmaker: string;\n\ttransactionHash: string;\n\tmatchTime: string;\n\tbucketIndex: number;\n\tfee: string;\n\tfeeUsdc: string;\n\tbuilderFee: string;\n\tbuilderCode: string;\n\terr_msg?: string | null;\n\tcreatedAt: string | null;\n\tupdatedAt: string | null;\n}\n\nexport interface ReadonlyApiKeyResponse {\n\tapiKey: string;\n}\n\nexport interface MarketTradeEvent {\n\tevent_type: string;\n\tmarket: {\n\t\tcondition_id: string;\n\t\tasset_id: string;\n\t\tquestion: string;\n\t\ticon: string;\n\t\tslug: string;\n\t};\n\tuser: {\n\t\taddress: string;\n\t\tusername: string;\n\t\tprofile_picture: string;\n\t\toptimized_profile_picture: string;\n\t\tpseudonym: string;\n\t};\n\tside: Side;\n\tsize: string;\n\tfee_rate_bps: string;\n\tprice: string;\n\toutcome: string;\n\toutcome_index: number;\n\ttransaction_hash: string;\n\ttimestamp: string;\n}\n\nexport interface BuilderApiKey {\n\tkey: string;\n\tsecret: string;\n\tpassphrase: string;\n}\n\nexport interface BuilderApiKeyResponse {\n\tkey: string;\n\tcreatedAt?: string;\n\trevokedAt?: string;\n}\n\nexport type ClobErrorResponseBody = {\n\terror: string;\n};\n\nexport interface TradesPaginatedResponse {\n\ttrades: Trade[];\n\tnext_cursor: string;\n\tlimit: number;\n\tcount: number;\n}\n\nexport interface BuilderTradesResponse {\n\ttrades: BuilderTrade[];\n\tnext_cursor: string;\n\tlimit: number;\n\tcount: number;\n}\n"],"mappings":";;;AA6CA,IAAY,kDAAL;AACN;AACA;AACA;AACA;;;AA0GD,IAAY,0CAAL;AACN;AACA;;;AAgBD,IAAY,wEAAL;AACN;AACA;AACA;AACA;AACA;;;AAqCD,IAAY,kDAAL;AACN;AACA"}
1
+ {"version":3,"file":"clob.cjs","names":[],"sources":["../../src/types/clob.ts"],"sourcesContent":["import { Side } from \"../order-utils/model/side.js\";\n\nexport { Side };\n\nexport interface ApiKeyCreds {\n\tkey: string;\n\tsecret: string;\n\tpassphrase: string;\n}\n\nexport interface BuilderConfig {\n\tbuilderCode: string;\n}\n\nexport interface ApiKeyRaw {\n\tapiKey: string;\n\tsecret: string;\n\tpassphrase: string;\n}\n\nexport interface L2HeaderArgs {\n\tmethod: string;\n\trequestPath: string;\n\tbody?: string;\n}\n\nexport type SimpleHeaders = Record<string, string | number | boolean>;\n\n// EIP712 sig verification\nexport interface L1PolyHeader extends SimpleHeaders {\n\tPOLY_ADDRESS: string;\n\tPOLY_SIGNATURE: string;\n\tPOLY_TIMESTAMP: string;\n\tPOLY_NONCE: string;\n}\n\n// API key verification\nexport interface L2PolyHeader extends SimpleHeaders {\n\tPOLY_ADDRESS: string;\n\tPOLY_SIGNATURE: string;\n\tPOLY_TIMESTAMP: string;\n\tPOLY_API_KEY: string;\n\tPOLY_PASSPHRASE: string;\n}\n\nexport enum OrderType {\n\tGTC = \"GTC\",\n\tFOK = \"FOK\",\n\tGTD = \"GTD\",\n\tFAK = \"FAK\",\n}\n\nexport interface OrderPayload {\n\torderID: string;\n}\n\nexport interface OrderResponse {\n\tsuccess: boolean;\n\terrorMsg: string;\n\torderID: string;\n\t/**\n\t * Settlement transaction hashes for the order's trades, returned on a\n\t * best-effort basis when the order matched.\n\t */\n\ttransactionsHashes?: string[];\n\t/** IDs of the trades created when the order matched. */\n\ttradeIDs?: string[];\n\tstatus: string;\n\ttakingAmount: string;\n\tmakingAmount: string;\n}\n\nexport interface OpenOrder {\n\tid: string;\n\tstatus: string;\n\towner: string;\n\tmaker_address: string;\n\tmarket: string;\n\tasset_id: string;\n\tside: string;\n\toriginal_size: string;\n\tsize_matched: string;\n\tprice: string;\n\tassociate_trades: string[];\n\toutcome: string;\n\tcreated_at: number;\n\texpiration: string;\n\torder_type: string;\n}\n\nexport type OpenOrdersResponse = OpenOrder[];\n\nexport type PreMigrationOrder = OpenOrder;\n\nexport type PreMigrationOrdersResponse = PreMigrationOrder[];\n\nexport interface MakerOrder {\n\torder_id: string;\n\towner: string;\n\tmaker_address: string;\n\tmatched_amount: string;\n\tprice: string;\n\tfee_rate_bps: string;\n\tasset_id: string;\n\toutcome: string;\n\tside?: Side;\n\tbuilder_fee?: string;\n\tbuilder_code?: string;\n}\n\nexport interface Trade {\n\tid: string;\n\ttaker_order_id: string;\n\tmarket: string;\n\tasset_id: string;\n\tside: Side;\n\tsize: string;\n\tfee_rate_bps: string;\n\tprice: string;\n\tstatus: string;\n\tmatch_time: string;\n\tmatch_time_nano?: string;\n\tlast_update: string;\n\toutcome: string;\n\tbucket_index: number;\n\towner: string;\n\tmaker_address: string;\n\tmaker_orders: MakerOrder[];\n\ttransaction_hash?: string;\n\terr_msg?: string | null;\n\ttrader_side: \"TAKER\" | \"MAKER\";\n}\n\nexport interface ApiKeysResponse {\n\tapiKeys: ApiKeyCreds[];\n}\n\nexport interface BanStatus {\n\tclosed_only: boolean;\n}\n\nexport interface TradeParams {\n\tid?: string;\n\tmaker_address?: string;\n\tmarket?: string;\n\tasset_id?: string;\n\tbefore?: string;\n\tafter?: string;\n}\n\nexport interface BuilderTradeParams extends TradeParams {\n\tbuilder_code: string;\n}\n\nexport interface OpenOrderParams {\n\tid?: string;\n\tmarket?: string;\n\tasset_id?: string;\n}\n\nexport enum Chain {\n\tPOLYGON = 137,\n\tAMOY = 80002,\n}\n\nexport interface MarketPrice {\n\tt: number; // timestamp\n\tp: number; // price\n}\n\nexport interface PriceHistoryFilterParams {\n\tmarket?: string;\n\tstartTs?: number;\n\tendTs?: number;\n\tfidelity?: number;\n\tinterval?: PriceHistoryInterval;\n}\n\nexport enum PriceHistoryInterval {\n\tMAX = \"max\",\n\tONE_WEEK = \"1w\",\n\tONE_DAY = \"1d\",\n\tSIX_HOURS = \"6h\",\n\tONE_HOUR = \"1h\",\n}\n\nexport interface DropNotificationParams {\n\tids: string[];\n}\n\nexport interface Notification {\n\ttype: number;\n\towner: string;\n\n\tpayload: any;\n}\n\nexport interface OrderMarketCancelParams {\n\tmarket?: string;\n\tasset_id?: string;\n}\n\nexport interface OrderBookSummary {\n\tmarket: string;\n\tasset_id: string;\n\ttimestamp: string;\n\tbids: OrderSummary[];\n\tasks: OrderSummary[];\n\tmin_order_size: string;\n\ttick_size: string;\n\tneg_risk: boolean;\n\thash: string;\n\tlast_trade_price: string;\n}\n\nexport interface OrderSummary {\n\tprice: string;\n\tsize: string;\n}\n\nexport enum AssetType {\n\tCOLLATERAL = \"COLLATERAL\",\n\tCONDITIONAL = \"CONDITIONAL\",\n}\n\nexport interface BalanceAllowanceParams {\n\tasset_type: AssetType;\n\ttoken_id?: string;\n}\n\nexport interface BalanceAllowanceResponse {\n\tbalance: string;\n\tallowances: Record<string, string>;\n}\n\nexport interface OrderScoringParams {\n\torder_id: string;\n}\n\nexport interface OrderScoring {\n\tscoring: boolean;\n}\n\nexport interface OrdersScoringParams {\n\torderIds: string[];\n}\n\nexport type OrdersScoring = { [orderId in string]: boolean };\n\nexport type OrderVersion = 1 | 2 | 3;\n\nexport type CreateOrderOptions = {\n\ttickSize: TickSize;\n\tnegRisk?: boolean;\n\tversion?: OrderVersion;\n};\n\nexport type TickSize = \"0.1\" | \"0.01\" | \"0.005\" | \"0.0025\" | \"0.001\" | \"0.0001\";\n\nexport interface RoundConfig {\n\treadonly price: number;\n\treadonly size: number;\n\treadonly amount: number;\n}\n\nexport interface TickSizes {\n\t[tokenId: string]: TickSize;\n}\n\nexport interface FeeRates {\n\t[tokenId: string]: number;\n}\n\nexport interface NegRisk {\n\t[tokenId: string]: boolean;\n}\n\nexport interface FeeInfo {\n\trate: number;\n\texponent: number;\n}\n\nexport interface FeeInfos {\n\t[tokenId: string]: FeeInfo;\n}\n\nexport interface BuilderFeeRates {\n\t[builderCode: string]: { maker: number; taker: number };\n}\n\nexport type TokenConditionMap = Record<string, string>;\n\nexport interface FeeDetails {\n\tr?: number; // fee rate\n\te?: number; // fee exponent\n\tto?: boolean; // taker only (omitted when false)\n}\n\nexport interface ClobRewards {\n\tmi?: number; // min size\n\tma?: number; // max spread\n\te?: boolean; // enabled\n\tsmoa?: boolean; // skip min order age\n\tmoas?: number; // min order age seconds\n}\n\nexport interface ClobToken {\n\tt: string; // token ID\n\to: string; // outcome\n}\n\nexport interface MarketDetails {\n\tc: string; // condition ID\n\tt: [ClobToken, ClobToken]; // YES and NO tokens\n\tmts: number; // min tick size\n\tnr?: boolean; // neg risk (omitted when false)\n\tfd?: FeeDetails; // platform fee details\n\tmbf?: number; // maker base fee\n\ttbf?: number; // taker base fee\n\tr: ClobRewards | null; // rewards config (always present, null if unset)\n\tao?: boolean; // accepting orders\n\tmos?: number; // min order size\n\tsd?: number; // seconds delay\n\tgst?: string; // game start time (ISO 8601)\n\tcbos?: boolean; // clear book on start\n\taot?: string; // accepting orders timestamp (ISO 8601)\n\trfqe?: boolean; // RFQ enabled\n\titode?: boolean; // taker order delay enabled\n\tibce?: boolean; // blockaid check enabled\n}\n\nexport interface PaginationPayload {\n\treadonly limit: number;\n\treadonly count: number;\n\treadonly next_cursor: string;\n\treadonly data: any[];\n}\n\nexport interface BookParams {\n\ttoken_id: string;\n\tside: Side;\n}\n\nexport interface UserEarning {\n\tdate: string;\n\tcondition_id: string;\n\tasset_address: string;\n\tmaker_address: string;\n\tearnings: number;\n\tasset_rate: number;\n}\n\nexport interface TotalUserEarning {\n\tdate: string;\n\tasset_address: string;\n\tmaker_address: string;\n\tearnings: number;\n\tasset_rate: number;\n}\n\nexport interface RewardsPercentages {\n\t[market: string]: number;\n}\n\nexport interface Token {\n\ttoken_id: string;\n\toutcome: string;\n\tprice: number;\n}\n\nexport interface RewardsConfig {\n\tasset_address: string;\n\tstart_date: string;\n\tend_date: string;\n\trate_per_day: number;\n\ttotal_rewards: number;\n}\n\nexport interface MarketReward {\n\tcondition_id: string;\n\tquestion: string;\n\tmarket_slug: string;\n\tevent_slug: string;\n\timage: string;\n\trewards_max_spread: number;\n\trewards_min_size: number;\n\ttokens: Token[];\n\trewards_config: RewardsConfig[];\n}\n\nexport interface Earning {\n\tasset_address: string;\n\tearnings: number;\n\tasset_rate: number;\n}\n\nexport interface UserRewardsEarning {\n\tcondition_id: string;\n\tquestion: string;\n\tmarket_slug: string;\n\tevent_slug: string;\n\timage: string;\n\trewards_max_spread: number;\n\trewards_min_size: number;\n\tmarket_competitiveness: number;\n\ttokens: Token[];\n\trewards_config: RewardsConfig[];\n\tmaker_address: string;\n\tearning_percentage: number;\n\tearnings: Earning[];\n}\n\nexport interface BuilderTrade {\n\tid: string;\n\ttradeType: string;\n\ttakerOrderHash: string;\n\tbuilder: string;\n\tmarket: string;\n\tassetId: string;\n\tside: string;\n\tsize: string;\n\tsizeUsdc: string;\n\tprice: string;\n\tstatus: string;\n\toutcome: string;\n\toutcomeIndex: number;\n\towner: string;\n\tmaker: string;\n\ttransactionHash: string;\n\tmatchTime: string;\n\tbucketIndex: number;\n\tfee: string;\n\tfeeUsdc: string;\n\tbuilderFee: string;\n\tbuilderCode: string;\n\terr_msg?: string | null;\n\tcreatedAt: string | null;\n\tupdatedAt: string | null;\n}\n\nexport interface ReadonlyApiKeyResponse {\n\tapiKey: string;\n}\n\nexport interface MarketTradeEvent {\n\tevent_type: string;\n\tmarket: {\n\t\tcondition_id: string;\n\t\tasset_id: string;\n\t\tquestion: string;\n\t\ticon: string;\n\t\tslug: string;\n\t};\n\tuser: {\n\t\taddress: string;\n\t\tusername: string;\n\t\tprofile_picture: string;\n\t\toptimized_profile_picture: string;\n\t\tpseudonym: string;\n\t};\n\tside: Side;\n\tsize: string;\n\tfee_rate_bps: string;\n\tprice: string;\n\toutcome: string;\n\toutcome_index: number;\n\ttransaction_hash: string;\n\ttimestamp: string;\n}\n\nexport interface BuilderApiKey {\n\tkey: string;\n\tsecret: string;\n\tpassphrase: string;\n}\n\nexport interface BuilderApiKeyResponse {\n\tkey: string;\n\tcreatedAt?: string;\n\trevokedAt?: string;\n}\n\nexport type ClobErrorResponseBody = {\n\terror: string;\n};\n\nexport interface TradesPaginatedResponse {\n\ttrades: Trade[];\n\tnext_cursor: string;\n\tlimit: number;\n\tcount: number;\n}\n\nexport interface BuilderTradesResponse {\n\ttrades: BuilderTrade[];\n\tnext_cursor: string;\n\tlimit: number;\n\tcount: number;\n}\n"],"mappings":";;;AA6CA,IAAY,kDAAL;AACN;AACA;AACA;AACA;;;AA+GD,IAAY,0CAAL;AACN;AACA;;;AAgBD,IAAY,wEAAL;AACN;AACA;AACA;AACA;AACA;;;AAqCD,IAAY,kDAAL;AACN;AACA"}
@@ -46,7 +46,12 @@ interface OrderResponse {
46
46
  success: boolean;
47
47
  errorMsg: string;
48
48
  orderID: string;
49
+ /**
50
+ * Settlement transaction hashes for the order's trades, returned on a
51
+ * best-effort basis when the order matched.
52
+ */
49
53
  transactionsHashes?: string[];
54
+ /** IDs of the trades created when the order matched. */
50
55
  tradeIDs?: string[];
51
56
  status: string;
52
57
  takingAmount: string;
@@ -46,7 +46,12 @@ interface OrderResponse {
46
46
  success: boolean;
47
47
  errorMsg: string;
48
48
  orderID: string;
49
+ /**
50
+ * Settlement transaction hashes for the order's trades, returned on a
51
+ * best-effort basis when the order matched.
52
+ */
49
53
  transactionsHashes?: string[];
54
+ /** IDs of the trades created when the order matched. */
50
55
  tradeIDs?: string[];
51
56
  status: string;
52
57
  takingAmount: string;
@@ -1 +1 @@
1
- {"version":3,"file":"clob.js","names":[],"sources":["../../src/types/clob.ts"],"sourcesContent":["import { Side } from \"../order-utils/model/side.js\";\n\nexport { Side };\n\nexport interface ApiKeyCreds {\n\tkey: string;\n\tsecret: string;\n\tpassphrase: string;\n}\n\nexport interface BuilderConfig {\n\tbuilderCode: string;\n}\n\nexport interface ApiKeyRaw {\n\tapiKey: string;\n\tsecret: string;\n\tpassphrase: string;\n}\n\nexport interface L2HeaderArgs {\n\tmethod: string;\n\trequestPath: string;\n\tbody?: string;\n}\n\nexport type SimpleHeaders = Record<string, string | number | boolean>;\n\n// EIP712 sig verification\nexport interface L1PolyHeader extends SimpleHeaders {\n\tPOLY_ADDRESS: string;\n\tPOLY_SIGNATURE: string;\n\tPOLY_TIMESTAMP: string;\n\tPOLY_NONCE: string;\n}\n\n// API key verification\nexport interface L2PolyHeader extends SimpleHeaders {\n\tPOLY_ADDRESS: string;\n\tPOLY_SIGNATURE: string;\n\tPOLY_TIMESTAMP: string;\n\tPOLY_API_KEY: string;\n\tPOLY_PASSPHRASE: string;\n}\n\nexport enum OrderType {\n\tGTC = \"GTC\",\n\tFOK = \"FOK\",\n\tGTD = \"GTD\",\n\tFAK = \"FAK\",\n}\n\nexport interface OrderPayload {\n\torderID: string;\n}\n\nexport interface OrderResponse {\n\tsuccess: boolean;\n\terrorMsg: string;\n\torderID: string;\n\ttransactionsHashes?: string[];\n\ttradeIDs?: string[];\n\tstatus: string;\n\ttakingAmount: string;\n\tmakingAmount: string;\n}\n\nexport interface OpenOrder {\n\tid: string;\n\tstatus: string;\n\towner: string;\n\tmaker_address: string;\n\tmarket: string;\n\tasset_id: string;\n\tside: string;\n\toriginal_size: string;\n\tsize_matched: string;\n\tprice: string;\n\tassociate_trades: string[];\n\toutcome: string;\n\tcreated_at: number;\n\texpiration: string;\n\torder_type: string;\n}\n\nexport type OpenOrdersResponse = OpenOrder[];\n\nexport type PreMigrationOrder = OpenOrder;\n\nexport type PreMigrationOrdersResponse = PreMigrationOrder[];\n\nexport interface MakerOrder {\n\torder_id: string;\n\towner: string;\n\tmaker_address: string;\n\tmatched_amount: string;\n\tprice: string;\n\tfee_rate_bps: string;\n\tasset_id: string;\n\toutcome: string;\n\tside?: Side;\n\tbuilder_fee?: string;\n\tbuilder_code?: string;\n}\n\nexport interface Trade {\n\tid: string;\n\ttaker_order_id: string;\n\tmarket: string;\n\tasset_id: string;\n\tside: Side;\n\tsize: string;\n\tfee_rate_bps: string;\n\tprice: string;\n\tstatus: string;\n\tmatch_time: string;\n\tmatch_time_nano?: string;\n\tlast_update: string;\n\toutcome: string;\n\tbucket_index: number;\n\towner: string;\n\tmaker_address: string;\n\tmaker_orders: MakerOrder[];\n\ttransaction_hash?: string;\n\terr_msg?: string | null;\n\ttrader_side: \"TAKER\" | \"MAKER\";\n}\n\nexport interface ApiKeysResponse {\n\tapiKeys: ApiKeyCreds[];\n}\n\nexport interface BanStatus {\n\tclosed_only: boolean;\n}\n\nexport interface TradeParams {\n\tid?: string;\n\tmaker_address?: string;\n\tmarket?: string;\n\tasset_id?: string;\n\tbefore?: string;\n\tafter?: string;\n}\n\nexport interface BuilderTradeParams extends TradeParams {\n\tbuilder_code: string;\n}\n\nexport interface OpenOrderParams {\n\tid?: string;\n\tmarket?: string;\n\tasset_id?: string;\n}\n\nexport enum Chain {\n\tPOLYGON = 137,\n\tAMOY = 80002,\n}\n\nexport interface MarketPrice {\n\tt: number; // timestamp\n\tp: number; // price\n}\n\nexport interface PriceHistoryFilterParams {\n\tmarket?: string;\n\tstartTs?: number;\n\tendTs?: number;\n\tfidelity?: number;\n\tinterval?: PriceHistoryInterval;\n}\n\nexport enum PriceHistoryInterval {\n\tMAX = \"max\",\n\tONE_WEEK = \"1w\",\n\tONE_DAY = \"1d\",\n\tSIX_HOURS = \"6h\",\n\tONE_HOUR = \"1h\",\n}\n\nexport interface DropNotificationParams {\n\tids: string[];\n}\n\nexport interface Notification {\n\ttype: number;\n\towner: string;\n\n\tpayload: any;\n}\n\nexport interface OrderMarketCancelParams {\n\tmarket?: string;\n\tasset_id?: string;\n}\n\nexport interface OrderBookSummary {\n\tmarket: string;\n\tasset_id: string;\n\ttimestamp: string;\n\tbids: OrderSummary[];\n\tasks: OrderSummary[];\n\tmin_order_size: string;\n\ttick_size: string;\n\tneg_risk: boolean;\n\thash: string;\n\tlast_trade_price: string;\n}\n\nexport interface OrderSummary {\n\tprice: string;\n\tsize: string;\n}\n\nexport enum AssetType {\n\tCOLLATERAL = \"COLLATERAL\",\n\tCONDITIONAL = \"CONDITIONAL\",\n}\n\nexport interface BalanceAllowanceParams {\n\tasset_type: AssetType;\n\ttoken_id?: string;\n}\n\nexport interface BalanceAllowanceResponse {\n\tbalance: string;\n\tallowances: Record<string, string>;\n}\n\nexport interface OrderScoringParams {\n\torder_id: string;\n}\n\nexport interface OrderScoring {\n\tscoring: boolean;\n}\n\nexport interface OrdersScoringParams {\n\torderIds: string[];\n}\n\nexport type OrdersScoring = { [orderId in string]: boolean };\n\nexport type OrderVersion = 1 | 2 | 3;\n\nexport type CreateOrderOptions = {\n\ttickSize: TickSize;\n\tnegRisk?: boolean;\n\tversion?: OrderVersion;\n};\n\nexport type TickSize = \"0.1\" | \"0.01\" | \"0.005\" | \"0.0025\" | \"0.001\" | \"0.0001\";\n\nexport interface RoundConfig {\n\treadonly price: number;\n\treadonly size: number;\n\treadonly amount: number;\n}\n\nexport interface TickSizes {\n\t[tokenId: string]: TickSize;\n}\n\nexport interface FeeRates {\n\t[tokenId: string]: number;\n}\n\nexport interface NegRisk {\n\t[tokenId: string]: boolean;\n}\n\nexport interface FeeInfo {\n\trate: number;\n\texponent: number;\n}\n\nexport interface FeeInfos {\n\t[tokenId: string]: FeeInfo;\n}\n\nexport interface BuilderFeeRates {\n\t[builderCode: string]: { maker: number; taker: number };\n}\n\nexport type TokenConditionMap = Record<string, string>;\n\nexport interface FeeDetails {\n\tr?: number; // fee rate\n\te?: number; // fee exponent\n\tto?: boolean; // taker only (omitted when false)\n}\n\nexport interface ClobRewards {\n\tmi?: number; // min size\n\tma?: number; // max spread\n\te?: boolean; // enabled\n\tsmoa?: boolean; // skip min order age\n\tmoas?: number; // min order age seconds\n}\n\nexport interface ClobToken {\n\tt: string; // token ID\n\to: string; // outcome\n}\n\nexport interface MarketDetails {\n\tc: string; // condition ID\n\tt: [ClobToken, ClobToken]; // YES and NO tokens\n\tmts: number; // min tick size\n\tnr?: boolean; // neg risk (omitted when false)\n\tfd?: FeeDetails; // platform fee details\n\tmbf?: number; // maker base fee\n\ttbf?: number; // taker base fee\n\tr: ClobRewards | null; // rewards config (always present, null if unset)\n\tao?: boolean; // accepting orders\n\tmos?: number; // min order size\n\tsd?: number; // seconds delay\n\tgst?: string; // game start time (ISO 8601)\n\tcbos?: boolean; // clear book on start\n\taot?: string; // accepting orders timestamp (ISO 8601)\n\trfqe?: boolean; // RFQ enabled\n\titode?: boolean; // taker order delay enabled\n\tibce?: boolean; // blockaid check enabled\n}\n\nexport interface PaginationPayload {\n\treadonly limit: number;\n\treadonly count: number;\n\treadonly next_cursor: string;\n\treadonly data: any[];\n}\n\nexport interface BookParams {\n\ttoken_id: string;\n\tside: Side;\n}\n\nexport interface UserEarning {\n\tdate: string;\n\tcondition_id: string;\n\tasset_address: string;\n\tmaker_address: string;\n\tearnings: number;\n\tasset_rate: number;\n}\n\nexport interface TotalUserEarning {\n\tdate: string;\n\tasset_address: string;\n\tmaker_address: string;\n\tearnings: number;\n\tasset_rate: number;\n}\n\nexport interface RewardsPercentages {\n\t[market: string]: number;\n}\n\nexport interface Token {\n\ttoken_id: string;\n\toutcome: string;\n\tprice: number;\n}\n\nexport interface RewardsConfig {\n\tasset_address: string;\n\tstart_date: string;\n\tend_date: string;\n\trate_per_day: number;\n\ttotal_rewards: number;\n}\n\nexport interface MarketReward {\n\tcondition_id: string;\n\tquestion: string;\n\tmarket_slug: string;\n\tevent_slug: string;\n\timage: string;\n\trewards_max_spread: number;\n\trewards_min_size: number;\n\ttokens: Token[];\n\trewards_config: RewardsConfig[];\n}\n\nexport interface Earning {\n\tasset_address: string;\n\tearnings: number;\n\tasset_rate: number;\n}\n\nexport interface UserRewardsEarning {\n\tcondition_id: string;\n\tquestion: string;\n\tmarket_slug: string;\n\tevent_slug: string;\n\timage: string;\n\trewards_max_spread: number;\n\trewards_min_size: number;\n\tmarket_competitiveness: number;\n\ttokens: Token[];\n\trewards_config: RewardsConfig[];\n\tmaker_address: string;\n\tearning_percentage: number;\n\tearnings: Earning[];\n}\n\nexport interface BuilderTrade {\n\tid: string;\n\ttradeType: string;\n\ttakerOrderHash: string;\n\tbuilder: string;\n\tmarket: string;\n\tassetId: string;\n\tside: string;\n\tsize: string;\n\tsizeUsdc: string;\n\tprice: string;\n\tstatus: string;\n\toutcome: string;\n\toutcomeIndex: number;\n\towner: string;\n\tmaker: string;\n\ttransactionHash: string;\n\tmatchTime: string;\n\tbucketIndex: number;\n\tfee: string;\n\tfeeUsdc: string;\n\tbuilderFee: string;\n\tbuilderCode: string;\n\terr_msg?: string | null;\n\tcreatedAt: string | null;\n\tupdatedAt: string | null;\n}\n\nexport interface ReadonlyApiKeyResponse {\n\tapiKey: string;\n}\n\nexport interface MarketTradeEvent {\n\tevent_type: string;\n\tmarket: {\n\t\tcondition_id: string;\n\t\tasset_id: string;\n\t\tquestion: string;\n\t\ticon: string;\n\t\tslug: string;\n\t};\n\tuser: {\n\t\taddress: string;\n\t\tusername: string;\n\t\tprofile_picture: string;\n\t\toptimized_profile_picture: string;\n\t\tpseudonym: string;\n\t};\n\tside: Side;\n\tsize: string;\n\tfee_rate_bps: string;\n\tprice: string;\n\toutcome: string;\n\toutcome_index: number;\n\ttransaction_hash: string;\n\ttimestamp: string;\n}\n\nexport interface BuilderApiKey {\n\tkey: string;\n\tsecret: string;\n\tpassphrase: string;\n}\n\nexport interface BuilderApiKeyResponse {\n\tkey: string;\n\tcreatedAt?: string;\n\trevokedAt?: string;\n}\n\nexport type ClobErrorResponseBody = {\n\terror: string;\n};\n\nexport interface TradesPaginatedResponse {\n\ttrades: Trade[];\n\tnext_cursor: string;\n\tlimit: number;\n\tcount: number;\n}\n\nexport interface BuilderTradesResponse {\n\ttrades: BuilderTrade[];\n\tnext_cursor: string;\n\tlimit: number;\n\tcount: number;\n}\n"],"mappings":";;;AA6CA,IAAY,kDAAL;AACN;AACA;AACA;AACA;;;AA0GD,IAAY,0CAAL;AACN;AACA;;;AAgBD,IAAY,wEAAL;AACN;AACA;AACA;AACA;AACA;;;AAqCD,IAAY,kDAAL;AACN;AACA"}
1
+ {"version":3,"file":"clob.js","names":[],"sources":["../../src/types/clob.ts"],"sourcesContent":["import { Side } from \"../order-utils/model/side.js\";\n\nexport { Side };\n\nexport interface ApiKeyCreds {\n\tkey: string;\n\tsecret: string;\n\tpassphrase: string;\n}\n\nexport interface BuilderConfig {\n\tbuilderCode: string;\n}\n\nexport interface ApiKeyRaw {\n\tapiKey: string;\n\tsecret: string;\n\tpassphrase: string;\n}\n\nexport interface L2HeaderArgs {\n\tmethod: string;\n\trequestPath: string;\n\tbody?: string;\n}\n\nexport type SimpleHeaders = Record<string, string | number | boolean>;\n\n// EIP712 sig verification\nexport interface L1PolyHeader extends SimpleHeaders {\n\tPOLY_ADDRESS: string;\n\tPOLY_SIGNATURE: string;\n\tPOLY_TIMESTAMP: string;\n\tPOLY_NONCE: string;\n}\n\n// API key verification\nexport interface L2PolyHeader extends SimpleHeaders {\n\tPOLY_ADDRESS: string;\n\tPOLY_SIGNATURE: string;\n\tPOLY_TIMESTAMP: string;\n\tPOLY_API_KEY: string;\n\tPOLY_PASSPHRASE: string;\n}\n\nexport enum OrderType {\n\tGTC = \"GTC\",\n\tFOK = \"FOK\",\n\tGTD = \"GTD\",\n\tFAK = \"FAK\",\n}\n\nexport interface OrderPayload {\n\torderID: string;\n}\n\nexport interface OrderResponse {\n\tsuccess: boolean;\n\terrorMsg: string;\n\torderID: string;\n\t/**\n\t * Settlement transaction hashes for the order's trades, returned on a\n\t * best-effort basis when the order matched.\n\t */\n\ttransactionsHashes?: string[];\n\t/** IDs of the trades created when the order matched. */\n\ttradeIDs?: string[];\n\tstatus: string;\n\ttakingAmount: string;\n\tmakingAmount: string;\n}\n\nexport interface OpenOrder {\n\tid: string;\n\tstatus: string;\n\towner: string;\n\tmaker_address: string;\n\tmarket: string;\n\tasset_id: string;\n\tside: string;\n\toriginal_size: string;\n\tsize_matched: string;\n\tprice: string;\n\tassociate_trades: string[];\n\toutcome: string;\n\tcreated_at: number;\n\texpiration: string;\n\torder_type: string;\n}\n\nexport type OpenOrdersResponse = OpenOrder[];\n\nexport type PreMigrationOrder = OpenOrder;\n\nexport type PreMigrationOrdersResponse = PreMigrationOrder[];\n\nexport interface MakerOrder {\n\torder_id: string;\n\towner: string;\n\tmaker_address: string;\n\tmatched_amount: string;\n\tprice: string;\n\tfee_rate_bps: string;\n\tasset_id: string;\n\toutcome: string;\n\tside?: Side;\n\tbuilder_fee?: string;\n\tbuilder_code?: string;\n}\n\nexport interface Trade {\n\tid: string;\n\ttaker_order_id: string;\n\tmarket: string;\n\tasset_id: string;\n\tside: Side;\n\tsize: string;\n\tfee_rate_bps: string;\n\tprice: string;\n\tstatus: string;\n\tmatch_time: string;\n\tmatch_time_nano?: string;\n\tlast_update: string;\n\toutcome: string;\n\tbucket_index: number;\n\towner: string;\n\tmaker_address: string;\n\tmaker_orders: MakerOrder[];\n\ttransaction_hash?: string;\n\terr_msg?: string | null;\n\ttrader_side: \"TAKER\" | \"MAKER\";\n}\n\nexport interface ApiKeysResponse {\n\tapiKeys: ApiKeyCreds[];\n}\n\nexport interface BanStatus {\n\tclosed_only: boolean;\n}\n\nexport interface TradeParams {\n\tid?: string;\n\tmaker_address?: string;\n\tmarket?: string;\n\tasset_id?: string;\n\tbefore?: string;\n\tafter?: string;\n}\n\nexport interface BuilderTradeParams extends TradeParams {\n\tbuilder_code: string;\n}\n\nexport interface OpenOrderParams {\n\tid?: string;\n\tmarket?: string;\n\tasset_id?: string;\n}\n\nexport enum Chain {\n\tPOLYGON = 137,\n\tAMOY = 80002,\n}\n\nexport interface MarketPrice {\n\tt: number; // timestamp\n\tp: number; // price\n}\n\nexport interface PriceHistoryFilterParams {\n\tmarket?: string;\n\tstartTs?: number;\n\tendTs?: number;\n\tfidelity?: number;\n\tinterval?: PriceHistoryInterval;\n}\n\nexport enum PriceHistoryInterval {\n\tMAX = \"max\",\n\tONE_WEEK = \"1w\",\n\tONE_DAY = \"1d\",\n\tSIX_HOURS = \"6h\",\n\tONE_HOUR = \"1h\",\n}\n\nexport interface DropNotificationParams {\n\tids: string[];\n}\n\nexport interface Notification {\n\ttype: number;\n\towner: string;\n\n\tpayload: any;\n}\n\nexport interface OrderMarketCancelParams {\n\tmarket?: string;\n\tasset_id?: string;\n}\n\nexport interface OrderBookSummary {\n\tmarket: string;\n\tasset_id: string;\n\ttimestamp: string;\n\tbids: OrderSummary[];\n\tasks: OrderSummary[];\n\tmin_order_size: string;\n\ttick_size: string;\n\tneg_risk: boolean;\n\thash: string;\n\tlast_trade_price: string;\n}\n\nexport interface OrderSummary {\n\tprice: string;\n\tsize: string;\n}\n\nexport enum AssetType {\n\tCOLLATERAL = \"COLLATERAL\",\n\tCONDITIONAL = \"CONDITIONAL\",\n}\n\nexport interface BalanceAllowanceParams {\n\tasset_type: AssetType;\n\ttoken_id?: string;\n}\n\nexport interface BalanceAllowanceResponse {\n\tbalance: string;\n\tallowances: Record<string, string>;\n}\n\nexport interface OrderScoringParams {\n\torder_id: string;\n}\n\nexport interface OrderScoring {\n\tscoring: boolean;\n}\n\nexport interface OrdersScoringParams {\n\torderIds: string[];\n}\n\nexport type OrdersScoring = { [orderId in string]: boolean };\n\nexport type OrderVersion = 1 | 2 | 3;\n\nexport type CreateOrderOptions = {\n\ttickSize: TickSize;\n\tnegRisk?: boolean;\n\tversion?: OrderVersion;\n};\n\nexport type TickSize = \"0.1\" | \"0.01\" | \"0.005\" | \"0.0025\" | \"0.001\" | \"0.0001\";\n\nexport interface RoundConfig {\n\treadonly price: number;\n\treadonly size: number;\n\treadonly amount: number;\n}\n\nexport interface TickSizes {\n\t[tokenId: string]: TickSize;\n}\n\nexport interface FeeRates {\n\t[tokenId: string]: number;\n}\n\nexport interface NegRisk {\n\t[tokenId: string]: boolean;\n}\n\nexport interface FeeInfo {\n\trate: number;\n\texponent: number;\n}\n\nexport interface FeeInfos {\n\t[tokenId: string]: FeeInfo;\n}\n\nexport interface BuilderFeeRates {\n\t[builderCode: string]: { maker: number; taker: number };\n}\n\nexport type TokenConditionMap = Record<string, string>;\n\nexport interface FeeDetails {\n\tr?: number; // fee rate\n\te?: number; // fee exponent\n\tto?: boolean; // taker only (omitted when false)\n}\n\nexport interface ClobRewards {\n\tmi?: number; // min size\n\tma?: number; // max spread\n\te?: boolean; // enabled\n\tsmoa?: boolean; // skip min order age\n\tmoas?: number; // min order age seconds\n}\n\nexport interface ClobToken {\n\tt: string; // token ID\n\to: string; // outcome\n}\n\nexport interface MarketDetails {\n\tc: string; // condition ID\n\tt: [ClobToken, ClobToken]; // YES and NO tokens\n\tmts: number; // min tick size\n\tnr?: boolean; // neg risk (omitted when false)\n\tfd?: FeeDetails; // platform fee details\n\tmbf?: number; // maker base fee\n\ttbf?: number; // taker base fee\n\tr: ClobRewards | null; // rewards config (always present, null if unset)\n\tao?: boolean; // accepting orders\n\tmos?: number; // min order size\n\tsd?: number; // seconds delay\n\tgst?: string; // game start time (ISO 8601)\n\tcbos?: boolean; // clear book on start\n\taot?: string; // accepting orders timestamp (ISO 8601)\n\trfqe?: boolean; // RFQ enabled\n\titode?: boolean; // taker order delay enabled\n\tibce?: boolean; // blockaid check enabled\n}\n\nexport interface PaginationPayload {\n\treadonly limit: number;\n\treadonly count: number;\n\treadonly next_cursor: string;\n\treadonly data: any[];\n}\n\nexport interface BookParams {\n\ttoken_id: string;\n\tside: Side;\n}\n\nexport interface UserEarning {\n\tdate: string;\n\tcondition_id: string;\n\tasset_address: string;\n\tmaker_address: string;\n\tearnings: number;\n\tasset_rate: number;\n}\n\nexport interface TotalUserEarning {\n\tdate: string;\n\tasset_address: string;\n\tmaker_address: string;\n\tearnings: number;\n\tasset_rate: number;\n}\n\nexport interface RewardsPercentages {\n\t[market: string]: number;\n}\n\nexport interface Token {\n\ttoken_id: string;\n\toutcome: string;\n\tprice: number;\n}\n\nexport interface RewardsConfig {\n\tasset_address: string;\n\tstart_date: string;\n\tend_date: string;\n\trate_per_day: number;\n\ttotal_rewards: number;\n}\n\nexport interface MarketReward {\n\tcondition_id: string;\n\tquestion: string;\n\tmarket_slug: string;\n\tevent_slug: string;\n\timage: string;\n\trewards_max_spread: number;\n\trewards_min_size: number;\n\ttokens: Token[];\n\trewards_config: RewardsConfig[];\n}\n\nexport interface Earning {\n\tasset_address: string;\n\tearnings: number;\n\tasset_rate: number;\n}\n\nexport interface UserRewardsEarning {\n\tcondition_id: string;\n\tquestion: string;\n\tmarket_slug: string;\n\tevent_slug: string;\n\timage: string;\n\trewards_max_spread: number;\n\trewards_min_size: number;\n\tmarket_competitiveness: number;\n\ttokens: Token[];\n\trewards_config: RewardsConfig[];\n\tmaker_address: string;\n\tearning_percentage: number;\n\tearnings: Earning[];\n}\n\nexport interface BuilderTrade {\n\tid: string;\n\ttradeType: string;\n\ttakerOrderHash: string;\n\tbuilder: string;\n\tmarket: string;\n\tassetId: string;\n\tside: string;\n\tsize: string;\n\tsizeUsdc: string;\n\tprice: string;\n\tstatus: string;\n\toutcome: string;\n\toutcomeIndex: number;\n\towner: string;\n\tmaker: string;\n\ttransactionHash: string;\n\tmatchTime: string;\n\tbucketIndex: number;\n\tfee: string;\n\tfeeUsdc: string;\n\tbuilderFee: string;\n\tbuilderCode: string;\n\terr_msg?: string | null;\n\tcreatedAt: string | null;\n\tupdatedAt: string | null;\n}\n\nexport interface ReadonlyApiKeyResponse {\n\tapiKey: string;\n}\n\nexport interface MarketTradeEvent {\n\tevent_type: string;\n\tmarket: {\n\t\tcondition_id: string;\n\t\tasset_id: string;\n\t\tquestion: string;\n\t\ticon: string;\n\t\tslug: string;\n\t};\n\tuser: {\n\t\taddress: string;\n\t\tusername: string;\n\t\tprofile_picture: string;\n\t\toptimized_profile_picture: string;\n\t\tpseudonym: string;\n\t};\n\tside: Side;\n\tsize: string;\n\tfee_rate_bps: string;\n\tprice: string;\n\toutcome: string;\n\toutcome_index: number;\n\ttransaction_hash: string;\n\ttimestamp: string;\n}\n\nexport interface BuilderApiKey {\n\tkey: string;\n\tsecret: string;\n\tpassphrase: string;\n}\n\nexport interface BuilderApiKeyResponse {\n\tkey: string;\n\tcreatedAt?: string;\n\trevokedAt?: string;\n}\n\nexport type ClobErrorResponseBody = {\n\terror: string;\n};\n\nexport interface TradesPaginatedResponse {\n\ttrades: Trade[];\n\tnext_cursor: string;\n\tlimit: number;\n\tcount: number;\n}\n\nexport interface BuilderTradesResponse {\n\ttrades: BuilderTrade[];\n\tnext_cursor: string;\n\tlimit: number;\n\tcount: number;\n}\n"],"mappings":";;;AA6CA,IAAY,kDAAL;AACN;AACA;AACA;AACA;;;AA+GD,IAAY,0CAAL;AACN;AACA;;;AAgBD,IAAY,wEAAL;AACN;AACA;AACA;AACA;AACA;;;AAqCD,IAAY,kDAAL;AACN;AACA"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@polymarket/clob-client-v2",
3
3
  "description": "TypeScript client for Polymarket's CLOB",
4
- "version": "1.0.7-canary.0",
4
+ "version": "1.1.0",
5
5
  "type": "module",
6
6
  "main": "dist/index.cjs",
7
7
  "types": "dist/index.d.ts",