@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,101 @@
1
+ import { ViolationCode, } from "../types/index.js";
2
+ import { resolveChainId } from "../whitelists/subscription-to-chain-id.js";
3
+ import { addressEquals } from "../helpers/address.js";
4
+ // Cross-validates relatedIntentId on response trades:
5
+ // - each trade must reference a valid intent
6
+ // - trades sharing a relatedIntentId must have consistent srcChainId and srcChainAuthorityAddress
7
+ // - the referenced intent's intentChainId must match the trades' srcChainId
8
+ export function validateRelatedIntentIds(response) {
9
+ const violations = [];
10
+ const intentIds = new Set(response.intents.map(intent => intent.intent.intentId));
11
+ const tradesByIntentId = new Map();
12
+ for (let i = 0; i < response.trades.length; i++) {
13
+ const relatedId = response.trades[i].relatedIntentId;
14
+ // CRITICAL: relatedIntentId must be present in execution mode
15
+ if (!relatedId) {
16
+ violations.push({
17
+ code: ViolationCode.TradeRelatedIntentIdNotFound,
18
+ message: "relatedIntentId is missing in execution mode",
19
+ path: `response.trades[${i}].relatedIntentId`,
20
+ actual: relatedId,
21
+ });
22
+ continue;
23
+ }
24
+ // CRITICAL: relatedIntentId must exist in response.intents
25
+ if (!intentIds.has(relatedId)) {
26
+ violations.push({
27
+ code: ViolationCode.TradeRelatedIntentIdNotFound,
28
+ message: `relatedIntentId "${relatedId}" not found in response.intents`,
29
+ path: `response.trades[${i}].relatedIntentId`,
30
+ actual: relatedId,
31
+ });
32
+ continue;
33
+ }
34
+ const group = tradesByIntentId.get(relatedId) ?? [];
35
+ group.push(i);
36
+ tradesByIntentId.set(relatedId, group);
37
+ }
38
+ for (const [intentId, tradeIndices] of tradesByIntentId) {
39
+ violations.push(...validateIntentTradeConsistency(intentId, tradeIndices, response));
40
+ }
41
+ return violations;
42
+ }
43
+ function validateIntentTradeConsistency(intentId, tradeIndices, response) {
44
+ // Defensive guard: unreachable because tradesByIntentId only contains non-empty arrays
45
+ if (tradeIndices.length === 0)
46
+ return [];
47
+ const violations = [];
48
+ const firstTrade = response.trades[tradeIndices[0]];
49
+ const referenceChainId = firstTrade.srcChainTokenIn.chainId;
50
+ const referenceAuthority = firstTrade.srcChainAuthorityAddress;
51
+ const realChainId = resolveChainId(referenceChainId);
52
+ // Safe skip: unknown subscriptionId already reported as UnknownSubscriptionId by groupTrades
53
+ const isResolvedRealChainId = realChainId !== undefined;
54
+ // CRITICAL: all trades sharing relatedIntentId must have same srcChainId and authority
55
+ for (let i = 1; i < tradeIndices.length; i++) {
56
+ const idx = tradeIndices[i];
57
+ const trade = response.trades[idx];
58
+ if (trade.srcChainTokenIn.chainId !== referenceChainId) {
59
+ violations.push({
60
+ code: ViolationCode.TradeRelatedIntentIdChainIdInconsistent,
61
+ message: `trades sharing relatedIntentId="${intentId}" have different srcChainId`,
62
+ path: `response.trades[${idx}].srcChainTokenIn.chainId`,
63
+ expected: referenceChainId,
64
+ actual: trade.srcChainTokenIn.chainId,
65
+ });
66
+ }
67
+ if (isResolvedRealChainId
68
+ && !addressEquals(realChainId, referenceAuthority ?? "", trade.srcChainAuthorityAddress ?? "")) {
69
+ violations.push({
70
+ code: ViolationCode.TradeRelatedIntentIdAuthorityInconsistent,
71
+ message: `trades sharing relatedIntentId="${intentId}"`
72
+ + ` have different srcChainAuthorityAddress`,
73
+ path: `response.trades[${idx}].srcChainAuthorityAddress`,
74
+ expected: referenceAuthority,
75
+ actual: trade.srcChainAuthorityAddress,
76
+ });
77
+ }
78
+ }
79
+ // CRITICAL: intent.intentChainId must match srcChainId of referring trades
80
+ violations.push(...validateIntentChainIdMatch(intentId, referenceChainId, response));
81
+ return violations;
82
+ }
83
+ function validateIntentChainIdMatch(intentId, expectedChainId, response) {
84
+ const intentIndex = response.intents.findIndex(intent => intent.intent.intentId === intentId);
85
+ // Defensive guard: unreachable because only validated intentIds reach this function
86
+ if (intentIndex === -1)
87
+ return [];
88
+ const intent = response.intents[intentIndex];
89
+ if (intent.intent.intentChainId !== expectedChainId) {
90
+ return [{
91
+ code: ViolationCode.TradeIntentChainIdMismatch,
92
+ message: `intent.intentChainId does not match srcChainId`
93
+ + ` of trades referencing intentId="${intentId}"`,
94
+ path: `response.intents[${intentIndex}].intent.intentChainId`,
95
+ expected: expectedChainId,
96
+ actual: intent.intent.intentChainId,
97
+ }];
98
+ }
99
+ return [];
100
+ }
101
+ //# sourceMappingURL=trade-intent-consistency.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trade-intent-consistency.js","sourceRoot":"","sources":["../../../src/validations/trade-intent-consistency.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,514 @@
1
+ import { ViolationCode, SpecialAmount, } from "../types/index.js";
2
+ import { resolveChainId } from "../whitelists/subscription-to-chain-id.js";
3
+ import { addressEquals } from "../helpers/address.js";
4
+ import { validateRelatedIntentIds } from "./trade-intent-consistency.js";
5
+ export function validateTrades(request, response, quoteMode) {
6
+ // CRITICAL: trade counts must match 1:1
7
+ if (request.trades.length !== response.trades.length) {
8
+ return [{
9
+ code: ViolationCode.TradeCountMismatch,
10
+ message: "response.trades.length does not match request.trades.length",
11
+ path: "response.trades",
12
+ expected: request.trades.length,
13
+ actual: response.trades.length,
14
+ }];
15
+ }
16
+ const violations = [];
17
+ for (let i = 0; i < request.trades.length; i++) {
18
+ violations.push(...validateSingleTrade(request.trades[i], response.trades[i], i, quoteMode));
19
+ }
20
+ // Cross-trade relatedIntentId consistency (execution mode only)
21
+ if (!quoteMode) {
22
+ violations.push(...validateRelatedIntentIds(response));
23
+ }
24
+ return violations;
25
+ }
26
+ function validateSingleTrade(reqTrade, resTrade, tradeIndex, quoteMode) {
27
+ const violations = [];
28
+ const basePath = `response.trades[${tradeIndex}]`;
29
+ const srcRealChainId = resolveChainId(reqTrade.srcChainId);
30
+ const dstRealChainId = resolveChainId(reqTrade.dstChainId);
31
+ // CRITICAL: dstChainId must be a known subscriptionId
32
+ if (dstRealChainId === undefined) {
33
+ violations.push({
34
+ code: ViolationCode.UnknownSubscriptionId,
35
+ message: `dstChainId=${reqTrade.dstChainId} is not a known subscriptionId`,
36
+ path: `request.trades[${tradeIndex}].dstChainId`,
37
+ actual: reqTrade.dstChainId,
38
+ });
39
+ }
40
+ // Chain-agnostic validations (don't need resolved realChainId)
41
+ violations.push(...validateSrcChainTokenIn(reqTrade, resTrade, basePath), ...validateSrcChainTokenOut(reqTrade, resTrade, basePath), ...validateDstChainTokenOut(reqTrade, resTrade, basePath), ...validatePrependedOperatingExpenseCost(reqTrade, resTrade, basePath), ...validatePartnerFeeBps(reqTrade, resTrade, basePath));
42
+ // Safe skip: undefined srcRealChainId is already reported as UnknownSubscriptionId by groupTrades
43
+ if (srcRealChainId !== undefined) {
44
+ violations.push(...validateSrcTokenInAddress(reqTrade, resTrade, basePath, srcRealChainId));
45
+ if (!quoteMode) {
46
+ violations.push(...validateAddressEcho(reqTrade.srcChainAuthorityAddress, resTrade.srcChainAuthorityAddress, ViolationCode.TradeSrcAuthorityAddressMismatch, `${basePath}.srcChainAuthorityAddress`, "srcChainAuthorityAddress", srcRealChainId));
47
+ }
48
+ }
49
+ // Safe skip: undefined dstRealChainId is already reported as UnknownSubscriptionId above
50
+ if (dstRealChainId !== undefined) {
51
+ violations.push(...validateDstTokenOutAddress(reqTrade, resTrade, basePath, dstRealChainId));
52
+ if (!quoteMode) {
53
+ violations.push(...validateDstExecutionModeFields(reqTrade, resTrade, basePath, dstRealChainId));
54
+ }
55
+ }
56
+ return violations;
57
+ }
58
+ // =============================================
59
+ // srcChainTokenIn
60
+ // =============================================
61
+ function validateSrcChainTokenIn(reqTrade, resTrade, basePath) {
62
+ const violations = [];
63
+ const src = resTrade.srcChainTokenIn;
64
+ const path = `${basePath}.srcChainTokenIn`;
65
+ // CRITICAL: chainId must match request srcChainId
66
+ if (src.chainId !== reqTrade.srcChainId) {
67
+ violations.push({
68
+ code: ViolationCode.TradeSrcTokenInChainIdMismatch,
69
+ message: "srcChainTokenIn.chainId does not match request srcChainId",
70
+ path: `${path}.chainId`,
71
+ expected: reqTrade.srcChainId,
72
+ actual: src.chainId,
73
+ });
74
+ }
75
+ // CRITICAL: amount must match when prependOperatingExpenses is false and amount is numeric
76
+ violations.push(...validateSrcTokenInAmount(reqTrade, src, path));
77
+ // CRITICAL + MEDIUM: operating expense checks
78
+ violations.push(...validateOperatingExpense(resTrade, src, basePath));
79
+ // CRITICAL: mutatedWithOperatingExpense must reflect request conditions
80
+ violations.push(...validateMutatedWithOperatingExpense(reqTrade, src, path));
81
+ // CRITICAL: USD values must be non-negative
82
+ violations.push(...checkNonNegativeUsd(src.approximateUsdValue, `${path}.approximateUsdValue`), ...checkNonNegativeUsd(src.originApproximateUsdValue, `${path}.originApproximateUsdValue`));
83
+ return violations;
84
+ }
85
+ function validateSrcTokenInAddress(reqTrade, resTrade, basePath, srcRealChainId) {
86
+ // CRITICAL: address must match request srcChainTokenIn directly.
87
+ // For native tokens the API returns the original address (0x000...0), not the wrapped version.
88
+ // Wrapping is reflected via the isWrapped field, not the address.
89
+ if (!addressEquals(srcRealChainId, reqTrade.srcChainTokenIn, resTrade.srcChainTokenIn.address)) {
90
+ return [{
91
+ code: ViolationCode.TradeSrcTokenInAddressMismatch,
92
+ message: "srcChainTokenIn.address does not match request srcChainTokenIn",
93
+ path: `${basePath}.srcChainTokenIn.address`,
94
+ expected: reqTrade.srcChainTokenIn,
95
+ actual: resTrade.srcChainTokenIn.address,
96
+ }];
97
+ }
98
+ return [];
99
+ }
100
+ function validateSrcTokenInAmount(reqTrade, src, path) {
101
+ // Skip when prependOperatingExpenses is true — amount includes expenses
102
+ if (reqTrade.prependOperatingExpenses ?? false)
103
+ return [];
104
+ // Skip for non-numeric amounts (auto, max)
105
+ const amount = reqTrade.srcChainTokenInAmount;
106
+ if (amount === SpecialAmount.Auto || amount === SpecialAmount.Max)
107
+ return [];
108
+ // CRITICAL: srcChainTokenIn.amount must equal request srcChainTokenInAmount
109
+ try {
110
+ const expected = BigInt(amount);
111
+ const actual = BigInt(src.amount);
112
+ if (actual !== expected) {
113
+ return [{
114
+ code: ViolationCode.TradeSrcTokenInAmountMismatch,
115
+ message: "srcChainTokenIn.amount does not match request srcChainTokenInAmount",
116
+ path: `${path}.amount`,
117
+ expected: amount,
118
+ actual: src.amount,
119
+ }];
120
+ }
121
+ }
122
+ catch (e) {
123
+ return [{
124
+ code: ViolationCode.TradeSrcTokenInAmountMismatch,
125
+ message: "failed to parse amounts for comparison",
126
+ path: `${path}.amount`,
127
+ expected: amount,
128
+ actual: src.amount,
129
+ details: e,
130
+ }];
131
+ }
132
+ return [];
133
+ }
134
+ function validateOperatingExpense(resTrade, src, basePath) {
135
+ const expensePath = `${basePath}.srcChainTokenIn.approximateOperatingExpense`;
136
+ let parsedExpense;
137
+ try {
138
+ parsedExpense = BigInt(src.approximateOperatingExpense);
139
+ }
140
+ catch (e) {
141
+ return [{
142
+ code: ViolationCode.TradeOperatingExpenseInvalid,
143
+ message: "approximateOperatingExpense is not a valid number",
144
+ path: expensePath,
145
+ actual: src.approximateOperatingExpense,
146
+ details: e,
147
+ }];
148
+ }
149
+ const violations = [];
150
+ // CRITICAL: must be non-negative
151
+ if (parsedExpense < 0n) {
152
+ violations.push({
153
+ code: ViolationCode.TradeOperatingExpenseNegative,
154
+ message: "approximateOperatingExpense must be non-negative",
155
+ path: expensePath,
156
+ actual: src.approximateOperatingExpense,
157
+ });
158
+ }
159
+ // MEDIUM: expected > 0 under certain conditions
160
+ violations.push(...checkOperatingExpensePositive(resTrade, src, parsedExpense, basePath));
161
+ return violations;
162
+ }
163
+ function checkOperatingExpensePositive(resTrade, src, parsedExpense, basePath) {
164
+ if (parsedExpense > 0n)
165
+ return [];
166
+ const expensePath = `${basePath}.srcChainTokenIn.approximateOperatingExpense`;
167
+ const violations = [];
168
+ // MEDIUM: if mutatedWithOperatingExpense is true, expense must be > 0
169
+ if (src.mutatedWithOperatingExpense) {
170
+ violations.push({
171
+ code: ViolationCode.TradeOperatingExpenseExpectedPositive,
172
+ message: "approximateOperatingExpense should be > 0"
173
+ + " when mutatedWithOperatingExpense is true",
174
+ path: expensePath,
175
+ actual: src.approximateOperatingExpense,
176
+ });
177
+ }
178
+ // MEDIUM: if prependedOperatingExpenseCost is non-zero, expense must be > 0
179
+ try {
180
+ if (BigInt(resTrade.prependedOperatingExpenseCost) !== 0n) {
181
+ violations.push({
182
+ code: ViolationCode.TradeOperatingExpenseExpectedPositive,
183
+ message: "approximateOperatingExpense should be > 0"
184
+ + " when prependedOperatingExpenseCost is non-zero",
185
+ path: expensePath,
186
+ actual: src.approximateOperatingExpense,
187
+ });
188
+ }
189
+ }
190
+ catch (e) {
191
+ violations.push({
192
+ code: ViolationCode.TradePrependedCostInvalid,
193
+ message: "prependedOperatingExpenseCost is not a valid number",
194
+ path: `${basePath}.prependedOperatingExpenseCost`,
195
+ actual: resTrade.prependedOperatingExpenseCost,
196
+ details: e,
197
+ });
198
+ }
199
+ return violations;
200
+ }
201
+ function validateMutatedWithOperatingExpense(reqTrade, src, path) {
202
+ const prependExpenses = reqTrade.prependOperatingExpenses ?? false;
203
+ const isAuto = reqTrade.srcChainTokenInAmount === SpecialAmount.Auto;
204
+ const expectedMutated = prependExpenses || isAuto;
205
+ // CRITICAL: must reflect request conditions
206
+ if (src.mutatedWithOperatingExpense !== expectedMutated) {
207
+ return [{
208
+ code: ViolationCode.TradeMutatedWithOperatingExpenseMismatch,
209
+ message: "srcChainTokenIn.mutatedWithOperatingExpense does not match expected value",
210
+ path: `${path}.mutatedWithOperatingExpense`,
211
+ expected: expectedMutated,
212
+ actual: src.mutatedWithOperatingExpense,
213
+ }];
214
+ }
215
+ return [];
216
+ }
217
+ // =============================================
218
+ // srcChainTokenOut
219
+ // =============================================
220
+ function validateSrcChainTokenOut(reqTrade, resTrade, basePath) {
221
+ // srcChainTokenOut is optional (intermediate giveToken)
222
+ if (!resTrade.srcChainTokenOut)
223
+ return [];
224
+ // CRITICAL: chainId must match request srcChainId
225
+ if (resTrade.srcChainTokenOut.chainId !== reqTrade.srcChainId) {
226
+ return [{
227
+ code: ViolationCode.TradeSrcTokenOutChainIdMismatch,
228
+ message: "srcChainTokenOut.chainId does not match request srcChainId",
229
+ path: `${basePath}.srcChainTokenOut.chainId`,
230
+ expected: reqTrade.srcChainId,
231
+ actual: resTrade.srcChainTokenOut.chainId,
232
+ }];
233
+ }
234
+ // CRITICAL: amount must be non-negative
235
+ try {
236
+ if (BigInt(resTrade.srcChainTokenOut.amount) < 0n) {
237
+ return [{
238
+ code: ViolationCode.TradeSrcTokenOutAmountNegative,
239
+ message: "srcChainTokenOut.amount must be non-negative",
240
+ path: `${basePath}.srcChainTokenOut.amount`,
241
+ actual: resTrade.srcChainTokenOut.amount,
242
+ }];
243
+ }
244
+ }
245
+ catch (e) {
246
+ return [{
247
+ code: ViolationCode.TradeSrcTokenOutAmountNegative,
248
+ message: "srcChainTokenOut.amount is not a valid number",
249
+ path: `${basePath}.srcChainTokenOut.amount`,
250
+ actual: resTrade.srcChainTokenOut.amount,
251
+ details: e,
252
+ }];
253
+ }
254
+ return [];
255
+ }
256
+ // =============================================
257
+ // dstChainTokenOut
258
+ // =============================================
259
+ function validateDstChainTokenOut(reqTrade, resTrade, basePath) {
260
+ const violations = [];
261
+ const dst = resTrade.dstChainTokenOut;
262
+ const path = `${basePath}.dstChainTokenOut`;
263
+ // CRITICAL: chainId must match request dstChainId
264
+ if (dst.chainId !== reqTrade.dstChainId) {
265
+ violations.push({
266
+ code: ViolationCode.TradeDstTokenOutChainIdMismatch,
267
+ message: "dstChainTokenOut.chainId does not match request dstChainId",
268
+ path: `${path}.chainId`,
269
+ expected: reqTrade.dstChainId,
270
+ actual: dst.chainId,
271
+ });
272
+ }
273
+ // CRITICAL: amount and withoutPartnerFee checks
274
+ violations.push(...validateDstTokenOutAmount(reqTrade, dst, path), ...validateWithoutPartnerFeeAmount(reqTrade, dst, path));
275
+ // CRITICAL: USD values must be non-negative
276
+ violations.push(...checkNonNegativeUsd(dst.approximateUsdValue, `${path}.approximateUsdValue`), ...checkNonNegativeUsd(dst.recommendedApproximateUsdValue, `${path}.recommendedApproximateUsdValue`));
277
+ // CRITICAL: maxTheoreticalApproximateUsdValue must be present — API always sets it
278
+ if (dst.maxTheoreticalApproximateUsdValue === undefined) {
279
+ violations.push({
280
+ code: ViolationCode.TradeUsdValueNegative,
281
+ message: "maxTheoreticalApproximateUsdValue is missing",
282
+ path: `${path}.maxTheoreticalApproximateUsdValue`,
283
+ actual: undefined,
284
+ });
285
+ }
286
+ else {
287
+ // CRITICAL: USD values must be non-negative
288
+ violations.push(...checkNonNegativeUsd(dst.maxTheoreticalApproximateUsdValue, `${path}.maxTheoreticalApproximateUsdValue`));
289
+ }
290
+ return violations;
291
+ }
292
+ function validateDstTokenOutAddress(reqTrade, resTrade, basePath, dstRealChainId) {
293
+ const dst = resTrade.dstChainTokenOut;
294
+ // CRITICAL: address must match request dstChainTokenOut
295
+ if (!addressEquals(dstRealChainId, reqTrade.dstChainTokenOut, dst.address)) {
296
+ return [{
297
+ code: ViolationCode.TradeDstTokenOutAddressMismatch,
298
+ message: "dstChainTokenOut.address does not match request dstChainTokenOut",
299
+ path: `${basePath}.dstChainTokenOut.address`,
300
+ expected: reqTrade.dstChainTokenOut,
301
+ actual: dst.address,
302
+ }];
303
+ }
304
+ return [];
305
+ }
306
+ function validateDstTokenOutAmount(reqTrade, dst, path) {
307
+ if (reqTrade.dstChainTokenOutAmount === undefined)
308
+ return [];
309
+ if (reqTrade.dstChainTokenOutAmount === SpecialAmount.Auto)
310
+ return [];
311
+ // CRITICAL: amount must be >= requested dstChainTokenOutAmount
312
+ try {
313
+ const requested = BigInt(reqTrade.dstChainTokenOutAmount);
314
+ const actual = BigInt(dst.amount);
315
+ if (actual < requested) {
316
+ return [{
317
+ code: ViolationCode.TradeDstTokenOutAmountBelowRequested,
318
+ message: "dstChainTokenOut.amount is less than requested dstChainTokenOutAmount",
319
+ path: `${path}.amount`,
320
+ expected: reqTrade.dstChainTokenOutAmount,
321
+ actual: dst.amount,
322
+ }];
323
+ }
324
+ }
325
+ catch (e) {
326
+ return [{
327
+ code: ViolationCode.TradeDstTokenOutAmountBelowRequested,
328
+ message: "failed to parse amounts for comparison",
329
+ path: `${path}.amount`,
330
+ expected: reqTrade.dstChainTokenOutAmount,
331
+ actual: dst.amount,
332
+ details: e,
333
+ }];
334
+ }
335
+ return [];
336
+ }
337
+ function validateWithoutPartnerFeeAmount(reqTrade, dst, path) {
338
+ const feePath = `${path}.withoutPartnerFeeBpsAmount`;
339
+ // CRITICAL: field must be present — API always sets it
340
+ if (dst.withoutPartnerFeeBpsAmount === undefined) {
341
+ return [{
342
+ code: ViolationCode.TradeWithoutPartnerFeeAmountMismatch,
343
+ message: "withoutPartnerFeeBpsAmount is missing",
344
+ path: feePath,
345
+ actual: undefined,
346
+ }];
347
+ }
348
+ let withoutFee;
349
+ try {
350
+ withoutFee = BigInt(dst.withoutPartnerFeeBpsAmount);
351
+ }
352
+ catch (e) {
353
+ return [{
354
+ code: ViolationCode.TradeWithoutPartnerFeeAmountMismatch,
355
+ message: "withoutPartnerFeeBpsAmount is not a valid number",
356
+ path: feePath,
357
+ actual: dst.withoutPartnerFeeBpsAmount,
358
+ details: e,
359
+ }];
360
+ }
361
+ let amount;
362
+ try {
363
+ amount = BigInt(dst.amount);
364
+ }
365
+ catch (e) {
366
+ return [{
367
+ code: ViolationCode.TradeWithoutPartnerFeeAmountMismatch,
368
+ message: "dstChainTokenOut.amount is not a valid number",
369
+ path: `${path}.amount`,
370
+ actual: dst.amount,
371
+ details: e,
372
+ }];
373
+ }
374
+ const hasPartnerFee = (reqTrade.partnerFeeBps ?? 0) > 0;
375
+ // CRITICAL: with partner fee — withoutPartnerFeeBpsAmount must be >= amount
376
+ if (hasPartnerFee && withoutFee < amount) {
377
+ return [{
378
+ code: ViolationCode.TradeWithoutPartnerFeeAmountTooLow,
379
+ message: "withoutPartnerFeeBpsAmount must be >= amount when partnerFeeBps > 0",
380
+ path: feePath,
381
+ expected: dst.amount,
382
+ actual: dst.withoutPartnerFeeBpsAmount,
383
+ }];
384
+ }
385
+ // CRITICAL: without partner fee — must equal amount
386
+ if (!hasPartnerFee && withoutFee !== amount) {
387
+ return [{
388
+ code: ViolationCode.TradeWithoutPartnerFeeAmountMismatch,
389
+ message: "withoutPartnerFeeBpsAmount must equal amount when no partner fee",
390
+ path: feePath,
391
+ expected: dst.amount,
392
+ actual: dst.withoutPartnerFeeBpsAmount,
393
+ }];
394
+ }
395
+ return [];
396
+ }
397
+ // =============================================
398
+ // Execution-mode address echo fields
399
+ // =============================================
400
+ function validateDstExecutionModeFields(reqTrade, resTrade, basePath, dstRealChainId) {
401
+ return [
402
+ // CRITICAL: dstChainTokenOutRecipient must match request
403
+ ...validateAddressEcho(reqTrade.dstChainTokenOutRecipient, resTrade.dstChainTokenOutRecipient, ViolationCode.TradeDstRecipientMismatch, `${basePath}.dstChainTokenOutRecipient`, "dstChainTokenOutRecipient", dstRealChainId),
404
+ // CRITICAL: dstChainAuthorityAddress must match request
405
+ ...validateAddressEcho(reqTrade.dstChainAuthorityAddress, resTrade.dstChainAuthorityAddress, ViolationCode.TradeDstAuthorityAddressMismatch, `${basePath}.dstChainAuthorityAddress`, "dstChainAuthorityAddress", dstRealChainId),
406
+ ];
407
+ }
408
+ function validateAddressEcho(expected, actual, code, path, fieldName, realChainId) {
409
+ if (expected === undefined) {
410
+ // CRITICAL: if request doesn't have this field, response shouldn't either
411
+ if (actual !== undefined) {
412
+ return [{
413
+ code,
414
+ message: `${fieldName} is present in response but missing in request`,
415
+ path,
416
+ expected: undefined,
417
+ actual,
418
+ }];
419
+ }
420
+ return [];
421
+ }
422
+ if (actual === undefined) {
423
+ return [{
424
+ code,
425
+ message: `${fieldName} is missing in response but present in request`,
426
+ path,
427
+ expected,
428
+ actual: undefined,
429
+ }];
430
+ }
431
+ // CRITICAL: address must match request
432
+ if (!addressEquals(realChainId, expected, actual)) {
433
+ return [{
434
+ code,
435
+ message: `${fieldName} does not match request`,
436
+ path,
437
+ expected,
438
+ actual,
439
+ }];
440
+ }
441
+ return [];
442
+ }
443
+ // =============================================
444
+ // prependedOperatingExpenseCost
445
+ // =============================================
446
+ function validatePrependedOperatingExpenseCost(reqTrade, resTrade, basePath) {
447
+ const prependExpenses = reqTrade.prependOperatingExpenses ?? false;
448
+ const isAuto = reqTrade.srcChainTokenInAmount === SpecialAmount.Auto;
449
+ // Only check: when prependOperatingExpenses is false AND not auto → must be zero
450
+ if (prependExpenses || isAuto)
451
+ return [];
452
+ const costPath = `${basePath}.prependedOperatingExpenseCost`;
453
+ // CRITICAL: prependedOperatingExpenseCost must be zero
454
+ let parsed;
455
+ try {
456
+ parsed = BigInt(resTrade.prependedOperatingExpenseCost);
457
+ }
458
+ catch (e) {
459
+ return [{
460
+ code: ViolationCode.TradePrependedCostInvalid,
461
+ message: "prependedOperatingExpenseCost is not a valid number",
462
+ path: costPath,
463
+ actual: resTrade.prependedOperatingExpenseCost,
464
+ details: e,
465
+ }];
466
+ }
467
+ if (parsed !== 0n) {
468
+ return [{
469
+ code: ViolationCode.TradePrependedCostNotZero,
470
+ message: "prependedOperatingExpenseCost must be zero when "
471
+ + "prependOperatingExpenses is false and srcChainTokenInAmount "
472
+ + "is not 'auto'",
473
+ path: costPath,
474
+ expected: "0",
475
+ actual: resTrade.prependedOperatingExpenseCost,
476
+ }];
477
+ }
478
+ return [];
479
+ }
480
+ // =============================================
481
+ // partnerFeeBps
482
+ // =============================================
483
+ function validatePartnerFeeBps(reqTrade, resTrade, basePath) {
484
+ // Only check if partnerFeeBps is specified in request.
485
+ if (reqTrade.partnerFeeBps === undefined)
486
+ return [];
487
+ // CRITICAL: partnerFeeBps must match request value
488
+ if (resTrade.partnerFeeBps !== reqTrade.partnerFeeBps) {
489
+ return [{
490
+ code: ViolationCode.TradePartnerFeeBpsMismatch,
491
+ message: "response partnerFeeBps does not match request",
492
+ path: `${basePath}.partnerFeeBps`,
493
+ expected: reqTrade.partnerFeeBps,
494
+ actual: resTrade.partnerFeeBps,
495
+ }];
496
+ }
497
+ return [];
498
+ }
499
+ // =============================================
500
+ // Helpers
501
+ // =============================================
502
+ function checkNonNegativeUsd(value, path) {
503
+ // CRITICAL: USD values must be non-negative
504
+ if (value < 0) {
505
+ return [{
506
+ code: ViolationCode.TradeUsdValueNegative,
507
+ message: "USD value must be non-negative",
508
+ path,
509
+ actual: value,
510
+ }];
511
+ }
512
+ return [];
513
+ }
514
+ //# sourceMappingURL=trades.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trades.js","sourceRoot":"","sources":["../../../src/validations/trades.ts"],"names":[],"mappings":"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"}