@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.
Files changed (34) hide show
  1. package/build/lib/constants/index.d.ts +1 -1
  2. package/build/lib/constants/index.js +1 -1
  3. package/build/lib/constants/index.js.map +1 -1
  4. package/build/lib/types/index.d.ts +2 -0
  5. package/build/lib/utils/amount.d.ts +2 -0
  6. package/build/lib/utils/amount.js +12 -0
  7. package/build/lib/utils/amount.js.map +1 -0
  8. package/build/lib/utils/contractInteractor.d.ts +4 -4
  9. package/build/lib/utils/contractInteractor.js +16 -5
  10. package/build/lib/utils/contractInteractor.js.map +1 -1
  11. package/build/lib/utils/fibrousRouterSdk.d.ts +3 -0
  12. package/build/lib/utils/fibrousRouterSdk.js +12 -0
  13. package/build/lib/utils/fibrousRouterSdk.js.map +1 -0
  14. package/build/schemas/index.d.ts +6 -0
  15. package/build/schemas/index.js +12 -0
  16. package/build/schemas/index.js.map +1 -1
  17. package/build/tools/approval.js +10 -6
  18. package/build/tools/approval.js.map +1 -1
  19. package/build/tools/batchSwap.d.ts +5 -19
  20. package/build/tools/batchSwap.js +39 -36
  21. package/build/tools/batchSwap.js.map +1 -1
  22. package/build/tools/fetchRoute.d.ts +1 -1
  23. package/build/tools/fetchRoute.js +11 -17
  24. package/build/tools/fetchRoute.js.map +1 -1
  25. package/build/tools/fetchTokens.d.ts +2 -1
  26. package/build/tools/fetchTokens.js +15 -5
  27. package/build/tools/fetchTokens.js.map +1 -1
  28. package/build/tools/swap.d.ts +3 -6
  29. package/build/tools/swap.js +26 -21
  30. package/build/tools/swap.js.map +1 -1
  31. package/package.json +13 -7
  32. package/build/lib/abis/erc20Abi.d.ts +0 -89
  33. package/build/lib/abis/erc20Abi.js +0 -128
  34. package/build/lib/abis/erc20Abi.js.map +0 -1
@@ -1,2 +1,2 @@
1
- export declare const SLIPPAGE_PERCENTAGE = 0.5;
1
+ export declare const DEFAULT_SLIPPAGE_PERCENTAGE = 1;
2
2
  export declare const DEFAULT_QUOTE_SIZE = 1;
@@ -1,3 +1,3 @@
1
- export const SLIPPAGE_PERCENTAGE = 0.5;
1
+ export const DEFAULT_SLIPPAGE_PERCENTAGE = 1;
2
2
  export const DEFAULT_QUOTE_SIZE = 1;
3
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/constants/index.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,CAAC;AACvC,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC"}
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,2 @@
1
+ import { BigNumber } from '@ethersproject/bignumber';
2
+ export declare function formatToBaseUnits(amount: number | string | BigNumber, decimals: number): 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, EstimateFee } from 'starknet';
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<EstimateFee>;
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<EstimateFee>;
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<EstimateFee>;
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(abi, address, account || this.provider);
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
- return await contract.estimate(method, args);
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 paddedFraction = fraction.padEnd(decimals, '0');
103
- return whole + paddedFraction;
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":"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"}
1
+ {"version":3,"file":"contractInteractor.js","sourceRoot":"","sources":["../../../src/lib/utils/contractInteractor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Router } from 'fibrous-router-sdk';
2
+ export type FibrousRouterCtor = typeof Router;
3
+ export declare function getFibrousRouterCtor(): FibrousRouterCtor;
@@ -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"}
@@ -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;
@@ -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;CAC1E,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;CACvE,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"}
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"}
@@ -1,14 +1,18 @@
1
1
  import { Contract } from 'starknet';
2
- import { ERC20_ABI } from '../lib/abis/erc20Abi.js';
3
- import { Router } from 'fibrous-router-sdk';
4
- import { BigNumber } from '@ethersproject/bignumber';
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 Router();
7
+ this.fibrous = new FibrousRouterCtor();
8
8
  }
9
9
  async checkAndGetApproveToken(account, tokenAddress, spenderAddress, amount) {
10
10
  try {
11
- const contract = new Contract(ERC20_ABI, tokenAddress, account);
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(BigNumber.from(amount), tokenAddress);
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,yBAAyB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAErD,MAAM,OAAO,eAAe;IAE1B;QACE,IAAI,CAAC,OAAO,GAAG,IAAI,MAAM,EAAE,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,uBAAuB,CAC3B,OAAgB,EAChB,YAAoB,EACpB,cAAsB,EACtB,MAAc;QAEd,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,SAAS,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;YAEhE,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,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,EACtB,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
+ {"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: BigNumber[];
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>;
@@ -1,18 +1,19 @@
1
- import { Account, constants } from 'starknet';
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 { SLIPPAGE_PERCENTAGE } from '../lib/constants/index.js';
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 FibrousRouter();
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 = BigNumber.from(params.sellAmounts[i]);
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(provider, this.walletAddress, this.env.account.signer, undefined, constants.TRANSACTION_VERSION.V3);
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(swapParams.sellAmounts, swapParams.sellTokenAddresses, swapParams.buyTokenAddresses, SLIPPAGE_PERCENTAGE, destinationAddress, 'starknet');
60
- if (!swapCalls) {
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 (let i = 0; i < swapCalls.length; i++) {
65
- const approveCall = await this.approvalService.checkAndGetApproveToken(account, swapParams.sellTokenAddresses[i], this.router.STARKNET_ROUTER_ADDRESS, swapParams.sellAmounts[i].toString());
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 = [approveCall, swapCalls[i]];
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.error('Swap status:', status));
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
- return result;
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":"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"}
1
+ {"version":3,"file":"batchSwap.js","sourceRoot":"","sources":["../../src/tools/batchSwap.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { RouteResponse } from 'fibrous-router-sdk';
1
+ import type { RouteResponse } from 'fibrous-router-sdk';
2
2
  import { RouteSchemaType } from '../schemas/index.js';
3
3
  export interface RouteResult {
4
4
  status: 'success' | 'failure';
@@ -1,10 +1,11 @@
1
1
  import { TokenService } from './fetchTokens.js';
2
- import { Router as FibrousRouter } from 'fibrous-router-sdk';
3
- import { BigNumber } from '@ethersproject/bignumber';
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 FibrousRouter();
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 = BigInt(params.sellAmount.toString());
17
- const route = await this.router.getBestRoute(BigNumber.from(formattedAmount.toString()), sellToken.address, buyToken.address, 'starknet');
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;AAChD,OAAO,EAAE,MAAM,IAAI,aAAa,EAAiB,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AASrD,MAAM,OAAO,iBAAiB;IAI5B;QACE,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;QACvC,IAAI,CAAC,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;IACpC,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;YAEF,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;YAE7D,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAC1C,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC,EAC1C,SAAS,CAAC,OAAO,EACjB,QAAQ,CAAC,OAAO,EAChB,UAAU,CACX,CAAC;YAEF,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC;gBACpB,OAAO;oBACL,MAAM,EAAE,SAAS;oBACjB,KAAK,EAAE,mCAAmC;iBAC3C,CAAC;YACJ,CAAC;YAED,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO;oBACL,MAAM,EAAE,SAAS;oBACjB,KAAK,EAAE,+BAA+B;iBACvC,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,OAAO;YACL,MAAM,EAAE,SAAS;YACjB,KAAK,EAAE,4CAA4C;SACpD,CAAC;QAEF,MAAM,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;QACxC,MAAM,YAAY,CAAC,gBAAgB,EAAE,CAAC;QACtC,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
+ {"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 { Router as FibrousRouter } from 'fibrous-router-sdk';
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 FibrousRouter();
6
- const tokensRecord = await fibrous.supportedTokens('starknet');
7
- this.tokens = new Map(Object.entries(tokensRecord));
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
- return this.tokens.get(symbol.toLowerCase());
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":"AAAA,OAAO,EAAS,MAAM,IAAI,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEpE,MAAM,OAAO,YAAY;IAGvB,KAAK,CAAC,gBAAgB;QACpB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,aAAa,EAAE,CAAC;YACpC,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;YAC/D,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;QACtD,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,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;IAC/C,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"}
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"}
@@ -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<SwapResult | {
17
- status: string;
18
- error: any;
19
- }>;
16
+ export declare const swapTokensFibrous: (env: onchainWrite, params: SwapParams) => Promise<toolResult>;
@@ -1,12 +1,12 @@
1
- import { Account, constants } from 'starknet';
1
+ import { Account } from 'starknet';
2
2
  import { ApprovalService } from './approval.js';
3
- import { SLIPPAGE_PERCENTAGE } from '../lib/constants/index.js';
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 contractInteractor = new ContractInteractor(provider);
27
- const account = new Account(provider, this.walletAddress, this.env.account.signer, undefined, constants.TRANSACTION_VERSION.V3);
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 formattedAmount = BigNumber.from(contractInteractor.formatTokenAmount(params.sellAmount.toString(), sellToken.decimals));
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 swapCall = await this.router.buildTransaction(formattedAmount, sellToken.address, buyToken.address, SLIPPAGE_PERCENTAGE, destinationAddress, 'starknet');
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 approveCalldata = await this.approvalService.checkAndGetApproveToken(account, sellToken.address, this.router.STARKNET_ROUTER_ADDRESS, formattedAmount.toString());
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.error('Swap status:', status));
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 FibrousRouter());
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);
@@ -1 +1 @@
1
- {"version":3,"file":"swap.js","sourceRoot":"","sources":["../../src/tools/swap.ts"],"names":[],"mappings":"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"}
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",
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.2",
22
+ "@kasarlabs/ask-starknet-core": "0.1.4",
21
23
  "@langchain/core": "^0.3.42",
22
- "@modelcontextprotocol/sdk": "^1.11.2",
24
+ "@modelcontextprotocol/sdk": "1.22.0",
23
25
  "dotenv": "^16.4.7",
24
- "fibrous-router-sdk": "0.4.3",
25
- "starknet": "^7.6.4",
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": "967038b13c313def17911c88d85601cb208b8cd6"
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"}