@nadohq/engine-client 0.15.0 → 0.17.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 (187) hide show
  1. package/dist/EngineBaseClient-DOOXIhnZ.d.ts +75 -0
  2. package/dist/EngineBaseClient-DOOXIhnZ.d.ts.map +1 -0
  3. package/dist/EngineBaseClient-L1ue7jBx.d.cts +75 -0
  4. package/dist/EngineBaseClient-L1ue7jBx.d.cts.map +1 -0
  5. package/dist/EngineBaseClient-Uc1D8ftx.cjs +150 -0
  6. package/dist/EngineBaseClient-Uc1D8ftx.cjs.map +1 -0
  7. package/dist/EngineBaseClient.cjs +3 -167
  8. package/dist/EngineBaseClient.d.cts +2 -75
  9. package/dist/EngineBaseClient.d.ts +2 -75
  10. package/dist/EngineBaseClient.js +112 -131
  11. package/dist/EngineBaseClient.js.map +1 -1
  12. package/dist/EngineClient.cjs +13 -38
  13. package/dist/EngineClient.cjs.map +1 -1
  14. package/dist/EngineClient.d.cts +8 -18
  15. package/dist/EngineClient.d.cts.map +1 -0
  16. package/dist/EngineClient.d.ts +8 -18
  17. package/dist/EngineClient.d.ts.map +1 -0
  18. package/dist/EngineClient.js +9 -11
  19. package/dist/EngineClient.js.map +1 -1
  20. package/dist/EngineExecuteBuilder-VLrEndhv.d.cts +105 -0
  21. package/dist/EngineExecuteBuilder-VLrEndhv.d.cts.map +1 -0
  22. package/dist/EngineExecuteBuilder-t8EQ5Rmp.d.ts +105 -0
  23. package/dist/EngineExecuteBuilder-t8EQ5Rmp.d.ts.map +1 -0
  24. package/dist/EngineExecuteBuilder.cjs +232 -277
  25. package/dist/EngineExecuteBuilder.cjs.map +1 -1
  26. package/dist/EngineExecuteBuilder.d.cts +2 -108
  27. package/dist/EngineExecuteBuilder.d.ts +2 -108
  28. package/dist/EngineExecuteBuilder.js +230 -256
  29. package/dist/EngineExecuteBuilder.js.map +1 -1
  30. package/dist/EngineExecuteClient-0EBoXRd7.d.ts +24 -0
  31. package/dist/EngineExecuteClient-0EBoXRd7.d.ts.map +1 -0
  32. package/dist/EngineExecuteClient-BGlNK5Le.d.cts +24 -0
  33. package/dist/EngineExecuteClient-BGlNK5Le.d.cts.map +1 -0
  34. package/dist/EngineExecuteClient.cjs +57 -110
  35. package/dist/EngineExecuteClient.cjs.map +1 -1
  36. package/dist/EngineExecuteClient.d.cts +2 -28
  37. package/dist/EngineExecuteClient.d.ts +2 -28
  38. package/dist/EngineExecuteClient.js +54 -83
  39. package/dist/EngineExecuteClient.js.map +1 -1
  40. package/dist/EngineQueryClient-C_7p1oRx.d.cts +147 -0
  41. package/dist/EngineQueryClient-C_7p1oRx.d.cts.map +1 -0
  42. package/dist/EngineQueryClient-DQwCRaYl.d.ts +147 -0
  43. package/dist/EngineQueryClient-DQwCRaYl.d.ts.map +1 -0
  44. package/dist/EngineQueryClient.cjs +354 -448
  45. package/dist/EngineQueryClient.cjs.map +1 -1
  46. package/dist/EngineQueryClient.d.cts +2 -149
  47. package/dist/EngineQueryClient.d.ts +2 -149
  48. package/dist/EngineQueryClient.js +351 -441
  49. package/dist/EngineQueryClient.js.map +1 -1
  50. package/dist/EngineServerFailureError-CDabRrF4.d.ts +11 -0
  51. package/dist/EngineServerFailureError-CDabRrF4.d.ts.map +1 -0
  52. package/dist/EngineServerFailureError-DpPY0--L.d.cts +11 -0
  53. package/dist/EngineServerFailureError-DpPY0--L.d.cts.map +1 -0
  54. package/dist/EngineWebClient-CEwqgd4t.d.ts +35 -0
  55. package/dist/EngineWebClient-CEwqgd4t.d.ts.map +1 -0
  56. package/dist/EngineWebClient-DajZqKAQ.d.cts +35 -0
  57. package/dist/EngineWebClient-DajZqKAQ.d.cts.map +1 -0
  58. package/dist/EngineWebClient.cjs +49 -86
  59. package/dist/EngineWebClient.cjs.map +1 -1
  60. package/dist/EngineWebClient.d.cts +2 -39
  61. package/dist/EngineWebClient.d.ts +2 -39
  62. package/dist/EngineWebClient.js +47 -60
  63. package/dist/EngineWebClient.js.map +1 -1
  64. package/dist/clientExecuteTypes-BlJOgCL_.d.cts +91 -0
  65. package/dist/clientExecuteTypes-BlJOgCL_.d.cts.map +1 -0
  66. package/dist/clientExecuteTypes-CJ08_c4q.d.ts +91 -0
  67. package/dist/clientExecuteTypes-CJ08_c4q.d.ts.map +1 -0
  68. package/dist/clientQueryTypes-DlTtS_mX.d.cts +221 -0
  69. package/dist/clientQueryTypes-DlTtS_mX.d.cts.map +1 -0
  70. package/dist/clientQueryTypes-DuRgEeBT.d.ts +221 -0
  71. package/dist/clientQueryTypes-DuRgEeBT.d.ts.map +1 -0
  72. package/dist/endpoints.cjs +19 -45
  73. package/dist/endpoints.cjs.map +1 -1
  74. package/dist/endpoints.d.cts +4 -2
  75. package/dist/endpoints.d.cts.map +1 -0
  76. package/dist/endpoints.d.ts +4 -2
  77. package/dist/endpoints.d.ts.map +1 -0
  78. package/dist/endpoints.js +16 -18
  79. package/dist/endpoints.js.map +1 -1
  80. package/dist/index-CmCelmEL.d.cts +1 -0
  81. package/dist/index-D0E78WnU.d.ts +1 -0
  82. package/dist/index.cjs +26 -31
  83. package/dist/index.d.cts +12 -20
  84. package/dist/index.d.ts +12 -20
  85. package/dist/index.js +8 -6
  86. package/dist/queryDataMappers-BguxA579.d.ts +21 -0
  87. package/dist/queryDataMappers-BguxA579.d.ts.map +1 -0
  88. package/dist/queryDataMappers-DO9yWdLo.d.cts +21 -0
  89. package/dist/queryDataMappers-DO9yWdLo.d.cts.map +1 -0
  90. package/dist/serverExecuteTypes-CgbHjnWM.d.ts +92 -0
  91. package/dist/serverExecuteTypes-CgbHjnWM.d.ts.map +1 -0
  92. package/dist/serverExecuteTypes-DejTR8Is.d.cts +92 -0
  93. package/dist/serverExecuteTypes-DejTR8Is.d.cts.map +1 -0
  94. package/dist/serverQueryModelTypes-85xnbU-a.d.cts +98 -0
  95. package/dist/serverQueryModelTypes-85xnbU-a.d.cts.map +1 -0
  96. package/dist/serverQueryModelTypes-CENoy5Hm.d.ts +98 -0
  97. package/dist/serverQueryModelTypes-CENoy5Hm.d.ts.map +1 -0
  98. package/dist/serverQueryTypes-B3vC8vxT.d.ts +301 -0
  99. package/dist/serverQueryTypes-B3vC8vxT.d.ts.map +1 -0
  100. package/dist/serverQueryTypes-Dva9R2tV.d.cts +301 -0
  101. package/dist/serverQueryTypes-Dva9R2tV.d.cts.map +1 -0
  102. package/dist/serverSubscriptionEventTypes-BMUrTkTg.d.cts +135 -0
  103. package/dist/serverSubscriptionEventTypes-BMUrTkTg.d.cts.map +1 -0
  104. package/dist/serverSubscriptionEventTypes-UCYAjmt7.d.ts +135 -0
  105. package/dist/serverSubscriptionEventTypes-UCYAjmt7.d.ts.map +1 -0
  106. package/dist/serverSubscriptionTypes-BSuYa6z_.d.cts +82 -0
  107. package/dist/serverSubscriptionTypes-BSuYa6z_.d.cts.map +1 -0
  108. package/dist/serverSubscriptionTypes-DoMWeKgY.d.ts +82 -0
  109. package/dist/serverSubscriptionTypes-DoMWeKgY.d.ts.map +1 -0
  110. package/dist/types/EngineServerFailureError.cjs +9 -33
  111. package/dist/types/EngineServerFailureError.cjs.map +1 -1
  112. package/dist/types/EngineServerFailureError.d.cts +2 -11
  113. package/dist/types/EngineServerFailureError.d.ts +2 -11
  114. package/dist/types/EngineServerFailureError.js +8 -8
  115. package/dist/types/EngineServerFailureError.js.map +1 -1
  116. package/dist/types/clientExecuteTypes.cjs +0 -19
  117. package/dist/types/clientExecuteTypes.d.cts +2 -91
  118. package/dist/types/clientExecuteTypes.d.ts +2 -91
  119. package/dist/types/clientExecuteTypes.js +1 -1
  120. package/dist/types/clientQueryTypes.cjs +0 -19
  121. package/dist/types/clientQueryTypes.d.cts +2 -220
  122. package/dist/types/clientQueryTypes.d.ts +2 -220
  123. package/dist/types/clientQueryTypes.js +1 -1
  124. package/dist/types/index.cjs +5 -39
  125. package/dist/types/index.d.cts +9 -10
  126. package/dist/types/index.d.ts +9 -10
  127. package/dist/types/index.js +3 -10
  128. package/dist/types/serverExecuteTypes.cjs +0 -19
  129. package/dist/types/serverExecuteTypes.d.cts +2 -93
  130. package/dist/types/serverExecuteTypes.d.ts +2 -93
  131. package/dist/types/serverExecuteTypes.js +1 -1
  132. package/dist/types/serverQueryModelTypes.cjs +0 -19
  133. package/dist/types/serverQueryModelTypes.d.cts +2 -96
  134. package/dist/types/serverQueryModelTypes.d.ts +2 -96
  135. package/dist/types/serverQueryModelTypes.js +1 -1
  136. package/dist/types/serverQueryTypes.cjs +12 -36
  137. package/dist/types/serverQueryTypes.cjs.map +1 -1
  138. package/dist/types/serverQueryTypes.d.cts +2 -310
  139. package/dist/types/serverQueryTypes.d.ts +2 -310
  140. package/dist/types/serverQueryTypes.js +11 -11
  141. package/dist/types/serverQueryTypes.js.map +1 -1
  142. package/dist/types/serverSubscriptionEventTypes.cjs +0 -19
  143. package/dist/types/serverSubscriptionEventTypes.d.cts +2 -135
  144. package/dist/types/serverSubscriptionEventTypes.d.ts +2 -135
  145. package/dist/types/serverSubscriptionEventTypes.js +1 -1
  146. package/dist/types/serverSubscriptionTypes.cjs +0 -19
  147. package/dist/types/serverSubscriptionTypes.d.cts +2 -80
  148. package/dist/types/serverSubscriptionTypes.d.ts +2 -80
  149. package/dist/types/serverSubscriptionTypes.js +1 -1
  150. package/dist/utils/index.cjs +14 -25
  151. package/dist/utils/index.d.cts +2 -6
  152. package/dist/utils/index.d.ts +2 -6
  153. package/dist/utils/index.js +2 -3
  154. package/dist/utils/productEngineTypeMappers.cjs +16 -44
  155. package/dist/utils/productEngineTypeMappers.cjs.map +1 -1
  156. package/dist/utils/productEngineTypeMappers.d.cts +5 -3
  157. package/dist/utils/productEngineTypeMappers.d.cts.map +1 -0
  158. package/dist/utils/productEngineTypeMappers.d.ts +5 -3
  159. package/dist/utils/productEngineTypeMappers.d.ts.map +1 -0
  160. package/dist/utils/productEngineTypeMappers.js +12 -17
  161. package/dist/utils/productEngineTypeMappers.js.map +1 -1
  162. package/dist/utils/queryDataMappers.cjs +204 -292
  163. package/dist/utils/queryDataMappers.cjs.map +1 -1
  164. package/dist/utils/queryDataMappers.d.cts +2 -20
  165. package/dist/utils/queryDataMappers.d.ts +2 -20
  166. package/dist/utils/queryDataMappers.js +190 -264
  167. package/dist/utils/queryDataMappers.js.map +1 -1
  168. package/package.json +9 -9
  169. package/dist/EngineBaseClient.cjs.map +0 -1
  170. package/dist/index.cjs.map +0 -1
  171. package/dist/index.js.map +0 -1
  172. package/dist/types/clientExecuteTypes.cjs.map +0 -1
  173. package/dist/types/clientExecuteTypes.js.map +0 -1
  174. package/dist/types/clientQueryTypes.cjs.map +0 -1
  175. package/dist/types/clientQueryTypes.js.map +0 -1
  176. package/dist/types/index.cjs.map +0 -1
  177. package/dist/types/index.js.map +0 -1
  178. package/dist/types/serverExecuteTypes.cjs.map +0 -1
  179. package/dist/types/serverExecuteTypes.js.map +0 -1
  180. package/dist/types/serverQueryModelTypes.cjs.map +0 -1
  181. package/dist/types/serverQueryModelTypes.js.map +0 -1
  182. package/dist/types/serverSubscriptionEventTypes.cjs.map +0 -1
  183. package/dist/types/serverSubscriptionEventTypes.js.map +0 -1
  184. package/dist/types/serverSubscriptionTypes.cjs.map +0 -1
  185. package/dist/types/serverSubscriptionTypes.js.map +0 -1
  186. package/dist/utils/index.cjs.map +0 -1
  187. package/dist/utils/index.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/EngineQueryClient.ts"],"sourcesContent":["import {\n addDecimals,\n encodeSignedOrder,\n getOrderVerifyingAddress,\n mapValues,\n MarketWithProduct,\n removeDecimals,\n subaccountToHex,\n toBigNumber,\n toIntegerString,\n} from '@nadohq/shared';\nimport BigNumber from 'bignumber.js';\nimport { EngineBaseClient } from './EngineBaseClient';\nimport {\n EngineServerStatusResponse,\n EngineServerSubaccountInfoQueryParams,\n EngineSymbolsResponse,\n GetEngineAllMarketsResponse,\n GetEngineContractsResponse,\n GetEngineEstimatedSubaccountSummaryParams,\n GetEngineHealthGroupsResponse,\n GetEngineInsuranceResponse,\n GetEngineIsolatedPositionsParams,\n GetEngineIsolatedPositionsResponse,\n GetEngineLinkedSignerParams,\n GetEngineLinkedSignerResponse,\n GetEngineMarketLiquidityParams,\n GetEngineMarketLiquidityResponse,\n GetEngineMarketPriceParams,\n GetEngineMarketPriceResponse,\n GetEngineMarketPricesParams,\n GetEngineMarketPricesResponse,\n GetEngineMaxBurnNlpAmountParams,\n GetEngineMaxBurnNlpAmountResponse,\n GetEngineMaxMintNlpAmountParams,\n GetEngineMaxMintNlpAmountResponse,\n GetEngineMaxOrderSizeParams,\n GetEngineMaxOrderSizeResponse,\n GetEngineMaxWithdrawableParams,\n GetEngineMaxWithdrawableResponse,\n GetEngineNlpLockedBalancesParams,\n GetEngineNlpLockedBalancesResponse,\n GetEngineNlpPoolInfoResponse,\n GetEngineOrderParams,\n GetEngineOrderResponse,\n GetEngineSubaccountFeeRatesParams,\n GetEngineSubaccountFeeRatesResponse,\n GetEngineSubaccountOrdersParams,\n GetEngineSubaccountOrdersResponse,\n GetEngineSubaccountProductOrdersParams,\n GetEngineSubaccountProductOrdersResponse,\n GetEngineSubaccountSummaryParams,\n GetEngineSubaccountSummaryResponse,\n GetEngineSymbolsParams,\n SubaccountOrderFeeRates,\n ValidateEngineOrderParams,\n ValidateEngineOrderResponse,\n ValidateSignedEngineOrderParams,\n} from './types';\nimport { mapProductEngineType } from './utils/productEngineTypeMappers';\nimport {\n mapEngineMarketPrice,\n mapEngineServerIsolatedPositions,\n mapEngineServerNlpLockedBalances,\n mapEngineServerNlpPoolInfo,\n mapEngineServerOrder,\n mapEngineServerPerpProduct,\n mapEngineServerSpotProduct,\n mapEngineServerSymbols,\n mapEngineServerTickLiquidity,\n mapSubaccountSummary,\n} from './utils/queryDataMappers';\n\nexport class EngineQueryClient extends EngineBaseClient {\n /**\n * Retrieves the set of contracts that the engine is interfacing with\n */\n async getContracts(): Promise<GetEngineContractsResponse> {\n const baseResponse = await this.query('contracts', {});\n return {\n chainId: Number(baseResponse.chain_id),\n endpointAddr: baseResponse.endpoint_addr,\n };\n }\n\n /**\n * Retrieves current engine status\n */\n async getStatus(): Promise<EngineServerStatusResponse> {\n return this.query('status', {});\n }\n\n /**\n * Retrieves a subaccount summary reflective of the state within the offchain engine. This adheres to the\n * same return interface as the contract version\n *\n * @param params\n */\n async getSubaccountSummary(\n params: GetEngineSubaccountSummaryParams,\n ): Promise<GetEngineSubaccountSummaryResponse> {\n const subaccount = subaccountToHex({\n subaccountOwner: params.subaccountOwner,\n subaccountName: params.subaccountName,\n });\n const baseResponse = await this.query('subaccount_info', {\n subaccount,\n });\n\n return mapSubaccountSummary(baseResponse);\n }\n\n /**\n * Retrieves a list of isolated positions\n *\n * @param params\n */\n async getIsolatedPositions(\n params: GetEngineIsolatedPositionsParams,\n ): Promise<GetEngineIsolatedPositionsResponse> {\n const subaccount = subaccountToHex({\n subaccountOwner: params.subaccountOwner,\n subaccountName: params.subaccountName,\n });\n const baseResponse = await this.query('isolated_positions', {\n subaccount,\n });\n\n return mapEngineServerIsolatedPositions(baseResponse);\n }\n\n /**\n * Retrieves an estimated subaccount summary with the applied transactions\n *\n * @param params\n */\n async getEstimatedSubaccountSummary(\n params: GetEngineEstimatedSubaccountSummaryParams,\n ): Promise<GetEngineSubaccountSummaryResponse> {\n const subaccount = subaccountToHex({\n subaccountOwner: params.subaccountOwner,\n subaccountName: params.subaccountName,\n });\n const queryParams: EngineServerSubaccountInfoQueryParams = {\n subaccount: subaccount,\n txns: params.txs.map(\n (\n tx,\n ): NonNullable<\n EngineServerSubaccountInfoQueryParams['txns']\n >[number] => {\n switch (tx.type) {\n case 'apply_delta':\n return {\n apply_delta: {\n product_id: tx.tx.productId,\n subaccount,\n amount_delta: toIntegerString(tx.tx.amountDelta),\n v_quote_delta: toIntegerString(tx.tx.vQuoteDelta),\n },\n };\n }\n },\n ),\n };\n const baseResponse = await this.query('subaccount_info', {\n subaccount: queryParams.subaccount,\n txns: JSON.stringify(queryParams.txns),\n // Backend expects string variants of booleans\n pre_state:\n params.preState !== undefined ? String(params.preState) : undefined,\n });\n\n return mapSubaccountSummary(baseResponse);\n }\n\n /**\n * Retrieves symbols and product info\n *\n * @param params\n */\n async getSymbols(\n params: GetEngineSymbolsParams,\n ): Promise<EngineSymbolsResponse> {\n const baseResponse = await this.query('symbols', {\n product_ids: params.productIds,\n product_type:\n params.productType != null\n ? mapProductEngineType(params.productType)\n : undefined,\n });\n return mapEngineServerSymbols(baseResponse);\n }\n\n /**\n * Retrieves all market states as per the offchain engine. Same return interface as contracts\n */\n async getAllMarkets(): Promise<GetEngineAllMarketsResponse> {\n const markets: MarketWithProduct[] = [];\n\n const baseResponse = await this.query('all_products', {});\n baseResponse.spot_products.forEach((spotProduct) => {\n markets.push(mapEngineServerSpotProduct(spotProduct));\n });\n baseResponse.perp_products.forEach((perpProduct) => {\n markets.push(mapEngineServerPerpProduct(perpProduct));\n });\n\n return markets;\n }\n\n /**\n * Retrieves all markets by chain id.\n */\n async getEdgeAllMarkets(): Promise<Record<number, MarketWithProduct[]>> {\n const baseResponse = await this.query('edge_all_products', {});\n\n return mapValues(baseResponse.edge_all_products, (allProducts) => {\n const markets: MarketWithProduct[] = [];\n\n allProducts.spot_products.forEach((spotProduct) => {\n markets.push(mapEngineServerSpotProduct(spotProduct));\n });\n\n allProducts.perp_products.forEach((perpProduct) => {\n markets.push(mapEngineServerPerpProduct(perpProduct));\n });\n\n return markets;\n });\n }\n\n /**\n * Retrieves all health groups (linked spot & perp products) from the engine\n */\n async getHealthGroups(): Promise<GetEngineHealthGroupsResponse> {\n const baseResponse = await this.query('health_groups', {});\n\n return {\n healthGroups: baseResponse.health_groups.map(\n ([spotProductId, perpProductId]) => {\n return {\n spotProductId,\n perpProductId,\n };\n },\n ),\n };\n }\n\n /**\n * Retrieves an order from the offchain engine\n *\n * @param params\n */\n async getOrder(\n params: GetEngineOrderParams,\n ): Promise<GetEngineOrderResponse> {\n const baseResponse = await this.query('order', {\n digest: params.digest,\n product_id: params.productId,\n });\n\n return mapEngineServerOrder(baseResponse);\n }\n\n /**\n * Signs and validates with the engine that the order is valid to be submitted (i.e. does not violate health reqs)\n *\n * @param params\n */\n async validateOrderParams(\n params: ValidateEngineOrderParams,\n ): Promise<ValidateEngineOrderResponse> {\n const signedOrder = {\n order: params.order,\n signature: await this.sign(\n 'place_order',\n getOrderVerifyingAddress(params.productId),\n params.chainId,\n params.order,\n ),\n };\n return this.validateSignedOrderParams({\n signedOrder,\n productId: params.productId,\n });\n }\n\n /**\n * Validates an existing signed order with the engine as a pre-check for health\n *\n * @param params\n */\n async validateSignedOrderParams(\n params: ValidateSignedEngineOrderParams,\n ): Promise<ValidateEngineOrderResponse> {\n const baseResponse = await this.query('validate_order', {\n product_id: params.productId,\n order: encodeSignedOrder(params.signedOrder),\n });\n\n return {\n productId: baseResponse.product_id,\n valid: baseResponse.valid,\n };\n }\n\n /**\n * Get all subaccount orders from the engine, per product ID\n * @param params\n */\n async getSubaccountOrders(\n params: GetEngineSubaccountOrdersParams,\n ): Promise<GetEngineSubaccountOrdersResponse> {\n const baseResponse = await this.query('subaccount_orders', {\n sender: subaccountToHex({\n subaccountOwner: params.subaccountOwner,\n subaccountName: params.subaccountName,\n }),\n product_id: params.productId,\n });\n\n return {\n orders: baseResponse.orders.map(mapEngineServerOrder),\n productId: params.productId,\n };\n }\n\n /**\n * Get all subaccount orders from the engine, for multiple products\n * @param params\n */\n async getSubaccountMultiProductOrders(\n params: GetEngineSubaccountProductOrdersParams,\n ): Promise<GetEngineSubaccountProductOrdersResponse> {\n const baseResponse = await this.query('orders', {\n sender: subaccountToHex({\n subaccountOwner: params.subaccountOwner,\n subaccountName: params.subaccountName,\n }),\n product_ids: params.productIds,\n });\n\n return {\n productOrders: baseResponse.product_orders.map((orders) => {\n return {\n orders: orders.orders.map(mapEngineServerOrder),\n productId: orders.product_id,\n };\n }),\n };\n }\n\n /**\n * Gets maker & taker fee rates for order fees\n * @param params\n */\n async getSubaccountFeeRates(\n params: GetEngineSubaccountFeeRatesParams,\n ): Promise<GetEngineSubaccountFeeRatesResponse> {\n const baseResponse = await this.query('fee_rates', {\n sender: subaccountToHex({\n subaccountOwner: params.subaccountOwner,\n subaccountName: params.subaccountName,\n }),\n });\n\n return {\n healthCheckSequencerFee: toBigNumber(\n baseResponse.health_check_sequencer_fee,\n ),\n liquidationSequencerFee: toBigNumber(\n baseResponse.liquidation_sequencer_fee,\n ),\n takerSequencerFee: toBigNumber(baseResponse.taker_sequencer_fee),\n orders: baseResponse.taker_fee_rates_x18.reduce(\n (acc, takerRateX18, currIndex) => {\n acc[currIndex] = {\n taker: removeDecimals(takerRateX18),\n maker: removeDecimals(baseResponse.maker_fee_rates_x18[currIndex]),\n };\n return acc;\n },\n {} as Record<number, SubaccountOrderFeeRates>,\n ),\n withdrawal: baseResponse.withdraw_sequencer_fees.reduce(\n (acc, productFee, currIndex) => {\n acc[currIndex] = toBigNumber(productFee);\n return acc;\n },\n {} as Record<number, BigNumber>,\n ),\n feeTier: baseResponse.fee_tier,\n };\n }\n\n /**\n * Gets \"price ticks\" for a given market, useful for constructing liquidity levels at each price\n * @param params\n */\n async getMarketLiquidity(\n params: GetEngineMarketLiquidityParams,\n ): Promise<GetEngineMarketLiquidityResponse> {\n const baseResponse = await this.query('market_liquidity', {\n product_id: params.productId,\n depth: params.depth,\n });\n return {\n asks: baseResponse.asks.map(mapEngineServerTickLiquidity),\n bids: baseResponse.bids.map(mapEngineServerTickLiquidity),\n };\n }\n\n /**\n * Retrieves the latest price for a given market\n * @param params\n */\n async getMarketPrice(\n params: GetEngineMarketPriceParams,\n ): Promise<GetEngineMarketPriceResponse> {\n const baseResponse = await this.query('market_price', {\n product_id: params.productId,\n });\n return mapEngineMarketPrice(baseResponse);\n }\n\n /**\n * Retrieves the latest prices for provided markets\n * @param params\n */\n async getMarketPrices(\n params: GetEngineMarketPricesParams,\n ): Promise<GetEngineMarketPricesResponse> {\n const baseResponse = await this.query('market_prices', {\n product_ids: params.productIds,\n });\n return {\n marketPrices: baseResponse.market_prices.map(mapEngineMarketPrice),\n };\n }\n\n /**\n * Retrieves the estimated max order size for a product\n * @param params\n */\n async getMaxOrderSize(\n params: GetEngineMaxOrderSizeParams,\n ): Promise<GetEngineMaxOrderSizeResponse> {\n const baseResponse = await this.query('max_order_size', {\n direction: params.side,\n price_x18: toIntegerString(addDecimals(params.price)),\n avg_price_x18:\n params.avgPrice != null\n ? toIntegerString(addDecimals(params.avgPrice))\n : null,\n product_id: params.productId,\n sender: subaccountToHex({\n subaccountOwner: params.subaccountOwner,\n subaccountName: params.subaccountName,\n }),\n // Backend expects string variants of booleans\n spot_leverage:\n params.spotLeverage != null ? String(params.spotLeverage) : null,\n reduce_only: params.reduceOnly != null ? String(params.reduceOnly) : null,\n isolated: params.isolated != null ? String(params.isolated) : null,\n borrow_margin:\n // This field is only relevant for isolated orders\n params.isolated && params.isoBorrowMargin != null\n ? String(params.isoBorrowMargin)\n : null,\n });\n\n return toBigNumber(baseResponse.max_order_size);\n }\n\n /**\n * Retrieves the estimated max withdrawal size for a product\n * @param params\n */\n async getMaxWithdrawable(\n params: GetEngineMaxWithdrawableParams,\n ): Promise<GetEngineMaxWithdrawableResponse> {\n const baseResponse = await this.query('max_withdrawable', {\n product_id: params.productId,\n sender: subaccountToHex({\n subaccountOwner: params.subaccountOwner,\n subaccountName: params.subaccountName,\n }),\n spot_leverage:\n params.spotLeverage != null ? String(params.spotLeverage) : null,\n });\n\n return toBigNumber(baseResponse.max_withdrawable);\n }\n\n /**\n * Retrieves the estimated max quote amount for minting NLP.\n *\n * @param params\n */\n async getMaxMintNlpAmount(\n params: GetEngineMaxMintNlpAmountParams,\n ): Promise<GetEngineMaxMintNlpAmountResponse> {\n const baseResponse = await this.query('max_nlp_mintable', {\n sender: subaccountToHex({\n subaccountOwner: params.subaccountOwner,\n subaccountName: params.subaccountName,\n }),\n spot_leverage:\n params.spotLeverage != null ? String(params.spotLeverage) : null,\n });\n\n return toBigNumber(baseResponse.max_quote_amount);\n }\n\n /**\n * Retrieves the max amount of NLP that can be burned.\n *\n * @param params\n */\n async getMaxBurnNlpAmount(\n params: GetEngineMaxBurnNlpAmountParams,\n ): Promise<GetEngineMaxBurnNlpAmountResponse> {\n const baseResponse = await this.query('max_nlp_burnable', {\n sender: subaccountToHex({\n subaccountOwner: params.subaccountOwner,\n subaccountName: params.subaccountName,\n }),\n });\n\n return toBigNumber(baseResponse.max_nlp_amount);\n }\n\n /**\n * Gets the currently linked signer for the subaccount\n * @param params\n * @returns\n */\n public async getLinkedSigner(\n params: GetEngineLinkedSignerParams,\n ): Promise<GetEngineLinkedSignerResponse> {\n const baseResponse = await this.query('linked_signer', {\n subaccount: subaccountToHex({\n subaccountOwner: params.subaccountOwner,\n subaccountName: params.subaccountName,\n }),\n });\n\n return {\n signer: baseResponse.linked_signer,\n };\n }\n\n /**\n * Gets the insurance funds in USDT.\n * @returns\n */\n public async getInsurance(): Promise<GetEngineInsuranceResponse> {\n const baseResponse = await this.query('insurance', {});\n\n return toBigNumber(baseResponse.insurance);\n }\n\n /**\n * Retrieves the NLP locked and unlocked balances for a subaccount.\n *\n * @param params\n */\n async getNlpLockedBalances(\n params: GetEngineNlpLockedBalancesParams,\n ): Promise<GetEngineNlpLockedBalancesResponse> {\n const baseResponse = await this.query('nlp_locked_balances', {\n subaccount: subaccountToHex({\n subaccountOwner: params.subaccountOwner,\n subaccountName: params.subaccountName,\n }),\n });\n\n return mapEngineServerNlpLockedBalances(baseResponse);\n }\n\n /**\n * Retrieves information about all NLP sub-pools\n */\n async getNlpPoolInfo(): Promise<GetEngineNlpPoolInfoResponse> {\n const baseResponse = await this.query('nlp_pool_info', {});\n return mapEngineServerNlpPoolInfo(baseResponse);\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"file":"EngineQueryClient.js","names":[],"sources":["../src/EngineQueryClient.ts"],"sourcesContent":["import {\n addDecimals,\n encodeSignedOrder,\n getOrderVerifyingAddress,\n mapValues,\n MarketWithProduct,\n removeDecimals,\n subaccountToHex,\n toBigNumber,\n toIntegerString,\n} from '@nadohq/shared';\nimport BigNumber from 'bignumber.js';\nimport { EngineBaseClient } from './EngineBaseClient';\nimport {\n EngineServerStatusResponse,\n EngineServerSubaccountInfoQueryParams,\n EngineSymbolsResponse,\n GetEngineAllMarketsResponse,\n GetEngineContractsResponse,\n GetEngineEstimatedSubaccountSummaryParams,\n GetEngineHealthGroupsResponse,\n GetEngineInsuranceResponse,\n GetEngineIsolatedPositionsParams,\n GetEngineIsolatedPositionsResponse,\n GetEngineLinkedSignerParams,\n GetEngineLinkedSignerResponse,\n GetEngineMarketLiquidityParams,\n GetEngineMarketLiquidityResponse,\n GetEngineMarketPriceParams,\n GetEngineMarketPriceResponse,\n GetEngineMarketPricesParams,\n GetEngineMarketPricesResponse,\n GetEngineMaxBurnNlpAmountParams,\n GetEngineMaxBurnNlpAmountResponse,\n GetEngineMaxMintNlpAmountParams,\n GetEngineMaxMintNlpAmountResponse,\n GetEngineMaxOrderSizeParams,\n GetEngineMaxOrderSizeResponse,\n GetEngineMaxWithdrawableParams,\n GetEngineMaxWithdrawableResponse,\n GetEngineNlpLockedBalancesParams,\n GetEngineNlpLockedBalancesResponse,\n GetEngineNlpPoolInfoResponse,\n GetEngineOrderParams,\n GetEngineOrderResponse,\n GetEngineSubaccountFeeRatesParams,\n GetEngineSubaccountFeeRatesResponse,\n GetEngineSubaccountOrdersParams,\n GetEngineSubaccountOrdersResponse,\n GetEngineSubaccountProductOrdersParams,\n GetEngineSubaccountProductOrdersResponse,\n GetEngineSubaccountSummaryParams,\n GetEngineSubaccountSummaryResponse,\n GetEngineSymbolsParams,\n SubaccountOrderFeeRates,\n ValidateEngineOrderParams,\n ValidateEngineOrderResponse,\n ValidateSignedEngineOrderParams,\n} from './types';\nimport { mapProductEngineType } from './utils/productEngineTypeMappers';\nimport {\n mapEngineMarketPrice,\n mapEngineServerIsolatedPositions,\n mapEngineServerNlpLockedBalances,\n mapEngineServerNlpPoolInfo,\n mapEngineServerOrder,\n mapEngineServerPerpProduct,\n mapEngineServerSpotProduct,\n mapEngineServerSymbols,\n mapEngineServerTickLiquidity,\n mapSubaccountSummary,\n} from './utils/queryDataMappers';\n\nexport class EngineQueryClient extends EngineBaseClient {\n /**\n * Retrieves the set of contracts that the engine is interfacing with\n */\n async getContracts(): Promise<GetEngineContractsResponse> {\n const baseResponse = await this.query('contracts', {});\n return {\n chainId: Number(baseResponse.chain_id),\n endpointAddr: baseResponse.endpoint_addr,\n };\n }\n\n /**\n * Retrieves current engine status\n */\n async getStatus(): Promise<EngineServerStatusResponse> {\n return this.query('status', {});\n }\n\n /**\n * Retrieves a subaccount summary reflective of the state within the offchain engine. This adheres to the\n * same return interface as the contract version\n *\n * @param params\n */\n async getSubaccountSummary(\n params: GetEngineSubaccountSummaryParams,\n ): Promise<GetEngineSubaccountSummaryResponse> {\n const subaccount = subaccountToHex({\n subaccountOwner: params.subaccountOwner,\n subaccountName: params.subaccountName,\n });\n const baseResponse = await this.query('subaccount_info', {\n subaccount,\n });\n\n return mapSubaccountSummary(baseResponse);\n }\n\n /**\n * Retrieves a list of isolated positions\n *\n * @param params\n */\n async getIsolatedPositions(\n params: GetEngineIsolatedPositionsParams,\n ): Promise<GetEngineIsolatedPositionsResponse> {\n const subaccount = subaccountToHex({\n subaccountOwner: params.subaccountOwner,\n subaccountName: params.subaccountName,\n });\n const baseResponse = await this.query('isolated_positions', {\n subaccount,\n });\n\n return mapEngineServerIsolatedPositions(baseResponse);\n }\n\n /**\n * Retrieves an estimated subaccount summary with the applied transactions\n *\n * @param params\n */\n async getEstimatedSubaccountSummary(\n params: GetEngineEstimatedSubaccountSummaryParams,\n ): Promise<GetEngineSubaccountSummaryResponse> {\n const subaccount = subaccountToHex({\n subaccountOwner: params.subaccountOwner,\n subaccountName: params.subaccountName,\n });\n const queryParams: EngineServerSubaccountInfoQueryParams = {\n subaccount: subaccount,\n txns: params.txs.map(\n (\n tx,\n ): NonNullable<\n EngineServerSubaccountInfoQueryParams['txns']\n >[number] => {\n switch (tx.type) {\n case 'apply_delta':\n return {\n apply_delta: {\n product_id: tx.tx.productId,\n subaccount,\n amount_delta: toIntegerString(tx.tx.amountDelta),\n v_quote_delta: toIntegerString(tx.tx.vQuoteDelta),\n },\n };\n }\n },\n ),\n };\n const baseResponse = await this.query('subaccount_info', {\n subaccount: queryParams.subaccount,\n txns: JSON.stringify(queryParams.txns),\n // Backend expects string variants of booleans\n pre_state:\n params.preState !== undefined ? String(params.preState) : undefined,\n });\n\n return mapSubaccountSummary(baseResponse);\n }\n\n /**\n * Retrieves symbols and product info\n *\n * @param params\n */\n async getSymbols(\n params: GetEngineSymbolsParams,\n ): Promise<EngineSymbolsResponse> {\n const baseResponse = await this.query('symbols', {\n product_ids: params.productIds,\n product_type:\n params.productType != null\n ? mapProductEngineType(params.productType)\n : undefined,\n });\n return mapEngineServerSymbols(baseResponse);\n }\n\n /**\n * Retrieves all market states as per the offchain engine. Same return interface as contracts\n */\n async getAllMarkets(): Promise<GetEngineAllMarketsResponse> {\n const markets: MarketWithProduct[] = [];\n\n const baseResponse = await this.query('all_products', {});\n baseResponse.spot_products.forEach((spotProduct) => {\n markets.push(mapEngineServerSpotProduct(spotProduct));\n });\n baseResponse.perp_products.forEach((perpProduct) => {\n markets.push(mapEngineServerPerpProduct(perpProduct));\n });\n\n return markets;\n }\n\n /**\n * Retrieves all markets by chain id.\n */\n async getEdgeAllMarkets(): Promise<Record<number, MarketWithProduct[]>> {\n const baseResponse = await this.query('edge_all_products', {});\n\n return mapValues(baseResponse.edge_all_products, (allProducts) => {\n const markets: MarketWithProduct[] = [];\n\n allProducts.spot_products.forEach((spotProduct) => {\n markets.push(mapEngineServerSpotProduct(spotProduct));\n });\n\n allProducts.perp_products.forEach((perpProduct) => {\n markets.push(mapEngineServerPerpProduct(perpProduct));\n });\n\n return markets;\n });\n }\n\n /**\n * Retrieves all health groups (linked spot & perp products) from the engine\n */\n async getHealthGroups(): Promise<GetEngineHealthGroupsResponse> {\n const baseResponse = await this.query('health_groups', {});\n\n return {\n healthGroups: baseResponse.health_groups.map(\n ([spotProductId, perpProductId]) => {\n return {\n spotProductId,\n perpProductId,\n };\n },\n ),\n };\n }\n\n /**\n * Retrieves an order from the offchain engine\n *\n * @param params\n */\n async getOrder(\n params: GetEngineOrderParams,\n ): Promise<GetEngineOrderResponse> {\n const baseResponse = await this.query('order', {\n digest: params.digest,\n product_id: params.productId,\n });\n\n return mapEngineServerOrder(baseResponse);\n }\n\n /**\n * Signs and validates with the engine that the order is valid to be submitted (i.e. does not violate health reqs)\n *\n * @param params\n */\n async validateOrderParams(\n params: ValidateEngineOrderParams,\n ): Promise<ValidateEngineOrderResponse> {\n const signedOrder = {\n order: params.order,\n signature: await this.sign(\n 'place_order',\n getOrderVerifyingAddress(params.productId),\n params.chainId,\n params.order,\n ),\n };\n return this.validateSignedOrderParams({\n signedOrder,\n productId: params.productId,\n });\n }\n\n /**\n * Validates an existing signed order with the engine as a pre-check for health\n *\n * @param params\n */\n async validateSignedOrderParams(\n params: ValidateSignedEngineOrderParams,\n ): Promise<ValidateEngineOrderResponse> {\n const baseResponse = await this.query('validate_order', {\n product_id: params.productId,\n order: encodeSignedOrder(params.signedOrder),\n });\n\n return {\n productId: baseResponse.product_id,\n valid: baseResponse.valid,\n };\n }\n\n /**\n * Get all subaccount orders from the engine, per product ID\n * @param params\n */\n async getSubaccountOrders(\n params: GetEngineSubaccountOrdersParams,\n ): Promise<GetEngineSubaccountOrdersResponse> {\n const baseResponse = await this.query('subaccount_orders', {\n sender: subaccountToHex({\n subaccountOwner: params.subaccountOwner,\n subaccountName: params.subaccountName,\n }),\n product_id: params.productId,\n });\n\n return {\n orders: baseResponse.orders.map(mapEngineServerOrder),\n productId: params.productId,\n };\n }\n\n /**\n * Get all subaccount orders from the engine, for multiple products\n * @param params\n */\n async getSubaccountMultiProductOrders(\n params: GetEngineSubaccountProductOrdersParams,\n ): Promise<GetEngineSubaccountProductOrdersResponse> {\n const baseResponse = await this.query('orders', {\n sender: subaccountToHex({\n subaccountOwner: params.subaccountOwner,\n subaccountName: params.subaccountName,\n }),\n product_ids: params.productIds,\n });\n\n return {\n productOrders: baseResponse.product_orders.map((orders) => {\n return {\n orders: orders.orders.map(mapEngineServerOrder),\n productId: orders.product_id,\n };\n }),\n };\n }\n\n /**\n * Gets maker & taker fee rates for order fees\n * @param params\n */\n async getSubaccountFeeRates(\n params: GetEngineSubaccountFeeRatesParams,\n ): Promise<GetEngineSubaccountFeeRatesResponse> {\n const baseResponse = await this.query('fee_rates', {\n sender: subaccountToHex({\n subaccountOwner: params.subaccountOwner,\n subaccountName: params.subaccountName,\n }),\n });\n\n return {\n healthCheckSequencerFee: toBigNumber(\n baseResponse.health_check_sequencer_fee,\n ),\n liquidationSequencerFee: toBigNumber(\n baseResponse.liquidation_sequencer_fee,\n ),\n takerSequencerFee: toBigNumber(baseResponse.taker_sequencer_fee),\n orders: baseResponse.taker_fee_rates_x18.reduce(\n (acc, takerRateX18, currIndex) => {\n acc[currIndex] = {\n taker: removeDecimals(takerRateX18),\n maker: removeDecimals(baseResponse.maker_fee_rates_x18[currIndex]),\n };\n return acc;\n },\n {} as Record<number, SubaccountOrderFeeRates>,\n ),\n withdrawal: baseResponse.withdraw_sequencer_fees.reduce(\n (acc, productFee, currIndex) => {\n acc[currIndex] = toBigNumber(productFee);\n return acc;\n },\n {} as Record<number, BigNumber>,\n ),\n feeTier: baseResponse.fee_tier,\n };\n }\n\n /**\n * Gets \"price ticks\" for a given market, useful for constructing liquidity levels at each price\n * @param params\n */\n async getMarketLiquidity(\n params: GetEngineMarketLiquidityParams,\n ): Promise<GetEngineMarketLiquidityResponse> {\n const baseResponse = await this.query('market_liquidity', {\n product_id: params.productId,\n depth: params.depth,\n });\n return {\n asks: baseResponse.asks.map(mapEngineServerTickLiquidity),\n bids: baseResponse.bids.map(mapEngineServerTickLiquidity),\n };\n }\n\n /**\n * Retrieves the latest price for a given market\n * @param params\n */\n async getMarketPrice(\n params: GetEngineMarketPriceParams,\n ): Promise<GetEngineMarketPriceResponse> {\n const baseResponse = await this.query('market_price', {\n product_id: params.productId,\n });\n return mapEngineMarketPrice(baseResponse);\n }\n\n /**\n * Retrieves the latest prices for provided markets\n * @param params\n */\n async getMarketPrices(\n params: GetEngineMarketPricesParams,\n ): Promise<GetEngineMarketPricesResponse> {\n const baseResponse = await this.query('market_prices', {\n product_ids: params.productIds,\n });\n return {\n marketPrices: baseResponse.market_prices.map(mapEngineMarketPrice),\n };\n }\n\n /**\n * Retrieves the estimated max order size for a product\n * @param params\n */\n async getMaxOrderSize(\n params: GetEngineMaxOrderSizeParams,\n ): Promise<GetEngineMaxOrderSizeResponse> {\n const baseResponse = await this.query('max_order_size', {\n direction: params.side,\n price_x18: toIntegerString(addDecimals(params.price)),\n avg_price_x18:\n params.avgPrice != null\n ? toIntegerString(addDecimals(params.avgPrice))\n : null,\n product_id: params.productId,\n sender: subaccountToHex({\n subaccountOwner: params.subaccountOwner,\n subaccountName: params.subaccountName,\n }),\n // Backend expects string variants of booleans\n spot_leverage:\n params.spotLeverage != null ? String(params.spotLeverage) : null,\n reduce_only: params.reduceOnly != null ? String(params.reduceOnly) : null,\n isolated: params.isolated != null ? String(params.isolated) : null,\n borrow_margin:\n // This field is only relevant for isolated orders\n params.isolated && params.isoBorrowMargin != null\n ? String(params.isoBorrowMargin)\n : null,\n });\n\n return toBigNumber(baseResponse.max_order_size);\n }\n\n /**\n * Retrieves the estimated max withdrawal size for a product\n * @param params\n */\n async getMaxWithdrawable(\n params: GetEngineMaxWithdrawableParams,\n ): Promise<GetEngineMaxWithdrawableResponse> {\n const baseResponse = await this.query('max_withdrawable', {\n product_id: params.productId,\n sender: subaccountToHex({\n subaccountOwner: params.subaccountOwner,\n subaccountName: params.subaccountName,\n }),\n spot_leverage:\n params.spotLeverage != null ? String(params.spotLeverage) : null,\n });\n\n return toBigNumber(baseResponse.max_withdrawable);\n }\n\n /**\n * Retrieves the estimated max quote amount for minting NLP.\n *\n * @param params\n */\n async getMaxMintNlpAmount(\n params: GetEngineMaxMintNlpAmountParams,\n ): Promise<GetEngineMaxMintNlpAmountResponse> {\n const baseResponse = await this.query('max_nlp_mintable', {\n sender: subaccountToHex({\n subaccountOwner: params.subaccountOwner,\n subaccountName: params.subaccountName,\n }),\n spot_leverage:\n params.spotLeverage != null ? String(params.spotLeverage) : null,\n });\n\n return toBigNumber(baseResponse.max_quote_amount);\n }\n\n /**\n * Retrieves the max amount of NLP that can be burned.\n *\n * @param params\n */\n async getMaxBurnNlpAmount(\n params: GetEngineMaxBurnNlpAmountParams,\n ): Promise<GetEngineMaxBurnNlpAmountResponse> {\n const baseResponse = await this.query('max_nlp_burnable', {\n sender: subaccountToHex({\n subaccountOwner: params.subaccountOwner,\n subaccountName: params.subaccountName,\n }),\n });\n\n return toBigNumber(baseResponse.max_nlp_amount);\n }\n\n /**\n * Gets the currently linked signer for the subaccount\n * @param params\n * @returns\n */\n public async getLinkedSigner(\n params: GetEngineLinkedSignerParams,\n ): Promise<GetEngineLinkedSignerResponse> {\n const baseResponse = await this.query('linked_signer', {\n subaccount: subaccountToHex({\n subaccountOwner: params.subaccountOwner,\n subaccountName: params.subaccountName,\n }),\n });\n\n return {\n signer: baseResponse.linked_signer,\n };\n }\n\n /**\n * Gets the insurance funds in USDT.\n * @returns\n */\n public async getInsurance(): Promise<GetEngineInsuranceResponse> {\n const baseResponse = await this.query('insurance', {});\n\n return toBigNumber(baseResponse.insurance);\n }\n\n /**\n * Retrieves the NLP locked and unlocked balances for a subaccount.\n *\n * @param params\n */\n async getNlpLockedBalances(\n params: GetEngineNlpLockedBalancesParams,\n ): Promise<GetEngineNlpLockedBalancesResponse> {\n const baseResponse = await this.query('nlp_locked_balances', {\n subaccount: subaccountToHex({\n subaccountOwner: params.subaccountOwner,\n subaccountName: params.subaccountName,\n }),\n });\n\n return mapEngineServerNlpLockedBalances(baseResponse);\n }\n\n /**\n * Retrieves information about all NLP sub-pools\n */\n async getNlpPoolInfo(): Promise<GetEngineNlpPoolInfoResponse> {\n const baseResponse = await this.query('nlp_pool_info', {});\n return mapEngineServerNlpPoolInfo(baseResponse);\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { B as EngineServerQueryFailureResponse } from "./serverQueryTypes-B3vC8vxT.js";
2
+ import { r as EngineServerExecuteFailureResult } from "./serverExecuteTypes-CgbHjnWM.js";
3
+
4
+ //#region src/types/EngineServerFailureError.d.ts
5
+ declare class EngineServerFailureError extends Error {
6
+ readonly responseData: EngineServerQueryFailureResponse | EngineServerExecuteFailureResult;
7
+ constructor(responseData: EngineServerQueryFailureResponse | EngineServerExecuteFailureResult);
8
+ }
9
+ //#endregion
10
+ export { EngineServerFailureError as t };
11
+ //# sourceMappingURL=EngineServerFailureError-CDabRrF4.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EngineServerFailureError-CDabRrF4.d.ts","names":[],"sources":["../src/types/src/types/EngineServerFailureError.ts"],"mappings":";;;;cAGa,wBAAA,SAAiC,KAAA;EAAA,SAEjC,YAAA,EACL,gCAAA,GACA,gCAAA;cAFK,YAAA,EACL,gCAAA,GACA,gCAAA;AAAA"}
@@ -0,0 +1,11 @@
1
+ import { B as EngineServerQueryFailureResponse } from "./serverQueryTypes-Dva9R2tV.cjs";
2
+ import { r as EngineServerExecuteFailureResult } from "./serverExecuteTypes-DejTR8Is.cjs";
3
+
4
+ //#region src/types/EngineServerFailureError.d.ts
5
+ declare class EngineServerFailureError extends Error {
6
+ readonly responseData: EngineServerQueryFailureResponse | EngineServerExecuteFailureResult;
7
+ constructor(responseData: EngineServerQueryFailureResponse | EngineServerExecuteFailureResult);
8
+ }
9
+ //#endregion
10
+ export { EngineServerFailureError as t };
11
+ //# sourceMappingURL=EngineServerFailureError-DpPY0--L.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EngineServerFailureError-DpPY0--L.d.cts","names":[],"sources":["../src/types/src/types/EngineServerFailureError.ts"],"mappings":";;;;cAGa,wBAAA,SAAiC,KAAA;EAAA,SAEjC,YAAA,EACL,gCAAA,GACA,gCAAA;cAFK,YAAA,EACL,gCAAA,GACA,gCAAA;AAAA"}
@@ -0,0 +1,35 @@
1
+ import { X as GetEngineTimeResponse, d as GetEngineCountryCodeResponse, h as GetEngineIpBlockStatusResponse } from "./clientQueryTypes-DuRgEeBT.js";
2
+ import { t as EngineBaseClient } from "./EngineBaseClient-DOOXIhnZ.js";
3
+
4
+ //#region src/EngineWebClient.d.ts
5
+ /**
6
+ * Queries that talk directly to web, _not_ the engine. Placing here in the `engine-client` as we don't have enough
7
+ * use cases to justify a separate package
8
+ */
9
+ declare class EngineWebClient extends EngineBaseClient {
10
+ /**
11
+ * Determines the IP block status for the current client
12
+ */
13
+ getIpBlockStatus(): Promise<GetEngineIpBlockStatusResponse>;
14
+ /**
15
+ * Retrieves the caller's country code as detected by the gateway, sourced
16
+ * from the `x-nado-country` response header on `/ip`. Returns `null` when
17
+ * the gateway does not provide it (e.g. local environments).
18
+ *
19
+ * Useful for region-based UI gating such as geoblocking trading competitions.
20
+ */
21
+ getCountryCode(): Promise<GetEngineCountryCodeResponse>;
22
+ /**
23
+ * Determines whether a client needs to complete the cloudflare JS challenge to interact with the API
24
+ *
25
+ * @return true if the client needs to complete the JS challenge at '/challenge', false otherwise
26
+ */
27
+ getRequiresCloudflareAuth(): Promise<boolean>;
28
+ /**
29
+ * Retrieves current server epoch in milliseconds
30
+ */
31
+ getTime(): Promise<GetEngineTimeResponse>;
32
+ }
33
+ //#endregion
34
+ export { EngineWebClient as t };
35
+ //# sourceMappingURL=EngineWebClient-CEwqgd4t.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EngineWebClient-CEwqgd4t.d.ts","names":[],"sources":["../src/src/EngineWebClient.ts"],"mappings":";;;;;;;AAcA;cAAa,eAAA,SAAwB,gBAAA;;;;EAI7B,gBAAA,CAAA,GAAoB,OAAA,CAAQ,8BAAA;EA8BV;;;;;;;EAAlB,cAAA,CAAA,GAAkB,OAAA,CAAQ,4BAAA;EA9B1B;;;;;EA6CA,yBAAA,CAAA,GAA6B,OAAA;EAA7B;;;EAqBA,OAAA,CAAA,GAAW,OAAA,CAAQ,qBAAA;AAAA"}
@@ -0,0 +1,35 @@
1
+ import { X as GetEngineTimeResponse, d as GetEngineCountryCodeResponse, h as GetEngineIpBlockStatusResponse } from "./clientQueryTypes-DlTtS_mX.cjs";
2
+ import { t as EngineBaseClient } from "./EngineBaseClient-L1ue7jBx.cjs";
3
+
4
+ //#region src/EngineWebClient.d.ts
5
+ /**
6
+ * Queries that talk directly to web, _not_ the engine. Placing here in the `engine-client` as we don't have enough
7
+ * use cases to justify a separate package
8
+ */
9
+ declare class EngineWebClient extends EngineBaseClient {
10
+ /**
11
+ * Determines the IP block status for the current client
12
+ */
13
+ getIpBlockStatus(): Promise<GetEngineIpBlockStatusResponse>;
14
+ /**
15
+ * Retrieves the caller's country code as detected by the gateway, sourced
16
+ * from the `x-nado-country` response header on `/ip`. Returns `null` when
17
+ * the gateway does not provide it (e.g. local environments).
18
+ *
19
+ * Useful for region-based UI gating such as geoblocking trading competitions.
20
+ */
21
+ getCountryCode(): Promise<GetEngineCountryCodeResponse>;
22
+ /**
23
+ * Determines whether a client needs to complete the cloudflare JS challenge to interact with the API
24
+ *
25
+ * @return true if the client needs to complete the JS challenge at '/challenge', false otherwise
26
+ */
27
+ getRequiresCloudflareAuth(): Promise<boolean>;
28
+ /**
29
+ * Retrieves current server epoch in milliseconds
30
+ */
31
+ getTime(): Promise<GetEngineTimeResponse>;
32
+ }
33
+ //#endregion
34
+ export { EngineWebClient as t };
35
+ //# sourceMappingURL=EngineWebClient-DajZqKAQ.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EngineWebClient-DajZqKAQ.d.cts","names":[],"sources":["../src/src/EngineWebClient.ts"],"mappings":";;;;;;;AAcA;cAAa,eAAA,SAAwB,gBAAA;;;;EAI7B,gBAAA,CAAA,GAAoB,OAAA,CAAQ,8BAAA;EA8BV;;;;;;;EAAlB,cAAA,CAAA,GAAkB,OAAA,CAAQ,4BAAA;EA9B1B;;;;;EA6CA,yBAAA,CAAA,GAA6B,OAAA;EAA7B;;;EAqBA,OAAA,CAAA,GAAW,OAAA,CAAQ,qBAAA;AAAA"}
@@ -1,89 +1,52 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_EngineBaseClient = require("./EngineBaseClient-Uc1D8ftx.cjs");
3
+ //#region src/EngineWebClient.ts
4
+ const COUNTRY_HEADER = "x-nado-country";
5
+ /**
6
+ * Queries that talk directly to web, _not_ the engine. Placing here in the `engine-client` as we don't have enough
7
+ * use cases to justify a separate package
8
+ */
9
+ var EngineWebClient = class extends require_EngineBaseClient.EngineBaseClient {
10
+ /**
11
+ * Determines the IP block status for the current client
12
+ */
13
+ async getIpBlockStatus() {
14
+ return this.axiosInstance.get(`${this.opts.url}/ip`, { withCredentials: false }).then((res) => {
15
+ if (res.status !== 403) return null;
16
+ const resData = res.data;
17
+ if (!resData.blocked) return null;
18
+ return resData.reason === "ip_query_only" ? "query_only" : "blocked";
19
+ });
20
+ }
21
+ /**
22
+ * Retrieves the caller's country code as detected by the gateway, sourced
23
+ * from the `x-nado-country` response header on `/ip`. Returns `null` when
24
+ * the gateway does not provide it (e.g. local environments).
25
+ *
26
+ * Useful for region-based UI gating such as geoblocking trading competitions.
27
+ */
28
+ async getCountryCode() {
29
+ return (await this.axiosInstance.get(`${this.opts.url}/ip`, { withCredentials: false })).headers?.[COUNTRY_HEADER] ?? null;
30
+ }
31
+ /**
32
+ * Determines whether a client needs to complete the cloudflare JS challenge to interact with the API
33
+ *
34
+ * @return true if the client needs to complete the JS challenge at '/challenge', false otherwise
35
+ */
36
+ async getRequiresCloudflareAuth() {
37
+ return this.axiosInstance.get(`${this.opts.url}/cf-check`, { validateStatus: () => true }).then((res) => {
38
+ if (res.status !== 403) return false;
39
+ return res.headers["cf-mitigated"] === "challenge";
40
+ });
41
+ }
42
+ /**
43
+ * Retrieves current server epoch in milliseconds
44
+ */
45
+ async getTime() {
46
+ return this.axiosInstance.get(`${this.opts.url}/time`).then((res) => res.data);
47
+ }
9
48
  };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
49
+ //#endregion
50
+ exports.EngineWebClient = EngineWebClient;
19
51
 
20
- // src/EngineWebClient.ts
21
- var EngineWebClient_exports = {};
22
- __export(EngineWebClient_exports, {
23
- EngineWebClient: () => EngineWebClient
24
- });
25
- module.exports = __toCommonJS(EngineWebClient_exports);
26
- var import_EngineBaseClient = require("./EngineBaseClient.cjs");
27
- var COUNTRY_HEADER = "x-nado-country";
28
- var EngineWebClient = class extends import_EngineBaseClient.EngineBaseClient {
29
- /**
30
- * Determines the IP block status for the current client
31
- */
32
- async getIpBlockStatus() {
33
- return this.axiosInstance.get(`${this.opts.url}/ip`, {
34
- // IP checks go through Cloudflare, which uses allow-origin as *, so withCredentials needs to be false
35
- withCredentials: false
36
- }).then((res) => {
37
- if (res.status !== 403) {
38
- return null;
39
- }
40
- const resData = res.data;
41
- if (!resData.blocked) {
42
- return null;
43
- }
44
- return resData.reason === "ip_query_only" ? "query_only" : "blocked";
45
- });
46
- }
47
- /**
48
- * Retrieves the caller's country code as detected by the gateway, sourced
49
- * from the `x-nado-country` response header on `/ip`. Returns `null` when
50
- * the gateway does not provide it (e.g. local environments).
51
- *
52
- * Useful for region-based UI gating such as geoblocking trading competitions.
53
- */
54
- async getCountryCode() {
55
- const res = await this.axiosInstance.get(`${this.opts.url}/ip`, {
56
- // IP checks go through Cloudflare, which uses allow-origin as *, so withCredentials needs to be false
57
- withCredentials: false
58
- });
59
- const rawCountry = res.headers?.[COUNTRY_HEADER];
60
- return rawCountry ?? null;
61
- }
62
- /**
63
- * Determines whether a client needs to complete the cloudflare JS challenge to interact with the API
64
- *
65
- * @return true if the client needs to complete the JS challenge at '/challenge', false otherwise
66
- */
67
- async getRequiresCloudflareAuth() {
68
- return this.axiosInstance.get(`${this.opts.url}/cf-check`, {
69
- // Allow all statuses
70
- validateStatus: () => true
71
- }).then((res) => {
72
- if (res.status !== 403) {
73
- return false;
74
- }
75
- return res.headers["cf-mitigated"] === "challenge";
76
- });
77
- }
78
- /**
79
- * Retrieves current server epoch in milliseconds
80
- */
81
- async getTime() {
82
- return this.axiosInstance.get(`${this.opts.url}/time`).then((res) => res.data);
83
- }
84
- };
85
- // Annotate the CommonJS export names for ESM import in node:
86
- 0 && (module.exports = {
87
- EngineWebClient
88
- });
89
52
  //# sourceMappingURL=EngineWebClient.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/EngineWebClient.ts"],"sourcesContent":["import { EngineBaseClient } from './EngineBaseClient';\nimport {\n EngineServerIpBlockResponse,\n GetEngineCountryCodeResponse,\n GetEngineIpBlockStatusResponse,\n GetEngineTimeResponse,\n} from './types';\n\nconst COUNTRY_HEADER = 'x-nado-country';\n\n/**\n * Queries that talk directly to web, _not_ the engine. Placing here in the `engine-client` as we don't have enough\n * use cases to justify a separate package\n */\nexport class EngineWebClient extends EngineBaseClient {\n /**\n * Determines the IP block status for the current client\n */\n async getIpBlockStatus(): Promise<GetEngineIpBlockStatusResponse> {\n return (\n this.axiosInstance\n // Use the /ip endpoint and listen to 403 responses\n .get(`${this.opts.url}/ip`, {\n // IP checks go through Cloudflare, which uses allow-origin as *, so withCredentials needs to be false\n withCredentials: false,\n })\n .then((res) => {\n if (res.status !== 403) {\n return null;\n }\n const resData = res.data as EngineServerIpBlockResponse;\n\n if (!resData.blocked) {\n return null;\n }\n\n return resData.reason === 'ip_query_only' ? 'query_only' : 'blocked';\n })\n );\n }\n\n /**\n * Retrieves the caller's country code as detected by the gateway, sourced\n * from the `x-nado-country` response header on `/ip`. Returns `null` when\n * the gateway does not provide it (e.g. local environments).\n *\n * Useful for region-based UI gating such as geoblocking trading competitions.\n */\n async getCountryCode(): Promise<GetEngineCountryCodeResponse> {\n const res = await this.axiosInstance.get(`${this.opts.url}/ip`, {\n // IP checks go through Cloudflare, which uses allow-origin as *, so withCredentials needs to be false\n withCredentials: false,\n });\n\n const rawCountry = res.headers?.[COUNTRY_HEADER] as string | undefined;\n return rawCountry ?? null;\n }\n\n /**\n * Determines whether a client needs to complete the cloudflare JS challenge to interact with the API\n *\n * @return true if the client needs to complete the JS challenge at '/challenge', false otherwise\n */\n async getRequiresCloudflareAuth(): Promise<boolean> {\n // We use a generic endpoint and check for the CF challenge header\n // Note: this uses a CORS set to the relevant frontend endpoint (ex. testnet.vertexprotocol.com) so it will NOT\n // work from other domains\n return this.axiosInstance\n .get(`${this.opts.url}/cf-check`, {\n // Allow all statuses\n validateStatus: () => true,\n })\n .then((res) => {\n if (res.status !== 403) {\n return false;\n }\n\n return res.headers['cf-mitigated'] === 'challenge';\n });\n }\n\n /**\n * Retrieves current server epoch in milliseconds\n */\n async getTime(): Promise<GetEngineTimeResponse> {\n return this.axiosInstance\n .get(`${this.opts.url}/time`)\n .then((res) => res.data as GetEngineTimeResponse);\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8BAAiC;AAQjC,IAAM,iBAAiB;AAMhB,IAAM,kBAAN,cAA8B,yCAAiB;AAAA;AAAA;AAAA;AAAA,EAIpD,MAAM,mBAA4D;AAChE,WACE,KAAK,cAEF,IAAI,GAAG,KAAK,KAAK,GAAG,OAAO;AAAA;AAAA,MAE1B,iBAAiB;AAAA,IACnB,CAAC,EACA,KAAK,CAAC,QAAQ;AACb,UAAI,IAAI,WAAW,KAAK;AACtB,eAAO;AAAA,MACT;AACA,YAAM,UAAU,IAAI;AAEpB,UAAI,CAAC,QAAQ,SAAS;AACpB,eAAO;AAAA,MACT;AAEA,aAAO,QAAQ,WAAW,kBAAkB,eAAe;AAAA,IAC7D,CAAC;AAAA,EAEP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,iBAAwD;AAC5D,UAAM,MAAM,MAAM,KAAK,cAAc,IAAI,GAAG,KAAK,KAAK,GAAG,OAAO;AAAA;AAAA,MAE9D,iBAAiB;AAAA,IACnB,CAAC;AAED,UAAM,aAAa,IAAI,UAAU,cAAc;AAC/C,WAAO,cAAc;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,4BAA8C;AAIlD,WAAO,KAAK,cACT,IAAI,GAAG,KAAK,KAAK,GAAG,aAAa;AAAA;AAAA,MAEhC,gBAAgB,MAAM;AAAA,IACxB,CAAC,EACA,KAAK,CAAC,QAAQ;AACb,UAAI,IAAI,WAAW,KAAK;AACtB,eAAO;AAAA,MACT;AAEA,aAAO,IAAI,QAAQ,cAAc,MAAM;AAAA,IACzC,CAAC;AAAA,EACL;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,UAA0C;AAC9C,WAAO,KAAK,cACT,IAAI,GAAG,KAAK,KAAK,GAAG,OAAO,EAC3B,KAAK,CAAC,QAAQ,IAAI,IAA6B;AAAA,EACpD;AACF;","names":[]}
1
+ {"version":3,"file":"EngineWebClient.cjs","names":["EngineBaseClient"],"sources":["../src/EngineWebClient.ts"],"sourcesContent":["import { EngineBaseClient } from './EngineBaseClient';\nimport {\n EngineServerIpBlockResponse,\n GetEngineCountryCodeResponse,\n GetEngineIpBlockStatusResponse,\n GetEngineTimeResponse,\n} from './types';\n\nconst COUNTRY_HEADER = 'x-nado-country';\n\n/**\n * Queries that talk directly to web, _not_ the engine. Placing here in the `engine-client` as we don't have enough\n * use cases to justify a separate package\n */\nexport class EngineWebClient extends EngineBaseClient {\n /**\n * Determines the IP block status for the current client\n */\n async getIpBlockStatus(): Promise<GetEngineIpBlockStatusResponse> {\n return (\n this.axiosInstance\n // Use the /ip endpoint and listen to 403 responses\n .get(`${this.opts.url}/ip`, {\n // IP checks go through Cloudflare, which uses allow-origin as *, so withCredentials needs to be false\n withCredentials: false,\n })\n .then((res) => {\n if (res.status !== 403) {\n return null;\n }\n const resData = res.data as EngineServerIpBlockResponse;\n\n if (!resData.blocked) {\n return null;\n }\n\n return resData.reason === 'ip_query_only' ? 'query_only' : 'blocked';\n })\n );\n }\n\n /**\n * Retrieves the caller's country code as detected by the gateway, sourced\n * from the `x-nado-country` response header on `/ip`. Returns `null` when\n * the gateway does not provide it (e.g. local environments).\n *\n * Useful for region-based UI gating such as geoblocking trading competitions.\n */\n async getCountryCode(): Promise<GetEngineCountryCodeResponse> {\n const res = await this.axiosInstance.get(`${this.opts.url}/ip`, {\n // IP checks go through Cloudflare, which uses allow-origin as *, so withCredentials needs to be false\n withCredentials: false,\n });\n\n const rawCountry = res.headers?.[COUNTRY_HEADER] as string | undefined;\n return rawCountry ?? null;\n }\n\n /**\n * Determines whether a client needs to complete the cloudflare JS challenge to interact with the API\n *\n * @return true if the client needs to complete the JS challenge at '/challenge', false otherwise\n */\n async getRequiresCloudflareAuth(): Promise<boolean> {\n // We use a generic endpoint and check for the CF challenge header\n // Note: this uses a CORS set to the relevant frontend endpoint (ex. testnet.vertexprotocol.com) so it will NOT\n // work from other domains\n return this.axiosInstance\n .get(`${this.opts.url}/cf-check`, {\n // Allow all statuses\n validateStatus: () => true,\n })\n .then((res) => {\n if (res.status !== 403) {\n return false;\n }\n\n return res.headers['cf-mitigated'] === 'challenge';\n });\n }\n\n /**\n * Retrieves current server epoch in milliseconds\n */\n async getTime(): Promise<GetEngineTimeResponse> {\n return this.axiosInstance\n .get(`${this.opts.url}/time`)\n .then((res) => res.data as GetEngineTimeResponse);\n }\n}\n"],"mappings":";;;AAQA,MAAM,iBAAiB;;;;;AAMvB,IAAa,kBAAb,cAAqCA,yBAAAA,iBAAiB;;;;CAIpD,MAAM,mBAA4D;EAChE,OACE,KAAK,cAEF,IAAI,GAAG,KAAK,KAAK,IAAI,MAAM,EAE1B,iBAAiB,MACnB,CAAC,EACA,MAAM,QAAQ;GACb,IAAI,IAAI,WAAW,KACjB,OAAO;GAET,MAAM,UAAU,IAAI;GAEpB,IAAI,CAAC,QAAQ,SACX,OAAO;GAGT,OAAO,QAAQ,WAAW,kBAAkB,eAAe;EAC7D,CAAC;CAEP;;;;;;;;CASA,MAAM,iBAAwD;EAO5D,QADmB,MALD,KAAK,cAAc,IAAI,GAAG,KAAK,KAAK,IAAI,MAAM,EAE9D,iBAAiB,MACnB,CAAC,GAEsB,UAAU,mBACZ;CACvB;;;;;;CAOA,MAAM,4BAA8C;EAIlD,OAAO,KAAK,cACT,IAAI,GAAG,KAAK,KAAK,IAAI,YAAY,EAEhC,sBAAsB,KACxB,CAAC,EACA,MAAM,QAAQ;GACb,IAAI,IAAI,WAAW,KACjB,OAAO;GAGT,OAAO,IAAI,QAAQ,oBAAoB;EACzC,CAAC;CACL;;;;CAKA,MAAM,UAA0C;EAC9C,OAAO,KAAK,cACT,IAAI,GAAG,KAAK,KAAK,IAAI,MAAM,EAC3B,MAAM,QAAQ,IAAI,IAA6B;CACpD;AACF"}
@@ -1,39 +1,2 @@
1
- import { EngineBaseClient } from './EngineBaseClient.cjs';
2
- import { GetEngineIpBlockStatusResponse, GetEngineCountryCodeResponse, GetEngineTimeResponse } from './types/clientQueryTypes.cjs';
3
- import '@nadohq/shared';
4
- import 'axios';
5
- import './types/serverExecuteTypes.cjs';
6
- import './types/serverQueryTypes.cjs';
7
- import './types/serverQueryModelTypes.cjs';
8
- import 'bignumber.js';
9
-
10
- /**
11
- * Queries that talk directly to web, _not_ the engine. Placing here in the `engine-client` as we don't have enough
12
- * use cases to justify a separate package
13
- */
14
- declare class EngineWebClient extends EngineBaseClient {
15
- /**
16
- * Determines the IP block status for the current client
17
- */
18
- getIpBlockStatus(): Promise<GetEngineIpBlockStatusResponse>;
19
- /**
20
- * Retrieves the caller's country code as detected by the gateway, sourced
21
- * from the `x-nado-country` response header on `/ip`. Returns `null` when
22
- * the gateway does not provide it (e.g. local environments).
23
- *
24
- * Useful for region-based UI gating such as geoblocking trading competitions.
25
- */
26
- getCountryCode(): Promise<GetEngineCountryCodeResponse>;
27
- /**
28
- * Determines whether a client needs to complete the cloudflare JS challenge to interact with the API
29
- *
30
- * @return true if the client needs to complete the JS challenge at '/challenge', false otherwise
31
- */
32
- getRequiresCloudflareAuth(): Promise<boolean>;
33
- /**
34
- * Retrieves current server epoch in milliseconds
35
- */
36
- getTime(): Promise<GetEngineTimeResponse>;
37
- }
38
-
39
- export { EngineWebClient };
1
+ import { t as EngineWebClient } from "./EngineWebClient-DajZqKAQ.cjs";
2
+ export { EngineWebClient };
@@ -1,39 +1,2 @@
1
- import { EngineBaseClient } from './EngineBaseClient.js';
2
- import { GetEngineIpBlockStatusResponse, GetEngineCountryCodeResponse, GetEngineTimeResponse } from './types/clientQueryTypes.js';
3
- import '@nadohq/shared';
4
- import 'axios';
5
- import './types/serverExecuteTypes.js';
6
- import './types/serverQueryTypes.js';
7
- import './types/serverQueryModelTypes.js';
8
- import 'bignumber.js';
9
-
10
- /**
11
- * Queries that talk directly to web, _not_ the engine. Placing here in the `engine-client` as we don't have enough
12
- * use cases to justify a separate package
13
- */
14
- declare class EngineWebClient extends EngineBaseClient {
15
- /**
16
- * Determines the IP block status for the current client
17
- */
18
- getIpBlockStatus(): Promise<GetEngineIpBlockStatusResponse>;
19
- /**
20
- * Retrieves the caller's country code as detected by the gateway, sourced
21
- * from the `x-nado-country` response header on `/ip`. Returns `null` when
22
- * the gateway does not provide it (e.g. local environments).
23
- *
24
- * Useful for region-based UI gating such as geoblocking trading competitions.
25
- */
26
- getCountryCode(): Promise<GetEngineCountryCodeResponse>;
27
- /**
28
- * Determines whether a client needs to complete the cloudflare JS challenge to interact with the API
29
- *
30
- * @return true if the client needs to complete the JS challenge at '/challenge', false otherwise
31
- */
32
- getRequiresCloudflareAuth(): Promise<boolean>;
33
- /**
34
- * Retrieves current server epoch in milliseconds
35
- */
36
- getTime(): Promise<GetEngineTimeResponse>;
37
- }
38
-
39
- export { EngineWebClient };
1
+ import { t as EngineWebClient } from "./EngineWebClient-CEwqgd4t.js";
2
+ export { EngineWebClient };
@@ -1,64 +1,51 @@
1
- // src/EngineWebClient.ts
2
1
  import { EngineBaseClient } from "./EngineBaseClient.js";
3
- var COUNTRY_HEADER = "x-nado-country";
2
+ //#region src/EngineWebClient.ts
3
+ const COUNTRY_HEADER = "x-nado-country";
4
+ /**
5
+ * Queries that talk directly to web, _not_ the engine. Placing here in the `engine-client` as we don't have enough
6
+ * use cases to justify a separate package
7
+ */
4
8
  var EngineWebClient = class extends EngineBaseClient {
5
- /**
6
- * Determines the IP block status for the current client
7
- */
8
- async getIpBlockStatus() {
9
- return this.axiosInstance.get(`${this.opts.url}/ip`, {
10
- // IP checks go through Cloudflare, which uses allow-origin as *, so withCredentials needs to be false
11
- withCredentials: false
12
- }).then((res) => {
13
- if (res.status !== 403) {
14
- return null;
15
- }
16
- const resData = res.data;
17
- if (!resData.blocked) {
18
- return null;
19
- }
20
- return resData.reason === "ip_query_only" ? "query_only" : "blocked";
21
- });
22
- }
23
- /**
24
- * Retrieves the caller's country code as detected by the gateway, sourced
25
- * from the `x-nado-country` response header on `/ip`. Returns `null` when
26
- * the gateway does not provide it (e.g. local environments).
27
- *
28
- * Useful for region-based UI gating such as geoblocking trading competitions.
29
- */
30
- async getCountryCode() {
31
- const res = await this.axiosInstance.get(`${this.opts.url}/ip`, {
32
- // IP checks go through Cloudflare, which uses allow-origin as *, so withCredentials needs to be false
33
- withCredentials: false
34
- });
35
- const rawCountry = res.headers?.[COUNTRY_HEADER];
36
- return rawCountry ?? null;
37
- }
38
- /**
39
- * Determines whether a client needs to complete the cloudflare JS challenge to interact with the API
40
- *
41
- * @return true if the client needs to complete the JS challenge at '/challenge', false otherwise
42
- */
43
- async getRequiresCloudflareAuth() {
44
- return this.axiosInstance.get(`${this.opts.url}/cf-check`, {
45
- // Allow all statuses
46
- validateStatus: () => true
47
- }).then((res) => {
48
- if (res.status !== 403) {
49
- return false;
50
- }
51
- return res.headers["cf-mitigated"] === "challenge";
52
- });
53
- }
54
- /**
55
- * Retrieves current server epoch in milliseconds
56
- */
57
- async getTime() {
58
- return this.axiosInstance.get(`${this.opts.url}/time`).then((res) => res.data);
59
- }
60
- };
61
- export {
62
- EngineWebClient
9
+ /**
10
+ * Determines the IP block status for the current client
11
+ */
12
+ async getIpBlockStatus() {
13
+ return this.axiosInstance.get(`${this.opts.url}/ip`, { withCredentials: false }).then((res) => {
14
+ if (res.status !== 403) return null;
15
+ const resData = res.data;
16
+ if (!resData.blocked) return null;
17
+ return resData.reason === "ip_query_only" ? "query_only" : "blocked";
18
+ });
19
+ }
20
+ /**
21
+ * Retrieves the caller's country code as detected by the gateway, sourced
22
+ * from the `x-nado-country` response header on `/ip`. Returns `null` when
23
+ * the gateway does not provide it (e.g. local environments).
24
+ *
25
+ * Useful for region-based UI gating such as geoblocking trading competitions.
26
+ */
27
+ async getCountryCode() {
28
+ return (await this.axiosInstance.get(`${this.opts.url}/ip`, { withCredentials: false })).headers?.[COUNTRY_HEADER] ?? null;
29
+ }
30
+ /**
31
+ * Determines whether a client needs to complete the cloudflare JS challenge to interact with the API
32
+ *
33
+ * @return true if the client needs to complete the JS challenge at '/challenge', false otherwise
34
+ */
35
+ async getRequiresCloudflareAuth() {
36
+ return this.axiosInstance.get(`${this.opts.url}/cf-check`, { validateStatus: () => true }).then((res) => {
37
+ if (res.status !== 403) return false;
38
+ return res.headers["cf-mitigated"] === "challenge";
39
+ });
40
+ }
41
+ /**
42
+ * Retrieves current server epoch in milliseconds
43
+ */
44
+ async getTime() {
45
+ return this.axiosInstance.get(`${this.opts.url}/time`).then((res) => res.data);
46
+ }
63
47
  };
48
+ //#endregion
49
+ export { EngineWebClient };
50
+
64
51
  //# sourceMappingURL=EngineWebClient.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/EngineWebClient.ts"],"sourcesContent":["import { EngineBaseClient } from './EngineBaseClient';\nimport {\n EngineServerIpBlockResponse,\n GetEngineCountryCodeResponse,\n GetEngineIpBlockStatusResponse,\n GetEngineTimeResponse,\n} from './types';\n\nconst COUNTRY_HEADER = 'x-nado-country';\n\n/**\n * Queries that talk directly to web, _not_ the engine. Placing here in the `engine-client` as we don't have enough\n * use cases to justify a separate package\n */\nexport class EngineWebClient extends EngineBaseClient {\n /**\n * Determines the IP block status for the current client\n */\n async getIpBlockStatus(): Promise<GetEngineIpBlockStatusResponse> {\n return (\n this.axiosInstance\n // Use the /ip endpoint and listen to 403 responses\n .get(`${this.opts.url}/ip`, {\n // IP checks go through Cloudflare, which uses allow-origin as *, so withCredentials needs to be false\n withCredentials: false,\n })\n .then((res) => {\n if (res.status !== 403) {\n return null;\n }\n const resData = res.data as EngineServerIpBlockResponse;\n\n if (!resData.blocked) {\n return null;\n }\n\n return resData.reason === 'ip_query_only' ? 'query_only' : 'blocked';\n })\n );\n }\n\n /**\n * Retrieves the caller's country code as detected by the gateway, sourced\n * from the `x-nado-country` response header on `/ip`. Returns `null` when\n * the gateway does not provide it (e.g. local environments).\n *\n * Useful for region-based UI gating such as geoblocking trading competitions.\n */\n async getCountryCode(): Promise<GetEngineCountryCodeResponse> {\n const res = await this.axiosInstance.get(`${this.opts.url}/ip`, {\n // IP checks go through Cloudflare, which uses allow-origin as *, so withCredentials needs to be false\n withCredentials: false,\n });\n\n const rawCountry = res.headers?.[COUNTRY_HEADER] as string | undefined;\n return rawCountry ?? null;\n }\n\n /**\n * Determines whether a client needs to complete the cloudflare JS challenge to interact with the API\n *\n * @return true if the client needs to complete the JS challenge at '/challenge', false otherwise\n */\n async getRequiresCloudflareAuth(): Promise<boolean> {\n // We use a generic endpoint and check for the CF challenge header\n // Note: this uses a CORS set to the relevant frontend endpoint (ex. testnet.vertexprotocol.com) so it will NOT\n // work from other domains\n return this.axiosInstance\n .get(`${this.opts.url}/cf-check`, {\n // Allow all statuses\n validateStatus: () => true,\n })\n .then((res) => {\n if (res.status !== 403) {\n return false;\n }\n\n return res.headers['cf-mitigated'] === 'challenge';\n });\n }\n\n /**\n * Retrieves current server epoch in milliseconds\n */\n async getTime(): Promise<GetEngineTimeResponse> {\n return this.axiosInstance\n .get(`${this.opts.url}/time`)\n .then((res) => res.data as GetEngineTimeResponse);\n }\n}\n"],"mappings":";AAAA,SAAS,wBAAwB;AAQjC,IAAM,iBAAiB;AAMhB,IAAM,kBAAN,cAA8B,iBAAiB;AAAA;AAAA;AAAA;AAAA,EAIpD,MAAM,mBAA4D;AAChE,WACE,KAAK,cAEF,IAAI,GAAG,KAAK,KAAK,GAAG,OAAO;AAAA;AAAA,MAE1B,iBAAiB;AAAA,IACnB,CAAC,EACA,KAAK,CAAC,QAAQ;AACb,UAAI,IAAI,WAAW,KAAK;AACtB,eAAO;AAAA,MACT;AACA,YAAM,UAAU,IAAI;AAEpB,UAAI,CAAC,QAAQ,SAAS;AACpB,eAAO;AAAA,MACT;AAEA,aAAO,QAAQ,WAAW,kBAAkB,eAAe;AAAA,IAC7D,CAAC;AAAA,EAEP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,iBAAwD;AAC5D,UAAM,MAAM,MAAM,KAAK,cAAc,IAAI,GAAG,KAAK,KAAK,GAAG,OAAO;AAAA;AAAA,MAE9D,iBAAiB;AAAA,IACnB,CAAC;AAED,UAAM,aAAa,IAAI,UAAU,cAAc;AAC/C,WAAO,cAAc;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,4BAA8C;AAIlD,WAAO,KAAK,cACT,IAAI,GAAG,KAAK,KAAK,GAAG,aAAa;AAAA;AAAA,MAEhC,gBAAgB,MAAM;AAAA,IACxB,CAAC,EACA,KAAK,CAAC,QAAQ;AACb,UAAI,IAAI,WAAW,KAAK;AACtB,eAAO;AAAA,MACT;AAEA,aAAO,IAAI,QAAQ,cAAc,MAAM;AAAA,IACzC,CAAC;AAAA,EACL;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,UAA0C;AAC9C,WAAO,KAAK,cACT,IAAI,GAAG,KAAK,KAAK,GAAG,OAAO,EAC3B,KAAK,CAAC,QAAQ,IAAI,IAA6B;AAAA,EACpD;AACF;","names":[]}
1
+ {"version":3,"file":"EngineWebClient.js","names":[],"sources":["../src/EngineWebClient.ts"],"sourcesContent":["import { EngineBaseClient } from './EngineBaseClient';\nimport {\n EngineServerIpBlockResponse,\n GetEngineCountryCodeResponse,\n GetEngineIpBlockStatusResponse,\n GetEngineTimeResponse,\n} from './types';\n\nconst COUNTRY_HEADER = 'x-nado-country';\n\n/**\n * Queries that talk directly to web, _not_ the engine. Placing here in the `engine-client` as we don't have enough\n * use cases to justify a separate package\n */\nexport class EngineWebClient extends EngineBaseClient {\n /**\n * Determines the IP block status for the current client\n */\n async getIpBlockStatus(): Promise<GetEngineIpBlockStatusResponse> {\n return (\n this.axiosInstance\n // Use the /ip endpoint and listen to 403 responses\n .get(`${this.opts.url}/ip`, {\n // IP checks go through Cloudflare, which uses allow-origin as *, so withCredentials needs to be false\n withCredentials: false,\n })\n .then((res) => {\n if (res.status !== 403) {\n return null;\n }\n const resData = res.data as EngineServerIpBlockResponse;\n\n if (!resData.blocked) {\n return null;\n }\n\n return resData.reason === 'ip_query_only' ? 'query_only' : 'blocked';\n })\n );\n }\n\n /**\n * Retrieves the caller's country code as detected by the gateway, sourced\n * from the `x-nado-country` response header on `/ip`. Returns `null` when\n * the gateway does not provide it (e.g. local environments).\n *\n * Useful for region-based UI gating such as geoblocking trading competitions.\n */\n async getCountryCode(): Promise<GetEngineCountryCodeResponse> {\n const res = await this.axiosInstance.get(`${this.opts.url}/ip`, {\n // IP checks go through Cloudflare, which uses allow-origin as *, so withCredentials needs to be false\n withCredentials: false,\n });\n\n const rawCountry = res.headers?.[COUNTRY_HEADER] as string | undefined;\n return rawCountry ?? null;\n }\n\n /**\n * Determines whether a client needs to complete the cloudflare JS challenge to interact with the API\n *\n * @return true if the client needs to complete the JS challenge at '/challenge', false otherwise\n */\n async getRequiresCloudflareAuth(): Promise<boolean> {\n // We use a generic endpoint and check for the CF challenge header\n // Note: this uses a CORS set to the relevant frontend endpoint (ex. testnet.vertexprotocol.com) so it will NOT\n // work from other domains\n return this.axiosInstance\n .get(`${this.opts.url}/cf-check`, {\n // Allow all statuses\n validateStatus: () => true,\n })\n .then((res) => {\n if (res.status !== 403) {\n return false;\n }\n\n return res.headers['cf-mitigated'] === 'challenge';\n });\n }\n\n /**\n * Retrieves current server epoch in milliseconds\n */\n async getTime(): Promise<GetEngineTimeResponse> {\n return this.axiosInstance\n .get(`${this.opts.url}/time`)\n .then((res) => res.data as GetEngineTimeResponse);\n }\n}\n"],"mappings":";;AAQA,MAAM,iBAAiB;;;;;AAMvB,IAAa,kBAAb,cAAqC,iBAAiB;;;;CAIpD,MAAM,mBAA4D;EAChE,OACE,KAAK,cAEF,IAAI,GAAG,KAAK,KAAK,IAAI,MAAM,EAE1B,iBAAiB,MACnB,CAAC,EACA,MAAM,QAAQ;GACb,IAAI,IAAI,WAAW,KACjB,OAAO;GAET,MAAM,UAAU,IAAI;GAEpB,IAAI,CAAC,QAAQ,SACX,OAAO;GAGT,OAAO,QAAQ,WAAW,kBAAkB,eAAe;EAC7D,CAAC;CAEP;;;;;;;;CASA,MAAM,iBAAwD;EAO5D,QADmB,MALD,KAAK,cAAc,IAAI,GAAG,KAAK,KAAK,IAAI,MAAM,EAE9D,iBAAiB,MACnB,CAAC,GAEsB,UAAU,mBACZ;CACvB;;;;;;CAOA,MAAM,4BAA8C;EAIlD,OAAO,KAAK,cACT,IAAI,GAAG,KAAK,KAAK,IAAI,YAAY,EAEhC,sBAAsB,KACxB,CAAC,EACA,MAAM,QAAQ;GACb,IAAI,IAAI,WAAW,KACjB,OAAO;GAGT,OAAO,IAAI,QAAQ,oBAAoB;EACzC,CAAC;CACL;;;;CAKA,MAAM,UAA0C;EAC9C,OAAO,KAAK,cACT,IAAI,GAAG,KAAK,KAAK,IAAI,MAAM,EAC3B,MAAM,QAAQ,IAAI,IAA6B;CACpD;AACF"}