starkfi 0.3.1 → 0.3.4
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.
- package/MCP.md +7 -7
- package/README.md +93 -71
- package/dist/commands/auth/login.js +2 -1
- package/dist/commands/auth/login.js.map +1 -1
- package/dist/commands/batch/batch.d.ts.map +1 -1
- package/dist/commands/batch/batch.js +6 -15
- package/dist/commands/batch/batch.js.map +1 -1
- package/dist/commands/chain/tx-status.d.ts.map +1 -1
- package/dist/commands/chain/tx-status.js +8 -13
- package/dist/commands/chain/tx-status.js.map +1 -1
- package/dist/commands/config/config.d.ts.map +1 -1
- package/dist/commands/config/config.js +10 -7
- package/dist/commands/config/config.js.map +1 -1
- package/dist/commands/lending/lending.d.ts.map +1 -1
- package/dist/commands/lending/lending.js +46 -11
- package/dist/commands/lending/lending.js.map +1 -1
- package/dist/commands/portfolio/portfolio.d.ts.map +1 -1
- package/dist/commands/portfolio/portfolio.js +21 -7
- package/dist/commands/portfolio/portfolio.js.map +1 -1
- package/dist/commands/staking/staking.d.ts.map +1 -1
- package/dist/commands/staking/staking.js +30 -9
- package/dist/commands/staking/staking.js.map +1 -1
- package/dist/commands/system/status.d.ts +3 -0
- package/dist/commands/system/status.d.ts.map +1 -0
- package/dist/commands/system/status.js +41 -0
- package/dist/commands/system/status.js.map +1 -0
- package/dist/commands/trade/multi-swap.d.ts.map +1 -1
- package/dist/commands/trade/multi-swap.js +5 -14
- package/dist/commands/trade/multi-swap.js.map +1 -1
- package/dist/commands/trade/swap.d.ts.map +1 -1
- package/dist/commands/trade/swap.js +4 -13
- package/dist/commands/trade/swap.js.map +1 -1
- package/dist/commands/wallet/address.d.ts.map +1 -1
- package/dist/commands/wallet/address.js +1 -1
- package/dist/commands/wallet/address.js.map +1 -1
- package/dist/commands/wallet/balance.d.ts.map +1 -1
- package/dist/commands/wallet/balance.js +8 -7
- package/dist/commands/wallet/balance.js.map +1 -1
- package/dist/commands/wallet/deploy.d.ts.map +1 -1
- package/dist/commands/wallet/deploy.js +9 -15
- package/dist/commands/wallet/deploy.js.map +1 -1
- package/dist/commands/wallet/send.d.ts.map +1 -1
- package/dist/commands/wallet/send.js +4 -13
- package/dist/commands/wallet/send.js.map +1 -1
- package/dist/index.js +4 -8
- package/dist/index.js.map +1 -1
- package/dist/lib/brand.d.ts +5 -0
- package/dist/lib/brand.d.ts.map +1 -0
- package/dist/lib/brand.js +15 -0
- package/dist/lib/brand.js.map +1 -0
- package/dist/lib/cli-helpers.d.ts +8 -0
- package/dist/lib/cli-helpers.d.ts.map +1 -0
- package/dist/lib/cli-helpers.js +20 -0
- package/dist/lib/cli-helpers.js.map +1 -0
- package/dist/lib/config.d.ts +1 -1
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +1 -1
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/format.d.ts +2 -1
- package/dist/lib/format.d.ts.map +1 -1
- package/dist/lib/format.js +22 -8
- package/dist/lib/format.js.map +1 -1
- package/dist/lib/parse-starknet-error.d.ts +2 -0
- package/dist/lib/parse-starknet-error.d.ts.map +1 -0
- package/dist/lib/parse-starknet-error.js +81 -0
- package/dist/lib/parse-starknet-error.js.map +1 -0
- package/dist/mcp/handlers/auth.js +1 -1
- package/dist/mcp/handlers/auth.js.map +1 -1
- package/dist/mcp/handlers/batch.d.ts.map +1 -1
- package/dist/mcp/handlers/batch.js +17 -24
- package/dist/mcp/handlers/batch.js.map +1 -1
- package/dist/mcp/handlers/config.d.ts +1 -1
- package/dist/mcp/handlers/config.d.ts.map +1 -1
- package/dist/mcp/handlers/config.js +4 -0
- package/dist/mcp/handlers/config.js.map +1 -1
- package/dist/mcp/handlers/context.d.ts +10 -0
- package/dist/mcp/handlers/context.d.ts.map +1 -0
- package/dist/mcp/handlers/context.js +16 -0
- package/dist/mcp/handlers/context.js.map +1 -0
- package/dist/mcp/handlers/index.d.ts +1 -0
- package/dist/mcp/handlers/index.d.ts.map +1 -1
- package/dist/mcp/handlers/index.js +1 -0
- package/dist/mcp/handlers/index.js.map +1 -1
- package/dist/mcp/handlers/lending.d.ts.map +1 -1
- package/dist/mcp/handlers/lending.js +105 -116
- package/dist/mcp/handlers/lending.js.map +1 -1
- package/dist/mcp/handlers/multi-swap.d.ts.map +1 -1
- package/dist/mcp/handlers/multi-swap.js +31 -39
- package/dist/mcp/handlers/multi-swap.js.map +1 -1
- package/dist/mcp/handlers/portfolio.d.ts.map +1 -1
- package/dist/mcp/handlers/portfolio.js +5 -6
- package/dist/mcp/handlers/portfolio.js.map +1 -1
- package/dist/mcp/handlers/staking.d.ts.map +1 -1
- package/dist/mcp/handlers/staking.js +73 -77
- package/dist/mcp/handlers/staking.js.map +1 -1
- package/dist/mcp/handlers/trade.d.ts.map +1 -1
- package/dist/mcp/handlers/trade.js +32 -40
- package/dist/mcp/handlers/trade.js.map +1 -1
- package/dist/mcp/handlers/utils.d.ts +7 -0
- package/dist/mcp/handlers/utils.d.ts.map +1 -1
- package/dist/mcp/handlers/utils.js +14 -0
- package/dist/mcp/handlers/utils.js.map +1 -1
- package/dist/mcp/handlers/wallet.d.ts.map +1 -1
- package/dist/mcp/handlers/wallet.js +61 -65
- package/dist/mcp/handlers/wallet.js.map +1 -1
- package/dist/mcp/tools/auth.d.ts.map +1 -1
- package/dist/mcp/tools/auth.js +10 -2
- package/dist/mcp/tools/auth.js.map +1 -1
- package/dist/mcp/tools/error-handling.d.ts.map +1 -1
- package/dist/mcp/tools/error-handling.js +9 -15
- package/dist/mcp/tools/error-handling.js.map +1 -1
- package/dist/services/auth/session.js +1 -1
- package/dist/services/auth/session.js.map +1 -1
- package/dist/services/config/config.d.ts +1 -0
- package/dist/services/config/config.d.ts.map +1 -1
- package/dist/services/config/config.js +4 -0
- package/dist/services/config/config.js.map +1 -1
- package/dist/services/fibrous/route.d.ts +1 -0
- package/dist/services/fibrous/route.d.ts.map +1 -1
- package/dist/services/fibrous/route.js +26 -1
- package/dist/services/fibrous/route.js.map +1 -1
- package/dist/services/portfolio/portfolio.d.ts +2 -0
- package/dist/services/portfolio/portfolio.d.ts.map +1 -1
- package/dist/services/portfolio/portfolio.js +21 -24
- package/dist/services/portfolio/portfolio.js.map +1 -1
- package/dist/services/simulate/simulate.d.ts.map +1 -1
- package/dist/services/simulate/simulate.js +7 -6
- package/dist/services/simulate/simulate.js.map +1 -1
- package/dist/services/staking/staking.d.ts.map +1 -1
- package/dist/services/staking/staking.js +16 -3
- package/dist/services/staking/staking.js.map +1 -1
- package/dist/services/staking/validators.d.ts +1 -2
- package/dist/services/staking/validators.d.ts.map +1 -1
- package/dist/services/staking/validators.js.map +1 -1
- package/dist/services/starkzap/client.d.ts +1 -1
- package/dist/services/starkzap/client.d.ts.map +1 -1
- package/dist/services/starkzap/client.js +11 -6
- package/dist/services/starkzap/client.js.map +1 -1
- package/dist/services/tokens/tokens.d.ts.map +1 -1
- package/dist/services/tokens/tokens.js +17 -9
- package/dist/services/tokens/tokens.js.map +1 -1
- package/dist/services/vesu/lending.d.ts.map +1 -1
- package/dist/services/vesu/lending.js +0 -7
- package/dist/services/vesu/lending.js.map +1 -1
- package/dist/services/vesu/pools.d.ts +4 -0
- package/dist/services/vesu/pools.d.ts.map +1 -1
- package/dist/services/vesu/pools.js +8 -0
- package/dist/services/vesu/pools.js.map +1 -1
- package/package.json +9 -5
- package/skills/README.md +1 -1
- package/skills/balance/SKILL.md +1 -1
- package/skills/batch/SKILL.md +6 -6
- package/skills/config/SKILL.md +10 -1
- package/skills/lending/SKILL.md +20 -9
- package/skills/multi-swap/SKILL.md +1 -1
- package/skills/portfolio/SKILL.md +2 -2
- package/skills/send/SKILL.md +1 -1
- package/skills/staking/SKILL.md +10 -10
- package/skills/trade/SKILL.md +1 -1
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import { requireSession } from "../../services/auth/session.js";
|
|
2
|
-
import { initSDKAndWallet } from "../../services/starkzap/client.js";
|
|
3
1
|
import { getPortfolio } from "../../services/portfolio/portfolio.js";
|
|
2
|
+
import { withReadonlyWallet } from "./context.js";
|
|
4
3
|
import { jsonResult } from "./utils.js";
|
|
5
4
|
export async function handleGetPortfolio() {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
5
|
+
return withReadonlyWallet(async ({ session, sdk, wallet }) => {
|
|
6
|
+
const portfolio = await getPortfolio(sdk, wallet, session);
|
|
7
|
+
return jsonResult(portfolio);
|
|
8
|
+
});
|
|
10
9
|
}
|
|
11
10
|
//# sourceMappingURL=portfolio.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"portfolio.js","sourceRoot":"","sources":["../../../src/mcp/handlers/portfolio.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"portfolio.js","sourceRoot":"","sources":["../../../src/mcp/handlers/portfolio.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACvC,OAAO,kBAAkB,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE;QAC5D,MAAM,SAAS,GAAG,MAAM,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAC3D,OAAO,UAAU,CAAC,SAAS,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"staking.d.ts","sourceRoot":"","sources":["../../../src/mcp/handlers/staking.ts"],"names":[],"mappings":"AAMA,wBAAsB,iBAAiB,CAAC,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE;;;;;
|
|
1
|
+
{"version":3,"file":"staking.d.ts","sourceRoot":"","sources":["../../../src/mcp/handlers/staking.ts"],"names":[],"mappings":"AAMA,wBAAsB,iBAAiB,CAAC,IAAI,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE;;;;;GAa7F;AAED,wBAAsB,mBAAmB,CAAC,IAAI,EAAE;IAC/C,MAAM,EAAE,QAAQ,GAAG,MAAM,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;;;;;GAiCA;AAED,wBAAsB,oBAAoB,CAAC,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE;;;;;GAuBhE;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE;;;;;GAahE;AAED,wBAAsB,oBAAoB;;;;;GAYzC;AAED,wBAAsB,kBAAkB,CAAC,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE;;;;;GAU9D;AAED,wBAAsB,qBAAqB,CAAC,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE;;;;;GAWjE;AAED,wBAAsB,oBAAoB,CAAC,EAAE,SAAS,EAAE,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO;;;;;GAYpF"}
|
|
@@ -1,82 +1,80 @@
|
|
|
1
1
|
import { requireSession } from "../../services/auth/session.js";
|
|
2
|
-
import { initSDKAndWallet } from "../../services/starkzap/client.js";
|
|
3
2
|
import * as stakingService from "../../services/staking/staking.js";
|
|
4
3
|
import { getValidators, findValidator } from "../../services/staking/validators.js";
|
|
4
|
+
import { withWallet, withReadonlyWallet } from "./context.js";
|
|
5
5
|
import { jsonResult, textResult } from "./utils.js";
|
|
6
6
|
export async function handleStakeTokens(args) {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
pool: args.pool,
|
|
7
|
+
return withWallet(async ({ wallet }) => {
|
|
8
|
+
const tokenSymbol = (args.token ?? "STRK").toUpperCase();
|
|
9
|
+
const result = await stakingService.stake(wallet, args.pool, args.amount, tokenSymbol);
|
|
10
|
+
return jsonResult({
|
|
11
|
+
success: true,
|
|
12
|
+
txHash: result.hash,
|
|
13
|
+
explorerUrl: result.explorerUrl,
|
|
14
|
+
amount: `${args.amount} ${tokenSymbol}`,
|
|
15
|
+
pool: args.pool,
|
|
16
|
+
});
|
|
18
17
|
});
|
|
19
18
|
}
|
|
20
19
|
export async function handleUnstakeTokens(args) {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
20
|
+
return withWallet(async ({ wallet }) => {
|
|
21
|
+
if (args.action === "intent") {
|
|
22
|
+
if (!args.amount) {
|
|
23
|
+
return textResult("Amount is required for exit intent.");
|
|
24
|
+
}
|
|
25
|
+
const tokenSymbol = (args.token ?? "STRK").toUpperCase();
|
|
26
|
+
const result = await stakingService.exitPoolIntent(wallet, args.pool, args.amount, tokenSymbol);
|
|
27
|
+
return jsonResult({
|
|
28
|
+
success: true,
|
|
29
|
+
action: "exit_intent",
|
|
30
|
+
txHash: result.hash,
|
|
31
|
+
explorerUrl: result.explorerUrl,
|
|
32
|
+
message: "Exit intent declared. Wait for cooldown period, then call with action='exit'.",
|
|
33
|
+
});
|
|
27
34
|
}
|
|
28
|
-
|
|
29
|
-
const result = await stakingService.
|
|
35
|
+
// action === "exit"
|
|
36
|
+
const result = await stakingService.exitPool(wallet, args.pool);
|
|
30
37
|
return jsonResult({
|
|
31
38
|
success: true,
|
|
32
|
-
action: "
|
|
39
|
+
action: "exit_complete",
|
|
33
40
|
txHash: result.hash,
|
|
34
41
|
explorerUrl: result.explorerUrl,
|
|
35
|
-
message: "
|
|
42
|
+
message: "Tokens withdrawn from pool.",
|
|
36
43
|
});
|
|
37
|
-
}
|
|
38
|
-
// action === "exit"
|
|
39
|
-
const result = await stakingService.exitPool(wallet, args.pool);
|
|
40
|
-
return jsonResult({
|
|
41
|
-
success: true,
|
|
42
|
-
action: "exit_complete",
|
|
43
|
-
txHash: result.hash,
|
|
44
|
-
explorerUrl: result.explorerUrl,
|
|
45
|
-
message: "Tokens withdrawn from pool.",
|
|
46
44
|
});
|
|
47
45
|
}
|
|
48
46
|
export async function handleGetStakingInfo(args) {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
47
|
+
return withReadonlyWallet(async ({ wallet }) => {
|
|
48
|
+
const position = await stakingService.getPosition(wallet, args.pool);
|
|
49
|
+
if (!position) {
|
|
50
|
+
return jsonResult({
|
|
51
|
+
isMember: false,
|
|
52
|
+
pool: args.pool,
|
|
53
|
+
message: "Not a member of this pool.",
|
|
54
|
+
});
|
|
55
|
+
}
|
|
53
56
|
return jsonResult({
|
|
54
|
-
isMember:
|
|
57
|
+
isMember: true,
|
|
55
58
|
pool: args.pool,
|
|
56
|
-
|
|
59
|
+
staked: position.staked,
|
|
60
|
+
rewards: position.rewards,
|
|
61
|
+
total: position.total,
|
|
62
|
+
unpooling: position.unpooling,
|
|
63
|
+
cooldownEndsAt: position.unpoolTime ? position.unpoolTime.toISOString() : null,
|
|
64
|
+
commissionPercent: position.commissionPercent,
|
|
57
65
|
});
|
|
58
|
-
}
|
|
59
|
-
return jsonResult({
|
|
60
|
-
isMember: true,
|
|
61
|
-
pool: args.pool,
|
|
62
|
-
staked: position.staked,
|
|
63
|
-
rewards: position.rewards,
|
|
64
|
-
total: position.total,
|
|
65
|
-
unpooling: position.unpooling,
|
|
66
|
-
cooldownEndsAt: position.unpoolTime ? position.unpoolTime.toISOString() : null,
|
|
67
|
-
commissionPercent: position.commissionPercent,
|
|
68
66
|
});
|
|
69
67
|
}
|
|
70
68
|
export async function handleListPools(args) {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
69
|
+
return withReadonlyWallet(async ({ session, sdk, wallet }) => {
|
|
70
|
+
const found = findValidator(args.validator, session.network);
|
|
71
|
+
const stakerAddress = found ? found.stakerAddress.toString() : args.validator;
|
|
72
|
+
const pools = await stakingService.getValidatorPools(sdk, stakerAddress, wallet);
|
|
73
|
+
return jsonResult({
|
|
74
|
+
validator: found ? found.name : args.validator,
|
|
75
|
+
stakerAddress,
|
|
76
|
+
pools,
|
|
77
|
+
});
|
|
80
78
|
});
|
|
81
79
|
}
|
|
82
80
|
export async function handleListValidators() {
|
|
@@ -92,32 +90,30 @@ export async function handleListValidators() {
|
|
|
92
90
|
});
|
|
93
91
|
}
|
|
94
92
|
export async function handleClaimRewards(args) {
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
explorerUrl: result.explorerUrl,
|
|
93
|
+
return withWallet(async ({ wallet }) => {
|
|
94
|
+
const result = await stakingService.claimRewards(wallet, args.pool);
|
|
95
|
+
return jsonResult({
|
|
96
|
+
success: true,
|
|
97
|
+
txHash: result.hash,
|
|
98
|
+
explorerUrl: result.explorerUrl,
|
|
99
|
+
});
|
|
103
100
|
});
|
|
104
101
|
}
|
|
105
102
|
export async function handleCompoundRewards(args) {
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
compounded: result.compounded,
|
|
103
|
+
return withWallet(async ({ wallet }) => {
|
|
104
|
+
const result = await stakingService.compoundRewards(wallet, args.pool);
|
|
105
|
+
return jsonResult({
|
|
106
|
+
success: true,
|
|
107
|
+
txHash: result.hash,
|
|
108
|
+
explorerUrl: result.explorerUrl,
|
|
109
|
+
compounded: result.compounded,
|
|
110
|
+
});
|
|
115
111
|
});
|
|
116
112
|
}
|
|
117
113
|
export async function handleGetStakeStatus({ validator } = {}) {
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
114
|
+
return withReadonlyWallet(async ({ session, sdk, wallet }) => {
|
|
115
|
+
const overview = await stakingService.getStakingOverview(sdk, wallet, session.network, session.address, validator);
|
|
116
|
+
return jsonResult(overview);
|
|
117
|
+
});
|
|
122
118
|
}
|
|
123
119
|
//# sourceMappingURL=staking.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"staking.js","sourceRoot":"","sources":["../../../src/mcp/handlers/staking.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,
|
|
1
|
+
{"version":3,"file":"staking.js","sourceRoot":"","sources":["../../../src/mcp/handlers/staking.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trade.d.ts","sourceRoot":"","sources":["../../../src/mcp/handlers/trade.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"trade.d.ts","sourceRoot":"","sources":["../../../src/mcp/handlers/trade.ts"],"names":[],"mappings":"AAQA,wBAAsB,kBAAkB,CAAC,IAAI,EAAE;IAC9C,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CACjB;;;;;GAsBA;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE;IAC5C,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACnB;;;;;GAgDA"}
|
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import { requireSession } from "../../services/auth/session.js";
|
|
2
|
-
import { initSDKAndWallet } from "../../services/starkzap/client.js";
|
|
3
1
|
import { resolveToken } from "../../services/tokens/tokens.js";
|
|
4
2
|
import { getCalldata, getRoute } from "../../services/fibrous/route.js";
|
|
5
3
|
import { Amount, fromAddress } from "starkzap";
|
|
6
4
|
import { FIBROUS_ROUTER_ADDRESS } from "../../services/fibrous/config.js";
|
|
7
5
|
import { simulateTransaction } from "../../services/simulate/simulate.js";
|
|
8
|
-
import {
|
|
6
|
+
import { withWallet } from "./context.js";
|
|
7
|
+
import { jsonResult, simulationResult } from "./utils.js";
|
|
9
8
|
export async function handleGetSwapQuote(args) {
|
|
10
9
|
const tokenIn = resolveToken(args.from_token);
|
|
11
10
|
const tokenOut = resolveToken(args.to_token);
|
|
@@ -26,46 +25,39 @@ export async function handleGetSwapQuote(args) {
|
|
|
26
25
|
});
|
|
27
26
|
}
|
|
28
27
|
export async function handleSwapTokens(args) {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
28
|
+
return withWallet(async ({ session, wallet }) => {
|
|
29
|
+
const tokenIn = resolveToken(args.from_token);
|
|
30
|
+
const tokenOut = resolveToken(args.to_token);
|
|
31
|
+
const parsedAmount = Amount.parse(args.amount, tokenIn);
|
|
32
|
+
const rawAmount = parsedAmount.toBase().toString();
|
|
33
|
+
const calldataResponse = await getCalldata(tokenIn, tokenOut, rawAmount, args.slippage ?? 1, session.address);
|
|
34
|
+
const builder = wallet
|
|
35
|
+
.tx()
|
|
36
|
+
.approve(tokenIn, fromAddress(FIBROUS_ROUTER_ADDRESS), parsedAmount)
|
|
37
|
+
.add({
|
|
38
|
+
contractAddress: FIBROUS_ROUTER_ADDRESS,
|
|
39
|
+
entrypoint: "swap",
|
|
40
|
+
calldata: calldataResponse.calldata,
|
|
41
|
+
});
|
|
42
|
+
const outputAmount = Amount.fromRaw(BigInt(calldataResponse.route.outputAmount), tokenOut);
|
|
43
|
+
const outputFormatted = outputAmount.toUnit();
|
|
44
|
+
if (args.simulate) {
|
|
45
|
+
const sim = await simulateTransaction(builder);
|
|
46
|
+
return simulationResult(sim, {
|
|
47
|
+
amountIn: `${args.amount} ${tokenIn.symbol}`,
|
|
48
|
+
expectedAmountOut: `~${outputFormatted} ${tokenOut.symbol}`,
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
const tx = await builder.send();
|
|
52
|
+
await tx.wait();
|
|
49
53
|
return jsonResult({
|
|
50
|
-
success:
|
|
51
|
-
|
|
54
|
+
success: true,
|
|
55
|
+
txHash: tx.hash,
|
|
56
|
+
explorerUrl: tx.explorerUrl,
|
|
52
57
|
amountIn: `${args.amount} ${tokenIn.symbol}`,
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
estimatedFeeUsd: sim.estimatedFeeUsd,
|
|
56
|
-
callCount: sim.callCount,
|
|
57
|
-
...(sim.revertReason ? { revertReason: sim.revertReason } : {}),
|
|
58
|
+
amountOut: `~${outputFormatted} ${tokenOut.symbol}`,
|
|
59
|
+
slippage: `${args.slippage ?? 1}%`,
|
|
58
60
|
});
|
|
59
|
-
}
|
|
60
|
-
const tx = await builder.send();
|
|
61
|
-
await tx.wait();
|
|
62
|
-
return jsonResult({
|
|
63
|
-
success: true,
|
|
64
|
-
txHash: tx.hash,
|
|
65
|
-
explorerUrl: tx.explorerUrl,
|
|
66
|
-
amountIn: `${args.amount} ${tokenIn.symbol}`,
|
|
67
|
-
amountOut: `~${outputFormatted} ${tokenOut.symbol}`,
|
|
68
|
-
slippage: `${args.slippage ?? 1}%`,
|
|
69
61
|
});
|
|
70
62
|
}
|
|
71
63
|
//# sourceMappingURL=trade.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trade.js","sourceRoot":"","sources":["../../../src/mcp/handlers/trade.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"trade.js","sourceRoot":"","sources":["../../../src/mcp/handlers/trade.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { SimulationResult } from "../../services/simulate/simulate.js";
|
|
1
2
|
export declare function textResult(text: string): {
|
|
2
3
|
content: {
|
|
3
4
|
type: "text";
|
|
@@ -10,4 +11,10 @@ export declare function jsonResult(data: unknown): {
|
|
|
10
11
|
text: string;
|
|
11
12
|
}[];
|
|
12
13
|
};
|
|
14
|
+
export declare function simulationResult(sim: SimulationResult, extras?: Record<string, unknown>): {
|
|
15
|
+
content: {
|
|
16
|
+
type: "text";
|
|
17
|
+
text: string;
|
|
18
|
+
}[];
|
|
19
|
+
};
|
|
13
20
|
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/mcp/handlers/utils.ts"],"names":[],"mappings":"AAAA,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM;;;;;EAEtC;
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/mcp/handlers/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAG5E,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM;;;;;EAEtC;AAGD,wBAAgB,UAAU,CAAC,IAAI,EAAE,OAAO;;;;;EAEvC;AAGD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,gBAAgB,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;;;EAUvF"}
|
|
@@ -1,7 +1,21 @@
|
|
|
1
|
+
// Wrap a plain text string in the MCP tool response envelope.
|
|
1
2
|
export function textResult(text) {
|
|
2
3
|
return { content: [{ type: "text", text }] };
|
|
3
4
|
}
|
|
5
|
+
// Serialise data as pretty-printed JSON inside the MCP response envelope.
|
|
4
6
|
export function jsonResult(data) {
|
|
5
7
|
return textResult(JSON.stringify(data, null, 2));
|
|
6
8
|
}
|
|
9
|
+
// Build a standardised MCP simulation response from a SimulationResult.
|
|
10
|
+
export function simulationResult(sim, extras) {
|
|
11
|
+
return jsonResult({
|
|
12
|
+
success: sim.success,
|
|
13
|
+
mode: "SIMULATION (no TX sent)",
|
|
14
|
+
...extras,
|
|
15
|
+
estimatedFee: sim.estimatedFee,
|
|
16
|
+
estimatedFeeUsd: sim.estimatedFeeUsd,
|
|
17
|
+
callCount: sim.callCount,
|
|
18
|
+
...(sim.revertReason ? { revertReason: sim.revertReason } : {}),
|
|
19
|
+
});
|
|
20
|
+
}
|
|
7
21
|
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/mcp/handlers/utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/mcp/handlers/utils.ts"],"names":[],"mappings":"AAEA,8DAA8D;AAC9D,MAAM,UAAU,UAAU,CAAC,IAAY;IACtC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AACvD,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,UAAU,CAAC,IAAa;IACvC,OAAO,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAClD,CAAC;AAED,wEAAwE;AACxE,MAAM,UAAU,gBAAgB,CAAC,GAAqB,EAAE,MAAgC;IACvF,OAAO,UAAU,CAAC;QACjB,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,IAAI,EAAE,yBAAyB;QAC/B,GAAG,MAAM;QACT,YAAY,EAAE,GAAG,CAAC,YAAY;QAC9B,eAAe,EAAE,GAAG,CAAC,eAAe;QACpC,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC/D,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../../src/mcp/handlers/wallet.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../../src/mcp/handlers/wallet.ts"],"names":[],"mappings":"AAWA,wBAAsB,gBAAgB,CAAC,IAAI,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE;;;;;GAmB9D;AAED,wBAAsB,mBAAmB;;;;;GAuBxC;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE;IAC5C,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACnB;;;;;GAkCA;AAED,wBAAsB,iBAAiB,CAAC,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE;;;;;GAmB7D"}
|
|
@@ -1,86 +1,81 @@
|
|
|
1
1
|
import { requireSession } from "../../services/auth/session.js";
|
|
2
|
-
import {
|
|
2
|
+
import { createSDK, resolveFeeModeConfig } from "../../services/starkzap/client.js";
|
|
3
3
|
import { ConfigService } from "../../services/config/config.js";
|
|
4
4
|
import { getBalances } from "../../services/tokens/balances.js";
|
|
5
5
|
import { resolveToken } from "../../services/tokens/tokens.js";
|
|
6
6
|
import { Amount, fromAddress } from "starkzap";
|
|
7
7
|
import { simulateTransaction } from "../../services/simulate/simulate.js";
|
|
8
|
-
import {
|
|
8
|
+
import { formatActualFee } from "../../lib/format.js";
|
|
9
|
+
import { withWallet, withReadonlyWallet } from "./context.js";
|
|
10
|
+
import { jsonResult, simulationResult } from "./utils.js";
|
|
9
11
|
export async function handleGetBalance(args) {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
return withReadonlyWallet(async ({ session, wallet }) => {
|
|
13
|
+
if (args.token) {
|
|
14
|
+
const tokenType = resolveToken(args.token);
|
|
15
|
+
const balanceAmount = await wallet.balanceOf(tokenType);
|
|
16
|
+
return jsonResult({
|
|
17
|
+
symbol: tokenType.symbol,
|
|
18
|
+
name: tokenType.name,
|
|
19
|
+
balance: balanceAmount.toUnit(),
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
const balances = await getBalances(wallet);
|
|
15
23
|
return jsonResult({
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
24
|
+
network: session.network,
|
|
25
|
+
address: session.address,
|
|
26
|
+
balances,
|
|
19
27
|
});
|
|
20
|
-
}
|
|
21
|
-
const balances = await getBalances(wallet);
|
|
22
|
-
return jsonResult({
|
|
23
|
-
network: session.network,
|
|
24
|
-
address: session.address,
|
|
25
|
-
balances,
|
|
26
28
|
});
|
|
27
29
|
}
|
|
28
30
|
export async function handleDeployAccount() {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
31
|
+
return withReadonlyWallet(async ({ session, wallet }) => {
|
|
32
|
+
const alreadyDeployed = await wallet.isDeployed();
|
|
33
|
+
if (!alreadyDeployed) {
|
|
34
|
+
const configService = ConfigService.getInstance();
|
|
35
|
+
const gasfreeMode = configService.get("gasfreeMode") === true;
|
|
36
|
+
const gasToken = configService.get("gasToken");
|
|
37
|
+
const { feeMode } = resolveFeeModeConfig(gasfreeMode, gasToken);
|
|
38
|
+
await wallet.ensureReady({ deploy: "if_needed", feeMode });
|
|
39
|
+
}
|
|
40
|
+
return jsonResult({
|
|
41
|
+
alreadyDeployed,
|
|
42
|
+
success: true,
|
|
43
|
+
address: session.address,
|
|
44
|
+
network: session.network,
|
|
45
|
+
message: alreadyDeployed
|
|
46
|
+
? "Account is already deployed. No action needed."
|
|
47
|
+
: "Account deployed successfully. You can now send, swap, and stake.",
|
|
48
|
+
});
|
|
47
49
|
});
|
|
48
50
|
}
|
|
49
51
|
export async function handleSendTokens(args) {
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
52
|
+
return withWallet(async ({ wallet }) => {
|
|
53
|
+
const token = resolveToken(args.token);
|
|
54
|
+
const amount = Amount.parse(args.amount, token);
|
|
55
|
+
const balance = await wallet.balanceOf(token);
|
|
56
|
+
if (balance.lt(amount)) {
|
|
57
|
+
return jsonResult({
|
|
58
|
+
success: false,
|
|
59
|
+
error: `Insufficient balance. You have: ${balance.toFormatted()}, attempting to send: ${amount.toFormatted()}`,
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
const builder = wallet.tx().transfer(token, [{ to: fromAddress(args.recipient), amount }]);
|
|
63
|
+
if (args.simulate) {
|
|
64
|
+
const sim = await simulateTransaction(builder);
|
|
65
|
+
return simulationResult(sim, {
|
|
66
|
+
amount: `${args.amount} ${args.token.toUpperCase()}`,
|
|
67
|
+
to: args.recipient,
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
const tx = await builder.send();
|
|
71
|
+
await tx.wait();
|
|
57
72
|
return jsonResult({
|
|
58
|
-
success:
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
}
|
|
62
|
-
const builder = wallet.tx().transfer(token, [{ to: fromAddress(args.recipient), amount }]);
|
|
63
|
-
if (args.simulate) {
|
|
64
|
-
const sim = await simulateTransaction(builder);
|
|
65
|
-
return jsonResult({
|
|
66
|
-
success: sim.success,
|
|
67
|
-
mode: "SIMULATION (no TX sent)",
|
|
73
|
+
success: true,
|
|
74
|
+
txHash: tx.hash,
|
|
75
|
+
explorerUrl: tx.explorerUrl,
|
|
68
76
|
amount: `${args.amount} ${args.token.toUpperCase()}`,
|
|
69
77
|
to: args.recipient,
|
|
70
|
-
estimatedFee: sim.estimatedFee,
|
|
71
|
-
estimatedFeeUsd: sim.estimatedFeeUsd,
|
|
72
|
-
callCount: sim.callCount,
|
|
73
|
-
...(sim.revertReason ? { revertReason: sim.revertReason } : {}),
|
|
74
78
|
});
|
|
75
|
-
}
|
|
76
|
-
const tx = await builder.send();
|
|
77
|
-
await tx.wait();
|
|
78
|
-
return jsonResult({
|
|
79
|
-
success: true,
|
|
80
|
-
txHash: tx.hash,
|
|
81
|
-
explorerUrl: tx.explorerUrl,
|
|
82
|
-
amount: `${args.amount} ${args.token.toUpperCase()}`,
|
|
83
|
-
to: args.recipient,
|
|
84
79
|
});
|
|
85
80
|
}
|
|
86
81
|
export async function handleGetTxStatus(args) {
|
|
@@ -90,7 +85,8 @@ export async function handleGetTxStatus(args) {
|
|
|
90
85
|
const sdk = createSDK(session.network, rpcUrl);
|
|
91
86
|
const provider = sdk.getProvider();
|
|
92
87
|
const receipt = await provider.getTransactionReceipt(args.hash);
|
|
93
|
-
const
|
|
88
|
+
const rawFee = "actual_fee" in receipt ? receipt.actual_fee : undefined;
|
|
89
|
+
const actualFee = rawFee ? formatActualFee(rawFee) : undefined;
|
|
94
90
|
const blockNumber = "block_number" in receipt ? receipt.block_number : undefined;
|
|
95
91
|
return jsonResult({
|
|
96
92
|
hash: args.hash,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wallet.js","sourceRoot":"","sources":["../../../src/mcp/handlers/wallet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,
|
|
1
|
+
{"version":3,"file":"wallet.js","sourceRoot":"","sources":["../../../src/mcp/handlers/wallet.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/auth.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIzE,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/auth.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIzE,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,CAsCpE"}
|