{"version":3,"sources":["../src/EngineExecuteBuilder.ts"],"sourcesContent":["import {\n  EIP712IsolatedOrderParams,\n  EIP712OrderParams,\n  getOrderNonce,\n  getVertexEIP712Values,\n  SignableRequestType,\n  SignableRequestTypeToParams,\n} from '@vertex-protocol/contracts';\nimport { EngineBaseClient } from './EngineBaseClient';\nimport {\n  EngineExecuteRequestParamsByType,\n  EngineServerExecutePlaceIsolatedOrderPayload,\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 = getVertexEIP712Values('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 = getVertexEIP712Values('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 `mint_lp` execute action.\n   * @param clientParams Client MintLp params.\n   * @returns `mint_lp` payload\n   */\n  async buildMintLpPayload(\n    clientParams: EngineExecuteRequestParamsByType['mint_lp'],\n  ): Promise<EngineServerExecuteRequestByType['mint_lp']> {\n    const nonce = await this.getTxNonceIfNeeded(clientParams);\n    const paramsWithNonce = { ...clientParams, nonce };\n\n    const tx = getVertexEIP712Values('mint_lp', paramsWithNonce);\n    const signature = await this.getSignatureIfNeeded(\n      'mint_lp',\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_lp` execute action.\n   * @param clientParams Client BurnLp params.\n   * @returns `burn_lp` payload\n   */\n  async buildBurnLpPayload(\n    clientParams: EngineExecuteRequestParamsByType['burn_lp'],\n  ): Promise<EngineServerExecuteRequestByType['burn_lp']> {\n    const nonce = await this.getTxNonceIfNeeded(clientParams);\n    const paramsWithNonce = { ...clientParams, nonce };\n\n    const tx = getVertexEIP712Values('burn_lp', paramsWithNonce);\n    const signature = await this.getSignatureIfNeeded(\n      'burn_lp',\n      paramsWithNonce,\n    );\n\n    return {\n      signature,\n      tx,\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\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 = getVertexEIP712Values(\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      },\n      orderParams: clientParams.order,\n    };\n  }\n\n  /**\n   * Builds server payload for the `place_isolated_order` execute action.\n   *\n   * @param clientParams Client PlaceIsolatedOrder params.\n   * @returns `place_isolated_order` payload\n   */\n  async buildIsolatedPlaceOrderPayload(\n    clientParams: EngineExecuteRequestParamsByType['place_isolated_order'],\n  ): Promise<EngineServerExecutePlaceIsolatedOrderPayload> {\n    const nonce = this.getOrderNonceIfNeeded(clientParams);\n    const orderWithNonce = { ...clientParams.order, nonce };\n\n    const signature = await this.getSignatureIfNeeded('place_isolated_order', {\n      // Gets expected type\n      ...clientParams,\n      ...orderWithNonce,\n    });\n\n    return this.buildPlaceIsolatedOrderPayloadSync({\n      ...clientParams,\n      order: orderWithNonce,\n      signature,\n    });\n  }\n\n  /**\n   * Synchronously builds server payload for the `place_isolated_order` execute action.\n   *\n   * @param clientParams Client PlaceIsolatedOrder params.\n   * @returns `place_isolated_order` payload\n   */\n  buildPlaceIsolatedOrderPayloadSync(\n    clientParams: WithSignature<\n      EngineExecuteRequestParamsByType['place_isolated_order'] & {\n        order: EIP712IsolatedOrderParams;\n      }\n    >,\n  ): EngineServerExecutePlaceIsolatedOrderPayload {\n    const isolatedOrderEIP712Values = getVertexEIP712Values(\n      'place_isolated_order',\n      clientParams.order,\n    );\n\n    return {\n      payload: {\n        id: clientParams.id ?? null,\n        product_id: clientParams.productId,\n        isolated_order: isolatedOrderEIP712Values,\n        signature: clientParams.signature,\n        borrow_margin: clientParams.borrowMargin ?? null,\n      },\n      orderParams: clientParams.order,\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 = getVertexEIP712Values('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 = getVertexEIP712Values('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 = getVertexEIP712Values('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 = getVertexEIP712Values('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_vlp` execute action.\n   * @param clientParams Client MintVlp params.\n   * @returns `mint_vlp` payload\n   */\n  async buildMintVlpPayload(\n    clientParams: EngineExecuteRequestParamsByType['mint_vlp'],\n  ): Promise<EngineServerExecuteRequestByType['mint_vlp']> {\n    const nonce = await this.getTxNonceIfNeeded(clientParams);\n    const paramsWithNonce = { ...clientParams, nonce };\n\n    const tx = getVertexEIP712Values('mint_vlp', paramsWithNonce);\n    const signature = await this.getSignatureIfNeeded(\n      'mint_vlp',\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_vlp` execute action.\n   * @param clientParams Client BurnVlp params.\n   * @returns `burn_vlp` payload\n   */\n  async buildBurnVlpPayload(\n    clientParams: EngineExecuteRequestParamsByType['burn_vlp'],\n  ): Promise<EngineServerExecuteRequestByType['burn_vlp']> {\n    const nonce = await this.getTxNonceIfNeeded(clientParams);\n    const paramsWithNonce = { ...clientParams, nonce };\n\n    const tx = getVertexEIP712Values('burn_vlp', paramsWithNonce);\n    const signature = await this.getSignatureIfNeeded(\n      'burn_vlp',\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":[]}