@shogun-sdk/intents-sdk 1.0.0

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 (303) hide show
  1. package/README.md +124 -0
  2. package/dist/_esm/chains.js +46 -0
  3. package/dist/_esm/chains.js.map +1 -0
  4. package/dist/_esm/config.js +2 -0
  5. package/dist/_esm/config.js.map +1 -0
  6. package/dist/_esm/constants.js +46 -0
  7. package/dist/_esm/constants.js.map +1 -0
  8. package/dist/_esm/core/evm/abi/erc20.js +313 -0
  9. package/dist/_esm/core/evm/abi/erc20.js.map +1 -0
  10. package/dist/_esm/core/evm/abi/source-chain-guard.js +1716 -0
  11. package/dist/_esm/core/evm/abi/source-chain-guard.js.map +1 -0
  12. package/dist/_esm/core/evm/intent-provider.js +59 -0
  13. package/dist/_esm/core/evm/intent-provider.js.map +1 -0
  14. package/dist/_esm/core/evm/order-signature.js +19 -0
  15. package/dist/_esm/core/evm/order-signature.js.map +1 -0
  16. package/dist/_esm/core/evm/permit2.js +31 -0
  17. package/dist/_esm/core/evm/permit2.js.map +1 -0
  18. package/dist/_esm/core/evm/sdk.js +79 -0
  19. package/dist/_esm/core/evm/sdk.js.map +1 -0
  20. package/dist/_esm/core/evm/validator.js +46 -0
  21. package/dist/_esm/core/evm/validator.js.map +1 -0
  22. package/dist/_esm/core/evm/viem-provider.js +76 -0
  23. package/dist/_esm/core/evm/viem-provider.js.map +1 -0
  24. package/dist/_esm/core/order.js +190 -0
  25. package/dist/_esm/core/order.js.map +1 -0
  26. package/dist/_esm/core/sdk.js +120 -0
  27. package/dist/_esm/core/sdk.js.map +1 -0
  28. package/dist/_esm/core/solana/client.js +19 -0
  29. package/dist/_esm/core/solana/client.js.map +1 -0
  30. package/dist/_esm/core/solana/generated/accounts/adminSingleton.js +56 -0
  31. package/dist/_esm/core/solana/generated/accounts/adminSingleton.js.map +1 -0
  32. package/dist/_esm/core/solana/generated/accounts/guard.js +62 -0
  33. package/dist/_esm/core/solana/generated/accounts/guard.js.map +1 -0
  34. package/dist/_esm/core/solana/generated/accounts/index.js +11 -0
  35. package/dist/_esm/core/solana/generated/accounts/index.js.map +1 -0
  36. package/dist/_esm/core/solana/generated/accounts/order.js +78 -0
  37. package/dist/_esm/core/solana/generated/accounts/order.js.map +1 -0
  38. package/dist/_esm/core/solana/generated/errors/index.js +9 -0
  39. package/dist/_esm/core/solana/generated/errors/index.js.map +1 -0
  40. package/dist/_esm/core/solana/generated/errors/sourceChainGuard.js +35 -0
  41. package/dist/_esm/core/solana/generated/errors/sourceChainGuard.js.map +1 -0
  42. package/dist/_esm/core/solana/generated/index.js +13 -0
  43. package/dist/_esm/core/solana/generated/index.js.map +1 -0
  44. package/dist/_esm/core/solana/generated/instructions/cancelOrder.js +125 -0
  45. package/dist/_esm/core/solana/generated/instructions/cancelOrder.js.map +1 -0
  46. package/dist/_esm/core/solana/generated/instructions/claimTokens.js +142 -0
  47. package/dist/_esm/core/solana/generated/instructions/claimTokens.js.map +1 -0
  48. package/dist/_esm/core/solana/generated/instructions/collectProtocolFees.js +146 -0
  49. package/dist/_esm/core/solana/generated/instructions/collectProtocolFees.js.map +1 -0
  50. package/dist/_esm/core/solana/generated/instructions/createGuard.js +236 -0
  51. package/dist/_esm/core/solana/generated/instructions/createGuard.js.map +1 -0
  52. package/dist/_esm/core/solana/generated/instructions/createOrder.js +182 -0
  53. package/dist/_esm/core/solana/generated/instructions/createOrder.js.map +1 -0
  54. package/dist/_esm/core/solana/generated/instructions/index.js +19 -0
  55. package/dist/_esm/core/solana/generated/instructions/index.js.map +1 -0
  56. package/dist/_esm/core/solana/generated/instructions/initialize.js +109 -0
  57. package/dist/_esm/core/solana/generated/instructions/initialize.js.map +1 -0
  58. package/dist/_esm/core/solana/generated/instructions/preStartOrderExecution.js +123 -0
  59. package/dist/_esm/core/solana/generated/instructions/preStartOrderExecution.js.map +1 -0
  60. package/dist/_esm/core/solana/generated/instructions/setAdmin.js +98 -0
  61. package/dist/_esm/core/solana/generated/instructions/setAdmin.js.map +1 -0
  62. package/dist/_esm/core/solana/generated/instructions/setAuctioneerPubKey.js +104 -0
  63. package/dist/_esm/core/solana/generated/instructions/setAuctioneerPubKey.js.map +1 -0
  64. package/dist/_esm/core/solana/generated/instructions/startOrderExecution.js +105 -0
  65. package/dist/_esm/core/solana/generated/instructions/startOrderExecution.js.map +1 -0
  66. package/dist/_esm/core/solana/generated/instructions/startOrderExecutionAfterSwap.js +113 -0
  67. package/dist/_esm/core/solana/generated/instructions/startOrderExecutionAfterSwap.js.map +1 -0
  68. package/dist/_esm/core/solana/generated/programs/index.js +9 -0
  69. package/dist/_esm/core/solana/generated/programs/index.js.map +1 -0
  70. package/dist/_esm/core/solana/generated/programs/sourceChainGuard.js +82 -0
  71. package/dist/_esm/core/solana/generated/programs/sourceChainGuard.js.map +1 -0
  72. package/dist/_esm/core/solana/generated/shared/index.js +82 -0
  73. package/dist/_esm/core/solana/generated/shared/index.js.map +1 -0
  74. package/dist/_esm/core/solana/generated/types/adminUpdated.js +18 -0
  75. package/dist/_esm/core/solana/generated/types/adminUpdated.js.map +1 -0
  76. package/dist/_esm/core/solana/generated/types/auctioneerPubkeyUpdated.js +24 -0
  77. package/dist/_esm/core/solana/generated/types/auctioneerPubkeyUpdated.js.map +1 -0
  78. package/dist/_esm/core/solana/generated/types/executionStarted.js +30 -0
  79. package/dist/_esm/core/solana/generated/types/executionStarted.js.map +1 -0
  80. package/dist/_esm/core/solana/generated/types/guardCreated.js +28 -0
  81. package/dist/_esm/core/solana/generated/types/guardCreated.js.map +1 -0
  82. package/dist/_esm/core/solana/generated/types/index.js +16 -0
  83. package/dist/_esm/core/solana/generated/types/index.js.map +1 -0
  84. package/dist/_esm/core/solana/generated/types/orderCancelled.js +18 -0
  85. package/dist/_esm/core/solana/generated/types/orderCancelled.js.map +1 -0
  86. package/dist/_esm/core/solana/generated/types/orderCreated.js +36 -0
  87. package/dist/_esm/core/solana/generated/types/orderCreated.js.map +1 -0
  88. package/dist/_esm/core/solana/generated/types/orderFulfilled.js +18 -0
  89. package/dist/_esm/core/solana/generated/types/orderFulfilled.js.map +1 -0
  90. package/dist/_esm/core/solana/generated/types/tokenInSwapped.js +26 -0
  91. package/dist/_esm/core/solana/generated/types/tokenInSwapped.js.map +1 -0
  92. package/dist/_esm/core/solana/order-instructions.js +92 -0
  93. package/dist/_esm/core/solana/order-instructions.js.map +1 -0
  94. package/dist/_esm/core/solana/sdk.js +111 -0
  95. package/dist/_esm/core/solana/sdk.js.map +1 -0
  96. package/dist/_esm/core/solana/validator.js +22 -0
  97. package/dist/_esm/core/solana/validator.js.map +1 -0
  98. package/dist/_esm/core/sui/client.js +3 -0
  99. package/dist/_esm/core/sui/client.js.map +1 -0
  100. package/dist/_esm/core/sui/order-transaction.js +56 -0
  101. package/dist/_esm/core/sui/order-transaction.js.map +1 -0
  102. package/dist/_esm/core/sui/sdk.js +94 -0
  103. package/dist/_esm/core/sui/sdk.js.map +1 -0
  104. package/dist/_esm/core/sui/validator.js +25 -0
  105. package/dist/_esm/core/sui/validator.js.map +1 -0
  106. package/dist/_esm/errors/index.js +94 -0
  107. package/dist/_esm/errors/index.js.map +1 -0
  108. package/dist/_esm/index.js +7 -0
  109. package/dist/_esm/index.js.map +1 -0
  110. package/dist/_esm/package.json +1 -0
  111. package/dist/_esm/types/intent.js +2 -0
  112. package/dist/_esm/types/intent.js.map +1 -0
  113. package/dist/_esm/utils/base-validator.js +51 -0
  114. package/dist/_esm/utils/base-validator.js.map +1 -0
  115. package/dist/_esm/utils/logger.js +109 -0
  116. package/dist/_esm/utils/logger.js.map +1 -0
  117. package/dist/_esm/utils/order-validator.js +75 -0
  118. package/dist/_esm/utils/order-validator.js.map +1 -0
  119. package/dist/_esm/utils/parsers.js +10 -0
  120. package/dist/_esm/utils/parsers.js.map +1 -0
  121. package/dist/_esm/utils/type-utils.js +2 -0
  122. package/dist/_esm/utils/type-utils.js.map +1 -0
  123. package/dist/_types/chains.d.ts +69 -0
  124. package/dist/_types/chains.d.ts.map +1 -0
  125. package/dist/_types/config.d.ts +21 -0
  126. package/dist/_types/config.d.ts.map +1 -0
  127. package/dist/_types/constants.d.ts +18 -0
  128. package/dist/_types/constants.d.ts.map +1 -0
  129. package/dist/_types/core/evm/abi/erc20.d.ts +240 -0
  130. package/dist/_types/core/evm/abi/erc20.d.ts.map +1 -0
  131. package/dist/_types/core/evm/abi/source-chain-guard.d.ts +1343 -0
  132. package/dist/_types/core/evm/abi/source-chain-guard.d.ts.map +1 -0
  133. package/dist/_types/core/evm/intent-provider.d.ts +12 -0
  134. package/dist/_types/core/evm/intent-provider.d.ts.map +1 -0
  135. package/dist/_types/core/evm/order-signature.d.ts +19 -0
  136. package/dist/_types/core/evm/order-signature.d.ts.map +1 -0
  137. package/dist/_types/core/evm/permit2.d.ts +75 -0
  138. package/dist/_types/core/evm/permit2.d.ts.map +1 -0
  139. package/dist/_types/core/evm/sdk.d.ts +50 -0
  140. package/dist/_types/core/evm/sdk.d.ts.map +1 -0
  141. package/dist/_types/core/evm/validator.d.ts +13 -0
  142. package/dist/_types/core/evm/validator.d.ts.map +1 -0
  143. package/dist/_types/core/evm/viem-provider.d.ts +9657 -0
  144. package/dist/_types/core/evm/viem-provider.d.ts.map +1 -0
  145. package/dist/_types/core/order.d.ts +122 -0
  146. package/dist/_types/core/order.d.ts.map +1 -0
  147. package/dist/_types/core/sdk.d.ts +86 -0
  148. package/dist/_types/core/sdk.d.ts.map +1 -0
  149. package/dist/_types/core/solana/client.d.ts +11 -0
  150. package/dist/_types/core/solana/client.d.ts.map +1 -0
  151. package/dist/_types/core/solana/generated/accounts/adminSingleton.d.ts +36 -0
  152. package/dist/_types/core/solana/generated/accounts/adminSingleton.d.ts.map +1 -0
  153. package/dist/_types/core/solana/generated/accounts/guard.d.ts +48 -0
  154. package/dist/_types/core/solana/generated/accounts/guard.d.ts.map +1 -0
  155. package/dist/_types/core/solana/generated/accounts/index.d.ts +11 -0
  156. package/dist/_types/core/solana/generated/accounts/index.d.ts.map +1 -0
  157. package/dist/_types/core/solana/generated/accounts/order.d.ts +92 -0
  158. package/dist/_types/core/solana/generated/accounts/order.d.ts.map +1 -0
  159. package/dist/_types/core/solana/generated/errors/index.d.ts +9 -0
  160. package/dist/_types/core/solana/generated/errors/index.d.ts.map +1 -0
  161. package/dist/_types/core/solana/generated/errors/sourceChainGuard.d.ts +27 -0
  162. package/dist/_types/core/solana/generated/errors/sourceChainGuard.d.ts.map +1 -0
  163. package/dist/_types/core/solana/generated/index.d.ts +13 -0
  164. package/dist/_types/core/solana/generated/index.d.ts.map +1 -0
  165. package/dist/_types/core/solana/generated/instructions/cancelOrder.d.ts +108 -0
  166. package/dist/_types/core/solana/generated/instructions/cancelOrder.d.ts.map +1 -0
  167. package/dist/_types/core/solana/generated/instructions/claimTokens.d.ts +131 -0
  168. package/dist/_types/core/solana/generated/instructions/claimTokens.d.ts.map +1 -0
  169. package/dist/_types/core/solana/generated/instructions/collectProtocolFees.d.ts +91 -0
  170. package/dist/_types/core/solana/generated/instructions/collectProtocolFees.d.ts.map +1 -0
  171. package/dist/_types/core/solana/generated/instructions/createGuard.d.ts +133 -0
  172. package/dist/_types/core/solana/generated/instructions/createGuard.d.ts.map +1 -0
  173. package/dist/_types/core/solana/generated/instructions/createOrder.d.ts +122 -0
  174. package/dist/_types/core/solana/generated/instructions/createOrder.d.ts.map +1 -0
  175. package/dist/_types/core/solana/generated/instructions/index.d.ts +19 -0
  176. package/dist/_types/core/solana/generated/instructions/index.d.ts.map +1 -0
  177. package/dist/_types/core/solana/generated/instructions/initialize.d.ts +63 -0
  178. package/dist/_types/core/solana/generated/instructions/initialize.d.ts.map +1 -0
  179. package/dist/_types/core/solana/generated/instructions/preStartOrderExecution.d.ts +105 -0
  180. package/dist/_types/core/solana/generated/instructions/preStartOrderExecution.d.ts.map +1 -0
  181. package/dist/_types/core/solana/generated/instructions/setAdmin.d.ts +61 -0
  182. package/dist/_types/core/solana/generated/instructions/setAdmin.d.ts.map +1 -0
  183. package/dist/_types/core/solana/generated/instructions/setAuctioneerPubKey.d.ts +68 -0
  184. package/dist/_types/core/solana/generated/instructions/setAuctioneerPubKey.d.ts.map +1 -0
  185. package/dist/_types/core/solana/generated/instructions/startOrderExecution.d.ts +85 -0
  186. package/dist/_types/core/solana/generated/instructions/startOrderExecution.d.ts.map +1 -0
  187. package/dist/_types/core/solana/generated/instructions/startOrderExecutionAfterSwap.d.ts +95 -0
  188. package/dist/_types/core/solana/generated/instructions/startOrderExecutionAfterSwap.d.ts.map +1 -0
  189. package/dist/_types/core/solana/generated/programs/index.d.ts +9 -0
  190. package/dist/_types/core/solana/generated/programs/index.d.ts.map +1 -0
  191. package/dist/_types/core/solana/generated/programs/sourceChainGuard.d.ts +59 -0
  192. package/dist/_types/core/solana/generated/programs/sourceChainGuard.d.ts.map +1 -0
  193. package/dist/_types/core/solana/generated/shared/index.d.ts +52 -0
  194. package/dist/_types/core/solana/generated/shared/index.d.ts.map +1 -0
  195. package/dist/_types/core/solana/generated/types/adminUpdated.d.ts +16 -0
  196. package/dist/_types/core/solana/generated/types/adminUpdated.d.ts.map +1 -0
  197. package/dist/_types/core/solana/generated/types/auctioneerPubkeyUpdated.d.ts +17 -0
  198. package/dist/_types/core/solana/generated/types/auctioneerPubkeyUpdated.d.ts.map +1 -0
  199. package/dist/_types/core/solana/generated/types/executionStarted.d.ts +26 -0
  200. package/dist/_types/core/solana/generated/types/executionStarted.d.ts.map +1 -0
  201. package/dist/_types/core/solana/generated/types/guardCreated.d.ts +19 -0
  202. package/dist/_types/core/solana/generated/types/guardCreated.d.ts.map +1 -0
  203. package/dist/_types/core/solana/generated/types/index.d.ts +16 -0
  204. package/dist/_types/core/solana/generated/types/index.d.ts.map +1 -0
  205. package/dist/_types/core/solana/generated/types/orderCancelled.d.ts +16 -0
  206. package/dist/_types/core/solana/generated/types/orderCancelled.d.ts.map +1 -0
  207. package/dist/_types/core/solana/generated/types/orderCreated.d.ts +32 -0
  208. package/dist/_types/core/solana/generated/types/orderCreated.d.ts.map +1 -0
  209. package/dist/_types/core/solana/generated/types/orderFulfilled.d.ts +16 -0
  210. package/dist/_types/core/solana/generated/types/orderFulfilled.d.ts.map +1 -0
  211. package/dist/_types/core/solana/generated/types/tokenInSwapped.d.ts +22 -0
  212. package/dist/_types/core/solana/generated/types/tokenInSwapped.d.ts.map +1 -0
  213. package/dist/_types/core/solana/order-instructions.d.ts +12 -0
  214. package/dist/_types/core/solana/order-instructions.d.ts.map +1 -0
  215. package/dist/_types/core/solana/sdk.d.ts +65 -0
  216. package/dist/_types/core/solana/sdk.d.ts.map +1 -0
  217. package/dist/_types/core/solana/validator.d.ts +9 -0
  218. package/dist/_types/core/solana/validator.d.ts.map +1 -0
  219. package/dist/_types/core/sui/client.d.ts +3 -0
  220. package/dist/_types/core/sui/client.d.ts.map +1 -0
  221. package/dist/_types/core/sui/order-transaction.d.ts +9 -0
  222. package/dist/_types/core/sui/order-transaction.d.ts.map +1 -0
  223. package/dist/_types/core/sui/sdk.d.ts +55 -0
  224. package/dist/_types/core/sui/sdk.d.ts.map +1 -0
  225. package/dist/_types/core/sui/validator.d.ts +9 -0
  226. package/dist/_types/core/sui/validator.d.ts.map +1 -0
  227. package/dist/_types/errors/index.d.ts +32 -0
  228. package/dist/_types/errors/index.d.ts.map +1 -0
  229. package/dist/_types/index.d.ts +10 -0
  230. package/dist/_types/index.d.ts.map +1 -0
  231. package/dist/_types/types/intent.d.ts +129 -0
  232. package/dist/_types/types/intent.d.ts.map +1 -0
  233. package/dist/_types/utils/base-validator.d.ts +28 -0
  234. package/dist/_types/utils/base-validator.d.ts.map +1 -0
  235. package/dist/_types/utils/logger.d.ts +35 -0
  236. package/dist/_types/utils/logger.d.ts.map +1 -0
  237. package/dist/_types/utils/order-validator.d.ts +40 -0
  238. package/dist/_types/utils/order-validator.d.ts.map +1 -0
  239. package/dist/_types/utils/parsers.d.ts +4 -0
  240. package/dist/_types/utils/parsers.d.ts.map +1 -0
  241. package/dist/_types/utils/type-utils.d.ts +2 -0
  242. package/dist/_types/utils/type-utils.d.ts.map +1 -0
  243. package/package.json +62 -0
  244. package/src/chains.ts +77 -0
  245. package/src/config.ts +24 -0
  246. package/src/constants.ts +61 -0
  247. package/src/core/evm/abi/erc20.ts +312 -0
  248. package/src/core/evm/abi/source-chain-guard.ts +1715 -0
  249. package/src/core/evm/intent-provider.ts +63 -0
  250. package/src/core/evm/order-signature.ts +33 -0
  251. package/src/core/evm/permit2.ts +60 -0
  252. package/src/core/evm/sdk.ts +74 -0
  253. package/src/core/evm/validator.ts +60 -0
  254. package/src/core/evm/viem-provider.ts +79 -0
  255. package/src/core/order.ts +186 -0
  256. package/src/core/sdk.ts +154 -0
  257. package/src/core/solana/client.ts +37 -0
  258. package/src/core/solana/generated/accounts/adminSingleton.ts +136 -0
  259. package/src/core/solana/generated/accounts/guard.ts +156 -0
  260. package/src/core/solana/generated/accounts/index.ts +11 -0
  261. package/src/core/solana/generated/accounts/order.ts +218 -0
  262. package/src/core/solana/generated/errors/index.ts +9 -0
  263. package/src/core/solana/generated/errors/sourceChainGuard.ts +52 -0
  264. package/src/core/solana/generated/index.ts +13 -0
  265. package/src/core/solana/generated/instructions/cancelOrder.ts +357 -0
  266. package/src/core/solana/generated/instructions/claimTokens.ts +419 -0
  267. package/src/core/solana/generated/instructions/collectProtocolFees.ts +383 -0
  268. package/src/core/solana/generated/instructions/createGuard.ts +569 -0
  269. package/src/core/solana/generated/instructions/createOrder.ts +480 -0
  270. package/src/core/solana/generated/instructions/index.ts +19 -0
  271. package/src/core/solana/generated/instructions/initialize.ts +231 -0
  272. package/src/core/solana/generated/instructions/preStartOrderExecution.ts +362 -0
  273. package/src/core/solana/generated/instructions/setAdmin.ts +211 -0
  274. package/src/core/solana/generated/instructions/setAuctioneerPubKey.ts +241 -0
  275. package/src/core/solana/generated/instructions/startOrderExecution.ts +293 -0
  276. package/src/core/solana/generated/instructions/startOrderExecutionAfterSwap.ts +323 -0
  277. package/src/core/solana/generated/programs/index.ts +9 -0
  278. package/src/core/solana/generated/programs/sourceChainGuard.ts +223 -0
  279. package/src/core/solana/generated/shared/index.ts +124 -0
  280. package/src/core/solana/generated/types/adminUpdated.ts +35 -0
  281. package/src/core/solana/generated/types/auctioneerPubkeyUpdated.ts +44 -0
  282. package/src/core/solana/generated/types/executionStarted.ts +63 -0
  283. package/src/core/solana/generated/types/guardCreated.ts +50 -0
  284. package/src/core/solana/generated/types/index.ts +16 -0
  285. package/src/core/solana/generated/types/orderCancelled.ts +35 -0
  286. package/src/core/solana/generated/types/orderCreated.ts +80 -0
  287. package/src/core/solana/generated/types/orderFulfilled.ts +35 -0
  288. package/src/core/solana/generated/types/tokenInSwapped.ts +53 -0
  289. package/src/core/solana/order-instructions.ts +131 -0
  290. package/src/core/solana/sdk.ts +135 -0
  291. package/src/core/solana/validator.ts +26 -0
  292. package/src/core/sui/client.ts +3 -0
  293. package/src/core/sui/order-transaction.ts +78 -0
  294. package/src/core/sui/sdk.ts +95 -0
  295. package/src/core/sui/validator.ts +32 -0
  296. package/src/errors/index.ts +106 -0
  297. package/src/index.ts +10 -0
  298. package/src/types/intent.ts +143 -0
  299. package/src/utils/base-validator.ts +64 -0
  300. package/src/utils/logger.ts +128 -0
  301. package/src/utils/order-validator.ts +103 -0
  302. package/src/utils/parsers.ts +8 -0
  303. package/src/utils/type-utils.ts +1 -0
@@ -0,0 +1,35 @@
1
+ /**
2
+ * This code was AUTOGENERATED using the codama library.
3
+ * Please DO NOT EDIT THIS FILE, instead use visitors
4
+ * to add features, then rerun codama to update it.
5
+ *
6
+ * @see https://github.com/codama-idl/codama
7
+ */
8
+
9
+ import {
10
+ type Address,
11
+ type Codec,
12
+ combineCodec,
13
+ type Decoder,
14
+ type Encoder,
15
+ getAddressDecoder,
16
+ getAddressEncoder,
17
+ getStructDecoder,
18
+ getStructEncoder,
19
+ } from '@solana/kit';
20
+
21
+ export type OrderFulfilled = { orderId: Address };
22
+
23
+ export type OrderFulfilledArgs = OrderFulfilled;
24
+
25
+ export function getOrderFulfilledEncoder(): Encoder<OrderFulfilledArgs> {
26
+ return getStructEncoder([['orderId', getAddressEncoder()]]);
27
+ }
28
+
29
+ export function getOrderFulfilledDecoder(): Decoder<OrderFulfilled> {
30
+ return getStructDecoder([['orderId', getAddressDecoder()]]);
31
+ }
32
+
33
+ export function getOrderFulfilledCodec(): Codec<OrderFulfilledArgs, OrderFulfilled> {
34
+ return combineCodec(getOrderFulfilledEncoder(), getOrderFulfilledDecoder());
35
+ }
@@ -0,0 +1,53 @@
1
+ /**
2
+ * This code was AUTOGENERATED using the codama library.
3
+ * Please DO NOT EDIT THIS FILE, instead use visitors
4
+ * to add features, then rerun codama to update it.
5
+ *
6
+ * @see https://github.com/codama-idl/codama
7
+ */
8
+
9
+ import {
10
+ type Address,
11
+ type Codec,
12
+ combineCodec,
13
+ type Decoder,
14
+ type Encoder,
15
+ getAddressDecoder,
16
+ getAddressEncoder,
17
+ getStructDecoder,
18
+ getStructEncoder,
19
+ getU64Decoder,
20
+ getU64Encoder,
21
+ } from '@solana/kit';
22
+
23
+ export type TokenInSwapped = {
24
+ orderId: Address;
25
+ solver: Address;
26
+ stablecoinsAmount: bigint;
27
+ };
28
+
29
+ export type TokenInSwappedArgs = {
30
+ orderId: Address;
31
+ solver: Address;
32
+ stablecoinsAmount: number | bigint;
33
+ };
34
+
35
+ export function getTokenInSwappedEncoder(): Encoder<TokenInSwappedArgs> {
36
+ return getStructEncoder([
37
+ ['orderId', getAddressEncoder()],
38
+ ['solver', getAddressEncoder()],
39
+ ['stablecoinsAmount', getU64Encoder()],
40
+ ]);
41
+ }
42
+
43
+ export function getTokenInSwappedDecoder(): Decoder<TokenInSwapped> {
44
+ return getStructDecoder([
45
+ ['orderId', getAddressDecoder()],
46
+ ['solver', getAddressDecoder()],
47
+ ['stablecoinsAmount', getU64Decoder()],
48
+ ]);
49
+ }
50
+
51
+ export function getTokenInSwappedCodec(): Codec<TokenInSwappedArgs, TokenInSwapped> {
52
+ return combineCodec(getTokenInSwappedEncoder(), getTokenInSwappedDecoder());
53
+ }
@@ -0,0 +1,131 @@
1
+ import {
2
+ type Address,
3
+ address,
4
+ createNoopSigner,
5
+ fetchEncodedAccount,
6
+ generateKeyPairSigner,
7
+ getAddressEncoder,
8
+ getProgramDerivedAddress,
9
+ type IInstruction,
10
+ type KeyPairSigner,
11
+ } from '@solana/kit';
12
+ import { getTransferSolInstruction, SYSTEM_PROGRAM_ADDRESS } from '@solana-program/system';
13
+ import {
14
+ ASSOCIATED_TOKEN_PROGRAM_ADDRESS,
15
+ fetchMint,
16
+ getCreateAssociatedTokenInstructionAsync,
17
+ getSyncNativeInstruction,
18
+ } from '@solana-program/token';
19
+ import { ChainID } from '../../chains.js';
20
+ import { NATIVE_SOLANA_TOKEN_ADDRESS, SRC_CHAIN_GUARD, WRAPPED_SOL_MINT_ADDRESS } from '../../constants.js';
21
+ import type { Order } from '../order.js';
22
+ import { getDefaultSolanaRPC } from './client.js';
23
+ import { getCreateOrderInstruction } from './generated/index.js';
24
+
25
+ /**
26
+ * Generates Solana order instructions for creating an order
27
+ * @param order The order to generate instructions
28
+ * @returns Object containing the order public key and instructions
29
+ */
30
+ export async function getSolanaOrderInstructions(order: Order): Promise<{
31
+ orderKeyPair: KeyPairSigner<string>;
32
+ instructions: IInstruction[];
33
+ }> {
34
+ const rpc = getDefaultSolanaRPC();
35
+ const orderSigner = await generateKeyPairSigner();
36
+ const signer = createNoopSigner(order.user as Address);
37
+
38
+ let tokenInMint = address(order.sourceTokenAddress);
39
+
40
+ const orderUserAddress = address(order.user);
41
+ const spendingNative = tokenInMint === NATIVE_SOLANA_TOKEN_ADDRESS;
42
+
43
+ if (spendingNative) {
44
+ tokenInMint = WRAPPED_SOL_MINT_ADDRESS;
45
+ }
46
+
47
+ const tokenMintProgram = await fetchMint(rpc, tokenInMint);
48
+
49
+ const guardAddress = address(SRC_CHAIN_GUARD[ChainID.Solana]);
50
+
51
+ const addressEncoder = getAddressEncoder();
52
+
53
+ const [tokenInProgramAccount] = await getProgramDerivedAddress({
54
+ programAddress: ASSOCIATED_TOKEN_PROGRAM_ADDRESS,
55
+ seeds: [
56
+ addressEncoder.encode(orderUserAddress),
57
+ addressEncoder.encode(tokenMintProgram.programAddress),
58
+ addressEncoder.encode(tokenInMint),
59
+ ],
60
+ });
61
+
62
+ const [guardProgramAccount] = await getProgramDerivedAddress({
63
+ programAddress: ASSOCIATED_TOKEN_PROGRAM_ADDRESS,
64
+ seeds: [
65
+ // Owner
66
+ addressEncoder.encode(guardAddress),
67
+ // Token program
68
+ addressEncoder.encode(tokenMintProgram.programAddress),
69
+ // mint address
70
+ addressEncoder.encode(tokenInMint),
71
+ ],
72
+ });
73
+
74
+ const instructions: Array<IInstruction> = [];
75
+
76
+ // Handle native SOL
77
+ if (spendingNative) {
78
+ order.sourceTokenAddress = WRAPPED_SOL_MINT_ADDRESS;
79
+
80
+ const userTokenInAccount = await fetchEncodedAccount(rpc, tokenInProgramAccount);
81
+
82
+ if (!userTokenInAccount.exists) {
83
+ const createAccountIx = await getCreateAssociatedTokenInstructionAsync({
84
+ payer: signer,
85
+ ata: tokenInProgramAccount,
86
+ owner: orderUserAddress,
87
+ mint: tokenMintProgram.address,
88
+ tokenProgram: tokenMintProgram.programAddress,
89
+ });
90
+
91
+ instructions.push(createAccountIx);
92
+ }
93
+
94
+ const transferIx = getTransferSolInstruction({
95
+ source: signer,
96
+ destination: userTokenInAccount.address,
97
+ amount: order.sourceTokenAmount,
98
+ });
99
+
100
+ const syncNativeIx = getSyncNativeInstruction({
101
+ account: userTokenInAccount.address,
102
+ });
103
+
104
+ instructions.push(transferIx, syncNativeIx);
105
+ }
106
+
107
+ const executionHashUint8Array = order.executionDetailsHashToBytes();
108
+
109
+ const createOrderIx = getCreateOrderInstruction({
110
+ user: signer,
111
+ order: orderSigner,
112
+ guard: address(SRC_CHAIN_GUARD[ChainID.Solana]),
113
+ systemProgram: SYSTEM_PROGRAM_ADDRESS,
114
+ associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ADDRESS,
115
+ tokenInMint: tokenInMint,
116
+ userTokenInAccount: tokenInProgramAccount,
117
+ guardTokenInAccount: guardProgramAccount,
118
+ tokenInProgram: tokenMintProgram.programAddress,
119
+ amountIn: order.sourceTokenAmount,
120
+ deadline: order.deadline,
121
+ executionDetailsHash: executionHashUint8Array,
122
+ minStablecoinsAmount: order.minStablecoinAmount,
123
+ });
124
+
125
+ instructions.push(createOrderIx);
126
+
127
+ return {
128
+ instructions,
129
+ orderKeyPair: orderSigner,
130
+ };
131
+ }
@@ -0,0 +1,135 @@
1
+ import {
2
+ appendTransactionMessageInstructions,
3
+ compileTransaction,
4
+ createKeyPairFromBytes,
5
+ createNoopSigner,
6
+ createSignerFromKeyPair,
7
+ createTransactionMessage,
8
+ getBase58Encoder,
9
+ type KeyPairSigner,
10
+ pipe,
11
+ setTransactionMessageFeePayerSigner,
12
+ setTransactionMessageLifetimeUsingBlockhash,
13
+ signTransaction,
14
+ } from '@solana/kit';
15
+ import type { SolanaConfig } from '../../config.js';
16
+ import type { PreparedOrder } from '../../types/intent.js';
17
+ import { Order } from '../order.js';
18
+ import { BaseSDK } from '../sdk.js';
19
+ import { createSolanaClient, type SolanaClient } from './client.js';
20
+ import { getSolanaOrderInstructions } from './order-instructions.js';
21
+
22
+ /**
23
+ * Solana-specific SDK implementation
24
+ *
25
+ * Handles Solana-specific aspects of cross-chain swaps using Solana blockchain.
26
+ * Uses @solana/kit for transaction creation, signing, and submission.
27
+ * Supports cross-chain swaps from Solana to other supported chains.
28
+ */
29
+ export class SolanaSDK extends BaseSDK {
30
+ /** Configuration for Solana connection and authentication */
31
+ private readonly config: SolanaConfig;
32
+ /** Client for Solana RPC interactions and transaction handling */
33
+ private client: SolanaClient;
34
+
35
+ /**
36
+ * Creates a new instance of the Solana SDK
37
+ *
38
+ * @param config Solana configuration including privateKey, commitment level, and optional RPC URL
39
+ */
40
+ constructor(config: SolanaConfig) {
41
+ super();
42
+ this.config = config;
43
+ this.client = createSolanaClient(config);
44
+ }
45
+
46
+ /**
47
+ * Gets the user's Solana wallet address derived from their private key
48
+ *
49
+ * Uses @solana/kit to securely derive the wallet address from the private key
50
+ *
51
+ * @returns Promise resolving to the user's Solana address as a Base58-encoded string
52
+ * @throws {SolanaError} If address derivation fails
53
+ */
54
+ public async getUserAddress(): Promise<string> {
55
+ const signer = await this.getUserSigner();
56
+
57
+ return signer.address;
58
+ }
59
+
60
+ /**
61
+ * Creates a CryptoKeyPair from the user's private key
62
+ *
63
+ * Converts the Base58-encoded private key to the format required by WebCrypto API
64
+ *
65
+ * @returns Promise resolving to a CryptoKeyPair for transaction signing
66
+ * @private
67
+ */
68
+ private async getUserCryptoKeypair(): Promise<CryptoKeyPair> {
69
+ const encoder = getBase58Encoder();
70
+ const bytesWithPrefix = encoder.encode(this.config.privateKey);
71
+ return createKeyPairFromBytes(bytesWithPrefix);
72
+ }
73
+
74
+ /**
75
+ * Creates a KeyPairSigner from the user's crypto keypair
76
+ *
77
+ * The KeyPairSigner is used for transaction signing and verification
78
+ *
79
+ * @returns Promise resolving to a KeyPairSigner for transaction operations
80
+ * @private
81
+ */
82
+ private async getUserSigner(): Promise<KeyPairSigner<string>> {
83
+ const signer = await this.getUserCryptoKeypair();
84
+ return createSignerFromKeyPair(signer);
85
+ }
86
+
87
+ /**
88
+ * Prepares a Solana order for submission
89
+ *
90
+ * This method:
91
+ * 1. Gets the user's signer from their private key
92
+ * 2. Generates Solana-specific instructions for the order
93
+ * 3. Creates, signs, and submits the transaction to the Solana blockchain
94
+ * 4. Returns the prepared order with the orderPubkey for tracking
95
+ *
96
+ * @param order The validated order to prepare
97
+ * @returns Promise resolving to a prepared order with Solana-specific data
98
+ * @protected
99
+ */
100
+ protected async prepareOrder(order: Order): Promise<PreparedOrder> {
101
+ const signer = await this.getUserSigner();
102
+ const signerKeyPair = await this.getUserCryptoKeypair();
103
+
104
+ const { orderKeyPair, instructions } = await getSolanaOrderInstructions(order);
105
+
106
+ const noopSigner = createNoopSigner(signer.address);
107
+
108
+ const { value: latestBlockhash } = await this.client.rpc
109
+ .getLatestBlockhash({ commitment: this.config.commitment })
110
+ .send();
111
+
112
+ // TODO: Think if we should include transaction message on getSolanaOrderInstructions
113
+ const transactionMessage = pipe(
114
+ createTransactionMessage({ version: 0 }),
115
+ (tx) => setTransactionMessageFeePayerSigner(noopSigner, tx),
116
+ (tx) => setTransactionMessageLifetimeUsingBlockhash(latestBlockhash, tx),
117
+ (tx) => appendTransactionMessageInstructions(instructions, tx),
118
+ );
119
+
120
+ const myTx = compileTransaction(transactionMessage);
121
+
122
+ const signature = await signTransaction([signerKeyPair, orderKeyPair.keyPair], myTx);
123
+
124
+ await this.client.sendAndConfirmTransaction(signature, {
125
+ commitment: this.config.commitment,
126
+ });
127
+
128
+ return {
129
+ order,
130
+ preparedData: {
131
+ orderPubkey: orderKeyPair.address,
132
+ },
133
+ };
134
+ }
135
+ }
@@ -0,0 +1,26 @@
1
+ import { isAddress as isSolanaAddress } from '@solana/kit';
2
+ import { MAX_UINT_64 } from '../../constants.js';
3
+ import { BaseValidator } from '../../utils/base-validator.js';
4
+
5
+ export class SolanaValidator extends BaseValidator {
6
+ isValidAddress(address: string): boolean {
7
+ return isSolanaAddress(address);
8
+ }
9
+
10
+ isValidTokenAddress(tokenAddress: string): boolean {
11
+ return isSolanaAddress(tokenAddress);
12
+ }
13
+
14
+ isValidAmount(amount: bigint): boolean {
15
+ return amount > 0n && amount < MAX_UINT_64;
16
+ }
17
+
18
+ protected getChainName(): string {
19
+ return 'Solana';
20
+ }
21
+
22
+ public async chainSpecificValidation(): Promise<void> {
23
+ // No chain-specific validation implemented for now for Solana
24
+ return;
25
+ }
26
+ }
@@ -0,0 +1,3 @@
1
+ import { getFullnodeUrl, SuiClient } from '@mysten/sui/client';
2
+
3
+ export const createSuiClient = () => new SuiClient({ url: getFullnodeUrl('mainnet') });
@@ -0,0 +1,78 @@
1
+ import { Transaction } from '@mysten/sui/transactions';
2
+ import { normalizeSuiObjectId, SUI_TYPE_ARG } from '@mysten/sui/utils';
3
+
4
+ import { ChainID } from '../../chains.js';
5
+ import {
6
+ SRC_CHAIN_GUARD,
7
+ SUI_GUARD_COLLATERAL_TYPE,
8
+ SUI_GUARD_STABLECOIN_TYPE,
9
+ SUI_PACKAGE_ID,
10
+ } from '../../constants.js';
11
+ import { ValidationError } from '../../errors/index.js';
12
+ import type { Order } from '../order.js';
13
+ import { createSuiClient } from './client.js';
14
+
15
+ /**
16
+ * Generates Sui order transaction for creating an order
17
+ * @param order The order to generate transaction for
18
+ * @returns Object containing the transaction
19
+ */
20
+ export async function getSuiOrderTransaction(order: Order): Promise<Transaction> {
21
+ const userAddress = order.user;
22
+ const client = createSuiClient();
23
+ const coins = await client.getCoins({
24
+ owner: userAddress,
25
+ coinType: order.sourceTokenAddress,
26
+ });
27
+
28
+ const guardAddress = SRC_CHAIN_GUARD[ChainID.Sui];
29
+
30
+ const sourceTokenInCoins = coins.data.sort((a, b) => Number(b.balance) - Number(a.balance));
31
+
32
+ if (sourceTokenInCoins.length === 0) {
33
+ throw new ValidationError(`No token (${order.sourceTokenAddress}) to create order`);
34
+ }
35
+
36
+ const coinsInSum = sourceTokenInCoins.reduce((acc, coin) => acc + BigInt(coin.balance), 0n);
37
+
38
+ if (coinsInSum < order.sourceTokenAmount) {
39
+ throw new ValidationError(
40
+ `Insufficient balance to create order. Total coins is ${coinsInSum}, but order requires ${order.sourceTokenAmount}`,
41
+ );
42
+ }
43
+
44
+ const spendingGasCoin = normalizeSuiObjectId(order.sourceTokenAddress) === normalizeSuiObjectId(SUI_TYPE_ARG);
45
+
46
+ const tx = new Transaction();
47
+ const coinInArg = spendingGasCoin ? tx.gas : sourceTokenInCoins[0]!.coinObjectId;
48
+
49
+ if (sourceTokenInCoins.length > 1) {
50
+ // Merging coins IN into a single object just in case
51
+ tx.mergeCoins(
52
+ // merge into 1st coin object
53
+ coinInArg,
54
+ // merge the rest of coins
55
+ sourceTokenInCoins.slice(1).map((coin) => coin.coinObjectId),
56
+ );
57
+ }
58
+
59
+ const [coinIn] = tx.splitCoins(coinInArg, [order.sourceTokenAmount]);
60
+
61
+ tx.moveCall({
62
+ package: SUI_PACKAGE_ID,
63
+ module: 'source_chain_guard',
64
+ function: 'create_order',
65
+ arguments: [
66
+ tx.object(guardAddress),
67
+ coinIn,
68
+ tx.pure.u64(order.minStablecoinAmount),
69
+ tx.pure.u64(order.deadline * 1000), // Convert to milliseconds
70
+ tx.pure.vector('u8', order.executionDetailsHashToBytes()),
71
+ ],
72
+ typeArguments: [SUI_GUARD_COLLATERAL_TYPE, order.sourceTokenAddress, SUI_GUARD_STABLECOIN_TYPE],
73
+ });
74
+
75
+ tx.setSender(userAddress);
76
+
77
+ return tx;
78
+ }
@@ -0,0 +1,95 @@
1
+ import type { SuiClient } from '@mysten/sui/client';
2
+ import { Ed25519Keypair } from '@mysten/sui/keypairs/ed25519';
3
+
4
+ import type { SuiConfig } from '../../config.js';
5
+ import { OrderCreationError } from '../../errors/index.js';
6
+ import type { PreparedOrder } from '../../types/intent.js';
7
+ import { Order } from '../order.js';
8
+ import { BaseSDK } from '../sdk.js';
9
+ import { createSuiClient } from './client.js';
10
+ import { getSuiOrderTransaction } from './order-transaction.js';
11
+
12
+ /**
13
+ * Sui-specific SDK implementation
14
+ *
15
+ * Handles Sui-specific aspects of cross-chain swaps using the Sui blockchain.
16
+ * Uses @mysten/sui libraries for transaction creation, signing, and submission.
17
+ * Supports cross-chain swaps from Sui to other supported chains.
18
+ */
19
+ export class SuiSDK extends BaseSDK {
20
+ /** Configuration for Sui connection and authentication */
21
+ private readonly config: SuiConfig;
22
+ /** Client for Sui RPC interactions and transaction handling */
23
+ private client: SuiClient;
24
+
25
+ /**
26
+ * Creates a new instance of the Sui SDK
27
+ *
28
+ * @param config Sui configuration including privateKey and optional RPC URL
29
+ */
30
+ constructor(config: SuiConfig) {
31
+ super();
32
+ this.config = config;
33
+ this.client = createSuiClient();
34
+ }
35
+
36
+ /**
37
+ * Gets the user's Sui wallet address derived from their private key
38
+ *
39
+ * Uses Ed25519Keypair to securely derive the wallet address from the private key
40
+ *
41
+ * @returns Promise resolving to the user's Sui address as a hex string
42
+ */
43
+ public async getUserAddress(): Promise<string> {
44
+ return this.getKeyPair().toSuiAddress();
45
+ }
46
+
47
+ /**
48
+ * Creates an Ed25519Keypair from the user's private key
49
+ *
50
+ * The keypair is used for transaction signing and address derivation
51
+ *
52
+ * @returns Ed25519Keypair for cryptographic operations
53
+ * @private
54
+ */
55
+ private getKeyPair(): Ed25519Keypair {
56
+ return Ed25519Keypair.fromSecretKey(this.config.privateKey);
57
+ }
58
+
59
+ /**
60
+ * Prepares a Sui order for submission
61
+ *
62
+ * This method:
63
+ * 1. Gets the user's keypair from their private key
64
+ * 2. Generates Sui-specific transaction for the order
65
+ * 3. Signs and executes the transaction on the Sui blockchain
66
+ * 4. Returns the prepared order with the transaction hash for tracking
67
+ *
68
+ * @param order The validated order to prepare
69
+ * @returns Promise resolving to a prepared order with Sui-specific data
70
+ * @protected
71
+ */
72
+ protected async prepareOrder(order: Order): Promise<PreparedOrder> {
73
+ try {
74
+ const signer = this.getKeyPair();
75
+
76
+ const transaction = await getSuiOrderTransaction(order);
77
+
78
+ const tx = await this.client.signAndExecuteTransaction({
79
+ signer,
80
+ transaction,
81
+ });
82
+
83
+ await this.client.waitForTransaction({ digest: tx.digest });
84
+
85
+ return {
86
+ order,
87
+ preparedData: {
88
+ transactionHash: tx.digest,
89
+ },
90
+ };
91
+ } catch (error) {
92
+ throw new OrderCreationError('Failed to prepare Sui order', error);
93
+ }
94
+ }
95
+ }
@@ -0,0 +1,32 @@
1
+ import { isValidSuiAddress, normalizeSuiAddress } from '@mysten/sui/utils';
2
+ import { MAX_UINT_64 } from '../../constants.js';
3
+ import { BaseValidator } from '../../utils/base-validator.js';
4
+
5
+ const SUI_TOKEN_ADDRESS_REGEX = /^0x[a-fA-F0-9]{64}::\w+::\w+$/;
6
+
7
+ export class SuiValidator extends BaseValidator {
8
+ isValidAddress(address: string): boolean {
9
+ return isValidSuiAddress(normalizeSuiAddress(address));
10
+ }
11
+
12
+ isValidTokenAddress(tokenAddress: string): boolean {
13
+ const [address] = tokenAddress.split('::');
14
+
15
+ const isValidAddress = address !== undefined ? this.isValidAddress(address) : false;
16
+
17
+ return isValidAddress && SUI_TOKEN_ADDRESS_REGEX.test(tokenAddress);
18
+ }
19
+
20
+ isValidAmount(amount: bigint): boolean {
21
+ return amount > 0n && amount < MAX_UINT_64;
22
+ }
23
+
24
+ protected getChainName(): string {
25
+ return 'Sui';
26
+ }
27
+
28
+ public async chainSpecificValidation(): Promise<void> {
29
+ // No chain-specific validation implemented for now for Sui
30
+ return;
31
+ }
32
+ }
@@ -0,0 +1,106 @@
1
+ export class BaseError extends Error {
2
+ constructor(
3
+ message: string,
4
+ public override readonly cause?: unknown,
5
+ ) {
6
+ super(message);
7
+ this.name = this.constructor.name;
8
+ Object.setPrototypeOf(this, BaseError.prototype);
9
+ }
10
+
11
+ // Format the error for logging/debugging
12
+ public toJSON(): Record<string, unknown> {
13
+ return {
14
+ name: this.name,
15
+ message: this.message,
16
+ cause: this.formatCause(),
17
+ };
18
+ }
19
+
20
+ private formatCause(): unknown {
21
+ if (this.cause instanceof Error) {
22
+ if ('toJSON' in this.cause && typeof this.cause.toJSON === 'function') {
23
+ return this.cause.toJSON();
24
+ }
25
+ return {
26
+ name: this.cause.name,
27
+ message: this.cause.message,
28
+ ...(this.cause.stack && { stack: this.cause.stack }),
29
+ };
30
+ }
31
+ return this.cause;
32
+ }
33
+ }
34
+
35
+ // Chain-specific error classes
36
+ export class EVMError extends BaseError {
37
+ constructor(message: string, cause?: unknown) {
38
+ super(message, cause);
39
+ Object.setPrototypeOf(this, EVMError.prototype);
40
+ }
41
+ }
42
+
43
+ export class SolanaError extends BaseError {
44
+ constructor(message: string, cause?: unknown) {
45
+ super(message, cause);
46
+ Object.setPrototypeOf(this, SolanaError.prototype);
47
+ }
48
+ }
49
+
50
+ export class SuiError extends BaseError {
51
+ constructor(message: string, cause?: unknown) {
52
+ super(message, cause);
53
+ Object.setPrototypeOf(this, SuiError.prototype);
54
+ }
55
+ }
56
+
57
+ // Specific error types
58
+ export class ValidationError extends BaseError {
59
+ constructor(message: string, cause?: unknown) {
60
+ super(message, cause);
61
+ Object.setPrototypeOf(this, ValidationError.prototype);
62
+ }
63
+ }
64
+
65
+ export class OrderCreationError extends BaseError {
66
+ constructor(message: string, cause?: unknown) {
67
+ super(message, cause);
68
+ Object.setPrototypeOf(this, OrderCreationError.prototype);
69
+ }
70
+ }
71
+
72
+ export class NetworkError extends BaseError {
73
+ constructor(message: string, cause?: unknown) {
74
+ super(message, cause);
75
+ Object.setPrototypeOf(this, NetworkError.prototype);
76
+ }
77
+ }
78
+
79
+ export class InsufficientBalanceError extends BaseError {
80
+ constructor(message: string, cause?: unknown) {
81
+ super(message, cause);
82
+ Object.setPrototypeOf(this, InsufficientBalanceError.prototype);
83
+ }
84
+ }
85
+
86
+ export class InsufficientAllowanceError extends BaseError {
87
+ constructor(message: string, cause?: unknown) {
88
+ super(message, cause);
89
+ Object.setPrototypeOf(this, InsufficientAllowanceError.prototype);
90
+ }
91
+ }
92
+ export function handleError(error: unknown): BaseError {
93
+ if (error instanceof BaseError) {
94
+ return error;
95
+ }
96
+
97
+ if (error instanceof Error) {
98
+ return new BaseError(error.message, error);
99
+ }
100
+
101
+ return new BaseError(
102
+ typeof error === 'string' ? error : 'Unknown error occurred',
103
+
104
+ error,
105
+ );
106
+ }