@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,171 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateSolanaSignActions = validateSolanaSignActions;
4
+ const viem_1 = require("viem");
5
+ const types_1 = require("../types");
6
+ const solana_intent_id_1 = require("../helpers/solana-intent-id");
7
+ // Validates Sign (Intent) actions within Solana requiredActions
8
+ function validateSolanaSignActions(actions, basePath, realChainId, quoteMode, intent, envConfig) {
9
+ const signActions = [];
10
+ for (let i = 0; i < actions.length; i++) {
11
+ if (actions[i].type === types_1.SolanaActionKind.Sign) {
12
+ signActions.push({ action: actions[i], index: i });
13
+ }
14
+ }
15
+ // In quote mode, Sign actions may be absent — skip validation
16
+ if (quoteMode)
17
+ return [];
18
+ const violations = [];
19
+ // HIGH: Exactly one Sign action must be present in execution mode
20
+ if (signActions.length === 0) {
21
+ return [{
22
+ code: types_1.ViolationCode.SolanaSignIntentMissing,
23
+ message: "Sign (Intent) action is required in execution mode",
24
+ path: `${basePath}.requiredActions`,
25
+ }];
26
+ }
27
+ if (signActions.length > 1) {
28
+ violations.push({
29
+ code: types_1.ViolationCode.SolanaSignIntentDuplicate,
30
+ message: `expected exactly 1 Sign action, found ${signActions.length}`,
31
+ path: `${basePath}.requiredActions`,
32
+ expected: 1,
33
+ actual: signActions.length,
34
+ });
35
+ }
36
+ for (const { action, index } of signActions) {
37
+ const actionPath = `${basePath}.requiredActions[${index}]`;
38
+ violations.push(...validateSignActionsList(action, actionPath), ...validateSignIntentData(action, actionPath, realChainId, intent, envConfig));
39
+ }
40
+ return violations;
41
+ }
42
+ // HIGH: actions[] must contain exactly one element — Intent
43
+ function validateSignActionsList(action, actionPath) {
44
+ if (action.actions.length !== 1
45
+ || action.actions[0] !== types_1.SolanaActionOperation.Intent) {
46
+ return [{
47
+ code: types_1.ViolationCode.SolanaSignIntentActionsInvalid,
48
+ message: "Sign action must have exactly one operation: [Intent]",
49
+ path: `${actionPath}.actions`,
50
+ expected: [types_1.SolanaActionOperation.Intent],
51
+ actual: action.actions,
52
+ }];
53
+ }
54
+ return [];
55
+ }
56
+ // CRITICAL: Verify that action.data.data contains the correct intent signature buffer
57
+ function validateSignIntentData(action, actionPath, realChainId, intent, envConfig) {
58
+ const dataHex = action.data.data;
59
+ let dataBytes;
60
+ try {
61
+ const prefixed = dataHex.startsWith("0x") ? dataHex : `0x${dataHex}`;
62
+ dataBytes = (0, viem_1.hexToBytes)(prefixed);
63
+ }
64
+ catch (error) {
65
+ return [{
66
+ code: types_1.ViolationCode.SolanaSignIntentDataInvalid,
67
+ // CRITICAL: action.data.data must be a valid hex string
68
+ message: "Sign action data.data is not a valid hex string",
69
+ path: `${actionPath}.data.data`,
70
+ details: error,
71
+ }];
72
+ }
73
+ return validateSignatureBuffer(dataBytes, actionPath, realChainId, intent, envConfig.solanaSignatureConfig, envConfig.solanaIntentProgram);
74
+ }
75
+ // CRITICAL: Validates the signature buffer structure and intentId
76
+ function validateSignatureBuffer(dataBytes, actionPath, realChainId, intent, config, intentProgram) {
77
+ // Validate buffer format: prefix + chainId(u32LE) + label + intentId(32 bytes)
78
+ if (dataBytes.length !== config.expectedBufferLength) {
79
+ return [{
80
+ code: types_1.ViolationCode.SolanaSignIntentDataInvalid,
81
+ // CRITICAL: buffer length must match expected format
82
+ message: "Sign intent buffer has unexpected length"
83
+ + ` (expected ${config.expectedBufferLength}, got ${dataBytes.length})`,
84
+ path: `${actionPath}.data.data`,
85
+ expected: config.expectedBufferLength,
86
+ actual: dataBytes.length,
87
+ }];
88
+ }
89
+ // Verify prefix bytes
90
+ let offset = 0;
91
+ if (!bytesEqual(dataBytes, offset, config.prefix)) {
92
+ return [{
93
+ code: types_1.ViolationCode.SolanaSignIntentDataInvalid,
94
+ // CRITICAL: prefix must match environment
95
+ message: "Sign intent buffer has invalid prefix",
96
+ path: `${actionPath}.data.data`,
97
+ }];
98
+ }
99
+ offset += config.prefix.length;
100
+ // Verify chainId bytes
101
+ if (!bytesEqual(dataBytes, offset, config.chainIdBytes)) {
102
+ return [{
103
+ code: types_1.ViolationCode.SolanaSignIntentDataInvalid,
104
+ // CRITICAL: chainId must match Solana real chain ID
105
+ message: "Sign intent buffer has invalid chainId",
106
+ path: `${actionPath}.data.data`,
107
+ }];
108
+ }
109
+ offset += 4;
110
+ // Verify "intents" label bytes
111
+ if (!bytesEqual(dataBytes, offset, config.label)) {
112
+ return [{
113
+ code: types_1.ViolationCode.SolanaSignIntentDataInvalid,
114
+ // CRITICAL: label must be "intents"
115
+ message: "Sign intent buffer has invalid label (expected \"intents\")",
116
+ path: `${actionPath}.data.data`,
117
+ }];
118
+ }
119
+ offset += config.label.length;
120
+ // Extract intentId from the buffer (last 32 bytes)
121
+ const bufferIntentId = dataBytes.slice(offset, offset + 32);
122
+ // Compute expected intentId from intent structure
123
+ return validateIntentId(bufferIntentId, actionPath, realChainId, intent, intentProgram);
124
+ }
125
+ // CRITICAL: Compute intentId from response intent and compare with buffer
126
+ function validateIntentId(bufferIntentId, actionPath, realChainId, intent, intentProgram) {
127
+ let computedHex;
128
+ try {
129
+ computedHex = (0, solana_intent_id_1.computeSolanaIntentId)(intent, realChainId, intentProgram);
130
+ }
131
+ catch (error) {
132
+ return [{
133
+ code: types_1.ViolationCode.SolanaSignIntentIdComputeError,
134
+ // CRITICAL: intentId computation failed
135
+ message: "failed to compute Solana intentId from intent structure",
136
+ path: `${actionPath}.data.data`,
137
+ details: error,
138
+ }];
139
+ }
140
+ // Convert buffer intentId to hex for comparison
141
+ const bufferHex = "0x" + bytesToHex(bufferIntentId);
142
+ if (bufferHex !== computedHex) {
143
+ return [{
144
+ code: types_1.ViolationCode.SolanaSignIntentIdMismatch,
145
+ // CRITICAL: intentId in sign buffer must match computed intentId
146
+ message: "Sign intent buffer contains intentId that does not match computed value",
147
+ path: `${actionPath}.data.data`,
148
+ expected: computedHex,
149
+ actual: bufferHex,
150
+ }];
151
+ }
152
+ return [];
153
+ }
154
+ // =============================================
155
+ // Helpers
156
+ // =============================================
157
+ function bytesEqual(data, offset, expected) {
158
+ for (let i = 0; i < expected.length; i++) {
159
+ if (data[offset + i] !== expected[i])
160
+ return false;
161
+ }
162
+ return true;
163
+ }
164
+ function bytesToHex(bytes) {
165
+ let hex = "";
166
+ for (let i = 0; i < bytes.length; i++) {
167
+ hex += bytes[i].toString(16).padStart(2, "0");
168
+ }
169
+ return hex;
170
+ }
171
+ //# sourceMappingURL=solana-sign.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solana-sign.js","sourceRoot":"","sources":["../../../src/validations/solana-sign.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,238 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateSolanaTransactionActions = validateSolanaTransactionActions;
4
+ exports.validateSolanaSignTransactionActions = validateSolanaSignTransactionActions;
5
+ const types_1 = require("../types");
6
+ const address_1 = require("../helpers/address");
7
+ const solana_transaction_decode_1 = require("../helpers/solana-transaction-decode");
8
+ const solana_instruction_1 = require("../helpers/solana-instruction");
9
+ const programs_1 = require("../whitelists/solana/programs");
10
+ const solana_op_budget_1 = require("./solana-op-budget");
11
+ const solana_op_wrap_1 = require("./solana-op-wrap");
12
+ const ALLOWED_TX_ACTIONS = new Set([
13
+ types_1.SolanaActionOperation.Wrap,
14
+ types_1.SolanaActionOperation.Budget,
15
+ ]);
16
+ // Validates Transaction actions (AA=false)
17
+ function validateSolanaTransactionActions(actions, basePath, realChainId, quoteMode, srcChainAuthorityAddress, request, trades, envConfig) {
18
+ const violations = [];
19
+ for (let i = 0; i < actions.length; i++) {
20
+ if (actions[i].type !== types_1.SolanaActionKind.Transaction)
21
+ continue;
22
+ const action = actions[i];
23
+ const actionPath = `${basePath}.requiredActions[${i}]`;
24
+ violations.push(...validateActionsList(action, actionPath), ...validateWrapRequiresNativeToken(action, actionPath, trades, realChainId));
25
+ const decoded = decodeTransaction(action, actionPath);
26
+ if (!decoded.ok) {
27
+ violations.push(...decoded.violations);
28
+ continue;
29
+ }
30
+ const accountKeys = getStaticAccountKeys(decoded.transaction);
31
+ const resolved = (0, solana_instruction_1.resolveInstructions)(decoded.transaction.message.compiledInstructions, accountKeys);
32
+ violations.push(...validateTransactionFeePayer(decoded.transaction, actionPath, realChainId, quoteMode, srcChainAuthorityAddress), ...validateTransactionComputeBudget(decoded.transaction, actionPath), ...validateAllowedInstructions(decoded.transaction, actionPath, envConfig.solanaTransactionAllowedPrograms, types_1.ViolationCode.SolanaTransactionForbiddenInstruction, "Transaction"), ...(0, solana_op_budget_1.validateSolanaBudgetInstructions)(action, resolved, actionPath, request, trades, realChainId, quoteMode, srcChainAuthorityAddress, envConfig), ...(0, solana_op_wrap_1.validateSolanaWrapInstructions)(action, resolved, actionPath, trades, realChainId, quoteMode, srcChainAuthorityAddress), ...validateNoUnclassifiedInstructions(resolved, actionPath, buildClassifiers(envConfig.solanaIntentProgram, solana_instruction_1.isComputeBudget)));
33
+ }
34
+ return violations;
35
+ }
36
+ // Validates SignTransaction actions (AA=true)
37
+ function validateSolanaSignTransactionActions(actions, basePath, realChainId, quoteMode, srcChainAuthorityAddress, request, trades, envConfig) {
38
+ const violations = [];
39
+ for (let i = 0; i < actions.length; i++) {
40
+ if (actions[i].type !== types_1.SolanaActionKind.SignTransaction)
41
+ continue;
42
+ const action = actions[i];
43
+ const actionPath = `${basePath}.requiredActions[${i}]`;
44
+ violations.push(...validateActionsList(action, actionPath), ...validateWrapRequiresNativeToken(action, actionPath, trades, realChainId));
45
+ const decoded = decodeTransaction(action, actionPath);
46
+ if (!decoded.ok) {
47
+ violations.push(...decoded.violations);
48
+ continue;
49
+ }
50
+ const accountKeys = getStaticAccountKeys(decoded.transaction);
51
+ const resolved = (0, solana_instruction_1.resolveInstructions)(decoded.transaction.message.compiledInstructions, accountKeys);
52
+ violations.push(...validateSignTransactionFeePayer(decoded.transaction, actionPath, realChainId, quoteMode, srcChainAuthorityAddress), ...validateAllowedInstructions(decoded.transaction, actionPath, envConfig.solanaSignTransactionAllowedPrograms, types_1.ViolationCode.SolanaSignTransactionForbiddenInstruction, "SignTransaction"), ...(0, solana_op_budget_1.validateSolanaBudgetInstructions)(action, resolved, actionPath, request, trades, realChainId, quoteMode, srcChainAuthorityAddress, envConfig), ...(0, solana_op_wrap_1.validateSolanaWrapInstructions)(action, resolved, actionPath, trades, realChainId, quoteMode, srcChainAuthorityAddress), ...validateNoUnclassifiedInstructions(resolved, actionPath, buildClassifiers(envConfig.solanaIntentProgram, solana_instruction_1.isMemo)));
53
+ }
54
+ return violations;
55
+ }
56
+ // =============================================
57
+ // Common validations for Transaction and SignTransaction
58
+ // =============================================
59
+ // HIGH: actions[] must only contain Wrap, Budget
60
+ function validateActionsList(action, actionPath) {
61
+ const invalid = action.actions.filter(a => !ALLOWED_TX_ACTIONS.has(a));
62
+ if (invalid.length === 0)
63
+ return [];
64
+ return [{
65
+ code: types_1.ViolationCode.SolanaTransactionActionsInvalid,
66
+ message: `actions[] contains disallowed operations: ${invalid.join(", ")}`,
67
+ path: `${actionPath}.actions`,
68
+ expected: [...ALLOWED_TX_ACTIONS],
69
+ actual: action.actions,
70
+ }];
71
+ }
72
+ // HIGH: If actions[] contains Wrap, at least one trade must use native SOL
73
+ function validateWrapRequiresNativeToken(action, actionPath, trades, realChainId) {
74
+ if (!action.actions.includes(types_1.SolanaActionOperation.Wrap))
75
+ return [];
76
+ const hasNativeTrade = trades.some(trade => (0, address_1.addressEquals)(realChainId, trade.srcChainTokenIn, programs_1.SPL_NATIVE_MINT));
77
+ if (hasNativeTrade)
78
+ return [];
79
+ return [{
80
+ code: types_1.ViolationCode.SolanaWrapNotForNativeToken,
81
+ message: "Wrap operation present but no trade uses native SOL as srcChainTokenIn",
82
+ path: `${actionPath}.actions`,
83
+ actual: trades.map(t => t.srcChainTokenIn),
84
+ }];
85
+ }
86
+ // CRITICAL: Decode and validate VersionedTransaction(MessageV0)
87
+ function decodeTransaction(action, actionPath) {
88
+ return (0, solana_transaction_decode_1.decodeSolanaVersionedTransaction)(action.data.data, `${actionPath}.data.data`, types_1.ViolationCode.SolanaTransactionDecodeError, types_1.ViolationCode.SolanaTransactionVersionInvalid);
89
+ }
90
+ // =============================================
91
+ // Transaction-specific (AA=false)
92
+ // =============================================
93
+ // HIGH (execution mode): feePayer must equal srcChainAuthorityAddress
94
+ function validateTransactionFeePayer(transaction, actionPath, realChainId, quoteMode, srcChainAuthorityAddress) {
95
+ // NO NEED (quote): feePayer is a placeholder
96
+ if (quoteMode || !srcChainAuthorityAddress)
97
+ return [];
98
+ const feePayer = getFeePayer(transaction);
99
+ if (!feePayer)
100
+ return [];
101
+ if (!(0, address_1.addressEquals)(realChainId, feePayer, srcChainAuthorityAddress)) {
102
+ return [{
103
+ code: types_1.ViolationCode.SolanaTransactionFeePayerMismatch,
104
+ message: "Transaction feePayer must equal request.trades[].srcChainAuthorityAddress",
105
+ path: `${actionPath}.data.data`,
106
+ expected: srcChainAuthorityAddress,
107
+ actual: feePayer,
108
+ }];
109
+ }
110
+ return [];
111
+ }
112
+ // HIGH: compiledInstructions[] must contain at least 2 ComputeBudget instructions at the beginning
113
+ function validateTransactionComputeBudget(transaction, actionPath) {
114
+ const instructions = transaction.message.compiledInstructions;
115
+ const accountKeys = getStaticAccountKeys(transaction);
116
+ let computeBudgetCount = 0;
117
+ for (let i = 0; i < instructions.length; i++) {
118
+ const programId = accountKeys[instructions[i].programIdIndex];
119
+ if (!programId)
120
+ break;
121
+ if (programId === programs_1.COMPUTE_BUDGET_PROGRAM) {
122
+ computeBudgetCount++;
123
+ }
124
+ else {
125
+ break; // ComputeBudget instructions must be at the beginning
126
+ }
127
+ }
128
+ if (computeBudgetCount < 2) {
129
+ return [{
130
+ code: types_1.ViolationCode.SolanaTransactionComputeBudgetMissing,
131
+ message: "Transaction must have at least 2 ComputeBudget instructions at the beginning",
132
+ path: `${actionPath}.data.data`,
133
+ expected: 2,
134
+ actual: computeBudgetCount,
135
+ }];
136
+ }
137
+ return [];
138
+ }
139
+ // CRITICAL: no instructions from disallowed programs
140
+ function validateAllowedInstructions(transaction, actionPath, allowedPrograms, violationCode, label) {
141
+ const accountKeys = getStaticAccountKeys(transaction);
142
+ const violations = [];
143
+ for (const ix of transaction.message.compiledInstructions) {
144
+ const programId = resolveProgramId(accountKeys, ix.programIdIndex);
145
+ if (programId === undefined) {
146
+ // CRITICAL: program ID resolved via Address Lookup Table — forbidden
147
+ violations.push({
148
+ code: violationCode,
149
+ message: "instruction references program via Address Lookup Table"
150
+ + ` (index ${ix.programIdIndex}), forbidden in ${label}`,
151
+ path: `${actionPath}.data.data`,
152
+ actual: ix.programIdIndex,
153
+ });
154
+ continue;
155
+ }
156
+ if (!allowedPrograms.has(programId)) {
157
+ violations.push({
158
+ code: violationCode,
159
+ // CRITICAL: forbidden instruction program
160
+ message: `${label} contains instruction from disallowed program: ${programId}`,
161
+ path: `${actionPath}.data.data`,
162
+ actual: programId,
163
+ });
164
+ }
165
+ }
166
+ return violations;
167
+ }
168
+ // =============================================
169
+ // SignTransaction-specific (AA=true)
170
+ // =============================================
171
+ // CRITICAL (execution mode): feePayer must NOT be the user
172
+ function validateSignTransactionFeePayer(transaction, actionPath, realChainId, quoteMode, srcChainAuthorityAddress) {
173
+ // NO NEED (quote): feePayer is a placeholder
174
+ if (quoteMode || !srcChainAuthorityAddress)
175
+ return [];
176
+ const feePayer = getFeePayer(transaction);
177
+ if (!feePayer)
178
+ return [];
179
+ if ((0, address_1.addressEquals)(realChainId, feePayer, srcChainAuthorityAddress)) {
180
+ return [{
181
+ code: types_1.ViolationCode.SolanaSignTransactionFeePayerIsUser,
182
+ // CRITICAL: feePayer must NOT be the user
183
+ message: "SignTransaction feePayer must NOT be the user"
184
+ + " (request.trades[].srcChainAuthorityAddress)",
185
+ path: `${actionPath}.data.data`,
186
+ actual: feePayer,
187
+ }];
188
+ }
189
+ return [];
190
+ }
191
+ // Builds classifiers for validateNoUnclassifiedInstructions.
192
+ // `leadClassifier` is isComputeBudget for Transaction, isMemo for SignTransaction.
193
+ function buildClassifiers(intentProgram, leadClassifier) {
194
+ return [
195
+ leadClassifier,
196
+ solana_instruction_1.isClassicApprove,
197
+ (ix) => (0, solana_instruction_1.isCustomApprove)(ix, intentProgram),
198
+ solana_instruction_1.isSystemTransfer,
199
+ solana_instruction_1.isSyncNative,
200
+ solana_instruction_1.isCreateAtaIdempotent,
201
+ ];
202
+ }
203
+ // CRITICAL: every instruction from an allowed program must be recognized by at least one classifier.
204
+ function validateNoUnclassifiedInstructions(resolved, actionPath, classifiers) {
205
+ const violations = [];
206
+ for (let i = 0; i < resolved.length; i++) {
207
+ const ix = resolved[i];
208
+ const classified = classifiers.some(classify => classify(ix));
209
+ if (!classified) {
210
+ violations.push({
211
+ code: types_1.ViolationCode.SolanaUnclassifiedInstruction,
212
+ message: `instruction [${i}] from program ${ix.programId}`
213
+ + " was not recognized by any validator",
214
+ path: `${actionPath}.data.data`,
215
+ actual: ix.programId,
216
+ });
217
+ }
218
+ }
219
+ return violations;
220
+ }
221
+ // =============================================
222
+ // Helpers
223
+ // =============================================
224
+ function getFeePayer(transaction) {
225
+ const keys = transaction.message.staticAccountKeys;
226
+ if (keys.length === 0)
227
+ return undefined;
228
+ return keys[0].toBase58();
229
+ }
230
+ function getStaticAccountKeys(transaction) {
231
+ return transaction.message.staticAccountKeys.map((key) => key.toBase58());
232
+ }
233
+ // Returns the program ID string if it is in staticAccountKeys,
234
+ // or undefined if the index points beyond (Address Lookup Table).
235
+ function resolveProgramId(staticAccountKeys, programIdIndex) {
236
+ return staticAccountKeys[programIdIndex];
237
+ }
238
+ //# sourceMappingURL=solana-transaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solana-transaction.js","sourceRoot":"","sources":["../../../src/validations/solana-transaction.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,165 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.groupTrades = groupTrades;
4
+ exports.matchIntentsToGroups = matchIntentsToGroups;
5
+ const types_1 = require("../types");
6
+ const subscription_to_chain_id_1 = require("../whitelists/subscription-to-chain-id");
7
+ const address_1 = require("../helpers/address");
8
+ // Groups request trades to match them later with response intents.
9
+ //
10
+ // Quote mode: groups by srcChainId only (addresses are placeholders).
11
+ //
12
+ // Execution mode: groups by (srcChainId, srcChainAuthorityAddress).
13
+ //
14
+ // NOTE: the API may further split a group into multiple intents based on
15
+ // fields like intent.executionMetadata, intent.dlnMetadata,
16
+ // intent.externalCallHash, etc. that are not present in the request, so one
17
+ // group can correspond to one or more response intents.
18
+ function groupTrades(trades, quoteMode) {
19
+ const map = new Map();
20
+ const violations = [];
21
+ // Track already-reported unknown subscriptionIds to avoid duplicate violations
22
+ const reportedUnknown = new Set();
23
+ for (let i = 0; i < trades.length; i++) {
24
+ const trade = trades[i];
25
+ const realChainId = (0, subscription_to_chain_id_1.resolveChainId)(trade.srcChainId);
26
+ if (realChainId === undefined) {
27
+ if (!reportedUnknown.has(trade.srcChainId)) {
28
+ reportedUnknown.add(trade.srcChainId);
29
+ // CRITICAL: unknown subscriptionId — cannot validate this trade
30
+ violations.push({
31
+ code: types_1.ViolationCode.UnknownSubscriptionId,
32
+ message: `srcChainId=${trade.srcChainId} is not a known subscriptionId`,
33
+ path: `request.trades[${i}].srcChainId`,
34
+ actual: trade.srcChainId,
35
+ });
36
+ }
37
+ continue;
38
+ }
39
+ const key = quoteMode
40
+ ? String(trade.srcChainId)
41
+ : `${trade.srcChainId}:${trade.srcChainAuthorityAddress ?? ""}`;
42
+ let group = map.get(key);
43
+ if (!group) {
44
+ group = {
45
+ srcChainId: trade.srcChainId,
46
+ srcChainAuthorityAddress: quoteMode ? undefined : trade.srcChainAuthorityAddress,
47
+ realChainId,
48
+ tradeIndices: [],
49
+ trades: [],
50
+ };
51
+ map.set(key, group);
52
+ }
53
+ group.tradeIndices.push(i);
54
+ group.trades.push(trade);
55
+ }
56
+ return { groups: Array.from(map.values()), violations };
57
+ }
58
+ // Matches each response intent to its trade group.
59
+ //
60
+ // Quote mode: matches by intentChainId == group.srcChainId.
61
+ //
62
+ // Execution mode: additionally requires intentOwner == group.srcChainAuthorityAddress
63
+ // (case-insensitive).
64
+ //
65
+ // Multiple intents may match the same group. An intent that matches no group
66
+ // produces a violation.
67
+ function matchIntentsToGroups(intents, groups, quoteMode) {
68
+ const contexts = [];
69
+ const violations = [];
70
+ for (let i = 0; i < intents.length; i++) {
71
+ const intentPayload = intents[i];
72
+ const intent = intentPayload.intent;
73
+ const matched = groups.find(g => {
74
+ if (g.srcChainId !== intent.intentChainId)
75
+ return false;
76
+ if (!quoteMode && g.srcChainAuthorityAddress !== undefined) {
77
+ return (0, address_1.addressEquals)(g.realChainId, g.srcChainAuthorityAddress, intent.intentOwner);
78
+ }
79
+ return true;
80
+ });
81
+ if (matched) {
82
+ contexts.push({
83
+ intentIndex: i,
84
+ intentPayload,
85
+ tradeGroup: matched,
86
+ });
87
+ }
88
+ else {
89
+ violations.push({
90
+ code: types_1.ViolationCode.IntentNotMatchedToTradeGroup,
91
+ message: `intent[${i}] (intentId=${intent.intentId}) does not match any trade group`,
92
+ path: `response.intents[${i}]`,
93
+ expected: undefined,
94
+ actual: intent,
95
+ });
96
+ }
97
+ }
98
+ violations.push(...validateGroupCoverage(groups, contexts));
99
+ violations.push(...validateIntentDifferentiation(contexts));
100
+ return { contexts, violations };
101
+ }
102
+ // CRITICAL: every trade group must have at least one matching intent.
103
+ function validateGroupCoverage(groups, contexts) {
104
+ const coveredGroups = new Set(contexts.map(ctx => ctx.tradeGroup));
105
+ const violations = [];
106
+ for (const group of groups) {
107
+ if (!coveredGroups.has(group)) {
108
+ const tradeList = group.tradeIndices.join(", ");
109
+ violations.push({
110
+ code: types_1.ViolationCode.TradeGroupHasNoIntent,
111
+ message: `trade group (srcChainId=${group.srcChainId},`
112
+ + ` authority=${group.srcChainAuthorityAddress ?? "quote"})`
113
+ + ` has no matching intent`
114
+ + ` (request trades: [${tradeList}])`,
115
+ path: "response.intents",
116
+ expected: group,
117
+ });
118
+ }
119
+ }
120
+ return violations;
121
+ }
122
+ // CRITICAL: intents matched to the same trade group must differ
123
+ // in at least one of: externalCallHash, dlnMetadata, executionMetadata.
124
+ // Duplicate intents within a group indicate an API bug or MITM attack.
125
+ function validateIntentDifferentiation(contexts) {
126
+ const byGroup = new Map();
127
+ for (const ctx of contexts) {
128
+ const list = byGroup.get(ctx.tradeGroup) ?? [];
129
+ list.push(ctx);
130
+ byGroup.set(ctx.tradeGroup, list);
131
+ }
132
+ const violations = [];
133
+ for (const [, groupContexts] of byGroup) {
134
+ if (groupContexts.length <= 1)
135
+ continue;
136
+ const seen = new Map();
137
+ for (const ctx of groupContexts) {
138
+ const key = intentDifferentiationKey(ctx.intentPayload.intent);
139
+ const firstIndex = seen.get(key);
140
+ if (firstIndex !== undefined) {
141
+ violations.push({
142
+ code: types_1.ViolationCode.DuplicateIntentsInTradeGroup,
143
+ message: `intents[${firstIndex}] and intents[${ctx.intentIndex}]`
144
+ + ` are in the same trade group but do not differ`
145
+ + ` in externalCallHash, dlnMetadata, or`
146
+ + ` executionMetadata`,
147
+ path: `response.intents[${ctx.intentIndex}]`,
148
+ actual: ctx.intentPayload.intent,
149
+ });
150
+ }
151
+ else {
152
+ seen.set(key, ctx.intentIndex);
153
+ }
154
+ }
155
+ }
156
+ return violations;
157
+ }
158
+ function intentDifferentiationKey(intent) {
159
+ return [
160
+ intent.externalCallHash ?? "",
161
+ intent.dlnMetadata ?? "",
162
+ intent.executionMetadata ?? "",
163
+ ].join("|");
164
+ }
165
+ //# sourceMappingURL=trade-grouping.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trade-grouping.js","sourceRoot":"","sources":["../../../src/validations/trade-grouping.ts"],"names":[],"mappings":"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"}