@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,290 @@
1
+ import { ViolationCode, ApproveAmountFlag, SolanaActionOperation, SpecialAmount, } from "../types/index.js";
2
+ import { addressEquals } from "../helpers/address.js";
3
+ import { MAX_U64 } from "../helpers/constants.js";
4
+ import { ApproveKind, CUSTOM_APPROVE_FIRST_ATA_INDEX, isClassicApprove, isCustomApprove, decodeClassicApprove, decodeCustomApprove, deriveAta, } from "../helpers/solana-instruction.js";
5
+ import { SPL_TOKEN_PROGRAM, SPL_TOKEN_2022_PROGRAM, } from "../whitelists/solana/programs.js";
6
+ const TOKEN_PROGRAMS = new Set([SPL_TOKEN_PROGRAM, SPL_TOKEN_2022_PROGRAM]);
7
+ // =============================================
8
+ // Entry point
9
+ // =============================================
10
+ // Validates Budget (approve) instructions within a decoded Solana transaction.
11
+ // Called for both Transaction (AA=false) and SignTransaction (AA=true) actions.
12
+ export function validateSolanaBudgetInstructions(action, resolvedInstructions, actionPath, request, trades, realChainId, quoteMode, srcChainAuthorityAddress, envConfig) {
13
+ const hasBudgetAction = action.actions.includes(SolanaActionOperation.Budget);
14
+ // CRITICAL: Budget forbidden when approveAmountFlag === "none"
15
+ if (hasBudgetAction && request.approveAmountFlag === ApproveAmountFlag.None) {
16
+ return [{
17
+ code: ViolationCode.SolanaBudgetForbiddenWithApproveNone,
18
+ message: "Budget action is forbidden when approveAmountFlag=\"none\"",
19
+ path: `${actionPath}.actions`,
20
+ }];
21
+ }
22
+ // Find all approve instructions in the transaction
23
+ const approveInstructions = collectApproveInstructions(resolvedInstructions, envConfig.solanaIntentProgram);
24
+ // HIGH: if actions[] contains "Budget" at least one approve instruction must be present
25
+ if (hasBudgetAction && approveInstructions.length === 0) {
26
+ return [{
27
+ code: ViolationCode.SolanaBudgetNoApproveInstruction,
28
+ message: "actions[] contains \"Budget\" but no approve instruction found in transaction",
29
+ path: `${actionPath}.data.data`,
30
+ }];
31
+ }
32
+ // If no budget action declared and no approve instructions — nothing to validate
33
+ if (!hasBudgetAction)
34
+ return [];
35
+ const violations = [];
36
+ for (let i = 0; i < approveInstructions.length; i++) {
37
+ const approve = approveInstructions[i];
38
+ const ixLabel = `approve instruction #${i}`;
39
+ if (approve.kind === ApproveKind.Classic) {
40
+ violations.push(...validateClassicApprove(approve, actionPath, ixLabel, request, trades, realChainId, quoteMode, srcChainAuthorityAddress, envConfig));
41
+ }
42
+ else {
43
+ violations.push(...validateCustomApprove(approve, actionPath, ixLabel, request, trades, realChainId, quoteMode, srcChainAuthorityAddress, envConfig));
44
+ }
45
+ }
46
+ return violations;
47
+ }
48
+ // =============================================
49
+ // Collect approve instructions
50
+ // =============================================
51
+ function collectApproveInstructions(instructions, intentProgram) {
52
+ const result = [];
53
+ for (const ix of instructions) {
54
+ if (isClassicApprove(ix)) {
55
+ result.push(decodeClassicApprove(ix));
56
+ }
57
+ else if (isCustomApprove(ix, intentProgram)) {
58
+ result.push(decodeCustomApprove(ix));
59
+ }
60
+ }
61
+ return result;
62
+ }
63
+ // =============================================
64
+ // Classic SPL Token Approve validation
65
+ // =============================================
66
+ function validateClassicApprove(approve, actionPath, ixLabel, request, trades, realChainId, quoteMode, srcChainAuthorityAddress, envConfig) {
67
+ const violations = [];
68
+ // CRITICAL: programId (SPL Token or Token-2022) and discriminator (4 = Approve)
69
+ // are already verified by isClassicApprove() before this function is called.
70
+ // CRITICAL: delegate must be whitelisted AllowanceHolder
71
+ if (approve.delegate !== envConfig.solanaAllowanceHolder) {
72
+ violations.push({
73
+ code: ViolationCode.SolanaBudgetClassicDelegateNotWhitelisted,
74
+ message: `${ixLabel}: delegate is not a whitelisted AllowanceHolder`,
75
+ path: `${actionPath}.data.data`,
76
+ actual: approve.delegate,
77
+ });
78
+ }
79
+ // HIGH: owner must equal srcChainAuthorityAddress (execution mode only)
80
+ if (!quoteMode && srcChainAuthorityAddress) {
81
+ if (!addressEquals(realChainId, approve.owner, srcChainAuthorityAddress)) {
82
+ violations.push({
83
+ code: ViolationCode.SolanaBudgetClassicOwnerMismatch,
84
+ message: `${ixLabel}: owner must equal srcChainAuthorityAddress`,
85
+ path: `${actionPath}.data.data`,
86
+ expected: srcChainAuthorityAddress,
87
+ actual: approve.owner,
88
+ });
89
+ }
90
+ }
91
+ // CRITICAL: ATA must correspond to the trade token (execution mode only)
92
+ if (!quoteMode && srcChainAuthorityAddress) {
93
+ violations.push(...validateClassicAta(approve, actionPath, ixLabel, trades, realChainId, srcChainAuthorityAddress));
94
+ }
95
+ // CRITICAL: approve amount must match approveAmountFlag
96
+ violations.push(...validateApproveAmount(approve.amount, actionPath, ixLabel, request, trades, realChainId, ViolationCode.SolanaBudgetClassicAmountMismatch, false));
97
+ return violations;
98
+ }
99
+ // CRITICAL: Verify ATA matches expected (mint, owner, tokenProgram)
100
+ function validateClassicAta(approve, actionPath, ixLabel, trades, realChainId, srcChainAuthorityAddress) {
101
+ // Try each trade's srcChainTokenIn as mint — if any matches, the ATA is valid
102
+ const expectedAtas = [];
103
+ for (const trade of trades) {
104
+ try {
105
+ const expectedAta = deriveAta(srcChainAuthorityAddress, trade.srcChainTokenIn, approve.tokenProgramId);
106
+ if (addressEquals(realChainId, approve.ataAddress, expectedAta)) {
107
+ return [];
108
+ }
109
+ expectedAtas.push({ mint: trade.srcChainTokenIn, ata: expectedAta });
110
+ }
111
+ catch {
112
+ // Invalid PublicKey — skip this trade, continue checking others
113
+ continue;
114
+ }
115
+ }
116
+ return [{
117
+ code: ViolationCode.SolanaBudgetClassicAtaMismatch,
118
+ message: `${ixLabel}: ATA does not match any trade token`
119
+ + " (derived from srcChainTokenIn, srcChainAuthorityAddress, tokenProgram)",
120
+ path: `${actionPath}.data.data`,
121
+ expected: expectedAtas,
122
+ actual: approve.ataAddress,
123
+ }];
124
+ }
125
+ // =============================================
126
+ // Custom approve (approveProtocolTransfers) validation
127
+ // =============================================
128
+ function validateCustomApprove(approve, actionPath, ixLabel, request, trades, realChainId, quoteMode, srcChainAuthorityAddress, envConfig) {
129
+ const violations = [];
130
+ // CRITICAL: programId (DEBRIDGE_INTENT_PROGRAM) and discriminator (8-byte Anchor hash)
131
+ // are already verified by isCustomApprove() before this function is called.
132
+ // HIGH: maker must equal srcChainAuthorityAddress (execution mode only)
133
+ if (!quoteMode && srcChainAuthorityAddress) {
134
+ if (!addressEquals(realChainId, approve.maker, srcChainAuthorityAddress)) {
135
+ violations.push({
136
+ code: ViolationCode.SolanaBudgetCustomMakerMismatch,
137
+ message: `${ixLabel}: maker must equal srcChainAuthorityAddress`,
138
+ path: `${actionPath}.data.data`,
139
+ expected: srcChainAuthorityAddress,
140
+ actual: approve.maker,
141
+ });
142
+ }
143
+ }
144
+ // MEDIUM: state PDA must match expected derivation
145
+ if (!addressEquals(realChainId, approve.statePda, envConfig.solanaExpectedStatePdaBase58)) {
146
+ violations.push({
147
+ code: ViolationCode.SolanaBudgetCustomStatePdaMismatch,
148
+ message: `${ixLabel}: state PDA does not match expected derivation`,
149
+ path: `${actionPath}.data.data`,
150
+ expected: envConfig.solanaExpectedStatePdaBase58,
151
+ actual: approve.statePda,
152
+ });
153
+ }
154
+ // CRITICAL: tokenProgram must be SPL Token or Token-2022
155
+ if (!TOKEN_PROGRAMS.has(approve.tokenProgramId)) {
156
+ violations.push({
157
+ code: ViolationCode.SolanaBudgetCustomTokenProgramInvalid,
158
+ message: `${ixLabel}: tokenProgram must be SPL Token or Token-2022`,
159
+ path: `${actionPath}.data.data`,
160
+ expected: [...TOKEN_PROGRAMS],
161
+ actual: approve.tokenProgramId,
162
+ });
163
+ }
164
+ // MEDIUM: vec_length must equal number of remaining accounts
165
+ if (approve.vecLength !== approve.ataAddresses.length) {
166
+ violations.push({
167
+ code: ViolationCode.SolanaBudgetCustomVecLengthMismatch,
168
+ message: `${ixLabel}: vec_length (${approve.vecLength})`
169
+ + ` does not match remaining accounts count (${approve.ataAddresses.length})`,
170
+ path: `${actionPath}.data.data`,
171
+ expected: approve.ataAddresses.length,
172
+ actual: approve.vecLength,
173
+ });
174
+ }
175
+ // CRITICAL: each ATA must correspond to a trade token (execution mode only)
176
+ if (!quoteMode && srcChainAuthorityAddress) {
177
+ violations.push(...validateCustomAtas(approve, actionPath, ixLabel, trades, realChainId, srcChainAuthorityAddress));
178
+ }
179
+ // CRITICAL: each amount must match approveAmountFlag
180
+ for (let i = 0; i < approve.amounts.length; i++) {
181
+ violations.push(...validateApproveAmount(approve.amounts[i], actionPath, `${ixLabel} amounts[${i}]`, request, trades, realChainId, ViolationCode.SolanaBudgetCustomAmountMismatch, true));
182
+ }
183
+ return violations;
184
+ }
185
+ // CRITICAL: Verify each ATA in custom approve matches expected (mint, owner, tokenProgram)
186
+ function validateCustomAtas(approve, actionPath, ixLabel, trades, realChainId, srcChainAuthorityAddress) {
187
+ const violations = [];
188
+ for (let i = 0; i < approve.ataAddresses.length; i++) {
189
+ const ata = approve.ataAddresses[i];
190
+ let matched = false;
191
+ const expectedAtas = [];
192
+ for (const trade of trades) {
193
+ try {
194
+ const expectedAta = deriveAta(srcChainAuthorityAddress, trade.srcChainTokenIn, approve.tokenProgramId);
195
+ if (addressEquals(realChainId, ata, expectedAta)) {
196
+ matched = true;
197
+ break;
198
+ }
199
+ expectedAtas.push({ mint: trade.srcChainTokenIn, ata: expectedAta });
200
+ }
201
+ catch {
202
+ continue;
203
+ }
204
+ }
205
+ if (!matched) {
206
+ violations.push({
207
+ code: ViolationCode.SolanaBudgetCustomAtaMismatch,
208
+ message: `${ixLabel} accounts[${i + CUSTOM_APPROVE_FIRST_ATA_INDEX}]:`
209
+ + " ATA does not match any trade token"
210
+ + " (derived from srcChainTokenIn, srcChainAuthorityAddress, tokenProgram)",
211
+ path: `${actionPath}.data.data`,
212
+ expected: expectedAtas,
213
+ actual: ata,
214
+ });
215
+ }
216
+ }
217
+ return violations;
218
+ }
219
+ // =============================================
220
+ // Approve amount validation (shared by classic and custom)
221
+ // =============================================
222
+ // allowDelta: when true, amount <= sum is accepted (not just ===).
223
+ // Custom approve (approveProtocolTransfers) works as a delta on-chain: the program
224
+ // adds the instruction amount to the existing allowance. The API may send a smaller
225
+ // amount if the user already has partial allowance. Classic SPL approve sets an
226
+ // absolute value, so it must match exactly.
227
+ function validateApproveAmount(amount, actionPath, ixLabel, request, trades, realChainId, violationCode, allowDelta) {
228
+ const flag = request.approveAmountFlag;
229
+ // unlimited: must be max u64
230
+ if (flag === ApproveAmountFlag.Unlimited) {
231
+ if (amount !== MAX_U64) {
232
+ return [{
233
+ code: violationCode,
234
+ message: `${ixLabel}: approve amount must be max u64`
235
+ + " when approveAmountFlag=\"unlimited\"",
236
+ path: `${actionPath}.data.data`,
237
+ expected: MAX_U64.toString(),
238
+ actual: amount.toString(),
239
+ }];
240
+ }
241
+ return [];
242
+ }
243
+ // exactApproveAmount (or undefined): check against trade amounts
244
+ const sumResult = sumSolanaTradeAmounts(trades, realChainId);
245
+ if (sumResult.skip)
246
+ return [];
247
+ if (sumResult.violations)
248
+ return sumResult.violations;
249
+ const mismatch = allowDelta
250
+ ? (amount > sumResult.sum)
251
+ : (amount !== sumResult.sum);
252
+ if (mismatch) {
253
+ return [{
254
+ code: violationCode,
255
+ message: allowDelta
256
+ ? `${ixLabel}: approve amount must be <= sum of trade amounts`
257
+ : `${ixLabel}: approve amount does not match sum of trade amounts`,
258
+ path: `${actionPath}.data.data`,
259
+ expected: sumResult.sum.toString(),
260
+ actual: amount.toString(),
261
+ }];
262
+ }
263
+ return [];
264
+ }
265
+ // Sums srcChainTokenInAmount across all matching trades.
266
+ // For Solana, no native→wrapped resolution is needed (unlike EVM).
267
+ function sumSolanaTradeAmounts(trades, _realChainId) {
268
+ let sum = 0n;
269
+ for (let i = 0; i < trades.length; i++) {
270
+ const amount = trades[i].srcChainTokenInAmount;
271
+ if (amount === SpecialAmount.Max || amount === SpecialAmount.Auto) {
272
+ return { skip: true };
273
+ }
274
+ try {
275
+ sum += BigInt(amount);
276
+ }
277
+ catch {
278
+ return {
279
+ violations: [{
280
+ code: ViolationCode.TradeAmountInvalid,
281
+ message: "trade srcChainTokenInAmount is not a valid number",
282
+ path: `request.trades[${i}].srcChainTokenInAmount`,
283
+ actual: amount,
284
+ }],
285
+ };
286
+ }
287
+ }
288
+ return { sum };
289
+ }
290
+ //# sourceMappingURL=solana-op-budget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solana-op-budget.js","sourceRoot":"","sources":["../../../src/validations/solana-op-budget.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,188 @@
1
+ import { ViolationCode, SolanaActionOperation, SpecialAmount, } from "../types/index.js";
2
+ import { addressEquals } from "../helpers/address.js";
3
+ import { deriveAta, isSystemTransfer, isSyncNative, isCreateAtaIdempotent, } from "../helpers/solana-instruction.js";
4
+ import { SPL_TOKEN_PROGRAM, SPL_NATIVE_MINT, } from "../whitelists/solana/programs.js";
5
+ // =============================================
6
+ // Entry point
7
+ // =============================================
8
+ // Validates Wrap (SOL → wSOL) instructions within a decoded Solana transaction.
9
+ // Called for both Transaction (AA=false) and SignTransaction (AA=true) actions.
10
+ export function validateSolanaWrapInstructions(action, resolvedInstructions, actionPath, trades, realChainId, quoteMode, srcChainAuthorityAddress) {
11
+ if (!action.actions.includes(SolanaActionOperation.Wrap))
12
+ return [];
13
+ const violations = [];
14
+ const createAtaIxs = findCreateAtaInstructions(resolvedInstructions);
15
+ const transferIxs = findSystemTransferInstructions(resolvedInstructions);
16
+ const syncNativeIxs = findSyncNativeInstructions(resolvedInstructions);
17
+ // CRITICAL: SystemProgram.Transfer is mandatory
18
+ if (transferIxs.length === 0) {
19
+ violations.push({
20
+ code: ViolationCode.SolanaWrapNoTransferInstruction,
21
+ message: "Wrap declared but no SystemProgram.Transfer instruction found",
22
+ path: `${actionPath}.data.data`,
23
+ });
24
+ return violations;
25
+ }
26
+ // CRITICAL: SyncNative is mandatory
27
+ if (syncNativeIxs.length === 0) {
28
+ violations.push({
29
+ code: ViolationCode.SolanaWrapNoSyncNativeInstruction,
30
+ message: "Wrap declared but no SyncNative instruction found",
31
+ path: `${actionPath}.data.data`,
32
+ });
33
+ }
34
+ // Compute expected wSOL ATA (only in execution mode)
35
+ const expectedWsolAta = computeExpectedWsolAta(quoteMode, srcChainAuthorityAddress);
36
+ // Validate CreateAssociatedTokenAccountIdempotent (optional)
37
+ for (const ix of createAtaIxs) {
38
+ violations.push(...validateCreateAtaInstruction(ix, actionPath, realChainId, quoteMode, srcChainAuthorityAddress, expectedWsolAta));
39
+ }
40
+ // Validate SystemProgram.Transfer
41
+ for (const ix of transferIxs) {
42
+ violations.push(...validateTransferInstruction(ix, actionPath, realChainId, trades, expectedWsolAta));
43
+ }
44
+ // Validate SyncNative
45
+ for (const ix of syncNativeIxs) {
46
+ violations.push(...validateSyncNativeInstruction(ix, actionPath, expectedWsolAta));
47
+ }
48
+ return violations;
49
+ }
50
+ function findSystemTransferInstructions(ixs) {
51
+ return ixs.filter(isSystemTransfer);
52
+ }
53
+ function findSyncNativeInstructions(ixs) {
54
+ return ixs.filter(isSyncNative);
55
+ }
56
+ function findCreateAtaInstructions(ixs) {
57
+ return ixs.filter(isCreateAtaIdempotent);
58
+ }
59
+ // =============================================
60
+ // CreateAssociatedTokenAccountIdempotent validation
61
+ // =============================================
62
+ // Accounts layout for createAssociatedTokenAccountIdempotent:
63
+ // [0] = payer, [1] = associatedToken, [2] = owner, [3] = mint,
64
+ // [4] = systemProgram, [5] = tokenProgram
65
+ function validateCreateAtaInstruction(ix, actionPath, realChainId, quoteMode, srcChainAuthorityAddress, expectedWsolAta) {
66
+ const violations = [];
67
+ // accounts[2] = owner
68
+ const owner = ix.accountKeys[2];
69
+ // accounts[3] = mint
70
+ const mint = ix.accountKeys[3];
71
+ // accounts[1] = associatedToken (the ATA being created)
72
+ const associatedToken = ix.accountKeys[1];
73
+ // CRITICAL (execution): owner must equal srcChainAuthorityAddress
74
+ if (!quoteMode && srcChainAuthorityAddress) {
75
+ if (!addressEquals(realChainId, owner, srcChainAuthorityAddress)) {
76
+ violations.push({
77
+ code: ViolationCode.SolanaWrapCreateAtaOwnerMismatch,
78
+ message: "CreateATA owner must equal srcChainAuthorityAddress",
79
+ path: `${actionPath}.data.data`,
80
+ expected: srcChainAuthorityAddress,
81
+ actual: owner,
82
+ });
83
+ }
84
+ }
85
+ // CRITICAL: CreateATA mint must be wSOL
86
+ if (!addressEquals(realChainId, mint, SPL_NATIVE_MINT)) {
87
+ violations.push({
88
+ code: ViolationCode.SolanaWrapCreateAtaMintMismatch,
89
+ message: `CreateATA mint must be wSOL (${SPL_NATIVE_MINT})`,
90
+ path: `${actionPath}.data.data`,
91
+ expected: SPL_NATIVE_MINT,
92
+ actual: mint,
93
+ });
94
+ }
95
+ // CRITICAL (execution): associatedToken must match derived wSOL ATA
96
+ // Skipped in quote mode: expectedWsolAta is undefined because srcChainAuthorityAddress is a placeholder.
97
+ if (expectedWsolAta && !addressEquals(realChainId, associatedToken, expectedWsolAta)) {
98
+ violations.push({
99
+ code: ViolationCode.SolanaWrapCreateAtaAddressMismatch,
100
+ message: "CreateATA associatedToken must match derived wSOL ATA",
101
+ path: `${actionPath}.data.data`,
102
+ expected: expectedWsolAta,
103
+ actual: associatedToken,
104
+ });
105
+ }
106
+ return violations;
107
+ }
108
+ // =============================================
109
+ // SystemProgram.Transfer validation
110
+ // =============================================
111
+ function validateTransferInstruction(ix, actionPath, realChainId, trades, expectedWsolAta) {
112
+ const violations = [];
113
+ // CRITICAL (execution): transfer.to (accounts[1]) must be wSOL ATA.
114
+ // Skipped in quote mode: expectedWsolAta is undefined because srcChainAuthorityAddress is a placeholder.
115
+ const toAddress = ix.accountKeys[1];
116
+ if (expectedWsolAta && !addressEquals(realChainId, toAddress, expectedWsolAta)) {
117
+ violations.push({
118
+ code: ViolationCode.SolanaWrapTransferToMismatch,
119
+ message: "SystemProgram.Transfer destination must be wSOL ATA for wrap operation",
120
+ path: `${actionPath}.data.data`,
121
+ expected: expectedWsolAta,
122
+ actual: toAddress,
123
+ });
124
+ }
125
+ // CRITICAL: transfer amount must match sum of native SOL trades
126
+ const lamports = readU64LE(ix.data, 4);
127
+ const expectedAmount = sumNativeSolTradeAmounts(trades, realChainId);
128
+ // Skip amount validation if any trade has special amount (max/auto)
129
+ if (expectedAmount !== undefined && lamports !== expectedAmount) {
130
+ violations.push({
131
+ code: ViolationCode.SolanaWrapTransferAmountMismatch,
132
+ message: "SystemProgram.Transfer lamports does not match sum of native SOL trades",
133
+ path: `${actionPath}.data.data`,
134
+ expected: expectedAmount.toString(),
135
+ actual: lamports.toString(),
136
+ });
137
+ }
138
+ return violations;
139
+ }
140
+ // =============================================
141
+ // SyncNative validation
142
+ // =============================================
143
+ function validateSyncNativeInstruction(ix, actionPath, expectedWsolAta) {
144
+ // CRITICAL (execution): SyncNative account (accounts[0]) must be wSOL ATA.
145
+ // Skipped in quote mode: expectedWsolAta is undefined because srcChainAuthorityAddress is a placeholder.
146
+ const account = ix.accountKeys[0];
147
+ if (expectedWsolAta && account !== expectedWsolAta) {
148
+ return [{
149
+ code: ViolationCode.SolanaWrapSyncNativeAccountMismatch,
150
+ message: "SyncNative account must be wSOL ATA",
151
+ path: `${actionPath}.data.data`,
152
+ expected: expectedWsolAta,
153
+ actual: account,
154
+ }];
155
+ }
156
+ return [];
157
+ }
158
+ // =============================================
159
+ // Helpers
160
+ // =============================================
161
+ function computeExpectedWsolAta(quoteMode, srcChainAuthorityAddress) {
162
+ if (quoteMode || !srcChainAuthorityAddress)
163
+ return undefined;
164
+ // wSOL uses standard SPL Token program
165
+ return deriveAta(srcChainAuthorityAddress, SPL_NATIVE_MINT, SPL_TOKEN_PROGRAM);
166
+ }
167
+ // Sums srcChainTokenInAmount for all trades that use native SOL.
168
+ // Returns undefined if any matching trade has a special amount (max/auto).
169
+ function sumNativeSolTradeAmounts(trades, realChainId) {
170
+ let total = 0n;
171
+ for (const trade of trades) {
172
+ if (!addressEquals(realChainId, trade.srcChainTokenIn, SPL_NATIVE_MINT))
173
+ continue;
174
+ const raw = trade.srcChainTokenInAmount;
175
+ if (raw === SpecialAmount.Max || raw === SpecialAmount.Auto)
176
+ return undefined;
177
+ total += BigInt(raw);
178
+ }
179
+ return total;
180
+ }
181
+ function readU64LE(data, offset) {
182
+ let value = 0n;
183
+ for (let i = 0; i < 8; i++) {
184
+ value |= BigInt(data[offset + i]) << BigInt(i * 8);
185
+ }
186
+ return value;
187
+ }
188
+ //# sourceMappingURL=solana-op-wrap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solana-op-wrap.js","sourceRoot":"","sources":["../../../src/validations/solana-op-wrap.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,119 @@
1
+ import { ViolationCode, SolanaActionKind, SolanaActionOperation, } from "../types/index.js";
2
+ import { validateSolanaTransactionActions, validateSolanaSignTransactionActions, } from "./solana-transaction.js";
3
+ import { validateSolanaSignActions } from "./solana-sign.js";
4
+ export function validateSolanaRequiredActions(request, actions, basePath, realChainId, quoteMode, trades, srcChainAuthorityAddress, intent, envConfig) {
5
+ return [
6
+ ...validateUniqueActionIds(actions, basePath),
7
+ ...validateRequiredActionsOrder(actions, basePath, quoteMode),
8
+ ...validateAAConstraints(request, actions, basePath),
9
+ ...validateNoOperationActions(actions, basePath),
10
+ ...validateNoCompensationActions(actions, basePath),
11
+ ...validateSolanaTransactionActions(actions, basePath, realChainId, quoteMode, srcChainAuthorityAddress, request, trades, envConfig),
12
+ ...validateSolanaSignTransactionActions(actions, basePath, realChainId, quoteMode, srcChainAuthorityAddress, request, trades, envConfig),
13
+ ...validateSolanaSignActions(actions, basePath, realChainId, quoteMode, intent, envConfig),
14
+ ];
15
+ }
16
+ // HIGH: Each actionId must be unique (no duplicates in the list)
17
+ function validateUniqueActionIds(actions, basePath) {
18
+ const seen = new Map();
19
+ const violations = [];
20
+ for (let i = 0; i < actions.length; i++) {
21
+ const actionId = actions[i].actionId;
22
+ const firstIndex = seen.get(actionId);
23
+ if (firstIndex !== undefined) {
24
+ violations.push({
25
+ code: ViolationCode.SolanaDuplicateActionId,
26
+ message: `duplicate actionId "${actionId}" at indices ${firstIndex} and ${i}`,
27
+ path: `${basePath}.requiredActions[${i}].actionId`,
28
+ actual: actionId,
29
+ });
30
+ }
31
+ else {
32
+ seen.set(actionId, i);
33
+ }
34
+ }
35
+ return violations;
36
+ }
37
+ // MEDIUM: `Sign (Intent)` must be the last action.
38
+ // In quote mode, `Sign (Intent)` might be absent.
39
+ function validateRequiredActionsOrder(actions, basePath, quoteMode) {
40
+ const violations = [];
41
+ for (let i = 0; i < actions.length; i++) {
42
+ const action = actions[i];
43
+ const isSignIntent = action.type === SolanaActionKind.Sign
44
+ && action.actions.includes(SolanaActionOperation.Intent);
45
+ if (!isSignIntent)
46
+ continue;
47
+ if (!quoteMode && i !== actions.length - 1) {
48
+ violations.push({
49
+ code: ViolationCode.SolanaRequiredActionsOrder,
50
+ message: "Sign (Intent) action must be the last required action",
51
+ path: `${basePath}.requiredActions[${i}].type`,
52
+ expected: actions.length - 1,
53
+ actual: i,
54
+ });
55
+ }
56
+ }
57
+ return violations;
58
+ }
59
+ // CRITICAL: AA constraints
60
+ function validateAAConstraints(request, actions, basePath) {
61
+ const violations = [];
62
+ for (let i = 0; i < actions.length; i++) {
63
+ const action = actions[i];
64
+ if (request.enableAccountAbstraction) {
65
+ // CRITICAL: AA=true → no Transaction type actions
66
+ if (action.type === SolanaActionKind.Transaction) {
67
+ violations.push({
68
+ code: ViolationCode.SolanaForbiddenTransactionWithAA,
69
+ message: "Transaction action is forbidden when enableAccountAbstraction=true",
70
+ path: `${basePath}.requiredActions[${i}].type`,
71
+ actual: action.type,
72
+ });
73
+ }
74
+ }
75
+ else {
76
+ // CRITICAL: AA=false → no SignTransaction type actions
77
+ if (action.type === SolanaActionKind.SignTransaction) {
78
+ violations.push({
79
+ code: ViolationCode.SolanaForbiddenSignTransactionWithoutAA,
80
+ message: "SignTransaction action is forbidden when enableAccountAbstraction=false",
81
+ path: `${basePath}.requiredActions[${i}].type`,
82
+ actual: action.type,
83
+ });
84
+ }
85
+ }
86
+ }
87
+ return violations;
88
+ }
89
+ // HIGH: Operation actions must be absent
90
+ function validateNoOperationActions(actions, basePath) {
91
+ const violations = [];
92
+ for (let i = 0; i < actions.length; i++) {
93
+ if (actions[i].actions.includes(SolanaActionOperation.Operation)) {
94
+ violations.push({
95
+ code: ViolationCode.SolanaForbiddenOperationAction,
96
+ message: "Operation action is not expected in current API version",
97
+ path: `${basePath}.requiredActions[${i}].actions`,
98
+ actual: actions[i].actions,
99
+ });
100
+ }
101
+ }
102
+ return violations;
103
+ }
104
+ // HIGH: Compensation actions must be absent (disabled in current API version)
105
+ function validateNoCompensationActions(actions, basePath) {
106
+ const violations = [];
107
+ for (let i = 0; i < actions.length; i++) {
108
+ if (actions[i].actions.includes(SolanaActionOperation.Compensation)) {
109
+ violations.push({
110
+ code: ViolationCode.SolanaForbiddenCompensationAction,
111
+ message: "Compensation action is not expected in current API version",
112
+ path: `${basePath}.requiredActions[${i}].actions`,
113
+ actual: actions[i].actions,
114
+ });
115
+ }
116
+ }
117
+ return violations;
118
+ }
119
+ //# sourceMappingURL=solana-required-actions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solana-required-actions.js","sourceRoot":"","sources":["../../../src/validations/solana-required-actions.ts"],"names":[],"mappings":"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"}