@nadohq/trigger-client 0.1.0-alpha.1 → 0.1.0-alpha.10

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 (64) hide show
  1. package/dist/TriggerClient.cjs +41 -17
  2. package/dist/TriggerClient.cjs.map +1 -1
  3. package/dist/TriggerClient.d.cts +5 -3
  4. package/dist/TriggerClient.d.ts +5 -3
  5. package/dist/TriggerClient.js +39 -10
  6. package/dist/TriggerClient.js.map +1 -1
  7. package/dist/dataMappers.cjs +170 -67
  8. package/dist/dataMappers.cjs.map +1 -1
  9. package/dist/dataMappers.d.cts +22 -8
  10. package/dist/dataMappers.d.ts +22 -8
  11. package/dist/dataMappers.js +169 -65
  12. package/dist/dataMappers.js.map +1 -1
  13. package/dist/endpoints.cjs +2 -2
  14. package/dist/endpoints.cjs.map +1 -1
  15. package/dist/endpoints.d.cts +1 -1
  16. package/dist/endpoints.d.ts +1 -1
  17. package/dist/endpoints.js +2 -2
  18. package/dist/endpoints.js.map +1 -1
  19. package/dist/index.d.cts +6 -5
  20. package/dist/index.d.ts +6 -5
  21. package/dist/types/TriggerServerFailureError.cjs +1 -1
  22. package/dist/types/TriggerServerFailureError.cjs.map +1 -1
  23. package/dist/types/TriggerServerFailureError.d.cts +3 -2
  24. package/dist/types/TriggerServerFailureError.d.ts +3 -2
  25. package/dist/types/TriggerServerFailureError.js +1 -1
  26. package/dist/types/TriggerServerFailureError.js.map +1 -1
  27. package/dist/types/clientModelTypes.cjs +19 -0
  28. package/dist/types/clientModelTypes.cjs.map +1 -0
  29. package/dist/types/clientModelTypes.d.cts +67 -0
  30. package/dist/types/clientModelTypes.d.ts +67 -0
  31. package/dist/types/clientModelTypes.js +1 -0
  32. package/dist/types/clientModelTypes.js.map +1 -0
  33. package/dist/types/clientTypes.cjs.map +1 -1
  34. package/dist/types/clientTypes.d.cts +41 -24
  35. package/dist/types/clientTypes.d.ts +41 -24
  36. package/dist/types/index.cjs +4 -0
  37. package/dist/types/index.cjs.map +1 -1
  38. package/dist/types/index.d.cts +6 -5
  39. package/dist/types/index.d.ts +6 -5
  40. package/dist/types/index.js +2 -0
  41. package/dist/types/index.js.map +1 -1
  42. package/dist/types/serverExecuteTypes.cjs.map +1 -1
  43. package/dist/types/serverExecuteTypes.d.cts +4 -15
  44. package/dist/types/serverExecuteTypes.d.ts +4 -15
  45. package/dist/types/serverModelTypes.cjs +19 -0
  46. package/dist/types/serverModelTypes.cjs.map +1 -0
  47. package/dist/types/serverModelTypes.d.cts +42 -0
  48. package/dist/types/serverModelTypes.d.ts +42 -0
  49. package/dist/types/serverModelTypes.js +1 -0
  50. package/dist/types/serverModelTypes.js.map +1 -0
  51. package/dist/types/serverQueryTypes.cjs.map +1 -1
  52. package/dist/types/serverQueryTypes.d.cts +47 -7
  53. package/dist/types/serverQueryTypes.d.ts +47 -7
  54. package/package.json +4 -5
  55. package/src/TriggerClient.ts +48 -9
  56. package/src/dataMappers.ts +224 -71
  57. package/src/endpoints.ts +2 -2
  58. package/src/types/TriggerServerFailureError.ts +2 -2
  59. package/src/types/clientModelTypes.ts +95 -0
  60. package/src/types/clientTypes.ts +60 -41
  61. package/src/types/index.ts +2 -0
  62. package/src/types/serverExecuteTypes.ts +3 -24
  63. package/src/types/serverModelTypes.ts +55 -0
  64. package/src/types/serverQueryTypes.ts +74 -9
@@ -33,15 +33,18 @@ __export(TriggerClient_exports, {
33
33
  TriggerClient: () => TriggerClient
34
34
  });
35
35
  module.exports = __toCommonJS(TriggerClient_exports);
36
- var import_contracts = require("@nadohq/contracts");
37
- var import_utils = require("@nadohq/utils");
36
+ var import_shared = require("@nadohq/shared");
38
37
  var import_axios = __toESM(require("axios"), 1);
39
38
  var import_dataMappers = require("./dataMappers.cjs");
40
39
  var import_TriggerServerFailureError = require("./types/TriggerServerFailureError.cjs");
41
40
  var TriggerClient = class {
42
41
  constructor(opts) {
43
42
  this.opts = opts;
44
- this.axiosInstance = import_axios.default.create({ withCredentials: true });
43
+ this.axiosInstance = import_axios.default.create({
44
+ withCredentials: true,
45
+ // We have custom logic to validate response status and create an appropriate error
46
+ validateStatus: () => true
47
+ });
45
48
  }
46
49
  /**
47
50
  * Sets the linked signer for requests
@@ -61,7 +64,8 @@ var TriggerClient = class {
61
64
  price: params.order.price,
62
65
  subaccountName: params.order.subaccountName,
63
66
  subaccountOwner: params.order.subaccountOwner,
64
- nonce: params.nonce ?? (0, import_contracts.getTriggerOrderNonce)()
67
+ nonce: params.nonce ?? (0, import_shared.getOrderNonce)(),
68
+ appendix: params.order.appendix
65
69
  };
66
70
  const signature = await this.sign(
67
71
  "place_order",
@@ -71,24 +75,25 @@ var TriggerClient = class {
71
75
  );
72
76
  const executeParams = {
73
77
  id: params.id ?? null,
74
- order: (0, import_contracts.getNadoEIP712Values)("place_order", orderParams),
78
+ order: (0, import_shared.getNadoEIP712Values)("place_order", orderParams),
75
79
  trigger: (0, import_dataMappers.mapTriggerCriteria)(params.triggerCriteria),
76
80
  signature,
77
81
  product_id: params.productId,
78
82
  spot_leverage: params.spotLeverage ?? null,
79
- digest: params.digest ?? null
83
+ digest: params.digest ?? null,
84
+ borrow_margin: params.borrowMargin ?? null
80
85
  };
81
86
  return this.execute("place_order", executeParams);
82
87
  }
83
88
  async cancelTriggerOrders(params) {
84
89
  const cancelOrdersParams = {
85
90
  digests: params.digests,
86
- nonce: params.nonce ?? (0, import_contracts.getOrderNonce)(),
91
+ nonce: params.nonce ?? (0, import_shared.getOrderNonce)(),
87
92
  productIds: params.productIds,
88
93
  subaccountName: params.subaccountName,
89
94
  subaccountOwner: params.subaccountOwner
90
95
  };
91
- const tx = (0, import_contracts.getNadoEIP712Values)("cancel_orders", cancelOrdersParams);
96
+ const tx = (0, import_shared.getNadoEIP712Values)("cancel_orders", cancelOrdersParams);
92
97
  const executeParams = {
93
98
  signature: await this.sign(
94
99
  "cancel_orders",
@@ -102,12 +107,12 @@ var TriggerClient = class {
102
107
  }
103
108
  async cancelProductOrders(params) {
104
109
  const cancelProductOrdersParams = {
105
- nonce: params.nonce ?? (0, import_contracts.getOrderNonce)(),
110
+ nonce: params.nonce ?? (0, import_shared.getOrderNonce)(),
106
111
  productIds: params.productIds,
107
112
  subaccountName: params.subaccountName,
108
113
  subaccountOwner: params.subaccountOwner
109
114
  };
110
- const tx = (0, import_contracts.getNadoEIP712Values)(
115
+ const tx = (0, import_shared.getNadoEIP712Values)(
111
116
  "cancel_product_orders",
112
117
  cancelProductOrdersParams
113
118
  );
@@ -128,11 +133,11 @@ var TriggerClient = class {
128
133
  async listOrders(params) {
129
134
  const signatureParams = {
130
135
  // Default to 90 seconds from now if no recvTime is provided
131
- recvTime: (0, import_utils.toIntegerString)(params.recvTime ?? (0, import_contracts.getDefaultRecvTime)()),
136
+ recvTime: (0, import_shared.toIntegerString)(params.recvTime ?? (0, import_shared.getDefaultRecvTime)()),
132
137
  subaccountName: params.subaccountName,
133
138
  subaccountOwner: params.subaccountOwner
134
139
  };
135
- const tx = (0, import_contracts.getNadoEIP712Values)("list_trigger_orders", signatureParams);
140
+ const tx = (0, import_shared.getNadoEIP712Values)("list_trigger_orders", signatureParams);
136
141
  const signature = await this.sign(
137
142
  "list_trigger_orders",
138
143
  params.verifyingAddr,
@@ -142,9 +147,11 @@ var TriggerClient = class {
142
147
  const queryParams = {
143
148
  limit: params.limit,
144
149
  max_update_time: params.maxUpdateTimeInclusive,
145
- pending: params.pending,
146
- product_id: params.productId,
150
+ status_types: params.statusTypes,
151
+ product_ids: params.productIds,
147
152
  digests: params.digests,
153
+ trigger_types: params.triggerTypes,
154
+ reduce_only: params.reduceOnly,
148
155
  signature,
149
156
  tx
150
157
  };
@@ -154,15 +161,32 @@ var TriggerClient = class {
154
161
  orders
155
162
  };
156
163
  }
164
+ async listTwapExecutions(params) {
165
+ const queryParams = {
166
+ digest: params.digest
167
+ };
168
+ const baseResponse = await this.query("list_twap_executions", queryParams);
169
+ const executions = baseResponse.executions.map(
170
+ (execution) => ({
171
+ executionId: execution.execution_id,
172
+ scheduledTime: execution.scheduled_time,
173
+ status: (0, import_dataMappers.mapTwapExecutionStatus)(execution.status),
174
+ updatedAt: execution.updated_at
175
+ })
176
+ );
177
+ return {
178
+ executions
179
+ };
180
+ }
157
181
  /*
158
182
  Base Fns
159
183
  */
160
184
  async sign(requestType, verifyingContract, chainId, params) {
161
185
  const walletClient = this.opts.linkedSignerWalletClient ?? this.opts.walletClient;
162
186
  if (walletClient == null) {
163
- throw new import_utils.WalletNotProvidedError();
187
+ throw new import_shared.WalletNotProvidedError();
164
188
  }
165
- return (0, import_contracts.getSignedTransactionRequest)({
189
+ return (0, import_shared.getSignedTransactionRequest)({
166
190
  chainId,
167
191
  requestParams: params,
168
192
  requestType,
@@ -200,7 +224,7 @@ var TriggerClient = class {
200
224
  checkResponseStatus(response) {
201
225
  if (response.status !== 200 || !response.data) {
202
226
  throw Error(
203
- `Unexpected response from server: ${response.status} ${response.statusText}`
227
+ `Unexpected response from server: ${response.status} ${response.statusText}. Data: ${response.data}`
204
228
  );
205
229
  }
206
230
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/TriggerClient.ts"],"sourcesContent":["import {\n EIP712CancelOrdersParams,\n EIP712CancelProductOrdersParams,\n EIP712ListTriggerOrdersParams,\n EIP712OrderParams,\n getDefaultRecvTime,\n getNadoEIP712Values,\n getOrderNonce,\n getSignedTransactionRequest,\n getTriggerOrderNonce,\n SignableRequestType,\n SignableRequestTypeToParams,\n WalletClientWithAccount,\n} from '@nadohq/contracts';\nimport { toIntegerString, WalletNotProvidedError } from '@nadohq/utils';\nimport axios, { AxiosInstance, AxiosResponse } from 'axios';\nimport { mapServerOrderInfo, mapTriggerCriteria } from './dataMappers';\nimport {\n TriggerCancelOrdersParams,\n TriggerCancelProductOrdersParams,\n TriggerListOrdersParams,\n TriggerListOrdersResponse,\n TriggerOrderInfo,\n TriggerPlaceOrderParams,\n TriggerServerExecuteRequestByType,\n TriggerServerExecuteRequestType,\n TriggerServerExecuteResult,\n TriggerServerExecuteSuccessResult,\n TriggerServerQueryRequestByType,\n TriggerServerQueryRequestType,\n TriggerServerQueryResponse,\n TriggerServerQueryResponseByType,\n TriggerServerQuerySuccessResponse,\n} from './types';\nimport { TriggerServerFailureError } from './types/TriggerServerFailureError';\n\nexport interface TriggerClientOpts {\n // Server URL\n url: string;\n // Wallet client for EIP712 signing\n walletClient?: WalletClientWithAccount;\n // Linked signer registered through the engine, if provided, execute requests will use this signer\n linkedSignerWalletClient?: WalletClientWithAccount;\n}\n\n/**\n * Client for all trigger service requests\n */\nexport class TriggerClient {\n readonly opts: TriggerClientOpts;\n readonly axiosInstance: AxiosInstance;\n\n constructor(opts: TriggerClientOpts) {\n this.opts = opts;\n this.axiosInstance = axios.create({ withCredentials: true });\n }\n\n /**\n * Sets the linked signer for requests\n *\n * @param linkedSignerWalletClient The linkedSigner to use for all signatures. Set to null to revert to the chain signer\n */\n public setLinkedSigner(\n linkedSignerWalletClient: WalletClientWithAccount | null,\n ) {\n this.opts.linkedSignerWalletClient = linkedSignerWalletClient ?? undefined;\n }\n\n /*\n Executes\n */\n\n async placeTriggerOrder(params: TriggerPlaceOrderParams) {\n const orderParams: EIP712OrderParams = {\n amount: params.order.amount,\n expiration: params.order.expiration,\n price: params.order.price,\n subaccountName: params.order.subaccountName,\n subaccountOwner: params.order.subaccountOwner,\n nonce: params.nonce ?? getTriggerOrderNonce(),\n };\n const signature = await this.sign(\n 'place_order',\n params.verifyingAddr,\n params.chainId,\n orderParams,\n );\n\n const executeParams: TriggerServerExecuteRequestByType['place_order'] = {\n id: params.id ?? null,\n order: getNadoEIP712Values('place_order', orderParams),\n trigger: mapTriggerCriteria(params.triggerCriteria),\n signature,\n product_id: params.productId,\n spot_leverage: params.spotLeverage ?? null,\n digest: params.digest ?? null,\n };\n\n return this.execute('place_order', executeParams);\n }\n\n async cancelTriggerOrders(params: TriggerCancelOrdersParams) {\n const cancelOrdersParams: EIP712CancelOrdersParams = {\n digests: params.digests,\n nonce: params.nonce ?? getOrderNonce(),\n productIds: params.productIds,\n subaccountName: params.subaccountName,\n subaccountOwner: params.subaccountOwner,\n };\n const tx = getNadoEIP712Values('cancel_orders', cancelOrdersParams);\n\n const executeParams: TriggerServerExecuteRequestByType['cancel_orders'] = {\n signature: await this.sign(\n 'cancel_orders',\n params.verifyingAddr,\n params.chainId,\n cancelOrdersParams,\n ),\n tx,\n };\n\n return this.execute('cancel_orders', executeParams);\n }\n\n async cancelProductOrders(params: TriggerCancelProductOrdersParams) {\n const cancelProductOrdersParams: EIP712CancelProductOrdersParams = {\n nonce: params.nonce ?? getOrderNonce(),\n productIds: params.productIds,\n subaccountName: params.subaccountName,\n subaccountOwner: params.subaccountOwner,\n };\n const tx = getNadoEIP712Values(\n 'cancel_product_orders',\n cancelProductOrdersParams,\n );\n\n const executeParams: TriggerServerExecuteRequestByType['cancel_product_orders'] =\n {\n signature: await this.sign(\n 'cancel_product_orders',\n params.verifyingAddr,\n params.chainId,\n cancelProductOrdersParams,\n ),\n tx,\n };\n\n return this.execute('cancel_product_orders', executeParams);\n }\n\n /*\n Queries\n */\n async listOrders(\n params: TriggerListOrdersParams,\n ): Promise<TriggerListOrdersResponse> {\n const signatureParams: EIP712ListTriggerOrdersParams = {\n // Default to 90 seconds from now if no recvTime is provided\n recvTime: toIntegerString(params.recvTime ?? getDefaultRecvTime()),\n subaccountName: params.subaccountName,\n subaccountOwner: params.subaccountOwner,\n };\n\n const tx = getNadoEIP712Values('list_trigger_orders', signatureParams);\n const signature = await this.sign(\n 'list_trigger_orders',\n params.verifyingAddr,\n params.chainId,\n signatureParams,\n );\n\n const queryParams: TriggerServerQueryRequestByType['list_trigger_orders'] =\n {\n limit: params.limit,\n max_update_time: params.maxUpdateTimeInclusive,\n pending: params.pending,\n product_id: params.productId,\n digests: params.digests,\n signature,\n tx,\n };\n\n const baseResponse = await this.query('list_trigger_orders', queryParams);\n\n const orders: TriggerOrderInfo[] =\n baseResponse.orders.map(mapServerOrderInfo);\n\n return {\n orders,\n };\n }\n\n /*\n Base Fns\n */\n protected async sign<T extends SignableRequestType>(\n requestType: T,\n verifyingContract: string,\n chainId: number,\n params: SignableRequestTypeToParams[T],\n ) {\n // Use the linked signer if provided, otherwise use the default signer provided to the engine\n const walletClient =\n this.opts.linkedSignerWalletClient ?? this.opts.walletClient;\n\n if (walletClient == null) {\n throw new WalletNotProvidedError();\n }\n\n return getSignedTransactionRequest({\n chainId,\n requestParams: params,\n requestType,\n walletClient,\n verifyingContract,\n });\n }\n\n /**\n * POSTs an execute message to the trigger service and returns the successful response. Throws the failure response wrapped\n * in an TriggerServerFailureError on failure.\n *\n * @param requestType\n * @param params\n */\n protected async execute<TRequestType extends TriggerServerExecuteRequestType>(\n requestType: TRequestType,\n params: TriggerServerExecuteRequestByType[TRequestType],\n ): Promise<TriggerServerExecuteSuccessResult<TRequestType>> {\n const reqBody = {\n [requestType]: params,\n };\n const response = await this.axiosInstance.post<\n TriggerServerExecuteResult<TRequestType>\n >(`${this.opts.url}/execute`, reqBody);\n\n this.checkResponseStatus(response);\n this.checkServerStatus(response);\n\n // checkServerStatus catches the failure result and throws the error, so the cast to the success response is acceptable here\n return response.data as TriggerServerExecuteSuccessResult<TRequestType>;\n }\n\n protected async query<TRequestType extends TriggerServerQueryRequestType>(\n requestType: TRequestType,\n params: TriggerServerQueryRequestByType[TRequestType],\n ): Promise<TriggerServerQueryResponseByType[TRequestType]> {\n const reqBody = {\n type: requestType,\n ...params,\n };\n const response = await this.axiosInstance.post<\n TriggerServerQueryResponse<TRequestType>\n >(`${this.opts.url}/query`, reqBody);\n\n this.checkResponseStatus(response);\n this.checkServerStatus(response);\n\n // checkServerStatus throws on failure responses so the cast to the success response is acceptable here\n const successResponse = response as AxiosResponse<\n TriggerServerQuerySuccessResponse<TRequestType>\n >;\n\n return successResponse.data.data;\n }\n\n private checkResponseStatus(response: AxiosResponse) {\n if (response.status !== 200 || !response.data) {\n throw Error(\n `Unexpected response from server: ${response.status} ${response.statusText}`,\n );\n }\n }\n\n private checkServerStatus(\n response: AxiosResponse<\n TriggerServerExecuteResult | TriggerServerQueryResponse\n >,\n ) {\n if (response.data.status !== 'success') {\n throw new TriggerServerFailureError(response.data);\n }\n }\n}\n"],"mappings":"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","names":["axios"]}
1
+ {"version":3,"sources":["../src/TriggerClient.ts"],"sourcesContent":["import {\n EIP712CancelOrdersParams,\n EIP712CancelProductOrdersParams,\n EIP712ListTriggerOrdersParams,\n EIP712OrderParams,\n getDefaultRecvTime,\n getNadoEIP712Values,\n getOrderNonce,\n getSignedTransactionRequest,\n SignableRequestType,\n SignableRequestTypeToParams,\n toIntegerString,\n WalletClientWithAccount,\n WalletNotProvidedError,\n} from '@nadohq/shared';\nimport axios, { AxiosInstance, AxiosResponse } from 'axios';\nimport {\n mapServerOrderInfo,\n mapTriggerCriteria,\n mapTwapExecutionStatus,\n} from './dataMappers';\nimport {\n TriggerCancelOrdersParams,\n TriggerCancelProductOrdersParams,\n TriggerListOrdersParams,\n TriggerListOrdersResponse,\n TriggerListTwapExecutionsParams,\n TriggerListTwapExecutionsResponse,\n TriggerOrderInfo,\n TriggerPlaceOrderParams,\n TriggerServerExecuteRequestByType,\n TriggerServerExecuteRequestType,\n TriggerServerExecuteResult,\n TriggerServerExecuteSuccessResult,\n TriggerServerQueryRequestByType,\n TriggerServerQueryRequestType,\n TriggerServerQueryResponse,\n TriggerServerQueryResponseByType,\n TriggerServerQuerySuccessResponse,\n TwapExecutionInfo,\n} from './types';\nimport { TriggerServerFailureError } from './types/TriggerServerFailureError';\n\nexport interface TriggerClientOpts {\n // Server URL\n url: string;\n // Wallet client for EIP712 signing\n walletClient?: WalletClientWithAccount;\n // Linked signer registered through the engine, if provided, execute requests will use this signer\n linkedSignerWalletClient?: WalletClientWithAccount;\n}\n\n/**\n * Client for all trigger service requests\n */\nexport class TriggerClient {\n readonly opts: TriggerClientOpts;\n readonly axiosInstance: AxiosInstance;\n\n constructor(opts: TriggerClientOpts) {\n this.opts = opts;\n this.axiosInstance = axios.create({\n withCredentials: true,\n // We have custom logic to validate response status and create an appropriate error\n validateStatus: () => true,\n });\n }\n\n /**\n * Sets the linked signer for requests\n *\n * @param linkedSignerWalletClient The linkedSigner to use for all signatures. Set to null to revert to the chain signer\n */\n public setLinkedSigner(\n linkedSignerWalletClient: WalletClientWithAccount | null,\n ) {\n this.opts.linkedSignerWalletClient = linkedSignerWalletClient ?? undefined;\n }\n\n /*\n Executes\n */\n\n async placeTriggerOrder(params: TriggerPlaceOrderParams) {\n const orderParams: EIP712OrderParams = {\n amount: params.order.amount,\n expiration: params.order.expiration,\n price: params.order.price,\n subaccountName: params.order.subaccountName,\n subaccountOwner: params.order.subaccountOwner,\n nonce: params.nonce ?? getOrderNonce(),\n appendix: params.order.appendix,\n };\n const signature = await this.sign(\n 'place_order',\n params.verifyingAddr,\n params.chainId,\n orderParams,\n );\n\n const executeParams: TriggerServerExecuteRequestByType['place_order'] = {\n id: params.id ?? null,\n order: getNadoEIP712Values('place_order', orderParams),\n trigger: mapTriggerCriteria(params.triggerCriteria),\n signature,\n product_id: params.productId,\n spot_leverage: params.spotLeverage ?? null,\n digest: params.digest ?? null,\n borrow_margin: params.borrowMargin ?? null,\n };\n\n return this.execute('place_order', executeParams);\n }\n\n async cancelTriggerOrders(params: TriggerCancelOrdersParams) {\n const cancelOrdersParams: EIP712CancelOrdersParams = {\n digests: params.digests,\n nonce: params.nonce ?? getOrderNonce(),\n productIds: params.productIds,\n subaccountName: params.subaccountName,\n subaccountOwner: params.subaccountOwner,\n };\n const tx = getNadoEIP712Values('cancel_orders', cancelOrdersParams);\n\n const executeParams: TriggerServerExecuteRequestByType['cancel_orders'] = {\n signature: await this.sign(\n 'cancel_orders',\n params.verifyingAddr,\n params.chainId,\n cancelOrdersParams,\n ),\n tx,\n };\n\n return this.execute('cancel_orders', executeParams);\n }\n\n async cancelProductOrders(params: TriggerCancelProductOrdersParams) {\n const cancelProductOrdersParams: EIP712CancelProductOrdersParams = {\n nonce: params.nonce ?? getOrderNonce(),\n productIds: params.productIds,\n subaccountName: params.subaccountName,\n subaccountOwner: params.subaccountOwner,\n };\n const tx = getNadoEIP712Values(\n 'cancel_product_orders',\n cancelProductOrdersParams,\n );\n\n const executeParams: TriggerServerExecuteRequestByType['cancel_product_orders'] =\n {\n signature: await this.sign(\n 'cancel_product_orders',\n params.verifyingAddr,\n params.chainId,\n cancelProductOrdersParams,\n ),\n tx,\n };\n\n return this.execute('cancel_product_orders', executeParams);\n }\n\n /*\n Queries\n */\n async listOrders(\n params: TriggerListOrdersParams,\n ): Promise<TriggerListOrdersResponse> {\n const signatureParams: EIP712ListTriggerOrdersParams = {\n // Default to 90 seconds from now if no recvTime is provided\n recvTime: toIntegerString(params.recvTime ?? getDefaultRecvTime()),\n subaccountName: params.subaccountName,\n subaccountOwner: params.subaccountOwner,\n };\n\n const tx = getNadoEIP712Values('list_trigger_orders', signatureParams);\n const signature = await this.sign(\n 'list_trigger_orders',\n params.verifyingAddr,\n params.chainId,\n signatureParams,\n );\n\n const queryParams: TriggerServerQueryRequestByType['list_trigger_orders'] =\n {\n limit: params.limit,\n max_update_time: params.maxUpdateTimeInclusive,\n status_types: params.statusTypes,\n product_ids: params.productIds,\n digests: params.digests,\n trigger_types: params.triggerTypes,\n reduce_only: params.reduceOnly,\n signature,\n tx,\n };\n\n const baseResponse = await this.query('list_trigger_orders', queryParams);\n\n const orders: TriggerOrderInfo[] =\n baseResponse.orders.map(mapServerOrderInfo);\n\n return {\n orders,\n };\n }\n\n async listTwapExecutions(\n params: TriggerListTwapExecutionsParams,\n ): Promise<TriggerListTwapExecutionsResponse> {\n const queryParams: TriggerServerQueryRequestByType['list_twap_executions'] =\n {\n digest: params.digest,\n };\n\n const baseResponse = await this.query('list_twap_executions', queryParams);\n\n const executions: TwapExecutionInfo[] = baseResponse.executions.map(\n (execution) => ({\n executionId: execution.execution_id,\n scheduledTime: execution.scheduled_time,\n status: mapTwapExecutionStatus(execution.status),\n updatedAt: execution.updated_at,\n }),\n );\n\n return {\n executions,\n };\n }\n\n /*\n Base Fns\n */\n protected async sign<T extends SignableRequestType>(\n requestType: T,\n verifyingContract: string,\n chainId: number,\n params: SignableRequestTypeToParams[T],\n ) {\n // Use the linked signer if provided, otherwise use the default signer provided to the engine\n const walletClient =\n this.opts.linkedSignerWalletClient ?? this.opts.walletClient;\n\n if (walletClient == null) {\n throw new WalletNotProvidedError();\n }\n\n return getSignedTransactionRequest({\n chainId,\n requestParams: params,\n requestType,\n walletClient,\n verifyingContract,\n });\n }\n\n /**\n * POSTs an execute message to the trigger service and returns the successful response. Throws the failure response wrapped\n * in an TriggerServerFailureError on failure.\n *\n * @param requestType\n * @param params\n */\n protected async execute<TRequestType extends TriggerServerExecuteRequestType>(\n requestType: TRequestType,\n params: TriggerServerExecuteRequestByType[TRequestType],\n ): Promise<TriggerServerExecuteSuccessResult<TRequestType>> {\n const reqBody = {\n [requestType]: params,\n };\n const response = await this.axiosInstance.post<\n TriggerServerExecuteResult<TRequestType>\n >(`${this.opts.url}/execute`, reqBody);\n\n this.checkResponseStatus(response);\n this.checkServerStatus(response);\n\n // checkServerStatus catches the failure result and throws the error, so the cast to the success response is acceptable here\n return response.data as TriggerServerExecuteSuccessResult<TRequestType>;\n }\n\n protected async query<TRequestType extends TriggerServerQueryRequestType>(\n requestType: TRequestType,\n params: TriggerServerQueryRequestByType[TRequestType],\n ): Promise<TriggerServerQueryResponseByType[TRequestType]> {\n const reqBody = {\n type: requestType,\n ...params,\n };\n const response = await this.axiosInstance.post<\n TriggerServerQueryResponse<TRequestType>\n >(`${this.opts.url}/query`, reqBody);\n\n this.checkResponseStatus(response);\n this.checkServerStatus(response);\n\n // checkServerStatus throws on failure responses so the cast to the success response is acceptable here\n const successResponse = response as AxiosResponse<\n TriggerServerQuerySuccessResponse<TRequestType>\n >;\n\n return successResponse.data.data;\n }\n\n private checkResponseStatus(response: AxiosResponse) {\n if (response.status !== 200 || !response.data) {\n throw Error(\n `Unexpected response from server: ${response.status} ${response.statusText}. Data: ${response.data}`,\n );\n }\n }\n\n private checkServerStatus(\n response: AxiosResponse<\n TriggerServerExecuteResult | TriggerServerQueryResponse\n >,\n ) {\n if (response.data.status !== 'success') {\n throw new TriggerServerFailureError(response.data);\n }\n }\n}\n"],"mappings":"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","names":["axios"]}
@@ -1,10 +1,11 @@
1
- import { WalletClientWithAccount, SignableRequestType, SignableRequestTypeToParams } from '@nadohq/contracts';
1
+ import { WalletClientWithAccount, SignableRequestType, SignableRequestTypeToParams } from '@nadohq/shared';
2
2
  import { AxiosInstance } from 'axios';
3
- import { TriggerPlaceOrderParams, TriggerCancelOrdersParams, TriggerCancelProductOrdersParams, TriggerListOrdersParams, TriggerListOrdersResponse } from './types/clientTypes.cjs';
3
+ import { TriggerPlaceOrderParams, TriggerCancelOrdersParams, TriggerCancelProductOrdersParams, TriggerListOrdersParams, TriggerListOrdersResponse, TriggerListTwapExecutionsParams, TriggerListTwapExecutionsResponse } from './types/clientTypes.cjs';
4
4
  import { TriggerServerExecuteSuccessResult, TriggerServerExecuteRequestType, TriggerServerExecuteRequestByType } from './types/serverExecuteTypes.cjs';
5
5
  import { TriggerServerQueryRequestType, TriggerServerQueryRequestByType, TriggerServerQueryResponseByType } from './types/serverQueryTypes.cjs';
6
6
  import '@nadohq/engine-client';
7
- import '@nadohq/utils';
7
+ import './types/clientModelTypes.cjs';
8
+ import './types/serverModelTypes.cjs';
8
9
 
9
10
  interface TriggerClientOpts {
10
11
  url: string;
@@ -28,6 +29,7 @@ declare class TriggerClient {
28
29
  cancelTriggerOrders(params: TriggerCancelOrdersParams): Promise<TriggerServerExecuteSuccessResult<"cancel_orders">>;
29
30
  cancelProductOrders(params: TriggerCancelProductOrdersParams): Promise<TriggerServerExecuteSuccessResult<"cancel_product_orders">>;
30
31
  listOrders(params: TriggerListOrdersParams): Promise<TriggerListOrdersResponse>;
32
+ listTwapExecutions(params: TriggerListTwapExecutionsParams): Promise<TriggerListTwapExecutionsResponse>;
31
33
  protected sign<T extends SignableRequestType>(requestType: T, verifyingContract: string, chainId: number, params: SignableRequestTypeToParams[T]): Promise<`0x${string}`>;
32
34
  /**
33
35
  * POSTs an execute message to the trigger service and returns the successful response. Throws the failure response wrapped
@@ -1,10 +1,11 @@
1
- import { WalletClientWithAccount, SignableRequestType, SignableRequestTypeToParams } from '@nadohq/contracts';
1
+ import { WalletClientWithAccount, SignableRequestType, SignableRequestTypeToParams } from '@nadohq/shared';
2
2
  import { AxiosInstance } from 'axios';
3
- import { TriggerPlaceOrderParams, TriggerCancelOrdersParams, TriggerCancelProductOrdersParams, TriggerListOrdersParams, TriggerListOrdersResponse } from './types/clientTypes.js';
3
+ import { TriggerPlaceOrderParams, TriggerCancelOrdersParams, TriggerCancelProductOrdersParams, TriggerListOrdersParams, TriggerListOrdersResponse, TriggerListTwapExecutionsParams, TriggerListTwapExecutionsResponse } from './types/clientTypes.js';
4
4
  import { TriggerServerExecuteSuccessResult, TriggerServerExecuteRequestType, TriggerServerExecuteRequestByType } from './types/serverExecuteTypes.js';
5
5
  import { TriggerServerQueryRequestType, TriggerServerQueryRequestByType, TriggerServerQueryResponseByType } from './types/serverQueryTypes.js';
6
6
  import '@nadohq/engine-client';
7
- import '@nadohq/utils';
7
+ import './types/clientModelTypes.js';
8
+ import './types/serverModelTypes.js';
8
9
 
9
10
  interface TriggerClientOpts {
10
11
  url: string;
@@ -28,6 +29,7 @@ declare class TriggerClient {
28
29
  cancelTriggerOrders(params: TriggerCancelOrdersParams): Promise<TriggerServerExecuteSuccessResult<"cancel_orders">>;
29
30
  cancelProductOrders(params: TriggerCancelProductOrdersParams): Promise<TriggerServerExecuteSuccessResult<"cancel_product_orders">>;
30
31
  listOrders(params: TriggerListOrdersParams): Promise<TriggerListOrdersResponse>;
32
+ listTwapExecutions(params: TriggerListTwapExecutionsParams): Promise<TriggerListTwapExecutionsResponse>;
31
33
  protected sign<T extends SignableRequestType>(requestType: T, verifyingContract: string, chainId: number, params: SignableRequestTypeToParams[T]): Promise<`0x${string}`>;
32
34
  /**
33
35
  * POSTs an execute message to the trigger service and returns the successful response. Throws the failure response wrapped
@@ -4,16 +4,24 @@ import {
4
4
  getNadoEIP712Values,
5
5
  getOrderNonce,
6
6
  getSignedTransactionRequest,
7
- getTriggerOrderNonce
8
- } from "@nadohq/contracts";
9
- import { toIntegerString, WalletNotProvidedError } from "@nadohq/utils";
7
+ toIntegerString,
8
+ WalletNotProvidedError
9
+ } from "@nadohq/shared";
10
10
  import axios from "axios";
11
- import { mapServerOrderInfo, mapTriggerCriteria } from "./dataMappers.js";
11
+ import {
12
+ mapServerOrderInfo,
13
+ mapTriggerCriteria,
14
+ mapTwapExecutionStatus
15
+ } from "./dataMappers.js";
12
16
  import { TriggerServerFailureError } from "./types/TriggerServerFailureError.js";
13
17
  var TriggerClient = class {
14
18
  constructor(opts) {
15
19
  this.opts = opts;
16
- this.axiosInstance = axios.create({ withCredentials: true });
20
+ this.axiosInstance = axios.create({
21
+ withCredentials: true,
22
+ // We have custom logic to validate response status and create an appropriate error
23
+ validateStatus: () => true
24
+ });
17
25
  }
18
26
  /**
19
27
  * Sets the linked signer for requests
@@ -33,7 +41,8 @@ var TriggerClient = class {
33
41
  price: params.order.price,
34
42
  subaccountName: params.order.subaccountName,
35
43
  subaccountOwner: params.order.subaccountOwner,
36
- nonce: params.nonce ?? getTriggerOrderNonce()
44
+ nonce: params.nonce ?? getOrderNonce(),
45
+ appendix: params.order.appendix
37
46
  };
38
47
  const signature = await this.sign(
39
48
  "place_order",
@@ -48,7 +57,8 @@ var TriggerClient = class {
48
57
  signature,
49
58
  product_id: params.productId,
50
59
  spot_leverage: params.spotLeverage ?? null,
51
- digest: params.digest ?? null
60
+ digest: params.digest ?? null,
61
+ borrow_margin: params.borrowMargin ?? null
52
62
  };
53
63
  return this.execute("place_order", executeParams);
54
64
  }
@@ -114,9 +124,11 @@ var TriggerClient = class {
114
124
  const queryParams = {
115
125
  limit: params.limit,
116
126
  max_update_time: params.maxUpdateTimeInclusive,
117
- pending: params.pending,
118
- product_id: params.productId,
127
+ status_types: params.statusTypes,
128
+ product_ids: params.productIds,
119
129
  digests: params.digests,
130
+ trigger_types: params.triggerTypes,
131
+ reduce_only: params.reduceOnly,
120
132
  signature,
121
133
  tx
122
134
  };
@@ -126,6 +138,23 @@ var TriggerClient = class {
126
138
  orders
127
139
  };
128
140
  }
141
+ async listTwapExecutions(params) {
142
+ const queryParams = {
143
+ digest: params.digest
144
+ };
145
+ const baseResponse = await this.query("list_twap_executions", queryParams);
146
+ const executions = baseResponse.executions.map(
147
+ (execution) => ({
148
+ executionId: execution.execution_id,
149
+ scheduledTime: execution.scheduled_time,
150
+ status: mapTwapExecutionStatus(execution.status),
151
+ updatedAt: execution.updated_at
152
+ })
153
+ );
154
+ return {
155
+ executions
156
+ };
157
+ }
129
158
  /*
130
159
  Base Fns
131
160
  */
@@ -172,7 +201,7 @@ var TriggerClient = class {
172
201
  checkResponseStatus(response) {
173
202
  if (response.status !== 200 || !response.data) {
174
203
  throw Error(
175
- `Unexpected response from server: ${response.status} ${response.statusText}`
204
+ `Unexpected response from server: ${response.status} ${response.statusText}. Data: ${response.data}`
176
205
  );
177
206
  }
178
207
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/TriggerClient.ts"],"sourcesContent":["import {\n EIP712CancelOrdersParams,\n EIP712CancelProductOrdersParams,\n EIP712ListTriggerOrdersParams,\n EIP712OrderParams,\n getDefaultRecvTime,\n getNadoEIP712Values,\n getOrderNonce,\n getSignedTransactionRequest,\n getTriggerOrderNonce,\n SignableRequestType,\n SignableRequestTypeToParams,\n WalletClientWithAccount,\n} from '@nadohq/contracts';\nimport { toIntegerString, WalletNotProvidedError } from '@nadohq/utils';\nimport axios, { AxiosInstance, AxiosResponse } from 'axios';\nimport { mapServerOrderInfo, mapTriggerCriteria } from './dataMappers';\nimport {\n TriggerCancelOrdersParams,\n TriggerCancelProductOrdersParams,\n TriggerListOrdersParams,\n TriggerListOrdersResponse,\n TriggerOrderInfo,\n TriggerPlaceOrderParams,\n TriggerServerExecuteRequestByType,\n TriggerServerExecuteRequestType,\n TriggerServerExecuteResult,\n TriggerServerExecuteSuccessResult,\n TriggerServerQueryRequestByType,\n TriggerServerQueryRequestType,\n TriggerServerQueryResponse,\n TriggerServerQueryResponseByType,\n TriggerServerQuerySuccessResponse,\n} from './types';\nimport { TriggerServerFailureError } from './types/TriggerServerFailureError';\n\nexport interface TriggerClientOpts {\n // Server URL\n url: string;\n // Wallet client for EIP712 signing\n walletClient?: WalletClientWithAccount;\n // Linked signer registered through the engine, if provided, execute requests will use this signer\n linkedSignerWalletClient?: WalletClientWithAccount;\n}\n\n/**\n * Client for all trigger service requests\n */\nexport class TriggerClient {\n readonly opts: TriggerClientOpts;\n readonly axiosInstance: AxiosInstance;\n\n constructor(opts: TriggerClientOpts) {\n this.opts = opts;\n this.axiosInstance = axios.create({ withCredentials: true });\n }\n\n /**\n * Sets the linked signer for requests\n *\n * @param linkedSignerWalletClient The linkedSigner to use for all signatures. Set to null to revert to the chain signer\n */\n public setLinkedSigner(\n linkedSignerWalletClient: WalletClientWithAccount | null,\n ) {\n this.opts.linkedSignerWalletClient = linkedSignerWalletClient ?? undefined;\n }\n\n /*\n Executes\n */\n\n async placeTriggerOrder(params: TriggerPlaceOrderParams) {\n const orderParams: EIP712OrderParams = {\n amount: params.order.amount,\n expiration: params.order.expiration,\n price: params.order.price,\n subaccountName: params.order.subaccountName,\n subaccountOwner: params.order.subaccountOwner,\n nonce: params.nonce ?? getTriggerOrderNonce(),\n };\n const signature = await this.sign(\n 'place_order',\n params.verifyingAddr,\n params.chainId,\n orderParams,\n );\n\n const executeParams: TriggerServerExecuteRequestByType['place_order'] = {\n id: params.id ?? null,\n order: getNadoEIP712Values('place_order', orderParams),\n trigger: mapTriggerCriteria(params.triggerCriteria),\n signature,\n product_id: params.productId,\n spot_leverage: params.spotLeverage ?? null,\n digest: params.digest ?? null,\n };\n\n return this.execute('place_order', executeParams);\n }\n\n async cancelTriggerOrders(params: TriggerCancelOrdersParams) {\n const cancelOrdersParams: EIP712CancelOrdersParams = {\n digests: params.digests,\n nonce: params.nonce ?? getOrderNonce(),\n productIds: params.productIds,\n subaccountName: params.subaccountName,\n subaccountOwner: params.subaccountOwner,\n };\n const tx = getNadoEIP712Values('cancel_orders', cancelOrdersParams);\n\n const executeParams: TriggerServerExecuteRequestByType['cancel_orders'] = {\n signature: await this.sign(\n 'cancel_orders',\n params.verifyingAddr,\n params.chainId,\n cancelOrdersParams,\n ),\n tx,\n };\n\n return this.execute('cancel_orders', executeParams);\n }\n\n async cancelProductOrders(params: TriggerCancelProductOrdersParams) {\n const cancelProductOrdersParams: EIP712CancelProductOrdersParams = {\n nonce: params.nonce ?? getOrderNonce(),\n productIds: params.productIds,\n subaccountName: params.subaccountName,\n subaccountOwner: params.subaccountOwner,\n };\n const tx = getNadoEIP712Values(\n 'cancel_product_orders',\n cancelProductOrdersParams,\n );\n\n const executeParams: TriggerServerExecuteRequestByType['cancel_product_orders'] =\n {\n signature: await this.sign(\n 'cancel_product_orders',\n params.verifyingAddr,\n params.chainId,\n cancelProductOrdersParams,\n ),\n tx,\n };\n\n return this.execute('cancel_product_orders', executeParams);\n }\n\n /*\n Queries\n */\n async listOrders(\n params: TriggerListOrdersParams,\n ): Promise<TriggerListOrdersResponse> {\n const signatureParams: EIP712ListTriggerOrdersParams = {\n // Default to 90 seconds from now if no recvTime is provided\n recvTime: toIntegerString(params.recvTime ?? getDefaultRecvTime()),\n subaccountName: params.subaccountName,\n subaccountOwner: params.subaccountOwner,\n };\n\n const tx = getNadoEIP712Values('list_trigger_orders', signatureParams);\n const signature = await this.sign(\n 'list_trigger_orders',\n params.verifyingAddr,\n params.chainId,\n signatureParams,\n );\n\n const queryParams: TriggerServerQueryRequestByType['list_trigger_orders'] =\n {\n limit: params.limit,\n max_update_time: params.maxUpdateTimeInclusive,\n pending: params.pending,\n product_id: params.productId,\n digests: params.digests,\n signature,\n tx,\n };\n\n const baseResponse = await this.query('list_trigger_orders', queryParams);\n\n const orders: TriggerOrderInfo[] =\n baseResponse.orders.map(mapServerOrderInfo);\n\n return {\n orders,\n };\n }\n\n /*\n Base Fns\n */\n protected async sign<T extends SignableRequestType>(\n requestType: T,\n verifyingContract: string,\n chainId: number,\n params: SignableRequestTypeToParams[T],\n ) {\n // Use the linked signer if provided, otherwise use the default signer provided to the engine\n const walletClient =\n this.opts.linkedSignerWalletClient ?? this.opts.walletClient;\n\n if (walletClient == null) {\n throw new WalletNotProvidedError();\n }\n\n return getSignedTransactionRequest({\n chainId,\n requestParams: params,\n requestType,\n walletClient,\n verifyingContract,\n });\n }\n\n /**\n * POSTs an execute message to the trigger service and returns the successful response. Throws the failure response wrapped\n * in an TriggerServerFailureError on failure.\n *\n * @param requestType\n * @param params\n */\n protected async execute<TRequestType extends TriggerServerExecuteRequestType>(\n requestType: TRequestType,\n params: TriggerServerExecuteRequestByType[TRequestType],\n ): Promise<TriggerServerExecuteSuccessResult<TRequestType>> {\n const reqBody = {\n [requestType]: params,\n };\n const response = await this.axiosInstance.post<\n TriggerServerExecuteResult<TRequestType>\n >(`${this.opts.url}/execute`, reqBody);\n\n this.checkResponseStatus(response);\n this.checkServerStatus(response);\n\n // checkServerStatus catches the failure result and throws the error, so the cast to the success response is acceptable here\n return response.data as TriggerServerExecuteSuccessResult<TRequestType>;\n }\n\n protected async query<TRequestType extends TriggerServerQueryRequestType>(\n requestType: TRequestType,\n params: TriggerServerQueryRequestByType[TRequestType],\n ): Promise<TriggerServerQueryResponseByType[TRequestType]> {\n const reqBody = {\n type: requestType,\n ...params,\n };\n const response = await this.axiosInstance.post<\n TriggerServerQueryResponse<TRequestType>\n >(`${this.opts.url}/query`, reqBody);\n\n this.checkResponseStatus(response);\n this.checkServerStatus(response);\n\n // checkServerStatus throws on failure responses so the cast to the success response is acceptable here\n const successResponse = response as AxiosResponse<\n TriggerServerQuerySuccessResponse<TRequestType>\n >;\n\n return successResponse.data.data;\n }\n\n private checkResponseStatus(response: AxiosResponse) {\n if (response.status !== 200 || !response.data) {\n throw Error(\n `Unexpected response from server: ${response.status} ${response.statusText}`,\n );\n }\n }\n\n private checkServerStatus(\n response: AxiosResponse<\n TriggerServerExecuteResult | TriggerServerQueryResponse\n >,\n ) {\n if (response.data.status !== 'success') {\n throw new TriggerServerFailureError(response.data);\n }\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/TriggerClient.ts"],"sourcesContent":["import {\n EIP712CancelOrdersParams,\n EIP712CancelProductOrdersParams,\n EIP712ListTriggerOrdersParams,\n EIP712OrderParams,\n getDefaultRecvTime,\n getNadoEIP712Values,\n getOrderNonce,\n getSignedTransactionRequest,\n SignableRequestType,\n SignableRequestTypeToParams,\n toIntegerString,\n WalletClientWithAccount,\n WalletNotProvidedError,\n} from '@nadohq/shared';\nimport axios, { AxiosInstance, AxiosResponse } from 'axios';\nimport {\n mapServerOrderInfo,\n mapTriggerCriteria,\n mapTwapExecutionStatus,\n} from './dataMappers';\nimport {\n TriggerCancelOrdersParams,\n TriggerCancelProductOrdersParams,\n TriggerListOrdersParams,\n TriggerListOrdersResponse,\n TriggerListTwapExecutionsParams,\n TriggerListTwapExecutionsResponse,\n TriggerOrderInfo,\n TriggerPlaceOrderParams,\n TriggerServerExecuteRequestByType,\n TriggerServerExecuteRequestType,\n TriggerServerExecuteResult,\n TriggerServerExecuteSuccessResult,\n TriggerServerQueryRequestByType,\n TriggerServerQueryRequestType,\n TriggerServerQueryResponse,\n TriggerServerQueryResponseByType,\n TriggerServerQuerySuccessResponse,\n TwapExecutionInfo,\n} from './types';\nimport { TriggerServerFailureError } from './types/TriggerServerFailureError';\n\nexport interface TriggerClientOpts {\n // Server URL\n url: string;\n // Wallet client for EIP712 signing\n walletClient?: WalletClientWithAccount;\n // Linked signer registered through the engine, if provided, execute requests will use this signer\n linkedSignerWalletClient?: WalletClientWithAccount;\n}\n\n/**\n * Client for all trigger service requests\n */\nexport class TriggerClient {\n readonly opts: TriggerClientOpts;\n readonly axiosInstance: AxiosInstance;\n\n constructor(opts: TriggerClientOpts) {\n this.opts = opts;\n this.axiosInstance = axios.create({\n withCredentials: true,\n // We have custom logic to validate response status and create an appropriate error\n validateStatus: () => true,\n });\n }\n\n /**\n * Sets the linked signer for requests\n *\n * @param linkedSignerWalletClient The linkedSigner to use for all signatures. Set to null to revert to the chain signer\n */\n public setLinkedSigner(\n linkedSignerWalletClient: WalletClientWithAccount | null,\n ) {\n this.opts.linkedSignerWalletClient = linkedSignerWalletClient ?? undefined;\n }\n\n /*\n Executes\n */\n\n async placeTriggerOrder(params: TriggerPlaceOrderParams) {\n const orderParams: EIP712OrderParams = {\n amount: params.order.amount,\n expiration: params.order.expiration,\n price: params.order.price,\n subaccountName: params.order.subaccountName,\n subaccountOwner: params.order.subaccountOwner,\n nonce: params.nonce ?? getOrderNonce(),\n appendix: params.order.appendix,\n };\n const signature = await this.sign(\n 'place_order',\n params.verifyingAddr,\n params.chainId,\n orderParams,\n );\n\n const executeParams: TriggerServerExecuteRequestByType['place_order'] = {\n id: params.id ?? null,\n order: getNadoEIP712Values('place_order', orderParams),\n trigger: mapTriggerCriteria(params.triggerCriteria),\n signature,\n product_id: params.productId,\n spot_leverage: params.spotLeverage ?? null,\n digest: params.digest ?? null,\n borrow_margin: params.borrowMargin ?? null,\n };\n\n return this.execute('place_order', executeParams);\n }\n\n async cancelTriggerOrders(params: TriggerCancelOrdersParams) {\n const cancelOrdersParams: EIP712CancelOrdersParams = {\n digests: params.digests,\n nonce: params.nonce ?? getOrderNonce(),\n productIds: params.productIds,\n subaccountName: params.subaccountName,\n subaccountOwner: params.subaccountOwner,\n };\n const tx = getNadoEIP712Values('cancel_orders', cancelOrdersParams);\n\n const executeParams: TriggerServerExecuteRequestByType['cancel_orders'] = {\n signature: await this.sign(\n 'cancel_orders',\n params.verifyingAddr,\n params.chainId,\n cancelOrdersParams,\n ),\n tx,\n };\n\n return this.execute('cancel_orders', executeParams);\n }\n\n async cancelProductOrders(params: TriggerCancelProductOrdersParams) {\n const cancelProductOrdersParams: EIP712CancelProductOrdersParams = {\n nonce: params.nonce ?? getOrderNonce(),\n productIds: params.productIds,\n subaccountName: params.subaccountName,\n subaccountOwner: params.subaccountOwner,\n };\n const tx = getNadoEIP712Values(\n 'cancel_product_orders',\n cancelProductOrdersParams,\n );\n\n const executeParams: TriggerServerExecuteRequestByType['cancel_product_orders'] =\n {\n signature: await this.sign(\n 'cancel_product_orders',\n params.verifyingAddr,\n params.chainId,\n cancelProductOrdersParams,\n ),\n tx,\n };\n\n return this.execute('cancel_product_orders', executeParams);\n }\n\n /*\n Queries\n */\n async listOrders(\n params: TriggerListOrdersParams,\n ): Promise<TriggerListOrdersResponse> {\n const signatureParams: EIP712ListTriggerOrdersParams = {\n // Default to 90 seconds from now if no recvTime is provided\n recvTime: toIntegerString(params.recvTime ?? getDefaultRecvTime()),\n subaccountName: params.subaccountName,\n subaccountOwner: params.subaccountOwner,\n };\n\n const tx = getNadoEIP712Values('list_trigger_orders', signatureParams);\n const signature = await this.sign(\n 'list_trigger_orders',\n params.verifyingAddr,\n params.chainId,\n signatureParams,\n );\n\n const queryParams: TriggerServerQueryRequestByType['list_trigger_orders'] =\n {\n limit: params.limit,\n max_update_time: params.maxUpdateTimeInclusive,\n status_types: params.statusTypes,\n product_ids: params.productIds,\n digests: params.digests,\n trigger_types: params.triggerTypes,\n reduce_only: params.reduceOnly,\n signature,\n tx,\n };\n\n const baseResponse = await this.query('list_trigger_orders', queryParams);\n\n const orders: TriggerOrderInfo[] =\n baseResponse.orders.map(mapServerOrderInfo);\n\n return {\n orders,\n };\n }\n\n async listTwapExecutions(\n params: TriggerListTwapExecutionsParams,\n ): Promise<TriggerListTwapExecutionsResponse> {\n const queryParams: TriggerServerQueryRequestByType['list_twap_executions'] =\n {\n digest: params.digest,\n };\n\n const baseResponse = await this.query('list_twap_executions', queryParams);\n\n const executions: TwapExecutionInfo[] = baseResponse.executions.map(\n (execution) => ({\n executionId: execution.execution_id,\n scheduledTime: execution.scheduled_time,\n status: mapTwapExecutionStatus(execution.status),\n updatedAt: execution.updated_at,\n }),\n );\n\n return {\n executions,\n };\n }\n\n /*\n Base Fns\n */\n protected async sign<T extends SignableRequestType>(\n requestType: T,\n verifyingContract: string,\n chainId: number,\n params: SignableRequestTypeToParams[T],\n ) {\n // Use the linked signer if provided, otherwise use the default signer provided to the engine\n const walletClient =\n this.opts.linkedSignerWalletClient ?? this.opts.walletClient;\n\n if (walletClient == null) {\n throw new WalletNotProvidedError();\n }\n\n return getSignedTransactionRequest({\n chainId,\n requestParams: params,\n requestType,\n walletClient,\n verifyingContract,\n });\n }\n\n /**\n * POSTs an execute message to the trigger service and returns the successful response. Throws the failure response wrapped\n * in an TriggerServerFailureError on failure.\n *\n * @param requestType\n * @param params\n */\n protected async execute<TRequestType extends TriggerServerExecuteRequestType>(\n requestType: TRequestType,\n params: TriggerServerExecuteRequestByType[TRequestType],\n ): Promise<TriggerServerExecuteSuccessResult<TRequestType>> {\n const reqBody = {\n [requestType]: params,\n };\n const response = await this.axiosInstance.post<\n TriggerServerExecuteResult<TRequestType>\n >(`${this.opts.url}/execute`, reqBody);\n\n this.checkResponseStatus(response);\n this.checkServerStatus(response);\n\n // checkServerStatus catches the failure result and throws the error, so the cast to the success response is acceptable here\n return response.data as TriggerServerExecuteSuccessResult<TRequestType>;\n }\n\n protected async query<TRequestType extends TriggerServerQueryRequestType>(\n requestType: TRequestType,\n params: TriggerServerQueryRequestByType[TRequestType],\n ): Promise<TriggerServerQueryResponseByType[TRequestType]> {\n const reqBody = {\n type: requestType,\n ...params,\n };\n const response = await this.axiosInstance.post<\n TriggerServerQueryResponse<TRequestType>\n >(`${this.opts.url}/query`, reqBody);\n\n this.checkResponseStatus(response);\n this.checkServerStatus(response);\n\n // checkServerStatus throws on failure responses so the cast to the success response is acceptable here\n const successResponse = response as AxiosResponse<\n TriggerServerQuerySuccessResponse<TRequestType>\n >;\n\n return successResponse.data.data;\n }\n\n private checkResponseStatus(response: AxiosResponse) {\n if (response.status !== 200 || !response.data) {\n throw Error(\n `Unexpected response from server: ${response.status} ${response.statusText}. Data: ${response.data}`,\n );\n }\n }\n\n private checkServerStatus(\n response: AxiosResponse<\n TriggerServerExecuteResult | TriggerServerQueryResponse\n >,\n ) {\n if (response.data.status !== 'success') {\n throw new TriggerServerFailureError(response.data);\n }\n }\n}\n"],"mappings":";AAAA;AAAA,EAKE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAGA;AAAA,EAEA;AAAA,OACK;AACP,OAAO,WAA6C;AACpD;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAqBP,SAAS,iCAAiC;AAcnC,IAAM,gBAAN,MAAoB;AAAA,EAIzB,YAAY,MAAyB;AACnC,SAAK,OAAO;AACZ,SAAK,gBAAgB,MAAM,OAAO;AAAA,MAChC,iBAAiB;AAAA;AAAA,MAEjB,gBAAgB,MAAM;AAAA,IACxB,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOO,gBACL,0BACA;AACA,SAAK,KAAK,2BAA2B,4BAA4B;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,kBAAkB,QAAiC;AACvD,UAAM,cAAiC;AAAA,MACrC,QAAQ,OAAO,MAAM;AAAA,MACrB,YAAY,OAAO,MAAM;AAAA,MACzB,OAAO,OAAO,MAAM;AAAA,MACpB,gBAAgB,OAAO,MAAM;AAAA,MAC7B,iBAAiB,OAAO,MAAM;AAAA,MAC9B,OAAO,OAAO,SAAS,cAAc;AAAA,MACrC,UAAU,OAAO,MAAM;AAAA,IACzB;AACA,UAAM,YAAY,MAAM,KAAK;AAAA,MAC3B;AAAA,MACA,OAAO;AAAA,MACP,OAAO;AAAA,MACP;AAAA,IACF;AAEA,UAAM,gBAAkE;AAAA,MACtE,IAAI,OAAO,MAAM;AAAA,MACjB,OAAO,oBAAoB,eAAe,WAAW;AAAA,MACrD,SAAS,mBAAmB,OAAO,eAAe;AAAA,MAClD;AAAA,MACA,YAAY,OAAO;AAAA,MACnB,eAAe,OAAO,gBAAgB;AAAA,MACtC,QAAQ,OAAO,UAAU;AAAA,MACzB,eAAe,OAAO,gBAAgB;AAAA,IACxC;AAEA,WAAO,KAAK,QAAQ,eAAe,aAAa;AAAA,EAClD;AAAA,EAEA,MAAM,oBAAoB,QAAmC;AAC3D,UAAM,qBAA+C;AAAA,MACnD,SAAS,OAAO;AAAA,MAChB,OAAO,OAAO,SAAS,cAAc;AAAA,MACrC,YAAY,OAAO;AAAA,MACnB,gBAAgB,OAAO;AAAA,MACvB,iBAAiB,OAAO;AAAA,IAC1B;AACA,UAAM,KAAK,oBAAoB,iBAAiB,kBAAkB;AAElE,UAAM,gBAAoE;AAAA,MACxE,WAAW,MAAM,KAAK;AAAA,QACpB;AAAA,QACA,OAAO;AAAA,QACP,OAAO;AAAA,QACP;AAAA,MACF;AAAA,MACA;AAAA,IACF;AAEA,WAAO,KAAK,QAAQ,iBAAiB,aAAa;AAAA,EACpD;AAAA,EAEA,MAAM,oBAAoB,QAA0C;AAClE,UAAM,4BAA6D;AAAA,MACjE,OAAO,OAAO,SAAS,cAAc;AAAA,MACrC,YAAY,OAAO;AAAA,MACnB,gBAAgB,OAAO;AAAA,MACvB,iBAAiB,OAAO;AAAA,IAC1B;AACA,UAAM,KAAK;AAAA,MACT;AAAA,MACA;AAAA,IACF;AAEA,UAAM,gBACJ;AAAA,MACE,WAAW,MAAM,KAAK;AAAA,QACpB;AAAA,QACA,OAAO;AAAA,QACP,OAAO;AAAA,QACP;AAAA,MACF;AAAA,MACA;AAAA,IACF;AAEF,WAAO,KAAK,QAAQ,yBAAyB,aAAa;AAAA,EAC5D;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,WACJ,QACoC;AACpC,UAAM,kBAAiD;AAAA;AAAA,MAErD,UAAU,gBAAgB,OAAO,YAAY,mBAAmB,CAAC;AAAA,MACjE,gBAAgB,OAAO;AAAA,MACvB,iBAAiB,OAAO;AAAA,IAC1B;AAEA,UAAM,KAAK,oBAAoB,uBAAuB,eAAe;AACrE,UAAM,YAAY,MAAM,KAAK;AAAA,MAC3B;AAAA,MACA,OAAO;AAAA,MACP,OAAO;AAAA,MACP;AAAA,IACF;AAEA,UAAM,cACJ;AAAA,MACE,OAAO,OAAO;AAAA,MACd,iBAAiB,OAAO;AAAA,MACxB,cAAc,OAAO;AAAA,MACrB,aAAa,OAAO;AAAA,MACpB,SAAS,OAAO;AAAA,MAChB,eAAe,OAAO;AAAA,MACtB,aAAa,OAAO;AAAA,MACpB;AAAA,MACA;AAAA,IACF;AAEF,UAAM,eAAe,MAAM,KAAK,MAAM,uBAAuB,WAAW;AAExE,UAAM,SACJ,aAAa,OAAO,IAAI,kBAAkB;AAE5C,WAAO;AAAA,MACL;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,mBACJ,QAC4C;AAC5C,UAAM,cACJ;AAAA,MACE,QAAQ,OAAO;AAAA,IACjB;AAEF,UAAM,eAAe,MAAM,KAAK,MAAM,wBAAwB,WAAW;AAEzE,UAAM,aAAkC,aAAa,WAAW;AAAA,MAC9D,CAAC,eAAe;AAAA,QACd,aAAa,UAAU;AAAA,QACvB,eAAe,UAAU;AAAA,QACzB,QAAQ,uBAAuB,UAAU,MAAM;AAAA,QAC/C,WAAW,UAAU;AAAA,MACvB;AAAA,IACF;AAEA,WAAO;AAAA,MACL;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAgB,KACd,aACA,mBACA,SACA,QACA;AAEA,UAAM,eACJ,KAAK,KAAK,4BAA4B,KAAK,KAAK;AAElD,QAAI,gBAAgB,MAAM;AACxB,YAAM,IAAI,uBAAuB;AAAA,IACnC;AAEA,WAAO,4BAA4B;AAAA,MACjC;AAAA,MACA,eAAe;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAgB,QACd,aACA,QAC0D;AAC1D,UAAM,UAAU;AAAA,MACd,CAAC,WAAW,GAAG;AAAA,IACjB;AACA,UAAM,WAAW,MAAM,KAAK,cAAc,KAExC,GAAG,KAAK,KAAK,GAAG,YAAY,OAAO;AAErC,SAAK,oBAAoB,QAAQ;AACjC,SAAK,kBAAkB,QAAQ;AAG/B,WAAO,SAAS;AAAA,EAClB;AAAA,EAEA,MAAgB,MACd,aACA,QACyD;AACzD,UAAM,UAAU;AAAA,MACd,MAAM;AAAA,MACN,GAAG;AAAA,IACL;AACA,UAAM,WAAW,MAAM,KAAK,cAAc,KAExC,GAAG,KAAK,KAAK,GAAG,UAAU,OAAO;AAEnC,SAAK,oBAAoB,QAAQ;AACjC,SAAK,kBAAkB,QAAQ;AAG/B,UAAM,kBAAkB;AAIxB,WAAO,gBAAgB,KAAK;AAAA,EAC9B;AAAA,EAEQ,oBAAoB,UAAyB;AACnD,QAAI,SAAS,WAAW,OAAO,CAAC,SAAS,MAAM;AAC7C,YAAM;AAAA,QACJ,oCAAoC,SAAS,MAAM,IAAI,SAAS,UAAU,WAAW,SAAS,IAAI;AAAA,MACpG;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,kBACN,UAGA;AACA,QAAI,SAAS,KAAK,WAAW,WAAW;AACtC,YAAM,IAAI,0BAA0B,SAAS,IAAI;AAAA,IACnD;AAAA,EACF;AACF;","names":[]}