@dev.sail.money/sailor 0.0.2-12

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 (319) hide show
  1. package/AGENTS.md +111 -0
  2. package/LICENSE +21 -0
  3. package/README.md +337 -0
  4. package/docs/PERMISSION_MODEL.md +93 -0
  5. package/examples/permissions/BoundedBet_Limitless_Base.sol +96 -0
  6. package/examples/permissions/BoundedBorrow_AaveV3_Arbitrum.sol +94 -0
  7. package/examples/permissions/BoundedPerp_GMXv2_Arbitrum.sol +143 -0
  8. package/examples/permissions/BoundedSwap_UniswapV3_Base.sol +113 -0
  9. package/examples/permissions/BoundedSwap_UniswapV4_Unichain.sol +144 -0
  10. package/examples/permissions/BoundedTransfer_ERC20_Ethereum.sol +73 -0
  11. package/examples/permissions/README.md +52 -0
  12. package/examples/permissions/foundry.toml +10 -0
  13. package/examples/permissions/interfaces/IPermission.sol +18 -0
  14. package/package.json +39 -0
  15. package/packages/cli/README.md +34 -0
  16. package/packages/cli/dist/index.cjs +42801 -0
  17. package/packages/cli/dist/server.cjs +51201 -0
  18. package/packages/sdk/README.md +65 -0
  19. package/packages/sdk/dist/abis/MandateFactory.d.ts +140 -0
  20. package/packages/sdk/dist/abis/MandateFactory.d.ts.map +1 -0
  21. package/packages/sdk/dist/abis/MandateFactory.js +93 -0
  22. package/packages/sdk/dist/abis/MandateFactory.js.map +1 -0
  23. package/packages/sdk/dist/abis/SailGovernance.d.ts +57 -0
  24. package/packages/sdk/dist/abis/SailGovernance.d.ts.map +1 -0
  25. package/packages/sdk/dist/abis/SailGovernance.js +52 -0
  26. package/packages/sdk/dist/abis/SailGovernance.js.map +1 -0
  27. package/packages/sdk/dist/abis/SailKernel.d.ts +466 -0
  28. package/packages/sdk/dist/abis/SailKernel.d.ts.map +1 -0
  29. package/packages/sdk/dist/abis/SailKernel.js +311 -0
  30. package/packages/sdk/dist/abis/SailKernel.js.map +1 -0
  31. package/packages/sdk/dist/abis/index.d.ts +4 -0
  32. package/packages/sdk/dist/abis/index.d.ts.map +1 -0
  33. package/packages/sdk/dist/abis/index.js +7 -0
  34. package/packages/sdk/dist/abis/index.js.map +1 -0
  35. package/packages/sdk/dist/capabilities.d.ts +77 -0
  36. package/packages/sdk/dist/capabilities.d.ts.map +1 -0
  37. package/packages/sdk/dist/capabilities.js +158 -0
  38. package/packages/sdk/dist/capabilities.js.map +1 -0
  39. package/packages/sdk/dist/client.d.ts +37 -0
  40. package/packages/sdk/dist/client.d.ts.map +1 -0
  41. package/packages/sdk/dist/client.js +646 -0
  42. package/packages/sdk/dist/client.js.map +1 -0
  43. package/packages/sdk/dist/deployments.d.ts +82 -0
  44. package/packages/sdk/dist/deployments.d.ts.map +1 -0
  45. package/packages/sdk/dist/deployments.js +197 -0
  46. package/packages/sdk/dist/deployments.js.map +1 -0
  47. package/packages/sdk/dist/discovery.d.ts +10 -0
  48. package/packages/sdk/dist/discovery.d.ts.map +1 -0
  49. package/packages/sdk/dist/discovery.js +41 -0
  50. package/packages/sdk/dist/discovery.js.map +1 -0
  51. package/packages/sdk/dist/eip712.d.ts +257 -0
  52. package/packages/sdk/dist/eip712.d.ts.map +1 -0
  53. package/packages/sdk/dist/eip712.js +255 -0
  54. package/packages/sdk/dist/eip712.js.map +1 -0
  55. package/packages/sdk/dist/errors.d.ts +47 -0
  56. package/packages/sdk/dist/errors.d.ts.map +1 -0
  57. package/packages/sdk/dist/errors.js +168 -0
  58. package/packages/sdk/dist/errors.js.map +1 -0
  59. package/packages/sdk/dist/fees.d.ts +16 -0
  60. package/packages/sdk/dist/fees.d.ts.map +1 -0
  61. package/packages/sdk/dist/fees.js +51 -0
  62. package/packages/sdk/dist/fees.js.map +1 -0
  63. package/packages/sdk/dist/index.d.ts +23 -0
  64. package/packages/sdk/dist/index.d.ts.map +1 -0
  65. package/packages/sdk/dist/index.js +16 -0
  66. package/packages/sdk/dist/index.js.map +1 -0
  67. package/packages/sdk/dist/intelligence.d.ts +923 -0
  68. package/packages/sdk/dist/intelligence.d.ts.map +1 -0
  69. package/packages/sdk/dist/intelligence.js +357 -0
  70. package/packages/sdk/dist/intelligence.js.map +1 -0
  71. package/packages/sdk/dist/keyring.d.ts +60 -0
  72. package/packages/sdk/dist/keyring.d.ts.map +1 -0
  73. package/packages/sdk/dist/keyring.js +159 -0
  74. package/packages/sdk/dist/keyring.js.map +1 -0
  75. package/packages/sdk/dist/lifi.d.ts +83 -0
  76. package/packages/sdk/dist/lifi.d.ts.map +1 -0
  77. package/packages/sdk/dist/lifi.js +69 -0
  78. package/packages/sdk/dist/lifi.js.map +1 -0
  79. package/packages/sdk/dist/safe.d.ts +158 -0
  80. package/packages/sdk/dist/safe.d.ts.map +1 -0
  81. package/packages/sdk/dist/safe.js +163 -0
  82. package/packages/sdk/dist/safe.js.map +1 -0
  83. package/packages/sdk/dist/signing.d.ts +106 -0
  84. package/packages/sdk/dist/signing.d.ts.map +1 -0
  85. package/packages/sdk/dist/signing.js +2 -0
  86. package/packages/sdk/dist/signing.js.map +1 -0
  87. package/packages/sdk/dist/templates/ammLiquidity.d.ts +16 -0
  88. package/packages/sdk/dist/templates/ammLiquidity.d.ts.map +1 -0
  89. package/packages/sdk/dist/templates/ammLiquidity.js +60 -0
  90. package/packages/sdk/dist/templates/ammLiquidity.js.map +1 -0
  91. package/packages/sdk/dist/templates/approveAndCallBatch.d.ts +14 -0
  92. package/packages/sdk/dist/templates/approveAndCallBatch.d.ts.map +1 -0
  93. package/packages/sdk/dist/templates/approveAndCallBatch.js +53 -0
  94. package/packages/sdk/dist/templates/approveAndCallBatch.js.map +1 -0
  95. package/packages/sdk/dist/templates/boundedBorrow.d.ts +16 -0
  96. package/packages/sdk/dist/templates/boundedBorrow.d.ts.map +1 -0
  97. package/packages/sdk/dist/templates/boundedBorrow.js +56 -0
  98. package/packages/sdk/dist/templates/boundedBorrow.js.map +1 -0
  99. package/packages/sdk/dist/templates/boundedSwap.d.ts +16 -0
  100. package/packages/sdk/dist/templates/boundedSwap.d.ts.map +1 -0
  101. package/packages/sdk/dist/templates/boundedSwap.js +56 -0
  102. package/packages/sdk/dist/templates/boundedSwap.js.map +1 -0
  103. package/packages/sdk/dist/templates/defiBundle.d.ts +14 -0
  104. package/packages/sdk/dist/templates/defiBundle.d.ts.map +1 -0
  105. package/packages/sdk/dist/templates/defiBundle.js +52 -0
  106. package/packages/sdk/dist/templates/defiBundle.js.map +1 -0
  107. package/packages/sdk/dist/templates/index.d.ts +15 -0
  108. package/packages/sdk/dist/templates/index.d.ts.map +1 -0
  109. package/packages/sdk/dist/templates/index.js +8 -0
  110. package/packages/sdk/dist/templates/index.js.map +1 -0
  111. package/packages/sdk/dist/templates/pendle.d.ts +14 -0
  112. package/packages/sdk/dist/templates/pendle.d.ts.map +1 -0
  113. package/packages/sdk/dist/templates/pendle.js +52 -0
  114. package/packages/sdk/dist/templates/pendle.js.map +1 -0
  115. package/packages/sdk/dist/templates/transferTarget.d.ts +10 -0
  116. package/packages/sdk/dist/templates/transferTarget.d.ts.map +1 -0
  117. package/packages/sdk/dist/templates/transferTarget.js +42 -0
  118. package/packages/sdk/dist/templates/transferTarget.js.map +1 -0
  119. package/packages/sdk/dist/types.d.ts +382 -0
  120. package/packages/sdk/dist/types.d.ts.map +1 -0
  121. package/packages/sdk/dist/types.js +2 -0
  122. package/packages/sdk/dist/types.js.map +1 -0
  123. package/packages/sdk/package.json +52 -0
  124. package/packages/ui/dist/assets/Arc-VDBY7LNS-BChRXCXW.js +1 -0
  125. package/packages/ui/dist/assets/Brave-BRAKJXDS-mq-Xo37j.js +1 -0
  126. package/packages/ui/dist/assets/Browser-76IHF3Y2-BMhRaC5Z.js +1 -0
  127. package/packages/ui/dist/assets/Chrome-65Q5P54Y-DR9MQEVr.js +1 -0
  128. package/packages/ui/dist/assets/Edge-XSPUTORV-DEoZslQE.js +1 -0
  129. package/packages/ui/dist/assets/Firefox-AAHGJQIP-Bp_Hm04m.js +1 -0
  130. package/packages/ui/dist/assets/Linux-OO4TNCLJ-B0aw93n9.js +1 -0
  131. package/packages/ui/dist/assets/Macos-MW4AE7LN-Vvm8Drw3.js +1 -0
  132. package/packages/ui/dist/assets/Opera-KQZLSACL-Cwv5MDFy.js +1 -0
  133. package/packages/ui/dist/assets/Safari-ZPL37GXR-C4Ggg6rz.js +1 -0
  134. package/packages/ui/dist/assets/Windows-PPTHQER6-BlyV2p7Y.js +1 -0
  135. package/packages/ui/dist/assets/add-DaJhwIBV.js +15 -0
  136. package/packages/ui/dist/assets/all-wallets-BUxsqWXi.js +6 -0
  137. package/packages/ui/dist/assets/apechain-SX5YFU6N-q5qBv-mp.js +1 -0
  138. package/packages/ui/dist/assets/app-store-DkltwTqE.js +17 -0
  139. package/packages/ui/dist/assets/apple-owVOeaIT.js +18 -0
  140. package/packages/ui/dist/assets/ar_AR-LIPSOZP5-BQrIDibT.js +1519 -0
  141. package/packages/ui/dist/assets/arbitrum-WURIBY6W-CqVkHBr5.js +1 -0
  142. package/packages/ui/dist/assets/arrow-bottom-D2mmNJve.js +8 -0
  143. package/packages/ui/dist/assets/arrow-bottom-circle-CbNYijx-.js +11 -0
  144. package/packages/ui/dist/assets/arrow-left-DJB61s4C.js +8 -0
  145. package/packages/ui/dist/assets/arrow-right-BBrsQ9R4.js +8 -0
  146. package/packages/ui/dist/assets/arrow-top-Cil6bOc8.js +8 -0
  147. package/packages/ui/dist/assets/assets-Q6ZU7ZJ5-P8HioiAD.js +1 -0
  148. package/packages/ui/dist/assets/avalanche-KOMJD3XY-Dsn_JPR4.js +1 -0
  149. package/packages/ui/dist/assets/bank-CbwEmRo3.js +14 -0
  150. package/packages/ui/dist/assets/base-OAXLRA4F-CoYTVIiL.js +1 -0
  151. package/packages/ui/dist/assets/base-QS6CYWIN-CsjdbWCf.js +1 -0
  152. package/packages/ui/dist/assets/basic-CLNfjw3m.js +2128 -0
  153. package/packages/ui/dist/assets/berachain-NJECWIVC-DumxnFvf.js +1 -0
  154. package/packages/ui/dist/assets/blast-V555OVXZ-BbhJh1tj.js +1 -0
  155. package/packages/ui/dist/assets/browser-B5TtF4Pb.js +14 -0
  156. package/packages/ui/dist/assets/bsc-N647EYR2-B2nLKXWV.js +1 -0
  157. package/packages/ui/dist/assets/card-CO7BVB-C.js +14 -0
  158. package/packages/ui/dist/assets/ccip-2W7K3_J3.js +1 -0
  159. package/packages/ui/dist/assets/celo-GEP4TUHG-CenIBYLU.js +1 -0
  160. package/packages/ui/dist/assets/checkmark-BEtSHq9m.js +11 -0
  161. package/packages/ui/dist/assets/checkmark-bold-D9xGHzPE.js +8 -0
  162. package/packages/ui/dist/assets/chevron-bottom-BDztht6i.js +8 -0
  163. package/packages/ui/dist/assets/chevron-left-EV4GFNbc.js +8 -0
  164. package/packages/ui/dist/assets/chevron-right-B4_bB9oR.js +8 -0
  165. package/packages/ui/dist/assets/chevron-top-D54xPNzF.js +8 -0
  166. package/packages/ui/dist/assets/chrome-store-DYUpAJJq.js +61 -0
  167. package/packages/ui/dist/assets/clock-Ca1T1Soz.js +8 -0
  168. package/packages/ui/dist/assets/close-BZqWjurK.js +8 -0
  169. package/packages/ui/dist/assets/coinPlaceholder-e6fl2XDo.js +8 -0
  170. package/packages/ui/dist/assets/compass-DCLC7zIh.js +8 -0
  171. package/packages/ui/dist/assets/connect-UA7M4XW6-IY3X6Bmr.js +1 -0
  172. package/packages/ui/dist/assets/copy-Th2AaD-O.js +15 -0
  173. package/packages/ui/dist/assets/core-Ckx_cyuH.js +907 -0
  174. package/packages/ui/dist/assets/create-FASO7PVG-D_rvSpre.js +1 -0
  175. package/packages/ui/dist/assets/cronos-HJPAQTAE-BEOvlOC4.js +1 -0
  176. package/packages/ui/dist/assets/cursor-DV7rOqbJ.js +3 -0
  177. package/packages/ui/dist/assets/cursor-transparent-BKHeABKB.js +12 -0
  178. package/packages/ui/dist/assets/de_DE-YE3KOFHU-BRt5ztUe.js +1519 -0
  179. package/packages/ui/dist/assets/degen-FQQ4XGHB-CeHTs88l.js +1 -0
  180. package/packages/ui/dist/assets/desktop-CBjY8t6F.js +9 -0
  181. package/packages/ui/dist/assets/disconnect-DbSs2cli.js +8 -0
  182. package/packages/ui/dist/assets/discord-ZlLOAUkM.js +17 -0
  183. package/packages/ui/dist/assets/es_419-7LMPU7G4-DH7rM0yQ.js +1519 -0
  184. package/packages/ui/dist/assets/ethereum-RGGVA4PY-SWGOlkuk.js +1 -0
  185. package/packages/ui/dist/assets/etherscan-CKUrqWYN.js +6 -0
  186. package/packages/ui/dist/assets/events-CiKP71cK.js +1 -0
  187. package/packages/ui/dist/assets/exclamation-triangle-DA1QzFiO.js +4 -0
  188. package/packages/ui/dist/assets/extension-BVJkmvpJ.js +8 -0
  189. package/packages/ui/dist/assets/external-link-D_bsR7B2.js +8 -0
  190. package/packages/ui/dist/assets/facebook-CmFmhojx.js +26 -0
  191. package/packages/ui/dist/assets/fallback-Ofl6uSnB.js +1 -0
  192. package/packages/ui/dist/assets/farcaster-Co-M3Ss8.js +12 -0
  193. package/packages/ui/dist/assets/filters-B1WwNaFU.js +8 -0
  194. package/packages/ui/dist/assets/flow-5FQJFCTK-CUie2reO.js +1 -0
  195. package/packages/ui/dist/assets/fr_FR-VBJP3ZLL-B-_ocunw.js +1519 -0
  196. package/packages/ui/dist/assets/github-CP4fP6gn.js +18 -0
  197. package/packages/ui/dist/assets/gnosis-37ZC4RBL-B137OtHZ.js +1 -0
  198. package/packages/ui/dist/assets/google-CsOIXJ6V.js +18 -0
  199. package/packages/ui/dist/assets/gravity-J5YQHTYH-Bj6B0uod.js +1 -0
  200. package/packages/ui/dist/assets/hardhat-TX56IT5N-CV1FY-wE.js +1 -0
  201. package/packages/ui/dist/assets/help-circle-DiMkomdF.js +12 -0
  202. package/packages/ui/dist/assets/hi_IN-WBVD5XYI-D73g2UFs.js +1519 -0
  203. package/packages/ui/dist/assets/hyperevm-VKPAA4SA-CHwraEsx.js +1 -0
  204. package/packages/ui/dist/assets/id-lmscL5LX.js +12 -0
  205. package/packages/ui/dist/assets/id_ID-SBYANJ7G-Cjpa4ay6.js +1519 -0
  206. package/packages/ui/dist/assets/image-B-ubJrY5.js +4 -0
  207. package/packages/ui/dist/assets/index-BaukYv-x.js +16 -0
  208. package/packages/ui/dist/assets/index-CF0KMmke.js +395 -0
  209. package/packages/ui/dist/assets/index-CKxgNxS9.css +1 -0
  210. package/packages/ui/dist/assets/index-CZR1Qjhs.js +1 -0
  211. package/packages/ui/dist/assets/index-DVgfCzCo.js +1 -0
  212. package/packages/ui/dist/assets/index-Dbh5V1Z0.js +1 -0
  213. package/packages/ui/dist/assets/index-Q2Yai4Fe.js +2103 -0
  214. package/packages/ui/dist/assets/index.es-C78cE5SI.js +26 -0
  215. package/packages/ui/dist/assets/info-Cqg57EVo.js +3 -0
  216. package/packages/ui/dist/assets/info-circle-DkeSWNKV.js +12 -0
  217. package/packages/ui/dist/assets/ink-FZMYZWHG-62p-5IK5.js +1 -0
  218. package/packages/ui/dist/assets/ja_JP-ZRMWJV3I-DXbifiMm.js +1519 -0
  219. package/packages/ui/dist/assets/kaia-65D2U3PU-JmuLQ4gC.js +1 -0
  220. package/packages/ui/dist/assets/ko_KR-FR54RFUG-upinSHjQ.js +1519 -0
  221. package/packages/ui/dist/assets/lightbulb-DNlO4qKh.js +3 -0
  222. package/packages/ui/dist/assets/linea-QRMVQ5DY-DuI3vv0d.js +1 -0
  223. package/packages/ui/dist/assets/login-UP3DZBGS-Db_wM5oQ.js +1 -0
  224. package/packages/ui/dist/assets/mail-kVQ8Jb9Y.js +8 -0
  225. package/packages/ui/dist/assets/manta-SI27YFEJ-CpVOKa06.js +1 -0
  226. package/packages/ui/dist/assets/mantle-CKIUT334-DR2WgqzU.js +1 -0
  227. package/packages/ui/dist/assets/metaMaskWallet-EI6MED72-D5HFOsnz.js +1 -0
  228. package/packages/ui/dist/assets/metamask-sdk-CBalSvz7.js +542 -0
  229. package/packages/ui/dist/assets/mobile-BEteuhF7.js +9 -0
  230. package/packages/ui/dist/assets/monad-4KWC6TSS-DVXSkpiz.js +1 -0
  231. package/packages/ui/dist/assets/more-DBWmXQli.js +11 -0
  232. package/packages/ui/dist/assets/ms_MY-EZSGYYYQ-4cPLK-3L.js +1519 -0
  233. package/packages/ui/dist/assets/native-CJ5et6AR.js +1 -0
  234. package/packages/ui/dist/assets/network-placeholder-Dg1uUHiL.js +14 -0
  235. package/packages/ui/dist/assets/nftPlaceholder-i3AHSiD9.js +8 -0
  236. package/packages/ui/dist/assets/off-BtMm0fi2.js +8 -0
  237. package/packages/ui/dist/assets/optimism-HAF2GUT7-ec6Nqxs9.js +1 -0
  238. package/packages/ui/dist/assets/parseSignature-Cb5FlWWg.js +1 -0
  239. package/packages/ui/dist/assets/play-store-iKKkXa6a.js +32 -0
  240. package/packages/ui/dist/assets/plus-CA5NaRtb.js +13 -0
  241. package/packages/ui/dist/assets/polygon-WW6ZI7PM-DXlmm4L1.js +1 -0
  242. package/packages/ui/dist/assets/pt_BR-JQFQ3P4L-DOHfdcA2.js +1519 -0
  243. package/packages/ui/dist/assets/qr-code-D2kiqR7h.js +6 -0
  244. package/packages/ui/dist/assets/rainbowWallet-O26YNBMX-DUhYus-9.js +1 -0
  245. package/packages/ui/dist/assets/recycle-horizontal-Dcme7R03.js +9 -0
  246. package/packages/ui/dist/assets/refresh-Dega3sDp.js +8 -0
  247. package/packages/ui/dist/assets/refresh-S4T5V5GX-CwqIaaxK.js +1 -0
  248. package/packages/ui/dist/assets/reown-logo-xNkksyWJ.js +12 -0
  249. package/packages/ui/dist/assets/ronin-EMCPYXZT-N-QBHZdV.js +1 -0
  250. package/packages/ui/dist/assets/ru_RU-Z42UEJBP-Cvb2oWxQ.js +1519 -0
  251. package/packages/ui/dist/assets/safeWallet-5MNKTR5Z-D-5imDLD.js +1 -0
  252. package/packages/ui/dist/assets/sanko-RHQYXGM5-OX010CbN.js +1 -0
  253. package/packages/ui/dist/assets/scan-4UYSQ56Q-CjMz6-XC.js +1 -0
  254. package/packages/ui/dist/assets/scroll-5OBGQVOV-DJFECiai.js +1 -0
  255. package/packages/ui/dist/assets/search-HYl7NO8x.js +8 -0
  256. package/packages/ui/dist/assets/secp256k1-Cxd6_SiH.js +1 -0
  257. package/packages/ui/dist/assets/send-CJU8CUAo.js +15 -0
  258. package/packages/ui/dist/assets/sign-A7IJEUT5-CGsRnPrd.js +1 -0
  259. package/packages/ui/dist/assets/superposition-HG6MMR2Y-bRkgatRO.js +1 -0
  260. package/packages/ui/dist/assets/swapHorizontal-IMUKiUre.js +8 -0
  261. package/packages/ui/dist/assets/swapHorizontalBold-CNYnNJ9-.js +8 -0
  262. package/packages/ui/dist/assets/swapHorizontalMedium-B9VxEYsT.js +16 -0
  263. package/packages/ui/dist/assets/swapHorizontalRoundedBold-Dz33l_Jh.js +8 -0
  264. package/packages/ui/dist/assets/swapVertical-CHUmjVJ0.js +8 -0
  265. package/packages/ui/dist/assets/telegram-kl9S2mbU.js +16 -0
  266. package/packages/ui/dist/assets/th_TH-4YB4VSB2-BUipNP-V.js +1519 -0
  267. package/packages/ui/dist/assets/three-dots-U5lhA1Am.js +5 -0
  268. package/packages/ui/dist/assets/tr_TR-5FKHPPIO-D5jTpIm9.js +1519 -0
  269. package/packages/ui/dist/assets/twitch-KTEUWXEp.js +18 -0
  270. package/packages/ui/dist/assets/twitterIcon-BHiq8mRg.js +6 -0
  271. package/packages/ui/dist/assets/uk_UA-ZD4IBC52-DgnQrpzl.js +1519 -0
  272. package/packages/ui/dist/assets/unichain-C5BWO2ZY-BfguYsnu.js +1 -0
  273. package/packages/ui/dist/assets/verify-CfN-BXNd.js +8 -0
  274. package/packages/ui/dist/assets/verify-filled-DwZccetj.js +8 -0
  275. package/packages/ui/dist/assets/vi_VN-5EVRZKLY-x078672g.js +1519 -0
  276. package/packages/ui/dist/assets/w3m-modal-CS-PFqPE.js +642 -0
  277. package/packages/ui/dist/assets/wallet-DVlGkhOY.js +8 -0
  278. package/packages/ui/dist/assets/wallet-placeholder-CvR_iEWX.js +14 -0
  279. package/packages/ui/dist/assets/walletConnectWallet-YHWKVTDY-D3lyiczV.js +1 -0
  280. package/packages/ui/dist/assets/walletconnect-8pZBDvVI.js +30 -0
  281. package/packages/ui/dist/assets/warning-circle-ylLEE0Yp.js +12 -0
  282. package/packages/ui/dist/assets/x-C_TBsTMj.js +12 -0
  283. package/packages/ui/dist/assets/xdc-KJ3TDBYO-DNV6zchh.js +1 -0
  284. package/packages/ui/dist/assets/zetachain-TLDS5IPW-Udhyw16T.js +1 -0
  285. package/packages/ui/dist/assets/zh_CN-4XK5YJPR-Bt6Yz5Ek.js +1519 -0
  286. package/packages/ui/dist/assets/zh_HK-N4YN2WSI-Cvzl1V16.js +1519 -0
  287. package/packages/ui/dist/assets/zh_TW-CNCRXH6Z-BNelatfN.js +1519 -0
  288. package/packages/ui/dist/assets/zksync-DH7HK5U4-Dt4usFw6.js +1 -0
  289. package/packages/ui/dist/assets/zora-FYL5H3IO-iB4wygST.js +1 -0
  290. package/packages/ui/dist/index.html +14 -0
  291. package/scripts/check-docs.mjs +262 -0
  292. package/scripts/check-init.mjs +109 -0
  293. package/scripts/postinstall.js +366 -0
  294. package/templates/custom-mandate/.sail/contracts/interfaces/IPermission.sol +18 -0
  295. package/templates/custom-mandate/README.md +85 -0
  296. package/templates/custom-mandate/foundry.toml +8 -0
  297. package/templates/custom-mandate/mandates/BoundedCallPermission.sol +35 -0
  298. package/templates/custom-mandate/mandates/README.md +16 -0
  299. package/templates/dca-rebalancer/.cursor/rules +25 -0
  300. package/templates/dca-rebalancer/.env.example +6 -0
  301. package/templates/dca-rebalancer/.github/workflows/agent-tick.yml +32 -0
  302. package/templates/dca-rebalancer/.sail/.gitkeep +0 -0
  303. package/templates/dca-rebalancer/.sail/README.md +13 -0
  304. package/templates/dca-rebalancer/.sail/config.json +10 -0
  305. package/templates/dca-rebalancer/AGENTS.md +246 -0
  306. package/templates/dca-rebalancer/AGENT_PLAYBOOK.md +110 -0
  307. package/templates/dca-rebalancer/CLAUDE.md +2 -0
  308. package/templates/dca-rebalancer/README.md +16 -0
  309. package/templates/dca-rebalancer/_gitignore +13 -0
  310. package/templates/dca-rebalancer/docs/PERMISSION_MODEL.md +93 -0
  311. package/templates/dca-rebalancer/package.json +17 -0
  312. package/templates/dca-rebalancer/src/agent.ts +253 -0
  313. package/templates/dca-rebalancer/src/config.ts +27 -0
  314. package/templates/dca-rebalancer/src/mandate.ts +67 -0
  315. package/templates/dca-rebalancer/tsconfig.json +8 -0
  316. package/templates/dca-rebalancer/ui/README.md +3 -0
  317. package/templates/lifi-permissions/LifiBoundedApprovePermissionCloneable.sol +84 -0
  318. package/templates/lifi-permissions/LifiDiamondSwapPermissionCloneable.sol +97 -0
  319. package/templates/lifi-permissions/README.md +53 -0
@@ -0,0 +1,646 @@
1
+ import { createPublicClient, defineChain, encodeAbiParameters, http, keccak256, parseEventLogs, zeroAddress, } from "viem";
2
+ import { SailKernelAbi } from "./abis/SailKernel.js";
3
+ import { detectKernelCapabilities, } from "./capabilities.js";
4
+ import { sailDeployments } from "./deployments.js";
5
+ import { explainKernelRevert } from "./errors.js";
6
+ import { buildDispatchSignature, sailKernelDomain, } from "./eip712.js";
7
+ import { DEFAULT_SLIPPAGE, ERC20_ALLOWANCE_ABI, encodeApprove, fetchLifiQuote, LIFI_ROUTERS, } from "./lifi.js";
8
+ export { SailKernelAbi } from "./abis/SailKernel.js";
9
+ export { MandateFactoryAbi } from "./abis/MandateFactory.js";
10
+ function notImplemented() {
11
+ throw new Error("not implemented");
12
+ }
13
+ function buildPublicClient(config) {
14
+ const chain = defineChain({
15
+ id: config.chainId,
16
+ name: `Chain ${config.chainId}`,
17
+ nativeCurrency: { name: "Ether", symbol: "ETH", decimals: 18 },
18
+ rpcUrls: { default: { http: [config.rpcUrl] } },
19
+ });
20
+ return createPublicClient({ chain, transport: http(config.rpcUrl) });
21
+ }
22
+ /** Default signature deadline: 5 minutes from now (unix seconds). */
23
+ function defaultDeadline() {
24
+ return BigInt(Math.floor(Date.now() / 1000) + 300);
25
+ }
26
+ /**
27
+ * Default gas limit for a single dispatch. Passing an explicit limit makes viem
28
+ * skip its `eth_estimateGas` pre-flight, which a load-balanced RPC can route to a
29
+ * lagging node — computing the digest against a stale nonce and failing with
30
+ * InvalidManagerSignature even though the tx would mine fine. Generous enough for
31
+ * an ERC-20 approve, a transfer, or a LiFi-diamond swap.
32
+ */
33
+ const DEFAULT_DISPATCH_GAS = 2000000n;
34
+ /** Resolve after `ms` milliseconds. */
35
+ function delay(ms) {
36
+ return new Promise((resolve) => setTimeout(resolve, ms));
37
+ }
38
+ /** ABI tuple components for the kernel's `Call` struct. */
39
+ const CALL_COMPONENTS = [
40
+ { name: "target", type: "address" },
41
+ { name: "value", type: "uint256" },
42
+ { name: "data", type: "bytes" },
43
+ ];
44
+ /**
45
+ * Minimal ABI for the older "conjunctive" kernel's dispatch — it takes NO
46
+ * `permission` argument (the kernel checks every registered permission), so the
47
+ * selective SailKernelAbi cannot encode a call to it.
48
+ */
49
+ const CONJUNCTIVE_DISPATCH_ABI = [
50
+ {
51
+ type: "function",
52
+ name: "dispatch",
53
+ stateMutability: "nonpayable",
54
+ inputs: [
55
+ { name: "account", type: "address" },
56
+ { name: "target", type: "address" },
57
+ { name: "value", type: "uint256" },
58
+ { name: "data", type: "bytes" },
59
+ { name: "managerSig", type: "bytes" },
60
+ { name: "deadline", type: "uint256" },
61
+ ],
62
+ outputs: [],
63
+ },
64
+ ];
65
+ // DISPATCH_EIP712_FIELDS imported from ./eip712.js — single canonical definition.
66
+ /**
67
+ * Wrap a thrown dispatch error with a decoded kernel diagnosis, when one can be
68
+ * recovered. The original error is preserved as `.cause`.
69
+ */
70
+ async function enrichKernelRevert(err) {
71
+ const decoded = await explainKernelRevert(err);
72
+ const base = err instanceof Error ? err : new Error(String(err));
73
+ if (!decoded)
74
+ return base;
75
+ const wrapped = new Error(`Kernel reverted: ${decoded.message}`);
76
+ wrapped.cause = base;
77
+ wrapped.kernelError = decoded;
78
+ return wrapped;
79
+ }
80
+ /** Shared base providing the public client, config, and an optional signer. */
81
+ class KernelNamespace {
82
+ publicClient;
83
+ config;
84
+ walletClient;
85
+ constructor(publicClient, config, walletClient) {
86
+ this.publicClient = publicClient;
87
+ this.config = config;
88
+ this.walletClient = walletClient;
89
+ }
90
+ requireKernel() {
91
+ const kernel = this.config.kernel;
92
+ if (!kernel) {
93
+ throw new Error("SailKernel address not configured — set `kernel` in SailorClientConfig.");
94
+ }
95
+ return kernel;
96
+ }
97
+ requireSigner() {
98
+ if (!this.walletClient) {
99
+ throw new Error("No signer attached — call client.withSigner(walletClient) before write operations.");
100
+ }
101
+ return this.walletClient;
102
+ }
103
+ /**
104
+ * Detect (and cache) the deployed kernel's dispatch model. Prefers reading the
105
+ * on-chain DISPATCH_TYPEHASH; falls back to the bundled deployment's static
106
+ * `dispatchModel` hint if the on-chain read is unavailable.
107
+ */
108
+ async capabilities() {
109
+ const kernel = this.requireKernel();
110
+ const staticModel = sailDeployments[this.config.chainId]
111
+ ?.dispatchModel;
112
+ return detectKernelCapabilities(this.publicClient, kernel, {
113
+ chainId: this.config.chainId,
114
+ staticModel,
115
+ });
116
+ }
117
+ }
118
+ class AccountNamespace extends KernelNamespace {
119
+ async create(params) {
120
+ const kernel = this.requireKernel();
121
+ const signer = this.requireSigner();
122
+ if (!params.safeFactory || !params.safeSingleton || !params.safeInitializer) {
123
+ throw new Error("createAccount requires safeFactory, safeSingleton, and safeInitializer.");
124
+ }
125
+ const txHash = await signer.writeContract({
126
+ address: kernel,
127
+ abi: SailKernelAbi,
128
+ functionName: "createAccount",
129
+ args: [
130
+ params.safeFactory,
131
+ params.safeSingleton,
132
+ params.safeInitializer,
133
+ params.saltNonce ?? 0n,
134
+ params.permissionSigner,
135
+ params.manager,
136
+ params.feePolicy ?? zeroAddress,
137
+ params.feeAsset ?? zeroAddress,
138
+ ],
139
+ });
140
+ const receipt = await this.publicClient.waitForTransactionReceipt({ hash: txHash });
141
+ const events = parseEventLogs({
142
+ abi: SailKernelAbi,
143
+ eventName: "AccountRegistered",
144
+ logs: receipt.logs,
145
+ });
146
+ const safe = events[0]?.args.account ?? zeroAddress;
147
+ return {
148
+ safe,
149
+ owner: params.owner,
150
+ permissionSigner: params.permissionSigner,
151
+ manager: params.manager,
152
+ chainId: params.chainId,
153
+ createdAtBlock: receipt.blockNumber,
154
+ };
155
+ }
156
+ registerExisting(_safe, _params) {
157
+ return notImplemented();
158
+ }
159
+ get(_safe) {
160
+ return notImplemented();
161
+ }
162
+ }
163
+ class MandateNamespace extends KernelNamespace {
164
+ attach(_safe, _template, _params, _signer) {
165
+ return notImplemented();
166
+ }
167
+ /**
168
+ * Registers a batch of permissions on the kernel. The permissionSigner signs
169
+ * the EIP-712 RegisterPermissions struct; the attached wallet submits the tx.
170
+ * Assumes each template is already configured for the account (shared
171
+ * templates) or is stateless.
172
+ */
173
+ async attachBatch(safe, items, signer) {
174
+ const kernel = this.requireKernel();
175
+ const wallet = this.requireSigner();
176
+ const permissions = items.map((item) => item.template.address);
177
+ const deadline = defaultDeadline();
178
+ const nonce = await this.publicClient.readContract({
179
+ address: kernel,
180
+ abi: SailKernelAbi,
181
+ functionName: "signerNonces",
182
+ args: [safe],
183
+ });
184
+ const sig = await signer.signTyped(sailKernelDomain({ chainId: this.config.chainId, kernel }), {
185
+ primaryType: "RegisterPermissions",
186
+ types: {
187
+ RegisterPermissions: [
188
+ { name: "account", type: "address" },
189
+ { name: "permissions", type: "address[]" },
190
+ { name: "nonce", type: "uint256" },
191
+ { name: "deadline", type: "uint256" },
192
+ ],
193
+ },
194
+ }, { account: safe, permissions, nonce, deadline });
195
+ await wallet.writeContract({
196
+ address: kernel,
197
+ abi: SailKernelAbi,
198
+ functionName: "registerPermissions",
199
+ args: [safe, permissions, deadline, sig],
200
+ value: 0n,
201
+ });
202
+ }
203
+ reconfigure(_safe, _template, _params, _signer) {
204
+ return notImplemented();
205
+ }
206
+ replace(_safe, _oldTemplate, _newTemplate, _params, _signer) {
207
+ return notImplemented();
208
+ }
209
+ detach(_safe, _template, _signer) {
210
+ return notImplemented();
211
+ }
212
+ deployAndAttachClone(_safe, _impl, _initData, _salt, _signer) {
213
+ // Clone deployment goes through PermissionFactory.attach with a configureSig
214
+ // signed by the permission signer — the factory handles clone deployment and
215
+ // initialization atomically. The CLI's `sailor mandate attach` command is the
216
+ // supported path until a dedicated SDK helper is added.
217
+ throw new Error("deployAndAttachClone is not yet implemented in the SDK.\n" +
218
+ "Use `sailor mandate attach --address <impl>` to attach a clone template via the factory.");
219
+ }
220
+ async list(safe) {
221
+ const kernel = this.requireKernel();
222
+ const permissions = await this.publicClient.readContract({
223
+ address: kernel,
224
+ abi: SailKernelAbi,
225
+ functionName: "getPermissions",
226
+ args: [safe],
227
+ });
228
+ return permissions.map((permission) => ({
229
+ permission,
230
+ templateName: "",
231
+ params: undefined,
232
+ registeredAtBlock: 0n,
233
+ active: true,
234
+ }));
235
+ }
236
+ async isRegistered(safe, permission) {
237
+ const kernel = this.requireKernel();
238
+ return this.publicClient.readContract({
239
+ address: kernel,
240
+ abi: SailKernelAbi,
241
+ functionName: "isPermissionRegistered",
242
+ args: [safe, permission],
243
+ });
244
+ }
245
+ draft(input) {
246
+ const matched = input.suggestedTemplates ?? [];
247
+ return Promise.resolve({
248
+ templateName: matched[0] ?? "unknown",
249
+ humanReadable: [
250
+ `Strategy: ${input.description}`,
251
+ matched.length > 0
252
+ ? `Suggested templates: ${matched.join(", ")}`
253
+ : "No template matched — specify a template name to generate mandate terms.",
254
+ ],
255
+ warnings: ["This is a draft — review each permission term before signing."],
256
+ });
257
+ }
258
+ }
259
+ class DispatchNamespace extends KernelNamespace {
260
+ /**
261
+ * Per-account expected next manager nonce, recorded after each confirmed
262
+ * `single` dispatch. The next dispatch on the same account waits until the
263
+ * on-chain `managerNonces` reflects this value before signing, so a lagging
264
+ * node in a load-balanced RPC pool can't make us sign with a stale nonce.
265
+ * Keyed by `${kernel}:${safe}` (lowercased).
266
+ */
267
+ nextNonce = new Map();
268
+ nonceKey(kernel, safe) {
269
+ return `${kernel.toLowerCase()}:${safe.toLowerCase()}`;
270
+ }
271
+ /** Read the current on-chain manager nonce for an account. */
272
+ readManagerNonce(kernel, safe) {
273
+ return this.publicClient.readContract({
274
+ address: kernel,
275
+ abi: SailKernelAbi,
276
+ functionName: "managerNonces",
277
+ args: [safe],
278
+ });
279
+ }
280
+ /**
281
+ * Poll `managerNonces` until it reaches at least `expected`. A load-balanced
282
+ * RPC may briefly serve a stale (lower) value from a node that hasn't yet
283
+ * indexed the prior dispatch; retrying guarantees the next dispatch is signed
284
+ * against — and validated with — the correct nonce.
285
+ */
286
+ async waitForManagerNonce(kernel, safe, expected, tries = 30) {
287
+ let latest = 0n;
288
+ for (let i = 0; i < tries; i++) {
289
+ latest = await this.readManagerNonce(kernel, safe);
290
+ if (latest >= expected)
291
+ return latest;
292
+ await delay(1000);
293
+ }
294
+ throw new Error(`Manager nonce for ${safe} did not reach ${expected} after ${tries}s ` +
295
+ `(last seen ${latest}). The prior dispatch may not have mined, or the RPC ` +
296
+ "endpoint is lagging. Retry, or pass an explicit nonce via options.nonce.");
297
+ }
298
+ /**
299
+ * Determine the nonce to sign with. Honors an explicit `options.nonce`
300
+ * verbatim; otherwise waits for the on-chain nonce to reach any pending
301
+ * expectation (explicit `options.awaitNonce` or the value tracked from a prior
302
+ * dispatch on this account) before reading the live value.
303
+ */
304
+ async resolveNonce(kernel, safe, options) {
305
+ if (options?.nonce !== undefined)
306
+ return options.nonce;
307
+ const expected = options?.awaitNonce ?? this.nextNonce.get(this.nonceKey(kernel, safe));
308
+ if (expected !== undefined) {
309
+ return this.waitForManagerNonce(kernel, safe, expected);
310
+ }
311
+ return this.readManagerNonce(kernel, safe);
312
+ }
313
+ /**
314
+ * Wait for a receipt, retrying transient RPC failures. A dispatch that has been
315
+ * submitted will mine; a flaky read of its receipt must not be reported as a
316
+ * failed dispatch.
317
+ */
318
+ async awaitReceipt(txHash, tries = 5) {
319
+ let lastErr;
320
+ for (let i = 0; i < tries; i++) {
321
+ try {
322
+ return await this.publicClient.waitForTransactionReceipt({ hash: txHash });
323
+ }
324
+ catch (err) {
325
+ lastErr = err;
326
+ await delay(1000);
327
+ }
328
+ }
329
+ throw lastErr instanceof Error ? lastErr : new Error(String(lastErr));
330
+ }
331
+ /**
332
+ * Single-call dispatch. The manager signs the EIP-712 Dispatch struct; the
333
+ * attached wallet submits kernel.dispatch and we wait for the receipt.
334
+ *
335
+ * Nonce ordering is handled automatically: sequential `single` calls on the
336
+ * same account wait for the prior dispatch's nonce bump to propagate before
337
+ * signing, so callers don't hand-roll nonce tracking. Pass `options.nonce` to
338
+ * take over ordering, or `options.gas` to override the default gas limit.
339
+ */
340
+ async single(safe, permission, call, manager, options) {
341
+ const kernel = this.requireKernel();
342
+ const wallet = this.requireSigner();
343
+ // Resolve deadline and nonce before delegating to buildDispatchSignature.
344
+ // resolveNonce handles SDK-internal concerns (nonce polling, load-balanced
345
+ // RPC lag, cached next-nonce from a prior dispatch) that are not exposed in
346
+ // the public helper API. buildDispatchSignature then uses the pre-resolved
347
+ // values, so the two paths share one signing implementation but the advanced
348
+ // nonce-tracking logic stays encapsulated here.
349
+ const deadline = options?.deadline ?? defaultDeadline();
350
+ const nonce = await this.resolveNonce(kernel, safe, options);
351
+ const { signature: managerSig, dispatchModel } = await buildDispatchSignature({
352
+ publicClient: this.publicClient,
353
+ kernel,
354
+ chainId: this.config.chainId,
355
+ account: safe,
356
+ permission,
357
+ call,
358
+ manager,
359
+ deadline,
360
+ nonce, // already resolved — skip the on-chain read inside buildDispatchSignature
361
+ });
362
+ const selective = dispatchModel === "selective";
363
+ // Pass an explicit gas limit so viem skips eth_estimateGas (see
364
+ // DEFAULT_DISPATCH_GAS). Conjunctive kernels take no `permission` arg and use
365
+ // a different ABI.
366
+ const gas = options?.gas ?? DEFAULT_DISPATCH_GAS;
367
+ let txHash;
368
+ try {
369
+ txHash = selective
370
+ ? await wallet.writeContract({
371
+ address: kernel,
372
+ abi: SailKernelAbi,
373
+ functionName: "dispatch",
374
+ args: [safe, permission, call.target, call.value, call.data, managerSig, deadline],
375
+ gas,
376
+ })
377
+ : await wallet.writeContract({
378
+ address: kernel,
379
+ abi: CONJUNCTIVE_DISPATCH_ABI,
380
+ functionName: "dispatch",
381
+ args: [safe, call.target, call.value, call.data, managerSig, deadline],
382
+ gas,
383
+ });
384
+ }
385
+ catch (err) {
386
+ throw await enrichKernelRevert(err);
387
+ }
388
+ const receipt = await this.awaitReceipt(txHash);
389
+ const success = receipt.status === "success";
390
+ // Record the next expected nonce only on success: a reverted dispatch reverts
391
+ // the whole tx, so the kernel does NOT bump managerNonces.
392
+ if (success) {
393
+ this.nextNonce.set(this.nonceKey(kernel, safe), nonce + 1n);
394
+ }
395
+ return {
396
+ txHash,
397
+ calls: [call],
398
+ success,
399
+ gasUsed: receipt.gasUsed,
400
+ };
401
+ }
402
+ /**
403
+ * Batch dispatch. callsHash = keccak256(abi.encode(calls)); the manager signs
404
+ * the EIP-712 DispatchBatch struct and the wallet submits kernel.dispatchBatch.
405
+ */
406
+ async batch(safe, permission, calls, manager) {
407
+ const kernel = this.requireKernel();
408
+ const wallet = this.requireSigner();
409
+ const deadline = defaultDeadline();
410
+ const caps = await this.capabilities();
411
+ if (caps.dispatchModel === "conjunctive") {
412
+ throw new Error(`Batch dispatch is not supported by the conjunctive kernel at ${kernel} ` +
413
+ "(it has no dispatchBatch). Submit calls individually via dispatch.single, " +
414
+ "ensuring the manager nonce advances between them.");
415
+ }
416
+ const nonce = await this.publicClient.readContract({
417
+ address: kernel,
418
+ abi: SailKernelAbi,
419
+ functionName: "batchNonces",
420
+ args: [safe],
421
+ });
422
+ const callsHash = keccak256(encodeAbiParameters([{ type: "tuple[]", components: CALL_COMPONENTS }], [calls]));
423
+ const managerSig = await manager.signTyped(sailKernelDomain({ chainId: this.config.chainId, kernel }), {
424
+ primaryType: "DispatchBatch",
425
+ types: {
426
+ DispatchBatch: [
427
+ { name: "account", type: "address" },
428
+ { name: "permission", type: "address" },
429
+ { name: "callsHash", type: "bytes32" },
430
+ { name: "nonce", type: "uint256" },
431
+ { name: "deadline", type: "uint256" },
432
+ ],
433
+ },
434
+ }, { account: safe, permission, callsHash, nonce, deadline });
435
+ let txHash;
436
+ try {
437
+ txHash = await wallet.writeContract({
438
+ address: kernel,
439
+ abi: SailKernelAbi,
440
+ functionName: "dispatchBatch",
441
+ args: [safe, permission, calls, managerSig, deadline],
442
+ });
443
+ }
444
+ catch (err) {
445
+ throw await enrichKernelRevert(err);
446
+ }
447
+ const receipt = await this.publicClient.waitForTransactionReceipt({ hash: txHash });
448
+ return {
449
+ txHash,
450
+ calls,
451
+ success: receipt.status === "success",
452
+ gasUsed: receipt.gasUsed,
453
+ };
454
+ }
455
+ /** Dry-run a batch via kernel.previewBatch — a read call, no signing. */
456
+ async preview(safe, permission, calls) {
457
+ const kernel = this.requireKernel();
458
+ const caps = await this.capabilities();
459
+ if (caps.dispatchModel === "conjunctive") {
460
+ throw new Error(`Dry-run preview is not supported by the conjunctive kernel at ${kernel} ` +
461
+ "(it has no previewBatch view). Validate calls off-chain against each registered " +
462
+ "permission's evaluate() logic, or simulate the dispatch.single tx instead.");
463
+ }
464
+ const [approved, reason] = await this.publicClient.readContract({
465
+ address: kernel,
466
+ abi: SailKernelAbi,
467
+ functionName: "previewBatch",
468
+ args: [safe, permission, calls],
469
+ });
470
+ return { approved, calls, reason };
471
+ }
472
+ }
473
+ class StrategyNamespace extends KernelNamespace {
474
+ dispatch;
475
+ constructor(publicClient, config, dispatch, walletClient) {
476
+ super(publicClient, config, walletClient);
477
+ this.dispatch = dispatch;
478
+ }
479
+ /**
480
+ * Execute a delegated token swap via LiFi. Fetches an executable quote, tops up
481
+ * the router allowance only when it's below `amount` (approving `approveAmount`
482
+ * — default `amount` — so DCA loops can batch a larger approve and skip it on
483
+ * subsequent buys), then dispatches the swap. Both legs go through
484
+ * `dispatch.single`, so the manager nonce is orchestrated across them
485
+ * automatically. Kernel reverts are surfaced via the decoded-revert path.
486
+ */
487
+ async swap(safe, params, manager) {
488
+ const recipient = params.recipient ?? safe;
489
+ const slippage = params.slippage ?? DEFAULT_SLIPPAGE;
490
+ const router = params.router ?? LIFI_ROUTERS[this.config.chainId];
491
+ if (!router) {
492
+ throw new Error(`No LiFi router known for chain ${this.config.chainId}. Pass params.router explicitly.`);
493
+ }
494
+ // Selective kernels validate the named permission; conjunctive kernels ignore
495
+ // it (they check every registered permission). Fail loudly if a selective
496
+ // kernel is missing the permission rather than signing an unusable dispatch.
497
+ const caps = await this.capabilities();
498
+ const swapPermission = params.swapPermission ?? router;
499
+ const approvePermission = params.approvePermission ?? params.swapPermission ?? router;
500
+ if (caps.dispatchModel === "selective" && !params.swapPermission) {
501
+ throw new Error("This kernel uses the selective dispatch model — params.swapPermission is " +
502
+ "required (the permission that authorizes the swap).");
503
+ }
504
+ const quote = await fetchLifiQuote({
505
+ chainId: this.config.chainId,
506
+ fromToken: params.from,
507
+ toToken: params.to,
508
+ fromAmount: params.amount,
509
+ fromAddress: safe,
510
+ toAddress: recipient,
511
+ slippage,
512
+ });
513
+ // Top up the router allowance only when it's short of the trade size.
514
+ const allowance = await this.publicClient.readContract({
515
+ address: params.from,
516
+ abi: ERC20_ALLOWANCE_ABI,
517
+ functionName: "allowance",
518
+ args: [safe, router],
519
+ });
520
+ let approve;
521
+ if (allowance < params.amount) {
522
+ const approveAmount = params.approveAmount ?? params.amount;
523
+ approve = await this.dispatch.single(safe, approvePermission, { target: params.from, value: 0n, data: encodeApprove(router, approveAmount) }, manager);
524
+ }
525
+ const swap = await this.dispatch.single(safe, swapPermission, { target: quote.target, value: quote.value, data: quote.data }, manager);
526
+ return {
527
+ swap,
528
+ approve,
529
+ router,
530
+ estimatedToAmount: quote.toAmount,
531
+ tool: quote.tool,
532
+ };
533
+ }
534
+ }
535
+ class SessionNamespace extends KernelNamespace {
536
+ revoke(_safe, _signer) {
537
+ return notImplemented();
538
+ }
539
+ activate(_safe, _signer) {
540
+ return notImplemented();
541
+ }
542
+ status(_safe) {
543
+ return notImplemented();
544
+ }
545
+ }
546
+ class FeesNamespace extends KernelNamespace {
547
+ setPolicy(_safe, _policy, _signer) {
548
+ return notImplemented();
549
+ }
550
+ /**
551
+ * Collect fees. `collectFees` authorises by msg.sender == manager, so the
552
+ * attached wallet must be the manager's account; no separate signature.
553
+ */
554
+ async collect(safe, gross, nav, token, _manager) {
555
+ const kernel = this.requireKernel();
556
+ const wallet = this.requireSigner();
557
+ const txHash = await wallet.writeContract({
558
+ address: kernel,
559
+ abi: SailKernelAbi,
560
+ functionName: "collectFees",
561
+ args: [safe, gross, nav, token],
562
+ });
563
+ return { txHash };
564
+ }
565
+ }
566
+ class PrincipalNamespace extends KernelNamespace {
567
+ /** Record a deposit. msg.sender must be the permissionSigner (the attached wallet). */
568
+ async recordDeposit(safe, amount, _signer) {
569
+ const kernel = this.requireKernel();
570
+ const wallet = this.requireSigner();
571
+ const txHash = await wallet.writeContract({
572
+ address: kernel,
573
+ abi: SailKernelAbi,
574
+ functionName: "recordDeposit",
575
+ args: [safe, amount],
576
+ });
577
+ return { txHash };
578
+ }
579
+ /** Record a withdrawal. msg.sender must be the permissionSigner (the attached wallet). */
580
+ async recordWithdrawal(safe, amount, _signer) {
581
+ const kernel = this.requireKernel();
582
+ const wallet = this.requireSigner();
583
+ const txHash = await wallet.writeContract({
584
+ address: kernel,
585
+ abi: SailKernelAbi,
586
+ functionName: "recordWithdrawal",
587
+ args: [safe, amount],
588
+ });
589
+ return { txHash };
590
+ }
591
+ }
592
+ /** Top-level client for all Sailor operations. Instantiate once per chain. */
593
+ export class SailorClient {
594
+ account;
595
+ mandate;
596
+ dispatch;
597
+ strategy;
598
+ session;
599
+ fees;
600
+ principal;
601
+ config;
602
+ walletClient;
603
+ publicClient;
604
+ constructor(config, walletClient) {
605
+ this.config = config;
606
+ this.walletClient = walletClient;
607
+ const publicClient = buildPublicClient(config);
608
+ this.publicClient = publicClient;
609
+ this.account = new AccountNamespace(publicClient, config, walletClient);
610
+ this.mandate = new MandateNamespace(publicClient, config, walletClient);
611
+ const dispatch = new DispatchNamespace(publicClient, config, walletClient);
612
+ this.dispatch = dispatch;
613
+ this.strategy = new StrategyNamespace(publicClient, config, dispatch, walletClient);
614
+ this.session = new SessionNamespace(publicClient, config, walletClient);
615
+ this.fees = new FeesNamespace(publicClient, config, walletClient);
616
+ this.principal = new PrincipalNamespace(publicClient, config, walletClient);
617
+ }
618
+ /**
619
+ * Returns a new client bound to a WalletClient for state-changing calls.
620
+ * Reads work without a signer; writes (dispatch, fees, principal, account
621
+ * create, mandate attach) require one.
622
+ */
623
+ withSigner(walletClient) {
624
+ return new SailorClient(this.config, walletClient);
625
+ }
626
+ /**
627
+ * Detect (and cache) the deployed kernel's dispatch model and EIP-712 shape by
628
+ * reading its on-chain typehash constants. Falls back to the bundled
629
+ * deployment's static `dispatchModel` hint if the on-chain read is unavailable.
630
+ * Call this during onboarding/preflight to fail loudly on a kernel the SDK
631
+ * cannot safely sign for.
632
+ */
633
+ async capabilities() {
634
+ const kernel = this.config.kernel;
635
+ if (!kernel) {
636
+ throw new Error("SailKernel address not configured — set `kernel` in SailorClientConfig.");
637
+ }
638
+ const staticModel = sailDeployments[this.config.chainId]
639
+ ?.dispatchModel;
640
+ return detectKernelCapabilities(this.publicClient, kernel, {
641
+ chainId: this.config.chainId,
642
+ staticModel,
643
+ });
644
+ }
645
+ }
646
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}