@kasarlabs/fibrous-mcp 0.1.3 → 0.1.5
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/build/lib/constants/index.d.ts +1 -1
- package/build/lib/constants/index.js +1 -1
- package/build/lib/constants/index.js.map +1 -1
- package/build/lib/types/index.d.ts +2 -0
- package/build/lib/utils/amount.d.ts +2 -0
- package/build/lib/utils/amount.js +12 -0
- package/build/lib/utils/amount.js.map +1 -0
- package/build/lib/utils/contractInteractor.d.ts +4 -4
- package/build/lib/utils/contractInteractor.js +16 -5
- package/build/lib/utils/contractInteractor.js.map +1 -1
- package/build/lib/utils/fibrousRouterSdk.d.ts +3 -0
- package/build/lib/utils/fibrousRouterSdk.js +12 -0
- package/build/lib/utils/fibrousRouterSdk.js.map +1 -0
- package/build/schemas/index.d.ts +6 -0
- package/build/schemas/index.js +12 -0
- package/build/schemas/index.js.map +1 -1
- package/build/tools/approval.js +10 -6
- package/build/tools/approval.js.map +1 -1
- package/build/tools/batchSwap.d.ts +5 -19
- package/build/tools/batchSwap.js +39 -36
- package/build/tools/batchSwap.js.map +1 -1
- package/build/tools/fetchRoute.d.ts +1 -1
- package/build/tools/fetchRoute.js +11 -17
- package/build/tools/fetchRoute.js.map +1 -1
- package/build/tools/fetchTokens.d.ts +2 -1
- package/build/tools/fetchTokens.js +15 -5
- package/build/tools/fetchTokens.js.map +1 -1
- package/build/tools/swap.d.ts +3 -6
- package/build/tools/swap.js +26 -21
- package/build/tools/swap.js.map +1 -1
- package/package.json +13 -7
- package/build/lib/abis/erc20Abi.d.ts +0 -89
- package/build/lib/abis/erc20Abi.js +0 -128
- package/build/lib/abis/erc20Abi.js.map +0 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const
|
|
1
|
+
export declare const DEFAULT_SLIPPAGE_PERCENTAGE = 1;
|
|
2
2
|
export declare const DEFAULT_QUOTE_SIZE = 1;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/constants/index.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/constants/index.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC;AAC7C,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC"}
|
|
@@ -4,11 +4,13 @@ export interface SwapParams {
|
|
|
4
4
|
sellTokenSymbol: string;
|
|
5
5
|
buyTokenSymbol: string;
|
|
6
6
|
sellAmount: number;
|
|
7
|
+
slippage?: number;
|
|
7
8
|
}
|
|
8
9
|
export interface BatchSwapParams {
|
|
9
10
|
sellTokenSymbols: string[];
|
|
10
11
|
buyTokenSymbols: string[];
|
|
11
12
|
sellAmounts: number[] | BigNumber[];
|
|
13
|
+
slippage?: number;
|
|
12
14
|
}
|
|
13
15
|
export interface Token {
|
|
14
16
|
name: string;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { BigNumber } from '@ethersproject/bignumber';
|
|
2
|
+
export function formatToBaseUnits(amount, decimals) {
|
|
3
|
+
if (BigNumber.isBigNumber(amount)) {
|
|
4
|
+
return amount.toString();
|
|
5
|
+
}
|
|
6
|
+
const value = amount.toString();
|
|
7
|
+
const [whole, fraction = ''] = value.split('.');
|
|
8
|
+
const paddedFraction = fraction.padEnd(decimals, '0').slice(0, decimals);
|
|
9
|
+
const combined = `${whole}${paddedFraction}`;
|
|
10
|
+
return combined.replace(/^(-?)0+(?=\d)/, '$1') || '0';
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=amount.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"amount.js","sourceRoot":"","sources":["../../../src/lib/utils/amount.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAUrD,MAAM,UAAU,iBAAiB,CAC/B,MAAmC,EACnC,QAAgB;IAEhB,IAAI,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;QAClC,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAC;IAC3B,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;IAChC,MAAM,CAAC,KAAK,EAAE,QAAQ,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAChD,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IACzE,MAAM,QAAQ,GAAG,GAAG,KAAK,GAAG,cAAc,EAAE,CAAC;IAC7C,OAAO,QAAQ,CAAC,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC,IAAI,GAAG,CAAC;AACxD,CAAC"}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import { Account, Contract, Call,
|
|
1
|
+
import { Account, Contract, Call, EstimateFeeResponseOverhead } from 'starknet';
|
|
2
2
|
import { BaseUtilityClass, ContractDeployResult, TransactionResult } from '../types/index.js';
|
|
3
3
|
export declare class ContractInteractor implements BaseUtilityClass {
|
|
4
4
|
provider: any;
|
|
5
5
|
constructor(provider: any);
|
|
6
6
|
deployContract(account: Account, classHash: string, constructorCalldata?: any[], salt?: string): Promise<ContractDeployResult>;
|
|
7
|
-
estimateContractDeploy(account: Account, classHash: string, constructorCalldata?: any[], salt?: string): Promise<
|
|
7
|
+
estimateContractDeploy(account: Account, classHash: string, constructorCalldata?: any[], salt?: string): Promise<EstimateFeeResponseOverhead>;
|
|
8
8
|
multicall(account: Account, calls: Call[]): Promise<TransactionResult>;
|
|
9
|
-
estimateMulticall(account: Account, calls: Call[]): Promise<
|
|
9
|
+
estimateMulticall(account: Account, calls: Call[]): Promise<EstimateFeeResponseOverhead>;
|
|
10
10
|
createContract(abi: any[], address: string, account?: Account): Contract;
|
|
11
11
|
readContract(contract: Contract, method: string, args?: any[]): Promise<any>;
|
|
12
12
|
writeContract(contract: Contract, method: string, args?: any[]): Promise<TransactionResult>;
|
|
13
|
-
estimateContractWrite(contract: Contract, method: string, args?: any[]): Promise<
|
|
13
|
+
estimateContractWrite(contract: Contract, method: string, args?: any[]): Promise<EstimateFeeResponseOverhead>;
|
|
14
14
|
formatTokenAmount(amount: string | number, decimals?: number): string;
|
|
15
15
|
parseTokenAmount(amount: string, decimals?: number): string;
|
|
16
16
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Contract, CallData, hash } from 'starknet';
|
|
1
|
+
import { Contract, CallData, hash, } from 'starknet';
|
|
2
2
|
export class ContractInteractor {
|
|
3
3
|
constructor(provider) {
|
|
4
4
|
this.provider = provider;
|
|
@@ -59,7 +59,11 @@ export class ContractInteractor {
|
|
|
59
59
|
}
|
|
60
60
|
}
|
|
61
61
|
createContract(abi, address, account) {
|
|
62
|
-
return new Contract(
|
|
62
|
+
return new Contract({
|
|
63
|
+
abi,
|
|
64
|
+
address,
|
|
65
|
+
providerOrAccount: account || this.provider,
|
|
66
|
+
});
|
|
63
67
|
}
|
|
64
68
|
async readContract(contract, method, args = []) {
|
|
65
69
|
try {
|
|
@@ -90,17 +94,24 @@ export class ContractInteractor {
|
|
|
90
94
|
throw new Error('Contract must be connected to an account to estimate fees');
|
|
91
95
|
}
|
|
92
96
|
try {
|
|
93
|
-
|
|
97
|
+
const estimate = await contract.estimate(method, args);
|
|
98
|
+
if ('overall_fee' in estimate) {
|
|
99
|
+
return estimate;
|
|
100
|
+
}
|
|
101
|
+
throw new Error('Unexpected estimate response format');
|
|
94
102
|
}
|
|
95
103
|
catch (error) {
|
|
96
104
|
throw new Error(`Failed to estimate contract write: ${error.message}`);
|
|
97
105
|
}
|
|
98
106
|
}
|
|
99
107
|
formatTokenAmount(amount, decimals = 18) {
|
|
108
|
+
if (decimals < 0) {
|
|
109
|
+
throw new Error('Decimals must be non-negative');
|
|
110
|
+
}
|
|
100
111
|
const value = typeof amount === 'string' ? amount : amount.toString();
|
|
101
112
|
const [whole, fraction = ''] = value.split('.');
|
|
102
|
-
const
|
|
103
|
-
return whole +
|
|
113
|
+
const truncatedFraction = fraction.slice(0, decimals).padEnd(decimals, '0');
|
|
114
|
+
return whole + truncatedFraction;
|
|
104
115
|
}
|
|
105
116
|
parseTokenAmount(amount, decimals = 18) {
|
|
106
117
|
const amountBigInt = BigInt(amount);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contractInteractor.js","sourceRoot":"","sources":["../../../src/lib/utils/contractInteractor.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"contractInteractor.js","sourceRoot":"","sources":["../../../src/lib/utils/contractInteractor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { createRequire } from 'node:module';
|
|
2
|
+
export function getFibrousRouterCtor() {
|
|
3
|
+
const require = createRequire(import.meta.url);
|
|
4
|
+
const sdk = require('fibrous-router-sdk');
|
|
5
|
+
const m = sdk;
|
|
6
|
+
const RouterCtor = m.Router ?? m.default?.Router;
|
|
7
|
+
if (!RouterCtor) {
|
|
8
|
+
throw new Error('fibrous-router-sdk: Router export not found (ESM/CJS interop issue)');
|
|
9
|
+
}
|
|
10
|
+
return RouterCtor;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=fibrousRouterSdk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fibrousRouterSdk.js","sourceRoot":"","sources":["../../../src/lib/utils/fibrousRouterSdk.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAS5C,MAAM,UAAU,oBAAoB;IAGlC,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/C,MAAM,GAAG,GAAY,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACnD,MAAM,CAAC,GAAG,GAA2D,CAAC;IACtE,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC;IACjD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CACb,qEAAqE,CACtE,CAAC;IACJ,CAAC;IACD,OAAO,UAA+B,CAAC;AACzC,CAAC"}
|
package/build/schemas/index.d.ts
CHANGED
|
@@ -3,20 +3,25 @@ export declare const swapSchema: z.ZodObject<{
|
|
|
3
3
|
sellTokenSymbol: z.ZodString;
|
|
4
4
|
buyTokenSymbol: z.ZodString;
|
|
5
5
|
sellAmount: z.ZodNumber;
|
|
6
|
+
slippage: z.ZodDefault<z.ZodNumber>;
|
|
6
7
|
}, "strip", z.ZodTypeAny, {
|
|
7
8
|
sellTokenSymbol: string;
|
|
8
9
|
buyTokenSymbol: string;
|
|
9
10
|
sellAmount: number;
|
|
11
|
+
slippage: number;
|
|
10
12
|
}, {
|
|
11
13
|
sellTokenSymbol: string;
|
|
12
14
|
buyTokenSymbol: string;
|
|
13
15
|
sellAmount: number;
|
|
16
|
+
slippage?: number | undefined;
|
|
14
17
|
}>;
|
|
15
18
|
export declare const batchSwapSchema: z.ZodObject<{
|
|
16
19
|
sellTokenSymbols: z.ZodArray<z.ZodString, "many">;
|
|
17
20
|
buyTokenSymbols: z.ZodArray<z.ZodString, "many">;
|
|
18
21
|
sellAmounts: z.ZodArray<z.ZodNumber, "many">;
|
|
22
|
+
slippage: z.ZodDefault<z.ZodNumber>;
|
|
19
23
|
}, "strip", z.ZodTypeAny, {
|
|
24
|
+
slippage: number;
|
|
20
25
|
sellTokenSymbols: string[];
|
|
21
26
|
buyTokenSymbols: string[];
|
|
22
27
|
sellAmounts: number[];
|
|
@@ -24,6 +29,7 @@ export declare const batchSwapSchema: z.ZodObject<{
|
|
|
24
29
|
sellTokenSymbols: string[];
|
|
25
30
|
buyTokenSymbols: string[];
|
|
26
31
|
sellAmounts: number[];
|
|
32
|
+
slippage?: number | undefined;
|
|
27
33
|
}>;
|
|
28
34
|
export declare const routeSchema: z.ZodObject<{
|
|
29
35
|
sellTokenSymbol: z.ZodString;
|
package/build/schemas/index.js
CHANGED
|
@@ -7,11 +7,23 @@ export const swapSchema = z.object({
|
|
|
7
7
|
.string()
|
|
8
8
|
.describe("Symbol of the token to buy (e.g., 'ETH', 'USDC')"),
|
|
9
9
|
sellAmount: z.number().min(0.000001).describe('Amount of tokens to sell'),
|
|
10
|
+
slippage: z
|
|
11
|
+
.number()
|
|
12
|
+
.min(0)
|
|
13
|
+
.max(100)
|
|
14
|
+
.default(1)
|
|
15
|
+
.describe('Slippage tolerance in percentage (default: 1)'),
|
|
10
16
|
});
|
|
11
17
|
export const batchSwapSchema = z.object({
|
|
12
18
|
sellTokenSymbols: z.array(z.string()).describe('Symbols of tokens to sell'),
|
|
13
19
|
buyTokenSymbols: z.array(z.string()).describe('Symbols of tokens to buy'),
|
|
14
20
|
sellAmounts: z.array(z.number()).describe('Amounts of tokens to sell'),
|
|
21
|
+
slippage: z
|
|
22
|
+
.number()
|
|
23
|
+
.min(0)
|
|
24
|
+
.max(100)
|
|
25
|
+
.default(1)
|
|
26
|
+
.describe('Slippage tolerance in percentage (default: 1)'),
|
|
15
27
|
});
|
|
16
28
|
export const routeSchema = z.object({
|
|
17
29
|
sellTokenSymbol: z
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAC;AAEpB,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,eAAe,EAAE,CAAC;SACf,MAAM,EAAE;SACR,QAAQ,CAAC,mDAAmD,CAAC;IAChE,cAAc,EAAE,CAAC;SACd,MAAM,EAAE;SACR,QAAQ,CAAC,kDAAkD,CAAC;IAC/D,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,KAAK,CAAC;AAEpB,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;IACjC,eAAe,EAAE,CAAC;SACf,MAAM,EAAE;SACR,QAAQ,CAAC,mDAAmD,CAAC;IAChE,cAAc,EAAE,CAAC;SACd,MAAM,EAAE;SACR,QAAQ,CAAC,kDAAkD,CAAC;IAC/D,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC;IACzE,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,GAAG,CAAC;SACR,OAAO,CAAC,CAAC,CAAC;SACV,QAAQ,CAAC,+CAA+C,CAAC;CAC7D,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,gBAAgB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IAC3E,eAAe,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC;IACzE,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IACtE,QAAQ,EAAE,CAAC;SACR,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,GAAG,CAAC;SACR,OAAO,CAAC,CAAC,CAAC;SACV,QAAQ,CAAC,+CAA+C,CAAC;CAC7D,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,eAAe,EAAE,CAAC;SACf,MAAM,EAAE;SACR,QAAQ,CAAC,mDAAmD,CAAC;IAChE,cAAc,EAAE,CAAC;SACd,MAAM,EAAE;SACR,QAAQ,CAAC,kDAAkD,CAAC;IAC/D,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC;CAC1E,CAAC,CAAC"}
|
package/build/tools/approval.js
CHANGED
|
@@ -1,14 +1,18 @@
|
|
|
1
1
|
import { Contract } from 'starknet';
|
|
2
|
-
import { ERC20_ABI } from '
|
|
3
|
-
import {
|
|
4
|
-
|
|
2
|
+
import { ERC20_ABI } from '@kasarlabs/ask-starknet-core';
|
|
3
|
+
import { getFibrousRouterCtor } from '../lib/utils/fibrousRouterSdk.js';
|
|
4
|
+
const FibrousRouterCtor = getFibrousRouterCtor();
|
|
5
5
|
export class ApprovalService {
|
|
6
6
|
constructor() {
|
|
7
|
-
this.fibrous = new
|
|
7
|
+
this.fibrous = new FibrousRouterCtor();
|
|
8
8
|
}
|
|
9
9
|
async checkAndGetApproveToken(account, tokenAddress, spenderAddress, amount) {
|
|
10
10
|
try {
|
|
11
|
-
const contract = new Contract(
|
|
11
|
+
const contract = new Contract({
|
|
12
|
+
abi: ERC20_ABI,
|
|
13
|
+
address: tokenAddress,
|
|
14
|
+
providerOrAccount: account,
|
|
15
|
+
});
|
|
12
16
|
const allowanceResult = await contract.allowance(account.address, spenderAddress);
|
|
13
17
|
let currentAllowance;
|
|
14
18
|
if (Array.isArray(allowanceResult)) {
|
|
@@ -24,7 +28,7 @@ export class ApprovalService {
|
|
|
24
28
|
}
|
|
25
29
|
const requiredAmount = BigInt(amount);
|
|
26
30
|
if (currentAllowance < requiredAmount) {
|
|
27
|
-
const calldata = await this.fibrous.buildApproveStarknet(
|
|
31
|
+
const calldata = await this.fibrous.buildApproveStarknet(BigInt(amount), tokenAddress);
|
|
28
32
|
return calldata;
|
|
29
33
|
}
|
|
30
34
|
else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"approval.js","sourceRoot":"","sources":["../../src/tools/approval.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,QAAQ,EAAE,MAAM,UAAU,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"approval.js","sourceRoot":"","sources":["../../src/tools/approval.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,QAAQ,EAAE,MAAM,UAAU,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAEzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AAExE,MAAM,iBAAiB,GAAG,oBAAoB,EAAE,CAAC;AAEjD,MAAM,OAAO,eAAe;IAE1B;QACE,IAAI,CAAC,OAAO,GAAG,IAAI,iBAAiB,EAAE,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,uBAAuB,CAC3B,OAAgB,EAChB,YAAoB,EACpB,cAAsB,EACtB,MAAc;QAEd,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC;gBAC5B,GAAG,EAAE,SAAS;gBACd,OAAO,EAAE,YAAY;gBACrB,iBAAiB,EAAE,OAAO;aAC3B,CAAC,CAAC;YAEH,MAAM,eAAe,GAAG,MAAM,QAAQ,CAAC,SAAS,CAC9C,OAAO,CAAC,OAAO,EACf,cAAc,CACf,CAAC;YAEF,IAAI,gBAAwB,CAAC;YAC7B,IAAI,KAAK,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC;gBACnC,gBAAgB,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC3D,CAAC;iBAAM,IACL,OAAO,eAAe,KAAK,QAAQ;gBACnC,eAAe,KAAK,IAAI,EACxB,CAAC;gBACD,MAAM,KAAK,GAAQ,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;gBACrD,gBAAgB,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC9C,CAAC;iBAAM,CAAC;gBACN,gBAAgB,GAAG,MAAM,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC,CAAC;YACxD,CAAC;YAED,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;YAEtC,IAAI,gBAAgB,GAAG,cAAc,EAAE,CAAC;gBACtC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,oBAAoB,CACtD,MAAM,CAAC,MAAM,CAAC,EACd,YAAY,CACb,CAAC;gBAEF,OAAO,QAAQ,CAAC;YAClB,CAAC;iBAAM,CAAC;gBACN,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,4BAA4B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CACvF,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import { Router as FibrousRouter } from 'fibrous-router-sdk';
|
|
2
|
-
import { BigNumber } from '@ethersproject/bignumber';
|
|
1
|
+
import type { Router as FibrousRouter } from 'fibrous-router-sdk';
|
|
3
2
|
import { BatchSwapParams } from '../lib/types/index.js';
|
|
4
|
-
import { onchainWrite } from '@kasarlabs/ask-starknet-core';
|
|
3
|
+
import { onchainWrite, toolResult } from '@kasarlabs/ask-starknet-core';
|
|
5
4
|
export declare class BatchSwapService {
|
|
6
5
|
private env;
|
|
7
6
|
private walletAddress;
|
|
@@ -13,13 +12,13 @@ export declare class BatchSwapService {
|
|
|
13
12
|
extractBatchSwapParams(params: BatchSwapParams): {
|
|
14
13
|
sellTokenAddresses: string[];
|
|
15
14
|
buyTokenAddresses: string[];
|
|
16
|
-
sellAmounts:
|
|
15
|
+
sellAmounts: string[];
|
|
17
16
|
};
|
|
18
17
|
executeSwapTransaction(params: BatchSwapParams): Promise<{
|
|
19
18
|
status: string;
|
|
20
19
|
message: string;
|
|
21
20
|
transactionHash: string;
|
|
22
|
-
sellAmounts: number[] | BigNumber[];
|
|
21
|
+
sellAmounts: number[] | import("@ethersproject/bignumber").BigNumber[];
|
|
23
22
|
sellTokenSymbols: string[];
|
|
24
23
|
buyTokenSymbols: string[];
|
|
25
24
|
receipt: import("starknet").TransactionReceipt;
|
|
@@ -39,17 +38,4 @@ export declare class BatchSwapService {
|
|
|
39
38
|
private monitorSwapStatus;
|
|
40
39
|
}
|
|
41
40
|
export declare const createSwapService: (env: onchainWrite, walletAddress?: string) => BatchSwapService;
|
|
42
|
-
export declare const batchSwapTokens: (env: onchainWrite, params: BatchSwapParams) => Promise<
|
|
43
|
-
status: string;
|
|
44
|
-
message: string;
|
|
45
|
-
transactionHash: string;
|
|
46
|
-
sellAmounts: number[] | BigNumber[];
|
|
47
|
-
sellTokenSymbols: string[];
|
|
48
|
-
buyTokenSymbols: string[];
|
|
49
|
-
receipt: import("starknet").TransactionReceipt;
|
|
50
|
-
events: Event[];
|
|
51
|
-
error?: undefined;
|
|
52
|
-
} | {
|
|
53
|
-
status: string;
|
|
54
|
-
error: any;
|
|
55
|
-
}>;
|
|
41
|
+
export declare const batchSwapTokens: (env: onchainWrite, params: BatchSwapParams) => Promise<toolResult>;
|
package/build/tools/batchSwap.js
CHANGED
|
@@ -1,18 +1,19 @@
|
|
|
1
|
-
import { Account
|
|
1
|
+
import { Account } from 'starknet';
|
|
2
2
|
import { ApprovalService } from './approval.js';
|
|
3
3
|
import { TokenService } from './fetchTokens.js';
|
|
4
|
-
import { Router as FibrousRouter } from 'fibrous-router-sdk';
|
|
5
|
-
import { BigNumber } from '@ethersproject/bignumber';
|
|
6
4
|
import { getV3DetailsPayload } from '../lib/utils/utils.js';
|
|
7
5
|
import { TransactionMonitor } from '../lib/utils/transactionMonitor.js';
|
|
8
|
-
import {
|
|
6
|
+
import { DEFAULT_SLIPPAGE_PERCENTAGE } from '../lib/constants/index.js';
|
|
7
|
+
import { formatToBaseUnits } from '../lib/utils/amount.js';
|
|
8
|
+
import { getFibrousRouterCtor } from '../lib/utils/fibrousRouterSdk.js';
|
|
9
|
+
const FibrousRouterCtor = getFibrousRouterCtor();
|
|
9
10
|
export class BatchSwapService {
|
|
10
11
|
constructor(env, walletAddress, routerInstance) {
|
|
11
12
|
this.env = env;
|
|
12
13
|
this.walletAddress = walletAddress;
|
|
13
14
|
this.tokenService = new TokenService();
|
|
14
15
|
this.approvalService = new ApprovalService();
|
|
15
|
-
this.router = routerInstance || new
|
|
16
|
+
this.router = routerInstance || new FibrousRouterCtor();
|
|
16
17
|
}
|
|
17
18
|
async initialize() {
|
|
18
19
|
await this.tokenService.initializeTokens();
|
|
@@ -23,7 +24,7 @@ export class BatchSwapService {
|
|
|
23
24
|
const sellAmounts = [];
|
|
24
25
|
for (let i = 0; i < params.sellTokenSymbols.length; i++) {
|
|
25
26
|
const { sellToken, buyToken } = this.tokenService.validateTokenPair(params.sellTokenSymbols[i], params.buyTokenSymbols[i]);
|
|
26
|
-
const sellAmount =
|
|
27
|
+
const sellAmount = formatToBaseUnits(params.sellAmounts[i], Number(sellToken.decimals));
|
|
27
28
|
sellTokens.push(sellToken.address);
|
|
28
29
|
buyTokens.push(buyToken.address);
|
|
29
30
|
sellAmounts.push(sellAmount);
|
|
@@ -38,38 +39,41 @@ export class BatchSwapService {
|
|
|
38
39
|
try {
|
|
39
40
|
await this.initialize();
|
|
40
41
|
const provider = this.env.provider;
|
|
41
|
-
const account = new Account(
|
|
42
|
+
const account = new Account({
|
|
43
|
+
provider,
|
|
44
|
+
address: this.walletAddress,
|
|
45
|
+
signer: this.env.account.signer,
|
|
46
|
+
});
|
|
42
47
|
const swapParams = this.extractBatchSwapParams(params);
|
|
43
|
-
const routes = [];
|
|
44
|
-
for (let i = 0; i < swapParams.sellAmounts.length; i++) {
|
|
45
|
-
const route = await this.router.getBestRoute(swapParams.sellAmounts[i], swapParams.sellTokenAddresses[i], swapParams.buyTokenAddresses[i], 'starknet');
|
|
46
|
-
routes.push(route);
|
|
47
|
-
}
|
|
48
|
-
for (let i = 0; i < routes.length; i++) {
|
|
49
|
-
console.error(`${i}. Route information: `, {
|
|
50
|
-
sellToken: params.sellTokenSymbols[i],
|
|
51
|
-
buyToken: params.buyTokenSymbols[i],
|
|
52
|
-
sellAmount: params.sellAmounts[i],
|
|
53
|
-
buyAmount: routes[i] && routes[i].success
|
|
54
|
-
? routes[i].outputAmount
|
|
55
|
-
: 'N/A',
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
48
|
const destinationAddress = account.address;
|
|
59
|
-
const swapCalls = await this.router.buildBatchTransaction(
|
|
60
|
-
|
|
49
|
+
const swapCalls = await this.router.buildBatchTransaction({
|
|
50
|
+
inputAmounts: swapParams.sellAmounts,
|
|
51
|
+
tokenInAddresses: swapParams.sellTokenAddresses,
|
|
52
|
+
tokenOutAddresses: swapParams.buyTokenAddresses,
|
|
53
|
+
slippage: params.slippage ?? DEFAULT_SLIPPAGE_PERCENTAGE,
|
|
54
|
+
destination: destinationAddress,
|
|
55
|
+
chainName: 'starknet',
|
|
56
|
+
});
|
|
57
|
+
if (!swapCalls || !Array.isArray(swapCalls)) {
|
|
61
58
|
throw new Error('Calldata not available for this swap');
|
|
62
59
|
}
|
|
60
|
+
const approvalsByToken = new Map();
|
|
61
|
+
for (let i = 0; i < swapParams.sellTokenAddresses.length; i++) {
|
|
62
|
+
const tokenAddr = swapParams.sellTokenAddresses[i];
|
|
63
|
+
const amount = BigInt(swapParams.sellAmounts[i]);
|
|
64
|
+
approvalsByToken.set(tokenAddr, (approvalsByToken.get(tokenAddr) || 0n) + amount);
|
|
65
|
+
}
|
|
66
|
+
const routerAddress = await this.router.getRouterAddress('starknet');
|
|
63
67
|
let calldata = [];
|
|
64
|
-
for (
|
|
65
|
-
const approveCall = await this.approvalService.checkAndGetApproveToken(account,
|
|
68
|
+
for (const [tokenAddr, totalAmount] of approvalsByToken) {
|
|
69
|
+
const approveCall = await this.approvalService.checkAndGetApproveToken(account, tokenAddr, routerAddress, totalAmount.toString());
|
|
66
70
|
if (approveCall) {
|
|
67
|
-
calldata
|
|
68
|
-
}
|
|
69
|
-
else {
|
|
70
|
-
calldata = [swapCalls[i]];
|
|
71
|
+
calldata.push(approveCall);
|
|
71
72
|
}
|
|
72
73
|
}
|
|
74
|
+
for (const swapCall of swapCalls) {
|
|
75
|
+
calldata.push(swapCall);
|
|
76
|
+
}
|
|
73
77
|
const swapResult = await account.execute(calldata, getV3DetailsPayload());
|
|
74
78
|
const { receipt, events } = await this.monitorSwapStatus(swapResult.transaction_hash);
|
|
75
79
|
return {
|
|
@@ -92,7 +96,7 @@ export class BatchSwapService {
|
|
|
92
96
|
}
|
|
93
97
|
async monitorSwapStatus(txHash) {
|
|
94
98
|
const transactionMonitor = new TransactionMonitor(this.env.provider);
|
|
95
|
-
const receipt = await transactionMonitor.waitForTransaction(txHash, (status) => console.
|
|
99
|
+
const receipt = await transactionMonitor.waitForTransaction(txHash, (status) => console.info('Swap status:', status));
|
|
96
100
|
const events = await transactionMonitor.getTransactionEvents(txHash);
|
|
97
101
|
return { receipt, events };
|
|
98
102
|
}
|
|
@@ -104,15 +108,14 @@ export const createSwapService = (env, walletAddress) => {
|
|
|
104
108
|
return new BatchSwapService(env, walletAddress);
|
|
105
109
|
};
|
|
106
110
|
export const batchSwapTokens = async (env, params) => {
|
|
107
|
-
return {
|
|
108
|
-
status: 'failure',
|
|
109
|
-
error: 'This tool is currently under maintenance. ',
|
|
110
|
-
};
|
|
111
111
|
const accountAddress = env.account?.address;
|
|
112
112
|
try {
|
|
113
113
|
const swapService = createSwapService(env, accountAddress);
|
|
114
114
|
const result = await swapService.executeSwapTransaction(params);
|
|
115
|
-
|
|
115
|
+
if (result.status === 'failure') {
|
|
116
|
+
return { status: 'failure', error: result.error ?? 'Batch swap failed' };
|
|
117
|
+
}
|
|
118
|
+
return { status: 'success', data: result };
|
|
116
119
|
}
|
|
117
120
|
catch (error) {
|
|
118
121
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"batchSwap.js","sourceRoot":"","sources":["../../src/tools/batchSwap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAQ,
|
|
1
|
+
{"version":3,"file":"batchSwap.js","sourceRoot":"","sources":["../../src/tools/batchSwap.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { TokenService } from './fetchTokens.js';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { formatToBaseUnits } from '../lib/utils/amount.js';
|
|
3
|
+
import { getFibrousRouterCtor } from '../lib/utils/fibrousRouterSdk.js';
|
|
4
|
+
const FibrousRouterCtor = getFibrousRouterCtor();
|
|
4
5
|
export class RouteFetchService {
|
|
5
6
|
constructor() {
|
|
6
7
|
this.tokenService = new TokenService();
|
|
7
|
-
this.router = new
|
|
8
|
+
this.router = new FibrousRouterCtor();
|
|
8
9
|
}
|
|
9
10
|
async initialize() {
|
|
10
11
|
await this.tokenService.initializeTokens();
|
|
@@ -13,20 +14,19 @@ export class RouteFetchService {
|
|
|
13
14
|
try {
|
|
14
15
|
await this.initialize();
|
|
15
16
|
const { sellToken, buyToken } = this.tokenService.validateTokenPair(params.sellTokenSymbol, params.buyTokenSymbol);
|
|
16
|
-
const formattedAmount =
|
|
17
|
-
const route = await this.router.getBestRoute(
|
|
17
|
+
const formattedAmount = formatToBaseUnits(params.sellAmount, Number(sellToken.decimals));
|
|
18
|
+
const route = await this.router.getBestRoute({
|
|
19
|
+
amount: formattedAmount,
|
|
20
|
+
tokenInAddress: sellToken.address,
|
|
21
|
+
tokenOutAddress: buyToken.address,
|
|
22
|
+
chainName: 'starknet',
|
|
23
|
+
});
|
|
18
24
|
if (!route?.success) {
|
|
19
25
|
return {
|
|
20
26
|
status: 'failure',
|
|
21
27
|
error: 'No routes available for this swap',
|
|
22
28
|
};
|
|
23
29
|
}
|
|
24
|
-
if (!route) {
|
|
25
|
-
return {
|
|
26
|
-
status: 'failure',
|
|
27
|
-
error: 'No valid route found in quote',
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
30
|
return {
|
|
31
31
|
status: 'success',
|
|
32
32
|
route,
|
|
@@ -42,12 +42,6 @@ export class RouteFetchService {
|
|
|
42
42
|
}
|
|
43
43
|
export const getRouteFibrous = async (params) => {
|
|
44
44
|
try {
|
|
45
|
-
return {
|
|
46
|
-
status: 'failure',
|
|
47
|
-
error: 'This tool is currently under maintenance. ',
|
|
48
|
-
};
|
|
49
|
-
const tokenService = new TokenService();
|
|
50
|
-
await tokenService.initializeTokens();
|
|
51
45
|
const routeService = new RouteFetchService();
|
|
52
46
|
return routeService.fetchRoute(params);
|
|
53
47
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetchRoute.js","sourceRoot":"","sources":["../../src/tools/fetchRoute.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"fetchRoute.js","sourceRoot":"","sources":["../../src/tools/fetchRoute.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAMhD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AAExE,MAAM,iBAAiB,GAAG,oBAAoB,EAAE,CAAC;AAQjD,MAAM,OAAO,iBAAiB;IAI5B;QACE,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;QACvC,IAAI,CAAC,MAAM,GAAG,IAAI,iBAAiB,EAAE,CAAC;IACxC,CAAC;IAED,KAAK,CAAC,UAAU;QACd,MAAM,IAAI,CAAC,YAAY,CAAC,gBAAgB,EAAE,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,MAAuB;QACtC,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;YAExB,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,iBAAiB,CACjE,MAAM,CAAC,eAAe,EACtB,MAAM,CAAC,cAAc,CACtB,CAAC;YAGF,MAAM,eAAe,GAAG,iBAAiB,CACvC,MAAM,CAAC,UAAU,EACjB,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAC3B,CAAC;YACF,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;gBAC3C,MAAM,EAAE,eAAe;gBACvB,cAAc,EAAE,SAAS,CAAC,OAAO;gBACjC,eAAe,EAAE,QAAQ,CAAC,OAAO;gBACjC,SAAS,EAAE,UAAU;aACtB,CAAC,CAAC;YAEH,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC;gBACpB,OAAO;oBACL,MAAM,EAAE,SAAS;oBACjB,KAAK,EAAE,mCAAmC;iBAC3C,CAAC;YACJ,CAAC;YAED,OAAO;gBACL,MAAM,EAAE,SAAS;gBACjB,KAAK;aACN,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,MAAM,EAAE,SAAS;gBACjB,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;aAChE,CAAC;QACJ,CAAC;IACH,CAAC;CACF;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,KAAK,EAClC,MAAuB,EACD,EAAE;IACxB,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,IAAI,iBAAiB,EAAE,CAAC;QAC7C,OAAO,YAAY,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IACzC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,MAAM,EAAE,SAAS;YACjB,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;SAChE,CAAC;IACJ,CAAC;AACH,CAAC,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { Token } from 'fibrous-router-sdk';
|
|
1
|
+
import type { Token } from 'fibrous-router-sdk';
|
|
2
2
|
export declare class TokenService {
|
|
3
3
|
private tokens;
|
|
4
|
+
private readonly aliases;
|
|
4
5
|
initializeTokens(): Promise<void>;
|
|
5
6
|
getToken(symbol: string): Token | undefined;
|
|
6
7
|
validateTokenPair(sellSymbol: string, buySymbol: string): {
|
|
@@ -1,17 +1,27 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { getFibrousRouterCtor } from '../lib/utils/fibrousRouterSdk.js';
|
|
2
|
+
const FibrousRouterCtor = getFibrousRouterCtor();
|
|
2
3
|
export class TokenService {
|
|
4
|
+
constructor() {
|
|
5
|
+
this.aliases = {
|
|
6
|
+
usdc: 'usdc.e',
|
|
7
|
+
};
|
|
8
|
+
}
|
|
3
9
|
async initializeTokens() {
|
|
4
10
|
try {
|
|
5
|
-
const fibrous = new
|
|
6
|
-
const
|
|
7
|
-
this.tokens =
|
|
11
|
+
const fibrous = new FibrousRouterCtor();
|
|
12
|
+
const tokens = await fibrous.supportedTokens('starknet');
|
|
13
|
+
this.tokens =
|
|
14
|
+
tokens instanceof Map
|
|
15
|
+
? tokens
|
|
16
|
+
: new Map(Object.entries(tokens));
|
|
8
17
|
}
|
|
9
18
|
catch (error) {
|
|
10
19
|
throw new Error(`Failed to initialize tokens: ${error.message}`);
|
|
11
20
|
}
|
|
12
21
|
}
|
|
13
22
|
getToken(symbol) {
|
|
14
|
-
|
|
23
|
+
const key = symbol.toLowerCase();
|
|
24
|
+
return this.tokens.get(key) ?? this.tokens.get(this.aliases[key]);
|
|
15
25
|
}
|
|
16
26
|
validateTokenPair(sellSymbol, buySymbol) {
|
|
17
27
|
const sellToken = this.getToken(sellSymbol);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetchTokens.js","sourceRoot":"","sources":["../../src/tools/fetchTokens.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"fetchTokens.js","sourceRoot":"","sources":["../../src/tools/fetchTokens.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AAExE,MAAM,iBAAiB,GAAG,oBAAoB,EAAE,CAAC;AAEjD,MAAM,OAAO,YAAY;IAAzB;QAEmB,YAAO,GAA2B;YAEjD,IAAI,EAAE,QAAQ;SACf,CAAC;IAmCJ,CAAC;IAjCC,KAAK,CAAC,gBAAgB;QACpB,IAAI,CAAC;YACH,MAAM,OAAO,GAAkB,IAAI,iBAAiB,EAAE,CAAC;YACvD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;YACzD,IAAI,CAAC,MAAM;gBACT,MAAM,YAAY,GAAG;oBACnB,CAAC,CAAE,MAA6B;oBAChC,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;QACxC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,gCAAgC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;IAED,QAAQ,CAAC,MAAc;QACrB,MAAM,GAAG,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;IACpE,CAAC;IAED,iBAAiB,CACf,UAAkB,EAClB,SAAiB;QAKjB,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAE1C,IAAI,CAAC,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,cAAc,UAAU,gBAAgB,CAAC,CAAC;QAC1E,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,aAAa,SAAS,gBAAgB,CAAC,CAAC;QAEvE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;IACjC,CAAC;CACF"}
|
package/build/tools/swap.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { onchainWrite } from '@kasarlabs/ask-starknet-core';
|
|
2
|
-
import { Router as FibrousRouter } from 'fibrous-router-sdk';
|
|
1
|
+
import { onchainWrite, toolResult } from '@kasarlabs/ask-starknet-core';
|
|
2
|
+
import type { Router as FibrousRouter } from 'fibrous-router-sdk';
|
|
3
3
|
import { SwapResult, SwapParams } from '../lib/types/index.js';
|
|
4
4
|
export declare class SwapService {
|
|
5
5
|
private env;
|
|
@@ -13,7 +13,4 @@ export declare class SwapService {
|
|
|
13
13
|
private monitorSwapStatus;
|
|
14
14
|
}
|
|
15
15
|
export declare const createSwapService: (env: onchainWrite, walletAddress?: string) => SwapService;
|
|
16
|
-
export declare const swapTokensFibrous: (env: onchainWrite, params: SwapParams) => Promise<
|
|
17
|
-
status: string;
|
|
18
|
-
error: any;
|
|
19
|
-
}>;
|
|
16
|
+
export declare const swapTokensFibrous: (env: onchainWrite, params: SwapParams) => Promise<toolResult>;
|
package/build/tools/swap.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { Account
|
|
1
|
+
import { Account } from 'starknet';
|
|
2
2
|
import { ApprovalService } from './approval.js';
|
|
3
|
-
import {
|
|
3
|
+
import { DEFAULT_SLIPPAGE_PERCENTAGE } from '../lib/constants/index.js';
|
|
4
4
|
import { TokenService } from './fetchTokens.js';
|
|
5
|
-
import { Router as FibrousRouter } from 'fibrous-router-sdk';
|
|
6
|
-
import { BigNumber } from '@ethersproject/bignumber';
|
|
7
5
|
import { getV3DetailsPayload } from '../lib/utils/utils.js';
|
|
8
|
-
import { ContractInteractor } from '../lib/utils/contractInteractor.js';
|
|
9
6
|
import { TransactionMonitor } from '../lib/utils/transactionMonitor.js';
|
|
7
|
+
import { formatToBaseUnits } from '../lib/utils/amount.js';
|
|
8
|
+
import { getFibrousRouterCtor } from '../lib/utils/fibrousRouterSdk.js';
|
|
9
|
+
const FibrousRouterCtor = getFibrousRouterCtor();
|
|
10
10
|
export class SwapService {
|
|
11
11
|
constructor(env, walletAddress, router) {
|
|
12
12
|
this.env = env;
|
|
@@ -14,7 +14,6 @@ export class SwapService {
|
|
|
14
14
|
this.router = router;
|
|
15
15
|
this.tokenService = new TokenService();
|
|
16
16
|
this.approvalService = new ApprovalService();
|
|
17
|
-
this.router = new FibrousRouter();
|
|
18
17
|
}
|
|
19
18
|
async initialize() {
|
|
20
19
|
await this.tokenService.initializeTokens();
|
|
@@ -23,20 +22,30 @@ export class SwapService {
|
|
|
23
22
|
try {
|
|
24
23
|
await this.initialize();
|
|
25
24
|
const provider = this.env.provider;
|
|
26
|
-
const
|
|
27
|
-
|
|
25
|
+
const account = new Account({
|
|
26
|
+
provider,
|
|
27
|
+
address: this.walletAddress,
|
|
28
|
+
signer: this.env.account.signer,
|
|
29
|
+
});
|
|
28
30
|
const { sellToken, buyToken } = this.tokenService.validateTokenPair(params.sellTokenSymbol, params.buyTokenSymbol);
|
|
29
|
-
const
|
|
30
|
-
const route = await this.router.getBestRoute(BigNumber.from(formattedAmount.toString()), sellToken.address, buyToken.address, 'starknet');
|
|
31
|
-
if (!route?.success) {
|
|
32
|
-
throw new Error('No routes available for this swap');
|
|
33
|
-
}
|
|
31
|
+
const inputAmount = formatToBaseUnits(params.sellAmount, Number(sellToken.decimals));
|
|
34
32
|
const destinationAddress = account.address;
|
|
35
|
-
const
|
|
33
|
+
const batchCalls = await this.router.buildBatchTransaction({
|
|
34
|
+
inputAmounts: [inputAmount],
|
|
35
|
+
tokenInAddresses: [sellToken.address],
|
|
36
|
+
tokenOutAddresses: [buyToken.address],
|
|
37
|
+
slippage: params.slippage ?? DEFAULT_SLIPPAGE_PERCENTAGE,
|
|
38
|
+
destination: destinationAddress,
|
|
39
|
+
chainName: 'starknet',
|
|
40
|
+
});
|
|
41
|
+
const swapCall = Array.isArray(batchCalls)
|
|
42
|
+
? batchCalls[0]
|
|
43
|
+
: null;
|
|
36
44
|
if (!swapCall) {
|
|
37
45
|
throw new Error('Calldata not available for this swap');
|
|
38
46
|
}
|
|
39
|
-
const
|
|
47
|
+
const routerAddress = await this.router.getRouterAddress('starknet');
|
|
48
|
+
const approveCalldata = await this.approvalService.checkAndGetApproveToken(account, sellToken.address, routerAddress, inputAmount);
|
|
40
49
|
let calldata = [];
|
|
41
50
|
if (approveCalldata) {
|
|
42
51
|
calldata = [approveCalldata, swapCall];
|
|
@@ -72,7 +81,7 @@ export class SwapService {
|
|
|
72
81
|
}
|
|
73
82
|
async monitorSwapStatus(txHash) {
|
|
74
83
|
const transactionMonitor = new TransactionMonitor(this.env.provider);
|
|
75
|
-
const receipt = await transactionMonitor.waitForTransaction(txHash, (status) => console.
|
|
84
|
+
const receipt = await transactionMonitor.waitForTransaction(txHash, (status) => console.info('Swap status:', status));
|
|
76
85
|
const events = await transactionMonitor.getTransactionEvents(txHash);
|
|
77
86
|
return { receipt, events };
|
|
78
87
|
}
|
|
@@ -81,13 +90,9 @@ export const createSwapService = (env, walletAddress) => {
|
|
|
81
90
|
if (!walletAddress) {
|
|
82
91
|
throw new Error('Wallet address not configured');
|
|
83
92
|
}
|
|
84
|
-
return new SwapService(env, walletAddress, new
|
|
93
|
+
return new SwapService(env, walletAddress, new FibrousRouterCtor());
|
|
85
94
|
};
|
|
86
95
|
export const swapTokensFibrous = async (env, params) => {
|
|
87
|
-
return {
|
|
88
|
-
status: 'failure',
|
|
89
|
-
error: 'This tool is currently under maintenance. ',
|
|
90
|
-
};
|
|
91
96
|
const accountAddress = env.account?.address;
|
|
92
97
|
try {
|
|
93
98
|
const swapService = createSwapService(env, accountAddress);
|
package/build/tools/swap.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swap.js","sourceRoot":"","sources":["../../src/tools/swap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAQ,
|
|
1
|
+
{"version":3,"file":"swap.js","sourceRoot":"","sources":["../../src/tools/swap.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kasarlabs/fibrous-mcp",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.5",
|
|
4
4
|
"main": "index.js",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -10,24 +10,30 @@
|
|
|
10
10
|
"build": "tsc && chmod 755 build/index.js",
|
|
11
11
|
"clean": "rm -rf build",
|
|
12
12
|
"clean:all": "rm -rf build node_modules",
|
|
13
|
-
"start": "node build/index.js"
|
|
13
|
+
"start": "node build/index.js",
|
|
14
|
+
"test": "NODE_OPTIONS=--experimental-vm-modules jest",
|
|
15
|
+
"test:e2e": "NODE_OPTIONS=--experimental-vm-modules jest __tests__/e2e"
|
|
14
16
|
},
|
|
15
17
|
"files": [
|
|
16
18
|
"build"
|
|
17
19
|
],
|
|
18
20
|
"dependencies": {
|
|
19
21
|
"@ethersproject/bignumber": "^5.7.0",
|
|
20
|
-
"@kasarlabs/ask-starknet-core": "0.1.
|
|
22
|
+
"@kasarlabs/ask-starknet-core": "0.1.4",
|
|
21
23
|
"@langchain/core": "^0.3.42",
|
|
22
|
-
"@modelcontextprotocol/sdk": "
|
|
24
|
+
"@modelcontextprotocol/sdk": "1.22.0",
|
|
23
25
|
"dotenv": "^16.4.7",
|
|
24
|
-
"fibrous-router-sdk": "0.
|
|
25
|
-
"starknet": "
|
|
26
|
+
"fibrous-router-sdk": "^1.0.1",
|
|
27
|
+
"starknet": "~8.9.0",
|
|
26
28
|
"winston": "^3.17.0",
|
|
27
29
|
"zod": "^3.24.2"
|
|
28
30
|
},
|
|
29
31
|
"devDependencies": {
|
|
32
|
+
"@jest/globals": "^29.7.0",
|
|
33
|
+
"@types/jest": "^29.5.12",
|
|
30
34
|
"@types/node": "^22.13.10",
|
|
35
|
+
"jest": "^29.7.0",
|
|
36
|
+
"ts-jest": "^29.1.2",
|
|
31
37
|
"typescript": "^5.8.2"
|
|
32
38
|
},
|
|
33
39
|
"keywords": [
|
|
@@ -41,5 +47,5 @@
|
|
|
41
47
|
"publishConfig": {
|
|
42
48
|
"access": "public"
|
|
43
49
|
},
|
|
44
|
-
"gitHead": "
|
|
50
|
+
"gitHead": "0799e2b085e950e5d102822d71a6b122290e8c38"
|
|
45
51
|
}
|
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
export declare const ERC20_ABI: readonly [{
|
|
2
|
-
readonly type: "function";
|
|
3
|
-
readonly name: "name";
|
|
4
|
-
readonly inputs: readonly [];
|
|
5
|
-
readonly outputs: readonly [{
|
|
6
|
-
readonly type: "core::felt252";
|
|
7
|
-
}];
|
|
8
|
-
readonly state_mutability: "view";
|
|
9
|
-
}, {
|
|
10
|
-
readonly type: "function";
|
|
11
|
-
readonly name: "symbol";
|
|
12
|
-
readonly inputs: readonly [];
|
|
13
|
-
readonly outputs: readonly [{
|
|
14
|
-
readonly type: "core::felt252";
|
|
15
|
-
}];
|
|
16
|
-
readonly state_mutability: "view";
|
|
17
|
-
}, {
|
|
18
|
-
readonly type: "function";
|
|
19
|
-
readonly name: "decimals";
|
|
20
|
-
readonly inputs: readonly [];
|
|
21
|
-
readonly outputs: readonly [{
|
|
22
|
-
readonly type: "core::integer::u8";
|
|
23
|
-
}];
|
|
24
|
-
readonly state_mutability: "view";
|
|
25
|
-
}, {
|
|
26
|
-
readonly type: "function";
|
|
27
|
-
readonly name: "balance_of";
|
|
28
|
-
readonly inputs: readonly [{
|
|
29
|
-
readonly name: "account";
|
|
30
|
-
readonly type: "core::starknet::contract_address::ContractAddress";
|
|
31
|
-
}];
|
|
32
|
-
readonly outputs: readonly [{
|
|
33
|
-
readonly type: "core::integer::u256";
|
|
34
|
-
}];
|
|
35
|
-
readonly state_mutability: "view";
|
|
36
|
-
}, {
|
|
37
|
-
readonly type: "function";
|
|
38
|
-
readonly name: "balanceOf";
|
|
39
|
-
readonly inputs: readonly [{
|
|
40
|
-
readonly name: "account";
|
|
41
|
-
readonly type: "core::starknet::contract_address::ContractAddress";
|
|
42
|
-
}];
|
|
43
|
-
readonly outputs: readonly [{
|
|
44
|
-
readonly type: "core::integer::u256";
|
|
45
|
-
}];
|
|
46
|
-
readonly state_mutability: "view";
|
|
47
|
-
}, {
|
|
48
|
-
readonly type: "function";
|
|
49
|
-
readonly name: "allowance";
|
|
50
|
-
readonly inputs: readonly [{
|
|
51
|
-
readonly name: "owner";
|
|
52
|
-
readonly type: "core::starknet::contract_address::ContractAddress";
|
|
53
|
-
}, {
|
|
54
|
-
readonly name: "spender";
|
|
55
|
-
readonly type: "core::starknet::contract_address::ContractAddress";
|
|
56
|
-
}];
|
|
57
|
-
readonly outputs: readonly [{
|
|
58
|
-
readonly type: "core::integer::u256";
|
|
59
|
-
}];
|
|
60
|
-
readonly state_mutability: "view";
|
|
61
|
-
}, {
|
|
62
|
-
readonly type: "function";
|
|
63
|
-
readonly name: "approve";
|
|
64
|
-
readonly inputs: readonly [{
|
|
65
|
-
readonly name: "spender";
|
|
66
|
-
readonly type: "core::starknet::contract_address::ContractAddress";
|
|
67
|
-
}, {
|
|
68
|
-
readonly name: "amount";
|
|
69
|
-
readonly type: "core::integer::u256";
|
|
70
|
-
}];
|
|
71
|
-
readonly outputs: readonly [{
|
|
72
|
-
readonly type: "core::bool";
|
|
73
|
-
}];
|
|
74
|
-
readonly state_mutability: "external";
|
|
75
|
-
}, {
|
|
76
|
-
readonly type: "function";
|
|
77
|
-
readonly name: "transfer";
|
|
78
|
-
readonly inputs: readonly [{
|
|
79
|
-
readonly name: "recipient";
|
|
80
|
-
readonly type: "core::starknet::contract_address::ContractAddress";
|
|
81
|
-
}, {
|
|
82
|
-
readonly name: "amount";
|
|
83
|
-
readonly type: "core::integer::u256";
|
|
84
|
-
}];
|
|
85
|
-
readonly outputs: readonly [{
|
|
86
|
-
readonly type: "core::bool";
|
|
87
|
-
}];
|
|
88
|
-
readonly state_mutability: "external";
|
|
89
|
-
}];
|
|
@@ -1,128 +0,0 @@
|
|
|
1
|
-
export const ERC20_ABI = [
|
|
2
|
-
{
|
|
3
|
-
type: 'function',
|
|
4
|
-
name: 'name',
|
|
5
|
-
inputs: [],
|
|
6
|
-
outputs: [
|
|
7
|
-
{
|
|
8
|
-
type: 'core::felt252',
|
|
9
|
-
},
|
|
10
|
-
],
|
|
11
|
-
state_mutability: 'view',
|
|
12
|
-
},
|
|
13
|
-
{
|
|
14
|
-
type: 'function',
|
|
15
|
-
name: 'symbol',
|
|
16
|
-
inputs: [],
|
|
17
|
-
outputs: [
|
|
18
|
-
{
|
|
19
|
-
type: 'core::felt252',
|
|
20
|
-
},
|
|
21
|
-
],
|
|
22
|
-
state_mutability: 'view',
|
|
23
|
-
},
|
|
24
|
-
{
|
|
25
|
-
type: 'function',
|
|
26
|
-
name: 'decimals',
|
|
27
|
-
inputs: [],
|
|
28
|
-
outputs: [
|
|
29
|
-
{
|
|
30
|
-
type: 'core::integer::u8',
|
|
31
|
-
},
|
|
32
|
-
],
|
|
33
|
-
state_mutability: 'view',
|
|
34
|
-
},
|
|
35
|
-
{
|
|
36
|
-
type: 'function',
|
|
37
|
-
name: 'balance_of',
|
|
38
|
-
inputs: [
|
|
39
|
-
{
|
|
40
|
-
name: 'account',
|
|
41
|
-
type: 'core::starknet::contract_address::ContractAddress',
|
|
42
|
-
},
|
|
43
|
-
],
|
|
44
|
-
outputs: [
|
|
45
|
-
{
|
|
46
|
-
type: 'core::integer::u256',
|
|
47
|
-
},
|
|
48
|
-
],
|
|
49
|
-
state_mutability: 'view',
|
|
50
|
-
},
|
|
51
|
-
{
|
|
52
|
-
type: 'function',
|
|
53
|
-
name: 'balanceOf',
|
|
54
|
-
inputs: [
|
|
55
|
-
{
|
|
56
|
-
name: 'account',
|
|
57
|
-
type: 'core::starknet::contract_address::ContractAddress',
|
|
58
|
-
},
|
|
59
|
-
],
|
|
60
|
-
outputs: [
|
|
61
|
-
{
|
|
62
|
-
type: 'core::integer::u256',
|
|
63
|
-
},
|
|
64
|
-
],
|
|
65
|
-
state_mutability: 'view',
|
|
66
|
-
},
|
|
67
|
-
{
|
|
68
|
-
type: 'function',
|
|
69
|
-
name: 'allowance',
|
|
70
|
-
inputs: [
|
|
71
|
-
{
|
|
72
|
-
name: 'owner',
|
|
73
|
-
type: 'core::starknet::contract_address::ContractAddress',
|
|
74
|
-
},
|
|
75
|
-
{
|
|
76
|
-
name: 'spender',
|
|
77
|
-
type: 'core::starknet::contract_address::ContractAddress',
|
|
78
|
-
},
|
|
79
|
-
],
|
|
80
|
-
outputs: [
|
|
81
|
-
{
|
|
82
|
-
type: 'core::integer::u256',
|
|
83
|
-
},
|
|
84
|
-
],
|
|
85
|
-
state_mutability: 'view',
|
|
86
|
-
},
|
|
87
|
-
{
|
|
88
|
-
type: 'function',
|
|
89
|
-
name: 'approve',
|
|
90
|
-
inputs: [
|
|
91
|
-
{
|
|
92
|
-
name: 'spender',
|
|
93
|
-
type: 'core::starknet::contract_address::ContractAddress',
|
|
94
|
-
},
|
|
95
|
-
{
|
|
96
|
-
name: 'amount',
|
|
97
|
-
type: 'core::integer::u256',
|
|
98
|
-
},
|
|
99
|
-
],
|
|
100
|
-
outputs: [
|
|
101
|
-
{
|
|
102
|
-
type: 'core::bool',
|
|
103
|
-
},
|
|
104
|
-
],
|
|
105
|
-
state_mutability: 'external',
|
|
106
|
-
},
|
|
107
|
-
{
|
|
108
|
-
type: 'function',
|
|
109
|
-
name: 'transfer',
|
|
110
|
-
inputs: [
|
|
111
|
-
{
|
|
112
|
-
name: 'recipient',
|
|
113
|
-
type: 'core::starknet::contract_address::ContractAddress',
|
|
114
|
-
},
|
|
115
|
-
{
|
|
116
|
-
name: 'amount',
|
|
117
|
-
type: 'core::integer::u256',
|
|
118
|
-
},
|
|
119
|
-
],
|
|
120
|
-
outputs: [
|
|
121
|
-
{
|
|
122
|
-
type: 'core::bool',
|
|
123
|
-
},
|
|
124
|
-
],
|
|
125
|
-
state_mutability: 'external',
|
|
126
|
-
},
|
|
127
|
-
];
|
|
128
|
-
//# sourceMappingURL=erc20Abi.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"erc20Abi.js","sourceRoot":"","sources":["../../../src/lib/abis/erc20Abi.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,SAAS,GAAG;IAEvB;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,MAAM;QACZ,MAAM,EAAE,EAAE;QACV,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,eAAe;aACtB;SACF;QACD,gBAAgB,EAAE,MAAM;KACzB;IAED;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,QAAQ;QACd,MAAM,EAAE,EAAE;QACV,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,eAAe;aACtB;SACF;QACD,gBAAgB,EAAE,MAAM;KACzB;IAED;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,UAAU;QAChB,MAAM,EAAE,EAAE;QACV,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,mBAAmB;aAC1B;SACF;QACD,gBAAgB,EAAE,MAAM;KACzB;IAED;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,YAAY;QAClB,MAAM,EAAE;YACN;gBACE,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,mDAAmD;aAC1D;SACF;QACD,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,qBAAqB;aAC5B;SACF;QACD,gBAAgB,EAAE,MAAM;KACzB;IAED;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,WAAW;QACjB,MAAM,EAAE;YACN;gBACE,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,mDAAmD;aAC1D;SACF;QACD,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,qBAAqB;aAC5B;SACF;QACD,gBAAgB,EAAE,MAAM;KACzB;IAED;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,WAAW;QACjB,MAAM,EAAE;YACN;gBACE,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,mDAAmD;aAC1D;YACD;gBACE,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,mDAAmD;aAC1D;SACF;QACD,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,qBAAqB;aAC5B;SACF;QACD,gBAAgB,EAAE,MAAM;KACzB;IAED;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,SAAS;QACf,MAAM,EAAE;YACN;gBACE,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,mDAAmD;aAC1D;YACD;gBACE,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,qBAAqB;aAC5B;SACF;QACD,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,YAAY;aACnB;SACF;QACD,gBAAgB,EAAE,UAAU;KAC7B;IAED;QACE,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,UAAU;QAChB,MAAM,EAAE;YACN;gBACE,IAAI,EAAE,WAAW;gBACjB,IAAI,EAAE,mDAAmD;aAC1D;YACD;gBACE,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,qBAAqB;aAC5B;SACF;QACD,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,YAAY;aACnB;SACF;QACD,gBAAgB,EAAE,UAAU;KAC7B;CACO,CAAC"}
|