@nadohq/trigger-client 0.33.0 → 0.35.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.
- package/dist/{TriggerClient-B8IJgUCR.cjs → TriggerClient-B-yYvVOM.cjs} +3 -2
- package/dist/TriggerClient-B-yYvVOM.cjs.map +1 -0
- package/dist/TriggerClient.cjs +1 -1
- package/dist/TriggerClient.d.cts +1 -0
- package/dist/TriggerClient.d.cts.map +1 -1
- package/dist/TriggerClient.d.ts +1 -0
- package/dist/TriggerClient.d.ts.map +1 -1
- package/dist/TriggerClient.js +3 -2
- package/dist/TriggerClient.js.map +1 -1
- package/dist/dataMappers.cjs +1 -1
- package/dist/index.cjs +1 -1
- package/dist/types/TriggerServerFailureError.cjs +1 -1
- package/dist/types/triggerErrorCodes.cjs +1 -1
- package/package.json +4 -4
- package/src/TriggerClient.ts +4 -0
- package/dist/TriggerClient-B8IJgUCR.cjs.map +0 -1
|
@@ -34,7 +34,8 @@ var TriggerClient = class {
|
|
|
34
34
|
this.opts = opts;
|
|
35
35
|
this.axiosInstance = axios.default.create({
|
|
36
36
|
withCredentials: true,
|
|
37
|
-
validateStatus: () => true
|
|
37
|
+
validateStatus: () => true,
|
|
38
|
+
headers: (0, _nadohq_shared.getNadoClientTypeHeaders)(opts.clientType)
|
|
38
39
|
});
|
|
39
40
|
}
|
|
40
41
|
/**
|
|
@@ -207,4 +208,4 @@ Object.defineProperty(exports, "__toESM", {
|
|
|
207
208
|
}
|
|
208
209
|
});
|
|
209
210
|
|
|
210
|
-
//# sourceMappingURL=TriggerClient-
|
|
211
|
+
//# sourceMappingURL=TriggerClient-B-yYvVOM.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TriggerClient-B-yYvVOM.cjs","names":["mapServerOrderInfo","mapTwapExecutionStatus","mapTriggerCriteria","WalletNotProvidedError","successResponse","TriggerServerFailureError"],"sources":["../src/TriggerClient.ts"],"sourcesContent":["import {\n EIP712CancelOrdersParams,\n EIP712CancelProductOrdersParams,\n EIP712ListTriggerOrdersParams,\n EIP712OrderParams,\n EIP712UpdateDependencyParams,\n getDefaultRecvTime,\n getNadoClientTypeHeaders,\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 TriggerUpdateDependencyParams,\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 // If provided, identifies the calling client, sent as a header with every request\n clientType?: string;\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 headers: getNadoClientTypeHeaders(opts.clientType),\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 async updateTriggerDependency(params: TriggerUpdateDependencyParams) {\n const updateDependencyParams: EIP712UpdateDependencyParams = {\n oldDigest: params.oldDigest,\n newDigest: params.newDigest,\n nonce: params.nonce ?? getOrderNonce(),\n subaccountName: params.subaccountName,\n subaccountOwner: params.subaccountOwner,\n };\n const tx = getNadoEIP712Values('update_dependency', updateDependencyParams);\n\n const executeParams: TriggerServerExecuteRequestByType['update_dependency'] =\n {\n signature: await this.sign(\n 'update_dependency',\n params.verifyingAddr,\n params.chainId,\n updateDependencyParams,\n ),\n tx,\n };\n\n return this.execute('update_dependency', 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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"}
|
package/dist/TriggerClient.cjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_TriggerClient = require("./TriggerClient-
|
|
2
|
+
const require_TriggerClient = require("./TriggerClient-B-yYvVOM.cjs");
|
|
3
3
|
exports.TriggerClient = require_TriggerClient.TriggerClient;
|
package/dist/TriggerClient.d.cts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TriggerClient.d.cts","names":[],"sources":["../src/src/TriggerClient.ts"],"mappings":";;;;;;;
|
|
1
|
+
{"version":3,"file":"TriggerClient.d.cts","names":[],"sources":["../src/src/TriggerClient.ts"],"mappings":";;;;;;;UA+CiB,iBAAA;EAEf,GAAA;EAEA,YAAA,GAAe,uBAAA;EAEf,wBAAA,GAA2B,uBAAuB;EAElD,UAAA;AAAA;;;;cAMW,aAAA;EAAA,SACF,IAAA,EAAM,iBAAA;EAAA,SACN,aAAA,EAAe,aAAA;cAEZ,IAAA,EAAM,iBAAA;EAZS;;;AAEjB;AAMZ;EAmBS,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;EA0B5D,uBAAA,CAAwB,MAAA,EAAQ,6BAAA,GAA6B,OAAA,CAAA,iCAAA;EA2B7D,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;EAjMiB;;;;;;;EAAA,UA2NzC,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"}
|
package/dist/TriggerClient.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TriggerClient.d.ts","names":[],"sources":["../src/src/TriggerClient.ts"],"mappings":";;;;;;;
|
|
1
|
+
{"version":3,"file":"TriggerClient.d.ts","names":[],"sources":["../src/src/TriggerClient.ts"],"mappings":";;;;;;;UA+CiB,iBAAA;EAEf,GAAA;EAEA,YAAA,GAAe,uBAAA;EAEf,wBAAA,GAA2B,uBAAuB;EAElD,UAAA;AAAA;;;;cAMW,aAAA;EAAA,SACF,IAAA,EAAM,iBAAA;EAAA,SACN,aAAA,EAAe,aAAA;cAEZ,IAAA,EAAM,iBAAA;EAZS;;;AAEjB;AAMZ;EAmBS,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;EA0B5D,uBAAA,CAAwB,MAAA,EAAQ,6BAAA,GAA6B,OAAA,CAAA,iCAAA;EA2B7D,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;EAjMiB;;;;;;;EAAA,UA2NzC,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"}
|
package/dist/TriggerClient.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { mapServerOrderInfo, mapTriggerCriteria, mapTwapExecutionStatus } from "./dataMappers.js";
|
|
2
2
|
import { TriggerServerFailureError } from "./types/TriggerServerFailureError.js";
|
|
3
|
-
import { WalletNotProvidedError, getDefaultRecvTime, getNadoEIP712Values, getOrderNonce, getSignedTransactionRequest, toIntegerString } from "@nadohq/shared";
|
|
3
|
+
import { WalletNotProvidedError, getDefaultRecvTime, getNadoClientTypeHeaders, getNadoEIP712Values, getOrderNonce, getSignedTransactionRequest, toIntegerString } from "@nadohq/shared";
|
|
4
4
|
import axios from "axios";
|
|
5
5
|
//#region src/TriggerClient.ts
|
|
6
6
|
/**
|
|
@@ -11,7 +11,8 @@ var TriggerClient = class {
|
|
|
11
11
|
this.opts = opts;
|
|
12
12
|
this.axiosInstance = axios.create({
|
|
13
13
|
withCredentials: true,
|
|
14
|
-
validateStatus: () => true
|
|
14
|
+
validateStatus: () => true,
|
|
15
|
+
headers: getNadoClientTypeHeaders(opts.clientType)
|
|
15
16
|
});
|
|
16
17
|
}
|
|
17
18
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TriggerClient.js","names":["successResponse"],"sources":["../src/TriggerClient.ts"],"sourcesContent":["import {\n EIP712CancelOrdersParams,\n EIP712CancelProductOrdersParams,\n EIP712ListTriggerOrdersParams,\n EIP712OrderParams,\n EIP712UpdateDependencyParams,\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 TriggerUpdateDependencyParams,\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 async updateTriggerDependency(params: TriggerUpdateDependencyParams) {\n const updateDependencyParams: EIP712UpdateDependencyParams = {\n oldDigest: params.oldDigest,\n newDigest: params.newDigest,\n nonce: params.nonce ?? getOrderNonce(),\n subaccountName: params.subaccountName,\n subaccountOwner: params.subaccountOwner,\n };\n const tx = getNadoEIP712Values('update_dependency', updateDependencyParams);\n\n const executeParams: TriggerServerExecuteRequestByType['update_dependency'] =\n {\n signature: await this.sign(\n 'update_dependency',\n params.verifyingAddr,\n params.chainId,\n updateDependencyParams,\n ),\n tx,\n };\n\n return this.execute('update_dependency', 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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"}
|
|
1
|
+
{"version":3,"file":"TriggerClient.js","names":["successResponse"],"sources":["../src/TriggerClient.ts"],"sourcesContent":["import {\n EIP712CancelOrdersParams,\n EIP712CancelProductOrdersParams,\n EIP712ListTriggerOrdersParams,\n EIP712OrderParams,\n EIP712UpdateDependencyParams,\n getDefaultRecvTime,\n getNadoClientTypeHeaders,\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 TriggerUpdateDependencyParams,\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 // If provided, identifies the calling client, sent as a header with every request\n clientType?: string;\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 headers: getNadoClientTypeHeaders(opts.clientType),\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 async updateTriggerDependency(params: TriggerUpdateDependencyParams) {\n const updateDependencyParams: EIP712UpdateDependencyParams = {\n oldDigest: params.oldDigest,\n newDigest: params.newDigest,\n nonce: params.nonce ?? getOrderNonce(),\n subaccountName: params.subaccountName,\n subaccountOwner: params.subaccountOwner,\n };\n const tx = getNadoEIP712Values('update_dependency', updateDependencyParams);\n\n const executeParams: TriggerServerExecuteRequestByType['update_dependency'] =\n {\n signature: await this.sign(\n 'update_dependency',\n params.verifyingAddr,\n params.chainId,\n updateDependencyParams,\n ),\n tx,\n };\n\n return this.execute('update_dependency', 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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"}
|
package/dist/dataMappers.cjs
CHANGED
package/dist/index.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_TriggerClient = require("./TriggerClient-
|
|
2
|
+
const require_TriggerClient = require("./TriggerClient-B-yYvVOM.cjs");
|
|
3
3
|
const require_types_TriggerServerFailureError = require("./types/TriggerServerFailureError.cjs");
|
|
4
4
|
const require_endpoints = require("./endpoints.cjs");
|
|
5
5
|
const require_types_triggerErrorCodes = require("./types/triggerErrorCodes.cjs");
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
require("../TriggerClient-
|
|
2
|
+
require("../TriggerClient-B-yYvVOM.cjs");
|
|
3
3
|
//#region src/types/triggerErrorCodes.ts
|
|
4
4
|
/**
|
|
5
5
|
* Numeric error codes returned by the trigger service API.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nadohq/trigger-client",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.35.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"description": "HTTP client for the Nado trigger service — stop-loss, take-profit, and TWAP orders",
|
|
@@ -41,8 +41,8 @@
|
|
|
41
41
|
"module": "./dist/index.js",
|
|
42
42
|
"types": "./dist/index.d.ts",
|
|
43
43
|
"dependencies": {
|
|
44
|
-
"@nadohq/engine-client": "^0.
|
|
45
|
-
"@nadohq/shared": "^0.
|
|
44
|
+
"@nadohq/engine-client": "^0.35.0",
|
|
45
|
+
"@nadohq/shared": "^0.35.0",
|
|
46
46
|
"axios": "1.16.1",
|
|
47
47
|
"ts-mixer": "6.0.4"
|
|
48
48
|
},
|
|
@@ -54,5 +54,5 @@
|
|
|
54
54
|
"bignumber.js": "11.1.1",
|
|
55
55
|
"viem": "2.52.0"
|
|
56
56
|
},
|
|
57
|
-
"gitHead": "
|
|
57
|
+
"gitHead": "232349cb0f432b024dab1b1c623e8ad3b74b8f85"
|
|
58
58
|
}
|
package/src/TriggerClient.ts
CHANGED
|
@@ -5,6 +5,7 @@ import {
|
|
|
5
5
|
EIP712OrderParams,
|
|
6
6
|
EIP712UpdateDependencyParams,
|
|
7
7
|
getDefaultRecvTime,
|
|
8
|
+
getNadoClientTypeHeaders,
|
|
8
9
|
getNadoEIP712Values,
|
|
9
10
|
getOrderNonce,
|
|
10
11
|
getSignedTransactionRequest,
|
|
@@ -51,6 +52,8 @@ export interface TriggerClientOpts {
|
|
|
51
52
|
walletClient?: WalletClientWithAccount;
|
|
52
53
|
// Linked signer registered through the engine, if provided, execute requests will use this signer
|
|
53
54
|
linkedSignerWalletClient?: WalletClientWithAccount;
|
|
55
|
+
// If provided, identifies the calling client, sent as a header with every request
|
|
56
|
+
clientType?: string;
|
|
54
57
|
}
|
|
55
58
|
|
|
56
59
|
/**
|
|
@@ -66,6 +69,7 @@ export class TriggerClient {
|
|
|
66
69
|
withCredentials: true,
|
|
67
70
|
// We have custom logic to validate response status and create an appropriate error
|
|
68
71
|
validateStatus: () => true,
|
|
72
|
+
headers: getNadoClientTypeHeaders(opts.clientType),
|
|
69
73
|
});
|
|
70
74
|
}
|
|
71
75
|
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"TriggerClient-B8IJgUCR.cjs","names":["mapServerOrderInfo","mapTwapExecutionStatus","mapTriggerCriteria","WalletNotProvidedError","successResponse","TriggerServerFailureError"],"sources":["../src/TriggerClient.ts"],"sourcesContent":["import {\n EIP712CancelOrdersParams,\n EIP712CancelProductOrdersParams,\n EIP712ListTriggerOrdersParams,\n EIP712OrderParams,\n EIP712UpdateDependencyParams,\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 TriggerUpdateDependencyParams,\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 async updateTriggerDependency(params: TriggerUpdateDependencyParams) {\n const updateDependencyParams: EIP712UpdateDependencyParams = {\n oldDigest: params.oldDigest,\n newDigest: params.newDigest,\n nonce: params.nonce ?? getOrderNonce(),\n subaccountName: params.subaccountName,\n subaccountOwner: params.subaccountOwner,\n };\n const tx = getNadoEIP712Values('update_dependency', updateDependencyParams);\n\n const executeParams: TriggerServerExecuteRequestByType['update_dependency'] =\n {\n signature: await this.sign(\n 'update_dependency',\n params.verifyingAddr,\n params.chainId,\n updateDependencyParams,\n ),\n tx,\n };\n\n return this.execute('update_dependency', 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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"}
|