@polymarket/clob-client-v2 1.1.0 → 1.2.0-canary.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.
Files changed (43) hide show
  1. package/README.md +16 -0
  2. package/dist/client.cjs +17 -14
  3. package/dist/client.cjs.map +1 -1
  4. package/dist/client.js +17 -14
  5. package/dist/client.js.map +1 -1
  6. package/dist/index.d.cts +2 -2
  7. package/dist/index.d.ts +2 -2
  8. package/dist/order-builder/helpers/buildMarketOrderCreationArgs.cjs +3 -2
  9. package/dist/order-builder/helpers/buildMarketOrderCreationArgs.cjs.map +1 -1
  10. package/dist/order-builder/helpers/buildMarketOrderCreationArgs.js +3 -2
  11. package/dist/order-builder/helpers/buildMarketOrderCreationArgs.js.map +1 -1
  12. package/dist/order-builder/helpers/buildOrderCreationArgs.cjs +3 -2
  13. package/dist/order-builder/helpers/buildOrderCreationArgs.cjs.map +1 -1
  14. package/dist/order-builder/helpers/buildOrderCreationArgs.js +3 -2
  15. package/dist/order-builder/helpers/buildOrderCreationArgs.js.map +1 -1
  16. package/dist/order-builder/helpers/createMarketOrder.cjs +6 -4
  17. package/dist/order-builder/helpers/createMarketOrder.cjs.map +1 -1
  18. package/dist/order-builder/helpers/createMarketOrder.js +6 -4
  19. package/dist/order-builder/helpers/createMarketOrder.js.map +1 -1
  20. package/dist/order-builder/helpers/createOrder.cjs +6 -4
  21. package/dist/order-builder/helpers/createOrder.cjs.map +1 -1
  22. package/dist/order-builder/helpers/createOrder.js +6 -4
  23. package/dist/order-builder/helpers/createOrder.js.map +1 -1
  24. package/dist/order-builder/helpers/orderAsset.cjs +16 -0
  25. package/dist/order-builder/helpers/orderAsset.cjs.map +1 -0
  26. package/dist/order-builder/helpers/orderAsset.js +14 -0
  27. package/dist/order-builder/helpers/orderAsset.js.map +1 -0
  28. package/dist/order-builder/orderBuilder.cjs +2 -2
  29. package/dist/order-builder/orderBuilder.cjs.map +1 -1
  30. package/dist/order-builder/orderBuilder.d.cts +2 -2
  31. package/dist/order-builder/orderBuilder.d.ts +2 -2
  32. package/dist/order-builder/orderBuilder.js +2 -2
  33. package/dist/order-builder/orderBuilder.js.map +1 -1
  34. package/dist/types/index.d.ts +1 -1
  35. package/dist/types/ordersV1.cjs.map +1 -1
  36. package/dist/types/ordersV1.d.cts +2 -0
  37. package/dist/types/ordersV1.d.ts +2 -0
  38. package/dist/types/ordersV1.js.map +1 -1
  39. package/dist/types/ordersV2.cjs.map +1 -1
  40. package/dist/types/ordersV2.d.cts +17 -13
  41. package/dist/types/ordersV2.d.ts +17 -13
  42. package/dist/types/ordersV2.js.map +1 -1
  43. package/package.json +1 -1
package/README.md CHANGED
@@ -46,6 +46,22 @@ const resp = await client.createAndPostOrder(
46
46
  console.log(resp);
47
47
  ```
48
48
 
49
+ For a position-backed outcome, provide `positionID` instead. The client uses
50
+ the identifier field to select Exchange V3 signing automatically:
51
+
52
+ ```ts
53
+ const resp = await client.createAndPostOrder(
54
+ {
55
+ positionID: "", // position ID of the market outcome
56
+ price: 0.4,
57
+ side: Side.BUY,
58
+ size: 100,
59
+ },
60
+ { tickSize: "0.01" },
61
+ OrderType.GTC,
62
+ );
63
+ ```
64
+
49
65
  See [examples](examples/) for more information.
50
66
 
51
67
  ### Market Orders
package/dist/client.cjs CHANGED
@@ -4,6 +4,7 @@ const require_errors = require('./errors.cjs');
4
4
  const require_index = require('./fees/index.cjs');
5
5
  const require_index$1 = require('./headers/index.cjs');
6
6
  const require_index$2 = require('./http-helpers/index.cjs');
7
+ const require_orderAsset = require('./order-builder/helpers/orderAsset.cjs');
7
8
  const require_signatureTypeV2 = require('./order-utils/model/signatureTypeV2.cjs');
8
9
  const require_side = require('./order-utils/model/side.cjs');
9
10
  const require_clob = require('./types/clob.cjs');
@@ -429,16 +430,17 @@ var ClobClient = class {
429
430
  this.canL1Auth();
430
431
  const orderToSign = { ...userOrder };
431
432
  if (this.builderConfig?.builderCode && !orderToSign.builderCode) orderToSign.builderCode = this.builderConfig.builderCode;
432
- const { tokenID } = orderToSign;
433
- const tickSize = await this._resolveTickSize(tokenID, options?.tickSize);
433
+ const routing = require_orderAsset.resolveOrderRouting(orderToSign, options?.version);
434
+ const { assetID } = routing;
435
+ const tickSize = await this._resolveTickSize(assetID, options?.tickSize);
434
436
  if (!require_utilities.priceValid(orderToSign.price, tickSize)) throw new Error(`invalid price (${orderToSign.price}), min: ${parseFloat(tickSize)} - max: ${1 - parseFloat(tickSize)}`);
435
437
  orderToSign.price = require_utilities.roundNormal(orderToSign.price, require_roundingConfig.ROUNDING_CONFIG[tickSize].price);
436
- const version = options?.version ?? await this.resolveVersion();
437
- if (version !== 1 && orderToSign.side === require_side.Side.BUY && "userUSDCBalance" in orderToSign && orderToSign.userUSDCBalance !== void 0) orderToSign.size = await this.adjustBuyAmountForBalance(tokenID, orderToSign.size * orderToSign.price, orderToSign.price, orderToSign.userUSDCBalance, orderToSign.builderCode) / orderToSign.price;
438
- const negRisk = options?.negRisk ?? await this.getNegRisk(tokenID);
438
+ const version = routing.exchangeVersion ?? await this.resolveVersion();
439
+ if (version !== 1 && orderToSign.side === require_side.Side.BUY && "userUSDCBalance" in orderToSign && orderToSign.userUSDCBalance !== void 0) orderToSign.size = await this.adjustBuyAmountForBalance(assetID, orderToSign.size * orderToSign.price, orderToSign.price, orderToSign.userUSDCBalance, orderToSign.builderCode) / orderToSign.price;
440
+ const negRisk = version === 3 ? false : options?.negRisk ?? await this.getNegRisk(assetID);
439
441
  if (version === 1) {
440
442
  const userFeeRateBps = "feeRateBps" in orderToSign ? orderToSign.feeRateBps : void 0;
441
- orderToSign.feeRateBps = await this._resolveFeeRateBps(tokenID, userFeeRateBps);
443
+ orderToSign.feeRateBps = await this._resolveFeeRateBps(assetID, userFeeRateBps);
442
444
  }
443
445
  return this.orderBuilder.buildOrder(orderToSign, {
444
446
  tickSize,
@@ -447,23 +449,24 @@ var ClobClient = class {
447
449
  }
448
450
  async createMarketOrder(userMarketOrder, options) {
449
451
  this.canL1Auth();
450
- const { tokenID } = userMarketOrder;
451
- await this._ensureMarketInfoCached(tokenID);
452
- const tickSize = await this._resolveTickSize(tokenID, options?.tickSize);
453
- if (!userMarketOrder.price) userMarketOrder.price = await this.calculateMarketPrice(tokenID, userMarketOrder.side, userMarketOrder.amount, userMarketOrder.orderType);
452
+ const routing = require_orderAsset.resolveOrderRouting(userMarketOrder, options?.version);
453
+ const { assetID } = routing;
454
+ await this._ensureMarketInfoCached(assetID);
455
+ const tickSize = await this._resolveTickSize(assetID, options?.tickSize);
456
+ if (!userMarketOrder.price) userMarketOrder.price = await this.calculateMarketPrice(assetID, userMarketOrder.side, userMarketOrder.amount, userMarketOrder.orderType);
454
457
  if (!require_utilities.priceValid(userMarketOrder.price, tickSize)) throw new Error(`invalid price (${userMarketOrder.price}), min: ${parseFloat(tickSize)} - max: ${1 - parseFloat(tickSize)}`);
455
458
  const orderToSign = { ...userMarketOrder };
456
459
  if (this.builderConfig?.builderCode && !orderToSign.builderCode) orderToSign.builderCode = this.builderConfig.builderCode;
457
460
  await this.ensureBuilderFeeRateCached(orderToSign.builderCode);
458
461
  if (orderToSign.side === require_side.Side.BUY && "userUSDCBalance" in orderToSign && orderToSign.userUSDCBalance !== void 0) {
459
462
  const price = orderToSign.price;
460
- orderToSign.amount = await this.adjustBuyAmountForBalance(tokenID, orderToSign.amount, price, orderToSign.userUSDCBalance, orderToSign.builderCode);
463
+ orderToSign.amount = await this.adjustBuyAmountForBalance(assetID, orderToSign.amount, price, orderToSign.userUSDCBalance, orderToSign.builderCode);
461
464
  }
462
- const negRisk = options?.negRisk ?? await this.getNegRisk(tokenID);
463
- const version = options?.version ?? await this.resolveVersion();
465
+ const version = routing.exchangeVersion ?? await this.resolveVersion();
466
+ const negRisk = version === 3 ? false : options?.negRisk ?? await this.getNegRisk(assetID);
464
467
  if (version === 1) {
465
468
  const userFeeRateBps = "feeRateBps" in orderToSign ? orderToSign.feeRateBps : void 0;
466
- orderToSign.feeRateBps = await this._resolveFeeRateBps(tokenID, userFeeRateBps);
469
+ orderToSign.feeRateBps = await this._resolveFeeRateBps(assetID, userFeeRateBps);
467
470
  }
468
471
  return this.orderBuilder.buildMarketOrder(orderToSign, {
469
472
  tickSize,
@@ -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: 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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"}
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","resolveOrderRouting","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 { resolveOrderRouting } from \"./order-builder/helpers/orderAsset.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 routing = resolveOrderRouting(orderToSign, options?.version);\n\t\tconst { assetID } = routing;\n\n\t\tconst tickSize = await this._resolveTickSize(assetID, 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 = routing.exchangeVersion ?? (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\tassetID,\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 =\n\t\t\tversion === 3 ? false : (options?.negRisk ?? (await this.getNegRisk(assetID)));\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(assetID, 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 routing = resolveOrderRouting(userMarketOrder, options?.version);\n\t\tconst { assetID } = routing;\n\n\t\tawait this._ensureMarketInfoCached(assetID);\n\n\t\tconst tickSize = await this._resolveTickSize(assetID, options?.tickSize);\n\n\t\tif (!userMarketOrder.price) {\n\t\t\tuserMarketOrder.price = await this.calculateMarketPrice(\n\t\t\t\tassetID,\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\tassetID,\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 version = routing.exchangeVersion ?? (await this.resolveVersion());\n\t\tconst negRisk =\n\t\t\tversion === 3 ? false : (options?.negRisk ?? (await this.getNegRisk(assetID)));\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(assetID, 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.js CHANGED
@@ -4,6 +4,7 @@ import { ApiError, L1_AUTH_UNAVAILABLE_ERROR, L2_AUTH_NOT_AVAILABLE } from "./er
4
4
  import { adjustBuyAmountForFees, validateFeeSlippage } from "./fees/index.js";
5
5
  import { createL1Headers, createL2Headers } from "./headers/index.js";
6
6
  import { DELETE, GET, POST, del, get, parseDropNotificationParams, post } from "./http-helpers/index.js";
7
+ import { resolveOrderRouting } from "./order-builder/helpers/orderAsset.js";
7
8
  import { SignatureTypeV2 } from "./order-utils/model/signatureTypeV2.js";
8
9
  import { Side } from "./order-utils/model/side.js";
9
10
  import { OrderType } from "./types/clob.js";
@@ -429,16 +430,17 @@ var ClobClient = class {
429
430
  this.canL1Auth();
430
431
  const orderToSign = { ...userOrder };
431
432
  if (this.builderConfig?.builderCode && !orderToSign.builderCode) orderToSign.builderCode = this.builderConfig.builderCode;
432
- const { tokenID } = orderToSign;
433
- const tickSize = await this._resolveTickSize(tokenID, options?.tickSize);
433
+ const routing = resolveOrderRouting(orderToSign, options?.version);
434
+ const { assetID } = routing;
435
+ const tickSize = await this._resolveTickSize(assetID, options?.tickSize);
434
436
  if (!priceValid(orderToSign.price, tickSize)) throw new Error(`invalid price (${orderToSign.price}), min: ${parseFloat(tickSize)} - max: ${1 - parseFloat(tickSize)}`);
435
437
  orderToSign.price = roundNormal(orderToSign.price, ROUNDING_CONFIG[tickSize].price);
436
- const version = options?.version ?? await this.resolveVersion();
437
- if (version !== 1 && orderToSign.side === Side.BUY && "userUSDCBalance" in orderToSign && orderToSign.userUSDCBalance !== void 0) orderToSign.size = await this.adjustBuyAmountForBalance(tokenID, orderToSign.size * orderToSign.price, orderToSign.price, orderToSign.userUSDCBalance, orderToSign.builderCode) / orderToSign.price;
438
- const negRisk = options?.negRisk ?? await this.getNegRisk(tokenID);
438
+ const version = routing.exchangeVersion ?? await this.resolveVersion();
439
+ if (version !== 1 && orderToSign.side === Side.BUY && "userUSDCBalance" in orderToSign && orderToSign.userUSDCBalance !== void 0) orderToSign.size = await this.adjustBuyAmountForBalance(assetID, orderToSign.size * orderToSign.price, orderToSign.price, orderToSign.userUSDCBalance, orderToSign.builderCode) / orderToSign.price;
440
+ const negRisk = version === 3 ? false : options?.negRisk ?? await this.getNegRisk(assetID);
439
441
  if (version === 1) {
440
442
  const userFeeRateBps = "feeRateBps" in orderToSign ? orderToSign.feeRateBps : void 0;
441
- orderToSign.feeRateBps = await this._resolveFeeRateBps(tokenID, userFeeRateBps);
443
+ orderToSign.feeRateBps = await this._resolveFeeRateBps(assetID, userFeeRateBps);
442
444
  }
443
445
  return this.orderBuilder.buildOrder(orderToSign, {
444
446
  tickSize,
@@ -447,23 +449,24 @@ var ClobClient = class {
447
449
  }
448
450
  async createMarketOrder(userMarketOrder, options) {
449
451
  this.canL1Auth();
450
- const { tokenID } = userMarketOrder;
451
- await this._ensureMarketInfoCached(tokenID);
452
- const tickSize = await this._resolveTickSize(tokenID, options?.tickSize);
453
- if (!userMarketOrder.price) userMarketOrder.price = await this.calculateMarketPrice(tokenID, userMarketOrder.side, userMarketOrder.amount, userMarketOrder.orderType);
452
+ const routing = resolveOrderRouting(userMarketOrder, options?.version);
453
+ const { assetID } = routing;
454
+ await this._ensureMarketInfoCached(assetID);
455
+ const tickSize = await this._resolveTickSize(assetID, options?.tickSize);
456
+ if (!userMarketOrder.price) userMarketOrder.price = await this.calculateMarketPrice(assetID, userMarketOrder.side, userMarketOrder.amount, userMarketOrder.orderType);
454
457
  if (!priceValid(userMarketOrder.price, tickSize)) throw new Error(`invalid price (${userMarketOrder.price}), min: ${parseFloat(tickSize)} - max: ${1 - parseFloat(tickSize)}`);
455
458
  const orderToSign = { ...userMarketOrder };
456
459
  if (this.builderConfig?.builderCode && !orderToSign.builderCode) orderToSign.builderCode = this.builderConfig.builderCode;
457
460
  await this.ensureBuilderFeeRateCached(orderToSign.builderCode);
458
461
  if (orderToSign.side === Side.BUY && "userUSDCBalance" in orderToSign && orderToSign.userUSDCBalance !== void 0) {
459
462
  const price = orderToSign.price;
460
- orderToSign.amount = await this.adjustBuyAmountForBalance(tokenID, orderToSign.amount, price, orderToSign.userUSDCBalance, orderToSign.builderCode);
463
+ orderToSign.amount = await this.adjustBuyAmountForBalance(assetID, orderToSign.amount, price, orderToSign.userUSDCBalance, orderToSign.builderCode);
461
464
  }
462
- const negRisk = options?.negRisk ?? await this.getNegRisk(tokenID);
463
- const version = options?.version ?? await this.resolveVersion();
465
+ const version = routing.exchangeVersion ?? await this.resolveVersion();
466
+ const negRisk = version === 3 ? false : options?.negRisk ?? await this.getNegRisk(assetID);
464
467
  if (version === 1) {
465
468
  const userFeeRateBps = "feeRateBps" in orderToSign ? orderToSign.feeRateBps : void 0;
466
- orderToSign.feeRateBps = await this._resolveFeeRateBps(tokenID, userFeeRateBps);
469
+ orderToSign.feeRateBps = await this._resolveFeeRateBps(assetID, userFeeRateBps);
467
470
  }
468
471
  return this.orderBuilder.buildMarketOrder(orderToSign, {
469
472
  tickSize,