@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,261 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateBudgetOperations = validateBudgetOperations;
4
+ const types_1 = require("../types");
5
+ const types_2 = require("../whitelists/types");
6
+ const evm_calldata_1 = require("../helpers/evm-calldata");
7
+ const viem_1 = require("viem");
8
+ const evm_token_1 = require("../helpers/evm-token");
9
+ const address_1 = require("../helpers/address");
10
+ const evm_trade_amounts_1 = require("../helpers/evm-trade-amounts");
11
+ const evm_action_1 = require("../helpers/evm-action");
12
+ function validateBudgetOperations(actions, basePath, request, trades, realChainId, envConfig) {
13
+ const violations = [];
14
+ for (let i = 0; i < actions.length; i++) {
15
+ const action = actions[i];
16
+ if (!action.actions.includes(types_1.EvmActionOperation.Budget))
17
+ continue;
18
+ const actionPath = `${basePath}.requiredActions[${i}]`;
19
+ // Applies to ALL Budget actions regardless of type
20
+ violations.push(...validateBudgetApproveNone(request, actionPath));
21
+ // Token address and calldata checks only apply to actions that use transactionCalls
22
+ // (Transaction, Sign712MetaMask). For Permit/Permit2 (Sign712), these are validated
23
+ // by the permit/permit2 validators instead.
24
+ if (!(0, evm_action_1.actionUsesTransactionCalls)(action))
25
+ continue;
26
+ violations.push(...validateBudgetTokenAddress(action, actionPath, trades, realChainId), ...validateBudgetCalldata(action, actionPath, request, trades, realChainId, envConfig));
27
+ }
28
+ return violations;
29
+ }
30
+ // CRITICAL: Budget forbidden when approveAmountFlag === 'none'
31
+ function validateBudgetApproveNone(request, actionPath) {
32
+ if (request.approveAmountFlag === types_1.ApproveAmountFlag.None) {
33
+ return [{
34
+ code: types_1.ViolationCode.BudgetForbiddenWithApproveNone,
35
+ message: `Budget action is forbidden when approveAmountFlag="none"`,
36
+ path: `${actionPath}.actions`,
37
+ actual: types_1.ApproveAmountFlag.None,
38
+ }];
39
+ }
40
+ return [];
41
+ }
42
+ // CRITICAL: transactionCalls[].to == details.tokenAddress, non-zero, in trades
43
+ function validateBudgetTokenAddress(action, actionPath, trades, realChainId) {
44
+ const violations = [];
45
+ const txCalls = (0, evm_action_1.getTransactionCalls)(action);
46
+ const tokenAddress = action.details?.tokenAddress;
47
+ // CRITICAL: transactionCalls must be present
48
+ if (txCalls.length === 0) {
49
+ violations.push({
50
+ code: types_1.ViolationCode.BudgetTransactionCallsMissing,
51
+ message: `Budget must have at least one transactionCall`,
52
+ path: `${actionPath}.details.transactionCalls`,
53
+ actual: [],
54
+ });
55
+ }
56
+ // CRITICAL: tokenAddress must be present
57
+ if (!tokenAddress) {
58
+ violations.push({
59
+ code: types_1.ViolationCode.BudgetTokenAddressMissing,
60
+ message: `Budget must have details.tokenAddress`,
61
+ path: `${actionPath}.details.tokenAddress`,
62
+ actual: undefined,
63
+ });
64
+ }
65
+ // Skip further checks if critical data is missing.
66
+ // It's safe as we already reported the violations for missing the required fields.
67
+ if (txCalls.length === 0 || !tokenAddress)
68
+ return violations;
69
+ const txTo = txCalls[0].to;
70
+ // CRITICAL: transactionCalls[].to must equal details.tokenAddress
71
+ if (!txTo || !(0, address_1.addressEquals)(realChainId, txTo, tokenAddress)) {
72
+ violations.push({
73
+ code: types_1.ViolationCode.BudgetTokenAddressMismatch,
74
+ message: `Budget transactionCalls[0].to must equal details.tokenAddress`,
75
+ path: `${actionPath}.details.transactionCalls[0].to`,
76
+ expected: tokenAddress,
77
+ actual: txTo,
78
+ });
79
+ }
80
+ // CRITICAL: must be non-zero address
81
+ if ((0, evm_token_1.isNativeToken)(tokenAddress)) {
82
+ violations.push({
83
+ code: types_1.ViolationCode.BudgetTokenAddressZero,
84
+ message: `Budget token address must not be the zero address`,
85
+ path: `${actionPath}.details.tokenAddress`,
86
+ actual: tokenAddress,
87
+ });
88
+ }
89
+ // CRITICAL: must be one of the trade tokens
90
+ // Resolve native token → WETH so that a Budget for WETH matches a trade with native input
91
+ const tradeTokens = trades.map(t => {
92
+ const resolved = (0, evm_token_1.resolveWrappedTokenAddress)(t.srcChainTokenIn, realChainId);
93
+ return resolved ? (0, address_1.normalizeAddress)(realChainId, resolved) : (0, address_1.normalizeAddress)(realChainId, t.srcChainTokenIn);
94
+ });
95
+ const normalizedToken = (0, address_1.normalizeAddress)(realChainId, tokenAddress);
96
+ if (!tradeTokens.includes(normalizedToken)) {
97
+ violations.push({
98
+ code: types_1.ViolationCode.BudgetTokenNotInTrades,
99
+ message: `Budget token must be one of request trades srcChainTokenIn`,
100
+ path: `${actionPath}.details.tokenAddress`,
101
+ expected: tradeTokens,
102
+ actual: tokenAddress,
103
+ });
104
+ }
105
+ return violations;
106
+ }
107
+ // CRITICAL: decode approve calldata, validate spender + amount + allowanceHolder
108
+ // Handles two-step approve: approve(spender, 0) reset + approve(spender, amount)
109
+ function validateBudgetCalldata(action, actionPath, request, trades, realChainId, envConfig) {
110
+ const txCalls = (0, evm_action_1.getTransactionCalls)(action);
111
+ // Missing txCalls is reported by validateBudgetTokenAddress
112
+ if (txCalls.length === 0)
113
+ return [];
114
+ const decoded = decodeBudgetApproveCalls(txCalls, actionPath);
115
+ if ("violations" in decoded)
116
+ return decoded.violations;
117
+ const violations = [];
118
+ violations.push(...validateBudgetAmount(decoded.amount, actionPath, decoded.mainApproveIndex, request, trades, action, realChainId), ...validateBudgetAllowanceHolder(decoded.spender, action, actionPath, decoded.mainApproveIndex, realChainId, envConfig));
119
+ return violations;
120
+ }
121
+ // Decodes one or two approve calls. Returns the "real" approve.
122
+ // If two calls: first must be approve(spender, 0), second is the real one.
123
+ function decodeBudgetApproveCalls(txCalls, actionPath) {
124
+ const calldataPath = `${actionPath}.details.transactionCalls`;
125
+ // CRITICAL: at most 2 transactionCalls
126
+ if (txCalls.length > 2) {
127
+ return { violations: [{
128
+ code: types_1.ViolationCode.BudgetTooManyTransactionCalls,
129
+ message: `Budget must have at most 2 transactionCalls (reset + approve)`,
130
+ path: calldataPath,
131
+ expected: 2,
132
+ actual: txCalls.length,
133
+ }] };
134
+ }
135
+ const mainApproveIndex = txCalls.length - 1;
136
+ // Decode last call — this is always the "real" approve
137
+ let mainApprove;
138
+ try {
139
+ mainApprove = (0, evm_calldata_1.decodeApproveCalldata)(txCalls[mainApproveIndex].data);
140
+ }
141
+ catch (e) {
142
+ return { violations: [{
143
+ code: types_1.ViolationCode.BudgetCalldataInvalid,
144
+ message: `Budget calldata is not valid approve`,
145
+ path: `${calldataPath}[${mainApproveIndex}].data`,
146
+ actual: txCalls[mainApproveIndex].data,
147
+ details: e,
148
+ }] };
149
+ }
150
+ // If two calls, the first must be a reset: approve(same spender, 0)
151
+ if (txCalls.length === 2) {
152
+ const resetViolations = validateBudgetResetCall(txCalls[0], mainApprove.spender, calldataPath);
153
+ if (resetViolations.length > 0) {
154
+ return { violations: resetViolations };
155
+ }
156
+ }
157
+ return { ...mainApprove, mainApproveIndex };
158
+ }
159
+ // Validates the reset call: must be approve(same spender, 0)
160
+ function validateBudgetResetCall(txCall, expectedSpender, calldataPath) {
161
+ let resetApprove;
162
+ try {
163
+ resetApprove = (0, evm_calldata_1.decodeApproveCalldata)(txCall.data);
164
+ }
165
+ catch (e) {
166
+ return [{
167
+ code: types_1.ViolationCode.BudgetCalldataInvalid,
168
+ message: `Budget reset calldata is not valid approve`,
169
+ path: `${calldataPath}[0].data`,
170
+ actual: txCall.data,
171
+ details: e,
172
+ }];
173
+ }
174
+ const violations = [];
175
+ // CRITICAL: reset amount must be 0
176
+ if (resetApprove.amount !== 0n) {
177
+ violations.push({
178
+ code: types_1.ViolationCode.BudgetCalldataInvalid,
179
+ message: `Budget two-step approve: first call must be approve(spender, 0)`,
180
+ path: `${calldataPath}[0].data`,
181
+ expected: "0",
182
+ actual: resetApprove.amount.toString(),
183
+ });
184
+ }
185
+ // CRITICAL: reset spender must match main spender
186
+ if (resetApprove.spender !== expectedSpender) {
187
+ violations.push({
188
+ code: types_1.ViolationCode.BudgetCalldataInvalid,
189
+ message: `Budget two-step approve: reset spender must match main spender`,
190
+ path: `${calldataPath}[0].data`,
191
+ expected: expectedSpender,
192
+ actual: resetApprove.spender,
193
+ });
194
+ }
195
+ return violations;
196
+ }
197
+ // CRITICAL: approve amount validation
198
+ function validateBudgetAmount(approveAmount, actionPath, mainIndex, request, trades, action, realChainId) {
199
+ const flag = request.approveAmountFlag;
200
+ const dataPath = `${actionPath}.details.transactionCalls[${mainIndex}].data`;
201
+ // unlimited: must be maxUint256
202
+ if (flag === types_1.ApproveAmountFlag.Unlimited) {
203
+ if (approveAmount !== viem_1.maxUint256) {
204
+ return [{
205
+ code: types_1.ViolationCode.BudgetAmountMismatch,
206
+ message: `Budget approve amount must be maxUint256 when approveAmountFlag="unlimited"`,
207
+ path: dataPath,
208
+ expected: viem_1.maxUint256.toString(),
209
+ actual: approveAmount.toString(),
210
+ }];
211
+ }
212
+ return [];
213
+ }
214
+ // exactApproveAmount (or undefined): check numeric trade amounts
215
+ const tokenAddress = action.details?.tokenAddress;
216
+ // Skip if tokenAddress is missing — already reported by validateBudgetTokenAddress
217
+ if (!tokenAddress)
218
+ return [];
219
+ const sumResult = (0, evm_trade_amounts_1.sumTradeAmounts)(trades, tokenAddress, realChainId);
220
+ if (sumResult.violations)
221
+ return sumResult.violations;
222
+ if (sumResult.skip)
223
+ return [];
224
+ if (approveAmount !== sumResult.sum) {
225
+ return [{
226
+ code: types_1.ViolationCode.BudgetAmountMismatch,
227
+ message: `Budget approve amount does not match sum of trade amounts`,
228
+ path: dataPath,
229
+ expected: sumResult.sum.toString(),
230
+ actual: approveAmount.toString(),
231
+ }];
232
+ }
233
+ return [];
234
+ }
235
+ // CRITICAL: approve target == details.allowanceHolder, both whitelisted
236
+ function validateBudgetAllowanceHolder(approveSpender, action, actionPath, mainIndex, realChainId, envConfig) {
237
+ const violations = [];
238
+ const allowanceHolder = action.details?.allowanceHolder;
239
+ // CRITICAL: approve target must equal details.allowanceHolder
240
+ if (allowanceHolder === undefined ||
241
+ !(0, address_1.addressEquals)(realChainId, approveSpender, allowanceHolder)) {
242
+ violations.push({
243
+ code: types_1.ViolationCode.BudgetAllowanceHolderMismatch,
244
+ message: `Budget approve spender must equal details.allowanceHolder`,
245
+ path: `${actionPath}.details.allowanceHolder`,
246
+ expected: approveSpender,
247
+ actual: allowanceHolder,
248
+ });
249
+ }
250
+ // CRITICAL: must be whitelisted AllowanceHolder
251
+ if (!(0, types_2.isWhitelisted)(envConfig.allowanceHolderContracts, realChainId, approveSpender)) {
252
+ violations.push({
253
+ code: types_1.ViolationCode.BudgetAllowanceHolderNotWhitelisted,
254
+ message: `Budget approve spender is not a whitelisted AllowanceHolder`,
255
+ path: `${actionPath}.details.transactionCalls[${mainIndex}].data`,
256
+ actual: approveSpender,
257
+ });
258
+ }
259
+ return violations;
260
+ }
261
+ //# sourceMappingURL=evm-op-budget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evm-op-budget.js","sourceRoot":"","sources":["../../../src/validations/evm-op-budget.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,152 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateGasCompensationOperations = validateGasCompensationOperations;
4
+ const types_1 = require("../types");
5
+ const evm_calldata_1 = require("../helpers/evm-calldata");
6
+ const evm_token_1 = require("../helpers/evm-token");
7
+ const address_1 = require("../helpers/address");
8
+ const evm_action_1 = require("../helpers/evm-action");
9
+ function validateGasCompensationOperations(actions, basePath, request, realChainId) {
10
+ const violations = [];
11
+ const gasCompensationGroups = groupGasCompensationInfo(request);
12
+ for (let i = 0; i < actions.length; i++) {
13
+ const action = actions[i];
14
+ if (!action.actions.includes(types_1.EvmActionOperation.GasCompensation)) {
15
+ continue;
16
+ }
17
+ const actionPath = `${basePath}.requiredActions[${i}]`;
18
+ const txCalls = (0, evm_action_1.getTransactionCalls)(action);
19
+ // CRITICAL: transactionCalls must be present
20
+ if (txCalls.length === 0) {
21
+ violations.push({
22
+ code: types_1.ViolationCode.GasCompensationTransactionCallsMissing,
23
+ message: `GasCompensation must have at least one transactionCall`,
24
+ path: `${actionPath}.details.transactionCalls`,
25
+ actual: [],
26
+ });
27
+ continue;
28
+ }
29
+ // CRITICAL: GasCompensation must have exactly one transactionCall
30
+ if (txCalls.length > 1) {
31
+ violations.push({
32
+ code: types_1.ViolationCode.GasCompensationTooManyTransactionCalls,
33
+ message: `GasCompensation must have exactly 1 transactionCall`,
34
+ path: `${actionPath}.details.transactionCalls`,
35
+ expected: 1,
36
+ actual: txCalls.length,
37
+ });
38
+ }
39
+ violations.push(...validateGasCompensationPreHook(action, actionPath, gasCompensationGroups, realChainId), ...validateGasCompensationCalldata(txCalls[0], actionPath, gasCompensationGroups, realChainId));
40
+ }
41
+ return violations;
42
+ }
43
+ // CRITICAL: must have a corresponding preHook with gasCompensationInfo
44
+ function validateGasCompensationPreHook(_action, actionPath, groups, _realChainId) {
45
+ if (groups.length === 0) {
46
+ return [{
47
+ code: types_1.ViolationCode.GasCompensationNoMatchingPreHook,
48
+ message: `GasCompensation has no corresponding preHook with gasCompensationInfo`,
49
+ path: `${actionPath}.actions`,
50
+ }];
51
+ }
52
+ // AI: for now we check that at least one gasCompensationInfo group exists.
53
+ // A more precise matching (action <-> specific group) can be added later.
54
+ return [];
55
+ }
56
+ // CRITICAL: validate calldata based on token type (ERC20 vs native)
57
+ // Token type is determined by gasCompensationInfo.tokenAddress
58
+ // CRITICAL: txCall.to must match a gasCompensationInfo group
59
+ //
60
+ // Note: `gasCompensationInfo` also has `sender` and `chainId`, but they cannot
61
+ // be verified from the `transactionCall` data:
62
+ // - `sender` maps to the hook's `from` field, not present in `requiredAction`
63
+ // - `chainId` is implicitly matched by the trade group's `realChainId`
64
+ function validateGasCompensationCalldata(txCall, actionPath, groups, realChainId) {
65
+ // Check for native token group
66
+ if (groups.some(g => (0, evm_token_1.isNativeToken)(g.tokenAddress))) {
67
+ return validateGasCompensationNative(txCall, actionPath);
68
+ }
69
+ // Check for ERC20: txCall.to must match a group's tokenAddress
70
+ const erc20Match = groups.some(g => (0, address_1.normalizeAddress)(realChainId, g.tokenAddress) === (0, address_1.normalizeAddress)(realChainId, txCall.to));
71
+ if (erc20Match) {
72
+ return validateGasCompensationErc20(txCall, actionPath);
73
+ }
74
+ // txCall.to doesn't match any gasCompensationInfo group
75
+ return [{
76
+ code: types_1.ViolationCode.GasCompensationToMismatch,
77
+ message: `GasCompensation transactionCalls[0].to does not match any gasCompensationInfo.tokenAddress`,
78
+ path: `${actionPath}.details.transactionCalls[0].to`,
79
+ expected: groups.map(g => g.tokenAddress),
80
+ actual: txCall.to,
81
+ }];
82
+ }
83
+ // CRITICAL: for native: data === "0x", value > 0
84
+ function validateGasCompensationNative(txCall, actionPath) {
85
+ const violations = [];
86
+ // CRITICAL: data must be empty for native token transfer
87
+ if (txCall.data !== "0x") {
88
+ violations.push({
89
+ code: types_1.ViolationCode.GasCompensationCalldataInvalid,
90
+ message: `GasCompensation native transfer must have data="0x"`,
91
+ path: `${actionPath}.details.transactionCalls[0].data`,
92
+ expected: "0x",
93
+ actual: txCall.data,
94
+ });
95
+ }
96
+ try {
97
+ if (BigInt(txCall.value) <= 0n) {
98
+ violations.push({
99
+ code: types_1.ViolationCode.GasCompensationNativeValueZero,
100
+ message: `GasCompensation native value must be > 0`,
101
+ path: `${actionPath}.details.transactionCalls[0].value`,
102
+ actual: txCall.value,
103
+ });
104
+ }
105
+ }
106
+ catch {
107
+ violations.push({
108
+ code: types_1.ViolationCode.GasCompensationNativeValueZero,
109
+ message: `GasCompensation native value is not a valid number`,
110
+ path: `${actionPath}.details.transactionCalls[0].value`,
111
+ actual: txCall.value,
112
+ });
113
+ }
114
+ return violations;
115
+ }
116
+ // CRITICAL: for ERC20: data must be valid transfer(address,uint256)
117
+ function validateGasCompensationErc20(txCall, actionPath) {
118
+ try {
119
+ (0, evm_calldata_1.decodeTransferCalldata)(txCall.data);
120
+ }
121
+ catch (e) {
122
+ return [{
123
+ code: types_1.ViolationCode.GasCompensationCalldataInvalid,
124
+ message: `GasCompensation calldata is not valid ERC20 transfer`,
125
+ path: `${actionPath}.details.transactionCalls[0].data`,
126
+ actual: txCall.data,
127
+ details: e,
128
+ }];
129
+ }
130
+ return [];
131
+ }
132
+ // Groups gasCompensationInfo from preHooks by (chainId, tokenAddress, sender)
133
+ function groupGasCompensationInfo(request) {
134
+ const seen = new Set();
135
+ const groups = [];
136
+ for (const hook of request.preHooks ?? []) {
137
+ const info = hook.gasCompensationInfo;
138
+ if (!info)
139
+ continue;
140
+ const key = `${info.chainId}:${(0, address_1.normalizeAddress)(info.chainId, info.tokenAddress)}:${(0, address_1.normalizeAddress)(info.chainId, info.sender)}`;
141
+ if (!seen.has(key)) {
142
+ seen.add(key);
143
+ groups.push({
144
+ chainId: info.chainId,
145
+ tokenAddress: info.tokenAddress,
146
+ sender: info.sender,
147
+ });
148
+ }
149
+ }
150
+ return groups;
151
+ }
152
+ //# sourceMappingURL=evm-op-gas-compensation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evm-op-gas-compensation.js","sourceRoot":"","sources":["../../../src/validations/evm-op-gas-compensation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateHookOperations = validateHookOperations;
4
+ // TODO: Hook operation validation rules
5
+ function validateHookOperations(_actions, _basePath) {
6
+ return [];
7
+ }
8
+ //# sourceMappingURL=evm-op-hook.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evm-op-hook.js","sourceRoot":"","sources":["../../../src/validations/evm-op-hook.ts"],"names":[],"mappings":";;AAIA,wDAKC;AAPD,wCAAwC;AAExC,SAAgB,sBAAsB,CAClC,QAA6B,EAC7B,SAAiB;IAEjB,OAAO,EAAE,CAAC;AACd,CAAC"}
@@ -0,0 +1,112 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateWrapOperations = validateWrapOperations;
4
+ const types_1 = require("../types");
5
+ const viem_1 = require("viem");
6
+ const types_2 = require("../whitelists/types");
7
+ const evm_1 = require("../whitelists/evm");
8
+ const evm_calldata_1 = require("../helpers/evm-calldata");
9
+ const evm_token_1 = require("../helpers/evm-token");
10
+ const evm_trade_amounts_1 = require("../helpers/evm-trade-amounts");
11
+ const evm_action_1 = require("../helpers/evm-action");
12
+ function validateWrapOperations(actions, basePath, trades, realChainId) {
13
+ const violations = [];
14
+ for (let i = 0; i < actions.length; i++) {
15
+ const action = actions[i];
16
+ if (!action.actions.includes(types_1.EvmActionOperation.Wrap))
17
+ continue;
18
+ const actionPath = `${basePath}.requiredActions[${i}]`;
19
+ const txCalls = (0, evm_action_1.getTransactionCalls)(action);
20
+ // CRITICAL: transactionCalls must be present
21
+ if (txCalls.length === 0) {
22
+ violations.push({
23
+ code: types_1.ViolationCode.WrapTransactionCallsMissing,
24
+ message: `Wrap must have at least one transactionCall`,
25
+ path: `${actionPath}.details.transactionCalls`,
26
+ actual: [],
27
+ });
28
+ continue;
29
+ }
30
+ // CRITICAL: Wrap must have exactly one transactionCall (deposit)
31
+ if (txCalls.length > 1) {
32
+ violations.push({
33
+ code: types_1.ViolationCode.WrapTooManyTransactionCalls,
34
+ message: `Wrap must have exactly 1 transactionCall`,
35
+ path: `${actionPath}.details.transactionCalls`,
36
+ expected: 1,
37
+ actual: txCalls.length,
38
+ });
39
+ }
40
+ violations.push(...validateWrapNativeToken(trades, actionPath), ...validateWrapTo(txCalls[0], actionPath, realChainId), ...validateWrapCalldata(txCalls[0], actionPath), ...validateWrapAmount(txCalls[0], actionPath, trades, realChainId));
41
+ }
42
+ return violations;
43
+ }
44
+ // CRITICAL: native token must be present in trades
45
+ function validateWrapNativeToken(trades, actionPath) {
46
+ const hasNative = trades.some(t => (0, evm_token_1.isNativeToken)(t.srcChainTokenIn));
47
+ if (!hasNative) {
48
+ return [{
49
+ code: types_1.ViolationCode.WrapNativeTokenNotInTrades,
50
+ message: `Wrap requires a native token in request trades`,
51
+ path: `${actionPath}.actions`,
52
+ }];
53
+ }
54
+ return [];
55
+ }
56
+ // CRITICAL: transactionCalls[].to must be a WETH contract
57
+ function validateWrapTo(txCall, actionPath, realChainId) {
58
+ if (!(0, types_2.isWhitelisted)(evm_1.WETH_CONTRACTS, realChainId, txCall.to)) {
59
+ return [{
60
+ code: types_1.ViolationCode.WrapToNotWeth,
61
+ message: `Wrap transactionCalls[0].to must be a WETH contract`,
62
+ path: `${actionPath}.details.transactionCalls[0].to`,
63
+ actual: txCall.to,
64
+ }];
65
+ }
66
+ return [];
67
+ }
68
+ // CRITICAL: calldata must be deposit() selector
69
+ function validateWrapCalldata(txCall, actionPath) {
70
+ if (!(0, evm_calldata_1.isDepositCalldata)(txCall.data)) {
71
+ return [{
72
+ code: types_1.ViolationCode.WrapCalldataInvalid,
73
+ message: `Wrap calldata must be deposit() function selector`,
74
+ path: `${actionPath}.details.transactionCalls[0].data`,
75
+ expected: evm_calldata_1.DEPOSIT_SELECTOR,
76
+ actual: txCall.data,
77
+ }];
78
+ }
79
+ return [];
80
+ }
81
+ // CRITICAL: deposit amount (from value) must match sum of native trade amounts
82
+ function validateWrapAmount(txCall, actionPath, trades, realChainId) {
83
+ const sumResult = (0, evm_trade_amounts_1.sumTradeAmounts)(trades, viem_1.zeroAddress, realChainId);
84
+ if (sumResult.violations)
85
+ return sumResult.violations;
86
+ if (sumResult.skip)
87
+ return [];
88
+ const sum = sumResult.sum;
89
+ try {
90
+ const depositAmount = BigInt(txCall.value);
91
+ if (depositAmount !== sum) {
92
+ return [{
93
+ code: types_1.ViolationCode.WrapAmountMismatch,
94
+ message: `Wrap deposit amount does not match sum of native trade amounts`,
95
+ path: `${actionPath}.details.transactionCalls[0].value`,
96
+ expected: sum.toString(),
97
+ actual: depositAmount.toString(),
98
+ }];
99
+ }
100
+ }
101
+ catch {
102
+ return [{
103
+ code: types_1.ViolationCode.WrapAmountMismatch,
104
+ message: `Wrap deposit value is not a valid number`,
105
+ path: `${actionPath}.details.transactionCalls[0].value`,
106
+ expected: sum.toString(),
107
+ actual: txCall.value,
108
+ }];
109
+ }
110
+ return [];
111
+ }
112
+ //# sourceMappingURL=evm-op-wrap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evm-op-wrap.js","sourceRoot":"","sources":["../../../src/validations/evm-op-wrap.ts"],"names":[],"mappings":"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"}