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