starkfi 0.1.0 → 0.3.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.
- package/LICENSE +1 -1
- package/MCP.md +292 -0
- package/README.md +424 -54
- package/dist/commands/auth/login.js +2 -2
- package/dist/commands/auth/login.js.map +1 -1
- package/dist/commands/auth/verify.d.ts.map +1 -1
- package/dist/commands/auth/verify.js +2 -2
- package/dist/commands/auth/verify.js.map +1 -1
- package/dist/commands/batch/batch.d.ts +3 -0
- package/dist/commands/batch/batch.d.ts.map +1 -0
- package/dist/commands/batch/batch.js +155 -0
- package/dist/commands/batch/batch.js.map +1 -0
- package/dist/commands/chain/tx-status.js +2 -2
- 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 +23 -34
- package/dist/commands/config/config.js.map +1 -1
- package/dist/commands/lending/lending.d.ts +1 -0
- package/dist/commands/lending/lending.d.ts.map +1 -1
- package/dist/commands/lending/lending.js +197 -51
- package/dist/commands/lending/lending.js.map +1 -1
- package/dist/commands/portfolio/portfolio.d.ts +3 -0
- package/dist/commands/portfolio/portfolio.d.ts.map +1 -0
- package/dist/commands/portfolio/portfolio.js +76 -0
- package/dist/commands/portfolio/portfolio.js.map +1 -0
- package/dist/commands/staking/staking.d.ts +1 -1
- package/dist/commands/staking/staking.d.ts.map +1 -1
- package/dist/commands/staking/staking.js +144 -61
- package/dist/commands/staking/staking.js.map +1 -1
- package/dist/commands/trade/multi-swap.d.ts +3 -0
- package/dist/commands/trade/multi-swap.d.ts.map +1 -0
- package/dist/commands/trade/multi-swap.js +141 -0
- package/dist/commands/trade/multi-swap.js.map +1 -0
- package/dist/commands/trade/status.js +2 -2
- package/dist/commands/trade/status.js.map +1 -1
- package/dist/commands/trade/swap.d.ts.map +1 -1
- package/dist/commands/trade/swap.js +48 -12
- package/dist/commands/trade/swap.js.map +1 -1
- package/dist/commands/wallet/balance.d.ts.map +1 -1
- package/dist/commands/wallet/balance.js +20 -3
- 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 +2 -1
- 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 +46 -9
- package/dist/commands/wallet/send.js.map +1 -1
- package/dist/index.js +162 -9
- package/dist/index.js.map +1 -1
- package/dist/lib/banner.d.ts +6 -0
- package/dist/lib/banner.d.ts.map +1 -0
- package/dist/lib/banner.js +78 -0
- package/dist/lib/banner.js.map +1 -0
- package/dist/lib/concurrency.d.ts +2 -0
- package/dist/lib/concurrency.d.ts.map +1 -0
- package/dist/lib/concurrency.js +21 -0
- package/dist/lib/concurrency.js.map +1 -0
- package/dist/lib/config.d.ts +0 -11
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +0 -20
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/errors.d.ts +2 -0
- package/dist/lib/errors.d.ts.map +1 -1
- package/dist/lib/errors.js +2 -0
- package/dist/lib/errors.js.map +1 -1
- package/dist/lib/fetch.d.ts +4 -0
- package/dist/lib/fetch.d.ts.map +1 -0
- package/dist/lib/fetch.js +13 -0
- package/dist/lib/fetch.js.map +1 -0
- package/dist/lib/format.d.ts +12 -2
- package/dist/lib/format.d.ts.map +1 -1
- package/dist/lib/format.js +86 -23
- package/dist/lib/format.js.map +1 -1
- package/dist/lib/retry.d.ts +8 -0
- package/dist/lib/retry.d.ts.map +1 -0
- package/dist/lib/retry.js +25 -0
- package/dist/lib/retry.js.map +1 -0
- package/dist/lib/types.d.ts +6 -0
- package/dist/lib/types.d.ts.map +1 -0
- package/dist/lib/types.js +2 -0
- package/dist/lib/types.js.map +1 -0
- package/dist/lib/validation.d.ts +0 -12
- package/dist/lib/validation.d.ts.map +1 -1
- package/dist/lib/validation.js +1 -23
- package/dist/lib/validation.js.map +1 -1
- package/dist/mcp/handlers/batch.d.ts +13 -0
- package/dist/mcp/handlers/batch.d.ts.map +1 -0
- package/dist/mcp/handlers/batch.js +33 -0
- package/dist/mcp/handlers/batch.js.map +1 -0
- 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 +11 -12
- package/dist/mcp/handlers/config.js.map +1 -1
- package/dist/mcp/handlers/index.d.ts +3 -0
- package/dist/mcp/handlers/index.d.ts.map +1 -1
- package/dist/mcp/handlers/index.js +3 -0
- package/dist/mcp/handlers/index.js.map +1 -1
- package/dist/mcp/handlers/lending.d.ts +12 -1
- package/dist/mcp/handlers/lending.d.ts.map +1 -1
- package/dist/mcp/handlers/lending.js +67 -23
- package/dist/mcp/handlers/lending.js.map +1 -1
- package/dist/mcp/handlers/multi-swap.d.ts +27 -0
- package/dist/mcp/handlers/multi-swap.d.ts.map +1 -0
- package/dist/mcp/handlers/multi-swap.js +73 -0
- package/dist/mcp/handlers/multi-swap.js.map +1 -0
- package/dist/mcp/handlers/portfolio.d.ts +7 -0
- package/dist/mcp/handlers/portfolio.d.ts.map +1 -0
- package/dist/mcp/handlers/portfolio.js +11 -0
- package/dist/mcp/handlers/portfolio.js.map +1 -0
- package/dist/mcp/handlers/staking.d.ts +13 -1
- package/dist/mcp/handlers/staking.d.ts.map +1 -1
- package/dist/mcp/handlers/staking.js +18 -5
- package/dist/mcp/handlers/staking.js.map +1 -1
- package/dist/mcp/handlers/trade.d.ts +1 -0
- package/dist/mcp/handlers/trade.d.ts.map +1 -1
- package/dist/mcp/handlers/trade.js +27 -13
- package/dist/mcp/handlers/trade.js.map +1 -1
- package/dist/mcp/handlers/wallet.d.ts +1 -0
- package/dist/mcp/handlers/wallet.d.ts.map +1 -1
- package/dist/mcp/handlers/wallet.js +24 -5
- package/dist/mcp/handlers/wallet.js.map +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +45 -4
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools/auth.d.ts +3 -0
- package/dist/mcp/tools/auth.d.ts.map +1 -0
- package/dist/mcp/tools/auth.js +17 -0
- package/dist/mcp/tools/auth.js.map +1 -0
- package/dist/mcp/tools/error-handling.d.ts +12 -0
- package/dist/mcp/tools/error-handling.d.ts.map +1 -0
- package/dist/mcp/tools/error-handling.js +28 -0
- package/dist/mcp/tools/error-handling.js.map +1 -0
- package/dist/mcp/tools/index.d.ts +11 -0
- package/dist/mcp/tools/index.d.ts.map +1 -0
- package/dist/mcp/tools/index.js +19 -0
- package/dist/mcp/tools/index.js.map +1 -0
- package/dist/mcp/tools/lending.d.ts +3 -0
- package/dist/mcp/tools/lending.d.ts.map +1 -0
- package/dist/mcp/tools/lending.js +71 -0
- package/dist/mcp/tools/lending.js.map +1 -0
- package/dist/mcp/tools/staking.d.ts +3 -0
- package/dist/mcp/tools/staking.d.ts.map +1 -0
- package/dist/mcp/tools/staking.js +50 -0
- package/dist/mcp/tools/staking.js.map +1 -0
- package/dist/mcp/tools/trade.d.ts +3 -0
- package/dist/mcp/tools/trade.d.ts.map +1 -0
- package/dist/mcp/tools/trade.js +63 -0
- package/dist/mcp/tools/trade.js.map +1 -0
- package/dist/mcp/tools/wallet.d.ts +3 -0
- package/dist/mcp/tools/wallet.d.ts.map +1 -0
- package/dist/mcp/tools/wallet.js +27 -0
- package/dist/mcp/tools/wallet.js.map +1 -0
- package/dist/mcp/tools.d.ts.map +1 -1
- package/dist/mcp/tools.js +125 -41
- package/dist/mcp/tools.js.map +1 -1
- package/dist/services/api/client.d.ts +0 -12
- package/dist/services/api/client.d.ts.map +1 -1
- package/dist/services/api/client.js +7 -16
- package/dist/services/api/client.js.map +1 -1
- package/dist/services/auth/session.d.ts +1 -7
- package/dist/services/auth/session.d.ts.map +1 -1
- package/dist/services/auth/session.js +21 -0
- package/dist/services/auth/session.js.map +1 -1
- package/dist/services/batch/batch.d.ts +35 -0
- package/dist/services/batch/batch.d.ts.map +1 -0
- package/dist/services/batch/batch.js +110 -0
- package/dist/services/batch/batch.js.map +1 -0
- package/dist/services/config/config.d.ts +3 -0
- package/dist/services/config/config.d.ts.map +1 -1
- package/dist/services/config/config.js +30 -1
- package/dist/services/config/config.js.map +1 -1
- package/dist/services/fibrous/config.d.ts +4 -0
- package/dist/services/fibrous/config.d.ts.map +1 -0
- package/dist/services/fibrous/config.js +4 -0
- package/dist/services/fibrous/config.js.map +1 -0
- package/dist/services/fibrous/health.js +1 -1
- package/dist/services/fibrous/health.js.map +1 -1
- package/dist/services/fibrous/route.d.ts +15 -6
- package/dist/services/fibrous/route.d.ts.map +1 -1
- package/dist/services/fibrous/route.js +64 -3
- package/dist/services/fibrous/route.js.map +1 -1
- package/dist/services/portfolio/portfolio.d.ts +31 -0
- package/dist/services/portfolio/portfolio.d.ts.map +1 -0
- package/dist/services/portfolio/portfolio.js +104 -0
- package/dist/services/portfolio/portfolio.js.map +1 -0
- package/dist/services/simulate/simulate.d.ts +10 -0
- package/dist/services/simulate/simulate.d.ts.map +1 -0
- package/dist/services/simulate/simulate.js +57 -0
- package/dist/services/simulate/simulate.js.map +1 -0
- package/dist/services/staking/staking.d.ts +9 -30
- package/dist/services/staking/staking.d.ts.map +1 -1
- package/dist/services/staking/staking.js +44 -52
- package/dist/services/staking/staking.js.map +1 -1
- package/dist/services/starkzap/client.d.ts +2 -1
- package/dist/services/starkzap/client.d.ts.map +1 -1
- package/dist/services/starkzap/client.js +39 -21
- package/dist/services/starkzap/client.js.map +1 -1
- package/dist/services/starkzap/config.d.ts +6 -0
- package/dist/services/starkzap/config.d.ts.map +1 -0
- package/dist/services/starkzap/config.js +13 -0
- package/dist/services/starkzap/config.js.map +1 -0
- package/dist/services/tokens/balances.d.ts.map +1 -1
- package/dist/services/tokens/balances.js +8 -8
- package/dist/services/tokens/balances.js.map +1 -1
- package/dist/services/tokens/tokens.d.ts +2 -3
- package/dist/services/tokens/tokens.d.ts.map +1 -1
- package/dist/services/tokens/tokens.js +3 -8
- package/dist/services/tokens/tokens.js.map +1 -1
- package/dist/services/vesu/api.d.ts +28 -0
- package/dist/services/vesu/api.d.ts.map +1 -0
- package/dist/services/vesu/api.js +91 -0
- package/dist/services/vesu/api.js.map +1 -0
- package/dist/services/vesu/config.d.ts +9 -0
- package/dist/services/vesu/config.d.ts.map +1 -0
- package/dist/services/vesu/config.js +32 -0
- package/dist/services/vesu/config.js.map +1 -0
- package/dist/services/vesu/index.d.ts +2 -0
- package/dist/services/vesu/index.d.ts.map +1 -1
- package/dist/services/vesu/index.js +2 -0
- package/dist/services/vesu/index.js.map +1 -1
- package/dist/services/vesu/lending.d.ts +9 -5
- package/dist/services/vesu/lending.d.ts.map +1 -1
- package/dist/services/vesu/lending.js +176 -60
- package/dist/services/vesu/lending.js.map +1 -1
- package/dist/services/vesu/pools.d.ts +6 -12
- package/dist/services/vesu/pools.d.ts.map +1 -1
- package/dist/services/vesu/pools.js +11 -31
- package/dist/services/vesu/pools.js.map +1 -1
- package/package.json +88 -82
- package/skills/README.md +59 -0
- package/skills/authenticate-wallet/SKILL.md +119 -0
- package/skills/balance/SKILL.md +80 -0
- package/skills/batch/SKILL.md +118 -0
- package/skills/config/SKILL.md +144 -0
- package/skills/lending/SKILL.md +209 -0
- package/skills/multi-swap/SKILL.md +95 -0
- package/skills/portfolio/SKILL.md +82 -0
- package/skills/send/SKILL.md +82 -0
- package/skills/staking/SKILL.md +188 -0
- package/skills/trade/SKILL.md +92 -0
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { Amount } from "starkzap";
|
|
2
|
+
import { resolveToken } from "../tokens/tokens.js";
|
|
3
|
+
import { getTokenUsdPrice } from "../fibrous/route.js";
|
|
4
|
+
import { ErrorCode, StarkfiError } from "../../lib/errors.js";
|
|
5
|
+
export async function simulateTransaction(builder) {
|
|
6
|
+
const calls = await builder.calls();
|
|
7
|
+
const callCount = calls.length;
|
|
8
|
+
if (callCount === 0) {
|
|
9
|
+
throw new StarkfiError(ErrorCode.SIMULATION_FAILED, "No calls to simulate — builder is empty.");
|
|
10
|
+
}
|
|
11
|
+
const preflight = await builder.preflight();
|
|
12
|
+
if (!preflight.ok) {
|
|
13
|
+
return {
|
|
14
|
+
success: false,
|
|
15
|
+
estimatedFee: "N/A",
|
|
16
|
+
estimatedFeeUsd: "N/A",
|
|
17
|
+
callCount,
|
|
18
|
+
revertReason: preflight.reason,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
try {
|
|
22
|
+
const feeEstimate = await builder.estimateFee();
|
|
23
|
+
const overallFee = BigInt(feeEstimate.overall_fee);
|
|
24
|
+
const ethToken = resolveToken("ETH");
|
|
25
|
+
const feeAmount = Amount.fromRaw(overallFee, ethToken);
|
|
26
|
+
const feeFormatted = feeAmount.toUnit();
|
|
27
|
+
let feeUsd = "unknown";
|
|
28
|
+
try {
|
|
29
|
+
const ethPrice = await getTokenUsdPrice(ethToken);
|
|
30
|
+
if (ethPrice > 0) {
|
|
31
|
+
const usdValue = parseFloat(feeFormatted) * ethPrice;
|
|
32
|
+
feeUsd = `$${usdValue.toFixed(4)}`;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
// USD pricing is best-effort
|
|
37
|
+
}
|
|
38
|
+
return {
|
|
39
|
+
success: true,
|
|
40
|
+
estimatedFee: `${feeFormatted} ETH`,
|
|
41
|
+
estimatedFeeUsd: feeUsd,
|
|
42
|
+
callCount,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
return {
|
|
47
|
+
success: true,
|
|
48
|
+
estimatedFee: "estimation failed",
|
|
49
|
+
estimatedFeeUsd: "unknown",
|
|
50
|
+
callCount,
|
|
51
|
+
revertReason: error instanceof Error
|
|
52
|
+
? `Fee estimation failed: ${error.message}`
|
|
53
|
+
: "Fee estimation failed",
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=simulate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"simulate.js","sourceRoot":"","sources":["../../../src/services/simulate/simulate.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAU9D,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,OAAkB;IAC3D,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;IACpC,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC;IAE/B,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,YAAY,CACrB,SAAS,CAAC,iBAAiB,EAC3B,0CAA0C,CAC1C,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,SAAS,EAAE,CAAC;IAE5C,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC;QACnB,OAAO;YACN,OAAO,EAAE,KAAK;YACd,YAAY,EAAE,KAAK;YACnB,eAAe,EAAE,KAAK;YACtB,SAAS;YACT,YAAY,EAAE,SAAS,CAAC,MAAM;SAC9B,CAAC;IACH,CAAC;IAED,IAAI,CAAC;QACJ,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,WAAW,EAAE,CAAC;QAChD,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAEnD,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;QACrC,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACvD,MAAM,YAAY,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC;QAExC,IAAI,MAAM,GAAG,SAAS,CAAC;QACvB,IAAI,CAAC;YACJ,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,QAAQ,CAAC,CAAC;YAClD,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;gBAClB,MAAM,QAAQ,GAAG,UAAU,CAAC,YAAY,CAAC,GAAG,QAAQ,CAAC;gBACrD,MAAM,GAAG,IAAI,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;YACpC,CAAC;QACF,CAAC;QAAC,MAAM,CAAC;YACR,6BAA6B;QAC9B,CAAC;QAED,OAAO;YACN,OAAO,EAAE,IAAI;YACb,YAAY,EAAE,GAAG,YAAY,MAAM;YACnC,eAAe,EAAE,MAAM;YACvB,SAAS;SACT,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,OAAO;YACN,OAAO,EAAE,IAAI;YACb,YAAY,EAAE,mBAAmB;YACjC,eAAe,EAAE,SAAS;YAC1B,SAAS;YACT,YAAY,EACX,KAAK,YAAY,KAAK;gBACrB,CAAC,CAAC,0BAA0B,KAAK,CAAC,OAAO,EAAE;gBAC3C,CAAC,CAAC,uBAAuB;SAC3B,CAAC;IACH,CAAC;AACF,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { type StarkZap } from "starkzap";
|
|
2
2
|
import type { StarkZapWallet } from "../starkzap/client.js";
|
|
3
|
+
import type { TxResult, Network } from "../../lib/types.js";
|
|
3
4
|
export interface ValidatorInfo {
|
|
4
5
|
name: string;
|
|
5
6
|
address: string;
|
|
@@ -21,6 +22,7 @@ export interface PositionInfo {
|
|
|
21
22
|
export interface StakingOverviewPosition {
|
|
22
23
|
validator: string;
|
|
23
24
|
pool: string;
|
|
25
|
+
token: string;
|
|
24
26
|
staked: string;
|
|
25
27
|
rewards: string;
|
|
26
28
|
total: string;
|
|
@@ -31,40 +33,17 @@ export interface StakingOverviewPosition {
|
|
|
31
33
|
export interface StakingOverview {
|
|
32
34
|
network: string;
|
|
33
35
|
address: string;
|
|
34
|
-
totalStaked: string;
|
|
35
|
-
totalRewards: string;
|
|
36
|
-
totalValue: string;
|
|
37
|
-
totalUnpooling: string;
|
|
38
36
|
positions: StakingOverviewPosition[];
|
|
39
37
|
}
|
|
40
|
-
export declare function
|
|
41
|
-
name: string;
|
|
42
|
-
symbol: string;
|
|
43
|
-
address: string;
|
|
44
|
-
}>>;
|
|
38
|
+
export declare function resolvePoolForToken(pools: PoolInfo[], tokenSymbol: string): PoolInfo;
|
|
45
39
|
export declare function getValidatorPools(sdk: StarkZap, validatorAddress: string, wallet?: StarkZapWallet): Promise<PoolInfo[]>;
|
|
46
|
-
export declare function stake(wallet: StarkZapWallet, poolAddress: string, amount: string): Promise<
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
}>;
|
|
50
|
-
export declare function claimRewards(wallet: StarkZapWallet, poolAddress: string): Promise<{
|
|
51
|
-
hash: string;
|
|
52
|
-
explorerUrl: string;
|
|
53
|
-
}>;
|
|
54
|
-
export declare function compoundRewards(wallet: StarkZapWallet, poolAddress: string): Promise<{
|
|
55
|
-
hash: string;
|
|
56
|
-
explorerUrl: string;
|
|
40
|
+
export declare function stake(wallet: StarkZapWallet, poolAddress: string, amount: string, tokenSymbol?: string): Promise<TxResult>;
|
|
41
|
+
export declare function claimRewards(wallet: StarkZapWallet, poolAddress: string): Promise<TxResult>;
|
|
42
|
+
export declare function compoundRewards(wallet: StarkZapWallet, poolAddress: string): Promise<TxResult & {
|
|
57
43
|
compounded: string;
|
|
58
44
|
}>;
|
|
59
|
-
export declare function exitPoolIntent(wallet: StarkZapWallet, poolAddress: string, amount: string): Promise<
|
|
60
|
-
|
|
61
|
-
explorerUrl: string;
|
|
62
|
-
}>;
|
|
63
|
-
export declare function exitPool(wallet: StarkZapWallet, poolAddress: string): Promise<{
|
|
64
|
-
hash: string;
|
|
65
|
-
explorerUrl: string;
|
|
66
|
-
}>;
|
|
45
|
+
export declare function exitPoolIntent(wallet: StarkZapWallet, poolAddress: string, amount: string, tokenSymbol?: string): Promise<TxResult>;
|
|
46
|
+
export declare function exitPool(wallet: StarkZapWallet, poolAddress: string): Promise<TxResult>;
|
|
67
47
|
export declare function getPosition(wallet: StarkZapWallet, poolAddress: string): Promise<PositionInfo | null>;
|
|
68
|
-
export declare function
|
|
69
|
-
export declare function getStakingOverview(sdk: StarkZap, wallet: StarkZapWallet, network: string, address: string): Promise<StakingOverview>;
|
|
48
|
+
export declare function getStakingOverview(sdk: StarkZap, wallet: StarkZapWallet, network: Network, address: string, targetValidator?: string): Promise<StakingOverview>;
|
|
70
49
|
//# sourceMappingURL=staking.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"staking.d.ts","sourceRoot":"","sources":["../../../src/services/staking/staking.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"staking.d.ts","sourceRoot":"","sources":["../../../src/services/staking/staking.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAC;AAC9D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAG5D,OAAO,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAE5D,MAAM,WAAW,aAAa;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,QAAQ;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,IAAI,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,uBAAuB;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,uBAAuB,EAAE,CAAC;CACrC;AAGD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,WAAW,EAAE,MAAM,GAAG,QAAQ,CAWpF;AAED,wBAAsB,iBAAiB,CACtC,GAAG,EAAE,QAAQ,EACb,gBAAgB,EAAE,MAAM,EACxB,MAAM,CAAC,EAAE,cAAc,GACrB,OAAO,CAAC,QAAQ,EAAE,CAAC,CAcrB;AAGD,wBAAsB,KAAK,CAC1B,MAAM,EAAE,cAAc,EACtB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,WAAW,SAAS,GAClB,OAAO,CAAC,QAAQ,CAAC,CASnB;AAED,wBAAsB,YAAY,CAAC,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAajG;AAGD,wBAAsB,eAAe,CACpC,MAAM,EAAE,cAAc,EACtB,WAAW,EAAE,MAAM,GACjB,OAAO,CAAC,QAAQ,GAAG;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,CAsB5C;AAGD,wBAAsB,cAAc,CACnC,MAAM,EAAE,cAAc,EACtB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,WAAW,SAAS,GAClB,OAAO,CAAC,QAAQ,CAAC,CASnB;AAGD,wBAAsB,QAAQ,CAAC,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CA2B7F;AAED,wBAAsB,WAAW,CAChC,MAAM,EAAE,cAAc,EACtB,WAAW,EAAE,MAAM,GACjB,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAa9B;AAID,wBAAsB,kBAAkB,CACvC,GAAG,EAAE,QAAQ,EACb,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,MAAM,EACf,eAAe,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC,eAAe,CAAC,CAkE1B"}
|
|
@@ -1,16 +1,15 @@
|
|
|
1
1
|
import { Amount, fromAddress } from "starkzap";
|
|
2
2
|
import { resolveToken } from "../tokens/tokens.js";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
}));
|
|
3
|
+
import { StarkfiError, ErrorCode } from "../../lib/errors.js";
|
|
4
|
+
// Find a pool matching a specific token symbol from a validator's pools.
|
|
5
|
+
export function resolvePoolForToken(pools, tokenSymbol) {
|
|
6
|
+
const upper = tokenSymbol.toUpperCase();
|
|
7
|
+
const match = pools.find((p) => p.tokenSymbol.toUpperCase() === upper);
|
|
8
|
+
if (!match) {
|
|
9
|
+
const available = pools.map((p) => p.tokenSymbol).join(", ");
|
|
10
|
+
throw new StarkfiError(ErrorCode.POOL_NOT_FOUND, `No ${tokenSymbol} pool found for this validator. Available: ${available}`);
|
|
11
|
+
}
|
|
12
|
+
return match;
|
|
14
13
|
}
|
|
15
14
|
export async function getValidatorPools(sdk, validatorAddress, wallet) {
|
|
16
15
|
const pools = await sdk.getStakerPools(fromAddress(validatorAddress));
|
|
@@ -25,8 +24,8 @@ export async function getValidatorPools(sdk, validatorAddress, wallet) {
|
|
|
25
24
|
}));
|
|
26
25
|
}
|
|
27
26
|
// Smart stake: auto-detects enter vs. add_to_delegation_pool.
|
|
28
|
-
export async function stake(wallet, poolAddress, amount) {
|
|
29
|
-
const token =
|
|
27
|
+
export async function stake(wallet, poolAddress, amount, tokenSymbol = "STRK") {
|
|
28
|
+
const token = resolveToken(tokenSymbol);
|
|
30
29
|
const parsedAmount = Amount.parse(amount, token);
|
|
31
30
|
const tx = await wallet.stake(fromAddress(poolAddress), parsedAmount);
|
|
32
31
|
return {
|
|
@@ -37,7 +36,7 @@ export async function stake(wallet, poolAddress, amount) {
|
|
|
37
36
|
export async function claimRewards(wallet, poolAddress) {
|
|
38
37
|
const position = await wallet.getPoolPosition(fromAddress(poolAddress));
|
|
39
38
|
if (!position || position.rewards.isZero()) {
|
|
40
|
-
throw new
|
|
39
|
+
throw new StarkfiError(ErrorCode.STAKING_FAILED, "No rewards to claim for this pool.");
|
|
41
40
|
}
|
|
42
41
|
const tx = await wallet.claimPoolRewards(fromAddress(poolAddress));
|
|
43
42
|
return {
|
|
@@ -49,7 +48,7 @@ export async function claimRewards(wallet, poolAddress) {
|
|
|
49
48
|
export async function compoundRewards(wallet, poolAddress) {
|
|
50
49
|
const position = await wallet.getPoolPosition(fromAddress(poolAddress));
|
|
51
50
|
if (!position || position.rewards.isZero()) {
|
|
52
|
-
throw new
|
|
51
|
+
throw new StarkfiError(ErrorCode.STAKING_FAILED, "No rewards to compound for this pool.");
|
|
53
52
|
}
|
|
54
53
|
const compounded = position.rewards.toFormatted(true);
|
|
55
54
|
const tx = await wallet
|
|
@@ -65,8 +64,8 @@ export async function compoundRewards(wallet, poolAddress) {
|
|
|
65
64
|
};
|
|
66
65
|
}
|
|
67
66
|
// Step 1 of 2-step exit: declare intent, then wait for cooldown.
|
|
68
|
-
export async function exitPoolIntent(wallet, poolAddress, amount) {
|
|
69
|
-
const token =
|
|
67
|
+
export async function exitPoolIntent(wallet, poolAddress, amount, tokenSymbol = "STRK") {
|
|
68
|
+
const token = resolveToken(tokenSymbol);
|
|
70
69
|
const parsedAmount = Amount.parse(amount, token);
|
|
71
70
|
const tx = await wallet.exitPoolIntent(fromAddress(poolAddress), parsedAmount);
|
|
72
71
|
return {
|
|
@@ -78,13 +77,13 @@ export async function exitPoolIntent(wallet, poolAddress, amount) {
|
|
|
78
77
|
export async function exitPool(wallet, poolAddress) {
|
|
79
78
|
const position = await wallet.getPoolPosition(fromAddress(poolAddress));
|
|
80
79
|
if (!position) {
|
|
81
|
-
throw new
|
|
80
|
+
throw new StarkfiError(ErrorCode.STAKING_FAILED, "Not a member of this pool.");
|
|
82
81
|
}
|
|
83
82
|
if (position.unpooling.isZero()) {
|
|
84
|
-
throw new
|
|
83
|
+
throw new StarkfiError(ErrorCode.EXIT_NOT_READY, "No exit intent declared. Call 'unstake intent' first.");
|
|
85
84
|
}
|
|
86
85
|
if (position.unpoolTime && new Date() < position.unpoolTime) {
|
|
87
|
-
throw new
|
|
86
|
+
throw new StarkfiError(ErrorCode.EXIT_NOT_READY, `Cooldown period is still active. Please wait until ${position.unpoolTime.toLocaleString()}`);
|
|
88
87
|
}
|
|
89
88
|
const tx = await wallet.exitPool(fromAddress(poolAddress));
|
|
90
89
|
return {
|
|
@@ -105,13 +104,20 @@ export async function getPosition(wallet, poolAddress) {
|
|
|
105
104
|
commissionPercent: position.commissionPercent,
|
|
106
105
|
};
|
|
107
106
|
}
|
|
108
|
-
export async function isPoolMember(wallet, poolAddress) {
|
|
109
|
-
return wallet.isPoolMember(fromAddress(poolAddress));
|
|
110
|
-
}
|
|
111
107
|
// Scan all known validators & pools to build a consolidated staking dashboard.
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
const
|
|
108
|
+
// If targetValidator is provided, it will strictly scan that validator's pools.
|
|
109
|
+
export async function getStakingOverview(sdk, wallet, network, address, targetValidator) {
|
|
110
|
+
const { getValidators, findValidator } = await import("./validators.js");
|
|
111
|
+
let validators = getValidators(network);
|
|
112
|
+
if (targetValidator) {
|
|
113
|
+
const found = findValidator(targetValidator, network);
|
|
114
|
+
if (found) {
|
|
115
|
+
validators = [found];
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
throw new StarkfiError(ErrorCode.VALIDATOR_NOT_FOUND, `Validator '${targetValidator}' not found`);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
115
121
|
// Discover all pools across all validators concurrently.
|
|
116
122
|
const validatorPools = await Promise.all(validators.map(async (v) => {
|
|
117
123
|
const pools = await sdk.getStakerPools(v.stakerAddress);
|
|
@@ -126,6 +132,7 @@ export async function getStakingOverview(sdk, wallet, network, address) {
|
|
|
126
132
|
return {
|
|
127
133
|
validator,
|
|
128
134
|
pool: p.poolContract.toString(),
|
|
135
|
+
tokenSymbol: p.token.symbol,
|
|
129
136
|
staked: position.staked,
|
|
130
137
|
rewards: position.rewards,
|
|
131
138
|
total: position.total,
|
|
@@ -135,35 +142,20 @@ export async function getStakingOverview(sdk, wallet, network, address) {
|
|
|
135
142
|
};
|
|
136
143
|
}));
|
|
137
144
|
const activePositions = results.filter((r) => r !== null);
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
return {
|
|
150
|
-
validator: p.validator,
|
|
151
|
-
pool: p.pool,
|
|
152
|
-
staked: p.staked.toFormatted(true),
|
|
153
|
-
rewards: p.rewards.toFormatted(true),
|
|
154
|
-
total: p.total.toFormatted(true),
|
|
155
|
-
unpooling: p.unpooling.toFormatted(true),
|
|
156
|
-
cooldownEndsAt: p.unpoolTime ? p.unpoolTime.toISOString() : null,
|
|
157
|
-
commission: `${p.commissionPercent}%`,
|
|
158
|
-
};
|
|
159
|
-
});
|
|
145
|
+
const positions = activePositions.map((p) => ({
|
|
146
|
+
validator: p.validator,
|
|
147
|
+
pool: p.pool,
|
|
148
|
+
token: p.tokenSymbol,
|
|
149
|
+
staked: p.staked.toFormatted(true),
|
|
150
|
+
rewards: p.rewards.toFormatted(true),
|
|
151
|
+
total: p.total.toFormatted(true),
|
|
152
|
+
unpooling: p.unpooling.toFormatted(true),
|
|
153
|
+
cooldownEndsAt: p.unpoolTime ? p.unpoolTime.toISOString() : null,
|
|
154
|
+
commission: `${p.commissionPercent}%`,
|
|
155
|
+
}));
|
|
160
156
|
return {
|
|
161
157
|
network,
|
|
162
158
|
address,
|
|
163
|
-
totalStaked: totalStaked.toFormatted(true),
|
|
164
|
-
totalRewards: totalRewards.toFormatted(true),
|
|
165
|
-
totalValue: totalValue.toFormatted(true),
|
|
166
|
-
totalUnpooling: totalUnpooling.toFormatted(true),
|
|
167
159
|
positions,
|
|
168
160
|
};
|
|
169
161
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"staking.js","sourceRoot":"","sources":["../../../src/services/staking/staking.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"staking.js","sourceRoot":"","sources":["../../../src/services/staking/staking.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import type { Wallet } from "starkzap";
|
|
2
2
|
import { StarkZap, type FeeMode } from "starkzap";
|
|
3
3
|
import type { Session } from "../auth/session.js";
|
|
4
|
+
import type { Network } from "../../lib/types.js";
|
|
4
5
|
export type StarkZapWallet = Wallet;
|
|
5
6
|
export declare function resolveFeeModeConfig(gasfreeMode: boolean, gasToken: string | undefined): {
|
|
6
7
|
feeMode: FeeMode;
|
|
7
8
|
gasTokenAddress: string | undefined;
|
|
8
9
|
needsPaymaster: boolean;
|
|
9
10
|
};
|
|
10
|
-
export declare function createSDK(network?:
|
|
11
|
+
export declare function createSDK(network?: Network, rpcUrl?: string, needsPaymaster?: boolean, paymasterUrl?: string): StarkZap;
|
|
11
12
|
export declare function connectWallet(sdk: StarkZap, session: Session): Promise<Wallet>;
|
|
12
13
|
export interface SDKAndWallet {
|
|
13
14
|
sdk: StarkZap;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/services/starkzap/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/services/starkzap/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAkC,KAAK,OAAO,EAAE,MAAM,UAAU,CAAC;AAClF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAQlD,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC;AAGpC,wBAAgB,oBAAoB,CACnC,WAAW,EAAE,OAAO,EACpB,QAAQ,EAAE,MAAM,GAAG,SAAS,GAC1B;IACF,OAAO,EAAE,OAAO,CAAC;IACjB,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,cAAc,EAAE,OAAO,CAAC;CACxB,CAkBA;AA+BD,wBAAgB,SAAS,CACxB,OAAO,GAAE,OAAmB,EAC5B,MAAM,CAAC,EAAE,MAAM,EACf,cAAc,UAAQ,EACtB,YAAY,CAAC,EAAE,MAAM,GACnB,QAAQ,CAUV;AAED,wBAAsB,aAAa,CAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAuBpF;AAED,MAAM,WAAW,YAAY;IAC5B,GAAG,EAAE,QAAQ,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;CACpC;AAED,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,CAiB9E"}
|
|
@@ -1,21 +1,42 @@
|
|
|
1
|
-
import { StarkZap,
|
|
1
|
+
import { StarkZap, PrivySigner, ArgentXV050Preset } from "starkzap";
|
|
2
2
|
import { ConfigService } from "../config/config.js";
|
|
3
|
-
import { AVNU_PAYMASTER_URL, AVNU_PAYMASTER_SEPOLIA_URL, GAS_TOKEN_ADDRESSES, } from "
|
|
4
|
-
//
|
|
3
|
+
import { AVNU_PAYMASTER_URL, AVNU_PAYMASTER_SEPOLIA_URL, GAS_TOKEN_ADDRESSES, DEFAULT_GAS_TOKEN, } from "./config.js";
|
|
4
|
+
// Resolve fee mode: gasfree (developer pays) vs gasless (user pays in ERC-20).
|
|
5
5
|
export function resolveFeeModeConfig(gasfreeMode, gasToken) {
|
|
6
6
|
if (gasfreeMode) {
|
|
7
7
|
return { feeMode: "sponsored", gasTokenAddress: undefined, needsPaymaster: true };
|
|
8
8
|
}
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
return { feeMode: "user_pays", gasTokenAddress, needsPaymaster: true };
|
|
14
|
-
}
|
|
9
|
+
const resolvedToken = gasToken ?? DEFAULT_GAS_TOKEN;
|
|
10
|
+
const gasTokenAddress = GAS_TOKEN_ADDRESSES[resolvedToken.toUpperCase()];
|
|
11
|
+
if (gasTokenAddress) {
|
|
12
|
+
return { feeMode: "sponsored", gasTokenAddress, needsPaymaster: true };
|
|
15
13
|
}
|
|
16
|
-
|
|
14
|
+
// Fallback
|
|
15
|
+
return {
|
|
16
|
+
feeMode: "sponsored",
|
|
17
|
+
gasTokenAddress: GAS_TOKEN_ADDRESSES["STRK"],
|
|
18
|
+
needsPaymaster: true,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
// Patch paymaster feeMode: 'sponsored' → 'default' with gasToken for gasless mode.
|
|
22
|
+
function patchGaslessMode(wallet, gasTokenAddress) {
|
|
23
|
+
const account = wallet.getAccount();
|
|
24
|
+
// Defensive guard — if StarkZap SDK changes the internal method name, fail gracefully
|
|
25
|
+
const exec = account.executePaymasterTransaction;
|
|
26
|
+
if (typeof exec !== "function") {
|
|
27
|
+
console.warn("[StarkFi] Cannot patch gasless mode — executePaymasterTransaction not found on account. " +
|
|
28
|
+
"Gas will use default sponsored mode. Consider updating StarkZap SDK.");
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
const originalExecutePaymaster = exec.bind(account);
|
|
32
|
+
account.executePaymasterTransaction = async function (calls, details, ...rest) {
|
|
33
|
+
const patchedDetails = {
|
|
34
|
+
...details,
|
|
35
|
+
feeMode: { mode: "default", gasToken: gasTokenAddress },
|
|
36
|
+
};
|
|
37
|
+
return originalExecutePaymaster(calls, patchedDetails, ...rest);
|
|
38
|
+
};
|
|
17
39
|
}
|
|
18
|
-
let sdkInstance = null;
|
|
19
40
|
export function createSDK(network = "mainnet", rpcUrl, needsPaymaster = false, paymasterUrl) {
|
|
20
41
|
const config = { network };
|
|
21
42
|
if (rpcUrl)
|
|
@@ -24,30 +45,27 @@ export function createSDK(network = "mainnet", rpcUrl, needsPaymaster = false, p
|
|
|
24
45
|
const defaultUrl = network === "sepolia" ? AVNU_PAYMASTER_SEPOLIA_URL : AVNU_PAYMASTER_URL;
|
|
25
46
|
config.paymaster = { nodeUrl: paymasterUrl ?? defaultUrl };
|
|
26
47
|
}
|
|
27
|
-
|
|
28
|
-
return sdkInstance;
|
|
48
|
+
return new StarkZap(config);
|
|
29
49
|
}
|
|
30
50
|
export async function connectWallet(sdk, session) {
|
|
31
51
|
const configService = ConfigService.getInstance();
|
|
32
52
|
const gasfreeMode = configService.get("gasfreeMode") === true;
|
|
33
53
|
const gasToken = configService.get("gasToken");
|
|
34
|
-
const { feeMode } = resolveFeeModeConfig(gasfreeMode, gasToken);
|
|
35
|
-
if (session.type === "local") {
|
|
36
|
-
return sdk.connectWallet({
|
|
37
|
-
account: { signer: new StarkSigner(session.privateKey) },
|
|
38
|
-
feeMode,
|
|
39
|
-
});
|
|
40
|
-
}
|
|
54
|
+
const { feeMode, gasTokenAddress } = resolveFeeModeConfig(gasfreeMode, gasToken);
|
|
41
55
|
const signer = new PrivySigner({
|
|
42
56
|
walletId: session.walletId,
|
|
43
57
|
publicKey: session.publicKey,
|
|
44
58
|
serverUrl: session.serverUrl,
|
|
45
59
|
headers: { Authorization: `Bearer ${session.token}` },
|
|
46
60
|
});
|
|
47
|
-
|
|
61
|
+
const wallet = await sdk.connectWallet({
|
|
48
62
|
account: { signer, accountClass: ArgentXV050Preset },
|
|
49
63
|
feeMode,
|
|
50
64
|
});
|
|
65
|
+
if (!gasfreeMode && gasTokenAddress) {
|
|
66
|
+
patchGaslessMode(wallet, gasTokenAddress);
|
|
67
|
+
}
|
|
68
|
+
return wallet;
|
|
51
69
|
}
|
|
52
70
|
export async function initSDKAndWallet(session) {
|
|
53
71
|
const configService = ConfigService.getInstance();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/services/starkzap/client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/services/starkzap/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare const AVNU_PAYMASTER_URL = "https://starknet.paymaster.avnu.fi";
|
|
2
|
+
export declare const AVNU_PAYMASTER_SEPOLIA_URL = "https://sepolia.paymaster.avnu.fi";
|
|
3
|
+
export declare const DEFAULT_GAS_TOKEN = "STRK";
|
|
4
|
+
export declare const GAS_TOKEN_ADDRESSES: Record<string, string>;
|
|
5
|
+
export declare const GASLESS_SUPPORTED_TOKENS: string[];
|
|
6
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/services/starkzap/config.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,uCAAuC,CAAC;AACvE,eAAO,MAAM,0BAA0B,sCAAsC,CAAC;AAE9E,eAAO,MAAM,iBAAiB,SAAS,CAAC;AAGxC,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAMtD,CAAC;AAEF,eAAO,MAAM,wBAAwB,UAAmC,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export const AVNU_PAYMASTER_URL = "https://starknet.paymaster.avnu.fi";
|
|
2
|
+
export const AVNU_PAYMASTER_SEPOLIA_URL = "https://sepolia.paymaster.avnu.fi";
|
|
3
|
+
export const DEFAULT_GAS_TOKEN = "STRK";
|
|
4
|
+
// Tokens accepted by Paymaster for Gasless mode.
|
|
5
|
+
export const GAS_TOKEN_ADDRESSES = {
|
|
6
|
+
ETH: "0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7",
|
|
7
|
+
STRK: "0x04718f5a0fc34cc1af16a1cdee98ffb20c31f5cd61d6ab07201858f4287c938d",
|
|
8
|
+
USDC: "0x033068f6539f8e6e6b131e6b2b814e6c34a5224bc66947c47dab9dfee93b35fb",
|
|
9
|
+
USDT: "0x068f5c6a61780768455de69077e07e89787839bf8166decfbf92b645209c0fb8",
|
|
10
|
+
DAI: "0x05574eb6b8789a91466f902c380d978e472db68170ff82a5b650b95a58ddf4ad",
|
|
11
|
+
};
|
|
12
|
+
export const GASLESS_SUPPORTED_TOKENS = Object.keys(GAS_TOKEN_ADDRESSES);
|
|
13
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/services/starkzap/config.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,kBAAkB,GAAG,oCAAoC,CAAC;AACvE,MAAM,CAAC,MAAM,0BAA0B,GAAG,mCAAmC,CAAC;AAE9E,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC;AAExC,iDAAiD;AACjD,MAAM,CAAC,MAAM,mBAAmB,GAA2B;IAC1D,GAAG,EAAE,oEAAoE;IACzE,IAAI,EAAE,oEAAoE;IAC1E,IAAI,EAAE,oEAAoE;IAC1E,IAAI,EAAE,oEAAoE;IAC1E,GAAG,EAAE,oEAAoE;CACzE,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"balances.d.ts","sourceRoot":"","sources":["../../../src/services/tokens/balances.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"balances.d.ts","sourceRoot":"","sources":["../../../src/services/tokens/balances.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAIhD,MAAM,WAAW,YAAY;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CAChB;AAID,wBAAsB,WAAW,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAkBlF"}
|
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
import { fetchTokens } from "./tokens.js";
|
|
2
|
+
import { runConcurrent } from "../../lib/concurrency.js";
|
|
3
|
+
const RPC_CONCURRENCY_LIMIT = 10;
|
|
2
4
|
export async function getBalances(wallet) {
|
|
3
|
-
const tokens =
|
|
4
|
-
|
|
5
|
-
const balancePromises = tokens.map(async (token) => {
|
|
5
|
+
const tokens = fetchTokens();
|
|
6
|
+
return runConcurrent(tokens, RPC_CONCURRENCY_LIMIT, async (token) => {
|
|
6
7
|
try {
|
|
7
8
|
const amount = await wallet.balanceOf(token);
|
|
8
9
|
if (amount.isPositive()) {
|
|
9
|
-
|
|
10
|
+
return {
|
|
10
11
|
symbol: token.symbol,
|
|
11
12
|
name: token.name,
|
|
12
13
|
balance: amount.toUnit(),
|
|
13
|
-
}
|
|
14
|
+
};
|
|
14
15
|
}
|
|
15
16
|
}
|
|
16
17
|
catch {
|
|
17
|
-
// Silently
|
|
18
|
+
// Silently skip tokens that fail due to contract issues.
|
|
18
19
|
}
|
|
20
|
+
return undefined;
|
|
19
21
|
});
|
|
20
|
-
await Promise.all(balancePromises);
|
|
21
|
-
return results;
|
|
22
22
|
}
|
|
23
23
|
//# sourceMappingURL=balances.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"balances.js","sourceRoot":"","sources":["../../../src/services/tokens/balances.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"balances.js","sourceRoot":"","sources":["../../../src/services/tokens/balances.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAQzD,MAAM,qBAAqB,GAAG,EAAE,CAAC;AAEjC,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,MAAuB;IACxD,MAAM,MAAM,GAAG,WAAW,EAAE,CAAC;IAE7B,OAAO,aAAa,CAAC,MAAM,EAAE,qBAAqB,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;QACnE,IAAI,CAAC;YACJ,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;YAC7C,IAAI,MAAM,CAAC,UAAU,EAAE,EAAE,CAAC;gBACzB,OAAO;oBACN,MAAM,EAAE,KAAK,CAAC,MAAM;oBACpB,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE;iBACxB,CAAC;YACH,CAAC;QACF,CAAC;QAAC,MAAM,CAAC;YACR,yDAAyD;QAC1D,CAAC;QACD,OAAO,SAAS,CAAC;IAClB,CAAC,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { type Token } from "starkzap";
|
|
2
|
-
export declare function fetchTokens():
|
|
3
|
-
export declare function resolveToken(symbol: string):
|
|
4
|
-
export declare function resolveTokenByAddress(address: string): Promise<Token | null>;
|
|
2
|
+
export declare function fetchTokens(): Token[];
|
|
3
|
+
export declare function resolveToken(symbol: string): Token;
|
|
5
4
|
//# sourceMappingURL=tokens.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../../../src/services/tokens/tokens.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,KAAK,EAAE,MAAM,UAAU,CAAC;AAG3D,
|
|
1
|
+
{"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../../../src/services/tokens/tokens.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,KAAK,KAAK,EAAE,MAAM,UAAU,CAAC;AAG3D,wBAAgB,WAAW,IAAI,KAAK,EAAE,CAGrC;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAiBlD"}
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import { ChainId, getPresets } from "starkzap";
|
|
2
2
|
import { ErrorCode, StarkfiError } from "../../lib/errors.js";
|
|
3
|
-
export
|
|
4
|
-
// getPresets returns a Record<string, Token>. We convert it to an array.
|
|
3
|
+
export function fetchTokens() {
|
|
5
4
|
const presetTokens = getPresets(ChainId.MAINNET);
|
|
6
5
|
return Object.values(presetTokens);
|
|
7
6
|
}
|
|
8
|
-
export
|
|
9
|
-
const tokens =
|
|
7
|
+
export function resolveToken(symbol) {
|
|
8
|
+
const tokens = fetchTokens();
|
|
10
9
|
const upperSymbol = symbol.toUpperCase();
|
|
11
10
|
const token = tokens.find((t) => t.symbol.toUpperCase() === upperSymbol);
|
|
12
11
|
if (!token) {
|
|
@@ -17,8 +16,4 @@ export async function resolveToken(symbol) {
|
|
|
17
16
|
}
|
|
18
17
|
return token;
|
|
19
18
|
}
|
|
20
|
-
export async function resolveTokenByAddress(address) {
|
|
21
|
-
const tokens = await fetchTokens();
|
|
22
|
-
return tokens.find((t) => t.address.toLowerCase() === address.toLowerCase()) ?? null;
|
|
23
|
-
}
|
|
24
19
|
//# sourceMappingURL=tokens.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../../src/services/tokens/tokens.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAc,MAAM,UAAU,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAE9D,MAAM,
|
|
1
|
+
{"version":3,"file":"tokens.js","sourceRoot":"","sources":["../../../src/services/tokens/tokens.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAc,MAAM,UAAU,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAE9D,MAAM,UAAU,WAAW;IAC1B,MAAM,YAAY,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACjD,OAAO,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,MAAc;IAC1C,MAAM,MAAM,GAAG,WAAW,EAAE,CAAC;IAC7B,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;IAEzC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,WAAW,CAAC,CAAC;IAEzE,IAAI,CAAC,KAAK,EAAE,CAAC;QACZ,MAAM,IAAI,YAAY,CACrB,SAAS,CAAC,cAAc,EACxB,oBAAoB,MAAM,uBAAuB,MAAM;aACrD,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;aACZ,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;aACpB,IAAI,CAAC,IAAI,CAAC,KAAK,CACjB,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACd,CAAC"}
|