@relayprotocol/relay-sdk 2.4.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 (308) hide show
  1. package/LICENSE +21 -0
  2. package/_cjs/package.json +1 -0
  3. package/_cjs/src/actions/claimAppFees.js +53 -0
  4. package/_cjs/src/actions/claimAppFees.js.map +1 -0
  5. package/_cjs/src/actions/execute.js +76 -0
  6. package/_cjs/src/actions/execute.js.map +1 -0
  7. package/_cjs/src/actions/getAppFees.js +24 -0
  8. package/_cjs/src/actions/getAppFees.js.map +1 -0
  9. package/_cjs/src/actions/getPrice.js +51 -0
  10. package/_cjs/src/actions/getPrice.js.map +1 -0
  11. package/_cjs/src/actions/getQuote.js +91 -0
  12. package/_cjs/src/actions/getQuote.js.map +1 -0
  13. package/_cjs/src/actions/getSolverCapacity.js +21 -0
  14. package/_cjs/src/actions/getSolverCapacity.js.map +1 -0
  15. package/_cjs/src/actions/index.js +10 -0
  16. package/_cjs/src/actions/index.js.map +1 -0
  17. package/_cjs/src/client.js +207 -0
  18. package/_cjs/src/client.js.map +1 -0
  19. package/_cjs/src/constants/address.js +48 -0
  20. package/_cjs/src/constants/address.js.map +1 -0
  21. package/_cjs/src/constants/bvm.js +5 -0
  22. package/_cjs/src/constants/bvm.js.map +1 -0
  23. package/_cjs/src/constants/index.js +6 -0
  24. package/_cjs/src/constants/index.js.map +1 -0
  25. package/_cjs/src/constants/servers.js +9 -0
  26. package/_cjs/src/constants/servers.js.map +1 -0
  27. package/_cjs/src/errors/DepositTransactionTimeoutError.js +18 -0
  28. package/_cjs/src/errors/DepositTransactionTimeoutError.js.map +1 -0
  29. package/_cjs/src/errors/SolverStatusTimeoutError.js +18 -0
  30. package/_cjs/src/errors/SolverStatusTimeoutError.js.map +1 -0
  31. package/_cjs/src/errors/TransactionConfirmationError.js +25 -0
  32. package/_cjs/src/errors/TransactionConfirmationError.js.map +1 -0
  33. package/_cjs/src/errors/index.js +10 -0
  34. package/_cjs/src/errors/index.js.map +1 -0
  35. package/_cjs/src/index.js +10 -0
  36. package/_cjs/src/index.js.map +1 -0
  37. package/_cjs/src/routes/index.js +46 -0
  38. package/_cjs/src/routes/index.js.map +1 -0
  39. package/_cjs/src/types/AdaptedWallet.js +3 -0
  40. package/_cjs/src/types/AdaptedWallet.js.map +1 -0
  41. package/_cjs/src/types/Execute.js +3 -0
  42. package/_cjs/src/types/Execute.js.map +1 -0
  43. package/_cjs/src/types/Progress.js +3 -0
  44. package/_cjs/src/types/Progress.js.map +1 -0
  45. package/_cjs/src/types/RelayChain.js +3 -0
  46. package/_cjs/src/types/RelayChain.js.map +1 -0
  47. package/_cjs/src/types/SignatureStepItem.js +3 -0
  48. package/_cjs/src/types/SignatureStepItem.js.map +1 -0
  49. package/_cjs/src/types/TransactionStepItem.js +3 -0
  50. package/_cjs/src/types/TransactionStepItem.js.map +1 -0
  51. package/_cjs/src/types/api.js +3 -0
  52. package/_cjs/src/types/api.js.map +1 -0
  53. package/_cjs/src/types/index.js +11 -0
  54. package/_cjs/src/types/index.js.map +1 -0
  55. package/_cjs/src/utils/axios.js +18 -0
  56. package/_cjs/src/utils/axios.js.map +1 -0
  57. package/_cjs/src/utils/chain.js +91 -0
  58. package/_cjs/src/utils/chain.js.map +1 -0
  59. package/_cjs/src/utils/executeSteps/index.js +298 -0
  60. package/_cjs/src/utils/executeSteps/index.js.map +1 -0
  61. package/_cjs/src/utils/executeSteps/signatureStep.js +186 -0
  62. package/_cjs/src/utils/executeSteps/signatureStep.js.map +1 -0
  63. package/_cjs/src/utils/executeSteps/transactionStep.js +74 -0
  64. package/_cjs/src/utils/executeSteps/transactionStep.js.map +1 -0
  65. package/_cjs/src/utils/executeSteps/websocketHandlers.js +112 -0
  66. package/_cjs/src/utils/executeSteps/websocketHandlers.js.map +1 -0
  67. package/_cjs/src/utils/fetchChainConfigs.js +20 -0
  68. package/_cjs/src/utils/fetchChainConfigs.js.map +1 -0
  69. package/_cjs/src/utils/getCurrentStepData.js +28 -0
  70. package/_cjs/src/utils/getCurrentStepData.js.map +1 -0
  71. package/_cjs/src/utils/getTenderlyDetails.js +24 -0
  72. package/_cjs/src/utils/getTenderlyDetails.js.map +1 -0
  73. package/_cjs/src/utils/hyperliquid.js +95 -0
  74. package/_cjs/src/utils/hyperliquid.js.map +1 -0
  75. package/_cjs/src/utils/index.js +39 -0
  76. package/_cjs/src/utils/index.js.map +1 -0
  77. package/_cjs/src/utils/logger.js +38 -0
  78. package/_cjs/src/utils/logger.js.map +1 -0
  79. package/_cjs/src/utils/params.js +21 -0
  80. package/_cjs/src/utils/params.js.map +1 -0
  81. package/_cjs/src/utils/pollApi.js +40 -0
  82. package/_cjs/src/utils/pollApi.js.map +1 -0
  83. package/_cjs/src/utils/prepareBatchTransaction.js +35 -0
  84. package/_cjs/src/utils/prepareBatchTransaction.js.map +1 -0
  85. package/_cjs/src/utils/prepareCallTransaction.js +14 -0
  86. package/_cjs/src/utils/prepareCallTransaction.js.map +1 -0
  87. package/_cjs/src/utils/repeatUntilOk.js +19 -0
  88. package/_cjs/src/utils/repeatUntilOk.js.map +1 -0
  89. package/_cjs/src/utils/request.js +48 -0
  90. package/_cjs/src/utils/request.js.map +1 -0
  91. package/_cjs/src/utils/simulateContract.js +8 -0
  92. package/_cjs/src/utils/simulateContract.js.map +1 -0
  93. package/_cjs/src/utils/structuredClone.js +11 -0
  94. package/_cjs/src/utils/structuredClone.js.map +1 -0
  95. package/_cjs/src/utils/transaction.js +351 -0
  96. package/_cjs/src/utils/transaction.js.map +1 -0
  97. package/_cjs/src/utils/viemWallet.js +211 -0
  98. package/_cjs/src/utils/viemWallet.js.map +1 -0
  99. package/_cjs/src/utils/websocket.js +76 -0
  100. package/_cjs/src/utils/websocket.js.map +1 -0
  101. package/_cjs/src/version.js +5 -0
  102. package/_cjs/src/version.js.map +1 -0
  103. package/_cjs/tsconfig.build.tsbuildinfo +1 -0
  104. package/_esm/package.json +1 -0
  105. package/_esm/src/actions/claimAppFees.js +54 -0
  106. package/_esm/src/actions/claimAppFees.js.map +1 -0
  107. package/_esm/src/actions/execute.js +83 -0
  108. package/_esm/src/actions/execute.js.map +1 -0
  109. package/_esm/src/actions/getAppFees.js +25 -0
  110. package/_esm/src/actions/getAppFees.js.map +1 -0
  111. package/_esm/src/actions/getPrice.js +53 -0
  112. package/_esm/src/actions/getPrice.js.map +1 -0
  113. package/_esm/src/actions/getQuote.js +92 -0
  114. package/_esm/src/actions/getQuote.js.map +1 -0
  115. package/_esm/src/actions/getSolverCapacity.js +18 -0
  116. package/_esm/src/actions/getSolverCapacity.js.map +1 -0
  117. package/_esm/src/actions/index.js +7 -0
  118. package/_esm/src/actions/index.js.map +1 -0
  119. package/_esm/src/client.js +217 -0
  120. package/_esm/src/client.js.map +1 -0
  121. package/_esm/src/constants/address.js +43 -0
  122. package/_esm/src/constants/address.js.map +1 -0
  123. package/_esm/src/constants/bvm.js +2 -0
  124. package/_esm/src/constants/bvm.js.map +1 -0
  125. package/_esm/src/constants/index.js +3 -0
  126. package/_esm/src/constants/index.js.map +1 -0
  127. package/_esm/src/constants/servers.js +7 -0
  128. package/_esm/src/constants/servers.js.map +1 -0
  129. package/_esm/src/errors/DepositTransactionTimeoutError.js +14 -0
  130. package/_esm/src/errors/DepositTransactionTimeoutError.js.map +1 -0
  131. package/_esm/src/errors/SolverStatusTimeoutError.js +14 -0
  132. package/_esm/src/errors/SolverStatusTimeoutError.js.map +1 -0
  133. package/_esm/src/errors/TransactionConfirmationError.js +21 -0
  134. package/_esm/src/errors/TransactionConfirmationError.js.map +1 -0
  135. package/_esm/src/errors/index.js +4 -0
  136. package/_esm/src/errors/index.js.map +1 -0
  137. package/_esm/src/index.js +7 -0
  138. package/_esm/src/index.js.map +1 -0
  139. package/_esm/src/routes/index.js +43 -0
  140. package/_esm/src/routes/index.js.map +1 -0
  141. package/_esm/src/types/AdaptedWallet.js +2 -0
  142. package/_esm/src/types/AdaptedWallet.js.map +1 -0
  143. package/_esm/src/types/Execute.js +2 -0
  144. package/_esm/src/types/Execute.js.map +1 -0
  145. package/_esm/src/types/Progress.js +2 -0
  146. package/_esm/src/types/Progress.js.map +1 -0
  147. package/_esm/src/types/RelayChain.js +2 -0
  148. package/_esm/src/types/RelayChain.js.map +1 -0
  149. package/_esm/src/types/SignatureStepItem.js +2 -0
  150. package/_esm/src/types/SignatureStepItem.js.map +1 -0
  151. package/_esm/src/types/TransactionStepItem.js +2 -0
  152. package/_esm/src/types/TransactionStepItem.js.map +1 -0
  153. package/_esm/src/types/api.js +6 -0
  154. package/_esm/src/types/api.js.map +1 -0
  155. package/_esm/src/types/index.js +8 -0
  156. package/_esm/src/types/index.js.map +1 -0
  157. package/_esm/src/utils/axios.js +15 -0
  158. package/_esm/src/utils/axios.js.map +1 -0
  159. package/_esm/src/utils/chain.js +86 -0
  160. package/_esm/src/utils/chain.js.map +1 -0
  161. package/_esm/src/utils/executeSteps/index.js +347 -0
  162. package/_esm/src/utils/executeSteps/index.js.map +1 -0
  163. package/_esm/src/utils/executeSteps/signatureStep.js +191 -0
  164. package/_esm/src/utils/executeSteps/signatureStep.js.map +1 -0
  165. package/_esm/src/utils/executeSteps/transactionStep.js +76 -0
  166. package/_esm/src/utils/executeSteps/transactionStep.js.map +1 -0
  167. package/_esm/src/utils/executeSteps/websocketHandlers.js +124 -0
  168. package/_esm/src/utils/executeSteps/websocketHandlers.js.map +1 -0
  169. package/_esm/src/utils/fetchChainConfigs.js +16 -0
  170. package/_esm/src/utils/fetchChainConfigs.js.map +1 -0
  171. package/_esm/src/utils/getCurrentStepData.js +24 -0
  172. package/_esm/src/utils/getCurrentStepData.js.map +1 -0
  173. package/_esm/src/utils/getTenderlyDetails.js +20 -0
  174. package/_esm/src/utils/getTenderlyDetails.js.map +1 -0
  175. package/_esm/src/utils/hyperliquid.js +90 -0
  176. package/_esm/src/utils/hyperliquid.js.map +1 -0
  177. package/_esm/src/utils/index.js +16 -0
  178. package/_esm/src/utils/index.js.map +1 -0
  179. package/_esm/src/utils/logger.js +34 -0
  180. package/_esm/src/utils/logger.js.map +1 -0
  181. package/_esm/src/utils/params.js +40 -0
  182. package/_esm/src/utils/params.js.map +1 -0
  183. package/_esm/src/utils/pollApi.js +57 -0
  184. package/_esm/src/utils/pollApi.js.map +1 -0
  185. package/_esm/src/utils/prepareBatchTransaction.js +31 -0
  186. package/_esm/src/utils/prepareBatchTransaction.js.map +1 -0
  187. package/_esm/src/utils/prepareCallTransaction.js +11 -0
  188. package/_esm/src/utils/prepareCallTransaction.js.map +1 -0
  189. package/_esm/src/utils/repeatUntilOk.js +23 -0
  190. package/_esm/src/utils/repeatUntilOk.js.map +1 -0
  191. package/_esm/src/utils/request.js +42 -0
  192. package/_esm/src/utils/request.js.map +1 -0
  193. package/_esm/src/utils/simulateContract.js +5 -0
  194. package/_esm/src/utils/simulateContract.js.map +1 -0
  195. package/_esm/src/utils/structuredClone.js +8 -0
  196. package/_esm/src/utils/structuredClone.js.map +1 -0
  197. package/_esm/src/utils/transaction.js +374 -0
  198. package/_esm/src/utils/transaction.js.map +1 -0
  199. package/_esm/src/utils/viemWallet.js +207 -0
  200. package/_esm/src/utils/viemWallet.js.map +1 -0
  201. package/_esm/src/utils/websocket.js +78 -0
  202. package/_esm/src/utils/websocket.js.map +1 -0
  203. package/_esm/src/version.js +2 -0
  204. package/_esm/src/version.js.map +1 -0
  205. package/_esm/tsconfig.build.tsbuildinfo +1 -0
  206. package/_types/src/actions/claimAppFees.d.ts +21 -0
  207. package/_types/src/actions/claimAppFees.d.ts.map +1 -0
  208. package/_types/src/actions/execute.d.ts +23 -0
  209. package/_types/src/actions/execute.d.ts.map +1 -0
  210. package/_types/src/actions/getAppFees.d.ts +12 -0
  211. package/_types/src/actions/getAppFees.d.ts.map +1 -0
  212. package/_types/src/actions/getPrice.d.ts +23 -0
  213. package/_types/src/actions/getPrice.d.ts.map +1 -0
  214. package/_types/src/actions/getQuote.d.ts +24 -0
  215. package/_types/src/actions/getQuote.d.ts.map +1 -0
  216. package/_types/src/actions/getSolverCapacity.d.ts +8 -0
  217. package/_types/src/actions/getSolverCapacity.d.ts.map +1 -0
  218. package/_types/src/actions/index.d.ts +7 -0
  219. package/_types/src/actions/index.d.ts.map +1 -0
  220. package/_types/src/client.d.ts +8039 -0
  221. package/_types/src/client.d.ts.map +1 -0
  222. package/_types/src/constants/address.d.ts +11 -0
  223. package/_types/src/constants/address.d.ts.map +1 -0
  224. package/_types/src/constants/bvm.d.ts +2 -0
  225. package/_types/src/constants/bvm.d.ts.map +1 -0
  226. package/_types/src/constants/index.d.ts +3 -0
  227. package/_types/src/constants/index.d.ts.map +1 -0
  228. package/_types/src/constants/servers.d.ts +6 -0
  229. package/_types/src/constants/servers.d.ts.map +1 -0
  230. package/_types/src/errors/DepositTransactionTimeoutError.d.ts +5 -0
  231. package/_types/src/errors/DepositTransactionTimeoutError.d.ts.map +1 -0
  232. package/_types/src/errors/SolverStatusTimeoutError.d.ts +5 -0
  233. package/_types/src/errors/SolverStatusTimeoutError.d.ts.map +1 -0
  234. package/_types/src/errors/TransactionConfirmationError.d.ts +9 -0
  235. package/_types/src/errors/TransactionConfirmationError.d.ts.map +1 -0
  236. package/_types/src/errors/index.d.ts +4 -0
  237. package/_types/src/errors/index.d.ts.map +1 -0
  238. package/_types/src/index.d.ts +7 -0
  239. package/_types/src/index.d.ts.map +1 -0
  240. package/_types/src/routes/index.d.ts +2 -0
  241. package/_types/src/routes/index.d.ts.map +1 -0
  242. package/_types/src/types/AdaptedWallet.d.ts +27 -0
  243. package/_types/src/types/AdaptedWallet.d.ts.map +1 -0
  244. package/_types/src/types/Execute.d.ts +64 -0
  245. package/_types/src/types/Execute.d.ts.map +1 -0
  246. package/_types/src/types/Progress.d.ts +17 -0
  247. package/_types/src/types/Progress.d.ts.map +1 -0
  248. package/_types/src/types/RelayChain.d.ts +47 -0
  249. package/_types/src/types/RelayChain.d.ts.map +1 -0
  250. package/_types/src/types/SignatureStepItem.d.ts +21 -0
  251. package/_types/src/types/SignatureStepItem.d.ts.map +1 -0
  252. package/_types/src/types/TransactionStepItem.d.ts +25 -0
  253. package/_types/src/types/TransactionStepItem.d.ts.map +1 -0
  254. package/_types/src/types/api.d.ts +4911 -0
  255. package/_types/src/types/api.d.ts.map +1 -0
  256. package/_types/src/types/index.d.ts +8 -0
  257. package/_types/src/types/index.d.ts.map +1 -0
  258. package/_types/src/utils/axios.d.ts +2 -0
  259. package/_types/src/utils/axios.d.ts.map +1 -0
  260. package/_types/src/utils/chain.d.ts +7 -0
  261. package/_types/src/utils/chain.d.ts.map +1 -0
  262. package/_types/src/utils/executeSteps/index.d.ts +34 -0
  263. package/_types/src/utils/executeSteps/index.d.ts.map +1 -0
  264. package/_types/src/utils/executeSteps/signatureStep.d.ts +21 -0
  265. package/_types/src/utils/executeSteps/signatureStep.d.ts.map +1 -0
  266. package/_types/src/utils/executeSteps/transactionStep.d.ts +25 -0
  267. package/_types/src/utils/executeSteps/transactionStep.d.ts.map +1 -0
  268. package/_types/src/utils/executeSteps/websocketHandlers.d.ts +21 -0
  269. package/_types/src/utils/executeSteps/websocketHandlers.d.ts.map +1 -0
  270. package/_types/src/utils/fetchChainConfigs.d.ts +3 -0
  271. package/_types/src/utils/fetchChainConfigs.d.ts.map +1 -0
  272. package/_types/src/utils/getCurrentStepData.d.ts +80 -0
  273. package/_types/src/utils/getCurrentStepData.d.ts.map +1 -0
  274. package/_types/src/utils/getTenderlyDetails.d.ts +6 -0
  275. package/_types/src/utils/getTenderlyDetails.d.ts.map +1 -0
  276. package/_types/src/utils/hyperliquid.d.ts +49 -0
  277. package/_types/src/utils/hyperliquid.d.ts.map +1 -0
  278. package/_types/src/utils/index.d.ts +16 -0
  279. package/_types/src/utils/index.d.ts.map +1 -0
  280. package/_types/src/utils/logger.d.ts +9 -0
  281. package/_types/src/utils/logger.d.ts.map +1 -0
  282. package/_types/src/utils/params.d.ts +27 -0
  283. package/_types/src/utils/params.d.ts.map +1 -0
  284. package/_types/src/utils/pollApi.d.ts +22 -0
  285. package/_types/src/utils/pollApi.d.ts.map +1 -0
  286. package/_types/src/utils/prepareBatchTransaction.d.ts +41 -0
  287. package/_types/src/utils/prepareBatchTransaction.d.ts.map +1 -0
  288. package/_types/src/utils/prepareCallTransaction.d.ts +6 -0
  289. package/_types/src/utils/prepareCallTransaction.d.ts.map +1 -0
  290. package/_types/src/utils/repeatUntilOk.d.ts +10 -0
  291. package/_types/src/utils/repeatUntilOk.d.ts.map +1 -0
  292. package/_types/src/utils/request.d.ts +11 -0
  293. package/_types/src/utils/request.d.ts.map +1 -0
  294. package/_types/src/utils/simulateContract.d.ts +4 -0
  295. package/_types/src/utils/simulateContract.d.ts.map +1 -0
  296. package/_types/src/utils/structuredClone.d.ts +2 -0
  297. package/_types/src/utils/structuredClone.d.ts.map +1 -0
  298. package/_types/src/utils/transaction.d.ts +12 -0
  299. package/_types/src/utils/transaction.d.ts.map +1 -0
  300. package/_types/src/utils/viemWallet.d.ts +5 -0
  301. package/_types/src/utils/viemWallet.d.ts.map +1 -0
  302. package/_types/src/utils/websocket.d.ts +30 -0
  303. package/_types/src/utils/websocket.d.ts.map +1 -0
  304. package/_types/src/version.d.ts +2 -0
  305. package/_types/src/version.d.ts.map +1 -0
  306. package/_types/tsconfig.build.tsbuildinfo +1 -0
  307. package/package.json +57 -0
  308. package/readme.md +37 -0
@@ -0,0 +1,374 @@
1
+ import {} from 'viem';
2
+ import { LogLevel } from './logger.js';
3
+ import { axios } from '../utils/axios.js';
4
+ import { getClient } from '../client.js';
5
+ import { DepositTransactionTimeoutError, SolverStatusTimeoutError, TransactionConfirmationError } from '../errors/index.js';
6
+ import { repeatUntilOk } from '../utils/repeatUntilOk.js';
7
+ import { getTenderlyDetails } from '../utils/getTenderlyDetails.js';
8
+ /**
9
+ * Safe txhash.wait which handles replacements when users speed up the transaction
10
+ * @param url an URL object
11
+ * @returns A Promise to wait on
12
+ */
13
+ export async function sendTransactionSafely(chainId, items, step, wallet, setTxHashes, setInternalTxHashes, onWebsocketFailed, request, headers, crossChainIntentChainId, isValidating, details, setReceipt, setCheckStatus, statusControl) {
14
+ const client = getClient();
15
+ try {
16
+ //In some cases wallets can be delayed when switching chains, causing this check to fail.
17
+ //To work around this we check the chain id of the active wallet a few times before declaring it a failure
18
+ await repeatUntilOk(async () => {
19
+ const walletChainId = await wallet.getChainId();
20
+ return walletChainId === chainId;
21
+ }, 10, undefined, 250);
22
+ }
23
+ catch (e) {
24
+ const walletChainId = await wallet.getChainId();
25
+ throw `Current chain id: ${walletChainId} does not match expected chain id: ${chainId} `;
26
+ }
27
+ let receipt;
28
+ let transactionCancelled = false;
29
+ let confirmationError = false;
30
+ const pollingInterval = client.pollingInterval ?? 5000;
31
+ const maximumAttempts = client.maxPollingAttemptsBeforeTimeout ??
32
+ (2.5 * 60 * 1000) / pollingInterval; // default to 2 minutes and 30 seconds worth of attempts
33
+ let waitingForConfirmation = true;
34
+ let attemptCount = 0;
35
+ let txHash;
36
+ // Check if batching txs is supported and if there are multiple items to batch
37
+ const isBatchTransaction = Boolean(Array.isArray(items) &&
38
+ items.length > 1 &&
39
+ wallet.handleBatchTransactionStep);
40
+ if (isBatchTransaction) {
41
+ txHash = await wallet.handleBatchTransactionStep?.(chainId, items);
42
+ }
43
+ else {
44
+ txHash = await wallet.handleSendTransactionStep(chainId, Array.isArray(items) ? items[0] : items, step);
45
+ }
46
+ if (txHash === 'null') {
47
+ throw 'User rejected the request';
48
+ }
49
+ // Find the first item with a check endpoint
50
+ const check = Array.isArray(items)
51
+ ? items.find((item) => item.check)?.check
52
+ : items.check;
53
+ // Post transaction to solver
54
+ postTransactionToSolver({
55
+ txHash,
56
+ chainId,
57
+ step,
58
+ request,
59
+ headers,
60
+ source: client.source
61
+ });
62
+ if (txHash &&
63
+ !isBatchTransaction &&
64
+ !Array.isArray(items) &&
65
+ chainId === details?.currencyOut?.currency?.chainId) {
66
+ postSameChainTransactionToSolver({
67
+ calldata: JSON.stringify({ ...items.data, txHash }),
68
+ chainId,
69
+ step,
70
+ request,
71
+ headers,
72
+ source: client.source
73
+ });
74
+ }
75
+ if (!txHash) {
76
+ throw Error('Transaction hash not returned from handleSendTransactionStep method');
77
+ }
78
+ setTxHashes([
79
+ { txHash: txHash, chainId: chainId, isBatchTx: isBatchTransaction }
80
+ ]);
81
+ //Set up internal functions
82
+ const validate = (res) => {
83
+ getClient()?.log(['Execute Steps: Polling for confirmation', res], LogLevel.Verbose);
84
+ setCheckStatus?.(res.data?.status);
85
+ if (res.status === 200 && res.data && res.data.status === 'failure') {
86
+ throw Error('Transaction failed');
87
+ }
88
+ if (res.status === 200 && res.data && res.data.status === 'fallback') {
89
+ throw Error('Transaction failed: Refunded');
90
+ }
91
+ if (res.status === 200 && res.data && res.data.status === 'success') {
92
+ if (txHash) {
93
+ setInternalTxHashes([
94
+ { txHash: txHash, chainId: chainId, isBatchTx: isBatchTransaction }
95
+ ]);
96
+ }
97
+ else if (res?.data?.inTxHashes) {
98
+ const depositTxHashes = res.data?.inTxHashes?.map((hash) => {
99
+ return {
100
+ txHash: hash,
101
+ chainId: res?.data?.originChainId ?? chainId,
102
+ isBatchTx: isBatchTransaction
103
+ };
104
+ });
105
+ setInternalTxHashes(depositTxHashes);
106
+ }
107
+ const fillTxHashes = res.data?.txHashes?.map((hash) => {
108
+ return {
109
+ txHash: hash,
110
+ chainId: res?.data?.destinationChainId ?? crossChainIntentChainId
111
+ };
112
+ });
113
+ setTxHashes(fillTxHashes);
114
+ return true;
115
+ }
116
+ return false;
117
+ };
118
+ // Poll the confirmation url to confirm the transaction went through
119
+ const pollForConfirmation = async (receiptController) => {
120
+ isValidating?.();
121
+ // If websocket is enabled, wait for it to fail before falling back to polling
122
+ if (onWebsocketFailed) {
123
+ try {
124
+ await onWebsocketFailed();
125
+ client.log(['WebSocket failed, starting polling'], LogLevel.Verbose);
126
+ }
127
+ catch (e) {
128
+ client.log(['WebSocket failed promise rejected, skipping polling'], LogLevel.Verbose);
129
+ return;
130
+ }
131
+ }
132
+ // Start polling
133
+ while (waitingForConfirmation &&
134
+ attemptCount < maximumAttempts &&
135
+ !transactionCancelled &&
136
+ !confirmationError) {
137
+ client.log(['Polling for confirmation'], LogLevel.Verbose);
138
+ let res;
139
+ if (check?.endpoint && !request?.data?.useExternalLiquidity) {
140
+ let endpoint = check?.endpoint;
141
+ if (client.source &&
142
+ !endpoint.includes('referrer') &&
143
+ check?.method === 'GET') {
144
+ endpoint = endpoint.includes('?')
145
+ ? `${endpoint}&referrer=${client.source}`
146
+ : `${endpoint}?referrer=${client.source}`;
147
+ }
148
+ try {
149
+ res = await axios.request({
150
+ url: `${request.baseURL}${endpoint}`,
151
+ method: check?.method,
152
+ headers: headers
153
+ });
154
+ }
155
+ catch (e) {
156
+ getClient()?.log(['Execute Steps: Polling for confirmation api error', e], LogLevel.Verbose);
157
+ res = {
158
+ data: {},
159
+ status: 200,
160
+ statusText: 'OK',
161
+ headers: {},
162
+ config: {
163
+ headers: {}
164
+ }
165
+ };
166
+ }
167
+ }
168
+ if (res?.data?.status === 'pending' && waitingForConfirmation) {
169
+ //we can now abort checking for the receipt as we know it's complete by the backend
170
+ receiptController?.abort();
171
+ }
172
+ if (!res || validate(res)) {
173
+ waitingForConfirmation = false; // transaction confirmed
174
+ }
175
+ else if (res) {
176
+ if (res.data.status !== 'pending') {
177
+ isValidating?.(res);
178
+ attemptCount++;
179
+ }
180
+ await new Promise((resolve) => setTimeout(resolve, pollingInterval));
181
+ }
182
+ }
183
+ if (attemptCount >= maximumAttempts) {
184
+ if (receipt) {
185
+ throw new SolverStatusTimeoutError(txHash, attemptCount);
186
+ }
187
+ else {
188
+ throw new DepositTransactionTimeoutError(txHash, attemptCount);
189
+ }
190
+ }
191
+ if (transactionCancelled) {
192
+ throw Error('Transaction was cancelled');
193
+ }
194
+ return true;
195
+ };
196
+ const waitForTransaction = () => {
197
+ const controller = new AbortController();
198
+ const signal = controller.signal;
199
+ return {
200
+ promise: wallet
201
+ .handleConfirmTransactionStep(txHash, chainId, (replacementTxHash) => {
202
+ if (signal.aborted) {
203
+ return;
204
+ }
205
+ setTxHashes([{ txHash: replacementTxHash, chainId: chainId }]);
206
+ txHash = replacementTxHash;
207
+ attemptCount = 0; // reset attempt count
208
+ getClient()?.log(['Transaction replaced', replacementTxHash], LogLevel.Verbose);
209
+ postTransactionToSolver({
210
+ txHash: replacementTxHash,
211
+ chainId,
212
+ step,
213
+ request,
214
+ headers,
215
+ source: client.source
216
+ });
217
+ if (!isBatchTransaction &&
218
+ !Array.isArray(items) &&
219
+ chainId === details?.currencyOut?.currency?.chainId) {
220
+ postSameChainTransactionToSolver({
221
+ calldata: JSON.stringify({ ...items.data, replacementTxHash }),
222
+ chainId,
223
+ step,
224
+ request,
225
+ headers,
226
+ source: client.source
227
+ });
228
+ }
229
+ }, () => {
230
+ if (signal.aborted) {
231
+ return;
232
+ }
233
+ transactionCancelled = true;
234
+ getClient()?.log(['Transaction cancelled'], LogLevel.Verbose);
235
+ })
236
+ .then((data) => {
237
+ if (signal.aborted) {
238
+ return;
239
+ }
240
+ receipt = data;
241
+ setReceipt?.(receipt);
242
+ if (receipt &&
243
+ typeof receipt === 'object' &&
244
+ 'status' in receipt &&
245
+ receipt.status === 'reverted') {
246
+ throw 'Transaction Reverted';
247
+ }
248
+ getClient()?.log(['Transaction Receipt obtained', receipt], LogLevel.Verbose);
249
+ })
250
+ .catch(async (error) => {
251
+ if (signal.aborted) {
252
+ return;
253
+ }
254
+ let tenderlyError = null;
255
+ if (receipt && receipt.transactionHash) {
256
+ tenderlyError = await getTenderlyDetails(receipt.transactionHash);
257
+ }
258
+ getClient()?.log(['Error in handleConfirmTransactionStep', error], LogLevel.Error);
259
+ if (error.message === 'Transaction cancelled') {
260
+ transactionCancelled = true;
261
+ }
262
+ else {
263
+ confirmationError = true;
264
+ throw new TransactionConfirmationError(error, receipt, tenderlyError);
265
+ }
266
+ }),
267
+ controller
268
+ };
269
+ };
270
+ //If the origin chain is bitcoin, skip polling for confirmation, because the deposit will take too long
271
+ if (chainId === 8253038) {
272
+ return true;
273
+ }
274
+ if (isBatchTransaction) {
275
+ await pollForConfirmation(); // Rely on the solver to confirm batch transactions
276
+ }
277
+ else if (
278
+ //Sequence internal functions
279
+ // We want synchronous execution in the following cases:
280
+ // - Approval Signature step required first
281
+ // - Bitcoin is the destination
282
+ // - Canonical route used
283
+ step.id === 'approve' ||
284
+ details?.currencyOut?.currency?.chainId === 8253038 ||
285
+ request?.data?.useExternalLiquidity) {
286
+ await waitForTransaction().promise;
287
+ //In the following cases we want to skip polling for confirmation:
288
+ // - Bitcoin destination chain, we want to skip polling for confirmation as the block times are lengthy
289
+ // - Canonical route, also lengthy fill time
290
+ if (details?.currencyOut?.currency?.chainId !== 8253038 &&
291
+ !request?.data?.useExternalLiquidity) {
292
+ await pollForConfirmation();
293
+ }
294
+ }
295
+ else {
296
+ const { promise: receiptPromise, controller: receiptController } = waitForTransaction();
297
+ const confirmationPromise = pollForConfirmation(receiptController);
298
+ await Promise.race([receiptPromise, confirmationPromise]);
299
+ const isSameChain = details?.currencyOut?.currency?.chainId === chainId;
300
+ if (waitingForConfirmation) {
301
+ if (!isSameChain) {
302
+ await confirmationPromise;
303
+ }
304
+ else {
305
+ waitingForConfirmation = false;
306
+ // For same chain transactions, mark as complete to prevent WebSocket polling fallback
307
+ if (statusControl) {
308
+ statusControl.lastKnownStatus = 'success';
309
+ }
310
+ }
311
+ }
312
+ if (!receipt) {
313
+ if (!check) {
314
+ await receiptPromise;
315
+ }
316
+ else {
317
+ receiptController.abort();
318
+ }
319
+ }
320
+ }
321
+ return true;
322
+ }
323
+ const postSameChainTransactionToSolver = async ({ calldata, chainId, request, headers, step, source }) => {
324
+ if (calldata && step.requestId && chainId) {
325
+ getClient()?.log(['Posting same chain transaction to notify the solver'], LogLevel.Verbose);
326
+ try {
327
+ const triggerData = {
328
+ tx: calldata,
329
+ chainId: chainId.toString(),
330
+ requestId: step.requestId,
331
+ referrer: source
332
+ };
333
+ axios
334
+ .request({
335
+ url: `${request.baseURL}/transactions/single`,
336
+ method: 'POST',
337
+ headers: headers,
338
+ data: triggerData
339
+ })
340
+ .then(() => {
341
+ getClient()?.log(['Same chain transaction notified to the solver'], LogLevel.Verbose);
342
+ });
343
+ }
344
+ catch (e) {
345
+ getClient()?.log(['Failed to post same chain transaction to solver', e], LogLevel.Warn);
346
+ }
347
+ }
348
+ };
349
+ const postTransactionToSolver = async ({ txHash, chainId, request, headers, step, source }) => {
350
+ if (step.id === 'deposit' && txHash) {
351
+ getClient()?.log(['Posting transaction to notify the solver'], LogLevel.Verbose);
352
+ try {
353
+ const triggerData = {
354
+ txHash,
355
+ chainId: chainId.toString(),
356
+ referrer: source
357
+ };
358
+ axios
359
+ .request({
360
+ url: `${request.baseURL}/transactions/index`,
361
+ method: 'POST',
362
+ headers: headers,
363
+ data: triggerData
364
+ })
365
+ .then(() => {
366
+ getClient()?.log(['Transaction notified to the solver'], LogLevel.Verbose);
367
+ });
368
+ }
369
+ catch (e) {
370
+ getClient()?.log(['Failed to post transaction to solver', e], LogLevel.Warn);
371
+ }
372
+ }
373
+ };
374
+ //# sourceMappingURL=transaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transaction.js","sourceRoot":"","sources":["../../../src/utils/transaction.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,207 @@
1
+ import { LogLevel } from './logger.js';
2
+ import { getClient } from '../client.js';
3
+ import { createPublicClient, createWalletClient, custom, fallback, hexToBigInt, http } from 'viem';
4
+ export function isViemWalletClient(wallet) {
5
+ return (wallet.extend !== undefined &&
6
+ wallet.getPermissions !== undefined);
7
+ }
8
+ export const adaptViemWallet = (wallet) => {
9
+ return {
10
+ vmType: 'evm',
11
+ getChainId: async () => {
12
+ return wallet.getChainId();
13
+ },
14
+ transport: custom(wallet.transport),
15
+ address: async () => {
16
+ let address = wallet.account?.address;
17
+ if (!address) {
18
+ ;
19
+ [address] = await wallet.getAddresses();
20
+ }
21
+ return address;
22
+ },
23
+ handleSignMessageStep: async (stepItem) => {
24
+ const client = getClient();
25
+ const signData = stepItem.data?.sign;
26
+ let signature;
27
+ if (signData) {
28
+ if (signData.signatureKind === 'eip191') {
29
+ client.log(['Execute Steps: Signing with eip191'], LogLevel.Verbose);
30
+ if (signData.message.match(/0x[0-9a-fA-F]{64}/)) {
31
+ // If the message represents a hash, we need to convert it to raw bytes first
32
+ signature = await wallet.signMessage({
33
+ account: wallet.account,
34
+ message: {
35
+ raw: signData.message
36
+ }
37
+ });
38
+ }
39
+ else {
40
+ signature = await wallet.signMessage({
41
+ account: wallet.account,
42
+ message: signData.message
43
+ });
44
+ }
45
+ }
46
+ else if (signData.signatureKind === 'eip712') {
47
+ const signatureData = {
48
+ account: wallet.account,
49
+ domain: signData.domain,
50
+ types: signData.types,
51
+ primaryType: signData.primaryType,
52
+ message: signData.value
53
+ };
54
+ client.log(['Execute Steps: Signing with eip712', signatureData], LogLevel.Verbose);
55
+ signature = await wallet.signTypedData(signatureData);
56
+ }
57
+ }
58
+ return signature;
59
+ },
60
+ handleSendTransactionStep: async (chainId, stepItem) => {
61
+ const stepData = stepItem.data;
62
+ const client = getClient();
63
+ const chain = getClient().chains.find((chain) => chain.id === chainId)?.viemChain;
64
+ if (!chain) {
65
+ throw 'Chain not found when sending transaction';
66
+ }
67
+ const viemClient = createWalletClient({
68
+ account: wallet.account ?? stepData.from,
69
+ chain,
70
+ transport: custom(wallet.transport, { retryCount: 10, retryDelay: 200 })
71
+ });
72
+ return await viemClient.sendTransaction({
73
+ chain,
74
+ data: stepData.data,
75
+ account: wallet.account ?? stepData.from, // use signer.account if it's defined
76
+ to: stepData.to,
77
+ value: hexToBigInt(stepData.value || 0),
78
+ ...(stepData.maxFeePerGas &&
79
+ client.useGasFeeEstimations && {
80
+ maxFeePerGas: hexToBigInt(stepData.maxFeePerGas)
81
+ }),
82
+ ...(stepData.maxPriorityFeePerGas &&
83
+ client.useGasFeeEstimations && {
84
+ maxPriorityFeePerGas: hexToBigInt(stepData.maxPriorityFeePerGas)
85
+ }),
86
+ ...(stepData.gas &&
87
+ client.useGasFeeEstimations && {
88
+ gas: hexToBigInt(stepData.gas)
89
+ })
90
+ });
91
+ },
92
+ handleConfirmTransactionStep: async (txHash, chainId, onReplaced, onCancelled) => {
93
+ const client = getClient();
94
+ const chain = client.chains.find((chain) => chain.id === chainId);
95
+ const rpcUrl = chain?.httpRpcUrl;
96
+ const viemClient = createPublicClient({
97
+ chain: chain?.viemChain,
98
+ transport: wallet.transport
99
+ ? fallback(rpcUrl
100
+ ? [http(rpcUrl), custom(wallet.transport), http()]
101
+ : [custom(wallet.transport), http()])
102
+ : fallback([http(rpcUrl), http()]),
103
+ pollingInterval: client.confirmationPollingInterval
104
+ });
105
+ const receipt = await viemClient.waitForTransactionReceipt({
106
+ hash: txHash,
107
+ onReplaced: (replacement) => {
108
+ if (replacement.reason === 'cancelled') {
109
+ onCancelled();
110
+ throw Error('Transaction cancelled');
111
+ }
112
+ onReplaced(replacement.transaction.hash);
113
+ }
114
+ });
115
+ return receipt;
116
+ },
117
+ switchChain: async (chainId) => {
118
+ try {
119
+ await wallet.switchChain({
120
+ id: chainId
121
+ });
122
+ return;
123
+ }
124
+ catch (e) {
125
+ if (e && e?.message) {
126
+ if (e.message.includes('does not support the requested chain')) {
127
+ throw new Error('Wallet does not support chain');
128
+ }
129
+ else if (e.message.includes('rejected')) {
130
+ throw e;
131
+ }
132
+ else if (e.message.includes('already pending')) {
133
+ return;
134
+ }
135
+ }
136
+ const client = getClient();
137
+ const chain = client.chains.find((chain) => chain.id === chainId);
138
+ if (!chain) {
139
+ throw 'Chain missing from Relay Client';
140
+ }
141
+ try {
142
+ await wallet.addChain({
143
+ chain: chain?.viemChain
144
+ });
145
+ }
146
+ catch (e) {
147
+ if (e instanceof Error &&
148
+ e.name &&
149
+ e.name === 'InternalRpcError' &&
150
+ e.message.includes('is not a function')) {
151
+ getClient()?.log([
152
+ 'Execute Steps: Detected internal RPC Error when adding a chain to the wallet',
153
+ e
154
+ ], LogLevel.Verbose);
155
+ return;
156
+ }
157
+ else {
158
+ throw e;
159
+ }
160
+ }
161
+ return;
162
+ }
163
+ },
164
+ supportsAtomicBatch: async (chainId) => {
165
+ if (!wallet.account)
166
+ return false;
167
+ try {
168
+ const capabilities = await wallet.getCapabilities({
169
+ account: wallet.account,
170
+ chainId
171
+ });
172
+ return capabilities?.atomicBatch?.supported;
173
+ }
174
+ catch {
175
+ return false;
176
+ }
177
+ },
178
+ handleBatchTransactionStep: async (chainId, items) => {
179
+ const calls = items.map((item) => ({
180
+ to: item.data.to,
181
+ data: item.data.data,
182
+ value: hexToBigInt(item.data.value || 0),
183
+ ...(item.data.maxFeePerGas && {
184
+ maxFeePerGas: hexToBigInt(item.data.maxFeePerGas)
185
+ }),
186
+ ...(item.data.maxPriorityFeePerGas && {
187
+ maxPriorityFeePerGas: hexToBigInt(item.data.maxPriorityFeePerGas)
188
+ }),
189
+ ...(item.data.gas && {
190
+ gas: hexToBigInt(item.data.gas)
191
+ })
192
+ }));
193
+ const client = getClient();
194
+ const chain = client.chains.find((chain) => chain.id === chainId)?.viemChain;
195
+ if (!chain) {
196
+ throw 'Chain not found when sending transaction';
197
+ }
198
+ const { id } = await wallet.sendCalls({
199
+ chain,
200
+ account: wallet.account,
201
+ calls
202
+ });
203
+ return id;
204
+ }
205
+ };
206
+ };
207
+ //# sourceMappingURL=viemWallet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"viemWallet.js","sourceRoot":"","sources":["../../../src/utils/viemWallet.ts"],"names":[],"mappings":"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"}