0xtrails 0.2.0 → 0.2.1

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 (113) hide show
  1. package/dist/analytics.d.ts +1 -0
  2. package/dist/analytics.d.ts.map +1 -1
  3. package/dist/{ccip-D6ToCrWc.js → ccip-BbfANth7.js} +1 -1
  4. package/dist/chains.d.ts.map +1 -1
  5. package/dist/config.d.ts +1 -2
  6. package/dist/config.d.ts.map +1 -1
  7. package/dist/constants.d.ts +2 -2
  8. package/dist/constants.d.ts.map +1 -1
  9. package/dist/gasless.d.ts +19 -7
  10. package/dist/gasless.d.ts.map +1 -1
  11. package/dist/{index-BqgeTLL8.js → index-WpIVoh3X.js} +27626 -26572
  12. package/dist/index.d.ts +1 -1
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/index.js +68 -68
  15. package/dist/indexerClient.d.ts +10 -0
  16. package/dist/indexerClient.d.ts.map +1 -1
  17. package/dist/intentEntrypoint.d.ts +40 -14
  18. package/dist/intentEntrypoint.d.ts.map +1 -1
  19. package/dist/intents.d.ts.map +1 -1
  20. package/dist/prepareSend.d.ts +11 -8
  21. package/dist/prepareSend.d.ts.map +1 -1
  22. package/dist/relayer.d.ts.map +1 -1
  23. package/dist/trails.d.ts.map +1 -1
  24. package/dist/trailsClient.d.ts.map +1 -1
  25. package/dist/trailsRouter.d.ts +22 -0
  26. package/dist/trailsRouter.d.ts.map +1 -0
  27. package/dist/transactions.d.ts +0 -1
  28. package/dist/transactions.d.ts.map +1 -1
  29. package/dist/widget/components/AccountSettings.d.ts.map +1 -1
  30. package/dist/widget/components/ClassicSwap.d.ts.map +1 -1
  31. package/dist/widget/components/ConfigDisplay.d.ts.map +1 -1
  32. package/dist/widget/components/ConnectWallet.d.ts.map +1 -1
  33. package/dist/widget/components/ConnectedWallets.d.ts.map +1 -1
  34. package/dist/widget/components/Earn.d.ts.map +1 -1
  35. package/dist/widget/components/FeeOption.d.ts +22 -0
  36. package/dist/widget/components/FeeOption.d.ts.map +1 -0
  37. package/dist/widget/components/FeeOptions.d.ts +13 -17
  38. package/dist/widget/components/FeeOptions.d.ts.map +1 -1
  39. package/dist/widget/components/Fund.d.ts.map +1 -1
  40. package/dist/widget/components/FundMethods.d.ts +1 -1
  41. package/dist/widget/components/FundMethods.d.ts.map +1 -1
  42. package/dist/widget/components/FundSendForm.d.ts.map +1 -1
  43. package/dist/widget/components/MeshConnectExchanges.d.ts +5 -2
  44. package/dist/widget/components/MeshConnectExchanges.d.ts.map +1 -1
  45. package/dist/widget/components/MeshConnectFlow.d.ts +2 -0
  46. package/dist/widget/components/MeshConnectFlow.d.ts.map +1 -1
  47. package/dist/widget/components/NativeGasOption.d.ts +12 -0
  48. package/dist/widget/components/NativeGasOption.d.ts.map +1 -0
  49. package/dist/widget/components/Pay.d.ts.map +1 -1
  50. package/dist/widget/components/PaySendForm.d.ts.map +1 -1
  51. package/dist/widget/components/QuoteDetails.d.ts.map +1 -1
  52. package/dist/widget/components/TokenSelector.d.ts.map +1 -1
  53. package/dist/widget/components/UserPreferences.d.ts.map +1 -1
  54. package/dist/widget/hooks/useBack.d.ts +2 -0
  55. package/dist/widget/hooks/useBack.d.ts.map +1 -1
  56. package/dist/widget/hooks/useCurrentScreen.d.ts +1 -1
  57. package/dist/widget/hooks/useCurrentScreen.d.ts.map +1 -1
  58. package/dist/widget/hooks/useDefaultTokenSelection.d.ts.map +1 -1
  59. package/dist/widget/hooks/useSelectedFeeToken.d.ts +32 -0
  60. package/dist/widget/hooks/useSelectedFeeToken.d.ts.map +1 -0
  61. package/dist/widget/hooks/useSelectedMeshExchange.d.ts +14 -0
  62. package/dist/widget/hooks/useSelectedMeshExchange.d.ts.map +1 -0
  63. package/dist/widget/hooks/useSendForm.d.ts +8 -13
  64. package/dist/widget/hooks/useSendForm.d.ts.map +1 -1
  65. package/dist/widget/index.js +1 -1
  66. package/dist/widget/widget.d.ts.map +1 -1
  67. package/package.json +29 -28
  68. package/src/analytics.ts +6 -0
  69. package/src/chains.ts +10 -0
  70. package/src/config.ts +25 -10
  71. package/src/constants.ts +11 -10
  72. package/src/gasless.ts +162 -109
  73. package/src/index.ts +1 -1
  74. package/src/indexerClient.ts +73 -1
  75. package/src/intentEntrypoint.ts +66 -101
  76. package/src/intents.ts +0 -2
  77. package/src/prepareSend.ts +1409 -887
  78. package/src/relayer.ts +4 -3
  79. package/src/trails.ts +1 -3
  80. package/src/trailsClient.ts +4 -1
  81. package/src/{balanceInjector.ts → trailsRouter.ts} +14 -14
  82. package/src/transactions.ts +4 -54
  83. package/src/widget/compiled.css +1 -1
  84. package/src/widget/components/AccountSettings.tsx +7 -1
  85. package/src/widget/components/ClassicSwap.tsx +173 -175
  86. package/src/widget/components/ConfigDisplay.tsx +34 -1
  87. package/src/widget/components/ConnectWallet.tsx +168 -11
  88. package/src/widget/components/ConnectedWallets.tsx +184 -102
  89. package/src/widget/components/DebugToast.tsx +3 -3
  90. package/src/widget/components/Earn.tsx +4 -27
  91. package/src/widget/components/FeeOption.tsx +78 -0
  92. package/src/widget/components/FeeOptions.tsx +192 -127
  93. package/src/widget/components/Fund.tsx +18 -27
  94. package/src/widget/components/FundMethods.tsx +3 -3
  95. package/src/widget/components/FundSendForm.tsx +0 -33
  96. package/src/widget/components/MeshConnectExchanges.tsx +32 -3
  97. package/src/widget/components/MeshConnectFlow.tsx +23 -4
  98. package/src/widget/components/NativeGasOption.tsx +99 -0
  99. package/src/widget/components/Pay.tsx +36 -32
  100. package/src/widget/components/PaySendForm.tsx +0 -37
  101. package/src/widget/components/QuoteDetails.tsx +0 -29
  102. package/src/widget/components/TokenSelector.tsx +11 -0
  103. package/src/widget/components/TransferPendingVertical.tsx +1 -1
  104. package/src/widget/components/UserPreferences.tsx +3 -4
  105. package/src/widget/hooks/useBack.tsx +4 -0
  106. package/src/widget/hooks/useCurrentScreen.tsx +1 -0
  107. package/src/widget/hooks/useDefaultTokenSelection.tsx +3 -7
  108. package/src/widget/hooks/useSelectedFeeToken.tsx +299 -0
  109. package/src/widget/hooks/useSelectedMeshExchange.tsx +46 -0
  110. package/src/widget/hooks/useSendForm.ts +78 -23
  111. package/src/widget/widget.tsx +173 -111
  112. package/dist/balanceInjector.d.ts +0 -22
  113. package/dist/balanceInjector.d.ts.map +0 -1
@@ -1,4 +1,4 @@
1
- import { af as r, ae as o } from "../index-BqgeTLL8.js";
1
+ import { af as r, ae as o } from "../index-WpIVoh3X.js";
2
2
  export {
3
3
  r as TrailsWidget,
4
4
  o as createModalController
@@ -1 +1 @@
1
- {"version":3,"file":"widget.d.ts","sourceRoot":"","sources":["../../src/widget/widget.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"widget.d.ts","sourceRoot":"","sources":["../../src/widget/widget.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "0xtrails",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "description": "SDK for Trails",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -22,51 +22,43 @@
22
22
  "author": "",
23
23
  "license": "Apache-2.0",
24
24
  "dependencies": {
25
- "@0xsequence/account": "^2.3.29",
26
- "@0xsequence/api": "^2.3.29",
27
- "@0xsequence/connect": "^5.3.20",
28
- "@0xsequence/core": "^2.3.29",
25
+ "@0xsequence/account": "^2.3.30",
26
+ "@0xsequence/api": "^2.3.30",
27
+ "@0xsequence/connect": "^5.3.23",
28
+ "@0xsequence/core": "^2.3.30",
29
29
  "@0xsequence/design-system": "^2.2.5",
30
- "@0xsequence/guard": "^2.3.29",
31
- "@0xsequence/hooks": "^5.3.20",
32
- "@0xsequence/indexer": "^2.3.29",
33
- "@0xsequence/metadata": "^2.3.29",
34
- "@0xsequence/network": "^2.3.29",
35
- "@0xsequence/relayer": "^2.3.29",
36
- "@0xsequence/sessions": "^2.3.29",
37
- "@0xsequence/signhub": "^2.3.29",
38
- "@0xsequence/trails-api": "^0.1.0",
30
+ "@0xsequence/guard": "^2.3.30",
31
+ "@0xsequence/hooks": "^5.3.23",
32
+ "@0xsequence/indexer": "^2.3.30",
33
+ "@0xsequence/metadata": "^2.3.30",
34
+ "@0xsequence/network": "^2.3.30",
35
+ "@0xsequence/relayer": "^2.3.30",
36
+ "@0xsequence/sessions": "^2.3.30",
37
+ "@0xsequence/signhub": "^2.3.30",
38
+ "@0xsequence/trails-api": "^0.1.1",
39
39
  "@0xsequence/wallet-core": "^0.0.0-20250917144328",
40
40
  "@0xsequence/wallet-primitives": "^0.0.0-20250917144328",
41
41
  "@aave/react": "^0.4.0",
42
42
  "@databeat/tracker": "^0.9.3",
43
+ "@emotion/is-prop-valid": "^1.3.4",
43
44
  "@meshconnect/web-link-sdk": "3.2.14",
44
45
  "@reservoir0x/relay-sdk": "^2.4.0",
45
- "@tanstack/react-query": "5.90.2",
46
+ "@tanstack/react-query": "^5.90.3",
46
47
  "@types/qrcode": "^1.5.5",
47
48
  "buffer": "^6.0.3",
48
- "framer-motion": "^12.23.22",
49
+ "framer-motion": "^12.23.24",
49
50
  "lucide-react": "^0.493.0",
50
- "motion": "^12.23.22",
51
+ "motion": "^12.23.24",
51
52
  "ox": "^0.7.2",
52
53
  "qrcode": "^1.5.4"
53
54
  },
54
- "peerDependencies": {
55
- "@0xsequence/hooks": "^5.3.13",
56
- "@tanstack/react-query": "^5.85.5",
57
- "ethers": "^6.15.0",
58
- "react": "^19.0.0",
59
- "react-dom": "^19.0.0",
60
- "viem": "^2.37.11",
61
- "wagmi": "^2.16.9"
62
- },
63
55
  "devDependencies": {
64
56
  "@tailwindcss/cli": "^4.1.14",
65
57
  "@testing-library/jest-dom": "^6.9.1",
66
58
  "@testing-library/react": "^16.3.0",
67
- "@types/node": "^22.18.8",
59
+ "@types/node": "^22.18.10",
68
60
  "@types/react": "^19.2.2",
69
- "@types/react-dom": "^19.2.1",
61
+ "@types/react-dom": "^19.2.2",
70
62
  "@vitejs/plugin-react": "^4.7.0",
71
63
  "dotenv": "^16.6.1",
72
64
  "globals": "^15.15.0",
@@ -81,6 +73,15 @@
81
73
  "vite-plugin-dts": "^4.5.4",
82
74
  "vitest": "^3.2.4"
83
75
  },
76
+ "peerDependencies": {
77
+ "@0xsequence/hooks": "^5.3.23",
78
+ "@tanstack/react-query": "^5.90.3",
79
+ "ethers": "^6.15.0",
80
+ "react": "^19.2.0",
81
+ "react-dom": "^19.2.0",
82
+ "viem": "^2.38.2",
83
+ "wagmi": "^2.18.0"
84
+ },
84
85
  "exports": {
85
86
  ".": {
86
87
  "import": "./dist/index.js",
package/src/analytics.ts CHANGED
@@ -4,9 +4,14 @@ import { DATABEAT_KEY, DATABEAT_SERVER } from "./constants.js"
4
4
  import { getQueryParam } from "./queryParams.js"
5
5
  import { getSequenceProjectAccessKey, getEnvVar } from "./config.js"
6
6
  import { logger } from "./logger.js"
7
+ import packageJson from "../package.json" with { type: "json" }
7
8
 
8
9
  let checkoutIdSingleton: string | null = null
9
10
 
11
+ export function getSdkVersion() {
12
+ return packageJson.version || "dev"
13
+ }
14
+
10
15
  export function hasCheckoutId() {
11
16
  return checkoutIdSingleton !== null
12
17
  }
@@ -180,6 +185,7 @@ abstract class BaseAnalytics {
180
185
  ...this.getDocumentProps(),
181
186
  ...this.getWindowProps(),
182
187
  sequenceProjectAccessKey: getSequenceProjectAccessKey(),
188
+ sdkVersion: getSdkVersion(),
183
189
  }
184
190
  }
185
191
 
package/src/chains.ts CHANGED
@@ -197,6 +197,16 @@ export function getChainInfo(
197
197
  }
198
198
  }
199
199
 
200
+ // Override explorer URLs for specific chains
201
+ if (chainId === katana.id && chainInfo) {
202
+ chainInfo.blockExplorers = {
203
+ default: {
204
+ name: "Katanascan",
205
+ url: "https://katanascan.com", // use katanascan instead of explorer.katanarpc.com
206
+ },
207
+ }
208
+ }
209
+
200
210
  return chainInfo
201
211
  }
202
212
 
package/src/config.ts CHANGED
@@ -15,7 +15,7 @@ import {
15
15
  } from "./constants.js"
16
16
  import { getQueryParam } from "./queryParams.js"
17
17
 
18
- type SequenceEnv = "prod" | "dev" | "local" | "cors-anywhere"
18
+ export type SequenceEnv = "prod" | "dev" | "local" | "cors-anywhere"
19
19
 
20
20
  export const globalConfig: {
21
21
  sequenceProjectAccessKey: string
@@ -53,12 +53,18 @@ export function declareSequenceEnv(): SequenceEnv {
53
53
  if (getEnvVar("ENV") === "development" || getEnvVar("ENV") === "dev") {
54
54
  return "dev"
55
55
  }
56
- if (
57
- getEnvVar("CF_PAGES_BRANCH") === "master" ||
58
- getEnvVar("CF_PAGES_BRANCH") === "main" ||
59
- getEnvVar("ENV") === "production" ||
60
- getEnvVar("ENV") === "prod"
61
- ) {
56
+
57
+ // Special handling for Cloudflare Pages branches
58
+ const cfPagesBranch = getEnvVar("CF_PAGES_BRANCH")
59
+ if (cfPagesBranch) {
60
+ // If running on Cloudflare Pages, all branches except "production" default to dev
61
+ if (cfPagesBranch === "prod" || cfPagesBranch === "production") {
62
+ return "prod"
63
+ }
64
+ return "dev"
65
+ }
66
+
67
+ if (getEnvVar("ENV") === "production" || getEnvVar("ENV") === "prod") {
62
68
  return "prod"
63
69
  }
64
70
  }
@@ -101,14 +107,21 @@ export function declareSequenceNodeGatewayUrl() {
101
107
  }
102
108
 
103
109
  export function declareSequenceProjectAccessKey() {
110
+ const sequenceEnv = declareSequenceEnv()
111
+
112
+ // Check for explicit env var override
104
113
  if (typeof process !== "undefined") {
105
- if (getEnvVar("SEQUENCE_PROJECT_ACCESS_KEY")) {
106
- return getEnvVar("SEQUENCE_PROJECT_ACCESS_KEY")
114
+ const envVarKey = getEnvVar("SEQUENCE_PROJECT_ACCESS_KEY")
115
+ if (envVarKey) {
116
+ return envVarKey
107
117
  }
108
118
  }
109
- if (declareSequenceEnv() === "prod") {
119
+
120
+ // Use dev/prod keys based on environment
121
+ if (sequenceEnv === "prod") {
110
122
  return PROD_SEQUENCE_PROJECT_ACCESS_KEY
111
123
  }
124
+
112
125
  return DEV_SEQUENCE_PROJECT_ACCESS_KEY
113
126
  }
114
127
 
@@ -176,6 +189,7 @@ export function setSequenceEnv(sequenceEnv: SequenceEnv) {
176
189
  setSequenceApiUrl(PROD_SEQUENCE_API_URL)
177
190
  setTrailsApiUrl(PROD_TRAILS_API_URL)
178
191
  setSequenceNodeGatewayUrl(PROD_SEQUENCE_NODE_GATEWAY_URL)
192
+ setSequenceProjectAccessKey(PROD_SEQUENCE_PROJECT_ACCESS_KEY)
179
193
  }
180
194
 
181
195
  if (sequenceEnv === "local") {
@@ -192,6 +206,7 @@ export function setSequenceEnv(sequenceEnv: SequenceEnv) {
192
206
  setSequenceApiUrl(DEV_SEQUENCE_API_URL)
193
207
  setTrailsApiUrl(DEV_TRAILS_API_URL)
194
208
  setSequenceNodeGatewayUrl(DEV_SEQUENCE_NODE_GATEWAY_URL)
209
+ setSequenceProjectAccessKey(DEV_SEQUENCE_PROJECT_ACCESS_KEY)
195
210
  }
196
211
  }
197
212
 
package/src/constants.ts CHANGED
@@ -14,10 +14,13 @@ export const SEQUENCE_V3_CONTRACT_ADDRESSES_OVERRIDES: AddressOverrides = {
14
14
  sequenceWalletMainModuleAddress: SEQUENCE_V3_CONTRACT_ADDRESSES.stage1,
15
15
  sequenceWalletMainModuleUpgradableAddress:
16
16
  SEQUENCE_V3_CONTRACT_ADDRESSES.stage2,
17
- }
17
+ } as AddressOverrides
18
+
19
+ export const TRAILS_ROUTER_ADDRESS =
20
+ "0x07abd6f71aE3EAD08b2B6D5d091eE24d32dc1Dfa"
18
21
 
19
- export const TRAILS_BALANCE_INJECTOR_ADDRESS =
20
- "0xAca1813C717954c6Dc4Cbf69192b3Ef5781149C0"
22
+ export const TRAILS_INTENT_ENTRYPOINT_ADDRESS =
23
+ "0xf9dF60584Da03f8D83fF1Bed663465734B2221a7"
21
24
 
22
25
  export const ATTESATION_SIGNER_ADDRESS =
23
26
  "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266"
@@ -33,12 +36,12 @@ export const DEV_SEQUENCE_INDEXER_URL = "https://dev-indexer.sequence.app"
33
36
  export const DEV_SEQUENCE_API_URL = "https://dev-api.sequence.app"
34
37
  export const DEV_TRAILS_API_URL = "https://dev-trails-api.sequence-dev.app"
35
38
 
39
+ // TODO: Update with new single address once latest contracts are deployed
36
40
  export const intentEntrypoints: Record<number, `0x${string}`> = {
37
- 8453: "0x2bf4c63199eD7D8A737E8DB2cC19E0C0103F6bE3",
38
- 84532: "0xdcd9160492C6D43ABbd28D4d06F68ad77f1A0F2b",
39
- 421614: "0xf18A16E1C778baCA5d6f7F48cC4c9bb913e5e579",
40
- 42161: "0x674827B6BE8780DBdb96DC02c735275e3a982c90",
41
- 137: "0x4dBb20eA3A969F1A44d7653D4Dc8632B853E36DE",
41
+ 8453: "0x80DB82D640F9Df20Cfe89fa4E70B0EcC56f3715c", // Base
42
+ 42161: "0x20CC15eb516Ba56398c28CE1A567e3a82889Db46", // Arbitrum One
43
+ 137: "0x1C69bCdcD751785F2a3b815333B46AB150370E6E", // Polygon
44
+ 747474: "0x814A110fF7c664C26e6c3e2E6E85C23291e4359e", // Katana
42
45
  }
43
46
 
44
47
  // This is used for Sequence Indexer and API
@@ -57,5 +60,3 @@ export const DEFAULT_WALLETCONNECT_PROJECT_ID =
57
60
  export const SITE_URL = "https://trails.build/"
58
61
 
59
62
  export const DEFAULT_SLIPPAGE_TOLERANCE = "0.05" // 0.001 = 0.1%, 0.005 = 0.5%, 0.03 = 3%, 0.05 = 5%
60
-
61
- export const MINIMUM_USD_AMOUNT_FOR_SWAP = "0.15"
package/src/gasless.ts CHANGED
@@ -6,17 +6,13 @@ import type {
6
6
  PublicClient,
7
7
  WalletClient,
8
8
  } from "viem"
9
- import {
10
- encodeFunctionData,
11
- erc20Abi,
12
- getAddress,
13
- maxUint256,
14
- parseAbi,
15
- } from "viem"
9
+ import { encodeFunctionData, erc20Abi, getAddress, parseAbi } from "viem"
16
10
  import { PERMIT_ABI, TRANSFER_ABI, TRANSFER_FROM_ABI } from "./abi.js"
17
11
  import { attemptSwitchChain } from "./chainSwitch.js"
18
12
  import { logger } from "./logger.js"
19
13
 
14
+ const intentEntrypointDomainName = "TrailsIntentEntrypoint"
15
+
20
16
  export function splitSignature(signature: `0x${string}`): {
21
17
  r: `0x${string}`
22
18
  s: `0x${string}`
@@ -159,6 +155,14 @@ export async function getPermitSignature({
159
155
  throw new Error("No account found")
160
156
  }
161
157
 
158
+ // Validate that the connected wallet matches the token owner
159
+ if (walletClient.account.address.toLowerCase() !== signer.toLowerCase()) {
160
+ throw new Error(
161
+ `Connected wallet (${walletClient.account.address}) does not match token owner (${signer}). ` +
162
+ `Please connect the wallet that owns the tokens.`,
163
+ )
164
+ }
165
+
162
166
  // Get permit signature from connected account
163
167
  const nonce = await publicClient.readContract({
164
168
  address: tokenAddress as `0x${string}`,
@@ -204,16 +208,71 @@ export async function getPermitSignature({
204
208
  ],
205
209
  functionName: "version",
206
210
  })) as string
207
- } catch {
211
+ logger.console.log("[trails-sdk] Token version from contract:", version)
212
+ } catch (error) {
208
213
  logger.console.warn(
209
214
  "[trails-sdk] Token does not implement version(), defaulting to '1'",
215
+ error,
210
216
  )
211
217
  }
212
218
 
213
- const domain = {
219
+ // Special handling for Katana chain (747474)
220
+ // Katana USDC contract returns "0.5.0" from version() but uses "1" for EIP-712 domain
221
+ // The contract's version() is the implementation version, not the EIP-712 domain version
222
+ if (chain.id === 747474) {
223
+ logger.console.log(
224
+ "[trails-sdk] Katana chain detected, overriding version to '1' for EIP-712 domain compatibility",
225
+ )
226
+ version = "1"
227
+ }
228
+
229
+ // Log domain parameters for debugging
230
+ logger.console.log("[trails-sdk] Permit domain parameters:", {
214
231
  name,
215
232
  version,
216
233
  chainId: chain.id,
234
+ verifyingContract: tokenAddress,
235
+ signer,
236
+ spender,
237
+ amount: amount.toString(),
238
+ nonce: nonce.toString(),
239
+ deadline: deadline.toString(),
240
+ })
241
+
242
+ // Try to read the domain separator from the contract for comparison
243
+ let contractDomainSeparator: string | null = null
244
+ try {
245
+ contractDomainSeparator = (await publicClient.readContract({
246
+ address: tokenAddress as `0x${string}`,
247
+ abi: [
248
+ {
249
+ name: "DOMAIN_SEPARATOR",
250
+ type: "function",
251
+ stateMutability: "view",
252
+ inputs: [],
253
+ outputs: [{ name: "", type: "bytes32" }],
254
+ },
255
+ ],
256
+ functionName: "DOMAIN_SEPARATOR",
257
+ })) as string
258
+ logger.console.log(
259
+ "[trails-sdk] Contract domain separator:",
260
+ contractDomainSeparator,
261
+ )
262
+ } catch (error) {
263
+ logger.console.warn(
264
+ "[trails-sdk] Could not read DOMAIN_SEPARATOR from contract:",
265
+ error,
266
+ )
267
+ }
268
+
269
+ // Special handling for Katana chain ID
270
+ const chainId = chain.id
271
+
272
+ const domain = {
273
+ name,
274
+ version,
275
+ chainId,
217
276
  verifyingContract: tokenAddress as `0x${string}`,
218
277
  }
219
278
 
@@ -242,6 +301,7 @@ export async function getPermitSignature({
242
301
  })
243
302
 
244
303
  logger.console.log("[trails-sdk] Requesting permit signature...")
304
+ logger.console.log("[trails-sdk] Permit data:", permitData)
245
305
 
246
306
  const signature = await walletClient.signTypedData({
247
307
  account: walletClient.account,
@@ -251,6 +311,8 @@ export async function getPermitSignature({
251
311
  message: permitData,
252
312
  })
253
313
 
314
+ logger.console.log("[trails-sdk] Permit signature created:", signature)
315
+
254
316
  const { v, r, s } = splitSignature(signature)
255
317
 
256
318
  return { signature, deadline, v, r, s }
@@ -262,6 +324,10 @@ export type GetDepositToIntentWithPermitCalldataParams = {
262
324
  amount: bigint
263
325
  intentAddress: `0x${string}`
264
326
  deadline: bigint
327
+ nonce: bigint
328
+ feeToken: `0x${string}`
329
+ feeAmount: bigint
330
+ feeCollector: `0x${string}`
265
331
  permitAmount: bigint
266
332
  // permit signature
267
333
  v: number
@@ -279,6 +345,10 @@ export function getDepositToIntentWithPermitCalldata({
279
345
  amount,
280
346
  intentAddress,
281
347
  deadline,
348
+ nonce,
349
+ feeToken,
350
+ feeAmount,
351
+ feeCollector,
282
352
  permitAmount,
283
353
  v,
284
354
  r,
@@ -288,7 +358,7 @@ export function getDepositToIntentWithPermitCalldata({
288
358
  sigS,
289
359
  }: GetDepositToIntentWithPermitCalldataParams): Hex {
290
360
  const abi = parseAbi([
291
- "function depositToIntentWithPermit(address user, address token, uint256 amount, uint256 permitAmount, address intentAddress, uint256 deadline, uint8 v, bytes32 r, bytes32 s, uint8 sigV, bytes32 sigR, bytes32 sigS)",
361
+ "function depositToIntentWithPermit(address user, address token, uint256 amount, uint256 permitAmount, address intentAddress, uint256 deadline, uint256 nonce, address feeToken, uint256 feeAmount, address feeCollector, uint8 v, bytes32 r, bytes32 s, uint8 sigV, bytes32 sigR, bytes32 sigS)",
292
362
  ])
293
363
 
294
364
  return encodeFunctionData({
@@ -301,6 +371,10 @@ export function getDepositToIntentWithPermitCalldata({
301
371
  permitAmount,
302
372
  intentAddress,
303
373
  deadline,
374
+ nonce,
375
+ feeToken,
376
+ feeAmount,
377
+ feeCollector,
304
378
  v,
305
379
  r,
306
380
  s,
@@ -317,6 +391,10 @@ export type GetDepositToIntentWithoutPermitCalldataParams = {
317
391
  amount: bigint
318
392
  intentAddress: `0x${string}`
319
393
  deadline: bigint
394
+ nonce: bigint
395
+ feeToken: `0x${string}`
396
+ feeAmount: bigint
397
+ feeCollector: `0x${string}`
320
398
  sigV: number
321
399
  sigR: `0x${string}`
322
400
  sigS: `0x${string}`
@@ -328,18 +406,35 @@ export function getDepositToIntentWithoutPermitCalldata({
328
406
  amount,
329
407
  intentAddress,
330
408
  deadline,
409
+ nonce,
410
+ feeToken,
411
+ feeAmount,
412
+ feeCollector,
331
413
  sigV,
332
414
  sigR,
333
415
  sigS,
334
416
  }: GetDepositToIntentWithoutPermitCalldataParams): Hex {
335
417
  const abi = parseAbi([
336
- "function depositToIntent(address user, address token, uint256 amount, address intentAddress, uint256 deadline, uint8 sigV, bytes32 sigR, bytes32 sigS)",
418
+ "function depositToIntent(address user, address token, uint256 amount, address intentAddress, uint256 deadline, uint256 nonce, address feeToken, uint256 feeAmount, address feeCollector, uint8 sigV, bytes32 sigR, bytes32 sigS)",
337
419
  ])
338
420
 
339
421
  return encodeFunctionData({
340
422
  abi,
341
423
  functionName: "depositToIntent",
342
- args: [user, token, amount, intentAddress, deadline, sigV, sigR, sigS],
424
+ args: [
425
+ user,
426
+ token,
427
+ amount,
428
+ intentAddress,
429
+ deadline,
430
+ nonce,
431
+ feeToken,
432
+ feeAmount,
433
+ feeCollector,
434
+ sigV,
435
+ sigR,
436
+ sigS,
437
+ ],
343
438
  })
344
439
  }
345
440
 
@@ -354,100 +449,6 @@ export type GetDepositToIntentCallsParams = {
354
449
  chain: Chain
355
450
  }
356
451
 
357
- export async function getDepositToIntentCalls({
358
- publicClient,
359
- walletClient,
360
- account,
361
- intentEntrypoint,
362
- depositTokenAddress,
363
- depositTokenAmount,
364
- depositRecipient,
365
- chain,
366
- }: GetDepositToIntentCallsParams): Promise<
367
- Array<{ to: `0x${string}`; data: `0x${string}`; value: `0x${string}` }>
368
- > {
369
- const permitAmount = maxUint256
370
- const needsApproval = await getNeedsIntentEntrypointApproval({
371
- client: publicClient,
372
- token: depositTokenAddress,
373
- account: account.address,
374
- entrypoint: intentEntrypoint,
375
- amount: BigInt(depositTokenAmount),
376
- })
377
-
378
- const deadline = BigInt(Math.floor(Date.now() / 1000) + 3600) // 1 hour from now
379
-
380
- let approvalSignature = null
381
- if (needsApproval) {
382
- approvalSignature = await getPermitSignature({
383
- publicClient,
384
- walletClient,
385
- signer: account.address,
386
- spender: intentEntrypoint,
387
- tokenAddress: depositTokenAddress as `0x${string}`,
388
- amount: permitAmount,
389
- chain,
390
- deadline,
391
- })
392
- }
393
-
394
- const {
395
- v: signedIntentV,
396
- r: signedIntentR,
397
- s: signedIntentS,
398
- } = await signIntent({
399
- client: walletClient,
400
- intentParams: {
401
- user: account.address,
402
- token: depositTokenAddress as `0x${string}`,
403
- amount: BigInt(depositTokenAmount),
404
- intentAddress: depositRecipient as `0x${string}`,
405
- deadline,
406
- chainId: chain.id,
407
- contractAddress: intentEntrypoint,
408
- },
409
- })
410
-
411
- let calldata = null
412
- if (approvalSignature) {
413
- calldata = getDepositToIntentWithPermitCalldata({
414
- user: account.address,
415
- token: depositTokenAddress as `0x${string}`,
416
- amount: BigInt(depositTokenAmount),
417
- permitAmount,
418
- intentAddress: depositRecipient as `0x${string}`,
419
- deadline,
420
- v: approvalSignature.v,
421
- r: approvalSignature.r,
422
- s: approvalSignature.s,
423
- sigV: signedIntentV,
424
- sigR: signedIntentR,
425
- sigS: signedIntentS,
426
- })
427
- } else {
428
- calldata = getDepositToIntentWithoutPermitCalldata({
429
- user: account.address,
430
- token: depositTokenAddress as `0x${string}`,
431
- amount: BigInt(depositTokenAmount),
432
- intentAddress: depositRecipient as `0x${string}`,
433
- deadline,
434
- sigV: signedIntentV,
435
- sigR: signedIntentR,
436
- sigS: signedIntentS,
437
- })
438
- }
439
-
440
- const calls = [
441
- {
442
- to: intentEntrypoint as `0x${string}`,
443
- data: calldata as `0x${string}`,
444
- value: "0" as `0x${string}`,
445
- },
446
- ]
447
-
448
- return calls
449
- }
450
-
451
452
  export type GetNeedsIntentEntrypointApprovalParams = {
452
453
  client: PublicClient
453
454
  token: Address
@@ -473,6 +474,35 @@ export async function getNeedsIntentEntrypointApproval({
473
474
  return allowance < amount
474
475
  }
475
476
 
477
+ export type GetUserNonceParams = {
478
+ publicClient: PublicClient
479
+ userAddress: `0x${string}`
480
+ intentEntrypoint: `0x${string}`
481
+ }
482
+
483
+ export async function getUserNonce({
484
+ publicClient,
485
+ userAddress,
486
+ intentEntrypoint,
487
+ }: GetUserNonceParams): Promise<bigint> {
488
+ const nonce = await publicClient.readContract({
489
+ address: intentEntrypoint as `0x${string}`,
490
+ abi: [
491
+ {
492
+ name: "nonces",
493
+ type: "function",
494
+ stateMutability: "view",
495
+ inputs: [{ name: "user", type: "address" }],
496
+ outputs: [{ name: "", type: "uint256" }],
497
+ },
498
+ ],
499
+ functionName: "nonces",
500
+ args: [userAddress],
501
+ })
502
+
503
+ return nonce as bigint
504
+ }
505
+
476
506
  export type IntentParams = {
477
507
  user: `0x${string}`
478
508
  token: `0x${string}`
@@ -481,6 +511,9 @@ export type IntentParams = {
481
511
  deadline: bigint
482
512
  chainId: number
483
513
  contractAddress: `0x${string}`
514
+ nonce: bigint
515
+ feeAmount: bigint
516
+ feeCollector: `0x${string}`
484
517
  }
485
518
 
486
519
  export type SignIntentParams = {
@@ -507,20 +540,36 @@ export async function signIntent({
507
540
  contractAddress,
508
541
  } = intentParams
509
542
 
543
+ // Validate that the connected wallet matches the user
544
+ if (!client.account) {
545
+ throw new Error("No account found")
546
+ }
547
+
548
+ if (client.account.address.toLowerCase() !== user.toLowerCase()) {
549
+ throw new Error(
550
+ `Connected wallet (${client.account.address}) does not match intent user (${user}). ` +
551
+ `Please connect the wallet that owns the tokens.`,
552
+ )
553
+ }
554
+
510
555
  const domain = {
511
- name: "IntentEntrypoint",
556
+ name: intentEntrypointDomainName,
512
557
  version: "1",
513
558
  chainId,
514
559
  verifyingContract: contractAddress, // ✅ This fixes the signature mismatch
515
560
  }
516
561
 
517
562
  const types = {
518
- Intent: [
563
+ TrailsIntent: [
519
564
  { name: "user", type: "address" },
520
565
  { name: "token", type: "address" },
521
566
  { name: "amount", type: "uint256" },
522
567
  { name: "intentAddress", type: "address" },
523
568
  { name: "deadline", type: "uint256" },
569
+ { name: "chainId", type: "uint256" },
570
+ { name: "nonce", type: "uint256" },
571
+ { name: "feeAmount", type: "uint256" },
572
+ { name: "feeCollector", type: "address" },
524
573
  ],
525
574
  }
526
575
 
@@ -530,13 +579,17 @@ export async function signIntent({
530
579
  amount: BigInt(amount),
531
580
  intentAddress: getAddress(intentAddress),
532
581
  deadline: BigInt(deadline),
582
+ chainId: BigInt(chainId),
583
+ nonce: BigInt(intentParams.nonce),
584
+ feeAmount: BigInt(intentParams.feeAmount),
585
+ feeCollector: getAddress(intentParams.feeCollector),
533
586
  }
534
587
 
535
588
  const signature = await client.signTypedData({
536
589
  account: client.account as Account,
537
590
  domain,
538
591
  types,
539
- primaryType: "Intent",
592
+ primaryType: "TrailsIntent",
540
593
  message,
541
594
  })
542
595