@debridge-finance/borderless-validation-sdk 0.0.0-dev-4a73f49 → 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (286) hide show
  1. package/dist/cjs/helpers/address.js +18 -53
  2. package/dist/cjs/helpers/address.js.map +1 -1
  3. package/dist/cjs/helpers/constants.js +6 -0
  4. package/dist/cjs/helpers/constants.js.map +1 -0
  5. package/dist/cjs/helpers/evm-action.js +3 -3
  6. package/dist/cjs/helpers/evm-action.js.map +1 -1
  7. package/dist/cjs/helpers/evm-intent-id.js +13 -27
  8. package/dist/cjs/helpers/evm-intent-id.js.map +1 -1
  9. package/dist/cjs/helpers/evm-trade-amounts.js +1 -36
  10. package/dist/cjs/helpers/evm-trade-amounts.js.map +1 -1
  11. package/dist/cjs/types/enums.js +2 -32
  12. package/dist/cjs/types/enums.js.map +1 -1
  13. package/dist/cjs/types/request.js +2 -25
  14. package/dist/cjs/types/request.js.map +1 -1
  15. package/dist/cjs/types/response.js +5 -125
  16. package/dist/cjs/types/response.js.map +1 -1
  17. package/dist/cjs/types/validation.js +10 -81
  18. package/dist/cjs/types/validation.js.map +1 -1
  19. package/dist/cjs/validations/evm-caveats.js +14 -4
  20. package/dist/cjs/validations/evm-caveats.js.map +1 -1
  21. package/dist/cjs/validations/evm-op-budget.js +10 -13
  22. package/dist/cjs/validations/evm-op-budget.js.map +1 -1
  23. package/dist/cjs/validations/evm-op-gas-compensation.js +152 -0
  24. package/dist/cjs/validations/evm-op-gas-compensation.js.map +1 -0
  25. package/dist/cjs/validations/evm-op-hook.js +3 -410
  26. package/dist/cjs/validations/evm-op-hook.js.map +1 -1
  27. package/dist/cjs/validations/evm-op-wrap.js +7 -10
  28. package/dist/cjs/validations/evm-op-wrap.js.map +1 -1
  29. package/dist/cjs/validations/evm-required-actions.js +9 -7
  30. package/dist/cjs/validations/evm-required-actions.js.map +1 -1
  31. package/dist/cjs/validations/evm-sign712-metamask.js +94 -17
  32. package/dist/cjs/validations/evm-sign712-metamask.js.map +1 -1
  33. package/dist/cjs/validations/evm-sign7702.js +22 -34
  34. package/dist/cjs/validations/evm-sign7702.js.map +1 -1
  35. package/dist/cjs/validations/hooks-common.js +37 -252
  36. package/dist/cjs/validations/hooks-common.js.map +1 -1
  37. package/dist/cjs/validations/required-actions.js +7 -7
  38. package/dist/cjs/validations/required-actions.js.map +1 -1
  39. package/dist/cjs/validations/solana-hook.js +22 -33
  40. package/dist/cjs/validations/solana-hook.js.map +1 -1
  41. package/dist/cjs/validations/solana-op-budget.js +18 -56
  42. package/dist/cjs/validations/solana-op-budget.js.map +1 -1
  43. package/dist/cjs/validations/solana-op-wrap.js +13 -46
  44. package/dist/cjs/validations/solana-op-wrap.js.map +1 -1
  45. package/dist/cjs/validations/solana-required-actions.js +3 -3
  46. package/dist/cjs/validations/solana-required-actions.js.map +1 -1
  47. package/dist/cjs/validations/solana-transaction.js +5 -5
  48. package/dist/cjs/validations/solana-transaction.js.map +1 -1
  49. package/dist/cjs/validations/trade-grouping.js +1 -139
  50. package/dist/cjs/validations/trade-grouping.js.map +1 -1
  51. package/dist/cjs/validations/trades.js +40 -162
  52. package/dist/cjs/validations/trades.js.map +1 -1
  53. package/dist/cjs/validator.js +16 -11
  54. package/dist/cjs/validator.js.map +1 -1
  55. package/dist/cjs/whitelists/environment-config.js +28 -47
  56. package/dist/cjs/whitelists/environment-config.js.map +1 -1
  57. package/dist/cjs/whitelists/evm/caveat-enforcers.js +5 -21
  58. package/dist/cjs/whitelists/evm/caveat-enforcers.js.map +1 -1
  59. package/dist/cjs/whitelists/evm/delegation-manager.js +2 -7
  60. package/dist/cjs/whitelists/evm/delegation-manager.js.map +1 -1
  61. package/dist/cjs/whitelists/evm/eip7702-delegation.js +2 -7
  62. package/dist/cjs/whitelists/evm/eip7702-delegation.js.map +1 -1
  63. package/dist/cjs/whitelists/evm/index.js +1 -14
  64. package/dist/cjs/whitelists/evm/index.js.map +1 -1
  65. package/dist/cjs/whitelists/evm/permit2.js +12 -16
  66. package/dist/cjs/whitelists/evm/permit2.js.map +1 -1
  67. package/dist/cjs/whitelists/evm/weth.js +5 -16
  68. package/dist/cjs/whitelists/evm/weth.js.map +1 -1
  69. package/dist/cjs/whitelists/solana/intent-signature.js +1 -0
  70. package/dist/cjs/whitelists/solana/intent-signature.js.map +1 -1
  71. package/dist/cjs/whitelists/subscription-to-chain-id.js +0 -10
  72. package/dist/cjs/whitelists/subscription-to-chain-id.js.map +1 -1
  73. package/dist/cjs/whitelists/types.js +3 -13
  74. package/dist/cjs/whitelists/types.js.map +1 -1
  75. package/dist/esm/helpers/address.js +17 -48
  76. package/dist/esm/helpers/address.js.map +1 -1
  77. package/dist/esm/helpers/constants.js +3 -0
  78. package/dist/esm/helpers/constants.js.map +1 -0
  79. package/dist/esm/helpers/evm-action.js +3 -3
  80. package/dist/esm/helpers/evm-action.js.map +1 -1
  81. package/dist/esm/helpers/evm-intent-id.js +13 -27
  82. package/dist/esm/helpers/evm-intent-id.js.map +1 -1
  83. package/dist/esm/helpers/evm-trade-amounts.js +1 -36
  84. package/dist/esm/helpers/evm-trade-amounts.js.map +1 -1
  85. package/dist/esm/types/enums.js +1 -31
  86. package/dist/esm/types/enums.js.map +1 -1
  87. package/dist/esm/types/request.js +3 -26
  88. package/dist/esm/types/request.js.map +1 -1
  89. package/dist/esm/types/response.js +4 -124
  90. package/dist/esm/types/response.js.map +1 -1
  91. package/dist/esm/types/validation.js +10 -81
  92. package/dist/esm/types/validation.js.map +1 -1
  93. package/dist/esm/validations/evm-caveats.js +14 -4
  94. package/dist/esm/validations/evm-caveats.js.map +1 -1
  95. package/dist/esm/validations/evm-op-budget.js +10 -13
  96. package/dist/esm/validations/evm-op-budget.js.map +1 -1
  97. package/dist/esm/validations/evm-op-gas-compensation.js +149 -0
  98. package/dist/esm/validations/evm-op-gas-compensation.js.map +1 -0
  99. package/dist/esm/validations/evm-op-hook.js +2 -409
  100. package/dist/esm/validations/evm-op-hook.js.map +1 -1
  101. package/dist/esm/validations/evm-op-wrap.js +7 -10
  102. package/dist/esm/validations/evm-op-wrap.js.map +1 -1
  103. package/dist/esm/validations/evm-required-actions.js +9 -7
  104. package/dist/esm/validations/evm-required-actions.js.map +1 -1
  105. package/dist/esm/validations/evm-sign712-metamask.js +94 -17
  106. package/dist/esm/validations/evm-sign712-metamask.js.map +1 -1
  107. package/dist/esm/validations/evm-sign7702.js +22 -33
  108. package/dist/esm/validations/evm-sign7702.js.map +1 -1
  109. package/dist/esm/validations/hooks-common.js +38 -251
  110. package/dist/esm/validations/hooks-common.js.map +1 -1
  111. package/dist/esm/validations/required-actions.js +7 -7
  112. package/dist/esm/validations/required-actions.js.map +1 -1
  113. package/dist/esm/validations/solana-hook.js +24 -35
  114. package/dist/esm/validations/solana-hook.js.map +1 -1
  115. package/dist/esm/validations/solana-op-budget.js +18 -56
  116. package/dist/esm/validations/solana-op-budget.js.map +1 -1
  117. package/dist/esm/validations/solana-op-wrap.js +14 -47
  118. package/dist/esm/validations/solana-op-wrap.js.map +1 -1
  119. package/dist/esm/validations/solana-required-actions.js +3 -3
  120. package/dist/esm/validations/solana-required-actions.js.map +1 -1
  121. package/dist/esm/validations/solana-transaction.js +7 -7
  122. package/dist/esm/validations/solana-transaction.js.map +1 -1
  123. package/dist/esm/validations/trade-grouping.js +1 -139
  124. package/dist/esm/validations/trade-grouping.js.map +1 -1
  125. package/dist/esm/validations/trades.js +41 -163
  126. package/dist/esm/validations/trades.js.map +1 -1
  127. package/dist/esm/validator.js +16 -11
  128. package/dist/esm/validator.js.map +1 -1
  129. package/dist/esm/whitelists/environment-config.js +28 -47
  130. package/dist/esm/whitelists/environment-config.js.map +1 -1
  131. package/dist/esm/whitelists/evm/caveat-enforcers.js +4 -20
  132. package/dist/esm/whitelists/evm/caveat-enforcers.js.map +1 -1
  133. package/dist/esm/whitelists/evm/delegation-manager.js +1 -6
  134. package/dist/esm/whitelists/evm/delegation-manager.js.map +1 -1
  135. package/dist/esm/whitelists/evm/eip7702-delegation.js +1 -6
  136. package/dist/esm/whitelists/evm/eip7702-delegation.js.map +1 -1
  137. package/dist/esm/whitelists/evm/index.js +4 -4
  138. package/dist/esm/whitelists/evm/index.js.map +1 -1
  139. package/dist/esm/whitelists/evm/permit2.js +5 -9
  140. package/dist/esm/whitelists/evm/permit2.js.map +1 -1
  141. package/dist/esm/whitelists/evm/weth.js +5 -16
  142. package/dist/esm/whitelists/evm/weth.js.map +1 -1
  143. package/dist/esm/whitelists/solana/intent-signature.js +1 -0
  144. package/dist/esm/whitelists/solana/intent-signature.js.map +1 -1
  145. package/dist/esm/whitelists/subscription-to-chain-id.js +0 -9
  146. package/dist/esm/whitelists/subscription-to-chain-id.js.map +1 -1
  147. package/dist/esm/whitelists/types.js +5 -14
  148. package/dist/esm/whitelists/types.js.map +1 -1
  149. package/dist/types/helpers/address.d.ts +7 -7
  150. package/dist/types/helpers/address.d.ts.map +1 -1
  151. package/dist/types/helpers/constants.d.ts +2 -0
  152. package/dist/types/helpers/constants.d.ts.map +1 -0
  153. package/dist/types/helpers/evm-intent-id.d.ts.map +1 -1
  154. package/dist/types/helpers/evm-trade-amounts.d.ts +2 -2
  155. package/dist/types/helpers/evm-trade-amounts.d.ts.map +1 -1
  156. package/dist/types/types/enums.d.ts +1 -24
  157. package/dist/types/types/enums.d.ts.map +1 -1
  158. package/dist/types/types/request.d.ts +9 -19
  159. package/dist/types/types/request.d.ts.map +1 -1
  160. package/dist/types/types/response.d.ts +17 -1015
  161. package/dist/types/types/response.d.ts.map +1 -1
  162. package/dist/types/types/validation.d.ts +11 -73
  163. package/dist/types/types/validation.d.ts.map +1 -1
  164. package/dist/types/validations/evm-caveats.d.ts.map +1 -1
  165. package/dist/types/validations/evm-op-budget.d.ts +2 -2
  166. package/dist/types/validations/evm-op-budget.d.ts.map +1 -1
  167. package/dist/types/validations/evm-op-gas-compensation.d.ts +3 -0
  168. package/dist/types/validations/evm-op-gas-compensation.d.ts.map +1 -0
  169. package/dist/types/validations/evm-op-hook.d.ts +2 -4
  170. package/dist/types/validations/evm-op-hook.d.ts.map +1 -1
  171. package/dist/types/validations/evm-op-wrap.d.ts +2 -2
  172. package/dist/types/validations/evm-op-wrap.d.ts.map +1 -1
  173. package/dist/types/validations/evm-required-actions.d.ts +2 -2
  174. package/dist/types/validations/evm-required-actions.d.ts.map +1 -1
  175. package/dist/types/validations/evm-sign712-metamask.d.ts.map +1 -1
  176. package/dist/types/validations/evm-sign7702.d.ts +1 -2
  177. package/dist/types/validations/evm-sign7702.d.ts.map +1 -1
  178. package/dist/types/validations/hooks-common.d.ts +0 -1
  179. package/dist/types/validations/hooks-common.d.ts.map +1 -1
  180. package/dist/types/validations/required-actions.d.ts +1 -2
  181. package/dist/types/validations/required-actions.d.ts.map +1 -1
  182. package/dist/types/validations/solana-hook.d.ts +2 -4
  183. package/dist/types/validations/solana-hook.d.ts.map +1 -1
  184. package/dist/types/validations/solana-op-budget.d.ts +2 -2
  185. package/dist/types/validations/solana-op-budget.d.ts.map +1 -1
  186. package/dist/types/validations/solana-op-wrap.d.ts +2 -2
  187. package/dist/types/validations/solana-op-wrap.d.ts.map +1 -1
  188. package/dist/types/validations/solana-required-actions.d.ts +2 -2
  189. package/dist/types/validations/solana-required-actions.d.ts.map +1 -1
  190. package/dist/types/validations/solana-transaction.d.ts +3 -3
  191. package/dist/types/validations/solana-transaction.d.ts.map +1 -1
  192. package/dist/types/validations/trade-grouping.d.ts +2 -6
  193. package/dist/types/validations/trade-grouping.d.ts.map +1 -1
  194. package/dist/types/validations/trades.d.ts.map +1 -1
  195. package/dist/types/validator.d.ts.map +1 -1
  196. package/dist/types/whitelists/environment-config.d.ts.map +1 -1
  197. package/dist/types/whitelists/evm/caveat-enforcers.d.ts +0 -8
  198. package/dist/types/whitelists/evm/caveat-enforcers.d.ts.map +1 -1
  199. package/dist/types/whitelists/evm/delegation-manager.d.ts +0 -2
  200. package/dist/types/whitelists/evm/delegation-manager.d.ts.map +1 -1
  201. package/dist/types/whitelists/evm/eip7702-delegation.d.ts +0 -2
  202. package/dist/types/whitelists/evm/eip7702-delegation.d.ts.map +1 -1
  203. package/dist/types/whitelists/evm/index.d.ts +4 -4
  204. package/dist/types/whitelists/evm/index.d.ts.map +1 -1
  205. package/dist/types/whitelists/evm/permit2.d.ts +0 -1
  206. package/dist/types/whitelists/evm/permit2.d.ts.map +1 -1
  207. package/dist/types/whitelists/evm/weth.d.ts.map +1 -1
  208. package/dist/types/whitelists/solana/intent-signature.d.ts.map +1 -1
  209. package/dist/types/whitelists/subscription-to-chain-id.d.ts +0 -1
  210. package/dist/types/whitelists/subscription-to-chain-id.d.ts.map +1 -1
  211. package/dist/types/whitelists/types.d.ts +1 -1
  212. package/dist/types/whitelists/types.d.ts.map +1 -1
  213. package/package.json +3 -4
  214. package/README.md +0 -164
  215. package/dist/cjs/helpers/evm-dln-hook-pack.js +0 -87
  216. package/dist/cjs/helpers/evm-dln-hook-pack.js.map +0 -1
  217. package/dist/cjs/helpers/evm-gas-compensation-tx.js +0 -102
  218. package/dist/cjs/helpers/evm-gas-compensation-tx.js.map +0 -1
  219. package/dist/cjs/helpers/gas-compensation.js +0 -36
  220. package/dist/cjs/helpers/gas-compensation.js.map +0 -1
  221. package/dist/cjs/helpers/hex.js +0 -24
  222. package/dist/cjs/helpers/hex.js.map +0 -1
  223. package/dist/cjs/helpers/placeholder.js +0 -174
  224. package/dist/cjs/helpers/placeholder.js.map +0 -1
  225. package/dist/cjs/helpers/sets.js +0 -13
  226. package/dist/cjs/helpers/sets.js.map +0 -1
  227. package/dist/cjs/validations/compensation-hook.js +0 -203
  228. package/dist/cjs/validations/compensation-hook.js.map +0 -1
  229. package/dist/cjs/validations/evm-sign712-shared.js +0 -116
  230. package/dist/cjs/validations/evm-sign712-shared.js.map +0 -1
  231. package/dist/cjs/validations/intent-destinations.js +0 -197
  232. package/dist/cjs/validations/intent-destinations.js.map +0 -1
  233. package/dist/cjs/validations/intent-tokens.js +0 -347
  234. package/dist/cjs/validations/intent-tokens.js.map +0 -1
  235. package/dist/cjs/validations/intent.js +0 -288
  236. package/dist/cjs/validations/intent.js.map +0 -1
  237. package/dist/cjs/whitelists/evm/metamask-delegation-chains.js +0 -16
  238. package/dist/cjs/whitelists/evm/metamask-delegation-chains.js.map +0 -1
  239. package/dist/esm/helpers/evm-dln-hook-pack.js +0 -82
  240. package/dist/esm/helpers/evm-dln-hook-pack.js.map +0 -1
  241. package/dist/esm/helpers/evm-gas-compensation-tx.js +0 -99
  242. package/dist/esm/helpers/evm-gas-compensation-tx.js.map +0 -1
  243. package/dist/esm/helpers/gas-compensation.js +0 -33
  244. package/dist/esm/helpers/gas-compensation.js.map +0 -1
  245. package/dist/esm/helpers/hex.js +0 -20
  246. package/dist/esm/helpers/hex.js.map +0 -1
  247. package/dist/esm/helpers/placeholder.js +0 -168
  248. package/dist/esm/helpers/placeholder.js.map +0 -1
  249. package/dist/esm/helpers/sets.js +0 -10
  250. package/dist/esm/helpers/sets.js.map +0 -1
  251. package/dist/esm/validations/compensation-hook.js +0 -200
  252. package/dist/esm/validations/compensation-hook.js.map +0 -1
  253. package/dist/esm/validations/evm-sign712-shared.js +0 -110
  254. package/dist/esm/validations/evm-sign712-shared.js.map +0 -1
  255. package/dist/esm/validations/intent-destinations.js +0 -194
  256. package/dist/esm/validations/intent-destinations.js.map +0 -1
  257. package/dist/esm/validations/intent-tokens.js +0 -344
  258. package/dist/esm/validations/intent-tokens.js.map +0 -1
  259. package/dist/esm/validations/intent.js +0 -285
  260. package/dist/esm/validations/intent.js.map +0 -1
  261. package/dist/esm/whitelists/evm/metamask-delegation-chains.js +0 -13
  262. package/dist/esm/whitelists/evm/metamask-delegation-chains.js.map +0 -1
  263. package/dist/types/helpers/evm-dln-hook-pack.d.ts +0 -19
  264. package/dist/types/helpers/evm-dln-hook-pack.d.ts.map +0 -1
  265. package/dist/types/helpers/evm-gas-compensation-tx.d.ts +0 -13
  266. package/dist/types/helpers/evm-gas-compensation-tx.d.ts.map +0 -1
  267. package/dist/types/helpers/gas-compensation.d.ts +0 -10
  268. package/dist/types/helpers/gas-compensation.d.ts.map +0 -1
  269. package/dist/types/helpers/hex.d.ts +0 -3
  270. package/dist/types/helpers/hex.d.ts.map +0 -1
  271. package/dist/types/helpers/placeholder.d.ts +0 -41
  272. package/dist/types/helpers/placeholder.d.ts.map +0 -1
  273. package/dist/types/helpers/sets.d.ts +0 -2
  274. package/dist/types/helpers/sets.d.ts.map +0 -1
  275. package/dist/types/validations/compensation-hook.d.ts +0 -3
  276. package/dist/types/validations/compensation-hook.d.ts.map +0 -1
  277. package/dist/types/validations/evm-sign712-shared.d.ts +0 -7
  278. package/dist/types/validations/evm-sign712-shared.d.ts.map +0 -1
  279. package/dist/types/validations/intent-destinations.d.ts +0 -4
  280. package/dist/types/validations/intent-destinations.d.ts.map +0 -1
  281. package/dist/types/validations/intent-tokens.d.ts +0 -4
  282. package/dist/types/validations/intent-tokens.d.ts.map +0 -1
  283. package/dist/types/validations/intent.d.ts +0 -5
  284. package/dist/types/validations/intent.d.ts.map +0 -1
  285. package/dist/types/whitelists/evm/metamask-delegation-chains.d.ts +0 -3
  286. package/dist/types/whitelists/evm/metamask-delegation-chains.d.ts.map +0 -1
@@ -1,200 +0,0 @@
1
- import { ViolationCode, BundleHookType, ChainEngine, EvmActionOperation, SolanaActionOperation, } from "../types/index.js";
2
- import { addressEquals, getChainEngine } from "../helpers/address.js";
3
- import { extractGasCompensationGroups, } from "../helpers/gas-compensation.js";
4
- import { validateEvmGasCompensationTx } from "../helpers/evm-gas-compensation-tx.js";
5
- import { resolveChainIdOrSelf } from "../whitelists/subscription-to-chain-id.js";
6
- // Validates `response.preHooks[i].hook` for a compensation hook
7
- // (i.e. `i >= request.preHooks.length`). This is the primary MITM defense for
8
- // surplus preHooks — `validateHookEcho` cannot help here because there is no
9
- // matching request entry to compare against.
10
- export function validateCompensationHookStructure(hookPayload, basePath, request) {
11
- const hook = hookPayload.hook;
12
- const hookPath = `${basePath}.hook`;
13
- // Resolve the hook's subscriptionId into a real chainId once; every
14
- // chain-aware helper downstream takes real. Fall back to the subscriptionId
15
- // value for unknown chains.
16
- const realHookChainId = resolveChainIdOrSelf(hook.chainId);
17
- const violations = [
18
- ...validateCommonFields(hook, hookPath),
19
- ...validateCompensationRequiredActionsOps(hookPayload, basePath, realHookChainId),
20
- ];
21
- const allGroups = extractGasCompensationGroups(request);
22
- const matchingGroups = findGroupsMatchingFrom(hook, realHookChainId, allGroups);
23
- if (matchingGroups.length === 0) {
24
- violations.push({
25
- code: ViolationCode.CompensationHookFromMismatch,
26
- message: "compensation hook.from does not match any request"
27
- + " gasCompensationInfo.sender on the same chain",
28
- path: `${hookPath}.from`,
29
- expected: allGroups.map(g => ({ chainId: g.chainId, sender: g.sender })),
30
- actual: { chainId: hook.chainId, from: hook.from },
31
- });
32
- // Without a matching group we cannot meaningfully run chain-specific
33
- // structural checks (token address comparison, etc.).
34
- return violations;
35
- }
36
- const isSolana = getChainEngine(realHookChainId) === ChainEngine.Solana;
37
- violations.push(...(isSolana
38
- ? validateSolanaCompensationStructure(hook, matchingGroups, hookPath)
39
- : validateEvmCompensationStructure(hook, matchingGroups, realHookChainId, hookPath)));
40
- return violations;
41
- }
42
- function validateCommonFields(hook, hookPath) {
43
- const violations = [];
44
- // HIGH: compensation hooks always carry empty placeHolders.
45
- if (hook.placeHolders.length !== 0) {
46
- violations.push({
47
- code: ViolationCode.CompensationHookPlaceHoldersNotEmpty,
48
- message: "compensation hook must have empty placeHolders",
49
- path: `${hookPath}.placeHolders`,
50
- expected: [],
51
- actual: hook.placeHolders,
52
- });
53
- }
54
- // HIGH: API always emits isAtomic=false for compensation hooks.
55
- if (hook.isAtomic !== false) {
56
- violations.push({
57
- code: ViolationCode.CompensationHookIsAtomicInvalid,
58
- message: "compensation hook must have isAtomic=false",
59
- path: `${hookPath}.isAtomic`,
60
- expected: false,
61
- actual: hook.isAtomic,
62
- });
63
- }
64
- // MEDIUM: API never sets hook.type='direct' for compensation; delegated or
65
- // omitted is allowed.
66
- if (hook.type !== undefined && hook.type !== BundleHookType.Delegated) {
67
- violations.push({
68
- code: ViolationCode.CompensationHookTypeInvalid,
69
- message: "compensation hook must have type=delegated (or omitted)",
70
- path: `${hookPath}.type`,
71
- expected: BundleHookType.Delegated,
72
- actual: hook.type,
73
- });
74
- }
75
- return violations;
76
- }
77
- function findGroupsMatchingFrom(hook, realHookChainId, groups) {
78
- return groups.filter(g => g.realChainId === realHookChainId
79
- && addressEquals(realHookChainId, g.sender, hook.from));
80
- }
81
- // CRITICAL: a compensation hook must emit GasCompensation ops and must not
82
- // emit Hook ops. `validateHookActionsList` already enforces that each action
83
- // carries exactly one op from {Hook, GasCompensation}; this rule narrows further.
84
- function validateCompensationRequiredActionsOps(hookPayload, basePath, realHookChainId) {
85
- const isSolana = getChainEngine(realHookChainId) === ChainEngine.Solana;
86
- const hookOp = isSolana
87
- ? SolanaActionOperation.Hook
88
- : EvmActionOperation.Hook;
89
- const gasCompensationOp = isSolana
90
- ? SolanaActionOperation.GasCompensation
91
- : EvmActionOperation.GasCompensation;
92
- const ops = hookPayload.requiredActions
93
- .flatMap(a => a.actions);
94
- const violations = [];
95
- if (ops.includes(hookOp)) {
96
- violations.push({
97
- code: ViolationCode.CompensationHookRequiredActionsInvalid,
98
- message: "compensation hook requiredActions must not contain"
99
- + " the `Hook` operation",
100
- path: `${basePath}.requiredActions`,
101
- actual: ops,
102
- });
103
- }
104
- if (!ops.includes(gasCompensationOp)) {
105
- violations.push({
106
- code: ViolationCode.CompensationHookRequiredActionsInvalid,
107
- message: "compensation hook requiredActions must contain at least one"
108
- + " `GasCompensation` operation",
109
- path: `${basePath}.requiredActions`,
110
- actual: ops,
111
- });
112
- }
113
- return violations;
114
- }
115
- // =============================================
116
- // EVM compensation hook structure
117
- // =============================================
118
- function validateEvmCompensationStructure(hook, groups, realHookChainId, hookPath) {
119
- const violations = [];
120
- // MEDIUM: API builds EVM compensation hooks without gasCompensationInfo
121
- // (only Solana compensation hooks carry it for two-pass grouping).
122
- if (hook.gasCompensationInfo !== undefined) {
123
- violations.push({
124
- code: ViolationCode.CompensationHookEvmGasCompensationInfoPresent,
125
- message: "EVM compensation hook must not include gasCompensationInfo",
126
- path: `${hookPath}.gasCompensationInfo`,
127
- actual: hook.gasCompensationInfo,
128
- });
129
- }
130
- // HIGH: `to` is required for EVM hooks.
131
- if (hook.to === undefined) {
132
- violations.push({
133
- code: ViolationCode.CompensationHookEvmToMissing,
134
- message: "EVM compensation hook must have `to`",
135
- path: `${hookPath}.to`,
136
- });
137
- return violations;
138
- }
139
- // Native vs ERC20 classification + value/data form is shared with
140
- // hook-scope `transactionCalls[0]` validation; the helper handles both.
141
- violations.push(...validateEvmGasCompensationTx({ to: hook.to, data: hook.data, value: hook.value ?? "0" }, groups, realHookChainId, hookPath, {
142
- toMismatch: ViolationCode.CompensationHookEvmToMismatch,
143
- dataInvalid: ViolationCode.CompensationHookEvmDataInvalid,
144
- valueInvalid: ViolationCode.CompensationHookEvmValueInvalid,
145
- }));
146
- return violations;
147
- }
148
- // =============================================
149
- // Solana compensation hook structure
150
- // =============================================
151
- function validateSolanaCompensationStructure(hook, groups, hookPath) {
152
- const violations = [];
153
- // LOW: API deletes `to` and `value` from Solana hook echoes.
154
- if (hook.to !== undefined) {
155
- violations.push({
156
- code: ViolationCode.CompensationHookSolanaToOrValuePresent,
157
- message: "Solana compensation hook must not include `to`",
158
- path: `${hookPath}.to`,
159
- actual: hook.to,
160
- });
161
- }
162
- if (hook.value !== undefined) {
163
- violations.push({
164
- code: ViolationCode.CompensationHookSolanaToOrValuePresent,
165
- message: "Solana compensation hook must not include `value`",
166
- path: `${hookPath}.value`,
167
- actual: hook.value,
168
- });
169
- }
170
- // HIGH: Solana compensation hooks must carry gasCompensationInfo (API uses
171
- // it for two-pass grouping to include the comp transaction's own cost).
172
- const info = hook.gasCompensationInfo;
173
- if (info === undefined) {
174
- violations.push({
175
- code: ViolationCode.CompensationHookSolanaGasCompensationInfoMissing,
176
- message: "Solana compensation hook must include gasCompensationInfo",
177
- path: `${hookPath}.gasCompensationInfo`,
178
- });
179
- return violations;
180
- }
181
- // CRITICAL: all three fields must match some request group.
182
- const matches = groups.some(g => g.chainId === info.chainId
183
- && addressEquals(g.realChainId, g.tokenAddress, info.tokenAddress)
184
- && addressEquals(g.realChainId, g.sender, info.sender));
185
- if (!matches) {
186
- violations.push({
187
- code: ViolationCode.CompensationHookSolanaGasCompensationInfoMismatch,
188
- message: "Solana compensation hook.gasCompensationInfo does not match"
189
- + " any request group",
190
- path: `${hookPath}.gasCompensationInfo`,
191
- expected: groups,
192
- actual: info,
193
- });
194
- }
195
- // Note: the compensation transaction's inner bytes (programs, transfer,
196
- // fee-payer, etc.) are already validated by validateSolanaGasCompensationAction
197
- // running against the single [GasCompensation] required action in this hook.
198
- return violations;
199
- }
200
- //# sourceMappingURL=compensation-hook.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"compensation-hook.js","sourceRoot":"","sources":["../../../src/validations/compensation-hook.ts"],"names":[],"mappings":"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"}
@@ -1,110 +0,0 @@
1
- import { ViolationCode, } from "../types/index.js";
2
- import { isWhitelisted } from "../whitelists/types.js";
3
- import { DELEGATION_MANAGER_CONTRACTS } from "../whitelists/evm/index.js";
4
- import { addressEquals } from "../helpers/address.js";
5
- import { classifyCaveats, validateExactExecutionPresence, validateExactExecutionContent, validateTimestampEnforcerValue, } from "./evm-caveats.js";
6
- // Shared content-validators for `Sign712MetaMaskCaveats` /
7
- // `Sign712MetaMaskCaveatsWithPlaceholders` payloads. Used both in intent-scope
8
- // and hook-scope.
9
- // CRITICAL: `data` must be present and contain `domain` and `message`. If this
10
- // fails, downstream content-validators must not run (they assume `data.domain`
11
- // and `data.message` exist).
12
- export function validateSign712DataPresent(data, actionPath) {
13
- if (!data || !data.domain || !data.message) {
14
- return [{
15
- code: ViolationCode.Sign712MetaMaskDomainNameNotDelegationManager,
16
- message: "Sign712MetaMask data is missing domain or message",
17
- path: `${actionPath}.data`,
18
- actual: data,
19
- }];
20
- }
21
- return [];
22
- }
23
- // CRITICAL: domain.name must be "DelegationManager"
24
- // CRITICAL: domain.chainId must equal the real chainId
25
- // CRITICAL: domain.verifyingContract must be in the DelegationManager whitelist
26
- export function validateSign712Domain(data, actionPath, realChainId) {
27
- const violations = [];
28
- if (data.domain.name !== "DelegationManager") {
29
- violations.push({
30
- code: ViolationCode.Sign712MetaMaskDomainNameNotDelegationManager,
31
- message: `Sign712MetaMask domain.name must be "DelegationManager"`,
32
- path: `${actionPath}.data.domain.name`,
33
- expected: "DelegationManager",
34
- actual: data.domain.name,
35
- });
36
- }
37
- if (data.domain.chainId !== realChainId) {
38
- violations.push({
39
- code: ViolationCode.Sign712MetaMaskChainIdMismatch,
40
- message: `Sign712MetaMask domain.chainId does not match the real chainId`,
41
- path: `${actionPath}.data.domain.chainId`,
42
- expected: realChainId,
43
- actual: data.domain.chainId,
44
- });
45
- }
46
- if (data.domain.verifyingContract === undefined
47
- || !isWhitelisted(DELEGATION_MANAGER_CONTRACTS, realChainId, data.domain.verifyingContract)) {
48
- violations.push({
49
- code: ViolationCode.Sign712MetaMaskVerifyingContractNotWhitelisted,
50
- message: `Sign712MetaMask domain.verifyingContract is not whitelisted`,
51
- path: `${actionPath}.data.domain.verifyingContract`,
52
- actual: data.domain.verifyingContract,
53
- });
54
- }
55
- return violations;
56
- }
57
- // CRITICAL: message.delegator must match the address that requested the
58
- // delegation. The trust source differs per scope (intent uses the trade's
59
- // `srcChainAuthorityAddress`, hook uses `hook.from`); the comparison itself is
60
- // shared. Caller passes `expectedDelegator = undefined` to record the violation
61
- // without an expected value.
62
- export function validateSign712Delegator(data, actionPath, realChainId, expectedDelegator, expectedSourceLabel) {
63
- const delegator = data.message.delegator;
64
- if (expectedDelegator === undefined
65
- || delegator === undefined
66
- || !addressEquals(realChainId, delegator, expectedDelegator)) {
67
- return [{
68
- code: ViolationCode.Sign712MetaMaskDelegatorMismatch,
69
- message: `Sign712MetaMask message.delegator must match ${expectedSourceLabel}`,
70
- path: `${actionPath}.data.message.delegator`,
71
- expected: expectedDelegator,
72
- actual: delegator,
73
- }];
74
- }
75
- return [];
76
- }
77
- // CRITICAL: caveats must contain valid IdEnforcer (replay protection),
78
- // TimestampEnforcer (with correct beforeThreshold), and ExactExecution /
79
- // ExactExecutionBatch caveats whose content matches `transactionCalls[]`.
80
- export function validateSign712Caveats(caveats, actionId, transactionCalls, actionPath, realChainId, expirationTimestamp) {
81
- const violations = [];
82
- const classified = classifyCaveats(caveats, actionId, actionPath, realChainId, violations);
83
- violations.push(...validateExactExecutionPresence(classified, transactionCalls, actionPath));
84
- validateExactExecutionContent(classified, transactionCalls, actionPath, violations);
85
- // CRITICAL: must have at least one IdEnforcer caveat (replay protection)
86
- if (!classified.hasIdEnforcer) {
87
- violations.push({
88
- code: ViolationCode.Sign712MetaMaskMissingIdEnforcerCaveat,
89
- message: "Sign712MetaMask must have an IdEnforcer caveat",
90
- path: `${actionPath}.data.message.caveats`,
91
- });
92
- }
93
- // CRITICAL: must have exactly one TimestampEnforcer caveat.
94
- if (classified.timestampCount !== 1) {
95
- violations.push({
96
- code: classified.timestampCount === 0
97
- ? ViolationCode.Sign712MetaMaskMissingTimestampEnforcerCaveat
98
- : ViolationCode.Sign712MetaMaskDuplicateTimestampEnforcerCaveat,
99
- message: "Sign712MetaMask must have exactly one TimestampEnforcer",
100
- path: `${actionPath}.data.message.caveats`,
101
- expected: 1,
102
- actual: classified.timestampCount,
103
- });
104
- }
105
- if (classified.firstTimestamp) {
106
- validateTimestampEnforcerValue(classified.firstTimestamp.caveat, expirationTimestamp, classified.firstTimestamp.index, actionPath, violations);
107
- }
108
- return violations;
109
- }
110
- //# sourceMappingURL=evm-sign712-shared.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"evm-sign712-shared.js","sourceRoot":"","sources":["../../../src/validations/evm-sign712-shared.ts"],"names":[],"mappings":"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"}
@@ -1,194 +0,0 @@
1
- import { ViolationCode, SpecialChainId, ChainEngine, } from "../types/index.js";
2
- import { detectChainEngine, getChainEngine, normalizeAddress, normalizeAddressByValue, } from "../helpers/address.js";
3
- import { setsEqual } from "../helpers/sets.js";
4
- import { resolveChainId } from "../whitelists/subscription-to-chain-id.js";
5
- export function validateIntentDestinations(intent, group, basePath, quoteMode) {
6
- // Safe skip: in quote mode receiverDetails/dstAuthorityAddress contain
7
- // placeholder values per the API contract
8
- if (quoteMode)
9
- return [];
10
- return [
11
- ...validateDestinationList(intent.receiverDetails, group, trade => trade.dstChainTokenOutRecipient, `${basePath}.receiverDetails`, {
12
- addressInvalid: ViolationCode.IntentReceiverDetailsAddressInvalid,
13
- chainIdsMismatch: ViolationCode.IntentReceiverDetailsChainIdsMismatch,
14
- missing: ViolationCode.IntentReceiverDetailsMissing,
15
- duplicate: ViolationCode.IntentReceiverDetailsDuplicate,
16
- addressChainMismatch: ViolationCode.IntentReceiverDetailsAddressChainMismatch,
17
- }, "receiverDetails"),
18
- ...validateDestinationList(intent.dstAuthorityAddress, group, trade => trade.dstChainAuthorityAddress, `${basePath}.dstAuthorityAddress`, {
19
- addressInvalid: ViolationCode.IntentDstAuthorityAddressInvalid,
20
- chainIdsMismatch: ViolationCode.IntentDstAuthorityChainIdsMismatch,
21
- missing: ViolationCode.IntentDstAuthorityMissing,
22
- duplicate: ViolationCode.IntentDstAuthorityDuplicate,
23
- addressChainMismatch: ViolationCode.IntentDstAuthorityAddressChainMismatch,
24
- }, "dstAuthorityAddress"),
25
- ];
26
- }
27
- // CRITICAL: the set of unique addresses in intent.<field>[] must exactly match
28
- // the set of unique addresses in request.trades[].<pick>, with destinationChainIds
29
- // containing exactly the chainIds where that address was used.
30
- function validateDestinationList(details, group, pick, basePath, codes, fieldLabel) {
31
- const violations = [];
32
- const list = details ?? [];
33
- const expected = collectExpectedByAddress(group, pick);
34
- for (let i = 0; i < list.length; i++) {
35
- violations.push(...validateAddressChainConsistency(list[i], `${basePath}[${i}]`, codes.addressChainMismatch, fieldLabel));
36
- }
37
- const firstOccurrence = buildFirstOccurrence(list, basePath, codes.duplicate, fieldLabel, violations);
38
- violations.push(...reportMissingAddresses(expected, firstOccurrence, basePath, codes.missing, fieldLabel));
39
- violations.push(...validateEntries(list, firstOccurrence, expected, basePath, codes, fieldLabel));
40
- return violations;
41
- }
42
- // Builds address → chainIds map from request trades, mirroring the API's
43
- // grouping by address.toHexAddress(). Each address gets the full set of
44
- // chainIds where it was used.
45
- function collectExpectedByAddress(group, pick) {
46
- const byAddress = new Map();
47
- for (const trade of group.trades) {
48
- const address = pick(trade);
49
- if (address === undefined)
50
- continue;
51
- const dstRealChainId = resolveChainId(trade.dstChainId);
52
- // Safe skip: unknown dstChainId is reported by validateTrades
53
- if (dstRealChainId === undefined)
54
- continue;
55
- const normalized = normalizeAddress(dstRealChainId, address);
56
- const existing = byAddress.get(normalized) ?? new Set();
57
- existing.add(trade.dstChainId);
58
- byAddress.set(normalized, existing);
59
- }
60
- return byAddress;
61
- }
62
- // First pass over the response list: detects duplicates and records the
63
- // first occurrence index per normalized address. Duplicate violations are
64
- // appended directly to the caller's violations array.
65
- function buildFirstOccurrence(list, basePath, duplicateCode, fieldLabel, violations) {
66
- const firstOccurrence = new Map();
67
- for (let i = 0; i < list.length; i++) {
68
- const normalized = normalizeAddressByValue(list[i].address);
69
- const earlier = firstOccurrence.get(normalized);
70
- if (earlier === undefined) {
71
- firstOccurrence.set(normalized, i);
72
- continue;
73
- }
74
- violations.push({
75
- code: duplicateCode,
76
- message: `intent.${fieldLabel}[${i}] duplicates the entry at`
77
- + ` index ${earlier} — each address must appear once`,
78
- path: `${basePath}[${i}].address`,
79
- actual: normalized,
80
- });
81
- }
82
- return firstOccurrence;
83
- }
84
- function reportMissingAddresses(expected, firstOccurrence, basePath, missingCode, fieldLabel) {
85
- const violations = [];
86
- for (const address of expected.keys()) {
87
- if (!firstOccurrence.has(address)) {
88
- violations.push({
89
- code: missingCode,
90
- message: `an expected intent.${fieldLabel}[].address is missing`
91
- + ` from the response`,
92
- path: basePath,
93
- expected: address,
94
- });
95
- }
96
- }
97
- return violations;
98
- }
99
- function validateEntries(list, firstOccurrence, expected, basePath, codes, fieldLabel) {
100
- const violations = [];
101
- // Validate each unique entry (duplicates are already reported above)
102
- for (const [address, i] of firstOccurrence) {
103
- const entry = list[i];
104
- const expectedChainIds = expected.get(address);
105
- if (expectedChainIds === undefined) {
106
- violations.push({
107
- code: codes.addressInvalid,
108
- message: `intent.${fieldLabel}[].address is not present in`
109
- + ` any request trade for this group`,
110
- path: `${basePath}[${i}].address`,
111
- expected: Array.from(expected.keys()),
112
- actual: address,
113
- });
114
- continue;
115
- }
116
- violations.push(...validateEntryChainIds(entry, expectedChainIds, `${basePath}[${i}].destinationChainIds`, codes.chainIdsMismatch, fieldLabel));
117
- }
118
- return violations;
119
- }
120
- // CRITICAL: destinationChainIds must be exactly the set of chainIds where
121
- // this address was used in the request. The protocol reserves SpecialChainId.Any
122
- // but the API does not emit it today, so we reject it for now — support will
123
- // be added when the API starts producing it.
124
- function validateEntryChainIds(entry, expectedChainIds, path, code, fieldLabel) {
125
- if (entry.destinationChainIds === SpecialChainId.Any) {
126
- return [{
127
- code,
128
- message: `intent.${fieldLabel}[].destinationChainIds must be a concrete`
129
- + ` list of chainIds. SpecialChainId.Any is reserved by the`
130
- + ` protocol but not yet emitted by the API.`,
131
- path,
132
- expected: sortChainIds(expectedChainIds),
133
- actual: entry.destinationChainIds,
134
- }];
135
- }
136
- const actualChainIds = new Set(entry.destinationChainIds);
137
- if (setsEqual(actualChainIds, expectedChainIds))
138
- return [];
139
- return [{
140
- code,
141
- message: `intent.${fieldLabel}[].destinationChainIds must contain exactly`
142
- + ` the chainIds where this address was used in request`
143
- + ` (no missing, no extras)`,
144
- path,
145
- expected: sortChainIds(expectedChainIds),
146
- actual: entry.destinationChainIds,
147
- }];
148
- }
149
- function sortChainIds(set) {
150
- return Array.from(set).sort((a, b) => a - b);
151
- }
152
- // CRITICAL: all chainIds in destinationChainIds (unless set to "any") must
153
- // share the same address format (engine), and entry.address must be in that format.
154
- // MITM could otherwise return, e.g., destinationChainIds=[Ethereum, Solana]
155
- // with an EVM address, which is impossible because one string can't be valid on both.
156
- function validateAddressChainConsistency(entry, basePath, code, fieldLabel) {
157
- if (entry.destinationChainIds === SpecialChainId.Any)
158
- return [];
159
- const engines = new Set();
160
- for (const chainId of entry.destinationChainIds) {
161
- const realChainId = resolveChainId(chainId);
162
- // Safe skip: unknown dstChainId is reported by validateTrades
163
- if (realChainId === undefined)
164
- continue;
165
- engines.add(getChainEngine(realChainId));
166
- }
167
- if (engines.size === 0)
168
- return [];
169
- if (engines.size > 1) {
170
- return [{
171
- code,
172
- message: `intent.${fieldLabel}[].destinationChainIds spans multiple`
173
- + ` chain engines — a single address cannot be valid across`
174
- + ` different engines (EVM / Solana / Tron / etc.)`,
175
- path: `${basePath}.destinationChainIds`,
176
- actual: entry.destinationChainIds,
177
- }];
178
- }
179
- const expectedEngine = engines.values().next().value;
180
- const actualEngine = detectChainEngine(entry.address);
181
- if (expectedEngine !== actualEngine) {
182
- return [{
183
- code,
184
- message: `intent.${fieldLabel}[].address format (${ChainEngine[actualEngine]})`
185
- + ` does not match the chain engine of destinationChainIds`
186
- + ` (${ChainEngine[expectedEngine]})`,
187
- path: `${basePath}.address`,
188
- expected: { format: ChainEngine[expectedEngine] },
189
- actual: { address: entry.address, format: ChainEngine[actualEngine] },
190
- }];
191
- }
192
- return [];
193
- }
194
- //# sourceMappingURL=intent-destinations.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"intent-destinations.js","sourceRoot":"","sources":["../../../src/validations/intent-destinations.ts"],"names":[],"mappings":"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"}