@nadohq/trigger-client 0.14.0 → 0.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. package/dist/TriggerClient-6bNb5IdD.cjs +195 -0
  2. package/dist/TriggerClient-6bNb5IdD.cjs.map +1 -0
  3. package/dist/TriggerClient.cjs +3 -257
  4. package/dist/TriggerClient.d.cts +40 -42
  5. package/dist/TriggerClient.d.cts.map +1 -0
  6. package/dist/TriggerClient.d.ts +40 -42
  7. package/dist/TriggerClient.d.ts.map +1 -0
  8. package/dist/TriggerClient.js +157 -229
  9. package/dist/TriggerClient.js.map +1 -1
  10. package/dist/TriggerServerFailureError-BfVn3Cd1.d.cts +11 -0
  11. package/dist/TriggerServerFailureError-BfVn3Cd1.d.cts.map +1 -0
  12. package/dist/TriggerServerFailureError-DCrjct86.d.ts +11 -0
  13. package/dist/TriggerServerFailureError-DCrjct86.d.ts.map +1 -0
  14. package/dist/clientModelTypes-C7K17sS2.d.cts +69 -0
  15. package/dist/clientModelTypes-C7K17sS2.d.cts.map +1 -0
  16. package/dist/clientModelTypes-CZv3IB5D.d.ts +69 -0
  17. package/dist/clientModelTypes-CZv3IB5D.d.ts.map +1 -0
  18. package/dist/clientTypes-Bn3lA19Y.d.cts +102 -0
  19. package/dist/clientTypes-Bn3lA19Y.d.cts.map +1 -0
  20. package/dist/clientTypes-CAwuc8HN.d.ts +102 -0
  21. package/dist/clientTypes-CAwuc8HN.d.ts.map +1 -0
  22. package/dist/dataMappers.cjs +155 -218
  23. package/dist/dataMappers.cjs.map +1 -1
  24. package/dist/dataMappers.d.cts +7 -10
  25. package/dist/dataMappers.d.cts.map +1 -0
  26. package/dist/dataMappers.d.ts +7 -10
  27. package/dist/dataMappers.d.ts.map +1 -0
  28. package/dist/dataMappers.js +151 -197
  29. package/dist/dataMappers.js.map +1 -1
  30. package/dist/endpoints.cjs +8 -32
  31. package/dist/endpoints.cjs.map +1 -1
  32. package/dist/endpoints.d.cts +4 -2
  33. package/dist/endpoints.d.cts.map +1 -0
  34. package/dist/endpoints.d.ts +4 -2
  35. package/dist/endpoints.d.ts.map +1 -0
  36. package/dist/endpoints.js +8 -8
  37. package/dist/endpoints.js.map +1 -1
  38. package/dist/index.cjs +8 -29
  39. package/dist/index.d.cts +9 -12
  40. package/dist/index.d.ts +9 -12
  41. package/dist/index.js +5 -5
  42. package/dist/serverExecuteTypes-CoCnexH8.d.ts +33 -0
  43. package/dist/serverExecuteTypes-CoCnexH8.d.ts.map +1 -0
  44. package/dist/serverExecuteTypes-wEqxZgZV.d.cts +33 -0
  45. package/dist/serverExecuteTypes-wEqxZgZV.d.cts.map +1 -0
  46. package/dist/serverModelTypes-BoBLlAMO.d.cts +44 -0
  47. package/dist/serverModelTypes-BoBLlAMO.d.cts.map +1 -0
  48. package/dist/serverModelTypes-Jerv8TNA.d.ts +44 -0
  49. package/dist/serverModelTypes-Jerv8TNA.d.ts.map +1 -0
  50. package/dist/serverQueryTypes-C-RiciWB.d.ts +96 -0
  51. package/dist/serverQueryTypes-C-RiciWB.d.ts.map +1 -0
  52. package/dist/serverQueryTypes-Cj3yVnLR.d.cts +96 -0
  53. package/dist/serverQueryTypes-Cj3yVnLR.d.cts.map +1 -0
  54. package/dist/types/TriggerServerFailureError.cjs +9 -33
  55. package/dist/types/TriggerServerFailureError.cjs.map +1 -1
  56. package/dist/types/TriggerServerFailureError.d.cts +2 -12
  57. package/dist/types/TriggerServerFailureError.d.ts +2 -12
  58. package/dist/types/TriggerServerFailureError.js +8 -8
  59. package/dist/types/TriggerServerFailureError.js.map +1 -1
  60. package/dist/types/clientModelTypes.cjs +0 -19
  61. package/dist/types/clientModelTypes.d.cts +2 -67
  62. package/dist/types/clientModelTypes.d.ts +2 -67
  63. package/dist/types/clientModelTypes.js +1 -1
  64. package/dist/types/clientTypes.cjs +0 -19
  65. package/dist/types/clientTypes.d.cts +2 -102
  66. package/dist/types/clientTypes.d.ts +2 -102
  67. package/dist/types/clientTypes.js +1 -1
  68. package/dist/types/index.cjs +3 -35
  69. package/dist/types/index.d.cts +7 -9
  70. package/dist/types/index.d.ts +7 -9
  71. package/dist/types/index.js +2 -8
  72. package/dist/types/serverExecuteTypes.cjs +0 -19
  73. package/dist/types/serverExecuteTypes.d.cts +2 -31
  74. package/dist/types/serverExecuteTypes.d.ts +2 -31
  75. package/dist/types/serverExecuteTypes.js +1 -1
  76. package/dist/types/serverModelTypes.cjs +0 -19
  77. package/dist/types/serverModelTypes.d.cts +2 -42
  78. package/dist/types/serverModelTypes.d.ts +2 -42
  79. package/dist/types/serverModelTypes.js +1 -1
  80. package/dist/types/serverQueryTypes.cjs +0 -19
  81. package/dist/types/serverQueryTypes.d.cts +2 -95
  82. package/dist/types/serverQueryTypes.d.ts +2 -95
  83. package/dist/types/serverQueryTypes.js +1 -1
  84. package/package.json +10 -10
  85. package/dist/TriggerClient.cjs.map +0 -1
  86. package/dist/index.cjs.map +0 -1
  87. package/dist/index.js.map +0 -1
  88. package/dist/types/clientModelTypes.cjs.map +0 -1
  89. package/dist/types/clientModelTypes.js.map +0 -1
  90. package/dist/types/clientTypes.cjs.map +0 -1
  91. package/dist/types/clientTypes.js.map +0 -1
  92. package/dist/types/index.cjs.map +0 -1
  93. package/dist/types/index.js.map +0 -1
  94. package/dist/types/serverExecuteTypes.cjs.map +0 -1
  95. package/dist/types/serverExecuteTypes.js.map +0 -1
  96. package/dist/types/serverModelTypes.cjs.map +0 -1
  97. package/dist/types/serverModelTypes.js.map +0 -1
  98. package/dist/types/serverQueryTypes.cjs.map +0 -1
  99. package/dist/types/serverQueryTypes.js.map +0 -1
@@ -1,50 +1,48 @@
1
- import { WalletClientWithAccount, SignableRequestType, SignableRequestTypeToParams } from '@nadohq/shared';
2
- import { AxiosInstance } from 'axios';
3
- import { TriggerPlaceOrderParams, TriggerPlaceOrdersParams, TriggerCancelOrdersParams, TriggerCancelProductOrdersParams, TriggerListOrdersParams, TriggerListOrdersResponse, TriggerListTwapExecutionsParams, TriggerListTwapExecutionsResponse } from './types/clientTypes.js';
4
- import { TriggerServerExecuteSuccessResult, TriggerServerExecuteRequestByType, TriggerServerExecuteRequestType } from './types/serverExecuteTypes.js';
5
- import { TriggerServerQueryRequestType, TriggerServerQueryRequestByType, TriggerServerQueryResponseByType } from './types/serverQueryTypes.js';
6
- import '@nadohq/engine-client';
7
- import 'bignumber.js';
8
- import './types/clientModelTypes.js';
9
- import './types/serverModelTypes.js';
1
+ import { i as TriggerServerExecuteRequestType, o as TriggerServerExecuteSuccessResult, r as TriggerServerExecuteRequestByType } from "./serverExecuteTypes-CoCnexH8.js";
2
+ import { f as TriggerServerQueryResponseByType, l as TriggerServerQueryRequestByType, u as TriggerServerQueryRequestType } from "./serverQueryTypes-C-RiciWB.js";
3
+ import { a as TriggerListTwapExecutionsParams, i as TriggerListOrdersResponse, l as TriggerPlaceOrderParams, n as TriggerCancelProductOrdersParams, o as TriggerListTwapExecutionsResponse, r as TriggerListOrdersParams, t as TriggerCancelOrdersParams, u as TriggerPlaceOrdersParams } from "./clientTypes-CAwuc8HN.js";
4
+ import { SignableRequestType, SignableRequestTypeToParams, WalletClientWithAccount } from "@nadohq/shared";
5
+ import { AxiosInstance } from "axios";
10
6
 
7
+ //#region src/TriggerClient.d.ts
11
8
  interface TriggerClientOpts {
12
- url: string;
13
- walletClient?: WalletClientWithAccount;
14
- linkedSignerWalletClient?: WalletClientWithAccount;
9
+ url: string;
10
+ walletClient?: WalletClientWithAccount;
11
+ linkedSignerWalletClient?: WalletClientWithAccount;
15
12
  }
16
13
  /**
17
14
  * Client for all trigger service requests
18
15
  */
19
16
  declare class TriggerClient {
20
- readonly opts: TriggerClientOpts;
21
- readonly axiosInstance: AxiosInstance;
22
- constructor(opts: TriggerClientOpts);
23
- /**
24
- * Sets the linked signer for requests
25
- *
26
- * @param linkedSignerWalletClient The linkedSigner to use for all signatures. Set to null to revert to the chain signer
27
- */
28
- setLinkedSigner(linkedSignerWalletClient: WalletClientWithAccount | null): void;
29
- placeTriggerOrder(params: TriggerPlaceOrderParams): Promise<TriggerServerExecuteSuccessResult<"place_order">>;
30
- placeTriggerOrders(params: TriggerPlaceOrdersParams): Promise<TriggerServerExecuteSuccessResult<"place_orders">>;
31
- cancelTriggerOrders(params: TriggerCancelOrdersParams): Promise<TriggerServerExecuteSuccessResult<"cancel_orders">>;
32
- cancelProductOrders(params: TriggerCancelProductOrdersParams): Promise<TriggerServerExecuteSuccessResult<"cancel_product_orders">>;
33
- listOrders(params: TriggerListOrdersParams): Promise<TriggerListOrdersResponse>;
34
- listTwapExecutions(params: TriggerListTwapExecutionsParams): Promise<TriggerListTwapExecutionsResponse>;
35
- buildPlaceOrderExecuteParams(params: TriggerPlaceOrderParams): Promise<TriggerServerExecuteRequestByType['place_order']>;
36
- protected sign<T extends SignableRequestType>(requestType: T, verifyingContract: string, chainId: number, params: SignableRequestTypeToParams[T]): Promise<`0x${string}`>;
37
- /**
38
- * POSTs an execute message to the trigger service and returns the successful response. Throws the failure response wrapped
39
- * in an TriggerServerFailureError on failure.
40
- *
41
- * @param requestType
42
- * @param params
43
- */
44
- protected execute<TRequestType extends TriggerServerExecuteRequestType>(requestType: TRequestType, params: TriggerServerExecuteRequestByType[TRequestType]): Promise<TriggerServerExecuteSuccessResult<TRequestType>>;
45
- protected query<TRequestType extends TriggerServerQueryRequestType>(requestType: TRequestType, params: TriggerServerQueryRequestByType[TRequestType]): Promise<TriggerServerQueryResponseByType[TRequestType]>;
46
- private checkResponseStatus;
47
- private checkServerStatus;
17
+ readonly opts: TriggerClientOpts;
18
+ readonly axiosInstance: AxiosInstance;
19
+ constructor(opts: TriggerClientOpts);
20
+ /**
21
+ * Sets the linked signer for requests
22
+ *
23
+ * @param linkedSignerWalletClient The linkedSigner to use for all signatures. Set to null to revert to the chain signer
24
+ */
25
+ setLinkedSigner(linkedSignerWalletClient: WalletClientWithAccount | null): void;
26
+ placeTriggerOrder(params: TriggerPlaceOrderParams): Promise<TriggerServerExecuteSuccessResult<"place_order">>;
27
+ placeTriggerOrders(params: TriggerPlaceOrdersParams): Promise<TriggerServerExecuteSuccessResult<"place_orders">>;
28
+ cancelTriggerOrders(params: TriggerCancelOrdersParams): Promise<TriggerServerExecuteSuccessResult<"cancel_orders">>;
29
+ cancelProductOrders(params: TriggerCancelProductOrdersParams): Promise<TriggerServerExecuteSuccessResult<"cancel_product_orders">>;
30
+ listOrders(params: TriggerListOrdersParams): Promise<TriggerListOrdersResponse>;
31
+ listTwapExecutions(params: TriggerListTwapExecutionsParams): Promise<TriggerListTwapExecutionsResponse>;
32
+ buildPlaceOrderExecuteParams(params: TriggerPlaceOrderParams): Promise<TriggerServerExecuteRequestByType['place_order']>;
33
+ protected sign<T extends SignableRequestType>(requestType: T, verifyingContract: string, chainId: number, params: SignableRequestTypeToParams[T]): Promise<`0x${string}`>;
34
+ /**
35
+ * POSTs an execute message to the trigger service and returns the successful response. Throws the failure response wrapped
36
+ * in an TriggerServerFailureError on failure.
37
+ *
38
+ * @param requestType
39
+ * @param params
40
+ */
41
+ protected execute<TRequestType extends TriggerServerExecuteRequestType>(requestType: TRequestType, params: TriggerServerExecuteRequestByType[TRequestType]): Promise<TriggerServerExecuteSuccessResult<TRequestType>>;
42
+ protected query<TRequestType extends TriggerServerQueryRequestType>(requestType: TRequestType, params: TriggerServerQueryRequestByType[TRequestType]): Promise<TriggerServerQueryResponseByType[TRequestType]>;
43
+ private checkResponseStatus;
44
+ private checkServerStatus;
48
45
  }
49
-
50
- export { TriggerClient, type TriggerClientOpts };
46
+ //#endregion
47
+ export { TriggerClient, TriggerClientOpts };
48
+ //# sourceMappingURL=TriggerClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TriggerClient.d.ts","names":[],"sources":["../src/src/TriggerClient.ts"],"mappings":";;;;;;;UA4CiB,iBAAA;EAEf,GAAA;EAEA,YAAA,GAAe,uBAAA;EAEf,wBAAA,GAA2B,uBAAuB;AAAA;AANpD;;;AAAA,cAYa,aAAA;EAAA,SACF,IAAA,EAAM,iBAAA;EAAA,SACN,aAAA,EAAe,aAAA;cAEZ,IAAA,EAAM,iBAAA;EAVlB;;;AAAkD;AAMpD;EAkBS,eAAA,CACL,wBAAA,EAA0B,uBAAA;EAStB,iBAAA,CAAkB,MAAA,EAAQ,uBAAA,GAAuB,OAAA,CAAA,iCAAA;EAOjD,kBAAA,CAAmB,MAAA,EAAQ,wBAAA,GAAwB,OAAA,CAAA,iCAAA;EAanD,mBAAA,CAAoB,MAAA,EAAQ,yBAAA,GAAyB,OAAA,CAAA,iCAAA;EAuBrD,mBAAA,CAAoB,MAAA,EAAQ,gCAAA,GAAgC,OAAA,CAAA,iCAAA;EA6B5D,UAAA,CACJ,MAAA,EAAQ,uBAAA,GACP,OAAA,CAAQ,yBAAA;EAuCL,kBAAA,CACJ,MAAA,EAAQ,+BAAA,GACP,OAAA,CAAQ,iCAAA;EA0BL,4BAAA,CACJ,MAAA,EAAQ,uBAAA,GACP,OAAA,CAAQ,iCAAA;EAAA,UA6BK,IAAA,WAAe,mBAAA,CAAA,CAC7B,WAAA,EAAa,CAAA,EACb,iBAAA,UACA,OAAA,UACA,MAAA,EAAQ,2BAAA,CAA4B,CAAA,IAAE,OAAA;EAzKP;;;;;;;EAAA,UAmMjB,OAAA,sBAA6B,+BAAA,CAAA,CAC3C,WAAA,EAAa,YAAA,EACb,MAAA,EAAQ,iCAAA,CAAkC,YAAA,IACzC,OAAA,CAAQ,iCAAA,CAAkC,YAAA;EAAA,UAe7B,KAAA,sBAA2B,6BAAA,CAAA,CACzC,WAAA,EAAa,YAAA,EACb,MAAA,EAAQ,+BAAA,CAAgC,YAAA,IACvC,OAAA,CAAQ,gCAAA,CAAiC,YAAA;EAAA,QAoBpC,mBAAA;EAAA,QAQA,iBAAA;AAAA"}
@@ -1,233 +1,161 @@
1
- // src/TriggerClient.ts
2
- import {
3
- getDefaultRecvTime,
4
- getNadoEIP712Values,
5
- getOrderNonce,
6
- getSignedTransactionRequest,
7
- toIntegerString,
8
- WalletNotProvidedError
9
- } from "@nadohq/shared";
10
- import axios from "axios";
11
- import {
12
- mapServerOrderInfo,
13
- mapTriggerCriteria,
14
- mapTwapExecutionStatus
15
- } from "./dataMappers.js";
1
+ import { mapServerOrderInfo, mapTriggerCriteria, mapTwapExecutionStatus } from "./dataMappers.js";
16
2
  import { TriggerServerFailureError } from "./types/TriggerServerFailureError.js";
3
+ import { WalletNotProvidedError, getDefaultRecvTime, getNadoEIP712Values, getOrderNonce, getSignedTransactionRequest, toIntegerString } from "@nadohq/shared";
4
+ import axios from "axios";
5
+ //#region src/TriggerClient.ts
6
+ /**
7
+ * Client for all trigger service requests
8
+ */
17
9
  var TriggerClient = class {
18
- constructor(opts) {
19
- this.opts = opts;
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
- });
25
- }
26
- /**
27
- * Sets the linked signer for requests
28
- *
29
- * @param linkedSignerWalletClient The linkedSigner to use for all signatures. Set to null to revert to the chain signer
30
- */
31
- setLinkedSigner(linkedSignerWalletClient) {
32
- this.opts.linkedSignerWalletClient = linkedSignerWalletClient ?? void 0;
33
- }
34
- /*
35
- Executes
36
- */
37
- async placeTriggerOrder(params) {
38
- return this.execute(
39
- "place_order",
40
- await this.buildPlaceOrderExecuteParams(params)
41
- );
42
- }
43
- async placeTriggerOrders(params) {
44
- const executeParams = {
45
- orders: await Promise.all(
46
- params.orders.map(
47
- async (orderParam) => this.buildPlaceOrderExecuteParams(orderParam)
48
- )
49
- ),
50
- stop_on_failure: params.stopOnFailure ?? null
51
- };
52
- return this.execute("place_orders", executeParams);
53
- }
54
- async cancelTriggerOrders(params) {
55
- const cancelOrdersParams = {
56
- digests: params.digests,
57
- nonce: params.nonce ?? getOrderNonce(),
58
- productIds: params.productIds,
59
- subaccountName: params.subaccountName,
60
- subaccountOwner: params.subaccountOwner
61
- };
62
- const tx = getNadoEIP712Values("cancel_orders", cancelOrdersParams);
63
- const executeParams = {
64
- signature: await this.sign(
65
- "cancel_orders",
66
- params.verifyingAddr,
67
- params.chainId,
68
- cancelOrdersParams
69
- ),
70
- tx
71
- };
72
- return this.execute("cancel_orders", executeParams);
73
- }
74
- async cancelProductOrders(params) {
75
- const cancelProductOrdersParams = {
76
- nonce: params.nonce ?? getOrderNonce(),
77
- productIds: params.productIds,
78
- subaccountName: params.subaccountName,
79
- subaccountOwner: params.subaccountOwner
80
- };
81
- const tx = getNadoEIP712Values(
82
- "cancel_product_orders",
83
- cancelProductOrdersParams
84
- );
85
- const executeParams = {
86
- signature: await this.sign(
87
- "cancel_product_orders",
88
- params.verifyingAddr,
89
- params.chainId,
90
- cancelProductOrdersParams
91
- ),
92
- tx
93
- };
94
- return this.execute("cancel_product_orders", executeParams);
95
- }
96
- /*
97
- Queries
98
- */
99
- async listOrders(params) {
100
- const signatureParams = {
101
- // Default to 90 seconds from now if no recvTime is provided
102
- recvTime: toIntegerString(params.recvTime ?? getDefaultRecvTime()),
103
- subaccountName: params.subaccountName,
104
- subaccountOwner: params.subaccountOwner
105
- };
106
- const tx = getNadoEIP712Values("list_trigger_orders", signatureParams);
107
- const signature = await this.sign(
108
- "list_trigger_orders",
109
- params.verifyingAddr,
110
- params.chainId,
111
- signatureParams
112
- );
113
- const queryParams = {
114
- limit: params.limit,
115
- max_update_time: params.maxUpdateTimeInclusive,
116
- status_types: params.statusTypes,
117
- product_ids: params.productIds,
118
- digests: params.digests,
119
- trigger_types: params.triggerTypes,
120
- reduce_only: params.reduceOnly,
121
- signature,
122
- tx
123
- };
124
- const baseResponse = await this.query("list_trigger_orders", queryParams);
125
- const orders = baseResponse.orders.map(mapServerOrderInfo);
126
- return {
127
- orders
128
- };
129
- }
130
- async listTwapExecutions(params) {
131
- const queryParams = {
132
- digest: params.digest
133
- };
134
- const baseResponse = await this.query("list_twap_executions", queryParams);
135
- const executions = baseResponse.executions.map(
136
- (execution) => ({
137
- executionId: execution.execution_id,
138
- scheduledTime: execution.scheduled_time,
139
- status: mapTwapExecutionStatus(execution.status),
140
- updatedAt: execution.updated_at
141
- })
142
- );
143
- return {
144
- executions
145
- };
146
- }
147
- /*
148
- Base Fns
149
- */
150
- async buildPlaceOrderExecuteParams(params) {
151
- const orderParams = {
152
- amount: params.order.amount,
153
- expiration: params.order.expiration,
154
- price: params.order.price,
155
- subaccountName: params.order.subaccountName,
156
- subaccountOwner: params.order.subaccountOwner,
157
- nonce: params.nonce ?? getOrderNonce(),
158
- appendix: params.order.appendix
159
- };
160
- const signature = await this.sign(
161
- "place_order",
162
- params.verifyingAddr,
163
- params.chainId,
164
- orderParams
165
- );
166
- return {
167
- id: params.id ?? null,
168
- order: getNadoEIP712Values("place_order", orderParams),
169
- trigger: mapTriggerCriteria(params.triggerCriteria),
170
- signature,
171
- product_id: params.productId,
172
- spot_leverage: params.spotLeverage ?? null,
173
- digest: params.digest ?? null,
174
- borrow_margin: params.borrowMargin ?? null
175
- };
176
- }
177
- async sign(requestType, verifyingContract, chainId, params) {
178
- const walletClient = this.opts.linkedSignerWalletClient ?? this.opts.walletClient;
179
- if (walletClient == null) {
180
- throw new WalletNotProvidedError();
181
- }
182
- return getSignedTransactionRequest({
183
- chainId,
184
- requestParams: params,
185
- requestType,
186
- walletClient,
187
- verifyingContract
188
- });
189
- }
190
- /**
191
- * POSTs an execute message to the trigger service and returns the successful response. Throws the failure response wrapped
192
- * in an TriggerServerFailureError on failure.
193
- *
194
- * @param requestType
195
- * @param params
196
- */
197
- async execute(requestType, params) {
198
- const reqBody = {
199
- [requestType]: params
200
- };
201
- const response = await this.axiosInstance.post(`${this.opts.url}/execute`, reqBody);
202
- this.checkResponseStatus(response);
203
- this.checkServerStatus(response);
204
- return response.data;
205
- }
206
- async query(requestType, params) {
207
- const reqBody = {
208
- type: requestType,
209
- ...params
210
- };
211
- const response = await this.axiosInstance.post(`${this.opts.url}/query`, reqBody);
212
- this.checkResponseStatus(response);
213
- this.checkServerStatus(response);
214
- const successResponse = response;
215
- return successResponse.data.data;
216
- }
217
- checkResponseStatus(response) {
218
- if (response.status !== 200 || !response.data) {
219
- throw Error(
220
- `Unexpected response from server: ${response.status} ${response.statusText}. Data: ${response.data}`
221
- );
222
- }
223
- }
224
- checkServerStatus(response) {
225
- if (response.data.status !== "success") {
226
- throw new TriggerServerFailureError(response.data);
227
- }
228
- }
229
- };
230
- export {
231
- TriggerClient
10
+ constructor(opts) {
11
+ this.opts = opts;
12
+ this.axiosInstance = axios.create({
13
+ withCredentials: true,
14
+ validateStatus: () => true
15
+ });
16
+ }
17
+ /**
18
+ * Sets the linked signer for requests
19
+ *
20
+ * @param linkedSignerWalletClient The linkedSigner to use for all signatures. Set to null to revert to the chain signer
21
+ */
22
+ setLinkedSigner(linkedSignerWalletClient) {
23
+ this.opts.linkedSignerWalletClient = linkedSignerWalletClient ?? void 0;
24
+ }
25
+ async placeTriggerOrder(params) {
26
+ return this.execute("place_order", await this.buildPlaceOrderExecuteParams(params));
27
+ }
28
+ async placeTriggerOrders(params) {
29
+ const executeParams = {
30
+ orders: await Promise.all(params.orders.map(async (orderParam) => this.buildPlaceOrderExecuteParams(orderParam))),
31
+ stop_on_failure: params.stopOnFailure ?? null
32
+ };
33
+ return this.execute("place_orders", executeParams);
34
+ }
35
+ async cancelTriggerOrders(params) {
36
+ const cancelOrdersParams = {
37
+ digests: params.digests,
38
+ nonce: params.nonce ?? getOrderNonce(),
39
+ productIds: params.productIds,
40
+ subaccountName: params.subaccountName,
41
+ subaccountOwner: params.subaccountOwner
42
+ };
43
+ const tx = getNadoEIP712Values("cancel_orders", cancelOrdersParams);
44
+ const executeParams = {
45
+ signature: await this.sign("cancel_orders", params.verifyingAddr, params.chainId, cancelOrdersParams),
46
+ tx
47
+ };
48
+ return this.execute("cancel_orders", executeParams);
49
+ }
50
+ async cancelProductOrders(params) {
51
+ const cancelProductOrdersParams = {
52
+ nonce: params.nonce ?? getOrderNonce(),
53
+ productIds: params.productIds,
54
+ subaccountName: params.subaccountName,
55
+ subaccountOwner: params.subaccountOwner
56
+ };
57
+ const tx = getNadoEIP712Values("cancel_product_orders", cancelProductOrdersParams);
58
+ const executeParams = {
59
+ signature: await this.sign("cancel_product_orders", params.verifyingAddr, params.chainId, cancelProductOrdersParams),
60
+ tx
61
+ };
62
+ return this.execute("cancel_product_orders", executeParams);
63
+ }
64
+ async listOrders(params) {
65
+ const signatureParams = {
66
+ recvTime: toIntegerString(params.recvTime ?? getDefaultRecvTime()),
67
+ subaccountName: params.subaccountName,
68
+ subaccountOwner: params.subaccountOwner
69
+ };
70
+ const tx = getNadoEIP712Values("list_trigger_orders", signatureParams);
71
+ const signature = await this.sign("list_trigger_orders", params.verifyingAddr, params.chainId, signatureParams);
72
+ const queryParams = {
73
+ limit: params.limit,
74
+ max_update_time: params.maxUpdateTimeInclusive,
75
+ status_types: params.statusTypes,
76
+ product_ids: params.productIds,
77
+ digests: params.digests,
78
+ trigger_types: params.triggerTypes,
79
+ reduce_only: params.reduceOnly,
80
+ signature,
81
+ tx
82
+ };
83
+ return { orders: (await this.query("list_trigger_orders", queryParams)).orders.map(mapServerOrderInfo) };
84
+ }
85
+ async listTwapExecutions(params) {
86
+ const queryParams = { digest: params.digest };
87
+ return { executions: (await this.query("list_twap_executions", queryParams)).executions.map((execution) => ({
88
+ executionId: execution.execution_id,
89
+ scheduledTime: execution.scheduled_time,
90
+ status: mapTwapExecutionStatus(execution.status),
91
+ updatedAt: execution.updated_at
92
+ })) };
93
+ }
94
+ async buildPlaceOrderExecuteParams(params) {
95
+ const orderParams = {
96
+ amount: params.order.amount,
97
+ expiration: params.order.expiration,
98
+ price: params.order.price,
99
+ subaccountName: params.order.subaccountName,
100
+ subaccountOwner: params.order.subaccountOwner,
101
+ nonce: params.nonce ?? getOrderNonce(),
102
+ appendix: params.order.appendix
103
+ };
104
+ const signature = await this.sign("place_order", params.verifyingAddr, params.chainId, orderParams);
105
+ return {
106
+ id: params.id ?? null,
107
+ order: getNadoEIP712Values("place_order", orderParams),
108
+ trigger: mapTriggerCriteria(params.triggerCriteria),
109
+ signature,
110
+ product_id: params.productId,
111
+ spot_leverage: params.spotLeverage ?? null,
112
+ digest: params.digest ?? null,
113
+ borrow_margin: params.borrowMargin ?? null
114
+ };
115
+ }
116
+ async sign(requestType, verifyingContract, chainId, params) {
117
+ const walletClient = this.opts.linkedSignerWalletClient ?? this.opts.walletClient;
118
+ if (walletClient == null) throw new WalletNotProvidedError();
119
+ return getSignedTransactionRequest({
120
+ chainId,
121
+ requestParams: params,
122
+ requestType,
123
+ walletClient,
124
+ verifyingContract
125
+ });
126
+ }
127
+ /**
128
+ * POSTs an execute message to the trigger service and returns the successful response. Throws the failure response wrapped
129
+ * in an TriggerServerFailureError on failure.
130
+ *
131
+ * @param requestType
132
+ * @param params
133
+ */
134
+ async execute(requestType, params) {
135
+ const reqBody = { [requestType]: params };
136
+ const response = await this.axiosInstance.post(`${this.opts.url}/execute`, reqBody);
137
+ this.checkResponseStatus(response);
138
+ this.checkServerStatus(response);
139
+ return response.data;
140
+ }
141
+ async query(requestType, params) {
142
+ const reqBody = {
143
+ type: requestType,
144
+ ...params
145
+ };
146
+ const response = await this.axiosInstance.post(`${this.opts.url}/query`, reqBody);
147
+ this.checkResponseStatus(response);
148
+ this.checkServerStatus(response);
149
+ return response.data.data;
150
+ }
151
+ checkResponseStatus(response) {
152
+ if (response.status !== 200 || !response.data) throw Error(`Unexpected response from server: ${response.status} ${response.statusText}. Data: ${response.data}`);
153
+ }
154
+ checkServerStatus(response) {
155
+ if (response.data.status !== "success") throw new TriggerServerFailureError(response.data);
156
+ }
232
157
  };
158
+ //#endregion
159
+ export { TriggerClient };
160
+
233
161
  //# sourceMappingURL=TriggerClient.js.map
@@ -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 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 TriggerPlaceOrdersParams,\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 return this.execute(\n 'place_order',\n await this.buildPlaceOrderExecuteParams(params),\n );\n }\n\n async placeTriggerOrders(params: TriggerPlaceOrdersParams) {\n const executeParams: TriggerServerExecuteRequestByType['place_orders'] = {\n orders: await Promise.all(\n params.orders.map(async (orderParam) =>\n this.buildPlaceOrderExecuteParams(orderParam),\n ),\n ),\n stop_on_failure: params.stopOnFailure ?? null,\n };\n\n return this.execute('place_orders', 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\n async buildPlaceOrderExecuteParams(\n params: TriggerPlaceOrderParams,\n ): Promise<TriggerServerExecuteRequestByType['place_order']> {\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 return {\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\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":[]}
1
+ {"version":3,"file":"TriggerClient.js","names":["successResponse"],"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 TriggerPlaceOrdersParams,\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 return this.execute(\n 'place_order',\n await this.buildPlaceOrderExecuteParams(params),\n );\n }\n\n async placeTriggerOrders(params: TriggerPlaceOrdersParams) {\n const executeParams: TriggerServerExecuteRequestByType['place_orders'] = {\n orders: await Promise.all(\n params.orders.map(async (orderParam) =>\n this.buildPlaceOrderExecuteParams(orderParam),\n ),\n ),\n stop_on_failure: params.stopOnFailure ?? null,\n };\n\n return this.execute('place_orders', 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\n async buildPlaceOrderExecuteParams(\n params: TriggerPlaceOrderParams,\n ): Promise<TriggerServerExecuteRequestByType['place_order']> {\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 return {\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\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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"}
@@ -0,0 +1,11 @@
1
+ import { c as TriggerServerQueryFailureResponse } from "./serverQueryTypes-Cj3yVnLR.cjs";
2
+ import { EngineServerExecuteFailureResult } from "@nadohq/engine-client";
3
+
4
+ //#region src/types/TriggerServerFailureError.d.ts
5
+ declare class TriggerServerFailureError extends Error {
6
+ readonly responseData: TriggerServerQueryFailureResponse | EngineServerExecuteFailureResult;
7
+ constructor(responseData: TriggerServerQueryFailureResponse | EngineServerExecuteFailureResult);
8
+ }
9
+ //#endregion
10
+ export { TriggerServerFailureError as t };
11
+ //# sourceMappingURL=TriggerServerFailureError-BfVn3Cd1.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TriggerServerFailureError-BfVn3Cd1.d.cts","names":[],"sources":["../src/types/src/types/TriggerServerFailureError.ts"],"mappings":";;;;cAGa,yBAAA,SAAkC,KAAA;EAAA,SAElC,YAAA,EACL,iCAAA,GACA,gCAAA;cAFK,YAAA,EACL,iCAAA,GACA,gCAAA;AAAA"}
@@ -0,0 +1,11 @@
1
+ import { c as TriggerServerQueryFailureResponse } from "./serverQueryTypes-C-RiciWB.js";
2
+ import { EngineServerExecuteFailureResult } from "@nadohq/engine-client";
3
+
4
+ //#region src/types/TriggerServerFailureError.d.ts
5
+ declare class TriggerServerFailureError extends Error {
6
+ readonly responseData: TriggerServerQueryFailureResponse | EngineServerExecuteFailureResult;
7
+ constructor(responseData: TriggerServerQueryFailureResponse | EngineServerExecuteFailureResult);
8
+ }
9
+ //#endregion
10
+ export { TriggerServerFailureError as t };
11
+ //# sourceMappingURL=TriggerServerFailureError-DCrjct86.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TriggerServerFailureError-DCrjct86.d.ts","names":[],"sources":["../src/types/src/types/TriggerServerFailureError.ts"],"mappings":";;;;cAGa,yBAAA,SAAkC,KAAA;EAAA,SAElC,YAAA,EACL,iCAAA,GACA,gCAAA;cAFK,YAAA,EACL,iCAAA,GACA,gCAAA;AAAA"}