@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,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateTransactionActions = validateTransactionActions;
4
+ const types_1 = require("../types");
5
+ // =============================================
6
+ // Transaction constraints
7
+ // =============================================
8
+ const TRANSACTION_ALLOWED_ACTIONS = [
9
+ types_1.EvmActionOperation.Budget,
10
+ types_1.EvmActionOperation.Wrap,
11
+ ];
12
+ function validateTransactionActions(actions, basePath) {
13
+ const violations = [];
14
+ for (let i = 0; i < actions.length; i++) {
15
+ const action = actions[i];
16
+ if (action.type !== types_1.EvmActionKind.Transaction)
17
+ continue;
18
+ const actionPath = `${basePath}.requiredActions[${i}]`;
19
+ // MEDIUM: actions[] must contain exactly one allowed element
20
+ violations.push(...validateTransactionActionsList(action, actionPath));
21
+ }
22
+ return violations;
23
+ }
24
+ // MEDIUM: actions[] must contain exactly one element: Budget or Wrap
25
+ function validateTransactionActionsList(action, actionPath) {
26
+ if (action.actions.length !== 1 ||
27
+ !TRANSACTION_ALLOWED_ACTIONS.includes(action.actions[0])) {
28
+ return [{
29
+ code: types_1.ViolationCode.TransactionActionsInvalid,
30
+ message: `Transaction actions must contain exactly one of ['Budget', 'Wrap']`,
31
+ path: `${actionPath}.actions`,
32
+ expected: TRANSACTION_ALLOWED_ACTIONS,
33
+ actual: action.actions,
34
+ }];
35
+ }
36
+ return [];
37
+ }
38
+ //# sourceMappingURL=evm-transaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evm-transaction.js","sourceRoot":"","sources":["../../../src/validations/evm-transaction.ts"],"names":[],"mappings":";;AAiBA,gEAmBC;AApCD,oCAMkB;AAElB,gDAAgD;AAChD,0BAA0B;AAC1B,gDAAgD;AAEhD,MAAM,2BAA2B,GAAkC;IAC/D,0BAAkB,CAAC,MAAM;IACzB,0BAAkB,CAAC,IAAI;CAC1B,CAAC;AAEF,SAAgB,0BAA0B,CACtC,OAA4B,EAC5B,QAAgB;IAEhB,MAAM,UAAU,GAAgB,EAAE,CAAC;IAEnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAC1B,IAAI,MAAM,CAAC,IAAI,KAAK,qBAAa,CAAC,WAAW;YAAE,SAAS;QAExD,MAAM,UAAU,GAAG,GAAG,QAAQ,oBAAoB,CAAC,GAAG,CAAC;QAEvD,6DAA6D;QAC7D,UAAU,CAAC,IAAI,CACX,GAAG,8BAA8B,CAAC,MAAM,EAAE,UAAU,CAAC,CACxD,CAAC;IACN,CAAC;IAED,OAAO,UAAU,CAAC;AACtB,CAAC;AAED,qEAAqE;AACrE,SAAS,8BAA8B,CACnC,MAAyB,EACzB,UAAkB;IAElB,IACI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;QAC3B,CAAC,2BAA2B,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAC1D,CAAC;QACC,OAAO,CAAC;gBACJ,IAAI,EAAE,qBAAa,CAAC,yBAAyB;gBAC7C,OAAO,EAAE,oEAAoE;gBAC7E,IAAI,EAAE,GAAG,UAAU,UAAU;gBAC7B,QAAQ,EAAE,2BAA2B;gBACrC,MAAM,EAAE,MAAM,CAAC,OAAO;aACzB,CAAC,CAAC;IACP,CAAC;IACD,OAAO,EAAE,CAAC;AACd,CAAC"}
@@ -0,0 +1,207 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateHooks = validateHooks;
4
+ const types_1 = require("../types");
5
+ const enums_1 = require("../types/enums");
6
+ const solana_hook_1 = require("./solana-hook");
7
+ // Both EVM and Solana use identical string values for hook operations
8
+ const HOOK_OPERATIONS = ["Hook", "GasCompensation"];
9
+ const HOOK_OPERATIONS_SET = new Set(HOOK_OPERATIONS);
10
+ function validateHooks(request, response, quoteMode) {
11
+ return [
12
+ ...validateHookAAConstraint(request, response),
13
+ ...validateHookCounts(request, response),
14
+ ...validatePreHooks(request, response, quoteMode),
15
+ ...validatePostHooks(request, response, quoteMode),
16
+ ];
17
+ }
18
+ // HIGH: hooks must be empty when AA=false
19
+ function validateHookAAConstraint(request, response) {
20
+ if (request.enableAccountAbstraction)
21
+ return [];
22
+ const violations = [];
23
+ if (response.preHooks.length > 0) {
24
+ violations.push({
25
+ code: types_1.ViolationCode.NonEmptyHooksWithoutAA,
26
+ message: "preHooks must be empty when enableAccountAbstraction=false",
27
+ path: "response.preHooks",
28
+ expected: 0,
29
+ actual: response.preHooks.length,
30
+ });
31
+ }
32
+ if (response.postHooks.length > 0) {
33
+ violations.push({
34
+ code: types_1.ViolationCode.NonEmptyHooksWithoutAA,
35
+ message: "postHooks must be empty when enableAccountAbstraction=false",
36
+ path: "response.postHooks",
37
+ expected: 0,
38
+ actual: response.postHooks.length,
39
+ });
40
+ }
41
+ return violations;
42
+ }
43
+ // HIGH: preHooks may contain additional compensation hooks appended by the API,
44
+ // so response count must be >= request count.
45
+ // postHooks must match exactly — the API never adds extras to postHooks.
46
+ function validateHookCounts(request, response) {
47
+ const violations = [];
48
+ const requestPreCount = request.preHooks?.length ?? 0;
49
+ const requestPostCount = request.postHooks?.length ?? 0;
50
+ // preHooks: API appends compensation hooks when gasCompensationInfo is present
51
+ if (response.preHooks.length < requestPreCount) {
52
+ violations.push({
53
+ code: types_1.ViolationCode.HookCountMismatch,
54
+ message: "response.preHooks count is less than request.preHooks count",
55
+ path: "response.preHooks",
56
+ expected: requestPreCount,
57
+ actual: response.preHooks.length,
58
+ });
59
+ }
60
+ // postHooks: strict 1:1 match, no extras allowed
61
+ if (response.postHooks.length !== requestPostCount) {
62
+ violations.push({
63
+ code: types_1.ViolationCode.HookCountMismatch,
64
+ message: "response.postHooks count does not match"
65
+ + " request.postHooks count",
66
+ path: "response.postHooks",
67
+ expected: requestPostCount,
68
+ actual: response.postHooks.length,
69
+ });
70
+ }
71
+ return violations;
72
+ }
73
+ function validatePreHooks(request, response, quoteMode) {
74
+ const violations = [];
75
+ const requestHooks = request.preHooks ?? [];
76
+ for (let i = 0; i < response.preHooks.length; i++) {
77
+ const basePath = `response.preHooks[${i}]`;
78
+ const hookPayload = response.preHooks[i];
79
+ const requestHook = requestHooks[i];
80
+ violations.push(...validateSingleHookPayload(hookPayload, requestHook, basePath, request, quoteMode));
81
+ }
82
+ return violations;
83
+ }
84
+ function validatePostHooks(request, response, quoteMode) {
85
+ const violations = [];
86
+ const requestHooks = request.postHooks ?? [];
87
+ for (let i = 0; i < response.postHooks.length; i++) {
88
+ const basePath = `response.postHooks[${i}]`;
89
+ const hookPayload = response.postHooks[i];
90
+ // User postHooks are matched by index; extra entries are compensation hooks
91
+ const requestHook = i < requestHooks.length ? requestHooks[i] : undefined;
92
+ violations.push(...validateSingleHookPayload(hookPayload, requestHook, basePath, request, quoteMode));
93
+ }
94
+ return violations;
95
+ }
96
+ function validateSingleHookPayload(hookPayload, requestHook, basePath, request, quoteMode) {
97
+ return [
98
+ ...validateHookEcho(hookPayload, requestHook, basePath),
99
+ ...validateHookUniqueActionIds(hookPayload, basePath),
100
+ ...validateHookActionsList(hookPayload, basePath),
101
+ ...validateGasCompensationRequiresInfo(hookPayload, basePath, request),
102
+ ...dispatchChainSpecificValidation(hookPayload, requestHook, basePath, quoteMode, request),
103
+ ];
104
+ }
105
+ // CRITICAL: response hook must echo back the request hook exactly
106
+ function validateHookEcho(hookPayload, requestHook, basePath) {
107
+ if (!requestHook)
108
+ return [];
109
+ if (JSON.stringify(hookPayload.hook) !== JSON.stringify(requestHook)) {
110
+ return [{
111
+ code: types_1.ViolationCode.HookEchoMismatch,
112
+ message: "response hook does not match request hook",
113
+ path: `${basePath}.hook`,
114
+ expected: requestHook,
115
+ actual: hookPayload.hook,
116
+ }];
117
+ }
118
+ return [];
119
+ }
120
+ // HIGH: unique actionIds within hook requiredActions
121
+ function validateHookUniqueActionIds(hookPayload, basePath) {
122
+ const seen = new Map();
123
+ const violations = [];
124
+ for (let i = 0; i < hookPayload.requiredActions.length; i++) {
125
+ const actionId = hookPayload.requiredActions[i].actionId;
126
+ const firstIndex = seen.get(actionId);
127
+ if (firstIndex !== undefined) {
128
+ violations.push({
129
+ code: types_1.ViolationCode.HookDuplicateActionId,
130
+ message: `duplicate actionId "${actionId}" at indices`
131
+ + ` ${firstIndex} and ${i}`,
132
+ path: `${basePath}.requiredActions[${i}].actionId`,
133
+ actual: actionId,
134
+ });
135
+ }
136
+ else {
137
+ seen.set(actionId, i);
138
+ }
139
+ }
140
+ return violations;
141
+ }
142
+ // HIGH: each hook required action must have exactly one operation: [Hook] or [GasCompensation]
143
+ function validateHookActionsList(hookPayload, basePath) {
144
+ const violations = [];
145
+ for (let i = 0; i < hookPayload.requiredActions.length; i++) {
146
+ const action = hookPayload.requiredActions[i];
147
+ const actionPath = `${basePath}.requiredActions[${i}]`;
148
+ if (action.actions.length !== 1) {
149
+ violations.push({
150
+ code: types_1.ViolationCode.HookActionsInvalid,
151
+ message: "hook required action must have exactly one operation",
152
+ path: `${actionPath}.actions`,
153
+ expected: 1,
154
+ actual: action.actions.length,
155
+ });
156
+ continue;
157
+ }
158
+ if (!HOOK_OPERATIONS_SET.has(action.actions[0])) {
159
+ violations.push({
160
+ code: types_1.ViolationCode.HookActionsInvalid,
161
+ message: "hook required action operation must be Hook"
162
+ + " or GasCompensation",
163
+ path: `${actionPath}.actions`,
164
+ expected: HOOK_OPERATIONS,
165
+ actual: action.actions,
166
+ });
167
+ }
168
+ }
169
+ return violations;
170
+ }
171
+ // CRITICAL: GasCompensation must only appear when gasCompensationInfo exists
172
+ function validateGasCompensationRequiresInfo(hookPayload, basePath, request) {
173
+ const hasGasCompensationInfo = (request.preHooks ?? []).some(h => h.gasCompensationInfo !== undefined);
174
+ const violations = [];
175
+ for (let i = 0; i < hookPayload.requiredActions.length; i++) {
176
+ const action = hookPayload.requiredActions[i];
177
+ const hasGasCompensation = action.actions.includes("GasCompensation");
178
+ if (hasGasCompensation && !hasGasCompensationInfo) {
179
+ violations.push({
180
+ code: types_1.ViolationCode.HookGasCompensationWithoutInfo,
181
+ message: "GasCompensation action present but no preHook has"
182
+ + " gasCompensationInfo",
183
+ path: `${basePath}.requiredActions[${i}].actions`,
184
+ actual: action.actions,
185
+ });
186
+ }
187
+ }
188
+ return violations;
189
+ }
190
+ function dispatchChainSpecificValidation(hookPayload, requestHook, basePath, quoteMode, request) {
191
+ const chainId = hookPayload.hook.chainId;
192
+ if (chainId === enums_1.ChainId.Solana) {
193
+ const srcChainAuthorityAddress = findSolanaSrcChainAuthority(request);
194
+ return (0, solana_hook_1.validateSolanaHookActions)(hookPayload, requestHook, basePath, quoteMode, srcChainAuthorityAddress, request);
195
+ }
196
+ // AI: EVM hook validation dispatch will go here when implemented
197
+ return [];
198
+ }
199
+ function findSolanaSrcChainAuthority(request) {
200
+ for (const trade of request.trades) {
201
+ if (trade.srcChainId === enums_1.ChainId.Solana) {
202
+ return trade.srcChainAuthorityAddress;
203
+ }
204
+ }
205
+ return undefined;
206
+ }
207
+ //# sourceMappingURL=hooks-common.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks-common.js","sourceRoot":"","sources":["../../../src/validations/hooks-common.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateRequiredActions = validateRequiredActions;
4
+ const types_1 = require("../types");
5
+ const evm_required_actions_1 = require("./evm-required-actions");
6
+ const solana_required_actions_1 = require("./solana-required-actions");
7
+ const trade_grouping_1 = require("./trade-grouping");
8
+ function validateRequiredActions(request, response, quoteMode, envConfig) {
9
+ const { groups, violations: groupViolations } = (0, trade_grouping_1.groupTrades)(request.trades, quoteMode);
10
+ const { contexts, violations } = (0, trade_grouping_1.matchIntentsToGroups)(response.intents, groups, quoteMode);
11
+ violations.push(...groupViolations);
12
+ for (const ctx of contexts) {
13
+ const basePath = `response.intents[${ctx.intentIndex}]`;
14
+ const { realChainId } = ctx.tradeGroup;
15
+ const allActions = ctx.intentPayload.requiredActions;
16
+ violations.push(...validateActionKindConsistency(allActions, basePath, realChainId));
17
+ // Dispatch to chain-specific validator based on realChainId.
18
+ // "Transaction" exists in both EvmActionKind and SolanaActionKind,
19
+ // so we must use chain context to disambiguate.
20
+ if (realChainId === types_1.ChainId.Solana) {
21
+ const solanaActions = filterSolanaActions(allActions);
22
+ violations.push(...(0, solana_required_actions_1.validateSolanaRequiredActions)(request, solanaActions, basePath, realChainId, quoteMode, ctx.tradeGroup.trades, ctx.tradeGroup.srcChainAuthorityAddress, ctx.intentPayload.intent, envConfig));
23
+ }
24
+ else {
25
+ const evmActions = filterEvmActions(allActions);
26
+ violations.push(...(0, evm_required_actions_1.validateEvmRequiredActions)(request, response, evmActions, basePath, realChainId, quoteMode, ctx.intentPayload.intent, ctx.tradeGroup.trades, ctx.tradeGroup.srcChainAuthorityAddress, envConfig));
27
+ }
28
+ }
29
+ return violations;
30
+ }
31
+ function isEvmAction(action) {
32
+ return Object.values(types_1.EvmActionKind).includes(action.type);
33
+ }
34
+ function filterEvmActions(actions) {
35
+ return actions.filter(isEvmAction);
36
+ }
37
+ function isSolanaAction(action) {
38
+ return Object.values(types_1.SolanaActionKind).includes(action.type);
39
+ }
40
+ function filterSolanaActions(actions) {
41
+ return actions.filter(isSolanaAction);
42
+ }
43
+ const EVM_ACTION_OPERATIONS = new Set(Object.values(types_1.EvmActionOperation));
44
+ const SOLANA_ACTION_OPERATIONS = new Set(Object.values(types_1.SolanaActionOperation));
45
+ // CRITICAL: Each requiredAction must have consistent kind across all fields.
46
+ // Uses realChainId to determine expected kind (avoids ambiguity from overlapping type strings).
47
+ function validateActionKindConsistency(actions, basePath, realChainId) {
48
+ const isSolanaChain = realChainId === types_1.ChainId.Solana;
49
+ const expectedOps = isSolanaChain ? SOLANA_ACTION_OPERATIONS : EVM_ACTION_OPERATIONS;
50
+ const chainLabel = isSolanaChain ? "Solana" : "EVM";
51
+ const violations = [];
52
+ for (let i = 0; i < actions.length; i++) {
53
+ const action = actions[i];
54
+ const actionPath = `${basePath}.requiredActions[${i}]`;
55
+ const invalidOps = action.actions.filter(op => !expectedOps.has(op));
56
+ if (invalidOps.length > 0) {
57
+ violations.push({
58
+ code: types_1.ViolationCode.RequiredActionKindInconsistent,
59
+ message: `${chainLabel} action type "${action.type}" has non-${chainLabel}`
60
+ + ` operations: ${invalidOps.join(", ")}`,
61
+ path: `${actionPath}.actions`,
62
+ expected: [...expectedOps],
63
+ actual: action.actions,
64
+ });
65
+ }
66
+ }
67
+ return violations;
68
+ }
69
+ //# sourceMappingURL=required-actions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"required-actions.js","sourceRoot":"","sources":["../../../src/validations/required-actions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,225 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateSolanaHookActions = validateSolanaHookActions;
4
+ const types_1 = require("../types");
5
+ const solana_instruction_1 = require("../helpers/solana-instruction");
6
+ const programs_1 = require("../whitelists/solana/programs");
7
+ const address_1 = require("../helpers/address");
8
+ const enums_1 = require("../types/enums");
9
+ const solana_transaction_decode_1 = require("../helpers/solana-transaction-decode");
10
+ function validateSolanaHookActions(hookPayload, requestHook, basePath, quoteMode, srcChainAuthorityAddress, request) {
11
+ const violations = [];
12
+ const gasCompensationTokenAddresses = (request.preHooks ?? [])
13
+ .filter(h => h.gasCompensationInfo?.chainId === enums_1.ChainId.Solana)
14
+ .map(h => h.gasCompensationInfo.tokenAddress);
15
+ for (let i = 0; i < hookPayload.requiredActions.length; i++) {
16
+ const action = hookPayload.requiredActions[i];
17
+ const actionPath = `${basePath}.requiredActions[${i}]`;
18
+ const ops = action.actions;
19
+ // Only single "Hook" or "GasCompensation" is allowed - validated earlier.
20
+ if (ops.includes(types_1.SolanaActionOperation.Hook)) {
21
+ violations.push(...validateSolanaHookAction(action, requestHook, actionPath));
22
+ }
23
+ if (ops.includes(types_1.SolanaActionOperation.GasCompensation)) {
24
+ violations.push(...validateSolanaGasCompensationAction(action, actionPath, quoteMode, srcChainAuthorityAddress, gasCompensationTokenAddresses));
25
+ }
26
+ }
27
+ return violations;
28
+ }
29
+ // =============================================
30
+ // Hook action: user's transaction passed through as-is
31
+ // =============================================
32
+ function validateSolanaHookAction(action, requestHook, actionPath) {
33
+ const violations = [];
34
+ // CRITICAL: Hook action must have a corresponding request hook.
35
+ // If missing, the API is asking the user to sign a transaction they never sent.
36
+ if (!requestHook) {
37
+ return [{
38
+ code: types_1.ViolationCode.SolanaHookDataMismatch,
39
+ message: "Hook action in response has no corresponding request hook",
40
+ path: `${actionPath}.data.data`,
41
+ }];
42
+ }
43
+ // CRITICAL: decode as VersionedTransaction(MessageV0)
44
+ const decodeResult = decodeSolanaTransaction(action, actionPath, types_1.ViolationCode.SolanaHookDecodeError);
45
+ if (!decodeResult.ok)
46
+ return decodeResult.violations;
47
+ // CRITICAL: transaction data must match request hook data
48
+ const responseData = action.data.data;
49
+ const requestData = requestHook.data;
50
+ if (!hexEquals(responseData, requestData)) {
51
+ violations.push({
52
+ code: types_1.ViolationCode.SolanaHookDataMismatch,
53
+ message: "Hook transaction data does not match request hook data",
54
+ path: `${actionPath}.data.data`,
55
+ expected: truncateHex(requestData),
56
+ actual: truncateHex(responseData),
57
+ });
58
+ }
59
+ return violations;
60
+ }
61
+ // =============================================
62
+ // GasCompensation action: API-built compensation transaction
63
+ // =============================================
64
+ function validateSolanaGasCompensationAction(action, actionPath, quoteMode, srcChainAuthorityAddress, gasCompensationTokenAddresses) {
65
+ // CRITICAL: decode as VersionedTransaction(MessageV0)
66
+ const decodeResult = decodeSolanaTransaction(action, actionPath, types_1.ViolationCode.SolanaGasCompensationDecodeError);
67
+ if (!decodeResult.ok)
68
+ return decodeResult.violations;
69
+ const transaction = decodeResult.transaction;
70
+ const staticAccountKeys = transaction.message.staticAccountKeys.map(key => key.toBase58());
71
+ const compiledIxs = transaction.message.compiledInstructions;
72
+ const violations = [];
73
+ // CRITICAL: all programs must be in GAS_COMPENSATION_ALLOWED_PROGRAMS
74
+ violations.push(...validateGasCompensationAllowedPrograms(compiledIxs, staticAccountKeys, actionPath));
75
+ const resolved = (0, solana_instruction_1.resolveInstructions)(compiledIxs, staticAccountKeys);
76
+ // CRITICAL: must have exactly one transfer, rest must be memos
77
+ violations.push(...validateGasCompensationInstructions(resolved, actionPath, gasCompensationTokenAddresses));
78
+ // HIGH (execution): fee payer must not be the user
79
+ violations.push(...validateGasCompensationFeePayer(transaction, actionPath, quoteMode, srcChainAuthorityAddress));
80
+ return violations;
81
+ }
82
+ // CRITICAL: only allowed programs
83
+ function validateGasCompensationAllowedPrograms(compiledInstructions, staticAccountKeys, actionPath) {
84
+ const violations = [];
85
+ for (let i = 0; i < compiledInstructions.length; i++) {
86
+ const programIdx = compiledInstructions[i].programIdIndex;
87
+ const programId = staticAccountKeys[programIdx];
88
+ if (programId === undefined) {
89
+ // Program from Address Lookup Table — forbidden
90
+ violations.push({
91
+ code: types_1.ViolationCode.SolanaGasCompensationForbiddenProgram,
92
+ message: "GasCompensation instruction uses a program from"
93
+ + " Address Lookup Table",
94
+ path: `${actionPath}.data.data`,
95
+ actual: `instruction[${i}].programIdIndex=${programIdx}`,
96
+ });
97
+ continue;
98
+ }
99
+ if (!programs_1.GAS_COMPENSATION_ALLOWED_PROGRAMS.has(programId)) {
100
+ violations.push({
101
+ code: types_1.ViolationCode.SolanaGasCompensationForbiddenProgram,
102
+ message: "GasCompensation instruction uses a forbidden program",
103
+ path: `${actionPath}.data.data`,
104
+ expected: [...programs_1.GAS_COMPENSATION_ALLOWED_PROGRAMS],
105
+ actual: programId,
106
+ });
107
+ }
108
+ }
109
+ return violations;
110
+ }
111
+ // CRITICAL: exactly one transfer, rest = memo
112
+ function validateGasCompensationInstructions(resolved, actionPath, gasCompensationTokenAddresses) {
113
+ const violations = [];
114
+ const transfers = [];
115
+ const splTransfers = [];
116
+ for (let i = 0; i < resolved.length; i++) {
117
+ const ix = resolved[i];
118
+ if ((0, solana_instruction_1.isSystemTransfer)(ix)) {
119
+ transfers.push(ix);
120
+ }
121
+ else if (isSplTransferChecked(ix)) {
122
+ splTransfers.push(ix);
123
+ }
124
+ else if ((0, solana_instruction_1.isMemo)(ix)) {
125
+ // OK: memo instructions are allowed
126
+ }
127
+ else {
128
+ // HIGH: unexpected instruction type
129
+ violations.push({
130
+ code: types_1.ViolationCode.SolanaGasCompensationUnexpectedInstruction,
131
+ message: "GasCompensation contains an unexpected instruction type",
132
+ path: `${actionPath}.data.data`,
133
+ actual: {
134
+ index: i,
135
+ programId: ix.programId,
136
+ dataLength: ix.data.length,
137
+ },
138
+ });
139
+ }
140
+ }
141
+ const totalTransfers = transfers.length + splTransfers.length;
142
+ if (totalTransfers < 1 || totalTransfers > 1) {
143
+ violations.push({
144
+ code: types_1.ViolationCode.SolanaGasCompensationTransferMissing,
145
+ message: "GasCompensation must contain exactly one transfer",
146
+ path: `${actionPath}.data.data`,
147
+ expected: 1,
148
+ actual: totalTransfers,
149
+ });
150
+ }
151
+ // CRITICAL: for SPL transfers, validate token mint matches gasCompensationInfo
152
+ if (splTransfers.length === 1) {
153
+ violations.push(...validateGasCompensationTokenMint(splTransfers[0], actionPath, gasCompensationTokenAddresses));
154
+ }
155
+ return violations;
156
+ }
157
+ // CRITICAL: SPL transfer token must match gasCompensationInfo.tokenAddress
158
+ function validateGasCompensationTokenMint(ix, actionPath, gasCompensationTokenAddresses) {
159
+ // transferChecked accounts: [0]=source, [1]=mint, [2]=destination, [3]=owner
160
+ if (ix.accountKeys.length < 4) {
161
+ return [{
162
+ code: types_1.ViolationCode.SolanaGasCompensationTokenMismatch,
163
+ message: "SPL transferChecked instruction has fewer than 4 accounts",
164
+ path: `${actionPath}.data.data`,
165
+ expected: 4,
166
+ actual: ix.accountKeys.length,
167
+ }];
168
+ }
169
+ const mint = ix.accountKeys[1];
170
+ const matchesAny = gasCompensationTokenAddresses.some(addr => (0, address_1.addressEquals)(enums_1.ChainId.Solana, mint, addr));
171
+ if (!matchesAny) {
172
+ return [{
173
+ code: types_1.ViolationCode.SolanaGasCompensationTokenMismatch,
174
+ message: "GasCompensation SPL transfer mint does not match"
175
+ + " any gasCompensationInfo.tokenAddress",
176
+ path: `${actionPath}.data.data`,
177
+ expected: gasCompensationTokenAddresses,
178
+ actual: mint,
179
+ }];
180
+ }
181
+ return [];
182
+ }
183
+ // HIGH (execution): fee payer must not be the user
184
+ function validateGasCompensationFeePayer(transaction, actionPath, quoteMode, srcChainAuthorityAddress) {
185
+ if (quoteMode || !srcChainAuthorityAddress)
186
+ return [];
187
+ const keys = transaction.message.staticAccountKeys;
188
+ if (keys.length === 0)
189
+ return [];
190
+ const feePayer = keys[0].toBase58();
191
+ if ((0, address_1.addressEquals)(enums_1.ChainId.Solana, feePayer, srcChainAuthorityAddress)) {
192
+ return [{
193
+ code: types_1.ViolationCode.SolanaGasCompensationFeePayerIsUser,
194
+ message: "GasCompensation fee payer must not be the user",
195
+ path: `${actionPath}.data.data`,
196
+ actual: feePayer,
197
+ }];
198
+ }
199
+ return [];
200
+ }
201
+ // =============================================
202
+ // Helpers
203
+ // =============================================
204
+ function decodeSolanaTransaction(action, actionPath, errorCode) {
205
+ const dataHex = action.data.data;
206
+ return (0, solana_transaction_decode_1.decodeSolanaVersionedTransaction)(dataHex, `${actionPath}.data.data`, errorCode, errorCode);
207
+ }
208
+ // SPL Token transferChecked: discriminator = 12 (1 byte), data >= 10 bytes
209
+ // (1 disc + 8 amount + 1 decimals)
210
+ function isSplTransferChecked(ix) {
211
+ if (ix.programId !== programs_1.SPL_TOKEN_PROGRAM && ix.programId !== programs_1.SPL_TOKEN_2022_PROGRAM) {
212
+ return false;
213
+ }
214
+ return ix.data.length >= 10 && ix.data[0] === 12;
215
+ }
216
+ function hexEquals(a, b) {
217
+ const normalize = (s) => s.toLowerCase().replace(/^0x/, "");
218
+ return normalize(a) === normalize(b);
219
+ }
220
+ function truncateHex(hex) {
221
+ if (hex.length <= 20)
222
+ return hex;
223
+ return hex.slice(0, 10) + "..." + hex.slice(-8);
224
+ }
225
+ //# sourceMappingURL=solana-hook.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solana-hook.js","sourceRoot":"","sources":["../../../src/validations/solana-hook.ts"],"names":[],"mappings":"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"}