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