@nadohq/engine-client 0.12.0 → 0.14.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 (38) hide show
  1. package/dist/EngineClient.d.cts +1 -1
  2. package/dist/EngineClient.d.ts +1 -1
  3. package/dist/EngineExecuteBuilder.cjs +2 -1
  4. package/dist/EngineExecuteBuilder.cjs.map +1 -1
  5. package/dist/EngineExecuteBuilder.js +4 -2
  6. package/dist/EngineExecuteBuilder.js.map +1 -1
  7. package/dist/EngineExecuteClient.cjs +4 -1
  8. package/dist/EngineExecuteClient.cjs.map +1 -1
  9. package/dist/EngineExecuteClient.d.cts +1 -1
  10. package/dist/EngineExecuteClient.d.ts +1 -1
  11. package/dist/EngineExecuteClient.js +4 -1
  12. package/dist/EngineExecuteClient.js.map +1 -1
  13. package/dist/EngineWebClient.cjs +16 -0
  14. package/dist/EngineWebClient.cjs.map +1 -1
  15. package/dist/EngineWebClient.d.cts +9 -1
  16. package/dist/EngineWebClient.d.ts +9 -1
  17. package/dist/EngineWebClient.js +16 -0
  18. package/dist/EngineWebClient.js.map +1 -1
  19. package/dist/index.d.cts +1 -1
  20. package/dist/index.d.ts +1 -1
  21. package/dist/types/clientExecuteTypes.cjs.map +1 -1
  22. package/dist/types/clientExecuteTypes.d.cts +21 -3
  23. package/dist/types/clientExecuteTypes.d.ts +21 -3
  24. package/dist/types/clientQueryTypes.cjs.map +1 -1
  25. package/dist/types/clientQueryTypes.d.cts +8 -1
  26. package/dist/types/clientQueryTypes.d.ts +8 -1
  27. package/dist/types/index.d.cts +1 -1
  28. package/dist/types/index.d.ts +1 -1
  29. package/dist/types/serverExecuteTypes.cjs.map +1 -1
  30. package/dist/types/serverExecuteTypes.d.cts +4 -1
  31. package/dist/types/serverExecuteTypes.d.ts +4 -1
  32. package/package.json +3 -3
  33. package/src/EngineExecuteBuilder.ts +4 -0
  34. package/src/EngineExecuteClient.ts +5 -0
  35. package/src/EngineWebClient.ts +21 -1
  36. package/src/types/clientExecuteTypes.ts +21 -3
  37. package/src/types/clientQueryTypes.ts +8 -0
  38. package/src/types/serverExecuteTypes.ts +4 -1
@@ -4,13 +4,13 @@ import { EngineQueryClient } from './EngineQueryClient.cjs';
4
4
  import { EngineWebClient } from './EngineWebClient.cjs';
5
5
  import './types/clientExecuteTypes.cjs';
6
6
  import '@nadohq/shared';
7
+ import 'bignumber.js';
7
8
  import './types/serverExecuteTypes.cjs';
8
9
  import './types/serverQueryTypes.cjs';
9
10
  import './types/serverQueryModelTypes.cjs';
10
11
  import './EngineBaseClient.cjs';
11
12
  import 'axios';
12
13
  import './types/clientQueryTypes.cjs';
13
- import 'bignumber.js';
14
14
  import './EngineExecuteBuilder.cjs';
15
15
 
16
16
  declare const EngineClient_base: ts_mixer_dist_types_types.Class<any[], EngineQueryClient & EngineExecuteClient & EngineWebClient, typeof EngineQueryClient & typeof EngineExecuteClient & typeof EngineWebClient>;
@@ -4,13 +4,13 @@ import { EngineQueryClient } from './EngineQueryClient.js';
4
4
  import { EngineWebClient } from './EngineWebClient.js';
5
5
  import './types/clientExecuteTypes.js';
6
6
  import '@nadohq/shared';
7
+ import 'bignumber.js';
7
8
  import './types/serverExecuteTypes.js';
8
9
  import './types/serverQueryTypes.js';
9
10
  import './types/serverQueryModelTypes.js';
10
11
  import './EngineBaseClient.js';
11
12
  import 'axios';
12
13
  import './types/clientQueryTypes.js';
13
- import 'bignumber.js';
14
14
  import './EngineExecuteBuilder.js';
15
15
 
16
16
  declare const EngineClient_base: ts_mixer_dist_types_types.Class<any[], EngineQueryClient & EngineExecuteClient & EngineWebClient, typeof EngineQueryClient & typeof EngineExecuteClient & typeof EngineWebClient>;
@@ -152,7 +152,8 @@ var EngineExecuteBuilder = class {
152
152
  const tx = (0, import_shared.getNadoEIP712Values)("cancel_orders", clientParams);
153
153
  return {
154
154
  tx,
155
- signature: clientParams.signature
155
+ signature: clientParams.signature,
156
+ required_unfilled_amount: clientParams.requiredUnfilledAmount ? (0, import_shared.toIntegerString)(clientParams.requiredUnfilledAmount) : void 0
156
157
  };
157
158
  }
158
159
  /**
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/EngineExecuteBuilder.ts"],"sourcesContent":["import {\n EIP712OrderParams,\n getNadoEIP712Values,\n getOrderNonce,\n SignableRequestType,\n SignableRequestTypeToParams,\n} from '@nadohq/shared';\nimport { EngineBaseClient } from './EngineBaseClient';\nimport {\n EngineExecuteRequestParamsByType,\n EngineServerExecutePlaceOrderPayload,\n EngineServerExecuteRequestByType,\n SignatureParams,\n WithBaseEngineExecuteParams,\n WithSignature,\n} from './types';\n\n/**\n * Builds execute payloads as expected by the server.\n * @param nonce A nonce is computed when one is not provided.\n * @param signature A signature is computed when one is not provided.\n */\nexport class EngineExecuteBuilder {\n readonly engineClient: EngineBaseClient;\n\n constructor(engineClient: EngineBaseClient) {\n this.engineClient = engineClient;\n }\n\n /**\n * Builds server payload for the `liquidate_subaccount` execute action.\n * @param clientParams Client LiquidateSubaccount params.\n * @returns `liquidate_subaccount` payload\n */\n async buildLiquidateSubaccountPayload(\n clientParams: EngineExecuteRequestParamsByType['liquidate_subaccount'],\n ): Promise<EngineServerExecuteRequestByType['liquidate_subaccount']> {\n const nonce = await this.getTxNonceIfNeeded(clientParams);\n const paramsWithNonce = { ...clientParams, nonce };\n\n const tx = getNadoEIP712Values('liquidate_subaccount', paramsWithNonce);\n const signature = await this.getSignatureIfNeeded(\n 'liquidate_subaccount',\n paramsWithNonce,\n );\n\n return {\n signature,\n tx,\n };\n }\n\n /**\n * Builds server payload for the `withdraw_collateral` execute action.\n * @param clientParams Client WithdrawCollateral params.\n * @returns `liquidate_subaccount` payload\n */\n async buildWithdrawCollateralPayload(\n clientParams: EngineExecuteRequestParamsByType['withdraw_collateral'],\n ): Promise<EngineServerExecuteRequestByType['withdraw_collateral']> {\n const nonce = await this.getTxNonceIfNeeded(clientParams);\n const paramsWithNonce = { ...clientParams, nonce };\n\n const signature = await this.getSignatureIfNeeded(\n 'withdraw_collateral',\n paramsWithNonce,\n );\n\n const tx = getNadoEIP712Values('withdraw_collateral', paramsWithNonce);\n return {\n signature,\n tx,\n spot_leverage: clientParams.spotLeverage ?? null,\n };\n }\n\n /**\n * Builds server payload for the `place_order` execute action.\n *\n * @param clientParams Client PlaceOrder params.\n * @returns `place_order` payload\n */\n async buildPlaceOrderPayload(\n clientParams: EngineExecuteRequestParamsByType['place_order'],\n ): Promise<EngineServerExecutePlaceOrderPayload> {\n const nonce = this.getOrderNonceIfNeeded(clientParams);\n const orderWithNonce = { ...clientParams.order, nonce };\n\n const signature = await this.getSignatureIfNeeded('place_order', {\n // Gets expected type (signature params from `clientParams` and order params from `orderWithNonce`)\n ...clientParams,\n ...orderWithNonce,\n });\n\n return this.buildPlaceOrderPayloadSync({\n ...clientParams,\n order: orderWithNonce,\n signature,\n });\n }\n\n /**\n * Synchronously builds server payload for the `place_order` execute action.\n *\n * @param clientParams Client PlaceOrder params.\n * @returns `place_order` payload\n */\n buildPlaceOrderPayloadSync(\n clientParams: WithSignature<\n EngineExecuteRequestParamsByType['place_order'] & {\n order: EIP712OrderParams;\n }\n >,\n ): EngineServerExecutePlaceOrderPayload {\n const orderEIP712Values = getNadoEIP712Values(\n 'place_order',\n clientParams.order,\n );\n\n return {\n payload: {\n id: clientParams.id ?? null,\n product_id: clientParams.productId,\n order: orderEIP712Values,\n signature: clientParams.signature,\n spot_leverage: clientParams.spotLeverage ?? null,\n borrow_margin: clientParams.borrowMargin ?? null,\n },\n orderParams: clientParams.order,\n };\n }\n\n /**\n * Builds server payload for the `place_orders` execute action.\n * @param clientParams Client PlaceOrders params.\n * @returns `place_orders` payload\n */\n async buildPlaceOrdersPayload(\n clientParams: EngineExecuteRequestParamsByType['place_orders'],\n ): Promise<EngineServerExecuteRequestByType['place_orders']> {\n return {\n orders: await Promise.all(\n clientParams.orders.map(async (orderParams) => {\n const payload = await this.buildPlaceOrderPayload(orderParams);\n return payload.payload;\n }),\n ),\n stop_on_failure: clientParams.stopOnFailure ?? null,\n };\n }\n\n /**\n * Builds server payload for the `cancel_orders` execute action. As such, requires a signature to be given\n *\n * @param clientParams Client CancelOrders params.\n * @returns `cancel_orders` payload\n */\n async buildCancelOrdersPayload(\n clientParams: EngineExecuteRequestParamsByType['cancel_orders'],\n ): Promise<EngineServerExecuteRequestByType['cancel_orders']> {\n const nonce = this.getOrderNonceIfNeeded(clientParams);\n const paramsWithNonce = { ...clientParams, nonce };\n const signature = await this.getSignatureIfNeeded(\n 'cancel_orders',\n paramsWithNonce,\n );\n\n return this.buildCancelOrdersPayloadSync({\n ...paramsWithNonce,\n signature,\n });\n }\n\n /**\n * Synchronously builds server payload for the `cancel_orders` execute action.\n *\n * @param clientParams Client CancelOrders params.\n * @returns `cancel_orders` payload\n */\n buildCancelOrdersPayloadSync(\n clientParams: WithSignature<\n EngineExecuteRequestParamsByType['cancel_orders'] & { nonce: string }\n >,\n ): EngineServerExecuteRequestByType['cancel_orders'] {\n const tx = getNadoEIP712Values('cancel_orders', clientParams);\n\n return {\n tx,\n signature: clientParams.signature,\n };\n }\n\n /**\n * Builds server payload for the `cancel_product_orders` execute action.\n * @param clientParams Client CancelProductOrders params.\n * @returns `cancel_product_orders` payload\n */\n async buildCancelProductOrdersPayload(\n clientParams: EngineExecuteRequestParamsByType['cancel_product_orders'],\n ): Promise<EngineServerExecuteRequestByType['cancel_product_orders']> {\n const nonce = this.getOrderNonceIfNeeded(clientParams);\n const paramsWithNonce = { ...clientParams, nonce };\n\n const tx = getNadoEIP712Values('cancel_product_orders', paramsWithNonce);\n const signature = await this.getSignatureIfNeeded(\n 'cancel_product_orders',\n paramsWithNonce,\n );\n\n return {\n tx,\n signature,\n };\n }\n\n /**\n * Builds server payload for the `link_signer` execute action.\n *\n * @param clientParams Client LinkSigner params.\n * @returns `link_signer` payload\n */\n async buildLinkSignerPayload(\n clientParams: EngineExecuteRequestParamsByType['link_signer'],\n ): Promise<EngineServerExecuteRequestByType['link_signer']> {\n const nonce = await this.getTxNonceIfNeeded(clientParams);\n const paramsWithNonce = { ...clientParams, nonce };\n\n const tx = getNadoEIP712Values('link_signer', paramsWithNonce);\n const signature = await this.getSignatureIfNeeded(\n 'link_signer',\n paramsWithNonce,\n );\n\n return {\n tx,\n signature,\n };\n }\n\n /**\n * Builds server payload for the `transfer_quote` execute action.\n *\n * @param clientParams Client TransferQuote params.\n * @returns `transfer_quote` payload\n */\n async buildTransferQuotePayload(\n clientParams: EngineExecuteRequestParamsByType['transfer_quote'],\n ): Promise<EngineServerExecuteRequestByType['transfer_quote']> {\n const nonce = await this.getTxNonceIfNeeded(clientParams);\n const paramsWithNonce = { ...clientParams, nonce };\n\n const tx = getNadoEIP712Values('transfer_quote', paramsWithNonce);\n const signature = await this.getSignatureIfNeeded(\n 'transfer_quote',\n paramsWithNonce,\n );\n\n return {\n tx,\n signature,\n };\n }\n\n /**\n * Builds server payload for the `mint_nlp` execute action.\n * @param clientParams Client MintNlp params.\n * @returns `mint_nlp` payload\n */\n async buildMintNlpPayload(\n clientParams: EngineExecuteRequestParamsByType['mint_nlp'],\n ): Promise<EngineServerExecuteRequestByType['mint_nlp']> {\n const nonce = await this.getTxNonceIfNeeded(clientParams);\n const paramsWithNonce = { ...clientParams, nonce };\n\n const tx = getNadoEIP712Values('mint_nlp', paramsWithNonce);\n const signature = await this.getSignatureIfNeeded(\n 'mint_nlp',\n paramsWithNonce,\n );\n\n return {\n signature,\n tx,\n spot_leverage: clientParams.spotLeverage ?? null,\n };\n }\n\n /**\n * Builds server payload for the `burn_nlp` execute action.\n * @param clientParams Client BurnNlp params.\n * @returns `burn_nlp` payload\n */\n async buildBurnNlpPayload(\n clientParams: EngineExecuteRequestParamsByType['burn_nlp'],\n ): Promise<EngineServerExecuteRequestByType['burn_nlp']> {\n const nonce = await this.getTxNonceIfNeeded(clientParams);\n const paramsWithNonce = { ...clientParams, nonce };\n\n const tx = getNadoEIP712Values('burn_nlp', paramsWithNonce);\n const signature = await this.getSignatureIfNeeded(\n 'burn_nlp',\n paramsWithNonce,\n );\n\n return {\n signature,\n tx,\n };\n }\n\n protected async getSignatureIfNeeded<T extends SignableRequestType>(\n requestType: T,\n paramsWithNonce: SignatureParams & SignableRequestTypeToParams[T],\n ) {\n if ('signature' in paramsWithNonce) {\n return paramsWithNonce.signature;\n }\n\n return await this.engineClient.sign(\n requestType,\n paramsWithNonce.verifyingAddr,\n paramsWithNonce.chainId,\n paramsWithNonce,\n );\n }\n\n protected async getTxNonceIfNeeded(\n params: WithBaseEngineExecuteParams<{ subaccountOwner: string }>,\n ) {\n if (params.nonce) {\n return params.nonce;\n }\n return await this.engineClient.getTxNonce(params.subaccountOwner);\n }\n\n protected getOrderNonceIfNeeded(\n params: WithBaseEngineExecuteParams<unknown>,\n ) {\n if (params.nonce) {\n return params.nonce;\n }\n return getOrderNonce();\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/EngineExecuteBuilder.ts"],"sourcesContent":["import {\n EIP712OrderParams,\n getNadoEIP712Values,\n getOrderNonce,\n SignableRequestType,\n SignableRequestTypeToParams,\n toIntegerString,\n} from '@nadohq/shared';\nimport { EngineBaseClient } from './EngineBaseClient';\nimport {\n EngineExecuteRequestParamsByType,\n EngineServerExecutePlaceOrderPayload,\n EngineServerExecuteRequestByType,\n SignatureParams,\n WithBaseEngineExecuteParams,\n WithSignature,\n} from './types';\n\n/**\n * Builds execute payloads as expected by the server.\n * @param nonce A nonce is computed when one is not provided.\n * @param signature A signature is computed when one is not provided.\n */\nexport class EngineExecuteBuilder {\n readonly engineClient: EngineBaseClient;\n\n constructor(engineClient: EngineBaseClient) {\n this.engineClient = engineClient;\n }\n\n /**\n * Builds server payload for the `liquidate_subaccount` execute action.\n * @param clientParams Client LiquidateSubaccount params.\n * @returns `liquidate_subaccount` payload\n */\n async buildLiquidateSubaccountPayload(\n clientParams: EngineExecuteRequestParamsByType['liquidate_subaccount'],\n ): Promise<EngineServerExecuteRequestByType['liquidate_subaccount']> {\n const nonce = await this.getTxNonceIfNeeded(clientParams);\n const paramsWithNonce = { ...clientParams, nonce };\n\n const tx = getNadoEIP712Values('liquidate_subaccount', paramsWithNonce);\n const signature = await this.getSignatureIfNeeded(\n 'liquidate_subaccount',\n paramsWithNonce,\n );\n\n return {\n signature,\n tx,\n };\n }\n\n /**\n * Builds server payload for the `withdraw_collateral` execute action.\n * @param clientParams Client WithdrawCollateral params.\n * @returns `liquidate_subaccount` payload\n */\n async buildWithdrawCollateralPayload(\n clientParams: EngineExecuteRequestParamsByType['withdraw_collateral'],\n ): Promise<EngineServerExecuteRequestByType['withdraw_collateral']> {\n const nonce = await this.getTxNonceIfNeeded(clientParams);\n const paramsWithNonce = { ...clientParams, nonce };\n\n const signature = await this.getSignatureIfNeeded(\n 'withdraw_collateral',\n paramsWithNonce,\n );\n\n const tx = getNadoEIP712Values('withdraw_collateral', paramsWithNonce);\n return {\n signature,\n tx,\n spot_leverage: clientParams.spotLeverage ?? null,\n };\n }\n\n /**\n * Builds server payload for the `place_order` execute action.\n *\n * @param clientParams Client PlaceOrder params.\n * @returns `place_order` payload\n */\n async buildPlaceOrderPayload(\n clientParams: EngineExecuteRequestParamsByType['place_order'],\n ): Promise<EngineServerExecutePlaceOrderPayload> {\n const nonce = this.getOrderNonceIfNeeded(clientParams);\n const orderWithNonce = { ...clientParams.order, nonce };\n\n const signature = await this.getSignatureIfNeeded('place_order', {\n // Gets expected type (signature params from `clientParams` and order params from `orderWithNonce`)\n ...clientParams,\n ...orderWithNonce,\n });\n\n return this.buildPlaceOrderPayloadSync({\n ...clientParams,\n order: orderWithNonce,\n signature,\n });\n }\n\n /**\n * Synchronously builds server payload for the `place_order` execute action.\n *\n * @param clientParams Client PlaceOrder params.\n * @returns `place_order` payload\n */\n buildPlaceOrderPayloadSync(\n clientParams: WithSignature<\n EngineExecuteRequestParamsByType['place_order'] & {\n order: EIP712OrderParams;\n }\n >,\n ): EngineServerExecutePlaceOrderPayload {\n const orderEIP712Values = getNadoEIP712Values(\n 'place_order',\n clientParams.order,\n );\n\n return {\n payload: {\n id: clientParams.id ?? null,\n product_id: clientParams.productId,\n order: orderEIP712Values,\n signature: clientParams.signature,\n spot_leverage: clientParams.spotLeverage ?? null,\n borrow_margin: clientParams.borrowMargin ?? null,\n },\n orderParams: clientParams.order,\n };\n }\n\n /**\n * Builds server payload for the `place_orders` execute action.\n * @param clientParams Client PlaceOrders params.\n * @returns `place_orders` payload\n */\n async buildPlaceOrdersPayload(\n clientParams: EngineExecuteRequestParamsByType['place_orders'],\n ): Promise<EngineServerExecuteRequestByType['place_orders']> {\n return {\n orders: await Promise.all(\n clientParams.orders.map(async (orderParams) => {\n const payload = await this.buildPlaceOrderPayload(orderParams);\n return payload.payload;\n }),\n ),\n stop_on_failure: clientParams.stopOnFailure ?? null,\n };\n }\n\n /**\n * Builds server payload for the `cancel_orders` execute action. As such, requires a signature to be given\n *\n * @param clientParams Client CancelOrders params.\n * @returns `cancel_orders` payload\n */\n async buildCancelOrdersPayload(\n clientParams: EngineExecuteRequestParamsByType['cancel_orders'],\n ): Promise<EngineServerExecuteRequestByType['cancel_orders']> {\n const nonce = this.getOrderNonceIfNeeded(clientParams);\n const paramsWithNonce = { ...clientParams, nonce };\n const signature = await this.getSignatureIfNeeded(\n 'cancel_orders',\n paramsWithNonce,\n );\n\n return this.buildCancelOrdersPayloadSync({\n ...paramsWithNonce,\n signature,\n });\n }\n\n /**\n * Synchronously builds server payload for the `cancel_orders` execute action.\n *\n * @param clientParams Client CancelOrders params.\n * @returns `cancel_orders` payload\n */\n buildCancelOrdersPayloadSync(\n clientParams: WithSignature<\n EngineExecuteRequestParamsByType['cancel_orders'] & { nonce: string }\n >,\n ): EngineServerExecuteRequestByType['cancel_orders'] {\n const tx = getNadoEIP712Values('cancel_orders', clientParams);\n\n return {\n tx,\n signature: clientParams.signature,\n required_unfilled_amount: clientParams.requiredUnfilledAmount\n ? toIntegerString(clientParams.requiredUnfilledAmount)\n : undefined,\n };\n }\n\n /**\n * Builds server payload for the `cancel_product_orders` execute action.\n * @param clientParams Client CancelProductOrders params.\n * @returns `cancel_product_orders` payload\n */\n async buildCancelProductOrdersPayload(\n clientParams: EngineExecuteRequestParamsByType['cancel_product_orders'],\n ): Promise<EngineServerExecuteRequestByType['cancel_product_orders']> {\n const nonce = this.getOrderNonceIfNeeded(clientParams);\n const paramsWithNonce = { ...clientParams, nonce };\n\n const tx = getNadoEIP712Values('cancel_product_orders', paramsWithNonce);\n const signature = await this.getSignatureIfNeeded(\n 'cancel_product_orders',\n paramsWithNonce,\n );\n\n return {\n tx,\n signature,\n };\n }\n\n /**\n * Builds server payload for the `link_signer` execute action.\n *\n * @param clientParams Client LinkSigner params.\n * @returns `link_signer` payload\n */\n async buildLinkSignerPayload(\n clientParams: EngineExecuteRequestParamsByType['link_signer'],\n ): Promise<EngineServerExecuteRequestByType['link_signer']> {\n const nonce = await this.getTxNonceIfNeeded(clientParams);\n const paramsWithNonce = { ...clientParams, nonce };\n\n const tx = getNadoEIP712Values('link_signer', paramsWithNonce);\n const signature = await this.getSignatureIfNeeded(\n 'link_signer',\n paramsWithNonce,\n );\n\n return {\n tx,\n signature,\n };\n }\n\n /**\n * Builds server payload for the `transfer_quote` execute action.\n *\n * @param clientParams Client TransferQuote params.\n * @returns `transfer_quote` payload\n */\n async buildTransferQuotePayload(\n clientParams: EngineExecuteRequestParamsByType['transfer_quote'],\n ): Promise<EngineServerExecuteRequestByType['transfer_quote']> {\n const nonce = await this.getTxNonceIfNeeded(clientParams);\n const paramsWithNonce = { ...clientParams, nonce };\n\n const tx = getNadoEIP712Values('transfer_quote', paramsWithNonce);\n const signature = await this.getSignatureIfNeeded(\n 'transfer_quote',\n paramsWithNonce,\n );\n\n return {\n tx,\n signature,\n };\n }\n\n /**\n * Builds server payload for the `mint_nlp` execute action.\n * @param clientParams Client MintNlp params.\n * @returns `mint_nlp` payload\n */\n async buildMintNlpPayload(\n clientParams: EngineExecuteRequestParamsByType['mint_nlp'],\n ): Promise<EngineServerExecuteRequestByType['mint_nlp']> {\n const nonce = await this.getTxNonceIfNeeded(clientParams);\n const paramsWithNonce = { ...clientParams, nonce };\n\n const tx = getNadoEIP712Values('mint_nlp', paramsWithNonce);\n const signature = await this.getSignatureIfNeeded(\n 'mint_nlp',\n paramsWithNonce,\n );\n\n return {\n signature,\n tx,\n spot_leverage: clientParams.spotLeverage ?? null,\n };\n }\n\n /**\n * Builds server payload for the `burn_nlp` execute action.\n * @param clientParams Client BurnNlp params.\n * @returns `burn_nlp` payload\n */\n async buildBurnNlpPayload(\n clientParams: EngineExecuteRequestParamsByType['burn_nlp'],\n ): Promise<EngineServerExecuteRequestByType['burn_nlp']> {\n const nonce = await this.getTxNonceIfNeeded(clientParams);\n const paramsWithNonce = { ...clientParams, nonce };\n\n const tx = getNadoEIP712Values('burn_nlp', paramsWithNonce);\n const signature = await this.getSignatureIfNeeded(\n 'burn_nlp',\n paramsWithNonce,\n );\n\n return {\n signature,\n tx,\n };\n }\n\n protected async getSignatureIfNeeded<T extends SignableRequestType>(\n requestType: T,\n paramsWithNonce: SignatureParams & SignableRequestTypeToParams[T],\n ) {\n if ('signature' in paramsWithNonce) {\n return paramsWithNonce.signature;\n }\n\n return await this.engineClient.sign(\n requestType,\n paramsWithNonce.verifyingAddr,\n paramsWithNonce.chainId,\n paramsWithNonce,\n );\n }\n\n protected async getTxNonceIfNeeded(\n params: WithBaseEngineExecuteParams<{ subaccountOwner: string }>,\n ) {\n if (params.nonce) {\n return params.nonce;\n }\n return await this.engineClient.getTxNonce(params.subaccountOwner);\n }\n\n protected getOrderNonceIfNeeded(\n params: WithBaseEngineExecuteParams<unknown>,\n ) {\n if (params.nonce) {\n return params.nonce;\n }\n return getOrderNonce();\n }\n}\n"],"mappings":"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","names":[]}
@@ -1,7 +1,8 @@
1
1
  // src/EngineExecuteBuilder.ts
2
2
  import {
3
3
  getNadoEIP712Values,
4
- getOrderNonce
4
+ getOrderNonce,
5
+ toIntegerString
5
6
  } from "@nadohq/shared";
6
7
  var EngineExecuteBuilder = class {
7
8
  constructor(engineClient) {
@@ -131,7 +132,8 @@ var EngineExecuteBuilder = class {
131
132
  const tx = getNadoEIP712Values("cancel_orders", clientParams);
132
133
  return {
133
134
  tx,
134
- signature: clientParams.signature
135
+ signature: clientParams.signature,
136
+ required_unfilled_amount: clientParams.requiredUnfilledAmount ? toIntegerString(clientParams.requiredUnfilledAmount) : void 0
135
137
  };
136
138
  }
137
139
  /**
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/EngineExecuteBuilder.ts"],"sourcesContent":["import {\n EIP712OrderParams,\n getNadoEIP712Values,\n getOrderNonce,\n SignableRequestType,\n SignableRequestTypeToParams,\n} from '@nadohq/shared';\nimport { EngineBaseClient } from './EngineBaseClient';\nimport {\n EngineExecuteRequestParamsByType,\n EngineServerExecutePlaceOrderPayload,\n EngineServerExecuteRequestByType,\n SignatureParams,\n WithBaseEngineExecuteParams,\n WithSignature,\n} from './types';\n\n/**\n * Builds execute payloads as expected by the server.\n * @param nonce A nonce is computed when one is not provided.\n * @param signature A signature is computed when one is not provided.\n */\nexport class EngineExecuteBuilder {\n readonly engineClient: EngineBaseClient;\n\n constructor(engineClient: EngineBaseClient) {\n this.engineClient = engineClient;\n }\n\n /**\n * Builds server payload for the `liquidate_subaccount` execute action.\n * @param clientParams Client LiquidateSubaccount params.\n * @returns `liquidate_subaccount` payload\n */\n async buildLiquidateSubaccountPayload(\n clientParams: EngineExecuteRequestParamsByType['liquidate_subaccount'],\n ): Promise<EngineServerExecuteRequestByType['liquidate_subaccount']> {\n const nonce = await this.getTxNonceIfNeeded(clientParams);\n const paramsWithNonce = { ...clientParams, nonce };\n\n const tx = getNadoEIP712Values('liquidate_subaccount', paramsWithNonce);\n const signature = await this.getSignatureIfNeeded(\n 'liquidate_subaccount',\n paramsWithNonce,\n );\n\n return {\n signature,\n tx,\n };\n }\n\n /**\n * Builds server payload for the `withdraw_collateral` execute action.\n * @param clientParams Client WithdrawCollateral params.\n * @returns `liquidate_subaccount` payload\n */\n async buildWithdrawCollateralPayload(\n clientParams: EngineExecuteRequestParamsByType['withdraw_collateral'],\n ): Promise<EngineServerExecuteRequestByType['withdraw_collateral']> {\n const nonce = await this.getTxNonceIfNeeded(clientParams);\n const paramsWithNonce = { ...clientParams, nonce };\n\n const signature = await this.getSignatureIfNeeded(\n 'withdraw_collateral',\n paramsWithNonce,\n );\n\n const tx = getNadoEIP712Values('withdraw_collateral', paramsWithNonce);\n return {\n signature,\n tx,\n spot_leverage: clientParams.spotLeverage ?? null,\n };\n }\n\n /**\n * Builds server payload for the `place_order` execute action.\n *\n * @param clientParams Client PlaceOrder params.\n * @returns `place_order` payload\n */\n async buildPlaceOrderPayload(\n clientParams: EngineExecuteRequestParamsByType['place_order'],\n ): Promise<EngineServerExecutePlaceOrderPayload> {\n const nonce = this.getOrderNonceIfNeeded(clientParams);\n const orderWithNonce = { ...clientParams.order, nonce };\n\n const signature = await this.getSignatureIfNeeded('place_order', {\n // Gets expected type (signature params from `clientParams` and order params from `orderWithNonce`)\n ...clientParams,\n ...orderWithNonce,\n });\n\n return this.buildPlaceOrderPayloadSync({\n ...clientParams,\n order: orderWithNonce,\n signature,\n });\n }\n\n /**\n * Synchronously builds server payload for the `place_order` execute action.\n *\n * @param clientParams Client PlaceOrder params.\n * @returns `place_order` payload\n */\n buildPlaceOrderPayloadSync(\n clientParams: WithSignature<\n EngineExecuteRequestParamsByType['place_order'] & {\n order: EIP712OrderParams;\n }\n >,\n ): EngineServerExecutePlaceOrderPayload {\n const orderEIP712Values = getNadoEIP712Values(\n 'place_order',\n clientParams.order,\n );\n\n return {\n payload: {\n id: clientParams.id ?? null,\n product_id: clientParams.productId,\n order: orderEIP712Values,\n signature: clientParams.signature,\n spot_leverage: clientParams.spotLeverage ?? null,\n borrow_margin: clientParams.borrowMargin ?? null,\n },\n orderParams: clientParams.order,\n };\n }\n\n /**\n * Builds server payload for the `place_orders` execute action.\n * @param clientParams Client PlaceOrders params.\n * @returns `place_orders` payload\n */\n async buildPlaceOrdersPayload(\n clientParams: EngineExecuteRequestParamsByType['place_orders'],\n ): Promise<EngineServerExecuteRequestByType['place_orders']> {\n return {\n orders: await Promise.all(\n clientParams.orders.map(async (orderParams) => {\n const payload = await this.buildPlaceOrderPayload(orderParams);\n return payload.payload;\n }),\n ),\n stop_on_failure: clientParams.stopOnFailure ?? null,\n };\n }\n\n /**\n * Builds server payload for the `cancel_orders` execute action. As such, requires a signature to be given\n *\n * @param clientParams Client CancelOrders params.\n * @returns `cancel_orders` payload\n */\n async buildCancelOrdersPayload(\n clientParams: EngineExecuteRequestParamsByType['cancel_orders'],\n ): Promise<EngineServerExecuteRequestByType['cancel_orders']> {\n const nonce = this.getOrderNonceIfNeeded(clientParams);\n const paramsWithNonce = { ...clientParams, nonce };\n const signature = await this.getSignatureIfNeeded(\n 'cancel_orders',\n paramsWithNonce,\n );\n\n return this.buildCancelOrdersPayloadSync({\n ...paramsWithNonce,\n signature,\n });\n }\n\n /**\n * Synchronously builds server payload for the `cancel_orders` execute action.\n *\n * @param clientParams Client CancelOrders params.\n * @returns `cancel_orders` payload\n */\n buildCancelOrdersPayloadSync(\n clientParams: WithSignature<\n EngineExecuteRequestParamsByType['cancel_orders'] & { nonce: string }\n >,\n ): EngineServerExecuteRequestByType['cancel_orders'] {\n const tx = getNadoEIP712Values('cancel_orders', clientParams);\n\n return {\n tx,\n signature: clientParams.signature,\n };\n }\n\n /**\n * Builds server payload for the `cancel_product_orders` execute action.\n * @param clientParams Client CancelProductOrders params.\n * @returns `cancel_product_orders` payload\n */\n async buildCancelProductOrdersPayload(\n clientParams: EngineExecuteRequestParamsByType['cancel_product_orders'],\n ): Promise<EngineServerExecuteRequestByType['cancel_product_orders']> {\n const nonce = this.getOrderNonceIfNeeded(clientParams);\n const paramsWithNonce = { ...clientParams, nonce };\n\n const tx = getNadoEIP712Values('cancel_product_orders', paramsWithNonce);\n const signature = await this.getSignatureIfNeeded(\n 'cancel_product_orders',\n paramsWithNonce,\n );\n\n return {\n tx,\n signature,\n };\n }\n\n /**\n * Builds server payload for the `link_signer` execute action.\n *\n * @param clientParams Client LinkSigner params.\n * @returns `link_signer` payload\n */\n async buildLinkSignerPayload(\n clientParams: EngineExecuteRequestParamsByType['link_signer'],\n ): Promise<EngineServerExecuteRequestByType['link_signer']> {\n const nonce = await this.getTxNonceIfNeeded(clientParams);\n const paramsWithNonce = { ...clientParams, nonce };\n\n const tx = getNadoEIP712Values('link_signer', paramsWithNonce);\n const signature = await this.getSignatureIfNeeded(\n 'link_signer',\n paramsWithNonce,\n );\n\n return {\n tx,\n signature,\n };\n }\n\n /**\n * Builds server payload for the `transfer_quote` execute action.\n *\n * @param clientParams Client TransferQuote params.\n * @returns `transfer_quote` payload\n */\n async buildTransferQuotePayload(\n clientParams: EngineExecuteRequestParamsByType['transfer_quote'],\n ): Promise<EngineServerExecuteRequestByType['transfer_quote']> {\n const nonce = await this.getTxNonceIfNeeded(clientParams);\n const paramsWithNonce = { ...clientParams, nonce };\n\n const tx = getNadoEIP712Values('transfer_quote', paramsWithNonce);\n const signature = await this.getSignatureIfNeeded(\n 'transfer_quote',\n paramsWithNonce,\n );\n\n return {\n tx,\n signature,\n };\n }\n\n /**\n * Builds server payload for the `mint_nlp` execute action.\n * @param clientParams Client MintNlp params.\n * @returns `mint_nlp` payload\n */\n async buildMintNlpPayload(\n clientParams: EngineExecuteRequestParamsByType['mint_nlp'],\n ): Promise<EngineServerExecuteRequestByType['mint_nlp']> {\n const nonce = await this.getTxNonceIfNeeded(clientParams);\n const paramsWithNonce = { ...clientParams, nonce };\n\n const tx = getNadoEIP712Values('mint_nlp', paramsWithNonce);\n const signature = await this.getSignatureIfNeeded(\n 'mint_nlp',\n paramsWithNonce,\n );\n\n return {\n signature,\n tx,\n spot_leverage: clientParams.spotLeverage ?? null,\n };\n }\n\n /**\n * Builds server payload for the `burn_nlp` execute action.\n * @param clientParams Client BurnNlp params.\n * @returns `burn_nlp` payload\n */\n async buildBurnNlpPayload(\n clientParams: EngineExecuteRequestParamsByType['burn_nlp'],\n ): Promise<EngineServerExecuteRequestByType['burn_nlp']> {\n const nonce = await this.getTxNonceIfNeeded(clientParams);\n const paramsWithNonce = { ...clientParams, nonce };\n\n const tx = getNadoEIP712Values('burn_nlp', paramsWithNonce);\n const signature = await this.getSignatureIfNeeded(\n 'burn_nlp',\n paramsWithNonce,\n );\n\n return {\n signature,\n tx,\n };\n }\n\n protected async getSignatureIfNeeded<T extends SignableRequestType>(\n requestType: T,\n paramsWithNonce: SignatureParams & SignableRequestTypeToParams[T],\n ) {\n if ('signature' in paramsWithNonce) {\n return paramsWithNonce.signature;\n }\n\n return await this.engineClient.sign(\n requestType,\n paramsWithNonce.verifyingAddr,\n paramsWithNonce.chainId,\n paramsWithNonce,\n );\n }\n\n protected async getTxNonceIfNeeded(\n params: WithBaseEngineExecuteParams<{ subaccountOwner: string }>,\n ) {\n if (params.nonce) {\n return params.nonce;\n }\n return await this.engineClient.getTxNonce(params.subaccountOwner);\n }\n\n protected getOrderNonceIfNeeded(\n params: WithBaseEngineExecuteParams<unknown>,\n ) {\n if (params.nonce) {\n return params.nonce;\n }\n return getOrderNonce();\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/EngineExecuteBuilder.ts"],"sourcesContent":["import {\n EIP712OrderParams,\n getNadoEIP712Values,\n getOrderNonce,\n SignableRequestType,\n SignableRequestTypeToParams,\n toIntegerString,\n} from '@nadohq/shared';\nimport { EngineBaseClient } from './EngineBaseClient';\nimport {\n EngineExecuteRequestParamsByType,\n EngineServerExecutePlaceOrderPayload,\n EngineServerExecuteRequestByType,\n SignatureParams,\n WithBaseEngineExecuteParams,\n WithSignature,\n} from './types';\n\n/**\n * Builds execute payloads as expected by the server.\n * @param nonce A nonce is computed when one is not provided.\n * @param signature A signature is computed when one is not provided.\n */\nexport class EngineExecuteBuilder {\n readonly engineClient: EngineBaseClient;\n\n constructor(engineClient: EngineBaseClient) {\n this.engineClient = engineClient;\n }\n\n /**\n * Builds server payload for the `liquidate_subaccount` execute action.\n * @param clientParams Client LiquidateSubaccount params.\n * @returns `liquidate_subaccount` payload\n */\n async buildLiquidateSubaccountPayload(\n clientParams: EngineExecuteRequestParamsByType['liquidate_subaccount'],\n ): Promise<EngineServerExecuteRequestByType['liquidate_subaccount']> {\n const nonce = await this.getTxNonceIfNeeded(clientParams);\n const paramsWithNonce = { ...clientParams, nonce };\n\n const tx = getNadoEIP712Values('liquidate_subaccount', paramsWithNonce);\n const signature = await this.getSignatureIfNeeded(\n 'liquidate_subaccount',\n paramsWithNonce,\n );\n\n return {\n signature,\n tx,\n };\n }\n\n /**\n * Builds server payload for the `withdraw_collateral` execute action.\n * @param clientParams Client WithdrawCollateral params.\n * @returns `liquidate_subaccount` payload\n */\n async buildWithdrawCollateralPayload(\n clientParams: EngineExecuteRequestParamsByType['withdraw_collateral'],\n ): Promise<EngineServerExecuteRequestByType['withdraw_collateral']> {\n const nonce = await this.getTxNonceIfNeeded(clientParams);\n const paramsWithNonce = { ...clientParams, nonce };\n\n const signature = await this.getSignatureIfNeeded(\n 'withdraw_collateral',\n paramsWithNonce,\n );\n\n const tx = getNadoEIP712Values('withdraw_collateral', paramsWithNonce);\n return {\n signature,\n tx,\n spot_leverage: clientParams.spotLeverage ?? null,\n };\n }\n\n /**\n * Builds server payload for the `place_order` execute action.\n *\n * @param clientParams Client PlaceOrder params.\n * @returns `place_order` payload\n */\n async buildPlaceOrderPayload(\n clientParams: EngineExecuteRequestParamsByType['place_order'],\n ): Promise<EngineServerExecutePlaceOrderPayload> {\n const nonce = this.getOrderNonceIfNeeded(clientParams);\n const orderWithNonce = { ...clientParams.order, nonce };\n\n const signature = await this.getSignatureIfNeeded('place_order', {\n // Gets expected type (signature params from `clientParams` and order params from `orderWithNonce`)\n ...clientParams,\n ...orderWithNonce,\n });\n\n return this.buildPlaceOrderPayloadSync({\n ...clientParams,\n order: orderWithNonce,\n signature,\n });\n }\n\n /**\n * Synchronously builds server payload for the `place_order` execute action.\n *\n * @param clientParams Client PlaceOrder params.\n * @returns `place_order` payload\n */\n buildPlaceOrderPayloadSync(\n clientParams: WithSignature<\n EngineExecuteRequestParamsByType['place_order'] & {\n order: EIP712OrderParams;\n }\n >,\n ): EngineServerExecutePlaceOrderPayload {\n const orderEIP712Values = getNadoEIP712Values(\n 'place_order',\n clientParams.order,\n );\n\n return {\n payload: {\n id: clientParams.id ?? null,\n product_id: clientParams.productId,\n order: orderEIP712Values,\n signature: clientParams.signature,\n spot_leverage: clientParams.spotLeverage ?? null,\n borrow_margin: clientParams.borrowMargin ?? null,\n },\n orderParams: clientParams.order,\n };\n }\n\n /**\n * Builds server payload for the `place_orders` execute action.\n * @param clientParams Client PlaceOrders params.\n * @returns `place_orders` payload\n */\n async buildPlaceOrdersPayload(\n clientParams: EngineExecuteRequestParamsByType['place_orders'],\n ): Promise<EngineServerExecuteRequestByType['place_orders']> {\n return {\n orders: await Promise.all(\n clientParams.orders.map(async (orderParams) => {\n const payload = await this.buildPlaceOrderPayload(orderParams);\n return payload.payload;\n }),\n ),\n stop_on_failure: clientParams.stopOnFailure ?? null,\n };\n }\n\n /**\n * Builds server payload for the `cancel_orders` execute action. As such, requires a signature to be given\n *\n * @param clientParams Client CancelOrders params.\n * @returns `cancel_orders` payload\n */\n async buildCancelOrdersPayload(\n clientParams: EngineExecuteRequestParamsByType['cancel_orders'],\n ): Promise<EngineServerExecuteRequestByType['cancel_orders']> {\n const nonce = this.getOrderNonceIfNeeded(clientParams);\n const paramsWithNonce = { ...clientParams, nonce };\n const signature = await this.getSignatureIfNeeded(\n 'cancel_orders',\n paramsWithNonce,\n );\n\n return this.buildCancelOrdersPayloadSync({\n ...paramsWithNonce,\n signature,\n });\n }\n\n /**\n * Synchronously builds server payload for the `cancel_orders` execute action.\n *\n * @param clientParams Client CancelOrders params.\n * @returns `cancel_orders` payload\n */\n buildCancelOrdersPayloadSync(\n clientParams: WithSignature<\n EngineExecuteRequestParamsByType['cancel_orders'] & { nonce: string }\n >,\n ): EngineServerExecuteRequestByType['cancel_orders'] {\n const tx = getNadoEIP712Values('cancel_orders', clientParams);\n\n return {\n tx,\n signature: clientParams.signature,\n required_unfilled_amount: clientParams.requiredUnfilledAmount\n ? toIntegerString(clientParams.requiredUnfilledAmount)\n : undefined,\n };\n }\n\n /**\n * Builds server payload for the `cancel_product_orders` execute action.\n * @param clientParams Client CancelProductOrders params.\n * @returns `cancel_product_orders` payload\n */\n async buildCancelProductOrdersPayload(\n clientParams: EngineExecuteRequestParamsByType['cancel_product_orders'],\n ): Promise<EngineServerExecuteRequestByType['cancel_product_orders']> {\n const nonce = this.getOrderNonceIfNeeded(clientParams);\n const paramsWithNonce = { ...clientParams, nonce };\n\n const tx = getNadoEIP712Values('cancel_product_orders', paramsWithNonce);\n const signature = await this.getSignatureIfNeeded(\n 'cancel_product_orders',\n paramsWithNonce,\n );\n\n return {\n tx,\n signature,\n };\n }\n\n /**\n * Builds server payload for the `link_signer` execute action.\n *\n * @param clientParams Client LinkSigner params.\n * @returns `link_signer` payload\n */\n async buildLinkSignerPayload(\n clientParams: EngineExecuteRequestParamsByType['link_signer'],\n ): Promise<EngineServerExecuteRequestByType['link_signer']> {\n const nonce = await this.getTxNonceIfNeeded(clientParams);\n const paramsWithNonce = { ...clientParams, nonce };\n\n const tx = getNadoEIP712Values('link_signer', paramsWithNonce);\n const signature = await this.getSignatureIfNeeded(\n 'link_signer',\n paramsWithNonce,\n );\n\n return {\n tx,\n signature,\n };\n }\n\n /**\n * Builds server payload for the `transfer_quote` execute action.\n *\n * @param clientParams Client TransferQuote params.\n * @returns `transfer_quote` payload\n */\n async buildTransferQuotePayload(\n clientParams: EngineExecuteRequestParamsByType['transfer_quote'],\n ): Promise<EngineServerExecuteRequestByType['transfer_quote']> {\n const nonce = await this.getTxNonceIfNeeded(clientParams);\n const paramsWithNonce = { ...clientParams, nonce };\n\n const tx = getNadoEIP712Values('transfer_quote', paramsWithNonce);\n const signature = await this.getSignatureIfNeeded(\n 'transfer_quote',\n paramsWithNonce,\n );\n\n return {\n tx,\n signature,\n };\n }\n\n /**\n * Builds server payload for the `mint_nlp` execute action.\n * @param clientParams Client MintNlp params.\n * @returns `mint_nlp` payload\n */\n async buildMintNlpPayload(\n clientParams: EngineExecuteRequestParamsByType['mint_nlp'],\n ): Promise<EngineServerExecuteRequestByType['mint_nlp']> {\n const nonce = await this.getTxNonceIfNeeded(clientParams);\n const paramsWithNonce = { ...clientParams, nonce };\n\n const tx = getNadoEIP712Values('mint_nlp', paramsWithNonce);\n const signature = await this.getSignatureIfNeeded(\n 'mint_nlp',\n paramsWithNonce,\n );\n\n return {\n signature,\n tx,\n spot_leverage: clientParams.spotLeverage ?? null,\n };\n }\n\n /**\n * Builds server payload for the `burn_nlp` execute action.\n * @param clientParams Client BurnNlp params.\n * @returns `burn_nlp` payload\n */\n async buildBurnNlpPayload(\n clientParams: EngineExecuteRequestParamsByType['burn_nlp'],\n ): Promise<EngineServerExecuteRequestByType['burn_nlp']> {\n const nonce = await this.getTxNonceIfNeeded(clientParams);\n const paramsWithNonce = { ...clientParams, nonce };\n\n const tx = getNadoEIP712Values('burn_nlp', paramsWithNonce);\n const signature = await this.getSignatureIfNeeded(\n 'burn_nlp',\n paramsWithNonce,\n );\n\n return {\n signature,\n tx,\n };\n }\n\n protected async getSignatureIfNeeded<T extends SignableRequestType>(\n requestType: T,\n paramsWithNonce: SignatureParams & SignableRequestTypeToParams[T],\n ) {\n if ('signature' in paramsWithNonce) {\n return paramsWithNonce.signature;\n }\n\n return await this.engineClient.sign(\n requestType,\n paramsWithNonce.verifyingAddr,\n paramsWithNonce.chainId,\n paramsWithNonce,\n );\n }\n\n protected async getTxNonceIfNeeded(\n params: WithBaseEngineExecuteParams<{ subaccountOwner: string }>,\n ) {\n if (params.nonce) {\n return params.nonce;\n }\n return await this.engineClient.getTxNonce(params.subaccountOwner);\n }\n\n protected getOrderNonceIfNeeded(\n params: WithBaseEngineExecuteParams<unknown>,\n ) {\n if (params.nonce) {\n return params.nonce;\n }\n return getOrderNonce();\n }\n}\n"],"mappings":"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","names":[]}
@@ -23,6 +23,7 @@ __export(EngineExecuteClient_exports, {
23
23
  EngineExecuteClient: () => EngineExecuteClient
24
24
  });
25
25
  module.exports = __toCommonJS(EngineExecuteClient_exports);
26
+ var import_shared = require("@nadohq/shared");
26
27
  var import_EngineBaseClient = require("./EngineBaseClient.cjs");
27
28
  var import_EngineExecuteBuilder = require("./EngineExecuteBuilder.cjs");
28
29
  var EngineExecuteClient = class extends import_EngineBaseClient.EngineBaseClient {
@@ -69,7 +70,9 @@ var EngineExecuteClient = class extends import_EngineBaseClient.EngineBaseClient
69
70
  return this.execute("cancel_and_place", {
70
71
  cancel_tx: cancelOrdersPayload.tx,
71
72
  cancel_signature: cancelOrdersPayload.signature,
72
- place_order: placeOrderPayload.payload
73
+ place_order: placeOrderPayload.payload,
74
+ required_unfilled_amount: params.requiredUnfilledAmount ? (0, import_shared.toIntegerString)(params.requiredUnfilledAmount) : void 0,
75
+ place_requires_unfilled: params.placeRequiresUnfilled
73
76
  });
74
77
  }
75
78
  async cancelProductOrders(params) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/EngineExecuteClient.ts"],"sourcesContent":["import { EngineBaseClient, EngineClientOpts } from './EngineBaseClient';\nimport { EngineExecuteBuilder } from './EngineExecuteBuilder';\nimport {\n EngineExecuteRequestParamsByType,\n EnginePlaceOrderResult,\n} from './types';\n\nexport class EngineExecuteClient extends EngineBaseClient {\n readonly payloadBuilder: EngineExecuteBuilder;\n\n constructor(opts: EngineClientOpts) {\n super(opts);\n this.payloadBuilder = new EngineExecuteBuilder(this);\n }\n\n async liquidateSubaccount(\n params: EngineExecuteRequestParamsByType['liquidate_subaccount'],\n ) {\n return this.execute(\n 'liquidate_subaccount',\n await this.payloadBuilder.buildLiquidateSubaccountPayload(params),\n );\n }\n\n async withdrawCollateral(\n params: EngineExecuteRequestParamsByType['withdraw_collateral'],\n ) {\n return this.execute(\n 'withdraw_collateral',\n await this.payloadBuilder.buildWithdrawCollateralPayload(params),\n );\n }\n\n async placeOrder(\n params: EngineExecuteRequestParamsByType['place_order'],\n ): Promise<EnginePlaceOrderResult> {\n const placeOrderPayload =\n await this.payloadBuilder.buildPlaceOrderPayload(params);\n return {\n ...(await this.execute('place_order', placeOrderPayload.payload)),\n orderParams: placeOrderPayload.orderParams,\n };\n }\n\n async placeOrders(params: EngineExecuteRequestParamsByType['place_orders']) {\n return this.execute(\n 'place_orders',\n await this.payloadBuilder.buildPlaceOrdersPayload(params),\n );\n }\n\n async cancelOrders(\n params: EngineExecuteRequestParamsByType['cancel_orders'],\n ) {\n return this.execute(\n 'cancel_orders',\n await this.payloadBuilder.buildCancelOrdersPayload(params),\n );\n }\n\n async cancelAndPlace(\n params: EngineExecuteRequestParamsByType['cancel_and_place'],\n ) {\n const cancelOrdersPayload =\n await this.payloadBuilder.buildCancelOrdersPayload(params.cancelOrders);\n const placeOrderPayload = await this.payloadBuilder.buildPlaceOrderPayload(\n params.placeOrder,\n );\n return this.execute('cancel_and_place', {\n cancel_tx: cancelOrdersPayload.tx,\n cancel_signature: cancelOrdersPayload.signature,\n place_order: placeOrderPayload.payload,\n });\n }\n\n async cancelProductOrders(\n params: EngineExecuteRequestParamsByType['cancel_product_orders'],\n ) {\n return this.execute(\n 'cancel_product_orders',\n await this.payloadBuilder.buildCancelProductOrdersPayload(params),\n );\n }\n\n async linkSigner(params: EngineExecuteRequestParamsByType['link_signer']) {\n return this.execute(\n 'link_signer',\n await this.payloadBuilder.buildLinkSignerPayload(params),\n );\n }\n\n async transferQuote(\n params: EngineExecuteRequestParamsByType['transfer_quote'],\n ) {\n return this.execute(\n 'transfer_quote',\n await this.payloadBuilder.buildTransferQuotePayload(params),\n );\n }\n\n async mintNlp(params: EngineExecuteRequestParamsByType['mint_nlp']) {\n return this.execute(\n 'mint_nlp',\n await this.payloadBuilder.buildMintNlpPayload(params),\n );\n }\n\n async burnNlp(params: EngineExecuteRequestParamsByType['burn_nlp']) {\n return this.execute(\n 'burn_nlp',\n await this.payloadBuilder.buildBurnNlpPayload(params),\n );\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,8BAAmD;AACnD,kCAAqC;AAM9B,IAAM,sBAAN,cAAkC,yCAAiB;AAAA,EAGxD,YAAY,MAAwB;AAClC,UAAM,IAAI;AACV,SAAK,iBAAiB,IAAI,iDAAqB,IAAI;AAAA,EACrD;AAAA,EAEA,MAAM,oBACJ,QACA;AACA,WAAO,KAAK;AAAA,MACV;AAAA,MACA,MAAM,KAAK,eAAe,gCAAgC,MAAM;AAAA,IAClE;AAAA,EACF;AAAA,EAEA,MAAM,mBACJ,QACA;AACA,WAAO,KAAK;AAAA,MACV;AAAA,MACA,MAAM,KAAK,eAAe,+BAA+B,MAAM;AAAA,IACjE;AAAA,EACF;AAAA,EAEA,MAAM,WACJ,QACiC;AACjC,UAAM,oBACJ,MAAM,KAAK,eAAe,uBAAuB,MAAM;AACzD,WAAO;AAAA,MACL,GAAI,MAAM,KAAK,QAAQ,eAAe,kBAAkB,OAAO;AAAA,MAC/D,aAAa,kBAAkB;AAAA,IACjC;AAAA,EACF;AAAA,EAEA,MAAM,YAAY,QAA0D;AAC1E,WAAO,KAAK;AAAA,MACV;AAAA,MACA,MAAM,KAAK,eAAe,wBAAwB,MAAM;AAAA,IAC1D;AAAA,EACF;AAAA,EAEA,MAAM,aACJ,QACA;AACA,WAAO,KAAK;AAAA,MACV;AAAA,MACA,MAAM,KAAK,eAAe,yBAAyB,MAAM;AAAA,IAC3D;AAAA,EACF;AAAA,EAEA,MAAM,eACJ,QACA;AACA,UAAM,sBACJ,MAAM,KAAK,eAAe,yBAAyB,OAAO,YAAY;AACxE,UAAM,oBAAoB,MAAM,KAAK,eAAe;AAAA,MAClD,OAAO;AAAA,IACT;AACA,WAAO,KAAK,QAAQ,oBAAoB;AAAA,MACtC,WAAW,oBAAoB;AAAA,MAC/B,kBAAkB,oBAAoB;AAAA,MACtC,aAAa,kBAAkB;AAAA,IACjC,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,oBACJ,QACA;AACA,WAAO,KAAK;AAAA,MACV;AAAA,MACA,MAAM,KAAK,eAAe,gCAAgC,MAAM;AAAA,IAClE;AAAA,EACF;AAAA,EAEA,MAAM,WAAW,QAAyD;AACxE,WAAO,KAAK;AAAA,MACV;AAAA,MACA,MAAM,KAAK,eAAe,uBAAuB,MAAM;AAAA,IACzD;AAAA,EACF;AAAA,EAEA,MAAM,cACJ,QACA;AACA,WAAO,KAAK;AAAA,MACV;AAAA,MACA,MAAM,KAAK,eAAe,0BAA0B,MAAM;AAAA,IAC5D;AAAA,EACF;AAAA,EAEA,MAAM,QAAQ,QAAsD;AAClE,WAAO,KAAK;AAAA,MACV;AAAA,MACA,MAAM,KAAK,eAAe,oBAAoB,MAAM;AAAA,IACtD;AAAA,EACF;AAAA,EAEA,MAAM,QAAQ,QAAsD;AAClE,WAAO,KAAK;AAAA,MACV;AAAA,MACA,MAAM,KAAK,eAAe,oBAAoB,MAAM;AAAA,IACtD;AAAA,EACF;AACF;","names":[]}
1
+ {"version":3,"sources":["../src/EngineExecuteClient.ts"],"sourcesContent":["import { toIntegerString } from '@nadohq/shared';\nimport { EngineBaseClient, EngineClientOpts } from './EngineBaseClient';\nimport { EngineExecuteBuilder } from './EngineExecuteBuilder';\nimport {\n EngineExecuteRequestParamsByType,\n EnginePlaceOrderResult,\n} from './types';\n\nexport class EngineExecuteClient extends EngineBaseClient {\n readonly payloadBuilder: EngineExecuteBuilder;\n\n constructor(opts: EngineClientOpts) {\n super(opts);\n this.payloadBuilder = new EngineExecuteBuilder(this);\n }\n\n async liquidateSubaccount(\n params: EngineExecuteRequestParamsByType['liquidate_subaccount'],\n ) {\n return this.execute(\n 'liquidate_subaccount',\n await this.payloadBuilder.buildLiquidateSubaccountPayload(params),\n );\n }\n\n async withdrawCollateral(\n params: EngineExecuteRequestParamsByType['withdraw_collateral'],\n ) {\n return this.execute(\n 'withdraw_collateral',\n await this.payloadBuilder.buildWithdrawCollateralPayload(params),\n );\n }\n\n async placeOrder(\n params: EngineExecuteRequestParamsByType['place_order'],\n ): Promise<EnginePlaceOrderResult> {\n const placeOrderPayload =\n await this.payloadBuilder.buildPlaceOrderPayload(params);\n return {\n ...(await this.execute('place_order', placeOrderPayload.payload)),\n orderParams: placeOrderPayload.orderParams,\n };\n }\n\n async placeOrders(params: EngineExecuteRequestParamsByType['place_orders']) {\n return this.execute(\n 'place_orders',\n await this.payloadBuilder.buildPlaceOrdersPayload(params),\n );\n }\n\n async cancelOrders(\n params: EngineExecuteRequestParamsByType['cancel_orders'],\n ) {\n return this.execute(\n 'cancel_orders',\n await this.payloadBuilder.buildCancelOrdersPayload(params),\n );\n }\n\n async cancelAndPlace(\n params: EngineExecuteRequestParamsByType['cancel_and_place'],\n ) {\n const cancelOrdersPayload =\n await this.payloadBuilder.buildCancelOrdersPayload(params.cancelOrders);\n const placeOrderPayload = await this.payloadBuilder.buildPlaceOrderPayload(\n params.placeOrder,\n );\n return this.execute('cancel_and_place', {\n cancel_tx: cancelOrdersPayload.tx,\n cancel_signature: cancelOrdersPayload.signature,\n place_order: placeOrderPayload.payload,\n required_unfilled_amount: params.requiredUnfilledAmount\n ? toIntegerString(params.requiredUnfilledAmount)\n : undefined,\n place_requires_unfilled: params.placeRequiresUnfilled,\n });\n }\n\n async cancelProductOrders(\n params: EngineExecuteRequestParamsByType['cancel_product_orders'],\n ) {\n return this.execute(\n 'cancel_product_orders',\n await this.payloadBuilder.buildCancelProductOrdersPayload(params),\n );\n }\n\n async linkSigner(params: EngineExecuteRequestParamsByType['link_signer']) {\n return this.execute(\n 'link_signer',\n await this.payloadBuilder.buildLinkSignerPayload(params),\n );\n }\n\n async transferQuote(\n params: EngineExecuteRequestParamsByType['transfer_quote'],\n ) {\n return this.execute(\n 'transfer_quote',\n await this.payloadBuilder.buildTransferQuotePayload(params),\n );\n }\n\n async mintNlp(params: EngineExecuteRequestParamsByType['mint_nlp']) {\n return this.execute(\n 'mint_nlp',\n await this.payloadBuilder.buildMintNlpPayload(params),\n );\n }\n\n async burnNlp(params: EngineExecuteRequestParamsByType['burn_nlp']) {\n return this.execute(\n 'burn_nlp',\n await this.payloadBuilder.buildBurnNlpPayload(params),\n );\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAgC;AAChC,8BAAmD;AACnD,kCAAqC;AAM9B,IAAM,sBAAN,cAAkC,yCAAiB;AAAA,EAGxD,YAAY,MAAwB;AAClC,UAAM,IAAI;AACV,SAAK,iBAAiB,IAAI,iDAAqB,IAAI;AAAA,EACrD;AAAA,EAEA,MAAM,oBACJ,QACA;AACA,WAAO,KAAK;AAAA,MACV;AAAA,MACA,MAAM,KAAK,eAAe,gCAAgC,MAAM;AAAA,IAClE;AAAA,EACF;AAAA,EAEA,MAAM,mBACJ,QACA;AACA,WAAO,KAAK;AAAA,MACV;AAAA,MACA,MAAM,KAAK,eAAe,+BAA+B,MAAM;AAAA,IACjE;AAAA,EACF;AAAA,EAEA,MAAM,WACJ,QACiC;AACjC,UAAM,oBACJ,MAAM,KAAK,eAAe,uBAAuB,MAAM;AACzD,WAAO;AAAA,MACL,GAAI,MAAM,KAAK,QAAQ,eAAe,kBAAkB,OAAO;AAAA,MAC/D,aAAa,kBAAkB;AAAA,IACjC;AAAA,EACF;AAAA,EAEA,MAAM,YAAY,QAA0D;AAC1E,WAAO,KAAK;AAAA,MACV;AAAA,MACA,MAAM,KAAK,eAAe,wBAAwB,MAAM;AAAA,IAC1D;AAAA,EACF;AAAA,EAEA,MAAM,aACJ,QACA;AACA,WAAO,KAAK;AAAA,MACV;AAAA,MACA,MAAM,KAAK,eAAe,yBAAyB,MAAM;AAAA,IAC3D;AAAA,EACF;AAAA,EAEA,MAAM,eACJ,QACA;AACA,UAAM,sBACJ,MAAM,KAAK,eAAe,yBAAyB,OAAO,YAAY;AACxE,UAAM,oBAAoB,MAAM,KAAK,eAAe;AAAA,MAClD,OAAO;AAAA,IACT;AACA,WAAO,KAAK,QAAQ,oBAAoB;AAAA,MACtC,WAAW,oBAAoB;AAAA,MAC/B,kBAAkB,oBAAoB;AAAA,MACtC,aAAa,kBAAkB;AAAA,MAC/B,0BAA0B,OAAO,6BAC7B,+BAAgB,OAAO,sBAAsB,IAC7C;AAAA,MACJ,yBAAyB,OAAO;AAAA,IAClC,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,oBACJ,QACA;AACA,WAAO,KAAK;AAAA,MACV;AAAA,MACA,MAAM,KAAK,eAAe,gCAAgC,MAAM;AAAA,IAClE;AAAA,EACF;AAAA,EAEA,MAAM,WAAW,QAAyD;AACxE,WAAO,KAAK;AAAA,MACV;AAAA,MACA,MAAM,KAAK,eAAe,uBAAuB,MAAM;AAAA,IACzD;AAAA,EACF;AAAA,EAEA,MAAM,cACJ,QACA;AACA,WAAO,KAAK;AAAA,MACV;AAAA,MACA,MAAM,KAAK,eAAe,0BAA0B,MAAM;AAAA,IAC5D;AAAA,EACF;AAAA,EAEA,MAAM,QAAQ,QAAsD;AAClE,WAAO,KAAK;AAAA,MACV;AAAA,MACA,MAAM,KAAK,eAAe,oBAAoB,MAAM;AAAA,IACtD;AAAA,EACF;AAAA,EAEA,MAAM,QAAQ,QAAsD;AAClE,WAAO,KAAK;AAAA,MACV;AAAA,MACA,MAAM,KAAK,eAAe,oBAAoB,MAAM;AAAA,IACtD;AAAA,EACF;AACF;","names":[]}
@@ -3,11 +3,11 @@ import { EngineServerExecuteSuccessResult } from './types/serverExecuteTypes.cjs
3
3
  import { EngineBaseClient, EngineClientOpts } from './EngineBaseClient.cjs';
4
4
  import { EngineExecuteBuilder } from './EngineExecuteBuilder.cjs';
5
5
  import '@nadohq/shared';
6
+ import 'bignumber.js';
6
7
  import './types/serverQueryTypes.cjs';
7
8
  import './types/serverQueryModelTypes.cjs';
8
9
  import 'axios';
9
10
  import './types/clientQueryTypes.cjs';
10
- import 'bignumber.js';
11
11
 
12
12
  declare class EngineExecuteClient extends EngineBaseClient {
13
13
  readonly payloadBuilder: EngineExecuteBuilder;
@@ -3,11 +3,11 @@ import { EngineServerExecuteSuccessResult } from './types/serverExecuteTypes.js'
3
3
  import { EngineBaseClient, EngineClientOpts } from './EngineBaseClient.js';
4
4
  import { EngineExecuteBuilder } from './EngineExecuteBuilder.js';
5
5
  import '@nadohq/shared';
6
+ import 'bignumber.js';
6
7
  import './types/serverQueryTypes.js';
7
8
  import './types/serverQueryModelTypes.js';
8
9
  import 'axios';
9
10
  import './types/clientQueryTypes.js';
10
- import 'bignumber.js';
11
11
 
12
12
  declare class EngineExecuteClient extends EngineBaseClient {
13
13
  readonly payloadBuilder: EngineExecuteBuilder;
@@ -1,4 +1,5 @@
1
1
  // src/EngineExecuteClient.ts
2
+ import { toIntegerString } from "@nadohq/shared";
2
3
  import { EngineBaseClient } from "./EngineBaseClient.js";
3
4
  import { EngineExecuteBuilder } from "./EngineExecuteBuilder.js";
4
5
  var EngineExecuteClient = class extends EngineBaseClient {
@@ -45,7 +46,9 @@ var EngineExecuteClient = class extends EngineBaseClient {
45
46
  return this.execute("cancel_and_place", {
46
47
  cancel_tx: cancelOrdersPayload.tx,
47
48
  cancel_signature: cancelOrdersPayload.signature,
48
- place_order: placeOrderPayload.payload
49
+ place_order: placeOrderPayload.payload,
50
+ required_unfilled_amount: params.requiredUnfilledAmount ? toIntegerString(params.requiredUnfilledAmount) : void 0,
51
+ place_requires_unfilled: params.placeRequiresUnfilled
49
52
  });
50
53
  }
51
54
  async cancelProductOrders(params) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/EngineExecuteClient.ts"],"sourcesContent":["import { EngineBaseClient, EngineClientOpts } from './EngineBaseClient';\nimport { EngineExecuteBuilder } from './EngineExecuteBuilder';\nimport {\n EngineExecuteRequestParamsByType,\n EnginePlaceOrderResult,\n} from './types';\n\nexport class EngineExecuteClient extends EngineBaseClient {\n readonly payloadBuilder: EngineExecuteBuilder;\n\n constructor(opts: EngineClientOpts) {\n super(opts);\n this.payloadBuilder = new EngineExecuteBuilder(this);\n }\n\n async liquidateSubaccount(\n params: EngineExecuteRequestParamsByType['liquidate_subaccount'],\n ) {\n return this.execute(\n 'liquidate_subaccount',\n await this.payloadBuilder.buildLiquidateSubaccountPayload(params),\n );\n }\n\n async withdrawCollateral(\n params: EngineExecuteRequestParamsByType['withdraw_collateral'],\n ) {\n return this.execute(\n 'withdraw_collateral',\n await this.payloadBuilder.buildWithdrawCollateralPayload(params),\n );\n }\n\n async placeOrder(\n params: EngineExecuteRequestParamsByType['place_order'],\n ): Promise<EnginePlaceOrderResult> {\n const placeOrderPayload =\n await this.payloadBuilder.buildPlaceOrderPayload(params);\n return {\n ...(await this.execute('place_order', placeOrderPayload.payload)),\n orderParams: placeOrderPayload.orderParams,\n };\n }\n\n async placeOrders(params: EngineExecuteRequestParamsByType['place_orders']) {\n return this.execute(\n 'place_orders',\n await this.payloadBuilder.buildPlaceOrdersPayload(params),\n );\n }\n\n async cancelOrders(\n params: EngineExecuteRequestParamsByType['cancel_orders'],\n ) {\n return this.execute(\n 'cancel_orders',\n await this.payloadBuilder.buildCancelOrdersPayload(params),\n );\n }\n\n async cancelAndPlace(\n params: EngineExecuteRequestParamsByType['cancel_and_place'],\n ) {\n const cancelOrdersPayload =\n await this.payloadBuilder.buildCancelOrdersPayload(params.cancelOrders);\n const placeOrderPayload = await this.payloadBuilder.buildPlaceOrderPayload(\n params.placeOrder,\n );\n return this.execute('cancel_and_place', {\n cancel_tx: cancelOrdersPayload.tx,\n cancel_signature: cancelOrdersPayload.signature,\n place_order: placeOrderPayload.payload,\n });\n }\n\n async cancelProductOrders(\n params: EngineExecuteRequestParamsByType['cancel_product_orders'],\n ) {\n return this.execute(\n 'cancel_product_orders',\n await this.payloadBuilder.buildCancelProductOrdersPayload(params),\n );\n }\n\n async linkSigner(params: EngineExecuteRequestParamsByType['link_signer']) {\n return this.execute(\n 'link_signer',\n await this.payloadBuilder.buildLinkSignerPayload(params),\n );\n }\n\n async transferQuote(\n params: EngineExecuteRequestParamsByType['transfer_quote'],\n ) {\n return this.execute(\n 'transfer_quote',\n await this.payloadBuilder.buildTransferQuotePayload(params),\n );\n }\n\n async mintNlp(params: EngineExecuteRequestParamsByType['mint_nlp']) {\n return this.execute(\n 'mint_nlp',\n await this.payloadBuilder.buildMintNlpPayload(params),\n );\n }\n\n async burnNlp(params: EngineExecuteRequestParamsByType['burn_nlp']) {\n return this.execute(\n 'burn_nlp',\n await this.payloadBuilder.buildBurnNlpPayload(params),\n );\n }\n}\n"],"mappings":";AAAA,SAAS,wBAA0C;AACnD,SAAS,4BAA4B;AAM9B,IAAM,sBAAN,cAAkC,iBAAiB;AAAA,EAGxD,YAAY,MAAwB;AAClC,UAAM,IAAI;AACV,SAAK,iBAAiB,IAAI,qBAAqB,IAAI;AAAA,EACrD;AAAA,EAEA,MAAM,oBACJ,QACA;AACA,WAAO,KAAK;AAAA,MACV;AAAA,MACA,MAAM,KAAK,eAAe,gCAAgC,MAAM;AAAA,IAClE;AAAA,EACF;AAAA,EAEA,MAAM,mBACJ,QACA;AACA,WAAO,KAAK;AAAA,MACV;AAAA,MACA,MAAM,KAAK,eAAe,+BAA+B,MAAM;AAAA,IACjE;AAAA,EACF;AAAA,EAEA,MAAM,WACJ,QACiC;AACjC,UAAM,oBACJ,MAAM,KAAK,eAAe,uBAAuB,MAAM;AACzD,WAAO;AAAA,MACL,GAAI,MAAM,KAAK,QAAQ,eAAe,kBAAkB,OAAO;AAAA,MAC/D,aAAa,kBAAkB;AAAA,IACjC;AAAA,EACF;AAAA,EAEA,MAAM,YAAY,QAA0D;AAC1E,WAAO,KAAK;AAAA,MACV;AAAA,MACA,MAAM,KAAK,eAAe,wBAAwB,MAAM;AAAA,IAC1D;AAAA,EACF;AAAA,EAEA,MAAM,aACJ,QACA;AACA,WAAO,KAAK;AAAA,MACV;AAAA,MACA,MAAM,KAAK,eAAe,yBAAyB,MAAM;AAAA,IAC3D;AAAA,EACF;AAAA,EAEA,MAAM,eACJ,QACA;AACA,UAAM,sBACJ,MAAM,KAAK,eAAe,yBAAyB,OAAO,YAAY;AACxE,UAAM,oBAAoB,MAAM,KAAK,eAAe;AAAA,MAClD,OAAO;AAAA,IACT;AACA,WAAO,KAAK,QAAQ,oBAAoB;AAAA,MACtC,WAAW,oBAAoB;AAAA,MAC/B,kBAAkB,oBAAoB;AAAA,MACtC,aAAa,kBAAkB;AAAA,IACjC,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,oBACJ,QACA;AACA,WAAO,KAAK;AAAA,MACV;AAAA,MACA,MAAM,KAAK,eAAe,gCAAgC,MAAM;AAAA,IAClE;AAAA,EACF;AAAA,EAEA,MAAM,WAAW,QAAyD;AACxE,WAAO,KAAK;AAAA,MACV;AAAA,MACA,MAAM,KAAK,eAAe,uBAAuB,MAAM;AAAA,IACzD;AAAA,EACF;AAAA,EAEA,MAAM,cACJ,QACA;AACA,WAAO,KAAK;AAAA,MACV;AAAA,MACA,MAAM,KAAK,eAAe,0BAA0B,MAAM;AAAA,IAC5D;AAAA,EACF;AAAA,EAEA,MAAM,QAAQ,QAAsD;AAClE,WAAO,KAAK;AAAA,MACV;AAAA,MACA,MAAM,KAAK,eAAe,oBAAoB,MAAM;AAAA,IACtD;AAAA,EACF;AAAA,EAEA,MAAM,QAAQ,QAAsD;AAClE,WAAO,KAAK;AAAA,MACV;AAAA,MACA,MAAM,KAAK,eAAe,oBAAoB,MAAM;AAAA,IACtD;AAAA,EACF;AACF;","names":[]}
1
+ {"version":3,"sources":["../src/EngineExecuteClient.ts"],"sourcesContent":["import { toIntegerString } from '@nadohq/shared';\nimport { EngineBaseClient, EngineClientOpts } from './EngineBaseClient';\nimport { EngineExecuteBuilder } from './EngineExecuteBuilder';\nimport {\n EngineExecuteRequestParamsByType,\n EnginePlaceOrderResult,\n} from './types';\n\nexport class EngineExecuteClient extends EngineBaseClient {\n readonly payloadBuilder: EngineExecuteBuilder;\n\n constructor(opts: EngineClientOpts) {\n super(opts);\n this.payloadBuilder = new EngineExecuteBuilder(this);\n }\n\n async liquidateSubaccount(\n params: EngineExecuteRequestParamsByType['liquidate_subaccount'],\n ) {\n return this.execute(\n 'liquidate_subaccount',\n await this.payloadBuilder.buildLiquidateSubaccountPayload(params),\n );\n }\n\n async withdrawCollateral(\n params: EngineExecuteRequestParamsByType['withdraw_collateral'],\n ) {\n return this.execute(\n 'withdraw_collateral',\n await this.payloadBuilder.buildWithdrawCollateralPayload(params),\n );\n }\n\n async placeOrder(\n params: EngineExecuteRequestParamsByType['place_order'],\n ): Promise<EnginePlaceOrderResult> {\n const placeOrderPayload =\n await this.payloadBuilder.buildPlaceOrderPayload(params);\n return {\n ...(await this.execute('place_order', placeOrderPayload.payload)),\n orderParams: placeOrderPayload.orderParams,\n };\n }\n\n async placeOrders(params: EngineExecuteRequestParamsByType['place_orders']) {\n return this.execute(\n 'place_orders',\n await this.payloadBuilder.buildPlaceOrdersPayload(params),\n );\n }\n\n async cancelOrders(\n params: EngineExecuteRequestParamsByType['cancel_orders'],\n ) {\n return this.execute(\n 'cancel_orders',\n await this.payloadBuilder.buildCancelOrdersPayload(params),\n );\n }\n\n async cancelAndPlace(\n params: EngineExecuteRequestParamsByType['cancel_and_place'],\n ) {\n const cancelOrdersPayload =\n await this.payloadBuilder.buildCancelOrdersPayload(params.cancelOrders);\n const placeOrderPayload = await this.payloadBuilder.buildPlaceOrderPayload(\n params.placeOrder,\n );\n return this.execute('cancel_and_place', {\n cancel_tx: cancelOrdersPayload.tx,\n cancel_signature: cancelOrdersPayload.signature,\n place_order: placeOrderPayload.payload,\n required_unfilled_amount: params.requiredUnfilledAmount\n ? toIntegerString(params.requiredUnfilledAmount)\n : undefined,\n place_requires_unfilled: params.placeRequiresUnfilled,\n });\n }\n\n async cancelProductOrders(\n params: EngineExecuteRequestParamsByType['cancel_product_orders'],\n ) {\n return this.execute(\n 'cancel_product_orders',\n await this.payloadBuilder.buildCancelProductOrdersPayload(params),\n );\n }\n\n async linkSigner(params: EngineExecuteRequestParamsByType['link_signer']) {\n return this.execute(\n 'link_signer',\n await this.payloadBuilder.buildLinkSignerPayload(params),\n );\n }\n\n async transferQuote(\n params: EngineExecuteRequestParamsByType['transfer_quote'],\n ) {\n return this.execute(\n 'transfer_quote',\n await this.payloadBuilder.buildTransferQuotePayload(params),\n );\n }\n\n async mintNlp(params: EngineExecuteRequestParamsByType['mint_nlp']) {\n return this.execute(\n 'mint_nlp',\n await this.payloadBuilder.buildMintNlpPayload(params),\n );\n }\n\n async burnNlp(params: EngineExecuteRequestParamsByType['burn_nlp']) {\n return this.execute(\n 'burn_nlp',\n await this.payloadBuilder.buildBurnNlpPayload(params),\n );\n }\n}\n"],"mappings":";AAAA,SAAS,uBAAuB;AAChC,SAAS,wBAA0C;AACnD,SAAS,4BAA4B;AAM9B,IAAM,sBAAN,cAAkC,iBAAiB;AAAA,EAGxD,YAAY,MAAwB;AAClC,UAAM,IAAI;AACV,SAAK,iBAAiB,IAAI,qBAAqB,IAAI;AAAA,EACrD;AAAA,EAEA,MAAM,oBACJ,QACA;AACA,WAAO,KAAK;AAAA,MACV;AAAA,MACA,MAAM,KAAK,eAAe,gCAAgC,MAAM;AAAA,IAClE;AAAA,EACF;AAAA,EAEA,MAAM,mBACJ,QACA;AACA,WAAO,KAAK;AAAA,MACV;AAAA,MACA,MAAM,KAAK,eAAe,+BAA+B,MAAM;AAAA,IACjE;AAAA,EACF;AAAA,EAEA,MAAM,WACJ,QACiC;AACjC,UAAM,oBACJ,MAAM,KAAK,eAAe,uBAAuB,MAAM;AACzD,WAAO;AAAA,MACL,GAAI,MAAM,KAAK,QAAQ,eAAe,kBAAkB,OAAO;AAAA,MAC/D,aAAa,kBAAkB;AAAA,IACjC;AAAA,EACF;AAAA,EAEA,MAAM,YAAY,QAA0D;AAC1E,WAAO,KAAK;AAAA,MACV;AAAA,MACA,MAAM,KAAK,eAAe,wBAAwB,MAAM;AAAA,IAC1D;AAAA,EACF;AAAA,EAEA,MAAM,aACJ,QACA;AACA,WAAO,KAAK;AAAA,MACV;AAAA,MACA,MAAM,KAAK,eAAe,yBAAyB,MAAM;AAAA,IAC3D;AAAA,EACF;AAAA,EAEA,MAAM,eACJ,QACA;AACA,UAAM,sBACJ,MAAM,KAAK,eAAe,yBAAyB,OAAO,YAAY;AACxE,UAAM,oBAAoB,MAAM,KAAK,eAAe;AAAA,MAClD,OAAO;AAAA,IACT;AACA,WAAO,KAAK,QAAQ,oBAAoB;AAAA,MACtC,WAAW,oBAAoB;AAAA,MAC/B,kBAAkB,oBAAoB;AAAA,MACtC,aAAa,kBAAkB;AAAA,MAC/B,0BAA0B,OAAO,yBAC7B,gBAAgB,OAAO,sBAAsB,IAC7C;AAAA,MACJ,yBAAyB,OAAO;AAAA,IAClC,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,oBACJ,QACA;AACA,WAAO,KAAK;AAAA,MACV;AAAA,MACA,MAAM,KAAK,eAAe,gCAAgC,MAAM;AAAA,IAClE;AAAA,EACF;AAAA,EAEA,MAAM,WAAW,QAAyD;AACxE,WAAO,KAAK;AAAA,MACV;AAAA,MACA,MAAM,KAAK,eAAe,uBAAuB,MAAM;AAAA,IACzD;AAAA,EACF;AAAA,EAEA,MAAM,cACJ,QACA;AACA,WAAO,KAAK;AAAA,MACV;AAAA,MACA,MAAM,KAAK,eAAe,0BAA0B,MAAM;AAAA,IAC5D;AAAA,EACF;AAAA,EAEA,MAAM,QAAQ,QAAsD;AAClE,WAAO,KAAK;AAAA,MACV;AAAA,MACA,MAAM,KAAK,eAAe,oBAAoB,MAAM;AAAA,IACtD;AAAA,EACF;AAAA,EAEA,MAAM,QAAQ,QAAsD;AAClE,WAAO,KAAK;AAAA,MACV;AAAA,MACA,MAAM,KAAK,eAAe,oBAAoB,MAAM;AAAA,IACtD;AAAA,EACF;AACF;","names":[]}
@@ -24,6 +24,7 @@ __export(EngineWebClient_exports, {
24
24
  });
25
25
  module.exports = __toCommonJS(EngineWebClient_exports);
26
26
  var import_EngineBaseClient = require("./EngineBaseClient.cjs");
27
+ var COUNTRY_HEADER = "x-nado-country";
27
28
  var EngineWebClient = class extends import_EngineBaseClient.EngineBaseClient {
28
29
  /**
29
30
  * Determines the IP block status for the current client
@@ -43,6 +44,21 @@ var EngineWebClient = class extends import_EngineBaseClient.EngineBaseClient {
43
44
  return resData.reason === "ip_query_only" ? "query_only" : "blocked";
44
45
  });
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
+ }
46
62
  /**
47
63
  * Determines whether a client needs to complete the cloudflare JS challenge to interact with the API
48
64
  *
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/EngineWebClient.ts"],"sourcesContent":["import { EngineBaseClient } from './EngineBaseClient';\nimport {\n EngineServerIpBlockResponse,\n GetEngineIpBlockStatusResponse,\n GetEngineTimeResponse,\n} from './types';\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 /time 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 * 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;AAW1B,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,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,"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,5 +1,5 @@
1
1
  import { EngineBaseClient } from './EngineBaseClient.cjs';
2
- import { GetEngineIpBlockStatusResponse, GetEngineTimeResponse } from './types/clientQueryTypes.cjs';
2
+ import { GetEngineIpBlockStatusResponse, GetEngineCountryCodeResponse, GetEngineTimeResponse } from './types/clientQueryTypes.cjs';
3
3
  import '@nadohq/shared';
4
4
  import 'axios';
5
5
  import './types/serverExecuteTypes.cjs';
@@ -16,6 +16,14 @@ declare class EngineWebClient extends EngineBaseClient {
16
16
  * Determines the IP block status for the current client
17
17
  */
18
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>;
19
27
  /**
20
28
  * Determines whether a client needs to complete the cloudflare JS challenge to interact with the API
21
29
  *
@@ -1,5 +1,5 @@
1
1
  import { EngineBaseClient } from './EngineBaseClient.js';
2
- import { GetEngineIpBlockStatusResponse, GetEngineTimeResponse } from './types/clientQueryTypes.js';
2
+ import { GetEngineIpBlockStatusResponse, GetEngineCountryCodeResponse, GetEngineTimeResponse } from './types/clientQueryTypes.js';
3
3
  import '@nadohq/shared';
4
4
  import 'axios';
5
5
  import './types/serverExecuteTypes.js';
@@ -16,6 +16,14 @@ declare class EngineWebClient extends EngineBaseClient {
16
16
  * Determines the IP block status for the current client
17
17
  */
18
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>;
19
27
  /**
20
28
  * Determines whether a client needs to complete the cloudflare JS challenge to interact with the API
21
29
  *
@@ -1,5 +1,6 @@
1
1
  // src/EngineWebClient.ts
2
2
  import { EngineBaseClient } from "./EngineBaseClient.js";
3
+ var COUNTRY_HEADER = "x-nado-country";
3
4
  var EngineWebClient = class extends EngineBaseClient {
4
5
  /**
5
6
  * Determines the IP block status for the current client
@@ -19,6 +20,21 @@ var EngineWebClient = class extends EngineBaseClient {
19
20
  return resData.reason === "ip_query_only" ? "query_only" : "blocked";
20
21
  });
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
+ }
22
38
  /**
23
39
  * Determines whether a client needs to complete the cloudflare JS challenge to interact with the API
24
40
  *
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/EngineWebClient.ts"],"sourcesContent":["import { EngineBaseClient } from './EngineBaseClient';\nimport {\n EngineServerIpBlockResponse,\n GetEngineIpBlockStatusResponse,\n GetEngineTimeResponse,\n} from './types';\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 /time 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 * 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;AAW1B,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,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,"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":[]}
package/dist/index.d.cts CHANGED
@@ -1,7 +1,7 @@
1
1
  export { ENGINE_CLIENT_ENDPOINTS, ENGINE_WS_CLIENT_ENDPOINTS, ENGINE_WS_SUBSCRIPTION_CLIENT_ENDPOINTS } from './endpoints.cjs';
2
2
  export { EngineClient } from './EngineClient.cjs';
3
3
  export { EngineBurnNlpParams, EngineCancelAndPlaceParams, EngineCancelOrdersParams, EngineCancelProductOrdersParams, EngineExecuteRequestParamsByType, EngineLinkSignerParams, EngineLiquidateSubaccountParams, EngineMintNlpParams, EngineOrderParams, EnginePlaceOrderParams, EnginePlaceOrderResult, EnginePlaceOrdersParams, EngineTransferQuoteParams, EngineWithdrawCollateralParams, SignatureParams, WithBaseEngineExecuteParams, WithSignature } from './types/clientExecuteTypes.cjs';
4
- export { EngineMarketPrice, EngineNlpBalance, EngineNlpLockedBalance, EngineOrder, EnginePriceTickLiquidity, EngineSubaccountOrders, EngineSymbol, EngineSymbolsResponse, GetEngineAllMarketsResponse, GetEngineContractsResponse, GetEngineEstimatedSubaccountSummaryParams, GetEngineHealthGroupsResponse, GetEngineInsuranceResponse, GetEngineIpBlockStatusResponse, GetEngineIsolatedPositionsParams, GetEngineIsolatedPositionsResponse, GetEngineLinkedSignerParams, GetEngineLinkedSignerResponse, GetEngineMarketLiquidityParams, GetEngineMarketLiquidityResponse, GetEngineMarketPriceParams, GetEngineMarketPriceResponse, GetEngineMarketPricesParams, GetEngineMarketPricesResponse, GetEngineMaxBurnNlpAmountParams, GetEngineMaxBurnNlpAmountResponse, GetEngineMaxMintNlpAmountParams, GetEngineMaxMintNlpAmountResponse, GetEngineMaxOrderSizeParams, GetEngineMaxOrderSizeResponse, GetEngineMaxWithdrawableParams, GetEngineMaxWithdrawableResponse, GetEngineNlpLockedBalancesParams, GetEngineNlpLockedBalancesResponse, GetEngineNlpPoolInfoResponse, GetEngineNoncesParams, GetEngineNoncesResponse, GetEngineOrderParams, GetEngineOrderResponse, GetEngineSubaccountFeeRatesParams, GetEngineSubaccountFeeRatesResponse, GetEngineSubaccountOrdersParams, GetEngineSubaccountOrdersResponse, GetEngineSubaccountProductOrdersParams, GetEngineSubaccountProductOrdersResponse, GetEngineSubaccountSummaryParams, GetEngineSubaccountSummaryResponse, GetEngineSymbolsParams, GetEngineTimeResponse, NlpPool, SubaccountIsolatedPosition, SubaccountOrderFeeRates, SubaccountProductDeltaTx, SubaccountSummaryState, SubaccountTx, ValidateEngineOrderParams, ValidateEngineOrderResponse, ValidateSignedEngineOrderParams } from './types/clientQueryTypes.cjs';
4
+ export { EngineMarketPrice, EngineNlpBalance, EngineNlpLockedBalance, EngineOrder, EnginePriceTickLiquidity, EngineSubaccountOrders, EngineSymbol, EngineSymbolsResponse, GetEngineAllMarketsResponse, GetEngineContractsResponse, GetEngineCountryCodeResponse, GetEngineEstimatedSubaccountSummaryParams, GetEngineHealthGroupsResponse, GetEngineInsuranceResponse, GetEngineIpBlockStatusResponse, GetEngineIsolatedPositionsParams, GetEngineIsolatedPositionsResponse, GetEngineLinkedSignerParams, GetEngineLinkedSignerResponse, GetEngineMarketLiquidityParams, GetEngineMarketLiquidityResponse, GetEngineMarketPriceParams, GetEngineMarketPriceResponse, GetEngineMarketPricesParams, GetEngineMarketPricesResponse, GetEngineMaxBurnNlpAmountParams, GetEngineMaxBurnNlpAmountResponse, GetEngineMaxMintNlpAmountParams, GetEngineMaxMintNlpAmountResponse, GetEngineMaxOrderSizeParams, GetEngineMaxOrderSizeResponse, GetEngineMaxWithdrawableParams, GetEngineMaxWithdrawableResponse, GetEngineNlpLockedBalancesParams, GetEngineNlpLockedBalancesResponse, GetEngineNlpPoolInfoResponse, GetEngineNoncesParams, GetEngineNoncesResponse, GetEngineOrderParams, GetEngineOrderResponse, GetEngineSubaccountFeeRatesParams, GetEngineSubaccountFeeRatesResponse, GetEngineSubaccountOrdersParams, GetEngineSubaccountOrdersResponse, GetEngineSubaccountProductOrdersParams, GetEngineSubaccountProductOrdersResponse, GetEngineSubaccountSummaryParams, GetEngineSubaccountSummaryResponse, GetEngineSymbolsParams, GetEngineTimeResponse, NlpPool, SubaccountIsolatedPosition, SubaccountOrderFeeRates, SubaccountProductDeltaTx, SubaccountSummaryState, SubaccountTx, ValidateEngineOrderParams, ValidateEngineOrderResponse, ValidateSignedEngineOrderParams } from './types/clientQueryTypes.cjs';
5
5
  export { EngineServerFailureError } from './types/EngineServerFailureError.cjs';
6
6
  export { EngineServerCancelOrdersParams, EngineServerCancelOrdersResponse, EngineServerExecuteFailureResult, EngineServerExecutePlaceOrderPayload, EngineServerExecuteRequestByType, EngineServerExecuteRequestType, EngineServerExecuteResponseDataByType, EngineServerExecuteResult, EngineServerExecuteSuccessResult, EngineServerPlaceOrderParams, EngineServerPlaceOrderResponse, EngineServerPlaceOrdersResponse, EngineServiceCancelAndPlaceParams } from './types/serverExecuteTypes.cjs';
7
7
  export { EngineServerBookInfo, EngineServerHealthBreakdown, EngineServerNlpBalance, EngineServerNlpLockedBalance, EngineServerOrder, EngineServerPerpBalance, EngineServerPerpBalanceData, EngineServerPerpProduct, EngineServerPerpState, EngineServerProductType, EngineServerRisk, EngineServerSpotBalance, EngineServerSpotBalanceData, EngineServerSpotConfig, EngineServerSpotProduct, EngineServerSpotState } from './types/serverQueryModelTypes.cjs';
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  export { ENGINE_CLIENT_ENDPOINTS, ENGINE_WS_CLIENT_ENDPOINTS, ENGINE_WS_SUBSCRIPTION_CLIENT_ENDPOINTS } from './endpoints.js';
2
2
  export { EngineClient } from './EngineClient.js';
3
3
  export { EngineBurnNlpParams, EngineCancelAndPlaceParams, EngineCancelOrdersParams, EngineCancelProductOrdersParams, EngineExecuteRequestParamsByType, EngineLinkSignerParams, EngineLiquidateSubaccountParams, EngineMintNlpParams, EngineOrderParams, EnginePlaceOrderParams, EnginePlaceOrderResult, EnginePlaceOrdersParams, EngineTransferQuoteParams, EngineWithdrawCollateralParams, SignatureParams, WithBaseEngineExecuteParams, WithSignature } from './types/clientExecuteTypes.js';
4
- export { EngineMarketPrice, EngineNlpBalance, EngineNlpLockedBalance, EngineOrder, EnginePriceTickLiquidity, EngineSubaccountOrders, EngineSymbol, EngineSymbolsResponse, GetEngineAllMarketsResponse, GetEngineContractsResponse, GetEngineEstimatedSubaccountSummaryParams, GetEngineHealthGroupsResponse, GetEngineInsuranceResponse, GetEngineIpBlockStatusResponse, GetEngineIsolatedPositionsParams, GetEngineIsolatedPositionsResponse, GetEngineLinkedSignerParams, GetEngineLinkedSignerResponse, GetEngineMarketLiquidityParams, GetEngineMarketLiquidityResponse, GetEngineMarketPriceParams, GetEngineMarketPriceResponse, GetEngineMarketPricesParams, GetEngineMarketPricesResponse, GetEngineMaxBurnNlpAmountParams, GetEngineMaxBurnNlpAmountResponse, GetEngineMaxMintNlpAmountParams, GetEngineMaxMintNlpAmountResponse, GetEngineMaxOrderSizeParams, GetEngineMaxOrderSizeResponse, GetEngineMaxWithdrawableParams, GetEngineMaxWithdrawableResponse, GetEngineNlpLockedBalancesParams, GetEngineNlpLockedBalancesResponse, GetEngineNlpPoolInfoResponse, GetEngineNoncesParams, GetEngineNoncesResponse, GetEngineOrderParams, GetEngineOrderResponse, GetEngineSubaccountFeeRatesParams, GetEngineSubaccountFeeRatesResponse, GetEngineSubaccountOrdersParams, GetEngineSubaccountOrdersResponse, GetEngineSubaccountProductOrdersParams, GetEngineSubaccountProductOrdersResponse, GetEngineSubaccountSummaryParams, GetEngineSubaccountSummaryResponse, GetEngineSymbolsParams, GetEngineTimeResponse, NlpPool, SubaccountIsolatedPosition, SubaccountOrderFeeRates, SubaccountProductDeltaTx, SubaccountSummaryState, SubaccountTx, ValidateEngineOrderParams, ValidateEngineOrderResponse, ValidateSignedEngineOrderParams } from './types/clientQueryTypes.js';
4
+ export { EngineMarketPrice, EngineNlpBalance, EngineNlpLockedBalance, EngineOrder, EnginePriceTickLiquidity, EngineSubaccountOrders, EngineSymbol, EngineSymbolsResponse, GetEngineAllMarketsResponse, GetEngineContractsResponse, GetEngineCountryCodeResponse, GetEngineEstimatedSubaccountSummaryParams, GetEngineHealthGroupsResponse, GetEngineInsuranceResponse, GetEngineIpBlockStatusResponse, GetEngineIsolatedPositionsParams, GetEngineIsolatedPositionsResponse, GetEngineLinkedSignerParams, GetEngineLinkedSignerResponse, GetEngineMarketLiquidityParams, GetEngineMarketLiquidityResponse, GetEngineMarketPriceParams, GetEngineMarketPriceResponse, GetEngineMarketPricesParams, GetEngineMarketPricesResponse, GetEngineMaxBurnNlpAmountParams, GetEngineMaxBurnNlpAmountResponse, GetEngineMaxMintNlpAmountParams, GetEngineMaxMintNlpAmountResponse, GetEngineMaxOrderSizeParams, GetEngineMaxOrderSizeResponse, GetEngineMaxWithdrawableParams, GetEngineMaxWithdrawableResponse, GetEngineNlpLockedBalancesParams, GetEngineNlpLockedBalancesResponse, GetEngineNlpPoolInfoResponse, GetEngineNoncesParams, GetEngineNoncesResponse, GetEngineOrderParams, GetEngineOrderResponse, GetEngineSubaccountFeeRatesParams, GetEngineSubaccountFeeRatesResponse, GetEngineSubaccountOrdersParams, GetEngineSubaccountOrdersResponse, GetEngineSubaccountProductOrdersParams, GetEngineSubaccountProductOrdersResponse, GetEngineSubaccountSummaryParams, GetEngineSubaccountSummaryResponse, GetEngineSymbolsParams, GetEngineTimeResponse, NlpPool, SubaccountIsolatedPosition, SubaccountOrderFeeRates, SubaccountProductDeltaTx, SubaccountSummaryState, SubaccountTx, ValidateEngineOrderParams, ValidateEngineOrderResponse, ValidateSignedEngineOrderParams } from './types/clientQueryTypes.js';
5
5
  export { EngineServerFailureError } from './types/EngineServerFailureError.js';
6
6
  export { EngineServerCancelOrdersParams, EngineServerCancelOrdersResponse, EngineServerExecuteFailureResult, EngineServerExecutePlaceOrderPayload, EngineServerExecuteRequestByType, EngineServerExecuteRequestType, EngineServerExecuteResponseDataByType, EngineServerExecuteResult, EngineServerExecuteSuccessResult, EngineServerPlaceOrderParams, EngineServerPlaceOrderResponse, EngineServerPlaceOrdersResponse, EngineServiceCancelAndPlaceParams } from './types/serverExecuteTypes.js';
7
7
  export { EngineServerBookInfo, EngineServerHealthBreakdown, EngineServerNlpBalance, EngineServerNlpLockedBalance, EngineServerOrder, EngineServerPerpBalance, EngineServerPerpBalanceData, EngineServerPerpProduct, EngineServerPerpState, EngineServerProductType, EngineServerRisk, EngineServerSpotBalance, EngineServerSpotBalanceData, EngineServerSpotConfig, EngineServerSpotProduct, EngineServerSpotState } from './types/serverQueryModelTypes.js';
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/types/clientExecuteTypes.ts"],"sourcesContent":["import {\n EIP712BurnNlpParams,\n EIP712CancelOrdersParams,\n EIP712CancelProductOrdersParams,\n EIP712LinkSignerParams,\n EIP712LiquidateSubaccountParams,\n EIP712MintNlpParams,\n EIP712OrderParams,\n EIP712TransferQuoteParams,\n EIP712WithdrawCollateralParams,\n} from '@nadohq/shared';\nimport { EngineServerExecuteSuccessResult } from './serverExecuteTypes';\n\n/**\n * Either verifying address or signature must be provided;\n * If signature is not provided, the verifying address with the engine signer will be used to sign.\n */\nexport type SignatureParams =\n | {\n // Endpoint address for all executes except order placement\n verifyingAddr: string;\n chainId: number;\n }\n | {\n signature: string;\n };\n\ntype WithoutNonce<T extends { nonce: unknown }> = Omit<T, 'nonce'>;\n\ntype WithSpotLeverage<T> = T & {\n spotLeverage?: boolean;\n};\n\nexport type WithSignature<T> = T & {\n signature: string;\n};\n\n// Params associated with all engine executes\nexport type WithBaseEngineExecuteParams<T> = SignatureParams &\n Omit<T, 'nonce'> & {\n nonce?: string;\n };\n\nexport type EngineOrderParams = WithoutNonce<EIP712OrderParams>;\n\nexport type EnginePlaceOrderParams = WithBaseEngineExecuteParams<{\n id?: number;\n productId: number;\n order: EngineOrderParams;\n // If not given, engine defaults to true (leverage/borrow enabled)\n spotLeverage?: boolean;\n // For isolated orders, this specifies whether margin can be borrowed (i.e. whether the cross account can have a negative USDT balance)\n borrowMargin?: boolean;\n}>;\n\nexport type EngineLiquidateSubaccountParams =\n WithBaseEngineExecuteParams<EIP712LiquidateSubaccountParams>;\n\nexport type EngineWithdrawCollateralParams = WithBaseEngineExecuteParams<\n WithSpotLeverage<EIP712WithdrawCollateralParams>\n>;\n\nexport type EngineCancelOrdersParams =\n WithBaseEngineExecuteParams<EIP712CancelOrdersParams>;\n\nexport type EngineCancelAndPlaceParams = {\n cancelOrders: EngineCancelOrdersParams;\n placeOrder: EnginePlaceOrderParams;\n};\n\nexport type EngineCancelProductOrdersParams =\n WithBaseEngineExecuteParams<EIP712CancelProductOrdersParams>;\n\nexport type EngineLinkSignerParams =\n WithBaseEngineExecuteParams<EIP712LinkSignerParams>;\n\nexport type EngineTransferQuoteParams =\n WithBaseEngineExecuteParams<EIP712TransferQuoteParams>;\n\nexport type EngineMintNlpParams = WithBaseEngineExecuteParams<\n WithSpotLeverage<EIP712MintNlpParams>\n>;\n\nexport type EngineBurnNlpParams =\n WithBaseEngineExecuteParams<EIP712BurnNlpParams>;\n\nexport type EnginePlaceOrdersParams = {\n orders: EnginePlaceOrderParams[];\n /**\n * If `true`, aborts the batch after the first failed order; if `false`, remaining orders continue to execute.\n * If not provided, the default value is `false`.\n */\n stopOnFailure?: boolean;\n};\n\nexport interface EngineExecuteRequestParamsByType {\n burn_nlp: EngineBurnNlpParams;\n cancel_and_place: EngineCancelAndPlaceParams;\n cancel_orders: EngineCancelOrdersParams;\n cancel_product_orders: EngineCancelProductOrdersParams;\n link_signer: EngineLinkSignerParams;\n liquidate_subaccount: EngineLiquidateSubaccountParams;\n mint_nlp: EngineMintNlpParams;\n place_order: EnginePlaceOrderParams;\n place_orders: EnginePlaceOrdersParams;\n transfer_quote: EngineTransferQuoteParams;\n withdraw_collateral: EngineWithdrawCollateralParams;\n}\n\nexport type EnginePlaceOrderResult =\n EngineServerExecuteSuccessResult<'place_order'> & {\n orderParams: EIP712OrderParams;\n };\n"],"mappings":";;;;;;;;;;;;;;;;AAAA;AAAA;","names":[]}
1
+ {"version":3,"sources":["../../src/types/clientExecuteTypes.ts"],"sourcesContent":["import {\n EIP712BurnNlpParams,\n EIP712CancelOrdersParams,\n EIP712CancelProductOrdersParams,\n EIP712LinkSignerParams,\n EIP712LiquidateSubaccountParams,\n EIP712MintNlpParams,\n EIP712OrderParams,\n EIP712TransferQuoteParams,\n EIP712WithdrawCollateralParams,\n} from '@nadohq/shared';\nimport BigNumber from 'bignumber.js';\nimport { EngineServerExecuteSuccessResult } from './serverExecuteTypes';\n\n/**\n * Either verifying address or signature must be provided;\n * If signature is not provided, the verifying address with the engine signer will be used to sign.\n */\nexport type SignatureParams =\n | {\n // Endpoint address for all executes except order placement\n verifyingAddr: string;\n chainId: number;\n }\n | {\n signature: string;\n };\n\ntype WithoutNonce<T extends { nonce: unknown }> = Omit<T, 'nonce'>;\n\ntype WithSpotLeverage<T> = T & {\n spotLeverage?: boolean;\n};\n\nexport type WithSignature<T> = T & {\n signature: string;\n};\n\n// Params associated with all engine executes\nexport type WithBaseEngineExecuteParams<T> = SignatureParams &\n Omit<T, 'nonce'> & {\n nonce?: string;\n };\n\nexport type EngineOrderParams = WithoutNonce<EIP712OrderParams>;\n\nexport type EnginePlaceOrderParams = WithBaseEngineExecuteParams<{\n id?: number;\n productId: number;\n order: EngineOrderParams;\n // If not given, engine defaults to true (leverage/borrow enabled)\n spotLeverage?: boolean;\n // For isolated orders, this specifies whether margin can be borrowed (i.e. whether the cross account can have a negative USDT balance)\n borrowMargin?: boolean;\n}>;\n\nexport type EngineLiquidateSubaccountParams =\n WithBaseEngineExecuteParams<EIP712LiquidateSubaccountParams>;\n\nexport type EngineWithdrawCollateralParams = WithBaseEngineExecuteParams<\n WithSpotLeverage<EIP712WithdrawCollateralParams>\n>;\n\nexport type EngineCancelOrdersParams =\n WithBaseEngineExecuteParams<EIP712CancelOrdersParams> & {\n /**\n * The current unfilled amount of the order. If provided, the cancel will fail if the\n * order's unfilled amount does not match this value. Used to prevent race conditions\n * where a fill occurs at the same time as a cancel.\n */\n requiredUnfilledAmount?: BigNumber;\n };\n\nexport interface EngineCancelAndPlaceParams {\n cancelOrders: EngineCancelOrdersParams;\n placeOrder: EnginePlaceOrderParams;\n /**\n * The current unfilled amount of the order being cancelled. If provided, the cancel will\n * fail if the order's unfilled amount does not match this value.\n */\n requiredUnfilledAmount?: BigNumber;\n /**\n * If `true`, the cancel_and_place operation will fail if the order being cancelled has been\n * partially filled.\n */\n placeRequiresUnfilled?: boolean;\n}\n\nexport type EngineCancelProductOrdersParams =\n WithBaseEngineExecuteParams<EIP712CancelProductOrdersParams>;\n\nexport type EngineLinkSignerParams =\n WithBaseEngineExecuteParams<EIP712LinkSignerParams>;\n\nexport type EngineTransferQuoteParams =\n WithBaseEngineExecuteParams<EIP712TransferQuoteParams>;\n\nexport type EngineMintNlpParams = WithBaseEngineExecuteParams<\n WithSpotLeverage<EIP712MintNlpParams>\n>;\n\nexport type EngineBurnNlpParams =\n WithBaseEngineExecuteParams<EIP712BurnNlpParams>;\n\nexport type EnginePlaceOrdersParams = {\n orders: EnginePlaceOrderParams[];\n /**\n * If `true`, aborts the batch after the first failed order; if `false`, remaining orders continue to execute.\n * If not provided, the default value is `false`.\n */\n stopOnFailure?: boolean;\n};\n\nexport interface EngineExecuteRequestParamsByType {\n burn_nlp: EngineBurnNlpParams;\n cancel_and_place: EngineCancelAndPlaceParams;\n cancel_orders: EngineCancelOrdersParams;\n cancel_product_orders: EngineCancelProductOrdersParams;\n link_signer: EngineLinkSignerParams;\n liquidate_subaccount: EngineLiquidateSubaccountParams;\n mint_nlp: EngineMintNlpParams;\n place_order: EnginePlaceOrderParams;\n place_orders: EnginePlaceOrdersParams;\n transfer_quote: EngineTransferQuoteParams;\n withdraw_collateral: EngineWithdrawCollateralParams;\n}\n\nexport type EnginePlaceOrderResult =\n EngineServerExecuteSuccessResult<'place_order'> & {\n orderParams: EIP712OrderParams;\n };\n"],"mappings":";;;;;;;;;;;;;;;;AAAA;AAAA;","names":[]}
@@ -1,4 +1,5 @@
1
1
  import { EIP712BurnNlpParams, EIP712CancelOrdersParams, EIP712OrderParams, EIP712CancelProductOrdersParams, EIP712LinkSignerParams, EIP712LiquidateSubaccountParams, EIP712MintNlpParams, EIP712TransferQuoteParams, EIP712WithdrawCollateralParams } from '@nadohq/shared';
2
+ import BigNumber from 'bignumber.js';
2
3
  import { EngineServerExecuteSuccessResult } from './serverExecuteTypes.cjs';
3
4
  import './serverQueryTypes.cjs';
4
5
  import './serverQueryModelTypes.cjs';
@@ -35,11 +36,28 @@ type EnginePlaceOrderParams = WithBaseEngineExecuteParams<{
35
36
  }>;
36
37
  type EngineLiquidateSubaccountParams = WithBaseEngineExecuteParams<EIP712LiquidateSubaccountParams>;
37
38
  type EngineWithdrawCollateralParams = WithBaseEngineExecuteParams<WithSpotLeverage<EIP712WithdrawCollateralParams>>;
38
- type EngineCancelOrdersParams = WithBaseEngineExecuteParams<EIP712CancelOrdersParams>;
39
- type EngineCancelAndPlaceParams = {
39
+ type EngineCancelOrdersParams = WithBaseEngineExecuteParams<EIP712CancelOrdersParams> & {
40
+ /**
41
+ * The current unfilled amount of the order. If provided, the cancel will fail if the
42
+ * order's unfilled amount does not match this value. Used to prevent race conditions
43
+ * where a fill occurs at the same time as a cancel.
44
+ */
45
+ requiredUnfilledAmount?: BigNumber;
46
+ };
47
+ interface EngineCancelAndPlaceParams {
40
48
  cancelOrders: EngineCancelOrdersParams;
41
49
  placeOrder: EnginePlaceOrderParams;
42
- };
50
+ /**
51
+ * The current unfilled amount of the order being cancelled. If provided, the cancel will
52
+ * fail if the order's unfilled amount does not match this value.
53
+ */
54
+ requiredUnfilledAmount?: BigNumber;
55
+ /**
56
+ * If `true`, the cancel_and_place operation will fail if the order being cancelled has been
57
+ * partially filled.
58
+ */
59
+ placeRequiresUnfilled?: boolean;
60
+ }
43
61
  type EngineCancelProductOrdersParams = WithBaseEngineExecuteParams<EIP712CancelProductOrdersParams>;
44
62
  type EngineLinkSignerParams = WithBaseEngineExecuteParams<EIP712LinkSignerParams>;
45
63
  type EngineTransferQuoteParams = WithBaseEngineExecuteParams<EIP712TransferQuoteParams>;
@@ -1,4 +1,5 @@
1
1
  import { EIP712BurnNlpParams, EIP712CancelOrdersParams, EIP712OrderParams, EIP712CancelProductOrdersParams, EIP712LinkSignerParams, EIP712LiquidateSubaccountParams, EIP712MintNlpParams, EIP712TransferQuoteParams, EIP712WithdrawCollateralParams } from '@nadohq/shared';
2
+ import BigNumber from 'bignumber.js';
2
3
  import { EngineServerExecuteSuccessResult } from './serverExecuteTypes.js';
3
4
  import './serverQueryTypes.js';
4
5
  import './serverQueryModelTypes.js';
@@ -35,11 +36,28 @@ type EnginePlaceOrderParams = WithBaseEngineExecuteParams<{
35
36
  }>;
36
37
  type EngineLiquidateSubaccountParams = WithBaseEngineExecuteParams<EIP712LiquidateSubaccountParams>;
37
38
  type EngineWithdrawCollateralParams = WithBaseEngineExecuteParams<WithSpotLeverage<EIP712WithdrawCollateralParams>>;
38
- type EngineCancelOrdersParams = WithBaseEngineExecuteParams<EIP712CancelOrdersParams>;
39
- type EngineCancelAndPlaceParams = {
39
+ type EngineCancelOrdersParams = WithBaseEngineExecuteParams<EIP712CancelOrdersParams> & {
40
+ /**
41
+ * The current unfilled amount of the order. If provided, the cancel will fail if the
42
+ * order's unfilled amount does not match this value. Used to prevent race conditions
43
+ * where a fill occurs at the same time as a cancel.
44
+ */
45
+ requiredUnfilledAmount?: BigNumber;
46
+ };
47
+ interface EngineCancelAndPlaceParams {
40
48
  cancelOrders: EngineCancelOrdersParams;
41
49
  placeOrder: EnginePlaceOrderParams;
42
- };
50
+ /**
51
+ * The current unfilled amount of the order being cancelled. If provided, the cancel will
52
+ * fail if the order's unfilled amount does not match this value.
53
+ */
54
+ requiredUnfilledAmount?: BigNumber;
55
+ /**
56
+ * If `true`, the cancel_and_place operation will fail if the order being cancelled has been
57
+ * partially filled.
58
+ */
59
+ placeRequiresUnfilled?: boolean;
60
+ }
43
61
  type EngineCancelProductOrdersParams = WithBaseEngineExecuteParams<EIP712CancelProductOrdersParams>;
44
62
  type EngineLinkSignerParams = WithBaseEngineExecuteParams<EIP712LinkSignerParams>;
45
63
  type EngineTransferQuoteParams = WithBaseEngineExecuteParams<EIP712TransferQuoteParams>;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/types/clientQueryTypes.ts"],"sourcesContent":["import {\n BalanceHealthContributions,\n BalanceSide,\n BalanceWithProduct,\n EIP712OrderParams,\n HealthGroup,\n HealthStatusByType,\n MarketWithProduct,\n OrderAppendix,\n PerpBalanceWithProduct,\n ProductEngineType,\n SignedEIP712OrderParams,\n SpotBalanceWithProduct,\n Subaccount,\n} from '@nadohq/shared';\nimport BigNumber from 'bignumber.js';\nimport {\n EngineServerNoncesParams,\n EngineServerTimeResponse,\n} from './serverQueryTypes';\n\nexport interface GetEngineSubaccountSummaryResponse extends SubaccountSummaryState {\n exists: boolean;\n preState?: SubaccountSummaryState;\n}\n\nexport interface SubaccountSummaryState {\n balances: BalanceWithProduct[];\n health: HealthStatusByType;\n}\n\nexport type GetEngineSubaccountSummaryParams = Subaccount;\n\nexport type GetEngineIsolatedPositionsParams = Subaccount;\n\nexport interface SubaccountIsolatedPosition {\n subaccount: Subaccount;\n healths: BalanceHealthContributions;\n quoteBalance: SpotBalanceWithProduct;\n baseBalance: PerpBalanceWithProduct;\n}\n\nexport type GetEngineIsolatedPositionsResponse = SubaccountIsolatedPosition[];\n\nexport type SubaccountTx = {\n type: 'apply_delta';\n tx: SubaccountProductDeltaTx;\n};\n\nexport interface SubaccountProductDeltaTx {\n productId: number;\n amountDelta: BigNumber;\n vQuoteDelta: BigNumber;\n}\n\nexport interface GetEngineContractsResponse {\n chainId: number;\n endpointAddr: string;\n}\n\nexport type GetEngineEstimatedSubaccountSummaryParams = Subaccount & {\n txs: SubaccountTx[];\n preState?: boolean;\n};\n\nexport type GetEngineNoncesParams = EngineServerNoncesParams;\n\nexport interface GetEngineNoncesResponse {\n orderNonce: string;\n txNonce: string;\n}\n\nexport interface GetEngineSymbolsParams {\n productType?: ProductEngineType;\n productIds?: number[];\n}\n\nexport interface EngineSymbolsResponse {\n // mapping of product symbol to symbols info\n symbols: Record<string, EngineSymbol>;\n}\n\nexport interface EngineSymbol {\n type: ProductEngineType;\n productId: number;\n symbol: string;\n priceIncrement: BigNumber;\n sizeIncrement: BigNumber;\n minSize: BigNumber;\n makerFeeRate: BigNumber;\n takerFeeRate: BigNumber;\n longWeightInitial: BigNumber;\n longWeightMaintenance: BigNumber;\n // undefined when there is no max open interest limit (always undefined for spot products)\n maxOpenInterest: BigNumber | undefined;\n isolatedOnly: boolean;\n}\n\nexport type GetEngineAllMarketsResponse = MarketWithProduct[];\n\nexport interface GetEngineHealthGroupsResponse {\n healthGroups: HealthGroup[];\n}\n\nexport interface GetEngineOrderParams {\n productId: number;\n digest: string;\n}\n\nexport interface EngineOrder extends Subaccount {\n productId: number;\n price: BigNumber;\n // Amount initially requested\n totalAmount: BigNumber;\n // Amount still unfilled\n unfilledAmount: BigNumber;\n expiration: number;\n nonce: string;\n digest: string;\n placementTime: number;\n appendix: OrderAppendix;\n}\n\nexport type GetEngineOrderResponse = EngineOrder;\n\nexport interface ValidateSignedEngineOrderParams {\n productId: number;\n signedOrder: SignedEIP712OrderParams;\n}\n\nexport interface ValidateEngineOrderParams {\n productId: number;\n chainId: number;\n order: EIP712OrderParams;\n}\n\nexport interface ValidateEngineOrderResponse {\n productId: number;\n valid: boolean;\n}\n\nexport interface GetEngineSubaccountOrdersParams extends Subaccount {\n productId: number;\n}\n\nexport interface EngineSubaccountOrders {\n productId: number;\n orders: EngineOrder[];\n}\n\nexport type GetEngineSubaccountOrdersResponse = EngineSubaccountOrders;\n\nexport interface GetEngineSubaccountProductOrdersParams extends Subaccount {\n productIds: number[];\n}\n\nexport interface GetEngineSubaccountProductOrdersResponse {\n productOrders: EngineSubaccountOrders[];\n}\n\nexport type GetEngineSubaccountFeeRatesParams = Subaccount;\n\nexport interface SubaccountOrderFeeRates {\n maker: BigNumber;\n taker: BigNumber;\n}\n\nexport interface GetEngineSubaccountFeeRatesResponse {\n // By Product ID\n orders: Record<number, SubaccountOrderFeeRates>;\n withdrawal: Record<number, BigNumber>;\n liquidationSequencerFee: BigNumber;\n healthCheckSequencerFee: BigNumber;\n takerSequencerFee: BigNumber;\n feeTier: number;\n}\n\nexport interface EnginePriceTickLiquidity {\n price: BigNumber;\n liquidity: BigNumber;\n}\n\nexport interface GetEngineMarketLiquidityParams {\n productId: number;\n // The minimum depth in base price ticks (i.e. per side\n depth: number;\n}\n\nexport interface GetEngineMarketLiquidityResponse {\n bids: EnginePriceTickLiquidity[];\n asks: EnginePriceTickLiquidity[];\n}\n\nexport interface GetEngineMarketPriceParams {\n productId: number;\n}\n\nexport interface EngineMarketPrice {\n productId: number;\n bid: BigNumber;\n ask: BigNumber;\n}\n\nexport type GetEngineMarketPriceResponse = EngineMarketPrice;\n\nexport interface GetEngineMarketPricesParams {\n productIds: number[];\n}\n\nexport interface GetEngineMarketPricesResponse {\n marketPrices: EngineMarketPrice[];\n}\n\nexport interface GetEngineMaxOrderSizeParams extends Subaccount {\n price: BigNumber;\n productId: number;\n // Note: When `reduceOnly` is true, `side` must be opposite of the current position, otherwise it returns 0.\n side: BalanceSide;\n // If not given, engine defaults to true (leverage/borrow enabled) for spot\n // Do not pass this for perp products\n spotLeverage?: boolean;\n // If not given, engine defaults to false. If true, the max order size will be capped to the subaccount's current position size;\n // If no position exists, it will return 0.\n reduceOnly?: boolean;\n isolated?: boolean;\n // If not given, engine defaults to true (do not borrow margin for isolated orders)\n // Max order size query for `isolated` includes available transfer from the cross subaccount\n isoBorrowMargin?: boolean;\n}\n\nexport type GetEngineMaxOrderSizeResponse = BigNumber;\n\nexport interface GetEngineMaxWithdrawableParams extends Subaccount {\n productId: number;\n // If not given, engine defaults to true (leverage/borrow enabled)\n spotLeverage?: boolean;\n}\n\nexport type GetEngineMaxWithdrawableResponse = BigNumber;\n\nexport type GetEngineTimeResponse = EngineServerTimeResponse;\n\nexport type GetEngineLinkedSignerParams = Subaccount;\n\nexport interface GetEngineLinkedSignerResponse {\n signer: string;\n}\n\nexport type GetEngineInsuranceResponse = BigNumber;\n\n/**\n * Given an IP, backend will either:\n * - Allow queries only through archive / engine (query_only)\n * - Block all requests (blocked)\n * - Allow all requests (null)\n */\nexport type GetEngineIpBlockStatusResponse = 'query_only' | 'blocked' | null;\n\nexport interface GetEngineMaxMintNlpAmountParams extends Subaccount {\n // If not given, engine defaults to true (leverage/borrow enabled)\n spotLeverage?: boolean;\n}\n\nexport type GetEngineMaxMintNlpAmountResponse = BigNumber;\n\nexport type GetEngineMaxBurnNlpAmountParams = Subaccount;\n\nexport type GetEngineMaxBurnNlpAmountResponse = BigNumber;\n\nexport type GetEngineNlpLockedBalancesParams = Subaccount;\n\nexport interface EngineNlpBalance {\n productId: number;\n balance: BigNumber;\n}\n\nexport interface EngineNlpLockedBalance extends EngineNlpBalance {\n unlockedAt: number;\n}\n\nexport interface GetEngineNlpLockedBalancesResponse {\n lockedBalances: EngineNlpLockedBalance[];\n balanceLocked: EngineNlpBalance;\n balanceUnlocked: EngineNlpBalance;\n}\n\nexport interface NlpPool {\n poolId: number;\n subaccountHex: string;\n ownerAddress: string;\n balanceWeight: BigNumber;\n subaccountInfo: GetEngineSubaccountSummaryResponse;\n openOrders: EngineOrder[];\n}\n\nexport interface GetEngineNlpPoolInfoResponse {\n nlpPools: NlpPool[];\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAAA;AAAA;","names":[]}
1
+ {"version":3,"sources":["../../src/types/clientQueryTypes.ts"],"sourcesContent":["import {\n BalanceHealthContributions,\n BalanceSide,\n BalanceWithProduct,\n EIP712OrderParams,\n HealthGroup,\n HealthStatusByType,\n MarketWithProduct,\n OrderAppendix,\n PerpBalanceWithProduct,\n ProductEngineType,\n SignedEIP712OrderParams,\n SpotBalanceWithProduct,\n Subaccount,\n} from '@nadohq/shared';\nimport BigNumber from 'bignumber.js';\nimport {\n EngineServerNoncesParams,\n EngineServerTimeResponse,\n} from './serverQueryTypes';\n\nexport interface GetEngineSubaccountSummaryResponse extends SubaccountSummaryState {\n exists: boolean;\n preState?: SubaccountSummaryState;\n}\n\nexport interface SubaccountSummaryState {\n balances: BalanceWithProduct[];\n health: HealthStatusByType;\n}\n\nexport type GetEngineSubaccountSummaryParams = Subaccount;\n\nexport type GetEngineIsolatedPositionsParams = Subaccount;\n\nexport interface SubaccountIsolatedPosition {\n subaccount: Subaccount;\n healths: BalanceHealthContributions;\n quoteBalance: SpotBalanceWithProduct;\n baseBalance: PerpBalanceWithProduct;\n}\n\nexport type GetEngineIsolatedPositionsResponse = SubaccountIsolatedPosition[];\n\nexport type SubaccountTx = {\n type: 'apply_delta';\n tx: SubaccountProductDeltaTx;\n};\n\nexport interface SubaccountProductDeltaTx {\n productId: number;\n amountDelta: BigNumber;\n vQuoteDelta: BigNumber;\n}\n\nexport interface GetEngineContractsResponse {\n chainId: number;\n endpointAddr: string;\n}\n\nexport type GetEngineEstimatedSubaccountSummaryParams = Subaccount & {\n txs: SubaccountTx[];\n preState?: boolean;\n};\n\nexport type GetEngineNoncesParams = EngineServerNoncesParams;\n\nexport interface GetEngineNoncesResponse {\n orderNonce: string;\n txNonce: string;\n}\n\nexport interface GetEngineSymbolsParams {\n productType?: ProductEngineType;\n productIds?: number[];\n}\n\nexport interface EngineSymbolsResponse {\n // mapping of product symbol to symbols info\n symbols: Record<string, EngineSymbol>;\n}\n\nexport interface EngineSymbol {\n type: ProductEngineType;\n productId: number;\n symbol: string;\n priceIncrement: BigNumber;\n sizeIncrement: BigNumber;\n minSize: BigNumber;\n makerFeeRate: BigNumber;\n takerFeeRate: BigNumber;\n longWeightInitial: BigNumber;\n longWeightMaintenance: BigNumber;\n // undefined when there is no max open interest limit (always undefined for spot products)\n maxOpenInterest: BigNumber | undefined;\n isolatedOnly: boolean;\n}\n\nexport type GetEngineAllMarketsResponse = MarketWithProduct[];\n\nexport interface GetEngineHealthGroupsResponse {\n healthGroups: HealthGroup[];\n}\n\nexport interface GetEngineOrderParams {\n productId: number;\n digest: string;\n}\n\nexport interface EngineOrder extends Subaccount {\n productId: number;\n price: BigNumber;\n // Amount initially requested\n totalAmount: BigNumber;\n // Amount still unfilled\n unfilledAmount: BigNumber;\n expiration: number;\n nonce: string;\n digest: string;\n placementTime: number;\n appendix: OrderAppendix;\n}\n\nexport type GetEngineOrderResponse = EngineOrder;\n\nexport interface ValidateSignedEngineOrderParams {\n productId: number;\n signedOrder: SignedEIP712OrderParams;\n}\n\nexport interface ValidateEngineOrderParams {\n productId: number;\n chainId: number;\n order: EIP712OrderParams;\n}\n\nexport interface ValidateEngineOrderResponse {\n productId: number;\n valid: boolean;\n}\n\nexport interface GetEngineSubaccountOrdersParams extends Subaccount {\n productId: number;\n}\n\nexport interface EngineSubaccountOrders {\n productId: number;\n orders: EngineOrder[];\n}\n\nexport type GetEngineSubaccountOrdersResponse = EngineSubaccountOrders;\n\nexport interface GetEngineSubaccountProductOrdersParams extends Subaccount {\n productIds: number[];\n}\n\nexport interface GetEngineSubaccountProductOrdersResponse {\n productOrders: EngineSubaccountOrders[];\n}\n\nexport type GetEngineSubaccountFeeRatesParams = Subaccount;\n\nexport interface SubaccountOrderFeeRates {\n maker: BigNumber;\n taker: BigNumber;\n}\n\nexport interface GetEngineSubaccountFeeRatesResponse {\n // By Product ID\n orders: Record<number, SubaccountOrderFeeRates>;\n withdrawal: Record<number, BigNumber>;\n liquidationSequencerFee: BigNumber;\n healthCheckSequencerFee: BigNumber;\n takerSequencerFee: BigNumber;\n feeTier: number;\n}\n\nexport interface EnginePriceTickLiquidity {\n price: BigNumber;\n liquidity: BigNumber;\n}\n\nexport interface GetEngineMarketLiquidityParams {\n productId: number;\n // The minimum depth in base price ticks (i.e. per side\n depth: number;\n}\n\nexport interface GetEngineMarketLiquidityResponse {\n bids: EnginePriceTickLiquidity[];\n asks: EnginePriceTickLiquidity[];\n}\n\nexport interface GetEngineMarketPriceParams {\n productId: number;\n}\n\nexport interface EngineMarketPrice {\n productId: number;\n bid: BigNumber;\n ask: BigNumber;\n}\n\nexport type GetEngineMarketPriceResponse = EngineMarketPrice;\n\nexport interface GetEngineMarketPricesParams {\n productIds: number[];\n}\n\nexport interface GetEngineMarketPricesResponse {\n marketPrices: EngineMarketPrice[];\n}\n\nexport interface GetEngineMaxOrderSizeParams extends Subaccount {\n price: BigNumber;\n productId: number;\n // Note: When `reduceOnly` is true, `side` must be opposite of the current position, otherwise it returns 0.\n side: BalanceSide;\n // If not given, engine defaults to true (leverage/borrow enabled) for spot\n // Do not pass this for perp products\n spotLeverage?: boolean;\n // If not given, engine defaults to false. If true, the max order size will be capped to the subaccount's current position size;\n // If no position exists, it will return 0.\n reduceOnly?: boolean;\n isolated?: boolean;\n // If not given, engine defaults to true (do not borrow margin for isolated orders)\n // Max order size query for `isolated` includes available transfer from the cross subaccount\n isoBorrowMargin?: boolean;\n}\n\nexport type GetEngineMaxOrderSizeResponse = BigNumber;\n\nexport interface GetEngineMaxWithdrawableParams extends Subaccount {\n productId: number;\n // If not given, engine defaults to true (leverage/borrow enabled)\n spotLeverage?: boolean;\n}\n\nexport type GetEngineMaxWithdrawableResponse = BigNumber;\n\nexport type GetEngineTimeResponse = EngineServerTimeResponse;\n\nexport type GetEngineLinkedSignerParams = Subaccount;\n\nexport interface GetEngineLinkedSignerResponse {\n signer: string;\n}\n\nexport type GetEngineInsuranceResponse = BigNumber;\n\n/**\n * Given an IP, backend will either:\n * - Allow queries only through archive / engine (query_only)\n * - Block all requests (blocked)\n * - Allow all requests (null)\n */\nexport type GetEngineIpBlockStatusResponse = 'query_only' | 'blocked' | null;\n\n/**\n * ISO 3166-1 alpha-2 country code detected by the gateway (e.g. `'US'`, `'NO'`),\n * or `null` if the gateway did not provide one (e.g. local environments).\n *\n * Suitable for region-based UI gating such as geoblocking trading competitions.\n */\nexport type GetEngineCountryCodeResponse = string | null;\n\nexport interface GetEngineMaxMintNlpAmountParams extends Subaccount {\n // If not given, engine defaults to true (leverage/borrow enabled)\n spotLeverage?: boolean;\n}\n\nexport type GetEngineMaxMintNlpAmountResponse = BigNumber;\n\nexport type GetEngineMaxBurnNlpAmountParams = Subaccount;\n\nexport type GetEngineMaxBurnNlpAmountResponse = BigNumber;\n\nexport type GetEngineNlpLockedBalancesParams = Subaccount;\n\nexport interface EngineNlpBalance {\n productId: number;\n balance: BigNumber;\n}\n\nexport interface EngineNlpLockedBalance extends EngineNlpBalance {\n unlockedAt: number;\n}\n\nexport interface GetEngineNlpLockedBalancesResponse {\n lockedBalances: EngineNlpLockedBalance[];\n balanceLocked: EngineNlpBalance;\n balanceUnlocked: EngineNlpBalance;\n}\n\nexport interface NlpPool {\n poolId: number;\n subaccountHex: string;\n ownerAddress: string;\n balanceWeight: BigNumber;\n subaccountInfo: GetEngineSubaccountSummaryResponse;\n openOrders: EngineOrder[];\n}\n\nexport interface GetEngineNlpPoolInfoResponse {\n nlpPools: NlpPool[];\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAAA;AAAA;","names":[]}
@@ -178,6 +178,13 @@ type GetEngineInsuranceResponse = BigNumber;
178
178
  * - Allow all requests (null)
179
179
  */
180
180
  type GetEngineIpBlockStatusResponse = 'query_only' | 'blocked' | null;
181
+ /**
182
+ * ISO 3166-1 alpha-2 country code detected by the gateway (e.g. `'US'`, `'NO'`),
183
+ * or `null` if the gateway did not provide one (e.g. local environments).
184
+ *
185
+ * Suitable for region-based UI gating such as geoblocking trading competitions.
186
+ */
187
+ type GetEngineCountryCodeResponse = string | null;
181
188
  interface GetEngineMaxMintNlpAmountParams extends Subaccount {
182
189
  spotLeverage?: boolean;
183
190
  }
@@ -209,4 +216,4 @@ interface GetEngineNlpPoolInfoResponse {
209
216
  nlpPools: NlpPool[];
210
217
  }
211
218
 
212
- export type { EngineMarketPrice, EngineNlpBalance, EngineNlpLockedBalance, EngineOrder, EnginePriceTickLiquidity, EngineSubaccountOrders, EngineSymbol, EngineSymbolsResponse, GetEngineAllMarketsResponse, GetEngineContractsResponse, GetEngineEstimatedSubaccountSummaryParams, GetEngineHealthGroupsResponse, GetEngineInsuranceResponse, GetEngineIpBlockStatusResponse, GetEngineIsolatedPositionsParams, GetEngineIsolatedPositionsResponse, GetEngineLinkedSignerParams, GetEngineLinkedSignerResponse, GetEngineMarketLiquidityParams, GetEngineMarketLiquidityResponse, GetEngineMarketPriceParams, GetEngineMarketPriceResponse, GetEngineMarketPricesParams, GetEngineMarketPricesResponse, GetEngineMaxBurnNlpAmountParams, GetEngineMaxBurnNlpAmountResponse, GetEngineMaxMintNlpAmountParams, GetEngineMaxMintNlpAmountResponse, GetEngineMaxOrderSizeParams, GetEngineMaxOrderSizeResponse, GetEngineMaxWithdrawableParams, GetEngineMaxWithdrawableResponse, GetEngineNlpLockedBalancesParams, GetEngineNlpLockedBalancesResponse, GetEngineNlpPoolInfoResponse, GetEngineNoncesParams, GetEngineNoncesResponse, GetEngineOrderParams, GetEngineOrderResponse, GetEngineSubaccountFeeRatesParams, GetEngineSubaccountFeeRatesResponse, GetEngineSubaccountOrdersParams, GetEngineSubaccountOrdersResponse, GetEngineSubaccountProductOrdersParams, GetEngineSubaccountProductOrdersResponse, GetEngineSubaccountSummaryParams, GetEngineSubaccountSummaryResponse, GetEngineSymbolsParams, GetEngineTimeResponse, NlpPool, SubaccountIsolatedPosition, SubaccountOrderFeeRates, SubaccountProductDeltaTx, SubaccountSummaryState, SubaccountTx, ValidateEngineOrderParams, ValidateEngineOrderResponse, ValidateSignedEngineOrderParams };
219
+ export type { EngineMarketPrice, EngineNlpBalance, EngineNlpLockedBalance, EngineOrder, EnginePriceTickLiquidity, EngineSubaccountOrders, EngineSymbol, EngineSymbolsResponse, GetEngineAllMarketsResponse, GetEngineContractsResponse, GetEngineCountryCodeResponse, GetEngineEstimatedSubaccountSummaryParams, GetEngineHealthGroupsResponse, GetEngineInsuranceResponse, GetEngineIpBlockStatusResponse, GetEngineIsolatedPositionsParams, GetEngineIsolatedPositionsResponse, GetEngineLinkedSignerParams, GetEngineLinkedSignerResponse, GetEngineMarketLiquidityParams, GetEngineMarketLiquidityResponse, GetEngineMarketPriceParams, GetEngineMarketPriceResponse, GetEngineMarketPricesParams, GetEngineMarketPricesResponse, GetEngineMaxBurnNlpAmountParams, GetEngineMaxBurnNlpAmountResponse, GetEngineMaxMintNlpAmountParams, GetEngineMaxMintNlpAmountResponse, GetEngineMaxOrderSizeParams, GetEngineMaxOrderSizeResponse, GetEngineMaxWithdrawableParams, GetEngineMaxWithdrawableResponse, GetEngineNlpLockedBalancesParams, GetEngineNlpLockedBalancesResponse, GetEngineNlpPoolInfoResponse, GetEngineNoncesParams, GetEngineNoncesResponse, GetEngineOrderParams, GetEngineOrderResponse, GetEngineSubaccountFeeRatesParams, GetEngineSubaccountFeeRatesResponse, GetEngineSubaccountOrdersParams, GetEngineSubaccountOrdersResponse, GetEngineSubaccountProductOrdersParams, GetEngineSubaccountProductOrdersResponse, GetEngineSubaccountSummaryParams, GetEngineSubaccountSummaryResponse, GetEngineSymbolsParams, GetEngineTimeResponse, NlpPool, SubaccountIsolatedPosition, SubaccountOrderFeeRates, SubaccountProductDeltaTx, SubaccountSummaryState, SubaccountTx, ValidateEngineOrderParams, ValidateEngineOrderResponse, ValidateSignedEngineOrderParams };
@@ -178,6 +178,13 @@ type GetEngineInsuranceResponse = BigNumber;
178
178
  * - Allow all requests (null)
179
179
  */
180
180
  type GetEngineIpBlockStatusResponse = 'query_only' | 'blocked' | null;
181
+ /**
182
+ * ISO 3166-1 alpha-2 country code detected by the gateway (e.g. `'US'`, `'NO'`),
183
+ * or `null` if the gateway did not provide one (e.g. local environments).
184
+ *
185
+ * Suitable for region-based UI gating such as geoblocking trading competitions.
186
+ */
187
+ type GetEngineCountryCodeResponse = string | null;
181
188
  interface GetEngineMaxMintNlpAmountParams extends Subaccount {
182
189
  spotLeverage?: boolean;
183
190
  }
@@ -209,4 +216,4 @@ interface GetEngineNlpPoolInfoResponse {
209
216
  nlpPools: NlpPool[];
210
217
  }
211
218
 
212
- export type { EngineMarketPrice, EngineNlpBalance, EngineNlpLockedBalance, EngineOrder, EnginePriceTickLiquidity, EngineSubaccountOrders, EngineSymbol, EngineSymbolsResponse, GetEngineAllMarketsResponse, GetEngineContractsResponse, GetEngineEstimatedSubaccountSummaryParams, GetEngineHealthGroupsResponse, GetEngineInsuranceResponse, GetEngineIpBlockStatusResponse, GetEngineIsolatedPositionsParams, GetEngineIsolatedPositionsResponse, GetEngineLinkedSignerParams, GetEngineLinkedSignerResponse, GetEngineMarketLiquidityParams, GetEngineMarketLiquidityResponse, GetEngineMarketPriceParams, GetEngineMarketPriceResponse, GetEngineMarketPricesParams, GetEngineMarketPricesResponse, GetEngineMaxBurnNlpAmountParams, GetEngineMaxBurnNlpAmountResponse, GetEngineMaxMintNlpAmountParams, GetEngineMaxMintNlpAmountResponse, GetEngineMaxOrderSizeParams, GetEngineMaxOrderSizeResponse, GetEngineMaxWithdrawableParams, GetEngineMaxWithdrawableResponse, GetEngineNlpLockedBalancesParams, GetEngineNlpLockedBalancesResponse, GetEngineNlpPoolInfoResponse, GetEngineNoncesParams, GetEngineNoncesResponse, GetEngineOrderParams, GetEngineOrderResponse, GetEngineSubaccountFeeRatesParams, GetEngineSubaccountFeeRatesResponse, GetEngineSubaccountOrdersParams, GetEngineSubaccountOrdersResponse, GetEngineSubaccountProductOrdersParams, GetEngineSubaccountProductOrdersResponse, GetEngineSubaccountSummaryParams, GetEngineSubaccountSummaryResponse, GetEngineSymbolsParams, GetEngineTimeResponse, NlpPool, SubaccountIsolatedPosition, SubaccountOrderFeeRates, SubaccountProductDeltaTx, SubaccountSummaryState, SubaccountTx, ValidateEngineOrderParams, ValidateEngineOrderResponse, ValidateSignedEngineOrderParams };
219
+ export type { EngineMarketPrice, EngineNlpBalance, EngineNlpLockedBalance, EngineOrder, EnginePriceTickLiquidity, EngineSubaccountOrders, EngineSymbol, EngineSymbolsResponse, GetEngineAllMarketsResponse, GetEngineContractsResponse, GetEngineCountryCodeResponse, GetEngineEstimatedSubaccountSummaryParams, GetEngineHealthGroupsResponse, GetEngineInsuranceResponse, GetEngineIpBlockStatusResponse, GetEngineIsolatedPositionsParams, GetEngineIsolatedPositionsResponse, GetEngineLinkedSignerParams, GetEngineLinkedSignerResponse, GetEngineMarketLiquidityParams, GetEngineMarketLiquidityResponse, GetEngineMarketPriceParams, GetEngineMarketPriceResponse, GetEngineMarketPricesParams, GetEngineMarketPricesResponse, GetEngineMaxBurnNlpAmountParams, GetEngineMaxBurnNlpAmountResponse, GetEngineMaxMintNlpAmountParams, GetEngineMaxMintNlpAmountResponse, GetEngineMaxOrderSizeParams, GetEngineMaxOrderSizeResponse, GetEngineMaxWithdrawableParams, GetEngineMaxWithdrawableResponse, GetEngineNlpLockedBalancesParams, GetEngineNlpLockedBalancesResponse, GetEngineNlpPoolInfoResponse, GetEngineNoncesParams, GetEngineNoncesResponse, GetEngineOrderParams, GetEngineOrderResponse, GetEngineSubaccountFeeRatesParams, GetEngineSubaccountFeeRatesResponse, GetEngineSubaccountOrdersParams, GetEngineSubaccountOrdersResponse, GetEngineSubaccountProductOrdersParams, GetEngineSubaccountProductOrdersResponse, GetEngineSubaccountSummaryParams, GetEngineSubaccountSummaryResponse, GetEngineSymbolsParams, GetEngineTimeResponse, NlpPool, SubaccountIsolatedPosition, SubaccountOrderFeeRates, SubaccountProductDeltaTx, SubaccountSummaryState, SubaccountTx, ValidateEngineOrderParams, ValidateEngineOrderResponse, ValidateSignedEngineOrderParams };
@@ -1,5 +1,5 @@
1
1
  export { EngineBurnNlpParams, EngineCancelAndPlaceParams, EngineCancelOrdersParams, EngineCancelProductOrdersParams, EngineExecuteRequestParamsByType, EngineLinkSignerParams, EngineLiquidateSubaccountParams, EngineMintNlpParams, EngineOrderParams, EnginePlaceOrderParams, EnginePlaceOrderResult, EnginePlaceOrdersParams, EngineTransferQuoteParams, EngineWithdrawCollateralParams, SignatureParams, WithBaseEngineExecuteParams, WithSignature } from './clientExecuteTypes.cjs';
2
- export { EngineMarketPrice, EngineNlpBalance, EngineNlpLockedBalance, EngineOrder, EnginePriceTickLiquidity, EngineSubaccountOrders, EngineSymbol, EngineSymbolsResponse, GetEngineAllMarketsResponse, GetEngineContractsResponse, GetEngineEstimatedSubaccountSummaryParams, GetEngineHealthGroupsResponse, GetEngineInsuranceResponse, GetEngineIpBlockStatusResponse, GetEngineIsolatedPositionsParams, GetEngineIsolatedPositionsResponse, GetEngineLinkedSignerParams, GetEngineLinkedSignerResponse, GetEngineMarketLiquidityParams, GetEngineMarketLiquidityResponse, GetEngineMarketPriceParams, GetEngineMarketPriceResponse, GetEngineMarketPricesParams, GetEngineMarketPricesResponse, GetEngineMaxBurnNlpAmountParams, GetEngineMaxBurnNlpAmountResponse, GetEngineMaxMintNlpAmountParams, GetEngineMaxMintNlpAmountResponse, GetEngineMaxOrderSizeParams, GetEngineMaxOrderSizeResponse, GetEngineMaxWithdrawableParams, GetEngineMaxWithdrawableResponse, GetEngineNlpLockedBalancesParams, GetEngineNlpLockedBalancesResponse, GetEngineNlpPoolInfoResponse, GetEngineNoncesParams, GetEngineNoncesResponse, GetEngineOrderParams, GetEngineOrderResponse, GetEngineSubaccountFeeRatesParams, GetEngineSubaccountFeeRatesResponse, GetEngineSubaccountOrdersParams, GetEngineSubaccountOrdersResponse, GetEngineSubaccountProductOrdersParams, GetEngineSubaccountProductOrdersResponse, GetEngineSubaccountSummaryParams, GetEngineSubaccountSummaryResponse, GetEngineSymbolsParams, GetEngineTimeResponse, NlpPool, SubaccountIsolatedPosition, SubaccountOrderFeeRates, SubaccountProductDeltaTx, SubaccountSummaryState, SubaccountTx, ValidateEngineOrderParams, ValidateEngineOrderResponse, ValidateSignedEngineOrderParams } from './clientQueryTypes.cjs';
2
+ export { EngineMarketPrice, EngineNlpBalance, EngineNlpLockedBalance, EngineOrder, EnginePriceTickLiquidity, EngineSubaccountOrders, EngineSymbol, EngineSymbolsResponse, GetEngineAllMarketsResponse, GetEngineContractsResponse, GetEngineCountryCodeResponse, GetEngineEstimatedSubaccountSummaryParams, GetEngineHealthGroupsResponse, GetEngineInsuranceResponse, GetEngineIpBlockStatusResponse, GetEngineIsolatedPositionsParams, GetEngineIsolatedPositionsResponse, GetEngineLinkedSignerParams, GetEngineLinkedSignerResponse, GetEngineMarketLiquidityParams, GetEngineMarketLiquidityResponse, GetEngineMarketPriceParams, GetEngineMarketPriceResponse, GetEngineMarketPricesParams, GetEngineMarketPricesResponse, GetEngineMaxBurnNlpAmountParams, GetEngineMaxBurnNlpAmountResponse, GetEngineMaxMintNlpAmountParams, GetEngineMaxMintNlpAmountResponse, GetEngineMaxOrderSizeParams, GetEngineMaxOrderSizeResponse, GetEngineMaxWithdrawableParams, GetEngineMaxWithdrawableResponse, GetEngineNlpLockedBalancesParams, GetEngineNlpLockedBalancesResponse, GetEngineNlpPoolInfoResponse, GetEngineNoncesParams, GetEngineNoncesResponse, GetEngineOrderParams, GetEngineOrderResponse, GetEngineSubaccountFeeRatesParams, GetEngineSubaccountFeeRatesResponse, GetEngineSubaccountOrdersParams, GetEngineSubaccountOrdersResponse, GetEngineSubaccountProductOrdersParams, GetEngineSubaccountProductOrdersResponse, GetEngineSubaccountSummaryParams, GetEngineSubaccountSummaryResponse, GetEngineSymbolsParams, GetEngineTimeResponse, NlpPool, SubaccountIsolatedPosition, SubaccountOrderFeeRates, SubaccountProductDeltaTx, SubaccountSummaryState, SubaccountTx, ValidateEngineOrderParams, ValidateEngineOrderResponse, ValidateSignedEngineOrderParams } from './clientQueryTypes.cjs';
3
3
  export { EngineServerFailureError } from './EngineServerFailureError.cjs';
4
4
  export { EngineServerCancelOrdersParams, EngineServerCancelOrdersResponse, EngineServerExecuteFailureResult, EngineServerExecutePlaceOrderPayload, EngineServerExecuteRequestByType, EngineServerExecuteRequestType, EngineServerExecuteResponseDataByType, EngineServerExecuteResult, EngineServerExecuteSuccessResult, EngineServerPlaceOrderParams, EngineServerPlaceOrderResponse, EngineServerPlaceOrdersResponse, EngineServiceCancelAndPlaceParams } from './serverExecuteTypes.cjs';
5
5
  export { EngineServerBookInfo, EngineServerHealthBreakdown, EngineServerNlpBalance, EngineServerNlpLockedBalance, EngineServerOrder, EngineServerPerpBalance, EngineServerPerpBalanceData, EngineServerPerpProduct, EngineServerPerpState, EngineServerProductType, EngineServerRisk, EngineServerSpotBalance, EngineServerSpotBalanceData, EngineServerSpotConfig, EngineServerSpotProduct, EngineServerSpotState } from './serverQueryModelTypes.cjs';
@@ -1,5 +1,5 @@
1
1
  export { EngineBurnNlpParams, EngineCancelAndPlaceParams, EngineCancelOrdersParams, EngineCancelProductOrdersParams, EngineExecuteRequestParamsByType, EngineLinkSignerParams, EngineLiquidateSubaccountParams, EngineMintNlpParams, EngineOrderParams, EnginePlaceOrderParams, EnginePlaceOrderResult, EnginePlaceOrdersParams, EngineTransferQuoteParams, EngineWithdrawCollateralParams, SignatureParams, WithBaseEngineExecuteParams, WithSignature } from './clientExecuteTypes.js';
2
- export { EngineMarketPrice, EngineNlpBalance, EngineNlpLockedBalance, EngineOrder, EnginePriceTickLiquidity, EngineSubaccountOrders, EngineSymbol, EngineSymbolsResponse, GetEngineAllMarketsResponse, GetEngineContractsResponse, GetEngineEstimatedSubaccountSummaryParams, GetEngineHealthGroupsResponse, GetEngineInsuranceResponse, GetEngineIpBlockStatusResponse, GetEngineIsolatedPositionsParams, GetEngineIsolatedPositionsResponse, GetEngineLinkedSignerParams, GetEngineLinkedSignerResponse, GetEngineMarketLiquidityParams, GetEngineMarketLiquidityResponse, GetEngineMarketPriceParams, GetEngineMarketPriceResponse, GetEngineMarketPricesParams, GetEngineMarketPricesResponse, GetEngineMaxBurnNlpAmountParams, GetEngineMaxBurnNlpAmountResponse, GetEngineMaxMintNlpAmountParams, GetEngineMaxMintNlpAmountResponse, GetEngineMaxOrderSizeParams, GetEngineMaxOrderSizeResponse, GetEngineMaxWithdrawableParams, GetEngineMaxWithdrawableResponse, GetEngineNlpLockedBalancesParams, GetEngineNlpLockedBalancesResponse, GetEngineNlpPoolInfoResponse, GetEngineNoncesParams, GetEngineNoncesResponse, GetEngineOrderParams, GetEngineOrderResponse, GetEngineSubaccountFeeRatesParams, GetEngineSubaccountFeeRatesResponse, GetEngineSubaccountOrdersParams, GetEngineSubaccountOrdersResponse, GetEngineSubaccountProductOrdersParams, GetEngineSubaccountProductOrdersResponse, GetEngineSubaccountSummaryParams, GetEngineSubaccountSummaryResponse, GetEngineSymbolsParams, GetEngineTimeResponse, NlpPool, SubaccountIsolatedPosition, SubaccountOrderFeeRates, SubaccountProductDeltaTx, SubaccountSummaryState, SubaccountTx, ValidateEngineOrderParams, ValidateEngineOrderResponse, ValidateSignedEngineOrderParams } from './clientQueryTypes.js';
2
+ export { EngineMarketPrice, EngineNlpBalance, EngineNlpLockedBalance, EngineOrder, EnginePriceTickLiquidity, EngineSubaccountOrders, EngineSymbol, EngineSymbolsResponse, GetEngineAllMarketsResponse, GetEngineContractsResponse, GetEngineCountryCodeResponse, GetEngineEstimatedSubaccountSummaryParams, GetEngineHealthGroupsResponse, GetEngineInsuranceResponse, GetEngineIpBlockStatusResponse, GetEngineIsolatedPositionsParams, GetEngineIsolatedPositionsResponse, GetEngineLinkedSignerParams, GetEngineLinkedSignerResponse, GetEngineMarketLiquidityParams, GetEngineMarketLiquidityResponse, GetEngineMarketPriceParams, GetEngineMarketPriceResponse, GetEngineMarketPricesParams, GetEngineMarketPricesResponse, GetEngineMaxBurnNlpAmountParams, GetEngineMaxBurnNlpAmountResponse, GetEngineMaxMintNlpAmountParams, GetEngineMaxMintNlpAmountResponse, GetEngineMaxOrderSizeParams, GetEngineMaxOrderSizeResponse, GetEngineMaxWithdrawableParams, GetEngineMaxWithdrawableResponse, GetEngineNlpLockedBalancesParams, GetEngineNlpLockedBalancesResponse, GetEngineNlpPoolInfoResponse, GetEngineNoncesParams, GetEngineNoncesResponse, GetEngineOrderParams, GetEngineOrderResponse, GetEngineSubaccountFeeRatesParams, GetEngineSubaccountFeeRatesResponse, GetEngineSubaccountOrdersParams, GetEngineSubaccountOrdersResponse, GetEngineSubaccountProductOrdersParams, GetEngineSubaccountProductOrdersResponse, GetEngineSubaccountSummaryParams, GetEngineSubaccountSummaryResponse, GetEngineSymbolsParams, GetEngineTimeResponse, NlpPool, SubaccountIsolatedPosition, SubaccountOrderFeeRates, SubaccountProductDeltaTx, SubaccountSummaryState, SubaccountTx, ValidateEngineOrderParams, ValidateEngineOrderResponse, ValidateSignedEngineOrderParams } from './clientQueryTypes.js';
3
3
  export { EngineServerFailureError } from './EngineServerFailureError.js';
4
4
  export { EngineServerCancelOrdersParams, EngineServerCancelOrdersResponse, EngineServerExecuteFailureResult, EngineServerExecutePlaceOrderPayload, EngineServerExecuteRequestByType, EngineServerExecuteRequestType, EngineServerExecuteResponseDataByType, EngineServerExecuteResult, EngineServerExecuteSuccessResult, EngineServerPlaceOrderParams, EngineServerPlaceOrderResponse, EngineServerPlaceOrdersResponse, EngineServiceCancelAndPlaceParams } from './serverExecuteTypes.js';
5
5
  export { EngineServerBookInfo, EngineServerHealthBreakdown, EngineServerNlpBalance, EngineServerNlpLockedBalance, EngineServerOrder, EngineServerPerpBalance, EngineServerPerpBalanceData, EngineServerPerpProduct, EngineServerPerpState, EngineServerProductType, EngineServerRisk, EngineServerSpotBalance, EngineServerSpotBalanceData, EngineServerSpotConfig, EngineServerSpotProduct, EngineServerSpotState } from './serverQueryModelTypes.js';
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/types/serverExecuteTypes.ts"],"sourcesContent":["import {\n EIP712BurnNlpValues,\n EIP712LinkSignerValues,\n EIP712LiquidateSubaccountValues,\n EIP712MintNlpValues,\n EIP712OrderCancellationValues,\n EIP712OrderParams,\n EIP712OrderValues,\n EIP712ProductOrdersCancellationValues,\n EIP712TransferQuoteValues,\n EIP712WithdrawCollateralValues,\n SignedTx,\n} from '@nadohq/shared';\nimport { EngineServerOrderResponse } from './serverQueryTypes';\n\nexport interface EngineServerPlaceOrderResponse {\n digest: string;\n error: string | null;\n}\n\nexport type EngineServerPlaceOrdersResponse = EngineServerPlaceOrderResponse[];\n\nexport interface EngineServerCancelOrdersResponse {\n cancelled_orders: EngineServerOrderResponse[];\n}\n\nexport interface EngineServerExecuteResponseDataByType {\n burn_nlp: null;\n cancel_and_place: EngineServerPlaceOrderResponse;\n cancel_orders: EngineServerCancelOrdersResponse;\n cancel_product_orders: EngineServerCancelOrdersResponse;\n link_signer: null;\n liquidate_subaccount: null;\n mint_nlp: null;\n place_order: EngineServerPlaceOrderResponse;\n place_orders: EngineServerPlaceOrdersResponse;\n transfer_quote: null;\n withdraw_collateral: null;\n}\n\nexport interface EngineServerExecuteSuccessResult<\n T extends EngineServerExecuteRequestType = EngineServerExecuteRequestType,\n> {\n status: 'success';\n data: EngineServerExecuteResponseDataByType[T];\n signature: string;\n request_type: EngineServerExecuteResultRequestType;\n // NOTE: `id` is excluded from the response to avoid parsing issues.\n // type of `id` on the backend is `u64` which can overflow until we introduce proper parsing on the SDK.\n}\n\nexport interface EngineServerExecuteFailureResult {\n status: 'failure';\n signature: string;\n error: string;\n error_code: number;\n request_type: EngineServerExecuteResultRequestType;\n}\n\nexport type EngineServerExecuteResult<\n T extends EngineServerExecuteRequestType = EngineServerExecuteRequestType,\n> = EngineServerExecuteSuccessResult<T> | EngineServerExecuteFailureResult;\n\ntype EngineServerExecuteResultRequestType = {\n [K in keyof EngineServerExecuteRequestByType]: `execute_${K}`;\n}[keyof EngineServerExecuteRequestByType];\n\nexport interface EngineServerPlaceOrderParams {\n id: number | null;\n product_id: number;\n order: EIP712OrderValues;\n // Bytes\n signature: string;\n // Engine defaults this to true\n spot_leverage: boolean | null;\n // For isolated orders, this specifies whether margin can be borrowed (i.e. whether the cross account can have a negative USDT balance)\n borrow_margin: boolean | null;\n}\n\nexport type EngineServerCancelOrdersParams = SignedTx<\n Omit<EIP712OrderCancellationValues, 'productIds'> & {\n // number[] is technically assignable to \"Bytes\", so we need to override the ByteFieldsToHex result here\n productIds: number[];\n }\n>;\n\nexport type EngineServiceCancelAndPlaceParams = Omit<\n EngineServerCancelOrdersParams,\n 'tx' | 'signature'\n> & {\n cancel_tx: EngineServerCancelOrdersParams['tx'];\n cancel_signature: EngineServerCancelOrdersParams['signature'];\n place_order: EngineServerPlaceOrderParams;\n};\n\ntype WithSpotLeverage<T> = T & {\n spot_leverage: boolean | null;\n};\n\nexport interface EngineServerExecuteRequestByType {\n burn_nlp: SignedTx<EIP712BurnNlpValues>;\n cancel_and_place: EngineServiceCancelAndPlaceParams;\n cancel_orders: EngineServerCancelOrdersParams;\n cancel_product_orders: SignedTx<\n Omit<EIP712ProductOrdersCancellationValues, 'productIds'> & {\n // number[] is technically assignable to \"Bytes\", so we need to override the ByteFieldsToHex result here\n productIds: number[];\n }\n >;\n link_signer: SignedTx<EIP712LinkSignerValues>;\n liquidate_subaccount: SignedTx<EIP712LiquidateSubaccountValues>;\n mint_nlp: WithSpotLeverage<SignedTx<EIP712MintNlpValues>>;\n place_order: EngineServerPlaceOrderParams;\n place_orders: {\n orders: EngineServerPlaceOrderParams[];\n /**\n * If `true`, aborts the batch after the first failed order; if `false`, remaining orders continue to execute.\n * If `null`, the default value is `false`.\n */\n stop_on_failure: boolean | null;\n };\n transfer_quote: SignedTx<EIP712TransferQuoteValues>;\n withdraw_collateral: WithSpotLeverage<\n SignedTx<EIP712WithdrawCollateralValues>\n >;\n}\n\nexport type EngineServerExecuteRequestType =\n keyof EngineServerExecuteRequestByType;\n\nexport interface EngineServerExecutePlaceOrderPayload {\n payload: EngineServerExecuteRequestByType['place_order'];\n orderParams: EIP712OrderParams;\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAAA;AAAA;","names":[]}
1
+ {"version":3,"sources":["../../src/types/serverExecuteTypes.ts"],"sourcesContent":["import {\n EIP712BurnNlpValues,\n EIP712LinkSignerValues,\n EIP712LiquidateSubaccountValues,\n EIP712MintNlpValues,\n EIP712OrderCancellationValues,\n EIP712OrderParams,\n EIP712OrderValues,\n EIP712ProductOrdersCancellationValues,\n EIP712TransferQuoteValues,\n EIP712WithdrawCollateralValues,\n SignedTx,\n} from '@nadohq/shared';\nimport { EngineServerOrderResponse } from './serverQueryTypes';\n\nexport interface EngineServerPlaceOrderResponse {\n digest: string;\n error: string | null;\n}\n\nexport type EngineServerPlaceOrdersResponse = EngineServerPlaceOrderResponse[];\n\nexport interface EngineServerCancelOrdersResponse {\n cancelled_orders: EngineServerOrderResponse[];\n}\n\nexport interface EngineServerExecuteResponseDataByType {\n burn_nlp: null;\n cancel_and_place: EngineServerPlaceOrderResponse;\n cancel_orders: EngineServerCancelOrdersResponse;\n cancel_product_orders: EngineServerCancelOrdersResponse;\n link_signer: null;\n liquidate_subaccount: null;\n mint_nlp: null;\n place_order: EngineServerPlaceOrderResponse;\n place_orders: EngineServerPlaceOrdersResponse;\n transfer_quote: null;\n withdraw_collateral: null;\n}\n\nexport interface EngineServerExecuteSuccessResult<\n T extends EngineServerExecuteRequestType = EngineServerExecuteRequestType,\n> {\n status: 'success';\n data: EngineServerExecuteResponseDataByType[T];\n signature: string;\n request_type: EngineServerExecuteResultRequestType;\n // NOTE: `id` is excluded from the response to avoid parsing issues.\n // type of `id` on the backend is `u64` which can overflow until we introduce proper parsing on the SDK.\n}\n\nexport interface EngineServerExecuteFailureResult {\n status: 'failure';\n signature: string;\n error: string;\n error_code: number;\n request_type: EngineServerExecuteResultRequestType;\n}\n\nexport type EngineServerExecuteResult<\n T extends EngineServerExecuteRequestType = EngineServerExecuteRequestType,\n> = EngineServerExecuteSuccessResult<T> | EngineServerExecuteFailureResult;\n\ntype EngineServerExecuteResultRequestType = {\n [K in keyof EngineServerExecuteRequestByType]: `execute_${K}`;\n}[keyof EngineServerExecuteRequestByType];\n\nexport interface EngineServerPlaceOrderParams {\n id: number | null;\n product_id: number;\n order: EIP712OrderValues;\n // Bytes\n signature: string;\n // Engine defaults this to true\n spot_leverage: boolean | null;\n // For isolated orders, this specifies whether margin can be borrowed (i.e. whether the cross account can have a negative USDT balance)\n borrow_margin: boolean | null;\n}\n\nexport type EngineServerCancelOrdersParams = SignedTx<\n Omit<EIP712OrderCancellationValues, 'productIds'> & {\n // number[] is technically assignable to \"Bytes\", so we need to override the ByteFieldsToHex result here\n productIds: number[];\n }\n> & {\n required_unfilled_amount?: string;\n};\n\nexport type EngineServiceCancelAndPlaceParams = Omit<\n EngineServerCancelOrdersParams,\n 'tx' | 'signature'\n> & {\n cancel_tx: EngineServerCancelOrdersParams['tx'];\n cancel_signature: EngineServerCancelOrdersParams['signature'];\n place_order: EngineServerPlaceOrderParams;\n place_requires_unfilled?: boolean;\n};\n\ntype WithSpotLeverage<T> = T & {\n spot_leverage: boolean | null;\n};\n\nexport interface EngineServerExecuteRequestByType {\n burn_nlp: SignedTx<EIP712BurnNlpValues>;\n cancel_and_place: EngineServiceCancelAndPlaceParams;\n cancel_orders: EngineServerCancelOrdersParams;\n cancel_product_orders: SignedTx<\n Omit<EIP712ProductOrdersCancellationValues, 'productIds'> & {\n // number[] is technically assignable to \"Bytes\", so we need to override the ByteFieldsToHex result here\n productIds: number[];\n }\n >;\n link_signer: SignedTx<EIP712LinkSignerValues>;\n liquidate_subaccount: SignedTx<EIP712LiquidateSubaccountValues>;\n mint_nlp: WithSpotLeverage<SignedTx<EIP712MintNlpValues>>;\n place_order: EngineServerPlaceOrderParams;\n place_orders: {\n orders: EngineServerPlaceOrderParams[];\n /**\n * If `true`, aborts the batch after the first failed order; if `false`, remaining orders continue to execute.\n * If `null`, the default value is `false`.\n */\n stop_on_failure: boolean | null;\n };\n transfer_quote: SignedTx<EIP712TransferQuoteValues>;\n withdraw_collateral: WithSpotLeverage<\n SignedTx<EIP712WithdrawCollateralValues>\n >;\n}\n\nexport type EngineServerExecuteRequestType =\n keyof EngineServerExecuteRequestByType;\n\nexport interface EngineServerExecutePlaceOrderPayload {\n payload: EngineServerExecuteRequestByType['place_order'];\n orderParams: EIP712OrderParams;\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAAA;AAAA;","names":[]}
@@ -50,11 +50,14 @@ interface EngineServerPlaceOrderParams {
50
50
  }
51
51
  type EngineServerCancelOrdersParams = SignedTx<Omit<EIP712OrderCancellationValues, 'productIds'> & {
52
52
  productIds: number[];
53
- }>;
53
+ }> & {
54
+ required_unfilled_amount?: string;
55
+ };
54
56
  type EngineServiceCancelAndPlaceParams = Omit<EngineServerCancelOrdersParams, 'tx' | 'signature'> & {
55
57
  cancel_tx: EngineServerCancelOrdersParams['tx'];
56
58
  cancel_signature: EngineServerCancelOrdersParams['signature'];
57
59
  place_order: EngineServerPlaceOrderParams;
60
+ place_requires_unfilled?: boolean;
58
61
  };
59
62
  type WithSpotLeverage<T> = T & {
60
63
  spot_leverage: boolean | null;
@@ -50,11 +50,14 @@ interface EngineServerPlaceOrderParams {
50
50
  }
51
51
  type EngineServerCancelOrdersParams = SignedTx<Omit<EIP712OrderCancellationValues, 'productIds'> & {
52
52
  productIds: number[];
53
- }>;
53
+ }> & {
54
+ required_unfilled_amount?: string;
55
+ };
54
56
  type EngineServiceCancelAndPlaceParams = Omit<EngineServerCancelOrdersParams, 'tx' | 'signature'> & {
55
57
  cancel_tx: EngineServerCancelOrdersParams['tx'];
56
58
  cancel_signature: EngineServerCancelOrdersParams['signature'];
57
59
  place_order: EngineServerPlaceOrderParams;
60
+ place_requires_unfilled?: boolean;
58
61
  };
59
62
  type WithSpotLeverage<T> = T & {
60
63
  spot_leverage: boolean | null;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nadohq/engine-client",
3
- "version": "0.12.0",
3
+ "version": "0.14.0",
4
4
  "type": "module",
5
5
  "sideEffects": false,
6
6
  "description": "HTTP client for the Nado off-chain matching engine",
@@ -41,7 +41,7 @@
41
41
  "module": "./dist/index.js",
42
42
  "types": "./dist/index.d.ts",
43
43
  "dependencies": {
44
- "@nadohq/shared": "^0.12.0",
44
+ "@nadohq/shared": "^0.14.0",
45
45
  "axios": "1.14.0",
46
46
  "ts-mixer": "6.0.4"
47
47
  },
@@ -53,5 +53,5 @@
53
53
  "bignumber.js": "10.0.2",
54
54
  "viem": "2.45.3"
55
55
  },
56
- "gitHead": "bad9b58d3e5bde93b62838b5cb75dad79cefbc78"
56
+ "gitHead": "162e859a10cd0b9e4a14e435fec184f202746cf3"
57
57
  }
@@ -4,6 +4,7 @@ import {
4
4
  getOrderNonce,
5
5
  SignableRequestType,
6
6
  SignableRequestTypeToParams,
7
+ toIntegerString,
7
8
  } from '@nadohq/shared';
8
9
  import { EngineBaseClient } from './EngineBaseClient';
9
10
  import {
@@ -187,6 +188,9 @@ export class EngineExecuteBuilder {
187
188
  return {
188
189
  tx,
189
190
  signature: clientParams.signature,
191
+ required_unfilled_amount: clientParams.requiredUnfilledAmount
192
+ ? toIntegerString(clientParams.requiredUnfilledAmount)
193
+ : undefined,
190
194
  };
191
195
  }
192
196
 
@@ -1,3 +1,4 @@
1
+ import { toIntegerString } from '@nadohq/shared';
1
2
  import { EngineBaseClient, EngineClientOpts } from './EngineBaseClient';
2
3
  import { EngineExecuteBuilder } from './EngineExecuteBuilder';
3
4
  import {
@@ -70,6 +71,10 @@ export class EngineExecuteClient extends EngineBaseClient {
70
71
  cancel_tx: cancelOrdersPayload.tx,
71
72
  cancel_signature: cancelOrdersPayload.signature,
72
73
  place_order: placeOrderPayload.payload,
74
+ required_unfilled_amount: params.requiredUnfilledAmount
75
+ ? toIntegerString(params.requiredUnfilledAmount)
76
+ : undefined,
77
+ place_requires_unfilled: params.placeRequiresUnfilled,
73
78
  });
74
79
  }
75
80
 
@@ -1,10 +1,13 @@
1
1
  import { EngineBaseClient } from './EngineBaseClient';
2
2
  import {
3
3
  EngineServerIpBlockResponse,
4
+ GetEngineCountryCodeResponse,
4
5
  GetEngineIpBlockStatusResponse,
5
6
  GetEngineTimeResponse,
6
7
  } from './types';
7
8
 
9
+ const COUNTRY_HEADER = 'x-nado-country';
10
+
8
11
  /**
9
12
  * Queries that talk directly to web, _not_ the engine. Placing here in the `engine-client` as we don't have enough
10
13
  * use cases to justify a separate package
@@ -16,7 +19,7 @@ export class EngineWebClient extends EngineBaseClient {
16
19
  async getIpBlockStatus(): Promise<GetEngineIpBlockStatusResponse> {
17
20
  return (
18
21
  this.axiosInstance
19
- // Use the /time endpoint and listen to 403 responses
22
+ // Use the /ip endpoint and listen to 403 responses
20
23
  .get(`${this.opts.url}/ip`, {
21
24
  // IP checks go through Cloudflare, which uses allow-origin as *, so withCredentials needs to be false
22
25
  withCredentials: false,
@@ -36,6 +39,23 @@ export class EngineWebClient extends EngineBaseClient {
36
39
  );
37
40
  }
38
41
 
42
+ /**
43
+ * Retrieves the caller's country code as detected by the gateway, sourced
44
+ * from the `x-nado-country` response header on `/ip`. Returns `null` when
45
+ * the gateway does not provide it (e.g. local environments).
46
+ *
47
+ * Useful for region-based UI gating such as geoblocking trading competitions.
48
+ */
49
+ async getCountryCode(): Promise<GetEngineCountryCodeResponse> {
50
+ const res = await this.axiosInstance.get(`${this.opts.url}/ip`, {
51
+ // IP checks go through Cloudflare, which uses allow-origin as *, so withCredentials needs to be false
52
+ withCredentials: false,
53
+ });
54
+
55
+ const rawCountry = res.headers?.[COUNTRY_HEADER] as string | undefined;
56
+ return rawCountry ?? null;
57
+ }
58
+
39
59
  /**
40
60
  * Determines whether a client needs to complete the cloudflare JS challenge to interact with the API
41
61
  *
@@ -9,6 +9,7 @@ import {
9
9
  EIP712TransferQuoteParams,
10
10
  EIP712WithdrawCollateralParams,
11
11
  } from '@nadohq/shared';
12
+ import BigNumber from 'bignumber.js';
12
13
  import { EngineServerExecuteSuccessResult } from './serverExecuteTypes';
13
14
 
14
15
  /**
@@ -61,12 +62,29 @@ export type EngineWithdrawCollateralParams = WithBaseEngineExecuteParams<
61
62
  >;
62
63
 
63
64
  export type EngineCancelOrdersParams =
64
- WithBaseEngineExecuteParams<EIP712CancelOrdersParams>;
65
+ WithBaseEngineExecuteParams<EIP712CancelOrdersParams> & {
66
+ /**
67
+ * The current unfilled amount of the order. If provided, the cancel will fail if the
68
+ * order's unfilled amount does not match this value. Used to prevent race conditions
69
+ * where a fill occurs at the same time as a cancel.
70
+ */
71
+ requiredUnfilledAmount?: BigNumber;
72
+ };
65
73
 
66
- export type EngineCancelAndPlaceParams = {
74
+ export interface EngineCancelAndPlaceParams {
67
75
  cancelOrders: EngineCancelOrdersParams;
68
76
  placeOrder: EnginePlaceOrderParams;
69
- };
77
+ /**
78
+ * The current unfilled amount of the order being cancelled. If provided, the cancel will
79
+ * fail if the order's unfilled amount does not match this value.
80
+ */
81
+ requiredUnfilledAmount?: BigNumber;
82
+ /**
83
+ * If `true`, the cancel_and_place operation will fail if the order being cancelled has been
84
+ * partially filled.
85
+ */
86
+ placeRequiresUnfilled?: boolean;
87
+ }
70
88
 
71
89
  export type EngineCancelProductOrdersParams =
72
90
  WithBaseEngineExecuteParams<EIP712CancelProductOrdersParams>;
@@ -256,6 +256,14 @@ export type GetEngineInsuranceResponse = BigNumber;
256
256
  */
257
257
  export type GetEngineIpBlockStatusResponse = 'query_only' | 'blocked' | null;
258
258
 
259
+ /**
260
+ * ISO 3166-1 alpha-2 country code detected by the gateway (e.g. `'US'`, `'NO'`),
261
+ * or `null` if the gateway did not provide one (e.g. local environments).
262
+ *
263
+ * Suitable for region-based UI gating such as geoblocking trading competitions.
264
+ */
265
+ export type GetEngineCountryCodeResponse = string | null;
266
+
259
267
  export interface GetEngineMaxMintNlpAmountParams extends Subaccount {
260
268
  // If not given, engine defaults to true (leverage/borrow enabled)
261
269
  spotLeverage?: boolean;
@@ -82,7 +82,9 @@ export type EngineServerCancelOrdersParams = SignedTx<
82
82
  // number[] is technically assignable to "Bytes", so we need to override the ByteFieldsToHex result here
83
83
  productIds: number[];
84
84
  }
85
- >;
85
+ > & {
86
+ required_unfilled_amount?: string;
87
+ };
86
88
 
87
89
  export type EngineServiceCancelAndPlaceParams = Omit<
88
90
  EngineServerCancelOrdersParams,
@@ -91,6 +93,7 @@ export type EngineServiceCancelAndPlaceParams = Omit<
91
93
  cancel_tx: EngineServerCancelOrdersParams['tx'];
92
94
  cancel_signature: EngineServerCancelOrdersParams['signature'];
93
95
  place_order: EngineServerPlaceOrderParams;
96
+ place_requires_unfilled?: boolean;
94
97
  };
95
98
 
96
99
  type WithSpotLeverage<T> = T & {