edwin-sdk
Version:
SDK for integrating AI agents with DeFi protocols
52 lines (44 loc) • 1.85 kB
text/typescript
import { EdwinPlugin } from '../../core/classes/edwinPlugin';
import { EdwinTool, Chain } from '../../core/types';
import { LuloProtocol } from './luloProtocol';
import { SolanaWalletClient } from '../../core/wallets/solana_wallet';
import { SupplyParametersSchema, WithdrawParametersSchema, SupplyParameters, WithdrawParameters } from './parameters';
export class LuloPlugin extends EdwinPlugin {
constructor(wallet: SolanaWalletClient) {
super('lulo', [new LuloProtocol(wallet)]);
}
getTools(): Record<string, EdwinTool> {
// Combine public and private tools
return {
...this.getPublicTools(),
...this.getPrivateTools(),
};
}
getPublicTools(): Record<string, EdwinTool> {
// Lulo has no public tools
return {};
}
getPrivateTools(): Record<string, EdwinTool> {
const luloProtocol = this.toolProviders.find(provider => provider instanceof LuloProtocol) as LuloProtocol;
return {
luloSupply: {
name: 'lulo_supply',
description: 'Supply assets to Lulo protocol',
schema: SupplyParametersSchema.schema,
execute: async (params: SupplyParameters) => {
return await luloProtocol.supply(params);
},
},
luloWithdraw: {
name: 'lulo_withdraw',
description: 'Withdraw assets from Lulo protocol',
schema: WithdrawParametersSchema.schema,
execute: async (params: WithdrawParameters) => {
return await luloProtocol.withdraw(params);
},
},
};
}
supportsChain = (chain: Chain) => chain.type === 'solana';
}
export const lulo = (wallet: SolanaWalletClient) => new LuloPlugin(wallet);