@debridge-finance/borderless-validation-sdk 0.0.0-dev-dee2389

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 (345) hide show
  1. package/dist/cjs/graylists/evm/token-permit-metadata.js +28 -0
  2. package/dist/cjs/graylists/evm/token-permit-metadata.js.map +1 -0
  3. package/dist/cjs/helpers/address.js +75 -0
  4. package/dist/cjs/helpers/address.js.map +1 -0
  5. package/dist/cjs/helpers/caveat-decoder.js +60 -0
  6. package/dist/cjs/helpers/caveat-decoder.js.map +1 -0
  7. package/dist/cjs/helpers/constants.js +6 -0
  8. package/dist/cjs/helpers/constants.js.map +1 -0
  9. package/dist/cjs/helpers/evm-action.js +20 -0
  10. package/dist/cjs/helpers/evm-action.js.map +1 -0
  11. package/dist/cjs/helpers/evm-calldata.js +45 -0
  12. package/dist/cjs/helpers/evm-calldata.js.map +1 -0
  13. package/dist/cjs/helpers/evm-intent-id-abi.js +67 -0
  14. package/dist/cjs/helpers/evm-intent-id-abi.js.map +1 -0
  15. package/dist/cjs/helpers/evm-intent-id.js +70 -0
  16. package/dist/cjs/helpers/evm-intent-id.js.map +1 -0
  17. package/dist/cjs/helpers/evm-token.js +30 -0
  18. package/dist/cjs/helpers/evm-token.js.map +1 -0
  19. package/dist/cjs/helpers/evm-trade-amounts.js +42 -0
  20. package/dist/cjs/helpers/evm-trade-amounts.js.map +1 -0
  21. package/dist/cjs/helpers/solana-instruction.js +160 -0
  22. package/dist/cjs/helpers/solana-instruction.js.map +1 -0
  23. package/dist/cjs/helpers/solana-intent-id.js +460 -0
  24. package/dist/cjs/helpers/solana-intent-id.js.map +1 -0
  25. package/dist/cjs/helpers/solana-transaction-decode.js +58 -0
  26. package/dist/cjs/helpers/solana-transaction-decode.js.map +1 -0
  27. package/dist/cjs/helpers/zod.js +12 -0
  28. package/dist/cjs/helpers/zod.js.map +1 -0
  29. package/dist/cjs/index.js +9 -0
  30. package/dist/cjs/index.js.map +1 -0
  31. package/dist/cjs/package.json +1 -0
  32. package/dist/cjs/types/enums.js +137 -0
  33. package/dist/cjs/types/enums.js.map +1 -0
  34. package/dist/cjs/types/index.js +21 -0
  35. package/dist/cjs/types/index.js.map +1 -0
  36. package/dist/cjs/types/request.js +65 -0
  37. package/dist/cjs/types/request.js.map +1 -0
  38. package/dist/cjs/types/response.js +252 -0
  39. package/dist/cjs/types/response.js.map +1 -0
  40. package/dist/cjs/types/validation.js +242 -0
  41. package/dist/cjs/types/validation.js.map +1 -0
  42. package/dist/cjs/validations/echo-fields.js +67 -0
  43. package/dist/cjs/validations/echo-fields.js.map +1 -0
  44. package/dist/cjs/validations/evm-caveats.js +235 -0
  45. package/dist/cjs/validations/evm-caveats.js.map +1 -0
  46. package/dist/cjs/validations/evm-op-budget.js +261 -0
  47. package/dist/cjs/validations/evm-op-budget.js.map +1 -0
  48. package/dist/cjs/validations/evm-op-gas-compensation.js +152 -0
  49. package/dist/cjs/validations/evm-op-gas-compensation.js.map +1 -0
  50. package/dist/cjs/validations/evm-op-hook.js +8 -0
  51. package/dist/cjs/validations/evm-op-hook.js.map +1 -0
  52. package/dist/cjs/validations/evm-op-wrap.js +112 -0
  53. package/dist/cjs/validations/evm-op-wrap.js.map +1 -0
  54. package/dist/cjs/validations/evm-permit.js +224 -0
  55. package/dist/cjs/validations/evm-permit.js.map +1 -0
  56. package/dist/cjs/validations/evm-permit2.js +361 -0
  57. package/dist/cjs/validations/evm-permit2.js.map +1 -0
  58. package/dist/cjs/validations/evm-required-actions.js +184 -0
  59. package/dist/cjs/validations/evm-required-actions.js.map +1 -0
  60. package/dist/cjs/validations/evm-sign712-metamask.js +147 -0
  61. package/dist/cjs/validations/evm-sign712-metamask.js.map +1 -0
  62. package/dist/cjs/validations/evm-sign712.js +203 -0
  63. package/dist/cjs/validations/evm-sign712.js.map +1 -0
  64. package/dist/cjs/validations/evm-sign7702.js +59 -0
  65. package/dist/cjs/validations/evm-sign7702.js.map +1 -0
  66. package/dist/cjs/validations/evm-transaction.js +38 -0
  67. package/dist/cjs/validations/evm-transaction.js.map +1 -0
  68. package/dist/cjs/validations/hooks-common.js +207 -0
  69. package/dist/cjs/validations/hooks-common.js.map +1 -0
  70. package/dist/cjs/validations/required-actions.js +69 -0
  71. package/dist/cjs/validations/required-actions.js.map +1 -0
  72. package/dist/cjs/validations/solana-hook.js +225 -0
  73. package/dist/cjs/validations/solana-hook.js.map +1 -0
  74. package/dist/cjs/validations/solana-op-budget.js +293 -0
  75. package/dist/cjs/validations/solana-op-budget.js.map +1 -0
  76. package/dist/cjs/validations/solana-op-wrap.js +191 -0
  77. package/dist/cjs/validations/solana-op-wrap.js.map +1 -0
  78. package/dist/cjs/validations/solana-required-actions.js +122 -0
  79. package/dist/cjs/validations/solana-required-actions.js.map +1 -0
  80. package/dist/cjs/validations/solana-sign.js +171 -0
  81. package/dist/cjs/validations/solana-sign.js.map +1 -0
  82. package/dist/cjs/validations/solana-transaction.js +238 -0
  83. package/dist/cjs/validations/solana-transaction.js.map +1 -0
  84. package/dist/cjs/validations/trade-grouping.js +165 -0
  85. package/dist/cjs/validations/trade-grouping.js.map +1 -0
  86. package/dist/cjs/validations/trade-intent-consistency.js +104 -0
  87. package/dist/cjs/validations/trade-intent-consistency.js.map +1 -0
  88. package/dist/cjs/validations/trades.js +517 -0
  89. package/dist/cjs/validations/trades.js.map +1 -0
  90. package/dist/cjs/validator.js +75 -0
  91. package/dist/cjs/validator.js.map +1 -0
  92. package/dist/cjs/whitelists/environment-config.js +118 -0
  93. package/dist/cjs/whitelists/environment-config.js.map +1 -0
  94. package/dist/cjs/whitelists/evm/caveat-enforcers.js +18 -0
  95. package/dist/cjs/whitelists/evm/caveat-enforcers.js.map +1 -0
  96. package/dist/cjs/whitelists/evm/delegation-manager.js +9 -0
  97. package/dist/cjs/whitelists/evm/delegation-manager.js.map +1 -0
  98. package/dist/cjs/whitelists/evm/eip7702-delegation.js +8 -0
  99. package/dist/cjs/whitelists/evm/eip7702-delegation.js.map +1 -0
  100. package/dist/cjs/whitelists/evm/index.js +17 -0
  101. package/dist/cjs/whitelists/evm/index.js.map +1 -0
  102. package/dist/cjs/whitelists/evm/permit2.js +18 -0
  103. package/dist/cjs/whitelists/evm/permit2.js.map +1 -0
  104. package/dist/cjs/whitelists/evm/weth.js +19 -0
  105. package/dist/cjs/whitelists/evm/weth.js.map +1 -0
  106. package/dist/cjs/whitelists/solana/index.js +19 -0
  107. package/dist/cjs/whitelists/solana/index.js.map +1 -0
  108. package/dist/cjs/whitelists/solana/intent-signature.js +25 -0
  109. package/dist/cjs/whitelists/solana/intent-signature.js.map +1 -0
  110. package/dist/cjs/whitelists/solana/programs.js +19 -0
  111. package/dist/cjs/whitelists/solana/programs.js.map +1 -0
  112. package/dist/cjs/whitelists/subscription-to-chain-id.js +36 -0
  113. package/dist/cjs/whitelists/subscription-to-chain-id.js.map +1 -0
  114. package/dist/cjs/whitelists/types.js +29 -0
  115. package/dist/cjs/whitelists/types.js.map +1 -0
  116. package/dist/esm/graylists/evm/token-permit-metadata.js +24 -0
  117. package/dist/esm/graylists/evm/token-permit-metadata.js.map +1 -0
  118. package/dist/esm/helpers/address.js +63 -0
  119. package/dist/esm/helpers/address.js.map +1 -0
  120. package/dist/esm/helpers/caveat-decoder.js +55 -0
  121. package/dist/esm/helpers/caveat-decoder.js.map +1 -0
  122. package/dist/esm/helpers/constants.js +3 -0
  123. package/dist/esm/helpers/constants.js.map +1 -0
  124. package/dist/esm/helpers/evm-action.js +16 -0
  125. package/dist/esm/helpers/evm-action.js.map +1 -0
  126. package/dist/esm/helpers/evm-calldata.js +39 -0
  127. package/dist/esm/helpers/evm-calldata.js.map +1 -0
  128. package/dist/esm/helpers/evm-intent-id-abi.js +64 -0
  129. package/dist/esm/helpers/evm-intent-id-abi.js.map +1 -0
  130. package/dist/esm/helpers/evm-intent-id.js +67 -0
  131. package/dist/esm/helpers/evm-intent-id.js.map +1 -0
  132. package/dist/esm/helpers/evm-token.js +25 -0
  133. package/dist/esm/helpers/evm-token.js.map +1 -0
  134. package/dist/esm/helpers/evm-trade-amounts.js +39 -0
  135. package/dist/esm/helpers/evm-trade-amounts.js.map +1 -0
  136. package/dist/esm/helpers/solana-instruction.js +146 -0
  137. package/dist/esm/helpers/solana-instruction.js.map +1 -0
  138. package/dist/esm/helpers/solana-intent-id.js +457 -0
  139. package/dist/esm/helpers/solana-intent-id.js.map +1 -0
  140. package/dist/esm/helpers/solana-transaction-decode.js +55 -0
  141. package/dist/esm/helpers/solana-transaction-decode.js.map +1 -0
  142. package/dist/esm/helpers/zod.js +9 -0
  143. package/dist/esm/helpers/zod.js.map +1 -0
  144. package/dist/esm/index.js +3 -0
  145. package/dist/esm/index.js.map +1 -0
  146. package/dist/esm/package.json +1 -0
  147. package/dist/esm/types/enums.js +134 -0
  148. package/dist/esm/types/enums.js.map +1 -0
  149. package/dist/esm/types/index.js +5 -0
  150. package/dist/esm/types/index.js.map +1 -0
  151. package/dist/esm/types/request.js +62 -0
  152. package/dist/esm/types/request.js.map +1 -0
  153. package/dist/esm/types/response.js +249 -0
  154. package/dist/esm/types/response.js.map +1 -0
  155. package/dist/esm/types/validation.js +239 -0
  156. package/dist/esm/types/validation.js.map +1 -0
  157. package/dist/esm/validations/echo-fields.js +64 -0
  158. package/dist/esm/validations/echo-fields.js.map +1 -0
  159. package/dist/esm/validations/evm-caveats.js +228 -0
  160. package/dist/esm/validations/evm-caveats.js.map +1 -0
  161. package/dist/esm/validations/evm-op-budget.js +258 -0
  162. package/dist/esm/validations/evm-op-budget.js.map +1 -0
  163. package/dist/esm/validations/evm-op-gas-compensation.js +149 -0
  164. package/dist/esm/validations/evm-op-gas-compensation.js.map +1 -0
  165. package/dist/esm/validations/evm-op-hook.js +5 -0
  166. package/dist/esm/validations/evm-op-hook.js.map +1 -0
  167. package/dist/esm/validations/evm-op-wrap.js +109 -0
  168. package/dist/esm/validations/evm-op-wrap.js.map +1 -0
  169. package/dist/esm/validations/evm-permit.js +221 -0
  170. package/dist/esm/validations/evm-permit.js.map +1 -0
  171. package/dist/esm/validations/evm-permit2.js +358 -0
  172. package/dist/esm/validations/evm-permit2.js.map +1 -0
  173. package/dist/esm/validations/evm-required-actions.js +181 -0
  174. package/dist/esm/validations/evm-required-actions.js.map +1 -0
  175. package/dist/esm/validations/evm-sign712-metamask.js +144 -0
  176. package/dist/esm/validations/evm-sign712-metamask.js.map +1 -0
  177. package/dist/esm/validations/evm-sign712.js +200 -0
  178. package/dist/esm/validations/evm-sign712.js.map +1 -0
  179. package/dist/esm/validations/evm-sign7702.js +56 -0
  180. package/dist/esm/validations/evm-sign7702.js.map +1 -0
  181. package/dist/esm/validations/evm-transaction.js +35 -0
  182. package/dist/esm/validations/evm-transaction.js.map +1 -0
  183. package/dist/esm/validations/hooks-common.js +204 -0
  184. package/dist/esm/validations/hooks-common.js.map +1 -0
  185. package/dist/esm/validations/required-actions.js +66 -0
  186. package/dist/esm/validations/required-actions.js.map +1 -0
  187. package/dist/esm/validations/solana-hook.js +222 -0
  188. package/dist/esm/validations/solana-hook.js.map +1 -0
  189. package/dist/esm/validations/solana-op-budget.js +290 -0
  190. package/dist/esm/validations/solana-op-budget.js.map +1 -0
  191. package/dist/esm/validations/solana-op-wrap.js +188 -0
  192. package/dist/esm/validations/solana-op-wrap.js.map +1 -0
  193. package/dist/esm/validations/solana-required-actions.js +119 -0
  194. package/dist/esm/validations/solana-required-actions.js.map +1 -0
  195. package/dist/esm/validations/solana-sign.js +168 -0
  196. package/dist/esm/validations/solana-sign.js.map +1 -0
  197. package/dist/esm/validations/solana-transaction.js +234 -0
  198. package/dist/esm/validations/solana-transaction.js.map +1 -0
  199. package/dist/esm/validations/trade-grouping.js +161 -0
  200. package/dist/esm/validations/trade-grouping.js.map +1 -0
  201. package/dist/esm/validations/trade-intent-consistency.js +101 -0
  202. package/dist/esm/validations/trade-intent-consistency.js.map +1 -0
  203. package/dist/esm/validations/trades.js +514 -0
  204. package/dist/esm/validations/trades.js.map +1 -0
  205. package/dist/esm/validator.js +72 -0
  206. package/dist/esm/validator.js.map +1 -0
  207. package/dist/esm/whitelists/environment-config.js +115 -0
  208. package/dist/esm/whitelists/environment-config.js.map +1 -0
  209. package/dist/esm/whitelists/evm/caveat-enforcers.js +15 -0
  210. package/dist/esm/whitelists/evm/caveat-enforcers.js.map +1 -0
  211. package/dist/esm/whitelists/evm/delegation-manager.js +6 -0
  212. package/dist/esm/whitelists/evm/delegation-manager.js.map +1 -0
  213. package/dist/esm/whitelists/evm/eip7702-delegation.js +5 -0
  214. package/dist/esm/whitelists/evm/eip7702-delegation.js.map +1 -0
  215. package/dist/esm/whitelists/evm/index.js +6 -0
  216. package/dist/esm/whitelists/evm/index.js.map +1 -0
  217. package/dist/esm/whitelists/evm/permit2.js +15 -0
  218. package/dist/esm/whitelists/evm/permit2.js.map +1 -0
  219. package/dist/esm/whitelists/evm/weth.js +16 -0
  220. package/dist/esm/whitelists/evm/weth.js.map +1 -0
  221. package/dist/esm/whitelists/solana/index.js +3 -0
  222. package/dist/esm/whitelists/solana/index.js.map +1 -0
  223. package/dist/esm/whitelists/solana/intent-signature.js +22 -0
  224. package/dist/esm/whitelists/solana/intent-signature.js.map +1 -0
  225. package/dist/esm/whitelists/solana/programs.js +16 -0
  226. package/dist/esm/whitelists/solana/programs.js.map +1 -0
  227. package/dist/esm/whitelists/subscription-to-chain-id.js +32 -0
  228. package/dist/esm/whitelists/subscription-to-chain-id.js.map +1 -0
  229. package/dist/esm/whitelists/types.js +26 -0
  230. package/dist/esm/whitelists/types.js.map +1 -0
  231. package/dist/types/graylists/evm/token-permit-metadata.d.ts +11 -0
  232. package/dist/types/graylists/evm/token-permit-metadata.d.ts.map +1 -0
  233. package/dist/types/helpers/address.d.ts +13 -0
  234. package/dist/types/helpers/address.d.ts.map +1 -0
  235. package/dist/types/helpers/caveat-decoder.d.ts +13 -0
  236. package/dist/types/helpers/caveat-decoder.d.ts.map +1 -0
  237. package/dist/types/helpers/constants.d.ts +2 -0
  238. package/dist/types/helpers/constants.d.ts.map +1 -0
  239. package/dist/types/helpers/evm-action.d.ts +4 -0
  240. package/dist/types/helpers/evm-action.d.ts.map +1 -0
  241. package/dist/types/helpers/evm-calldata.d.ts +15 -0
  242. package/dist/types/helpers/evm-calldata.d.ts.map +1 -0
  243. package/dist/types/helpers/evm-intent-id-abi.d.ts +106 -0
  244. package/dist/types/helpers/evm-intent-id-abi.d.ts.map +1 -0
  245. package/dist/types/helpers/evm-intent-id.d.ts +3 -0
  246. package/dist/types/helpers/evm-intent-id.d.ts.map +1 -0
  247. package/dist/types/helpers/evm-token.d.ts +4 -0
  248. package/dist/types/helpers/evm-token.d.ts.map +1 -0
  249. package/dist/types/helpers/evm-trade-amounts.d.ts +16 -0
  250. package/dist/types/helpers/evm-trade-amounts.d.ts.map +1 -0
  251. package/dist/types/helpers/solana-instruction.d.ts +44 -0
  252. package/dist/types/helpers/solana-instruction.d.ts.map +1 -0
  253. package/dist/types/helpers/solana-intent-id.d.ts +3 -0
  254. package/dist/types/helpers/solana-intent-id.d.ts.map +1 -0
  255. package/dist/types/helpers/solana-transaction-decode.d.ts +18 -0
  256. package/dist/types/helpers/solana-transaction-decode.d.ts.map +1 -0
  257. package/dist/types/helpers/zod.d.ts +2 -0
  258. package/dist/types/helpers/zod.d.ts.map +1 -0
  259. package/dist/types/index.d.ts +4 -0
  260. package/dist/types/index.d.ts.map +1 -0
  261. package/dist/types/types/enums.d.ts +112 -0
  262. package/dist/types/types/enums.d.ts.map +1 -0
  263. package/dist/types/types/index.d.ts +5 -0
  264. package/dist/types/types/index.d.ts.map +1 -0
  265. package/dist/types/types/request.d.ts +134 -0
  266. package/dist/types/types/request.d.ts.map +1 -0
  267. package/dist/types/types/response.d.ts +1140 -0
  268. package/dist/types/types/response.d.ts.map +1 -0
  269. package/dist/types/types/validation.d.ts +216 -0
  270. package/dist/types/types/validation.d.ts.map +1 -0
  271. package/dist/types/validations/echo-fields.d.ts +3 -0
  272. package/dist/types/validations/echo-fields.d.ts.map +1 -0
  273. package/dist/types/validations/evm-caveats.d.ts +33 -0
  274. package/dist/types/validations/evm-caveats.d.ts.map +1 -0
  275. package/dist/types/validations/evm-op-budget.d.ts +4 -0
  276. package/dist/types/validations/evm-op-budget.d.ts.map +1 -0
  277. package/dist/types/validations/evm-op-gas-compensation.d.ts +3 -0
  278. package/dist/types/validations/evm-op-gas-compensation.d.ts.map +1 -0
  279. package/dist/types/validations/evm-op-hook.d.ts +3 -0
  280. package/dist/types/validations/evm-op-hook.d.ts.map +1 -0
  281. package/dist/types/validations/evm-op-wrap.d.ts +3 -0
  282. package/dist/types/validations/evm-op-wrap.d.ts.map +1 -0
  283. package/dist/types/validations/evm-permit.d.ts +4 -0
  284. package/dist/types/validations/evm-permit.d.ts.map +1 -0
  285. package/dist/types/validations/evm-permit2.d.ts +4 -0
  286. package/dist/types/validations/evm-permit2.d.ts.map +1 -0
  287. package/dist/types/validations/evm-required-actions.d.ts +4 -0
  288. package/dist/types/validations/evm-required-actions.d.ts.map +1 -0
  289. package/dist/types/validations/evm-sign712-metamask.d.ts +3 -0
  290. package/dist/types/validations/evm-sign712-metamask.d.ts.map +1 -0
  291. package/dist/types/validations/evm-sign712.d.ts +4 -0
  292. package/dist/types/validations/evm-sign712.d.ts.map +1 -0
  293. package/dist/types/validations/evm-sign7702.d.ts +3 -0
  294. package/dist/types/validations/evm-sign7702.d.ts.map +1 -0
  295. package/dist/types/validations/evm-transaction.d.ts +3 -0
  296. package/dist/types/validations/evm-transaction.d.ts.map +1 -0
  297. package/dist/types/validations/hooks-common.d.ts +3 -0
  298. package/dist/types/validations/hooks-common.d.ts.map +1 -0
  299. package/dist/types/validations/required-actions.d.ts +4 -0
  300. package/dist/types/validations/required-actions.d.ts.map +1 -0
  301. package/dist/types/validations/solana-hook.d.ts +4 -0
  302. package/dist/types/validations/solana-hook.d.ts.map +1 -0
  303. package/dist/types/validations/solana-op-budget.d.ts +5 -0
  304. package/dist/types/validations/solana-op-budget.d.ts.map +1 -0
  305. package/dist/types/validations/solana-op-wrap.d.ts +4 -0
  306. package/dist/types/validations/solana-op-wrap.d.ts.map +1 -0
  307. package/dist/types/validations/solana-required-actions.d.ts +4 -0
  308. package/dist/types/validations/solana-required-actions.d.ts.map +1 -0
  309. package/dist/types/validations/solana-sign.d.ts +4 -0
  310. package/dist/types/validations/solana-sign.d.ts.map +1 -0
  311. package/dist/types/validations/solana-transaction.d.ts +5 -0
  312. package/dist/types/validations/solana-transaction.d.ts.map +1 -0
  313. package/dist/types/validations/trade-grouping.d.ts +22 -0
  314. package/dist/types/validations/trade-grouping.d.ts.map +1 -0
  315. package/dist/types/validations/trade-intent-consistency.d.ts +3 -0
  316. package/dist/types/validations/trade-intent-consistency.d.ts.map +1 -0
  317. package/dist/types/validations/trades.d.ts +3 -0
  318. package/dist/types/validations/trades.d.ts.map +1 -0
  319. package/dist/types/validator.d.ts +3 -0
  320. package/dist/types/validator.d.ts.map +1 -0
  321. package/dist/types/whitelists/environment-config.d.ts +4 -0
  322. package/dist/types/whitelists/environment-config.d.ts.map +1 -0
  323. package/dist/types/whitelists/evm/caveat-enforcers.d.ts +6 -0
  324. package/dist/types/whitelists/evm/caveat-enforcers.d.ts.map +1 -0
  325. package/dist/types/whitelists/evm/delegation-manager.d.ts +3 -0
  326. package/dist/types/whitelists/evm/delegation-manager.d.ts.map +1 -0
  327. package/dist/types/whitelists/evm/eip7702-delegation.d.ts +3 -0
  328. package/dist/types/whitelists/evm/eip7702-delegation.d.ts.map +1 -0
  329. package/dist/types/whitelists/evm/index.d.ts +6 -0
  330. package/dist/types/whitelists/evm/index.d.ts.map +1 -0
  331. package/dist/types/whitelists/evm/permit2.d.ts +3 -0
  332. package/dist/types/whitelists/evm/permit2.d.ts.map +1 -0
  333. package/dist/types/whitelists/evm/weth.d.ts +3 -0
  334. package/dist/types/whitelists/evm/weth.d.ts.map +1 -0
  335. package/dist/types/whitelists/solana/index.d.ts +3 -0
  336. package/dist/types/whitelists/solana/index.d.ts.map +1 -0
  337. package/dist/types/whitelists/solana/intent-signature.d.ts +9 -0
  338. package/dist/types/whitelists/solana/intent-signature.d.ts.map +1 -0
  339. package/dist/types/whitelists/solana/programs.d.ts +9 -0
  340. package/dist/types/whitelists/solana/programs.d.ts.map +1 -0
  341. package/dist/types/whitelists/subscription-to-chain-id.d.ts +4 -0
  342. package/dist/types/whitelists/subscription-to-chain-id.d.ts.map +1 -0
  343. package/dist/types/whitelists/types.d.ts +18 -0
  344. package/dist/types/whitelists/types.d.ts.map +1 -0
  345. package/package.json +59 -0
@@ -0,0 +1,221 @@
1
+ import { ViolationCode, EvmActionKind, EvmActionOperation, ApprovalMode, } from "../types/index.js";
2
+ import { isWhitelisted } from "../whitelists/types.js";
3
+ import { resolveWrappedTokenAddress } from "../helpers/evm-token.js";
4
+ import { getTokenPermitMetadata } from "../graylists/evm/token-permit-metadata.js";
5
+ import { addressEquals, normalizeAddress } from "../helpers/address.js";
6
+ // =============================================
7
+ // Permit (EIP-2612) constraints
8
+ // =============================================
9
+ export function validatePermitActions(actions, basePath, request, response, realChainId, quoteMode, trades, srcChainAuthorityAddress, envConfig) {
10
+ const violations = [];
11
+ for (let i = 0; i < actions.length; i++) {
12
+ const action = actions[i];
13
+ if (action.type !== EvmActionKind.Permit)
14
+ continue;
15
+ const actionPath = `${basePath}.requiredActions[${i}]`;
16
+ const data = action.data;
17
+ // CRITICAL: Permit only allowed with approvalMode === 'permit'
18
+ violations.push(...validatePermitApprovalMode(request, actionPath));
19
+ // HIGH: actions[] must contain exactly [Budget]
20
+ violations.push(...validatePermitActionsList(action, actionPath));
21
+ violations.push(...validatePermitPrimaryType(data, actionPath), ...validatePermitDomain(data, actionPath, realChainId, trades), ...validatePermitMessage(data, actionPath, response, realChainId, quoteMode, srcChainAuthorityAddress, envConfig), ...validatePermitDetails(action, data, actionPath, realChainId));
22
+ }
23
+ return violations;
24
+ }
25
+ // CRITICAL: Permit only allowed with approvalMode === 'permit'
26
+ function validatePermitApprovalMode(request, actionPath) {
27
+ if (request.approvalMode !== ApprovalMode.Permit) {
28
+ return [{
29
+ code: ViolationCode.PermitForbiddenWithoutPermitMode,
30
+ message: `Permit action requires approvalMode="${ApprovalMode.Permit}"`,
31
+ path: `${actionPath}.type`,
32
+ expected: ApprovalMode.Permit,
33
+ actual: request.approvalMode,
34
+ }];
35
+ }
36
+ return [];
37
+ }
38
+ // HIGH: actions[] must contain exactly [Budget]
39
+ function validatePermitActionsList(action, actionPath) {
40
+ if (action.actions.length !== 1 ||
41
+ action.actions[0] !== EvmActionOperation.Budget) {
42
+ return [{
43
+ code: ViolationCode.PermitActionsNotSingleBudget,
44
+ message: `Permit actions must contain exactly [Budget]`,
45
+ path: `${actionPath}.actions`,
46
+ expected: [EvmActionOperation.Budget],
47
+ actual: action.actions,
48
+ }];
49
+ }
50
+ return [];
51
+ }
52
+ // CRITICAL: primaryType must be "Permit"
53
+ function validatePermitPrimaryType(data, actionPath) {
54
+ if (data.primaryType !== "Permit") {
55
+ return [{
56
+ code: ViolationCode.PermitPrimaryTypeInvalid,
57
+ message: `Permit primaryType must be "Permit"`,
58
+ path: `${actionPath}.data.primaryType`,
59
+ expected: "Permit",
60
+ actual: data.primaryType,
61
+ }];
62
+ }
63
+ return [];
64
+ }
65
+ // CRITICAL: domain.chainId = real chainId
66
+ // CRITICAL: domain.verifyingContract = token address (or WETH for native)
67
+ // LOW: domain.name/version checked against graylist for known tokens
68
+ function validatePermitDomain(data, actionPath, realChainId, trades) {
69
+ const violations = [];
70
+ // CRITICAL: domain.chainId must equal real chainId
71
+ if (data.domain.chainId !== realChainId) {
72
+ violations.push({
73
+ code: ViolationCode.PermitChainIdMismatch,
74
+ message: `Permit domain.chainId does not match the real chainId`,
75
+ path: `${actionPath}.data.domain.chainId`,
76
+ expected: realChainId,
77
+ actual: data.domain.chainId,
78
+ });
79
+ }
80
+ // CRITICAL: domain.verifyingContract must be a token from request trades
81
+ const expectedTokens = getExpectedTokenAddresses(trades, realChainId);
82
+ if (data.domain.verifyingContract === undefined ||
83
+ !expectedTokens.some(t => addressEquals(realChainId, t, data.domain.verifyingContract))) {
84
+ violations.push({
85
+ code: ViolationCode.PermitVerifyingContractMismatch,
86
+ message: `Permit domain.verifyingContract must correspond to a srcChainTokenIn from request trades`,
87
+ path: `${actionPath}.data.domain.verifyingContract`,
88
+ expected: expectedTokens,
89
+ actual: data.domain.verifyingContract,
90
+ });
91
+ }
92
+ // LOW: check domain.name/version for known tokens (graylist)
93
+ if (data.domain.verifyingContract !== undefined) {
94
+ const metadata = getTokenPermitMetadata(realChainId, data.domain.verifyingContract);
95
+ if (metadata) {
96
+ if (data.domain.name !== metadata.name) {
97
+ violations.push({
98
+ code: ViolationCode.PermitDomainNameMismatch,
99
+ message: `Permit domain.name does not match known token metadata`,
100
+ path: `${actionPath}.data.domain.name`,
101
+ expected: metadata.name,
102
+ actual: data.domain.name,
103
+ });
104
+ }
105
+ if (data.domain.version !== undefined &&
106
+ data.domain.version !== metadata.version) {
107
+ violations.push({
108
+ code: ViolationCode.PermitDomainVersionMismatch,
109
+ message: `Permit domain.version does not match known token metadata`,
110
+ path: `${actionPath}.data.domain.version`,
111
+ expected: metadata.version,
112
+ actual: data.domain.version,
113
+ });
114
+ }
115
+ }
116
+ }
117
+ return violations;
118
+ }
119
+ // CRITICAL: message.owner = srcChainAuthorityAddress (execution mode)
120
+ // CRITICAL: message.spender = AllowanceHolder or preHook address
121
+ function validatePermitMessage(data, actionPath, response, realChainId, quoteMode, srcChainAuthorityAddress, envConfig) {
122
+ const violations = [];
123
+ const msg = data.message;
124
+ // CRITICAL: owner must match srcChainAuthorityAddress in execution mode
125
+ if (!quoteMode) {
126
+ const owner = msg.owner;
127
+ if (srcChainAuthorityAddress === undefined ||
128
+ owner === undefined ||
129
+ !addressEquals(realChainId, owner, srcChainAuthorityAddress)) {
130
+ violations.push({
131
+ code: ViolationCode.PermitOwnerMismatch,
132
+ message: `Permit message.owner must match srcChainAuthorityAddress`,
133
+ path: `${actionPath}.data.message.owner`,
134
+ expected: srcChainAuthorityAddress,
135
+ actual: owner,
136
+ });
137
+ }
138
+ }
139
+ // CRITICAL: spender must be AllowanceHolder or preHook address
140
+ const spender = msg.spender;
141
+ if (spender === undefined) {
142
+ violations.push({
143
+ code: ViolationCode.PermitSpenderMissing,
144
+ message: `Permit message.spender is missing`,
145
+ path: `${actionPath}.data.message.spender`,
146
+ actual: undefined,
147
+ });
148
+ }
149
+ else if (!isAllowedSpender(spender, response, realChainId, envConfig)) {
150
+ violations.push({
151
+ code: ViolationCode.PermitSpenderNotAllowed,
152
+ message: `Permit message.spender is not an allowed address`,
153
+ path: `${actionPath}.data.message.spender`,
154
+ actual: spender,
155
+ });
156
+ }
157
+ return violations;
158
+ }
159
+ // CRITICAL: details must match message fields
160
+ function validatePermitDetails(action, data, actionPath, realChainId) {
161
+ const details = action.details;
162
+ if (!details) {
163
+ return [{
164
+ code: ViolationCode.PermitDetailsMissing,
165
+ message: `Permit action must have details`,
166
+ path: `${actionPath}.details`,
167
+ actual: undefined,
168
+ }];
169
+ }
170
+ const violations = [];
171
+ const spender = data.message.spender;
172
+ // CRITICAL: details.allowanceHolder must match message.spender
173
+ if (details.allowanceHolder === undefined ||
174
+ spender === undefined ||
175
+ !addressEquals(realChainId, details.allowanceHolder, spender)) {
176
+ violations.push({
177
+ code: ViolationCode.PermitDetailsAllowanceHolderMismatch,
178
+ message: `Permit details.allowanceHolder must match message.spender`,
179
+ path: `${actionPath}.details.allowanceHolder`,
180
+ expected: spender,
181
+ actual: details.allowanceHolder,
182
+ });
183
+ }
184
+ // CRITICAL: details.tokenAddress must match domain.verifyingContract
185
+ if (details.tokenAddress === undefined ||
186
+ data.domain.verifyingContract === undefined ||
187
+ !addressEquals(realChainId, details.tokenAddress, data.domain.verifyingContract)) {
188
+ violations.push({
189
+ code: ViolationCode.PermitDetailsTokenAddressMismatch,
190
+ message: `Permit details.tokenAddress must match domain.verifyingContract`,
191
+ path: `${actionPath}.details.tokenAddress`,
192
+ expected: data.domain.verifyingContract,
193
+ actual: details.tokenAddress,
194
+ });
195
+ }
196
+ return violations;
197
+ }
198
+ // Collects all expected token addresses from trades (resolved for native)
199
+ function getExpectedTokenAddresses(trades, realChainId) {
200
+ const tokens = new Set();
201
+ for (const trade of trades) {
202
+ const resolved = resolveWrappedTokenAddress(trade.srcChainTokenIn, realChainId);
203
+ if (resolved)
204
+ tokens.add(normalizeAddress(realChainId, resolved));
205
+ }
206
+ return Array.from(tokens);
207
+ }
208
+ function isAllowedSpender(spender, response, realChainId, envConfig) {
209
+ // Check AllowanceHolder whitelist
210
+ if (isWhitelisted(envConfig.allowanceHolderContracts, realChainId, spender)) {
211
+ return true;
212
+ }
213
+ // Check preHook addresses
214
+ for (const hookPayload of response.preHooks) {
215
+ if (hookPayload.hook.to && addressEquals(realChainId, hookPayload.hook.to, spender)) {
216
+ return true;
217
+ }
218
+ }
219
+ return false;
220
+ }
221
+ //# sourceMappingURL=evm-permit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evm-permit.js","sourceRoot":"","sources":["../../../src/validations/evm-permit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,358 @@
1
+ import { ViolationCode, EvmActionKind, EvmActionOperation, ApprovalMode, } from "../types/index.js";
2
+ import { isWhitelisted } from "../whitelists/types.js";
3
+ import { PERMIT2_CONTRACTS } from "../whitelists/evm/index.js";
4
+ import { maxUint160 } from "viem";
5
+ import { resolveWrappedTokenAddress } from "../helpers/evm-token.js";
6
+ import { addressEquals, normalizeAddress } from "../helpers/address.js";
7
+ // =============================================
8
+ // Permit2 (Uniswap AllowanceTransfer) constraints
9
+ // =============================================
10
+ const EXPECTED_TYPES = {
11
+ EIP712Domain: [
12
+ { name: "name", type: "string" },
13
+ { name: "chainId", type: "uint256" },
14
+ { name: "verifyingContract", type: "address" },
15
+ ],
16
+ PermitSingle: [
17
+ { name: "details", type: "PermitDetails" },
18
+ { name: "spender", type: "address" },
19
+ { name: "sigDeadline", type: "uint256" },
20
+ ],
21
+ PermitDetails: [
22
+ { name: "token", type: "address" },
23
+ { name: "amount", type: "uint160" },
24
+ { name: "expiration", type: "uint48" },
25
+ { name: "nonce", type: "uint48" },
26
+ ],
27
+ };
28
+ export function validatePermit2Actions(actions, basePath, request, response, realChainId, trades, envConfig) {
29
+ const violations = [];
30
+ for (let i = 0; i < actions.length; i++) {
31
+ const action = actions[i];
32
+ if (action.type !== EvmActionKind.Permit2)
33
+ continue;
34
+ const actionPath = `${basePath}.requiredActions[${i}]`;
35
+ const data = action.data;
36
+ // CRITICAL: only allowed with approvalMode === 'permit'
37
+ violations.push(...validatePermit2ApprovalMode(request, actionPath));
38
+ // HIGH: actions[] must contain exactly [Budget]
39
+ violations.push(...validatePermit2ActionsList(action, actionPath));
40
+ violations.push(...validatePermit2PrimaryType(data, actionPath), ...validatePermit2Domain(data, actionPath, realChainId), ...validatePermit2Types(data, actionPath), ...validatePermit2Message(data, actionPath, request, response, realChainId, trades, envConfig), ...validatePermit2Details(action, data, actionPath, realChainId));
41
+ }
42
+ return violations;
43
+ }
44
+ // CRITICAL: only allowed with approvalMode === 'permit'
45
+ function validatePermit2ApprovalMode(request, actionPath) {
46
+ if (request.approvalMode !== ApprovalMode.Permit) {
47
+ return [{
48
+ code: ViolationCode.Permit2ForbiddenWithoutPermitMode,
49
+ message: `Permit2 action requires approvalMode="${ApprovalMode.Permit}"`,
50
+ path: `${actionPath}.type`,
51
+ expected: ApprovalMode.Permit,
52
+ actual: request.approvalMode,
53
+ }];
54
+ }
55
+ return [];
56
+ }
57
+ // HIGH: actions[] must contain exactly [Budget]
58
+ function validatePermit2ActionsList(action, actionPath) {
59
+ if (action.actions.length !== 1 ||
60
+ action.actions[0] !== EvmActionOperation.Budget) {
61
+ return [{
62
+ code: ViolationCode.Permit2ActionsNotSingleBudget,
63
+ message: `Permit2 actions must contain exactly [Budget]`,
64
+ path: `${actionPath}.actions`,
65
+ expected: [EvmActionOperation.Budget],
66
+ actual: action.actions,
67
+ }];
68
+ }
69
+ return [];
70
+ }
71
+ // CRITICAL: primaryType must be "PermitSingle"
72
+ function validatePermit2PrimaryType(data, actionPath) {
73
+ if (data.primaryType !== "PermitSingle") {
74
+ return [{
75
+ code: ViolationCode.Permit2PrimaryTypeInvalid,
76
+ message: `Permit2 primaryType must be "PermitSingle"`,
77
+ path: `${actionPath}.data.primaryType`,
78
+ expected: "PermitSingle",
79
+ actual: data.primaryType,
80
+ }];
81
+ }
82
+ return [];
83
+ }
84
+ // CRITICAL: domain.chainId = real chainId
85
+ // CRITICAL: domain.verifyingContract = Permit2 whitelist
86
+ // CRITICAL: domain must NOT have version
87
+ function validatePermit2Domain(data, actionPath, realChainId) {
88
+ const violations = [];
89
+ // CRITICAL: domain must NOT have version
90
+ if (data.domain.version !== undefined) {
91
+ violations.push({
92
+ code: ViolationCode.Permit2DomainHasVersion,
93
+ message: `Permit2 domain must not have version`,
94
+ path: `${actionPath}.data.domain.version`,
95
+ actual: data.domain.version,
96
+ });
97
+ }
98
+ // CRITICAL: domain.chainId must equal real chainId
99
+ if (data.domain.chainId !== realChainId) {
100
+ violations.push({
101
+ code: ViolationCode.Permit2ChainIdMismatch,
102
+ message: `Permit2 domain.chainId does not match the real chainId`,
103
+ path: `${actionPath}.data.domain.chainId`,
104
+ expected: realChainId,
105
+ actual: data.domain.chainId,
106
+ });
107
+ }
108
+ // CRITICAL: domain.verifyingContract = Permit2 whitelist
109
+ if (data.domain.verifyingContract === undefined ||
110
+ !isWhitelisted(PERMIT2_CONTRACTS, realChainId, data.domain.verifyingContract)) {
111
+ violations.push({
112
+ code: ViolationCode.Permit2VerifyingContractNotWhitelisted,
113
+ message: `Permit2 domain.verifyingContract is not whitelisted`,
114
+ path: `${actionPath}.data.domain.verifyingContract`,
115
+ actual: data.domain.verifyingContract,
116
+ });
117
+ }
118
+ return violations;
119
+ }
120
+ // CRITICAL: types must match the expected Permit2 EIP712 structure
121
+ function validatePermit2Types(data, actionPath) {
122
+ const types = data.types;
123
+ const expectedKeys = Object.keys(EXPECTED_TYPES).sort();
124
+ const actualKeys = Object.keys(types).sort();
125
+ if (actualKeys.length !== expectedKeys.length ||
126
+ !actualKeys.every((k, i) => k === expectedKeys[i]) ||
127
+ !allFieldsMatch(types)) {
128
+ return [{
129
+ code: ViolationCode.Permit2TypesInvalid,
130
+ message: `Permit2 types must match the expected EIP712 structure`,
131
+ path: `${actionPath}.data.types`,
132
+ expected: EXPECTED_TYPES,
133
+ actual: types,
134
+ }];
135
+ }
136
+ return [];
137
+ }
138
+ function allFieldsMatch(types) {
139
+ for (const [key, expectedFields] of Object.entries(EXPECTED_TYPES)) {
140
+ const actualFields = types[key];
141
+ if (!actualFields)
142
+ return false;
143
+ if (actualFields.length !== expectedFields.length)
144
+ return false;
145
+ for (let i = 0; i < expectedFields.length; i++) {
146
+ if (actualFields[i].name !== expectedFields[i].name ||
147
+ actualFields[i].type !== expectedFields[i].type) {
148
+ return false;
149
+ }
150
+ }
151
+ }
152
+ return true;
153
+ }
154
+ // CRITICAL: message.details must exist with token, amount, expiration
155
+ // CRITICAL: message.spender must be allowed
156
+ function validatePermit2Message(data, actionPath, request, response, realChainId, trades, envConfig) {
157
+ const violations = [];
158
+ const msg = data.message;
159
+ const details = msg.details;
160
+ if (!details) {
161
+ violations.push({
162
+ code: ViolationCode.Permit2MessageDetailsMissing,
163
+ message: `Permit2 message.details is missing`,
164
+ path: `${actionPath}.data.message.details`,
165
+ actual: undefined,
166
+ });
167
+ }
168
+ else {
169
+ violations.push(...validatePermit2Token(details.token, actionPath, realChainId, trades), ...validatePermit2Amount(details.amount, actionPath), ...validatePermit2Expiration(details.expiration, actionPath, request));
170
+ }
171
+ violations.push(...validatePermit2Spender(msg.spender, actionPath, response, realChainId, envConfig));
172
+ return violations;
173
+ }
174
+ // CRITICAL: message.details.token = token from request trades
175
+ function validatePermit2Token(token, actionPath, realChainId, trades) {
176
+ if (token === undefined) {
177
+ return [{
178
+ code: ViolationCode.Permit2TokenMismatch,
179
+ message: `Permit2 message.details.token is missing`,
180
+ path: `${actionPath}.data.message.details.token`,
181
+ actual: undefined,
182
+ }];
183
+ }
184
+ const expectedTokens = getExpectedTokenAddresses(trades, realChainId);
185
+ if (!expectedTokens.some(t => addressEquals(realChainId, t, token))) {
186
+ return [{
187
+ code: ViolationCode.Permit2TokenMismatch,
188
+ message: `Permit2 message.details.token must correspond to a srcChainTokenIn`,
189
+ path: `${actionPath}.data.message.details.token`,
190
+ expected: expectedTokens,
191
+ actual: token,
192
+ }];
193
+ }
194
+ return [];
195
+ }
196
+ // CRITICAL: message.details.amount = maxUint160
197
+ function validatePermit2Amount(amount, actionPath) {
198
+ if (amount === undefined) {
199
+ return [{
200
+ code: ViolationCode.Permit2AmountNotMaxUint160,
201
+ message: `Permit2 message.details.amount is missing`,
202
+ path: `${actionPath}.data.message.details.amount`,
203
+ expected: maxUint160.toString(),
204
+ actual: undefined,
205
+ }];
206
+ }
207
+ try {
208
+ if (BigInt(amount) !== maxUint160) {
209
+ return [{
210
+ code: ViolationCode.Permit2AmountNotMaxUint160,
211
+ message: `Permit2 message.details.amount must be maxUint160`,
212
+ path: `${actionPath}.data.message.details.amount`,
213
+ expected: maxUint160.toString(),
214
+ actual: amount,
215
+ }];
216
+ }
217
+ }
218
+ catch {
219
+ return [{
220
+ code: ViolationCode.Permit2AmountNotMaxUint160,
221
+ message: `Permit2 message.details.amount is not a valid number`,
222
+ path: `${actionPath}.data.message.details.amount`,
223
+ expected: maxUint160.toString(),
224
+ actual: amount,
225
+ }];
226
+ }
227
+ return [];
228
+ }
229
+ // CRITICAL: message.details.expiration = expirationTimestamp
230
+ function validatePermit2Expiration(expiration, actionPath, request) {
231
+ if (expiration === undefined) {
232
+ return [{
233
+ code: ViolationCode.Permit2ExpirationMismatch,
234
+ message: `Permit2 message.details.expiration is missing`,
235
+ path: `${actionPath}.data.message.details.expiration`,
236
+ expected: request.expirationTimestamp,
237
+ actual: undefined,
238
+ }];
239
+ }
240
+ try {
241
+ if (BigInt(expiration) !== BigInt(request.expirationTimestamp)) {
242
+ return [{
243
+ code: ViolationCode.Permit2ExpirationMismatch,
244
+ message: `Permit2 message.details.expiration must match request.expirationTimestamp`,
245
+ path: `${actionPath}.data.message.details.expiration`,
246
+ expected: request.expirationTimestamp,
247
+ actual: expiration,
248
+ }];
249
+ }
250
+ }
251
+ catch {
252
+ return [{
253
+ code: ViolationCode.Permit2ExpirationMismatch,
254
+ message: `Permit2 message.details.expiration is not a valid number`,
255
+ path: `${actionPath}.data.message.details.expiration`,
256
+ expected: request.expirationTimestamp,
257
+ actual: expiration,
258
+ }];
259
+ }
260
+ return [];
261
+ }
262
+ // CRITICAL: spender must be allowed AllowanceHolder or preHook address
263
+ function validatePermit2Spender(spender, actionPath, response, realChainId, envConfig) {
264
+ if (spender === undefined) {
265
+ return [{
266
+ code: ViolationCode.Permit2SpenderMissing,
267
+ message: `Permit2 message.spender is missing`,
268
+ path: `${actionPath}.data.message.spender`,
269
+ actual: undefined,
270
+ }];
271
+ }
272
+ if (!isAllowedPermit2Spender(spender, response, realChainId, envConfig)) {
273
+ return [{
274
+ code: ViolationCode.Permit2SpenderNotAllowed,
275
+ message: `Permit2 message.spender is not an allowed address`,
276
+ path: `${actionPath}.data.message.spender`,
277
+ actual: spender,
278
+ }];
279
+ }
280
+ return [];
281
+ }
282
+ // CRITICAL: details must match message fields
283
+ function validatePermit2Details(action, data, actionPath, realChainId) {
284
+ const details = action.details;
285
+ if (!details) {
286
+ return [{
287
+ code: ViolationCode.Permit2DetailsMissing,
288
+ message: `Permit2 action must have details`,
289
+ path: `${actionPath}.details`,
290
+ actual: undefined,
291
+ }];
292
+ }
293
+ const violations = [];
294
+ const spender = data.message.spender;
295
+ const msgDetails = data.message.details;
296
+ // CRITICAL: details.allowanceHolder = message.spender
297
+ if (details.allowanceHolder === undefined ||
298
+ spender === undefined ||
299
+ !addressEquals(realChainId, details.allowanceHolder, spender)) {
300
+ violations.push({
301
+ code: ViolationCode.Permit2DetailsAllowanceHolderMismatch,
302
+ message: `Permit2 details.allowanceHolder must match message.spender`,
303
+ path: `${actionPath}.details.allowanceHolder`,
304
+ expected: spender,
305
+ actual: details.allowanceHolder,
306
+ });
307
+ }
308
+ // CRITICAL: details.tokenAddress = message.details.token
309
+ const msgToken = msgDetails?.token;
310
+ if (details.tokenAddress === undefined ||
311
+ msgToken === undefined ||
312
+ !addressEquals(realChainId, details.tokenAddress, msgToken)) {
313
+ violations.push({
314
+ code: ViolationCode.Permit2DetailsTokenAddressMismatch,
315
+ message: `Permit2 details.tokenAddress must match message.details.token`,
316
+ path: `${actionPath}.details.tokenAddress`,
317
+ expected: msgToken,
318
+ actual: details.tokenAddress,
319
+ });
320
+ }
321
+ // CRITICAL: details.permit2Contract = domain.verifyingContract
322
+ if (details.permit2Contract === undefined ||
323
+ data.domain.verifyingContract === undefined ||
324
+ !addressEquals(realChainId, details.permit2Contract, data.domain.verifyingContract)) {
325
+ violations.push({
326
+ code: ViolationCode.Permit2DetailsPermit2ContractMismatch,
327
+ message: `Permit2 details.permit2Contract must match domain.verifyingContract`,
328
+ path: `${actionPath}.details.permit2Contract`,
329
+ expected: data.domain.verifyingContract,
330
+ actual: details.permit2Contract,
331
+ });
332
+ }
333
+ return violations;
334
+ }
335
+ // Collects all expected token addresses from trades (resolved for native)
336
+ function getExpectedTokenAddresses(trades, realChainId) {
337
+ const tokens = new Set();
338
+ for (const trade of trades) {
339
+ const resolved = resolveWrappedTokenAddress(trade.srcChainTokenIn, realChainId);
340
+ if (resolved)
341
+ tokens.add(normalizeAddress(realChainId, resolved));
342
+ }
343
+ return Array.from(tokens);
344
+ }
345
+ function isAllowedPermit2Spender(spender, response, realChainId, envConfig) {
346
+ // Check AllowanceHolder whitelist
347
+ if (isWhitelisted(envConfig.allowanceHolderContracts, realChainId, spender)) {
348
+ return true;
349
+ }
350
+ // Check preHook addresses
351
+ for (const hookPayload of response.preHooks) {
352
+ if (hookPayload.hook.to && addressEquals(realChainId, hookPayload.hook.to, spender)) {
353
+ return true;
354
+ }
355
+ }
356
+ return false;
357
+ }
358
+ //# sourceMappingURL=evm-permit2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evm-permit2.js","sourceRoot":"","sources":["../../../src/validations/evm-permit2.ts"],"names":[],"mappings":"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"}