0xtrails 0.2.5 → 0.3.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 (267) hide show
  1. package/dist/aave.d.ts +2 -0
  2. package/dist/aave.d.ts.map +1 -1
  3. package/dist/abortController.d.ts +8 -0
  4. package/dist/abortController.d.ts.map +1 -0
  5. package/dist/{ccip-CXlshvBY.js → ccip-BMB3uDZt.js} +1 -1
  6. package/dist/config.d.ts +0 -5
  7. package/dist/config.d.ts.map +1 -1
  8. package/dist/constants.d.ts +4 -4
  9. package/dist/constants.d.ts.map +1 -1
  10. package/dist/error.d.ts +4 -1
  11. package/dist/error.d.ts.map +1 -1
  12. package/dist/fees.d.ts +19 -0
  13. package/dist/fees.d.ts.map +1 -0
  14. package/dist/{index-_QuyGrjU.js → index-QXPUrZVv.js} +48719 -50852
  15. package/dist/index.d.ts +9 -8
  16. package/dist/index.d.ts.map +1 -1
  17. package/dist/index.js +811 -784
  18. package/dist/intentReceiptMonitor.d.ts +24 -0
  19. package/dist/intentReceiptMonitor.d.ts.map +1 -0
  20. package/dist/intentReceiptPoller.d.ts +69 -0
  21. package/dist/intentReceiptPoller.d.ts.map +1 -0
  22. package/dist/intents.d.ts +15 -11
  23. package/dist/intents.d.ts.map +1 -1
  24. package/dist/morpho.d.ts +6 -5
  25. package/dist/morpho.d.ts.map +1 -1
  26. package/dist/mutations.d.ts +16 -0
  27. package/dist/mutations.d.ts.map +1 -0
  28. package/dist/preconditions.d.ts +5 -4
  29. package/dist/preconditions.d.ts.map +1 -1
  30. package/dist/prepareSend.d.ts +7 -258
  31. package/dist/prepareSend.d.ts.map +1 -1
  32. package/dist/prices.d.ts +9 -6
  33. package/dist/prices.d.ts.map +1 -1
  34. package/dist/sequenceWallet.d.ts +3 -16
  35. package/dist/sequenceWallet.d.ts.map +1 -1
  36. package/dist/tokenBalances.d.ts +17 -13
  37. package/dist/tokenBalances.d.ts.map +1 -1
  38. package/dist/trails.d.ts +24 -40
  39. package/dist/trails.d.ts.map +1 -1
  40. package/dist/transactionIntent/constants.d.ts +7 -0
  41. package/dist/transactionIntent/constants.d.ts.map +1 -0
  42. package/dist/transactionIntent/deposits/depositOrchestrator.d.ts +44 -0
  43. package/dist/transactionIntent/deposits/depositOrchestrator.d.ts.map +1 -0
  44. package/dist/transactionIntent/deposits/gaslessDeposit.d.ts +30 -0
  45. package/dist/transactionIntent/deposits/gaslessDeposit.d.ts.map +1 -0
  46. package/dist/transactionIntent/deposits/index.d.ts +4 -0
  47. package/dist/transactionIntent/deposits/index.d.ts.map +1 -0
  48. package/dist/transactionIntent/deposits/standardDeposit.d.ts +30 -0
  49. package/dist/transactionIntent/deposits/standardDeposit.d.ts.map +1 -0
  50. package/dist/transactionIntent/execution/index.d.ts +2 -0
  51. package/dist/transactionIntent/execution/index.d.ts.map +1 -0
  52. package/dist/transactionIntent/execution/transactionState.d.ts +5 -0
  53. package/dist/transactionIntent/execution/transactionState.d.ts.map +1 -0
  54. package/dist/transactionIntent/handlers/crossChain.d.ts +82 -0
  55. package/dist/transactionIntent/handlers/crossChain.d.ts.map +1 -0
  56. package/dist/transactionIntent/handlers/index.d.ts +4 -0
  57. package/dist/transactionIntent/handlers/index.d.ts.map +1 -0
  58. package/dist/transactionIntent/handlers/sameChainDifferentToken.d.ts +62 -0
  59. package/dist/transactionIntent/handlers/sameChainDifferentToken.d.ts.map +1 -0
  60. package/dist/transactionIntent/handlers/sameChainSameToken.d.ts +72 -0
  61. package/dist/transactionIntent/handlers/sameChainSameToken.d.ts.map +1 -0
  62. package/dist/transactionIntent/index.d.ts +9 -0
  63. package/dist/transactionIntent/index.d.ts.map +1 -0
  64. package/dist/transactionIntent/quote/feeExtractors.d.ts +17 -0
  65. package/dist/transactionIntent/quote/feeExtractors.d.ts.map +1 -0
  66. package/dist/transactionIntent/quote/index.d.ts +4 -0
  67. package/dist/transactionIntent/quote/index.d.ts.map +1 -0
  68. package/dist/transactionIntent/quote/normalizeQuote.d.ts +34 -0
  69. package/dist/transactionIntent/quote/normalizeQuote.d.ts.map +1 -0
  70. package/dist/transactionIntent/quote/quoteHelpers.d.ts +5 -0
  71. package/dist/transactionIntent/quote/quoteHelpers.d.ts.map +1 -0
  72. package/dist/transactionIntent/types.d.ts +131 -0
  73. package/dist/transactionIntent/types.d.ts.map +1 -0
  74. package/dist/transactionIntent/utils/balanceChecker.d.ts +18 -0
  75. package/dist/transactionIntent/utils/balanceChecker.d.ts.map +1 -0
  76. package/dist/transactionIntent/utils/index.d.ts +4 -0
  77. package/dist/transactionIntent/utils/index.d.ts.map +1 -0
  78. package/dist/transactionIntent/utils/lifiHelpers.d.ts +10 -0
  79. package/dist/transactionIntent/utils/lifiHelpers.d.ts.map +1 -0
  80. package/dist/transactionIntent/utils/testnetHelpers.d.ts +3 -0
  81. package/dist/transactionIntent/utils/testnetHelpers.d.ts.map +1 -0
  82. package/dist/transactionIntent/validators.d.ts +6 -0
  83. package/dist/transactionIntent/validators.d.ts.map +1 -0
  84. package/dist/transactions.d.ts +6 -3
  85. package/dist/transactions.d.ts.map +1 -1
  86. package/dist/widget/components/AccountIntentTransactionHistoryButton.d.ts +4 -0
  87. package/dist/widget/components/AccountIntentTransactionHistoryButton.d.ts.map +1 -0
  88. package/dist/widget/components/AccountSettings.d.ts.map +1 -1
  89. package/dist/widget/components/ChainFilterDropdown.d.ts.map +1 -1
  90. package/dist/widget/components/ClassicSwap.d.ts +2 -3
  91. package/dist/widget/components/ClassicSwap.d.ts.map +1 -1
  92. package/dist/widget/components/ConfigDisplay.d.ts.map +1 -1
  93. package/dist/widget/components/ConnectWallet.d.ts.map +1 -1
  94. package/dist/widget/components/ConnectedWallets.d.ts.map +1 -1
  95. package/dist/widget/components/DynamicInputStyles.d.ts +18 -0
  96. package/dist/widget/components/DynamicInputStyles.d.ts.map +1 -0
  97. package/dist/widget/components/DynamicSizeInputField.d.ts +13 -0
  98. package/dist/widget/components/DynamicSizeInputField.d.ts.map +1 -0
  99. package/dist/widget/components/Earn.d.ts +2 -3
  100. package/dist/widget/components/Earn.d.ts.map +1 -1
  101. package/dist/widget/components/ErrorAnimationIcon.d.ts +2 -0
  102. package/dist/widget/components/ErrorAnimationIcon.d.ts.map +1 -0
  103. package/dist/widget/components/FeeBreakdown.d.ts +9 -0
  104. package/dist/widget/components/FeeBreakdown.d.ts.map +1 -0
  105. package/dist/widget/components/FeeOptions.d.ts +5 -13
  106. package/dist/widget/components/FeeOptions.d.ts.map +1 -1
  107. package/dist/widget/components/Fund.d.ts +2 -3
  108. package/dist/widget/components/Fund.d.ts.map +1 -1
  109. package/dist/widget/components/FundMethods.d.ts.map +1 -1
  110. package/dist/widget/components/FundSwap.d.ts +2 -3
  111. package/dist/widget/components/FundSwap.d.ts.map +1 -1
  112. package/dist/widget/components/FundingMethodSelectorButton.d.ts.map +1 -1
  113. package/dist/widget/components/Identicon.d.ts.map +1 -1
  114. package/dist/widget/components/MeshConnectExchanges.d.ts +0 -3
  115. package/dist/widget/components/MeshConnectExchanges.d.ts.map +1 -1
  116. package/dist/widget/components/Modal.d.ts.map +1 -1
  117. package/dist/widget/components/Pay.d.ts +2 -3
  118. package/dist/widget/components/Pay.d.ts.map +1 -1
  119. package/dist/widget/components/PoolDeposit.d.ts +3 -3
  120. package/dist/widget/components/PoolDeposit.d.ts.map +1 -1
  121. package/dist/widget/components/PoolWithdraw.d.ts +3 -20
  122. package/dist/widget/components/PoolWithdraw.d.ts.map +1 -1
  123. package/dist/widget/components/QuoteDetails.d.ts +2 -0
  124. package/dist/widget/components/QuoteDetails.d.ts.map +1 -1
  125. package/dist/widget/components/Receipt.d.ts.map +1 -1
  126. package/dist/widget/components/RecipientSelectorButton.d.ts.map +1 -1
  127. package/dist/widget/components/ScreenHeader.d.ts.map +1 -1
  128. package/dist/widget/components/Swap.d.ts +2 -3
  129. package/dist/widget/components/Swap.d.ts.map +1 -1
  130. package/dist/widget/components/ThemeProvider.d.ts.map +1 -1
  131. package/dist/widget/components/TokenDisplayNonSelectable.d.ts +11 -0
  132. package/dist/widget/components/TokenDisplayNonSelectable.d.ts.map +1 -0
  133. package/dist/widget/components/TokenSelector.d.ts.map +1 -1
  134. package/dist/widget/components/TokenSelectorButton.d.ts.map +1 -1
  135. package/dist/widget/components/Tooltip.d.ts +9 -0
  136. package/dist/widget/components/Tooltip.d.ts.map +1 -0
  137. package/dist/widget/components/TransferPendingVertical.d.ts.map +1 -1
  138. package/dist/widget/components/WaasFeeOptions.d.ts +1 -0
  139. package/dist/widget/components/WaasFeeOptions.d.ts.map +1 -1
  140. package/dist/widget/components/WalletConfirmation.d.ts.map +1 -1
  141. package/dist/widget/components/WalletConnect.d.ts.map +1 -1
  142. package/dist/widget/css/compiled.css +2 -2
  143. package/dist/widget/hooks/useCheckout.d.ts +17 -4
  144. package/dist/widget/hooks/useCheckout.d.ts.map +1 -1
  145. package/dist/widget/hooks/useDefaultTokenSelection.d.ts.map +1 -1
  146. package/dist/widget/hooks/useQuote.d.ts +82 -0
  147. package/dist/widget/hooks/useQuote.d.ts.map +1 -0
  148. package/dist/widget/hooks/useSelectedFeeToken.d.ts +1 -0
  149. package/dist/widget/hooks/useSelectedFeeToken.d.ts.map +1 -1
  150. package/dist/widget/hooks/useSendForm.d.ts +5 -6
  151. package/dist/widget/hooks/useSendForm.d.ts.map +1 -1
  152. package/dist/widget/hooks/useTokenList.d.ts.map +1 -1
  153. package/dist/widget/hooks/useWalletConnectionContext.d.ts +25 -0
  154. package/dist/widget/hooks/useWalletConnectionContext.d.ts.map +1 -0
  155. package/dist/widget/index.js +2 -2
  156. package/dist/widget/widget.d.ts +17 -7
  157. package/dist/widget/widget.d.ts.map +1 -1
  158. package/package.json +19 -21
  159. package/src/aave.ts +54 -1
  160. package/src/abortController.ts +35 -0
  161. package/src/config.ts +57 -58
  162. package/src/constants.ts +11 -9
  163. package/src/error.ts +21 -3
  164. package/src/fees.ts +210 -0
  165. package/src/index.ts +35 -13
  166. package/src/intentReceiptMonitor.ts +102 -0
  167. package/src/intentReceiptPoller.ts +299 -0
  168. package/src/intents.ts +205 -171
  169. package/src/morpho.ts +58 -9
  170. package/src/mutations.ts +129 -0
  171. package/src/preconditions.ts +16 -21
  172. package/src/prepareSend.ts +92 -4699
  173. package/src/prices.ts +26 -22
  174. package/src/relaySdk.ts +2 -2
  175. package/src/sequenceWallet.ts +6 -73
  176. package/src/tokenBalances.ts +175 -69
  177. package/src/trails.ts +230 -722
  178. package/src/transactionIntent/constants.ts +11 -0
  179. package/src/transactionIntent/deposits/depositOrchestrator.ts +210 -0
  180. package/src/transactionIntent/deposits/gaslessDeposit.ts +588 -0
  181. package/src/transactionIntent/deposits/index.ts +3 -0
  182. package/src/transactionIntent/deposits/standardDeposit.ts +379 -0
  183. package/src/transactionIntent/execution/index.ts +1 -0
  184. package/src/transactionIntent/execution/transactionState.ts +35 -0
  185. package/src/transactionIntent/handlers/crossChain.ts +1707 -0
  186. package/src/transactionIntent/handlers/index.ts +3 -0
  187. package/src/transactionIntent/handlers/sameChainDifferentToken.ts +323 -0
  188. package/src/transactionIntent/handlers/sameChainSameToken.ts +712 -0
  189. package/src/transactionIntent/index.ts +9 -0
  190. package/src/transactionIntent/quote/feeExtractors.ts +81 -0
  191. package/src/transactionIntent/quote/index.ts +3 -0
  192. package/src/transactionIntent/quote/normalizeQuote.ts +367 -0
  193. package/src/transactionIntent/quote/quoteHelpers.ts +53 -0
  194. package/src/transactionIntent/types.ts +157 -0
  195. package/src/transactionIntent/utils/balanceChecker.ts +96 -0
  196. package/src/transactionIntent/utils/index.ts +3 -0
  197. package/src/transactionIntent/utils/lifiHelpers.ts +68 -0
  198. package/src/transactionIntent/utils/testnetHelpers.ts +10 -0
  199. package/src/transactionIntent/validators.ts +57 -0
  200. package/src/transactions.ts +98 -71
  201. package/src/widget/compiled.css +2 -2
  202. package/src/widget/components/AccountIntentTransactionHistory.tsx +36 -36
  203. package/src/widget/components/AccountIntentTransactionHistoryButton.tsx +22 -0
  204. package/src/widget/components/AccountSettings.tsx +70 -41
  205. package/src/widget/components/ChainFilterDropdown.tsx +24 -3
  206. package/src/widget/components/ClassicSwap.tsx +44 -107
  207. package/src/widget/components/ConfigDisplay.tsx +0 -11
  208. package/src/widget/components/ConnectWallet.tsx +4 -1
  209. package/src/widget/components/ConnectedWallets.tsx +51 -25
  210. package/src/widget/components/DynamicInputStyles.tsx +76 -0
  211. package/src/widget/components/DynamicSizeInputField.tsx +109 -0
  212. package/src/widget/components/Earn.tsx +34 -45
  213. package/src/widget/components/ErrorAnimationIcon.tsx +130 -0
  214. package/src/widget/components/FeeBreakdown.tsx +155 -0
  215. package/src/widget/components/FeeOption.tsx +2 -2
  216. package/src/widget/components/FeeOptions.tsx +151 -112
  217. package/src/widget/components/Fund.tsx +10 -29
  218. package/src/widget/components/FundMethods.tsx +4 -3
  219. package/src/widget/components/FundSwap.tsx +2 -3
  220. package/src/widget/components/FundingMethodSelectorButton.tsx +24 -14
  221. package/src/widget/components/Identicon.tsx +164 -95
  222. package/src/widget/components/MeshConnectExchanges.tsx +2 -15
  223. package/src/widget/components/Modal.tsx +0 -12
  224. package/src/widget/components/Pay.tsx +72 -75
  225. package/src/widget/components/PoolDeposit.tsx +221 -242
  226. package/src/widget/components/PoolWithdraw.tsx +347 -469
  227. package/src/widget/components/PriceImpactWarning.tsx +1 -1
  228. package/src/widget/components/QuoteDetails.tsx +906 -484
  229. package/src/widget/components/Receipt.tsx +16 -2
  230. package/src/widget/components/RecipientSelectorButton.tsx +7 -5
  231. package/src/widget/components/Recipients.tsx +1 -1
  232. package/src/widget/components/ScreenHeader.tsx +60 -36
  233. package/src/widget/components/Swap.tsx +2 -3
  234. package/src/widget/components/ThemeProvider.tsx +2 -1
  235. package/src/widget/components/TokenDisplayNonSelectable.tsx +40 -0
  236. package/src/widget/components/TokenImage.tsx +1 -1
  237. package/src/widget/components/TokenSelector.tsx +62 -53
  238. package/src/widget/components/TokenSelectorButton.tsx +38 -15
  239. package/src/widget/components/Tooltip.tsx +51 -0
  240. package/src/widget/components/TransferPendingVertical.tsx +12 -8
  241. package/src/widget/components/WaasFeeOptions.tsx +139 -4
  242. package/src/widget/components/WalletConfirmation.tsx +23 -13
  243. package/src/widget/components/WalletConnect.tsx +93 -29
  244. package/src/widget/hooks/useAmountUsd.ts +9 -9
  245. package/src/widget/hooks/useCheckout.ts +97 -9
  246. package/src/widget/hooks/useDefaultTokenSelection.tsx +27 -21
  247. package/src/widget/hooks/useQuote.ts +466 -0
  248. package/src/widget/hooks/useSelectedFeeToken.tsx +32 -37
  249. package/src/widget/hooks/useSendForm.ts +45 -51
  250. package/src/widget/hooks/useTokenList.ts +34 -26
  251. package/src/widget/hooks/useWalletConnectionContext.tsx +128 -0
  252. package/src/widget/widget.tsx +365 -390
  253. package/dist/apiClient.d.ts +0 -9
  254. package/dist/apiClient.d.ts.map +0 -1
  255. package/dist/intentEntrypoint.d.ts +0 -114
  256. package/dist/intentEntrypoint.d.ts.map +0 -1
  257. package/dist/metaTxnMonitor.d.ts +0 -15
  258. package/dist/metaTxnMonitor.d.ts.map +0 -1
  259. package/dist/metaTxns.d.ts +0 -11
  260. package/dist/metaTxns.d.ts.map +0 -1
  261. package/dist/relayer.d.ts +0 -43
  262. package/dist/relayer.d.ts.map +0 -1
  263. package/src/apiClient.ts +0 -35
  264. package/src/intentEntrypoint.ts +0 -203
  265. package/src/metaTxnMonitor.ts +0 -171
  266. package/src/metaTxns.ts +0 -45
  267. package/src/relayer.ts +0 -289
package/src/relayer.ts DELETED
@@ -1,289 +0,0 @@
1
- import { Relayer } from "@0xsequence/relayer"
2
- import { useMemo } from "react"
3
- import { getChainInfo, getRpcUrl } from "./chains.js"
4
- import { Hex } from "ox"
5
- import { getSequenceProjectAccessKey, getSequenceEnv } from "./config.js"
6
- import { logger } from "./logger.js"
7
- import { bigintReplacer } from "./utils.js"
8
- import {
9
- gnosis,
10
- bsc,
11
- katana,
12
- soneium,
13
- xai,
14
- etherlink,
15
- mainnet,
16
- arbitrum,
17
- base,
18
- baseSepolia,
19
- polygon,
20
- apeChain,
21
- arbitrumNova,
22
- avalanche,
23
- b3,
24
- blast,
25
- optimism,
26
- } from "viem/chains"
27
- import { somnia } from "./customChains.js"
28
-
29
- export interface MetaTxnReceiptLog {
30
- address: string
31
- topics: Array<string>
32
- data: string
33
- }
34
-
35
- export interface MetaTxnReceipt {
36
- id: string
37
- status: string
38
- revertReason?: string
39
- index: number
40
- logs: Array<MetaTxnReceiptLog>
41
- receipts: Array<MetaTxnReceipt>
42
- blockNumber: string
43
- txnHash: string
44
- txnReceipt: string
45
- }
46
-
47
- export type RelayerOperationStatus = Relayer.OperationStatus
48
- export type RelayerOperationFailedStatus = Relayer.OperationFailedStatus
49
- export type RelayerOperationPendingStatus = Relayer.OperationPendingStatus
50
- export type RelayerOperationConfirmedStatus = Relayer.OperationConfirmedStatus
51
- export type RelayerOperationUnknownStatus = Relayer.OperationUnknownStatus
52
-
53
- export type RelayerConfig = {
54
- hostname: string
55
- chainId: number
56
- rpcUrl: string
57
- }
58
-
59
- export type RelayerEnv = "local" | "cors-anywhere" | "dev" | "prod"
60
-
61
- export type RelayerEnvConfig = {
62
- env?: RelayerEnv
63
- }
64
-
65
- export type { Relayer }
66
-
67
- const relayerChainIdToSlug: Record<number, string> = {
68
- [arbitrum.id]: "arbitrum",
69
- [base.id]: "base",
70
- [baseSepolia.id]: "base-sepolia",
71
- [polygon.id]: "polygon",
72
- [mainnet.id]: "mainnet",
73
- [apeChain.id]: "apechain",
74
- [arbitrumNova.id]: "arbitrum-nova",
75
- [avalanche.id]: "avalanche",
76
- [optimism.id]: "optimism",
77
- [b3.id]: "b3",
78
- [blast.id]: "blast",
79
- [gnosis.id]: "gnosis",
80
- [soneium.id]: "soneium",
81
- [somnia.id]: "somnia",
82
- [xai.id]: "xai",
83
- [bsc.id]: "bsc",
84
- [katana.id]: "katana",
85
- [etherlink.id]: "etherlink",
86
- }
87
-
88
- const relayerLocalhostUrlMap: Record<number, string> = {
89
- [mainnet.id]: "http://0.0.0.0:9969",
90
- [katana.id]: "http://0.0.0.0:9994",
91
- [apeChain.id]: "http://0.0.0.0:9995",
92
- [base.id]: "http://0.0.0.0:9996",
93
- [arbitrum.id]: "http://0.0.0.0:9997",
94
- [optimism.id]: "http://0.0.0.0:9998",
95
- [polygon.id]: "http://0.0.0.0:9999",
96
- }
97
-
98
- export function getRelayerLocalhostUrl(chainId: number): string {
99
- return relayerLocalhostUrlMap[chainId] ?? ""
100
- }
101
-
102
- export function getRelayerChainIdToSlug(chainId: number): string {
103
- return relayerChainIdToSlug[chainId] ?? ""
104
- }
105
-
106
- // Wrapped fetch function that includes access token header
107
- function wrappedFetch(
108
- input: RequestInfo,
109
- init?: RequestInit,
110
- ): Promise<Response> {
111
- if (typeof window === "undefined") {
112
- return Promise.resolve(new Response("Not available in server environment"))
113
- }
114
-
115
- const headers = new Headers(init?.headers)
116
- headers.set("x-access-key", getSequenceProjectAccessKey())
117
-
118
- return fetch(input, {
119
- ...init,
120
- headers,
121
- })
122
- }
123
-
124
- export function getBackupRelayer(
125
- chainId: number,
126
- ): Relayer.RpcRelayer | undefined {
127
- if (chainId === 42161) {
128
- return new Relayer.RpcRelayer(
129
- "https://a1b4a8c5d856.ngrok.app/",
130
- chainId,
131
- getRpcUrl(chainId)!,
132
- )
133
- } else if (chainId === 8453) {
134
- return new Relayer.RpcRelayer(
135
- "https://644a6aeb891e.ngrok.app/",
136
- chainId,
137
- getRpcUrl(chainId)!,
138
- )
139
- }
140
-
141
- return undefined
142
- }
143
-
144
- // TODO: add relayer url to config
145
- export function getRelayerUrl(
146
- config: RelayerEnvConfig = {
147
- env: getSequenceEnv() as RelayerEnv,
148
- },
149
- chainId: number,
150
- ): string {
151
- let relayerUrl = ""
152
- if (config.env === "local") {
153
- relayerUrl = getRelayerLocalhostUrl(chainId)
154
- return relayerUrl
155
- }
156
-
157
- // For cors-anywhere, dev, and production environments
158
- const baseUrl =
159
- config.env === "cors-anywhere"
160
- ? "http://localhost:8080/https://"
161
- : config.env === "dev"
162
- ? "https://dev-relayer.sequence.app"
163
- : "https://"
164
-
165
- const chainSlug = getRelayerChainIdToSlug(chainId)
166
-
167
- if (!config.env || config.env === "prod") {
168
- if (chainSlug) {
169
- relayerUrl = `https://${chainSlug}-relayer.sequence.app`
170
- } else {
171
- relayerUrl = `${baseUrl}${getChainInfo(chainId)!.name?.replace(" ", "-")}-relayer.sequence.app`
172
- }
173
- }
174
-
175
- // Chain-specific relayer endpoints
176
- if (config.env === "dev") {
177
- if (chainSlug) {
178
- relayerUrl = `https://dev-${chainSlug}-relayer.sequence.app`
179
- } else {
180
- // Fallback to general dev relayer for other chains if V3 is specified but chain not V3-supported
181
- relayerUrl = `${baseUrl}${getChainInfo(chainId)!.name?.replace(" ", "-")}-relayer.sequence.app`
182
- }
183
- }
184
-
185
- return relayerUrl
186
- }
187
-
188
- export function getRelayer(
189
- config: RelayerEnvConfig = {
190
- env: getSequenceEnv() as RelayerEnv,
191
- },
192
- chainId: number,
193
- ): Relayer.RpcRelayer {
194
- const chain = getChainInfo(chainId)
195
-
196
- if (!chain) {
197
- throw new Error(`Chain with id ${chainId} not found`)
198
- }
199
-
200
- const rpcUrl = chain.rpcUrls.default.http[0]
201
- if (!rpcUrl) {
202
- throw new Error(`No RPC URL found for chain ${chainId}`)
203
- }
204
-
205
- const relayerUrl = getRelayerUrl(config, chainId)
206
-
207
- const relayer = new Relayer.RpcRelayer(
208
- relayerUrl,
209
- chainId,
210
- rpcUrl,
211
- wrappedFetch,
212
- )
213
-
214
- // Monkey-patch the sendMetaTxn method to handle quote correctly
215
- // This fixes the double serialization issue where JSON.stringify was adding extra quotes
216
- relayer.sendMetaTxn = async (
217
- walletAddress,
218
- to,
219
- data,
220
- _chainId,
221
- quote,
222
- preconditions,
223
- ) => {
224
- const rpcCall: any = {
225
- walletAddress: walletAddress,
226
- contract: to,
227
- input: data,
228
- }
229
-
230
- const result = await (relayer as any).client.sendMetaTxn({
231
- call: rpcCall,
232
- quote: quote
233
- ? typeof (quote as any)._quote === "string"
234
- ? (quote as any)._quote
235
- : (quote as any)._quote?.toJSON
236
- ? (quote as any)._quote.toJSON()
237
- : JSON.stringify((quote as any)._quote, bigintReplacer, 2)
238
- : undefined,
239
- preconditions: preconditions,
240
- })
241
-
242
- if (!result.status) {
243
- logger.console.error("RpcRelayer.relay failed", result)
244
- throw new Error(`Relay failed: TxnHash ${result.txnHash}`)
245
- }
246
-
247
- return {
248
- opHash: Hex.fromString(
249
- result.txnHash.startsWith("0x")
250
- ? result.txnHash
251
- : `0x${result.txnHash}`,
252
- ),
253
- }
254
- }
255
-
256
- return relayer
257
- }
258
-
259
- export function useRelayers(
260
- config: RelayerEnvConfig = {
261
- env: getSequenceEnv() as RelayerEnv,
262
- },
263
- ): {
264
- relayers: Map<number, Relayer.RpcRelayer>
265
- getRelayer: (chainId: number) => Relayer.RpcRelayer
266
- getBackupRelayer: (chainId: number) => Relayer.RpcRelayer | undefined
267
- } {
268
- const relayers = useMemo(() => {
269
- const relayerMap = new Map<number, Relayer.RpcRelayer>()
270
- return relayerMap
271
- }, [])
272
-
273
- const getCachedRelayer = (chainId: number): Relayer.RpcRelayer => {
274
- let relayer = relayers.get(chainId)
275
-
276
- if (!relayer) {
277
- relayer = getRelayer(config, chainId)
278
- relayers.set(chainId, relayer)
279
- }
280
-
281
- return relayer
282
- }
283
-
284
- return {
285
- relayers,
286
- getRelayer: getCachedRelayer,
287
- getBackupRelayer,
288
- }
289
- }