starkfi 0.3.4 → 0.4.1

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 (310) hide show
  1. package/dist/index.js +289 -197
  2. package/package.json +16 -18
  3. package/dist/commands/auth/import.d.ts +0 -3
  4. package/dist/commands/auth/import.d.ts.map +0 -1
  5. package/dist/commands/auth/import.js +0 -56
  6. package/dist/commands/auth/import.js.map +0 -1
  7. package/dist/commands/auth/login.d.ts +0 -3
  8. package/dist/commands/auth/login.d.ts.map +0 -1
  9. package/dist/commands/auth/login.js +0 -24
  10. package/dist/commands/auth/login.js.map +0 -1
  11. package/dist/commands/auth/logout.d.ts +0 -3
  12. package/dist/commands/auth/logout.d.ts.map +0 -1
  13. package/dist/commands/auth/logout.js +0 -14
  14. package/dist/commands/auth/logout.js.map +0 -1
  15. package/dist/commands/auth/verify.d.ts +0 -3
  16. package/dist/commands/auth/verify.d.ts.map +0 -1
  17. package/dist/commands/auth/verify.js +0 -64
  18. package/dist/commands/auth/verify.js.map +0 -1
  19. package/dist/commands/batch/batch.d.ts +0 -3
  20. package/dist/commands/batch/batch.d.ts.map +0 -1
  21. package/dist/commands/batch/batch.js +0 -146
  22. package/dist/commands/batch/batch.js.map +0 -1
  23. package/dist/commands/chain/tx-status.d.ts +0 -3
  24. package/dist/commands/chain/tx-status.d.ts.map +0 -1
  25. package/dist/commands/chain/tx-status.js +0 -34
  26. package/dist/commands/chain/tx-status.js.map +0 -1
  27. package/dist/commands/config/config.d.ts +0 -3
  28. package/dist/commands/config/config.d.ts.map +0 -1
  29. package/dist/commands/config/config.js +0 -114
  30. package/dist/commands/config/config.js.map +0 -1
  31. package/dist/commands/lending/lending.d.ts +0 -9
  32. package/dist/commands/lending/lending.d.ts.map +0 -1
  33. package/dist/commands/lending/lending.js +0 -382
  34. package/dist/commands/lending/lending.js.map +0 -1
  35. package/dist/commands/portfolio/portfolio.d.ts +0 -3
  36. package/dist/commands/portfolio/portfolio.d.ts.map +0 -1
  37. package/dist/commands/portfolio/portfolio.js +0 -90
  38. package/dist/commands/portfolio/portfolio.js.map +0 -1
  39. package/dist/commands/staking/staking.d.ts +0 -8
  40. package/dist/commands/staking/staking.d.ts.map +0 -1
  41. package/dist/commands/staking/staking.js +0 -376
  42. package/dist/commands/staking/staking.js.map +0 -1
  43. package/dist/commands/system/status.d.ts +0 -3
  44. package/dist/commands/system/status.d.ts.map +0 -1
  45. package/dist/commands/system/status.js +0 -41
  46. package/dist/commands/system/status.js.map +0 -1
  47. package/dist/commands/trade/multi-swap.d.ts +0 -3
  48. package/dist/commands/trade/multi-swap.d.ts.map +0 -1
  49. package/dist/commands/trade/multi-swap.js +0 -132
  50. package/dist/commands/trade/multi-swap.js.map +0 -1
  51. package/dist/commands/trade/status.d.ts +0 -3
  52. package/dist/commands/trade/status.d.ts.map +0 -1
  53. package/dist/commands/trade/status.js +0 -41
  54. package/dist/commands/trade/status.js.map +0 -1
  55. package/dist/commands/trade/swap.d.ts +0 -3
  56. package/dist/commands/trade/swap.d.ts.map +0 -1
  57. package/dist/commands/trade/swap.js +0 -92
  58. package/dist/commands/trade/swap.js.map +0 -1
  59. package/dist/commands/wallet/address.d.ts +0 -3
  60. package/dist/commands/wallet/address.d.ts.map +0 -1
  61. package/dist/commands/wallet/address.js +0 -20
  62. package/dist/commands/wallet/address.js.map +0 -1
  63. package/dist/commands/wallet/balance.d.ts +0 -3
  64. package/dist/commands/wallet/balance.d.ts.map +0 -1
  65. package/dist/commands/wallet/balance.js +0 -64
  66. package/dist/commands/wallet/balance.js.map +0 -1
  67. package/dist/commands/wallet/deploy.d.ts +0 -3
  68. package/dist/commands/wallet/deploy.d.ts.map +0 -1
  69. package/dist/commands/wallet/deploy.js +0 -68
  70. package/dist/commands/wallet/deploy.js.map +0 -1
  71. package/dist/commands/wallet/send.d.ts +0 -3
  72. package/dist/commands/wallet/send.d.ts.map +0 -1
  73. package/dist/commands/wallet/send.js +0 -79
  74. package/dist/commands/wallet/send.js.map +0 -1
  75. package/dist/index.d.ts +0 -3
  76. package/dist/index.d.ts.map +0 -1
  77. package/dist/index.js.map +0 -1
  78. package/dist/lib/banner.d.ts +0 -6
  79. package/dist/lib/banner.d.ts.map +0 -1
  80. package/dist/lib/banner.js +0 -78
  81. package/dist/lib/banner.js.map +0 -1
  82. package/dist/lib/brand.d.ts +0 -5
  83. package/dist/lib/brand.d.ts.map +0 -1
  84. package/dist/lib/brand.js +0 -15
  85. package/dist/lib/brand.js.map +0 -1
  86. package/dist/lib/cache.d.ts +0 -3
  87. package/dist/lib/cache.d.ts.map +0 -1
  88. package/dist/lib/cache.js +0 -33
  89. package/dist/lib/cache.js.map +0 -1
  90. package/dist/lib/cli-helpers.d.ts +0 -8
  91. package/dist/lib/cli-helpers.d.ts.map +0 -1
  92. package/dist/lib/cli-helpers.js +0 -20
  93. package/dist/lib/cli-helpers.js.map +0 -1
  94. package/dist/lib/command.d.ts +0 -3
  95. package/dist/lib/command.d.ts.map +0 -1
  96. package/dist/lib/command.js +0 -6
  97. package/dist/lib/command.js.map +0 -1
  98. package/dist/lib/concurrency.d.ts +0 -2
  99. package/dist/lib/concurrency.d.ts.map +0 -1
  100. package/dist/lib/concurrency.js +0 -21
  101. package/dist/lib/concurrency.js.map +0 -1
  102. package/dist/lib/config.d.ts +0 -5
  103. package/dist/lib/config.d.ts.map +0 -1
  104. package/dist/lib/config.js +0 -10
  105. package/dist/lib/config.js.map +0 -1
  106. package/dist/lib/errors.d.ts +0 -41
  107. package/dist/lib/errors.d.ts.map +0 -1
  108. package/dist/lib/errors.js +0 -47
  109. package/dist/lib/errors.js.map +0 -1
  110. package/dist/lib/fetch.d.ts +0 -4
  111. package/dist/lib/fetch.d.ts.map +0 -1
  112. package/dist/lib/fetch.js +0 -13
  113. package/dist/lib/fetch.js.map +0 -1
  114. package/dist/lib/format.d.ts +0 -21
  115. package/dist/lib/format.d.ts.map +0 -1
  116. package/dist/lib/format.js +0 -122
  117. package/dist/lib/format.js.map +0 -1
  118. package/dist/lib/parse-starknet-error.d.ts +0 -2
  119. package/dist/lib/parse-starknet-error.d.ts.map +0 -1
  120. package/dist/lib/parse-starknet-error.js +0 -81
  121. package/dist/lib/parse-starknet-error.js.map +0 -1
  122. package/dist/lib/retry.d.ts +0 -8
  123. package/dist/lib/retry.d.ts.map +0 -1
  124. package/dist/lib/retry.js +0 -25
  125. package/dist/lib/retry.js.map +0 -1
  126. package/dist/lib/types.d.ts +0 -6
  127. package/dist/lib/types.d.ts.map +0 -1
  128. package/dist/lib/types.js +0 -2
  129. package/dist/lib/types.js.map +0 -1
  130. package/dist/lib/validation.d.ts +0 -2
  131. package/dist/lib/validation.d.ts.map +0 -1
  132. package/dist/lib/validation.js +0 -6
  133. package/dist/lib/validation.js.map +0 -1
  134. package/dist/mcp/handlers/auth.d.ts +0 -7
  135. package/dist/mcp/handlers/auth.d.ts.map +0 -1
  136. package/dist/mcp/handlers/auth.js +0 -22
  137. package/dist/mcp/handlers/auth.js.map +0 -1
  138. package/dist/mcp/handlers/batch.d.ts +0 -13
  139. package/dist/mcp/handlers/batch.d.ts.map +0 -1
  140. package/dist/mcp/handlers/batch.js +0 -26
  141. package/dist/mcp/handlers/batch.js.map +0 -1
  142. package/dist/mcp/handlers/config.d.ts +0 -10
  143. package/dist/mcp/handlers/config.d.ts.map +0 -1
  144. package/dist/mcp/handlers/config.js +0 -82
  145. package/dist/mcp/handlers/config.js.map +0 -1
  146. package/dist/mcp/handlers/context.d.ts +0 -10
  147. package/dist/mcp/handlers/context.d.ts.map +0 -1
  148. package/dist/mcp/handlers/context.js +0 -16
  149. package/dist/mcp/handlers/context.js.map +0 -1
  150. package/dist/mcp/handlers/index.d.ts +0 -11
  151. package/dist/mcp/handlers/index.d.ts.map +0 -1
  152. package/dist/mcp/handlers/index.js +0 -11
  153. package/dist/mcp/handlers/index.js.map +0 -1
  154. package/dist/mcp/handlers/lending.d.ts +0 -73
  155. package/dist/mcp/handlers/lending.d.ts.map +0 -1
  156. package/dist/mcp/handlers/lending.js +0 -134
  157. package/dist/mcp/handlers/lending.js.map +0 -1
  158. package/dist/mcp/handlers/multi-swap.d.ts +0 -27
  159. package/dist/mcp/handlers/multi-swap.d.ts.map +0 -1
  160. package/dist/mcp/handlers/multi-swap.js +0 -65
  161. package/dist/mcp/handlers/multi-swap.js.map +0 -1
  162. package/dist/mcp/handlers/portfolio.d.ts +0 -7
  163. package/dist/mcp/handlers/portfolio.d.ts.map +0 -1
  164. package/dist/mcp/handlers/portfolio.js +0 -10
  165. package/dist/mcp/handlers/portfolio.js.map +0 -1
  166. package/dist/mcp/handlers/staking.d.ts +0 -68
  167. package/dist/mcp/handlers/staking.d.ts.map +0 -1
  168. package/dist/mcp/handlers/staking.js +0 -119
  169. package/dist/mcp/handlers/staking.js.map +0 -1
  170. package/dist/mcp/handlers/trade.d.ts +0 -23
  171. package/dist/mcp/handlers/trade.d.ts.map +0 -1
  172. package/dist/mcp/handlers/trade.js +0 -63
  173. package/dist/mcp/handlers/trade.js.map +0 -1
  174. package/dist/mcp/handlers/utils.d.ts +0 -20
  175. package/dist/mcp/handlers/utils.d.ts.map +0 -1
  176. package/dist/mcp/handlers/utils.js +0 -21
  177. package/dist/mcp/handlers/utils.js.map +0 -1
  178. package/dist/mcp/handlers/wallet.d.ts +0 -34
  179. package/dist/mcp/handlers/wallet.d.ts.map +0 -1
  180. package/dist/mcp/handlers/wallet.js +0 -98
  181. package/dist/mcp/handlers/wallet.js.map +0 -1
  182. package/dist/mcp/handlers.d.ts +0 -108
  183. package/dist/mcp/handlers.d.ts.map +0 -1
  184. package/dist/mcp/handlers.js +0 -325
  185. package/dist/mcp/handlers.js.map +0 -1
  186. package/dist/mcp/server.d.ts +0 -2
  187. package/dist/mcp/server.d.ts.map +0 -1
  188. package/dist/mcp/server.js +0 -54
  189. package/dist/mcp/server.js.map +0 -1
  190. package/dist/mcp/tools/auth.d.ts +0 -3
  191. package/dist/mcp/tools/auth.d.ts.map +0 -1
  192. package/dist/mcp/tools/auth.js +0 -25
  193. package/dist/mcp/tools/auth.js.map +0 -1
  194. package/dist/mcp/tools/error-handling.d.ts +0 -12
  195. package/dist/mcp/tools/error-handling.d.ts.map +0 -1
  196. package/dist/mcp/tools/error-handling.js +0 -22
  197. package/dist/mcp/tools/error-handling.js.map +0 -1
  198. package/dist/mcp/tools/index.d.ts +0 -11
  199. package/dist/mcp/tools/index.d.ts.map +0 -1
  200. package/dist/mcp/tools/index.js +0 -19
  201. package/dist/mcp/tools/index.js.map +0 -1
  202. package/dist/mcp/tools/lending.d.ts +0 -3
  203. package/dist/mcp/tools/lending.d.ts.map +0 -1
  204. package/dist/mcp/tools/lending.js +0 -71
  205. package/dist/mcp/tools/lending.js.map +0 -1
  206. package/dist/mcp/tools/staking.d.ts +0 -3
  207. package/dist/mcp/tools/staking.d.ts.map +0 -1
  208. package/dist/mcp/tools/staking.js +0 -50
  209. package/dist/mcp/tools/staking.js.map +0 -1
  210. package/dist/mcp/tools/trade.d.ts +0 -3
  211. package/dist/mcp/tools/trade.d.ts.map +0 -1
  212. package/dist/mcp/tools/trade.js +0 -63
  213. package/dist/mcp/tools/trade.js.map +0 -1
  214. package/dist/mcp/tools/wallet.d.ts +0 -3
  215. package/dist/mcp/tools/wallet.d.ts.map +0 -1
  216. package/dist/mcp/tools/wallet.js +0 -27
  217. package/dist/mcp/tools/wallet.js.map +0 -1
  218. package/dist/mcp/tools.d.ts +0 -3
  219. package/dist/mcp/tools.d.ts.map +0 -1
  220. package/dist/mcp/tools.js +0 -240
  221. package/dist/mcp/tools.js.map +0 -1
  222. package/dist/services/api/client.d.ts +0 -14
  223. package/dist/services/api/client.d.ts.map +0 -1
  224. package/dist/services/api/client.js +0 -50
  225. package/dist/services/api/client.js.map +0 -1
  226. package/dist/services/auth/session.d.ts +0 -16
  227. package/dist/services/auth/session.d.ts.map +0 -1
  228. package/dist/services/auth/session.js +0 -57
  229. package/dist/services/auth/session.js.map +0 -1
  230. package/dist/services/batch/batch.d.ts +0 -35
  231. package/dist/services/batch/batch.d.ts.map +0 -1
  232. package/dist/services/batch/batch.js +0 -110
  233. package/dist/services/batch/batch.js.map +0 -1
  234. package/dist/services/config/config.d.ts +0 -24
  235. package/dist/services/config/config.d.ts.map +0 -1
  236. package/dist/services/config/config.js +0 -82
  237. package/dist/services/config/config.js.map +0 -1
  238. package/dist/services/fibrous/balances.d.ts +0 -8
  239. package/dist/services/fibrous/balances.d.ts.map +0 -1
  240. package/dist/services/fibrous/balances.js +0 -23
  241. package/dist/services/fibrous/balances.js.map +0 -1
  242. package/dist/services/fibrous/config.d.ts +0 -4
  243. package/dist/services/fibrous/config.d.ts.map +0 -1
  244. package/dist/services/fibrous/config.js +0 -4
  245. package/dist/services/fibrous/config.js.map +0 -1
  246. package/dist/services/fibrous/health.d.ts +0 -5
  247. package/dist/services/fibrous/health.d.ts.map +0 -1
  248. package/dist/services/fibrous/health.js +0 -24
  249. package/dist/services/fibrous/health.js.map +0 -1
  250. package/dist/services/fibrous/route.d.ts +0 -52
  251. package/dist/services/fibrous/route.d.ts.map +0 -1
  252. package/dist/services/fibrous/route.js +0 -127
  253. package/dist/services/fibrous/route.js.map +0 -1
  254. package/dist/services/fibrous/tokens.d.ts +0 -6
  255. package/dist/services/fibrous/tokens.d.ts.map +0 -1
  256. package/dist/services/fibrous/tokens.js +0 -34
  257. package/dist/services/fibrous/tokens.js.map +0 -1
  258. package/dist/services/portfolio/portfolio.d.ts +0 -33
  259. package/dist/services/portfolio/portfolio.d.ts.map +0 -1
  260. package/dist/services/portfolio/portfolio.js +0 -101
  261. package/dist/services/portfolio/portfolio.js.map +0 -1
  262. package/dist/services/simulate/simulate.d.ts +0 -10
  263. package/dist/services/simulate/simulate.d.ts.map +0 -1
  264. package/dist/services/simulate/simulate.js +0 -58
  265. package/dist/services/simulate/simulate.js.map +0 -1
  266. package/dist/services/staking/staking.d.ts +0 -49
  267. package/dist/services/staking/staking.d.ts.map +0 -1
  268. package/dist/services/staking/staking.js +0 -175
  269. package/dist/services/staking/staking.js.map +0 -1
  270. package/dist/services/staking/validators.d.ts +0 -5
  271. package/dist/services/staking/validators.d.ts.map +0 -1
  272. package/dist/services/staking/validators.js +0 -14
  273. package/dist/services/staking/validators.js.map +0 -1
  274. package/dist/services/starkzap/client.d.ts +0 -19
  275. package/dist/services/starkzap/client.d.ts.map +0 -1
  276. package/dist/services/starkzap/client.js +0 -88
  277. package/dist/services/starkzap/client.js.map +0 -1
  278. package/dist/services/starkzap/config.d.ts +0 -6
  279. package/dist/services/starkzap/config.d.ts.map +0 -1
  280. package/dist/services/starkzap/config.js +0 -13
  281. package/dist/services/starkzap/config.js.map +0 -1
  282. package/dist/services/tokens/balances.d.ts +0 -8
  283. package/dist/services/tokens/balances.d.ts.map +0 -1
  284. package/dist/services/tokens/balances.js +0 -23
  285. package/dist/services/tokens/balances.js.map +0 -1
  286. package/dist/services/tokens/tokens.d.ts +0 -4
  287. package/dist/services/tokens/tokens.d.ts.map +0 -1
  288. package/dist/services/tokens/tokens.js +0 -27
  289. package/dist/services/tokens/tokens.js.map +0 -1
  290. package/dist/services/vesu/api.d.ts +0 -28
  291. package/dist/services/vesu/api.d.ts.map +0 -1
  292. package/dist/services/vesu/api.js +0 -91
  293. package/dist/services/vesu/api.js.map +0 -1
  294. package/dist/services/vesu/config.d.ts +0 -9
  295. package/dist/services/vesu/config.d.ts.map +0 -1
  296. package/dist/services/vesu/config.js +0 -32
  297. package/dist/services/vesu/config.js.map +0 -1
  298. package/dist/services/vesu/index.d.ts +0 -5
  299. package/dist/services/vesu/index.d.ts.map +0 -1
  300. package/dist/services/vesu/index.js +0 -5
  301. package/dist/services/vesu/index.js.map +0 -1
  302. package/dist/services/vesu/lending.d.ts +0 -21
  303. package/dist/services/vesu/lending.d.ts.map +0 -1
  304. package/dist/services/vesu/lending.js +0 -262
  305. package/dist/services/vesu/lending.js.map +0 -1
  306. package/dist/services/vesu/pools.d.ts +0 -11
  307. package/dist/services/vesu/pools.d.ts.map +0 -1
  308. package/dist/services/vesu/pools.js +0 -23
  309. package/dist/services/vesu/pools.js.map +0 -1
  310. package/scripts/patch-esm.mjs +0 -151
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "starkfi",
3
- "version": "0.3.4",
3
+ "version": "0.4.1",
4
4
  "description": "AI-native Starknet DeFi CLI + MCP Server + Agent Skills — Swaps, multi-swap, batch (multicall), staking, lending, simulation, portfolio, gas abstraction",
5
5
  "type": "module",
6
6
  "bin": {
@@ -8,21 +8,17 @@
8
8
  },
9
9
  "main": "./dist/index.js",
10
10
  "exports": {
11
- ".": {
12
- "import": "./dist/index.js",
13
- "types": "./dist/index.d.ts"
14
- }
11
+ ".": "./dist/index.js"
15
12
  },
16
13
  "files": [
17
14
  "dist",
18
- "scripts",
19
15
  "skills",
20
16
  "README.md",
21
17
  "MCP.md",
22
18
  "LICENSE"
23
19
  ],
24
20
  "scripts": {
25
- "build": "tsc -p tsconfig.build.json",
21
+ "build": "tsup",
26
22
  "dev": "node --import tsx/esm src/index.ts",
27
23
  "typecheck": "tsc --noEmit",
28
24
  "lint": "eslint src/",
@@ -31,8 +27,7 @@
31
27
  "format:check": "prettier --check src/",
32
28
  "start": "node dist/index.js",
33
29
  "mcp-start": "node dist/index.js mcp-start",
34
- "prepublishOnly": "pnpm run build",
35
- "postinstall": "node scripts/patch-esm.mjs"
30
+ "prepublishOnly": "pnpm run build"
36
31
  },
37
32
  "keywords": [
38
33
  "starknet",
@@ -71,25 +66,28 @@
71
66
  "engines": {
72
67
  "node": ">=18"
73
68
  },
74
- "dependencies": {
75
- "@modelcontextprotocol/sdk": "^1.27.1",
76
- "chalk": "^5.6.2",
77
- "commander": "^14.0.3",
78
- "env-paths": "^3.0.0",
79
- "ora": "^9.3.0",
80
- "starkzap": "^1.0.0",
81
- "zod": "^4.3.6"
69
+ "dependencies": {},
70
+ "pnpm": {
71
+ "onlyBuiltDependencies": ["esbuild"]
82
72
  },
83
73
  "devDependencies": {
84
74
  "@eslint/js": "^10.0.1",
75
+ "@modelcontextprotocol/sdk": "^1.27.1",
85
76
  "@types/node": "^25.5.0",
77
+ "chalk": "^5.6.2",
78
+ "commander": "^14.0.3",
79
+ "env-paths": "^3.0.0",
86
80
  "eslint": "^10.0.3",
87
81
  "eslint-config-prettier": "^10.1.8",
88
82
  "globals": "^17.4.0",
89
83
  "jiti": "^2.6.1",
84
+ "ora": "^9.3.0",
90
85
  "prettier": "^3.8.1",
86
+ "starkzap": "^1.0.0",
87
+ "tsup": "^8.5.1",
91
88
  "tsx": "^4.21.0",
92
89
  "typescript": "^5.9.3",
93
- "typescript-eslint": "^8.57.0"
90
+ "typescript-eslint": "^8.57.0",
91
+ "zod": "^4.3.6"
94
92
  }
95
93
  }
@@ -1,3 +0,0 @@
1
- import type { Command } from "commander";
2
- export declare function registerImportCommand(program: Command): void;
3
- //# sourceMappingURL=import.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"import.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/import.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQzC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA2D5D"}
@@ -1,56 +0,0 @@
1
- import inquirer from "inquirer";
2
- import { createSDK, connectWallet, resolveFeeModeConfig } from "../../services/starkzap/client.js";
3
- import { saveSession } from "../../services/auth/session.js";
4
- import { createSpinner, success, formatResult } from "../../lib/format.js";
5
- import { ConfigService } from "../../services/config/config.js";
6
- import { getOrCreateAuthCommand } from "../../lib/command.js";
7
- export function registerImportCommand(program) {
8
- const authCmd = getOrCreateAuthCommand(program);
9
- authCmd
10
- .command("import")
11
- .description("Import a Stark private key to authenticate")
12
- .option("-n, --network <network>", "Network (mainnet or sepolia)", "mainnet")
13
- .action(async (opts) => {
14
- try {
15
- const { privateKey } = await inquirer.prompt([
16
- {
17
- type: "password",
18
- name: "privateKey",
19
- message: "Enter your Stark private key:",
20
- mask: "*",
21
- validate: (input) => {
22
- if (!input || !input.startsWith("0x")) {
23
- return "Private key must start with 0x";
24
- }
25
- return true;
26
- },
27
- },
28
- ]);
29
- const network = (opts.network === "sepolia" ? "sepolia" : "mainnet");
30
- const spinner = createSpinner("Connecting wallet...").start();
31
- const configService = ConfigService.getInstance();
32
- const rpcUrl = configService.get("rpcUrl");
33
- const gasfreeMode = configService.get("gasfreeMode") === true;
34
- const gasToken = configService.get("gasToken");
35
- const { needsPaymaster } = resolveFeeModeConfig(gasfreeMode, gasToken);
36
- const sdk = createSDK(network, rpcUrl, needsPaymaster);
37
- const wallet = await connectWallet(sdk, {
38
- type: "local",
39
- network,
40
- address: "",
41
- privateKey,
42
- });
43
- await wallet.ensureReady({ deploy: "if_needed" });
44
- const address = wallet.address.toString();
45
- saveSession({ type: "local", network, address, privateKey });
46
- spinner.succeed("Wallet connected");
47
- console.log(formatResult({ network, address }));
48
- console.log(success("Session saved. You can now use starkfi commands."));
49
- }
50
- catch (error) {
51
- console.error("Import failed:", error instanceof Error ? error.message : error);
52
- process.exit(1);
53
- }
54
- });
55
- }
56
- //# sourceMappingURL=import.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"import.js","sourceRoot":"","sources":["../../../src/commands/auth/import.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import type { Command } from "commander";
2
- export declare function registerLoginCommand(program: Command): void;
3
- //# sourceMappingURL=login.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/login.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKzC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAoB3D"}
@@ -1,24 +0,0 @@
1
- import { apiLogin } from "../../services/api/client.js";
2
- import { createSpinner, success, formatError } from "../../lib/format.js";
3
- import { getOrCreateAuthCommand } from "../../lib/command.js";
4
- export function registerLoginCommand(program) {
5
- const authCmd = getOrCreateAuthCommand(program);
6
- authCmd
7
- .command("login <email>")
8
- .description("Send OTP to email for Privy wallet authentication")
9
- .action(async (email) => {
10
- const spinner = createSpinner("Sending OTP...").start();
11
- try {
12
- await apiLogin(email);
13
- spinner.succeed("OTP sent");
14
- console.log(success(`Check your email (${email}) for the code.`));
15
- console.log(`Run: starkfi auth verify ${email} <code>`);
16
- }
17
- catch (error) {
18
- spinner.fail("Login failed");
19
- console.error(formatError(error));
20
- process.exit(1);
21
- }
22
- });
23
- }
24
- //# sourceMappingURL=login.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/commands/auth/login.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACpD,MAAM,OAAO,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAEhD,OAAO;SACL,OAAO,CAAC,eAAe,CAAC;SACxB,WAAW,CAAC,mDAAmD,CAAC;SAChE,MAAM,CAAC,KAAK,EAAE,KAAa,EAAE,EAAE;QAC/B,MAAM,OAAO,GAAG,aAAa,CAAC,gBAAgB,CAAC,CAAC,KAAK,EAAE,CAAC;QACxD,IAAI,CAAC;YACJ,MAAM,QAAQ,CAAC,KAAK,CAAC,CAAC;YAEtB,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,qBAAqB,KAAK,iBAAiB,CAAC,CAAC,CAAC;YAClE,OAAO,CAAC,GAAG,CAAC,4BAA4B,KAAK,SAAS,CAAC,CAAC;QACzD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAC7B,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;YAClC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;IACF,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -1,3 +0,0 @@
1
- import type { Command } from "commander";
2
- export declare function registerLogoutCommand(program: Command): void;
3
- //# sourceMappingURL=logout.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"logout.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/logout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKzC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAU5D"}
@@ -1,14 +0,0 @@
1
- import { clearSession } from "../../services/auth/session.js";
2
- import { success } from "../../lib/format.js";
3
- import { getOrCreateAuthCommand } from "../../lib/command.js";
4
- export function registerLogoutCommand(program) {
5
- const authCmd = getOrCreateAuthCommand(program);
6
- authCmd
7
- .command("logout")
8
- .description("Clear session and log out")
9
- .action(() => {
10
- clearSession();
11
- console.log(success("Logged out. Session cleared."));
12
- });
13
- }
14
- //# sourceMappingURL=logout.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"logout.js","sourceRoot":"","sources":["../../../src/commands/auth/logout.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACrD,MAAM,OAAO,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAEhD,OAAO;SACL,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,2BAA2B,CAAC;SACxC,MAAM,CAAC,GAAG,EAAE;QACZ,YAAY,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -1,3 +0,0 @@
1
- import type { Command } from "commander";
2
- export declare function registerVerifyCommand(program: Command): void;
3
- //# sourceMappingURL=verify.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../../src/commands/auth/verify.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASzC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuE5D"}
@@ -1,64 +0,0 @@
1
- import { apiVerify } from "../../services/api/client.js";
2
- import { saveSession } from "../../services/auth/session.js";
3
- import { createSpinner, success, formatResult, formatError } from "../../lib/format.js";
4
- import { STARKFI_API_URL_DEFAULT } from "../../lib/config.js";
5
- import { createSDK, connectWallet, resolveFeeModeConfig } from "../../services/starkzap/client.js";
6
- import { ConfigService } from "../../services/config/config.js";
7
- import { getOrCreateAuthCommand } from "../../lib/command.js";
8
- export function registerVerifyCommand(program) {
9
- const authCmd = getOrCreateAuthCommand(program);
10
- authCmd
11
- .command("verify <email> <code>")
12
- .description("Verify OTP and connect Privy wallet")
13
- .option("-n, --network <network>", "Network (mainnet or sepolia)", "mainnet")
14
- .action(async (email, code, opts) => {
15
- try {
16
- const network = (opts.network === "sepolia" ? "sepolia" : "mainnet");
17
- const spinner = createSpinner("Verifying OTP...").start();
18
- const result = await apiVerify(email, code);
19
- const serverUrl = (process.env.STARKFI_API_URL ?? STARKFI_API_URL_DEFAULT) + "/sign/hash";
20
- const tempSession = {
21
- type: "privy",
22
- network,
23
- address: result.walletAddress,
24
- userId: result.userId,
25
- walletId: result.walletId,
26
- publicKey: result.walletPublicKey,
27
- token: result.token,
28
- serverUrl,
29
- };
30
- const configService = ConfigService.getInstance();
31
- const rpcUrl = configService.get("rpcUrl");
32
- const gasfreeMode = configService.get("gasfreeMode") === true;
33
- const gasToken = configService.get("gasToken");
34
- const { needsPaymaster } = resolveFeeModeConfig(gasfreeMode, gasToken);
35
- const sdk = createSDK(network, rpcUrl, needsPaymaster);
36
- const wallet = await connectWallet(sdk, tempSession);
37
- const actualAddress = wallet.address.toString();
38
- saveSession({ ...tempSession, address: actualAddress });
39
- spinner.succeed("Wallet connected");
40
- console.log(formatResult({
41
- network,
42
- address: actualAddress,
43
- walletId: result.walletId,
44
- message: result.isExisting
45
- ? "Existing wallet found and connected."
46
- : "New wallet created and session saved.",
47
- }));
48
- console.log(success("Ready. You can now use starkfi commands."));
49
- if (!result.isExisting) {
50
- console.log("\n Next steps:\n" +
51
- " 1. Send some ETH or STRK to your address above\n" +
52
- " 2. Run: starkfi deploy\n" +
53
- " 3. Start using: starkfi send, starkfi trade\n\n" +
54
- " Or enable gasfree mode (no funds needed):\n" +
55
- " starkfi config set-gasfree on\n");
56
- }
57
- }
58
- catch (error) {
59
- console.error(formatError(error));
60
- process.exit(1);
61
- }
62
- });
63
- }
64
- //# sourceMappingURL=verify.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"verify.js","sourceRoot":"","sources":["../../../src/commands/auth/verify.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import type { Command } from "commander";
2
- export declare function registerBatchCommand(program: Command): void;
3
- //# sourceMappingURL=batch.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"batch.d.ts","sourceRoot":"","sources":["../../../src/commands/batch/batch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA8EzC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuG3D"}
@@ -1,146 +0,0 @@
1
- import { requireSession } from "../../services/auth/session.js";
2
- import { initSDKAndWallet } from "../../services/starkzap/client.js";
3
- import { buildBatch } from "../../services/batch/batch.js";
4
- import { simulateTransaction } from "../../services/simulate/simulate.js";
5
- import { createSpinner, formatError } from "../../lib/format.js";
6
- import { outputResult } from "../../lib/cli-helpers.js";
7
- import { ErrorCode, StarkfiError } from "../../lib/errors.js";
8
- // Collect repeatable options into array.
9
- function collect(value, previous) {
10
- return previous.concat([value]);
11
- }
12
- // Parse "100 USDC ETH" into a typed BatchOperation.
13
- function parseOperation(type, raw) {
14
- const parts = raw.trim().split(/\s+/);
15
- switch (type) {
16
- case "swap": {
17
- if (parts.length < 3) {
18
- throw new StarkfiError(ErrorCode.INVALID_AMOUNT, `Invalid --swap format: "${raw}". Expected: "100 USDC ETH"`);
19
- }
20
- return {
21
- type: "swap",
22
- params: { amount: parts[0], from_token: parts[1], to_token: parts[2] },
23
- };
24
- }
25
- case "stake": {
26
- if (parts.length < 2) {
27
- throw new StarkfiError(ErrorCode.INVALID_AMOUNT, `Invalid --stake format: "${raw}". Expected: "50 STRK karnot" or "50 STRK 0xPool"`);
28
- }
29
- const target = parts[2];
30
- const isAddress = target?.startsWith("0x");
31
- return {
32
- type: "stake",
33
- params: {
34
- amount: parts[0],
35
- token: parts[1],
36
- ...(isAddress ? { pool: target } : { validator: target }),
37
- },
38
- };
39
- }
40
- case "supply": {
41
- if (parts.length < 3) {
42
- throw new StarkfiError(ErrorCode.INVALID_AMOUNT, `Invalid --supply format: "${raw}". Expected: "200 USDC 0xPool"`);
43
- }
44
- return {
45
- type: "supply",
46
- params: { amount: parts[0], token: parts[1], pool: parts[2] },
47
- };
48
- }
49
- case "send": {
50
- if (parts.length < 3) {
51
- throw new StarkfiError(ErrorCode.INVALID_AMOUNT, `Invalid --send format: "${raw}". Expected: "10 STRK 0x04a3..."`);
52
- }
53
- return {
54
- type: "send",
55
- params: { amount: parts[0], token: parts[1], to: parts[2] },
56
- };
57
- }
58
- default:
59
- throw new StarkfiError(ErrorCode.INVALID_CONFIG, `Unknown operation type: ${type}`);
60
- }
61
- }
62
- export function registerBatchCommand(program) {
63
- program
64
- .command("batch")
65
- .description("Execute multiple DeFi operations in a single Starknet transaction (multicall)")
66
- .option("--swap <args>", 'Swap tokens: "100 USDC ETH" (repeatable)', collect, [])
67
- .option("--stake <args>", 'Stake tokens: "50 STRK karnot" (repeatable)', collect, [])
68
- .option("--supply <args>", 'Supply to Vesu: "200 USDC 0xPool" (repeatable)', collect, [])
69
- .option("--send <args>", 'Send tokens: "10 STRK 0xAddr" (repeatable)', collect, [])
70
- .option("--simulate", "Estimate fees and validate without executing")
71
- .option("--json", "Output raw JSON")
72
- .addHelpText("after", `
73
- Examples:
74
- $ starkfi batch --swap "0.1 ETH USDC" --stake "50 STRK karnot"
75
- $ starkfi batch --swap "100 USDC ETH" --supply "200 USDC 0xABC" --simulate
76
-
77
- Flag formats:
78
- --swap "<amount> <from> <to>" e.g. "0.5 ETH USDC"
79
- --stake "<amount> <token> <validator>" e.g. "50 STRK karnot"
80
- --supply "<amount> <token> <pool>" e.g. "200 USDC 0xABC..."
81
- --send "<amount> <token> <address>" e.g. "10 STRK 0x04a3..."
82
-
83
- Minimum 2 operations required. Each flag can be repeated.`)
84
- .action(async (opts) => {
85
- const spinner = createSpinner("Preparing batch...").start();
86
- try {
87
- const operations = [
88
- ...opts.swap.map((s) => parseOperation("swap", s)),
89
- ...opts.stake.map((s) => parseOperation("stake", s)),
90
- ...opts.supply.map((s) => parseOperation("supply", s)),
91
- ...opts.send.map((s) => parseOperation("send", s)),
92
- ];
93
- if (operations.length < 2) {
94
- throw new StarkfiError(ErrorCode.INVALID_AMOUNT, "Batch requires at least 2 operations. Provide multiple --swap/--stake/--supply/--send options.");
95
- }
96
- const session = requireSession();
97
- const { wallet } = await initSDKAndWallet(session);
98
- await wallet.ensureReady({ deploy: "if_needed" });
99
- spinner.text = "Building batch transaction...";
100
- const { builder, summary } = await buildBatch(wallet, session, operations);
101
- spinner.stop();
102
- console.log("\n Batch Operations:\n");
103
- summary.forEach((s, i) => console.log(` ${i + 1}. ${s}`));
104
- console.log();
105
- if (opts.simulate) {
106
- spinner.start();
107
- spinner.text = "Simulating batch...";
108
- const sim = await simulateTransaction(builder);
109
- if (sim.success) {
110
- spinner.succeed("Simulation complete");
111
- }
112
- else {
113
- spinner.fail("Simulation failed");
114
- }
115
- const simResult = {
116
- mode: "SIMULATION (no TX sent)",
117
- operations: operations.length,
118
- estimatedFee: sim.estimatedFee,
119
- estimatedFeeUsd: sim.estimatedFeeUsd,
120
- calls: sim.callCount,
121
- ...(sim.revertReason ? { revertReason: sim.revertReason } : {}),
122
- };
123
- outputResult(simResult, opts);
124
- return;
125
- }
126
- spinner.start();
127
- spinner.text = "Executing batch...";
128
- const tx = await builder.send();
129
- spinner.text = "Waiting for confirmation...";
130
- await tx.wait();
131
- spinner.succeed("Batch confirmed");
132
- const txResult = {
133
- operations: operations.length,
134
- txHash: tx.hash,
135
- explorer: tx.explorerUrl,
136
- };
137
- outputResult(txResult, opts);
138
- }
139
- catch (error) {
140
- spinner.fail("Batch failed");
141
- console.error(formatError(error));
142
- process.exit(1);
143
- }
144
- });
145
- }
146
- //# sourceMappingURL=batch.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"batch.js","sourceRoot":"","sources":["../../../src/commands/batch/batch.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import type { Command } from "commander";
2
- export declare function registerTxStatusCommand(program: Command): void;
3
- //# sourceMappingURL=tx-status.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tx-status.d.ts","sourceRoot":"","sources":["../../../src/commands/chain/tx-status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQzC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAoC9D"}
@@ -1,34 +0,0 @@
1
- import { requireSession } from "../../services/auth/session.js";
2
- import { createSDK } from "../../services/starkzap/client.js";
3
- import { ConfigService } from "../../services/config/config.js";
4
- import { formatActualFee } from "../../lib/format.js";
5
- import { explorerUrl } from "../../lib/config.js";
6
- import { runCommand, outputResult } from "../../lib/cli-helpers.js";
7
- export function registerTxStatusCommand(program) {
8
- program
9
- .command("tx-status")
10
- .description("Check transaction status by hash")
11
- .argument("<hash>", "Transaction hash (0x...)")
12
- .action(async (hash) => {
13
- await runCommand("Checking transaction...", "Transaction found", "Failed to get transaction status", async () => {
14
- const session = requireSession();
15
- const configService = ConfigService.getInstance();
16
- const rpcUrl = configService.get("rpcUrl");
17
- const sdk = createSDK(session.network, rpcUrl);
18
- const provider = sdk.getProvider();
19
- const receipt = await provider.getTransactionReceipt(hash);
20
- const rawFee = "actual_fee" in receipt ? receipt.actual_fee : null;
21
- const actualFee = formatActualFee(rawFee);
22
- const blockNumber = "block_number" in receipt ? String(receipt.block_number) : "pending";
23
- return {
24
- hash,
25
- status: JSON.stringify(receipt.statusReceipt),
26
- actualFee,
27
- blockNumber,
28
- network: session.network,
29
- explorer: explorerUrl(hash, session.network),
30
- };
31
- }, (result) => outputResult(result, {}));
32
- });
33
- }
34
- //# sourceMappingURL=tx-status.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tx-status.js","sourceRoot":"","sources":["../../../src/commands/chain/tx-status.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAEpE,MAAM,UAAU,uBAAuB,CAAC,OAAgB;IACvD,OAAO;SACL,OAAO,CAAC,WAAW,CAAC;SACpB,WAAW,CAAC,kCAAkC,CAAC;SAC/C,QAAQ,CAAC,QAAQ,EAAE,0BAA0B,CAAC;SAC9C,MAAM,CAAC,KAAK,EAAE,IAAY,EAAE,EAAE;QAC9B,MAAM,UAAU,CACf,yBAAyB,EACzB,mBAAmB,EACnB,kCAAkC,EAClC,KAAK,IAAI,EAAE;YACV,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;YACjC,MAAM,aAAa,GAAG,aAAa,CAAC,WAAW,EAAE,CAAC;YAClD,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAuB,CAAC;YACjE,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAE/C,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;YACnC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;YAE3D,MAAM,MAAM,GAAG,YAAY,IAAI,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;YACnE,MAAM,SAAS,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;YAC1C,MAAM,WAAW,GAChB,cAAc,IAAI,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAEtE,OAAO;gBACN,IAAI;gBACJ,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,aAAa,CAAC;gBAC7C,SAAS;gBACT,WAAW;gBACX,OAAO,EAAE,OAAO,CAAC,OAAO;gBACxB,QAAQ,EAAE,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC;aAC5C,CAAC;QACH,CAAC,EACD,CAAC,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,EAAE,CAAC,CACpC,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -1,3 +0,0 @@
1
- import type { Command } from "commander";
2
- export declare function registerConfigCommand(program: Command): void;
3
- //# sourceMappingURL=config.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/commands/config/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKzC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+I5D"}
@@ -1,114 +0,0 @@
1
- import { ConfigService } from "../../services/config/config.js";
2
- import { success, formatResult, warn } from "../../lib/format.js";
3
- import { GASLESS_SUPPORTED_TOKENS } from "../../services/starkzap/config.js";
4
- export function registerConfigCommand(program) {
5
- const configService = ConfigService.getInstance();
6
- const configCmd = program.command("config").description("Manage starkfi configuration");
7
- configCmd
8
- .command("set-rpc")
9
- .description("Set a custom RPC URL for Starknet")
10
- .argument("<url>", "RPC endpoint URL")
11
- .addHelpText("after", "\nExample:\n $ starkfi config set-rpc https://starknet-mainnet.g.alchemy.com/v2/<key>")
12
- .action((url) => {
13
- configService.set("rpcUrl", url);
14
- console.log(success(`RPC URL set to: ${url}`));
15
- });
16
- configCmd
17
- .command("get-rpc")
18
- .description("Show the current RPC URL")
19
- .addHelpText("after", "\nExample:\n $ starkfi config get-rpc")
20
- .action(() => {
21
- const rpcUrl = configService.get("rpcUrl");
22
- console.log(formatResult({
23
- rpcUrl: rpcUrl || "default (Starkzap preset)",
24
- }));
25
- });
26
- configCmd
27
- .command("set-network")
28
- .description("Set default network (mainnet or sepolia)")
29
- .argument("<network>", "mainnet or sepolia")
30
- .addHelpText("after", "\nExamples:\n $ starkfi config set-network mainnet\n $ starkfi config set-network sepolia")
31
- .action((network) => {
32
- if (!["mainnet", "sepolia"].includes(network)) {
33
- console.log(warn("Network must be 'mainnet' or 'sepolia'"));
34
- process.exit(1);
35
- }
36
- configService.set("network", network);
37
- console.log(success(`Network set to: ${network}`));
38
- });
39
- // Gasfree mode: developer sponsors gas via Paymaster API key
40
- configCmd
41
- .command("set-gasfree")
42
- .description("Enable/disable Gasfree mode — developer sponsors gas via Paymaster")
43
- .argument("<mode>", "on or off")
44
- .addHelpText("after", "\nNote:\n Gasfree and Gasless modes are mutually exclusive.\n Enabling gasfree clears any gas token setting.\n\nExamples:\n $ starkfi config set-gasfree on\n $ starkfi config set-gasfree off")
45
- .action((mode) => {
46
- if (!["on", "off"].includes(mode)) {
47
- console.log(warn("Mode must be 'on' or 'off'"));
48
- process.exit(1);
49
- }
50
- configService.set("gasfreeMode", mode === "on");
51
- if (mode === "on") {
52
- // Gasfree and Gasless are mutually exclusive
53
- configService.delete("gasToken");
54
- console.log(success("Gasfree mode: on (developer sponsors gas via Paymaster)"));
55
- }
56
- else {
57
- console.log(success("Gasfree mode: off — using gasless mode (default: STRK)"));
58
- }
59
- });
60
- // Gas token selection: default is STRK, user can switch to any supported token
61
- configCmd
62
- .command("set-gas-token")
63
- .description(`Set gas payment token via Paymaster (default: STRK, supported: ${GASLESS_SUPPORTED_TOKENS.join(", ")})`)
64
- .argument("<token>", `Token symbol or 'reset' (supported: ${GASLESS_SUPPORTED_TOKENS.join(", ")})`)
65
- .addHelpText("after", `\nExamples:\n $ starkfi config set-gas-token ETH\n $ starkfi config set-gas-token USDC\n $ starkfi config set-gas-token reset # revert to STRK`)
66
- .action((token) => {
67
- if (["off", "reset", "default"].includes(token.toLowerCase())) {
68
- configService.delete("gasToken");
69
- console.log(success("Gas token reset to default: STRK"));
70
- return;
71
- }
72
- const upper = token.toUpperCase();
73
- if (!GASLESS_SUPPORTED_TOKENS.includes(upper)) {
74
- console.log(warn(`Unsupported token '${token}'. Supported: ${GASLESS_SUPPORTED_TOKENS.join(", ")}`));
75
- process.exit(1);
76
- }
77
- // Gasless and Gasfree are mutually exclusive
78
- configService.delete("gasfreeMode");
79
- configService.set("gasToken", upper);
80
- console.log(success(`Gas token set to: ${upper} — gas will be paid in ${upper} via Paymaster`));
81
- });
82
- configCmd
83
- .command("list")
84
- .description("Show all configuration settings")
85
- .addHelpText("after", "\nExample:\n $ starkfi config list")
86
- .action(() => {
87
- const all = configService.getAll();
88
- if (Object.keys(all).length === 0) {
89
- console.log(" No custom settings. Using defaults.\n");
90
- return;
91
- }
92
- // Human-readable fee mode summary
93
- const gasfreeMode = all.gasfreeMode === true;
94
- const gasToken = all.gasToken;
95
- let feeModeSummary = "gasless (pays STRK via Paymaster)";
96
- if (gasfreeMode)
97
- feeModeSummary = "gasfree (developer-sponsored via Paymaster)";
98
- else if (gasToken)
99
- feeModeSummary = `gasless (pays ${gasToken} via Paymaster)`;
100
- console.log(formatResult({
101
- ...all,
102
- feeMode: feeModeSummary,
103
- }));
104
- });
105
- configCmd
106
- .command("reset")
107
- .description("Reset all configuration to defaults")
108
- .addHelpText("after", "\nExample:\n $ starkfi config reset")
109
- .action(() => {
110
- configService.clear();
111
- console.log(success("All settings reset to defaults."));
112
- });
113
- }
114
- //# sourceMappingURL=config.js.map