starkfi 0.1.0 → 0.2.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 (195) hide show
  1. package/MCP.md +70 -0
  2. package/README.md +120 -58
  3. package/dist/commands/auth/login.js +2 -2
  4. package/dist/commands/auth/login.js.map +1 -1
  5. package/dist/commands/auth/verify.d.ts.map +1 -1
  6. package/dist/commands/auth/verify.js +2 -2
  7. package/dist/commands/auth/verify.js.map +1 -1
  8. package/dist/commands/batch/batch.d.ts +3 -0
  9. package/dist/commands/batch/batch.d.ts.map +1 -0
  10. package/dist/commands/batch/batch.js +143 -0
  11. package/dist/commands/batch/batch.js.map +1 -0
  12. package/dist/commands/chain/tx-status.js +2 -2
  13. package/dist/commands/chain/tx-status.js.map +1 -1
  14. package/dist/commands/config/config.d.ts.map +1 -1
  15. package/dist/commands/config/config.js +14 -31
  16. package/dist/commands/config/config.js.map +1 -1
  17. package/dist/commands/lending/lending.d.ts +1 -0
  18. package/dist/commands/lending/lending.d.ts.map +1 -1
  19. package/dist/commands/lending/lending.js +187 -48
  20. package/dist/commands/lending/lending.js.map +1 -1
  21. package/dist/commands/portfolio/portfolio.d.ts +3 -0
  22. package/dist/commands/portfolio/portfolio.d.ts.map +1 -0
  23. package/dist/commands/portfolio/portfolio.js +76 -0
  24. package/dist/commands/portfolio/portfolio.js.map +1 -0
  25. package/dist/commands/staking/staking.d.ts +1 -1
  26. package/dist/commands/staking/staking.d.ts.map +1 -1
  27. package/dist/commands/staking/staking.js +142 -61
  28. package/dist/commands/staking/staking.js.map +1 -1
  29. package/dist/commands/trade/multi-swap.d.ts +3 -0
  30. package/dist/commands/trade/multi-swap.d.ts.map +1 -0
  31. package/dist/commands/trade/multi-swap.js +140 -0
  32. package/dist/commands/trade/multi-swap.js.map +1 -0
  33. package/dist/commands/trade/status.js +2 -2
  34. package/dist/commands/trade/status.js.map +1 -1
  35. package/dist/commands/trade/swap.d.ts.map +1 -1
  36. package/dist/commands/trade/swap.js +45 -10
  37. package/dist/commands/trade/swap.js.map +1 -1
  38. package/dist/commands/wallet/balance.d.ts.map +1 -1
  39. package/dist/commands/wallet/balance.js +19 -2
  40. package/dist/commands/wallet/balance.js.map +1 -1
  41. package/dist/commands/wallet/deploy.d.ts.map +1 -1
  42. package/dist/commands/wallet/deploy.js +2 -1
  43. package/dist/commands/wallet/deploy.js.map +1 -1
  44. package/dist/commands/wallet/send.d.ts.map +1 -1
  45. package/dist/commands/wallet/send.js +45 -8
  46. package/dist/commands/wallet/send.js.map +1 -1
  47. package/dist/index.js +22 -7
  48. package/dist/index.js.map +1 -1
  49. package/dist/lib/banner.d.ts +6 -0
  50. package/dist/lib/banner.d.ts.map +1 -0
  51. package/dist/lib/banner.js +78 -0
  52. package/dist/lib/banner.js.map +1 -0
  53. package/dist/lib/config.d.ts +0 -11
  54. package/dist/lib/config.d.ts.map +1 -1
  55. package/dist/lib/config.js +0 -20
  56. package/dist/lib/config.js.map +1 -1
  57. package/dist/lib/errors.d.ts +2 -0
  58. package/dist/lib/errors.d.ts.map +1 -1
  59. package/dist/lib/errors.js +2 -0
  60. package/dist/lib/errors.js.map +1 -1
  61. package/dist/lib/format.d.ts +43 -2
  62. package/dist/lib/format.d.ts.map +1 -1
  63. package/dist/lib/format.js +51 -5
  64. package/dist/lib/format.js.map +1 -1
  65. package/dist/lib/retry.d.ts +15 -0
  66. package/dist/lib/retry.d.ts.map +1 -0
  67. package/dist/lib/retry.js +29 -0
  68. package/dist/lib/retry.js.map +1 -0
  69. package/dist/lib/validation.d.ts +0 -12
  70. package/dist/lib/validation.d.ts.map +1 -1
  71. package/dist/lib/validation.js +1 -23
  72. package/dist/lib/validation.js.map +1 -1
  73. package/dist/mcp/handlers/batch.d.ts +13 -0
  74. package/dist/mcp/handlers/batch.d.ts.map +1 -0
  75. package/dist/mcp/handlers/batch.js +33 -0
  76. package/dist/mcp/handlers/batch.js.map +1 -0
  77. package/dist/mcp/handlers/config.d.ts +1 -1
  78. package/dist/mcp/handlers/config.d.ts.map +1 -1
  79. package/dist/mcp/handlers/config.js +11 -12
  80. package/dist/mcp/handlers/config.js.map +1 -1
  81. package/dist/mcp/handlers/index.d.ts +3 -0
  82. package/dist/mcp/handlers/index.d.ts.map +1 -1
  83. package/dist/mcp/handlers/index.js +3 -0
  84. package/dist/mcp/handlers/index.js.map +1 -1
  85. package/dist/mcp/handlers/lending.d.ts +12 -1
  86. package/dist/mcp/handlers/lending.d.ts.map +1 -1
  87. package/dist/mcp/handlers/lending.js +67 -23
  88. package/dist/mcp/handlers/lending.js.map +1 -1
  89. package/dist/mcp/handlers/multi-swap.d.ts +27 -0
  90. package/dist/mcp/handlers/multi-swap.d.ts.map +1 -0
  91. package/dist/mcp/handlers/multi-swap.js +73 -0
  92. package/dist/mcp/handlers/multi-swap.js.map +1 -0
  93. package/dist/mcp/handlers/portfolio.d.ts +7 -0
  94. package/dist/mcp/handlers/portfolio.d.ts.map +1 -0
  95. package/dist/mcp/handlers/portfolio.js +11 -0
  96. package/dist/mcp/handlers/portfolio.js.map +1 -0
  97. package/dist/mcp/handlers/staking.d.ts +13 -1
  98. package/dist/mcp/handlers/staking.d.ts.map +1 -1
  99. package/dist/mcp/handlers/staking.js +18 -5
  100. package/dist/mcp/handlers/staking.js.map +1 -1
  101. package/dist/mcp/handlers/trade.d.ts +1 -0
  102. package/dist/mcp/handlers/trade.d.ts.map +1 -1
  103. package/dist/mcp/handlers/trade.js +23 -9
  104. package/dist/mcp/handlers/trade.js.map +1 -1
  105. package/dist/mcp/handlers/wallet.d.ts +1 -0
  106. package/dist/mcp/handlers/wallet.d.ts.map +1 -1
  107. package/dist/mcp/handlers/wallet.js +16 -1
  108. package/dist/mcp/handlers/wallet.js.map +1 -1
  109. package/dist/mcp/tools.d.ts.map +1 -1
  110. package/dist/mcp/tools.js +102 -33
  111. package/dist/mcp/tools.js.map +1 -1
  112. package/dist/services/api/client.d.ts +0 -12
  113. package/dist/services/api/client.d.ts.map +1 -1
  114. package/dist/services/api/client.js +3 -8
  115. package/dist/services/api/client.js.map +1 -1
  116. package/dist/services/auth/session.d.ts +1 -7
  117. package/dist/services/auth/session.d.ts.map +1 -1
  118. package/dist/services/auth/session.js +20 -0
  119. package/dist/services/auth/session.js.map +1 -1
  120. package/dist/services/batch/batch.d.ts +36 -0
  121. package/dist/services/batch/batch.d.ts.map +1 -0
  122. package/dist/services/batch/batch.js +111 -0
  123. package/dist/services/batch/batch.js.map +1 -0
  124. package/dist/services/config/config.d.ts +4 -0
  125. package/dist/services/config/config.d.ts.map +1 -1
  126. package/dist/services/config/config.js +31 -1
  127. package/dist/services/config/config.js.map +1 -1
  128. package/dist/services/fibrous/config.d.ts +4 -0
  129. package/dist/services/fibrous/config.d.ts.map +1 -0
  130. package/dist/services/fibrous/config.js +4 -0
  131. package/dist/services/fibrous/config.js.map +1 -0
  132. package/dist/services/fibrous/health.js +1 -1
  133. package/dist/services/fibrous/health.js.map +1 -1
  134. package/dist/services/fibrous/route.d.ts +19 -6
  135. package/dist/services/fibrous/route.d.ts.map +1 -1
  136. package/dist/services/fibrous/route.js +64 -3
  137. package/dist/services/fibrous/route.js.map +1 -1
  138. package/dist/services/portfolio/portfolio.d.ts +35 -0
  139. package/dist/services/portfolio/portfolio.d.ts.map +1 -0
  140. package/dist/services/portfolio/portfolio.js +106 -0
  141. package/dist/services/portfolio/portfolio.js.map +1 -0
  142. package/dist/services/simulate/simulate.d.ts +18 -0
  143. package/dist/services/simulate/simulate.d.ts.map +1 -0
  144. package/dist/services/simulate/simulate.js +61 -0
  145. package/dist/services/simulate/simulate.js.map +1 -0
  146. package/dist/services/staking/staking.d.ts +5 -13
  147. package/dist/services/staking/staking.d.ts.map +1 -1
  148. package/dist/services/staking/staking.js +44 -52
  149. package/dist/services/staking/staking.js.map +1 -1
  150. package/dist/services/starkzap/client.d.ts.map +1 -1
  151. package/dist/services/starkzap/client.js +38 -18
  152. package/dist/services/starkzap/client.js.map +1 -1
  153. package/dist/services/starkzap/config.d.ts +6 -0
  154. package/dist/services/starkzap/config.d.ts.map +1 -0
  155. package/dist/services/starkzap/config.js +13 -0
  156. package/dist/services/starkzap/config.js.map +1 -0
  157. package/dist/services/tokens/balances.d.ts.map +1 -1
  158. package/dist/services/tokens/balances.js +26 -14
  159. package/dist/services/tokens/balances.js.map +1 -1
  160. package/dist/services/tokens/tokens.d.ts +2 -3
  161. package/dist/services/tokens/tokens.d.ts.map +1 -1
  162. package/dist/services/tokens/tokens.js +3 -8
  163. package/dist/services/tokens/tokens.js.map +1 -1
  164. package/dist/services/vesu/api.d.ts +28 -0
  165. package/dist/services/vesu/api.d.ts.map +1 -0
  166. package/dist/services/vesu/api.js +97 -0
  167. package/dist/services/vesu/api.js.map +1 -0
  168. package/dist/services/vesu/config.d.ts +9 -0
  169. package/dist/services/vesu/config.d.ts.map +1 -0
  170. package/dist/services/vesu/config.js +32 -0
  171. package/dist/services/vesu/config.js.map +1 -0
  172. package/dist/services/vesu/index.d.ts +2 -0
  173. package/dist/services/vesu/index.d.ts.map +1 -1
  174. package/dist/services/vesu/index.js +2 -0
  175. package/dist/services/vesu/index.js.map +1 -1
  176. package/dist/services/vesu/lending.d.ts +8 -1
  177. package/dist/services/vesu/lending.d.ts.map +1 -1
  178. package/dist/services/vesu/lending.js +171 -52
  179. package/dist/services/vesu/lending.js.map +1 -1
  180. package/dist/services/vesu/pools.d.ts +5 -11
  181. package/dist/services/vesu/pools.d.ts.map +1 -1
  182. package/dist/services/vesu/pools.js +11 -31
  183. package/dist/services/vesu/pools.js.map +1 -1
  184. package/package.json +88 -82
  185. package/skills/README.md +63 -0
  186. package/skills/authenticate-wallet/SKILL.md +119 -0
  187. package/skills/balance/SKILL.md +80 -0
  188. package/skills/batch/SKILL.md +118 -0
  189. package/skills/config/SKILL.md +144 -0
  190. package/skills/lending/SKILL.md +209 -0
  191. package/skills/multi-swap/SKILL.md +95 -0
  192. package/skills/portfolio/SKILL.md +82 -0
  193. package/skills/send/SKILL.md +82 -0
  194. package/skills/staking/SKILL.md +188 -0
  195. package/skills/trade/SKILL.md +92 -0
@@ -0,0 +1,140 @@
1
+ import { Amount, fromAddress } from "starkzap";
2
+ import { requireSession } from "../../services/auth/session.js";
3
+ import { initSDKAndWallet } from "../../services/starkzap/client.js";
4
+ import { resolveToken } from "../../services/tokens/tokens.js";
5
+ import { getCalldataBatch, getRouteBatch, } from "../../services/fibrous/route.js";
6
+ import { FIBROUS_ROUTER_ADDRESS } from "../../services/fibrous/config.js";
7
+ import { simulateTransaction } from "../../services/simulate/simulate.js";
8
+ import { createSpinner, formatResult, formatTable, formatError } from "../../lib/format.js";
9
+ import { ErrorCode, StarkfiError } from "../../lib/errors.js";
10
+ /** Parse "100 USDC>ETH, 50 USDC>STRK" into structured pairs. */
11
+ function parsePairs(input) {
12
+ const segments = input.split(",").map((s) => s.trim());
13
+ const parsed = [];
14
+ for (const seg of segments) {
15
+ const match = seg.match(/^([\d.]+)\s+(\w+)>(\w+)$/i);
16
+ if (!match) {
17
+ throw new StarkfiError(ErrorCode.INVALID_AMOUNT, `Invalid pair format: "${seg}". Expected: "100 USDC>ETH"`);
18
+ }
19
+ parsed.push({
20
+ amount: match[1],
21
+ fromToken: match[2].toUpperCase(),
22
+ toToken: match[3].toUpperCase(),
23
+ });
24
+ }
25
+ if (parsed.length < 2) {
26
+ throw new StarkfiError(ErrorCode.INVALID_AMOUNT, "Multi-swap requires at least 2 pairs. Use regular swap for single pairs.");
27
+ }
28
+ return parsed;
29
+ }
30
+ export function registerMultiSwapCommand(program) {
31
+ program
32
+ .command("multi-swap")
33
+ .description("Swap multiple token pairs in one transaction (max 3, via Fibrous batch)")
34
+ .argument("<pairs>", 'Swap pairs (e.g. "100 USDC>ETH, 50 USDC>STRK")')
35
+ .option("-s, --slippage <percent>", "Slippage tolerance %", "1")
36
+ .option("--simulate", "Estimate fees and validate without executing")
37
+ .option("--json", "Output raw JSON")
38
+ .action(async (pairsInput, opts) => {
39
+ const spinner = createSpinner("Parsing swap pairs...").start();
40
+ try {
41
+ const parsed = parsePairs(pairsInput);
42
+ const session = requireSession();
43
+ const { wallet } = await initSDKAndWallet(session);
44
+ await wallet.ensureReady({ deploy: "if_needed" });
45
+ spinner.text = "Resolving tokens...";
46
+ const pairs = await Promise.all(parsed.map(async (p) => {
47
+ const tokenIn = await resolveToken(p.fromToken);
48
+ const tokenOut = await resolveToken(p.toToken);
49
+ const parsedAmount = Amount.parse(p.amount, tokenIn);
50
+ return {
51
+ tokenIn,
52
+ tokenOut,
53
+ amount: parsedAmount.toBase().toString(),
54
+ };
55
+ }));
56
+ spinner.text = "Finding optimal routes...";
57
+ const routes = await getRouteBatch(pairs);
58
+ spinner.stop();
59
+ console.log();
60
+ console.log(formatTable(["#", "Input", "Output", "Route"], routes.map((r, i) => {
61
+ const outDec = r.outputToken?.decimals ?? pairs[i].tokenOut.decimals;
62
+ const outSym = r.outputToken?.symbol ?? pairs[i].tokenOut.symbol;
63
+ const outAmount = Amount.fromRaw(BigInt(r.outputAmount), {
64
+ ...pairs[i].tokenOut,
65
+ decimals: outDec,
66
+ }).toUnit();
67
+ return [
68
+ `${i + 1}`,
69
+ `${parsed[i].amount} ${parsed[i].fromToken}`,
70
+ `~${outAmount} ${outSym}`,
71
+ `${r.route?.length ?? 0} step(s)`,
72
+ ];
73
+ })));
74
+ console.log();
75
+ spinner.start();
76
+ spinner.text = "Generating calldata...";
77
+ const calldataResults = await getCalldataBatch(pairs, parseFloat(opts.slippage), session.address);
78
+ const builder = wallet.tx();
79
+ for (let i = 0; i < pairs.length; i++) {
80
+ const pair = pairs[i];
81
+ const cd = calldataResults[i];
82
+ const parsedAmount = Amount.parse(parsed[i].amount, pair.tokenIn);
83
+ builder
84
+ .approve(pair.tokenIn, fromAddress(FIBROUS_ROUTER_ADDRESS), parsedAmount)
85
+ .add({
86
+ contractAddress: FIBROUS_ROUTER_ADDRESS,
87
+ entrypoint: "swap",
88
+ calldata: cd.calldata,
89
+ });
90
+ }
91
+ if (opts.simulate) {
92
+ spinner.text = "Simulating transaction...";
93
+ const sim = await simulateTransaction(builder);
94
+ if (sim.success) {
95
+ spinner.succeed("Simulation complete");
96
+ }
97
+ else {
98
+ spinner.fail("Simulation failed");
99
+ }
100
+ const simResult = {
101
+ mode: "SIMULATION (no TX sent)",
102
+ pairs: pairs.length,
103
+ estimatedFee: sim.estimatedFee,
104
+ estimatedFeeUsd: sim.estimatedFeeUsd,
105
+ calls: sim.callCount,
106
+ ...(sim.revertReason ? { revertReason: sim.revertReason } : {}),
107
+ };
108
+ if (opts.json) {
109
+ console.log(JSON.stringify(simResult, null, 2));
110
+ }
111
+ else {
112
+ console.log(formatResult(simResult));
113
+ }
114
+ return;
115
+ }
116
+ spinner.text = "Executing multi-swap...";
117
+ const tx = await builder.send();
118
+ spinner.text = "Waiting for confirmation...";
119
+ await tx.wait();
120
+ spinner.succeed("Multi-swap confirmed");
121
+ const txResult = {
122
+ pairs: pairs.length,
123
+ txHash: tx.hash,
124
+ explorer: tx.explorerUrl,
125
+ };
126
+ if (opts.json) {
127
+ console.log(JSON.stringify(txResult, null, 2));
128
+ }
129
+ else {
130
+ console.log(formatResult(txResult));
131
+ }
132
+ }
133
+ catch (error) {
134
+ spinner.fail("Multi-swap failed");
135
+ console.error(formatError(error));
136
+ process.exit(1);
137
+ }
138
+ });
139
+ }
140
+ //# sourceMappingURL=multi-swap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multi-swap.js","sourceRoot":"","sources":["../../../src/commands/trade/multi-swap.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { loadSession } from "../../services/auth/session.js";
2
2
  import { checkFibrousHealth } from "../../services/fibrous/health.js";
3
- import { createSpinner, formatResult, success, warn } from "../../lib/format.js";
3
+ import { createSpinner, formatResult, success, warn, formatError } from "../../lib/format.js";
4
4
  export function registerStatusCommand(program) {
5
5
  program
6
6
  .command("status")
@@ -33,7 +33,7 @@ export function registerStatusCommand(program) {
33
33
  }
34
34
  catch (error) {
35
35
  spinner.fail("Status check failed");
36
- console.error(error instanceof Error ? error.message : error);
36
+ console.error(formatError(error));
37
37
  process.exit(1);
38
38
  }
39
39
  });
@@ -1 +1 @@
1
- {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/commands/trade/status.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAEjF,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACrD,OAAO;SACL,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,oDAAoD,CAAC;SACjE,MAAM,CAAC,KAAK,IAAI,EAAE;QAClB,MAAM,OAAO,GAAG,aAAa,CAAC,oBAAoB,CAAC,CAAC,KAAK,EAAE,CAAC;QAE5D,IAAI,CAAC;YACJ,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,MAAM,kBAAkB,EAAE,CAAC;YAE1C,OAAO,CAAC,IAAI,EAAE,CAAC;YAEf,IAAI,CAAC,OAAO,EAAE,CAAC;gBACd,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC;gBACvC,OAAO,CAAC,GAAG,CACV,4EAA4E,CAC5E,CAAC;YACH,CAAC;iBAAM,CAAC;gBACP,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC;gBACtC,OAAO,CAAC,GAAG,CACV,YAAY,CAAC;oBACZ,IAAI,EAAE,OAAO,CAAC,IAAI;oBAClB,OAAO,EAAE,OAAO,CAAC,OAAO;oBACxB,OAAO,EAAE,OAAO,CAAC,OAAO;iBACxB,CAAC,CACF,CAAC;gBACF,OAAO,CAAC,GAAG,EAAE,CAAC;YACf,CAAC;YAED,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;gBACf,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAC,CAAC;YACtD,CAAC;iBAAM,CAAC;gBACP,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,yBAAyB,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YAC9D,CAAC;QACF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;YACpC,OAAO,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;IACF,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/commands/trade/status.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAE9F,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACrD,OAAO;SACL,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,oDAAoD,CAAC;SACjE,MAAM,CAAC,KAAK,IAAI,EAAE;QAClB,MAAM,OAAO,GAAG,aAAa,CAAC,oBAAoB,CAAC,CAAC,KAAK,EAAE,CAAC;QAE5D,IAAI,CAAC;YACJ,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,MAAM,kBAAkB,EAAE,CAAC;YAE1C,OAAO,CAAC,IAAI,EAAE,CAAC;YAEf,IAAI,CAAC,OAAO,EAAE,CAAC;gBACd,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC;gBACvC,OAAO,CAAC,GAAG,CACV,4EAA4E,CAC5E,CAAC;YACH,CAAC;iBAAM,CAAC;gBACP,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC;gBACtC,OAAO,CAAC,GAAG,CACV,YAAY,CAAC;oBACZ,IAAI,EAAE,OAAO,CAAC,IAAI;oBAClB,OAAO,EAAE,OAAO,CAAC,OAAO;oBACxB,OAAO,EAAE,OAAO,CAAC,OAAO;iBACxB,CAAC,CACF,CAAC;gBACF,OAAO,CAAC,GAAG,EAAE,CAAC;YACf,CAAC;YAED,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;gBACf,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAC,CAAC;YACtD,CAAC;iBAAM,CAAC;gBACP,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,yBAAyB,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YAC9D,CAAC;QACF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;YACpC,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 +1 @@
1
- {"version":3,"file":"swap.d.ts","sourceRoot":"","sources":["../../../src/commands/trade/swap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASzC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA4E1D"}
1
+ {"version":3,"file":"swap.d.ts","sourceRoot":"","sources":["../../../src/commands/trade/swap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUzC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+G1D"}
@@ -2,8 +2,9 @@ import { requireSession } from "../../services/auth/session.js";
2
2
  import { initSDKAndWallet } from "../../services/starkzap/client.js";
3
3
  import { resolveToken } from "../../services/tokens/tokens.js";
4
4
  import { getRoute, getCalldata } from "../../services/fibrous/route.js";
5
- import { createSpinner, formatResult } from "../../lib/format.js";
6
- import { FIBROUS_ROUTER_ADDRESS } from "../../lib/config.js";
5
+ import { createSpinner, formatResult, formatError } from "../../lib/format.js";
6
+ import { FIBROUS_ROUTER_ADDRESS } from "../../services/fibrous/config.js";
7
+ import { simulateTransaction } from "../../services/simulate/simulate.js";
7
8
  import { Amount, fromAddress } from "starkzap";
8
9
  export function registerSwapCommand(program) {
9
10
  program
@@ -12,7 +13,9 @@ export function registerSwapCommand(program) {
12
13
  .argument("<amount>", "Amount to swap")
13
14
  .argument("<from>", "Source token symbol")
14
15
  .argument("<to>", "Destination token symbol")
15
- .option("-s, --slippage <percent>", "Slippage tolerance %", "0.5")
16
+ .option("-s, --slippage <percent>", "Slippage tolerance %", "1")
17
+ .option("--simulate", "Estimate fees and validate without executing")
18
+ .option("--json", "Output raw JSON")
16
19
  .action(async (amount, from, to, opts) => {
17
20
  const spinner = createSpinner("Finding best route...").start();
18
21
  try {
@@ -35,29 +38,61 @@ export function registerSwapCommand(program) {
35
38
  console.log(` Slippage: ${slippage}%\n`);
36
39
  spinner.text = "Generating calldata...";
37
40
  const calldataResponse = await getCalldata(tokenIn, tokenOut, rawAmount, slippage, session.address);
38
- spinner.text = "Executing swap...";
39
- const tx = await wallet
41
+ const builder = wallet
40
42
  .tx()
41
43
  .approve(tokenIn, fromAddress(FIBROUS_ROUTER_ADDRESS), parsedAmount)
42
44
  .add({
43
45
  contractAddress: FIBROUS_ROUTER_ADDRESS,
44
46
  entrypoint: "swap",
45
47
  calldata: calldataResponse.calldata,
46
- })
47
- .send();
48
+ });
49
+ if (opts.simulate) {
50
+ spinner.text = "Simulating transaction...";
51
+ const sim = await simulateTransaction(builder);
52
+ if (sim.success) {
53
+ spinner.succeed("Simulation complete");
54
+ }
55
+ else {
56
+ spinner.fail("Simulation failed");
57
+ }
58
+ const simResult = {
59
+ mode: "SIMULATION (no TX sent)",
60
+ input: `${amount} ${tokenIn.symbol}`,
61
+ expectedOutput: `~${outputFormatted} ${tokenOut.symbol}`,
62
+ estimatedFee: sim.estimatedFee,
63
+ estimatedFeeUsd: sim.estimatedFeeUsd,
64
+ calls: sim.callCount,
65
+ ...(sim.revertReason ? { revertReason: sim.revertReason } : {}),
66
+ };
67
+ if (opts.json) {
68
+ console.log(JSON.stringify(simResult, null, 2));
69
+ }
70
+ else {
71
+ console.log(formatResult(simResult));
72
+ }
73
+ return;
74
+ }
75
+ spinner.text = "Executing swap...";
76
+ const tx = await builder.send();
48
77
  spinner.text = "Waiting for confirmation...";
49
78
  await tx.wait();
50
79
  spinner.succeed("Swap confirmed");
51
- console.log(formatResult({
80
+ const txResult = {
52
81
  input: `${amount} ${tokenIn.symbol}`,
53
82
  output: `~${outputFormatted} ${tokenOut.symbol}`,
54
83
  txHash: tx.hash,
55
84
  explorer: tx.explorerUrl,
56
- }));
85
+ };
86
+ if (opts.json) {
87
+ console.log(JSON.stringify(txResult, null, 2));
88
+ }
89
+ else {
90
+ console.log(formatResult(txResult));
91
+ }
57
92
  }
58
93
  catch (error) {
59
94
  spinner.fail("Swap failed");
60
- console.error(error instanceof Error ? error.message : error);
95
+ console.error(formatError(error));
61
96
  process.exit(1);
62
97
  }
63
98
  });
@@ -1 +1 @@
1
- {"version":3,"file":"swap.js","sourceRoot":"","sources":["../../../src/commands/trade/swap.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"swap.js","sourceRoot":"","sources":["../../../src/commands/trade/swap.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"balance.d.ts","sourceRoot":"","sources":["../../../src/commands/wallet/balance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOzC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAmD7D"}
1
+ {"version":3,"file":"balance.d.ts","sourceRoot":"","sources":["../../../src/commands/wallet/balance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOzC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkF7D"}
@@ -2,12 +2,13 @@ import { requireSession } from "../../services/auth/session.js";
2
2
  import { getBalances } from "../../services/tokens/balances.js";
3
3
  import { resolveToken } from "../../services/tokens/tokens.js";
4
4
  import { initSDKAndWallet } from "../../services/starkzap/client.js";
5
- import { createSpinner, formatTable, formatResult } from "../../lib/format.js";
5
+ import { createSpinner, formatTable, formatResult, formatError } from "../../lib/format.js";
6
6
  export function registerBalanceCommand(program) {
7
7
  program
8
8
  .command("balance")
9
9
  .description("Show wallet balance for all tokens or a specific token")
10
10
  .option("-t, --token <symbol>", "Specific token symbol (e.g. STRK, ETH)")
11
+ .option("--json", "Output raw JSON")
11
12
  .action(async (opts) => {
12
13
  const spinner = createSpinner("Fetching balances...").start();
13
14
  try {
@@ -17,6 +18,14 @@ export function registerBalanceCommand(program) {
17
18
  const tokenType = await resolveToken(opts.token);
18
19
  const balanceAmount = await wallet.balanceOf(tokenType);
19
20
  spinner.stop();
21
+ if (opts.json) {
22
+ console.log(JSON.stringify({
23
+ token: tokenType.symbol,
24
+ balance: balanceAmount.toUnit(),
25
+ network: session.network,
26
+ }, null, 2));
27
+ return;
28
+ }
20
29
  console.log(formatResult({
21
30
  token: tokenType.symbol,
22
31
  balance: balanceAmount.toUnit(),
@@ -26,6 +35,14 @@ export function registerBalanceCommand(program) {
26
35
  else {
27
36
  const balances = await getBalances(wallet);
28
37
  spinner.stop();
38
+ if (opts.json) {
39
+ console.log(JSON.stringify({
40
+ wallet: session.address,
41
+ network: session.network,
42
+ tokens: balances,
43
+ }, null, 2));
44
+ return;
45
+ }
29
46
  console.log(`\n Wallet: ${session.address}`);
30
47
  console.log(` Network: ${session.network}\n`);
31
48
  if (balances.length === 0) {
@@ -38,7 +55,7 @@ export function registerBalanceCommand(program) {
38
55
  }
39
56
  catch (error) {
40
57
  spinner.fail("Failed to fetch balances");
41
- console.error(error instanceof Error ? error.message : error);
58
+ console.error(formatError(error));
42
59
  process.exit(1);
43
60
  }
44
61
  });
@@ -1 +1 @@
1
- {"version":3,"file":"balance.js","sourceRoot":"","sources":["../../../src/commands/wallet/balance.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,mCAAmC,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAE/E,MAAM,UAAU,sBAAsB,CAAC,OAAgB;IACtD,OAAO;SACL,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,wDAAwD,CAAC;SACrE,MAAM,CAAC,sBAAsB,EAAE,wCAAwC,CAAC;SACxE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACtB,MAAM,OAAO,GAAG,aAAa,CAAC,sBAAsB,CAAC,CAAC,KAAK,EAAE,CAAC;QAE9D,IAAI,CAAC;YACJ,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;YACjC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,gBAAgB,CAAC,OAAO,CAAC,CAAC;YAEnD,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBAChB,MAAM,SAAS,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAEjD,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;gBACxD,OAAO,CAAC,IAAI,EAAE,CAAC;gBAEf,OAAO,CAAC,GAAG,CACV,YAAY,CAAC;oBACZ,KAAK,EAAE,SAAS,CAAC,MAAM;oBACvB,OAAO,EAAE,aAAa,CAAC,MAAM,EAAE;oBAC/B,OAAO,EAAE,OAAO,CAAC,OAAO;iBACxB,CAAC,CACF,CAAC;YACH,CAAC;iBAAM,CAAC;gBACP,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;gBAC3C,OAAO,CAAC,IAAI,EAAE,CAAC;gBAEf,OAAO,CAAC,GAAG,CAAC,eAAe,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC9C,OAAO,CAAC,GAAG,CAAC,cAAc,OAAO,CAAC,OAAO,IAAI,CAAC,CAAC;gBAE/C,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC3B,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;oBACtC,OAAO;gBACR,CAAC;gBAED,OAAO,CAAC,GAAG,CACV,WAAW,CACV,CAAC,OAAO,EAAE,SAAS,CAAC,EACpB,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAC1C,CACD,CAAC;gBACF,OAAO,CAAC,GAAG,EAAE,CAAC;YACf,CAAC;QACF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,OAAO,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;YACzC,OAAO,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjB,CAAC;IACF,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"balance.js","sourceRoot":"","sources":["../../../src/commands/wallet/balance.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../../src/commands/wallet/deploy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMzC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAmF5D"}
1
+ {"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../../src/commands/wallet/deploy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMzC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAoF5D"}
@@ -1,7 +1,7 @@
1
1
  import { requireSession } from "../../services/auth/session.js";
2
2
  import { initSDKAndWallet, resolveFeeModeConfig } from "../../services/starkzap/client.js";
3
3
  import { ConfigService } from "../../services/config/config.js";
4
- import { createSpinner, success, warn, formatResult } from "../../lib/format.js";
4
+ import { createSpinner, success, warn, formatResult, formatError } from "../../lib/format.js";
5
5
  export function registerDeployCommand(program) {
6
6
  program
7
7
  .command("deploy")
@@ -55,6 +55,7 @@ export function registerDeployCommand(program) {
55
55
  }
56
56
  catch (error) {
57
57
  const msg = error instanceof Error ? error.message : String(error);
58
+ console.error(formatError(error));
58
59
  spinner.fail("Deployment failed");
59
60
  if (msg.includes("exceed balance") || msg.includes("insufficient")) {
60
61
  console.error(warn(`Insufficient balance for deployment gas fees.\n` +
@@ -1 +1 @@
1
- {"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../../src/commands/wallet/deploy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../../src/commands/wallet/deploy.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"send.d.ts","sourceRoot":"","sources":["../../../src/commands/wallet/send.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQzC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAsD1D"}
1
+ {"version":3,"file":"send.d.ts","sourceRoot":"","sources":["../../../src/commands/wallet/send.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASzC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0F1D"}
@@ -2,8 +2,9 @@ import { Amount, fromAddress } from "starkzap";
2
2
  import { requireSession } from "../../services/auth/session.js";
3
3
  import { initSDKAndWallet } from "../../services/starkzap/client.js";
4
4
  import { resolveToken } from "../../services/tokens/tokens.js";
5
- import { createSpinner, formatResult } from "../../lib/format.js";
5
+ import { createSpinner, formatResult, formatError } from "../../lib/format.js";
6
6
  import { validateAddress } from "../../lib/validation.js";
7
+ import { simulateTransaction } from "../../services/simulate/simulate.js";
7
8
  export function registerSendCommand(program) {
8
9
  program
9
10
  .command("send")
@@ -11,7 +12,9 @@ export function registerSendCommand(program) {
11
12
  .argument("<amount>", "Amount to send")
12
13
  .argument("<token>", "Token symbol (e.g. STRK, ETH, USDC)")
13
14
  .argument("<to>", "Recipient Starknet address")
14
- .action(async (amount, token, to) => {
15
+ .option("--simulate", "Estimate fees and validate without executing")
16
+ .option("--json", "Output raw JSON")
17
+ .action(async (amount, token, to, opts) => {
15
18
  const spinner = createSpinner("Preparing transfer...").start();
16
19
  try {
17
20
  const validatedTo = validateAddress(to);
@@ -27,23 +30,57 @@ export function registerSendCommand(program) {
27
30
  console.error(`Attempting to send: ${parsedAmount.toFormatted()}`);
28
31
  process.exit(1);
29
32
  }
33
+ const builder = wallet.tx().transfer(tokenObj, {
34
+ to: fromAddress(validatedTo),
35
+ amount: parsedAmount,
36
+ });
37
+ if (opts.simulate) {
38
+ spinner.text = "Simulating transaction...";
39
+ const sim = await simulateTransaction(builder);
40
+ if (sim.success) {
41
+ spinner.succeed("Simulation complete");
42
+ }
43
+ else {
44
+ spinner.fail("Simulation failed");
45
+ }
46
+ const simResult = {
47
+ mode: "SIMULATION (no TX sent)",
48
+ amount: `${amount} ${token.toUpperCase()}`,
49
+ to: validatedTo,
50
+ estimatedFee: sim.estimatedFee,
51
+ estimatedFeeUsd: sim.estimatedFeeUsd,
52
+ calls: sim.callCount,
53
+ ...(sim.revertReason ? { revertReason: sim.revertReason } : {}),
54
+ };
55
+ if (opts.json) {
56
+ console.log(JSON.stringify(simResult, null, 2));
57
+ }
58
+ else {
59
+ console.log(formatResult(simResult));
60
+ }
61
+ return;
62
+ }
30
63
  spinner.text = "Executing transfer...";
31
- const tx = await wallet.transfer(tokenObj, [
32
- { to: fromAddress(validatedTo), amount: parsedAmount },
33
- ]);
64
+ const tx = await builder.send();
34
65
  spinner.text = "Waiting for confirmation...";
35
66
  await tx.wait();
36
67
  spinner.succeed("Transfer confirmed");
37
- console.log(formatResult({
68
+ const txResult = {
38
69
  amount: `${amount} ${token.toUpperCase()}`,
39
70
  to: validatedTo,
40
71
  txHash: tx.hash,
41
72
  explorer: tx.explorerUrl,
42
- }));
73
+ };
74
+ if (opts.json) {
75
+ console.log(JSON.stringify(txResult, null, 2));
76
+ }
77
+ else {
78
+ console.log(formatResult(txResult));
79
+ }
43
80
  }
44
81
  catch (error) {
45
82
  spinner.fail("Transfer failed");
46
- console.error(error instanceof Error ? error.message : error);
83
+ console.error(formatError(error));
47
84
  process.exit(1);
48
85
  }
49
86
  });
@@ -1 +1 @@
1
- {"version":3,"file":"send.js","sourceRoot":"","sources":["../../../src/commands/wallet/send.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"send.js","sourceRoot":"","sources":["../../../src/commands/wallet/send.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -3,11 +3,13 @@ import { createRequire } from "node:module";
3
3
  import { Command } from "commander";
4
4
  import { formatError } from "./lib/format.js";
5
5
  import { startMcpServer } from "./mcp/server.js";
6
+ // Graceful shutdown on signals
7
+ process.on("SIGINT", () => process.exit(0));
8
+ process.on("SIGTERM", () => process.exit(0));
6
9
  const require = createRequire(import.meta.url);
7
10
  const { version } = require("../package.json");
8
11
  import { registerLoginCommand } from "./commands/auth/login.js";
9
12
  import { registerVerifyCommand } from "./commands/auth/verify.js";
10
- import { registerImportCommand } from "./commands/auth/import.js";
11
13
  import { registerLogoutCommand } from "./commands/auth/logout.js";
12
14
  import { registerAddressCommand } from "./commands/wallet/address.js";
13
15
  import { registerBalanceCommand } from "./commands/wallet/balance.js";
@@ -16,24 +18,34 @@ import { registerDeployCommand } from "./commands/wallet/deploy.js";
16
18
  import { registerSwapCommand } from "./commands/trade/swap.js";
17
19
  import { registerStatusCommand } from "./commands/trade/status.js";
18
20
  import { registerTxStatusCommand } from "./commands/chain/tx-status.js";
19
- import { registerStakeCommand, registerUnstakeCommand, registerRewardsCommand, registerPoolsCommand, registerValidatorsCommand, registerStakingStatsCommand, } from "./commands/staking/staking.js";
21
+ import { registerStakeCommand, registerUnstakeCommand, registerRewardsCommand, registerPoolsCommand, registerValidatorsCommand, registerStakeStatusCommand, } from "./commands/staking/staking.js";
20
22
  import { registerConfigCommand } from "./commands/config/config.js";
21
- import { registerLendPoolsCommand, registerLendSupplyCommand, registerLendWithdrawCommand, registerLendBorrowCommand, registerLendRepayCommand, registerLendStatusCommand, } from "./commands/lending/lending.js";
23
+ import { registerLendPoolsCommand, registerLendSupplyCommand, registerLendWithdrawCommand, registerLendBorrowCommand, registerLendRepayCommand, registerLendCloseCommand, registerLendStatusCommand, } from "./commands/lending/lending.js";
24
+ import { registerPortfolioCommand } from "./commands/portfolio/portfolio.js";
25
+ import { registerMultiSwapCommand } from "./commands/trade/multi-swap.js";
26
+ import { registerBatchCommand } from "./commands/batch/batch.js";
27
+ const banner = `
28
+ ┌───────────────────────────────────────┐
29
+ │ StarkFi v${version.padEnd(26)}│
30
+ │ Starknet DeFi CLI + MCP Server │
31
+ └───────────────────────────────────────┘
32
+ `;
22
33
  const program = new Command();
23
34
  program
24
35
  .name("starkfi")
25
- .description("Starknet DeFi CLI — Token swaps, staking, lending, gasless transactions")
36
+ .description("Starknet DeFi CLI + MCP Swaps, multi-swap, batch, staking, lending, simulation, portfolio")
26
37
  .version(version)
27
- .showHelpAfterError();
38
+ .showHelpAfterError()
39
+ .addHelpText("beforeAll", banner);
28
40
  registerLoginCommand(program);
29
41
  registerVerifyCommand(program);
30
- registerImportCommand(program);
31
42
  registerLogoutCommand(program);
32
43
  registerAddressCommand(program);
33
44
  registerBalanceCommand(program);
34
45
  registerSendCommand(program);
35
46
  registerDeployCommand(program);
36
47
  registerSwapCommand(program);
48
+ registerMultiSwapCommand(program);
37
49
  registerStatusCommand(program);
38
50
  registerTxStatusCommand(program);
39
51
  registerStakeCommand(program);
@@ -41,13 +53,16 @@ registerUnstakeCommand(program);
41
53
  registerRewardsCommand(program);
42
54
  registerPoolsCommand(program);
43
55
  registerValidatorsCommand(program);
44
- registerStakingStatsCommand(program);
56
+ registerStakeStatusCommand(program);
45
57
  registerLendPoolsCommand(program);
46
58
  registerLendSupplyCommand(program);
47
59
  registerLendWithdrawCommand(program);
48
60
  registerLendBorrowCommand(program);
49
61
  registerLendRepayCommand(program);
62
+ registerLendCloseCommand(program);
50
63
  registerLendStatusCommand(program);
64
+ registerPortfolioCommand(program);
65
+ registerBatchCommand(program);
51
66
  registerConfigCommand(program);
52
67
  program
53
68
  .command("mcp-start")
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Renders the animated ASCII banner by wiping it in from left to right.
3
+ * Only blocks for ~1 second total to respect user startup expectations.
4
+ */
5
+ export declare function showBanner(): Promise<void>;
6
+ //# sourceMappingURL=banner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"banner.d.ts","sourceRoot":"","sources":["../../src/lib/banner.ts"],"names":[],"mappings":"AAyBA;;;GAGG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CA2DhD"}