@velora-dex/widget 0.0.12 → 0.0.13

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 (275) hide show
  1. package/dist/components/ui/drawer.d.ts +1 -1
  2. package/dist/components/ui/drawer.d.ts.map +1 -1
  3. package/dist/components/ui/drawer.js +1 -1
  4. package/dist/components/ui/drawer.js.map +1 -1
  5. package/dist/components/ui/dropdown-menu.js +25 -19
  6. package/dist/components/ui/dropdown-menu.js.map +1 -1
  7. package/dist/components/ui/vaul/browser.d.ts +8 -0
  8. package/dist/components/ui/vaul/browser.d.ts.map +1 -0
  9. package/dist/components/ui/vaul/browser.js +37 -0
  10. package/dist/components/ui/vaul/browser.js.map +1 -0
  11. package/dist/components/ui/vaul/constants.d.ts +12 -0
  12. package/dist/components/ui/vaul/constants.d.ts.map +1 -0
  13. package/dist/components/ui/vaul/constants.js +24 -0
  14. package/dist/components/ui/vaul/constants.js.map +1 -0
  15. package/dist/components/ui/vaul/context.d.ts +38 -0
  16. package/dist/components/ui/vaul/context.d.ts.map +1 -0
  17. package/dist/components/ui/vaul/context.js +72 -0
  18. package/dist/components/ui/vaul/context.js.map +1 -0
  19. package/dist/components/ui/vaul/helpers.d.ts +17 -0
  20. package/dist/components/ui/vaul/helpers.d.ts.map +1 -0
  21. package/dist/components/ui/vaul/helpers.js +87 -0
  22. package/dist/components/ui/vaul/helpers.js.map +1 -0
  23. package/dist/components/ui/vaul/index.d.ts +140 -0
  24. package/dist/components/ui/vaul/index.d.ts.map +1 -0
  25. package/dist/components/ui/vaul/index.js +807 -0
  26. package/dist/components/ui/vaul/index.js.map +1 -0
  27. package/dist/components/ui/vaul/types.d.ts +7 -0
  28. package/dist/components/ui/vaul/types.d.ts.map +1 -0
  29. package/dist/components/ui/vaul/use-composed-refs.d.ts +14 -0
  30. package/dist/components/ui/vaul/use-composed-refs.d.ts.map +1 -0
  31. package/dist/components/ui/vaul/use-composed-refs.js +28 -0
  32. package/dist/components/ui/vaul/use-composed-refs.js.map +1 -0
  33. package/dist/components/ui/vaul/use-controllable-state.d.ts +9 -0
  34. package/dist/components/ui/vaul/use-controllable-state.d.ts.map +1 -0
  35. package/dist/components/ui/vaul/use-controllable-state.js +134 -0
  36. package/dist/components/ui/vaul/use-controllable-state.js.map +1 -0
  37. package/dist/components/ui/vaul/use-position-fixed.d.ts +19 -0
  38. package/dist/components/ui/vaul/use-position-fixed.d.ts.map +1 -0
  39. package/dist/components/ui/vaul/use-position-fixed.js +109 -0
  40. package/dist/components/ui/vaul/use-position-fixed.js.map +1 -0
  41. package/dist/components/ui/vaul/use-prevent-scroll.d.ts +18 -0
  42. package/dist/components/ui/vaul/use-prevent-scroll.d.ts.map +1 -0
  43. package/dist/components/ui/vaul/use-prevent-scroll.js +182 -0
  44. package/dist/components/ui/vaul/use-prevent-scroll.js.map +1 -0
  45. package/dist/components/ui/vaul/use-scale-background.d.ts +2 -0
  46. package/dist/components/ui/vaul/use-scale-background.d.ts.map +1 -0
  47. package/dist/components/ui/vaul/use-scale-background.js +68 -0
  48. package/dist/components/ui/vaul/use-scale-background.js.map +1 -0
  49. package/dist/components/ui/vaul/use-snap-points.d.ts +32 -0
  50. package/dist/components/ui/vaul/use-snap-points.d.ts.map +1 -0
  51. package/dist/components/ui/vaul/use-snap-points.js +222 -0
  52. package/dist/components/ui/vaul/use-snap-points.js.map +1 -0
  53. package/dist/components/web3/AccountButton.d.ts.map +1 -1
  54. package/dist/components/web3/AccountButton.js +26 -30
  55. package/dist/components/web3/AccountButton.js.map +1 -1
  56. package/dist/components/web3/ConnectWallets/index.d.ts.map +1 -1
  57. package/dist/components/web3/ConnectWallets/index.js +12 -64
  58. package/dist/components/web3/ConnectWallets/index.js.map +1 -1
  59. package/dist/components/widget/AppHeader/ActivityButton.d.ts +2 -0
  60. package/dist/components/widget/AppHeader/ActivityButton.d.ts.map +1 -0
  61. package/dist/components/widget/AppHeader/ActivityButton.js +46 -0
  62. package/dist/components/widget/AppHeader/ActivityButton.js.map +1 -0
  63. package/dist/components/widget/AppHeader/AppHeader.d.ts.map +1 -1
  64. package/dist/components/widget/AppHeader/AppHeader.js +35 -29
  65. package/dist/components/widget/AppHeader/AppHeader.js.map +1 -1
  66. package/dist/components/widget/Drawer/index.d.ts +1 -1
  67. package/dist/components/widget/Drawer/index.d.ts.map +1 -1
  68. package/dist/components/widget/Drawer/index.js +37 -30
  69. package/dist/components/widget/Drawer/index.js.map +1 -1
  70. package/dist/components/widget/Informative/Informative.d.ts +7 -0
  71. package/dist/components/widget/Informative/Informative.d.ts.map +1 -0
  72. package/dist/components/widget/Informative/Informative.js +33 -0
  73. package/dist/components/widget/Informative/Informative.js.map +1 -0
  74. package/dist/components/widget/PoweredBy/PoweredBy.d.ts +2 -0
  75. package/dist/components/widget/PoweredBy/PoweredBy.d.ts.map +1 -0
  76. package/dist/components/widget/PoweredBy/PoweredBy.js +31 -0
  77. package/dist/components/widget/PoweredBy/PoweredBy.js.map +1 -0
  78. package/dist/components/widget/PoweredBy/assets/velora.svg.js +12 -0
  79. package/dist/components/widget/PoweredBy/assets/velora.svg.js.map +1 -0
  80. package/dist/components/widget/ReceiverAddress/ReceiverAddress.js +35 -39
  81. package/dist/components/widget/ReceiverAddress/ReceiverAddress.js.map +1 -1
  82. package/dist/components/widget/ReceiverAddress/state/receiverAddressAtom.js +1 -1
  83. package/dist/components/widget/SelectToken/SelectTokenButton.js +55 -65
  84. package/dist/components/widget/SelectToken/SelectTokenButton.js.map +1 -1
  85. package/dist/components/widget/SwapModeSwitcher/state/swapModeActionsAtom.d.ts.map +1 -1
  86. package/dist/components/widget/SwapModeSwitcher/state/swapModeActionsAtom.js +1 -0
  87. package/dist/components/widget/SwapModeSwitcher/state/swapModeActionsAtom.js.map +1 -1
  88. package/dist/components/widget/TokenInput/index.d.ts.map +1 -1
  89. package/dist/components/widget/TokenInput/index.js +133 -103
  90. package/dist/components/widget/TokenInput/index.js.map +1 -1
  91. package/dist/components/widget/TokenInput/types.d.ts +4 -2
  92. package/dist/components/widget/TokenInput/types.d.ts.map +1 -1
  93. package/dist/components/widget/TradeOverview/Stepper.d.ts.map +1 -1
  94. package/dist/components/widget/TradeOverview/Stepper.js +38 -3
  95. package/dist/components/widget/TradeOverview/Stepper.js.map +1 -1
  96. package/dist/components/widget/WrapEth/WrapEthDrawerButton.d.ts +2 -1
  97. package/dist/components/widget/WrapEth/WrapEthDrawerButton.d.ts.map +1 -1
  98. package/dist/components/widget/WrapEth/WrapEthDrawerButton.js +30 -29
  99. package/dist/components/widget/WrapEth/WrapEthDrawerButton.js.map +1 -1
  100. package/dist/hooks/gas/config.d.ts +6 -0
  101. package/dist/hooks/gas/config.d.ts.map +1 -0
  102. package/dist/hooks/gas/config.js +53 -0
  103. package/dist/hooks/gas/config.js.map +1 -0
  104. package/dist/hooks/gas/types.d.ts +43 -0
  105. package/dist/hooks/gas/types.d.ts.map +1 -0
  106. package/dist/hooks/gas/useGasPrices.d.ts +7 -0
  107. package/dist/hooks/gas/useGasPrices.d.ts.map +1 -0
  108. package/dist/hooks/gas/useGasPrices.js +118 -0
  109. package/dist/hooks/gas/useGasPrices.js.map +1 -0
  110. package/dist/hooks/gas/utils.d.ts +8 -0
  111. package/dist/hooks/gas/utils.d.ts.map +1 -0
  112. package/dist/hooks/gas/utils.js +21 -0
  113. package/dist/hooks/gas/utils.js.map +1 -0
  114. package/dist/hooks/getCode/useIsAccountContract.d.ts +2 -0
  115. package/dist/hooks/getCode/useIsAccountContract.d.ts.map +1 -0
  116. package/dist/hooks/getCode/useIsAccountContract.js +34 -0
  117. package/dist/hooks/getCode/useIsAccountContract.js.map +1 -0
  118. package/dist/hooks/permit/hooks/useGetPermitInfo.d.ts +27 -0
  119. package/dist/hooks/permit/hooks/useGetPermitInfo.d.ts.map +1 -0
  120. package/dist/hooks/permit/hooks/useGetPermitInfo.js +98 -0
  121. package/dist/hooks/permit/hooks/useGetPermitInfo.js.map +1 -0
  122. package/dist/hooks/permit/hooks/useGetSafePermitInfo.d.ts +31 -0
  123. package/dist/hooks/permit/hooks/useGetSafePermitInfo.d.ts.map +1 -0
  124. package/dist/hooks/permit/hooks/useGetSafePermitInfo.js +129 -0
  125. package/dist/hooks/permit/hooks/useGetSafePermitInfo.js.map +1 -0
  126. package/dist/hooks/permit/hooks/usePermit1Nonce.d.ts +38 -0
  127. package/dist/hooks/permit/hooks/usePermit1Nonce.d.ts.map +1 -0
  128. package/dist/hooks/permit/hooks/usePermit1Nonce.js +153 -0
  129. package/dist/hooks/permit/hooks/usePermit1Nonce.js.map +1 -0
  130. package/dist/hooks/permit/hooks/useSignArbitraryTypedData.d.ts +18 -0
  131. package/dist/hooks/permit/hooks/useSignArbitraryTypedData.d.ts.map +1 -0
  132. package/dist/hooks/permit/hooks/useSignArbitraryTypedData.js +109 -0
  133. package/dist/hooks/permit/hooks/useSignArbitraryTypedData.js.map +1 -0
  134. package/dist/hooks/permit/hooks/useSignPermit.d.ts +13 -0
  135. package/dist/hooks/permit/hooks/useSignPermit.d.ts.map +1 -0
  136. package/dist/hooks/permit/hooks/useSignPermit.js +103 -0
  137. package/dist/hooks/permit/hooks/useSignPermit.js.map +1 -0
  138. package/dist/hooks/permit/hooks/useSignTokenFromPermit1.d.ts +50 -0
  139. package/dist/hooks/permit/hooks/useSignTokenFromPermit1.d.ts.map +1 -0
  140. package/dist/hooks/permit/hooks/useSignTokenFromPermit1.js +338 -0
  141. package/dist/hooks/permit/hooks/useSignTokenFromPermit1.js.map +1 -0
  142. package/dist/hooks/permit/hooks/useTokenFromPermit1Nonce.d.ts +10 -0
  143. package/dist/hooks/permit/hooks/useTokenFromPermit1Nonce.d.ts.map +1 -0
  144. package/dist/hooks/permit/hooks/useTokenFromPermit1Nonce.js +69 -0
  145. package/dist/hooks/permit/hooks/useTokenFromPermit1Nonce.js.map +1 -0
  146. package/dist/hooks/permit/hooks/useTokenFromPermitInfo.d.ts +10 -0
  147. package/dist/hooks/permit/hooks/useTokenFromPermitInfo.d.ts.map +1 -0
  148. package/dist/hooks/permit/hooks/useTokenFromPermitInfo.js +63 -0
  149. package/dist/hooks/permit/hooks/useTokenFromPermitInfo.js.map +1 -0
  150. package/dist/hooks/permit/hooks/useTryToSignPermit1.d.ts +16 -0
  151. package/dist/hooks/permit/hooks/useTryToSignPermit1.d.ts.map +1 -0
  152. package/dist/hooks/permit/hooks/useTryToSignPermit1.js +94 -0
  153. package/dist/hooks/permit/hooks/useTryToSignPermit1.js.map +1 -0
  154. package/dist/hooks/permit/utils/abi.d.ts +219 -0
  155. package/dist/hooks/permit/utils/abi.d.ts.map +1 -0
  156. package/dist/hooks/permit/utils/abi.js +204 -0
  157. package/dist/hooks/permit/utils/abi.js.map +1 -0
  158. package/dist/hooks/permit/utils/constants.d.ts +224 -0
  159. package/dist/hooks/permit/utils/constants.d.ts.map +1 -0
  160. package/dist/hooks/permit/utils/constants.js +229 -0
  161. package/dist/hooks/permit/utils/constants.js.map +1 -0
  162. package/dist/hooks/permit/utils/construct.d.ts +161 -0
  163. package/dist/hooks/permit/utils/construct.d.ts.map +1 -0
  164. package/dist/hooks/permit/utils/construct.js +227 -0
  165. package/dist/hooks/permit/utils/construct.js.map +1 -0
  166. package/dist/hooks/permit/utils/detect.d.ts +35 -0
  167. package/dist/hooks/permit/utils/detect.d.ts.map +1 -0
  168. package/dist/hooks/permit/utils/detect.js +241 -0
  169. package/dist/hooks/permit/utils/detect.js.map +1 -0
  170. package/dist/hooks/permit/utils/domainSeparator.d.ts +44 -0
  171. package/dist/hooks/permit/utils/domainSeparator.d.ts.map +1 -0
  172. package/dist/hooks/permit/utils/domainSeparator.js +216 -0
  173. package/dist/hooks/permit/utils/domainSeparator.js.map +1 -0
  174. package/dist/hooks/permit/utils/encodeArgs.d.ts +11 -0
  175. package/dist/hooks/permit/utils/encodeArgs.d.ts.map +1 -0
  176. package/dist/hooks/permit/utils/encodeArgs.js +29 -0
  177. package/dist/hooks/permit/utils/encodeArgs.js.map +1 -0
  178. package/dist/hooks/permit/utils/trySignPermit1.d.ts +42 -0
  179. package/dist/hooks/permit/utils/trySignPermit1.d.ts.map +1 -0
  180. package/dist/hooks/permit/utils/trySignPermit1.js +283 -0
  181. package/dist/hooks/permit/utils/trySignPermit1.js.map +1 -0
  182. package/dist/hooks/permit/utils/types.d.ts +77 -0
  183. package/dist/hooks/permit/utils/types.d.ts.map +1 -0
  184. package/dist/hooks/permit/utils/utils.d.ts +15 -0
  185. package/dist/hooks/permit/utils/utils.d.ts.map +1 -0
  186. package/dist/hooks/permit/utils/utils.js +44 -0
  187. package/dist/hooks/permit/utils/utils.js.map +1 -0
  188. package/dist/hooks/swap/prices/delta/queries/useDeltaPriceQuery.js +1 -1
  189. package/dist/hooks/swap/prices/delta/queries/useDeltaPriceQuery.js.map +1 -1
  190. package/dist/hooks/swap/prices/delta/queries/useIsTokenSupportedInDelta.d.ts +1 -1
  191. package/dist/hooks/swap/prices/delta/queries/useIsTokenSupportedInDelta.d.ts.map +1 -1
  192. package/dist/hooks/swap/prices/delta/queries/useIsTokenSupportedInDelta.js +94 -0
  193. package/dist/hooks/swap/prices/delta/queries/useIsTokenSupportedInDelta.js.map +1 -0
  194. package/dist/hooks/swap/prices/market/queries/useMarketPriceQuery.js +1 -1
  195. package/dist/hooks/swap/prices/market/queries/useMarketPriceQuery.js.map +1 -1
  196. package/dist/hooks/swap/prices/useSwapPrices.d.ts +3 -0
  197. package/dist/hooks/swap/prices/useSwapPrices.d.ts.map +1 -1
  198. package/dist/hooks/swap/prices/useSwapPrices.js +43 -29
  199. package/dist/hooks/swap/prices/useSwapPrices.js.map +1 -1
  200. package/dist/hooks/swap/prices/useTokenInputsFromPrice.d.ts +2 -10
  201. package/dist/hooks/swap/prices/useTokenInputsFromPrice.d.ts.map +1 -1
  202. package/dist/hooks/swap/prices/useTokenInputsFromPrice.js +10 -10
  203. package/dist/hooks/swap/prices/useTokenInputsFromPrice.js.map +1 -1
  204. package/dist/hooks/swap/tradeFlow/common/types.d.ts +15 -0
  205. package/dist/hooks/swap/tradeFlow/common/types.d.ts.map +1 -1
  206. package/dist/hooks/swap/tradeFlow/useDeltaFlow.d.ts +2 -1
  207. package/dist/hooks/swap/tradeFlow/useDeltaFlow.d.ts.map +1 -1
  208. package/dist/hooks/swap/tradeFlow/useDeltaFlow.js +433 -268
  209. package/dist/hooks/swap/tradeFlow/useDeltaFlow.js.map +1 -1
  210. package/dist/hooks/swap/tradeFlow/useDeltaSwapStep.d.ts.map +1 -1
  211. package/dist/hooks/swap/tradeFlow/useDeltaSwapStep.js +4 -1
  212. package/dist/hooks/swap/tradeFlow/useDeltaSwapStep.js.map +1 -1
  213. package/dist/hooks/swap/tradeFlow/useMarketFlow.d.ts +2 -1
  214. package/dist/hooks/swap/tradeFlow/useMarketFlow.d.ts.map +1 -1
  215. package/dist/hooks/swap/tradeFlow/useMarketFlow.js +411 -245
  216. package/dist/hooks/swap/tradeFlow/useMarketFlow.js.map +1 -1
  217. package/dist/hooks/swap/tradeFlow/useMarketSwapStep.d.ts.map +1 -1
  218. package/dist/hooks/swap/tradeFlow/useMarketSwapStep.js +4 -1
  219. package/dist/hooks/swap/tradeFlow/useMarketSwapStep.js.map +1 -1
  220. package/dist/hooks/tokens/allowance/types.d.ts +2 -0
  221. package/dist/hooks/tokens/allowance/types.d.ts.map +1 -1
  222. package/dist/hooks/tokens/allowance/useGenericTokenAllowance.d.ts +3 -1
  223. package/dist/hooks/tokens/allowance/useGenericTokenAllowance.d.ts.map +1 -1
  224. package/dist/hooks/tokens/allowance/useGenericTokenAllowance.js +4 -2
  225. package/dist/hooks/tokens/allowance/useGenericTokenAllowance.js.map +1 -1
  226. package/dist/hooks/tokens/allowance/useTokenAllowance.d.ts +1 -1
  227. package/dist/hooks/tokens/allowance/useTokenAllowance.d.ts.map +1 -1
  228. package/dist/hooks/tokens/allowance/useTokenAllowance.js +11 -8
  229. package/dist/hooks/tokens/allowance/useTokenAllowance.js.map +1 -1
  230. package/dist/hooks/tokens/balances/useInvalidateTokenData.d.ts +1 -0
  231. package/dist/hooks/tokens/balances/useInvalidateTokenData.d.ts.map +1 -1
  232. package/dist/hooks/tokens/balances/useInvalidateTokenData.js +32 -5
  233. package/dist/hooks/tokens/balances/useInvalidateTokenData.js.map +1 -1
  234. package/dist/hooks/txs/mutations/useSendTx.d.ts.map +1 -1
  235. package/dist/hooks/txs/mutations/useSendTx.js +48 -44
  236. package/dist/hooks/txs/mutations/useSendTx.js.map +1 -1
  237. package/dist/hooks/useIsCrosschainPossible.d.ts +12 -0
  238. package/dist/hooks/useIsCrosschainPossible.d.ts.map +1 -0
  239. package/dist/hooks/useIsCrosschainPossible.js +68 -0
  240. package/dist/hooks/useIsCrosschainPossible.js.map +1 -0
  241. package/dist/index.d.ts +0 -1
  242. package/dist/index.d.ts.map +1 -1
  243. package/dist/index.js +0 -1
  244. package/dist/index.js.map +1 -1
  245. package/dist/lib/utils/delta.d.ts +13 -0
  246. package/dist/lib/utils/delta.d.ts.map +1 -0
  247. package/dist/lib/utils/delta.js +35 -0
  248. package/dist/lib/utils/delta.js.map +1 -0
  249. package/dist/lib/utils/explorer.d.ts +2 -0
  250. package/dist/lib/utils/explorer.d.ts.map +1 -1
  251. package/dist/lib/utils/explorer.js +15 -1
  252. package/dist/lib/utils/explorer.js.map +1 -1
  253. package/dist/styles.css +317 -5
  254. package/dist/tokens/defaultTokens.js.map +1 -1
  255. package/dist/widget/Updaters.d.ts.map +1 -1
  256. package/dist/widget/Updaters.js +4 -0
  257. package/dist/widget/Updaters.js.map +1 -1
  258. package/dist/widget/button/hooks/useWidgetButtonExtraProps.d.ts +9 -0
  259. package/dist/widget/button/hooks/useWidgetButtonExtraProps.d.ts.map +1 -0
  260. package/dist/widget/button/hooks/useWidgetButtonExtraProps.js +81 -0
  261. package/dist/widget/button/hooks/useWidgetButtonExtraProps.js.map +1 -0
  262. package/dist/widget/index.d.ts.map +1 -1
  263. package/dist/widget/index.js +302 -259
  264. package/dist/widget/index.js.map +1 -1
  265. package/dist/widget/inputs/hooks/types.d.ts +4 -0
  266. package/dist/widget/inputs/hooks/types.d.ts.map +1 -0
  267. package/dist/widget/inputs/hooks/useTokenFromInputProps.d.ts +3 -1
  268. package/dist/widget/inputs/hooks/useTokenFromInputProps.d.ts.map +1 -1
  269. package/dist/widget/inputs/hooks/useTokenFromInputProps.js +160 -99
  270. package/dist/widget/inputs/hooks/useTokenFromInputProps.js.map +1 -1
  271. package/dist/widget/inputs/hooks/useTokenToInputProps.d.ts +2 -1
  272. package/dist/widget/inputs/hooks/useTokenToInputProps.d.ts.map +1 -1
  273. package/dist/widget/inputs/hooks/useTokenToInputProps.js +136 -105
  274. package/dist/widget/inputs/hooks/useTokenToInputProps.js.map +1 -1
  275. package/package.json +1 -1
@@ -0,0 +1,241 @@
1
+ import { isAddress } from 'viem';
2
+ import { readContracts, getBytecode } from '@wagmi/core';
3
+ import { EIP_2612_PERMIT_ABI, UPGRADABLE_ERC_20_ABI } from './abi.js';
4
+ import { DOMAIN_TYPEHASH_ABI, PERMIT_TYPEHASH_ABI, VERSIONS_ABI, EIP712_DOMAIN_ABI, DOMAIN_ABIS, EIP2612_PERMIT_TYPEHASH, DAI_LIKE_PERMIT_TYPEHASH, DOMAIN_HASHES_WITHOUT_VERSION } from './constants.js';
5
+ import { getDomainFromEIP712Domain } from './utils.js';
6
+ import { isETHaddress } from '../../../tokens/utils/eth.js';
7
+ import { guessDomainParams } from './domainSeparator.js';
8
+
9
+ globalThis.jotaiAtomCache = globalThis.jotaiAtomCache || {
10
+ cache: /* @__PURE__ */ new Map(),
11
+ get(name, inst) {
12
+ if (this.cache.has(name)) {
13
+ return this.cache.get(name);
14
+ }
15
+ this.cache.set(name, inst);
16
+ return inst;
17
+ }
18
+ };
19
+ const NotDetectedResult = {
20
+ type: "NOT_DETECTED",
21
+ domain: null
22
+ };
23
+ const EIP_2612_PERMIT_SELECTOR = "0xd505accf";
24
+ const DAI_PERMIT_SELECTOR = "0x8fcbaf0c";
25
+ async function detectPermitSupportType({
26
+ config,
27
+ tokenAddress,
28
+ chainId
29
+ }) {
30
+ if (isETHaddress(tokenAddress)) {
31
+ return NotDetectedResult;
32
+ }
33
+ const domainResults = await readContracts(config, {
34
+ allowFailure: true,
35
+ contracts: [{
36
+ chainId,
37
+ abi: EIP_2612_PERMIT_ABI,
38
+ functionName: "DOMAIN_SEPARATOR",
39
+ // @TODO maybe not needed
40
+ address: tokenAddress,
41
+ args: []
42
+ }, {
43
+ chainId,
44
+ abi: DOMAIN_TYPEHASH_ABI,
45
+ functionName: "DOMAIN_TYPEHASH",
46
+ address: tokenAddress,
47
+ args: []
48
+ }, {
49
+ chainId,
50
+ abi: PERMIT_TYPEHASH_ABI,
51
+ functionName: "PERMIT_TYPEHASH",
52
+ address: tokenAddress,
53
+ args: []
54
+ }, {
55
+ chainId,
56
+ abi: EIP_2612_PERMIT_ABI,
57
+ functionName: "name",
58
+ address: tokenAddress,
59
+ args: []
60
+ }, {
61
+ chainId,
62
+ abi: EIP_2612_PERMIT_ABI,
63
+ // @TODO see how version gets assigned and then deleted for UNI 0x1f9840a85d5af5bf1d1762f925bdaddc4201f984 (mainnet)
64
+ functionName: "version",
65
+ // standard
66
+ // @TODO chewck what a Proxy contract like 0x2791bca1f2de4661ed88a30c99a7a9449aa84174 (USDC.e on Polygon) returns,
67
+ // because of the fallback method it may return success with 0x instead of error
68
+ address: tokenAddress,
69
+ args: []
70
+ }, {
71
+ chainId,
72
+ abi: VERSIONS_ABI,
73
+ functionName: "EIP712_VERSION",
74
+ // non-standard, in USDC.e on Polygon
75
+ address: tokenAddress,
76
+ args: []
77
+ }, {
78
+ chainId,
79
+ abi: VERSIONS_ABI,
80
+ functionName: "ERC712_VERSION",
81
+ // non-standard
82
+ address: tokenAddress,
83
+ args: []
84
+ }, {
85
+ chainId,
86
+ abi: UPGRADABLE_ERC_20_ABI,
87
+ functionName: "implementation",
88
+ // sometimes implementation() is guarded by a modifier, like aEthUSDT on mainnet,
89
+ // then it's unreadable
90
+ address: tokenAddress,
91
+ args: []
92
+ }, {
93
+ chainId,
94
+ abi: EIP712_DOMAIN_ABI,
95
+ functionName: "eip712Domain",
96
+ // standard
97
+ address: tokenAddress,
98
+ args: []
99
+ }, {
100
+ chainId,
101
+ abi: DOMAIN_ABIS.versionAndChain,
102
+ functionName: "eip712Domain",
103
+ // non-standard, Lido stETH on mainnet
104
+ address: tokenAddress,
105
+ args: []
106
+ }, {
107
+ chainId,
108
+ abi: DOMAIN_ABIS.versionAndSalt,
109
+ functionName: "eip712Domain",
110
+ // non-standard
111
+ address: tokenAddress,
112
+ args: []
113
+ }, {
114
+ chainId,
115
+ abi: DOMAIN_ABIS.withoutVersion,
116
+ functionName: "eip712Domain",
117
+ // non-standard
118
+ address: tokenAddress,
119
+ args: []
120
+ }]
121
+ });
122
+ const [domainSeparator, domainTypehash, permitTypehash, name, version, versionAlt1, versionAlt2, proxyImplementation, eip712Domain, eip712DomainVersionAndChain, eip712DomainVersionAndSalt, eip712DomainWithoutVersion] = domainResults.map((r) => r.result);
123
+ if (!name) return NotDetectedResult;
124
+ let domain = null;
125
+ if (eip712Domain) {
126
+ const [fields, name2, version2, chainId2, verifyingContract, salt, extensions] = eip712Domain;
127
+ if (verifyingContract.toLowerCase() === tokenAddress.toLowerCase()) {
128
+ domain = getDomainFromEIP712Domain({
129
+ fields,
130
+ name: name2,
131
+ version: version2,
132
+ chainId: chainId2,
133
+ verifyingContract,
134
+ salt,
135
+ extensions
136
+ });
137
+ }
138
+ }
139
+ if (!domain && eip712DomainVersionAndChain) {
140
+ const [name2, version2, chainId2, verifyingContract] = eip712DomainVersionAndChain;
141
+ if (verifyingContract.toLowerCase() === tokenAddress.toLowerCase()) {
142
+ domain = {
143
+ name: name2,
144
+ version: version2,
145
+ chainId: Number(chainId2),
146
+ verifyingContract
147
+ };
148
+ }
149
+ }
150
+ if (!domain && eip712DomainVersionAndSalt) {
151
+ const [name2, version2, verifyingContract, salt] = eip712DomainVersionAndSalt;
152
+ if (verifyingContract.toLowerCase() === tokenAddress.toLowerCase()) {
153
+ domain = {
154
+ name: name2,
155
+ version: version2,
156
+ verifyingContract,
157
+ salt
158
+ };
159
+ }
160
+ }
161
+ if (!domain && eip712DomainWithoutVersion) {
162
+ const [name2, chainId2, verifyingContract] = eip712DomainWithoutVersion;
163
+ if (verifyingContract.toLowerCase() === tokenAddress.toLowerCase()) {
164
+ domain = {
165
+ name: name2,
166
+ chainId: Number(chainId2),
167
+ verifyingContract
168
+ };
169
+ }
170
+ }
171
+ if (domain && (eip712Domain || eip712DomainVersionAndChain || eip712DomainVersionAndSalt || eip712DomainWithoutVersion)) {
172
+ return {
173
+ type: "eip2612",
174
+ domain,
175
+ domainSeparator
176
+ };
177
+ }
178
+ let permitType = null;
179
+ if (permitTypehash) {
180
+ if (permitTypehash.toLowerCase() === EIP2612_PERMIT_TYPEHASH) {
181
+ permitType = "eip2612";
182
+ }
183
+ if (permitTypehash.toLowerCase() === DAI_LIKE_PERMIT_TYPEHASH) {
184
+ permitType = "dai";
185
+ }
186
+ }
187
+ if (!permitType) {
188
+ const contractWithMethods = proxyImplementation && isAddress(proxyImplementation) ? proxyImplementation : tokenAddress;
189
+ const bytecode = await getBytecode(config, {
190
+ address: contractWithMethods,
191
+ chainId
192
+ });
193
+ if (!bytecode) return NotDetectedResult;
194
+ if (bytecode.includes(EIP_2612_PERMIT_SELECTOR.slice(2))) {
195
+ permitType = "eip2612";
196
+ }
197
+ if (bytecode.includes(DAI_PERMIT_SELECTOR.slice(2))) {
198
+ permitType = "dai";
199
+ }
200
+ }
201
+ if (!permitType) return NotDetectedResult;
202
+ if (!domain) {
203
+ domain = {
204
+ name,
205
+ // default to 1 if not found, sometimes version is not exposed publicly
206
+ version: version || versionAlt1 || versionAlt2,
207
+ // @TODO check maybe we need to drop version
208
+ verifyingContract: tokenAddress,
209
+ chainId
210
+ };
211
+ if (domainSeparator) {
212
+ const guessedParams = guessDomainParams({
213
+ domain,
214
+ chainId,
215
+ domainSeparator
216
+ });
217
+ domain.version = guessedParams.version;
218
+ domain.chainId = guessedParams.chainId;
219
+ domain.salt = guessedParams.salt;
220
+ }
221
+ if (domainTypehash && DOMAIN_HASHES_WITHOUT_VERSION.includes(domainTypehash.toLowerCase())) {
222
+ delete domain.version;
223
+ } else if (domain.version === void 0) {
224
+ delete domain.version;
225
+ }
226
+ if (domain.chainId === void 0) {
227
+ delete domain.chainId;
228
+ }
229
+ if (domain.salt === void 0) {
230
+ delete domain.salt;
231
+ }
232
+ }
233
+ return {
234
+ type: permitType,
235
+ domain,
236
+ domainSeparator
237
+ };
238
+ }
239
+
240
+ export { DAI_PERMIT_SELECTOR, EIP_2612_PERMIT_SELECTOR, detectPermitSupportType };
241
+ //# sourceMappingURL=detect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect.js","sources":["../../../../src/hooks/permit/utils/detect.ts"],"sourcesContent":["import { type Address, type Hex, isAddress } from \"viem\";\nimport { type Config, readContracts, getBytecode } from \"@wagmi/core\";\nimport { EIP_2612_PERMIT_ABI, UPGRADABLE_ERC_20_ABI } from \"./abi\";\nimport {\n DOMAIN_TYPEHASH_ABI,\n DOMAIN_HASHES_WITHOUT_VERSION,\n EIP712_DOMAIN_ABI,\n PERMIT_TYPEHASH_ABI,\n VERSIONS_ABI,\n EIP2612_PERMIT_TYPEHASH,\n DAI_LIKE_PERMIT_TYPEHASH,\n DOMAIN_ABIS,\n} from \"./constants\";\nimport { getDomainFromEIP712Domain } from \"./utils\";\nimport type { MapTuple } from \"./types\";\nimport { isETHaddress } from \"@/tokens/utils/eth\";\nimport { guessDomainParams } from \"./domainSeparator\";\n\nexport type PermitType = \"eip2612\" | \"dai\";\n\nexport type PermitSupportDAI = PermitSupportResultBase & { type: \"dai\" };\nexport type PermitSupportEIP2612 = PermitSupportResultBase & {\n type: \"eip2612\";\n};\n\ntype PermitSupportResultBase = {\n type: PermitType;\n domain: {\n name: string;\n version?: string;\n chainId?: number;\n verifyingContract: Address;\n salt?: Hex; //\n };\n domainSeparator?: string;\n};\n\nexport type PermitSupportResult = PermitSupportDAI | PermitSupportEIP2612;\n\nexport type NotDetectedPermitSupport = {\n type: \"NOT_DETECTED\";\n domain: null;\n};\n\nconst NotDetectedResult: NotDetectedPermitSupport = {\n type: \"NOT_DETECTED\",\n domain: null,\n};\n\n/* const PERMIT_SIGNATURES = [\n {\n type: \"eip2612\",\n name: \"permit\",\n inputs: [\n \"address\", // owner\n \"address\", // spender\n \"uint256\", // value\n \"uint256\", // deadline\n \"uint8\", // v\n \"bytes32\", // r\n \"bytes32\", // s\n ],\n },\n {\n type: \"dai\",\n name: \"permit\",\n inputs: [\n \"address\", // owner\n \"address\", // spender\n \"uint256\", // nonce\n \"uint256\", // expiry\n \"bool\", // allowed\n \"uint8\", // v\n \"bytes32\", // r\n \"bytes32\", // s\n ],\n },\n];\n\n]; */\n\nexport const EIP_2612_PERMIT_SELECTOR = \"0xd505accf\"; // EIP2612.permit\nexport const DAI_PERMIT_SELECTOR = \"0x8fcbaf0c\"; // DAI.permit\n\nexport type DetectPermitSupportParams = {\n config: Config;\n tokenAddress: Address;\n chainId: number;\n};\n\nexport async function detectPermitSupportType({\n config,\n tokenAddress,\n chainId,\n}: DetectPermitSupportParams): Promise<\n PermitSupportResult | NotDetectedPermitSupport\n> {\n if (isETHaddress(tokenAddress)) {\n return NotDetectedResult;\n }\n\n const domainResults = await readContracts(config, {\n allowFailure: true,\n contracts: [\n {\n chainId,\n abi: EIP_2612_PERMIT_ABI,\n functionName: \"DOMAIN_SEPARATOR\", // @TODO maybe not needed\n address: tokenAddress,\n args: [],\n },\n {\n chainId,\n abi: DOMAIN_TYPEHASH_ABI,\n functionName: \"DOMAIN_TYPEHASH\",\n address: tokenAddress,\n args: [],\n },\n {\n chainId,\n abi: PERMIT_TYPEHASH_ABI,\n functionName: \"PERMIT_TYPEHASH\",\n address: tokenAddress,\n args: [],\n },\n {\n chainId,\n abi: EIP_2612_PERMIT_ABI,\n functionName: \"name\",\n address: tokenAddress,\n args: [],\n },\n {\n chainId,\n abi: EIP_2612_PERMIT_ABI,\n // @TODO see how version gets assigned and then deleted for UNI 0x1f9840a85d5af5bf1d1762f925bdaddc4201f984 (mainnet)\n functionName: \"version\", // standard\n // @TODO chewck what a Proxy contract like 0x2791bca1f2de4661ed88a30c99a7a9449aa84174 (USDC.e on Polygon) returns,\n // because of the fallback method it may return success with 0x instead of error\n address: tokenAddress,\n args: [],\n },\n {\n chainId,\n abi: VERSIONS_ABI,\n functionName: \"EIP712_VERSION\", // non-standard, in USDC.e on Polygon\n address: tokenAddress,\n args: [],\n },\n {\n chainId,\n abi: VERSIONS_ABI,\n functionName: \"ERC712_VERSION\", // non-standard\n address: tokenAddress,\n args: [],\n },\n {\n chainId,\n abi: UPGRADABLE_ERC_20_ABI,\n functionName: \"implementation\",\n // sometimes implementation() is guarded by a modifier, like aEthUSDT on mainnet,\n // then it's unreadable\n address: tokenAddress,\n args: [],\n },\n {\n chainId,\n abi: EIP712_DOMAIN_ABI,\n functionName: \"eip712Domain\", // standard\n address: tokenAddress,\n args: [],\n },\n {\n chainId,\n abi: DOMAIN_ABIS.versionAndChain,\n functionName: \"eip712Domain\", // non-standard, Lido stETH on mainnet\n address: tokenAddress,\n args: [],\n },\n {\n chainId,\n abi: DOMAIN_ABIS.versionAndSalt,\n functionName: \"eip712Domain\", // non-standard\n address: tokenAddress,\n args: [],\n },\n {\n chainId,\n abi: DOMAIN_ABIS.withoutVersion,\n functionName: \"eip712Domain\", // non-standard\n address: tokenAddress,\n args: [],\n },\n ],\n });\n\n type TupleOfResutls = MapTuple<typeof domainResults, \"result\">;\n\n const [\n domainSeparator,\n domainTypehash,\n permitTypehash,\n name,\n version,\n versionAlt1,\n versionAlt2,\n proxyImplementation,\n eip712Domain,\n eip712DomainVersionAndChain,\n eip712DomainVersionAndSalt,\n eip712DomainWithoutVersion,\n ] = domainResults.map((r) => r.result) as TupleOfResutls;\n\n if (!name) return NotDetectedResult;\n\n let domain: PermitSupportResult[\"domain\"] | null = null;\n\n if (eip712Domain) {\n const [\n fields,\n name,\n version,\n chainId,\n verifyingContract,\n salt,\n extensions,\n ] = eip712Domain;\n\n // if Token is a Proxy, then depending on the fallback method implementation,\n // the result may return partial eip712Domain that actually comes from an alternative eip712Domain impelmentation,\n // but in that case only the first fields that are the same between all implementations will be correct,\n // no verifyingContract\n if (verifyingContract.toLowerCase() === tokenAddress.toLowerCase()) {\n domain = getDomainFromEIP712Domain({\n fields,\n name,\n version,\n chainId,\n verifyingContract,\n salt,\n extensions,\n });\n }\n }\n if (!domain && eip712DomainVersionAndChain) {\n const [name, version, chainId, verifyingContract] =\n eip712DomainVersionAndChain;\n\n if (verifyingContract.toLowerCase() === tokenAddress.toLowerCase()) {\n domain = {\n name,\n version,\n chainId: Number(chainId),\n verifyingContract,\n };\n }\n }\n if (!domain && eip712DomainVersionAndSalt) {\n const [name, version, verifyingContract, salt] = eip712DomainVersionAndSalt;\n\n if (verifyingContract.toLowerCase() === tokenAddress.toLowerCase()) {\n domain = {\n name,\n version,\n verifyingContract,\n salt,\n };\n }\n }\n if (!domain && eip712DomainWithoutVersion) {\n const [name, chainId, verifyingContract] = eip712DomainWithoutVersion;\n\n if (verifyingContract.toLowerCase() === tokenAddress.toLowerCase()) {\n domain = {\n name,\n chainId: Number(chainId),\n verifyingContract,\n };\n }\n }\n\n if (\n domain &&\n (eip712Domain ||\n eip712DomainVersionAndChain ||\n eip712DomainVersionAndSalt ||\n eip712DomainWithoutVersion)\n ) {\n // eip712Domain is for EIP2612 Permit\n return {\n type: \"eip2612\",\n domain,\n domainSeparator,\n };\n }\n\n let permitType: PermitType | null = null;\n\n if (permitTypehash) {\n if (permitTypehash.toLowerCase() === EIP2612_PERMIT_TYPEHASH) {\n permitType = \"eip2612\";\n }\n\n if (permitTypehash.toLowerCase() === DAI_LIKE_PERMIT_TYPEHASH) {\n permitType = \"dai\";\n }\n }\n\n if (!permitType) {\n const contractWithMethods =\n proxyImplementation && isAddress(proxyImplementation)\n ? proxyImplementation\n : tokenAddress;\n\n const bytecode = await getBytecode(config, {\n address: contractWithMethods,\n chainId,\n });\n if (!bytecode) return NotDetectedResult;\n\n // see if permit() method with expected signature is available,\n // but this check will not catch Proxy Contracts\n if (bytecode.includes(EIP_2612_PERMIT_SELECTOR.slice(2))) {\n permitType = \"eip2612\";\n }\n\n if (bytecode.includes(DAI_PERMIT_SELECTOR.slice(2))) {\n permitType = \"dai\";\n }\n }\n\n if (!permitType) return NotDetectedResult;\n\n if (!domain) {\n domain = {\n name,\n // default to 1 if not found, sometimes version is not exposed publicly\n version: version || versionAlt1 || versionAlt2, // @TODO check maybe we need to drop version\n verifyingContract: tokenAddress,\n chainId,\n };\n\n // fetched domainSeparator, but not version,\n // version can not exist or just not publicly exposed,\n // ex. aEthUSDT on mainnet\n if (domainSeparator) {\n const guessedParams = guessDomainParams({\n domain,\n chainId,\n domainSeparator,\n });\n domain.version = guessedParams.version;\n domain.chainId = guessedParams.chainId;\n domain.salt = guessedParams.salt;\n }\n\n if (\n domainTypehash &&\n DOMAIN_HASHES_WITHOUT_VERSION.includes(\n domainTypehash.toLowerCase() as Address\n )\n ) {\n delete domain.version;\n } else if (domain.version === undefined) {\n delete domain.version;\n }\n\n if (domain.chainId === undefined) {\n delete domain.chainId;\n }\n\n if (domain.salt === undefined) {\n delete domain.salt;\n }\n }\n\n return {\n type: permitType,\n domain,\n domainSeparator,\n };\n}\n"],"names":["NotDetectedResult","type","domain","EIP_2612_PERMIT_SELECTOR","DAI_PERMIT_SELECTOR","detectPermitSupportType","config","tokenAddress","chainId","isETHaddress","domainResults","readContracts","allowFailure","contracts","abi","EIP_2612_PERMIT_ABI","functionName","address","args","DOMAIN_TYPEHASH_ABI","PERMIT_TYPEHASH_ABI","VERSIONS_ABI","UPGRADABLE_ERC_20_ABI","EIP712_DOMAIN_ABI","DOMAIN_ABIS","versionAndChain","versionAndSalt","withoutVersion","domainSeparator","domainTypehash","permitTypehash","name","version","versionAlt1","versionAlt2","proxyImplementation","eip712Domain","eip712DomainVersionAndChain","eip712DomainVersionAndSalt","eip712DomainWithoutVersion","map","r","result","fields","verifyingContract","salt","extensions","toLowerCase","getDomainFromEIP712Domain","Number","permitType","EIP2612_PERMIT_TYPEHASH","DAI_LIKE_PERMIT_TYPEHASH","contractWithMethods","isAddress","bytecode","getBytecode","includes","slice","guessedParams","guessDomainParams","DOMAIN_HASHES_WITHOUT_VERSION","undefined"],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ import { Address, Hex } from 'viem';
2
+ import { PermitSupportResult } from './detect';
3
+ export declare function getDomainSeparatorVersionChain({ name, version, chainId, verifyingContract, }: {
4
+ name: string;
5
+ version: string;
6
+ chainId: bigint;
7
+ verifyingContract: Address;
8
+ }): Hex;
9
+ export declare function getDomainSeparatorChain({ name, chainId, verifyingContract, }: {
10
+ name: string;
11
+ chainId: bigint;
12
+ verifyingContract: Address;
13
+ }): Hex;
14
+ export declare function getDomainSeparatorVersionSalt({ name, version, salt, verifyingContract, }: {
15
+ name: string;
16
+ version: string;
17
+ salt: Hex;
18
+ verifyingContract: Address;
19
+ }): Hex;
20
+ type GuessDomainVersionParams = {
21
+ domain: Pick<PermitSupportResult["domain"], "name" | "verifyingContract" | "version">;
22
+ chainId: number;
23
+ domainSeparator: string;
24
+ };
25
+ type GuessDomainVersionResult = {
26
+ version: string;
27
+ chainId?: never;
28
+ salt?: never;
29
+ } | {
30
+ chainId: number;
31
+ version?: never;
32
+ salt?: never;
33
+ } | {
34
+ version: string;
35
+ chainId: number;
36
+ salt?: never;
37
+ } | {
38
+ version: string;
39
+ salt: Hex;
40
+ chainId?: never;
41
+ };
42
+ export declare function guessDomainParams({ domain, chainId, domainSeparator, }: GuessDomainVersionParams): GuessDomainVersionResult;
43
+ export {};
44
+ //# sourceMappingURL=domainSeparator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domainSeparator.d.ts","sourceRoot":"","sources":["../../../../src/hooks/permit/utils/domainSeparator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,GAAG,EAA0B,MAAM,MAAM,CAAC;AACtE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAEpD,wBAAgB,8BAA8B,CAAC,EAC7C,IAAI,EACJ,OAAO,EACP,OAAO,EACP,iBAAiB,GAClB,EAAE;IACD,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,EAAE,OAAO,CAAC;CAC5B,GAAG,GAAG,CA+BN;AAED,wBAAgB,uBAAuB,CAAC,EACtC,IAAI,EACJ,OAAO,EACP,iBAAiB,GAClB,EAAE;IACD,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,EAAE,OAAO,CAAC;CAC5B,GAAG,GAAG,CAQN;AAED,wBAAgB,6BAA6B,CAAC,EAC5C,IAAI,EACJ,OAAO,EACP,IAAI,EACJ,iBAAiB,GAClB,EAAE;IACD,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,GAAG,CAAC;IACV,iBAAiB,EAAE,OAAO,CAAC;CAC5B,GAAG,GAAG,CASN;AA8ED,KAAK,wBAAwB,GAAG;IAC9B,MAAM,EAAE,IAAI,CACV,mBAAmB,CAAC,QAAQ,CAAC,EAC7B,MAAM,GAAG,mBAAmB,GAAG,SAAS,CACzC,CAAC;IACF,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,KAAK,wBAAwB,GACzB;IACE,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,KAAK,CAAC;IAChB,IAAI,CAAC,EAAE,KAAK,CAAC;CACd,GACD;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,KAAK,CAAC;IAAC,IAAI,CAAC,EAAE,KAAK,CAAA;CAAE,GAClD;IACE,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,KAAK,CAAC;CACd,GACD;IACE,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,GAAG,CAAC;IACV,OAAO,CAAC,EAAE,KAAK,CAAC;CACjB,CAAC;AAEN,wBAAgB,iBAAiB,CAAC,EAChC,MAAM,EACN,OAAO,EACP,eAAe,GAChB,EAAE,wBAAwB,GAAG,wBAAwB,CAuIrD"}
@@ -0,0 +1,216 @@
1
+ import { toHex, domainSeparator } from 'viem';
2
+
3
+ globalThis.jotaiAtomCache = globalThis.jotaiAtomCache || {
4
+ cache: /* @__PURE__ */ new Map(),
5
+ get(name, inst) {
6
+ if (this.cache.has(name)) {
7
+ return this.cache.get(name);
8
+ }
9
+ this.cache.set(name, inst);
10
+ return inst;
11
+ }
12
+ };
13
+ function getDomainSeparatorVersionChain({
14
+ name,
15
+ version,
16
+ chainId,
17
+ verifyingContract
18
+ }) {
19
+ return domainSeparator({
20
+ domain: {
21
+ name,
22
+ version,
23
+ chainId,
24
+ verifyingContract
25
+ }
26
+ });
27
+ }
28
+ function getDomainSeparatorChain({
29
+ name,
30
+ chainId,
31
+ verifyingContract
32
+ }) {
33
+ return domainSeparator({
34
+ domain: {
35
+ name,
36
+ chainId,
37
+ verifyingContract
38
+ }
39
+ });
40
+ }
41
+ function getDomainSeparatorVersionSalt({
42
+ name,
43
+ version,
44
+ salt,
45
+ verifyingContract
46
+ }) {
47
+ return domainSeparator({
48
+ domain: {
49
+ name,
50
+ version,
51
+ verifyingContract,
52
+ salt
53
+ }
54
+ });
55
+ }
56
+ function computeDomainSeparator({
57
+ salt,
58
+ domain,
59
+ chainId
60
+ }) {
61
+ if (salt) {
62
+ const domainSeparator3 = getDomainSeparatorVersionSalt({
63
+ name: domain.name,
64
+ version: domain.version || "1",
65
+ // salt is used together with version
66
+ salt,
67
+ verifyingContract: domain.verifyingContract
68
+ });
69
+ return domainSeparator3;
70
+ }
71
+ if (domain.version) {
72
+ const domainSeparator3 = getDomainSeparatorVersionChain({
73
+ name: domain.name,
74
+ version: domain.version,
75
+ // salt is used together with version
76
+ chainId: BigInt(chainId),
77
+ verifyingContract: domain.verifyingContract
78
+ });
79
+ return domainSeparator3;
80
+ }
81
+ const domainSeparator2 = getDomainSeparatorChain({
82
+ name: domain.name,
83
+ chainId: BigInt(chainId),
84
+ verifyingContract: domain.verifyingContract
85
+ });
86
+ return domainSeparator2;
87
+ }
88
+ function guessDomainParams({
89
+ domain,
90
+ chainId,
91
+ domainSeparator: domainSeparator2
92
+ }) {
93
+ if (domain.version) {
94
+ const standardDomainSeparator2 = computeDomainSeparator({
95
+ domain: {
96
+ name: domain.name,
97
+ version: domain.version,
98
+ // maybe version=1, very often
99
+ verifyingContract: domain.verifyingContract
100
+ },
101
+ chainId
102
+ });
103
+ if (standardDomainSeparator2.toLowerCase() === domainSeparator2.toLowerCase()) {
104
+ return {
105
+ version: domain.version,
106
+ chainId
107
+ };
108
+ }
109
+ const salt2 = toHex(chainId, {
110
+ size: 32
111
+ });
112
+ const domainSeparatorWithSalt2 = computeDomainSeparator({
113
+ domain: {
114
+ name: domain.name,
115
+ version: domain.version,
116
+ verifyingContract: domain.verifyingContract
117
+ },
118
+ salt: salt2,
119
+ chainId
120
+ });
121
+ if (domainSeparatorWithSalt2.toLowerCase() === domainSeparator2.toLowerCase()) {
122
+ return {
123
+ version: domain.version,
124
+ salt: salt2
125
+ };
126
+ }
127
+ return {
128
+ chainId,
129
+ version: domain.version
130
+ };
131
+ }
132
+ const standardDomainSeparator = computeDomainSeparator({
133
+ domain: {
134
+ name: domain.name,
135
+ version: "1",
136
+ // maybe version=1, very often
137
+ verifyingContract: domain.verifyingContract
138
+ },
139
+ chainId
140
+ });
141
+ if (standardDomainSeparator.toLowerCase() === domainSeparator2.toLowerCase()) {
142
+ return {
143
+ version: "1",
144
+ chainId
145
+ };
146
+ }
147
+ const domainSeparatorWithoutVersion = computeDomainSeparator({
148
+ // maybe without version, often for older tokens
149
+ domain: {
150
+ name: domain.name,
151
+ verifyingContract: domain.verifyingContract
152
+ },
153
+ chainId
154
+ });
155
+ if (domainSeparatorWithoutVersion.toLowerCase() === domainSeparator2.toLowerCase()) {
156
+ return {
157
+ chainId
158
+ };
159
+ }
160
+ const salt = toHex(chainId, {
161
+ size: 32
162
+ });
163
+ const domainSeparatorWithSalt = computeDomainSeparator({
164
+ domain: {
165
+ name: domain.name,
166
+ version: "1",
167
+ verifyingContract: domain.verifyingContract
168
+ },
169
+ salt,
170
+ chainId
171
+ });
172
+ if (domainSeparatorWithSalt.toLowerCase() === domainSeparator2.toLowerCase()) {
173
+ return {
174
+ version: "1",
175
+ salt
176
+ };
177
+ }
178
+ const domainSeparatorV2 = computeDomainSeparator({
179
+ domain: {
180
+ name: domain.name,
181
+ version: "2",
182
+ // maybe version=2, often on newer tokens,
183
+ // but usually exposed publicly, together with eip712Domain
184
+ verifyingContract: domain.verifyingContract
185
+ },
186
+ chainId
187
+ });
188
+ if (domainSeparatorV2.toLowerCase() === domainSeparator2.toLowerCase()) {
189
+ return {
190
+ version: "2",
191
+ chainId
192
+ };
193
+ }
194
+ const domainSeparatorWithSaltV2 = computeDomainSeparator({
195
+ domain: {
196
+ name: domain.name,
197
+ version: "2",
198
+ verifyingContract: domain.verifyingContract
199
+ },
200
+ salt,
201
+ // version=2, but with salt
202
+ chainId
203
+ });
204
+ if (domainSeparatorWithSaltV2.toLowerCase() === domainSeparator2.toLowerCase()) {
205
+ return {
206
+ version: "2",
207
+ salt
208
+ };
209
+ }
210
+ return {
211
+ chainId
212
+ };
213
+ }
214
+
215
+ export { getDomainSeparatorChain, getDomainSeparatorVersionChain, getDomainSeparatorVersionSalt, guessDomainParams };
216
+ //# sourceMappingURL=domainSeparator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domainSeparator.js","sources":["../../../../src/hooks/permit/utils/domainSeparator.ts"],"sourcesContent":["import { type Address, type Hex, domainSeparator, toHex } from \"viem\";\nimport type { PermitSupportResult } from \"./detect\";\n\nexport function getDomainSeparatorVersionChain({\n name,\n version,\n chainId,\n verifyingContract,\n}: {\n name: string;\n version: string;\n chainId: bigint;\n verifyingContract: Address;\n}): Hex {\n /**\n * Internally does\n const EIP712_DOMAIN_TYPEHASH = keccak256(\n toBytes(\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\")\n );\n\n const nameHash = keccak256(toBytes(name));\n const versionHash = keccak256(toBytes(version));\n\n const encoded = encodeAbiParameters(\n [\n { type: 'bytes32', name: 'typeHash' },\n { type: 'bytes32', name: 'nameHash' },\n { type: 'bytes32', name: 'versionHash' },\n { type: 'uint256', name: 'chainId' },\n { type: 'address', name: 'verifyingContract' },\n ],\n [EIP712_DOMAIN_TYPEHASH, nameHash, versionHash, chainId, verifyingContract]\n );\n\n return keccak256(encoded);\n */\n return domainSeparator({\n domain: {\n name,\n version,\n chainId,\n verifyingContract,\n },\n });\n}\n\nexport function getDomainSeparatorChain({\n name,\n chainId,\n verifyingContract,\n}: {\n name: string;\n chainId: bigint;\n verifyingContract: Address;\n}): Hex {\n return domainSeparator({\n domain: {\n name,\n chainId,\n verifyingContract,\n },\n });\n}\n\nexport function getDomainSeparatorVersionSalt({\n name,\n version,\n salt,\n verifyingContract,\n}: {\n name: string;\n version: string;\n salt: Hex;\n verifyingContract: Address;\n}): Hex {\n return domainSeparator({\n domain: {\n name,\n version,\n verifyingContract,\n salt,\n },\n });\n}\n\ntype ComputeDomainSeparatorParams = {\n salt?: Hex; // used as salt (ex. USDC.e on Polygon)\n domain: Pick<\n PermitSupportResult[\"domain\"],\n \"name\" | \"version\" | \"verifyingContract\"\n >;\n chainId: number;\n};\n\nfunction computeDomainSeparator({\n salt,\n domain,\n chainId,\n}: ComputeDomainSeparatorParams): Hex {\n if (salt) {\n /** with salt (ex. USDC.e on Polygon)\n * DOMAIN_SEPARATOR = keccak256(\n abi.encode(\n EIP712_DOMAIN_TYPEHASH,\n keccak256(bytes(name)),\n keccak256(bytes(version)),\n address(this),\n bytes32(chainId) // salt\n )\n );\n }\n */\n\n const domainSeparator = getDomainSeparatorVersionSalt({\n name: domain.name,\n version: domain.version || \"1\", // salt is used together with version\n salt,\n verifyingContract: domain.verifyingContract,\n });\n\n return domainSeparator;\n }\n\n if (domain.version) {\n /** standard domainSeparator, with version and chainId\n * DOMAIN_SEPARATOR = keccak256(abi.encode(\n keccak256(\"EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)\"),\n keccak256(bytes(name)),\n keccak256(bytes(version)),\n chainId, // uint256\n address(this)\n ));\n */\n const domainSeparator = getDomainSeparatorVersionChain({\n name: domain.name,\n version: domain.version, // salt is used together with version\n chainId: BigInt(chainId),\n verifyingContract: domain.verifyingContract,\n });\n\n return domainSeparator;\n }\n\n /** without version\n * DOMAIN_SEPARATOR = keccak256(abi.encode(\n keccak256(\"EIP712Domain(string name,uint256 chainId,address verifyingContract)\"),\n keccak256(bytes(name)),\n chainId, // uint256\n address(this)\n ));\n */\n\n const domainSeparator = getDomainSeparatorChain({\n name: domain.name,\n chainId: BigInt(chainId),\n verifyingContract: domain.verifyingContract,\n });\n\n return domainSeparator;\n}\n\ntype GuessDomainVersionParams = {\n domain: Pick<\n PermitSupportResult[\"domain\"],\n \"name\" | \"verifyingContract\" | \"version\"\n >;\n chainId: number;\n domainSeparator: string;\n};\n\ntype GuessDomainVersionResult =\n | {\n version: string;\n chainId?: never;\n salt?: never;\n }\n | { chainId: number; version?: never; salt?: never }\n | {\n version: string;\n chainId: number;\n salt?: never;\n }\n | {\n version: string;\n salt: Hex;\n chainId?: never;\n };\n\nexport function guessDomainParams({\n domain,\n chainId,\n domainSeparator,\n}: GuessDomainVersionParams): GuessDomainVersionResult {\n // version was read from the contract, so it's included for certain\n if (domain.version) {\n const standardDomainSeparator = computeDomainSeparator({\n domain: {\n name: domain.name,\n version: domain.version, // maybe version=1, very often\n verifyingContract: domain.verifyingContract,\n },\n chainId,\n });\n\n if (\n standardDomainSeparator.toLowerCase() === domainSeparator.toLowerCase()\n ) {\n return {\n version: domain.version,\n chainId,\n };\n }\n\n // left-padded to bytes32\n const salt = toHex(chainId, { size: 32 }); // chainId used as salt (ex. USDC.e on Polygon)\n\n const domainSeparatorWithSalt = computeDomainSeparator({\n domain: {\n name: domain.name,\n version: domain.version,\n verifyingContract: domain.verifyingContract,\n },\n salt,\n chainId,\n });\n\n if (\n domainSeparatorWithSalt.toLowerCase() === domainSeparator.toLowerCase()\n ) {\n return {\n version: domain.version,\n salt,\n };\n }\n\n // even rarer domainSeparator, can't really guess params\n return { chainId, version: domain.version };\n }\n\n const standardDomainSeparator = computeDomainSeparator({\n domain: {\n name: domain.name,\n version: \"1\", // maybe version=1, very often\n verifyingContract: domain.verifyingContract,\n },\n chainId,\n });\n\n if (standardDomainSeparator.toLowerCase() === domainSeparator.toLowerCase()) {\n return {\n version: \"1\",\n chainId,\n };\n }\n\n const domainSeparatorWithoutVersion = computeDomainSeparator({\n // maybe without version, often for older tokens\n domain: { name: domain.name, verifyingContract: domain.verifyingContract },\n chainId,\n });\n\n if (\n domainSeparatorWithoutVersion.toLowerCase() ===\n domainSeparator.toLowerCase()\n ) {\n return {\n chainId,\n };\n }\n\n const salt = toHex(chainId, { size: 32 }); // chainId used as salt (ex. USDC.e on Polygon)\n\n const domainSeparatorWithSalt = computeDomainSeparator({\n domain: {\n name: domain.name,\n version: \"1\",\n verifyingContract: domain.verifyingContract,\n },\n salt,\n chainId,\n });\n\n if (domainSeparatorWithSalt.toLowerCase() === domainSeparator.toLowerCase()) {\n return {\n version: \"1\",\n salt,\n };\n }\n\n const domainSeparatorV2 = computeDomainSeparator({\n domain: {\n name: domain.name,\n version: \"2\", // maybe version=2, often on newer tokens,\n // but usually exposed publicly, together with eip712Domain\n verifyingContract: domain.verifyingContract,\n },\n chainId,\n });\n\n if (domainSeparatorV2.toLowerCase() === domainSeparator.toLowerCase()) {\n return {\n version: \"2\",\n chainId,\n };\n }\n\n const domainSeparatorWithSaltV2 = computeDomainSeparator({\n domain: {\n name: domain.name,\n version: \"2\",\n verifyingContract: domain.verifyingContract,\n },\n salt, // version=2, but with salt\n chainId,\n });\n\n if (\n domainSeparatorWithSaltV2.toLowerCase() === domainSeparator.toLowerCase()\n ) {\n return {\n version: \"2\",\n salt,\n };\n }\n\n // even rarer domainSeparator, can't really guess params\n return { chainId };\n}\n"],"names":["getDomainSeparatorVersionChain","name","version","chainId","verifyingContract","domainSeparator","domain","getDomainSeparatorChain","getDomainSeparatorVersionSalt","salt","computeDomainSeparator","BigInt","guessDomainParams","standardDomainSeparator","toLowerCase","toHex","size","domainSeparatorWithSalt","domainSeparatorWithoutVersion","domainSeparatorV2","domainSeparatorWithSaltV2"],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import { Hash } from 'viem';
2
+ import { DaiPermitInput, Permit1PermitInput } from './construct';
3
+ type EncodePermitMethodArgsInputEIP2612 = Pick<Permit1PermitInput, "owner" | "spender" | "value" | "nonce" | "deadline" | "type"> & {
4
+ signature: Hash;
5
+ };
6
+ type EncodePermitMethodArgsInputDAI = Pick<DaiPermitInput, "holder" | "spender" | "nonce" | "expiry" | "allowed" | "type"> & {
7
+ signature: Hash;
8
+ };
9
+ export declare function encodePermitMethodArgs(input: EncodePermitMethodArgsInputEIP2612 | EncodePermitMethodArgsInputDAI): Hash;
10
+ export {};
11
+ //# sourceMappingURL=encodeArgs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encodeArgs.d.ts","sourceRoot":"","sources":["../../../../src/hooks/permit/utils/encodeArgs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuC,KAAK,IAAI,EAAE,MAAM,MAAM,CAAC;AAEtE,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAEtE,KAAK,kCAAkC,GAAG,IAAI,CAC5C,kBAAkB,EAClB,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,GAAG,UAAU,GAAG,MAAM,CAC9D,GAAG;IACF,SAAS,EAAE,IAAI,CAAC;CACjB,CAAC;AAEF,KAAK,8BAA8B,GAAG,IAAI,CACxC,cAAc,EACd,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,CAC/D,GAAG;IACF,SAAS,EAAE,IAAI,CAAC;CACjB,CAAC;AASF,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,kCAAkC,GAAG,8BAA8B,GACzE,IAAI,CAuBN"}
@@ -0,0 +1,29 @@
1
+ import { parseSignature, encodeAbiParameters } from 'viem';
2
+ import { EIP_2612_PERMIT_ABI, DAI_PERMIT_ABI } from './abi.js';
3
+
4
+ globalThis.jotaiAtomCache = globalThis.jotaiAtomCache || {
5
+ cache: /* @__PURE__ */ new Map(),
6
+ get(name, inst) {
7
+ if (this.cache.has(name)) {
8
+ return this.cache.get(name);
9
+ }
10
+ this.cache.set(name, inst);
11
+ return inst;
12
+ }
13
+ };
14
+ const EIP_2612_PERMIT_PARAMETERS = EIP_2612_PERMIT_ABI.find((abiItem) => abiItem.name === "permit").inputs;
15
+ const DAI_PERMIT_PARAMETERS = DAI_PERMIT_ABI.find((abiItem) => abiItem.name === "permit").inputs;
16
+ function encodePermitMethodArgs(input) {
17
+ const {
18
+ r,
19
+ s,
20
+ v
21
+ } = parseSignature(input.signature);
22
+ if (input.type === "permit1") {
23
+ return encodeAbiParameters(EIP_2612_PERMIT_PARAMETERS, [input.owner, input.spender, input.value, input.deadline, Number(v), r, s]);
24
+ }
25
+ return encodeAbiParameters(DAI_PERMIT_PARAMETERS, [input.holder, input.spender, input.nonce, input.expiry, input.allowed, Number(v), r, s]);
26
+ }
27
+
28
+ export { encodePermitMethodArgs };
29
+ //# sourceMappingURL=encodeArgs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encodeArgs.js","sources":["../../../../src/hooks/permit/utils/encodeArgs.ts"],"sourcesContent":["import { encodeAbiParameters, parseSignature, type Hash } from \"viem\";\nimport { DAI_PERMIT_ABI, EIP_2612_PERMIT_ABI } from \"./abi\";\nimport type { DaiPermitInput, Permit1PermitInput } from \"./construct\";\n\ntype EncodePermitMethodArgsInputEIP2612 = Pick<\n Permit1PermitInput,\n \"owner\" | \"spender\" | \"value\" | \"nonce\" | \"deadline\" | \"type\"\n> & {\n signature: Hash;\n};\n\ntype EncodePermitMethodArgsInputDAI = Pick<\n DaiPermitInput,\n \"holder\" | \"spender\" | \"nonce\" | \"expiry\" | \"allowed\" | \"type\"\n> & {\n signature: Hash;\n};\n\nconst EIP_2612_PERMIT_PARAMETERS = EIP_2612_PERMIT_ABI.find(\n (abiItem) => abiItem.name === \"permit\"\n)!.inputs;\nconst DAI_PERMIT_PARAMETERS = DAI_PERMIT_ABI.find(\n (abiItem) => abiItem.name === \"permit\"\n)!.inputs;\n\nexport function encodePermitMethodArgs(\n input: EncodePermitMethodArgsInputEIP2612 | EncodePermitMethodArgsInputDAI\n): Hash {\n const { r, s, v } = parseSignature(input.signature);\n if (input.type === \"permit1\") {\n return encodeAbiParameters(EIP_2612_PERMIT_PARAMETERS, [\n input.owner,\n input.spender,\n input.value,\n input.deadline,\n Number(v),\n r,\n s,\n ]);\n }\n return encodeAbiParameters(DAI_PERMIT_PARAMETERS, [\n input.holder,\n input.spender,\n input.nonce,\n input.expiry,\n input.allowed,\n Number(v),\n r,\n s,\n ]);\n}\n"],"names":["EIP_2612_PERMIT_PARAMETERS","EIP_2612_PERMIT_ABI","find","abiItem","name","inputs","DAI_PERMIT_PARAMETERS","DAI_PERMIT_ABI","encodePermitMethodArgs","input","r","s","v","parseSignature","signature","type","encodeAbiParameters","owner","spender","value","deadline","Number","holder","nonce","expiry","allowed"],"mappings":";;;;;;;;;;;;;AAkBA,MAAMA,6BAA6BC,mBAAAA,CAAoBC,IAAAA,CACpDC,aAAYA,OAAAA,CAAQC,IAAAA,KAAS,QAChC,CAAA,CAAGC,MAAAA;AACH,MAAMC,wBAAwBC,cAAAA,CAAeL,IAAAA,CAC1CC,aAAYA,OAAAA,CAAQC,IAAAA,KAAS,QAChC,CAAA,CAAGC,MAAAA;AAEI,SAASG,uBACdC,KAAAA,EACM;AACN,EAAA,MAAM;AAAA,IAAEC,CAAAA;AAAAA,IAAGC,CAAAA;AAAAA,IAAGC;AAAAA,GAAE,GAAIC,cAAAA,CAAeJ,KAAAA,CAAMK,SAAS,CAAA;AAClD,EAAA,IAAIL,KAAAA,CAAMM,SAAS,SAAA,EAAW;AAC5B,IAAA,OAAOC,oBAAoBhB,0BAAAA,EAA4B,CACrDS,KAAAA,CAAMQ,KAAAA,EACNR,MAAMS,OAAAA,EACNT,KAAAA,CAAMU,KAAAA,EACNV,KAAAA,CAAMW,UACNC,MAAAA,CAAOT,CAAC,CAAA,EACRF,CAAAA,EACAC,CAAC,CACF,CAAA;AAAA;AAEH,EAAA,OAAOK,oBAAoBV,qBAAAA,EAAuB,CAChDG,MAAMa,MAAAA,EACNb,KAAAA,CAAMS,SACNT,KAAAA,CAAMc,KAAAA,EACNd,KAAAA,CAAMe,MAAAA,EACNf,MAAMgB,OAAAA,EACNJ,MAAAA,CAAOT,CAAC,CAAA,EACRF,CAAAA,EACAC,CAAC,CACF,CAAA;AACH;;;;"}
@@ -0,0 +1,42 @@
1
+ import { Config } from '@wagmi/core';
2
+ import { Address } from 'viem';
3
+ import { NotDetectedPermitSupport, PermitSupportResult } from './detect';
4
+ import { NonceMethod } from '../hooks/usePermit1Nonce';
5
+ import { SupportedChainId } from '../../../lib/web3/wagmi/types';
6
+ export type TrySignPermitParams = {
7
+ config: Config;
8
+ permitInfo: PermitSupportResult | NotDetectedPermitSupport;
9
+ tokenAddress: Address;
10
+ spenderAddress?: Address;
11
+ amount?: bigint;
12
+ chainId: SupportedChainId;
13
+ };
14
+ export type TrySignPermitSuccess = {
15
+ tokenAddress: Address;
16
+ chainId: SupportedChainId;
17
+ permitInfo: PermitSupportResult;
18
+ success: true;
19
+ error: null;
20
+ nonceBefore: bigint;
21
+ nonceAfter: bigint;
22
+ nonceMethod: NonceMethod;
23
+ };
24
+ export type TrySignPermitFailure = {
25
+ tokenAddress: Address;
26
+ chainId: SupportedChainId;
27
+ permitInfo: PermitSupportResult | NotDetectedPermitSupport;
28
+ success: false;
29
+ error: string;
30
+ };
31
+ export type TrySignPermitResult = TrySignPermitSuccess | TrySignPermitFailure;
32
+ /**
33
+ * Ultimate check if signing a permit will succeed with detected permitInfo
34
+ * Tests permit functionality by:
35
+ * 1. Creating a random wallet
36
+ * 2. Reading the wallet's nonce
37
+ * 3. Signing permit data with the wallet
38
+ * 4. Making a multicall with: [read nonce, permit(), read nonce]
39
+ * 5. Verifying the nonce increased (indicating permit was processed)
40
+ */
41
+ export declare function trySignPermit1({ config, chainId, permitInfo, tokenAddress, spenderAddress, amount, }: TrySignPermitParams): Promise<TrySignPermitResult>;
42
+ //# sourceMappingURL=trySignPermit1.d.ts.map